]> git.pld-linux.org Git - packages/SysVinit.git/blob - sysvinit-killall5.patch
91aab2021bcaad6691b93d515fc38b18b2bdda2d
[packages/SysVinit.git] / sysvinit-killall5.patch
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)
This page took 0.060143 seconds and 3 git commands to generate.