chiark / gitweb /
ipif: service-wrap: make v0config into a positional arg
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 19 Apr 2017 17:34:08 +0000 (18:34 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 19 Apr 2017 17:34:08 +0000 (18:34 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
ipif/service-wrap

index 412c2dc..3a4e806 100755 (executable)
@@ -13,7 +13,7 @@
 #
 # Usage:
 #
-#   .../ipif1 <v1config> <real-service-program> -- <service-args>...
+#   .../ipif1 <v1config> <real-service-program> <v0config> -- <service-args>...
 #
 # Config file is a series of lines, or a directory.  If a directory,
 # all files with names matching ^[-A-Za-z0-9_]+$ are processed.
 #
 #   include <other-config-file-or-directory>
 #
-#   v0config <v0configfile>
+# <v0config>
 #
-#     If none of the `permit' lines match, will read <v0configfile>
-#     in old format.  Must come after all `permit' lines.
+#     If none of the `permit' lines match, will process <v0config> in
+#     old format.  See service.c head comment.  <v0config> may be
+#     `' or `#' or `/dev/null' to process new-style config only.
 #
 #   <config> --
 
@@ -79,8 +80,8 @@ sub oneaddr ($) {
     $$ar = $x;
 }
 
-@ARGV == 5 or badusage "wrong number of arguments";
-our ($v1config, $realservice, $sep, $addrsarg, $rnets) = @ARGV;
+@ARGV == 6 or badusage "wrong number of arguments";
+our ($v1config, $realservice, $v0config, $sep, $addrsarg, $rnets) = @ARGV;
 
 $sep eq '--' or badusage "separator should be \`--'";
 my ($local_addr, $peer_addr, $mtu, $protocol, $ifname) =
@@ -110,8 +111,6 @@ sub execreal ($) {
        or die "exec $realservice: $!\n";
 }
 
-our $v0config;
-
 our $cfgpath;
 
 sub badcfg ($) {
@@ -203,7 +202,6 @@ sub readconfig ($) {
        next if m/^\#/;
        next unless m/\S/;
        if (s{^permit\s+}{}) {
-           badcfg "v0config before permit" if defined $v0config;
            %need_allow = ();
            need_allow_singleton 'Caller', allowent 'caller';
            need_allow_singleton 'Local',
@@ -266,9 +264,6 @@ sub readconfig ($) {
                print "config $cfgpath:$.: mismatch: $_\n"
                    foreach @wrong;
            }
-       } elsif (m{^v0config\s+(\S+)$}) {
-           badcfg "repeated v0config" if defined $v0config;
-           $v0config = $1;
        } elsif (m{^include\s+(\S+)$}) {
            readconfig $1;
        } else {
@@ -278,8 +273,7 @@ sub readconfig ($) {
     $cfgfh->error and die $!;
     close $cfgfh;
 
-    if (defined $v0config) {
-       $v0config =~ s{^}{./} unless $v0config =~ m{^/};
+    if ($v0config && $v0config =~ m{^[^#]} && $v0config ne '/dev/null') {
        print "trying v0 config $v0config...\n" if $protocol eq 'debug';
        execreal $v0config;
     }