Hello community,

here is the log from the commit of package sysvinit for openSUSE:Factory
checked in at Mon Sep 5 17:54:44 CEST 2011.



--------
--- sysvinit/sysvinit.changes   2011-08-01 16:48:32.000000000 +0200
+++ /mounts/work_src_done/STABLE/sysvinit/sysvinit.changes      2011-09-02 
17:44:26.000000000 +0200
@@ -1,0 +2,7 @@
+Fri Sep  2 15:43:20 UTC 2011 - wer...@suse.de
+
+- Update to killproc-2.20 
+- Update to showconsole-1.15
+- Clean spec file
+
+-------------------------------------------------------------------

calling whatdependson for head-i586


Old:
----
  killproc-2.19.dif
  killproc-2.19.tar.bz2
  showconsole-1.14.dif
  showconsole-1.14.tar.bz2

New:
----
  killproc-2.20.dif
  killproc-2.20.tar.bz2
  showconsole-1.15.dif
  showconsole-1.15.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ sysvinit.spec ++++++
--- /var/tmp/diff_new_pack.XKBXyu/_old  2011-09-05 17:54:28.000000000 +0200
+++ /var/tmp/diff_new_pack.XKBXyu/_new  2011-09-05 17:54:28.000000000 +0200
@@ -21,23 +21,23 @@
 Name:           sysvinit
 %define MGVER  0.9.6s
 %define PDVER  2.0.2
-%define KPVER  2.19
-%define SCVER  1.14
+%define KPVER  2.20
+%define SCVER  1.15
 %define SIVER  2.88+
 %define START  0.57
 License:        GPLv2+
 Group:          System/Base
 AutoReqProv:    on
 Version:        2.88+
-Release:        58
+Release:        60
 Summary:        SysV-Style init
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 BuildRequires:  audit-devel libselinux-devel libsepol-devel pam-devel
 Url:            http://savannah.nongnu.org/projects/sysvinit/
 Source:         
http://download.savannah.gnu.org/releases/sysvinit/sysvinit-2.88+dsf.tar.bz2
-Source2:        killproc-2.19.tar.bz2
+Source2:        killproc-2.20.tar.bz2
 Source3:        powerd-2.0.2.tar.bz2
-Source4:        showconsole-1.14.tar.bz2
+Source4:        showconsole-1.15.tar.bz2
 Source5:        startpar-0.57.tar.bz2
 Source6:        rc.powerd
 Source7:        sysvinit-rpmlintrc
@@ -55,8 +55,8 @@
 Patch8:         sysvinit-2.88+dsf-blowfish.dif
 Patch20:        powerd-2.0.2.dif
 Patch21:        powerd-2.0.2-getaddrinfo.patch
-Patch30:        killproc-2.19.dif
-Patch40:        showconsole-1.14.dif
+Patch30:        killproc-2.20.dif
+Patch40:        showconsole-1.15.dif
 Patch50:        startpar-0.57.dif
 Requires:       sysvinit-tools
 Provides:       sbin_init
@@ -98,15 +98,21 @@
 %patch7  -p0 -b .crypt
 %patch8  -p0 -b .blowfish
 %patch
+pushd doc
+  mkdir killproc powerd showconsole
+popd
 pushd ../powerd-%{PDVER}
 %patch20
 %patch21
+ln -t ../sysvinit-%{SIVER}dsf/doc/powerd README SUPPORTED FAQ 
powerd.conf.monitor powerd.conf.peer
 popd
 pushd ../killproc-%{KPVER}
 %patch30
+ln -t ../sysvinit-%{SIVER}dsf/doc/killproc README
 popd
 pushd ../showconsole-%{SCVER}
 %patch40
+ln -t ../sysvinit-%{SIVER}dsf/doc/showconsole README
 popd
 pushd ../startpar-%{START}
 %patch50
@@ -165,9 +171,6 @@
 pushd ../powerd-%{PDVER}
 %ifnarch s390 s390x
   make install DESTDIR=${RPM_BUILD_ROOT}
-  cp README README.powerd
-  cp SUPPORTED SUPPORTED.powerd
-  cp FAQ FAQ.powerd
   echo '# ' > ${RPM_BUILD_ROOT}/etc/powerd.conf
   echo '# /etc/powerd.conf  for powerd version-2.02' >> 
${RPM_BUILD_ROOT}/etc/powerd.conf
   echo '# ' >> ${RPM_BUILD_ROOT}/etc/powerd.conf
@@ -247,16 +250,13 @@
 
 %files tools
 %defattr (-,root,root,755)
+%doc COPYING COPYRIGHT doc/Propaganda 
+%doc doc/Changelog doc/killproc doc/showconsole
 %ifnarch s390 s390x
 %config /etc/powerd.conf
 %config /etc/init.d/powerd
-%doc   ../powerd-%{PDVER}/README.powerd
-%doc   ../powerd-%{PDVER}/SUPPORTED.powerd
-%doc   ../powerd-%{PDVER}/FAQ.powerd
-%doc   ../powerd-%{PDVER}/powerd.conf.monitor
-%doc   ../powerd-%{PDVER}/powerd.conf.peer
+%doc   doc/powerd
 %endif
-# %doc contrib/bootlogd.README
 %dir /lib/mkinitrd
 %dir /lib/mkinitrd/scripts
 /lib/mkinitrd/scripts/boot-blogd.sh
@@ -269,8 +269,6 @@
 /usr/bin/last
 /usr/bin/lastb
 /usr/bin/utmpdump
-# /sbin/bootlogd
-# /sbin/intr
 /sbin/blogger
 /sbin/blogd
 /sbin/fstab-decode
@@ -301,7 +299,6 @@
 # /usr/lib/libblogger.a
 %doc %{_mandir}/man1/mountpoint.1.gz
 %doc %{_mandir}/man1/utmpdump.1.gz
-# %doc %{_mandir}/man8/bootlogd.8.gz
 %doc %{_mandir}/man8/blogger.8.gz
 %doc %{_mandir}/man8/blogd.8.gz
 %doc %{_mandir}/man8/fstab-decode.8.gz
@@ -310,7 +307,6 @@
 %doc %{_mandir}/man8/isserial.8.gz
 %doc %{_mandir}/man8/checkproc.8.gz
 %doc %{_mandir}/man8/pidofproc.8.gz
