Allow state_dir to override the compiled VARDIR variable.
authorRoy Marples <roy@marples.name>
Thu, 12 Nov 2009 14:38:07 +0000 (14:38 +0000)
committerRoy Marples <roy@marples.name>
Thu, 12 Nov 2009 14:38:07 +0000 (14:38 +0000)
This allows state_dir to be set to a ram disk outside of /var/run
which allows resolvconf to work before /var/run is mounted rw.

resolvconf now sports the -I option to initalise VARDIR if the
system boot scripts do not, for example when state_dir to physical
media but outside of /var/run.

resolvconf.8.in
resolvconf.conf.5.in
resolvconf.in

index 8097636aed14ef37f77d1ca53ff82abf4455636e..c60aa28eaf63badf3a5781dadbebba34ce2b1f5a 100644 (file)
@@ -22,7 +22,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd April 21, 2009
+.Dd November 22, 2009
 .Dt RESOLVCONF 8 SMM
 .Os
 .Sh NAME
@@ -30,6 +30,8 @@
 .Nd a framework for managing multiple DNS configurations
 .Sh SYNOPSIS
 .Nm
+.Fl I
+.Nm
 .Op Fl m Ar metric
 .Op Fl p
 .Fl a Ar interface No < Ns Pa file
@@ -102,6 +104,17 @@ Here are some more options that
 .Nm
 has:-
 .Bl -tag -width indent
+.It Fl I
+Initialise the state directory
+.Pa @VARDIR@ .
+This only needs to be called if the initial system boot sequence does not
+automatically clean it out; for example the state directory is moved
+somewhere other than
+.Pa /var/run .
+If used, it should only be called once as early in the system boot sequence
+as possible and before
+.Nm
+is used to add interfaces.
 .It Fl f
 Ignore non existant interfaces.
 Only really useful for deleting interfaces.
index a97c9c75a6758b7cf9b1944116760d72f9fb25b7..0d5b77235885bd503b3f1923c2e786b2d657fee1 100644 (file)
@@ -22,7 +22,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd October 25, 2009
+.Dd November 12, 2009
 .Dt RESOLVCONF.CONF 5 SMM
 .Os
 .Sh NAME
@@ -52,6 +52,12 @@ in their resolv.conf.
 This is equivalent to the
 .Nm resolvconf -p
 option.
+.It Sy state_dir
+Override the default state directory of
+.Pa @VARDIR@ .
+This should not be changed once
+.Nm resolvconf
+is in use unless the old directory is copied to the new one.
 .El
 .Sh LIBC OPTIONS
 The following variables affect
index 13bd8476e5aba7ec8995abfd45c2452e471f8942..432852d96c6ca70d681c133a80055f32f60fd715 100644 (file)
@@ -28,20 +28,21 @@ RESOLVCONF="$0"
 SYSCONFDIR=@SYSCONFDIR@
 LIBEXECDIR=@LIBEXECDIR@
 VARDIR=@VARDIR@
-IFACEDIR="$VARDIR/interfaces"
-METRICDIR="$VARDIR/metrics"
-PRIVATEDIR="$VARDIR/private"
-
 # Support original resolvconf configuration layout
 # as well as the openresolv config file
 if [ -f "$SYSCONFDIR"/resolvconf.conf ]; then
        . "$SYSCONFDIR"/resolvconf.conf
+       [ -n "$state_dir" ] && VARDIR="$state_dir"
 elif [ -d "$SYSCONFDIR/resolvconf" ]; then
        SYSCONFDIR="$SYSCONFDIR/resolvconf"
        if [ -f "$SYSCONFDIR"/interface-order ]; then
                interface_order="$(cat "$SYSCONFDIR"/interface-order)"
        fi
 fi
+IFACEDIR="$VARDIR/interfaces"
+METRICDIR="$VARDIR/metrics"
+PRIVATEDIR="$VARDIR/private"
+
 : ${dynamic_order:=tap[0-9]* tun[0-9]* vpn vpn[0-9]* ppp[0-9]* ippp[0-9]*}
 : ${interface_order:=lo lo[0-9]*}
 
@@ -65,6 +66,7 @@ usage()
          -p               Mark the interface as private
          -d \$INTERFACE    Delete DNS information from the specified interface
          -f               Ignore non existant interfaces
+         -I               Init the state dir
          -u               Run updates from our current DNS information
          -l [\$PATTERN]    Show DNS information, optionally from interfaces
                           that match the specified pattern
@@ -271,6 +273,14 @@ done
 shift $(($OPTIND - 1))
 args="$iface${iface:+ }$@"
 
+# -I inits the state dir
+if [ "$cmd" = I ]; then
+       if [ -d "$VARDIR" ]; then
+               rm -rf "$VARDIR"/*
+       fi
+       exit $?
+fi
+
 # -l lists our resolv files, optionally for a specific interface
 if [ "$cmd" = l -o "$cmd" = i ]; then
        list_resolv "$cmd" "$args"