]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - etc/rc.d/nsswitch
This commit was generated by cvs2svn to compensate for changes in r145516,
[FreeBSD/FreeBSD.git] / etc / rc.d / nsswitch
1 #!/bin/sh
2 #
3 # Copyright (c) 1993 - 2004 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$
27 #
28
29 # PROVIDE: nsswitch
30 # REQUIRE: root
31 # BEFORE:  NETWORK
32
33 . /etc/rc.subr
34
35 name="nsswitch"
36 start_cmd="nsswitch_start"
37 stop_cmd=":"
38
39 convert_host_conf()
40 {
41     host_conf=$1; shift;
42     nsswitch_conf=$1; shift;
43     awk '                                                                   \
44         /^[:blank:]*#/       { next }                                       \
45         /(hosts|local|file)/ { nsswitch[c] = "files"; c++; next }           \
46         /(dns|bind)/         { nsswitch[c] = "dns";   c++; next }           \
47         /nis/                { nsswitch[c] = "nis";   c++; next }           \
48         { printf "Warning: unrecognized line [%s]", $0 > "/dev/stderr" }    \
49         END {                                                               \
50                 printf "hosts: ";                                           \
51                 for (i in nsswitch) printf "%s ", nsswitch[i];              \
52                 printf "\n";                                                \
53         }' < $host_conf > $nsswitch_conf
54 }
55
56 generate_nsswitch_conf()
57 {
58     nsswitch_conf=$1; shift;
59
60     cat >$nsswitch_conf <<EOF
61 group: compat
62 group_compat: nis
63 hosts: files dns
64 networks: files
65 passwd: compat
66 passwd_compat: nis
67 shells: files
68 EOF
69 }
70
71 generate_host_conf()
72 {
73     nsswitch_conf=$1; shift;
74     host_conf=$1; shift;
75
76     awk '
77 BEGIN {
78     xlat["files"] = "hosts";
79     xlat["dns"] = "bind";
80     xlat["nis"] = "nis";
81     cont = 0;
82 }
83 sub(/^[\t ]*hosts:/, "") || cont {
84     if (!cont)
85         srcs = ""
86     sub(/#.*/, "")
87     gsub(/[][]/, " & ")
88     cont = sub(/\\$/, "")
89     srcs = srcs " " $0
90 }
91 END {
92     print "# Auto-generated from nsswitch.conf, do not edit"
93     ns = split(srcs, s)
94     for (n = 1; n <= ns; ++n) {
95         if (s[n] in xlat)
96             print xlat[s[n]]
97     }
98 }
99 ' <$nsswitch_conf >$host_conf
100 }
101
102 nsswitch_start()
103 {
104         # Convert host.conf to nsswitch.conf if necessary
105         #
106         if [ -f "/etc/host.conf" -a ! -f "/etc/nsswitch.conf" ]; then
107                 echo ''
108                 echo 'Warning: /etc/host.conf is no longer used'
109                 echo '  /etc/nsswitch.conf will be created for you'
110                 convert_host_conf /etc/host.conf /etc/nsswitch.conf
111         fi
112
113         # Generate default nsswitch.conf if none exists
114         #
115         if [ ! -f "/etc/nsswitch.conf" ]; then
116                 echo 'Generating nsswitch.conf.'
117                 generate_nsswitch_conf /etc/nsswitch.conf
118         fi
119
120         # Generate host.conf for compatibility
121         #
122         if [ ! -f "/etc/host.conf" ]; then
123                 echo 'Generating host.conf.'
124                 generate_host_conf /etc/nsswitch.conf /etc/host.conf
125         fi
126
127 }
128
129 load_rc_config $name
130 run_rc_command "$1"