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