- remove prototype for main
[dragonfly.git] / etc / rc.d / nisdomain
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.3 2004/01/27 00:42:45 rob Exp $
28 #
29
30 # PROVIDE: nisdomain
31 # REQUIRE: SERVERS rpcbind
32 # BEFORE:  ypbind ypserv ypxfrd
33 # KEYWORD: DragonFly
34
35 . /etc/rc.subr
36
37 name="nisdomain"
38 start_cmd="nisdomain_start"
39 stop_cmd=":"
40
41 convert_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
58 generate_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
89 nisdomain_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
119 load_rc_config $name
120 run_rc_command "$1"