-#%doc %{_mandir}/man8/intr.8.gz
 %doc %{_mandir}/man8/killall5.8.gz
 %doc %{_mandir}/man8/killproc.8.gz
 %doc %{_mandir}/man8/pidof.8.gz
@@ -325,5 +321,12 @@
 %doc %{_mandir}/man8/rvmtab.8.gz
 %doc %{_mandir}/man8/vhangup.8.gz
 %doc %{_mandir}/man8/mkill.8.gz
+%if 0
+%doc contrib/bootlogd.README
+/sbin/bootlogd
+/sbin/intr
+%doc %{_mandir}/man8/bootlogd.8.gz
+%doc %{_mandir}/man8/intr.8.gz
+%endif
 
 %changelog

++++++ killproc-2.19.dif -> killproc-2.20.dif ++++++
--- sysvinit/killproc-2.19.dif  2011-04-15 16:49:21.000000000 +0200
+++ /mounts/work_src_done/STABLE/sysvinit/killproc-2.20.dif     2011-09-02 
17:44:25.000000000 +0200
@@ -1,191 +1,4 @@
---- libinit.c
-+++ libinit.c  2011-04-06 13:21:49.212425737 +0000
-@@ -349,18 +349,24 @@ static int find_mount(const char * path,
- {
-     const size_t nlen = strlen(path);
-     list_t *ptr;
-+    int ret = 0;
- 
-     list_for_each(ptr, &mounts) {
-       MNTINFO *m = list_entry(ptr, MNTINFO);
-       if (nlen < m->nlen)
-           continue;
--      if (m->nlen == 1)               /* root fs is the last entry */
--          return (m == s);
-+      if (m->nlen == 1 && (m == s)) {         /* root fs is the last entry */
-+          ret++;
-+          break;
-+      }
-       if (strncmp(path, m->point, m->nlen))
-           continue;
--      return (m == s);
-+      if (m == s) {
-+          ret++;
-+          break;
-+      }
-     }
--    return 0;
-+    return ret;
- }
- 
- extern inline char * handl_buf(char *restrict buf)
-@@ -669,6 +675,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 +684,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 +781,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 +824,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 +847,6 @@ int pidof (const char * inname, const ch
-                   if (realname && strncmp(realname, name, PATH_MAX) == 0)
-                       found = true;
- 
--
-                   break;
-           }
- 
-@@ -942,12 +963,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 +1065,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 +1120,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 +1196,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 +1265,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 +1313,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) {
---- libinit.h
-+++ libinit.h  2011-04-15 14:43:35.083926074 +0000
-@@ -91,7 +91,7 @@
- #define WRGSYNTAX             102     /* usage etc. */
- #define NOPIDREAD             101     /* trouble */
- 
--#define LSB_STATUS_PROOF      ((errno == EPERM || errno == EACCES) ? 
LSB_NOPERM : NOPIDREAD )
-+#define LSB_STATUS_PROOF      ((errno == EPERM || errno == EACCES) ? 
LSB_NOPERM : LSB_STATUS_ISDEAD )
- #define LSB_STATUS_PROOFX     ((errno == ENOENT) ? (flags & KILL) ? 
LSB_NOENTR : 4 : LSB_STATUS_PROOF )
- 
- #define LOG_OPTIONS   (LOG_ODELAY|LOG_CONS)
+--- .#nothing
++++ .#nothing  2011-09-01 11:59:52.000000000 +0000
+@@ -0,0 +1 @@
++Please remove if patched

++++++ killproc-2.19.tar.bz2 -> killproc-2.20.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/killproc-2.19/Makefile new/killproc-2.20/Makefile
--- old/killproc-2.19/Makefile  2011-02-16 09:04:59.000000000 +0100
+++ new/killproc-2.20/Makefile  2011-09-02 16:42:22.000000000 +0200
@@ -12,7 +12,7 @@
 PREFIX  =      /usr
 DEBUG   =
 DESTDIR         =
-VERSION         =      2.19
+VERSION         =      2.20
 DATE    =      $(shell date +'%d%b%y' | tr '[:lower:]' '[:upper:]')
 
 ifneq ($(INC),)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/killproc-2.19/checkproc.8 
new/killproc-2.20/checkproc.8
--- old/killproc-2.19/checkproc.8       2011-02-16 09:04:59.000000000 +0100
+++ new/killproc-2.20/checkproc.8       2011-09-02 16:42:22.000000000 +0200
@@ -193,7 +193,7 @@
 Use an alternate pid file instead of the default
 .BR /var/run/<basename>.pid .
 If the option
-.b \-k
+.B \-k
 is specified and the
 .I pid_file
 does not exist,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/killproc-2.19/fsync.1 new/killproc-2.20/fsync.1
--- old/killproc-2.19/fsync.1   2011-02-16 09:04:59.000000000 +0100
+++ new/killproc-2.20/fsync.1   2011-09-02 16:42:22.000000000 +0200
@@ -27,11 +27,11 @@
 .BR fsync (2)
 function and therefore shows the same weaknesses
 by any system activity.
-\."
+.\"
 .SH SEE ALSO
 .BR fsync (2),
 .BR fdatasync (2).
-\."
+.\"
 .SH COPYRIGHT
 2007 Werner Fink,
 2007 SuSE GmbH Nuernberg, Germany.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/killproc-2.19/killproc-2.19.lsm 
