Das Script hat folgende Funktionsweise:
Ich sende eine eMail mit dem Betreff $passwort|$domain|$ipadresse. Diese wird von dem Shellscript ausgewertet und in der Form verarbeitet, dass die Datei
/etc/bind/named.conf.local
um einen entsprechenden Eintrag erweitert wird und natürlich ein Zonefile erstellt wird.
Das kuriose ist, dass das (im Prinzip) identische Script auf dem Slave DNS ein anderes Ergebnis liefert also auf dem Master DNS.
Dazu erst einmal die beiden Scripte
Primärer DNS
Code: Select all
#! /bin/sh
## Variblen ### bitte anpassen ###
mail_user=XXXX
mail_pass=XXXXXXXX
mail_server=XXXXXXX
passwd=XXXXXXXXXX
zonefile_skel=/root/adele/zonefile.skel
zonefile_path=/var/cache/bind
bind_config=/etc/bind/named.conf.local
bind_config_debug=/root/adele/named.conf
datum=`date "+%Y%m%d"`
lfdnr=01
mail_add_slv=slavedns@foo.bar
### Ab hier nix mehr aendern ###
serial=$datum$lfdnr
###debugline### echo $serial
mail_title=`( echo user $mail_user
echo pass $mail_pass
echo stat
echo top 1 10
echo dele 1
echo quit ) | nc -v -v $mail_server 110 | grep Subject | cut --characters=10-`
##debugline### echo $mailtitle
if [ "$mail_title" = "" ]; then
exit
fi
IFS="|"
set -- $mail_title
###debugline### echo $1
###debugline### echo $2
###debugline### echo $3
if [ "$1" != "$passwd" ]; then
exit
fi
zonefile=${2}.zone
ipadd=$3
###debugline### echo $zonefile
sed "s/ipadresse/$ipadd/g" $zonefile_skel > $zonefile_path/$zonefile
sed "s/seriennr/$serial/g" $zonefile_path/$zonefile > $zonefile_path/tempfile
mv $zonefile_path/tempfile $zonefile_path/$zonefile
echo "" >> $bind_config
echo "zone "$domain" in {" >> $bind_config
echo "type master;" >> $bind_config
echo "file "$zonefile_path/$zonefile";" >> $bind_config
echo "};" >> $bind_config
echo "erledigt" | mail -s "$passwd|$domain|$ipadd" $mail_add_slv
Code: Select all
#! /bin/sh
## Variblen ### bitte anpassen ###
mail_user=XXXXXX ### der mail user
mail_pass=XXXXXX ### das mail passwort
mail_server=XXXXXX ### der mail server
passwd=XXXXX ### auth passwort
zonefile_path=/var/cache/bind/slave
bind_config=/etc/bind/named.conf.local
bind_config_debug=/root/adele/named.conf
master_dns=123.456.789.123
### Ab hier nix mehr aendern ###
mail_title=`( echo user $mail_user
echo pass $mail_pass
echo stat
echo top 1 10
echo dele 1
echo quit ) | nc -v -v $mail_server 110 | grep Subject | cut --characters=10-`
###debugline### echo $mail_title
if [ "$mail_title" = "" ]; then
exit
fi
IFS="|"
set -- $mail_title
###debugline### echo $1
###debugline### echo $2
if [ "$1" != "$passwd" ]; then
exit
fi
zonefile=${2}.zone
###debugline### echo $zonefile
###debugline### echo $master_dns
###debugline### echo $zonefile_path/$zonefile
echo "" >> $bind_config
echo "zone "$domain" in {" >> $bind_config
echo "type slave;" >> $bind_config
echo "masters { $master_dns; };" >> $bind_config
echo "file "$zonefile_path/$zonefile";" >> $bind_config
echo "};" >> $bind_config
Soweit so gut. Interessant ist jeweils der letzte Teil, der wo named.conf.local erweitert wird. Auf dem Pri. Dns wird folgende Ausgabe erstellt:
Code: Select all
zone "testdomain13.de" in {
type master;
file "/var/cache/bind/testdomain13.de.zone";
};
Code: Select all
" in {testdomain10.de
type slave;
masters { foo.bar; };
.zone";var/cache/bind/slave/testdomain10.de
};
Ein einfaches Testscript
Code: Select all
#!/bin/sh
gaga=${1}.zone
echo $gaga
sh test.sh testdomain.de
gibt testdomain.de.zone zurück.
Auf beiden Systemen läuft Debian Sarge. Alles wurde über den Paketmanager installiert. Die Programmversionen sind also überall gleich.
Ich weiss keinen Rat mehr, warum das gleiche Script auf 2 Systemen unterschiedliche Ergebnisse liefert. Wer weiss Rat?