diff options
Diffstat (limited to 'net-mgmt/net-snmp53/files/patch-local:fixproc')
-rw-r--r-- | net-mgmt/net-snmp53/files/patch-local:fixproc | 150 |
1 files changed, 122 insertions, 28 deletions
diff --git a/net-mgmt/net-snmp53/files/patch-local:fixproc b/net-mgmt/net-snmp53/files/patch-local:fixproc index 5d6e351..4fa3728 100644 --- a/net-mgmt/net-snmp53/files/patch-local:fixproc +++ b/net-mgmt/net-snmp53/files/patch-local:fixproc @@ -1,21 +1,23 @@ ---- local/fixproc.orig Sat Apr 20 09:30:13 2002 -+++ local/fixproc Sat Mar 6 01:59:59 2004 +--- local/fixproc.orig Sat Apr 20 16:30:13 2002 ++++ local/fixproc Wed Jul 13 08:53:37 2005 @@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!%%PERL%% # # fixproc [-min n] [-max n] [-check | -kill | -restart | -exist | -fix] proc ... # -@@ -129,7 +129,7 @@ +@@ -129,7 +129,9 @@ # # Timothy Kong 3/1995 -$database_file = '/local/etc/fixproc.conf'; ++use File::Temp qw(tempfile); ++ +$database_file = '%%PREFIX%%/etc/fixproc.conf'; $debug = 0; # specify debug level using -dN # currently defined: -d1 -@@ -155,6 +155,14 @@ +@@ -155,6 +157,14 @@ $shell_header = "#!/bin/sh\n"; $shell_end_marker = 'shell_end_marker'; @@ -30,61 +32,122 @@ &read_args(); &read_database(); # &dump_database(); # debug only -@@ -203,7 +211,9 @@ +@@ -191,20 +201,19 @@ + sub create_sh_script + { + local ($file) = pop (@_); ++ local ($fh) = pop (@_); + local ($i) = pop (@_); + +- printf (stderr "create_sh_script\n") if ($debug > 0); ++ printf (STDERR "create_sh_script\n") if ($debug > 0); + + $! = $fixproc_error; +- open (file, ">"."$file") || die "$0: cannot open $file\n"; + while ( $shell_lines[$i] ne $shell_end_marker ) + { +- printf (file "%s", $shell_lines[$i]); ++ printf ($fh "%s", $shell_lines[$i]); $i++; } - close (file); +- close (file); - system "chmod +x $file"; -+ ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, -+ $atime,$mtime,$ctime,$blksize,$blocks) = stat($file); -+ chmod $mode | 0111, $file; - return file; +- return file; ++ close ($fh); ++ chmod 0755, $file; } -@@ -237,8 +247,8 @@ + +@@ -212,7 +221,7 @@ + { + local ($proc) = pop(@_); + +- printf (stderr "do_fix\n") if ($debug > 0); ++ printf (STDERR "do_fix\n") if ($debug > 0); + + if ($fix{$proc} eq '') + { +@@ -230,15 +239,14 @@ + else + { + # it must be "shell", so execute the shell script defined in database ++ local ($tmpfh, $tmpfile) = tempfile("fix_XXXXXXXX", DIR => "/tmp"); + +- local ($tmpfile) = "/tmp/fix_$$"; +- +- &create_sh_script ($fix{$proc}, $tmpfile); ++ &create_sh_script ($fix{$proc}, $tmpfh, $tmpfile); # return code is number divided by 256 $error_code = (system "$tmpfile") / 256; - system "rm $tmpfile"; - return ($fix_failed_error) if ($error_code != 0); -+ unlink $tmpfile; ++ unlink($tmpfile); + return ($cannot_fix_error) if ($error_code != 0); # sleep needed here? return &do_exist ($proc); } -@@ -268,7 +278,7 @@ +@@ -249,7 +257,7 @@ + { + local ($proc) = pop(@_); + +- printf (stderr "do_check\n") if ($debug > 0); ++ printf (STDERR "do_check\n") if ($debug > 0); + + if ($check{$proc} eq '') + { +@@ -262,13 +270,13 @@ + # if not "exist", then it must be "shell", so execute the shell script + # defined in database + +- local ($tmpfile) = "/tmp/check_$$"; ++ local ($tmpfh, $tmpfile) = tempfile("check_XXXXXXXX", DIR => "/tmp"); + +- &create_sh_script ($check{$proc}, $tmpfile); ++ &create_sh_script ($fix{$proc}, $tmpfh, $tmpfile); # return code is number divided by 256 $error_code = (system "$tmpfile") / 256; - system "rm $tmpfile"; -+ unlink $tmpfile; ++ unlink($tmpfile); return ($check_failed_error) if ($error_code != 0); # check passed, continue -@@ -285,10 +295,12 @@ +@@ -281,14 +289,16 @@ + { + local ($proc) = pop(@_); + +- printf (stderr "do_exist\n") if ($debug > 0); ++ printf (STDERR "do_exist\n") if ($debug > 0); # do ps, check to see if min <= no. of processes <= max $! = $fixproc_error; - open (command, "/bin/ps -e | /bin/grep $proc | /bin/wc -l |") -+ open (command, "/bin/ps $ps_opts |") ++ open (COMMAND, "/bin/ps $ps_opts |") || die "$0: can't run ps-grep-wc command\n"; - $proc_count = <command>; - if (($proc_count < $min{$proc}) || ($proc_count > $max{$proc})) -+ @allprocs = <command>; -+ close command; ++ @allprocs = <COMMAND>; ++ close COMMAND; + @procs = grep(/$proc/, @allprocs); + if (($#procs < $min{$proc}) || ($#procs > $max{$proc})) { return $check_failed_error; } -@@ -305,41 +317,48 @@ +@@ -301,45 +311,52 @@ + local ($proc) = pop(@_); + local ($second_kill_needed); + +- printf (stderr "do_kill\n") if ($debug > 0); ++ printf (STDERR "do_kill\n") if ($debug > 0); # first try kill $! = $fixproc_error; - open (command, "/bin/ps -e | /bin/grep $proc |") -+ open (command, "/bin/ps $ps_opts |") ++ open (COMMAND, "/bin/ps $ps_opts |") || die "$0: can't run ps-grep-awk command\n"; - while (<command>) +- while (<command>) ++ while (<COMMAND>) { - # match the first field of ps -e + if /$proc/ { @@ -96,16 +159,17 @@ + kill 15, $1; + } } -+ close command; ++ close COMMAND; # if process still exist, try kill -9 sleep 2; $! = $fixproc_error; - open (command, "/bin/ps -e | /bin/grep $proc |") -+ open (command, "/bin/ps $ps_opts |") ++ open (COMMAND, "/bin/ps $ps_opts |") || die "$0: can't run ps-grep-awk command\n"; $second_kill_needed = 0; - while (<command>) +- while (<command>) ++ while (<COMMAND>) { - # match the first field of ps -e + if /$proc/ { @@ -118,21 +182,51 @@ $second_kill_needed = 1; + } } -+ close command; ++ close COMMAND; return ($no_error) if ($second_kill_needed == 0); # see if kill -9 worked sleep 2; $! = $fixproc_error; - open (command, "/bin/ps -e | /bin/grep $proc |") -+ open (command, "/bin/ps $ps_opts |") ++ open (COMMAND, "/bin/ps $ps_opts |") || die "$0: can't run ps-grep-awk command\n"; - while (<command>) +- while (<command>) ++ while (<COMMAND>) { # a process still exist, return error - return $cannot_kill_error; + return $cannot_kill_error if /$proc/; } -+ close command; ++ close COMMAND; return $no_error; # good, all dead } +@@ -349,7 +366,7 @@ + local ($proc) = pop(@_); + local ($error_code); + +- printf (stderr "do_restart\n") if ($debug > 0); ++ printf (STDERR "do_restart\n") if ($debug > 0); + + $error_code = &do_kill ($proc); + return $error_code if ($error_code != $no_error); +@@ -369,7 +386,7 @@ + local ($proc) = pop(@_); + local ($error_code); + +- printf (stderr "work_on_proc\n") if ($debug > 0); ++ printf (STDERR "work_on_proc\n") if ($debug > 0); + + if ($cmd_line_action eq '') + { +@@ -475,8 +492,8 @@ + local ($str2); + + $! = $fixproc_error; +- open (db, $database_file) || die 'cannot open database file $database_file\n'; +- while (<db>) ++ open (DB, $database_file) || die 'cannot open database file $database_file\n'; ++ while (<DB>) + { + if ((! /\S/) || (/^[ \t]*#.*$/)) + { |