From da6ad984e384aeb921a16393cdf51c680fedc3de Mon Sep 17 00:00:00 2001 From: vanhofen Date: Mon, 29 Mar 2021 00:16:07 +0200 Subject: [PATCH] - sysvinit: bump version to 2.99 --- .../{crypt-lib.patch => 0001-crypt-lib.patch} | 0 ...FIFO.patch => 0002-change-INIT_FIFO.patch} | 0 .../patches/0003-pidof-add-m-option.patch | 191 ++++++++++++++++++ package/sysvinit/patches/0004-realpath.patch | 59 ++++++ 4 files changed, 250 insertions(+) rename package/sysvinit/patches/{crypt-lib.patch => 0001-crypt-lib.patch} (100%) rename package/sysvinit/patches/{change-INIT_FIFO.patch => 0002-change-INIT_FIFO.patch} (100%) create mode 100644 package/sysvinit/patches/0003-pidof-add-m-option.patch create mode 100644 package/sysvinit/patches/0004-realpath.patch diff --git a/package/sysvinit/patches/crypt-lib.patch b/package/sysvinit/patches/0001-crypt-lib.patch similarity index 100% rename from package/sysvinit/patches/crypt-lib.patch rename to package/sysvinit/patches/0001-crypt-lib.patch diff --git a/package/sysvinit/patches/change-INIT_FIFO.patch b/package/sysvinit/patches/0002-change-INIT_FIFO.patch similarity index 100% rename from package/sysvinit/patches/change-INIT_FIFO.patch rename to package/sysvinit/patches/0002-change-INIT_FIFO.patch diff --git a/package/sysvinit/patches/0003-pidof-add-m-option.patch b/package/sysvinit/patches/0003-pidof-add-m-option.patch new file mode 100644 index 00000000..265ee076 --- /dev/null +++ b/package/sysvinit/patches/0003-pidof-add-m-option.patch @@ -0,0 +1,191 @@ +From 6c490ea6579a132fabb7dbd25387bb521f820371 Mon Sep 17 00:00:00 2001 +From: Hongxu Jia +Date: Wed, 24 Jul 2013 17:07:22 +0800 +Subject: [PATCH] pidof: add -m option + +When used with -o, will also omit any processes that have the same +argv[0] and argv[1] as any explicitly omitted process ids. This can be +used to avoid multiple shell scripts concurrently calling pidof returning +each other's pids. + +https://bugzilla.redhat.com/show_bug.cgi?id=883856 + +Upstream-Status: backport +Imported patch from: https://bugzilla.redhat.com/attachment.cgi?id=658166 + +Signed-off-by: Hongxu Jia + +--- + man/pidof.8 | 6 +++++ + src/killall5.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++--- + 2 files changed, 65 insertions(+), 3 deletions(-) + +diff --git a/man/pidof.8 b/man/pidof.8 +index ebe5f55..2fdc4d3 100644 +--- a/man/pidof.8 ++++ b/man/pidof.8 +@@ -25,6 +25,7 @@ pidof -- find the process ID of a running program. + .RB [ \-n ] + .RB [ \-x ] + .RB [ \-z ] ++.RB [ \-m ] + .RB [ \-o + .IR omitpid[,omitpid...] ] + .RB [ \-o +@@ -76,6 +77,11 @@ is shown. The default separator is a space. + Tells \fIpidof\fP to omit processes with that process id. The special + pid \fB%PPID\fP can be used to name the parent process of the \fIpidof\fP + program, in other words the calling shell or shell script. ++.IP -m ++When used with -o, will also omit any processes that have the same ++argv[0] and argv[1] as any explicitly omitted process ids. This can be ++used to avoid multiple shell scripts concurrently calling pidof returning ++each other's pids. + .SH "EXIT STATUS" + .TP + .B 0 +diff --git a/src/killall5.c b/src/killall5.c +index 8b5cb38..a664954 100644 +--- a/src/killall5.c ++++ b/src/killall5.c +@@ -126,6 +126,7 @@ + + /* List of processes. */ + PROC *plist; ++PROC *olist; + + /* List of processes to omit. */ + OMIT *omit; +@@ -357,6 +358,20 @@ + } + if (p->shadow) + clear_shadow(p->shadow); ++ free(p); ++ } ++} ++ ++static void clear_omit(void) ++{ ++ OMIT *o; ++ PROC *p; ++ for (o = omit; o; o = omit) { ++ omit = omit->next; ++ free(o); ++ } ++ for (p = olist; p; p = olist) { ++ olist = olist->next; + free(p); + } + } +@@ -486,6 +501,7 @@ + DIR *dir; + FILE *fp; + PROC *p, *n; ++ OMIT *o, *m; + struct dirent *d; + struct stat st; + char path[PATH_MAX+1]; +@@ -726,6 +742,17 @@ + p->next = plist; + plist = p; + p->pid = pid; ++ /* Could be smarter, but it's a small list. */ ++ m = omit; ++ for (o = omit; m; o = m) { ++ m = o->next; ++ if (o->pid == p->pid) { ++ n = (PROC*)xmalloc(sizeof(PROC)); ++ *n = *p; ++ n->next = olist; ++ olist = n; ++ } ++ } + } + closedir(dir); + +@@ -937,6 +964,26 @@ + return q; + } + ++int matches(PROC *o, PROC *p) ++{ ++ int ret = 0; ++ char *oargv1, *pargv1; ++ if ((o->argv0 && p->argv0 && !strcmp(o->argv0,p->argv0))) { ++ if (o->argv1 && p->argv1) { ++ if ((oargv1 = canonicalize_file_name(o->argv1)) == NULL) ++ oargv1 = strdup(o->argv1); ++ if ((pargv1 = canonicalize_file_name(p->argv1)) == NULL) ++ pargv1 = strdup(p->argv1); ++ if (! strcmp(oargv1, pargv1)) { ++ ret = 1; ++ } ++ free(oargv1); ++ free(pargv1); ++ } ++ } ++ return ret; ++} ++ + /* Give usage message and exit. */ + void usage(void) + { +@@ -987,6 +1034,7 @@ + #define PIDOF_OMIT 0x02 + #define PIDOF_NETFS 0x04 + #define PIDOF_QUIET 0x08 ++#define PIDOF_OMIT_OMIT_MATCHES 0x08 + + /* + * Pidof functionality. +@@ -1004,6 +1052,7 @@ + char tmp[512]; + char sep = ' '; + ++ olist = (PROC*)0; + omit = (OMIT*)0; + nlist = (NFS*)0; + opterr = 0; +@@ -1011,7 +1060,7 @@ + if ((token = getenv("PIDOF_NETFS")) && (strcmp(token,"no") != 0)) + flags |= PIDOF_NETFS; + +- while ((opt = getopt(argc,argv,"qhco:d:sxzn")) != EOF) switch (opt) { ++ while ((opt = getopt(argc,argv,"qhcmo:d:sxzn")) != EOF) switch (opt) { + case '?': + nsyslog(LOG_ERR,"invalid options on command line!\n"); + closelog(); +@@ -1062,6 +1111,9 @@ + case 'z': + list_dz_processes = TRUE; + break; ++ case 'm': ++ flags |= PIDOF_OMIT_OMIT_MATCHES; ++ break; + case 'n': + flags |= PIDOF_NETFS; + break; +@@ -1093,10 +1145,13 @@ + pid_t spid = 0; + while ((p = get_next_from_pid_q(q))) { + if ((flags & PIDOF_OMIT) && omit) { +- OMIT * optr; +- for (optr = omit; optr; optr = optr->next) { ++ PROC * optr; ++ for (optr = olist; optr; optr = optr->next) { + if (optr->pid == p->pid) + break; ++ if (flags & PIDOF_OMIT_OMIT_MATCHES) ++ if (matches(optr, p)) ++ break; + } + + /* +@@ -1138,6 +1193,7 @@ + printf("\n"); + } + ++ clear_omit(); + clear_mnt(); + + closelog(); diff --git a/package/sysvinit/patches/0004-realpath.patch b/package/sysvinit/patches/0004-realpath.patch new file mode 100644 index 00000000..d75e5505 --- /dev/null +++ b/package/sysvinit/patches/0004-realpath.patch @@ -0,0 +1,59 @@ +From eb158c97f19d473d01befe96359a7f93ae834517 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Thu, 19 Nov 2015 00:10:03 +0000 +Subject: [PATCH] Fix build on musl use realpath() API its available on all + libcs + +realpath() API doesnt work on systems with PATH_MAX set to be unlimited e.g. GNU/Hurd +However for Linux it should always work + +Upstream-Status: Inappropriate[Linux specific] + +Signed-off-by: Khem Raj + +--- + src/killall5.c | 4 ++-- + src/mountpoint.c | 1 + + src/wall.c | 1 + + 3 files changed, 4 insertions(+), 2 deletions(-) + +diff --git a/src/killall5.c b/src/killall5.c +index a664954..9798423 100644 +--- a/src/killall5.c ++++ b/src/killall5.c +@@ -970,9 +970,9 @@ + char *oargv1, *pargv1; + if ((o->argv0 && p->argv0 && !strcmp(o->argv0,p->argv0))) { + if (o->argv1 && p->argv1) { +- if ((oargv1 = canonicalize_file_name(o->argv1)) == NULL) ++ if ((oargv1 = realpath(o->argv1, NULL)) == NULL) + oargv1 = strdup(o->argv1); +- if ((pargv1 = canonicalize_file_name(p->argv1)) == NULL) ++ if ((pargv1 = realpath(p->argv1, NULL)) == NULL) + pargv1 = strdup(p->argv1); + if (! strcmp(oargv1, pargv1)) { + ret = 1; +diff --git a/src/mountpoint.c b/src/mountpoint.c +index b24335e..5f20522 100644 +--- a/src/mountpoint.c ++++ b/src/mountpoint.c +@@ -23,6 +23,7 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include + #include + #include + #include +diff --git a/src/wall.c b/src/wall.c +index d3a2c70..00826e9 100644 +--- a/src/wall.c ++++ b/src/wall.c +@@ -30,6 +30,7 @@ + #include + #include + #include ++#include + #include "init.h" + +