xref: /dragonfly/etc/rc.d/nisdomain (revision 9c600e7d)
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.1 2003/07/24 06:35:37 dillon 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 '
64BEGIN {
65    xlat["files"] = "hosts";
66    xlat["dns"] = "bind";
67    xlat["nis"] = "nis";
68    cont = 0;
69}
70sub(/^[\t ]*hosts:/, "") || cont {
71    if (!cont)
72        srcs = ""
73    sub(/#.*/, "")
74    gsub(/[][]/, " & ")
75    cont = sub(/\\$/, "")
76    srcs = srcs " " $0
77}
78END {
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