Break out and rewrite the network setup scripts.
o /etc/network.subr contains common subroutines used for seting up network interfaces o rc.d/hostname sets the hostname if not already set o rc.d/nisdomain sets the nis domain *after* rpcbind but before the yp* daemons. This fixes issues with temporary hangs when looking up informaion in nis before it's ready. o rc.d/netif brings network interfaces (minus dhcp) up. o rc.d/network1 has been disabled and will be retired before RELENG_5. It will be replaced by rc.d/netif Approved by: markm (mentor)
This commit is contained in:
parent
8cd40467dc
commit
bcd5bc12a0
@ -10,7 +10,7 @@ BIN1= amd.map apmd.conf auth.conf \
|
||||
devd.conf dhclient.conf disktab fbtab ftpusers gettytab group \
|
||||
hosts hosts.allow hosts.equiv hosts.lpd \
|
||||
inetd.conf login.access login.conf \
|
||||
mac.conf motd netconfig networks newsyslog.conf \
|
||||
mac.conf motd netconfig network.subr networks newsyslog.conf \
|
||||
phones printcap profile protocols \
|
||||
rc rc.atm rc.devfs rc.diskless1 rc.diskless2 rc.firewall rc.firewall6 \
|
||||
rc.network rc.network6 rc.pccard rc.sendmail rc.serial rc.shutdown \
|
||||
|
336
etc/network.subr
336
etc/network.subr
@ -1,67 +1,121 @@
|
||||
#!/bin/sh -x
|
||||
#
|
||||
# Copyright (c) 2003 The FreeBSD Project. All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
|
||||
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
|
||||
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
# SUCH DAMAGE.
|
||||
#
|
||||
# $FreeBSD$
|
||||
#
|
||||
|
||||
# PROVIDE: network1
|
||||
# REQUIRE: atm1 ipfilter mountcritlocal pccard serial sppp sysctl tty
|
||||
# KEYWORD: FreeBSD
|
||||
#
|
||||
# Subroutines commonly used from network startup scripts.
|
||||
# Requires that rc.conf be loaded first.
|
||||
#
|
||||
|
||||
. /etc/rc.subr
|
||||
|
||||
name="network1"
|
||||
start_cmd="network_start"
|
||||
stop_cmd="network_stop"
|
||||
|
||||
convert_host_conf()
|
||||
# ifconfig_up if
|
||||
# Evaluate ifconfig(8) arguments for interface $if and
|
||||
# run ifconfig(8) with those arguments. It returns 0 if
|
||||
# arguments were found and executed or 1 if the interface
|
||||
# had no arguments.
|
||||
#
|
||||
ifconfig_up()
|
||||
{
|
||||
host_conf=$1; shift;
|
||||
nsswitch_conf=$1; shift;
|
||||
awk ' \
|
||||
/^[:blank:]*#/ { next } \
|
||||
/(hosts|local|file)/ { nsswitch[c] = "files"; c++; next } \
|
||||
/(dns|bind)/ { nsswitch[c] = "dns"; c++; next } \
|
||||
/nis/ { nsswitch[c] = "nis"; c++; next } \
|
||||
{ printf "Warning: unrecognized line [%s]", $0 > "/dev/stderr" } \
|
||||
END { \
|
||||
printf "hosts: "; \
|
||||
for (i in nsswitch) printf "%s ", nsswitch[i]; \
|
||||
printf "\n"; \
|
||||
}' < $host_conf > $nsswitch_conf
|
||||
eval ifconfig_args=\$ifconfig_$1
|
||||
if [ -n "${ifconfig_args}" ]; then
|
||||
ifconfig $1 ${ifconfig_args}
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
generate_host_conf()
|
||||
# ifalias_up if
|
||||
# Configure aliases for network interface $if.
|
||||
# It returns 0 if at least one alias was configured or
|
||||
# 1 if there were none.
|
||||
#
|
||||
ifalias_up()
|
||||
{
|
||||
nsswitch_conf=$1; shift;
|
||||
host_conf=$1; shift;
|
||||
|
||||
awk '
|
||||
BEGIN {
|
||||
xlat["files"] = "hosts";
|
||||
xlat["dns"] = "bind";
|
||||
xlat["nis"] = "nis";
|
||||
cont = 0;
|
||||
}
|
||||
sub(/^[\t ]*hosts:/, "") || cont {
|
||||
if (!cont)
|
||||
srcs = ""
|
||||
sub(/#.*/, "")
|
||||
gsub(/[][]/, " & ")
|
||||
cont = sub(/\\$/, "")
|
||||
srcs = srcs " " $0
|
||||
}
|
||||
END {
|
||||
print "# Auto-generated from nsswitch.conf, do not edit"
|
||||
ns = split(srcs, s)
|
||||
for (n = 1; n <= ns; ++n) {
|
||||
if (s[n] in xlat)
|
||||
print xlat[s[n]]
|
||||
}
|
||||
}
|
||||
' <$nsswitch_conf >$host_conf
|
||||
_ret=1
|
||||
alias=0
|
||||
while : ; do
|
||||
eval ifconfig_args=\$ifconfig_$1_alias${alias}
|
||||
if [ -n "${ifconfig_args}" ]; then
|
||||
ifconfig $1 ${ifconfig_args} alias
|
||||
alias=$((${alias} + 1))
|
||||
_ret=0
|
||||
else
|
||||
break
|
||||
fi
|
||||
done
|
||||
return $_ret
|
||||
}
|
||||
|
||||
network_gif_setup() {
|
||||
# ifscript_up if
|
||||
# Evaluate a startup script for the $if interface.
|
||||
# It returns 0 if a script was found and processed or
|
||||
# 1 if no script was found.
|
||||
#
|
||||
ifscript_up()
|
||||
{
|
||||
if [ -r /etc/start_if.$1 ]; then
|
||||
. /etc/start_if.$1
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
# Create cloneable interfaces.
|
||||
#
|
||||
clone_up()
|
||||
{
|
||||
_prefix=
|
||||
_list=
|
||||
for ifn in ${cloned_interfaces}; do
|
||||
ifconfig ${ifn} create
|
||||
if $? ; then
|
||||
_list="${_list}${_prefix}${ifn}"
|
||||
[ -z "$_prefix" ] && _prefix=' '
|
||||
fi
|
||||
done
|
||||
debug "Cloned: ${_list}"
|
||||
}
|
||||
|
||||
# Destroy cloned interfaces. Destroyed interfaces are echoed
|
||||
# to standard output.
|
||||
#
|
||||
clone_down()
|
||||
{
|
||||
_prefix=
|
||||
_list=
|
||||
for ifn in ${cloned_interfaces}; do
|
||||
ifconfig ${ifn} destroy
|
||||
if $? ; then
|
||||
_list="${_list}${_prefix}${ifn}"
|
||||
[ -z "$_prefix" ] && _prefix=' '
|
||||
fi
|
||||
done
|
||||
debug "Destroyed clones: ${_list}"
|
||||
}
|
||||
|
||||
gif_up() {
|
||||
case ${gif_interfaces} in
|
||||
[Nn][Oo] | '')
|
||||
;;
|
||||
@ -83,144 +137,78 @@ network_gif_setup() {
|
||||
esac
|
||||
}
|
||||
|
||||
network_start()
|
||||
#
|
||||
# ipx_up ifn
|
||||
# Configure any IPX addresses for interface $ifn. Returns 0 if IPX
|
||||
# arguments were found and configured; returns 1 otherwise.
|
||||
#
|
||||
ipx_up()
|
||||
{
|
||||
# set hostname, turn on network
|
||||
#
|
||||
echo -n "Doing initial network setup:"
|
||||
|
||||
# Generate host.conf for compatibility
|
||||
#
|
||||
if [ -f "/etc/nsswitch.conf" ]; then
|
||||
echo -n ' host.conf'
|
||||
generate_host_conf /etc/nsswitch.conf /etc/host.conf
|
||||
ifn="$1"
|
||||
eval ifconfig_args=\$ifconfig_${ifn}_ipx
|
||||
if [ -n "${ifconfig_args}" ]; then
|
||||
ifconfig ${ifn} ${ifconfig_args}
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
# Convert host.conf to nsswitch.conf if necessary
|
||||
#
|
||||
if [ -f "/etc/host.conf" -a ! -f "/etc/nsswitch.conf" ]; then
|
||||
echo ''
|
||||
echo 'Warning: /etc/host.conf is no longer used'
|
||||
echo ' /etc/nsswitch.conf will be created for you'
|
||||
convert_host_conf /etc/host.conf /etc/nsswitch.conf
|
||||
fi
|
||||
#
|
||||
# list_net_interfaces type
|
||||
# List all network interfaces. The type of interface returned
|
||||
# can be controlled by the type argument. The type
|
||||
# argument can be any of the following:
|
||||
# nodhcp - all interfaces, excluding DHCP configured interfaces
|
||||
# dhcp - list only DHCP configured interfaces
|
||||
# If no argument is specified all network interfaces are output.
|
||||
# Note that the list always includes cloned interfaces.
|
||||
#
|
||||
list_net_interfaces()
|
||||
{
|
||||
type=$1
|
||||
|
||||
# Set the host name if it is not already set
|
||||
#
|
||||
if [ -z "`hostname -s`" ]; then
|
||||
hostname ${hostname}
|
||||
echo -n ' hostname'
|
||||
fi
|
||||
|
||||
# Set the domainname if we're using NIS
|
||||
#
|
||||
case ${nisdomainname} in
|
||||
[Nn][Oo]|'')
|
||||
;;
|
||||
*)
|
||||
domainname ${nisdomainname}
|
||||
echo -n ' domain'
|
||||
;;
|
||||
esac
|
||||
|
||||
echo '.'
|
||||
|
||||
# Attempt to create cloned interfaces.
|
||||
for ifn in ${cloned_interfaces}; do
|
||||
ifconfig ${ifn} create
|
||||
done
|
||||
|
||||
# gifconfig
|
||||
network_gif_setup
|
||||
|
||||
# Set up all the network interfaces, calling startup scripts if needed
|
||||
# Get a list of ALL the interfaces
|
||||
#
|
||||
case ${network_interfaces} in
|
||||
[Aa][Uu][Tt][Oo])
|
||||
network_interfaces="`ifconfig -l`"
|
||||
_tmplist="`ifconfig -l`"
|
||||
;;
|
||||
*)
|
||||
network_interfaces="${network_interfaces} ${cloned_interfaces}"
|
||||
_tmplist="${network_interfaces}"
|
||||
;;
|
||||
esac
|
||||
_tmplist="${_tmplist} ${cloned_interfaces}"
|
||||
|
||||
dhcp_interfaces=""
|
||||
for ifn in ${network_interfaces}; do
|
||||
if [ -r /etc/start_if.${ifn} ]; then
|
||||
. /etc/start_if.${ifn}
|
||||
eval showstat_$ifn=1
|
||||
fi
|
||||
if [ -z "$type" ]; then
|
||||
echo $_tmplist
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Do the primary ifconfig if specified
|
||||
#
|
||||
eval ifconfig_args=\$ifconfig_${ifn}
|
||||
|
||||
case ${ifconfig_args} in
|
||||
'')
|
||||
;;
|
||||
# Separate out dhcp and non-dhcp intefraces
|
||||
#
|
||||
_aprefix=
|
||||
_brefix=
|
||||
for _if in ${_tmplist} ; do
|
||||
eval _ifarg="\$ifconfig_${_if}"
|
||||
case "$_ifarg" in
|
||||
[Dd][Hh][Cc][Pp])
|
||||
# DHCP inits are done all in one go below
|
||||
dhcp_interfaces="$dhcp_interfaces $ifn"
|
||||
eval showstat_$ifn=1
|
||||
_dhcplist="${_dhcplist}${_aprefix}${_if}"
|
||||
[ -z "$_aprefix" ] && _aprefix=' '
|
||||
;;
|
||||
*)
|
||||
ifconfig ${ifn} ${ifconfig_args}
|
||||
eval showstat_$ifn=1
|
||||
''|*)
|
||||
_nodhcplist="${_nodhcplist}${_bprefix}${_if}"
|
||||
[ -z "$_bprefix" ] && _bprefix=' '
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ ! -z "${dhcp_interfaces}" ]; then
|
||||
${dhcp_program:-/sbin/dhclient} ${dhcp_flags} ${dhcp_interfaces}
|
||||
fi
|
||||
|
||||
for ifn in ${network_interfaces}; do
|
||||
# Check to see if aliases need to be added
|
||||
#
|
||||
alias=0
|
||||
while : ; do
|
||||
eval ifconfig_args=\$ifconfig_${ifn}_alias${alias}
|
||||
if [ -n "${ifconfig_args}" ]; then
|
||||
ifconfig ${ifn} ${ifconfig_args} alias
|
||||
eval showstat_$ifn=1
|
||||
alias=$((${alias} + 1))
|
||||
else
|
||||
break;
|
||||
fi
|
||||
done
|
||||
|
||||
# Do ipx address if specified
|
||||
#
|
||||
eval ifconfig_args=\$ifconfig_${ifn}_ipx
|
||||
if [ -n "${ifconfig_args}" ]; then
|
||||
ifconfig ${ifn} ${ifconfig_args}
|
||||
eval showstat_$ifn=1
|
||||
fi
|
||||
done
|
||||
|
||||
# Display ifconfiged interfaces
|
||||
for ifn in ${network_interfaces}; do
|
||||
eval showstat=\$showstat_${ifn}
|
||||
if [ ! -z ${showstat} ]; then
|
||||
ifconfig ${ifn}
|
||||
fi
|
||||
done
|
||||
|
||||
# Resync ipfilter
|
||||
/etc/rc.d/ipfilter resync
|
||||
case "$type" in
|
||||
nodhcp)
|
||||
echo $_nodhcplist
|
||||
;;
|
||||
dhcp)
|
||||
echo $_dhcplist
|
||||
;;
|
||||
esac
|
||||
return 0
|
||||
}
|
||||
|
||||
network_stop()
|
||||
{
|
||||
echo -n "Stopping network:"
|
||||
|
||||
# flush routes
|
||||
#
|
||||
echo -n " flush routes"
|
||||
route -n flush
|
||||
|
||||
echo '.'
|
||||
}
|
||||
|
||||
load_rc_config $name
|
||||
run_rc_command "$1"
|
||||
|
51
etc/rc.d/hostname
Normal file
51
etc/rc.d/hostname
Normal file
@ -0,0 +1,51 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2003 The FreeBSD Project. All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
|
||||
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
|
||||
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
# SUCH DAMAGE.
|
||||
#
|
||||
# $FreeBSD$
|
||||
#
|
||||
|
||||
# PROVIDE: hostname
|
||||
# REQUIRE: mountcritlocal sysctl tty
|
||||
# BEFORE: netif
|
||||
# KEYWORD: FreeBSD
|
||||
|
||||
. /etc/rc.subr
|
||||
|
||||
name="hostname"
|
||||
start_cmd="hostname_start"
|
||||
stop_cmd=":"
|
||||
|
||||
hostname_start()
|
||||
{
|
||||
# Set the host name if it is not already set
|
||||
#
|
||||
if [ -z "`hostname -s`" ]; then
|
||||
hostname ${hostname}
|
||||
echo "Setting hostname: `hostname`."
|
||||
fi
|
||||
}
|
||||
|
||||
load_rc_config $name
|
||||
run_rc_command "$1"
|
89
etc/rc.d/netif
Normal file
89
etc/rc.d/netif
Normal file
@ -0,0 +1,89 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2003 The FreeBSD Project. All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE PROJECT ``AS IS'' AND ANY EXPRESS OR
|
||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
# IN NO EVENT SHALL THE PROJECT BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
# $FreeBSD$
|
||||
#
|
||||
|
||||
# PROVIDE: netif
|
||||
# REQUIRE: atm1 ipfilter mountcritlocal pccard serial sppp sysctl tty
|
||||
# KEYWORD: FreeBSD
|
||||
|
||||
. /etc/rc.subr
|
||||
. /etc/network.subr
|
||||
|
||||
name="network"
|
||||
start_cmd="network_start"
|
||||
stop_cmd="network_stop"
|
||||
cloneup_cmd="clone_up"
|
||||
clonedown_cmd="clone_down"
|
||||
extra_commands="cloneup clonedown"
|
||||
|
||||
network_start()
|
||||
{
|
||||
# Create cloned interfaces
|
||||
clone_up
|
||||
|
||||
# Create IPv6<-->IPv4 tunnels
|
||||
gif_up
|
||||
|
||||
# Get a list of network interfaces. Do not include dhcp interfaces.
|
||||
_ifn_list="`list_net_interfaces nodhcp`"
|
||||
|
||||
# Setup the supplied network interfaces including startup
|
||||
# scripts, if they exist.
|
||||
#
|
||||
for ifn in ${_ifn_list}; do
|
||||
ifscript_up ${ifn} && eval showstat_$ifn=1
|
||||
|
||||
ifconfig_up ${ifn} && eval showstat_$ifn=1
|
||||
|
||||
ifalias_up ${ifn} && eval showstat_$ifn=1
|
||||
|
||||
ipx_up ${ifn} && eval showstat_$ifn=1
|
||||
done
|
||||
|
||||
# Display interfaces configured by this script
|
||||
#
|
||||
for ifn in ${_ifn_list}; do
|
||||
eval showstat=\$showstat_${ifn}
|
||||
if [ ! -z ${showstat} ]; then
|
||||
ifconfig ${ifn}
|
||||
fi
|
||||
done
|
||||
|
||||
# Resync ipfilter
|
||||
/etc/rc.d/ipfilter resync
|
||||
}
|
||||
|
||||
network_stop()
|
||||
{
|
||||
echo -n "Stopping network:"
|
||||
|
||||
# flush routes
|
||||
route -n flush
|
||||
echo '.'
|
||||
}
|
||||
|
||||
load_rc_config $name
|
||||
run_rc_command "$1"
|
@ -5,7 +5,7 @@
|
||||
|
||||
# PROVIDE: network1
|
||||
# REQUIRE: atm1 ipfilter mountcritlocal pccard serial sppp sysctl tty
|
||||
# KEYWORD: FreeBSD
|
||||
# KEYWORD: FreeBSD nostart
|
||||
|
||||
. /etc/rc.subr
|
||||
|
||||
|
119
etc/rc.d/nisdomain
Normal file
119
etc/rc.d/nisdomain
Normal file
@ -0,0 +1,119 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 1993 - 2003 The FreeBSD Project. All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
|
||||
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
|
||||
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
# SUCH DAMAGE.
|
||||
#
|
||||
# $FreeBSD$
|
||||
#
|
||||
|
||||
# PROVIDE: nisdomain
|
||||
# REQUIRE: SERVERS rpcbind
|
||||
# BEFORE: ypbind ypserv ypxfrd
|
||||
# KEYWORD: FreeBSD
|
||||
|
||||
. /etc/rc.subr
|
||||
|
||||
name="nisdomain"
|
||||
start_cmd="nisdomain_start"
|
||||
stop_cmd=":"
|
||||
|
||||
convert_host_conf()
|
||||
{
|
||||
host_conf=$1; shift;
|
||||
nsswitch_conf=$1; shift;
|
||||
awk ' \
|
||||
/^[:blank:]*#/ { next } \
|
||||
/(hosts|local|file)/ { nsswitch[c] = "files"; c++; next } \
|
||||
/(dns|bind)/ { nsswitch[c] = "dns"; c++; next } \
|
||||
/nis/ { nsswitch[c] = "nis"; c++; next } \
|
||||
{ printf "Warning: unrecognized line [%s]", $0 > "/dev/stderr" } \
|
||||
END { \
|
||||
printf "hosts: "; \
|
||||
for (i in nsswitch) printf "%s ", nsswitch[i]; \
|
||||
printf "\n"; \
|
||||
}' < $host_conf > $nsswitch_conf
|
||||
}
|
||||
|
||||
generate_host_conf()
|
||||
{
|
||||
nsswitch_conf=$1; shift;
|
||||
host_conf=$1; shift;
|
||||
|
||||
awk '
|
||||
BEGIN {
|
||||
xlat["files"] = "hosts";
|
||||
xlat["dns"] = "bind";
|
||||
xlat["nis"] = "nis";
|
||||
cont = 0;
|
||||
}
|
||||
sub(/^[\t ]*hosts:/, "") || cont {
|
||||
if (!cont)
|
||||
srcs = ""
|
||||
sub(/#.*/, "")
|
||||
gsub(/[][]/, " & ")
|
||||
cont = sub(/\\$/, "")
|
||||
srcs = srcs " " $0
|
||||
}
|
||||
END {
|
||||
print "# Auto-generated from nsswitch.conf, do not edit"
|
||||
ns = split(srcs, s)
|
||||
for (n = 1; n <= ns; ++n) {
|
||||
if (s[n] in xlat)
|
||||
print xlat[s[n]]
|
||||
}
|
||||
}
|
||||
' <$nsswitch_conf >$host_conf
|
||||
}
|
||||
|
||||
nisdomain_start()
|
||||
{
|
||||
# Generate host.conf for compatibility
|
||||
#
|
||||
if [ -f "/etc/nsswitch.conf" ]; then
|
||||
echo 'Generating host.conf.'
|
||||
generate_host_conf /etc/nsswitch.conf /etc/host.conf
|
||||
fi
|
||||
|
||||
# Convert host.conf to nsswitch.conf if necessary
|
||||
#
|
||||
if [ -f "/etc/host.conf" -a ! -f "/etc/nsswitch.conf" ]; then
|
||||
echo ''
|
||||
echo 'Warning: /etc/host.conf is no longer used'
|
||||
echo ' /etc/nsswitch.conf will be created for you'
|
||||
convert_host_conf /etc/host.conf /etc/nsswitch.conf
|
||||
fi
|
||||
|
||||
# Set the domainname if we're using NIS
|
||||
#
|
||||
case ${nisdomainname} in
|
||||
[Nn][Oo]|'')
|
||||
;;
|
||||
*)
|
||||
domainname ${nisdomainname}
|
||||
echo "Setting NIS domain: `/bin/domainname`."
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
load_rc_config $name
|
||||
run_rc_command "$1"
|
Loading…
Reference in New Issue
Block a user