]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
fix for 66876: Using userids (mediumint) for initialowner and initialqacontact
authorcyeh%bluemartini.com <>
Fri, 23 Feb 2001 02:11:22 +0000 (02:11 +0000)
committercyeh%bluemartini.com <>
Fri, 23 Feb 2001 02:11:22 +0000 (02:11 +0000)
based on patch submitted by baulig@suse.de (Martin Baulig).

checksetup.pl
describecomponents.cgi
editcomponents.cgi
editusers.cgi
post_bug.cgi
process_bug.cgi
sanitycheck.cgi

index 8b8054081086f9105b220076c9be6b6d60d1743f..11993e525425ed7f78f15a1fd1be303e1629e0a3 100755 (executable)
@@ -755,8 +755,8 @@ $table{longdescs} =
 $table{components} =
    'value tinytext,
     program varchar(64),
-    initialowner tinytext not null,     # Should arguably be a mediumint!
-    initialqacontact tinytext not null, # Should arguably be a mediumint!
+    initialowner mediumint not null,
+    initialqacontact mediumint not null,
     description mediumtext not null';
 
 
@@ -1824,6 +1824,66 @@ my @resolutions = ("", "FIXED", "INVALID", "WONTFIX", "LATER", "REMIND",
                   "DUPLICATE", "WORKSFORME", "MOVED");
 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",
               "VERIFIED", "CLOSED");
 CheckEnumField('bugs', 'bug_status', @states);
index e1b646f51986bfd7c612b527dab1a273d85f1fbb..4353af2fce2a99c0bbec44ea48622bb7a60b41c5 100755 (executable)
@@ -78,9 +78,15 @@ print "</tr>";
 
 SendSQL("select value, initialowner, initialqacontact, description from components where program = " . SqlQuote($product) . " order by value");
 
