2009-09-29 10:50:41 +02:00
|
|
|
--- libinit.c
|
|
|
|
+++ libinit.c 2009-09-29 10:42:09.875428620 +0200
|
|
|
|
@@ -446,9 +446,9 @@ static pid_t getpppid(const pid_t ppid)
|
|
|
|
goto out;
|
|
|
|
|
|
|
|
if ((fp = open(proc(pid, "stat"), O_PROCMODE)) != -1) {
|
|
|
|
- xread(fp, buf, BUFSIZ);
|
|
|
|
+ ssize_t len = xread(fp, buf, BUFSIZ);
|
|
|
|
close(fp);
|
|
|
|
- if (sscanf(buf,"%*d %*s %*c %d %*d %*d", &pppid) != 1)
|
|
|
|
+ if (len <= 0 || sscanf(buf,"%*d %*s %*c %d %*d %*d", &pppid) != 1)
|
|
|
|
warn("can not read ppid for process %d!\n", ppid);
|
|
|
|
}
|
|
|
|
out:
|
|
|
|
@@ -591,10 +591,11 @@ int pidof (const char * inname, const ch
|
|
|
|
char ent[3];
|
|
|
|
boolean thread;
|
|
|
|
ssize_t len;
|
|
|
|
+
|
|
|
|
len = xread(fp,ent,3);
|
|
|
|
close(fp);
|
|
|
|
|
|
|
|
- if (!len)
|
|
|
|
+ if (len <= 0)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
thread = (strncmp(ent, "0 ", 2) == 0);
|
|
|
|
@@ -682,6 +683,9 @@ int pidof (const char * inname, const ch
|
|
|
|
len = xread(fp, entry, PATH_MAX);
|
|
|
|
close(fp);
|
|
|
|
|
|
|
|
+ if (len <= 0)
|
|
|
|
+ continue;
|
|
|
|
+
|
|
|
|
/* Seek for a script not for a binary */
|
|
|
|
if (!(scrpt = checkscripts(entry, root, len, d->d_name)))
|
|
|
|
continue;
|
|
|
|
@@ -713,7 +717,7 @@ int pidof (const char * inname, const ch
|
|
|
|
len = xread(fp, entry, PATH_MAX);
|
|
|
|
close(fp);
|
|
|
|
|
|
|
|
- if (!len)
|
|
|
|
+ if (len <= 0)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
comm = index(entry, ' ');
|
|
|
|
@@ -764,7 +768,8 @@ int verify_pidfile (const char * pid_fil
|
|
|
|
const char * root, unsigned short flags,
|
|
|
|
const boolean ignore)
|
|
|
|
{
|
|
|
|
- int fp, cnt;
|
|
|
|
+ int fp;
|
|
|
|
+ ssize_t cnt;
|
|
|
|
boolean isscrpt = false;
|
|
|
|
pid_t pid;
|
|
|
|
char *swapname = NULL, *bufp;
|
|
|
|
@@ -789,11 +794,12 @@ int verify_pidfile (const char * pid_fil
|
|
|
|
}
|
|
|
|
|
|
|
|
errno = 0;
|
|
|
|
- if ((cnt = xread (fp, buf, BUFSIZ)) < 0) {
|
|
|
|
+ cnt = xread(fp, buf, BUFSIZ);
|
|
|
|
+ close(fp);
|
|
|
|
+ if (cnt < 0) {
|
|
|
|
warn("Can not read pid file %s: %s\n", pid_file, strerror(errno));
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
- close(fp);
|
|
|
|
buf[cnt] = '\0';
|
|
|
|
|
|
|
|
bufp = buf;
|
|
|
|
@@ -847,10 +853,11 @@ int verify_pidfile (const char * pid_fil
|
|
|
|
char ent[3];
|
|
|
|
boolean thread;
|
|
|
|
ssize_t len;
|
|
|
|
+
|
|
|
|
len = xread(fp, ent, sizeof(ent));
|
|
|
|
close(fp);
|
|
|
|
|
|
|
|
- if (!len)
|
|
|
|
+ if (len <= 0)
|
|
|
|
goto out;
|
|
|
|
|
|
|
|
thread = (strncmp(ent, "0 ", 2) == 0);
|
|
|
|
@@ -932,6 +939,9 @@ int verify_pidfile (const char * pid_fil
|
|
|
|
len = xread(fp, entry, PATH_MAX);
|
|
|
|
close(fp);
|
|
|
|
|
|
|
|
+ if (len <= 0)
|
|
|
|
+ goto out;
|
|
|
|
+
|
|
|
|
/* Seek for a script not for a binary */
|
|
|
|
if (!(scrpt = checkscripts(entry, root, len, buf)))
|
|
|
|
goto out; /* Nothing found */
|
|
|
|
@@ -951,7 +961,7 @@ int verify_pidfile (const char * pid_fil
|
|
|
|
len = xread(fp, entry, PATH_MAX);
|
|
|
|
close(fp);
|
|
|
|
|
|
|
|
- if (!len)
|
|
|
|
+ if (len <= 0)
|
|
|
|
goto out;
|
|
|
|
|
|
|
|
comm = index(entry, ' ');
|
|
|
|
@@ -1040,7 +1050,7 @@ int check_pids (const char * inname, con
|
|
|
|
len = xread(fp, ent, sizeof(ent));
|
|
|
|
close(fp);
|
|
|
|
|
|
|
|
- if (!len)
|
|
|
|
+ if (len <= 0)
|
|
|
|
goto ignore; /* Bogus */
|
|
|
|
|
|
|
|
thread = (strncmp(ent, "0 ", 2) == 0);
|
|
|
|
@@ -1111,7 +1121,7 @@ int check_pids (const char * inname, con
|
|
|
|
len = xread(fp, entry, PATH_MAX);
|
|
|
|
close(fp);
|
|
|
|
|
|
|
|
- if (!len)
|
|
|
|
+ if (len <= 0)
|
|
|
|
goto ignore; /* Bogus */
|
|
|
|
|
|
|
|
/* Seek for a script not for a binary */
|
|
|
|
@@ -1131,7 +1141,7 @@ int check_pids (const char * inname, con
|
|
|
|
len = xread(fp, entry, PATH_MAX);
|
|
|
|
close(fp);
|
|
|
|
|
|
|
|
- if (!len)
|
|
|
|
+ if (len <= 0)
|
|
|
|
goto ignore; /* Bogus */
|
|
|
|
|
|
|
|
comm = index(entry, ' ');
|