Script liefert auf verschiedenen Systemen andere Ergebnisse

Bash, Shell, PHP, Python, Perl, CGI
overfly
Posts: 14
Joined: 2002-11-06 18:20
Location: Eifel ;)

Script liefert auf verschiedenen Systemen andere Ergebnisse

Post by overfly » 2005-08-06 15:14

Mich beschäftigt zur Zeit in kurioses Problem in der Shell.

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
Sekundärer DNS:

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";
};
Stimmt, passt, läuft, wunderbar! Aber auf dem Sec. Dns passiert folgendes:

Code: Select all

" in {testdomain10.de
type slave;
masters { foo.bar; };
.zone";var/cache/bind/slave/testdomain10.de
};
Wie man sieht. Ziemlich verdreht und einiges ausgelassen.

Ein einfaches Testscript

Code: Select all

#!/bin/sh

gaga=${1}.zone
echo $gaga
und der Aufruf

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?

overfly
Posts: 14
Joined: 2002-11-06 18:20
Location: Eifel ;)

Re: Script liefert auf verschiedenen Systemen andere Ergebnisse

Post by overfly » 2005-08-06 21:16

Problem gelöst.

Erstmal ein riesiges Danke an Darkman aus #linux vom insiderz-irc.

Das Problem bestand wohl darin, dass am Ende der Variable $2 noch ein rn hing.

Code: Select all

domain=$(echo $2 | perl -npe 's/(r|n)//g')

zonefile=${domain}.zone
löst das Problem und alles funktioniert.

Dieser Beitrag kann geschlossen und archiviert werden (sofern er dessen würdig ist :wink:)