]>
Commit | Line | Data |
---|---|---|
437bcd41 AM |
1 | diff -ru sysvinit-2.85/src/killall5.c sysvinit-2.85-fixed/src/killall5.c |
2 | --- sysvinit-2.85/src/killall5.c 2003-05-23 00:24:47.000000000 -0400 | |
3 | +++ sysvinit-2.85-fixed/src/killall5.c 2003-05-23 00:23:57.000000000 -0400 | |
4 | @@ -170,6 +170,7 @@ | |
5 | n = p->next; | |
6 | if (p->fullname) free(p->fullname); | |
7 | if (p->pathname) free(p->pathname); | |
8 | + if (p->statname) free(p->statname); | |
9 | free(p); | |
10 | } | |
11 | plist = NULL; | |
12 | @@ -187,7 +188,7 @@ | |
13 | /* Open the status file. */ | |
14 | snprintf(path, sizeof(path), "/proc/%s/stat", d->d_name); | |
15 | ||
16 | - /* Read SID & statname from it. */ | |
17 | + /* Read statname from it. */ | |
18 | if ((fp = fopen(path, "r")) != NULL) { | |
19 | buf[0] = 0; | |
20 | fgets(buf, 256, fp); | |
21 | @@ -200,7 +201,6 @@ | |
22 | /* Read program name. */ | |
23 | q = strrchr(buf, ')'); | |
24 | if (q == NULL) { | |
25 | - p->sid = 0; | |
26 | nsyslog(LOG_ERR, | |
27 | "can't get program name from %s\n", | |
28 | path); | |
29 | @@ -213,24 +213,21 @@ | |
30 | while (*q != ' ') q++; | |
31 | } | |
32 | *q++ = 0; | |
33 | - while (*q == ' ') q++; | |
34 | p->statname = (char *)xmalloc(strlen(s)+1); | |
35 | strcpy(p->statname, s); | |
36 | - | |
37 | - /* This could be replaced by getsid(pid) */ | |
38 | - if (sscanf(q, "%*c %*d %*d %d", &p->sid) != 1) { | |
39 | - p->sid = 0; | |
40 | - nsyslog(LOG_ERR, "can't read sid from %s\n", | |
41 | - path); | |
42 | - free(p); | |
43 | - continue; | |
44 | - } | |
45 | fclose(fp); | |
46 | } else { | |
47 | /* Process disappeared.. */ | |
48 | free(p); | |
49 | continue; | |
50 | } | |
51 | + p->sid = getsid(pid); | |
52 | + if (p->sid < 0) { | |
53 | + p->sid = 0; | |
54 | + nsyslog(LOG_ERR, "can't read sid for pid %d\n", pid); | |
55 | + free(p); | |
56 | + continue; | |
57 | + } | |
58 | ||
59 | /* Now read argv[0] */ | |
60 | snprintf(path, sizeof(path), "/proc/%s/cmdline", d->d_name); | |
61 | @@ -553,11 +550,7 @@ | |
62 | } | |
63 | ||
64 | pid = getpid(); | |
65 | - for (p = plist; p; p = p->next) | |
66 | - if (p->pid == pid) { | |
67 | - sid = p->sid; | |
68 | - break; | |
69 | - } | |
70 | + sid = getsid(0); | |
71 | ||
72 | /* Now kill all processes except our session. */ | |
73 | for (p = plist; p; p = p->next) |