Store PID in environment variable so it can be more easily accessed
authorJamie Cameron <jcameron@webmin.com>
Mon, 30 Aug 2010 21:34:00 +0000 (14:34 -0700)
committerJamie Cameron <jcameron@webmin.com>
Mon, 30 Aug 2010 21:34:00 +0000 (14:34 -0700)
miniserv.pl
web-lib-funcs.pl

index cac9e04..1e11cd0 100755 (executable)
@@ -2081,6 +2081,7 @@ if (&get_type($full) eq "internal/cgi" && $validated != 4) {
        $ENV{"QUERY_STRING"} = $querystring;
        $ENV{"MINISERV_CONFIG"} = $config_file;
        $ENV{"HTTPS"} = "ON" if ($use_ssl || $config{'inetd_ssl'});
+       $ENV{"MINISERV_PID"} = $miniserv_main_pid;
        $ENV{"SESSION_ID"} = $session_id if ($session_id);
        $ENV{"LOCAL_USER"} = $localauth_user if ($localauth_user);
        $ENV{"MINISERV_INTERNAL"} = $miniserv_internal if ($miniserv_internal);
@@ -4645,6 +4646,7 @@ sub write_pid_file
 open(PIDFILE, ">$config{'pidfile'}");
 printf PIDFILE "%d\n", getpid();
 close(PIDFILE);
+$miniserv_main_pid = getpid();
 }
 
 # lock_user_password(user)
@@ -4890,6 +4892,7 @@ foreach my $cron (@webmincrons) {
                        $ENV{"DOCUMENT_REALROOT"} = $root0;
                        $ENV{"MINISERV_CONFIG"} = $config_file;
                        $ENV{"HTTPS"} = "ON" if ($use_ssl);
+                       $ENV{"MINISERV_PID"} = $miniserv_main_pid;
                        $ENV{"SCRIPT_FILENAME"} = $config{'webmincron_wrapper'};
                        if ($ENV{"SCRIPT_FILENAME"} =~ /^\Q$root0\E(\/.*)$/) {
                                $ENV{"SCRIPT_NAME"} = $1;
@@ -4910,7 +4913,7 @@ foreach my $cron (@webmincrons) {
                                };
 
                        # Run the wrapper script by evaling it
-                       $pkg = "webmincron";    # XXX
+                       $pkg = "webmincron";
                        $0 = $config{'webmincron_wrapper'};
                        @ARGV = ( $cron );
                        $main_process_id = $$;
index bdf8166..14e034e 100755 (executable)
@@ -1789,10 +1789,14 @@ if ($gconfig{'os_type'} ne 'windows') {
        my ($pid, $addr, $i);
        $miniserv{'inetd'} && return;
        my @oldst = stat($miniserv{'pidfile'});
-       open(PID, $miniserv{'pidfile'}) || &error("Failed to open PID file");
-       chop($pid = <PID>);
-       close(PID);
-       if (!$pid) { &error("Invalid PID file"); }
+       $pid = $ENV{'MINISERV_PID'};
+       if (!$pid) {
+               open(PID, $miniserv{'pidfile'}) ||
+                       &error("Failed to open PID file $miniserv{'pidfile'}");
+               chop($pid = <PID>);
+               close(PID);
+               $pid || &error("Invalid PID file $miniserv{'pidfile'}");
+               }
 
        # Just signal miniserv to restart
        &kill_logged('HUP', $pid) || &error("Incorrect Webmin PID $pid");
@@ -1849,10 +1853,14 @@ if ($gconfig{'os_type'} ne 'windows') {
        # Send a USR1 signal to re-read the config
        my ($pid, $addr, $i);
        $miniserv{'inetd'} && return;
-       open(PID, $miniserv{'pidfile'}) || &error("Failed to open PID file");
-       chop($pid = <PID>);
-       close(PID);
-       if (!$pid) { &error("Invalid PID file"); }
+       $pid = $ENV{'MINISERV_PID'};
+       if (!$pid) {
+               open(PID, $miniserv{'pidfile'}) ||
+                       &error("Failed to open PID file $miniserv{'pidfile'}");
+               chop($pid = <PID>);
+               close(PID);
+               $pid || &error("Invalid PID file $miniserv{'pidfile'}");
+               }
        &kill_logged('USR1', $pid) || &error("Incorrect Webmin PID $pid");
 
        # Make sure this didn't kill Webmin!
@@ -6256,7 +6264,8 @@ foreach my $e ('WEBMIN_CONFIG', 'SERVER_NAME', 'CONTENT_TYPE', 'REQUEST_URI',
            'MINISERV_CONFIG', 'SCRIPT_NAME', 'SERVER_ADMIN', 'CONTENT_LENGTH',
            'HTTPS', 'FOREIGN_MODULE_NAME', 'FOREIGN_ROOT_DIRECTORY',
            'SCRIPT_FILENAME', 'PATH_TRANSLATED', 'BASE_REMOTE_USER',
-           'DOCUMENT_REALROOT', 'MINISERV_CONFIG', 'MYSQL_PWD') {
+           'DOCUMENT_REALROOT', 'MINISERV_CONFIG', 'MYSQL_PWD',
+           'MINISERV_PID') {
        delete($ENV{$e});
        }
 }