X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=dgit-repos-server;h=c70bc27fd13b8a7d50ea3d25dba2bd9a7588f3ef;hb=6fb4b888dd654e78fb263e69147de9d9df4a532b;hp=897e414d834942678d7a2236eb2490e7bd3e3711;hpb=c499f617a23518d7eead81e580b313ba1bbede02;p=dgit.git
diff --git a/dgit-repos-server b/dgit-repos-server
index 897e414d..c70bc27f 100755
--- a/dgit-repos-server
+++ b/dgit-repos-server
@@ -282,25 +282,25 @@ sub readupdates () {
m/^(\S+) (\S+) (\S+)$/ or die "$_ ?";
my ($old, $sha1, $refname) = ($1, $2, $3);
if ($refname =~ m{^refs/tags/(?=debian/)}) {
- die if defined $tagname;
+ reject "pushing multiple tags!" if defined $tagname;
$tagname = $'; #';
$tagval = $sha1;
reject "tag $tagname already exists -".
" not replacing previously-pushed version"
if $old =~ m/[^0]/;
} elsif ($refname =~ m{^refs/dgit/}) {
- die if defined $suite;
+ reject "pushing multiple heads!" if defined $suite;
$suite = $'; #';
$oldcommit = $old;
$commit = $sha1;
} else {
- die;
+ reject "pushing unexpected ref!";
}
}
STDIN->error and die $!;
- die unless defined $tagname;
- die unless defined $suite;
+ reject "push is missing tag ref update" unless defined $tagname;
+ reject "push is missing head ref update" unless defined $suite;
debug " updates ok.";
}
@@ -391,12 +391,14 @@ sub dm_txt_check ($$) {
while (
) {
m/^fingerprint:\s+$keyid$/oi
..0 or next;
- m/^./
- or reject "key $keyid missing Allow section in permissions!";
+ if (s/^allow:/ /i..0) {
+ } else {
+ m/^./
+ or reject "key $keyid missing Allow section in permissions!";
+ next;
+ }
# in right stanza...
- s/^allow:/ /i
- ..0 or next;
- s/^\s+//
+ s/^[ \t]+//
or reject "package $package not allowed for key $keyid";
# in allow field...
s/\([^()]+\)//;
@@ -454,17 +456,17 @@ sub checksuite () {
sub tagh1 ($) {
my ($tag) = @_;
my $vals = $tagh{$tag};
- reject "missing tag $tag in signed tag object" unless $vals;
- reject "multiple tags $tag in signed tag object" unless @$vals == 1;
+ reject "missing header $tag in signed tag object" unless $vals;
+ reject "multiple headers $tag in signed tag object" unless @$vals == 1;
return $vals->[0];
}
sub checks () {
debug "checks";
checksuite();
- tagh1('type') eq 'commit' or die;
- tagh1('object') eq $commit or die;
- tagh1('tag') eq $tagname or die;
+ tagh1('type') eq 'commit' or reject "tag refers to wrong kind of object";
+ tagh1('object') eq $commit or reject "tag refers to wrong commit";
+ tagh1('tag') eq $tagname or reject "tag name in tag is wrong";
my $v = $version;
$v =~ y/~:/_%/;
@@ -574,9 +576,9 @@ sub parseargsdispatch () {
(?: \S* / )?
( [-0-9a-z]+ )
\s+
- (?: \S* / )?
+ '? (?: \S* / )?
($package_re) \.git
- $
+ '?$
}ox
or reject "command string not understood";
my $method = $1;