new/killproc-2.20/killproc-2.19.lsm
--- old/killproc-2.19/killproc-2.19.lsm 2011-02-16 09:04:59.000000000 +0100
+++ new/killproc-2.20/killproc-2.19.lsm 1970-01-01 01:00:00.000000000 +0100
@@ -1,18 +0,0 @@
-Begin3
-Title:         killproc and assorted tools for boot scripts
-Version:       2.19
-Entered-date:  16FEB11
-Description:   Some useful programs for a replacment of the shell functions
-               daemom and killproc found in the Linux System V init suite.
-               killproc(8) for signaling or terminating, checkproc(8) for
-               checking and startproc(8) for starting processes.
-               Each program has its own manual page.
-Keywords:      killproc, startproc, checkproc, process control
-Author:                Werner Fink <wer...@suse.de>
-Maintained-by: Werner Fink <wer...@suse.de>
-Primary-site:  sunsite.unc.edu /pub/Linux/system/daemons/init
-               @UNKNOWN killproc-2.19.tar.gz
-Alternate-site:        ftp.suse.com /pub/projects/init
-Platforms:     Linux with System VR2 or higher boot scheme
-Copying-policy:        GPL
-End
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/killproc-2.19/killproc-2.20.lsm 
new/killproc-2.20/killproc-2.20.lsm
--- old/killproc-2.19/killproc-2.20.lsm 1970-01-01 01:00:00.000000000 +0100
+++ new/killproc-2.20/killproc-2.20.lsm 2011-09-02 16:42:22.000000000 +0200
@@ -0,0 +1,18 @@
+Begin3
+Title:         killproc and assorted tools for boot scripts
+Version:       2.20
+Entered-date:  02SEP11
+Description:   Some useful programs for a replacment of the shell functions
+               daemom and killproc found in the Linux System V init suite.
+               killproc(8) for signaling or terminating, checkproc(8) for
+               checking and startproc(8) for starting processes.
+               Each program has its own manual page.
+Keywords:      killproc, startproc, checkproc, process control
+Author:                Werner Fink <wer...@suse.de>
+Maintained-by: Werner Fink <wer...@suse.de>
+Primary-site:  sunsite.unc.edu /pub/Linux/system/daemons/init
+               @UNKNOWN killproc-2.20.tar.gz
+Alternate-site:        ftp.suse.com /pub/projects/init
+Platforms:     Linux with System VR2 or higher boot scheme
+Copying-policy:        GPL
+End
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/killproc-2.19/libinit.c new/killproc-2.20/libinit.c
--- old/killproc-2.19/libinit.c 2011-02-16 09:04:59.000000000 +0100
+++ new/killproc-2.20/libinit.c 2011-09-02 16:42:22.000000000 +0200
@@ -349,18 +349,24 @@
 {
     const size_t nlen = strlen(path);
     list_t *ptr;
+    int ret = 0;
 
     list_for_each(ptr, &mounts) {
        MNTINFO *m = list_entry(ptr, MNTINFO);
        if (nlen < m->nlen)
            continue;
-       if (m->nlen == 1)               /* root fs is the last entry */
-           return (m == s);
+       if (m->nlen == 1 && (m == s)) {         /* root fs is the last entry */
+           ret++;
+           break;
+       }
        if (strncmp(path, m->point, m->nlen))
            continue;
-       return (m == s);
+       if (m == s) {
+           ret++;
+           break;
+       }
     }
-    return 0;
+    return ret;
 }
 
 extern inline char * handl_buf(char *restrict buf)
@@ -669,6 +675,7 @@
     boolean isscrpt = false;
     unsigned num = 0;
     pid_t pid;
+    uid_t uid;
     char *swapname = NULL;
     char *fullname = (char *)inname;
     char *realname = NULL;
@@ -677,6 +684,7 @@
 
     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 +781,13 @@
 
            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 +824,13 @@
 
                    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 +847,6 @@
                    if (realname && strncmp(realname, name, PATH_MAX) == 0)
                        found = true;
 
-
                    break;
            }
 
@@ -942,12 +963,15 @@
     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 +1065,23 @@
     }
 
     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 +1120,7 @@
 
        goto out;
     }
+risky:
 
     if (errno && errno != ENOENT) {
        warn("Can not read %s: %s\n", procbuf, strerror(errno));
@@ -1162,8 +1196,11 @@
     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 +1265,22 @@
 
        /* 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 +1313,7 @@
 
            skip = true;                /* No stat entry check needed */
        }
+risky:
 
        if (!(flags & (KTHREAD|KSHORT)) &&  isscrpt &&
            (fp = open(proc(pid, "cmdline"), O_PROCMODE)) != -1) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/killproc-2.19/libinit.h new/killproc-2.20/libinit.h
--- old/killproc-2.19/libinit.h 2011-02-16 09:04:59.000000000 +0100
+++ new/killproc-2.20/libinit.h 2011-09-02 16:42:22.000000000 +0200
@@ -91,7 +91,7 @@
 #define WRGSYNTAX              102     /* usage etc. */
 #define NOPIDREAD              101     /* trouble */
 
-#define LSB_STATUS_PROOF       ((errno == EPERM || errno == EACCES) ? 
LSB_NOPERM : NOPIDREAD )
+#define LSB_STATUS_PROOF       ((errno == EPERM || errno == EACCES) ? 
LSB_NOPERM : LSB_STATUS_ISDEAD )
 #define LSB_STATUS_PROOFX      ((errno == ENOENT) ? (flags & KILL) ? 
LSB_NOENTR : 4 : LSB_STATUS_PROOF )
 
 #define LOG_OPTIONS    (LOG_ODELAY|LOG_CONS)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/killproc-2.19/mkill.8 new/killproc-2.20/mkill.8
--- old/killproc-2.19/mkill.8   2011-02-16 09:04:59.000000000 +0100
+++ new/killproc-2.20/mkill.8   2011-09-02 16:42:22.000000000 +0200
@@ -69,7 +69,7 @@
 .B \fB\-l\fR
 List all known signals.
 .IP
-\."
+.\"
 .SH EXAMPLES
 .nf
 .B mkill -TERM /var
@@ -85,15 +85,15 @@
 .fi
 All processes using a pseudo-terminal slave will
 hangup.
-\."
+.\"
 .SH RETURN VALUE
 Always success which is that zero is returned.
-\."
+.\"
 .SH SEE ALSO
 .BR fuser (1),
 .BR proc (5),
 .BR umount (8).
-\."
+.\"
 .SH COPYRIGHT
 2008 Werner Fink,
 2008 SUSE LINUX Products GmbH, Germany.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/killproc-2.19/rvmtab.8 new/killproc-2.20/rvmtab.8
--- old/killproc-2.19/rvmtab.8  2011-02-16 09:04:59.000000000 +0100
+++ new/killproc-2.20/rvmtab.8  2011-09-02 16:42:22.000000000 +0200
@@ -29,17 +29,17 @@
 Currently
 .B rvmtab
 does not know about any option.
-\."
+.\"
 .SH EXAMPLES
 .nf
 .B rvmtab
 .fi
