.
OBS-URL: https://build.opensuse.org/package/show/Base:System/sysvinit?expand=0&rev=78
This commit is contained in:
parent
80b4fe5e3c
commit
d6b4f00512
@ -1,534 +0,0 @@
|
|||||||
--- .dummy
|
|
||||||
+++ .dummy 2009-08-19 10:18:39.181901099 +0000
|
|
||||||
@@ -0,0 +1 @@
|
|
||||||
+this is a dummy, remove if real changes are required
|
|
||||||
--- checkproc.8
|
|
||||||
+++ checkproc.8 2010-10-04 14:31:15.675926381 +0000
|
|
||||||
@@ -278,6 +278,8 @@ Program is running
|
|
||||||
No process but pid file found
|
|
||||||
.IP 3 5
|
|
||||||
No process and no pid file found
|
|
||||||
+.IP 4 5
|
|
||||||
+Program is not installed
|
|
||||||
.RE
|
|
||||||
.RS 5
|
|
||||||
.IP 101 7
|
|
||||||
--- checkproc.c
|
|
||||||
+++ checkproc.c 2010-10-04 14:44:56.355926370 +0000
|
|
||||||
@@ -92,7 +92,6 @@ int main(int argc, char **argv)
|
|
||||||
/* Allocate here: address optarg (current *argv) isn't freeable */
|
|
||||||
if (optarg && !pid_file) {
|
|
||||||
pid_file = xstrdup(optarg);
|
|
||||||
- pid_forced = true;
|
|
||||||
} else
|
|
||||||
error(WRGSYNTAX, "Option -p requires pid file to read pid from\n");
|
|
||||||
break;
|
|
||||||
@@ -148,7 +147,8 @@ int main(int argc, char **argv)
|
|
||||||
pid_file = (char*) xmalloc(DEFPIDLEN+strlen(basename)+1);
|
|
||||||
pid_file = strcat(strcat(strcpy(pid_file,DEFPIDDIR),basename),DEFPIDEXT);
|
|
||||||
}
|
|
||||||
- }
|
|
||||||
+ } else
|
|
||||||
+ pid_forced = true;
|
|
||||||
|
|
||||||
/* Check and verify the pid file */
|
|
||||||
errno = 0;
|
|
||||||
@@ -163,22 +163,27 @@ int main(int argc, char **argv)
|
|
||||||
* the proc is dead if the specified pid can not be veryfied.
|
|
||||||
*/
|
|
||||||
if (remember_pids(pid_file,fullname,root,flags) < 0)
|
|
||||||
- exit(LSB_PROOFX);
|
|
||||||
+ exit(LSB_STATUS_PROOFX);
|
|
||||||
|
|
||||||
if (!remember)
|
|
||||||
exit(LSB_STATUS_NOPROC); /* New LSB: no pid file is no job */
|
|
||||||
}
|
|
||||||
- /* No pid file means that we have to search in /proc/ */
|
|
||||||
free(pid_file);
|
|
||||||
pid_file = NULL;
|
|
||||||
+
|
|
||||||
+ /* No pid file means that we have to search in /proc/ */
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pid_file && !st.st_size) {
|
|
||||||
warn("Empty pid file %s for %s\n", pid_file, fullname);
|
|
||||||
|
|
||||||
- /* No pid file means that we have to search in /proc/ */
|
|
||||||
free(pid_file);
|
|
||||||
pid_file = NULL;
|
|
||||||
+
|
|
||||||
+ if (pid_forced)
|
|
||||||
+ exit(LSB_STATUS_NOPROC);
|
|
||||||
+
|
|
||||||
+ /* No pid file means that we have to search in /proc/ */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Check and verify the ignore file */
|
|
||||||
@@ -205,6 +210,8 @@ int main(int argc, char **argv)
|
|
||||||
exit(LSB_STATUS_PROOFX);
|
|
||||||
}
|
|
||||||
if (!remember) { /* No process found with pid file */
|
|
||||||
+ if (pid_forced)
|
|
||||||
+ exit(LSB_STATUS_PROOFX);
|
|
||||||
if (pidof(fullname,root,flags) < 0)
|
|
||||||
exit(LSB_STATUS_PROOFX);
|
|
||||||
}
|
|
||||||
--- killproc.8
|
|
||||||
+++ killproc.8 2010-07-20 09:30:00.775424897 +0000
|
|
||||||
@@ -57,9 +57,11 @@ is sent. If this program is not called w
|
|
||||||
.B killproc
|
|
||||||
then
|
|
||||||
.B SIGHUP
|
|
||||||
-is used. Note that if
|
|
||||||
+is used. Note that if no signal is specified on the command line and the program
|
|
||||||
+.B killproc
|
|
||||||
+can not terminate a process with the default
|
|
||||||
.B SIGTERM
|
|
||||||
-is used and does not terminate a process the signal
|
|
||||||
+the signal
|
|
||||||
.B SIGKILL
|
|
||||||
is send after a few seconds (default is 5 seconds, see option
|
|
||||||
.BR \-t ).
|
|
||||||
@@ -240,16 +242,21 @@ or by number
|
|
||||||
.B \-t\fI<sec>\fP
|
|
||||||
The number
|
|
||||||
.I <sec>
|
|
||||||
-specifies the seconds to wait between the sent signal
|
|
||||||
+specifies the seconds to wait between the default signal
|
|
||||||
.B SIGTERM
|
|
||||||
and the subsequentially signal
|
|
||||||
.B SIGKILL
|
|
||||||
if the first
|
|
||||||
.B SIGTERM
|
|
||||||
does not show any result within the
|
|
||||||
-first few milli seconds. This defaults to
|
|
||||||
+first few milli seconds. This timeout defaults to
|
|
||||||
.B 5
|
|
||||||
-seconds.
|
|
||||||
+seconds. On the other hand if the signal
|
|
||||||
+.B SIGTERM
|
|
||||||
+was explicitly used on the command line, the signal
|
|
||||||
+.B SIGKILL
|
|
||||||
+will be omitted, even if the process was not terminated
|
|
||||||
+after the timeout has expired.
|
|
||||||
.TP
|
|
||||||
.B \-q
|
|
||||||
This option is ignored.
|
|
||||||
@@ -278,7 +285,7 @@ then the pid from this file is being use
|
|
||||||
terminate the sendmail process. Other running processes are
|
|
||||||
ignored.
|
|
||||||
.TP
|
|
||||||
-.B killproc -p /var/myrun/lpd.pid -TERM /usr/sbin/lpd
|
|
||||||
+.B killproc -p /var/myrun/lpd.pid /usr/sbin/lpd
|
|
||||||
.IP
|
|
||||||
sends the signal
|
|
||||||
.B SIGTERM
|
|
||||||
@@ -293,7 +300,7 @@ does not exist,
|
|
||||||
assumes that the daemon of
|
|
||||||
.B /usr/sbin/lpd
|
|
||||||
is not running. The exit status
|
|
||||||
-is set to 0 for successfully delivering the given signals
|
|
||||||
+is set to 0 for successfully delivering the default signals
|
|
||||||
.BR SIGTERM " and " SIGKILL
|
|
||||||
otherwise to 7 if the program was not running. It is also
|
|
||||||
successful if
|
|
||||||
--- killproc.c
|
|
||||||
+++ killproc.c 2010-07-20 09:35:09.234925068 +0000
|
|
||||||
@@ -48,6 +48,7 @@ int main(int argc, char **argv)
|
|
||||||
int process_group = 0, group_leader = 0, wait = 5, iargc = 0;
|
|
||||||
unsigned short flags = (KILL|PIDOF|KSTOP);
|
|
||||||
boolean pid_forced = false;
|
|
||||||
+ boolean sig_forced = true;
|
|
||||||
|
|
||||||
we_are = base_name(argv[0]);
|
|
||||||
openlog (we_are, LOG_OPTIONS, LOG_FACILITY);
|
|
||||||
@@ -79,11 +80,13 @@ int main(int argc, char **argv)
|
|
||||||
memset(sig, 0, len);
|
|
||||||
*sig = 'q'; /* set dummy option -q */
|
|
||||||
snum = tmp;
|
|
||||||
+ sig_forced = false;
|
|
||||||
break;
|
|
||||||
} else if ( (tmp = signame_to_signum(sig)) > 0 ) {
|
|
||||||
memset(sig, 0, len);
|
|
||||||
*sig = 'q'; /* set dummy option -q */
|
|
||||||
snum = tmp;
|
|
||||||
+ sig_forced = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -135,7 +138,6 @@ int main(int argc, char **argv)
|
|
||||||
/* Allocate here: address optarg (current *argv) isn't freeable */
|
|
||||||
if (optarg && !pid_file) {
|
|
||||||
pid_file = xstrdup(optarg);
|
|
||||||
- pid_forced = true;
|
|
||||||
} else
|
|
||||||
error(LSB_WRGSYN,"Option -p requires pid file to read pid from\n");
|
|
||||||
break;
|
|
||||||
@@ -195,7 +197,8 @@ int main(int argc, char **argv)
|
|
||||||
pid_file = (char*) xmalloc(DEFPIDLEN+strlen(basename)+1);
|
|
||||||
pid_file = strcat(strcat(strcpy(pid_file,DEFPIDDIR),basename),DEFPIDEXT);
|
|
||||||
}
|
|
||||||
- }
|
|
||||||
+ } else
|
|
||||||
+ pid_forced = true;
|
|
||||||
|
|
||||||
/* Check and verify the pid file */
|
|
||||||
errno = 0;
|
|
||||||
@@ -215,17 +218,22 @@ int main(int argc, char **argv)
|
|
||||||
if (!remember)
|
|
||||||
exit(LSB_NOPROC); /* New LSB: no pid file is no job */
|
|
||||||
}
|
|
||||||
- /* No pid file means that we have to search in /proc/ */
|
|
||||||
free(pid_file);
|
|
||||||
pid_file = NULL;
|
|
||||||
+
|
|
||||||
+ /* No pid file means that we have to search in /proc/ */
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pid_file && !st.st_size) {
|
|
||||||
warn("Empty pid file %s for %s\n", pid_file, fullname);
|
|
||||||
|
|
||||||
- /* No pid file means that we have to search in /proc/ */
|
|
||||||
free(pid_file);
|
|
||||||
pid_file = NULL;
|
|
||||||
+
|
|
||||||
+ if (pid_forced)
|
|
||||||
+ exit(LSB_STATUS_NOPROC);
|
|
||||||
+
|
|
||||||
+ /* No pid file means that we have to search in /proc/ */
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pid_file) { /* The case of having a pid file */
|
|
||||||
@@ -291,7 +299,10 @@ again:
|
|
||||||
goto again;
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (snum == SIGKILL)
|
|
||||||
+ if (snum == SIGKILL) /* SIGKILL was specified on the command line */
|
|
||||||
+ goto badterm;
|
|
||||||
+
|
|
||||||
+ if (!sig_forced) /* SIGTERM was specified on the command line */
|
|
||||||
goto badterm;
|
|
||||||
|
|
||||||
if (check_pids(fullname,root,flags) < 0)
|
|
||||||
--- libinit.c
|
|
||||||
+++ libinit.c 2010-07-27 08:56:18.146924383 +0000
|
|
||||||
@@ -320,13 +320,15 @@ static ssize_t xread(int fd, void *inbuf
|
|
||||||
while (1) {
|
|
||||||
errno = 0;
|
|
||||||
bytes = read(fd, inbuf, count);
|
|
||||||
- if (bytes < 0 && (errno == EINTR || errno == EAGAIN))
|
|
||||||
- continue;
|
|
||||||
- if (bytes < 0)
|
|
||||||
+ if (bytes < 0) {
|
|
||||||
+ if (errno == EINTR || errno == EAGAIN)
|
|
||||||
+ continue;
|
|
||||||
+ if (errno == ESRCH)
|
|
||||||
+ goto out;
|
|
||||||
break;
|
|
||||||
+ }
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
-
|
|
||||||
warn("xread error: %s\n", strerror(errno));
|
|
||||||
out:
|
|
||||||
errno = olderr;
|
|
||||||
@@ -446,9 +448,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 +593,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);
|
|
||||||
@@ -673,7 +676,7 @@ int pidof (const char * inname, const ch
|
|
||||||
* do not hold a file descriptor opened on the script file.
|
|
||||||
*/
|
|
||||||
if (!(flags & (KTHREAD|KSHORT)) && isscrpt &&
|
|
||||||
- (fp = openat(dfd, here(d->d_name, "cmd"), O_PROCMODE)) != -1) {
|
|
||||||
+ (fp = openat(dfd, here(d->d_name, "cmdline"), O_PROCMODE)) != -1) {
|
|
||||||
|
|
||||||
char entry[PATH_MAX+1];
|
|
||||||
const char *scrpt = NULL;
|
|
||||||
@@ -682,6 +685,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 +719,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 +770,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 +796,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 +855,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);
|
|
||||||
@@ -923,7 +932,7 @@ int verify_pidfile (const char * pid_fil
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(flags & (KTHREAD|KSHORT))&& isscrpt &&
|
|
||||||
- (fp = open(proc(buf, "cmd"), O_PROCMODE)) != -1) {
|
|
||||||
+ (fp = open(proc(buf, "cmdline"), O_PROCMODE)) != -1) {
|
|
||||||
|
|
||||||
char entry[PATH_MAX+1];
|
|
||||||
const char *scrpt = NULL;
|
|
||||||
@@ -932,6 +941,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 +963,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 +1052,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);
|
|
||||||
@@ -1102,7 +1114,7 @@ int check_pids (const char * inname, con
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(flags & (KTHREAD|KSHORT)) && isscrpt &&
|
|
||||||
- (fp = open(proc(pid, "cmd"), O_PROCMODE)) != -1) {
|
|
||||||
+ (fp = open(proc(pid, "cmdline"), O_PROCMODE)) != -1) {
|
|
||||||
|
|
||||||
char entry[PATH_MAX+1];
|
|
||||||
const char *scrpt;
|
|
||||||
@@ -1111,7 +1123,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 +1143,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, ' ');
|
|
||||||
--- libinit.h
|
|
||||||
+++ libinit.h 2010-10-04 14:43:56.099926049 +0000
|
|
||||||
@@ -93,7 +93,7 @@
|
|
||||||
#define NOPIDREAD 101 /* trouble */
|
|
||||||
|
|
||||||
#define LSB_STATUS_PROOF ((errno == EPERM) ? LSB_NOPERM : NOPIDREAD )
|
|
||||||
-#define LSB_STATUS_PROOFX ((errno == ENOENT) ? LSB_NOENTR : LSB_STATUS_PROOF )
|
|
||||||
+#define LSB_STATUS_PROOFX ((errno == ENOENT) ? (flags & KILL) ? LSB_NOENTR : 4 : LSB_STATUS_PROOF )
|
|
||||||
|
|
||||||
#define LOG_OPTIONS (LOG_ODELAY|LOG_CONS)
|
|
||||||
#define LOG_FACILITY LOG_LOCAL7
|
|
||||||
--- startproc.8
|
|
||||||
+++ startproc.8 2009-12-03 17:00:05.739929445 +0000
|
|
||||||
@@ -59,9 +59,15 @@ processes are found. Note that
|
|
||||||
is designed to start a daemon but not a kernel thread or
|
|
||||||
a program which enables a kernel thread.
|
|
||||||
.PP
|
|
||||||
+Without any option
|
|
||||||
.B startproc
|
|
||||||
-does not use the pid to search for a process but the full
|
|
||||||
-path of the corresponding program which is used to identify the executable
|
|
||||||
+does search for a process by using the full
|
|
||||||
+path of the corresponding program and a default pid file
|
|
||||||
+.RB (/var/run/ <basename> .pid)
|
|
||||||
+which are used together to identify the executable
|
|
||||||
+out from the
|
|
||||||
+.I /proc
|
|
||||||
+file system
|
|
||||||
.RB (see " proc" (5)).
|
|
||||||
Only if the inode number
|
|
||||||
.RB (/proc/ <pid> /exe)
|
|
||||||
@@ -81,7 +87,7 @@ changed due to the LSB specification).
|
|
||||||
If this option is specified,
|
|
||||||
.B startproc
|
|
||||||
tries to check against the pid read from this file
|
|
||||||
-instead of the default
|
|
||||||
+instead of the default pid file
|
|
||||||
.RB (/var/run/ <basename> .pid).
|
|
||||||
The pid read from this file is compared against the pids of possible
|
|
||||||
running processes that use the specified executable. In order to avoid
|
|
||||||
--- startproc.c
|
|
||||||
+++ startproc.c 2009-12-07 14:15:44.487929547 +0000
|
|
||||||
@@ -41,7 +41,8 @@ static int do_start(const char *name, ch
|
|
||||||
static void closefds(FILE *not);
|
|
||||||
static void waiton(const char *list);
|
|
||||||
|
|
||||||
-static int quiet = 1, supprmsg = 0, sess = 0, seconds = 0, sigchld = 0, force = 0, dialog = 0;
|
|
||||||
+static int quiet = true, supprmsg = false, sess = false, seconds = false;
|
|
||||||
+static int sigchld = false, force = false, dialog = false;
|
|
||||||
static struct passwd *user = NULL;
|
|
||||||
static struct group *grp = NULL;
|
|
||||||
static int syslogd = 0;
|
|
||||||
@@ -54,7 +55,7 @@ static void (*save_sigquit) = SIG_DFL;
|
|
||||||
static void sig_quit(int nsig)
|
|
||||||
{
|
|
||||||
(void)signal(nsig, save_sigquit);
|
|
||||||
- signaled = 1;
|
|
||||||
+ signaled = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void sig_chld(int nsig)
|
|
||||||
@@ -113,10 +114,10 @@ int main(int argc, char **argv)
|
|
||||||
error(LSB_WRGSYN,"Option -c requires special root directory\n");
|
|
||||||
break;
|
|
||||||
case 'e':
|
|
||||||
- env = 1;
|
|
||||||
+ env = true;
|
|
||||||
break;
|
|
||||||
case 'd':
|
|
||||||
- dialog = 1;
|
|
||||||
+ dialog = true;
|
|
||||||
seconds = 15;
|
|
||||||
break;
|
|
||||||
case 'p': /* Former option -f */
|
|
||||||
@@ -129,7 +130,7 @@ int main(int argc, char **argv)
|
|
||||||
error(LSB_WRGSYN,"Option -p requires pid file to read pid from\n");
|
|
||||||
break;
|
|
||||||
case 'f': /* Newer option -f for force start (LSB specs!) */
|
|
||||||
- force++;
|
|
||||||
+ force = true;
|
|
||||||
break;
|
|
||||||
case 'l':
|
|
||||||
if (optarg && optarg[0] != '-' && !log_file) {
|
|
||||||
@@ -158,11 +159,11 @@ int main(int argc, char **argv)
|
|
||||||
error(LSB_WRGSYN,"Option -n requires nice level\n");
|
|
||||||
break;
|
|
||||||
case 'q':
|
|
||||||
- supprmsg = 1;
|
|
||||||
+ supprmsg = true;
|
|
||||||
break;
|
|
||||||
case 's':
|
|
||||||
if (sdaemon) goto fail;
|
|
||||||
- sess = 1;
|
|
||||||
+ sess = true;
|
|
||||||
break;
|
|
||||||
case 'u':
|
|
||||||
if (optarg && optarg[0] != '/' && optarg[0] != '-') {
|
|
||||||
@@ -288,7 +289,8 @@ int main(int argc, char **argv)
|
|
||||||
pid_file = (char*) xmalloc(DEFPIDLEN+strlen(basename)+1);
|
|
||||||
pid_file = strcat(strcat(strcpy(pid_file,DEFPIDDIR),basename),DEFPIDEXT);
|
|
||||||
}
|
|
||||||
- }
|
|
||||||
+ } else
|
|
||||||
+ force = true;
|
|
||||||
|
|
||||||
/* Check and verify the pid file */
|
|
||||||
errno = 0;
|
|
||||||
@@ -296,17 +298,25 @@ int main(int argc, char **argv)
|
|
||||||
if (errno != ENOENT)
|
|
||||||
warn("Can not stat %s: %s\n", pid_file, strerror(errno));
|
|
||||||
|
|
||||||
- /* No pid file means that we have to search in /proc/ */
|
|
||||||
free(pid_file);
|
|
||||||
pid_file = NULL;
|
|
||||||
+
|
|
||||||
+ if (force && errno == ENOENT)
|
|
||||||
+ goto force;
|
|
||||||
+
|
|
||||||
+ /* No pid file means that we have to search in /proc/ */
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pid_file && !st.st_size) {
|
|
||||||
warn("Empty pid file %s for %s\n", pid_file, fullname);
|
|
||||||
|
|
||||||
- /* No pid file means that we have to search in /proc/ */
|
|
||||||
free(pid_file);
|
|
||||||
pid_file = NULL;
|
|
||||||
+
|
|
||||||
+ if (force)
|
|
||||||
+ goto force;
|
|
||||||
+
|
|
||||||
+ /* No pid file means that we have to search in /proc/ */
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pid_file) { /* The case of having a pid file */
|
|
||||||
@@ -336,6 +346,8 @@ int main(int argc, char **argv)
|
|
||||||
|
|
||||||
/* Do main work */
|
|
||||||
if (!remember) { /* No process found with pid file */
|
|
||||||
+ if (force)
|
|
||||||
+ goto force;
|
|
||||||
if (pidof(fullname,root,flags) < 0)
|
|
||||||
exit(LSB_PROOFX);
|
|
||||||
clear_pids(); /* Remove all pids which should be ignored */
|
|
4
killproc-2.17.dif
Normal file
4
killproc-2.17.dif
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
--- .dummy
|
||||||
|
+++ .dummy 2010-10-21 09:54:54.587926689 +0000
|
||||||
|
@@ -0,0 +1 @@
|
||||||
|
+Just a dummy, remove for a real patch
|
3
killproc-2.17.tar.bz2
Normal file
3
killproc-2.17.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:a55574a9fa3a0026a09ddd6074000f03fc6d224b61661c655ebec1f2f3be1681
|
||||||
|
size 38526
|
@ -1,109 +0,0 @@
|
|||||||
--- blogd.c
|
|
||||||
+++ blogd.c 2010-09-30 13:12:50.172426395 +0000
|
|
||||||
@@ -193,35 +193,16 @@ static void reconnect(int fd)
|
|
||||||
if (c->fd != fd) continue;
|
|
||||||
|
|
||||||
switch (c->fd) {
|
|
||||||
- case 1: /* Standard out */
|
|
||||||
- case 2: /* Standard error */
|
|
||||||
-
|
|
||||||
- if ((newfd = open(c->tty, O_WRONLY|O_NONBLOCK|O_NOCTTY)) < 0)
|
|
||||||
- error("can not open %s: %s\n", c->tty, strerror(errno));
|
|
||||||
-
|
|
||||||
- if (newfd != 1)
|
|
||||||
- dup2(newfd, 1);
|
|
||||||
- if (newfd != 2)
|
|
||||||
- dup2(newfd, 2);
|
|
||||||
- if (newfd > 2)
|
|
||||||
- close(newfd);
|
|
||||||
-
|
|
||||||
+ case 0:
|
|
||||||
+ case -1: /* Weired */
|
|
||||||
break;
|
|
||||||
-
|
|
||||||
- default: /* IO of further consoles */
|
|
||||||
-
|
|
||||||
+ default: /* IO of system consoles */
|
|
||||||
if ((newfd = open(c->tty, O_WRONLY|O_NONBLOCK|O_NOCTTY)) < 0)
|
|
||||||
error("can not open %s: %s\n", c->tty, strerror(errno));
|
|
||||||
-
|
|
||||||
- if (newfd != c->fd) {
|
|
||||||
- dup2(newfd, c->fd);
|
|
||||||
+ dup2(newfd, c->fd);
|
|
||||||
+ if (newfd != c->fd)
|
|
||||||
close(newfd);
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- case 0:
|
|
||||||
- case -1: /* Weired */
|
|
||||||
-
|
|
||||||
- break;
|
|
||||||
+ break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -418,10 +399,11 @@ int main(int argc, char *argv[])
|
|
||||||
err:
|
|
||||||
for (c = cons; c; c = c->next) {
|
|
||||||
if (c->fd > 0) {
|
|
||||||
- if (c->tlock > 1) /* write back lock if any */
|
|
||||||
- (void)ioctl(c->fd, TIOCSLCKTRMIOS, &c->ltio);
|
|
||||||
if (c->tlock) /* write back old setup */
|
|
||||||
tcsetattr(c->fd, TCSANOW, &c->otio);
|
|
||||||
+ if (c->tlock > 1) /* write back lock if any */
|
|
||||||
+ (void)ioctl(c->fd, TIOCSLCKTRMIOS, &c->ltio);
|
|
||||||
+ c->tlock = 0;
|
|
||||||
close(c->fd);
|
|
||||||
c->fd = -1;
|
|
||||||
}
|
|
||||||
--- libblogger.c
|
|
||||||
+++ libblogger.c 2010-10-12 16:12:20.743926028 +0000
|
|
||||||
@@ -54,7 +54,7 @@ static int bootlog_init(const int lvl __
|
|
||||||
if (!S_ISFIFO(st.st_mode))
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
- if ((fdfifo = open(fifo_name, O_WRONLY|O_NONBLOCK)) < 0)
|
|
||||||
+ if ((fdfifo = open(fifo_name, O_WRONLY|O_NONBLOCK|O_NOCTTY|O_CLOEXEC)) < 0)
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
ret = 0;
|
|
||||||
--- libconsole.c
|
|
||||||
+++ libconsole.c 2010-10-12 16:20:05.187926537 +0000
|
|
||||||
@@ -770,7 +770,7 @@ void prepareIO(void (*rfunc)(int), void
|
|
||||||
(void)mkfifo(fifo_name, 0600);
|
|
||||||
errno = 0;
|
|
||||||
if (!stat(fifo_name, &st) && S_ISFIFO(st.st_mode)) {
|
|
||||||
- if ((fdfifo = open(fifo_name, O_RDWR|O_NOCTTY)) < 0)
|
|
||||||
+ if ((fdfifo = open(fifo_name, O_RDONLY|O_NOCTTY|O_CLOEXEC)) < 0)
|
|
||||||
warn("can not open named fifo %s: %s\n", fifo_name, strerror(errno));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -788,7 +788,7 @@ static void more_input (struct timeval *
|
|
||||||
FD_ZERO (&watch);
|
|
||||||
FD_SET (fdread, &watch);
|
|
||||||
|
|
||||||
- if (fdfifo > 0) {
|
|
||||||
+ if (fdfifo >= 0) {
|
|
||||||
FD_SET (fdfifo, &watch);
|
|
||||||
wfds = (fdread > fdfifo ? fdread : fdfifo) + 1;
|
|
||||||
} else
|
|
||||||
@@ -836,7 +836,7 @@ static void more_input (struct timeval *
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (fdfifo > 0 && FD_ISSET(fdfifo, &watch)) {
|
|
||||||
+ if (fdfifo >= 0 && FD_ISSET(fdfifo, &watch)) {
|
|
||||||
const ssize_t cnt = safein(fdfifo, (char*)trans, sizeof(trans), noerr);
|
|
||||||
|
|
||||||
if (cnt > 0) {
|
|
||||||
@@ -1003,6 +1003,10 @@ void closeIO(void)
|
|
||||||
(void)fclose(flog);
|
|
||||||
flog = NULL;
|
|
||||||
xout:
|
|
||||||
+ if (fdfifo >= 0) {
|
|
||||||
+ close(fdfifo);
|
|
||||||
+ fdfifo = -1;
|
|
||||||
+ }
|
|
||||||
for (c = cons; c; c = c->next) {
|
|
||||||
if (c->fd < 0)
|
|
||||||
continue;
|
|
4
showconsole-1.13.dif
Normal file
4
showconsole-1.13.dif
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
--- .dummy
|
||||||
|
+++ .dummy 2010-10-21 09:54:55.000000000 +0000
|
||||||
|
@@ -0,0 +1 @@
|
||||||
|
+Just a dummy, remove for a real patch
|
3
showconsole-1.13.tar.bz2
Normal file
3
showconsole-1.13.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:5f255f0166eddf3431bc498f4dbc12b7ae90234ef9cc37e678fe7532117af315
|
||||||
|
size 23873
|
21
sysvinit-2.88dsf-nfs.patch
Normal file
21
sysvinit-2.88dsf-nfs.patch
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
--- src/killall5.c
|
||||||
|
+++ src/killall5.c 2010-10-21 09:51:07.771926189 +0000
|
||||||
|
@@ -112,8 +112,8 @@ typedef struct _s_nfs
|
||||||
|
struct _s_nfs *next; /* Pointer to next struct. */
|
||||||
|
struct _s_nfs *prev; /* Pointer to previous st. */
|
||||||
|
SHADOW *shadow; /* Pointer to shadows */
|
||||||
|
- char * name;
|
||||||
|
size_t nlen;
|
||||||
|
+ char * name;
|
||||||
|
} NFS;
|
||||||
|
|
||||||
|
/* List of processes. */
|
||||||
|
@@ -346,7 +346,7 @@ static void clear_mnt(void)
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
- * Check if path is ia shadow off a NFS partition.
|
||||||
|
+ * Check if path is a shadow of a NFS partition.
|
||||||
|
*/
|
||||||
|
static int shadow(SHADOW *restrict this, const char *restrict name, const size_t nlen)
|
||||||
|
{
|
@ -1,3 +1,15 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Oct 21 12:00:26 CEST 2010 - werner@suse.de
|
||||||
|
|
||||||
|
- New killporc version 2.17
|
||||||
|
* Use /proc/self/mountinfo to avoid system call stat(2) on
|
||||||
|
running binaries not located on the mount point of the
|
||||||
|
current handled program
|
||||||
|
* Avoid to be detect sub (shadow) mounts on NFS mounts
|
||||||
|
- New showconsole 1.13
|
||||||
|
- Correct position of string pointer in NFS struct used in
|
||||||
|
killall5/pidof
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Tue Oct 12 18:21:44 CEST 2010 - werner@suse.de
|
Tue Oct 12 18:21:44 CEST 2010 - werner@suse.de
|
||||||
|
|
||||||
|
@ -21,8 +21,8 @@
|
|||||||
Name: sysvinit
|
Name: sysvinit
|
||||||
%define MGVER 0.9.6s
|
%define MGVER 0.9.6s
|
||||||
%define PDVER 2.0.2
|
%define PDVER 2.0.2
|
||||||
%define KPVER 2.16
|
%define KPVER 2.17
|
||||||
%define SCVER 1.12
|
%define SCVER 1.13
|
||||||
%define SIVER 2.88
|
%define SIVER 2.88
|
||||||
%define START 0.57
|
%define START 0.57
|
||||||
License: GPLv2+
|
License: GPLv2+
|
||||||
@ -35,9 +35,9 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
|||||||
BuildRequires: audit-devel libselinux-devel libsepol-devel pam-devel
|
BuildRequires: audit-devel libselinux-devel libsepol-devel pam-devel
|
||||||
Url: http://savannah.nongnu.org/projects/sysvinit/
|
Url: http://savannah.nongnu.org/projects/sysvinit/
|
||||||
Source: http://download.savannah.gnu.org/releases/sysvinit/sysvinit-2.88dsf.tar.bz2
|
Source: http://download.savannah.gnu.org/releases/sysvinit/sysvinit-2.88dsf.tar.bz2
|
||||||
Source2: killproc-2.16.tar.bz2
|
Source2: killproc-2.17.tar.bz2
|
||||||
Source3: powerd-2.0.2.tar.bz2
|
Source3: powerd-2.0.2.tar.bz2
|
||||||
Source4: showconsole-1.12.tar.bz2
|
Source4: showconsole-1.13.tar.bz2
|
||||||
Source5: startpar-0.57.tar.bz2
|
Source5: startpar-0.57.tar.bz2
|
||||||
Source6: rc.powerd
|
Source6: rc.powerd
|
||||||
Source7: sysvinit-rpmlintrc
|
Source7: sysvinit-rpmlintrc
|
||||||
@ -52,10 +52,11 @@ Patch4: notify-pam-dead.patch
|
|||||||
Patch5: sysvinit-last-ipv6-heuristic.patch
|
Patch5: sysvinit-last-ipv6-heuristic.patch
|
||||||
Patch6: sysvinit-2.88dsf-utf8.dif
|
Patch6: sysvinit-2.88dsf-utf8.dif
|
||||||
Patch7: sysvinit-2.88dsf-selinux.patch
|
Patch7: sysvinit-2.88dsf-selinux.patch
|
||||||
|
Patch8: sysvinit-2.88dsf-nfs.patch
|
||||||
Patch20: powerd-2.0.2.dif
|
Patch20: powerd-2.0.2.dif
|
||||||
Patch21: powerd-2.0.2-getaddrinfo.patch
|
Patch21: powerd-2.0.2-getaddrinfo.patch
|
||||||
Patch30: killproc-2.16.dif
|
Patch30: killproc-2.17.dif
|
||||||
Patch40: showconsole-1.12.dif
|
Patch40: showconsole-1.13.dif
|
||||||
Patch50: startpar-0.57.dif
|
Patch50: startpar-0.57.dif
|
||||||
Requires: sysvinit-tools
|
Requires: sysvinit-tools
|
||||||
Provides: sbin_init
|
Provides: sbin_init
|
||||||
@ -95,6 +96,7 @@ sysvinit package.
|
|||||||
%patch5 -p2 -b .ipv6
|
%patch5 -p2 -b .ipv6
|
||||||
%patch6 -p0 -b .utf8
|
%patch6 -p0 -b .utf8
|
||||||
%patch7 -p0 -b .selinux
|
%patch7 -p0 -b .selinux
|
||||||
|
%patch8 -p0 -b .nfs
|
||||||
%patch
|
%patch
|
||||||
pushd ../powerd-%{PDVER}
|
pushd ../powerd-%{PDVER}
|
||||||
%patch20
|
%patch20
|
||||||
|
Loading…
Reference in New Issue
Block a user