[packages] djbdns: use network.sh to find ip addresses
[openwrt/svn-archive/archive.git] / net / djbdns / files / dnscache.init
1 #!/bin/sh /etc/rc.common
2 # Copyright (C) 2007-2012 OpenWrt.org
3
4 # Preferably start dnscache after udhcpd/dnsmasq, to be sure /etc/resolv.conf is set correctly. dnsmasq is at S60, so dnscache is put at S65 as seen below. If /etc/resolv.conf is not used, then dnscache may be started at S47, just after the firewall has been set up.
5 START=65
6 PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
7 DAEMON=/usr/bin/dnscache
8 NAME=dnscache
9 DESC="Caching name server"
10
11 ROOT="/tmp/dnscache"
12 resolvfile="/etc/resolv.conf"
13
14 start() {
15 echo "Starting $DESC: $NAME"
16 config_load djbdns
17 config_foreach get_userids global
18 mkdir -p $ROOT
19 cp -fa /etc/dnscache/* $ROOT
20 rm -f $ROOT/resolvers
21 rm -f $ROOT/ignoreip
22 chown -R $UID:$GID $ROOT
23 config_foreach start_dnscache dnscache
24 }
25
26 get_userids() {
27 local cfg="$1"
28 config_get UID "$cfg" runasuser
29 config_get GID "$cfg" runasgroup
30 UID=`id -u $UID`
31 GID=`id -g $GID`
32 }
33
34 append_server() {
35 echo $1 >> $ROOT/resolvers
36 }
37
38 append_ignore() {
39 echo $1 >> $ROOT/ignoreip
40 }
41
42 start_dnscache() {
43 local cfg="$1"
44 config_get logging "$cfg" logging
45 config_get useresolvconf "$cfg" useresolvconf
46 config_get iface "$cfg" interface
47 config_get ifacesend "$cfg" interfacesend
48 config_get defaultallowif "$cfg" defaultallowif
49 config_get CACHESIZE "$cfg" cachesize
50 config_get FORWARDONLY "$cfg" forwardonly
51 config_get HIDETTL "$cfg" hidettl
52 config_list_foreach "$cfg" "resolver" append_server
53 config_get useignore "$cfg" useignore
54 if [ "$useignore" == "1" ] ; then
55 config_list_foreach "$cfg" "ignoreip" append_ignore
56 fi
57 # Add some interface network addresses to list of allowed IP addresses (assumes /24 networks)
58 . /lib/functions/network.sh
59 if [ -n "$defaultallowif" ] ; then
60 for myinterface in `echo $defaultallowif`; do
61 network_get_ipaddr addr $myinterface || continue
62 # the next line strips the last octet from the ip address
63 addr=`echo $addr|sed 's/.[0-9]\+$//'`
64 touch $ROOT/ip/$addr
65 echo Adding $ROOT/ip/$addr
66 done
67 fi
68 # Translate listen interface names to IP addresses
69 network_get_ipaddr IP "$iface"
70 # Translate send interface name to an IP address
71 network_get_ipaddr IPSEND "$ifacesend"
72 # Unset HIDETTL if equal to 0
73 if [ "$HIDETTL" == "0" ] ; then
74 export -n HIDETTL
75 fi
76 # If forwardingonly set then activate list of resolvers
77 if [ "$FORWARDONLY" == "0" ] ; then
78 # Unset FORWARDONLY if equal to '0'
79 export -n FORWARDONLY
80 else
81 # Use either fixed list of dnsservers or resolv.conf data
82 if [ "$useresolvconf" == "1" ] ; then
83 if [ -s "$resolvfile" ] ; then
84 cat $resolvfile|grep nameserver|sed 's/nameserver //g' > $ROOT/resolvers
85 else
86 echo Error: $resolvfile does not exist.
87 exit 1
88 fi
89 fi
90 if [ ! "`cat $ROOT/resolvers|wc -L`" == "0" ] ; then
91 cp -f $ROOT/resolvers $ROOT/servers/@ > /dev/null 2>&1
92 else
93 echo Error: No resolvers are defined.
94 exit 1
95 fi
96 fi
97 export IP
98 export ROOT
99 # dnscache likes to receive a 128 byte random seed
100 dd if=/dev/urandom of=$ROOT/randomseed bs=128 count=1 > /dev/null 2>&1
101 if [ "$DEBUG" == 1 ] ; then
102 $DAEMON < /$ROOT/randomseed
103 elif [ "$logging" == '1' ] ; then
104 $DAEMON 2>&1 < /$ROOT/randomseed | logger -p local1.info -t $NAME &
105 else
106 $DAEMON > /dev/null 2>&1 < /$ROOT/randomseed &
107 fi
108 }
109
110 stop() {
111 echo -n "Stopping $DESC: $NAME"
112 kill `pidof $NAME|sed "s/$$//g"` > /dev/null 2>&1
113 echo " ."
114 }
115
116 restart() {
117 echo "Restarting $DESC: $NAME... "
118 stop
119 sleep 2
120 start
121 }
122