summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2011-05-27 19:57:25 +0200
committerMichael Biebl <biebl@debian.org>2011-05-27 19:57:25 +0200
commitd465e5fac63f36bcf4069e36827f4b62c494556d (patch)
tree65f4ba9567e091233cdf3279f7ba3c9479e74a1c
parent9f806e97a24bba61417ae312fcc0da40914266fb (diff)
Imported Upstream version 0.8.9997upstream/0.8.9997
-rw-r--r--TODO158
-rw-r--r--callouts/nm-dispatcher-utils.c8
-rw-r--r--callouts/tests/dispatcher-old-down2
-rw-r--r--callouts/tests/dispatcher-old-up2
-rw-r--r--callouts/tests/dispatcher-old-vpn-down2
-rw-r--r--callouts/tests/dispatcher-old-vpn-up2
-rw-r--r--callouts/tests/test-dispatcher-envp.c77
-rw-r--r--config.h.in6
-rwxr-xr-xconfigure145
-rw-r--r--configure.ac28
-rw-r--r--data/NetworkManager-wait-online.service.in6
-rw-r--r--docs/api/html/NetworkManager.devhelp28
-rw-r--r--docs/api/html/NetworkManager.devhelp228
-rw-r--r--docs/api/html/index.html32
-rw-r--r--docs/api/html/ix01.html2
-rw-r--r--docs/api/html/ref-migrating.html58
-rw-r--r--docs/api/html/ref-settings.html36
-rw-r--r--docs/api/html/spec.html18
-rw-r--r--docs/api/spec.html18
-rw-r--r--docs/api/version.xml2
-rw-r--r--docs/libnm-glib/html/NMAccessPoint.html8
-rw-r--r--docs/libnm-glib/html/NMActiveConnection.html8
-rw-r--r--docs/libnm-glib/html/NMClient.html12
-rw-r--r--docs/libnm-glib/html/NMDevice.html52
-rw-r--r--docs/libnm-glib/html/NMRemoteConnection.html6
-rw-r--r--docs/libnm-glib/html/NMRemoteSettings.html4
-rw-r--r--docs/libnm-glib/html/NMSecretAgent.html30
-rw-r--r--docs/libnm-glib/html/NMWimaxNsp.html8
-rw-r--r--docs/libnm-glib/html/api-index-full.html12
-rw-r--r--docs/libnm-glib/html/ch02.html2
-rw-r--r--docs/libnm-glib/html/index.html2
-rw-r--r--docs/libnm-glib/html/index.sgml3
-rw-r--r--docs/libnm-glib/html/libnm-glib-NMVpnPluginUi.html28
-rw-r--r--docs/libnm-glib/html/libnm-glib.devhelp3
-rw-r--r--docs/libnm-glib/html/libnm-glib.devhelp23
-rw-r--r--docs/libnm-glib/html/object-tree.html2
-rw-r--r--docs/libnm-glib/libnm-glib-sections.txt2
-rw-r--r--docs/libnm-util/html/NMConnection.html1371
-rw-r--r--docs/libnm-util/html/NMSetting.html30
-rw-r--r--docs/libnm-util/html/NMSetting8021x.html60
-rw-r--r--docs/libnm-util/html/NMSettingConnection.html6
-rw-r--r--docs/libnm-util/html/NMSettingVPN.html8
-rw-r--r--docs/libnm-util/html/annotation-glossary.html6
-rw-r--r--docs/libnm-util/html/api-index-full.html98
-rw-r--r--docs/libnm-util/html/ch01.html10
-rw-r--r--docs/libnm-util/html/index.html3
-rw-r--r--docs/libnm-util/html/index.sgml63
-rw-r--r--docs/libnm-util/html/libnm-util.devhelp50
-rw-r--r--docs/libnm-util/html/libnm-util.devhelp253
-rw-r--r--docs/libnm-util/html/object-tree.html4
-rw-r--r--include/nm-version.h2
-rw-r--r--introspection/nm-active-connection.xml8
-rw-r--r--introspection/nm-device.xml8
-rw-r--r--introspection/nm-manager.xml3
-rw-r--r--libnm-glib/libnm-glib.ver2
-rw-r--r--libnm-glib/libnm_glib.c93
-rw-r--r--libnm-glib/nm-device-wifi.c30
-rw-r--r--libnm-glib/nm-device-wimax.c25
-rw-r--r--libnm-glib/nm-device.c202
-rw-r--r--libnm-glib/nm-device.h3
-rw-r--r--libnm-glib/nm-object.c31
-rw-r--r--libnm-glib/nm-types.c56
-rw-r--r--libnm-util/crypto.c94
-rw-r--r--libnm-util/crypto.h5
-rw-r--r--libnm-util/crypto_gnutls.c51
-rw-r--r--libnm-util/crypto_nss.c15
-rw-r--r--libnm-util/libnm-util.ver1
-rw-r--r--libnm-util/nm-connection.c9
-rw-r--r--libnm-util/nm-param-spec-specialized.c98
-rw-r--r--libnm-util/nm-setting-8021x.c108
-rw-r--r--libnm-util/nm-setting-8021x.h12
-rw-r--r--libnm-util/nm-setting-gsm.c22
-rw-r--r--libnm-util/nm-setting-vpn.c49
-rw-r--r--libnm-util/nm-setting.c25
-rw-r--r--libnm-util/nm-utils.c64
-rw-r--r--libnm-util/nm-utils.h1
-rw-r--r--libnm-util/tests/Makefile.am8
-rw-r--r--libnm-util/tests/Makefile.in8
-rw-r--r--libnm-util/tests/certs/Makefile.am5
-rw-r--r--libnm-util/tests/certs/Makefile.in5
-rw-r--r--libnm-util/tests/certs/pkcs8-decrypted.derbin0 -> 1194 bytes
-rw-r--r--libnm-util/tests/certs/pkcs8-enc-key.pem29
-rw-r--r--libnm-util/tests/certs/pkcs8-noenc-key.pem28
-rw-r--r--libnm-util/tests/test-crypto.c34
-rw-r--r--libnm-util/tests/test-general.c90
-rw-r--r--po/eo.po1417
-rw-r--r--policy/org.freedesktop.NetworkManager.policy16
-rw-r--r--src/NetworkManagerUtils.c36
-rw-r--r--src/backends/Makefile.am2
-rw-r--r--src/backends/Makefile.in8
-rw-r--r--src/dhcp-manager/nm-dhcp-dhclient-utils.c15
-rw-r--r--src/dns-manager/Makefile.am2
-rw-r--r--src/dns-manager/Makefile.in5
-rw-r--r--src/ip6-manager/Makefile.am2
-rw-r--r--src/ip6-manager/Makefile.in5
-rw-r--r--src/logging/nm-logging.c6
-rw-r--r--src/logging/nm-logging.h1
-rw-r--r--src/modem-manager/Makefile.am2
-rw-r--r--src/modem-manager/Makefile.in4
-rw-r--r--src/nm-device-interface.c8
-rw-r--r--src/nm-device-interface.h2
-rw-r--r--src/nm-device-wifi.c53
-rw-r--r--src/nm-device.c12
-rw-r--r--src/nm-dhcp4-config.c17
-rw-r--r--src/nm-dhcp4-config.h2
-rw-r--r--src/nm-dhcp6-config.c17
-rw-r--r--src/nm-dhcp6-config.h2
-rw-r--r--src/nm-manager-auth.c222
-rw-r--r--src/nm-manager-auth.h18
-rw-r--r--src/nm-manager.c152
-rw-r--r--src/nm-policy.c35
-rw-r--r--src/nm-session-monitor.c16
-rw-r--r--src/nm-udev-manager.c8
-rw-r--r--src/nm-wifi-ap.c39
-rw-r--r--src/nm-wifi-ap.h3
-rw-r--r--src/ppp-manager/nm-ppp-manager.c8
-rw-r--r--src/settings/Makefile.am1
-rw-r--r--src/settings/Makefile.in1
-rw-r--r--src/settings/nm-agent-manager.c29
-rw-r--r--src/settings/nm-polkit-helpers.h41
-rw-r--r--src/settings/nm-settings-connection.c204
-rw-r--r--src/settings/nm-settings.c64
-rw-r--r--src/settings/plugins/keyfile/writer.c33
-rw-r--r--src/vpn-manager/Makefile.am2
-rw-r--r--src/vpn-manager/Makefile.in4
-rw-r--r--src/wimax/nm-device-wimax.c62
-rw-r--r--test/nm-tool.c47
-rwxr-xr-xtools/check-exports.sh2
128 files changed, 4684 insertions, 1770 deletions
diff --git a/TODO b/TODO
index 6afd7f98f..1904f04d3 100644
--- a/TODO
+++ b/TODO
@@ -88,6 +88,11 @@ are still missing. If the wifi driver supports AP mode, then in
src/supplicant-manager/ NM should send an AP-mode config instead of sending
the adhoc config.
+Note that some devices (airo, ipw2100, ipw2200, iwl3945, iwl4965, atmel, zd1201)
+will never support AP mode due to firmware limitations, so we clearly must still
+provide Ad-Hoc connection sharing support for those devices and switch between
+Ad-Hoc and AP mode depending on device capabilities.
+
* On-Demand WiFi Scan support
@@ -189,15 +194,40 @@ signals. A patch here:
http://cgit.freedesktop.org/NetworkManager/NetworkManager/commit/?h=vpn-ip-method
-shows that, but internally NM needs to process this request, and instead of
-applying given IPv4 or IPv6 configuration (since there isn't any yet) it should
-kick off a DHCP request and wait for the request to finish. When it does
-finish it should apply the configuration to the interface. Most of the DHCP
-code is already written, but src/vpn-manager/nm-vpn-connection.c would need
-updates to recognize the new "method" property of the IP4Config signal and
-handle the DHCP lifetime after that. The base NMDevice class in nm-device.c
-has code for handling the DHCP lifetime, connecting to NMDHCPManager signals
-for renew and failure processing, etc, and could be used as an example.
+shows that. In nm-vpn-connection.c, upon receipt of the D-Bus Ip4Config signal
+from the VPN plugin, NetworkManager would inspect the "method" property of the
+ip4 config dictionary. If that property was present and set to "auto" then
+DHCP would be started using the network interface returned in the dict. The
+nm_vpn_connection_ip4_config_get() function should be split up into two
+functions, one containing the existing code for static configuration, and a
+second for handling DHCP kickoff. Minimal parsing of the response should be
+handled in the newly reduced nm_vpn_connection_ip4_config_get() function.
+
+To handle DHCP, the NMVPNConnectionPrivate structure should have two members
+added:
+
+ NMDHCPManager *dhcp_manager;
+ NMDHCPClient *dhcp4_client;
+
+which would be initialized in the new DHCP handler code split off from
+nm_vpn_connection_ip4_config_get(). These new members would be disposed of in
+both vpn_cleanup() and dispose(), though remember to stop any ongoing DHCP
+transaction when doing so (see dhcp4_cleanup() in nm-device.c for example code).
+For basic code to start the DHCP transaction, see dhcp4_start() in nm-device.c
+as well. After calling nm_dhcp_manager_start_ip4() and connecting the signals
+to monitor success and failure, the VPN IP4 config handler would simply return
+without changing VPN state, unless a failure occurred.
+
+Then, when the DHCP transaction succeeds, which we'd know by checking the
+DHCP client state changes in the "state-changed" signal handler we attached to
+the DHCP client object returned from nm_dhcp_manager_start_ip4(), the code
+would retrieve the completed NMIP4Config object from the DHCP client using the
+nm_dhcp_client_get_ip4_config() function, and then proceed to execute
+essentially the bottom-half of the existing nm_vpn_connection_ip4_config_get()
+function to merge that config with user overrides and apply it to the VPN
+tunnel interface. Other state changes from the DHCP client might trigger a
+failure of the VPN connection, just like DHCP timeouts and lease-renewal
+failures do for other devices (see dhcp_state_changed() in nm-device.c).
* WPS
@@ -243,3 +273,113 @@ association using WPS, since quite a few routers out there are broken, or
because the user has no physical access to the router itself, but has been given
as passphrase/PSK instead.
+
+* Proxies
+
+HTTP and other proxies are per-connection configuration. It's highly unlikely
+that the same proxy you need to use at work is used at home or in a coffee shop.
+Thus, it makes sense that which proxy settings to use should be updated when
+network connections change. NetworkManager is a perfect place to do this since
+it tracks which network connections are active, and it already queries the
+network for automatic proxy configuration via DHCP and WPAD.
+
+We should add a new NMSetting subclass called NMSettingProxy that holds
+necessary proxy configuration. The properties of this setting should be a
+superset of what is provided in the Firefox proxy configuration screen and the
+various desktop environment proxy configuration tools like the GNOME Network
+Proxy control panel; this should include at a minimum:
+
+ method: "auto", "manual", "none"
+ default-proxy: string
+ default-proxy-port: uint
+ default-always: boolean (use default proxy for all protocols)
+ ssl-proxy: string
+ ssl-proxy-port: uint
+ ftp-proxy: string
+ ftp-proxy-port: uint
+ socks-proxy: string
+ socks-proxy-port: uint
+ socks-version: uint, either 4 or 5
+ no-proxy-for: array of strings (things not to use the proxy for, ie ".foobar.com",
+ "192.168.0.1/24", an IPv6 address, etc)
+ pac-url: string (URL of PAC file, overrides DHCP-provided WPAD value)
+ (FIXME: proxy authentication? do we need separate user/pass properties for
+ each protocol type? should NM handle proxy auth or should it be punted
+ to each application?)
+
+After completing IP configuration but still during the NM_DEVICE_STATE_IP_CONFIG
+activation stage, NetworkManager would merge the automatically supplied proxy
+configuration (from DHCP's WPAD option) with user-provided overrides from the
+NMSettingProxy and send the results to the system. The 'default' connection's
+proxy configuration would be preferred, so we'd have to update proxy
+configuration from nm-policy.c the same time we update DNS information and the
+default route.
+
+The merged proxy configuration would then be sent to the system. There is no
+canonical proxy daemon in-use, so we should have plugins (if not separate
+shared libraries, then certainly encapsulated source files that implement a
+common glib GInterface or are subclasses of eg a parent NMProxyHandler class)
+that handle different system proxy handlers. Some of the proxy handlers are:
+
+ libproxy: need to figure out how it gets proxy info and have NM write merged
+ proxy config out to that location
+ pacrunner: a D-Bus enabled daemon, NM would call D-Bus methods of the
+ pacrunner service with the proxy information
+ GNOME/KDE: how do these desktop environments retrieve proxy configuration?
+
+
+* Bridging and Bonding Support
+
+The largest complication here is that NetworkManager normally operates on
+physical interfaces, while bridging and bonding involve tying multiple physical
+interfaces together into a logical interface. This has interesting implications
+for the D-Bus API and the NM device model. The first complication is that
+we may need to do 802.1x port authentication on an interface before it can
+communicate with the other side of the link, and those credentials may be
+different for each interface; thus we may need to do separate 802.1x
+operations on each interface that is part of a bridge/bond before adding each
+one to the master bridge/bond interface.
+
+In this way bridge/bond interfaces may be treated the same way as NetworkManager
+treats VPN interfaces already; one or more physical interface NMConnections must
+be activated before the master bridge/bond interface's NMConnection can be
+activated, though this all happens internally.
+
+To enable bridging and bonding in the NMConnection itself, we should create
+new NMSettingBridge and NMSettingBond classes that contain information specific
+to each. Both settings would contain a 'components' property with an
+'array of string' type which would contain the UUIDs of the Connections of
+physical interfaces that compose the bridge or bond. Thus NetworkManager would
+have the necessary information to tie lower-level interface configuration
+(802.1x, MTU, MAC address locking, duplex mode, speed, etc) to each physical
+interface that will be part of the bridge/bond, configure the interface with
+it, and then configure the master bridge/bond interface at upper layers using
+configuration specific for the bridge/bond interface (like IP details). Thus
+for a single active bridge, two or more NMConnections would be activated; one
+for each physical interface component of the bridge/bond, and one for the master
+bridge/bond interface itself.
+
+NMSettingBridge would contain at least the following keys:
+
+ components: (array of string) UUIDs of component connections
+ stp: (boolean) on to enable STP, off to disable
+
+NMSettingBond would contain at least the following keys:
+
+ components: (array of string) UUIDs of component connections
+ mode: (string) one of "balance-rr", "active-backup", "balance-xor",
+ "broadcast", "802.3ad", "balance-tlb", or "balance-alb"
+ monitor-interval: (uint) Specifies link monitoring interval (in milliseconds);
+ NM will always enable netlink carrier monitoring if this
+ value is non-zero so this property only affects speed and
+ duplex checking
+
+In the future we may consider adding other bonding parameters like "up-delay"
+and "down-delay".
+
+Then we'd add a 'component' (boolean) property to NMSettingConnection to
+indicate that the component interface connections were in fact components of
+a bridge or bond and shouldn't be automatically started by NetworkManager or
+displayed as separate connections in the user interface.
+
+TO BE CONTINUED
diff --git a/callouts/nm-dispatcher-utils.c b/callouts/nm-dispatcher-utils.c
index 97ee1a4be..887e80dda 100644
--- a/callouts/nm-dispatcher-utils.c
+++ b/callouts/nm-dispatcher-utils.c
@@ -410,6 +410,12 @@ nm_dispatcher_utils_construct_envp (const char *action,
if (!strcmp (action, "hostname"))
return g_new0 (char *, 1);
+ /* Canonicalize the VPN interface name; "" is used when passing it through
+ * D-Bus so make sure that's fixed up here.
+ */
+ if (vpn_ip_iface && !strlen (vpn_ip_iface))
+ vpn_ip_iface = NULL;
+
con_setting_hash = g_hash_table_lookup (connection_hash, NM_SETTING_CONNECTION_SETTING_NAME);
if (!con_setting_hash) {
g_warning ("Failed to read connection setting");
@@ -437,6 +443,8 @@ nm_dispatcher_utils_construct_envp (const char *action,
return NULL;
}
iface = g_value_get_string (value);
+ if (iface && !strlen (iface))
+ iface = NULL;
/* IP interface name */
value = g_hash_table_lookup (device_props, NMD_DEVICE_PROPS_IP_INTERFACE);
diff --git a/callouts/tests/dispatcher-old-down b/callouts/tests/dispatcher-old-down
index 4210921d3..6396287f7 100644
--- a/callouts/tests/dispatcher-old-down
+++ b/callouts/tests/dispatcher-old-down
@@ -1,6 +1,6 @@
[main]
action=down
-iface=wlan0
+expected-iface=wlan0
uuid=3fd2a33a-d81b-423f-ae99-e6baba742311
id=Random Connection
diff --git a/callouts/tests/dispatcher-old-up b/callouts/tests/dispatcher-old-up
index ed15fef54..76e3be8de 100644
--- a/callouts/tests/dispatcher-old-up
+++ b/callouts/tests/dispatcher-old-up
@@ -1,6 +1,6 @@
[main]
action=up
-iface=wlan0
+expected-iface=wlan0
uuid=3fd2a33a-d81b-423f-ae99-e6baba742311
id=Random Connection
diff --git a/callouts/tests/dispatcher-old-vpn-down b/callouts/tests/dispatcher-old-vpn-down
index b45d8ea85..c11cbfd1e 100644
--- a/callouts/tests/dispatcher-old-vpn-down
+++ b/callouts/tests/dispatcher-old-vpn-down
@@ -1,6 +1,6 @@
[main]
action=vpn-down
-iface=tun0
+expected-iface=tun0
uuid=355653c0-34d3-4777-ad25-f9a498b7ef8e
id=Random Connection
diff --git a/callouts/tests/dispatcher-old-vpn-up b/callouts/tests/dispatcher-old-vpn-up
index f3b502def..ad47c91d5 100644
--- a/callouts/tests/dispatcher-old-vpn-up
+++ b/callouts/tests/dispatcher-old-vpn-up
@@ -1,6 +1,6 @@
[main]
action=vpn-up
-iface=tun0
+expected-iface=tun0
uuid=355653c0-34d3-4777-ad25-f9a498b7ef8e
id=Random Connection
diff --git a/callouts/tests/test-dispatcher-envp.c b/callouts/tests/test-dispatcher-envp.c
index b4dbd784a..34b9dbf54 100644
--- a/callouts/tests/test-dispatcher-envp.c
+++ b/callouts/tests/test-dispatcher-envp.c
@@ -130,18 +130,21 @@ static gboolean
parse_main (GKeyFile *kf,
GHashTable **out_con_hash,
GHashTable **out_con_props,
- char **out_iface,
+ char **out_expected_iface,
char **out_action,
+ char **out_vpn_ip_iface,
GError **error)
{
char *uuid, *id;
NMConnection *connection;
NMSettingConnection *s_con;
- *out_iface = g_key_file_get_string (kf, "main", "iface", error);
- if (*out_iface == NULL)
+ *out_expected_iface = g_key_file_get_string (kf, "main", "expected-iface", error);
+ if (*out_expected_iface == NULL)
return FALSE;
+ *out_vpn_ip_iface = g_key_file_get_string (kf, "main", "vpn-ip-iface", NULL);
+
*out_action = g_key_file_get_string (kf, "main", "action", error);
if (*out_action == NULL)
return FALSE;
@@ -413,7 +416,7 @@ get_dispatcher_file (const char *file,
GHashTable **out_device_ip6_props,
GHashTable **out_device_dhcp4_props,
GHashTable **out_device_dhcp6_props,
- const char **out_vpn_ip_iface,
+ char **out_vpn_ip_iface,
GHashTable **out_vpn_ip4_props,
GHashTable **out_vpn_ip6_props,
char **out_expected_iface,
@@ -429,7 +432,13 @@ get_dispatcher_file (const char *file,
if (!g_key_file_load_from_file (kf, file, G_KEY_FILE_NONE, error))
return FALSE;
- if (!parse_main (kf, out_con_hash, out_con_props, out_expected_iface, out_action, error))
+ if (!parse_main (kf,
+ out_con_hash,
+ out_con_props,
+ out_expected_iface,
+ out_action,
+ out_vpn_ip_iface,
+ error))
goto out;
if (!parse_device (kf, out_device_props, error))
@@ -474,7 +483,7 @@ out:
/*******************************************/
static void
-test_generic (const char *path, const char *file)
+test_generic (const char *path, const char *file, const char *override_vpn_ip_iface)
{
GHashTable *con_hash = NULL;
GHashTable *con_props = NULL;
@@ -483,7 +492,7 @@ test_generic (const char *path, const char *file)
GHashTable *device_ip6_props = NULL;
GHashTable *device_dhcp4_props = NULL;
GHashTable *device_dhcp6_props = NULL;
- const char *vpn_ip_iface = NULL;
+ char *vpn_ip_iface = NULL;
GHashTable *vpn_ip4_props = NULL;
GHashTable *vpn_ip6_props = NULL;
char *expected_iface = NULL;
@@ -525,25 +534,31 @@ test_generic (const char *path, const char *file)
device_ip6_props,
device_dhcp4_props,
device_dhcp6_props,
- vpn_ip_iface,
+ override_vpn_ip_iface ? override_vpn_ip_iface : vpn_ip_iface,
vpn_ip4_props,
vpn_ip6_props,
&out_iface);
/* Print out environment for now */
- g_message ("\n");
+#ifdef DEBUG
+ g_message ("\n******* Generated environment:");
for (iter = denv; iter && *iter; iter++)
g_message (" %s", *iter);
+#endif
- g_assert_cmpint (g_strv_length (denv), ==, g_hash_table_size (expected_env));
-
+#ifdef DEBUG
{
GHashTableIter k;
const char *key;
+
+ g_message ("\n******* Expected environment:");
g_hash_table_iter_init (&k, expected_env);
while (g_hash_table_iter_next (&k, (gpointer) &key, NULL))
g_message (" %s", key);
}
+#endif
+
+ g_assert_cmpint (g_strv_length (denv), ==, g_hash_table_size (expected_env));
/* Compare dispatcher generated env and expected env */
for (iter = denv; iter && *iter; iter++) {
@@ -556,6 +571,27 @@ test_generic (const char *path, const char *file)
}
g_assert_cmpstr (expected_iface, ==, out_iface);
+
+ g_free (out_iface);
+ g_free (vpn_ip_iface);
+ g_free (expected_iface);
+ g_free (action);
+ g_hash_table_destroy (con_hash);
+ g_hash_table_destroy (con_props);
+ g_hash_table_destroy (device_props);
+ if (device_ip4_props)
+ g_hash_table_destroy (device_ip4_props);
+ if (device_ip6_props)
+ g_hash_table_destroy (device_ip6_props);
+ if (device_dhcp4_props)
+ g_hash_table_destroy (device_dhcp4_props);
+ if (device_dhcp6_props)
+ g_hash_table_destroy (device_dhcp6_props);
+ if (vpn_ip4_props)
+ g_hash_table_destroy (vpn_ip4_props);
+ if (vpn_ip6_props)
+ g_hash_table_destroy (vpn_ip6_props);
+ g_hash_table_destroy (expected_env);
}
/*******************************************/
@@ -563,25 +599,34 @@ test_generic (const char *path, const char *file)
static void
test_old_up (const char *path)
{
- test_generic (path, "dispatcher-old-up");
+ test_generic (path, "dispatcher-old-up", NULL);
}
static void
test_old_down (const char *path)
{
- test_generic (path, "dispatcher-old-down");
+ test_generic (path, "dispatcher-old-down", NULL);
}
static void
test_old_vpn_up (const char *path)
{
- test_generic (path, "dispatcher-old-vpn-up");
+ test_generic (path, "dispatcher-old-vpn-up", NULL);
}
static void
test_old_vpn_down (const char *path)
{
- test_generic (path, "dispatcher-old-vpn-down");
+ test_generic (path, "dispatcher-old-vpn-down", NULL);
+}
+
+static void
+test_up_empty_vpn_iface (const char *path)
+{
+ /* 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 (path, "dispatcher-old-up", "");
}
/*******************************************/
@@ -610,6 +655,8 @@ int main (int argc, char **argv)
g_test_suite_add (suite, TESTCASE (test_old_vpn_up, argv[1]));
g_test_suite_add (suite, TESTCASE (test_old_vpn_down, argv[1]));
+ g_test_suite_add (suite, TESTCASE (test_up_empty_vpn_iface, argv[1]));
+
return g_test_run ();
}
diff --git a/config.h.in b/config.h.in
index d9cdcb45e..bdbd783e7 100644
--- a/config.h.in
+++ b/config.h.in
@@ -53,9 +53,6 @@
/* Define to 1 if you have the <paths.h> header file. */
#undef HAVE_PATHS_H
-/* Define if you have a polkit with polkit_authority_get_sync() */
-#undef HAVE_POLKIT_AUTHORITY_GET_SYNC
-
/* Define to 1 if you have the <pppd/pppd.h> header file. */
#undef HAVE_PPPD_PPPD_H
@@ -214,6 +211,9 @@
/* Version number of package */
#undef VERSION
+/* Define if you have PolicyKit support */
+#undef WITH_POLKIT
+
/* Define if you have PPP support */
#undef WITH_PPP
diff --git a/configure b/configure
index 7405069dc..2f3e24415 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68 for NetworkManager 0.8.999.
+# Generated by GNU Autoconf 2.68 for NetworkManager 0.8.9997.
#
# Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=NetworkManager>.
#
@@ -571,8 +571,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='NetworkManager'
PACKAGE_TARNAME='NetworkManager'
-PACKAGE_VERSION='0.8.999'
-PACKAGE_STRING='NetworkManager 0.8.999'
+PACKAGE_VERSION='0.8.9997'
+PACKAGE_STRING='NetworkManager 0.8.9997'
PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=NetworkManager'
PACKAGE_URL=''
@@ -656,6 +656,8 @@ GNUTLS_CFLAGS
PKGCONFIG_PATH
NSS_LIBS
NSS_CFLAGS
+WITH_POLKIT_FALSE
+WITH_POLKIT_TRUE
POLKIT_LIBS
POLKIT_CFLAGS
WITH_WIMAX_FALSE
@@ -921,6 +923,7 @@ with_udev_dir
with_systemdsystemunitdir
with_ck
enable_wimax
+enable_polkit
with_crypto
with_dbus_sys_dir
enable_ppp
@@ -1520,7 +1523,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures NetworkManager 0.8.999 to adapt to many kinds of systems.
+\`configure' configures NetworkManager 0.8.9997 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1590,7 +1593,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of NetworkManager 0.8.999:";;
+ short | recursive ) echo "Configuration of NetworkManager 0.8.9997:";;
esac
cat <<\_ACEOF
@@ -1615,6 +1618,7 @@ Optional Features:
Enable introspection for this build
--enable-qt enable Qt examples
--enable-wimax enable WiMAX support
+ --enable-polkit enable PolicyKit support
--enable-ppp enable PPP/PPPoE support
--enable-more-warnings Maximum compiler warnings
--enable-gtk-doc use gtk-doc to build documentation [[default=no]]
@@ -1783,7 +1787,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-NetworkManager configure 0.8.999
+NetworkManager configure 0.8.9997
generated by GNU Autoconf 2.68
Copyright (C) 2010 Free Software Foundation, Inc.
@@ -2327,7 +2331,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by NetworkManager $as_me 0.8.999, which was
+It was created by NetworkManager $as_me 0.8.9997, which was
generated by GNU Autoconf 2.68. Invocation command line was
$ $0 $@
@@ -3148,7 +3152,7 @@ fi
# Define the identity of the package.
PACKAGE='NetworkManager'
- VERSION='0.8.999'
+ VERSION='0.8.9997'
cat >>confdefs.h <<_ACEOF
@@ -16275,8 +16279,8 @@ fi
NM_MAJOR_VERSION=0
NM_MINOR_VERSION=8
-NM_MICRO_VERSION=999
-NM_VERSION=0.8.999
+NM_MICRO_VERSION=9997
+NM_VERSION=0.8.9997
@@ -21209,12 +21213,12 @@ if test -n "$POLKIT_CFLAGS"; then
pkg_cv_POLKIT_CFLAGS="$POLKIT_CFLAGS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"polkit-gobject-1\""; } >&5
- ($PKG_CONFIG --exists --print-errors "polkit-gobject-1") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"polkit-gobject-1 >= 0.97\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "polkit-gobject-1 >= 0.97") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_POLKIT_CFLAGS=`$PKG_CONFIG --cflags "polkit-gobject-1" 2>/dev/null`
+ pkg_cv_POLKIT_CFLAGS=`$PKG_CONFIG --cflags "polkit-gobject-1 >= 0.97" 2>/dev/null`
else
pkg_failed=yes
fi
@@ -21225,12 +21229,12 @@ if test -n "$POLKIT_LIBS"; then
pkg_cv_POLKIT_LIBS="$POLKIT_LIBS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"polkit-gobject-1\""; } >&5
- ($PKG_CONFIG --exists --print-errors "polkit-gobject-1") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"polkit-gobject-1 >= 0.97\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "polkit-gobject-1 >= 0.97") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_POLKIT_LIBS=`$PKG_CONFIG --libs "polkit-gobject-1" 2>/dev/null`
+ pkg_cv_POLKIT_LIBS=`$PKG_CONFIG --libs "polkit-gobject-1 >= 0.97" 2>/dev/null`
else
pkg_failed=yes
fi
@@ -21250,98 +21254,55 @@ else
_pkg_short_errors_supported=no
fi
if test $_pkg_short_errors_supported = yes; then
- POLKIT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "polkit-gobject-1" 2>&1`
+ POLKIT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "polkit-gobject-1 >= 0.97" 2>&1`
else
- POLKIT_PKG_ERRORS=`$PKG_CONFIG --print-errors "polkit-gobject-1" 2>&1`
+ POLKIT_PKG_ERRORS=`$PKG_CONFIG --print-errors "polkit-gobject-1 >= 0.97" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
echo "$POLKIT_PKG_ERRORS" >&5
- as_fn_error $? "Package requirements (polkit-gobject-1) were not met:
-
-$POLKIT_PKG_ERRORS
-
-Consider adjusting the PKG_CONFIG_PATH environment variable if you
-installed software in a non-standard prefix.
-
-Alternatively, you may set the environment variables POLKIT_CFLAGS
-and POLKIT_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details." "$LINENO" 5
-
+ have_polkit=no
elif test $pkg_failed = untried; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it
-is in your PATH or set the PKG_CONFIG environment variable to the full
-path to pkg-config.
-
-Alternatively, you may set the environment variables POLKIT_CFLAGS
-and POLKIT_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.
-
-To get pkg-config, see <http://pkg-config.freedesktop.org/>.
-See \`config.log' for more details" "$LINENO" 5; }
-
+ have_polkit=no
else
POLKIT_CFLAGS=$pkg_cv_POLKIT_CFLAGS
POLKIT_LIBS=$pkg_cv_POLKIT_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
-
+ have_polkit=yes
+fi
+# Check whether --enable-polkit was given.
+if test "${enable_polkit+set}" = set; then :
+ enableval=$enable_polkit; enable_polkit=${enableval}
+else
+ enable_polkit=${have_polkit}
fi
+if (test "${enable_polkit}" = "yes"); then
+ if test x"$have_polkit" = x"no"; then
+ as_fn_error $? "PolicyKit development headers are required" "$LINENO" 5
+ fi
-# Check for polkit_authority_get_sync()
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for polkit_authority_get_sync in -lpolkit-gobject-1" >&5
-$as_echo_n "checking for polkit_authority_get_sync in -lpolkit-gobject-1... " >&6; }
-if ${ac_cv_lib_polkit_gobject_1_polkit_authority_get_sync+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lpolkit-gobject-1 $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char polkit_authority_get_sync ();
-int
-main ()
-{
-return polkit_authority_get_sync ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_polkit_gobject_1_polkit_authority_get_sync=yes
+
+$as_echo "#define WITH_POLKIT 1" >>confdefs.h
+
else
- ac_cv_lib_polkit_gobject_1_polkit_authority_get_sync=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+
+$as_echo "#define WITH_POLKIT 0" >>confdefs.h
+
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_polkit_gobject_1_polkit_authority_get_sync" >&5
-$as_echo "$ac_cv_lib_polkit_gobject_1_polkit_authority_get_sync" >&6; }
-if test "x$ac_cv_lib_polkit_gobject_1_polkit_authority_get_sync" = xyes; then :
- ac_have_pk_auth_get_sync="1"
+ if test "${enable_polkit}" = "yes"; then
+ WITH_POLKIT_TRUE=
+ WITH_POLKIT_FALSE='#'
else
- ac_have_pk_auth_get_sync="0"
+ WITH_POLKIT_TRUE='#'
+ WITH_POLKIT_FALSE=
fi
-cat >>confdefs.h <<_ACEOF
-#define HAVE_POLKIT_AUTHORITY_GET_SYNC $ac_have_pk_auth_get_sync
-_ACEOF
-
-
# Check whether --with-crypto was given.
if test "${with_crypto+set}" = set; then :
@@ -22516,6 +22477,10 @@ if test -z "${WITH_WIMAX_TRUE}" && test -z "${WITH_WIMAX_FALSE}"; then
as_fn_error $? "conditional \"WITH_WIMAX\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${WITH_POLKIT_TRUE}" && test -z "${WITH_POLKIT_FALSE}"; then
+ as_fn_error $? "conditional \"WITH_POLKIT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${WITH_NSS_TRUE}" && test -z "${WITH_NSS_FALSE}"; then
as_fn_error $? "conditional \"WITH_NSS\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -22961,7 +22926,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by NetworkManager $as_me 0.8.999, which was
+This file was extended by NetworkManager $as_me 0.8.9997, which was
generated by GNU Autoconf 2.68. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -23027,7 +22992,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-NetworkManager config.status 0.8.999
+NetworkManager config.status 0.8.9997
configured by $0, generated by GNU Autoconf 2.68,
with options \\"\$ac_cs_config\\"
@@ -25323,6 +25288,12 @@ else
echo systemd support: no
fi
+if test "${enable_polkit}" = "yes"; then
+ echo PolicyKit support: yes
+else
+ echo PolicyKit support: no
+fi
+
if test -n "${with_ck}"; then
echo ConsoleKit support: ${with_ck}
else
diff --git a/configure.ac b/configure.ac
index b18ccc063..74765de35 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3,7 +3,7 @@ AC_PREREQ([2.63])
dnl The NM version number
m4_define([nm_major_version], [0])
m4_define([nm_minor_version], [8])
-m4_define([nm_micro_version], [999])
+m4_define([nm_micro_version], [9997])
m4_define([nm_version],
[nm_major_version.nm_minor_version.nm_micro_version])
@@ -337,12 +337,20 @@ else
fi
AM_CONDITIONAL(WITH_WIMAX, test "${enable_wimax}" = "yes")
-PKG_CHECK_MODULES(POLKIT, polkit-gobject-1)
-AC_SUBST(POLKIT_CFLAGS)
-
-# Check for polkit_authority_get_sync()
-AC_CHECK_LIB([polkit-gobject-1], [polkit_authority_get_sync], ac_have_pk_auth_get_sync="1", ac_have_pk_auth_get_sync="0")
-AC_DEFINE_UNQUOTED(HAVE_POLKIT_AUTHORITY_GET_SYNC, $ac_have_pk_auth_get_sync, [Define if you have a polkit with polkit_authority_get_sync()])
+PKG_CHECK_MODULES(POLKIT, [polkit-gobject-1 >= 0.97], [have_polkit=yes],[have_polkit=no])
+AC_ARG_ENABLE(polkit, AS_HELP_STRING([--enable-polkit], [enable PolicyKit support]),
+ [enable_polkit=${enableval}], [enable_polkit=${have_polkit}])
+if (test "${enable_polkit}" = "yes"); then
+ if test x"$have_polkit" = x"no"; then
+ AC_MSG_ERROR(PolicyKit development headers are required)
+ fi
+ AC_SUBST(POLKIT_CFLAGS)
+ AC_SUBST(POLKIT_LIBS)
+ AC_DEFINE(WITH_POLKIT, 1, [Define if you have PolicyKit support])
+else
+ AC_DEFINE(WITH_POLKIT, 0, [Define if you have PolicyKit support])
+fi
+AM_CONDITIONAL(WITH_POLKIT, test "${enable_polkit}" = "yes")
AC_ARG_WITH(crypto, AS_HELP_STRING([--with-crypto=nss | gnutls], [Cryptography library to use for certificate and key operations]),ac_crypto=$withval, ac_crypto=nss)
@@ -705,6 +713,12 @@ else
echo systemd support: no
fi
+if test "${enable_polkit}" = "yes"; then
+ echo PolicyKit support: yes
+else
+ echo PolicyKit support: no
+fi
+
if test -n "${with_ck}"; then
echo ConsoleKit support: ${with_ck}
else
diff --git a/data/NetworkManager-wait-online.service.in b/data/NetworkManager-wait-online.service.in
index 1a43d1744..0772568ff 100644
--- a/data/NetworkManager-wait-online.service.in
+++ b/data/NetworkManager-wait-online.service.in
@@ -1,12 +1,12 @@
[Unit]
Description=Network Manager Wait Online
-Requires=NetworkManager.service
+After=NetworkManager.service
Wants=network.target
Before=network.target
[Service]
Type=oneshot
-ExecStart=@bindir@/nm-online -q --timeout=30
+ExecStart=@bindir@/nm-online -q -x --timeout=30
[Install]
-WantedBy=multi-user.target
+WantedBy=network.target
diff --git a/docs/api/html/NetworkManager.devhelp b/docs/api/html/NetworkManager.devhelp
index 3954eb817..bf173496e 100644
--- a/docs/api/html/NetworkManager.devhelp
+++ b/docs/api/html/NetworkManager.devhelp
@@ -4,23 +4,23 @@
<chapters>
<sub name="D-Bus API Reference" link="ref-dbus.html"/>
<sub name="Network Configuration Setting Specification" link="ref-settings.html">
- <sub name="Configuration Settings" link="ref-settings.html#id642206"/>
+ <sub name="Configuration Settings" link="ref-settings.html#id384567"/>
<sub name="Secret flag types" link="secrets-flags.html"/>
</sub>
<sub name="Migrating from NetworkManager 0.8 to NetworkManager 0.9" link="ref-migrating.html">
- <sub name="Architecture and D-Bus API Changes in 0.9" link="ref-migrating.html#id625668">
- <sub name="Elimination of the User Settings Service" link="ref-migrating.html#id638875"/>
- <sub name="User Secret Agents" link="ref-migrating.html#id620793"/>
- <sub name="Settings Service Interface Changes" link="ref-migrating.html#id633331"/>
- <sub name="Connection Object Interface Changes" link="ref-migrating.html#id633880"/>
- <sub name="Permissions Methods Consolidation" link="ref-migrating.html#id648331"/>
- <sub name="AddConnection Returns Object Path of New Connection" link="ref-migrating.html#id654458"/>
- <sub name="Support for WiMAX Devices" link="ref-migrating.html#id611268"/>
- <sub name="New Device States" link="ref-migrating.html#id653428"/>
- <sub name="New Active Connection State" link="ref-migrating.html#id622367"/>
- <sub name="Consolidated Modem Devices" link="ref-migrating.html#id621211"/>
- <sub name="Secret Property Flags" link="ref-migrating.html#id602069"/>
- <sub name="Deprecated Methods Removed" link="ref-migrating.html#id617041"/>
+ <sub name="Architecture and D-Bus API Changes in 0.9" link="ref-migrating.html#id368030">
+ <sub name="Elimination of the User Settings Service" link="ref-migrating.html#id381237"/>
+ <sub name="User Secret Agents" link="ref-migrating.html#id363154"/>
+ <sub name="Settings Service Interface Changes" link="ref-migrating.html#id375692"/>
+ <sub name="Connection Object Interface Changes" link="ref-migrating.html#id376241"/>
+ <sub name="Permissions Methods Consolidation" link="ref-migrating.html#id390693"/>
+ <sub name="AddConnection Returns Object Path of New Connection" link="ref-migrating.html#id396820"/>
+ <sub name="Support for WiMAX Devices" link="ref-migrating.html#id353630"/>
+ <sub name="New Device States" link="ref-migrating.html#id395790"/>
+ <sub name="New Active Connection State" link="ref-migrating.html#id364728"/>
+ <sub name="Consolidated Modem Devices" link="ref-migrating.html#id363573"/>
+ <sub name="Secret Property Flags" link="ref-migrating.html#id344431"/>
+ <sub name="Deprecated Methods Removed" link="ref-migrating.html#id359402"/>
</sub>
</sub>
<sub name="Index" link="ix01.html"/>
diff --git a/docs/api/html/NetworkManager.devhelp2 b/docs/api/html/NetworkManager.devhelp2
index 5ca2e583e..20f2b1479 100644
--- a/docs/api/html/NetworkManager.devhelp2
+++ b/docs/api/html/NetworkManager.devhelp2
@@ -4,23 +4,23 @@
<chapters>
<sub name="D-Bus API Reference" link="ref-dbus.html"/>
<sub name="Network Configuration Setting Specification" link="ref-settings.html">
- <sub name="Configuration Settings" link="ref-settings.html#id642206"/>
+ <sub name="Configuration Settings" link="ref-settings.html#id384567"/>
<sub name="Secret flag types" link="secrets-flags.html"/>
</sub>
<sub name="Migrating from NetworkManager 0.8 to NetworkManager 0.9" link="ref-migrating.html">
- <sub name="Architecture and D-Bus API Changes in 0.9" link="ref-migrating.html#id625668">
- <sub name="Elimination of the User Settings Service" link="ref-migrating.html#id638875"/>
- <sub name="User Secret Agents" link="ref-migrating.html#id620793"/>
- <sub name="Settings Service Interface Changes" link="ref-migrating.html#id633331"/>
- <sub name="Connection Object Interface Changes" link="ref-migrating.html#id633880"/>
- <sub name="Permissions Methods Consolidation" link="ref-migrating.html#id648331"/>
- <sub name="AddConnection Returns Object Path of New Connection" link="ref-migrating.html#id654458"/>
- <sub name="Support for WiMAX Devices" link="ref-migrating.html#id611268"/>
- <sub name="New Device States" link="ref-migrating.html#id653428"/>
- <sub name="New Active Connection State" link="ref-migrating.html#id622367"/>
- <sub name="Consolidated Modem Devices" link="ref-migrating.html#id621211"/>
- <sub name="Secret Property Flags" link="ref-migrating.html#id602069"/>
- <sub name="Deprecated Methods Removed" link="ref-migrating.html#id617041"/>
+ <sub name="Architecture and D-Bus API Changes in 0.9" link="ref-migrating.html#id368030">
+ <sub name="Elimination of the User Settings Service" link="ref-migrating.html#id381237"/>
+ <sub name="User Secret Agents" link="ref-migrating.html#id363154"/>
+ <sub name="Settings Service Interface Changes" link="ref-migrating.html#id375692"/>
+ <sub name="Connection Object Interface Changes" link="ref-migrating.html#id376241"/>
+ <sub name="Permissions Methods Consolidation" link="ref-migrating.html#id390693"/>
+ <sub name="AddConnection Returns Object Path of New Connection" link="ref-migrating.html#id396820"/>
+ <sub name="Support for WiMAX Devices" link="ref-migrating.html#id353630"/>
+ <sub name="New Device States" link="ref-migrating.html#id395790"/>
+ <sub name="New Active Connection State" link="ref-migrating.html#id364728"/>
+ <sub name="Consolidated Modem Devices" link="ref-migrating.html#id363573"/>
+ <sub name="Secret Property Flags" link="ref-migrating.html#id344431"/>
+ <sub name="Deprecated Methods Removed" link="ref-migrating.html#id359402"/>
</sub>
</sub>
<sub name="Index" link="ix01.html"/>
diff --git a/docs/api/html/index.html b/docs/api/html/index.html
index 392f24f2f..091a42903 100644
--- a/docs/api/html/index.html
+++ b/docs/api/html/index.html
@@ -22,11 +22,11 @@
    <code class="email">&lt;<a class="email" href="mailto:dcbw@redhat.com">dcbw@redhat.com</a>&gt;</code><br>
  </p></div></div>
</div></div></div>
-<div><p class="releaseinfo">Version 0.8.999
+<div><p class="releaseinfo">Version 0.8.9997
</p></div>
<div><p class="copyright">Copyright © 2011 The NetworkManager Authors</p></div>
<div><div class="legalnotice">
-<a name="id572086"></a><p>
+<a name="id314448"></a><p>
Permission is granted to copy, distribute and/or modify this
document under the terms of the <em class="citetitle">GNU Free
Documentation License</em>, Version 1.1 or any later
@@ -61,25 +61,25 @@
<dt><span class="chapter"><a href="ref-dbus.html">D-Bus API Reference</a></span></dt>
<dt><span class="chapter"><a href="ref-settings.html">Network Configuration Setting Specification</a></span></dt>
<dd><dl>
-<dt><span class="section"><a href="ref-settings.html#id642206">Configuration Settings</a></span></dt>
+<dt><span class="section"><a href="ref-settings.html#id384567">Configuration Settings</a></span></dt>
<dt><span class="section"><a href="secrets-flags.html">Secret flag types</a></span></dt>
</dl></dd>
<dt><span class="chapter"><a href="ref-migrating.html">Migrating from NetworkManager 0.8 to NetworkManager 0.9</a></span></dt>
<dd><dl>
-<dt><span class="section"><a href="ref-migrating.html#id625668">Architecture and D-Bus API Changes in 0.9</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id368030">Architecture and D-Bus API Changes in 0.9</a></span></dt>
<dd><dl>
-<dt><span class="section"><a href="ref-migrating.html#id638875">Elimination of the User Settings Service</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id620793">User Secret Agents</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id633331">Settings Service Interface Changes</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id633880">Connection Object Interface Changes</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id648331">Permissions Methods Consolidation</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id654458">AddConnection Returns Object Path of New Connection</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id611268">Support for WiMAX Devices</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id653428">New Device States</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id622367">New Active Connection State</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id621211">Consolidated Modem Devices</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id602069">Secret Property Flags</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id617041">Deprecated Methods Removed</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id381237">Elimination of the User Settings Service</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id363154">User Secret Agents</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id375692">Settings Service Interface Changes</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id376241">Connection Object Interface Changes</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id390693">Permissions Methods Consolidation</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id396820">AddConnection Returns Object Path of New Connection</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id353630">Support for WiMAX Devices</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id395790">New Device States</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id364728">New Active Connection State</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id363573">Consolidated Modem Devices</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id344431">Secret Property Flags</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id359402">Deprecated Methods Removed</a></span></dt>
</dl></dd>
</dl></dd>
<dt><span class="index"><a href="ix01.html">Index</a></span></dt>
diff --git a/docs/api/html/ix01.html b/docs/api/html/ix01.html
index f5efded94..1387212fa 100644
--- a/docs/api/html/ix01.html
+++ b/docs/api/html/ix01.html
@@ -21,7 +21,7 @@
</tr></table>
<div class="index">
<div class="titlepage"><div><div><h2 class="title">
-<a name="id601978"></a>Index</h2></div></div></div>
+<a name="id344340"></a>Index</h2></div></div></div>
<div class="index"></div>
</div>
<div class="footer">
diff --git a/docs/api/html/ref-migrating.html b/docs/api/html/ref-migrating.html
index 8798b9a4c..8324e2634 100644
--- a/docs/api/html/ref-migrating.html
+++ b/docs/api/html/ref-migrating.html
@@ -23,20 +23,20 @@
<div class="titlepage"><div><div><h2 class="title">
<a name="ref-migrating"></a>Migrating from NetworkManager 0.8 to NetworkManager 0.9</h2></div></div></div>
<div class="toc"><dl>
-<dt><span class="section"><a href="ref-migrating.html#id625668">Architecture and D-Bus API Changes in 0.9</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id368030">Architecture and D-Bus API Changes in 0.9</a></span></dt>
<dd><dl>
-<dt><span class="section"><a href="ref-migrating.html#id638875">Elimination of the User Settings Service</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id620793">User Secret Agents</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id633331">Settings Service Interface Changes</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id633880">Connection Object Interface Changes</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id648331">Permissions Methods Consolidation</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id654458">AddConnection Returns Object Path of New Connection</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id611268">Support for WiMAX Devices</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id653428">New Device States</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id622367">New Active Connection State</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id621211">Consolidated Modem Devices</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id602069">Secret Property Flags</a></span></dt>
-<dt><span class="section"><a href="ref-migrating.html#id617041">Deprecated Methods Removed</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id381237">Elimination of the User Settings Service</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id363154">User Secret Agents</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id375692">Settings Service Interface Changes</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id376241">Connection Object Interface Changes</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id390693">Permissions Methods Consolidation</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id396820">AddConnection Returns Object Path of New Connection</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id353630">Support for WiMAX Devices</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id395790">New Device States</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id364728">New Active Connection State</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id363573">Consolidated Modem Devices</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id344431">Secret Property Flags</a></span></dt>
+<dt><span class="section"><a href="ref-migrating.html#id359402">Deprecated Methods Removed</a></span></dt>
</dl></dd>
</dl></div>
<p>
@@ -50,14 +50,14 @@
</p>
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id625668"></a>Architecture and D-Bus API Changes in 0.9</h2></div></div></div>
+<a name="id368030"></a>Architecture and D-Bus API Changes in 0.9</h2></div></div></div>
<p>
This section details the architectural and D-Bus API changes in
NetworkManager 0.9.
</p>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id638875"></a>Elimination of the User Settings Service</h3></div></div></div>
+<a name="id381237"></a>Elimination of the User Settings Service</h3></div></div></div>
<p>
Previously there were two "settings services", or D-Bus services that
provided and saved network configuration information. NetworkManager
@@ -103,7 +103,7 @@
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id620793"></a>User Secret Agents</h3></div></div></div>
+<a name="id363154"></a>User Secret Agents</h3></div></div></div>
<p>
Even with the elimination of the user settings service, in some cases it
is still desirable to store secrets in the user's session and not in
@@ -152,7 +152,7 @@
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id633331"></a>Settings Service Interface Changes</h3></div></div></div>
+<a name="id375692"></a>Settings Service Interface Changes</h3></div></div></div>
<p>
With the elimination of the user settings service, the old
<code class="literal">org.freedesktop.NetworkManagerUserSettings</code> and
@@ -188,7 +188,7 @@
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id633880"></a>Connection Object Interface Changes</h3></div></div></div>
+<a name="id376241"></a>Connection Object Interface Changes</h3></div></div></div>
<p>
Consistent with the interface changes to the Settings object, the
Connection object's D-Bus interface has changed to
@@ -222,7 +222,7 @@
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id648331"></a>Permissions Methods Consolidation</h3></div></div></div>
+<a name="id390693"></a>Permissions Methods Consolidation</h3></div></div></div>
<p>
Previously there were two D-Bus method calls to retrieve the list of
operations that a user client could perform, and two signals notifying
@@ -254,7 +254,7 @@
are now string-based permissions. The mapping is as follows:
</p>
<div class="table">
-<a name="id643012"></a><p class="title"><b>Table 17. </b></p>
+<a name="id385374"></a><p class="title"><b>Table 17. </b></p>
<div class="table-contents"><table border="1">
<colgroup>
<col>
@@ -305,7 +305,7 @@
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id654458"></a>AddConnection Returns Object Path of New Connection</h3></div></div></div>
+<a name="id396820"></a>AddConnection Returns Object Path of New Connection</h3></div></div></div>
<p>
The <a class="ulink" href="spec.html#org.freedesktop.NetworkManager.Settings" target="_top">
<code class="literal">org.freedesktop.NetworkManager.Settings.AddConnection</code>
@@ -323,7 +323,7 @@
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id611268"></a>Support for WiMAX Devices</h3></div></div></div>
+<a name="id353630"></a>Support for WiMAX Devices</h3></div></div></div>
<p>
NetworkManager now supports Intel WiMAX mobile broadband devices. A
corresponding device type (<code class="literal">NM_DEVICE_TYPE_WIMAX</code>) and
@@ -346,7 +346,7 @@
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id653428"></a>New Device States</h3></div></div></div>
+<a name="id395790"></a>New Device States</h3></div></div></div>
<p>
A few <a class="ulink" href="spec.html#type-NM_DEVICE_STATE" target="_top">new device states</a>
have been added, and all device states have been renumbered for flexibility.
@@ -361,7 +361,7 @@
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id622367"></a>New Active Connection State</h3></div></div></div>
+<a name="id364728"></a>New Active Connection State</h3></div></div></div>
<p>
Along with the new device states, an
<a class="ulink" href="spec.html#type-NM_ACTIVE_CONNECTION_STATE" target="_top">additional
@@ -377,7 +377,7 @@
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id621211"></a>Consolidated Modem Devices</h3></div></div></div>
+<a name="id363573"></a>Consolidated Modem Devices</h3></div></div></div>
<p>
Many new mobile broadband devices support multiple access families, like
Qualcomm Gobi cards (CDMA/EVDO and GSM/UMTS), or multi-mode EVDO/LTE
@@ -413,7 +413,7 @@
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id602069"></a>Secret Property Flags</h3></div></div></div>
+<a name="id344431"></a>Secret Property Flags</h3></div></div></div>
<p>
In the Connection object's configuration properties, each setting's secret
properties (like WiFi passphrases, or public key passwords, etc) now has
@@ -422,7 +422,7 @@
following values:
</p>
<div class="table">
-<a name="id602078"></a><p class="title"><b>Table 18. </b></p>
+<a name="id344439"></a><p class="title"><b>Table 18. </b></p>
<div class="table-contents"><table border="1">
<colgroup>
<col>
@@ -484,7 +484,7 @@
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id617041"></a>Deprecated Methods Removed</h3></div></div></div>
+<a name="id359402"></a>Deprecated Methods Removed</h3></div></div></div>
<p>
A few methods and signals of the <code class="literal">org.freedesktop.NetworkManager</code>
interface deprecated in version 0.7 have been removed. All the
@@ -494,7 +494,7 @@
their replacements:
</p>
<div class="table">
-<a name="id617055"></a><p class="title"><b>Table 19. </b></p>
+<a name="id359416"></a><p class="title"><b>Table 19. </b></p>
<div class="table-contents"><table border="1">
<colgroup>
<col>
diff --git a/docs/api/html/ref-settings.html b/docs/api/html/ref-settings.html
index 7924bbce4..6f947c7d6 100644
--- a/docs/api/html/ref-settings.html
+++ b/docs/api/html/ref-settings.html
@@ -23,7 +23,7 @@
<div class="titlepage"><div><div><h2 class="title">
<a name="ref-settings"></a>Network Configuration Setting Specification</h2></div></div></div>
<div class="toc"><dl>
-<dt><span class="section"><a href="ref-settings.html#id642206">Configuration Settings</a></span></dt>
+<dt><span class="section"><a href="ref-settings.html#id384567">Configuration Settings</a></span></dt>
<dt><span class="section"><a href="secrets-flags.html">Secret flag types</a></span></dt>
</dl></div>
<p>
@@ -35,11 +35,11 @@
</p>
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id642206"></a>Configuration Settings</h2></div></div></div>
+<a name="id384567"></a>Configuration Settings</h2></div></div></div>
<p>
</p>
<div class="table">
-<a name="id642214"></a><p class="title"><b>Table 1. 802-1x setting</b></p>
+<a name="id384575"></a><p class="title"><b>Table 1. 802-1x setting</b></p>
<div class="table-contents"><table summary="802-1x setting" border="1">
<colgroup>
<col>
@@ -204,7 +204,7 @@
<p><br class="table-break">
</p>
<div class="table">
-<a name="id629228"></a><p class="title"><b>Table 2. bluetooth setting</b></p>
+<a name="id371590"></a><p class="title"><b>Table 2. bluetooth setting</b></p>
<div class="table-contents"><table summary="bluetooth setting" border="1">
<colgroup>
<col>
@@ -243,7 +243,7 @@
<p><br class="table-break">
</p>
<div class="table">
-<a name="id629361"></a><p class="title"><b>Table 3. cdma setting</b></p>
+<a name="id371722"></a><p class="title"><b>Table 3. cdma setting</b></p>
<div class="table-contents"><table summary="cdma setting" border="1">
<colgroup>
<col>
@@ -294,7 +294,7 @@
<p><br class="table-break">
</p>
<div class="table">
-<a name="id629559"></a><p class="title"><b>Table 4. connection setting</b></p>
+<a name="id371921"></a><p class="title"><b>Table 4. connection setting</b></p>
<div class="table-contents"><table summary="connection setting" border="1">
<colgroup>
<col>
@@ -363,7 +363,7 @@
<p><br class="table-break">
</p>
<div class="table">
-<a name="id629860"></a><p class="title"><b>Table 5. gsm setting</b></p>
+<a name="id372222"></a><p class="title"><b>Table 5. gsm setting</b></p>
<div class="table-contents"><table summary="gsm setting" border="1">
<colgroup>
<col>
@@ -456,7 +456,7 @@
<p><br class="table-break">
</p>
<div class="table">
-<a name="id630285"></a><p class="title"><b>Table 6. ipv4 setting</b></p>
+<a name="id372646"></a><p class="title"><b>Table 6. ipv4 setting</b></p>
<div class="table-contents"><table summary="ipv4 setting" border="1">
<colgroup>
<col>
@@ -555,7 +555,7 @@
<p><br class="table-break">
</p>
<div class="table">
-<a name="id659187"></a><p class="title"><b>Table 7. ipv6 setting</b></p>
+<a name="id401548"></a><p class="title"><b>Table 7. ipv6 setting</b></p>
<div class="table-contents"><table summary="ipv6 setting" border="1">
<colgroup>
<col>
@@ -636,7 +636,7 @@
<p><br class="table-break">
</p>
<div class="table">
-<a name="id659505"></a><p class="title"><b>Table 8. 802-11-olpc-mesh setting</b></p>
+<a name="id401866"></a><p class="title"><b>Table 8. 802-11-olpc-mesh setting</b></p>
<div class="table-contents"><table summary="802-11-olpc-mesh setting" border="1">
<colgroup>
<col>
@@ -681,7 +681,7 @@
<p><br class="table-break">
</p>
<div class="table">
-<a name="id659643"></a><p class="title"><b>Table 9. ppp setting</b></p>
+<a name="id402005"></a><p class="title"><b>Table 9. ppp setting</b></p>
<div class="table-contents"><table summary="ppp setting" border="1">
<colgroup>
<col>
@@ -816,7 +816,7 @@
<p><br class="table-break">
</p>
<div class="table">
-<a name="id660173"></a><p class="title"><b>Table 10. pppoe setting</b></p>
+<a name="id402535"></a><p class="title"><b>Table 10. pppoe setting</b></p>
<div class="table-contents"><table summary="pppoe setting" border="1">
<colgroup>
<col>
@@ -867,7 +867,7 @@
<p><br class="table-break">
</p>
<div class="table">
-<a name="id660338"></a><p class="title"><b>Table 11. serial setting</b></p>
+<a name="id402700"></a><p class="title"><b>Table 11. serial setting</b></p>
<div class="table-contents"><table summary="serial setting" border="1">
<colgroup>
<col>
@@ -924,7 +924,7 @@
<p><br class="table-break">
</p>
<div class="table">
-<a name="id660529"></a><p class="title"><b>Table 12. vpn setting</b></p>
+<a name="id402891"></a><p class="title"><b>Table 12. vpn setting</b></p>
<div class="table-contents"><table summary="vpn setting" border="1">
<colgroup>
<col>
@@ -975,7 +975,7 @@
<p><br class="table-break">
</p>
<div class="table">
-<a name="id660695"></a><p class="title"><b>Table 13. wimax setting</b></p>
+<a name="id403056"></a><p class="title"><b>Table 13. wimax setting</b></p>
<div class="table-contents"><table summary="wimax setting" border="1">
<colgroup>
<col>
@@ -1014,7 +1014,7 @@
<p><br class="table-break">
</p>
<div class="table">
-<a name="id660819"></a><p class="title"><b>Table 14. 802-3-ethernet setting</b></p>
+<a name="id403181"></a><p class="title"><b>Table 14. 802-3-ethernet setting</b></p>
<div class="table-contents"><table summary="802-3-ethernet setting" border="1">
<colgroup>
<col>
@@ -1101,7 +1101,7 @@
<p><br class="table-break">
</p>
<div class="table">
-<a name="id661226"></a><p class="title"><b>Table 15. 802-11-wireless setting</b></p>
+<a name="id403587"></a><p class="title"><b>Table 15. 802-11-wireless setting</b></p>
<div class="table-contents"><table summary="802-11-wireless setting" border="1">
<colgroup>
<col>
@@ -1200,7 +1200,7 @@
<p><br class="table-break">
</p>
<div class="table">
-<a name="id661703"></a><p class="title"><b>Table 16. 802-11-wireless-security setting</b></p>
+<a name="id404064"></a><p class="title"><b>Table 16. 802-11-wireless-security setting</b></p>
<div class="table-contents"><table summary="802-11-wireless-security setting" border="1">
<colgroup>
<col>
diff --git a/docs/api/html/spec.html b/docs/api/html/spec.html
index 5bb127d43..4533e7863 100644
--- a/docs/api/html/spec.html
+++ b/docs/api/html/spec.html
@@ -258,7 +258,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
related to that domain. Available domains are: [NONE, HW, RFKILL,
ETHER, WIFI, BT, MB, DHCP4, DHCP6, PPP, WIFI_SCAN, IP4, IP6, AUTOIP4,
DNS, VPN, SHARING, SUPPLICANT, USER_SET, SYS_SET, SUSPEND, CORE,
- DEVICE, OLPC]
+ DEVICE, OLPC]. If an empty string is given, the log level is changed
+ but the current set of log domains remains unchanged.
</dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.state" id="org.freedesktop.NetworkManager.state">state</a> (
) &#8594;
@@ -476,6 +477,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
(<a xmlns="" href="#type-NM_DEVICE_STATE">NM_DEVICE_STATE</a>)
</dt><dd>
The current state of the device.
+ </dd><dt><code>ActiveConnection</code> -
+ <code>o</code> -
+ <code>(read)</code></dt><dd>
+ Object path of an ActiveConnection object that "owns" this device during
+ activation. The ActiveConnection object tracks the life-cycle of a
+ connection to a specific network and implements the
+ org.freedesktop.NetworkManager.Connection.Active D-Bus interface.
</dd><dt><code>Ip4Config</code> -
<code>o</code> -
<code>(read)</code></dt><dd>
@@ -1093,7 +1101,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
</div></div><p>Interface has no properties.</p>
- <h1><a name="org.freedesktop.NetworkManager.Connection.Active" id="org.freedesktop.NetworkManager.Connection.Active"></a>org.freedesktop.NetworkManager.Connection.Active</h1><p>Interface has no methods.</p><h2>Signals:</h2><div class="signal"><h3><a name="org.freedesktop.NetworkManager.Connection.Active.PropertiesChanged" id="org.freedesktop.NetworkManager.Connection.Active.PropertiesChanged">PropertiesChanged</a> (
+ <h1><a name="org.freedesktop.NetworkManager.Connection.Active" id="org.freedesktop.NetworkManager.Connection.Active"></a>org.freedesktop.NetworkManager.Connection.Active</h1>
+ Objects that implement the Connection.Active interface represent an attempt
+ to connect to a network using the details provided by a Connection object.
+ The Connection.Active object tracks the life-cycle of the connection
+ attempt and if successful indicates whether the connected network is the
+ "default" or preferred network for access.
+ <p>Interface has no methods.</p><h2>Signals:</h2><div class="signal"><h3><a name="org.freedesktop.NetworkManager.Connection.Active.PropertiesChanged" id="org.freedesktop.NetworkManager.Connection.Active.PropertiesChanged">PropertiesChanged</a> (
a{sv}: properties
)</h3><div class="docstring"></div><div><h4>Parameters</h4><dl><dt><code>properties</code> -
<code>a{sv}</code>
diff --git a/docs/api/spec.html b/docs/api/spec.html
index 5bb127d43..4533e7863 100644
--- a/docs/api/spec.html
+++ b/docs/api/spec.html
@@ -258,7 +258,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
related to that domain. Available domains are: [NONE, HW, RFKILL,
ETHER, WIFI, BT, MB, DHCP4, DHCP6, PPP, WIFI_SCAN, IP4, IP6, AUTOIP4,
DNS, VPN, SHARING, SUPPLICANT, USER_SET, SYS_SET, SUSPEND, CORE,
- DEVICE, OLPC]
+ DEVICE, OLPC]. If an empty string is given, the log level is changed
+ but the current set of log domains remains unchanged.
</dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.state" id="org.freedesktop.NetworkManager.state">state</a> (
) &#8594;
@@ -476,6 +477,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
(<a xmlns="" href="#type-NM_DEVICE_STATE">NM_DEVICE_STATE</a>)
</dt><dd>
The current state of the device.
+ </dd><dt><code>ActiveConnection</code> -
+ <code>o</code> -
+ <code>(read)</code></dt><dd>
+ Object path of an ActiveConnection object that "owns" this device during
+ activation. The ActiveConnection object tracks the life-cycle of a
+ connection to a specific network and implements the
+ org.freedesktop.NetworkManager.Connection.Active D-Bus interface.
</dd><dt><code>Ip4Config</code> -
<code>o</code> -
<code>(read)</code></dt><dd>
@@ -1093,7 +1101,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
</div></div><p>Interface has no properties.</p>
- <h1><a name="org.freedesktop.NetworkManager.Connection.Active" id="org.freedesktop.NetworkManager.Connection.Active"></a>org.freedesktop.NetworkManager.Connection.Active</h1><p>Interface has no methods.</p><h2>Signals:</h2><div class="signal"><h3><a name="org.freedesktop.NetworkManager.Connection.Active.PropertiesChanged" id="org.freedesktop.NetworkManager.Connection.Active.PropertiesChanged">PropertiesChanged</a> (
+ <h1><a name="org.freedesktop.NetworkManager.Connection.Active" id="org.freedesktop.NetworkManager.Connection.Active"></a>org.freedesktop.NetworkManager.Connection.Active</h1>
+ Objects that implement the Connection.Active interface represent an attempt
+ to connect to a network using the details provided by a Connection object.
+ The Connection.Active object tracks the life-cycle of the connection
+ attempt and if successful indicates whether the connected network is the
+ "default" or preferred network for access.
+ <p>Interface has no methods.</p><h2>Signals:</h2><div class="signal"><h3><a name="org.freedesktop.NetworkManager.Connection.Active.PropertiesChanged" id="org.freedesktop.NetworkManager.Connection.Active.PropertiesChanged">PropertiesChanged</a> (
a{sv}: properties
)</h3><div class="docstring"></div><div><h4>Parameters</h4><dl><dt><code>properties</code> -
<code>a{sv}</code>
diff --git a/docs/api/version.xml b/docs/api/version.xml
index b81eb02c3..020982195 100644
--- a/docs/api/version.xml
+++ b/docs/api/version.xml
@@ -1 +1 @@
-0.8.999
+0.8.9997
diff --git a/docs/libnm-glib/html/NMAccessPoint.html b/docs/libnm-glib/html/NMAccessPoint.html
index 08cf78e84..6124f9bb3 100644
--- a/docs/libnm-glib/html/NMAccessPoint.html
+++ b/docs/libnm-glib/html/NMAccessPoint.html
@@ -68,7 +68,7 @@ const <span class="returnvalue">char</span> * <a class="link" href="N
(<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>,
<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *connections</code></em>);
<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMAccessPoint.html#nm-access-point-connection-valid" title="nm_access_point_connection_valid ()">nm_access_point_connection_valid</a> (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>);
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>);
const <span class="returnvalue">char</span> * <a class="link" href="NMAccessPoint.html#nm-access-point-get-hw-address" title="nm_access_point_get_hw_address ()">nm_access_point_get_hw_address</a> (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);
</pre>
</div>
@@ -457,13 +457,13 @@ other attributes like security settings, channel, etc.
<tr>
<td><p><span class="term"><em class="parameter"><code>connections</code></em> :</span></p></td>
<td>a list of
-<span class="type">NMConnection</span> objects to filter. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.Connection]</span>
+<a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> objects to filter. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.Connection]</span>
</td>
</tr>
<tr>
<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
<td>a
-list of <span class="type">NMConnection</span> objects that could be activated with the given <em class="parameter"><code>ap</code></em>.
+list of <a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> objects that could be activated with the given <em class="parameter"><code>ap</code></em>.
The elements of the list are owned by their creator and should not be freed
by the caller, but the returned list itself is owned by the caller and should
be freed with <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#g-slist-free"><code class="function">g_slist_free()</code></a> when it is no longer required. <span class="annotation">[<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.Connection]</span>
@@ -476,7 +476,7 @@ be freed with <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-
<div class="refsect2">
<a name="nm-access-point-connection-valid"></a><h3>nm_access_point_connection_valid ()</h3>
<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_access_point_connection_valid (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>);</pre>
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
<p>
</p>
</div>
diff --git a/docs/libnm-glib/html/NMActiveConnection.html b/docs/libnm-glib/html/NMActiveConnection.html
index 7f597bfe2..f8548683b 100644
--- a/docs/libnm-glib/html/NMActiveConnection.html
+++ b/docs/libnm-glib/html/NMActiveConnection.html
@@ -202,7 +202,7 @@ Creates a new <a class="link" href="NMActiveConnection.html" title="NMActiveConn
<a name="nm-active-connection-get-connection"></a><h3>nm_active_connection_get_connection ()</h3>
<pre class="programlisting">const <span class="returnvalue">char</span> * nm_active_connection_get_connection (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);</pre>
<p>
-Gets the <span class="type">NMConnection</span>'s DBus object path.
+Gets the <a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a>'s DBus object path.
</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
@@ -214,7 +214,7 @@ Gets the <span class="type">NMConnection</span>'s DBus object path.
</tr>
<tr>
<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
-<td>the object path of the <span class="type">NMConnection</span> inside of <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>.
+<td>the object path of the <a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> inside of <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>.
This is the internal string used by the connection, and must not be modified.</td>
</tr>
</tbody>
@@ -225,7 +225,7 @@ This is the internal string used by the connection, and must not be modified.</t
<a name="nm-active-connection-get-uuid"></a><h3>nm_active_connection_get_uuid ()</h3>
<pre class="programlisting">const <span class="returnvalue">char</span> * nm_active_connection_get_uuid (<em class="parameter"><code><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *connection</code></em>);</pre>
<p>
-Gets the <span class="type">NMConnection</span>'s UUID.
+Gets the <a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a>'s UUID.
</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
@@ -237,7 +237,7 @@ Gets the <span class="type">NMConnection</span>'s UUID.
</tr>
<tr>
<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
-<td>the UUID of the <span class="type">NMConnection</span> that backs the <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>.
+<td>the UUID of the <a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> that backs the <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>.
This is the internal string used by the connection, and must not be modified.</td>
</tr>
</tbody>
diff --git a/docs/libnm-glib/html/NMClient.html b/docs/libnm-glib/html/NMClient.html
index b8834f84e..26d99de00 100644
--- a/docs/libnm-glib/html/NMClient.html
+++ b/docs/libnm-glib/html/NMClient.html
@@ -67,7 +67,7 @@ const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
<span class="returnvalue">void</span> <a class="link" href="NMClient.html#nm-client-activate-connection" title="nm_client_activate_connection ()">nm_client_activate_connection</a> (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>,
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *specific_object</code></em>,
<em class="parameter"><code><a class="link" href="NMClient.html#NMClientActivateFn" title="NMClientActivateFn ()"><span class="type">NMClientActivateFn</span></a> callback</code></em>,
@@ -79,7 +79,7 @@ const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
<span class="returnvalue">void</span> <a class="link" href="NMClient.html#nm-client-add-and-activate-connection" title="nm_client_add_and_activate_connection ()">nm_client_add_and_activate_connection</a>
(<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *partial</code></em>,
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *partial</code></em>,
<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *specific_object</code></em>,
<em class="parameter"><code><a class="link" href="NMClient.html#NMClientAddActivateFn" title="NMClientAddActivateFn ()"><span class="type">NMClientAddActivateFn</span></a> callback</code></em>,
@@ -390,7 +390,7 @@ Gets a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">
<div class="refsect2">
<a name="nm-client-activate-connection"></a><h3>nm_client_activate_connection ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span> nm_client_activate_connection (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>,
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *specific_object</code></em>,
<em class="parameter"><code><a class="link" href="NMClient.html#NMClientActivateFn" title="NMClientActivateFn ()"><span class="type">NMClientActivateFn</span></a> callback</code></em>,
@@ -414,7 +414,7 @@ determine which network to connect to given the settings in <em class="parameter
</tr>
<tr>
<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
-<td>an <span class="type">NMConnection</span>
+<td>an <a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a>
</td>
</tr>
<tr>
@@ -462,7 +462,7 @@ details of the newly added connection. <span class="annotation">[<acronym title=
<a name="nm-client-add-and-activate-connection"></a><h3>nm_client_add_and_activate_connection ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span> nm_client_add_and_activate_connection
(<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *partial</code></em>,
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *partial</code></em>,
<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *specific_object</code></em>,
<em class="parameter"><code><a class="link" href="NMClient.html#NMClientAddActivateFn" title="NMClientAddActivateFn ()"><span class="type">NMClientAddActivateFn</span></a> callback</code></em>,
@@ -483,7 +483,7 @@ Cannot be used for VPN connections at this time.
</tr>
<tr>
<td><p><span class="term"><em class="parameter"><code>partial</code></em> :</span></p></td>
-<td>an <span class="type">NMConnection</span> to add; the connection may be
+<td>an <a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> to add; the connection may be
partially filled (or even NULL) and will be completed by NetworkManager
using the given <em class="parameter"><code>device</code></em> and <em class="parameter"><code>specific_object</code></em> before being added. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
</td>
diff --git a/docs/libnm-glib/html/NMDevice.html b/docs/libnm-glib/html/NMDevice.html
index 3af508c4f..f7f01aa2a 100644
--- a/docs/libnm-glib/html/NMDevice.html
+++ b/docs/libnm-glib/html/NMDevice.html
@@ -56,6 +56,7 @@
#define <a class="link" href="NMDevice.html#NM-DEVICE-IP6-CONFIG:CAPS" title="NM_DEVICE_IP6_CONFIG">NM_DEVICE_IP6_CONFIG</a>
#define <a class="link" href="NMDevice.html#NM-DEVICE-DHCP6-CONFIG:CAPS" title="NM_DEVICE_DHCP6_CONFIG">NM_DEVICE_DHCP6_CONFIG</a>
#define <a class="link" href="NMDevice.html#NM-DEVICE-STATE:CAPS" title="NM_DEVICE_STATE">NM_DEVICE_STATE</a>
+#define <a class="link" href="NMDevice.html#NM-DEVICE-ACTIVE-CONNECTION:CAPS" title="NM_DEVICE_ACTIVE_CONNECTION">NM_DEVICE_ACTIVE_CONNECTION</a>
#define <a class="link" href="NMDevice.html#NM-DEVICE-VENDOR:CAPS" title="NM_DEVICE_VENDOR">NM_DEVICE_VENDOR</a>
#define <a class="link" href="NMDevice.html#NM-DEVICE-PRODUCT:CAPS" title="NM_DEVICE_PRODUCT">NM_DEVICE_PRODUCT</a>
<a class="link" href="NMDevice.html#NMDevice-struct" title="NMDevice">NMDevice</a>;
@@ -75,6 +76,7 @@ const <span class="returnvalue">char</span> * <a class="link" href="NMD
<a class="link" href="NMIP6Config.html" title="NMIP6Config"><span class="returnvalue">NMIP6Config</span></a> * <a class="link" href="NMDevice.html#nm-device-get-ip6-config" title="nm_device_get_ip6_config ()">nm_device_get_ip6_config</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);
<a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"><span class="returnvalue">NMDHCP6Config</span></a> * <a class="link" href="NMDevice.html#nm-device-get-dhcp6-config" title="nm_device_get_dhcp6_config ()">nm_device_get_dhcp6_config</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);
<span class="returnvalue">NMDeviceState</span> <a class="link" href="NMDevice.html#nm-device-get-state" title="nm_device_get_state ()">nm_device_get_state</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);
+<a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="returnvalue">NMActiveConnection</span></a> * <a class="link" href="NMDevice.html#nm-device-get-active-connection" title="nm_device_get_active_connection ()">nm_device_get_active_connection</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);
const <span class="returnvalue">char</span> * <a class="link" href="NMDevice.html#nm-device-get-product" title="nm_device_get_product ()">nm_device_get_product</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);
const <span class="returnvalue">char</span> * <a class="link" href="NMDevice.html#nm-device-get-vendor" title="nm_device_get_vendor ()">nm_device_get_vendor</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);
<span class="returnvalue">void</span> (<a class="link" href="NMDevice.html#NMDeviceDeactivateFn" title="NMDeviceDeactivateFn ()">*NMDeviceDeactivateFn</a>) (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
@@ -86,7 +88,7 @@ const <span class="returnvalue">char</span> * <a class="link" href="NMD
<a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * <a class="link" href="NMDevice.html#nm-device-filter-connections" title="nm_device_filter_connections ()">nm_device_filter_connections</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *connections</code></em>);
<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMDevice.html#nm-device-connection-valid" title="nm_device_connection_valid ()">nm_device_connection_valid</a> (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>);
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>);
</pre>
</div>
<div class="refsect1">
@@ -105,6 +107,7 @@ const <span class="returnvalue">char</span> * <a class="link" href="NMD
<div class="refsect1">
<a name="NMDevice.properties"></a><h2>Properties</h2>
<pre class="synopsis">
+ "<a class="link" href="NMDevice.html#NMDevice--active-connection" title='The "active-connection" property'>active-connection</a>" <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>* : Read
"<a class="link" href="NMDevice.html#NMDevice--capabilities" title='The "capabilities" property'>capabilities</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read
"<a class="link" href="NMDevice.html#NMDevice--device-type" title='The "device-type" property'>device-type</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct Only
"<a class="link" href="NMDevice.html#NMDevice--dhcp4-config" title='The "dhcp4-config" property'>dhcp4-config</a>" <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"><span class="type">NMDHCP4Config</span></a>* : Read
@@ -240,6 +243,14 @@ const <span class="returnvalue">char</span> * <a class="link" href="NMD
</div>
<hr>
<div class="refsect2">
+<a name="NM-DEVICE-ACTIVE-CONNECTION:CAPS"></a><h3>NM_DEVICE_ACTIVE_CONNECTION</h3>
+<pre class="programlisting">#define NM_DEVICE_ACTIVE_CONNECTION "active-connection"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
<a name="NM-DEVICE-VENDOR:CAPS"></a><h3>NM_DEVICE_VENDOR</h3>
<pre class="programlisting">#define NM_DEVICE_VENDOR "vendor"
</pre>
@@ -620,6 +631,29 @@ Gets the current <a class="link" href="NMDevice.html" title="NMDevice"><span cla
</div>
<hr>
<div class="refsect2">
+<a name="nm-device-get-active-connection"></a><h3>nm_device_get_active_connection ()</h3>
+<pre class="programlisting"><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="returnvalue">NMActiveConnection</span></a> * nm_device_get_active_connection (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
+<p>
+Gets the <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> object which owns this device during activation.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>device</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
<a name="nm-device-get-product"></a><h3>nm_device_get_product ()</h3>
<pre class="programlisting">const <span class="returnvalue">char</span> * nm_device_get_product (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>);</pre>
<p>
@@ -728,13 +762,13 @@ incompatible with the device.
</tr>
<tr>
<td><p><span class="term"><em class="parameter"><code>connections</code></em> :</span></p></td>
-<td>a list of <span class="type">NMConnection</span> objects to filter. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.Connection]</span>
+<td>a list of <a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> objects to filter. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.Connection]</span>
</td>
</tr>
<tr>
<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
<td>a
-list of <span class="type">NMConnection</span> objects that could be activated with the given <em class="parameter"><code>device</code></em>.
+list of <a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> objects that could be activated with the given <em class="parameter"><code>device</code></em>.
The elements of the list are owned by their creator and should not be freed
by the caller, but the returned list itself is owned by the caller and should
be freed with <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#g-slist-free"><code class="function">g_slist_free()</code></a> when it is no longer required. <span class="annotation">[<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.Connection]</span>
@@ -747,7 +781,7 @@ be freed with <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-
<div class="refsect2">
<a name="nm-device-connection-valid"></a><h3>nm_device_connection_valid ()</h3>
<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_device_connection_valid (<em class="parameter"><code><a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> *device</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>);</pre>
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
<p>
Validates a given connection for a given <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> object and returns
whether the connection may be activated with the device. For example if
@@ -766,7 +800,7 @@ device.
</tr>
<tr>
<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
-<td>an <span class="type">NMConnection</span> to validate against <em class="parameter"><code>device</code></em>
+<td>an <a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> to validate against <em class="parameter"><code>device</code></em>
</td>
</tr>
<tr>
@@ -782,6 +816,14 @@ if is incompatible with the device's capabilities and characteristics.</td>
<div class="refsect1">
<a name="NMDevice.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
+<a name="NMDevice--active-connection"></a><h3>The <code class="literal">"active-connection"</code> property</h3>
+<pre class="programlisting"> "active-connection" <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>* : Read</pre>
+<p>
+The <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> object that "owns" this device during activation.
+</p>
+</div>
+<hr>
+<div class="refsect2">
<a name="NMDevice--capabilities"></a><h3>The <code class="literal">"capabilities"</code> property</h3>
<pre class="programlisting"> "capabilities" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read</pre>
<p>
diff --git a/docs/libnm-glib/html/NMRemoteConnection.html b/docs/libnm-glib/html/NMRemoteConnection.html
index 07e3564bf..8be508bee 100644
--- a/docs/libnm-glib/html/NMRemoteConnection.html
+++ b/docs/libnm-glib/html/NMRemoteConnection.html
@@ -75,7 +75,7 @@
<a name="NMRemoteConnection.object-hierarchy"></a><h2>Object Hierarchy</h2>
<pre class="synopsis">
<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- +----NMConnection
+ +----<a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html">NMConnection</a>
+----NMRemoteConnection
</pre>
</div>
@@ -329,7 +329,7 @@ invisible to the current user.
<tbody>
<tr>
<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
-<td>a <span class="type">NMConnection</span>
+<td>a <a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a>
</td>
</tr>
<tr>
@@ -353,7 +353,7 @@ still visible to the user.
<tbody>
<tr>
<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
-<td>a <span class="type">NMConnection</span>
+<td>a <a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a>
</td>
</tr>
<tr>
diff --git a/docs/libnm-glib/html/NMRemoteSettings.html b/docs/libnm-glib/html/NMRemoteSettings.html
index b3741ef3e..4274c72a9 100644
--- a/docs/libnm-glib/html/NMRemoteSettings.html
+++ b/docs/libnm-glib/html/NMRemoteSettings.html
@@ -73,7 +73,7 @@ struct <a class="link" href="NMRemoteSettings.html#NMRemoteSettings
(<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *uuid</code></em>);
<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMRemoteSettings.html#nm-remote-settings-add-connection" title="nm_remote_settings_add_connection ()">nm_remote_settings_add_connection</a> (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>,
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
<em class="parameter"><code><a class="link" href="NMRemoteSettings.html#NMRemoteSettingsAddConnectionFunc" title="NMRemoteSettingsAddConnectionFunc ()"><span class="type">NMRemoteSettingsAddConnectionFunc</span></a> callback</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMRemoteSettings.html#nm-remote-settings-save-hostname" title="nm_remote_settings_save_hostname ()">nm_remote_settings_save_hostname</a> (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>,
@@ -394,7 +394,7 @@ not known. <span class="annotation">[<acronym title="Don't free data after the c
<div class="refsect2">
<a name="nm-remote-settings-add-connection"></a><h3>nm_remote_settings_add_connection ()</h3>
<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_remote_settings_add_connection (<em class="parameter"><code><a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> *settings</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>,
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
<em class="parameter"><code><a class="link" href="NMRemoteSettings.html#NMRemoteSettingsAddConnectionFunc" title="NMRemoteSettingsAddConnectionFunc ()"><span class="type">NMRemoteSettingsAddConnectionFunc</span></a> callback</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
<p>
diff --git a/docs/libnm-glib/html/NMSecretAgent.html b/docs/libnm-glib/html/NMSecretAgent.html
index 8da09f9cd..4b08499c2 100644
--- a/docs/libnm-glib/html/NMSecretAgent.html
+++ b/docs/libnm-glib/html/NMSecretAgent.html
@@ -53,16 +53,16 @@ enum <a class="link" href="NMSecretAgent.html#NMSecretAgentGetSec
#define <a class="link" href="NMSecretAgent.html#NM-SECRET-AGENT-REGISTRATION-RESULT:CAPS" title="NM_SECRET_AGENT_REGISTRATION_RESULT">NM_SECRET_AGENT_REGISTRATION_RESULT</a>
<a class="link" href="NMSecretAgent.html#NMSecretAgent-struct" title="NMSecretAgent">NMSecretAgent</a>;
<span class="returnvalue">void</span> (<a class="link" href="NMSecretAgent.html#NMSecretAgentGetSecretsFunc" title="NMSecretAgentGetSecretsFunc ()">*NMSecretAgentGetSecretsFunc</a>) (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *agent</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>,
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *secrets</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
<span class="returnvalue">void</span> (<a class="link" href="NMSecretAgent.html#NMSecretAgentSaveSecretsFunc" title="NMSecretAgentSaveSecretsFunc ()">*NMSecretAgentSaveSecretsFunc</a>) (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *agent</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>,
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
<span class="returnvalue">void</span> (<a class="link" href="NMSecretAgent.html#NMSecretAgentDeleteSecretsFunc" title="NMSecretAgentDeleteSecretsFunc ()">*NMSecretAgentDeleteSecretsFunc</a>) (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *agent</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>,
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
<a class="link" href="NMSecretAgent.html#NMSecretAgentClass" title="NMSecretAgentClass">NMSecretAgentClass</a>;
@@ -70,18 +70,18 @@ enum <a class="link" href="NMSecretAgent.html#NMSecretAgentGetSec
<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSecretAgent.html#nm-secret-agent-register" title="nm_secret_agent_register ()">nm_secret_agent_register</a> (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *self</code></em>);
<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSecretAgent.html#nm-secret-agent-unregister" title="nm_secret_agent_unregister ()">nm_secret_agent_unregister</a> (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *self</code></em>);
<span class="returnvalue">void</span> <a class="link" href="NMSecretAgent.html#nm-secret-agent-get-secrets" title="nm_secret_agent_get_secrets ()">nm_secret_agent_get_secrets</a> (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *self</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>,
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *setting_name</code></em>,
<em class="parameter"><code>const <span class="type">char</span> **hints</code></em>,
<em class="parameter"><code><a class="link" href="NMSecretAgent.html#NMSecretAgentGetSecretsFlags" title="enum NMSecretAgentGetSecretsFlags"><span class="type">NMSecretAgentGetSecretsFlags</span></a> flags</code></em>,
<em class="parameter"><code><a class="link" href="NMSecretAgent.html#NMSecretAgentGetSecretsFunc" title="NMSecretAgentGetSecretsFunc ()"><span class="type">NMSecretAgentGetSecretsFunc</span></a> callback</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> callback_data</code></em>);
<span class="returnvalue">void</span> <a class="link" href="NMSecretAgent.html#nm-secret-agent-save-secrets" title="nm_secret_agent_save_secrets ()">nm_secret_agent_save_secrets</a> (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *self</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>,
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
<em class="parameter"><code><a class="link" href="NMSecretAgent.html#NMSecretAgentSaveSecretsFunc" title="NMSecretAgentSaveSecretsFunc ()"><span class="type">NMSecretAgentSaveSecretsFunc</span></a> callback</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> callback_data</code></em>);
<span class="returnvalue">void</span> <a class="link" href="NMSecretAgent.html#nm-secret-agent-delete-secrets" title="nm_secret_agent_delete_secrets ()">nm_secret_agent_delete_secrets</a> (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *self</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>,
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
<em class="parameter"><code><a class="link" href="NMSecretAgent.html#NMSecretAgentDeleteSecretsFunc" title="NMSecretAgentDeleteSecretsFunc ()"><span class="type">NMSecretAgentDeleteSecretsFunc</span></a> callback</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> callback_data</code></em>);
</pre>
@@ -225,7 +225,7 @@ is allowed.
<div class="refsect2">
<a name="NMSecretAgentGetSecretsFunc"></a><h3>NMSecretAgentGetSecretsFunc ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span> (*NMSecretAgentGetSecretsFunc) (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *agent</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>,
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *secrets</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
@@ -236,7 +236,7 @@ is allowed.
<div class="refsect2">
<a name="NMSecretAgentSaveSecretsFunc"></a><h3>NMSecretAgentSaveSecretsFunc ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span> (*NMSecretAgentSaveSecretsFunc) (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *agent</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>,
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
<p>
@@ -246,7 +246,7 @@ is allowed.
<div class="refsect2">
<a name="NMSecretAgentDeleteSecretsFunc"></a><h3>NMSecretAgentDeleteSecretsFunc ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span> (*NMSecretAgentDeleteSecretsFunc) (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *agent</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>,
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
<p>
@@ -388,7 +388,7 @@ store secrets on behalf of this user.
<div class="refsect2">
<a name="nm-secret-agent-get-secrets"></a><h3>nm_secret_agent_get_secrets ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span> nm_secret_agent_get_secrets (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *self</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>,
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *setting_name</code></em>,
<em class="parameter"><code>const <span class="type">char</span> **hints</code></em>,
<em class="parameter"><code><a class="link" href="NMSecretAgent.html#NMSecretAgentGetSecretsFlags" title="enum NMSecretAgentGetSecretsFlags"><span class="type">NMSecretAgentGetSecretsFlags</span></a> flags</code></em>,
@@ -414,7 +414,7 @@ VFunc: get_secrets
</tr>
<tr>
<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
-<td>the <span class="type">NMConnection</span> for which we're asked secrets</td>
+<td>the <a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> for which we're asked secrets</td>
</tr>
<tr>
<td><p><span class="term"><em class="parameter"><code>setting_name</code></em> :</span></p></td>
@@ -446,7 +446,7 @@ VFunc: get_secrets
<div class="refsect2">
<a name="nm-secret-agent-save-secrets"></a><h3>nm_secret_agent_save_secrets ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span> nm_secret_agent_save_secrets (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *self</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>,
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
<em class="parameter"><code><a class="link" href="NMSecretAgent.html#NMSecretAgentSaveSecretsFunc" title="NMSecretAgentSaveSecretsFunc ()"><span class="type">NMSecretAgentSaveSecretsFunc</span></a> callback</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> callback_data</code></em>);</pre>
<p>
@@ -466,7 +466,7 @@ VFunc: save_secrets
</tr>
<tr>
<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
-<td>a <span class="type">NMConnection</span>
+<td>a <a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a>
</td>
</tr>
<tr>
@@ -486,7 +486,7 @@ VFunc: save_secrets
<div class="refsect2">
<a name="nm-secret-agent-delete-secrets"></a><h3>nm_secret_agent_delete_secrets ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span> nm_secret_agent_delete_secrets (<em class="parameter"><code><a class="link" href="NMSecretAgent.html" title="NMSecretAgent"><span class="type">NMSecretAgent</span></a> *self</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>,
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
<em class="parameter"><code><a class="link" href="NMSecretAgent.html#NMSecretAgentDeleteSecretsFunc" title="NMSecretAgentDeleteSecretsFunc ()"><span class="type">NMSecretAgentDeleteSecretsFunc</span></a> callback</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> callback_data</code></em>);</pre>
<p>
@@ -506,7 +506,7 @@ VFunc: delete_secrets
</tr>
<tr>
<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
-<td>a <span class="type">NMConnection</span>
+<td>a <a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a>
</td>
</tr>
<tr>
diff --git a/docs/libnm-glib/html/NMWimaxNsp.html b/docs/libnm-glib/html/NMWimaxNsp.html
index 10f11410f..dfff7ffdf 100644
--- a/docs/libnm-glib/html/NMWimaxNsp.html
+++ b/docs/libnm-glib/html/NMWimaxNsp.html
@@ -55,7 +55,7 @@ const <span class="returnvalue">char</span> * <a class="link" href="NMWim
<a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> * <a class="link" href="NMWimaxNsp.html#nm-wimax-nsp-filter-connections" title="nm_wimax_nsp_filter_connections ()">nm_wimax_nsp_filter_connections</a> (<em class="parameter"><code><a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> *nsp</code></em>,
<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *connections</code></em>);
<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMWimaxNsp.html#nm-wimax-nsp-connection-valid" title="nm_wimax_nsp_connection_valid ()">nm_wimax_nsp_connection_valid</a> (<em class="parameter"><code><a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> *nsp</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>);
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>);
</pre>
</div>
<div class="refsect1">
@@ -256,13 +256,13 @@ returned connections will match the <em class="parameter"><code>nsp</code></em>'
<tr>
<td><p><span class="term"><em class="parameter"><code>connections</code></em> :</span></p></td>
<td>a list of
-<span class="type">NMConnection</span> objects to filter. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.Connection]</span>
+<a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> objects to filter. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.Connection]</span>
</td>
</tr>
<tr>
<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
<td>a
-list of <span class="type">NMConnection</span> objects that could be activated with the given <em class="parameter"><code>nsp</code></em>.
+list of <a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> objects that could be activated with the given <em class="parameter"><code>nsp</code></em>.
The elements of the list are owned by their creator and should not be freed
by the caller, but the returned list itself is owned by the caller and should
be freed with <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#g-slist-free"><code class="function">g_slist_free()</code></a> when it is no longer required. <span class="annotation">[<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NetworkManager.Connection]</span>
@@ -275,7 +275,7 @@ be freed with <a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-
<div class="refsect2">
<a name="nm-wimax-nsp-connection-valid"></a><h3>nm_wimax_nsp_connection_valid ()</h3>
<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_wimax_nsp_connection_valid (<em class="parameter"><code><a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp"><span class="type">NMWimaxNsp</span></a> *nsp</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>);</pre>
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
<p>
</p>
</div>
diff --git a/docs/libnm-glib/html/api-index-full.html b/docs/libnm-glib/html/api-index-full.html
index f2b1352a8..311e89966 100644
--- a/docs/libnm-glib/html/api-index-full.html
+++ b/docs/libnm-glib/html/api-index-full.html
@@ -533,6 +533,10 @@ dbus_glib_marshal_nm_secret_agent_VOID__BOXED_STRING_POINTER, function in nm-sec
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMDevice.html#NMDevice--active-connection" title='The "active-connection" property'>NMDevice:active-connection</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="NMDevice.html#NMDevice--capabilities" title='The "capabilities" property'>NMDevice:capabilities</a>, object property in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
@@ -745,6 +749,10 @@ dbus_glib_marshal_nm_secret_agent_VOID__BOXED_STRING_POINTER, function in nm-sec
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMDevice.html#NM-DEVICE-ACTIVE-CONNECTION:CAPS" title="NM_DEVICE_ACTIVE_CONNECTION">NM_DEVICE_ACTIVE_CONNECTION</a>, macro in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="NMDeviceBt.html#NM-DEVICE-BT-CAPABILITIES:CAPS" title="NM_DEVICE_BT_CAPABILITIES">NM_DEVICE_BT_CAPABILITIES</a>, macro in <a class="link" href="NMDeviceBt.html" title="NMDeviceBt">NMDeviceBt</a>
</dt>
<dd></dd>
@@ -845,6 +853,10 @@ dbus_glib_marshal_nm_secret_agent_VOID__BOXED_STRING_POINTER, function in nm-sec
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMDevice.html#nm-device-get-active-connection" title="nm_device_get_active_connection ()">nm_device_get_active_connection</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="NMDevice.html#nm-device-get-capabilities" title="nm_device_get_capabilities ()">nm_device_get_capabilities</a>, function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
diff --git a/docs/libnm-glib/html/ch02.html b/docs/libnm-glib/html/ch02.html
index 6d8146616..bfc170070 100644
--- a/docs/libnm-glib/html/ch02.html
+++ b/docs/libnm-glib/html/ch02.html
@@ -21,7 +21,7 @@
</tr></table>
<div class="chapter">
<div class="titlepage"><div><div><h2 class="title">
-<a name="id366291"></a>libnm-glib API Reference</h2></div></div></div>
+<a name="id340247"></a>libnm-glib API Reference</h2></div></div></div>
<div class="toc"><dl>
<dt>
<span class="refentrytitle"><a href="NMClient.html">NMClient</a></span><span class="refpurpose"></span>
diff --git a/docs/libnm-glib/html/index.html b/docs/libnm-glib/html/index.html
index 0eb745a34..665edd03a 100644
--- a/docs/libnm-glib/html/index.html
+++ b/docs/libnm-glib/html/index.html
@@ -29,7 +29,7 @@
</p></div>
<div><p class="copyright">Copyright © 2011 The NetworkManager Authors</p></div>
<div><div class="legalnotice">
-<a name="id336694"></a><p>
+<a name="id310650"></a><p>
Permission is granted to copy, distribute and/or modify this
document under the terms of the <em class="citetitle">GNU Free
Documentation License</em>, Version 1.1 or any later
diff --git a/docs/libnm-glib/html/index.sgml b/docs/libnm-glib/html/index.sgml
index de8edcebd..db6d2d8af 100644
--- a/docs/libnm-glib/html/index.sgml
+++ b/docs/libnm-glib/html/index.sgml
@@ -112,6 +112,7 @@
<ANCHOR id="NM-DEVICE-IP6-CONFIG:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-IP6-CONFIG:CAPS">
<ANCHOR id="NM-DEVICE-DHCP6-CONFIG:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-DHCP6-CONFIG:CAPS">
<ANCHOR id="NM-DEVICE-STATE:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-STATE:CAPS">
+<ANCHOR id="NM-DEVICE-ACTIVE-CONNECTION:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-ACTIVE-CONNECTION:CAPS">
<ANCHOR id="NM-DEVICE-VENDOR:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-VENDOR:CAPS">
<ANCHOR id="NM-DEVICE-PRODUCT:CAPS" href="libnm-glib/NMDevice.html#NM-DEVICE-PRODUCT:CAPS">
<ANCHOR id="NMDevice-struct" href="libnm-glib/NMDevice.html#NMDevice-struct">
@@ -130,6 +131,7 @@
<ANCHOR id="nm-device-get-ip6-config" href="libnm-glib/NMDevice.html#nm-device-get-ip6-config">
<ANCHOR id="nm-device-get-dhcp6-config" href="libnm-glib/NMDevice.html#nm-device-get-dhcp6-config">
<ANCHOR id="nm-device-get-state" href="libnm-glib/NMDevice.html#nm-device-get-state">
+<ANCHOR id="nm-device-get-active-connection" href="libnm-glib/NMDevice.html#nm-device-get-active-connection">
<ANCHOR id="nm-device-get-product" href="libnm-glib/NMDevice.html#nm-device-get-product">
<ANCHOR id="nm-device-get-vendor" href="libnm-glib/NMDevice.html#nm-device-get-vendor">
<ANCHOR id="NMDeviceDeactivateFn" href="libnm-glib/NMDevice.html#NMDeviceDeactivateFn">
@@ -137,6 +139,7 @@
<ANCHOR id="nm-device-filter-connections" href="libnm-glib/NMDevice.html#nm-device-filter-connections">
<ANCHOR id="nm-device-connection-valid" href="libnm-glib/NMDevice.html#nm-device-connection-valid">
<ANCHOR id="NMDevice.property-details" href="libnm-glib/NMDevice.html#NMDevice.property-details">
+<ANCHOR id="NMDevice--active-connection" href="libnm-glib/NMDevice.html#NMDevice--active-connection">
<ANCHOR id="NMDevice--capabilities" href="libnm-glib/NMDevice.html#NMDevice--capabilities">
<ANCHOR id="NMDevice--device-type" href="libnm-glib/NMDevice.html#NMDevice--device-type">
<ANCHOR id="NMDevice--dhcp4-config" href="libnm-glib/NMDevice.html#NMDevice--dhcp4-config">
diff --git a/docs/libnm-glib/html/libnm-glib-NMVpnPluginUi.html b/docs/libnm-glib/html/libnm-glib-NMVpnPluginUi.html
index d517644e2..834996c20 100644
--- a/docs/libnm-glib/html/libnm-glib-NMVpnPluginUi.html
+++ b/docs/libnm-glib/html/libnm-glib-NMVpnPluginUi.html
@@ -49,23 +49,23 @@ enum <a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPlu
struct <a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface" title="struct NMVpnPluginUiInterface">NMVpnPluginUiInterface</a>;
<a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiWidgetInterface" title="struct NMVpnPluginUiWidgetInterface"><span class="returnvalue">NMVpnPluginUiWidgetInterface</span></a> * <a class="link" href="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-interface-ui-factory" title="nm_vpn_plugin_ui_interface_ui_factory ()">nm_vpn_plugin_ui_interface_ui_factory</a>
(<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface" title="struct NMVpnPluginUiInterface"><span class="type">NMVpnPluginUiInterface</span></a> *iface</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>,
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> <a class="link" href="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-interface-get-capabilities" title="nm_vpn_plugin_ui_interface_get_capabilities ()">nm_vpn_plugin_ui_interface_get_capabilities</a>
(<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface" title="struct NMVpnPluginUiInterface"><span class="type">NMVpnPluginUiInterface</span></a> *iface</code></em>);
-<span class="returnvalue">NMConnection</span> * <a class="link" href="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-interface-import" title="nm_vpn_plugin_ui_interface_import ()">nm_vpn_plugin_ui_interface_import</a> (<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface" title="struct NMVpnPluginUiInterface"><span class="type">NMVpnPluginUiInterface</span></a> *iface</code></em>,
+<a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="returnvalue">NMConnection</span></a> * <a class="link" href="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-interface-import" title="nm_vpn_plugin_ui_interface_import ()">nm_vpn_plugin_ui_interface_import</a> (<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface" title="struct NMVpnPluginUiInterface"><span class="type">NMVpnPluginUiInterface</span></a> *iface</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *path</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-interface-export" title="nm_vpn_plugin_ui_interface_export ()">nm_vpn_plugin_ui_interface_export</a> (<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface" title="struct NMVpnPluginUiInterface"><span class="type">NMVpnPluginUiInterface</span></a> *iface</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *path</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>,
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
<span class="returnvalue">char</span> * <a class="link" href="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-interface-get-suggested-name" title="nm_vpn_plugin_ui_interface_get_suggested_name ()">nm_vpn_plugin_ui_interface_get_suggested_name</a>
(<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface" title="struct NMVpnPluginUiInterface"><span class="type">NMVpnPluginUiInterface</span></a> *iface</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>);
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>);
<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-interface-delete-connection" title="nm_vpn_plugin_ui_interface_delete_connection ()">nm_vpn_plugin_ui_interface_delete_connection</a>
(<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface" title="struct NMVpnPluginUiInterface"><span class="type">NMVpnPluginUiInterface</span></a> *iface</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>,
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
#define <a class="link" href="libnm-glib-NMVpnPluginUi.html#NM-TYPE-VPN-PLUGIN-UI-WIDGET-INTERFACE:CAPS" title="NM_TYPE_VPN_PLUGIN_UI_WIDGET_INTERFACE">NM_TYPE_VPN_PLUGIN_UI_WIDGET_INTERFACE</a>
#define <a class="link" href="libnm-glib-NMVpnPluginUi.html#NM-VPN-PLUGIN-UI-WIDGET-INTERFACE:CAPS" title="NM_VPN_PLUGIN_UI_WIDGET_INTERFACE()">NM_VPN_PLUGIN_UI_WIDGET_INTERFACE</a> (obj)
@@ -78,11 +78,11 @@ struct <a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPlu
(<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiWidgetInterface" title="struct NMVpnPluginUiWidgetInterface"><span class="type">NMVpnPluginUiWidgetInterface</span></a> *iface</code></em>);
<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-widget-interface-update-connection" title="nm_vpn_plugin_ui_widget_interface_update_connection ()">nm_vpn_plugin_ui_widget_interface_update_connection</a>
(<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiWidgetInterface" title="struct NMVpnPluginUiWidgetInterface"><span class="type">NMVpnPluginUiWidgetInterface</span></a> *iface</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>,
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="libnm-glib-NMVpnPluginUi.html#nm-vpn-plugin-ui-widget-interface-save-secrets" title="nm_vpn_plugin_ui_widget_interface_save_secrets ()">nm_vpn_plugin_ui_widget_interface_save_secrets</a>
(<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiWidgetInterface" title="struct NMVpnPluginUiWidgetInterface"><span class="type">NMVpnPluginUiWidgetInterface</span></a> *iface</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>,
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
</pre>
</div>
@@ -236,7 +236,7 @@ struct <a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPlu
<a name="nm-vpn-plugin-ui-interface-ui-factory"></a><h3>nm_vpn_plugin_ui_interface_ui_factory ()</h3>
<pre class="programlisting"><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiWidgetInterface" title="struct NMVpnPluginUiWidgetInterface"><span class="returnvalue">NMVpnPluginUiWidgetInterface</span></a> * nm_vpn_plugin_ui_interface_ui_factory
(<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface" title="struct NMVpnPluginUiInterface"><span class="type">NMVpnPluginUiInterface</span></a> *iface</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>,
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
<p>
</p>
@@ -252,7 +252,7 @@ struct <a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPlu
<hr>
<div class="refsect2">
<a name="nm-vpn-plugin-ui-interface-import"></a><h3>nm_vpn_plugin_ui_interface_import ()</h3>
-<pre class="programlisting"><span class="returnvalue">NMConnection</span> * nm_vpn_plugin_ui_interface_import (<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface" title="struct NMVpnPluginUiInterface"><span class="type">NMVpnPluginUiInterface</span></a> *iface</code></em>,
+<pre class="programlisting"><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="returnvalue">NMConnection</span></a> * nm_vpn_plugin_ui_interface_import (<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface" title="struct NMVpnPluginUiInterface"><span class="type">NMVpnPluginUiInterface</span></a> *iface</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *path</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
<p>
@@ -263,7 +263,7 @@ struct <a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPlu
<a name="nm-vpn-plugin-ui-interface-export"></a><h3>nm_vpn_plugin_ui_interface_export ()</h3>
<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_vpn_plugin_ui_interface_export (<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface" title="struct NMVpnPluginUiInterface"><span class="type">NMVpnPluginUiInterface</span></a> *iface</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *path</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>,
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
<p>
</p>
@@ -273,7 +273,7 @@ struct <a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPlu
<a name="nm-vpn-plugin-ui-interface-get-suggested-name"></a><h3>nm_vpn_plugin_ui_interface_get_suggested_name ()</h3>
<pre class="programlisting"><span class="returnvalue">char</span> * nm_vpn_plugin_ui_interface_get_suggested_name
(<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface" title="struct NMVpnPluginUiInterface"><span class="type">NMVpnPluginUiInterface</span></a> *iface</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>);</pre>
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
<p>
</p>
</div>
@@ -282,7 +282,7 @@ struct <a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPlu
<a name="nm-vpn-plugin-ui-interface-delete-connection"></a><h3>nm_vpn_plugin_ui_interface_delete_connection ()</h3>
<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_vpn_plugin_ui_interface_delete_connection
(<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiInterface" title="struct NMVpnPluginUiInterface"><span class="type">NMVpnPluginUiInterface</span></a> *iface</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>,
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
<p>
</p>
@@ -377,7 +377,7 @@ struct <a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPlu
<a name="nm-vpn-plugin-ui-widget-interface-update-connection"></a><h3>nm_vpn_plugin_ui_widget_interface_update_connection ()</h3>
<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_vpn_plugin_ui_widget_interface_update_connection
(<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiWidgetInterface" title="struct NMVpnPluginUiWidgetInterface"><span class="type">NMVpnPluginUiWidgetInterface</span></a> *iface</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>,
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
<p>
</p>
@@ -387,7 +387,7 @@ struct <a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPlu
<a name="nm-vpn-plugin-ui-widget-interface-save-secrets"></a><h3>nm_vpn_plugin_ui_widget_interface_save_secrets ()</h3>
<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_vpn_plugin_ui_widget_interface_save_secrets
(<em class="parameter"><code><a class="link" href="libnm-glib-NMVpnPluginUi.html#NMVpnPluginUiWidgetInterface" title="struct NMVpnPluginUiWidgetInterface"><span class="type">NMVpnPluginUiWidgetInterface</span></a> *iface</code></em>,
- <em class="parameter"><code><span class="type">NMConnection</span> *connection</code></em>,
+ <em class="parameter"><code><a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
<p>
</p>
diff --git a/docs/libnm-glib/html/libnm-glib.devhelp b/docs/libnm-glib/html/libnm-glib.devhelp
index 784eca149..cd1d08574 100644
--- a/docs/libnm-glib/html/libnm-glib.devhelp
+++ b/docs/libnm-glib/html/libnm-glib.devhelp
@@ -122,6 +122,7 @@
<function name="NM_DEVICE_IP6_CONFIG" link="NMDevice.html#NM-DEVICE-IP6-CONFIG:CAPS"/>
<function name="NM_DEVICE_DHCP6_CONFIG" link="NMDevice.html#NM-DEVICE-DHCP6-CONFIG:CAPS"/>
<function name="NM_DEVICE_STATE" link="NMDevice.html#NM-DEVICE-STATE:CAPS"/>
+ <function name="NM_DEVICE_ACTIVE_CONNECTION" link="NMDevice.html#NM-DEVICE-ACTIVE-CONNECTION:CAPS"/>
<function name="NM_DEVICE_VENDOR" link="NMDevice.html#NM-DEVICE-VENDOR:CAPS"/>
<function name="NM_DEVICE_PRODUCT" link="NMDevice.html#NM-DEVICE-PRODUCT:CAPS"/>
<function name="NMDevice" link="NMDevice.html#NMDevice-struct"/>
@@ -140,12 +141,14 @@
<function name="nm_device_get_ip6_config ()" link="NMDevice.html#nm-device-get-ip6-config"/>
<function name="nm_device_get_dhcp6_config ()" link="NMDevice.html#nm-device-get-dhcp6-config"/>
<function name="nm_device_get_state ()" link="NMDevice.html#nm-device-get-state"/>
+ <function name="nm_device_get_active_connection ()" link="NMDevice.html#nm-device-get-active-connection"/>
<function name="nm_device_get_product ()" link="NMDevice.html#nm-device-get-product"/>
<function name="nm_device_get_vendor ()" link="NMDevice.html#nm-device-get-vendor"/>
<function name="NMDeviceDeactivateFn ()" link="NMDevice.html#NMDeviceDeactivateFn"/>
<function name="nm_device_disconnect ()" link="NMDevice.html#nm-device-disconnect"/>
<function name="nm_device_filter_connections ()" link="NMDevice.html#nm-device-filter-connections"/>
<function name="nm_device_connection_valid ()" link="NMDevice.html#nm-device-connection-valid"/>
+ <function name="The &quot;active-connection&quot; property" link="NMDevice.html#NMDevice--active-connection"/>
<function name="The &quot;capabilities&quot; property" link="NMDevice.html#NMDevice--capabilities"/>
<function name="The &quot;device-type&quot; property" link="NMDevice.html#NMDevice--device-type"/>
<function name="The &quot;dhcp4-config&quot; property" link="NMDevice.html#NMDevice--dhcp4-config"/>
diff --git a/docs/libnm-glib/html/libnm-glib.devhelp2 b/docs/libnm-glib/html/libnm-glib.devhelp2
index 4cc1d64b1..a74fd6879 100644
--- a/docs/libnm-glib/html/libnm-glib.devhelp2
+++ b/docs/libnm-glib/html/libnm-glib.devhelp2
@@ -122,6 +122,7 @@
<keyword type="macro" name="NM_DEVICE_IP6_CONFIG" link="NMDevice.html#NM-DEVICE-IP6-CONFIG:CAPS"/>
<keyword type="macro" name="NM_DEVICE_DHCP6_CONFIG" link="NMDevice.html#NM-DEVICE-DHCP6-CONFIG:CAPS"/>
<keyword type="macro" name="NM_DEVICE_STATE" link="NMDevice.html#NM-DEVICE-STATE:CAPS"/>
+ <keyword type="macro" name="NM_DEVICE_ACTIVE_CONNECTION" link="NMDevice.html#NM-DEVICE-ACTIVE-CONNECTION:CAPS"/>
<keyword type="macro" name="NM_DEVICE_VENDOR" link="NMDevice.html#NM-DEVICE-VENDOR:CAPS"/>
<keyword type="macro" name="NM_DEVICE_PRODUCT" link="NMDevice.html#NM-DEVICE-PRODUCT:CAPS"/>
<keyword type="struct" name="NMDevice" link="NMDevice.html#NMDevice-struct"/>
@@ -140,12 +141,14 @@
<keyword type="function" name="nm_device_get_ip6_config ()" link="NMDevice.html#nm-device-get-ip6-config"/>
<keyword type="function" name="nm_device_get_dhcp6_config ()" link="NMDevice.html#nm-device-get-dhcp6-config"/>
<keyword type="function" name="nm_device_get_state ()" link="NMDevice.html#nm-device-get-state"/>
+ <keyword type="function" name="nm_device_get_active_connection ()" link="NMDevice.html#nm-device-get-active-connection"/>
<keyword type="function" name="nm_device_get_product ()" link="NMDevice.html#nm-device-get-product"/>
<keyword type="function" name="nm_device_get_vendor ()" link="NMDevice.html#nm-device-get-vendor"/>
<keyword type="function" name="NMDeviceDeactivateFn ()" link="NMDevice.html#NMDeviceDeactivateFn"/>
<keyword type="function" name="nm_device_disconnect ()" link="NMDevice.html#nm-device-disconnect"/>
<keyword type="function" name="nm_device_filter_connections ()" link="NMDevice.html#nm-device-filter-connections"/>
<keyword type="function" name="nm_device_connection_valid ()" link="NMDevice.html#nm-device-connection-valid"/>
+ <keyword type="property" name="The &quot;active-connection&quot; property" link="NMDevice.html#NMDevice--active-connection"/>
<keyword type="property" name="The &quot;capabilities&quot; property" link="NMDevice.html#NMDevice--capabilities"/>
<keyword type="property" name="The &quot;device-type&quot; property" link="NMDevice.html#NMDevice--device-type"/>
<keyword type="property" name="The &quot;dhcp4-config&quot; property" link="NMDevice.html#NMDevice--dhcp4-config"/>
diff --git a/docs/libnm-glib/html/object-tree.html b/docs/libnm-glib/html/object-tree.html
index 1ebe13691..6bcd8f422 100644
--- a/docs/libnm-glib/html/object-tree.html
+++ b/docs/libnm-glib/html/object-tree.html
@@ -41,7 +41,7 @@
<a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config">NMDHCP4Config</a>
<a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config">NMDHCP6Config</a>
<a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings">NMRemoteSettings</a>
- NMConnection
+ <a href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/NMConnection.html">NMConnection</a>
<a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
<a class="link" href="NMSecretAgent.html" title="NMSecretAgent">NMSecretAgent</a>
</pre>
diff --git a/docs/libnm-glib/libnm-glib-sections.txt b/docs/libnm-glib/libnm-glib-sections.txt
index 71910fd58..90733f9b2 100644
--- a/docs/libnm-glib/libnm-glib-sections.txt
+++ b/docs/libnm-glib/libnm-glib-sections.txt
@@ -302,6 +302,7 @@ NM_DEVICE_DHCP4_CONFIG
NM_DEVICE_IP6_CONFIG
NM_DEVICE_DHCP6_CONFIG
NM_DEVICE_STATE
+NM_DEVICE_ACTIVE_CONNECTION
NM_DEVICE_VENDOR
NM_DEVICE_PRODUCT
NMDevice
@@ -320,6 +321,7 @@ nm_device_get_dhcp4_config
nm_device_get_ip6_config
nm_device_get_dhcp6_config
nm_device_get_state
+nm_device_get_active_connection
nm_device_get_product
nm_device_get_vendor
NMDeviceDeactivateFn
diff --git a/docs/libnm-util/html/NMConnection.html b/docs/libnm-util/html/NMConnection.html
new file mode 100644
index 000000000..489a2fd63
--- /dev/null
+++ b/docs/libnm-util/html/NMConnection.html
@@ -0,0 +1,1371 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMConnection</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="libnm-util Reference Manual">
+<link rel="up" href="ch01.html" title="libnm-util API Reference">
+<link rel="prev" href="ch01.html" title="libnm-util API Reference">
+<link rel="next" href="NMSetting.html" title="NMSetting">
+<meta name="generator" content="GTK-Doc V1.17 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="ch01.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libnm-util Reference Manual</th>
+<td><a accesskey="n" href="NMSetting.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMConnection.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMConnection.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMConnection.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMConnection.properties" class="shortcut">Properties</a>
+  | 
+ <a href="#NMConnection.signals" class="shortcut">Signals</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="NMConnection"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMConnection.top_of_page"></a>NMConnection</span></h2>
+<p>NMConnection — Describes a connection to specific network or provider</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMConnection.synopsis"></a><h2>Synopsis</h2>
+<a name="NMConnectionError"></a><pre class="synopsis">
+#include &lt;nm-connection.h&gt;
+
+enum <a class="link" href="NMConnection.html#NMConnectionError">NMConnectionError</a>;
+#define <a class="link" href="NMConnection.html#NM-TYPE-CONNECTION-ERROR:CAPS" title="NM_TYPE_CONNECTION_ERROR">NM_TYPE_CONNECTION_ERROR</a>
+#define <a class="link" href="NMConnection.html#NM-CONNECTION-ERROR:CAPS" title="NM_CONNECTION_ERROR">NM_CONNECTION_ERROR</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> <a class="link" href="NMConnection.html#nm-connection-error-quark" title="nm_connection_error_quark ()">nm_connection_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="NMConnection.html#NM-CONNECTION-PATH:CAPS" title="NM_CONNECTION_PATH">NM_CONNECTION_PATH</a>
+ <a class="link" href="NMConnection.html#NMConnection-struct" title="NMConnection">NMConnection</a>;
+ <a class="link" href="NMConnection.html#NMConnectionClass" title="NMConnectionClass">NMConnectionClass</a>;
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="returnvalue">GType</span></a> <a class="link" href="NMConnection.html#nm-connection-get-type" title="nm_connection_get_type ()">nm_connection_get_type</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+<a class="link" href="NMConnection.html" title="NMConnection"><span class="returnvalue">NMConnection</span></a> * <a class="link" href="NMConnection.html#nm-connection-new" title="nm_connection_new ()">nm_connection_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+<a class="link" href="NMConnection.html" title="NMConnection"><span class="returnvalue">NMConnection</span></a> * <a class="link" href="NMConnection.html#nm-connection-new-from-hash" title="nm_connection_new_from_hash ()">nm_connection_new_from_hash</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *hash</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<a class="link" href="NMConnection.html" title="NMConnection"><span class="returnvalue">NMConnection</span></a> * <a class="link" href="NMConnection.html#nm-connection-duplicate" title="nm_connection_duplicate ()">nm_connection_duplicate</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMConnection.html#nm-connection-create-setting" title="nm_connection_create_setting ()">nm_connection_create_setting</a> (<em class="parameter"><code>const <span class="type">char</span> *name</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMConnection.html#nm-connection-add-setting" title="nm_connection_add_setting ()">nm_connection_add_setting</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMConnection.html#nm-connection-remove-setting" title="nm_connection_remove_setting ()">nm_connection_remove_setting</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> setting_type</code></em>);
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting" title="nm_connection_get_setting ()">nm_connection_get_setting</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> setting_type</code></em>);
+<a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-by-name" title="nm_connection_get_setting_by_name ()">nm_connection_get_setting_by_name</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMConnection.html#nm-connection-replace-settings" title="nm_connection_replace_settings ()">nm_connection_replace_settings</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *new_settings</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMConnection.html#nm-connection-compare" title="nm_connection_compare ()">nm_connection_compare</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *a</code></em>,
+ <em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *b</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingCompareFlags" title="enum NMSettingCompareFlags"><span class="type">NMSettingCompareFlags</span></a> flags</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMConnection.html#nm-connection-diff" title="nm_connection_diff ()">nm_connection_diff</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *a</code></em>,
+ <em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *b</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingCompareFlags" title="enum NMSettingCompareFlags"><span class="type">NMSettingCompareFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> **out_settings</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMConnection.html#nm-connection-verify" title="nm_connection_verify ()">nm_connection_verify</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMConnection.html#nm-connection-need-secrets" title="nm_connection_need_secrets ()">nm_connection_need_secrets</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> **hints</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMConnection.html#nm-connection-clear-secrets" title="nm_connection_clear_secrets ()">nm_connection_clear_secrets</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMConnection.html#nm-connection-update-secrets" title="nm_connection_update_secrets ()">nm_connection_update_secrets</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *setting_name</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *setting_secrets</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMConnection.html#nm-connection-set-path" title="nm_connection_set_path ()">nm_connection_set_path</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMConnection.html#nm-connection-get-path" title="nm_connection_get_path ()">nm_connection_get_path</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMConnection.html#nm-connection-for-each-setting-value" title="nm_connection_for_each_setting_value ()">nm_connection_for_each_setting_value</a>
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingValueIterFn" title="NMSettingValueIterFn ()"><span class="type">NMSettingValueIterFn</span></a> func</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="returnvalue">GHashTable</span></a> * <a class="link" href="NMConnection.html#nm-connection-to-hash" title="nm_connection_to_hash ()">nm_connection_to_hash</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingHashFlags" title="enum NMSettingHashFlags"><span class="type">NMSettingHashFlags</span></a> flags</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMConnection.html#nm-connection-dump" title="nm_connection_dump ()">nm_connection_dump</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="returnvalue">GType</span></a> <a class="link" href="NMConnection.html#nm-connection-lookup-setting-type" title="nm_connection_lookup_setting_type ()">nm_connection_lookup_setting_type</a> (<em class="parameter"><code>const <span class="type">char</span> *name</code></em>);
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="returnvalue">GType</span></a> <a class="link" href="NMConnection.html#nm-connection-lookup-setting-type-by-quark" title="nm_connection_lookup_setting_type_by_quark ()">nm_connection_lookup_setting_type_by_quark</a>
+ (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="type">GQuark</span></a> error_quark</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMConnection.html#nm-connection-get-uuid" title="nm_connection_get_uuid ()">nm_connection_get_uuid</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMConnection.html#nm-connection-get-id" title="nm_connection_get_id ()">nm_connection_get_id</a> (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="returnvalue">NMSetting8021x</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-802-1x" title="nm_connection_get_setting_802_1x ()">nm_connection_get_setting_802_1x</a>
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="returnvalue">NMSettingBluetooth</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-bluetooth" title="nm_connection_get_setting_bluetooth ()">nm_connection_get_setting_bluetooth</a>
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="returnvalue">NMSettingCdma</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-cdma" title="nm_connection_get_setting_cdma ()">nm_connection_get_setting_cdma</a>
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="returnvalue">NMSettingConnection</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-connection" title="nm_connection_get_setting_connection ()">nm_connection_get_setting_connection</a>
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="returnvalue">NMSettingGsm</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-gsm" title="nm_connection_get_setting_gsm ()">nm_connection_get_setting_gsm</a>
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="returnvalue">NMSettingIP4Config</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-ip4-config" title="nm_connection_get_setting_ip4_config ()">nm_connection_get_setting_ip4_config</a>
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="returnvalue">NMSettingIP6Config</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-ip6-config" title="nm_connection_get_setting_ip6_config ()">nm_connection_get_setting_ip6_config</a>
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh"><span class="returnvalue">NMSettingOlpcMesh</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-olpc-mesh" title="nm_connection_get_setting_olpc_mesh ()">nm_connection_get_setting_olpc_mesh</a>
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="returnvalue">NMSettingPPP</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-ppp" title="nm_connection_get_setting_ppp ()">nm_connection_get_setting_ppp</a>
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="returnvalue">NMSettingPPPOE</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-pppoe" title="nm_connection_get_setting_pppoe ()">nm_connection_get_setting_pppoe</a>
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="returnvalue">NMSettingVPN</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-vpn" title="nm_connection_get_setting_vpn ()">nm_connection_get_setting_vpn</a>
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<span class="returnvalue">NMSettingWimax</span> * <a class="link" href="NMConnection.html#nm-connection-get-setting-wimax" title="nm_connection_get_setting_wimax ()">nm_connection_get_setting_wimax</a>
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="returnvalue">NMSettingWired</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-wired" title="nm_connection_get_setting_wired ()">nm_connection_get_setting_wired</a>
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="returnvalue">NMSettingWireless</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-wireless" title="nm_connection_get_setting_wireless ()">nm_connection_get_setting_wireless</a>
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="returnvalue">NMSettingWirelessSecurity</span></a> * <a class="link" href="NMConnection.html#nm-connection-get-setting-wireless-security" title="nm_connection_get_setting_wireless_security ()">nm_connection_get_setting_wireless_security</a>
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMConnection.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ GEnum
+ +----NMConnectionError
+</pre>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----NMConnection
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMConnection.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMConnection.html#NMConnection--path" title='The "path" property'>path</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMConnection.signals"></a><h2>Signals</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMConnection.html#NMConnection-secrets-updated" title='The "secrets-updated" signal'>secrets-updated</a>" : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMConnection.description"></a><h2>Description</h2>
+<p>
+An <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> describes all the settings and configuration values that
+are necessary to configure network devices for operation on a specific
+network. Connections are the fundamental operating object for
+NetworkManager; no device is connected without a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>, or
+disconnected without having been connected with a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>.
+</p>
+<p>
+Each <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> contains a list of <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> objects usually referenced
+by name (using <a class="link" href="NMConnection.html#nm-connection-get-setting-by-name" title="nm_connection_get_setting_by_name ()"><code class="function">nm_connection_get_setting_by_name()</code></a>) or by type (with
+<a class="link" href="NMConnection.html#nm-connection-get-setting" title="nm_connection_get_setting ()"><code class="function">nm_connection_get_setting()</code></a>). The settings describe the actual parameters
+with which the network devices are configured, including device-specific
+parameters (MTU, SSID, APN, channel, rate, etc) and IP-level parameters
+(addresses, routes, addressing methods, etc).
+</p>
+</div>
+<div class="refsect1">
+<a name="NMConnection.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NMConnectionError"></a><h3>enum NMConnectionError</h3>
+<pre class="programlisting">typedef enum
+{
+ NM_CONNECTION_ERROR_UNKNOWN = 0,
+ NM_CONNECTION_ERROR_CONNECTION_SETTING_NOT_FOUND,
+ NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID
+} NMConnectionError;
+</pre>
+<p>
+Describes errors that may result from operations involving a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="NM-CONNECTION-ERROR-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_CONNECTION_ERROR_UNKNOWN</code></span></p></td>
+<td>unknown or unclassified error
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-CONNECTION-ERROR-CONNECTION-SETTING-NOT-FOUND:CAPS"></a><span class="term"><code class="literal">NM_CONNECTION_ERROR_CONNECTION_SETTING_NOT_FOUND</code></span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> object
+ did not contain the required <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> object, which must be
+ present for all connections
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-CONNECTION-ERROR-CONNECTION-TYPE-INVALID:CAPS"></a><span class="term"><code class="literal">NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID</code></span></p></td>
+<td>the 'type' property of the
+ 'connection' setting did not point to a valid connection base type; ie
+ it was not a hardware-related setting like <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> or
+ <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-TYPE-CONNECTION-ERROR:CAPS"></a><h3>NM_TYPE_CONNECTION_ERROR</h3>
+<pre class="programlisting">#define NM_TYPE_CONNECTION_ERROR (nm_connection_error_get_type ())
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-CONNECTION-ERROR:CAPS"></a><h3>NM_CONNECTION_ERROR</h3>
+<pre class="programlisting">#define NM_CONNECTION_ERROR nm_connection_error_quark ()
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-error-quark"></a><h3>nm_connection_error_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a> nm_connection_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers an error quark for <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> if necessary.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the error quark used for <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> errors.</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-CONNECTION-PATH:CAPS"></a><h3>NM_CONNECTION_PATH</h3>
+<pre class="programlisting">#define NM_CONNECTION_PATH "path"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMConnection-struct"></a><h3>NMConnection</h3>
+<pre class="programlisting">typedef struct _NMConnection NMConnection;</pre>
+<p>
+The NMConnection struct contains only private data.
+It should only be accessed through the functions described below.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMConnectionClass"></a><h3>NMConnectionClass</h3>
+<pre class="programlisting">typedef struct {
+ GObjectClass parent;
+
+ /* Signals */
+ void (*secrets_updated) (NMConnection *connection, const char * setting);
+} NMConnectionClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-get-type"></a><h3>nm_connection_get_type ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="returnvalue">GType</span></a> nm_connection_get_type (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-new"></a><h3>nm_connection_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMConnection.html" title="NMConnection"><span class="returnvalue">NMConnection</span></a> * nm_connection_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> object with no <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> objects.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new empty <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> object</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-new-from-hash"></a><h3>nm_connection_new_from_hash ()</h3>
+<pre class="programlisting"><a class="link" href="NMConnection.html" title="NMConnection"><span class="returnvalue">NMConnection</span></a> * nm_connection_new_from_hash (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *hash</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> from a hash table describing the connection. See
+<a class="link" href="NMConnection.html#nm-connection-to-hash" title="nm_connection_to_hash ()"><code class="function">nm_connection_to_hash()</code></a> for a description of the expected hash table.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>hash</code></em> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> describing
+the connection. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GLib.HashTable]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>on unsuccessful return, an error</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> object, populated with settings created
+from the values in the hash table, or NULL if the connection failed to
+validate</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-duplicate"></a><h3>nm_connection_duplicate ()</h3>
+<pre class="programlisting"><a class="link" href="NMConnection.html" title="NMConnection"><span class="returnvalue">NMConnection</span></a> * nm_connection_duplicate (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+Duplicates a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> to duplicate</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> containing the same settings and properties
+as the source <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-create-setting"></a><h3>nm_connection_create_setting ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_connection_create_setting (<em class="parameter"><code>const <span class="type">char</span> *name</code></em>);</pre>
+<p>
+Create a new <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object of the desired type, given a setting name.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>a setting name</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new setting object, or NULL if the setting name was unknown. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-add-setting"></a><h3>nm_connection_add_setting ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_connection_add_setting (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>);</pre>
+<p>
+Adds a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> to the connection, replacing any previous <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> of the
+same name which has previously been added to the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>. The
+connection takes ownership of the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object and does not increase
+the setting object's reference count.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> to add to the connection object. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-remove-setting"></a><h3>nm_connection_remove_setting ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_connection_remove_setting (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> setting_type</code></em>);</pre>
+<p>
+Removes the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> with the given <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> from the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>. This
+operation dereferences the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting_type</code></em> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of the setting object to remove</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-get-setting"></a><h3>nm_connection_get_setting ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_connection_get_setting (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> setting_type</code></em>);</pre>
+<p>
+Gets the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> with the given <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a>, if one has been previously added
+to the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting_type</code></em> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of the setting object to return</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a>, or NULL if no setting of that type was previously
+added to the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-get-setting-by-name"></a><h3>nm_connection_get_setting_by_name ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting.html" title="NMSetting"><span class="returnvalue">NMSetting</span></a> * nm_connection_get_setting_by_name (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>);</pre>
+<p>
+Gets the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> with the given name, if one has been previously added
+the the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>a setting name</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a>, or NULL if no setting with that name was previously
+added to the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-replace-settings"></a><h3>nm_connection_replace_settings ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_connection_replace_settings (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *new_settings</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>new_settings</code></em> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> of settings. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GLib.HashTable]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>location to store error, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the settings were valid and added to the connection, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
+if they were not</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-compare"></a><h3>nm_connection_compare ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_connection_compare (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *a</code></em>,
+ <em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *b</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingCompareFlags" title="enum NMSettingCompareFlags"><span class="type">NMSettingCompareFlags</span></a> flags</code></em>);</pre>
+<p>
+Compares two <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> objects for similarity, with comparison behavior
+modified by a set of flags. See <a class="link" href="NMSetting.html#nm-setting-compare" title="nm_setting_compare ()"><code class="function">nm_setting_compare()</code></a> for a description of
+each flag's behavior.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>a</code></em> :</span></p></td>
+<td>a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>b</code></em> :</span></p></td>
+<td>a second <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> to compare with the first</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>flags</code></em> :</span></p></td>
+<td>compare flags, e.g. <a class="link" href="NMSetting.html#NM-SETTING-COMPARE-FLAG-EXACT:CAPS"><code class="literal">NM_SETTING_COMPARE_FLAG_EXACT</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the comparison succeeds, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it does not</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-diff"></a><h3>nm_connection_diff ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_connection_diff (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *a</code></em>,
+ <em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *b</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingCompareFlags" title="enum NMSettingCompareFlags"><span class="type">NMSettingCompareFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> **out_settings</code></em>);</pre>
+<p>
+Compares two <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> objects for similarity, with comparison behavior
+modified by a set of flags. See <a class="link" href="NMSetting.html#nm-setting-compare" title="nm_setting_compare ()"><code class="function">nm_setting_compare()</code></a> for a description of
+each flag's behavior. If the connections differ, settings and keys within
+each setting that differ are added to the returned <em class="parameter"><code>out_settings</code></em> hash table.
+No values are returned, only key names.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>a</code></em> :</span></p></td>
+<td>a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>b</code></em> :</span></p></td>
+<td>a second <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> to compare with the first</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>flags</code></em> :</span></p></td>
+<td>compare flags, e.g. <a class="link" href="NMSetting.html#NM-SETTING-COMPARE-FLAG-EXACT:CAPS"><code class="literal">NM_SETTING_COMPARE_FLAG_EXACT</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>out_settings</code></em> :</span></p></td>
+<td>if the
+connections differ, on return a hash table mapping setting names to
+second-level GHashTable (utf8 to guint32), which contains the key names that
+differ mapped to one or more of <a class="link" href="NMSetting.html#NMSettingDiffResult" title="enum NMSettingDiffResult"><code class="literal">NMSettingDiffResult</code></a> as a bitfield. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GLib.HashTable]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the connections contain the same values, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if they do
+not</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-verify"></a><h3>nm_connection_verify ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_connection_verify (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+Validates the connection and all its settings. Each setting's properties
+have allowed values, and some values are dependent on other values. For
+example, if a WiFi connection is security enabled, the <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a>
+setting object's 'security' property must contain the setting name of the
+<a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> object, which must also be present in the
+connection for the connection to be valid. As another example, the
+<a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> object's 'mac-address' property must be a validly formatted
+MAC address. The returned <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> contains information about which
+setting and which property failed validation, and how it failed validation.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> to verify</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>location to store error, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the connection is valid, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it is not</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-need-secrets"></a><h3>nm_connection_need_secrets ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_connection_need_secrets (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> **hints</code></em>);</pre>
+<p>
+Returns the name of the first setting object in the connection which would
+need secrets to make a successful connection. The returned hints are only
+intended as a guide to what secrets may be required, because in some
+circumstances, there is no way to conclusively determine exactly which
+secrets are needed.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>hints</code></em> :</span></p></td>
+<td>the address of a pointer to a <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>, initialized to NULL, which on
+return points to an allocated <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing the property names of
+secrets of the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> which may be required; the caller owns the array
+and must free the each array element with <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a>, as well as the array
+itself with <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#g-ptr-array-free"><code class="function">g_ptr_array_free()</code></a>. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym> callee-allocates][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the setting name of the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object which has invalid or
+missing secrets</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-clear-secrets"></a><h3>nm_connection_clear_secrets ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_connection_clear_secrets (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+Clears and frees any secrets that may be stored in the connection, to avoid
+keeping secret data in memory when not needed.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-update-secrets"></a><h3>nm_connection_update_secrets ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_connection_update_secrets (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *setting_name</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *setting_secrets</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+Update the specified setting's secrets, given a hash table of secrets
+intended for that setting (deserialized from D-Bus for example). Will also
+extract the given setting's secrets hash if given a hash of hashes, as would
+be returned from <a class="link" href="NMConnection.html#nm-connection-to-hash" title="nm_connection_to_hash ()"><code class="function">nm_connection_to_hash()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting_name</code></em> :</span></p></td>
+<td>the setting object name to which the secrets apply</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting_secrets</code></em> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> mapping
+string:<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> of setting property names and secrets of the given <em class="parameter"><code>setting_name</code></em>. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>location to store error, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the secrets were successfully updated and the connection
+is valid, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> on failure or if the setting was never added to the connection</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-set-path"></a><h3>nm_connection_set_path ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_connection_set_path (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre>
+<p>
+Sets the D-Bus path of the connection. This property is not serialized, and
+is only for the reference of the caller. Sets the <a class="link" href="NMConnection.html#NMConnection--path" title='The "path" property'><span class="type">"path"</span></a>
+property.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>path</code></em> :</span></p></td>
+<td>the D-Bus path of the connection as given by the settings service
+which provides the connection</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-get-path"></a><h3>nm_connection_get_path ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_connection_get_path (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+Returns the connection's D-Bus path.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the D-Bus path of the connection, previously set by a call to
+<a class="link" href="NMConnection.html#nm-connection-set-path" title="nm_connection_set_path ()"><code class="function">nm_connection_set_path()</code></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-for-each-setting-value"></a><h3>nm_connection_for_each_setting_value ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_connection_for_each_setting_value
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingValueIterFn" title="NMSettingValueIterFn ()"><span class="type">NMSettingValueIterFn</span></a> func</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Iterates over the properties of each <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object in the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>,
+calling the supplied user function for each property.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>func</code></em> :</span></p></td>
+<td>user-supplied function called for each setting's property. <span class="annotation">[<acronym title="The callback is valid only during the call to the method."><span class="acronym">scope call</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data passed to <em class="parameter"><code>func</code></em> at each invocation</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-to-hash"></a><h3>nm_connection_to_hash ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="returnvalue">GHashTable</span></a> * nm_connection_to_hash (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSetting.html#NMSettingHashFlags" title="enum NMSettingHashFlags"><span class="type">NMSettingHashFlags</span></a> flags</code></em>);</pre>
+<p>
+Converts the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> into a <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> describing the connection,
+suitable for marshalling over D-Bus or serializing. The hash table mapping
+is string:<a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> with each element in the returned hash representing
+a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object. The keys are setting object names, and the values
+are <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTables</span></a> mapping string:GValue, each of which represents the
+properties of the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>flags</code></em> :</span></p></td>
+<td>hash flags, e.g. <a class="link" href="NMSetting.html#NM-SETTING-HASH-FLAG-ALL:CAPS"><code class="literal">NM_SETTING_HASH_FLAG_ALL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> describing the connection, its settings, and each setting's
+properties. The caller owns the hash table and must unref the hash table
+with <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#g-hash-table-unref"><code class="function">g_hash_table_unref()</code></a> when it is no longer needed. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GLib.HashTable]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-dump"></a><h3>nm_connection_dump ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_connection_dump (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+Print the connection to stdout. For debugging purposes ONLY, should NOT
+be used for serialization of the connection or machine-parsed in any way. The
+output format is not guaranteed to be stable and may change at any time.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-lookup-setting-type"></a><h3>nm_connection_lookup_setting_type ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="returnvalue">GType</span></a> nm_connection_lookup_setting_type (<em class="parameter"><code>const <span class="type">char</span> *name</code></em>);</pre>
+<p>
+Returns the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of the setting's class for a given setting name.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>a setting name</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of the setting's class</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-lookup-setting-type-by-quark"></a><h3>nm_connection_lookup_setting_type_by_quark ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="returnvalue">GType</span></a> nm_connection_lookup_setting_type_by_quark
+ (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="type">GQuark</span></a> error_quark</code></em>);</pre>
+<p>
+Returns the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of the setting's class for a given setting error quark.
+Useful for figuring out which setting a returned error is for.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error_quark</code></em> :</span></p></td>
+<td>a setting error quark</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of the setting's class</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-get-uuid"></a><h3>nm_connection_get_uuid ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_connection_get_uuid (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return the UUID from the connection's <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the UUID from the connection's 'connection' setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-get-id"></a><h3>nm_connection_get_id ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_connection_get_id (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return the ID from the connection's <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the ID from the connection's 'connection' setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-get-setting-802-1x"></a><h3>nm_connection_get_setting_802_1x ()</h3>
+<pre class="programlisting"><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="returnvalue">NMSetting8021x</span></a> * nm_connection_get_setting_802_1x
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> if the connection contains one, otherwise NULL. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-get-setting-bluetooth"></a><h3>nm_connection_get_setting_bluetooth ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="returnvalue">NMSettingBluetooth</span></a> * nm_connection_get_setting_bluetooth
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="type">NMSettingBluetooth</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="type">NMSettingBluetooth</span></a> if the connection contains one, otherwise NULL. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-get-setting-cdma"></a><h3>nm_connection_get_setting_cdma ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="returnvalue">NMSettingCdma</span></a> * nm_connection_get_setting_cdma
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a> if the connection contains one, otherwise NULL. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-get-setting-connection"></a><h3>nm_connection_get_setting_connection ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="returnvalue">NMSettingConnection</span></a> * nm_connection_get_setting_connection
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> if the connection contains one, otherwise NULL. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-get-setting-gsm"></a><h3>nm_connection_get_setting_gsm ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="returnvalue">NMSettingGsm</span></a> * nm_connection_get_setting_gsm
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> if the connection contains one, otherwise NULL. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-get-setting-ip4-config"></a><h3>nm_connection_get_setting_ip4_config ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="returnvalue">NMSettingIP4Config</span></a> * nm_connection_get_setting_ip4_config
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> if the connection contains one, otherwise NULL. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-get-setting-ip6-config"></a><h3>nm_connection_get_setting_ip6_config ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="returnvalue">NMSettingIP6Config</span></a> * nm_connection_get_setting_ip6_config
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> if the connection contains one, otherwise NULL. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-get-setting-olpc-mesh"></a><h3>nm_connection_get_setting_olpc_mesh ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh"><span class="returnvalue">NMSettingOlpcMesh</span></a> * nm_connection_get_setting_olpc_mesh
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh"><span class="type">NMSettingOlpcMesh</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh"><span class="type">NMSettingOlpcMesh</span></a> if the connection contains one, otherwise NULL. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-get-setting-ppp"></a><h3>nm_connection_get_setting_ppp ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="returnvalue">NMSettingPPP</span></a> * nm_connection_get_setting_ppp
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingPPP.html" title="NMSettingPPP"><span class="type">NMSettingPPP</span></a> if the connection contains one, otherwise NULL. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-get-setting-pppoe"></a><h3>nm_connection_get_setting_pppoe ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="returnvalue">NMSettingPPPOE</span></a> * nm_connection_get_setting_pppoe
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <span class="type">NMSettingPPOE</span> the connection might contain.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingPPPOE.html" title="NMSettingPPPOE"><span class="type">NMSettingPPPOE</span></a> if the connection contains one, otherwise NULL. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-get-setting-vpn"></a><h3>nm_connection_get_setting_vpn ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="returnvalue">NMSettingVPN</span></a> * nm_connection_get_setting_vpn
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingVPN.html" title="NMSettingVPN"><span class="type">NMSettingVPN</span></a> if the connection contains one, otherwise NULL. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-get-setting-wimax"></a><h3>nm_connection_get_setting_wimax ()</h3>
+<pre class="programlisting"><span class="returnvalue">NMSettingWimax</span> * nm_connection_get_setting_wimax
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <span class="type">NMSettingWimax</span> the connection might contain.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <span class="type">NMSettingWimax</span> if the connection contains one, otherwise NULL. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-get-setting-wired"></a><h3>nm_connection_get_setting_wired ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="returnvalue">NMSettingWired</span></a> * nm_connection_get_setting_wired
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> if the connection contains one, otherwise NULL. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-get-setting-wireless"></a><h3>nm_connection_get_setting_wireless ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="returnvalue">NMSettingWireless</span></a> * nm_connection_get_setting_wireless
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> if the connection contains one, otherwise NULL. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-get-setting-wireless-security"></a><h3>nm_connection_get_setting_wireless_security ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="returnvalue">NMSettingWirelessSecurity</span></a> * nm_connection_get_setting_wireless_security
+ (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+A shortcut to return any <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> the connection might contain.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> if the connection contains one, otherwise NULL. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="NMConnection.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="NMConnection--path"></a><h3>The <code class="literal">"path"</code> property</h3>
+<pre class="programlisting"> "path" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct</pre>
+<p>
+The connection's D-Bus path, used only by the calling process as a record
+of the D-Bus path of the connection as provided by a settings service.
+</p>
+<p>Default value: NULL</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="NMConnection.signal-details"></a><h2>Signal Details</h2>
+<div class="refsect2">
+<a name="NMConnection-secrets-updated"></a><h3>The <code class="literal">"secrets-updated"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *setting_name,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a></pre>
+<p>
+The ::secrets-updated signal is emitted when the secrets of a setting
+have been changed.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the object on which the signal is emitted</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting_name</code></em> :</span></p></td>
+<td>the setting name of the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> for which secrets were
+updated</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.17</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/libnm-util/html/NMSetting.html b/docs/libnm-util/html/NMSetting.html
index c77c59854..b9c258d27 100644
--- a/docs/libnm-util/html/NMSetting.html
+++ b/docs/libnm-util/html/NMSetting.html
@@ -6,7 +6,7 @@
<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
<link rel="home" href="index.html" title="libnm-util Reference Manual">
<link rel="up" href="ch01.html" title="libnm-util API Reference">
-<link rel="prev" href="ch01.html" title="libnm-util API Reference">
+<link rel="prev" href="NMConnection.html" title="NMConnection">
<link rel="next" href="NMSettingConnection.html" title="NMSettingConnection">
<meta name="generator" content="GTK-Doc V1.17 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
@@ -14,7 +14,7 @@
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
<tr valign="middle">
-<td><a accesskey="p" href="ch01.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="NMConnection.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
<th width="100%" align="center">libnm-util Reference Manual</th>
@@ -140,7 +140,7 @@ enum <a class="link" href="NMSetting.html#NMSettingDiffResult" ti
Each <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> contains properties that describe configuration that applies
to a specific network layer (like IPv4 or IPv6 configuration) or device type
(like Ethernet, or WiFi). A collection of individual settings together
-make up an <span class="type">NMConnection</span>. Each property is strongly typed and usually has
+make up an <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>. Each property is strongly typed and usually has
a number of allowed values. See each <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass for a description
of properties and allowed values.
</p>
@@ -420,7 +420,7 @@ when calling <a class="link" href="NMSetting.html#nm-setting-to-hash" title="nm_
<p>
Converts the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> into a <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> mapping each setting property
name to a GValue describing that property, suitable for marshalling over
-D-Bus or serializing. The mapping is string:GValue.
+D-Bus or serializing. The mapping is string to GValue.
</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
@@ -437,7 +437,8 @@ D-Bus or serializing. The mapping is string:GValue.
</tr>
<tr>
<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
-<td>a new <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> describing the setting's properties. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value]</span>
+<td>a new <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a>
+describing the setting's properties. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value]</span>
</td>
</tr>
</tbody>
@@ -465,8 +466,9 @@ property names and value types.
</tr>
<tr>
<td><p><span class="term"><em class="parameter"><code>hash</code></em> :</span></p></td>
-<td>the <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> containing a string:GValue mapping of properties
-that apply to the setting</td>
+<td>the <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> containing a
+string to GValue mapping of properties that apply to the setting. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value]</span>
+</td>
</tr>
<tr>
<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
@@ -709,10 +711,11 @@ be set to <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Ma
</tr>
<tr>
<td><p><span class="term"><em class="parameter"><code>results</code></em> :</span></p></td>
-<td>if the settings differ, on return a
-hash table mapping the differing keys to one or more <a class="link" href="NMSetting.html#NMSettingDiffResult" title="enum NMSettingDiffResult"><span class="type">NMSettingDiffResult</span></a>
-values OR-ed together. If the settings do not differ, any hash table passed
-in is unmodified. If no hash table is passed in, a new one is created. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 guint32]</span>
+<td>if the
+settings differ, on return a hash table mapping the differing keys to one or
+more <a class="link" href="NMSetting.html#NMSettingDiffResult" title="enum NMSettingDiffResult"><code class="literal">NMSettingDiffResult</code></a> values OR-ed together. If the settings do not
+differ, any hash table passed in is unmodified. If no hash table is passed
+in and the settings differ, a new one is created and returned. <span class="annotation">[<acronym title="Parameter for input and for returning results. Default is transfer full."><span class="acronym">inout</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 guint32]</span>
</td>
</tr>
<tr>
@@ -847,8 +850,9 @@ setting (deserialized from D-Bus for example).
</tr>
<tr>
<td><p><span class="term"><em class="parameter"><code>secrets</code></em> :</span></p></td>
-<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> mapping string:<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> of setting property names and
-secrets</td>
+<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> mapping
+string to <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> of setting property names and secrets. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value]</span>
+</td>
</tr>
<tr>
<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
diff --git a/docs/libnm-util/html/NMSetting8021x.html b/docs/libnm-util/html/NMSetting8021x.html
index 8ef172c14..c9e533b58 100644
--- a/docs/libnm-util/html/NMSetting8021x.html
+++ b/docs/libnm-util/html/NMSetting8021x.html
@@ -104,7 +104,7 @@ const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.htm
const <span class="returnvalue">char</span> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-ca-cert-path" title="nm_setting_802_1x_get_ca_cert_path ()">nm_setting_802_1x_get_ca_cert_path</a>
(<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-ca-cert" title="nm_setting_802_1x_set_ca_cert ()">nm_setting_802_1x_set_ca_cert</a> (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *value</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *cert_path</code></em>,
<em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>,
<em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat" title="enum NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
@@ -115,7 +115,7 @@ const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.htm
const <span class="returnvalue">char</span> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-client-cert-path" title="nm_setting_802_1x_get_client_cert_path ()">nm_setting_802_1x_get_client_cert_path</a>
(<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-client-cert" title="nm_setting_802_1x_set_client_cert ()">nm_setting_802_1x_set_client_cert</a> (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *value</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *cert_path</code></em>,
<em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>,
<em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat" title="enum NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
@@ -136,7 +136,7 @@ const <span class="returnvalue">char</span> * <a class="link" href="N
(<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-phase2-ca-cert" title="nm_setting_802_1x_set_phase2_ca_cert ()">nm_setting_802_1x_set_phase2_ca_cert</a>
(<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *value</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *cert_path</code></em>,
<em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>,
<em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat" title="enum NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
@@ -148,7 +148,7 @@ const <span class="returnvalue">char</span> * <a class="link" href="N
(<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-phase2-client-cert" title="nm_setting_802_1x_set_phase2_client_cert ()">nm_setting_802_1x_set_phase2_client_cert</a>
(<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *value</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *cert_path</code></em>,
<em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>,
<em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat" title="enum NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
@@ -164,7 +164,7 @@ const <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.htm
const <span class="returnvalue">char</span> * <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-get-private-key-path" title="nm_setting_802_1x_get_private_key_path ()">nm_setting_802_1x_get_private_key_path</a>
(<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-private-key" title="nm_setting_802_1x_set_private_key ()">nm_setting_802_1x_set_private_key</a> (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *value</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key_path</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *password</code></em>,
<em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>,
<em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat" title="enum NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>,
@@ -183,7 +183,7 @@ const <span class="returnvalue">char</span> * <a class="link" href="N
(<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);
<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-phase2-private-key" title="nm_setting_802_1x_set_phase2_private_key ()">nm_setting_802_1x_set_phase2_private_key</a>
(<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *value</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key_path</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *password</code></em>,
<em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>,
<em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat" title="enum NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>,
@@ -984,7 +984,7 @@ of the network cannot be confirmed by the client.
<div class="refsect2">
<a name="nm-setting-802-1x-set-ca-cert"></a><h3>nm_setting_802_1x_set_ca_cert ()</h3>
<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_802_1x_set_ca_cert (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *value</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *cert_path</code></em>,
<em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>,
<em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat" title="enum NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
@@ -1003,10 +1003,10 @@ scheme, or with the path to the certificate file if using the
</td>
</tr>
<tr>
-<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
-<td>when <em class="parameter"><code>scheme</code></em> is set to either <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a> or
-<a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a>, pass the path of the CA certificate file
-(PEM or DER format). The path must be UTF-8 encoded; use
+<td><p><span class="term"><em class="parameter"><code>cert_path</code></em> :</span></p></td>
+<td>when <em class="parameter"><code>scheme</code></em> is set to either <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a>
+or <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a>, pass the path of the CA certificate
+file (PEM or DER format). The path must be UTF-8 encoded; use
<a href="http://library.gnome.org/devel/glib/unstable/glib-Character-Set-Conversion.html#g-filename-to-utf8"><code class="function">g_filename_to_utf8()</code></a> to convert if needed. Passing NULL with any <em class="parameter"><code>scheme</code></em>
clears the CA certificate.</td>
</tr>
@@ -1108,7 +1108,7 @@ authentication method.
<div class="refsect2">
<a name="nm-setting-802-1x-set-client-cert"></a><h3>nm_setting_802_1x_set_client_cert ()</h3>
<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_802_1x_set_client_cert (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *value</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *cert_path</code></em>,
<em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>,
<em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat" title="enum NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
@@ -1132,12 +1132,12 @@ authentication method.
</td>
</tr>
<tr>
-<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
-<td>when <em class="parameter"><code>scheme</code></em> is set to either <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a> or
-<a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a>, pass the path of the client certificate
-file (PEM, DER, or PKCS<span class="type">12</span> format). The path must be UTF-8 encoded; use
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Character-Set-Conversion.html#g-filename-to-utf8"><code class="function">g_filename_to_utf8()</code></a> to convert if needed. Passing NULL with any <em class="parameter"><code>scheme</code></em>
-clears the client certificate.</td>
+<td><p><span class="term"><em class="parameter"><code>cert_path</code></em> :</span></p></td>
+<td>when <em class="parameter"><code>scheme</code></em> is set to either <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a>
+or <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a>, pass the path of the client
+certificate file (PEM, DER, or PKCS<span class="type">12</span> format). The path must be UTF-8
+encoded; use <a href="http://library.gnome.org/devel/glib/unstable/glib-Character-Set-Conversion.html#g-filename-to-utf8"><code class="function">g_filename_to_utf8()</code></a> to convert if needed. Passing NULL with
+any <em class="parameter"><code>scheme</code></em> clears the client certificate.</td>
</tr>
<tr>
<td><p><span class="term"><em class="parameter"><code>scheme</code></em> :</span></p></td>
@@ -1354,7 +1354,7 @@ of the network cannot be confirmed by the client.
<a name="nm-setting-802-1x-set-phase2-ca-cert"></a><h3>nm_setting_802_1x_set_phase2_ca_cert ()</h3>
<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_802_1x_set_phase2_ca_cert
(<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *value</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *cert_path</code></em>,
<em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>,
<em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat" title="enum NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
@@ -1373,9 +1373,9 @@ file if using the <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK
</td>
</tr>
<tr>
-<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
-<td>when <em class="parameter"><code>scheme</code></em> is set to either <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a> or
-<a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a>, pass the path of the "phase2" CA
+<td><p><span class="term"><em class="parameter"><code>cert_path</code></em> :</span></p></td>
+<td>when <em class="parameter"><code>scheme</code></em> is set to either <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a>
+or <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a>, pass the path of the "phase2" CA
certificate file (PEM or DER format). The path must be UTF-8 encoded; use
<a href="http://library.gnome.org/devel/glib/unstable/glib-Character-Set-Conversion.html#g-filename-to-utf8"><code class="function">g_filename_to_utf8()</code></a> to convert if needed. Passing NULL with any <em class="parameter"><code>scheme</code></em>
clears the "phase2" CA certificate.</td>
@@ -1481,7 +1481,7 @@ authentication method.
<a name="nm-setting-802-1x-set-phase2-client-cert"></a><h3>nm_setting_802_1x_set_phase2_client_cert ()</h3>
<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_802_1x_set_phase2_client_cert
(<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *value</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *cert_path</code></em>,
<em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>,
<em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat" title="enum NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
@@ -1505,9 +1505,9 @@ authentication method.
</td>
</tr>
<tr>
-<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
-<td>when <em class="parameter"><code>scheme</code></em> is set to either <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a> or
-<a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a>, pass the path of the "phase2" client
+<td><p><span class="term"><em class="parameter"><code>cert_path</code></em> :</span></p></td>
+<td>when <em class="parameter"><code>scheme</code></em> is set to either <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a>
+or <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a>, pass the path of the "phase2" client
certificate file (PEM, DER, or PKCS<span class="type">12</span> format). The path must be UTF-8
encoded; use <a href="http://library.gnome.org/devel/glib/unstable/glib-Character-Set-Conversion.html#g-filename-to-utf8"><code class="function">g_filename_to_utf8()</code></a> to convert if needed. Passing NULL with
any <em class="parameter"><code>scheme</code></em> clears the "phase2" client certificate.</td>
@@ -1699,7 +1699,7 @@ authentication method.
<div class="refsect2">
<a name="nm-setting-802-1x-set-private-key"></a><h3>nm_setting_802_1x_set_private_key ()</h3>
<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_802_1x_set_private_key (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *value</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key_path</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *password</code></em>,
<em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>,
<em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat" title="enum NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>,
@@ -1739,7 +1739,7 @@ key password to prevent unauthorized access to unencrypted private key data.
</td>
</tr>
<tr>
-<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td><p><span class="term"><em class="parameter"><code>key_path</code></em> :</span></p></td>
<td>when <em class="parameter"><code>scheme</code></em> is set to either <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a> or
<a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a>, pass the path of the private key file
(PEM, DER, or PKCS<span class="type">12</span> format). The path must be UTF-8 encoded; use
@@ -1924,7 +1924,7 @@ authentication method.
<a name="nm-setting-802-1x-set-phase2-private-key"></a><h3>nm_setting_802_1x_set_phase2_private_key ()</h3>
<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_802_1x_set_phase2_private_key
(<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *value</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key_path</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *password</code></em>,
<em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>,
<em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat" title="enum NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>,
@@ -1964,7 +1964,7 @@ key password to prevent unauthorized access to unencrypted private key data.
</td>
</tr>
<tr>
-<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td><p><span class="term"><em class="parameter"><code>key_path</code></em> :</span></p></td>
<td>when <em class="parameter"><code>scheme</code></em> is set to either <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a> or
<a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a>, pass the path of the "phase2" private
key file (PEM, DER, or PKCS<span class="type">12</span> format). The path must be UTF-8 encoded;
diff --git a/docs/libnm-util/html/NMSettingConnection.html b/docs/libnm-util/html/NMSettingConnection.html
index 27c30ebde..2b113d2dc 100644
--- a/docs/libnm-util/html/NMSettingConnection.html
+++ b/docs/libnm-util/html/NMSettingConnection.html
@@ -117,8 +117,8 @@ const <span class="returnvalue">char</span> * <a class="link" href="NMSet
<a name="NMSettingConnection.description"></a><h2>Description</h2>
<p>
The <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> object is a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> subclass that describes
-properties that apply to all <span class="type">NMConnection</span> objects, regardless of what type
-of network connection they describe. Each <span class="type">NMConnection</span> object must contain
+properties that apply to all <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> objects, regardless of what type
+of network connection they describe. Each <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> object must contain
a <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> setting.
</p>
</div>
@@ -170,7 +170,7 @@ Describes errors that may result from operations involving a
<td><p><a name="NM-SETTING-CONNECTION-ERROR-TYPE-SETTING-NOT-FOUND:CAPS"></a><span class="term"><code class="literal">NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND</code></span></p></td>
<td>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object
referenced by the setting name contained in the
- <a class="link" href="NMSettingConnection.html#NMSettingConnection--type" title='The "type" property'><span class="type">"type"</span></a> property was not present in the <span class="type">NMConnection</span>
+ <a class="link" href="NMSettingConnection.html#NMSettingConnection--type" title='The "type" property'><span class="type">"type"</span></a> property was not present in the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>
</td>
</tr>
</tbody>
diff --git a/docs/libnm-util/html/NMSettingVPN.html b/docs/libnm-util/html/NMSettingVPN.html
index e8cd2fb96..c2e4ce52f 100644
--- a/docs/libnm-util/html/NMSettingVPN.html
+++ b/docs/libnm-util/html/NMSettingVPN.html
@@ -276,7 +276,9 @@ const <span class="returnvalue">char</span> * <a class="link" href="NMSet
<em class="parameter"><code><a class="link" href="NMSettingVPN.html#NMVPNIterFunc" title="NMVPNIterFunc ()"><span class="type">NMVPNIterFunc</span></a> func</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
<p>
-Iterates all data items stored in this setting
+Iterates all data items stored in this setting. It is safe to add, remove,
+and modify data items inside <em class="parameter"><code>func</code></em>, though any additions or removals made
+during iteration will not be part of the iteration.
</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
@@ -331,7 +333,9 @@ Iterates all data items stored in this setting
<em class="parameter"><code><a class="link" href="NMSettingVPN.html#NMVPNIterFunc" title="NMVPNIterFunc ()"><span class="type">NMVPNIterFunc</span></a> func</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
<p>
-Iterates all secrets stored in this setting.
+Iterates all secrets stored in this setting. It is safe to add, remove,
+and modify secrets inside <em class="parameter"><code>func</code></em>, though any additions or removals made during
+iteration will not be part of the iteration.
</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
diff --git a/docs/libnm-util/html/annotation-glossary.html b/docs/libnm-util/html/annotation-glossary.html
index e0a1c8696..5c359816a 100644
--- a/docs/libnm-util/html/annotation-glossary.html
+++ b/docs/libnm-util/html/annotation-glossary.html
@@ -24,6 +24,8 @@
 | 
<a class="shortcut" href="#glsA">A</a>
 | 
+ <a class="shortcut" href="#glsI">I</a>
+  | 
<a class="shortcut" href="#glsE">E</a>
 | 
<a class="shortcut" href="#glsT">T</a>
@@ -44,6 +46,10 @@
<dt>
<a name="annotation-glossterm-allow-none"></a>allow-none</dt>
<dd><p>NULL is ok, both for passing and for returning.</p></dd>
+<a name="glsI"></a><h3 class="title">I</h3>
+<dt>
+<a name="annotation-glossterm-inout"></a>inout</dt>
+<dd><p>Parameter for input and for returning results. Default is <acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>.</p></dd>
<a name="glsE"></a><h3 class="title">E</h3>
<dt>
<a name="annotation-glossterm-element-type"></a>element-type</dt>
diff --git a/docs/libnm-util/html/api-index-full.html b/docs/libnm-util/html/api-index-full.html
index b6776b7dc..0ea92385a 100644
--- a/docs/libnm-util/html/api-index-full.html
+++ b/docs/libnm-util/html/api-index-full.html
@@ -41,195 +41,195 @@
<a name="api-index-full"></a>API Index</h2></div></div></div>
<a name="idx"></a><a name="idxC"></a><h3 class="title">C</h3>
<dt>
-NMConnection, struct in NMConnection
+<a class="link" href="NMConnection.html#NMConnection-struct" title="NMConnection">NMConnection</a>, struct in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-NMConnection::secrets-updated, object signal in NMConnection
+<a class="link" href="NMConnection.html#NMConnection-secrets-updated" title='The "secrets-updated" signal'>NMConnection::secrets-updated</a>, object signal in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-NMConnection:path, object property in NMConnection
+<a class="link" href="NMConnection.html#NMConnection--path" title='The "path" property'>NMConnection:path</a>, object property in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-NMConnectionClass, struct in NMConnection
+<a class="link" href="NMConnection.html#NMConnectionClass" title="NMConnectionClass">NMConnectionClass</a>, struct in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-NMConnectionError, enum in NMConnection
+<a class="link" href="NMConnection.html#NMConnectionError">NMConnectionError</a>, enum in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_add_setting, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-add-setting" title="nm_connection_add_setting ()">nm_connection_add_setting</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_clear_secrets, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-clear-secrets" title="nm_connection_clear_secrets ()">nm_connection_clear_secrets</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_compare, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-compare" title="nm_connection_compare ()">nm_connection_compare</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_create_setting, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-create-setting" title="nm_connection_create_setting ()">nm_connection_create_setting</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_diff, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-diff" title="nm_connection_diff ()">nm_connection_diff</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_dump, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-dump" title="nm_connection_dump ()">nm_connection_dump</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_duplicate, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-duplicate" title="nm_connection_duplicate ()">nm_connection_duplicate</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-NM_CONNECTION_ERROR, macro in NMConnection
+<a class="link" href="NMConnection.html#NM-CONNECTION-ERROR:CAPS" title="NM_CONNECTION_ERROR">NM_CONNECTION_ERROR</a>, macro in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_error_quark, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-error-quark" title="nm_connection_error_quark ()">nm_connection_error_quark</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_for_each_setting_value, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-for-each-setting-value" title="nm_connection_for_each_setting_value ()">nm_connection_for_each_setting_value</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_get_id, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-get-id" title="nm_connection_get_id ()">nm_connection_get_id</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_get_path, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-get-path" title="nm_connection_get_path ()">nm_connection_get_path</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_get_setting, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-get-setting" title="nm_connection_get_setting ()">nm_connection_get_setting</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_get_setting_802_1x, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-get-setting-802-1x" title="nm_connection_get_setting_802_1x ()">nm_connection_get_setting_802_1x</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_get_setting_bluetooth, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-get-setting-bluetooth" title="nm_connection_get_setting_bluetooth ()">nm_connection_get_setting_bluetooth</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_get_setting_by_name, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-get-setting-by-name" title="nm_connection_get_setting_by_name ()">nm_connection_get_setting_by_name</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_get_setting_cdma, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-get-setting-cdma" title="nm_connection_get_setting_cdma ()">nm_connection_get_setting_cdma</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_get_setting_connection, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-get-setting-connection" title="nm_connection_get_setting_connection ()">nm_connection_get_setting_connection</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_get_setting_gsm, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-get-setting-gsm" title="nm_connection_get_setting_gsm ()">nm_connection_get_setting_gsm</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_get_setting_ip4_config, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-get-setting-ip4-config" title="nm_connection_get_setting_ip4_config ()">nm_connection_get_setting_ip4_config</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_get_setting_ip6_config, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-get-setting-ip6-config" title="nm_connection_get_setting_ip6_config ()">nm_connection_get_setting_ip6_config</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_get_setting_olpc_mesh, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-get-setting-olpc-mesh" title="nm_connection_get_setting_olpc_mesh ()">nm_connection_get_setting_olpc_mesh</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_get_setting_ppp, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-get-setting-ppp" title="nm_connection_get_setting_ppp ()">nm_connection_get_setting_ppp</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_get_setting_pppoe, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-get-setting-pppoe" title="nm_connection_get_setting_pppoe ()">nm_connection_get_setting_pppoe</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_get_setting_vpn, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-get-setting-vpn" title="nm_connection_get_setting_vpn ()">nm_connection_get_setting_vpn</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_get_setting_wimax, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-get-setting-wimax" title="nm_connection_get_setting_wimax ()">nm_connection_get_setting_wimax</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_get_setting_wired, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-get-setting-wired" title="nm_connection_get_setting_wired ()">nm_connection_get_setting_wired</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_get_setting_wireless, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-get-setting-wireless" title="nm_connection_get_setting_wireless ()">nm_connection_get_setting_wireless</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_get_setting_wireless_security, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-get-setting-wireless-security" title="nm_connection_get_setting_wireless_security ()">nm_connection_get_setting_wireless_security</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_get_type, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-get-type" title="nm_connection_get_type ()">nm_connection_get_type</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_get_uuid, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-get-uuid" title="nm_connection_get_uuid ()">nm_connection_get_uuid</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_lookup_setting_type, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-lookup-setting-type" title="nm_connection_lookup_setting_type ()">nm_connection_lookup_setting_type</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_lookup_setting_type_by_quark, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-lookup-setting-type-by-quark" title="nm_connection_lookup_setting_type_by_quark ()">nm_connection_lookup_setting_type_by_quark</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_need_secrets, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-need-secrets" title="nm_connection_need_secrets ()">nm_connection_need_secrets</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_new, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-new" title="nm_connection_new ()">nm_connection_new</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_new_from_hash, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-new-from-hash" title="nm_connection_new_from_hash ()">nm_connection_new_from_hash</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-NM_CONNECTION_PATH, macro in NMConnection
+<a class="link" href="NMConnection.html#NM-CONNECTION-PATH:CAPS" title="NM_CONNECTION_PATH">NM_CONNECTION_PATH</a>, macro in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_remove_setting, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-remove-setting" title="nm_connection_remove_setting ()">nm_connection_remove_setting</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_replace_settings, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-replace-settings" title="nm_connection_replace_settings ()">nm_connection_replace_settings</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_set_path, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-set-path" title="nm_connection_set_path ()">nm_connection_set_path</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_to_hash, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-to-hash" title="nm_connection_to_hash ()">nm_connection_to_hash</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_update_secrets, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-update-secrets" title="nm_connection_update_secrets ()">nm_connection_update_secrets</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
-nm_connection_verify, function in NMConnection
+<a class="link" href="NMConnection.html#nm-connection-verify" title="nm_connection_verify ()">nm_connection_verify</a>, function in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<a name="idxI"></a><h3 class="title">I</h3>
@@ -3240,7 +3240,7 @@ NM_SETTING_WIMAX_SETTING_NAME, macro in NMSettingWimax
<dd></dd>
<a name="idxT"></a><h3 class="title">T</h3>
<dt>
-NM_TYPE_CONNECTION_ERROR, macro in NMConnection
+<a class="link" href="NMConnection.html#NM-TYPE-CONNECTION-ERROR:CAPS" title="NM_TYPE_CONNECTION_ERROR">NM_TYPE_CONNECTION_ERROR</a>, macro in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
<dt>
diff --git a/docs/libnm-util/html/ch01.html b/docs/libnm-util/html/ch01.html
index 2800abf20..52f73af96 100644
--- a/docs/libnm-util/html/ch01.html
+++ b/docs/libnm-util/html/ch01.html
@@ -7,7 +7,7 @@
<link rel="home" href="index.html" title="libnm-util Reference Manual">
<link rel="up" href="index.html" title="libnm-util Reference Manual">
<link rel="prev" href="index.html" title="libnm-util Reference Manual">
-<link rel="next" href="NMSetting.html" title="NMSetting">
+<link rel="next" href="NMConnection.html" title="NMConnection">
<meta name="generator" content="GTK-Doc V1.17 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
@@ -17,13 +17,16 @@
<td> </td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
<th width="100%" align="center">libnm-util Reference Manual</th>
-<td><a accesskey="n" href="NMSetting.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="NMConnection.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
</tr></table>
<div class="chapter">
<div class="titlepage"><div><div><h2 class="title">
-<a name="id396708"></a>libnm-util API Reference</h2></div></div></div>
+<a name="id501566"></a>libnm-util API Reference</h2></div></div></div>
<div class="toc"><dl>
<dt>
+<span class="refentrytitle"><a href="NMConnection.html">NMConnection</a></span><span class="refpurpose"> — Describes a connection to specific network or provider</span>
+</dt>
+<dt>
<span class="refentrytitle"><a href="NMSetting.html">NMSetting</a></span><span class="refpurpose"> — Describes related configuration information</span>
</dt>
<dt>
@@ -75,7 +78,6 @@
<span class="refentrytitle"><a href="libnm-util-nm-utils.html">nm-utils</a></span><span class="refpurpose"> — Utility functions</span>
</dt>
</dl></div>
-<span style="color: red">&lt;xi:include&gt;&lt;/xi:include&gt;</span>
</div>
<div class="footer">
<hr>
diff --git a/docs/libnm-util/html/index.html b/docs/libnm-util/html/index.html
index 90ada1bff..feb9a71be 100644
--- a/docs/libnm-util/html/index.html
+++ b/docs/libnm-util/html/index.html
@@ -26,6 +26,9 @@
<dt><span class="chapter"><a href="ch01.html">libnm-util API Reference</a></span></dt>
<dd><dl>
<dt>
+<span class="refentrytitle"><a href="NMConnection.html">NMConnection</a></span><span class="refpurpose"> — Describes a connection to specific network or provider</span>
+</dt>
+<dt>
<span class="refentrytitle"><a href="NMSetting.html">NMSetting</a></span><span class="refpurpose"> — Describes related configuration information</span>
</dt>
<dt>
diff --git a/docs/libnm-util/html/index.sgml b/docs/libnm-util/html/index.sgml
index d9981473f..4140e8969 100644
--- a/docs/libnm-util/html/index.sgml
+++ b/docs/libnm-util/html/index.sgml
@@ -1,4 +1,66 @@
<ONLINE href="http://projects.gnome.org/NetworkManager/developers/libnm-util/09/">
+<ANCHOR id="NMConnection" href="libnm-util/NMConnection.html">
+<ANCHOR id="NMConnection.synopsis" href="libnm-util/NMConnection.html#NMConnection.synopsis">
+<ANCHOR id="NMConnectionError" href="libnm-util/NMConnection.html#NMConnectionError">
+<ANCHOR id="NMConnection.object-hierarchy" href="libnm-util/NMConnection.html#NMConnection.object-hierarchy">
+<ANCHOR id="NMConnection.properties" href="libnm-util/NMConnection.html#NMConnection.properties">
+<ANCHOR id="NMConnection.signals" href="libnm-util/NMConnection.html#NMConnection.signals">
+<ANCHOR id="NMConnection.description" href="libnm-util/NMConnection.html#NMConnection.description">
+<ANCHOR id="NMConnection.details" href="libnm-util/NMConnection.html#NMConnection.details">
+<ANCHOR id="NMConnectionError" href="libnm-util/NMConnection.html#NMConnectionError">
+<ANCHOR id="NM-CONNECTION-ERROR-UNKNOWN:CAPS" href="libnm-util/NMConnection.html#NM-CONNECTION-ERROR-UNKNOWN:CAPS">
+<ANCHOR id="NM-CONNECTION-ERROR-CONNECTION-SETTING-NOT-FOUND:CAPS" href="libnm-util/NMConnection.html#NM-CONNECTION-ERROR-CONNECTION-SETTING-NOT-FOUND:CAPS">
+<ANCHOR id="NM-CONNECTION-ERROR-CONNECTION-TYPE-INVALID:CAPS" href="libnm-util/NMConnection.html#NM-CONNECTION-ERROR-CONNECTION-TYPE-INVALID:CAPS">
+<ANCHOR id="NM-TYPE-CONNECTION-ERROR:CAPS" href="libnm-util/NMConnection.html#NM-TYPE-CONNECTION-ERROR:CAPS">
+<ANCHOR id="NM-CONNECTION-ERROR:CAPS" href="libnm-util/NMConnection.html#NM-CONNECTION-ERROR:CAPS">
+<ANCHOR id="nm-connection-error-quark" href="libnm-util/NMConnection.html#nm-connection-error-quark">
+<ANCHOR id="NM-CONNECTION-PATH:CAPS" href="libnm-util/NMConnection.html#NM-CONNECTION-PATH:CAPS">
+<ANCHOR id="NMConnection-struct" href="libnm-util/NMConnection.html#NMConnection-struct">
+<ANCHOR id="NMConnectionClass" href="libnm-util/NMConnection.html#NMConnectionClass">
+<ANCHOR id="nm-connection-get-type" href="libnm-util/NMConnection.html#nm-connection-get-type">
+<ANCHOR id="nm-connection-new" href="libnm-util/NMConnection.html#nm-connection-new">
+<ANCHOR id="nm-connection-new-from-hash" href="libnm-util/NMConnection.html#nm-connection-new-from-hash">
+<ANCHOR id="nm-connection-duplicate" href="libnm-util/NMConnection.html#nm-connection-duplicate">
+<ANCHOR id="nm-connection-create-setting" href="libnm-util/NMConnection.html#nm-connection-create-setting">
+<ANCHOR id="nm-connection-add-setting" href="libnm-util/NMConnection.html#nm-connection-add-setting">
+<ANCHOR id="nm-connection-remove-setting" href="libnm-util/NMConnection.html#nm-connection-remove-setting">
+<ANCHOR id="nm-connection-get-setting" href="libnm-util/NMConnection.html#nm-connection-get-setting">
+<ANCHOR id="nm-connection-get-setting-by-name" href="libnm-util/NMConnection.html#nm-connection-get-setting-by-name">
+<ANCHOR id="nm-connection-replace-settings" href="libnm-util/NMConnection.html#nm-connection-replace-settings">
+<ANCHOR id="nm-connection-compare" href="libnm-util/NMConnection.html#nm-connection-compare">
+<ANCHOR id="nm-connection-diff" href="libnm-util/NMConnection.html#nm-connection-diff">
+<ANCHOR id="nm-connection-verify" href="libnm-util/NMConnection.html#nm-connection-verify">
+<ANCHOR id="nm-connection-need-secrets" href="libnm-util/NMConnection.html#nm-connection-need-secrets">
+<ANCHOR id="nm-connection-clear-secrets" href="libnm-util/NMConnection.html#nm-connection-clear-secrets">
+<ANCHOR id="nm-connection-update-secrets" href="libnm-util/NMConnection.html#nm-connection-update-secrets">
+<ANCHOR id="nm-connection-set-path" href="libnm-util/NMConnection.html#nm-connection-set-path">
+<ANCHOR id="nm-connection-get-path" href="libnm-util/NMConnection.html#nm-connection-get-path">
+<ANCHOR id="nm-connection-for-each-setting-value" href="libnm-util/NMConnection.html#nm-connection-for-each-setting-value">
+<ANCHOR id="nm-connection-to-hash" href="libnm-util/NMConnection.html#nm-connection-to-hash">
+<ANCHOR id="nm-connection-dump" href="libnm-util/NMConnection.html#nm-connection-dump">
+<ANCHOR id="nm-connection-lookup-setting-type" href="libnm-util/NMConnection.html#nm-connection-lookup-setting-type">
+<ANCHOR id="nm-connection-lookup-setting-type-by-quark" href="libnm-util/NMConnection.html#nm-connection-lookup-setting-type-by-quark">
+<ANCHOR id="nm-connection-get-uuid" href="libnm-util/NMConnection.html#nm-connection-get-uuid">
+<ANCHOR id="nm-connection-get-id" href="libnm-util/NMConnection.html#nm-connection-get-id">
+<ANCHOR id="nm-connection-get-setting-802-1x" href="libnm-util/NMConnection.html#nm-connection-get-setting-802-1x">
+<ANCHOR id="nm-connection-get-setting-bluetooth" href="libnm-util/NMConnection.html#nm-connection-get-setting-bluetooth">
+<ANCHOR id="nm-connection-get-setting-cdma" href="libnm-util/NMConnection.html#nm-connection-get-setting-cdma">
+<ANCHOR id="nm-connection-get-setting-connection" href="libnm-util/NMConnection.html#nm-connection-get-setting-connection">
+<ANCHOR id="nm-connection-get-setting-gsm" href="libnm-util/NMConnection.html#nm-connection-get-setting-gsm">
+<ANCHOR id="nm-connection-get-setting-ip4-config" href="libnm-util/NMConnection.html#nm-connection-get-setting-ip4-config">
+<ANCHOR id="nm-connection-get-setting-ip6-config" href="libnm-util/NMConnection.html#nm-connection-get-setting-ip6-config">
+<ANCHOR id="nm-connection-get-setting-olpc-mesh" href="libnm-util/NMConnection.html#nm-connection-get-setting-olpc-mesh">
+<ANCHOR id="nm-connection-get-setting-ppp" href="libnm-util/NMConnection.html#nm-connection-get-setting-ppp">
+<ANCHOR id="nm-connection-get-setting-pppoe" href="libnm-util/NMConnection.html#nm-connection-get-setting-pppoe">
+<ANCHOR id="nm-connection-get-setting-vpn" href="libnm-util/NMConnection.html#nm-connection-get-setting-vpn">
+<ANCHOR id="nm-connection-get-setting-wimax" href="libnm-util/NMConnection.html#nm-connection-get-setting-wimax">
+<ANCHOR id="nm-connection-get-setting-wired" href="libnm-util/NMConnection.html#nm-connection-get-setting-wired">
+<ANCHOR id="nm-connection-get-setting-wireless" href="libnm-util/NMConnection.html#nm-connection-get-setting-wireless">
+<ANCHOR id="nm-connection-get-setting-wireless-security" href="libnm-util/NMConnection.html#nm-connection-get-setting-wireless-security">
+<ANCHOR id="NMConnection.property-details" href="libnm-util/NMConnection.html#NMConnection.property-details">
+<ANCHOR id="NMConnection--path" href="libnm-util/NMConnection.html#NMConnection--path">
+<ANCHOR id="NMConnection.signal-details" href="libnm-util/NMConnection.html#NMConnection.signal-details">
+<ANCHOR id="NMConnection-secrets-updated" href="libnm-util/NMConnection.html#NMConnection-secrets-updated">
<ANCHOR id="NMSetting" href="libnm-util/NMSetting.html">
<ANCHOR id="NMSetting.synopsis" href="libnm-util/NMSetting.html#NMSetting.synopsis">
<ANCHOR id="NMSettingError" href="libnm-util/NMSetting.html#NMSettingError">
@@ -950,6 +1012,7 @@
<ANCHOR id="nm-utils-wifi-is-channel-valid" href="libnm-util/libnm-util-nm-utils.html#nm-utils-wifi-is-channel-valid">
<ANCHOR id="annotation-glossterm-out" href="libnm-util/annotation-glossary.html#annotation-glossterm-out">
<ANCHOR id="annotation-glossterm-allow-none" href="libnm-util/annotation-glossary.html#annotation-glossterm-allow-none">
+<ANCHOR id="annotation-glossterm-inout" href="libnm-util/annotation-glossary.html#annotation-glossterm-inout">
<ANCHOR id="annotation-glossterm-element-type" href="libnm-util/annotation-glossary.html#annotation-glossterm-element-type">
<ANCHOR id="annotation-glossterm-transfer container" href="libnm-util/annotation-glossary.html#annotation-glossterm-transfer container">
<ANCHOR id="annotation-glossterm-scope call" href="libnm-util/annotation-glossary.html#annotation-glossterm-scope call">
diff --git a/docs/libnm-util/html/libnm-util.devhelp b/docs/libnm-util/html/libnm-util.devhelp
index 3fa339f1d..b8b98e40f 100644
--- a/docs/libnm-util/html/libnm-util.devhelp
+++ b/docs/libnm-util/html/libnm-util.devhelp
@@ -3,6 +3,7 @@
<book xmlns="http://www.devhelp.net/book" title="libnm-util Reference Manual" link="index.html" author="" name="libnm-util">
<chapters>
<sub name="libnm-util API Reference" link="ch01.html">
+ <sub name="NMConnection" link="NMConnection.html"/>
<sub name="NMSetting" link="NMSetting.html"/>
<sub name="NMSettingConnection" link="NMSettingConnection.html"/>
<sub name="NMSettingWired" link="NMSettingWired.html"/>
@@ -26,6 +27,55 @@
<sub name="Annotation Glossary" link="annotation-glossary.html"/>
</chapters>
<functions>
+ <function name="enum NMConnectionError" link="NMConnection.html#NMConnectionError"/>
+ <function name="NM_TYPE_CONNECTION_ERROR" link="NMConnection.html#NM-TYPE-CONNECTION-ERROR:CAPS"/>
+ <function name="NM_CONNECTION_ERROR" link="NMConnection.html#NM-CONNECTION-ERROR:CAPS"/>
+ <function name="nm_connection_error_quark ()" link="NMConnection.html#nm-connection-error-quark"/>
+ <function name="NM_CONNECTION_PATH" link="NMConnection.html#NM-CONNECTION-PATH:CAPS"/>
+ <function name="NMConnection" link="NMConnection.html#NMConnection-struct"/>
+ <function name="NMConnectionClass" link="NMConnection.html#NMConnectionClass"/>
+ <function name="nm_connection_get_type ()" link="NMConnection.html#nm-connection-get-type"/>
+ <function name="nm_connection_new ()" link="NMConnection.html#nm-connection-new"/>
+ <function name="nm_connection_new_from_hash ()" link="NMConnection.html#nm-connection-new-from-hash"/>
+ <function name="nm_connection_duplicate ()" link="NMConnection.html#nm-connection-duplicate"/>
+ <function name="nm_connection_create_setting ()" link="NMConnection.html#nm-connection-create-setting"/>
+ <function name="nm_connection_add_setting ()" link="NMConnection.html#nm-connection-add-setting"/>
+ <function name="nm_connection_remove_setting ()" link="NMConnection.html#nm-connection-remove-setting"/>
+ <function name="nm_connection_get_setting ()" link="NMConnection.html#nm-connection-get-setting"/>
+ <function name="nm_connection_get_setting_by_name ()" link="NMConnection.html#nm-connection-get-setting-by-name"/>
+ <function name="nm_connection_replace_settings ()" link="NMConnection.html#nm-connection-replace-settings"/>
+ <function name="nm_connection_compare ()" link="NMConnection.html#nm-connection-compare"/>
+ <function name="nm_connection_diff ()" link="NMConnection.html#nm-connection-diff"/>
+ <function name="nm_connection_verify ()" link="NMConnection.html#nm-connection-verify"/>
+ <function name="nm_connection_need_secrets ()" link="NMConnection.html#nm-connection-need-secrets"/>
+ <function name="nm_connection_clear_secrets ()" link="NMConnection.html#nm-connection-clear-secrets"/>
+ <function name="nm_connection_update_secrets ()" link="NMConnection.html#nm-connection-update-secrets"/>
+ <function name="nm_connection_set_path ()" link="NMConnection.html#nm-connection-set-path"/>
+ <function name="nm_connection_get_path ()" link="NMConnection.html#nm-connection-get-path"/>
+ <function name="nm_connection_for_each_setting_value ()" link="NMConnection.html#nm-connection-for-each-setting-value"/>
+ <function name="nm_connection_to_hash ()" link="NMConnection.html#nm-connection-to-hash"/>
+ <function name="nm_connection_dump ()" link="NMConnection.html#nm-connection-dump"/>
+ <function name="nm_connection_lookup_setting_type ()" link="NMConnection.html#nm-connection-lookup-setting-type"/>
+ <function name="nm_connection_lookup_setting_type_by_quark ()" link="NMConnection.html#nm-connection-lookup-setting-type-by-quark"/>
+ <function name="nm_connection_get_uuid ()" link="NMConnection.html#nm-connection-get-uuid"/>
+ <function name="nm_connection_get_id ()" link="NMConnection.html#nm-connection-get-id"/>
+ <function name="nm_connection_get_setting_802_1x ()" link="NMConnection.html#nm-connection-get-setting-802-1x"/>
+ <function name="nm_connection_get_setting_bluetooth ()" link="NMConnection.html#nm-connection-get-setting-bluetooth"/>
+ <function name="nm_connection_get_setting_cdma ()" link="NMConnection.html#nm-connection-get-setting-cdma"/>
+ <function name="nm_connection_get_setting_connection ()" link="NMConnection.html#nm-connection-get-setting-connection"/>
+ <function name="nm_connection_get_setting_gsm ()" link="NMConnection.html#nm-connection-get-setting-gsm"/>
+ <function name="nm_connection_get_setting_ip4_config ()" link="NMConnection.html#nm-connection-get-setting-ip4-config"/>
+ <function name="nm_connection_get_setting_ip6_config ()" link="NMConnection.html#nm-connection-get-setting-ip6-config"/>
+ <function name="nm_connection_get_setting_olpc_mesh ()" link="NMConnection.html#nm-connection-get-setting-olpc-mesh"/>
+ <function name="nm_connection_get_setting_ppp ()" link="NMConnection.html#nm-connection-get-setting-ppp"/>
+ <function name="nm_connection_get_setting_pppoe ()" link="NMConnection.html#nm-connection-get-setting-pppoe"/>
+ <function name="nm_connection_get_setting_vpn ()" link="NMConnection.html#nm-connection-get-setting-vpn"/>
+ <function name="nm_connection_get_setting_wimax ()" link="NMConnection.html#nm-connection-get-setting-wimax"/>
+ <function name="nm_connection_get_setting_wired ()" link="NMConnection.html#nm-connection-get-setting-wired"/>
+ <function name="nm_connection_get_setting_wireless ()" link="NMConnection.html#nm-connection-get-setting-wireless"/>
+ <function name="nm_connection_get_setting_wireless_security ()" link="NMConnection.html#nm-connection-get-setting-wireless-security"/>
+ <function name="The &quot;path&quot; property" link="NMConnection.html#NMConnection--path"/>
+ <function name="The &quot;secrets-updated&quot; signal" link="NMConnection.html#NMConnection-secrets-updated"/>
<function name="enum NMSettingError" link="NMSetting.html#NMSettingError"/>
<function name="NM_TYPE_SETTING_ERROR" link="NMSetting.html#NM-TYPE-SETTING-ERROR:CAPS"/>
<function name="NM_SETTING_ERROR" link="NMSetting.html#NM-SETTING-ERROR:CAPS"/>
diff --git a/docs/libnm-util/html/libnm-util.devhelp2 b/docs/libnm-util/html/libnm-util.devhelp2
index 9cb466dd2..0104b4d08 100644
--- a/docs/libnm-util/html/libnm-util.devhelp2
+++ b/docs/libnm-util/html/libnm-util.devhelp2
@@ -3,6 +3,7 @@
<book xmlns="http://www.devhelp.net/book" title="libnm-util Reference Manual" link="index.html" author="" name="libnm-util" version="2" language="c">
<chapters>
<sub name="libnm-util API Reference" link="ch01.html">
+ <sub name="NMConnection" link="NMConnection.html"/>
<sub name="NMSetting" link="NMSetting.html"/>
<sub name="NMSettingConnection" link="NMSettingConnection.html"/>
<sub name="NMSettingWired" link="NMSettingWired.html"/>
@@ -26,6 +27,55 @@
<sub name="Annotation Glossary" link="annotation-glossary.html"/>
</chapters>
<functions>
+ <keyword type="enum" name="enum NMConnectionError" link="NMConnection.html#NMConnectionError"/>
+ <keyword type="macro" name="NM_TYPE_CONNECTION_ERROR" link="NMConnection.html#NM-TYPE-CONNECTION-ERROR:CAPS"/>
+ <keyword type="macro" name="NM_CONNECTION_ERROR" link="NMConnection.html#NM-CONNECTION-ERROR:CAPS"/>
+ <keyword type="function" name="nm_connection_error_quark ()" link="NMConnection.html#nm-connection-error-quark"/>
+ <keyword type="macro" name="NM_CONNECTION_PATH" link="NMConnection.html#NM-CONNECTION-PATH:CAPS"/>
+ <keyword type="struct" name="NMConnection" link="NMConnection.html#NMConnection-struct"/>
+ <keyword type="struct" name="NMConnectionClass" link="NMConnection.html#NMConnectionClass"/>
+ <keyword type="function" name="nm_connection_get_type ()" link="NMConnection.html#nm-connection-get-type"/>
+ <keyword type="function" name="nm_connection_new ()" link="NMConnection.html#nm-connection-new"/>
+ <keyword type="function" name="nm_connection_new_from_hash ()" link="NMConnection.html#nm-connection-new-from-hash"/>
+ <keyword type="function" name="nm_connection_duplicate ()" link="NMConnection.html#nm-connection-duplicate"/>
+ <keyword type="function" name="nm_connection_create_setting ()" link="NMConnection.html#nm-connection-create-setting"/>
+ <keyword type="function" name="nm_connection_add_setting ()" link="NMConnection.html#nm-connection-add-setting"/>
+ <keyword type="function" name="nm_connection_remove_setting ()" link="NMConnection.html#nm-connection-remove-setting"/>
+ <keyword type="function" name="nm_connection_get_setting ()" link="NMConnection.html#nm-connection-get-setting"/>
+ <keyword type="function" name="nm_connection_get_setting_by_name ()" link="NMConnection.html#nm-connection-get-setting-by-name"/>
+ <keyword type="function" name="nm_connection_replace_settings ()" link="NMConnection.html#nm-connection-replace-settings"/>
+ <keyword type="function" name="nm_connection_compare ()" link="NMConnection.html#nm-connection-compare"/>
+ <keyword type="function" name="nm_connection_diff ()" link="NMConnection.html#nm-connection-diff"/>
+ <keyword type="function" name="nm_connection_verify ()" link="NMConnection.html#nm-connection-verify"/>
+ <keyword type="function" name="nm_connection_need_secrets ()" link="NMConnection.html#nm-connection-need-secrets"/>
+ <keyword type="function" name="nm_connection_clear_secrets ()" link="NMConnection.html#nm-connection-clear-secrets"/>
+ <keyword type="function" name="nm_connection_update_secrets ()" link="NMConnection.html#nm-connection-update-secrets"/>
+ <keyword type="function" name="nm_connection_set_path ()" link="NMConnection.html#nm-connection-set-path"/>
+ <keyword type="function" name="nm_connection_get_path ()" link="NMConnection.html#nm-connection-get-path"/>
+ <keyword type="function" name="nm_connection_for_each_setting_value ()" link="NMConnection.html#nm-connection-for-each-setting-value"/>
+ <keyword type="function" name="nm_connection_to_hash ()" link="NMConnection.html#nm-connection-to-hash"/>
+ <keyword type="function" name="nm_connection_dump ()" link="NMConnection.html#nm-connection-dump"/>
+ <keyword type="function" name="nm_connection_lookup_setting_type ()" link="NMConnection.html#nm-connection-lookup-setting-type"/>
+ <keyword type="function" name="nm_connection_lookup_setting_type_by_quark ()" link="NMConnection.html#nm-connection-lookup-setting-type-by-quark"/>
+ <keyword type="function" name="nm_connection_get_uuid ()" link="NMConnection.html#nm-connection-get-uuid"/>
+ <keyword type="function" name="nm_connection_get_id ()" link="NMConnection.html#nm-connection-get-id"/>
+ <keyword type="function" name="nm_connection_get_setting_802_1x ()" link="NMConnection.html#nm-connection-get-setting-802-1x"/>
+ <keyword type="function" name="nm_connection_get_setting_bluetooth ()" link="NMConnection.html#nm-connection-get-setting-bluetooth"/>
+ <keyword type="function" name="nm_connection_get_setting_cdma ()" link="NMConnection.html#nm-connection-get-setting-cdma"/>
+ <keyword type="function" name="nm_connection_get_setting_connection ()" link="NMConnection.html#nm-connection-get-setting-connection"/>
+ <keyword type="function" name="nm_connection_get_setting_gsm ()" link="NMConnection.html#nm-connection-get-setting-gsm"/>
+ <keyword type="function" name="nm_connection_get_setting_ip4_config ()" link="NMConnection.html#nm-connection-get-setting-ip4-config"/>
+ <keyword type="function" name="nm_connection_get_setting_ip6_config ()" link="NMConnection.html#nm-connection-get-setting-ip6-config"/>
+ <keyword type="function" name="nm_connection_get_setting_olpc_mesh ()" link="NMConnection.html#nm-connection-get-setting-olpc-mesh"/>
+ <keyword type="function" name="nm_connection_get_setting_ppp ()" link="NMConnection.html#nm-connection-get-setting-ppp"/>
+ <keyword type="function" name="nm_connection_get_setting_pppoe ()" link="NMConnection.html#nm-connection-get-setting-pppoe"/>
+ <keyword type="function" name="nm_connection_get_setting_vpn ()" link="NMConnection.html#nm-connection-get-setting-vpn"/>
+ <keyword type="function" name="nm_connection_get_setting_wimax ()" link="NMConnection.html#nm-connection-get-setting-wimax"/>
+ <keyword type="function" name="nm_connection_get_setting_wired ()" link="NMConnection.html#nm-connection-get-setting-wired"/>
+ <keyword type="function" name="nm_connection_get_setting_wireless ()" link="NMConnection.html#nm-connection-get-setting-wireless"/>
+ <keyword type="function" name="nm_connection_get_setting_wireless_security ()" link="NMConnection.html#nm-connection-get-setting-wireless-security"/>
+ <keyword type="property" name="The &quot;path&quot; property" link="NMConnection.html#NMConnection--path"/>
+ <keyword type="signal" name="The &quot;secrets-updated&quot; signal" link="NMConnection.html#NMConnection-secrets-updated"/>
<keyword type="enum" name="enum NMSettingError" link="NMSetting.html#NMSettingError"/>
<keyword type="macro" name="NM_TYPE_SETTING_ERROR" link="NMSetting.html#NM-TYPE-SETTING-ERROR:CAPS"/>
<keyword type="macro" name="NM_SETTING_ERROR" link="NMSetting.html#NM-SETTING-ERROR:CAPS"/>
@@ -810,6 +860,9 @@
<keyword type="function" name="nm_utils_wifi_channel_to_freq ()" link="libnm-util-nm-utils.html#nm-utils-wifi-channel-to-freq"/>
<keyword type="function" name="nm_utils_wifi_find_next_channel ()" link="libnm-util-nm-utils.html#nm-utils-wifi-find-next-channel"/>
<keyword type="function" name="nm_utils_wifi_is_channel_valid ()" link="libnm-util-nm-utils.html#nm-utils-wifi-is-channel-valid"/>
+ <keyword type="constant" name="NM_CONNECTION_ERROR_UNKNOWN" link="NMConnection.html#NM-CONNECTION-ERROR-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_CONNECTION_ERROR_CONNECTION_SETTING_NOT_FOUND" link="NMConnection.html#NM-CONNECTION-ERROR-CONNECTION-SETTING-NOT-FOUND:CAPS"/>
+ <keyword type="constant" name="NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID" link="NMConnection.html#NM-CONNECTION-ERROR-CONNECTION-TYPE-INVALID:CAPS"/>
<keyword type="constant" name="NM_SETTING_ERROR_UNKNOWN" link="NMSetting.html#NM-SETTING-ERROR-UNKNOWN:CAPS"/>
<keyword type="constant" name="NM_SETTING_ERROR_PROPERTY_NOT_FOUND" link="NMSetting.html#NM-SETTING-ERROR-PROPERTY-NOT-FOUND:CAPS"/>
<keyword type="constant" name="NM_SETTING_ERROR_PROPERTY_NOT_SECRET" link="NMSetting.html#NM-SETTING-ERROR-PROPERTY-NOT-SECRET:CAPS"/>
diff --git a/docs/libnm-util/html/object-tree.html b/docs/libnm-util/html/object-tree.html
index bbe2a6d2c..a69c8dbb3 100644
--- a/docs/libnm-util/html/object-tree.html
+++ b/docs/libnm-util/html/object-tree.html
@@ -24,7 +24,7 @@
<a name="object-tree"></a>Object Hierarchy</h2></div></div></div>
<pre class="screen">
<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- NMConnection
+ <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
<a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
<a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
<a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth">NMSettingBluetooth</a>
@@ -43,7 +43,7 @@
<a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
<a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
GEnum
- NMConnectionError
+ <a class="link" href="NMConnection.html#NMConnectionError">NMConnectionError</a>
<a class="link" href="NMSetting8021x.html#NMSetting8021xError">NMSetting8021xError</a>
<a class="link" href="NMSettingBluetooth.html#NMSettingBluetoothError">NMSettingBluetoothError</a>
<a class="link" href="NMSettingCdma.html#NMSettingCdmaError">NMSettingCdmaError</a>
diff --git a/include/nm-version.h b/include/nm-version.h
index b404108f7..972aee275 100644
--- a/include/nm-version.h
+++ b/include/nm-version.h
@@ -43,7 +43,7 @@
* Evaluates to the micro version number of NetworkManager which this source
* compiled against.
*/
-#define NM_MICRO_VERSION (999)
+#define NM_MICRO_VERSION (9997)
/**
* NM_CHECK_VERSION:
diff --git a/introspection/nm-active-connection.xml b/introspection/nm-active-connection.xml
index 1594764ee..a150b2c82 100644
--- a/introspection/nm-active-connection.xml
+++ b/introspection/nm-active-connection.xml
@@ -2,6 +2,14 @@
<node name="/" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
<interface name="org.freedesktop.NetworkManager.Connection.Active">
+ <tp:docstring>
+ Objects that implement the Connection.Active interface represent an attempt
+ to connect to a network using the details provided by a Connection object.
+ The Connection.Active object tracks the life-cycle of the connection
+ attempt and if successful indicates whether the connected network is the
+ "default" or preferred network for access.
+ </tp:docstring>
+
<property name="Connection" type="o" access="read">
<tp:docstring>The path of the connection.</tp:docstring>
</property>
diff --git a/introspection/nm-device.xml b/introspection/nm-device.xml
index 13c542a6d..5fdda96d3 100644
--- a/introspection/nm-device.xml
+++ b/introspection/nm-device.xml
@@ -51,6 +51,14 @@
The current state of the device.
</tp:docstring>
</property>
+ <property name="ActiveConnection" type="o" access="read">
+ <tp:docstring>
+ Object path of an ActiveConnection object that "owns" this device during
+ activation. The ActiveConnection object tracks the life-cycle of a
+ connection to a specific network and implements the
+ org.freedesktop.NetworkManager.Connection.Active D-Bus interface.
+ </tp:docstring>
+ </property>
<property name="Ip4Config" type="o" access="read">
<tp:docstring>
Object path of the Ip4Config object describing the configuration of the device. Only valid when the device is in the NM_DEVICE_STATE_ACTIVATED state.
diff --git a/introspection/nm-manager.xml b/introspection/nm-manager.xml
index ee84a47b0..1bb76d09f 100644
--- a/introspection/nm-manager.xml
+++ b/introspection/nm-manager.xml
@@ -226,7 +226,8 @@
related to that domain. Available domains are: [NONE, HW, RFKILL,
ETHER, WIFI, BT, MB, DHCP4, DHCP6, PPP, WIFI_SCAN, IP4, IP6, AUTOIP4,
DNS, VPN, SHARING, SUPPLICANT, USER_SET, SYS_SET, SUSPEND, CORE,
- DEVICE, OLPC]
+ DEVICE, OLPC]. If an empty string is given, the log level is changed
+ but the current set of log domains remains unchanged.
</tp:docstring>
</arg>
</method>
diff --git a/libnm-glib/libnm-glib.ver b/libnm-glib/libnm-glib.ver
index 64ff70ada..f42368b87 100644
--- a/libnm-glib/libnm-glib.ver
+++ b/libnm-glib/libnm-glib.ver
@@ -66,6 +66,7 @@ global:
nm_device_ethernet_get_type;
nm_device_ethernet_new;
nm_device_filter_connections;
+ nm_device_get_active_connection;
nm_device_get_capabilities;
nm_device_get_device_type;
nm_device_get_dhcp4_config;
@@ -75,6 +76,7 @@ global:
nm_device_get_iface;
nm_device_get_ip4_config;
nm_device_get_ip6_config;
+ nm_device_get_ip_iface;
nm_device_get_managed;
nm_device_get_product;
nm_device_get_state;
diff --git a/libnm-glib/libnm_glib.c b/libnm-glib/libnm_glib.c
index 911d0cec4..1d7557861 100644
--- a/libnm-glib/libnm_glib.c
+++ b/libnm-glib/libnm_glib.c
@@ -64,14 +64,13 @@ typedef struct libnm_glib_callback
} libnm_glib_callback;
-static void libnm_glib_schedule_dbus_watcher (libnm_glib_ctx *ctx);
-static DBusConnection * libnm_glib_dbus_init (gpointer *user_data, GMainContext *context);
-static void libnm_glib_update_state (libnm_glib_ctx *ctx, NMState state);
+static void _libnm_glib_schedule_dbus_watcher (libnm_glib_ctx *ctx);
+static DBusConnection * _libnm_glib_dbus_init (gpointer *user_data, GMainContext *context);
+static void _libnm_glib_update_state (libnm_glib_ctx *ctx, NMState state);
static void
-libnm_glib_nm_state_cb (DBusPendingCall *pcall,
- void *user_data)
+_libnm_glib_nm_state_cb (DBusPendingCall *pcall, void *user_data)
{
DBusMessage * reply;
libnm_glib_ctx * ctx = (libnm_glib_ctx *) user_data;
@@ -96,7 +95,7 @@ libnm_glib_nm_state_cb (DBusPendingCall *pcall,
}
if (dbus_message_get_args (reply, NULL, DBUS_TYPE_UINT32, &nm_state, DBUS_TYPE_INVALID))
- libnm_glib_update_state (ctx, nm_state);
+ _libnm_glib_update_state (ctx, nm_state);
dbus_message_unref (reply);
@@ -105,7 +104,7 @@ out:
}
static void
-libnm_glib_get_nm_state (libnm_glib_ctx *ctx)
+_libnm_glib_get_nm_state (libnm_glib_ctx *ctx)
{
DBusMessage * message;
DBusPendingCall * pcall = NULL;
@@ -116,13 +115,13 @@ libnm_glib_get_nm_state (libnm_glib_ctx *ctx)
{
dbus_connection_send_with_reply (ctx->dbus_con, message, &pcall, -1);
if (pcall)
- dbus_pending_call_set_notify (pcall, libnm_glib_nm_state_cb, ctx, NULL);
+ dbus_pending_call_set_notify (pcall, _libnm_glib_nm_state_cb, ctx, NULL);
dbus_message_unref (message);
}
}
static gboolean
-libnm_glib_callback_helper (gpointer user_data)
+_libnm_glib_callback_helper (gpointer user_data)
{
libnm_glib_callback *cb_data = (libnm_glib_callback *)user_data;
@@ -136,8 +135,8 @@ libnm_glib_callback_helper (gpointer user_data)
}
static void
-libnm_glib_schedule_single_callback (libnm_glib_ctx *ctx,
- libnm_glib_callback *callback)
+_libnm_glib_schedule_single_callback (libnm_glib_ctx *ctx,
+ libnm_glib_callback *callback)
{
GSource *source;
@@ -147,14 +146,14 @@ libnm_glib_schedule_single_callback (libnm_glib_ctx *ctx,
callback->libnm_glib_ctx = ctx;
source = g_idle_source_new ();
- g_source_set_callback (source, libnm_glib_callback_helper, callback, NULL);
+ g_source_set_callback (source, _libnm_glib_callback_helper, callback, NULL);
g_source_attach (source, callback->gmain_ctx);
g_source_unref (source);
}
static void
-libnm_glib_unschedule_single_callback (libnm_glib_ctx *ctx,
- libnm_glib_callback *callback)
+_libnm_glib_unschedule_single_callback (libnm_glib_ctx *ctx,
+ libnm_glib_callback *callback)
{
GSource *source;
@@ -167,7 +166,7 @@ libnm_glib_unschedule_single_callback (libnm_glib_ctx *ctx,
}
static void
-libnm_glib_call_callbacks (libnm_glib_ctx *ctx)
+_libnm_glib_call_callbacks (libnm_glib_ctx *ctx)
{
GSList *elem;
@@ -178,15 +177,14 @@ libnm_glib_call_callbacks (libnm_glib_ctx *ctx)
{
libnm_glib_callback *callback = (libnm_glib_callback *)(elem->data);
if (callback)
- libnm_glib_schedule_single_callback (ctx, callback);
+ _libnm_glib_schedule_single_callback (ctx, callback);
}
g_mutex_unlock (ctx->callbacks_lock);
}
static void
-libnm_glib_update_state (libnm_glib_ctx *ctx,
- NMState state)
+_libnm_glib_update_state (libnm_glib_ctx *ctx, NMState state)
{
libnm_glib_state old_state;
@@ -212,14 +210,14 @@ libnm_glib_update_state (libnm_glib_ctx *ctx,
}
if (old_state != ctx->nm_state)
- libnm_glib_call_callbacks (ctx);
+ _libnm_glib_call_callbacks (ctx);
}
static DBusHandlerResult
-libnm_glib_dbus_filter (DBusConnection *connection,
- DBusMessage *message,
- void *user_data)
+_libnm_glib_dbus_filter (DBusConnection *connection,
+ DBusMessage *message,
+ void *user_data)
{
libnm_glib_ctx *ctx = (libnm_glib_ctx *)user_data;
gboolean handled = TRUE;
@@ -237,7 +235,7 @@ libnm_glib_dbus_filter (DBusConnection *connection,
dbus_connection_close (ctx->dbus_con);
dbus_connection_unref (ctx->dbus_con);
ctx->dbus_con = NULL;
- libnm_glib_schedule_dbus_watcher (ctx);
+ _libnm_glib_schedule_dbus_watcher (ctx);
}
else if (dbus_message_is_signal (message, DBUS_INTERFACE_DBUS, "NameOwnerChanged"))
{
@@ -258,7 +256,7 @@ libnm_glib_dbus_filter (DBusConnection *connection,
gboolean new_owner_good = (new_owner && (strlen (new_owner) > 0));
if (!old_owner_good && new_owner_good) /* Equivalent to old ServiceCreated signal */
- libnm_glib_get_nm_state (ctx);
+ _libnm_glib_get_nm_state (ctx);
else if (old_owner_good && !new_owner_good) /* Equivalent to old ServiceDeleted signal */
ctx->nm_state = LIBNM_NO_NETWORKMANAGER;
}
@@ -269,14 +267,14 @@ libnm_glib_dbus_filter (DBusConnection *connection,
|| dbus_message_is_signal (message, NM_DBUS_INTERFACE, "DeviceActivating")
|| dbus_message_is_signal (message, NM_DBUS_INTERFACE, "DevicesChanged"))
{
- libnm_glib_get_nm_state (ctx);
+ _libnm_glib_get_nm_state (ctx);
}
else if (dbus_message_is_signal (message, NM_DBUS_INTERFACE, "StateChanged"))
{
NMState state = NM_STATE_UNKNOWN;
dbus_message_get_args (message, &error, DBUS_TYPE_UINT32, &state, DBUS_TYPE_INVALID);
- libnm_glib_update_state (ctx, state);
+ _libnm_glib_update_state (ctx, state);
}
else
handled = FALSE;
@@ -295,8 +293,7 @@ libnm_glib_dbus_filter (DBusConnection *connection,
*
*/
static DBusConnection *
-libnm_glib_dbus_init (gpointer *user_data,
- GMainContext *context)
+_libnm_glib_dbus_init (gpointer *user_data, GMainContext *context)
{
DBusConnection *connection = NULL;
DBusError error;
@@ -312,7 +309,7 @@ libnm_glib_dbus_init (gpointer *user_data,
if (!connection)
return NULL;
- if (!dbus_connection_add_filter (connection, libnm_glib_dbus_filter, user_data, NULL))
+ if (!dbus_connection_add_filter (connection, _libnm_glib_dbus_filter, user_data, NULL))
return (NULL);
dbus_connection_set_exit_on_disconnect (connection, FALSE);
@@ -348,7 +345,7 @@ libnm_glib_dbus_init (gpointer *user_data,
*
*/
static gboolean
-libnm_glib_dbus_watcher (gpointer user_data)
+_libnm_glib_dbus_watcher (gpointer user_data)
{
libnm_glib_ctx *ctx = (libnm_glib_ctx *)user_data;
@@ -357,12 +354,12 @@ libnm_glib_dbus_watcher (gpointer user_data)
ctx->dbus_watcher = 0;
if (!ctx->dbus_con)
- ctx->dbus_con = libnm_glib_dbus_init ((gpointer)ctx, ctx->g_main_ctx);
+ ctx->dbus_con = _libnm_glib_dbus_init ((gpointer)ctx, ctx->g_main_ctx);
if (ctx->dbus_con)
{
/* Get NM's state right away after we reconnect */
- libnm_glib_get_nm_state (ctx);
+ _libnm_glib_get_nm_state (ctx);
ctx->dbus_watch_interval = 1000;
}
else
@@ -373,7 +370,7 @@ libnm_glib_dbus_watcher (gpointer user_data)
ctx->dbus_watch_interval = MIN(ctx->dbus_watch_interval + 3000, 60000);
/* Reschule ourselves if we _still_ don't have a connection to dbus */
- libnm_glib_schedule_dbus_watcher (ctx);
+ _libnm_glib_schedule_dbus_watcher (ctx);
}
return FALSE;
@@ -388,14 +385,14 @@ libnm_glib_dbus_watcher (gpointer user_data)
*
*/
static void
-libnm_glib_schedule_dbus_watcher (libnm_glib_ctx *ctx)
+_libnm_glib_schedule_dbus_watcher (libnm_glib_ctx *ctx)
{
g_return_if_fail (ctx != NULL);
if (ctx->dbus_watcher == 0)
{
GSource * source = g_timeout_source_new (ctx->dbus_watch_interval);
- g_source_set_callback (source, libnm_glib_dbus_watcher, (gpointer) ctx, NULL);
+ g_source_set_callback (source, _libnm_glib_dbus_watcher, (gpointer) ctx, NULL);
ctx->dbus_watcher = g_source_attach (source, ctx->g_main_ctx);
g_source_unref (source);
}
@@ -409,7 +406,7 @@ libnm_glib_schedule_dbus_watcher (libnm_glib_ctx *ctx)
*
*/
static gpointer
-libnm_glib_dbus_worker (gpointer user_data)
+_libnm_glib_dbus_worker (gpointer user_data)
{
libnm_glib_ctx *ctx = (libnm_glib_ctx *)user_data;
@@ -420,10 +417,10 @@ libnm_glib_dbus_worker (gpointer user_data)
* down. Should probably be done by a timeout polling dbus_connection_is_connected()
* or by getting connection status out of libdbus or something.
*/
- if (!(ctx->dbus_con = libnm_glib_dbus_init ((gpointer) ctx, ctx->g_main_ctx)))
- libnm_glib_schedule_dbus_watcher (ctx);
+ if (!(ctx->dbus_con = _libnm_glib_dbus_init ((gpointer) ctx, ctx->g_main_ctx)))
+ _libnm_glib_schedule_dbus_watcher (ctx);
else
- libnm_glib_get_nm_state (ctx);
+ _libnm_glib_get_nm_state (ctx);
ctx->thread_inited = TRUE;
g_main_loop_run (ctx->g_main_loop);
@@ -434,7 +431,7 @@ libnm_glib_dbus_worker (gpointer user_data)
static void
-libnm_glib_ctx_free (libnm_glib_ctx *ctx)
+_libnm_glib_ctx_free (libnm_glib_ctx *ctx)
{
g_return_if_fail (ctx != NULL);
@@ -472,7 +469,7 @@ libnm_glib_ctx_free (libnm_glib_ctx *ctx)
static libnm_glib_ctx *
-libnm_glib_ctx_new (void)
+_libnm_glib_ctx_new (void)
{
libnm_glib_ctx *ctx = g_malloc0 (sizeof (libnm_glib_ctx));
@@ -487,7 +484,7 @@ libnm_glib_ctx_new (void)
return ctx;
error:
- libnm_glib_ctx_free (ctx);
+ _libnm_glib_ctx_free (ctx);
return NULL;
}
@@ -502,10 +499,10 @@ libnm_glib_init (void)
g_thread_init (NULL);
dbus_g_thread_init ();
- if (!(ctx = libnm_glib_ctx_new ()))
+ if (!(ctx = _libnm_glib_ctx_new ()))
return NULL;
- ctx->thread = g_thread_create (libnm_glib_dbus_worker, ctx, TRUE, NULL);
+ ctx->thread = g_thread_create (_libnm_glib_dbus_worker, ctx, TRUE, NULL);
if (!ctx->thread)
goto error;
@@ -516,7 +513,7 @@ libnm_glib_init (void)
return ctx;
error:
- libnm_glib_ctx_free (ctx);
+ _libnm_glib_ctx_free (ctx);
return NULL;
}
@@ -530,7 +527,7 @@ libnm_glib_shutdown (libnm_glib_ctx *ctx)
while (!ctx->thread_done)
g_usleep (G_USEC_PER_SEC / 20);
- libnm_glib_ctx_free (ctx);
+ _libnm_glib_ctx_free (ctx);
}
@@ -565,7 +562,7 @@ libnm_glib_register_callback (libnm_glib_ctx *ctx,
g_mutex_lock (ctx->callbacks_lock);
ctx->callbacks = g_slist_append (ctx->callbacks, callback);
- libnm_glib_schedule_single_callback (ctx, callback);
+ _libnm_glib_schedule_single_callback (ctx, callback);
g_mutex_unlock (ctx->callbacks_lock);
return (callback->id);
@@ -588,7 +585,7 @@ libnm_glib_unregister_callback (libnm_glib_ctx *ctx,
libnm_glib_callback *callback = (libnm_glib_callback *)(elem->data);
if (callback && (callback->id == id))
{
- libnm_glib_unschedule_single_callback (ctx, callback);
+ _libnm_glib_unschedule_single_callback (ctx, callback);
ctx->callbacks = g_slist_remove_link (ctx->callbacks, elem);
break;
}
diff --git a/libnm-glib/nm-device-wifi.c b/libnm-glib/nm-device-wifi.c
index d1d9e0b73..9877f94ff 100644
--- a/libnm-glib/nm-device-wifi.c
+++ b/libnm-glib/nm-device-wifi.c
@@ -55,7 +55,7 @@ typedef struct {
NM80211Mode mode;
guint32 rate;
NMAccessPoint *active_ap;
- gboolean null_active_ap;
+ gboolean got_active_ap;
NMDeviceWifiCapabilities wireless_caps;
GPtrArray *aps;
@@ -271,6 +271,7 @@ nm_device_wifi_get_active_access_point (NMDeviceWifi *device)
NMDeviceState state;
char *path;
GValue value = { 0, };
+ GError *error = NULL;
g_return_val_if_fail (NM_IS_DEVICE_WIFI (device), NULL);
@@ -291,21 +292,20 @@ nm_device_wifi_get_active_access_point (NMDeviceWifi *device)
}
priv = NM_DEVICE_WIFI_GET_PRIVATE (device);
- if (priv->active_ap)
+ if (priv->got_active_ap == TRUE)
return priv->active_ap;
- if (priv->null_active_ap)
- return NULL;
path = _nm_object_get_object_path_property (NM_OBJECT (device),
- NM_DBUS_INTERFACE_DEVICE_WIRELESS,
- DBUS_PROP_ACTIVE_ACCESS_POINT,
- NULL);
- if (path) {
+ NM_DBUS_INTERFACE_DEVICE_WIRELESS,
+ DBUS_PROP_ACTIVE_ACCESS_POINT,
+ &error);
+ if (error == NULL) {
g_value_init (&value, DBUS_TYPE_G_OBJECT_PATH);
g_value_take_boxed (&value, path);
demarshal_active_ap (NM_OBJECT (device), NULL, &value, &priv->active_ap);
g_value_unset (&value);
}
+ g_clear_error (&error);
return priv->active_ap;
}
@@ -427,9 +427,8 @@ access_point_removed_proxy (DBusGProxy *proxy, char *path, gpointer user_data)
if (ap == priv->active_ap) {
g_object_unref (priv->active_ap);
priv->active_ap = NULL;
- priv->null_active_ap = FALSE;
-
_nm_object_queue_notify (NM_OBJECT (self), NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT);
+
priv->rate = 0;
_nm_object_queue_notify (NM_OBJECT (self), NM_DEVICE_WIFI_BITRATE);
}
@@ -620,7 +619,6 @@ state_changed_cb (NMDevice *device, GParamSpec *pspec, gpointer user_data)
if (priv->active_ap) {
g_object_unref (priv->active_ap);
priv->active_ap = NULL;
- priv->null_active_ap = FALSE;
}
_nm_object_queue_notify (NM_OBJECT (device), NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT);
priv->rate = 0;
@@ -642,13 +640,11 @@ demarshal_active_ap (NMObject *object, GParamSpec *pspec, GValue *value, gpointe
if (!G_VALUE_HOLDS (value, DBUS_TYPE_G_OBJECT_PATH))
return FALSE;
- priv->null_active_ap = FALSE;
+ priv->got_active_ap = TRUE;
- path = g_value_get_boxed (value);
- if (path) {
- if (!strcmp (path, "/"))
- priv->null_active_ap = TRUE;
- else {
+ if (value) {
+ path = g_value_get_boxed (value);
+ if (path) {
ap = NM_ACCESS_POINT (_nm_object_cache_get (path));
if (!ap) {
connection = nm_object_get_connection (object);
diff --git a/libnm-glib/nm-device-wimax.c b/libnm-glib/nm-device-wimax.c
index 194a36d12..a889583db 100644
--- a/libnm-glib/nm-device-wimax.c
+++ b/libnm-glib/nm-device-wimax.c
@@ -50,7 +50,7 @@ typedef struct {
char *hw_address;
NMWimaxNsp *active_nsp;
- gboolean null_active_nsp;
+ gboolean got_active_nsp;
GPtrArray *nsps;
guint center_freq;
@@ -153,6 +153,7 @@ nm_device_wimax_get_active_nsp (NMDeviceWimax *wimax)
NMDeviceState state;
char *path;
GValue value = { 0, };
+ GError *error = NULL;
g_return_val_if_fail (NM_IS_DEVICE_WIMAX (wimax), NULL);
@@ -173,21 +174,20 @@ nm_device_wimax_get_active_nsp (NMDeviceWimax *wimax)
}
priv = NM_DEVICE_WIMAX_GET_PRIVATE (wimax);
- if (priv->active_nsp)
+ if (priv->got_active_nsp == TRUE)
return priv->active_nsp;
- if (priv->null_active_nsp)
- return NULL;
path = _nm_object_get_object_path_property (NM_OBJECT (wimax),
NM_DBUS_INTERFACE_DEVICE_WIMAX,
DBUS_PROP_ACTIVE_NSP,
- NULL);
- if (path) {
+ &error);
+ if (error == NULL) {
g_value_init (&value, DBUS_TYPE_G_OBJECT_PATH);
g_value_take_boxed (&value, path);
demarshal_active_nsp (NM_OBJECT (wimax), NULL, &value, &priv->active_nsp);
g_value_unset (&value);
}
+ g_clear_error (&error);
return priv->active_nsp;
}
@@ -309,8 +309,6 @@ nsp_removed_proxy (DBusGProxy *proxy, char *path, gpointer user_data)
if (nsp == priv->active_nsp) {
g_object_unref (priv->active_nsp);
priv->active_nsp = NULL;
- priv->null_active_nsp = FALSE;
-
_nm_object_queue_notify (NM_OBJECT (self), NM_DEVICE_WIMAX_ACTIVE_NSP);
}
@@ -607,7 +605,6 @@ state_changed_cb (NMDevice *device, GParamSpec *pspec, gpointer user_data)
if (priv->active_nsp) {
g_object_unref (priv->active_nsp);
priv->active_nsp = NULL;
- priv->null_active_nsp = FALSE;
}
_nm_object_queue_notify (NM_OBJECT (device), NM_DEVICE_WIMAX_ACTIVE_NSP);
clear_link_status (self);
@@ -634,13 +631,11 @@ demarshal_active_nsp (NMObject *object, GParamSpec *pspec, GValue *value, gpoint
if (!G_VALUE_HOLDS (value, DBUS_TYPE_G_OBJECT_PATH))
return FALSE;
- priv->null_active_nsp = FALSE;
+ priv->got_active_nsp = TRUE;
- path = g_value_get_boxed (value);
- if (path) {
- if (!strcmp (path, "/"))
- priv->null_active_nsp = TRUE;
- else {
+ if (value) {
+ path = g_value_get_boxed (value);
+ if (path) {
nsp = NM_WIMAX_NSP (_nm_object_cache_get (path));
if (!nsp) {
connection = nm_object_get_connection (object);
diff --git a/libnm-glib/nm-device.c b/libnm-glib/nm-device.c
index 4167c9a7e..3b39c9ece 100644
--- a/libnm-glib/nm-device.c
+++ b/libnm-glib/nm-device.c
@@ -56,15 +56,18 @@ typedef struct {
gboolean managed;
gboolean firmware_missing;
NMIP4Config *ip4_config;
- gboolean null_ip4_config;
+ gboolean got_ip4_config;
NMDHCP4Config *dhcp4_config;
- gboolean null_dhcp4_config;
+ gboolean got_dhcp4_config;
NMIP6Config *ip6_config;
- gboolean null_ip6_config;
+ gboolean got_ip6_config;
NMDHCP6Config *dhcp6_config;
- gboolean null_dhcp6_config;
+ gboolean got_dhcp6_config;
NMDeviceState state;
+ NMActiveConnection *active_connection;
+ gboolean got_active_connection;
+
GUdevClient *client;
char *product;
char *vendor;
@@ -87,6 +90,7 @@ enum {
PROP_DHCP6_CONFIG,
PROP_IP_INTERFACE,
PROP_DEVICE_TYPE,
+ PROP_ACTIVE_CONNECTION,
LAST_PROP
};
@@ -119,13 +123,11 @@ demarshal_ip4_config (NMObject *object, GParamSpec *pspec, GValue *value, gpoint
if (!G_VALUE_HOLDS (value, DBUS_TYPE_G_OBJECT_PATH))
return FALSE;
- priv->null_ip4_config = FALSE;
+ priv->got_ip4_config = TRUE;
- path = g_value_get_boxed (value);
- if (path) {
- if (!strcmp (path, "/"))
- priv->null_ip4_config = TRUE;
- else {
+ if (value) {
+ path = g_value_get_boxed (value);
+ if (path) {
config = NM_IP4_CONFIG (_nm_object_cache_get (path));
if (!config) {
connection = nm_object_get_connection (object);
@@ -157,13 +159,11 @@ demarshal_dhcp4_config (NMObject *object, GParamSpec *pspec, GValue *value, gpoi
if (!G_VALUE_HOLDS (value, DBUS_TYPE_G_OBJECT_PATH))
return FALSE;
- priv->null_dhcp4_config = FALSE;
+ priv->got_dhcp4_config = TRUE;
- path = g_value_get_boxed (value);
- if (path) {
- if (!strcmp (path, "/"))
- priv->null_dhcp4_config = TRUE;
- else {
+ if (value) {
+ path = g_value_get_boxed (value);
+ if (path) {
config = NM_DHCP4_CONFIG (_nm_object_cache_get (path));
if (!config) {
connection = nm_object_get_connection (object);
@@ -195,13 +195,11 @@ demarshal_ip6_config (NMObject *object, GParamSpec *pspec, GValue *value, gpoint
if (!G_VALUE_HOLDS (value, DBUS_TYPE_G_OBJECT_PATH))
return FALSE;
- priv->null_ip6_config = FALSE;
+ priv->got_ip6_config = TRUE;
- path = g_value_get_boxed (value);
- if (path) {
- if (!strcmp (path, "/"))
- priv->null_ip6_config = TRUE;
- else {
+ if (value) {
+ path = g_value_get_boxed (value);
+ if (path) {
config = NM_IP6_CONFIG (_nm_object_cache_get (path));
if (!config) {
connection = nm_object_get_connection (object);
@@ -233,13 +231,11 @@ demarshal_dhcp6_config (NMObject *object, GParamSpec *pspec, GValue *value, gpoi
if (!G_VALUE_HOLDS (value, DBUS_TYPE_G_OBJECT_PATH))
return FALSE;
- priv->null_dhcp6_config = FALSE;
+ priv->got_dhcp6_config = TRUE;
- path = g_value_get_boxed (value);
- if (path) {
- if (!strcmp (path, "/"))
- priv->null_dhcp6_config = TRUE;
- else {
+ if (value) {
+ path = g_value_get_boxed (value);
+ if (path) {
config = NM_DHCP6_CONFIG (_nm_object_cache_get (path));
if (!config) {
connection = nm_object_get_connection (object);
@@ -260,6 +256,42 @@ demarshal_dhcp6_config (NMObject *object, GParamSpec *pspec, GValue *value, gpoi
return TRUE;
}
+static gboolean
+demarshal_active_connection (NMObject *object, GParamSpec *pspec, GValue *value, gpointer field)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (object);
+ const char *path;
+ NMActiveConnection *active = NULL;
+ DBusGConnection *connection;
+
+ if (!G_VALUE_HOLDS (value, DBUS_TYPE_G_OBJECT_PATH))
+ return FALSE;
+
+ priv->got_active_connection = TRUE;
+
+ if (value) {
+ path = g_value_get_boxed (value);
+ if (path) {
+ active = NM_ACTIVE_CONNECTION (_nm_object_cache_get (path));
+ if (!active) {
+ connection = nm_object_get_connection (object);
+ active = NM_ACTIVE_CONNECTION (nm_active_connection_new (connection, path));
+ }
+ }
+ }
+
+ if (priv->active_connection) {
+ g_object_unref (priv->active_connection);
+ priv->active_connection = NULL;
+ }
+
+ if (active)
+ priv->active_connection = active;
+
+ _nm_object_queue_notify (object, NM_DEVICE_ACTIVE_CONNECTION);
+ return TRUE;
+}
+
static void
register_for_property_changed (NMDevice *device)
{
@@ -276,6 +308,7 @@ register_for_property_changed (NMDevice *device)
{ NM_DEVICE_DHCP4_CONFIG, demarshal_dhcp4_config, &priv->dhcp4_config },
{ NM_DEVICE_IP6_CONFIG, demarshal_ip6_config, &priv->ip6_config },
{ NM_DEVICE_DHCP6_CONFIG, demarshal_dhcp6_config, &priv->dhcp6_config },
+ { NM_DEVICE_ACTIVE_CONNECTION,demarshal_active_connection, &priv->active_connection },
{ NULL },
};
@@ -365,6 +398,8 @@ dispose (GObject *object)
g_object_unref (priv->dhcp6_config);
if (priv->client)
g_object_unref (priv->client);
+ if (priv->active_connection)
+ g_object_unref (priv->active_connection);
G_OBJECT_CLASS (nm_device_parent_class)->dispose (object);
}
@@ -432,6 +467,9 @@ get_property (GObject *object,
case PROP_STATE:
g_value_set_uint (value, nm_device_get_state (device));
break;
+ case PROP_ACTIVE_CONNECTION:
+ g_value_set_object (value, nm_device_get_active_connection (device));
+ break;
case PROP_PRODUCT:
g_value_set_string (value, nm_device_get_product (device));
break;
@@ -656,6 +694,19 @@ nm_device_class_init (NMDeviceClass *device_class)
G_PARAM_READABLE));
/**
+ * NMDevice:active-connection:
+ *
+ * The #NMActiveConnection object that "owns" this device during activation.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_ACTIVE_CONNECTION,
+ g_param_spec_object (NM_DEVICE_ACTIVE_CONNECTION,
+ "ActiveConnection",
+ "Active Connection",
+ NM_TYPE_ACTIVE_CONNECTION,
+ G_PARAM_READABLE));
+
+ /**
* NMDevice:vendor:
*
* The vendor string of the device.
@@ -998,22 +1049,25 @@ nm_device_get_ip4_config (NMDevice *device)
NMDevicePrivate *priv;
char *path;
GValue value = { 0, };
+ GError *error = NULL;
g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
priv = NM_DEVICE_GET_PRIVATE (device);
- if (priv->ip4_config)
+ if (priv->got_ip4_config == TRUE)
return priv->ip4_config;
- if (priv->null_ip4_config)
- return NULL;
- path = _nm_object_get_object_path_property (NM_OBJECT (device), NM_DBUS_INTERFACE_DEVICE, "Ip4Config", NULL);
- if (path) {
+ path = _nm_object_get_object_path_property (NM_OBJECT (device),
+ NM_DBUS_INTERFACE_DEVICE,
+ "Ip4Config",
+ &error);
+ if (error == NULL) {
g_value_init (&value, DBUS_TYPE_G_OBJECT_PATH);
g_value_take_boxed (&value, path);
demarshal_ip4_config (NM_OBJECT (device), NULL, &value, &priv->ip4_config);
g_value_unset (&value);
}
+ g_clear_error (&error);
return priv->ip4_config;
}
@@ -1033,22 +1087,25 @@ nm_device_get_dhcp4_config (NMDevice *device)
NMDevicePrivate *priv;
char *path;
GValue value = { 0, };
+ GError *error = NULL;
g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
priv = NM_DEVICE_GET_PRIVATE (device);
- if (priv->dhcp4_config)
+ if (priv->got_dhcp4_config == TRUE)
return priv->dhcp4_config;
- if (priv->null_dhcp4_config)
- return NULL;
- path = _nm_object_get_object_path_property (NM_OBJECT (device), NM_DBUS_INTERFACE_DEVICE, "Dhcp4Config", NULL);
- if (path) {
+ path = _nm_object_get_object_path_property (NM_OBJECT (device),
+ NM_DBUS_INTERFACE_DEVICE,
+ "Dhcp4Config",
+ &error);
+ if (error == NULL) {
g_value_init (&value, DBUS_TYPE_G_OBJECT_PATH);
g_value_take_boxed (&value, path);
demarshal_dhcp4_config (NM_OBJECT (device), NULL, &value, &priv->dhcp4_config);
g_value_unset (&value);
}
+ g_clear_error (&error);
return priv->dhcp4_config;
}
@@ -1067,22 +1124,25 @@ nm_device_get_ip6_config (NMDevice *device)
NMDevicePrivate *priv;
char *path;
GValue value = { 0, };
+ GError *error = NULL;
g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
priv = NM_DEVICE_GET_PRIVATE (device);
- if (priv->ip6_config)
+ if (priv->got_ip6_config == TRUE)
return priv->ip6_config;
- if (priv->null_ip6_config)
- return NULL;
- path = _nm_object_get_object_path_property (NM_OBJECT (device), NM_DBUS_INTERFACE_DEVICE, "Ip6Config", NULL);
- if (path) {
+ path = _nm_object_get_object_path_property (NM_OBJECT (device),
+ NM_DBUS_INTERFACE_DEVICE,
+ "Ip6Config",
+ &error);
+ if (error == NULL) {
g_value_init (&value, DBUS_TYPE_G_OBJECT_PATH);
g_value_take_boxed (&value, path);
demarshal_ip6_config (NM_OBJECT (device), NULL, &value, &priv->ip6_config);
g_value_unset (&value);
}
+ g_clear_error (&error);
return priv->ip6_config;
}
@@ -1102,22 +1162,25 @@ nm_device_get_dhcp6_config (NMDevice *device)
NMDevicePrivate *priv;
char *path;
GValue value = { 0, };
+ GError *error = NULL;
g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
priv = NM_DEVICE_GET_PRIVATE (device);
- if (priv->dhcp6_config)
+ if (priv->got_dhcp6_config == TRUE)
return priv->dhcp6_config;
- if (priv->null_dhcp6_config)
- return NULL;
- path = _nm_object_get_object_path_property (NM_OBJECT (device), NM_DBUS_INTERFACE_DEVICE, "Dhcp6Config", NULL);
- if (path) {
+ path = _nm_object_get_object_path_property (NM_OBJECT (device),
+ NM_DBUS_INTERFACE_DEVICE,
+ "Dhcp6Config",
+ &error);
+ if (error == NULL) {
g_value_init (&value, DBUS_TYPE_G_OBJECT_PATH);
g_value_take_boxed (&value, path);
demarshal_dhcp6_config (NM_OBJECT (device), NULL, &value, &priv->dhcp6_config);
g_value_unset (&value);
}
+ g_clear_error (&error);
return priv->dhcp6_config;
}
@@ -1148,6 +1211,43 @@ nm_device_get_state (NMDevice *device)
return priv->state;
}
+/**
+ * nm_device_get_active_connection:
+ * @device: a #NMDevice
+ *
+ * Gets the #NMActiveConnection object which owns this device during activation.
+ *
+ * Returns: the #NMActiveConnection
+ **/
+NMActiveConnection *
+nm_device_get_active_connection (NMDevice *device)
+{
+ NMDevicePrivate *priv;
+ char *path;
+ GValue value = { 0, };
+ GError *error = NULL;
+
+ g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
+
+ priv = NM_DEVICE_GET_PRIVATE (device);
+ if (priv->got_active_connection == TRUE)
+ return priv->active_connection;
+
+ path = _nm_object_get_object_path_property (NM_OBJECT (device),
+ NM_DBUS_INTERFACE_DEVICE,
+ "ActiveConnection",
+ &error);
+ if (error == NULL) {
+ g_value_init (&value, DBUS_TYPE_G_OBJECT_PATH);
+ g_value_take_boxed (&value, path);
+ demarshal_active_connection (NM_OBJECT (device), NULL, &value, &priv->active_connection);
+ g_value_unset (&value);
+ }
+ g_clear_error (&error);
+
+ return priv->active_connection;
+}
+
/* From hostap, Copyright (c) 2002-2005, Jouni Malinen <jkmaline@cc.hut.fi> */
static int hex2num (char c)
@@ -1203,7 +1303,7 @@ get_decoded_property (GUdevDevice *device, const char *property)
}
static void
-nm_device_update_description (NMDevice *device)
+_device_update_description (NMDevice *device)
{
NMDevicePrivate *priv;
const char *subsys[3] = { "net", "tty", NULL };
@@ -1318,7 +1418,7 @@ nm_device_get_product (NMDevice *device)
priv = NM_DEVICE_GET_PRIVATE (device);
if (!priv->product)
- nm_device_update_description (device);
+ _device_update_description (device);
return priv->product;
}
@@ -1340,7 +1440,7 @@ nm_device_get_vendor (NMDevice *device)
priv = NM_DEVICE_GET_PRIVATE (device);
if (!priv->vendor)
- nm_device_update_description (device);
+ _device_update_description (device);
return priv->vendor;
}
diff --git a/libnm-glib/nm-device.h b/libnm-glib/nm-device.h
index 9d1c6bdb9..e21e71b12 100644
--- a/libnm-glib/nm-device.h
+++ b/libnm-glib/nm-device.h
@@ -34,6 +34,7 @@
#include "nm-ip6-config.h"
#include "nm-dhcp6-config.h"
#include "nm-connection.h"
+#include "nm-active-connection.h"
G_BEGIN_DECLS
@@ -57,6 +58,7 @@ G_BEGIN_DECLS
#define NM_DEVICE_IP6_CONFIG "ip6-config"
#define NM_DEVICE_DHCP6_CONFIG "dhcp6-config"
#define NM_DEVICE_STATE "state"
+#define NM_DEVICE_ACTIVE_CONNECTION "active-connection"
#define NM_DEVICE_VENDOR "vendor"
#define NM_DEVICE_PRODUCT "product"
@@ -102,6 +104,7 @@ NMDHCP4Config * nm_device_get_dhcp4_config (NMDevice *device);
NMIP6Config * nm_device_get_ip6_config (NMDevice *device);
NMDHCP6Config * nm_device_get_dhcp6_config (NMDevice *device);
NMDeviceState nm_device_get_state (NMDevice *device);
+NMActiveConnection * nm_device_get_active_connection(NMDevice *device);
const char * nm_device_get_product (NMDevice *device);
const char * nm_device_get_vendor (NMDevice *device);
diff --git a/libnm-glib/nm-object.c b/libnm-glib/nm-object.c
index 0b88be2cc..614f6afcc 100644
--- a/libnm-glib/nm-object.c
+++ b/libnm-glib/nm-object.c
@@ -333,6 +333,7 @@ handle_property_changed (gpointer key, gpointer data, gpointer user_data)
GParamSpec *pspec;
gboolean success = FALSE, found = FALSE;
GSList *iter;
+ GValue *value = data;
prop_name = wincaps_to_dash ((char *) key);
pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (G_OBJECT (self)), prop_name);
@@ -344,12 +345,19 @@ handle_property_changed (gpointer key, gpointer data, gpointer user_data)
goto out;
}
- /* Iterate through the object and it's parents to find the property */
+ /* Iterate through the object and its parents to find the property */
for (iter = priv->pcs; iter; iter = g_slist_next (iter)) {
pci = g_hash_table_lookup ((GHashTable *) iter->data, prop_name);
if (pci) {
found = TRUE;
- success = (*(pci->func)) (self, pspec, (GValue *) data, pci->field);
+
+ /* Handle NULL object paths */
+ if (G_VALUE_HOLDS (value, DBUS_TYPE_G_OBJECT_PATH)) {
+ if (g_strcmp0 (g_value_get_boxed (value), "/") == 0)
+ value = NULL;
+ }
+
+ success = (*(pci->func)) (self, pspec, value, pci->field);
if (success)
break;
}
@@ -453,6 +461,11 @@ _nm_object_demarshal_generic (NMObject *object,
char **param = (char **) field;
g_free (*param);
*param = g_strdup (g_value_get_boxed (value));
+ /* Handle "NULL" object paths */
+ if (g_strcmp0 (*param, "/") == 0) {
+ g_free (*param);
+ *param = NULL;
+ }
} else {
success = FALSE;
goto done;
@@ -558,13 +571,18 @@ _nm_object_get_string_property (NMObject *object,
GError **error)
{
char *str = NULL;
+ const char *tmp;
GValue value = {0,};
if (_nm_object_get_property (object, interface, prop_name, &value, error)) {
if (G_VALUE_HOLDS_STRING (&value))
str = g_strdup (g_value_get_string (&value));
- else if (G_VALUE_HOLDS (&value, DBUS_TYPE_G_OBJECT_PATH))
- str = g_strdup (g_value_get_boxed (&value));
+ else if (G_VALUE_HOLDS (&value, DBUS_TYPE_G_OBJECT_PATH)) {
+ tmp = g_value_get_boxed (&value);
+ /* Handle "NULL" object paths */
+ if (g_strcmp0 (tmp, "/") != 0)
+ str = g_strdup (tmp);
+ }
g_value_unset (&value);
}
@@ -578,10 +596,13 @@ _nm_object_get_object_path_property (NMObject *object,
GError **error)
{
char *path = NULL;
+ const char *tmp;
GValue value = {0,};
if (_nm_object_get_property (object, interface, prop_name, &value, error)) {
- path = g_strdup (g_value_get_boxed (&value));
+ tmp = g_value_get_boxed (&value);
+ if (g_strcmp0 (tmp, "/") != 0)
+ path = g_strdup (tmp);
g_value_unset (&value);
}
diff --git a/libnm-glib/nm-types.c b/libnm-glib/nm-types.c
index a2d6d2b4f..6d76787d0 100644
--- a/libnm-glib/nm-types.c
+++ b/libnm-glib/nm-types.c
@@ -31,7 +31,7 @@
#include "nm-setting-ip6-config.h"
static gpointer
-nm_ssid_copy (GByteArray *src)
+_nm_ssid_copy (GByteArray *src)
{
GByteArray *dest;
@@ -41,7 +41,7 @@ nm_ssid_copy (GByteArray *src)
}
static void
-nm_ssid_free (GByteArray *ssid)
+_nm_ssid_free (GByteArray *ssid)
{
g_byte_array_free (ssid, TRUE);
}
@@ -53,8 +53,8 @@ nm_ssid_get_type (void)
if (our_type == 0)
our_type = g_boxed_type_register_static (g_intern_static_string ("NMSsid"),
- (GBoxedCopyFunc) nm_ssid_copy,
- (GBoxedFreeFunc) nm_ssid_free);
+ (GBoxedCopyFunc) _nm_ssid_copy,
+ (GBoxedFreeFunc) _nm_ssid_free);
return our_type;
}
@@ -84,7 +84,7 @@ _nm_ssid_demarshal (GValue *value, GByteArray **dest)
/*****************************/
static gpointer
-nm_uint_array_copy (GArray *src)
+_nm_uint_array_copy (GArray *src)
{
GArray *dest;
@@ -94,7 +94,7 @@ nm_uint_array_copy (GArray *src)
}
static void
-nm_uint_array_free (GArray *array)
+_nm_uint_array_free (GArray *array)
{
g_array_free (array, TRUE);
}
@@ -106,8 +106,8 @@ nm_uint_array_get_type (void)
if (our_type == 0)
our_type = g_boxed_type_register_static (g_intern_static_string ("NMUintArray"),
- (GBoxedCopyFunc) nm_uint_array_copy,
- (GBoxedFreeFunc) nm_uint_array_free);
+ (GBoxedCopyFunc) _nm_uint_array_copy,
+ (GBoxedFreeFunc) _nm_uint_array_free);
return our_type;
}
@@ -136,7 +136,7 @@ _nm_uint_array_demarshal (GValue *value, GArray **dest)
/*****************************/
static gpointer
-nm_string_array_copy (GPtrArray *src)
+_nm_string_array_copy (GPtrArray *src)
{
GPtrArray *dest;
int i;
@@ -148,7 +148,7 @@ nm_string_array_copy (GPtrArray *src)
}
static void
-nm_string_array_free (GPtrArray *array)
+_nm_string_array_free (GPtrArray *array)
{
int i;
@@ -164,8 +164,8 @@ nm_string_array_get_type (void)
if (our_type == 0)
our_type = g_boxed_type_register_static (g_intern_static_string ("NMStringArray"),
- (GBoxedCopyFunc) nm_string_array_copy,
- (GBoxedFreeFunc) nm_string_array_free);
+ (GBoxedCopyFunc) _nm_string_array_copy,
+ (GBoxedFreeFunc) _nm_string_array_free);
return our_type;
}
@@ -197,7 +197,7 @@ _nm_string_array_demarshal (GValue *value, GPtrArray **dest)
/*****************************/
static gpointer
-nm_object_array_copy (GPtrArray *src)
+_nm_object_array_copy (GPtrArray *src)
{
GPtrArray *dest;
int i;
@@ -209,7 +209,7 @@ nm_object_array_copy (GPtrArray *src)
}
static void
-nm_object_array_free (GPtrArray *array)
+_nm_object_array_free (GPtrArray *array)
{
int i;
@@ -225,8 +225,8 @@ nm_object_array_get_type (void)
if (our_type == 0)
our_type = g_boxed_type_register_static (g_intern_static_string ("NMObjectArray"),
- (GBoxedCopyFunc) nm_object_array_copy,
- (GBoxedFreeFunc) nm_object_array_free);
+ (GBoxedCopyFunc) _nm_object_array_copy,
+ (GBoxedFreeFunc) _nm_object_array_free);
return our_type;
}
@@ -279,7 +279,7 @@ _nm_object_array_demarshal (GValue *value,
/*****************************/
static gpointer
-nm_ip6_address_object_array_copy (GPtrArray *src)
+_nm_ip6_address_object_array_copy (GPtrArray *src)
{
GPtrArray *dest;
int i;
@@ -291,7 +291,7 @@ nm_ip6_address_object_array_copy (GPtrArray *src)
}
static void
-nm_ip6_address_object_array_free (GPtrArray *array)
+_nm_ip6_address_object_array_free (GPtrArray *array)
{
int i;
@@ -307,15 +307,15 @@ nm_ip6_address_object_array_get_type (void)
if (our_type == 0)
our_type = g_boxed_type_register_static (g_intern_static_string ("NMIP6AddressObjectArray"),
- (GBoxedCopyFunc) nm_ip6_address_object_array_copy,
- (GBoxedFreeFunc) nm_ip6_address_object_array_free);
+ (GBoxedCopyFunc) _nm_ip6_address_object_array_copy,
+ (GBoxedFreeFunc) _nm_ip6_address_object_array_free);
return our_type;
}
/*****************************/
static gpointer
-nm_ip6_address_array_copy (GPtrArray *src)
+_nm_ip6_address_array_copy (GPtrArray *src)
{
GPtrArray *dest;
int i;
@@ -333,7 +333,7 @@ nm_ip6_address_array_copy (GPtrArray *src)
}
static void
-nm_ip6_address_array_free (GPtrArray *array)
+_nm_ip6_address_array_free (GPtrArray *array)
{
int i;
@@ -349,8 +349,8 @@ nm_ip6_address_array_get_type (void)
if (our_type == 0)
our_type = g_boxed_type_register_static (g_intern_static_string ("NMIP6AddressArray"),
- (GBoxedCopyFunc) nm_ip6_address_array_copy,
- (GBoxedFreeFunc) nm_ip6_address_array_free);
+ (GBoxedCopyFunc) _nm_ip6_address_array_copy,
+ (GBoxedFreeFunc) _nm_ip6_address_array_free);
return our_type;
}
@@ -388,7 +388,7 @@ _nm_ip6_address_array_demarshal (GValue *value, GSList **dest)
/*****************************/
static gpointer
-nm_ip6_route_object_array_copy (GPtrArray *src)
+_nm_ip6_route_object_array_copy (GPtrArray *src)
{
GPtrArray *dest;
int i;
@@ -400,7 +400,7 @@ nm_ip6_route_object_array_copy (GPtrArray *src)
}
static void
-nm_ip6_route_object_array_free (GPtrArray *array)
+_nm_ip6_route_object_array_free (GPtrArray *array)
{
int i;
@@ -416,8 +416,8 @@ nm_ip6_route_object_array_get_type (void)
if (our_type == 0)
our_type = g_boxed_type_register_static (g_intern_static_string ("NMIP6RouteObjectArray"),
- (GBoxedCopyFunc) nm_ip6_route_object_array_copy,
- (GBoxedFreeFunc) nm_ip6_route_object_array_free);
+ (GBoxedCopyFunc) _nm_ip6_route_object_array_copy,
+ (GBoxedFreeFunc) _nm_ip6_route_object_array_free);
return our_type;
}
diff --git a/libnm-util/crypto.c b/libnm-util/crypto.c
index 991b3c3e4..949ee8129 100644
--- a/libnm-util/crypto.c
+++ b/libnm-util/crypto.c
@@ -52,6 +52,12 @@ _nm_crypto_error_quark (void)
#define PEM_CERT_BEGIN "-----BEGIN CERTIFICATE-----"
#define PEM_CERT_END "-----END CERTIFICATE-----"
+#define PEM_PKCS8_ENC_KEY_BEGIN "-----BEGIN ENCRYPTED PRIVATE KEY-----"
+#define PEM_PKCS8_ENC_KEY_END "-----END ENCRYPTED PRIVATE KEY-----"
+
+#define PEM_PKCS8_DEC_KEY_BEGIN "-----BEGIN PRIVATE KEY-----"
+#define PEM_PKCS8_DEC_KEY_END "-----END PRIVATE KEY-----"
+
static gboolean
find_tag (const char *tag,
const GByteArray *array,
@@ -251,6 +257,71 @@ parse_error:
}
static GByteArray *
+parse_pkcs8_key_file (const GByteArray *contents,
+ gboolean *out_encrypted,
+ GError **error)
+{
+ GByteArray *key = NULL;
+ gsize start = 0, end = 0;
+ unsigned char *der = NULL;
+ guint8 save_end;
+ gsize length = 0;
+ const char *start_tag = NULL, *end_tag = NULL;
+ gboolean encrypted = FALSE;
+
+ /* Try encrypted first, decrypted next */
+ if (find_tag (PEM_PKCS8_ENC_KEY_BEGIN, contents, 0, &start)) {
+ start_tag = PEM_PKCS8_ENC_KEY_BEGIN;
+ end_tag = PEM_PKCS8_ENC_KEY_END;
+ encrypted = TRUE;
+ } else if (find_tag (PEM_PKCS8_DEC_KEY_BEGIN, contents, 0, &start)) {
+ start_tag = PEM_PKCS8_DEC_KEY_BEGIN;
+ end_tag = PEM_PKCS8_DEC_KEY_END;
+ encrypted = FALSE;
+ } else {
+ g_set_error_literal (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERR_FILE_FORMAT_INVALID,
+ _("Failed to find expected PKCS#8 start tag."));
+ return NULL;
+ }
+
+ start += strlen (start_tag);
+ if (!find_tag (end_tag, contents, start, &end)) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERR_FILE_FORMAT_INVALID,
+ _("Failed to find expected PKCS#8 end tag '%s'."),
+ end_tag);
+ return NULL;
+ }
+
+ /* g_base64_decode() wants a NULL-terminated string */
+ save_end = contents->data[end];
+ contents->data[end] = '\0';
+ der = g_base64_decode ((const char *) (contents->data + start), &length);
+ contents->data[end] = save_end;
+
+ if (der && length) {
+ key = g_byte_array_sized_new (length);
+ if (key) {
+ g_byte_array_append (key, der, length);
+ g_assert (key->len == length);
+ *out_encrypted = encrypted;
+ } else {
+ g_set_error_literal (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERR_OUT_OF_MEMORY,
+ _("Not enough memory to store private key data."));
+ }
+ } else {
+ g_set_error_literal (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERR_DECODE_FAILED,
+ _("Failed to decode PKCS#8 private key."));
+ }
+
+ g_free (der);
+ return key;
+}
+
+static GByteArray *
file_to_g_byte_array (const char *filename, GError **error)
{
char *contents;
@@ -654,6 +725,7 @@ crypto_verify_private_key_data (const GByteArray *contents,
GByteArray *tmp;
NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN;
NMCryptoKeyType ktype = NM_CRYPTO_KEY_TYPE_UNKNOWN;
+ gboolean is_encrypted = FALSE;
g_return_val_if_fail (contents != NULL, FALSE);
@@ -662,15 +734,29 @@ crypto_verify_private_key_data (const GByteArray *contents,
if (!password || crypto_verify_pkcs12 (contents, password, error))
format = NM_CRYPTO_FILE_FORMAT_PKCS12;
} else {
- tmp = crypto_decrypt_private_key_data (contents, password, &ktype, error);
+ /* Maybe it's PKCS#8 */
+ tmp = parse_pkcs8_key_file (contents, &is_encrypted, error);
+ if (tmp) {
+ if (crypto_verify_pkcs8 (tmp, is_encrypted, password, error))
+ format = NM_CRYPTO_FILE_FORMAT_RAW_KEY;
+ } else {
+ g_clear_error (error);
+
+ /* Or it's old-style OpenSSL */
+ tmp = crypto_decrypt_private_key_data (contents, password, &ktype, error);
+ if (tmp)
+ format = NM_CRYPTO_FILE_FORMAT_RAW_KEY;
+ else if (!password && (ktype != NM_CRYPTO_KEY_TYPE_UNKNOWN))
+ format = NM_CRYPTO_FILE_FORMAT_RAW_KEY;
+ }
+
if (tmp) {
/* Don't leave decrypted key data around */
memset (tmp->data, 0, tmp->len);
g_byte_array_free (tmp, TRUE);
- format = NM_CRYPTO_FILE_FORMAT_RAW_KEY;
- } else if (!password && (ktype != NM_CRYPTO_KEY_TYPE_UNKNOWN))
- format = NM_CRYPTO_FILE_FORMAT_RAW_KEY;
+ }
}
+
return format;
}
diff --git a/libnm-util/crypto.h b/libnm-util/crypto.h
index cdf053e72..482ed0876 100644
--- a/libnm-util/crypto.h
+++ b/libnm-util/crypto.h
@@ -136,4 +136,9 @@ gboolean crypto_verify_pkcs12 (const GByteArray *data,
const char *password,
GError **error);
+gboolean crypto_verify_pkcs8 (const GByteArray *data,
+ gboolean is_encrypted,
+ const char *password,
+ GError **error);
+
#endif /* __CRYPTO_H__ */
diff --git a/libnm-util/crypto_gnutls.c b/libnm-util/crypto_gnutls.c
index 583eb8be1..d82230b08 100644
--- a/libnm-util/crypto_gnutls.c
+++ b/libnm-util/crypto_gnutls.c
@@ -439,6 +439,57 @@ out:
}
gboolean
+crypto_verify_pkcs8 (const GByteArray *data,
+ gboolean is_encrypted,
+ const char *password,
+ GError **error)
+{
+ gnutls_x509_privkey_t p8;
+ gnutls_datum dt;
+ int err;
+
+ g_return_val_if_fail (data != NULL, FALSE);
+
+ dt.data = (unsigned char *) data->data;
+ dt.size = data->len;
+
+ err = gnutls_x509_privkey_init (&p8);
+ if (err < 0) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERR_DECODE_FAILED,
+ _("Couldn't initialize PKCS#8 decoder: %s"),
+ gnutls_strerror (err));
+ return FALSE;
+ }
+
+ err = gnutls_x509_privkey_import_pkcs8 (p8,
+ &dt,
+ GNUTLS_X509_FMT_DER,
+ is_encrypted ? password : NULL,
+ is_encrypted ? 0 : GNUTLS_PKCS_PLAIN);
+ gnutls_x509_privkey_deinit (p8);
+
+ if (err < 0) {
+ if (err == GNUTLS_E_UNKNOWN_CIPHER_TYPE) {
+ /* HACK: gnutls doesn't support all the cipher types that openssl
+ * can use with PKCS#8, so if we encounter one, we have to assume
+ * the given password works. gnutls needs to unsuckify, apparently.
+ * Specifically, by default openssl uses pbeWithMD5AndDES-CBC
+ * which gnutls does not support.
+ */
+ } else {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERR_FILE_FORMAT_INVALID,
+ _("Couldn't decode PKCS#8 file: %s"),
+ gnutls_strerror (err));
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+gboolean
crypto_randomize (void *buffer, gsize buffer_len, GError **error)
{
gcry_randomize (buffer, buffer_len, GCRY_STRONG_RANDOM);
diff --git a/libnm-util/crypto_nss.c b/libnm-util/crypto_nss.c
index ff12f9c50..5a7aa30ba 100644
--- a/libnm-util/crypto_nss.c
+++ b/libnm-util/crypto_nss.c
@@ -542,6 +542,21 @@ error:
}
gboolean
+crypto_verify_pkcs8 (const GByteArray *data,
+ gboolean is_encrypted,
+ const char *password,
+ GError **error)
+{
+ g_return_val_if_fail (data != NULL, FALSE);
+
+ /* NSS apparently doesn't do PKCS#8 natively, but you have to put the
+ * PKCS#8 key into a PKCS#12 file and import that?? So until we figure
+ * all that out, we can only assume the password is valid.
+ */
+ return TRUE;
+}
+
+gboolean
crypto_randomize (void *buffer, gsize buffer_len, GError **error)
{
SECStatus s;
diff --git a/libnm-util/libnm-util.ver b/libnm-util/libnm-util.ver
index bb988bc46..4ff0838e3 100644
--- a/libnm-util/libnm-util.ver
+++ b/libnm-util/libnm-util.ver
@@ -130,6 +130,7 @@ global:
nm_setting_802_1x_get_phase2_private_key_path;
nm_setting_802_1x_get_phase2_private_key_scheme;
nm_setting_802_1x_get_pin;
+ nm_setting_802_1x_get_pin_flags;
nm_setting_802_1x_get_private_key_blob;
nm_setting_802_1x_get_private_key_format;
nm_setting_802_1x_get_private_key_password;
diff --git a/libnm-util/nm-connection.c b/libnm-util/nm-connection.c
index cd9d53ff4..6e9f92b59 100644
--- a/libnm-util/nm-connection.c
+++ b/libnm-util/nm-connection.c
@@ -512,7 +512,7 @@ validate_permissions_type (GHashTable *hash, GError **error)
/**
* nm_connection_replace_settings:
* @connection: a #NMConnection
- * @new_settings: (element-type utf8 GHashTable<utf8,GValue>): a #GHashTable of settings
+ * @new_settings: (element-type utf8 GLib.HashTable): a #GHashTable of settings
* @error: location to store error, or %NULL
*
* Returns: %TRUE if the settings were valid and added to the connection, %FALSE
@@ -640,9 +640,10 @@ diff_one_connection (NMConnection *a,
* @a: a #NMConnection
* @b: a second #NMConnection to compare with the first
* @flags: compare flags, e.g. %NM_SETTING_COMPARE_FLAG_EXACT
- * @out_settings: (element-type utf8 GHashTable<utf8,guint32>): if the
+ * @out_settings: (element-type utf8 GLib.HashTable): if the
* connections differ, on return a hash table mapping setting names to
- * second-level GHashTable, which contains key names that differ
+ * second-level GHashTable (utf8 to guint32), which contains the key names that
+ * differ mapped to one or more of %NMSettingDiffResult as a bitfield
*
* Compares two #NMConnection objects for similarity, with comparison behavior
* modified by a set of flags. See nm_setting_compare() for a description of
@@ -968,7 +969,7 @@ nm_connection_clear_secrets (NMConnection *connection)
* are #GHashTables mapping string:GValue, each of which represents the
* properties of the #NMSetting object.
*
- * Returns: (transfer full) (element-type utf8 GHashTable<utf8,GValue>): a new
+ * Returns: (transfer full) (element-type utf8 GLib.HashTable): a new
* #GHashTable describing the connection, its settings, and each setting's
* properties. The caller owns the hash table and must unref the hash table
* with g_hash_table_unref() when it is no longer needed.
diff --git a/libnm-util/nm-param-spec-specialized.c b/libnm-util/nm-param-spec-specialized.c
index f5a362ce4..93623a118 100644
--- a/libnm-util/nm-param-spec-specialized.c
+++ b/libnm-util/nm-param-spec-specialized.c
@@ -37,9 +37,9 @@ struct _NMParamSpecSpecialized {
#include "nm-dbus-glib-types.h"
/***********************************************************/
-/* nm_gvalues_compare */
+/* _gvalues_compare */
-static gint nm_gvalues_compare (const GValue *value1, const GValue *value2);
+static gint _gvalues_compare (const GValue *value1, const GValue *value2);
static gboolean
type_is_fixed_size (GType type, gsize *tsize)
@@ -86,7 +86,7 @@ type_is_fixed_size (GType type, gsize *tsize)
#define FLOAT_FACTOR 0.00000001
static gint
-nm_gvalues_compare_fixed (const GValue *value1, const GValue *value2)
+_gvalues_compare_fixed (const GValue *value1, const GValue *value2)
{
int ret = 0;
@@ -177,7 +177,7 @@ nm_gvalues_compare_fixed (const GValue *value1, const GValue *value2)
}
static gint
-nm_gvalues_compare_string (const GValue *value1, const GValue *value2)
+_gvalues_compare_string (const GValue *value1, const GValue *value2)
{
const char *str1 = g_value_get_string (value1);
const char *str2 = g_value_get_string (value2);
@@ -194,7 +194,7 @@ nm_gvalues_compare_string (const GValue *value1, const GValue *value2)
}
static gint
-nm_gvalues_compare_strv (const GValue *value1, const GValue *value2)
+_gvalues_compare_strv (const GValue *value1, const GValue *value2)
{
char **strv1;
char **strv2;
@@ -221,7 +221,7 @@ nm_gvalues_compare_strv (const GValue *value1, const GValue *value2)
}
static void
-nm_gvalue_destroy (gpointer data)
+_gvalue_destroy (gpointer data)
{
GValue *value = (GValue *) data;
@@ -250,7 +250,7 @@ iterate_collection (const GValue *value, gpointer user_data)
}
static gint
-nm_gvalues_compare_collection (const GValue *value1, const GValue *value2)
+_gvalues_compare_collection (const GValue *value1, const GValue *value2)
{
gint ret;
guint len1;
@@ -287,12 +287,12 @@ nm_gvalues_compare_collection (const GValue *value1, const GValue *value2)
for (iter1 = list1, iter2 = list2, ret = 0;
ret == 0 && iter1 && iter2;
iter1 = iter1->next, iter2 = iter2->next)
- ret = nm_gvalues_compare ((GValue *) iter1->data, (GValue *) iter2->data);
+ ret = _gvalues_compare ((GValue *) iter1->data, (GValue *) iter2->data);
}
- g_slist_foreach (list1, (GFunc) nm_gvalue_destroy, NULL);
+ g_slist_foreach (list1, (GFunc) _gvalue_destroy, NULL);
g_slist_free (list1);
- g_slist_foreach (list2, (GFunc) nm_gvalue_destroy, NULL);
+ g_slist_foreach (list2, (GFunc) _gvalue_destroy, NULL);
g_slist_free (list2);
}
@@ -325,13 +325,13 @@ compare_one_map_item (gpointer key, gpointer val, gpointer user_data)
value2 = (GValue *) g_hash_table_lookup (info->hash2, key);
if (value2)
- info->ret = nm_gvalues_compare ((GValue *) val, value2);
+ info->ret = _gvalues_compare ((GValue *) val, value2);
else
info->ret = 1;
}
static gint
-nm_gvalues_compare_map (const GValue *value1, const GValue *value2)
+_gvalues_compare_map (const GValue *value1, const GValue *value2)
{
GHashTable *hash1 = NULL;
GHashTable *hash2 = NULL;
@@ -345,11 +345,11 @@ nm_gvalues_compare_map (const GValue *value1, const GValue *value2)
return 0;
}
- hash1 = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, nm_gvalue_destroy);
+ hash1 = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, _gvalue_destroy);
dbus_g_type_map_value_iterate (value1, iterate_map, &hash1);
len1 = g_hash_table_size (hash1);
- hash2 = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, nm_gvalue_destroy);
+ hash2 = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, _gvalue_destroy);
dbus_g_type_map_value_iterate (value2, iterate_map, &hash2);
len2 = g_hash_table_size (hash2);
@@ -491,10 +491,10 @@ nm_gvalue_ip6_route_compare (const GValue *value1, const GValue *value2)
}
static gint
-nm_gvalues_compare_struct (const GValue *value1, const GValue *value2)
+_gvalues_compare_struct (const GValue *value1, const GValue *value2)
{
/* value1 and value2 must contain the same type since
- * nm_gvalues_compare() enforced that already.
+ * _gvalues_compare() enforced that already.
*/
if (G_VALUE_HOLDS (value1, DBUS_TYPE_G_IP6_ADDRESS)) {
@@ -508,7 +508,7 @@ nm_gvalues_compare_struct (const GValue *value1, const GValue *value2)
}
gint
-nm_gvalues_compare (const GValue *value1, const GValue *value2)
+_gvalues_compare (const GValue *value1, const GValue *value2)
{
GType type1;
GType type2;
@@ -528,9 +528,9 @@ nm_gvalues_compare (const GValue *value1, const GValue *value2)
return type1 < type2 ? -1 : type1 > type2;
if (type_is_fixed_size (type1, NULL))
- ret = nm_gvalues_compare_fixed (value1, value2);
+ ret = _gvalues_compare_fixed (value1, value2);
else if (type1 == G_TYPE_STRING)
- ret = nm_gvalues_compare_string (value1, value2);
+ ret = _gvalues_compare_string (value1, value2);
else if (G_VALUE_HOLDS_BOXED (value1)) {
gpointer p1 = g_value_get_boxed (value1);
gpointer p2 = g_value_get_boxed (value2);
@@ -542,15 +542,15 @@ nm_gvalues_compare (const GValue *value1, const GValue *value2)
else if (!p2)
ret = -1; /* The comparision functions below don't handle NULLs */
else if (type1 == G_TYPE_STRV)
- ret = nm_gvalues_compare_strv (value1, value2);
+ ret = _gvalues_compare_strv (value1, value2);
else if (dbus_g_type_is_collection (type1))
- ret = nm_gvalues_compare_collection (value1, value2);
+ ret = _gvalues_compare_collection (value1, value2);
else if (dbus_g_type_is_map (type1))
- ret = nm_gvalues_compare_map (value1, value2);
+ ret = _gvalues_compare_map (value1, value2);
else if (dbus_g_type_is_struct (type1))
- ret = nm_gvalues_compare_struct (value1, value2);
+ ret = _gvalues_compare_struct (value1, value2);
else if (type1 == G_TYPE_VALUE)
- ret = nm_gvalues_compare ((GValue *) g_value_get_boxed (value1), (GValue *) g_value_get_boxed (value2));
+ ret = _gvalues_compare ((GValue *) g_value_get_boxed (value1), (GValue *) g_value_get_boxed (value2));
else {
g_warning ("Don't know how to compare boxed types '%s'", g_type_name (type1));
ret = value1 == value2;
@@ -596,7 +596,7 @@ param_specialized_values_cmp (GParamSpec *pspec,
const GValue *value1,
const GValue *value2)
{
- return nm_gvalues_compare (value1, value2);
+ return _gvalues_compare (value1, value2);
}
GType
@@ -656,13 +656,13 @@ compare_ints (void)
g_value_set_int (&value1, 5);
g_value_set_int (&value2, 5);
- g_print ("Comparing ints 5 and 5: %d\n", nm_gvalues_compare (&value1, &value2));
+ g_print ("Comparing ints 5 and 5: %d\n", _gvalues_compare (&value1, &value2));
g_value_set_int (&value2, 10);
- g_print ("Comparing ints 5 and 10: %d\n", nm_gvalues_compare (&value1, &value2));
+ g_print ("Comparing ints 5 and 10: %d\n", _gvalues_compare (&value1, &value2));
g_value_set_int (&value2, 1);
- g_print ("Comparing ints 5 and 1: %d\n", nm_gvalues_compare (&value1, &value2));
+ g_print ("Comparing ints 5 and 1: %d\n", _gvalues_compare (&value1, &value2));
}
static void
@@ -678,10 +678,10 @@ compare_strings (void)
g_value_set_string (&value1, str1);
g_value_set_string (&value2, str1);
- g_print ("Comparing identical strings: %d\n", nm_gvalues_compare (&value1, &value2));
+ g_print ("Comparing identical strings: %d\n", _gvalues_compare (&value1, &value2));
g_value_set_string (&value2, str2);
- g_print ("Comparing different strings: %d\n", nm_gvalues_compare (&value1, &value2));
+ g_print ("Comparing different strings: %d\n", _gvalues_compare (&value1, &value2));
}
static void
@@ -699,16 +699,16 @@ compare_strv (void)
g_value_set_boxed (&value1, strv1);
g_value_set_boxed (&value2, strv1);
- g_print ("Comparing identical strv's: %d\n", nm_gvalues_compare (&value1, &value2));
+ g_print ("Comparing identical strv's: %d\n", _gvalues_compare (&value1, &value2));
g_value_set_boxed (&value2, strv2);
- g_print ("Comparing different strv's: %d\n", nm_gvalues_compare (&value1, &value2));
+ g_print ("Comparing different strv's: %d\n", _gvalues_compare (&value1, &value2));
g_value_set_boxed (&value2, strv3);
- g_print ("Comparing different len (smaller) strv's: %d\n", nm_gvalues_compare (&value1, &value2));
+ g_print ("Comparing different len (smaller) strv's: %d\n", _gvalues_compare (&value1, &value2));
g_value_set_boxed (&value2, strv4);
- g_print ("Comparing different len (longer) strv's: %d\n", nm_gvalues_compare (&value1, &value2));
+ g_print ("Comparing different len (longer) strv's: %d\n", _gvalues_compare (&value1, &value2));
}
static void
@@ -734,16 +734,16 @@ compare_garrays (void)
g_value_set_boxed (&value1, array1);
g_value_set_boxed (&value2, array2);
- g_print ("Comparing identical arrays's: %d\n", nm_gvalues_compare (&value1, &value2));
+ g_print ("Comparing identical arrays's: %d\n", _gvalues_compare (&value1, &value2));
g_array_remove_index (array2, 0);
g_value_set_boxed (&value2, array2);
- g_print ("Comparing different length arrays's: %d\n", nm_gvalues_compare (&value1, &value2));
+ g_print ("Comparing different length arrays's: %d\n", _gvalues_compare (&value1, &value2));
i = 7;
g_array_prepend_val (array2, i);
g_value_set_boxed (&value2, array2);
- g_print ("Comparing different arrays's: %d\n", nm_gvalues_compare (&value1, &value2));
+ g_print ("Comparing different arrays's: %d\n", _gvalues_compare (&value1, &value2));
}
static void
@@ -768,15 +768,15 @@ compare_ptrarrays (void)
g_ptr_array_add (array2, "world");
g_value_set_boxed (&value2, array2);
- g_print ("Comparing identical ptr arrays's: %d\n", nm_gvalues_compare (&value1, &value2));
+ g_print ("Comparing identical ptr arrays's: %d\n", _gvalues_compare (&value1, &value2));
g_ptr_array_add (array2, "boo");
g_value_set_boxed (&value2, array2);
- g_print ("Comparing different len ptr arrays's: %d\n", nm_gvalues_compare (&value1, &value2));
+ g_print ("Comparing different len ptr arrays's: %d\n", _gvalues_compare (&value1, &value2));
g_ptr_array_add (array1, "booz");
g_value_set_boxed (&value1, array1);
- g_print ("Comparing different ptr arrays's: %d\n", nm_gvalues_compare (&value1, &value2));
+ g_print ("Comparing different ptr arrays's: %d\n", _gvalues_compare (&value1, &value2));
}
static void
@@ -801,15 +801,15 @@ compare_str_hash (void)
g_value_set_boxed (&value1, hash1);
g_value_set_boxed (&value2, hash2);
- g_print ("Comparing identical str hashes: %d\n", nm_gvalues_compare (&value1, &value2));
+ g_print ("Comparing identical str hashes: %d\n", _gvalues_compare (&value1, &value2));
g_hash_table_remove (hash2, "key2");
g_value_set_boxed (&value2, hash2);
- g_print ("Comparing different length str hashes: %d\n", nm_gvalues_compare (&value1, &value2));
+ g_print ("Comparing different length str hashes: %d\n", _gvalues_compare (&value1, &value2));
g_hash_table_insert (hash2, "key2", "moon");
g_value_set_boxed (&value2, hash2);
- g_print ("Comparing different str hashes: %d\n", nm_gvalues_compare (&value1, &value2));
+ g_print ("Comparing different str hashes: %d\n", _gvalues_compare (&value1, &value2));
}
static GValue *
@@ -858,15 +858,15 @@ compare_gvalue_hash (void)
g_value_set_boxed (&value1, hash1);
g_value_set_boxed (&value2, hash2);
- g_print ("Comparing identical gvalue hashes: %d\n", nm_gvalues_compare (&value1, &value2));
+ g_print ("Comparing identical gvalue hashes: %d\n", _gvalues_compare (&value1, &value2));
g_hash_table_remove (hash2, "key2");
g_value_set_boxed (&value2, hash2);
- g_print ("Comparing different length str hashes: %d\n", nm_gvalues_compare (&value1, &value2));
+ g_print ("Comparing different length str hashes: %d\n", _gvalues_compare (&value1, &value2));
g_hash_table_insert (hash2, "key2", str_to_gvalue ("moon"));
g_value_set_boxed (&value2, hash2);
- g_print ("Comparing different str hashes: %d\n", nm_gvalues_compare (&value1, &value2));
+ g_print ("Comparing different str hashes: %d\n", _gvalues_compare (&value1, &value2));
}
static void
@@ -939,15 +939,15 @@ compare_ip6_addresses (void)
g_value_set_boxed (&value1, array1);
g_value_set_boxed (&value2, array1);
- g_print ("Comparing identical IPv6 address structures: %d\n", nm_gvalues_compare (&value1, &value2));
+ g_print ("Comparing identical IPv6 address structures: %d\n", _gvalues_compare (&value1, &value2));
g_value_set_boxed (&value1, array1);
g_value_set_boxed (&value2, array2);
- g_print ("Comparing different IPv6 address structures: %d\n", nm_gvalues_compare (&value1, &value2));
+ g_print ("Comparing different IPv6 address structures: %d\n", _gvalues_compare (&value1, &value2));
g_value_set_boxed (&value1, array1);
g_value_set_boxed (&value2, array3);
- g_print ("Comparing different IPv6 address structures: %d\n", nm_gvalues_compare (&value1, &value2));
+ g_print ("Comparing different IPv6 address structures: %d\n", _gvalues_compare (&value1, &value2));
}
int
diff --git a/libnm-util/nm-setting-8021x.c b/libnm-util/nm-setting-8021x.c
index 4cd22016d..247504226 100644
--- a/libnm-util/nm-setting-8021x.c
+++ b/libnm-util/nm-setting-8021x.c
@@ -475,9 +475,9 @@ path_to_scheme_value (const char *path)
/**
* nm_setting_802_1x_set_ca_cert:
* @setting: the #NMSetting8021x
- * @value: when @scheme is set to either %NM_SETTING_802_1X_CK_SCHEME_PATH or
- * %NM_SETTING_802_1X_CK_SCHEME_BLOB, pass the path of the CA certificate file
- * (PEM or DER format). The path must be UTF-8 encoded; use
+ * @cert_path: when @scheme is set to either %NM_SETTING_802_1X_CK_SCHEME_PATH
+ * or %NM_SETTING_802_1X_CK_SCHEME_BLOB, pass the path of the CA certificate
+ * file (PEM or DER format). The path must be UTF-8 encoded; use
* g_filename_to_utf8() to convert if needed. Passing NULL with any @scheme
* clears the CA certificate.
* @scheme: desired storage scheme for the certificate
@@ -493,7 +493,7 @@ path_to_scheme_value (const char *path)
**/
gboolean
nm_setting_802_1x_set_ca_cert (NMSetting8021x *self,
- const char *value,
+ const char *cert_path,
NMSetting8021xCKScheme scheme,
NMSetting8021xCKFormat *out_format,
GError **error)
@@ -504,8 +504,8 @@ nm_setting_802_1x_set_ca_cert (NMSetting8021x *self,
g_return_val_if_fail (NM_IS_SETTING_802_1X (self), FALSE);
- if (value) {
- g_return_val_if_fail (g_utf8_validate (value, -1, NULL), FALSE);
+ if (cert_path) {
+ g_return_val_if_fail (g_utf8_validate (cert_path, -1, NULL), FALSE);
g_return_val_if_fail ( scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB
|| scheme == NM_SETTING_802_1X_CK_SCHEME_PATH,
FALSE);
@@ -522,10 +522,10 @@ nm_setting_802_1x_set_ca_cert (NMSetting8021x *self,
priv->ca_cert = NULL;
}
- if (!value)
+ if (!cert_path)
return TRUE;
- data = crypto_load_and_verify_certificate (value, &format, error);
+ data = crypto_load_and_verify_certificate (cert_path, &format, error);
if (data) {
/* wpa_supplicant can only use raw x509 CA certs */
switch (format) {
@@ -547,7 +547,7 @@ nm_setting_802_1x_set_ca_cert (NMSetting8021x *self,
if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB)
priv->ca_cert = data;
else if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
- priv->ca_cert = path_to_scheme_value (value);
+ priv->ca_cert = path_to_scheme_value (cert_path);
else
g_assert_not_reached ();
}
@@ -623,11 +623,11 @@ nm_setting_802_1x_get_client_cert_path (NMSetting8021x *setting)
/**
* nm_setting_802_1x_set_client_cert:
* @setting: the #NMSetting8021x
- * @value: when @scheme is set to either %NM_SETTING_802_1X_CK_SCHEME_PATH or
- * %NM_SETTING_802_1X_CK_SCHEME_BLOB, pass the path of the client certificate
- * file (PEM, DER, or PKCS#12 format). The path must be UTF-8 encoded; use
- * g_filename_to_utf8() to convert if needed. Passing NULL with any @scheme
- * clears the client certificate.
+ * @cert_path: when @scheme is set to either %NM_SETTING_802_1X_CK_SCHEME_PATH
+ * or %NM_SETTING_802_1X_CK_SCHEME_BLOB, pass the path of the client
+ * certificate file (PEM, DER, or PKCS#12 format). The path must be UTF-8
+ * encoded; use g_filename_to_utf8() to convert if needed. Passing NULL with
+ * any @scheme clears the client certificate.
* @scheme: desired storage scheme for the certificate
* @out_format: on successful return, the type of the certificate added
* @error: on unsuccessful return, an error
@@ -645,7 +645,7 @@ nm_setting_802_1x_get_client_cert_path (NMSetting8021x *setting)
**/
gboolean
nm_setting_802_1x_set_client_cert (NMSetting8021x *self,
- const char *value,
+ const char *cert_path,
NMSetting8021xCKScheme scheme,
NMSetting8021xCKFormat *out_format,
GError **error)
@@ -656,8 +656,8 @@ nm_setting_802_1x_set_client_cert (NMSetting8021x *self,
g_return_val_if_fail (NM_IS_SETTING_802_1X (self), FALSE);
- if (value) {
- g_return_val_if_fail (g_utf8_validate (value, -1, NULL), FALSE);
+ if (cert_path) {
+ g_return_val_if_fail (g_utf8_validate (cert_path, -1, NULL), FALSE);
g_return_val_if_fail ( scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB
|| scheme == NM_SETTING_802_1X_CK_SCHEME_PATH,
FALSE);
@@ -674,10 +674,10 @@ nm_setting_802_1x_set_client_cert (NMSetting8021x *self,
priv->client_cert = NULL;
}
- if (!value)
+ if (!cert_path)
return TRUE;
- data = crypto_load_and_verify_certificate (value, &format, error);
+ data = crypto_load_and_verify_certificate (cert_path, &format, error);
if (data) {
/* wpa_supplicant can only use raw x509 CA certs */
switch (format) {
@@ -703,7 +703,7 @@ nm_setting_802_1x_set_client_cert (NMSetting8021x *self,
if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB)
priv->client_cert = data;
else if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
- priv->client_cert = path_to_scheme_value (value);
+ priv->client_cert = path_to_scheme_value (cert_path);
else
g_assert_not_reached ();
}
@@ -886,8 +886,8 @@ nm_setting_802_1x_get_phase2_ca_cert_path (NMSetting8021x *setting)
/**
* nm_setting_802_1x_set_phase2_ca_cert:
* @setting: the #NMSetting8021x
- * @value: when @scheme is set to either %NM_SETTING_802_1X_CK_SCHEME_PATH or
- * %NM_SETTING_802_1X_CK_SCHEME_BLOB, pass the path of the "phase2" CA
+ * @cert_path: when @scheme is set to either %NM_SETTING_802_1X_CK_SCHEME_PATH
+ * or %NM_SETTING_802_1X_CK_SCHEME_BLOB, pass the path of the "phase2" CA
* certificate file (PEM or DER format). The path must be UTF-8 encoded; use
* g_filename_to_utf8() to convert if needed. Passing NULL with any @scheme
* clears the "phase2" CA certificate.
@@ -904,7 +904,7 @@ nm_setting_802_1x_get_phase2_ca_cert_path (NMSetting8021x *setting)
**/
gboolean
nm_setting_802_1x_set_phase2_ca_cert (NMSetting8021x *self,
- const char *value,
+ const char *cert_path,
NMSetting8021xCKScheme scheme,
NMSetting8021xCKFormat *out_format,
GError **error)
@@ -915,8 +915,8 @@ nm_setting_802_1x_set_phase2_ca_cert (NMSetting8021x *self,
g_return_val_if_fail (NM_IS_SETTING_802_1X (self), FALSE);
- if (value) {
- g_return_val_if_fail (g_utf8_validate (value, -1, NULL), FALSE);
+ if (cert_path) {
+ g_return_val_if_fail (g_utf8_validate (cert_path, -1, NULL), FALSE);
g_return_val_if_fail ( scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB
|| scheme == NM_SETTING_802_1X_CK_SCHEME_PATH,
FALSE);
@@ -933,10 +933,10 @@ nm_setting_802_1x_set_phase2_ca_cert (NMSetting8021x *self,
priv->phase2_ca_cert = NULL;
}
- if (!value)
+ if (!cert_path)
return TRUE;
- data = crypto_load_and_verify_certificate (value, &format, error);
+ data = crypto_load_and_verify_certificate (cert_path, &format, error);
if (data) {
/* wpa_supplicant can only use raw x509 CA certs */
switch (format) {
@@ -958,7 +958,7 @@ nm_setting_802_1x_set_phase2_ca_cert (NMSetting8021x *self,
if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB)
priv->phase2_ca_cert = data;
else if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
- priv->phase2_ca_cert = path_to_scheme_value (value);
+ priv->phase2_ca_cert = path_to_scheme_value (cert_path);
else
g_assert_not_reached ();
}
@@ -1036,8 +1036,8 @@ nm_setting_802_1x_get_phase2_client_cert_path (NMSetting8021x *setting)
/**
* nm_setting_802_1x_set_phase2_client_cert:
* @setting: the #NMSetting8021x
- * @value: when @scheme is set to either %NM_SETTING_802_1X_CK_SCHEME_PATH or
- * %NM_SETTING_802_1X_CK_SCHEME_BLOB, pass the path of the "phase2" client
+ * @cert_path: when @scheme is set to either %NM_SETTING_802_1X_CK_SCHEME_PATH
+ * or %NM_SETTING_802_1X_CK_SCHEME_BLOB, pass the path of the "phase2" client
* certificate file (PEM, DER, or PKCS#12 format). The path must be UTF-8
* encoded; use g_filename_to_utf8() to convert if needed. Passing NULL with
* any @scheme clears the "phase2" client certificate.
@@ -1058,7 +1058,7 @@ nm_setting_802_1x_get_phase2_client_cert_path (NMSetting8021x *setting)
**/
gboolean
nm_setting_802_1x_set_phase2_client_cert (NMSetting8021x *self,
- const char *value,
+ const char *cert_path,
NMSetting8021xCKScheme scheme,
NMSetting8021xCKFormat *out_format,
GError **error)
@@ -1069,8 +1069,8 @@ nm_setting_802_1x_set_phase2_client_cert (NMSetting8021x *self,
g_return_val_if_fail (NM_IS_SETTING_802_1X (self), FALSE);
- if (value) {
- g_return_val_if_fail (g_utf8_validate (value, -1, NULL), FALSE);
+ if (cert_path) {
+ g_return_val_if_fail (g_utf8_validate (cert_path, -1, NULL), FALSE);
g_return_val_if_fail ( scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB
|| scheme == NM_SETTING_802_1X_CK_SCHEME_PATH,
FALSE);
@@ -1087,10 +1087,10 @@ nm_setting_802_1x_set_phase2_client_cert (NMSetting8021x *self,
priv->phase2_client_cert = NULL;
}
- if (!value)
+ if (!cert_path)
return TRUE;
- data = crypto_load_and_verify_certificate (value, &format, error);
+ data = crypto_load_and_verify_certificate (cert_path, &format, error);
if (data) {
/* wpa_supplicant can only use raw x509 CA certs */
switch (format) {
@@ -1116,7 +1116,7 @@ nm_setting_802_1x_set_phase2_client_cert (NMSetting8021x *self,
if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB)
priv->phase2_client_cert = data;
else if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
- priv->phase2_client_cert = path_to_scheme_value (value);
+ priv->phase2_client_cert = path_to_scheme_value (cert_path);
else
g_assert_not_reached ();
}
@@ -1275,7 +1275,7 @@ file_to_byte_array (const char *filename)
/**
* nm_setting_802_1x_set_private_key:
* @setting: the #NMSetting8021x
- * @value: when @scheme is set to either %NM_SETTING_802_1X_CK_SCHEME_PATH or
+ * @key_path: when @scheme is set to either %NM_SETTING_802_1X_CK_SCHEME_PATH or
* %NM_SETTING_802_1X_CK_SCHEME_BLOB, pass the path of the private key file
* (PEM, DER, or PKCS#12 format). The path must be UTF-8 encoded; use
* g_filename_to_utf8() to convert if needed. Passing NULL with any @scheme
@@ -1313,7 +1313,7 @@ file_to_byte_array (const char *filename)
**/
gboolean
nm_setting_802_1x_set_private_key (NMSetting8021x *self,
- const char *value,
+ const char *key_path,
const char *password,
NMSetting8021xCKScheme scheme,
NMSetting8021xCKFormat *out_format,
@@ -1324,8 +1324,8 @@ nm_setting_802_1x_set_private_key (NMSetting8021x *self,
g_return_val_if_fail (NM_IS_SETTING_802_1X (self), FALSE);
- if (value) {
- g_return_val_if_fail (g_utf8_validate (value, -1, NULL), FALSE);
+ if (key_path) {
+ g_return_val_if_fail (g_utf8_validate (key_path, -1, NULL), FALSE);
g_return_val_if_fail ( scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB
|| scheme == NM_SETTING_802_1X_CK_SCHEME_PATH,
FALSE);
@@ -1337,8 +1337,8 @@ nm_setting_802_1x_set_private_key (NMSetting8021x *self,
/* Ensure the private key is a recognized format and if the password was
* given, that it decrypts the private key.
*/
- if (value) {
- format = crypto_verify_private_key (value, password, NULL);
+ if (key_path) {
+ format = crypto_verify_private_key (key_path, password, NULL);
if (format == NM_CRYPTO_FILE_FORMAT_UNKNOWN) {
g_set_error (error,
NM_SETTING_802_1X_ERROR,
@@ -1361,16 +1361,16 @@ nm_setting_802_1x_set_private_key (NMSetting8021x *self,
g_free (priv->private_key_password);
priv->private_key_password = NULL;
- if (value == NULL)
+ if (key_path == NULL)
return TRUE;
priv->private_key_password = g_strdup (password);
if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) {
/* Shouldn't fail this since we just verified the private key above */
- priv->private_key = file_to_byte_array (value);
+ priv->private_key = file_to_byte_array (key_path);
g_assert (priv->private_key);
} else if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
- priv->private_key = path_to_scheme_value (value);
+ priv->private_key = path_to_scheme_value (key_path);
else
g_assert_not_reached ();
@@ -1570,7 +1570,7 @@ nm_setting_802_1x_get_phase2_private_key_path (NMSetting8021x *setting)
/**
* nm_setting_802_1x_set_phase2_private_key:
* @setting: the #NMSetting8021x
- * @value: when @scheme is set to either %NM_SETTING_802_1X_CK_SCHEME_PATH or
+ * @key_path: when @scheme is set to either %NM_SETTING_802_1X_CK_SCHEME_PATH or
* %NM_SETTING_802_1X_CK_SCHEME_BLOB, pass the path of the "phase2" private
* key file (PEM, DER, or PKCS#12 format). The path must be UTF-8 encoded;
* use g_filename_to_utf8() to convert if needed. Passing NULL with any
@@ -1608,7 +1608,7 @@ nm_setting_802_1x_get_phase2_private_key_path (NMSetting8021x *setting)
**/
gboolean
nm_setting_802_1x_set_phase2_private_key (NMSetting8021x *self,
- const char *value,
+ const char *key_path,
const char *password,
NMSetting8021xCKScheme scheme,
NMSetting8021xCKFormat *out_format,
@@ -1619,8 +1619,8 @@ nm_setting_802_1x_set_phase2_private_key (NMSetting8021x *self,
g_return_val_if_fail (NM_IS_SETTING_802_1X (self), FALSE);
- if (value) {
- g_return_val_if_fail (g_utf8_validate (value, -1, NULL), FALSE);
+ if (key_path) {
+ g_return_val_if_fail (g_utf8_validate (key_path, -1, NULL), FALSE);
g_return_val_if_fail ( scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB
|| scheme == NM_SETTING_802_1X_CK_SCHEME_PATH,
FALSE);
@@ -1632,8 +1632,8 @@ nm_setting_802_1x_set_phase2_private_key (NMSetting8021x *self,
/* Ensure the private key is a recognized format and if the password was
* given, that it decrypts the private key.
*/
- if (value) {
- format = crypto_verify_private_key (value, password, NULL);
+ if (key_path) {
+ format = crypto_verify_private_key (key_path, password, NULL);
if (format == NM_CRYPTO_FILE_FORMAT_UNKNOWN) {
g_set_error (error,
NM_SETTING_802_1X_ERROR,
@@ -1656,16 +1656,16 @@ nm_setting_802_1x_set_phase2_private_key (NMSetting8021x *self,
g_free (priv->phase2_private_key_password);
priv->phase2_private_key_password = NULL;
- if (value == NULL)
+ if (key_path == NULL)
return TRUE;
priv->phase2_private_key_password = g_strdup (password);
if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) {
/* Shouldn't fail this since we just verified the private key above */
- priv->phase2_private_key = file_to_byte_array (value);
+ priv->phase2_private_key = file_to_byte_array (key_path);
g_assert (priv->phase2_private_key);
} else if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
- priv->phase2_private_key = path_to_scheme_value (value);
+ priv->phase2_private_key = path_to_scheme_value (key_path);
else
g_assert_not_reached ();
diff --git a/libnm-util/nm-setting-8021x.h b/libnm-util/nm-setting-8021x.h
index bf587a904..f3e61e55e 100644
--- a/libnm-util/nm-setting-8021x.h
+++ b/libnm-util/nm-setting-8021x.h
@@ -174,7 +174,7 @@ NMSetting8021xCKScheme nm_setting_802_1x_get_ca_cert_scheme (NMSetting8
const GByteArray * nm_setting_802_1x_get_ca_cert_blob (NMSetting8021x *setting);
const char * nm_setting_802_1x_get_ca_cert_path (NMSetting8021x *setting);
gboolean nm_setting_802_1x_set_ca_cert (NMSetting8021x *setting,
- const char *value,
+ const char *cert_path,
NMSetting8021xCKScheme scheme,
NMSetting8021xCKFormat *out_format,
GError **error);
@@ -183,7 +183,7 @@ NMSetting8021xCKScheme nm_setting_802_1x_get_client_cert_scheme (NMSetting8
const GByteArray * nm_setting_802_1x_get_client_cert_blob (NMSetting8021x *setting);
const char * nm_setting_802_1x_get_client_cert_path (NMSetting8021x *setting);
gboolean nm_setting_802_1x_set_client_cert (NMSetting8021x *setting,
- const char *value,
+ const char *cert_path,
NMSetting8021xCKScheme scheme,
NMSetting8021xCKFormat *out_format,
GError **error);
@@ -202,7 +202,7 @@ NMSetting8021xCKScheme nm_setting_802_1x_get_phase2_ca_cert_scheme (NMSetting8
const GByteArray * nm_setting_802_1x_get_phase2_ca_cert_blob (NMSetting8021x *setting);
const char * nm_setting_802_1x_get_phase2_ca_cert_path (NMSetting8021x *setting);
gboolean nm_setting_802_1x_set_phase2_ca_cert (NMSetting8021x *setting,
- const char *value,
+ const char *cert_path,
NMSetting8021xCKScheme scheme,
NMSetting8021xCKFormat *out_format,
GError **error);
@@ -211,7 +211,7 @@ NMSetting8021xCKScheme nm_setting_802_1x_get_phase2_client_cert_scheme (NMSett
const GByteArray * nm_setting_802_1x_get_phase2_client_cert_blob (NMSetting8021x *setting);
const char * nm_setting_802_1x_get_phase2_client_cert_path (NMSetting8021x *setting);
gboolean nm_setting_802_1x_set_phase2_client_cert (NMSetting8021x *setting,
- const char *value,
+ const char *cert_path,
NMSetting8021xCKScheme scheme,
NMSetting8021xCKFormat *out_format,
GError **error);
@@ -226,7 +226,7 @@ NMSetting8021xCKScheme nm_setting_802_1x_get_private_key_scheme (NMSett
const GByteArray * nm_setting_802_1x_get_private_key_blob (NMSetting8021x *setting);
const char * nm_setting_802_1x_get_private_key_path (NMSetting8021x *setting);
gboolean nm_setting_802_1x_set_private_key (NMSetting8021x *setting,
- const char *value,
+ const char *key_path,
const char *password,
NMSetting8021xCKScheme scheme,
NMSetting8021xCKFormat *out_format,
@@ -240,7 +240,7 @@ NMSetting8021xCKScheme nm_setting_802_1x_get_phase2_private_key_scheme (NMSett
const GByteArray * nm_setting_802_1x_get_phase2_private_key_blob (NMSetting8021x *setting);
const char * nm_setting_802_1x_get_phase2_private_key_path (NMSetting8021x *setting);
gboolean nm_setting_802_1x_set_phase2_private_key (NMSetting8021x *setting,
- const char *value,
+ const char *key_path,
const char *password,
NMSetting8021xCKScheme scheme,
NMSetting8021xCKFormat *out_format,
diff --git a/libnm-util/nm-setting-gsm.c b/libnm-util/nm-setting-gsm.c
index a1b7a6d3e..0ece448b9 100644
--- a/libnm-util/nm-setting-gsm.c
+++ b/libnm-util/nm-setting-gsm.c
@@ -241,10 +241,28 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
}
/* APNs roughly follow the same rules as DNS domain names. Allowed
- * characters are a-z, 0-9, . and -. GSM 03.60 Section 14.9.
+ * characters are a-z, 0-9, . and -. GSM 03.03 Section 9.1 states:
+ *
+ * The syntax of the APN shall follow the Name Syntax defined in
+ * RFC 2181 [14] and RFC 1035 [15]. The APN consists of one or
+ * more labels. Each label is coded as one octet length field
+ * followed by that number of octets coded as 8 bit ASCII characters.
+ * Following RFC 1035 [15] the labels should consist only of the
+ * alphabetic characters (A-Z and a-z), digits (0-9) and the
+ * dash (-). The case of alphabetic characters is not significant.
+ *
+ * A dot (.) is commonly used to separate parts of the APN, and
+ * apparently the underscore (_) is used as well. RFC 2181 indicates
+ * that no restrictions of any kind are placed on DNS labels, and thus
+ * it would appear that none are placed on APNs either, but many modems
+ * and networks will fail to accept APNs that include odd characters
+ * like space ( ) and such.
*/
for (i = 0; i < apn_len; i++) {
- if (!isalnum (priv->apn[i]) && (priv->apn[i] != '.') && (priv->apn[i] != '-')) {
+ if ( !isalnum (priv->apn[i])
+ && (priv->apn[i] != '.')
+ && (priv->apn[i] != '_')
+ && (priv->apn[i] != '-')) {
g_set_error (error,
NM_SETTING_GSM_ERROR,
NM_SETTING_GSM_ERROR_INVALID_PROPERTY,
diff --git a/libnm-util/nm-setting-vpn.c b/libnm-util/nm-setting-vpn.c
index d3aac0304..23f073831 100644
--- a/libnm-util/nm-setting-vpn.c
+++ b/libnm-util/nm-setting-vpn.c
@@ -161,23 +161,55 @@ nm_setting_vpn_remove_data_item (NMSettingVPN *setting, const char *key)
g_hash_table_remove (NM_SETTING_VPN_GET_PRIVATE (setting)->data, key);
}
+static void
+foreach_item_helper (GHashTable *hash,
+ NMVPNIterFunc func,
+ gpointer user_data)
+{
+ GList *keys, *liter;
+ GSList *copied = NULL, *siter;
+
+ g_return_if_fail (hash != NULL);
+
+ /* Grab keys and copy them so that the callback func can modify
+ * the hash table items if it wants to.
+ */
+ keys = g_hash_table_get_keys (hash);
+ for (liter = keys; liter; liter = g_list_next (liter))
+ copied = g_slist_prepend (copied, g_strdup (liter->data));
+ copied = g_slist_reverse (copied);
+ g_list_free (keys);
+
+ for (siter = copied; siter; siter = g_slist_next (siter)) {
+ gpointer value;
+
+ value = g_hash_table_lookup (hash, siter->data);
+ func (siter->data, value, user_data);
+ }
+
+ g_slist_foreach (copied, (GFunc) g_free, NULL);
+ g_slist_free (copied);
+}
+
/**
* nm_setting_vpn_foreach_data_item:
* @setting: a #NMSettingVPN
* @func: (scope call): an user provided function
* @user_data: data to be passed to @func
*
- * Iterates all data items stored in this setting
+ * Iterates all data items stored in this setting. It is safe to add, remove,
+ * and modify data items inside @func, though any additions or removals made
+ * during iteration will not be part of the iteration.
*/
void
nm_setting_vpn_foreach_data_item (NMSettingVPN *setting,
NMVPNIterFunc func,
gpointer user_data)
{
+ g_return_if_fail (setting != NULL);
g_return_if_fail (NM_IS_SETTING_VPN (setting));
- g_hash_table_foreach (NM_SETTING_VPN_GET_PRIVATE (setting)->data,
- (GHFunc) func, user_data);
+ foreach_item_helper (NM_SETTING_VPN_GET_PRIVATE (setting)->data, func, user_data);
}
void
@@ -217,17 +249,19 @@ nm_setting_vpn_remove_secret (NMSettingVPN *setting, const char *key)
* @func: (scope call): an user provided function
* @user_data: data to be passed to @func
*
- * Iterates all secrets stored in this setting.
+ * Iterates all secrets stored in this setting. It is safe to add, remove,
+ * and modify secrets inside @func, though any additions or removals made during
+ * iteration will not be part of the iteration.
*/
void
nm_setting_vpn_foreach_secret (NMSettingVPN *setting,
NMVPNIterFunc func,
gpointer user_data)
{
+ g_return_if_fail (setting != NULL);
g_return_if_fail (NM_IS_SETTING_VPN (setting));
- g_hash_table_foreach (NM_SETTING_VPN_GET_PRIVATE (setting)->secrets,
- (GHFunc) func, user_data);
+ foreach_item_helper (NM_SETTING_VPN_GET_PRIVATE (setting)->secrets, func, user_data);
}
static gboolean
@@ -377,7 +411,8 @@ get_secret_flags (NMSetting *setting,
errno = 0;
tmp = strtoul ((const char *) val, NULL, 10);
if ((errno == 0) && (tmp <= NM_SETTING_SECRET_FLAGS_ALL)) {
- *out_flags = (guint32) tmp;
+ if (out_flags)
+ *out_flags = (guint32) tmp;
success = TRUE;
} else {
g_set_error (error,
diff --git a/libnm-util/nm-setting.c b/libnm-util/nm-setting.c
index 0f8b7d4f2..3fe90db29 100644
--- a/libnm-util/nm-setting.c
+++ b/libnm-util/nm-setting.c
@@ -112,9 +112,10 @@ destroy_gvalue (gpointer data)
*
* Converts the #NMSetting into a #GHashTable mapping each setting property
* name to a GValue describing that property, suitable for marshalling over
- * D-Bus or serializing. The mapping is string:GValue.
+ * D-Bus or serializing. The mapping is string to GValue.
*
- * Returns: (transfer full) (element-type utf8 GObject.Value): a new #GHashTable describing the setting's properties
+ * Returns: (transfer full) (element-type utf8 GObject.Value): a new #GHashTable
+ * describing the setting's properties
**/
GHashTable *
nm_setting_to_hash (NMSetting *setting, NMSettingHashFlags flags)
@@ -209,8 +210,8 @@ one_property_cb (gpointer key, gpointer val, gpointer user_data)
/**
* nm_setting_new_from_hash:
* @setting_type: the #NMSetting type which the hash contains properties for
- * @hash: the #GHashTable containing a string:GValue mapping of properties
- * that apply to the setting
+ * @hash: (element-type utf8 GObject.Value): the #GHashTable containing a
+ * string to GValue mapping of properties that apply to the setting
*
* Creates a new #NMSetting object and populates that object with the properties
* contained in the hash table, using each hash key as the property to set,
@@ -223,8 +224,7 @@ one_property_cb (gpointer key, gpointer val, gpointer user_data)
* hash table, or NULL on failure
**/
NMSetting *
-nm_setting_new_from_hash (GType setting_type,
- GHashTable *hash)
+nm_setting_new_from_hash (GType setting_type, GHashTable *hash)
{
NMSetting *setting;
NMSettingFromHashInfo info;
@@ -421,10 +421,11 @@ nm_setting_compare (NMSetting *a,
* @flags: compare flags, e.g. %NM_SETTING_COMPARE_FLAG_EXACT
* @invert_results: this parameter is used internally by libnm-util and should
* be set to %FALSE. If %TRUE inverts the meaning of the #NMSettingDiffResult.
- * @results: (element-type utf8 guint32): if the settings differ, on return a
- * hash table mapping the differing keys to one or more #NMSettingDiffResult
- * values OR-ed together. If the settings do not differ, any hash table passed
- * in is unmodified. If no hash table is passed in, a new one is created.
+ * @results: (inout) (transfer full) (element-type utf8 guint32): if the
+ * settings differ, on return a hash table mapping the differing keys to one or
+ * more %NMSettingDiffResult values OR-ed together. If the settings do not
+ * differ, any hash table passed in is unmodified. If no hash table is passed
+ * in and the settings differ, a new one is created and returned.
*
* Compares two #NMSetting objects for similarity, with comparison behavior
* modified by a set of flags. See the documentation for #NMSettingCompareFlags
@@ -661,8 +662,8 @@ update_one_secret (NMSetting *setting, const char *key, GValue *value, GError **
/**
* nm_setting_update_secrets:
* @setting: the #NMSetting
- * @secrets: a #GHashTable mapping string:#GValue of setting property names and
- * secrets
+ * @secrets: (element-type utf8 GObject.Value): a #GHashTable mapping
+ * string to #GValue of setting property names and secrets
* @error: location to store error, or %NULL
*
* Update the setting's secrets, given a hash table of secrets intended for that
diff --git a/libnm-util/nm-utils.c b/libnm-util/nm-utils.c
index bac7fda39..449deb1cc 100644
--- a/libnm-util/nm-utils.c
+++ b/libnm-util/nm-utils.c
@@ -534,7 +534,7 @@ _nm_utils_string_slist_validate (GSList *list, const char **valid_values)
}
static void
-nm_utils_convert_strv_to_slist (const GValue *src_value, GValue *dest_value)
+_nm_utils_convert_strv_to_slist (const GValue *src_value, GValue *dest_value)
{
char **str;
GSList *list = NULL;
@@ -551,7 +551,7 @@ nm_utils_convert_strv_to_slist (const GValue *src_value, GValue *dest_value)
}
static void
-nm_utils_convert_strv_to_ptrarray (const GValue *src_value, GValue *dest_value)
+_nm_utils_convert_strv_to_ptrarray (const GValue *src_value, GValue *dest_value)
{
char **str;
GPtrArray *array = NULL;
@@ -569,7 +569,7 @@ nm_utils_convert_strv_to_ptrarray (const GValue *src_value, GValue *dest_value)
}
static void
-nm_utils_convert_strv_to_string (const GValue *src_value, GValue *dest_value)
+_nm_utils_convert_strv_to_string (const GValue *src_value, GValue *dest_value)
{
GSList *strings;
GString *printable;
@@ -595,7 +595,7 @@ nm_utils_convert_strv_to_string (const GValue *src_value, GValue *dest_value)
}
static void
-nm_utils_convert_string_array_to_string (const GValue *src_value, GValue *dest_value)
+_nm_utils_convert_string_array_to_string (const GValue *src_value, GValue *dest_value)
{
GPtrArray *strings;
GString *printable;
@@ -621,7 +621,7 @@ nm_utils_convert_string_array_to_string (const GValue *src_value, GValue *dest_v
}
static void
-nm_utils_convert_uint_array_to_string (const GValue *src_value, GValue *dest_value)
+_nm_utils_convert_uint_array_to_string (const GValue *src_value, GValue *dest_value)
{
GArray *array;
GString *printable;
@@ -653,7 +653,7 @@ nm_utils_convert_uint_array_to_string (const GValue *src_value, GValue *dest_val
}
static void
-nm_utils_convert_ip4_addr_route_struct_array_to_string (const GValue *src_value, GValue *dest_value)
+_nm_utils_convert_ip4_addr_route_struct_array_to_string (const GValue *src_value, GValue *dest_value)
{
GPtrArray *ptr_array;
GString *printable;
@@ -738,7 +738,7 @@ convert_one_gvalue_hash_entry (gpointer key, gpointer value, gpointer user_data)
}
static void
-nm_utils_convert_gvalue_hash_to_string (const GValue *src_value, GValue *dest_value)
+_nm_utils_convert_gvalue_hash_to_string (const GValue *src_value, GValue *dest_value)
{
GHashTable *hash;
GString *printable;
@@ -764,7 +764,7 @@ convert_one_string_hash_entry (gpointer key, gpointer value, gpointer user_data)
}
static void
-nm_utils_convert_string_hash_to_string (const GValue *src_value, GValue *dest_value)
+_nm_utils_convert_string_hash_to_string (const GValue *src_value, GValue *dest_value)
{
GHashTable *hash;
GString *printable;
@@ -783,7 +783,7 @@ nm_utils_convert_string_hash_to_string (const GValue *src_value, GValue *dest_va
}
static void
-nm_utils_convert_byte_array_to_string (const GValue *src_value, GValue *dest_value)
+_nm_utils_convert_byte_array_to_string (const GValue *src_value, GValue *dest_value)
{
GArray *array;
GString *printable;
@@ -811,7 +811,7 @@ nm_utils_convert_byte_array_to_string (const GValue *src_value, GValue *dest_val
}
static gboolean
-nm_utils_inet6_ntop (struct in6_addr *addr, char *buf)
+_nm_utils_inet6_ntop (struct in6_addr *addr, char *buf)
{
if (!inet_ntop (AF_INET6, addr, buf, INET6_ADDRSTRLEN)) {
int i;
@@ -828,7 +828,7 @@ nm_utils_inet6_ntop (struct in6_addr *addr, char *buf)
}
static void
-nm_utils_convert_ip6_dns_array_to_string (const GValue *src_value, GValue *dest_value)
+_nm_utils_convert_ip6_dns_array_to_string (const GValue *src_value, GValue *dest_value)
{
GPtrArray *ptr_array;
GString *printable;
@@ -854,7 +854,7 @@ nm_utils_convert_ip6_dns_array_to_string (const GValue *src_value, GValue *dest_
}
addr = (struct in6_addr *) bytearray->data;
memset (buf, 0, sizeof (buf));
- nm_utils_inet6_ntop (addr, buf);
+ _nm_utils_inet6_ntop (addr, buf);
g_string_append_printf (printable, "%s", buf);
}
g_string_append_c (printable, ']');
@@ -864,7 +864,7 @@ nm_utils_convert_ip6_dns_array_to_string (const GValue *src_value, GValue *dest_
}
static void
-nm_utils_convert_ip6_addr_struct_array_to_string (const GValue *src_value, GValue *dest_value)
+_nm_utils_convert_ip6_addr_struct_array_to_string (const GValue *src_value, GValue *dest_value)
{
GPtrArray *ptr_array;
GString *printable;
@@ -905,7 +905,7 @@ nm_utils_convert_ip6_addr_struct_array_to_string (const GValue *src_value, GValu
}
addr = (struct in6_addr *) ba_addr->data;
memset (buf, 0, sizeof (buf));
- nm_utils_inet6_ntop (addr, buf);
+ _nm_utils_inet6_ntop (addr, buf);
g_string_append_printf (printable, "ip = %s", buf);
g_string_append (printable, ", ");
@@ -928,7 +928,7 @@ nm_utils_convert_ip6_addr_struct_array_to_string (const GValue *src_value, GValu
}
addr = (struct in6_addr *) ba_addr->data;
memset (buf, 0, sizeof (buf));
- nm_utils_inet6_ntop (addr, buf);
+ _nm_utils_inet6_ntop (addr, buf);
g_string_append_printf (printable, "gw = %s", buf);
g_string_append (printable, " }");
}
@@ -939,7 +939,7 @@ nm_utils_convert_ip6_addr_struct_array_to_string (const GValue *src_value, GValu
}
static void
-nm_utils_convert_ip6_route_struct_array_to_string (const GValue *src_value, GValue *dest_value)
+_nm_utils_convert_ip6_route_struct_array_to_string (const GValue *src_value, GValue *dest_value)
{
GPtrArray *ptr_array;
GString *printable;
@@ -981,7 +981,7 @@ nm_utils_convert_ip6_route_struct_array_to_string (const GValue *src_value, GVal
}
addr = (struct in6_addr *) ba_addr->data;
memset (buf, 0, sizeof (buf));
- nm_utils_inet6_ntop (addr, buf);
+ _nm_utils_inet6_ntop (addr, buf);
g_string_append_printf (printable, "dst = %s", buf);
g_string_append (printable, ", ");
@@ -1004,7 +1004,7 @@ nm_utils_convert_ip6_route_struct_array_to_string (const GValue *src_value, GVal
}
addr = (struct in6_addr *) ba_addr->data;
memset (buf, 0, sizeof (buf));
- nm_utils_inet6_ntop (addr, buf);
+ _nm_utils_inet6_ntop (addr, buf);
g_string_append_printf (printable, "nh = %s", buf);
g_string_append (printable, ", ");
@@ -1025,7 +1025,7 @@ nm_utils_convert_ip6_route_struct_array_to_string (const GValue *src_value, GVal
#define OLD_DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS (dbus_g_type_get_collection ("GPtrArray", OLD_DBUS_TYPE_G_IP6_ADDRESS))
static void
-nm_utils_convert_old_ip6_addr_array (const GValue *src_value, GValue *dst_value)
+_nm_utils_convert_old_ip6_addr_array (const GValue *src_value, GValue *dst_value)
{
GPtrArray *src_outer_array;
GPtrArray *dst_outer_array;
@@ -1081,43 +1081,43 @@ _nm_utils_register_value_transformations (void)
if (G_UNLIKELY (!registered)) {
g_value_register_transform_func (G_TYPE_STRV,
DBUS_TYPE_G_LIST_OF_STRING,
- nm_utils_convert_strv_to_slist);
+ _nm_utils_convert_strv_to_slist);
g_value_register_transform_func (G_TYPE_STRV,
DBUS_TYPE_G_ARRAY_OF_STRING,
- nm_utils_convert_strv_to_ptrarray);
+ _nm_utils_convert_strv_to_ptrarray);
g_value_register_transform_func (DBUS_TYPE_G_LIST_OF_STRING,
G_TYPE_STRING,
- nm_utils_convert_strv_to_string);
+ _nm_utils_convert_strv_to_string);
g_value_register_transform_func (DBUS_TYPE_G_ARRAY_OF_STRING,
G_TYPE_STRING,
- nm_utils_convert_string_array_to_string);
+ _nm_utils_convert_string_array_to_string);
g_value_register_transform_func (DBUS_TYPE_G_UINT_ARRAY,
G_TYPE_STRING,
- nm_utils_convert_uint_array_to_string);
+ _nm_utils_convert_uint_array_to_string);
g_value_register_transform_func (DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UINT,
G_TYPE_STRING,
- nm_utils_convert_ip4_addr_route_struct_array_to_string);
+ _nm_utils_convert_ip4_addr_route_struct_array_to_string);
g_value_register_transform_func (DBUS_TYPE_G_MAP_OF_VARIANT,
G_TYPE_STRING,
- nm_utils_convert_gvalue_hash_to_string);
+ _nm_utils_convert_gvalue_hash_to_string);
g_value_register_transform_func (DBUS_TYPE_G_MAP_OF_STRING,
G_TYPE_STRING,
- nm_utils_convert_string_hash_to_string);
+ _nm_utils_convert_string_hash_to_string);
g_value_register_transform_func (DBUS_TYPE_G_UCHAR_ARRAY,
G_TYPE_STRING,
- nm_utils_convert_byte_array_to_string);
+ _nm_utils_convert_byte_array_to_string);
g_value_register_transform_func (DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UCHAR,
G_TYPE_STRING,
- nm_utils_convert_ip6_dns_array_to_string);
+ _nm_utils_convert_ip6_dns_array_to_string);
g_value_register_transform_func (DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS,
G_TYPE_STRING,
- nm_utils_convert_ip6_addr_struct_array_to_string);
+ _nm_utils_convert_ip6_addr_struct_array_to_string);
g_value_register_transform_func (DBUS_TYPE_G_ARRAY_OF_IP6_ROUTE,
G_TYPE_STRING,
- nm_utils_convert_ip6_route_struct_array_to_string);
+ _nm_utils_convert_ip6_route_struct_array_to_string);
g_value_register_transform_func (OLD_DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS,
DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS,
- nm_utils_convert_old_ip6_addr_array);
+ _nm_utils_convert_old_ip6_addr_array);
registered = TRUE;
}
}
diff --git a/libnm-util/nm-utils.h b/libnm-util/nm-utils.h
index c3eb29bc7..e4714a96f 100644
--- a/libnm-util/nm-utils.h
+++ b/libnm-util/nm-utils.h
@@ -27,7 +27,6 @@
#define NM_UTILS_H
#include <glib.h>
-#include <execinfo.h>
#include "nm-connection.h"
diff --git a/libnm-util/tests/Makefile.am b/libnm-util/tests/Makefile.am
index daf4d688e..1d737d1aa 100644
--- a/libnm-util/tests/Makefile.am
+++ b/libnm-util/tests/Makefile.am
@@ -84,6 +84,9 @@ check-local: test-settings-defaults test-crypto test-secrets
# Private key by itself (PEM)
$(abs_builddir)/test-setting-8021x $(srcdir)/certs/test-key-only.pem "test"
+# PKCS#8 private key by itself (PEM)
+ $(abs_builddir)/test-setting-8021x $(srcdir)/certs/pkcs8-enc-key.pem "1234567890"
+
# Private key and CA certificate in the same file (pkcs12)
$(abs_builddir)/test-setting-8021x $(srcdir)/certs/test-cert.p12 "test"
@@ -126,5 +129,10 @@ check-local: test-settings-defaults test-crypto test-secrets
# Another PKCS#12 file
$(abs_builddir)/test-crypto --p12 $(srcdir)/certs/test2-cert.p12 "12345testing"
+# PKCS#8 encrypted private key
+ $(abs_builddir)/test-crypto --pkcs8 \
+ $(srcdir)/certs/pkcs8-enc-key.pem \
+ "1234567890"
+
endif
diff --git a/libnm-util/tests/Makefile.in b/libnm-util/tests/Makefile.in
index 9e65094cc..c4919ffc9 100644
--- a/libnm-util/tests/Makefile.in
+++ b/libnm-util/tests/Makefile.in
@@ -941,6 +941,9 @@ uninstall-am:
# Private key by itself (PEM)
@WITH_TESTS_TRUE@ $(abs_builddir)/test-setting-8021x $(srcdir)/certs/test-key-only.pem "test"
+# PKCS#8 private key by itself (PEM)
+@WITH_TESTS_TRUE@ $(abs_builddir)/test-setting-8021x $(srcdir)/certs/pkcs8-enc-key.pem "1234567890"
+
# Private key and CA certificate in the same file (pkcs12)
@WITH_TESTS_TRUE@ $(abs_builddir)/test-setting-8021x $(srcdir)/certs/test-cert.p12 "test"
@@ -983,6 +986,11 @@ uninstall-am:
# Another PKCS#12 file
@WITH_TESTS_TRUE@ $(abs_builddir)/test-crypto --p12 $(srcdir)/certs/test2-cert.p12 "12345testing"
+# PKCS#8 encrypted private key
+@WITH_TESTS_TRUE@ $(abs_builddir)/test-crypto --pkcs8 \
+@WITH_TESTS_TRUE@ $(srcdir)/certs/pkcs8-enc-key.pem \
+@WITH_TESTS_TRUE@ "1234567890"
+
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/libnm-util/tests/certs/Makefile.am b/libnm-util/tests/certs/Makefile.am
index 02d5a5f52..e0f00a479 100644
--- a/libnm-util/tests/certs/Makefile.am
+++ b/libnm-util/tests/certs/Makefile.am
@@ -17,5 +17,8 @@ EXTRA_DIST = \
test2-cert.p12 \
ca-no-ending-newline.pem \
test-key-only.pem \
- test-key-only-decrypted.der
+ test-key-only-decrypted.der \
+ pkcs8-enc-key.pem \
+ pkcs8-noenc-key.pem \
+ pkcs8-decrypted.der
diff --git a/libnm-util/tests/certs/Makefile.in b/libnm-util/tests/certs/Makefile.in
index 873218e84..5149078b9 100644
--- a/libnm-util/tests/certs/Makefile.in
+++ b/libnm-util/tests/certs/Makefile.in
@@ -287,7 +287,10 @@ EXTRA_DIST = \
test2-cert.p12 \
ca-no-ending-newline.pem \
test-key-only.pem \
- test-key-only-decrypted.der
+ test-key-only-decrypted.der \
+ pkcs8-enc-key.pem \
+ pkcs8-noenc-key.pem \
+ pkcs8-decrypted.der
all: all-am
diff --git a/libnm-util/tests/certs/pkcs8-decrypted.der b/libnm-util/tests/certs/pkcs8-decrypted.der
new file mode 100644
index 000000000..2cbdeb5e3
--- /dev/null
+++ b/libnm-util/tests/certs/pkcs8-decrypted.der
Binary files differ
diff --git a/libnm-util/tests/certs/pkcs8-enc-key.pem b/libnm-util/tests/certs/pkcs8-enc-key.pem
new file mode 100644
index 000000000..0d08f2d29
--- /dev/null
+++ b/libnm-util/tests/certs/pkcs8-enc-key.pem
@@ -0,0 +1,29 @@
+-----BEGIN ENCRYPTED PRIVATE KEY-----
+MIIE6TAbBgkqhkiG9w0BBQMwDgQIwiGFT4Jz6RsCAggABIIEyJNMddDYofbhydUp
+J3VyrYIjv3LziJ7dkTXE3+mEYRCQrGLgljWBbib2JOLVCFt8melL6Yv1RcoVR7X7
+vrRqyycu0DumI4f5+Bf4wc234JNVhSaLYsw244fFtcnK2Gyn4IaVmWmrNvrwfX/w
+SKcVmO30D5C5PCKzv2bou5FmnJLKdDQV1t816cr9T8pTx7MHvBzSZXbh86334BhF
+T3zNwo8j2/+Gq2NBWUn+2GTTV8/r26aIwPcFi4QH6I2ghBwFmFHqU3/PoRm6nkmg
+CqJj2Dggy+8zE5qg0iId7lrio0OjCH+Qed6NGwIa2lgv/bhuJVP3FOk4gqamJWHi
+WMaq9McmS+03q2iokYeSQGbx85x+I90RTFZKhFx4dkerf6oTC/YoL4F++ff0e91v
+sOrQsBkgRhrRtFwa9OFCzbsknlixONdd+ITkyX490xz1wcZTDkKtMDRLIPWa2O0b
+MEq75jPYThZ5pF1vc5r+rqPafN7SfI+DDmhzJYEQNRoCWA4pH9Gwv0ayKnOgoj4K
+TuFhXvcyWzTnVXmcqEFyf3CRrB0Ti+Z61enupC+FCuYV5lGsx9kJaTumTk2UPD02
+9Ap3asDLozdEPSXBG3+oCM2s01/IJlxtR84C97r9rpmWTc9K6DCBScETe9KnIghW
+PU7XFogueG5Gwpe+x+IlTDq+qiyUNVX1uMGDcIaCC3VsoWqZrpnGGBhsovwBaXKt
+T9fT2nE27Fd6DRWso4fgos6PPx7RVveu17BTMVQeUq9L8GrV4JNrE3a9aoXdbUhc
+6gMiyAqxh/HEyciYoXsR9oVNi+VM0y8q3hL5nIcgDrCZr/c9aQ8+fuQBDXRrmrQd
+bR2iwNLCBnbmQmM/vM333VhJ4MSOKd3SGw/j41K+Nr3uP5KRZUwV+5yy3ef/hGxU
+i9JjCmSUt2bfWRUFlNaf1hCTYaKD0xnVr1SLFU4snIgh2qKawyqVc9EE2f+FcOM5
+0RtwQ3ku6FOk3cy6/xeKpResCHbWDS6nQaIKYyLukV+gm5MJIhOMkj2z4T1eXGUr
+Nu/L7Gz+ps7ct0lM8W82n5lzSEa5/l1eNGM0wtQoAwutFEZp7Nx/IBKK87jVttr6
+82UVJeRk7rO2Mpobfw2LbKwga4rsuLrx3UwVDBWdLx7dNIc1rGoAxhsc72+skFgF
+Uztwy4Yv1Uiji4T6v+mObPZD/HiIDL0vF02Pz08rNlgB0DgaTKrpql2FutIuQAdf
+AciffQIoh9VGERlJoWuunG/UTxg2XRl2m1vCDrgBMInax+PXCv7/5Vh21AQc3fWP
+uf4k6JSy46hYni7VTVKn6C/Di9z7oIrGl/jDkDsaenAbToyX9VWr3s7EBwnhTQ/I
+OQ9bkWCagHIQlwJbu4M4/VAbiR26NrcR0C3JXBlPlT0qvFFB8gKbJAQEXtwIFS2h
+m2fe0k6mQASMwdbJYXZ/wfsg5PPAWsKtny1aMvi0mTPSD5uRhIfEGEuR+AT4UbEW
+BkEIE0lgGly4P1SpunKDQQE6m/e7h8Nl4pi8SMSme3YoX5MJwCP/CNkLBDVenAZI
+oBrdoVox86SjwnUozVG192lcEAULlk+3ZGt6T9JXLBQl9hpNtyTC6SFh84R+5RoN
+AevNl1bDfO+Vci0uJw==
+-----END ENCRYPTED PRIVATE KEY-----
diff --git a/libnm-util/tests/certs/pkcs8-noenc-key.pem b/libnm-util/tests/certs/pkcs8-noenc-key.pem
new file mode 100644
index 000000000..f73fb55ab
--- /dev/null
+++ b/libnm-util/tests/certs/pkcs8-noenc-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQC80HGgFdlFIL2F
+W5rHQ99xOkMrWcZ7an9YurDebAE3M0UwqxM24+5mWbxc8FJ8yYugdMzuI5Nq77IA
+DwJpv9ZjMfnKC1VDMj3bmmMdPurfx8pLdLw/jhk3wBaYk6vMvh4z66Yvmb7valGq
+Pxh6CRTnekNGI9XA7me4JNBlisl0Qasn9g4pl9PiGJAruEamS4Pk6dSWbfw58bs7
+/Yo5ejyt/Mn1n0Q/r3Gv/lAS0qRvmrW6GE1rMtANMfuGRNlAln21TzNcJzykm+sp
+RWptxXEI0NY7u9+RP4M3C1mJxWir7AZDbtinpOZH6vF+92yMzgEYOLK/WZVdSPdW
+tROv9xtPAgMBAAECggEBAJAfp+vjYZJjuGaYEuAxjdhW+biYcWn5U7V9484TsSXa
+i+DnZOZMO8iCjMaAZuZ7zYmwPlE0dK12w29KBbSEy3eySRIRboa5TgBXq3pCcXRZ
+g6/vLlZw+AzXIiha6BODt3g4UwUYnWcQx79lJCDa18sNR1a9ucbn8+Har/wiYT3M
+JjTbUT6wR6rKEXchB58ZugYGhOTfugSDQg4U/dwEHPIaJ/wme++JUV5B/tjeGCG3
+F43o2Oos5vjfrDSpUKIYZn+2BdhP434jkwj22wQ2sy0ruU/kQx8nogMTRfP1v4GU
+9QmNXj/DB24K388ZxcDmcxBJxrGAJ0MohYFo28DqRBECgYEA6hyKEqe2UbJx/+B6
+8mYgHb+pS2j0M4jPl11q9MMLVxLnDY9xZ85IEyWHQEC0GavPSAois0oiDeGAm32c
+j6TFyV3/oPTmZSyV93/agWgnH9Xtc481pbNAb0GMfyotvRRE/+6ti9+Cl7oH9Qmm
+ldMk7Hn6sK9t2mUOW8idPjKqlqcCgYEAzne25BryLJoIinbRMZg9KTfxfgUE6EKc
+Tk5+9CFQn0/AItQJuKbIUyggYH4psWW5hWq6hFlmMYMR48FKv9ry7pZTB0djaoYD
+lN+wSuhzUYWXedkAjvPmekITmf6rbnPfwOZvsr8CGMEUekqJPnPLzsQy+Ea2y/fb
+QY4SHe7gExkCgYEAr+1scOJpZvFjK7ckjT3jipd6ADpJsORxo7zG4FImFnQU/6K4
+xRpGHWVJQyaccOIkrW04cGUYPDgmrjJx0ZwwKceijvEaphMgS1JgAHklVY4sl3ea
+CAAxPqoSi4lFv94Yj/9rmT4IZD6fNivfbJ20FKUBl37tXX4tkRmr2I64lOcCgYEA
+x3eqzrclrmdlxvfBZOuScwbkHP6WXhk0TwbQ6eRhsnfmxP8bITSoJoaGuRJKD2Oa
+l0WkSobgDwd0uhecsrvBpTS/pDGY32n3fdWZyNTHzEOHMyWtv23tBcJek5ERaBU0
+X3WBBiw4x1eKBBeMfjR6+xhbsbcHlQiw36V05UxJWMkCgYEAhtcYvrfU4K48IJTU
+qp03nvd+dMY3IUTdZNOCh8bswLKyn3aq3MfWF9Vp7kDAI3cfyMpSrAQnmg4nVcn6
+Gf3wakG8bpiSRbJnGN+iLm8JsD+3Vw9KzvKOOQVmpT7xt5Kupx1hWvLHQWvfYgOG
+qEtTM8/+LD7W3I7midJNt50CD8A=
+-----END PRIVATE KEY-----
diff --git a/libnm-util/tests/test-crypto.c b/libnm-util/tests/test-crypto.c
index 6cfb6ac27..57e39fcaa 100644
--- a/libnm-util/tests/test-crypto.c
+++ b/libnm-util/tests/test-crypto.c
@@ -239,6 +239,29 @@ test_is_pkcs12 (const char *path, gboolean expect_fail, const char *desc)
}
static void
+test_load_pkcs8 (const char *path,
+ const char *password,
+ gboolean expect_fail,
+ const char *desc)
+{
+ NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN;
+ GError *error = NULL;
+
+ format = crypto_verify_private_key (path, password, &error);
+ if (expect_fail) {
+ ASSERT (format == NM_CRYPTO_FILE_FORMAT_UNKNOWN, desc,
+ "unexpected success reading PKCS#8 private key file "
+ "'%s' with invalid password",
+ path);
+ } else {
+ ASSERT (format == NM_CRYPTO_FILE_FORMAT_RAW_KEY, desc,
+ "%s: unexpected PKCS#8 private key file format (expected %d, got "
+ "%d): %d %s",
+ path, NM_CRYPTO_FILE_FORMAT_RAW_KEY, format, error->code, error->message);
+ }
+}
+
+static void
test_encrypt_private_key (const char *path,
const char *password,
const char *desc)
@@ -316,6 +339,17 @@ int main (int argc, char **argv)
test_load_pkcs12 (argv[2], argv[3], FALSE, "pkcs12-private-key");
test_load_pkcs12 (argv[2], "blahblahblah", TRUE, "pkcs12-private-key-bad-password");
test_load_pkcs12_no_password (argv[2], "pkcs12-private-key-no-password");
+ } else if (!strcmp (argv[1], "--pkcs8")) {
+ ASSERT (argc == 4, "test-crypto",
+ "wrong number of arguments (--pkcs8 <key file> <password>)");
+
+ test_is_pkcs12 (argv[2], TRUE, "not-pkcs12");
+ test_load_pkcs8 (argv[2], argv[3], FALSE, "pkcs8-private-key");
+ /* Until gnutls and NSS grow support for all the ciphers that openssl
+ * can use with PKCS#8, we can't actually verify the password. So we
+ * expect a bad password to work for the time being.
+ */
+ test_load_pkcs8 (argv[2], "blahblahblah", FALSE, "pkcs8-private-key-bad-password");
} else {
ASSERT (argc > 2, "test-crypto", "unknown test type (not --cert, --key, or --p12)");
}
diff --git a/libnm-util/tests/test-general.c b/libnm-util/tests/test-general.c
index 1ce80622a..87a50d670 100644
--- a/libnm-util/tests/test-general.c
+++ b/libnm-util/tests/test-general.c
@@ -195,6 +195,75 @@ test_setting_vpn_update_secrets (void)
g_object_unref (connection);
}
+#define TO_DEL_NUM 50
+typedef struct {
+ NMSettingVPN *s_vpn;
+ char *to_del[TO_DEL_NUM];
+ guint called;
+} IterInfo;
+
+static void
+del_iter_func (const char *key, const char *value, gpointer user_data)
+{
+ IterInfo *info = user_data;
+ int i;
+
+ /* Record how many times this function gets called; it should get called
+ * exactly as many times as there are keys in the hash table, regardless
+ * of what keys we delete from the table.
+ */
+ info->called++;
+
+ /* During the iteration, remove a bunch of stuff from the table */
+ if (info->called == 1) {
+ for (i = 0; i < TO_DEL_NUM; i++)
+ nm_setting_vpn_remove_data_item (info->s_vpn, info->to_del[i]);
+ }
+}
+
+static void
+test_setting_vpn_modify_during_foreach (void)
+{
+ NMSettingVPN *s_vpn;
+ IterInfo info;
+ char *key, *val;
+ int i, u = 0;
+
+ s_vpn = (NMSettingVPN *) nm_setting_vpn_new ();
+ g_assert (s_vpn);
+
+ for (i = 0; i < TO_DEL_NUM * 2; i++) {
+ key = g_strdup_printf ("adsfasdfadf%d", i);
+ val = g_strdup_printf ("42263236236awt%d", i);
+ nm_setting_vpn_add_data_item (s_vpn, key, val);
+
+ /* Cache some keys to delete */
+ if (i % 2)
+ info.to_del[u++] = g_strdup (key);
+
+ g_free (key);
+ g_free (val);
+ }
+
+ /* Iterate over current table keys */
+ info.s_vpn = s_vpn;
+ info.called = 0;
+ nm_setting_vpn_foreach_data_item (s_vpn, del_iter_func, &info);
+
+ /* Make sure all the things we removed during iteration are really gone */
+ for (i = 0; i < TO_DEL_NUM; i++) {
+ g_assert_cmpstr (nm_setting_vpn_get_data_item (s_vpn, info.to_del[i]), ==, NULL);
+ g_free (info.to_del[i]);
+ }
+
+ /* And make sure the foreach callback was called the same number of times
+ * as there were keys in the table at the beginning of the foreach.
+ */
+ g_assert_cmpint (info.called, ==, TO_DEL_NUM * 2);
+
+ g_object_unref (s_vpn);
+}
+
#define OLD_DBUS_TYPE_G_IP6_ADDRESS (dbus_g_type_get_struct ("GValueArray", DBUS_TYPE_G_UCHAR_ARRAY, G_TYPE_UINT, G_TYPE_INVALID))
#define OLD_DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS (dbus_g_type_get_collection ("GPtrArray", OLD_DBUS_TYPE_G_IP6_ADDRESS))
@@ -354,6 +423,25 @@ test_setting_gsm_apn_bad_chars (void)
"gsm-apn-bad-chars", "unexpectedly valid GSM setting");
}
+static void
+test_setting_gsm_apn_underscore (void)
+{
+ NMSettingGsm *s_gsm;
+ GError *error = NULL;
+ gboolean success;
+
+ s_gsm = (NMSettingGsm *) nm_setting_gsm_new ();
+ g_assert (s_gsm);
+
+ g_object_set (s_gsm, NM_SETTING_GSM_NUMBER, "*99#", NULL);
+
+ /* 65-character long */
+ g_object_set (s_gsm, NM_SETTING_GSM_APN, "foobar_baz", NULL);
+ success = nm_setting_verify (NM_SETTING (s_gsm), NULL, &error);
+ g_assert_no_error (error);
+ g_assert (success == TRUE);
+}
+
static NMSettingWirelessSecurity *
make_test_wsec_setting (const char *detail)
{
@@ -1132,9 +1220,11 @@ int main (int argc, char **argv)
/* The tests */
test_setting_vpn_items ();
test_setting_vpn_update_secrets ();
+ test_setting_vpn_modify_during_foreach ();
test_setting_ip6_config_old_address_array ();
test_setting_gsm_apn_spaces ();
test_setting_gsm_apn_bad_chars ();
+ test_setting_gsm_apn_underscore ();
test_setting_to_hash_all ();
test_setting_to_hash_no_secrets ();
test_setting_to_hash_only_secrets ();
diff --git a/po/eo.po b/po/eo.po
index c099b86cd..5ff1b9c19 100644
--- a/po/eo.po
+++ b/po/eo.po
@@ -6,109 +6,108 @@
# Aisano < >, 2010.
# Kim RIBEIRO < >, 2010.
# Serge LEBLANC < >, 2010.
-# Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>, 2010.
+# Michel MORONI < >, 2011.
+# Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>, 2010, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: network-manager\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
-"product=NetworkManager&component=general\n"
-"POT-Creation-Date: 2010-12-10 15:25+0000\n"
-"PO-Revision-Date: 2010-12-11 10:32+0100\n"
+"product=NetworkManager&keywords=I18N+L10N&component=general\n"
+"POT-Creation-Date: 2011-05-06 03:25+0000\n"
+"PO-Revision-Date: 2011-05-06 17:17+0200\n"
"Last-Translator: Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>\n"
"Language-Team: Esperanto <ubuntu-l10n-eo@lists.launchpad.net>\n"
"Language: eo\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-05-06 14:56+0000\n"
+"X-Generator: Launchpad (build 12981)\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-"X-Launchpad-Export-Date: 2010-12-10 16:56+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-#: ../cli/src/connections.c:60 ../cli/src/connections.c:76
-#: ../cli/src/devices.c:89 ../cli/src/devices.c:102 ../cli/src/devices.c:112
-#: ../cli/src/devices.c:122 ../cli/src/devices.c:135 ../cli/src/devices.c:146
-#: ../cli/src/devices.c:157 ../cli/src/devices.c:166 ../cli/src/devices.c:175
+#: ../cli/src/connections.c:64 ../cli/src/connections.c:78
+#: ../cli/src/devices.c:101 ../cli/src/devices.c:114 ../cli/src/devices.c:124
+#: ../cli/src/devices.c:134 ../cli/src/devices.c:148 ../cli/src/devices.c:162
+#: ../cli/src/devices.c:173 ../cli/src/devices.c:184 ../cli/src/devices.c:193
+#: ../cli/src/devices.c:202 ../cli/src/devices.c:224
msgid "NAME"
msgstr "NOMO"
#. 0
-#: ../cli/src/connections.c:61 ../cli/src/connections.c:77
+#: ../cli/src/connections.c:65 ../cli/src/connections.c:79
msgid "UUID"
msgstr "UUID"
#. 1
-#: ../cli/src/connections.c:62
+#: ../cli/src/connections.c:66
msgid "DEVICES"
msgstr "APARATOJ"
#. 2
-#: ../cli/src/connections.c:63 ../cli/src/connections.c:79
-msgid "SCOPE"
-msgstr "AMPLEKSO"
-
-#. 3
-#: ../cli/src/connections.c:64
+#: ../cli/src/connections.c:67
msgid "DEFAULT"
msgstr "DEFAŬLTA"
-#. 4
-#: ../cli/src/connections.c:65
-msgid "DBUS-SERVICE"
-msgstr "DBUS-SERVO"
-
-#. 5
-#: ../cli/src/connections.c:66
+#. 3
+#: ../cli/src/connections.c:68
msgid "SPEC-OBJECT"
msgstr "SPEC-OBJEKTO"
-#. 6
-#: ../cli/src/connections.c:67
+#. 4
+#: ../cli/src/connections.c:69
msgid "VPN"
msgstr "VPN"
-#. 7
+#. 5
+#. 6
#. 2
-#: ../cli/src/connections.c:68 ../cli/src/connections.c:84
-#: ../cli/src/devices.c:64
+#. 11
+#. 5
+#: ../cli/src/connections.c:70 ../cli/src/connections.c:85
+#: ../cli/src/devices.c:69 ../cli/src/devices.c:214 ../cli/src/devices.c:230
msgid "DBUS-PATH"
msgstr "DBUS-VOJO"
#. 1
#. 0
#. 1
-#: ../cli/src/connections.c:78 ../cli/src/devices.c:62 ../cli/src/devices.c:91
+#. 2
+#: ../cli/src/connections.c:80 ../cli/src/devices.c:67
+#: ../cli/src/devices.c:103 ../cli/src/devices.c:227
msgid "TYPE"
-msgstr "SPECO"
+msgstr "TIPO"
-#. 3
-#: ../cli/src/connections.c:80
+#. 2
+#: ../cli/src/connections.c:81
msgid "TIMESTAMP"
msgstr "TEMPINDIKO"
-#. 4
-#: ../cli/src/connections.c:81
+#. 3
+#: ../cli/src/connections.c:82
msgid "TIMESTAMP-REAL"
msgstr "REALA-TEMPINDIKO"
-#. 5
-#: ../cli/src/connections.c:82
+#. 4
+#: ../cli/src/connections.c:83
msgid "AUTOCONNECT"
msgstr "AŬTOMATA-KONEKTO"
-#. 6
-#: ../cli/src/connections.c:83
+#. 5
+#: ../cli/src/connections.c:84
msgid "READONLY"
msgstr "NUR-LEGI"
-#: ../cli/src/connections.c:160
+#: ../cli/src/connections.c:167
#, c-format
msgid ""
"Usage: nmcli con { COMMAND | help }\n"
" COMMAND := { list | status | up | down }\n"
"\n"
-" list [id <id> | uuid <id> | system | user]\n"
+" list [id <id> | uuid <id>]\n"
" status\n"
+" up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [nsp <name>] [--"
+"nowait] [--timeout <timeout>]\n"
" up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout "
"<timeout>]\n"
" down id <id> | uuid <id>\n"
@@ -116,543 +115,595 @@ msgstr ""
"Uzo: nmcli con { KOMANDO | help }\n"
" KOMANDO := { list | status | up | down }\n"
"\n"
-" list [id <id> | uuid <id> | system | user]\n"
+" list [id <id> | uuid <id>]\n"
" status\n"
+" up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [nsp <name>] [--"
+"nowait] [--timeout <timeout>]\n"
" up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout "
"<timeout>]\n"
" down id <id> | uuid <id>\n"
-#: ../cli/src/connections.c:200 ../cli/src/connections.c:541
+#: ../cli/src/connections.c:220 ../cli/src/connections.c:542
#, c-format
msgid "Error: 'con list': %s"
msgstr "Eraro: 'con list': %s"
-#: ../cli/src/connections.c:202 ../cli/src/connections.c:543
+#: ../cli/src/connections.c:222 ../cli/src/connections.c:544
#, c-format
msgid "Error: 'con list': %s; allowed fields: %s"
msgstr "Eraro: 'con list': %s; permesataj kampoj: %s"
-#: ../cli/src/connections.c:210
+#: ../cli/src/connections.c:230
msgid "Connection details"
msgstr "Konektodetaloj"
-#: ../cli/src/connections.c:385 ../cli/src/connections.c:606
-msgid "system"
-msgstr "sistemo"
-
-#: ../cli/src/connections.c:385 ../cli/src/connections.c:606
-msgid "user"
-msgstr "uzanto"
-
-#: ../cli/src/connections.c:387
+#: ../cli/src/connections.c:417
msgid "never"
msgstr "neniam"
#. "CAPABILITIES"
#. Print header
#. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:388 ../cli/src/connections.c:389
-#: ../cli/src/connections.c:607 ../cli/src/connections.c:610
-#: ../cli/src/devices.c:433 ../cli/src/devices.c:558 ../cli/src/devices.c:584
-#: ../cli/src/devices.c:585 ../cli/src/devices.c:586 ../cli/src/devices.c:587
-#: ../cli/src/devices.c:588 ../cli/src/settings.c:508
-#: ../cli/src/settings.c:551 ../cli/src/settings.c:652
-#: ../cli/src/settings.c:926 ../cli/src/settings.c:927
-#: ../cli/src/settings.c:929 ../cli/src/settings.c:931
-#: ../cli/src/settings.c:1056 ../cli/src/settings.c:1057
-#: ../cli/src/settings.c:1058 ../cli/src/settings.c:1137
-#: ../cli/src/settings.c:1138 ../cli/src/settings.c:1139
-#: ../cli/src/settings.c:1140 ../cli/src/settings.c:1141
-#: ../cli/src/settings.c:1142 ../cli/src/settings.c:1143
-#: ../cli/src/settings.c:1144 ../cli/src/settings.c:1145
-#: ../cli/src/settings.c:1146 ../cli/src/settings.c:1147
-#: ../cli/src/settings.c:1148 ../cli/src/settings.c:1149
-#: ../cli/src/settings.c:1224
+#: ../cli/src/connections.c:418 ../cli/src/connections.c:419
+#: ../cli/src/connections.c:597 ../cli/src/connections.c:599
+#: ../cli/src/devices.c:509 ../cli/src/devices.c:562 ../cli/src/devices.c:687
+#: ../cli/src/devices.c:713 ../cli/src/devices.c:714 ../cli/src/devices.c:715
+#: ../cli/src/devices.c:716 ../cli/src/devices.c:717 ../cli/src/settings.c:520
+#: ../cli/src/settings.c:563 ../cli/src/settings.c:663
+#: ../cli/src/settings.c:937 ../cli/src/settings.c:938
+#: ../cli/src/settings.c:940 ../cli/src/settings.c:942
+#: ../cli/src/settings.c:1067 ../cli/src/settings.c:1068
+#: ../cli/src/settings.c:1069 ../cli/src/settings.c:1148
+#: ../cli/src/settings.c:1149 ../cli/src/settings.c:1150
+#: ../cli/src/settings.c:1151 ../cli/src/settings.c:1152
+#: ../cli/src/settings.c:1153 ../cli/src/settings.c:1154
+#: ../cli/src/settings.c:1155 ../cli/src/settings.c:1156
+#: ../cli/src/settings.c:1157 ../cli/src/settings.c:1158
+#: ../cli/src/settings.c:1159 ../cli/src/settings.c:1160
+#: ../cli/src/settings.c:1235
msgid "yes"
msgstr "jes"
-#: ../cli/src/connections.c:388 ../cli/src/connections.c:389
-#: ../cli/src/connections.c:607 ../cli/src/connections.c:610
-#: ../cli/src/devices.c:433 ../cli/src/devices.c:558 ../cli/src/devices.c:584
-#: ../cli/src/devices.c:585 ../cli/src/devices.c:586 ../cli/src/devices.c:587
-#: ../cli/src/devices.c:588 ../cli/src/settings.c:508
-#: ../cli/src/settings.c:510 ../cli/src/settings.c:551
-#: ../cli/src/settings.c:652 ../cli/src/settings.c:926
-#: ../cli/src/settings.c:927 ../cli/src/settings.c:929
-#: ../cli/src/settings.c:931 ../cli/src/settings.c:1056
-#: ../cli/src/settings.c:1057 ../cli/src/settings.c:1058
-#: ../cli/src/settings.c:1137 ../cli/src/settings.c:1138
-#: ../cli/src/settings.c:1139 ../cli/src/settings.c:1140
-#: ../cli/src/settings.c:1141 ../cli/src/settings.c:1142
-#: ../cli/src/settings.c:1143 ../cli/src/settings.c:1144
-#: ../cli/src/settings.c:1145 ../cli/src/settings.c:1146
-#: ../cli/src/settings.c:1147 ../cli/src/settings.c:1148
-#: ../cli/src/settings.c:1149 ../cli/src/settings.c:1224
+#: ../cli/src/connections.c:418 ../cli/src/connections.c:419
+#: ../cli/src/connections.c:597 ../cli/src/connections.c:599
+#: ../cli/src/devices.c:509 ../cli/src/devices.c:562 ../cli/src/devices.c:687
+#: ../cli/src/devices.c:713 ../cli/src/devices.c:714 ../cli/src/devices.c:715
+#: ../cli/src/devices.c:716 ../cli/src/devices.c:717 ../cli/src/settings.c:520
+#: ../cli/src/settings.c:522 ../cli/src/settings.c:563
+#: ../cli/src/settings.c:663 ../cli/src/settings.c:937
+#: ../cli/src/settings.c:938 ../cli/src/settings.c:940
+#: ../cli/src/settings.c:942 ../cli/src/settings.c:1067
+#: ../cli/src/settings.c:1068 ../cli/src/settings.c:1069
+#: ../cli/src/settings.c:1148 ../cli/src/settings.c:1149
+#: ../cli/src/settings.c:1150 ../cli/src/settings.c:1151
+#: ../cli/src/settings.c:1152 ../cli/src/settings.c:1153
+#: ../cli/src/settings.c:1154 ../cli/src/settings.c:1155
+#: ../cli/src/settings.c:1156 ../cli/src/settings.c:1157
+#: ../cli/src/settings.c:1158 ../cli/src/settings.c:1159
+#: ../cli/src/settings.c:1160 ../cli/src/settings.c:1235
msgid "no"
msgstr "ne"
-#: ../cli/src/connections.c:462 ../cli/src/connections.c:505
-msgid "System connections"
-msgstr "Sistemkonektoj"
-
-#: ../cli/src/connections.c:467 ../cli/src/connections.c:518
-msgid "User connections"
-msgstr "Uzanto-konektoj"
+#: ../cli/src/connections.c:493
+msgid "Connection list"
+msgstr "Konektolisto"
-#: ../cli/src/connections.c:479 ../cli/src/connections.c:1342
-#: ../cli/src/connections.c:1358 ../cli/src/connections.c:1367
-#: ../cli/src/connections.c:1378 ../cli/src/connections.c:1463
-#: ../cli/src/devices.c:964 ../cli/src/devices.c:974 ../cli/src/devices.c:1076
-#: ../cli/src/devices.c:1083
+#: ../cli/src/connections.c:506 ../cli/src/connections.c:1378
+#: ../cli/src/connections.c:1393 ../cli/src/connections.c:1402
+#: ../cli/src/connections.c:1412 ../cli/src/connections.c:1424
+#: ../cli/src/connections.c:1519 ../cli/src/devices.c:1190
+#: ../cli/src/devices.c:1200 ../cli/src/devices.c:1314
+#: ../cli/src/devices.c:1321 ../cli/src/devices.c:1534
+#: ../cli/src/devices.c:1541
#, c-format
msgid "Error: %s argument is missing."
msgstr "Eraro: argumento %s mankas."
-#: ../cli/src/connections.c:492
+#: ../cli/src/connections.c:519
#, c-format
msgid "Error: %s - no such connection."
-msgstr "Eraro: %s - neniu tia konekto"
+msgstr "Eraro: %s - neniu tia konekto."
-#: ../cli/src/connections.c:524 ../cli/src/connections.c:1391
-#: ../cli/src/connections.c:1481 ../cli/src/devices.c:787
-#: ../cli/src/devices.c:854 ../cli/src/devices.c:988 ../cli/src/devices.c:1089
+#: ../cli/src/connections.c:525 ../cli/src/connections.c:1437
+#: ../cli/src/connections.c:1536 ../cli/src/devices.c:987
+#: ../cli/src/devices.c:1067 ../cli/src/devices.c:1214
+#: ../cli/src/devices.c:1327 ../cli/src/devices.c:1547
#, c-format
msgid "Unknown parameter: %s\n"
msgstr "Nekonata parametro: %s\n"
-#: ../cli/src/connections.c:533
+#: ../cli/src/connections.c:534
#, c-format
msgid "Error: no valid parameter specified."
msgstr "Eraro: neniu valida parametro difinita."
-#: ../cli/src/connections.c:548 ../cli/src/connections.c:1584
-#: ../cli/src/devices.c:1295 ../cli/src/network-manager.c:359
+#: ../cli/src/connections.c:549 ../cli/src/connections.c:1627
+#: ../cli/src/devices.c:1755 ../cli/src/network-manager.c:463
#, c-format
msgid "Error: %s."
msgstr "Eraro: %s."
-#: ../cli/src/connections.c:655
+#: ../cli/src/connections.c:637
#, c-format
msgid "Error: 'con status': %s"
msgstr "Eraro: 'con status': %s"
-#: ../cli/src/connections.c:657
+#: ../cli/src/connections.c:639
#, c-format
msgid "Error: 'con status': %s; allowed fields: %s"
msgstr "Eraro: 'con status': %s; permesataj kampoj: %s"
-#: ../cli/src/connections.c:664
+#: ../cli/src/connections.c:647 ../cli/src/connections.c:1452
+#: ../cli/src/connections.c:1551 ../cli/src/devices.c:1014
+#: ../cli/src/devices.c:1076 ../cli/src/devices.c:1229
+#: ../cli/src/devices.c:1357 ../cli/src/devices.c:1576
+#, c-format
+msgid "Error: Can't find out if NetworkManager is running: %s."
+msgstr "Eraro: Ne povas scii ĉu NetworkManager rulas: %s."
+
+#: ../cli/src/connections.c:651 ../cli/src/connections.c:1456
+#: ../cli/src/connections.c:1555 ../cli/src/devices.c:1018
+#: ../cli/src/devices.c:1080 ../cli/src/devices.c:1233
+#: ../cli/src/devices.c:1361 ../cli/src/devices.c:1580
+#, c-format
+msgid "Error: NetworkManager is not running."
+msgstr "Eraro: NetworkManager ne rulas."
+
+#: ../cli/src/connections.c:659
msgid "Active connections"
msgstr "Aktivaj konektoj"
-#: ../cli/src/connections.c:1034
+#: ../cli/src/connections.c:1095
#, c-format
msgid "no active connection on device '%s'"
msgstr "neniu aktiva konekto sur aparato '%s'"
-#: ../cli/src/connections.c:1042
+#: ../cli/src/connections.c:1103
#, c-format
msgid "no active connection or device"
msgstr "neniu aktiva konekto aŭ aparato"
-#: ../cli/src/connections.c:1092
+#: ../cli/src/connections.c:1174
#, c-format
msgid "device '%s' not compatible with connection '%s'"
msgstr "aparato '%s' ne kongruas kun konekto '%s'"
-#: ../cli/src/connections.c:1094
+#: ../cli/src/connections.c:1176
#, c-format
msgid "no device found for connection '%s'"
msgstr "neniu aparato trovita por konekto '%s'"
-#: ../cli/src/connections.c:1105
+#: ../cli/src/connections.c:1187
msgid "activating"
msgstr "enŝaltas"
-#: ../cli/src/connections.c:1107
+#: ../cli/src/connections.c:1189
msgid "activated"
msgstr "enŝaltite"
-#: ../cli/src/connections.c:1110 ../cli/src/connections.c:1133
-#: ../cli/src/connections.c:1166 ../cli/src/devices.c:247
-#: ../cli/src/devices.c:559 ../cli/src/network-manager.c:94
-#: ../cli/src/network-manager.c:149 ../cli/src/settings.c:473
+#: ../cli/src/connections.c:1191 ../cli/src/devices.c:304
+msgid "deactivating"
+msgstr "malaktivigante"
+
+#: ../cli/src/connections.c:1194 ../cli/src/connections.c:1217
+#: ../cli/src/connections.c:1250 ../cli/src/devices.c:308
+#: ../cli/src/devices.c:688 ../cli/src/network-manager.c:118
+#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:183
+#: ../cli/src/network-manager.c:192 ../cli/src/network-manager.c:298
+#: ../cli/src/network-manager.c:353 ../cli/src/network-manager.c:391
+#: ../cli/src/network-manager.c:430 ../cli/src/settings.c:485
+#: ../cli/src/utils.c:396
msgid "unknown"
msgstr "nekonate"
-#: ../cli/src/connections.c:1119
+#: ../cli/src/connections.c:1203
msgid "VPN connecting (prepare)"
msgstr "VPN konektas (preparo)"
-#: ../cli/src/connections.c:1121
+#: ../cli/src/connections.c:1205
msgid "VPN connecting (need authentication)"
msgstr "VPN konektas (bezonas aŭtentigon)"
-#: ../cli/src/connections.c:1123
+#: ../cli/src/connections.c:1207
msgid "VPN connecting"
msgstr "VPN konektas"
-#: ../cli/src/connections.c:1125
+#: ../cli/src/connections.c:1209
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN konektas (akiras IP-agordaron)"
-#: ../cli/src/connections.c:1127
+#: ../cli/src/connections.c:1211
msgid "VPN connected"
msgstr "VPN konektita"
-#: ../cli/src/connections.c:1129
+#: ../cli/src/connections.c:1213
msgid "VPN connection failed"
msgstr "VPN-konekto fiaskis"
-#: ../cli/src/connections.c:1131
+#: ../cli/src/connections.c:1215
msgid "VPN disconnected"
msgstr "VPN malkonektis"
-#: ../cli/src/connections.c:1142
+#: ../cli/src/connections.c:1226
msgid "unknown reason"
msgstr "nekonata kialo"
-#: ../cli/src/connections.c:1144
+#: ../cli/src/connections.c:1228
msgid "none"
-msgstr "nenio"
+msgstr "neniu"
-#: ../cli/src/connections.c:1146
+#: ../cli/src/connections.c:1230
msgid "the user was disconnected"
-msgstr "la uzanto estis malkonektita"
+msgstr "la uzanto estis malkonektite"
-#: ../cli/src/connections.c:1148
+#: ../cli/src/connections.c:1232
msgid "the base network connection was interrupted"
-msgstr "la baza retkonekto estis interrompita"
+msgstr "la baza retkonekto estis interrompite"
-#: ../cli/src/connections.c:1150
+#: ../cli/src/connections.c:1234
msgid "the VPN service stopped unexpectedly"
msgstr "la VPN-servo neatendite ĉesis"
-#: ../cli/src/connections.c:1152
+#: ../cli/src/connections.c:1236
msgid "the VPN service returned invalid configuration"
msgstr "la VPN-servo revenigis nevalidan agordaron"
-#: ../cli/src/connections.c:1154
+#: ../cli/src/connections.c:1238
msgid "the connection attempt timed out"
msgstr "la konektoprovo eltempiĝis"
-#: ../cli/src/connections.c:1156
+#: ../cli/src/connections.c:1240
msgid "the VPN service did not start in time"
msgstr "la VPN-servo ne startis ĝustatempe"
-#: ../cli/src/connections.c:1158
+#: ../cli/src/connections.c:1242
msgid "the VPN service failed to start"
msgstr "la VPN-servo fiaskis starti"
-#: ../cli/src/connections.c:1160
+#: ../cli/src/connections.c:1244
msgid "no valid VPN secrets"
-msgstr "neniu valida VPN-sekreto"
+msgstr "neniu valida VPN-sekretoj"
-#: ../cli/src/connections.c:1162
+#: ../cli/src/connections.c:1246
msgid "invalid VPN secrets"
msgstr "nevalidaj VPN-sekretoj"
-#: ../cli/src/connections.c:1164
+#: ../cli/src/connections.c:1248
msgid "the connection was removed"
msgstr "la konekto estis forigita"
-#: ../cli/src/connections.c:1178
+#: ../cli/src/connections.c:1262
#, c-format
msgid "state: %s\n"
msgstr "stato: %s\n"
-#: ../cli/src/connections.c:1181 ../cli/src/connections.c:1207
+#: ../cli/src/connections.c:1265 ../cli/src/connections.c:1291
#, c-format
msgid "Connection activated\n"
msgstr "Konekto enŝaltita\n"
-#: ../cli/src/connections.c:1184
+#: ../cli/src/connections.c:1268
#, c-format
msgid "Error: Connection activation failed."
msgstr "Eraro: Enŝalto de konekto fiaskis."
-#: ../cli/src/connections.c:1203
+#: ../cli/src/connections.c:1287
#, c-format
msgid "state: %s (%d)\n"
msgstr "stato: %s (%d)\n"
-#: ../cli/src/connections.c:1213
+#: ../cli/src/connections.c:1297
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "Eraro: Enŝalto de konekto fiaskis: %s."
-#: ../cli/src/connections.c:1230 ../cli/src/devices.c:911
+#: ../cli/src/connections.c:1314 ../cli/src/devices.c:1136
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "Eraro: Eltempiĝo finiĝis %d sek."
-#: ../cli/src/connections.c:1273
+#: ../cli/src/connections.c:1327
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "Eraro: Enŝalto de konekto fiaskis: %s"
-#: ../cli/src/connections.c:1287
-#, c-format
-msgid "Error: Obtaining active connection for '%s' failed."
-msgstr "Eraro: Akiro de aktiva konekto por '%s' fiaskis."
-
-#: ../cli/src/connections.c:1296
+#: ../cli/src/connections.c:1333
#, c-format
msgid "Active connection state: %s\n"
msgstr "Stato de aktiva konekto: %s\n"
-#: ../cli/src/connections.c:1297
+#: ../cli/src/connections.c:1334
#, c-format
msgid "Active connection path: %s\n"
msgstr "Vojo de aktiva konekto: %s\n"
-#: ../cli/src/connections.c:1351 ../cli/src/connections.c:1472
+#: ../cli/src/connections.c:1386 ../cli/src/connections.c:1527
#, c-format
msgid "Error: Unknown connection: %s."
msgstr "Eraro: Nekonata konekto: %s."
-#: ../cli/src/connections.c:1386 ../cli/src/devices.c:982
+#: ../cli/src/connections.c:1432 ../cli/src/devices.c:1208
#, c-format
msgid "Error: timeout value '%s' is not valid."
msgstr "Eraro: eltempiĝa valoro '%s' ne validas."
-#: ../cli/src/connections.c:1399 ../cli/src/connections.c:1489
+#: ../cli/src/connections.c:1445 ../cli/src/connections.c:1544
#, c-format
msgid "Error: id or uuid has to be specified."
-msgstr "Eraro: id aŭ uuid devas esti specifata."
+msgstr "Eraro: 'id' aŭ 'uuid' devas esti specifata."
-#: ../cli/src/connections.c:1419
+#: ../cli/src/connections.c:1473
#, c-format
msgid "Error: No suitable device found: %s."
msgstr "Eraro: Trovis neniun taŭgan aparaton: %s."
-#: ../cli/src/connections.c:1421
+#: ../cli/src/connections.c:1475
#, c-format
msgid "Error: No suitable device found."
msgstr "Eraro: Trovis neniun taŭgan aparaton."
-#: ../cli/src/connections.c:1516
+#: ../cli/src/connections.c:1580
#, c-format
msgid "Warning: Connection not active\n"
msgstr "Atenton: Konekto ne aktivas\n"
-#: ../cli/src/connections.c:1573
+#: ../cli/src/connections.c:1618
#, c-format
msgid "Error: 'con' command '%s' is not valid."
msgstr "Eraro: 'con'-komando '%s' ne validas."
-#: ../cli/src/connections.c:1609
+#: ../cli/src/connections.c:1683
#, c-format
msgid "Error: could not connect to D-Bus."
msgstr "Eraro: ne povis konekti al D-Bus."
-#: ../cli/src/connections.c:1616
+#: ../cli/src/connections.c:1690
#, c-format
msgid "Error: Could not get system settings."
msgstr "Eraro: Ne povis akiri sistemajn agordojn."
-#: ../cli/src/connections.c:1624
-#, c-format
-msgid "Error: Could not get user settings."
-msgstr "Eraro: Ne povis akiri uzanto-agordojn."
-
-#: ../cli/src/connections.c:1634
+#: ../cli/src/connections.c:1700
#, c-format
-msgid "Error: Can't obtain connections: settings services are not running."
-msgstr "Eraro: Ne povas obteni konektojn: agordo-servoj ne aktivas."
+msgid "Error: Can't obtain connections: settings service is not running."
+msgstr "Eraro: Ne povas obteni konektojn: agordo-servo ne aktivas."
#. 0
#. 9
-#: ../cli/src/devices.c:61 ../cli/src/devices.c:90 ../cli/src/devices.c:185
+#. 3
+#: ../cli/src/devices.c:66 ../cli/src/devices.c:102 ../cli/src/devices.c:212
+#: ../cli/src/devices.c:228
msgid "DEVICE"
msgstr "APARATO"
#. 1
#. 4
-#. 0
-#: ../cli/src/devices.c:63 ../cli/src/devices.c:94
-#: ../cli/src/network-manager.c:36
+#. 1
+#: ../cli/src/devices.c:68 ../cli/src/devices.c:106
+#: ../cli/src/network-manager.c:39
msgid "STATE"
msgstr "STATO"
-#: ../cli/src/devices.c:73
+#: ../cli/src/devices.c:78
msgid "GENERAL"
-msgstr "ĜENERALA"
+msgstr "ĜENERALE"
#. 0
-#: ../cli/src/devices.c:74
+#: ../cli/src/devices.c:79
msgid "CAPABILITIES"
msgstr "KAPABLOJ"
#. 1
-#: ../cli/src/devices.c:75
+#: ../cli/src/devices.c:80
msgid "WIFI-PROPERTIES"
msgstr "WIFI-ECOJ"
#. 2
-#: ../cli/src/devices.c:76
+#: ../cli/src/devices.c:81
msgid "AP"
msgstr "AP"
#. 3
-#: ../cli/src/devices.c:77
+#: ../cli/src/devices.c:82
msgid "WIRED-PROPERTIES"
msgstr "DRATA-ECOJ"
#. 4
-#: ../cli/src/devices.c:78
+#: ../cli/src/devices.c:83
+msgid "WIMAX-PROPERTIES"
+msgstr "WIMAX-ECOJ"
+
+#. 5
+#. 0
+#: ../cli/src/devices.c:84 ../cli/src/devices.c:225
+msgid "NSP"
+msgstr ""
+
+#. 6
+#: ../cli/src/devices.c:85
msgid "IP4-SETTINGS"
msgstr "IP4-AGORDOJ"
-#. 5
-#: ../cli/src/devices.c:79
+#. 7
+#: ../cli/src/devices.c:86
msgid "IP4-DNS"
msgstr "IP4-DNS"
-#. 6
-#: ../cli/src/devices.c:80
+#. 8
+#: ../cli/src/devices.c:87
msgid "IP6-SETTINGS"
msgstr "IP6-AGORDOJ"
-#. 7
-#: ../cli/src/devices.c:81
+#. 9
+#: ../cli/src/devices.c:88
msgid "IP6-DNS"
msgstr "IP6-DNS"
#. 2
-#: ../cli/src/devices.c:92
+#: ../cli/src/devices.c:104
msgid "DRIVER"
msgstr "PELILO"
#. 3
-#: ../cli/src/devices.c:93
+#: ../cli/src/devices.c:105
msgid "HWADDR"
msgstr "APARATADRESO"
#. 0
-#: ../cli/src/devices.c:103
+#: ../cli/src/devices.c:115
msgid "CARRIER-DETECT"
msgstr "PORTANTO-REKONO"
#. 1
-#: ../cli/src/devices.c:104
+#: ../cli/src/devices.c:116
msgid "SPEED"
msgstr "RAPIDO"
#. 0
-#: ../cli/src/devices.c:113
+#: ../cli/src/devices.c:125
msgid "CARRIER"
msgstr "PORTANTO"
#. 0
-#: ../cli/src/devices.c:123
+#: ../cli/src/devices.c:135
msgid "WEP"
msgstr "WEP"
#. 1
-#: ../cli/src/devices.c:124
+#: ../cli/src/devices.c:136
msgid "WPA"
msgstr "WPA"
#. 2
-#: ../cli/src/devices.c:125
+#: ../cli/src/devices.c:137
msgid "WPA2"
msgstr "WPA2"
#. 3
-#: ../cli/src/devices.c:126
+#: ../cli/src/devices.c:138
msgid "TKIP"
msgstr "TKIP"
#. 4
-#: ../cli/src/devices.c:127
+#: ../cli/src/devices.c:139
msgid "CCMP"
msgstr "CCMP"
#. 0
-#: ../cli/src/devices.c:136 ../cli/src/devices.c:147
+#: ../cli/src/devices.c:149
+msgid "CTR-FREQ"
+msgstr ""
+
+#. 1
+#: ../cli/src/devices.c:150
+msgid "RSSI"
+msgstr "RSSI"
+
+#. 2
+#: ../cli/src/devices.c:151
+msgid "CINR"
+msgstr "CINR"
+
+#. 3
+#: ../cli/src/devices.c:152
+msgid "TX-POW"
+msgstr ""
+
+#. 4
+#: ../cli/src/devices.c:153
+msgid "BSID"
+msgstr ""
+
+#. 0
+#: ../cli/src/devices.c:163 ../cli/src/devices.c:174
msgid "ADDRESS"
msgstr "ADRESO"
#. 1
-#: ../cli/src/devices.c:137 ../cli/src/devices.c:148
+#: ../cli/src/devices.c:164 ../cli/src/devices.c:175
msgid "PREFIX"
msgstr "PREFIKSO"
#. 2
-#: ../cli/src/devices.c:138 ../cli/src/devices.c:149
+#: ../cli/src/devices.c:165 ../cli/src/devices.c:176
msgid "GATEWAY"
msgstr "KLUZO"
#. 0
-#: ../cli/src/devices.c:158 ../cli/src/devices.c:167
+#: ../cli/src/devices.c:185 ../cli/src/devices.c:194
msgid "DNS"
msgstr "DNS"
#. 0
-#: ../cli/src/devices.c:176
+#: ../cli/src/devices.c:203
msgid "SSID"
msgstr "SSID"
#. 1
-#: ../cli/src/devices.c:177
+#: ../cli/src/devices.c:204
msgid "BSSID"
msgstr "BSSID"
#. 2
-#: ../cli/src/devices.c:178
+#: ../cli/src/devices.c:205
msgid "MODE"
msgstr "REĜIMO"
#. 3
-#: ../cli/src/devices.c:179
+#: ../cli/src/devices.c:206
msgid "FREQ"
msgstr "FREKV"
#. 4
-#: ../cli/src/devices.c:180
+#: ../cli/src/devices.c:207
msgid "RATE"
msgstr "TRANSMETRAPIDO"
#. 5
-#: ../cli/src/devices.c:181
+#. 1
+#: ../cli/src/devices.c:208 ../cli/src/devices.c:226
msgid "SIGNAL"
msgstr "SIGNALO"
#. 6
-#: ../cli/src/devices.c:182
+#: ../cli/src/devices.c:209
msgid "SECURITY"
msgstr "SEKURECO"
#. 7
-#: ../cli/src/devices.c:183
+#: ../cli/src/devices.c:210
msgid "WPA-FLAGS"
msgstr "WPA-FLAGOJ"
#. 8
-#: ../cli/src/devices.c:184
+#: ../cli/src/devices.c:211
msgid "RSN-FLAGS"
msgstr "RSN-FLAGOJ"
#. 10
-#: ../cli/src/devices.c:186
+#. 4
+#: ../cli/src/devices.c:213 ../cli/src/devices.c:229
msgid "ACTIVE"
-msgstr "AKTIVA"
+msgstr "AKTIVE"
-#: ../cli/src/devices.c:209
+#: ../cli/src/devices.c:256
#, c-format
msgid ""
"Usage: nmcli dev { COMMAND | help }\n"
"\n"
+" COMMAND := { status | list | disconnect | wifi | wimax }\n"
+"\n"
" COMMAND := { status | list | disconnect | wifi }\n"
"\n"
" status\n"
" list [iface <iface>]\n"
" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+" wimax [list [iface <iface>] [nsp <name>]]\n"
"\n"
msgstr ""
-"Usage: nmcli dev { KOMANDO | help }\n"
+"Uzo: nmcli dev { KOMANDO | help }\n"
+"\n"
+" KOMANDO := { status | list | disconnect | wifi | wimax }\n"
"\n"
" KOMANDO := { status | list | disconnect | wifi }\n"
"\n"
@@ -660,245 +711,314 @@ msgstr ""
" list [iface <iface>]\n"
" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+" wimax [list [iface <iface>] [nsp <name>]]\n"
"\n"
-#: ../cli/src/devices.c:229
+#: ../cli/src/devices.c:284
msgid "unmanaged"
-msgstr "nemastrumata"
+msgstr "nemastrumate"
-#: ../cli/src/devices.c:231
+#: ../cli/src/devices.c:286
msgid "unavailable"
-msgstr "neatingebla"
+msgstr "neatingeble"
-#: ../cli/src/devices.c:233 ../cli/src/network-manager.c:91
+#: ../cli/src/devices.c:288 ../cli/src/network-manager.c:115
msgid "disconnected"
msgstr "nekonektite"
-#: ../cli/src/devices.c:235
+#: ../cli/src/devices.c:290
msgid "connecting (prepare)"
msgstr "konektas (preparo)"
-#: ../cli/src/devices.c:237
+#: ../cli/src/devices.c:292
msgid "connecting (configuring)"
msgstr "konektas (agordado)"
-#: ../cli/src/devices.c:239
+#: ../cli/src/devices.c:294
msgid "connecting (need authentication)"
msgstr "konektas (bezonas aŭtentigon)"
-#: ../cli/src/devices.c:241
+#: ../cli/src/devices.c:296
msgid "connecting (getting IP configuration)"
msgstr "konektas (akiras IP-agordaron)"
-#: ../cli/src/devices.c:243 ../cli/src/network-manager.c:89
+#: ../cli/src/devices.c:298
+msgid "connecting (checking IP connectivity)"
+msgstr ""
+
+#: ../cli/src/devices.c:300
+msgid "connecting (starting secondary connections)"
+msgstr ""
+
+#: ../cli/src/devices.c:302 ../cli/src/network-manager.c:111
msgid "connected"
-msgstr "konektita"
+msgstr "konektite"
-#: ../cli/src/devices.c:245
+#: ../cli/src/devices.c:306
msgid "connection failed"
msgstr "konekto fiaskis"
-#: ../cli/src/devices.c:268 ../cli/src/devices.c:425
+#: ../cli/src/devices.c:331 ../cli/src/devices.c:341 ../cli/src/devices.c:501
+#: ../cli/src/devices.c:545
msgid "Unknown"
-msgstr "Nekonata"
+msgstr "Nekonate"
-#: ../cli/src/devices.c:300
+#: ../cli/src/devices.c:374
msgid "(none)"
-msgstr "(nenio)"
+msgstr "(neniu)"
-#: ../cli/src/devices.c:325
+#: ../cli/src/devices.c:399
#, c-format
msgid "%s: error converting IP4 address 0x%X"
msgstr "%s: eraro dum konverto de IP4-adreso 0x%X"
-#: ../cli/src/devices.c:394
+#: ../cli/src/devices.c:470
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:395
+#: ../cli/src/devices.c:471
#, c-format
msgid "%u MB/s"
msgstr "%u MB/s"
-#: ../cli/src/devices.c:404
+#: ../cli/src/devices.c:480
msgid "Encrypted: "
-msgstr "Ĉifrita: "
+msgstr "Ĉifrite: "
-#: ../cli/src/devices.c:409
+#: ../cli/src/devices.c:485
msgid "WEP "
msgstr "WEP "
-#: ../cli/src/devices.c:411
+#: ../cli/src/devices.c:487
msgid "WPA "
msgstr "WPA "
-#: ../cli/src/devices.c:413
+#: ../cli/src/devices.c:489
msgid "WPA2 "
msgstr "WPA2 "
-#: ../cli/src/devices.c:416
+#: ../cli/src/devices.c:492
msgid "Enterprise "
msgstr "Entrepreno "
-#: ../cli/src/devices.c:425
+#: ../cli/src/devices.c:501
msgid "Ad-Hoc"
msgstr "Laŭcela"
-#: ../cli/src/devices.c:425
+#: ../cli/src/devices.c:501
msgid "Infrastructure"
msgstr "Infrastrukturo"
-#: ../cli/src/devices.c:487
+#: ../cli/src/devices.c:536
+msgid "Home"
+msgstr "Hejmo"
+
+#: ../cli/src/devices.c:539
+msgid "Partner"
+msgstr "Partnero"
+
+#: ../cli/src/devices.c:542
+msgid "Roaming"
+msgstr ""
+
+#: ../cli/src/devices.c:612
#, c-format
msgid "Error: 'dev list': %s"
msgstr "Eraro: 'dev list': %s"
-#: ../cli/src/devices.c:489
+#: ../cli/src/devices.c:614
#, c-format
msgid "Error: 'dev list': %s; allowed fields: %s"
msgstr "Eraro: 'dev list': %s; permesataj kampoj: %s"
-#: ../cli/src/devices.c:498
+#: ../cli/src/devices.c:623
msgid "Device details"
msgstr "Detaloj de aparato"
-#: ../cli/src/devices.c:528 ../cli/src/devices.c:927
+#: ../cli/src/devices.c:657 ../cli/src/devices.c:1152 ../cli/src/utils.c:342
msgid "(unknown)"
-msgstr "(nekonata)"
+msgstr "(nekonate)"
-#: ../cli/src/devices.c:529
+#: ../cli/src/devices.c:658
msgid "unknown)"
-msgstr "nekonata)"
+msgstr "nekonate)"
-#: ../cli/src/devices.c:555
+#: ../cli/src/devices.c:684
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
#. Print header
#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:628
+#: ../cli/src/devices.c:757
msgid "on"
msgstr "enŝaltite"
-#: ../cli/src/devices.c:628
+#: ../cli/src/devices.c:757
msgid "off"
msgstr "elŝaltite"
-#: ../cli/src/devices.c:810
+#: ../cli/src/devices.c:1004
#, c-format
msgid "Error: 'dev status': %s"
msgstr "Eraro: 'dev status': %s"
-#: ../cli/src/devices.c:812
+#: ../cli/src/devices.c:1006
#, c-format
msgid "Error: 'dev status': %s; allowed fields: %s"
msgstr "Eraro: 'dev status': %s; permesataj kampoj: %s"
-#: ../cli/src/devices.c:819
+#: ../cli/src/devices.c:1029
msgid "Status of devices"
msgstr "Stato de aparatoj"
-#: ../cli/src/devices.c:847
+#: ../cli/src/devices.c:1060
#, c-format
msgid "Error: '%s' argument is missing."
msgstr "Eraro: argumento '%s' mankas."
-#: ../cli/src/devices.c:876 ../cli/src/devices.c:1015
-#: ../cli/src/devices.c:1138
+#: ../cli/src/devices.c:1101 ../cli/src/devices.c:1253
+#: ../cli/src/devices.c:1389 ../cli/src/devices.c:1608
#, c-format
msgid "Error: Device '%s' not found."
msgstr "Eraro: Aparato '%s' ne trovita."
-#: ../cli/src/devices.c:899
+#: ../cli/src/devices.c:1124
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "Sukceso: Aparato '%s' sukcese malkonektiĝis."
-#: ../cli/src/devices.c:924
+#: ../cli/src/devices.c:1149
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "Eraro: Aparato '%s' (%s) eraro dum malkonektiĝo: %s"
-#: ../cli/src/devices.c:932
+#: ../cli/src/devices.c:1157
#, c-format
msgid "Device state: %d (%s)\n"
msgstr "Stato de aparato: %d (%s)\n"
-#: ../cli/src/devices.c:996
+#: ../cli/src/devices.c:1222
#, c-format
msgid "Error: iface has to be specified."
msgstr "Eraro: 'iface' devas esti specifata."
-#: ../cli/src/devices.c:1114
+#: ../cli/src/devices.c:1347
#, c-format
msgid "Error: 'dev wifi': %s"
msgstr "Eraro: 'dev wifi': %s"
-#: ../cli/src/devices.c:1116
+#: ../cli/src/devices.c:1349
#, c-format
msgid "Error: 'dev wifi': %s; allowed fields: %s"
msgstr "Eraro: 'dev wifi': %s; permesataj kampoj: %s"
-#: ../cli/src/devices.c:1123
+#: ../cli/src/devices.c:1372
msgid "WiFi scan list"
msgstr "WiFi-skanlisto"
-#: ../cli/src/devices.c:1158 ../cli/src/devices.c:1212
+#: ../cli/src/devices.c:1409 ../cli/src/devices.c:1463
+#: ../cli/src/devices.c:1670
#, c-format
msgid "Error: Access point with hwaddr '%s' not found."
msgstr "Eraro: Retkaptejo kun 'hwaddr' '%s' ne trovita"
-#: ../cli/src/devices.c:1175
+#: ../cli/src/devices.c:1426
#, c-format
msgid "Error: Device '%s' is not a WiFi device."
msgstr "Eraro: Aparato '%s' ne estas WiFi-aparato."
-#: ../cli/src/devices.c:1239
+#: ../cli/src/devices.c:1490
#, c-format
msgid "Error: 'dev wifi' command '%s' is not valid."
msgstr "Eraro: 'dev wifi'-komando '%s' ne validas."
-#: ../cli/src/devices.c:1286
+#: ../cli/src/devices.c:1566
+#, c-format
+msgid "Error: 'dev wimax': %s"
+msgstr "Eraro: 'dev wimax': %s"
+
+#: ../cli/src/devices.c:1568
+#, c-format
+msgid "Error: 'dev wimax': %s; allowed fields: %s"
+msgstr "Eraro: 'dev wimax': %s; permesataj kampoj: %s"
+
+#: ../cli/src/devices.c:1591
+msgid "WiMAX NSP list"
+msgstr ""
+
+#: ../cli/src/devices.c:1628
+#, c-format
+msgid "Error: NSP with name '%s' not found."
+msgstr ""
+
+#: ../cli/src/devices.c:1639
+#, c-format
+msgid "Error: Device '%s' is not a WiMAX device."
+msgstr "Eraro: Aparato '%s' ne estas WiMAX-aparato."
+
+#: ../cli/src/devices.c:1697
+#, c-format
+msgid "Error: 'dev wimax' command '%s' is not valid."
+msgstr "Eraro: 'dev wimax'-komando '%s' ne validas."
+
+#: ../cli/src/devices.c:1747
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "Eraro: 'dev'-komando '%s' ne validas."
-#: ../cli/src/network-manager.c:35
+#: ../cli/src/network-manager.c:37
msgid "RUNNING"
-msgstr "AKTIVA"
+msgstr "AKTIVE"
-#. 1
-#: ../cli/src/network-manager.c:37
+#. 0
+#: ../cli/src/network-manager.c:38
+msgid "VERSION"
+msgstr "VERSIO"
+
+#. 2
+#: ../cli/src/network-manager.c:40
msgid "NET-ENABLED"
msgstr "RET-ENŜALTITE"
-#. 2
-#: ../cli/src/network-manager.c:38
+#. 3
+#: ../cli/src/network-manager.c:41
msgid "WIFI-HARDWARE"
msgstr "WIFI-APARATARO"
-#. 3
-#: ../cli/src/network-manager.c:39
+#. 4
+#: ../cli/src/network-manager.c:42
msgid "WIFI"
msgstr "WIFI"
-#. 4
-#: ../cli/src/network-manager.c:40
+#. 5
+#: ../cli/src/network-manager.c:43
msgid "WWAN-HARDWARE"
msgstr "WWAN-APARATARO"
-#. 5
-#: ../cli/src/network-manager.c:41
+#. 6
+#: ../cli/src/network-manager.c:44
msgid "WWAN"
msgstr "WWAN"
-#: ../cli/src/network-manager.c:64
+#. 7
+#: ../cli/src/network-manager.c:45
+msgid "WIMAX-HARDWARE"
+msgstr "WIMAX-APARATARO"
+
+#. 8
+#: ../cli/src/network-manager.c:46
+msgid "WIMAX"
+msgstr "WIMAX"
+
+#: ../cli/src/network-manager.c:74
#, c-format
msgid ""
"Usage: nmcli nm { COMMAND | help }\n"
"\n"
+" COMMAND := { status | enable | sleep | wifi | wwan | wimax }\n"
+"\n"
" COMMAND := { status | enable | sleep | wifi | wwan }\n"
"\n"
" status\n"
@@ -906,10 +1026,13 @@ msgid ""
" sleep [true|false]\n"
" wifi [on|off]\n"
" wwan [on|off]\n"
+" wimax [on|off]\n"
"\n"
msgstr ""
"Uzo: nmcli nm { KOMANDO | help }\n"
"\n"
+" KOMANDO := { status | enable | sleep | wifi | wwan | wimax }\n"
+"\n"
" KOMANDO := { status | enable | sleep | wifi | wwan }\n"
"\n"
" status\n"
@@ -917,118 +1040,145 @@ msgstr ""
" sleep [true|false]\n"
" wifi [on|off]\n"
" wwan [on|off]\n"
+" wimax [on|off]\n"
"\n"
-#: ../cli/src/network-manager.c:85
+#: ../cli/src/network-manager.c:103
msgid "asleep"
msgstr "dormas"
-#: ../cli/src/network-manager.c:87
+#: ../cli/src/network-manager.c:105
msgid "connecting"
msgstr "konektas"
-#: ../cli/src/network-manager.c:128
+#: ../cli/src/network-manager.c:107
+msgid "connected (local only)"
+msgstr ""
+
+#: ../cli/src/network-manager.c:109
+msgid "connected (site only)"
+msgstr ""
+
+#: ../cli/src/network-manager.c:113
+msgid "disconnecting"
+msgstr "malkonektante"
+
+#: ../cli/src/network-manager.c:153
#, c-format
msgid "Error: 'nm status': %s"
msgstr "Eraro: 'nm status': %s"
-#: ../cli/src/network-manager.c:130
+#: ../cli/src/network-manager.c:155
#, c-format
msgid "Error: 'nm status': %s; allowed fields: %s"
msgstr "Eraro: 'nm status': %s; permesataj kampoj: %s"
-#: ../cli/src/network-manager.c:137
-msgid "NetworkManager status"
-msgstr "Stato de NetworkManager"
-
-#. Print header
-#: ../cli/src/network-manager.c:144 ../cli/src/network-manager.c:145
-#: ../cli/src/network-manager.c:146 ../cli/src/network-manager.c:147
-#: ../cli/src/network-manager.c:154 ../cli/src/network-manager.c:247
-#: ../cli/src/network-manager.c:296 ../cli/src/network-manager.c:328
+#. create NMClient
+#: ../cli/src/network-manager.c:168 ../cli/src/network-manager.c:169
+#: ../cli/src/network-manager.c:170 ../cli/src/network-manager.c:171
+#: ../cli/src/network-manager.c:172 ../cli/src/network-manager.c:174
+#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:296
+#: ../cli/src/network-manager.c:351 ../cli/src/network-manager.c:389
+#: ../cli/src/network-manager.c:428
msgid "enabled"
-msgstr "enŝaltita"
+msgstr "enŝaltite"
-#: ../cli/src/network-manager.c:144 ../cli/src/network-manager.c:145
-#: ../cli/src/network-manager.c:146 ../cli/src/network-manager.c:147
-#: ../cli/src/network-manager.c:154 ../cli/src/network-manager.c:247
-#: ../cli/src/network-manager.c:296 ../cli/src/network-manager.c:328
+#: ../cli/src/network-manager.c:168 ../cli/src/network-manager.c:169
+#: ../cli/src/network-manager.c:170 ../cli/src/network-manager.c:171
+#: ../cli/src/network-manager.c:172 ../cli/src/network-manager.c:174
+#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:296
+#: ../cli/src/network-manager.c:351 ../cli/src/network-manager.c:389
+#: ../cli/src/network-manager.c:428
msgid "disabled"
msgstr "elŝaltite"
-#: ../cli/src/network-manager.c:152
+#: ../cli/src/network-manager.c:188
+msgid "NetworkManager status"
+msgstr "Stato de NetworkManager"
+
+#. Print header
+#: ../cli/src/network-manager.c:191
msgid "running"
-msgstr "aktiva"
+msgstr "aktive"
-#: ../cli/src/network-manager.c:152
+#: ../cli/src/network-manager.c:191
msgid "not running"
-msgstr "neaktiva"
+msgstr "neaktive"
-#: ../cli/src/network-manager.c:175
+#: ../cli/src/network-manager.c:222 ../cli/src/utils.c:322
#, c-format
msgid "Error: Couldn't connect to system bus: %s"
msgstr "Eraro: Ne povis konekti al sistem-buso: %s."
-#: ../cli/src/network-manager.c:186
+#: ../cli/src/network-manager.c:233
#, c-format
msgid "Error: Couldn't create D-Bus object proxy."
msgstr "Eraro: Ne povis krei D-busan objekt-prokurservilon."
-#: ../cli/src/network-manager.c:192
+#: ../cli/src/network-manager.c:239
#, c-format
msgid "Error in sleep: %s"
msgstr "Eraro dum dormo: %s"
-#: ../cli/src/network-manager.c:237 ../cli/src/network-manager.c:286
-#: ../cli/src/network-manager.c:318
+#: ../cli/src/network-manager.c:283 ../cli/src/network-manager.c:338
+#: ../cli/src/network-manager.c:376 ../cli/src/network-manager.c:415
#, c-format
msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
msgstr "Eraro: valoro '--fields' '%s' ne validas tie ĉi; permesataj kampoj: %s"
-#: ../cli/src/network-manager.c:245
+#: ../cli/src/network-manager.c:291
msgid "Networking enabled"
msgstr "Retkonektado enŝaltita"
-#: ../cli/src/network-manager.c:256
+#: ../cli/src/network-manager.c:307
#, c-format
msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
msgstr "Eraro: nevalida 'enŝalt'-parametro: '%s'; uzu 'true' aŭ 'false'."
-#: ../cli/src/network-manager.c:265
+#: ../cli/src/network-manager.c:317
#, c-format
msgid "Error: Sleeping status is not exported by NetworkManager."
msgstr "Eraro: Dorm-stato ne estas elportite de NetworkManager."
-#: ../cli/src/network-manager.c:273
+#: ../cli/src/network-manager.c:325
#, c-format
msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
msgstr "Eraro: nevalida 'dorm'-parametro: '%s'; uzu 'true' aŭ 'false'."
-#: ../cli/src/network-manager.c:294
+#: ../cli/src/network-manager.c:346
msgid "WiFi enabled"
msgstr "WiFi enŝaltita"
-#: ../cli/src/network-manager.c:305
+#: ../cli/src/network-manager.c:362
#, c-format
msgid "Error: invalid 'wifi' parameter: '%s'."
msgstr "Eraro: nevalida 'wifi'-parametro: '%s'."
-#: ../cli/src/network-manager.c:326
+#: ../cli/src/network-manager.c:384
msgid "WWAN enabled"
msgstr "WWAN enŝaltita"
-#: ../cli/src/network-manager.c:337
+#: ../cli/src/network-manager.c:400
#, c-format
msgid "Error: invalid 'wwan' parameter: '%s'."
msgstr "Eraro: nevalida 'wwan'-parametro: '%s'."
-#: ../cli/src/network-manager.c:348
+#: ../cli/src/network-manager.c:423
+msgid "WiMAX enabled"
+msgstr "WiMAX enŝaltita"
+
+#: ../cli/src/network-manager.c:439
+#, c-format
+msgid "Error: invalid 'wimax' parameter: '%s'."
+msgstr "Eraro: nevalida 'wimax'-parametro: '%s'."
+
+#: ../cli/src/network-manager.c:452
#, c-format
msgid "Error: 'nm' command '%s' is not valid."
msgstr "Eraro: 'nm'-komando '%s' ne validas."
-#: ../cli/src/nmcli.c:69
-#, c-format
+#: ../cli/src/nmcli.c:64
+#, fuzzy, c-format
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
"\n"
@@ -1039,6 +1189,8 @@ msgid ""
" -f[ields] <field1,field2,...>|all|common specify fields to output\n"
" -e[scape] yes|no escape columns separators in "
"values\n"
+" -n[ocheck] don't check nmcli and "
+"NetworkManager versions\n"
" -v[ersion] show program version\n"
" -h[elp] print this help\n"
"\n"
@@ -1053,12 +1205,12 @@ msgstr ""
"OPCIOJ\n"
" -t[erse] konciza eligo\n"
" -p[retty] bela eligo\n"
-" -m[ode] tabular|multiline eliga reĝimo\n"
+"|multiline eliga reĝimo\n"
" -f[ields] <field1,field2,...>|all|common specifigi eligo-kampojn\n"
" -e[scape] yes|no eskapaj kolumno-separoj en "
"valoroj\n"
" -v[ersion] montri programversion\n"
-" -h[elp] printi tiun ĉi help-paĝon\n"
+" -h[elp] montri tiun ĉi help-paĝon\n"
"\n"
"OBJEKTO\n"
" nm stato de NetworkManager\n"
@@ -1066,371 +1218,394 @@ msgstr ""
" dev aparatoj mastrumataj de NetworkManager\n"
"\n"
-#: ../cli/src/nmcli.c:113
+#: ../cli/src/nmcli.c:109
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
msgstr "Eraro: Objekto '%s' estas nekonata, provu: 'nmcli help'."
-#: ../cli/src/nmcli.c:143
+#: ../cli/src/nmcli.c:139
#, c-format
msgid "Error: Option '--terse' is specified the second time."
msgstr "Eraro: Opcio '--terse' specifiĝis duan fojon."
-#: ../cli/src/nmcli.c:148
+#: ../cli/src/nmcli.c:144
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
msgstr "Eraro: Opcioj '--terse' kaj '--pretty' ekskludas unu la alian."
-#: ../cli/src/nmcli.c:156
+#: ../cli/src/nmcli.c:152
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "Eraro: Opcio '--pretty' specifiĝis duan fojon."
-#: ../cli/src/nmcli.c:161
+#: ../cli/src/nmcli.c:157
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
msgstr "Eraro: Opcioj '--pretty' kaj '--terse' ekskludas unu la alian."
-#: ../cli/src/nmcli.c:171 ../cli/src/nmcli.c:187
+#: ../cli/src/nmcli.c:167 ../cli/src/nmcli.c:183
#, c-format
msgid "Error: missing argument for '%s' option."
-msgstr "Eraro: mankas argumento por elektindaĵo '%s'."
+msgstr "Eraro: mankas argumento por la opcio '%s'."
-#: ../cli/src/nmcli.c:180 ../cli/src/nmcli.c:196
+#: ../cli/src/nmcli.c:176 ../cli/src/nmcli.c:192
#, c-format
msgid "Error: '%s' is not valid argument for '%s' option."
-msgstr "Eraro: '%s' ne estas valida argumento por elektindaĵo '%s'."
+msgstr "Eraro: '%s' ne estas valida argumento por la opcio '%s'."
-#: ../cli/src/nmcli.c:203
+#: ../cli/src/nmcli.c:199
#, c-format
msgid "Error: fields for '%s' options are missing."
-msgstr "Eraro: kampoj por elektindaĵoj '%s' mankas."
+msgstr "Eraro: kampoj por la opcio '%s' mankas."
-#: ../cli/src/nmcli.c:209
+#: ../cli/src/nmcli.c:207
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "ilo 'nmcli', versio %s\n"
-#: ../cli/src/nmcli.c:215
+#: ../cli/src/nmcli.c:213
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
msgstr "Eraro: Opcio '%s' estas nekonata, provu: 'nmcli -help'."
-#: ../cli/src/nmcli.c:234
+#: ../cli/src/nmcli.c:232
#, c-format
msgid "Caught signal %d, shutting down..."
msgstr "Ricevis signalon '%d', elŝaltas..."
-#: ../cli/src/nmcli.c:259
-#, c-format
-msgid "Error: Could not connect to NetworkManager."
-msgstr "Eraro: Ne eblis konekti al NetworkManager"
+#: ../cli/src/nmcli.c:257
+msgid "Error: Could not create NMClient object."
+msgstr "Eraro: Ne povas krei NMClient-objekton."
-#: ../cli/src/nmcli.c:275
+#: ../cli/src/nmcli.c:273
msgid "Success"
msgstr "Sukceso"
-#: ../cli/src/settings.c:411
+#: ../cli/src/settings.c:423
#, c-format
msgid "%d (hex-ascii-key)"
msgstr "%d (heks-ascii-ŝlosilo)"
-#: ../cli/src/settings.c:413
+#: ../cli/src/settings.c:425
#, c-format
msgid "%d (104/128-bit passphrase)"
-msgstr "%d (104/128-bita pasvorto)"
+msgstr "%d (104/128-bita pasfrazo)"
-#: ../cli/src/settings.c:416
+#: ../cli/src/settings.c:428
#, c-format
msgid "%d (unknown)"
-msgstr "%d (nekonata)"
+msgstr "%d (nekonate)"
-#: ../cli/src/settings.c:442
+#: ../cli/src/settings.c:454
msgid "0 (unknown)"
-msgstr "0 (nekonata)"
+msgstr "0 (nekonate)"
-#: ../cli/src/settings.c:448
+#: ../cli/src/settings.c:460
msgid "any, "
msgstr "ajna, "
-#: ../cli/src/settings.c:450
+#: ../cli/src/settings.c:462
msgid "900 MHz, "
msgstr "900 MHz, "
-#: ../cli/src/settings.c:452
+#: ../cli/src/settings.c:464
msgid "1800 MHz, "
msgstr "1800 MHz, "
-#: ../cli/src/settings.c:454
+#: ../cli/src/settings.c:466
msgid "1900 MHz, "
msgstr "1900 MHz, "
-#: ../cli/src/settings.c:456
+#: ../cli/src/settings.c:468
msgid "850 MHz, "
msgstr "850 MHz, "
-#: ../cli/src/settings.c:458
+#: ../cli/src/settings.c:470
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../cli/src/settings.c:460
+#: ../cli/src/settings.c:472
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../cli/src/settings.c:462
+#: ../cli/src/settings.c:474
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../cli/src/settings.c:464
+#: ../cli/src/settings.c:476
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../cli/src/settings.c:466
+#: ../cli/src/settings.c:478
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../cli/src/settings.c:468
+#: ../cli/src/settings.c:480
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../cli/src/settings.c:470
+#: ../cli/src/settings.c:482
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../cli/src/settings.c:554 ../cli/src/settings.c:721
+#: ../cli/src/settings.c:566 ../cli/src/settings.c:732
msgid "auto"
msgstr "aŭto"
-#: ../cli/src/settings.c:716 ../cli/src/settings.c:719
-#: ../cli/src/settings.c:720 ../cli/src/utils.c:172
+#: ../cli/src/settings.c:727 ../cli/src/settings.c:730
+#: ../cli/src/settings.c:731 ../cli/src/utils.c:176
msgid "not set"
-msgstr "neagordita"
+msgstr "neagordite"
-#: ../cli/src/utils.c:124
+#: ../cli/src/utils.c:128
#, c-format
msgid "field '%s' has to be alone"
msgstr "kampo '%s' devas esti sola"
-#: ../cli/src/utils.c:127
+#: ../cli/src/utils.c:131
#, c-format
msgid "invalid field '%s'"
msgstr "nevalida kampo '%s'"
-#: ../cli/src/utils.c:146
+#: ../cli/src/utils.c:150
#, c-format
msgid "Option '--terse' requires specifying '--fields'"
-msgstr "Elektindaĵo '--terse' postulas specifigon de '--fields'"
+msgstr "Opcio '--terse' postulas specifigon de '--fields'"
-#: ../cli/src/utils.c:150
+#: ../cli/src/utils.c:154
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
msgstr ""
-"Elektindaĵo '--terse' postulas specifajn elektindajn valorojn de '--fields', "
-"ne '%s'"
+"Opcio '--terse' postulas specifajn elektindajn valorojn de '--fields', ne "
+"'%s'"
+
+#: ../cli/src/utils.c:333
+#, c-format
+msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
+msgstr "Eraro: Ne povas krei D-Bus-prokurilobjekto por org.freedesktop.DBus"
+
+#: ../cli/src/utils.c:341
+#, c-format
+msgid "Error: NameHasOwner request failed: %s"
+msgstr "Eraro: NameHasOwner-peto fiaskis: %s"
+
+#: ../cli/src/utils.c:386
+#, c-format
+msgid ""
+"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
+"nocheck to suppress the warning.\n"
+msgstr ""
+
+#: ../cli/src/utils.c:395
+#, c-format
+msgid ""
+"Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force "
+"execution using --nocheck, but the results are unpredictable."
+msgstr ""
-#: ../libnm-util/crypto.c:121
+#: ../libnm-util/crypto.c:127
#, c-format
msgid "PEM key file had no end tag '%s'."
msgstr "PEM-ŝlosil-dosiero ne havis finan etikedon '%s'."
-#: ../libnm-util/crypto.c:131
+#: ../libnm-util/crypto.c:140
#, c-format
msgid "Doesn't look like a PEM private key file."
msgstr "Tio ĉi ne aspektas kiel privat-ŝlosila PEM-dosiero."
-#: ../libnm-util/crypto.c:139
+#: ../libnm-util/crypto.c:148
#, c-format
msgid "Not enough memory to store PEM file data."
msgstr "Malsufiĉas memoro por stori datenojn de PEM-dosiero."
-#: ../libnm-util/crypto.c:155
+#: ../libnm-util/crypto.c:164
#, c-format
msgid "Malformed PEM file: Proc-Type was not first tag."
msgstr "Misforma PEM-dosiero: 'Proc-Type' ne estas la unua etikedo."
-#: ../libnm-util/crypto.c:163
+#: ../libnm-util/crypto.c:172
#, c-format
msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
msgstr "Misforma PEM-dosiero: nekonata Proc-Type-etikedo \"%s\"."
-#: ../libnm-util/crypto.c:173
+#: ../libnm-util/crypto.c:182
#, c-format
msgid "Malformed PEM file: DEK-Info was not the second tag."
msgstr "Misforma PEM-dosiero: 'DEK-Info' ne estas la dua etikedo."
-#: ../libnm-util/crypto.c:184
+#: ../libnm-util/crypto.c:193
#, c-format
msgid "Malformed PEM file: no IV found in DEK-Info tag."
msgstr "Misforma PEM-dosiero: mi ne trovis IV en la etikedo \"DEK-Info\"."
-#: ../libnm-util/crypto.c:191
+#: ../libnm-util/crypto.c:200
#, c-format
msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
msgstr ""
"Misforma PEM-dosiero: nevalida struktturo de IV en la etikedo \"DEK-Info\"."
-#: ../libnm-util/crypto.c:204
+#: ../libnm-util/crypto.c:213
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
msgstr "Misforma PEM-dosiero: nekonata privat-ŝlosila ĉifro \"%s\"."
-#: ../libnm-util/crypto.c:223
+#: ../libnm-util/crypto.c:232
#, c-format
msgid "Could not decode private key."
msgstr "Ne eblis malĉifri la privatan ŝlosilon."
-#: ../libnm-util/crypto.c:268
-#, c-format
-msgid "PEM certificate '%s' had no end tag '%s'."
-msgstr "La PEM-certigilo \"%s\" ne havas finan etikedon \"%s\"."
-
-#: ../libnm-util/crypto.c:278
-#, c-format
-msgid "Failed to decode certificate."
-msgstr "Malsuksesis malĉifri la certigilon."
-
-#: ../libnm-util/crypto.c:287
+#: ../libnm-util/crypto.c:268 ../libnm-util/crypto.c:554
#, c-format
msgid "Not enough memory to store certificate data."
msgstr "Malsufiĉas memoro por stori la datenojn de la certigilo."
-#: ../libnm-util/crypto.c:295
-#, c-format
-msgid "Not enough memory to store file data."
-msgstr "Malsufiĉas memoro por stori la datenojn de la dosiero."
-
-#: ../libnm-util/crypto.c:325
+#: ../libnm-util/crypto.c:294
#, c-format
msgid "IV must be an even number of bytes in length."
msgstr "IV nepre amkplesu paran nombron da bajtoj."
-#: ../libnm-util/crypto.c:334
+#: ../libnm-util/crypto.c:303
#, c-format
msgid "Not enough memory to store the IV."
msgstr "Malsufiĉas memoro por stori la IV-on."
-#: ../libnm-util/crypto.c:345
+#: ../libnm-util/crypto.c:314
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "IV enhavas nedeksesumajn ciferojn"
-#: ../libnm-util/crypto.c:383 ../libnm-util/crypto_gnutls.c:148
-#: ../libnm-util/crypto_gnutls.c:266 ../libnm-util/crypto_nss.c:171
-#: ../libnm-util/crypto_nss.c:336
+#: ../libnm-util/crypto.c:352 ../libnm-util/crypto_gnutls.c:147
+#: ../libnm-util/crypto_gnutls.c:265 ../libnm-util/crypto_nss.c:167
+#: ../libnm-util/crypto_nss.c:332
#, c-format
msgid "Private key cipher '%s' was unknown."
msgstr "Privata Cipher-ŝlosilo '%s' estas nekonata."
-#: ../libnm-util/crypto.c:392
+#: ../libnm-util/crypto.c:361
#, c-format
msgid "Not enough memory to decrypt private key."
msgstr "Nesufiĉa memoro por malĉifri privatan ŝlosilon."
-#: ../libnm-util/crypto.c:512
+#: ../libnm-util/crypto.c:426
+#, c-format
+msgid "Not enough memory to store decrypted private key."
+msgstr "Nesufiĉa memoro por gardi privatan ŝlosilon malĉifritan."
+
+#: ../libnm-util/crypto.c:471
#, c-format
msgid "Unable to determine private key type."
msgstr "Ne eblas determini la tipon de la privata ŝlosilo."
-#: ../libnm-util/crypto.c:531
+#: ../libnm-util/crypto.c:526
#, c-format
-msgid "Not enough memory to store decrypted private key."
-msgstr "Nesufiĉa memoro por gardi privatan ŝlosilon malĉifritan."
+msgid "PEM certificate had no start tag '%s'."
+msgstr "La PEM-certigilo ne havas start-etikedon \"%s\"."
+
+#: ../libnm-util/crypto.c:535
+#, c-format
+msgid "PEM certificate had no end tag '%s'."
+msgstr "La PEM-certigilo ne havas finan etikedon \"%s\"."
+
+#: ../libnm-util/crypto.c:559
+#, c-format
+msgid "Failed to decode certificate."
+msgstr "Malsuksesis malĉifri la certigilon."
-#: ../libnm-util/crypto_gnutls.c:49
+#: ../libnm-util/crypto_gnutls.c:50
msgid "Failed to initialize the crypto engine."
msgstr "Pretigo de la kriptografia maŝino fiaskis."
-#: ../libnm-util/crypto_gnutls.c:93
+#: ../libnm-util/crypto_gnutls.c:92
#, c-format
msgid "Failed to initialize the MD5 engine: %s / %s."
msgstr "Pretigo de la MD5-maŝino fiaskis: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:156
+#: ../libnm-util/crypto_gnutls.c:155
#, c-format
msgid "Invalid IV length (must be at least %zd)."
msgstr "Nevalida amplekso por IV (devas esti almenaŭ %zd)."
-#: ../libnm-util/crypto_gnutls.c:165 ../libnm-util/crypto_nss.c:188
+#: ../libnm-util/crypto_gnutls.c:164 ../libnm-util/crypto_nss.c:184
#, c-format
msgid "Not enough memory for decrypted key buffer."
msgstr "Nesufiĉa memoro por bufro de la malĉifrita ŝlosilo."
-#: ../libnm-util/crypto_gnutls.c:173
+#: ../libnm-util/crypto_gnutls.c:172
#, c-format
msgid "Failed to initialize the decryption cipher context: %s / %s."
msgstr "Fiaskis pravalorizi la malĉifran Cipher-kuntekston: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:182
+#: ../libnm-util/crypto_gnutls.c:181
#, c-format
msgid "Failed to set symmetric key for decryption: %s / %s."
msgstr "Fiaskis agordi simetrian ŝlosilon por malĉifro: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:191
+#: ../libnm-util/crypto_gnutls.c:190
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
msgstr "Fiaskis agordi IV por malĉifro: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:200
+#: ../libnm-util/crypto_gnutls.c:199
#, c-format
msgid "Failed to decrypt the private key: %s / %s."
msgstr "Fiaskis malĉifri la privatan ŝlosilon: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:210 ../libnm-util/crypto_nss.c:267
+#: ../libnm-util/crypto_gnutls.c:209 ../libnm-util/crypto_nss.c:263
#, c-format
msgid "Failed to decrypt the private key: unexpected padding length."
msgstr "Fiaskis malĉifri la privatan ŝlosilon: neatendita ŝtopada longo."
-#: ../libnm-util/crypto_gnutls.c:221 ../libnm-util/crypto_nss.c:278
+#: ../libnm-util/crypto_gnutls.c:220 ../libnm-util/crypto_nss.c:274
#, c-format
msgid "Failed to decrypt the private key."
msgstr "Fiaskis malĉifri la privatan ŝlosilon."
-#: ../libnm-util/crypto_gnutls.c:286 ../libnm-util/crypto_nss.c:356
+#: ../libnm-util/crypto_gnutls.c:285 ../libnm-util/crypto_nss.c:352
#, c-format
msgid "Could not allocate memory for encrypting."
msgstr "Ne eblis rezervi memoron por ĉifrado."
-#: ../libnm-util/crypto_gnutls.c:294
+#: ../libnm-util/crypto_gnutls.c:293
#, c-format
msgid "Failed to initialize the encryption cipher context: %s / %s."
msgstr "Fiaskis valorizi la ĉifradan kuntekston: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:303
+#: ../libnm-util/crypto_gnutls.c:302
#, c-format
msgid "Failed to set symmetric key for encryption: %s / %s."
msgstr "Fiaskis agordi simetrian ŝlosilon por ĉifrado: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:313
+#: ../libnm-util/crypto_gnutls.c:312
#, c-format
msgid "Failed to set IV for encryption: %s / %s."
msgstr "Fiaskis agordi IV por ĉifrado: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:322
+#: ../libnm-util/crypto_gnutls.c:321
#, c-format
msgid "Failed to encrypt the data: %s / %s."
msgstr "Ĉifrado de datumoj malsukcesis: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:362
+#: ../libnm-util/crypto_gnutls.c:361
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "Eraro dum pravalorizo de atestilaj datumoj: %s"
-#: ../libnm-util/crypto_gnutls.c:384
+#: ../libnm-util/crypto_gnutls.c:383
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "Ne povis malkodi certigilon: %s"
-#: ../libnm-util/crypto_gnutls.c:408
+#: ../libnm-util/crypto_gnutls.c:407
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %s"
msgstr "Ne povis pravalorizi PKCS#12-malkodilon: %s"
-#: ../libnm-util/crypto_gnutls.c:421
+#: ../libnm-util/crypto_gnutls.c:420
#, c-format
msgid "Couldn't decode PKCS#12 file: %s"
msgstr "Ne eblis dekodi PKCS#12-dosieron: %s"
-#: ../libnm-util/crypto_gnutls.c:433
+#: ../libnm-util/crypto_gnutls.c:432
#, c-format
msgid "Couldn't verify PKCS#12 file: %s"
msgstr "No povis kontroli PKCS#12-dosieron: %s"
@@ -1440,278 +1615,248 @@ msgstr "No povis kontroli PKCS#12-dosieron: %s"
msgid "Failed to initialize the crypto engine: %d."
msgstr "Pravalorigo de la kriptografia maŝino fiaskis: %d."
-#: ../libnm-util/crypto_nss.c:111
+#: ../libnm-util/crypto_nss.c:107
#, c-format
msgid "Failed to initialize the MD5 context: %d."
msgstr "Fiaskis pravalorizi la MD5-kuntekston: %d."
-#: ../libnm-util/crypto_nss.c:179
+#: ../libnm-util/crypto_nss.c:175
#, c-format
msgid "Invalid IV length (must be at least %d)."
msgstr "Nevalida IV-longo (devas esti almenaŭ %d)."
-#: ../libnm-util/crypto_nss.c:196
+#: ../libnm-util/crypto_nss.c:192
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "Fiaskis pravalorizi la malĉifran Cipher-foldon."
-#: ../libnm-util/crypto_nss.c:206
+#: ../libnm-util/crypto_nss.c:202
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "Fiaskis agordi simetrian ŝlosilon por malĉifrado."
-#: ../libnm-util/crypto_nss.c:216
+#: ../libnm-util/crypto_nss.c:212
#, c-format
msgid "Failed to set IV for decryption."
msgstr "Fiaskis agordi IV por malĉifrado."
-#: ../libnm-util/crypto_nss.c:224
+#: ../libnm-util/crypto_nss.c:220
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "Fiaskis pravalorizi la malĉifran kuntekston."
-#: ../libnm-util/crypto_nss.c:237
+#: ../libnm-util/crypto_nss.c:233
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "Fiaskis malĉifri la privatan ŝlosilon: %d."
-#: ../libnm-util/crypto_nss.c:245
+#: ../libnm-util/crypto_nss.c:241
#, c-format
msgid "Failed to decrypt the private key: decrypted data too large."
msgstr "Fiaskis malĉifri la privatan ŝlosilon: malĉifritaj datumoj tro longas."
-#: ../libnm-util/crypto_nss.c:256
+#: ../libnm-util/crypto_nss.c:252
#, c-format
msgid "Failed to finalize decryption of the private key: %d."
msgstr "Fiaskis fini malĉifradon de la privata ŝlosilo: %d."
-#: ../libnm-util/crypto_nss.c:364
+#: ../libnm-util/crypto_nss.c:360
#, c-format
msgid "Failed to initialize the encryption cipher slot."
msgstr "Fiaskis pravalorizi la ĉifran Cipher-foldon."
-#: ../libnm-util/crypto_nss.c:372
+#: ../libnm-util/crypto_nss.c:368
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "Fiaskis agordi simetrian ŝlosilon por ĉifrado."
-#: ../libnm-util/crypto_nss.c:380
+#: ../libnm-util/crypto_nss.c:376
#, c-format
msgid "Failed to set IV for encryption."
msgstr "Fiaskis agordi IV por ĉifrado."
-#: ../libnm-util/crypto_nss.c:388
+#: ../libnm-util/crypto_nss.c:384
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "Fiaskis pravalorizi la ĉifradan kuntekston."
-#: ../libnm-util/crypto_nss.c:396
+#: ../libnm-util/crypto_nss.c:392
#, c-format
msgid "Failed to encrypt: %d."
msgstr "Fiaskis ĉifri: %d."
-#: ../libnm-util/crypto_nss.c:404
+#: ../libnm-util/crypto_nss.c:400
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "Neatendita nombro da datumoj post ĉifrado."
-#: ../libnm-util/crypto_nss.c:447
+#: ../libnm-util/crypto_nss.c:443
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "Ne povis malkodigi atestilon: %d"
-#: ../libnm-util/crypto_nss.c:482
+#: ../libnm-util/crypto_nss.c:478
#, c-format
msgid "Couldn't convert password to UCS2: %d"
msgstr "Ne povis konverti pasvorton al UCS2: %d"
-#: ../libnm-util/crypto_nss.c:510
+#: ../libnm-util/crypto_nss.c:506
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %d"
msgstr "Ne povis pravalorizi PKCS#12-malkodilon: %d"
-#: ../libnm-util/crypto_nss.c:519
+#: ../libnm-util/crypto_nss.c:515
#, c-format
msgid "Couldn't decode PKCS#12 file: %d"
msgstr "Ne povis malkodigi PKCS#12-dosieron: %d"
-#: ../libnm-util/crypto_nss.c:528
+#: ../libnm-util/crypto_nss.c:524
#, c-format
msgid "Couldn't verify PKCS#12 file: %d"
msgstr "Ne povis kontroli PKCS#12-dosieron: %d"
-#: ../libnm-util/crypto_nss.c:557
+#: ../libnm-util/crypto_nss.c:553
msgid "Could not generate random data."
msgstr "Ne povis generi hazardajn datumojn."
-#: ../libnm-util/nm-utils.c:1975
+#: ../libnm-util/nm-utils.c:2000
#, c-format
msgid "Not enough memory to make encryption key."
msgstr "Nesufiĉa memoro por fari ĉifran ŝlosilon."
-#: ../libnm-util/nm-utils.c:2085
+#: ../libnm-util/nm-utils.c:2110
msgid "Could not allocate memory for PEM file creation."
msgstr "Ne povis atribui memoron por kreo de PEM-dosiero."
-#: ../libnm-util/nm-utils.c:2097
+#: ../libnm-util/nm-utils.c:2122
#, c-format
msgid "Could not allocate memory for writing IV to PEM file."
msgstr "Ne povis atribui memoron por konservi IV en PEM-dosieron."
-#: ../libnm-util/nm-utils.c:2109
+#: ../libnm-util/nm-utils.c:2134
#, c-format
msgid "Could not allocate memory for writing encrypted key to PEM file."
msgstr ""
"Ne povis atribui memoron por konservi ĉifritan ŝlosilon en PEM-dosieron."
-#: ../libnm-util/nm-utils.c:2128
+#: ../libnm-util/nm-utils.c:2153
#, c-format
msgid "Could not allocate memory for PEM file data."
msgstr "Ne povis atribui memoron por datumoj de PEM-dosiero."
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
-msgid "Connection sharing via a protected WiFi network"
-msgstr "Kundivido de konektoj per protektita WiFi-reto"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
-msgid "Connection sharing via an open WiFi network"
-msgstr "Kundivido de konektoj per malferma WiFi-reto"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
-msgid "Modify persistent system hostname"
-msgstr "Modifi permanentan sisteman gastigan nomon"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
-msgid "Modify system connections"
-msgstr "Modifi sistemajn konektojn"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
-msgid "System policy prevents modification of system settings"
-msgstr "Sistempolico preventas modifadon de sistemagordoj"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
-msgid "System policy prevents modification of the persistent system hostname"
-msgstr "Sistempolico preventas modifadon de la konstanta sistem-gastnomo"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
-msgid "System policy prevents sharing connections via a protected WiFi network"
-msgstr "Sistempolico preventas kundividon de konektoj per protektita WiFi-reto"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
-msgid "System policy prevents sharing connections via an open WiFi network"
-msgstr "Sistempolitiko preventas kundividon de konektoj per malferma WiFi-reto"
-
#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
msgid "Allow control of network connections"
msgstr "Permesi kontrolon de retkonektoj"
#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
-msgid "Allow use of user-specific connections"
-msgstr "Permesi uzon de specifaj konektoj por uzantoj"
+msgid "Connection sharing via a protected WiFi network"
+msgstr "Kundivido de konektoj per protektita WiFi-reto"
#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
+msgid "Connection sharing via an open WiFi network"
+msgstr "Kundivido de konektoj per malferma WiFi-reto"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
msgid "Enable or disable WiFi devices"
msgstr "Enŝalti aŭ elŝalti WiFi-aparatojn"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+msgid "Enable or disable WiMAX mobile broadband devices"
+msgstr "Enŝalti aŭ elŝalti WiMAX-larĝkapacitajn aparatojn"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
msgid "Enable or disable mobile broadband devices"
msgstr "Enŝalti aŭ elŝalti poŝtelefonajn larĝkapacitajn aparatojn"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
msgid "Enable or disable system networking"
msgstr "Enŝalti aŭ elŝalti sistemretkonektadon"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
+msgid "Modify network connections for all users"
+msgstr "Modifi retkonektojn por ĉiuj uzantoj"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
+msgid "Modify persistent system hostname"
+msgstr "Modifi permanentan sisteman gastigan nomon"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
+msgid "Modify personal network connections"
+msgstr "Modifi proprajn retkonektojn"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
msgid ""
"Put NetworkManager to sleep or wake it up (should only be used by system "
"power management)"
msgstr ""
"Dormigi aŭ veki NetworkManager (estu uzata nur de sistema energimastumado)"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
msgid "System policy prevents control of network connections"
msgstr "Sistempolitiko preventas kontrolon de retkonektoj"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:13
msgid "System policy prevents enabling or disabling WiFi devices"
-msgstr "Sistempolitiko preventas enŝalton aŭ malŝalton de WiFi-aparatoj"
+msgstr "Sistempolitiko preventas enŝalton aŭ elŝalton de WiFi-aparatoj"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:14
+msgid ""
+"System policy prevents enabling or disabling WiMAX mobile broadband devices"
+msgstr ""
+"Sistempolitiko preventas enŝalton aŭ elŝalton de larĝkapacitaj WiMAX-"
+"aparatoj"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:15
msgid "System policy prevents enabling or disabling mobile broadband devices"
msgstr ""
-"Sistempolitiko preventas enŝalton aŭ malŝalton de poŝtelefonaj larĝkapacitaj "
+"Sistempolitiko preventas enŝalton aŭ elŝalton de poŝtelefonaj larĝkapacitaj "
"aparatoj"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:16
msgid "System policy prevents enabling or disabling system networking"
-msgstr "Sistempolitiko preventas enŝalton aŭ malŝalton de sistema retkonektado"
-
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
-msgid "System policy prevents putting NetworkManager to sleep or waking it up"
-msgstr "Sistempolitiko preventas dormigi aŭ veki NetworkManager"
-
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
-msgid "System policy prevents use of user-specific connections"
-msgstr "Sistempolitiko preventas uzon de uzant-specifaj konektoj"
+msgstr "Sistempolitiko preventas enŝalton aŭ elŝalton de sistema retkonektado"
-#: ../src/nm-netlink-monitor.c:100 ../src/nm-netlink-monitor.c:231
-#: ../src/nm-netlink-monitor.c:653
-#, c-format
-msgid "error processing netlink message: %s"
-msgstr "eraro dum traktado de netlink-mesaĝo: %s"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:17
+msgid "System policy prevents modification of network settings for all users"
+msgstr "Sistempolitiko preventas modifadon de retagordoj por ĉiuj uzantoj"
-#: ../src/nm-netlink-monitor.c:214
-msgid "error occurred while waiting for data on socket"
-msgstr "okazis eraro dum atendado je datumoj sur kontaktoskatolo"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:18
+msgid "System policy prevents modification of personal network settings"
+msgstr "Sistempolitiko preventas modifadon de propraj retagordoj"
-#: ../src/nm-netlink-monitor.c:254
-#, c-format
-msgid "unable to connect to netlink for monitoring link status: %s"
-msgstr "ne eblas konekti al netlink por kontroli ligilan staton: %s"
-
-#: ../src/nm-netlink-monitor.c:265
-#, c-format
-msgid "unable to enable netlink handle credential passing: %s"
-msgstr "ne povis aktivigi la netlink-tenilan legitimaĵo-pasadon: %s"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:19
+msgid "System policy prevents modification of the persistent system hostname"
+msgstr "Sistempolitiko preventas modifadon de la konstanta sistem-gastnomo"
-#: ../src/nm-netlink-monitor.c:291 ../src/nm-netlink-monitor.c:353
-#, c-format
-msgid "unable to allocate netlink handle for monitoring link status: %s"
-msgstr "ne povis atribui retligiltenilon por kontroli ligilstaton: %s"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:20
+msgid "System policy prevents putting NetworkManager to sleep or waking it up"
+msgstr "Sistempolitiko preventas dormigi aŭ veki NetworkManager"
-#: ../src/nm-netlink-monitor.c:376
-#, c-format
-msgid "unable to allocate netlink link cache for monitoring link status: %s"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:21
+msgid "System policy prevents sharing connections via a protected WiFi network"
msgstr ""
-"ne povis atribui ligilan kaŝmemoron de netlink por kontroli ligilstaton: %s"
-
-#: ../src/nm-netlink-monitor.c:502
-#, c-format
-msgid "unable to join netlink group: %s"
-msgstr "ne eblas membriĝi al retligila grupo: %s"
+"Sistempolitiko preventas kundividon de konektoj per protektita WiFi-reto"
-#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642
-#, c-format
-msgid "error updating link cache: %s"
-msgstr "eraro dum ĝisdatigo de ligila kaŝmemoro: %s"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:22
+msgid "System policy prevents sharing connections via an open WiFi network"
+msgstr "Sistempolitiko preventas kundividon de konektoj per malferma WiFi-reto"
-#: ../src/main.c:502
+#: ../src/main.c:530
#, c-format
msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgstr ""
-"Nevalida elektindaĵo. Bonvolu uzi --help por vidi liston da validaj "
-"elektindaĵoj.\n"
+"Nevalida opcio. Bonvolu uzi --help por vidi liston da validaj opcioj.\n"
-#: ../src/main.c:573
+#: ../src/main.c:611
#, c-format
msgid "%s. Please use --help to see a list of valid options.\n"
-msgstr "%s. Bovolu uzi --help por vidi liston da validaj elektindaĵoj.\n"
+msgstr "%s. Bovolu uzi --help por vidi liston da validaj opcioj.\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:328
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:62
msgid "# Created by NetworkManager\n"
msgstr "# Kreita de NetworkManager\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:344
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:69
#, c-format
msgid ""
"# Merged from %s\n"
@@ -1722,7 +1867,7 @@ msgstr ""
#: ../src/dhcp-manager/nm-dhcp-manager.c:284
msgid "no usable DHCP client could be found."
-msgstr "neniu uzebla DHCP-kliento estis trovebla"
+msgstr "neniu uzebla DHCP-kliento estis trovebla."
#: ../src/dhcp-manager/nm-dhcp-manager.c:293
msgid "'dhclient' could be found."
@@ -1737,30 +1882,168 @@ msgstr "'dhcpcd' povis esti trovita."
msgid "unsupported DHCP client '%s'"
msgstr "nesubtenata DHCP-kliento '%s'"
-#: ../src/logging/nm-logging.c:146
+#: ../src/dns-manager/nm-dns-manager.c:369
+msgid "NOTE: the libc resolver may not support more than 3 nameservers."
+msgstr "NOTO: la libc-solvilo eble ne povus subteni pli ol 3 nomservilojn."
+
+#: ../src/dns-manager/nm-dns-manager.c:371
+msgid "The nameservers listed below may not be recognized."
+msgstr "La sube ligstigitaj nomserviloj eble ne estos rekonataj."
+
+#: ../src/logging/nm-logging.c:149
#, c-format
msgid "Unknown log level '%s'"
msgstr "Nekonata protokolnivelo '%s'"
-#: ../src/logging/nm-logging.c:171
+#: ../src/logging/nm-logging.c:174
#, c-format
msgid "Unknown log domain '%s'"
msgstr "Nekonata protokola regiono '%s'"
-#: ../src/dns-manager/nm-dns-manager.c:367
-msgid "NOTE: the libc resolver may not support more than 3 nameservers."
-msgstr "NOTO: la libc-solvilo eble ne povus subteni pli ol 3 nomservilojn."
+#: ../src/modem-manager/nm-modem-cdma.c:296 ../src/nm-device-bt.c:355
+#, c-format
+msgid "CDMA connection %d"
+msgstr "CDMA-konekto %d"
-#: ../src/dns-manager/nm-dns-manager.c:369
-msgid "The nameservers listed below may not be recognized."
-msgstr "La sube ligstigitaj nomserviloj eble ne estos rekonataj."
+#: ../src/modem-manager/nm-modem-gsm.c:499 ../src/nm-device-bt.c:351
+#, c-format
+msgid "GSM connection %d"
+msgstr "GSM-konekto %d"
+
+#: ../src/nm-device-bt.c:326
+#, c-format
+msgid "PAN connection %d"
+msgstr "PAN-konekto %d"
+
+#: ../src/nm-device-bt.c:359
+#, c-format
+msgid "DUN connection %d"
+msgstr "DUN-konekto %d"
+
+#: ../src/nm-device-ethernet.c:1681
+#, c-format
+msgid "PPPoE connection %d"
+msgstr "PPPoE-konekto %d"
-#: ../src/system-settings/nm-default-wired-connection.c:157
+#: ../src/nm-device-ethernet.c:1681 ../src/settings/nm-settings-utils.c:50
#, c-format
-msgid "Auto %s"
-msgstr "Aŭto %s"
+msgid "Wired connection %d"
+msgstr "Drata konekto %d"
-#: ../system-settings/plugins/ifcfg-rh/reader.c:3408
-#: ../system-settings/plugins/ifnet/connection_parser.c:49
+#: ../src/nm-device-olpc-mesh.c:423
+#, c-format
+msgid "Mesh %d"
+msgstr ""
+
+#: ../src/nm-manager.c:673
+#, c-format
+msgid "VPN connection %d"
+msgstr "VPN-konekto %d"
+
+#: ../src/nm-netlink-monitor.c:100 ../src/nm-netlink-monitor.c:231
+#: ../src/nm-netlink-monitor.c:653
+#, c-format
+msgid "error processing netlink message: %s"
+msgstr "eraro dum traktado de netlink-mesaĝo: %s"
+
+#: ../src/nm-netlink-monitor.c:214
+msgid "error occurred while waiting for data on socket"
+msgstr "okazis eraro dum atendado je datumoj sur kontaktoskatolo"
+
+#: ../src/nm-netlink-monitor.c:254
+#, c-format
+msgid "unable to connect to netlink for monitoring link status: %s"
+msgstr "ne eblas konekti al netlink por kontroli ligilan staton: %s"
+
+#: ../src/nm-netlink-monitor.c:265
+#, c-format
+msgid "unable to enable netlink handle credential passing: %s"
+msgstr "ne povis aktivigi la netlink-tenilan legitimaĵo-pasadon: %s"
+
+#: ../src/nm-netlink-monitor.c:291 ../src/nm-netlink-monitor.c:353
+#, c-format
+msgid "unable to allocate netlink handle for monitoring link status: %s"
+msgstr "ne povis atribui retligiltenilon por kontroli ligilstaton: %s"
+
+#: ../src/nm-netlink-monitor.c:376
+#, c-format
+msgid "unable to allocate netlink link cache for monitoring link status: %s"
+msgstr ""
+"ne povis atribui ligilan kaŝmemoron de netlink por kontroli ligilstaton: %s"
+
+#: ../src/nm-netlink-monitor.c:502
+#, c-format
+msgid "unable to join netlink group: %s"
+msgstr "ne eblas membriĝi al retligila grupo: %s"
+
+#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642
+#, c-format
+msgid "error updating link cache: %s"
+msgstr "eraro dum ĝisdatigo de ligila kaŝmemoro: %s"
+
+#: ../src/settings/plugins/ifcfg-rh/reader.c:3512
+#: ../src/settings/plugins/ifnet/connection_parser.c:51
msgid "System"
msgstr "Sistemo"
+
+#~ msgid "SCOPE"
+#~ msgstr "AMPLEKSO"
+
+#~ msgid "DBUS-SERVICE"
+#~ msgstr "DBUS-SERVO"
+
+#~ msgid "system"
+#~ msgstr "sistemo"
+
+#~ msgid "user"
+#~ msgstr "uzanto"
+
+#~ msgid "System connections"
+#~ msgstr "Sistemkonektoj"
+
+#~ msgid "User connections"
+#~ msgstr "Uzanto-konektoj"
+
+#~ msgid "Error: Obtaining active connection for '%s' failed."
+#~ msgstr "Eraro: Akiro de aktiva konekto por '%s' fiaskis."
+
+#~ msgid "Error: Could not get user settings."
+#~ msgstr "Eraro: Ne povis akiri uzanto-agordojn."
+
+#~ msgid "Not enough memory to store file data."
+#~ msgstr "Malsufiĉas memoro por stori la datenojn de la dosiero."
+
+#~ msgid "Allow use of user-specific connections"
+#~ msgstr "Permesi uzon de specifaj konektoj por uzantoj"
+
+#~ msgid "System policy prevents use of user-specific connections"
+#~ msgstr "Sistempolitiko preventas uzon de uzant-specifaj konektoj"
+
+#~ msgid "Auto %s"
+#~ msgstr "Aŭto %s"
+
+#~ msgid ""
+#~ "Usage: nmcli nm { COMMAND | help }\n"
+#~ "\n"
+#~ " COMMAND := { status | sleep | wakeup | wifi | wwan }\n"
+#~ "\n"
+#~ " status\n"
+#~ " sleep\n"
+#~ " wakeup\n"
+#~ " wifi [on|off]\n"
+#~ " wwan [on|off]\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Uzo: nmcli nm { KOMANDO | help }\n"
+#~ "\n"
+#~ " KOMANDO := { status | sleep | wakeup | wifi | wwan }\n"
+#~ "\n"
+#~ " status\n"
+#~ " sleep\n"
+#~ " wakeup\n"
+#~ " wifi [on|off]\n"
+#~ " wwan [on|off]\n"
+#~ "\n"
+
+#~ msgid "Error: Could not connect to NetworkManager."
+#~ msgstr "Eraro: Ne eblis konekti al NetworkManager"
diff --git a/policy/org.freedesktop.NetworkManager.policy b/policy/org.freedesktop.NetworkManager.policy
index 26412ad90..3aea453ad 100644
--- a/policy/org.freedesktop.NetworkManager.policy
+++ b/policy/org.freedesktop.NetworkManager.policy
@@ -42,7 +42,7 @@
<message xml:lang="da">Systempolitik forhindrer aktivering eller deaktivering af systemnetværk</message>
<message xml:lang="de">Die Systemrichtlinien verhindern die Aktivierung oder Deaktivierung von System-Netzwerken</message>
<message xml:lang="el">Η πολιτική συστήματος δεν επιτρέπει ενεργοποίηση ή απενεργοποίηση της δικτύωσης του συστήματος</message>
- <message xml:lang="eo">Sistempolitiko preventas enŝalton aŭ malŝalton de sistema retkonektado</message>
+ <message xml:lang="eo">Sistempolitiko preventas enŝalton aŭ elŝalton de sistema retkonektado</message>
<message xml:lang="es">La política del sistema evita activar o desactivar la red del sistema</message>
<message xml:lang="gl">A normativa do sistema evita a activación ou desactivación da rede do sistema</message>
<message xml:lang="hi">तंत्र संजालन के युक्ति के सक्रियण या निष्क्रियण को तंत्र नीति रोकता है</message>
@@ -160,7 +160,7 @@
<message xml:lang="da">Systempolitik forhindrer aktivering eller deaktivering af WiFi-enheder</message>
<message xml:lang="de">Die Systemrichtlinien verhindern die Aktivierung oder Deaktivierung von WLAN-Geräten</message>
<message xml:lang="el">Η πολιτική συστήματος δεν επιτρέπει ενεργοποίηση ή απενεργοποίηση συσκευών ανοιχτού ασύρματου δικτύου (WiFi)</message>
- <message xml:lang="eo">Sistempolitiko preventas enŝalton aŭ malŝalton de WiFi-aparatoj</message>
+ <message xml:lang="eo">Sistempolitiko preventas enŝalton aŭ elŝalton de WiFi-aparatoj</message>
<message xml:lang="es">La política de sistema evita activar o desactivar los dispositivos inalámbricos</message>
<message xml:lang="gl">A normativa do sistema evita a activación e desactivación dos dispositivos WiFi</message>
<message xml:lang="hi">WiFi युक्ति के सक्रियण या निष्क्रियण को तंत्र नीति रोकता है</message>
@@ -219,7 +219,7 @@
<message xml:lang="da">Systempolitik forhindrer aktivering eller deaktivering af mobile bredbåndsenheder</message>
<message xml:lang="de">Die Systemrichtlinien verhindern die Aktivierung oder Deaktivierung mobiler Breitbandgeräte</message>
<message xml:lang="el">Η πολιτική του συστήματος δεν επιτρέπει την ενεργοποίηση ή απενεργοποίηση συσκευών ευρυζωνικότητας κινητής τηλεφωνίας</message>
- <message xml:lang="eo">Sistempolitiko preventas enŝalton aŭ malŝalton de poŝtelefonaj larĝkapacitaj aparatoj</message>
+ <message xml:lang="eo">Sistempolitiko preventas enŝalton aŭ elŝalton de poŝtelefonaj larĝkapacitaj aparatoj</message>
<message xml:lang="es">La política del sistema evita activar o desactivar los dispositivos de banda ancha móvil</message>
<message xml:lang="gl">A normativa do sistema evita a activación ou desactivación dos dispositivos de banda ancha.</message>
<message xml:lang="hi">मोबाइल ब्रॉडबैंड युक्ति के सक्रियण या निष्क्रियण को तंत्र नीति रोकता है</message>
@@ -249,6 +249,7 @@
<description xml:lang="bg">Включване и изключване на устройства за достъп до мобилни мрежи по WiMAX</description>
<description xml:lang="ca">Habilita o inhabilita els dispositius de banda ampla mòbil WiMAX</description>
<description xml:lang="de">Mobile WiMAX-Breitbandgeräte aktivieren oder deaktivieren</description>
+ <description xml:lang="eo">Enŝalti aŭ elŝalti WiMAX-larĝkapacitajn aparatojn</description>
<description xml:lang="es">Activar o desactivar los dispositivos de banda ancha móvil WiMAX</description>
<description xml:lang="hu">WiMAX mobil széles sávú eszközök be- és kikapcsolása</description>
<description xml:lang="ko">와이맥스 모바일 광대역 장치 사용 여부</description>
@@ -258,6 +259,7 @@
<message xml:lang="bg">Политиката на системата не позволява включване и изключване на устройства за мобилни мрежи по WiMAX</message>
<message xml:lang="ca">La política del sistema impedeix habilitar o inhabilitar els dispositius de banda ampla mòbil WiMAX</message>
<message xml:lang="de">Die Systemrichtlinien verhindern die Aktivierung oder Deaktivierung mobiler WiMAX-Breitbandgeräte</message>
+ <message xml:lang="eo">Sistempolitiko preventas enŝalton aŭ elŝalton de larĝkapacitaj WiMAX-aparatoj</message>
<message xml:lang="es">La política del sistema evita activar o desactivar los dispositivos de banda ancha móvil WiMAX</message>
<message xml:lang="hu">A rendszer házirendje megakadályozza a WiMAX mobil széles sávú eszközök be- vagy kikapcsolását</message>
<message xml:lang="ko">시스템 정책이 와이맥스 모바일 광대역 장치의 사용 여부 설정을 금지합니다</message>
@@ -378,7 +380,7 @@
<message xml:lang="de">Die Systemrichtlinien verhindern Verbindungsfreigaben über ein geschütztes WLAN-Netzwerk</message>
<message xml:lang="el">Η πολιτική συστήματος δεν επιτρέπει κοινή χρήση συνδέσεων μέσω προστατευμένου ασύρματου δικτύου</message>
<message xml:lang="en_GB">System policy prevents sharing connections via a protected Wi-Fi network</message>
- <message xml:lang="eo">Sistempolico preventas kundividon de konektoj per protektita WiFi-reto</message>
+ <message xml:lang="eo">Sistempolitiko preventas kundividon de konektoj per protektita WiFi-reto</message>
<message xml:lang="es">La política del sistema evita compartir conexiones a través de una red WiFi protegida</message>
<message xml:lang="eu">Sistemako arauek babestutako haririk gabeko sareen bidez konexioak partekatzea saihesten dute</message>
<message xml:lang="fr">La stratégie du système empêche tout partage des connexions via un réseau WiFi protégé</message>
@@ -501,6 +503,7 @@
<action id="org.freedesktop.NetworkManager.settings.modify.own">
<description>Modify personal network connections</description>
<description xml:lang="de">Eigene Netzwerkverbindungen bearbeiten</description>
+ <description xml:lang="eo">Modifi proprajn retkonektojn</description>
<description xml:lang="es">Modificar las conexiones de red personales</description>
<description xml:lang="hu">Személyes hálózati kapcsolatok módosítása</description>
<description xml:lang="ko">개인 네트워크 연결을 수정합니다</description>
@@ -508,6 +511,7 @@
<description xml:lang="pl">Modyfikacja osobistych połączeń sieciowych</description>
<message>System policy prevents modification of personal network settings</message>
<message xml:lang="de">Die Systemrichtlinien verhindern das Bearbeiten von eigenen Netzwerkeinstellungen</message>
+ <message xml:lang="eo">Sistempolitiko preventas modifadon de propraj retagordoj</message>
<message xml:lang="es">La política del sistema evita la modificación de la configuración personal de la red</message>
<message xml:lang="hu">A rendszer házirendje megakadályozza a személyes hálózati beállítások módosítását</message>
<message xml:lang="ko">시스템 정책이 개인 네트워크 설정의 수정을 금지합니다</message>
@@ -522,6 +526,7 @@
<action id="org.freedesktop.NetworkManager.settings.modify.system">
<description>Modify network connections for all users</description>
<description xml:lang="de">Netzwerkverbindungen für alle Benutzer bearbeiten</description>
+ <description xml:lang="eo">Modifi retkonektojn por ĉiuj uzantoj</description>
<description xml:lang="es">Modificar las conexiones de red para todos los usuarios</description>
<description xml:lang="hu">Hálózati kapcsolatok módosítása minden felhasználó számára</description>
<description xml:lang="ko">모든 사용자의 네트워크 연결을 수정합니다</description>
@@ -529,6 +534,7 @@
<description xml:lang="pl">Modyfikacja połączeń sieciowych dla wszystkich użytkowników</description>
<message>System policy prevents modification of network settings for all users</message>
<message xml:lang="de">Die Systemrichtlinien verhindern das Bearbeiten von Netzwerkeinstellungen für alle Benutzer</message>
+ <message xml:lang="eo">Sistempolitiko preventas modifadon de retagordoj por ĉiuj uzantoj</message>
<message xml:lang="es">La política del sistema evita la modificación de la configuración de la red para todos los usuarios</message>
<message xml:lang="hu">A rendszer házirendje megakadályozza a hálózati beállítások módosítását minden felhasználó számára</message>
<message xml:lang="ko">시스템 정책이 모든 사용자의 네트워크 설정의 수정을 금지합니다</message>
@@ -590,7 +596,7 @@
<message xml:lang="de">Die Systemrichtlinien verhindern das Bearbeiten des ständigen Rechnernamens des Systems</message>
<message xml:lang="el">Η πολιτική συστήματος δεν επιτρέπει τροποποίηση του πάγιου ονόματος συστήματος</message>
<message xml:lang="en_GB">System policy prevents modification of the persistent system hostname</message>
- <message xml:lang="eo">Sistempolico preventas modifadon de la konstanta sistem-gastnomo</message>
+ <message xml:lang="eo">Sistempolitiko preventas modifadon de la konstanta sistem-gastnomo</message>
<message xml:lang="es">La política del sistema evita la modificación del nombre persistente del sistema</message>
<message xml:lang="eu">Sistemako arauek sistemako ostalari-izen iraunkorra aldatzea saihesten dute</message>
<message xml:lang="fr">La stratégie du système empêche toute modification du nom d'hôte du système persistant</message>
diff --git a/src/NetworkManagerUtils.c b/src/NetworkManagerUtils.c
index d069eca75..5a6a61b64 100644
--- a/src/NetworkManagerUtils.c
+++ b/src/NetworkManagerUtils.c
@@ -391,6 +391,38 @@ dump_object_to_props (GObject *object, GHashTable *hash)
}
static void
+dump_dhcp4_to_props (NMDHCP4Config *config, GHashTable *hash)
+{
+ GSList *options, *iter;
+
+ options = nm_dhcp4_config_list_options (config);
+ for (iter = options; iter; iter = g_slist_next (iter)) {
+ const char *option = (const char *) iter->data;
+ const char *val;
+
+ val = nm_dhcp4_config_get_option (config, option);
+ value_hash_add_str (hash, option, val);
+ }
+ g_slist_free (options);
+}
+
+static void
+dump_dhcp6_to_props (NMDHCP6Config *config, GHashTable *hash)
+{
+ GSList *options, *iter;
+
+ options = nm_dhcp6_config_list_options (config);
+ for (iter = options; iter; iter = g_slist_next (iter)) {
+ const char *option = (const char *) iter->data;
+ const char *val;
+
+ val = nm_dhcp6_config_get_option (config, option);
+ value_hash_add_str (hash, option, val);
+ }
+ g_slist_free (options);
+}
+
+static void
fill_device_props (NMDevice *device,
GHashTable *dev_hash,
GHashTable *ip4_hash,
@@ -420,11 +452,11 @@ fill_device_props (NMDevice *device,
dhcp4_config = nm_device_get_dhcp4_config (device);
if (dhcp4_config)
- dump_object_to_props (G_OBJECT (dhcp4_config), dhcp4_hash);
+ dump_dhcp4_to_props (dhcp4_config, dhcp4_hash);
dhcp6_config = nm_device_get_dhcp6_config (device);
if (dhcp6_config)
- dump_object_to_props (G_OBJECT (dhcp6_config), dhcp6_hash);
+ dump_dhcp6_to_props (dhcp6_config, dhcp6_hash);
}
static void
diff --git a/src/backends/Makefile.am b/src/backends/Makefile.am
index fbec9aaf8..c0780d0b5 100644
--- a/src/backends/Makefile.am
+++ b/src/backends/Makefile.am
@@ -63,10 +63,12 @@ endif
libnmbackend_la_LIBADD += \
$(top_builddir)/src/logging/libnm-logging.la \
+ $(LIBNL_LIBS) \
$(DBUS_LIBS) \
$(GLIB_LIBS)
libnmbackend_la_CPPFLAGS = \
+ $(LIBNL_CFLAGS) \
$(DBUS_CFLAGS) \
$(GLIB_CFLAGS) \
-DG_DISABLE_DEPRECATED \
diff --git a/src/backends/Makefile.in b/src/backends/Makefile.in
index a9ea3e807..2f489e750 100644
--- a/src/backends/Makefile.in
+++ b/src/backends/Makefile.in
@@ -71,7 +71,8 @@ LTLIBRARIES = $(noinst_LTLIBRARIES)
am__DEPENDENCIES_1 =
libnmbackend_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
$(top_builddir)/src/logging/libnm-logging.la \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
am__libnmbackend_la_SOURCES_DIST = NetworkManagerGeneric.c \
NetworkManagerGeneric.h NetworkManagerRedHat.c \
NetworkManagerSuSE.c NetworkManagerGentoo.c \
@@ -362,9 +363,10 @@ libnmbackend_la_SOURCES = NetworkManagerGeneric.c \
$(am__append_10) $(am__append_11) $(am__append_12) \
$(am__append_13)
libnmbackend_la_LIBADD = $(am__append_9) \
- $(top_builddir)/src/logging/libnm-logging.la $(DBUS_LIBS) \
- $(GLIB_LIBS)
+ $(top_builddir)/src/logging/libnm-logging.la $(LIBNL_LIBS) \
+ $(DBUS_LIBS) $(GLIB_LIBS)
libnmbackend_la_CPPFLAGS = \
+ $(LIBNL_CFLAGS) \
$(DBUS_CFLAGS) \
$(GLIB_CFLAGS) \
-DG_DISABLE_DEPRECATED \
diff --git a/src/dhcp-manager/nm-dhcp-dhclient-utils.c b/src/dhcp-manager/nm-dhcp-dhclient-utils.c
index cc5255ab5..caf90f116 100644
--- a/src/dhcp-manager/nm-dhcp-dhclient-utils.c
+++ b/src/dhcp-manager/nm-dhcp-dhclient-utils.c
@@ -14,7 +14,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2010 Red Hat, Inc.
+ * Copyright (C) 2011 Red Hat, Inc.
*/
#include <config.h>
@@ -166,8 +166,19 @@ nm_dhcp_dhclient_create_config (const char *interface,
}
if (hostname) {
- g_string_append_printf (new_contents, HOSTNAME_FORMAT "\n", hostname);
+ char *plain_hostname, *dot;
+
+ plain_hostname = g_strdup (hostname);
+ dot = strchr (plain_hostname, '.');
+
+ /* get rid of the domain */
+ if (dot)
+ *dot = '\0';
+
+ g_string_append_printf (new_contents, HOSTNAME_FORMAT "\n", plain_hostname);
added = TRUE;
+
+ g_free (plain_hostname);
}
if (added)
diff --git a/src/dns-manager/Makefile.am b/src/dns-manager/Makefile.am
index 7b5fc4f84..b51f667bd 100644
--- a/src/dns-manager/Makefile.am
+++ b/src/dns-manager/Makefile.am
@@ -19,12 +19,14 @@ libdns_manager_la_SOURCES = \
nm-dns-utils.c
libdns_manager_la_CPPFLAGS = \
+ $(LIBNL_CFLAGS) \
$(DBUS_CFLAGS) \
$(GLIB_CFLAGS) \
-DLOCALSTATEDIR=\"$(localstatedir)\"
libdns_manager_la_LIBADD = \
$(top_builddir)/src/logging/libnm-logging.la \
+ $(LIBNL_LIBS) \
$(DBUS_LIBS) \
$(GLIB_LIBS)
diff --git a/src/dns-manager/Makefile.in b/src/dns-manager/Makefile.in
index 4937a6014..aad1c562d 100644
--- a/src/dns-manager/Makefile.in
+++ b/src/dns-manager/Makefile.in
@@ -58,7 +58,8 @@ LTLIBRARIES = $(noinst_LTLIBRARIES)
am__DEPENDENCIES_1 =
libdns_manager_la_DEPENDENCIES = \
$(top_builddir)/src/logging/libnm-logging.la \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
am_libdns_manager_la_OBJECTS = libdns_manager_la-nm-dns-manager.lo \
libdns_manager_la-nm-dns-plugin.lo \
libdns_manager_la-nm-dns-dnsmasq.lo \
@@ -325,12 +326,14 @@ libdns_manager_la_SOURCES = \
nm-dns-utils.c
libdns_manager_la_CPPFLAGS = \
+ $(LIBNL_CFLAGS) \
$(DBUS_CFLAGS) \
$(GLIB_CFLAGS) \
-DLOCALSTATEDIR=\"$(localstatedir)\"
libdns_manager_la_LIBADD = \
$(top_builddir)/src/logging/libnm-logging.la \
+ $(LIBNL_LIBS) \
$(DBUS_LIBS) \
$(GLIB_LIBS)
diff --git a/src/ip6-manager/Makefile.am b/src/ip6-manager/Makefile.am
index b56b197e7..b98d6def7 100644
--- a/src/ip6-manager/Makefile.am
+++ b/src/ip6-manager/Makefile.am
@@ -13,6 +13,7 @@ libip6_manager_la_SOURCES = \
nm-ip6-manager.h
libip6_manager_la_CPPFLAGS = \
+ $(LIBNL_CFLAGS) \
$(DBUS_CFLAGS) \
$(GLIB_CFLAGS) \
-DG_DISABLE_DEPRECATED
@@ -20,6 +21,7 @@ libip6_manager_la_CPPFLAGS = \
libip6_manager_la_LIBADD = \
$(top_builddir)/marshallers/libmarshallers.la \
$(top_builddir)/src/logging/libnm-logging.la \
+ $(LIBNL_LIBS) \
$(DBUS_LIBS) \
$(GLIB_LIBS)
diff --git a/src/ip6-manager/Makefile.in b/src/ip6-manager/Makefile.in
index 344ca0ea6..33539f51b 100644
--- a/src/ip6-manager/Makefile.in
+++ b/src/ip6-manager/Makefile.in
@@ -59,7 +59,8 @@ am__DEPENDENCIES_1 =
libip6_manager_la_DEPENDENCIES = \
$(top_builddir)/marshallers/libmarshallers.la \
$(top_builddir)/src/logging/libnm-logging.la \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
am_libip6_manager_la_OBJECTS = libip6_manager_la-nm-ip6-manager.lo
libip6_manager_la_OBJECTS = $(am_libip6_manager_la_OBJECTS)
AM_V_lt = $(am__v_lt_$(V))
@@ -316,6 +317,7 @@ libip6_manager_la_SOURCES = \
nm-ip6-manager.h
libip6_manager_la_CPPFLAGS = \
+ $(LIBNL_CFLAGS) \
$(DBUS_CFLAGS) \
$(GLIB_CFLAGS) \
-DG_DISABLE_DEPRECATED
@@ -323,6 +325,7 @@ libip6_manager_la_CPPFLAGS = \
libip6_manager_la_LIBADD = \
$(top_builddir)/marshallers/libmarshallers.la \
$(top_builddir)/src/logging/libnm-logging.la \
+ $(LIBNL_LIBS) \
$(DBUS_LIBS) \
$(GLIB_LIBS)
diff --git a/src/logging/nm-logging.c b/src/logging/nm-logging.c
index 1e289d371..d8353f271 100644
--- a/src/logging/nm-logging.c
+++ b/src/logging/nm-logging.c
@@ -218,6 +218,12 @@ nm_logging_level_enabled (guint32 level)
return !!(log_level & level);
}
+gboolean
+nm_logging_domain_enabled (guint32 domain)
+{
+ return !!(log_domains & domain);
+}
+
void
_nm_log (const char *loc,
const char *func,
diff --git a/src/logging/nm-logging.h b/src/logging/nm-logging.h
index 44e49a712..e3e05f59b 100644
--- a/src/logging/nm-logging.h
+++ b/src/logging/nm-logging.h
@@ -95,6 +95,7 @@ void _nm_log (const char *loc,
const char *nm_logging_level_to_string (void);
char *nm_logging_domains_to_string (void);
gboolean nm_logging_level_enabled (guint32 level);
+gboolean nm_logging_domain_enabled (guint32 domain);
/* Undefine the nm-utils.h logging stuff to ensure errors */
#undef nm_print_backtrace
diff --git a/src/modem-manager/Makefile.am b/src/modem-manager/Makefile.am
index db680aeae..3c3af16c5 100644
--- a/src/modem-manager/Makefile.am
+++ b/src/modem-manager/Makefile.am
@@ -19,10 +19,12 @@ libmodem_manager_la_SOURCES = \
nm-modem-types.h
libmodem_manager_la_CPPFLAGS = \
+ $(LIBNL_CFLAGS) \
$(DBUS_CFLAGS)
libmodem_manager_la_LIBADD = \
$(top_builddir)/marshallers/libmarshallers.la \
$(top_builddir)/src/logging/libnm-logging.la \
+ $(LIBNL_LIBS) \
$(DBUS_LIBS)
diff --git a/src/modem-manager/Makefile.in b/src/modem-manager/Makefile.in
index 66f7c1bc1..2a054f707 100644
--- a/src/modem-manager/Makefile.in
+++ b/src/modem-manager/Makefile.in
@@ -59,7 +59,7 @@ am__DEPENDENCIES_1 =
libmodem_manager_la_DEPENDENCIES = \
$(top_builddir)/marshallers/libmarshallers.la \
$(top_builddir)/src/logging/libnm-logging.la \
- $(am__DEPENDENCIES_1)
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
am_libmodem_manager_la_OBJECTS = libmodem_manager_la-nm-modem.lo \
libmodem_manager_la-nm-modem-cdma.lo \
libmodem_manager_la-nm-modem-gsm.lo \
@@ -325,11 +325,13 @@ libmodem_manager_la_SOURCES = \
nm-modem-types.h
libmodem_manager_la_CPPFLAGS = \
+ $(LIBNL_CFLAGS) \
$(DBUS_CFLAGS)
libmodem_manager_la_LIBADD = \
$(top_builddir)/marshallers/libmarshallers.la \
$(top_builddir)/src/logging/libnm-logging.la \
+ $(LIBNL_LIBS) \
$(DBUS_LIBS)
all: all-am
diff --git a/src/nm-device-interface.c b/src/nm-device-interface.c
index 6d2b8762f..fb471f577 100644
--- a/src/nm-device-interface.c
+++ b/src/nm-device-interface.c
@@ -166,6 +166,14 @@ nm_device_interface_init (gpointer g_iface)
g_object_interface_install_property
(g_iface,
+ g_param_spec_boxed (NM_DEVICE_INTERFACE_ACTIVE_CONNECTION,
+ "ActiveConnection",
+ "ActiveConnection",
+ DBUS_TYPE_G_OBJECT_PATH,
+ G_PARAM_READABLE));
+
+ g_object_interface_install_property
+ (g_iface,
g_param_spec_uint (NM_DEVICE_INTERFACE_DEVICE_TYPE,
"DeviceType",
"DeviceType",
diff --git a/src/nm-device-interface.h b/src/nm-device-interface.h
index f39e8459d..560cdfe51 100644
--- a/src/nm-device-interface.h
+++ b/src/nm-device-interface.h
@@ -58,6 +58,7 @@ typedef enum
#define NM_DEVICE_INTERFACE_IP6_CONFIG "ip6-config"
#define NM_DEVICE_INTERFACE_DHCP6_CONFIG "dhcp6-config"
#define NM_DEVICE_INTERFACE_STATE "state"
+#define NM_DEVICE_INTERFACE_ACTIVE_CONNECTION "active-connection"
#define NM_DEVICE_INTERFACE_DEVICE_TYPE "device-type" /* ugh */
#define NM_DEVICE_INTERFACE_MANAGED "managed"
#define NM_DEVICE_INTERFACE_FIRMWARE_MISSING "firmware-missing"
@@ -79,6 +80,7 @@ typedef enum {
NM_DEVICE_INTERFACE_PROP_IP6_CONFIG,
NM_DEVICE_INTERFACE_PROP_DHCP6_CONFIG,
NM_DEVICE_INTERFACE_PROP_STATE,
+ NM_DEVICE_INTERFACE_PROP_ACTIVE_CONNECTION,
NM_DEVICE_INTERFACE_PROP_DEVICE_TYPE,
NM_DEVICE_INTERFACE_PROP_MANAGED,
NM_DEVICE_INTERFACE_PROP_FIRMWARE_MISSING,
diff --git a/src/nm-device-wifi.c b/src/nm-device-wifi.c
index 9258f77c2..7a6e7528b 100644
--- a/src/nm-device-wifi.c
+++ b/src/nm-device-wifi.c
@@ -1460,6 +1460,26 @@ real_complete_connection (NMDevice *device,
if (ap) {
ssid = nm_ap_get_ssid (ap);
+ if (ssid == NULL) {
+ /* The AP must be hidden. Connecting to a WiFi AP requires the SSID
+ * as part of the initial handshake, so check the connection details
+ * for the SSID. The AP object will still be used for encryption
+ * settings and such.
+ */
+ ssid = nm_setting_wireless_get_ssid (s_wifi);
+ }
+
+ if (ssid == NULL) {
+ /* If there's no SSID on the AP itself, and no SSID in the
+ * connection data, then we cannot connect at all. Return an error.
+ */
+ g_set_error_literal (error,
+ NM_WIFI_ERROR,
+ NM_WIFI_ERROR_CONNECTION_INVALID,
+ "A 'wireless' setting with a valid SSID is required for hidden access points.");
+ return FALSE;
+ }
+
/* If the SSID is a well-known SSID, lock the connection to the AP's
* specific BSSID so NM doesn't autoconnect to some random wifi net.
*/
@@ -2851,7 +2871,7 @@ remove_supplicant_timeouts (NMDeviceWifi *self)
}
static guint32
-find_supported_frequency (NMDeviceWifi *self, guint32 *freqs)
+find_supported_frequency (NMDeviceWifi *self, const guint32 *freqs)
{
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
int i;
@@ -2887,25 +2907,25 @@ build_supplicant_config (NMDeviceWifi *self,
if (!config)
return NULL;
- /* Figure out the Ad-Hoc frequency to use if creating an adhoc network; if
- * nothing was specified then pick something usable.
+ /* Supplicant requires an initial frequency for Ad-Hoc networks; if the user
+ * didn't specify one and we didn't find an AP that matched the connection,
+ * just pick a frequency the device supports.
*/
- if ((nm_ap_get_mode (ap) == NM_802_11_MODE_ADHOC) && nm_ap_get_user_created (ap)) {
+ if (nm_ap_get_mode (ap) == NM_802_11_MODE_ADHOC) {
const char *band = nm_setting_wireless_get_band (s_wireless);
+ const guint32 a_freqs[] = { 5180, 5200, 5220, 5745, 5765, 5785, 5805, 0 };
+ const guint32 bg_freqs[] = { 2412, 2437, 2462, 2472, 0 };
adhoc_freq = nm_ap_get_freq (ap);
if (!adhoc_freq) {
- if (band && !strcmp (band, "a")) {
- guint32 a_freqs[] = {5180, 5200, 5220, 5745, 5765, 5785, 5805, 0};
+ if (g_strcmp0 (band, "a") == 0)
adhoc_freq = find_supported_frequency (self, a_freqs);
- } else {
- guint32 bg_freqs[] = {2412, 2437, 2462, 2472, 0};
+ else
adhoc_freq = find_supported_frequency (self, bg_freqs);
- }
}
if (!adhoc_freq) {
- if (band && !strcmp (band, "a"))
+ if (g_strcmp0 (band, "a") == 0)
adhoc_freq = 5180;
else
adhoc_freq = 2462;
@@ -3098,15 +3118,8 @@ real_act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
ap = nm_ap_new_fake_from_connection (connection);
g_return_val_if_fail (ap != NULL, NM_ACT_STAGE_RETURN_FAILURE);
- switch (nm_ap_get_mode (ap)) {
- case NM_802_11_MODE_ADHOC:
- nm_ap_set_user_created (ap, TRUE);
- break;
- case NM_802_11_MODE_INFRA:
- default:
- nm_ap_set_broadcast (ap, FALSE);
- break;
- }
+ if (nm_ap_get_mode (ap) == NM_802_11_MODE_INFRA)
+ nm_ap_set_broadcast (ap, FALSE);
priv->ap_list = g_slist_prepend (priv->ap_list, ap);
nm_ap_export_to_dbus (ap);
@@ -3399,7 +3412,7 @@ activation_success_handler (NMDevice *dev)
nm_ap_set_address (ap, &bssid);
if (!nm_ap_get_freq (ap))
nm_ap_set_freq (ap, nm_device_wifi_get_frequency (self));
- if (!nm_ap_get_max_bitrate (ap) && nm_ap_get_user_created (ap))
+ if (!nm_ap_get_max_bitrate (ap))
nm_ap_set_max_bitrate (ap, nm_device_wifi_get_bitrate (self));
tmp_ap = get_active_ap (self, ap, TRUE);
diff --git a/src/nm-device.c b/src/nm-device.c
index ebd8cdb9d..4b7ec5dfb 100644
--- a/src/nm-device.c
+++ b/src/nm-device.c
@@ -3463,6 +3463,7 @@ get_property (GObject *object, guint prop_id,
NMDevice *self = NM_DEVICE (object);
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
NMDeviceState state;
+ const char *ac_path = NULL;
state = nm_device_get_state (self);
@@ -3518,6 +3519,11 @@ get_property (GObject *object, guint prop_id,
case NM_DEVICE_INTERFACE_PROP_STATE:
g_value_set_uint (value, priv->state);
break;
+ case NM_DEVICE_INTERFACE_PROP_ACTIVE_CONNECTION:
+ if (priv->act_request)
+ ac_path = nm_act_request_get_active_connection_path (priv->act_request);
+ g_value_set_boxed (value, ac_path ? ac_path : "/");
+ break;
case NM_DEVICE_INTERFACE_PROP_DEVICE_TYPE:
g_value_set_uint (value, priv->type);
break;
@@ -3616,6 +3622,10 @@ nm_device_class_init (NMDeviceClass *klass)
NM_DEVICE_INTERFACE_STATE);
g_object_class_override_property (object_class,
+ NM_DEVICE_INTERFACE_PROP_ACTIVE_CONNECTION,
+ NM_DEVICE_INTERFACE_ACTIVE_CONNECTION);
+
+ g_object_class_override_property (object_class,
NM_DEVICE_INTERFACE_PROP_DEVICE_TYPE,
NM_DEVICE_INTERFACE_DEVICE_TYPE);
@@ -3809,7 +3819,7 @@ reason_to_string (NMDeviceStateReason reason)
case NM_DEVICE_STATE_REASON_USER_REQUESTED:
return "user-requested";
case NM_DEVICE_STATE_REASON_CARRIER:
- return "carrier-chagned";
+ return "carrier-changed";
case NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED:
return "connection-assumed";
case NM_DEVICE_STATE_REASON_SUPPLICANT_AVAILABLE:
diff --git a/src/nm-dhcp4-config.c b/src/nm-dhcp4-config.c
index 5acf053f6..567ba6875 100644
--- a/src/nm-dhcp4-config.c
+++ b/src/nm-dhcp4-config.c
@@ -101,6 +101,23 @@ nm_dhcp4_config_get_option (NMDHCP4Config *self, const char *key)
return value ? g_value_get_string (value) : NULL;
}
+/* Caller owns the list, but not the values in the list */
+GSList *
+nm_dhcp4_config_list_options (NMDHCP4Config *self)
+{
+ GHashTableIter iter;
+ const char *option = NULL;
+ GSList *list = NULL;
+
+ g_return_val_if_fail (NM_IS_DHCP4_CONFIG (self), NULL);
+
+ g_hash_table_iter_init (&iter, NM_DHCP4_CONFIG_GET_PRIVATE (self)->options);
+ while (g_hash_table_iter_next (&iter, (gpointer) &option, NULL))
+ list = g_slist_prepend (list, (gpointer) option);
+
+ return list;
+}
+
const char *
nm_dhcp4_config_get_dbus_path (NMDHCP4Config *self)
{
diff --git a/src/nm-dhcp4-config.h b/src/nm-dhcp4-config.h
index ffaa84304..4729da4c1 100644
--- a/src/nm-dhcp4-config.h
+++ b/src/nm-dhcp4-config.h
@@ -58,4 +58,6 @@ void nm_dhcp4_config_reset (NMDHCP4Config *config);
const char *nm_dhcp4_config_get_option (NMDHCP4Config *config, const char *option);
+GSList *nm_dhcp4_config_list_options (NMDHCP4Config *config);
+
#endif /* NM_DHCP4_CONFIG_H */
diff --git a/src/nm-dhcp6-config.c b/src/nm-dhcp6-config.c
index fb6ccce50..885e5f840 100644
--- a/src/nm-dhcp6-config.c
+++ b/src/nm-dhcp6-config.c
@@ -101,6 +101,23 @@ nm_dhcp6_config_get_option (NMDHCP6Config *self, const char *key)
return value ? g_value_get_string (value) : NULL;
}
+/* Caller owns the list, but not the values in the list */
+GSList *
+nm_dhcp6_config_list_options (NMDHCP6Config *self)
+{
+ GHashTableIter iter;
+ const char *option = NULL;
+ GSList *list = NULL;
+
+ g_return_val_if_fail (NM_IS_DHCP6_CONFIG (self), NULL);
+
+ g_hash_table_iter_init (&iter, NM_DHCP6_CONFIG_GET_PRIVATE (self)->options);
+ while (g_hash_table_iter_next (&iter, (gpointer) &option, NULL))
+ list = g_slist_prepend (list, (gpointer) option);
+
+ return list;
+}
+
const char *
nm_dhcp6_config_get_dbus_path (NMDHCP6Config *self)
{
diff --git a/src/nm-dhcp6-config.h b/src/nm-dhcp6-config.h
index 90eb10ffb..5e83b904f 100644
--- a/src/nm-dhcp6-config.h
+++ b/src/nm-dhcp6-config.h
@@ -58,4 +58,6 @@ void nm_dhcp6_config_reset (NMDHCP6Config *config);
const char *nm_dhcp6_config_get_option (NMDHCP6Config *config, const char *option);
+GSList *nm_dhcp6_config_list_options (NMDHCP6Config *self);
+
#endif /* NM_DHCP6_CONFIG_H */
diff --git a/src/nm-manager-auth.c b/src/nm-manager-auth.c
index 8515959eb..9171663b1 100644
--- a/src/nm-manager-auth.c
+++ b/src/nm-manager-auth.c
@@ -18,17 +18,25 @@
* Copyright (C) 2010 Red Hat, Inc.
*/
+#include <config.h>
#include <string.h>
#include <dbus/dbus-glib-lowlevel.h>
+#include <gio/gio.h>
-#include <nm-setting-connection.h>
+#if WITH_POLKIT
+#include <polkit/polkit.h>
+#endif
+
+#include "nm-setting-connection.h"
#include "nm-manager-auth.h"
#include "nm-logging.h"
#include "nm-dbus-manager.h"
struct NMAuthChain {
guint32 refcount;
+#if WITH_POLKIT
PolkitAuthority *authority;
+#endif
GSList *calls;
GHashTable *data;
@@ -37,7 +45,6 @@ struct NMAuthChain {
GError *error;
NMAuthChainResultFunc done_func;
- NMAuthChainCallFunc call_func;
gpointer user_data;
};
@@ -45,8 +52,9 @@ typedef struct {
NMAuthChain *chain;
GCancellable *cancellable;
char *permission;
+ guint idle_id;
gboolean disposed;
-} PolkitCall;
+} AuthCall;
typedef struct {
gpointer data;
@@ -64,20 +72,31 @@ free_data (gpointer data)
g_free (tmp);
}
-static void
-default_call_func (NMAuthChain *chain,
- const char *permission,
- GError *error,
- NMAuthCallResult result,
- gpointer user_data)
+#if WITH_POLKIT
+static PolkitAuthority *
+pk_authority_get (void)
{
- if (!error)
- nm_auth_chain_set_data (chain, permission, GUINT_TO_POINTER (result), NULL);
+ static PolkitAuthority *authority = NULL;
+ GError *error = NULL;
+
+ if (authority == NULL) {
+ authority = polkit_authority_get_sync (NULL, &error);
+ if (authority == NULL) {
+ nm_log_err (LOGD_CORE, "Failed to initialize PolicyKit: (%d) %s",
+ error ? error->code : -1,
+ (error && error->message) ? error->message : "(unknown)");
+ g_clear_error (&error);
+ return NULL;
+ }
+ }
+
+ /* Yes, ref every time; we want to keep the object alive */
+ return g_object_ref (authority);
}
+#endif
static NMAuthChain *
-_auth_chain_new (PolkitAuthority *authority,
- DBusGMethodInvocation *context,
+_auth_chain_new (DBusGMethodInvocation *context,
DBusGProxy *proxy,
DBusMessage *message,
const char *dbus_sender,
@@ -90,10 +109,11 @@ _auth_chain_new (PolkitAuthority *authority,
self = g_malloc0 (sizeof (NMAuthChain));
self->refcount = 1;
- self->authority = g_object_ref (authority);
+#if WITH_POLKIT
+ self->authority = pk_authority_get ();
+#endif
self->data = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, free_data);
self->done_func = done_func;
- self->call_func = /* call_func ? call_func : */ default_call_func;
self->user_data = user_data;
self->context = context;
@@ -117,31 +137,28 @@ _auth_chain_new (PolkitAuthority *authority,
}
NMAuthChain *
-nm_auth_chain_new (PolkitAuthority *authority,
- DBusGMethodInvocation *context,
+nm_auth_chain_new (DBusGMethodInvocation *context,
DBusGProxy *proxy,
NMAuthChainResultFunc done_func,
gpointer user_data)
{
- return _auth_chain_new (authority, context, proxy, NULL, NULL, done_func, user_data);
+ return _auth_chain_new (context, proxy, NULL, NULL, done_func, user_data);
}
NMAuthChain *
-nm_auth_chain_new_raw_message (PolkitAuthority *authority,
- DBusMessage *message,
+nm_auth_chain_new_raw_message (DBusMessage *message,
NMAuthChainResultFunc done_func,
gpointer user_data)
{
- return _auth_chain_new (authority, NULL, NULL, message, NULL, done_func, user_data);
+ return _auth_chain_new (NULL, NULL, message, NULL, done_func, user_data);
}
NMAuthChain *
-nm_auth_chain_new_dbus_sender (PolkitAuthority *authority,
- const char *dbus_sender,
+nm_auth_chain_new_dbus_sender (const char *dbus_sender,
NMAuthChainResultFunc done_func,
gpointer user_data)
{
- return _auth_chain_new (authority, NULL, NULL, NULL, dbus_sender, done_func, user_data);
+ return _auth_chain_new (NULL, NULL, NULL, dbus_sender, done_func, user_data);
}
gpointer
@@ -229,14 +246,36 @@ nm_auth_chain_check_done (NMAuthChain *self)
}
static void
-polkit_call_cancel (PolkitCall *call)
+nm_auth_chain_remove_call (NMAuthChain *self, AuthCall *call)
+{
+ g_return_if_fail (self != NULL);
+ g_return_if_fail (call != NULL);
+
+ self->calls = g_slist_remove (self->calls, call);
+}
+
+static AuthCall *
+auth_call_new (NMAuthChain *chain, const char *permission)
+{
+ AuthCall *call;
+
+ call = g_malloc0 (sizeof (AuthCall));
+ call->chain = chain;
+ call->permission = g_strdup (permission);
+ call->cancellable = g_cancellable_new ();
+ chain->calls = g_slist_append (chain->calls, call);
+ return call;
+}
+
+static void
+auth_call_cancel (AuthCall *call)
{
call->disposed = TRUE;
g_cancellable_cancel (call->cancellable);
}
static void
-polkit_call_free (PolkitCall *call)
+auth_call_free (AuthCall *call)
{
g_return_if_fail (call != NULL);
@@ -246,30 +285,49 @@ polkit_call_free (PolkitCall *call)
call->chain = NULL;
g_object_unref (call->cancellable);
call->cancellable = NULL;
+ if (call->idle_id)
+ g_source_remove (call->idle_id);
+ memset (call, 0, sizeof (*call));
g_free (call);
}
+/* This can get used from scheduled idles, hence the boolean return */
+static gboolean
+auth_call_complete (AuthCall *call)
+{
+ g_return_val_if_fail (call != NULL, FALSE);
+
+ call->idle_id = 0;
+ nm_auth_chain_remove_call (call->chain, call);
+ nm_auth_chain_check_done (call->chain);
+ auth_call_free (call);
+ return FALSE;
+}
+
+static void
+auth_call_schedule_early_finish (AuthCall *call, GError *error)
+{
+ if (!call->chain->error)
+ call->chain->error = error;
+ call->idle_id = g_idle_add ((GSourceFunc) auth_call_complete, call);
+}
+
+#if WITH_POLKIT
static void
pk_call_cb (GObject *object, GAsyncResult *result, gpointer user_data)
{
- PolkitCall *call = user_data;
- NMAuthChain *chain;
+ AuthCall *call = user_data;
+ NMAuthChain *chain = call->chain;
PolkitAuthorizationResult *pk_result;
GError *error = NULL;
- guint call_result = NM_AUTH_CALL_RESULT_UNKNOWN;
/* If the call is already disposed do nothing */
if (call->disposed) {
- polkit_call_free (call);
+ auth_call_free (call);
return;
}
- chain = call->chain;
- chain->calls = g_slist_remove (chain->calls, call);
-
- pk_result = polkit_authority_check_authorization_finish (chain->authority,
- result,
- &error);
+ pk_result = polkit_authority_check_authorization_finish (chain->authority, result, &error);
if (error) {
if (!chain->error)
chain->error = g_error_copy (error);
@@ -279,6 +337,8 @@ pk_call_cb (GObject *object, GAsyncResult *result, gpointer user_data)
error ? error->code : -1,
error && error->message ? error->message : "(unknown)");
} else {
+ guint call_result = NM_AUTH_CALL_RESULT_UNKNOWN;
+
if (polkit_authorization_result_get_is_authorized (pk_result)) {
/* Caller has the permission */
call_result = NM_AUTH_CALL_RESULT_YES;
@@ -287,23 +347,26 @@ pk_call_cb (GObject *object, GAsyncResult *result, gpointer user_data)
call_result = NM_AUTH_CALL_RESULT_AUTH;
} else
call_result = NM_AUTH_CALL_RESULT_NO;
- }
- chain->call_func (chain, call->permission, error, call_result, chain->user_data);
- nm_auth_chain_check_done (chain);
+ nm_auth_chain_set_data (chain, call->permission, GUINT_TO_POINTER (call_result), NULL);
+ }
g_clear_error (&error);
- polkit_call_free (call);
if (pk_result)
g_object_unref (pk_result);
+
+ auth_call_complete (call);
}
+#endif
gboolean
nm_auth_chain_add_call (NMAuthChain *self,
const char *permission,
gboolean allow_interaction)
{
- PolkitCall *call;
+ AuthCall *call;
+
+#if WITH_POLKIT
PolkitSubject *subject;
PolkitCheckAuthorizationFlags flags = POLKIT_CHECK_AUTHORIZATION_FLAGS_NONE;
@@ -315,12 +378,14 @@ nm_auth_chain_add_call (NMAuthChain *self,
if (!subject)
return FALSE;
- call = g_malloc0 (sizeof (PolkitCall));
- call->chain = self;
- call->permission = g_strdup (permission);
- call->cancellable = g_cancellable_new ();
+ call = auth_call_new (self, permission);
- self->calls = g_slist_append (self->calls, call);
+ if (self->authority == NULL) {
+ /* No polkit, no authorization */
+ auth_call_schedule_early_finish (call, g_error_new_literal (0, 0, "PolicyKit unavailable"));
+ g_object_unref (subject);
+ return FALSE;
+ }
if (allow_interaction)
flags = POLKIT_CHECK_AUTHORIZATION_FLAGS_ALLOW_USER_INTERACTION;
@@ -334,6 +399,17 @@ nm_auth_chain_add_call (NMAuthChain *self,
pk_call_cb,
call);
g_object_unref (subject);
+#else
+ /* -- NO POLKIT -- */
+
+ g_return_val_if_fail (self != NULL, FALSE);
+
+ /* When PolicyKit is disabled, everything is authorized */
+ call = auth_call_new (self, permission);
+ nm_auth_chain_set_data (self, permission, GUINT_TO_POINTER (NM_AUTH_CALL_RESULT_YES), NULL);
+ auth_call_schedule_early_finish (call, NULL);
+#endif
+
return TRUE;
}
@@ -348,11 +424,14 @@ nm_auth_chain_unref (NMAuthChain *self)
if (self->refcount > 0)
return;
- g_object_unref (self->authority);
+#if WITH_POLKIT
+ if (self->authority)
+ g_object_unref (self->authority);
+#endif
g_free (self->owner);
for (iter = self->calls; iter; iter = g_slist_next (iter))
- polkit_call_cancel ((PolkitCall *) iter->data);
+ auth_call_cancel ((AuthCall *) iter->data);
g_slist_free (self->calls);
g_clear_error (&self->error);
@@ -460,3 +539,50 @@ nm_auth_uid_in_acl (NMConnection *connection,
return TRUE;
}
+typedef struct {
+ GDestroyNotify changed_callback;
+ gpointer changed_data;
+} PkChangedInfo;
+
+#if WITH_POLKIT
+static void
+pk_authority_changed_cb (GObject *object, PkChangedInfo *info)
+{
+ info->changed_callback (info->changed_data);
+}
+#endif
+
+void
+nm_auth_set_changed_func (GDestroyNotify callback, gpointer callback_data)
+{
+#if WITH_POLKIT
+ static PkChangedInfo info = { NULL, NULL };
+ static guint32 changed_id = 0;
+ PolkitAuthority *authority;
+
+ authority = pk_authority_get ();
+ if (!authority)
+ return;
+
+ if (callback == NULL) {
+ /* Clearing the callback */
+ info.changed_callback = NULL;
+ info.changed_data = NULL;
+ g_signal_handler_disconnect (authority, changed_id);
+ changed_id = 0;
+ } else {
+ info.changed_callback = callback;
+ info.changed_data= callback_data;
+
+ if (changed_id == 0) {
+ changed_id = g_signal_connect (authority,
+ "changed",
+ G_CALLBACK (pk_authority_changed_cb),
+ &info);
+ }
+ }
+
+ g_object_unref (authority);
+#endif
+}
+
diff --git a/src/nm-manager-auth.h b/src/nm-manager-auth.h
index 7e7ff7a12..ad14d306c 100644
--- a/src/nm-manager-auth.h
+++ b/src/nm-manager-auth.h
@@ -21,7 +21,6 @@
#ifndef NM_MANAGER_AUTH_H
#define NM_MANAGER_AUTH_H
-#include <polkit/polkit.h>
#include <glib.h>
#include <dbus/dbus-glib.h>
@@ -56,25 +55,16 @@ typedef void (*NMAuthChainResultFunc) (NMAuthChain *chain,
DBusGMethodInvocation *context,
gpointer user_data);
-typedef void (*NMAuthChainCallFunc) (NMAuthChain *chain,
- const char *permission,
- GError *error,
- NMAuthCallResult result,
- gpointer user_data);
-
-NMAuthChain *nm_auth_chain_new (PolkitAuthority *authority,
- DBusGMethodInvocation *context,
+NMAuthChain *nm_auth_chain_new (DBusGMethodInvocation *context,
DBusGProxy *proxy,
NMAuthChainResultFunc done_func,
gpointer user_data);
-NMAuthChain *nm_auth_chain_new_raw_message (PolkitAuthority *authority,
- DBusMessage *message,
+NMAuthChain *nm_auth_chain_new_raw_message (DBusMessage *message,
NMAuthChainResultFunc done_func,
gpointer user_data);
-NMAuthChain *nm_auth_chain_new_dbus_sender (PolkitAuthority *authority,
- const char *dbus_sender,
+NMAuthChain *nm_auth_chain_new_dbus_sender (const char *dbus_sender,
NMAuthChainResultFunc done_func,
gpointer user_data);
@@ -112,5 +102,7 @@ gboolean nm_auth_uid_in_acl (NMConnection *connection,
gulong uid,
char **out_error_desc);
+void nm_auth_set_changed_func (GDestroyNotify callback, gpointer callback_data);
+
#endif /* NM_MANAGER_AUTH_H */
diff --git a/src/nm-manager.c b/src/nm-manager.c
index 568ff2ae2..961c9d8c6 100644
--- a/src/nm-manager.c
+++ b/src/nm-manager.c
@@ -28,6 +28,7 @@
#include <string.h>
#include <dbus/dbus-glib-lowlevel.h>
#include <dbus/dbus-glib.h>
+#include <gio/gio.h>
#include <glib/gi18n.h>
#include "nm-glib-compat.h"
@@ -158,22 +159,6 @@ static GSList * remove_one_device (NMManager *manager,
NMDevice *device,
gboolean quitting);
-static NMDevice *nm_manager_get_device_by_udi (NMManager *manager, const char *udi);
-
-/* Fix for polkit 0.97 and later */
-#if !HAVE_POLKIT_AUTHORITY_GET_SYNC
-static inline PolkitAuthority *
-polkit_authority_get_sync (GCancellable *cancellable, GError **error)
-{
- PolkitAuthority *authority;
-
- authority = polkit_authority_get ();
- if (!authority)
- g_set_error (error, 0, 0, "failed to get the PolicyKit authority");
- return authority;
-}
-#endif
-
#define SSD_POKE_INTERVAL 120
#define ORIGDEV_TAG "originating-device"
@@ -185,7 +170,6 @@ struct PendingActivation {
NMManager *manager;
DBusGMethodInvocation *context;
- PolkitAuthority *authority;
PendingActivationFunc callback;
NMAuthChain *chain;
@@ -237,8 +221,6 @@ typedef struct {
DBusGProxy *aipd_proxy;
DBusGProxy *upower_proxy;
- PolkitAuthority *authority;
- guint auth_changed_id;
GSList *auth_chains;
/* Firmware dir monitor */
@@ -679,7 +661,6 @@ try_complete_vpn (NMConnection *connection, GSList *existing, GError **error)
static PendingActivation *
pending_activation_new (NMManager *manager,
- PolkitAuthority *authority,
DBusGMethodInvocation *context,
const char *device_path,
const char *connection_path,
@@ -696,7 +677,6 @@ pending_activation_new (NMManager *manager,
gboolean success;
g_return_val_if_fail (manager != NULL, NULL);
- g_return_val_if_fail (authority != NULL, NULL);
g_return_val_if_fail (context != NULL, NULL);
g_return_val_if_fail (device_path != NULL, NULL);
@@ -744,7 +724,6 @@ pending_activation_new (NMManager *manager,
pending = g_slice_new0 (PendingActivation);
pending->manager = manager;
- pending->authority = authority;
pending->context = context;
pending->callback = callback;
@@ -767,31 +746,23 @@ pending_auth_net_done (NMAuthChain *chain,
{
PendingActivation *pending = user_data;
NMAuthCallResult result;
+ GError *tmp_error = NULL;
pending->chain = NULL;
- if (error) {
- pending->callback (pending, error);
- goto out;
- }
-
/* Caller has had a chance to obtain authorization, so we only need to
* check for 'yes' here.
*/
result = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, NM_AUTH_PERMISSION_NETWORK_CONTROL));
if (result != NM_AUTH_CALL_RESULT_YES) {
- error = g_error_new_literal (NM_MANAGER_ERROR,
- NM_MANAGER_ERROR_PERMISSION_DENIED,
- "Not authorized to control networking.");
- pending->callback (pending, error);
- g_error_free (error);
- goto out;
+ tmp_error = g_error_new_literal (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_PERMISSION_DENIED,
+ "Not authorized to control networking.");
}
- pending->callback (pending, NULL);
-
-out:
+ pending->callback (pending, tmp_error);
nm_auth_chain_unref (chain);
+ g_clear_error (&tmp_error);
}
static void
@@ -827,8 +798,7 @@ pending_activation_check_authorized (PendingActivation *pending,
/* First check if the user is allowed to use networking at all, giving
* the user a chance to authenticate to gain the permission.
*/
- pending->chain = nm_auth_chain_new (pending->authority,
- pending->context,
+ pending->chain = nm_auth_chain_new (pending->context,
NULL,
pending_auth_net_done,
pending);
@@ -1110,7 +1080,7 @@ manager_hidden_ap_found (NMDeviceInterface *device,
struct ether_addr seen_addr;
if (ether_aton_r (seen_bssid, &seen_addr)) {
- if (memcmp (ap_addr, &seen_addr, sizeof (struct ether_addr))) {
+ if (memcmp (ap_addr, &seen_addr, sizeof (struct ether_addr)) == 0) {
/* Copy the SSID from the connection to the AP */
nm_ap_set_ssid (ap, ssid);
done = TRUE;
@@ -1388,7 +1358,7 @@ manager_device_disconnect_request (NMDevice *device,
NMAuthChain *chain;
/* Otherwise validate the user request */
- chain = nm_auth_chain_new (priv->authority, context, NULL, disconnect_net_auth_done_cb, self);
+ chain = nm_auth_chain_new (context, NULL, disconnect_net_auth_done_cb, self);
g_assert (chain);
priv->auth_chains = g_slist_append (priv->auth_chains, chain);
@@ -2103,7 +2073,6 @@ impl_manager_activate_connection (NMManager *self,
* activate the connection.
*/
pending = pending_activation_new (self,
- priv->authority,
context,
device_path,
connection_path,
@@ -2172,7 +2141,6 @@ impl_manager_add_and_activate_connection (NMManager *self,
* activate the connection.
*/
pending = pending_activation_new (self,
- priv->authority,
context,
device_path,
NULL,
@@ -2236,37 +2204,35 @@ done:
static void
deactivate_net_auth_done_cb (NMAuthChain *chain,
- GError *error,
+ GError *auth_error,
DBusGMethodInvocation *context,
gpointer user_data)
{
NMManager *self = NM_MANAGER (user_data);
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
- GError *ret_error = NULL;
+ GError *error = NULL;
NMAuthCallResult result;
const char *active_path;
priv->auth_chains = g_slist_remove (priv->auth_chains, chain);
result = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, NM_AUTH_PERMISSION_NETWORK_CONTROL));
- ret_error = deactivate_disconnect_check_error (error, result, "Deactivate");
- if (ret_error) {
- dbus_g_method_return_error (context, ret_error);
- g_error_free (ret_error);
- goto done;
+ error = deactivate_disconnect_check_error (auth_error, result, "Deactivate");
+ if (!error) {
+ active_path = nm_auth_chain_get_data (chain, "path");
+ if (!nm_manager_deactivate_connection (self,
+ active_path,
+ NM_DEVICE_STATE_REASON_USER_REQUESTED,
+ &error))
+ g_assert (error);
}
- active_path = nm_auth_chain_get_data (chain, "path");
- if (!nm_manager_deactivate_connection (self,
- active_path,
- NM_DEVICE_STATE_REASON_USER_REQUESTED,
- &ret_error)) {
- dbus_g_method_return_error (context, ret_error);
- g_clear_error (&ret_error);
- } else
+ if (error)
+ dbus_g_method_return_error (context, error);
+ else
dbus_g_method_return (context);
-done:
+ g_clear_error (&error);
nm_auth_chain_unref (chain);
}
@@ -2342,7 +2308,7 @@ impl_manager_deactivate_connection (NMManager *self,
}
/* Otherwise validate the user request */
- chain = nm_auth_chain_new (priv->authority, context, NULL, deactivate_net_auth_done_cb, self);
+ chain = nm_auth_chain_new (context, NULL, deactivate_net_auth_done_cb, self);
g_assert (chain);
priv->auth_chains = g_slist_append (priv->auth_chains, chain);
@@ -2415,25 +2381,6 @@ do_sleep_wake (NMManager *self)
nm_manager_update_state (self);
}
-static gboolean
-return_no_pk_error (PolkitAuthority *authority,
- const char *detail,
- DBusGMethodInvocation *context)
-{
- GError *error;
-
- if (!authority) {
- error = g_error_new (NM_MANAGER_ERROR,
- NM_MANAGER_ERROR_PERMISSION_DENIED,
- "%s request failed: PolicyKit not initialized",
- detail);
- dbus_g_method_return_error (context, error);
- g_error_free (error);
- return FALSE;
- }
- return TRUE;
-}
-
static void
_internal_sleep (NMManager *self, gboolean do_sleep)
{
@@ -2550,10 +2497,7 @@ impl_manager_sleep (NMManager *self,
return;
}
- if (!return_no_pk_error (priv->authority, "Sleep/wake", context))
- return;
-
- chain = nm_auth_chain_new (priv->authority, context, NULL, sleep_auth_done_cb, self);
+ chain = nm_auth_chain_new (context, NULL, sleep_auth_done_cb, self);
g_assert (chain);
priv->auth_chains = g_slist_append (priv->auth_chains, chain);
@@ -2688,10 +2632,7 @@ impl_manager_enable (NMManager *self,
return;
}
- if (!return_no_pk_error (priv->authority, "Enable/disable", context))
- return;
-
- chain = nm_auth_chain_new (priv->authority, context, NULL, enable_net_done_cb, self);
+ chain = nm_auth_chain_new (context, NULL, enable_net_done_cb, self);
g_assert (chain);
priv->auth_chains = g_slist_append (priv->auth_chains, chain);
@@ -2702,13 +2643,6 @@ impl_manager_enable (NMManager *self,
/* Permissions */
static void
-pk_authority_changed_cb (GObject *object, gpointer user_data)
-{
- /* Let clients know they should re-check their authorization */
- g_signal_emit (NM_MANAGER (user_data), signals[CHECK_PERMISSIONS], 0);
-}
-
-static void
get_perm_add_result (NMAuthChain *chain, GHashTable *results, const char *permission)
{
NMAuthCallResult result;
@@ -2772,10 +2706,7 @@ impl_manager_get_permissions (NMManager *self,
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
NMAuthChain *chain;
- if (!return_no_pk_error (priv->authority, "Permissions", context))
- return;
-
- chain = nm_auth_chain_new (priv->authority, context, NULL, get_permissions_done_cb, self);
+ chain = nm_auth_chain_new (context, NULL, get_permissions_done_cb, self);
g_assert (chain);
priv->auth_chains = g_slist_append (priv->auth_chains, chain);
@@ -3059,7 +2990,7 @@ prop_filter (DBusConnection *connection,
if (uid > 0) {
/* Otherwise validate the user request */
- chain = nm_auth_chain_new_raw_message (priv->authority, message, prop_set_auth_done_cb, self);
+ chain = nm_auth_chain_new_raw_message (message, prop_set_auth_done_cb, self);
g_assert (chain);
priv->auth_chains = g_slist_append (priv->auth_chains, chain);
nm_auth_chain_set_data (chain, "prop", g_strdup (glib_propname), g_free);
@@ -3189,7 +3120,8 @@ dispose (GObject *object)
g_slist_foreach (priv->auth_chains, (GFunc) nm_auth_chain_unref, NULL);
g_slist_free (priv->auth_chains);
- g_object_unref (priv->authority);
+
+ nm_auth_set_changed_func (NULL, NULL);
while (g_slist_length (priv->devices)) {
priv->devices = remove_one_device (manager,
@@ -3466,13 +3398,19 @@ periodic_update_active_connection_timestamps (gpointer user_data)
}
static void
+authority_changed_cb (gpointer user_data)
+{
+ /* Let clients know they should re-check their authorization */
+ g_signal_emit (NM_MANAGER (user_data), signals[CHECK_PERMISSIONS], 0);
+}
+
+static void
nm_manager_init (NMManager *manager)
{
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
DBusGConnection *g_connection;
guint id, i;
GFile *file;
- GError *error = NULL;
/* Initialize rfkill structures and states */
memset (priv->radio_states, 0, sizeof (priv->radio_states));
@@ -3563,18 +3501,8 @@ nm_manager_init (NMManager *manager)
} else
nm_log_warn (LOGD_SUSPEND, "could not initialize UPower D-Bus proxy");
- priv->authority = polkit_authority_get_sync (NULL, &error);
- if (priv->authority) {
- priv->auth_changed_id = g_signal_connect (priv->authority,
- "changed",
- G_CALLBACK (pk_authority_changed_cb),
- manager);
- } else {
- nm_log_warn (LOGD_CORE, "failed to create PolicyKit authority: (%d) %s",
- error ? error->code : -1,
- error && error->message ? error->message : "(unknown)");
- g_clear_error (&error);
- }
+ /* Listen for authorization changes */
+ nm_auth_set_changed_func (authority_changed_cb, manager);
/* Monitor the firmware directory */
if (strlen (KERNEL_FIRMWARE_DIR)) {
diff --git a/src/nm-policy.c b/src/nm-policy.c
index 5c30828b2..194d11116 100644
--- a/src/nm-policy.c
+++ b/src/nm-policy.c
@@ -15,7 +15,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2004 - 2010 Red Hat, Inc.
+ * Copyright (C) 2004 - 2011 Red Hat, Inc.
* Copyright (C) 2007 - 2008 Novell, Inc.
*/
@@ -817,22 +817,28 @@ hostname_changed (NMManager *manager, GParamSpec *pspec, gpointer user_data)
}
static void
+reset_retries_all (NMSettings *settings)
+{
+ GSList *connections, *iter;
+
+ connections = nm_settings_get_connections (settings);
+ for (iter = connections; iter; iter = g_slist_next (iter))
+ set_connection_auto_retries (NM_CONNECTION (iter->data), RETRIES_DEFAULT);
+ g_slist_free (connections);
+}
+
+static void
sleeping_changed (NMManager *manager, GParamSpec *pspec, gpointer user_data)
{
NMPolicy *policy = user_data;
gboolean sleeping = FALSE, enabled = FALSE;
- GSList *connections, *iter;
g_object_get (G_OBJECT (manager), NM_MANAGER_SLEEPING, &sleeping, NULL);
g_object_get (G_OBJECT (manager), NM_MANAGER_NETWORKING_ENABLED, &enabled, NULL);
/* Reset retries on all connections so they'll checked on wakeup */
- if (sleeping || !enabled) {
- connections = nm_settings_get_connections (policy->settings);
- for (iter = connections; iter; iter = g_slist_next (iter))
- set_connection_auto_retries (NM_CONNECTION (iter->data), RETRIES_DEFAULT);
- g_slist_free (connections);
- }
+ if (sleeping || !enabled)
+ reset_retries_all (policy->settings);
}
static void
@@ -1045,9 +1051,15 @@ connection_added (NMSettings *settings,
}
static void
-connections_loaded (NMSettings *settings,
- gpointer user_data)
+connections_loaded (NMSettings *settings, gpointer user_data)
{
+ // FIXME: "connections-loaded" signal is emmitted *before* we connect to it
+ // in nm_policy_new(). So this function is never called. Currently we work around
+ // that by calling reset_retries_all() in nm_policy_new()
+
+ /* Initialize connections' auto-retries */
+ reset_retries_all (settings);
+
schedule_activate_all ((NMPolicy *) user_data);
}
@@ -1175,6 +1187,9 @@ nm_policy_new (NMManager *manager,
_connect_settings_signal (policy, NM_SETTINGS_SIGNAL_CONNECTION_VISIBILITY_CHANGED,
connection_visibility_changed);
+ /* Initialize connections' auto-retries */
+ reset_retries_all (policy->settings);
+
initialized = TRUE;
return policy;
}
diff --git a/src/nm-session-monitor.c b/src/nm-session-monitor.c
index c163ee6ad..7ee9013ac 100644
--- a/src/nm-session-monitor.c
+++ b/src/nm-session-monitor.c
@@ -74,6 +74,7 @@ typedef enum {
NM_SESSION_MONITOR_ERROR_IO_ERROR = 0,
NM_SESSION_MONITOR_ERROR_MALFORMED_DATABASE,
NM_SESSION_MONITOR_ERROR_UNKNOWN_USER,
+ NM_SESSION_MONITOR_ERROR_NO_DATABASE,
} NMSessionMonitorError;
GQuark
@@ -101,6 +102,8 @@ nm_session_monitor_error_get_type (void)
ENUM_ENTRY (NM_SESSION_MONITOR_ERROR_MALFORMED_DATABASE, "MalformedDatabase"),
/* Username or UID could could not be found */
ENUM_ENTRY (NM_SESSION_MONITOR_ERROR_UNKNOWN_USER, "UnknownUser"),
+ /* No ConsoleKit database */
+ ENUM_ENTRY (NM_SESSION_MONITOR_ERROR_NO_DATABASE, "NoDatabase"),
{ 0, 0, 0 }
};
@@ -226,10 +229,11 @@ reload_database (NMSessionMonitor *self, GError **error)
free_database (self);
+ errno = 0;
if (stat (CKDB_PATH, &statbuf) != 0) {
g_set_error (error,
NM_SESSION_MONITOR_ERROR,
- NM_SESSION_MONITOR_ERROR_IO_ERROR,
+ errno == ENOENT ? NM_SESSION_MONITOR_ERROR_NO_DATABASE : NM_SESSION_MONITOR_ERROR_IO_ERROR,
"Error statting file " CKDB_PATH ": %s",
strerror (errno));
goto error;
@@ -292,10 +296,11 @@ ensure_database (NMSessionMonitor *self, GError **error)
if (self->database != NULL) {
struct stat statbuf;
+ errno = 0;
if (stat (CKDB_PATH, &statbuf) != 0) {
g_set_error (error,
NM_SESSION_MONITOR_ERROR,
- NM_SESSION_MONITOR_ERROR_IO_ERROR,
+ errno == ENOENT ? NM_SESSION_MONITOR_ERROR_NO_DATABASE : NM_SESSION_MONITOR_ERROR_IO_ERROR,
"Error statting file " CKDB_PATH " to check timestamp: %s",
strerror (errno));
goto out;
@@ -346,7 +351,12 @@ nm_session_monitor_init (NMSessionMonitor *self)
error = NULL;
if (!ensure_database (self, &error)) {
- nm_log_err (LOGD_CORE, "Error loading " CKDB_PATH ": %s", error->message);
+ /* Ignore the first error if the CK database isn't found yet */
+ if (g_error_matches (error,
+ NM_SESSION_MONITOR_ERROR,
+ NM_SESSION_MONITOR_ERROR_NO_DATABASE) == FALSE) {
+ nm_log_err (LOGD_CORE, "Error loading " CKDB_PATH ": %s", error->message);
+ }
g_error_free (error);
}
diff --git a/src/nm-udev-manager.c b/src/nm-udev-manager.c
index 41a4e15b1..e0795e81f 100644
--- a/src/nm-udev-manager.c
+++ b/src/nm-udev-manager.c
@@ -439,9 +439,13 @@ device_creator (NMUdevManager *manager,
if (parent) {
driver = g_udev_device_get_driver (parent);
if (!driver) {
- /* try the grandparent only if it's an ibmebus device */
+ /* try the grandparent if it's an ibmebus device or if the
+ * subsys is NULL which usually indicates some sort of
+ * platform device like a 'gadget' net interface.
+ */
subsys = g_udev_device_get_subsystem (parent);
- if (subsys && !strcmp (subsys, "ibmebus")) {
+ if ( (g_strcmp0 (subsys, "ibmebus") == 0)
+ || (subsys == NULL)) {
grandparent = g_udev_device_get_parent (parent);
if (grandparent)
driver = g_udev_device_get_driver (grandparent);
diff --git a/src/nm-wifi-ap.c b/src/nm-wifi-ap.c
index 6eab9581d..f9c664738 100644
--- a/src/nm-wifi-ap.c
+++ b/src/nm-wifi-ap.c
@@ -58,12 +58,6 @@ typedef struct
/* Non-scanned attributes */
gboolean fake; /* Whether or not the AP is from a scan */
gboolean broadcast; /* Whether or not the AP is broadcasting (hidden) */
- gboolean user_created; /* Whether or not the AP was created
- * by the user with "Create network..."
- * A subset of Ad-Hoc mode. user_created
- * implies Ad-Hoc, but not necessarily
- * the other way around.
- */
glong last_seen; /* Last time the AP was seen in a scan in seconds */
/* Things from user prefs/NetworkManagerInfo */
@@ -863,9 +857,14 @@ nm_ap_set_ssid (NMAccessPoint *ap, const GByteArray * ssid)
}
if (ssid) {
- priv->ssid = g_byte_array_sized_new (ssid->len);
- priv->ssid->len = ssid->len;
- memcpy (priv->ssid->data, ssid->data, ssid->len);
+ /* Should never get zero-length SSIDs */
+ g_warn_if_fail (ssid->len > 0);
+
+ if (ssid->len) {
+ priv->ssid = g_byte_array_sized_new (ssid->len);
+ priv->ssid->len = ssid->len;
+ memcpy (priv->ssid->data, ssid->data, ssid->len);
+ }
}
g_object_notify (G_OBJECT (ap), NM_AP_SSID);
@@ -1154,28 +1153,6 @@ void nm_ap_set_last_seen (NMAccessPoint *ap, const glong last_seen)
/*
- * Get/Set functions to indicate that an access point is
- * user-created, ie whether or not its a network filled with
- * information from the user and intended to create a new Ad-Hoc
- * wireless network.
- *
- */
-gboolean nm_ap_get_user_created (const NMAccessPoint *ap)
-{
- g_return_val_if_fail (NM_IS_AP (ap), FALSE);
-
- return NM_AP_GET_PRIVATE (ap)->user_created;
-}
-
-void nm_ap_set_user_created (NMAccessPoint *ap, gboolean user_created)
-{
- g_return_if_fail (NM_IS_AP (ap));
-
- NM_AP_GET_PRIVATE (ap)->user_created = user_created;
-}
-
-
-/*
* Get/Set functions for user address list
*
* The internal address list is always "owned" by the AP and
diff --git a/src/nm-wifi-ap.h b/src/nm-wifi-ap.h
index 4c98f248d..95514ba6c 100644
--- a/src/nm-wifi-ap.h
+++ b/src/nm-wifi-ap.h
@@ -104,9 +104,6 @@ void nm_ap_set_broadcast (NMAccessPoint *ap, gboolean broadcast);
glong nm_ap_get_last_seen (const NMAccessPoint *ap);
void nm_ap_set_last_seen (NMAccessPoint *ap, const glong last_seen);
-gboolean nm_ap_get_user_created (const NMAccessPoint *ap);
-void nm_ap_set_user_created (NMAccessPoint *ap, gboolean user_created);
-
GSList * nm_ap_get_user_addresses (const NMAccessPoint *ap);
void nm_ap_set_user_addresses (NMAccessPoint *ap, GSList *list);
diff --git a/src/ppp-manager/nm-ppp-manager.c b/src/ppp-manager/nm-ppp-manager.c
index 767b9315d..e863aabac 100644
--- a/src/ppp-manager/nm-ppp-manager.c
+++ b/src/ppp-manager/nm-ppp-manager.c
@@ -798,7 +798,7 @@ create_pppd_cmd_line (NMPPPManager *self,
NMPPPManagerPrivate *priv = NM_PPP_MANAGER_GET_PRIVATE (self);
const char *ppp_binary;
NMCmdLine *cmd;
- const char *ppp_debug;
+ gboolean ppp_debug;
g_return_val_if_fail (setting != NULL, NULL);
@@ -819,7 +819,11 @@ create_pppd_cmd_line (NMPPPManager *self,
/* NM handles setting the default route */
nm_cmd_line_add_string (cmd, "nodefaultroute");
- ppp_debug = getenv ("NM_PPP_DEBUG");
+ ppp_debug = !!getenv ("NM_PPP_DEBUG");
+ if ( nm_logging_level_enabled (LOGL_DEBUG)
+ && nm_logging_domain_enabled (LOGD_PPP))
+ ppp_debug = TRUE;
+
if (ppp_debug)
nm_cmd_line_add_string (cmd, "debug");
diff --git a/src/settings/Makefile.am b/src/settings/Makefile.am
index 55b5b7ef0..21dc5bb0e 100644
--- a/src/settings/Makefile.am
+++ b/src/settings/Makefile.am
@@ -32,7 +32,6 @@ libsettings_la_SOURCES = \
nm-settings.h \
nm-inotify-helper.c \
nm-inotify-helper.h \
- nm-polkit-helpers.h \
nm-settings-error.c \
nm-settings-error.h \
nm-system-config-interface.c \
diff --git a/src/settings/Makefile.in b/src/settings/Makefile.in
index 123132b74..980f35cb1 100644
--- a/src/settings/Makefile.in
+++ b/src/settings/Makefile.in
@@ -396,7 +396,6 @@ libsettings_la_SOURCES = \
nm-settings.h \
nm-inotify-helper.c \
nm-inotify-helper.h \
- nm-polkit-helpers.h \
nm-settings-error.c \
nm-settings-error.h \
nm-system-config-interface.c \
diff --git a/src/settings/nm-agent-manager.c b/src/settings/nm-agent-manager.c
index dbc29cae4..8a5ea1068 100644
--- a/src/settings/nm-agent-manager.c
+++ b/src/settings/nm-agent-manager.c
@@ -33,7 +33,6 @@
#include "nm-secret-agent.h"
#include "nm-manager-auth.h"
#include "nm-dbus-glib-types.h"
-#include "nm-polkit-helpers.h"
#include "nm-manager-auth.h"
#include "nm-setting-vpn.h"
#include "nm-setting-connection.h"
@@ -49,7 +48,6 @@ typedef struct {
NMDBusManager *dbus_mgr;
NMSessionMonitor *session_monitor;
- PolkitAuthority *authority;
/* Hashed by owner name, not identifier, since two agents in different
* sessions can use the same identifier.
@@ -338,7 +336,6 @@ typedef void (*RequestCancelFunc) (Request *req);
struct _Request {
guint32 reqid;
- PolkitAuthority *authority;
NMAuthChain *chain;
NMConnection *connection;
@@ -381,7 +378,6 @@ static guint32 next_req_id = 1;
static Request *
request_new_get (NMConnection *connection,
- PolkitAuthority *authority,
gboolean filter_by_uid,
gulong uid_filter,
GHashTable *existing_secrets,
@@ -402,7 +398,6 @@ request_new_get (NMConnection *connection,
req = g_malloc0 (sizeof (Request));
req->reqid = next_req_id++;
req->connection = g_object_ref (connection);
- req->authority = g_object_ref (authority);
req->filter_by_uid = filter_by_uid;
req->uid_filter = uid_filter;
if (existing_secrets)
@@ -462,8 +457,6 @@ request_free (Request *req)
g_hash_table_unref (req->existing_secrets);
if (req->chain)
nm_auth_chain_unref (req->chain);
- if (req->authority)
- g_object_unref (req->authority);
memset (req, 0, sizeof (Request));
g_free (req);
}
@@ -853,10 +846,10 @@ check_system_secrets_cb (NMSetting *setting,
/* VPNs are special; need to handle each secret separately */
g_hash_table_iter_init (&iter, (GHashTable *) g_value_get_boxed (value));
while (g_hash_table_iter_next (&iter, (gpointer *) &secret_name, NULL)) {
- if (nm_setting_get_secret_flags (setting, secret_name, &secret_flags, NULL)) {
- if (secret_flags == NM_SETTING_SECRET_FLAG_NONE)
- *has_system = TRUE;
- }
+ secret_flags = NM_SETTING_SECRET_FLAG_NONE;
+ nm_setting_get_secret_flags (setting, secret_name, &secret_flags, NULL);
+ if (secret_flags == NM_SETTING_SECRET_FLAG_NONE)
+ *has_system = TRUE;
}
} else {
nm_setting_get_secret_flags (setting, key, &secret_flags, NULL);
@@ -896,8 +889,7 @@ get_next_cb (Request *req)
nm_log_dbg (LOGD_AGENTS, "(%p/%s) request has system secrets; checking agent %s for MODIFY",
req, req->setting_name, agent_dbus_owner);
- req->chain = nm_auth_chain_new_dbus_sender (req->authority,
- agent_dbus_owner,
+ req->chain = nm_auth_chain_new_dbus_sender (agent_dbus_owner,
get_agent_modify_auth_cb,
req);
g_assert (req->chain);
@@ -1050,7 +1042,6 @@ nm_agent_manager_get_secrets (NMAgentManager *self,
*/
req = request_new_get (connection,
- priv->authority,
filter_by_uid,
uid_filter,
existing_secrets,
@@ -1335,15 +1326,6 @@ static void
nm_agent_manager_init (NMAgentManager *self)
{
NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (self);
- GError *error = NULL;
-
- priv->authority = polkit_authority_get_sync (NULL, &error);
- if (!priv->authority) {
- nm_log_warn (LOGD_SETTINGS, "failed to create PolicyKit authority: (%d) %s",
- error ? error->code : -1,
- error && error->message ? error->message : "(unknown)");
- g_clear_error (&error);
- }
priv->agents = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
priv->requests = g_hash_table_new_full (g_direct_hash,
@@ -1365,7 +1347,6 @@ dispose (GObject *object)
g_object_unref (priv->session_monitor);
g_object_unref (priv->dbus_mgr);
- g_object_unref (priv->authority);
}
G_OBJECT_CLASS (nm_agent_manager_parent_class)->dispose (object);
diff --git a/src/settings/nm-polkit-helpers.h b/src/settings/nm-polkit-helpers.h
deleted file mode 100644
index d812e9445..000000000
--- a/src/settings/nm-polkit-helpers.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager system settings service
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * (C) Copyright 2008 Novell, Inc.
- * (C) Copyright 2008 - 2010 Red Hat, Inc.
- */
-
-#ifndef NM_POLKIT_HELPERS_H
-#define NM_POLKIT_HELPERS_H
-
-#include <polkit/polkit.h>
-
-/* Fix for polkit 0.97 and later */
-#if !HAVE_POLKIT_AUTHORITY_GET_SYNC
-static inline PolkitAuthority *
-polkit_authority_get_sync (GCancellable *cancellable, GError **error)
-{
- PolkitAuthority *authority;
-
- authority = polkit_authority_get ();
- if (!authority)
- g_set_error (error, 0, 0, "failed to get the PolicyKit authority");
- return authority;
-}
-#endif
-
-#endif /* NM_POLKIT_HELPERS_H */
diff --git a/src/settings/nm-settings-connection.c b/src/settings/nm-settings-connection.c
index 22aef7161..60de6b068 100644
--- a/src/settings/nm-settings-connection.c
+++ b/src/settings/nm-settings-connection.c
@@ -34,7 +34,6 @@
#include "nm-dbus-manager.h"
#include "nm-settings-error.h"
#include "nm-dbus-glib-types.h"
-#include "nm-polkit-helpers.h"
#include "nm-logging.h"
#include "nm-manager-auth.h"
#include "nm-marshal.h"
@@ -83,7 +82,6 @@ typedef struct {
NMDBusManager *dbus_mgr;
NMAgentManager *agent_mgr;
- PolkitAuthority *authority;
GSList *pending_auths; /* List of pending authentication requests */
NMConnection *secrets;
gboolean visible; /* Is this connection is visible by some session? */
@@ -98,6 +96,83 @@ typedef struct {
/**************************************************************/
+/* Return TRUE to continue, FALSE to stop */
+typedef gboolean (*ForEachSecretFunc) (GHashTableIter *iter,
+ NMSettingSecretFlags flags,
+ gpointer user_data);
+
+static void
+for_each_secret (NMConnection *connection,
+ GHashTable *secrets,
+ ForEachSecretFunc callback,
+ gpointer callback_data)
+{
+ GHashTableIter iter;
+ const char *setting_name;
+ GHashTable *setting_hash;
+
+ /* This function, given a hash of hashes representing new secrets of
+ * an NMConnection, walks through each toplevel hash (which represents a
+ * NMSetting), and for each setting, walks through that setting hash's
+ * properties. For each property that's a secret, it will check that
+ * secret's flags in the backing NMConnection object, and call a supplied
+ * callback.
+ *
+ * The one complexity is that the VPN setting's 'secrets' property is
+ * *also* a hash table (since the key/value pairs are arbitrary and known
+ * only to the VPN plugin itself). That means we have three levels of
+ * GHashTables that we potentially have to traverse here. When we hit the
+ * VPN setting's 'secrets' property, we special-case that and iterate over
+ * each item in that 'secrets' hash table, calling the supplied callback
+ * each time.
+ */
+
+ /* Walk through the list of setting hashes */
+ g_hash_table_iter_init (&iter, secrets);
+ while (g_hash_table_iter_next (&iter, (gpointer) &setting_name, (gpointer) &setting_hash)) {
+ NMSetting *setting;
+ GHashTableIter secret_iter;
+ const char *secret_name;
+ GValue *val;
+
+ /* Get the actual NMSetting from the connection so we can get secret flags
+ * from the connection data, since flags aren't secrets. What we're
+ * iterating here is just the secrets, not a whole connection.
+ */
+ setting = nm_connection_get_setting_by_name (connection, setting_name);
+ if (setting == NULL)
+ continue;
+
+ /* Walk through the list of keys in each setting hash */
+ g_hash_table_iter_init (&secret_iter, setting_hash);
+ while (g_hash_table_iter_next (&secret_iter, (gpointer) &secret_name, (gpointer) &val)) {
+ NMSettingSecretFlags secret_flags = NM_SETTING_SECRET_FLAG_NONE;
+
+ /* VPN secrets need slightly different treatment here since the
+ * "secrets" property is actually a hash table of secrets.
+ */
+ if (NM_IS_SETTING_VPN (setting) && (g_strcmp0 (secret_name, NM_SETTING_VPN_SECRETS) == 0)) {
+ GHashTableIter vpn_secrets_iter;
+
+ /* Iterate through each secret from the VPN hash in the overall secrets hash */
+ g_hash_table_iter_init (&vpn_secrets_iter, g_value_get_boxed (val));
+ while (g_hash_table_iter_next (&vpn_secrets_iter, (gpointer) &secret_name, NULL)) {
+ secret_flags = NM_SETTING_SECRET_FLAG_NONE;
+ nm_setting_get_secret_flags (setting, secret_name, &secret_flags, NULL);
+ if (callback (&vpn_secrets_iter, secret_flags, callback_data) == FALSE)
+ return;
+ }
+ } else {
+ nm_setting_get_secret_flags (setting, secret_name, &secret_flags, NULL);
+ if (callback (&secret_iter, secret_flags, callback_data) == FALSE)
+ return;
+ }
+ }
+ }
+}
+
+/**************************************************************/
+
static void
set_visible (NMSettingsConnection *self, gboolean new_visible)
{
@@ -112,7 +187,8 @@ set_visible (NMSettingsConnection *self, gboolean new_visible)
gboolean
nm_settings_connection_is_visible (NMSettingsConnection *self)
{
- g_return_val_if_fail (NM_SETTINGS_CONNECTION (self), FALSE);
+ g_return_val_if_fail (self != NULL, FALSE);
+ g_return_val_if_fail (NM_IS_SETTINGS_CONNECTION (self), FALSE);
return NM_SETTINGS_CONNECTION_GET_PRIVATE (self)->visible;
}
@@ -124,7 +200,8 @@ nm_settings_connection_recheck_visibility (NMSettingsConnection *self)
NMSettingConnection *s_con;
guint32 num, i;
- g_return_if_fail (NM_SETTINGS_CONNECTION (self));
+ g_return_if_fail (self != NULL);
+ g_return_if_fail (NM_IS_SETTINGS_CONNECTION (self));
priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
@@ -178,10 +255,10 @@ only_system_secrets_cb (NMSetting *setting,
g_hash_table_iter_init (&iter, (GHashTable *) g_value_get_boxed (value));
while (g_hash_table_iter_next (&iter, (gpointer *) &secret_name, NULL)) {
- if (nm_setting_get_secret_flags (setting, secret_name, &secret_flags, NULL)) {
- if (secret_flags != NM_SETTING_SECRET_FLAG_NONE)
- nm_setting_vpn_remove_secret (NM_SETTING_VPN (setting), secret_name);
- }
+ secret_flags = NM_SETTING_SECRET_FLAG_NONE;
+ nm_setting_get_secret_flags (setting, secret_name, &secret_flags, NULL);
+ if (secret_flags != NM_SETTING_SECRET_FLAG_NONE)
+ nm_setting_vpn_remove_secret (NM_SETTING_VPN (setting), secret_name);
}
} else {
nm_setting_get_secret_flags (setting, key, &secret_flags, NULL);
@@ -204,15 +281,26 @@ update_secrets_cache (NMSettingsConnection *self)
nm_connection_for_each_setting_value (priv->secrets, only_system_secrets_cb, NULL);
}
+static gboolean
+clear_system_secrets (GHashTableIter *iter,
+ NMSettingSecretFlags flags,
+ gpointer user_data)
+{
+ if (flags == NM_SETTING_SECRET_FLAG_NONE)
+ g_hash_table_iter_remove (iter);
+ return TRUE;
+}
+
/* Update the settings of this connection to match that of 'new', taking care to
- * make a private copy of secrets. */
+ * make a private copy of secrets.
+ */
gboolean
nm_settings_connection_replace_settings (NMSettingsConnection *self,
NMConnection *new,
GError **error)
{
NMSettingsConnectionPrivate *priv;
- GHashTable *new_settings;
+ GHashTable *new_settings, *transient_secrets;
gboolean success = FALSE;
g_return_val_if_fail (self != NULL, FALSE);
@@ -222,18 +310,48 @@ nm_settings_connection_replace_settings (NMSettingsConnection *self,
priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
+ /* Replacing the settings might replace transient secrets, such as when
+ * a user agent returns secrets, which might trigger the connection to be
+ * written out, which triggers an inotify event to re-read and update the
+ * connection, which, if we're not careful, could wipe out the transient
+ * secrets the user agent just sent us. Basically, only
+ * nm_connection_clear_secrets() should wipe out transient secrets but
+ * re-reading a connection from on-disk and updating our in-memory copy
+ * should not. Thus we preserve non-system-owned secrets here.
+ */
+ transient_secrets = nm_connection_to_hash (NM_CONNECTION (self), NM_SETTING_HASH_FLAG_ONLY_SECRETS);
+ if (transient_secrets)
+ for_each_secret (NM_CONNECTION (self), transient_secrets, clear_system_secrets, NULL);
+
new_settings = nm_connection_to_hash (new, NM_SETTING_HASH_FLAG_ALL);
g_assert (new_settings);
if (nm_connection_replace_settings (NM_CONNECTION (self), new_settings, error)) {
+ GHashTableIter iter;
+ NMSetting *setting;
+ const char *setting_name;
+ GHashTable *setting_hash;
+
/* Copy the connection to keep its secrets around even if NM
* calls nm_connection_clear_secrets().
*/
update_secrets_cache (self);
+ /* And add the transient secrets back */
+ if (transient_secrets) {
+ g_hash_table_iter_init (&iter, transient_secrets);
+ while (g_hash_table_iter_next (&iter, (gpointer) &setting_name, (gpointer) &setting_hash)) {
+ setting = nm_connection_get_setting_by_name (NM_CONNECTION (self), setting_name);
+ if (setting)
+ nm_setting_update_secrets (setting, setting_hash, NULL);
+ }
+ }
+
nm_settings_connection_recheck_visibility (self);
success = TRUE;
}
g_hash_table_destroy (new_settings);
+ if (transient_secrets)
+ g_hash_table_destroy (transient_secrets);
return success;
}
@@ -398,11 +516,6 @@ supports_secrets (NMSettingsConnection *connection, const char *setting_name)
return TRUE;
}
-/* Return TRUE to continue, FALSE to stop */
-typedef gboolean (*ForEachSecretFunc) (GHashTableIter *iter,
- NMSettingSecretFlags flags,
- gpointer user_data);
-
static gboolean
clear_nonagent_secrets (GHashTableIter *iter,
NMSettingSecretFlags flags,
@@ -430,7 +543,7 @@ has_system_owned_secrets (GHashTableIter *iter,
{
gboolean *has_system_owned = user_data;
- if (!(flags & NM_SETTING_SECRET_FLAG_AGENT_OWNED)) {
+ if (flags == NM_SETTING_SECRET_FLAG_NONE) {
*has_system_owned = TRUE;
return FALSE;
}
@@ -438,40 +551,6 @@ has_system_owned_secrets (GHashTableIter *iter,
}
static void
-for_each_secret (NMConnection *connection,
- GHashTable *secrets,
- ForEachSecretFunc callback,
- gpointer callback_data)
-{
- GHashTableIter iter;
- const char *setting_name;
- GHashTable *setting_hash;
-
- /* Walk through the list of setting hashes */
- g_hash_table_iter_init (&iter, secrets);
- while (g_hash_table_iter_next (&iter,
- (gpointer *) &setting_name,
- (gpointer *) &setting_hash)) {
- GHashTableIter setting_iter;
- const char *secret_name;
-
- /* Walk through the list of keys in each setting hash */
- g_hash_table_iter_init (&setting_iter, setting_hash);
- while (g_hash_table_iter_next (&setting_iter, (gpointer *) &secret_name, NULL)) {
- NMSetting *setting;
- NMSettingSecretFlags flags = NM_SETTING_SECRET_FLAG_NONE;
-
- /* Get the actual NMSetting from the connection so we can get secret flags */
- setting = nm_connection_get_setting_by_name (connection, setting_name);
- if (setting && nm_setting_get_secret_flags (setting, secret_name, &flags, NULL)) {
- if (callback (&setting_iter, flags, callback_data) == FALSE)
- return;
- }
- }
- }
-}
-
-static void
new_secrets_commit_cb (NMSettingsConnection *connection,
GError *error,
gpointer user_data)
@@ -850,7 +929,7 @@ auth_start (NMSettingsConnection *self,
}
if (check_permission) {
- chain = nm_auth_chain_new (priv->authority, context, NULL, pk_auth_cb, self);
+ chain = nm_auth_chain_new (context, NULL, pk_auth_cb, self);
g_assert (chain);
nm_auth_chain_set_data (chain, "perm", (gpointer) check_permission, NULL);
nm_auth_chain_set_data (chain, "callback", callback, NULL);
@@ -980,10 +1059,10 @@ only_agent_secrets_cb (NMSetting *setting,
/* VPNs are special; need to handle each secret separately */
g_hash_table_iter_init (&iter, (GHashTable *) g_value_get_boxed (value));
while (g_hash_table_iter_next (&iter, (gpointer *) &secret_name, NULL)) {
- if (nm_setting_get_secret_flags (setting, secret_name, &secret_flags, NULL)) {
- if (secret_flags != NM_SETTING_SECRET_FLAG_AGENT_OWNED)
- nm_setting_vpn_remove_secret (NM_SETTING_VPN (setting), secret_name);
- }
+ secret_flags = NM_SETTING_SECRET_FLAG_NONE;
+ nm_setting_get_secret_flags (setting, secret_name, &secret_flags, NULL);
+ if (secret_flags != NM_SETTING_SECRET_FLAG_AGENT_OWNED)
+ nm_setting_vpn_remove_secret (NM_SETTING_VPN (setting), secret_name);
}
} else {
nm_setting_get_secret_flags (setting, key, &secret_flags, NULL);
@@ -1271,7 +1350,8 @@ nm_settings_connection_signal_remove (NMSettingsConnection *self)
guint64
nm_settings_connection_get_timestamp (NMSettingsConnection *connection)
{
- g_return_val_if_fail (NM_SETTINGS_CONNECTION (connection), 0);
+ g_return_val_if_fail (connection != NULL, 0);
+ g_return_val_if_fail (NM_IS_SETTINGS_CONNECTION (connection), 0);
return NM_SETTINGS_CONNECTION_GET_PRIVATE (connection)->timestamp;
}
@@ -1368,18 +1448,9 @@ nm_settings_connection_init (NMSettingsConnection *self)
NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
static guint32 dbus_counter = 0;
char *dbus_path;
- GError *error = NULL;
priv->dbus_mgr = nm_dbus_manager_get ();
- priv->authority = polkit_authority_get_sync (NULL, &error);
- if (!priv->authority) {
- nm_log_warn (LOGD_SETTINGS, "failed to create PolicyKit authority: (%d) %s",
- error ? error->code : -1,
- error && error->message ? error->message : "(unknown)");
- g_clear_error (&error);
- }
-
dbus_path = g_strdup_printf ("%s/%u", NM_DBUS_PATH_SETTINGS, dbus_counter++);
nm_connection_set_path (NM_CONNECTION (self), dbus_path);
g_free (dbus_path);
@@ -1421,10 +1492,11 @@ dispose (GObject *object)
set_visible (self, FALSE);
+ if (priv->session_changed_id)
+ g_signal_handler_disconnect (priv->session_monitor, priv->session_changed_id);
g_object_unref (priv->session_monitor);
g_object_unref (priv->agent_mgr);
g_object_unref (priv->dbus_mgr);
- g_object_unref (priv->authority);
out:
G_OBJECT_CLASS (nm_settings_connection_parent_class)->dispose (object);
diff --git a/src/settings/nm-settings.c b/src/settings/nm-settings.c
index 87fa4b6c9..e23e8d133 100644
--- a/src/settings/nm-settings.c
+++ b/src/settings/nm-settings.c
@@ -56,7 +56,6 @@
#include "nm-dbus-glib-types.h"
#include "nm-settings.h"
#include "nm-settings-connection.h"
-#include "nm-polkit-helpers.h"
#include "nm-settings-error.h"
#include "nm-default-wired-connection.h"
#include "nm-logging.h"
@@ -114,8 +113,6 @@ typedef struct {
NMAgentManager *agent_mgr;
- PolkitAuthority *authority;
- guint auth_changed_id;
char *config_file;
NMSessionMonitor *session_monitor;
@@ -702,6 +699,46 @@ connection_visibility_changed (NMSettingsConnection *connection,
connection);
}
+#define NM_DBUS_SERVICE_OPENCONNECT "org.freedesktop.NetworkManager.openconnect"
+#define NM_OPENCONNECT_KEY_GATEWAY "gateway"
+#define NM_OPENCONNECT_KEY_COOKIE "cookie"
+#define NM_OPENCONNECT_KEY_GWCERT "gwcert"
+#define NM_OPENCONNECT_KEY_XMLCONFIG "xmlconfig"
+#define NM_OPENCONNECT_KEY_LASTHOST "lasthost"
+#define NM_OPENCONNECT_KEY_AUTOCONNECT "autoconnect"
+#define NM_OPENCONNECT_KEY_CERTSIGS "certsigs"
+
+static void
+openconnect_migrate_hack (NMConnection *connection)
+{
+ NMSettingVPN *s_vpn;
+ NMSettingSecretFlags flags = NM_SETTING_SECRET_FLAG_NOT_SAVED;
+
+ /* Huge hack. There were some openconnect changes that needed to happen
+ * pretty late, too late to get into distros. Migration has already
+ * happened for many people, and their secret flags are wrong. But we
+ * don't want to requrie re-migration, so we have to fix it up here. Ugh.
+ */
+
+ s_vpn = nm_connection_get_setting_vpn (connection);
+ if (s_vpn == NULL)
+ return;
+
+ if (g_strcmp0 (nm_setting_vpn_get_service_type (s_vpn), NM_DBUS_SERVICE_OPENCONNECT) == 0) {
+ /* These are different for every login session, and should not be stored */
+ nm_setting_set_secret_flags (NM_SETTING (s_vpn), NM_OPENCONNECT_KEY_GATEWAY, flags, NULL);
+ nm_setting_set_secret_flags (NM_SETTING (s_vpn), NM_OPENCONNECT_KEY_COOKIE, flags, NULL);
+ nm_setting_set_secret_flags (NM_SETTING (s_vpn), NM_OPENCONNECT_KEY_GWCERT, flags, NULL);
+
+ /* These are purely internal data for the auth-dialog, and should be stored */
+ flags = 0;
+ nm_setting_set_secret_flags (NM_SETTING (s_vpn), NM_OPENCONNECT_KEY_XMLCONFIG, flags, NULL);
+ nm_setting_set_secret_flags (NM_SETTING (s_vpn), NM_OPENCONNECT_KEY_LASTHOST, flags, NULL);
+ nm_setting_set_secret_flags (NM_SETTING (s_vpn), NM_OPENCONNECT_KEY_AUTOCONNECT, flags, NULL);
+ nm_setting_set_secret_flags (NM_SETTING (s_vpn), NM_OPENCONNECT_KEY_CERTSIGS, flags, NULL);
+ }
+}
+
static void
claim_connection (NMSettings *self,
NMSettingsConnection *connection,
@@ -739,6 +776,9 @@ claim_connection (NMSettings *self,
/* Ensure it's initial visibility is up-to-date */
nm_settings_connection_recheck_visibility (connection);
+ /* Evil openconnect migration hack */
+ openconnect_migrate_hack (NM_CONNECTION (connection));
+
id = g_signal_connect (connection, NM_SETTINGS_CONNECTION_REMOVED,
G_CALLBACK (connection_removed),
self);
@@ -999,7 +1039,7 @@ nm_settings_add_connection (NMSettings *self,
perm = NM_AUTH_PERMISSION_SETTINGS_MODIFY_SYSTEM;
/* Otherwise validate the user request */
- chain = nm_auth_chain_new (priv->authority, context, NULL, pk_add_cb, self);
+ chain = nm_auth_chain_new (context, NULL, pk_add_cb, self);
g_assert (chain);
priv->auths = g_slist_append (priv->auths, chain);
nm_auth_chain_add_call (chain, perm, TRUE);
@@ -1111,7 +1151,7 @@ impl_settings_save_hostname (NMSettings *self,
}
/* Otherwise validate the user request */
- chain = nm_auth_chain_new (priv->authority, context, NULL, pk_hostname_cb, self);
+ chain = nm_auth_chain_new (context, NULL, pk_hostname_cb, self);
g_assert (chain);
priv->auths = g_slist_append (priv->auths, chain);
nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME, TRUE);
@@ -1476,18 +1516,9 @@ static void
nm_settings_init (NMSettings *self)
{
NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
- GError *error = NULL;
priv->connections = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_object_unref);
- priv->authority = polkit_authority_get_sync (NULL, &error);
- if (!priv->authority) {
- nm_log_warn (LOGD_SETTINGS, "failed to create PolicyKit authority: (%d) %s",
- error ? error->code : -1,
- error && error->message ? error->message : "(unknown)");
- g_clear_error (&error);
- }
-
priv->session_monitor = nm_session_monitor_get ();
/* Hold a reference to the agent manager so it stays alive; the only
@@ -1505,11 +1536,6 @@ dispose (GObject *object)
NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
GSList *iter;
- if (priv->auth_changed_id) {
- g_signal_handler_disconnect (priv->authority, priv->auth_changed_id);
- priv->auth_changed_id = 0;
- }
-
for (iter = priv->auths; iter; iter = g_slist_next (iter))
nm_auth_chain_unref ((NMAuthChain *) iter->data);
g_slist_free (priv->auths);
diff --git a/src/settings/plugins/keyfile/writer.c b/src/settings/plugins/keyfile/writer.c
index 5ecf5891c..eeb145560 100644
--- a/src/settings/plugins/keyfile/writer.c
+++ b/src/settings/plugins/keyfile/writer.c
@@ -453,17 +453,22 @@ write_hash_of_string (GKeyFile *file,
g_hash_table_iter_init (&iter, (GHashTable *) g_value_get_boxed (value));
while (g_hash_table_iter_next (&iter, (gpointer *) &property, (gpointer *) &data)) {
- NMSettingSecretFlags flags = NM_SETTING_SECRET_FLAG_NONE;
+ gboolean write_item = TRUE;
/* Handle VPN secrets specially; they are nested in the property's hash;
- * we don't want to write them if the secret is not saved or not required.
+ * we don't want to write them if the secret is not saved, not required,
+ * or owned by a user's secret agent.
*/
- if (vpn_secrets && nm_setting_get_secret_flags (setting, property, &flags, NULL)) {
- if (flags & (NM_SETTING_SECRET_FLAG_NOT_SAVED | NM_SETTING_SECRET_FLAG_NOT_REQUIRED))
- continue;
+ if (vpn_secrets) {
+ NMSettingSecretFlags secret_flags = NM_SETTING_SECRET_FLAG_NONE;
+
+ nm_setting_get_secret_flags (setting, property, &secret_flags, NULL);
+ if (secret_flags != NM_SETTING_SECRET_FLAG_NONE)
+ write_item = FALSE;
}
- g_key_file_set_string (file, group_name, property, data);
+ if (write_item)
+ g_key_file_set_string (file, group_name, property, data);
}
}
@@ -799,7 +804,6 @@ write_setting_value (NMSetting *setting,
GType type = G_VALUE_TYPE (value);
KeyWriter *writer = &key_writers[0];
GParamSpec *pspec;
- NMSettingSecretFlags flags = NM_SETTING_SECRET_FLAG_NONE;
/* Setting name gets picked up from the keyfile's section name instead */
if (!strcmp (key, NM_SETTING_NAME))
@@ -822,12 +826,17 @@ write_setting_value (NMSetting *setting,
}
/* Don't write secrets that are owned by user secret agents or aren't
- * supposed to be saved.
+ * supposed to be saved. VPN secrets are handled specially though since
+ * the secret flags there are in a third-level hash in the 'secrets'
+ * property.
*/
- if ( (pspec->flags & NM_SETTING_PARAM_SECRET)
- && nm_setting_get_secret_flags (setting, key, &flags, NULL)
- && (flags != NM_SETTING_SECRET_FLAG_NONE))
- return;
+ if (pspec->flags & NM_SETTING_PARAM_SECRET && !NM_IS_SETTING_VPN (setting)) {
+ NMSettingSecretFlags secret_flags = NM_SETTING_SECRET_FLAG_NONE;
+
+ nm_setting_get_secret_flags (setting, key, &secret_flags, NULL);
+ if (secret_flags != NM_SETTING_SECRET_FLAG_NONE)
+ return;
+ }
/* Look through the list of handlers for non-standard format key values */
while (writer->setting_name) {
diff --git a/src/vpn-manager/Makefile.am b/src/vpn-manager/Makefile.am
index 3b206617f..ce99728ed 100644
--- a/src/vpn-manager/Makefile.am
+++ b/src/vpn-manager/Makefile.am
@@ -22,6 +22,7 @@ libvpn_manager_la_SOURCES = \
nm-vpn-connection.h
libvpn_manager_la_CPPFLAGS = \
+ $(LIBNL_CFLAGS) \
$(DBUS_CFLAGS) \
$(GLIB_CFLAGS) \
-DG_DISABLE_DEPRECATED
@@ -30,6 +31,7 @@ libvpn_manager_la_LIBADD = \
$(top_builddir)/marshallers/libmarshallers.la \
$(top_builddir)/src/logging/libnm-logging.la \
$(top_builddir)/libnm-util/libnm-util.la \
+ $(LIBNL_LIBS) \
$(DBUS_LIBS) \
$(GLIB_LIBS)
diff --git a/src/vpn-manager/Makefile.in b/src/vpn-manager/Makefile.in
index a8fea32d6..3785667e9 100644
--- a/src/vpn-manager/Makefile.in
+++ b/src/vpn-manager/Makefile.in
@@ -60,7 +60,7 @@ libvpn_manager_la_DEPENDENCIES = \
$(top_builddir)/marshallers/libmarshallers.la \
$(top_builddir)/src/logging/libnm-logging.la \
$(top_builddir)/libnm-util/libnm-util.la $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1)
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
am_libvpn_manager_la_OBJECTS = libvpn_manager_la-nm-vpn-manager.lo \
libvpn_manager_la-nm-vpn-service.lo \
libvpn_manager_la-nm-vpn-connection-base.lo \
@@ -328,6 +328,7 @@ libvpn_manager_la_SOURCES = \
nm-vpn-connection.h
libvpn_manager_la_CPPFLAGS = \
+ $(LIBNL_CFLAGS) \
$(DBUS_CFLAGS) \
$(GLIB_CFLAGS) \
-DG_DISABLE_DEPRECATED
@@ -336,6 +337,7 @@ libvpn_manager_la_LIBADD = \
$(top_builddir)/marshallers/libmarshallers.la \
$(top_builddir)/src/logging/libnm-logging.la \
$(top_builddir)/libnm-util/libnm-util.la \
+ $(LIBNL_LIBS) \
$(DBUS_LIBS) \
$(GLIB_LIBS)
diff --git a/src/wimax/nm-device-wimax.c b/src/wimax/nm-device-wimax.c
index 12db7e272..9dff503d8 100644
--- a/src/wimax/nm-device-wimax.c
+++ b/src/wimax/nm-device-wimax.c
@@ -278,6 +278,8 @@ remove_all_nsps (NMDeviceWimax *self)
{
NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
+ set_current_nsp (self, NULL);
+
while (g_slist_length (priv->nsp_list)) {
NMWimaxNsp *nsp = NM_WIMAX_NSP (priv->nsp_list->data);
@@ -717,29 +719,43 @@ real_act_stage1_prepare (NMDevice *device, NMDeviceStateReason *reason)
NMActRequest *req;
GSList *iter;
const char *path;
+ NMWimaxNsp *nsp = NULL;
clear_link_timeout (NM_DEVICE_WIMAX (device));
+ *reason = NM_DEVICE_STATE_REASON_NONE;
+
req = nm_device_get_act_request (device);
if (!req)
- goto err;
+ return NM_ACT_STAGE_RETURN_FAILURE;
path = nm_act_request_get_specific_object (req);
if (!path)
- goto err;
+ return NM_ACT_STAGE_RETURN_FAILURE;
+ /* Find the NSP in the scan list */
for (iter = priv->nsp_list; iter; iter = iter->next) {
- NMWimaxNsp *nsp = NM_WIMAX_NSP (iter->data);
+ NMWimaxNsp *candidate = NM_WIMAX_NSP (iter->data);
- if (!strcmp (path, nm_wimax_nsp_get_dbus_path (nsp))) {
- set_current_nsp (NM_DEVICE_WIMAX (device), nsp);
- return NM_ACT_STAGE_RETURN_SUCCESS;
+ if (!strcmp (path, nm_wimax_nsp_get_dbus_path (candidate))) {
+ nsp = candidate;
+ break;
}
}
- err:
- *reason = NM_DEVICE_STATE_REASON_NONE;
- return NM_ACT_STAGE_RETURN_FAILURE;
+ /* Couldn't find the NSP for some reason */
+ if (nsp == NULL)
+ return NM_ACT_STAGE_RETURN_FAILURE;
+
+ set_current_nsp (NM_DEVICE_WIMAX (device), nsp);
+
+ /* If the device is scanning, it won't connect, so we have to wait until
+ * it's not scanning to proceed to stage 2.
+ */
+ if (priv->status == WIMAX_API_DEVICE_STATUS_Scanning)
+ return NM_ACT_STAGE_RETURN_POSTPONE;
+
+ return NM_ACT_STAGE_RETURN_SUCCESS;
}
static NMActStageReturn
@@ -857,11 +873,11 @@ wmx_state_change_cb (struct wmxsdk *wmxsdk,
if (priv->current_nsp)
nsp_name = nm_wimax_nsp_get_name (priv->current_nsp);
- nm_log_dbg (LOGD_WIMAX, "(%s): wimax state change %s -> %s (reason %d)",
- iface,
- iwmx_sdk_dev_status_to_str (old_status),
- iwmx_sdk_dev_status_to_str (new_status),
- reason);
+ nm_log_info (LOGD_WIMAX, "(%s): wimax state change %s -> %s (reason %d)",
+ iface,
+ iwmx_sdk_dev_status_to_str (old_status),
+ iwmx_sdk_dev_status_to_str (new_status),
+ reason);
switch (new_status) {
case WIMAX_API_DEVICE_STATUS_UnInitialized:
@@ -915,6 +931,18 @@ wmx_state_change_cb (struct wmxsdk *wmxsdk,
NM_DEVICE_STATE_REASON_CONFIG_FAILED);
return;
}
+
+ /* If stage2 was postponed because the device was scanning or something,
+ * then check if we need to move to stage2 now that the device might be
+ * ready.
+ */
+ if (state == NM_DEVICE_STATE_PREPARE) {
+ if ( new_status == WIMAX_API_DEVICE_STATUS_Ready
+ || new_status == WIMAX_API_DEVICE_STATUS_Connecting) {
+ nm_device_activate_schedule_stage2_device_config (NM_DEVICE (self));
+ return;
+ }
+ }
}
/* Handle disconnection */
@@ -1252,15 +1280,17 @@ device_state_changed (NMDevice *device,
if (new_state < NM_DEVICE_STATE_DISCONNECTED)
remove_all_nsps (self);
- /* Request initial NSP list */
+ /* Request initial NSP list when device is first started */
if ( new_state == NM_DEVICE_STATE_DISCONNECTED
&& old_state < NM_DEVICE_STATE_DISCONNECTED) {
if (priv->sdk)
iwmx_sdk_get_networks (priv->sdk);
}
- if (new_state == NM_DEVICE_STATE_FAILED || new_state <= NM_DEVICE_STATE_DISCONNECTED)
+ if (new_state == NM_DEVICE_STATE_FAILED || new_state <= NM_DEVICE_STATE_DISCONNECTED) {
+ set_current_nsp (self, NULL);
clear_activation_timeout (self);
+ }
if (new_state == NM_DEVICE_STATE_ACTIVATED) {
/* poll link quality and BSID */
diff --git a/test/nm-tool.c b/test/nm-tool.c
index a4b80df09..ffe70af9f 100644
--- a/test/nm-tool.c
+++ b/test/nm-tool.c
@@ -323,50 +323,31 @@ get_connection_for_active (NMActiveConnection *active)
return (NMConnection *) g_hash_table_lookup (connections, path);
}
-struct cb_info {
- NMClient *client;
- const GPtrArray *active;
-};
-
static void
detail_device (gpointer data, gpointer user_data)
{
NMDevice *device = NM_DEVICE (data);
- struct cb_info *info = user_data;
char *tmp;
NMDeviceState state;
guint32 caps;
guint32 speed;
const GArray *array;
- int j;
gboolean is_default = FALSE;
const char *id = NULL;
+ NMActiveConnection *active;
- state = nm_device_get_state (device);
-
- for (j = 0; info->active && (j < info->active->len); j++) {
- NMActiveConnection *candidate = g_ptr_array_index (info->active, j);
- const GPtrArray *devices = nm_active_connection_get_devices (candidate);
- NMDevice *candidate_dev;
+ active = nm_device_get_active_connection (device);
+ if (active) {
NMConnection *connection;
NMSettingConnection *s_con;
- if (!devices || !devices->len)
- continue;
- candidate_dev = g_ptr_array_index (devices, 0);
-
- if (candidate_dev == device) {
- if (nm_active_connection_get_default (candidate))
- is_default = TRUE;
+ is_default = nm_active_connection_get_default (active);
- connection = get_connection_for_active (candidate);
- if (!connection)
- break;
-
- s_con = (NMSettingConnection *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION);
+ connection = get_connection_for_active (active);
+ if (connection) {
+ s_con = nm_connection_get_setting_connection (connection);
if (s_con)
id = nm_setting_connection_get_id (s_con);
- break;
}
}
@@ -396,6 +377,7 @@ detail_device (gpointer data, gpointer user_data)
print_string ("Driver", nm_device_get_driver (device) ? nm_device_get_driver (device) : "(unknown)");
+ state = nm_device_get_state (device);
print_string ("State", get_dev_state_string (state));
if (is_default)
@@ -787,7 +769,7 @@ main (int argc, char *argv[])
{
NMClient *client;
const GPtrArray *devices;
- struct cb_info info;
+ const GPtrArray *active;
g_type_init ();
@@ -806,16 +788,13 @@ main (int argc, char *argv[])
if (!get_all_connections ())
exit (1);
- info.client = client;
- info.active = nm_client_get_active_connections (client);
-
-
devices = nm_client_get_devices (client);
if (devices)
- g_ptr_array_foreach ((GPtrArray *) devices, detail_device, &info);
+ g_ptr_array_foreach ((GPtrArray *) devices, detail_device, NULL);
- if (info.active)
- g_ptr_array_foreach ((GPtrArray *) info.active, detail_vpn, &info);
+ active = nm_client_get_active_connections (client);
+ if (active)
+ g_ptr_array_foreach ((GPtrArray *) active, detail_vpn, NULL);
g_object_unref (client);
g_hash_table_unref (connections);
diff --git a/tools/check-exports.sh b/tools/check-exports.sh
index 1415e1448..3c75ef024 100755
--- a/tools/check-exports.sh
+++ b/tools/check-exports.sh
@@ -8,7 +8,7 @@ so=$1
def=$2
# Have to prefix with a tab and suffix with a ';' to match .ver file format
-get_syms='( objdump -t "$so" | grep "^[^ ]* [^l.*]*[.]"; objdump -t "$so" | grep "[.]hidden.*"; ) | sed "s/.* //" | sed "s/^/\t/" | sed "s/$/;/"'
+get_syms='( objdump -t "$so" | grep "^[^ ]* [^l.*]*[.]"; objdump -t "$so" | grep "^[^ ]* l[^.*]*\.text[^_]*nm_" | grep -v "_init"; ) | sed "s/.* //" | sed "s/^/\t/" | sed "s/$/;/"'
echo $so: checking exported symbols against $def