xref: /dragonfly/etc/rc.d/nisdomain (revision 4caa7869)
1#!/bin/sh
2#
3# Copyright (c) 1993 - 2003 The FreeBSD Project. All rights reserved.
4#
5# Redistribution and use in source and binary forms, with or without
6# modification, are permitted provided that the following conditions
7# are met:
8# 1. Redistributions of source code must retain the above copyright
9#    notice, this list of conditions and the following disclaimer.
10# 2. Redistributions in binary form must reproduce the above copyright
11#    notice, this list of conditions and the following disclaimer in the
12#    documentation and/or other materials provided with the distribution.
13#
14# THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
15# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17# ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
18# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24# SUCH DAMAGE.
25#
26# $FreeBSD: src/etc/rc.d/nisdomain,v 1.1 2003/04/18 17:51:54 mtm Exp $
27# $DragonFly: src/etc/rc.d/nisdomain,v 1.2 2003/11/19 10:32:45 eirikn Exp $
28#
29
30# PROVIDE: nisdomain
31# REQUIRE: SERVERS rpcbind
32# BEFORE:  ypbind ypserv ypxfrd
33# KEYWORD: DragonFly FreeBSD
34
35. /etc/rc.subr
36
37name="nisdomain"
38start_cmd="nisdomain_start"
39stop_cmd=":"
40
41convert_host_conf()
42{
43	host_conf=$1; shift;
44	nsswitch_conf=$1; shift;
45	awk '                                                                   \
46		/^[:blank:]*#/       { next }                                       \
47		/(hosts|local|file)/ { nsswitch[c] = "files"; c++; next }           \
48		/(dns|bind)/         { nsswitch[c] = "dns";   c++; next }           \
49		/nis/                { nsswitch[c] = "nis";   c++; next }           \
50		{ printf "Warning: unrecognized line [%s]", $0 > "/dev/stderr" }    \
51		END {                                                               \
52		printf "hosts: ";                                           \
53		for (i in nsswitch) printf "%s ", nsswitch[i];              \
54			printf "\n";                                                \
55		}' < $host_conf > $nsswitch_conf
56}
57
58generate_host_conf()
59{
60	nsswitch_conf=$1; shift;
61	host_conf=$1; shift;
62
63	awk '
64	BEGIN {
65		xlat["files"] = "hosts";
66		xlat["dns"] = "bind";
67		xlat["nis"] = "nis";
68	cont = 0;
69	}
70	sub(/^[\t ]*hosts:/, "") || cont {
71		if (!cont)
72		srcs = ""
73		sub(/#.*/, "")
74		gsub(/[][]/, " & ")
75		cont = sub(/\\$/, "")
76		srcs = srcs " " $0
77	}
78	END {
79		print "# Auto-generated from nsswitch.conf, do not edit"
80		ns = split(srcs, s)
81		for (n = 1; n <= ns; ++n) {
82		if (s[n] in xlat)
83		print xlat[s[n]]
84	}
85}
86' <$nsswitch_conf >$host_conf
87}
88
89nisdomain_start()
90{
91	# Generate host.conf for compatibility
92	#
93	if [ -f "/etc/nsswitch.conf" ]; then
94		echo 'Generating host.conf.'
95		generate_host_conf /etc/nsswitch.conf /etc/host.conf
96	fi
97
98	# Convert host.conf to nsswitch.conf if necessary
99	#
100	if [ -f "/etc/host.conf" -a ! -f "/etc/nsswitch.conf" ]; then
101		echo ''
102		echo 'Warning: /etc/host.conf is no longer used'
103		echo '  /etc/nsswitch.conf will be created for you'
104		convert_host_conf /etc/host.conf /etc/nsswitch.conf
105	fi
106
107	# Set the domainname if we're using NIS
108	#
109	case ${nisdomainname} in
110	[Nn][Oo]|'')
111		;;
112	*)
113		domainname ${nisdomainname}
114		echo "Setting NIS domain: `/bin/domainname`."
115		;;
116	esac
117}
118
119load_rc_config $name
120run_rc_command "$1"
121