Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:42.3:Staging:C
sysvinit
sysvinit-2.88dsf-scripts2.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File sysvinit-2.88dsf-scripts2.patch of Package sysvinit
--- src/killall5.c +++ src/killall5.c 2011-10-17 12:18:06.455147132 +0000 @@ -469,6 +469,7 @@ int readproc(int do_stat) char *s, *q; unsigned long startcode, endcode; int pid, f; + ssize_t len; /* Open the /proc directory. */ if (chdir("/proc") == -1) { @@ -635,23 +636,22 @@ int readproc(int do_stat) switch (do_stat) { case DO_NETFS: if ((p->nfs = check4nfs(path, buf))) - break; + goto link; case DO_STAT: if (stat(path, &st) != 0) break; - else { - char buf[PATH_MAX]; - - f = readlink(path, buf, sizeof buf); - if (f > 0) { - p->pathname = (char *)xmalloc(f + 1); - memcpy(p->pathname, buf, f); - p->pathname[f] = '\0'; - } - } p->dev = st.st_dev; p->ino = st.st_ino; + + /* Fall through */ default: + link: + len = readlink(path, buf, PATH_MAX); + if (len > 0) { + p->pathname = (char *)xmalloc(len + 1); + memcpy(p->pathname, buf, len); + p->pathname[len] = '\0'; + } break; } @@ -722,6 +722,7 @@ PIDQ_HEAD *pidof(char *prog) int dostat = 0; int foundone = 0; int ok = 0; + const int root = (getuid() == 0); char real[PATH_MAX+1]; if (! prog) @@ -769,16 +770,11 @@ PIDQ_HEAD *pidof(char *prog) * network FS located binaries */ if (!foundone && nfs) { for (p = plist; p; p = p->next) { - char exe [PATH_MAX+1]; - char path[PATH_MAX+1]; - int len; + if (!p->pathname) + continue; if (!p->nfs) continue; - snprintf(exe, sizeof(exe), "/proc/%d/exe", p->pid); - if ((len = readlink(exe, path, PATH_MAX)) < 0) - continue; - path[len] = '\0'; - if (strcmp(prog, path) != 0) + if (strcmp(prog, p->pathname) != 0) continue; add_pid_to_q(q, p); foundone++; @@ -788,19 +784,31 @@ PIDQ_HEAD *pidof(char *prog) /* If we didn't find a match based on dev/ino, try the name. */ if (!foundone) for (p = plist; p; p = p->next) { if (prog[0] == '/') { - if (!p->pathname) - continue; + if (!p->pathname) { + if (root) + continue; + goto fallback; + } if (strcmp(prog, p->pathname)) { int len = strlen(prog); if (strncmp(prog, p->pathname, len)) + { + if (scripts_too) + goto fallback; continue; + } if (strcmp(" (deleted)", p->pathname + len)) + { + if (scripts_too) + goto fallback; continue; + } } add_pid_to_q(q, p); continue; } + fallback: ok = 0; /* matching nonmatching
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor