X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=userv-utils.git;a=blobdiff_plain;f=ipif%2Fservice-wrap;h=412c2dc9510bf5d498584461f50188ee95ed92f0;hp=7f6dad46becb56bc3fa3cdd422f127b2a9f28c6b;hb=4e5552a4239587e8bcc6a7fae5c6b276b6b8e873;hpb=0d8db3665339c2dac87a8c301db065c96e43edee diff --git a/ipif/service-wrap b/ipif/service-wrap index 7f6dad4..412c2dc 100755 --- a/ipif/service-wrap +++ b/ipif/service-wrap @@ -15,7 +15,8 @@ # # .../ipif1 -- ... # -# Config file is a series of lines. +# Config file is a series of lines, or a directory. If a directory, +# all files with names matching ^[-A-Za-z0-9_]+$ are processed. # # permit .... # @@ -47,7 +48,7 @@ # if a permit has no ifname at all, it is as if # `ifname userv%d' was specified # -# include +# include # # v0config # @@ -176,8 +177,21 @@ sub maybe_allow_addrs ($$) { } } +sub readconfig ($); sub readconfig ($) { local ($cfgpath) = @_; + + my $dirfh; + if (opendir $dirfh, $cfgpath) { + while ($!=0, my $ent = readdir $dirfh) { + next if $ent =~ m/[^-A-Za-z0-9_]/; + readconfig "$cfgpath/$ent"; + } + die "$0: $cfgpath: $!\n" if $!; + return; + } + die "$0: $cfgpath: $!\n" unless $!==ENOENT || $!==ENOTDIR; + my $cfgfh = new IO::File $cfgpath, "<"; if (!$cfgfh) { die "$0: $cfgpath: $!\n" unless $!==ENOENT;