aboutsummaryrefslogtreecommitdiff
path: root/etc/rc.d/routing
diff options
context:
space:
mode:
authorBill Fenner <fenner@FreeBSD.org>2001-11-07 00:33:56 +0000
committerBill Fenner <fenner@FreeBSD.org>2001-11-07 00:33:56 +0000
commit85c9d676b5eec2f4dd34a4b3f858dd6414c9b783 (patch)
tree9b03037ae141daba056125f55d2c329fdf790c14 /etc/rc.d/routing
parent70982dca889ffc7a2399c98cf27f5c3ec26647e1 (diff)
downloadsrc-85c9d676b5eec2f4dd34a4b3f858dd6414c9b783.tar.gz
src-85c9d676b5eec2f4dd34a4b3f858dd6414c9b783.zip
Update the nsswitch.conf -> host.conf generator to handle criteria,
continuation lines, extra whitespace, and to use the last matching line in the file. This syncs the host.conf generation with how the nsswitch.conf is parsed. Only print " host.conf" instead of a multi-line message, since this happens on every boot.
Notes
Notes: svn path=/head/; revision=86163
Diffstat (limited to 'etc/rc.d/routing')
-rw-r--r--etc/rc.d/routing26
1 files changed, 16 insertions, 10 deletions
diff --git a/etc/rc.d/routing b/etc/rc.d/routing
index 1ca57d56db08..db566996768c 100644
--- a/etc/rc.d/routing
+++ b/etc/rc.d/routing
@@ -41,8 +41,7 @@ network_pass1() {
# Generate host.conf for compatibility
#
if [ -f "/etc/nsswitch.conf" ]; then
- echo ''
- echo 'Generating /etc/host.conf for compatibility'
+ echo -n ' host.conf'
generate_host_conf /etc/nsswitch.conf /etc/host.conf
fi
@@ -880,16 +879,23 @@ BEGIN {
xlat["files"] = "hosts";
xlat["dns"] = "bind";
xlat["nis"] = "nis";
+ cont = 0;
}
-/^hosts:/ {
- print "# Auto-generated, do not edit";
- for (n = 2; n <= NF; ++n)
- if ($n in xlat)
- print xlat[$n];
- quit;
+sub(/^[\t ]*hosts:/, "") || cont {
+ if (!cont)
+ srcs = ""
+ sub(/#.*/, "")
+ gsub(/[][]/, " & ")
+ cont = sub(/\\$/, "")
+ srcs = srcs " " $0
}
-// {
- next;
+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
}