| 1 |
#!/bin/sh |
|---|
| 2 |
|
|---|
| 3 |
|
|---|
| 4 |
|
|---|
| 5 |
CONFDIR=/etc/slavedns |
|---|
| 6 |
CACHEDIR=/var/cache/slavedns |
|---|
| 7 |
BINDDIR=/etc/bind/slavedns |
|---|
| 8 |
BINDINCLUDE=/etc/bind/slavedns.conf |
|---|
| 9 |
WGETRC=${HOME}/.wgetrc |
|---|
| 10 |
|
|---|
| 11 |
|
|---|
| 12 |
|
|---|
| 13 |
|
|---|
| 14 |
|
|---|
| 15 |
NAMED8=/etc/init.d/bind |
|---|
| 16 |
NAMED9=/etc/init.d/bind9 |
|---|
| 17 |
|
|---|
| 18 |
TIMEOUT=5 |
|---|
| 19 |
NAMED="${NAMED8} ${NAMED9}" |
|---|
| 20 |
|
|---|
| 21 |
CreateBindConf() { |
|---|
| 22 |
CFILE="$1" |
|---|
| 23 |
rm -f ${BINDDIR}/${CFILE} |
|---|
| 24 |
while read domain |
|---|
| 25 |
do |
|---|
| 26 |
cat >> ${BINDDIR}/${CFILE}.$$ <<EOF |
|---|
| 27 |
zone "$domain" { |
|---|
| 28 |
type slave; |
|---|
| 29 |
allow-query { any; }; |
|---|
| 30 |
file "$domain"; |
|---|
| 31 |
masters { ${MASTERIP}; }; |
|---|
| 32 |
}; |
|---|
| 33 |
EOF |
|---|
| 34 |
done < ${CACHEDIR}/${CFILE} |
|---|
| 35 |
mv ${BINDDIR}/${CFILE}.$$ ${BINDDIR}/${CFILE} |
|---|
| 36 |
INCLUDE_STR="include \"${BINDDIR}/${CFILE}\";" |
|---|
| 37 |
|
|---|
| 38 |
grep -q "${INCLUDE_STR}" ${BINDINCLUDE} || echo ${INCLUDE_STR} >>${BINDINCLUDE} |
|---|
| 39 |
} |
|---|
| 40 |
|
|---|
| 41 |
SetWgetPass() { |
|---|
| 42 |
USER="$1" |
|---|
| 43 |
PASS="$2" |
|---|
| 44 |
if [ -e ${WGETRC} ]; then |
|---|
| 45 |
mv ${WGETRC} ${WGETRC}.$$ |
|---|
| 46 |
fi |
|---|
| 47 |
touch ${WGETRC} |
|---|
| 48 |
chmod og-r ${WGETRC} |
|---|
| 49 |
cat >> ${WGETRC} <<EOF |
|---|
| 50 |
http_user = ${USER} |
|---|
| 51 |
http_passwd = ${PASS} |
|---|
| 52 |
EOF |
|---|
| 53 |
} |
|---|
| 54 |
|
|---|
| 55 |
ResetWgetConf() { |
|---|
| 56 |
mv -f ${WGETRC}.$$ ${WGETRC} 2>/dev/null || rm -f ${WGETRC} |
|---|
| 57 |
} |
|---|
| 58 |
|
|---|
| 59 |
|
|---|
| 60 |
|
|---|
| 61 |
|
|---|
| 62 |
cd $CONFDIR |
|---|
| 63 |
|
|---|
| 64 |
RELOAD="" |
|---|
| 65 |
|
|---|
| 66 |
for conf in `ls | grep -v slavedns.conf | grep -v '~$' ` |
|---|
| 67 |
do |
|---|
| 68 |
|
|---|
| 69 |
HOST="" |
|---|
| 70 |
MASTERIP="" |
|---|
| 71 |
LOGIN="" |
|---|
| 72 |
PASSWORD="" |
|---|
| 73 |
SSL="" |
|---|
| 74 |
. ./${conf} |
|---|
| 75 |
if [ -z "$HOST" -o -z "$LOGIN" -o -z "$PASSWORD" -o -z "$MASTERIP" ] |
|---|
| 76 |
then |
|---|
| 77 |
echo "error in the config file '${conf}'" >&2 |
|---|
| 78 |
else |
|---|
| 79 |
if [ "$SSL" ] |
|---|
| 80 |
then |
|---|
| 81 |
PROTOCOL="https" |
|---|
| 82 |
else |
|---|
| 83 |
PROTOCOL="http" |
|---|
| 84 |
fi |
|---|
| 85 |
touch ${CACHEDIR}/${conf} |
|---|
| 86 |
rm -f ${CACHEDIR}/${conf}.temp |
|---|
| 87 |
SetWgetPass ${LOGIN} ${PASSWORD} |
|---|
| 88 |
wget ${PROTOCOL}://${HOST}/admin/domlist.php -O ${CACHEDIR}/${conf}.temp -t 1 -T ${TIMEOUT} 2>/dev/null |
|---|
| 89 |
ResetWgetConf |
|---|
| 90 |
if [ -s "${CACHEDIR}/${conf}.temp" ] |
|---|
| 91 |
then |
|---|
| 92 |
|
|---|
| 93 |
if [ "$1" != "-f" ] && diff ${CACHEDIR}/${conf}.temp ${CACHEDIR}/${conf} -q &>/dev/null |
|---|
| 94 |
then |
|---|
| 95 |
echo "no change found for '${conf}'" |
|---|
| 96 |
else |
|---|
| 97 |
echo "change detected for '${conf}', applying" |
|---|
| 98 |
mv -f ${CACHEDIR}/${conf}.temp ${CACHEDIR}/${conf} |
|---|
| 99 |
|
|---|
| 100 |
CreateBindConf ${conf} |
|---|
| 101 |
RELOAD="YES" |
|---|
| 102 |
fi |
|---|
| 103 |
else |
|---|
| 104 |
echo "error: downloaded file for '${conf}' has zero size" >&2 |
|---|
| 105 |
fi |
|---|
| 106 |
fi |
|---|
| 107 |
done |
|---|
| 108 |
|
|---|
| 109 |
if [ "$RELOAD" ] |
|---|
| 110 |
then |
|---|
| 111 |
for script in $NAMED |
|---|
| 112 |
do |
|---|
| 113 |
if [ -x ${script} ] |
|---|
| 114 |
then |
|---|
| 115 |
${script} reload |
|---|
| 116 |
fi |
|---|
| 117 |
done |
|---|
| 118 |
fi |
|---|