]>
Commit | Line | Data |
---|---|---|
612af2b6 JB |
1 | --- sysvinit-2.86/src/killall5.c.orig 2004-12-26 23:07:15.505343096 +0100 |
2 | +++ sysvinit-2.86/src/killall5.c 2004-12-26 23:20:43.017582576 +0100 | |
3 | @@ -193,6 +193,7 @@ | |
4 | if (p->argv0) free(p->argv0); | |
5 | if (p->argv1) free(p->argv1); | |
437bcd41 AM |
6 | if (p->pathname) free(p->pathname); |
7 | + if (p->statname) free(p->statname); | |
8 | free(p); | |
9 | } | |
10 | plist = NULL; | |
612af2b6 | 11 | @@ -210,7 +211,7 @@ |
437bcd41 AM |
12 | /* Open the status file. */ |
13 | snprintf(path, sizeof(path), "/proc/%s/stat", d->d_name); | |
14 | ||
15 | - /* Read SID & statname from it. */ | |
16 | + /* Read statname from it. */ | |
17 | if ((fp = fopen(path, "r")) != NULL) { | |
18 | buf[0] = 0; | |
612af2b6 JB |
19 | fgets(buf, sizeof(buf), fp); |
20 | @@ -223,11 +224,11 @@ | |
437bcd41 AM |
21 | /* Read program name. */ |
22 | q = strrchr(buf, ')'); | |
23 | if (q == NULL) { | |
24 | - p->sid = 0; | |
25 | nsyslog(LOG_ERR, | |
26 | "can't get program name from %s\n", | |
27 | path); | |
612af2b6 JB |
28 | free(p); |
29 | + fclose(fp); | |
30 | continue; | |
31 | } | |
32 | s++; | |
33 | @@ -242,20 +243,23 @@ | |
34 | ||
35 | /* Get session, startcode, endcode. */ | |
36 | startcode = endcode = 0; | |
37 | - if (sscanf(q, "%*c %*d %*d %d %*d %*d %*u %*u " | |
38 | + if (sscanf(q, "%*c %*d %*d %*d %*d %*d %*u %*u " | |
39 | "%*u %*u %*u %*u %*u %*d %*d " | |
40 | "%*d %*d %*d %*d %*u %*u %*d " | |
41 | "%*u %lu %lu", | |
42 | - &p->sid, &startcode, &endcode) != 3) { | |
43 | + &startcode, &endcode) == 2) { | |
44 | + if (startcode == 0 && endcode == 0) | |
45 | + p->kernel = 1; | |
46 | + } | |
47 | + fclose(fp); | |
48 | + p->sid = getsid(pid); | |
49 | + if (p->sid < 0) { | |
50 | p->sid = 0; | |
437bcd41 AM |
51 | - nsyslog(LOG_ERR, "can't read sid from %s\n", |
52 | - path); | |
612af2b6 JB |
53 | + nsyslog(LOG_ERR, "can't read sid for pid %d\n", pid); |
54 | + free(p->statname); | |
55 | free(p); | |
56 | continue; | |
57 | } | |
58 | - if (startcode == 0 && endcode == 0) | |
59 | - p->kernel = 1; | |
60 | - fclose(fp); | |
437bcd41 AM |
61 | } else { |
62 | /* Process disappeared.. */ | |
63 | free(p); |