X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=ipif%2Fservice-wrap;h=2bca709e9501619ee0db409df87a5c2527d4690c;hb=HEAD;hp=3a4e80658756d524c4c9fcc6cafcd5089b9c2316;hpb=9cc0c043132676c1803b017b8f77dba45c20c08e;p=userv-utils.git diff --git a/ipif/service-wrap b/ipif/service-wrap index 3a4e806..2bca709 100755 --- a/ipif/service-wrap +++ b/ipif/service-wrap @@ -62,6 +62,7 @@ use strict; use POSIX; use Carp; use NetAddr::IP::Lite qw(:nofqdn :lower); +use File::Basename; our $default_ifname = 'userv%d'; @@ -228,7 +229,7 @@ sub readconfig ($) { my $net = $hn->network() or die; maybe_allow_addrs 'Local', $host; maybe_allow_addrs 'Remote', $net; - } elsif (s{^(local|remote|addrs)\s+(\S+)\ s+}{}) { + } elsif (s{^(local|remote|addrs)\s+(\S+)\s+}{}) { my $h = $1; my $s = new NetAddr::IP::Lite $2 or badcfg "invalid ip address or mask in $h"; @@ -265,19 +266,32 @@ sub readconfig ($) { foreach @wrong; } } elsif (m{^include\s+(\S+)$}) { - readconfig $1; + my $include = $1; + $include =~ s{^(?!/)}{ dirname($cfgpath)."/" }e; + readconfig $include; } else { badcfg "unknown config directive or bad syntax"; } } $cfgfh->error and die $!; close $cfgfh; +} - if ($v0config && $v0config =~ m{^[^#]} && $v0config ne '/dev/null') { - print "trying v0 config $v0config...\n" if $protocol eq 'debug'; - execreal $v0config; +sub try_v0config() { + return unless $v0config; + return unless $v0config =~ m{^[^#]}; + return if $v0config eq '/dev/null'; + if ($v0config =~ m{^/}) { + if (!stat $v0config) { + die "v0 config $v0config: $!\n" unless $!==ENOENT; + return; + } } - die "permission denied\n"; + print "trying v0 config $v0config...\n" if $protocol eq 'debug'; + execreal $v0config; } readconfig $v1config; +try_v0config(); + +die "permission denied\n";