+my @data;
 while (MoreSQLData()) {
-    my @row = FetchSQLData();
-    my ($component, $initialowner, $initialqacontact, $description) = (@row);
+    push @data, [FetchSQLData()];
+}
+foreach (@data) {
+    my ($component, $initialownerid, $initialqacontactid, $description) = @$_;
+
+    my ($initialowner, $initialqacontact) = ($initialownerid ? DBID_to_name ($initialownerid) : '',
+                                             $initialqacontactid ? DBID_to_name ($initialqacontactid) : '');
 
     print qq|
 <tr><td colspan=$cols><hr></td></tr>
index 4714a4d8a422de3a96f23532d0536bd47c6b1b6d..dcca05bbacbc22a975c586ee39f18f358ed654ed 100755 (executable)
@@ -116,7 +116,10 @@ sub CheckComponent ($$)
 
 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 "  <TD><INPUT SIZE=64 MAXLENGTH=255 NAME=\"component\" VALUE=\"" .
@@ -288,11 +291,16 @@ unless ($action) {
         if $dobugcounts;
     print "  <TH ALIGN=\"left\">Delete</TH>\n";
     print "</TR>";
-    while ( MoreSQLData() ) {
-        my ($component,$desc,$initialowner,$initialqacontact, $bugs) = FetchSQLData();
+    my @data;
+    while (MoreSQLData()) {
+        push @data, [FetchSQLData()];
+    }
+    foreach (@data) {
+        my ($component,$desc,$initialownerid,$initialqacontactid, $bugs) = @$_;
+
         $desc             ||= "<FONT COLOR=\"red\">missing</FONT>";
-        $initialowner     ||= "<FONT COLOR=\"red\">missing</FONT>";
-        $initialqacontact ||= "<FONT COLOR=\"red\">none</FONT>";
+        my $initialowner = $initialownerid ? DBID_to_name ($initialownerid) : "<FONT COLOR=\"red\">missing</FONT>";
+        my $initialqacontact = $initialqacontactid ? DBID_to_name ($initialqacontactid) : "<FONT COLOR=\"red\">missing</FONT>";
         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\">$desc</TD>\n";
@@ -338,7 +346,7 @@ if ($action eq 'add') {
     print "<FORM METHOD=POST ACTION=editcomponents.cgi>\n";
     print "<TABLE BORDER=0 CELLPADDING=4 CELLSPACING=0><TR>\n";
 
-    EmitFormElements($product, '', '', '', '');
+    EmitFormElements($product, '', 0, 0, '');
 
     print "</TR></TABLE>\n<HR>\n";
     print "<INPUT TYPE=SUBMIT VALUE=\"Add\">\n";
@@ -398,7 +406,17 @@ if ($action eq 'new') {
         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 $initialqacontactid = DBname_to_id ($initialqacontact);
     if (Param('useqacontact')) {
         if ($initialqacontact eq '') {
             print "You must enter an initial QA contact for the component '$component'. Please press\n";
@@ -406,6 +424,13 @@ if ($action eq 'new') {
             PutTrailer($localtrailer);
             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
        #
@@ -419,8 +444,8 @@ if ($action eq 'new') {
           SqlQuote($product) . "," .
           SqlQuote($component) . "," .
           SqlQuote($description) . "," .
-          SqlQuote($initialowner) . "," .
-          SqlQuote($initialqacontact) . ")");
+          SqlQuote($initialownerid) . "," .
+          SqlQuote($initialqacontactid) . ")");
 
     # Make versioncache flush
     unlink "data/versioncache";
@@ -458,13 +483,14 @@ if ($action eq 'del') {
 
 
     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>";
     $milestoneurl     ||= "<FONT COLOR=\"red\">missing</FONT>";
     $disallownew        = $disallownew ? 'closed' : 'open';
-    $initialowner     ||= "<FONT COLOR=\"red\">missing</FONT>";
-    $initialqacontact ||= "<FONT COLOR=\"red\">missing</FONT>";
     $cdesc            ||= "<FONT COLOR=\"red\">missing</FONT>";
     
     print "<TABLE BORDER=1 CELLPADDING=4 CELLSPACING=0><TR BGCOLOR=\"#6666FF\">\n";
@@ -637,14 +663,17 @@ if ($action eq 'edit') {
                AND   value=" . SqlQuote($component) );
 
     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 "<TABLE BORDER=0 CELLPADDING=4 CELLSPACING=0><TR>\n";
 
     #+++ display product/product description
 
-    EmitFormElements($product, $component, $initialowner, $initialqacontact, $cdesc);
+    EmitFormElements($product, $component, $initialownerid, $initialqacontactid, $cdesc);
 
     print "</TR><TR>\n";
     print "  <TH ALIGN=\"right\">Bugs:</TH>\n";
@@ -701,7 +730,7 @@ if ($action eq 'update') {
     # them, be sure to test for WHERE='$component' or WHERE='$componentold'
 
     SendSQL("LOCK TABLES bugs WRITE,
-                         components WRITE");
+                         components WRITE, profiles READ");
 
     if ($description ne $descriptionold) {
         unless ($description) {
@@ -721,14 +750,21 @@ if ($action eq 'update') {
     if ($initialowner ne $initialownerold) {
         unless ($initialowner) {
             print "Sorry, I can't delete the initial owner.";
-            PutTrailer($localtrailer);
            SendSQL("UNLOCK TABLES");
+            PutTrailer($localtrailer);
             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
-                 SET initialowner=" . SqlQuote($initialowner) . "
+                 SET initialowner=" . SqlQuote($initialownerid) . "
                  WHERE program=" . SqlQuote($product) . "
                    AND value=" . SqlQuote($componentold));
         print "Updated initial owner.<BR>\n";
@@ -737,14 +773,21 @@ if ($action eq 'update') {
     if (Param('useqacontact') && $initialqacontact ne $initialqacontactold) {
         unless ($initialqacontact) {
             print "Sorry, I can't delete the initial QA contact.";
-            PutTrailer($localtrailer);
            SendSQL("UNLOCK TABLES");
+            PutTrailer($localtrailer);
             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
-                 SET initialqacontact=" . SqlQuote($initialqacontact) . "
+                 SET initialqacontact=" . SqlQuote($initialqacontactid) . "
                  WHERE program=" . SqlQuote($product) . "
                    AND value=" . SqlQuote($componentold));
         print "Updated initial QA contact.<BR>\n";
index 72e42f03de794bb1cb1eaa553b30441319ffbeda..319b2ea79549cf298b52c4bee5de5dc40a6dddb8 100755 (executable)
@@ -566,7 +566,7 @@ if ($action eq 'del') {
 
     SendSQL("SELECT program, value
             FROM components
-            WHERE initialowner=" . SqlQuote($user));
+             WHERE initialowner=" . DBname_to_id($user));
     $found = 0;
     while (MoreSQLData()) {
        if ($found) {
@@ -590,7 +590,7 @@ if ($action eq 'del') {
 
     SendSQL("SELECT program, value
             FROM components
-            WHERE initialqacontact=" . SqlQuote($user));
+             WHERE initialqacontact=" . DBname_to_id($user));
     $found = 0;
     while (MoreSQLData()) {
        if ($found) {
index a9878ba6aeddf9d2c6d08d3990573b157a01b9af..ae1ba4c7c17ac6713596b14178f50ad363fb4ebc 100755 (executable)
@@ -101,7 +101,6 @@ if ($::FORM{'assigned_to'} eq "") {
     $forceAssignedOK = 1;
 }
 
-$::FORM{'assigned_to'} = DBNameToIdAndCheck($::FORM{'assigned_to'}, $forceAssignedOK);
 $::FORM{'reporter'} = DBNameToIdAndCheck($::FORM{'reporter'});
 
 
@@ -115,8 +114,8 @@ if (Param("useqacontact")) {
             SqlQuote($::FORM{'product'}) .
             " and value=" . SqlQuote($::FORM{'component'}));
     my $qacontact = FetchOneColumn();
-    if (defined $qacontact && $qacontact ne "") {
-        $::FORM{'qa_contact'} = DBNameToIdAndCheck($qacontact, 1);
+    if (defined $qacontact && $qacontact != 0) {
+        $::FORM{'qa_contact'} = $qacontact;
         push(@bug_fields, "qa_contact");
     }
 }
index ba4b2335ba37da8c88bc0527accbb2cd0477d5dc..f27961aef6fdb366b8c67f2a703fbf1aa6fd9c38 100755 (executable)
@@ -489,8 +489,8 @@ SWITCH: for ($::FORM{'knob'}) {
         SendSQL("select initialowner from components where program=" .
                 SqlQuote($::FORM{'product'}) . " and value=" .
                 SqlQuote($::FORM{'component'}));
-        my $newname = FetchOneColumn();
-        my $newid = DBNameToIdAndCheck($newname, 1);
+        my $newid = FetchOneColumn();
+        my $newname = DBID_to_name($newid);
         DoComma();
         $::query .= "assigned_to = $newid";
         if (Param("useqacontact")) {
@@ -498,10 +498,9 @@ SWITCH: for ($::FORM{'knob'}) {
                     SqlQuote($::FORM{'product'}) .
                     " and value=" . SqlQuote($::FORM{'component'}));
             my $qacontact = FetchOneColumn();
-            if (defined $qacontact && $qacontact ne "") {
-                my $newqa = DBNameToIdAndCheck($qacontact, 1);
+            if (defined $qacontact && $qacontact != 0) {
                 DoComma();
-                $::query .= "qa_contact = $newqa";
+                $::query .= "qa_contact = $qacontact";
             }
         }
         last SWITCH;
index d19206cdd283653626b263adba15c34fa7ae0882..bcd1716a6be85c087eb5a3673f5681f1f809d2a9 100755 (executable)
@@ -146,11 +146,8 @@ CrossCheck("profiles", "userid",
            ["cc", "who", "bug_id"],
            ["votes", "who", "bug_id"],
            ["longdescs", "who", "bug_id"],
-           ["namedqueries", "userid"]);
-
-CrossCheck("profiles", "login_name",
-       ["components", "initialowner"]),;
-
+           ["namedqueries", "userid"],
+          ["components", "initialowner"]);
 
 Status("Checking passwords");
 SendSQL("SELECT COUNT(*) FROM profiles WHERE cryptpassword != ENCRYPT(password, left(cryptpassword, 2))");