Dimitri John Ledkov has proposed merging lp:~xnox/upstart/lp1433013 into 
lp:upstart.

Requested reviews:
  Upstart Reviewers (upstart-reviewers)
Related bugs:
  Bug #1433013 in upstart (Ubuntu): "Super -> exec vs Alt-F2 -> exec have 
different environment"
  https://bugs.launchpad.net/ubuntu/+source/upstart/+bug/1433013

For more details, see:
https://code.launchpad.net/~xnox/upstart/lp1433013/+merge/259317

This resolves the nasty 
https://bugs.launchpad.net/ubuntu/+source/upstart/+bug/1433013

To test in Unity, check that environment variables are sane in the terminal 
started from the left launcher, application lense, and Alt-F2.

In principle, variables that are set with initctl set-env --global should 
propagate to the DBus activation environment and hence to processes that are 
dbus activated there after - i.e. all the unity shell components.
-- 
Your team Upstart Reviewers is requested to review the proposed merge of 
lp:~xnox/upstart/lp1433013 into lp:upstart.
=== modified file 'dbus/Makefile.am'
--- dbus/Makefile.am	2009-07-02 17:31:25 +0000
+++ dbus/Makefile.am	2015-05-16 19:16:03 +0000
@@ -7,6 +7,7 @@
 
 EXTRA_DIST = \
 	upstart.h \
+	org.freedesktop.DBus.xml \
 	com.ubuntu.Upstart.xml \
 	com.ubuntu.Upstart.Job.xml \
 	com.ubuntu.Upstart.Instance.xml

=== added file 'dbus/org.freedesktop.DBus.xml'
--- dbus/org.freedesktop.DBus.xml	1970-01-01 00:00:00 +0000
+++ dbus/org.freedesktop.DBus.xml	2015-05-16 19:16:03 +0000
@@ -0,0 +1,9 @@
+<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
+"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd";>
+<node>
+  <interface name="org.freedesktop.DBus">
+    <method name="UpdateActivationEnvironment">
+      <arg name="vars" direction="in" type="a{ss}"/>
+    </method>
+  </interface>
+</node>

=== modified file 'init/Makefile.am'
--- init/Makefile.am	2014-07-11 19:18:09 +0000
+++ init/Makefile.am	2015-05-16 19:16:03 +0000
@@ -64,6 +64,7 @@
 	errors.h \
 	apparmor.c apparmor.h
 nodist_init_SOURCES = \
+	$(org_freedesktop_DBus_OUTPUTS) \
 	$(com_ubuntu_Upstart_OUTPUTS) \
 	$(com_ubuntu_Upstart_Job_OUTPUTS) \
 	$(com_ubuntu_Upstart_Instance_OUTPUTS)
@@ -125,14 +126,30 @@
 		--default-interface=com.ubuntu.Upstart0_6.Instance \
 		--output=$@ $<
 
+org_freedesktop_DBus_OUTPUTS = \
+	org.freedesktop.DBus.c \
+	org.freedesktop.DBus.h
+
+org_freedesktop_DBus_XML = \
+	../dbus/org.freedesktop.DBus.xml
+
+$(org_freedesktop_DBus_OUTPUTS): $(org_freedesktop_DBus_XML)
+	$(AM_V_GEN)$(NIH_DBUS_TOOL) \
+		--package=$(PACKAGE) \
+		--mode=proxy --prefix=control_dbus \
+		--default-interface=org.freedesktop.DBus \
+		--output=$@ $<
+
 # These have to be built sources because we can't compile object files
 # without the header file existing first
 BUILT_SOURCES = \
+	$(org_freedesktop_DBus_OUTPUTS) \
 	$(com_ubuntu_Upstart_OUTPUTS) \
 	$(com_ubuntu_Upstart_Job_OUTPUTS) \
 	$(com_ubuntu_Upstart_Instance_OUTPUTS)
 
 CLEANFILES = \
+	$(org_freedesktop_DBus_OUTPUTS) \
 	$(com_ubuntu_Upstart_OUTPUTS) \
 	$(com_ubuntu_Upstart_Job_OUTPUTS) \
 	$(com_ubuntu_Upstart_Instance_OUTPUTS)
@@ -231,6 +248,7 @@
 	job_class.o job_process.o job.o event.o event_operator.o blocked.o \
 	parse_job.o parse_conf.o conf.o control.o quiesce.o \
 	session.o log.o state.o xdg.o apparmor.o \
+	org.freedesktop.DBus.o \
 	com.ubuntu.Upstart.o \
 	com.ubuntu.Upstart.Job.o com.ubuntu.Upstart.Instance.o \
 	$(top_builddir)/test/libtest_util_common.a \
@@ -249,6 +267,7 @@
 	job_class.o job_process.o job.o event.o event_operator.o blocked.o \
 	parse_job.o parse_conf.o conf.o control.o quiesce.o \
 	session.o log.o state.o xdg.o apparmor.o \
+	org.freedesktop.DBus.o \
 	com.ubuntu.Upstart.o \
 	com.ubuntu.Upstart.Job.o com.ubuntu.Upstart.Instance.o \
 	$(NIH_LIBS) \
