source: alternc-slavedns/trunk/slavedns @ 1675

Revision 1675, 2.7 KB checked in by anarcat, 7 years ago (diff)

allow for arbitrary url

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