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