@@ -266,6 +285,7 @@
 	job_class.o job_process.o job.o event.o event_operator.o blocked.o \
 	parse_job.o parse_conf.o conf.o control.o quiesce.o \
 	session.o log.o state.o xdg.o apparmor.o \
+	org.freedesktop.DBus.o \
 	com.ubuntu.Upstart.o \
 	com.ubuntu.Upstart.Job.o com.ubuntu.Upstart.Instance.o \
 	$(top_builddir)/test/libtest_util_common.a \
@@ -284,6 +304,7 @@
 	job_class.o job_process.o job.o event.o event_operator.o blocked.o \
 	parse_job.o parse_conf.o conf.o control.o quiesce.o \
 	session.o log.o state.o xdg.o apparmor.o \
+	org.freedesktop.DBus.o \
 	com.ubuntu.Upstart.o \
 	com.ubuntu.Upstart.Job.o com.ubuntu.Upstart.Instance.o \
 	$(top_builddir)/test/libtest_util_common.a \
@@ -302,6 +323,7 @@
 	job_class.o job_process.o job.o event.o event_operator.o blocked.o \
 	parse_job.o parse_conf.o conf.o control.o quiesce.o \
 	session.o log.o state.o xdg.o apparmor.o \
+	org.freedesktop.DBus.o \
 	com.ubuntu.Upstart.o \
 	com.ubuntu.Upstart.Job.o com.ubuntu.Upstart.Instance.o \
 	$(top_builddir)/test/libtest_util_common.a \
@@ -320,6 +342,7 @@
 	job_class.o job_process.o job.o event.o event_operator.o blocked.o \
 	parse_job.o parse_conf.o conf.o control.o quiesce.o \
 	session.o log.o state.o xdg.o apparmor.o \
+	org.freedesktop.DBus.o \
 	com.ubuntu.Upstart.o \
 	com.ubuntu.Upstart.Job.o com.ubuntu.Upstart.Instance.o \
 	$(top_builddir)/test/libtest_util_common.a \
@@ -338,6 +361,7 @@
 	job_class.o job_process.o job.o event.o event_operator.o blocked.o \
 	parse_job.o parse_conf.o conf.o control.o quiesce.o \
 	session.o log.o state.o xdg.o apparmor.o \
+	org.freedesktop.DBus.o \
 	com.ubuntu.Upstart.o \
 	com.ubuntu.Upstart.Job.o com.ubuntu.Upstart.Instance.o \
 	$(NIH_LIBS) \
@@ -355,6 +379,7 @@
 	job_class.o job_process.o job.o event.o event_operator.o blocked.o \
 	parse_job.o parse_conf.o conf.o control.o quiesce.o \
 	session.o log.o state.o xdg.o apparmor.o \
+	org.freedesktop.DBus.o \
 	com.ubuntu.Upstart.o \
 	com.ubuntu.Upstart.Job.o com.ubuntu.Upstart.Instance.o \
 	$(top_builddir)/test/libtest_util_common.a \
@@ -373,6 +398,7 @@
 	job_class.o job_process.o job.o event.o event_operator.o blocked.o \
 	parse_job.o parse_conf.o conf.o control.o quiesce.o \
 	session.o log.o state.o xdg.o apparmor.o \
+	org.freedesktop.DBus.o \
 	com.ubuntu.Upstart.o \
 	com.ubuntu.Upstart.Job.o com.ubuntu.Upstart.Instance.o \
 	$(NIH_LIBS) \
@@ -390,6 +416,7 @@
 	job_class.o job_process.o job.o event.o event_operator.o blocked.o \
 	parse_job.o parse_conf.o conf.o control.o quiesce.o \
 	session.o log.o state.o xdg.o apparmor.o \
+	org.freedesktop.DBus.o \
 	com.ubuntu.Upstart.o \
 	com.ubuntu.Upstart.Job.o com.ubuntu.Upstart.Instance.o \
 	$(top_builddir)/test/libtest_util_common.a \
@@ -408,6 +435,7 @@
 	job_class.o job_process.o job.o event.o event_operator.o blocked.o \
 	parse_job.o parse_conf.o conf.o control.o quiesce.o \
 	session.o log.o state.o xdg.o apparmor.o \
+	org.freedesktop.DBus.o \
 	com.ubuntu.Upstart.o \
 	com.ubuntu.Upstart.Job.o com.ubuntu.Upstart.Instance.o \
 	$(NIH_LIBS) \
@@ -430,6 +458,7 @@
 	job_class.o job_process.o job.o event.o event_operator.o blocked.o \
 	parse_job.o parse_conf.o conf.o control.o quiesce.o \
 	session.o log.o state.o xdg.o apparmor.o \
+	org.freedesktop.DBus.o \
 	com.ubuntu.Upstart.o \
 	com.ubuntu.Upstart.Job.o com.ubuntu.Upstart.Instance.o \
 	$(top_builddir)/test/libtest_util_common.a \
