use Debbugs::User;
use HTML::Entities qw(encode_entities);
-use Debbugs::Config qw(:globals);
+use Debbugs::Config qw(:globals :config);
+use Debbugs::CGI qw(html_escape);
$lib_path = $gLibPath;
require "$lib_path/errorlib";
$ENV{'PATH'} = $lib_path.':'.$ENV{'PATH'};
$user =~ s/[(].*[)]//;
$user =~ s/^\s*(\S+)\s+.*$/$1/;
$user = "" unless (Debbugs::User::is_valid_user($user));
+my $indicated_user = 0;
my $quickabort = 0;
-my $fuckheads = "(" . join("|", @gFuckheads) . ")";
-if (@gFuckheads and $replyto =~ m/$fuckheads/) {
- &transcript("This service is unavailable.\n\n");
+my $fuckheads = "(" . join("|", @gExcludeFromControl) . ")";
+if (@gExcludeFromControl and $replyto =~ m/$fuckheads/) {
+ &transcript("You have been specifically excluded from using the\ncontrol interface.\n\n");
+ &transcript("Have a nice day\n\n.");
$quickabort = 1;
}
my $olduser = ($user ne "" ? " (was $user)" : "");
&transcript("Setting user to $newuser$olduser.\n");
$user = $newuser;
+ $indicated_user = 1;
} else {
&transcript("Selected user id ($newuser) invalid, sorry\n");
$errors++;
$user = "";
+ $indicated_user = 1;
}
} elsif (m/^usercategory\s+(\S+)(\s+\[hidden\])?\s*$/i) {
$ok++;
my @cats;
my $bad = 0;
my $catsec = 0;
- while (++$procline <= $#bodylines) {
+ if ($user eq "") {
+ &transcript("No valid user selected\n");
+ $errors++;
+ next;
+ }
+ if (not $indicated_user and defined $user) {
+ &transcript("User is $user");
+ $indicated_user = 1;
+ }
+ while (++$procline <= $#bodylines) {
unless ($bodylines[$procline] =~ m/^\s*([*+])\s*(\S.*)$/) {
$procline--;
last;
if (@cats) {
&transcript("Added usercategory $catname.\n\n");
$u->{"categories"}->{$catname} = [ @cats ];
+ if (not $hidden) {
+ push @{$u->{visible_cats}},$catname;
+ }
} else {
&transcript("Removed usercategory $catname.\n\n");
delete $u->{"categories"}->{$catname};
+ @{$u->{visible_cats}} = grep {$_ ne $catname} @{$u->{visible_cats}};
}
$u->write();
} elsif (m/^usertags?\s+\#?(-?\d+)\s+(([=+-])\s*)?(\S.*)?$/i) {
$ok++;
$ref = $1; $addsubcode = $3 || "+"; $tags = $4;
+ if ($ref =~ m/^-\d+$/ && defined $clonebugs{$ref}) {
+ $ref = $clonebugs{$ref};
+ }
if ($user eq "") {
&transcript("No valid user selected\n");
$errors++;
+ $indicated_user = 1;
} elsif (&setbug) {
+ if (not $indicated_user and defined $user) {
+ &transcript("User is $user");
+ $indicated_user = 1;
+ }
&nochangebug;
my %ut;
Debbugs::User::read_usertags(\%ut, $user);
} while (&getnextbug);
}
}
- } elsif (m/^found\s+\#?(-?\d+)(?:\s+(\d.*))?$/i) {
+ } elsif (m{^found\s+\#?(-?\d+)
+ (?:\s+(?:$config{package_name_re}\/)?
+ ($config{package_version_re}))?$}ix) {
$ok++;
$ref= $1;
$version= $2;
&addmaintainers($data);
removefoundversions($data, $data->{package}, $version, 'binary');
} while (&getnextbug);
- }
- } elsif (m/^submitter\s+\#?(-?\d+)\s+\!$/i ? ($newsubmitter=$replyto, 1) :
+ }
+ }
+ elsif (m[^fixed\s+\#?(-?\d+)\s+
+ ((?:$config{package_name_re}\/)?
+ $config{package_version_re})\s*$]ix) {
+ $ok++;
+ $ref= $1;
+ $version= $2;
+ if (&setbug) {
+ $action=
+ defined($version) ?
+ "$gBug marked as fixed in version $version." :
+ "$gBug reopened.";
+ do {
+ &addmaintainers($data);
+ addfixedversions($data, $data->{package}, $version, 'binary');
+ } while (&getnextbug);
+ }
+ }
+ elsif (m[^notfixed\s+\#?(-?\d+)\s+
+ ((?:$config{package_name_re}\/)?
+ $config{package_version_re})\s*$]ix) {
+ $ok++;
+ $ref= $1;
+ $version= $2;
+ if (&setbug) {
+ $action=
+ defined($version) ?
+ "$gBug marked as not fixed in version $version." :
+ "$gBug reopened.";
+ do {
+ &addmaintainers($data);
+ removefixedversions($data, $data->{package}, $version, 'binary');
+ } while (&getnextbug);
+ }
+ }
+ elsif (m/^submitter\s+\#?(-?\d+)\s+\!$/i ? ($newsubmitter=$replyto, 1) :
m/^submitter\s+\#?(-?\d+)\s+(\S.*\S)$/i ? ($newsubmitter=$2, 1) : 0) {
$ok++;
$ref= $1;
if (&checkpkglimit) {
&foundbug;
&addmaintainers($data);
+ my $oldtitle = $data->{subject};
$data->{subject}= $newtitle;
- $action= "Changed $gBug title.";
+ $action= "Changed $gBug title to `$newtitle' from `$oldtitle'.";
&savebug;
&transcript("$action\n");
if (length($data->{done})) {
}
}
}
- } elsif (m/^package\s+(\S.*\S)?\s*$/i) {
+ } elsif (m/^package\:?\s+(\S.*\S)?\s*$/i) {
$ok++;
my @pkgs = split /\s+/, $1;
if (scalar(@pkgs) > 0) {
"\2\n$repliedshow\n\5\n$reply\n\3\n".
"\6\n".
"<strong>Request received</strong> from <code>".
- encode_entities($header{'from'})."</code>\n".
- "to <code>".encode_entities($controlrequestaddr)."</code>\n".
+ html_escape($header{'from'})."</code>\n".
+ "to <code>".html_escape($controlrequestaddr)."</code>\n".
"\3\n".
"\7\n",@{escapelog(@log)},"\n\3\n") || &quit("writing db-h/-1.log: $!");
close(AP) || &quit("open db-h/-1.log: $!");
open(L,">>db-h/$hash/$ref.log") || &quit("opening db-h/$hash/$ref.log: $!");
print(L
"\6\n".
- "<strong>".encode_entities($action)."</strong>\n".
- "Request was from <code>".encode_entities($header{'from'})."</code>\n".
- "to <code>".encode_entities($controlrequestaddr)."</code>. \n".
+ "<!-- time:".time." -->\n".
+ "<strong>".html_escape($action)."</strong>\n".
+ "Request was from <code>".html_escape($header{'from'})."</code>\n".
+ "to <code>".html_escape($controlrequestaddr)."</code>. \n".
"\3\n".
"\7\n",@{escapelog(@log)},"\n\3\n") || &quit("writing db-h/$hash/$ref.log: $!");
close(L) || &quit("closing db-h/$hash/$ref.log: $!");