Compare commits

...
This repository has been archived on 2026-09-10. You can view files and clone it, but you cannot make any changes to its state, such as pushing and creating new issues, pull requests or comments.

15 commits

Author SHA1 Message Date
Bill Nottingham
5bbe08aad9 Retire upstart - dead upstream 2012-08-06 13:27:57 -04:00
Dennis Gilmore
1b0e47b488 - Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild 2012-07-21 21:00:11 -05:00
Dennis Gilmore
9349eae9b1 - Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild 2012-01-14 01:37:11 -06:00
Petr Lautrbach
eb0ab72cba upstart-1.2-4.fc16 2011-05-26 12:27:22 +02:00
Petr Lautrbach
47b279bc28 remove Obsoletes: upstart-sysvinit and clean spec file 2011-05-26 12:27:01 +02:00
Petr Lautrbach
8c1aa5b5b1 /etc/init.conf, upstart-1.2-3.fc16 2011-05-13 10:54:08 +02:00
Petr Lautrbach
bb1d48a85d upstart-1.2-2.fc16 2011-05-05 12:17:22 +02:00
Petr Lautrbach
8b333c447e move binaries to /lib/upstart, add /lib/upstart to default PATH, handle /run in tmpfiles.d 2011-05-05 12:17:01 +02:00
Petr Lautrbach
96c0c95752 use only spaces in spec file 2011-03-23 09:53:40 +01:00
Petr Lautrbach
96848ab1f5 upstart-1.2-1.fc16 2011-03-23 09:38:13 +01:00
Petr Lautrbach
7538863f6a upstart-1.1-1.fc16, enable .override files 2011-03-21 09:45:59 +01:00
Petr Lautrbach
6daa74388e remove /lib/upstart/init experiment 2011-03-17 18:35:53 +01:00
Petr Lautrbach
310c5468af upstart-1.0-2.fc16 2011-03-15 16:15:10 +01:00
Petr Lautrbach
4bbee5dbc7 move jobs to /lib/upstart/init and make symlinks in /etc/init 2011-03-15 16:14:49 +01:00
Petr Lautrbach
2944a23185 upstart-1.0-1.fc16 2011-03-04 14:55:59 +01:00
13 changed files with 5 additions and 1328 deletions

4
.gitignore vendored
View file

@ -1,3 +1,7 @@
upstart-0.6.6.tar.gz
/initjobs-20101206.tar.gz
/upstart-0.6.7.tar.gz
/upstart-1.0.tar.gz
/upstart-1.1.tar.gz
/upstart-1.2.tar.gz
/initjobs-20110502.tar.gz

1
dead.package Normal file
View file

@ -0,0 +1 @@
This package was retired on 2012-08-06 due to no active maintainers for the package.

View file

@ -1,6 +0,0 @@
# init-system-dbus - tell init process to connect to system dbus server
start on started messagebus
task
exec /bin/kill -USR1 1

View file

@ -1,2 +0,0 @@
37740f81b6d12a53072603fadee451c9 upstart-0.6.7.tar.gz
53aa2098362d482ce4058937b3bfd1fb initjobs-20101206.tar.gz

View file

