[Pkg-sysvinit-commits] r221 - sysvinit/trunk/src

Thomas Hood jdthood-guest at costa.debian.org
Wed Nov 23 19:11:29 UTC 2005


Author: jdthood-guest
Date: 2005-11-23 19:11:28 +0000 (Wed, 23 Nov 2005)
New Revision: 221

Modified:
   sysvinit/trunk/src/killall5.c
Log:
Don't compare basename with basename.  Only compare fullname with fullname and fullname with basename. (Do for argv1 comparison too.)  Also, add a comment explaining the algorithm.

Modified: sysvinit/trunk/src/killall5.c
===================================================================
--- sysvinit/trunk/src/killall5.c	2005-11-23 18:53:19 UTC (rev 220)
+++ sysvinit/trunk/src/killall5.c	2005-11-23 19:11:28 UTC (rev 221)
@@ -411,18 +411,32 @@
 	if (!foundone) for (p = plist; p; p = p->next) {
 		ok = 0;
 
-		/* Compare name */
+		/*             matching        nonmatching
+		 * proc name   prog name       prog name
+		 * ---         -----------     ------------
+		 *   b         b, p/b, q/b
+		 * p/b         b, p/b          q/b
+		 *
+		 * Algorithm: Match if:
+		 *    cmd = arg
+		 * or cmd = base(arg)
+		 * or base(cmd) = arg
+		 *
+		 * Specifically, do not match just because base(cmd) = base(arg)
+		 * as was done in earlier versions of this program, since this
+		 * allows /aaa/foo to match /bbb/foo .
+		 */
 		ok |=
 			(p->argv0 && strcmp(p->argv0, prog) == 0)
 			|| (p->argv0 && s != prog && strcmp(p->argv0, s) == 0)
 			|| (p->argv0base && strcmp(p->argv0base, prog) == 0);
 
 		/* For scripts, compare argv[1] as well. */
-		if (scripts_too && p->argv1 &&
-		    !strncmp(p->statname, p->argv1base, STATNAMELEN)) {
+		if (scripts_too && !strncmp(p->statname, p->argv1base, STATNAMELEN)) {
 			ok |=
-				(strcmp(p->argv1, prog) == 0)
-				|| (strcmp(p->argv1base, s) == 0);
+				(p->argv1 && strcmp(p->argv1, prog) == 0)
+				|| (p->argv1 && s != prog && strcmp(p->argv1, s) == 0)
+				|| (p->argv1base && strcmp(p->argv1base, prog) == 0);
 		}
 
 		/*




More information about the Pkg-sysvinit-commits mailing list