-\."
+.\"
 .SH RETURN VALUE
 Beside permsissions and and alloc errors
 .B rvmtab
 always returns success.
-\."
+.\"
 .SH FILES
 .TP
 .I /proc/
@@ -51,10 +51,10 @@
 .TP
 .I /proc/self/mountinfo
 this file contains information about mount points like the unique mount ID.
-\."
+.\"
 .SH SEE ALSO
 .BR proc (5),
-\."
+.\"
 .SH COPYRIGHT
 2011 Werner Fink,
 2011 SUSE LINUX Products GmbH, Germany.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/killproc-2.19/usleep.1 new/killproc-2.20/usleep.1
--- old/killproc-2.19/usleep.1  2011-02-16 09:04:59.000000000 +0100
+++ new/killproc-2.20/usleep.1  2011-09-02 16:42:22.000000000 +0200
@@ -36,13 +36,13 @@
 .BR usleep (3)
 function and therefore shows the same weaknesses
 by any system activity.
-\."
+.\"
 .SH SEE ALSO
 .BR usleep (3),
 .BR sleep (1),
 .BR sleep (3),
 .BR sched_yield (2).
-\."
+.\"
 .SH COPYRIGHT
 2001 Werner Fink,
 2001 SuSE GmbH Nuernberg, Germany.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/killproc-2.19/vhangup.8 new/killproc-2.20/vhangup.8
--- old/killproc-2.19/vhangup.8 2011-02-16 09:04:59.000000000 +0100
+++ new/killproc-2.20/vhangup.8 2011-09-02 16:42:22.000000000 +0200
@@ -20,7 +20,7 @@
 .B vhangup
 simulates a hangup on the specified terminals.  Not existing
 device files or devices will be ignored.
-\."
+.\"
 .SH EXAMPLES
 .nf
 .B vhangup /dev/tty1 /dev/tty2 /dev/tty3 /dev/tty4 /dev/tty5 /dev/tty6 
/dev/ttyS1
@@ -30,16 +30,16 @@
 to the listed ttys by a dummy that will deny further reading/writing
 to the device. It also send the signals SIGHUP/SIGCONT to the processes
 which have file descriptors open on the listed ttys.
-\."
+.\"
 .SH RETURN VALUE
 On success, zero is returned.  On error, 1 is returned.
-\."
+.\"
 .SH SEE ALSO
 .BR vhangup (2),
 .BR tty (4),
 .BR ttyS (4),
 .BR pts (4).
-\."
+.\"
 .SH COPYRIGHT
 2008 Werner Fink,
 2008 SUSE LINUX Products GmbH, Germany.

++++++ showconsole-1.14.dif -> showconsole-1.15.dif ++++++
++++ 690 lines (skipped)
++++ between sysvinit/showconsole-1.14.dif
++++ and /mounts/work_src_done/STABLE/sysvinit/showconsole-1.15.dif

++++++ showconsole-1.14.tar.bz2 -> showconsole-1.15.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/showconsole-1.14/Makefile 
new/showconsole-1.15/Makefile
--- old/showconsole-1.14/Makefile       2010-11-09 17:01:00.000000000 +0100
+++ new/showconsole-1.15/Makefile       2011-04-01 15:19:46.000000000 +0200
@@ -13,7 +13,7 @@
 #DESTDIR =     /tmp/root
 DEBUG   =
 DESTDIR         =
-VERSION         =      1.14
+VERSION         =      1.15
 DATE    =      $(shell date +'%d%b%y' | tr '[:lower:]' '[:upper:]')
 COPTS    =
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/showconsole-1.14/blogd.8 new/showconsole-1.15/blogd.8
--- old/showconsole-1.14/blogd.8        2011-03-22 11:11:03.000000000 +0100
+++ new/showconsole-1.15/blogd.8        2011-09-01 15:10:12.000000000 +0200
@@ -8,7 +8,6 @@
 .\"
 .TH BLOGD 8 "Nov 10, 2000" "Version 1.16" "The SuSE boot concept"
 .UC 8
-.OS SuSE Linux
 .SH NAME
 blogd \- boot logging on /dev/console
 .SH SYNOPSIS
@@ -65,7 +64,7 @@
 that it should stop writing to disk but
 continue to repeat messages to the old
 devices of the system console.
-\."
+.\"
 .SH BUGS
 .B blogd
 needs a mounted
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/showconsole-1.14/blogd.c new/showconsole-1.15/blogd.c
--- old/showconsole-1.14/blogd.c        2011-03-25 18:52:49.000000000 +0100
+++ new/showconsole-1.15/blogd.c        2011-04-20 11:21:40.000000000 +0200
@@ -41,6 +41,7 @@
 # define _POSIX_MAX_CANON 255
 #endif
 extern volatile sig_atomic_t nsigsys;
+extern volatile sig_atomic_t signaled;
 
 static const char console[] = "/dev/console";
 
@@ -66,7 +67,7 @@
     _logger(fmt, ap);
     va_end(ap);
     popd();
-    exit (1);
+    exit(EXIT_FAILURE);
 }
 
 /*
@@ -122,7 +123,6 @@
 static struct sigaction saved_sigquit;
 static struct sigaction saved_sigterm;
 static struct sigaction saved_sigsys;
-static volatile sig_atomic_t signaled = 0;
 
 static void sighandle(int sig)
 {
@@ -318,6 +318,10 @@
     cfmakeraw(&o);
     cfsetispeed(&o, ispeed);
     cfsetospeed(&o, ospeed);
+    o.c_lflag &= ~ECHO;
+    o.c_lflag |= ISIG;
+    o.c_cc[VTIME] = 0;
+    o.c_cc[VMIN]  = CMIN;
 
     if (openpty(&ptm, &pts, ptsname, &o, &w) < 0)
        error("can not open pty/tty pair: %m\n");
@@ -336,7 +340,7 @@
        dup2(0, 2);
 
     secondtty(cons, st.st_rdev);
-exit(0);
+
     (void)ioctl(0, TIOCCONS, NULL);  /* Undo any current map if any */
     close(0);
 
@@ -344,6 +348,20 @@
        error("can not set console device to %s: %m\n", ptsname);
     close(pts);
 
