+++ /dev/null
-Purpose: Make sure the utf-8 flag is not cleared from the tty.
-Authour: Samuel Thibault
-Fixes: #547073
-Status: applied upstream
-
---- a/src/init.c
-+++ b/src/init.c
-@@ -786,10 +786,11 @@ void console_stty(void)
- /*
- * Set pre and post processing
- */
-- tty.c_iflag = IGNPAR|ICRNL|IXON|IXANY;
-+ tty.c_iflag = IGNPAR|ICRNL|IXON|IXANY
- #ifdef IUTF8 /* Not defined on FreeBSD */
-- tty.c_iflag |= IUTF8;
-+ | (tty.c_iflag & IUTF8)
- #endif /* IUTF8 */
-+ ;
- tty.c_oflag = OPOST|ONLCR;
- tty.c_lflag = ISIG|ICANON|ECHO|ECHOCTL|ECHOPRT|ECHOKE;
-
+++ /dev/null
-Purpose: Try to fix the logic used to enable SELinux
-Authour: Petter Reinholdtsen
-Fixes: #580272
-Status: applied upstream
-
---- a/src/init.c
-+++ b/src/init.c
-@@ -54,10 +54,6 @@
-
- #ifdef WITH_SELINUX
- # include <selinux/selinux.h>
--# include <sys/mount.h>
--# ifndef MNT_DETACH /* present in glibc 2.10, missing in 2.7 */
--# define MNT_DETACH 2
--# endif
- #endif
-
- #ifdef __i386__
-@@ -2872,11 +2868,9 @@ int main(int argc, char **argv)
-
- #ifdef WITH_SELINUX
- if (getenv("SELINUX_INIT") == NULL) {
-- const int rc = mount("proc", "/proc", "proc", 0, 0);
-- if (is_selinux_enabled() > 0) {
-- putenv("SELINUX_INIT=YES");
-- if (rc == 0) umount2("/proc", MNT_DETACH);
-+ if (is_selinux_enabled() != 1) {
- if (selinux_init_load_policy(&enforce) == 0) {
-+ putenv("SELINUX_INIT=YES");
- execv(myname, argv);
- } else {
- if (enforce > 0) {
-@@ -2887,7 +2881,6 @@ int main(int argc, char **argv)
- }
- }
- }
-- if (rc == 0) umount2("/proc", MNT_DETACH);
- }
- #endif
- /* Start booting. */
+++ /dev/null
-Description: Adapt TIOCCONS call to kfreebsd.
- Isolate Linux-only forms of ioctl call with TIOCCONS. The BSD form of
- this needs a pointer to an integer, and its fails with a NULL pointer.
-Author: Mats Erik Andersson <debian@gisladisker.se>
-Last-Update: 2012-04-03
-Fixes: #576443
-Status: applied upstream
-
---- sysvinit-2.88dsf.debian/src/bootlogd.c
-+++ sysvinit-2.88dsf/src/bootlogd.c
-@@ -482,6 +482,9 @@
- int realfd;
- int n, m, i;
- int todo;
-+#ifndef __linux__ /* BSD-style ioctl needs an argument. */
-+ int on = 1;
-+#endif
-
- fp = NULL;
- logfile = LOGFILE;
-@@ -554,15 +557,20 @@
- return 1;
- }
-
-+#ifdef __linux__
- (void)ioctl(0, TIOCCONS, NULL);
--#if 1
- /* Work around bug in 2.1/2.2 kernels. Fixed in 2.2.13 and 2.3.18 */
- if ((n = open("/dev/tty0", O_RDWR)) >= 0) {
- (void)ioctl(n, TIOCCONS, NULL);
- close(n);
- }
- #endif
-- if (ioctl(pts, TIOCCONS, NULL) < 0) {
-+#ifdef __linux__
-+ if (ioctl(pts, TIOCCONS, NULL) < 0)
-+#else /* BSD usage of ioctl TIOCCONS. */
-+ if (ioctl(pts, TIOCCONS, &on) < 0)
-+#endif
-+ {
- fprintf(stderr, "bootlogd: ioctl(%s, TIOCCONS): %s\n",
- buf, strerror(errno));
- return 1;
+++ /dev/null
-Description: Allow multiple console output
- When booting a kernel with multiple serial console support, or multuiple
- console arguments ala "console=tty1 console=ttyS0,9600" the kernel will output
- messages to all consoles, init however will not. It will only send output to,
- and accept input from, the last of the consoles.
- .
- This patch fixes it.
-Author: Martin Buck <m@rtin-buck.de>
-Origin: other, https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=181756
-Bug-Debian: https://bugs.debian.org/181756
-Forwarded: no
-Last-Update: 2014-07-20
-
-Index: sysvinit-2.88dsf/src/bootlogd.c
-===================================================================
---- sysvinit-2.88dsf.orig/src/bootlogd.c 2010-03-23 15:37:01.000000000 +0100
-+++ sysvinit-2.88dsf/src/bootlogd.c 2013-07-15 09:56:55.953975300 +0200
-@@ -57,6 +57,7 @@
- char *Version = "@(#) bootlogd 2.86 03-Jun-2004 miquels@cistron.nl";
-
- #define LOGFILE "/var/log/boot"
-+#define MAX_CONSOLES 16
-
- char ringbuf[32768];
- char *endptr = ringbuf + sizeof(ringbuf);
-@@ -73,6 +74,11 @@
- int pos;
- } line;
-
-+struct real_cons {
-+ char name[1024];
-+ int fd;
-+};
-+
- /*
- * Console devices as listed on the kernel command line and
- * the mapping to actual devices in /dev
-@@ -235,10 +241,10 @@
- }
-
- /*
-- * Find out the _real_ console. Assume that stdin is connected to
-+ * Find out the _real_ console(s). Assume that stdin is connected to
- * the console device (/dev/console).
- */
--int consolename(char *res, int rlen)
-+int consolenames(struct real_cons *cons, int max_consoles)
- {
- #ifdef TIOCGDEV
- unsigned int kdev;
-@@ -247,34 +253,9 @@
- char buf[256];
- char *p;
- int didmount = 0;
-- int n, r;
-+ int n;
- int fd;
--
-- fstat(0, &st);
-- if (major(st.st_rdev) != 5 || minor(st.st_rdev) != 1) {
-- /*
-- * Old kernel, can find real device easily.
-- */
-- int r = findtty(res, "/dev", rlen, st.st_rdev);
-- if (0 != r)
-- fprintf(stderr, "bootlogd: cannot find console device "
-- "%d:%d under /dev\n", major(st.st_rdev), minor(st.st_rdev));
-- return r;
-- }
--
--#ifdef TIOCGDEV
--# ifndef ENOIOCTLCMD
--# define ENOIOCTLCMD 515
--# endif
-- if (ioctl(0, TIOCGDEV, &kdev) == 0) {
-- int r = findtty(res, "/dev", rlen, (dev_t)kdev);
-- if (0 != r)
-- fprintf(stderr, "bootlogd: cannot find console device "
-- "%d:%d under /dev\n", major(kdev), minor(kdev));
-- return r;
-- }
-- if (errno != ENOIOCTLCMD) return -1;
--#endif
-+ int considx, num_consoles = 0;
-
- #ifdef __linux__
- /*
-@@ -283,7 +264,7 @@
- stat("/", &st);
- if (stat("/proc", &st2) < 0) {
- perror("bootlogd: /proc");
-- return -1;
-+ return 0;
- }
- if (st.st_dev == st2.st_dev) {
- if (mount("proc", "/proc", "proc", 0, NULL) < 0) {
-@@ -293,21 +274,21 @@
- didmount = 1;
- }
-
-- n = 0;
-- r = -1;
-+ n = -1;
- if ((fd = open("/proc/cmdline", O_RDONLY)) < 0) {
- perror("bootlogd: /proc/cmdline");
- } else {
- buf[0] = 0;
-- if ((n = read(fd, buf, sizeof(buf) - 1)) >= 0)
-- r = 0;
-- else
-+ if ((n = read(fd, buf, sizeof(buf) - 1)) < 0)
- perror("bootlogd: /proc/cmdline");
- close(fd);
- }
- if (didmount) umount("/proc");
-+
-+
-+ if (n < 0) return 0;
-+
-
-- if (r < 0) return r;
-
- /*
- * OK, so find console= in /proc/cmdline.
-@@ -315,21 +296,32 @@
- */
- p = buf + n;
- *p-- = 0;
-- r = -1;
- while (p >= buf) {
- if (*p == ' ' || *p == '\t' || *p == '\r' || *p == '\n') {
- *p-- = 0;
- continue;
- }
- if (strncmp(p, "console=", 8) == 0 &&
-- isconsole(p + 8, res, rlen)) {
-- r = 0;
-- break;
-+ isconsole(p + 8, cons[num_consoles].name, sizeof(cons[num_consoles].name))) {
-+ /*
-+ * Suppress duplicates
-+ */
-+ for (considx = 0; considx < num_consoles; considx++) {
-+ if (!strcmp(cons[num_consoles].name, cons[considx].name)) {
-+ goto dontuse;
-+ }
-+ }
-+
-+ num_consoles++;
-+ if (num_consoles >= max_consoles) {
-+ break;
-+ }
- }
-+dontuse:
- p--;
- }
-
-- if (r == 0) return r;
-+ if (num_consoles > 0) return num_consoles;
- #endif
-
- /*
-@@ -337,12 +329,12 @@
- * guess the default console.
- */
- for (n = 0; defcons[n]; n++)
-- if (isconsole(defcons[n], res, rlen))
-- return 0;
-+ if (isconsole(defcons[n], cons[0].name, sizeof(cons[0].name)))
-+ return 1;
-
- fprintf(stderr, "bootlogd: cannot deduce real console device\n");
-
-- return -1;
-+ return 0;
- }
-
-
-@@ -472,7 +464,6 @@
- struct timeval tv;
- fd_set fds;
- char buf[1024];
-- char realcons[1024];
- char *p;
- char *logfile;
- char *pidfile;
-@@ -485,6 +476,9 @@
- #ifndef __linux__ /* BSD-style ioctl needs an argument. */
- int on = 1;
- #endif
-+ int considx;
-+ struct real_cons cons[MAX_CONSOLES];
-+ int num_consoles, consoles_left;
-
- fp = NULL;
- logfile = LOGFILE;
-@@ -531,18 +525,22 @@
- /*
- * Open console device directly.
- */
-- if (consolename(realcons, sizeof(realcons)) < 0)
-- return 1;
--
-- if (strcmp(realcons, "/dev/tty0") == 0)
-- strcpy(realcons, "/dev/tty1");
-- if (strcmp(realcons, "/dev/vc/0") == 0)
-- strcpy(realcons, "/dev/vc/1");
--
-- if ((realfd = open_nb(realcons)) < 0) {
-- fprintf(stderr, "bootlogd: %s: %s\n", buf, strerror(errno));
-+ if ((num_consoles = consolenames(cons, MAX_CONSOLES)) <= 0)
- return 1;
-+ consoles_left = num_consoles;
-+ for (considx = 0; considx < num_consoles; considx++) {
-+ if (strcmp(cons[considx].name, "/dev/tty0") == 0)
-+ strcpy(cons[considx].name, "/dev/tty1");
-+ if (strcmp(cons[considx].name, "/dev/vc/0") == 0)
-+ strcpy(cons[considx].name, "/dev/vc/1");
-+
-+ if ((cons[considx].fd = open_nb(cons[considx].name)) < 0) {
-+ fprintf(stderr, "bootlogd: %s: %s\n", cons[considx].name, strerror(errno));
-+ consoles_left--;
-+ }
- }
-+ if (!consoles_left)
-+ return 1;
-
- /*
- * Grab a pty, and redirect console messages to it.
-@@ -626,26 +624,34 @@
- if ((n = read(ptm, inptr, endptr - inptr)) >= 0) {
- /*
- * Write data (in chunks if needed)
-- * to the real output device.
-+ * to the real output devices.
- */
-- m = n;
-- p = inptr;
-- while (m > 0) {
-- i = write(realfd, p, m);
-- if (i >= 0) {
-- m -= i;
-- p += i;
-- continue;
-- }
-- /*
-- * Handle EIO (somebody hung
-- * up our filedescriptor)
-- */
-- realfd = write_err(pts, realfd,
-- realcons, errno);
-- if (realfd >= 0) continue;
-- got_signal = 1; /* Not really */
-- break;
-+ for (considx = 0; considx < num_consoles; considx++) {
-+ if (cons[considx].fd < 0) continue;
-+ m = n;
-+ p = inptr;
-+ while (m > 0) {
-+ i = write(cons[considx].fd, p, m);
-+ if (i >= 0) {
-+ m -= i;
-+ p += i;
-+ continue;
-+ }
-+ /*
-+ * Handle EIO (somebody hung
-+ * up our filedescriptor)
-+ */
-+ cons[considx].fd = write_err(pts,
-+ cons[considx].fd,
-+ cons[considx].name, errno);
-+ if (cons[considx].fd >= 0) continue;
-+ /*
-+ * If this was the last console,
-+ * generate a fake signal
-+ */
-+ if (--consoles_left <= 0) got_signal = 1;
-+ break;
-+ }
- }
-
- /*
-@@ -691,7 +697,9 @@
-
- close(pts);
- close(ptm);
-- close(realfd);
-+ for (considx = 0; considx < num_consoles; considx++) {
-+ close(cons[considx].fd);
-+ }
-
- return 0;
- }
Summary(tr.UTF-8): System V başlatma programı
Summary(uk.UTF-8): Програми, що керують базовими системними процесами
Name: SysVinit
-Version: 2.88
-Release: 19
+Version: 2.90
+Release: 0.1
License: GPL v2+
Group: Base
-Source0: http://download.savannah.gnu.org/releases/sysvinit/sysvinit-%{version}dsf.tar.bz2
-# Source0-md5: 6eda8a97b86e0a6f59dabbf25202aa6f
+Source0: http://download.savannah.gnu.org/releases/sysvinit/sysvinit-%{version}.tar.xz
+# Source0-md5: 7b6a16bde3da494b6aac7283b79c81de
Source1: sysvinit.logrotate
Source2: http://www.mif.pg.gda.pl/homepages/ankry/man-PLD/sysvinit-non-english-man-pages.tar.bz2
-Source3: crypttab.5
# Source2-md5: 9ae8a63a4685368fae19707f95475cca
+Source3: crypttab.5
Patch0: sysvinit-paths.patch
Patch1: sysvinit-bequiet.patch
Patch2: sysvinit-wtmp.patch
Patch3: sysvinit-man.patch
Patch4: sysvinit-halt.patch
Patch5: sysvinit-autofsck.patch
-Patch6: sysvinit-pidof.patch
-Patch7: sysvinit-killall5.patch
+
Patch8: sysvinit-nopowerstates-single.patch
Patch9: sysvinit-lastlog.patch
Patch10: sysvinit-alt-fixes.patch
Patch11: sysvinit-quiet.patch
Patch12: sysvinit-rebootconfirmation.patch
-Patch13: 63_init_keep_utf8_ttyflag.patch
-Patch14: 64_init_selinux_enabled.patch
-Patch15: 95_kfreebsd_bootlogd.patch
-Patch16: 96_allow_multiple_console_output.patch
URL: http://savannah.nongnu.org/projects/sysvinit/
%if %{with selinux}
BuildRequires: libselinux-devel >= 1.28
Ten pakiet zawiera różne narzędzia do zarządzania procesami.
%prep
-%setup -q -n sysvinit-%{version}dsf
+%setup -q -n sysvinit-%{version}
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
-%patch6 -p1
-%patch7 -p1
+
%patch8 -p1
%patch9 -p1
%patch10 -p1
%patch11 -p1
%patch12 -p0
-%patch13 -p1
-%patch14 -p1
-%patch15 -p1
-%patch16 -p1
%build
%{__make} -C src \
cp %{SOURCE3} $RPM_BUILD_ROOT%{_mandir}/man5
# in util-linux
-%{__rm} $RPM_BUILD_ROOT{/bin/mountpoint,%{_mandir}/man1/mountpoint.1*}
%{__rm} $RPM_BUILD_ROOT{/sbin/sulogin,%{_mandir}/man8/sulogin.8*,%{_mandir}/*/man8/sulogin.8*}
%{__rm} $RPM_BUILD_ROOT{/usr/bin/utmpdump,%{_mandir}/man1/utmpdump.1*}
%{__rm} $RPM_BUILD_ROOT{/usr/bin/{last,lastb,mesg},%{_mandir}/man1/{last,lastb,mesg}.1*,%{_mandir}/*/man1/{last,lastb,mesg}.1*}
%files
%defattr(644,root,root,755)
-%doc COPYRIGHT README doc/{Changelog,Propaganda} src/initscript.sample
+%doc COPYRIGHT README doc/{Changelog,Propaganda} doc/initscript.sample
%attr(755,root,root) %{_sbindir}/bootlogd
%attr(755,root,root) %{_sbindir}/halt
%attr(664,root,utmp) %ghost /var/log/wtmp
%{_mandir}/man5/crypttab.5*
+%{_mandir}/man5/initctl.5*
%{_mandir}/man5/inittab.5*
%{_mandir}/man5/initscript.5*
%{_mandir}/man8/bootlogd.8*
+++ /dev/null
-diff -u sysvinit-2.88dsf/src/killall5.c sysvinit-2.88dsf/src/killall5.c
---- sysvinit-2.88dsf/src/killall5.c 2011-12-03 23:12:52.373139250 +0100
-+++ sysvinit-2.88dsf/src/killall5.c 2011-12-03 23:19:21.498025134 +0100
-@@ -496,7 +497,7 @@
- /* Open the status file. */
- snprintf(path, sizeof(path), "%s/stat", d->d_name);
-
-- /* Read SID & statname from it. */
-+ /* Read statname from it. */
- if ((fp = fopen(path, "r")) != NULL) {
- buf[0] = 0;
- fgets(buf, sizeof(buf), fp);
-@@ -509,7 +510,6 @@
- /* Read program name. */
- q = strrchr(buf, ')');
- if (q == NULL) {
-- p->sid = 0;
- nsyslog(LOG_ERR,
- "can't get program name from /proc/%s\n",
- path);
-@@ -517,6 +517,7 @@
- if (p->argv1) free(p->argv1);
- if (p->statname) free(p->statname);
- free(p);
-+ fclose(fp);
- continue;
- }
- s++;
-@@ -531,23 +532,25 @@
-
- /* Get session, startcode, endcode. */
- startcode = endcode = 0;
-- if (sscanf(q, "%*c %*d %*d %d %*d %*d %*u %*u "
-+ if (sscanf(q, "%*c %*d %*d %*d %*d %*d %*u %*u "
- "%*u %*u %*u %*u %*u %*d %*d "
- "%*d %*d %*d %*d %*u %*u %*d "
- "%*u %lu %lu",
-- &p->sid, &startcode, &endcode) != 3) {
-+ &startcode, &endcode) == 2) {
-+ if (startcode == 0 && endcode == 0)
-+ p->kernel = 1;
-+ }
-+ fclose(fp);
-+ p->sid = getsid(pid);
-+ if (p->sid < 0) {
- p->sid = 0;
-- nsyslog(LOG_ERR, "can't read sid from %s\n",
-- path);
-+ nsyslog(LOG_ERR, "can't read sid for pid %d\n", pid);
- if (p->argv0) free(p->argv0);
- if (p->argv1) free(p->argv1);
- if (p->statname) free(p->statname);
- free(p);
- continue;
- }
-- if (startcode == 0 && endcode == 0)
-- p->kernel = 1;
-- fclose(fp);
- } else {
- /* Process disappeared.. */
- if (p->argv0) free(p->argv0);
--- sysvinit-2.88dsf/src/Makefile.wiget 2010-04-11 11:30:27.000000000 +0200
+++ sysvinit-2.88dsf/src/Makefile 2011-12-03 23:38:27.970109228 +0100
-@@ -15,13 +15,13 @@ STATIC =
+@@ -23,13 +23,13 @@ MNTPOINT=
# For some known distributions we do not build all programs, otherwise we do.
BIN =
USRBIN = last mesg
MAN1 = last.1 lastb.1 mesg.1
- MAN5 = initscript.5 inittab.5
+ MAN5 = initscript.5 inittab.5 initctl.5
MAN8 = halt.8 init.8 killall5.8 pidof.8 poweroff.8 reboot.8 runlevel.8
-MAN8 += shutdown.8 telinit.8 fstab-decode.8
+MAN8 += shutdown.8 telinit.8 fstab-decode.8 lastlog.8
ifeq ($(DISTRO),)
- BIN += mountpoint
-@@ -96,6 +96,9 @@ halt: halt.o ifdown.o hddown.o utmp.o r
-
- last: last.o oldutmp.h
+ SBIN += sulogin bootlogd
+@@ -115,6 +115,9 @@ halt: halt.o ifdown.o hddown.o utmp.o
+ last: LDLIBS += $(STATIC)
+ last: last.o
++lastlog: LDLIBS += $(STATIC)
+lastlog: lastlog.o
-+ $(CC) $(LDFLAGS) -o $@ lastlog.o
+
+ mesg: LDLIBS += $(STATIC)
mesg: mesg.o
- mountpoint: mountpoint.o
--- sysvinit-2.88dsf/src/lastlog.c.wiget 2011-12-03 23:31:01.697380950 +0100
+++ sysvinit-2.88dsf/src/lastlog.c 2011-12-03 23:31:01.697380950 +0100
@@ -0,0 +1,217 @@
all programs that init starts (so that you can set a generic
umask, ulimit eg for ALL processes - see initscript.sample).
- A "sulogin" program added that always asks for the root
---- sysvinit-2.88dsf/src/initscript.sample.wiget 2009-09-10 10:28:49.000000000 +0200
-+++ sysvinit-2.88dsf/src/initscript.sample 2011-12-03 22:25:33.574721688 +0100
+--- sysvinit-2.88dsf/doc/initscript.sample.wiget 2009-09-10 10:28:49.000000000 +0200
++++ sysvinit-2.88dsf/doc/initscript.sample 2011-12-03 22:25:33.574721688 +0100
@@ -1,14 +1,14 @@
#
-# initscript If this script is intalled as /etc/initscript,
+++ /dev/null
---- sysvinit-2.88dsf/src/killall5.c.wiget 2010-03-19 15:10:55.000000000 +0100
-+++ sysvinit-2.88dsf/src/killall5.c 2011-12-03 23:12:52.373139250 +0100
-@@ -66,8 +66,9 @@ char *Version = "@(#)killall5 2.86 31-Ju
-
- /* Info about a process. */
- typedef struct proc {
-+ char *pathname; /* full path to executable */
- char *argv0; /* Name as found out from argv[0] */
-- char *argv0base; /* `basename argv[1]` */
-+ char *argv0base; /* `basename argv[0]` */
- char *argv1; /* Name as found out from argv[1] */
- char *argv1base; /* `basename argv[1]` */
- char *statname; /* the statname without braces */
-@@ -477,6 +478,7 @@ int readproc(int do_stat)
- if (p->argv0) free(p->argv0);
- if (p->argv1) free(p->argv1);
- if (p->statname) free(p->statname);
-+ if (p->pathname) free(p->pathname);
- free(p);
- }
- plist = NULL;
-@@ -616,6 +618,8 @@ int readproc(int do_stat)
- break;
- p->dev = st.st_dev;
- p->ino = st.st_ino;
-+ p->pathname = (char *)xmalloc(PATH_MAX);
-+ readlink(path, p->pathname, PATH_MAX);
- default:
- break;
- }
-@@ -806,6 +810,9 @@ PIDQ_HEAD *pidof(char *prog)
- p->argv0[0] == '-')) {
- ok |= (strcmp(p->statname, s) == 0);
- }
-+
-+ if (prog[0] == '/' && p->pathname && strcmp(prog, p->pathname))
-+ ok = 0;
-
- if (ok) add_pid_to_q(q, p);
- }