From d05f8e07f6686cb9987ac07e83c516c522b52636 Mon Sep 17 00:00:00 2001
From: David Rothlisberger <david@rothlis.net>
Date: Mon, 31 Oct 2011 17:46:47 +0000
Subject: [PATCH] Pass DBUS_SYSTEM_BUS_ADDRESS environment variable to dhclient.

So that dhclient will, in turn, pass it to the action script
(the action script tries to send a DBus signal to NetworkManager
over the system bus).

Dhclient "execve"s the action script with a hand-constructed environment
that only includes specific variables, plus whatever is passed to
dhclient with "-e".

As far as I know, dhcpcd has no option equivalent to dhclient's "-e".
---
 src/dhcp-manager/nm-dhcp-dhclient.c |   12 ++++++++++--
 1 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/dhcp-manager/nm-dhcp-dhclient.c b/src/dhcp-manager/nm-dhcp-dhclient.c
index 558386d..c2afb76 100644
--- a/src/dhcp-manager/nm-dhcp-dhclient.c
+++ b/src/dhcp-manager/nm-dhcp-dhclient.c
@@ -418,8 +418,8 @@ dhclient_start (NMDHCPClient *client,
 	GPtrArray *argv = NULL;
 	GPid pid = -1;
 	GError *error = NULL;
-	const char *iface, *uuid;
-	char *binary_name, *cmd_str;
+	const char *iface, *uuid, *system_bus_address;
+	char *binary_name, *cmd_str, *system_bus_address_env = NULL;
 	gboolean ipv6;
 	guint log_domain;
 
@@ -489,6 +489,13 @@ dhclient_start (NMDHCPClient *client,
 		g_ptr_array_add (argv, (gpointer) priv->conf_file);
 	}
 
+	system_bus_address = getenv("DBUS_SYSTEM_BUS_ADDRESS");
+	if (system_bus_address) {
+		system_bus_address_env = g_strjoin ("=", "DBUS_SYSTEM_BUS_ADDRESS", system_bus_address, NULL);
+		g_ptr_array_add (argv, (gpointer) "-e");
+		g_ptr_array_add (argv, (gpointer) system_bus_address_env);
+	}
+
 	g_ptr_array_add (argv, (gpointer) iface);
 	g_ptr_array_add (argv, NULL);
 
@@ -505,6 +512,7 @@ dhclient_start (NMDHCPClient *client,
 		nm_log_info (log_domain, "dhclient started with pid %d", pid);
 
 	g_ptr_array_free (argv, TRUE);
+	g_free(system_bus_address_env);
 	return pid;
 }
 
-- 
1.7.3.2

