summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Winship <danw@redhat.com>2015-01-19 11:20:42 -0500
committerDan Winship <danw@redhat.com>2015-01-19 11:20:42 -0500
commit1c435dc87478d0bd917f555d16f1ad7dbf6c1e96 (patch)
treea796793e960dc6779d97d43770e8025be11c027a
parent1bc942b1426e36866f58043913750d0f0e75c453 (diff)
parent849ae9eed68fb816f500ed80843ffb4b075dd9b4 (diff)
downloadNetworkManager-1c435dc87478d0bd917f555d16f1ad7dbf6c1e96.tar.gz
dispatcher: merge branch 'danw/dispatcher-external-bgo742588'
https://bugzilla.gnome.org/show_bug.cgi?id=742588
-rw-r--r--callouts/nm-dispatcher-api.h1
-rw-r--r--callouts/nm-dispatcher-utils.c15
-rw-r--r--callouts/tests/Makefile.am9
-rw-r--r--callouts/tests/dispatcher-down (renamed from callouts/tests/dispatcher-old-down)3
-rw-r--r--callouts/tests/dispatcher-external33
-rw-r--r--callouts/tests/dispatcher-up (renamed from callouts/tests/dispatcher-old-up)3
-rw-r--r--callouts/tests/dispatcher-vpn-down (renamed from callouts/tests/dispatcher-old-vpn-down)3
-rw-r--r--callouts/tests/dispatcher-vpn-up (renamed from callouts/tests/dispatcher-old-vpn-up)3
-rw-r--r--callouts/tests/test-dispatcher-envp.c43
-rw-r--r--man/NetworkManager.xml13
-rw-r--r--src/nm-dispatcher.c5
11 files changed, 107 insertions, 24 deletions
diff --git a/callouts/nm-dispatcher-api.h b/callouts/nm-dispatcher-api.h
index 9b2c3b32cb..71410939cb 100644
--- a/callouts/nm-dispatcher-api.h
+++ b/callouts/nm-dispatcher-api.h
@@ -32,6 +32,7 @@
#define NMD_CONNECTION_PROPS_PATH "path"
#define NMD_CONNECTION_PROPS_FILENAME "filename"
+#define NMD_CONNECTION_PROPS_EXTERNAL "external"
#define NMD_DEVICE_PROPS_INTERFACE "interface"
#define NMD_DEVICE_PROPS_IP_INTERFACE "ip-interface"
diff --git a/callouts/nm-dispatcher-utils.c b/callouts/nm-dispatcher-utils.c
index e84b5669cd..82ae353ad6 100644
--- a/callouts/nm-dispatcher-utils.c
+++ b/callouts/nm-dispatcher-utils.c
@@ -333,8 +333,9 @@ nm_dispatcher_utils_construct_envp (const char *action,
char **out_iface)
{
const char *iface = NULL, *ip_iface = NULL;
- const char *uuid = NULL, *id = NULL, *path;
+ const char *uuid = NULL, *id = NULL, *path = NULL;
const char *filename = NULL;
+ gboolean external;
NMDeviceState dev_state = NM_DEVICE_STATE_UNKNOWN;
GVariant *value;
char **envp = NULL, *path_item;
@@ -350,10 +351,20 @@ nm_dispatcher_utils_construct_envp (const char *action,
if (!strcmp (action, "hostname"))
goto done;
- /* config filename */
+ /* Connection properties */
+ if (!g_variant_lookup (connection_props, NMD_CONNECTION_PROPS_PATH, "&o", &path)) {
+ g_warning ("Missing or invalid required value " NMD_CONNECTION_PROPS_PATH "!");
+ return NULL;
+ }
+ items = g_slist_prepend (items, g_strdup_printf ("CONNECTION_DBUS_PATH=%s", path));
+
+ if (g_variant_lookup (connection_props, NMD_CONNECTION_PROPS_EXTERNAL, "b", &external) && external)
+ items = g_slist_prepend (items, g_strdup ("CONNECTION_EXTERNAL=1"));
+
if (g_variant_lookup (connection_props, NMD_CONNECTION_PROPS_FILENAME, "&s", &filename))
items = g_slist_prepend (items, g_strdup_printf ("CONNECTION_FILENAME=%s", filename));
+
/* Canonicalize the VPN interface name; "" is used when passing it through
* D-Bus so make sure that's fixed up here.
*/
diff --git a/callouts/tests/Makefile.am b/callouts/tests/Makefile.am
index f8fd82b7ea..3d16d74e25 100644
--- a/callouts/tests/Makefile.am
+++ b/callouts/tests/Makefile.am
@@ -33,7 +33,8 @@ TESTS = test-dispatcher-envp
endif
EXTRA_DIST= \
- dispatcher-old-down \
- dispatcher-old-up \
- dispatcher-old-vpn-down \
- dispatcher-old-vpn-up
+ dispatcher-down \
+ dispatcher-external \
+ dispatcher-up \
+ dispatcher-vpn-down \
+ dispatcher-vpn-up
diff --git a/callouts/tests/dispatcher-old-down b/callouts/tests/dispatcher-down
index 80980856c4..f766595c1e 100644
--- a/callouts/tests/dispatcher-old-down
+++ b/callouts/tests/dispatcher-down
@@ -14,8 +14,9 @@ path=/org/freedesktop/NetworkManager/Devices/0
[env]
PATH=
CONNECTION_UUID=3fd2a33a-d81b-423f-ae99-e6baba742311
+CONNECTION_DBUS_PATH=/org/freedesktop/NetworkManager/Connections/5
CONNECTION_ID=Random Connection
-CONNECTION_FILENAME=/callouts/tests/dispatcher-old-down
+CONNECTION_FILENAME=/callouts/tests/dispatcher-down
DEVICE_IFACE=wlan0
DEVICE_IP_IFACE=wlan0
diff --git a/callouts/tests/dispatcher-external b/callouts/tests/dispatcher-external
new file mode 100644
index 0000000000..5430bec28b
--- /dev/null
+++ b/callouts/tests/dispatcher-external
@@ -0,0 +1,33 @@
+[main]
+action=up
+expected-iface=virbr0
+uuid=92bbc2fb-7304-46be-8ebb-6093dbe19a6a
+id=virbr0
+external=1
+
+[device]
+state=100
+ip-interface=virbr0
+type=13
+interface=virbr0
+path=/org/freedesktop/NetworkManager/Devices/0
+
+[ip4]
+addresses=192.168.122.1/24 0.0.0.0
+domains=
+gateway=0.0.0.0
+
+[env]
+PATH=
+CONNECTION_UUID=92bbc2fb-7304-46be-8ebb-6093dbe19a6a
+CONNECTION_DBUS_PATH=/org/freedesktop/NetworkManager/Connections/5
+CONNECTION_FILENAME=/callouts/tests/dispatcher-external
+CONNECTION_ID=virbr0
+CONNECTION_EXTERNAL=1
+DEVICE_IFACE=virbr0
+DEVICE_IP_IFACE=virbr0
+IP4_NUM_ADDRESSES=1
+IP4_ADDRESS_0=192.168.122.1/24 0.0.0.0
+IP4_GATEWAY=0.0.0.0
+IP4_NUM_ROUTES=0
+
diff --git a/callouts/tests/dispatcher-old-up b/callouts/tests/dispatcher-up
index e4eb8e6c7b..463409e27c 100644
--- a/callouts/tests/dispatcher-old-up
+++ b/callouts/tests/dispatcher-up
@@ -33,8 +33,9 @@ domains=hsd1.mn.comcast.net.
[env]
PATH=
CONNECTION_UUID=3fd2a33a-d81b-423f-ae99-e6baba742311
+CONNECTION_DBUS_PATH=/org/freedesktop/NetworkManager/Connections/5
CONNECTION_ID=Random Connection
-CONNECTION_FILENAME=/callouts/tests/dispatcher-old-up
+CONNECTION_FILENAME=/callouts/tests/dispatcher-up
DEVICE_IFACE=wlan0
DEVICE_IP_IFACE=wlan0
IP4_ADDRESS_0=192.168.1.119/24 192.168.1.1
diff --git a/callouts/tests/dispatcher-old-vpn-down b/callouts/tests/dispatcher-vpn-down
index e702445011..18267f841d 100644
--- a/callouts/tests/dispatcher-old-vpn-down
+++ b/callouts/tests/dispatcher-vpn-down
@@ -33,8 +33,9 @@ domains=hsd1.mn.comcast.net.
[env]
PATH=
CONNECTION_UUID=355653c0-34d3-4777-ad25-f9a498b7ef8e
+CONNECTION_DBUS_PATH=/org/freedesktop/NetworkManager/Connections/5
CONNECTION_ID=Random Connection
-CONNECTION_FILENAME=/callouts/tests/dispatcher-old-vpn-down
+CONNECTION_FILENAME=/callouts/tests/dispatcher-vpn-down
DEVICE_IFACE=wlan0
DEVICE_IP_IFACE=tun0
IP4_ADDRESS_0=192.168.1.119/24 192.168.1.1
diff --git a/callouts/tests/dispatcher-old-vpn-up b/callouts/tests/dispatcher-vpn-up
index 619c6fec6b..181ecb53a6 100644
--- a/callouts/tests/dispatcher-old-vpn-up
+++ b/callouts/tests/dispatcher-vpn-up
@@ -33,8 +33,9 @@ domains=hsd1.mn.comcast.net.
[env]
PATH=
CONNECTION_UUID=355653c0-34d3-4777-ad25-f9a498b7ef8e
+CONNECTION_DBUS_PATH=/org/freedesktop/NetworkManager/Connections/5
CONNECTION_ID=Random Connection
-CONNECTION_FILENAME=/callouts/tests/dispatcher-old-vpn-up
+CONNECTION_FILENAME=/callouts/tests/dispatcher-vpn-up
DEVICE_IFACE=wlan0
DEVICE_IP_IFACE=tun0
IP4_ADDRESS_0=192.168.1.119/24 192.168.1.1
diff --git a/callouts/tests/test-dispatcher-envp.c b/callouts/tests/test-dispatcher-envp.c
index a715b62c26..527dc35c43 100644
--- a/callouts/tests/test-dispatcher-envp.c
+++ b/callouts/tests/test-dispatcher-envp.c
@@ -81,13 +81,21 @@ parse_main (GKeyFile *kf,
g_variant_builder_init (&props, G_VARIANT_TYPE ("a{sv}"));
g_variant_builder_add (&props, "{sv}",
- "connection-path",
+ NMD_CONNECTION_PROPS_PATH,
g_variant_new_object_path ("/org/freedesktop/NetworkManager/Connections/5"));
+
/* Strip out the non-fixed portion of the filename */
filename = strstr (filename, "/callouts");
g_variant_builder_add (&props, "{sv}",
"filename",
g_variant_new_string (filename));
+
+ if (g_key_file_get_boolean (kf, "main", "external", NULL)) {
+ g_variant_builder_add (&props, "{sv}",
+ "external",
+ g_variant_new_boolean (TRUE));
+ }
+
*out_con_props = g_variant_builder_end (&props);
return TRUE;
@@ -537,27 +545,33 @@ test_generic (const char *file, const char *override_vpn_ip_iface)
/*******************************************/
static void
-test_old_up (void)
+test_up (void)
+{
+ test_generic ("dispatcher-up", NULL);
+}
+
+static void
+test_down (void)
{
- test_generic ("dispatcher-old-up", NULL);
+ test_generic ("dispatcher-down", NULL);
}
static void
-test_old_down (void)
+test_vpn_up (void)
{
- test_generic ("dispatcher-old-down", NULL);
+ test_generic ("dispatcher-vpn-up", NULL);
}
static void
-test_old_vpn_up (void)
+test_vpn_down (void)
{
- test_generic ("dispatcher-old-vpn-up", NULL);
+ test_generic ("dispatcher-vpn-down", NULL);
}
static void
-test_old_vpn_down (void)
+test_external (void)
{
- test_generic ("dispatcher-old-vpn-down", NULL);
+ test_generic ("dispatcher-external", NULL);
}
static void
@@ -566,7 +580,7 @@ test_up_empty_vpn_iface (void)
/* Test that an empty VPN iface variable, like is passed through D-Bus
* from NM, is ignored by the dispatcher environment construction code.
*/
- test_generic ("dispatcher-old-up", "");
+ test_generic ("dispatcher-up", "");
}
/*******************************************/
@@ -580,10 +594,11 @@ main (int argc, char **argv)
g_type_init ();
#endif
- g_test_add_func ("/dispatcher/old_up", test_old_up);
- g_test_add_func ("/dispatcher/old_down", test_old_down);
- g_test_add_func ("/dispatcher/old_vpn_up", test_old_vpn_up);
- g_test_add_func ("/dispatcher/old_vpn_down", test_old_vpn_down);
+ g_test_add_func ("/dispatcher/up", test_up);
+ g_test_add_func ("/dispatcher/down", test_down);
+ g_test_add_func ("/dispatcher/vpn_up", test_vpn_up);
+ g_test_add_func ("/dispatcher/vpn_down", test_vpn_down);
+ g_test_add_func ("/dispatcher/external", test_external);
g_test_add_func ("/dispatcher/up_empty_vpn_iface", test_up_empty_vpn_iface);
diff --git a/man/NetworkManager.xml b/man/NetworkManager.xml
index 26f84e5e21..aa54fe1524 100644
--- a/man/NetworkManager.xml
+++ b/man/NetworkManager.xml
@@ -167,12 +167,25 @@
</para></listitem>
</varlistentry>
<varlistentry>
+ <term><varname>CONNECTION_DBUS_PATH</varname></term>
+ <listitem><para>
+ The NetworkManager D-Bus path of the connection.
+ </para></listitem>
+ </varlistentry>
+ <varlistentry>
<term><varname>CONNECTION_FILENAME</varname></term>
<listitem><para>
The backing file name of the connection profile (if any).
</para></listitem>
</varlistentry>
<varlistentry>
+ <term><varname>CONNECTION_EXTERNAL</varname></term>
+ <listitem><para>
+ If "1", this indicates that the connection describes a
+ network configuration created outside of NetworkManager.
+ </para></listitem>
+ </varlistentry>
+ <varlistentry>
<term><varname>DEVICE_IFACE</varname></term>
<listitem><para>
The interface name of the device.
diff --git a/src/nm-dispatcher.c b/src/nm-dispatcher.c
index 4e2002660c..4e0a05ed7d 100644
--- a/src/nm-dispatcher.c
+++ b/src/nm-dispatcher.c
@@ -491,6 +491,11 @@ _dispatcher_call (DispatcherAction action,
NMD_CONNECTION_PROPS_FILENAME,
filename);
}
+ if (nm_settings_connection_get_nm_generated_assumed (NM_SETTINGS_CONNECTION (connection))) {
+ value_hash_add_bool (connection_props,
+ NMD_CONNECTION_PROPS_EXTERNAL,
+ TRUE);
+ }
} else {
connection_hash = value_hash_create ();
connection_props = value_hash_create ();