@@ -448,6 +477,7 @@
 	job_class.o job_process.o job.o event.o event_operator.o blocked.o \
 	parse_job.o parse_conf.o control.o quiesce.o \
 	session.o log.o state.o xdg.o apparmor.o \
+	org.freedesktop.DBus.o \
 	com.ubuntu.Upstart.o \
 	com.ubuntu.Upstart.Job.o com.ubuntu.Upstart.Instance.o \
 	$(NIH_LIBS) \
@@ -479,6 +509,7 @@
 	job_class.o job_process.o job.o event.o event_operator.o blocked.o \
 	parse_job.o parse_conf.o conf.o control.o quiesce.o \
 	session.o log.o state.o xdg.o apparmor.o cgroup.o \
+	org.freedesktop.DBus.o \
 	com.ubuntu.Upstart.o \
 	com.ubuntu.Upstart.Job.o com.ubuntu.Upstart.Instance.o \
 	$(top_builddir)/test/libtest_util_common.a \
@@ -495,6 +526,7 @@
 	job_class.o job_process.o job.o event.o event_operator.o blocked.o \
 	parse_job.o parse_conf.o conf.o control.o quiesce.o \
 	session.o log.o state.o xdg.o apparmor.o \
+	org.freedesktop.DBus.o \
 	com.ubuntu.Upstart.o \
 	com.ubuntu.Upstart.Job.o com.ubuntu.Upstart.Instance.o \
 	$(NIH_LIBS) \
@@ -512,6 +544,7 @@
 	job_class.o job_process.o job.o event.o event_operator.o blocked.o \
 	parse_job.o parse_conf.o conf.o control.o quiesce.o \
 	session.o log.o state.o xdg.o apparmor.o \
+	org.freedesktop.DBus.o \
 	com.ubuntu.Upstart.o \
 	com.ubuntu.Upstart.Job.o com.ubuntu.Upstart.Instance.o \
 	$(top_builddir)/test/libtest_util_common.a \

=== modified file 'init/control.c'
--- init/control.c	2014-08-14 11:19:43 +0000
+++ init/control.c	2015-05-16 19:16:03 +0000
@@ -62,6 +62,7 @@
 #include "xdg.h"
 
 #include "com.ubuntu.Upstart.h"
+#include "org.freedesktop.DBus.h"
 
 #ifdef ENABLE_CGROUPS
 #include "cgroup.h"
@@ -1421,8 +1422,45 @@
 			nih_assert (job->env);
 
 			NIH_MUST (environ_add (&job->env, job, NULL, replace, envvar));
-		} else if (job_class_environment_set (envvar, replace) < 0) {
-			nih_return_no_memory_error (-1);
+		} else {
+			if (job_class_environment_set (envvar, replace) < 0) {
+				nih_return_no_memory_error (-1);
+			}
+			if (job_name == NULL && user_mode && control_bus ) {
+				ControlDbusUpdateActivationEnvironmentVarsElement **dbus_vars = NULL;
+				NihDBusProxy *dbus_proxy = NULL;
+				char ** split_vars = NULL;
+				dbus_vars = NIH_MUST (nih_alloc (NULL, sizeof (ControlDbusUpdateActivationEnvironmentVarsElement *) * 2));
+				dbus_vars[0] = NIH_MUST (nih_new (dbus_vars, ControlDbusUpdateActivationEnvironmentVarsElement));
+				dbus_vars[1] = NULL;
+				split_vars = NIH_MUST (nih_str_split (dbus_vars[0], envvar, "=", FALSE));
+				if (*split_vars && *split_vars[0]) {
+					dbus_vars[0]->item0 = *split_vars;
+				} else {
+					dbus_vars[0]->item0 = nih_strdup (dbus_vars[0], "");
+				}
+				if (*(split_vars+1) && *(split_vars+1)[0]) {
+					dbus_vars[0]->item1 = *(split_vars+1);
+				} else {
+					dbus_vars[0]->item1 = nih_strdup (dbus_vars[0], "");
+				}
+
+				dbus_proxy = NIH_SHOULD (nih_dbus_proxy_new (dbus_vars, control_bus, "org.freedesktop.DBus", "/", NULL, NULL));
+				if (! dbus_proxy) {
+					nih_warn (_("Failed to get dbus_proxy"));
+				} else {
+					if (control_dbus_update_activation_environment_sync (dbus_vars, dbus_proxy, dbus_vars) != 0) {
+						NihDBusError *dbus_err;
+						dbus_err = (NihDBusError *)nih_error_get ();
+						nih_error ("%s", dbus_err->message);
+						nih_free (dbus_err);
+						nih_warn ("dbus_vars[0] item0: %s", dbus_vars[0]->item0);
+						nih_warn ("dbus_vars[0] item1: %s", dbus_vars[0]->item1);
+						nih_warn (_("Failed to update DBus activation environment"));
+					}
+				}
+				nih_free(dbus_vars);
+			}
 		}
 	}
 

-- 
upstart-devel mailing list
upstart-devel@lists.ubuntu.com
Modify settings or unsubscribe at: 
https://lists.ubuntu.com/mailman/listinfo/upstart-devel

Reply via email to