]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Fix for bug 21253: removing all single-parameter system() calls from Bugzilla
authorjustdave%syndicomm.com <>
Thu, 7 Jun 2001 04:17:39 +0000 (04:17 +0000)
committerjustdave%syndicomm.com <>
Thu, 7 Jun 2001 04:17:39 +0000 (04:17 +0000)
Patch by Dave Miller <justdave@syndicomm.com>
r= tara@tequilarista.org

checksetup.pl
collectstats.pl
globals.pl
process_bug.cgi
syncshadowdb

index 672371fa6ec633362243f0287d7c6c8c3e48354a..68d72b39e8da83765be10e093d610f3b582af103 100755 (executable)
@@ -1233,7 +1233,7 @@ CheckEnumField('bugs', 'rep_platform', @my_platforms);
 #  that login, if it doesn't exist already, and make it a member of all groups.
 
 sub bailout {   # this is just in case we get interrupted while getting passwd
-    system("stty echo"); # re-enable input echoing
+    system("stty","echo"); # re-enable input echoing
     exit 1;
 }
 
@@ -1313,7 +1313,7 @@ _End_Of_SQL_
     $SIG{QUIT} = \&bailout;
     $SIG{TERM} = \&bailout;
 
-    system("stty -echo");  # disable input echoing
+    system("stty","-echo");  # disable input echoing
 
     while( $pass1 ne $pass2 ) {
       while( $pass1 eq "" ) {
@@ -1334,7 +1334,7 @@ _End_Of_SQL_
       }
     }
 
-    system("stty echo"); # re-enable input echoing
+    system("stty","echo"); # re-enable input echoing
     $SIG{HUP}  = 'DEFAULT'; # and remove our interrupt hooks
     $SIG{INT}  = 'DEFAULT';
     $SIG{QUIT} = 'DEFAULT';
index e36a3ca9036428f6520db2cb9e5248273e592e6d..4e69ab9b5fb123b140282abb036078bba6ca4b71 100755 (executable)
@@ -131,8 +131,8 @@ sub calculate_dupes {
     # Save % count here in a date-named file
     # so we can read it back in to do changed counters
     # First, delete it if it exists, so we don't add to the contents of an old file
-    if (<data/duplicates/dupes$today*>) {
-        system("rm -f data/duplicates/dupes$today*");
+    if (my @files = <data/duplicates/dupes$today*>) {
+        unlink @files;
     }
    
     dbmopen(%count, "data/duplicates/dupes$today", 0644) || die "Can't open DBM dupes file: $!";
index e81363673857dc2d64593db569f080dd787ab97f..8d539f035a8a2f93365499585e648591e104222a 100644 (file)
@@ -109,8 +109,27 @@ sub ReconnectToShadowDatabase {
 my $shadowchanges = 0;
 sub SyncAnyPendingShadowChanges {
     if ($shadowchanges) {
-        system("./syncshadowdb &");
-        $shadowchanges = 0;
+        my $pid;
+        FORK: {
+            if ($pid = fork) { # create a fork
+                # parent code runs here
+                $shadowchanges = 0;
+                return;
+            } elsif (defined $pid) {
+                # child process code runs here
+                exec("./syncshadowdb",[]) or die "Unable to exec syncshadowdb: $!";
+                # passing the empty list as a second parameter tricks it into
+                # using execvp instead of running a shell, but still doesn't
+                # pass any parameters to syncshadowdb
+            } elsif ($! =~ /No more process/) {
+                # recoverable fork error, try again in 5 seconds
+                sleep 5;
+                redo FORK;
+            } else {
+                # something weird went wrong
+                die "Can't create background process to run syncshadowdb: $!";
+            }
+        }
     }
 }
 
index b2327b0fd7e7383b99d087a9beb5b158eaee17b9..81f6846b89f5dc4a5ea95f199415198a7de45d94 100755 (executable)
@@ -993,7 +993,7 @@ The changes made were:
     print "<TABLE BORDER=1><TD><H2>Changes to bug $id submitted</H2>\n";
     SendSQL("unlock tables");
 
-    my @ARGLIST = ("./processmail");
+    my @ARGLIST = ();
     if ( $removedCcString ne "" ) {
         push @ARGLIST, ("-forcecc", $removedCcString);
     }
@@ -1004,7 +1004,7 @@ The changes made were:
         push @ARGLIST, ( "-forceqacontact", $origQaContact);
     }
     push @ARGLIST, ($id, $::FORM{'who'});
-    system @ARGLIST;
+    system ("./processmail",@ARGLIST);
 
     print "<TD><A HREF=\"show_bug.cgi?id=$id\">Back To BUG# $id</A></TABLE>\n";
 
index 94e49204418499c7381f1e356cd35b30f4fcd63e..985bd16b8d85b094231d00f247f5bb3bddde3ada 100755 (executable)
@@ -156,10 +156,13 @@ if ($syncall) {
     }
     Verbose("Locking entire database");
     SendSQL($query);
-    my $tablelist = join(' ', @tables);
     my $tempfile = "data/tmpsyncshadow.$$";
     Verbose("Dumping database to a temp file ($tempfile).");
-    system("mysqldump -l -e $db_name $tablelist > $tempfile");
+    open SAVEOUT, ">&STDOUT";     # stash the original output stream
+    open STDOUT, ">$tempfile";    # redirect to file
+    select STDOUT; $| = 1;        # disable buffering
+    system("mysqldump","-l","-e",$db_name,@tables);
+    open STDOUT, ">&SAVEOUT";     # redirect back to original stream
     Verbose("Restoring from tempfile into shadowdb");
     my $extra = "";
     if ($verbose) {