summary refs log tree commit diff
path: root/src/nm-dispatcher.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nm-dispatcher.c')
-rw-r--r--src/nm-dispatcher.c87
1 files changed, 65 insertions, 22 deletions
diff --git a/src/nm-dispatcher.c b/src/nm-dispatcher.c
index df9be2e7..6c0c4bb4 100644
--- a/src/nm-dispatcher.c
+++ b/src/nm-dispatcher.c
@@ -29,27 +29,21 @@
 #include "NetworkManagerUtils.h"
 #include "nm-utils.h"
 #include "nm-connectivity.h"
-#include "nm-device.h"
+#include "devices/nm-device.h"
 #include "nm-dhcp4-config.h"
 #include "nm-dhcp6-config.h"
+#include "nm-proxy-config.h"
 #include "nm-ip4-config.h"
 #include "nm-ip6-config.h"
 #include "nm-manager.h"
-#include "nm-settings-connection.h"
-#include "nm-platform.h"
+#include "settings/nm-settings-connection.h"
+#include "platform/nm-platform.h"
 #include "nm-core-internal.h"
 
 #define CALL_TIMEOUT (1000 * 60 * 10)  /* 10 minutes for all scripts */
 
-#define _NMLOG_DOMAIN         LOGD_DISPATCH
-#define _NMLOG_PREFIX_NAME    "dispatcher"
-#define _NMLOG(level, ...) \
-    G_STMT_START { \
-        nm_log ((level), _NMLOG_DOMAIN, \
-                "%s: " _NM_UTILS_MACRO_FIRST(__VA_ARGS__), \
-                _NMLOG_PREFIX_NAME \
-                _NM_UTILS_MACRO_REST(__VA_ARGS__)); \
-    } G_STMT_END
+#define _NMLOG_DOMAIN      LOGD_DISPATCH
+#define _NMLOG(level, ...) __NMLOG_DEFAULT (level, _NMLOG_DOMAIN, "dispatcher", __VA_ARGS__)
 
 static GDBusProxy *dispatcher_proxy;
 static GHashTable *requests = NULL;
@@ -91,6 +85,29 @@ _get_monitor_by_action (DispatcherAction action)
 }
 
 static void
