root/alternc-slavedns/tags/debian_version_0_9_3_1/slavedns

Revision 1326, 2.9 kB (checked in by lunar, 3 years ago)

alternc-slavedns: changeset ajouter des guedis {} pour suivre le reste

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1 #!/bin/sh
2 # Synchronize a dns server with alternc's remote server :
3 # the configuration files contains definitions for remote masters.
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 #NAMED9=/usr/pkg/etc/rc.d/named9 # BIND9 on NetBSD
12 #NAMED8=/etc/rc.d/named # BIND8 on NetBSD/FreeBSD/OpenBSD
13 #NAMED8=/etc/init.d/named # BIND8 on some Linux
14 #NAMED9=/etc/init.d/named9 # BIND9 on some Linux
15 NAMED8=/etc/init.d/bind # BIND8 on other Linux
16 NAMED9=/etc/init.d/bind9 # BIND9 on other Linux
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 # Main procedure : parse each config file and download the raw slave list.
60 # if something changed in a list, call CreateBindConf $i
61
62 cd $CONFDIR
63
64 RELOAD=""
65
66 for conf in `ls | grep -v slavedns.conf | grep -v '~$' `
67 do
68   # HOST LOGIN PASSWORD MASTERIP
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           # If the slave file has changed, synchronize it.
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               # Now parse the slave file and send it to /etc/bind/slavedns
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     # Main loop on config files
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
Note: See TracBrowser for help on using the browser.