Module Name:    src
Committed By:   roy
Date:           Fri Jul 27 15:31:02 UTC 2018

Modified Files:
        src/etc/rc.d: network
        src/share/man/man5: rc.conf.5

Log Message:
Allow rc.conf to setup resolv.conf via resolvconf(8).
This allows all static network config to be in rc.conf rather than
spread across files.


To generate a diff of this commit:
cvs rdiff -u -r1.74 -r1.75 src/etc/rc.d/network
cvs rdiff -u -r1.171 -r1.172 src/share/man/man5/rc.conf.5

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/etc/rc.d/network
diff -u src/etc/rc.d/network:1.74 src/etc/rc.d/network:1.75
--- src/etc/rc.d/network:1.74	Fri Jun 29 12:34:15 2018
+++ src/etc/rc.d/network	Fri Jul 27 15:31:02 2018
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# $NetBSD: network,v 1.74 2018/06/29 12:34:15 roy Exp $
+# $NetBSD: network,v 1.75 2018/07/27 15:31:02 roy Exp $
 #
 
 # PROVIDE: network
@@ -52,6 +52,7 @@ network_start()
 	have_inet6 &&
 	network_start_ipv6_autoconf
 	network_wait_dad
+	network_start_resolv
 	network_start_local
 }
 
@@ -454,6 +455,32 @@ network_wait_dad()
 	fi
 }
 
+network_start_resolv()
+{
+	resconf=
+
+	if [ -n "$dns_domain" ]; then
+		resconf="${resconf}domain $dns_domain$nl"
+	fi
+	if [ -n "$dns_search" ]; then
+		resconf="${resconf}search $dns_search$nl"
+	fi
+	for n in $dns_nameservers; do
+		resconf="${resconf}nameserver $n$nl"
+	done
+	if [ -n "$dns_sortlist" ]; then
+		resconf="${resconf}sortlist $dns_sortlist$nl"
+	fi
+	if [ -n "$dns_options" ]; then
+		resconf="${resconf}options $dns_options$nl"
+	fi
+	if [ -n "$resconf" ]; then
+		resconf="# Generated by /etc/rc.d/network$nl$resconf"
+		echo 'Configuring resolv.conf'
+		printf %s "$resconf" | resolvconf -m "${dns_metric:-0}" -a network
+	fi
+}
+
 network_start_local()
 {
 	# XXX this must die
@@ -467,6 +494,7 @@ network_stop()
 	echo "Stopping network."
 
 	network_stop_local
+	network_stop_resolv
 	network_stop_aliases
 	[ "$net_interfaces" != NO ] &&
 	network_stop_interfaces
@@ -481,6 +509,11 @@ network_stop_local()
 	fi
 }
 
+network_stop_resolv()
+{
+	resolvconf -f -d network
+}
+
 network_stop_aliases()
 {
 	echo "Deleting aliases."

Index: src/share/man/man5/rc.conf.5
diff -u src/share/man/man5/rc.conf.5:1.171 src/share/man/man5/rc.conf.5:1.172
--- src/share/man/man5/rc.conf.5:1.171	Fri Jul 13 21:46:58 2018
+++ src/share/man/man5/rc.conf.5	Fri Jul 27 15:31:02 2018
@@ -1,4 +1,4 @@
-.\"	$NetBSD: rc.conf.5,v 1.171 2018/07/13 21:46:58 maya Exp $
+.\"	$NetBSD: rc.conf.5,v 1.172 2018/07/27 15:31:02 roy Exp $
 .\"
 .\" Copyright (c) 1996 Matthew R. Green
 .\" All rights reserved.
@@ -55,7 +55,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd July 14, 2018
+.Dd July 27, 2018
 .Dt RC.CONF 5
 .Os
 .Sh NAME
@@ -248,6 +248,30 @@ If empty or not set, then the contents o
 A space separated list of interface names.
 These interfaces will be configured down when going from multiuser to single-user
 mode or on system shutdown.
+.It Sy dns_domain
+A string.
+Sets domain in
+.Pa /etc/resolv.conf .
+.It Sy dns_search
+A string.
+Sets search in
+.Pa /etc/resolv.conf .
+.It Sy dns_nameservers
+A string of space seperated domain name servers.
+Sets nameserver for each value in
+.Pa /etc/resolv.conf .
+.It Sy dns_sortlist
+A string.
+Sets sortlist in
+.Pa /etc/resolv.conf .
+.It Sy dns_options
+A string.
+Sets options in
+.Pa /etc/resolv.conf .
+.It Sy dns_metric
+An unsigned integer.
+Sets the priority of the above DNS to other sources, lowest wins.
+Defaults to 0.
 .Pp
 This is important for some stateful interfaces, for example PPP over ISDN
 connections that cost money by connection time or PPPoE interfaces which

Reply via email to