+    signaled = nsigsys = 0;
+    set_signal(SIGTTIN, &saved_sigttin, SIG_IGN);
+    set_signal(SIGTTOU, &saved_sigttou, SIG_IGN);
+    set_signal(SIGTSTP, &saved_sigtstp, SIG_IGN);
+    set_signal(SIGHUP,  &saved_sighup,  SIG_IGN);
+    set_signal(SIGINT,  &saved_sigint,  sighandle);
+    set_signal(SIGQUIT, &saved_sigquit, sighandle);
+    set_signal(SIGTERM, &saved_sigterm, sighandle);
+    set_signal(SIGSYS,  &saved_sigsys,  sigsys);
+    (void)siginterrupt(SIGINT,  0);
+    (void)siginterrupt(SIGQUIT, 0);
+    (void)siginterrupt(SIGTERM, 0);
+    (void)siginterrupt(SIGSYS,  0);
+
     for (c = cons; c; c = c->next) {
        int iflag, oflag;
 #ifdef _PC_MAX_CANON
@@ -351,22 +369,34 @@
 #endif
            c->max_canon = _POSIX_MAX_CANON;
        c->tlock = 0;
-       if (tcgetattr(cons->fd, &cons->otio) < 0)
+       if (tcgetattr(c->fd, &c->otio) < 0)
            continue;
        c->tlock = 1;
-#if 1
+
        iflag = c->otio.c_iflag;
        oflag = c->otio.c_oflag;
 
-       c->otio.c_iflag |= (ICRNL | IGNBRK);
-       c->otio.c_iflag &= ~(INLCR | IGNCR | BRKINT);
-       c->otio.c_oflag |= (ONLCR | OPOST);
-       c->otio.c_oflag &= ~(OCRNL | ONLRET);
-       (void)tcsetattr(cons->fd, TCSADRAIN, &cons->otio);
+       if (ioctl(c->fd, TIOCMGET, &flags) == 0) {
+               ispeed = cfgetispeed(&c->otio);
+               ospeed = cfgetospeed(&c->otio);
+
+               c->otio.c_iflag = c->otio.c_lflag = 0;
+               c->otio.c_oflag = (ONLCR | OPOST);
+               c->otio.c_cflag = CREAD | CS8 | HUPCL | (c->otio.c_cflag & 
CLOCAL);
+
+               cfsetispeed(&c->otio, ispeed);
+               cfsetospeed(&c->otio, ospeed);
+       } else {
+               c->otio.c_iflag |= (ICRNL | IGNBRK);
+               c->otio.c_iflag &= ~(INLCR | IGNCR | BRKINT);
+               c->otio.c_oflag |= (ONLCR | OPOST);
+               c->otio.c_oflag &= ~(OCRNL | ONLRET);
+       }
+       (void)tcsetattr(c->fd, TCSADRAIN, &c->otio);
 
        c->otio.c_iflag = iflag;
        c->otio.c_oflag = oflag;
-#endif
+
        if ((c->otio.c_lflag & ICANON) == 0) {
            c->otio.c_lflag |= ICANON | IEXTEN | ISIG | ECHO|ECHOE|ECHOK|ECHOKE;
            c->otio.c_oflag |= OPOST;
@@ -384,20 +414,6 @@
        }
     }
 
-    nsigsys = 0;
-    set_signal(SIGTTIN, &saved_sigttin, SIG_IGN);
-    set_signal(SIGTTOU, &saved_sigttou, SIG_IGN);
-    set_signal(SIGTSTP, &saved_sigtstp, SIG_IGN);
-    set_signal(SIGHUP,  &saved_sighup,  SIG_IGN);
-    set_signal(SIGINT,  &saved_sigint,  sighandle);
-    set_signal(SIGQUIT, &saved_sigquit, sighandle);
-    set_signal(SIGTERM, &saved_sigterm, sighandle);
-    set_signal(SIGSYS,  &saved_sigsys,  sigsys);
-    (void)siginterrupt(SIGINT,  0);
-    (void)siginterrupt(SIGQUIT, 0);
-    (void)siginterrupt(SIGTERM, 0);
-    (void)siginterrupt(SIGSYS,  0);
-
     atexit(exit_handler);      /* Register main exit handler */
 
     switch ((pid = fork())) {
@@ -427,7 +443,7 @@
        }
        fprintf(stdout, "\rBoot logging started on %s(%s) at %.24s\n", tty, 
console, stt);
        fflush(stdout);
-       _exit(0);               /* NEVER rise exit handlers here */
+       _exit(EXIT_SUCCESS);    /* NEVER rise exit handlers here */
     }
 
     atexit(flush_handler);     /* Register flush exit handler */
@@ -436,7 +452,7 @@
     while (!signaled)
        safeIO();
 
-    exit(0);                   /* Raise exit handlers */
+    exit(EXIT_SUCCESS);                /* Raise exit handlers */
 }
 
 static void flush_handler (void)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/showconsole-1.14/blogger.8 
new/showconsole-1.15/blogger.8
--- old/showconsole-1.14/blogger.8      2001-01-29 20:17:12.000000000 +0100
+++ new/showconsole-1.15/blogger.8      2011-09-01 15:11:40.000000000 +0200
@@ -8,7 +8,6 @@
 .\"
 .TH BLOGGER  8 "Jan 26, 2001" "Version 1.16" "The SuSE boot concept"
 .UC 8
-.OS SuSE Linux
 .SH NAME
 Blogger \- writes messages to a running blogd process
 .SH SYNOPSIS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/showconsole-1.14/isserial.8 
new/showconsole-1.15/isserial.8
--- old/showconsole-1.14/isserial.8     2010-08-24 11:17:06.000000000 +0200
+++ new/showconsole-1.15/isserial.8     2011-09-01 15:11:53.000000000 +0200
@@ -8,7 +8,6 @@
 .\"
 .TH SHOWCONSOLE 8 "Sep 05, 2003" "Version 1.16" "The SuSE boot concept"
 .UC 8
-.OS SuSE Linux
 .SH NAME
 Isserial \- determines if the underlying tty of stdin is a serial line
 .br
@@ -32,7 +31,7 @@
 if
 .B stdin
 is a serial line otherwise not.
