diff --git a/ChangeLog b/ChangeLog index 8c6d78ce38..8c18702878 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2006-03-15 Robert Love + + * src/dhcp-manager/nm-dhcp-manager.c: Do not start dhcdbd, but rely on + the system init scripts (or some other mechanism) starting it (or a + compatible DBUS service) before NetworkManager runs. This means that + distributions might need to update their init scripts. This fixes + possible races and is quite a bit cleaner. + * initscript/SUSE/networkmanager.in: Update to start dhcdbd before + starting the NetworkManager daemon. + + 2006-03-14 Robert Love * src/backends/NetworkManagerSuSE.c: Check that we have a valid AP diff --git a/initscript/SUSE/networkmanager.in b/initscript/SUSE/networkmanager.in index df2cd24a2b..ada215c675 100644 --- a/initscript/SUSE/networkmanager.in +++ b/initscript/SUSE/networkmanager.in @@ -10,6 +10,9 @@ sbindir=@sbindir@ +DHCDBD_BIN=${sinbidr}/dhcdbd +test -x $DHCDBD_BIN || exit 5 + NETWORKMANAGER_BIN=${sbindir}/NetworkManager test -x $NETWORKMANAGER_BIN || exit 5 @@ -18,6 +21,12 @@ rc_reset case "$1" in start) + checkproc $DHCDBD_BIN + if [ $? != 0 ]; then + echo -n "Starting the DHCP DBUS Daemon" + startproc $DHCDBD_BIN --system + rc_status -v + fi checkproc $NETWORKMANAGER_BIN if [ $? = 0 ]; then echo -n "NetworkManager already running" @@ -32,6 +41,8 @@ case "$1" in echo -n "Shutting down the NetworkManager" killproc -TERM $NETWORKMANAGER_BIN rc_status -v + echo -n "Shutting down the DHCP DBUS Daemon" + killproc -TERM $DHCDBD_BIN ;; restart) $0 stop @@ -39,6 +50,9 @@ case "$1" in rc_status ;; status) + echo -n "Checking for the DHCP DBUS Daemon: " + checkproc $DHCDBD_BIN + rc_status -v echo -n "Checking for the NetworkManager: " checkproc $NETWORKMANAGER_BIN rc_status -v diff --git a/src/dhcp-manager/nm-dhcp-manager.c b/src/dhcp-manager/nm-dhcp-manager.c index 9c60a24b40..2c4b73e989 100644 --- a/src/dhcp-manager/nm-dhcp-manager.c +++ b/src/dhcp-manager/nm-dhcp-manager.c @@ -73,39 +73,6 @@ static gboolean state_is_down (guint8 state) } -/* - * nm_dhcp_manager_exec_daemon - * - * Launch the DHCP daemon. - * - */ -static gboolean nm_dhcp_manager_exec_daemon (NMDHCPManager *manager) -{ - GPtrArray *dhcp_argv; - GError *error = NULL; - GPid pid; - - g_return_val_if_fail (manager != NULL, FALSE); - - dhcp_argv = g_ptr_array_new (); - g_ptr_array_add (dhcp_argv, (gpointer) DHCDBD_BINARY_PATH); - g_ptr_array_add (dhcp_argv, (gpointer) "--system"); - g_ptr_array_add (dhcp_argv, NULL); - - if (!g_spawn_async ("/", (char **) dhcp_argv->pdata, NULL, 0, NULL, NULL, &pid, &error)) - { - g_ptr_array_free (dhcp_argv, TRUE); - nm_warning ("Could not activate the DHCP daemon " DHCDBD_BINARY_PATH ". error: '%s'.", error->message); - g_error_free (error); - return FALSE; - } - g_ptr_array_free (dhcp_argv, TRUE); - nm_info ("Activated the DHCP daemon " DHCDBD_BINARY_PATH " with PID %d.", pid); - - return TRUE; -} - - NMDHCPManager * nm_dhcp_manager_new (NMData *data) { NMDHCPManager * manager; @@ -153,9 +120,8 @@ guint32 nm_dhcp_manager_get_state_for_device (NMDHCPManager *manager, NMDevice * if (!manager->running) { - if (nm_dhcp_manager_exec_daemon (manager) == FALSE) - return 0; - sleep (1); + nm_warning ("dhcdbd not running!"); + return 0; } path = g_strdup_printf (DHCP_OBJECT_PATH"/%s", nm_device_get_iface (dev)); @@ -235,9 +201,8 @@ gboolean nm_dhcp_manager_begin_transaction (NMDHCPManager *manager, NMActRequest if (!manager->running) { - if (nm_dhcp_manager_exec_daemon (manager) == FALSE) - return FALSE; - sleep (1); + nm_warning ("dhcdbd not running!"); + return FALSE; } else {