diff --git a/killproc-2.20.dif b/killproc-2.20.dif index ca5403c..215a06a 100644 --- a/killproc-2.20.dif +++ b/killproc-2.20.dif @@ -1,4 +1,282 @@ ---- .#nothing -+++ .#nothing 2011-09-01 11:59:52.000000000 +0000 -@@ -0,0 +1 @@ -+Please remove if patched +--- checkproc.8 ++++ checkproc.8 2011-10-18 09:29:16.195166916 +0000 +@@ -17,6 +17,7 @@ Pidofproc \- Checks for a process by exe + .HP + .B checkproc + .RB [ \-vLkNz ] ++.RB [ \-x ] + .RB [ \-p\ \fIpid_file\fP ] + .RB [ \-i\ \fIingnore_file\fP ] + .RB [ \-c\ \fIroot\fP ] +@@ -30,10 +31,12 @@ Pidofproc \- Checks for a process by exe + .B checkproc + .B \ \ + .RB [ \-vk ] ++.RB [ \-x ] + .I basename_of_executable + .HP + .B pidofproc + .RB [ \-LkNz ] ++.RB [ \-x ] + .RB [ \-p\ \fIpid_file\fP ] + .RB [ \-i\ \fIingnore_file\fP ] + .RB [ \-c\ \fIroot\fP ] +@@ -47,6 +50,7 @@ Pidofproc \- Checks for a process by exe + .B pidofproc + .B \ \ + .RB [ \-k ] ++.RB [ \-x ] + .I basename_of_executable + .SH SYNOPSIS LSB 3.1 + .HP +@@ -250,6 +254,15 @@ are in the zombie state. Without this o + handled as not existent because such a process isn't + alive but listed in the process table and waits on its + parent process. ++.TP ++.B \-x ++Tells ++.B checkproc ++as well as ++.B pidofproc ++to use the upto 15 byte long filename name found in ++.I /proc//stat ++to be able to identify scripts overwriting their command line. + .PP + .\" + .SH EXAMPLE +--- checkproc.c ++++ checkproc.c 2011-10-17 15:41:46.671646382 +0000 +@@ -60,7 +60,7 @@ int main(int argc, char **argv) + posixa = getenv("_POSIX_OPTION_ORDER"); unsetenv("_POSIX_OPTION_ORDER"); + posixb = getenv("POSIXLY_CORRECT"); unsetenv("POSIXLY_CORRECT"); + opterr = 0; +- while ((c = getopt(argc, argv, "c:kp:nNhqvzLi:")) != -1) { ++ while ((c = getopt(argc, argv, "c:kp:nNhqvzLi:x")) != -1) { + switch (c) { + case 'c': + if (optarg && optarg[0] != '-' && !root) { +@@ -86,6 +86,9 @@ int main(int argc, char **argv) + case 'N': + init_nfs(); + break; ++ case 'x': ++ flags |= STSCRPT; ++ break; + case 'z': + flags &= ~NZOMBIE; + break; +--- killproc.8 ++++ killproc.8 2011-10-18 09:27:22.403146549 +0000 +@@ -16,6 +16,7 @@ Killproc \- Send signals to processes by + .B killproc + .RB [ \-vqLN ] + .RB [ \-g | -G ] ++.RB [ \-x ] + .RB [ \-p\ \fIpid_file\fP ] + .RB [ \-i\ \fIingnore_file\fP ] + .RB [ \-c\ \fIroot\fP ] +@@ -269,6 +270,13 @@ Be more verbose. + This option list all available signals and some of their + synonyms by their number and signal names to standard out. + and exits. ++.TP ++.B \-x ++Tells ++.B killproc ++to use the upto 15 byte long filename name found in ++.I /proc//stat ++to be able to identify scripts overwriting their command line. + .\" + .SH EXAMPLES + .TP +--- killproc.c ++++ killproc.c 2011-10-17 15:42:52.871147146 +0000 +@@ -96,7 +96,7 @@ int main(int argc, char **argv) + posixa = getenv("_POSIX_OPTION_ORDER"); unsetenv("_POSIX_OPTION_ORDER"); + posixb = getenv("POSIXLY_CORRECT"); unsetenv("POSIXLY_CORRECT"); + opterr = 0; +- while ((c = getopt(argc, argv, "c:p:gGnNhlvqt:Li:")) != -1) { ++ while ((c = getopt(argc, argv, "c:p:gGnNhlvqt:Li:x")) != -1) { + switch (c) { + case 'c': + if (optarg && optarg[0] != '-' && !root) { +@@ -135,6 +135,9 @@ int main(int argc, char **argv) + case 'N': + init_nfs(); + break; ++ case 'x': ++ flags |= STSCRPT; ++ break; + case 'p': /* Changed from -f to -p to fit startproc and LSB */ + /* Allocate here: address optarg (current *argv) isn't freeable */ + if (optarg && !pid_file) { +--- libinit.c ++++ libinit.c 2011-10-18 09:06:23.471646253 +0000 +@@ -570,13 +570,12 @@ static const char * checkscripts(char* e + */ + scrpt = (char *)memchr(scrpt, 0, cnt); + if (!scrpt || (cnt = len - (++scrpt - ent)) <= 0) +- goto out; ++ break; + if (*scrpt == '/') { + ret = scrpt; + goto out; + } + } while (scrpt && cnt > 0); +- + out: + if (scrpt && root) { + char *ptr = strdupa(scrpt); +@@ -877,8 +876,11 @@ int pidof (const char * inname, const ch + continue; + + /* Seek for a script not for a binary */ +- if (!(scrpt = checkscripts(entry, root, len, d->d_name))) ++ if (!(scrpt = checkscripts(entry, root, len, d->d_name))) { ++ if (flags & STSCRPT) ++ goto risky; + continue; ++ } + + /* Don't blame our boot scripts having the same name */ + if ( (flags & (KILL|DAEMON)) +@@ -1128,7 +1130,7 @@ risky: + return -1; + } + +- if (!(flags & (KTHREAD|KSHORT))&& isscrpt && ++ if (!(flags & (KTHREAD|KSHORT)) && isscrpt && + (fp = open(proc(buf, "cmdline"), O_PROCMODE)) != -1) { + + char entry[PATH_MAX+1]; +@@ -1142,15 +1144,18 @@ risky: + goto out; + + /* Seek for a script not for a binary */ +- if (!(scrpt = checkscripts(entry, root, len, buf))) ++ if (!(scrpt = checkscripts(entry, root, len, buf))) { ++ if (flags & STSCRPT) ++ goto nameonly; + goto out; /* Nothing found */ ++ } + + if (scrpt && strcmp(scrpt,fullname) == 0) { + do_list(pid,getsession(pid),ignore); + goto out; /* Done */ + } + } +- ++nameonly: + if ((fp = open(proc(buf, "stat"), O_PROCMODE)) != -1) { + + char entry[PATH_MAX+1]; +@@ -1313,7 +1318,7 @@ int check_pids (const char * inname, con + + skip = true; /* No stat entry check needed */ + } +-risky: ++ risky: + + if (!(flags & (KTHREAD|KSHORT)) && isscrpt && + (fp = open(proc(pid, "cmdline"), O_PROCMODE)) != -1) { +@@ -1332,7 +1337,8 @@ risky: + if ((scrpt = checkscripts(entry, root, len, pid))) { + if (strcmp(scrpt,fullname) == 0) + continue; /* Found */ +- skip = true; /* No stat entry check needed */ ++ if (!(flags & STSCRPT)) ++ skip = true; /* No stat entry check needed */ + } + } + +--- libinit.h ++++ libinit.h 2011-10-18 09:13:36.923145552 +0000 +@@ -106,6 +106,7 @@ + #define FLWLINK 0x0040 + #define KSTOP 0x0080 + #define KBASE 0x0100 ++#define STSCRPT 0x0200 + + #define MAXENV 20 + #define CMDLLEN MAXNAMLEN /* The string length of /proc/12345/cmdline\0\0 + 1 */ +@@ -116,6 +117,7 @@ + #endif + #define DEFPIDEXT ".pid" + #define DEFPIDLEN 14 /* The string length of /var/run/.pid + 1 */ ++#define COMM_LEN 15 /* The lenght of the task command name in /proc//stat */ + + extern char **environ; + extern char * newenvp[]; +@@ -216,10 +218,12 @@ static inline char * base_name ( const c + + static inline char * swap_name ( const char * base ) + { +- size_t len = strlen(base) + 2 + 1; +- char *swap = (char*)xmalloc(len); +- +- return strcat(strcat(strcpy(swap,"("),base),")"); ++ size_t len = strlen(base); ++ char *swap; ++ if (len > COMM_LEN) ++ len = COMM_LEN; ++ swap = (char*)xmalloc(len + 2 + 1); ++ return strcat(strncat(strcpy(swap,"("),base, COMM_LEN),")"); + } + + extern void addnewenv ( const char * name, const char * entry ); +--- startproc.8 ++++ startproc.8 2011-10-18 09:28:45.875646247 +0000 +@@ -18,6 +18,7 @@ Start_daemon \- Start processes identifi + .HP + .B startproc + .RB [ \-fLves ] ++.RB [ \-x ] + .RB [[ \-n\ ] \fI+/\-\fP ] + .RB [ \- ( t | T )\ \fI\fP ] + .RB [ \-u\ \fIuser\fP ] +@@ -32,6 +33,7 @@ Start_daemon \- Start processes identifi + .HP + .B start_daemon + .RB [ \-fLve ] ++.RB [ \-x ] + .RB [ \-n\ \fI+/\-\fP ] + .RB [ \-u\ \fIuser\fP ] + .RB [ \-g\ \fIgroup\fP ] +@@ -249,6 +251,15 @@ Sets the user ID of the process to + .TP + .B \-v + Verbose output. ++.TP ++.B \-x ++Tells ++.B startproc ++as well as ++.B start_daemon ++to use the upto 15 byte long filename name found in ++.I /proc//stat ++to be able to identify scripts overwriting their command line. + .\" + .SH EXAMPLE + .TP +--- startproc.c ++++ startproc.c 2011-10-17 15:43:02.443647315 +0000 +@@ -109,7 +109,7 @@ int main(int argc, char **argv) + } + + opterr = 0; +- while ((c = getopt(argc, argv, "+c:edp:l:hqvsu:g:t:n:fLi:T:wW:")) != -1) { /* `+' is POSIX correct */ ++ while ((c = getopt(argc, argv, "+c:edp:l:hqvsu:g:t:n:fLi:T:wW:x")) != -1) { /* `+' is POSIX correct */ + switch (c) { + case 'v': + quiet = 0; +@@ -127,6 +127,9 @@ int main(int argc, char **argv) + dialog = true; + seconds = 15; + break; ++ case 'x': ++ flags |= STSCRPT; ++ break; + case 'p': /* Former option -f */ + if (force) + warn("option -p does not work in force mode\n"); diff --git a/sysvinit.changes b/sysvinit.changes index 24a0522..5441641 100644 --- a/sysvinit.changes +++ b/sysvinit.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Tue Oct 18 09:30:36 UTC 2011 - werner@suse.de + +- Add option -x to be able to identify scripts overwriting their + command line (bnc#723708) + ------------------------------------------------------------------- Mon Oct 17 09:08:36 UTC 2011 - werner@suse.de