From bf7315de01fecc74ff8807921a993145886a8007 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 1 Jan 2019 10:18:47 +0000 Subject: config: relax name inbox name restrictions Since "publicinbox" sections are analogous to git remotes, we may use the same rules for naming git remotes to reduce cognitive overhead. Most notably, this allows '.' in the middle of inbox names, (e.g. "foo.bar") as it's common for email addresses, too. --- lib/PublicInbox/Config.pm | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'lib/PublicInbox/Config.pm') diff --git a/lib/PublicInbox/Config.pm b/lib/PublicInbox/Config.pm index 78586560..a2b721d2 100644 --- a/lib/PublicInbox/Config.pm +++ b/lib/PublicInbox/Config.pm @@ -54,7 +54,7 @@ sub lookup { my $pfx; foreach my $k (keys %$self) { - $k =~ /\A(publicinbox\.[\w-]+)\.address\z/ or next; + $k =~ m!\A(publicinbox\.[^/]+)\.address\z! or next; my $v = $self->{$k}; if (ref($v) eq "ARRAY") { foreach my $alias (@$v) { @@ -81,7 +81,7 @@ sub each_inbox { my ($self, $cb) = @_; my %seen; foreach my $k (keys %$self) { - $k =~ /\Apublicinbox\.([A-Z0-9a-z-]+)\.mainrepo\z/ or next; + $k =~ m!\Apublicinbox\.([^/]+)\.mainrepo\z! or next; next if $seen{$1}; $seen{$1} = 1; my $ibx = lookup_name($self, $1) or next; @@ -96,7 +96,7 @@ sub lookup_newsgroup { return $rv if $rv; foreach my $k (keys %$self) { - $k =~ /\A(publicinbox\.[\w-]+)\.newsgroup\z/ or next; + $k =~ m!\A(publicinbox\.[^/]+)\.newsgroup\z! or next; my $v = $self->{$k}; my $pfx = $1; if ($v eq $ng) { @@ -184,6 +184,13 @@ sub _fill { return unless $rv->{mainrepo}; my $name = $pfx; $name =~ s/\Apublicinbox\.//; + + # same rules as git.git/remote.c::valid_remote_nick + if ($name eq '' || $name =~ m!/! || $name eq '.' || $name eq '..') { + warn "invalid inbox name: '$name'\n"; + return; + } + $rv->{name} = $name; $rv->{-pi_config} = $self; $rv = PublicInbox::Inbox->new($rv); -- cgit v1.2.3-24-ge0c7