-\."
+.\"
 .SH FILES
 .TP
 .I /dev/console
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/showconsole-1.14/libblogger.c 
new/showconsole-1.15/libblogger.c
--- old/showconsole-1.14/libblogger.c   2010-10-21 11:57:05.000000000 +0200
+++ new/showconsole-1.15/libblogger.c   2011-08-01 16:32:47.000000000 +0200
@@ -15,6 +15,7 @@
 #include <errno.h>
 #include <fcntl.h>
 #include <paths.h>
+#include <signal.h>
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -40,9 +41,58 @@
 #define ESNS   "skipped"       /* Skipped */
 #define ESNU   "unused"        /* Unused  */
 
+static struct sigaction saved_sigpipe;
+static volatile sig_atomic_t broken = 0;
 static int fdfifo = -1;
 static char * fifo_name = _PATH_BLOG_FIFO;
 
+static void sigpipe(int sig __attribute__((__unused__)))
+{
+    broken++;
+}
+
+static void set_signal(int sig, struct sigaction *old, sighandler_t handler)
+{
+    do {
+       if (sigaction(sig, NULL, old) == 0)
+           break;
+    } while (errno == EINTR);
+
+    if (old && old->sa_handler != handler) {
+       struct sigaction new;
+       sigset_t sigset;
+
+       new.sa_handler = handler;
+       sigemptyset(&new.sa_mask);
+       new.sa_flags = SA_RESTART;
+       do {
+           if (sigaction(sig, &new, NULL) == 0)
+               break;
+       } while (errno == EINTR);
+
+       sigemptyset(&sigset);
+       sigaddset(&sigset, sig);
+       sigprocmask(SIG_UNBLOCK, &sigset, NULL);
+    }
+}
+
+static void reset_signal(int sig, struct sigaction *old)
+{
+    struct sigaction cur;
+
+    do {
+       if (sigaction(sig, NULL, &cur) == 0)
+           break;
+    } while (errno == EINTR);
+
+    if (old && old->sa_handler == cur.sa_handler) {
+       do {
+           if (sigaction(sig, old, NULL) == 0)
+               break;
+       } while (errno == EINTR);
+    }
+}
+
 static int bootlog_init(const int lvl __attribute__((__unused__)))
 {
     int ret = -1;
@@ -57,6 +107,8 @@
     if ((fdfifo = open(fifo_name, O_WRONLY|O_NONBLOCK|O_NOCTTY|O_CLOEXEC)) < 0)
        goto out;
 
+    set_signal(SIGPIPE, &saved_sigpipe, sigpipe);
+
     ret = 0;
 out:
     return ret;
@@ -66,6 +118,9 @@
 {
     if (fdfifo < 0)
        goto out;
+
+    reset_signal(SIGPIPE,  &saved_sigpipe);
+
     (void)close(fdfifo);
 out:
     return;
@@ -77,6 +132,7 @@
     int ret = -1;
     char * head = ESNN;
     char buf[4096];
+    sigset_t blockpipe, oldpipe;
 
     if (fdfifo < 0 && bootlog_init(lvl) < 0)
        goto out;
@@ -106,6 +162,9 @@
            break;
     }
 
+    sigprocmask(SIG_BLOCK, &blockpipe, &oldpipe);
+    if (broken)
+       goto pipe;
     if (head) {
        const struct tm *local;
        struct timeval now;
@@ -124,6 +183,8 @@
     vsnprintf(buf, sizeof(buf), fmt, ap);
     va_end(ap);
     write(fdfifo, buf, strlen(buf));
+pipe:
+    sigprocmask(SIG_SETMASK, &oldpipe, NULL);
 out:
     return ret;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/showconsole-1.14/libconsole.c 
new/showconsole-1.15/libconsole.c
--- old/showconsole-1.14/libconsole.c   2011-03-25 18:50:59.000000000 +0100
+++ new/showconsole-1.15/libconsole.c   2011-08-01 16:00:51.000000000 +0200
@@ -59,6 +59,27 @@
 #include "listing.h"
 
 /*
+ * Used to ignore some signals during pselect(2)
+ */
+static sigset_t omask;
+
+/*
+ * Remember if we're signaled.
+ */
+volatile sig_atomic_t signaled;
+
+/*
+ * Error raised in exit handler should not call exit(3) its self
+ */
+#define lerror(fmt, args...)       \
+    do {                           \
+       if (signaled) {             \
+           warn(fmt, args);        \
+               goto out;           \
+       } error(fmt, args);         \
+    } while (0)
+
+/*
  * push and popd direcotry changes
  */
 
@@ -182,7 +203,9 @@
        if (p < 0) {
            if (errno == EPIPE) {
                warn("error on writing to fd %d: %m\n", fd);
-               exit (0);
+               if (signaled)
+                   goto out;
+               exit(EXIT_SUCCESS);
            }
            if (errno == EINTR) {
                errno = 0;
@@ -192,8 +215,9 @@
                int ret;
                fd_set check;
 
-               if (repeated++ > 1000)
-                   error("repeated error on writing to fd %d: %m\n", fd);
+               if (repeated++ > 1000) {
+                   lerror("repeated error on writing to fd %d: %m\n", fd);
+               }
 
                FD_ZERO (&check);
                FD_SET (fd, &check);
@@ -201,30 +225,33 @@
                /* Avoid high load: wait upto two seconds if system is not 
ready */
                errno = 0;
                do {
-                   struct timeval two = {2, 0};
-                   ret = select(fd + 1, (fd_set*)0, &check, (fd_set*)0, &two);
+                   struct timespec two = {2, 0};
+                   ret = pselect(fd + 1, (fd_set*)0, &check, (fd_set*)0, &two, 
&omask);
 
                } while ((ret < 0) && (errno == EINTR));
 
-               if (ret < 0)
-                   error("can not write to fd %d: %m\n", fd);
+               if (ret < 0) {
+                   lerror("can not write to fd %d: %m\n", fd);
+               }
 
                errno = 0;
                continue;
            }
            if (errno == EIO) {
-               if ((eiocount++ > 10) || !vc_reconnect)
-                   error("can not write to fd %d: %m\n", fd);
+               if ((eiocount++ > 10) || !vc_reconnect) {
+                   lerror("can not write to fd %d: %m\n", fd);
+               }
                (*vc_reconnect)(fd);
                errno = 0;
                continue;
            }
-           error("can not write to fd %d: %m\n", fd);
+           lerror("can not write to fd %d: %m\n", fd);
        }
        repeated = 0;
        ptr += p;
        s -= p;
     }
+out:
     errno = saveerr;
 }
 