@ -1,43 +0,0 @@
# tmpfiles - create missing directories in /var/{lock,run} according to
# /etc/tmpfiles.d/
start on stopping rcS
task
script
[ -d /etc/tmpfiles.d ] || exit 0
SELINUX_RESTORE=
# Check SELinux status
SELINUX_STATE=
if [ -e "/selinux/enforce" ] && [ "$(cat /proc/self/attr/current)" != "kernel" ]; then
if [ -r "/selinux/enforce" ] ; then
SELINUX_STATE=$(cat "/selinux/enforce")
else
# assume enforcing if you can't read it
SELINUX_STATE=1
fi
fi
for i in /etc/tmpfiles.d/*; do
while read type path mode uid gid age; do
# only directories
[ -n "$type" ] || continue
[ $type = "d" ] || [ $type = "D" ] || continue
# only /var/run and /var/lock
[ $path != ${path#/var/run/} ] || [ $path != ${path#/var/lock/} ] || continue
if [ ! -d $path ]; then
mkdir -p $path || continue
SELINUX_RESTORE=1
chmod $mode $path
chown $uid:$gid $path
fi
done < $i;
done
if [ -n "$SELINUX_STATE" ] && [ -n "$SELINUX_RESTORE" ]; then
/sbin/restorecon -R /var/lock /var/run 2> /dev/null
fi
end script

View file

@ -1,271 +0,0 @@
diff --git a/aclocal.m4 b/aclocal.m4
index 3d3673e..6e09291 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1066,6 +1066,7 @@ m4_include([m4/lcmessage.m4])
m4_include([m4/lib-ld.m4])
m4_include([m4/lib-link.m4])
m4_include([m4/lib-prefix.m4])
+m4_include([m4/libaudit.m4])
m4_include([m4/libnih.m4])
m4_include([m4/libtool.m4])
m4_include([m4/lock.m4])
diff --git a/config.h.in b/config.h.in
index 8a7d63f..8d000aa 100644
--- a/config.h.in
+++ b/config.h.in
@@ -118,6 +118,9 @@
/* Define if your <locale.h> file defines LC_MESSAGES. */
#undef HAVE_LC_MESSAGES
+/* linux audit support */
+#undef HAVE_LIBAUDIT
+
/* Define to 1 if you have the <limits.h> header file. */
#undef HAVE_LIMITS_H
diff --git a/configure.ac b/configure.ac
index 49544e3..1513500 100644
--- a/configure.ac
+++ b/configure.ac
@@ -40,6 +40,7 @@ AM_PROG_CC_C_O
NIH_C_THREAD
# Checks for library functions.
+LINUX_AUDIT
# Other checks
AC_MSG_CHECKING([whether to include sbindir in PATH])
diff --git a/m4/libaudit.m4 b/m4/libaudit.m4
new file mode 100644
index 0000000..6865fb8
--- /dev/null
+++ b/m4/libaudit.m4
@@ -0,0 +1,25 @@
+# libaudit.m4 - Checks for the Linux Audit System support
+# Copyright (c) 2009 Steve Grubb sgrubb@redhat.com
+#
+AC_DEFUN([LINUX_AUDIT],
+[
+ AC_ARG_WITH(libaudit,
+ [ --with-libaudit=[auto/yes/no] Add Linux audit support [default=auto]],,
+ with_libaudit=auto)
+
+ # Check for Linux auditing API
+ #
+ # libaudit detection
+
+ if test x$with_libaudit = xno ; then
+ have_libaudit=no;
+ else
+ # See if we have audit daemon library
+ AC_CHECK_LIB(audit, audit_log_user_message,
+ AUDIT_LDADD=-laudit,)
+ fi
+ AC_SUBST(AUDIT_LDADD)
+ if test x$AUDIT_LDADD != x ; then
+ AC_DEFINE(HAVE_LIBAUDIT,1,[linux audit support])
+ fi
+])
diff --git a/util/Makefile.am b/util/Makefile.am
index 0b49c10..9a772d5 100644
--- a/util/Makefile.am
+++ b/util/Makefile.am
@@ -45,14 +45,17 @@ reboot_SOURCES = \
utmp.c utmp.h
reboot_LDADD = \
$(LTLIBINTL) \
- $(NIH_LIBS)
+ $(NIH_LIBS) \
+ $(AUDIT_LDADD)
+
runlevel_SOURCES = \
runlevel.c \
utmp.c utmp.h
runlevel_LDADD = \
$(LTLIBINTL) \
- $(NIH_LIBS)
+ $(NIH_LIBS) \
+ $(AUDIT_LDADD)
shutdown_SOURCES = \
shutdown.c \
@@ -64,7 +67,8 @@ shutdown_LDADD = \
$(LTLIBINTL) \
$(NIH_LIBS) \
$(NIH_DBUS_LIBS) \
- $(DBUS_LIBS)
+ $(DBUS_LIBS) \
+ $(AUDIT_LDADD)
telinit_SOURCES = \
telinit.c \
@@ -76,7 +80,8 @@ telinit_LDADD = \
$(LTLIBINTL) \
$(NIH_LIBS) \
$(NIH_DBUS_LIBS) \
- $(DBUS_LIBS)
+ $(DBUS_LIBS) \
+ $(AUDIT_LDADD)
com_ubuntu_Upstart_OUTPUTS = \
@@ -201,7 +206,8 @@ test_sysv_LDADD = \
$(LTLIBINTL) \
$(NIH_LIBS) \
$(NIH_DBUS_LIBS) \
- $(DBUS_LIBS)
+ $(DBUS_LIBS) \
+ $(AUDIT_LDADD)
test_telinit_SOURCES = tests/test_telinit.c telinit.c
test_telinit_CFLAGS = $(AM_CFLAGS) -DTEST
@@ -211,7 +217,8 @@ test_telinit_LDADD = \
com.ubuntu.Upstart.Job.o com.ubuntu.Upstart.Instance.o \
$(NIH_LIBS) \
$(NIH_DBUS_LIBS) \
- $(DBUS_LIBS)
+ $(DBUS_LIBS) \
+ $(AUDIT_LDADD)
.PHONY: tests
diff --git a/util/reboot.c b/util/reboot.c
index 7a9c071..15028eb 100644
--- a/util/reboot.c
+++ b/util/reboot.c
@@ -36,6 +36,10 @@
#include <nih/logging.h>
#include <nih/error.h>
+#ifdef HAVE_LIBAUDIT
+#include <libaudit.h>
+#endif
+
#include "utmp.h"
@@ -103,7 +107,6 @@ static int poweroff = FALSE;
**/
static int exit_only = FALSE;
-
/**
* options:
*
@@ -127,6 +130,7 @@ static NihOption options[] = {
NIH_OPTION_LAST
};
+static void send_audit_event(void);
int
main (int argc,
@@ -227,6 +231,8 @@ main (int argc,
/* Re-enable Control-Alt-Delete in case it breaks */
reboot (RB_ENABLE_CAD);
+ send_audit_event ();
+
/* Do the syscall */
switch (mode) {
case REBOOT:
@@ -248,3 +254,21 @@ main (int argc,
return 0;
}
+
+/**
+ * send_audit_event
+ *
+ * Send system shutdown audit event
+ **/
+static void
+send_audit_event (void)
+{
+#ifdef HAVE_LIBAUDIT
+ int fd = audit_open ();
+ if (fd < 0)
+ return;
+ audit_log_user_message (fd, AUDIT_SYSTEM_SHUTDOWN, "init",
+ NULL, NULL, NULL, 1);
+ close (fd);
+#endif
+}
diff --git a/util/sysv.c b/util/sysv.c
index fbca39f..5476f79 100644
--- a/util/sysv.c
+++ b/util/sysv.c
@@ -36,6 +36,12 @@
#include <nih/logging.h>
#include <nih/error.h>
+#include <unistd.h>
+#ifdef HAVE_LIBAUDIT
+#include <stdio.h>
+#include <libaudit.h>
+#endif
+
#include "dbus/upstart.h"
#include "utmp.h"
@@ -54,6 +60,7 @@
/* Prototypes for static functions */
static void error_handler (NihError **err, NihDBusMessage *message);
+static void send_audit_event (int old, int level);
/**
@@ -161,6 +168,8 @@ sysv_change_runlevel (int runlevel,
runlevel, prevlevel) < 0)
nih_free (nih_error_get ());
+ send_audit_event(prevlevel, runlevel);
+
/* Make the EmitEvent call, we don't wait for the event to finish
* because sysvinit never did.
*/
@@ -199,3 +208,41 @@ error_handler (NihError ** err,
{
*err = nih_error_steal ();
}
+
+/**
+ * send_audit_event
+ * @old: current run level
+ * @level: new run level
+ *
+ * Send system runlevel change audit event. If level is 0, then
+ * we consider this to be a reboot event.
+ **/
+static void
+send_audit_event (int old, int level)
+{
+#ifdef HAVE_LIBAUDIT
+ int fd = audit_open ();
+
+ if (fd < 0)
+ return;
+
+ /* first runlevel change after boot */
+ if (old == 'N')
+ audit_log_user_message (fd, AUDIT_SYSTEM_BOOT, "init",
+ NULL, NULL, NULL, 1);
+
+ char buf[64];
+
+ snprintf (buf, sizeof (buf),
+ "old-level=%c new-level=%c", old, level);
+ audit_log_user_message (fd, AUDIT_SYSTEM_RUNLEVEL, buf,
+ NULL, NULL, NULL, 1);
+
+ /* shutdown or reboot */
+ if (level == '0' || level == '6')
+ audit_log_user_message (fd, AUDIT_SYSTEM_SHUTDOWN, "init",
+ NULL, NULL, NULL, 1);
+
+ close (fd);
+#endif
+}

View file

@ -1,23 +0,0 @@
diff --git a/init/job_process.c b/init/job_process.c
index 8ce2f72..c2c96cb 100644
--- a/init/job_process.c
+++ b/init/job_process.c
@@ -298,6 +298,7 @@ job_process_run (Job *job,
/* Feed the script to the child process */
if (shell) {
+ nih_local char *cmd = NULL;
NihIo *io;
/* Clean up and close the reading end (we don't need it) */
@@ -317,6 +318,10 @@ job_process_run (Job *job,
nih_free (err);
}
+ /* Close leaking fd first */
+ cmd = NIH_MUST (nih_sprintf (NULL, "<&%d- ;", fds[0]));
+ NIH_ZERO (nih_io_write (io, cmd, strlen (cmd)));
+
NIH_ZERO (nih_io_write (io, script, strlen (script)));
nih_io_shutdown (io);
}

View file

@ -1,65 +0,0 @@
diff -up upstart-0.6.5/init/main.c.foo upstart-0.6.5/init/main.c
--- upstart-0.6.5/init/main.c.foo 2010-04-30 19:38:07.846260462 -0400
+++ upstart-0.6.5/init/main.c 2010-04-30 21:35:38.690487114 -0400
@@ -67,6 +67,7 @@ static void kbd_handler (void *data,
static void pwr_handler (void *data, NihSignal *signal);
static void hup_handler (void *data, NihSignal *signal);
static void usr1_handler (void *data, NihSignal *signal);
+static void term_handler (void *data, NihSignal *signal);
#endif /* DEBUG */
@@ -241,6 +242,10 @@ main (int argc,
/* SIGUSR1 instructs us to reconnect to D-Bus */
nih_signal_set_handler (SIGUSR1, nih_signal_handler);
NIH_MUST (nih_signal_add_handler (NULL, SIGUSR1, usr1_handler, NULL));
+
+ /* SIGTERM instructs us to re-exec ourselves */
+ nih_signal_set_handler (SIGTERM, nih_signal_handler);
+ NIH_MUST (nih_signal_add_handler (NULL, SIGTERM, term_handler, NULL));
#endif /* DEBUG */
@@ -485,4 +490,42 @@ usr1_handler (void *data,
}
}
}
+
+/**
+ * term_handler:
+ * @data: unused,
+ * @signal: signal that called this handler
+ *
+ * This is called when we recieve the TERM signal, which instructs us
+ * to reexec ourselves.
+ **/
+static void
+term_handler (void *data,
+ NihSignal *signal)
+{
+ NihError *err;
+ sigset_t mask, oldmask;
+
+ nih_assert (argv0 != NULL);
+ nih_assert (signal != NULL);
+
+ nih_warn (_("Re-executing %s"), argv0);
+
+ /* Block signals while we work. We're the last signal handler
+ * installed so this should mean that they're all handled now.
+ *
+ * The child must make sure that it unblocks these again when
+ * it's ready.
+ */
+ sigfillset (&mask);
+ sigprocmask (SIG_BLOCK, &mask, &oldmask);
+ execl (argv0, argv0, "--restart", NULL);
+ nih_error_raise_system ();
+
+ err = nih_error_get ();
+ nih_error (_("Failed to re-execute %s: %s"), argv0, err->message);
+ nih_free (err);
+
+ sigprocmask (SIG_SETMASK, &oldmask, NULL);
+}
#endif /* DEBUG */

View file

@ -1,213 +0,0 @@
diff -up upstart-0.6.3/nih-dbus/tests/test_dbus_connection.c.tests upstart-0.6.3/nih-dbus/tests/test_dbus_connection.c
--- upstart-0.6.3/nih-dbus/tests/test_dbus_connection.c.tests 2009-12-14 15:51:25.323430105 +0100
+++ upstart-0.6.3/nih-dbus/tests/test_dbus_connection.c 2009-12-14 15:51:25.323430105 +0100
@@ -1521,7 +1521,6 @@ main (int argc,
nih_error_init ();
test_connect ();
- test_bus ();
test_setup ();
test_server ();
diff -up upstart-0.6.3/nih/tests/test_child.c.tests upstart-0.6.3/nih/tests/test_child.c
--- upstart-0.6.3/nih/tests/test_child.c.tests 2009-12-14 15:51:25.910710749 +0100
+++ upstart-0.6.3/nih/tests/test_child.c 2009-12-14 15:51:25.888145178 +0100
@@ -328,186 +328,6 @@ test_poll (void)
nih_free (watch);
- /* Check that a signal raised from a traced child causes the reaper
- * to be called with a traced event and the event in the status
- * field. It should not be removed from the list since the child
- * hasn't gone away.
- */
- TEST_FEATURE ("with signal from traced child");
-
- TEST_CHILD (pid) {
- assert0 (ptrace (PTRACE_TRACEME, 0, NULL, NULL));
-
- raise (SIGSTOP);
- raise (SIGCHLD);
- pause ();
- exit (0);
- }
-
- waitid (P_PID, pid, &siginfo, WSTOPPED);
-
- assert0 (ptrace (PTRACE_SETOPTIONS, pid, NULL, PTRACE_O_TRACESYSGOOD));
- assert0 (ptrace (PTRACE_CONT, pid, NULL, SIGCONT));
-
- waitid (P_PID, pid, &siginfo, WSTOPPED | WNOWAIT);
-
- watch = nih_child_add_watch (NULL, pid, NIH_CHILD_TRAPPED,
- my_handler, &watch);
-
- TEST_FREE_TAG (watch);
-
- handler_called = 0;
- last_data = NULL;
- last_pid = 0;
- last_event = -1;
- last_status = 0;
-
- nih_child_poll ();
-
- TEST_TRUE (handler_called);
- TEST_EQ (last_pid, pid);
- TEST_EQ (last_event, NIH_CHILD_TRAPPED);
- TEST_EQ (last_status, SIGCHLD);
- TEST_NOT_FREE (watch);
-
- assert0 (ptrace (PTRACE_DETACH, pid, NULL, 0));
-
- kill (pid, SIGTERM);
- waitid (P_PID, pid, &siginfo, WEXITED);
- nih_free (watch);
-
-
-#if HAVE_VALGRIND_VALGRIND_H
- /* These tests fail when running under valgrind.
- */
- if (! RUNNING_ON_VALGRIND) {
-#endif
- /* Check that when a traced child forks it causes the reaper
- * to be called with a ptrace event and the fork event in the
- * status field. It should not be removed from the list since the
- * child hasn't gone away.
- */
- TEST_FEATURE ("with fork by traced child");
-
- TEST_CHILD (pid) {
- assert0 (ptrace (PTRACE_TRACEME, 0, NULL, NULL));
-
- raise (SIGSTOP);
-
- child = fork ();
- assert (child >= 0);
-
- pause ();
-
- exit (0);
- }
-
- waitid (P_PID, pid, &siginfo, WSTOPPED);
-
- assert0 (ptrace (PTRACE_SETOPTIONS, pid, NULL,
- PTRACE_O_TRACESYSGOOD | PTRACE_O_TRACEFORK));
- assert0 (ptrace (PTRACE_CONT, pid, NULL, SIGCONT));
-
- /* Wait for ptrace to stop the parent (signalling the fork) */
- waitid (P_PID, pid, &siginfo, WSTOPPED | WNOWAIT);
-
- /* Will be able to get the child pid now, we have to do it here
- * because we want to wait on it to ensure the test is synchronous;
- * otherwise nih_child_poll() could actually eat the child event
- * before it returns -- normally we'd do this inside the handler,
- * so things would probably work (we iter the handlers for each
- * event, so you can add one).
- */
- data = 0;
- assert0 (ptrace (PTRACE_GETEVENTMSG, pid, NULL, &data));
- assert (data != 0);
- child = (pid_t)data;
-
- /* Wait for ptrace to stop the child, otherwise it might not be
- * ready for us to actually detach from.
- */
- waitid (P_PID, child, &siginfo, WSTOPPED | WNOWAIT);
-
- watch = nih_child_add_watch (NULL, pid, NIH_CHILD_PTRACE,
- my_handler, &watch);
-
- TEST_FREE_TAG (watch);
-
- handler_called = 0;
- last_data = NULL;
- last_pid = 0;
- last_event = -1;
- last_status = 0;
-
- nih_child_poll ();
-
- TEST_TRUE (handler_called);
- TEST_EQ (last_pid, pid);
- TEST_EQ (last_event, NIH_CHILD_PTRACE);
- TEST_EQ (last_status, PTRACE_EVENT_FORK);
- TEST_NOT_FREE (watch);
-
- assert0 (ptrace (PTRACE_DETACH, child, NULL, SIGCONT));
- kill (child, SIGTERM);
-
- assert0 (ptrace (PTRACE_DETACH, pid, NULL, SIGCONT));
- kill (pid, SIGTERM);
- waitid (P_PID, pid, &siginfo, WEXITED);
- nih_free (watch);
-
-
- /* Check that when a traced child execs it causes the reaper
- * to be called with a ptrace event and the exec event in the
- * status field. It should not be removed from the list since the
- * child hasn't gone away.
- */
- TEST_FEATURE ("with exec by traced child");
-
- TEST_CHILD (pid) {
- assert0 (ptrace (PTRACE_TRACEME, 0, NULL, NULL));
-
- raise (SIGSTOP);
-
- execl ("/bin/true", "true", NULL);
- exit (255);
- }
-
- waitid (P_PID, pid, &siginfo, WSTOPPED);
-
- assert0 (ptrace (PTRACE_SETOPTIONS, pid, NULL,
- PTRACE_O_TRACESYSGOOD | PTRACE_O_TRACEEXEC));
- assert0 (ptrace (PTRACE_CONT, pid, NULL, SIGCONT));
-
- waitid (P_PID, pid, &siginfo, WSTOPPED | WNOWAIT);
-
- watch = nih_child_add_watch (NULL, pid, NIH_CHILD_PTRACE,
- my_handler, &watch);
-
- TEST_FREE_TAG (watch);
-
- handler_called = 0;
- last_data = NULL;
- last_pid = 0;
- last_event = -1;
- last_status = 0;
-
- nih_child_poll ();
-
- TEST_TRUE (handler_called);
- TEST_EQ (last_pid, pid);
- TEST_EQ (last_event, NIH_CHILD_PTRACE);
- TEST_EQ (last_status, PTRACE_EVENT_EXEC);
- TEST_NOT_FREE (watch);
-
- assert0 (ptrace (PTRACE_DETACH, pid, NULL, SIGCONT));
-
- waitid (P_PID, pid, &siginfo, WEXITED);
- nih_free (watch);
-#if HAVE_VALGRIND_VALGRIND_H
- }
-#endif
-
-
/* Check that we can watch for events from any process, which
* shouldn't be freed when the child dies.
*/
diff -up upstart-0.6.3/nih/tests/test_string.c.tests upstart-0.6.3/nih/tests/test_string.c
--- upstart-0.6.3/nih/tests/test_string.c.tests 2009-12-17 12:34:43.357844975 +0100
+++ upstart-0.6.3/nih/tests/test_string.c 2009-12-17 12:38:41.911484010 +0100
@@ -1511,8 +1511,6 @@ main (int argc,
test_array_copy ();
test_array_append ();
test_str_wrap ();
- test_str_screen_width ();
- test_str_screen_wrap ();
return 0;
}

View file

@ -1,28 +0,0 @@
diff --git a/util/shutdown.c b/util/shutdown.c
index 0a6d8bf..2ef847a 100644
--- a/util/shutdown.c
+++ b/util/shutdown.c
@@ -459,6 +459,7 @@ shutdown_now (void)
{
nih_local char **extra_env = NULL;
NihDBusError * dbus_err;
+ int exit_val = 0;
if (init_halt) {
char *e;
@@ -486,12 +487,14 @@ shutdown_now (void)
* yet rebooted ... so try /dev/initctl
*/
sysvinit_shutdown ();
+ nih_fatal ("Unable to shutdown system");
+ exit_val = 1;
}
unlink (ETC_NOLOGIN);
nih_main_unlink_pidfile ();
- exit (0);
+ exit (exit_val);
}
/**

View file

@ -1,13 +0,0 @@
diff -up upstart-0.6.3/util/telinit.c.foo upstart-0.6.3/util/telinit.c
--- upstart-0.6.3/util/telinit.c.foo 2009-12-03 14:52:58.000000000 -0500
+++ upstart-0.6.3/util/telinit.c 2009-12-03 14:53:06.000000000 -0500
@@ -174,9 +174,6 @@ main (int argc,
break;
case 'U':
case 'u':
- ret = kill (1, SIGTERM);
- if (ret < 0)
- nih_error_raise_system ();
break;
default:
nih_assert_not_reached ();

View file

@ -1,317 +0,0 @@
diff --git a/init/job_class.c b/init/job_class.c
index eeec83d..00eb13d 100644
--- a/init/job_class.c
+++ b/init/job_class.c
@@ -219,6 +219,8 @@ job_class_new (const void *parent,
class->chroot = NULL;
class->chdir = NULL;
+ class->utmp_id = NULL;
+
class->deleted = FALSE;
class->debug = FALSE;
diff --git a/init/job_class.h b/init/job_class.h
index d40e750..e5b5190 100644
--- a/init/job_class.h
+++ b/init/job_class.h
@@ -145,6 +145,7 @@ typedef struct job_class {
struct rlimit *limits[RLIMIT_NLIMITS];
char *chroot;
char *chdir;
+ char *utmp_id;
int deleted;
int debug;
diff --git a/init/job_process.c b/init/job_process.c
index 282bf17..996000b 100644
--- a/init/job_process.c
+++ b/init/job_process.c
@@ -38,6 +38,8 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
+#include <utmp.h>
+#include <utmpx.h>
#include <nih/macros.h>
#include <nih/alloc.h>
@@ -359,11 +361,13 @@ job_process_spawn (JobClass *class,
char * const *env,
int trace)
{
- sigset_t child_set, orig_set;
- pid_t pid;
- int i, fds[2];
- char filename[PATH_MAX];
- FILE *fd;
+ sigset_t child_set, orig_set;
+ pid_t pid;
+ int i, fds[2];
+ char filename[PATH_MAX];
+ FILE *fd;
+ struct utmpx utmp;
+ struct timeval tv;
nih_assert (class != NULL);
@@ -556,6 +560,20 @@ job_process_spawn (JobClass *class,
}
}
+ /* Write utmp INIT_PROCESS entry */
+ if (class->utmp_id) {
+ memset(&utmp, 0, sizeof(struct utmpx));
+ strncpy(utmp.ut_id, class->utmp_id, sizeof(utmp.ut_id));
+ utmp.ut_pid = getpid();
+ utmp.ut_type = INIT_PROCESS;
+ gettimeofday(&tv, NULL);
+ utmp.ut_tv.tv_sec = tv.tv_sec;
+ utmp.ut_tv.tv_usec = tv.tv_usec;
+ setutxent();
+ pututxline(&utmp);
+ endutxent();
+ }
+
/* Execute the process, if we escape from here it failed */
if (execvp (argv[0], argv) < 0) {
nih_error_raise_system ();
@@ -999,6 +1017,8 @@ job_process_terminated (Job *job,
int status)
{
int failed = FALSE, stop = FALSE, state = TRUE;
+ struct utmpx *utmptr;
+ struct timeval tv;
nih_assert (job != NULL);
@@ -1161,6 +1181,36 @@ job_process_terminated (Job *job,
job->kill_process = -1;
}
+ /* Find existing utmp entry for the process pid */
+ setutxent();
+ while ((utmptr = getutxent()) != NULL) {
+ if (utmptr->ut_pid == job->pid[process]) {
+ /* set type and clean ut_user, ut_host,
+ * ut_time as described in utmp(5)
+ */
+ utmptr->ut_type = DEAD_PROCESS;
+ memset(utmptr->ut_user, 0, UT_NAMESIZE);
+ memset(utmptr->ut_host, 0, UT_HOSTSIZE);
+ utmptr->ut_time = 0;
+
+ /* Set class utmp_id for next spawn */
+ job->class->utmp_id = nih_strdup (job->class, utmptr->ut_id);
+
+ /* Update existing utmp file. */
+ pututxline(utmptr);
+
+ /* set ut_time for log */
+ gettimeofday(&tv, NULL);
+ utmptr->ut_tv.tv_sec = tv.tv_sec;
+ utmptr->ut_tv.tv_usec = tv.tv_usec;
+ /* Write wtmp entry */
+ updwtmpx (_PATH_WTMP, utmptr);
+
+ break;
+ }
+ }
+ endutxent();
+
/* Clear the process pid field */
job->pid[process] = 0;
diff --git a/init/tests/test_job_process.c b/init/tests/test_job_process.c
index 5946da8..1454afe 100644
--- a/init/tests/test_job_process.c
+++ b/init/tests/test_job_process.c
@@ -36,6 +36,8 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
+#include <utmp.h>
+#include <utmpx.h>
#include <nih/macros.h>
#include <nih/string.h>
@@ -4501,6 +4503,171 @@ test_find (void)
}
+void
+test_utmp (void)
+{
+ JobClass * class;
+ Job * job = NULL;
+ Blocked * blocked = NULL;
+ Event * event;
+ FILE * output;
+ char utmpname[PATH_MAX];
+ struct utmpx utmp, *utmptr;
+ struct timeval tv;
+
+ TEST_FUNCTION ("job_process_handler");
+ program_name = "test";
+
+ class = job_class_new (NULL, "test");
+ class->process[PROCESS_MAIN] = process_new (class);
+ class->process[PROCESS_MAIN]->command = "echo";
+
+ class->start_on = event_operator_new (class, EVENT_MATCH,
+ "foo", NULL);
+ class->stop_on = event_operator_new (class, EVENT_MATCH,
+ "foo", NULL);
+ nih_hash_add (job_classes, &class->entry);
+
+ event = event_new (NULL, "foo", NULL);
+
+ TEST_FILENAME(utmpname);
+
+ /* Check that utmp record for the running task of the job terminating
+ * is properly changed to DEAD_PROCESS
+ */
+ TEST_FEATURE ("with LOGIN_PROCESS utmp entry");
+ TEST_ALLOC_FAIL {
+ TEST_ALLOC_SAFE {
+ job = job_new (class, "");
+
+ blocked = blocked_new (job, BLOCKED_EVENT, event);
+ event_block (event);
+ nih_list_add (&job->blocking, &blocked->entry);
+ }
+
+ job->goal = JOB_START;
+ job->state = JOB_RUNNING;
+ job->pid[PROCESS_MAIN] = 1;
+
+ TEST_FREE_TAG (blocked);
+
+ job->blocker = NULL;
+ event->failed = FALSE;
+
+ job->failed = FALSE;
+ job->failed_process = -1;
+ job->exit_status = 0;
+
+ output = fopen (utmpname, "w");
+ fclose (output);
+
+ /* set utmp file */
+ utmpxname(utmpname);
+
+ /* set up utmp entries */
+ memset (&utmp, 0, sizeof utmp);
+
+ strcpy(utmp.ut_id, "2");
+ utmp.ut_type = LOGIN_PROCESS;
+ utmp.ut_pid = 2;
+
+ gettimeofday(&tv, NULL);
+ utmp.ut_tv.tv_sec = tv.tv_sec;
+ utmp.ut_tv.tv_usec = tv.tv_usec;
+
+ setutxent();
+ pututxline(&utmp);
+
+ strcpy(utmp.ut_id, "1");
+ utmp.ut_pid = 1;
+ pututxline(&utmp);
+
+ endutxent();
+
+ job_process_handler (NULL, 1, NIH_CHILD_EXITED, 0);
+
+ setutxent();
+
+ utmptr = getutxent();
+ TEST_NE_P(utmptr, NULL);
+ TEST_EQ(utmptr->ut_pid, 2);
+ TEST_EQ(utmptr->ut_type, LOGIN_PROCESS);
+
+ utmptr = getutxent();
+ TEST_NE_P(utmptr, NULL);
+ TEST_EQ(utmptr->ut_pid, 1);
+ TEST_EQ(utmptr->ut_type, DEAD_PROCESS);
+
+ nih_free (job);
+ }
+ TEST_FEATURE ("with USER_PROCESS utmp entry");
+ TEST_ALLOC_FAIL {
+ TEST_ALLOC_SAFE {
+ job = job_new (class, "");
+
+ blocked = blocked_new (job, BLOCKED_EVENT, event);
+ event_block (event);
+ nih_list_add (&job->blocking, &blocked->entry);
+ }
+
+ job->goal = JOB_START;
+ job->state = JOB_RUNNING;
+ job->pid[PROCESS_MAIN] = 1;
+
+ TEST_FREE_TAG (blocked);
+
+ job->blocker = NULL;
+ event->failed = FALSE;
+
+ job->failed = FALSE;
+ job->failed_process = -1;
+ job->exit_status = 0;
+
+ output = fopen (utmpname, "w");
+ fclose (output);
+
+ /* set utmp file */
+ utmpxname(utmpname);
+
+ /* set up utmp entries */
+ memset (&utmp, 0, sizeof utmp);
+
+ strcpy(utmp.ut_id, "2");
+ utmp.ut_type = USER_PROCESS;
+ utmp.ut_pid = 2;
+
+ gettimeofday(&tv, NULL);
+ utmp.ut_tv.tv_sec = tv.tv_sec;
+ utmp.ut_tv.tv_usec = tv.tv_usec;
+
+ setutxent();
+ pututxline(&utmp);
+
+ strcpy(utmp.ut_id, "1");
+ utmp.ut_pid = 1;
+ pututxline(&utmp);
+
+ endutxent();
+
+ job_process_handler (NULL, 1, NIH_CHILD_EXITED, 0);
+
+ setutxent();
+
+ utmptr = getutxent();
+ TEST_NE_P(utmptr, NULL);
+ TEST_EQ(utmptr->ut_pid, 2);
+ TEST_EQ(utmptr->ut_type, USER_PROCESS);
+
+ utmptr = getutxent();
+ TEST_NE_P(utmptr, NULL);
+ TEST_EQ(utmptr->ut_pid, 1);
+ TEST_EQ(utmptr->ut_type, DEAD_PROCESS);
+
+ nih_free (job);
+ }
+}
+
+
int
main (int argc,
char *argv[])
@@ -4532,6 +4699,7 @@ main (int argc,
test_spawn ();
test_kill ();
test_handler ();
+ test_utmp ();
test_find ();

View file

@ -1,347 +0,0 @@
%define initscripts 20101206
Name: upstart
Version: 0.6.7
Release: 2%{?dist}
Summary: An event-driven init system
Group: System Environment/Base
License: GPLv2 and LGPLv2+
URL: http://upstart.ubuntu.com
Source0: http://upstart.ubuntu.com/download/0.6/upstart-%{version}.tar.gz
Source1: init-system-dbus.conf
# These are taken from http://git.fedorahosted.org/git/?p=initscripts.git
Source2: initjobs-%{initscripts}.tar.gz
# create missing files and directories according to /etc/tmpfiles.d/
Source3: tmpfiles.conf
Patch1: upstart-telinit.patch
Patch2: upstart-audit-events.patch
# set DEAD_PROCESS for dead process with pid in utmp table (#572199, #632568)
Patch3: upstart-utmp.patch
Patch4: upstart-reexec.patch
# shutdown exits with nonzero exitcode when fails
Patch5: upstart-shutdown-exitcode.patch
# send close fd command to shell first (#646894)
Patch6: upstart-close-fd.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: autoconf, automake, gettext, audit-libs-devel, expat-devel
BuildRequires: dbus-devel >= 1:1.2.16, libnih-devel >= 1.0.1
Conflicts: initscripts < 9.12
Requires: sysvinit-userspace /etc/rc.d/rc.sysinit
Obsoletes: upstart-sysvinit
%description
Upstart is an event-based replacement for the /sbin/init daemon which
handles starting of tasks and services during boot, stopping them
during shutdown and supervising them while the system is running.
%package sysvinit
Group: System Environment/Base
Summary: Upstart System V init tools
Requires: %{name} = %{version}-%{release}
Obsoletes: SysVinit < 2.86-24, sysvinit < 2.86-24
Provides: SysVinit = 2.86-24, sysvinit = 2.86-24
Provides: sysvinit-userspace
Conflicts: systemd-sysvinit
%description sysvinit
Drop-in replacement for the System V init tools, provided by Upstart.
%prep
%setup -q -a 2
%patch1 -p1 -b .u
%patch2 -p1 -b .audit
%patch3 -p1 -b .utmp
%patch4 -p1 -b .reexec
%patch5 -p1 -b .exitcode
%patch6 -p1 -b .closefd
%build
autoreconf
%configure --sbindir=/sbin --libdir=/%{_lib}
make %{?_smp_mflags}
%install
rm -rf %{buildroot}
make install DESTDIR=%{buildroot}
# Rename common SysV binaries and symlink them to allow parallel
# installation with systemd. We move the utility binaries into a
# subdirectory, so that program_name stays the same and Upstart still
# can check argv[0] properly in various places.
mv %{buildroot}/sbin/init %{buildroot}/sbin/upstart
rm %{buildroot}/sbin/halt
rm %{buildroot}/sbin/poweroff
mkdir -p -m 755 %{buildroot}/lib/upstart
mv %{buildroot}/sbin/reboot %{buildroot}/lib/upstart/reboot
mv %{buildroot}/sbin/runlevel %{buildroot}/lib/upstart/runlevel
mv %{buildroot}/sbin/shutdown %{buildroot}/lib/upstart/shutdown
mv %{buildroot}/sbin/telinit %{buildroot}/lib/upstart/telinit
ln -sf reboot %{buildroot}/lib/upstart/poweroff
ln -sf reboot %{buildroot}/lib/upstart/halt
%if 0
# disabled due the conflicts with systemd
ln -sf upstart %{buildroot}/sbin/init
ln -sf ../lib/upstart/reboot %{buildroot}/sbin/halt
ln -sf ../lib/upstart/reboot %{buildroot}/sbin/poweroff
ln -sf ../lib/upstart/reboot %{buildroot}/sbin/reboot
ln -sf ../lib/upstart/runlevel %{buildroot}/sbin/runlevel
ln -sf ../lib/upstart/shutdown %{buildroot}/sbin/shutdown
ln -sf ../lib/upstart/telinit %{buildroot}/sbin/telinit
%endif
# Rename init.8.gz to upstart.7.gz (#644249)
mv %{buildroot}/%{_mandir}/man8/init.8 %{buildroot}/%{_mandir}/man7/upstart.7
# Remove these files due the conflicts with systemd
rm -f %{buildroot}/%{_mandir}/man8/{halt,init,poweroff,reboot,runlevel,shutdown,telinit}.*
# don't ship default jobs
rm -f %{buildroot}/%{_sysconfdir}/init/*
install -m 644 %{SOURCE1} %{buildroot}/%{_sysconfdir}/init/
install -m 644 %{SOURCE3} %{buildroot}/%{_sysconfdir}/init/
for file in initjobs-%{initscripts}/*.conf ; do
install -m 644 $file %{buildroot}/%{_sysconfdir}/init/
done
%find_lang %{name}
%check
#some tests fail in koji while pass in mock and local build
#to run make check use "--with check"
%if %{?_with_check:1}%{!?_with_check:0}
make check
%endif
%clean
rm -rf %{buildroot}
%triggerpostun -- upstart < 0.6.0
[ -f /proc/1/exe -a -d /proc/1/root ] && kill -TERM 1
%files -f %{name}.lang
%defattr(-,root,root,-)
%doc AUTHORS
%doc COPYING
%doc NEWS
%doc README
%doc TODO
%doc HACKING
%{_sysconfdir}/init/
%config(noreplace) %{_sysconfdir}/dbus-1/system.d/Upstart.conf
%dir /lib/upstart
/lib/upstart/halt
/sbin/upstart
/sbin/initctl
/lib/upstart/poweroff
/lib/upstart/reboot
/lib/upstart/runlevel
/lib/upstart/shutdown
/sbin/start
/sbin/status
/sbin/stop
/sbin/restart
/lib/upstart/telinit
/sbin/reload
%{_mandir}/man5/init.5.gz
%{_mandir}/man5/inittab.5.gz
%{_mandir}/man7/control-alt-delete.7.gz
%{_mandir}/man7/keyboard-request.7.gz
%{_mandir}/man7/power-status-changed.7.gz
%{_mandir}/man7/runlevel.7.gz
%{_mandir}/man7/started.7.gz
%{_mandir}/man7/starting.7.gz
%{_mandir}/man7/startup.7.gz
%{_mandir}/man7/stopped.7.gz
%{_mandir}/man7/stopping.7.gz
%{_mandir}/man7/upstart.7.gz
%{_mandir}/man8/restart.8.gz
%{_mandir}/man8/initctl.8.gz
%{_mandir}/man8/start.8.gz
%{_mandir}/man8/status.8.gz
%{_mandir}/man8/stop.8.gz
%{_mandir}/man8/reload.8.gz
%if 0
# disabled due the conflicts with systemd
%files sysvinit
%defattr(-,root,root,-)
/sbin/halt
/sbin/init
/sbin/poweroff
/sbin/reboot
/sbin/runlevel
/sbin/shutdown
/sbin/telinit
%{_mandir}/man8/halt.8.gz
%{_mandir}/man8/init.8.gz
%{_mandir}/man8/poweroff.8.gz
%{_mandir}/man8/reboot.8.gz
%{_mandir}/man8/runlevel.8.gz
%{_mandir}/man8/shutdown.8.gz
%{_mandir}/man8/telinit.8.gz
%endif
%changelog
* Mon Feb 07 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.6.7-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
* Fri Dec 17 2010 Petr Lautrbach <plautrba@redhat.com> 0.6.7-1
- upgrade to 0.6.7
* Mon Dec 06 2010 Petr Lautrbach <plautrba@redhat.com> 0.6.6-4
- Stop tty and serial also on runlevel 's'
* Fri Nov 26 2010 Petr Lautrbach <plautrba@redhat.com> 0.6.6-3
- create missing files and directories according to /etc/init/tmpfiles.conf
* Tue Nov 16 2010 Bill Nottingham <notting@redhat.com> 0.6.6-2
- require /etc/rc.d/rc.sysinit to pull in new initscripts-legacy package where needed
* Wed Oct 27 2010 Petr Lautrbach <plautrba@redhat.com> 0.6.6-1
- upgrade to 0.6.6
- boot jobs source renamed
* Tue Oct 26 2010 Petr Lautrbach <plautrba@redhat.com> 0.6.5-14
- send close fd command to shell first (#646894)
* Tue Oct 19 2010 Petr Lautrbach <plautrba@redhat.com> 0.6.5-13
- Rename init(8) to upstart(7) (#644249)
* Thu Oct 14 2010 Petr Lautrbach <plautrba@redhat.com> 0.6.5-12
- Disable -sysvinit to avoid conflicts with systemd (#635323)
* Wed Sep 29 2010 jkeating - 0.6.5-11
- Rebuilt for gcc bug 634757
* Fri Sep 24 2010 Bill Nottingham <notting@redhat.com> 0.6.5-10
- merge in basic boot jobs here (#637099)
* Tue Sep 21 2010 Petr Lautrbach <plautrba@redhat.com> 0.6.5-9
- set DEAD_PROCESS for dead process with pid in utmp table (#572199, #632568)
- exit shutdown with nonzero exitcode when fails shutdown
* Fri Sep 17 2010 Bill Nottingham <notting@redhat.com> - 0.6.5-8
- ensure F15 version is newer than F-14
* Sat Jul 24 2010 Casey Dahlin <cdahlin@redhat.com> - 0.6.5-7
- Make upgrades work correctly now that -sysvinit is split off
* Sat Jul 24 2010 Lennart Poettering <lpoetter@redhat.com> - 0.6.5-6
- Split off -sysvinit to make Upstart parallel installable with systemd
* Tue May 4 2010 Bill Nottingham <notting@redhat.com> 0.6.5-5
- re-add SIGTERM handler so restart on shutdown works, avoiding dirty inodes (#576662)
* Tue Apr 6 2010 Casey Dahlin <cdahlin@redhat.com> 0.6.5-4
- Reload init after install
* Wed Feb 24 2010 Petr Lautrbach <plautrba@redhat.com> 0.6.5-3
- run "make check" only with --with check
* Fri Feb 19 2010 Casey Dahlin <cdahlin@redhat.com> 0.6.5-2
- be more specific about which libnih we need.
* Wed Feb 17 2010 Petr Lautrbach <plautrba@redhat.com> 0.6.5-1
- upgrade to 0.6.5
* Fri Jan 29 2010 Petr Lautrbach <plautrba@redhat.com> 0.6.3-7
- add SIGUSR1 handler and init-system-dbus.conf (#559660)
* Sun Jan 17 2010 Dennis Gilmore <dennis@ausil.us> - 0.6.3-6
- add patch from upstream fixing sparc alignment issues
* Mon Jan 11 2010 Petr Lautrbach <plautrba@redhat.com> 0.6.3-5
- License changed to GPLv2 and LGPLv2+
* Wed Dec 16 2009 Petr Lautrbach <plautrba@redhat.com> 0.6.3-4
- audit events patch rebased for 0.6 (#470661)
* Thu Dec 3 2009 Bill Nottingham <notting@redhat.com> 0.6.3-3
- make 'telinit u' a no-op, temporarily
* Fri Nov 27 2009 Petr Lautrbach <plautrba@redhat.com> 0.6.3-2
- Removed tests which fail in koji
* Fri Nov 20 2009 Casey Dahlin <cdahlin@redhat.com> - 0.6.3-1
- Upgrade to 0.6.3
* Fri Aug 21 2009 Tomas Mraz <tmraz@redhat.com> - 0.3.11-3
- rebuilt with new audit
* Sun Jul 26 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.3.11-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild
* Mon Jun 22 2009 Petr Lautrbach <plautrba@redhat.com> - 0.3.11-1
- Update to 0.3.11
* Mon Apr 27 2009 Bill Nottingham <notting@redhat.com> - 0.3.9-24
- Apply the audit patch correctly (#470661)
* Fri Apr 3 2009 Casey Dahlin <cdahlin@redhat.com> - 0.3.9-23
- Add audit events patch from Steve Grubb <sgrubb@redhat.com> (Bug #470661)
* Fri Jan 23 2009 Casey Dahlin <cdahlin@redhat.com> - 0.3.9-22
- Re-add 'telinit u' support along with patch to fix it (#450488). Patch due to
<pspencer@fields.utoronto.ca>
* Mon Jan 12 2009 Bill Nottingham <notting@redhat.com> - 0.3.9-21
- Remove 'telinit u' support as it is broken (#450488, <cjdahlin@ncsu.edu>)
* Fri Apr 25 2008 Bill Nottingham <notting@redhat.com> - 0.3.9-19
- with the merge of event-compat-sysv, move the sysvinit obsoletes/provides here
* Thu Apr 24 2008 Bill Nottingham <notting@redhat.com> - 0.3.9-18
- fix some man page typos (#444008, <archimerged@gmail.com>)
* Wed Apr 09 2008 Casey Dahlin <cjdahlin@ncsu.edu> - 0.3.9-17
- Added list of stock events to events(5)
* Tue Apr 08 2008 Casey Dahlin <cjdahlin@ncsu.edu> - 0.3.9-16
- Add telinit u support
* Fri Apr 04 2008 Bill Nottingham <notting@redhat.com> - 0.3.9-15
- Add a events(5) manpage that describes event syntax
* Thu Apr 03 2008 Casey Dahlin <cjdahlin@ncsu.edu> - 0.3.9-14
- Change bug report email address to fedora-devel-list@redhat.com
* Thu Mar 14 2008 Bill Nottingham <notting@redhat.com> - 0.3.9-13
- Ignore rpm temporary files of the foo;<somehex> format
- Make ignores of .rpm{new,orig,save} match only at the end of the name
* Wed Mar 13 2008 Bill Nottingham <notting@redhat.com> - 0.3.9-12
- forgot about rpmorig too (ugh)
* Wed Mar 13 2008 Casey Dahlin <cjdahlin@ncsu.edu> - 0.3.9-11
- Make logd a noreplace
* Wed Mar 13 2008 Casey Dahlin <cjdahlin@ncsu.edu> - 0.3.9-10
- Add patch to ignore .rpm{new,save} files
* Sun Mar 03 2008 Casey Dahlin <cjdahlin@ncsu.edu> - 0.3.9-9
- Remove automake dependency, build Makefile.in changes into patch
* Sun Mar 03 2008 Casey Dahlin <cjdahlin@ncsu.edu> - 0.3.9-8
- Run automake after patching
* Sun Mar 03 2008 Casey Dahlin <cjdahlin@ncsu.edu> - 0.3.9-7
- Added BuildRequires: automake
* Sun Mar 03 2008 Casey Dahlin <cjdahlin@ncsu.edu> - 0.3.9-6
- Added patch to allow runtime tty changes
* Fri Feb 15 2008 Casey Dahlin <cjdahlin@ncsu.edu> - 0.3.9-5
- Added patch to imply --force on runlevels 0 and 6
* Wed Feb 06 2008 Casey Dahlin <cjdahlin@ncsu.edu> - 0.3.9-4
- Patched for GCC 4.3
* Thu Jan 31 2008 Casey Dahlin <cjdahlin@ncsu.edu> - 0.3.9-3
- Added AUTHORS, COPYING, etc.
- Made config --libdir option relative
* Mon Jan 21 2008 Casey Dahlin <cjdahlin@ncsu.edu> - 0.3.9-2
- Remove libnih and libupstart
* Sun Jan 13 2008 Casey Dahlin <cjdahlin@ncsu.edu> - 0.3.9-1
- Initial packaging