Remove exe props.
[openresolv] / named.in
1 #!/bin/sh
2 # Copyright 2007 Roy Marples <roy@marples.name>
3 # All rights reserved
4
5 # named updater for resolvconf
6
7 # Redistribution and use in source and binary forms, with or without
8 # modification, are permitted provided that the following conditions
9 # are met:
10 #     * Redistributions of source code must retain the above copyright
11 #       notice, this list of conditions and the following disclaimer.
12 #     * Redistributions in binary form must reproduce the above
13 #       copyright notice, this list of conditions and the following
14 #       disclaimer in the documentation and/or other materials provided
15 #       with the distribution.
16 #
17 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
29 # This is very important!
30 # We assume that we are a local dns cache - after all, why would a server
31 # use resolvconf?
32 # Now that we have assumed this, we also assume that generic DHCP clients
33 # will enter their domains and search domains ONLY in the "search" field
34 # in their resolv.confs and VPN clients will put the domain they are for
35 # into the domain field only.
36 # This allows bind to forward domains for a specific VPN domain to the
37 # VPN nameserver and everything else to the standard name servers.
38
39 # The bind config needs to be setup to include our file
40 #options {
41 #   include "resolvconf-options.conf";
42 #};
43 #include "resolvconf-zones.conf";
44
45 # The last step is to configure dns configuration for /etc/resolv.conf
46 #echo "nameserver 127.0.0.1" > /etc/resolvconf/resolv.conf.d/base
47 # On some platforms, like FreeBSD, resolvconf is in /usr/local so it becomes
48 #echo "nameserver 127.0.0.1" > /usr/local/etc/resolvconf/resolv.conf.d/base
49
50 # Load our variables from resolvconf
51 eval "$(resolvconf -v)"
52
53 # If our dir doesn't exist then don't do anything
54 NAMEDB=/etc/namedb
55 [ -d "${NAMEDB}" ] || NAMEDB="/etc/bind"
56 [ -d "${NAMEDB}" ] || exit 0
57
58 NAMEDOPTIONS="${NAMEDB}/resolvconf-options.conf"
59 NAMEDZONES="${NAMEDB}/resolvconf-zones.conf"
60
61 NEWOPTIONS="# Generated by resolvconf\n"
62 NEWZONES="${NEWOPTIONS}"
63 FORWARD=
64 for N in ${NAMESERVERS}; do
65         case "${FORWARD}" in
66                 *"\n\t${N};"*);;
67                 *) FORWARD="${FORWARD}\n\t${N};";;
68         esac
69 done
70 if [ -n "${FORWARD}" ]; then
71         NEWOPTIONS="${NEWOPTIONS}forward first;\nforwarders {${FORWARD}\n};\n"
72 fi
73
74 for D in ${DOMAINS}; do
75         NEWZONES="${NEWZONES}zone \"${D%%:*}\" {\n"
76         NEWZONES="${NEWZONES}\ttype forward;\n\tforward first;\n\tforwarders {\n"
77         NS="${D#*:}"
78         while [ -n "${NS}" ]; do
79                 NEWZONES="${NEWZONES}\t\t${NS%%,*};\n"
80                 [ "${NS}" = "${NS#*,}" ] && break
81                 NS="${NS#*,}"
82         done
83         NEWZONES="${NEWZONES}\t};\n};\n"
84 done
85
86 # No point in changing files or reloading bind if the end result has not
87 # changed
88 RELOAD="no"
89 if [ -e "${NAMEDOPTIONS}" ]; then 
90         if [ "$(cat "${NAMEDOPTIONS}")" != "$(printf "${NEWOPTIONS}")" ]; then
91                 printf "${NEWOPTIONS}" > "${NAMEDOPTIONS}"
92                 RELOAD="yes"
93         fi
94 else
95         printf "${NEWOPTIONS}" > "${NAMEDOPTIONS}"
96         RELOAD="yes"
97 fi
98 if [ -e "${NAMEDZONES}" ]; then
99         if [ "$(cat "${NAMEDZONES}")" != "$(printf "${NEWZONES}")" ]; then
100                 printf "${NEWZONES}" > "${NAMEDZONES}"
101                 RELOAD="yes"
102         fi
103 else
104         printf "${NEWZONES}" > "${NAMEDZONES}"
105         RELOAD="yes"
106 fi
107
108 [ "${RELOAD}" = "yes" ] && resolvconf -s named restart
109
110 exit 0