Compare commits

...
Sign in to create a new pull request.

50 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
Dennis Gilmore
c36c4032a3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild 2011-02-07 18:33:35 -06:00
Petr Lautrbach
1891e83e67 upstart-0.6.7.tar.gz 2010-12-17 19:32:31 +01:00
Petr Lautrbach
039741aedd upstart-0.6.7 2010-12-17 18:56:45 +01:00
Petr Lautrbach
89d1ab7597 upstart-utmp.patch rebased for 0.6.7 2010-12-17 18:56:17 +01:00
Petr Lautrbach
360fa1af70 Stop tty and serial also on runlevel 's' - upstart-0.6.6-4.fc15 2010-12-06 22:11:25 +01:00
Petr Lautrbach
a26acc5633 upstart-0.6.6-3.fc15 2010-11-29 15:02:12 +01:00
Petr Lautrbach
3edc9e7156 create missing files and directories according to /etc/tmpfiles.d/ 2010-11-29 15:01:42 +01:00
Bill Nottingham
077e54a5e5 Require /etc/rc.d/rc.sysinit to pull in new initscripts-legacy package when necessary. 2010-11-16 22:23:12 -05:00
Petr Lautrbach
03b0903bf7 upstart-0.6.6-1.fc15 2010-10-29 14:52:51 +02:00
Petr Lautrbach
25454a5bc6 rename initjobs.tar.gz to initjobs-%{initscripts}.tar.gz 2010-10-29 14:38:00 +02:00
Petr Lautrbach
07d626226c use autoreconf for upstart-audit-events.patch 2010-10-29 14:36:54 +02:00
Petr Lautrbach
6df30f1d93 upstart-0.6.5-14.fc15 2010-10-26 17:36:34 +02:00
Petr Lautrbach
6ea36c7574 send close fd command to shell first (#646894) 2010-10-26 17:35:41 +02:00
Petr Lautrbach
f420835c3e Rename init(8) to upstart(7) (#644249) 2010-10-19 12:14:51 +02:00
Petr Lautrbach
98a4f2d7fa upstart-0.6.5-12.fc15 2010-10-14 16:23:06 +02:00
Petr Lautrbach
60860f3981 disable -sysvinit due the conflicts with systemd (#635323) 2010-10-14 16:22:47 +02:00
Jesse Keating
85706b32e8 - Rebuilt for gcc bug 634757 2010-09-29 15:25:09 -07:00
Bill Nottingham
b9ae6c686d Fix build 2010-09-24 13:19:37 -04:00
Bill Nottingham
dd3667fd15 Add in basic boot jobs. (#637099) 2010-09-24 13:13:09 -04:00
Petr Lautrbach
adfc4f92f0 upstart-0.6.5-9.fc15 2010-09-21 13:20:41 +02:00
Petr Lautrbach
6c8f335774 upstart-shutdown-exitcode.patch - exit shutdown with nonzero exitcode when fails shutdown 2010-09-21 13:20:19 +02:00
Petr Lautrbach
013ebf0ed2 upstart-utmp.patch - set DEAD_PROCESS for died process with pid in utmp table 2010-09-21 13:06:26 +02:00
Bill Nottingham
2348e3ee26 Bump release. 2010-09-17 10:33:39 -04:00
Fedora Release Engineering
a5f64464a1 dist-git conversion 2010-07-29 14:46:22 +00:00
Casey Dahlin
7aec19654f Fix broken upgrades from package split 2010-07-24 01:50:59 +00:00
Lennart Poettering
369b9c245d Split off -sysvinit to make Upstart parallel installable with systemd 2010-07-24 00:44:03 +00:00
Bill Nottingham
4b54411e24 Add a conflict on older versions of initscripts. (#596835) 2010-05-27 15:55:38 +00:00
Bill Nottingham
13dcb2a8d8 Re-add SIGTERM handler. This allows 'kill -TERM 1' on shutdown to work,
avoiding busy inodes when we update glibc/gcc/etc. (#576662)
2010-05-04 20:27:16 +00:00
Casey Dahlin
29b380cda1 Reload init after install 2010-04-06 20:34:49 +00:00
59d2e48f65 run make check only with --with check to avoid test fails in koji 2010-02-24 13:11:34 +00:00
27df622c49 already included in upstream source 2010-02-23 08:36:43 +00:00
Casey Dahlin
95bf015b0d more specificity about which libnih we want 2010-02-19 21:04:58 +00:00
Casey Dahlin
6eb4550aff New source to go along with 0.6.5 spec 2010-02-19 21:03:26 +00:00
fb3df4161b upgrade to upstart-0.6.5 removed obsolete patches 2010-02-17 15:30:54 +00:00
491dadb43e move init-system-dbus.conf from sources to cvs clean .cvsignore 2010-02-17 14:56:39 +00:00
12 changed files with 8 additions and 1195 deletions

View file

@ -1,3 +0,0 @@
upstart-0.6.3.tar.bz2
upstart-remove-tests.patch
init-system-dbus.conf

7
.gitignore vendored Normal file
View file

@ -0,0 +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

View file

@ -1,21 +0,0 @@
# Makefile for source rpm: upstart
# $Id: Makefile,v 1.1 2008/02/07 02:32:39 kevin Exp $
NAME := upstart
SPECFILE = $(firstword $(wildcard *.spec))
define find-makefile-common
for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$d/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done
endef
MAKEFILE_COMMON := $(shell $(find-makefile-common))
ifeq ($(MAKEFILE_COMMON),)
# attept a checkout
define checkout-makefile-common
test -f CVS/Root && { cvs -Q -d $$(cat CVS/Root) checkout common && echo "common/Makefile.common" ; } || { echo "ERROR: I can't figure out how to checkout the 'common' module." ; exit -1 ; } >&2
endef
MAKEFILE_COMMON := $(shell $(checkout-makefile-common))
endif
include $(MAKEFILE_COMMON)

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,2 +0,0 @@
ef9d2704426423f75d1e0c309ecfceb4 upstart-0.6.3.tar.bz2
bf835fea1be622a5d68f168bd63f91e5 init-system-dbus.conf

View file

@ -1,179 +0,0 @@
diff --git a/util/Makefile.in b/util/Makefile.in
index 26025ce..f7b61a3 100644
--- a/util/Makefile.in
+++ b/util/Makefile.in
@@ -376,6 +376,7 @@ reboot_SOURCES = \
reboot_LDFLAGS = -static
reboot_LDADD = \
../nih/libnih.la \
+ -laudit \
$(LTLIBINTL)
runlevel_SOURCES = \
@@ -399,6 +400,7 @@ shutdown_LDFLAGS = -static
shutdown_LDADD = \
../nih/libnih.la \
../nih-dbus/libnih-dbus.la \
+ -laudit \
$(LTLIBINTL) \
$(DBUS_LIBS)
@@ -414,6 +416,7 @@ telinit_LDFLAGS = -static
telinit_LDADD = \
../nih/libnih.la \
../nih-dbus/libnih-dbus.la \
+ -laudit \
$(LTLIBINTL) \
$(DBUS_LIBS)
@@ -477,6 +480,7 @@ test_sysv_LDADD = \
sysv.o utmp.o \
../nih/libnih.la \
../nih-dbus/libnih-dbus.la \
+ -laudit \
$(LTLIBINTL) \
$(DBUS_LIBS)
@@ -489,6 +493,7 @@ test_telinit_LDADD = \
com.ubuntu.Upstart.Job.o com.ubuntu.Upstart.Instance.o \
../nih/libnih.la \
../nih-dbus/libnih-dbus.la \
+ -laudit \
$(DBUS_LIBS)
all: $(BUILT_SOURCES)
diff --git a/util/reboot.c b/util/reboot.c
index dda2935..eef9ed2 100644
--- a/util/reboot.c
+++ b/util/reboot.c
@@ -36,6 +36,10 @@
#include <nih/logging.h>
#include <nih/error.h>
+#if 1 /* HAVE_LIBAUDIT */
+#include <libaudit.h>
+#endif
+
#include "utmp.h"
@@ -96,7 +100,6 @@ static int poweroff = FALSE;
**/
static int exit_only = FALSE;
-
/**
* options:
*
@@ -119,6 +122,7 @@ static NihOption options[] = {
NIH_OPTION_LAST
};
+static void send_audit_event(void);
int
main (int argc,
@@ -216,6 +220,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:
@@ -237,3 +243,21 @@ main (int argc,
return 0;
}
+
+/**
+ * send_audit_event
+ *
+ * Send system shutdown audit event
+ **/
+static void
+send_audit_event (void)
+{
+#if 1 /* 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..32b5540 100644
--- a/util/sysv.c
+++ b/util/sysv.c
@@ -36,6 +36,9 @@
#include <nih/logging.h>
#include <nih/error.h>
+#include <unistd.h>
+#include <libaudit.h>
+
#include "dbus/upstart.h"
#include "utmp.h"
@@ -54,6 +57,7 @@
/* Prototypes for static functions */
static void error_handler (NihError **err, NihDBusMessage *message);
+static void send_audit_event (int old, int level);
/**
@@ -161,6 +165,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 +205,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)
+{
+#if 1 /* 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,63 +0,0 @@
--- upstart-0.6.3/nih/alloc.c.orig 2010-01-17 17:28:33.000000000 +0000
+++ upstart-0.6.3/nih/alloc.c 2010-01-17 17:28:38.000000000 +0000
@@ -54,6 +54,8 @@
NihDestructor destructor;
} NihAllocCtx;
+#define NIH_ALLOC_CTX_SIZE (sizeof(NihAllocCtx) + __alignof__(NihAllocCtx))
+
/**
* NihAllocRef:
* @children_entry: list head in parent's children list,
@@ -82,7 +84,7 @@
*
* Returns: pointer to NihAllocCtx structure.
**/
-#define NIH_ALLOC_CTX(ptr) ((NihAllocCtx *)(ptr) - 1)
+#define NIH_ALLOC_CTX(ptr) ((NihAllocCtx *)((void*)ptr - NIH_ALLOC_CTX_SIZE))
/**
* NIH_ALLOC_PTR:
@@ -93,7 +95,7 @@
*
* Returns: pointer to block of memory.
**/
-#define NIH_ALLOC_PTR(ctx) ((void *)((NihAllocCtx *)(ctx) + 1))
+#define NIH_ALLOC_PTR(ctx) ((void*)((void*)ctx + NIH_ALLOC_CTX_SIZE))
/**
* NIH_ALLOC_FINALISED:
@@ -145,7 +147,7 @@
{
NihAllocCtx *ctx;
- ctx = __nih_malloc (sizeof (NihAllocCtx) + size);
+ ctx = __nih_malloc (NIH_ALLOC_CTX_SIZE + size);
if (! ctx)
return NULL;
@@ -230,7 +232,7 @@
/* Now do the actual realloc(), if this fails then we can just
* return NULL since we've not actually changed anything.
*/
- ctx = __nih_realloc (ctx, sizeof (NihAllocCtx) + size);
+ ctx = __nih_realloc (ctx, NIH_ALLOC_CTX_SIZE + size);
if (! ctx)
return NULL;
@@ -562,7 +564,7 @@
nih_assert (child != NULL);
nih_assert (child->destructor != NIH_ALLOC_FINALISED);
- ref = NIH_MUST (malloc (sizeof (NihAllocRef)));
+ ref = NIH_MUST (malloc (NIH_ALLOC_CTX_SIZE));
nih_list_init (&ref->children_entry);
nih_list_init (&ref->parents_entry);
@@ -739,5 +741,5 @@
ctx = NIH_ALLOC_CTX (ptr);
nih_assert (ctx->destructor != NIH_ALLOC_FINALISED);
- return malloc_usable_size (ctx) - sizeof (NihAllocCtx);
+ return malloc_usable_size (ctx) - NIH_ALLOC_CTX_SIZE;
}

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,429 +0,0 @@
diff -uNr upstart-0.3.9.orig/init/main.c upstart-0.3.9/init/main.c
--- upstart-0.3.9.orig/init/main.c 2009-01-23 13:44:32.000000000 -0500
+++ upstart-0.3.9/init/main.c 2009-01-23 13:44:54.000000000 -0500
@@ -59,6 +59,7 @@
#include "cfgfile.h"
#include "paths.h"
#include "tty.h"
+#include "restore.h"
/* Prototypes for static functions */
@@ -278,6 +279,10 @@
exit (1);
}
+ /* Restore the state of previously active jobs, if re-exec'd by
+ * a previously running init. */
+
+ if (restart) restore_configuration(args);
/* Generate and run the startup event or read the state from the
* init daemon that exec'd us
@@ -534,6 +539,8 @@
NihError *err;
const char *loglevel;
sigset_t mask, oldmask;
+ char **args;
+ size_t len;
nih_assert (argv0 != NULL);
nih_assert (signal != NULL);
@@ -559,7 +566,20 @@
} else {
loglevel = NULL;
}
- execl (argv0, argv0, "--restart", loglevel, NULL);
+ args = nih_str_array_new(NULL);
+ len = 0;
+ if (args) args = nih_str_array_add(&args, NULL, &len, argv0);
+ if (args) args = nih_str_array_add(&args, NULL, &len, "--restart");
+ if (args && loglevel)
+ args = nih_str_array_add(&args, NULL, &len, loglevel);
+ if (args) save_current_configuration(&args, NULL, &len);
+ if (args) {
+ execv (argv0, args);
+ nih_free(args);
+ } else {
+ nih_warn (_("Unable to save list of currently running jobs"));
+ execl(argv0, argv0, "--restart", loglevel, NULL);
+ }
nih_error_raise_system ();
err = nih_error_get ();
diff -uNr upstart-0.3.9.orig/init/Makefile.in upstart-0.3.9/init/Makefile.in
--- upstart-0.3.9.orig/init/Makefile.in 2009-01-23 13:44:32.000000000 -0500
+++ upstart-0.3.9/init/Makefile.in 2009-01-23 13:44:54.000000000 -0500
@@ -72,7 +72,7 @@
PROGRAMS = $(sbin_PROGRAMS)
am_init_OBJECTS = main.$(OBJEXT) tty.$(OBJEXT) process.$(OBJEXT) \
job.$(OBJEXT) event.$(OBJEXT) control.$(OBJEXT) \
- notify.$(OBJEXT) cfgfile.$(OBJEXT)
+ notify.$(OBJEXT) cfgfile.$(OBJEXT) restore.$(OBJEXT)
init_OBJECTS = $(am_init_OBJECTS)
am__DEPENDENCIES_1 =
init_DEPENDENCIES = ../upstart/libupstart.la ../nih/libnih.la \
@@ -315,7 +315,8 @@
event.c event.h \
control.c control.h \
notify.c notify.h \
- cfgfile.c cfgfile.h
+ cfgfile.c cfgfile.h \
+ restore.c restore.h
init_LDFLAGS = -static
init_LDADD = \
diff -uNr upstart-0.3.9.orig/init/restore.c upstart-0.3.9/init/restore.c
--- upstart-0.3.9.orig/init/restore.c 1969-12-31 19:00:00.000000000 -0500
+++ upstart-0.3.9/init/restore.c 2009-01-23 13:44:54.000000000 -0500
@@ -0,0 +1,333 @@
+/* Modifications to upstart to allow passing of the state of currently
+ * running jobs when upstart re-execs itself.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif /* HAVE_CONFIG_H */
+
+
+#include <sys/types.h>
+#include <string.h>
+#include <nih/string.h>
+#include <nih/logging.h>
+#include <nih/alloc.h>
+#include "job.h"
+#include "restore.h"
+
+
+/**
+ * store_pid:
+ * @proc: pointer to a JobProcess structure or NULL
+ * @args: array of arguments
+ * @parent: parent of @args
+ * @len: current length of @args
+ *
+ * Does nothing if @args is null.
+ * Pushes "X" onto @args if @args is non-null but @process is null.
+ * Otherwise: extracts the pid from @process, creates a hexadecimal string
+ * form of it, pushes a copy onto the array @args, then frees the original.
+ */
+
+void store_pid(JobProcess *proc, char ***args, const void *parent, size_t *len)
+{
+ char *pidstr;
+ if (! *args) return;
+ pidstr = (proc ? nih_sprintf(NULL, "%x", proc->pid) : "X");
+
+ if (! pidstr) {
+ nih_error("Unable to allocate storage to save process id");
+ *args = NULL;
+ return;
+ }
+ if (! nih_str_array_add(args, parent, len, pidstr)) {
+ nih_error("Unable to add process id to argument list");
+ *args = NULL;
+ }
+
+ if (proc) nih_free(pidstr);
+}
+
+/**
+ * unpack_pid:
+ * @pidstr: hexadecimal string created by pack_pid
+ * @err: pointer to flag to set if error occurs
+ *
+ * Returns the process id corresponding to the string passed in pidstr.
+ * If an error occurs, returns 0 and sets the flag pointed to by @err.
+ **/
+
+pid_t unpack_pid(char *pidstr, int *err) {
+ pid_t result = 0;
+ while (*pidstr) {
+ unsigned char c = *pidstr++;
+ result <<= 4;
+ if (c >= '0' && c <= '9') result += (c-'0');
+ else if (c >= 'a' && c <= 'f') result += 10 + (c-'a');
+ else {
+ *err = 1;
+ return 0;
+ }
+ }
+ return result;
+}
+
+/**
+ * retrieve_pid:
+ * @arg: pointer to array of arguments from which to read pid string
+ * @jobname: name of job whose pids are being retrieved
+ * @err: pointer to flag to set if error occurs
+ * @pid: pointer to location to hold the retrieved process id
+ * @present: pointer to a location to hold 1 if the process id was present
+ *
+ * Reads a process id or no-process-present indicator from the hexadecimal
+ * string pointed to by @arg, increments @arg to point to the next string in
+ * the array unless it already points to a null string, and stores into
+ * @present a value of 0 or 1 indicating whether or not a process id is
+ * present, and stores into @pid the unpacked process id (or zero if there
+ * is no process present or an error occurred). If an error occured, sets
+ * the flag pointed to by @err and printes an error message.
+ **/
+
+void retrieve_pid(char ***arg, char *jobname, int *err,
+ pid_t *pid, int *present)
+{
+ *pid = 0;
+ *present = 0;
+ char *str;
+ if (! arg || ! *arg || ! **arg) {
+ nih_error("Ran out of arguments when restoring job %s",
+ jobname);
+ *err = 1;
+ return;
+ }
+ str = **arg;
+ if (str) ++(*arg);
+ if (strcmp(str, "X")==0) return;
+ *present = 1;
+ *pid = unpack_pid(str, err);
+ if (*err) nih_error("Cannot parse pid %s for job %s", str, jobname);
+}
+
+/**
+ * restore_pid:
+ * @proc: pointer to a JobProcess structure, or NULL
+ * @pid: process id
+ * @present: integer which is 1 if process id is applicable
+ * @jobname: name of job whose process ids are being restored
+ *
+ * Checks that the non-null status of @proc matches the true/false
+ * status of @present. If there is a mismatch, prints an error message.
+ * If @present is true and @proc is non-null, stores the process id from
+ * @pid into the JobProcess structure pointed to by @proc.
+ */
+
+void restore_pid(JobProcess *proc, pid_t pid, int present, char *jobname)
+{
+ if (proc == NULL && ! present) return;
+ if (proc != NULL && present) {
+ proc->pid = pid;
+ return;
+ }
+ nih_error("Unable to restore process id for job %s", jobname);
+}
+
+/**
+ * save_current_configuration:
+ * @args: array of arguments to pass to new init
+ * @parent: parent of @args
+ * @len: current length of @args
+ *
+ * Pushes, onto the array @args, information about currently running
+ * jobs. Each job consists of seven arguments:
+ * (1) The job name
+ * (2) A 3-character state/goal string:
+ * First character for the goal: 0=goal JOB_STOP, 1=goal JOB_START
+ * Second character for the current state:
+ * W=JOB_WAITING,
+ * S=JOB_STARTING, A=JOB_PRE_START, B=JOB_SPAWNED, C=JOB_POST_START,
+ * R=JOB_RUNNING,
+ * T=JOB_STOPPING, X=JOB_PRE_STOP, Y=JOB_KILLED, Z=JOB_POST_STOP
+ * Third character: N=normal job, I=instance job
+ * (3) The associated PROCESS_MAIN process id
+ * (4) The associated PROCESS_PRE_START process id
+ * (5) The associated PROCESS_POST_START process id
+ * (6) The associated PROCESS_PRE_STOP process id
+ * (7) The associated PROCESS_POST_STOP process id
+ * Process ids are in hexadecimal using lower-case letters (0-9,a-f),
+ * or 0 if there is a JobProcess structure but no running process, or
+ * "X" if there is no JobProcess structure.
+ *
+ */
+
+void save_current_configuration(char ***args, const void *parent, size_t *len)
+{
+ NIH_HASH_FOREACH(jobs, iter) {
+ Job *job = (Job *) iter;
+ char goal_state[4];
+ JobProcess **pids;
+
+
+ if (job->replacement_for != NULL) continue;
+ if (job->state == JOB_DELETED) continue;
+ if (job->instance && ! job->instance_of) continue;
+
+ if (! nih_str_array_add(args, parent, len, job->name))
+ return;
+
+ if (job->goal == JOB_START) goal_state[0] = '1';
+ else goal_state[0] = '0';
+
+ switch (job->state)
+ {
+ case JOB_WAITING: goal_state[1] = 'W'; break;
+ case JOB_STARTING: goal_state[1] = 'S'; break;
+ case JOB_PRE_START: goal_state[1] = 'A'; break;
+ case JOB_SPAWNED: goal_state[1] = 'B'; break;
+ case JOB_POST_START: goal_state[1] = 'C'; break;
+ case JOB_RUNNING: goal_state[1] = 'R'; break;
+ case JOB_STOPPING: goal_state[1] = 'T'; break;
+ case JOB_PRE_STOP: goal_state[1] = 'X'; break;
+ case JOB_KILLED: goal_state[1] = 'Y'; break;
+ case JOB_POST_STOP: goal_state[1] = 'Z'; break;
+ default: goal_state[1] = '?';
+ }
+ if (job->instance_of) goal_state[2] = 'I';
+ else goal_state[2] = 'N';
+ goal_state[3] = 0;
+
+ if (! nih_str_array_add(args, parent, len, goal_state))
+ return;
+
+ pids = job->process;
+ store_pid(pids[PROCESS_MAIN], args, parent, len);
+ store_pid(pids[PROCESS_PRE_START], args, parent, len);
+ store_pid(pids[PROCESS_POST_START], args, parent, len);
+ store_pid(pids[PROCESS_PRE_STOP], args, parent, len);
+ store_pid(pids[PROCESS_POST_STOP], args, parent, len);
+ }
+}
+
+/**
+ * restore_job_state:
+ * @jobname: name of job whose state we are to restore
+ * @goal_state: the goal/state string generated by save_current_configuration
+ * @pids: array of five process ids
+ * @presents: array of five integers indicating which process ids are applicable
+ */
+
+void restore_job_state (char *jobname, char *goal_state,
+ pid_t *pids, int *presents)
+{
+ Job *job;
+ JobGoal goal = JOB_STOP;
+ JobState state = JOB_WAITING;
+ int is_instance = 0;
+ int is_invalid = 0;
+ JobProcess **procs;
+
+ if (jobname == NULL) {
+ nih_error("Missing name for restored job");
+ return;
+ }
+
+ if (goal_state == NULL) {
+ nih_error("Missing goal/state for restored job %s", jobname);
+ return;
+ }
+
+ if (strlen(goal_state) != 3) {
+ nih_error("Invalid length goal/state %s for restored job %s",
+ goal_state, jobname);
+ return;
+ }
+
+ switch (goal_state[0])
+ {
+ case '0': goal = JOB_STOP; break;
+ case '1': goal = JOB_START; break;
+ default: is_invalid = 1; break;
+ }
+
+ switch (goal_state[1])
+ {
+ case 'W': state = JOB_WAITING; break;
+ case 'S': state = JOB_STARTING; break;
+ case 'A': state = JOB_PRE_START; break;
+ case 'B': state = JOB_SPAWNED; break;
+ case 'C': state = JOB_POST_START; break;
+ case 'R': state = JOB_RUNNING; break;
+ case 'T': state = JOB_STOPPING; break;
+ case 'X': state = JOB_PRE_STOP; break;
+ case 'Y': state = JOB_KILLED; break;
+ case 'Z': state = JOB_POST_STOP; break;
+ default: is_invalid = 1;
+ }
+
+ switch (goal_state[2])
+ {
+ case 'N': break;
+ case 'I': is_instance = 1; break;
+ default: is_invalid = 1;
+ }
+
+ if (is_invalid) {
+ nih_error("Invalid goal/state %s for restored job %s",
+ goal_state, jobname);
+ return;
+ }
+ job = job_find_by_name(jobname);
+ if (! job) {
+ nih_error("Unknown job %s passed to re-exec", jobname);
+ return;
+ }
+ if (is_instance) {
+ if (! job->instance) {
+ nih_error("Can not restore job %s as instance job",
+ jobname);
+ return;
+ }
+ job = job_instance(job);
+ } else {
+ if (job->instance) {
+ nih_error("Can not restore job %s as non-instance job",
+ jobname);
+ return;
+ }
+ }
+ job->goal = goal;
+ job->state = state;
+ procs=job->process;
+ restore_pid(procs[PROCESS_MAIN], pids[0], presents[0], jobname);
+ restore_pid(procs[PROCESS_PRE_START], pids[1], presents[1], jobname);
+ restore_pid(procs[PROCESS_POST_START], pids[2], presents[2], jobname);
+ restore_pid(procs[PROCESS_PRE_STOP], pids[3], presents[3], jobname);
+ restore_pid(procs[PROCESS_POST_STOP], pids[4], presents[4], jobname);
+}
+
+/**
+ * restore_current_configuration:
+ * @args: non-option arguments that were passed to the new init
+ */
+
+void restore_configuration(char **args)
+{
+ if (! args) return;
+
+ char **arg = args;
+ while (arg && *arg) {
+ char *jobname = *(arg++);
+ char *goal_state = *arg;
+ pid_t pids[5];
+ int presents[5];
+ int is_invalid = 0;
+
+ if (*arg) ++arg;
+ for (int i = 0; i < 5; i++)
+ retrieve_pid(&arg, jobname, &is_invalid,
+ &pids[i], &presents[i]);
+
+ if (! is_invalid)
+ restore_job_state (jobname, goal_state, pids, presents);
+ }
+}
diff -uNr upstart-0.3.9.orig/init/restore.h upstart-0.3.9/init/restore.h
--- upstart-0.3.9.orig/init/restore.h 1969-12-31 19:00:00.000000000 -0500
+++ upstart-0.3.9/init/restore.h 2009-01-23 13:44:54.000000000 -0500
@@ -0,0 +1,13 @@
+#ifndef INIT_RESTORE_H
+#define INIT_RESTORE_H
+
+#include <nih/string.h>
+
+NIH_BEGIN_EXTERN
+
+void save_current_configuration(char ***args, const void *parent, size_t *len);
+void restore_configuration(char **args);
+
+NIH_END_EXTERN
+
+#endif /* INIT_RESTORE_H */

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,55 +0,0 @@
diff --git a/init/main.c b/init/main.c
index 2836583..0fb6a64 100644
--- a/init/main.c
+++ b/init/main.c
@@ -66,6 +66,7 @@ static void cad_handler (void *data, NihSignal *signal);
static void kbd_handler (void *data, NihSignal *signal);
static void pwr_handler (void *data, NihSignal *signal);
static void hup_handler (void *data, NihSignal *signal);
+static void usr1_handler (void *data, NihSignal *signal);
#endif /* DEBUG */
@@ -234,6 +235,10 @@ main (int argc,
/* SIGHUP instructs us to re-load our configuration */
nih_signal_set_handler (SIGHUP, nih_signal_handler);
NIH_MUST (nih_signal_add_handler (NULL, SIGHUP, hup_handler, NULL));
+
+ /* SIGHUSR1 instructs us to reconnect to system bus */
+ nih_signal_set_handler (SIGUSR1, nih_signal_handler);
+ NIH_MUST (nih_signal_add_handler (NULL, SIGUSR1, usr1_handler, NULL));
#endif /* DEBUG */
@@ -465,4 +470,31 @@ hup_handler (void *data,
}
}
}
+
+/**
+ * usr1_handler:
+ * @data: unused,
+ * @signal: signal that called this handler.
+ *
+ * Handle having recieved the SIGHUSR1 signal, which we use to instruct us to
+ * connect to system bus.
+ **/
+static void
+usr1_handler (void *data,
+ NihSignal *signal)
+{
+
+ if (! control_bus) {
+ nih_info (_("Connecting to system bus"));
+
+ if (control_bus_open () < 0) {
+ NihError *err;
+
+ err = nih_error_get ();
+ nih_warn ("%s: %s", _("Unable to connect to the system bus"),
+ err->message);
+ nih_free (err);
+ }
+ }
+}
#endif /* DEBUG */

View file

@ -1,217 +0,0 @@
Name: upstart
Version: 0.6.3
Release: 7%{?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.bz2
Source1: init-system-dbus.conf
# remove tests which fail in koji
Patch0: upstart-remove-tests.patch
Patch1: upstart-telinit.patch
Patch2: upstart-audit-events.patch
# pulled from https://bugs.launchpad.net/ubuntu/+source/upstart/+bug/436758
# sparc specific allignment errors
Patch3: upstart-nih-alloc.patch
# SIGUSR1 handler - connect to system dbus
Patch4: upstart-usr1-handler.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
Obsoletes: SysVinit < 2.86-24, sysvinit < 2.86-24
Provides: SysVinit = 2.86-24, sysvinit = 2.86-24
BuildRequires: gettext, audit-libs-devel, expat-devel
BuildRequires: dbus-devel >= 1:1.2.16
%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.
%prep
%setup -q
%patch0 -p1 -b .tests
%patch1 -p1 -b .u
%patch2 -p1 -b .audit
%patch3 -p1 -b .alignment
%patch4 -p1 -b .usr1
%build
%configure --sbindir=/sbin --libdir=/%{_lib}
make %{?_smp_mflags}
%install
rm -rf %{buildroot}
make install DESTDIR=%{buildroot}
# libupstart and libnih aren't shipped
rm -f %{buildroot}/%{_lib}/libupstart.*
rm -f %{buildroot}/%{_lib}/libnih.*
rm -f %{buildroot}/%{_includedir}/libnih.h
rm -f %{buildroot}/%{_includedir}/libupstart.h
rm -rf %{buildroot}/%{_includedir}/nih
rm -rf %{buildroot}/%{_includedir}/upstart
rm -rf %{buildroot}/%{_datadir}/aclocal/compiler.m4
rm -rf %{buildroot}/%{_datadir}/aclocal/linker.m4
rm -rf %{buildroot}/%{_datadir}/aclocal/misc.m4
# don't ship default jobs
rm -f %{buildroot}/%{_sysconfdir}/init/*
install -m 644 %{SOURCE1} %{buildroot}/%{_sysconfdir}/init/
%find_lang %{name}
%check
make check
%clean
rm -rf %{buildroot}
%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
/sbin/halt
/sbin/init
/sbin/initctl
/sbin/poweroff
/sbin/reboot
/sbin/runlevel
/sbin/shutdown
/sbin/start
/sbin/status
/sbin/stop
/sbin/restart
/sbin/telinit
%{_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/halt.8.gz
%{_mandir}/man8/init.8.gz
%{_mandir}/man8/initctl.8.gz
%{_mandir}/man8/poweroff.8.gz
%{_mandir}/man8/reboot.8.gz
%{_mandir}/man8/runlevel.8.gz
%{_mandir}/man8/shutdown.8.gz
%{_mandir}/man8/start.8.gz
%{_mandir}/man8/status.8.gz
%{_mandir}/man8/stop.8.gz
%{_mandir}/man8/telinit.8.gz
%changelog
* 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