+dump_proxy_to_props (NMProxyConfig *proxy, GVariantBuilder *builder)
+{
+	const char *pac_url = NULL, *pac_script = NULL;
+
+	if (nm_proxy_config_get_method (proxy) == NM_PROXY_CONFIG_METHOD_NONE)
+		return;
+
+	pac_url = nm_proxy_config_get_pac_url (proxy);
+	if (pac_url) {
+		g_variant_builder_add (builder, "{sv}",
+		                       "pac-url",
+		                       g_variant_new_string (pac_url));
+	}
+
+	pac_script = nm_proxy_config_get_pac_script (proxy);
+	if (pac_script) {
+		g_variant_builder_add (builder, "{sv}",
+		                       "pac-script",
+		                       g_variant_new_string (pac_script));
+	}
+}
+
+static void
 dump_ip4_to_props (NMIP4Config *ip4, GVariantBuilder *builder)
 {
 	GVariantBuilder int_builder;
@@ -231,11 +248,13 @@ dump_ip6_to_props (NMIP6Config *ip6, GVariantBuilder *builder)
 static void
 fill_device_props (NMDevice *device,
                    GVariantBuilder *dev_builder,
+                   GVariantBuilder *proxy_builder,
                    GVariantBuilder *ip4_builder,
                    GVariantBuilder *ip6_builder,
                    GVariant **dhcp4_props,
                    GVariant **dhcp6_props)
 {
+	NMProxyConfig *proxy_config;
 	NMIP4Config *ip4_config;
 	NMIP6Config *ip6_config;
 	NMDhcp4Config *dhcp4_config;
@@ -254,6 +273,10 @@ fill_device_props (NMDevice *device,
 		g_variant_builder_add (dev_builder, "{sv}", NMD_DEVICE_PROPS_PATH,
 		                       g_variant_new_object_path (nm_exported_object_get_path (NM_EXPORTED_OBJECT (device))));
 
+	proxy_config = nm_device_get_proxy_config (device);
+	if (proxy_config)
+		dump_proxy_to_props (proxy_config, proxy_builder);
+
 	ip4_config = nm_device_get_ip4_config (device);
 	if (ip4_config)
 		dump_ip4_to_props (ip4_config, ip4_builder);
@@ -272,11 +295,15 @@ fill_device_props (NMDevice *device,
 }
 
 static void
-fill_vpn_props (NMIP4Config *ip4_config,
+fill_vpn_props (NMProxyConfig *proxy_config,
+                NMIP4Config *ip4_config,
                 NMIP6Config *ip6_config,
+                GVariantBuilder *proxy_builder,
                 GVariantBuilder *ip4_builder,
                 GVariantBuilder *ip6_builder)
 {
+	if (proxy_config)
+		dump_proxy_to_props (proxy_config, proxy_builder);
 	if (ip4_config)
 		dump_ip4_to_props (ip4_config, ip4_builder);
 	if (ip6_config)
@@ -454,6 +481,7 @@ _dispatcher_call (DispatcherAction action,
                   NMDevice *device,
                   NMConnectivityState connectivity_state,
                   const char *vpn_iface,
+                  NMProxyConfig *vpn_proxy_config,
                   NMIP4Config *vpn_ip4_config,
                   NMIP6Config *vpn_ip6_config,
                   DispatcherFunc callback,
@@ -463,10 +491,12 @@ _dispatcher_call (DispatcherAction action,
 	GVariant *connection_dict;
 	GVariantBuilder connection_props;
 	GVariantBuilder device_props;
+	GVariantBuilder device_proxy_props;
 	GVariantBuilder device_ip4_props;
 	GVariantBuilder device_ip6_props;
 	GVariant *device_dhcp4_props = NULL;
 	GVariant *device_dhcp6_props = NULL;
+	GVariantBuilder vpn_proxy_props;
 	GVariantBuilder vpn_ip4_props;
 	GVariantBuilder vpn_ip6_props;
 	DispatchInfo *info = NULL;
@@ -551,8 +581,10 @@ _dispatcher_call (DispatcherAction action,
 	}
 
 	g_variant_builder_init (&device_props, G_VARIANT_TYPE_VARDICT);
+	g_variant_builder_init (&device_proxy_props, G_VARIANT_TYPE_VARDICT);
 	g_variant_builder_init (&device_ip4_props, G_VARIANT_TYPE_VARDICT);
 	g_variant_builder_init (&device_ip6_props, G_VARIANT_TYPE_VARDICT);
+	g_variant_builder_init (&vpn_proxy_props, G_VARIANT_TYPE_VARDICT);
 	g_variant_builder_init (&vpn_ip4_props, G_VARIANT_TYPE_VARDICT);
 	g_variant_builder_init (&vpn_ip6_props, G_VARIANT_TYPE_VARDICT);
 
@@ -561,13 +593,16 @@ _dispatcher_call (DispatcherAction action,
 	    && action != DISPATCHER_ACTION_CONNECTIVITY_CHANGE) {
 		fill_device_props (device,
 		                   &device_props,
+		                   &device_proxy_props,
 		                   &device_ip4_props,
 		                   &device_ip6_props,
 		                   &device_dhcp4_props,
 		                   &device_dhcp6_props);
 		if (vpn_ip4_config || vpn_ip6_config) {
-			fill_vpn_props (vpn_ip4_config,
+			fill_vpn_props (vpn_proxy_config,
+			                vpn_ip4_config,
 			                vpn_ip6_config,
+			                &vpn_proxy_props,
 			                &vpn_ip4_props,
 			                &vpn_ip6_props);
 		}
@@ -584,17 +619,19 @@ _dispatcher_call (DispatcherAction action,
 		GVariantIter *results;
 
 		ret = _nm_dbus_proxy_call_sync (dispatcher_proxy, "Action",
-		                                g_variant_new ("(s@a{sa{sv}}a{sv}a{sv}a{sv}a{sv}@a{sv}@a{sv}ssa{sv}a{sv}b)",
+		                                g_variant_new ("(s@a{sa{sv}}a{sv}a{sv}a{sv}a{sv}a{sv}@a{sv}@a{sv}ssa{sv}a{sv}a{sv}b)",
 		                                               action_to_string (action),
 		                                               connection_dict,
 		                                               &connection_props,
 		                                               &device_props,
+		                                               &device_proxy_props,
 		                                               &device_ip4_props,
 		                                               &device_ip6_props,
 		                                               device_dhcp4_props,
 		                                               device_dhcp6_props,
 		                                               nm_connectivity_state_to_string (connectivity_state),
 		                                               vpn_iface ? vpn_iface : "",
+		                                               &vpn_proxy_props,
 		                                               &vpn_ip4_props,
 		                                               &vpn_ip6_props,
 		                                               nm_logging_enabled (LOGL_DEBUG, LOGD_DISPATCH)),
@@ -620,17 +657,19 @@ _dispatcher_call (DispatcherAction action,
 		info->callback = callback;
 		info->user_data = user_data;
 		g_dbus_proxy_call (dispatcher_proxy, "Action",
-		                   g_variant_new ("(s@a{sa{sv}}a{sv}a{sv}a{sv}a{sv}@a{sv}@a{sv}ssa{sv}a{sv}b)",
+		                   g_variant_new ("(s@a{sa{sv}}a{sv}a{sv}a{sv}a{sv}a{sv}@a{sv}@a{sv}ssa{sv}a{sv}a{sv}b)",
 		                                  action_to_string (action),
 		                                  connection_dict,
 		                                  &connection_props,
 		                                  &device_props,
+		                                  &device_proxy_props,
 		                                  &device_ip4_props,
 		                                  &device_ip6_props,
 		                                  device_dhcp4_props,
 		                                  device_dhcp6_props,
 		                                  nm_connectivity_state_to_string (connectivity_state),
 		                                  vpn_iface ? vpn_iface : "",
+		                                  &vpn_proxy_props,
 		                                  &vpn_ip4_props,
 		                                  &vpn_ip6_props,
 		                                  nm_logging_enabled (LOGL_DEBUG, LOGD_DISPATCH)),
@@ -680,7 +719,7 @@ nm_dispatcher_call (DispatcherAction action,
                     guint *out_call_id)
 {
 	return _dispatcher_call (action, FALSE, settings_connection, applied_connection, device,
-	                         NM_CONNECTIVITY_UNKNOWN, NULL, NULL, NULL,
+	                         NM_CONNECTIVITY_UNKNOWN, NULL, NULL, NULL, NULL,
 	                         callback, user_data, out_call_id);
 }
 
@@ -703,7 +742,7 @@ nm_dispatcher_call_sync (DispatcherAction action,
                          NMDevice *device)
 {
 	return _dispatcher_call (action, TRUE, settings_connection, applied_connection, device,
-	                         NM_CONNECTIVITY_UNKNOWN, NULL, NULL, NULL, NULL, NULL, NULL);
+	                         NM_CONNECTIVITY_UNKNOWN, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
 }
 
 /**
@@ -713,6 +752,7 @@ nm_dispatcher_call_sync (DispatcherAction action,
  * @applied_connection: the currently applied connection
  * @parent_device: the parent #NMDevice of the VPN connection
  * @vpn_iface: the IP interface of the VPN tunnel, if any
+ * @vpn_proxy_config: the #NMProxyConfig of the VPN connection
  * @vpn_ip4_config: the #NMIP4Config of the VPN connection
  * @vpn_ip6_config: the #NMIP6Config of the VPN connection
  * @callback: a caller-supplied callback to execute when done
@@ -731,6 +771,7 @@ nm_dispatcher_call_vpn (DispatcherAction action,
                         NMConnection *applied_connection,
                         NMDevice *parent_device,
                         const char *vpn_iface,
+                        NMProxyConfig *vpn_proxy_config,
                         NMIP4Config *vpn_ip4_config,
                         NMIP6Config *vpn_ip6_config,
                         DispatcherFunc callback,
@@ -738,8 +779,8 @@ nm_dispatcher_call_vpn (DispatcherAction action,
                         guint *out_call_id)
 {
 	return _dispatcher_call (action, FALSE, settings_connection, applied_connection,
-	                         parent_device, NM_CONNECTIVITY_UNKNOWN, vpn_iface, vpn_ip4_config,
-	                         vpn_ip6_config, callback, user_data, out_call_id);
+	                         parent_device, NM_CONNECTIVITY_UNKNOWN, vpn_iface, vpn_proxy_config,
+	                         vpn_ip4_config, vpn_ip6_config, callback, user_data, out_call_id);
 }
 
 /**
@@ -749,6 +790,7 @@ nm_dispatcher_call_vpn (DispatcherAction action,
  * @applied_connection: the currently applied connection
  * @parent_device: the parent #NMDevice of the VPN connection
  * @vpn_iface: the IP interface of the VPN tunnel, if any
+ * @vpn_proxy_config: the #NMProxyConfig of the VPN connection
  * @vpn_ip4_config: the #NMIP4Config of the VPN connection
  * @vpn_ip6_config: the #NMIP6Config of the VPN connection
  *
@@ -763,11 +805,12 @@ nm_dispatcher_call_vpn_sync (DispatcherAction action,
                              NMConnection *applied_connection,
                              NMDevice *parent_device,
                              const char *vpn_iface,
+                             NMProxyConfig *vpn_proxy_config,
                              NMIP4Config *vpn_ip4_config,
                              NMIP6Config *vpn_ip6_config)
 {
 	return _dispatcher_call (action, TRUE, settings_connection, applied_connection,
-	                         parent_device, NM_CONNECTIVITY_UNKNOWN, vpn_iface,
+	                         parent_device, NM_CONNECTIVITY_UNKNOWN, vpn_iface, vpn_proxy_config,
 	                         vpn_ip4_config, vpn_ip6_config, NULL, NULL, NULL);
 }
 
@@ -785,7 +828,7 @@ nm_dispatcher_call_connectivity (DispatcherAction action,
                                  NMConnectivityState connectivity_state)
 {
 	return _dispatcher_call (action, FALSE, NULL, NULL, NULL, connectivity_state,
-	                         NULL, NULL, NULL, NULL, NULL, NULL);
+	                         NULL, NULL, NULL, NULL, NULL, NULL, NULL);
 }
 
 void