Commit 4560c232 authored by cyeh%bluemartini.com's avatar cyeh%bluemartini.com

fix for 66876: Using userids (mediumint) for initialowner and initialqacontact

based on patch submitted by baulig@suse.de (Martin Baulig).
parent 76dd91d8
...@@ -755,8 +755,8 @@ $table{longdescs} = ...@@ -755,8 +755,8 @@ $table{longdescs} =
$table{components} = $table{components} =
'value tinytext, 'value tinytext,
program varchar(64), program varchar(64),
initialowner tinytext not null, # Should arguably be a mediumint! initialowner mediumint not null,
initialqacontact tinytext not null, # Should arguably be a mediumint! initialqacontact mediumint not null,
description mediumtext not null'; description mediumtext not null';
...@@ -1824,6 +1824,66 @@ my @resolutions = ("", "FIXED", "INVALID", "WONTFIX", "LATER", "REMIND", ...@@ -1824,6 +1824,66 @@ my @resolutions = ("", "FIXED", "INVALID", "WONTFIX", "LATER", "REMIND",
"DUPLICATE", "WORKSFORME", "MOVED"); "DUPLICATE", "WORKSFORME", "MOVED");
CheckEnumField('bugs', 'resolution', @resolutions); CheckEnumField('bugs', 'resolution', @resolutions);
if (($_ = GetFieldDef('components', 'initialowner')) and ($_->[1] eq 'tinytext')) {
$sth = $dbh->prepare("SELECT program, value, initialowner, initialqacontact FROM components");
$sth->execute();
while (my ($program, $value, $initialowner) = $sth->fetchrow_array()) {
$initialowner =~ s/([\\\'])/\\$1/g; $initialowner =~ s/\0/\\0/g;
$program =~ s/([\\\'])/\\$1/g; $program =~ s/\0/\\0/g;
$value =~ s/([\\\'])/\\$1/g; $value =~ s/\0/\\0/g;
my $s2 = $dbh->prepare("SELECT userid FROM profiles WHERE login_name = '$initialowner'");
$s2->execute();
my $initialownerid = $s2->fetchrow_array();
unless (defined $initialownerid) {
print "Warning: You have an invalid initial owner '$initialowner' in program '$program', component '$value'!\n";
$initialownerid = 0;
}
my $update = "UPDATE components SET initialowner = $initialownerid ".
"WHERE program = '$program' AND value = '$value'";
my $s3 = $dbh->prepare("UPDATE components SET initialowner = $initialownerid ".
"WHERE program = '$program' AND value = '$value';");
$s3->execute();
}
ChangeFieldType('components','initialowner','mediumint');
}
if (($_ = GetFieldDef('components', 'initialqacontact')) and ($_->[1] eq 'tinytext')) {
$sth = $dbh->prepare("SELECT program, value, initialqacontact, initialqacontact FROM components");
$sth->execute();
while (my ($program, $value, $initialqacontact) = $sth->fetchrow_array()) {
$initialqacontact =~ s/([\\\'])/\\$1/g; $initialqacontact =~ s/\0/\\0/g;
$program =~ s/([\\\'])/\\$1/g; $program =~ s/\0/\\0/g;
$value =~ s/([\\\'])/\\$1/g; $value =~ s/\0/\\0/g;
my $s2 = $dbh->prepare("SELECT userid FROM profiles WHERE login_name = '$initialqacontact'");
$s2->execute();
my $initialqacontactid = $s2->fetchrow_array();
unless (defined $initialqacontactid) {
if ($initialqacontact ne '') {
print "Warning: You have an invalid initial QA contact '$initialqacontact' in program '$program', component '$value'!\n";
}
$initialqacontactid = 0;
}
my $update = "UPDATE components SET initialqacontact = $initialqacontactid ".
"WHERE program = '$program' AND value = '$value'";
my $s3 = $dbh->prepare("UPDATE components SET initialqacontact = $initialqacontactid ".
"WHERE program = '$program' AND value = '$value';");
$s3->execute();
}
ChangeFieldType('components','initialqacontact','mediumint');
}
my @states = ("UNCONFIRMED", "NEW", "ASSIGNED", "REOPENED", "RESOLVED", my @states = ("UNCONFIRMED", "NEW", "ASSIGNED", "REOPENED", "RESOLVED",
"VERIFIED", "CLOSED"); "VERIFIED", "CLOSED");
CheckEnumField('bugs', 'bug_status', @states); CheckEnumField('bugs', 'bug_status', @states);
......
...@@ -78,9 +78,15 @@ print "</tr>"; ...@@ -78,9 +78,15 @@ print "</tr>";
SendSQL("select value, initialowner, initialqacontact, description from components where program = " . SqlQuote($product) . " order by value"); SendSQL("select value, initialowner, initialqacontact, description from components where program = " . SqlQuote($product) . " order by value");
my @data;
while (MoreSQLData()) { while (MoreSQLData()) {
my @row = FetchSQLData(); push @data, [FetchSQLData()];
my ($component, $initialowner, $initialqacontact, $description) = (@row); }
foreach (@data) {
my ($component, $initialownerid, $initialqacontactid, $description) = @$_;
my ($initialowner, $initialqacontact) = ($initialownerid ? DBID_to_name ($initialownerid) : '',
$initialqacontactid ? DBID_to_name ($initialqacontactid) : '');
print qq| print qq|
<tr><td colspan=$cols><hr></td></tr> <tr><td colspan=$cols><hr></td></tr>
......
...@@ -116,7 +116,10 @@ sub CheckComponent ($$) ...@@ -116,7 +116,10 @@ sub CheckComponent ($$)
sub EmitFormElements ($$$$$) sub EmitFormElements ($$$$$)
{ {
my ($product, $component, $initialowner, $initialqacontact, $description) = @_; my ($product, $component, $initialownerid, $initialqacontactid, $description) = @_;
my ($initialowner, $initialqacontact) = ($initialownerid ? DBID_to_name ($initialownerid) : '',
$initialqacontactid ? DBID_to_name ($initialqacontactid) : '');
print " <TH ALIGN=\"right\">Component:</TH>\n"; print " <TH ALIGN=\"right\">Component:</TH>\n";
print " <TD><INPUT SIZE=64 MAXLENGTH=255 NAME=\"component\" VALUE=\"" . print " <TD><INPUT SIZE=64 MAXLENGTH=255 NAME=\"component\" VALUE=\"" .
...@@ -288,11 +291,16 @@ unless ($action) { ...@@ -288,11 +291,16 @@ unless ($action) {
if $dobugcounts; if $dobugcounts;
print " <TH ALIGN=\"left\">Delete</TH>\n"; print " <TH ALIGN=\"left\">Delete</TH>\n";
print "</TR>"; print "</TR>";
while ( MoreSQLData() ) { my @data;
my ($component,$desc,$initialowner,$initialqacontact, $bugs) = FetchSQLData(); while (MoreSQLData()) {
push @data, [FetchSQLData()];
}
foreach (@data) {
my ($component,$desc,$initialownerid,$initialqacontactid, $bugs) = @$_;
$desc ||= "<FONT COLOR=\"red\">missing</FONT>"; $desc ||= "<FONT COLOR=\"red\">missing</FONT>";
$initialowner ||= "<FONT COLOR=\"red\">missing</FONT>"; my $initialowner = $initialownerid ? DBID_to_name ($initialownerid) : "<FONT COLOR=\"red\">missing</FONT>";
$initialqacontact ||= "<FONT COLOR=\"red\">none</FONT>"; my $initialqacontact = $initialqacontactid ? DBID_to_name ($initialqacontactid) : "<FONT COLOR=\"red\">missing</FONT>";
print "<TR>\n"; print "<TR>\n";
print " <TD VALIGN=\"top\"><A HREF=\"editcomponents.cgi?product=", url_quote($product), "&component=", url_quote($component), "&action=edit\"><B>$component</B></A></TD>\n"; print " <TD VALIGN=\"top\"><A HREF=\"editcomponents.cgi?product=", url_quote($product), "&component=", url_quote($component), "&action=edit\"><B>$component</B></A></TD>\n";
print " <TD VALIGN=\"top\">$desc</TD>\n"; print " <TD VALIGN=\"top\">$desc</TD>\n";
...@@ -338,7 +346,7 @@ if ($action eq 'add') { ...@@ -338,7 +346,7 @@ if ($action eq 'add') {
print "<FORM METHOD=POST ACTION=editcomponents.cgi>\n"; print "<FORM METHOD=POST ACTION=editcomponents.cgi>\n";
print "<TABLE BORDER=0 CELLPADDING=4 CELLSPACING=0><TR>\n"; print "<TABLE BORDER=0 CELLPADDING=4 CELLSPACING=0><TR>\n";
EmitFormElements($product, '', '', '', ''); EmitFormElements($product, '', 0, 0, '');
print "</TR></TABLE>\n<HR>\n"; print "</TR></TABLE>\n<HR>\n";
print "<INPUT TYPE=SUBMIT VALUE=\"Add\">\n"; print "<INPUT TYPE=SUBMIT VALUE=\"Add\">\n";
...@@ -398,7 +406,17 @@ if ($action eq 'new') { ...@@ -398,7 +406,17 @@ if ($action eq 'new') {
exit; exit;
} }
my $initialownerid = DBname_to_id ($initialowner);
if (!$initialownerid) {
print "You must use an existing Bugzilla account as initial owner for the component
'$component'. Please press\n";
print "<b>Back</b> and try again.\n";
PutTrailer($localtrailer);
exit;
}
my $initialqacontact = trim($::FORM{initialqacontact} || ''); my $initialqacontact = trim($::FORM{initialqacontact} || '');
my $initialqacontactid = DBname_to_id ($initialqacontact);
if (Param('useqacontact')) { if (Param('useqacontact')) {
if ($initialqacontact eq '') { if ($initialqacontact eq '') {
print "You must enter an initial QA contact for the component '$component'. Please press\n"; print "You must enter an initial QA contact for the component '$component'. Please press\n";
...@@ -406,6 +424,13 @@ if ($action eq 'new') { ...@@ -406,6 +424,13 @@ if ($action eq 'new') {
PutTrailer($localtrailer); PutTrailer($localtrailer);
exit; exit;
} }
if (!$initialqacontactid) {
print "You must use an existing Bugzilla account as initial QA contact for the component '$component'. Please press\n";
print "<b>Back</b> and try again.\n";
PutTrailer($localtrailer);
exit;
}
# #
# Now validating to make sure it's too an existing account # Now validating to make sure it's too an existing account
# #
...@@ -419,8 +444,8 @@ if ($action eq 'new') { ...@@ -419,8 +444,8 @@ if ($action eq 'new') {
SqlQuote($product) . "," . SqlQuote($product) . "," .
SqlQuote($component) . "," . SqlQuote($component) . "," .
SqlQuote($description) . "," . SqlQuote($description) . "," .
SqlQuote($initialowner) . "," . SqlQuote($initialownerid) . "," .
SqlQuote($initialqacontact) . ")"); SqlQuote($initialqacontactid) . ")");
# Make versioncache flush # Make versioncache flush
unlink "data/versioncache"; unlink "data/versioncache";
...@@ -458,13 +483,14 @@ if ($action eq 'del') { ...@@ -458,13 +483,14 @@ if ($action eq 'del') {
my ($product,$pdesc,$milestoneurl,$disallownew, my ($product,$pdesc,$milestoneurl,$disallownew,
$dummy,$component,$initialowner,$initialqacontact,$cdesc) = FetchSQLData(); $dummy,$component,$initialownerid,$initialqacontactid,$cdesc) = FetchSQLData();
my $initialowner = $initialownerid ? DBID_to_name ($initialownerid) : "<FONT COLOR=\"red\">missing</FONT>";
my $initialqacontact = $initialqacontactid ? DBID_to_name ($initialqacontactid) : "<FONT COLOR=\"red\">missing</FONT>";
$pdesc ||= "<FONT COLOR=\"red\">missing</FONT>"; $pdesc ||= "<FONT COLOR=\"red\">missing</FONT>";
$milestoneurl ||= "<FONT COLOR=\"red\">missing</FONT>"; $milestoneurl ||= "<FONT COLOR=\"red\">missing</FONT>";
$disallownew = $disallownew ? 'closed' : 'open'; $disallownew = $disallownew ? 'closed' : 'open';
$initialowner ||= "<FONT COLOR=\"red\">missing</FONT>";
$initialqacontact ||= "<FONT COLOR=\"red\">missing</FONT>";
$cdesc ||= "<FONT COLOR=\"red\">missing</FONT>"; $cdesc ||= "<FONT COLOR=\"red\">missing</FONT>";
print "<TABLE BORDER=1 CELLPADDING=4 CELLSPACING=0><TR BGCOLOR=\"#6666FF\">\n"; print "<TABLE BORDER=1 CELLPADDING=4 CELLSPACING=0><TR BGCOLOR=\"#6666FF\">\n";
...@@ -637,14 +663,17 @@ if ($action eq 'edit') { ...@@ -637,14 +663,17 @@ if ($action eq 'edit') {
AND value=" . SqlQuote($component) ); AND value=" . SqlQuote($component) );
my ($product,$pdesc,$milestoneurl,$disallownew, my ($product,$pdesc,$milestoneurl,$disallownew,
$dummy,$component,$initialowner,$initialqacontact,$cdesc) = FetchSQLData(); $dummy,$component,$initialownerid,$initialqacontactid,$cdesc) = FetchSQLData();
my $initialowner = $initialownerid ? DBID_to_name ($initialownerid) : '';
my $initialqacontact = $initialqacontactid ? DBID_to_name ($initialqacontactid) : '';
print "<FORM METHOD=POST ACTION=editcomponents.cgi>\n"; print "<FORM METHOD=POST ACTION=editcomponents.cgi>\n";
print "<TABLE BORDER=0 CELLPADDING=4 CELLSPACING=0><TR>\n"; print "<TABLE BORDER=0 CELLPADDING=4 CELLSPACING=0><TR>\n";
#+++ display product/product description #+++ display product/product description
EmitFormElements($product, $component, $initialowner, $initialqacontact, $cdesc); EmitFormElements($product, $component, $initialownerid, $initialqacontactid, $cdesc);
print "</TR><TR>\n"; print "</TR><TR>\n";
print " <TH ALIGN=\"right\">Bugs:</TH>\n"; print " <TH ALIGN=\"right\">Bugs:</TH>\n";
...@@ -701,7 +730,7 @@ if ($action eq 'update') { ...@@ -701,7 +730,7 @@ if ($action eq 'update') {
# them, be sure to test for WHERE='$component' or WHERE='$componentold' # them, be sure to test for WHERE='$component' or WHERE='$componentold'
SendSQL("LOCK TABLES bugs WRITE, SendSQL("LOCK TABLES bugs WRITE,
components WRITE"); components WRITE, profiles READ");
if ($description ne $descriptionold) { if ($description ne $descriptionold) {
unless ($description) { unless ($description) {
...@@ -721,14 +750,21 @@ if ($action eq 'update') { ...@@ -721,14 +750,21 @@ if ($action eq 'update') {
if ($initialowner ne $initialownerold) { if ($initialowner ne $initialownerold) {
unless ($initialowner) { unless ($initialowner) {
print "Sorry, I can't delete the initial owner."; print "Sorry, I can't delete the initial owner.";
PutTrailer($localtrailer);
SendSQL("UNLOCK TABLES"); SendSQL("UNLOCK TABLES");
PutTrailer($localtrailer);
exit; exit;
} }
#+++
#DBNameToIdAndCheck($initialowner, 0); my $initialownerid = DBname_to_id($initialowner);
unless ($initialownerid) {
print "Sorry, you must use an existing Bugzilla account as initial owner.";
SendSQL("UNLOCK TABLES");
PutTrailer($localtrailer);
exit;
}
SendSQL("UPDATE components SendSQL("UPDATE components
SET initialowner=" . SqlQuote($initialowner) . " SET initialowner=" . SqlQuote($initialownerid) . "
WHERE program=" . SqlQuote($product) . " WHERE program=" . SqlQuote($product) . "
AND value=" . SqlQuote($componentold)); AND value=" . SqlQuote($componentold));
print "Updated initial owner.<BR>\n"; print "Updated initial owner.<BR>\n";
...@@ -737,14 +773,21 @@ if ($action eq 'update') { ...@@ -737,14 +773,21 @@ if ($action eq 'update') {
if (Param('useqacontact') && $initialqacontact ne $initialqacontactold) { if (Param('useqacontact') && $initialqacontact ne $initialqacontactold) {
unless ($initialqacontact) { unless ($initialqacontact) {
print "Sorry, I can't delete the initial QA contact."; print "Sorry, I can't delete the initial QA contact.";
PutTrailer($localtrailer);
SendSQL("UNLOCK TABLES"); SendSQL("UNLOCK TABLES");
PutTrailer($localtrailer);
exit; exit;
} }
#+++
#DBNameToIdAndCheck($initialqacontact, 0); my $initialqacontactid = DBname_to_id($initialqacontact);
unless ($initialqacontactid) {
print "Sorry, you must use an existing Bugzilla account as initial QA contact.";
SendSQL("UNLOCK TABLES");
PutTrailer($localtrailer);
exit;
}
SendSQL("UPDATE components SendSQL("UPDATE components
SET initialqacontact=" . SqlQuote($initialqacontact) . " SET initialqacontact=" . SqlQuote($initialqacontactid) . "
WHERE program=" . SqlQuote($product) . " WHERE program=" . SqlQuote($product) . "
AND value=" . SqlQuote($componentold)); AND value=" . SqlQuote($componentold));
print "Updated initial QA contact.<BR>\n"; print "Updated initial QA contact.<BR>\n";
......
...@@ -566,7 +566,7 @@ if ($action eq 'del') { ...@@ -566,7 +566,7 @@ if ($action eq 'del') {
SendSQL("SELECT program, value SendSQL("SELECT program, value
FROM components FROM components
WHERE initialowner=" . SqlQuote($user)); WHERE initialowner=" . DBname_to_id($user));
$found = 0; $found = 0;
while (MoreSQLData()) { while (MoreSQLData()) {
if ($found) { if ($found) {
...@@ -590,7 +590,7 @@ if ($action eq 'del') { ...@@ -590,7 +590,7 @@ if ($action eq 'del') {
SendSQL("SELECT program, value SendSQL("SELECT program, value
FROM components FROM components
WHERE initialqacontact=" . SqlQuote($user)); WHERE initialqacontact=" . DBname_to_id($user));
$found = 0; $found = 0;
while (MoreSQLData()) { while (MoreSQLData()) {
if ($found) { if ($found) {
......
...@@ -101,7 +101,6 @@ if ($::FORM{'assigned_to'} eq "") { ...@@ -101,7 +101,6 @@ if ($::FORM{'assigned_to'} eq "") {
$forceAssignedOK = 1; $forceAssignedOK = 1;
} }
$::FORM{'assigned_to'} = DBNameToIdAndCheck($::FORM{'assigned_to'}, $forceAssignedOK);
$::FORM{'reporter'} = DBNameToIdAndCheck($::FORM{'reporter'}); $::FORM{'reporter'} = DBNameToIdAndCheck($::FORM{'reporter'});
...@@ -115,8 +114,8 @@ if (Param("useqacontact")) { ...@@ -115,8 +114,8 @@ if (Param("useqacontact")) {
SqlQuote($::FORM{'product'}) . SqlQuote($::FORM{'product'}) .
" and value=" . SqlQuote($::FORM{'component'})); " and value=" . SqlQuote($::FORM{'component'}));
my $qacontact = FetchOneColumn(); my $qacontact = FetchOneColumn();
if (defined $qacontact && $qacontact ne "") { if (defined $qacontact && $qacontact != 0) {
$::FORM{'qa_contact'} = DBNameToIdAndCheck($qacontact, 1); $::FORM{'qa_contact'} = $qacontact;
push(@bug_fields, "qa_contact"); push(@bug_fields, "qa_contact");
} }
} }
......
...@@ -489,8 +489,8 @@ SWITCH: for ($::FORM{'knob'}) { ...@@ -489,8 +489,8 @@ SWITCH: for ($::FORM{'knob'}) {
SendSQL("select initialowner from components where program=" . SendSQL("select initialowner from components where program=" .
SqlQuote($::FORM{'product'}) . " and value=" . SqlQuote($::FORM{'product'}) . " and value=" .
SqlQuote($::FORM{'component'})); SqlQuote($::FORM{'component'}));
my $newname = FetchOneColumn(); my $newid = FetchOneColumn();
my $newid = DBNameToIdAndCheck($newname, 1); my $newname = DBID_to_name($newid);
DoComma(); DoComma();
$::query .= "assigned_to = $newid"; $::query .= "assigned_to = $newid";
if (Param("useqacontact")) { if (Param("useqacontact")) {
...@@ -498,10 +498,9 @@ SWITCH: for ($::FORM{'knob'}) { ...@@ -498,10 +498,9 @@ SWITCH: for ($::FORM{'knob'}) {
SqlQuote($::FORM{'product'}) . SqlQuote($::FORM{'product'}) .
" and value=" . SqlQuote($::FORM{'component'})); " and value=" . SqlQuote($::FORM{'component'}));
my $qacontact = FetchOneColumn(); my $qacontact = FetchOneColumn();
if (defined $qacontact && $qacontact ne "") { if (defined $qacontact && $qacontact != 0) {
my $newqa = DBNameToIdAndCheck($qacontact, 1);
DoComma(); DoComma();
$::query .= "qa_contact = $newqa"; $::query .= "qa_contact = $qacontact";
} }
} }
last SWITCH; last SWITCH;
......
...@@ -146,11 +146,8 @@ CrossCheck("profiles", "userid", ...@@ -146,11 +146,8 @@ CrossCheck("profiles", "userid",
["cc", "who", "bug_id"], ["cc", "who", "bug_id"],
["votes", "who", "bug_id"], ["votes", "who", "bug_id"],
["longdescs", "who", "bug_id"], ["longdescs", "who", "bug_id"],
["namedqueries", "userid"]); ["namedqueries", "userid"],
["components", "initialowner"]);
CrossCheck("profiles", "login_name",
["components", "initialowner"]),;
Status("Checking passwords"); Status("Checking passwords");
SendSQL("SELECT COUNT(*) FROM profiles WHERE cryptpassword != ENCRYPT(password, left(cryptpassword, 2))"); SendSQL("SELECT COUNT(*) FROM profiles WHERE cryptpassword != ENCRYPT(password, left(cryptpassword, 2))");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment