From 4e5552a4239587e8bcc6a7fae5c6b276b6b8e873 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Wed, 19 Apr 2017 18:22:50 +0100 Subject: [PATCH] ipif: service-wrap: Scan directories Signed-off-by: Ian Jackson --- ipif/service-wrap | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) 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; -- 2.30.2