From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 78FF51F7E9 for ; Tue, 1 Jan 2019 10:18:48 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 2/2] config: relax name inbox name restrictions Date: Tue, 1 Jan 2019 10:18:47 +0000 Message-Id: <20190101101847.22805-3-e@80x24.org> In-Reply-To: <20190101101847.22805-1-e@80x24.org> References: <20190101101847.22805-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: 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(-) diff --git a/lib/PublicInbox/Config.pm b/lib/PublicInbox/Config.pm index 7858656..a2b721d 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); -- EW