Hello community, here is the log from the commit of package sysvinit for openSUSE:11.4 checked in at Mon Mar 14 17:09:30 CET 2011.
-------- --- old-versions/11.4/all/sysvinit/sysvinit.changes 2011-02-15 16:06:08.000000000 +0100 +++ 11.4/sysvinit/sysvinit.changes 2011-03-14 16:00:30.000000000 +0100 @@ -1,0 +2,12 @@ +Thu Mar 10 15:15:33 CET 2011 - [email protected] + +- Make blogd work together with kernel from 11.4 even on a + serial system console (bnc#672450) + +------------------------------------------------------------------- +Thu Mar 3 14:54:10 CET 2011 - [email protected] + +- Make option -k for killproc utilities work for normal users even + if the exe link of an own process remains to root (bnc#664941) + +------------------------------------------------------------------- Package does not exist at destination yet. Using Fallback old-versions/11.4/all/sysvinit Destination is old-versions/11.4/UPDATES/all/sysvinit calling whatdependson for 11.4-i586 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ sysvinit.spec ++++++ --- /var/tmp/diff_new_pack.QkVu0Q/_old 2011-03-14 17:09:16.000000000 +0100 +++ /var/tmp/diff_new_pack.QkVu0Q/_new 2011-03-14 17:09:16.000000000 +0100 @@ -29,7 +29,7 @@ Group: System/Base AutoReqProv: on Version: 2.88 -Release: 37.<RELEASE3> +Release: 37.<RELEASE4> Summary: SysV-Style init BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: audit-devel libselinux-devel libsepol-devel pam-devel ++++++ killproc-2.19.dif ++++++ --- /var/tmp/diff_new_pack.QkVu0Q/_old 2011-03-14 17:09:16.000000000 +0100 +++ /var/tmp/diff_new_pack.QkVu0Q/_new 2011-03-14 17:09:16.000000000 +0100 @@ -1,4 +1,151 @@ ---- .dummy -+++ .dummy 2011-02-15 15:46:58.000000000 +0100 -@@ -0,0 +1 @@ -+Dummy entry, remove for a real patch +--- libinit.c ++++ libinit.c 2011-03-03 13:45:42.976427260 +0000 +@@ -669,6 +669,7 @@ int pidof (const char * inname, const ch + boolean isscrpt = false; + unsigned num = 0; + pid_t pid; ++ uid_t uid; + char *swapname = NULL; + char *fullname = (char *)inname; + char *realname = NULL; +@@ -677,6 +678,7 @@ int pidof (const char * inname, const ch + + p_pid = getpid(); + p_ppid = getppid(); ++ uid = getuid(); + + dir = openproc(); /* Open /proc and maybe do mount before */ + p_pppid = getpppid(p_ppid); /* Requires existence of /proc */ +@@ -773,6 +775,13 @@ int pidof (const char * inname, const ch + + if (prefix) { + if ((rll = readlinkat(dfd, here(d->d_name, "exe"), entry, PATH_MAX)) < 0) { ++ if (uid && (errno == EACCES || errno == EPERM)) { ++ errno = 0; ++ if (fstatat(dfd, d->d_name, &pid_st, 0) < 0) ++ continue; ++ if (pid_st.st_uid == uid) ++ goto risky; ++ } + if (errno != EPERM && errno != EACCES) + goto risky; + continue; +@@ -809,6 +818,13 @@ int pidof (const char * inname, const ch + + if (!name) { + if ((rll = readlinkat(dfd, here(d->d_name, "exe"), entry, PATH_MAX)) < 0) { ++ if (uid && (errno == EACCES || errno == EPERM)) { ++ errno = 0; ++ if (fstatat(dfd, d->d_name, &pid_st, 0) < 0) ++ continue; ++ if (pid_st.st_uid == uid) ++ goto risky; ++ } + if (errno != EPERM && errno != EACCES) + goto risky; + continue; +@@ -825,7 +841,6 @@ int pidof (const char * inname, const ch + if (realname && strncmp(realname, name, PATH_MAX) == 0) + found = true; + +- + break; + } + +@@ -942,12 +957,15 @@ int verify_pidfile (const char * pid_fil + ssize_t cnt; + boolean isscrpt = false; + pid_t pid; ++ uid_t uid; + char *swapname = NULL, *bufp; + char *fullname = (char *)inname; + char *realname = NULL; + struct stat pid_st, full_st; + char buf[BUFSIZ]; + ++ uid = getuid(); ++ + if (!ignore) { + list_t *m, *n; + list_for_each_safe(m, n, &remember) { +@@ -1041,14 +1059,23 @@ int verify_pidfile (const char * pid_fil + } + + errno = 0; +- if (!(flags & (KTHREAD|KSHORT)) && !isscrpt && +- (stat(proc(buf, "exe"), &pid_st) == 0)) { +- ++ if (!(flags & (KTHREAD|KSHORT)) && !isscrpt) { + char entry[PATH_MAX+1]; + const char *name; + boolean found; + ssize_t rll; + ++ if (stat(proc(buf, "exe"), &pid_st) < 0) { ++ if (uid && (errno == EACCES || errno == EPERM)) { ++ errno = 0; ++ if (stat(proc(buf, ""), &pid_st) < 0) ++ goto out; ++ if (pid_st.st_uid == uid) ++ goto risky; ++ } ++ goto out; ++ } ++ + if (pid_st.st_dev != full_st.st_dev) + goto out; + +@@ -1087,6 +1114,7 @@ int verify_pidfile (const char * pid_fil + + goto out; + } ++risky: + + if (errno && errno != ENOENT) { + warn("Can not read %s: %s\n", procbuf, strerror(errno)); +@@ -1162,8 +1190,11 @@ int check_pids (const char * inname, con + const char *pid; + struct stat pid_st, full_st; + list_t *m, *n; ++ uid_t uid; + int fp; + ++ uid = getuid(); ++ + if (!fullname) { + warn("program or process name required\n"); + return -1; +@@ -1228,13 +1259,22 @@ int check_pids (const char * inname, con + + /* killproc and daemon/startproc should use the full path */ + errno = 0; +- if (!(flags & (KTHREAD|KSHORT)) && !isscrpt && +- (stat(proc(pid, "exe"), &pid_st) == 0)) { +- ++ if (!(flags & (KTHREAD|KSHORT)) && !isscrpt) { + char entry[PATH_MAX+1]; + const char *name; + ssize_t rll; + ++ if (stat(proc(pid, "exe"), &pid_st) < 0) { ++ if (uid && (errno == EACCES || errno == EPERM)) { ++ errno = 0; ++ if (stat(proc(pid, ""), &pid_st) < 0) ++ goto ignore; ++ if (pid_st.st_uid == uid) ++ goto risky; ++ } ++ goto ignore; ++ } ++ + if (pid_st.st_dev != full_st.st_dev) + goto ignore; /* Does not belong to rembered list */ + +@@ -1267,6 +1307,7 @@ int check_pids (const char * inname, con + + skip = true; /* No stat entry check needed */ + } ++risky: + + if (!(flags & (KTHREAD|KSHORT)) && isscrpt && + (fp = open(proc(pid, "cmdline"), O_PROCMODE)) != -1) { ++++++ showconsole-1.13.dif ++++++ --- /var/tmp/diff_new_pack.QkVu0Q/_old 2011-03-14 17:09:16.000000000 +0100 +++ /var/tmp/diff_new_pack.QkVu0Q/_new 2011-03-14 17:09:16.000000000 +0100 @@ -1,5 +1,46 @@ +--- blogd.c ++++ blogd.c 2011-03-02 11:25:01.151926991 +0000 +@@ -301,9 +301,16 @@ int main(int argc, char *argv[]) + secondtty(cons, st.st_rdev); + + (void)ioctl(0, TIOCCONS, NULL); /* Undo any current map if any */ ++ close(0); ++ + if (ioctl(pts, TIOCCONS, NULL) < 0) + error("can not set console device to %s: %s\n", ptsname, strerror(errno)); + ++ dup2(pts, 1); ++ dup2(pts, 2); ++ if (pts > 2) ++ close(pts); ++ + for (c = cons; c; c = c->next) { + #ifdef _PC_MAX_CANON + if ((c->max_canon = (ssize_t)fpathconf(c->fd, _PC_MAX_CANON)) <= 0) +@@ -356,21 +363,16 @@ int main(int argc, char *argv[]) + close(cons->fd); + cons->fd = 1; /* Choose stdout */ + } +- close(pts); + close(ptm); + break; + case -1: +- close(pts); + close(ptm); + warn("can not fork to become daemon: %s\n", strerror(errno)); + goto err; + default: + time(&tt); + stt = ctime(&tt); +- close(pts); + close(ptm); +- close(cons->fd); +- cons->fd = -1; + for (c = cons; c; c = c->next) { + if (c->fd > 0) { + close(c->fd); --- libconsole.c -+++ libconsole.c 2010-11-09 15:24:33.895925637 +0000 ++++ libconsole.c 2011-03-02 10:33:17.032457114 +0000 @@ -707,11 +707,12 @@ static void parselog(unsigned char *buf, static void copylog(const unsigned char *buf, const size_t s) { @@ -34,7 +75,26 @@ dev = makedev(maj, min); break; } -@@ -1347,7 +1348,7 @@ void secondtty(struct console *restrict +@@ -1327,8 +1328,9 @@ void secondtty(struct console *restrict + + tail = cons; + +- if ((fc = fopen("/proc/tty/consoles", "r"))) { +- int maj, min, flags; ++ if ((fc = fopen("/proc/consoles", "r"))) { ++ unsigned int maj, min; ++ int flags; + struct stat st; + char fbuf[16]; + +@@ -1341,13 +1343,13 @@ void secondtty(struct console *restrict + error("can not opendir(/dev): %s\n", strerror(errno)); + pushd("/dev"); + +- while ((fscanf(fc, "%*s %*s (%[^)]) %d:%d", &fbuf[0], &maj, &min) == 3)) { ++ while ((fscanf(fc, "%*s %*s (%[^)]) %u:%u", &fbuf[0], &maj, &min) == 3)) { + struct console *restrict newc; + dev_t dev; if (!strchr(fbuf, 'E')) continue; @@ -55,3 +115,13 @@ This can be used on .I /dev/console as current character device to +--- showconsole.c ++++ showconsole.c 2010-10-25 13:08:25.583937937 +0000 +@@ -19,6 +19,7 @@ + #include <fcntl.h> + #include <unistd.h> + #include <errno.h> ++#include <signal.h> + #include "libconsole.h" + + /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