@@ -244,14 +271,14 @@
     t=0;
     if ((ioctl(fd, FIONREAD, &t) < 0) || (t == 0)) {
        fd_set check;
-       struct timeval zero = {0, 0};
+       struct timespec zero = {0, 0};
 
        do {
            FD_ZERO (&check);
            FD_SET (fd, &check);
 
            /* Avoid deadlock: do not read if nothing is in there */
-           if (select(fd + 1, &check, (fd_set*)0, (fd_set*)0, &zero) <= 0)
+           if (pselect(fd + 1, &check, (fd_set*)0, (fd_set*)0, &zero, &omask) 
<= 0)
                break;
 
            r = read (fd, ptr, s);
@@ -260,11 +287,11 @@
 
        /* Do not exit on a broken FIFO */
        if (r < 0 && errno != EPIPE) {
-           if (noerr)
+           if (noerr || signaled)
                goto out;
            if (fd == 0 && errno == EIO)
                warn("\e[31m\e[1msystem console stolen at line %d!\e[m\n", 
__LINE__);
-           error("Can not read from fd %d: %m\n", fd);
+           lerror("Can not read from fd %d: %m\n", fd);
        }
 
        goto out;
@@ -277,17 +304,18 @@
     while (t > 0) {
        ssize_t p = read (fd, ptr, t);
        if (p < 0) {
-           if (repeated++ > 1000)
-               error("Repeated error on reading from fd %d: %m\n", fd);
+           if (repeated++ > 1000) {
+               lerror("Repeated error on reading from fd %d: %m\n", fd);
+           }
            if (errno == EINTR || errno == EAGAIN) {
                errno = 0;
                continue;
            }
-           if (noerr)
+           if (noerr || signaled)
                goto out;
            if (fd == 0 && errno == EIO)
                warn("\e[31m\e[1msystem console stolen at line %d!\e[m\n", 
__LINE__);
-           error("Can not read from fd %d: %m\n", fd);
+           lerror("Can not read from fd %d: %m\n", fd);
        }
        repeated = 0;
        ptr += p;
@@ -302,7 +330,7 @@
 /*
  * The stdio file pointer for our log file
  */
-struct console *restrict cons;
+struct console *cons;
 static FILE * flog = NULL;
 static int fdread  = -1;
 static int fdfifo  = -1;
@@ -310,7 +338,7 @@
 /*
  * Signal control for writing on log file
  */
-volatile sig_atomic_t nsigsys = 0;
+volatile sig_atomic_t nsigsys;
 static volatile sig_atomic_t nsigio = -1;
 static sigset_t save_oldset;
 
@@ -402,7 +430,7 @@
 static inline void writelog(void)
 {
     if (!flog)
-       goto xout;
+       return;
     clearerr(flog);
     lock(&llock);
     while (avail > 0) {
@@ -411,8 +439,8 @@
        if (avail > TRANS_BUFFER_SIZE)
            ret = TRANS_BUFFER_SIZE;
 
-       if (!flog)
-           goto xout;;
+       if (!flog || nsigsys)
+           break;
        ret = fwrite(head, sizeof(unsigned char), ret, flog);
        if (!ret && ferror(flog))
            break;
@@ -429,12 +457,10 @@
        }
     }
     unlock(&llock);
-    if (!flog)
-       goto xout;;
-    fflush(flog);
-    fdatasync(fileno(flog));
-xout:
-    return;
+    if (flog) {
+       fflush(flog);
+       fdatasync(fileno(flog));
+    }
 }
 
 static inline void flushlog(void)
@@ -771,6 +797,12 @@
     pgroup  = pgrp;
     fdread  = in;
 
+    (void)sigfillset(&omask);
+    (void)sigdelset(&omask, SIGQUIT);
+    (void)sigdelset(&omask, SIGTERM);
+    (void)sigdelset(&omask, SIGSYS);
+    (void)sigdelset(&omask, SIGIO);
+
     if (fifo_name && fdfifo < 0) {
        struct stat st;
        errno = 0;
@@ -789,7 +821,7 @@
 /*
  * Seek for input, more input ...
  */
-static void more_input (struct timeval *timeout, const int noerr)
+static void more_input (struct timespec *timeout, const int noerr)
 {
     fd_set watch;
     int nfds, wfds;
@@ -803,19 +835,16 @@
     } else
        wfds = fdread + 1;
 
-    nfds = select(wfds, &watch, (fd_set*)0, (fd_set*)0, timeout);
+    nfds = pselect(wfds, &watch, (fd_set*)0, (fd_set*)0, timeout, &omask);
 
-    if (nfds < 0) {
+    if (nfds <= 0) {
        timeout->tv_sec  = 0;
-       timeout->tv_usec = 0;
-       if (errno != EINTR)
-           error ("select(): %m\n");
+       timeout->tv_nsec = 0;
+       if (nfds < 0 && errno != EINTR && !signaled)
+           error ("pselect(): %m\n");
        goto nothing;
     }
 
-    if (!nfds)
-       goto nothing;
-
     if (FD_ISSET(fdread, &watch)) {
        const ssize_t cnt = safein(fdread, (char*)trans, sizeof(trans), noerr);
        static struct winsize owz;
@@ -863,7 +892,7 @@
  */
 void safeIO (void)
 {
-    struct timeval timeout;
+    struct timespec timeout;
     static int log = -1;
 
     if (!nsigio) /* signal handler set but no signal recieved */
@@ -898,8 +927,12 @@
            (*vr_access)();
            vr_access = NULL;
        }
-       if ((flog = fdopen (log, "a")) == NULL)
-               error("Can not open %s: %m\n", BOOT_LOGFILE);
+       lock(&llock);
+       if ((flog = fdopen (log, "a")) == NULL) {
+           unlock(&llock);
+           error("Can not open %s: %m\n", BOOT_LOGFILE);
+       }
+       unlock(&llock);
 
        nsigio = SIGIO; /* We do not need a signal handler */
        (void)signal(SIGIO, SIG_IGN);
@@ -927,7 +960,7 @@
     }
 
     timeout.tv_sec  = 5;
-    timeout.tv_usec = 0;
+    timeout.tv_nsec = 0;
     more_input(&timeout, 0);
 
     if (flog && !running) {
@@ -958,7 +991,7 @@
  */
 void closeIO(void)
 {
-    struct timeval timeout;
+    struct timespec timeout;
     struct console * c;
     int n = 240;
 
@@ -983,12 +1016,12 @@
        n--;
 
        timeout.tv_sec  = 0;
-       timeout.tv_usec = 25*1000;
+       timeout.tv_nsec = 25*1000*1000;
 
        more_input(&timeout, 1);
        (void)tcdrain(fdread);
 
-    } while (timeout.tv_sec || timeout.tv_usec);
+    } while (timeout.tv_sec || timeout.tv_nsec);
 
     if (running) {
        lock(&ljoin);
@@ -998,20 +1031,16 @@
        pthread_cancel(lthread);
     }
 
-    if (!flog)
-       goto xout;
-
-    writelog();
-
-    if (!nl)
-       fputc('\n', flog);
-
-    if (!flog)
-       goto xout;
-
-    (void)fclose(flog);
+    if (flog) {
+       writelog();
+       if (!nl)
+           fputc('\n', flog);
+       (void)fclose(flog);
+    }
+    lock(&llock);
     flog = NULL;
-xout:
+    unlock(&llock);
+
     if (fdfifo >= 0) {
        close(fdfifo);
        fdfifo = -1;
@@ -1101,7 +1130,7 @@
 
                printf("|%u|%u|", tty, ttypgrp);  /* stdout to pipe synchronize 
... */
 
-               exit(0);
+               exit(EXIT_SUCCESS);
            } break;
        case -1:
            error("can not execute: %m\n");
@@ -1463,6 +1492,10 @@
        return;
     }
     tail->next = newc;
+    tail->tlock = 0;
+    tail->max_canon = _POSIX_MAX_CANON;
+    memset(&tail->ltio, 0, sizeof(tail->ltio));
+    memset(&tail->otio, 0, sizeof(tail->otio));
     tail = tail->next;
 
     if ((flags = fcntl(newc->fd, F_GETFL)) < 0)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/showconsole-1.14/libconsole.h 
new/showconsole-1.15/libconsole.h
--- old/showconsole-1.14/libconsole.h   2011-03-25 09:37:16.000000000 +0100
+++ new/showconsole-1.15/libconsole.h   2011-03-31 16:47:22.000000000 +0200
@@ -39,7 +39,7 @@
     int fd, tlock;
     ssize_t max_canon;
     struct termios ltio, otio;
-    struct console *restrict next;
+    struct console * next;
 };
 extern void error (const char *fmt, ...) attribute((__noreturn__, 
__format__(__printf__, 1, 2)));
 extern void warn  (const char *fmt, ...) attribute((__format__(__printf__, 1, 
2)));
@@ -50,6 +50,6 @@
 extern void prepareIO(void (*rfunc)(int), void (*pfunc)(void), const pid_t, 
const int);
 extern void safeIO (void);
 extern void closeIO(void);
-extern struct console *restrict cons;
+extern struct console *cons;
 #define alignof(type)          ((sizeof(type)+(sizeof(void*)-1)) & 
~(sizeof(void*)-1))
 #define strsize(string)                ((strlen(string)+1)*sizeof(char))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/showconsole-1.14/showconsole-1.14.lsm 
new/showconsole-1.15/showconsole-1.14.lsm
--- old/showconsole-1.14/showconsole-1.14.lsm   2011-03-25 18:55:24.000000000 
+0100
+++ new/showconsole-1.15/showconsole-1.14.lsm   1970-01-01 01:00:00.000000000 
+0100
@@ -1,15 +0,0 @@
-Begin3
-Title:         console tools for boot scripts
-Version:       1.14
-Entered-date:  25MAR11
-Description:   Used for fetch the real device in boot scripts
-               running on /dev/console.
-Keywords:      boot control
-Author:                Werner Fink <wer...@suse.de>
-Maintained-by: Werner Fink <wer...@suse.de>
-Primary-site:  sunsite.unc.edu /pub/Linux/system/daemons/init
-               @UNKNOWN showconsole-1.14.tar.gz
-Alternate-site:        ftp.suse.com /pub/projects/init
-Platforms:     Linux with System VR2 or higher boot scheme
-Copying-policy:        GPL
-End
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/showconsole-1.14/showconsole-1.15.lsm 
new/showconsole-1.15/showconsole-1.15.lsm
--- old/showconsole-1.14/showconsole-1.15.lsm   1970-01-01 01:00:00.000000000 
+0100
+++ new/showconsole-1.15/showconsole-1.15.lsm   2011-09-01 15:13:48.000000000 
+0200
@@ -0,0 +1,15 @@
+Begin3
+Title:         console tools for boot scripts
+Version:       1.15
+Entered-date:  01SEP11
+Description:   Used for fetch the real device in boot scripts
+               running on /dev/console.
+Keywords:      boot control
+Author:                Werner Fink <wer...@suse.de>
+Maintained-by: Werner Fink <wer...@suse.de>
+Primary-site:  sunsite.unc.edu /pub/Linux/system/daemons/init
+               @UNKNOWN showconsole-1.15.tar.gz
+Alternate-site:        ftp.suse.com /pub/projects/init
+Platforms:     Linux with System VR2 or higher boot scheme
+Copying-policy:        GPL
+End
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/showconsole-1.14/showconsole.8 
new/showconsole-1.15/showconsole.8
--- old/showconsole-1.14/showconsole.8  2010-11-09 17:00:14.000000000 +0100
+++ new/showconsole-1.15/showconsole.8  2011-04-01 15:18:14.000000000 +0200
@@ -41,7 +41,7 @@
 the
 .B setconsole
 undo any redirection.
-\."
+.\"
 .SH OPTIONS
 .TP
 .B \-n
@@ -50,7 +50,7 @@
 kernel for the major and minor device numbers of a not
 existing device file in
 .IR /dev .
-\."
+.\"
 .SH BUGS
 .B showconsole
 needs a mounted


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



Remember to have fun...

-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to