summaryrefslogtreecommitdiff
path: root/src/dhcp-manager/nm-dhcp-dhcpcd.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/dhcp-manager/nm-dhcp-dhcpcd.c')
-rw-r--r--src/dhcp-manager/nm-dhcp-dhcpcd.c40
1 files changed, 12 insertions, 28 deletions
diff --git a/src/dhcp-manager/nm-dhcp-dhcpcd.c b/src/dhcp-manager/nm-dhcp-dhcpcd.c
index 8345034b84..98b54b10f4 100644
--- a/src/dhcp-manager/nm-dhcp-dhcpcd.c
+++ b/src/dhcp-manager/nm-dhcp-dhcpcd.c
@@ -37,38 +37,24 @@
#include "nm-utils.h"
#include "nm-logging.h"
#include "nm-posix-signals.h"
+#include "NetworkManagerUtils.h"
G_DEFINE_TYPE (NMDhcpDhcpcd, nm_dhcp_dhcpcd, NM_TYPE_DHCP_CLIENT)
#define NM_DHCP_DHCPCD_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DHCP_DHCPCD, NMDhcpDhcpcdPrivate))
typedef struct {
- const char *path;
char *pid_file;
} NMDhcpDhcpcdPrivate;
const char *
-nm_dhcp_dhcpcd_get_path (const char *try_first)
+nm_dhcp_dhcpcd_get_path (void)
{
- static const char *dhcpcd_paths[] = {
- "/sbin/dhcpcd",
- "/usr/sbin/dhcpcd",
- "/usr/pkg/sbin/dhcpcd",
- "/usr/local/sbin/dhcpcd",
- NULL
- };
- const char **path = dhcpcd_paths;
-
- if (strlen (try_first) && g_file_test (try_first, G_FILE_TEST_EXISTS))
- return try_first;
-
- while (*path != NULL) {
- if (g_file_test (*path, G_FILE_TEST_EXISTS))
- break;
- path++;
- }
+ const char *path = NULL;
- return *path;
+ if (WITH_DHCPCD)
+ path = nm_utils_find_helper ("dhcpcd", DHCPCD_PATH, NULL);
+ return path;
}
static void
@@ -96,7 +82,7 @@ ip4_start (NMDhcpClient *client,
pid_t pid = -1;
GError *error = NULL;
char *pid_contents = NULL, *binary_name, *cmd_str;
- const char *iface;
+ const char *iface, *dhcpcd_path = NULL;
g_return_val_if_fail (priv->pid_file == NULL, FALSE);
@@ -107,18 +93,19 @@ ip4_start (NMDhcpClient *client,
*/
priv->pid_file = g_strdup_printf (RUNDIR "/dhcpcd-%s.pid", iface);
- if (!g_file_test (priv->path, G_FILE_TEST_EXISTS)) {
- nm_log_warn (LOGD_DHCP4, "%s does not exist.", priv->path);
+ dhcpcd_path = nm_dhcp_dhcpcd_get_path ();
+ if (!dhcpcd_path) {
+ nm_log_warn (LOGD_DHCP4, "dhcpcd could not be found");
return FALSE;
}
/* Kill any existing dhcpcd from the pidfile */
- binary_name = g_path_get_basename (priv->path);
+ binary_name = g_path_get_basename (dhcpcd_path);
nm_dhcp_client_stop_existing (priv->pid_file, binary_name);
g_free (binary_name);
argv = g_ptr_array_new ();
- g_ptr_array_add (argv, (gpointer) priv->path);
+ g_ptr_array_add (argv, (gpointer) dhcpcd_path);
g_ptr_array_add (argv, (gpointer) "-B"); /* Don't background on lease (disable fork()) */
@@ -202,9 +189,6 @@ stop (NMDhcpClient *client, gboolean release, const GByteArray *duid)
static void
nm_dhcp_dhcpcd_init (NMDhcpDhcpcd *self)
{
- NMDhcpDhcpcdPrivate *priv = NM_DHCP_DHCPCD_GET_PRIVATE (self);
-
- priv->path = nm_dhcp_dhcpcd_get_path (DHCPCD_PATH);
}
static void