xref: /freebsd/contrib/openresolv/named.in (revision 9af6c78c)
1587392a5SHajimu UMEMOTO#!/bin/sh
23f2a60a1SPedro F. Giffuni# Copyright (c) 2007-2016 Roy Marples
3587392a5SHajimu UMEMOTO# All rights reserved
4587392a5SHajimu UMEMOTO
5587392a5SHajimu UMEMOTO# named subscriber for resolvconf
6587392a5SHajimu UMEMOTO
7587392a5SHajimu UMEMOTO# Redistribution and use in source and binary forms, with or without
8587392a5SHajimu UMEMOTO# modification, are permitted provided that the following conditions
9587392a5SHajimu UMEMOTO# are met:
10587392a5SHajimu UMEMOTO#     * Redistributions of source code must retain the above copyright
11587392a5SHajimu UMEMOTO#       notice, this list of conditions and the following disclaimer.
12587392a5SHajimu UMEMOTO#     * Redistributions in binary form must reproduce the above
13587392a5SHajimu UMEMOTO#       copyright notice, this list of conditions and the following
14587392a5SHajimu UMEMOTO#       disclaimer in the documentation and/or other materials provided
15587392a5SHajimu UMEMOTO#       with the distribution.
16587392a5SHajimu UMEMOTO#
17587392a5SHajimu UMEMOTO# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18587392a5SHajimu UMEMOTO# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19587392a5SHajimu UMEMOTO# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20587392a5SHajimu UMEMOTO# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21587392a5SHajimu UMEMOTO# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22587392a5SHajimu UMEMOTO# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23587392a5SHajimu UMEMOTO# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24587392a5SHajimu UMEMOTO# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25587392a5SHajimu UMEMOTO# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26587392a5SHajimu UMEMOTO# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27587392a5SHajimu UMEMOTO# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28587392a5SHajimu UMEMOTO
29587392a5SHajimu UMEMOTO[ -f "@SYSCONFDIR@"/resolvconf.conf ] || exit 0
30587392a5SHajimu UMEMOTO. "@SYSCONFDIR@/resolvconf.conf" || exit 1
31*9af6c78cSPedro F. Giffuni[ -z "${named_zones}${named_options}" ] && exit 0
32d7149f4eSGlen Barber[ -z "$RESOLVCONF" ] && eval "$(@SBINDIR@/resolvconf -v)"
33a02aba5fSHiroki SatoNL="
34a02aba5fSHiroki Sato"
35587392a5SHajimu UMEMOTO
36587392a5SHajimu UMEMOTO# Platform specific kludges
37*9af6c78cSPedro F. Giffuniif [ -z "${named_service}${named_restart}" ] &&
38*9af6c78cSPedro F. Giffuni   [ -d "$RCDIR" ] && ! [ -x "$RCDIR"/named ]
39587392a5SHajimu UMEMOTOthen
403f2a60a1SPedro F. Giffuni	if [ -x "$RCDIR"/bind9 ]; then
41587392a5SHajimu UMEMOTO		# Debian and derivatives
42587392a5SHajimu UMEMOTO		named_service=bind9
433f2a60a1SPedro F. Giffuni	elif [ -x "$RCDIR"/rc.bind ]; then
44d7149f4eSGlen Barber		# Slackware
45d7149f4eSGlen Barber		named_service=rc.bind
46587392a5SHajimu UMEMOTO	fi
47587392a5SHajimu UMEMOTOfi
48587392a5SHajimu UMEMOTO: ${named_service:=named}
493f2a60a1SPedro F. Giffuni
503f2a60a1SPedro F. Giffuni: ${named_pid:=/var/run/$named_service.pid}
513f2a60a1SPedro F. Giffuni[ -s "$named_pid" ] || named_pid=/var/run/$named_service/$named_service.pid
523f2a60a1SPedro F. Giffuni[ -s "$named_pid" ] || unset named_pid
533f2a60a1SPedro F. Giffuni
54a02aba5fSHiroki Satonewoptions="# Generated by resolvconf$NL"
55587392a5SHajimu UMEMOTOnewzones="$newoptions"
56587392a5SHajimu UMEMOTO
57587392a5SHajimu UMEMOTOforward=
58587392a5SHajimu UMEMOTOfor n in $NAMESERVERS; do
59587392a5SHajimu UMEMOTO	case "$forward" in
60a02aba5fSHiroki Sato	*"$NL	$n;"*);;
61a02aba5fSHiroki Sato	*) forward="$forward$NL	$n;";;
62587392a5SHajimu UMEMOTO	esac
63587392a5SHajimu UMEMOTOdone
64587392a5SHajimu UMEMOTOif [ -n "$forward" ]; then
65a02aba5fSHiroki Sato	newoptions="${newoptions}forward first;${NL}forwarders {$forward${NL}};$NL"
66587392a5SHajimu UMEMOTOfi
67587392a5SHajimu UMEMOTO
68587392a5SHajimu UMEMOTOfor d in $DOMAINS; do
69a02aba5fSHiroki Sato	newzones="${newzones}zone \"${d%%:*}\" {$NL"
70a02aba5fSHiroki Sato	newzones="$newzones	type forward;$NL"
71a02aba5fSHiroki Sato	newzones="$newzones	forward first;$NL	forwarders {$NL"
72587392a5SHajimu UMEMOTO	ns="${d#*:}"
73587392a5SHajimu UMEMOTO	while [ -n "$ns" ]; do
74a02aba5fSHiroki Sato		newzones="$newzones		${ns%%,*};$NL"
75587392a5SHajimu UMEMOTO		[ "$ns" = "${ns#*,}" ] && break
76587392a5SHajimu UMEMOTO		ns="${ns#*,}"
77587392a5SHajimu UMEMOTO	done
78a02aba5fSHiroki Sato	newzones="$newzones	};$NL};$NL"
79587392a5SHajimu UMEMOTOdone
80587392a5SHajimu UMEMOTO
81d7149f4eSGlen Barber# Try to ensure that config dirs exist
82d7149f4eSGlen Barberif type config_mkdirs >/dev/null 2>&1; then
83d7149f4eSGlen Barber	config_mkdirs "$named_options" "$named_zones"
84d7149f4eSGlen Barberelse
85d7149f4eSGlen Barber	@SBINDIR@/resolvconf -D "$named_options" "$named_zones"
86d7149f4eSGlen Barberfi
87d7149f4eSGlen Barber
88587392a5SHajimu UMEMOTO# No point in changing files or reloading bind if the end result has not
89587392a5SHajimu UMEMOTO# changed
90587392a5SHajimu UMEMOTOchanged=false
91587392a5SHajimu UMEMOTOif [ -n "$named_options" ]; then
92587392a5SHajimu UMEMOTO	if [ ! -f "$named_options" ] || \
93a02aba5fSHiroki Sato		[ "$(cat "$named_options")" != "$(printf %s "$newoptions")" ]
94587392a5SHajimu UMEMOTO	then
95a02aba5fSHiroki Sato		printf %s "$newoptions" >"$named_options"
96587392a5SHajimu UMEMOTO		changed=true
97587392a5SHajimu UMEMOTO	fi
98587392a5SHajimu UMEMOTOfi
99587392a5SHajimu UMEMOTOif [ -n "$named_zones" ]; then
100587392a5SHajimu UMEMOTO	if [ ! -f "$named_zones" ] || \
101a02aba5fSHiroki Sato		[ "$(cat "$named_zones")" != "$(printf %s "$newzones")" ]
102587392a5SHajimu UMEMOTO	then
103a02aba5fSHiroki Sato		printf %s "$newzones" >"$named_zones"
104587392a5SHajimu UMEMOTO		changed=true
105587392a5SHajimu UMEMOTO	fi
106587392a5SHajimu UMEMOTOfi
107587392a5SHajimu UMEMOTO
1083f2a60a1SPedro F. Giffuni# named does not seem to work with SIGHUP which is a same
109587392a5SHajimu UMEMOTOif $changed; then
1103f2a60a1SPedro F. Giffuni	if [ -n "$named_restart" ]; then
111587392a5SHajimu UMEMOTO		eval $named_restart
1123f2a60a1SPedro F. Giffuni	elif [ -n "$RESTARTCMD" ]; then
1133f2a60a1SPedro F. Giffuni		set -- ${named_service}
114*9af6c78cSPedro F. Giffuni		eval "$RESTARTCMD"
1153f2a60a1SPedro F. Giffuni	else
1163f2a60a1SPedro F. Giffuni		@SBINDIR@/resolvconf -r ${named_service}
1173f2a60a1SPedro F. Giffuni	fi
118587392a5SHajimu UMEMOTOfi
119