From 263bf4c0c89bb88dc995acd9a6a2de9095fbd461 Mon Sep 17 00:00:00 2001 From: Michael Biebl Date: Tue, 23 Aug 2011 19:16:47 +0200 Subject: Imported Upstream version 0.9.0 --- TODO | 154 +- cli/src/Makefile.am | 2 - cli/src/Makefile.in | 3 - cli/src/connections.c | 24 +- configure | 54 +- configure.ac | 11 +- data/NetworkManager-wait-online.service.in | 3 +- docs/api/Makefile.am | 4 +- docs/api/Makefile.in | 4 +- docs/api/generate-settings-spec.c | 1 + docs/api/html/NetworkManager.devhelp | 28 +- docs/api/html/NetworkManager.devhelp2 | 28 +- docs/api/html/index.html | 32 +- docs/api/html/ix01.html | 2 +- docs/api/html/ref-migrating.html | 58 +- docs/api/html/ref-settings.html | 86 +- docs/api/html/spec.html | 4 +- docs/api/settings-spec.xml | 50 +- docs/api/spec.html | 4 +- docs/api/version.xml | 2 +- docs/libnm-glib/html/NMClient.html | 32 +- docs/libnm-glib/html/NMDevice.html | 11 +- docs/libnm-glib/html/NMDeviceWifi.html | 4 +- docs/libnm-glib/html/NMDeviceWimax.html | 4 +- docs/libnm-glib/html/NMRemoteConnection.html | 2 +- docs/libnm-glib/html/NMRemoteSettings.html | 2 +- docs/libnm-glib/html/api-index-full.html | 8 +- docs/libnm-glib/html/ch02.html | 5 +- docs/libnm-glib/html/index.html | 5 +- docs/libnm-glib/html/index.sgml | 7 + docs/libnm-glib/html/libnm-glib-NMVpnPluginUi.html | 16 +- .../html/libnm-glib-nm-vpn-plugin-utils.html | 137 ++ docs/libnm-glib/html/libnm-glib.devhelp | 4 + docs/libnm-glib/html/libnm-glib.devhelp2 | 4 + docs/libnm-glib/html/object-tree.html | 4 +- docs/libnm-glib/libnm-glib-docs.xml | 1 + docs/libnm-glib/libnm-glib-sections.txt | 1 + docs/libnm-util/html/NMConnection.html | 37 +- docs/libnm-util/html/NMSetting.html | 150 +- docs/libnm-util/html/NMSetting8021x.html | 457 +++- docs/libnm-util/html/NMSettingBluetooth.html | 102 +- docs/libnm-util/html/NMSettingCdma.html | 32 +- docs/libnm-util/html/NMSettingConnection.html | 2 +- docs/libnm-util/html/NMSettingGsm.html | 342 ++- docs/libnm-util/html/NMSettingIP4Config.html | 885 +++++++- docs/libnm-util/html/NMSettingIP6Config.html | 843 +++++++- docs/libnm-util/html/NMSettingOlpcMesh.html | 4 +- docs/libnm-util/html/NMSettingPPP.html | 60 +- docs/libnm-util/html/NMSettingPPPOE.html | 75 +- docs/libnm-util/html/NMSettingSerial.html | 140 +- docs/libnm-util/html/NMSettingVPN.html | 229 +- docs/libnm-util/html/NMSettingWimax.html | 288 +++ docs/libnm-util/html/NMSettingWired.html | 225 +- docs/libnm-util/html/NMSettingWireless.html | 401 +++- .../libnm-util/html/NMSettingWirelessSecurity.html | 549 ++++- docs/libnm-util/html/api-index-full.html | 549 ++++- docs/libnm-util/html/ch01.html | 30 +- docs/libnm-util/html/index.html | 28 +- docs/libnm-util/html/index.sgml | 151 +- docs/libnm-util/html/libnm-util-nm-utils.html | 75 +- docs/libnm-util/html/libnm-util.devhelp | 44 +- docs/libnm-util/html/libnm-util.devhelp2 | 142 +- docs/libnm-util/html/object-tree.html | 4 +- docs/libnm-util/libnm-util-docs.sgml | 1 + docs/libnm-util/libnm-util-sections.txt | 22 +- examples/C/qt/Makefile.am | 11 +- examples/C/qt/Makefile.in | 23 +- examples/C/qt/change-ipv4-addresses.cpp | 146 ++ examples/python/Makefile.am | 3 +- examples/python/Makefile.in | 3 +- include/NetworkManager.h | 83 +- include/nm-settings-flags.h | 8 +- include/nm-version.h | 4 +- initscript/RedHat/Makefile.am | 3 + initscript/RedHat/Makefile.in | 4 +- introspection/Makefile.am | 2 +- introspection/Makefile.in | 9 +- introspection/all.xml | 61 - introspection/all.xml.in | 61 + introspection/nm-agent-manager.xml | 2 +- introspection/nm-manager.xml | 9 +- introspection/nm-secret-agent.xml | 13 +- introspection/nm-settings.xml | 2 +- libnm-glib/Makefile.am | 2 +- libnm-glib/Makefile.in | 2 +- libnm-glib/libnm-glib-vpn.pc.in | 2 +- libnm-glib/libnm-glib.pc.in | 2 +- libnm-glib/libnm-glib.ver | 1 + libnm-glib/nm-client.c | 36 +- libnm-glib/nm-client.h | 1 + libnm-glib/nm-device-wifi.c | 10 +- libnm-glib/nm-device-wimax.c | 10 +- libnm-glib/nm-device.c | 43 +- libnm-glib/nm-object.c | 10 +- libnm-glib/nm-remote-settings.c | 9 +- libnm-glib/nm-vpn-plugin-ui-interface.c | 16 +- libnm-glib/nm-vpn-plugin-ui-interface.h | 14 +- libnm-util/libnm-util.ver | 14 + libnm-util/nm-connection.c | 75 +- libnm-util/nm-connection.h | 7 +- libnm-util/nm-param-spec-specialized.c | 6 +- libnm-util/nm-setting-8021x.c | 405 +++- libnm-util/nm-setting-8021x.h | 36 +- libnm-util/nm-setting-bluetooth.c | 47 +- libnm-util/nm-setting-bluetooth.h | 26 +- libnm-util/nm-setting-cdma.h | 12 +- libnm-util/nm-setting-connection.c | 16 + libnm-util/nm-setting-gsm.c | 109 +- libnm-util/nm-setting-gsm.h | 49 +- libnm-util/nm-setting-ip4-config.c | 431 ++++ libnm-util/nm-setting-ip4-config.h | 52 +- libnm-util/nm-setting-ip6-config.c | 407 +++- libnm-util/nm-setting-ip6-config.h | 63 +- libnm-util/nm-setting-ppp.c | 133 ++ libnm-util/nm-setting-ppp.h | 12 +- libnm-util/nm-setting-pppoe.c | 42 + libnm-util/nm-setting-pppoe.h | 12 +- libnm-util/nm-setting-serial.c | 55 + libnm-util/nm-setting-serial.h | 12 +- libnm-util/nm-setting-vpn.c | 191 +- libnm-util/nm-setting-vpn.h | 17 +- libnm-util/nm-setting-wimax.c | 41 + libnm-util/nm-setting-wimax.h | 10 +- libnm-util/nm-setting-wired.c | 137 +- libnm-util/nm-setting-wired.h | 14 +- libnm-util/nm-setting-wireless-security.c | 240 ++- libnm-util/nm-setting-wireless-security.h | 42 +- libnm-util/nm-setting-wireless.c | 214 +- libnm-util/nm-setting-wireless.h | 30 +- libnm-util/nm-setting.c | 121 +- libnm-util/nm-setting.h | 65 +- libnm-util/nm-utils.c | 8 +- libnm-util/nm-utils.h | 30 +- libnm-util/tests/test-general.c | 122 +- libnm-util/tests/test-secrets.c | 86 +- libnm-util/tests/test-setting-8021x.c | 3 - libnm-util/tests/test-settings-defaults.c | 5 +- m4/libnl-check.m4 | 11 +- man/NetworkManager.8 | 33 +- man/NetworkManager.8.in | 33 +- man/NetworkManager.conf.5 | 66 +- man/NetworkManager.conf.5.in | 66 +- po/es.po | 916 ++++---- po/id.po | 1594 +++++++++----- po/ko.po | 863 ++++---- po/ru.po | 1517 +++++++++----- po/uk.po | 2185 ++++++++++++++++++-- policy/org.freedesktop.NetworkManager.policy | 46 +- src/NetworkManager.conf | 13 + src/NetworkManagerUtils.c | 30 + src/NetworkManagerUtils.h | 1 + src/dns-manager/nm-dns-manager.c | 19 +- src/modem-manager/nm-modem.c | 20 +- src/nm-device-ethernet.c | 42 + src/nm-device-olpc-mesh.c | 75 +- src/nm-device-wifi.c | 317 +-- src/nm-device.c | 46 +- src/nm-manager-auth.c | 111 +- src/nm-manager-auth.h | 6 +- src/nm-manager.c | 133 +- src/nm-policy.c | 160 +- src/nm-udev-manager.c | 3 + src/settings/nm-agent-manager.c | 191 +- src/settings/nm-agent-manager.h | 7 + src/settings/nm-secret-agent.c | 102 +- src/settings/nm-secret-agent.h | 9 + src/settings/nm-settings-connection.c | 363 +++- src/settings/nm-settings-connection.h | 12 + src/settings/nm-settings.c | 28 + src/settings/nm-settings.h | 6 +- .../plugins/ifcfg-rh/nm-ifcfg-connection.c | 45 +- src/settings/plugins/ifcfg-rh/plugin.c | 24 +- src/settings/plugins/ifcfg-rh/reader.c | 167 +- .../ifcfg-test-wired-8021x-peap-mschapv2 | 2 +- .../plugins/ifcfg-rh/tests/test-ifcfg-rh.c | 129 +- src/settings/plugins/ifcfg-rh/writer.c | 41 +- src/settings/plugins/ifnet/plugin.c | 3 +- src/settings/plugins/keyfile/common.h | 3 - src/settings/plugins/keyfile/plugin.c | 3 +- src/settings/plugins/keyfile/reader.c | 67 +- .../plugins/keyfile/tests/keyfiles/Makefile.am | 5 +- .../plugins/keyfile/tests/keyfiles/Makefile.in | 5 +- .../keyfile/tests/keyfiles/Test_Intlist_SSID | 11 + .../keyfile/tests/keyfiles/Test_Wired_TLS_Blob | 22 + .../tests/keyfiles/Test_Wired_TLS_Path_Missing | 22 + src/settings/plugins/keyfile/tests/test-keyfile.c | 299 ++- src/settings/plugins/keyfile/utils.c | 7 + src/settings/plugins/keyfile/writer.c | 10 + src/supplicant-manager/nm-supplicant-config.c | 24 +- src/supplicant-manager/nm-supplicant-interface.c | 30 +- .../nm-supplicant-settings-verify.c | 4 + .../tests/test-supplicant-config.c | 4 +- src/tests/test-dhcp-options.c | 4 +- src/vpn-manager/nm-vpn-connection.c | 170 +- test/nm-tool.c | 10 - 195 files changed, 16932 insertions(+), 3873 deletions(-) create mode 100644 docs/libnm-glib/html/libnm-glib-nm-vpn-plugin-utils.html create mode 100644 docs/libnm-util/html/NMSettingWimax.html create mode 100644 examples/C/qt/change-ipv4-addresses.cpp delete mode 100644 introspection/all.xml create mode 100644 introspection/all.xml.in create mode 100644 src/settings/plugins/keyfile/tests/keyfiles/Test_Intlist_SSID create mode 100644 src/settings/plugins/keyfile/tests/keyfiles/Test_Wired_TLS_Blob create mode 100644 src/settings/plugins/keyfile/tests/keyfiles/Test_Wired_TLS_Path_Missing diff --git a/TODO b/TODO index 1904f04d..369be1e5 100644 --- a/TODO +++ b/TODO @@ -34,27 +34,11 @@ about ADSL configuration on Linux in general is here: http://atm.eagle-usb.org/wakka.php?wiki=UeagleAtmDoc -hicham started code for the configuration settings here: - -https://github.com/hicham-haouari/NetworkManager-ADSL-Support/commits/adsl - -After the libnm-util pieces, internally NM needs to be modified for ADSL -support, of course. That involves adding a new NM_DEVICE_TYPE_ADSL in -NetworkManager.h, and then creating a new NMDeviceAdsl subclass in src/. It's -probably easiest to copy the nm-device-ethernet.c file and strip out stuff -that's not required. Like the nm-device-ethernet.c file handles the 'carrier' -state though, the ADSL code should periodically poll the sysfs 'carrier' -attribute of the DSL modem to detect when the modem has a link with the remote -DSL concentrator, and only activate connections when the link is present. - -Detection of ADSL modems should be handled in nm-udev-manager.c checking for -the "atm" subsystem. - -Code to manage br2684ctl will likely be required to be written for the PPPoE -case before PPPoE is started on the bridge-created link "nasX". There are -quite a few examples of daemon management code in NetworkManager (dnsmasq, -avahi-autoipd, ppp, dhclient, etc) so there should be a lot of code to -copy and paste from. +Big thanks to Pantelis Koukousoulas for getting ADSL working for PPPoA and PPPoE +methods in the 'adsl' branch in NetworkManager git. We need more testing, IPv6 +PPP support, and also support for multiple ADSL devices (by reading the "atmindex" +attribute from the sysfs directory for the ATM interface on 2.6.38.8 and later +kernels). * Convert WEXT code to nl80211 @@ -132,6 +116,38 @@ against the last scan timestamp, and if the last scan was 10 seconds or more ago, a new scan should be requested. +* Reconnect to WiFi Networks Only If They Succeeded Once + +Currently, NetworkManager will attempt to connect to a previously attempted +WiFi network even if that network was never successfully connected to. This +causes confusion because sometimes users will randomly try various WiFi networks +hoping to find an open AP, and then wonder why NM tries to reconnect to any of +those APs later when none of them worked originally due to AP-side MAC filtering +or other failures. What should happen is that NetworkManager should set a flag +on a connection when that connection is successfully connected at least once, +and only autoconnect the wifi network if that flag is present *and* the +NMSettingConnection's 'autoconnect' property is TRUE. + +This is a bit tricky because we want to consider all connections that don't have +this flag as having succeeded so that we don't break users' existing connections, +while holding all newly created connections to this policy. This flag should +be determined and set for all connections, even if we only use it to determine +WiFi behavior for now. + +This flag should be a new gboolean property on the NMSettingConnection object +called "connect-success", with a default value of TRUE. It should default to +TRUE to ensure that existing connections are assumed to have connected +successfully in the past. New connections created via the AddConnection and +AddAndActivateConnection D-Bus method calls should have the 'connect-success' +property explicitly set to FALSE. Then, in nm-device.c's device_state_changed() +function where the NM_DEVICE_STATE_ACTIVATED state is handled, the +'connect-success' property should be set to TRUE. + +For WiFi then, in nm-device-wifi.c's get_best_auto_connection() method, the +'connect-success' property should be checked and if it is FALSE, the connection +is not considered for auto-activation. + + * Implement NM_DEVICE_STATE_DISCONNECTING To allow for "pre-down" scenarios, this state should be implemented before a @@ -146,6 +162,64 @@ amount of time for each script to complete before allowing the device to proceed to the NM_DEVICE_STATE_DISCONNECTED state, fully implementing pre-down. +* Ethernet Network Auto-detection + +There are various methods we can use to autodetect which wired network connection +to use if the user connects to more than one wired network on a frequent basis. +First, 802.1x enterprise switches broadcast frames which can be used to indicate +that the switch supports 802.1x and thus allow NetworkManager to select an +802.1x connection instead of blindly trying DHCP. Second, NetworkManager could +listen for traffic from a list of MAC addresses. Third, NetworkManager could +integrate 'arping' functionality to determine if a given IP address matches a +given MAC address, and thus automatically select that connection. All these +methods can co-exist and be used in parallel. + +One small caveat is that MAC addresses are trivial to spoof, so just because +NetworkManager has discovered a certain MAC address does not mean the network +is authenticated; only 802.1x security can assure that a network is the network +the user expects it to be. + +In any case, a new 'anchor-addresses' property of type string-array should be +added to the NMSettingWired setting. Each string element of this property +should be of the format "/" or simply "". The first format with +an IP address would indicate that "arping"-type behavior should be used to +actively detect the given MAC address; obviously if the given MAC address is +used for passive discovery as well. The second format simply lists a MAC +address to passively listen for. + +One drawback of listening or probing for known MAC addresses is an increase in +latency during connections to ethernet networks. The probing/listening delay +should be a reasonable amount of time, like 4 - 5 seconds or so, and should +only be used when a visible connection has anchor addresses. + +Next a gboolean 'anchor-probing' variable should be added to the +NMDeviceEthernetPrivate structure in src/nm-device-ethernet.c. This variable +should be set to TRUE whenever the device's carrier turns on *and* there are +visible NMConnections with anchor addresses (ie, connections which are system- +wide or where one of the allowed users of that connection is logged in). Then +probing and listening are started, which involves opening a low-level socket +on the interface and starting the arping run or listening for MAC addresses. +A timer is also started (don't forget to cache the timer's source ID in the +NMDeviceEthernetPrivate data, and to cancel the timer whenever the device +transitions to any state other than DISCONNECTED). + +If a known MAC address is discovered as a result of probing or listening, the +probe/listen socket, timeout, and data are cleaned up, and NetworkManager +would begin activation of the NMConnection that specified the found MAC address +in the 'anchor-addresses' property. If two or more connections specify the +same MAC address, the connection with the most recent timestamp should be +preferred. + +Similarly, if the probing/listening process detects 802.1x frames the device +should be marked as requring 802.1x authentication until the carrier drops. +This would be accomplished by adding a new property to the NMDeviceEthernet +object and exporting that property through the +introspection/nm-device-ethernet.xml file. This would allow clients like +applets to ensure that users are aware that the device will not allow +un-authenticated connections and that additional credentials are required to +successfully connect to this network. + + * VPN re-connect NM should remember whether a VPN was connected if a connection disconnects @@ -230,6 +304,44 @@ 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). +* VPN Service Daemon Secret Requests + +In addition to NM asking the service daemons whether more secrets are required, +VPN service daemons (like nm-vpnc-service, nm-openvpn-service, etc) should be +able to ask NetworkManager to provide secrets during the connection attempt. To +do this, the plugin should advertise its ability to handle out-of-band secrets +in its .service file via the key 'async-secrets=true'. NetworkManager would +check that key and if present activate the VPN as normal, but skip the explicit +NeedSecrets calls. + +Instead, a new "SecretsRequired" signal would be added to +introspection/nm-vpn-plugin.xml (and corresponding helper code added to +libnm-glib/nm-vpn-plugin.c) that would be emitted when the plugin determined +that secrets were required. This signal would have D-Bus signature of "sas" +for the arguments [ , ] with the obviously being +the connection UUID, and being an array of strings of plugin-specific +strings the plugin requires secrets for. This array of strings would then be +passed as the "hints" parameter in nm-vpn-connection.c when secrets are +requested from agents in a subsequent nm_settings_connection_get_secrets() call. +At this time the agent code only allows one hint per request, so we may need to +extend that to allow more than one hint. + +Thus when connecting if the plugin supported async secrets NetworkManager would +still request existing secrets (without interactivity) and send them to the +VPN service daemon in the Connect D-Bus method, then wait for the service daemon +to either request secrets asynchronously via the SecretsRequired signal or to +signal successful connection via the Ip4Config signal. + +The vpnc plugin would need to be reworked to open a pipe to vpnc's stdout and +stdin file descriptors to capture any authentication messages, and to match +these messages to known secrets request strings. When receiving one of these +strings the plugin would determine which secret was being requested and then +emit the SecretsRequired signal to NetworkManager. This would also imply that +nm-vpnc-service exectutes vpnc with the "--xauth-inter" argument to enable +challenge-response and does not use the "--non-inter" flag which suppresses that +behavior. + + * WPS wpa_supplicant has support for WPS (Wifi Protected Setup, basically Bluetooth- diff --git a/cli/src/Makefile.am b/cli/src/Makefile.am index 572e122f..f49d0127 100644 --- a/cli/src/Makefile.am +++ b/cli/src/Makefile.am @@ -4,7 +4,6 @@ bin_PROGRAMS = \ INCLUDES = \ -I${top_srcdir} \ -I${top_srcdir}/include \ - -I${top_builddir}/marshallers \ -I${top_srcdir}/libnm-util \ -I${top_srcdir}/libnm-glib @@ -31,7 +30,6 @@ nmcli_CPPFLAGS = \ nmcli_LDADD = \ $(DBUS_LIBS) \ $(GLIB_LIBS) \ - $(top_builddir)/marshallers/libmarshallers.la \ $(top_builddir)/libnm-util/libnm-util.la \ $(top_builddir)/libnm-glib/libnm-glib.la diff --git a/cli/src/Makefile.in b/cli/src/Makefile.in index e4708ad1..33aa3f2b 100644 --- a/cli/src/Makefile.in +++ b/cli/src/Makefile.in @@ -63,7 +63,6 @@ am_nmcli_OBJECTS = nmcli-connections.$(OBJEXT) nmcli-devices.$(OBJEXT) \ nmcli_OBJECTS = $(am_nmcli_OBJECTS) am__DEPENDENCIES_1 = nmcli_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ - $(top_builddir)/marshallers/libmarshallers.la \ $(top_builddir)/libnm-util/libnm-util.la \ $(top_builddir)/libnm-glib/libnm-glib.la AM_V_lt = $(am__v_lt_$(V)) @@ -309,7 +308,6 @@ top_srcdir = @top_srcdir@ INCLUDES = \ -I${top_srcdir} \ -I${top_srcdir}/include \ - -I${top_builddir}/marshallers \ -I${top_srcdir}/libnm-util \ -I${top_srcdir}/libnm-glib @@ -336,7 +334,6 @@ nmcli_CPPFLAGS = \ nmcli_LDADD = \ $(DBUS_LIBS) \ $(GLIB_LIBS) \ - $(top_builddir)/marshallers/libmarshallers.la \ $(top_builddir)/libnm-util/libnm-util.la \ $(top_builddir)/libnm-glib/libnm-glib.la diff --git a/cli/src/connections.c b/cli/src/connections.c index 2646aa9e..5febc58a 100644 --- a/cli/src/connections.c +++ b/cli/src/connections.c @@ -400,6 +400,7 @@ show_connection (NMConnection *data, gpointer user_data) NmCli *nmc = (NmCli *) user_data; NMSettingConnection *s_con; guint64 timestamp; + time_t timestamp_real; char *timestamp_str; char timestamp_real_str[64]; @@ -408,7 +409,8 @@ show_connection (NMConnection *data, gpointer user_data) /* Obtain field values */ timestamp = nm_setting_connection_get_timestamp (s_con); timestamp_str = g_strdup_printf ("%" G_GUINT64_FORMAT, timestamp); - strftime (timestamp_real_str, sizeof (timestamp_real_str), "%c", localtime ((time_t *) ×tamp)); + timestamp_real = timestamp; + strftime (timestamp_real_str, sizeof (timestamp_real_str), "%c", localtime (×tamp_real)); nmc->allowed_fields[0].value = nm_setting_connection_get_id (s_con); nmc->allowed_fields[1].value = nm_setting_connection_get_uuid (s_con); @@ -1075,22 +1077,10 @@ find_device_for_connection (NmCli *nmc, /* VPN connections */ NMActiveConnection *active = NULL; if (iface) { - const GPtrArray *connections = nm_client_get_active_connections (nmc->client); - for (i = 0; connections && (i < connections->len) && !active; i++) { - NMActiveConnection *candidate = g_ptr_array_index (connections, i); - const GPtrArray *devices = nm_active_connection_get_devices (candidate); - if (!devices || !devices->len) - continue; - - for (j = 0; devices && (j < devices->len); j++) { - NMDevice *dev = g_ptr_array_index (devices, j); - if (!strcmp (iface, nm_device_get_iface (dev))) { - active = candidate; - *device = dev; - break; - } - } - } + *device = nm_client_get_device_by_iface (nmc->client, iface); + if (*device) + active = nm_device_get_active_connection (*device); + if (!active) { g_set_error (error, 0, 0, _("no active connection on device '%s'"), iface); return FALSE; diff --git a/configure b/configure index 2f3e2441..637c085b 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.9997. +# Generated by GNU Autoconf 2.68 for NetworkManager 0.9.0. # # Report bugs to . # @@ -571,8 +571,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='NetworkManager' PACKAGE_TARNAME='NetworkManager' -PACKAGE_VERSION='0.8.9997' -PACKAGE_STRING='NetworkManager 0.8.9997' +PACKAGE_VERSION='0.9.0' +PACKAGE_STRING='NetworkManager 0.9.0' PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=NetworkManager' PACKAGE_URL='' @@ -1523,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.9997 to adapt to many kinds of systems. +\`configure' configures NetworkManager 0.9.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1593,7 +1593,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of NetworkManager 0.8.9997:";; + short | recursive ) echo "Configuration of NetworkManager 0.9.0:";; esac cat <<\_ACEOF @@ -1787,7 +1787,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -NetworkManager configure 0.8.9997 +NetworkManager configure 0.9.0 generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. @@ -2331,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.9997, which was +It was created by NetworkManager $as_me 0.9.0, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ @@ -3152,7 +3152,7 @@ fi # Define the identity of the package. PACKAGE='NetworkManager' - VERSION='0.8.9997' + VERSION='0.9.0' cat >>confdefs.h <<_ACEOF @@ -16278,9 +16278,9 @@ fi NM_MAJOR_VERSION=0 -NM_MINOR_VERSION=8 -NM_MICRO_VERSION=9997 -NM_VERSION=0.8.9997 +NM_MINOR_VERSION=9 +NM_MICRO_VERSION=0 +NM_VERSION=0.9.0 @@ -19762,7 +19762,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_have_iwevgenie" >&5 $as_echo "$ac_have_iwevgenie" >&6; } if test "$ac_have_iwevgenie" = no; then - as_fn_error $? "wireless-tools library and development headers >= 28pre9 not installed or not functional" "$LINENO" 5 + as_fn_error $? "wireless-tools or libiw development headers >= 28pre9 not installed or not functional" "$LINENO" 5 fi LIBM= @@ -20683,12 +20683,12 @@ if test -n "$QT_CFLAGS"; then pkg_cv_QT_CFLAGS="$QT_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt >= 4 QtCore QtDBus\""; } >&5 - ($PKG_CONFIG --exists --print-errors "Qt >= 4 QtCore QtDBus") 2>&5 + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt >= 4 QtCore QtDBus QtNetwork\""; } >&5 + ($PKG_CONFIG --exists --print-errors "Qt >= 4 QtCore QtDBus QtNetwork") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - pkg_cv_QT_CFLAGS=`$PKG_CONFIG --cflags "Qt >= 4 QtCore QtDBus" 2>/dev/null` + pkg_cv_QT_CFLAGS=`$PKG_CONFIG --cflags "Qt >= 4 QtCore QtDBus QtNetwork" 2>/dev/null` else pkg_failed=yes fi @@ -20699,12 +20699,12 @@ if test -n "$QT_LIBS"; then pkg_cv_QT_LIBS="$QT_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt >= 4 QtCore QtDBus\""; } >&5 - ($PKG_CONFIG --exists --print-errors "Qt >= 4 QtCore QtDBus") 2>&5 + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt >= 4 QtCore QtDBus QtNetwork\""; } >&5 + ($PKG_CONFIG --exists --print-errors "Qt >= 4 QtCore QtDBus QtNetwork") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - pkg_cv_QT_LIBS=`$PKG_CONFIG --libs "Qt >= 4 QtCore QtDBus" 2>/dev/null` + pkg_cv_QT_LIBS=`$PKG_CONFIG --libs "Qt >= 4 QtCore QtDBus QtNetwork" 2>/dev/null` else pkg_failed=yes fi @@ -20724,9 +20724,9 @@ else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then - QT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "Qt >= 4 QtCore QtDBus" 2>&1` + QT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "Qt >= 4 QtCore QtDBus QtNetwork" 2>&1` else - QT_PKG_ERRORS=`$PKG_CONFIG --print-errors "Qt >= 4 QtCore QtDBus" 2>&1` + QT_PKG_ERRORS=`$PKG_CONFIG --print-errors "Qt >= 4 QtCore QtDBus QtNetwork" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$QT_PKG_ERRORS" >&5 @@ -20939,8 +20939,9 @@ else #include int -main (int argc, char **argv) +main () { + struct nl_handle *nlh; struct nl_cache *cache; struct nl_object *obj; @@ -20966,8 +20967,10 @@ main (int argc, char **argv) return 1; else return 2; -} + ; + return 0; +} _ACEOF if ac_fn_c_try_run "$LINENO"; then : libnl_bug=$? @@ -22261,7 +22264,7 @@ case $with_tests in esac -ac_config_files="$ac_config_files Makefile include/Makefile include/nm-version.h src/Makefile src/tests/Makefile marshallers/Makefile src/logging/Makefile src/dns-manager/Makefile src/vpn-manager/Makefile src/dhcp-manager/Makefile src/dhcp-manager/tests/Makefile src/ip6-manager/Makefile src/supplicant-manager/Makefile src/supplicant-manager/tests/Makefile src/ppp-manager/Makefile src/dnsmasq-manager/Makefile src/modem-manager/Makefile src/bluez-manager/Makefile src/settings/Makefile src/settings/plugins/Makefile src/settings/plugins/ifupdown/Makefile src/settings/plugins/ifupdown/tests/Makefile src/settings/plugins/ifnet/Makefile src/settings/plugins/ifnet/tests/Makefile src/settings/plugins/ifcfg-rh/Makefile src/settings/plugins/ifcfg-rh/tests/Makefile src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile src/settings/plugins/ifcfg-suse/Makefile src/settings/plugins/keyfile/Makefile src/settings/plugins/keyfile/tests/Makefile src/settings/plugins/keyfile/tests/keyfiles/Makefile src/settings/tests/Makefile src/wimax/Makefile src/backends/Makefile libnm-util/libnm-util.pc libnm-util/Makefile libnm-util/tests/Makefile libnm-util/tests/certs/Makefile libnm-glib/libnm-glib.pc libnm-glib/libnm-glib-vpn.pc libnm-glib/Makefile libnm-glib/tests/Makefile callouts/Makefile callouts/tests/Makefile tools/Makefile cli/Makefile cli/src/Makefile test/Makefile initscript/Makefile initscript/RedHat/Makefile initscript/RedHat/NetworkManager initscript/Gentoo/Makefile initscript/Gentoo/NetworkManager initscript/Debian/Makefile initscript/Debian/NetworkManager initscript/Slackware/Makefile initscript/Slackware/rc.networkmanager initscript/SUSE/Makefile initscript/SUSE/networkmanager initscript/Arch/Makefile initscript/Arch/networkmanager initscript/paldo/Makefile initscript/paldo/NetworkManager initscript/Mandriva/Makefile initscript/Mandriva/networkmanager initscript/linexa/Makefile initscript/linexa/networkmanager introspection/Makefile man/Makefile man/NetworkManager.8 man/NetworkManager.conf.5 man/nm-system-settings.conf.5 man/nm-tool.1 man/nm-online.1 man/nmcli.1 po/Makefile.in policy/Makefile data/Makefile docs/Makefile docs/api/Makefile docs/api/version.xml docs/libnm-glib/Makefile docs/libnm-util/Makefile NetworkManager.pc examples/Makefile examples/python/Makefile examples/C/Makefile examples/C/glib/Makefile examples/C/qt/Makefile" +ac_config_files="$ac_config_files Makefile include/Makefile include/nm-version.h src/Makefile src/tests/Makefile marshallers/Makefile src/logging/Makefile src/dns-manager/Makefile src/vpn-manager/Makefile src/dhcp-manager/Makefile src/dhcp-manager/tests/Makefile src/ip6-manager/Makefile src/supplicant-manager/Makefile src/supplicant-manager/tests/Makefile src/ppp-manager/Makefile src/dnsmasq-manager/Makefile src/modem-manager/Makefile src/bluez-manager/Makefile src/settings/Makefile src/settings/plugins/Makefile src/settings/plugins/ifupdown/Makefile src/settings/plugins/ifupdown/tests/Makefile src/settings/plugins/ifnet/Makefile src/settings/plugins/ifnet/tests/Makefile src/settings/plugins/ifcfg-rh/Makefile src/settings/plugins/ifcfg-rh/tests/Makefile src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile src/settings/plugins/ifcfg-suse/Makefile src/settings/plugins/keyfile/Makefile src/settings/plugins/keyfile/tests/Makefile src/settings/plugins/keyfile/tests/keyfiles/Makefile src/settings/tests/Makefile src/wimax/Makefile src/backends/Makefile libnm-util/libnm-util.pc libnm-util/Makefile libnm-util/tests/Makefile libnm-util/tests/certs/Makefile libnm-glib/libnm-glib.pc libnm-glib/libnm-glib-vpn.pc libnm-glib/Makefile libnm-glib/tests/Makefile callouts/Makefile callouts/tests/Makefile tools/Makefile cli/Makefile cli/src/Makefile test/Makefile initscript/Makefile initscript/RedHat/Makefile initscript/RedHat/NetworkManager initscript/Gentoo/Makefile initscript/Gentoo/NetworkManager initscript/Debian/Makefile initscript/Debian/NetworkManager initscript/Slackware/Makefile initscript/Slackware/rc.networkmanager initscript/SUSE/Makefile initscript/SUSE/networkmanager initscript/Arch/Makefile initscript/Arch/networkmanager initscript/paldo/Makefile initscript/paldo/NetworkManager initscript/Mandriva/Makefile initscript/Mandriva/networkmanager initscript/linexa/Makefile initscript/linexa/networkmanager introspection/Makefile introspection/all.xml man/Makefile man/NetworkManager.8 man/NetworkManager.conf.5 man/nm-system-settings.conf.5 man/nm-tool.1 man/nm-online.1 man/nmcli.1 po/Makefile.in policy/Makefile data/Makefile docs/Makefile docs/api/Makefile docs/api/version.xml docs/libnm-glib/Makefile docs/libnm-util/Makefile NetworkManager.pc examples/Makefile examples/python/Makefile examples/C/Makefile examples/C/glib/Makefile examples/C/qt/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -22926,7 +22929,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.9997, which was +This file was extended by NetworkManager $as_me 0.9.0, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -22992,7 +22995,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.9997 +NetworkManager config.status 0.9.0 configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" @@ -23577,6 +23580,7 @@ do "initscript/linexa/Makefile") CONFIG_FILES="$CONFIG_FILES initscript/linexa/Makefile" ;; "initscript/linexa/networkmanager") CONFIG_FILES="$CONFIG_FILES initscript/linexa/networkmanager" ;; "introspection/Makefile") CONFIG_FILES="$CONFIG_FILES introspection/Makefile" ;; + "introspection/all.xml") CONFIG_FILES="$CONFIG_FILES introspection/all.xml" ;; "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; "man/NetworkManager.8") CONFIG_FILES="$CONFIG_FILES man/NetworkManager.8" ;; "man/NetworkManager.conf.5") CONFIG_FILES="$CONFIG_FILES man/NetworkManager.conf.5" ;; diff --git a/configure.ac b/configure.ac index 74765de3..c557c6be 100644 --- a/configure.ac +++ b/configure.ac @@ -2,8 +2,8 @@ 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], [9997]) +m4_define([nm_minor_version], [9]) +m4_define([nm_micro_version], [0]) m4_define([nm_version], [nm_major_version.nm_minor_version.nm_micro_version]) @@ -15,7 +15,7 @@ AC_CONFIG_HEADERS([config.h]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_AUX_DIR([build-aux]) -AM_INIT_AUTOMAKE([1.10 subdir-objects tar-ustar no-dist-gzip dist-bzip2]) +AM_INIT_AUTOMAKE([1.10 subdir-objects tar-ustar no-dist-gzip dist-bzip2 -Wno-portability]) AM_MAINTAINER_MODE([enable]) m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([no])]) @@ -225,7 +225,7 @@ AC_COMPILE_IFELSE( [ac_have_iwevgenie=no]) AC_MSG_RESULT($ac_have_iwevgenie) if test "$ac_have_iwevgenie" = no; then - AC_MSG_ERROR(wireless-tools library and development headers >= 28pre9 not installed or not functional) + AC_MSG_ERROR(wireless-tools or libiw development headers >= 28pre9 not installed or not functional) fi dnl @@ -268,7 +268,7 @@ AC_SUBST(GIO_LIBS) GOBJECT_INTROSPECTION_CHECK([0.9.6]) # Qt4 -PKG_CHECK_MODULES(QT, [Qt >= 4 QtCore QtDBus], [have_qt=yes],[have_qt=no]) +PKG_CHECK_MODULES(QT, [Qt >= 4 QtCore QtDBus QtNetwork], [have_qt=yes],[have_qt=no]) AC_ARG_ENABLE(qt, AS_HELP_STRING([--enable-qt], [enable Qt examples]), [enable_qt=${enableval}], [enable_qt=${have_qt}]) if (test "${enable_qt}" = "yes"); then @@ -664,6 +664,7 @@ initscript/Mandriva/networkmanager initscript/linexa/Makefile initscript/linexa/networkmanager introspection/Makefile +introspection/all.xml man/Makefile man/NetworkManager.8 man/NetworkManager.conf.5 diff --git a/data/NetworkManager-wait-online.service.in b/data/NetworkManager-wait-online.service.in index 0772568f..fd9be418 100644 --- a/data/NetworkManager-wait-online.service.in +++ b/data/NetworkManager-wait-online.service.in @@ -1,12 +1,13 @@ [Unit] Description=Network Manager Wait Online +Requisite=NetworkManager.service After=NetworkManager.service Wants=network.target Before=network.target [Service] Type=oneshot -ExecStart=@bindir@/nm-online -q -x --timeout=30 +ExecStart=@bindir@/nm-online -q --timeout=30 [Install] WantedBy=network.target diff --git a/docs/api/Makefile.am b/docs/api/Makefile.am index 687d9cfb..276b4aef 100644 --- a/docs/api/Makefile.am +++ b/docs/api/Makefile.am @@ -27,7 +27,7 @@ XSLTPROC = xsltproc --xinclude --nonet XMLS = $(wildcard $(top_srcdir)/introspection/nm-*.xml) OTHER_FILES= \ - $(top_srcdir)/introspection/all.xml \ + $(top_builddir)/introspection/all.xml \ $(top_srcdir)/introspection/generic-types.xml \ $(top_srcdir)/introspection/errors.xml \ $(top_srcdir)/introspection/vpn-errors.xml \ @@ -37,7 +37,7 @@ OTHER_FILES= \ GENERATED_FILES = spec.html settings-spec.xml spec.html: $(XMLS) $(OTHER_FILES) html-build.stamp - $(XSLTPROC) $(top_srcdir)/tools/doc-generator.xsl $(top_srcdir)/introspection/all.xml > $@ + $(XSLTPROC) $(top_srcdir)/tools/doc-generator.xsl $(top_builddir)/introspection/all.xml > $@ mkdir -p $(builddir)/html/ cp $@ $(builddir)/html/ diff --git a/docs/api/Makefile.in b/docs/api/Makefile.in index ec3fb8a2..47874caf 100644 --- a/docs/api/Makefile.in +++ b/docs/api/Makefile.in @@ -333,7 +333,7 @@ AUTOMAKE_OPTIONS = 1.7 @WITH_DOCS_TRUE@XSLTPROC = xsltproc --xinclude --nonet @WITH_DOCS_TRUE@XMLS = $(wildcard $(top_srcdir)/introspection/nm-*.xml) @WITH_DOCS_TRUE@OTHER_FILES = \ -@WITH_DOCS_TRUE@ $(top_srcdir)/introspection/all.xml \ +@WITH_DOCS_TRUE@ $(top_builddir)/introspection/all.xml \ @WITH_DOCS_TRUE@ $(top_srcdir)/introspection/generic-types.xml \ @WITH_DOCS_TRUE@ $(top_srcdir)/introspection/errors.xml \ @WITH_DOCS_TRUE@ $(top_srcdir)/introspection/vpn-errors.xml \ @@ -732,7 +732,7 @@ uninstall-am: uninstall-local @WITH_DOCS_TRUE@spec.html: $(XMLS) $(OTHER_FILES) html-build.stamp -@WITH_DOCS_TRUE@ $(XSLTPROC) $(top_srcdir)/tools/doc-generator.xsl $(top_srcdir)/introspection/all.xml > $@ +@WITH_DOCS_TRUE@ $(XSLTPROC) $(top_srcdir)/tools/doc-generator.xsl $(top_builddir)/introspection/all.xml > $@ @WITH_DOCS_TRUE@ mkdir -p $(builddir)/html/ @WITH_DOCS_TRUE@ cp $@ $(builddir)/html/ diff --git a/docs/api/generate-settings-spec.c b/docs/api/generate-settings-spec.c index 9c15314f..c37615b8 100644 --- a/docs/api/generate-settings-spec.c +++ b/docs/api/generate-settings-spec.c @@ -87,6 +87,7 @@ static TypeNameElement name_map[] = { { "GArray_guint_", "array of uint32" }, { "GPtrArray_GArray_guint__", "array of array of uint32" }, { "GPtrArray_GArray_guchar__", "array of byte array" }, + { "GPtrArray_gchararray_", "array of string" }, { "GHashTable_gchararray+gchararray_", "dict of (string::string)" }, { "GPtrArray_GValueArray_GArray_guchar_+guint+GArray_guchar___", "array of (byte array, uint32, byte array)" }, { "GPtrArray_GValueArray_GArray_guchar_+guint+GArray_guchar_+guint__", "array of (byte array, uint32, byte array, uint32)" }, diff --git a/docs/api/html/NetworkManager.devhelp b/docs/api/html/NetworkManager.devhelp index bf173496..225718a4 100644 --- a/docs/api/html/NetworkManager.devhelp +++ b/docs/api/html/NetworkManager.devhelp @@ -4,23 +4,23 @@ - + - - - - - - - - - - - - - + + + + + + + + + + + + + diff --git a/docs/api/html/NetworkManager.devhelp2 b/docs/api/html/NetworkManager.devhelp2 index 20f2b147..e5538797 100644 --- a/docs/api/html/NetworkManager.devhelp2 +++ b/docs/api/html/NetworkManager.devhelp2 @@ -4,23 +4,23 @@ - + - - - - - - - - - - - - - + + + + + + + + + + + + + diff --git a/docs/api/html/index.html b/docs/api/html/index.html index 091a4290..c734b922 100644 --- a/docs/api/html/index.html +++ b/docs/api/html/index.html @@ -22,11 +22,11 @@     
  

-

Version 0.8.9997 +

Version 0.9.0

This section details the architectural and D-Bus API changes in NetworkManager 0.9.

-Elimination of the User Settings Service

+Elimination of the User Settings Service

Previously there were two "settings services", or D-Bus services that provided and saved network configuration information. NetworkManager @@ -103,7 +103,7 @@

-User Secret Agents

+User Secret Agents

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 @@

-Settings Service Interface Changes

+Settings Service Interface Changes

With the elimination of the user settings service, the old org.freedesktop.NetworkManagerUserSettings and @@ -188,7 +188,7 @@

-Connection Object Interface Changes

+Connection Object Interface Changes

Consistent with the interface changes to the Settings object, the Connection object's D-Bus interface has changed to @@ -222,7 +222,7 @@

-Permissions Methods Consolidation

+Permissions Methods Consolidation

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:

-

Table 17. 

+

Table 17. 

@@ -305,7 +305,7 @@

-AddConnection Returns Object Path of New Connection

+AddConnection Returns Object Path of New Connection

The org.freedesktop.NetworkManager.Settings.AddConnection @@ -323,7 +323,7 @@

-Support for WiMAX Devices

+Support for WiMAX Devices

NetworkManager now supports Intel WiMAX mobile broadband devices. A corresponding device type (NM_DEVICE_TYPE_WIMAX) and @@ -346,7 +346,7 @@

-New Device States

+New Device States

A few new device states have been added, and all device states have been renumbered for flexibility. @@ -361,7 +361,7 @@

-New Active Connection State

+New Active Connection State

Along with the new device states, an additional @@ -377,7 +377,7 @@

-Consolidated Modem Devices

+Consolidated Modem Devices

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 @@

-Secret Property Flags

+Secret Property Flags

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:

-

Table 18. 

+

Table 18. 

@@ -484,7 +484,7 @@

-Deprecated Methods Removed

+Deprecated Methods Removed

A few methods and signals of the org.freedesktop.NetworkManager interface deprecated in version 0.7 have been removed. All the @@ -494,7 +494,7 @@ their replacements:

-

Table 19. 

+

Table 19. 

diff --git a/docs/api/html/ref-settings.html b/docs/api/html/ref-settings.html index 6f947c7d..5db0ccd8 100644 --- a/docs/api/html/ref-settings.html +++ b/docs/api/html/ref-settings.html @@ -23,7 +23,7 @@

Network Configuration Setting Specification

@@ -35,11 +35,11 @@

-Configuration Settings

+Configuration Settings

-

Table 1. 802-1x setting

+

Table 1. 802-1x setting

@@ -91,6 +91,18 @@ + + + + + + + + + + + + @@ -139,10 +151,22 @@ + + + + + + + + + + + + - + @@ -178,7 +202,7 @@ - + @@ -204,7 +228,7 @@


-

Table 2. bluetooth setting

+

Table 2. bluetooth setting

UTF-8 encoded path to a directory containing PEM or DER formatted certificates to be added to the verification chain in addition to the certificate specified in the 'ca-cert' property.
subject-match
string
Substring to be matched against the subject of the certificate presented by the authentication server. When unset, no verification of the authentication server certificate's subject is performed.
altsubject-matches
array of string
[]
List of strings to be matched against the altSubjectName of the certificate presented by the authentication server. If the list is empty, no verification of the server certificate's altSubjectName is performed.
client-cert
byte array
[]
UTF-8 encoded path to a directory containing PEM or DER formatted certificates to be added to the verification chain in addition to the certificate specified in the 'phase2-ca-cert' property.
phase2-subject-match
string
Substring to be matched against the subject of the certificate presented by the authentication server during the inner 'phase2' authentication. When unset, no verification of the authentication server certificate's subject is performed.
phase2-altsubject-matches
array of string
[]
List of strings to be matched against List of strings to be matched against the altSubjectName of the certificate presented by the authentication server during the inner 'phase 2' authentication. If the list is empty, no verification of the server certificate's altSubjectName is performed.
phase2-client-cert
byte array
[]
Contains the 'phase 2' client certificate if used by the EAP method specified in the 'phase2-eap' or 'phase2-autheap' properties. Certificate data is specified using a 'scheme'; two are currently supported: blob and path. When using the blob scheme (which is backwards compatible with NM 0.7.x) this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string 'file://' and ending with a terminating NULL byte.Contains the 'phase 2' client certificate if used by the EAP method specified in the 'phase2-auth' or 'phase2-autheap' properties. Certificate data is specified using a 'scheme'; two are currently supported: blob and path. When using the blob scheme (which is backwards compatible with NM 0.7.x) this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string 'file://' and ending with a terminating NULL byte.
password
phase2-private-key
byte array
[]
Contains the 'phase 2' inner private key when the 'phase2-eap' or 'phase2-autheap' property is set to 'tls'. Key data is specified using a 'scheme'; two are currently supported: blob and path. When using the blob scheme and private keys, this property should be set to the key's encrypted PEM encoded data. When using private keys with the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string 'file://' and ending with a terminating NULL byte. When using PKCS#12 format private keys and the blob scheme, this property should be set to the PKCS#12 data and the 'phase2-private-key-password' property must be set to password used to decrypt the PKCS#12 certificate and key. When using PKCS#12 files and the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string 'file://' and and ending with a terminating NULL byte, and as with the blob scheme the 'phase2-private-key-password' property must be set to the password used to decode the PKCS#12 private key and certificate.Contains the 'phase 2' inner private key when the 'phase2-auth' or 'phase2-autheap' property is set to 'tls'. Key data is specified using a 'scheme'; two are currently supported: blob and path. When using the blob scheme and private keys, this property should be set to the key's encrypted PEM encoded data. When using private keys with the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string 'file://' and ending with a terminating NULL byte. When using PKCS#12 format private keys and the blob scheme, this property should be set to the PKCS#12 data and the 'phase2-private-key-password' property must be set to password used to decrypt the PKCS#12 certificate and key. When using PKCS#12 files and the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string 'file://' and and ending with a terminating NULL byte, and as with the blob scheme the 'phase2-private-key-password' property must be set to the password used to decode the PKCS#12 private key and certificate.
phase2-private-key-password
@@ -243,7 +267,7 @@


-

Table 3. cdma setting

+

Table 3. cdma setting

@@ -294,7 +318,7 @@


-

Table 4. connection setting

+

Table 4. connection setting

@@ -363,7 +387,7 @@


-

Table 5. gsm setting

+

Table 5. gsm setting

@@ -388,7 +412,7 @@ - + @@ -456,7 +480,7 @@


-

Table 6. ipv4 setting

+

Table 6. ipv4 setting

number
string
Number to dial when establishing a PPP data session with the GSM-based mobile broadband network. In most cases, leave the number blank and a number selecting the APN specified in the 'apn' property will be used automatically when required.Number to dial when establishing a PPP data session with the GSM-based mobile broadband network. Many modems do not require PPP for connections to the mobile network and thus this property should be left blank, which allows NetworkManager to select the appropriate settings automatically.
username
@@ -555,7 +579,7 @@


-

Table 7. ipv6 setting

+

Table 7. ipv6 setting

@@ -627,7 +651,7 @@ - + @@ -636,7 +660,7 @@


-

Table 8. 802-11-olpc-mesh setting

+

Table 8. 802-11-olpc-mesh setting

may-fail
boolean
FALSE
TRUE
If TRUE, allow overall network configuration to proceed even if IPv6 configuration times out. Note that at least one IP configuration must succeed or overall network configuration will still fail. For example, in IPv4-only networks, setting this property to TRUE allows the overall network configuration to succeed if IPv6 configuration fails but IPv4 configuration completes successfully.
@@ -681,7 +705,7 @@


-

Table 9. ppp setting

+

Table 9. ppp setting

@@ -816,7 +840,7 @@


-

Table 10. pppoe setting

+

Table 10. pppoe setting

@@ -867,7 +891,7 @@


-

Table 11. serial setting

+

Table 11. serial setting

@@ -924,7 +948,7 @@


-

Table 12. vpn setting

+

Table 12. vpn setting

@@ -955,7 +979,7 @@ - + @@ -975,7 +999,7 @@


-

Table 13. wimax setting

+

Table 13. wimax setting

user-name
string
User name of the currently logged in user for connections provided by the user settings service. This name is provided to the VPN plugin to use in lieu of a custom username provided by that VPN plugins specific configuration. The VPN plugin itself decides which user name to use.If the VPN connection requires a user name for authentication, that name should be provided here. If the connection is available to more than one user, and the VPN requires each user to supply a different name, then leave this property empty. If this property is empty, NetworkManager will automatically supply the username of the user which requested the VPN connection.
data
@@ -1014,7 +1038,7 @@


-

Table 14. 802-3-ethernet setting

+

Table 14. 802-3-ethernet setting

@@ -1072,6 +1096,12 @@ + + + + + + @@ -1079,7 +1109,7 @@ - + @@ -1101,7 +1131,7 @@


-

Table 15. 802-11-wireless setting

+

Table 15. 802-11-wireless setting

If specified, request that the device use this MAC address instead of its permanent MAC address. This is known as MAC cloning or spoofing.
mac-address-blacklist
array of string
[]
If specified, this connection will never apply to the ethernet device whose permanent MAC address matches an address in the list. Each MAC address is in the standard hex-digits-and-colons notation (00:11:22:33:44:55).
mtu
uint32
0
s390-subchannels
GPtrArray_gchararray_
array of string
[]
Identifies specific subchannels that this network device uses for communcation with z/VM or s390 host. Like the 'mac-address' property for non-z/VM devices, this property can be used to ensure this connection only applies to the network device that uses these subchannels. The list should contain exactly 3 strings, and each string may only be composed of hexadecimal characters and the period (.) character.
@@ -1177,6 +1207,12 @@ + + + + + + @@ -1186,7 +1222,7 @@ - + @@ -1200,7 +1236,7 @@


-

Table 16. 802-11-wireless-security setting

+

Table 16. 802-11-wireless-security setting

If specified, request that the WiFi device use this MAC address instead of its permanent MAC address. This is known as MAC cloning or spoofing.
mac-address-blacklist
array of string
[]
If specified, this connection will never apply to the WiFi device whose permanent MAC address matches an address in the list. Each MAC address is in the standard hex-digits-and-colons notation (00:11:22:33:44:55).
mtu
uint32
0
seen-bssids
array of string
[]
A list of BSSIDs (each BSSID formatted as a MAC address like '00:11:22:33:44:55') that have been detected as part of the WiFI network. The settings service will usually populate this property by periodically asking NetworkManager what the device's current AP is while connected to the network (or monitoring the device's 'active-ap' property) and adding the current AP's BSSID to this list. This list helps NetworkManager find hidden APs by matching up scan results with the BSSIDs in this list.A list of BSSIDs (each BSSID formatted as a MAC address like 00:11:22:33:44:55') that have been detected as part of the WiFI network. NetworkManager internally tracks previously seen BSSIDs so this property is no longer of much use.
security
diff --git a/docs/api/html/spec.html b/docs/api/html/spec.html index 4533e786..c8abf6ca 100644 --- a/docs/api/html/spec.html +++ b/docs/api/html/spec.html @@ -1,5 +1,5 @@ -NetworkManager D-Bus Interface Specification version 0.9

NetworkManager D-Bus Interface Specification

Version 0.9

Copyright (C) 2008 - 2011 Red Hat, Inc.
Copyright (C) 2008 - 2009 Novell, Inc.
+

NetworkManager D-Bus Interface Specification

Version 0.9.0

Copyright (C) 2008 - 2011 Red Hat, Inc.
Copyright (C) 2008 - 2009 Novell, Inc.

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 diff --git a/docs/api/settings-spec.xml b/docs/api/settings-spec.xml index 6be79b15..fd320b63 100644 --- a/docs/api/settings-spec.xml +++ b/docs/api/settings-spec.xml @@ -52,6 +52,18 @@ UTF-8 encoded path to a directory containing PEM or DER formatted certificates to be added to the verification chain in addition to the certificate specified in the 'ca-cert' property. + + subject-match + string + + Substring to be matched against the subject of the certificate presented by the authentication server. When unset, no verification of the authentication server certificate's subject is performed. + + + altsubject-matches + array of string + [] + List of strings to be matched against the altSubjectName of the certificate presented by the authentication server. If the list is empty, no verification of the server certificate's altSubjectName is performed. + client-cert byte array @@ -100,11 +112,23 @@ UTF-8 encoded path to a directory containing PEM or DER formatted certificates to be added to the verification chain in addition to the certificate specified in the 'phase2-ca-cert' property. + + phase2-subject-match + string + + Substring to be matched against the subject of the certificate presented by the authentication server during the inner 'phase2' authentication. When unset, no verification of the authentication server certificate's subject is performed. + + + phase2-altsubject-matches + array of string + [] + List of strings to be matched against List of strings to be matched against the altSubjectName of the certificate presented by the authentication server during the inner 'phase 2' authentication. If the list is empty, no verification of the server certificate's altSubjectName is performed. + phase2-client-cert byte array [] - Contains the 'phase 2' client certificate if used by the EAP method specified in the 'phase2-eap' or 'phase2-autheap' properties. Certificate data is specified using a 'scheme'; two are currently supported: blob and path. When using the blob scheme (which is backwards compatible with NM 0.7.x) this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string 'file://' and ending with a terminating NULL byte. + Contains the 'phase 2' client certificate if used by the EAP method specified in the 'phase2-auth' or 'phase2-autheap' properties. Certificate data is specified using a 'scheme'; two are currently supported: blob and path. When using the blob scheme (which is backwards compatible with NM 0.7.x) this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string 'file://' and ending with a terminating NULL byte. password @@ -140,7 +164,7 @@ phase2-private-key byte array [] - Contains the 'phase 2' inner private key when the 'phase2-eap' or 'phase2-autheap' property is set to 'tls'. Key data is specified using a 'scheme'; two are currently supported: blob and path. When using the blob scheme and private keys, this property should be set to the key's encrypted PEM encoded data. When using private keys with the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string 'file://' and ending with a terminating NULL byte. When using PKCS#12 format private keys and the blob scheme, this property should be set to the PKCS#12 data and the 'phase2-private-key-password' property must be set to password used to decrypt the PKCS#12 certificate and key. When using PKCS#12 files and the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string 'file://' and and ending with a terminating NULL byte, and as with the blob scheme the 'phase2-private-key-password' property must be set to the password used to decode the PKCS#12 private key and certificate. + Contains the 'phase 2' inner private key when the 'phase2-auth' or 'phase2-autheap' property is set to 'tls'. Key data is specified using a 'scheme'; two are currently supported: blob and path. When using the blob scheme and private keys, this property should be set to the key's encrypted PEM encoded data. When using private keys with the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string 'file://' and ending with a terminating NULL byte. When using PKCS#12 format private keys and the blob scheme, this property should be set to the PKCS#12 data and the 'phase2-private-key-password' property must be set to password used to decrypt the PKCS#12 certificate and key. When using PKCS#12 files and the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string 'file://' and and ending with a terminating NULL byte, and as with the blob scheme the 'phase2-private-key-password' property must be set to the password used to decode the PKCS#12 private key and certificate. phase2-private-key-password @@ -326,7 +350,7 @@ number string - Number to dial when establishing a PPP data session with the GSM-based mobile broadband network. In most cases, leave the number blank and a number selecting the APN specified in the 'apn' property will be used automatically when required. + Number to dial when establishing a PPP data session with the GSM-based mobile broadband network. Many modems do not require PPP for connections to the mobile network and thus this property should be left blank, which allows NetworkManager to select the appropriate settings automatically. username @@ -553,7 +577,7 @@ may-fail boolean - FALSE + TRUE If TRUE, allow overall network configuration to proceed even if IPv6 configuration times out. Note that at least one IP configuration must succeed or overall network configuration will still fail. For example, in IPv4-only networks, setting this property to TRUE allows the overall network configuration to succeed if IPv6 configuration fails but IPv4 configuration completes successfully. @@ -851,7 +875,7 @@ user-name string - User name of the currently logged in user for connections provided by the user settings service. This name is provided to the VPN plugin to use in lieu of a custom username provided by that VPN plugins specific configuration. The VPN plugin itself decides which user name to use. + If the VPN connection requires a user name for authentication, that name should be provided here. If the connection is available to more than one user, and the VPN requires each user to supply a different name, then leave this property empty. If this property is empty, NetworkManager will automatically supply the username of the user which requested the VPN connection. data @@ -955,6 +979,12 @@ [] If specified, request that the device use this MAC address instead of its permanent MAC address. This is known as MAC cloning or spoofing. + + mac-address-blacklist + array of string + [] + If specified, this connection will never apply to the ethernet device whose permanent MAC address matches an address in the list. Each MAC address is in the standard hex-digits-and-colons notation (00:11:22:33:44:55). + mtu uint32 @@ -963,7 +993,7 @@ s390-subchannels - GPtrArray_gchararray_ + array of string [] Identifies specific subchannels that this network device uses for communcation with z/VM or s390 host. Like the 'mac-address' property for non-z/VM devices, this property can be used to ensure this connection only applies to the network device that uses these subchannels. The list should contain exactly 3 strings, and each string may only be composed of hexadecimal characters and the period (.) character. @@ -1054,6 +1084,12 @@ [] If specified, request that the WiFi device use this MAC address instead of its permanent MAC address. This is known as MAC cloning or spoofing. + + mac-address-blacklist + array of string + [] + If specified, this connection will never apply to the WiFi device whose permanent MAC address matches an address in the list. Each MAC address is in the standard hex-digits-and-colons notation (00:11:22:33:44:55). + mtu uint32 @@ -1064,7 +1100,7 @@ seen-bssids array of string [] - A list of BSSIDs (each BSSID formatted as a MAC address like '00:11:22:33:44:55') that have been detected as part of the WiFI network. The settings service will usually populate this property by periodically asking NetworkManager what the device's current AP is while connected to the network (or monitoring the device's 'active-ap' property) and adding the current AP's BSSID to this list. This list helps NetworkManager find hidden APs by matching up scan results with the BSSIDs in this list. + A list of BSSIDs (each BSSID formatted as a MAC address like 00:11:22:33:44:55') that have been detected as part of the WiFI network. NetworkManager internally tracks previously seen BSSIDs so this property is no longer of much use. security diff --git a/docs/api/spec.html b/docs/api/spec.html index 4533e786..c8abf6ca 100644 --- a/docs/api/spec.html +++ b/docs/api/spec.html @@ -1,5 +1,5 @@ -NetworkManager D-Bus Interface Specification version 0.9

NetworkManager D-Bus Interface Specification

Version 0.9

Copyright (C) 2008 - 2011 Red Hat, Inc.
Copyright (C) 2008 - 2009 Novell, Inc.
+

NetworkManager D-Bus Interface Specification

Version 0.9.0

Copyright (C) 2008 - 2011 Red Hat, Inc.
Copyright (C) 2008 - 2009 Novell, Inc.

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 diff --git a/docs/api/version.xml b/docs/api/version.xml index 02098219..ac39a106 100644 --- a/docs/api/version.xml +++ b/docs/api/version.xml @@ -1 +1 @@ -0.8.9997 +0.9.0 diff --git a/docs/libnm-glib/html/NMClient.html b/docs/libnm-glib/html/NMClient.html index 26d99de0..48fe024f 100644 --- a/docs/libnm-glib/html/NMClient.html +++ b/docs/libnm-glib/html/NMClient.html @@ -62,6 +62,8 @@ enum GPtrArray * nm_client_get_devices (NMClient *client); NMDevice * nm_client_get_device_by_path (NMClient *client, const char *object_path); +NMDevice * nm_client_get_device_by_iface (NMClient *client, + const char *iface); void (*NMClientActivateFn) (NMClient *client, NMActiveConnection *active_connection, GError *error, @@ -370,7 +372,35 @@ Gets a

- + + +

Returns :

the NMDevice for the given object_path or NULL if none is found. [transfer none] +the NMDevice for the given object_path or NULL if none is found. [transfer none] +
+
+
+
+

nm_client_get_device_by_iface ()

+
NMDevice *          nm_client_get_device_by_iface       (NMClient *client,
+                                                         const char *iface);
+

+Gets a NMDevice from a NMClient. +

+
++ + + + + + + + + + + + diff --git a/docs/libnm-glib/html/NMDevice.html b/docs/libnm-glib/html/NMDevice.html index f7f01aa2..2b01b135 100644 --- a/docs/libnm-glib/html/NMDevice.html +++ b/docs/libnm-glib/html/NMDevice.html @@ -530,7 +530,7 @@ Gets the current - @@ -553,7 +553,7 @@ Gets the current - @@ -577,7 +577,7 @@ Gets the current - @@ -600,7 +600,7 @@ Gets the current - @@ -646,7 +646,8 @@ Gets the Returns :

-
diff --git a/docs/libnm-glib/html/NMDeviceWifi.html b/docs/libnm-glib/html/NMDeviceWifi.html index e7ddf0a9..b107ad45 100644 --- a/docs/libnm-glib/html/NMDeviceWifi.html +++ b/docs/libnm-glib/html/NMDeviceWifi.html @@ -339,7 +339,7 @@ Gets the active - @@ -368,7 +368,7 @@ Gets a - diff --git a/docs/libnm-glib/html/NMDeviceWimax.html b/docs/libnm-glib/html/NMDeviceWimax.html index a9b65251..e24928d7 100644 --- a/docs/libnm-glib/html/NMDeviceWimax.html +++ b/docs/libnm-glib/html/NMDeviceWimax.html @@ -246,7 +246,7 @@ Gets the active - @@ -274,7 +274,7 @@ Gets a Returns :

-
diff --git a/docs/libnm-glib/html/NMRemoteConnection.html b/docs/libnm-glib/html/NMRemoteConnection.html index 8be508be..87aaf32b 100644 --- a/docs/libnm-glib/html/NMRemoteConnection.html +++ b/docs/libnm-glib/html/NMRemoteConnection.html @@ -196,7 +196,7 @@ Creates a new object representing the remote connection. - +

client :

a NMClient +

iface :

the interface name to search for

Returns :

the NMDevice for the given iface or NULL if none is found. [transfer none]

Returns :

the NMIP4Config or NULL if the device is not activated. [transfer none] +the NMIP4Config or NULL if the device is not activated. [transfer none]

Returns :

the NMDHCPConfig or NULL if the device is not activated or not +the NMDHCPConfig or NULL if the device is not activated or not using DHCP. [transfer none]

Returns :

the NMIP6Config or NULL if the device is not activated. [transfer none] +the NMIP6Config or NULL if the device is not activated. [transfer none]

Returns :

the NMDHCPConfig or NULL if the device is not activated or not +the NMDHCPConfig or NULL if the device is not activated or not using DHCP. [transfer none]
the NMActiveConnection +the NMActiveConnection or NULL if the device is +not part of an active connection. [transfer none]

Returns :

the access point or NULL if none is active. [transfer none] +the access point or NULL if none is active. [transfer none]

Returns :

the access point or NULL if none is found. [transfer none] +the access point or NULL if none is found. [transfer none]

Returns :

the access point or NULL if none is active. [transfer full] +the access point or NULL if none is active. [transfer full]
the access point or NULL if none is found. [transfer none] +the access point or NULL if none is found. [transfer none]

Returns :

the new remote connection object on success, or NULL on failurethe new remote connection object on success, or NULL on failure
diff --git a/docs/libnm-glib/html/NMRemoteSettings.html b/docs/libnm-glib/html/NMRemoteSettings.html index 4274c72a..0457a567 100644 --- a/docs/libnm-glib/html/NMRemoteSettings.html +++ b/docs/libnm-glib/html/NMRemoteSettings.html @@ -300,7 +300,7 @@ Creates a new object representing the remote settings service.

Returns :

-the new remote settings object on success, or
NULL on failure +the new remote settings object on success, or NULL on failure
diff --git a/docs/libnm-glib/html/api-index-full.html b/docs/libnm-glib/html/api-index-full.html index 311e8996..adba6f39 100644 --- a/docs/libnm-glib/html/api-index-full.html +++ b/docs/libnm-glib/html/api-index-full.html @@ -388,6 +388,10 @@
+nm_client_get_device_by_iface, function in NMClient +
+
+
nm_client_get_device_by_path, function in NMClient
@@ -1925,11 +1929,11 @@ g_marshal_value_peek_variant, macro in nm-secret-agent-glue
-nm_vpn_plugin_utils_get_secret_flags, function in nm-vpn-plugin-utils +nm_vpn_plugin_utils_get_secret_flags, function in nm-vpn-plugin-utils
-nm_vpn_plugin_utils_read_vpn_details, function in nm-vpn-plugin-utils +nm_vpn_plugin_utils_read_vpn_details, function in nm-vpn-plugin-utils

W

diff --git a/docs/libnm-glib/html/ch02.html b/docs/libnm-glib/html/ch02.html index bfc17007..4aa9ceee 100644 --- a/docs/libnm-glib/html/ch02.html +++ b/docs/libnm-glib/html/ch02.html @@ -21,7 +21,7 @@

-libnm-glib API Reference

+libnm-glib API Reference
NMClient @@ -89,6 +89,9 @@
NMVpnPluginUi
+
+nm-vpn-plugin-utils +
-

+

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later @@ -130,6 +130,9 @@

NMVpnPluginUi
+
+nm-vpn-plugin-utils +
Object Hierarchy
API Index
diff --git a/docs/libnm-glib/html/index.sgml b/docs/libnm-glib/html/index.sgml index db6d2d8a..b12be4b2 100644 --- a/docs/libnm-glib/html/index.sgml +++ b/docs/libnm-glib/html/index.sgml @@ -24,6 +24,7 @@ + @@ -622,6 +623,12 @@ + + + + + + diff --git a/docs/libnm-glib/html/libnm-glib-NMVpnPluginUi.html b/docs/libnm-glib/html/libnm-glib-NMVpnPluginUi.html index 834996c2..468382ce 100644 --- a/docs/libnm-glib/html/libnm-glib-NMVpnPluginUi.html +++ b/docs/libnm-glib/html/libnm-glib-NMVpnPluginUi.html @@ -7,7 +7,7 @@ - + @@ -18,7 +18,7 @@ Up Home libnm-glib Reference Manual -Next +Next Top @@ -212,11 +212,7 @@ struct + + + +nm-vpn-plugin-utils + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+

nm-vpn-plugin-utils

+

nm-vpn-plugin-utils

+
+
+

Synopsis

+
gboolean            nm_vpn_plugin_utils_read_vpn_details
+                                                        (int fd,
+                                                         GHashTable **out_data,
+                                                         GHashTable **out_secrets);
+gboolean            nm_vpn_plugin_utils_get_secret_flags
+                                                        (GHashTable *data,
+                                                         const char *secret_name,
+                                                         NMSettingSecretFlags *out_flags);
+
+
+
+

Description

+

+

+
+
+

Details

+
+

nm_vpn_plugin_utils_read_vpn_details ()

+
gboolean            nm_vpn_plugin_utils_read_vpn_details
+                                                        (int fd,
+                                                         GHashTable **out_data,
+                                                         GHashTable **out_secrets);
+

+Parses key/value pairs from a file descriptor (normally stdin) passed by +an applet when the applet calls the authentication dialog of the VPN plugin. +

+
++ + + + + + + + + + + + + + + + + + +

fd :

file descriptor to read from, usually stdin (0)

out_data :

on successful return, a hash table +(mapping char*:char*) containing the key/value pairs of VPN data items. [out][transfer full] +

out_secrets :

on successful return, a hash table +(mapping char*:char*) containing the key/value pairsof VPN secrets. [out][transfer full] +

Returns :

+TRUE if reading values was successful, FALSE if not
+
+
+
+

nm_vpn_plugin_utils_get_secret_flags ()

+
gboolean            nm_vpn_plugin_utils_get_secret_flags
+                                                        (GHashTable *data,
+                                                         const char *secret_name,
+                                                         NMSettingSecretFlags *out_flags);
+

+Given a VPN secret key name, attempts to find the corresponding flags data +item in data. If found, converts the flags data item to +NMSettingSecretFlags and returns it. +

+
++ + + + + + + + + + + + + + + + + + +

data :

hash table containing VPN key/value pair data items

secret_name :

VPN secret key name for which to retrieve flags for

out_flags :

on success, the flags associated with secret_name. [out] +

Returns :

+TRUE if the flag data item was found and successfully converted +to flags, FALSE if not
+
+
+
+ + + \ No newline at end of file diff --git a/docs/libnm-glib/html/libnm-glib.devhelp b/docs/libnm-glib/html/libnm-glib.devhelp index cd1d0857..54edc1f6 100644 --- a/docs/libnm-glib/html/libnm-glib.devhelp +++ b/docs/libnm-glib/html/libnm-glib.devhelp @@ -26,6 +26,7 @@ + @@ -50,6 +51,7 @@ + @@ -488,5 +490,7 @@ + + diff --git a/docs/libnm-glib/html/libnm-glib.devhelp2 b/docs/libnm-glib/html/libnm-glib.devhelp2 index a74fd687..866602d8 100644 --- a/docs/libnm-glib/html/libnm-glib.devhelp2 +++ b/docs/libnm-glib/html/libnm-glib.devhelp2 @@ -26,6 +26,7 @@ + @@ -50,6 +51,7 @@ + @@ -488,6 +490,8 @@ + + diff --git a/docs/libnm-glib/html/object-tree.html b/docs/libnm-glib/html/object-tree.html index 6bcd8f42..db0f954b 100644 --- a/docs/libnm-glib/html/object-tree.html +++ b/docs/libnm-glib/html/object-tree.html @@ -6,14 +6,14 @@ - + - + diff --git a/docs/libnm-glib/libnm-glib-docs.xml b/docs/libnm-glib/libnm-glib-docs.xml index 533010e1..92dad87c 100644 --- a/docs/libnm-glib/libnm-glib-docs.xml +++ b/docs/libnm-glib/libnm-glib-docs.xml @@ -102,6 +102,7 @@ + diff --git a/docs/libnm-glib/libnm-glib-sections.txt b/docs/libnm-glib/libnm-glib-sections.txt index 90733f9b..b4475d2f 100644 --- a/docs/libnm-glib/libnm-glib-sections.txt +++ b/docs/libnm-glib/libnm-glib-sections.txt @@ -530,6 +530,7 @@ NMClientClass nm_client_new nm_client_get_devices nm_client_get_device_by_path +nm_client_get_device_by_iface NMClientActivateFn nm_client_activate_connection NMClientAddActivateFn diff --git a/docs/libnm-util/html/NMConnection.html b/docs/libnm-util/html/NMConnection.html index 489a2fd6..c700c0d9 100644 --- a/docs/libnm-util/html/NMConnection.html +++ b/docs/libnm-util/html/NMConnection.html @@ -84,7 +84,7 @@ const char * void nm_connection_clear_secrets (NMConnection *connection); gboolean nm_connection_update_secrets (NMConnection *connection, const char *setting_name, - GHashTable *setting_secrets, + GHashTable *secrets, GError **error); void nm_connection_set_path (NMConnection *connection, const char *path); @@ -123,7 +123,7 @@ const char * NMConnection *connection); NMSettingVPN * nm_connection_get_setting_vpn (NMConnection *connection); -NMSettingWimax * nm_connection_get_setting_wimax +NMSettingWimax * nm_connection_get_setting_wimax (NMConnection *connection); NMSettingWired * nm_connection_get_setting_wired (NMConnection *connection); @@ -182,7 +182,8 @@ parameters (MTU, SSID, APN, channel, rate, etc) and IP-level parameters { NM_CONNECTION_ERROR_UNKNOWN = 0, NM_CONNECTION_ERROR_CONNECTION_SETTING_NOT_FOUND, - NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID + NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID, + NM_CONNECTION_ERROR_SETTING_NOT_FOUND } NMConnectionError;

@@ -211,6 +212,12 @@ Describes errors that may result from operations involving a NMSettingWireless.

+ + + +
@@ -505,7 +512,7 @@ added to the

error :

-location to store error, or
NULL +location to store error, or NULL @@ -626,7 +633,7 @@ setting and which property failed validation, and how it failed validation.

error :

-location to store error, or NULL +location to store error, or NULL @@ -696,13 +703,15 @@ keeping secret data in memory when not needed.

nm_connection_update_secrets ()

gboolean            nm_connection_update_secrets        (NMConnection *connection,
                                                          const char *setting_name,
-                                                         GHashTable *setting_secrets,
+                                                         GHashTable *secrets,
                                                          GError **error);

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 nm_connection_to_hash(). +be returned from nm_connection_to_hash(). If setting_name is NULL, expects +a fully serialized NMConnection as returned by nm_connection_to_hash() and +will update all secrets from all settings contained in secrets.

@@ -717,21 +726,21 @@ be returned from the setting object name to which the secrets apply - + - +TRUE if the secrets were successfully updated, FALSE if the update +failed (tried to update secrets for a setting that doesn't exist, etc)

setting_secrets :

secrets :

a GHashTable mapping string:GValue of setting property names and secrets of the given setting_name. [element-type utf8 GObject.Value]

error :

location to store error, or NULL +location to store error, or NULL

Returns :

-TRUE if the secrets were successfully updated and the connection -is valid, FALSE on failure or if the setting was never added to the connection
@@ -1226,10 +1235,10 @@ A shortcut to return any

nm_connection_get_setting_wimax ()

-
NMSettingWimax *            nm_connection_get_setting_wimax
+
NMSettingWimax *            nm_connection_get_setting_wimax
                                                         (NMConnection *connection);

-A shortcut to return any NMSettingWimax the connection might contain. +A shortcut to return any NMSettingWimax the connection might contain.

@@ -1241,7 +1250,7 @@ A shortcut to return any NMSettingWimax the connection - diff --git a/docs/libnm-util/html/NMSetting.html b/docs/libnm-util/html/NMSetting.html index b9c258d2..0cc1fd03 100644 --- a/docs/libnm-util/html/NMSetting.html +++ b/docs/libnm-util/html/NMSetting.html @@ -54,6 +54,7 @@ enum NMSetti #define NM_SETTING_PARAM_FUZZY_IGNORE #define NM_SETTING_NAME enum NMSettingSecretFlags; +enum NMSettingCompareFlags; NMSetting; NMSettingClass; void (*NMSettingValueIterFn) (NMSetting *setting, @@ -72,7 +73,6 @@ const char * gbooleannm_setting_verify (NMSetting *setting, GSList *all_settings, GError **error); -enum NMSettingCompareFlags; gbooleannm_setting_compare (NMSetting *a, NMSetting *b, NMSettingCompareFlags flags); @@ -122,7 +122,7 @@ enum NMSettingPPPOE +----NMSettingSerial +----NMSettingVPN - +----NMSettingWimax + +----NMSettingWimax +----NMSettingWired +----NMSettingWireless +----NMSettingWirelessSecurity @@ -313,6 +313,64 @@ secret is not required
+

enum NMSettingCompareFlags

+
typedef enum {
+	NM_SETTING_COMPARE_FLAG_EXACT = 0x00000000,
+	NM_SETTING_COMPARE_FLAG_FUZZY = 0x00000001,
+	NM_SETTING_COMPARE_FLAG_IGNORE_ID = 0x00000002,
+	NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS = 0x00000004,
+	NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS = 0x00000008,
+	NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS = 0x00000010
+} NMSettingCompareFlags;
+
+

+These flags modify the comparison behavior when comparing two settings or +two connections. +

+

Returns :

an NMSettingWimax if the connection contains one, otherwise NULL. [transfer none] +an NMSettingWimax if the connection contains one, otherwise NULL. [transfer none]
++ + + + + + + + + + + + + + + + + + + + + + + + + + +

NM_SETTING_COMPARE_FLAG_EXACT

match all properties exactly +

NM_SETTING_COMPARE_FLAG_FUZZY

match only important attributes, like SSID, + type, security settings, etc. Does not match, for example, connection ID + or UUID. +

NM_SETTING_COMPARE_FLAG_IGNORE_ID

ignore the connection's ID +

NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS

ignore all secrets +

NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS

ignore secrets for which +the secret's flags indicate the secret is owned by a user secret agent +(ie, the secret's flag includes NM_SETTING_SECRET_FLAG_AGENT_OWNED) +

NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS

ignore secrets for which +the secret's flags indicate the secret should not be saved to persistent +storage (ie, the secret's flag includes NM_SETTING_SECRET_FLAG_NOT_SAVED) +
+ +
+

NMSetting

typedef struct _NMSetting NMSetting;

@@ -350,11 +408,16 @@ It should only be accessed through the functions described below. NMSettingSecretFlags flags, GError **error); + /* Returns TRUE if the given property contains the same value in both settings */ + gboolean (*compare_property) (NMSetting *setting, + NMSetting *other, + const GParamSpec *prop_spec, + NMSettingCompareFlags flags); + /* Padding for future expansion */ void (*_reserved1) (void); void (*_reserved2) (void); void (*_reserved3) (void); - void (*_reserved4) (void); } NMSettingClass;

@@ -368,8 +431,35 @@ It should only be accessed through the functions described below. const GValue *value, GParamFlags flags, gpointer user_data); -

-

+
++ + + + + + + + + + + + + + + + + + + + + + +

setting :

The setting for which properties are being iterated, given to +nm_setting_enumerate_values() +

key :

The value/property name

value :

The property's value

flags :

The property's flags, like NM_SETTING_PARAM_SECRET +

user_data :

User data passed to nm_setting_enumerate_values() +

@@ -550,7 +640,7 @@ came

error :

-location to store error, or NULL +location to store error, or NULL @@ -563,48 +653,6 @@ came

-

enum NMSettingCompareFlags

-
typedef enum {
-	NM_SETTING_COMPARE_FLAG_EXACT = 0x00000000,
-	NM_SETTING_COMPARE_FLAG_FUZZY = 0x00000001,
-	NM_SETTING_COMPARE_FLAG_IGNORE_ID = 0x00000002,
-	NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS = 0x00000004
-} NMSettingCompareFlags;
-
-

-These flags modify the comparison behavior when comparing two settings or -two connections. -

-
-- - - - - - - - - - - - - - - - - - -

NM_SETTING_COMPARE_FLAG_EXACT

match all properties exactly -

NM_SETTING_COMPARE_FLAG_FUZZY

match only important attributes, like SSID, - type, security settings, etc. Does not match, for example, connection ID - or UUID. -

NM_SETTING_COMPARE_FLAG_IGNORE_ID

ignore the connection's ID -

NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS

ignore secrets -
-
-
-

nm_setting_compare ()

gboolean            nm_setting_compare                  (NMSetting *a,
                                                          NMSetting *b,
@@ -856,7 +904,7 @@ string to error :

-location to store error, or
NULL +location to store error, or NULL @@ -897,7 +945,7 @@ handle that secret.

error :

-location to store error, or NULL +location to store error, or NULL @@ -937,7 +985,7 @@ handle that secret.

error :

-location to store error, or NULL +location to store error, or NULL diff --git a/docs/libnm-util/html/NMSetting8021x.html b/docs/libnm-util/html/NMSetting8021x.html index c9e533b5..1d7216b1 100644 --- a/docs/libnm-util/html/NMSetting8021x.html +++ b/docs/libnm-util/html/NMSetting8021x.html @@ -56,6 +56,8 @@ enum NM_SETTING_802_1X_ANONYMOUS_IDENTITY #define NM_SETTING_802_1X_CA_CERT #define NM_SETTING_802_1X_CA_PATH +#define NM_SETTING_802_1X_SUBJECT_MATCH +#define NM_SETTING_802_1X_ALTSUBJECT_MATCHES #define NM_SETTING_802_1X_CLIENT_CERT #define NM_SETTING_802_1X_PHASE1_PEAPVER #define NM_SETTING_802_1X_PHASE1_PEAPLABEL @@ -64,6 +66,8 @@ enum NM_SETTING_802_1X_PHASE2_AUTHEAP #define NM_SETTING_802_1X_PHASE2_CA_CERT #define NM_SETTING_802_1X_PHASE2_CA_PATH +#define NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH +#define NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES #define NM_SETTING_802_1X_PHASE2_CLIENT_CERT #define NM_SETTING_802_1X_PASSWORD #define NM_SETTING_802_1X_PASSWORD_FLAGS @@ -108,6 +112,20 @@ const char * NMSetting8021xCKScheme scheme, NMSetting8021xCKFormat *out_format, GError **error); +const char * nm_setting_802_1x_get_subject_match (NMSetting8021x *setting); +guint32 nm_setting_802_1x_get_num_altsubject_matches + (NMSetting8021x *setting); +const char * nm_setting_802_1x_get_altsubject_match + (NMSetting8021x *setting, + guint32 i); +gboolean nm_setting_802_1x_add_altsubject_match + (NMSetting8021x *setting, + const char *altsubject_match); +void nm_setting_802_1x_remove_altsubject_match + (NMSetting8021x *setting, + guint32 i); +void nm_setting_802_1x_clear_altsubject_matches + (NMSetting8021x *setting); NMSetting8021xCKScheme nm_setting_802_1x_get_client_cert_scheme (NMSetting8021x *setting); const GByteArray * nm_setting_802_1x_get_client_cert_blob @@ -140,6 +158,21 @@ const char * NMSetting8021xCKScheme scheme, NMSetting8021xCKFormat *out_format, GError **error); +const char * nm_setting_802_1x_get_phase2_subject_match + (NMSetting8021x *setting); +guint32 nm_setting_802_1x_get_num_phase2_altsubject_matches + (NMSetting8021x *setting); +const char * nm_setting_802_1x_get_phase2_altsubject_match + (NMSetting8021x *setting, + guint32 i); +gboolean nm_setting_802_1x_add_phase2_altsubject_match + (NMSetting8021x *setting, + const char *phase2_altsubject_match); +void nm_setting_802_1x_remove_phase2_altsubject_match + (NMSetting8021x *setting, + guint32 i); +void nm_setting_802_1x_clear_phase2_altsubject_matches + (NMSetting8021x *setting); NMSetting8021xCKScheme nm_setting_802_1x_get_phase2_client_cert_scheme (NMSetting8021x *setting); const GByteArray * nm_setting_802_1x_get_phase2_client_cert_blob @@ -211,6 +244,7 @@ const char *

Properties

+  "altsubject-matches"       GSList_gchararray_*   : Read / Write
   "anonymous-identity"       gchar*                : Read / Write
   "ca-cert"                  GArray_guchar_*       : Read / Write
   "ca-path"                  gchar*                : Read / Write
@@ -222,6 +256,7 @@ const char *            phase1-fast-provisioning" gchar*                : Read / Write
   "phase1-peaplabel"         gchar*                : Read / Write
   "phase1-peapver"           gchar*                : Read / Write
+  "phase2-altsubject-matches" GSList_gchararray_*   : Read / Write
   "phase2-auth"              gchar*                : Read / Write
   "phase2-autheap"           gchar*                : Read / Write
   "phase2-ca-cert"           GArray_guchar_*       : Read / Write
@@ -230,9 +265,11 @@ const char *            phase2-private-key"       GArray_guchar_*       : Read / Write
   "phase2-private-key-password" gchar*                : Read / Write
   "phase2-private-key-password-flags" guint                 : Read / Write
+  "phase2-subject-match"     gchar*                : Read / Write
   "private-key"              GArray_guchar_*       : Read / Write
   "private-key-password"     gchar*                : Read / Write
   "private-key-password-flags" guint                 : Read / Write
+  "subject-match"            gchar*                : Read / Write
   "system-ca-certs"          gboolean              : Read / Write / Construct
 
@@ -359,15 +396,33 @@ to a file containing the certificate or key data

enum NMSetting8021xError

-
typedef enum
-{
+
typedef enum {
 	NM_SETTING_802_1X_ERROR_UNKNOWN = 0,
 	NM_SETTING_802_1X_ERROR_INVALID_PROPERTY,
 	NM_SETTING_802_1X_ERROR_MISSING_PROPERTY
 } NMSetting8021xError;
 
-

-

+
++ + + + + + + + + + + + + + +

NM_SETTING_802_1X_ERROR_UNKNOWN

unknown or unclassified error +

NM_SETTING_802_1X_ERROR_INVALID_PROPERTY

the property was invalid +

NM_SETTING_802_1X_ERROR_MISSING_PROPERTY

the property was missing and is +required +

@@ -442,6 +497,22 @@ Registers an error quark for +

NM_SETTING_802_1X_SUBJECT_MATCH

+
#define NM_SETTING_802_1X_SUBJECT_MATCH "subject-match"
+
+

+

+
+
+
+

NM_SETTING_802_1X_ALTSUBJECT_MATCHES

+
#define NM_SETTING_802_1X_ALTSUBJECT_MATCHES "altsubject-matches"
+
+

+

+
+
+

NM_SETTING_802_1X_CLIENT_CERT

#define NM_SETTING_802_1X_CLIENT_CERT "client-cert"
 
@@ -506,6 +577,22 @@ Registers an error quark for +

NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH

+
#define NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH "phase2-subject-match"
+
+

+

+
+
+
+

NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES

+
#define NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES "phase2-altsubject-matches"
+
+

+

+
+
+

NM_SETTING_802_1X_PHASE2_CLIENT_CERT

#define NM_SETTING_802_1X_PHASE2_CLIENT_CERT "phase2-client-cert"
 
@@ -1031,6 +1118,153 @@ clears the CA certificate.

+

nm_setting_802_1x_get_subject_match ()

+
const char *        nm_setting_802_1x_get_subject_match (NMSetting8021x *setting);
+
++ + + + + + + + + + +

setting :

the NMSetting8021x +

Returns :

the "subject-match" property. This is the +substring to be matched against the subject of the authentication +server certificate, or NULL no subject verification is to be +performed.
+
+
+
+

nm_setting_802_1x_get_num_altsubject_matches ()

+
guint32             nm_setting_802_1x_get_num_altsubject_matches
+                                                        (NMSetting8021x *setting);
+

+Returns the number of entries in the +"altsubject-matches" property of this setting. +

+
++ + + + + + + + + + +

setting :

the NMSetting8021x +

Returns :

the number of altsubject-matches entries.
+
+
+
+

nm_setting_802_1x_get_altsubject_match ()

+
const char *        nm_setting_802_1x_get_altsubject_match
+                                                        (NMSetting8021x *setting,
+                                                         guint32 i);
+

+Returns the altSubjectName match at index i. +

+
++ + + + + + + + + + + + + + +

setting :

the NMSettingConnection +

i :

the zero-based index of the array of altSubjectName matches

Returns :

the altSubjectName match at index i +
+
+
+
+

nm_setting_802_1x_add_altsubject_match ()

+
gboolean            nm_setting_802_1x_add_altsubject_match
+                                                        (NMSetting8021x *setting,
+                                                         const char *altsubject_match);
+

+Adds an allowed alternate subject name match. Until at least one +match is added, the altSubjectName of the remote authentication +server is not verified. +

+
++ + + + + + + + + + + + + + +

setting :

the NMSetting8021x +

altsubject_match :

the altSubjectName to allow for this connection

Returns :

TRUE if the alternative subject name match was +successfully added, FALSE if it was already allowed.
+
+
+
+

nm_setting_802_1x_remove_altsubject_match ()

+
void                nm_setting_802_1x_remove_altsubject_match
+                                                        (NMSetting8021x *setting,
+                                                         guint32 i);
+

+Removes the allowed altSubjectName at the specified index. +

+
++ + + + + + + + + + +

setting :

the NMSetting8021x +

i :

the index of the altSubjectName match to remove
+
+
+
+

nm_setting_802_1x_clear_altsubject_matches ()

+
void                nm_setting_802_1x_clear_altsubject_matches
+                                                        (NMSetting8021x *setting);
+

+Clears all altSubjectName matches. +

+
++ + + + +

setting :

the NMSetting8021x +
+
+
+

nm_setting_802_1x_get_client_cert_scheme ()

NMSetting8021xCKScheme  nm_setting_802_1x_get_client_cert_scheme
                                                         (NMSetting8021x *setting);
@@ -1401,6 +1635,155 @@ clears the "phase2" CA certificate.

+

nm_setting_802_1x_get_phase2_subject_match ()

+
const char *        nm_setting_802_1x_get_phase2_subject_match
+                                                        (NMSetting8021x *setting);
+
++ + + + + + + + + + +

setting :

the NMSetting8021x +

Returns :

the "phase2-subject-match" property. This is +the substring to be matched against the subject of the "phase 2" +authentication server certificate, or NULL no subject verification +is to be performed.
+
+
+
+

nm_setting_802_1x_get_num_phase2_altsubject_matches ()

+
guint32             nm_setting_802_1x_get_num_phase2_altsubject_matches
+                                                        (NMSetting8021x *setting);
+

+Returns the number of entries in the +"phase2-altsubject-matches" property of this setting. +

+
++ + + + + + + + + + +

setting :

the NMSetting8021x +

Returns :

the number of phase2-altsubject-matches entries.
+
+
+
+

nm_setting_802_1x_get_phase2_altsubject_match ()

+
const char *        nm_setting_802_1x_get_phase2_altsubject_match
+                                                        (NMSetting8021x *setting,
+                                                         guint32 i);
+

+Returns the "phase 2" altSubjectName match at index i. +

+
++ + + + + + + + + + + + + + +

setting :

the NMSettingConnection +

i :

the zero-based index of the array of "phase 2" altSubjectName matches

Returns :

the "phase 2" altSubjectName match at index i +
+
+
+
+

nm_setting_802_1x_add_phase2_altsubject_match ()

+
gboolean            nm_setting_802_1x_add_phase2_altsubject_match
+                                                        (NMSetting8021x *setting,
+                                                         const char *phase2_altsubject_match);
+

+Adds an allowed alternate subject name match for "phase 2". Until +at least one match is added, the altSubjectName of the "phase 2" +remote authentication server is not verified. +

+
++ + + + + + + + + + + + + + +

setting :

the NMSetting8021x +

phase2_altsubject_match :

the "phase 2" altSubjectName to allow for this +connection

Returns :

TRUE if the "phase 2" alternative subject name match was +successfully added, FALSE if it was already allowed.
+
+
+
+

nm_setting_802_1x_remove_phase2_altsubject_match ()

+
void                nm_setting_802_1x_remove_phase2_altsubject_match
+                                                        (NMSetting8021x *setting,
+                                                         guint32 i);
+

+Removes the allowed "phase 2" altSubjectName at the specified index. +

+
++ + + + + + + + + + +

setting :

the NMSetting8021x +

i :

the index of the "phase 2" altSubjectName match to remove
+
+
+
+

nm_setting_802_1x_clear_phase2_altsubject_matches ()

+
void                nm_setting_802_1x_clear_phase2_altsubject_matches
+                                                        (NMSetting8021x *setting);
+

+Clears all "phase 2" altSubjectName matches. +

+
++ + + + +

setting :

the NMSetting8021x +
+
+
+

nm_setting_802_1x_get_phase2_client_cert_scheme ()

NMSetting8021xCKScheme  nm_setting_802_1x_get_phase2_client_cert_scheme
                                                         (NMSetting8021x *setting);
@@ -1748,7 +2131,7 @@ clears the private key.

password :

-password used to decrypt the private key, or NULL if the password +password used to decrypt the private key, or NULL if the password is unknown. If the password is given but fails to decrypt the private key, an error is returned. @@ -1787,8 +2170,7 @@ an error is returned.

Returns :

the private key password used to decrypt the private key if -previously set with nm_setting_802_1x_set_private_key_from_file(), -nm_setting_802_1x_set_private_key_path(), or the +previously set with nm_setting_802_1x_set_private_key(), or the "private-key-password" property. @@ -1973,7 +2355,7 @@ use password :

-password used to decrypt the private key, or
NULL if the password +password used to decrypt the private key, or NULL if the password is unknown. If the password is given but fails to decrypt the private key, an error is returned. @@ -2012,8 +2394,7 @@ an error is returned.

Returns :

the private key password used to decrypt the private key if -previously set with nm_setting_802_1x_set_phase2_private_key_from_file(), -nm_setting_802_1x_set_phase2_private_key_path(), or the +previously set with nm_setting_802_1x_set_phase2_private_key() or the "phase2-private-key-password" property. @@ -2066,6 +2447,17 @@ previously set with nm_setting_802_1x_set_phase2_private_

Property Details

+

The "altsubject-matches" property

+
  "altsubject-matches"       GSList_gchararray_*   : Read / Write
+

+List of strings to be matched against the altSubjectName of the +certificate presented by the authentication server. If the list +is empty, no verification of the server certificate's +altSubjectName is performed. +

+
+
+

The "anonymous-identity" property

  "anonymous-identity"       gchar*                : Read / Write

@@ -2189,6 +2581,18 @@ version.


+

The "phase2-altsubject-matches" property

+
  "phase2-altsubject-matches" GSList_gchararray_*   : Read / Write
+

+List of strings to be matched against the altSubjectName of the +certificate presented by the authentication server during the +inner "phase 2" authentication. If the list is empty, no +verification of the server certificate's altSubjectName is +performed. +

+
+
+

The "phase2-auth" property

  "phase2-auth"              gchar*                : Read / Write

@@ -2256,8 +2660,8 @@ properties. Setting this property directly is discouraged; use the Private key data used by "phase 2" inner authentication methods.

-Contains the "phase 2" inner private key if the "auth" or -"phase2-autheap" property is set to 'tls'. Setting this +Contains the "phase 2" inner private key if the "phase2-auth" +or "phase2-autheap" property is set to 'tls'. Setting this property directly is discouraged; use the nm_setting_802_1x_set_phase2_private_key() function instead.

@@ -2288,6 +2692,18 @@ Flags indicating how to handle +

The "phase2-subject-match" property

+
  "phase2-subject-match"     gchar*                : Read / Write
+

+Substring to be matched against the subject of the certificate +presented by the authentication server during the inner "phase +2" authentication. When unset, no verification of the +authentication server certificate's subject is performed. +

+

Default value: NULL

+
+
+

The "private-key" property

  "private-key"              GArray_guchar_*       : Read / Write

@@ -2329,6 +2745,18 @@ Flags indicating how to handle +

The "subject-match" property

+
  "subject-match"            gchar*                : Read / Write
+

+Substring to be matched against the subject of the certificate +presented by the authentication server. When unset, no +verification of the authentication server certificate's subject +is performed. +

+

Default value: NULL

+
+
+

The "system-ca-certs" property

  "system-ca-certs"          gboolean              : Read / Write / Construct

@@ -2336,9 +2764,8 @@ When TRUE, overrides "phase2-ca-path" properties using the system CA directory specified at configure time with the --system-ca-path switch. The certificates in this directory are added to the verification chain in -addition to any certificates specified by the "ca-cert", -"ca-cert-path", "phase2-ca-cert" and -"phase2-ca-cert-path" properties. +addition to any certificates specified by the "ca-cert" +and "phase2-ca-cert" properties.

Default value: FALSE

diff --git a/docs/libnm-util/html/NMSettingBluetooth.html b/docs/libnm-util/html/NMSettingBluetooth.html index a6eae7b9..0e024c2b 100644 --- a/docs/libnm-util/html/NMSettingBluetooth.html +++ b/docs/libnm-util/html/NMSettingBluetooth.html @@ -35,13 +35,16 @@

NMSettingBluetooth

-

NMSettingBluetooth

+

NMSettingBluetooth — Describes Bluetooth connection properties

Synopsis

-
#define             NM_SETTING_BLUETOOTH_SETTING_NAME
+
+#include <nm-setting-bluetooth.h>
+
+#define             NM_SETTING_BLUETOOTH_SETTING_NAME
 enum                NMSettingBluetoothError;
 #define             NM_TYPE_SETTING_BLUETOOTH_ERROR
 #define             NM_SETTING_BLUETOOTH_ERROR
@@ -81,6 +84,10 @@ const char *        
 

Description

+The NMSettingBluetooth object is a NMSetting subclass that describes +properties necessary for connection to devices that provide network +connections via the Bluetooth Dial-Up Networking (DUN) and Network Access +Point (NAP) profiles.

@@ -95,16 +102,41 @@ const char *

enum NMSettingBluetoothError

-
typedef enum
-{
+
typedef enum {
 	NM_SETTING_BLUETOOTH_ERROR_UNKNOWN = 0,
 	NM_SETTING_BLUETOOTH_ERROR_INVALID_PROPERTY,
 	NM_SETTING_BLUETOOTH_ERROR_MISSING_PROPERTY,
 	NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND,
 } NMSettingBluetoothError;
 
-

-

+
++ + + + + + + + + + + + + + + + + + +

NM_SETTING_BLUETOOTH_ERROR_UNKNOWN

unknown or unclassified error +

NM_SETTING_BLUETOOTH_ERROR_INVALID_PROPERTY

the property was invalid +

NM_SETTING_BLUETOOTH_ERROR_MISSING_PROPERTY

the property was missing and is +required +

NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND

the connection +did not contain a required type setting, ie for DUN connections the connection +must also contain an NMSettingGsm or NMSettingCdma as appropriate +

@@ -127,7 +159,15 @@ const char *

nm_setting_bluetooth_error_quark ()

GQuark              nm_setting_bluetooth_error_quark    (void);

+Registers an error quark for NMSettingBluetooth if necessary.

+
++ + + + +

Returns :

the error quark used for NMSettingBluetooth errors.


@@ -159,6 +201,8 @@ const char *
#define NM_SETTING_BLUETOOTH_TYPE_PANU "panu"

+Connection type describing a connection to devices that support the Bluetooth +NAP (Network Access Point) protocol, which accepts connections via PANU.


@@ -196,14 +240,39 @@ const char *

nm_setting_bluetooth_new ()

NMSetting *         nm_setting_bluetooth_new            (void);

+Creates a new NMSettingBluetooth object with default values.

+
++ + + + +

Returns :

the new empty NMSettingBluetooth object. [transfer full] +

nm_setting_bluetooth_get_bdaddr ()

const GByteArray *  nm_setting_bluetooth_get_bdaddr     (NMSettingBluetooth *setting);

+Gets the Bluetooth address of the remote device which this setting +describes a connection to.

+
++ + + + + + + + + + +

setting :

the NMSettingBluetooth +

Returns :

the Bluetooth address

@@ -211,7 +280,24 @@ const char * const char * nm_setting_bluetooth_get_connection_type (NMSettingBluetooth *setting);

+Returns the connection method for communicating with the remote device (i.e. +either DUN to a DUN-capable device or PANU to a NAP-capable device).

+
++ + + + + + + + + + +

setting :

the NMSettingBluetooth +

Returns :

the type, either NM_SETTING_BLUETOOTH_PANU or NM_SETTING_BLUETOOTH_DUN +
@@ -228,8 +314,8 @@ The Bluetooth address of the device.

The "type" property

  "type"                     gchar*                : Read / Write

-Either 'dun' for Dial-Up Networking connections (not yet supported) or -'panu' for Personal Area Networking connections. +Either 'dun' for Dial-Up Networking connections or 'panu' for Personal +Area Networking connections to devices supporting the NAP profile.

Default value: NULL

diff --git a/docs/libnm-util/html/NMSettingCdma.html b/docs/libnm-util/html/NMSettingCdma.html index 3dc4a712..1c93803d 100644 --- a/docs/libnm-util/html/NMSettingCdma.html +++ b/docs/libnm-util/html/NMSettingCdma.html @@ -105,16 +105,40 @@ networks, including those using CDMA2000/EVDO technology.

enum NMSettingCdmaError

-
typedef enum
-{
+
typedef enum {
 	NM_SETTING_CDMA_ERROR_UNKNOWN = 0,
 	NM_SETTING_CDMA_ERROR_INVALID_PROPERTY,
 	NM_SETTING_CDMA_ERROR_MISSING_PROPERTY,
 	NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING
 } NMSettingCdmaError;
 
-

-

+
++ + + + + + + + + + + + + + + + + + +

NM_SETTING_CDMA_ERROR_UNKNOWN

unknown or unclassified error +

NM_SETTING_CDMA_ERROR_INVALID_PROPERTY

the property was invalid +

NM_SETTING_CDMA_ERROR_MISSING_PROPERTY

the property was missing and is +required +

NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING

the required NMSettingSerial +is missing in the connection +

diff --git a/docs/libnm-util/html/NMSettingConnection.html b/docs/libnm-util/html/NMSettingConnection.html index 2b113d2d..e0085a7c 100644 --- a/docs/libnm-util/html/NMSettingConnection.html +++ b/docs/libnm-util/html/NMSettingConnection.html @@ -577,7 +577,7 @@ the "user" permission type is supported, and pitem

detail :

-unused at this time; must be NULL. [allow-none] +unused at this time; must be NULL. [allow-none] diff --git a/docs/libnm-util/html/NMSettingGsm.html b/docs/libnm-util/html/NMSettingGsm.html index 4a2d7925..439dea0d 100644 --- a/docs/libnm-util/html/NMSettingGsm.html +++ b/docs/libnm-util/html/NMSettingGsm.html @@ -7,7 +7,7 @@ - + @@ -18,7 +18,7 @@ Up Home libnm-util Reference Manual -Next +Next Top @@ -35,13 +35,16 @@

NMSettingGsm

-

NMSettingGsm

+

NMSettingGsm — Describes GSM/3GPP-based mobile broadband properties

Synopsis

-
#define             NM_SETTING_GSM_SETTING_NAME
+
+#include <nm-setting-gsm.h>
+
+#define             NM_SETTING_GSM_SETTING_NAME
 enum                NMSettingGsmError;
 #define             NM_TYPE_SETTING_GSM_ERROR
 #define             NM_SETTING_GSM_ERROR
@@ -107,6 +110,9 @@ const char *        
 

Description

+The NMSettingGsm object is a NMSetting subclass that describes +properties that allow connections to 3GPP-based mobile broadband +networks, including those using GPRS/EDGE and UMTS/HSPA technology.

@@ -121,16 +127,40 @@ const char *

enum NMSettingGsmError

-
typedef enum
-{
+
typedef enum {
 	NM_SETTING_GSM_ERROR_UNKNOWN = 0,
 	NM_SETTING_GSM_ERROR_INVALID_PROPERTY,
 	NM_SETTING_GSM_ERROR_MISSING_PROPERTY,
 	NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING
 } NMSettingGsmError;
 
-

-

+
++ + + + + + + + + + + + + + + + + + +

NM_SETTING_GSM_ERROR_UNKNOWN

unknown or unclassified error +

NM_SETTING_GSM_ERROR_INVALID_PROPERTY

the property was invalid +

NM_SETTING_GSM_ERROR_MISSING_PROPERTY

the property was missing and is +required +

NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING

the required NMSettingSerial +is missing in the connection +

@@ -153,7 +183,15 @@ const char *

nm_setting_gsm_error_quark ()

GQuark              nm_setting_gsm_error_quark          (void);

+Registers an error quark for NMSettingGsm if necessary.

+
++ + + + +

Returns :

the error quark used for NMSettingGsm errors.

@@ -255,7 +293,43 @@ const char * NMSettingGsmNetworkType values indicate the allowed access technologies +the device may use when connecting to this network.

+
++ + + + + + + + + + + + + + + + + + + + + + +

NM_SETTING_GSM_NETWORK_TYPE_ANY

any access technology may be used +

NM_SETTING_GSM_NETWORK_TYPE_UMTS_HSPA

only 3G-type (UMTS and HSPA) +technologies may be used +

NM_SETTING_GSM_NETWORK_TYPE_GPRS_EDGE

only 2G-type (GPRS and EDGE) +technologies may be used +

NM_SETTING_GSM_NETWORK_TYPE_PREFER_UMTS_HSPA

3G-type technologies are +preferred but 2G-type technologies may be used as a fallback +

NM_SETTING_GSM_NETWORK_TYPE_PREFER_GPRS_EDGE

2G-type technologies are +preferred but 3G-type technologies may be used as a fallback +

@@ -275,10 +349,93 @@ const char * NMSettingGsmNetworkBand values indicate the allowed frequency bands +the device may use when connecting to this network.

+
++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

NM_SETTING_GSM_BAND_UNKNOWN

unknown or no band specified +

NM_SETTING_GSM_BAND_ANY

any band is allowed +

NM_SETTING_GSM_BAND_EGSM

900 MHz original GSM band +

NM_SETTING_GSM_BAND_DCS

1800 MHz DCS band +

NM_SETTING_GSM_BAND_PCS

US 1900 MHz PCS band +

NM_SETTING_GSM_BAND_G850

US 850 MHz Cellular band +

NM_SETTING_GSM_BAND_U2100

WCDMA 3GPP UMTS 2100 MHz (Class I) +

NM_SETTING_GSM_BAND_U1800

WCDMA 3GPP UMTS 1800 MHz (Class III) +

NM_SETTING_GSM_BAND_U17IV

WCDMA 3GPP AWS 1700/2100 MHz (Class IV) +

NM_SETTING_GSM_BAND_U800

WCDMA 3GPP UMTS 800 MHz (Class VI) +

NM_SETTING_GSM_BAND_U850

WCDMA 3GPP UMTS 850 MHz (Class V) +

NM_SETTING_GSM_BAND_U900

WCDMA 3GPP UMTS 900 MHz (Class VIII) +

NM_SETTING_GSM_BAND_U17IX

WCDMA 3GPP UMTS 1700 MHz (Class IX) +

NM_SETTING_GSM_BAND_U1900

WCDMA 3GPP UMTS 1900 MHz (Class II) +

NM_SETTING_GSM_BAND_U2600

WCDMA 3GPP UMTS 2600 MHz (Class VII, internal) +

@@ -315,70 +472,186 @@ const char *

nm_setting_gsm_new ()

NMSetting *         nm_setting_gsm_new                  (void);

+Creates a new NMSettingGsm object with default values.

+
++ + + + +

Returns :

the new empty NMSettingGsm object

nm_setting_gsm_get_number ()

const char *        nm_setting_gsm_get_number           (NMSettingGsm *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingGsm +

Returns :

the "number" property of the setting

nm_setting_gsm_get_username ()

const char *        nm_setting_gsm_get_username         (NMSettingGsm *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingGsm +

Returns :

the "username" property of the setting

nm_setting_gsm_get_password ()

const char *        nm_setting_gsm_get_password         (NMSettingGsm *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingGsm +

Returns :

the "password" property of the setting

nm_setting_gsm_get_apn ()

const char *        nm_setting_gsm_get_apn              (NMSettingGsm *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingGsm +

Returns :

the "apn" property of the setting

nm_setting_gsm_get_network_id ()

const char *        nm_setting_gsm_get_network_id       (NMSettingGsm *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingGsm +

Returns :

the "network-id" property of the setting

nm_setting_gsm_get_network_type ()

int                 nm_setting_gsm_get_network_type     (NMSettingGsm *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingGsm +

Returns :

the "network-type" property of the setting

nm_setting_gsm_get_allowed_bands ()

guint32             nm_setting_gsm_get_allowed_bands    (NMSettingGsm *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingGsm +

Returns :

the "allowed-bands" property of the setting

nm_setting_gsm_get_pin ()

const char *        nm_setting_gsm_get_pin              (NMSettingGsm *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingGsm +

Returns :

the "pin" property of the setting

nm_setting_gsm_get_home_only ()

gboolean            nm_setting_gsm_get_home_only        (NMSettingGsm *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingGsm +

Returns :

the "home-only" property of the setting

@@ -428,7 +701,8 @@ const char * "allowed-bands" guint : Read / Write / Construct

Bitfield of allowed frequency bands. Note that not all devices allow -frequency band control. +frequency band control. Permitted values are those specified by +NMSettingGsmNetworkBand.

Allowed values: <= 1

Default value: 1

@@ -477,9 +751,9 @@ roaming control of the device is not otherwise possible.
  "network-type"             gint                  : Read / Write / Construct

Network preference to force the device to only use specific network -technologies. The permitted values are: -1: any, 0: 3G only, -1: GPRS/EDGE only, 2: prefer 3G, and 3: prefer 2G. Note that not all -devices allow network preference control. +technologies. Permitted values are those specified by +NMSettingGsmNetworkType. Note that not all devices allow network +preference control.

Allowed values: [G_MAXULONG,3]

Default value: -1

@@ -490,9 +764,9 @@ devices allow network preference control.
  "number"                   gchar*                : Read / Write

Number to dial when establishing a PPP data session with the GSM-based -mobile broadband network. In most cases, leave the number blank and a -number selecting the APN specified in the 'apn' property will be used -automatically when required. +mobile broadband network. Many modems do not require PPP for connections +to the mobile network and thus this property should be left blank, which +allows NetworkManager to select the appropriate settings automatically.

Default value: NULL

@@ -533,7 +807,7 @@ the device.

The "pin-flags" property

  "pin-flags"                guint                 : Read / Write

-Flags indicating how to handle "pin":. +Flags indicating how to handle "pin".

Allowed values: <= 7

Default value: 0

diff --git a/docs/libnm-util/html/NMSettingIP4Config.html b/docs/libnm-util/html/NMSettingIP4Config.html index 6a701adf..488f842a 100644 --- a/docs/libnm-util/html/NMSettingIP4Config.html +++ b/docs/libnm-util/html/NMSettingIP4Config.html @@ -35,13 +35,16 @@

NMSettingIP4Config

-

NMSettingIP4Config

+

NMSettingIP4Config — Describes IPv4 addressing, routing, and name service properties

Synopsis

-
#define             NM_SETTING_IP4_CONFIG_SETTING_NAME
+
+#include <nm-setting-ip4-config.h>
+
+#define             NM_SETTING_IP4_CONFIG_SETTING_NAME
 enum                NMSettingIP4ConfigError;
 #define             NM_TYPE_SETTING_IP4_CONFIG_ERROR
 #define             NM_SETTING_IP4_CONFIG_ERROR
@@ -83,7 +86,7 @@ typedef             
 typedef             NMIP4Route;
 GType               nm_ip4_route_get_type               (void);
 NMIP4Route *        nm_ip4_route_new                    (void);
-NMIP4Route *        nm_ip4_route_dup                    (NMIP4Route *route);
+NMIP4Route *        nm_ip4_route_dup                    (NMIP4Route *source);
 void                nm_ip4_route_ref                    (NMIP4Route *route);
 void                nm_ip4_route_unref                  (NMIP4Route *route);
 gboolean            nm_ip4_route_compare                (NMIP4Route *route,
@@ -201,6 +204,8 @@ const char *        
 

Description

+The NMSettingIP4Config object is a NMSetting subclass that describes +properties related to IPv4 addressing, routing, and Domain Name Service

@@ -215,16 +220,40 @@ const char *

enum NMSettingIP4ConfigError

-
typedef enum
-{
+
typedef enum {
 	NM_SETTING_IP4_CONFIG_ERROR_UNKNOWN = 0,
 	NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY,
 	NM_SETTING_IP4_CONFIG_ERROR_MISSING_PROPERTY,
 	NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD
 } NMSettingIP4ConfigError;
 
-

-

+
++ + + + + + + + + + + + + + + + + + +

NM_SETTING_IP4_CONFIG_ERROR_UNKNOWN

unknown or unclassified error +

NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY

the property was invalid +

NM_SETTING_IP4_CONFIG_ERROR_MISSING_PROPERTY

the property was missing and is +required +

NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD

the property's value is +not valid with the given IP4 method +

@@ -247,7 +276,15 @@ const char *

nm_setting_ip4_config_error_quark ()

GQuark              nm_setting_ip4_config_error_quark   (void);

+Registers an error quark for NMSettingIP4Config if necessary.

+
++ + + + +

Returns :

the error quark used for NMSettingIP4Config errors.


@@ -359,6 +399,8 @@ const char *
#define NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL "link-local"

+IPv4 configuration should be automatically configured for link-local-only +operation.


@@ -367,6 +409,8 @@ const char *
#define NM_SETTING_IP4_CONFIG_METHOD_MANUAL "manual"

+All necessary IPv4 configuration (addresses, prefix, DNS, etc) is specified +in the setting's properties.


@@ -375,6 +419,12 @@ const char *
#define NM_SETTING_IP4_CONFIG_METHOD_SHARED "shared"

+This connection specifies configuration that allows other computers to +connect through it to the default network (usually the Internet). The +connection's interface will be assigned a private address, and a DHCP server, +caching DNS server, and Network Address Translation (NAT) functionality will +be started on this connection's interface to allow other devices to connect +through that interface to the default network.


@@ -383,6 +433,7 @@ const char *
#define NM_SETTING_IP4_CONFIG_METHOD_DISABLED "disabled"

+This connection does not use or require IPv4 address and it should be disabled.


@@ -405,28 +456,71 @@ const char *

nm_ip4_address_new ()

NMIP4Address *      nm_ip4_address_new                  (void);

+Creates and returns a new NMIP4Address object.

+
++ + + + +

Returns :

the new empty NMIP4Address object. [transfer full] +

nm_ip4_address_dup ()

NMIP4Address *      nm_ip4_address_dup                  (NMIP4Address *source);

+Copies a given NMIP4Address object and returns the copy.

+
++ + + + + + + + + + +

source :

the NMIP4Address object to copy

Returns :

the copy of the given NMIP4Address copy. [transfer full] +

nm_ip4_address_ref ()

void                nm_ip4_address_ref                  (NMIP4Address *address);

+Increases the reference count of the object.

+
++ + + + +

address :

the NMIP4Address +

nm_ip4_address_unref ()

void                nm_ip4_address_unref                (NMIP4Address *address);

+Decreases the reference count of the object. If the reference count +reaches zero, the object will be destroyed.

+
++ + + + +

address :

the NMIP4Address +

@@ -434,14 +528,49 @@ const char * gboolean nm_ip4_address_compare (NMIP4Address *address, NMIP4Address *other);

+Determines if two NMIP4Address objects contain the same values.

+
++ + + + + + + + + + + + + + +

address :

the NMIP4Address +

other :

the NMIP4Address to compare address to.

Returns :

+TRUE if the objects contain the same values, FALSE if they do not.

nm_ip4_address_get_address ()

guint32             nm_ip4_address_get_address          (NMIP4Address *address);

+Gets the IPv4 address property of this address object.

+
++ + + + + + + + + + +

address :

the NMIP4Address +

Returns :

the IPv4 address in network byte order

@@ -449,14 +578,45 @@ const char * void nm_ip4_address_set_address (NMIP4Address *address, guint32 addr);

+Sets the IPv4 address property of this object.

+
++ + + + + + + + + + +

address :

the NMIP4Address +

addr :

the IPv4 address in network byte order

nm_ip4_address_get_prefix ()

guint32             nm_ip4_address_get_prefix           (NMIP4Address *address);

+Gets the IPv4 address prefix (ie "24" or "30" etc) property of this address +object.

+
++ + + + + + + + + + +

address :

the NMIP4Address +

Returns :

the IPv4 address prefix

@@ -464,14 +624,44 @@ const char * void nm_ip4_address_set_prefix (NMIP4Address *address, guint32 prefix);

+Sets the IPv4 address prefix.

+
++ + + + + + + + + + +

address :

the NMIP4Address +

prefix :

the address prefix, a number between 1 and 32 inclusive

nm_ip4_address_get_gateway ()

guint32             nm_ip4_address_get_gateway          (NMIP4Address *address);

+Gets the IPv4 default gateway property of this address object.

+
++ + + + + + + + + + +

address :

the NMIP4Address +

Returns :

the IPv4 gateway address in network byte order

@@ -479,7 +669,22 @@ const char * void nm_ip4_address_set_gateway (NMIP4Address *address, guint32 gateway);

+Sets the IPv4 default gateway property of this address object.

+
++ + + + + + + + + + +

address :

the NMIP4Address +

gateway :

the IPv4 default gateway in network byte order

@@ -501,28 +706,71 @@ const char *

nm_ip4_route_new ()

NMIP4Route *        nm_ip4_route_new                    (void);

+Creates and returns a new NMIP4Route object.

+
++ + + + +

Returns :

the new empty NMIP4Route object. [transfer full] +

nm_ip4_route_dup ()

-
NMIP4Route *        nm_ip4_route_dup                    (NMIP4Route *route);
+
NMIP4Route *        nm_ip4_route_dup                    (NMIP4Route *source);

+Copies a given NMIP4Route object and returns the copy.

+
++ + + + + + + + + + +

source :

the NMIP4Route object to copy

Returns :

the copy of the given NMIP4Route copy. [transfer full] +

nm_ip4_route_ref ()

void                nm_ip4_route_ref                    (NMIP4Route *route);

+Increases the reference count of the object.

+
++ + + + +

route :

the NMIP4Route +

nm_ip4_route_unref ()

void                nm_ip4_route_unref                  (NMIP4Route *route);

+Decreases the reference count of the object. If the reference count +reaches zero, the object will be destroyed.

+
++ + + + +

route :

the NMIP4Route +

@@ -530,14 +778,49 @@ const char * gboolean nm_ip4_route_compare (NMIP4Route *route, NMIP4Route *other);

+Determines if two NMIP4Route objects contain the same values.

+
++ + + + + + + + + + + + + + +

route :

the NMIP4Route +

other :

the NMIP4Route to compare route to.

Returns :

+TRUE if the objects contain the same values, FALSE if they do not.

nm_ip4_route_get_dest ()

guint32             nm_ip4_route_get_dest               (NMIP4Route *route);

+Gets the IPv4 destination address property of this route object.

+
++ + + + + + + + + + +

route :

the NMIP4Route +

Returns :

the IPv4 address in network byte order

@@ -545,14 +828,44 @@ const char * void nm_ip4_route_set_dest (NMIP4Route *route, guint32 dest);

+Sets the IPv4 destination address property of this route object.

+
++ + + + + + + + + + +

route :

the NMIP4Route +

dest :

the destination address in network byte order

nm_ip4_route_get_prefix ()

guint32             nm_ip4_route_get_prefix             (NMIP4Route *route);

+Gets the IPv4 prefix (ie "24" or "30" etc) of this route.

+
++ + + + + + + + + + +

route :

the NMIP4Route +

Returns :

the IPv4 prefix

@@ -560,14 +873,44 @@ const char * void nm_ip4_route_set_prefix (NMIP4Route *route, guint32 prefix);

+Sets the IPv4 prefix of this route.

+
++ + + + + + + + + + +

route :

the NMIP4Route +

prefix :

the prefix, a number between 1 and 32 inclusive

nm_ip4_route_get_next_hop ()

guint32             nm_ip4_route_get_next_hop           (NMIP4Route *route);

+Gets the IPv4 address of the next hop of this route.

+
++ + + + + + + + + + +

route :

the NMIP4Route +

Returns :

the IPv4 address in network byte order

@@ -575,14 +918,45 @@ const char * void nm_ip4_route_set_next_hop (NMIP4Route *route, guint32 next_hop);

+Sets the IPv4 address of the next hop of this route.

+
++ + + + + + + + + + +

route :

the NMIP4Route +

next_hop :

the IPv4 address of the next hop in network byte order

nm_ip4_route_get_metric ()

guint32             nm_ip4_route_get_metric             (NMIP4Route *route);

+Gets the route metric property of this route object; lower values indicate +"better" or more preferred routes.

+
++ + + + + + + + + + +

route :

the NMIP4Route +

Returns :

the route metric

@@ -590,7 +964,23 @@ const char * void nm_ip4_route_set_metric (NMIP4Route *route, guint32 metric);

+Sets the route metric property of this route object; lower values indicate +"better" or more preferred routes.

+
++ + + + + + + + + + +

route :

the NMIP4Route +

metric :

the route metric

@@ -627,29 +1017,80 @@ const char *

nm_setting_ip4_config_new ()

NMSetting *         nm_setting_ip4_config_new           (void);

+Creates a new NMSettingIP4Config object with default values.

+
++ + + + +

Returns :

the new empty NMSettingIP4Config object. [transfer full] +

nm_setting_ip4_config_get_method ()

const char *        nm_setting_ip4_config_get_method    (NMSettingIP4Config *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingIP4Config +

Returns :

the "method" property of the setting

nm_setting_ip4_config_get_num_dns ()

guint32             nm_setting_ip4_config_get_num_dns   (NMSettingIP4Config *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingIP4Config +

Returns :

the number of configured DNS servers

nm_setting_ip4_config_get_dns ()

guint32             nm_setting_ip4_config_get_dns       (NMSettingIP4Config *setting,
                                                          guint32 i);
-

-

+
++ + + + + + + + + + + + + + +

setting :

the NMSettingIP4Config +

i :

index number of the DNS server to return

Returns :

the IPv4 address (network byte order) of the DNS server at index +i +

@@ -657,7 +1098,28 @@ const char * gboolean nm_setting_ip4_config_add_dns (NMSettingIP4Config *setting, guint32 dns);

+Adds a new DNS server to the setting.

+
++ + + + + + + + + + + + + + +

setting :

the NMSettingIP4Config +

dns :

the IPv4 address (network byte order) of the DNS server to add

Returns :

+TRUE if the DNS server was added; FALSE if the server was already +known

@@ -665,22 +1127,58 @@ const char * void nm_setting_ip4_config_remove_dns (NMSettingIP4Config *setting, guint32 i);

+Removes the DNS server at index i.

+
++ + + + + + + + + + +

setting :

the NMSettingIP4Config +

i :

index number of the DNS server to remove

nm_setting_ip4_config_clear_dns ()

void                nm_setting_ip4_config_clear_dns     (NMSettingIP4Config *setting);

+Removes all configured DNS servers.

+
++ + + + +

setting :

the NMSettingIP4Config +

nm_setting_ip4_config_get_num_dns_searches ()

guint32             nm_setting_ip4_config_get_num_dns_searches
                                                         (NMSettingIP4Config *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingIP4Config +

Returns :

the number of configured DNS search domains

@@ -688,8 +1186,25 @@ const char * const char * nm_setting_ip4_config_get_dns_search (NMSettingIP4Config *setting, guint32 i); -

-

+
++ + + + + + + + + + + + + + +

setting :

the NMSettingIP4Config +

i :

index number of the DNS search domain to return

Returns :

the DNS search domain at index i +

@@ -698,7 +1213,28 @@ const char * NMSettingIP4Config *setting, const char *dns_search);

+Adds a new DNS search domain to the setting.

+
++ + + + + + + + + + + + + + +

setting :

the NMSettingIP4Config +

dns_search :

the search domain to add

Returns :

+TRUE if the DNS search domain was added; FALSE if the search +domain was already known

@@ -707,7 +1243,22 @@ const char * NMSettingIP4Config *setting, guint32 i);

+Removes the DNS search domain at index i.

+
++ + + + + + + + + + +

setting :

the NMSettingIP4Config +

i :

index number of the DNS search domain

@@ -715,23 +1266,61 @@ const char * void nm_setting_ip4_config_clear_dns_searches (NMSettingIP4Config *setting);

+Removes all configured DNS search domains.

+
++ + + + +

setting :

the NMSettingIP4Config +

nm_setting_ip4_config_get_num_addresses ()

guint32             nm_setting_ip4_config_get_num_addresses
                                                         (NMSettingIP4Config *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingIP4Config +

Returns :

the number of configured addresses

nm_setting_ip4_config_get_address ()

NMIP4Address *      nm_setting_ip4_config_get_address   (NMSettingIP4Config *setting,
                                                          guint32 i);
-

-

+
++ + + + + + + + + + + + + + +

setting :

the NMSettingIP4Config +

i :

index number of the address to return

Returns :

the address at index i +

@@ -739,7 +1328,29 @@ const char * gboolean nm_setting_ip4_config_add_address (NMSettingIP4Config *setting, NMIP4Address *address);

+Adds a new IPv4 address and associated information to the setting. The +given address is duplicated internally and is not changed by this function.

+
++ + + + + + + + + + + + + + +

setting :

the NMSettingIP4Config +

address :

the new address to add

Returns :

+TRUE if the address was added; FALSE if the address was already +known.

@@ -748,7 +1359,22 @@ const char * NMSettingIP4Config *setting, guint32 i);

+Removes the address at index i.

+
++ + + + + + + + + + +

setting :

the NMSettingIP4Config +

i :

index number of the address to remove

@@ -756,23 +1382,61 @@ const char * void nm_setting_ip4_config_clear_addresses (NMSettingIP4Config *setting);

+Removes all configured addresses.

+
++ + + + +

setting :

the NMSettingIP4Config +

nm_setting_ip4_config_get_num_routes ()

guint32             nm_setting_ip4_config_get_num_routes
                                                         (NMSettingIP4Config *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingIP4Config +

Returns :

the number of configured routes

nm_setting_ip4_config_get_route ()

NMIP4Route *        nm_setting_ip4_config_get_route     (NMSettingIP4Config *setting,
                                                          guint32 i);
-

-

+
++ + + + + + + + + + + + + + +

setting :

the NMSettingIP4Config +

i :

index number of the route to return

Returns :

the route at index i +

@@ -780,7 +1444,28 @@ const char * gboolean nm_setting_ip4_config_add_route (NMSettingIP4Config *setting, NMIP4Route *route);

+Adds a new IPv4 route and associated information to the setting. The +given route is duplicated internally and is not changed by this function.

+
++ + + + + + + + + + + + + + +

setting :

the NMSettingIP4Config +

route :

the route to add

Returns :

+TRUE if the route was added; FALSE if the route was already known.

@@ -788,14 +1473,38 @@ const char * void nm_setting_ip4_config_remove_route (NMSettingIP4Config *setting, guint32 i);

+Removes the route at index i.

+
++ + + + + + + + + + +

setting :

the NMSettingIP4Config +

i :

index number of the route

nm_setting_ip4_config_clear_routes ()

void                nm_setting_ip4_config_clear_routes  (NMSettingIP4Config *setting);

+Removes all configured routes.

+
++ + + + +

setting :

the NMSettingIP4Config +

@@ -803,7 +1512,25 @@ const char * gboolean nm_setting_ip4_config_get_ignore_auto_routes (NMSettingIP4Config *setting);

+Returns the value contained in the "ignore-auto-routes" +property.

+
++ + + + + + + + + + +

setting :

the NMSettingIP4Config +

Returns :

+TRUE if automatically configured (ie via DHCP) routes should be +ignored.

@@ -811,7 +1538,25 @@ const char * gboolean nm_setting_ip4_config_get_ignore_auto_dns (NMSettingIP4Config *setting);

+Returns the value contained in the "ignore-auto-dns" +property.

+
++ + + + + + + + + + +

setting :

the NMSettingIP4Config +

Returns :

+TRUE if automatically configured (ie via DHCP) DNS information +should be ignored.

@@ -819,7 +1564,24 @@ const char * const char * nm_setting_ip4_config_get_dhcp_client_id (NMSettingIP4Config *setting);

+Returns the value contained in the "dhcp-client-id" +property.

+
++ + + + + + + + + + +

setting :

the NMSettingIP4Config +

Returns :

the configured Client ID to send to the DHCP server when requesting +addresses via DHCP.

@@ -827,7 +1589,26 @@ const char * gboolean nm_setting_ip4_config_get_dhcp_send_hostname (NMSettingIP4Config *setting);

+Returns the value contained in the "dhcp-send-hostname" +property.

+
++ + + + + + + + + + +

setting :

the NMSettingIP4Config +

Returns :

+TRUE if NetworkManager should send the machine hostname to the +DHCP server when requesting addresses to allow the server to automatically +update DNS information for this machine.

@@ -835,7 +1616,23 @@ const char * const char * nm_setting_ip4_config_get_dhcp_hostname (NMSettingIP4Config *setting);

+Returns the value contained in the "dhcp-hostname" +property.

+
++ + + + + + + + + + +

setting :

the NMSettingIP4Config +

Returns :

the configured hostname to send to the DHCP server

@@ -843,14 +1640,50 @@ const char * gboolean nm_setting_ip4_config_get_never_default (NMSettingIP4Config *setting);

+Returns the value contained in the "never-default" +property.

+
++ + + + + + + + + + +

setting :

the NMSettingIP4Config +

Returns :

+TRUE if this connection should never be the default connection +for IPv4 addressing

nm_setting_ip4_config_get_may_fail ()

gboolean            nm_setting_ip4_config_get_may_fail  (NMSettingIP4Config *setting);

+Returns the value contained in the "may-fail" +property.

+
++ + + + + + + + + + +

setting :

the NMSettingIP4Config +

Returns :

+TRUE if this connection doesn't require IPv4 addressing to complete +for the connection to succeed.
diff --git a/docs/libnm-util/html/NMSettingIP6Config.html b/docs/libnm-util/html/NMSettingIP6Config.html index 060c80fe..0fe4cc5b 100644 --- a/docs/libnm-util/html/NMSettingIP6Config.html +++ b/docs/libnm-util/html/NMSettingIP6Config.html @@ -35,13 +35,16 @@

NMSettingIP6Config

-

NMSettingIP6Config

+

NMSettingIP6Config — Describes IPv6 addressing, routing, and name service properties

Synopsis

-
#define             NM_SETTING_IP6_CONFIG_SETTING_NAME
+
+#include <nm-setting-ip6-config.h>
+
+#define             NM_SETTING_IP6_CONFIG_SETTING_NAME
 enum                NMSettingIP6ConfigError;
 #define             NM_TYPE_SETTING_IP6_CONFIG_ERROR
 #define             NM_SETTING_IP6_CONFIG_ERROR
@@ -77,11 +80,11 @@ const struct in6_addr * guint32 prefix);
 const struct in6_addr * nm_ip6_address_get_gateway      (NMIP6Address *address);
 void                nm_ip6_address_set_gateway          (NMIP6Address *address,
-                                                         const struct in6_addr *gw);
+                                                         const struct in6_addr *gateway);
 typedef             NMIP6Route;
 GType               nm_ip6_route_get_type               (void);
 NMIP6Route *            nm_ip6_route_new                (void);
-NMIP6Route *            nm_ip6_route_dup                (NMIP6Route *route);
+NMIP6Route *            nm_ip6_route_dup                (NMIP6Route *source);
 void                nm_ip6_route_ref                    (NMIP6Route *route);
 void                nm_ip6_route_unref                  (NMIP6Route *route);
 gboolean            nm_ip6_route_compare                (NMIP6Route *route,
@@ -192,6 +195,8 @@ const char *            
 

Description

+The NMSettingIP6Config object is a NMSetting subclass that describes +properties related to IPv6 addressing, routing, and Domain Name Service

@@ -206,16 +211,40 @@ const char *

enum NMSettingIP6ConfigError

-
typedef enum
-{
+
typedef enum {
 	NM_SETTING_IP6_CONFIG_ERROR_UNKNOWN = 0,
 	NM_SETTING_IP6_CONFIG_ERROR_INVALID_PROPERTY,
 	NM_SETTING_IP6_CONFIG_ERROR_MISSING_PROPERTY,
 	NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD
 } NMSettingIP6ConfigError;
 
-

-

+
++ + + + + + + + + + + + + + + + + + +

NM_SETTING_IP6_CONFIG_ERROR_UNKNOWN

unknown or unclassified error +

NM_SETTING_IP6_CONFIG_ERROR_INVALID_PROPERTY

the property was invalid +

NM_SETTING_IP6_CONFIG_ERROR_MISSING_PROPERTY

the property was missing and is +required +

NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD

the property's value is +not valid with the given IPv6 method +

@@ -238,7 +267,15 @@ const char *

nm_setting_ip6_config_error_quark ()

GQuark              nm_setting_ip6_config_error_quark   (void);

+Registers an error quark for NMSettingIP6Config if necessary.

+
++ + + + +

Returns :

the error quark used for NMSettingIP6Config errors.


@@ -326,6 +365,9 @@ const char *
#define NM_SETTING_IP6_CONFIG_METHOD_AUTO "auto"

+IPv6 configuration should be automatically determined via a method appropriate +for the hardware interface, ie router advertisements, DHCP, or PPP or some +other device-specific manner.


@@ -334,6 +376,8 @@ const char *
#define NM_SETTING_IP6_CONFIG_METHOD_DHCP "dhcp"

+IPv6 configuration should be automatically determined via DHCPv6 only and +router advertisements should be ignored.


@@ -342,6 +386,8 @@ const char *
#define NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL "link-local"

+IPv6 configuration should be automatically configured for link-local-only +operation.


@@ -350,6 +396,8 @@ const char *
#define NM_SETTING_IP6_CONFIG_METHOD_MANUAL "manual"

+All necessary IPv6 configuration (addresses, prefix, DNS, etc) is specified +in the setting's properties.


@@ -358,6 +406,13 @@ const char *
#define NM_SETTING_IP6_CONFIG_METHOD_SHARED "shared"

+This connection specifies configuration that allows other computers to +connect through it to the default network (usually the Internet). The +connection's interface will be assigned a private address, and router +advertisements, a caching DNS server, and Network Address Translation (NAT) +functionality will be started on this connection's interface to allow other +devices to connect through that interface to the default network. (not yet +supported for IPv6)


@@ -380,28 +435,71 @@ const char *

nm_ip6_address_new ()

NMIP6Address *          nm_ip6_address_new              (void);

+Creates and returns a new NMIP6Address object.

+
++ + + + +

Returns :

the new empty NMIP6Address object. [transfer full] +

nm_ip6_address_dup ()

NMIP6Address *          nm_ip6_address_dup              (NMIP6Address *source);

+Copies a given NMIP6Address object and returns the copy.

+
++ + + + + + + + + + +

source :

the NMIP6Address object to copy

Returns :

the copy of the given NMIP6Address copy. [transfer full] +

nm_ip6_address_ref ()

void                nm_ip6_address_ref                  (NMIP6Address *address);

+Increases the reference count of the object.

+
++ + + + +

address :

the NMIP6Address +

nm_ip6_address_unref ()

void                nm_ip6_address_unref                (NMIP6Address *address);

+Decreases the reference count of the object. If the reference count +reaches zero, the object will be destroyed.

+
++ + + + +

address :

the NMIP6Address +

@@ -409,14 +507,50 @@ const char * gboolean nm_ip6_address_compare (NMIP6Address *address, NMIP6Address *other);

+Determines if two NMIP6Address objects contain the same values.

+
++ + + + + + + + + + + + + + +

address :

the NMIP6Address +

other :

the NMIP6Address to compare address to.

Returns :

+TRUE if the objects contain the same values, FALSE if they do not.

nm_ip6_address_get_address ()

const struct in6_addr * nm_ip6_address_get_address      (NMIP6Address *address);

+Gets the IPv6 address property of this address object.

+
++ + + + + + + + + + +

address :

the NMIP6Address +

Returns :

the IPv6 address. [transfer none] +

@@ -424,14 +558,44 @@ const char * void nm_ip6_address_set_address (NMIP6Address *address, const struct in6_addr *addr);

+Sets the IPv6 address property of this object.

+
++ + + + + + + + + + +

address :

the NMIP6Address +

addr :

the IPv6 address

nm_ip6_address_get_prefix ()

guint32             nm_ip6_address_get_prefix           (NMIP6Address *address);

+Gets the IPv6 address prefix property of this address object.

+
++ + + + + + + + + + +

address :

the NMIP6Address +

Returns :

the IPv6 address prefix

@@ -439,22 +603,68 @@ const char * void nm_ip6_address_set_prefix (NMIP6Address *address, guint32 prefix);

+Sets the IPv6 address prefix.

+
++ + + + + + + + + + +

address :

the NMIP6Address +

prefix :

the address prefix, a number between 0 and 128 inclusive

nm_ip6_address_get_gateway ()

const struct in6_addr * nm_ip6_address_get_gateway      (NMIP6Address *address);

+Gets the IPv6 default gateway property of this address object.

+
++ + + + + + + + + + +

address :

the NMIP6Address +

Returns :

the IPv6 gateway address. [transfer none] +

nm_ip6_address_set_gateway ()

void                nm_ip6_address_set_gateway          (NMIP6Address *address,
-                                                         const struct in6_addr *gw);
+ const struct in6_addr *gateway);

+Sets the IPv6 default gateway property of this address object.

+
++ + + + + + + + + + +

address :

the NMIP6Address +

gateway :

the IPv6 default gateway

@@ -476,28 +686,71 @@ const char *

nm_ip6_route_new ()

NMIP6Route *            nm_ip6_route_new                (void);

+Creates and returns a new NMIP6Route object.

+
++ + + + +

Returns :

the new empty NMIP6Route object. [transfer full] +

nm_ip6_route_dup ()

-
NMIP6Route *            nm_ip6_route_dup                (NMIP6Route *route);
+
NMIP6Route *            nm_ip6_route_dup                (NMIP6Route *source);

+Copies a given NMIP6Route object and returns the copy.

+
++ + + + + + + + + + +

source :

the NMIP6Route object to copy

Returns :

the copy of the given NMIP6Route copy. [transfer full] +

nm_ip6_route_ref ()

void                nm_ip6_route_ref                    (NMIP6Route *route);

+Increases the reference count of the object.

+
++ + + + +

route :

the NMIP6Route +

nm_ip6_route_unref ()

void                nm_ip6_route_unref                  (NMIP6Route *route);

+Decreases the reference count of the object. If the reference count +reaches zero, the object will be destroyed.

+
++ + + + +

route :

the NMIP6Route +

@@ -505,14 +758,49 @@ const char * gboolean nm_ip6_route_compare (NMIP6Route *route, NMIP6Route *other);

+Determines if two NMIP6Route objects contain the same values.

+
++ + + + + + + + + + + + + + +

route :

the NMIP6Route +

other :

the NMIP6Route to compare route to.

Returns :

+TRUE if the objects contain the same values, FALSE if they do not.

nm_ip6_route_get_dest ()

const struct in6_addr * nm_ip6_route_get_dest           (NMIP6Route *route);

+Gets the IPv6 destination address property of this route object.

+
++ + + + + + + + + + +

route :

the NMIP6Route +

Returns :

the IPv6 address

@@ -520,14 +808,44 @@ const char * void nm_ip6_route_set_dest (NMIP6Route *route, const struct in6_addr *dest);

+Sets the IPv6 destination address property of this route object.

+
++ + + + + + + + + + +

route :

the NMIP6Route +

dest :

the destination address

nm_ip6_route_get_prefix ()

guint32             nm_ip6_route_get_prefix             (NMIP6Route *route);

+Gets the IPv6 prefix (ie "32" or "64" etc) of this route.

+
++ + + + + + + + + + +

route :

the NMIP6Route +

Returns :

the IPv6 prefix

@@ -535,14 +853,44 @@ const char * void nm_ip6_route_set_prefix (NMIP6Route *route, guint32 prefix);

+Sets the IPv6 prefix of this route.

+
++ + + + + + + + + + +

route :

the NMIP6Route +

prefix :

the prefix, a number between 1 and 128 inclusive

nm_ip6_route_get_next_hop ()

const struct in6_addr * nm_ip6_route_get_next_hop       (NMIP6Route *route);

+Gets the IPv6 address of the next hop of this route.

+
++ + + + + + + + + + +

route :

the NMIP6Route +

Returns :

the IPv6 address

@@ -550,14 +898,45 @@ const char * void nm_ip6_route_set_next_hop (NMIP6Route *route, const struct in6_addr *next_hop);

+Sets the IPv6 address of the next hop of this route.

+
++ + + + + + + + + + +

route :

the NMIP6Route +

next_hop :

the IPv6 address of the next hop

nm_ip6_route_get_metric ()

guint32             nm_ip6_route_get_metric             (NMIP6Route *route);

+Gets the route metric property of this route object; lower values indicate +"better" or more preferred routes.

+
++ + + + + + + + + + +

route :

the NMIP6Route +

Returns :

the route metric

@@ -565,7 +944,23 @@ const char * void nm_ip6_route_set_metric (NMIP6Route *route, guint32 metric);

+Sets the route metric property of this route object; lower values indicate +"better" or more preferred routes.

+
++ + + + + + + + + + +

route :

the NMIP6Route +

metric :

the route metric

@@ -602,30 +997,80 @@ const char *

nm_setting_ip6_config_new ()

NMSetting *             nm_setting_ip6_config_new       (void);

+Creates a new NMSettingIP6Config object with default values.

+
++ + + + +

Returns :

the new empty NMSettingIP6Config object. [transfer full] +

nm_setting_ip6_config_get_method ()

const char *            nm_setting_ip6_config_get_method
                                                         (NMSettingIP6Config *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingIP6Config +

Returns :

the "method" property of the setting

nm_setting_ip6_config_get_num_dns ()

guint32             nm_setting_ip6_config_get_num_dns   (NMSettingIP6Config *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingIP6Config +

Returns :

the number of configured DNS servers

nm_setting_ip6_config_get_dns ()

const struct in6_addr * nm_setting_ip6_config_get_dns   (NMSettingIP6Config *setting,
                                                          guint32 i);
-

-

+
++ + + + + + + + + + + + + + +

setting :

the NMSettingIP6Config +

i :

index number of the DNS server to return

Returns :

the IPv6 address of the DNS server at index i. [transfer none] +

@@ -633,7 +1078,28 @@ const char * gboolean nm_setting_ip6_config_add_dns (NMSettingIP6Config *setting, const struct in6_addr *dns);

+Adds a new DNS server to the setting.

+
++ + + + + + + + + + + + + + +

setting :

the NMSettingIP6Config +

dns :

the IPv6 address of the DNS server to add

Returns :

+TRUE if the DNS server was added; FALSE if the server was already +known

@@ -641,22 +1107,58 @@ const char * void nm_setting_ip6_config_remove_dns (NMSettingIP6Config *setting, guint32 i);

+Removes the DNS server at index i.

+
++ + + + + + + + + + +

setting :

the NMSettingIP6Config +

i :

index number of the DNS server to remove

nm_setting_ip6_config_clear_dns ()

void                nm_setting_ip6_config_clear_dns     (NMSettingIP6Config *setting);

+Removes all configured DNS servers.

+
++ + + + +

setting :

the NMSettingIP6Config +

nm_setting_ip6_config_get_num_dns_searches ()

guint32             nm_setting_ip6_config_get_num_dns_searches
                                                         (NMSettingIP6Config *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingIP6Config +

Returns :

the number of configured DNS search domains

@@ -664,8 +1166,25 @@ const char * const char * nm_setting_ip6_config_get_dns_search (NMSettingIP6Config *setting, guint32 i); -

-

+
++ + + + + + + + + + + + + + +

setting :

the NMSettingIP6Config +

i :

index number of the DNS search domain to return

Returns :

the DNS search domain at index i +

@@ -674,7 +1193,28 @@ const char * NMSettingIP6Config *setting, const char *dns_search);

+Adds a new DNS search domain to the setting.

+
++ + + + + + + + + + + + + + +

setting :

the NMSettingIP6Config +

dns_search :

the search domain to add

Returns :

+TRUE if the DNS search domain was added; FALSE if the search +domain was already known

@@ -683,7 +1223,22 @@ const char * NMSettingIP6Config *setting, guint32 i);

+Removes the DNS search domain at index i.

+
++ + + + + + + + + + +

setting :

the NMSettingIP6Config +

i :

index number of the DNS search domain

@@ -691,15 +1246,36 @@ const char * void nm_setting_ip6_config_clear_dns_searches (NMSettingIP6Config *setting);

+Removes all configured DNS search domains.

+
++ + + + +

setting :

the NMSettingIP6Config +

nm_setting_ip6_config_get_num_addresses ()

guint32             nm_setting_ip6_config_get_num_addresses
                                                         (NMSettingIP6Config *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingIP6Config +

Returns :

the number of configured addresses

@@ -707,8 +1283,25 @@ const char * NMIP6Address * nm_setting_ip6_config_get_address (NMSettingIP6Config *setting, guint32 i); -

-

+
++ + + + + + + + + + + + + + +

setting :

the NMSettingIP6Config +

i :

index number of the address to return

Returns :

the address at index i +

@@ -716,7 +1309,29 @@ const char * gboolean nm_setting_ip6_config_add_address (NMSettingIP6Config *setting, NMIP6Address *address);

+Adds a new IPv6 address and associated information to the setting. The +given address is duplicated internally and is not changed by this function.

+
++ + + + + + + + + + + + + + +

setting :

the NMSettingIP6Config +

address :

the new address to add

Returns :

+TRUE if the address was added; FALSE if the address was already +known.

@@ -725,7 +1340,22 @@ const char * NMSettingIP6Config *setting, guint32 i);

+Removes the address at index i.

+
++ + + + + + + + + + +

setting :

the NMSettingIP6Config +

i :

index number of the address to remove

@@ -733,23 +1363,61 @@ const char * void nm_setting_ip6_config_clear_addresses (NMSettingIP6Config *setting);

+Removes all configured addresses.

+
++ + + + +

setting :

the NMSettingIP6Config +

nm_setting_ip6_config_get_num_routes ()

guint32             nm_setting_ip6_config_get_num_routes
                                                         (NMSettingIP6Config *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingIP6Config +

Returns :

the number of configured routes

nm_setting_ip6_config_get_route ()

NMIP6Route *            nm_setting_ip6_config_get_route (NMSettingIP6Config *setting,
                                                          guint32 i);
-

-

+
++ + + + + + + + + + + + + + +

setting :

the NMSettingIP6Config +

i :

index number of the route to return

Returns :

the route at index i +

@@ -757,7 +1425,28 @@ const char * gboolean nm_setting_ip6_config_add_route (NMSettingIP6Config *setting, NMIP6Route *route);

+Adds a new IPv6 route and associated information to the setting. The +given route is duplicated internally and is not changed by this function.

+
++ + + + + + + + + + + + + + +

setting :

the NMSettingIP6Config +

route :

the route to add

Returns :

+TRUE if the route was added; FALSE if the route was already known.

@@ -765,14 +1454,38 @@ const char * void nm_setting_ip6_config_remove_route (NMSettingIP6Config *setting, guint32 i);

+Removes the route at index i.

+
++ + + + + + + + + + +

setting :

the NMSettingIP6Config +

i :

index number of the route

nm_setting_ip6_config_clear_routes ()

void                nm_setting_ip6_config_clear_routes  (NMSettingIP6Config *setting);

+Removes all configured routes.

+
++ + + + +

setting :

the NMSettingIP6Config +

@@ -780,7 +1493,25 @@ const char * gboolean nm_setting_ip6_config_get_ignore_auto_routes (NMSettingIP6Config *setting);

+Returns the value contained in the "ignore-auto-routes" +property.

+
++ + + + + + + + + + +

setting :

the NMSettingIP6Config +

Returns :

+TRUE if automatically configured (ie via DHCP) routes should be +ignored.

@@ -788,7 +1519,25 @@ const char * gboolean nm_setting_ip6_config_get_ignore_auto_dns (NMSettingIP6Config *setting);

+Returns the value contained in the "ignore-auto-dns" +property.

+
++ + + + + + + + + + +

setting :

the NMSettingIP6Config +

Returns :

+TRUE if automatically configured (ie via DHCP or router +advertisements) DNS information should be ignored.

@@ -796,14 +1545,50 @@ const char * gboolean nm_setting_ip6_config_get_never_default (NMSettingIP6Config *setting);

+Returns the value contained in the "never-default" +property.

+
++ + + + + + + + + + +

setting :

the NMSettingIP6Config +

Returns :

+TRUE if this connection should never be the default connection +for IPv6 addressing

nm_setting_ip6_config_get_may_fail ()

gboolean            nm_setting_ip6_config_get_may_fail  (NMSettingIP6Config *setting);

+Returns the value contained in the "may-fail" +property.

+
++ + + + + + + + + + +

setting :

the NMSettingIP6Config +

Returns :

+TRUE if this connection doesn't require IPv6 addressing to complete +for the connection to succeed.
@@ -886,7 +1671,7 @@ example, in IPv4-only networks, setting this property to TRUE allows the overall network configuration to succeed if IPv6 configuration fails but IPv4 configuration completes successfully.

-

Default value: FALSE

+

Default value: TRUE


diff --git a/docs/libnm-util/html/NMSettingOlpcMesh.html b/docs/libnm-util/html/NMSettingOlpcMesh.html index 43ea8d27..03a1fd22 100644 --- a/docs/libnm-util/html/NMSettingOlpcMesh.html +++ b/docs/libnm-util/html/NMSettingOlpcMesh.html @@ -6,7 +6,7 @@ - + @@ -14,7 +14,7 @@ - + diff --git a/docs/libnm-util/html/NMSettingPPP.html b/docs/libnm-util/html/NMSettingPPP.html index eade54a5..ea9a7c78 100644 --- a/docs/libnm-util/html/NMSettingPPP.html +++ b/docs/libnm-util/html/NMSettingPPP.html @@ -35,13 +35,17 @@

NMSettingPPP

-

NMSettingPPP

+

NMSettingPPP — Describes connection properties for devices/networks +that require PPP to deliver IP capability

Synopsis

-
#define             NM_SETTING_PPP_SETTING_NAME
+
+#include <nm-setting-ppp.h>
+
+#define             NM_SETTING_PPP_SETTING_NAME
 enum                NMSettingPPPError;
 #define             NM_TYPE_SETTING_PPP_ERROR
 #define             NM_SETTING_PPP_ERROR
@@ -127,6 +131,9 @@ enum                N
 

Description

+The NMSettingPPP object is a NMSetting subclass that describes properties +necessary for connection to networks that require PPP transport, like PPPoE +cable and DSL modems and some mobile broadband devices.

@@ -141,16 +148,40 @@ enum N

enum NMSettingPPPError

-
typedef enum
-{
+
typedef enum {
 	NM_SETTING_PPP_ERROR_UNKNOWN = 0,
 	NM_SETTING_PPP_ERROR_INVALID_PROPERTY,
 	NM_SETTING_PPP_ERROR_MISSING_PROPERTY,
 	NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED
 } NMSettingPPPError;
 
-

-

+
++ + + + + + + + + + + + + + + + + + +

NM_SETTING_PPP_ERROR_UNKNOWN

unknown or unclassified error +

NM_SETTING_PPP_ERROR_INVALID_PROPERTY

the property was invalid +

NM_SETTING_PPP_ERROR_MISSING_PROPERTY

the property was missing and is +required +

NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED

requiring MPPE is not compatible +with other setting configuration parameters +

@@ -173,7 +204,15 @@ enum N

nm_setting_ppp_error_quark ()

GQuark              nm_setting_ppp_error_quark          (void);

+Registers an error quark for NMSettingPPP if necessary.

+
++ + + + +

Returns :

the error quark used for NMSettingPPP errors.

@@ -354,7 +393,16 @@ enum N

nm_setting_ppp_new ()

NMSetting *         nm_setting_ppp_new                  (void);

+Creates a new NMSettingPPP object with default values.

+
++ + + + +

Returns :

the new empty NMSettingPPP object. [transfer full] +

diff --git a/docs/libnm-util/html/NMSettingPPPOE.html b/docs/libnm-util/html/NMSettingPPPOE.html index 87669254..6ea0af49 100644 --- a/docs/libnm-util/html/NMSettingPPPOE.html +++ b/docs/libnm-util/html/NMSettingPPPOE.html @@ -35,13 +35,16 @@

NMSettingPPPOE

-

NMSettingPPPOE

+

NMSettingPPPOE — Describes PPPoE connection properties

Synopsis

-
#define             NM_SETTING_PPPOE_SETTING_NAME
+
+#include <nm-setting-pppoe.h>
+
+#define             NM_SETTING_PPPOE_SETTING_NAME
 enum                NMSettingPPPOEError;
 #define             NM_TYPE_SETTING_PPPOE_ERROR
 #define             NM_SETTING_PPPOE_ERROR
@@ -85,6 +88,9 @@ const char *        
 

Description

+The NMSettingPPPOE object is a NMSetting subclass that describes +properties necessary for connection to networks that require PPPoE connections +to provide IP transport, for example cable or DSL modems.

@@ -99,16 +105,40 @@ const char *

enum NMSettingPPPOEError

-
typedef enum
-{
+
typedef enum {
 	NM_SETTING_PPPOE_ERROR_UNKNOWN = 0,
 	NM_SETTING_PPPOE_ERROR_INVALID_PROPERTY,
 	NM_SETTING_PPPOE_ERROR_MISSING_PROPERTY,
 	NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING
 } NMSettingPPPOEError;
 
-

-

+
++ + + + + + + + + + + + + + + + + + +

NM_SETTING_PPPOE_ERROR_UNKNOWN

unknown or unclassified error +

NM_SETTING_PPPOE_ERROR_INVALID_PROPERTY

the property was invalid +

NM_SETTING_PPPOE_ERROR_MISSING_PROPERTY

the property was missing and is +required +

NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING

the connection +did not contain a required PPP setting for PPP related options +

@@ -131,7 +161,15 @@ const char *

nm_setting_pppoe_error_quark ()

GQuark              nm_setting_pppoe_error_quark        (void);

+Registers an error quark for NMSettingPPPOE if necessary.

+
++ + + + +

Returns :

the error quark used for NMSettingPPPOE errors.

@@ -200,14 +238,35 @@ const char *

nm_setting_pppoe_new ()

NMSetting *         nm_setting_pppoe_new                (void);

+Creates a new NMSettingPPPOE object with default values.

+
++ + + + +

Returns :

the new empty NMSettingPPPOE object. [transfer full] +

nm_setting_pppoe_get_service ()

const char *        nm_setting_pppoe_get_service        (NMSettingPPPOE *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingPPPOE +

Returns :

the "password" property of the setting

diff --git a/docs/libnm-util/html/NMSettingSerial.html b/docs/libnm-util/html/NMSettingSerial.html index 5e5483ec..0340eb26 100644 --- a/docs/libnm-util/html/NMSettingSerial.html +++ b/docs/libnm-util/html/NMSettingSerial.html @@ -35,13 +35,17 @@

NMSettingSerial

-

NMSettingSerial

+

NMSettingSerial — Describes connection properties for devices that use +serial communications

Synopsis

-
#define             NM_SETTING_SERIAL_SETTING_NAME
+
+#include <nm-setting-serial.h>
+
+#define             NM_SETTING_SERIAL_SETTING_NAME
 enum                NMSettingSerialError;
 #define             NM_TYPE_SETTING_SERIAL_ERROR
 #define             NM_SETTING_SERIAL_ERROR
@@ -87,6 +91,9 @@ enum                
 

Description

+The NMSettingSerial object is a NMSetting subclass that describes +properties necessary for connections that may use serial communications, +such as mobile broadband or analog telephone connections.

@@ -101,16 +108,40 @@ enum

enum NMSettingSerialError

-
typedef enum
-{
+
typedef enum {
 	NM_SETTING_SERIAL_ERROR_UNKNOWN = 0,
 	NM_SETTING_SERIAL_ERROR_INVALID_PROPERTY,
 	NM_SETTING_SERIAL_ERROR_MISSING_PROPERTY,
 	NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING
 } NMSettingSerialError;
 
-

-

+
++ + + + + + + + + + + + + + + + + + +

NM_SETTING_SERIAL_ERROR_UNKNOWN

unknown or unclassified error +

NM_SETTING_SERIAL_ERROR_INVALID_PROPERTY

the property was invalid +

NM_SETTING_SERIAL_ERROR_MISSING_PROPERTY

the property was missing and is +required +

NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING

one of the properties of the +setting requires the connection to contain an NMSettingPPP setting +

@@ -133,7 +164,15 @@ enum

nm_setting_serial_error_quark ()

GQuark              nm_setting_serial_error_quark       (void);

+Registers an error quark for NMSettingSerial if necessary.

+
++ + + + +

Returns :

the error quark used for NMSettingSerial errors.

@@ -210,42 +249,111 @@ enum

nm_setting_serial_new ()

NMSetting *         nm_setting_serial_new               (void);

+Creates a new NMSettingSerial object with default values.

+
++ + + + +

Returns :

the new empty NMSettingSerial object. [transfer full] +

nm_setting_serial_get_baud ()

guint               nm_setting_serial_get_baud          (NMSettingSerial *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingSerial +

Returns :

the "baud" property of the setting

nm_setting_serial_get_bits ()

guint               nm_setting_serial_get_bits          (NMSettingSerial *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingSerial +

Returns :

the "bits" property of the setting

nm_setting_serial_get_parity ()

char                nm_setting_serial_get_parity        (NMSettingSerial *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingSerial +

Returns :

the "parity" property of the setting

nm_setting_serial_get_stopbits ()

guint               nm_setting_serial_get_stopbits      (NMSettingSerial *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingSerial +

Returns :

the "stopbits" property of the setting

nm_setting_serial_get_send_delay ()

guint64             nm_setting_serial_get_send_delay    (NMSettingSerial *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingSerial +

Returns :

the "send-delay" property of the setting
diff --git a/docs/libnm-util/html/NMSettingVPN.html b/docs/libnm-util/html/NMSettingVPN.html index c2e4ce52..1c6264d0 100644 --- a/docs/libnm-util/html/NMSettingVPN.html +++ b/docs/libnm-util/html/NMSettingVPN.html @@ -35,13 +35,16 @@

NMSettingVPN

-

NMSettingVPN

+

NMSettingVPN — Describes connection properties for Virtual Private Networks

Synopsis

-
#define             NM_SETTING_VPN_SETTING_NAME
+
+#include <nm-setting-vpn.h>
+
+#define             NM_SETTING_VPN_SETTING_NAME
 enum                NMSettingVpnError;
 #define             NM_TYPE_SETTING_VPN_ERROR
 #define             NM_SETTING_VPN_ERROR
@@ -105,6 +108,13 @@ const char *        
 

Description

+The NMSettingVPN object is a NMSetting subclass that describes properties +necessary for connection to Virtual Private Networks. NetworkManager uses +a plugin architecture to allow easier use of new VPN types, and this +setting abstracts the configuration for those plugins. Since the configuration +options are only known to the VPN plugins themselves, the VPN configuration +options are stored as key/value pairs of strings rather than GObject +properties.

@@ -119,15 +129,33 @@ const char *

enum NMSettingVpnError

-
typedef enum
-{
+
typedef enum {
 	NM_SETTING_VPN_ERROR_UNKNOWN = 0,
 	NM_SETTING_VPN_ERROR_INVALID_PROPERTY,
 	NM_SETTING_VPN_ERROR_MISSING_PROPERTY,
 } NMSettingVpnError;
 
-

-

+
++ + + + + + + + + + + + + + +

NM_SETTING_VPN_ERROR_UNKNOWN

unknown or unclassified error +

NM_SETTING_VPN_ERROR_INVALID_PROPERTY

the property was invalid +

NM_SETTING_VPN_ERROR_MISSING_PROPERTY

the property was missing and is +required +

@@ -150,7 +178,15 @@ const char *

nm_setting_vpn_error_quark ()

GQuark              nm_setting_vpn_error_quark          (void);

+Registers an error quark for NMSettingVPN if necessary.

+
++ + + + +

Returns :

the error quark used for NMSettingVPN errors.

@@ -213,8 +249,25 @@ const char * void (*NMVPNIterFunc) (const char *key, const char *value, gpointer user_data);
-

-

+
++ + + + + + + + + + + + + + +

key :

the name of the data or secret item

value :

the value of the data or secret item

user_data :

User data passed to nm_setting_vpn_foreach_data_item() or +nm_setting_vpn_foreach_secret() +

@@ -228,21 +281,58 @@ const char *

nm_setting_vpn_new ()

NMSetting *         nm_setting_vpn_new                  (void);

+Creates a new NMSettingVPN object with default values.

+
++ + + + +

Returns :

the new empty NMSettingVPN object. [transfer full] +

nm_setting_vpn_get_service_type ()

const char *        nm_setting_vpn_get_service_type     (NMSettingVPN *setting);

+Returns the service name of the VPN, which identifies the specific VPN +plugin that should be used to connect to this VPN.

+
++ + + + + + + + + + +

setting :

the NMSettingVPN +

Returns :

the VPN plugin's service name

nm_setting_vpn_get_user_name ()

const char *        nm_setting_vpn_get_user_name        (NMSettingVPN *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingVPN +

Returns :

the "user-name" property of the setting

@@ -251,7 +341,30 @@ const char * const char *key, const char *item);

+Establishes a relationship between key and item internally in the +setting which may be retrieved later. Should not be used to store passwords +or other secrets, which is what nm_setting_vpn_add_secret() is for.

+
++ + + + + + + + + + + + + + +

setting :

the NMSettingVPN +

key :

a name that uniquely identifies the given value item +

item :

the value to be referenced by key +

@@ -259,7 +372,27 @@ const char * const char * nm_setting_vpn_get_data_item (NMSettingVPN *setting, const char *key);

+Retrieves the data item of a key/value relationship previously established +by nm_setting_vpn_add_data_item().

+
++ + + + + + + + + + + + + + +

setting :

the NMSettingVPN +

key :

the name of the data item to retrieve

Returns :

the data item, if any

@@ -267,7 +400,23 @@ const char * void nm_setting_vpn_remove_data_item (NMSettingVPN *setting, const char *key);

+Deletes a key/value relationship previously established by +nm_setting_vpn_add_data_item().

+
++ + + + + + + + + + +

setting :

the NMSettingVPN +

key :

the name of the data item to remove

@@ -308,7 +457,29 @@ during iteration will not be part of the iteration. const char *key, const char *secret);

+Establishes a relationship between key and secret internally in the +setting which may be retrieved later.

+
++ + + + + + + + + + + + + + +

setting :

the NMSettingVPN +

key :

a name that uniquely identifies the given secret secret +

secret :

the secret to be referenced by key +

@@ -316,7 +487,27 @@ during iteration will not be part of the iteration.
const char *        nm_setting_vpn_get_secret           (NMSettingVPN *setting,
                                                          const char *key);

+Retrieves the secret of a key/value relationship previously established +by nm_setting_vpn_add_secret().

+
++ + + + + + + + + + + + + + +

setting :

the NMSettingVPN +

key :

the name of the secret to retrieve

Returns :

the secret, if any

@@ -324,7 +515,23 @@ during iteration will not be part of the iteration.
void                nm_setting_vpn_remove_secret        (NMSettingVPN *setting,
                                                          const char *key);

+Deletes a key/value relationship previously established by +nm_setting_vpn_add_secret().

+
++ + + + + + + + + + +

setting :

the NMSettingVPN +

key :

the name of the secret to remove

@@ -393,7 +600,7 @@ plugin.

The "user-name" property

  "user-name"                gchar*                : Read / Write
-

User name of the currently logged in user for connections provided by the user settings service. This name is provided to the VPN plugin to use in lieu of a custom username provided by that VPN plugins specific configuration. The VPN plugin itself decides which user name to use.

+

If the VPN connection requires a user name for authentication, that name should be provided here. If the connection is available to more than one user, and the VPN requires each user to supply a different name, then leave this property empty. If this property is empty, NetworkManager will automatically supply the username of the user which requested the VPN connection.

Default value: NULL

diff --git a/docs/libnm-util/html/NMSettingWimax.html b/docs/libnm-util/html/NMSettingWimax.html new file mode 100644 index 00000000..919c9b0a --- /dev/null +++ b/docs/libnm-util/html/NMSettingWimax.html @@ -0,0 +1,288 @@ + + + + +NMSettingWimax + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+

NMSettingWimax

+

NMSettingWimax — Describes 802.16e Mobile WiMAX connection properties

+
+ +
+

Object Hierarchy

+
+  GEnum
+   +----NMSettingWimaxError
+
+
+  GObject
+   +----NMSetting
+         +----NMSettingWimax
+
+
+
+

Properties

+
+  "mac-address"              GArray_guchar_*       : Read / Write
+  "network-name"             gchar*                : Read / Write
+
+
+
+

Description

+

+The NMSettingWimax object is a NMSetting subclass that describes properties +necessary for connection to 802.16e Mobile WiMAX networks. +

+
+
+

Details

+
+

NM_SETTING_WIMAX_SETTING_NAME

+
#define NM_SETTING_WIMAX_SETTING_NAME "wimax"
+
+

+

+
+
+
+

enum NMSettingWimaxError

+
typedef enum {
+	NM_SETTING_WIMAX_ERROR_UNKNOWN = 0,
+	NM_SETTING_WIMAX_ERROR_INVALID_PROPERTY,
+	NM_SETTING_WIMAX_ERROR_MISSING_PROPERTY
+} NMSettingWimaxError;
+
+
++ + + + + + + + + + + + + + +

NM_SETTING_WIMAX_ERROR_UNKNOWN

unknown or unclassified error +

NM_SETTING_WIMAX_ERROR_INVALID_PROPERTY

the property was invalid +

NM_SETTING_WIMAX_ERROR_MISSING_PROPERTY

the property was missing and is +required +
+
+
+
+

NM_TYPE_SETTING_WIMAX_ERROR

+
#define NM_TYPE_SETTING_WIMAX_ERROR (nm_setting_wimax_error_get_type ()) 
+
+

+

+
+
+
+

NM_SETTING_WIMAX_ERROR

+
#define NM_SETTING_WIMAX_ERROR nm_setting_wimax_error_quark ()
+
+

+

+
+
+
+

nm_setting_wimax_error_quark ()

+
GQuark              nm_setting_wimax_error_quark        (void);
+

+Registers an error quark for NMSettingWimax if necessary. +

+
++ + + + +

Returns :

the error quark used for NMSettingWimax errors.
+
+
+
+

NM_SETTING_WIMAX_NETWORK_NAME

+
#define NM_SETTING_WIMAX_NETWORK_NAME "network-name"
+
+

+

+
+
+
+

NM_SETTING_WIMAX_MAC_ADDRESS

+
#define NM_SETTING_WIMAX_MAC_ADDRESS  "mac-address"
+
+

+

+
+
+
+

NMSettingWimax

+
typedef struct _NMSettingWimax NMSettingWimax;
+

+

+
+
+
+

NMSettingWimaxClass

+
typedef struct {
+	NMSettingClass parent;
+} NMSettingWimaxClass;
+
+

+

+
+
+
+

nm_setting_wimax_get_type ()

+
GType               nm_setting_wimax_get_type           (void);
+

+

+
+
+
+

nm_setting_wimax_new ()

+
NMSetting *         nm_setting_wimax_new                (void);
+

+Creates a new NMSettingWimax object with default values. +

+
++ + + + +

Returns :

the new empty NMSettingWimax object
+
+
+
+

nm_setting_wimax_get_network_name ()

+
const char *        nm_setting_wimax_get_network_name   (NMSettingWimax *setting);
+

+Returns the WiMAX NSP name (ex "Sprint" or "CLEAR") which identifies the +specific WiMAX network this setting describes a connection to. +

+
++ + + + + + + + + + +

setting :

the NMSettingWimax +

Returns :

the WiMAX NSP name
+
+
+
+

nm_setting_wimax_get_mac_address ()

+
const GByteArray *  nm_setting_wimax_get_mac_address    (NMSettingWimax *setting);
+

+Returns the MAC address of a WiMAX device which this connection is locked +to. +

+
++ + + + + + + + + + +

setting :

the NMSettingWimax +

Returns :

the MAC address
+
+
+
+

Property Details

+
+

The "mac-address" property

+
  "mac-address"              GArray_guchar_*       : Read / Write
+

+If specified, this connection will only apply to the WiMAX device +whose MAC address matches. This property does not change the MAC address +of the device (known as MAC spoofing). +

+
+
+
+

The "network-name" property

+
  "network-name"             gchar*                : Read / Write
+

+Network Service Provider (NSP) name of the WiMAX network this connection +should use. +

+

Default value: NULL

+
+
+
+ + + \ No newline at end of file diff --git a/docs/libnm-util/html/NMSettingWired.html b/docs/libnm-util/html/NMSettingWired.html index d079de3a..dc01f965 100644 --- a/docs/libnm-util/html/NMSettingWired.html +++ b/docs/libnm-util/html/NMSettingWired.html @@ -35,13 +35,16 @@

NMSettingWired

-

NMSettingWired

+

NMSettingWired — Describes connection properties for Ethernet-based networks

Synopsis

-
#define             NM_SETTING_WIRED_SETTING_NAME
+
+#include <nm-setting-wired.h>
+
+#define             NM_SETTING_WIRED_SETTING_NAME
 enum                NMSettingWiredError;
 #define             NM_TYPE_SETTING_WIRED_ERROR
 #define             NM_SETTING_WIRED_ERROR
@@ -52,6 +55,7 @@ enum                NM_SETTING_WIRED_AUTO_NEGOTIATE
 #define             NM_SETTING_WIRED_MAC_ADDRESS
 #define             NM_SETTING_WIRED_CLONED_MAC_ADDRESS
+#define             NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST
 #define             NM_SETTING_WIRED_MTU
 #define             NM_SETTING_WIRED_S390_SUBCHANNELS
 #define             NM_SETTING_WIRED_S390_NETTYPE
@@ -67,6 +71,8 @@ const char *        GByteArray *  nm_setting_wired_get_mac_address    (NMSettingWired *setting);
 const GByteArray *  nm_setting_wired_get_cloned_mac_address
                                                         (NMSettingWired *setting);
+const GSList *      nm_setting_wired_get_mac_address_blacklist
+                                                        (NMSettingWired *setting);
 guint32             nm_setting_wired_get_mtu            (NMSettingWired *setting);
 const GPtrArray *   nm_setting_wired_get_s390_subchannels
                                                         (NMSettingWired *setting);
@@ -106,6 +112,7 @@ const char *        cloned-mac-address"       GArray_guchar_*       : Read / Write
   "duplex"                   gchar*                : Read / Write
   "mac-address"              GArray_guchar_*       : Read / Write
+  "mac-address-blacklist"    GSList_gchararray_*   : Read / Write
   "mtu"                      guint                 : Read / Write / Construct
   "port"                     gchar*                : Read / Write
   "s390-nettype"             gchar*                : Read / Write
@@ -117,6 +124,8 @@ const char *        
 

Description

+The NMSettingWired object is a NMSetting subclass that describes properties +necessary for connection to Ethernet networks.

@@ -131,15 +140,33 @@ const char *

enum NMSettingWiredError

-
typedef enum
-{
+
typedef enum {
 	NM_SETTING_WIRED_ERROR_UNKNOWN = 0,
 	NM_SETTING_WIRED_ERROR_INVALID_PROPERTY,
 	NM_SETTING_WIRED_ERROR_MISSING_PROPERTY
 } NMSettingWiredError;
 
-

-

+
++ + + + + + + + + + + + + + +

NM_SETTING_WIRED_ERROR_UNKNOWN

unknown or unclassified error +

NM_SETTING_WIRED_ERROR_INVALID_PROPERTY

the property was invalid +

NM_SETTING_WIRED_ERROR_MISSING_PROPERTY

the property was missing and is +required +

@@ -162,7 +189,15 @@ const char *

nm_setting_wired_error_quark ()

GQuark              nm_setting_wired_error_quark        (void);

+Registers an error quark for NMSettingWired if necessary.

+
++ + + + +

Returns :

the error quark used for NMSettingWired errors.

@@ -214,6 +249,14 @@ const char * +

NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST

+
#define NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST "mac-address-blacklist"
+
+

+

+
+
+

NM_SETTING_WIRED_MTU

#define NM_SETTING_WIRED_MTU "mtu"
 
@@ -279,57 +322,172 @@ const char *

nm_setting_wired_new ()

NMSetting *         nm_setting_wired_new                (void);

+Creates a new NMSettingWired object with default values.

+
++ + + + +

Returns :

the new empty NMSettingWired object. [transfer full] +

nm_setting_wired_get_port ()

const char *        nm_setting_wired_get_port           (NMSettingWired *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingWired +

Returns :

the "port" property of the setting

nm_setting_wired_get_speed ()

guint32             nm_setting_wired_get_speed          (NMSettingWired *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingWired +

Returns :

the "speed" property of the setting

nm_setting_wired_get_duplex ()

const char *        nm_setting_wired_get_duplex         (NMSettingWired *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingWired +

Returns :

the "duplex" property of the setting

nm_setting_wired_get_auto_negotiate ()

gboolean            nm_setting_wired_get_auto_negotiate (NMSettingWired *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingWired +

Returns :

the "auto-negotiate" property of the setting

nm_setting_wired_get_mac_address ()

const GByteArray *  nm_setting_wired_get_mac_address    (NMSettingWired *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingWired +

Returns :

the "mac-address" property of the setting

nm_setting_wired_get_cloned_mac_address ()

const GByteArray *  nm_setting_wired_get_cloned_mac_address
                                                         (NMSettingWired *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingWired +

Returns :

the "cloned-mac-address" property of the setting
+
+
+
+

nm_setting_wired_get_mac_address_blacklist ()

+
const GSList *      nm_setting_wired_get_mac_address_blacklist
+                                                        (NMSettingWired *setting);
+
++ + + + + + + + + + +

setting :

the NMSettingWired +

Returns :

the "mac-address-blacklist" +property of the setting. [element-type GLib.ByteArray] +

nm_setting_wired_get_mtu ()

guint32             nm_setting_wired_get_mtu            (NMSettingWired *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingWired +

Returns :

the "mtu" property of the setting

@@ -351,8 +509,10 @@ conjunction with that device.

Returns :

-a GPtrArray of strings, each specifying one subchannel the -s390 device uses to communicate to the host. + +GPtrArray of strings, each specifying one +subchannel the s390 device uses to communicate to the host. [element-type utf8] +
@@ -434,13 +594,15 @@ such as during option iteration.

out_key :

-on return, the key name of the s390 specific option; this value is -owned by the setting and should not be modified +on return, the key name of the s390 specific option; this +value is owned by the setting and should not be modified. [out] +

out_value :

-on return, the value of the key of the s390 specific option; this -value is owned by the setting and should not be modified +on return, the value of the key of the s390 specific +option; this value is owned by the setting and should not be modified. [out] +

Returns :

@@ -539,6 +701,17 @@ of the device (i.e. MAC spoofing).
+

The "mac-address-blacklist" property

+
  "mac-address-blacklist"    GSList_gchararray_*   : Read / Write
+

+If specified, this connection will never apply to the ethernet device +whose permanent MAC address matches an address in the list. Each +MAC address is in the standard hex-digits-and-colons notation +(00:11:22:33:44:55). +

+
+
+

The "mtu" property

  "mtu"                      guint                 : Read / Write / Construct

diff --git a/docs/libnm-util/html/NMSettingWireless.html b/docs/libnm-util/html/NMSettingWireless.html index 21d51d29..c719a248 100644 --- a/docs/libnm-util/html/NMSettingWireless.html +++ b/docs/libnm-util/html/NMSettingWireless.html @@ -35,13 +35,16 @@

NMSettingWireless

-

NMSettingWireless

+

NMSettingWireless — Describes connection properties for 802.11 WiFi networks

Synopsis

-
#define             NM_SETTING_WIRELESS_SETTING_NAME
+
+#include <nm-setting-wireless.h>
+
+#define             NM_SETTING_WIRELESS_SETTING_NAME
 enum                NMSettingWirelessError;
 #define             NM_TYPE_SETTING_WIRELESS_ERROR
 #define             NM_SETTING_WIRELESS_ERROR
@@ -55,6 +58,7 @@ enum                NM_SETTING_WIRELESS_TX_POWER
 #define             NM_SETTING_WIRELESS_MAC_ADDRESS
 #define             NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS
+#define             NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST
 #define             NM_SETTING_WIRELESS_MTU
 #define             NM_SETTING_WIRELESS_SEEN_BSSIDS
 #define             NM_SETTING_WIRELESS_SEC
@@ -74,6 +78,8 @@ const GByteArray *  nm_setting_wireless_get_mac_address (NMSettingWireless *setting);
 const GByteArray *  nm_setting_wireless_get_cloned_mac_address
                                                         (NMSettingWireless *setting);
+const GSList *      nm_setting_wireless_get_mac_address_blacklist
+                                                        (NMSettingWireless *setting);
 guint32             nm_setting_wireless_get_mtu         (NMSettingWireless *setting);
 const char *        nm_setting_wireless_get_security    (NMSettingWireless *setting);
 gboolean            nm_setting_wireless_add_seen_bssid  (NMSettingWireless *setting,
@@ -111,6 +117,7 @@ const char *        channel"                  guint                 : Read / Write / Construct
   "cloned-mac-address"       GArray_guchar_*       : Read / Write
   "mac-address"              GArray_guchar_*       : Read / Write
+  "mac-address-blacklist"    GSList_gchararray_*   : Read / Write
   "mode"                     gchar*                : Read / Write
   "mtu"                      guint                 : Read / Write / Construct
   "rate"                     guint                 : Read / Write / Construct
@@ -123,6 +130,8 @@ const char *        
 

Description

+The NMSettingWireless object is a NMSetting subclass that describes properties +necessary for connection to 802.11 WiFi networks.


@@ -170,7 +209,15 @@ const char *

nm_setting_wireless_error_quark ()

GQuark              nm_setting_wireless_error_quark     (void);

+Registers an error quark for NMSettingWireless if necessary.

+
++ + + + +

Returns :

the error quark used for NMSettingWireless errors.

@@ -246,6 +293,14 @@ const char * +

NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST

+
#define NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST "mac-address-blacklist"
+
+

+

+
+
+

NM_SETTING_WIRELESS_MTU

#define NM_SETTING_WIRELESS_MTU         "mtu"
 
@@ -274,6 +329,7 @@ const char * #define NM_SETTING_WIRELESS_MODE_ADHOC "adhoc"

+Indicates Ad-Hoc mode where no access point is expected to be present.


@@ -282,6 +338,8 @@ const char *
#define NM_SETTING_WIRELESS_MODE_INFRA "infrastructure"

+Indicates infrastructure mode where an access point is expected to be present +for this connection.


@@ -319,85 +377,248 @@ const char *

nm_setting_wireless_new ()

NMSetting *         nm_setting_wireless_new             (void);

+Creates a new NMSettingWireless object with default values.

+
++ + + + +

Returns :

the new empty NMSettingWireless object. [transfer full] +

nm_setting_wireless_get_ssid ()

const GByteArray *  nm_setting_wireless_get_ssid        (NMSettingWireless *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingWireless +

Returns :

the "ssid" property of the setting

nm_setting_wireless_get_mode ()

const char *        nm_setting_wireless_get_mode        (NMSettingWireless *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingWireless +

Returns :

the "mode" property of the setting

nm_setting_wireless_get_band ()

const char *        nm_setting_wireless_get_band        (NMSettingWireless *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingWireless +

Returns :

the "band" property of the setting

nm_setting_wireless_get_channel ()

guint32             nm_setting_wireless_get_channel     (NMSettingWireless *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingWireless +

Returns :

the "channel" property of the setting

nm_setting_wireless_get_bssid ()

const GByteArray *  nm_setting_wireless_get_bssid       (NMSettingWireless *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingWireless +

Returns :

the "bssid" property of the setting

nm_setting_wireless_get_rate ()

guint32             nm_setting_wireless_get_rate        (NMSettingWireless *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingWireless +

Returns :

the "rate" property of the setting

nm_setting_wireless_get_tx_power ()

guint32             nm_setting_wireless_get_tx_power    (NMSettingWireless *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingWireless +

Returns :

the "tx-power" property of the setting

nm_setting_wireless_get_mac_address ()

const GByteArray *  nm_setting_wireless_get_mac_address (NMSettingWireless *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingWireless +

Returns :

the "mac-address" property of the setting

nm_setting_wireless_get_cloned_mac_address ()

const GByteArray *  nm_setting_wireless_get_cloned_mac_address
                                                         (NMSettingWireless *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingWireless +

Returns :

the "cloned-mac-address" property of the setting
+
+
+
+

nm_setting_wireless_get_mac_address_blacklist ()

+
const GSList *      nm_setting_wireless_get_mac_address_blacklist
+                                                        (NMSettingWireless *setting);
+
++ + + + + + + + + + +

setting :

the NMSettingWireless +

Returns :

the +"mac-address-blacklist" property of the setting. [element-type GLib.ByteArray] +

nm_setting_wireless_get_mtu ()

guint32             nm_setting_wireless_get_mtu         (NMSettingWireless *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingWireless +

Returns :

the "mtu" property of the setting

nm_setting_wireless_get_security ()

const char *        nm_setting_wireless_get_security    (NMSettingWireless *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingWireless +

Returns :

the "security" property of the setting

@@ -405,23 +626,74 @@ const char * gboolean nm_setting_wireless_add_seen_bssid (NMSettingWireless *setting, const char *bssid);

+Adds a new WiFi AP's BSSID to the previously seen BSSID list of the setting. +NetworkManager tracks previously seen BSSIDs internally so this function +no longer has much use.

+
++ + + + + + + + + + + + + + +

setting :

the NMSettingWireless +

bssid :

the new BSSID to add to the list

Returns :

+TRUE if bssid was already known, FALSE if not

nm_setting_wireless_get_num_seen_bssids ()

guint32             nm_setting_wireless_get_num_seen_bssids
                                                         (NMSettingWireless *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingWireless +

Returns :

the number of BSSIDs in the previously seen BSSID list

nm_setting_wireless_get_seen_bssid ()

const char *        nm_setting_wireless_get_seen_bssid  (NMSettingWireless *setting,
                                                          guint32 i);
-

-

+
++ + + + + + + + + + + + + + +

setting :

the NMSettingWireless +

i :

index of a BSSID in the previously seen BSSID list

Returns :

the BSSID at index i +

@@ -434,7 +706,52 @@ const char * NM80211ApSecurityFlags ap_rsn, NM80211Mode ap_mode);

-

+Given a
NMSettingWireless and an optional NMSettingWirelessSecurity, +determine if the configuration given by the settings is compatible with +the security of an access point using that access point's capability flags +and mode. Useful for clients that wish to filter a set of connections +against a set of access points and determine which connections are +compatible with which access points. +

+
++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

s_wireless :

a NMSettingWireless +

s_wireless_sec :

a NMSettingWirelessSecurity or NULL +

ap_flags :

the NM80211ApFlags of the given access point

ap_wpa :

the NM80211ApSecurityFlags of the given access point's WPA +capabilities

ap_rsn :

the NM80211ApSecurityFlags of the given access point's WPA2/RSN +capabilities

ap_mode :

the 802.11 mode of the AP, either Ad-Hoc or Infrastructure

Returns :

+TRUE if the given settings are compatible with the access point's +security flags and mode, FALSE if they are not.
@@ -496,6 +813,17 @@ of the device (i.e. MAC spoofing).

+

The "mac-address-blacklist" property

+
  "mac-address-blacklist"    GSList_gchararray_*   : Read / Write
+

+If specified, this connection will never apply to the WiFi device +whose permanent MAC address matches an address in the list. Each +MAC address is in the standard hex-digits-and-colons notation. +(00:11:22:33:44:55). +

+
+
+

The "mode" property

  "mode"                     gchar*                : Read / Write

@@ -544,11 +872,8 @@ the connection contains a valid 802-11-wireless-security setting.

A list of BSSIDs (each BSSID formatted as a MAC address like '00:11:22:33:44:55') that have been detected as part of the WiFI network. -The settings service will usually populate this property by periodically -asking NetworkManager what the device's current AP is while connected -to the network (or monitoring the device's 'active-ap' property) and -adding the current AP'sBSSID to this list. This list helps NetworkManager -find hidden APs by matching up scan results with the BSSIDs in this list. +NetworkManager internally tracks previously seen BSSIDs so this property +is no longer of much use.


diff --git a/docs/libnm-util/html/NMSettingWirelessSecurity.html b/docs/libnm-util/html/NMSettingWirelessSecurity.html index 7fdbc952..0d13105c 100644 --- a/docs/libnm-util/html/NMSettingWirelessSecurity.html +++ b/docs/libnm-util/html/NMSettingWirelessSecurity.html @@ -35,13 +35,17 @@

NMSettingWirelessSecurity

-

NMSettingWirelessSecurity

+

NMSettingWirelessSecurity — Describes connection properties for WiFi networks that +use WEP, LEAP, WPA or WPA2/RSN security

Synopsis

-
#define             NM_SETTING_WIRELESS_SECURITY_SETTING_NAME
+
+#include <nm-setting-wireless-security.h>
+
+#define             NM_SETTING_WIRELESS_SECURITY_SETTING_NAME
 enum                NMSettingWirelessSecurityError;
 #define             NM_TYPE_SETTING_WIRELESS_SECURITY_ERROR
 #define             NM_SETTING_WIRELESS_SECURITY_ERROR
@@ -175,6 +179,24 @@ const char *        
 

Description

+The NMSettingWirelessSecurity object is a NMSetting subclass that describes +properties necessary for connection to encrypted WiFi networks. +

+

+It's a good idea to read up on wpa_supplicant configuration before using this +setting extensively, since most of the options here correspond closely with +the relevant wpa_supplicant configuration options. To get a better overview +of how WiFi security works, you may want to get copies of the following books. +

+

+ 802.11 Wireless Networks: The Definitive Guide, Second Edition + Author: Matthew Gast + ISBN: 978-0596100520 +

+

+ Cisco Wireless LAN Security + Authors: Krishna Sankar, Sri Sundaralingam, Darrin Miller, and Andrew Balinsky + ISBN: 978-1587051548


@@ -239,7 +304,47 @@ const char * NMWepKeyType values specify how any WEP keys present in the setting +are intepreted. There are no standards governing how to hash the various WEP +key/passphrase formats into the actual WEP key. Unfortunately some WEP keys +can be interpreted in multiple ways, requring the setting to specify how to +interpret the any WEP keys. For example, the key "732f2d712e4a394a375d366931" +is both a valid Hexadecimal WEP key and a WEP passphrase. Further, many +ASCII keys are also valid WEP passphrases, but since passphrases and ASCII +keys are hashed differently to determine the actual WEP key the type must be +specified.

+
++ + + + + + + + + + + + + + + + + + +

NM_WEP_KEY_TYPE_UNKNOWN

unknown WEP key type +

NM_WEP_KEY_TYPE_KEY

indicates a hexadecimal or ASCII formatted WEP key. +Hex keys are either 10 or 26 hexadecimal characters (ie "5f782f2f5f" or +"732f2d712e4a394a375d366931"), while ASCII keys are either 5 or 13 ASCII +characters (ie "abcde" or "blahblah99$*1"). +

NM_WEP_KEY_TYPE_PASSPHRASE

indicates a WEP passphrase (ex "I bought a duck +on my way back from the market 235Q&^%^*%") instead of a hexadecimal or ASCII +key. Passphrases are between 8 and 64 characters inclusive and are hashed +the actual WEP key using the MD5 hash algorithm. +

NM_WEP_KEY_TYPE_LAST

placeholder value for bounds-checking +

@@ -413,23 +518,57 @@ const char *

nm_setting_wireless_security_new ()

NMSetting *         nm_setting_wireless_security_new    (void);

+Creates a new NMSettingWirelessSecurity object with default values.

+
++ + + + +

Returns :

the new empty NMSettingWirelessSecurity object. [transfer full] +

nm_setting_wireless_security_get_key_mgmt ()

const char *        nm_setting_wireless_security_get_key_mgmt
                                                         (NMSettingWirelessSecurity *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingWirelessSecurity +

Returns :

the "key-mgmt" property of the setting

nm_setting_wireless_security_get_num_protos ()

guint32             nm_setting_wireless_security_get_num_protos
                                                         (NMSettingWirelessSecurity *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingWirelessSecurity +

Returns :

the number of security protocols this connection allows when +connecting to secure WiFi networks

@@ -437,8 +576,25 @@ const char * const char * nm_setting_wireless_security_get_proto (NMSettingWirelessSecurity *setting, guint32 i); -

-

+
++ + + + + + + + + + + + + + +

setting :

the NMSettingWirelessSecurity +

i :

an index into the protocol list

Returns :

the protocol at index i +

@@ -447,7 +603,33 @@ const char * NMSettingWirelessSecurity *setting, const char *proto);

+Adds a WiFi security protocol (one of "wpa" or "rsn") to the allowed list; +only protocols in this list will be used when finding and connecting to +the WiFi network specified by this connection. For example, if the +protocol list contains only "wpa" but the access point for the SSID specified +by this connection only supports WPA2/RSN, the connection cannot be used +with the access point.

+
++ + + + + + + + + + + + + + +

setting :

the NMSettingWirelessSecurity +

proto :

the protocol to add, one of "wpa" or "rsn"

Returns :

+TRUE if the protocol was new and and was added to the allowed +protocol list, or FALSE if it was already in the list

@@ -456,7 +638,22 @@ const char * NMSettingWirelessSecurity *setting, guint32 i);

+Removes a protocol from the allowed protocol list.

+
++ + + + + + + + + + +

setting :

the NMSettingWirelessSecurity +

i :

index of the protocol to remove

@@ -464,15 +661,37 @@ const char * void nm_setting_wireless_security_clear_protos (NMSettingWirelessSecurity *setting);

+Removes all protocols from the allowed list. If there are no protocols +specified then all protocols are allowed.

+
++ + + + +

setting :

the NMSettingWirelessSecurity +

nm_setting_wireless_security_get_num_pairwise ()

guint32             nm_setting_wireless_security_get_num_pairwise
                                                         (NMSettingWirelessSecurity *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingWirelessSecurity +

Returns :

the number of pairwise encryption algorithms in the allowed list

@@ -481,7 +700,28 @@ const char * NMSettingWirelessSecurity *setting, guint32 i);

+Returns the allowed pairwise encryption algorithm from allowed algorithm +list.

+
++ + + + + + + + + + + + + + +

setting :

the NMSettingWirelessSecurity +

i :

index of an item in the allowed pairwise encryption algorithm list

Returns :

the pairwise encryption algorithm at index i +

@@ -490,7 +730,32 @@ const char * NMSettingWirelessSecurity *setting, const char *pairwise);

+Adds an encryption algorithm to the list of allowed pairwise encryption +algorithms. If the list is not empty, then only access points that support +one or more of the encryption algorithms in the list will be considered +compatible with this connection.

+
++ + + + + + + + + + + + + + +

setting :

the NMSettingWirelessSecurity +

pairwise :

the encryption algorithm to add, one of "wep40", "wep104", +"tkip", or "ccmp"

Returns :

+TRUE if the algorithm was added to the list, FALSE if it was +already in the list

@@ -499,7 +764,23 @@ const char * NMSettingWirelessSecurity *setting, guint32 i);

+Removes an encryption algorithm from the allowed pairwise encryption +algorithm list.

+
++ + + + + + + + + + +

setting :

the NMSettingWirelessSecurity +

i :

the index of an item in the allowed pairwise encryption algorithm list

@@ -507,15 +788,37 @@ const char * void nm_setting_wireless_security_clear_pairwise (NMSettingWirelessSecurity *setting);

+Removes all algorithms from the allowed list. If there are no algorithms +specified then all pairwise encryption algorithms are allowed.

+
++ + + + +

setting :

the NMSettingWirelessSecurity +

nm_setting_wireless_security_get_num_groups ()

guint32             nm_setting_wireless_security_get_num_groups
                                                         (NMSettingWirelessSecurity *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingWirelessSecurity +

Returns :

the number of groupwise encryption algorithms in the allowed list

@@ -524,7 +827,28 @@ const char * NMSettingWirelessSecurity *setting, guint32 i);

+Returns the allowed groupwise encryption algorithm from allowed algorithm +list.

+
++ + + + + + + + + + + + + + +

setting :

the NMSettingWirelessSecurity +

i :

index of an item in the allowed groupwise encryption algorithm list

Returns :

the groupwise encryption algorithm at index i +

@@ -533,7 +857,32 @@ const char * NMSettingWirelessSecurity *setting, const char *group);

+Adds an encryption algorithm to the list of allowed groupwise encryption +algorithms. If the list is not empty, then only access points that support +one or more of the encryption algorithms in the list will be considered +compatible with this connection.

+
++ + + + + + + + + + + + + + +

setting :

the NMSettingWirelessSecurity +

group :

the encryption algorithm to add, one of "wep40", "wep104", +"tkip", or "ccmp"

Returns :

+TRUE if the algorithm was added to the list, FALSE if it was +already in the list

@@ -542,7 +891,23 @@ const char * NMSettingWirelessSecurity *setting, guint32 i);

+Removes an encryption algorithm from the allowed groupwise encryption +algorithm list.

+
++ + + + + + + + + + +

setting :

the NMSettingWirelessSecurity +

i :

the index of an item in the allowed groupwise encryption algorithm list

@@ -550,15 +915,37 @@ const char * void nm_setting_wireless_security_clear_groups (NMSettingWirelessSecurity *setting);

+Removes all algorithms from the allowed list. If there are no algorithms +specified then all groupwise encryption algorithms are allowed.

+
++ + + + +

setting :

the NMSettingWirelessSecurity +

nm_setting_wireless_security_get_psk ()

const char *        nm_setting_wireless_security_get_psk
                                                         (NMSettingWirelessSecurity *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingWirelessSecurity +

Returns :

the "psk" property of the setting

@@ -587,16 +974,40 @@ const char *

nm_setting_wireless_security_get_leap_username ()

const char *        nm_setting_wireless_security_get_leap_username
                                                         (NMSettingWirelessSecurity *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingWirelessSecurity +

Returns :

the "leap-username" property of the setting

nm_setting_wireless_security_get_leap_password ()

const char *        nm_setting_wireless_security_get_leap_password
                                                         (NMSettingWirelessSecurity *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingWirelessSecurity +

Returns :

the "leap-password" property of the setting

@@ -626,8 +1037,24 @@ const char * const char * nm_setting_wireless_security_get_wep_key (NMSettingWirelessSecurity *setting, guint32 idx); -

-

+
++ + + + + + + + + + + + + + +

setting :

the NMSettingWirelessSecurity +

idx :

the WEP key index (0..3 inclusive)

Returns :

the WEP key at the given index

@@ -637,23 +1064,68 @@ const char * guint32 idx, const char *key);

+Sets a WEP key in the given index.

+
++ + + + + + + + + + + + + + +

setting :

the NMSettingWirelessSecurity +

idx :

the index of the key (0..3 inclusive)

key :

the WEP key as a string, in either hexadecimal, ASCII, or passphrase +form as determiend by the value of the "wep-key-type" +property.

nm_setting_wireless_security_get_wep_tx_keyidx ()

guint32             nm_setting_wireless_security_get_wep_tx_keyidx
                                                         (NMSettingWirelessSecurity *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingWirelessSecurity +

Returns :

the "wep-tx-keyidx" property of the setting

nm_setting_wireless_security_get_auth_alg ()

const char *        nm_setting_wireless_security_get_auth_alg
                                                         (NMSettingWirelessSecurity *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingWirelessSecurity +

Returns :

the "auth-alg" property of the setting

@@ -680,8 +1152,20 @@ const char *

nm_setting_wireless_security_get_wep_key_type ()

NMWepKeyType        nm_setting_wireless_security_get_wep_key_type
                                                         (NMSettingWirelessSecurity *setting);
-

-

+
++ + + + + + + + + + +

setting :

the NMSettingWirelessSecurity +

Returns :

the "wep-key-type" property of the setting
@@ -809,9 +1293,8 @@ Flags indicating how to handle

The "wep-key-type" property

  "wep-key-type"             guint                 : Read / Write / Construct

-Controls the interpretation of WEP keys. Allowed values are 1 (interpret -WEP keys as hexadecimal or ASCII keys) or 2 (interpret WEP keys as WEP -Passphrases). If set to 1 and the keys are hexadecimal, they must be +Controls the interpretation of WEP keys. Allowed values are those given +by NMWepKeyType. If set to 1 and the keys are hexadecimal, they must be either 10 or 26 characters in length. If set to 1 and the keys are ASCII keys, they must be either 5 or 13 characters in length. If set to 2, the passphrase is hashed using the de-facto MD5 method to derive the diff --git a/docs/libnm-util/html/api-index-full.html b/docs/libnm-util/html/api-index-full.html index 0ea92385..f47ea2c9 100644 --- a/docs/libnm-util/html/api-index-full.html +++ b/docs/libnm-util/html/api-index-full.html @@ -21,10 +21,20 @@ Next -C +8 +  |  + A +  |  + B +  |  + C +  |  + D  |  I  |  + M +  |  S  |  T @@ -39,7 +49,34 @@

API Index

-

C

+

8

+
+NM80211ApFlags, enum in NetworkManager +
+
+
+NM80211ApSecurityFlags, enum in NetworkManager +
+
+
+NM80211Mode, enum in NetworkManager +
+
+

A

+
+NMActiveConnectionState, enum in NetworkManager +
+
+

B

+
+NMBluetoothCapabilities, enum in NetworkManager +
+
+

C

+
+NM_CHECK_VERSION, macro in nm-version +
+
NMConnection, struct in NMConnection
@@ -232,6 +269,275 @@ nm_connection_verify, function in NMConnection
+

D

+
+NM_DBUS_IFACE_SETTINGS, macro in NetworkManager +
+
+
+NM_DBUS_IFACE_SETTINGS_CONNECTION, macro in NetworkManager +
+
+
+NM_DBUS_IFACE_SETTINGS_CONNECTION_SECRETS, macro in NetworkManager +
+
+
+NM_DBUS_INTERFACE, macro in NetworkManager +
+
+
+NM_DBUS_INTERFACE_ACCESS_POINT, macro in NetworkManager +
+
+
+NM_DBUS_INTERFACE_ACTIVE_CONNECTION, macro in NetworkManager +
+
+
+NM_DBUS_INTERFACE_AGENT_MANAGER, macro in NetworkManager +
+
+
+NM_DBUS_INTERFACE_DEVICE, macro in NetworkManager +
+
+
+NM_DBUS_INTERFACE_DEVICE_BLUETOOTH, macro in NetworkManager +
+
+
+NM_DBUS_INTERFACE_DEVICE_MODEM, macro in NetworkManager +
+
+
+NM_DBUS_INTERFACE_DEVICE_WIMAX, macro in NetworkManager +
+
+
+NM_DBUS_INTERFACE_DEVICE_WIRED, macro in NetworkManager +
+
+
+NM_DBUS_INTERFACE_DEVICE_WIRELESS, macro in NetworkManager +
+
+
+NM_DBUS_INTERFACE_DHCP4_CONFIG, macro in NetworkManager +
+
+
+NM_DBUS_INTERFACE_DHCP6_CONFIG, macro in NetworkManager +
+
+
+NM_DBUS_INTERFACE_IP4_CONFIG, macro in NetworkManager +
+
+
+NM_DBUS_INTERFACE_IP6_CONFIG, macro in NetworkManager +
+
+
+NM_DBUS_INTERFACE_SECRET_AGENT, macro in NetworkManager +
+
+
+NM_DBUS_INTERFACE_VPN, macro in NetworkManagerVPN +
+
+
+NM_DBUS_INTERFACE_VPN_CONNECTION, macro in NetworkManagerVPN +
+
+
+NM_DBUS_INTERFACE_WIMAX_NSP, macro in NetworkManager +
+
+
+NM_DBUS_INVALID_VPN_CONNECTION, macro in NetworkManagerVPN +
+
+
+NM_DBUS_NO_ACTIVE_VPN_CONNECTION, macro in NetworkManagerVPN +
+
+
+NM_DBUS_NO_VPN_CONNECTIONS, macro in NetworkManagerVPN +
+
+
+NM_DBUS_PATH, macro in NetworkManager +
+
+
+NM_DBUS_PATH_ACCESS_POINT, macro in NetworkManager +
+
+
+NM_DBUS_PATH_AGENT_MANAGER, macro in NetworkManager +
+
+
+NM_DBUS_PATH_SECRET_AGENT, macro in NetworkManager +
+
+
+NM_DBUS_PATH_SETTINGS, macro in NetworkManager +
+
+
+NM_DBUS_PATH_SETTINGS_CONNECTION, macro in NetworkManager +
+
+
+NM_DBUS_PATH_VPN, macro in NetworkManagerVPN +
+
+
+NM_DBUS_PATH_VPN_CONNECTION, macro in NetworkManagerVPN +
+
+
+NM_DBUS_PATH_WIMAX_NSP, macro in NetworkManager +
+
+
+NM_DBUS_SERVICE, macro in NetworkManager +
+
+
+DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UCHAR, macro in nm-dbus-glib-types +
+
+
+DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UINT, macro in nm-dbus-glib-types +
+
+
+DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS, macro in nm-dbus-glib-types +
+
+
+DBUS_TYPE_G_ARRAY_OF_IP6_ROUTE, macro in nm-dbus-glib-types +
+
+
+DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH, macro in nm-dbus-glib-types +
+
+
+DBUS_TYPE_G_ARRAY_OF_STRING, macro in nm-dbus-glib-types +
+
+
+DBUS_TYPE_G_ARRAY_OF_UINT, macro in nm-dbus-glib-types +
+
+
+DBUS_TYPE_G_IP6_ADDRESS, macro in nm-dbus-glib-types +
+
+
+DBUS_TYPE_G_IP6_ROUTE, macro in nm-dbus-glib-types +
+
+
+DBUS_TYPE_G_LIST_OF_STRING, macro in nm-dbus-glib-types +
+
+
+DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, macro in nm-dbus-glib-types +
+
+
+DBUS_TYPE_G_MAP_OF_STRING, macro in nm-dbus-glib-types +
+
+
+DBUS_TYPE_G_MAP_OF_VARIANT, macro in nm-dbus-glib-types +
+
+
+NM_DBUS_VPN_ALREADY_STARTED, macro in NetworkManagerVPN +
+
+
+NM_DBUS_VPN_ALREADY_STOPPED, macro in NetworkManagerVPN +
+
+
+NM_DBUS_VPN_BAD_ARGUMENTS, macro in NetworkManagerVPN +
+
+
+NM_DBUS_VPN_SIGNAL_CONNECT_FAILED, macro in NetworkManagerVPN +
+
+
+NM_DBUS_VPN_SIGNAL_IP4_CONFIG, macro in NetworkManagerVPN +
+
+
+NM_DBUS_VPN_SIGNAL_IP_CONFIG_BAD, macro in NetworkManagerVPN +
+
+
+NM_DBUS_VPN_SIGNAL_LAUNCH_FAILED, macro in NetworkManagerVPN +
+
+
+NM_DBUS_VPN_SIGNAL_LOGIN_BANNER, macro in NetworkManagerVPN +
+
+
+NM_DBUS_VPN_SIGNAL_LOGIN_FAILED, macro in NetworkManagerVPN +
+
+
+NM_DBUS_VPN_SIGNAL_STATE_CHANGE, macro in NetworkManagerVPN +
+
+
+NM_DBUS_VPN_SIGNAL_VPN_CONFIG_BAD, macro in NetworkManagerVPN +
+
+
+NM_DBUS_VPN_STARTING_IN_PROGRESS, macro in NetworkManagerVPN +
+
+
+NM_DBUS_VPN_STOPPING_IN_PROGRESS, macro in NetworkManagerVPN +
+
+
+NM_DBUS_VPN_WRONG_STATE, macro in NetworkManagerVPN +
+
+
+NMDeviceCapabilities, enum in NetworkManager +
+
+
+NMDeviceModemCapabilities, enum in NetworkManager +
+
+
+NMDeviceState, enum in NetworkManager +
+
+
+NMDeviceStateReason, enum in NetworkManager +
+
+
+NMDeviceType, enum in NetworkManager +
+
+
+NMDeviceWifiCapabilities, enum in NetworkManager +
+

I

NMIP4Address, typedef in NMSettingIP4Config @@ -457,6 +763,19 @@ nm_ip6_route_unref, function in NMSettingIP6Config
+

M

+
+NM_MAJOR_VERSION, macro in nm-version +
+
+
+NM_MICRO_VERSION, macro in nm-version +
+
+
+NM_MINOR_VERSION, macro in nm-version +
+

S

NMSetting, struct in NMSetting @@ -467,6 +786,10 @@
+NMSetting8021x:altsubject-matches, object property in NMSetting8021x +
+
+
NMSetting8021x:anonymous-identity, object property in NMSetting8021x
@@ -511,6 +834,10 @@
+NMSetting8021x:phase2-altsubject-matches, object property in NMSetting8021x +
+
+
NMSetting8021x:phase2-auth, object property in NMSetting8021x
@@ -543,6 +870,10 @@
+NMSetting8021x:phase2-subject-match, object property in NMSetting8021x +
+
+
NMSetting8021x:private-key, object property in NMSetting8021x
@@ -555,6 +886,10 @@
+NMSetting8021x:subject-match, object property in NMSetting8021x +
+
+
NMSetting8021x:system-ca-certs, object property in NMSetting8021x
@@ -1063,23 +1398,23 @@
-NMSettingWimax, struct in NMSettingWimax +NMSettingWimax, struct in NMSettingWimax
-NMSettingWimax:mac-address, object property in NMSettingWimax +NMSettingWimax:mac-address, object property in NMSettingWimax
-NMSettingWimax:network-name, object property in NMSettingWimax +NMSettingWimax:network-name, object property in NMSettingWimax
-NMSettingWimaxClass, struct in NMSettingWimax +NMSettingWimaxClass, struct in NMSettingWimax
-NMSettingWimaxError, enum in NMSettingWimax +NMSettingWimaxError, enum in NMSettingWimax
@@ -1103,6 +1438,10 @@ NMSettingWimaxError, enum in NMSettingWimax
+NMSettingWired:mac-address-blacklist, object property in NMSettingWired +
+
+
NMSettingWired:mtu, object property in NMSettingWired
@@ -1159,6 +1498,10 @@ NMSettingWimaxError, enum in NMSettingWimax
+NMSettingWireless:mac-address-blacklist, object property in NMSettingWireless +
+
+
NMSettingWireless:mode, object property in NMSettingWireless
@@ -1275,10 +1618,22 @@ NMSettingWimaxError, enum in NMSettingWimax
+nm_setting_802_1x_add_altsubject_match, function in NMSetting8021x +
+
+
nm_setting_802_1x_add_eap_method, function in NMSetting8021x
+nm_setting_802_1x_add_phase2_altsubject_match, function in NMSetting8021x +
+
+
+NM_SETTING_802_1X_ALTSUBJECT_MATCHES, macro in NMSetting8021x +
+
+
NM_SETTING_802_1X_ANONYMOUS_IDENTITY, macro in NMSetting8021x
@@ -1291,10 +1646,18 @@ NMSettingWimaxError, enum in NMSettingWimax
+nm_setting_802_1x_clear_altsubject_matches, function in NMSetting8021x +
+
+
nm_setting_802_1x_clear_eap_methods, function in NMSetting8021x
+nm_setting_802_1x_clear_phase2_altsubject_matches, function in NMSetting8021x +
+
+
NM_SETTING_802_1X_CLIENT_CERT, macro in NMSetting8021x
@@ -1311,6 +1674,10 @@ NMSettingWimaxError, enum in NMSettingWimax
+nm_setting_802_1x_get_altsubject_match, function in NMSetting8021x +
+
+
nm_setting_802_1x_get_anonymous_identity, function in NMSetting8021x
@@ -1351,10 +1718,18 @@ NMSettingWimaxError, enum in NMSettingWimax
+nm_setting_802_1x_get_num_altsubject_matches, function in NMSetting8021x +
+
+
nm_setting_802_1x_get_num_eap_methods, function in NMSetting8021x
+nm_setting_802_1x_get_num_phase2_altsubject_matches, function in NMSetting8021x +
+
+
nm_setting_802_1x_get_password, function in NMSetting8021x
@@ -1375,6 +1750,10 @@ NMSettingWimaxError, enum in NMSettingWimax
+nm_setting_802_1x_get_phase2_altsubject_match, function in NMSetting8021x +
+
+
nm_setting_802_1x_get_phase2_auth, function in NMSetting8021x
@@ -1435,6 +1814,10 @@ NMSettingWimaxError, enum in NMSettingWimax
+nm_setting_802_1x_get_phase2_subject_match, function in NMSetting8021x +
+
+
nm_setting_802_1x_get_pin, function in NMSetting8021x
@@ -1467,6 +1850,10 @@ NMSettingWimaxError, enum in NMSettingWimax
+nm_setting_802_1x_get_subject_match, function in NMSetting8021x +
+
+
nm_setting_802_1x_get_system_ca_certs, function in NMSetting8021x
@@ -1503,6 +1890,10 @@ NMSettingWimaxError, enum in NMSettingWimax
+NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES, macro in NMSetting8021x +
+
+
NM_SETTING_802_1X_PHASE2_AUTH, macro in NMSetting8021x
@@ -1535,6 +1926,10 @@ NMSettingWimaxError, enum in NMSettingWimax
+NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH, macro in NMSetting8021x +
+
+
NM_SETTING_802_1X_PIN, macro in NMSetting8021x
@@ -1555,10 +1950,18 @@ NMSettingWimaxError, enum in NMSettingWimax
+nm_setting_802_1x_remove_altsubject_match, function in NMSetting8021x +
+
+
nm_setting_802_1x_remove_eap_method, function in NMSetting8021x
+nm_setting_802_1x_remove_phase2_altsubject_match, function in NMSetting8021x +
+
+
NM_SETTING_802_1X_SETTING_NAME, macro in NMSetting8021x
@@ -1587,6 +1990,10 @@ NMSettingWimaxError, enum in NMSettingWimax
+NM_SETTING_802_1X_SUBJECT_MATCH, macro in NMSetting8021x +
+
+
NM_SETTING_802_1X_SYSTEM_CA_CERTS, macro in NMSetting8021x
@@ -2755,39 +3162,39 @@ NM_SETTING_SECRET_FLAGS_ALL, macro in nm-setting-private
-NM_SETTING_WIMAX_ERROR, macro in NMSettingWimax +NM_SETTING_WIMAX_ERROR, macro in NMSettingWimax
-nm_setting_wimax_error_quark, function in NMSettingWimax +nm_setting_wimax_error_quark, function in NMSettingWimax
-nm_setting_wimax_get_mac_address, function in NMSettingWimax +nm_setting_wimax_get_mac_address, function in NMSettingWimax
-nm_setting_wimax_get_network_name, function in NMSettingWimax +nm_setting_wimax_get_network_name, function in NMSettingWimax
-nm_setting_wimax_get_type, function in NMSettingWimax +nm_setting_wimax_get_type, function in NMSettingWimax
-NM_SETTING_WIMAX_MAC_ADDRESS, macro in NMSettingWimax +NM_SETTING_WIMAX_MAC_ADDRESS, macro in NMSettingWimax
-NM_SETTING_WIMAX_NETWORK_NAME, macro in NMSettingWimax +NM_SETTING_WIMAX_NETWORK_NAME, macro in NMSettingWimax
-nm_setting_wimax_new, function in NMSettingWimax +nm_setting_wimax_new, function in NMSettingWimax
-NM_SETTING_WIMAX_SETTING_NAME, macro in NMSettingWimax +NM_SETTING_WIMAX_SETTING_NAME, macro in NMSettingWimax
@@ -2831,6 +3238,10 @@ NM_SETTING_WIMAX_SETTING_NAME, macro in NMSettingWimax
+nm_setting_wired_get_mac_address_blacklist, function in NMSettingWired +
+
+
nm_setting_wired_get_mtu, function in NMSettingWired
@@ -2871,6 +3282,10 @@ NM_SETTING_WIMAX_SETTING_NAME, macro in NMSettingWimax
+NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST, macro in NMSettingWired +
+
+
NM_SETTING_WIRED_MTU, macro in NMSettingWired
@@ -2959,6 +3374,10 @@ NM_SETTING_WIMAX_SETTING_NAME, macro in NMSettingWimax
+nm_setting_wireless_get_mac_address_blacklist, function in NMSettingWireless +
+
+
nm_setting_wireless_get_mode, function in NMSettingWireless
@@ -2999,6 +3418,10 @@ NM_SETTING_WIMAX_SETTING_NAME, macro in NMSettingWimax
+NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST, macro in NMSettingWireless +
+
+
NM_SETTING_WIRELESS_MODE, macro in NMSettingWireless
@@ -3238,6 +3661,14 @@ NM_SETTING_WIMAX_SETTING_NAME, macro in NMSettingWimax NM_SETTING_WIRELESS_TX_POWER, macro in NMSettingWireless
+
+NMState, enum in NetworkManager +
+
+
+NM_STATE_CONNECTED, macro in NetworkManager +
+

T

NM_TYPE_CONNECTION_ERROR, macro in NMConnection @@ -3296,7 +3727,7 @@ NM_SETTING_WIMAX_SETTING_NAME, macro in NMSettingWimax
-NM_TYPE_SETTING_WIMAX_ERROR, macro in NMSettingWimax +NM_TYPE_SETTING_WIMAX_ERROR, macro in NMSettingWimax
@@ -3434,9 +3865,93 @@ NM_TYPE_SETTING_WIMAX_ERROR, macro in NMSettingWimax

V

+NMVPNConnectionState, enum in NetworkManagerVPN +
+
+
+NMVPNConnectionStateReason, enum in NetworkManagerVPN +
+
+
NMVPNIterFunc, user_function in NMSettingVPN
+
+NMVPNPluginFailure, enum in NetworkManagerVPN +
+
+
+NMVPNServiceState, enum in NetworkManagerVPN +
+
+
+NM_VPN_DBUS_PLUGIN_INTERFACE, macro in NetworkManagerVPN +
+
+
+NM_VPN_DBUS_PLUGIN_PATH, macro in NetworkManagerVPN +
+
+
+NM_VPN_PLUGIN_IP4_CONFIG_ADDRESS, macro in NetworkManagerVPN +
+
+
+NM_VPN_PLUGIN_IP4_CONFIG_BANNER, macro in NetworkManagerVPN +
+
+
+NM_VPN_PLUGIN_IP4_CONFIG_DNS, macro in NetworkManagerVPN +
+
+
+NM_VPN_PLUGIN_IP4_CONFIG_DOMAIN, macro in NetworkManagerVPN +
+
+
+NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY, macro in NetworkManagerVPN +
+
+
+NM_VPN_PLUGIN_IP4_CONFIG_GATEWAY, macro in NetworkManagerVPN +
+
+
+NM_VPN_PLUGIN_IP4_CONFIG_INT_GATEWAY, macro in NetworkManagerVPN +
+
+
+NM_VPN_PLUGIN_IP4_CONFIG_MSS, macro in NetworkManagerVPN +
+
+
+NM_VPN_PLUGIN_IP4_CONFIG_MTU, macro in NetworkManagerVPN +
+
+
+NM_VPN_PLUGIN_IP4_CONFIG_NBNS, macro in NetworkManagerVPN +
+
+
+NM_VPN_PLUGIN_IP4_CONFIG_NEVER_DEFAULT, macro in NetworkManagerVPN +
+
+
+NM_VPN_PLUGIN_IP4_CONFIG_PREFIX, macro in NetworkManagerVPN +
+
+
+NM_VPN_PLUGIN_IP4_CONFIG_PTP, macro in NetworkManagerVPN +
+
+
+NM_VPN_PLUGIN_IP4_CONFIG_ROUTES, macro in NetworkManagerVPN +
+
+
+NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV, macro in NetworkManagerVPN +
+

W

NMWepKeyType, enum in NMSettingWirelessSecurity diff --git a/docs/libnm-util/html/ch01.html b/docs/libnm-util/html/ch01.html index 52f73af9..d97a8939 100644 --- a/docs/libnm-util/html/ch01.html +++ b/docs/libnm-util/html/ch01.html @@ -21,7 +21,7 @@

-libnm-util API Reference

+libnm-util API Reference
NMConnection — Describes a connection to specific network or provider @@ -33,25 +33,30 @@ NMSettingConnection — Describes general connection properties
-NMSettingWired +NMSettingWired — Describes connection properties for Ethernet-based networks
-NMSettingWireless +NMSettingWireless — Describes connection properties for 802.11 WiFi networks
-NMSettingWirelessSecurity +NMSettingWirelessSecurity — Describes connection properties for WiFi networks that +use WEP, LEAP, WPA or WPA2/RSN security
-NMSettingBluetooth +NMSettingBluetooth — Describes Bluetooth connection properties
-NMSettingSerial +NMSettingSerial — Describes connection properties for devices that use +serial communications
NMSettingCdma — Describes CDMA-based mobile broadband properties
-NMSettingGsm +NMSettingGsm — Describes GSM/3GPP-based mobile broadband properties +
+
+NMSettingWimax — Describes 802.16e Mobile WiMAX connection properties
NMSettingOlpcMesh @@ -60,19 +65,20 @@ NMSetting8021x — Describes 802.1x-authenticated connection properties
-NMSettingIP4Config +NMSettingIP4Config — Describes IPv4 addressing, routing, and name service properties
-NMSettingIP6Config +NMSettingIP6Config — Describes IPv6 addressing, routing, and name service properties
-NMSettingPPP +NMSettingPPP — Describes connection properties for devices/networks +that require PPP to deliver IP capability
-NMSettingPPPOE +NMSettingPPPOE — Describes PPPoE connection properties
-NMSettingVPN +NMSettingVPN — Describes connection properties for Virtual Private Networks
nm-utils — Utility functions diff --git a/docs/libnm-util/html/index.html b/docs/libnm-util/html/index.html index feb9a71b..51f90c6a 100644 --- a/docs/libnm-util/html/index.html +++ b/docs/libnm-util/html/index.html @@ -35,25 +35,30 @@ NMSettingConnection — Describes general connection properties
-NMSettingWired +NMSettingWired — Describes connection properties for Ethernet-based networks
-NMSettingWireless +NMSettingWireless — Describes connection properties for 802.11 WiFi networks
-NMSettingWirelessSecurity +NMSettingWirelessSecurity — Describes connection properties for WiFi networks that +use WEP, LEAP, WPA or WPA2/RSN security
-NMSettingBluetooth +NMSettingBluetooth — Describes Bluetooth connection properties
-NMSettingSerial +NMSettingSerial — Describes connection properties for devices that use +serial communications
NMSettingCdma — Describes CDMA-based mobile broadband properties
-NMSettingGsm +NMSettingGsm — Describes GSM/3GPP-based mobile broadband properties +
+
+NMSettingWimax — Describes 802.16e Mobile WiMAX connection properties
NMSettingOlpcMesh @@ -62,19 +67,20 @@ NMSetting8021x — Describes 802.1x-authenticated connection properties
-NMSettingIP4Config +NMSettingIP4Config — Describes IPv4 addressing, routing, and name service properties
-NMSettingIP6Config +NMSettingIP6Config — Describes IPv6 addressing, routing, and name service properties
-NMSettingPPP +NMSettingPPP — Describes connection properties for devices/networks +that require PPP to deliver IP capability
-NMSettingPPPOE +NMSettingPPPOE — Describes PPPoE connection properties
-NMSettingVPN +NMSettingVPN — Describes connection properties for Virtual Private Networks
nm-utils — Utility functions diff --git a/docs/libnm-util/html/index.sgml b/docs/libnm-util/html/index.sgml index 4140e896..eda2a542 100644 --- a/docs/libnm-util/html/index.sgml +++ b/docs/libnm-util/html/index.sgml @@ -11,6 +11,7 @@ + @@ -86,6 +87,13 @@ + + + + + + + @@ -99,11 +107,6 @@ - - - - - @@ -174,6 +177,9 @@ + + + @@ -183,6 +189,7 @@ + @@ -197,6 +204,7 @@ + @@ -210,6 +218,7 @@ + @@ -225,6 +234,11 @@ + + + + + @@ -237,6 +251,7 @@ + @@ -255,6 +270,7 @@ + @@ -267,6 +283,7 @@ + @@ -283,10 +300,21 @@ + + + + + + + + + + + @@ -362,6 +390,10 @@ + + + + @@ -387,6 +419,10 @@ + + + + @@ -419,6 +455,10 @@ + + + + @@ -448,6 +488,10 @@ + + + + @@ -463,7 +507,27 @@ + + + + + + + + + + + + + + + + + + + + @@ -491,6 +555,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -535,6 +625,9 @@ + + + @@ -543,6 +636,8 @@ + + @@ -551,6 +646,8 @@ + + @@ -581,6 +678,12 @@ + + + + + + @@ -594,6 +697,12 @@ + + + + + + @@ -617,6 +726,7 @@ + @@ -628,6 +738,7 @@ + @@ -636,9 +747,11 @@ + + @@ -651,6 +764,10 @@ + + + + @@ -755,6 +872,10 @@ + + + + @@ -849,6 +970,10 @@ + + + + @@ -920,6 +1045,10 @@ + + + + @@ -949,6 +1078,9 @@ + + + @@ -989,6 +1121,15 @@ + + + + + + + + + diff --git a/docs/libnm-util/html/libnm-util-nm-utils.html b/docs/libnm-util/html/libnm-util-nm-utils.html index f2650339..00c11126 100644 --- a/docs/libnm-util/html/libnm-util-nm-utils.html +++ b/docs/libnm-util/html/libnm-util-nm-utils.html @@ -55,12 +55,12 @@ const char * GDestroyNotify elem_destroy_fn); enum NMUtilsSecurityType; gboolean nm_utils_security_valid (NMUtilsSecurityType type, - guint32 wifi_caps, + NMDeviceWifiCapabilities wifi_caps, gboolean have_ap, gboolean adhoc, - guint32 ap_flags, - guint32 ap_wpa, - guint32 ap_rsn); + NM80211ApFlags ap_flags, + NM80211ApSecurityFlags ap_wpa, + NM80211ApSecurityFlags ap_rsn); GSList * nm_utils_ip4_addresses_from_gvalue (const GValue *value); void nm_utils_ip4_addresses_to_gvalue (GSList *list, GValue *value); @@ -118,7 +118,7 @@ libnm-util can also be done. This function can be called more than once.

error :

-location to store error, or NULL +location to store error, or NULL @@ -346,18 +346,73 @@ Utility function to free a nm_utils_security_valid() for checking whether a given access +point is compatible with a network device.

+
++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

NMU_SEC_INVALID

unknown or invalid security, placeholder and not used +

NMU_SEC_NONE

unencrypted and open +

NMU_SEC_STATIC_WEP

static WEP keys are used for encryption +

NMU_SEC_LEAP

Cisco LEAP is used for authentication and for generating the +dynamic WEP keys automatically +

NMU_SEC_DYNAMIC_WEP

standard 802.1x is used for authentication and +generating the dynamic WEP keys automatically +

NMU_SEC_WPA_PSK

WPA1 is used with Pre-Shared Keys (PSK) +

NMU_SEC_WPA_ENTERPRISE

WPA1 is used with 802.1x authentication +

NMU_SEC_WPA2_PSK

WPA2/RSN is used with Pre-Shared Keys (PSK) +

NMU_SEC_WPA2_ENTERPRISE

WPA2 is used with 802.1x authentication +

nm_utils_security_valid ()

gboolean            nm_utils_security_valid             (NMUtilsSecurityType type,
-                                                         guint32 wifi_caps,
+                                                         NMDeviceWifiCapabilities wifi_caps,
                                                          gboolean have_ap,
                                                          gboolean adhoc,
-                                                         guint32 ap_flags,
-                                                         guint32 ap_wpa,
-                                                         guint32 ap_rsn);
+ NM80211ApFlags ap_flags, + NM80211ApSecurityFlags ap_wpa, + NM80211ApSecurityFlags ap_rsn);

Given a set of device capabilities, and a desired security type to check against, determines whether the combination of device, desired security @@ -369,7 +424,7 @@ type, and AP capabilities intersect.

type :

the security type to check AP flags and device capabilties against, -e.g. NMU_SEC_STATIC_WEP +e.g. NMU_SEC_STATIC_WEP diff --git a/docs/libnm-util/html/libnm-util.devhelp b/docs/libnm-util/html/libnm-util.devhelp index b8b98e40..21ba39f2 100644 --- a/docs/libnm-util/html/libnm-util.devhelp +++ b/docs/libnm-util/html/libnm-util.devhelp @@ -13,6 +13,7 @@ + @@ -86,6 +87,7 @@ + @@ -96,7 +98,6 @@ - @@ -153,6 +154,7 @@ + @@ -167,6 +169,7 @@ + @@ -179,6 +182,7 @@ + @@ -199,6 +203,7 @@ + @@ -217,6 +222,7 @@ + @@ -228,6 +234,7 @@ + @@ -412,6 +419,21 @@ + + + + + + + + + + + + + + + @@ -442,6 +464,8 @@ + + @@ -450,6 +474,8 @@ + + @@ -480,6 +506,12 @@ + + + + + + @@ -493,6 +525,12 @@ + + + + + + @@ -515,6 +553,7 @@ + @@ -526,6 +565,7 @@ + @@ -534,9 +574,11 @@ + + diff --git a/docs/libnm-util/html/libnm-util.devhelp2 b/docs/libnm-util/html/libnm-util.devhelp2 index 0104b4d0..a6544ddd 100644 --- a/docs/libnm-util/html/libnm-util.devhelp2 +++ b/docs/libnm-util/html/libnm-util.devhelp2 @@ -13,6 +13,7 @@ + @@ -86,6 +87,7 @@ + @@ -96,7 +98,6 @@ - @@ -153,6 +154,7 @@ + @@ -167,6 +169,7 @@ + @@ -179,6 +182,7 @@ + @@ -199,6 +203,7 @@ + @@ -217,6 +222,7 @@ + @@ -228,6 +234,7 @@ + @@ -412,6 +419,21 @@ + + + + + + + + + + + + + + + @@ -442,6 +464,8 @@ + + @@ -450,6 +474,8 @@ + + @@ -480,6 +506,12 @@ + + + + + + @@ -493,6 +525,12 @@ + + + + + + @@ -515,6 +553,7 @@ + @@ -526,6 +565,7 @@ + @@ -534,9 +574,11 @@ + + @@ -863,6 +905,7 @@ + @@ -871,13 +914,15 @@ - - - + + + + + @@ -885,6 +930,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -892,5 +995,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/libnm-util/html/object-tree.html b/docs/libnm-util/html/object-tree.html index a69c8dbb..a67b1874 100644 --- a/docs/libnm-util/html/object-tree.html +++ b/docs/libnm-util/html/object-tree.html @@ -38,7 +38,7 @@ NMSettingPPPOE NMSettingSerial NMSettingVPN - NMSettingWimax + NMSettingWimax NMSettingWired NMSettingWireless NMSettingWirelessSecurity @@ -57,7 +57,7 @@ NMSettingPPPOEError NMSettingSerialError NMSettingVpnError - NMSettingWimaxError + NMSettingWimaxError NMSettingWiredError NMSettingWirelessError NMSettingWirelessSecurityError diff --git a/docs/libnm-util/libnm-util-docs.sgml b/docs/libnm-util/libnm-util-docs.sgml index c80565ab..f717db37 100644 --- a/docs/libnm-util/libnm-util-docs.sgml +++ b/docs/libnm-util/libnm-util-docs.sgml @@ -26,6 +26,7 @@ + diff --git a/docs/libnm-util/libnm-util-sections.txt b/docs/libnm-util/libnm-util-sections.txt index 1df4b49b..06bd0d32 100644 --- a/docs/libnm-util/libnm-util-sections.txt +++ b/docs/libnm-util/libnm-util-sections.txt @@ -59,6 +59,8 @@ NM_SETTING_802_1X_IDENTITY NM_SETTING_802_1X_ANONYMOUS_IDENTITY NM_SETTING_802_1X_CA_CERT NM_SETTING_802_1X_CA_PATH +NM_SETTING_802_1X_SUBJECT_MATCH +NM_SETTING_802_1X_ALTSUBJECT_MATCHES NM_SETTING_802_1X_CLIENT_CERT NM_SETTING_802_1X_PHASE1_PEAPVER NM_SETTING_802_1X_PHASE1_PEAPLABEL @@ -67,6 +69,8 @@ NM_SETTING_802_1X_PHASE2_AUTH NM_SETTING_802_1X_PHASE2_AUTHEAP NM_SETTING_802_1X_PHASE2_CA_CERT NM_SETTING_802_1X_PHASE2_CA_PATH +NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH +NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES NM_SETTING_802_1X_PHASE2_CLIENT_CERT NM_SETTING_802_1X_PASSWORD NM_SETTING_802_1X_PASSWORD_FLAGS @@ -97,6 +101,12 @@ nm_setting_802_1x_get_ca_cert_scheme nm_setting_802_1x_get_ca_cert_blob nm_setting_802_1x_get_ca_cert_path nm_setting_802_1x_set_ca_cert +nm_setting_802_1x_get_subject_match +nm_setting_802_1x_get_num_altsubject_matches +nm_setting_802_1x_get_altsubject_match +nm_setting_802_1x_add_altsubject_match +nm_setting_802_1x_remove_altsubject_match +nm_setting_802_1x_clear_altsubject_matches nm_setting_802_1x_get_client_cert_scheme nm_setting_802_1x_get_client_cert_blob nm_setting_802_1x_get_client_cert_path @@ -110,6 +120,12 @@ nm_setting_802_1x_get_phase2_ca_cert_scheme nm_setting_802_1x_get_phase2_ca_cert_blob nm_setting_802_1x_get_phase2_ca_cert_path nm_setting_802_1x_set_phase2_ca_cert +nm_setting_802_1x_get_phase2_subject_match +nm_setting_802_1x_get_num_phase2_altsubject_matches +nm_setting_802_1x_get_phase2_altsubject_match +nm_setting_802_1x_add_phase2_altsubject_match +nm_setting_802_1x_remove_phase2_altsubject_match +nm_setting_802_1x_clear_phase2_altsubject_matches nm_setting_802_1x_get_phase2_client_cert_scheme nm_setting_802_1x_get_phase2_client_cert_blob nm_setting_802_1x_get_phase2_client_cert_path @@ -552,6 +568,7 @@ NM_SETTING_WIRED_DUPLEX NM_SETTING_WIRED_AUTO_NEGOTIATE NM_SETTING_WIRED_MAC_ADDRESS NM_SETTING_WIRED_CLONED_MAC_ADDRESS +NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST NM_SETTING_WIRED_MTU NM_SETTING_WIRED_S390_SUBCHANNELS NM_SETTING_WIRED_S390_NETTYPE @@ -566,6 +583,7 @@ nm_setting_wired_get_duplex nm_setting_wired_get_auto_negotiate nm_setting_wired_get_mac_address nm_setting_wired_get_cloned_mac_address +nm_setting_wired_get_mac_address_blacklist nm_setting_wired_get_mtu nm_setting_wired_get_s390_subchannels nm_setting_wired_get_s390_nettype @@ -637,6 +655,7 @@ NM_SETTING_PARAM_SECRET NM_SETTING_PARAM_FUZZY_IGNORE NM_SETTING_NAME NMSettingSecretFlags +NMSettingCompareFlags NMSetting NMSettingClass NMSettingValueIterFn @@ -647,7 +666,6 @@ nm_setting_new_from_hash nm_setting_duplicate nm_setting_get_name nm_setting_verify -NMSettingCompareFlags nm_setting_compare NMSettingDiffResult nm_setting_diff @@ -870,6 +888,7 @@ NM_SETTING_WIRELESS_RATE NM_SETTING_WIRELESS_TX_POWER NM_SETTING_WIRELESS_MAC_ADDRESS NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS +NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST NM_SETTING_WIRELESS_MTU NM_SETTING_WIRELESS_SEEN_BSSIDS NM_SETTING_WIRELESS_SEC @@ -888,6 +907,7 @@ nm_setting_wireless_get_rate nm_setting_wireless_get_tx_power nm_setting_wireless_get_mac_address nm_setting_wireless_get_cloned_mac_address +nm_setting_wireless_get_mac_address_blacklist nm_setting_wireless_get_mtu nm_setting_wireless_get_security nm_setting_wireless_add_seen_bssid diff --git a/examples/C/qt/Makefile.am b/examples/C/qt/Makefile.am index e1e17b38..5f0c6a1e 100644 --- a/examples/C/qt/Makefile.am +++ b/examples/C/qt/Makefile.am @@ -6,7 +6,8 @@ AM_CPPFLAGS = \ noinst_PROGRAMS = \ add-connection-wired \ - list-connections + list-connections \ + change-ipv4-addresses add_connection_wired_SOURCES = add-connection-wired.cpp add_connection_wired_LDADD = \ @@ -18,7 +19,13 @@ list_connections_LDADD = \ $(DBUS_LIBS) \ $(QT_LIBS) +change_ipv4_addresses_SOURCES = change-ipv4-addresses.cpp +change_ipv4_addresses_LDADD = \ + $(DBUS_LIBS) \ + $(QT_LIBS) + EXTRA_DIST = \ add-connection-wired.cpp \ - list-connections.cpp + list-connections.cpp \ + change-ipv4-addresses.cpp diff --git a/examples/C/qt/Makefile.in b/examples/C/qt/Makefile.in index c70f4855..a07fe015 100644 --- a/examples/C/qt/Makefile.in +++ b/examples/C/qt/Makefile.in @@ -35,7 +35,7 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = add-connection-wired$(EXEEXT) \ - list-connections$(EXEEXT) + list-connections$(EXEEXT) change-ipv4-addresses$(EXEEXT) subdir = examples/C/qt DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -65,6 +65,10 @@ add_connection_wired_DEPENDENCIES = $(am__DEPENDENCIES_1) \ AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent +am_change_ipv4_addresses_OBJECTS = change-ipv4-addresses.$(OBJEXT) +change_ipv4_addresses_OBJECTS = $(am_change_ipv4_addresses_OBJECTS) +change_ipv4_addresses_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) am_list_connections_OBJECTS = list-connections.$(OBJEXT) list_connections_OBJECTS = $(am_list_connections_OBJECTS) list_connections_DEPENDENCIES = $(am__DEPENDENCIES_1) \ @@ -95,9 +99,10 @@ am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; -SOURCES = $(add_connection_wired_SOURCES) $(list_connections_SOURCES) +SOURCES = $(add_connection_wired_SOURCES) \ + $(change_ipv4_addresses_SOURCES) $(list_connections_SOURCES) DIST_SOURCES = $(add_connection_wired_SOURCES) \ - $(list_connections_SOURCES) + $(change_ipv4_addresses_SOURCES) $(list_connections_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) @@ -322,9 +327,15 @@ list_connections_LDADD = \ $(DBUS_LIBS) \ $(QT_LIBS) +change_ipv4_addresses_SOURCES = change-ipv4-addresses.cpp +change_ipv4_addresses_LDADD = \ + $(DBUS_LIBS) \ + $(QT_LIBS) + EXTRA_DIST = \ add-connection-wired.cpp \ - list-connections.cpp + list-connections.cpp \ + change-ipv4-addresses.cpp all: all-am @@ -372,6 +383,9 @@ clean-noinstPROGRAMS: add-connection-wired$(EXEEXT): $(add_connection_wired_OBJECTS) $(add_connection_wired_DEPENDENCIES) @rm -f add-connection-wired$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(add_connection_wired_OBJECTS) $(add_connection_wired_LDADD) $(LIBS) +change-ipv4-addresses$(EXEEXT): $(change_ipv4_addresses_OBJECTS) $(change_ipv4_addresses_DEPENDENCIES) + @rm -f change-ipv4-addresses$(EXEEXT) + $(AM_V_CXXLD)$(CXXLINK) $(change_ipv4_addresses_OBJECTS) $(change_ipv4_addresses_LDADD) $(LIBS) list-connections$(EXEEXT): $(list_connections_OBJECTS) $(list_connections_DEPENDENCIES) @rm -f list-connections$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(list_connections_OBJECTS) $(list_connections_LDADD) $(LIBS) @@ -383,6 +397,7 @@ distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/add-connection-wired.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/change-ipv4-addresses.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list-connections.Po@am__quote@ .cpp.o: diff --git a/examples/C/qt/change-ipv4-addresses.cpp b/examples/C/qt/change-ipv4-addresses.cpp new file mode 100644 index 00000000..ca340f7f --- /dev/null +++ b/examples/C/qt/change-ipv4-addresses.cpp @@ -0,0 +1,146 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ +/* + * 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 2011 Red Hat, Inc. + */ + +/* + * This example shows how to set manual IPv4 addresses to a connection. + * It uses Qt and D-Bus libraries to do that. + * + * Standalone compilation: + * g++ -Wall `pkg-config --libs --cflags NetworkManager QtCore QtDBus QtNetwork` change-ipv4-addresses.cpp -o change-ipv4-addresses + * + * You don't need to have NetworkManager devel package installed; you can just + * grab NetworkManager.h and put it in the path + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "arpa/inet.h" + +#include "NetworkManager.h" + +typedef QMap > Connection; +Q_DECLARE_METATYPE(Connection) +Q_DECLARE_METATYPE(QList); +Q_DECLARE_METATYPE(QList >); + +const QString NM_SETTING_CONNECTION_SETTING_NAME = "connection"; +const QString NM_SETTING_CONNECTION_ID = "id"; +const QString NM_SETTING_CONNECTION_UUID = "uuid"; + + +const QString getConnection(const QString& connectionUuid, Connection *found_connection) +{ + Connection settings; + QDBusInterface *ifaceForSettings; + + // Create a D-Bus proxy; NM_DBUS_* defined in NetworkManager.h + QDBusInterface interface( + NM_DBUS_SERVICE, + NM_DBUS_PATH_SETTINGS, + NM_DBUS_IFACE_SETTINGS, + QDBusConnection::systemBus()); + + // Get connection list and find the connection with 'connectionUuid' + QDBusReply > result1 = interface.call("ListConnections"); + + foreach (const QDBusObjectPath& connection, result1.value()) { + ifaceForSettings = new QDBusInterface( + NM_DBUS_SERVICE, + connection.path(), + NM_DBUS_IFACE_SETTINGS_CONNECTION, + QDBusConnection::systemBus()); + QDBusReply result2 = ifaceForSettings->call("GetSettings"); + delete ifaceForSettings; + + settings = result2.value(); + QVariantMap connectionSettings = settings.value(NM_SETTING_CONNECTION_SETTING_NAME); + QString uuid = connectionSettings.value(NM_SETTING_CONNECTION_UUID).toString(); + + if (uuid == connectionUuid) { + // Connection found; set the settings to found_connection + // connection object path + *found_connection = settings; + return connection.path(); + } + } + + return QString(); +} + +void changeConnection(const QString& uuid) +{ + // Register types with D-Bus + qDBusRegisterMetaType(); + qDBusRegisterMetaType >(); + qDBusRegisterMetaType > >(); + + Connection connection; + QString conPath; + + // Find connection by provided UUID + conPath = getConnection(uuid, &connection); + + if (!conPath.isEmpty()) { + QList > addresses; + QList addr1, addr2; + + // Add some addresses + addr1 << htonl(QHostAddress("192.168.100.4").toIPv4Address()) << 24 << htonl(QHostAddress("192.168.100.1").toIPv4Address()); + addr2 << htonl(QHostAddress("10.0.1.222").toIPv4Address()) << 8 << htonl(QHostAddress("10.0.1.254").toIPv4Address()); + addresses << addr1 << addr2; + + // Set method to "Manual" and put addresses to the connection map + connection["ipv4"]["method"] = "manual"; + connection["ipv4"]["addresses"] = QVariant::fromValue(addresses); + + QDBusInterface interface( + NM_DBUS_SERVICE, + conPath, + NM_DBUS_IFACE_SETTINGS_CONNECTION, + QDBusConnection::systemBus()); + + // Call Update() D-Bus method to update connection + QDBusReply result = interface.call("Update", QVariant::fromValue(connection)); + if (result.isValid()) { + qDebug() << QString("Connection successfully updated (path %1)").arg(conPath); + } else { + qDebug() << QString("Error: could not update connection: %1 %2").arg(result.error().name()).arg(result.error().message()); + } + } else { + qDebug() << QString("Error: connection with UUID '%1' not found").arg(uuid); + } +} + +int main(int argc, char *argv[]) +{ + if (argc != 2) { + qDebug() << QString("Usage: %1 ").arg(argv[0]); + return -1; + } + + changeConnection(argv[1]); +} diff --git a/examples/python/Makefile.am b/examples/python/Makefile.am index 5650ed83..7fa376ef 100644 --- a/examples/python/Makefile.am +++ b/examples/python/Makefile.am @@ -5,6 +5,7 @@ EXTRA_DIST = \ vpn.py \ list-connections.py \ show-bssids.py \ - disconnect-device.py + disconnect-device.py \ + get-active-connections.py diff --git a/examples/python/Makefile.in b/examples/python/Makefile.in index 9aac5bbf..983f843d 100644 --- a/examples/python/Makefile.in +++ b/examples/python/Makefile.in @@ -460,7 +460,8 @@ uninstall-am: vpn.py \ list-connections.py \ show-bssids.py \ - disconnect-device.py + disconnect-device.py \ + get-active-connections.py # 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. diff --git a/include/NetworkManager.h b/include/NetworkManager.h index 17c3a116..3522dd25 100644 --- a/include/NetworkManager.h +++ b/include/NetworkManager.h @@ -74,7 +74,7 @@ * @NM_STATE_CONNECTED_GLOBAL: there is global IPv4 and/or IPv6 Internet connectivity * * #NMState values indicate the current overall networking state. - */ + **/ typedef enum { NM_STATE_UNKNOWN = 0, NM_STATE_ASLEEP = 10, @@ -103,7 +103,7 @@ typedef enum { * GSM/UMTS, or LTE network access protocols * * #NMState values indicate the current overall networking state. - */ + **/ typedef enum { NM_DEVICE_TYPE_UNKNOWN = 0, NM_DEVICE_TYPE_ETHERNET = 1, @@ -116,16 +116,36 @@ typedef enum { NM_DEVICE_TYPE_MODEM = 8, } NMDeviceType; -/* General device capability flags */ +/** + * NMDeviceCapabilities: + * @NM_DEVICE_CAP_NONE: device has no special capabilities + * @NM_DEVICE_CAP_NM_SUPPORTED: NetworkManager supports this device + * @NM_DEVICE_CAP_CARRIER_DETECT: this device can indicate carrier status + * + * General device capability flags. + **/ typedef enum { + /*< flags >*/ NM_DEVICE_CAP_NONE = 0x00000000, NM_DEVICE_CAP_NM_SUPPORTED = 0x00000001, NM_DEVICE_CAP_CARRIER_DETECT = 0x00000002 } NMDeviceCapabilities; -/* 802.11 Wifi device capabilities */ +/** + * NMDeviceWifiCapabilities: + * @NM_WIFI_DEVICE_CAP_NONE: device has no encryption/authentication capabilities + * @NM_WIFI_DEVICE_CAP_CIPHER_WEP40: device supports 40/64-bit WEP encryption + * @NM_WIFI_DEVICE_CAP_CIPHER_WEP104: device supports 104/128-bit WEP encryption + * @NM_WIFI_DEVICE_CAP_CIPHER_TKIP: device supports TKIP encryption + * @NM_WIFI_DEVICE_CAP_CIPHER_CCMP: device supports AES/CCMP encryption + * @NM_WIFI_DEVICE_CAP_WPA: device supports WPA1 authentication + * @NM_WIFI_DEVICE_CAP_RSN: device supports WPA2/RSN authentication + * + * 802.11 specific device encryption and authentication capabilities. + **/ typedef enum { + /*< flags >*/ NM_WIFI_DEVICE_CAP_NONE = 0x00000000, NM_WIFI_DEVICE_CAP_CIPHER_WEP40 = 0x00000001, NM_WIFI_DEVICE_CAP_CIPHER_WEP104 = 0x00000002, @@ -136,20 +156,45 @@ typedef enum { } NMDeviceWifiCapabilities; -/* 802.11 Access Point flags */ +/** + * NM80211ApFlags: + * @NM_802_11_AP_FLAGS_NONE: access point has no special capabilities + * @NM_802_11_AP_FLAGS_PRIVACY: access point requires authentication and + * encryption (usually means WEP) + * + * 802.11 access point flags. + **/ typedef enum { /*< flags >*/ NM_802_11_AP_FLAGS_NONE = 0x00000000, NM_802_11_AP_FLAGS_PRIVACY = 0x00000001 } NM80211ApFlags; -/* - * 802.11 Access Point security flags +/** + * NM80211ApSecurityFlags: + * @NM_802_11_AP_SEC_NONE: the access point has no special security requirements + * @NM_802_11_AP_SEC_PAIR_WEP40: 40/64-bit WEP is supported for + * pairwise/unicast encryption + * @NM_802_11_AP_SEC_PAIR_WEP104: 104/128-bit WEP is supported for + * pairwise/unicast encryption + * @NM_802_11_AP_SEC_PAIR_TKIP: TKIP is supported for pairwise/unicast encryption + * @NM_802_11_AP_SEC_PAIR_CCMP: AES/CCMP is supported for pairwise/unicast encryption + * @NM_802_11_AP_SEC_GROUP_WEP40: 40/64-bit WEP is supported for group/broadcast + * encryption + * @NM_802_11_AP_SEC_GROUP_WEP104: 104/128-bit WEP is supported for + * group/broadcast encryption + * @NM_802_11_AP_SEC_GROUP_TKIP: TKIP is supported for group/broadcast encryption + * @NM_802_11_AP_SEC_GROUP_CCMP: AES/CCMP is supported for group/broadcast + * encryption + * @NM_802_11_AP_SEC_KEY_MGMT_PSK: WPA/RSN Pre-Shared Key encryption is + * supported + * @NM_802_11_AP_SEC_KEY_MGMT_802_1X: 802.1x authentication and key management + * is supported * - * These describe the current security requirements of the BSSID as extracted - * from various pieces of beacon information, like beacon flags and various - * information elements. - */ + * 802.11 access point security and authentication flags. These flags describe + * the current security requirements of an access point as determined from the + * access point's beacon. + **/ typedef enum { /*< flags >*/ NM_802_11_AP_SEC_NONE = 0x00000000, @@ -165,10 +210,14 @@ typedef enum { NM_802_11_AP_SEC_KEY_MGMT_802_1X = 0x00000200 } NM80211ApSecurityFlags; -/* - * 802.11 AP and Station modes +/** + * NM80211Mode: + * @NM_802_11_MODE_UNKNOWN: the device or access point mode is unknown + * @NM_802_11_MODE_ADHOC: the device or access point is in Ad-Hoc mode + * @NM_802_11_MODE_INFRA: the device or access point is in infrastructure mode * - */ + * Indicates the 802.11 mode an access point or device is currently in. + **/ typedef enum { NM_802_11_MODE_UNKNOWN = 0, NM_802_11_MODE_ADHOC, @@ -183,7 +232,7 @@ typedef enum { * * #NMBluetoothCapabilities values indicate the usable capabilities of a * Bluetooth device. - */ + **/ typedef enum { /*< flags >*/ NM_BT_CAPABILITY_NONE = 0x00000000, @@ -206,7 +255,7 @@ typedef enum { * technology families a modem device supports. For more information on the * specific access technologies the device supports use the ModemManager D-Bus * API. - */ + **/ typedef enum { /*< flags >*/ NM_DEVICE_MODEM_CAPABILITY_NONE = 0x00000000, @@ -428,7 +477,7 @@ typedef enum { * #NMActiveConnectionState values indicate the state of a connection to a * specific network while it is starting, connected, or disconnecting from that * network. - */ + **/ typedef enum { NM_ACTIVE_CONNECTION_STATE_UNKNOWN = 0, NM_ACTIVE_CONNECTION_STATE_ACTIVATING, diff --git a/include/nm-settings-flags.h b/include/nm-settings-flags.h index 5f008f5c..4bf59f2f 100644 --- a/include/nm-settings-flags.h +++ b/include/nm-settings-flags.h @@ -22,12 +22,16 @@ #define NM_SETTINGS_FLAGS_H /* NOTE: these values should match the NM_SECRET_AGENT_GET_SECRETS_FLAGS in - * the nm-secret-agent.xml introspection file. + * the nm-secret-agent.xml introspection file; except ONLY_SYSTEM which is + * internal to NM. */ typedef enum { NM_SETTINGS_GET_SECRETS_FLAG_NONE = 0x0, NM_SETTINGS_GET_SECRETS_FLAG_ALLOW_INTERACTION = 0x1, - NM_SETTINGS_GET_SECRETS_FLAG_REQUEST_NEW = 0x2 + NM_SETTINGS_GET_SECRETS_FLAG_REQUEST_NEW = 0x2, + + /* Internal only to NM */ + NM_SETTINGS_GET_SECRETS_FLAG_ONLY_SYSTEM = 0x80000000 } NMSettingsGetSecretsFlags; #endif /* NM_SETTINGS_FLAGS_H */ diff --git a/include/nm-version.h b/include/nm-version.h index 972aee27..3d3adfba 100644 --- a/include/nm-version.h +++ b/include/nm-version.h @@ -35,7 +35,7 @@ * Evaluates to the minor version number of NetworkManager which this source * is compiled against. */ -#define NM_MINOR_VERSION (8) +#define NM_MINOR_VERSION (9) /** * NM_MICRO_VERSION: @@ -43,7 +43,7 @@ * Evaluates to the micro version number of NetworkManager which this source * compiled against. */ -#define NM_MICRO_VERSION (9997) +#define NM_MICRO_VERSION (0) /** * NM_CHECK_VERSION: diff --git a/initscript/RedHat/Makefile.am b/initscript/RedHat/Makefile.am index fc97ec45..62f5cf33 100644 --- a/initscript/RedHat/Makefile.am +++ b/initscript/RedHat/Makefile.am @@ -1,3 +1,6 @@ +if !HAVE_SYSTEMD + initddir = $(sysconfdir)/rc.d/init.d initd_SCRIPTS = NetworkManager +endif diff --git a/initscript/RedHat/Makefile.in b/initscript/RedHat/Makefile.in index a4b346ed..4449798b 100644 --- a/initscript/RedHat/Makefile.in +++ b/initscript/RedHat/Makefile.in @@ -293,8 +293,8 @@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -initddir = $(sysconfdir)/rc.d/init.d -initd_SCRIPTS = NetworkManager +@HAVE_SYSTEMD_FALSE@initddir = $(sysconfdir)/rc.d/init.d +@HAVE_SYSTEMD_FALSE@initd_SCRIPTS = NetworkManager all: all-am .SUFFIXES: diff --git a/introspection/Makefile.am b/introspection/Makefile.am index 320245ee..7b549c12 100644 --- a/introspection/Makefile.am +++ b/introspection/Makefile.am @@ -1,5 +1,5 @@ EXTRA_DIST = \ - all.xml \ + all.xml.in \ generic-types.xml \ errors.xml \ vpn-errors.xml \ diff --git a/introspection/Makefile.in b/introspection/Makefile.in index d0320e54..95c3c47e 100644 --- a/introspection/Makefile.in +++ b/introspection/Makefile.in @@ -34,7 +34,8 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = introspection -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/all.xml.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gtk-doc.m4 \ @@ -51,7 +52,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = +CONFIG_CLEAN_FILES = all.xml CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) @@ -269,7 +270,7 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ - all.xml \ + all.xml.in \ generic-types.xml \ errors.xml \ vpn-errors.xml \ @@ -329,6 +330,8 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): +all.xml: $(top_builddir)/config.status $(srcdir)/all.xml.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo diff --git a/introspection/all.xml b/introspection/all.xml deleted file mode 100644 index 5d1baf01..00000000 --- a/introspection/all.xml +++ /dev/null @@ -1,61 +0,0 @@ - - -NetworkManager D-Bus Interface Specification -0.9 - - -Copyright (C) 2008 - 2011 Red Hat, Inc. -Copyright (C) 2008 - 2009 Novell, Inc. - - -

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 Lesser General Public -License along with this library; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/introspection/all.xml.in b/introspection/all.xml.in new file mode 100644 index 00000000..4d2c2721 --- /dev/null +++ b/introspection/all.xml.in @@ -0,0 +1,61 @@ + + +NetworkManager D-Bus Interface Specification +@VERSION@ + + +Copyright (C) 2008 - 2011 Red Hat, Inc. +Copyright (C) 2008 - 2009 Novell, Inc. + + +

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 Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/introspection/nm-agent-manager.xml b/introspection/nm-agent-manager.xml index 0b1e3e6e..e26caacf 100644 --- a/introspection/nm-agent-manager.xml +++ b/introspection/nm-agent-manager.xml @@ -1,6 +1,6 @@ - + diff --git a/introspection/nm-manager.xml b/introspection/nm-manager.xml index 1bb76d09..f5fd7abc 100644 --- a/introspection/nm-manager.xml +++ b/introspection/nm-manager.xml @@ -1,13 +1,6 @@ - - - + diff --git a/introspection/nm-secret-agent.xml b/introspection/nm-secret-agent.xml index daf287c6..0a67efdc 100644 --- a/introspection/nm-secret-agent.xml +++ b/introspection/nm-secret-agent.xml @@ -5,7 +5,13 @@ Private D-Bus interface used by secret agents that store and provide - secrets to NetworkManager. + secrets to NetworkManager. If an agent provides secrets to + NetworkManager as part of connection creation, and the some of those + secrets are "agent owned" the agent should store those secrets + itself and should not expect its SaveSecrets() method to be called. + SaveSecrets() will be called eg if some program other than the + agent itself (like a connection editor) changes the secrets out of + band. @@ -123,7 +129,10 @@ Nested settings maps containing the entire connection (including secrets), for which the agent should save the - secrets to backing storage. + secrets to backing storage. This method will not be called + when the agent itself is the process creating or updating + a connection; in that case the agent is assumed to have + already saved those secrets since it had them already. diff --git a/introspection/nm-settings.xml b/introspection/nm-settings.xml index 64163534..301cde76 100644 --- a/introspection/nm-settings.xml +++ b/introspection/nm-settings.xml @@ -1,6 +1,6 @@ - + The Settings interface allows clients to view and administrate the connections stored and used by NetworkManager. diff --git a/libnm-glib/Makefile.am b/libnm-glib/Makefile.am index 08a61cc2..4eec4016 100644 --- a/libnm-glib/Makefile.am +++ b/libnm-glib/Makefile.am @@ -139,7 +139,7 @@ libnm_glib_la_LIBADD = \ SYMBOL_VIS_FILE=$(srcdir)/libnm-glib.ver libnm_glib_la_LDFLAGS = -Wl,--version-script=$(SYMBOL_VIS_FILE) \ - -version-info "5:0:1" + -version-info "6:0:2" noinst_PROGRAMS = libnm-glib-test diff --git a/libnm-glib/Makefile.in b/libnm-glib/Makefile.in index 98280865..9728f7d9 100644 --- a/libnm-glib/Makefile.in +++ b/libnm-glib/Makefile.in @@ -599,7 +599,7 @@ libnm_glib_la_LIBADD = \ SYMBOL_VIS_FILE = $(srcdir)/libnm-glib.ver libnm_glib_la_LDFLAGS = -Wl,--version-script=$(SYMBOL_VIS_FILE) \ - -version-info "5:0:1" + -version-info "6:0:2" libnm_glib_test_SOURCES = libnm-glib-test.c libnm_glib_test_CFLAGS = $(GLIB_CFLAGS) $(DBUS_CFLAGS) diff --git a/libnm-glib/libnm-glib-vpn.pc.in b/libnm-glib/libnm-glib-vpn.pc.in index 5f341594..046f5b07 100644 --- a/libnm-glib/libnm-glib-vpn.pc.in +++ b/libnm-glib/libnm-glib-vpn.pc.in @@ -6,7 +6,7 @@ includedir=@includedir@ Name: libnm-glib-vpn Description: Convenience library for NetworkManager VPN plugins Version: @VERSION@ -Requires: NetworkManager >= 0.8.995 glib-2.0 dbus-glib-1 +Requires: NetworkManager >= @VERSION@ glib-2.0 dbus-glib-1 Cflags: -I${includedir}/libnm-glib Libs: -L${libdir} -lnm-glib-vpn diff --git a/libnm-glib/libnm-glib.pc.in b/libnm-glib/libnm-glib.pc.in index 2668b4e5..754c43da 100644 --- a/libnm-glib/libnm-glib.pc.in +++ b/libnm-glib/libnm-glib.pc.in @@ -6,7 +6,7 @@ includedir=@includedir@ Name: libnm-glib Description: Convenience library for clients of NetworkManager Version: @VERSION@ -Requires: NetworkManager >= 0.8.995 gobject-2.0 dbus-glib-1 +Requires: NetworkManager >= @VERSION@ gobject-2.0 dbus-glib-1 Cflags: -I${includedir}/libnm-glib Libs: -L${libdir} -lnm-glib diff --git a/libnm-glib/libnm-glib.ver b/libnm-glib/libnm-glib.ver index f42368b8..1a4a68cf 100644 --- a/libnm-glib/libnm-glib.ver +++ b/libnm-glib/libnm-glib.ver @@ -32,6 +32,7 @@ global: nm_client_add_and_activate_connection; nm_client_deactivate_connection; nm_client_get_active_connections; + nm_client_get_device_by_iface; nm_client_get_device_by_path; nm_client_get_devices; nm_client_get_manager_running; diff --git a/libnm-glib/nm-client.c b/libnm-glib/nm-client.c index 644af3e4..0769de1a 100644 --- a/libnm-glib/nm-client.c +++ b/libnm-glib/nm-client.c @@ -557,6 +557,40 @@ nm_client_get_device_by_path (NMClient *client, const char *object_path) return device; } +/** + * nm_client_get_device_by_iface: + * @client: a #NMClient + * @iface: the interface name to search for + * + * Gets a #NMDevice from a #NMClient. + * + * Returns: (transfer none): the #NMDevice for the given @iface or %NULL if none is found. + **/ +NMDevice * +nm_client_get_device_by_iface (NMClient *client, const char *iface) +{ + const GPtrArray *devices; + int i; + NMDevice *device = NULL; + + g_return_val_if_fail (NM_IS_CLIENT (client), NULL); + g_return_val_if_fail (iface, NULL); + + devices = nm_client_get_devices (client); + if (!devices) + return NULL; + + for (i = 0; i < devices->len; i++) { + NMDevice *candidate = g_ptr_array_index (devices, i); + if (!strcmp (nm_device_get_iface (candidate), iface)) { + device = candidate; + break; + } + } + + return device; +} + typedef struct { NMClient *client; NMClientActivateFn act_fn; @@ -763,7 +797,7 @@ nm_client_add_and_activate_connection (NMClient *client, if (partial) hash = nm_connection_to_hash (partial, NM_SETTING_HASH_FLAG_ALL); - else + if (!hash) hash = g_hash_table_new (g_str_hash, g_str_equal); priv = NM_CLIENT_GET_PRIVATE (client); diff --git a/libnm-glib/nm-client.h b/libnm-glib/nm-client.h index 450c0947..c9fd7c10 100644 --- a/libnm-glib/nm-client.h +++ b/libnm-glib/nm-client.h @@ -108,6 +108,7 @@ NMClient *nm_client_new (void); const GPtrArray *nm_client_get_devices (NMClient *client); NMDevice *nm_client_get_device_by_path (NMClient *client, const char *object_path); +NMDevice *nm_client_get_device_by_iface (NMClient *client, const char *iface); typedef void (*NMClientActivateFn) (NMClient *client, NMActiveConnection *active_connection, diff --git a/libnm-glib/nm-device-wifi.c b/libnm-glib/nm-device-wifi.c index 9877f94f..7d0e1b9f 100644 --- a/libnm-glib/nm-device-wifi.c +++ b/libnm-glib/nm-device-wifi.c @@ -637,12 +637,10 @@ demarshal_active_ap (NMObject *object, GParamSpec *pspec, GValue *value, gpointe NMAccessPoint *ap = NULL; DBusGConnection *connection; - if (!G_VALUE_HOLDS (value, DBUS_TYPE_G_OBJECT_PATH)) - return FALSE; - - priv->got_active_ap = TRUE; - if (value) { + if (!G_VALUE_HOLDS (value, DBUS_TYPE_G_OBJECT_PATH)) + return FALSE; + path = g_value_get_boxed (value); if (path) { ap = NM_ACCESS_POINT (_nm_object_cache_get (path)); @@ -653,6 +651,8 @@ demarshal_active_ap (NMObject *object, GParamSpec *pspec, GValue *value, gpointe } } + priv->got_active_ap = TRUE; + if (priv->active_ap) { g_object_unref (priv->active_ap); priv->active_ap = NULL; diff --git a/libnm-glib/nm-device-wimax.c b/libnm-glib/nm-device-wimax.c index a889583d..4844a0e2 100644 --- a/libnm-glib/nm-device-wimax.c +++ b/libnm-glib/nm-device-wimax.c @@ -628,12 +628,10 @@ demarshal_active_nsp (NMObject *object, GParamSpec *pspec, GValue *value, gpoint NMWimaxNsp *nsp = NULL; DBusGConnection *connection; - if (!G_VALUE_HOLDS (value, DBUS_TYPE_G_OBJECT_PATH)) - return FALSE; - - priv->got_active_nsp = TRUE; - if (value) { + if (!G_VALUE_HOLDS (value, DBUS_TYPE_G_OBJECT_PATH)) + return FALSE; + path = g_value_get_boxed (value); if (path) { nsp = NM_WIMAX_NSP (_nm_object_cache_get (path)); @@ -644,6 +642,8 @@ demarshal_active_nsp (NMObject *object, GParamSpec *pspec, GValue *value, gpoint } } + priv->got_active_nsp = TRUE; + if (priv->active_nsp) { g_object_unref (priv->active_nsp); priv->active_nsp = NULL; diff --git a/libnm-glib/nm-device.c b/libnm-glib/nm-device.c index 3b39c9ec..f06c1e4a 100644 --- a/libnm-glib/nm-device.c +++ b/libnm-glib/nm-device.c @@ -120,12 +120,10 @@ demarshal_ip4_config (NMObject *object, GParamSpec *pspec, GValue *value, gpoint NMIP4Config *config = NULL; DBusGConnection *connection; - if (!G_VALUE_HOLDS (value, DBUS_TYPE_G_OBJECT_PATH)) - return FALSE; - - priv->got_ip4_config = TRUE; - if (value) { + if (!G_VALUE_HOLDS (value, DBUS_TYPE_G_OBJECT_PATH)) + return FALSE; + path = g_value_get_boxed (value); if (path) { config = NM_IP4_CONFIG (_nm_object_cache_get (path)); @@ -136,6 +134,8 @@ demarshal_ip4_config (NMObject *object, GParamSpec *pspec, GValue *value, gpoint } } + priv->got_ip4_config = TRUE; + if (priv->ip4_config) { g_object_unref (priv->ip4_config); priv->ip4_config = NULL; @@ -156,12 +156,10 @@ demarshal_dhcp4_config (NMObject *object, GParamSpec *pspec, GValue *value, gpoi NMDHCP4Config *config = NULL; DBusGConnection *connection; - if (!G_VALUE_HOLDS (value, DBUS_TYPE_G_OBJECT_PATH)) - return FALSE; - - priv->got_dhcp4_config = TRUE; - if (value) { + if (!G_VALUE_HOLDS (value, DBUS_TYPE_G_OBJECT_PATH)) + return FALSE; + path = g_value_get_boxed (value); if (path) { config = NM_DHCP4_CONFIG (_nm_object_cache_get (path)); @@ -172,6 +170,8 @@ demarshal_dhcp4_config (NMObject *object, GParamSpec *pspec, GValue *value, gpoi } } + priv->got_dhcp4_config = TRUE; + if (priv->dhcp4_config) { g_object_unref (priv->dhcp4_config); priv->dhcp4_config = NULL; @@ -192,12 +192,10 @@ demarshal_ip6_config (NMObject *object, GParamSpec *pspec, GValue *value, gpoint NMIP6Config *config = NULL; DBusGConnection *connection; - if (!G_VALUE_HOLDS (value, DBUS_TYPE_G_OBJECT_PATH)) - return FALSE; - - priv->got_ip6_config = TRUE; - if (value) { + if (!G_VALUE_HOLDS (value, DBUS_TYPE_G_OBJECT_PATH)) + return FALSE; + path = g_value_get_boxed (value); if (path) { config = NM_IP6_CONFIG (_nm_object_cache_get (path)); @@ -208,6 +206,8 @@ demarshal_ip6_config (NMObject *object, GParamSpec *pspec, GValue *value, gpoint } } + priv->got_ip6_config = TRUE; + if (priv->ip6_config) { g_object_unref (priv->ip6_config); priv->ip6_config = NULL; @@ -228,12 +228,10 @@ demarshal_dhcp6_config (NMObject *object, GParamSpec *pspec, GValue *value, gpoi NMDHCP6Config *config = NULL; DBusGConnection *connection; - if (!G_VALUE_HOLDS (value, DBUS_TYPE_G_OBJECT_PATH)) - return FALSE; - - priv->got_dhcp6_config = TRUE; - if (value) { + if (!G_VALUE_HOLDS (value, DBUS_TYPE_G_OBJECT_PATH)) + return FALSE; + path = g_value_get_boxed (value); if (path) { config = NM_DHCP6_CONFIG (_nm_object_cache_get (path)); @@ -244,6 +242,8 @@ demarshal_dhcp6_config (NMObject *object, GParamSpec *pspec, GValue *value, gpoi } } + priv->got_dhcp6_config = TRUE; + if (priv->dhcp6_config) { g_object_unref (priv->dhcp6_config); priv->dhcp6_config = NULL; @@ -1217,7 +1217,8 @@ nm_device_get_state (NMDevice *device) * * Gets the #NMActiveConnection object which owns this device during activation. * - * Returns: the #NMActiveConnection + * Returns: (transfer none): the #NMActiveConnection or %NULL if the device is + * not part of an active connection **/ NMActiveConnection * nm_device_get_active_connection (NMDevice *device) diff --git a/libnm-glib/nm-object.c b/libnm-glib/nm-object.c index 614f6afc..cbcf2919 100644 --- a/libnm-glib/nm-object.c +++ b/libnm-glib/nm-object.c @@ -79,8 +79,6 @@ constructor (GType type, if (!object) return NULL; - _nm_object_cache_add (NM_OBJECT (object)); - priv = NM_OBJECT_GET_PRIVATE (object); if (priv->connection == NULL || priv->path == NULL) { @@ -94,6 +92,8 @@ constructor (GType type, priv->path, "org.freedesktop.DBus.Properties"); + _nm_object_cache_add (NM_OBJECT (object)); + return object; } @@ -140,11 +140,15 @@ set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object); + DBusGConnection *connection; switch (prop_id) { case PROP_CONNECTION: /* Construct only */ - priv->connection = dbus_g_connection_ref ((DBusGConnection *) g_value_get_boxed (value)); + connection = (DBusGConnection *) g_value_get_boxed (value); + if (!connection) + connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, NULL); + priv->connection = dbus_g_connection_ref (connection); break; case PROP_PATH: /* Construct only */ diff --git a/libnm-glib/nm-remote-settings.c b/libnm-glib/nm-remote-settings.c index 70befd9e..b6aaabb0 100644 --- a/libnm-glib/nm-remote-settings.c +++ b/libnm-glib/nm-remote-settings.c @@ -736,9 +736,6 @@ get_all_cb (DBusGProxy *proxy, NMRemoteSettings * nm_remote_settings_new (DBusGConnection *bus) { - if (bus == NULL) - bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, NULL); - return (NMRemoteSettings *) g_object_new (NM_TYPE_REMOTE_SETTINGS, NM_REMOTE_SETTINGS_BUS, bus, NULL); @@ -887,11 +884,15 @@ set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (object); + DBusGConnection *connection; switch (prop_id) { case PROP_BUS: /* Construct only */ - priv->bus = dbus_g_connection_ref ((DBusGConnection *) g_value_get_boxed (value)); + connection = (DBusGConnection *) g_value_get_boxed (value); + if (!connection) + connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, NULL); + priv->bus = dbus_g_connection_ref (connection); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); diff --git a/libnm-glib/nm-vpn-plugin-ui-interface.c b/libnm-glib/nm-vpn-plugin-ui-interface.c index f4b844c8..f82c1270 100644 --- a/libnm-glib/nm-vpn-plugin-ui-interface.c +++ b/libnm-glib/nm-vpn-plugin-ui-interface.c @@ -150,12 +150,8 @@ nm_vpn_plugin_ui_interface_delete_connection (NMVpnPluginUiInterface *iface, NMConnection *connection, GError **error) { - g_return_val_if_fail (NM_IS_VPN_PLUGIN_UI_INTERFACE (iface), FALSE); - - if (error) - g_return_val_if_fail (*error == NULL, FALSE); - - return NM_VPN_PLUGIN_UI_INTERFACE_GET_INTERFACE (iface)->delete_connection (iface, connection, error); + /* Deprecated and no longer used */ + return TRUE; } @@ -235,11 +231,7 @@ nm_vpn_plugin_ui_widget_interface_save_secrets (NMVpnPluginUiWidgetInterface *if NMConnection *connection, GError **error) { - g_return_val_if_fail (NM_IS_VPN_PLUGIN_UI_WIDGET_INTERFACE (iface), FALSE); - - if (error) - g_return_val_if_fail (*error == NULL, FALSE); - - return NM_VPN_PLUGIN_UI_WIDGET_INTERFACE_GET_INTERFACE (iface)->save_secrets (iface, connection, error); + /* Deprecated and no longer used */ + return TRUE; } diff --git a/libnm-glib/nm-vpn-plugin-ui-interface.h b/libnm-glib/nm-vpn-plugin-ui-interface.h index 2ab13f00..93c5659b 100644 --- a/libnm-glib/nm-vpn-plugin-ui-interface.h +++ b/libnm-glib/nm-vpn-plugin-ui-interface.h @@ -111,11 +111,7 @@ struct _NMVpnPluginUiInterface { */ char * (*get_suggested_name) (NMVpnPluginUiInterface *iface, NMConnection *connection); - /* Called when the user has chosen to remove the connection (for user - * connections only; system connections are handled by the system - * settings service). Should clear out any VPN-specific secrets or data - * related to the connection. - */ + /* Deprecated and no longer used */ gboolean (*delete_connection) (NMVpnPluginUiInterface *iface, NMConnection *connection, GError **error); /* Padding for future expansion */ @@ -147,6 +143,7 @@ gboolean nm_vpn_plugin_ui_interface_export (NMVpnPluginUiInterface *iface, char *nm_vpn_plugin_ui_interface_get_suggested_name (NMVpnPluginUiInterface *iface, NMConnection *connection); +/* Deprecated and no longer used */ gboolean nm_vpn_plugin_ui_interface_delete_connection (NMVpnPluginUiInterface *iface, NMConnection *connection, GError **error); @@ -178,11 +175,7 @@ struct _NMVpnPluginUiWidgetInterface { NMConnection *connection, GError **error); - /* Called when the user has chosen to save the connection (for user - * connections only; system connections are handled by the system - * settings service). Should save VPN-specific connection secrets in - * a way that the auth-dialog can read them. - */ + /* Deprecated and no longer used */ gboolean (*save_secrets) (NMVpnPluginUiWidgetInterface *iface, NMConnection *connection, GError **error); @@ -200,6 +193,7 @@ gboolean nm_vpn_plugin_ui_widget_interface_update_connection (NMVpnPluginUiWidge NMConnection *connection, GError **error); +/* Deprecated and no longer used */ gboolean nm_vpn_plugin_ui_widget_interface_save_secrets (NMVpnPluginUiWidgetInterface *iface, NMConnection *connection, GError **error); diff --git a/libnm-util/libnm-util.ver b/libnm-util/libnm-util.ver index 4ff0838e..6052c275 100644 --- a/libnm-util/libnm-util.ver +++ b/libnm-util/libnm-util.ver @@ -94,10 +94,15 @@ global: nm_ip6_route_set_next_hop; nm_ip6_route_set_prefix; nm_ip6_route_unref; + nm_setting_802_1x_add_altsubject_match; nm_setting_802_1x_add_eap_method; + nm_setting_802_1x_add_phase2_altsubject_match; + nm_setting_802_1x_clear_altsubject_matches; nm_setting_802_1x_clear_eap_methods; + nm_setting_802_1x_clear_phase2_altsubject_matches; nm_setting_802_1x_error_get_type; nm_setting_802_1x_error_quark; + nm_setting_802_1x_get_altsubject_match; nm_setting_802_1x_get_anonymous_identity; nm_setting_802_1x_get_ca_cert_blob; nm_setting_802_1x_get_ca_cert_path; @@ -108,12 +113,15 @@ global: nm_setting_802_1x_get_client_cert_scheme; nm_setting_802_1x_get_eap_method; nm_setting_802_1x_get_identity; + nm_setting_802_1x_get_num_altsubject_matches; nm_setting_802_1x_get_num_eap_methods; + nm_setting_802_1x_get_num_phase2_altsubject_matches; nm_setting_802_1x_get_password; nm_setting_802_1x_get_password_flags; nm_setting_802_1x_get_phase1_fast_provisioning; nm_setting_802_1x_get_phase1_peaplabel; nm_setting_802_1x_get_phase1_peapver; + nm_setting_802_1x_get_phase2_altsubject_match; nm_setting_802_1x_get_phase2_auth; nm_setting_802_1x_get_phase2_autheap; nm_setting_802_1x_get_phase2_ca_cert_blob; @@ -129,6 +137,7 @@ global: nm_setting_802_1x_get_phase2_private_key_password_flags; nm_setting_802_1x_get_phase2_private_key_path; nm_setting_802_1x_get_phase2_private_key_scheme; + nm_setting_802_1x_get_phase2_subject_match; nm_setting_802_1x_get_pin; nm_setting_802_1x_get_pin_flags; nm_setting_802_1x_get_private_key_blob; @@ -137,10 +146,13 @@ global: nm_setting_802_1x_get_private_key_password_flags; nm_setting_802_1x_get_private_key_path; nm_setting_802_1x_get_private_key_scheme; + nm_setting_802_1x_get_subject_match; nm_setting_802_1x_get_system_ca_certs; nm_setting_802_1x_get_type; nm_setting_802_1x_new; + nm_setting_802_1x_remove_altsubject_match; nm_setting_802_1x_remove_eap_method; + nm_setting_802_1x_remove_phase2_altsubject_match; nm_setting_802_1x_set_ca_cert; nm_setting_802_1x_set_client_cert; nm_setting_802_1x_set_phase2_ca_cert; @@ -342,6 +354,7 @@ global: nm_setting_wired_get_cloned_mac_address; nm_setting_wired_get_duplex; nm_setting_wired_get_mac_address; + nm_setting_wired_get_mac_address_blacklist; nm_setting_wired_get_mtu; nm_setting_wired_get_num_s390_options; nm_setting_wired_get_port; @@ -362,6 +375,7 @@ global: nm_setting_wireless_get_channel; nm_setting_wireless_get_cloned_mac_address; nm_setting_wireless_get_mac_address; + nm_setting_wireless_get_mac_address_blacklist; nm_setting_wireless_get_mode; nm_setting_wireless_get_mtu; nm_setting_wireless_get_num_seen_bssids; diff --git a/libnm-util/nm-connection.c b/libnm-util/nm-connection.c index 6e9f92b5..91fc3afa 100644 --- a/libnm-util/nm-connection.c +++ b/libnm-util/nm-connection.c @@ -99,6 +99,7 @@ nm_connection_error_get_type (void) ENUM_ENTRY (NM_CONNECTION_ERROR_UNKNOWN, "UnknownError"), ENUM_ENTRY (NM_CONNECTION_ERROR_CONNECTION_SETTING_NOT_FOUND, "ConnectionSettingNotFound"), ENUM_ENTRY (NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID, "ConnectionTypeInvalid"), + ENUM_ENTRY (NM_CONNECTION_ERROR_SETTING_NOT_FOUND, "SettingNotFound"), { 0, 0, 0 } }; etype = g_enum_register_static ("NMConnectionError", values); @@ -790,60 +791,76 @@ nm_connection_verify (NMConnection *connection, GError **error) * nm_connection_update_secrets: * @connection: the #NMConnection * @setting_name: the setting object name to which the secrets apply - * @setting_secrets: (element-type utf8 GObject.Value): a #GHashTable mapping + * @secrets: (element-type utf8 GObject.Value): a #GHashTable mapping * string:#GValue of setting property names and secrets of the given @setting_name * @error: location to store error, or %NULL * * 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 nm_connection_to_hash(). + * be returned from nm_connection_to_hash(). If @setting_name is %NULL, expects + * a fully serialized #NMConnection as returned by nm_connection_to_hash() and + * will update all secrets from all settings contained in @secrets. * - * Returns: %TRUE if the secrets were successfully updated and the connection - * is valid, %FALSE on failure or if the setting was never added to the connection + * Returns: %TRUE if the secrets were successfully updated, %FALSE if the update + * failed (tried to update secrets for a setting that doesn't exist, etc) **/ gboolean nm_connection_update_secrets (NMConnection *connection, const char *setting_name, - GHashTable *setting_secrets, + GHashTable *secrets, GError **error) { NMSetting *setting; gboolean success; GHashTable *tmp; - GType setting_type; g_return_val_if_fail (connection != NULL, FALSE); g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE); - g_return_val_if_fail (setting_name != NULL, FALSE); - g_return_val_if_fail (setting_secrets != NULL, FALSE); + g_return_val_if_fail (secrets != NULL, FALSE); if (error) g_return_val_if_fail (*error == NULL, FALSE); - setting_type = nm_connection_lookup_setting_type (setting_name); - if (!setting_type) { - g_set_error_literal (error, - NM_CONNECTION_ERROR, - NM_CONNECTION_ERROR_CONNECTION_SETTING_NOT_FOUND, - setting_name); - return FALSE; - } + if (setting_name) { + /* Update just one setting */ + setting = nm_connection_get_setting_by_name (connection, setting_name); + if (!setting) { + g_set_error_literal (error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_SETTING_NOT_FOUND, + setting_name); + return FALSE; + } - setting = nm_connection_get_setting (connection, setting_type); - if (!setting) { - g_set_error_literal (error, - NM_CONNECTION_ERROR, - NM_CONNECTION_ERROR_CONNECTION_SETTING_NOT_FOUND, - setting_name); - return FALSE; - } + /* Check if this is a hash of hashes, ie a full deserialized connection, + * not just a single hashed setting. + */ + tmp = g_hash_table_lookup (secrets, setting_name); + success = nm_setting_update_secrets (setting, tmp ? tmp : secrets, error); + } else { + GHashTableIter iter; + const char *name; - /* Check if this is a hash of hashes, ie a full deserialized connection, - * not just a single hashed setting. - */ - tmp = g_hash_table_lookup (setting_secrets, setting_name); + success = TRUE; /* Just in case 'secrets' has no elements */ + + /* Try as a serialized connection (GHashTable of GHashTables) */ + g_hash_table_iter_init (&iter, secrets); + while (g_hash_table_iter_next (&iter, (gpointer) &name, (gpointer) &tmp)) { + setting = nm_connection_get_setting_by_name (connection, name); + if (!setting) { + g_set_error_literal (error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_SETTING_NOT_FOUND, + name); + return FALSE; + } - success = nm_setting_update_secrets (setting, tmp ? tmp : setting_secrets, error); + /* Update the secrets for this setting */ + success = nm_setting_update_secrets (setting, tmp, error); + if (success == FALSE) + break; + } + } if (success) g_signal_emit (connection, signals[SECRETS_UPDATED], 0, setting_name); return success; diff --git a/libnm-util/nm-connection.h b/libnm-util/nm-connection.h index 87b053c1..3cd18747 100644 --- a/libnm-util/nm-connection.h +++ b/libnm-util/nm-connection.h @@ -66,6 +66,8 @@ G_BEGIN_DECLS * 'connection' setting did not point to a valid connection base type; ie * it was not a hardware-related setting like #NMSettingWired or * #NMSettingWireless. + * @NM_CONNECTION_ERROR_SETTING_NOT_FOUND: the #NMConnection object + * did not contain the specified #NMSetting object * * Describes errors that may result from operations involving a #NMConnection. * @@ -74,7 +76,8 @@ typedef enum { NM_CONNECTION_ERROR_UNKNOWN = 0, NM_CONNECTION_ERROR_CONNECTION_SETTING_NOT_FOUND, - NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID + NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID, + NM_CONNECTION_ERROR_SETTING_NOT_FOUND } NMConnectionError; #define NM_TYPE_CONNECTION_ERROR (nm_connection_error_get_type ()) @@ -146,7 +149,7 @@ void nm_connection_clear_secrets (NMConnection *connection); gboolean nm_connection_update_secrets (NMConnection *connection, const char *setting_name, - GHashTable *setting_secrets, + GHashTable *secrets, GError **error); void nm_connection_set_path (NMConnection *connection, diff --git a/libnm-util/nm-param-spec-specialized.c b/libnm-util/nm-param-spec-specialized.c index 93623a11..7e921bca 100644 --- a/libnm-util/nm-param-spec-specialized.c +++ b/libnm-util/nm-param-spec-specialized.c @@ -230,7 +230,7 @@ _gvalue_destroy (gpointer data) } static GValue * -nm_gvalue_dup (const GValue *value) +_gvalue_dup (const GValue *value) { GValue *dup; @@ -246,7 +246,7 @@ iterate_collection (const GValue *value, gpointer user_data) { GSList **list = (GSList **) user_data; - *list = g_slist_prepend (*list, nm_gvalue_dup (value)); + *list = g_slist_prepend (*list, _gvalue_dup (value)); } static gint @@ -306,7 +306,7 @@ iterate_map (const GValue *key_val, { GHashTable **hash = (GHashTable **) user_data; - g_hash_table_insert (*hash, g_value_dup_string (key_val), nm_gvalue_dup (value_val)); + g_hash_table_insert (*hash, g_value_dup_string (key_val), _gvalue_dup (value_val)); } typedef struct { diff --git a/libnm-util/nm-setting-8021x.c b/libnm-util/nm-setting-8021x.c index 24750422..07fdcc21 100644 --- a/libnm-util/nm-setting-8021x.c +++ b/libnm-util/nm-setting-8021x.c @@ -116,6 +116,8 @@ typedef struct { char *anonymous_identity; GByteArray *ca_cert; char *ca_path; + char *subject_match; + GSList *altsubject_matches; GByteArray *client_cert; char *phase1_peapver; char *phase1_peaplabel; @@ -124,6 +126,8 @@ typedef struct { char *phase2_autheap; GByteArray *phase2_ca_cert; char *phase2_ca_path; + char *phase2_subject_match; + GSList *phase2_altsubject_matches; GByteArray *phase2_client_cert; char *password; NMSettingSecretFlags password_flags; @@ -145,6 +149,8 @@ enum { PROP_ANONYMOUS_IDENTITY, PROP_CA_CERT, PROP_CA_PATH, + PROP_SUBJECT_MATCH, + PROP_ALTSUBJECT_MATCHES, PROP_CLIENT_CERT, PROP_PHASE1_PEAPVER, PROP_PHASE1_PEAPLABEL, @@ -153,6 +159,8 @@ enum { PROP_PHASE2_AUTHEAP, PROP_PHASE2_CA_CERT, PROP_PHASE2_CA_PATH, + PROP_PHASE2_SUBJECT_MATCH, + PROP_PHASE2_ALTSUBJECT_MATCHES, PROP_PHASE2_CLIENT_CERT, PROP_PASSWORD, PROP_PASSWORD_FLAGS, @@ -556,6 +564,135 @@ nm_setting_802_1x_set_ca_cert (NMSetting8021x *self, return priv->ca_cert != NULL; } +/** + * nm_setting_802_1x_get_subject_match: + * @setting: the #NMSetting8021x + * + * Returns: the #NMSetting8021x:subject-match property. This is the + * substring to be matched against the subject of the authentication + * server certificate, or NULL no subject verification is to be + * performed. + **/ +const char * +nm_setting_802_1x_get_subject_match (NMSetting8021x *setting) +{ + g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL); + + return NM_SETTING_802_1X_GET_PRIVATE (setting)->subject_match; +} + +/** + * nm_setting_802_1x_get_num_altsubject_matches: + * @setting: the #NMSetting8021x + * + * Returns the number of entries in the + * #NMSetting8021x:altsubject-matches property of this setting. + * + * Returns: the number of altsubject-matches entries. + **/ +guint32 +nm_setting_802_1x_get_num_altsubject_matches (NMSetting8021x *setting) +{ + g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), 0); + + return g_slist_length (NM_SETTING_802_1X_GET_PRIVATE (setting)->altsubject_matches); +} + +/** + * nm_setting_802_1x_get_altsubject_match: + * @setting: the #NMSettingConnection + * @i: the zero-based index of the array of altSubjectName matches + * + * Returns the altSubjectName match at index @i. + * + * Returns: the altSubjectName match at index @i + **/ +const char * +nm_setting_802_1x_get_altsubject_match (NMSetting8021x *setting, guint32 i) +{ + NMSetting8021xPrivate *priv; + + g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL); + + priv = NM_SETTING_802_1X_GET_PRIVATE (setting); + g_return_val_if_fail (i <= g_slist_length (priv->altsubject_matches), NULL); + + return (const char *) g_slist_nth_data (priv->altsubject_matches, i); +} + +/** + * nm_setting_802_1x_add_altsubject_match: + * @setting: the #NMSetting8021x + * @altsubject_match: the altSubjectName to allow for this connection + * + * Adds an allowed alternate subject name match. Until at least one + * match is added, the altSubjectName of the remote authentication + * server is not verified. + * + * Returns: TRUE if the alternative subject name match was + * successfully added, FALSE if it was already allowed. + **/ +gboolean +nm_setting_802_1x_add_altsubject_match (NMSetting8021x *setting, + const char *altsubject_match) +{ + NMSetting8021xPrivate *priv; + GSList *iter; + + g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), FALSE); + g_return_val_if_fail (altsubject_match != NULL, FALSE); + + priv = NM_SETTING_802_1X_GET_PRIVATE (setting); + for (iter = priv->altsubject_matches; iter; iter = g_slist_next (iter)) { + if (!strcmp (altsubject_match, (char *) iter->data)) + return FALSE; + } + + priv->altsubject_matches = g_slist_append (priv->altsubject_matches, g_strdup (altsubject_match)); + return TRUE; +} + +/** + * nm_setting_802_1x_remove_altsubject_match: + * @setting: the #NMSetting8021x + * @i: the index of the altSubjectName match to remove + * + * Removes the allowed altSubjectName at the specified index. + **/ +void +nm_setting_802_1x_remove_altsubject_match (NMSetting8021x *setting, guint32 i) +{ + NMSetting8021xPrivate *priv; + GSList *elt; + + g_return_if_fail (NM_IS_SETTING_802_1X (setting)); + + priv = NM_SETTING_802_1X_GET_PRIVATE (setting); + elt = g_slist_nth (priv->altsubject_matches, i); + g_return_if_fail (elt != NULL); + + g_free (elt->data); + priv->altsubject_matches = g_slist_delete_link (priv->altsubject_matches, elt); +} + +/** + * nm_setting_802_1x_clear_altsubject_matches: + * @setting: the #NMSetting8021x + * + * Clears all altSubjectName matches. + **/ +void +nm_setting_802_1x_clear_altsubject_matches (NMSetting8021x *setting) +{ + NMSetting8021xPrivate *priv; + + g_return_if_fail (NM_IS_SETTING_802_1X (setting)); + + priv = NM_SETTING_802_1X_GET_PRIVATE (setting); + nm_utils_slist_free (priv->altsubject_matches, g_free); + priv->altsubject_matches = NULL; +} + /** * nm_setting_802_1x_get_client_cert_scheme: * @setting: the #NMSetting8021x @@ -967,6 +1104,137 @@ nm_setting_802_1x_set_phase2_ca_cert (NMSetting8021x *self, return priv->phase2_ca_cert != NULL; } +/** + * nm_setting_802_1x_get_phase2_subject_match: + * @setting: the #NMSetting8021x + * + * Returns: the #NMSetting8021x:phase2-subject-match property. This is + * the substring to be matched against the subject of the "phase 2" + * authentication server certificate, or NULL no subject verification + * is to be performed. + **/ +const char * +nm_setting_802_1x_get_phase2_subject_match (NMSetting8021x *setting) +{ + g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL); + + return NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_subject_match; +} + +/** + * nm_setting_802_1x_get_num_phase2_altsubject_matches: + * @setting: the #NMSetting8021x + * + * Returns the number of entries in the + * #NMSetting8021x:phase2-altsubject-matches property of this setting. + * + * Returns: the number of phase2-altsubject-matches entries. + **/ +guint32 +nm_setting_802_1x_get_num_phase2_altsubject_matches (NMSetting8021x *setting) +{ + g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), 0); + + return g_slist_length (NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_altsubject_matches); +} + +/** + * nm_setting_802_1x_get_phase2_altsubject_match: + * @setting: the #NMSettingConnection + * @i: the zero-based index of the array of "phase 2" altSubjectName matches + * + * Returns the "phase 2" altSubjectName match at index @i. + * + * Returns: the "phase 2" altSubjectName match at index @i + **/ +const char * +nm_setting_802_1x_get_phase2_altsubject_match (NMSetting8021x *setting, guint32 i) +{ + NMSetting8021xPrivate *priv; + + g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL); + + priv = NM_SETTING_802_1X_GET_PRIVATE (setting); + g_return_val_if_fail (i <= g_slist_length (priv->phase2_altsubject_matches), NULL); + + return (const char *) g_slist_nth_data (priv->phase2_altsubject_matches, i); +} + +/** + * nm_setting_802_1x_add_phase2_altsubject_match: + * @setting: the #NMSetting8021x + * @phase2_altsubject_match: the "phase 2" altSubjectName to allow for this + * connection + * + * Adds an allowed alternate subject name match for "phase 2". Until + * at least one match is added, the altSubjectName of the "phase 2" + * remote authentication server is not verified. + * + * Returns: TRUE if the "phase 2" alternative subject name match was + * successfully added, FALSE if it was already allowed. + **/ +gboolean +nm_setting_802_1x_add_phase2_altsubject_match (NMSetting8021x *setting, + const char *phase2_altsubject_match) +{ + NMSetting8021xPrivate *priv; + GSList *iter; + + g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), FALSE); + g_return_val_if_fail (phase2_altsubject_match != NULL, FALSE); + + priv = NM_SETTING_802_1X_GET_PRIVATE (setting); + for (iter = priv->phase2_altsubject_matches; iter; iter = g_slist_next (iter)) { + if (!strcmp (phase2_altsubject_match, (char *) iter->data)) + return FALSE; + } + + priv->phase2_altsubject_matches = g_slist_append (priv->altsubject_matches, + g_strdup (phase2_altsubject_match)); + return TRUE; +} + +/** + * nm_setting_802_1x_remove_phase2_altsubject_match: + * @setting: the #NMSetting8021x + * @i: the index of the "phase 2" altSubjectName match to remove + * + * Removes the allowed "phase 2" altSubjectName at the specified index. + **/ +void +nm_setting_802_1x_remove_phase2_altsubject_match (NMSetting8021x *setting, guint32 i) +{ + NMSetting8021xPrivate *priv; + GSList *elt; + + g_return_if_fail (NM_IS_SETTING_802_1X (setting)); + + priv = NM_SETTING_802_1X_GET_PRIVATE (setting); + elt = g_slist_nth (priv->phase2_altsubject_matches, i); + g_return_if_fail (elt != NULL); + + g_free (elt->data); + priv->phase2_altsubject_matches = g_slist_delete_link (priv->phase2_altsubject_matches, elt); +} + +/** + * nm_setting_802_1x_clear_phase2_altsubject_matches: + * @setting: the #NMSetting8021x + * + * Clears all "phase 2" altSubjectName matches. + **/ +void +nm_setting_802_1x_clear_phase2_altsubject_matches (NMSetting8021x *setting) +{ + NMSetting8021xPrivate *priv; + + g_return_if_fail (NM_IS_SETTING_802_1X (setting)); + + priv = NM_SETTING_802_1X_GET_PRIVATE (setting); + nm_utils_slist_free (priv->phase2_altsubject_matches, g_free); + priv->phase2_altsubject_matches = NULL; +} + /** * nm_setting_802_1x_get_phase2_client_cert_scheme: * @setting: the #NMSetting8021x @@ -1396,8 +1664,7 @@ nm_setting_802_1x_set_private_key (NMSetting8021x *self, * @setting: the #NMSetting8021x * * Returns: the private key password used to decrypt the private key if - * previously set with nm_setting_802_1x_set_private_key_from_file(), - * nm_setting_802_1x_set_private_key_path(), or the + * previously set with nm_setting_802_1x_set_private_key(), or the * #NMSetting8021x:private-key-password property. **/ const char * @@ -1470,8 +1737,7 @@ nm_setting_802_1x_get_private_key_format (NMSetting8021x *setting) * @setting: the #NMSetting8021x * * Returns: the private key password used to decrypt the private key if - * previously set with nm_setting_802_1x_set_phase2_private_key_from_file(), - * nm_setting_802_1x_set_phase2_private_key_path(), or the + * previously set with nm_setting_802_1x_set_phase2_private_key() or the * #NMSetting8021x:phase2-private-key-password property. **/ const char * @@ -2267,15 +2533,19 @@ finalize (GObject *object) g_free (priv->identity); g_free (priv->anonymous_identity); g_free (priv->ca_path); + g_free (priv->subject_match); g_free (priv->phase1_peapver); g_free (priv->phase1_peaplabel); g_free (priv->phase1_fast_provisioning); g_free (priv->phase2_auth); g_free (priv->phase2_autheap); g_free (priv->phase2_ca_path); + g_free (priv->phase2_subject_match); g_free (priv->password); nm_utils_slist_free (priv->eap, g_free); + nm_utils_slist_free (priv->altsubject_matches, g_free); + nm_utils_slist_free (priv->phase2_altsubject_matches, g_free); if (priv->ca_cert) g_byte_array_free (priv->ca_cert, TRUE); @@ -2350,6 +2620,14 @@ set_property (GObject *object, guint prop_id, g_free (priv->ca_path); priv->ca_path = g_value_dup_string (value); break; + case PROP_SUBJECT_MATCH: + g_free (priv->subject_match); + priv->subject_match = g_value_dup_string (value); + break; + case PROP_ALTSUBJECT_MATCHES: + nm_utils_slist_free (priv->altsubject_matches, g_free); + priv->altsubject_matches = g_value_dup_boxed (value); + break; case PROP_CLIENT_CERT: if (priv->client_cert) { g_byte_array_free (priv->client_cert, TRUE); @@ -2398,6 +2676,14 @@ set_property (GObject *object, guint prop_id, g_free (priv->phase2_ca_path); priv->phase2_ca_path = g_value_dup_string (value); break; + case PROP_PHASE2_SUBJECT_MATCH: + g_free (priv->phase2_subject_match); + priv->phase2_subject_match = g_value_dup_string (value); + break; + case PROP_PHASE2_ALTSUBJECT_MATCHES: + nm_utils_slist_free (priv->phase2_altsubject_matches, g_free); + priv->phase2_altsubject_matches = g_value_dup_boxed (value); + break; case PROP_PHASE2_CLIENT_CERT: if (priv->phase2_client_cert) { g_byte_array_free (priv->phase2_client_cert, TRUE); @@ -2487,6 +2773,12 @@ get_property (GObject *object, guint prop_id, case PROP_CA_PATH: g_value_set_string (value, priv->ca_path); break; + case PROP_SUBJECT_MATCH: + g_value_set_string (value, priv->subject_match); + break; + case PROP_ALTSUBJECT_MATCHES: + g_value_set_boxed (value, priv->altsubject_matches); + break; case PROP_CLIENT_CERT: g_value_set_boxed (value, priv->client_cert); break; @@ -2511,6 +2803,12 @@ get_property (GObject *object, guint prop_id, case PROP_PHASE2_CA_PATH: g_value_set_string (value, priv->phase2_ca_path); break; + case PROP_PHASE2_SUBJECT_MATCH: + g_value_set_string (value, priv->phase2_subject_match); + break; + case PROP_PHASE2_ALTSUBJECT_MATCHES: + g_value_set_boxed (value, priv->phase2_altsubject_matches); + break; case PROP_PHASE2_CLIENT_CERT: g_value_set_boxed (value, priv->phase2_client_cert); break; @@ -2668,6 +2966,47 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class) NULL, G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE)); + /** + * NMSetting8021x:subject-match: + * + * Substring to be matched against the subject of the certificate + * presented by the authentication server. When unset, no + * verification of the authentication server certificate's subject + * is performed. + **/ + g_object_class_install_property + (object_class, PROP_SUBJECT_MATCH, + g_param_spec_string (NM_SETTING_802_1X_SUBJECT_MATCH, + "Subject match", + "Substring to be matched against the subject of " + "the certificate presented by the authentication " + "server. When unset, no verification of the " + "authentication server certificate's subject is " + "performed.", + NULL, + G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE)); + + /** + * NMSetting8021x:altsubject-matches: + * + * List of strings to be matched against the altSubjectName of the + * certificate presented by the authentication server. If the list + * is empty, no verification of the server certificate's + * altSubjectName is performed. + **/ + g_object_class_install_property + (object_class, PROP_ALTSUBJECT_MATCHES, + _nm_param_spec_specialized (NM_SETTING_802_1X_ALTSUBJECT_MATCHES, + "altSubjectName matches", + "List of strings to be matched against " + "the altSubjectName of the certificate " + "presented by the authentication server. " + "If the list is empty, no verification " + "of the server certificate's " + "altSubjectName is performed.", + DBUS_TYPE_G_LIST_OF_STRING, + G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE)); + /** * NMSetting8021x:client-cert: * @@ -2860,6 +3199,51 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class) NULL, G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE)); + /** + * NMSetting8021x:phase2-subject-match: + * + * Substring to be matched against the subject of the certificate + * presented by the authentication server during the inner "phase + * 2" authentication. When unset, no verification of the + * authentication server certificate's subject is performed. + **/ + g_object_class_install_property + (object_class, PROP_PHASE2_SUBJECT_MATCH, + g_param_spec_string (NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH, + "Phase2 subject match", + "Substring to be matched against the subject of " + "the certificate presented by the authentication " + "server during the inner 'phase2' " + "authentication. When unset, no verification of " + "the authentication server certificate's subject " + "is performed.", + NULL, + G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE)); + + /** + * NMSetting8021x:phase2-altsubject-matches: + * + * List of strings to be matched against the altSubjectName of the + * certificate presented by the authentication server during the + * inner "phase 2" authentication. If the list is empty, no + * verification of the server certificate's altSubjectName is + * performed. + **/ + g_object_class_install_property + (object_class, PROP_PHASE2_ALTSUBJECT_MATCHES, + _nm_param_spec_specialized (NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES, + "altSubjectName matches", + "List of strings to be matched against " + "List of strings to be matched against " + "the altSubjectName of the certificate " + "presented by the authentication server " + "during the inner 'phase 2' " + "authentication. If the list is empty, no " + "verification of the server certificate's " + "altSubjectName is performed.", + DBUS_TYPE_G_LIST_OF_STRING, + G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE)); + /** * NMSetting8021x:phase2-client-cert: * @@ -2874,7 +3258,7 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class) "Phase2 client certificate", "Contains the 'phase 2' client certificate if " "used by the EAP method specified in the " - "'phase2-eap' or 'phase2-autheap' properties. " + "'phase2-auth' or 'phase2-autheap' properties. " "Certificate data is specified using a 'scheme'; " "two are currently supported: blob and path. " "When using the blob scheme (which is backwards " @@ -2998,8 +3382,8 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class) * * Private key data used by "phase 2" inner authentication methods. * - * Contains the "phase 2" inner private key if the #NMSetting8021x:auth or - * #NMSetting8021x:phase2-autheap property is set to 'tls'. Setting this + * Contains the "phase 2" inner private key if the #NMSetting8021x:phase2-auth + * or #NMSetting8021x:phase2-autheap property is set to 'tls'. Setting this * property directly is discouraged; use the * nm_setting_802_1x_set_phase2_private_key() function instead. **/ @@ -3008,7 +3392,7 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class) _nm_param_spec_specialized (NM_SETTING_802_1X_PHASE2_PRIVATE_KEY, "Phase2 private key", "Contains the 'phase 2' inner private key when " - "the 'phase2-eap' or 'phase2-autheap' property " + "the 'phase2-auth' or 'phase2-autheap' property " "is set to 'tls'. Key data is specified using a " "'scheme'; two are currently supported: blob and " "path. When using the blob scheme and private " @@ -3077,9 +3461,8 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class) * #NMSetting8021x:phase2-ca-path properties using the system CA directory * specified at configure time with the --system-ca-path switch. The * certificates in this directory are added to the verification chain in - * addition to any certificates specified by the #NMSetting8021x:ca-cert, - * #NMSetting8021x:ca-cert-path, #NMSetting8021x:phase2-ca-cert and - * #NMSetting8021x:phase2-ca-cert-path properties. + * addition to any certificates specified by the #NMSetting8021x:ca-cert + * and #NMSetting8021x:phase2-ca-cert properties. **/ g_object_class_install_property (object_class, PROP_SYSTEM_CA_CERTS, diff --git a/libnm-util/nm-setting-8021x.h b/libnm-util/nm-setting-8021x.h index f3e61e55..a6016aea 100644 --- a/libnm-util/nm-setting-8021x.h +++ b/libnm-util/nm-setting-8021x.h @@ -78,8 +78,14 @@ typedef enum { #define NM_SETTING_802_1X_SETTING_NAME "802-1x" -typedef enum -{ +/** + * NMSetting8021xError: + * @NM_SETTING_802_1X_ERROR_UNKNOWN: unknown or unclassified error + * @NM_SETTING_802_1X_ERROR_INVALID_PROPERTY: the property was invalid + * @NM_SETTING_802_1X_ERROR_MISSING_PROPERTY: the property was missing and is + * required + */ +typedef enum { NM_SETTING_802_1X_ERROR_UNKNOWN = 0, NM_SETTING_802_1X_ERROR_INVALID_PROPERTY, NM_SETTING_802_1X_ERROR_MISSING_PROPERTY @@ -97,6 +103,8 @@ GQuark nm_setting_802_1x_error_quark (void); #define NM_SETTING_802_1X_ANONYMOUS_IDENTITY "anonymous-identity" #define NM_SETTING_802_1X_CA_CERT "ca-cert" #define NM_SETTING_802_1X_CA_PATH "ca-path" +#define NM_SETTING_802_1X_SUBJECT_MATCH "subject-match" +#define NM_SETTING_802_1X_ALTSUBJECT_MATCHES "altsubject-matches" #define NM_SETTING_802_1X_CLIENT_CERT "client-cert" #define NM_SETTING_802_1X_PHASE1_PEAPVER "phase1-peapver" #define NM_SETTING_802_1X_PHASE1_PEAPLABEL "phase1-peaplabel" @@ -105,6 +113,8 @@ GQuark nm_setting_802_1x_error_quark (void); #define NM_SETTING_802_1X_PHASE2_AUTHEAP "phase2-autheap" #define NM_SETTING_802_1X_PHASE2_CA_CERT "phase2-ca-cert" #define NM_SETTING_802_1X_PHASE2_CA_PATH "phase2-ca-path" +#define NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH "phase2-subject-match" +#define NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES "phase2-altsubject-matches" #define NM_SETTING_802_1X_PHASE2_CLIENT_CERT "phase2-client-cert" #define NM_SETTING_802_1X_PASSWORD "password" #define NM_SETTING_802_1X_PASSWORD_FLAGS "password-flags" @@ -179,6 +189,17 @@ gboolean nm_setting_802_1x_set_ca_cert (NMSetting8 NMSetting8021xCKFormat *out_format, GError **error); +const char * nm_setting_802_1x_get_subject_match (NMSetting8021x *setting); + +guint32 nm_setting_802_1x_get_num_altsubject_matches (NMSetting8021x *setting); +const char * nm_setting_802_1x_get_altsubject_match (NMSetting8021x *setting, + guint32 i); +gboolean nm_setting_802_1x_add_altsubject_match (NMSetting8021x *setting, + const char *altsubject_match); +void nm_setting_802_1x_remove_altsubject_match (NMSetting8021x *setting, + guint32 i); +void nm_setting_802_1x_clear_altsubject_matches (NMSetting8021x *setting); + NMSetting8021xCKScheme nm_setting_802_1x_get_client_cert_scheme (NMSetting8021x *setting); const GByteArray * nm_setting_802_1x_get_client_cert_blob (NMSetting8021x *setting); const char * nm_setting_802_1x_get_client_cert_path (NMSetting8021x *setting); @@ -207,6 +228,17 @@ gboolean nm_setting_802_1x_set_phase2_ca_cert (NMSetting8 NMSetting8021xCKFormat *out_format, GError **error); +const char * nm_setting_802_1x_get_phase2_subject_match (NMSetting8021x *setting); + +guint32 nm_setting_802_1x_get_num_phase2_altsubject_matches (NMSetting8021x *setting); +const char * nm_setting_802_1x_get_phase2_altsubject_match (NMSetting8021x *setting, + guint32 i); +gboolean nm_setting_802_1x_add_phase2_altsubject_match (NMSetting8021x *setting, + const char *phase2_altsubject_match); +void nm_setting_802_1x_remove_phase2_altsubject_match (NMSetting8021x *setting, + guint32 i); +void nm_setting_802_1x_clear_phase2_altsubject_matches (NMSetting8021x *setting); + NMSetting8021xCKScheme nm_setting_802_1x_get_phase2_client_cert_scheme (NMSetting8021x *setting); 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); diff --git a/libnm-util/nm-setting-bluetooth.c b/libnm-util/nm-setting-bluetooth.c index e3cebe2e..1b1178b2 100644 --- a/libnm-util/nm-setting-bluetooth.c +++ b/libnm-util/nm-setting-bluetooth.c @@ -34,6 +34,24 @@ #include "nm-setting-cdma.h" #include "nm-setting-gsm.h" +/** + * SECTION:nm-setting-bluetooth + * @short_description: Describes Bluetooth connection properties + * @include: nm-setting-bluetooth.h + * + * The #NMSettingBluetooth object is a #NMSetting subclass that describes + * properties necessary for connection to devices that provide network + * connections via the Bluetooth Dial-Up Networking (DUN) and Network Access + * Point (NAP) profiles. + **/ + +/** + * nm_setting_bluetooth_error_quark: + * + * Registers an error quark for #NMSettingBluetooth if necessary. + * + * Returns: the error quark used for #NMSettingBluetooth errors. + **/ GQuark nm_setting_bluetooth_error_quark (void) { @@ -83,11 +101,27 @@ enum { LAST_PROP }; +/** + * nm_setting_bluetooth_new: + * + * Creates a new #NMSettingBluetooth object with default values. + * + * Returns: (transfer full): the new empty #NMSettingBluetooth object + **/ NMSetting *nm_setting_bluetooth_new (void) { return (NMSetting *) g_object_new (NM_TYPE_SETTING_BLUETOOTH, NULL); } +/** + * nm_setting_bluetooth_get_connection_type: + * @setting: the #NMSettingBluetooth + * + * Returns the connection method for communicating with the remote device (i.e. + * either DUN to a DUN-capable device or PANU to a NAP-capable device). + * + * Returns: the type, either %NM_SETTING_BLUETOOTH_PANU or %NM_SETTING_BLUETOOTH_DUN + **/ const char * nm_setting_bluetooth_get_connection_type (NMSettingBluetooth *setting) { @@ -96,6 +130,15 @@ nm_setting_bluetooth_get_connection_type (NMSettingBluetooth *setting) return NM_SETTING_BLUETOOTH_GET_PRIVATE (setting)->type; } +/** + * nm_setting_bluetooth_get_bdaddr: + * @setting: the #NMSettingBluetooth + * + * Gets the Bluetooth address of the remote device which this setting + * describes a connection to. + * + * Returns: the Bluetooth address + **/ const GByteArray * nm_setting_bluetooth_get_bdaddr (NMSettingBluetooth *setting) { @@ -266,8 +309,8 @@ nm_setting_bluetooth_class_init (NMSettingBluetoothClass *setting_class) /** * NMSettingBluetooth:type: * - * Either 'dun' for Dial-Up Networking connections (not yet supported) or - * 'panu' for Personal Area Networking connections. + * Either 'dun' for Dial-Up Networking connections or 'panu' for Personal + * Area Networking connections to devices supporting the NAP profile. **/ g_object_class_install_property (object_class, PROP_TYPE, diff --git a/libnm-util/nm-setting-bluetooth.h b/libnm-util/nm-setting-bluetooth.h index e41183bc..a17a72bf 100644 --- a/libnm-util/nm-setting-bluetooth.h +++ b/libnm-util/nm-setting-bluetooth.h @@ -40,8 +40,17 @@ G_BEGIN_DECLS #define NM_SETTING_BLUETOOTH_SETTING_NAME "bluetooth" -typedef enum -{ +/** + * NMSettingBluetoothError: + * @NM_SETTING_BLUETOOTH_ERROR_UNKNOWN: unknown or unclassified error + * @NM_SETTING_BLUETOOTH_ERROR_INVALID_PROPERTY: the property was invalid + * @NM_SETTING_BLUETOOTH_ERROR_MISSING_PROPERTY: the property was missing and is + * required + * @NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND: the connection + * did not contain a required type setting, ie for DUN connections the connection + * must also contain an #NMSettingGsm or #NMSettingCdma as appropriate + */ +typedef enum { NM_SETTING_BLUETOOTH_ERROR_UNKNOWN = 0, NM_SETTING_BLUETOOTH_ERROR_INVALID_PROPERTY, NM_SETTING_BLUETOOTH_ERROR_MISSING_PROPERTY, @@ -57,7 +66,20 @@ GQuark nm_setting_bluetooth_error_quark (void); #define NM_SETTING_BLUETOOTH_BDADDR "bdaddr" #define NM_SETTING_BLUETOOTH_TYPE "type" +/** + * NM_SETTING_BLUETOOTH_TYPE_DUN: + * + * Connection type describing a connection to devices that support the Bluetooth + * DUN profile. + */ #define NM_SETTING_BLUETOOTH_TYPE_DUN "dun" + +/** + * NM_SETTING_BLUETOOTH_TYPE_PANU: + * + * Connection type describing a connection to devices that support the Bluetooth + * NAP (Network Access Point) protocol, which accepts connections via PANU. + */ #define NM_SETTING_BLUETOOTH_TYPE_PANU "panu" typedef struct { diff --git a/libnm-util/nm-setting-cdma.h b/libnm-util/nm-setting-cdma.h index 8abfce4a..d0a5de4c 100644 --- a/libnm-util/nm-setting-cdma.h +++ b/libnm-util/nm-setting-cdma.h @@ -39,8 +39,16 @@ G_BEGIN_DECLS #define NM_SETTING_CDMA_SETTING_NAME "cdma" -typedef enum -{ +/** + * NMSettingCdmaError: + * @NM_SETTING_CDMA_ERROR_UNKNOWN: unknown or unclassified error + * @NM_SETTING_CDMA_ERROR_INVALID_PROPERTY: the property was invalid + * @NM_SETTING_CDMA_ERROR_MISSING_PROPERTY: the property was missing and is + * required + * @NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING: the required #NMSettingSerial + * is missing in the connection + */ +typedef enum { NM_SETTING_CDMA_ERROR_UNKNOWN = 0, NM_SETTING_CDMA_ERROR_INVALID_PROPERTY, NM_SETTING_CDMA_ERROR_MISSING_PROPERTY, diff --git a/libnm-util/nm-setting-connection.c b/libnm-util/nm-setting-connection.c index b3bf4443..e9030b10 100644 --- a/libnm-util/nm-setting-connection.c +++ b/libnm-util/nm-setting-connection.c @@ -562,6 +562,21 @@ verify (NMSetting *setting, GSList *all_settings, GError **error) return TRUE; } +static gboolean +compare_property (NMSetting *setting, + NMSetting *other, + const GParamSpec *prop_spec, + NMSettingCompareFlags flags) +{ + /* Handle ignore ID */ + if ( (flags & NM_SETTING_COMPARE_FLAG_IGNORE_ID) + && g_strcmp0 (prop_spec->name, NM_SETTING_CONNECTION_ID) == 0) + return TRUE; + + /* Otherwise chain up to parent to handle generic compare */ + return NM_SETTING_CLASS (nm_setting_connection_parent_class)->compare_property (setting, other, prop_spec, flags); +} + static void nm_setting_connection_init (NMSettingConnection *setting) { @@ -693,6 +708,7 @@ nm_setting_connection_class_init (NMSettingConnectionClass *setting_class) object_class->get_property = get_property; object_class->finalize = finalize; parent_class->verify = verify; + parent_class->compare_property = compare_property; /* Properties */ diff --git a/libnm-util/nm-setting-gsm.c b/libnm-util/nm-setting-gsm.c index 0ece448b..7033541b 100644 --- a/libnm-util/nm-setting-gsm.c +++ b/libnm-util/nm-setting-gsm.c @@ -29,6 +29,23 @@ #include "nm-utils.h" #include "nm-setting-private.h" +/** + * SECTION:nm-setting-gsm + * @short_description: Describes GSM/3GPP-based mobile broadband properties + * @include: nm-setting-gsm.h + * + * The #NMSettingGsm object is a #NMSetting subclass that describes + * properties that allow connections to 3GPP-based mobile broadband + * networks, including those using GPRS/EDGE and UMTS/HSPA technology. + */ + +/** + * nm_setting_gsm_error_quark: + * + * Registers an error quark for #NMSettingGsm if necessary. + * + * Returns: the error quark used for #NMSettingGsm errors. + **/ GQuark nm_setting_gsm_error_quark (void) { @@ -103,12 +120,25 @@ enum { LAST_PROP }; +/** + * nm_setting_gsm_new: + * + * Creates a new #NMSettingGsm object with default values. + * + * Returns: the new empty #NMSettingGsm object + **/ NMSetting * nm_setting_gsm_new (void) { return (NMSetting *) g_object_new (NM_TYPE_SETTING_GSM, NULL); } +/** + * nm_setting_gsm_get_number: + * @setting: the #NMSettingGsm + * + * Returns: the #NMSettingGsm:number property of the setting + **/ const char * nm_setting_gsm_get_number (NMSettingGsm *setting) { @@ -117,6 +147,12 @@ nm_setting_gsm_get_number (NMSettingGsm *setting) return NM_SETTING_GSM_GET_PRIVATE (setting)->number; } +/** + * nm_setting_gsm_get_username: + * @setting: the #NMSettingGsm + * + * Returns: the #NMSettingGsm:username property of the setting + **/ const char * nm_setting_gsm_get_username (NMSettingGsm *setting) { @@ -125,6 +161,12 @@ nm_setting_gsm_get_username (NMSettingGsm *setting) return NM_SETTING_GSM_GET_PRIVATE (setting)->username; } +/** + * nm_setting_gsm_get_password: + * @setting: the #NMSettingGsm + * + * Returns: the #NMSettingGsm:password property of the setting + **/ const char * nm_setting_gsm_get_password (NMSettingGsm *setting) { @@ -147,6 +189,12 @@ nm_setting_gsm_get_password_flags (NMSettingGsm *setting) return NM_SETTING_GSM_GET_PRIVATE (setting)->password_flags; } +/** + * nm_setting_gsm_get_apn: + * @setting: the #NMSettingGsm + * + * Returns: the #NMSettingGsm:apn property of the setting + **/ const char * nm_setting_gsm_get_apn (NMSettingGsm *setting) { @@ -155,6 +203,12 @@ nm_setting_gsm_get_apn (NMSettingGsm *setting) return NM_SETTING_GSM_GET_PRIVATE (setting)->apn; } +/** + * nm_setting_gsm_get_network_id: + * @setting: the #NMSettingGsm + * + * Returns: the #NMSettingGsm:network-id property of the setting + **/ const char * nm_setting_gsm_get_network_id (NMSettingGsm *setting) { @@ -163,6 +217,12 @@ nm_setting_gsm_get_network_id (NMSettingGsm *setting) return NM_SETTING_GSM_GET_PRIVATE (setting)->network_id; } +/** + * nm_setting_gsm_get_network_type: + * @setting: the #NMSettingGsm + * + * Returns: the #NMSettingGsm:network-type property of the setting + **/ int nm_setting_gsm_get_network_type (NMSettingGsm *setting) { @@ -171,6 +231,12 @@ nm_setting_gsm_get_network_type (NMSettingGsm *setting) return NM_SETTING_GSM_GET_PRIVATE (setting)->network_type; } +/** + * nm_setting_gsm_get_allowed_bands: + * @setting: the #NMSettingGsm + * + * Returns: the #NMSettingGsm:allowed-bands property of the setting + **/ guint32 nm_setting_gsm_get_allowed_bands (NMSettingGsm *setting) { @@ -179,6 +245,12 @@ nm_setting_gsm_get_allowed_bands (NMSettingGsm *setting) return NM_SETTING_GSM_GET_PRIVATE (setting)->allowed_bands; } +/** + * nm_setting_gsm_get_pin: + * @setting: the #NMSettingGsm + * + * Returns: the #NMSettingGsm:pin property of the setting + **/ const char * nm_setting_gsm_get_pin (NMSettingGsm *setting) { @@ -201,6 +273,12 @@ nm_setting_gsm_get_pin_flags (NMSettingGsm *setting) return NM_SETTING_GSM_GET_PRIVATE (setting)->pin_flags; } +/** + * nm_setting_gsm_get_home_only: + * @setting: the #NMSettingGsm + * + * Returns: the #NMSettingGsm:home-only property of the setting + **/ gboolean nm_setting_gsm_get_home_only (NMSettingGsm *setting) { @@ -481,19 +559,20 @@ nm_setting_gsm_class_init (NMSettingGsmClass *setting_class) * NMSettingGsm:number: * * Number to dial when establishing a PPP data session with the GSM-based - * mobile broadband network. In most cases, leave the number blank and a - * number selecting the APN specified in the 'apn' property will be used - * automatically when required. + * mobile broadband network. Many modems do not require PPP for connections + * to the mobile network and thus this property should be left blank, which + * allows NetworkManager to select the appropriate settings automatically. **/ g_object_class_install_property (object_class, PROP_NUMBER, g_param_spec_string (NM_SETTING_GSM_NUMBER, "Number", - "Number to dial when establishing a PPP data session " - "with the GSM-based mobile broadband network. In most " - "cases, leave the number blank and a number selecting " - "the APN specified in the 'apn' property will be used " - "automatically when required.", + "Number to dial when establishing a PPP data session " + "with the GSM-based mobile broadband network. Many " + "modems do not require PPP for connections to the " + "mobile network and thus this property should be left " + "blank, which allows NetworkManager to select the " + "appropriate settings automatically.", NULL, G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE)); @@ -599,9 +678,9 @@ nm_setting_gsm_class_init (NMSettingGsmClass *setting_class) * NMSettingGsm:network-type: * * Network preference to force the device to only use specific network - * technologies. The permitted values are: -1: any, 0: 3G only, - * 1: GPRS/EDGE only, 2: prefer 3G, and 3: prefer 2G. Note that not all - * devices allow network preference control. + * technologies. Permitted values are those specified by + * #NMSettingGsmNetworkType. Note that not all devices allow network + * preference control. **/ g_object_class_install_property (object_class, PROP_NETWORK_TYPE, @@ -621,7 +700,8 @@ nm_setting_gsm_class_init (NMSettingGsmClass *setting_class) * NMSettingGsm:allowed-bands: * * Bitfield of allowed frequency bands. Note that not all devices allow - * frequency band control. + * frequency band control. Permitted values are those specified by + * #NMSettingGsmNetworkBand. **/ g_object_class_install_property (object_class, PROP_ALLOWED_BANDS, @@ -643,7 +723,8 @@ nm_setting_gsm_class_init (NMSettingGsmClass *setting_class) || NM_SETTING_GSM_BAND_U850 || NM_SETTING_GSM_BAND_U900 || NM_SETTING_GSM_BAND_U17IX - || NM_SETTING_GSM_BAND_U1900, + || NM_SETTING_GSM_BAND_U1900 + || NM_SETTING_GSM_BAND_U2600, NM_SETTING_GSM_BAND_ANY, G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE)); @@ -667,7 +748,7 @@ nm_setting_gsm_class_init (NMSettingGsmClass *setting_class) /** * NMSettingGsm:pin-flags: * - * Flags indicating how to handle #NMSettingGsm:pin:. + * Flags indicating how to handle #NMSettingGsm:pin. **/ g_object_class_install_property (object_class, PROP_PIN_FLAGS, g_param_spec_uint (NM_SETTING_GSM_PIN_FLAGS, diff --git a/libnm-util/nm-setting-gsm.h b/libnm-util/nm-setting-gsm.h index 855787c2..6459a4ab 100644 --- a/libnm-util/nm-setting-gsm.h +++ b/libnm-util/nm-setting-gsm.h @@ -39,8 +39,16 @@ G_BEGIN_DECLS #define NM_SETTING_GSM_SETTING_NAME "gsm" -typedef enum -{ +/** + * NMSettingGsmError: + * @NM_SETTING_GSM_ERROR_UNKNOWN: unknown or unclassified error + * @NM_SETTING_GSM_ERROR_INVALID_PROPERTY: the property was invalid + * @NM_SETTING_GSM_ERROR_MISSING_PROPERTY: the property was missing and is + * required + * @NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING: the required #NMSettingSerial + * is missing in the connection + */ +typedef enum { NM_SETTING_GSM_ERROR_UNKNOWN = 0, NM_SETTING_GSM_ERROR_INVALID_PROPERTY, NM_SETTING_GSM_ERROR_MISSING_PROPERTY, @@ -65,6 +73,21 @@ GQuark nm_setting_gsm_error_quark (void); #define NM_SETTING_GSM_PIN_FLAGS "pin-flags" #define NM_SETTING_GSM_HOME_ONLY "home-only" +/** + * NMSettingGsmNetworkType: + * @NM_SETTING_GSM_NETWORK_TYPE_ANY: any access technology may be used + * @NM_SETTING_GSM_NETWORK_TYPE_UMTS_HSPA: only 3G-type (UMTS and HSPA) + * technologies may be used + * @NM_SETTING_GSM_NETWORK_TYPE_GPRS_EDGE: only 2G-type (GPRS and EDGE) + * technologies may be used + * @NM_SETTING_GSM_NETWORK_TYPE_PREFER_UMTS_HSPA: 3G-type technologies are + * preferred but 2G-type technologies may be used as a fallback + * @NM_SETTING_GSM_NETWORK_TYPE_PREFER_GPRS_EDGE: 2G-type technologies are + * preferred but 3G-type technologies may be used as a fallback + * + * #NMSettingGsmNetworkType values indicate the allowed access technologies + * the device may use when connecting to this network. + */ typedef enum { NM_SETTING_GSM_NETWORK_TYPE_ANY = -1, NM_SETTING_GSM_NETWORK_TYPE_UMTS_HSPA = 0, @@ -73,6 +96,27 @@ typedef enum { NM_SETTING_GSM_NETWORK_TYPE_PREFER_GPRS_EDGE = 3 } NMSettingGsmNetworkType; +/** + * NMSettingGsmNetworkBand: + * @NM_SETTING_GSM_BAND_UNKNOWN: unknown or no band specified + * @NM_SETTING_GSM_BAND_ANY: any band is allowed + * @NM_SETTING_GSM_BAND_EGSM: 900 MHz original GSM band + * @NM_SETTING_GSM_BAND_DCS: 1800 MHz DCS band + * @NM_SETTING_GSM_BAND_PCS: US 1900 MHz PCS band + * @NM_SETTING_GSM_BAND_G850: US 850 MHz Cellular band + * @NM_SETTING_GSM_BAND_U2100: WCDMA 3GPP UMTS 2100 MHz (Class I) + * @NM_SETTING_GSM_BAND_U1800: WCDMA 3GPP UMTS 1800 MHz (Class III) + * @NM_SETTING_GSM_BAND_U17IV: WCDMA 3GPP AWS 1700/2100 MHz (Class IV) + * @NM_SETTING_GSM_BAND_U800: WCDMA 3GPP UMTS 800 MHz (Class VI) + * @NM_SETTING_GSM_BAND_U850: WCDMA 3GPP UMTS 850 MHz (Class V) + * @NM_SETTING_GSM_BAND_U900: WCDMA 3GPP UMTS 900 MHz (Class VIII) + * @NM_SETTING_GSM_BAND_U17IX: WCDMA 3GPP UMTS 1700 MHz (Class IX) + * @NM_SETTING_GSM_BAND_U1900: WCDMA 3GPP UMTS 1900 MHz (Class II) + * @NM_SETTING_GSM_BAND_U2600: WCDMA 3GPP UMTS 2600 MHz (Class VII, internal) + * + * #NMSettingGsmNetworkBand values indicate the allowed frequency bands + * the device may use when connecting to this network. + */ typedef enum { NM_SETTING_GSM_BAND_UNKNOWN = 0x00000000, NM_SETTING_GSM_BAND_ANY = 0x00000001, @@ -88,6 +132,7 @@ typedef enum { NM_SETTING_GSM_BAND_U900 = 0x00000400, /* WCDMA 3GPP UMTS 900 MHz (Class VIII) */ NM_SETTING_GSM_BAND_U17IX = 0x00000800, /* WCDMA 3GPP UMTS 1700 MHz (Class IX) */ NM_SETTING_GSM_BAND_U1900 = 0x00001000, /* WCDMA 3GPP UMTS 1900 MHz (Class II) */ + NM_SETTING_GSM_BAND_U2600 = 0x00002000, /* WCDMA 3GPP UMTS 2600 MHz (Class VII, internal) */ } NMSettingGsmNetworkBand; typedef struct { diff --git a/libnm-util/nm-setting-ip4-config.c b/libnm-util/nm-setting-ip4-config.c index 6961050d..6b164ea8 100644 --- a/libnm-util/nm-setting-ip4-config.c +++ b/libnm-util/nm-setting-ip4-config.c @@ -31,6 +31,22 @@ #include "nm-utils.h" #include "nm-dbus-glib-types.h" +/** + * SECTION:nm-setting-ip4-config + * @short_description: Describes IPv4 addressing, routing, and name service properties + * @include: nm-setting-ip4-config.h + * + * The #NMSettingIP4Config object is a #NMSetting subclass that describes + * properties related to IPv4 addressing, routing, and Domain Name Service + **/ + +/** + * nm_setting_ip4_config_error_quark: + * + * Registers an error quark for #NMSettingIP4Config if necessary. + * + * Returns: the error quark used for #NMSettingIP4Config errors. + **/ GQuark nm_setting_ip4_config_error_quark (void) { @@ -108,12 +124,25 @@ enum { LAST_PROP }; +/** + * nm_setting_ip4_config_new: + * + * Creates a new #NMSettingIP4Config object with default values. + * + * Returns: (transfer full): the new empty #NMSettingIP4Config object + **/ NMSetting * nm_setting_ip4_config_new (void) { return (NMSetting *) g_object_new (NM_TYPE_SETTING_IP4_CONFIG, NULL); } +/** + * nm_setting_ip4_config_get_method: + * @setting: the #NMSettingIP4Config + * + * Returns: the #NMSettingIP4Config:method property of the setting + **/ const char * nm_setting_ip4_config_get_method (NMSettingIP4Config *setting) { @@ -122,6 +151,12 @@ nm_setting_ip4_config_get_method (NMSettingIP4Config *setting) return NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting)->method; } +/** + * nm_setting_ip4_config_get_num_dns: + * @setting: the #NMSettingIP4Config + * + * Returns: the number of configured DNS servers + **/ guint32 nm_setting_ip4_config_get_num_dns (NMSettingIP4Config *setting) { @@ -130,6 +165,14 @@ nm_setting_ip4_config_get_num_dns (NMSettingIP4Config *setting) return NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting)->dns->len; } +/** + * nm_setting_ip4_config_get_dns: + * @setting: the #NMSettingIP4Config + * @i: index number of the DNS server to return + * + * Returns: the IPv4 address (network byte order) of the DNS server at index + * @i + **/ guint32 nm_setting_ip4_config_get_dns (NMSettingIP4Config *setting, guint32 i) { @@ -143,6 +186,16 @@ nm_setting_ip4_config_get_dns (NMSettingIP4Config *setting, guint32 i) return g_array_index (priv->dns, guint32, i); } +/** + * nm_setting_ip4_config_add_dns: + * @setting: the #NMSettingIP4Config + * @dns: the IPv4 address (network byte order) of the DNS server to add + * + * Adds a new DNS server to the setting. + * + * Returns: %TRUE if the DNS server was added; %FALSE if the server was already + * known + **/ gboolean nm_setting_ip4_config_add_dns (NMSettingIP4Config *setting, guint32 dns) { @@ -161,6 +214,13 @@ nm_setting_ip4_config_add_dns (NMSettingIP4Config *setting, guint32 dns) return TRUE; } +/** + * nm_setting_ip4_config_remove_dns: + * @setting: the #NMSettingIP4Config + * @i: index number of the DNS server to remove + * + * Removes the DNS server at index @i. + **/ void nm_setting_ip4_config_remove_dns (NMSettingIP4Config *setting, guint32 i) { @@ -174,6 +234,12 @@ nm_setting_ip4_config_remove_dns (NMSettingIP4Config *setting, guint32 i) g_array_remove_index (priv->dns, i); } +/** + * nm_setting_ip4_config_clear_dns: + * @setting: the #NMSettingIP4Config + * + * Removes all configured DNS servers. + **/ void nm_setting_ip4_config_clear_dns (NMSettingIP4Config *setting) { @@ -185,6 +251,12 @@ nm_setting_ip4_config_clear_dns (NMSettingIP4Config *setting) g_array_remove_range (priv->dns, 0, priv->dns->len); } +/** + * nm_setting_ip4_config_get_num_dns_searches: + * @setting: the #NMSettingIP4Config + * + * Returns: the number of configured DNS search domains + **/ guint32 nm_setting_ip4_config_get_num_dns_searches (NMSettingIP4Config *setting) { @@ -193,6 +265,13 @@ nm_setting_ip4_config_get_num_dns_searches (NMSettingIP4Config *setting) return g_slist_length (NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting)->dns_search); } +/** + * nm_setting_ip4_config_get_dns_search: + * @setting: the #NMSettingIP4Config + * @i: index number of the DNS search domain to return + * + * Returns: the DNS search domain at index @i + **/ const char * nm_setting_ip4_config_get_dns_search (NMSettingIP4Config *setting, guint32 i) { @@ -206,6 +285,16 @@ nm_setting_ip4_config_get_dns_search (NMSettingIP4Config *setting, guint32 i) return (const char *) g_slist_nth_data (priv->dns_search, i); } +/** + * nm_setting_ip4_config_add_dns_search: + * @setting: the #NMSettingIP4Config + * @dns_search: the search domain to add + * + * Adds a new DNS search domain to the setting. + * + * Returns: %TRUE if the DNS search domain was added; %FALSE if the search + * domain was already known + **/ gboolean nm_setting_ip4_config_add_dns_search (NMSettingIP4Config *setting, const char *dns_search) @@ -227,6 +316,13 @@ nm_setting_ip4_config_add_dns_search (NMSettingIP4Config *setting, return TRUE; } +/** + * nm_setting_ip4_config_remove_dns_search: + * @setting: the #NMSettingIP4Config + * @i: index number of the DNS search domain + * + * Removes the DNS search domain at index @i. + **/ void nm_setting_ip4_config_remove_dns_search (NMSettingIP4Config *setting, guint32 i) { @@ -243,6 +339,12 @@ nm_setting_ip4_config_remove_dns_search (NMSettingIP4Config *setting, guint32 i) priv->dns_search = g_slist_delete_link (priv->dns_search, elt); } +/** + * nm_setting_ip4_config_clear_dns_searches: + * @setting: the #NMSettingIP4Config + * + * Removes all configured DNS search domains. + **/ void nm_setting_ip4_config_clear_dns_searches (NMSettingIP4Config *setting) { @@ -252,6 +354,12 @@ nm_setting_ip4_config_clear_dns_searches (NMSettingIP4Config *setting) NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting)->dns_search = NULL; } +/** + * nm_setting_ip4_config_get_num_addresses: + * @setting: the #NMSettingIP4Config + * + * Returns: the number of configured addresses + **/ guint32 nm_setting_ip4_config_get_num_addresses (NMSettingIP4Config *setting) { @@ -260,6 +368,13 @@ nm_setting_ip4_config_get_num_addresses (NMSettingIP4Config *setting) return g_slist_length (NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting)->addresses); } +/** + * nm_setting_ip4_config_get_address: + * @setting: the #NMSettingIP4Config + * @i: index number of the address to return + * + * Returns: the address at index @i + **/ NMIP4Address * nm_setting_ip4_config_get_address (NMSettingIP4Config *setting, guint32 i) { @@ -273,6 +388,17 @@ nm_setting_ip4_config_get_address (NMSettingIP4Config *setting, guint32 i) return (NMIP4Address *) g_slist_nth_data (priv->addresses, i); } +/** + * nm_setting_ip4_config_add_address: + * @setting: the #NMSettingIP4Config + * @address: the new address to add + * + * Adds a new IPv4 address and associated information to the setting. The + * given address is duplicated internally and is not changed by this function. + * + * Returns: %TRUE if the address was added; %FALSE if the address was already + * known. + **/ gboolean nm_setting_ip4_config_add_address (NMSettingIP4Config *setting, NMIP4Address *address) @@ -297,6 +423,13 @@ nm_setting_ip4_config_add_address (NMSettingIP4Config *setting, return TRUE; } +/** + * nm_setting_ip4_config_remove_address: + * @setting: the #NMSettingIP4Config + * @i: index number of the address to remove + * + * Removes the address at index @i. + **/ void nm_setting_ip4_config_remove_address (NMSettingIP4Config *setting, guint32 i) { @@ -313,6 +446,12 @@ nm_setting_ip4_config_remove_address (NMSettingIP4Config *setting, guint32 i) priv->addresses = g_slist_delete_link (priv->addresses, elt); } +/** + * nm_setting_ip4_config_clear_addresses: + * @setting: the #NMSettingIP4Config + * + * Removes all configured addresses. + **/ void nm_setting_ip4_config_clear_addresses (NMSettingIP4Config *setting) { @@ -324,6 +463,12 @@ nm_setting_ip4_config_clear_addresses (NMSettingIP4Config *setting) priv->addresses = NULL; } +/** + * nm_setting_ip4_config_get_num_routes: + * @setting: the #NMSettingIP4Config + * + * Returns: the number of configured routes + **/ guint32 nm_setting_ip4_config_get_num_routes (NMSettingIP4Config *setting) { @@ -332,6 +477,13 @@ nm_setting_ip4_config_get_num_routes (NMSettingIP4Config *setting) return g_slist_length (NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting)->routes); } +/** + * nm_setting_ip4_config_get_route: + * @setting: the #NMSettingIP4Config + * @i: index number of the route to return + * + * Returns: the route at index @i + **/ NMIP4Route * nm_setting_ip4_config_get_route (NMSettingIP4Config *setting, guint32 i) { @@ -345,6 +497,16 @@ nm_setting_ip4_config_get_route (NMSettingIP4Config *setting, guint32 i) return (NMIP4Route *) g_slist_nth_data (priv->routes, i); } +/** + * nm_setting_ip4_config_add_route: + * @setting: the #NMSettingIP4Config + * @route: the route to add + * + * Adds a new IPv4 route and associated information to the setting. The + * given route is duplicated internally and is not changed by this function. + * + * Returns: %TRUE if the route was added; %FALSE if the route was already known. + **/ gboolean nm_setting_ip4_config_add_route (NMSettingIP4Config *setting, NMIP4Route *route) @@ -369,6 +531,13 @@ nm_setting_ip4_config_add_route (NMSettingIP4Config *setting, return TRUE; } +/** + * nm_setting_ip4_config_remove_route: + * @setting: the #NMSettingIP4Config + * @i: index number of the route + * + * Removes the route at index @i. + **/ void nm_setting_ip4_config_remove_route (NMSettingIP4Config *setting, guint32 i) { @@ -385,6 +554,12 @@ nm_setting_ip4_config_remove_route (NMSettingIP4Config *setting, guint32 i) priv->routes = g_slist_delete_link (priv->routes, elt); } +/** + * nm_setting_ip4_config_clear_routes: + * @setting: the #NMSettingIP4Config + * + * Removes all configured routes. + **/ void nm_setting_ip4_config_clear_routes (NMSettingIP4Config *setting) { @@ -396,6 +571,16 @@ nm_setting_ip4_config_clear_routes (NMSettingIP4Config *setting) priv->routes = NULL; } +/** + * nm_setting_ip4_config_get_ignore_auto_routes: + * @setting: the #NMSettingIP4Config + * + * Returns the value contained in the #NMSettingIP4Config:ignore-auto-routes + * property. + * + * Returns: %TRUE if automatically configured (ie via DHCP) routes should be + * ignored. + **/ gboolean nm_setting_ip4_config_get_ignore_auto_routes (NMSettingIP4Config *setting) { @@ -404,6 +589,16 @@ nm_setting_ip4_config_get_ignore_auto_routes (NMSettingIP4Config *setting) return NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting)->ignore_auto_routes; } +/** + * nm_setting_ip4_config_get_ignore_auto_dns: + * @setting: the #NMSettingIP4Config + * + * Returns the value contained in the #NMSettingIP4Config:ignore-auto-dns + * property. + * + * Returns: %TRUE if automatically configured (ie via DHCP) DNS information + * should be ignored. + **/ gboolean nm_setting_ip4_config_get_ignore_auto_dns (NMSettingIP4Config *setting) { @@ -412,6 +607,16 @@ nm_setting_ip4_config_get_ignore_auto_dns (NMSettingIP4Config *setting) return NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting)->ignore_auto_dns; } +/** + * nm_setting_ip4_config_get_dhcp_client_id: + * @setting: the #NMSettingIP4Config + * + * Returns the value contained in the #NMSettingIP4Config:dhcp-client-id + * property. + * + * Returns: the configured Client ID to send to the DHCP server when requesting + * addresses via DHCP. + **/ const char * nm_setting_ip4_config_get_dhcp_client_id (NMSettingIP4Config *setting) { @@ -420,6 +625,17 @@ nm_setting_ip4_config_get_dhcp_client_id (NMSettingIP4Config *setting) return NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting)->dhcp_client_id; } +/** + * nm_setting_ip4_config_get_dhcp_send_hostname: + * @setting: the #NMSettingIP4Config + * + * Returns the value contained in the #NMSettingIP4Config:dhcp-send-hostname + * property. + * + * Returns: %TRUE if NetworkManager should send the machine hostname to the + * DHCP server when requesting addresses to allow the server to automatically + * update DNS information for this machine. + **/ gboolean nm_setting_ip4_config_get_dhcp_send_hostname (NMSettingIP4Config *setting) { @@ -428,6 +644,15 @@ nm_setting_ip4_config_get_dhcp_send_hostname (NMSettingIP4Config *setting) return NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting)->dhcp_send_hostname; } +/** + * nm_setting_ip4_config_get_dhcp_hostname: + * @setting: the #NMSettingIP4Config + * + * Returns the value contained in the #NMSettingIP4Config:dhcp-hostname + * property. + * + * Returns: the configured hostname to send to the DHCP server + **/ const char * nm_setting_ip4_config_get_dhcp_hostname (NMSettingIP4Config *setting) { @@ -436,6 +661,16 @@ nm_setting_ip4_config_get_dhcp_hostname (NMSettingIP4Config *setting) return NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting)->dhcp_hostname; } +/** + * nm_setting_ip4_config_get_never_default: + * @setting: the #NMSettingIP4Config + * + * Returns the value contained in the #NMSettingIP4Config:never-default + * property. + * + * Returns: %TRUE if this connection should never be the default connection + * for IPv4 addressing + **/ gboolean nm_setting_ip4_config_get_never_default (NMSettingIP4Config *setting) { @@ -444,6 +679,16 @@ nm_setting_ip4_config_get_never_default (NMSettingIP4Config *setting) return NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting)->never_default; } +/** + * nm_setting_ip4_config_get_may_fail: + * @setting: the #NMSettingIP4Config + * + * Returns the value contained in the #NMSettingIP4Config:may-fail + * property. + * + * Returns: %TRUE if this connection doesn't require IPv4 addressing to complete + * for the connection to succeed. + **/ gboolean nm_setting_ip4_config_get_may_fail (NMSettingIP4Config *setting) { @@ -1023,6 +1268,13 @@ struct NMIP4Address { guint32 gateway; /* network byte order */ }; +/** + * nm_ip4_address_new: + * + * Creates and returns a new #NMIP4Address object. + * + * Returns: (transfer full): the new empty #NMIP4Address object + **/ NMIP4Address * nm_ip4_address_new (void) { @@ -1033,6 +1285,14 @@ nm_ip4_address_new (void) return address; } +/** + * nm_ip4_address_dup: + * @source: the #NMIP4Address object to copy + * + * Copies a given #NMIP4Address object and returns the copy. + * + * Returns: (transfer full): the copy of the given #NMIP4Address copy + **/ NMIP4Address * nm_ip4_address_dup (NMIP4Address *source) { @@ -1049,6 +1309,12 @@ nm_ip4_address_dup (NMIP4Address *source) return address; } +/** + * nm_ip4_address_ref: + * @address: the #NMIP4Address + * + * Increases the reference count of the object. + **/ void nm_ip4_address_ref (NMIP4Address *address) { @@ -1058,6 +1324,13 @@ nm_ip4_address_ref (NMIP4Address *address) address->refcount++; } +/** + * nm_ip4_address_unref: + * @address: the #NMIP4Address + * + * Decreases the reference count of the object. If the reference count + * reaches zero, the object will be destroyed. + **/ void nm_ip4_address_unref (NMIP4Address *address) { @@ -1071,6 +1344,15 @@ nm_ip4_address_unref (NMIP4Address *address) } } +/** + * nm_ip4_address_compare: + * @address: the #NMIP4Address + * @other: the #NMIP4Address to compare @address to. + * + * Determines if two #NMIP4Address objects contain the same values. + * + * Returns: %TRUE if the objects contain the same values, %FALSE if they do not. + **/ gboolean nm_ip4_address_compare (NMIP4Address *address, NMIP4Address *other) { @@ -1087,6 +1369,14 @@ nm_ip4_address_compare (NMIP4Address *address, NMIP4Address *other) return TRUE; } +/** + * nm_ip4_address_get_address: + * @address: the #NMIP4Address + * + * Gets the IPv4 address property of this address object. + * + * Returns: the IPv4 address in network byte order + **/ guint32 nm_ip4_address_get_address (NMIP4Address *address) { @@ -1096,6 +1386,13 @@ nm_ip4_address_get_address (NMIP4Address *address) return address->address; } +/** + * nm_ip4_address_set_address: + * @address: the #NMIP4Address + * @addr: the IPv4 address in network byte order + * + * Sets the IPv4 address property of this object. + **/ void nm_ip4_address_set_address (NMIP4Address *address, guint32 addr) { @@ -1105,6 +1402,15 @@ nm_ip4_address_set_address (NMIP4Address *address, guint32 addr) address->address = addr; } +/** + * nm_ip4_address_get_prefix: + * @address: the #NMIP4Address + * + * Gets the IPv4 address prefix (ie "24" or "30" etc) property of this address + * object. + * + * Returns: the IPv4 address prefix + **/ guint32 nm_ip4_address_get_prefix (NMIP4Address *address) { @@ -1114,15 +1420,32 @@ nm_ip4_address_get_prefix (NMIP4Address *address) return address->prefix; } +/** + * nm_ip4_address_set_prefix: + * @address: the #NMIP4Address + * @prefix: the address prefix, a number between 1 and 32 inclusive + * + * Sets the IPv4 address prefix. + **/ void nm_ip4_address_set_prefix (NMIP4Address *address, guint32 prefix) { g_return_if_fail (address != NULL); g_return_if_fail (address->refcount > 0); + g_return_if_fail (prefix <= 32); + g_return_if_fail (prefix > 0); address->prefix = prefix; } +/** + * nm_ip4_address_get_gateway: + * @address: the #NMIP4Address + * + * Gets the IPv4 default gateway property of this address object. + * + * Returns: the IPv4 gateway address in network byte order + **/ guint32 nm_ip4_address_get_gateway (NMIP4Address *address) { @@ -1132,6 +1455,13 @@ nm_ip4_address_get_gateway (NMIP4Address *address) return address->gateway; } +/** + * nm_ip4_address_set_gateway: + * @address: the #NMIP4Address + * @gateway: the IPv4 default gateway in network byte order + * + * Sets the IPv4 default gateway property of this address object. + **/ void nm_ip4_address_set_gateway (NMIP4Address *address, guint32 gateway) { @@ -1151,6 +1481,13 @@ struct NMIP4Route { guint32 metric; /* lower metric == more preferred */ }; +/** + * nm_ip4_route_new: + * + * Creates and returns a new #NMIP4Route object. + * + * Returns: (transfer full): the new empty #NMIP4Route object + **/ NMIP4Route * nm_ip4_route_new (void) { @@ -1161,6 +1498,14 @@ nm_ip4_route_new (void) return route; } +/** + * nm_ip4_route_dup: + * @source: the #NMIP4Route object to copy + * + * Copies a given #NMIP4Route object and returns the copy. + * + * Returns: (transfer full): the copy of the given #NMIP4Route copy + **/ NMIP4Route * nm_ip4_route_dup (NMIP4Route *source) { @@ -1178,6 +1523,12 @@ nm_ip4_route_dup (NMIP4Route *source) return route; } +/** + * nm_ip4_route_ref: + * @route: the #NMIP4Route + * + * Increases the reference count of the object. + **/ void nm_ip4_route_ref (NMIP4Route *route) { @@ -1187,6 +1538,13 @@ nm_ip4_route_ref (NMIP4Route *route) route->refcount++; } +/** + * nm_ip4_route_unref: + * @route: the #NMIP4Route + * + * Decreases the reference count of the object. If the reference count + * reaches zero, the object will be destroyed. + **/ void nm_ip4_route_unref (NMIP4Route *route) { @@ -1200,6 +1558,15 @@ nm_ip4_route_unref (NMIP4Route *route) } } +/** + * nm_ip4_route_compare: + * @route: the #NMIP4Route + * @other: the #NMIP4Route to compare @route to. + * + * Determines if two #NMIP4Route objects contain the same values. + * + * Returns: %TRUE if the objects contain the same values, %FALSE if they do not. + **/ gboolean nm_ip4_route_compare (NMIP4Route *route, NMIP4Route *other) { @@ -1217,6 +1584,14 @@ nm_ip4_route_compare (NMIP4Route *route, NMIP4Route *other) return TRUE; } +/** + * nm_ip4_route_get_dest: + * @route: the #NMIP4Route + * + * Gets the IPv4 destination address property of this route object. + * + * Returns: the IPv4 address in network byte order + **/ guint32 nm_ip4_route_get_dest (NMIP4Route *route) { @@ -1226,6 +1601,13 @@ nm_ip4_route_get_dest (NMIP4Route *route) return route->dest; } +/** + * nm_ip4_route_set_dest: + * @route: the #NMIP4Route + * @dest: the destination address in network byte order + * + * Sets the IPv4 destination address property of this route object. + **/ void nm_ip4_route_set_dest (NMIP4Route *route, guint32 dest) { @@ -1235,6 +1617,14 @@ nm_ip4_route_set_dest (NMIP4Route *route, guint32 dest) route->dest = dest; } +/** + * nm_ip4_route_get_prefix: + * @route: the #NMIP4Route + * + * Gets the IPv4 prefix (ie "24" or "30" etc) of this route. + * + * Returns: the IPv4 prefix + **/ guint32 nm_ip4_route_get_prefix (NMIP4Route *route) { @@ -1244,15 +1634,32 @@ nm_ip4_route_get_prefix (NMIP4Route *route) return route->prefix; } +/** + * nm_ip4_route_set_prefix: + * @route: the #NMIP4Route + * @prefix: the prefix, a number between 1 and 32 inclusive + * + * Sets the IPv4 prefix of this route. + **/ void nm_ip4_route_set_prefix (NMIP4Route *route, guint32 prefix) { g_return_if_fail (route != NULL); g_return_if_fail (route->refcount > 0); + g_return_if_fail (prefix <= 32); + g_return_if_fail (prefix > 0); route->prefix = prefix; } +/** + * nm_ip4_route_get_next_hop: + * @route: the #NMIP4Route + * + * Gets the IPv4 address of the next hop of this route. + * + * Returns: the IPv4 address in network byte order + **/ guint32 nm_ip4_route_get_next_hop (NMIP4Route *route) { @@ -1262,6 +1669,13 @@ nm_ip4_route_get_next_hop (NMIP4Route *route) return route->next_hop; } +/** + * nm_ip4_route_set_next_hop: + * @route: the #NMIP4Route + * @next_hop: the IPv4 address of the next hop in network byte order + * + * Sets the IPv4 address of the next hop of this route. + **/ void nm_ip4_route_set_next_hop (NMIP4Route *route, guint32 next_hop) { @@ -1271,6 +1685,15 @@ nm_ip4_route_set_next_hop (NMIP4Route *route, guint32 next_hop) route->next_hop = next_hop; } +/** + * nm_ip4_route_get_metric: + * @route: the #NMIP4Route + * + * Gets the route metric property of this route object; lower values indicate + * "better" or more preferred routes. + * + * Returns: the route metric + **/ guint32 nm_ip4_route_get_metric (NMIP4Route *route) { @@ -1280,6 +1703,14 @@ nm_ip4_route_get_metric (NMIP4Route *route) return route->metric; } +/** + * nm_ip4_route_set_metric: + * @route: the #NMIP4Route + * @metric: the route metric + * + * Sets the route metric property of this route object; lower values indicate + * "better" or more preferred routes. + **/ void nm_ip4_route_set_metric (NMIP4Route *route, guint32 metric) { diff --git a/libnm-util/nm-setting-ip4-config.h b/libnm-util/nm-setting-ip4-config.h index 91cf0ea6..76dcf37a 100644 --- a/libnm-util/nm-setting-ip4-config.h +++ b/libnm-util/nm-setting-ip4-config.h @@ -39,8 +39,16 @@ G_BEGIN_DECLS #define NM_SETTING_IP4_CONFIG_SETTING_NAME "ipv4" -typedef enum -{ +/** + * NMSettingIP4ConfigError: + * @NM_SETTING_IP4_CONFIG_ERROR_UNKNOWN: unknown or unclassified error + * @NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY: the property was invalid + * @NM_SETTING_IP4_CONFIG_ERROR_MISSING_PROPERTY: the property was missing and is + * required + * @NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD: the property's value is + * not valid with the given IP4 method + */ +typedef enum { NM_SETTING_IP4_CONFIG_ERROR_UNKNOWN = 0, NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY, NM_SETTING_IP4_CONFIG_ERROR_MISSING_PROPERTY, @@ -66,10 +74,48 @@ GQuark nm_setting_ip4_config_error_quark (void); #define NM_SETTING_IP4_CONFIG_NEVER_DEFAULT "never-default" #define NM_SETTING_IP4_CONFIG_MAY_FAIL "may-fail" +/** + * NM_SETTING_IP4_CONFIG_METHOD_AUTO: + * + * IPv4 configuration should be automatically determined via a method appropriate + * for the hardware interface, ie DHCP or PPP or some other device-specific + * manner. + */ #define NM_SETTING_IP4_CONFIG_METHOD_AUTO "auto" + +/** + * NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL: + * + * IPv4 configuration should be automatically configured for link-local-only + * operation. + */ #define NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL "link-local" + +/** + * NM_SETTING_IP4_CONFIG_METHOD_MANUAL: + * + * All necessary IPv4 configuration (addresses, prefix, DNS, etc) is specified + * in the setting's properties. + */ #define NM_SETTING_IP4_CONFIG_METHOD_MANUAL "manual" + +/** + * NM_SETTING_IP4_CONFIG_METHOD_SHARED: + * + * This connection specifies configuration that allows other computers to + * connect through it to the default network (usually the Internet). The + * connection's interface will be assigned a private address, and a DHCP server, + * caching DNS server, and Network Address Translation (NAT) functionality will + * be started on this connection's interface to allow other devices to connect + * through that interface to the default network. + */ #define NM_SETTING_IP4_CONFIG_METHOD_SHARED "shared" + +/** + * NM_SETTING_IP4_CONFIG_METHOD_DISABLED: + * + * This connection does not use or require IPv4 address and it should be disabled. + */ #define NM_SETTING_IP4_CONFIG_METHOD_DISABLED "disabled" typedef struct NMIP4Address NMIP4Address; @@ -100,7 +146,7 @@ typedef struct NMIP4Route NMIP4Route; GType nm_ip4_route_get_type (void); NMIP4Route * nm_ip4_route_new (void); -NMIP4Route * nm_ip4_route_dup (NMIP4Route *route); +NMIP4Route * nm_ip4_route_dup (NMIP4Route *source); void nm_ip4_route_ref (NMIP4Route *route); void nm_ip4_route_unref (NMIP4Route *route); /* Return TRUE if routes are identical */ diff --git a/libnm-util/nm-setting-ip6-config.c b/libnm-util/nm-setting-ip6-config.c index 1adbbdcb..4dc8f46c 100644 --- a/libnm-util/nm-setting-ip6-config.c +++ b/libnm-util/nm-setting-ip6-config.c @@ -30,6 +30,22 @@ #include "nm-utils.h" #include "nm-dbus-glib-types.h" +/** + * SECTION:nm-setting-ip6-config + * @short_description: Describes IPv6 addressing, routing, and name service properties + * @include: nm-setting-ip6-config.h + * + * The #NMSettingIP6Config object is a #NMSetting subclass that describes + * properties related to IPv6 addressing, routing, and Domain Name Service + **/ + +/** + * nm_setting_ip6_config_error_quark: + * + * Registers an error quark for #NMSettingIP6Config if necessary. + * + * Returns: the error quark used for #NMSettingIP6Config errors. + **/ GQuark nm_setting_ip6_config_error_quark (void) { @@ -102,12 +118,25 @@ enum { LAST_PROP }; +/** + * nm_setting_ip6_config_new: + * + * Creates a new #NMSettingIP6Config object with default values. + * + * Returns: (transfer full): the new empty #NMSettingIP6Config object + **/ NMSetting * nm_setting_ip6_config_new (void) { return (NMSetting *) g_object_new (NM_TYPE_SETTING_IP6_CONFIG, NULL); } +/** + * nm_setting_ip6_config_get_method: + * @setting: the #NMSettingIP6Config + * + * Returns: the #NMSettingIP6Config:method property of the setting + **/ const char * nm_setting_ip6_config_get_method (NMSettingIP6Config *setting) { @@ -116,6 +145,12 @@ nm_setting_ip6_config_get_method (NMSettingIP6Config *setting) return NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->method; } +/** + * nm_setting_ip6_config_get_num_dns: + * @setting: the #NMSettingIP6Config + * + * Returns: the number of configured DNS servers + **/ guint32 nm_setting_ip6_config_get_num_dns (NMSettingIP6Config *setting) { @@ -124,6 +159,13 @@ nm_setting_ip6_config_get_num_dns (NMSettingIP6Config *setting) return g_slist_length (NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->dns); } +/** + * nm_setting_ip6_config_get_dns: + * @setting: the #NMSettingIP6Config + * @i: index number of the DNS server to return + * + * Returns: (transfer none): the IPv6 address of the DNS server at index @i + **/ const struct in6_addr * nm_setting_ip6_config_get_dns (NMSettingIP6Config *setting, guint32 i) { @@ -138,6 +180,16 @@ nm_setting_ip6_config_get_dns (NMSettingIP6Config *setting, guint32 i) return (const struct in6_addr *) g_slist_nth_data (priv->dns, i); } +/** + * nm_setting_ip6_config_add_dns: + * @setting: the #NMSettingIP6Config + * @dns: the IPv6 address of the DNS server to add + * + * Adds a new DNS server to the setting. + * + * Returns: %TRUE if the DNS server was added; %FALSE if the server was already + * known + **/ gboolean nm_setting_ip6_config_add_dns (NMSettingIP6Config *setting, const struct in6_addr *addr) { @@ -160,6 +212,13 @@ nm_setting_ip6_config_add_dns (NMSettingIP6Config *setting, const struct in6_add return TRUE; } +/** + * nm_setting_ip6_config_remove_dns: + * @setting: the #NMSettingIP6Config + * @i: index number of the DNS server to remove + * + * Removes the DNS server at index @i. + **/ void nm_setting_ip6_config_remove_dns (NMSettingIP6Config *setting, guint32 i) { @@ -176,6 +235,12 @@ nm_setting_ip6_config_remove_dns (NMSettingIP6Config *setting, guint32 i) priv->dns = g_slist_delete_link (priv->dns, elt); } +/** + * nm_setting_ip6_config_clear_dns: + * @setting: the #NMSettingIP6Config + * + * Removes all configured DNS servers. + **/ void nm_setting_ip6_config_clear_dns (NMSettingIP6Config *setting) { @@ -185,6 +250,12 @@ nm_setting_ip6_config_clear_dns (NMSettingIP6Config *setting) NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->dns = NULL; } +/** + * nm_setting_ip6_config_get_num_dns_searches: + * @setting: the #NMSettingIP6Config + * + * Returns: the number of configured DNS search domains + **/ guint32 nm_setting_ip6_config_get_num_dns_searches (NMSettingIP6Config *setting) { @@ -193,6 +264,13 @@ nm_setting_ip6_config_get_num_dns_searches (NMSettingIP6Config *setting) return g_slist_length (NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->dns_search); } +/** + * nm_setting_ip6_config_get_dns_search: + * @setting: the #NMSettingIP6Config + * @i: index number of the DNS search domain to return + * + * Returns: the DNS search domain at index @i + **/ const char * nm_setting_ip6_config_get_dns_search (NMSettingIP6Config *setting, guint32 i) { @@ -206,6 +284,16 @@ nm_setting_ip6_config_get_dns_search (NMSettingIP6Config *setting, guint32 i) return (const char *) g_slist_nth_data (priv->dns_search, i); } +/** + * nm_setting_ip6_config_add_dns_search: + * @setting: the #NMSettingIP6Config + * @dns_search: the search domain to add + * + * Adds a new DNS search domain to the setting. + * + * Returns: %TRUE if the DNS search domain was added; %FALSE if the search + * domain was already known + **/ gboolean nm_setting_ip6_config_add_dns_search (NMSettingIP6Config *setting, const char *dns_search) @@ -227,6 +315,13 @@ nm_setting_ip6_config_add_dns_search (NMSettingIP6Config *setting, return TRUE; } +/** + * nm_setting_ip6_config_remove_dns_search: + * @setting: the #NMSettingIP6Config + * @i: index number of the DNS search domain + * + * Removes the DNS search domain at index @i. + **/ void nm_setting_ip6_config_remove_dns_search (NMSettingIP6Config *setting, guint32 i) { @@ -243,6 +338,12 @@ nm_setting_ip6_config_remove_dns_search (NMSettingIP6Config *setting, guint32 i) priv->dns_search = g_slist_delete_link (priv->dns_search, elt); } +/** + * nm_setting_ip6_config_clear_dns_searches: + * @setting: the #NMSettingIP6Config + * + * Removes all configured DNS search domains. + **/ void nm_setting_ip6_config_clear_dns_searches (NMSettingIP6Config *setting) { @@ -252,6 +353,12 @@ nm_setting_ip6_config_clear_dns_searches (NMSettingIP6Config *setting) NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->dns_search = NULL; } +/** + * nm_setting_ip6_config_get_num_addresses: + * @setting: the #NMSettingIP6Config + * + * Returns: the number of configured addresses + **/ guint32 nm_setting_ip6_config_get_num_addresses (NMSettingIP6Config *setting) { @@ -260,6 +367,13 @@ nm_setting_ip6_config_get_num_addresses (NMSettingIP6Config *setting) return g_slist_length (NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->addresses); } +/** + * nm_setting_ip6_config_get_address: + * @setting: the #NMSettingIP6Config + * @i: index number of the address to return + * + * Returns: the address at index @i + **/ NMIP6Address * nm_setting_ip6_config_get_address (NMSettingIP6Config *setting, guint32 i) { @@ -273,6 +387,17 @@ nm_setting_ip6_config_get_address (NMSettingIP6Config *setting, guint32 i) return (NMIP6Address *) g_slist_nth_data (priv->addresses, i); } +/** + * nm_setting_ip6_config_add_address: + * @setting: the #NMSettingIP6Config + * @address: the new address to add + * + * Adds a new IPv6 address and associated information to the setting. The + * given address is duplicated internally and is not changed by this function. + * + * Returns: %TRUE if the address was added; %FALSE if the address was already + * known. + **/ gboolean nm_setting_ip6_config_add_address (NMSettingIP6Config *setting, NMIP6Address *address) @@ -297,6 +422,13 @@ nm_setting_ip6_config_add_address (NMSettingIP6Config *setting, return TRUE; } +/** + * nm_setting_ip6_config_remove_address: + * @setting: the #NMSettingIP6Config + * @i: index number of the address to remove + * + * Removes the address at index @i. + **/ void nm_setting_ip6_config_remove_address (NMSettingIP6Config *setting, guint32 i) { @@ -313,6 +445,12 @@ nm_setting_ip6_config_remove_address (NMSettingIP6Config *setting, guint32 i) priv->addresses = g_slist_delete_link (priv->addresses, elt); } +/** + * nm_setting_ip6_config_clear_addresses: + * @setting: the #NMSettingIP6Config + * + * Removes all configured addresses. + **/ void nm_setting_ip6_config_clear_addresses (NMSettingIP6Config *setting) { @@ -324,6 +462,12 @@ nm_setting_ip6_config_clear_addresses (NMSettingIP6Config *setting) priv->addresses = NULL; } +/** + * nm_setting_ip6_config_get_num_routes: + * @setting: the #NMSettingIP6Config + * + * Returns: the number of configured routes + **/ guint32 nm_setting_ip6_config_get_num_routes (NMSettingIP6Config *setting) { @@ -332,6 +476,13 @@ nm_setting_ip6_config_get_num_routes (NMSettingIP6Config *setting) return g_slist_length (NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->routes); } +/** + * nm_setting_ip6_config_get_route: + * @setting: the #NMSettingIP6Config + * @i: index number of the route to return + * + * Returns: the route at index @i + **/ NMIP6Route * nm_setting_ip6_config_get_route (NMSettingIP6Config *setting, guint32 i) { @@ -345,6 +496,16 @@ nm_setting_ip6_config_get_route (NMSettingIP6Config *setting, guint32 i) return (NMIP6Route *) g_slist_nth_data (priv->routes, i); } +/** + * nm_setting_ip6_config_add_route: + * @setting: the #NMSettingIP6Config + * @route: the route to add + * + * Adds a new IPv6 route and associated information to the setting. The + * given route is duplicated internally and is not changed by this function. + * + * Returns: %TRUE if the route was added; %FALSE if the route was already known. + **/ gboolean nm_setting_ip6_config_add_route (NMSettingIP6Config *setting, NMIP6Route *route) @@ -369,6 +530,13 @@ nm_setting_ip6_config_add_route (NMSettingIP6Config *setting, return TRUE; } +/** + * nm_setting_ip6_config_remove_route: + * @setting: the #NMSettingIP6Config + * @i: index number of the route + * + * Removes the route at index @i. + **/ void nm_setting_ip6_config_remove_route (NMSettingIP6Config *setting, guint32 i) { @@ -385,6 +553,12 @@ nm_setting_ip6_config_remove_route (NMSettingIP6Config *setting, guint32 i) priv->routes = g_slist_delete_link (priv->routes, elt); } +/** + * nm_setting_ip6_config_clear_routes: + * @setting: the #NMSettingIP6Config + * + * Removes all configured routes. + **/ void nm_setting_ip6_config_clear_routes (NMSettingIP6Config *setting) { @@ -396,6 +570,16 @@ nm_setting_ip6_config_clear_routes (NMSettingIP6Config *setting) priv->routes = NULL; } +/** + * nm_setting_ip6_config_get_ignore_auto_routes: + * @setting: the #NMSettingIP6Config + * + * Returns the value contained in the #NMSettingIP6Config:ignore-auto-routes + * property. + * + * Returns: %TRUE if automatically configured (ie via DHCP) routes should be + * ignored. + **/ gboolean nm_setting_ip6_config_get_ignore_auto_routes (NMSettingIP6Config *setting) { @@ -404,6 +588,16 @@ nm_setting_ip6_config_get_ignore_auto_routes (NMSettingIP6Config *setting) return NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->ignore_auto_routes; } +/** + * nm_setting_ip6_config_get_ignore_auto_dns: + * @setting: the #NMSettingIP6Config + * + * Returns the value contained in the #NMSettingIP6Config:ignore-auto-dns + * property. + * + * Returns: %TRUE if automatically configured (ie via DHCP or router + * advertisements) DNS information should be ignored. + **/ gboolean nm_setting_ip6_config_get_ignore_auto_dns (NMSettingIP6Config *setting) { @@ -412,6 +606,16 @@ nm_setting_ip6_config_get_ignore_auto_dns (NMSettingIP6Config *setting) return NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->ignore_auto_dns; } +/** + * nm_setting_ip6_config_get_never_default: + * @setting: the #NMSettingIP6Config + * + * Returns the value contained in the #NMSettingIP6Config:never-default + * property. + * + * Returns: %TRUE if this connection should never be the default connection + * for IPv6 addressing + **/ gboolean nm_setting_ip6_config_get_never_default (NMSettingIP6Config *setting) { @@ -420,6 +624,16 @@ nm_setting_ip6_config_get_never_default (NMSettingIP6Config *setting) return NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->never_default; } +/** + * nm_setting_ip6_config_get_may_fail: + * @setting: the #NMSettingIP6Config + * + * Returns the value contained in the #NMSettingIP6Config:may-fail + * property. + * + * Returns: %TRUE if this connection doesn't require IPv6 addressing to complete + * for the connection to succeed. + **/ gboolean nm_setting_ip6_config_get_may_fail (NMSettingIP6Config *setting) { @@ -842,7 +1056,7 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *setting_class) "this property to TRUE allows the overall network " "configuration to succeed if IPv6 configuration " "fails but IPv4 configuration completes successfully.", - FALSE, + TRUE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE)); } @@ -855,6 +1069,13 @@ struct NMIP6Address { struct in6_addr gateway; }; +/** + * nm_ip6_address_new: + * + * Creates and returns a new #NMIP6Address object. + * + * Returns: (transfer full): the new empty #NMIP6Address object + **/ NMIP6Address * nm_ip6_address_new (void) { @@ -865,6 +1086,14 @@ nm_ip6_address_new (void) return address; } +/** + * nm_ip6_address_dup: + * @source: the #NMIP6Address object to copy + * + * Copies a given #NMIP6Address object and returns the copy. + * + * Returns: (transfer full): the copy of the given #NMIP6Address copy + **/ NMIP6Address * nm_ip6_address_dup (NMIP6Address *source) { @@ -881,6 +1110,12 @@ nm_ip6_address_dup (NMIP6Address *source) return address; } +/** + * nm_ip6_address_ref: + * @address: the #NMIP6Address + * + * Increases the reference count of the object. + **/ void nm_ip6_address_ref (NMIP6Address *address) { @@ -890,6 +1125,13 @@ nm_ip6_address_ref (NMIP6Address *address) address->refcount++; } +/** + * nm_ip6_address_unref: + * @address: the #NMIP6Address + * + * Decreases the reference count of the object. If the reference count + * reaches zero, the object will be destroyed. + **/ void nm_ip6_address_unref (NMIP6Address *address) { @@ -903,6 +1145,15 @@ nm_ip6_address_unref (NMIP6Address *address) } } +/** + * nm_ip6_address_compare: + * @address: the #NMIP6Address + * @other: the #NMIP6Address to compare @address to. + * + * Determines if two #NMIP6Address objects contain the same values. + * + * Returns: %TRUE if the objects contain the same values, %FALSE if they do not. + **/ gboolean nm_ip6_address_compare (NMIP6Address *address, NMIP6Address *other) { @@ -919,6 +1170,14 @@ nm_ip6_address_compare (NMIP6Address *address, NMIP6Address *other) return TRUE; } +/** + * nm_ip6_address_get_address: + * @address: the #NMIP6Address + * + * Gets the IPv6 address property of this address object. + * + * Returns: (transfer none): the IPv6 address + **/ const struct in6_addr * nm_ip6_address_get_address (NMIP6Address *address) { @@ -928,6 +1187,13 @@ nm_ip6_address_get_address (NMIP6Address *address) return &address->address; } +/** + * nm_ip6_address_set_address: + * @address: the #NMIP6Address + * @addr: the IPv6 address + * + * Sets the IPv6 address property of this object. + **/ void nm_ip6_address_set_address (NMIP6Address *address, const struct in6_addr *addr) { @@ -938,6 +1204,14 @@ nm_ip6_address_set_address (NMIP6Address *address, const struct in6_addr *addr) memcpy (&address->address, addr, sizeof (struct in6_addr)); } +/** + * nm_ip6_address_get_prefix: + * @address: the #NMIP6Address + * + * Gets the IPv6 address prefix property of this address object. + * + * Returns: the IPv6 address prefix + **/ guint32 nm_ip6_address_get_prefix (NMIP6Address *address) { @@ -947,15 +1221,32 @@ nm_ip6_address_get_prefix (NMIP6Address *address) return address->prefix; } +/** + * nm_ip6_address_set_prefix: + * @address: the #NMIP6Address + * @prefix: the address prefix, a number between 0 and 128 inclusive + * + * Sets the IPv6 address prefix. + **/ void nm_ip6_address_set_prefix (NMIP6Address *address, guint32 prefix) { g_return_if_fail (address != NULL); g_return_if_fail (address->refcount > 0); + g_return_if_fail (prefix <= 128); + g_return_if_fail (prefix > 0); address->prefix = prefix; } +/** + * nm_ip6_address_get_gateway: + * @address: the #NMIP6Address + * + * Gets the IPv6 default gateway property of this address object. + * + * Returns: (transfer none): the IPv6 gateway address + **/ const struct in6_addr * nm_ip6_address_get_gateway (NMIP6Address *address) { @@ -965,14 +1256,21 @@ nm_ip6_address_get_gateway (NMIP6Address *address) return &address->gateway; } +/** + * nm_ip6_address_set_gateway: + * @address: the #NMIP6Address + * @gateway: the IPv6 default gateway + * + * Sets the IPv6 default gateway property of this address object. + **/ void -nm_ip6_address_set_gateway (NMIP6Address *address, const struct in6_addr *gw) +nm_ip6_address_set_gateway (NMIP6Address *address, const struct in6_addr *gateway) { g_return_if_fail (address != NULL); g_return_if_fail (address->refcount > 0); - g_return_if_fail (gw != NULL); + g_return_if_fail (gateway != NULL); - memcpy (&address->gateway, gw, sizeof (struct in6_addr)); + memcpy (&address->gateway, gateway, sizeof (struct in6_addr)); } /********************************************************************/ @@ -986,6 +1284,13 @@ struct NMIP6Route { guint32 metric; /* lower metric == more preferred */ }; +/** + * nm_ip6_route_new: + * + * Creates and returns a new #NMIP6Route object. + * + * Returns: (transfer full): the new empty #NMIP6Route object + **/ NMIP6Route * nm_ip6_route_new (void) { @@ -996,6 +1301,14 @@ nm_ip6_route_new (void) return route; } +/** + * nm_ip6_route_dup: + * @source: the #NMIP6Route object to copy + * + * Copies a given #NMIP6Route object and returns the copy. + * + * Returns: (transfer full): the copy of the given #NMIP6Route copy + **/ NMIP6Route * nm_ip6_route_dup (NMIP6Route *source) { @@ -1013,6 +1326,12 @@ nm_ip6_route_dup (NMIP6Route *source) return route; } +/** + * nm_ip6_route_ref: + * @route: the #NMIP6Route + * + * Increases the reference count of the object. + **/ void nm_ip6_route_ref (NMIP6Route *route) { @@ -1022,6 +1341,13 @@ nm_ip6_route_ref (NMIP6Route *route) route->refcount++; } +/** + * nm_ip6_route_unref: + * @route: the #NMIP6Route + * + * Decreases the reference count of the object. If the reference count + * reaches zero, the object will be destroyed. + **/ void nm_ip6_route_unref (NMIP6Route *route) { @@ -1035,6 +1361,15 @@ nm_ip6_route_unref (NMIP6Route *route) } } +/** + * nm_ip6_route_compare: + * @route: the #NMIP6Route + * @other: the #NMIP6Route to compare @route to. + * + * Determines if two #NMIP6Route objects contain the same values. + * + * Returns: %TRUE if the objects contain the same values, %FALSE if they do not. + **/ gboolean nm_ip6_route_compare (NMIP6Route *route, NMIP6Route *other) { @@ -1052,6 +1387,14 @@ nm_ip6_route_compare (NMIP6Route *route, NMIP6Route *other) return TRUE; } +/** + * nm_ip6_route_get_dest: + * @route: the #NMIP6Route + * + * Gets the IPv6 destination address property of this route object. + * + * Returns: the IPv6 address + **/ const struct in6_addr * nm_ip6_route_get_dest (NMIP6Route *route) { @@ -1061,6 +1404,13 @@ nm_ip6_route_get_dest (NMIP6Route *route) return &route->dest; } +/** + * nm_ip6_route_set_dest: + * @route: the #NMIP6Route + * @dest: the destination address + * + * Sets the IPv6 destination address property of this route object. + **/ void nm_ip6_route_set_dest (NMIP6Route *route, const struct in6_addr *dest) { @@ -1071,6 +1421,14 @@ nm_ip6_route_set_dest (NMIP6Route *route, const struct in6_addr *dest) memcpy (&route->dest, dest, sizeof (struct in6_addr)); } +/** + * nm_ip6_route_get_prefix: + * @route: the #NMIP6Route + * + * Gets the IPv6 prefix (ie "32" or "64" etc) of this route. + * + * Returns: the IPv6 prefix + **/ guint32 nm_ip6_route_get_prefix (NMIP6Route *route) { @@ -1080,15 +1438,32 @@ nm_ip6_route_get_prefix (NMIP6Route *route) return route->prefix; } +/** + * nm_ip6_route_set_prefix: + * @route: the #NMIP6Route + * @prefix: the prefix, a number between 1 and 128 inclusive + * + * Sets the IPv6 prefix of this route. + **/ void nm_ip6_route_set_prefix (NMIP6Route *route, guint32 prefix) { g_return_if_fail (route != NULL); g_return_if_fail (route->refcount > 0); + g_return_if_fail (prefix <= 128); + g_return_if_fail (prefix > 0); route->prefix = prefix; } +/** + * nm_ip6_route_get_next_hop: + * @route: the #NMIP6Route + * + * Gets the IPv6 address of the next hop of this route. + * + * Returns: the IPv6 address + **/ const struct in6_addr * nm_ip6_route_get_next_hop (NMIP6Route *route) { @@ -1098,6 +1473,13 @@ nm_ip6_route_get_next_hop (NMIP6Route *route) return &route->next_hop; } +/** + * nm_ip6_route_set_next_hop: + * @route: the #NMIP6Route + * @next_hop: the IPv6 address of the next hop + * + * Sets the IPv6 address of the next hop of this route. + **/ void nm_ip6_route_set_next_hop (NMIP6Route *route, const struct in6_addr *next_hop) { @@ -1108,6 +1490,15 @@ nm_ip6_route_set_next_hop (NMIP6Route *route, const struct in6_addr *next_hop) memcpy (&route->next_hop, next_hop, sizeof (struct in6_addr)); } +/** + * nm_ip6_route_get_metric: + * @route: the #NMIP6Route + * + * Gets the route metric property of this route object; lower values indicate + * "better" or more preferred routes. + * + * Returns: the route metric + **/ guint32 nm_ip6_route_get_metric (NMIP6Route *route) { @@ -1117,6 +1508,14 @@ nm_ip6_route_get_metric (NMIP6Route *route) return route->metric; } +/** + * nm_ip6_route_set_metric: + * @route: the #NMIP6Route + * @metric: the route metric + * + * Sets the route metric property of this route object; lower values indicate + * "better" or more preferred routes. + **/ void nm_ip6_route_set_metric (NMIP6Route *route, guint32 metric) { diff --git a/libnm-util/nm-setting-ip6-config.h b/libnm-util/nm-setting-ip6-config.h index b9733b4a..6b8fe5c4 100644 --- a/libnm-util/nm-setting-ip6-config.h +++ b/libnm-util/nm-setting-ip6-config.h @@ -40,8 +40,16 @@ G_BEGIN_DECLS #define NM_SETTING_IP6_CONFIG_SETTING_NAME "ipv6" -typedef enum -{ +/** + * NMSettingIP6ConfigError: + * @NM_SETTING_IP6_CONFIG_ERROR_UNKNOWN: unknown or unclassified error + * @NM_SETTING_IP6_CONFIG_ERROR_INVALID_PROPERTY: the property was invalid + * @NM_SETTING_IP6_CONFIG_ERROR_MISSING_PROPERTY: the property was missing and is + * required + * @NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD: the property's value is + * not valid with the given IPv6 method + */ +typedef enum { NM_SETTING_IP6_CONFIG_ERROR_UNKNOWN = 0, NM_SETTING_IP6_CONFIG_ERROR_INVALID_PROPERTY, NM_SETTING_IP6_CONFIG_ERROR_MISSING_PROPERTY, @@ -64,11 +72,58 @@ GQuark nm_setting_ip6_config_error_quark (void); #define NM_SETTING_IP6_CONFIG_NEVER_DEFAULT "never-default" #define NM_SETTING_IP6_CONFIG_MAY_FAIL "may-fail" +/** + * NM_SETTING_IP6_CONFIG_METHOD_IGNORE: + * + * IPv6 is not required or is handled by some other mechanism, and NetworkManager + * should not configure IPv6 for this connection. + */ #define NM_SETTING_IP6_CONFIG_METHOD_IGNORE "ignore" + +/** + * NM_SETTING_IP6_CONFIG_METHOD_AUTO: + * + * IPv6 configuration should be automatically determined via a method appropriate + * for the hardware interface, ie router advertisements, DHCP, or PPP or some + * other device-specific manner. + */ #define NM_SETTING_IP6_CONFIG_METHOD_AUTO "auto" + +/** + * NM_SETTING_IP6_CONFIG_METHOD_DHCP: + * + * IPv6 configuration should be automatically determined via DHCPv6 only and + * router advertisements should be ignored. + */ #define NM_SETTING_IP6_CONFIG_METHOD_DHCP "dhcp" + +/** + * NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL: + * + * IPv6 configuration should be automatically configured for link-local-only + * operation. + */ #define NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL "link-local" + +/** + * NM_SETTING_IP6_CONFIG_METHOD_MANUAL: + * + * All necessary IPv6 configuration (addresses, prefix, DNS, etc) is specified + * in the setting's properties. + */ #define NM_SETTING_IP6_CONFIG_METHOD_MANUAL "manual" + +/** + * NM_SETTING_IP6_CONFIG_METHOD_SHARED: + * + * This connection specifies configuration that allows other computers to + * connect through it to the default network (usually the Internet). The + * connection's interface will be assigned a private address, and router + * advertisements, a caching DNS server, and Network Address Translation (NAT) + * functionality will be started on this connection's interface to allow other + * devices to connect through that interface to the default network. (not yet + * supported for IPv6) + */ #define NM_SETTING_IP6_CONFIG_METHOD_SHARED "shared" @@ -93,14 +148,14 @@ void nm_ip6_address_set_prefix (NMIP6Address *address, const struct in6_addr *nm_ip6_address_get_gateway (NMIP6Address *address); void nm_ip6_address_set_gateway (NMIP6Address *address, - const struct in6_addr *gw); + const struct in6_addr *gateway); typedef struct NMIP6Route NMIP6Route; GType nm_ip6_route_get_type (void); NMIP6Route * nm_ip6_route_new (void); -NMIP6Route * nm_ip6_route_dup (NMIP6Route *route); +NMIP6Route * nm_ip6_route_dup (NMIP6Route *source); void nm_ip6_route_ref (NMIP6Route *route); void nm_ip6_route_unref (NMIP6Route *route); /* Return TRUE if routes are identical */ diff --git a/libnm-util/nm-setting-ppp.c b/libnm-util/nm-setting-ppp.c index fd6043f1..89338131 100644 --- a/libnm-util/nm-setting-ppp.c +++ b/libnm-util/nm-setting-ppp.c @@ -25,6 +25,24 @@ #include "nm-setting-ppp.h" +/** + * SECTION:nm-setting-ppp + * @short_description: Describes connection properties for devices/networks + * that require PPP to deliver IP capability + * @include: nm-setting-ppp.h + * + * The #NMSettingPPP object is a #NMSetting subclass that describes properties + * necessary for connection to networks that require PPP transport, like PPPoE + * cable and DSL modems and some mobile broadband devices. + **/ + +/** + * nm_setting_ppp_error_quark: + * + * Registers an error quark for #NMSettingPPP if necessary. + * + * Returns: the error quark used for #NMSettingPPP errors. + **/ GQuark nm_setting_ppp_error_quark (void) { @@ -110,12 +128,25 @@ enum { LAST_PROP }; +/** + * nm_setting_ppp_new: + * + * Creates a new #NMSettingPPP object with default values. + * + * Returns: (transfer full): the new empty #NMSettingPPP object + **/ NMSetting * nm_setting_ppp_new (void) { return (NMSetting *) g_object_new (NM_TYPE_SETTING_PPP, NULL); } +/** + * nm_setting_wired_get_noauth: + * @setting: the #NMSettingPPP + * + * Returns: the #NMSettingPPP:noauth property of the setting + **/ gboolean nm_setting_ppp_get_noauth (NMSettingPPP *setting) { @@ -124,6 +155,12 @@ nm_setting_ppp_get_noauth (NMSettingPPP *setting) return NM_SETTING_PPP_GET_PRIVATE (setting)->noauth; } +/** + * nm_setting_wired_get_refuse_eap: + * @setting: the #NMSettingPPP + * + * Returns: the #NMSettingPPP:refuse-eap property of the setting + **/ gboolean nm_setting_ppp_get_refuse_eap (NMSettingPPP *setting) { @@ -132,6 +169,12 @@ nm_setting_ppp_get_refuse_eap (NMSettingPPP *setting) return NM_SETTING_PPP_GET_PRIVATE (setting)->refuse_eap; } +/** + * nm_setting_wired_get_refuse_pap: + * @setting: the #NMSettingPPP + * + * Returns: the #NMSettingPPP:refuse-pap property of the setting + **/ gboolean nm_setting_ppp_get_refuse_pap (NMSettingPPP *setting) { @@ -140,6 +183,12 @@ nm_setting_ppp_get_refuse_pap (NMSettingPPP *setting) return NM_SETTING_PPP_GET_PRIVATE (setting)->refuse_pap; } +/** + * nm_setting_wired_get_refuse_chap: + * @setting: the #NMSettingPPP + * + * Returns: the #NMSettingPPP:refuse-chap property of the setting + **/ gboolean nm_setting_ppp_get_refuse_chap (NMSettingPPP *setting) { @@ -148,6 +197,12 @@ nm_setting_ppp_get_refuse_chap (NMSettingPPP *setting) return NM_SETTING_PPP_GET_PRIVATE (setting)->refuse_chap; } +/** + * nm_setting_wired_get_refuse_mschap: + * @setting: the #NMSettingPPP + * + * Returns: the #NMSettingPPP:refuse-mschap property of the setting + **/ gboolean nm_setting_ppp_get_refuse_mschap (NMSettingPPP *setting) { @@ -156,6 +211,12 @@ nm_setting_ppp_get_refuse_mschap (NMSettingPPP *setting) return NM_SETTING_PPP_GET_PRIVATE (setting)->refuse_mschap; } +/** + * nm_setting_wired_get_refuse_mschapv2: + * @setting: the #NMSettingPPP + * + * Returns: the #NMSettingPPP:refuse-mschapv2 property of the setting + **/ gboolean nm_setting_ppp_get_refuse_mschapv2 (NMSettingPPP *setting) { @@ -164,6 +225,12 @@ nm_setting_ppp_get_refuse_mschapv2 (NMSettingPPP *setting) return NM_SETTING_PPP_GET_PRIVATE (setting)->refuse_mschapv2; } +/** + * nm_setting_wired_get_nobsdcomp: + * @setting: the #NMSettingPPP + * + * Returns: the #NMSettingPPP:nobsdcomp property of the setting + **/ gboolean nm_setting_ppp_get_nobsdcomp (NMSettingPPP *setting) { @@ -172,6 +239,12 @@ nm_setting_ppp_get_nobsdcomp (NMSettingPPP *setting) return NM_SETTING_PPP_GET_PRIVATE (setting)->nobsdcomp; } +/** + * nm_setting_wired_get_nodeflate: + * @setting: the #NMSettingPPP + * + * Returns: the #NMSettingPPP:nodeflate property of the setting + **/ gboolean nm_setting_ppp_get_nodeflate (NMSettingPPP *setting) { @@ -180,6 +253,12 @@ nm_setting_ppp_get_nodeflate (NMSettingPPP *setting) return NM_SETTING_PPP_GET_PRIVATE (setting)->nodeflate; } +/** + * nm_setting_wired_get_no_vj_comp: + * @setting: the #NMSettingPPP + * + * Returns: the #NMSettingPPP:no-vj-comp property of the setting + **/ gboolean nm_setting_ppp_get_no_vj_comp (NMSettingPPP *setting) { @@ -188,6 +267,12 @@ nm_setting_ppp_get_no_vj_comp (NMSettingPPP *setting) return NM_SETTING_PPP_GET_PRIVATE (setting)->no_vj_comp; } +/** + * nm_setting_wired_get_require_mppe: + * @setting: the #NMSettingPPP + * + * Returns: the #NMSettingPPP:require-mppe property of the setting + **/ gboolean nm_setting_ppp_get_require_mppe (NMSettingPPP *setting) { @@ -196,6 +281,12 @@ nm_setting_ppp_get_require_mppe (NMSettingPPP *setting) return NM_SETTING_PPP_GET_PRIVATE (setting)->require_mppe; } +/** + * nm_setting_wired_get_require_mppe_128: + * @setting: the #NMSettingPPP + * + * Returns: the #NMSettingPPP:require-mppe-128 property of the setting + **/ gboolean nm_setting_ppp_get_require_mppe_128 (NMSettingPPP *setting) { @@ -204,6 +295,12 @@ nm_setting_ppp_get_require_mppe_128 (NMSettingPPP *setting) return NM_SETTING_PPP_GET_PRIVATE (setting)->require_mppe_128; } +/** + * nm_setting_wired_get_mppe_stateful: + * @setting: the #NMSettingPPP + * + * Returns: the #NMSettingPPP:mppe-stateful property of the setting + **/ gboolean nm_setting_ppp_get_mppe_stateful (NMSettingPPP *setting) { @@ -212,6 +309,12 @@ nm_setting_ppp_get_mppe_stateful (NMSettingPPP *setting) return NM_SETTING_PPP_GET_PRIVATE (setting)->mppe_stateful; } +/** + * nm_setting_wired_get_crtscts: + * @setting: the #NMSettingPPP + * + * Returns: the #NMSettingPPP:crtscts property of the setting + **/ gboolean nm_setting_ppp_get_crtscts (NMSettingPPP *setting) { @@ -220,6 +323,12 @@ nm_setting_ppp_get_crtscts (NMSettingPPP *setting) return NM_SETTING_PPP_GET_PRIVATE (setting)->crtscts; } +/** + * nm_setting_wired_get_baud: + * @setting: the #NMSettingPPP + * + * Returns: the #NMSettingPPP:baud property of the setting + **/ guint32 nm_setting_ppp_get_baud (NMSettingPPP *setting) { @@ -228,6 +337,12 @@ nm_setting_ppp_get_baud (NMSettingPPP *setting) return NM_SETTING_PPP_GET_PRIVATE (setting)->baud; } +/** + * nm_setting_wired_get_mru: + * @setting: the #NMSettingPPP + * + * Returns: the #NMSettingPPP:mru property of the setting + **/ guint32 nm_setting_ppp_get_mru (NMSettingPPP *setting) { @@ -236,6 +351,12 @@ nm_setting_ppp_get_mru (NMSettingPPP *setting) return NM_SETTING_PPP_GET_PRIVATE (setting)->mru; } +/** + * nm_setting_wired_get_mtu: + * @setting: the #NMSettingPPP + * + * Returns: the #NMSettingPPP:mtu property of the setting + **/ guint32 nm_setting_ppp_get_mtu (NMSettingPPP *setting) { @@ -244,6 +365,12 @@ nm_setting_ppp_get_mtu (NMSettingPPP *setting) return NM_SETTING_PPP_GET_PRIVATE (setting)->mtu; } +/** + * nm_setting_wired_get_lcp_echo_failure: + * @setting: the #NMSettingPPP + * + * Returns: the #NMSettingPPP:lcp-echo-failure property of the setting + **/ guint32 nm_setting_ppp_get_lcp_echo_failure (NMSettingPPP *setting) { @@ -252,6 +379,12 @@ nm_setting_ppp_get_lcp_echo_failure (NMSettingPPP *setting) return NM_SETTING_PPP_GET_PRIVATE (setting)->lcp_echo_failure; } +/** + * nm_setting_wired_get_lcp_echo_interval: + * @setting: the #NMSettingPPP + * + * Returns: the #NMSettingPPP:lcp-echo-interval property of the setting + **/ guint32 nm_setting_ppp_get_lcp_echo_interval (NMSettingPPP *setting) { diff --git a/libnm-util/nm-setting-ppp.h b/libnm-util/nm-setting-ppp.h index cfa1f57a..7a6e4e47 100644 --- a/libnm-util/nm-setting-ppp.h +++ b/libnm-util/nm-setting-ppp.h @@ -39,8 +39,16 @@ G_BEGIN_DECLS #define NM_SETTING_PPP_SETTING_NAME "ppp" -typedef enum -{ +/** + * NMSettingPPPError: + * @NM_SETTING_PPP_ERROR_UNKNOWN: unknown or unclassified error + * @NM_SETTING_PPP_ERROR_INVALID_PROPERTY: the property was invalid + * @NM_SETTING_PPP_ERROR_MISSING_PROPERTY: the property was missing and is + * required + * @NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED: requiring MPPE is not compatible + * with other setting configuration parameters + */ +typedef enum { NM_SETTING_PPP_ERROR_UNKNOWN = 0, NM_SETTING_PPP_ERROR_INVALID_PROPERTY, NM_SETTING_PPP_ERROR_MISSING_PROPERTY, diff --git a/libnm-util/nm-setting-pppoe.c b/libnm-util/nm-setting-pppoe.c index 18dd7983..4a9b8a22 100644 --- a/libnm-util/nm-setting-pppoe.c +++ b/libnm-util/nm-setting-pppoe.c @@ -28,6 +28,23 @@ #include "nm-setting-ppp.h" #include "nm-setting-private.h" +/** + * SECTION:nm-setting-pppoe + * @short_description: Describes PPPoE connection properties + * @include: nm-setting-pppoe.h + * + * The #NMSettingPPPOE object is a #NMSetting subclass that describes + * properties necessary for connection to networks that require PPPoE connections + * to provide IP transport, for example cable or DSL modems. + **/ + +/** + * nm_setting_pppoe_error_quark: + * + * Registers an error quark for #NMSettingPPPOE if necessary. + * + * Returns: the error quark used for #NMSettingPPPOE errors. + **/ GQuark nm_setting_pppoe_error_quark (void) { @@ -85,12 +102,25 @@ enum { LAST_PROP }; +/** + * nm_setting_pppoe_new: + * + * Creates a new #NMSettingPPPOE object with default values. + * + * Returns: (transfer full): the new empty #NMSettingPPPOE object + **/ NMSetting * nm_setting_pppoe_new (void) { return (NMSetting *) g_object_new (NM_TYPE_SETTING_PPPOE, NULL); } +/** + * nm_setting_pppoe_get_service: + * @setting: the #NMSettingPPPOE + * + * Returns: the #NMSettingPPPOE:service property of the setting + **/ const char * nm_setting_pppoe_get_service (NMSettingPPPOE *setting) { @@ -99,6 +129,12 @@ nm_setting_pppoe_get_service (NMSettingPPPOE *setting) return NM_SETTING_PPPOE_GET_PRIVATE (setting)->service; } +/** + * nm_setting_pppoe_get_service: + * @setting: the #NMSettingPPPOE + * + * Returns: the #NMSettingPPPOE:username property of the setting + **/ const char * nm_setting_pppoe_get_username (NMSettingPPPOE *setting) { @@ -107,6 +143,12 @@ nm_setting_pppoe_get_username (NMSettingPPPOE *setting) return NM_SETTING_PPPOE_GET_PRIVATE (setting)->username; } +/** + * nm_setting_pppoe_get_service: + * @setting: the #NMSettingPPPOE + * + * Returns: the #NMSettingPPPOE:password property of the setting + **/ const char * nm_setting_pppoe_get_password (NMSettingPPPOE *setting) { diff --git a/libnm-util/nm-setting-pppoe.h b/libnm-util/nm-setting-pppoe.h index d163decb..aef6bd68 100644 --- a/libnm-util/nm-setting-pppoe.h +++ b/libnm-util/nm-setting-pppoe.h @@ -39,8 +39,16 @@ G_BEGIN_DECLS #define NM_SETTING_PPPOE_SETTING_NAME "pppoe" -typedef enum -{ +/** + * NMSettingPPPOEError: + * @NM_SETTING_PPPOE_ERROR_UNKNOWN: unknown or unclassified error + * @NM_SETTING_PPPOE_ERROR_INVALID_PROPERTY: the property was invalid + * @NM_SETTING_PPPOE_ERROR_MISSING_PROPERTY: the property was missing and is + * required + * @NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING: the connection + * did not contain a required PPP setting for PPP related options + */ +typedef enum { NM_SETTING_PPPOE_ERROR_UNKNOWN = 0, NM_SETTING_PPPOE_ERROR_INVALID_PROPERTY, NM_SETTING_PPPOE_ERROR_MISSING_PROPERTY, diff --git a/libnm-util/nm-setting-serial.c b/libnm-util/nm-setting-serial.c index d1d1445e..7ed15e9e 100644 --- a/libnm-util/nm-setting-serial.c +++ b/libnm-util/nm-setting-serial.c @@ -27,6 +27,24 @@ #include "nm-setting-serial.h" +/** + * SECTION:nm-setting-serial + * @short_description: Describes connection properties for devices that use + * serial communications + * @include: nm-setting-serial.h + * + * The #NMSettingSerial object is a #NMSetting subclass that describes + * properties necessary for connections that may use serial communications, + * such as mobile broadband or analog telephone connections. + **/ + +/** + * nm_setting_serial_error_quark: + * + * Registers an error quark for #NMSettingSerial if necessary. + * + * Returns: the error quark used for #NMSettingSerial errors. + **/ GQuark nm_setting_serial_error_quark (void) { @@ -87,12 +105,25 @@ enum { LAST_PROP }; +/** + * nm_setting_serial_new: + * + * Creates a new #NMSettingSerial object with default values. + * + * Returns: (transfer full): the new empty #NMSettingSerial object + **/ NMSetting * nm_setting_serial_new (void) { return (NMSetting *) g_object_new (NM_TYPE_SETTING_SERIAL, NULL); } +/** + * nm_setting_serial_get_baud: + * @setting: the #NMSettingSerial + * + * Returns: the #NMSettingSerial:baud property of the setting + **/ guint nm_setting_serial_get_baud (NMSettingSerial *setting) { @@ -101,6 +132,12 @@ nm_setting_serial_get_baud (NMSettingSerial *setting) return NM_SETTING_SERIAL_GET_PRIVATE (setting)->baud; } +/** + * nm_setting_serial_get_bits: + * @setting: the #NMSettingSerial + * + * Returns: the #NMSettingSerial:bits property of the setting + **/ guint nm_setting_serial_get_bits (NMSettingSerial *setting) { @@ -109,6 +146,12 @@ nm_setting_serial_get_bits (NMSettingSerial *setting) return NM_SETTING_SERIAL_GET_PRIVATE (setting)->bits; } +/** + * nm_setting_serial_get_parity: + * @setting: the #NMSettingSerial + * + * Returns: the #NMSettingSerial:parity property of the setting + **/ char nm_setting_serial_get_parity (NMSettingSerial *setting) { @@ -117,6 +160,12 @@ nm_setting_serial_get_parity (NMSettingSerial *setting) return NM_SETTING_SERIAL_GET_PRIVATE (setting)->parity; } +/** + * nm_setting_serial_get_stopbits: + * @setting: the #NMSettingSerial + * + * Returns: the #NMSettingSerial:stopbits property of the setting + **/ guint nm_setting_serial_get_stopbits (NMSettingSerial *setting) { @@ -125,6 +174,12 @@ nm_setting_serial_get_stopbits (NMSettingSerial *setting) return NM_SETTING_SERIAL_GET_PRIVATE (setting)->stopbits; } +/** + * nm_setting_serial_get_send_delay: + * @setting: the #NMSettingSerial + * + * Returns: the #NMSettingSerial:send-delay property of the setting + **/ guint64 nm_setting_serial_get_send_delay (NMSettingSerial *setting) { diff --git a/libnm-util/nm-setting-serial.h b/libnm-util/nm-setting-serial.h index d39e5a79..9562950c 100644 --- a/libnm-util/nm-setting-serial.h +++ b/libnm-util/nm-setting-serial.h @@ -39,8 +39,16 @@ G_BEGIN_DECLS #define NM_SETTING_SERIAL_SETTING_NAME "serial" -typedef enum -{ +/** + * NMSettingSerialError: + * @NM_SETTING_SERIAL_ERROR_UNKNOWN: unknown or unclassified error + * @NM_SETTING_SERIAL_ERROR_INVALID_PROPERTY: the property was invalid + * @NM_SETTING_SERIAL_ERROR_MISSING_PROPERTY: the property was missing and is + * required + * @NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING: one of the properties of the + * setting requires the connection to contain an #NMSettingPPP setting + */ +typedef enum { NM_SETTING_SERIAL_ERROR_UNKNOWN = 0, NM_SETTING_SERIAL_ERROR_INVALID_PROPERTY, NM_SETTING_SERIAL_ERROR_MISSING_PROPERTY, diff --git a/libnm-util/nm-setting-vpn.c b/libnm-util/nm-setting-vpn.c index 23f07383..50091cb9 100644 --- a/libnm-util/nm-setting-vpn.c +++ b/libnm-util/nm-setting-vpn.c @@ -32,6 +32,27 @@ #include "nm-dbus-glib-types.h" #include "nm-setting-private.h" +/** + * SECTION:nm-setting-vpn + * @short_description: Describes connection properties for Virtual Private Networks + * @include: nm-setting-vpn.h + * + * The #NMSettingVPN object is a #NMSetting subclass that describes properties + * necessary for connection to Virtual Private Networks. NetworkManager uses + * a plugin architecture to allow easier use of new VPN types, and this + * setting abstracts the configuration for those plugins. Since the configuration + * options are only known to the VPN plugins themselves, the VPN configuration + * options are stored as key/value pairs of strings rather than GObject + * properties. + **/ + +/** + * nm_setting_vpn_error_quark: + * + * Registers an error quark for #NMSettingVPN if necessary. + * + * Returns: the error quark used for #NMSettingVPN errors. + **/ GQuark nm_setting_vpn_error_quark (void) { @@ -108,12 +129,28 @@ enum { LAST_PROP }; +/** + * nm_setting_vpn_new: + * + * Creates a new #NMSettingVPN object with default values. + * + * Returns: (transfer full): the new empty #NMSettingVPN object + **/ NMSetting * nm_setting_vpn_new (void) { return (NMSetting *) g_object_new (NM_TYPE_SETTING_VPN, NULL); } +/** + * nm_setting_vpn_get_service_type: + * @setting: the #NMSettingVPN + * + * Returns the service name of the VPN, which identifies the specific VPN + * plugin that should be used to connect to this VPN. + * + * Returns: the VPN plugin's service name + **/ const char * nm_setting_vpn_get_service_type (NMSettingVPN *setting) { @@ -122,6 +159,12 @@ nm_setting_vpn_get_service_type (NMSettingVPN *setting) return NM_SETTING_VPN_GET_PRIVATE (setting)->service_type; } +/** + * nm_setting_vpn_get_user_name: + * @setting: the #NMSettingVPN + * + * Returns: the #NMSettingVPN:user-name property of the setting + **/ const char * nm_setting_vpn_get_user_name (NMSettingVPN *setting) { @@ -130,6 +173,16 @@ nm_setting_vpn_get_user_name (NMSettingVPN *setting) return NM_SETTING_VPN_GET_PRIVATE (setting)->user_name; } +/** + * nm_setting_vpn_add_data_item: + * @setting: the #NMSettingVPN + * @key: a name that uniquely identifies the given value @item + * @item: the value to be referenced by @key + * + * Establishes a relationship between @key and @item internally in the + * setting which may be retrieved later. Should not be used to store passwords + * or other secrets, which is what nm_setting_vpn_add_secret() is for. + **/ void nm_setting_vpn_add_data_item (NMSettingVPN *setting, const char *key, @@ -145,6 +198,16 @@ nm_setting_vpn_add_data_item (NMSettingVPN *setting, g_strdup (key), g_strdup (item)); } +/** + * nm_setting_vpn_get_data_item: + * @setting: the #NMSettingVPN + * @key: the name of the data item to retrieve + * + * Retrieves the data item of a key/value relationship previously established + * by nm_setting_vpn_add_data_item(). + * + * Returns: the data item, if any + **/ const char * nm_setting_vpn_get_data_item (NMSettingVPN *setting, const char *key) { @@ -153,6 +216,14 @@ nm_setting_vpn_get_data_item (NMSettingVPN *setting, const char *key) return (const char *) g_hash_table_lookup (NM_SETTING_VPN_GET_PRIVATE (setting)->data, key); } +/** + * nm_setting_vpn_remove_data_item: + * @setting: the #NMSettingVPN + * @key: the name of the data item to remove + * + * Deletes a key/value relationship previously established by + * nm_setting_vpn_add_data_item(). + **/ void nm_setting_vpn_remove_data_item (NMSettingVPN *setting, const char *key) { @@ -212,6 +283,15 @@ nm_setting_vpn_foreach_data_item (NMSettingVPN *setting, foreach_item_helper (NM_SETTING_VPN_GET_PRIVATE (setting)->data, func, user_data); } +/** + * nm_setting_vpn_add_secret: + * @setting: the #NMSettingVPN + * @key: a name that uniquely identifies the given secret @secret + * @secret: the secret to be referenced by @key + * + * Establishes a relationship between @key and @secret internally in the + * setting which may be retrieved later. + **/ void nm_setting_vpn_add_secret (NMSettingVPN *setting, const char *key, @@ -227,6 +307,16 @@ nm_setting_vpn_add_secret (NMSettingVPN *setting, g_strdup (key), g_strdup (secret)); } +/** + * nm_setting_vpn_get_secret: + * @setting: the #NMSettingVPN + * @key: the name of the secret to retrieve + * + * Retrieves the secret of a key/value relationship previously established + * by nm_setting_vpn_add_secret(). + * + * Returns: the secret, if any + **/ const char * nm_setting_vpn_get_secret (NMSettingVPN *setting, const char *key) { @@ -235,6 +325,14 @@ nm_setting_vpn_get_secret (NMSettingVPN *setting, const char *key) return (const char *) g_hash_table_lookup (NM_SETTING_VPN_GET_PRIVATE (setting)->secrets, key); } +/** + * nm_setting_vpn_remove_secret: + * @setting: the #NMSettingVPN + * @key: the name of the secret to remove + * + * Deletes a key/value relationship previously established by + * nm_setting_vpn_add_secret(). + **/ void nm_setting_vpn_remove_secret (NMSettingVPN *setting, const char *key) { @@ -451,6 +549,68 @@ need_secrets (NMSetting *setting) return g_ptr_array_sized_new (1); } +static gboolean +compare_one_secret (NMSettingVPN *a, + NMSettingVPN *b, + NMSettingCompareFlags flags) +{ + GHashTable *a_secrets, *b_secrets; + GHashTableIter iter; + const char *key, *val; + + a_secrets = NM_SETTING_VPN_GET_PRIVATE (a)->secrets; + b_secrets = NM_SETTING_VPN_GET_PRIVATE (b)->secrets; + + g_hash_table_iter_init (&iter, a_secrets); + while (g_hash_table_iter_next (&iter, (gpointer) &key, (gpointer) &val)) { + NMSettingSecretFlags a_secret_flags = NM_SETTING_SECRET_FLAG_NONE; + NMSettingSecretFlags b_secret_flags = NM_SETTING_SECRET_FLAG_NONE; + + nm_setting_get_secret_flags (NM_SETTING (a), key, &a_secret_flags, NULL); + nm_setting_get_secret_flags (NM_SETTING (b), key, &b_secret_flags, NULL); + + /* If the secret flags aren't the same, the settings aren't the same */ + if (a_secret_flags != b_secret_flags) + return FALSE; + + if ( (flags & NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS) + && (a_secret_flags & NM_SETTING_SECRET_FLAG_AGENT_OWNED)) + continue; + + if ( (flags & NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS) + && (a_secret_flags & NM_SETTING_SECRET_FLAG_NOT_SAVED)) + continue; + + /* Now compare the values themselves */ + if (g_strcmp0 (val, nm_setting_vpn_get_secret (b, key)) != 0) + return FALSE; + } + + return TRUE; +} + +static gboolean +compare_property (NMSetting *setting, + NMSetting *other, + const GParamSpec *prop_spec, + NMSettingCompareFlags flags) +{ + gboolean same; + + /* We only need to treat the 'secrets' property specially */ + if (g_strcmp0 (prop_spec->name, NM_SETTING_VPN_SECRETS) != 0) + return NM_SETTING_CLASS (nm_setting_vpn_parent_class)->compare_property (setting, other, prop_spec, flags); + + /* Compare A to B to ensure everything in A is found in B */ + same = compare_one_secret (NM_SETTING_VPN (setting), NM_SETTING_VPN (other), flags); + if (same) { + /* And then B to A to ensure everything in B is also found in A */ + same = compare_one_secret (NM_SETTING_VPN (other), NM_SETTING_VPN (setting), flags); + } + + return same; +} + static void destroy_one_secret (gpointer data) { @@ -572,6 +732,7 @@ nm_setting_vpn_class_init (NMSettingVPNClass *setting_class) parent_class->get_secret_flags = get_secret_flags; parent_class->set_secret_flags = set_secret_flags; parent_class->need_secrets = need_secrets; + parent_class->compare_property = compare_property; /* Properties */ /** @@ -595,23 +756,27 @@ nm_setting_vpn_class_init (NMSettingVPNClass *setting_class) /** * NMSettinVPN:user-name: * - * User name of the currently logged in user for connections provided by the - * user settings service. This name is provided to the VPN plugin to use in - * lieu of a custom username provided by that VPN plugins specific - * configuration. The VPN plugin itself decides which user name to use. + * If the VPN connection requires a user name for authentication, that name + * should be provided here. If the connection is available to more than + * one user, and the VPN requires each user to supply a different name, then + * leave this property empty. If this property is empty, NetworkManager + * will automatically supply the username of the user which requested the + * VPN connection. **/ g_object_class_install_property (object_class, PROP_USER_NAME, g_param_spec_string (NM_SETTING_VPN_USER_NAME, - "User name", - "User name of the currently logged in user for " - "connections provided by the user settings service. " - "This name is provided to the VPN plugin to use in " - "lieu of a custom username provided by that VPN " - "plugins specific configuration. The VPN plugin " - "itself decides which user name to use.", - NULL, - G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE)); + "User name", + "If the VPN connection requires a user name for " + "authentication, that name should be provided here. " + "If the connection is available to more than one " + "user, and the VPN requires each user to supply a " + "different name, then leave this property empty. If " + "this property is empty, NetworkManager will " + "automatically supply the username of the user which " + "requested the VPN connection.", + NULL, + G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE)); /** * NMSettingVPN:data: diff --git a/libnm-util/nm-setting-vpn.h b/libnm-util/nm-setting-vpn.h index 6ff19286..94fd650f 100644 --- a/libnm-util/nm-setting-vpn.h +++ b/libnm-util/nm-setting-vpn.h @@ -39,8 +39,14 @@ G_BEGIN_DECLS #define NM_SETTING_VPN_SETTING_NAME "vpn" -typedef enum -{ +/** + * NMSettingVpnError: + * @NM_SETTING_VPN_ERROR_UNKNOWN: unknown or unclassified error + * @NM_SETTING_VPN_ERROR_INVALID_PROPERTY: the property was invalid + * @NM_SETTING_VPN_ERROR_MISSING_PROPERTY: the property was missing and is + * required + */ +typedef enum { NM_SETTING_VPN_ERROR_UNKNOWN = 0, NM_SETTING_VPN_ERROR_INVALID_PROPERTY, NM_SETTING_VPN_ERROR_MISSING_PROPERTY, @@ -71,6 +77,13 @@ typedef struct { void (*_reserved4) (void); } NMSettingVPNClass; +/** + * NMVPNIterFunc: + * @key: the name of the data or secret item + * @value: the value of the data or secret item + * @user_data: User data passed to nm_setting_vpn_foreach_data_item() or + * nm_setting_vpn_foreach_secret() + **/ typedef void (*NMVPNIterFunc) (const char *key, const char *value, gpointer user_data); GType nm_setting_vpn_get_type (void); diff --git a/libnm-util/nm-setting-wimax.c b/libnm-util/nm-setting-wimax.c index 628c81d3..38a442f6 100644 --- a/libnm-util/nm-setting-wimax.c +++ b/libnm-util/nm-setting-wimax.c @@ -27,6 +27,22 @@ #include "nm-setting-wimax.h" #include "nm-param-spec-specialized.h" +/** + * SECTION:nm-setting-wimax + * @short_description: Describes 802.16e Mobile WiMAX connection properties + * @include: nm-setting-wimax.h + * + * The #NMSettingWimax object is a #NMSetting subclass that describes properties + * necessary for connection to 802.16e Mobile WiMAX networks. + **/ + +/** + * nm_setting_wimax_error_quark: + * + * Registers an error quark for #NMSettingWimax if necessary. + * + * Returns: the error quark used for #NMSettingWimax errors. + **/ GQuark nm_setting_wimax_error_quark (void) { @@ -78,12 +94,28 @@ enum { LAST_PROP }; +/** + * nm_setting_wimax_new: + * + * Creates a new #NMSettingWimax object with default values. + * + * Returns: the new empty #NMSettingWimax object + **/ NMSetting * nm_setting_wimax_new (void) { return (NMSetting *) g_object_new (NM_TYPE_SETTING_WIMAX, NULL); } +/** + * nm_setting_wimax_get_network_name: + * @setting: the #NMSettingWimax + * + * Returns the WiMAX NSP name (ex "Sprint" or "CLEAR") which identifies the + * specific WiMAX network this setting describes a connection to. + * + * Returns: the WiMAX NSP name + **/ const char * nm_setting_wimax_get_network_name (NMSettingWimax *setting) { @@ -92,6 +124,15 @@ nm_setting_wimax_get_network_name (NMSettingWimax *setting) return NM_SETTING_WIMAX_GET_PRIVATE (setting)->network_name; } +/** + * nm_setting_wimax_get_mac_address: + * @setting: the #NMSettingWimax + * + * Returns the MAC address of a WiMAX device which this connection is locked + * to. + * + * Returns: the MAC address + **/ const GByteArray * nm_setting_wimax_get_mac_address (NMSettingWimax *setting) { diff --git a/libnm-util/nm-setting-wimax.h b/libnm-util/nm-setting-wimax.h index a3e500be..2462ac06 100644 --- a/libnm-util/nm-setting-wimax.h +++ b/libnm-util/nm-setting-wimax.h @@ -35,8 +35,14 @@ G_BEGIN_DECLS #define NM_SETTING_WIMAX_SETTING_NAME "wimax" -typedef enum -{ +/** + * NMSettingWimaxError: + * @NM_SETTING_WIMAX_ERROR_UNKNOWN: unknown or unclassified error + * @NM_SETTING_WIMAX_ERROR_INVALID_PROPERTY: the property was invalid + * @NM_SETTING_WIMAX_ERROR_MISSING_PROPERTY: the property was missing and is + * required + */ +typedef enum { NM_SETTING_WIMAX_ERROR_UNKNOWN = 0, NM_SETTING_WIMAX_ERROR_INVALID_PROPERTY, NM_SETTING_WIMAX_ERROR_MISSING_PROPERTY diff --git a/libnm-util/nm-setting-wired.c b/libnm-util/nm-setting-wired.c index 8691aeee..d4e52e03 100644 --- a/libnm-util/nm-setting-wired.c +++ b/libnm-util/nm-setting-wired.c @@ -19,7 +19,7 @@ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * - * (C) Copyright 2007 - 2010 Red Hat, Inc. + * (C) Copyright 2007 - 2011 Red Hat, Inc. * (C) Copyright 2007 - 2008 Novell, Inc. */ @@ -27,6 +27,7 @@ #include #include #include +#include #include "nm-setting-wired.h" #include "nm-param-spec-specialized.h" @@ -34,6 +35,22 @@ #include "nm-utils-private.h" #include "nm-dbus-glib-types.h" +/** + * SECTION:nm-setting-wired + * @short_description: Describes connection properties for Ethernet-based networks + * @include: nm-setting-wired.h + * + * The #NMSettingWired object is a #NMSetting subclass that describes properties + * necessary for connection to Ethernet networks. + **/ + +/** + * nm_setting_wired_error_quark: + * + * Registers an error quark for #NMSettingWired if necessary. + * + * Returns: the error quark used for #NMSettingWired errors. + **/ GQuark nm_setting_wired_error_quark (void) { @@ -79,6 +96,7 @@ typedef struct { gboolean auto_negotiate; GByteArray *device_mac_address; GByteArray *cloned_mac_address; + GSList *mac_address_blacklist; guint32 mtu; GPtrArray *s390_subchannels; char *s390_nettype; @@ -93,6 +111,7 @@ enum { PROP_AUTO_NEGOTIATE, PROP_MAC_ADDRESS, PROP_CLONED_MAC_ADDRESS, + PROP_MAC_ADDRESS_BLACKLIST, PROP_MTU, PROP_S390_SUBCHANNELS, PROP_S390_NETTYPE, @@ -111,12 +130,25 @@ static const char *valid_s390_opts[] = { NULL }; +/** + * nm_setting_wired_new: + * + * Creates a new #NMSettingWired object with default values. + * + * Returns: (transfer full): the new empty #NMSettingWired object + **/ NMSetting * nm_setting_wired_new (void) { return (NMSetting *) g_object_new (NM_TYPE_SETTING_WIRED, NULL); } +/** + * nm_setting_wired_get_port: + * @setting: the #NMSettingWired + * + * Returns: the #NMSettingWired:port property of the setting + **/ const char * nm_setting_wired_get_port (NMSettingWired *setting) { @@ -125,6 +157,12 @@ nm_setting_wired_get_port (NMSettingWired *setting) return NM_SETTING_WIRED_GET_PRIVATE (setting)->port; } +/** + * nm_setting_wired_get_speed: + * @setting: the #NMSettingWired + * + * Returns: the #NMSettingWired:speed property of the setting + **/ guint32 nm_setting_wired_get_speed (NMSettingWired *setting) { @@ -133,6 +171,12 @@ nm_setting_wired_get_speed (NMSettingWired *setting) return NM_SETTING_WIRED_GET_PRIVATE (setting)->speed; } +/** + * nm_setting_wired_get_duplex: + * @setting: the #NMSettingWired + * + * Returns: the #NMSettingWired:duplex property of the setting + **/ const char * nm_setting_wired_get_duplex (NMSettingWired *setting) { @@ -141,6 +185,12 @@ nm_setting_wired_get_duplex (NMSettingWired *setting) return NM_SETTING_WIRED_GET_PRIVATE (setting)->duplex; } +/** + * nm_setting_wired_get_auto_negotiate: + * @setting: the #NMSettingWired + * + * Returns: the #NMSettingWired:auto-negotiate property of the setting + **/ gboolean nm_setting_wired_get_auto_negotiate (NMSettingWired *setting) { @@ -149,6 +199,12 @@ nm_setting_wired_get_auto_negotiate (NMSettingWired *setting) return NM_SETTING_WIRED_GET_PRIVATE (setting)->auto_negotiate; } +/** + * nm_setting_wired_get_mac_address: + * @setting: the #NMSettingWired + * + * Returns: the #NMSettingWired:mac-address property of the setting + **/ const GByteArray * nm_setting_wired_get_mac_address (NMSettingWired *setting) { @@ -157,6 +213,12 @@ nm_setting_wired_get_mac_address (NMSettingWired *setting) return NM_SETTING_WIRED_GET_PRIVATE (setting)->device_mac_address; } +/** + * nm_setting_wired_get_cloned_mac_address: + * @setting: the #NMSettingWired + * + * Returns: the #NMSettingWired:cloned-mac-address property of the setting + **/ const GByteArray * nm_setting_wired_get_cloned_mac_address (NMSettingWired *setting) { @@ -165,6 +227,27 @@ nm_setting_wired_get_cloned_mac_address (NMSettingWired *setting) return NM_SETTING_WIRED_GET_PRIVATE (setting)->cloned_mac_address; } +/** + * nm_setting_wired_get_mac_address_blacklist: + * @setting: the #NMSettingWired + * + * Returns: (element-type GLib.ByteArray): the #NMSettingWired:mac-address-blacklist + * property of the setting + **/ +const GSList * +nm_setting_wired_get_mac_address_blacklist (NMSettingWired *setting) +{ + g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), NULL); + + return NM_SETTING_WIRED_GET_PRIVATE (setting)->mac_address_blacklist; +} + +/** + * nm_setting_wired_get_mtu: + * @setting: the #NMSettingWired + * + * Returns: the #NMSettingWired:mtu property of the setting + **/ guint32 nm_setting_wired_get_mtu (NMSettingWired *setting) { @@ -181,8 +264,8 @@ nm_setting_wired_get_mtu (NMSettingWired *setting) * connection is applicable to. The connection should only be used in * conjunction with that device. * - * Returns: a #GPtrArray of strings, each specifying one subchannel the - * s390 device uses to communicate to the host. + * Returns: (element-type utf8): #GPtrArray of strings, each specifying one + * subchannel the s390 device uses to communicate to the host. **/ const GPtrArray * nm_setting_wired_get_s390_subchannels (NMSettingWired *setting) @@ -232,10 +315,10 @@ nm_setting_wired_get_num_s390_options (NMSettingWired *setting) * @setting: the #NMSettingWired * @idx: index of the desired option, from 0 to * nm_setting_wired_get_num_s390_options() - 1 - * @out_key: on return, the key name of the s390 specific option; this value is - * owned by the setting and should not be modified - * @out_value: on return, the value of the key of the s390 specific option; this + * @out_key: (out): on return, the key name of the s390 specific option; this * value is owned by the setting and should not be modified + * @out_value: (out): on return, the value of the key of the s390 specific + * option; this value is owned by the setting and should not be modified * * Given an index, return the value of the s390 option at that index. indexes * are *not* guaranteed to be static across modifications to options done by @@ -363,6 +446,7 @@ verify (NMSetting *setting, GSList *all_settings, GError **error) const char *valid_duplex[] = { "half", "full", NULL }; const char *valid_nettype[] = { "qeth", "lcs", "ctc", NULL }; GHashTableIter iter; + GSList* mac_blacklist_iter; const char *key, *value; if (priv->port && !_nm_utils_string_in_list (priv->port, valid_ports)) { @@ -389,6 +473,19 @@ verify (NMSetting *setting, GSList *all_settings, GError **error) return FALSE; } + for (mac_blacklist_iter = priv->mac_address_blacklist; mac_blacklist_iter; + mac_blacklist_iter = mac_blacklist_iter->next) { + struct ether_addr addr; + + if (!ether_aton_r (mac_blacklist_iter->data, &addr)) { + g_set_error (error, + NM_SETTING_WIRED_ERROR, + NM_SETTING_WIRED_ERROR_INVALID_PROPERTY, + NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST); + return FALSE; + } + } + if ( priv->s390_subchannels && !(priv->s390_subchannels->len == 3 || priv->s390_subchannels->len == 2)) { g_set_error (error, @@ -456,6 +553,8 @@ finalize (GObject *object) if (priv->cloned_mac_address) g_byte_array_free (priv->cloned_mac_address, TRUE); + nm_utils_slist_free (priv->mac_address_blacklist, g_free); + G_OBJECT_CLASS (nm_setting_wired_parent_class)->finalize (object); } @@ -497,6 +596,10 @@ set_property (GObject *object, guint prop_id, g_byte_array_free (priv->cloned_mac_address, TRUE); priv->cloned_mac_address = g_value_dup_boxed (value); break; + case PROP_MAC_ADDRESS_BLACKLIST: + nm_utils_slist_free (priv->mac_address_blacklist, g_free); + priv->mac_address_blacklist = g_value_dup_boxed (value); + break; case PROP_MTU: priv->mtu = g_value_get_uint (value); break; @@ -550,6 +653,9 @@ get_property (GObject *object, guint prop_id, case PROP_CLONED_MAC_ADDRESS: g_value_set_boxed (value, nm_setting_wired_get_cloned_mac_address (setting)); break; + case PROP_MAC_ADDRESS_BLACKLIST: + g_value_set_boxed (value, nm_setting_wired_get_mac_address_blacklist (setting)); + break; case PROP_MTU: g_value_set_uint (value, nm_setting_wired_get_mtu (setting)); break; @@ -685,6 +791,25 @@ nm_setting_wired_class_init (NMSettingWiredClass *setting_class) "This is known as MAC cloning or spoofing.", DBUS_TYPE_G_UCHAR_ARRAY, G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE)); + + /** + * NMSettingWired:mac-address-blacklist: + * + * If specified, this connection will never apply to the ethernet device + * whose permanent MAC address matches an address in the list. Each + * MAC address is in the standard hex-digits-and-colons notation + * (00:11:22:33:44:55). + **/ + g_object_class_install_property + (object_class, PROP_MAC_ADDRESS_BLACKLIST, + _nm_param_spec_specialized (NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST, + "MAC Address Blacklist", + "If specified, this connection will never apply to " + "the ethernet device whose permanent MAC address matches " + "an address in the list. Each MAC address is in the " + "standard hex-digits-and-colons notation (00:11:22:33:44:55).", + DBUS_TYPE_G_LIST_OF_STRING, + G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_FUZZY_IGNORE)); /** * NMSettingWired:mtu: diff --git a/libnm-util/nm-setting-wired.h b/libnm-util/nm-setting-wired.h index 32361b4b..36799fbe 100644 --- a/libnm-util/nm-setting-wired.h +++ b/libnm-util/nm-setting-wired.h @@ -19,7 +19,7 @@ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * - * (C) Copyright 2007 - 2010 Red Hat, Inc. + * (C) Copyright 2007 - 2011 Red Hat, Inc. * (C) Copyright 2007 - 2008 Novell, Inc. */ @@ -39,8 +39,14 @@ G_BEGIN_DECLS #define NM_SETTING_WIRED_SETTING_NAME "802-3-ethernet" -typedef enum -{ +/** + * NMSettingWiredError: + * @NM_SETTING_WIRED_ERROR_UNKNOWN: unknown or unclassified error + * @NM_SETTING_WIRED_ERROR_INVALID_PROPERTY: the property was invalid + * @NM_SETTING_WIRED_ERROR_MISSING_PROPERTY: the property was missing and is + * required + */ +typedef enum { NM_SETTING_WIRED_ERROR_UNKNOWN = 0, NM_SETTING_WIRED_ERROR_INVALID_PROPERTY, NM_SETTING_WIRED_ERROR_MISSING_PROPERTY @@ -58,6 +64,7 @@ GQuark nm_setting_wired_error_quark (void); #define NM_SETTING_WIRED_AUTO_NEGOTIATE "auto-negotiate" #define NM_SETTING_WIRED_MAC_ADDRESS "mac-address" #define NM_SETTING_WIRED_CLONED_MAC_ADDRESS "cloned-mac-address" +#define NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST "mac-address-blacklist" #define NM_SETTING_WIRED_MTU "mtu" #define NM_SETTING_WIRED_S390_SUBCHANNELS "s390-subchannels" #define NM_SETTING_WIRED_S390_NETTYPE "s390-nettype" @@ -86,6 +93,7 @@ const char * nm_setting_wired_get_duplex (NMSettingWired *setting gboolean nm_setting_wired_get_auto_negotiate (NMSettingWired *setting); const GByteArray *nm_setting_wired_get_mac_address (NMSettingWired *setting); const GByteArray *nm_setting_wired_get_cloned_mac_address (NMSettingWired *setting); +const GSList *nm_setting_wired_get_mac_address_blacklist (NMSettingWired *setting); guint32 nm_setting_wired_get_mtu (NMSettingWired *setting); const GPtrArray * nm_setting_wired_get_s390_subchannels (NMSettingWired *setting); diff --git a/libnm-util/nm-setting-wireless-security.c b/libnm-util/nm-setting-wireless-security.c index 3b4eba6f..cb9a6081 100644 --- a/libnm-util/nm-setting-wireless-security.c +++ b/libnm-util/nm-setting-wireless-security.c @@ -35,6 +35,36 @@ #include "nm-utils-private.h" #include "nm-setting-private.h" +/** + * SECTION:nm-setting-wireless-security + * @short_description: Describes connection properties for WiFi networks that + * use WEP, LEAP, WPA or WPA2/RSN security + * @include: nm-setting-wireless-security.h + * + * The #NMSettingWirelessSecurity object is a #NMSetting subclass that describes + * properties necessary for connection to encrypted WiFi networks. + * + * It's a good idea to read up on wpa_supplicant configuration before using this + * setting extensively, since most of the options here correspond closely with + * the relevant wpa_supplicant configuration options. To get a better overview + * of how WiFi security works, you may want to get copies of the following books. + * + * 802.11 Wireless Networks: The Definitive Guide, Second Edition + * Author: Matthew Gast + * ISBN: 978-0596100520 + * + * Cisco Wireless LAN Security + * Authors: Krishna Sankar, Sri Sundaralingam, Darrin Miller, and Andrew Balinsky + * ISBN: 978-1587051548 + **/ + +/** + * nm_setting_wired_error_quark: + * + * Registers an error quark for #NMSettingWired if necessary. + * + * Returns: the error quark used for #NMSettingWired errors. + **/ GQuark nm_setting_wireless_security_error_quark (void) { @@ -130,12 +160,25 @@ enum { LAST_PROP }; +/** + * nm_setting_wireless_security_new: + * + * Creates a new #NMSettingWirelessSecurity object with default values. + * + * Returns: (transfer full): the new empty #NMSettingWirelessSecurity object + **/ NMSetting * nm_setting_wireless_security_new (void) { return (NMSetting *) g_object_new (NM_TYPE_SETTING_WIRELESS_SECURITY, NULL); } +/** + * nm_setting_wireless_security_get_key_mgmt: + * @setting: the #NMSettingWirelessSecurity + * + * Returns: the #NMSettingWirelessSecurity:key-mgmt property of the setting + **/ const char * nm_setting_wireless_security_get_key_mgmt (NMSettingWirelessSecurity *setting) { @@ -144,6 +187,13 @@ nm_setting_wireless_security_get_key_mgmt (NMSettingWirelessSecurity *setting) return NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting)->key_mgmt; } +/** + * nm_setting_wireless_security_get_num_protos: + * @setting: the #NMSettingWirelessSecurity + * + * Returns: the number of security protocols this connection allows when + * connecting to secure WiFi networks + **/ guint32 nm_setting_wireless_security_get_num_protos (NMSettingWirelessSecurity *setting) { @@ -152,6 +202,13 @@ nm_setting_wireless_security_get_num_protos (NMSettingWirelessSecurity *setting) return g_slist_length (NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting)->proto); } +/** + * nm_setting_wireless_security_get_proto: + * @setting: the #NMSettingWirelessSecurity + * @i: an index into the protocol list + * + * Returns: the protocol at index @i + **/ const char * nm_setting_wireless_security_get_proto (NMSettingWirelessSecurity *setting, guint32 i) { @@ -165,6 +222,21 @@ nm_setting_wireless_security_get_proto (NMSettingWirelessSecurity *setting, guin return (const char *) g_slist_nth_data (priv->proto, i); } +/** + * nm_setting_wireless_security_add_proto: + * @setting: the #NMSettingWirelessSecurity + * @proto: the protocol to add, one of "wpa" or "rsn" + * + * Adds a WiFi security protocol (one of "wpa" or "rsn") to the allowed list; + * only protocols in this list will be used when finding and connecting to + * the WiFi network specified by this connection. For example, if the + * protocol list contains only "wpa" but the access point for the SSID specified + * by this connection only supports WPA2/RSN, the connection cannot be used + * with the access point. + * + * Returns: %TRUE if the protocol was new and and was added to the allowed + * protocol list, or %FALSE if it was already in the list + **/ gboolean nm_setting_wireless_security_add_proto (NMSettingWirelessSecurity *setting, const char *proto) { @@ -176,7 +248,7 @@ nm_setting_wireless_security_add_proto (NMSettingWirelessSecurity *setting, cons priv = NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting); for (iter = priv->proto; iter; iter = g_slist_next (iter)) { - if (!strcmp (proto, (char *) iter->data)) + if (strcasecmp (proto, (char *) iter->data) == 0) return FALSE; } @@ -184,6 +256,13 @@ nm_setting_wireless_security_add_proto (NMSettingWirelessSecurity *setting, cons return TRUE; } +/** + * nm_setting_wireless_security_remove_proto: + * @setting: the #NMSettingWirelessSecurity + * @i: index of the protocol to remove + * + * Removes a protocol from the allowed protocol list. + **/ void nm_setting_wireless_security_remove_proto (NMSettingWirelessSecurity *setting, guint32 i) { @@ -200,6 +279,13 @@ nm_setting_wireless_security_remove_proto (NMSettingWirelessSecurity *setting, g priv->proto = g_slist_delete_link (priv->proto, elt); } +/** + * nm_setting_wireless_security_clear_protos: + * @setting: the #NMSettingWirelessSecurity + * + * Removes all protocols from the allowed list. If there are no protocols + * specified then all protocols are allowed. + **/ void nm_setting_wireless_security_clear_protos (NMSettingWirelessSecurity *setting) { @@ -212,6 +298,12 @@ nm_setting_wireless_security_clear_protos (NMSettingWirelessSecurity *setting) priv->proto = NULL; } +/** + * nm_setting_wireless_security_get_num_pairwise: + * @setting: the #NMSettingWirelessSecurity + * + * Returns: the number of pairwise encryption algorithms in the allowed list + **/ guint32 nm_setting_wireless_security_get_num_pairwise (NMSettingWirelessSecurity *setting) { @@ -220,6 +312,16 @@ nm_setting_wireless_security_get_num_pairwise (NMSettingWirelessSecurity *settin return g_slist_length (NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting)->pairwise); } +/** + * nm_setting_wireless_security_get_pairwise: + * @setting: the #NMSettingWirelessSecurity + * @i: index of an item in the allowed pairwise encryption algorithm list + * + * Returns the allowed pairwise encryption algorithm from allowed algorithm + * list. + * + * Returns: the pairwise encryption algorithm at index @i + **/ const char * nm_setting_wireless_security_get_pairwise (NMSettingWirelessSecurity *setting, guint32 i) { @@ -233,6 +335,20 @@ nm_setting_wireless_security_get_pairwise (NMSettingWirelessSecurity *setting, g return (const char *) g_slist_nth_data (priv->pairwise, i); } +/** + * nm_setting_wireless_security_add_pairwise: + * @setting: the #NMSettingWirelessSecurity + * @pairwise: the encryption algorithm to add, one of "wep40", "wep104", + * "tkip", or "ccmp" + * + * Adds an encryption algorithm to the list of allowed pairwise encryption + * algorithms. If the list is not empty, then only access points that support + * one or more of the encryption algorithms in the list will be considered + * compatible with this connection. + * + * Returns: %TRUE if the algorithm was added to the list, %FALSE if it was + * already in the list + **/ gboolean nm_setting_wireless_security_add_pairwise (NMSettingWirelessSecurity *setting, const char *pairwise) { @@ -244,7 +360,7 @@ nm_setting_wireless_security_add_pairwise (NMSettingWirelessSecurity *setting, c priv = NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting); for (iter = priv->pairwise; iter; iter = g_slist_next (iter)) { - if (!strcmp (pairwise, (char *) iter->data)) + if (strcasecmp (pairwise, (char *) iter->data) == 0) return FALSE; } @@ -252,6 +368,14 @@ nm_setting_wireless_security_add_pairwise (NMSettingWirelessSecurity *setting, c return TRUE; } +/** + * nm_setting_wireless_security_remove_pairwise: + * @setting: the #NMSettingWirelessSecurity + * @i: the index of an item in the allowed pairwise encryption algorithm list + * + * Removes an encryption algorithm from the allowed pairwise encryption + * algorithm list. + **/ void nm_setting_wireless_security_remove_pairwise (NMSettingWirelessSecurity *setting, guint32 i) { @@ -268,6 +392,13 @@ nm_setting_wireless_security_remove_pairwise (NMSettingWirelessSecurity *setting priv->pairwise = g_slist_delete_link (priv->pairwise, elt); } +/** + * nm_setting_wireless_security_clear_pairwise: + * @setting: the #NMSettingWirelessSecurity + * + * Removes all algorithms from the allowed list. If there are no algorithms + * specified then all pairwise encryption algorithms are allowed. + **/ void nm_setting_wireless_security_clear_pairwise (NMSettingWirelessSecurity *setting) { @@ -280,6 +411,12 @@ nm_setting_wireless_security_clear_pairwise (NMSettingWirelessSecurity *setting) priv->pairwise = NULL; } +/** + * nm_setting_wireless_security_get_num_groups: + * @setting: the #NMSettingWirelessSecurity + * + * Returns: the number of groupwise encryption algorithms in the allowed list + **/ guint32 nm_setting_wireless_security_get_num_groups (NMSettingWirelessSecurity *setting) { @@ -288,6 +425,16 @@ nm_setting_wireless_security_get_num_groups (NMSettingWirelessSecurity *setting) return g_slist_length (NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting)->group); } +/** + * nm_setting_wireless_security_get_group: + * @setting: the #NMSettingWirelessSecurity + * @i: index of an item in the allowed groupwise encryption algorithm list + * + * Returns the allowed groupwise encryption algorithm from allowed algorithm + * list. + * + * Returns: the groupwise encryption algorithm at index @i + **/ const char * nm_setting_wireless_security_get_group (NMSettingWirelessSecurity *setting, guint32 i) { @@ -301,6 +448,20 @@ nm_setting_wireless_security_get_group (NMSettingWirelessSecurity *setting, guin return (const char *) g_slist_nth_data (priv->group, i); } +/** + * nm_setting_wireless_security_add_group: + * @setting: the #NMSettingWirelessSecurity + * @group: the encryption algorithm to add, one of "wep40", "wep104", + * "tkip", or "ccmp" + * + * Adds an encryption algorithm to the list of allowed groupwise encryption + * algorithms. If the list is not empty, then only access points that support + * one or more of the encryption algorithms in the list will be considered + * compatible with this connection. + * + * Returns: %TRUE if the algorithm was added to the list, %FALSE if it was + * already in the list + **/ gboolean nm_setting_wireless_security_add_group (NMSettingWirelessSecurity *setting, const char *group) { @@ -312,7 +473,7 @@ nm_setting_wireless_security_add_group (NMSettingWirelessSecurity *setting, cons priv = NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting); for (iter = priv->group; iter; iter = g_slist_next (iter)) { - if (!strcmp (group, (char *) iter->data)) + if (strcasecmp (group, (char *) iter->data) == 0) return FALSE; } @@ -320,6 +481,14 @@ nm_setting_wireless_security_add_group (NMSettingWirelessSecurity *setting, cons return TRUE; } +/** + * nm_setting_wireless_security_remove_group: + * @setting: the #NMSettingWirelessSecurity + * @i: the index of an item in the allowed groupwise encryption algorithm list + * + * Removes an encryption algorithm from the allowed groupwise encryption + * algorithm list. + **/ void nm_setting_wireless_security_remove_group (NMSettingWirelessSecurity *setting, guint32 i) { @@ -336,6 +505,13 @@ nm_setting_wireless_security_remove_group (NMSettingWirelessSecurity *setting, g priv->group = g_slist_delete_link (priv->group, elt); } +/** + * nm_setting_wireless_security_clear_groups: + * @setting: the #NMSettingWirelessSecurity + * + * Removes all algorithms from the allowed list. If there are no algorithms + * specified then all groupwise encryption algorithms are allowed. + **/ void nm_setting_wireless_security_clear_groups (NMSettingWirelessSecurity *setting) { @@ -348,6 +524,12 @@ nm_setting_wireless_security_clear_groups (NMSettingWirelessSecurity *setting) priv->group = NULL; } +/** + * nm_setting_wireless_security_get_psk: + * @setting: the #NMSettingWirelessSecurity + * + * Returns: the #NMSettingWirelessSecurity:psk property of the setting + **/ const char * nm_setting_wireless_security_get_psk (NMSettingWirelessSecurity *setting) { @@ -371,6 +553,12 @@ nm_setting_wireless_security_get_psk_flags (NMSettingWirelessSecurity *setting) return NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting)->psk_flags; } +/** + * nm_setting_wireless_security_get_leap_username: + * @setting: the #NMSettingWirelessSecurity + * + * Returns: the #NMSettingWirelessSecurity:leap-username property of the setting + **/ const char * nm_setting_wireless_security_get_leap_username (NMSettingWirelessSecurity *setting) { @@ -379,6 +567,12 @@ nm_setting_wireless_security_get_leap_username (NMSettingWirelessSecurity *setti return NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting)->leap_username; } +/** + * nm_setting_wireless_security_get_leap_password: + * @setting: the #NMSettingWirelessSecurity + * + * Returns: the #NMSettingWirelessSecurity:leap-password property of the setting + **/ const char * nm_setting_wireless_security_get_leap_password (NMSettingWirelessSecurity *setting) { @@ -402,6 +596,13 @@ nm_setting_wireless_security_get_leap_password_flags (NMSettingWirelessSecurity return NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting)->leap_password_flags; } +/** + * nm_setting_wireless_security_get_wep_key: + * @setting: the #NMSettingWirelessSecurity + * @idx: the WEP key index (0..3 inclusive) + * + * Returns: the WEP key at the given index + **/ const char * nm_setting_wireless_security_get_wep_key (NMSettingWirelessSecurity *setting, guint32 idx) { @@ -424,6 +625,16 @@ nm_setting_wireless_security_get_wep_key (NMSettingWirelessSecurity *setting, gu return NULL; } +/** + * nm_setting_wireless_security_set_wep_key: + * @setting: the #NMSettingWirelessSecurity + * @idx: the index of the key (0..3 inclusive) + * @key: the WEP key as a string, in either hexadecimal, ASCII, or passphrase + * form as determiend by the value of the #NMSettingWirelessSecurity:wep-key-type + * property. + * + * Sets a WEP key in the given index. + **/ void nm_setting_wireless_security_set_wep_key (NMSettingWirelessSecurity *setting, guint32 idx, const char *key) { @@ -455,6 +666,12 @@ nm_setting_wireless_security_set_wep_key (NMSettingWirelessSecurity *setting, gu } } +/** + * nm_setting_wireless_security_get_wep_tx_keyidx: + * @setting: the #NMSettingWirelessSecurity + * + * Returns: the #NMSettingWirelessSecurity:wep-tx-keyidx property of the setting + **/ guint32 nm_setting_wireless_security_get_wep_tx_keyidx (NMSettingWirelessSecurity *setting) { @@ -463,6 +680,12 @@ nm_setting_wireless_security_get_wep_tx_keyidx (NMSettingWirelessSecurity *setti return NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting)->wep_tx_keyidx; } +/** + * nm_setting_wireless_security_get_auth_alg: + * @setting: the #NMSettingWirelessSecurity + * + * Returns: the #NMSettingWirelessSecurity:auth-alg property of the setting + **/ const char * nm_setting_wireless_security_get_auth_alg (NMSettingWirelessSecurity *setting) { @@ -485,6 +708,12 @@ nm_setting_wireless_security_get_wep_key_flags (NMSettingWirelessSecurity *setti return NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting)->wep_key_flags; } +/** + * nm_setting_wireless_security_get_wep_key_type: + * @setting: the #NMSettingWirelessSecurity + * + * Returns: the #NMSettingWirelessSecurity:wep-key-type property of the setting + **/ NMWepKeyType nm_setting_wireless_security_get_wep_key_type (NMSettingWirelessSecurity *setting) { @@ -1353,9 +1582,8 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting /** * NMSettingWirelessSecurity:wep-key-type: * - * Controls the interpretation of WEP keys. Allowed values are 1 (interpret - * WEP keys as hexadecimal or ASCII keys) or 2 (interpret WEP keys as WEP - * Passphrases). If set to 1 and the keys are hexadecimal, they must be + * Controls the interpretation of WEP keys. Allowed values are those given + * by %NMWepKeyType. If set to 1 and the keys are hexadecimal, they must be * either 10 or 26 characters in length. If set to 1 and the keys are * ASCII keys, they must be either 5 or 13 characters in length. If set to * 2, the passphrase is hashed using the de-facto MD5 method to derive the diff --git a/libnm-util/nm-setting-wireless-security.h b/libnm-util/nm-setting-wireless-security.h index 743e161f..5f23893a 100644 --- a/libnm-util/nm-setting-wireless-security.h +++ b/libnm-util/nm-setting-wireless-security.h @@ -39,8 +39,23 @@ G_BEGIN_DECLS #define NM_SETTING_WIRELESS_SECURITY_SETTING_NAME "802-11-wireless-security" -typedef enum -{ +/** + * NMSettingWirelessSecurityError: + * @NM_SETTING_WIRELESS_SECURITY_ERROR_UNKNOWN: unknown or unclassified error + * @NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY: the property was invalid + * @NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_PROPERTY: the property was + * missing and is required + * @NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING: a property contained + * a value that requires the connection to contain a #NMSetting8021x setting + * @NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X: LEAP authentication + * was specified but key management was not set to "8021x" + * @NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME: LEAP authentication + * was specified but no LEAP username was given + * @NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP: Shared Key + * authentication was specified but the setting did not specify WEP as the + * encryption protocol + */ +typedef enum { NM_SETTING_WIRELESS_SECURITY_ERROR_UNKNOWN = 0, NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY, NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_PROPERTY, @@ -56,6 +71,29 @@ GType nm_setting_wireless_security_error_get_type (void); #define NM_SETTING_WIRELESS_SECURITY_ERROR nm_setting_wireless_security_error_quark () GQuark nm_setting_wireless_security_error_quark (void); +/** + * NMWepKeyType: + * @NM_WEP_KEY_TYPE_UNKNOWN: unknown WEP key type + * @NM_WEP_KEY_TYPE_KEY: indicates a hexadecimal or ASCII formatted WEP key. + * Hex keys are either 10 or 26 hexadecimal characters (ie "5f782f2f5f" or + * "732f2d712e4a394a375d366931"), while ASCII keys are either 5 or 13 ASCII + * characters (ie "abcde" or "blahblah99$*1"). + * @NM_WEP_KEY_TYPE_PASSPHRASE: indicates a WEP passphrase (ex "I bought a duck + * on my way back from the market 235Q&^%^*%") instead of a hexadecimal or ASCII + * key. Passphrases are between 8 and 64 characters inclusive and are hashed + * the actual WEP key using the MD5 hash algorithm. + * @NM_WEP_KEY_TYPE_LAST: placeholder value for bounds-checking + * + * The #NMWepKeyType values specify how any WEP keys present in the setting + * are intepreted. There are no standards governing how to hash the various WEP + * key/passphrase formats into the actual WEP key. Unfortunately some WEP keys + * can be interpreted in multiple ways, requring the setting to specify how to + * interpret the any WEP keys. For example, the key "732f2d712e4a394a375d366931" + * is both a valid Hexadecimal WEP key and a WEP passphrase. Further, many + * ASCII keys are also valid WEP passphrases, but since passphrases and ASCII + * keys are hashed differently to determine the actual WEP key the type must be + * specified. + */ typedef enum { NM_WEP_KEY_TYPE_UNKNOWN = 0, NM_WEP_KEY_TYPE_KEY = 1, /* Hex or ASCII */ diff --git a/libnm-util/nm-setting-wireless.c b/libnm-util/nm-setting-wireless.c index 1e243f0f..37ad07ab 100644 --- a/libnm-util/nm-setting-wireless.c +++ b/libnm-util/nm-setting-wireless.c @@ -19,7 +19,7 @@ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * - * (C) Copyright 2007 - 2010 Red Hat, Inc. + * (C) Copyright 2007 - 2011 Red Hat, Inc. * (C) Copyright 2007 - 2008 Novell, Inc. */ @@ -37,6 +37,22 @@ #include "nm-dbus-glib-types.h" #include "nm-utils-private.h" +/** + * SECTION:nm-setting-wireless + * @short_description: Describes connection properties for 802.11 WiFi networks + * @include: nm-setting-wireless.h + * + * The #NMSettingWireless object is a #NMSetting subclass that describes properties + * necessary for connection to 802.11 WiFi networks. + **/ + +/** + * nm_setting_wireless_error_quark: + * + * Registers an error quark for #NMSettingWireless if necessary. + * + * Returns: the error quark used for #NMSettingWireless errors. + **/ GQuark nm_setting_wireless_error_quark (void) { @@ -89,6 +105,7 @@ typedef struct { guint32 tx_power; GByteArray *device_mac_address; GByteArray *cloned_mac_address; + GSList *mac_address_blacklist; guint32 mtu; GSList *seen_bssids; char *security; @@ -105,6 +122,7 @@ enum { PROP_TX_POWER, PROP_MAC_ADDRESS, PROP_CLONED_MAC_ADDRESS, + PROP_MAC_ADDRESS_BLACKLIST, PROP_MTU, PROP_SEEN_BSSIDS, PROP_SEC, @@ -128,6 +146,27 @@ match_cipher (const char *cipher, return TRUE; } +/** + * nm_setting_wireless_ap_security_compatible: + * @s_wireless: a #NMSettingWireless + * @s_wireless_sec: a #NMSettingWirelessSecurity or %NULL + * @ap_flags: the %NM80211ApFlags of the given access point + * @ap_wpa: the %NM80211ApSecurityFlags of the given access point's WPA + * capabilities + * @ap_rsn: the %NM80211ApSecurityFlags of the given access point's WPA2/RSN + * capabilities + * @ap_mode: the 802.11 mode of the AP, either Ad-Hoc or Infrastructure + * + * Given a #NMSettingWireless and an optional #NMSettingWirelessSecurity, + * determine if the configuration given by the settings is compatible with + * the security of an access point using that access point's capability flags + * and mode. Useful for clients that wish to filter a set of connections + * against a set of access points and determine which connections are + * compatible with which access points. + * + * Returns: %TRUE if the given settings are compatible with the access point's + * security flags and mode, %FALSE if they are not. + */ gboolean nm_setting_wireless_ap_security_compatible (NMSettingWireless *s_wireless, NMSettingWirelessSecurity *s_wireless_sec, @@ -289,12 +328,25 @@ nm_setting_wireless_ap_security_compatible (NMSettingWireless *s_wireless, return FALSE; } +/** + * nm_setting_wireless_new: + * + * Creates a new #NMSettingWireless object with default values. + * + * Returns: (transfer full): the new empty #NMSettingWireless object + **/ NMSetting * nm_setting_wireless_new (void) { return (NMSetting *) g_object_new (NM_TYPE_SETTING_WIRELESS, NULL); } +/** + * nm_setting_wireless_get_ssid: + * @setting: the #NMSettingWireless + * + * Returns: the #NMSettingWireless:ssid property of the setting + **/ const GByteArray * nm_setting_wireless_get_ssid (NMSettingWireless *setting) { @@ -303,6 +355,12 @@ nm_setting_wireless_get_ssid (NMSettingWireless *setting) return NM_SETTING_WIRELESS_GET_PRIVATE (setting)->ssid; } +/** + * nm_setting_wireless_get_mode: + * @setting: the #NMSettingWireless + * + * Returns: the #NMSettingWireless:mode property of the setting + **/ const char * nm_setting_wireless_get_mode (NMSettingWireless *setting) { @@ -311,6 +369,12 @@ nm_setting_wireless_get_mode (NMSettingWireless *setting) return NM_SETTING_WIRELESS_GET_PRIVATE (setting)->mode; } +/** + * nm_setting_wireless_get_band: + * @setting: the #NMSettingWireless + * + * Returns: the #NMSettingWireless:band property of the setting + **/ const char * nm_setting_wireless_get_band (NMSettingWireless *setting) { @@ -319,6 +383,12 @@ nm_setting_wireless_get_band (NMSettingWireless *setting) return NM_SETTING_WIRELESS_GET_PRIVATE (setting)->band; } +/** + * nm_setting_wireless_get_channel: + * @setting: the #NMSettingWireless + * + * Returns: the #NMSettingWireless:channel property of the setting + **/ guint32 nm_setting_wireless_get_channel (NMSettingWireless *setting) { @@ -327,6 +397,12 @@ nm_setting_wireless_get_channel (NMSettingWireless *setting) return NM_SETTING_WIRELESS_GET_PRIVATE (setting)->channel; } +/** + * nm_setting_wireless_get_bssid: + * @setting: the #NMSettingWireless + * + * Returns: the #NMSettingWireless:bssid property of the setting + **/ const GByteArray * nm_setting_wireless_get_bssid (NMSettingWireless *setting) { @@ -335,6 +411,12 @@ nm_setting_wireless_get_bssid (NMSettingWireless *setting) return NM_SETTING_WIRELESS_GET_PRIVATE (setting)->bssid; } +/** + * nm_setting_wireless_get_rate: + * @setting: the #NMSettingWireless + * + * Returns: the #NMSettingWireless:rate property of the setting + **/ guint32 nm_setting_wireless_get_rate (NMSettingWireless *setting) { @@ -343,6 +425,12 @@ nm_setting_wireless_get_rate (NMSettingWireless *setting) return NM_SETTING_WIRELESS_GET_PRIVATE (setting)->rate; } +/** + * nm_setting_wireless_get_tx_power: + * @setting: the #NMSettingWireless + * + * Returns: the #NMSettingWireless:tx-power property of the setting + **/ guint32 nm_setting_wireless_get_tx_power (NMSettingWireless *setting) { @@ -351,6 +439,12 @@ nm_setting_wireless_get_tx_power (NMSettingWireless *setting) return NM_SETTING_WIRELESS_GET_PRIVATE (setting)->tx_power; } +/** + * nm_setting_wireless_get_mac_address: + * @setting: the #NMSettingWireless + * + * Returns: the #NMSettingWireless:mac-address property of the setting + **/ const GByteArray * nm_setting_wireless_get_mac_address (NMSettingWireless *setting) { @@ -359,6 +453,12 @@ nm_setting_wireless_get_mac_address (NMSettingWireless *setting) return NM_SETTING_WIRELESS_GET_PRIVATE (setting)->device_mac_address; } +/** + * nm_setting_wireless_get_cloned_mac_address: + * @setting: the #NMSettingWireless + * + * Returns: the #NMSettingWireless:cloned-mac-address property of the setting + **/ const GByteArray * nm_setting_wireless_get_cloned_mac_address (NMSettingWireless *setting) { @@ -367,6 +467,27 @@ nm_setting_wireless_get_cloned_mac_address (NMSettingWireless *setting) return NM_SETTING_WIRELESS_GET_PRIVATE (setting)->cloned_mac_address; } +/** + * nm_setting_wireless_get_mac_address_blacklist: + * @setting: the #NMSettingWireless + * + * Returns: (element-type GLib.ByteArray): the + * #NMSettingWireless:mac-address-blacklist property of the setting + **/ +const GSList * +nm_setting_wireless_get_mac_address_blacklist (NMSettingWireless *setting) +{ + g_return_val_if_fail (NM_IS_SETTING_WIRELESS (setting), NULL); + + return NM_SETTING_WIRELESS_GET_PRIVATE (setting)->mac_address_blacklist; +} + +/** + * nm_setting_wireless_get_mtu: + * @setting: the #NMSettingWireless + * + * Returns: the #NMSettingWireless:mtu property of the setting + **/ guint32 nm_setting_wireless_get_mtu (NMSettingWireless *setting) { @@ -375,6 +496,12 @@ nm_setting_wireless_get_mtu (NMSettingWireless *setting) return NM_SETTING_WIRELESS_GET_PRIVATE (setting)->mtu; } +/** + * nm_setting_wireless_get_security: + * @setting: the #NMSettingWireless + * + * Returns: the #NMSettingWireless:security property of the setting + **/ const char * nm_setting_wireless_get_security (NMSettingWireless *setting) { @@ -383,6 +510,17 @@ nm_setting_wireless_get_security (NMSettingWireless *setting) return NM_SETTING_WIRELESS_GET_PRIVATE (setting)->security; } +/** + * nm_setting_wireless_add_seen_bssid: + * @setting: the #NMSettingWireless + * @bssid: the new BSSID to add to the list + * + * Adds a new WiFi AP's BSSID to the previously seen BSSID list of the setting. + * NetworkManager tracks previously seen BSSIDs internally so this function + * no longer has much use. + * + * Returns: %TRUE if @bssid was already known, %FALSE if not + **/ gboolean nm_setting_wireless_add_seen_bssid (NMSettingWireless *setting, const char *bssid) @@ -416,6 +554,12 @@ nm_setting_wireless_add_seen_bssid (NMSettingWireless *setting, return !found; } +/** + * nm_setting_wireless_get_num_seen_bssids: + * @setting: the #NMSettingWireless + * + * Returns: the number of BSSIDs in the previously seen BSSID list + **/ guint32 nm_setting_wireless_get_num_seen_bssids (NMSettingWireless *setting) { @@ -424,6 +568,13 @@ nm_setting_wireless_get_num_seen_bssids (NMSettingWireless *setting) return g_slist_length (NM_SETTING_WIRELESS_GET_PRIVATE (setting)->seen_bssids); } +/** + * nm_setting_wireless_get_seen_bssid: + * @setting: the #NMSettingWireless + * @i: index of a BSSID in the previously seen BSSID list + * + * Returns: the BSSID at index @i + **/ const char * nm_setting_wireless_get_seen_bssid (NMSettingWireless *setting, guint32 i) @@ -524,6 +675,18 @@ verify (NMSetting *setting, GSList *all_settings, GError **error) return FALSE; } + for (iter = priv->mac_address_blacklist; iter; iter = iter->next) { + struct ether_addr addr; + + if (!ether_aton_r (iter->data, &addr)) { + g_set_error (error, + NM_SETTING_WIRELESS_ERROR, + NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY, + NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST); + return FALSE; + } + } + for (iter = priv->seen_bssids; iter; iter = iter->next) { struct ether_addr addr; @@ -571,7 +734,7 @@ finalize (GObject *object) g_byte_array_free (priv->device_mac_address, TRUE); if (priv->cloned_mac_address) g_byte_array_free (priv->cloned_mac_address, TRUE); - + nm_utils_slist_free (priv->mac_address_blacklist, g_free); nm_utils_slist_free (priv->seen_bssids, g_free); G_OBJECT_CLASS (nm_setting_wireless_parent_class)->finalize (object); @@ -621,6 +784,10 @@ set_property (GObject *object, guint prop_id, g_byte_array_free (priv->cloned_mac_address, TRUE); priv->cloned_mac_address = g_value_dup_boxed (value); break; + case PROP_MAC_ADDRESS_BLACKLIST: + nm_utils_slist_free (priv->mac_address_blacklist, g_free); + priv->mac_address_blacklist = g_value_dup_boxed (value); + break; case PROP_MTU: priv->mtu = g_value_get_uint (value); break; @@ -672,6 +839,9 @@ get_property (GObject *object, guint prop_id, case PROP_CLONED_MAC_ADDRESS: g_value_set_boxed (value, nm_setting_wireless_get_cloned_mac_address (setting)); break; + case PROP_MAC_ADDRESS_BLACKLIST: + g_value_set_boxed (value, nm_setting_wireless_get_mac_address_blacklist (setting)); + break; case PROP_MTU: g_value_set_uint (value, nm_setting_wireless_get_mtu (setting)); break; @@ -868,32 +1038,42 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_class) DBUS_TYPE_G_UCHAR_ARRAY, G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE)); + /** + * NMSettingWireless:mac-address-blacklist: + * + * If specified, this connection will never apply to the WiFi device + * whose permanent MAC address matches an address in the list. Each + * MAC address is in the standard hex-digits-and-colons notation. + * (00:11:22:33:44:55). + **/ + g_object_class_install_property + (object_class, PROP_MAC_ADDRESS_BLACKLIST, + _nm_param_spec_specialized (NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST, + "MAC Address Blacklist", + "If specified, this connection will never apply to " + "the WiFi device whose permanent MAC address matches " + "an address in the list. Each MAC address is in the " + "standard hex-digits-and-colons notation (00:11:22:33:44:55).", + DBUS_TYPE_G_LIST_OF_STRING, + G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_FUZZY_IGNORE)); + /** * NMSettingWireless:seen-bssids: * * A list of BSSIDs (each BSSID formatted as a MAC address like * '00:11:22:33:44:55') that have been detected as part of the WiFI network. - * The settings service will usually populate this property by periodically - * asking NetworkManager what the device's current AP is while connected - * to the network (or monitoring the device's 'active-ap' property) and - * adding the current AP'sBSSID to this list. This list helps NetworkManager - * find hidden APs by matching up scan results with the BSSIDs in this list. + * NetworkManager internally tracks previously seen BSSIDs so this property + * is no longer of much use. **/ g_object_class_install_property (object_class, PROP_SEEN_BSSIDS, _nm_param_spec_specialized (NM_SETTING_WIRELESS_SEEN_BSSIDS, "Seen BSSIDS", "A list of BSSIDs (each BSSID formatted as a MAC " - "address like '00:11:22:33:44:55') that have been " - "detected as part of the WiFI network. The " - "settings service will usually populate this " - "property by periodically asking NetworkManager " - "what the device's current AP is while connected " - "to the network (or monitoring the device's " - "'active-ap' property) and adding the current AP's " - "BSSID to this list. This list helps NetworkManager " - "find hidden APs by matching up scan results with " - "the BSSIDs in this list.", + "address like 00:11:22:33:44:55') that have been " + "detected as part of the WiFI network. " + "NetworkManager internally tracks previously seen " + "BSSIDs so this property is no longer of much use.", DBUS_TYPE_G_LIST_OF_STRING, G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_FUZZY_IGNORE)); diff --git a/libnm-util/nm-setting-wireless.h b/libnm-util/nm-setting-wireless.h index d3e1ed41..746466be 100644 --- a/libnm-util/nm-setting-wireless.h +++ b/libnm-util/nm-setting-wireless.h @@ -19,7 +19,7 @@ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * - * (C) Copyright 2007 - 2010 Red Hat, Inc. + * (C) Copyright 2007 - 2011 Red Hat, Inc. * (C) Copyright 2007 - 2008 Novell, Inc. */ @@ -41,8 +41,18 @@ G_BEGIN_DECLS #define NM_SETTING_WIRELESS_SETTING_NAME "802-11-wireless" -typedef enum -{ +/** + * NMSettingWirelessError: + * @NM_SETTING_WIRELESS_ERROR_UNKNOWN: unknown or unclassified error + * @NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY: the property was invalid + * @NM_SETTING_WIRELESS_ERROR_MISSING_PROPERTY: the property was missing and is + * required + * @NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING: property values require + * the presence of an #NMSettingWirelessSecurity object in the connection + * @NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND: the property channel was + * set to a value that requires the #NMSettingWireless:band property to be set + */ +typedef enum { NM_SETTING_WIRELESS_ERROR_UNKNOWN = 0, NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY, NM_SETTING_WIRELESS_ERROR_MISSING_PROPERTY, @@ -65,11 +75,24 @@ GQuark nm_setting_wireless_error_quark (void); #define NM_SETTING_WIRELESS_TX_POWER "tx-power" #define NM_SETTING_WIRELESS_MAC_ADDRESS "mac-address" #define NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS "cloned-mac-address" +#define NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST "mac-address-blacklist" #define NM_SETTING_WIRELESS_MTU "mtu" #define NM_SETTING_WIRELESS_SEEN_BSSIDS "seen-bssids" #define NM_SETTING_WIRELESS_SEC "security" +/** + * NM_SETTING_WIRELESS_MODE_ADHOC: + * + * Indicates Ad-Hoc mode where no access point is expected to be present. + */ #define NM_SETTING_WIRELESS_MODE_ADHOC "adhoc" + +/** + * NM_SETTING_WIRELESS_MODE_INFRA + * + * Indicates infrastructure mode where an access point is expected to be present + * for this connection. + */ #define NM_SETTING_WIRELESS_MODE_INFRA "infrastructure" typedef struct { @@ -99,6 +122,7 @@ guint32 nm_setting_wireless_get_rate (NMSettingWireless guint32 nm_setting_wireless_get_tx_power (NMSettingWireless *setting); const GByteArray *nm_setting_wireless_get_mac_address (NMSettingWireless *setting); const GByteArray *nm_setting_wireless_get_cloned_mac_address (NMSettingWireless *setting); +const GSList *nm_setting_wireless_get_mac_address_blacklist (NMSettingWireless *setting); guint32 nm_setting_wireless_get_mtu (NMSettingWireless *setting); const char *nm_setting_wireless_get_security (NMSettingWireless *setting); diff --git a/libnm-util/nm-setting.c b/libnm-util/nm-setting.c index 3fe90db2..3573f888 100644 --- a/libnm-util/nm-setting.c +++ b/libnm-util/nm-setting.c @@ -332,27 +332,52 @@ nm_setting_verify (NMSetting *setting, GSList *all_settings, GError **error) return TRUE; } -static inline gboolean -should_compare_prop (NMSetting *setting, - const char *prop_name, - NMSettingCompareFlags comp_flags, - GParamFlags prop_flags) +static gboolean +compare_property (NMSetting *setting, + NMSetting *other, + const GParamSpec *prop_spec, + NMSettingCompareFlags flags) { - /* Fuzzy compare ignores secrets and properties defined with the FUZZY_IGNORE flag */ - if ( (comp_flags & NM_SETTING_COMPARE_FLAG_FUZZY) - && (prop_flags & (NM_SETTING_PARAM_FUZZY_IGNORE | NM_SETTING_PARAM_SECRET))) - return FALSE; + GValue value1 = { 0 }; + GValue value2 = { 0 }; + gboolean different; - if ( (comp_flags & NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS) - && (prop_flags & NM_SETTING_PARAM_SECRET)) - return FALSE; + /* Handle compare flags */ + if (prop_spec->flags & NM_SETTING_PARAM_SECRET) { + NMSettingSecretFlags a_secret_flags = NM_SETTING_SECRET_FLAG_NONE; + NMSettingSecretFlags b_secret_flags = NM_SETTING_SECRET_FLAG_NONE; - if ( (comp_flags & NM_SETTING_COMPARE_FLAG_IGNORE_ID) - && NM_IS_SETTING_CONNECTION (setting) - && !strcmp (prop_name, NM_SETTING_CONNECTION_ID)) - return FALSE; + nm_setting_get_secret_flags (setting, prop_spec->name, &a_secret_flags, NULL); + nm_setting_get_secret_flags (other, prop_spec->name, &b_secret_flags, NULL); - return TRUE; + /* If the secret flags aren't the same the settings aren't the same */ + if (a_secret_flags != b_secret_flags) + return FALSE; + + /* Check for various secret flags that might cause us to ignore comparing + * this property. + */ + if ( (flags & NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS) + && (a_secret_flags & NM_SETTING_SECRET_FLAG_AGENT_OWNED)) + return TRUE; + + if ( (flags & NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS) + && (a_secret_flags & NM_SETTING_SECRET_FLAG_NOT_SAVED)) + return TRUE; + } + + g_value_init (&value1, prop_spec->value_type); + g_object_get_property (G_OBJECT (setting), prop_spec->name, &value1); + + g_value_init (&value2, prop_spec->value_type); + g_object_get_property (G_OBJECT (other), prop_spec->name, &value2); + + different = g_param_values_cmp ((GParamSpec *) prop_spec, &value1, &value2); + + g_value_unset (&value1); + g_value_unset (&value2); + + return different == 0 ? TRUE : FALSE; } /** @@ -374,7 +399,7 @@ nm_setting_compare (NMSetting *a, { GParamSpec **property_specs; guint n_property_specs; - gint different; + gint same = TRUE; guint i; g_return_val_if_fail (NM_IS_SETTING (a), FALSE); @@ -386,32 +411,59 @@ nm_setting_compare (NMSetting *a, /* And now all properties */ property_specs = g_object_class_list_properties (G_OBJECT_GET_CLASS (a), &n_property_specs); - different = FALSE; - - for (i = 0; i < n_property_specs && !different; i++) { + for (i = 0; i < n_property_specs && same; i++) { GParamSpec *prop_spec = property_specs[i]; - GValue value1 = { 0 }; - GValue value2 = { 0 }; - /* Handle compare flags */ - if (!should_compare_prop (a, prop_spec->name, flags, prop_spec->flags)) + /* Fuzzy compare ignores secrets and properties defined with the FUZZY_IGNORE flag */ + if ( (flags & NM_SETTING_COMPARE_FLAG_FUZZY) + && (prop_spec->flags & (NM_SETTING_PARAM_FUZZY_IGNORE | NM_SETTING_PARAM_SECRET))) continue; - g_value_init (&value1, prop_spec->value_type); - g_object_get_property (G_OBJECT (a), prop_spec->name, &value1); + if ( (flags & NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS) + && (prop_spec->flags & NM_SETTING_PARAM_SECRET)) + continue; + + same = NM_SETTING_GET_CLASS (a)->compare_property (a, b, prop_spec, flags); + } + g_free (property_specs); - g_value_init (&value2, prop_spec->value_type); - g_object_get_property (G_OBJECT (b), prop_spec->name, &value2); + return same; +} - different = g_param_values_cmp (prop_spec, &value1, &value2); +static inline gboolean +should_compare_prop (NMSetting *setting, + const char *prop_name, + NMSettingCompareFlags comp_flags, + GParamFlags prop_flags) +{ + /* Fuzzy compare ignores secrets and properties defined with the FUZZY_IGNORE flag */ + if ( (comp_flags & NM_SETTING_COMPARE_FLAG_FUZZY) + && (prop_flags & (NM_SETTING_PARAM_FUZZY_IGNORE | NM_SETTING_PARAM_SECRET))) + return FALSE; - g_value_unset (&value1); - g_value_unset (&value2); + if (prop_flags & NM_SETTING_PARAM_SECRET) { + NMSettingSecretFlags secret_flags = NM_SETTING_SECRET_FLAG_NONE; + + if (comp_flags & NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS) + return FALSE; + + nm_setting_get_secret_flags (setting, prop_name, &secret_flags, NULL); + + if ( (comp_flags & NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS) + && (secret_flags & NM_SETTING_SECRET_FLAG_AGENT_OWNED)) + return FALSE; + + if ( (comp_flags & NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS) + && (secret_flags & NM_SETTING_SECRET_FLAG_NOT_SAVED)) + return FALSE; } - g_free (property_specs); + if ( (comp_flags & NM_SETTING_COMPARE_FLAG_IGNORE_ID) + && NM_IS_SETTING_CONNECTION (setting) + && !strcmp (prop_name, NM_SETTING_CONNECTION_ID)) + return FALSE; - return different == 0 ? TRUE : FALSE; + return TRUE; } /** @@ -976,6 +1028,7 @@ nm_setting_class_init (NMSettingClass *setting_class) setting_class->update_one_secret = update_one_secret; setting_class->get_secret_flags = get_secret_flags; setting_class->set_secret_flags = set_secret_flags; + setting_class->compare_property = compare_property; /* Properties */ diff --git a/libnm-util/nm-setting.h b/libnm-util/nm-setting.h index ef3011ad..e21efd81 100644 --- a/libnm-util/nm-setting.h +++ b/libnm-util/nm-setting.h @@ -111,6 +111,35 @@ typedef enum { /* NOTE: if adding flags, update nm-setting-private.h as well */ } NMSettingSecretFlags; +/** + * NMSettingCompareFlags: + * @NM_SETTING_COMPARE_FLAG_EXACT: match all properties exactly + * @NM_SETTING_COMPARE_FLAG_FUZZY: match only important attributes, like SSID, + * type, security settings, etc. Does not match, for example, connection ID + * or UUID. + * @NM_SETTING_COMPARE_FLAG_IGNORE_ID: ignore the connection's ID + * @NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS: ignore all secrets + * @NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS: ignore secrets for which + * the secret's flags indicate the secret is owned by a user secret agent + * (ie, the secret's flag includes @NM_SETTING_SECRET_FLAG_AGENT_OWNED) + * @NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS: ignore secrets for which + * the secret's flags indicate the secret should not be saved to persistent + * storage (ie, the secret's flag includes @NM_SETTING_SECRET_FLAG_NOT_SAVED) + * + * These flags modify the comparison behavior when comparing two settings or + * two connections. + * + **/ +typedef enum { + NM_SETTING_COMPARE_FLAG_EXACT = 0x00000000, + NM_SETTING_COMPARE_FLAG_FUZZY = 0x00000001, + NM_SETTING_COMPARE_FLAG_IGNORE_ID = 0x00000002, + NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS = 0x00000004, + NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS = 0x00000008, + NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS = 0x00000010 +} NMSettingCompareFlags; + + /** * NMSetting: * @@ -148,13 +177,27 @@ typedef struct { NMSettingSecretFlags flags, GError **error); + /* Returns TRUE if the given property contains the same value in both settings */ + gboolean (*compare_property) (NMSetting *setting, + NMSetting *other, + const GParamSpec *prop_spec, + NMSettingCompareFlags flags); + /* Padding for future expansion */ void (*_reserved1) (void); void (*_reserved2) (void); void (*_reserved3) (void); - void (*_reserved4) (void); } NMSettingClass; +/** + * NMSettingValueIterFn: + * @setting: The setting for which properties are being iterated, given to + * nm_setting_enumerate_values() + * @key: The value/property name + * @value: The property's value + * @flags: The property's flags, like %NM_SETTING_PARAM_SECRET + * @user_data: User data passed to nm_setting_enumerate_values() + */ typedef void (*NMSettingValueIterFn) (NMSetting *setting, const char *key, const GValue *value, @@ -194,26 +237,6 @@ gboolean nm_setting_verify (NMSetting *setting, GSList *all_settings, GError **error); -/** - * NMSettingCompareFlags: - * @NM_SETTING_COMPARE_FLAG_EXACT: match all properties exactly - * @NM_SETTING_COMPARE_FLAG_FUZZY: match only important attributes, like SSID, - * type, security settings, etc. Does not match, for example, connection ID - * or UUID. - * @NM_SETTING_COMPARE_FLAG_IGNORE_ID: ignore the connection's ID - * @NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS: ignore secrets - * - * These flags modify the comparison behavior when comparing two settings or - * two connections. - * - **/ -typedef enum { - NM_SETTING_COMPARE_FLAG_EXACT = 0x00000000, - NM_SETTING_COMPARE_FLAG_FUZZY = 0x00000001, - NM_SETTING_COMPARE_FLAG_IGNORE_ID = 0x00000002, - NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS = 0x00000004 -} NMSettingCompareFlags; - gboolean nm_setting_compare (NMSetting *a, NMSetting *b, NMSettingCompareFlags flags); diff --git a/libnm-util/nm-utils.c b/libnm-util/nm-utils.c index 449deb1c..d8bcf349 100644 --- a/libnm-util/nm-utils.c +++ b/libnm-util/nm-utils.c @@ -1192,12 +1192,12 @@ device_supports_ap_ciphers (guint32 dev_caps, **/ gboolean nm_utils_security_valid (NMUtilsSecurityType type, - guint32 wifi_caps, + NMDeviceWifiCapabilities wifi_caps, gboolean have_ap, gboolean adhoc, - guint32 ap_flags, - guint32 ap_wpa, - guint32 ap_rsn) + NM80211ApFlags ap_flags, + NM80211ApSecurityFlags ap_wpa, + NM80211ApSecurityFlags ap_rsn) { gboolean good = TRUE; diff --git a/libnm-util/nm-utils.h b/libnm-util/nm-utils.h index e4714a96..6a179268 100644 --- a/libnm-util/nm-utils.h +++ b/libnm-util/nm-utils.h @@ -48,6 +48,24 @@ GHashTable *nm_utils_gvalue_hash_dup (GHashTable *hash); void nm_utils_slist_free (GSList *list, GDestroyNotify elem_destroy_fn); +/** + * NMUtilsSecurityType: + * @NMU_SEC_INVALID: unknown or invalid security, placeholder and not used + * @NMU_SEC_NONE: unencrypted and open + * @NMU_SEC_STATIC_WEP: static WEP keys are used for encryption + * @NMU_SEC_LEAP: Cisco LEAP is used for authentication and for generating the + * dynamic WEP keys automatically + * @NMU_SEC_DYNAMIC_WEP: standard 802.1x is used for authentication and + * generating the dynamic WEP keys automatically + * @NMU_SEC_WPA_PSK: WPA1 is used with Pre-Shared Keys (PSK) + * @NMU_SEC_WPA_ENTERPRISE: WPA1 is used with 802.1x authentication + * @NMU_SEC_WPA2_PSK: WPA2/RSN is used with Pre-Shared Keys (PSK) + * @NMU_SEC_WPA2_ENTERPRISE: WPA2 is used with 802.1x authentication + * + * Describes generic security mechanisms that 802.11 access points may offer. + * Used with nm_utils_security_valid() for checking whether a given access + * point is compatible with a network device. + **/ typedef enum { NMU_SEC_INVALID = 0, NMU_SEC_NONE, @@ -61,12 +79,12 @@ typedef enum { } NMUtilsSecurityType; gboolean nm_utils_security_valid (NMUtilsSecurityType type, - guint32 wifi_caps, + NMDeviceWifiCapabilities wifi_caps, gboolean have_ap, gboolean adhoc, - guint32 ap_flags, - guint32 ap_wpa, - guint32 ap_rsn); + NM80211ApFlags ap_flags, + NM80211ApSecurityFlags ap_wpa, + NM80211ApSecurityFlags ap_rsn); GSList *nm_utils_ip4_addresses_from_gvalue (const GValue *value); void nm_utils_ip4_addresses_to_gvalue (GSList *list, GValue *value); @@ -95,11 +113,11 @@ GByteArray *nm_utils_rsa_key_encrypt (const GByteArray *data, char **out_password, GError **error); -G_END_DECLS - guint32 nm_utils_wifi_freq_to_channel (guint32 freq); guint32 nm_utils_wifi_channel_to_freq (guint32 channel, const char *band); guint32 nm_utils_wifi_find_next_channel (guint32 channel, int direction, char *band); gboolean nm_utils_wifi_is_channel_valid (guint32 channel, const char *band); +G_END_DECLS + #endif /* NM_UTILS_H */ diff --git a/libnm-util/tests/test-general.c b/libnm-util/tests/test-general.c index 87a50d67..f2f7e8ff 100644 --- a/libnm-util/tests/test-general.c +++ b/libnm-util/tests/test-general.c @@ -852,16 +852,17 @@ test_connection_diff_a_only (void) { NULL, NM_SETTING_DIFF_RESULT_UNKNOWN } } }, { NM_SETTING_WIRED_SETTING_NAME, { - { NM_SETTING_WIRED_PORT, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_WIRED_SPEED, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_WIRED_DUPLEX, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_WIRED_AUTO_NEGOTIATE, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_WIRED_MAC_ADDRESS, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_WIRED_CLONED_MAC_ADDRESS, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_WIRED_MTU, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_WIRED_S390_SUBCHANNELS, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_WIRED_S390_NETTYPE, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_WIRED_S390_OPTIONS, NM_SETTING_DIFF_RESULT_IN_A }, + { NM_SETTING_WIRED_PORT, NM_SETTING_DIFF_RESULT_IN_A }, + { NM_SETTING_WIRED_SPEED, NM_SETTING_DIFF_RESULT_IN_A }, + { NM_SETTING_WIRED_DUPLEX, NM_SETTING_DIFF_RESULT_IN_A }, + { NM_SETTING_WIRED_AUTO_NEGOTIATE, NM_SETTING_DIFF_RESULT_IN_A }, + { NM_SETTING_WIRED_MAC_ADDRESS, NM_SETTING_DIFF_RESULT_IN_A }, + { NM_SETTING_WIRED_CLONED_MAC_ADDRESS, NM_SETTING_DIFF_RESULT_IN_A }, + { NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST, NM_SETTING_DIFF_RESULT_IN_A }, + { NM_SETTING_WIRED_MTU, NM_SETTING_DIFF_RESULT_IN_A }, + { NM_SETTING_WIRED_S390_SUBCHANNELS, NM_SETTING_DIFF_RESULT_IN_A }, + { NM_SETTING_WIRED_S390_NETTYPE, NM_SETTING_DIFF_RESULT_IN_A }, + { NM_SETTING_WIRED_S390_OPTIONS, NM_SETTING_DIFF_RESULT_IN_A }, { NULL, NM_SETTING_DIFF_RESULT_UNKNOWN }, } }, { NM_SETTING_IP4_CONFIG_SETTING_NAME, { @@ -1205,14 +1206,101 @@ test_connection_bad_base_types (void) g_clear_error (&error); } +static void +test_setting_compare_id (void) +{ + NMSetting *old, *new; + gboolean success; + + old = nm_setting_connection_new (); + g_object_set (old, + NM_SETTING_CONNECTION_ID, "really awesome cool connection", + NM_SETTING_CONNECTION_UUID, "fbbd59d5-acab-4e30-8f86-258d272617e7", + NM_SETTING_CONNECTION_AUTOCONNECT, FALSE, + NULL); + + new = nm_setting_duplicate (old); + g_object_set (new, NM_SETTING_CONNECTION_ID, "some different connection id", NULL); + + /* First make sure they are different */ + success = nm_setting_compare (old, new, NM_SETTING_COMPARE_FLAG_EXACT); + g_assert (success == FALSE); + + success = nm_setting_compare (old, new, NM_SETTING_COMPARE_FLAG_IGNORE_ID); + g_assert (success); +} + +static void +test_setting_compare_secrets (NMSettingSecretFlags secret_flags, + NMSettingCompareFlags comp_flags, + gboolean remove_secret) +{ + NMSetting *old, *new; + gboolean success; + + /* Make sure that a connection with transient/unsaved secrets compares + * successfully to the same connection without those secrets. + */ + + old = nm_setting_wireless_security_new (); + g_object_set (old, + NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-psk", + NM_SETTING_WIRELESS_SECURITY_PSK, "really cool psk", + NULL); + nm_setting_set_secret_flags (old, NM_SETTING_WIRELESS_SECURITY_PSK, secret_flags, NULL); + + /* Clear the PSK from the duplicated setting */ + new = nm_setting_duplicate (old); + if (remove_secret) { + g_object_set (new, NM_SETTING_WIRELESS_SECURITY_PSK, NULL, NULL); + + success = nm_setting_compare (old, new, NM_SETTING_COMPARE_FLAG_EXACT); + g_assert (success == FALSE); + } + + success = nm_setting_compare (old, new, comp_flags); + g_assert (success); +} + +static void +test_setting_compare_vpn_secrets (NMSettingSecretFlags secret_flags, + NMSettingCompareFlags comp_flags, + gboolean remove_secret) +{ + NMSetting *old, *new; + gboolean success; + + /* Make sure that a connection with transient/unsaved secrets compares + * successfully to the same connection without those secrets. + */ + + old = nm_setting_vpn_new (); + nm_setting_vpn_add_secret (NM_SETTING_VPN (old), "foobarbaz", "really secret password"); + nm_setting_vpn_add_secret (NM_SETTING_VPN (old), "asdfasdfasdf", "really adfasdfasdfasdf"); + nm_setting_vpn_add_secret (NM_SETTING_VPN (old), "0123456778", "abcdefghijklmnpqrstuvqxyz"); + nm_setting_vpn_add_secret (NM_SETTING_VPN (old), "borkbork", "yet another really secret password"); + nm_setting_set_secret_flags (old, "borkbork", secret_flags, NULL); + + /* Clear "borkbork" from the duplicated setting */ + new = nm_setting_duplicate (old); + if (remove_secret) { + nm_setting_vpn_remove_secret (NM_SETTING_VPN (new), "borkbork"); + + /* First make sure they are different */ + success = nm_setting_compare (old, new, NM_SETTING_COMPARE_FLAG_EXACT); + g_assert (success == FALSE); + } + + success = nm_setting_compare (old, new, comp_flags); + g_assert (success); +} + int main (int argc, char **argv) { GError *error = NULL; - DBusGConnection *bus; char *base; g_type_init (); - bus = dbus_g_bus_get (DBUS_BUS_SESSION, NULL); if (!nm_utils_init (&error)) FAIL ("nm-utils-init", "failed to initialize libnm-util: %s", error->message); @@ -1228,6 +1316,16 @@ int main (int argc, char **argv) test_setting_to_hash_all (); test_setting_to_hash_no_secrets (); test_setting_to_hash_only_secrets (); + test_setting_compare_id (); + test_setting_compare_secrets (NM_SETTING_SECRET_FLAG_AGENT_OWNED, NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS, TRUE); + test_setting_compare_secrets (NM_SETTING_SECRET_FLAG_NOT_SAVED, NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS, TRUE); + test_setting_compare_secrets (NM_SETTING_SECRET_FLAG_NONE, NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS, TRUE); + test_setting_compare_secrets (NM_SETTING_SECRET_FLAG_NONE, NM_SETTING_COMPARE_FLAG_EXACT, FALSE); + test_setting_compare_vpn_secrets (NM_SETTING_SECRET_FLAG_AGENT_OWNED, NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS, TRUE); + test_setting_compare_vpn_secrets (NM_SETTING_SECRET_FLAG_NOT_SAVED, NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS, TRUE); + test_setting_compare_vpn_secrets (NM_SETTING_SECRET_FLAG_NONE, NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS, TRUE); + test_setting_compare_vpn_secrets (NM_SETTING_SECRET_FLAG_NONE, NM_SETTING_COMPARE_FLAG_EXACT, FALSE); + test_connection_to_hash_setting_name (); test_setting_connection_permissions_helpers (); test_setting_connection_permissions_property (); diff --git a/libnm-util/tests/test-secrets.c b/libnm-util/tests/test-secrets.c index 6d46f99e..1fe3c438 100644 --- a/libnm-util/tests/test-secrets.c +++ b/libnm-util/tests/test-secrets.c @@ -20,7 +20,6 @@ */ #include -#include #include #include "nm-test-helpers.h" @@ -592,7 +591,84 @@ test_update_secrets_wifi_bad_setting_name (void) "asdfasdfasdfasf", secrets, &error); - g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_CONNECTION_SETTING_NOT_FOUND); + g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_SETTING_NOT_FOUND); + g_assert (success == FALSE); + + g_object_unref (connection); +} + +static void +test_update_secrets_whole_connection (void) +{ + NMConnection *connection; + NMSettingWirelessSecurity *s_wsec; + GHashTable *secrets, *wsec_hash; + GError *error = NULL; + gboolean success; + const char *wepkey = "11111111111111111111111111"; + + connection = wifi_connection_new (); + + /* Build up the secrets hash */ + secrets = nm_connection_to_hash (connection, NM_SETTING_HASH_FLAG_ALL); + wsec_hash = g_hash_table_lookup (secrets, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME); + g_assert (wsec_hash); + g_hash_table_insert (wsec_hash, NM_SETTING_WIRELESS_SECURITY_WEP_KEY0, string_to_gvalue (wepkey)); + + success = nm_connection_update_secrets (connection, NULL, secrets, &error); + g_assert_no_error (error); + g_assert (success == TRUE); + + s_wsec = nm_connection_get_setting_wireless_security (connection); + g_assert (s_wsec); + g_assert_cmpstr (nm_setting_wireless_security_get_wep_key (s_wsec, 0), ==, wepkey); + + g_object_unref (connection); +} + +static void +test_update_secrets_whole_connection_empty_hash (void) +{ + NMConnection *connection; + GHashTable *secrets; + GError *error = NULL; + gboolean success; + + connection = wifi_connection_new (); + secrets = g_hash_table_new (g_str_hash, g_str_equal); + success = nm_connection_update_secrets (connection, NULL, secrets, &error); + g_assert_no_error (error); + g_assert (success == TRUE); + g_object_unref (connection); +} + +static void +test_update_secrets_whole_connection_bad_setting (void) +{ + NMConnection *connection; + GHashTable *secrets, *wsec_hash; + GError *error = NULL; + gboolean success; + const char *wepkey = "11111111111111111111111111"; + + connection = wifi_connection_new (); + + /* Build up the secrets hash */ + secrets = nm_connection_to_hash (connection, NM_SETTING_HASH_FLAG_ALL); + wsec_hash = g_hash_table_lookup (secrets, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME); + g_assert (wsec_hash); + g_hash_table_insert (wsec_hash, NM_SETTING_WIRELESS_SECURITY_WEP_KEY0, string_to_gvalue (wepkey)); + + /* Steal the wsec setting hash so it's not deallocated, and stuff it back + * in with a different name so we ensure libnm-util is returning the right + * error when it finds an entry in the connection hash that doesn't match + * any setting in the connection. + */ + g_hash_table_steal (secrets, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME); + g_hash_table_insert (secrets, "asdfasdfasdfasdf", wsec_hash); + + success = nm_connection_update_secrets (connection, NULL, secrets, &error); + g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_SETTING_NOT_FOUND); g_assert (success == FALSE); g_object_unref (connection); @@ -601,11 +677,9 @@ test_update_secrets_wifi_bad_setting_name (void) int main (int argc, char **argv) { GError *error = NULL; - DBusGConnection *bus; char *base; g_type_init (); - bus = dbus_g_bus_get (DBUS_BUS_SESSION, NULL); if (!nm_utils_init (&error)) FAIL ("nm-utils-init", "failed to initialize libnm-util: %s", error->message); @@ -620,6 +694,10 @@ int main (int argc, char **argv) test_update_secrets_wifi_full_hash (); test_update_secrets_wifi_bad_setting_name (); + test_update_secrets_whole_connection (); + test_update_secrets_whole_connection_empty_hash (); + test_update_secrets_whole_connection_bad_setting (); + base = g_path_get_basename (argv[0]); fprintf (stdout, "%s: SUCCESS\n", base); g_free (base); diff --git a/libnm-util/tests/test-setting-8021x.c b/libnm-util/tests/test-setting-8021x.c index 6d1e3bd0..bdfc8e03 100644 --- a/libnm-util/tests/test-setting-8021x.c +++ b/libnm-util/tests/test-setting-8021x.c @@ -20,7 +20,6 @@ */ #include -#include #include #include "nm-test-helpers.h" @@ -407,14 +406,12 @@ test_clear_phase2_private_key (const char *path, const char *password) int main (int argc, char **argv) { GError *error = NULL; - DBusGConnection *bus; char *base; if (argc < 3) FAIL ("init", "need at least two arguments: "); g_type_init (); - bus = dbus_g_bus_get (DBUS_BUS_SESSION, NULL); if (!nm_utils_init (&error)) FAIL ("nm-utils-init", "failed to initialize libnm-util: %s", error->message); diff --git a/libnm-util/tests/test-settings-defaults.c b/libnm-util/tests/test-settings-defaults.c index 9f38a145..b77ddfef 100644 --- a/libnm-util/tests/test-settings-defaults.c +++ b/libnm-util/tests/test-settings-defaults.c @@ -15,12 +15,11 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * - * Copyright (C) 2008 Red Hat, Inc. + * Copyright (C) 2008 - 2011 Red Hat, Inc. * */ #include -#include #include #include "nm-test-helpers.h" @@ -103,11 +102,9 @@ test_defaults (GType type, const char *name) int main (int argc, char **argv) { GError *error = NULL; - DBusGConnection *bus; char *base; g_type_init (); - bus = dbus_g_bus_get (DBUS_BUS_SESSION, NULL); if (!nm_utils_init (&error)) FAIL ("nm-utils-init", "failed to initialize libnm-util: %s", error->message); diff --git a/m4/libnl-check.m4 b/m4/libnl-check.m4 index f7d6d707..8eef576f 100644 --- a/m4/libnl-check.m4 +++ b/m4/libnl-check.m4 @@ -4,14 +4,12 @@ AC_DEFUN([NM_LIBNL_CHECK], [ save_LDFLAGS="$LDFLAGS" CFLAGS="$CFLAGS $LIBNL_CFLAGS" LDFLAGS="$LDFLAGS $LIBNL_LIBS" - AC_RUN_IFELSE([ + AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include #include #include - -int -main (int argc, char **argv) -{ +]], +[[ struct nl_handle *nlh; struct nl_cache *cache; struct nl_object *obj; @@ -37,8 +35,7 @@ main (int argc, char **argv) return 1; else return 2; -} -], libnl_bug=$?, libnl_bug=$?, libnl_bug=cross) +]])], libnl_bug=$?, libnl_bug=$?, libnl_bug=cross) CFLAGS="$save_CFLAGS" LDFLAGS="$save_LDFLAGS" diff --git a/man/NetworkManager.8 b/man/NetworkManager.8 index c5f44513..127c72bf 100644 --- a/man/NetworkManager.8 +++ b/man/NetworkManager.8 @@ -1,14 +1,16 @@ .\" NetworkManager(8) manual page .\" -.\" Copyright (C) 2005 - 2010 Red Hat, Inc. +.\" Copyright (C) 2005 - 2011 Red Hat, Inc. .\" Copyright (C) 2005 - 2009 Novell, Inc. .\" Copyright (C) 2005 Robert Love .\" -.TH NETWORKMANAGER "8" "January 29, 2010" +.TH NETWORKMANAGER "8" "2 August 2011" .SH NAME NetworkManager \- network management daemon .SH SYNOPSIS -.B NetworkManager [\-\-version] [\-\-no\-daemon] [\-\-pid\-file=] [\-\-state\-file=] [\-\-config=] [\-\-plugins=,plugin2>,...] [\-\-log\-level=] [\-\-log\-domains=,,...] +.B NetworkManager [\-\-version] | [\-\-help] +.PP +.B NetworkManager [\-\-no\-daemon] [\-\-pid\-file=] [\-\-state\-file=] [\-\-config=] [\-\-plugins=,plugin2>,...] [\-\-log\-level=] [\-\-log\-domains=,,...] .SH DESCRIPTION The \fINetworkManager\fP daemon attempts to make networking configuration and operation as painless and automatic as possible by managing the primary network @@ -21,10 +23,22 @@ settings and operation. .P NetworkManager will execute scripts in the /etc/NetworkManager/dispatcher.d directory in alphabetical order in response to network events. Each script -should be (a) a regular file, (b) owned by root, (c) not writable by group or -other, (d) not set-uid, (e) and executable by the owner. Each script receives -two arguments, the first being the interface name of the device just activated, -and second an action. +should be: +.IP "(a)" 4 +a regular file +.IP "(b)" 4 +owned by root +.IP "(c)" 4 +not writable by group or other +.IP "(d)" 4 +not set-uid +.IP "(e)" 4 +and executable by the owner +.PP +Each script receives two arguments, the first being the interface name of the +device just activated, and second an action. +.PP +Actions: .TP .I "up" The interface has been activated. The environment contains more information @@ -64,6 +78,9 @@ The following options are supported: .I "\-\-version" Print the NetworkManager software version and exit. .TP +.I "\-\-help" +Print NetworkManager's available options and exit. +.TP .I "\-\-no\-daemon" Do not daemonize. This is useful for debugging, and directs log output to the controlling terminal in addition to syslog. @@ -113,5 +130,7 @@ When set to anything, causes NetworkManager to turn on PPP debugging in pppd, which logs all PPP and PPTP frames and client/server exchanges. .SH SEE ALSO .BR nm\-tool (1), +.BR nm\-online (1), +.BR nmcli (1), .BR NetworkManager.conf (5). diff --git a/man/NetworkManager.8.in b/man/NetworkManager.8.in index c5f44513..127c72bf 100644 --- a/man/NetworkManager.8.in +++ b/man/NetworkManager.8.in @@ -1,14 +1,16 @@ .\" NetworkManager(8) manual page .\" -.\" Copyright (C) 2005 - 2010 Red Hat, Inc. +.\" Copyright (C) 2005 - 2011 Red Hat, Inc. .\" Copyright (C) 2005 - 2009 Novell, Inc. .\" Copyright (C) 2005 Robert Love .\" -.TH NETWORKMANAGER "8" "January 29, 2010" +.TH NETWORKMANAGER "8" "2 August 2011" .SH NAME NetworkManager \- network management daemon .SH SYNOPSIS -.B NetworkManager [\-\-version] [\-\-no\-daemon] [\-\-pid\-file=] [\-\-state\-file=] [\-\-config=] [\-\-plugins=,plugin2>,...] [\-\-log\-level=] [\-\-log\-domains=,,...] +.B NetworkManager [\-\-version] | [\-\-help] +.PP +.B NetworkManager [\-\-no\-daemon] [\-\-pid\-file=] [\-\-state\-file=] [\-\-config=] [\-\-plugins=,plugin2>,...] [\-\-log\-level=] [\-\-log\-domains=,,...] .SH DESCRIPTION The \fINetworkManager\fP daemon attempts to make networking configuration and operation as painless and automatic as possible by managing the primary network @@ -21,10 +23,22 @@ settings and operation. .P NetworkManager will execute scripts in the /etc/NetworkManager/dispatcher.d directory in alphabetical order in response to network events. Each script -should be (a) a regular file, (b) owned by root, (c) not writable by group or -other, (d) not set-uid, (e) and executable by the owner. Each script receives -two arguments, the first being the interface name of the device just activated, -and second an action. +should be: +.IP "(a)" 4 +a regular file +.IP "(b)" 4 +owned by root +.IP "(c)" 4 +not writable by group or other +.IP "(d)" 4 +not set-uid +.IP "(e)" 4 +and executable by the owner +.PP +Each script receives two arguments, the first being the interface name of the +device just activated, and second an action. +.PP +Actions: .TP .I "up" The interface has been activated. The environment contains more information @@ -64,6 +78,9 @@ The following options are supported: .I "\-\-version" Print the NetworkManager software version and exit. .TP +.I "\-\-help" +Print NetworkManager's available options and exit. +.TP .I "\-\-no\-daemon" Do not daemonize. This is useful for debugging, and directs log output to the controlling terminal in addition to syslog. @@ -113,5 +130,7 @@ When set to anything, causes NetworkManager to turn on PPP debugging in pppd, which logs all PPP and PPTP frames and client/server exchanges. .SH SEE ALSO .BR nm\-tool (1), +.BR nm\-online (1), +.BR nmcli (1), .BR NetworkManager.conf (5). diff --git a/man/NetworkManager.conf.5 b/man/NetworkManager.conf.5 index d047f393..9fe722c4 100644 --- a/man/NetworkManager.conf.5 +++ b/man/NetworkManager.conf.5 @@ -1,8 +1,8 @@ .\" NetworkManager.conf(5) manual page .\" -.\" Copyright (C) 2010 Red Hat, Inc. +.\" Copyright (C) 2010 - 2011 Red Hat, Inc. .\" -.TH "NetworkManager.conf" "5" "23 November 2010" "" +.TH "NetworkManager.conf" "5" "2 August 2011" "" .SH NAME NetworkManager.conf \- NetworkManager configuration file .SH SYNOPSIS @@ -20,9 +20,6 @@ is a configuration file for NetworkManager. It is used to set up various aspects of NetworkManager's behavior. The location of the file may be changed through use of the "\-\-config=" argument for \fBNetworkManager\fP (8). - -It is not necessary to restart NetworkManager when making changes, as the -configuration file is watched for changes and reloaded automatically when necessary. .SH "FILE FORMAT" .P The configuration file format is so-called key file (sort of ini-style format). @@ -163,12 +160,61 @@ warning messages. The following log domains are available: [NONE, HW, RFKILL, ETHER, WIFI, BT, MB, DHCP4, DHCP6, PPP, WIFI_SCAN, IP4, IP6, AUTOIP4, DNS, VPN, SHARING, SUPPLICANT, AGENTS, SETTINGS, SUSPEND, CORE, DEVICE, OLPC, WIMAX]. When "NONE" is given by -itself, logging is disabled. MB = Mobile Broadband, AGENTS = secret agents -operations and communication, SETTINGS = settings/config service operations, -OLPC = OLPC Mesh device operations, CORE = core daemon operations, DEVICE = -activation and general interface operations. +itself, logging is disabled. +.PP +.RS +HW = Hardware related operations +.br +RFKILL = RFKill subsystem operations +.br +ETHER = Ethernet device operations +.br +WIFI = Wi-Fi device operations +.br +BT = Bluetooth +.br +MB = Mobile Broadband +.br +DHCP4 = DHCP for IPv4 +.br +DHCP6 = DHCP for IPv6 +.br +PPP = Point-to-point protocol operations +.br +WIFI_SCAN = Wi-Fi scanning operations +.br +IP4 = Domain for IPv4 logging +.br +IP6 = Domain for IPv6 logging +.br +AUTOIP4 = AutoIP (avahi) operations +.br +DNS = Domain Name System related operations +.br +VPN = Virtual Private Network connections and operaions +.br +SHARING = Connection sharing +.br +SUPPLICANT = WPA supplicant related operations +.br +AGENTS = Secret agents operations and communication +.br +SETTINGS = Settings/config service operations +.br +SUSPEND = Suspend/resume +.br +CORE = Core daemon operations +.br +DEVICE = Activation and general interface operations +.br +OLPC = OLPC Mesh device operations +.br +WIMAX = Wimax device operations +.br .SH "SEE ALSO" .BR http://live.gnome.org/NetworkManager/SystemSettings .sp .BR NetworkManager (8), -.BR nm\-tool (1). +.BR nmcli (1), +.BR nm\-tool (1), +.BR nm\-online (1). diff --git a/man/NetworkManager.conf.5.in b/man/NetworkManager.conf.5.in index d047f393..9fe722c4 100644 --- a/man/NetworkManager.conf.5.in +++ b/man/NetworkManager.conf.5.in @@ -1,8 +1,8 @@ .\" NetworkManager.conf(5) manual page .\" -.\" Copyright (C) 2010 Red Hat, Inc. +.\" Copyright (C) 2010 - 2011 Red Hat, Inc. .\" -.TH "NetworkManager.conf" "5" "23 November 2010" "" +.TH "NetworkManager.conf" "5" "2 August 2011" "" .SH NAME NetworkManager.conf \- NetworkManager configuration file .SH SYNOPSIS @@ -20,9 +20,6 @@ is a configuration file for NetworkManager. It is used to set up various aspects of NetworkManager's behavior. The location of the file may be changed through use of the "\-\-config=" argument for \fBNetworkManager\fP (8). - -It is not necessary to restart NetworkManager when making changes, as the -configuration file is watched for changes and reloaded automatically when necessary. .SH "FILE FORMAT" .P The configuration file format is so-called key file (sort of ini-style format). @@ -163,12 +160,61 @@ warning messages. The following log domains are available: [NONE, HW, RFKILL, ETHER, WIFI, BT, MB, DHCP4, DHCP6, PPP, WIFI_SCAN, IP4, IP6, AUTOIP4, DNS, VPN, SHARING, SUPPLICANT, AGENTS, SETTINGS, SUSPEND, CORE, DEVICE, OLPC, WIMAX]. When "NONE" is given by -itself, logging is disabled. MB = Mobile Broadband, AGENTS = secret agents -operations and communication, SETTINGS = settings/config service operations, -OLPC = OLPC Mesh device operations, CORE = core daemon operations, DEVICE = -activation and general interface operations. +itself, logging is disabled. +.PP +.RS +HW = Hardware related operations +.br +RFKILL = RFKill subsystem operations +.br +ETHER = Ethernet device operations +.br +WIFI = Wi-Fi device operations +.br +BT = Bluetooth +.br +MB = Mobile Broadband +.br +DHCP4 = DHCP for IPv4 +.br +DHCP6 = DHCP for IPv6 +.br +PPP = Point-to-point protocol operations +.br +WIFI_SCAN = Wi-Fi scanning operations +.br +IP4 = Domain for IPv4 logging +.br +IP6 = Domain for IPv6 logging +.br +AUTOIP4 = AutoIP (avahi) operations +.br +DNS = Domain Name System related operations +.br +VPN = Virtual Private Network connections and operaions +.br +SHARING = Connection sharing +.br +SUPPLICANT = WPA supplicant related operations +.br +AGENTS = Secret agents operations and communication +.br +SETTINGS = Settings/config service operations +.br +SUSPEND = Suspend/resume +.br +CORE = Core daemon operations +.br +DEVICE = Activation and general interface operations +.br +OLPC = OLPC Mesh device operations +.br +WIMAX = Wimax device operations +.br .SH "SEE ALSO" .BR http://live.gnome.org/NetworkManager/SystemSettings .sp .BR NetworkManager (8), -.BR nm\-tool (1). +.BR nmcli (1), +.BR nm\-tool (1), +.BR nm\-online (1). diff --git a/po/es.po b/po/es.po index 8ee75316..802d482f 100644 --- a/po/es.po +++ b/po/es.po @@ -14,8 +14,8 @@ msgid "" msgstr "" "Project-Id-Version: NetworkManager.master\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" -"product=NetworkManager&component=general\n" -"POT-Creation-Date: 2011-03-03 03:25+0000\n" +"product=NetworkManager&keywords=I18N+L10N&component=general\n" +"POT-Creation-Date: 2011-05-18 03:24+0000\n" "PO-Revision-Date: 2011-03-13 15:03+0100\n" "Last-Translator: Jorge González \n" "Language-Team: Español \n" @@ -25,36 +25,36 @@ msgstr "" "X-Generator: KBabel 1.11.4\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../cli/src/connections.c:62 ../cli/src/connections.c:76 -#: ../cli/src/devices.c:99 ../cli/src/devices.c:112 ../cli/src/devices.c:122 -#: ../cli/src/devices.c:132 ../cli/src/devices.c:146 ../cli/src/devices.c:160 -#: ../cli/src/devices.c:171 ../cli/src/devices.c:182 ../cli/src/devices.c:191 -#: ../cli/src/devices.c:200 ../cli/src/devices.c:222 +#: ../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 "NOMBRE" #. 0 -#: ../cli/src/connections.c:63 ../cli/src/connections.c:77 +#: ../cli/src/connections.c:65 ../cli/src/connections.c:79 msgid "UUID" msgstr "UUID" #. 1 -#: ../cli/src/connections.c:64 +#: ../cli/src/connections.c:66 msgid "DEVICES" msgstr "DISPOSITIVOS" #. 2 -#: ../cli/src/connections.c:65 +#: ../cli/src/connections.c:67 msgid "DEFAULT" msgstr "PREDETERMINADO" #. 3 -#: ../cli/src/connections.c:66 +#: ../cli/src/connections.c:68 msgid "SPEC-OBJECT" msgstr "OBJETO SPEC" #. 4 -#: ../cli/src/connections.c:67 +#: ../cli/src/connections.c:69 msgid "VPN" msgstr "VPN" @@ -63,8 +63,8 @@ msgstr "VPN" #. 2 #. 11 #. 5 -#: ../cli/src/connections.c:68 ../cli/src/connections.c:83 -#: ../cli/src/devices.c:67 ../cli/src/devices.c:212 ../cli/src/devices.c:228 +#: ../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 "RUTA-DBUS" @@ -72,42 +72,33 @@ msgstr "RUTA-DBUS" #. 0 #. 1 #. 2 -#: ../cli/src/connections.c:78 ../cli/src/devices.c:65 -#: ../cli/src/devices.c:101 ../cli/src/devices.c:225 +#: ../cli/src/connections.c:80 ../cli/src/devices.c:67 +#: ../cli/src/devices.c:103 ../cli/src/devices.c:227 msgid "TYPE" msgstr "TIPO" #. 2 -#: ../cli/src/connections.c:79 +#: ../cli/src/connections.c:81 msgid "TIMESTAMP" msgstr "MARCA DE TIEMPO" #. 3 -#: ../cli/src/connections.c:80 +#: ../cli/src/connections.c:82 msgid "TIMESTAMP-REAL" msgstr "MARCA DE TIEMPO-REAL" #. 4 -#: ../cli/src/connections.c:81 +#: ../cli/src/connections.c:83 msgid "AUTOCONNECT" msgstr "AUTOCONECTAR" #. 5 -#: ../cli/src/connections.c:82 +#: ../cli/src/connections.c:84 msgid "READONLY" msgstr "SÓLOLECTURA" -#: ../cli/src/connections.c:166 -#, c-format -#| msgid "" -#| "Usage: nmcli con { COMMAND | help }\n" -#| " COMMAND := { list | status | up | down }\n" -#| "\n" -#| " list [id | uuid | system | user]\n" -#| " status\n" -#| " up id | uuid [iface ] [ap ] [--nowait] [--" -#| "timeout ]\n" -#| " down id | uuid \n" +#: ../cli/src/connections.c:167 +#, c-format msgid "" "Usage: nmcli con { COMMAND | help }\n" " COMMAND := { list | status | up | down }\n" @@ -131,351 +122,347 @@ msgstr "" "]\n" " down id | uuid \n" -#: ../cli/src/connections.c:219 ../cli/src/connections.c:541 +#: ../cli/src/connections.c:220 ../cli/src/connections.c:542 #, c-format msgid "Error: 'con list': %s" msgstr "Error: «con list»: %s" -#: ../cli/src/connections.c:221 ../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 "Error: «con list»: %s; campos permitidos: %s" -#: ../cli/src/connections.c:229 +#: ../cli/src/connections.c:230 msgid "Connection details" msgstr "Detalles de conexiones" -#: ../cli/src/connections.c:416 +#: ../cli/src/connections.c:417 msgid "never" msgstr "nunca" #. "CAPABILITIES" #. Print header #. "WIFI-PROPERTIES" -#: ../cli/src/connections.c:417 ../cli/src/connections.c:418 -#: ../cli/src/connections.c:596 ../cli/src/connections.c:598 -#: ../cli/src/devices.c:507 ../cli/src/devices.c:560 ../cli/src/devices.c:685 -#: ../cli/src/devices.c:711 ../cli/src/devices.c:712 ../cli/src/devices.c:713 -#: ../cli/src/devices.c:714 ../cli/src/devices.c:715 ../cli/src/settings.c:518 -#: ../cli/src/settings.c:561 ../cli/src/settings.c:661 -#: ../cli/src/settings.c:935 ../cli/src/settings.c:936 -#: ../cli/src/settings.c:938 ../cli/src/settings.c:940 -#: ../cli/src/settings.c:1065 ../cli/src/settings.c:1066 -#: ../cli/src/settings.c:1067 ../cli/src/settings.c:1146 -#: ../cli/src/settings.c:1147 ../cli/src/settings.c:1148 +#: ../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:1233 +#: ../cli/src/settings.c:1159 ../cli/src/settings.c:1160 +#: ../cli/src/settings.c:1235 msgid "yes" msgstr "sí" -#: ../cli/src/connections.c:417 ../cli/src/connections.c:418 -#: ../cli/src/connections.c:596 ../cli/src/connections.c:598 -#: ../cli/src/devices.c:507 ../cli/src/devices.c:560 ../cli/src/devices.c:685 -#: ../cli/src/devices.c:711 ../cli/src/devices.c:712 ../cli/src/devices.c:713 -#: ../cli/src/devices.c:714 ../cli/src/devices.c:715 ../cli/src/settings.c:518 -#: ../cli/src/settings.c:520 ../cli/src/settings.c:561 -#: ../cli/src/settings.c:661 ../cli/src/settings.c:935 -#: ../cli/src/settings.c:936 ../cli/src/settings.c:938 -#: ../cli/src/settings.c:940 ../cli/src/settings.c:1065 -#: ../cli/src/settings.c:1066 ../cli/src/settings.c:1067 -#: ../cli/src/settings.c:1146 ../cli/src/settings.c:1147 +#: ../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:1233 +#: ../cli/src/settings.c:1158 ../cli/src/settings.c:1159 +#: ../cli/src/settings.c:1160 ../cli/src/settings.c:1235 msgid "no" msgstr "no" -#: ../cli/src/connections.c:492 -#| msgid "Connection details" +#: ../cli/src/connections.c:493 msgid "Connection list" msgstr "Lista de conexiones" -#: ../cli/src/connections.c:505 ../cli/src/connections.c:1457 -#: ../cli/src/connections.c:1472 ../cli/src/connections.c:1481 -#: ../cli/src/connections.c:1491 ../cli/src/connections.c:1503 -#: ../cli/src/connections.c:1598 ../cli/src/devices.c:1188 -#: ../cli/src/devices.c:1198 ../cli/src/devices.c:1312 -#: ../cli/src/devices.c:1319 ../cli/src/devices.c:1532 -#: ../cli/src/devices.c:1539 +#: ../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 "Error: falta el argumento %s." -#: ../cli/src/connections.c:518 +#: ../cli/src/connections.c:519 #, c-format msgid "Error: %s - no such connection." msgstr "Error: %s - no hay tal conexión." -#: ../cli/src/connections.c:524 ../cli/src/connections.c:1516 -#: ../cli/src/connections.c:1615 ../cli/src/devices.c:985 -#: ../cli/src/devices.c:1065 ../cli/src/devices.c:1212 -#: ../cli/src/devices.c:1325 ../cli/src/devices.c:1545 +#: ../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 "Parámetro desconocido: %s\n" -#: ../cli/src/connections.c:533 +#: ../cli/src/connections.c:534 #, c-format msgid "Error: no valid parameter specified." msgstr "Error: no se especificó un parámetro válido." -#: ../cli/src/connections.c:548 ../cli/src/connections.c:1706 -#: ../cli/src/devices.c:1753 ../cli/src/network-manager.c:461 +#: ../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 "Error: %s." -#: ../cli/src/connections.c:636 +#: ../cli/src/connections.c:637 #, c-format msgid "Error: 'con status': %s" msgstr "Error: «con status»: %s" -#: ../cli/src/connections.c:638 +#: ../cli/src/connections.c:639 #, c-format msgid "Error: 'con status': %s; allowed fields: %s" msgstr "Error: «con status»: %s; campos permitidos: %s" -#: ../cli/src/connections.c:646 ../cli/src/connections.c:1531 -#: ../cli/src/connections.c:1630 ../cli/src/devices.c:1012 -#: ../cli/src/devices.c:1074 ../cli/src/devices.c:1227 -#: ../cli/src/devices.c:1355 ../cli/src/devices.c:1574 +#: ../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: Could not connect to NetworkManager." msgid "Error: Can't find out if NetworkManager is running: %s." msgstr "Error: no se puede saber si NetworkManager se está ejecutando: %s." -#: ../cli/src/connections.c:650 ../cli/src/connections.c:1535 -#: ../cli/src/connections.c:1634 ../cli/src/devices.c:1016 -#: ../cli/src/devices.c:1078 ../cli/src/devices.c:1231 -#: ../cli/src/devices.c:1359 ../cli/src/devices.c:1578 +#: ../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 "NetworkManager status" msgid "Error: NetworkManager is not running." msgstr "Error: NetworkManager no se está ejecutando." -#: ../cli/src/connections.c:658 +#: ../cli/src/connections.c:659 msgid "Active connections" msgstr "Conexiones activas" -#: ../cli/src/connections.c:1128 +#: ../cli/src/connections.c:1095 #, c-format msgid "no active connection on device '%s'" msgstr "conexión no activa en el dispositivo «%s»" -#: ../cli/src/connections.c:1136 +#: ../cli/src/connections.c:1103 #, c-format msgid "no active connection or device" msgstr "conexión o dispositivo no activo" -#: ../cli/src/connections.c:1207 +#: ../cli/src/connections.c:1174 #, c-format msgid "device '%s' not compatible with connection '%s'" msgstr "dispositivo «%s» incompatible con conexión «%s»" -#: ../cli/src/connections.c:1209 +#: ../cli/src/connections.c:1176 #, c-format msgid "no device found for connection '%s'" msgstr "no se encontró dispositivo para conexión «%s»" -#: ../cli/src/connections.c:1220 +#: ../cli/src/connections.c:1187 msgid "activating" msgstr "activando" -#: ../cli/src/connections.c:1222 +#: ../cli/src/connections.c:1189 msgid "activated" msgstr "activada" -#: ../cli/src/connections.c:1225 ../cli/src/connections.c:1248 -#: ../cli/src/connections.c:1281 ../cli/src/devices.c:306 -#: ../cli/src/devices.c:686 ../cli/src/network-manager.c:116 -#: ../cli/src/network-manager.c:178 ../cli/src/network-manager.c:181 -#: ../cli/src/network-manager.c:296 ../cli/src/network-manager.c:351 -#: ../cli/src/network-manager.c:389 ../cli/src/network-manager.c:428 -#: ../cli/src/settings.c:483 ../cli/src/utils.c:396 +#: ../cli/src/connections.c:1191 ../cli/src/devices.c:304 +msgid "deactivating" +msgstr "desactivando" + +#: ../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 "desconocido" -#: ../cli/src/connections.c:1234 +#: ../cli/src/connections.c:1203 msgid "VPN connecting (prepare)" msgstr "Conectando VPN (preparar)" -#: ../cli/src/connections.c:1236 +#: ../cli/src/connections.c:1205 msgid "VPN connecting (need authentication)" msgstr "Conectando VPN (necesita autenticación)" -#: ../cli/src/connections.c:1238 +#: ../cli/src/connections.c:1207 msgid "VPN connecting" msgstr "Conectando VPN" -#: ../cli/src/connections.c:1240 +#: ../cli/src/connections.c:1209 msgid "VPN connecting (getting IP configuration)" msgstr "Conectando VPN (obteniendo configuración IP)" -#: ../cli/src/connections.c:1242 +#: ../cli/src/connections.c:1211 msgid "VPN connected" msgstr "VPN conectada" -#: ../cli/src/connections.c:1244 +#: ../cli/src/connections.c:1213 msgid "VPN connection failed" msgstr "Falló la conexión VPN" -#: ../cli/src/connections.c:1246 +#: ../cli/src/connections.c:1215 msgid "VPN disconnected" msgstr "VPN desconectada" -#: ../cli/src/connections.c:1257 +#: ../cli/src/connections.c:1226 msgid "unknown reason" msgstr "razón desconocida" -#: ../cli/src/connections.c:1259 +#: ../cli/src/connections.c:1228 msgid "none" msgstr "ninguna" -#: ../cli/src/connections.c:1261 +#: ../cli/src/connections.c:1230 msgid "the user was disconnected" msgstr "el usuario estaba desconectado" -#: ../cli/src/connections.c:1263 +#: ../cli/src/connections.c:1232 msgid "the base network connection was interrupted" msgstr "se interrumpió la conexión de red de base" -#: ../cli/src/connections.c:1265 +#: ../cli/src/connections.c:1234 msgid "the VPN service stopped unexpectedly" msgstr "el servicio VPN se detuvo inesperadamente" -#: ../cli/src/connections.c:1267 +#: ../cli/src/connections.c:1236 msgid "the VPN service returned invalid configuration" msgstr "el servicio VPN retornó una configuración no válida" -#: ../cli/src/connections.c:1269 +#: ../cli/src/connections.c:1238 msgid "the connection attempt timed out" msgstr "se agotaron los intentos de conexión" -#: ../cli/src/connections.c:1271 +#: ../cli/src/connections.c:1240 msgid "the VPN service did not start in time" msgstr "el servicio VPN no inició a tiempo" -#: ../cli/src/connections.c:1273 +#: ../cli/src/connections.c:1242 msgid "the VPN service failed to start" msgstr "el servicio VPN falló en el inicio" -#: ../cli/src/connections.c:1275 +#: ../cli/src/connections.c:1244 msgid "no valid VPN secrets" msgstr "secretos VPN inválidos" -#: ../cli/src/connections.c:1277 +#: ../cli/src/connections.c:1246 msgid "invalid VPN secrets" msgstr "secretos VPN válidos" -#: ../cli/src/connections.c:1279 +#: ../cli/src/connections.c:1248 msgid "the connection was removed" msgstr "se eliminó la conexión" -#: ../cli/src/connections.c:1293 +#: ../cli/src/connections.c:1262 #, c-format msgid "state: %s\n" msgstr "estado: %s\n" -#: ../cli/src/connections.c:1296 ../cli/src/connections.c:1322 +#: ../cli/src/connections.c:1265 ../cli/src/connections.c:1291 #, c-format msgid "Connection activated\n" msgstr "Conexión activada\n" -#: ../cli/src/connections.c:1299 +#: ../cli/src/connections.c:1268 #, c-format msgid "Error: Connection activation failed." msgstr "Error: falló la activación de la conexión." -#: ../cli/src/connections.c:1318 +#: ../cli/src/connections.c:1287 #, c-format msgid "state: %s (%d)\n" msgstr "estado: %s (%d)\n" -#: ../cli/src/connections.c:1328 +#: ../cli/src/connections.c:1297 #, c-format msgid "Error: Connection activation failed: %s." msgstr "Error: falló la activación de la conexión: %s." -#: ../cli/src/connections.c:1345 ../cli/src/devices.c:1134 +#: ../cli/src/connections.c:1314 ../cli/src/devices.c:1136 #, c-format msgid "Error: Timeout %d sec expired." msgstr "Error: expiró la pausa de %d segundos." -#: ../cli/src/connections.c:1388 +#: ../cli/src/connections.c:1327 #, c-format msgid "Error: Connection activation failed: %s" msgstr "Error: falló la activación de la conexión: %s" -#: ../cli/src/connections.c:1402 -#, c-format -msgid "Error: Obtaining active connection for '%s' failed." -msgstr "Error: falló la obtención de conexión activa para «%s»." - -#: ../cli/src/connections.c:1411 +#: ../cli/src/connections.c:1333 #, c-format msgid "Active connection state: %s\n" msgstr "Estado de la conexión activa: %s\n" -#: ../cli/src/connections.c:1412 +#: ../cli/src/connections.c:1334 #, c-format msgid "Active connection path: %s\n" msgstr "Ruta de la conexión activa: %s\n" -#: ../cli/src/connections.c:1465 ../cli/src/connections.c:1606 +#: ../cli/src/connections.c:1386 ../cli/src/connections.c:1527 #, c-format msgid "Error: Unknown connection: %s." msgstr "Error: conexión desconocida: %s." -#: ../cli/src/connections.c:1511 ../cli/src/devices.c:1206 +#: ../cli/src/connections.c:1432 ../cli/src/devices.c:1208 #, c-format msgid "Error: timeout value '%s' is not valid." msgstr "Error: valor de pausa «%s» inválido." -#: ../cli/src/connections.c:1524 ../cli/src/connections.c:1623 +#: ../cli/src/connections.c:1445 ../cli/src/connections.c:1544 #, c-format msgid "Error: id or uuid has to be specified." msgstr "Error: se debe especificar un id o uuid." -#: ../cli/src/connections.c:1554 +#: ../cli/src/connections.c:1473 #, c-format msgid "Error: No suitable device found: %s." msgstr "Error: no se encontró un dispositivo apropiado: %s." -#: ../cli/src/connections.c:1556 +#: ../cli/src/connections.c:1475 #, c-format msgid "Error: No suitable device found." msgstr "Error: no se encontró un dispositivo apropiado." -#: ../cli/src/connections.c:1659 +#: ../cli/src/connections.c:1580 #, c-format msgid "Warning: Connection not active\n" msgstr "Advertencia: conexión inactiva\n" -#: ../cli/src/connections.c:1697 +#: ../cli/src/connections.c:1618 #, c-format msgid "Error: 'con' command '%s' is not valid." msgstr "Error: comando «con» «%s» no es válido." -#: ../cli/src/connections.c:1762 +#: ../cli/src/connections.c:1683 #, c-format msgid "Error: could not connect to D-Bus." msgstr "Error: no se pudo conectar con D-Bus." -#: ../cli/src/connections.c:1769 +#: ../cli/src/connections.c:1690 #, c-format msgid "Error: Could not get system settings." msgstr "Error: no se pudo obtener configuración de sistema." -#: ../cli/src/connections.c:1779 +#: ../cli/src/connections.c:1700 #, c-format -#| msgid "Error: Can't obtain connections: settings services are not running." msgid "Error: Can't obtain connections: settings service is not running." msgstr "" "Error: no se pueden obtener conexiones: el servicio de configuración no se " @@ -484,238 +471,223 @@ msgstr "" #. 0 #. 9 #. 3 -#: ../cli/src/devices.c:64 ../cli/src/devices.c:100 ../cli/src/devices.c:210 -#: ../cli/src/devices.c:226 +#: ../cli/src/devices.c:66 ../cli/src/devices.c:102 ../cli/src/devices.c:212 +#: ../cli/src/devices.c:228 msgid "DEVICE" msgstr "DISPOSITIVO" #. 1 #. 4 #. 1 -#: ../cli/src/devices.c:66 ../cli/src/devices.c:104 -#: ../cli/src/network-manager.c:37 +#: ../cli/src/devices.c:68 ../cli/src/devices.c:106 +#: ../cli/src/network-manager.c:39 msgid "STATE" msgstr "ESTADO" -#: ../cli/src/devices.c:76 +#: ../cli/src/devices.c:78 msgid "GENERAL" msgstr "GENERAL" #. 0 -#: ../cli/src/devices.c:77 +#: ../cli/src/devices.c:79 msgid "CAPABILITIES" msgstr "FUNCIONALIDADES" #. 1 -#: ../cli/src/devices.c:78 +#: ../cli/src/devices.c:80 msgid "WIFI-PROPERTIES" msgstr "PROPIEDADES-WIFI" #. 2 -#: ../cli/src/devices.c:79 +#: ../cli/src/devices.c:81 msgid "AP" msgstr "AP" #. 3 -#: ../cli/src/devices.c:80 +#: ../cli/src/devices.c:82 msgid "WIRED-PROPERTIES" msgstr "PROPIEDADES ALÁMBRICAS" #. 4 -#: ../cli/src/devices.c:81 -#| msgid "WIFI-PROPERTIES" +#: ../cli/src/devices.c:83 msgid "WIMAX-PROPERTIES" msgstr "PROPIEDADES-WIMAX" #. 5 #. 0 -#: ../cli/src/devices.c:82 ../cli/src/devices.c:223 -#| msgid "DNS" +#: ../cli/src/devices.c:84 ../cli/src/devices.c:225 msgid "NSP" msgstr "PSR" #. 6 -#: ../cli/src/devices.c:83 +#: ../cli/src/devices.c:85 msgid "IP4-SETTINGS" msgstr "CONFIGURACIONES IP4" #. 7 -#: ../cli/src/devices.c:84 +#: ../cli/src/devices.c:86 msgid "IP4-DNS" msgstr "DNS IP4" #. 8 -#: ../cli/src/devices.c:85 +#: ../cli/src/devices.c:87 msgid "IP6-SETTINGS" msgstr "CONFIGURACIONES IP6" #. 9 -#: ../cli/src/devices.c:86 +#: ../cli/src/devices.c:88 msgid "IP6-DNS" msgstr "DNS IP6" #. 2 -#: ../cli/src/devices.c:102 +#: ../cli/src/devices.c:104 msgid "DRIVER" msgstr "CONTROLADOR" #. 3 -#: ../cli/src/devices.c:103 +#: ../cli/src/devices.c:105 msgid "HWADDR" msgstr "HWADDR" #. 0 -#: ../cli/src/devices.c:113 +#: ../cli/src/devices.c:115 msgid "CARRIER-DETECT" msgstr "DETECTAR-PORTADOR" #. 1 -#: ../cli/src/devices.c:114 +#: ../cli/src/devices.c:116 msgid "SPEED" msgstr "VELOCIDAD" #. 0 -#: ../cli/src/devices.c:123 +#: ../cli/src/devices.c:125 msgid "CARRIER" msgstr "PORTADOR" #. 0 -#: ../cli/src/devices.c:133 +#: ../cli/src/devices.c:135 msgid "WEP" msgstr "WEP" #. 1 -#: ../cli/src/devices.c:134 +#: ../cli/src/devices.c:136 msgid "WPA" msgstr "WPA" #. 2 -#: ../cli/src/devices.c:135 +#: ../cli/src/devices.c:137 msgid "WPA2" msgstr "WPA2" #. 3 -#: ../cli/src/devices.c:136 +#: ../cli/src/devices.c:138 msgid "TKIP" msgstr "TKIP" #. 4 -#: ../cli/src/devices.c:137 +#: ../cli/src/devices.c:139 msgid "CCMP" msgstr "CCMP" #. 0 -#: ../cli/src/devices.c:147 -#| msgid "FREQ" +#: ../cli/src/devices.c:149 msgid "CTR-FREQ" msgstr "CTR-FREC" #. 1 -#: ../cli/src/devices.c:148 -#| msgid "SSID" +#: ../cli/src/devices.c:150 msgid "RSSI" msgstr "RSSI" #. 2 -#: ../cli/src/devices.c:149 +#: ../cli/src/devices.c:151 msgid "CINR" msgstr "CINR" #. 3 -#: ../cli/src/devices.c:150 +#: ../cli/src/devices.c:152 msgid "TX-POW" msgstr "TX-POW" #. 4 -#: ../cli/src/devices.c:151 -#| msgid "BSSID" +#: ../cli/src/devices.c:153 msgid "BSID" msgstr "BSID" #. 0 -#: ../cli/src/devices.c:161 ../cli/src/devices.c:172 +#: ../cli/src/devices.c:163 ../cli/src/devices.c:174 msgid "ADDRESS" msgstr "DIRECCIÓN" #. 1 -#: ../cli/src/devices.c:162 ../cli/src/devices.c:173 +#: ../cli/src/devices.c:164 ../cli/src/devices.c:175 msgid "PREFIX" msgstr "PREFIJO" #. 2 -#: ../cli/src/devices.c:163 ../cli/src/devices.c:174 +#: ../cli/src/devices.c:165 ../cli/src/devices.c:176 msgid "GATEWAY" msgstr "PUERTA DE ENLACE" #. 0 -#: ../cli/src/devices.c:183 ../cli/src/devices.c:192 +#: ../cli/src/devices.c:185 ../cli/src/devices.c:194 msgid "DNS" msgstr "DNS" #. 0 -#: ../cli/src/devices.c:201 +#: ../cli/src/devices.c:203 msgid "SSID" msgstr "SSID" #. 1 -#: ../cli/src/devices.c:202 +#: ../cli/src/devices.c:204 msgid "BSSID" msgstr "BSSID" #. 2 -#: ../cli/src/devices.c:203 +#: ../cli/src/devices.c:205 msgid "MODE" msgstr "MODO" #. 3 -#: ../cli/src/devices.c:204 +#: ../cli/src/devices.c:206 msgid "FREQ" msgstr "FREC" #. 4 -#: ../cli/src/devices.c:205 +#: ../cli/src/devices.c:207 msgid "RATE" msgstr "TASA" #. 5 #. 1 -#: ../cli/src/devices.c:206 ../cli/src/devices.c:224 +#: ../cli/src/devices.c:208 ../cli/src/devices.c:226 msgid "SIGNAL" msgstr "SEÑAL" #. 6 -#: ../cli/src/devices.c:207 +#: ../cli/src/devices.c:209 msgid "SECURITY" msgstr "SEGURIDAD" #. 7 -#: ../cli/src/devices.c:208 +#: ../cli/src/devices.c:210 msgid "WPA-FLAGS" msgstr "INDICADORES-WPA" #. 8 -#: ../cli/src/devices.c:209 +#: ../cli/src/devices.c:211 msgid "RSN-FLAGS" msgstr "INDICADORES-RSN" #. 10 #. 4 -#: ../cli/src/devices.c:211 ../cli/src/devices.c:227 +#: ../cli/src/devices.c:213 ../cli/src/devices.c:229 msgid "ACTIVE" msgstr "ACTIVO" -#: ../cli/src/devices.c:254 -#, c-format -#| msgid "" -#| "Usage: nmcli dev { COMMAND | help }\n" -#| "\n" -#| " COMMAND := { status | list | disconnect | wifi }\n" -#| "\n" -#| " status\n" -#| " list [iface ]\n" -#| " disconnect iface [--nowait] [--timeout ]\n" -#| " wifi [list [iface ] [hwaddr ]]\n" -#| "\n" +#: ../cli/src/devices.c:256 +#, c-format msgid "" "Usage: nmcli dev { COMMAND | help }\n" "\n" @@ -741,330 +713,306 @@ msgstr "" " wimax [list [iface ] [nsp ]]\n" "\n" -#: ../cli/src/devices.c:282 +#: ../cli/src/devices.c:284 msgid "unmanaged" msgstr "sin gestión" -#: ../cli/src/devices.c:284 +#: ../cli/src/devices.c:286 msgid "unavailable" msgstr "no disponible" -#: ../cli/src/devices.c:286 ../cli/src/network-manager.c:113 +#: ../cli/src/devices.c:288 ../cli/src/network-manager.c:115 msgid "disconnected" msgstr "desconectado" -#: ../cli/src/devices.c:288 +#: ../cli/src/devices.c:290 msgid "connecting (prepare)" msgstr "conectando (preparar)" -#: ../cli/src/devices.c:290 +#: ../cli/src/devices.c:292 msgid "connecting (configuring)" msgstr "conectando (configurando)" -#: ../cli/src/devices.c:292 +#: ../cli/src/devices.c:294 msgid "connecting (need authentication)" msgstr "conectando (necesita autenticación)" -#: ../cli/src/devices.c:294 +#: ../cli/src/devices.c:296 msgid "connecting (getting IP configuration)" msgstr "conectando (obteniendo configuración IP)" -#: ../cli/src/devices.c:296 -#| msgid "connecting (getting IP configuration)" +#: ../cli/src/devices.c:298 msgid "connecting (checking IP connectivity)" msgstr "conectando (comprobando conectividad IP)" -#: ../cli/src/devices.c:298 -#| msgid "connecting (getting IP configuration)" +#: ../cli/src/devices.c:300 msgid "connecting (starting secondary connections)" msgstr "conectando (iniciando conexiones secundarias)" -#: ../cli/src/devices.c:300 ../cli/src/network-manager.c:109 +#: ../cli/src/devices.c:302 ../cli/src/network-manager.c:111 msgid "connected" msgstr "conectado" -#: ../cli/src/devices.c:302 -#| msgid "activating" -msgid "deactivating" -msgstr "desactivando" - -#: ../cli/src/devices.c:304 +#: ../cli/src/devices.c:306 msgid "connection failed" msgstr "conexión falló" -#: ../cli/src/devices.c:329 ../cli/src/devices.c:339 ../cli/src/devices.c:499 -#: ../cli/src/devices.c:543 +#: ../cli/src/devices.c:331 ../cli/src/devices.c:341 ../cli/src/devices.c:501 +#: ../cli/src/devices.c:545 msgid "Unknown" msgstr "desconocido" -#: ../cli/src/devices.c:372 +#: ../cli/src/devices.c:374 msgid "(none)" msgstr "(ninguno)" -#: ../cli/src/devices.c:397 +#: ../cli/src/devices.c:399 #, c-format msgid "%s: error converting IP4 address 0x%X" msgstr "%s: error convirtiendo dirección IP4 0x%X" -#: ../cli/src/devices.c:468 +#: ../cli/src/devices.c:470 #, c-format msgid "%u MHz" msgstr "%u MHz" -#: ../cli/src/devices.c:469 +#: ../cli/src/devices.c:471 #, c-format msgid "%u MB/s" msgstr "%u MB/s" -#: ../cli/src/devices.c:478 +#: ../cli/src/devices.c:480 msgid "Encrypted: " msgstr "Encriptado: " -#: ../cli/src/devices.c:483 +#: ../cli/src/devices.c:485 msgid "WEP " msgstr "WEP" -#: ../cli/src/devices.c:485 +#: ../cli/src/devices.c:487 msgid "WPA " msgstr "WPA" -#: ../cli/src/devices.c:487 +#: ../cli/src/devices.c:489 msgid "WPA2 " msgstr "WPA2" -#: ../cli/src/devices.c:490 +#: ../cli/src/devices.c:492 msgid "Enterprise " msgstr "Empresa" -#: ../cli/src/devices.c:499 +#: ../cli/src/devices.c:501 msgid "Ad-Hoc" msgstr "Ad-Hoc" -#: ../cli/src/devices.c:499 +#: ../cli/src/devices.c:501 msgid "Infrastructure" msgstr "Infraestructura" -#: ../cli/src/devices.c:534 +#: ../cli/src/devices.c:536 msgid "Home" msgstr "Casa" -#: ../cli/src/devices.c:537 +#: ../cli/src/devices.c:539 msgid "Partner" msgstr "Asociado" -#: ../cli/src/devices.c:540 +#: ../cli/src/devices.c:542 msgid "Roaming" msgstr "Roaming" -#: ../cli/src/devices.c:610 +#: ../cli/src/devices.c:612 #, c-format msgid "Error: 'dev list': %s" msgstr "Error: «dev list»: %s" -#: ../cli/src/devices.c:612 +#: ../cli/src/devices.c:614 #, c-format msgid "Error: 'dev list': %s; allowed fields: %s" msgstr "Error: «dev list»: %s; campos permitidos: %s" -#: ../cli/src/devices.c:621 +#: ../cli/src/devices.c:623 msgid "Device details" msgstr "Detalles de los dispositivos" -#: ../cli/src/devices.c:655 ../cli/src/devices.c:1150 ../cli/src/utils.c:342 +#: ../cli/src/devices.c:657 ../cli/src/devices.c:1152 ../cli/src/utils.c:342 msgid "(unknown)" msgstr "(desconocido)" -#: ../cli/src/devices.c:656 +#: ../cli/src/devices.c:658 msgid "unknown)" msgstr "desconocido" -#: ../cli/src/devices.c:682 +#: ../cli/src/devices.c:684 #, c-format msgid "%u Mb/s" msgstr "%u Mb/s" #. Print header #. "WIRED-PROPERTIES" -#: ../cli/src/devices.c:755 +#: ../cli/src/devices.c:757 msgid "on" msgstr "encendido" -#: ../cli/src/devices.c:755 +#: ../cli/src/devices.c:757 msgid "off" msgstr "apagado" -#: ../cli/src/devices.c:1002 +#: ../cli/src/devices.c:1004 #, c-format msgid "Error: 'dev status': %s" msgstr "Error: «dev status»: %s" -#: ../cli/src/devices.c:1004 +#: ../cli/src/devices.c:1006 #, c-format msgid "Error: 'dev status': %s; allowed fields: %s" msgstr "Error: «dev status»: %s; campos permitidos: %s" -#: ../cli/src/devices.c:1027 +#: ../cli/src/devices.c:1029 msgid "Status of devices" msgstr "Estado de los dispositivos" -#: ../cli/src/devices.c:1058 +#: ../cli/src/devices.c:1060 #, c-format msgid "Error: '%s' argument is missing." msgstr "Error: falta el argumento «%s»." -#: ../cli/src/devices.c:1099 ../cli/src/devices.c:1251 -#: ../cli/src/devices.c:1387 ../cli/src/devices.c:1606 +#: ../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 "Error: no se encontró el dispositivo «%s»." -#: ../cli/src/devices.c:1122 +#: ../cli/src/devices.c:1124 #, c-format msgid "Success: Device '%s' successfully disconnected." msgstr "Éxito: dispositivo «%s» desconectado correctamente." -#: ../cli/src/devices.c:1147 +#: ../cli/src/devices.c:1149 #, c-format msgid "Error: Device '%s' (%s) disconnecting failed: %s" msgstr "Error: falló la desconexión del dispositivo «%s» (%s): %s" -#: ../cli/src/devices.c:1155 +#: ../cli/src/devices.c:1157 #, c-format msgid "Device state: %d (%s)\n" msgstr "Estado del dispositivo: %d (%s)\n" -#: ../cli/src/devices.c:1220 +#: ../cli/src/devices.c:1222 #, c-format msgid "Error: iface has to be specified." msgstr "Error: se debe especificar iface." -#: ../cli/src/devices.c:1345 +#: ../cli/src/devices.c:1347 #, c-format msgid "Error: 'dev wifi': %s" msgstr "Error: «dev wifi» «%s»" -#: ../cli/src/devices.c:1347 +#: ../cli/src/devices.c:1349 #, c-format msgid "Error: 'dev wifi': %s; allowed fields: %s" msgstr "Error: «dev wifi»: %s; campos permitidos: %s" -#: ../cli/src/devices.c:1370 +#: ../cli/src/devices.c:1372 msgid "WiFi scan list" msgstr "lista de análisis WiFi" -#: ../cli/src/devices.c:1407 ../cli/src/devices.c:1461 -#: ../cli/src/devices.c:1668 +#: ../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 "Error: no se encontró el punto de acceso con hwaddr «%s»." -#: ../cli/src/devices.c:1424 +#: ../cli/src/devices.c:1426 #, c-format msgid "Error: Device '%s' is not a WiFi device." msgstr "Error: el dispositivo «%s» no es un dispositivo WiFi." -#: ../cli/src/devices.c:1488 +#: ../cli/src/devices.c:1490 #, c-format msgid "Error: 'dev wifi' command '%s' is not valid." msgstr "Error: comando «dev wifi» «%s» inválido." -#: ../cli/src/devices.c:1564 +#: ../cli/src/devices.c:1566 #, c-format -#| msgid "Error: 'dev wifi': %s" msgid "Error: 'dev wimax': %s" msgstr "Error: «dev wimax» «%s»" -#: ../cli/src/devices.c:1566 +#: ../cli/src/devices.c:1568 #, c-format -#| msgid "Error: 'dev wifi': %s; allowed fields: %s" msgid "Error: 'dev wimax': %s; allowed fields: %s" msgstr "Error: «dev wimax»: %s; campos permitidos: %s" -#: ../cli/src/devices.c:1589 +#: ../cli/src/devices.c:1591 msgid "WiMAX NSP list" msgstr "Lista PSR WiMAX" -#: ../cli/src/devices.c:1626 +#: ../cli/src/devices.c:1628 #, c-format -#| msgid "Error: Device '%s' not found." msgid "Error: NSP with name '%s' not found." msgstr "Error: no se encontró el PSR con el nombre «%s»." -#: ../cli/src/devices.c:1637 +#: ../cli/src/devices.c:1639 #, c-format -#| msgid "Error: Device '%s' is not a WiFi device." msgid "Error: Device '%s' is not a WiMAX device." msgstr "Error: el dispositivo «%s» no es un dispositivo WiMAX." -#: ../cli/src/devices.c:1695 +#: ../cli/src/devices.c:1697 #, c-format -#| msgid "Error: 'dev wifi' command '%s' is not valid." msgid "Error: 'dev wimax' command '%s' is not valid." msgstr "Error: comando «dev wimax» «%s» no válido." -#: ../cli/src/devices.c:1745 +#: ../cli/src/devices.c:1747 #, c-format msgid "Error: 'dev' command '%s' is not valid." msgstr "Error: comando «dev» «%s» no válido." -#: ../cli/src/network-manager.c:35 +#: ../cli/src/network-manager.c:37 msgid "RUNNING" msgstr "EJECUTANDO" #. 0 -#: ../cli/src/network-manager.c:36 +#: ../cli/src/network-manager.c:38 msgid "VERSION" msgstr "VERSIÓN" #. 2 -#: ../cli/src/network-manager.c:38 +#: ../cli/src/network-manager.c:40 msgid "NET-ENABLED" msgstr "RED-ACTIVADA" #. 3 -#: ../cli/src/network-manager.c:39 +#: ../cli/src/network-manager.c:41 msgid "WIFI-HARDWARE" msgstr "HARDWARE-WIFI" #. 4 -#: ../cli/src/network-manager.c:40 +#: ../cli/src/network-manager.c:42 msgid "WIFI" msgstr "WIFI" #. 5 -#: ../cli/src/network-manager.c:41 +#: ../cli/src/network-manager.c:43 msgid "WWAN-HARDWARE" msgstr "HARDWARE-WWAN" #. 6 -#: ../cli/src/network-manager.c:42 +#: ../cli/src/network-manager.c:44 msgid "WWAN" msgstr "WWAN" #. 7 -#: ../cli/src/network-manager.c:43 -#| msgid "WIFI-HARDWARE" +#: ../cli/src/network-manager.c:45 msgid "WIMAX-HARDWARE" msgstr "HARDWARE-WIMAX" #. 8 -#: ../cli/src/network-manager.c:44 +#: ../cli/src/network-manager.c:46 msgid "WIMAX" msgstr "WIMAX" -#: ../cli/src/network-manager.c:72 -#, c-format -#| msgid "" -#| "Usage: nmcli nm { COMMAND | help }\n" -#| "\n" -#| " COMMAND := { status | enable | sleep | wifi | wwan }\n" -#| "\n" -#| " status\n" -#| " enable [true|false]\n" -#| " sleep [true|false]\n" -#| " wifi [on|off]\n" -#| " wwan [on|off]\n" -#| "\n" +#: ../cli/src/network-manager.c:74 +#, c-format msgid "" "Usage: nmcli nm { COMMAND | help }\n" "\n" @@ -1094,164 +1042,142 @@ msgstr "" " wimax [on|off]\n" "\n" -#: ../cli/src/network-manager.c:101 +#: ../cli/src/network-manager.c:103 msgid "asleep" msgstr "dormido" -#: ../cli/src/network-manager.c:103 +#: ../cli/src/network-manager.c:105 msgid "connecting" msgstr "conectando" -#: ../cli/src/network-manager.c:105 +#: ../cli/src/network-manager.c:107 msgid "connected (local only)" msgstr "conectado (sólo local)" -#: ../cli/src/network-manager.c:107 -#| msgid "connected" +#: ../cli/src/network-manager.c:109 msgid "connected (site only)" msgstr "conectado (sólo el sitio)" -#: ../cli/src/network-manager.c:111 -#| msgid "connecting" +#: ../cli/src/network-manager.c:113 msgid "disconnecting" msgstr "desconectando" -#: ../cli/src/network-manager.c:151 +#: ../cli/src/network-manager.c:153 #, c-format msgid "Error: 'nm status': %s" msgstr "Error: «nm status»: %s" -#: ../cli/src/network-manager.c:153 +#: ../cli/src/network-manager.c:155 #, c-format msgid "Error: 'nm status': %s; allowed fields: %s" msgstr "Error: «nm status»: %s; campos permitidos: %s" #. create NMClient -#: ../cli/src/network-manager.c:166 ../cli/src/network-manager.c:167 #: ../cli/src/network-manager.c:168 ../cli/src/network-manager.c:169 -#: ../cli/src/network-manager.c:170 ../cli/src/network-manager.c:172 -#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:294 -#: ../cli/src/network-manager.c:349 ../cli/src/network-manager.c:387 -#: ../cli/src/network-manager.c:426 +#: ../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 "activado" -#: ../cli/src/network-manager.c:166 ../cli/src/network-manager.c:167 #: ../cli/src/network-manager.c:168 ../cli/src/network-manager.c:169 -#: ../cli/src/network-manager.c:170 ../cli/src/network-manager.c:172 -#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:294 -#: ../cli/src/network-manager.c:349 ../cli/src/network-manager.c:387 -#: ../cli/src/network-manager.c:426 +#: ../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 "desactivado" -#: ../cli/src/network-manager.c:186 +#: ../cli/src/network-manager.c:188 msgid "NetworkManager status" msgstr "Estado de NetworkManager" #. Print header -#: ../cli/src/network-manager.c:189 +#: ../cli/src/network-manager.c:191 msgid "running" msgstr "ejecutando" -#: ../cli/src/network-manager.c:189 +#: ../cli/src/network-manager.c:191 msgid "not running" msgstr "no ejecutando" -#: ../cli/src/network-manager.c:220 ../cli/src/utils.c:322 +#: ../cli/src/network-manager.c:222 ../cli/src/utils.c:322 #, c-format msgid "Error: Couldn't connect to system bus: %s" msgstr "Error: no se pudo conectar con el bus del sistema: %s" -#: ../cli/src/network-manager.c:231 +#: ../cli/src/network-manager.c:233 #, c-format msgid "Error: Couldn't create D-Bus object proxy." msgstr "Error: no se pudo crear un objeto proxy en D-Bus." -#: ../cli/src/network-manager.c:237 +#: ../cli/src/network-manager.c:239 #, c-format msgid "Error in sleep: %s" msgstr "Error al dormir: %s" -#: ../cli/src/network-manager.c:281 ../cli/src/network-manager.c:336 -#: ../cli/src/network-manager.c:374 ../cli/src/network-manager.c:413 +#: ../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 "Error: «--fields» valor «%s» no es válido aquí; campos permitidos: %s" -#: ../cli/src/network-manager.c:289 +#: ../cli/src/network-manager.c:291 msgid "Networking enabled" msgstr "Red activada" -#: ../cli/src/network-manager.c:305 +#: ../cli/src/network-manager.c:307 #, c-format msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'." msgstr "Error: parámetro «enable» inválido: «%s»; use «true» o «false»." -#: ../cli/src/network-manager.c:315 +#: ../cli/src/network-manager.c:317 #, c-format msgid "Error: Sleeping status is not exported by NetworkManager." msgstr "Error: NetworkManager no exporta el estado para dormir." -#: ../cli/src/network-manager.c:323 +#: ../cli/src/network-manager.c:325 #, c-format msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'." msgstr "Error: parámetro «wifi» inválido: «%s»." -#: ../cli/src/network-manager.c:344 +#: ../cli/src/network-manager.c:346 msgid "WiFi enabled" msgstr "WiFi activado" -#: ../cli/src/network-manager.c:360 +#: ../cli/src/network-manager.c:362 #, c-format msgid "Error: invalid 'wifi' parameter: '%s'." msgstr "Error: parámetro «wifi» inválido: «%s»." -#: ../cli/src/network-manager.c:382 +#: ../cli/src/network-manager.c:384 msgid "WWAN enabled" msgstr "WWAN activado" -#: ../cli/src/network-manager.c:398 +#: ../cli/src/network-manager.c:400 #, c-format msgid "Error: invalid 'wwan' parameter: '%s'." msgstr "Error: parámetro «wwan» inválido: «%s»." -#: ../cli/src/network-manager.c:421 -#| msgid "WiFi enabled" +#: ../cli/src/network-manager.c:423 msgid "WiMAX enabled" msgstr "WiMAX activado" -#: ../cli/src/network-manager.c:437 +#: ../cli/src/network-manager.c:439 #, c-format -#| msgid "Error: invalid 'wifi' parameter: '%s'." msgid "Error: invalid 'wimax' parameter: '%s'." msgstr "Error: parámetro «wimax» inválido: «%s»." -#: ../cli/src/network-manager.c:450 +#: ../cli/src/network-manager.c:452 #, c-format msgid "Error: 'nm' command '%s' is not valid." msgstr "Error: comando «nm» command «%s» inválido." #: ../cli/src/nmcli.c:64 #, c-format -#| msgid "" -#| "Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n" -#| "\n" -#| "OPTIONS\n" -#| " -t[erse] terse output\n" -#| " -p[retty] pretty output\n" -#| " -m[ode] tabular|multiline output mode\n" -#| " -f[ields] |all|common specify fields to output\n" -#| " -e[scape] yes|no escape columns separators in " -#| "values\n" -#| " -v[ersion] show program version\n" -#| " -h[elp] print this help\n" -#| "\n" -#| "OBJECT\n" -#| " nm NetworkManager status\n" -#| " con NetworkManager connections\n" -#| " dev devices managed by NetworkManager\n" -#| "\n" msgid "" "Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n" "\n" @@ -1351,7 +1277,6 @@ msgid "Caught signal %d, shutting down..." msgstr "Señal capturada %d, apagando..." #: ../cli/src/nmcli.c:257 -#| msgid "Error: Couldn't create D-Bus object proxy." msgid "Error: Could not create NMClient object." msgstr "Error: no se pudo crear un objeto NMClient." @@ -1359,79 +1284,79 @@ msgstr "Error: no se pudo crear un objeto NMClient." msgid "Success" msgstr "Éxito" -#: ../cli/src/settings.c:421 +#: ../cli/src/settings.c:423 #, c-format msgid "%d (hex-ascii-key)" msgstr "%d (clave-hex-ascii)" -#: ../cli/src/settings.c:423 +#: ../cli/src/settings.c:425 #, c-format msgid "%d (104/128-bit passphrase)" msgstr "%d (frase de acceso 104/128-bits)" -#: ../cli/src/settings.c:426 +#: ../cli/src/settings.c:428 #, c-format msgid "%d (unknown)" msgstr "%d (desconocido)" -#: ../cli/src/settings.c:452 +#: ../cli/src/settings.c:454 msgid "0 (unknown)" msgstr "0 (desconocido)" -#: ../cli/src/settings.c:458 +#: ../cli/src/settings.c:460 msgid "any, " msgstr "cualquiera," -#: ../cli/src/settings.c:460 +#: ../cli/src/settings.c:462 msgid "900 MHz, " msgstr "900 MHz, " -#: ../cli/src/settings.c:462 +#: ../cli/src/settings.c:464 msgid "1800 MHz, " msgstr "1800 MHz, " -#: ../cli/src/settings.c:464 +#: ../cli/src/settings.c:466 msgid "1900 MHz, " msgstr "1900 MHz, " -#: ../cli/src/settings.c:466 +#: ../cli/src/settings.c:468 msgid "850 MHz, " msgstr "850 MHz, " -#: ../cli/src/settings.c:468 +#: ../cli/src/settings.c:470 msgid "WCDMA 3GPP UMTS 2100 MHz, " msgstr "WCDMA 3GPP UMTS 2100 MHz, " -#: ../cli/src/settings.c:470 +#: ../cli/src/settings.c:472 msgid "WCDMA 3GPP UMTS 1800 MHz, " msgstr "WCDMA 3GPP UMTS 1800 MHz, " -#: ../cli/src/settings.c:472 +#: ../cli/src/settings.c:474 msgid "WCDMA 3GPP UMTS 1700/2100 MHz, " msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, " -#: ../cli/src/settings.c:474 +#: ../cli/src/settings.c:476 msgid "WCDMA 3GPP UMTS 800 MHz, " msgstr "WCDMA 3GPP UMTS 800 MHz, " -#: ../cli/src/settings.c:476 +#: ../cli/src/settings.c:478 msgid "WCDMA 3GPP UMTS 850 MHz, " msgstr "WCDMA 3GPP UMTS 850 MHz, " -#: ../cli/src/settings.c:478 +#: ../cli/src/settings.c:480 msgid "WCDMA 3GPP UMTS 900 MHz, " msgstr "WCDMA 3GPP UMTS 900 MHz, " -#: ../cli/src/settings.c:480 +#: ../cli/src/settings.c:482 msgid "WCDMA 3GPP UMTS 1700 MHz, " msgstr "WCDMA 3GPP UMTS 1700 MHz, " -#: ../cli/src/settings.c:564 ../cli/src/settings.c:730 +#: ../cli/src/settings.c:566 ../cli/src/settings.c:732 msgid "auto" msgstr "auto" -#: ../cli/src/settings.c:725 ../cli/src/settings.c:728 -#: ../cli/src/settings.c:729 ../cli/src/utils.c:176 +#: ../cli/src/settings.c:727 ../cli/src/settings.c:730 +#: ../cli/src/settings.c:731 ../cli/src/utils.c:176 msgid "not set" msgstr "no establecido" @@ -1457,7 +1382,6 @@ msgstr "Opción «--terse» requiere valores de «--fields» específicos, no « #: ../cli/src/utils.c:333 #, c-format -#| msgid "Error: Couldn't create D-Bus object proxy." msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus" msgstr "" "Error: no se pudo crear un objeto proxy en D-Bus para org.freedesktop.DBus" @@ -1483,350 +1407,378 @@ msgid "" "execution using --nocheck, but the results are unpredictable." msgstr "" "Error: las versiones de nmcli (%s) y de NetworkManager (%s) no coinciden. " -"Fuerce la ejecución usando «--nocheck», pero los resultados son " -"impredecibles." +"Fuerce la ejecución usando «--nocheck», pero los resultados son impredecibles." -#: ../libnm-util/crypto.c:125 +#: ../libnm-util/crypto.c:133 #, c-format msgid "PEM key file had no end tag '%s'." msgstr "El archivo de clave PEM no tiene la etiqueta de finalización «%s»." -#: ../libnm-util/crypto.c:138 +#: ../libnm-util/crypto.c:146 #, c-format msgid "Doesn't look like a PEM private key file." msgstr "No parece ser un archivo de clave privada PEM." -#: ../libnm-util/crypto.c:146 +#: ../libnm-util/crypto.c:154 #, c-format msgid "Not enough memory to store PEM file data." msgstr "No hay memoria suficiente para almacenar el archivo de datos PEM." -#: ../libnm-util/crypto.c:162 +#: ../libnm-util/crypto.c:170 #, c-format msgid "Malformed PEM file: Proc-Type was not first tag." msgstr "Archivo PEM mal formado: la primera etiqueta no era Proc-Type." -#: ../libnm-util/crypto.c:170 +#: ../libnm-util/crypto.c:178 #, c-format msgid "Malformed PEM file: unknown Proc-Type tag '%s'." msgstr "Archivo PEM mal formado: etiqueta Proc-Type «%s» desconocida." -#: ../libnm-util/crypto.c:180 +#: ../libnm-util/crypto.c:188 #, c-format msgid "Malformed PEM file: DEK-Info was not the second tag." msgstr "Archivo PEM mal formado: la segunda etiqueta no era DEK-Info." -#: ../libnm-util/crypto.c:191 +#: ../libnm-util/crypto.c:199 #, c-format msgid "Malformed PEM file: no IV found in DEK-Info tag." msgstr "Archivo PEM mal formado: no se encontró IV en la etiqueta DEK-Info." -#: ../libnm-util/crypto.c:198 +#: ../libnm-util/crypto.c:206 #, c-format msgid "Malformed PEM file: invalid format of IV in DEK-Info tag." msgstr "" "Archivo PEM mal formado: formato de IV no válido en la etiqueta DEK-Info." -#: ../libnm-util/crypto.c:211 +#: ../libnm-util/crypto.c:219 #, c-format msgid "Malformed PEM file: unknown private key cipher '%s'." msgstr "Archivo PEM malformado: cifrador de clave privada «%s» desconocido." -#: ../libnm-util/crypto.c:230 +#: ../libnm-util/crypto.c:238 #, c-format msgid "Could not decode private key." msgstr "No se pudo decodificar la clave privada." -#: ../libnm-util/crypto.c:266 ../libnm-util/crypto.c:552 +#: ../libnm-util/crypto.c:284 +msgid "Failed to find expected PKCS#8 start tag." +msgstr "Falló al buscar la etiqueta de inicio de PKCS#8." + +#: ../libnm-util/crypto.c:292 +#, c-format +msgid "Failed to find expected PKCS#8 end tag '%s'." +msgstr "Falló al buscar la etiqueta de final «%s» de PKCS#8." + +#: ../libnm-util/crypto.c:312 +#| msgid "Not enough memory to store file data." +msgid "Not enough memory to store private key data." +msgstr "No hay memoria suficiente para almacenar los datos de la clave privada." + +#: ../libnm-util/crypto.c:317 +#| msgid "Failed to decrypt the private key." +msgid "Failed to decode PKCS#8 private key." +msgstr "Falló al descifrar la clave privada PKCS#8." + +#: ../libnm-util/crypto.c:339 ../libnm-util/crypto.c:625 #, c-format msgid "Not enough memory to store certificate data." msgstr "No hay memoria suficiente para almacenar los datos del certificado." -#: ../libnm-util/crypto.c:292 +#: ../libnm-util/crypto.c:365 #, c-format msgid "IV must be an even number of bytes in length." msgstr "IV debe ser un número par de bytes de longitud." -#: ../libnm-util/crypto.c:301 +#: ../libnm-util/crypto.c:374 #, c-format msgid "Not enough memory to store the IV." msgstr "No hay memoria suficiente para almacenar la IV." -#: ../libnm-util/crypto.c:312 +#: ../libnm-util/crypto.c:385 #, c-format msgid "IV contains non-hexadecimal digits." msgstr "IV contiene dígitos no hexadecimales." -#: ../libnm-util/crypto.c:350 ../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:423 ../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 "Se desconocía el cifrador de clave privada «%s»." -#: ../libnm-util/crypto.c:359 +#: ../libnm-util/crypto.c:432 #, c-format msgid "Not enough memory to decrypt private key." msgstr "No hay memoria suficiente para descifrar la clave privada." -#: ../libnm-util/crypto.c:424 +#: ../libnm-util/crypto.c:497 #, c-format msgid "Not enough memory to store decrypted private key." msgstr "No hay memoria suficiente para almacenar la clave privada descifrada." -#: ../libnm-util/crypto.c:469 +#: ../libnm-util/crypto.c:542 #, c-format msgid "Unable to determine private key type." msgstr "No se pudo determinar el tipo de clave privada." -#: ../libnm-util/crypto.c:524 +#: ../libnm-util/crypto.c:597 #, c-format -#| msgid "PEM certificate '%s' had no end tag '%s'." msgid "PEM certificate had no start tag '%s'." msgstr "El certificado PEM no tiene etiqueta de inicio «%s»." -#: ../libnm-util/crypto.c:533 +#: ../libnm-util/crypto.c:606 #, c-format -#| msgid "PEM certificate '%s' had no end tag '%s'." msgid "PEM certificate had no end tag '%s'." msgstr "El certificado PEM no tiene etiqueta de finalización «%s»." -#: ../libnm-util/crypto.c:557 +#: ../libnm-util/crypto.c:630 #, c-format msgid "Failed to decode certificate." msgstr "No se pudo decodificar el certificado." -#: ../libnm-util/crypto_gnutls.c:49 +#: ../libnm-util/crypto_gnutls.c:50 msgid "Failed to initialize the crypto engine." msgstr "Falló al inicializar el motor de descifrado." -#: ../libnm-util/crypto_gnutls.c:93 +#: ../libnm-util/crypto_gnutls.c:92 #, c-format msgid "Failed to initialize the MD5 engine: %s / %s." msgstr "Falló al inicializar el motor MD5: %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 "Longitud IV inválida (debe ser al menos de %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 "No hay memoria suficiente para el búfer de la clave descifrada." -#: ../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 "Falló al inicializar el contexto de descifrado: %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 "Falló al establecer la clave simétrica para el descifrado: %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 "Falló al establecer IV para el descifrado: %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 "Falló al descifrar la clave privada: %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 "Falló al descifrar la clave privada: longitud inesperada del relleno." -#: ../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 "Falló al descifrar la clave privada." -#: ../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 "No se pudo reservar memoria para el cifrado." -#: ../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 "Falló al inicializar el contexto de cifrador: %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 "Falló al establecer la clave simétrica para el cifrado: %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 "Falló al establecer IV para el cifrado: %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 "Falló al cifrar los datos: %s / %s." -#: ../libnm-util/crypto_gnutls.c:362 +#: ../libnm-util/crypto_gnutls.c:361 #, c-format msgid "Error initializing certificate data: %s" msgstr "Error al inicializar los datos del certificado: %s" -#: ../libnm-util/crypto_gnutls.c:384 +#: ../libnm-util/crypto_gnutls.c:383 #, c-format msgid "Couldn't decode certificate: %s" msgstr "No se pudo decodificar el certificado: %s" -#: ../libnm-util/crypto_gnutls.c:408 +#: ../libnm-util/crypto_gnutls.c:407 #, c-format msgid "Couldn't initialize PKCS#12 decoder: %s" msgstr "No se pudo inicializar el decodificador PKCS#12: %s" -#: ../libnm-util/crypto_gnutls.c:421 +#: ../libnm-util/crypto_gnutls.c:420 #, c-format msgid "Couldn't decode PKCS#12 file: %s" msgstr "No se pudo decodificar el archivo PKCS#12: %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 se pudo verificar el archivo PKCS#12: %s" +#: ../libnm-util/crypto_gnutls.c:460 +#, c-format +#| msgid "Couldn't initialize PKCS#12 decoder: %s" +msgid "Couldn't initialize PKCS#8 decoder: %s" +msgstr "No se pudo inicializar el decodificador PKCS#8: %s" + +#: ../libnm-util/crypto_gnutls.c:483 +#, c-format +#| msgid "Couldn't decode PKCS#12 file: %s" +msgid "Couldn't decode PKCS#8 file: %s" +msgstr "No se pudo decodificar el archivo PKCS#8: %s" + #: ../libnm-util/crypto_nss.c:56 #, c-format msgid "Failed to initialize the crypto engine: %d." msgstr "Falló al inicializar el motor de cifrado: %d." -#: ../libnm-util/crypto_nss.c:111 +#: ../libnm-util/crypto_nss.c:107 #, c-format msgid "Failed to initialize the MD5 context: %d." msgstr "Falló al inicializar el contexto MD5: %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 "Longitud IV inválida (debe ser al menos de %d)." -#: ../libnm-util/crypto_nss.c:196 +#: ../libnm-util/crypto_nss.c:192 #, c-format msgid "Failed to initialize the decryption cipher slot." msgstr "Falló al inicializar la ranura de descifrado." -#: ../libnm-util/crypto_nss.c:206 +#: ../libnm-util/crypto_nss.c:202 #, c-format msgid "Failed to set symmetric key for decryption." msgstr "Falló al establecer la clave simétrica para el descifrado." -#: ../libnm-util/crypto_nss.c:216 +#: ../libnm-util/crypto_nss.c:212 #, c-format msgid "Failed to set IV for decryption." msgstr "Falló al establecer IV para el descifrado." -#: ../libnm-util/crypto_nss.c:224 +#: ../libnm-util/crypto_nss.c:220 #, c-format msgid "Failed to initialize the decryption context." msgstr "Falló al inicializar el contexto de descifrado." -#: ../libnm-util/crypto_nss.c:237 +#: ../libnm-util/crypto_nss.c:233 #, c-format msgid "Failed to decrypt the private key: %d." msgstr "Falló al descifrar la clave privada: %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 "" "Falló al descifrar la clave privada: los datos descifrados son demasiado " "grandes." -#: ../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 "Falló la finalización del descifrado de la clave privada: %d." -#: ../libnm-util/crypto_nss.c:364 +#: ../libnm-util/crypto_nss.c:360 #, c-format msgid "Failed to initialize the encryption cipher slot." msgstr "Falló al inicializar la ranura de cifrado." -#: ../libnm-util/crypto_nss.c:372 +#: ../libnm-util/crypto_nss.c:368 #, c-format msgid "Failed to set symmetric key for encryption." msgstr "Falló al establecer la clave simétrica para el cifrado." -#: ../libnm-util/crypto_nss.c:380 +#: ../libnm-util/crypto_nss.c:376 #, c-format msgid "Failed to set IV for encryption." msgstr "Falló al establecer IV para el cifrado." -#: ../libnm-util/crypto_nss.c:388 +#: ../libnm-util/crypto_nss.c:384 #, c-format msgid "Failed to initialize the encryption context." msgstr "Falló al inicializar el contexto de cifrado." -#: ../libnm-util/crypto_nss.c:396 +#: ../libnm-util/crypto_nss.c:392 #, c-format msgid "Failed to encrypt: %d." msgstr "Falló al cifrar: %d." -#: ../libnm-util/crypto_nss.c:404 +#: ../libnm-util/crypto_nss.c:400 #, c-format msgid "Unexpected amount of data after encrypting." msgstr "Cantidad inesperada de datos después del encriptado." -#: ../libnm-util/crypto_nss.c:447 +#: ../libnm-util/crypto_nss.c:443 #, c-format msgid "Couldn't decode certificate: %d" msgstr "No se pudo decodificar el certificado: %d" -#: ../libnm-util/crypto_nss.c:482 +#: ../libnm-util/crypto_nss.c:478 #, c-format msgid "Couldn't convert password to UCS2: %d" msgstr "No se pudo convertir la contraseña a 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 "No se pudo inicializar el decodificador PKCS#12: %d" -#: ../libnm-util/crypto_nss.c:519 +#: ../libnm-util/crypto_nss.c:515 #, c-format msgid "Couldn't decode PKCS#12 file: %d" msgstr "No se pudo decodificar el archivo PKCS#12: %d" -#: ../libnm-util/crypto_nss.c:528 +#: ../libnm-util/crypto_nss.c:524 #, c-format msgid "Couldn't verify PKCS#12 file: %d" msgstr "No se pudo verificar el archivo PKCS#12: %d" -#: ../libnm-util/crypto_nss.c:557 +#: ../libnm-util/crypto_nss.c:568 msgid "Could not generate random data." msgstr "No se pudo generar datos aleatorios." -#: ../libnm-util/nm-utils.c:1988 +#: ../libnm-util/nm-utils.c:2000 #, c-format msgid "Not enough memory to make encryption key." msgstr "No hay memoria suficiente para crear la clave privada de cifrado." -#: ../libnm-util/nm-utils.c:2098 +#: ../libnm-util/nm-utils.c:2110 msgid "Could not allocate memory for PEM file creation." msgstr "No se pudo reservar memoria para crear el archivo PEM." -#: ../libnm-util/nm-utils.c:2110 +#: ../libnm-util/nm-utils.c:2122 #, c-format msgid "Could not allocate memory for writing IV to PEM file." msgstr "No pudo asignar memoria para escribir IV al archivo PEM." -#: ../libnm-util/nm-utils.c:2122 +#: ../libnm-util/nm-utils.c:2134 #, c-format msgid "Could not allocate memory for writing encrypted key to PEM file." msgstr "" "No se pudo asignar memoria para escribir llave encriptada al archivo PEM." -#: ../libnm-util/nm-utils.c:2141 +#: ../libnm-util/nm-utils.c:2153 #, c-format msgid "Could not allocate memory for PEM file data." msgstr "No se pudo reservar memoria para el archivo de datos PEM." @@ -1848,7 +1800,6 @@ msgid "Enable or disable WiFi devices" msgstr "Activar o desactivar los dispositivos inalámbricos" #: ../policy/org.freedesktop.NetworkManager.policy.in.h:5 -#| msgid "Enable or disable mobile broadband devices" msgid "Enable or disable WiMAX mobile broadband devices" msgstr "Activar o desactivar los dispositivos de banda ancha móvil WiMAX" @@ -1861,7 +1812,6 @@ msgid "Enable or disable system networking" msgstr "Activar o desactivar la red del sistema" #: ../policy/org.freedesktop.NetworkManager.policy.in.h:8 -#| msgid "Modify system connections" msgid "Modify network connections for all users" msgstr "Modificar las conexiones de red para todos los usuarios" @@ -1870,7 +1820,6 @@ msgid "Modify persistent system hostname" msgstr "Modificar nombre de host de sistema persistente" #: ../policy/org.freedesktop.NetworkManager.policy.in.h:10 -#| msgid "Allow control of network connections" msgid "Modify personal network connections" msgstr "Modificar las conexiones de red personales" @@ -1893,8 +1842,6 @@ msgstr "" "inalámbricos" #: ../policy/org.freedesktop.NetworkManager.policy.in.h:14 -#| msgid "" -#| "System policy prevents enabling or disabling mobile broadband devices" msgid "" "System policy prevents enabling or disabling WiMAX mobile broadband devices" msgstr "" @@ -1912,14 +1859,12 @@ msgid "System policy prevents enabling or disabling system networking" msgstr "La política del sistema evita activar o desactivar la red del sistema" #: ../policy/org.freedesktop.NetworkManager.policy.in.h:17 -#| msgid "System policy prevents modification of system settings" msgid "System policy prevents modification of network settings for all users" msgstr "" "La política del sistema evita la modificación de la configuración de la red " "para todos los usuarios" #: ../policy/org.freedesktop.NetworkManager.policy.in.h:18 -#| msgid "System policy prevents modification of system settings" msgid "System policy prevents modification of personal network settings" msgstr "" "La política del sistema evita la modificación de la configuración personal " @@ -1948,13 +1893,13 @@ msgstr "" "La política del sistema evita compartir conexiones a través de una red WiFi " "abierta" -#: ../src/main.c:519 +#: ../src/main.c:530 #, c-format msgid "Invalid option. Please use --help to see a list of valid options.\n" msgstr "" "Opción no válida. Use --help para ver una lista de las opciones válidas.\n" -#: ../src/main.c:590 +#: ../src/main.c:611 #, c-format msgid "%s. Please use --help to see a list of valid options.\n" msgstr "%s. Usar --help para ver la lista de opciones válidas.\n" @@ -1989,70 +1934,63 @@ msgstr "se pudo encontrar «dhcpcd»." msgid "unsupported DHCP client '%s'" msgstr "«%s» cliente DHCP sin soporte " -#: ../src/dns-manager/nm-dns-manager.c:367 +#: ../src/dns-manager/nm-dns-manager.c:369 msgid "NOTE: the libc resolver may not support more than 3 nameservers." msgstr "" "NOTA: el resolutor de nombres de libc puede que no soporte más de 3 " "servidores de nombres." -#: ../src/dns-manager/nm-dns-manager.c:369 +#: ../src/dns-manager/nm-dns-manager.c:371 msgid "The nameservers listed below may not be recognized." msgstr "Puede que los servidores de nombres listados abajo no se reconozcan." -#: ../src/logging/nm-logging.c:148 +#: ../src/logging/nm-logging.c:149 #, c-format msgid "Unknown log level '%s'" msgstr "Nivel de registro desconocido «%s»" -#: ../src/logging/nm-logging.c:173 +#: ../src/logging/nm-logging.c:174 #, c-format msgid "Unknown log domain '%s'" msgstr "Dominio de registro desconocido «%s»" -#: ../src/modem-manager/nm-modem-cdma.c:294 ../src/nm-device-bt.c:353 +#: ../src/modem-manager/nm-modem-cdma.c:296 ../src/nm-device-bt.c:355 #, c-format -#| msgid "connection failed" msgid "CDMA connection %d" msgstr "Conexión CDMA %d" -#: ../src/modem-manager/nm-modem-gsm.c:497 ../src/nm-device-bt.c:349 +#: ../src/modem-manager/nm-modem-gsm.c:499 ../src/nm-device-bt.c:351 #, c-format -#| msgid "connection failed" msgid "GSM connection %d" msgstr "Conexión GSM %d" -#: ../src/nm-device-bt.c:324 +#: ../src/nm-device-bt.c:326 #, c-format -#| msgid "VPN connection failed" msgid "PAN connection %d" msgstr "Conexión PAN %d" -#: ../src/nm-device-bt.c:357 +#: ../src/nm-device-bt.c:359 #, c-format -#| msgid "VPN connection failed" msgid "DUN connection %d" msgstr "Conexión DUN %d" -#: ../src/nm-device-ethernet.c:1684 +#: ../src/nm-device-ethernet.c:1681 #, c-format -#| msgid "VPN connection failed" msgid "PPPoE connection %d" msgstr "Conexión PPPoE %d" -#: ../src/nm-device-ethernet.c:1684 +#: ../src/nm-device-ethernet.c:1681 ../src/settings/nm-settings-utils.c:50 #, c-format -#| msgid "Active connections" msgid "Wired connection %d" msgstr "Conexión cableada %d" -#: ../src/nm-device-olpc-mesh.c:422 +#: ../src/nm-device-olpc-mesh.c:423 #, c-format msgid "Mesh %d" msgstr "Malla %d" -#: ../src/nm-manager.c:679 +#: ../src/nm-manager.c:673 #, c-format -#| msgid "VPN connection failed" msgid "VPN connection %d" msgstr "Conexión VPN %d" @@ -2101,15 +2039,16 @@ msgstr "no pudo unirse al grupo netlink: %s" msgid "error updating link cache: %s" msgstr "error al actualizar el enlace caché: %s" -#: ../src/settings/plugins/ifcfg-rh/reader.c:3402 -#: ../src/settings/plugins/ifnet/connection_parser.c:49 +#: ../src/settings/plugins/ifcfg-rh/reader.c:3512 +#: ../src/settings/plugins/ifnet/connection_parser.c:51 msgid "System" msgstr "Sistema" -#: ../src/settings/nm-default-wired-connection.c:143 -#, c-format -msgid "Auto %s" -msgstr "Auto %s" +#~ msgid "Error: Obtaining active connection for '%s' failed." +#~ msgstr "Error: falló la obtención de conexión activa para «%s»." + +#~ msgid "Auto %s" +#~ msgstr "Auto %s" #~ msgid "SCOPE" #~ msgstr "ALCANCE" @@ -2132,9 +2071,6 @@ msgstr "Auto %s" #~ msgid "Error: Could not get user settings." #~ msgstr "Error: No se pudo obtener configuración de usuario." -#~ msgid "Not enough memory to store file data." -#~ msgstr "No hay memoria suficiente para almacenar el archivo." - #~ msgid "Allow use of user-specific connections" #~ msgstr "Permitir el uso de conexiones específicas de usuario" diff --git a/po/id.po b/po/id.po index e8adc151..278b0e82 100644 --- a/po/id.po +++ b/po/id.po @@ -1,15 +1,14 @@ # Indonesian translation for network-manager # Copyright (C) 2010 THE network-manager'S COPYRIGHT HOLDER # This file is distributed under the same license as the network-manager package. -# Andika Triwidada , 2010. +# Andika Triwidada , 2010, 2011. # msgid "" msgstr "" "Project-Id-Version: network-manager master\n" -"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" -"product=NetworkManager&component=general\n" -"POT-Creation-Date: 2010-08-10 03:25+0000\n" -"PO-Revision-Date: 2010-08-10 16:04+0700\n" +"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=NetworkManager&keywords=I18N+L10N&component=general\n" +"POT-Creation-Date: 2011-05-18 03:24+0000\n" +"PO-Revision-Date: 2011-08-14 21:21+0700\n" "Last-Translator: Andika Triwidada \n" "Language-Team: GNOME Indonesian Translation Team \n" "MIME-Version: 1.0\n" @@ -19,961 +18,1352 @@ msgstr "" "X-Poedit-Language: Indonesian\n" "X-Poedit-Country: Indonesia\n" -#: ../cli/src/connections.c:60 ../cli/src/connections.c:75 -#: ../cli/src/devices.c:88 ../cli/src/devices.c:101 ../cli/src/devices.c:111 -#: ../cli/src/devices.c:121 ../cli/src/devices.c:134 ../cli/src/devices.c:145 -#: ../cli/src/devices.c:156 ../cli/src/devices.c:165 ../cli/src/devices.c:174 +#: ../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 "NAME" #. 0 -#: ../cli/src/connections.c:61 ../cli/src/connections.c:76 +#: ../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 "DEVICES" #. 2 -#: ../cli/src/connections.c:63 ../cli/src/connections.c:78 -msgid "SCOPE" -msgstr "SCOPE" - -#. 3 -#: ../cli/src/connections.c:64 +#: ../cli/src/connections.c:67 msgid "DEFAULT" msgstr "DEFAULT" -#. 4 -#: ../cli/src/connections.c:65 -msgid "DBUS-SERVICE" -msgstr "DBUS-SERVICE" - -#. 5 -#: ../cli/src/connections.c:66 +#. 3 +#: ../cli/src/connections.c:68 msgid "SPEC-OBJECT" msgstr "SPEC-OBJECT" -#. 6 -#: ../cli/src/connections.c:67 +#. 4 +#: ../cli/src/connections.c:69 msgid "VPN" msgstr "VPN" +#. 5 +#. 6 +#. 2 +#. 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-PATH" + #. 1 #. 0 #. 1 -#: ../cli/src/connections.c:77 ../cli/src/devices.c:62 ../cli/src/devices.c:90 +#. 2 +#: ../cli/src/connections.c:80 +#: ../cli/src/devices.c:67 +#: ../cli/src/devices.c:103 +#: ../cli/src/devices.c:227 msgid "TYPE" msgstr "TYPE" -#. 3 -#: ../cli/src/connections.c:79 +#. 2 +#: ../cli/src/connections.c:81 msgid "TIMESTAMP" msgstr "TIMESTAMP" -#. 4 -#: ../cli/src/connections.c:80 +#. 3 +#: ../cli/src/connections.c:82 msgid "TIMESTAMP-REAL" msgstr "TIMESTAMP-REAL" -#. 5 -#: ../cli/src/connections.c:81 +#. 4 +#: ../cli/src/connections.c:83 msgid "AUTOCONNECT" msgstr "AUTOCONNECT" -#. 6 -#: ../cli/src/connections.c:82 +#. 5 +#: ../cli/src/connections.c:84 msgid "READONLY" msgstr "READONLY" -#: ../cli/src/connections.c:158 -#, c-format +#: ../cli/src/connections.c:167 +#, c-format +#| msgid "" +#| "Usage: nmcli con { COMMAND | help }\n" +#| " COMMAND := { list | status | up | down }\n" +#| "\n" +#| " list [id | uuid | system | user]\n" +#| " status\n" +#| " up id | uuid [iface ] [ap ] [--nowait] [--" +#| "timeout ]\n" +#| " down id | uuid \n" msgid "" "Usage: nmcli con { COMMAND | help }\n" " COMMAND := { list | status | up | down }\n" "\n" -" list [id | uuid | system | user]\n" +" list [id | uuid ]\n" " status\n" -" up id | uuid [iface ] [ap ] [--nowait] [--timeout " -"]\n" +" up id | uuid [iface ] [ap ] [nsp ] [--nowait] [--timeout ]\n" +" up id | uuid [iface ] [ap ] [--nowait] [--timeout ]\n" " down id | uuid \n" msgstr "" "Cara pakai: nmcli con { PERINTAH | help }\n" " PERINTAH := { list | status | up | down }\n" "\n" -" list [id | uuid | system | user]\n" +" list [id | uuid \n" " status\n" -" up id | uuid [iface ] [ap ] [--nowait] [--timeout " -"]\n" +" up id | uuid [iface ] [ap ] [nsp ][--nowait] [--timeout ]\n" +" up id | uuid [iface ] [ap ] [--nowait] [--timeout ]\n" " down id | uuid \n" -#: ../cli/src/connections.c:198 ../cli/src/connections.c:537 +#: ../cli/src/connections.c:220 +#: ../cli/src/connections.c:542 #, c-format msgid "Error: 'con list': %s" msgstr "Galat: 'con list': %s" -#: ../cli/src/connections.c:200 ../cli/src/connections.c:539 +#: ../cli/src/connections.c:222 +#: ../cli/src/connections.c:544 #, c-format msgid "Error: 'con list': %s; allowed fields: %s" msgstr "Galat: 'con list': %s; ruas yang diijinkan: %s" -#: ../cli/src/connections.c:208 +#: ../cli/src/connections.c:230 msgid "Connection details" msgstr "Rincian koneksi" -#: ../cli/src/connections.c:382 ../cli/src/connections.c:602 -msgid "system" -msgstr "system" - -#: ../cli/src/connections.c:382 ../cli/src/connections.c:602 -msgid "user" -msgstr "user" - -#: ../cli/src/connections.c:384 +#: ../cli/src/connections.c:417 msgid "never" msgstr "never" #. "CAPABILITIES" #. Print header #. "WIFI-PROPERTIES" -#: ../cli/src/connections.c:385 ../cli/src/connections.c:386 -#: ../cli/src/connections.c:603 ../cli/src/connections.c:606 -#: ../cli/src/devices.c:432 ../cli/src/devices.c:557 ../cli/src/devices.c:583 -#: ../cli/src/devices.c:584 ../cli/src/devices.c:585 ../cli/src/devices.c:586 -#: ../cli/src/devices.c:587 ../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 "ya" -#: ../cli/src/connections.c:385 ../cli/src/connections.c:386 -#: ../cli/src/connections.c:603 ../cli/src/connections.c:606 -#: ../cli/src/devices.c:432 ../cli/src/devices.c:557 ../cli/src/devices.c:583 -#: ../cli/src/devices.c:584 ../cli/src/devices.c:585 ../cli/src/devices.c:586 -#: ../cli/src/devices.c:587 ../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 "tidak" -#: ../cli/src/connections.c:458 ../cli/src/connections.c:501 -msgid "System connections" -msgstr "Koneksi sistem" - -#: ../cli/src/connections.c:463 ../cli/src/connections.c:514 -msgid "User connections" -msgstr "Koneksi pengguna" +#: ../cli/src/connections.c:493 +#| msgid "Connection details" +msgid "Connection list" +msgstr "Daftar koneksi" -#: ../cli/src/connections.c:475 ../cli/src/connections.c:1335 -#: ../cli/src/connections.c:1351 ../cli/src/connections.c:1360 -#: ../cli/src/connections.c:1371 ../cli/src/connections.c:1456 -#: ../cli/src/devices.c:962 ../cli/src/devices.c:972 ../cli/src/devices.c:1074 -#: ../cli/src/devices.c:1081 +#: ../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 "Galat: argumen %s hilang." -#: ../cli/src/connections.c:488 +#: ../cli/src/connections.c:519 #, c-format msgid "Error: %s - no such connection." msgstr "Galat: %s - koneksi tak ada." -#: ../cli/src/connections.c:520 ../cli/src/connections.c:1384 -#: ../cli/src/connections.c:1474 ../cli/src/devices.c:785 -#: ../cli/src/devices.c:852 ../cli/src/devices.c:986 ../cli/src/devices.c:1087 +#: ../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 "Parameter tak dikenal: %s\n" -#: ../cli/src/connections.c:529 +#: ../cli/src/connections.c:534 #, c-format msgid "Error: no valid parameter specified." msgstr "Galat: tak ada parameter valid yang dinyatakan." -#: ../cli/src/connections.c:544 ../cli/src/connections.c:1577 -#: ../cli/src/devices.c:1293 ../cli/src/network-manager.c:274 +#: ../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 "Galat: %s." -#: ../cli/src/connections.c:650 +#: ../cli/src/connections.c:637 #, c-format msgid "Error: 'con status': %s" msgstr "Galat: 'con status': %s" -#: ../cli/src/connections.c:652 +#: ../cli/src/connections.c:639 #, c-format msgid "Error: 'con status': %s; allowed fields: %s" msgstr "Galat: 'con status': %s; ruas yang diijinkan: %s" +#: ../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: Could not connect to NetworkManager." +msgid "Error: Can't find out if NetworkManager is running: %s." +msgstr "Galat: Tak bisa menentukan apakah NetworkManager sedang berjalan: %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 "NetworkManager status" +msgid "Error: NetworkManager is not running." +msgstr "Galat: NetworkManager tidak sedang berjalan." + #: ../cli/src/connections.c:659 msgid "Active connections" msgstr "Koneksi aktif" -#: ../cli/src/connections.c:1027 +#: ../cli/src/connections.c:1095 #, c-format msgid "no active connection on device '%s'" msgstr "tak ada koneksi aktif pada perangkat '%s'" -#: ../cli/src/connections.c:1035 +#: ../cli/src/connections.c:1103 #, c-format msgid "no active connection or device" msgstr "tak ada koneksi atau perangkat aktif " -#: ../cli/src/connections.c:1085 +#: ../cli/src/connections.c:1174 #, c-format msgid "device '%s' not compatible with connection '%s'" msgstr "perangkat '%s' tak kompatibel dengan koneksi '%s'" -#: ../cli/src/connections.c:1087 +#: ../cli/src/connections.c:1176 #, c-format msgid "no device found for connection '%s'" msgstr "tak ditemukan perangkat bagi koneksi '%s'" -#: ../cli/src/connections.c:1098 +#: ../cli/src/connections.c:1187 msgid "activating" msgstr "mengaktifkan" -#: ../cli/src/connections.c:1100 +#: ../cli/src/connections.c:1189 msgid "activated" msgstr "diaktifkan" -#: ../cli/src/connections.c:1103 ../cli/src/connections.c:1126 -#: ../cli/src/connections.c:1159 ../cli/src/devices.c:246 -#: ../cli/src/devices.c:558 ../cli/src/network-manager.c:92 -#: ../cli/src/network-manager.c:145 ../cli/src/settings.c:473 +#: ../cli/src/connections.c:1191 +#: ../cli/src/devices.c:304 +#| msgid "activating" +msgid "deactivating" +msgstr "menonaktifkan" + +#: ../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 "tak diketahui" -#: ../cli/src/connections.c:1112 +#: ../cli/src/connections.c:1203 msgid "VPN connecting (prepare)" msgstr "VPN sedang menyiapkan" -#: ../cli/src/connections.c:1114 +#: ../cli/src/connections.c:1205 msgid "VPN connecting (need authentication)" msgstr "VPN sedang menyambung (perlu otentikasi)" -#: ../cli/src/connections.c:1116 +#: ../cli/src/connections.c:1207 msgid "VPN connecting" msgstr "VPN sedang menyambung" -#: ../cli/src/connections.c:1118 +#: ../cli/src/connections.c:1209 msgid "VPN connecting (getting IP configuration)" msgstr "VPN sedang menyambung (sedang mengambil konfigurasi IP)" -#: ../cli/src/connections.c:1120 +#: ../cli/src/connections.c:1211 msgid "VPN connected" msgstr "VPN terhubung" -#: ../cli/src/connections.c:1122 +#: ../cli/src/connections.c:1213 msgid "VPN connection failed" msgstr "Sambungan VPN gagal" -#: ../cli/src/connections.c:1124 +#: ../cli/src/connections.c:1215 msgid "VPN disconnected" msgstr "VPN diputus" -#: ../cli/src/connections.c:1135 +#: ../cli/src/connections.c:1226 msgid "unknown reason" msgstr "alasan tidak diketahui" -#: ../cli/src/connections.c:1137 +#: ../cli/src/connections.c:1228 msgid "none" msgstr "tidak ada" -#: ../cli/src/connections.c:1139 +#: ../cli/src/connections.c:1230 msgid "the user was disconnected" msgstr "pengguna diputus" -#: ../cli/src/connections.c:1141 +#: ../cli/src/connections.c:1232 msgid "the base network connection was interrupted" msgstr "koneksi jaringan dasar terputus" -#: ../cli/src/connections.c:1143 +#: ../cli/src/connections.c:1234 msgid "the VPN service stopped unexpectedly" msgstr "layanan VPN berhenti secara tak terduga" -#: ../cli/src/connections.c:1145 +#: ../cli/src/connections.c:1236 msgid "the VPN service returned invalid configuration" msgstr "layanan VPN mengembalikan konfigurasi yang tak valid" -#: ../cli/src/connections.c:1147 +#: ../cli/src/connections.c:1238 msgid "the connection attempt timed out" msgstr "usaha koneksi kehabisan waktu" -#: ../cli/src/connections.c:1149 +#: ../cli/src/connections.c:1240 msgid "the VPN service did not start in time" msgstr "layanan VPN tak mulai pada waktunya" -#: ../cli/src/connections.c:1151 +#: ../cli/src/connections.c:1242 msgid "the VPN service failed to start" msgstr "layanan VPN gagal dimulai" -#: ../cli/src/connections.c:1153 +#: ../cli/src/connections.c:1244 msgid "no valid VPN secrets" msgstr "tak ada rahasia VPN yang valid" -#: ../cli/src/connections.c:1155 +#: ../cli/src/connections.c:1246 msgid "invalid VPN secrets" msgstr "rahasia VPN tak valid" -#: ../cli/src/connections.c:1157 +#: ../cli/src/connections.c:1248 msgid "the connection was removed" msgstr "koneksi dihapus" -#: ../cli/src/connections.c:1171 +#: ../cli/src/connections.c:1262 #, c-format msgid "state: %s\n" msgstr "keadaan: %s\n" -#: ../cli/src/connections.c:1174 ../cli/src/connections.c:1200 +#: ../cli/src/connections.c:1265 +#: ../cli/src/connections.c:1291 #, c-format msgid "Connection activated\n" msgstr "Koneksi diaktifkan\n" -#: ../cli/src/connections.c:1177 +#: ../cli/src/connections.c:1268 #, c-format msgid "Error: Connection activation failed." msgstr "Galat: Aktivasi koneksi gagal." -#: ../cli/src/connections.c:1196 +#: ../cli/src/connections.c:1287 #, c-format msgid "state: %s (%d)\n" msgstr "keadaan: %s (%d)\n" -#: ../cli/src/connections.c:1206 +#: ../cli/src/connections.c:1297 #, c-format msgid "Error: Connection activation failed: %s." msgstr "Galat: Aktivasi koneksi gagal: %s." -#: ../cli/src/connections.c:1223 ../cli/src/devices.c:909 +#: ../cli/src/connections.c:1314 +#: ../cli/src/devices.c:1136 #, c-format msgid "Error: Timeout %d sec expired." msgstr "Galat: Timeout %d detik telah berlalu." -#: ../cli/src/connections.c:1266 +#: ../cli/src/connections.c:1327 #, c-format msgid "Error: Connection activation failed: %s" msgstr "Galat: Aktivasi koneksi gagal: %s" -#: ../cli/src/connections.c:1280 -#, c-format -msgid "Error: Obtaining active connection for '%s' failed." -msgstr "Galat: Memperoleh koneksi aktif bagi '%s' gagal." - -#: ../cli/src/connections.c:1289 +#: ../cli/src/connections.c:1333 #, c-format msgid "Active connection state: %s\n" msgstr "Keadaan koneksi aktif: %s\n" -#: ../cli/src/connections.c:1290 +#: ../cli/src/connections.c:1334 #, c-format msgid "Active connection path: %s\n" msgstr "Path koneksi aktif: %s\n" -#: ../cli/src/connections.c:1344 ../cli/src/connections.c:1465 +#: ../cli/src/connections.c:1386 +#: ../cli/src/connections.c:1527 #, c-format msgid "Error: Unknown connection: %s." msgstr "Galat: Koneksi tak dikenal: %s." -#: ../cli/src/connections.c:1379 ../cli/src/devices.c:980 +#: ../cli/src/connections.c:1432 +#: ../cli/src/devices.c:1208 #, c-format msgid "Error: timeout value '%s' is not valid." msgstr "Galat: nilai timeout '%s' tak valid." -#: ../cli/src/connections.c:1392 ../cli/src/connections.c:1482 +#: ../cli/src/connections.c:1445 +#: ../cli/src/connections.c:1544 #, c-format msgid "Error: id or uuid has to be specified." msgstr "Galat: id atau uuid mesti dinyatakan." -#: ../cli/src/connections.c:1412 +#: ../cli/src/connections.c:1473 #, c-format msgid "Error: No suitable device found: %s." msgstr "Galat: tak ditemukan perangkat yang cocok: %s." -#: ../cli/src/connections.c:1414 +#: ../cli/src/connections.c:1475 #, c-format msgid "Error: No suitable device found." msgstr "Galat: tak ditemukan perangkat yang cocok." -#: ../cli/src/connections.c:1509 +#: ../cli/src/connections.c:1580 #, c-format msgid "Warning: Connection not active\n" msgstr "Peringatan: Sambungan tak aktif\n" -#: ../cli/src/connections.c:1566 +#: ../cli/src/connections.c:1618 #, c-format msgid "Error: 'con' command '%s' is not valid." msgstr "Galat: 'con' perintah '%s' tak valid." -#: ../cli/src/connections.c:1602 +#: ../cli/src/connections.c:1683 #, c-format msgid "Error: could not connect to D-Bus." msgstr "Galat: tak bisa menyambung ke D-Bus." -#: ../cli/src/connections.c:1609 +#: ../cli/src/connections.c:1690 #, c-format msgid "Error: Could not get system settings." msgstr "Galat: Tak bisa memperoleh tatanan sistem." -#: ../cli/src/connections.c:1617 -#, c-format -msgid "Error: Could not get user settings." -msgstr "Galat: Tak bisa memperoleh tatanan pengguna." - -#: ../cli/src/connections.c:1627 +#: ../cli/src/connections.c:1700 #, c-format -msgid "Error: Can't obtain connections: settings services are not running." +#| msgid "Error: Can't obtain connections: settings services are not running." +msgid "Error: Can't obtain connections: settings service is not running." msgstr "Galat: Tak bisa mendapat koneksi: layanan penataan tak berjalan." #. 0 #. 9 -#: ../cli/src/devices.c:61 ../cli/src/devices.c:89 ../cli/src/devices.c:184 +#. 3 +#: ../cli/src/devices.c:66 +#: ../cli/src/devices.c:102 +#: ../cli/src/devices.c:212 +#: ../cli/src/devices.c:228 msgid "DEVICE" msgstr "DEVICE" #. 1 #. 4 -#. 0 -#: ../cli/src/devices.c:63 ../cli/src/devices.c:93 -#: ../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 "STATE" -#: ../cli/src/devices.c:72 +#: ../cli/src/devices.c:78 msgid "GENERAL" msgstr "GENERAL" #. 0 -#: ../cli/src/devices.c:73 +#: ../cli/src/devices.c:79 msgid "CAPABILITIES" msgstr "CAPABILITIES" #. 1 -#: ../cli/src/devices.c:74 +#: ../cli/src/devices.c:80 msgid "WIFI-PROPERTIES" msgstr "WIFI-PROPERTIES" #. 2 -#: ../cli/src/devices.c:75 +#: ../cli/src/devices.c:81 msgid "AP" msgstr "AP" #. 3 -#: ../cli/src/devices.c:76 +#: ../cli/src/devices.c:82 msgid "WIRED-PROPERTIES" msgstr "WIRED-PROPERTIES" #. 4 -#: ../cli/src/devices.c:77 +#: ../cli/src/devices.c:83 +#| msgid "WIFI-PROPERTIES" +msgid "WIMAX-PROPERTIES" +msgstr "WIMAX-PROPERTIES" + +#. 5 +#. 0 +#: ../cli/src/devices.c:84 +#: ../cli/src/devices.c:225 +#| msgid "DNS" +msgid "NSP" +msgstr "NSP" + +#. 6 +#: ../cli/src/devices.c:85 msgid "IP4-SETTINGS" msgstr "IP4-SETTINGS" -#. 5 -#: ../cli/src/devices.c:78 +#. 7 +#: ../cli/src/devices.c:86 msgid "IP4-DNS" msgstr "IP4-DNS" -#. 6 -#: ../cli/src/devices.c:79 +#. 8 +#: ../cli/src/devices.c:87 msgid "IP6-SETTINGS" msgstr "IP6-SETTINGS" -#. 7 -#: ../cli/src/devices.c:80 +#. 9 +#: ../cli/src/devices.c:88 msgid "IP6-DNS" msgstr "IP6-DNS" #. 2 -#: ../cli/src/devices.c:91 +#: ../cli/src/devices.c:104 msgid "DRIVER" msgstr "DRIVER" #. 3 -#: ../cli/src/devices.c:92 +#: ../cli/src/devices.c:105 msgid "HWADDR" msgstr "HWADDR" #. 0 -#: ../cli/src/devices.c:102 +#: ../cli/src/devices.c:115 msgid "CARRIER-DETECT" msgstr "CARRIER-DETECT" #. 1 -#: ../cli/src/devices.c:103 +#: ../cli/src/devices.c:116 msgid "SPEED" msgstr "SPEED" #. 0 -#: ../cli/src/devices.c:112 +#: ../cli/src/devices.c:125 msgid "CARRIER" msgstr "CARRIER" #. 0 -#: ../cli/src/devices.c:122 +#: ../cli/src/devices.c:135 msgid "WEP" msgstr "WEP" #. 1 -#: ../cli/src/devices.c:123 +#: ../cli/src/devices.c:136 msgid "WPA" msgstr " WPA" #. 2 -#: ../cli/src/devices.c:124 +#: ../cli/src/devices.c:137 msgid "WPA2" msgstr " WPA2" #. 3 -#: ../cli/src/devices.c:125 +#: ../cli/src/devices.c:138 msgid "TKIP" msgstr "TKIP" #. 4 -#: ../cli/src/devices.c:126 +#: ../cli/src/devices.c:139 msgid "CCMP" msgstr "CCMP" #. 0 -#: ../cli/src/devices.c:135 ../cli/src/devices.c:146 +#: ../cli/src/devices.c:149 +#| msgid "FREQ" +msgid "CTR-FREQ" +msgstr "CTR-FREQ" + +#. 1 +#: ../cli/src/devices.c:150 +#| msgid "SSID" +msgid "RSSI" +msgstr "RSSI" + +#. 2 +#: ../cli/src/devices.c:151 +msgid "CINR" +msgstr "CINR" + +#. 3 +#: ../cli/src/devices.c:152 +msgid "TX-POW" +msgstr "TX-POW" + +#. 4 +#: ../cli/src/devices.c:153 +#| msgid "BSSID" +msgid "BSID" +msgstr "BSID" + +#. 0 +#: ../cli/src/devices.c:163 +#: ../cli/src/devices.c:174 msgid "ADDRESS" msgstr "ADDRESS" #. 1 -#: ../cli/src/devices.c:136 ../cli/src/devices.c:147 +#: ../cli/src/devices.c:164 +#: ../cli/src/devices.c:175 msgid "PREFIX" msgstr "PREFIX" #. 2 -#: ../cli/src/devices.c:137 ../cli/src/devices.c:148 +#: ../cli/src/devices.c:165 +#: ../cli/src/devices.c:176 msgid "GATEWAY" msgstr "GATEWAY" #. 0 -#: ../cli/src/devices.c:157 ../cli/src/devices.c:166 +#: ../cli/src/devices.c:185 +#: ../cli/src/devices.c:194 msgid "DNS" msgstr "DNS" #. 0 -#: ../cli/src/devices.c:175 +#: ../cli/src/devices.c:203 msgid "SSID" msgstr "SSID" #. 1 -#: ../cli/src/devices.c:176 +#: ../cli/src/devices.c:204 msgid "BSSID" msgstr "BSSID" #. 2 -#: ../cli/src/devices.c:177 +#: ../cli/src/devices.c:205 msgid "MODE" msgstr "MODE" #. 3 -#: ../cli/src/devices.c:178 +#: ../cli/src/devices.c:206 msgid "FREQ" msgstr "FREQ" #. 4 -#: ../cli/src/devices.c:179 +#: ../cli/src/devices.c:207 msgid "RATE" msgstr "RATE" #. 5 -#: ../cli/src/devices.c:180 +#. 1 +#: ../cli/src/devices.c:208 +#: ../cli/src/devices.c:226 msgid "SIGNAL" msgstr "SIGNAL" #. 6 -#: ../cli/src/devices.c:181 +#: ../cli/src/devices.c:209 msgid "SECURITY" msgstr "SECURITY" #. 7 -#: ../cli/src/devices.c:182 +#: ../cli/src/devices.c:210 msgid "WPA-FLAGS" msgstr "WPA-FLAGS" #. 8 -#: ../cli/src/devices.c:183 +#: ../cli/src/devices.c:211 msgid "RSN-FLAGS" msgstr "RSN-FLAGS" #. 10 -#: ../cli/src/devices.c:185 +#. 4 +#: ../cli/src/devices.c:213 +#: ../cli/src/devices.c:229 msgid "ACTIVE" msgstr "ACTIVE" -#: ../cli/src/devices.c:208 -#, c-format +#: ../cli/src/devices.c:256 +#, c-format +#| msgid "" +#| "Usage: nmcli dev { COMMAND | help }\n" +#| "\n" +#| " COMMAND := { status | list | disconnect | wifi }\n" +#| "\n" +#| " status\n" +#| " list [iface ]\n" +#| " disconnect iface [--nowait] [--timeout ]\n" +#| " wifi [list [iface ] [hwaddr ]]\n" +#| "\n" 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 ]\n" " disconnect iface [--nowait] [--timeout ]\n" " wifi [list [iface ] [hwaddr ]]\n" +" wimax [list [iface ] [nsp ]]\n" "\n" msgstr "" "Cara pakai: nmcli dev { PERINTAH | help }\n" "\n" +" PERINTAH := { status | list | disconnect | wifi | wimax }\n" +"\n" " PERINTAH := { status | list | disconnect | wifi }\n" "\n" " status\n" " list [iface ]\n" " disconnect iface [--nowait] [--timeout ]\n" " wifi [list [iface ] [hwaddr ]]\n" +" wimax [list [iface ] [nsp ]]\n" "\n" -#: ../cli/src/devices.c:228 +#: ../cli/src/devices.c:284 msgid "unmanaged" msgstr "tak dikelola" -#: ../cli/src/devices.c:230 +#: ../cli/src/devices.c:286 msgid "unavailable" msgstr "tak tersedia" -#: ../cli/src/devices.c:232 ../cli/src/network-manager.c:89 +#: ../cli/src/devices.c:288 +#: ../cli/src/network-manager.c:115 msgid "disconnected" msgstr "terputus" -#: ../cli/src/devices.c:234 +#: ../cli/src/devices.c:290 msgid "connecting (prepare)" msgstr "sedang menyambung (bersiap)" -#: ../cli/src/devices.c:236 +#: ../cli/src/devices.c:292 msgid "connecting (configuring)" msgstr "sedang menyambung (sedang menata)" -#: ../cli/src/devices.c:238 +#: ../cli/src/devices.c:294 msgid "connecting (need authentication)" msgstr "sedang menyambung (perlu otentikasi)" -#: ../cli/src/devices.c:240 +#: ../cli/src/devices.c:296 msgid "connecting (getting IP configuration)" msgstr "sedang menyambung (sedang mengambil konfigurasi IP)" -#: ../cli/src/devices.c:242 ../cli/src/network-manager.c:87 +#: ../cli/src/devices.c:298 +#| msgid "connecting (getting IP configuration)" +msgid "connecting (checking IP connectivity)" +msgstr "sedang menyambung (memeriksa konektivitas IP)" + +#: ../cli/src/devices.c:300 +#| msgid "connecting (getting IP configuration)" +msgid "connecting (starting secondary connections)" +msgstr "sedang menyambung (memulai koneksi sekunder)" + +#: ../cli/src/devices.c:302 +#: ../cli/src/network-manager.c:111 msgid "connected" msgstr "terhubung" -#: ../cli/src/devices.c:244 +#: ../cli/src/devices.c:306 msgid "connection failed" msgstr "koneksi gagal" -#: ../cli/src/devices.c:267 ../cli/src/devices.c:424 +#: ../cli/src/devices.c:331 +#: ../cli/src/devices.c:341 +#: ../cli/src/devices.c:501 +#: ../cli/src/devices.c:545 msgid "Unknown" msgstr "Tak dikenal" -#: ../cli/src/devices.c:299 +#: ../cli/src/devices.c:374 msgid "(none)" msgstr "(tidak ada)" -#: ../cli/src/devices.c:324 +#: ../cli/src/devices.c:399 #, c-format msgid "%s: error converting IP4 address 0x%X" msgstr "%s: galat mengubah alamat IP4 0x%X" -#: ../cli/src/devices.c:393 +#: ../cli/src/devices.c:470 #, c-format msgid "%u MHz" msgstr "%u MHz" -#: ../cli/src/devices.c:394 +#: ../cli/src/devices.c:471 #, c-format msgid "%u MB/s" msgstr "%u MB/s" -#: ../cli/src/devices.c:403 +#: ../cli/src/devices.c:480 msgid "Encrypted: " msgstr "Terenkripsi:" -#: ../cli/src/devices.c:408 +#: ../cli/src/devices.c:485 msgid "WEP " msgstr "WEP " -#: ../cli/src/devices.c:410 +#: ../cli/src/devices.c:487 msgid "WPA " msgstr "WPA " -#: ../cli/src/devices.c:412 +#: ../cli/src/devices.c:489 msgid "WPA2 " msgstr "WPA2 " -#: ../cli/src/devices.c:415 +#: ../cli/src/devices.c:492 msgid "Enterprise " msgstr "Enterprise " -#: ../cli/src/devices.c:424 +#: ../cli/src/devices.c:501 msgid "Ad-Hoc" msgstr "Ad-Hoc" -#: ../cli/src/devices.c:424 +#: ../cli/src/devices.c:501 msgid "Infrastructure" msgstr "Infrastruktur" -#: ../cli/src/devices.c:486 +#: ../cli/src/devices.c:536 +msgid "Home" +msgstr "Rumah" + +#: ../cli/src/devices.c:539 +msgid "Partner" +msgstr "Pasangan" + +#: ../cli/src/devices.c:542 +msgid "Roaming" +msgstr "Roaming" + +#: ../cli/src/devices.c:612 #, c-format msgid "Error: 'dev list': %s" msgstr "Galat: 'dev list': %s" -#: ../cli/src/devices.c:488 +#: ../cli/src/devices.c:614 #, c-format msgid "Error: 'dev list': %s; allowed fields: %s" msgstr "Galat: 'dev list': %s; ruas yang diijinkan: %s" -#: ../cli/src/devices.c:497 +#: ../cli/src/devices.c:623 msgid "Device details" msgstr "Rincian perangkat" -#: ../cli/src/devices.c:527 ../cli/src/devices.c:925 +#: ../cli/src/devices.c:657 +#: ../cli/src/devices.c:1152 +#: ../cli/src/utils.c:342 msgid "(unknown)" msgstr "(tak diketahui)" -#: ../cli/src/devices.c:528 +#: ../cli/src/devices.c:658 msgid "unknown)" msgstr "tak diketahui)" -#: ../cli/src/devices.c:554 +#: ../cli/src/devices.c:684 #, c-format msgid "%u Mb/s" msgstr "%u Mb/s" #. Print header #. "WIRED-PROPERTIES" -#: ../cli/src/devices.c:627 +#: ../cli/src/devices.c:757 msgid "on" msgstr "nyala" -#: ../cli/src/devices.c:627 +#: ../cli/src/devices.c:757 msgid "off" msgstr "mati" -#: ../cli/src/devices.c:808 +#: ../cli/src/devices.c:1004 #, c-format msgid "Error: 'dev status': %s" msgstr "Galat: 'dev status': %s" -#: ../cli/src/devices.c:810 +#: ../cli/src/devices.c:1006 #, c-format msgid "Error: 'dev status': %s; allowed fields: %s" msgstr "Galat: 'dev status': %s; ruas yang diijinkan: %s" -#: ../cli/src/devices.c:817 +#: ../cli/src/devices.c:1029 msgid "Status of devices" msgstr "Status perangkat" -#: ../cli/src/devices.c:845 +#: ../cli/src/devices.c:1060 #, c-format msgid "Error: '%s' argument is missing." msgstr "Galat: argumen '%s' hilang." -#: ../cli/src/devices.c:874 ../cli/src/devices.c:1013 -#: ../cli/src/devices.c:1136 +#: ../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 "Galat: Perangkat '%s' tak ditemukan." -#: ../cli/src/devices.c:897 +#: ../cli/src/devices.c:1124 #, c-format msgid "Success: Device '%s' successfully disconnected." msgstr "Sukses: Perangkat '%s' diputus dengan sukses." -#: ../cli/src/devices.c:922 +#: ../cli/src/devices.c:1149 #, c-format msgid "Error: Device '%s' (%s) disconnecting failed: %s" msgstr "Galat: Pemutusan perangkat '%s' (%s) gagal: %s " -#: ../cli/src/devices.c:930 +#: ../cli/src/devices.c:1157 #, c-format msgid "Device state: %d (%s)\n" msgstr "Keadaan perangkat: %d (%s)\n" -#: ../cli/src/devices.c:994 +#: ../cli/src/devices.c:1222 #, c-format msgid "Error: iface has to be specified." msgstr "Galat: iface mesti dinyatakan." -#: ../cli/src/devices.c:1112 +#: ../cli/src/devices.c:1347 #, c-format msgid "Error: 'dev wifi': %s" msgstr "Galat: 'dev wifi': %s" -#: ../cli/src/devices.c:1114 +#: ../cli/src/devices.c:1349 #, c-format msgid "Error: 'dev wifi': %s; allowed fields: %s" msgstr "Galat: 'dev wifi': %s; ruas yang diijinkan: %s" -#: ../cli/src/devices.c:1121 +#: ../cli/src/devices.c:1372 msgid "WiFi scan list" msgstr "Daftar pindai WiFi" -#: ../cli/src/devices.c:1156 ../cli/src/devices.c:1210 +#: ../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 "Galat: Access point dengan hwaddr '%s' tak ditemukan." -#: ../cli/src/devices.c:1173 +#: ../cli/src/devices.c:1426 #, c-format msgid "Error: Device '%s' is not a WiFi device." msgstr "Galat: Perangkat '%s' bukan perangkat WiFi." -#: ../cli/src/devices.c:1237 +#: ../cli/src/devices.c:1490 #, c-format msgid "Error: 'dev wifi' command '%s' is not valid." msgstr "Galat: 'dev wifi' perintah '%s' tak valid." -#: ../cli/src/devices.c:1284 +#: ../cli/src/devices.c:1566 +#, c-format +#| msgid "Error: 'dev wifi': %s" +msgid "Error: 'dev wimax': %s" +msgstr "Galat: 'dev wimax': %s" + +#: ../cli/src/devices.c:1568 +#, c-format +#| msgid "Error: 'dev wifi': %s; allowed fields: %s" +msgid "Error: 'dev wimax': %s; allowed fields: %s" +msgstr "Galat: 'dev wimax': %s; ruas yang diijinkan: %s" + +#: ../cli/src/devices.c:1591 +msgid "WiMAX NSP list" +msgstr "Daftar NSP WiMAX" + +#: ../cli/src/devices.c:1628 +#, c-format +#| msgid "Error: Device '%s' not found." +msgid "Error: NSP with name '%s' not found." +msgstr "Galat: NSP bernama '%s' tak ditemukan." + +#: ../cli/src/devices.c:1639 +#, c-format +#| msgid "Error: Device '%s' is not a WiFi device." +msgid "Error: Device '%s' is not a WiMAX device." +msgstr "Galat: Perangkat '%s' bukan perangkat WiMAX." + +#: ../cli/src/devices.c:1697 +#, c-format +#| msgid "Error: 'dev wifi' command '%s' is not valid." +msgid "Error: 'dev wimax' command '%s' is not valid." +msgstr "Galat: 'dev wimax' perintah '%s' tak valid." + +#: ../cli/src/devices.c:1747 #, c-format msgid "Error: 'dev' command '%s' is not valid." msgstr "Galat: 'dev' perintah '%s' tak valid." -#: ../cli/src/network-manager.c:35 +#: ../cli/src/network-manager.c:37 msgid "RUNNING" msgstr "RUNNING" -#. 1 -#: ../cli/src/network-manager.c:37 +#. 0 +#: ../cli/src/network-manager.c:38 +msgid "VERSION" +msgstr "VERSION" + +#. 2 +#: ../cli/src/network-manager.c:40 +msgid "NET-ENABLED" +msgstr "NET-ENABLED" + +#. 3 +#: ../cli/src/network-manager.c:41 msgid "WIFI-HARDWARE" msgstr "WIFI-HARDWARE" -#. 2 -#: ../cli/src/network-manager.c:38 +#. 4 +#: ../cli/src/network-manager.c:42 msgid "WIFI" msgstr "WIFI" -#. 3 -#: ../cli/src/network-manager.c:39 +#. 5 +#: ../cli/src/network-manager.c:43 msgid "WWAN-HARDWARE" msgstr "WWAN-HARDWARE" -#. 4 -#: ../cli/src/network-manager.c:40 +#. 6 +#: ../cli/src/network-manager.c:44 msgid "WWAN" msgstr "WWAN" -#: ../cli/src/network-manager.c:62 -#, c-format +#. 7 +#: ../cli/src/network-manager.c:45 +#| msgid "WIFI-HARDWARE" +msgid "WIMAX-HARDWARE" +msgstr "WIMAX-HARDWARE" + +#. 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 | sleep | wakeup | wifi | wwan }\n" +#| "\n" +#| " status\n" +#| " sleep\n" +#| " wakeup\n" +#| " wifi [on|off]\n" +#| " wwan [on|off]\n" +#| "\n" msgid "" "Usage: nmcli nm { COMMAND | help }\n" "\n" -" COMMAND := { status | sleep | wakeup | wifi | wwan }\n" +" COMMAND := { status | enable | sleep | wifi | wwan | wimax }\n" +"\n" +" COMMAND := { status | enable | sleep | wifi | wwan }\n" "\n" " status\n" -" sleep\n" -" wakeup\n" +" enable [true|false]\n" +" sleep [true|false]\n" " wifi [on|off]\n" " wwan [on|off]\n" +" wimax [on|off]\n" "\n" msgstr "" "Cara pakai: nmcli nm { PERINTAH | help }\n" "\n" +" PERINTAH := { status | sleep | wakeup | wifi | wwan | wimax }\n" +"\n" " PERINTAH := { status | sleep | wakeup | wifi | wwan }\n" "\n" " status\n" -" sleep\n" -" wakeup\n" +" enable [true|false]\n" +" sleep [true|false]\n" " wifi [on|off]\n" " wwan [on|off]\n" +" wimax [on|off]\n" "\n" -#: ../cli/src/network-manager.c:83 +#: ../cli/src/network-manager.c:103 msgid "asleep" msgstr "mengantuk" -#: ../cli/src/network-manager.c:85 +#: ../cli/src/network-manager.c:105 msgid "connecting" msgstr "menyambung" -#: ../cli/src/network-manager.c:125 +#: ../cli/src/network-manager.c:107 +msgid "connected (local only)" +msgstr "tersambung (lokal saja)" + +#: ../cli/src/network-manager.c:109 +#| msgid "connected" +msgid "connected (site only)" +msgstr "tersambung (situs saja)" + +#: ../cli/src/network-manager.c:113 +#| msgid "connecting" +msgid "disconnecting" +msgstr "memutus" + +#: ../cli/src/network-manager.c:153 #, c-format msgid "Error: 'nm status': %s" msgstr "Galat: 'nm status': %s" -#: ../cli/src/network-manager.c:127 +#: ../cli/src/network-manager.c:155 #, c-format msgid "Error: 'nm status': %s; allowed fields: %s" msgstr "Galat: 'nm status': %s; ruas yang diijinkan: %s" -#: ../cli/src/network-manager.c:134 -msgid "NetworkManager status" -msgstr "Status NetworkManager" - -#. Print header -#: ../cli/src/network-manager.c:140 ../cli/src/network-manager.c:141 -#: ../cli/src/network-manager.c:142 ../cli/src/network-manager.c:143 -#: ../cli/src/network-manager.c:211 ../cli/src/network-manager.c:243 +#. 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 "diaktifkan" -#: ../cli/src/network-manager.c:140 ../cli/src/network-manager.c:141 -#: ../cli/src/network-manager.c:142 ../cli/src/network-manager.c:143 -#: ../cli/src/network-manager.c:211 ../cli/src/network-manager.c:243 +#: ../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 "dimatikan" -#: ../cli/src/network-manager.c:148 +#: ../cli/src/network-manager.c:188 +msgid "NetworkManager status" +msgstr "Status NetworkManager" + +#. Print header +#: ../cli/src/network-manager.c:191 msgid "running" msgstr "berjalan" -#: ../cli/src/network-manager.c:148 +#: ../cli/src/network-manager.c:191 msgid "not running" msgstr "tak berjalan" -#: ../cli/src/network-manager.c:201 ../cli/src/network-manager.c:233 +#: ../cli/src/network-manager.c:222 +#: ../cli/src/utils.c:322 +#, c-format +#| msgid "Error: could not connect to D-Bus." +msgid "Error: Couldn't connect to system bus: %s" +msgstr "Galat: Tak bisa menyambung ke bus sistem: %s" + +#: ../cli/src/network-manager.c:233 +#, c-format +#| msgid "Error: could not connect to D-Bus." +msgid "Error: Couldn't create D-Bus object proxy." +msgstr "Galat: Tak bisa membuat proksi objek D-Bus." + +#: ../cli/src/network-manager.c:239 +#, c-format +#| msgid "Error: 'con list': %s" +msgid "Error in sleep: %s" +msgstr "Galat dalam sleep: %s" + +#: ../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 "Galat: nilai '--fields' '%s' tak valid disini; ruas yang diijinkan: %s" -#: ../cli/src/network-manager.c:209 +#: ../cli/src/network-manager.c:291 +#| msgid "WiFi enabled" +msgid "Networking enabled" +msgstr "Jaringan diaktifkan" + +#: ../cli/src/network-manager.c:307 +#, c-format +#| msgid "Error: invalid 'wwan' parameter: '%s'." +msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'." +msgstr "Galat: parameter 'enable' tak valid: '%s'; gunakan 'true' atau 'false'." + +#: ../cli/src/network-manager.c:317 +#, c-format +#| msgid "Error: Could not connect to NetworkManager." +msgid "Error: Sleeping status is not exported by NetworkManager." +msgstr "Galat: Status tidur tak diekspor oleh NetworkManager." + +#: ../cli/src/network-manager.c:325 +#, c-format +#| msgid "Error: invalid 'wifi' parameter: '%s'." +msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'." +msgstr "Galat: parameter 'sleep' tak valid: '%s'; gunakan 'true' atau 'false'." + +#: ../cli/src/network-manager.c:346 msgid "WiFi enabled" msgstr "WiFi diaktifkan" -#: ../cli/src/network-manager.c:220 +#: ../cli/src/network-manager.c:362 #, c-format msgid "Error: invalid 'wifi' parameter: '%s'." msgstr "Galat: parameter 'wifi' tak valid: '%s'." -#: ../cli/src/network-manager.c:241 +#: ../cli/src/network-manager.c:384 msgid "WWAN enabled" msgstr "WWAN diaktifkan" -#: ../cli/src/network-manager.c:252 +#: ../cli/src/network-manager.c:400 #, c-format msgid "Error: invalid 'wwan' parameter: '%s'." msgstr "Galat: parameter 'wwan' tak valid: '%s'." -#: ../cli/src/network-manager.c:263 +#: ../cli/src/network-manager.c:423 +#| msgid "WiFi enabled" +msgid "WiMAX enabled" +msgstr "WiMAX diaktifkan" + +#: ../cli/src/network-manager.c:439 +#, c-format +#| msgid "Error: invalid 'wifi' parameter: '%s'." +msgid "Error: invalid 'wimax' parameter: '%s'." +msgstr "Galat: parameter 'wimax' tak valid: '%s'." + +#: ../cli/src/network-manager.c:452 #, c-format msgid "Error: 'nm' command '%s' is not valid." msgstr "Galat: 'nm' perintah '%s' tak valid." -#: ../cli/src/nmcli.c:69 -#, c-format +#: ../cli/src/nmcli.c:64 +#, c-format +#| msgid "" +#| "Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n" +#| "\n" +#| "OPTIONS\n" +#| " -t[erse] terse output\n" +#| " -p[retty] pretty output\n" +#| " -m[ode] tabular|multiline output mode\n" +#| " -f[ields] |all|common specify fields to output\n" +#| " -e[scape] yes|no escape columns separators in " +#| "values\n" +#| " -v[ersion] show program version\n" +#| " -h[elp] print this help\n" +#| "\n" +#| "OBJECT\n" +#| " nm NetworkManager status\n" +#| " con NetworkManager connections\n" +#| " dev devices managed by NetworkManager\n" +#| "\n" msgid "" "Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n" "\n" @@ -982,8 +1372,8 @@ msgid "" " -p[retty] pretty output\n" " -m[ode] tabular|multiline output mode\n" " -f[ields] |all|common specify fields to output\n" -" -e[scape] yes|no escape columns separators in " -"values\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" @@ -1001,6 +1391,7 @@ msgstr "" " -m[ode] tabular|multiline mode keluaran\n" " -f[ields] |all|common nyatakan ruas yang ditampilkan\n" " -e[scape] yes|no pemisah kolom escape di nilai\n" +" -n[ocheck] jangan periksa versi nmcli dan NetworkManager\n" " -v[ersion] tampilkan versi program\n" " -h[elp] cetak bantuan ini\n" "\n" @@ -1010,659 +1401,680 @@ msgstr "" " dev perangkat yang dikelola oleh 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 "Galat: Objek '%s' tak dikenal, coba 'nmcli help'." -#: ../cli/src/nmcli.c:143 +#: ../cli/src/nmcli.c:139 #, c-format msgid "Error: Option '--terse' is specified the second time." msgstr "Galat: Opsi '--terse' dinyatakan kedua kali." -#: ../cli/src/nmcli.c:148 +#: ../cli/src/nmcli.c:144 #, c-format msgid "Error: Option '--terse' is mutually exclusive with '--pretty'." msgstr "Galat: Opsi '--terse' eksklusif mutual dengan '--pretty'." -#: ../cli/src/nmcli.c:156 +#: ../cli/src/nmcli.c:152 #, c-format msgid "Error: Option '--pretty' is specified the second time." msgstr "Galat: Opsi '--pretty' dinyatakan kedua kali." -#: ../cli/src/nmcli.c:161 +#: ../cli/src/nmcli.c:157 #, c-format msgid "Error: Option '--pretty' is mutually exclusive with '--terse'." msgstr "Galat: Opsi '--pretty' eksklusif mutual dengan '--terse'." -#: ../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 "Galat: argumen hilang bagi opsi '%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 "Galat: '%s' bukan argumen yang valid bagi opsi '%s'." -#: ../cli/src/nmcli.c:203 +#: ../cli/src/nmcli.c:199 #, c-format msgid "Error: fields for '%s' options are missing." msgstr "Galat: ruas bagi opsi '%s' hilang." -#: ../cli/src/nmcli.c:209 +#: ../cli/src/nmcli.c:207 #, c-format msgid "nmcli tool, version %s\n" msgstr "alat nmcli, versi %s\n" -#: ../cli/src/nmcli.c:215 +#: ../cli/src/nmcli.c:213 #, c-format msgid "Error: Option '%s' is unknown, try 'nmcli -help'." msgstr "Galat: Opsi '%s' tak dikenal, coba 'nmcli -help'." -#: ../cli/src/nmcli.c:234 +#: ../cli/src/nmcli.c:232 #, c-format msgid "Caught signal %d, shutting down..." msgstr "Menangkap sinyal %d, sedang mematikan..." -#: ../cli/src/nmcli.c:259 -#, c-format -msgid "Error: Could not connect to NetworkManager." -msgstr "Galat: Tak bisa menyambung ke NetworkManager." +#: ../cli/src/nmcli.c:257 +#| msgid "Error: Could not get user settings." +msgid "Error: Could not create NMClient object." +msgstr "Galat: Tak bisa membuat objek NMClient." -#: ../cli/src/nmcli.c:275 +#: ../cli/src/nmcli.c:273 msgid "Success" msgstr "Sukses" -#: ../cli/src/settings.c:411 +#: ../cli/src/settings.c:423 #, c-format msgid "%d (hex-ascii-key)" msgstr "%d (kunci-hex-ascii)" -#: ../cli/src/settings.c:413 +#: ../cli/src/settings.c:425 #, c-format msgid "%d (104/128-bit passphrase)" msgstr "%d (104/128-bit frasa sandi)" -#: ../cli/src/settings.c:416 +#: ../cli/src/settings.c:428 #, c-format msgid "%d (unknown)" msgstr "%d (tak dikenal)" -#: ../cli/src/settings.c:442 +#: ../cli/src/settings.c:454 msgid "0 (unknown)" msgstr "0 (tak dikenal)" -#: ../cli/src/settings.c:448 +#: ../cli/src/settings.c:460 msgid "any, " msgstr "sebarang, " -#: ../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 "otomatis" -#: ../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 "tak ditata" -#: ../cli/src/utils.c:124 +#: ../cli/src/utils.c:128 #, c-format msgid "field '%s' has to be alone" msgstr "ruas '%s' mesti sendiri" -#: ../cli/src/utils.c:127 +#: ../cli/src/utils.c:131 #, c-format msgid "invalid field '%s'" msgstr "ruas tak valid '%s'" -#: ../cli/src/utils.c:146 +#: ../cli/src/utils.c:150 #, c-format msgid "Option '--terse' requires specifying '--fields'" msgstr "Opsi '--terse' memerlukan penyataan '--fields'" -#: ../cli/src/utils.c:150 +#: ../cli/src/utils.c:154 #, c-format msgid "Option '--terse' requires specific '--fields' option values , not '%s'" msgstr "Opsi '--terse' memerlukan nilai opsi '--fields' spesifik, bukan '%s'" -#: ../libnm-util/crypto.c:120 +#: ../cli/src/utils.c:333 +#, c-format +msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus" +msgstr "Galat: Tak bisa membuat proksi objek D-Bus bagi org.freedesktop.DBus" + +#: ../cli/src/utils.c:341 +#, c-format +msgid "Error: NameHasOwner request failed: %s" +msgstr "Galat: Permintaan NameHasOwner gagal: %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 "Peringatan: Versi nmcli (%s) dan NetworkManager (%s) tak cocok. Gunakan --nocheck untuk meredam peringatan.\n" + +#: ../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 "Galat: Versi nmcli (%s) dan NetworkManager (%s) tak cocok. Paksakan eksekusi memakai --nocheck, tapi hasilnya tak dapat ditebak." + +#: ../libnm-util/crypto.c:133 #, c-format msgid "PEM key file had no end tag '%s'." msgstr "Berkas kunci PEM tak memiliki tag akhir '%s'." -#: ../libnm-util/crypto.c:130 +#: ../libnm-util/crypto.c:146 #, c-format msgid "Doesn't look like a PEM private key file." msgstr "Tak seperti sebuah berkas kunci privat PEM." -#: ../libnm-util/crypto.c:138 +#: ../libnm-util/crypto.c:154 #, c-format msgid "Not enough memory to store PEM file data." msgstr "Tak cukup memori untuk menyimpan data berkas PEM." -#: ../libnm-util/crypto.c:154 +#: ../libnm-util/crypto.c:170 #, c-format msgid "Malformed PEM file: Proc-Type was not first tag." msgstr "Berkas PEM rusak: Proc-Type bukan tag pertama." -#: ../libnm-util/crypto.c:162 +#: ../libnm-util/crypto.c:178 #, c-format msgid "Malformed PEM file: unknown Proc-Type tag '%s'." msgstr "Berkas PEM rusak: tag Proc-Type tak dikenal '%s'." -#: ../libnm-util/crypto.c:172 +#: ../libnm-util/crypto.c:188 #, c-format msgid "Malformed PEM file: DEK-Info was not the second tag." msgstr "Berkas PEM rusak: DEK-Info bukan tag kedua." -#: ../libnm-util/crypto.c:183 +#: ../libnm-util/crypto.c:199 #, c-format msgid "Malformed PEM file: no IV found in DEK-Info tag." msgstr "Berkas PEM rusak: tak ditemukan IV di tag DEK-Info." -#: ../libnm-util/crypto.c:190 +#: ../libnm-util/crypto.c:206 #, c-format msgid "Malformed PEM file: invalid format of IV in DEK-Info tag." msgstr "Berkas PEM rusak: bentuk IV tak valid di tag DEK-Info." -#: ../libnm-util/crypto.c:203 +#: ../libnm-util/crypto.c:219 #, c-format msgid "Malformed PEM file: unknown private key cipher '%s'." msgstr "Berkas PEM rusak: cipher kunci privat '%s' tak dikenal." -#: ../libnm-util/crypto.c:222 +#: ../libnm-util/crypto.c:238 #, c-format msgid "Could not decode private key." msgstr "Tak bisa mengawa kode (decode) kunci privat." -#: ../libnm-util/crypto.c:267 -#, c-format -msgid "PEM certificate '%s' had no end tag '%s'." -msgstr "Sertifikat PEM '%s' tak memiliki tag akhir '%s'." +#: ../libnm-util/crypto.c:284 +msgid "Failed to find expected PKCS#8 start tag." +msgstr "Gagal menemukan tag awal PKCS#8 yang diharapkan." -#: ../libnm-util/crypto.c:277 +#: ../libnm-util/crypto.c:292 #, c-format -msgid "Failed to decode certificate." -msgstr "Gagal mengawa kode (decode) sertifikat." +msgid "Failed to find expected PKCS#8 end tag '%s'." +msgstr "Gagal menemukan tag akhir PKCS#8 '%s' yang diharapkan." + +#: ../libnm-util/crypto.c:312 +#| msgid "Not enough memory to store file data." +msgid "Not enough memory to store private key data." +msgstr "Tak cukup memori untuk menyimpan data kunci privat." + +#: ../libnm-util/crypto.c:317 +#| msgid "Failed to decrypt the private key." +msgid "Failed to decode PKCS#8 private key." +msgstr "Gagal mengawa kode (decode) kunci privat PKCS#8." -#: ../libnm-util/crypto.c:286 +#: ../libnm-util/crypto.c:339 +#: ../libnm-util/crypto.c:625 #, c-format msgid "Not enough memory to store certificate data." msgstr "Tak cukup memori untuk menyimpan data sertifikat." -#: ../libnm-util/crypto.c:294 -#, c-format -msgid "Not enough memory to store file data." -msgstr "Tak cukup memori untuk menyimpan data berkas." - -#: ../libnm-util/crypto.c:324 +#: ../libnm-util/crypto.c:365 #, c-format msgid "IV must be an even number of bytes in length." msgstr "Panjang IV dalam byte mesti merupakan bilangan genap." -#: ../libnm-util/crypto.c:333 +#: ../libnm-util/crypto.c:374 #, c-format msgid "Not enough memory to store the IV." msgstr "Tak cukup memori untuk menyimpan IV." -#: ../libnm-util/crypto.c:344 +#: ../libnm-util/crypto.c:385 #, c-format msgid "IV contains non-hexadecimal digits." msgstr "IV memuat digit bukan heksadesimal." -#: ../libnm-util/crypto.c:382 ../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:423 +#: ../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 "Cipher kunci privat '%s' tak dikenal." -#: ../libnm-util/crypto.c:391 +#: ../libnm-util/crypto.c:432 #, c-format msgid "Not enough memory to decrypt private key." msgstr "Tak cukup memori untuk mengawa sandi (decrypt) kunci privat." -#: ../libnm-util/crypto.c:511 +#: ../libnm-util/crypto.c:497 +#, c-format +msgid "Not enough memory to store decrypted private key." +msgstr "Tak cukup memori untuk menyimpan kunci privat terawa sandi (decrypted)." + +#: ../libnm-util/crypto.c:542 #, c-format msgid "Unable to determine private key type." msgstr "Tak bisa menentukan jenis kunci privat." -#: ../libnm-util/crypto.c:530 +#: ../libnm-util/crypto.c:597 #, c-format -msgid "Not enough memory to store decrypted private key." -msgstr "" -"Tak cukup memori untuk menyimpan kunci privat terawa sandi (decrypted)." +#| msgid "PEM certificate '%s' had no end tag '%s'." +msgid "PEM certificate had no start tag '%s'." +msgstr "Sertifikat PEM tak memiliki tag awal '%s'." + +#: ../libnm-util/crypto.c:606 +#, c-format +#| msgid "PEM certificate '%s' had no end tag '%s'." +msgid "PEM certificate had no end tag '%s'." +msgstr "Sertifikat PEM tak memiliki tag akhir '%s'." + +#: ../libnm-util/crypto.c:630 +#, c-format +msgid "Failed to decode certificate." +msgstr "Gagal mengawa kode (decode) sertifikat." -#: ../libnm-util/crypto_gnutls.c:49 +#: ../libnm-util/crypto_gnutls.c:50 msgid "Failed to initialize the crypto engine." msgstr "Gagal menginisialisasi mesin kripto." -#: ../libnm-util/crypto_gnutls.c:93 +#: ../libnm-util/crypto_gnutls.c:92 #, c-format msgid "Failed to initialize the MD5 engine: %s / %s." msgstr "Gagal menginisialisasi mesin MD5: %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 "Panjang IV tak valid (mesti paling tidak %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 "Tak cukup memori untuk penyangga kunci terawa sandi (decrypted)." -#: ../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 "" -"Gagal menginisialisasi konteks cipher pengawasandian (decryption): %s / %s." +msgstr "Gagal menginisialisasi konteks cipher pengawasandian (decryption): %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 "" -"Gagal menata kunci simetrik untuk pengawasandian (decryption): %s / %s." +msgstr "Gagal menata kunci simetrik untuk pengawasandian (decryption): %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 "Gagal menata IV untuk pengawasandian (decryption): %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 "Gagal mengawa sandi (decrypt) kunci privat: %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 "" -"Gagal mengawa sandi (decrypt) kunci privat: panjang padding tak diharapkan." +msgstr "Gagal mengawa sandi (decrypt) kunci privat: panjang padding tak diharapkan." -#: ../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 "Gagal mengawa sandi (decrypt) kunci privat." -#: ../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 "Tak bisa mengalokasikan memori untuk menyandi." -#: ../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 "Gagal menginisialisasi konteks cipher penyandian: %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 "Gagal menata kunci simetrik untuk penyandian: %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 "Gagal menata IV untuk penyandian: %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 "Gagal menyandi data: %s / %s." -#: ../libnm-util/crypto_gnutls.c:362 +#: ../libnm-util/crypto_gnutls.c:361 #, c-format msgid "Error initializing certificate data: %s" msgstr "Gagal menginisialisasi data sertifikat: %s" -#: ../libnm-util/crypto_gnutls.c:384 +#: ../libnm-util/crypto_gnutls.c:383 #, c-format msgid "Couldn't decode certificate: %s" msgstr "Tak bisa mengawa kode (decode) sertifikat: %s" -#: ../libnm-util/crypto_gnutls.c:408 +#: ../libnm-util/crypto_gnutls.c:407 #, c-format msgid "Couldn't initialize PKCS#12 decoder: %s" msgstr "Tak bisa menginisialisasi pengawa kode (decoder) PKCS#12: %s" -#: ../libnm-util/crypto_gnutls.c:421 +#: ../libnm-util/crypto_gnutls.c:420 #, c-format msgid "Couldn't decode PKCS#12 file: %s" msgstr "Tak bisa mengawa kode (decode) berkas PKCS#12: %s" -#: ../libnm-util/crypto_gnutls.c:433 +#: ../libnm-util/crypto_gnutls.c:432 #, c-format msgid "Couldn't verify PKCS#12 file: %s" msgstr "Tak bisa memeriksa berkas PKCS#12: %s" +#: ../libnm-util/crypto_gnutls.c:460 +#, c-format +#| msgid "Couldn't initialize PKCS#12 decoder: %s" +msgid "Couldn't initialize PKCS#8 decoder: %s" +msgstr "Tak bisa menginisialisasi pengawa kode (decoder) PKCS#8: %s" + +#: ../libnm-util/crypto_gnutls.c:483 +#, c-format +#| msgid "Couldn't decode PKCS#12 file: %s" +msgid "Couldn't decode PKCS#8 file: %s" +msgstr "Tak bisa mengawa kode (decode) berkas PKCS#8: %s" + #: ../libnm-util/crypto_nss.c:56 #, c-format msgid "Failed to initialize the crypto engine: %d." msgstr "Gagal menginisialisasi mesin kripto: %d" -#: ../libnm-util/crypto_nss.c:111 +#: ../libnm-util/crypto_nss.c:107 #, c-format msgid "Failed to initialize the MD5 context: %d." msgstr "Gagal menginisialisasi konteks MD5: %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 "Panjang IV tak valid (mesti paling tidak %d)." -#: ../libnm-util/crypto_nss.c:196 +#: ../libnm-util/crypto_nss.c:192 #, c-format msgid "Failed to initialize the decryption cipher slot." msgstr "Gagal menginisialisasi slot cipher pengawasandian (decryption)." -#: ../libnm-util/crypto_nss.c:206 +#: ../libnm-util/crypto_nss.c:202 #, c-format msgid "Failed to set symmetric key for decryption." msgstr "Gagal menata kunci simetrik untuk pengawasandian (decryption)." -#: ../libnm-util/crypto_nss.c:216 +#: ../libnm-util/crypto_nss.c:212 #, c-format msgid "Failed to set IV for decryption." msgstr "Gagal menata IV untuk pengawasandian (decryption)." -#: ../libnm-util/crypto_nss.c:224 +#: ../libnm-util/crypto_nss.c:220 #, c-format msgid "Failed to initialize the decryption context." msgstr "Gagal menginisialisasi konteks pengawasandian (decryption)." -#: ../libnm-util/crypto_nss.c:237 +#: ../libnm-util/crypto_nss.c:233 #, c-format msgid "Failed to decrypt the private key: %d." msgstr "Gagal mengawa sandi (decrypt) kunci privat: %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 "" -"Gagal mengawa sandi (decrypt) kunci privat: data terawa sandi terlalu besar." +msgstr "Gagal mengawa sandi (decrypt) kunci privat: data terawa sandi terlalu besar." -#: ../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 "Gagal memfinalisasi pengawasandian (decryption) kunci privat: %d." -#: ../libnm-util/crypto_nss.c:364 +#: ../libnm-util/crypto_nss.c:360 #, c-format msgid "Failed to initialize the encryption cipher slot." msgstr "Gagal menginisialisasi slot cipher penyandian." -#: ../libnm-util/crypto_nss.c:372 +#: ../libnm-util/crypto_nss.c:368 #, c-format msgid "Failed to set symmetric key for encryption." msgstr "Gagal menata kunci simetrik untuk penyandian." -#: ../libnm-util/crypto_nss.c:380 +#: ../libnm-util/crypto_nss.c:376 #, c-format msgid "Failed to set IV for encryption." msgstr "Gagal menata IV untuk penyandian." -#: ../libnm-util/crypto_nss.c:388 +#: ../libnm-util/crypto_nss.c:384 #, c-format msgid "Failed to initialize the encryption context." msgstr "Gagal menginisialisasi konteks penyandian." -#: ../libnm-util/crypto_nss.c:396 +#: ../libnm-util/crypto_nss.c:392 #, c-format msgid "Failed to encrypt: %d." msgstr "Gagal mengawasandi: %d." -#: ../libnm-util/crypto_nss.c:404 +#: ../libnm-util/crypto_nss.c:400 #, c-format msgid "Unexpected amount of data after encrypting." msgstr "Banyaknya data tak terduga setelah penyandian." -#: ../libnm-util/crypto_nss.c:447 +#: ../libnm-util/crypto_nss.c:443 #, c-format msgid "Couldn't decode certificate: %d" msgstr "Tak bisa mengawa kode (decode) sertifikat: %d" -#: ../libnm-util/crypto_nss.c:482 +#: ../libnm-util/crypto_nss.c:478 #, c-format msgid "Couldn't convert password to UCS2: %d" msgstr "Tak bisa mengubah kata sandi ke 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 "Tak bisa menginisialisasi pengawa kode (decoder) PKCS#12: %d" -#: ../libnm-util/crypto_nss.c:519 +#: ../libnm-util/crypto_nss.c:515 #, c-format msgid "Couldn't decode PKCS#12 file: %d" msgstr "Tak bisa mengawa kode (decode) berkas PKCS#12: %d" -#: ../libnm-util/crypto_nss.c:528 +#: ../libnm-util/crypto_nss.c:524 #, c-format msgid "Couldn't verify PKCS#12 file: %d" msgstr "Tak bisa memeriksa berkas PKCS#12: %d" -#: ../libnm-util/crypto_nss.c:557 +#: ../libnm-util/crypto_nss.c:568 msgid "Could not generate random data." msgstr "Tak bisa menjangkitkan data acak." -#: ../libnm-util/nm-utils.c:1975 +#: ../libnm-util/nm-utils.c:2000 #, c-format msgid "Not enough memory to make encryption key." msgstr "Tak cukup memori untuk membuat kunci penyandian." -#: ../libnm-util/nm-utils.c:2085 +#: ../libnm-util/nm-utils.c:2110 msgid "Could not allocate memory for PEM file creation." msgstr "Tak bisa mengalokasikan memori bagi pembuatan berkas PEM." -#: ../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 "Tak bisa mengalokasikan memori untuk menulis IV ke berkas PEM." -#: ../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 "" -"Tak bisa mengalokasikan memori untuk menulis kunci tersandi ke berkas PEM." +msgstr "Tak bisa mengalokasikan memori untuk menulis kunci tersandi ke berkas PEM." -#: ../libnm-util/nm-utils.c:2128 +#: ../libnm-util/nm-utils.c:2153 #, c-format msgid "Could not allocate memory for PEM file data." msgstr "Tak bisa mengalokasikan memori bagi data berkas PEM." -#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1 -msgid "Connection sharing via a protected WiFi network" -msgstr "Berbagi koneksi melalui jaringan WiFi terlindung." - -#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2 -msgid "Connection sharing via an open WiFi network" -msgstr "Berbagi koneksi melalui jaringan WiFi terbuka" - -#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3 -msgid "Modify persistent system hostname" -msgstr "Ubah nama host sistem yang persisten" - -#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4 -msgid "Modify system connections" -msgstr "Ubah koneksi sistem" - -#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5 -msgid "System policy prevents modification of system settings" -msgstr "Kebijakan sistem mencegah pengubahan tatanan sistem" - -#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6 -msgid "System policy prevents modification of the persistent system hostname" -msgstr "Kebijakan sistem mencegah pengubahan nama host yang persisten" - -#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7 -msgid "System policy prevents sharing connections via a protected WiFi network" -msgstr "" -"Kebijakan sistem mencegah berbagi sambungan melalui jaringan WiFi terlindung" - -#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8 -msgid "System policy prevents sharing connections via an open WiFi network" -msgstr "" -"Kebijakan sistem mencegah berbagi sambungan melalui jaringan WiFi terbuka" - #: ../policy/org.freedesktop.NetworkManager.policy.in.h:1 msgid "Allow control of network connections" msgstr "Ijinkan pengendalian sambungan jaringan" #: ../policy/org.freedesktop.NetworkManager.policy.in.h:2 -msgid "Allow use of user-specific connections" -msgstr "Ijinkan penggunaan sambungan spesifik-pengguna" +msgid "Connection sharing via a protected WiFi network" +msgstr "Berbagi koneksi melalui jaringan WiFi terlindung." #: ../policy/org.freedesktop.NetworkManager.policy.in.h:3 -msgid "Enable or disable WiFi devices" -msgstr "Aktifkan atau matikan perangkat WiFi" +msgid "Connection sharing via an open WiFi network" +msgstr "Berbagi koneksi melalui jaringan WiFi terbuka" #: ../policy/org.freedesktop.NetworkManager.policy.in.h:4 -msgid "Enable or disable mobile broadband devices" -msgstr "Aktifkan atau matikan perangkat broadband bergerak" +msgid "Enable or disable WiFi devices" +msgstr "Aktifkan atau matikan perangkat WiFi" #: ../policy/org.freedesktop.NetworkManager.policy.in.h:5 -msgid "Enable or disable system networking" -msgstr "Aktifkan atau matikan jejaring sistem" +#| msgid "Enable or disable mobile broadband devices" +msgid "Enable or disable WiMAX mobile broadband devices" +msgstr "Aktifkan atau matikan perangkat broadband bergerak WiMAX" #: ../policy/org.freedesktop.NetworkManager.policy.in.h:6 -msgid "" -"Put NetworkManager to sleep or wake it up (should only be used by system " -"power management)" -msgstr "" -"Tidurkan NetworkManager atau bangunkan (mestinya hanya dipakai oleh " -"manajemen daya sistem)" +msgid "Enable or disable mobile broadband devices" +msgstr "Aktifkan atau matikan perangkat broadband bergerak" #: ../policy/org.freedesktop.NetworkManager.policy.in.h:7 -msgid "System policy prevents control of network connections" -msgstr "Kebijakan sistem mencegah pengendalian sambungan jaringan" +msgid "Enable or disable system networking" +msgstr "Aktifkan atau matikan jejaring sistem" #: ../policy/org.freedesktop.NetworkManager.policy.in.h:8 -msgid "System policy prevents enabling or disabling WiFi devices" -msgstr "Kebijakan sistem mencegah mengaktifkan atau mematikan perangkat WiFi" +#| msgid "Modify system connections" +msgid "Modify network connections for all users" +msgstr "Ubah koneksi jaringan bagi semua pengguna" #: ../policy/org.freedesktop.NetworkManager.policy.in.h:9 -msgid "System policy prevents enabling or disabling mobile broadband devices" -msgstr "" -"Kebijakan sistem mencegah mengaktifkan atau mematikan perangkat broadband " -"bergerak" +msgid "Modify persistent system hostname" +msgstr "Ubah nama host sistem yang persisten" #: ../policy/org.freedesktop.NetworkManager.policy.in.h:10 -msgid "System policy prevents enabling or disabling system networking" -msgstr "Kebijakan sistem mencegah mengaktifkan atau mematikan jejaring sistem" +#| msgid "Allow control of network connections" +msgid "Modify personal network connections" +msgstr "Ubah koneksi jaringan personal" #: ../policy/org.freedesktop.NetworkManager.policy.in.h:11 -msgid "System policy prevents putting NetworkManager to sleep or waking it up" -msgstr "" -"Kebijakan sistem mencegah menidurkan NetworkManager atau membangunkannya" +msgid "Put NetworkManager to sleep or wake it up (should only be used by system power management)" +msgstr "Tidurkan NetworkManager atau bangunkan (mestinya hanya dipakai oleh manajemen daya sistem)" #: ../policy/org.freedesktop.NetworkManager.policy.in.h:12 -msgid "System policy prevents use of user-specific connections" -msgstr "Kebijakan sistem mencegah penggunaan sambungan spesifik-pengguna" +msgid "System policy prevents control of network connections" +msgstr "Kebijakan sistem mencegah pengendalian sambungan jaringan" -#: ../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 "galat memroses pesan netlink: %s" +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:13 +msgid "System policy prevents enabling or disabling WiFi devices" +msgstr "Kebijakan sistem mencegah mengaktifkan atau mematikan perangkat WiFi" -#: ../src/nm-netlink-monitor.c:214 -msgid "error occurred while waiting for data on socket" -msgstr "galat terjadi ketika menunggu data pada soket" +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:14 +#| msgid "" +#| "System policy prevents enabling or disabling mobile broadband devices" +msgid "System policy prevents enabling or disabling WiMAX mobile broadband devices" +msgstr "Kebijakan sistem mencegah mengaktifkan atau mematikan perangkat broadband bergerak WiMAX" -#: ../src/nm-netlink-monitor.c:254 -#, c-format -msgid "unable to connect to netlink for monitoring link status: %s" -msgstr "tak bisa menyambung ke netlink untuk pemantauan status sambungan: %s" +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:15 +msgid "System policy prevents enabling or disabling mobile broadband devices" +msgstr "Kebijakan sistem mencegah mengaktifkan atau mematikan perangkat broadband bergerak" -#: ../src/nm-netlink-monitor.c:265 -#, c-format -msgid "unable to enable netlink handle credential passing: %s" -msgstr "tak bisa mengaktifkan penyampaian kredensial handle netlink: %s" +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:16 +msgid "System policy prevents enabling or disabling system networking" +msgstr "Kebijakan sistem mencegah mengaktifkan atau mematikan jejaring sistem" -#: ../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 "" -"tak bisa mengalokasikan handle netlink untuk pemantauan status sambungan: %s" +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:17 +#| msgid "System policy prevents modification of system settings" +msgid "System policy prevents modification of network settings for all users" +msgstr "Kebijakan sistem mencegah pengubahan tatanan sistem bagi semua pengguna" -#: ../src/nm-netlink-monitor.c:376 -#, c-format -msgid "unable to allocate netlink link cache for monitoring link status: %s" -msgstr "" -"tak bisa mengalokasikan singgahan sambungan netlink untuk pemantauan status " -"sambungan: %s" +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:18 +#| msgid "System policy prevents modification of system settings" +msgid "System policy prevents modification of personal network settings" +msgstr "Kebijakan sistem mencegah pengubahan tatanan jaringan pribadi" -#: ../src/nm-netlink-monitor.c:502 -#, c-format -msgid "unable to join netlink group: %s" -msgstr "tak bisa bergabung dengan grup netlink: %s" +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:19 +msgid "System policy prevents modification of the persistent system hostname" +msgstr "Kebijakan sistem mencegah pengubahan nama host yang persisten" -#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642 -#, c-format -msgid "error updating link cache: %s" -msgstr "galat memperbarui singgahan sambungan: %s" +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:20 +msgid "System policy prevents putting NetworkManager to sleep or waking it up" +msgstr "Kebijakan sistem mencegah menidurkan NetworkManager atau membangunkannya" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:21 +msgid "System policy prevents sharing connections via a protected WiFi network" +msgstr "Kebijakan sistem mencegah berbagi sambungan melalui jaringan WiFi terlindung" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:22 +msgid "System policy prevents sharing connections via an open WiFi network" +msgstr "Kebijakan sistem mencegah berbagi sambungan melalui jaringan WiFi terbuka" -#: ../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 "" -"Opsi tak valid. Silakan pakai --help untuk melihat daftar opsi yang valid.\n" +msgstr "Opsi tak valid. Silakan pakai --help untuk melihat daftar opsi yang valid.\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. Silakan pakai --help untuk melihat daftar opsi yang valid.\n" -#: ../src/dhcp-manager/nm-dhcp-dhclient.c:324 +#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:62 msgid "# Created by NetworkManager\n" msgstr "# Dibuat oleh NetworkManager\n" -#: ../src/dhcp-manager/nm-dhcp-dhclient.c:340 +#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:69 #, c-format msgid "" "# Merged from %s\n" @@ -1688,29 +2100,119 @@ msgstr "'dhcpd' dapat ditemukan." msgid "unsupported DHCP client '%s'" msgstr "Klien DHCP '%s' yang tak didukung" -#: ../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 "CATATAN: resolver libc mungkin tak mendukung lebih dari 3 nameserver." + +#: ../src/dns-manager/nm-dns-manager.c:371 +msgid "The nameservers listed below may not be recognized." +msgstr "Nameserver yang terdaftar di bawah mungkin tak dikenali." + +#: ../src/logging/nm-logging.c:149 #, c-format msgid "Unknown log level '%s'" msgstr "Aras log tak dikenal '%s'" -#: ../src/logging/nm-logging.c:171 +#: ../src/logging/nm-logging.c:174 #, c-format msgid "Unknown log domain '%s'" msgstr "Ranah log tak dikenal '%s'" -#: ../src/dns-manager/nm-dns-manager.c:384 -msgid "NOTE: the libc resolver may not support more than 3 nameservers." -msgstr "CATATAN: resolver libc mungkin tak mendukung lebih dari 3 nameserver." +#: ../src/modem-manager/nm-modem-cdma.c:296 +#: ../src/nm-device-bt.c:355 +#, c-format +#| msgid "connection failed" +msgid "CDMA connection %d" +msgstr "Sambungan CDMA %d" -#: ../src/dns-manager/nm-dns-manager.c:386 -msgid "The nameservers listed below may not be recognized." -msgstr "Nameserver yang terdaftar di bawah mungkin tak dikenali." +#: ../src/modem-manager/nm-modem-gsm.c:499 +#: ../src/nm-device-bt.c:351 +#, c-format +#| msgid "connection failed" +msgid "GSM connection %d" +msgstr "Sambungan GSM %d" + +#: ../src/nm-device-bt.c:326 +#, c-format +#| msgid "VPN connection failed" +msgid "PAN connection %d" +msgstr "Sambungan PAN %d" + +#: ../src/nm-device-bt.c:359 +#, c-format +#| msgid "VPN connection failed" +msgid "DUN connection %d" +msgstr "Sambungan DUN %d" + +#: ../src/nm-device-ethernet.c:1681 +#, c-format +#| msgid "VPN connection failed" +msgid "PPPoE connection %d" +msgstr "Sambungan PPPoE %d" + +#: ../src/nm-device-ethernet.c:1681 +#: ../src/settings/nm-settings-utils.c:50 +#, c-format +#| msgid "Active connections" +msgid "Wired connection %d" +msgstr "Sambungan kabel %d" + +#: ../src/nm-device-olpc-mesh.c:423 +#, c-format +msgid "Mesh %d" +msgstr "Mesh %d" + +#: ../src/nm-manager.c:673 +#, c-format +#| msgid "VPN connection failed" +msgid "VPN connection %d" +msgstr "Sambungan VPN %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 "galat memroses pesan netlink: %s" + +#: ../src/nm-netlink-monitor.c:214 +msgid "error occurred while waiting for data on socket" +msgstr "galat terjadi ketika menunggu data pada soket" + +#: ../src/nm-netlink-monitor.c:254 +#, c-format +msgid "unable to connect to netlink for monitoring link status: %s" +msgstr "tak bisa menyambung ke netlink untuk pemantauan status sambungan: %s" + +#: ../src/nm-netlink-monitor.c:265 +#, c-format +msgid "unable to enable netlink handle credential passing: %s" +msgstr "tak bisa mengaktifkan penyampaian kredensial handle netlink: %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 "tak bisa mengalokasikan handle netlink untuk pemantauan status sambungan: %s" -#: ../src/settings/nm-default-wired-connection.c:157 +#: ../src/nm-netlink-monitor.c:376 +#, c-format +msgid "unable to allocate netlink link cache for monitoring link status: %s" +msgstr "tak bisa mengalokasikan singgahan sambungan netlink untuk pemantauan status sambungan: %s" + +#: ../src/nm-netlink-monitor.c:502 +#, c-format +msgid "unable to join netlink group: %s" +msgstr "tak bisa bergabung dengan grup netlink: %s" + +#: ../src/nm-netlink-monitor.c:629 +#: ../src/nm-netlink-monitor.c:642 #, c-format -msgid "Auto %s" -msgstr "Otomatis %s" +msgid "error updating link cache: %s" +msgstr "galat memperbarui singgahan sambungan: %s" -#: ../system-settings/plugins/ifcfg-rh/reader.c:3412 +#: ../src/settings/plugins/ifcfg-rh/reader.c:3512 +#: ../src/settings/plugins/ifnet/connection_parser.c:51 msgid "System" msgstr "Sistem" + diff --git a/po/ko.po b/po/ko.po index d9d6f949..ba6bb0b6 100644 --- a/po/ko.po +++ b/po/ko.po @@ -9,6 +9,7 @@ # Hyunsok Oh , 2010. # Hyunsok Oh , 2010. # Changwoo Ryu , 2011. +# Seongho Cho , 2011. # # 주의: # - 이 프로그램의 이름인 "Network Manager"는 "네트워크 관리" 혹은 @@ -17,46 +18,47 @@ msgid "" msgstr "" "Project-Id-Version: ko\n" -"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=NetworkManager&component=general\n" -"POT-Creation-Date: 2011-02-24 03:24+0000\n" -"PO-Revision-Date: 2011-02-27 16:50+0900\n" -"Last-Translator: Changwoo Ryu \n" +"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" +"product=NetworkManager&keywords=I18N+L10N&component=general\n" +"POT-Creation-Date: 2011-05-31 03:25+0000\n" +"PO-Revision-Date: 2011-07-24 05:55+0900\n" +"Last-Translator: Seong-ho, Cho \n" "Language-Team: GNOME Korea \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../cli/src/connections.c:63 ../cli/src/connections.c:77 -#: ../cli/src/devices.c:100 ../cli/src/devices.c:113 ../cli/src/devices.c:123 -#: ../cli/src/devices.c:133 ../cli/src/devices.c:147 ../cli/src/devices.c:161 -#: ../cli/src/devices.c:172 ../cli/src/devices.c:183 ../cli/src/devices.c:192 -#: ../cli/src/devices.c:201 ../cli/src/devices.c:223 +#: ../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 "이름" #. 0 -#: ../cli/src/connections.c:64 ../cli/src/connections.c:78 +#: ../cli/src/connections.c:65 ../cli/src/connections.c:79 msgid "UUID" msgstr "UUID" #. 1 -#: ../cli/src/connections.c:65 +#: ../cli/src/connections.c:66 msgid "DEVICES" msgstr "장치" #. 2 -#: ../cli/src/connections.c:66 +#: ../cli/src/connections.c:67 msgid "DEFAULT" msgstr "디폴트" #. 3 -#: ../cli/src/connections.c:67 +#: ../cli/src/connections.c:68 msgid "SPEC-OBJECT" msgstr "스펙-객체" #. 4 -#: ../cli/src/connections.c:68 +#: ../cli/src/connections.c:69 msgid "VPN" msgstr "VPN" @@ -65,8 +67,8 @@ msgstr "VPN" #. 2 #. 11 #. 5 -#: ../cli/src/connections.c:69 ../cli/src/connections.c:84 -#: ../cli/src/devices.c:68 ../cli/src/devices.c:213 ../cli/src/devices.c:229 +#: ../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 경로" @@ -74,28 +76,28 @@ msgstr "DBUS 경로" #. 0 #. 1 #. 2 -#: ../cli/src/connections.c:79 ../cli/src/devices.c:66 -#: ../cli/src/devices.c:102 ../cli/src/devices.c:226 +#: ../cli/src/connections.c:80 ../cli/src/devices.c:67 +#: ../cli/src/devices.c:103 ../cli/src/devices.c:227 msgid "TYPE" msgstr "유형" #. 2 -#: ../cli/src/connections.c:80 +#: ../cli/src/connections.c:81 msgid "TIMESTAMP" msgstr "타임스탬프" #. 3 -#: ../cli/src/connections.c:81 +#: ../cli/src/connections.c:82 msgid "TIMESTAMP-REAL" msgstr "실제 타임스탬프" #. 4 -#: ../cli/src/connections.c:82 +#: ../cli/src/connections.c:83 msgid "AUTOCONNECT" msgstr "자동연결" #. 5 -#: ../cli/src/connections.c:83 +#: ../cli/src/connections.c:84 msgid "READONLY" msgstr "읽기전용" @@ -118,15 +120,16 @@ msgstr "" "\n" " list [id | uuid ]\n" " status\n" -" up id | uuid [iface <인터페이스>] [ap <하드웨어주소>] [--nowait] [--timeout <타임아웃시간>]\n" +" up id | uuid [iface <인터페이스>] [ap <하드웨어주소>] [--nowait] " +"[--timeout <타임아웃시간>]\n" " down id | uuid \n" -#: ../cli/src/connections.c:220 ../cli/src/connections.c:542 +#: ../cli/src/connections.c:220 ../cli/src/connections.c:544 #, c-format msgid "Error: 'con list': %s" msgstr "오류: 'con list': %s" -#: ../cli/src/connections.c:222 ../cli/src/connections.c:544 +#: ../cli/src/connections.c:222 ../cli/src/connections.c:546 #, c-format msgid "Error: 'con list': %s; allowed fields: %s" msgstr "오류: 'con list': %s. 허용된 필드: %s" @@ -135,332 +138,332 @@ msgstr "오류: 'con list': %s. 허용된 필드: %s" msgid "Connection details" msgstr "연결 상세 정보" -#: ../cli/src/connections.c:417 +#: ../cli/src/connections.c:419 msgid "never" msgstr "하지않음" #. "CAPABILITIES" #. Print header #. "WIFI-PROPERTIES" -#: ../cli/src/connections.c:418 ../cli/src/connections.c:419 -#: ../cli/src/connections.c:597 ../cli/src/connections.c:599 -#: ../cli/src/devices.c:503 ../cli/src/devices.c:556 ../cli/src/devices.c:681 -#: ../cli/src/devices.c:707 ../cli/src/devices.c:708 ../cli/src/devices.c:709 -#: ../cli/src/devices.c:710 ../cli/src/devices.c:711 ../cli/src/settings.c:518 -#: ../cli/src/settings.c:561 ../cli/src/settings.c:661 -#: ../cli/src/settings.c:935 ../cli/src/settings.c:936 -#: ../cli/src/settings.c:938 ../cli/src/settings.c:940 -#: ../cli/src/settings.c:1065 ../cli/src/settings.c:1066 -#: ../cli/src/settings.c:1067 ../cli/src/settings.c:1146 -#: ../cli/src/settings.c:1147 ../cli/src/settings.c:1148 +#: ../cli/src/connections.c:420 ../cli/src/connections.c:421 +#: ../cli/src/connections.c:599 ../cli/src/connections.c:601 +#: ../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:1233 +#: ../cli/src/settings.c:1159 ../cli/src/settings.c:1160 +#: ../cli/src/settings.c:1235 msgid "yes" msgstr "예" -#: ../cli/src/connections.c:418 ../cli/src/connections.c:419 -#: ../cli/src/connections.c:597 ../cli/src/connections.c:599 -#: ../cli/src/devices.c:503 ../cli/src/devices.c:556 ../cli/src/devices.c:681 -#: ../cli/src/devices.c:707 ../cli/src/devices.c:708 ../cli/src/devices.c:709 -#: ../cli/src/devices.c:710 ../cli/src/devices.c:711 ../cli/src/settings.c:518 -#: ../cli/src/settings.c:520 ../cli/src/settings.c:561 -#: ../cli/src/settings.c:661 ../cli/src/settings.c:935 -#: ../cli/src/settings.c:936 ../cli/src/settings.c:938 -#: ../cli/src/settings.c:940 ../cli/src/settings.c:1065 -#: ../cli/src/settings.c:1066 ../cli/src/settings.c:1067 -#: ../cli/src/settings.c:1146 ../cli/src/settings.c:1147 +#: ../cli/src/connections.c:420 ../cli/src/connections.c:421 +#: ../cli/src/connections.c:599 ../cli/src/connections.c:601 +#: ../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:1233 +#: ../cli/src/settings.c:1158 ../cli/src/settings.c:1159 +#: ../cli/src/settings.c:1160 ../cli/src/settings.c:1235 msgid "no" msgstr "아니요" -#: ../cli/src/connections.c:493 +#: ../cli/src/connections.c:495 msgid "Connection list" msgstr "연결 목록" -#: ../cli/src/connections.c:506 ../cli/src/connections.c:1468 -#: ../cli/src/connections.c:1483 ../cli/src/connections.c:1492 -#: ../cli/src/connections.c:1502 ../cli/src/connections.c:1514 -#: ../cli/src/connections.c:1609 ../cli/src/devices.c:1184 -#: ../cli/src/devices.c:1194 ../cli/src/devices.c:1308 -#: ../cli/src/devices.c:1315 ../cli/src/devices.c:1528 -#: ../cli/src/devices.c:1535 +#: ../cli/src/connections.c:508 ../cli/src/connections.c:1380 +#: ../cli/src/connections.c:1395 ../cli/src/connections.c:1404 +#: ../cli/src/connections.c:1414 ../cli/src/connections.c:1426 +#: ../cli/src/connections.c:1521 ../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 "오류: %s 인자가 없습니다." -#: ../cli/src/connections.c:519 +#: ../cli/src/connections.c:521 #, c-format msgid "Error: %s - no such connection." msgstr "오류: %s - 그런 연결이 없습니다." -#: ../cli/src/connections.c:525 ../cli/src/connections.c:1527 -#: ../cli/src/connections.c:1626 ../cli/src/devices.c:981 -#: ../cli/src/devices.c:1061 ../cli/src/devices.c:1208 -#: ../cli/src/devices.c:1321 ../cli/src/devices.c:1541 +#: ../cli/src/connections.c:527 ../cli/src/connections.c:1439 +#: ../cli/src/connections.c:1538 ../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 "알려져있지 않은 매개변수입니다: %s\n" -#: ../cli/src/connections.c:534 +#: ../cli/src/connections.c:536 #, c-format msgid "Error: no valid parameter specified." msgstr "오류: 옳바른 매개변수가 지정되지 않았습니다." -#: ../cli/src/connections.c:549 ../cli/src/connections.c:1717 -#: ../cli/src/devices.c:1749 ../cli/src/network-manager.c:461 +#: ../cli/src/connections.c:551 ../cli/src/connections.c:1629 +#: ../cli/src/devices.c:1755 ../cli/src/network-manager.c:463 #, c-format msgid "Error: %s." msgstr "오류: %s." -#: ../cli/src/connections.c:637 +#: ../cli/src/connections.c:639 #, c-format msgid "Error: 'con status': %s" msgstr "오류: 'con status': %s" -#: ../cli/src/connections.c:639 +#: ../cli/src/connections.c:641 #, c-format msgid "Error: 'con status': %s; allowed fields: %s" msgstr "오류: 'con status': %s. 허용된 필드: %s" -#: ../cli/src/connections.c:647 ../cli/src/connections.c:1542 -#: ../cli/src/connections.c:1641 ../cli/src/devices.c:1008 -#: ../cli/src/devices.c:1070 ../cli/src/devices.c:1223 -#: ../cli/src/devices.c:1351 ../cli/src/devices.c:1570 +#: ../cli/src/connections.c:649 ../cli/src/connections.c:1454 +#: ../cli/src/connections.c:1553 ../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 "오류: 네트워크 관리 프로그램이 실행 중인지 알 수 없습니다: %s." -#: ../cli/src/connections.c:651 ../cli/src/connections.c:1546 -#: ../cli/src/connections.c:1645 ../cli/src/devices.c:1012 -#: ../cli/src/devices.c:1074 ../cli/src/devices.c:1227 -#: ../cli/src/devices.c:1355 ../cli/src/devices.c:1574 +#: ../cli/src/connections.c:653 ../cli/src/connections.c:1458 +#: ../cli/src/connections.c:1557 ../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 "오류: 네트워크 관리 프로그램이 실행 중이 아닙니다." -#: ../cli/src/connections.c:659 +#: ../cli/src/connections.c:661 msgid "Active connections" msgstr "활성화된 연결" -#: ../cli/src/connections.c:1139 +#: ../cli/src/connections.c:1097 #, c-format msgid "no active connection on device '%s'" msgstr "장치 '%s'에 활성화된 연결이 없습니다" -#: ../cli/src/connections.c:1147 +#: ../cli/src/connections.c:1105 #, c-format msgid "no active connection or device" msgstr "활성화된 연결이나 장치가 없습니다" -#: ../cli/src/connections.c:1218 +#: ../cli/src/connections.c:1176 #, c-format msgid "device '%s' not compatible with connection '%s'" msgstr "'%s' 장치는 '%s' 연결과 호환되지 않습니다" -#: ../cli/src/connections.c:1220 +#: ../cli/src/connections.c:1178 #, c-format msgid "no device found for connection '%s'" msgstr "연결 '%s'에 대한 장치를 찾을 수 없습니다" -#: ../cli/src/connections.c:1231 +#: ../cli/src/connections.c:1189 msgid "activating" msgstr "활성화중" -#: ../cli/src/connections.c:1233 +#: ../cli/src/connections.c:1191 msgid "activated" msgstr "활성화됨" -#: ../cli/src/connections.c:1236 ../cli/src/connections.c:1259 -#: ../cli/src/connections.c:1292 ../cli/src/devices.c:307 -#: ../cli/src/devices.c:682 ../cli/src/network-manager.c:116 -#: ../cli/src/network-manager.c:178 ../cli/src/network-manager.c:181 -#: ../cli/src/network-manager.c:296 ../cli/src/network-manager.c:351 -#: ../cli/src/network-manager.c:389 ../cli/src/network-manager.c:428 -#: ../cli/src/settings.c:483 ../cli/src/utils.c:396 +#: ../cli/src/connections.c:1193 ../cli/src/devices.c:304 +msgid "deactivating" +msgstr "활성화 해제하는 중" + +#: ../cli/src/connections.c:1196 ../cli/src/connections.c:1219 +#: ../cli/src/connections.c:1252 ../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 "알 수 없음" -#: ../cli/src/connections.c:1245 +#: ../cli/src/connections.c:1205 msgid "VPN connecting (prepare)" msgstr "VPN 연결 중 (준비)" -#: ../cli/src/connections.c:1247 +#: ../cli/src/connections.c:1207 msgid "VPN connecting (need authentication)" msgstr "VPN 연결 중 (인증 필요)" -#: ../cli/src/connections.c:1249 +#: ../cli/src/connections.c:1209 msgid "VPN connecting" msgstr "VPN 연결 중" -#: ../cli/src/connections.c:1251 +#: ../cli/src/connections.c:1211 msgid "VPN connecting (getting IP configuration)" msgstr "VPN 연결 중 (IP 설정 얻는 중)" -#: ../cli/src/connections.c:1253 +#: ../cli/src/connections.c:1213 msgid "VPN connected" msgstr "VPN 연결 됨" -#: ../cli/src/connections.c:1255 +#: ../cli/src/connections.c:1215 msgid "VPN connection failed" msgstr "VPN 연결 실패" -#: ../cli/src/connections.c:1257 +#: ../cli/src/connections.c:1217 msgid "VPN disconnected" msgstr "VPN 연결 끊겼음" -#: ../cli/src/connections.c:1268 +#: ../cli/src/connections.c:1228 msgid "unknown reason" msgstr "알 수 없는 이유" -#: ../cli/src/connections.c:1270 +#: ../cli/src/connections.c:1230 msgid "none" msgstr "없음" -#: ../cli/src/connections.c:1272 +#: ../cli/src/connections.c:1232 msgid "the user was disconnected" msgstr "사용자 연결이 끊어졌습니다" -#: ../cli/src/connections.c:1274 +#: ../cli/src/connections.c:1234 msgid "the base network connection was interrupted" msgstr "기반 네트워크 연결이 중지되었습니다" -#: ../cli/src/connections.c:1276 +#: ../cli/src/connections.c:1236 msgid "the VPN service stopped unexpectedly" msgstr "VPN 서비스가 예기치 못하게 중단되었습니다" -#: ../cli/src/connections.c:1278 +#: ../cli/src/connections.c:1238 msgid "the VPN service returned invalid configuration" msgstr "VPN 서비스가 잘못된 설정을 반환했습니다" -#: ../cli/src/connections.c:1280 +#: ../cli/src/connections.c:1240 msgid "the connection attempt timed out" msgstr "연결 시도가 시간을 초과했습니다" -#: ../cli/src/connections.c:1282 +#: ../cli/src/connections.c:1242 msgid "the VPN service did not start in time" msgstr "VPN 서비스가 제 시간에 시작되지 않았습니다" -#: ../cli/src/connections.c:1284 +#: ../cli/src/connections.c:1244 msgid "the VPN service failed to start" msgstr "VPN 서비스를 시작하는 데 실패했습니다" -#: ../cli/src/connections.c:1286 +#: ../cli/src/connections.c:1246 msgid "no valid VPN secrets" msgstr "옳바른 VPN 비밀 정보가 없습니다" -#: ../cli/src/connections.c:1288 +#: ../cli/src/connections.c:1248 msgid "invalid VPN secrets" msgstr "잘못된 VPN 비밀정보" -#: ../cli/src/connections.c:1290 +#: ../cli/src/connections.c:1250 msgid "the connection was removed" msgstr "연결이 제거되었습니다" -#: ../cli/src/connections.c:1304 +#: ../cli/src/connections.c:1264 #, c-format msgid "state: %s\n" msgstr "상태: %s\n" -#: ../cli/src/connections.c:1307 ../cli/src/connections.c:1333 +#: ../cli/src/connections.c:1267 ../cli/src/connections.c:1293 #, c-format msgid "Connection activated\n" msgstr "연결이 활성화되었습니다\n" -#: ../cli/src/connections.c:1310 +#: ../cli/src/connections.c:1270 #, c-format msgid "Error: Connection activation failed." msgstr "오류: 연결 활성화가 실패했습니다." -#: ../cli/src/connections.c:1329 +#: ../cli/src/connections.c:1289 #, c-format msgid "state: %s (%d)\n" msgstr "상태: %s (%d)\n" -#: ../cli/src/connections.c:1339 +#: ../cli/src/connections.c:1299 #, c-format msgid "Error: Connection activation failed: %s." msgstr "오류: 연결 활성화가 실패했습니다: %s." -#: ../cli/src/connections.c:1356 ../cli/src/devices.c:1130 +#: ../cli/src/connections.c:1316 ../cli/src/devices.c:1136 #, c-format msgid "Error: Timeout %d sec expired." msgstr "오류: 제한시간 %d초를 초과했습니다." -#: ../cli/src/connections.c:1399 +#: ../cli/src/connections.c:1329 #, c-format msgid "Error: Connection activation failed: %s" msgstr "오류: 연결 활성화가 실패했습니다: %s" -#: ../cli/src/connections.c:1413 -#, c-format -msgid "Error: Obtaining active connection for '%s' failed." -msgstr "오류: '%s'에 대한 활성화된 연결을 얻는 데 실패했습니다." - -#: ../cli/src/connections.c:1422 +#: ../cli/src/connections.c:1335 #, c-format msgid "Active connection state: %s\n" msgstr "활성화된 연결 상태: %s\n" -#: ../cli/src/connections.c:1423 +#: ../cli/src/connections.c:1336 #, c-format msgid "Active connection path: %s\n" msgstr "활성화된 연결 경로: %s\n" -#: ../cli/src/connections.c:1476 ../cli/src/connections.c:1617 +#: ../cli/src/connections.c:1388 ../cli/src/connections.c:1529 #, c-format msgid "Error: Unknown connection: %s." msgstr "오류: 알려지지 않은 연결: %s." -#: ../cli/src/connections.c:1522 ../cli/src/devices.c:1202 +#: ../cli/src/connections.c:1434 ../cli/src/devices.c:1208 #, c-format msgid "Error: timeout value '%s' is not valid." msgstr "오류: 시간 제한 값 '%s'이(가) 올바르지 않습니다." -#: ../cli/src/connections.c:1535 ../cli/src/connections.c:1634 +#: ../cli/src/connections.c:1447 ../cli/src/connections.c:1546 #, c-format msgid "Error: id or uuid has to be specified." msgstr "오류: id나 uuid를 지정해야만 합니다." -#: ../cli/src/connections.c:1565 +#: ../cli/src/connections.c:1475 #, c-format msgid "Error: No suitable device found: %s." msgstr "오류: 적절한 장치를 찾을 수 없습니다: %s." -#: ../cli/src/connections.c:1567 +#: ../cli/src/connections.c:1477 #, c-format msgid "Error: No suitable device found." msgstr "오류: 적절한 장치를 찾을 수 없습니다." -#: ../cli/src/connections.c:1670 +#: ../cli/src/connections.c:1582 #, c-format msgid "Warning: Connection not active\n" msgstr "경고: 연결이 활성화되어 있지 않습니다\n" -#: ../cli/src/connections.c:1708 +#: ../cli/src/connections.c:1620 #, c-format msgid "Error: 'con' command '%s' is not valid." msgstr "오류: 'con' 명령 '%s'은(는) 바른 명령이 아닙니다." -#: ../cli/src/connections.c:1773 +#: ../cli/src/connections.c:1685 #, c-format msgid "Error: could not connect to D-Bus." msgstr "오류: D-버스에 연결할 수 없습니다." -#: ../cli/src/connections.c:1780 +#: ../cli/src/connections.c:1692 #, c-format msgid "Error: Could not get system settings." msgstr "오류: 시스템 설정을 얻을 수 없습니다." -#: ../cli/src/connections.c:1790 +#: ../cli/src/connections.c:1702 #, c-format msgid "Error: Can't obtain connections: settings service is not running." msgstr "오류: 연결을 얻을 수 없습니다: 설정 서비스가 실행 중이 아닙니다." @@ -468,222 +471,222 @@ msgstr "오류: 연결을 얻을 수 없습니다: 설정 서비스가 실행 #. 0 #. 9 #. 3 -#: ../cli/src/devices.c:65 ../cli/src/devices.c:101 ../cli/src/devices.c:211 -#: ../cli/src/devices.c:227 +#: ../cli/src/devices.c:66 ../cli/src/devices.c:102 ../cli/src/devices.c:212 +#: ../cli/src/devices.c:228 msgid "DEVICE" msgstr "장치" #. 1 #. 4 #. 1 -#: ../cli/src/devices.c:67 ../cli/src/devices.c:105 -#: ../cli/src/network-manager.c:37 +#: ../cli/src/devices.c:68 ../cli/src/devices.c:106 +#: ../cli/src/network-manager.c:39 msgid "STATE" msgstr "상태" -#: ../cli/src/devices.c:77 +#: ../cli/src/devices.c:78 msgid "GENERAL" msgstr "일반" #. 0 -#: ../cli/src/devices.c:78 +#: ../cli/src/devices.c:79 msgid "CAPABILITIES" msgstr "기능" #. 1 -#: ../cli/src/devices.c:79 +#: ../cli/src/devices.c:80 msgid "WIFI-PROPERTIES" msgstr "WIFI 속성" #. 2 -#: ../cli/src/devices.c:80 +#: ../cli/src/devices.c:81 msgid "AP" msgstr "AP" #. 3 -#: ../cli/src/devices.c:81 +#: ../cli/src/devices.c:82 msgid "WIRED-PROPERTIES" msgstr "유선 속성" #. 4 -#: ../cli/src/devices.c:82 +#: ../cli/src/devices.c:83 msgid "WIMAX-PROPERTIES" msgstr "WIMAX 속성" #. 5 #. 0 -#: ../cli/src/devices.c:83 ../cli/src/devices.c:224 +#: ../cli/src/devices.c:84 ../cli/src/devices.c:225 msgid "NSP" msgstr "NSP" #. 6 -#: ../cli/src/devices.c:84 +#: ../cli/src/devices.c:85 msgid "IP4-SETTINGS" msgstr "IP4 설정" #. 7 -#: ../cli/src/devices.c:85 +#: ../cli/src/devices.c:86 msgid "IP4-DNS" msgstr "IP4 DNS" #. 8 -#: ../cli/src/devices.c:86 +#: ../cli/src/devices.c:87 msgid "IP6-SETTINGS" msgstr "IP6 설정" #. 9 -#: ../cli/src/devices.c:87 +#: ../cli/src/devices.c:88 msgid "IP6-DNS" msgstr "IP6 DNS" #. 2 -#: ../cli/src/devices.c:103 +#: ../cli/src/devices.c:104 msgid "DRIVER" msgstr "드라이버" #. 3 -#: ../cli/src/devices.c:104 +#: ../cli/src/devices.c:105 msgid "HWADDR" msgstr "하드웨어주소" #. 0 -#: ../cli/src/devices.c:114 +#: ../cli/src/devices.c:115 msgid "CARRIER-DETECT" msgstr "캐리어 감지" #. 1 -#: ../cli/src/devices.c:115 +#: ../cli/src/devices.c:116 msgid "SPEED" msgstr "속도" #. 0 -#: ../cli/src/devices.c:124 +#: ../cli/src/devices.c:125 msgid "CARRIER" msgstr "캐리어" #. 0 -#: ../cli/src/devices.c:134 +#: ../cli/src/devices.c:135 msgid "WEP" msgstr "WEP" #. 1 -#: ../cli/src/devices.c:135 +#: ../cli/src/devices.c:136 msgid "WPA" msgstr "WPA" #. 2 -#: ../cli/src/devices.c:136 +#: ../cli/src/devices.c:137 msgid "WPA2" msgstr "WPA2" #. 3 -#: ../cli/src/devices.c:137 +#: ../cli/src/devices.c:138 msgid "TKIP" msgstr "TKIP" #. 4 -#: ../cli/src/devices.c:138 +#: ../cli/src/devices.c:139 msgid "CCMP" msgstr "CCMP" #. 0 -#: ../cli/src/devices.c:148 +#: ../cli/src/devices.c:149 msgid "CTR-FREQ" msgstr "CTR 주파수" #. 1 -#: ../cli/src/devices.c:149 +#: ../cli/src/devices.c:150 msgid "RSSI" msgstr "RSSI" #. 2 -#: ../cli/src/devices.c:150 +#: ../cli/src/devices.c:151 msgid "CINR" msgstr "CINR" #. 3 -#: ../cli/src/devices.c:151 +#: ../cli/src/devices.c:152 msgid "TX-POW" msgstr "TX-POW" #. 4 -#: ../cli/src/devices.c:152 +#: ../cli/src/devices.c:153 msgid "BSID" msgstr "BSID" #. 0 -#: ../cli/src/devices.c:162 ../cli/src/devices.c:173 +#: ../cli/src/devices.c:163 ../cli/src/devices.c:174 msgid "ADDRESS" msgstr "주소" #. 1 -#: ../cli/src/devices.c:163 ../cli/src/devices.c:174 +#: ../cli/src/devices.c:164 ../cli/src/devices.c:175 msgid "PREFIX" msgstr "접두사" #. 2 -#: ../cli/src/devices.c:164 ../cli/src/devices.c:175 +#: ../cli/src/devices.c:165 ../cli/src/devices.c:176 msgid "GATEWAY" msgstr "게이트웨이" #. 0 -#: ../cli/src/devices.c:184 ../cli/src/devices.c:193 +#: ../cli/src/devices.c:185 ../cli/src/devices.c:194 msgid "DNS" msgstr "DNS" #. 0 -#: ../cli/src/devices.c:202 +#: ../cli/src/devices.c:203 msgid "SSID" msgstr "SSID" #. 1 -#: ../cli/src/devices.c:203 +#: ../cli/src/devices.c:204 msgid "BSSID" msgstr "BSSID" #. 2 -#: ../cli/src/devices.c:204 +#: ../cli/src/devices.c:205 msgid "MODE" msgstr "모드" #. 3 -#: ../cli/src/devices.c:205 +#: ../cli/src/devices.c:206 msgid "FREQ" msgstr "주파수" #. 4 -#: ../cli/src/devices.c:206 +#: ../cli/src/devices.c:207 msgid "RATE" msgstr "전송률" #. 5 #. 1 -#: ../cli/src/devices.c:207 ../cli/src/devices.c:225 +#: ../cli/src/devices.c:208 ../cli/src/devices.c:226 msgid "SIGNAL" msgstr "신호" #. 6 -#: ../cli/src/devices.c:208 +#: ../cli/src/devices.c:209 msgid "SECURITY" msgstr "보안" #. 7 -#: ../cli/src/devices.c:209 +#: ../cli/src/devices.c:210 msgid "WPA-FLAGS" msgstr "WPA 플래그" #. 8 -#: ../cli/src/devices.c:210 +#: ../cli/src/devices.c:211 msgid "RSN-FLAGS" msgstr "RSN 플래그" #. 10 #. 4 -#: ../cli/src/devices.c:212 ../cli/src/devices.c:228 +#: ../cli/src/devices.c:213 ../cli/src/devices.c:229 msgid "ACTIVE" msgstr "활성" -#: ../cli/src/devices.c:255 +#: ../cli/src/devices.c:256 #, c-format msgid "" "Usage: nmcli dev { COMMAND | help }\n" @@ -712,308 +715,305 @@ msgstr "" " wimax [list [iface <인터페이스>] | nsp <이름>]\n" "\n" -#: ../cli/src/devices.c:283 +#: ../cli/src/devices.c:284 msgid "unmanaged" msgstr "관리되지 않음" -#: ../cli/src/devices.c:285 +#: ../cli/src/devices.c:286 msgid "unavailable" msgstr "사용할 수 없음" -#: ../cli/src/devices.c:287 ../cli/src/network-manager.c:113 +#: ../cli/src/devices.c:288 ../cli/src/network-manager.c:115 msgid "disconnected" msgstr "연결 끊겼음" -#: ../cli/src/devices.c:289 +#: ../cli/src/devices.c:290 msgid "connecting (prepare)" msgstr "연결 중 (준비)" -#: ../cli/src/devices.c:291 +#: ../cli/src/devices.c:292 msgid "connecting (configuring)" msgstr "연결 중 (설정중)" -#: ../cli/src/devices.c:293 +#: ../cli/src/devices.c:294 msgid "connecting (need authentication)" msgstr "연결 중 (인증 필요)" -#: ../cli/src/devices.c:295 +#: ../cli/src/devices.c:296 msgid "connecting (getting IP configuration)" msgstr "연결 중 (IP 설정 가져오는 중)" -#: ../cli/src/devices.c:297 +#: ../cli/src/devices.c:298 msgid "connecting (checking IP connectivity)" msgstr "연결 중 (IP 연결 확인하는 중)" -#: ../cli/src/devices.c:299 +#: ../cli/src/devices.c:300 msgid "connecting (starting secondary connections)" msgstr "연결 중 (보조 연결 시작하는 중)" -#: ../cli/src/devices.c:301 ../cli/src/network-manager.c:109 +#: ../cli/src/devices.c:302 ../cli/src/network-manager.c:111 msgid "connected" msgstr "연결됨" -#: ../cli/src/devices.c:303 -msgid "deactivating" -msgstr "활성화 해제하는 중" - -#: ../cli/src/devices.c:305 +#: ../cli/src/devices.c:306 msgid "connection failed" msgstr "연결 실패함" -#: ../cli/src/devices.c:335 ../cli/src/devices.c:495 ../cli/src/devices.c:539 +#: ../cli/src/devices.c:331 ../cli/src/devices.c:341 ../cli/src/devices.c:501 +#: ../cli/src/devices.c:545 msgid "Unknown" msgstr "알 수 없음" -#: ../cli/src/devices.c:368 +#: ../cli/src/devices.c:374 msgid "(none)" msgstr "(없음)" -#: ../cli/src/devices.c:393 +#: ../cli/src/devices.c:399 #, c-format msgid "%s: error converting IP4 address 0x%X" msgstr "%s: IP4 주소를 (0x%X) 변환하는 중 오류가 있습니다" -#: ../cli/src/devices.c:464 +#: ../cli/src/devices.c:470 #, c-format msgid "%u MHz" msgstr "%u MHz" -#: ../cli/src/devices.c:465 +#: ../cli/src/devices.c:471 #, c-format msgid "%u MB/s" msgstr "%u MB/s" -#: ../cli/src/devices.c:474 +#: ../cli/src/devices.c:480 msgid "Encrypted: " msgstr "암호화됨: " -#: ../cli/src/devices.c:479 +#: ../cli/src/devices.c:485 msgid "WEP " msgstr "WEP " -#: ../cli/src/devices.c:481 +#: ../cli/src/devices.c:487 msgid "WPA " msgstr "WPA " -#: ../cli/src/devices.c:483 +#: ../cli/src/devices.c:489 msgid "WPA2 " msgstr "WPA2 " -#: ../cli/src/devices.c:486 +#: ../cli/src/devices.c:492 msgid "Enterprise " msgstr "기업용 WPA " -#: ../cli/src/devices.c:495 +#: ../cli/src/devices.c:501 msgid "Ad-Hoc" msgstr "애드혹" -#: ../cli/src/devices.c:495 +#: ../cli/src/devices.c:501 msgid "Infrastructure" msgstr "인프라스트럭쳐" -#: ../cli/src/devices.c:530 +#: ../cli/src/devices.c:536 msgid "Home" msgstr "홈" -#: ../cli/src/devices.c:533 +#: ../cli/src/devices.c:539 msgid "Partner" msgstr "파트너" -#: ../cli/src/devices.c:536 +#: ../cli/src/devices.c:542 msgid "Roaming" msgstr "로밍" -#: ../cli/src/devices.c:606 +#: ../cli/src/devices.c:612 #, c-format msgid "Error: 'dev list': %s" msgstr "오류: 'dev list': %s" -#: ../cli/src/devices.c:608 +#: ../cli/src/devices.c:614 #, c-format msgid "Error: 'dev list': %s; allowed fields: %s" msgstr "오류: 'dev list': %s. 허용된 필드: %s" -#: ../cli/src/devices.c:617 +#: ../cli/src/devices.c:623 msgid "Device details" msgstr "장치 상세정보" -#: ../cli/src/devices.c:651 ../cli/src/devices.c:1146 ../cli/src/utils.c:342 +#: ../cli/src/devices.c:657 ../cli/src/devices.c:1152 ../cli/src/utils.c:342 msgid "(unknown)" msgstr "(알 수 없음)" -#: ../cli/src/devices.c:652 +#: ../cli/src/devices.c:658 msgid "unknown)" msgstr "알 수 없음)" -#: ../cli/src/devices.c:678 +#: ../cli/src/devices.c:684 #, c-format msgid "%u Mb/s" msgstr "%u Mb/s" #. Print header #. "WIRED-PROPERTIES" -#: ../cli/src/devices.c:751 +#: ../cli/src/devices.c:757 msgid "on" msgstr "켜짐" -#: ../cli/src/devices.c:751 +#: ../cli/src/devices.c:757 msgid "off" msgstr "꺼짐" -#: ../cli/src/devices.c:998 +#: ../cli/src/devices.c:1004 #, c-format msgid "Error: 'dev status': %s" msgstr "오류: 'dev status': %s" -#: ../cli/src/devices.c:1000 +#: ../cli/src/devices.c:1006 #, c-format msgid "Error: 'dev status': %s; allowed fields: %s" msgstr "오류: 'dev status': %s. 허용되는 필드: %s" -#: ../cli/src/devices.c:1023 +#: ../cli/src/devices.c:1029 msgid "Status of devices" msgstr "장치 상태" -#: ../cli/src/devices.c:1054 +#: ../cli/src/devices.c:1060 #, c-format msgid "Error: '%s' argument is missing." msgstr "오류: '%s' 인자가 없습니다." -#: ../cli/src/devices.c:1095 ../cli/src/devices.c:1247 -#: ../cli/src/devices.c:1383 ../cli/src/devices.c:1602 +#: ../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 "오류: '%s' 장치를 찾을 수 없습니다." -#: ../cli/src/devices.c:1118 +#: ../cli/src/devices.c:1124 #, c-format msgid "Success: Device '%s' successfully disconnected." msgstr "성공: '%s' 장치를 성공적으로 연결 해제했습니다." -#: ../cli/src/devices.c:1143 +#: ../cli/src/devices.c:1149 #, c-format msgid "Error: Device '%s' (%s) disconnecting failed: %s" msgstr "오류: 장치 '%s' (%s)의 연결 해제가 실패했습니다: %s" -#: ../cli/src/devices.c:1151 +#: ../cli/src/devices.c:1157 #, c-format msgid "Device state: %d (%s)\n" msgstr "장치 상태: %d (%s)\n" -#: ../cli/src/devices.c:1216 +#: ../cli/src/devices.c:1222 #, c-format msgid "Error: iface has to be specified." msgstr "오류: iface를 지정해야만 합니다." -#: ../cli/src/devices.c:1341 +#: ../cli/src/devices.c:1347 #, c-format msgid "Error: 'dev wifi': %s" msgstr "오류 'dev wifi': '%s'" -#: ../cli/src/devices.c:1343 +#: ../cli/src/devices.c:1349 #, c-format msgid "Error: 'dev wifi': %s; allowed fields: %s" msgstr "오류: 'dev wifi': %s. 허용되는 필드: %s" -#: ../cli/src/devices.c:1366 +#: ../cli/src/devices.c:1372 msgid "WiFi scan list" msgstr "검색된 WiFi 목록" -#: ../cli/src/devices.c:1403 ../cli/src/devices.c:1457 -#: ../cli/src/devices.c:1664 +#: ../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 "오류: 하드웨어주소가 '%s'인 억세스 포인트를 찾을 수 없습니다." -#: ../cli/src/devices.c:1420 +#: ../cli/src/devices.c:1426 #, c-format msgid "Error: Device '%s' is not a WiFi device." msgstr "오류: '%s' 장치는 WiFi 장치가 아닙니다." -#: ../cli/src/devices.c:1484 +#: ../cli/src/devices.c:1490 #, c-format msgid "Error: 'dev wifi' command '%s' is not valid." msgstr "오류 'dev wifi' 명령어 '%s'이(가) 바르지 않습니다." -#: ../cli/src/devices.c:1560 +#: ../cli/src/devices.c:1566 #, c-format msgid "Error: 'dev wimax': %s" msgstr "오류: 'dev wimax': '%s'" -#: ../cli/src/devices.c:1562 +#: ../cli/src/devices.c:1568 #, c-format msgid "Error: 'dev wimax': %s; allowed fields: %s" msgstr "오류: 'dev wimax': %s. 허용되는 필드: %s" -#: ../cli/src/devices.c:1585 +#: ../cli/src/devices.c:1591 msgid "WiMAX NSP list" msgstr "WiMAX NSP 목록" -#: ../cli/src/devices.c:1622 +#: ../cli/src/devices.c:1628 #, c-format msgid "Error: NSP with name '%s' not found." msgstr "오류: 이름이 '%s'인 NSP를 찾을 수 없습니다." -#: ../cli/src/devices.c:1633 +#: ../cli/src/devices.c:1639 #, c-format msgid "Error: Device '%s' is not a WiMAX device." msgstr "오류: '%s' 장치는 와이맥스 장치가 아닙니다." -#: ../cli/src/devices.c:1691 +#: ../cli/src/devices.c:1697 #, c-format msgid "Error: 'dev wimax' command '%s' is not valid." msgstr "오류 'dev wimax' 명령어 '%s'이(가) 바르지 않습니다." -#: ../cli/src/devices.c:1741 +#: ../cli/src/devices.c:1747 #, c-format msgid "Error: 'dev' command '%s' is not valid." msgstr "오류: 'dev' 명령어 '%s'이(가) 바르지 않습니다." -#: ../cli/src/network-manager.c:35 +#: ../cli/src/network-manager.c:37 msgid "RUNNING" msgstr "실행중" #. 0 -#: ../cli/src/network-manager.c:36 +#: ../cli/src/network-manager.c:38 msgid "VERSION" msgstr "버전" #. 2 -#: ../cli/src/network-manager.c:38 +#: ../cli/src/network-manager.c:40 msgid "NET-ENABLED" msgstr "네트워크 사용" #. 3 -#: ../cli/src/network-manager.c:39 +#: ../cli/src/network-manager.c:41 msgid "WIFI-HARDWARE" msgstr "WIFI 하드웨어" #. 4 -#: ../cli/src/network-manager.c:40 +#: ../cli/src/network-manager.c:42 msgid "WIFI" msgstr "WIFI" #. 5 -#: ../cli/src/network-manager.c:41 +#: ../cli/src/network-manager.c:43 msgid "WWAN-HARDWARE" msgstr "WWAN 하드웨어" #. 6 -#: ../cli/src/network-manager.c:42 +#: ../cli/src/network-manager.c:44 msgid "WWAN" msgstr "WWAN" #. 7 -#: ../cli/src/network-manager.c:43 +#: ../cli/src/network-manager.c:45 msgid "WIMAX-HARDWARE" msgstr "와이맥스 하드웨어" #. 8 -#: ../cli/src/network-manager.c:44 +#: ../cli/src/network-manager.c:46 msgid "WIMAX" msgstr "와이맥스" -#: ../cli/src/network-manager.c:72 +#: ../cli/src/network-manager.c:74 #, c-format msgid "" "Usage: nmcli nm { COMMAND | help }\n" @@ -1044,136 +1044,136 @@ msgstr "" " wimax [on|off]\n" "\n" -#: ../cli/src/network-manager.c:101 +#: ../cli/src/network-manager.c:103 msgid "asleep" msgstr "사용 일시 중지" -#: ../cli/src/network-manager.c:103 +#: ../cli/src/network-manager.c:105 msgid "connecting" msgstr "연결" -#: ../cli/src/network-manager.c:105 +#: ../cli/src/network-manager.c:107 msgid "connected (local only)" msgstr "연결됨 (로컬 전용)" -#: ../cli/src/network-manager.c:107 +#: ../cli/src/network-manager.c:109 msgid "connected (site only)" msgstr "연결됨 (사이트 전용)" -#: ../cli/src/network-manager.c:111 +#: ../cli/src/network-manager.c:113 msgid "disconnecting" msgstr "연결 끊는 중" -#: ../cli/src/network-manager.c:151 +#: ../cli/src/network-manager.c:153 #, c-format msgid "Error: 'nm status': %s" msgstr "오류: 'nm status': %s" -#: ../cli/src/network-manager.c:153 +#: ../cli/src/network-manager.c:155 #, c-format msgid "Error: 'nm status': %s; allowed fields: %s" msgstr "오류: 'nm status': %s. 허용되는 필드: %s" #. create NMClient -#: ../cli/src/network-manager.c:166 ../cli/src/network-manager.c:167 #: ../cli/src/network-manager.c:168 ../cli/src/network-manager.c:169 -#: ../cli/src/network-manager.c:170 ../cli/src/network-manager.c:172 -#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:294 -#: ../cli/src/network-manager.c:349 ../cli/src/network-manager.c:387 -#: ../cli/src/network-manager.c:426 +#: ../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 "사용" -#: ../cli/src/network-manager.c:166 ../cli/src/network-manager.c:167 #: ../cli/src/network-manager.c:168 ../cli/src/network-manager.c:169 -#: ../cli/src/network-manager.c:170 ../cli/src/network-manager.c:172 -#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:294 -#: ../cli/src/network-manager.c:349 ../cli/src/network-manager.c:387 -#: ../cli/src/network-manager.c:426 +#: ../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 "사용 않음" -#: ../cli/src/network-manager.c:186 +#: ../cli/src/network-manager.c:188 msgid "NetworkManager status" msgstr "네트워크 관리 상태" #. Print header -#: ../cli/src/network-manager.c:189 +#: ../cli/src/network-manager.c:191 msgid "running" msgstr "실행 중" -#: ../cli/src/network-manager.c:189 +#: ../cli/src/network-manager.c:191 msgid "not running" msgstr "실행 중이 아님" -#: ../cli/src/network-manager.c:220 ../cli/src/utils.c:322 +#: ../cli/src/network-manager.c:222 ../cli/src/utils.c:322 #, c-format msgid "Error: Couldn't connect to system bus: %s" msgstr "오류: 시스템 버스에 연결할 수 없습니다: %s" -#: ../cli/src/network-manager.c:231 +#: ../cli/src/network-manager.c:233 #, c-format msgid "Error: Couldn't create D-Bus object proxy." msgstr "오류: D-버스 오브젝트 프록시에 연결할 수 없습니다." -#: ../cli/src/network-manager.c:237 +#: ../cli/src/network-manager.c:239 #, c-format msgid "Error in sleep: %s" msgstr "일시 중지에 오류: %s" -#: ../cli/src/network-manager.c:281 ../cli/src/network-manager.c:336 -#: ../cli/src/network-manager.c:374 ../cli/src/network-manager.c:413 +#: ../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 "오류: '--fields' 값 '%s'은(는) 올바르지 않습니다. 허용되는 필드: %s" -#: ../cli/src/network-manager.c:289 +#: ../cli/src/network-manager.c:291 msgid "Networking enabled" msgstr "네트워크 사용" -#: ../cli/src/network-manager.c:305 +#: ../cli/src/network-manager.c:307 #, c-format msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'." msgstr "오류: 잘못된 'enable' 매개변수: '%s'. 'true'나 'false'를 사용하십시오." -#: ../cli/src/network-manager.c:315 +#: ../cli/src/network-manager.c:317 #, c-format msgid "Error: Sleeping status is not exported by NetworkManager." msgstr "오류: 네트워크 관리 프로그램이 일시 중지 상태를 알려 주지 않습니다." -#: ../cli/src/network-manager.c:323 +#: ../cli/src/network-manager.c:325 #, c-format msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'." msgstr "오류: 잘못된 'sleep' 매개변수: '%s'. 'true'나 'fasle'를 사용하십시오." -#: ../cli/src/network-manager.c:344 +#: ../cli/src/network-manager.c:346 msgid "WiFi enabled" msgstr "WiFi 사용 중" -#: ../cli/src/network-manager.c:360 +#: ../cli/src/network-manager.c:362 #, c-format msgid "Error: invalid 'wifi' parameter: '%s'." msgstr "오류: 잘못된 'wifi' 매개변수: '%s'." -#: ../cli/src/network-manager.c:382 +#: ../cli/src/network-manager.c:384 msgid "WWAN enabled" msgstr "WWAN 사용 중" -#: ../cli/src/network-manager.c:398 +#: ../cli/src/network-manager.c:400 #, c-format msgid "Error: invalid 'wwan' parameter: '%s'." msgstr "오류: 잘못된 'wwan' 매개변수: '%s'." -#: ../cli/src/network-manager.c:421 +#: ../cli/src/network-manager.c:423 msgid "WiMAX enabled" msgstr "와이맥스 사용 중" -#: ../cli/src/network-manager.c:437 +#: ../cli/src/network-manager.c:439 #, c-format msgid "Error: invalid 'wimax' parameter: '%s'." msgstr "오류: 잘못된 'wimax' 매개변수: '%s'." -#: ../cli/src/network-manager.c:450 +#: ../cli/src/network-manager.c:452 #, c-format msgid "Error: 'nm' command '%s' is not valid." msgstr "오류: 'mn' 명령어 '%s'이(가) 바르지 않습니다." @@ -1209,7 +1209,8 @@ msgstr "" " -m[ode] tabular|multiline 출력 모드\n" " -f[ields] <필드1,필드2,...>|all|common 출력 필드 지정\n" " -e[scape] yes|no 값에서 열 구분 문자를 이스케이프\n" -" -n[nocheck] nmcli 및 네트워크 관리 버전 검사하지 않기\n" +" -n[nocheck] nmcli 및 네트워크 관리 버전 검사하" +"지 않기\n" " -v[ersion] 프로그램 버전 정보 표시\n" " -h[elp] 이 도움말 표시\n" "\n" @@ -1282,79 +1283,79 @@ msgstr "오류: NMClient 오브젝트를 만들 수 없습니다." msgid "Success" msgstr "성공" -#: ../cli/src/settings.c:421 +#: ../cli/src/settings.c:423 #, c-format msgid "%d (hex-ascii-key)" msgstr "%d (16진 아시키 열쇠글)" -#: ../cli/src/settings.c:423 +#: ../cli/src/settings.c:425 #, c-format msgid "%d (104/128-bit passphrase)" msgstr "%d (104/128-비트 열쇠글)" -#: ../cli/src/settings.c:426 +#: ../cli/src/settings.c:428 #, c-format msgid "%d (unknown)" msgstr "%d (알 수 없음)" -#: ../cli/src/settings.c:452 +#: ../cli/src/settings.c:454 msgid "0 (unknown)" msgstr "0 (알 수 없음)" -#: ../cli/src/settings.c:458 +#: ../cli/src/settings.c:460 msgid "any, " msgstr "아무, " -#: ../cli/src/settings.c:460 +#: ../cli/src/settings.c:462 msgid "900 MHz, " msgstr "900 MHz, " -#: ../cli/src/settings.c:462 +#: ../cli/src/settings.c:464 msgid "1800 MHz, " msgstr "1800 MHz, " -#: ../cli/src/settings.c:464 +#: ../cli/src/settings.c:466 msgid "1900 MHz, " msgstr "1900 MHz, " -#: ../cli/src/settings.c:466 +#: ../cli/src/settings.c:468 msgid "850 MHz, " msgstr "850 MHz, " -#: ../cli/src/settings.c:468 +#: ../cli/src/settings.c:470 msgid "WCDMA 3GPP UMTS 2100 MHz, " msgstr "WCDMA 3GPP UMTS 2100 MHz, " -#: ../cli/src/settings.c:470 +#: ../cli/src/settings.c:472 msgid "WCDMA 3GPP UMTS 1800 MHz, " msgstr "WCDMA 3GPP UMTS 1800 MHz, " -#: ../cli/src/settings.c:472 +#: ../cli/src/settings.c:474 msgid "WCDMA 3GPP UMTS 1700/2100 MHz, " msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, " -#: ../cli/src/settings.c:474 +#: ../cli/src/settings.c:476 msgid "WCDMA 3GPP UMTS 800 MHz, " msgstr "WCDMA 3GPP UMTS 800 MHz, " -#: ../cli/src/settings.c:476 +#: ../cli/src/settings.c:478 msgid "WCDMA 3GPP UMTS 850 MHz, " msgstr "WCDMA 3GPP UMTS 850 MHz, " -#: ../cli/src/settings.c:478 +#: ../cli/src/settings.c:480 msgid "WCDMA 3GPP UMTS 900 MHz, " msgstr "WCDMA 3GPP UMTS 900 MHz, " -#: ../cli/src/settings.c:480 +#: ../cli/src/settings.c:482 msgid "WCDMA 3GPP UMTS 1700 MHz, " msgstr "WCDMA 3GPP UMTS 1700 MHz, " -#: ../cli/src/settings.c:564 ../cli/src/settings.c:730 +#: ../cli/src/settings.c:566 ../cli/src/settings.c:732 msgid "auto" msgstr "자동" -#: ../cli/src/settings.c:725 ../cli/src/settings.c:728 -#: ../cli/src/settings.c:729 ../cli/src/utils.c:176 +#: ../cli/src/settings.c:727 ../cli/src/settings.c:730 +#: ../cli/src/settings.c:731 ../cli/src/utils.c:176 msgid "not set" msgstr "설정 안됨" @@ -1393,350 +1394,381 @@ msgstr "오류: NameHasOwner 요청 실패: %s" msgid "" "Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --" "nocheck to suppress the warning.\n" -msgstr "경고: nmcli (%s) 및 네트워크 관리 (%s) 버전이 맞지 않습니다. 이 경고를 무시하려면 --nocheck 옵션을 사용하십시오.\n" +msgstr "" +"경고: nmcli (%s) 및 네트워크 관리 (%s) 버전이 맞지 않습니다. 이 경고를 무시하" +"려면 --nocheck 옵션을 사용하십시오.\n" #: ../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 "경고: nmcli (%s) 및 네트워크 관리 (%s) 버전이 맞지 않습니다. --nocheck 옵션을 사용했으므로 계속하지만, 예상치 못한 결과가 나타날 수 있습니다." +msgstr "" +"경고: nmcli (%s) 및 네트워크 관리 (%s) 버전이 맞지 않습니다. --nocheck 옵션" +"을 사용했으므로 계속하지만, 예상치 못한 결과가 나타날 수 있습니다." -#: ../libnm-util/crypto.c:121 +#: ../libnm-util/crypto.c:133 #, c-format msgid "PEM key file had no end tag '%s'." msgstr "PEM 키 파일에 끝 태그 '%s'이(가) 없습니다." -#: ../libnm-util/crypto.c:131 +#: ../libnm-util/crypto.c:146 #, c-format msgid "Doesn't look like a PEM private key file." msgstr "PEM 비밀 키 파일처럼 보이지 않습니다." -#: ../libnm-util/crypto.c:139 +#: ../libnm-util/crypto.c:154 #, c-format msgid "Not enough memory to store PEM file data." msgstr "PEM 파일 정보를 저장할 메모리가 부족합니다." -#: ../libnm-util/crypto.c:155 +#: ../libnm-util/crypto.c:170 #, c-format msgid "Malformed PEM file: Proc-Type was not first tag." msgstr "잘못된 형태의 PEM 파일: Proc-Type이 첫번째 태그가 아닙니다." -#: ../libnm-util/crypto.c:163 +#: ../libnm-util/crypto.c:178 #, c-format msgid "Malformed PEM file: unknown Proc-Type tag '%s'." msgstr "잘못된 형태의 PEM 파일: 알려져 있지 않은 Proc-Type 태그 '%s'." -#: ../libnm-util/crypto.c:173 +#: ../libnm-util/crypto.c:188 #, c-format msgid "Malformed PEM file: DEK-Info was not the second tag." msgstr "잘못된 형태의 PEM 파일: DEK-Info가 두번째 태그가 아님." -#: ../libnm-util/crypto.c:184 +#: ../libnm-util/crypto.c:199 #, c-format msgid "Malformed PEM file: no IV found in DEK-Info tag." msgstr "잘못된 형태의 PEM 파일: IV를 DEK-Info 태그에서 찾을 수 없음." -#: ../libnm-util/crypto.c:191 +#: ../libnm-util/crypto.c:206 #, c-format msgid "Malformed PEM file: invalid format of IV in DEK-Info tag." msgstr "잘못된 형태의 PEM 파일: DEK-Info 태그안에 잘못된 형태의 IV가 있음." -#: ../libnm-util/crypto.c:204 +#: ../libnm-util/crypto.c:219 #, c-format msgid "Malformed PEM file: unknown private key cipher '%s'." msgstr "잘못된 형태의 PEM 파일: 알려져 있지 않은 비밀 키 암호화 방법 '%s'." -#: ../libnm-util/crypto.c:223 +#: ../libnm-util/crypto.c:238 #, c-format msgid "Could not decode private key." msgstr "비밀 키를 해독할 수 없습니다." -#: ../libnm-util/crypto.c:268 -#, c-format -msgid "PEM certificate '%s' had no end tag '%s'." -msgstr "PEM 인증서 '%s'에 끝 태그 '%s'이(가) 없습니다." +#: ../libnm-util/crypto.c:284 +msgid "Failed to find expected PKCS#8 start tag." +msgstr "예상된 PKCS#8 시작 태그를 찾는데 실패하였습니다." -#: ../libnm-util/crypto.c:278 +#: ../libnm-util/crypto.c:292 #, c-format -msgid "Failed to decode certificate." -msgstr "인증서 해독에 실패했습니다." +msgid "Failed to find expected PKCS#8 end tag '%s'." +msgstr "예상된 PKCS#8 종료 태그 '%s' 를 찾는데 실패하였습니다." + +#: ../libnm-util/crypto.c:312 +msgid "Not enough memory to store private key data." +msgstr "개인 키 데이터를 저장할 메모리가 부족합니다." -#: ../libnm-util/crypto.c:287 +#: ../libnm-util/crypto.c:317 +msgid "Failed to decode PKCS#8 private key." +msgstr "PKCS#8 개 키를 해독하는 데 실패했습니다." + +#: ../libnm-util/crypto.c:339 ../libnm-util/crypto.c:625 #, c-format msgid "Not enough memory to store certificate data." msgstr "인증서 정보를 저장할 메모리가 부족합니다." -#: ../libnm-util/crypto.c:295 -#, c-format -msgid "Not enough memory to store file data." -msgstr "파일 정보를 저장할 메모리가 부족합니다." - -#: ../libnm-util/crypto.c:325 +#: ../libnm-util/crypto.c:365 #, c-format msgid "IV must be an even number of bytes in length." msgstr "IV의 길이는 짝수여야만 합니다." -#: ../libnm-util/crypto.c:334 +#: ../libnm-util/crypto.c:374 #, c-format msgid "Not enough memory to store the IV." msgstr "IV를 저장할 메모리가 부족합니다." -#: ../libnm-util/crypto.c:345 +#: ../libnm-util/crypto.c:385 #, c-format msgid "IV contains non-hexadecimal digits." msgstr "IV에 16진수 숫자가 아닌 문자가 있습니다." -#: ../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:423 ../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 "비밀 키 암호화 방식 '%s'이(가) 알려져 있지 않습니다." -#: ../libnm-util/crypto.c:392 +#: ../libnm-util/crypto.c:432 #, c-format msgid "Not enough memory to decrypt private key." msgstr "비밀 키를 해독할 메모리가 부족합니다." -#: ../libnm-util/crypto.c:512 +#: ../libnm-util/crypto.c:497 +#, c-format +msgid "Not enough memory to store decrypted private key." +msgstr "해독된 비밀 키를 저장할 메모리가 부족합니다." + +#: ../libnm-util/crypto.c:542 #, c-format msgid "Unable to determine private key type." msgstr "비밀 키 유형을 결정할 수 없습니다." -#: ../libnm-util/crypto.c:531 +#: ../libnm-util/crypto.c:597 #, c-format -msgid "Not enough memory to store decrypted private key." -msgstr "해독된 비밀 키를 저장할 메모리가 부족합니다." +msgid "PEM certificate had no start tag '%s'." +msgstr "PEM 인증서에 시작 태그 '%s'이(가) 없습니다." + +#: ../libnm-util/crypto.c:606 +#, c-format +msgid "PEM certificate had no end tag '%s'." +msgstr "PEM 인증서에 끝 태그 '%s'이(가) 없습니다." -#: ../libnm-util/crypto_gnutls.c:49 +#: ../libnm-util/crypto.c:630 +#, c-format +msgid "Failed to decode certificate." +msgstr "인증서 해독에 실패했습니다." + +#: ../libnm-util/crypto_gnutls.c:50 msgid "Failed to initialize the crypto engine." msgstr "암호화 엔진을 초기화하는 데 실패했습니다." -#: ../libnm-util/crypto_gnutls.c:93 +#: ../libnm-util/crypto_gnutls.c:92 #, c-format msgid "Failed to initialize the MD5 engine: %s / %s." msgstr "MD5 엔진을 초기화하는 데 실패했습니다: %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 "잘못된 IV 길이 (최소한 %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 "해독된 키 버퍼를 저장할 메모리가 부족합니다." -#: ../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 "암호 해독 문맥을 초기화하는 데 실패했습니다: %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 "해독을 위한 대칭 키를 설정하는 데 실패했습니다: %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 "해독을 위해 IV를 설정하는 데 실패했습니다: %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 "비밀 키를 해독하는 데 실패했습니다: %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 "비밀 키를 해독하는 데 실패했습니다: 예기치 못한 패딩 길이." -#: ../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 "비밀 키를 해독하는 데 실패했습니다." -#: ../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 "암호화를 위한 메모리를 할당할 수 없습니다." -#: ../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 "암호화 문맥을 초기화하는 데 실패했습니다: %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 "암호화를 위한 대칭키를 설정하는 데 실패했습니다: %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 "암호화를 위한 IV를 설정하는 데 실패했습니다: %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 "데이터를 암호화하는 데 실패했습니다: %s / %s." -#: ../libnm-util/crypto_gnutls.c:362 +#: ../libnm-util/crypto_gnutls.c:361 #, c-format msgid "Error initializing certificate data: %s" msgstr "인증서 정보를 초기화하는 중 오류가 발생했습니다: %s" -#: ../libnm-util/crypto_gnutls.c:384 +#: ../libnm-util/crypto_gnutls.c:383 #, c-format msgid "Couldn't decode certificate: %s" msgstr "인증서를 해독할 수 없습니다: %s" -#: ../libnm-util/crypto_gnutls.c:408 +#: ../libnm-util/crypto_gnutls.c:407 #, c-format msgid "Couldn't initialize PKCS#12 decoder: %s" msgstr "PKCS#12 복호기를 초기화할 수 없습니다: %s" -#: ../libnm-util/crypto_gnutls.c:421 +#: ../libnm-util/crypto_gnutls.c:420 #, c-format msgid "Couldn't decode PKCS#12 file: %s" msgstr "PKCS#12 파일을 해독할 수 없습니다: %s" -#: ../libnm-util/crypto_gnutls.c:433 +#: ../libnm-util/crypto_gnutls.c:432 #, c-format msgid "Couldn't verify PKCS#12 file: %s" msgstr "PKCS#12 파일을 검증할 수 없습니다: %s" +#: ../libnm-util/crypto_gnutls.c:460 +#, c-format +msgid "Couldn't initialize PKCS#8 decoder: %s" +msgstr "PKCS#12 복호기를 초기화할 수 없습니다: %s" + +#: ../libnm-util/crypto_gnutls.c:483 +#, c-format +msgid "Couldn't decode PKCS#8 file: %s" +msgstr "PKCS#12 파일을 해독할 수 없습니다: %s" + #: ../libnm-util/crypto_nss.c:56 #, c-format msgid "Failed to initialize the crypto engine: %d." msgstr "암호화 엔진을 초기화하는 데 실패했습니다: %d." -#: ../libnm-util/crypto_nss.c:111 +#: ../libnm-util/crypto_nss.c:107 #, c-format msgid "Failed to initialize the MD5 context: %d." msgstr "MD5 문맥을 초기화하는 데 실패했습니다: %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 "잘못된 IV 길이입니다(최소한 %d 이상이어야 함)." -#: ../libnm-util/crypto_nss.c:196 +#: ../libnm-util/crypto_nss.c:192 #, c-format msgid "Failed to initialize the decryption cipher slot." msgstr "해독용 암호 슬롯을 할당하는 데 실패했습니다." -#: ../libnm-util/crypto_nss.c:206 +#: ../libnm-util/crypto_nss.c:202 #, c-format msgid "Failed to set symmetric key for decryption." msgstr "해독을 위한 대칭키를 설정하는 데 실패했습니다." -#: ../libnm-util/crypto_nss.c:216 +#: ../libnm-util/crypto_nss.c:212 #, c-format msgid "Failed to set IV for decryption." msgstr "해독을 위한 IV를 설정하는 데 실패했습니다." -#: ../libnm-util/crypto_nss.c:224 +#: ../libnm-util/crypto_nss.c:220 #, c-format msgid "Failed to initialize the decryption context." msgstr "해독 문맥을 초기화하는 데 실패했습니다." -#: ../libnm-util/crypto_nss.c:237 +#: ../libnm-util/crypto_nss.c:233 #, c-format msgid "Failed to decrypt the private key: %d." msgstr "비밀 키를 해독하는 데 실패했습니다: %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 "비밀 키를 해독하는 데 실패했습니다: 해독 데이터가 너무 큽니다." -#: ../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 "비밀 키의 해독을 마무리하는 데 실패했습니다: %d." -#: ../libnm-util/crypto_nss.c:364 +#: ../libnm-util/crypto_nss.c:360 #, c-format msgid "Failed to initialize the encryption cipher slot." msgstr "암호화 암호 슬롯을 초기화하는 데 실패했습니다." -#: ../libnm-util/crypto_nss.c:372 +#: ../libnm-util/crypto_nss.c:368 #, c-format msgid "Failed to set symmetric key for encryption." msgstr "암호화를 위한 대칭키를 설정하는 데 실패했습니다." -#: ../libnm-util/crypto_nss.c:380 +#: ../libnm-util/crypto_nss.c:376 #, c-format msgid "Failed to set IV for encryption." msgstr "암호화를 위한 IV를 설정하는 데 실패했습니다." -#: ../libnm-util/crypto_nss.c:388 +#: ../libnm-util/crypto_nss.c:384 #, c-format msgid "Failed to initialize the encryption context." msgstr "암호화 문맥을 초기화하는 데 실패했습니다." -#: ../libnm-util/crypto_nss.c:396 +#: ../libnm-util/crypto_nss.c:392 #, c-format msgid "Failed to encrypt: %d." msgstr "암호화에 실패했습니다: %d." -#: ../libnm-util/crypto_nss.c:404 +#: ../libnm-util/crypto_nss.c:400 #, c-format msgid "Unexpected amount of data after encrypting." msgstr "암호화 후 데이터 크기가 예상과 다릅니다." -#: ../libnm-util/crypto_nss.c:447 +#: ../libnm-util/crypto_nss.c:443 #, c-format msgid "Couldn't decode certificate: %d" msgstr "인증서를 복호화할 수 없습니다: %d." -#: ../libnm-util/crypto_nss.c:482 +#: ../libnm-util/crypto_nss.c:478 #, c-format msgid "Couldn't convert password to UCS2: %d" msgstr "암호를 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 "PKCS#12 복호기를 초기화할 수 없습니다: %d" -#: ../libnm-util/crypto_nss.c:519 +#: ../libnm-util/crypto_nss.c:515 #, c-format msgid "Couldn't decode PKCS#12 file: %d" msgstr "PKCS#12 파일을 복호화할 수 없습니다: %d" -#: ../libnm-util/crypto_nss.c:528 +#: ../libnm-util/crypto_nss.c:524 #, c-format msgid "Couldn't verify PKCS#12 file: %d" msgstr "PKCS#12 파일을 검증할 수 없습니다: %d" -#: ../libnm-util/crypto_nss.c:557 +#: ../libnm-util/crypto_nss.c:568 msgid "Could not generate random data." msgstr "랜덤 데이터를 생성할 수 없습니다." -#: ../libnm-util/nm-utils.c:1988 +#: ../libnm-util/nm-utils.c:2000 #, c-format msgid "Not enough memory to make encryption key." msgstr "암호화 키를 생성할 메모리가 부족합니다." -#: ../libnm-util/nm-utils.c:2098 +#: ../libnm-util/nm-utils.c:2110 msgid "Could not allocate memory for PEM file creation." msgstr "PEM 파일 생성을 위한 메모리를 할당할 수 없습니다." -#: ../libnm-util/nm-utils.c:2110 +#: ../libnm-util/nm-utils.c:2122 #, c-format msgid "Could not allocate memory for writing IV to PEM file." msgstr "IV를 PEM 파일에 쓰기 위한 메모리를 할당할 수 없습니다." -#: ../libnm-util/nm-utils.c:2122 +#: ../libnm-util/nm-utils.c:2134 #, c-format msgid "Could not allocate memory for writing encrypted key to PEM file." msgstr "암호화된 키를 PEM 파일에 기록하기 위한 메모리를 할당할 수 없습니다." -#: ../libnm-util/nm-utils.c:2141 +#: ../libnm-util/nm-utils.c:2153 #, c-format msgid "Could not allocate memory for PEM file data." msgstr "PEM 파일 데이터를 위한 메모리를 할당할 수 없습니다." @@ -1785,7 +1817,9 @@ msgstr "개인 네트워크 연결을 수정합니다" msgid "" "Put NetworkManager to sleep or wake it up (should only be used by system " "power management)" -msgstr "네트워크 관리 프로그램을 일시 중지하거나 다시 시작합니다 (시스템 전원 관리에서만 사용)" +msgstr "" +"네트워크 관리 프로그램을 일시 중지하거나 다시 시작합니다 (시스템 전원 관리에" +"서만 사용)" #: ../policy/org.freedesktop.NetworkManager.policy.in.h:12 msgid "System policy prevents control of network connections" @@ -1798,7 +1832,8 @@ msgstr "시스템 정책이 WiFi 장치 사용 여부 설정을 금지합니다" #: ../policy/org.freedesktop.NetworkManager.policy.in.h:14 msgid "" "System policy prevents enabling or disabling WiMAX mobile broadband devices" -msgstr "시스템 정책이 와이맥스 모바일 광대역 장치의 사용 여부 설정을 금지합니다" +msgstr "" +"시스템 정책이 와이맥스 모바일 광대역 장치의 사용 여부 설정을 금지합니다" #: ../policy/org.freedesktop.NetworkManager.policy.in.h:15 msgid "System policy prevents enabling or disabling mobile broadband devices" @@ -1822,7 +1857,8 @@ msgstr "시스템 정책이 호스트 이름의 변경을 금지합니다" #: ../policy/org.freedesktop.NetworkManager.policy.in.h:20 msgid "System policy prevents putting NetworkManager to sleep or waking it up" -msgstr "시스템 정책이 네트워크 관리 프로그램의 일시 중지나 다시 시작을 금지합니다" +msgstr "" +"시스템 정책이 네트워크 관리 프로그램의 일시 중지나 다시 시작을 금지합니다" #: ../policy/org.freedesktop.NetworkManager.policy.in.h:21 msgid "System policy prevents sharing connections via a protected WiFi network" @@ -1832,12 +1868,12 @@ msgstr "시스템 정책이 보호된 WiFi 네트워크를 통한 연결 공유 msgid "System policy prevents sharing connections via an open WiFi network" msgstr "시스템 정책이 열린 WiFi 네트워크를 통한 연결 공유를 금지합니다" -#: ../src/main.c:519 +#: ../src/main.c:530 #, c-format msgid "Invalid option. Please use --help to see a list of valid options.\n" msgstr "잘못된 옵션. 올바른 옵션의 목록을 보려면 --help 옵션을 이용하십시오.\n" -#: ../src/main.c:590 +#: ../src/main.c:611 #, c-format msgid "%s. Please use --help to see a list of valid options.\n" msgstr "%s. 올바른 옵션의 목록을 보려면 --help 옵션을 이용하십시오.\n" @@ -1851,7 +1887,9 @@ msgstr "# 네트워크 관리에서 만들어 냄\n" msgid "" "# Merged from %s\n" "\n" -msgstr "# %s에서 합침\n\n" +msgstr "" +"# %s에서 합침\n" +"\n" #: ../src/dhcp-manager/nm-dhcp-manager.c:284 msgid "no usable DHCP client could be found." @@ -1870,61 +1908,61 @@ msgstr "'dhcpcd'를 찾을 수 있습니다." msgid "unsupported DHCP client '%s'" msgstr "지원하지 않는 DHCP 클라이언트 '%s'" -#: ../src/dns-manager/nm-dns-manager.c:367 +#: ../src/dns-manager/nm-dns-manager.c:369 msgid "NOTE: the libc resolver may not support more than 3 nameservers." msgstr "" "주의: libc 주소 검색은 3개를 초과하는 네임서버를 지원하지 않을 수 있습니다." -#: ../src/dns-manager/nm-dns-manager.c:369 +#: ../src/dns-manager/nm-dns-manager.c:371 msgid "The nameservers listed below may not be recognized." msgstr "아래 열거된 네임서버를 인식하지 못할 수 있습니다." -#: ../src/logging/nm-logging.c:148 +#: ../src/logging/nm-logging.c:149 #, c-format msgid "Unknown log level '%s'" msgstr "알려지지 않은 로그 수준 '%s'" -#: ../src/logging/nm-logging.c:173 +#: ../src/logging/nm-logging.c:174 #, c-format msgid "Unknown log domain '%s'" msgstr "알려지지 않은 로그 영역 '%s'" -#: ../src/modem-manager/nm-modem-cdma.c:311 ../src/nm-device-bt.c:353 +#: ../src/modem-manager/nm-modem-cdma.c:296 ../src/nm-device-bt.c:355 #, c-format msgid "CDMA connection %d" msgstr "CDMA 연결 %d" -#: ../src/modem-manager/nm-modem-gsm.c:514 ../src/nm-device-bt.c:349 +#: ../src/modem-manager/nm-modem-gsm.c:499 ../src/nm-device-bt.c:351 #, c-format msgid "GSM connection %d" msgstr "GSM 연결 %d" -#: ../src/nm-device-bt.c:324 +#: ../src/nm-device-bt.c:326 #, c-format msgid "PAN connection %d" msgstr "PAN 연결 %d" -#: ../src/nm-device-bt.c:357 +#: ../src/nm-device-bt.c:359 #, c-format msgid "DUN connection %d" msgstr "DUN 연결 %d" -#: ../src/nm-device-ethernet.c:1684 +#: ../src/nm-device-ethernet.c:1681 #, c-format msgid "PPPoE connection %d" msgstr "PPPoE 연결 %d" -#: ../src/nm-device-ethernet.c:1684 +#: ../src/nm-device-ethernet.c:1681 ../src/settings/nm-settings-utils.c:50 #, c-format msgid "Wired connection %d" msgstr "유선 연결 %d" -#: ../src/nm-device-olpc-mesh.c:422 +#: ../src/nm-device-olpc-mesh.c:423 #, c-format msgid "Mesh %d" msgstr "메시 %d" -#: ../src/nm-manager.c:686 +#: ../src/nm-manager.c:655 #, c-format msgid "VPN connection %d" msgstr "VPN 연결 %d" @@ -1969,12 +2007,13 @@ msgstr "네트링크 그룹에 합류할 수 없습니다: %s" msgid "error updating link cache: %s" msgstr "네트링크 캐시를 갱신하는 중 오류가 발생했습니다: %s" -#: ../src/settings/plugins/ifcfg-rh/reader.c:3439 -#: ../src/settings/plugins/ifnet/connection_parser.c:49 +#: ../src/settings/plugins/ifcfg-rh/reader.c:3512 +#: ../src/settings/plugins/ifnet/connection_parser.c:51 msgid "System" msgstr "시스템" -#: ../src/settings/nm-default-wired-connection.c:143 -#, c-format -msgid "Auto %s" -msgstr "자동 %s" +#~ msgid "Error: Obtaining active connection for '%s' failed." +#~ msgstr "오류: '%s'에 대한 활성화된 연결을 얻는 데 실패했습니다." + +#~ msgid "Auto %s" +#~ msgstr "자동 %s" diff --git a/po/ru.po b/po/ru.po index 5dc18f38..a4ea1406 100644 --- a/po/ru.po +++ b/po/ru.po @@ -2,967 +2,1183 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # +# # Leonid Kanter , 2006, 2007. # Артём Попов , 2009. # Yulia , 2010. +# Sergey Isachenko aka Zabuldon , 2011. +# Yuri Kozlov , 2011. msgid "" msgstr "" "Project-Id-Version: ru\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-05-06 14:31+0530\n" -"PO-Revision-Date: 2010-05-19 12:20+1000\n" -"Last-Translator: \n" -"Language-Team: Russian\n" +"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" +"product=NetworkManager&keywords=I18N+L10N&component=general\n" +"POT-Creation-Date: 2011-05-31 03:25+0000\n" +"PO-Revision-Date: 2011-06-17 20:37+0400\n" +"Last-Translator: Yuri Kozlov \n" +"Language-Team: Russian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Content-Transfer-Encoding: 8bits\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" "X-Launchpad-Export-Date: 2009-02-12 11:00+0000\n" -"X-Generator: KBabel 1.11.4\n" +"X-Generator: Lokalize 1.0\n" -#: ../cli/src/connections.c:59 ../cli/src/connections.c:74 -#: ../cli/src/devices.c:85 ../cli/src/devices.c:98 ../cli/src/devices.c:108 -#: ../cli/src/devices.c:118 ../cli/src/devices.c:131 ../cli/src/devices.c:142 -#: ../cli/src/devices.c:152 +#: ../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 "ИМЯ" #. 0 -#: ../cli/src/connections.c:60 ../cli/src/connections.c:75 +#: ../cli/src/connections.c:65 ../cli/src/connections.c:79 msgid "UUID" msgstr "UUID" #. 1 -#: ../cli/src/connections.c:61 +#: ../cli/src/connections.c:66 msgid "DEVICES" msgstr "УСТРОЙСТВА" #. 2 -#: ../cli/src/connections.c:62 ../cli/src/connections.c:77 -msgid "SCOPE" -msgstr "ОБЛАСТЬ" - -#. 3 -#: ../cli/src/connections.c:63 +#: ../cli/src/connections.c:67 msgid "DEFAULT" msgstr "ПО УМОЛЧАНИЮ" -#. 4 -#: ../cli/src/connections.c:64 -msgid "DBUS-SERVICE" -msgstr "СЛУЖБА DBUS" - -#. 5 -#: ../cli/src/connections.c:65 +#. 3 +#: ../cli/src/connections.c:68 msgid "SPEC-OBJECT" msgstr "SPEC-OBJECT" -#. 6 -#: ../cli/src/connections.c:66 +#. 4 +#: ../cli/src/connections.c:69 msgid "VPN" msgstr "VPN" +#. 5 +#. 6 +#. 2 +#. 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-PATH" + #. 1 #. 0 #. 1 -#: ../cli/src/connections.c:76 ../cli/src/devices.c:61 ../cli/src/devices.c:87 +#. 2 +#: ../cli/src/connections.c:80 ../cli/src/devices.c:67 +#: ../cli/src/devices.c:103 ../cli/src/devices.c:227 msgid "TYPE" msgstr "ТИП" -#. 3 -#: ../cli/src/connections.c:78 +#. 2 +#: ../cli/src/connections.c:81 msgid "TIMESTAMP" msgstr "ВРЕМЕННАЯ МЕТКА" -#. 4 -#: ../cli/src/connections.c:79 +#. 3 +#: ../cli/src/connections.c:82 msgid "TIMESTAMP-REAL" msgstr "ДЕЙСТВ. ВРЕМЕННАЯ МЕТКА" -#. 5 -#: ../cli/src/connections.c:80 +#. 4 +#: ../cli/src/connections.c:83 msgid "AUTOCONNECT" msgstr "АВТОПОДКЛЮЧЕНИЕ" -#. 6 -#: ../cli/src/connections.c:81 +#. 5 +#: ../cli/src/connections.c:84 msgid "READONLY" msgstr "ТОЛЬКО ДЛЯ ЧТЕНИЯ" -#: ../cli/src/connections.c:157 +#: ../cli/src/connections.c:167 #, c-format msgid "" "Usage: nmcli con { COMMAND | help }\n" " COMMAND := { list | status | up | down }\n" "\n" -" list [id | uuid | system | user]\n" +" list [id | uuid ]\n" " status\n" +" up id | uuid [iface ] [ap ] [nsp ] [--" +"nowait] [--timeout ]\n" " up id | uuid [iface ] [ap ] [--nowait] [--timeout " "]\n" " down id | uuid \n" msgstr "" -"Применение: nmcli con { КОМАНДА | help }\n" +"Использование: nmcli con { КОМАНДА | help }\n" " КОМАНДА := { list | status | up | down }\n" "\n" -" list [id | uuid | system | user]\n" +" list [id | uuid ]\n" " status\n" -" up id | uuid [iface ] [ap ] [--nowait] [--timeout " -"]\n" +" up id | uuid [iface <интерфейс>] [ap <апп.адр.>] [nsp <имя>] [--" +"nowait] [--timeout <ожидание>]\n" +" up id | uuid [iface <интерфейс>] [ap <апп.адр.>] [--nowait] [--" +"timeout <ожидание>]\n" " down id | uuid \n" -#: ../cli/src/connections.c:197 ../cli/src/connections.c:536 +#: ../cli/src/connections.c:220 ../cli/src/connections.c:544 #, c-format msgid "Error: 'con list': %s" -msgstr "Ошибка: 'con list': %s" +msgstr "Ошибка: «con list»: %s" -#: ../cli/src/connections.c:199 ../cli/src/connections.c:538 +#: ../cli/src/connections.c:222 ../cli/src/connections.c:546 #, c-format msgid "Error: 'con list': %s; allowed fields: %s" -msgstr "Ошибка: 'con list': %s; разрешённые поля: %s" +msgstr "Ошибка: «con list»: %s; разрешённые поля: %s" -#: ../cli/src/connections.c:207 +#: ../cli/src/connections.c:230 msgid "Connection details" msgstr "Сведения о соединении" -#: ../cli/src/connections.c:381 ../cli/src/connections.c:601 -msgid "system" -msgstr "система" - -#: ../cli/src/connections.c:381 ../cli/src/connections.c:601 -msgid "user" -msgstr "пользователь" - -#: ../cli/src/connections.c:383 +#: ../cli/src/connections.c:419 msgid "never" msgstr "никогда" #. "CAPABILITIES" #. Print header #. "WIFI-PROPERTIES" -#: ../cli/src/connections.c:384 ../cli/src/connections.c:385 -#: ../cli/src/connections.c:602 ../cli/src/connections.c:605 -#: ../cli/src/devices.c:388 ../cli/src/devices.c:513 ../cli/src/devices.c:539 -#: ../cli/src/devices.c:540 ../cli/src/devices.c:541 ../cli/src/devices.c:542 -#: ../cli/src/devices.c:543 ../cli/src/settings.c:504 -#: ../cli/src/settings.c:544 ../cli/src/settings.c:643 -#: ../cli/src/settings.c:912 ../cli/src/settings.c:913 -#: ../cli/src/settings.c:915 ../cli/src/settings.c:917 -#: ../cli/src/settings.c:1042 ../cli/src/settings.c:1043 -#: ../cli/src/settings.c:1044 ../cli/src/settings.c:1123 -#: ../cli/src/settings.c:1124 ../cli/src/settings.c:1125 -#: ../cli/src/settings.c:1126 ../cli/src/settings.c:1127 -#: ../cli/src/settings.c:1128 ../cli/src/settings.c:1129 -#: ../cli/src/settings.c:1130 ../cli/src/settings.c:1131 -#: ../cli/src/settings.c:1132 ../cli/src/settings.c:1133 -#: ../cli/src/settings.c:1134 ../cli/src/settings.c:1135 -#: ../cli/src/settings.c:1210 +#: ../cli/src/connections.c:420 ../cli/src/connections.c:421 +#: ../cli/src/connections.c:599 ../cli/src/connections.c:601 +#: ../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 "да" -#: ../cli/src/connections.c:384 ../cli/src/connections.c:385 -#: ../cli/src/connections.c:602 ../cli/src/connections.c:605 -#: ../cli/src/devices.c:388 ../cli/src/devices.c:513 ../cli/src/devices.c:539 -#: ../cli/src/devices.c:540 ../cli/src/devices.c:541 ../cli/src/devices.c:542 -#: ../cli/src/devices.c:543 ../cli/src/settings.c:504 -#: ../cli/src/settings.c:506 ../cli/src/settings.c:544 -#: ../cli/src/settings.c:643 ../cli/src/settings.c:912 -#: ../cli/src/settings.c:913 ../cli/src/settings.c:915 -#: ../cli/src/settings.c:917 ../cli/src/settings.c:1042 -#: ../cli/src/settings.c:1043 ../cli/src/settings.c:1044 -#: ../cli/src/settings.c:1123 ../cli/src/settings.c:1124 -#: ../cli/src/settings.c:1125 ../cli/src/settings.c:1126 -#: ../cli/src/settings.c:1127 ../cli/src/settings.c:1128 -#: ../cli/src/settings.c:1129 ../cli/src/settings.c:1130 -#: ../cli/src/settings.c:1131 ../cli/src/settings.c:1132 -#: ../cli/src/settings.c:1133 ../cli/src/settings.c:1134 -#: ../cli/src/settings.c:1135 ../cli/src/settings.c:1210 +#: ../cli/src/connections.c:420 ../cli/src/connections.c:421 +#: ../cli/src/connections.c:599 ../cli/src/connections.c:601 +#: ../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 "нет" -#: ../cli/src/connections.c:457 ../cli/src/connections.c:500 -msgid "System connections" -msgstr "Соединения систем" - -#: ../cli/src/connections.c:462 ../cli/src/connections.c:513 -msgid "User connections" -msgstr "Соединения пользователя" +#: ../cli/src/connections.c:495 +msgid "Connection list" +msgstr "Список подключений" -#: ../cli/src/connections.c:474 ../cli/src/connections.c:1334 -#: ../cli/src/connections.c:1350 ../cli/src/connections.c:1359 -#: ../cli/src/connections.c:1370 ../cli/src/connections.c:1452 -#: ../cli/src/devices.c:864 ../cli/src/devices.c:874 ../cli/src/devices.c:973 -#: ../cli/src/devices.c:980 +#: ../cli/src/connections.c:508 ../cli/src/connections.c:1380 +#: ../cli/src/connections.c:1395 ../cli/src/connections.c:1404 +#: ../cli/src/connections.c:1414 ../cli/src/connections.c:1426 +#: ../cli/src/connections.c:1521 ../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 "Ошибка: отсутствует аргумент %s" +msgstr "Ошибка: отсутствует аргумент %s." -#: ../cli/src/connections.c:487 +#: ../cli/src/connections.c:521 #, c-format msgid "Error: %s - no such connection." -msgstr "Ошибка: нет подключения %s" +msgstr "Ошибка: неизвестное подключение %s." -#: ../cli/src/connections.c:519 ../cli/src/connections.c:1383 -#: ../cli/src/connections.c:1470 ../cli/src/devices.c:687 -#: ../cli/src/devices.c:754 ../cli/src/devices.c:888 ../cli/src/devices.c:986 +#: ../cli/src/connections.c:527 ../cli/src/connections.c:1439 +#: ../cli/src/connections.c:1538 ../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 "Неизвестный параметр: %s\n" -#: ../cli/src/connections.c:528 +#: ../cli/src/connections.c:536 #, c-format msgid "Error: no valid parameter specified." -msgstr "Ошибка: не указан допустимый параметр." +msgstr "Ошибка: указан недопустимый параметр." -#: ../cli/src/connections.c:543 ../cli/src/connections.c:1572 -#: ../cli/src/devices.c:1192 ../cli/src/network-manager.c:274 +#: ../cli/src/connections.c:551 ../cli/src/connections.c:1629 +#: ../cli/src/devices.c:1755 ../cli/src/network-manager.c:463 #, c-format msgid "Error: %s." msgstr "Ошибка: %s." -#: ../cli/src/connections.c:649 +#: ../cli/src/connections.c:639 #, c-format msgid "Error: 'con status': %s" -msgstr "Ошибка: 'con status': %s" +msgstr "Ошибка: «con status»: %s" -#: ../cli/src/connections.c:651 +#: ../cli/src/connections.c:641 #, c-format msgid "Error: 'con status': %s; allowed fields: %s" -msgstr "Ошибка: 'con status': %s; разрешённые поля: %s" +msgstr "Ошибка: «con status»: %s; разрешённые поля: %s" -#: ../cli/src/connections.c:658 +#: ../cli/src/connections.c:649 ../cli/src/connections.c:1454 +#: ../cli/src/connections.c:1553 ../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 "Ошибка: не удалось проверить запущен ли NetworkManager: %s." + +#: ../cli/src/connections.c:653 ../cli/src/connections.c:1458 +#: ../cli/src/connections.c:1557 ../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 "Ошибка: NetworkManager не запущен." + +#: ../cli/src/connections.c:661 msgid "Active connections" msgstr "Активные соединения" -#: ../cli/src/connections.c:1026 +#: ../cli/src/connections.c:1097 #, c-format msgid "no active connection on device '%s'" msgstr "нет активных соединений на устройстве «%s»" -#: ../cli/src/connections.c:1034 +#: ../cli/src/connections.c:1105 #, c-format msgid "no active connection or device" msgstr "нет активного соединения или устройства" -#: ../cli/src/connections.c:1084 +#: ../cli/src/connections.c:1176 #, c-format msgid "device '%s' not compatible with connection '%s'" msgstr "устройство «%s» несовместимо с соединением «%s»" -#: ../cli/src/connections.c:1086 +#: ../cli/src/connections.c:1178 #, c-format msgid "no device found for connection '%s'" msgstr "не найдено устройство для соединения «%s»" -#: ../cli/src/connections.c:1097 +#: ../cli/src/connections.c:1189 msgid "activating" msgstr "активация" -#: ../cli/src/connections.c:1099 +#: ../cli/src/connections.c:1191 msgid "activated" msgstr "активно" -#: ../cli/src/connections.c:1102 ../cli/src/connections.c:1125 -#: ../cli/src/connections.c:1158 ../cli/src/devices.c:224 -#: ../cli/src/devices.c:514 ../cli/src/network-manager.c:92 -#: ../cli/src/network-manager.c:145 ../cli/src/settings.c:469 +#: ../cli/src/connections.c:1193 ../cli/src/devices.c:304 +msgid "deactivating" +msgstr "деактивация" + +#: ../cli/src/connections.c:1196 ../cli/src/connections.c:1219 +#: ../cli/src/connections.c:1252 ../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 "неизвестно" -#: ../cli/src/connections.c:1111 +#: ../cli/src/connections.c:1205 msgid "VPN connecting (prepare)" msgstr "Подключение VPN (подготовка)" -#: ../cli/src/connections.c:1113 +#: ../cli/src/connections.c:1207 msgid "VPN connecting (need authentication)" msgstr "Подключение VPN (требуется аутентификация)" -#: ../cli/src/connections.c:1115 +#: ../cli/src/connections.c:1209 msgid "VPN connecting" msgstr "Подключение VPN" -#: ../cli/src/connections.c:1117 +#: ../cli/src/connections.c:1211 msgid "VPN connecting (getting IP configuration)" -msgstr "Подключение VPN (получение конфигурации IP)" +msgstr "Подключение VPN (получение настроек IP)" -#: ../cli/src/connections.c:1119 +#: ../cli/src/connections.c:1213 msgid "VPN connected" -msgstr "VPN подключен" +msgstr "VPN подключён" -#: ../cli/src/connections.c:1121 +#: ../cli/src/connections.c:1215 msgid "VPN connection failed" msgstr "Сбой подключения VPN" -#: ../cli/src/connections.c:1123 +#: ../cli/src/connections.c:1217 msgid "VPN disconnected" -msgstr "VPN отключен" +msgstr "VPN отключён" -#: ../cli/src/connections.c:1134 +#: ../cli/src/connections.c:1228 msgid "unknown reason" msgstr "неизвестная причина" -#: ../cli/src/connections.c:1136 +#: ../cli/src/connections.c:1230 msgid "none" msgstr "нет" -#: ../cli/src/connections.c:1138 +#: ../cli/src/connections.c:1232 msgid "the user was disconnected" -msgstr "пользователь был отключен" +msgstr "пользователь был отключён" -#: ../cli/src/connections.c:1140 +#: ../cli/src/connections.c:1234 msgid "the base network connection was interrupted" msgstr "основное соединение с сетью было разорвано" -#: ../cli/src/connections.c:1142 +#: ../cli/src/connections.c:1236 msgid "the VPN service stopped unexpectedly" msgstr "служба VPN внезапно прекратила работу" -#: ../cli/src/connections.c:1144 +#: ../cli/src/connections.c:1238 msgid "the VPN service returned invalid configuration" msgstr "служба VPN вернула недопустимую конфигурацию" -#: ../cli/src/connections.c:1146 +#: ../cli/src/connections.c:1240 msgid "the connection attempt timed out" msgstr "время ожидания соединения истекло" -#: ../cli/src/connections.c:1148 +#: ../cli/src/connections.c:1242 msgid "the VPN service did not start in time" msgstr "служба VPN не была запущена вовремя" -#: ../cli/src/connections.c:1150 +#: ../cli/src/connections.c:1244 msgid "the VPN service failed to start" msgstr "не удалось запустить службу VPN" -#: ../cli/src/connections.c:1152 +#: ../cli/src/connections.c:1246 msgid "no valid VPN secrets" msgstr "нет верных секретов VPN" -#: ../cli/src/connections.c:1154 +#: ../cli/src/connections.c:1248 msgid "invalid VPN secrets" msgstr "неверные секреты VPN" -#: ../cli/src/connections.c:1156 +#: ../cli/src/connections.c:1250 msgid "the connection was removed" msgstr "соединение удалено" -#: ../cli/src/connections.c:1170 +#: ../cli/src/connections.c:1264 #, c-format msgid "state: %s\n" -msgstr "статус: %s\n" +msgstr "состояние: %s\n" -#: ../cli/src/connections.c:1173 ../cli/src/connections.c:1199 +#: ../cli/src/connections.c:1267 ../cli/src/connections.c:1293 #, c-format msgid "Connection activated\n" msgstr "Соединение активно\n" -#: ../cli/src/connections.c:1176 +#: ../cli/src/connections.c:1270 #, c-format msgid "Error: Connection activation failed." msgstr "Ошибка: сбой активации соединения." -#: ../cli/src/connections.c:1195 +#: ../cli/src/connections.c:1289 #, c-format msgid "state: %s (%d)\n" -msgstr "статус: %s (%d)\n" +msgstr "состояние: %s (%d)\n" -#: ../cli/src/connections.c:1205 +#: ../cli/src/connections.c:1299 #, c-format msgid "Error: Connection activation failed: %s." msgstr "Ошибка: сбой активации соединения: %s." -#: ../cli/src/connections.c:1222 ../cli/src/devices.c:811 +#: ../cli/src/connections.c:1316 ../cli/src/devices.c:1136 #, c-format msgid "Error: Timeout %d sec expired." -msgstr "Ошибка: превышено время ожидания: %d сек." +msgstr "Ошибка: превышено время ожидания — %d секунд." -#: ../cli/src/connections.c:1265 +#: ../cli/src/connections.c:1329 #, c-format msgid "Error: Connection activation failed: %s" msgstr "Ошибка: сбой активации соединения: %s" -#: ../cli/src/connections.c:1279 -#, c-format -msgid "Error: Obtaining active connection for '%s' failed." -msgstr "Ошибка: не удалось установить активное соединение для «%s»" - -#: ../cli/src/connections.c:1288 +#: ../cli/src/connections.c:1335 #, c-format msgid "Active connection state: %s\n" -msgstr "Статус активного соединения: %s\n" +msgstr "Состояние активного соединения: %s\n" -#: ../cli/src/connections.c:1289 +#: ../cli/src/connections.c:1336 #, c-format msgid "Active connection path: %s\n" msgstr "Путь активного соединения: %s\n" -#: ../cli/src/connections.c:1343 ../cli/src/connections.c:1461 +#: ../cli/src/connections.c:1388 ../cli/src/connections.c:1529 #, c-format msgid "Error: Unknown connection: %s." msgstr "Ошибка: неизвестное соединение: %s." -#: ../cli/src/connections.c:1378 ../cli/src/devices.c:882 +#: ../cli/src/connections.c:1434 ../cli/src/devices.c:1208 #, c-format msgid "Error: timeout value '%s' is not valid." -msgstr "Ошибка: недопустимое значение таймаута: «%s»" +msgstr "Ошибка: недопустимое значение ожидания: «%s»." -#: ../cli/src/connections.c:1391 ../cli/src/connections.c:1478 +#: ../cli/src/connections.c:1447 ../cli/src/connections.c:1546 #, c-format msgid "Error: id or uuid has to be specified." -msgstr "Ошибка: необходимо указать ID или UUID." +msgstr "Ошибка: необходимо указать id или uuid." -#: ../cli/src/connections.c:1411 +#: ../cli/src/connections.c:1475 #, c-format msgid "Error: No suitable device found: %s." msgstr "Ошибка: подходящее устройство не найдено: %s." -#: ../cli/src/connections.c:1413 +#: ../cli/src/connections.c:1477 #, c-format msgid "Error: No suitable device found." msgstr "Ошибка: подходящее устройство не найдено." -#: ../cli/src/connections.c:1505 +#: ../cli/src/connections.c:1582 #, c-format msgid "Warning: Connection not active\n" msgstr "Предупреждение: соединение не активно\n" -#: ../cli/src/connections.c:1561 +#: ../cli/src/connections.c:1620 #, c-format msgid "Error: 'con' command '%s' is not valid." msgstr "Ошибка: недопустимая команда «con»: «%s»" -#: ../cli/src/connections.c:1597 +#: ../cli/src/connections.c:1685 #, c-format msgid "Error: could not connect to D-Bus." msgstr "Ошибка: не удалось подключиться к D-Bus." -#: ../cli/src/connections.c:1604 +#: ../cli/src/connections.c:1692 #, c-format msgid "Error: Could not get system settings." msgstr "Ошибка: не удалось получить системные настройки." -#: ../cli/src/connections.c:1612 +#: ../cli/src/connections.c:1702 #, c-format -msgid "Error: Could not get user settings." -msgstr "Ошибка: не удалось получить настройки пользователя." - -#: ../cli/src/connections.c:1622 -#, c-format -msgid "Error: Can't obtain connections: settings services are not running." -msgstr "Ошибка: не удалось получить соединения, не выполняются службы настройки." +msgid "Error: Can't obtain connections: settings service is not running." +msgstr "Ошибка: не удалось получить подключение, службы настроек не запущена." #. 0 #. 9 -#: ../cli/src/devices.c:60 ../cli/src/devices.c:86 ../cli/src/devices.c:162 +#. 3 +#: ../cli/src/devices.c:66 ../cli/src/devices.c:102 ../cli/src/devices.c:212 +#: ../cli/src/devices.c:228 msgid "DEVICE" msgstr "УСТРОЙСТВО" #. 1 #. 4 -#. 0 -#: ../cli/src/devices.c:62 ../cli/src/devices.c:90 -#: ../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 "СТАТУС" +msgstr "СОСТОЯНИЕ" -#: ../cli/src/devices.c:71 +#: ../cli/src/devices.c:78 msgid "GENERAL" msgstr "ОБЩИЕ" #. 0 -#: ../cli/src/devices.c:72 +#: ../cli/src/devices.c:79 msgid "CAPABILITIES" msgstr "ВОЗМОЖНОСТИ" #. 1 -#: ../cli/src/devices.c:73 +#: ../cli/src/devices.c:80 msgid "WIFI-PROPERTIES" msgstr "СВОЙСТВА WIFI" #. 2 -#: ../cli/src/devices.c:74 +#: ../cli/src/devices.c:81 msgid "AP" -msgstr "ТОЧКА" +msgstr "ТД" #. 3 -#: ../cli/src/devices.c:75 +#: ../cli/src/devices.c:82 msgid "WIRED-PROPERTIES" msgstr "СВОЙСТВА ПРОВОДНОГО СОЕДИНЕНИЯ" #. 4 -#: ../cli/src/devices.c:76 +#: ../cli/src/devices.c:83 +msgid "WIMAX-PROPERTIES" +msgstr "СВОЙСТВА WIMAX" + +#. 5 +#. 0 +#: ../cli/src/devices.c:84 ../cli/src/devices.c:225 +msgid "NSP" +msgstr "NSP" + +#. 6 +#: ../cli/src/devices.c:85 msgid "IP4-SETTINGS" msgstr "ПАРАМЕТРЫ IP4" -#. 5 -#: ../cli/src/devices.c:77 +#. 7 +#: ../cli/src/devices.c:86 msgid "IP4-DNS" msgstr "IP4-DNS" -#. 2 +#. 8 +#: ../cli/src/devices.c:87 +msgid "IP6-SETTINGS" +msgstr "ПАРАМЕТРЫ IP6" + +#. 9 #: ../cli/src/devices.c:88 +msgid "IP6-DNS" +msgstr "IP6-DNS" + +#. 2 +#: ../cli/src/devices.c:104 msgid "DRIVER" msgstr "ДРАЙВЕР" #. 3 -#: ../cli/src/devices.c:89 +#: ../cli/src/devices.c:105 msgid "HWADDR" -msgstr "HWADDR" +msgstr "АПП.АДРЕС" #. 0 -#: ../cli/src/devices.c:99 +#: ../cli/src/devices.c:115 msgid "CARRIER-DETECT" -msgstr "ОПРЕД.НЕСУЩУЮ" +msgstr "ОПРЕД.НЕСУЩЕЙ" #. 1 -#: ../cli/src/devices.c:100 +#: ../cli/src/devices.c:116 msgid "SPEED" msgstr "СКОРОСТЬ" #. 0 -#: ../cli/src/devices.c:109 +#: ../cli/src/devices.c:125 msgid "CARRIER" msgstr "НЕСУЩАЯ" #. 0 -#: ../cli/src/devices.c:119 +#: ../cli/src/devices.c:135 msgid "WEP" msgstr "WEP" #. 1 -#: ../cli/src/devices.c:120 +#: ../cli/src/devices.c:136 msgid "WPA" msgstr "WPA" #. 2 -#: ../cli/src/devices.c:121 +#: ../cli/src/devices.c:137 msgid "WPA2" msgstr "WPA2" #. 3 -#: ../cli/src/devices.c:122 +#: ../cli/src/devices.c:138 msgid "TKIP" msgstr "TKIP" #. 4 -#: ../cli/src/devices.c:123 +#: ../cli/src/devices.c:139 msgid "CCMP" msgstr "CCMP" #. 0 -#: ../cli/src/devices.c:132 +#: ../cli/src/devices.c:149 +msgid "CTR-FREQ" +msgstr "CTR-FREQ" + +#. 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 "TX-POW" + +#. 4 +#: ../cli/src/devices.c:153 +msgid "BSID" +msgstr "BSID" + +#. 0 +#: ../cli/src/devices.c:163 ../cli/src/devices.c:174 msgid "ADDRESS" msgstr "АДРЕС" #. 1 -#: ../cli/src/devices.c:133 +#: ../cli/src/devices.c:164 ../cli/src/devices.c:175 msgid "PREFIX" msgstr "ПРЕФИКС" #. 2 -#: ../cli/src/devices.c:134 +#: ../cli/src/devices.c:165 ../cli/src/devices.c:176 msgid "GATEWAY" msgstr "ШЛЮЗ" #. 0 -#: ../cli/src/devices.c:143 +#: ../cli/src/devices.c:185 ../cli/src/devices.c:194 msgid "DNS" msgstr "DNS" #. 0 -#: ../cli/src/devices.c:153 +#: ../cli/src/devices.c:203 msgid "SSID" msgstr "SSID" #. 1 -#: ../cli/src/devices.c:154 +#: ../cli/src/devices.c:204 msgid "BSSID" msgstr "BSSID" #. 2 -#: ../cli/src/devices.c:155 +#: ../cli/src/devices.c:205 msgid "MODE" msgstr "РЕЖИМ" #. 3 -#: ../cli/src/devices.c:156 +#: ../cli/src/devices.c:206 msgid "FREQ" msgstr "ЧАСТОТА" #. 4 -#: ../cli/src/devices.c:157 +#: ../cli/src/devices.c:207 msgid "RATE" msgstr "СКОРОСТЬ" #. 5 -#: ../cli/src/devices.c:158 +#. 1 +#: ../cli/src/devices.c:208 ../cli/src/devices.c:226 msgid "SIGNAL" msgstr "СИГНАЛ" #. 6 -#: ../cli/src/devices.c:159 +#: ../cli/src/devices.c:209 msgid "SECURITY" msgstr "ЗАЩИТА" #. 7 -#: ../cli/src/devices.c:160 +#: ../cli/src/devices.c:210 msgid "WPA-FLAGS" msgstr "ФЛАГИ WPA" #. 8 -#: ../cli/src/devices.c:161 +#: ../cli/src/devices.c:211 msgid "RSN-FLAGS" msgstr "ФЛАГИ RSN" #. 10 -#: ../cli/src/devices.c:163 +#. 4 +#: ../cli/src/devices.c:213 ../cli/src/devices.c:229 msgid "ACTIVE" msgstr "АКТИВЕН" -#: ../cli/src/devices.c:186 +#: ../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 ]\n" " disconnect iface [--nowait] [--timeout ]\n" " wifi [list [iface ] [hwaddr ]]\n" +" wimax [list [iface ] [nsp ]]\n" "\n" msgstr "" -"Применение: nmcli dev { КОМАНДА | help }\n" +"Использование: nmcli dev { КОМАНДА | help }\n" +"\n" +" КОМАНДА := { status | list | disconnect | wifi | wimax }\n" "\n" " КОМАНДА := { status | list | disconnect | wifi }\n" "\n" " status\n" -" list [iface ]\n" -" disconnect iface [--nowait] [--timeout ]\n" -" wifi [list [iface ] [ waddr ]]\n" +" list [iface <интерфейс>]\n" +" disconnect iface <интерфейс> [--nowait] [--timeout <ожидание>]\n" +" wifi [list [iface <интерфейс>] [ hwaddr <апп.адр.>]]\n" +" wimax [list [iface <интерфейс>] [nsp <имя>]]\n" "\n" -#: ../cli/src/devices.c:206 +#: ../cli/src/devices.c:284 msgid "unmanaged" msgstr "без управления" -#: ../cli/src/devices.c:208 +#: ../cli/src/devices.c:286 msgid "unavailable" msgstr "недоступен" -#: ../cli/src/devices.c:210 ../cli/src/network-manager.c:89 +#: ../cli/src/devices.c:288 ../cli/src/network-manager.c:115 msgid "disconnected" -msgstr "отключен" +msgstr "отключено" -#: ../cli/src/devices.c:212 +#: ../cli/src/devices.c:290 msgid "connecting (prepare)" -msgstr "подключается (подготовка)" +msgstr "подключение (подготовка)" -#: ../cli/src/devices.c:214 +#: ../cli/src/devices.c:292 msgid "connecting (configuring)" -msgstr "подключается (конфигурация)" +msgstr "подключение (настройка)" -#: ../cli/src/devices.c:216 +#: ../cli/src/devices.c:294 msgid "connecting (need authentication)" -msgstr "подключается (требуется аутентификация)" +msgstr "подключение (требуется аутентификация)" -#: ../cli/src/devices.c:218 +#: ../cli/src/devices.c:296 msgid "connecting (getting IP configuration)" -msgstr "подключается (получение настроек IP)" +msgstr "подключение (получение настроек IP)" + +#: ../cli/src/devices.c:298 +msgid "connecting (checking IP connectivity)" +msgstr "подключение (проверка IP-подключения)" -#: ../cli/src/devices.c:220 ../cli/src/network-manager.c:87 +#: ../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 "подключен" +msgstr "подключено" -#: ../cli/src/devices.c:222 +#: ../cli/src/devices.c:306 msgid "connection failed" msgstr "сбой соединения" -#: ../cli/src/devices.c:245 ../cli/src/devices.c:380 +#: ../cli/src/devices.c:331 ../cli/src/devices.c:341 ../cli/src/devices.c:501 +#: ../cli/src/devices.c:545 msgid "Unknown" msgstr "Неизвестно" -#: ../cli/src/devices.c:277 +#: ../cli/src/devices.c:374 msgid "(none)" msgstr "(нет)" -#: ../cli/src/devices.c:302 +#: ../cli/src/devices.c:399 #, c-format msgid "%s: error converting IP4 address 0x%X" msgstr "%s: ошибка преобразования адреса IP4 0x%X" -#: ../cli/src/devices.c:349 +#: ../cli/src/devices.c:470 #, c-format msgid "%u MHz" msgstr "%u МГц" -#: ../cli/src/devices.c:350 +#: ../cli/src/devices.c:471 #, c-format msgid "%u MB/s" msgstr "%u МБ/с" -#: ../cli/src/devices.c:359 +#: ../cli/src/devices.c:480 msgid "Encrypted: " msgstr "Зашифровано: " -#: ../cli/src/devices.c:364 +#: ../cli/src/devices.c:485 msgid "WEP " msgstr "WEP " -#: ../cli/src/devices.c:366 +#: ../cli/src/devices.c:487 msgid "WPA " msgstr "WPA " -#: ../cli/src/devices.c:368 +#: ../cli/src/devices.c:489 msgid "WPA2 " msgstr "WPA2 " -#: ../cli/src/devices.c:371 +#: ../cli/src/devices.c:492 msgid "Enterprise " msgstr "Enterprise " -#: ../cli/src/devices.c:380 +#: ../cli/src/devices.c:501 msgid "Ad-Hoc" msgstr "Ad-Hoc" -#: ../cli/src/devices.c:380 +#: ../cli/src/devices.c:501 msgid "Infrastructure" msgstr "Инфраструктура" -#: ../cli/src/devices.c:442 +#: ../cli/src/devices.c:536 +msgid "Home" +msgstr "Домой" + +#: ../cli/src/devices.c:539 +msgid "Partner" +msgstr "Партнер" + +#: ../cli/src/devices.c:542 +msgid "Roaming" +msgstr "Роуминг" + +#: ../cli/src/devices.c:612 #, c-format msgid "Error: 'dev list': %s" msgstr "Ошибка: «dev list»: %s" -#: ../cli/src/devices.c:444 +#: ../cli/src/devices.c:614 #, c-format msgid "Error: 'dev list': %s; allowed fields: %s" msgstr "Ошибка: «dev list»: %s; разрешённые поля: %s" -#: ../cli/src/devices.c:453 +#: ../cli/src/devices.c:623 msgid "Device details" msgstr "Сведения об устройстве" -#: ../cli/src/devices.c:483 ../cli/src/devices.c:827 +#: ../cli/src/devices.c:657 ../cli/src/devices.c:1152 ../cli/src/utils.c:342 msgid "(unknown)" msgstr "(неизвестно)" -#: ../cli/src/devices.c:484 +#: ../cli/src/devices.c:658 msgid "unknown)" msgstr "неизвестно)" -#: ../cli/src/devices.c:510 +#: ../cli/src/devices.c:684 #, c-format msgid "%u Mb/s" msgstr "%u Мб/c" #. Print header #. "WIRED-PROPERTIES" -#: ../cli/src/devices.c:583 +#: ../cli/src/devices.c:757 msgid "on" msgstr "вкл" -#: ../cli/src/devices.c:583 +#: ../cli/src/devices.c:757 msgid "off" msgstr "выкл" -#: ../cli/src/devices.c:710 +#: ../cli/src/devices.c:1004 #, c-format msgid "Error: 'dev status': %s" msgstr "Ошибка: «dev status»: %s" -#: ../cli/src/devices.c:712 +#: ../cli/src/devices.c:1006 #, c-format msgid "Error: 'dev status': %s; allowed fields: %s" msgstr "Ошибка: «dev status»: %s; разрешённые поля: %s" -#: ../cli/src/devices.c:719 +#: ../cli/src/devices.c:1029 msgid "Status of devices" -msgstr "Статус устройств" +msgstr "Состояние устройств" -#: ../cli/src/devices.c:747 +#: ../cli/src/devices.c:1060 #, c-format msgid "Error: '%s' argument is missing." -msgstr "Ошибка: отсутствует аргумент «%s»" +msgstr "Ошибка: отсутствует аргумент «%s»." -#: ../cli/src/devices.c:776 ../cli/src/devices.c:915 ../cli/src/devices.c:1035 +#: ../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 "Ошибка: не найдено устройство «%s»." -#: ../cli/src/devices.c:799 +#: ../cli/src/devices.c:1124 #, c-format msgid "Success: Device '%s' successfully disconnected." -msgstr "Выполнено: устройство «%s» подключено." +msgstr "Выполнено: устройство «%s» отключено." -#: ../cli/src/devices.c:824 +#: ../cli/src/devices.c:1149 #, c-format msgid "Error: Device '%s' (%s) disconnecting failed: %s" msgstr "Ошибка: не удалось отключить устройство «%s» (%s): %s" -#: ../cli/src/devices.c:832 +#: ../cli/src/devices.c:1157 #, c-format msgid "Device state: %d (%s)\n" -msgstr "Статус устройства: %d (%s)\n" +msgstr "Состояние устройства: %d (%s)\n" -#: ../cli/src/devices.c:896 +#: ../cli/src/devices.c:1222 #, c-format msgid "Error: iface has to be specified." msgstr "Ошибка: необходимо указать интерфейс." -#: ../cli/src/devices.c:1011 +#: ../cli/src/devices.c:1347 #, c-format msgid "Error: 'dev wifi': %s" msgstr "Ошибка: «dev wifi»: «%s»" -#: ../cli/src/devices.c:1013 +#: ../cli/src/devices.c:1349 #, c-format msgid "Error: 'dev wifi': %s; allowed fields: %s" msgstr "Ошибка: «dev wifi»: %s; разрешённые поля: %s" -#: ../cli/src/devices.c:1020 +#: ../cli/src/devices.c:1372 msgid "WiFi scan list" -msgstr "Список проверки WiFi" +msgstr "Список сканирования WiFi" -#: ../cli/src/devices.c:1055 ../cli/src/devices.c:1109 +#: ../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 "Ошибка: точка доступа с адресом «%s» не найдена." +msgstr "Ошибка: точка доступа с аппаратным адресом «%s» не найдена." -#: ../cli/src/devices.c:1072 +#: ../cli/src/devices.c:1426 #, c-format msgid "Error: Device '%s' is not a WiFi device." msgstr "Ошибка: «%s» не является устройством WiFi." -#: ../cli/src/devices.c:1136 +#: ../cli/src/devices.c:1490 #, c-format msgid "Error: 'dev wifi' command '%s' is not valid." -msgstr "Ошибка: неверная команда «dev wifi»: «%s»" +msgstr "Ошибка: неверная команда «dev wifi»: «%s»." + +#: ../cli/src/devices.c:1566 +#, c-format +msgid "Error: 'dev wimax': %s" +msgstr "Ошибка: «dev wimax»: %s" + +#: ../cli/src/devices.c:1568 +#, c-format +msgid "Error: 'dev wimax': %s; allowed fields: %s" +msgstr "Ошибка: «dev wimax»: %s; разрешённые поля: %s" + +#: ../cli/src/devices.c:1591 +msgid "WiMAX NSP list" +msgstr "Список WiMAX NSP" + +#: ../cli/src/devices.c:1628 +#, c-format +msgid "Error: NSP with name '%s' not found." +msgstr "Ошибка: NSP с именем «%s» не найден." -#: ../cli/src/devices.c:1183 +#: ../cli/src/devices.c:1639 +#, c-format +msgid "Error: Device '%s' is not a WiMAX device." +msgstr "Ошибка: «%s» не является устройством WIMAX." + +#: ../cli/src/devices.c:1697 +#, c-format +msgid "Error: 'dev wimax' command '%s' is not valid." +msgstr "Ошибка: неверная команда «dev wimax»: %s" + +#: ../cli/src/devices.c:1747 #, c-format msgid "Error: 'dev' command '%s' is not valid." -msgstr "Ошибка: неверная команда «dev»: «%s»" +msgstr "Ошибка: неверная команда «dev»: «%s»." -#: ../cli/src/network-manager.c:35 +#: ../cli/src/network-manager.c:37 msgid "RUNNING" msgstr "ВЫПОЛНЯЕТСЯ" -#. 1 -#: ../cli/src/network-manager.c:37 +#. 0 +#: ../cli/src/network-manager.c:38 +msgid "VERSION" +msgstr "ВЕРСИЯ" + +#. 2 +#: ../cli/src/network-manager.c:40 +msgid "NET-ENABLED" +msgstr "NET-ENABLED" + +#. 3 +#: ../cli/src/network-manager.c:41 msgid "WIFI-HARDWARE" msgstr "ОБОРУДОВАНИЕ WIFI" -#. 2 -#: ../cli/src/network-manager.c:38 +#. 4 +#: ../cli/src/network-manager.c:42 msgid "WIFI" msgstr "WIFI" -#. 3 -#: ../cli/src/network-manager.c:39 +#. 5 +#: ../cli/src/network-manager.c:43 msgid "WWAN-HARDWARE" msgstr "ОБОРУДОВАНИЕ WWAN" -#. 4 -#: ../cli/src/network-manager.c:40 +#. 6 +#: ../cli/src/network-manager.c:44 msgid "WWAN" msgstr "WWAN" -#: ../cli/src/network-manager.c:62 +#. 7 +#: ../cli/src/network-manager.c:45 +msgid "WIMAX-HARDWARE" +msgstr "ОБОРУДОВАНИЕ WIMAX" + +#. 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 | sleep | wakeup | wifi | wwan }\n" +" COMMAND := { status | enable | sleep | wifi | wwan | wimax }\n" +"\n" +" COMMAND := { status | enable | sleep | wifi | wwan }\n" "\n" " status\n" -" sleep\n" -" wakeup\n" +" enable [true|false]\n" +" sleep [true|false]\n" " wifi [on|off]\n" " wwan [on|off]\n" +" wimax [on|off]\n" "\n" msgstr "" -"Применение: nmcli nm { КОМАНДА | help }\n" +"Использование: nmcli nm { КОМАНДА | help }\n" +"\n" +" КОМАНДА := { status | sleep | wakeup | wifi | wwan | wimax }\n" "\n" " КОМАНДА := { status | sleep | wakeup | wifi | wwan }\n" "\n" " status\n" +" enable [true|false]\n" " sleep\n" -" wakeup\n" " wifi [on|off]\n" " wwan [on|off]\n" +" wimax [on|off]\n" "\n" -#: ../cli/src/network-manager.c:83 +#: ../cli/src/network-manager.c:103 msgid "asleep" msgstr "спящий" -#: ../cli/src/network-manager.c:85 +#: ../cli/src/network-manager.c:105 msgid "connecting" msgstr "подключается" -#: ../cli/src/network-manager.c:125 +#: ../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 "отключение" + +#: ../cli/src/network-manager.c:153 #, c-format msgid "Error: 'nm status': %s" msgstr "Ошибка: «nm status»: %s" -#: ../cli/src/network-manager.c:127 +#: ../cli/src/network-manager.c:155 #, c-format msgid "Error: 'nm status': %s; allowed fields: %s" msgstr "Ошибка: «nm status»: %s; разрешённые поля: %s" -#: ../cli/src/network-manager.c:134 -msgid "NetworkManager status" -msgstr "Статус NetworkManager" - -#. Print header -#: ../cli/src/network-manager.c:140 ../cli/src/network-manager.c:141 -#: ../cli/src/network-manager.c:142 ../cli/src/network-manager.c:143 -#: ../cli/src/network-manager.c:211 ../cli/src/network-manager.c:243 +#. 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 "включен" - -#: ../cli/src/network-manager.c:140 ../cli/src/network-manager.c:141 -#: ../cli/src/network-manager.c:142 ../cli/src/network-manager.c:143 -#: ../cli/src/network-manager.c:211 ../cli/src/network-manager.c:243 +msgstr "включён" + +#: ../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 "отключен" +msgstr "отключён" + +#: ../cli/src/network-manager.c:188 +msgid "NetworkManager status" +msgstr "Состояние NetworkManager" -#: ../cli/src/network-manager.c:148 +#. Print header +#: ../cli/src/network-manager.c:191 msgid "running" msgstr "выполняется" -#: ../cli/src/network-manager.c:148 +#: ../cli/src/network-manager.c:191 msgid "not running" msgstr "не выполняется" -#: ../cli/src/network-manager.c:201 ../cli/src/network-manager.c:233 +#: ../cli/src/network-manager.c:222 ../cli/src/utils.c:322 +#, c-format +msgid "Error: Couldn't connect to system bus: %s" +msgstr "Ошибка: не удалось подключиться к системной шине: %s" + +#: ../cli/src/network-manager.c:233 +#, c-format +msgid "Error: Couldn't create D-Bus object proxy." +msgstr "Ошибка: не удалось создать прокси-объект D-Bus." + +#: ../cli/src/network-manager.c:239 +#, c-format +msgid "Error in sleep: %s" +msgstr "Ошибка в задержке: %s" + +#: ../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 "Ошибка: недопустимое значение «--fields»: «%s»; разрешённые поля: %s" -#: ../cli/src/network-manager.c:209 +#: ../cli/src/network-manager.c:291 +msgid "Networking enabled" +msgstr "Сеть включена" + +#: ../cli/src/network-manager.c:307 +#, c-format +msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'." +msgstr "" +"Ошибка: недопустимый параметр «enable»: «%s»; используйте «true» или «false»." + +#: ../cli/src/network-manager.c:317 +#, c-format +msgid "Error: Sleeping status is not exported by NetworkManager." +msgstr "Ошибка: NetworkManager не удалось экспортировать состояние сна." + +#: ../cli/src/network-manager.c:325 +#, c-format +msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'." +msgstr "" +"Ошибка: недопустимый параметр «sleep»: «%s»; используйте «true» или «false»." + +#: ../cli/src/network-manager.c:346 msgid "WiFi enabled" -msgstr "WiFi включен" +msgstr "WiFi включён" -#: ../cli/src/network-manager.c:220 +#: ../cli/src/network-manager.c:362 #, c-format msgid "Error: invalid 'wifi' parameter: '%s'." -msgstr "Ошибка: недопустимый параметр «wifi»: «%s»" +msgstr "Ошибка: недопустимый параметр «wifi»: «%s»." -#: ../cli/src/network-manager.c:241 +#: ../cli/src/network-manager.c:384 msgid "WWAN enabled" -msgstr "WWAN включен" +msgstr "WWAN включён" -#: ../cli/src/network-manager.c:252 +#: ../cli/src/network-manager.c:400 #, c-format msgid "Error: invalid 'wwan' parameter: '%s'." -msgstr "Ошибка: недопустимый параметр «wwan»: «%s»" +msgstr "Ошибка: недопустимый параметр «wwan»: «%s»." -#: ../cli/src/network-manager.c:263 +#: ../cli/src/network-manager.c:423 +msgid "WiMAX enabled" +msgstr "WiMAX включён" + +#: ../cli/src/network-manager.c:439 +#, c-format +msgid "Error: invalid 'wimax' parameter: '%s'." +msgstr "Ошибка: недопустимый параметр «wimax»: «%s»" + +#: ../cli/src/network-manager.c:452 #, c-format msgid "Error: 'nm' command '%s' is not valid." msgstr "Ошибка: недопустимая команда «nm»: «%s»." -#: ../cli/src/nmcli.c:69 +#: ../cli/src/nmcli.c:64 #, c-format msgid "" "Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n" @@ -974,6 +1190,8 @@ msgid "" " -f[ields] |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" @@ -983,669 +1201,858 @@ msgid "" " dev devices managed by NetworkManager\n" "\n" msgstr "" -"Применение: %s [ПАРАМЕТРЫ] ОБЪЕКТ { КОМАНДА | help }\n" +"Использование: %s [ПАРАМЕТРЫ] ОБЪЕКТ { КОМАНДА | help }\n" "\n" "ПАРАМЕТРЫ\n" -" -t[erse] сжатый вывод\n" -" -p[retty] отформатированный вывод\n" -" -m[ode] tabular|multiline режим вывода\n" -" -f[ields] <поле1,поле2,...>|all|common вывод выбранных полей\n" -" -e[scape] yes|no отделять разделитель столбцов в значениях специальными символами\n" -" -v[ersion] показать версию программы\n" -" -h[elp] показать эту справку\n" +" -t[erse] сжатый вывод\n" +" -p[retty] форматированный вывод\n" +" -m[ode] tabular|multiline режим вывода\n" +" -f[ields] <поле1,поле2,...>|all|common указать поля для вывода\n" +" -e[scape] yes|no удалять разделитель столбцов\n" +" у значений\n" +" -n[ocheck] не проверять версию nmcli и\n" +" NetworkManager\n" +" -v[ersion] показать версию программы\n" +" -h[elp] вывод этой справки\n" "\n" "ОБЪЕКТ\n" -" nm статус NetworkManager\n" +" nm состояние NetworkManager\n" " con соединения NetworkManager\n" " dev устройства под управлением 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 "Ошибка: неизвестный объект «%s». Попробуйте выполнить «nmcli help»." -#: ../cli/src/nmcli.c:143 +#: ../cli/src/nmcli.c:139 #, c-format msgid "Error: Option '--terse' is specified the second time." msgstr "Ошибка: параметр «--terse» указан дважды." -#: ../cli/src/nmcli.c:148 +#: ../cli/src/nmcli.c:144 #, c-format msgid "Error: Option '--terse' is mutually exclusive with '--pretty'." msgstr "Ошибка: параметры «--terse» и «--pretty» взаимоисключаемы." -#: ../cli/src/nmcli.c:156 +#: ../cli/src/nmcli.c:152 #, c-format msgid "Error: Option '--pretty' is specified the second time." msgstr "Ошибка: параметр «--pretty» указан дважды." -#: ../cli/src/nmcli.c:161 +#: ../cli/src/nmcli.c:157 #, c-format msgid "Error: Option '--pretty' is mutually exclusive with '--terse'." msgstr "Ошибка: параметры «--pretty» и «--terse» взаимоисключаемы." -#: ../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 "Ошибка: отсутствует аргумент параметра «%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 "Ошибка: недопустимый аргумент «%s» для параметра «%s»." -#: ../cli/src/nmcli.c:203 +#: ../cli/src/nmcli.c:199 #, c-format msgid "Error: fields for '%s' options are missing." msgstr "Ошибка: отсутствуют поля для параметров «%s»." -#: ../cli/src/nmcli.c:209 +#: ../cli/src/nmcli.c:207 #, c-format msgid "nmcli tool, version %s\n" msgstr "утилита nmcli, версия %s\n" -#: ../cli/src/nmcli.c:215 +#: ../cli/src/nmcli.c:213 #, c-format msgid "Error: Option '%s' is unknown, try 'nmcli -help'." msgstr "Ошибка: неизвестный параметр «%s». Попробуйте выполнить «nmcli -help»." -#: ../cli/src/nmcli.c:234 +#: ../cli/src/nmcli.c:232 #, c-format msgid "Caught signal %d, shutting down..." -msgstr "Получен сигнал %d. Завершение работы..." +msgstr "Получен сигнал %d. Завершение работы…" -#: ../cli/src/nmcli.c:259 -#, c-format -msgid "Error: Could not connect to NetworkManager." -msgstr "Ошибка: не удалось подключиться к NetworkManager." +#: ../cli/src/nmcli.c:257 +msgid "Error: Could not create NMClient object." +msgstr "Ошибка: не удалось создать объект NMClient." -#: ../cli/src/nmcli.c:275 +#: ../cli/src/nmcli.c:273 msgid "Success" msgstr "Успешно" -#: ../cli/src/settings.c:407 +#: ../cli/src/settings.c:423 #, c-format msgid "%d (hex-ascii-key)" msgstr "%d (16-теричный ASCII-ключ)" -#: ../cli/src/settings.c:409 +#: ../cli/src/settings.c:425 #, c-format msgid "%d (104/128-bit passphrase)" msgstr "%d (104/128-битная парольная фраза)" -#: ../cli/src/settings.c:412 +#: ../cli/src/settings.c:428 #, c-format msgid "%d (unknown)" msgstr "%d (неизвестно)" -#: ../cli/src/settings.c:438 +#: ../cli/src/settings.c:454 msgid "0 (unknown)" msgstr "0 (неизвестно)" -#: ../cli/src/settings.c:444 +#: ../cli/src/settings.c:460 msgid "any, " msgstr "любой, " -#: ../cli/src/settings.c:446 +#: ../cli/src/settings.c:462 msgid "900 MHz, " msgstr "900 МГц, " -#: ../cli/src/settings.c:448 +#: ../cli/src/settings.c:464 msgid "1800 MHz, " msgstr "1800 МГц, " -#: ../cli/src/settings.c:450 +#: ../cli/src/settings.c:466 msgid "1900 MHz, " msgstr "1900 МГц, " -#: ../cli/src/settings.c:452 +#: ../cli/src/settings.c:468 msgid "850 MHz, " msgstr "850 МГц, " -#: ../cli/src/settings.c:454 +#: ../cli/src/settings.c:470 msgid "WCDMA 3GPP UMTS 2100 MHz, " msgstr "WCDMA 3GPP UMTS 2100 МГц, " -#: ../cli/src/settings.c:456 +#: ../cli/src/settings.c:472 msgid "WCDMA 3GPP UMTS 1800 MHz, " msgstr "WCDMA 3GPP UMTS 1800 МГц, " -#: ../cli/src/settings.c:458 +#: ../cli/src/settings.c:474 msgid "WCDMA 3GPP UMTS 1700/2100 MHz, " msgstr "WCDMA 3GPP UMTS 1700/2100 МГц, " -#: ../cli/src/settings.c:460 +#: ../cli/src/settings.c:476 msgid "WCDMA 3GPP UMTS 800 MHz, " msgstr "WCDMA 3GPP UMTS 800 МГц, " -#: ../cli/src/settings.c:462 +#: ../cli/src/settings.c:478 msgid "WCDMA 3GPP UMTS 850 MHz, " msgstr "WCDMA 3GPP UMTS 850 МГц, " -#: ../cli/src/settings.c:464 +#: ../cli/src/settings.c:480 msgid "WCDMA 3GPP UMTS 900 MHz, " msgstr "WCDMA 3GPP UMTS 900 МГц, " -#: ../cli/src/settings.c:466 +#: ../cli/src/settings.c:482 msgid "WCDMA 3GPP UMTS 1700 MHz, " msgstr "WCDMA 3GPP UMTS 1700 МГц, " -#: ../cli/src/settings.c:546 ../cli/src/settings.c:708 +#: ../cli/src/settings.c:566 ../cli/src/settings.c:732 msgid "auto" msgstr "авто" -#: ../cli/src/settings.c:704 ../cli/src/settings.c:707 ../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 "не задано" -#: ../cli/src/utils.c:124 +#: ../cli/src/utils.c:128 #, c-format msgid "field '%s' has to be alone" msgstr "поле «%s» должно быть единственным" -#: ../cli/src/utils.c:127 +#: ../cli/src/utils.c:131 #, c-format msgid "invalid field '%s'" msgstr "недопустимое поле «%s»" -#: ../cli/src/utils.c:146 +#: ../cli/src/utils.c:150 #, c-format msgid "Option '--terse' requires specifying '--fields'" msgstr "Параметр «--terse» требует указания «--fields»" -#: ../cli/src/utils.c:150 +#: ../cli/src/utils.c:154 #, c-format msgid "Option '--terse' requires specific '--fields' option values , not '%s'" msgstr "Параметр «--terse» требует определённых значений «--fields», но не «%s»" -#: ../libnm-util/crypto.c:120 +#: ../cli/src/utils.c:333 +#, c-format +msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus" +msgstr "" +"Ошибка: не удалось создать прокси-объект D-Bus для org.freedesktop.DBus" + +#: ../cli/src/utils.c:341 +#, c-format +msgid "Error: NameHasOwner request failed: %s" +msgstr "Ошибка: сбой запроса NameHasOwner: %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 "" +"Предупреждение: версии nmcli (%s) и NetworkManager (%s) не совпадают. " +"Используйте --nocheck для подавления этого предупреждения.\n" + +#: ../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 "" +"Ошибка: версии nmcli (%s) и NetworkManager (%s) не совпадают. Для " +"принудительного запуска используйте --nocheck, но результаты не предсказуемы." + +#: ../libnm-util/crypto.c:133 #, c-format msgid "PEM key file had no end tag '%s'." msgstr "Файл ключа PEM не содержит завершающий тег «%s»." -#: ../libnm-util/crypto.c:130 +#: ../libnm-util/crypto.c:146 #, c-format msgid "Doesn't look like a PEM private key file." msgstr "Возможно, это не файл личного ключа PEM." -#: ../libnm-util/crypto.c:138 +#: ../libnm-util/crypto.c:154 #, c-format msgid "Not enough memory to store PEM file data." msgstr "Недостаточно памяти для загрузки данных из файла PEM." -#: ../libnm-util/crypto.c:154 +#: ../libnm-util/crypto.c:170 #, c-format msgid "Malformed PEM file: Proc-Type was not first tag." msgstr "Некорректный файл PEM: Proc-Type не является первым тегом." -#: ../libnm-util/crypto.c:162 +#: ../libnm-util/crypto.c:178 #, c-format msgid "Malformed PEM file: unknown Proc-Type tag '%s'." msgstr "Некорректный файл PEM: неизвестный тег Proc-Type «%s»." -#: ../libnm-util/crypto.c:172 +#: ../libnm-util/crypto.c:188 #, c-format msgid "Malformed PEM file: DEK-Info was not the second tag." msgstr "Некорректный файл PEM: DEK-Info не является вторым тегом." -#: ../libnm-util/crypto.c:183 +#: ../libnm-util/crypto.c:199 #, c-format msgid "Malformed PEM file: no IV found in DEK-Info tag." msgstr "Некорректный файл PEM: в теге DEK-Info не найден ВИ." -#: ../libnm-util/crypto.c:190 +#: ../libnm-util/crypto.c:206 #, c-format msgid "Malformed PEM file: invalid format of IV in DEK-Info tag." msgstr "Некорректный файл PEM: неверный формат ВИ в теге DEK-Info." -#: ../libnm-util/crypto.c:203 +#: ../libnm-util/crypto.c:219 #, c-format msgid "Malformed PEM file: unknown private key cipher '%s'." msgstr "Некорректный файл PEM: неизвестный шифр личного ключа «%s»." -#: ../libnm-util/crypto.c:222 +#: ../libnm-util/crypto.c:238 #, c-format msgid "Could not decode private key." msgstr "Не удалось расшифровать личный ключ." -#: ../libnm-util/crypto.c:267 -#, c-format -msgid "PEM certificate '%s' had no end tag '%s'." -msgstr "Сертификат PEM «%s» не имеет тега окончания «%s»." +#: ../libnm-util/crypto.c:284 +msgid "Failed to find expected PKCS#8 start tag." +msgstr "Невозможно найти открывающий тег PKCS#8." -#: ../libnm-util/crypto.c:277 +#: ../libnm-util/crypto.c:292 #, c-format -msgid "Failed to decode certificate." -msgstr "Не удалось расшифровать сертификат." +msgid "Failed to find expected PKCS#8 end tag '%s'." +msgstr "Невозможно найти закрывающий тег PKCS#8 — «%s»." + +#: ../libnm-util/crypto.c:312 +msgid "Not enough memory to store private key data." +msgstr "Недостаточно памяти для хранения данных закрытого ключа." -#: ../libnm-util/crypto.c:286 +#: ../libnm-util/crypto.c:317 +msgid "Failed to decode PKCS#8 private key." +msgstr "Не удалось расшифровать личный ключ PKCS#8." + +#: ../libnm-util/crypto.c:339 ../libnm-util/crypto.c:625 #, c-format msgid "Not enough memory to store certificate data." msgstr "Недостаточно памяти для загрузки данных сертификата." -#: ../libnm-util/crypto.c:294 -#, c-format -msgid "Not enough memory to store file data." -msgstr "Недостаточно памяти для загрузки данных из файла." - -#: ../libnm-util/crypto.c:324 +#: ../libnm-util/crypto.c:365 #, c-format msgid "IV must be an even number of bytes in length." msgstr "Длина ВИ должна быть равна чётному количеству байт." -#: ../libnm-util/crypto.c:333 +#: ../libnm-util/crypto.c:374 #, c-format msgid "Not enough memory to store the IV." msgstr "Недостаточно памяти для загрузки ВИ." -#: ../libnm-util/crypto.c:344 +#: ../libnm-util/crypto.c:385 #, c-format msgid "IV contains non-hexadecimal digits." -msgstr "ВИ включает нешестнадцатеричные цифры." +msgstr "ВИ включает не шестнадцатеричные цифры." -#: ../libnm-util/crypto.c:382 ../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:423 ../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 "Неизвестный шифр личного ключа «%s»." -#: ../libnm-util/crypto.c:391 +#: ../libnm-util/crypto.c:432 #, c-format msgid "Not enough memory to decrypt private key." msgstr "Недостаточно памяти для расшифровки личного ключа." -#: ../libnm-util/crypto.c:511 +#: ../libnm-util/crypto.c:497 +#, c-format +msgid "Not enough memory to store decrypted private key." +msgstr "Недостаточно памяти для загрузки расшифрованного личного ключа." + +#: ../libnm-util/crypto.c:542 #, c-format msgid "Unable to determine private key type." msgstr "Не удаётся определить тип личного ключа." -#: ../libnm-util/crypto.c:530 +#: ../libnm-util/crypto.c:597 #, c-format -msgid "Not enough memory to store decrypted private key." -msgstr "Недостаточно памяти для загрузки расшифрованного личного ключа." +msgid "PEM certificate had no start tag '%s'." +msgstr "Сертификат PEM не имеет тега начала «%s»." + +#: ../libnm-util/crypto.c:606 +#, c-format +msgid "PEM certificate had no end tag '%s'." +msgstr "Сертификат PEM не имеет тега окончания «%s»." -#: ../libnm-util/crypto_gnutls.c:49 +#: ../libnm-util/crypto.c:630 +#, c-format +msgid "Failed to decode certificate." +msgstr "Не удалось расшифровать сертификат." + +#: ../libnm-util/crypto_gnutls.c:50 msgid "Failed to initialize the crypto engine." msgstr "Не удалось инициализировать криптографический модуль." -#: ../libnm-util/crypto_gnutls.c:93 +#: ../libnm-util/crypto_gnutls.c:92 #, c-format msgid "Failed to initialize the MD5 engine: %s / %s." msgstr "Не удалось инициализировать модуль MD5: %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 "Недопустимая длина ВИ (минимально %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 "Недостаточно памяти для буфера расшифрованного ключа." -#: ../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 "Не удалось инициализировать контекст шифра декодирования: %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 "Не удалось создать симметричный ключ для расшифровки: %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 "Не удалось создать ВИ для расшифровки: %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 "Не удалось создать ВИ для расшифровки: %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 "Не удалось расшифровать личный ключ: непредвиденная длина заполнения." -#: ../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 "Не удалось расшифровать личный ключ." -#: ../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 "Не удалось выделить память для шифрования" -#: ../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 "Не удалось инициализировать контекст кода шифрования: %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 "Не удалось создать симметричный ключ для шифрования: %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 "Не удалось создать ВИ для шифрования: %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 "Не удалось зашифровать данные: %s / %s." -#: ../libnm-util/crypto_gnutls.c:362 +#: ../libnm-util/crypto_gnutls.c:361 #, c-format msgid "Error initializing certificate data: %s" msgstr "Ошибка инициализации данных сертификата: %s" -#: ../libnm-util/crypto_gnutls.c:384 +#: ../libnm-util/crypto_gnutls.c:383 #, c-format msgid "Couldn't decode certificate: %s" msgstr "Не удалось расшифровать сертификат: %s" -#: ../libnm-util/crypto_gnutls.c:408 +#: ../libnm-util/crypto_gnutls.c:407 #, c-format msgid "Couldn't initialize PKCS#12 decoder: %s" msgstr "Не удалось инициализировать декодер PKCS#12: %s" -#: ../libnm-util/crypto_gnutls.c:421 +#: ../libnm-util/crypto_gnutls.c:420 #, c-format msgid "Couldn't decode PKCS#12 file: %s" msgstr "Не удалось расшифровать файл PKCS#12: %s" -#: ../libnm-util/crypto_gnutls.c:433 +#: ../libnm-util/crypto_gnutls.c:432 #, c-format msgid "Couldn't verify PKCS#12 file: %s" msgstr "Не удалось проверить файл PKCS#12: %s" +#: ../libnm-util/crypto_gnutls.c:460 +#, c-format +msgid "Couldn't initialize PKCS#8 decoder: %s" +msgstr "Не удалось инициализировать декодер PKCS#8: %s" + +#: ../libnm-util/crypto_gnutls.c:483 +#, c-format +msgid "Couldn't decode PKCS#8 file: %s" +msgstr "Не удалось расшифровать файл PKCS#12: %s" + #: ../libnm-util/crypto_nss.c:56 #, c-format msgid "Failed to initialize the crypto engine: %d." msgstr "Не удалось инициализировать криптографический модуль: %d." -#: ../libnm-util/crypto_nss.c:111 +#: ../libnm-util/crypto_nss.c:107 #, c-format msgid "Failed to initialize the MD5 context: %d." msgstr "Не удалось инициализировать контекст MD5: %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 "Недопустимая длина ВИ (минимально %d)." -#: ../libnm-util/crypto_nss.c:196 +#: ../libnm-util/crypto_nss.c:192 #, c-format msgid "Failed to initialize the decryption cipher slot." msgstr "Не удалось инициализировать слот шифра декодирования." -#: ../libnm-util/crypto_nss.c:206 +#: ../libnm-util/crypto_nss.c:202 #, c-format msgid "Failed to set symmetric key for decryption." msgstr "Не удалось задать симметричный ключ расшифровки." -#: ../libnm-util/crypto_nss.c:216 +#: ../libnm-util/crypto_nss.c:212 #, c-format msgid "Failed to set IV for decryption." msgstr "Не удалось задать ВИ расшифровки." -#: ../libnm-util/crypto_nss.c:224 +#: ../libnm-util/crypto_nss.c:220 #, c-format msgid "Failed to initialize the decryption context." msgstr "Не удалось инициализировать контекст расшифровки." -#: ../libnm-util/crypto_nss.c:237 +#: ../libnm-util/crypto_nss.c:233 #, c-format msgid "Failed to decrypt the private key: %d." msgstr "Не удалось расшифровать личный ключ: %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 "" "Не удалось расшифровать личный ключ: слишком большой объем расшифрованных " "данных." -#: ../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 "Не удалось завершить расшифровку личного ключа: %d." -#: ../libnm-util/crypto_nss.c:364 +#: ../libnm-util/crypto_nss.c:360 #, c-format msgid "Failed to initialize the encryption cipher slot." msgstr "Не удалось инициализировать слот шифра декодирования." -#: ../libnm-util/crypto_nss.c:372 +#: ../libnm-util/crypto_nss.c:368 #, c-format msgid "Failed to set symmetric key for encryption." msgstr "Не удалось задать симметричный ключ для шифрования." -#: ../libnm-util/crypto_nss.c:380 +#: ../libnm-util/crypto_nss.c:376 #, c-format msgid "Failed to set IV for encryption." msgstr "Не удалось задать ВИ расшифровки." -#: ../libnm-util/crypto_nss.c:388 +#: ../libnm-util/crypto_nss.c:384 #, c-format msgid "Failed to initialize the encryption context." msgstr "Не удалось инициализировать контекст шифрования." -#: ../libnm-util/crypto_nss.c:396 +#: ../libnm-util/crypto_nss.c:392 #, c-format msgid "Failed to encrypt: %d." msgstr "Не удалось зашифровать: %d." -#: ../libnm-util/crypto_nss.c:404 +#: ../libnm-util/crypto_nss.c:400 #, c-format msgid "Unexpected amount of data after encrypting." msgstr "Непредвиденный объём данных после шифрования." -#: ../libnm-util/crypto_nss.c:447 +#: ../libnm-util/crypto_nss.c:443 #, c-format msgid "Couldn't decode certificate: %d" msgstr "Не удалось расшифровать сертификат: %d" -#: ../libnm-util/crypto_nss.c:482 +#: ../libnm-util/crypto_nss.c:478 #, c-format msgid "Couldn't convert password to UCS2: %d" msgstr "Не удалось преобразовать пароль в 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 "Не удалось инициализировать декодер PKCS#12: %d" -#: ../libnm-util/crypto_nss.c:519 +#: ../libnm-util/crypto_nss.c:515 #, c-format msgid "Couldn't decode PKCS#12 file: %d" msgstr "Не удалось расшифровать файл PKCS#12: %d" -#: ../libnm-util/crypto_nss.c:528 +#: ../libnm-util/crypto_nss.c:524 #, c-format msgid "Couldn't verify PKCS#12 file: %d" msgstr "Не удалось проверить файл PKCS#12: %d" -#: ../libnm-util/crypto_nss.c:557 +#: ../libnm-util/crypto_nss.c:568 msgid "Could not generate random data." msgstr "Ошибка при генерации случайных данных." -#: ../libnm-util/nm-utils.c:1925 +#: ../libnm-util/nm-utils.c:2000 #, c-format msgid "Not enough memory to make encryption key." msgstr "Недостаточно памяти для создания ключа шифрования." -#: ../libnm-util/nm-utils.c:2035 +#: ../libnm-util/nm-utils.c:2110 msgid "Could not allocate memory for PEM file creation." msgstr "Не удалось выделить память для создания файла PEM." -#: ../libnm-util/nm-utils.c:2047 +#: ../libnm-util/nm-utils.c:2122 #, c-format msgid "Could not allocate memory for writing IV to PEM file." msgstr "Не удалось выделить память для записи ВИ в файл PEM." -#: ../libnm-util/nm-utils.c:2059 +#: ../libnm-util/nm-utils.c:2134 #, c-format msgid "Could not allocate memory for writing encrypted key to PEM file." msgstr "Не удалось выделить память для записи зашифрованного ключа в файл PEM." -#: ../libnm-util/nm-utils.c:2078 +#: ../libnm-util/nm-utils.c:2153 #, c-format msgid "Could not allocate memory for PEM file data." msgstr "Не удалось выделить память для данных файла PEM." -#: ../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 "ошибка обработки сообщения netlink: %s" +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1 +msgid "Allow control of network connections" +msgstr "Разрешить контроль сетевых подключений" -#: ../src/nm-netlink-monitor.c:214 -msgid "error occurred while waiting for data on socket" -msgstr "произошла ошибка при ожидании данных из сокета" +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2 +msgid "Connection sharing via a protected WiFi network" +msgstr "Совместное использование соединений в закрытой сети WiFi" -#: ../src/nm-netlink-monitor.c:254 -#, c-format -msgid "unable to connect to netlink for monitoring link status: %s" -msgstr "не удаётся подключиться к netlink для отслеживания статуса соединения: %s" +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3 +msgid "Connection sharing via an open WiFi network" +msgstr "Совместное использование соединений в открытой сети WiFi" -#: ../src/nm-netlink-monitor.c:265 -#, c-format -msgid "unable to enable netlink handle credential passing: %s" -msgstr "не удаётся включить проверку данных авторизации netlink: %s" +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4 +msgid "Enable or disable WiFi devices" +msgstr "Включить или выключить устройства WiFi" -#: ../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" +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5 +msgid "Enable or disable WiMAX mobile broadband devices" +msgstr "Включить или выключить устройства мобильных сетей WiMax" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6 +msgid "Enable or disable mobile broadband devices" +msgstr "Включить или выключить устройства мобильных сетей" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7 +msgid "Enable or disable system networking" +msgstr "Включить или выключить системные соединения" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8 +msgid "Modify network connections for all users" +msgstr "Изменить подключения доступные всем пользователям" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9 +msgid "Modify persistent system hostname" +msgstr "Изменить постоянное имя узла компьютера" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10 +msgid "Modify personal network connections" +msgstr "Редактировать личные настройки подключения" + +#: ../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 "" -"не удаётся создать идентификатор netlink для отслеживания статуса " -"соединения: %s" +"Перевести NetworkManager в режим сна или пробудить его (должно " +"использоваться только системой управления питанием)" -#: ../src/nm-netlink-monitor.c:376 -#, c-format -msgid "unable to allocate netlink link cache for monitoring link status: %s" -msgstr "не удаётся выделить кэш netlink для отслеживания статуса соединения: %s" +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12 +msgid "System policy prevents control of network connections" +msgstr "Системная политика запрещает управление подключениями." -#: ../src/nm-netlink-monitor.c:502 -#, c-format -msgid "unable to join netlink group: %s" -msgstr "не удалось войти в группу netlink: %s" +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:13 +msgid "System policy prevents enabling or disabling WiFi devices" +msgstr "Системная политика запрещает включение и выключение WiFi устройств" -#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642 -#, c-format -msgid "error updating link cache: %s" -msgstr "ошибка обновления кэша соединения: %s" +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:14 +msgid "" +"System policy prevents enabling or disabling WiMAX mobile broadband devices" +msgstr "" +"Системная политика запрещает включение или выключение устройств мобильной " +"связи WiMAX" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:15 +msgid "System policy prevents enabling or disabling mobile broadband devices" +msgstr "" +"Системная политика запрещает включение или выключение устройств мобильной " +"связи" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:16 +msgid "System policy prevents enabling or disabling system networking" +msgstr "" +"Системная политика запрещает включение и выключение системных подключений" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:17 +msgid "System policy prevents modification of network settings for all users" +msgstr "Системная политика запрещает изменение настроек для всех пользователей" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:18 +msgid "System policy prevents modification of personal network settings" +msgstr "Системная политика запрещает изменение персональных настроек сети" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:19 +msgid "System policy prevents modification of the persistent system hostname" +msgstr "" +"Системная политика запрещает изменение постоянного имени узла компьютера" -#: ../src/main.c:502 +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:20 +msgid "System policy prevents putting NetworkManager to sleep or waking it up" +msgstr "" +"Системная политика не разрешает переводить NetworkManager в режим сна или " +"пробуждать его" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:21 +msgid "System policy prevents sharing connections via a protected WiFi network" +msgstr "" +"Системная политика запрещает совместное использование соединений в закрытой " +"сети WiFi" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:22 +msgid "System policy prevents sharing connections via an open WiFi network" +msgstr "" +"Системная политика запрещает совместное использование соединений в открытой " +"сети WiFi" + +#: ../src/main.c:530 #, c-format msgid "Invalid option. Please use --help to see a list of valid options.\n" msgstr "" "Неверный параметр. Используйте --help для вывода списка возможных " "параметров.\n" -#: ../src/main.c:562 +#: ../src/main.c:611 #, c-format msgid "%s. Please use --help to see a list of valid options.\n" msgstr "%s. Используйте --help для вывода списка допустимых параметров.\n" -#: ../src/dhcp-manager/nm-dhcp-dhclient.c:325 +#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:62 msgid "# Created by NetworkManager\n" msgstr "# Создано NetworkManager\n" -#: ../src/dhcp-manager/nm-dhcp-dhclient.c:341 +#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:69 #, c-format msgid "" "# Merged from %s\n" "\n" msgstr "" -"# Совмещено с %s\n" +"# Объединено с %s\n" "\n" -#: ../src/dhcp-manager/nm-dhcp-manager.c:279 +#: ../src/dhcp-manager/nm-dhcp-manager.c:284 msgid "no usable DHCP client could be found." msgstr "не найден клиент DHCP." -#: ../src/dhcp-manager/nm-dhcp-manager.c:288 +#: ../src/dhcp-manager/nm-dhcp-manager.c:293 msgid "'dhclient' could be found." -msgstr "'dhclient' не найден." +msgstr "«dhclient» не найден." -#: ../src/dhcp-manager/nm-dhcp-manager.c:298 +#: ../src/dhcp-manager/nm-dhcp-manager.c:303 msgid "'dhcpcd' could be found." -msgstr "'dhcpcd' не найден." +msgstr "«dhcpcd» не найден." -#: ../src/dhcp-manager/nm-dhcp-manager.c:306 +#: ../src/dhcp-manager/nm-dhcp-manager.c:311 #, c-format msgid "unsupported DHCP client '%s'" -msgstr "клиент DHCP '%s' не поддерживается" +msgstr "клиент DHCP «%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 "" +"ЗАМЕЧАНИЕ: преобразователь имён glibc не поддерживает более трёх серверов " +"имён." + +#: ../src/dns-manager/nm-dns-manager.c:371 +msgid "The nameservers listed below may not be recognized." +msgstr "Нижеперечисленные сервера имён могут быть пропущены." + +#: ../src/logging/nm-logging.c:149 #, c-format msgid "Unknown log level '%s'" msgstr "Неизвестный уровень журналирования «%s»" -#: ../src/logging/nm-logging.c:171 +#: ../src/logging/nm-logging.c:174 #, c-format msgid "Unknown log domain '%s'" msgstr "Неизвестный домен журналирования «%s»" -#: ../src/dns-manager/nm-dns-manager.c:343 -msgid "NOTE: the libc resolver may not support more than 3 nameservers." -msgstr "" -"ВНИМАНИЕ: преобразователь имён glibc не поддерживает более трёх серверов " -"имён." +#: ../src/modem-manager/nm-modem-cdma.c:296 ../src/nm-device-bt.c:355 +#, c-format +msgid "CDMA connection %d" +msgstr "Подключение CDMA %d" -#: ../src/dns-manager/nm-dns-manager.c:345 -msgid "The nameservers listed below may not be recognized." -msgstr "Нижеперечисленные сервера могут быть пропущены." +#: ../src/modem-manager/nm-modem-gsm.c:499 ../src/nm-device-bt.c:351 +#, c-format +msgid "GSM connection %d" +msgstr "Подключение GSM %d" -#: ../src/settings/nm-default-wired-connection.c:157 +#: ../src/nm-device-bt.c:326 #, c-format -msgid "Auto %s" -msgstr "Авто %s" +msgid "PAN connection %d" +msgstr "Подключение PAN %d" -#: ../system-settings/plugins/ifcfg-rh/reader.c:3256 -msgid "System" -msgstr "Система" +#: ../src/nm-device-bt.c:359 +#, c-format +msgid "DUN connection %d" +msgstr "Подключение DUN %d" -#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1 -msgid "Connection sharing via a protected WiFi network" -msgstr "Совместное использование соединений в закрытой сети WiFi" +#: ../src/nm-device-ethernet.c:1681 +#, c-format +msgid "PPPoE connection %d" +msgstr "Подключение PPoE %d" -#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2 -msgid "Connection sharing via an open WiFi network" -msgstr "Совместное использование соединений в открытой сети WiFi" +#: ../src/nm-device-ethernet.c:1681 ../src/settings/nm-settings-utils.c:50 +#, c-format +msgid "Wired connection %d" +msgstr "Проводное соединение %d" -#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3 -msgid "Modify persistent system hostname" -msgstr "Изменить постоянное имя узла компьютера" +#: ../src/nm-device-olpc-mesh.c:423 +#, c-format +msgid "Mesh %d" +msgstr "Mesh %d" -#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4 -msgid "Modify system connections" -msgstr "Изменить соединения системы" +#: ../src/nm-manager.c:655 +#, c-format +msgid "VPN connection %d" +msgstr "Подключение VPN %d" -#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5 -msgid "System policy prevents modification of system settings" -msgstr "Системная политика запрещает изменение системных настроек" +#: ../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 "ошибка обработки сообщения netlink: %s" -#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6 -msgid "System policy prevents modification of the persistent system hostname" -msgstr "Системная политика запрещает изменение постоянного имени узла компьютера" +#: ../src/nm-netlink-monitor.c:214 +msgid "error occurred while waiting for data on socket" +msgstr "произошла ошибка при ожидании данных из сокета" -#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7 -msgid "System policy prevents sharing connections via a protected WiFi network" +#: ../src/nm-netlink-monitor.c:254 +#, c-format +msgid "unable to connect to netlink for monitoring link status: %s" msgstr "" -"Системная политика запрещает совместное использование соединений в закрытой " -"сети WiFi" +"не удаётся подключиться к netlink для отслеживания состояния соединения: %s" -#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8 -msgid "System policy prevents sharing connections via an open WiFi network" +#: ../src/nm-netlink-monitor.c:265 +#, c-format +msgid "unable to enable netlink handle credential passing: %s" +msgstr "не удаётся включить передачу мандата идентификатора netlink: %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 "" -"Системная политика запрещает совместное использование соединений в закрытой " -"сети WiFi" +"не удалось создать идентификатор netlink для отслеживания состояния " +"соединения: %s" + +#: ../src/nm-netlink-monitor.c:376 +#, c-format +msgid "unable to allocate netlink link cache for monitoring link status: %s" +msgstr "" +"не удалось выделить кэш netlink для отслеживания состояния соединения: %s" + +#: ../src/nm-netlink-monitor.c:502 +#, c-format +msgid "unable to join netlink group: %s" +msgstr "не удалось войти в группу netlink: %s" + +#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642 +#, c-format +msgid "error updating link cache: %s" +msgstr "ошибка обновления кэша соединения: %s" + +#: ../src/settings/plugins/ifcfg-rh/reader.c:3512 +#: ../src/settings/plugins/ifnet/connection_parser.c:51 +msgid "System" +msgstr "Система" + +#~ msgid "SCOPE" +#~ msgstr "ОБЛАСТЬ" + +#~ msgid "DBUS-SERVICE" +#~ msgstr "СЛУЖБА DBUS" + +#~ msgid "system" +#~ msgstr "система" + +#~ msgid "user" +#~ msgstr "пользователь" + +#~ msgid "System connections" +#~ msgstr "Соединения систем" + +#~ msgid "User connections" +#~ msgstr "Соединения пользователя" + +#~ msgid "Error: Obtaining active connection for '%s' failed." +#~ msgstr "Ошибка: не удалось установить активное соединение для «%s»" +#~ msgid "Auto %s" +#~ msgstr "Авто %s" diff --git a/po/uk.po b/po/uk.po index 40850710..5bec199e 100644 --- a/po/uk.po +++ b/po/uk.po @@ -1,222 +1,2049 @@ -# Ukrainian translation of NetworkManager -# Copyright (C) Free Software Foundation, 2005 +# Copyright (C) 2011 Free Software Foundation, Inc. # This file is distributed under the same license as the NetworkManager package. -# Maxim Dziumanenko , 2005-2007 # +# Yuri Chornoivan , 2011. msgid "" msgstr "" -"Project-Id-Version: NetworkManager\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-02-16 15:51+0200\n" -"PO-Revision-Date: 2007-02-16 03:32+0200\n" -"Last-Translator: Maxim Dziumanenko \n" -"Language-Team: Ukrainian \n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" +"product=NetworkManager&keywords=I18N+L10N&component=general\n" +"POT-Creation-Date: 2011-08-19 03:25+0000\n" +"PO-Revision-Date: 2011-08-19 19:00+0300\n" +"Last-Translator: Yuri Chornoivan \n" +"Language-Team: Ukrainian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" -"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Language: uk\n" +"X-Generator: Lokalize 1.2\n" +"Plural-Forms: nplurals=1; plural=0;\n" -#: ../gnome/vpn-properties/nm-vpn-properties.c:417 -msgid "Cannot add VPN connection" -msgstr "Не вдається додати з'єднання VPN" +#: ../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 "НАЗВА" -#: ../gnome/vpn-properties/nm-vpn-properties.c:419 +#. 0 +#: ../cli/src/connections.c:65 ../cli/src/connections.c:79 +msgid "UUID" +msgstr "UUID" + +#. 1 +#: ../cli/src/connections.c:66 +msgid "DEVICES" +msgstr "ПРИСТРОЇ" + +#. 2 +#: ../cli/src/connections.c:67 +msgid "DEFAULT" +msgstr "ТИПОВЕ" + +#. 3 +#: ../cli/src/connections.c:68 +msgid "SPEC-OBJECT" +msgstr "SPEC-OBJECT" + +#. 4 +#: ../cli/src/connections.c:69 +msgid "VPN" +msgstr "VPN" + +#. 5 +#. 6 +#. 2 +#. 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-PATH" + +#. 1 +#. 0 +#. 1 +#. 2 +#: ../cli/src/connections.c:80 ../cli/src/devices.c:67 +#: ../cli/src/devices.c:103 ../cli/src/devices.c:227 +msgid "TYPE" +msgstr "ТИП" + +#. 2 +#: ../cli/src/connections.c:81 +msgid "TIMESTAMP" +msgstr "ЧАСОВА МІТКА" + +#. 3 +#: ../cli/src/connections.c:82 +msgid "TIMESTAMP-REAL" +msgstr "ДІЙСНА ЧАСОВА МІТКА" + +#. 4 +#: ../cli/src/connections.c:83 +msgid "AUTOCONNECT" +msgstr "АВТОЗ’ЄДНАННЯ" + +#. 5 +#: ../cli/src/connections.c:84 +msgid "READONLY" +msgstr "ЛИШЕ ЧИТАННЯ" + +#: ../cli/src/connections.c:167 +#, c-format +msgid "" +"Usage: nmcli con { COMMAND | help }\n" +" COMMAND := { list | status | up | down }\n" +"\n" +" list [id | uuid ]\n" +" status\n" +" up id | uuid [iface ] [ap ] [nsp ] [--" +"nowait] [--timeout ]\n" +" up id | uuid [iface ] [ap ] [--nowait] [--timeout " +"]\n" +" down id | uuid \n" +msgstr "" +"Використання: nmcli con { КОМАНДА | help }\n" +" КОМАНДА := { list | status | up | down }\n" +"\n" +" list [id | uuid ]\n" +" status\n" +" up id | uuid [iface <інтерфейс>] [ap <ап. адреса>] [nsp <назва>] " +"[--" +"nowait] [--timeout <очікування>]\n" +" up id | uuid [iface <інтерфейс>] [ap <ап. адреса>] [--nowait] " +"[--timeout " +"<очікування>]\n" +" down id | uuid \n" + +#: ../cli/src/connections.c:220 ../cli/src/connections.c:544 +#, c-format +msgid "Error: 'con list': %s" +msgstr "Помилка: «con list»: %s" + +#: ../cli/src/connections.c:222 ../cli/src/connections.c:546 +#, c-format +msgid "Error: 'con list': %s; allowed fields: %s" +msgstr "Помилка: «con list»: %s; дозволені поля: %s" + +#: ../cli/src/connections.c:230 +msgid "Connection details" +msgstr "Параметри з’єднання" + +#: ../cli/src/connections.c:419 +msgid "never" +msgstr "ніколи" + +#. "CAPABILITIES" +#. Print header +#. "WIFI-PROPERTIES" +#: ../cli/src/connections.c:420 ../cli/src/connections.c:421 +#: ../cli/src/connections.c:599 ../cli/src/connections.c:601 +#: ../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 "так" + +#: ../cli/src/connections.c:420 ../cli/src/connections.c:421 +#: ../cli/src/connections.c:599 ../cli/src/connections.c:601 +#: ../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 "ні" + +#: ../cli/src/connections.c:495 +msgid "Connection list" +msgstr "Список з’єднань" + +#: ../cli/src/connections.c:508 ../cli/src/connections.c:1368 +#: ../cli/src/connections.c:1383 ../cli/src/connections.c:1392 +#: ../cli/src/connections.c:1402 ../cli/src/connections.c:1414 +#: ../cli/src/connections.c:1509 ../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 "Помилка: пропущено аргумент %s." + +#: ../cli/src/connections.c:521 +#, c-format +msgid "Error: %s - no such connection." +msgstr "Помилка: невідоме з’єднання %s." + +#: ../cli/src/connections.c:527 ../cli/src/connections.c:1427 +#: ../cli/src/connections.c:1526 ../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 "Невідомий параметр: %s\n" + +#: ../cli/src/connections.c:536 +#, c-format +msgid "Error: no valid parameter specified." +msgstr "Помилка: не вказано коректних параметрів." + +#: ../cli/src/connections.c:551 ../cli/src/connections.c:1617 +#: ../cli/src/devices.c:1755 ../cli/src/network-manager.c:463 +#, c-format +msgid "Error: %s." +msgstr "Помилка: %s." + +#: ../cli/src/connections.c:639 +#, c-format +msgid "Error: 'con status': %s" +msgstr "Помилка: «con status»: %s" + +#: ../cli/src/connections.c:641 +#, c-format +msgid "Error: 'con status': %s; allowed fields: %s" +msgstr "Помилка: «con status»: %s; дозволені поля: %s" + +#: ../cli/src/connections.c:649 ../cli/src/connections.c:1442 +#: ../cli/src/connections.c:1541 ../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 "Помилка: не вдалося визначити, чи працює NetworkManager: %s." + +#: ../cli/src/connections.c:653 ../cli/src/connections.c:1446 +#: ../cli/src/connections.c:1545 ../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 "Помилка: NetworkManager не працює." + +#: ../cli/src/connections.c:661 +msgid "Active connections" +msgstr "Активні з’єднання" + +#: ../cli/src/connections.c:1085 +#, c-format +msgid "no active connection on device '%s'" +msgstr "на пристрої «%s» немає активних з’єднань" + +#: ../cli/src/connections.c:1093 +#, c-format +msgid "no active connection or device" +msgstr "немає активних з’єднань або пристроїв" + +#: ../cli/src/connections.c:1164 +#, c-format +msgid "device '%s' not compatible with connection '%s'" +msgstr "пристрій «%s» несумісний зі з’єднанням «%s»" + +#: ../cli/src/connections.c:1166 +#, c-format +msgid "no device found for connection '%s'" +msgstr "не виявлено пристрою для з’єднання «%s»" + +#: ../cli/src/connections.c:1177 +msgid "activating" +msgstr "активація" + +#: ../cli/src/connections.c:1179 +msgid "activated" +msgstr "активовано" + +#: ../cli/src/connections.c:1181 ../cli/src/devices.c:304 +msgid "deactivating" +msgstr "деактивація" + +#: ../cli/src/connections.c:1184 ../cli/src/connections.c:1207 +#: ../cli/src/connections.c:1240 ../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 "невідомо" + +#: ../cli/src/connections.c:1193 +msgid "VPN connecting (prepare)" +msgstr "З’єднання VPN (приготування)" + +#: ../cli/src/connections.c:1195 +msgid "VPN connecting (need authentication)" +msgstr "З’єднання VPN (потрібне розпізнавання)" + +#: ../cli/src/connections.c:1197 +msgid "VPN connecting" +msgstr "З’єднання VPN" + +#: ../cli/src/connections.c:1199 +msgid "VPN connecting (getting IP configuration)" +msgstr "З’єднання VPN (отримання налаштувань IP)" + +#: ../cli/src/connections.c:1201 +msgid "VPN connected" +msgstr "VPN з’єднано" + +#: ../cli/src/connections.c:1203 +msgid "VPN connection failed" +msgstr "Невдала спроба з’єднання VPN" + +#: ../cli/src/connections.c:1205 +msgid "VPN disconnected" +msgstr "VPN роз’єднано" + +#: ../cli/src/connections.c:1216 +msgid "unknown reason" +msgstr "невідома причина" + +#: ../cli/src/connections.c:1218 +msgid "none" +msgstr "немає" + +#: ../cli/src/connections.c:1220 +msgid "the user was disconnected" +msgstr "користувача від’єднано" + +#: ../cli/src/connections.c:1222 +msgid "the base network connection was interrupted" +msgstr "основне з’єднання з мережею розірвано" + +#: ../cli/src/connections.c:1224 +msgid "the VPN service stopped unexpectedly" +msgstr "служба VPN неочікувано завершила роботу" + +#: ../cli/src/connections.c:1226 +msgid "the VPN service returned invalid configuration" +msgstr "службою VPN повернуто неприпустимі налаштування" + +#: ../cli/src/connections.c:1228 +msgid "the connection attempt timed out" +msgstr "перевищено час очікування на встановлення з’єднання" + +#: ../cli/src/connections.c:1230 +msgid "the VPN service did not start in time" +msgstr "службу VPN не було вчасно запущено" + +#: ../cli/src/connections.c:1232 +msgid "the VPN service failed to start" +msgstr "не вдалося запустити службу VPN" + +#: ../cli/src/connections.c:1234 +msgid "no valid VPN secrets" +msgstr "не виявлено коректних реєстраційних даних VPN" + +#: ../cli/src/connections.c:1236 +msgid "invalid VPN secrets" +msgstr "некоректні реєстраційні дані VPN" + +#: ../cli/src/connections.c:1238 +msgid "the connection was removed" +msgstr "з’єднання було вилучено" + +#: ../cli/src/connections.c:1252 +#, c-format +msgid "state: %s\n" +msgstr "стан: %s\n" + +#: ../cli/src/connections.c:1255 ../cli/src/connections.c:1281 +#, c-format +msgid "Connection activated\n" +msgstr "З’єднання активовано\n" + +#: ../cli/src/connections.c:1258 +#, c-format +msgid "Error: Connection activation failed." +msgstr "Помилка: невдала спроба активації з’єднання." + +#: ../cli/src/connections.c:1277 +#, c-format +msgid "state: %s (%d)\n" +msgstr "стан: %s (%d)\n" + +#: ../cli/src/connections.c:1287 +#, c-format +msgid "Error: Connection activation failed: %s." +msgstr "Помилка: не вдалося активувати з’єднання: %s." + +#: ../cli/src/connections.c:1304 ../cli/src/devices.c:1136 +#, c-format +msgid "Error: Timeout %d sec expired." +msgstr "Помилка: перевищено час очікування у %d с." + +#: ../cli/src/connections.c:1317 +#, c-format +msgid "Error: Connection activation failed: %s" +msgstr "Помилка: не вдалося активувати з’єднання: %s" + +#: ../cli/src/connections.c:1323 +#, c-format +msgid "Active connection state: %s\n" +msgstr "Стан активного з’єднання: %s\n" + +#: ../cli/src/connections.c:1324 +#, c-format +msgid "Active connection path: %s\n" +msgstr "Адреса активного з’єднання: %s\n" + +#: ../cli/src/connections.c:1376 ../cli/src/connections.c:1517 +#, c-format +msgid "Error: Unknown connection: %s." +msgstr "Помилка: невідоме з’єднання: %s." + +#: ../cli/src/connections.c:1422 ../cli/src/devices.c:1208 +#, c-format +msgid "Error: timeout value '%s' is not valid." +msgstr "Помилка: значення часу очікування «%s» є некоректним." + +#: ../cli/src/connections.c:1435 ../cli/src/connections.c:1534 +#, c-format +msgid "Error: id or uuid has to be specified." +msgstr "Помилка: мало бути вказано id або uuid." + +#: ../cli/src/connections.c:1463 +#, c-format +msgid "Error: No suitable device found: %s." +msgstr "Помилка: не знайдено відповідних пристроїв: %s." + +#: ../cli/src/connections.c:1465 +#, c-format +msgid "Error: No suitable device found." +msgstr "Помилка: не знайдено відповідних пристроїв." + +#: ../cli/src/connections.c:1570 +#, c-format +msgid "Warning: Connection not active\n" +msgstr "Помилка: з’єднання не є активним\n" + +#: ../cli/src/connections.c:1608 +#, c-format +msgid "Error: 'con' command '%s' is not valid." +msgstr "Помилка: команда «con» «%s» є некоректною." + +#: ../cli/src/connections.c:1673 +#, c-format +msgid "Error: could not connect to D-Bus." +msgstr "Помилка: не вдалося встановити з’єднання з D-Bus." + +#: ../cli/src/connections.c:1680 +#, c-format +msgid "Error: Could not get system settings." +msgstr "Помилка: не вдалося отримати параметри системи." + +#: ../cli/src/connections.c:1690 +#, c-format +msgid "Error: Can't obtain connections: settings service is not running." +msgstr "" +"Помилка: не вдалося отримати список з’єднань: служба параметрів не працює." + +#. 0 +#. 9 +#. 3 +#: ../cli/src/devices.c:66 ../cli/src/devices.c:102 ../cli/src/devices.c:212 +#: ../cli/src/devices.c:228 +msgid "DEVICE" +msgstr "ПРИСТРІЙ" + +#. 1 +#. 4 +#. 1 +#: ../cli/src/devices.c:68 ../cli/src/devices.c:106 +#: ../cli/src/network-manager.c:39 +msgid "STATE" +msgstr "СТАН" + +#: ../cli/src/devices.c:78 +msgid "GENERAL" +msgstr "ЗАГАЛЬНІ" + +#. 0 +#: ../cli/src/devices.c:79 +msgid "CAPABILITIES" +msgstr "МОЖЛИВОСТІ" + +#. 1 +#: ../cli/src/devices.c:80 +msgid "WIFI-PROPERTIES" +msgstr "ПАРАМЕТРИ WIFI" + +#. 2 +#: ../cli/src/devices.c:81 +msgid "AP" +msgstr "ТД" + +#. 3 +#: ../cli/src/devices.c:82 +msgid "WIRED-PROPERTIES" +msgstr "ПАРАМЕТРИ WIRED" + +#. 4 +#: ../cli/src/devices.c:83 +msgid "WIMAX-PROPERTIES" +msgstr "ПАРАМЕТРИ WIMAX" + +#. 5 +#. 0 +#: ../cli/src/devices.c:84 ../cli/src/devices.c:225 +msgid "NSP" +msgstr "NSP" + +#. 6 +#: ../cli/src/devices.c:85 +msgid "IP4-SETTINGS" +msgstr "ПАРАМЕТРИ IP4" + +#. 7 +#: ../cli/src/devices.c:86 +msgid "IP4-DNS" +msgstr "IP4-DNS" + +#. 8 +#: ../cli/src/devices.c:87 +msgid "IP6-SETTINGS" +msgstr "ПАРАМЕТРИ IP6" + +#. 9 +#: ../cli/src/devices.c:88 +msgid "IP6-DNS" +msgstr "IP6-DNS" + +#. 2 +#: ../cli/src/devices.c:104 +msgid "DRIVER" +msgstr "ДРАЙВЕР" + +#. 3 +#: ../cli/src/devices.c:105 +msgid "HWADDR" +msgstr "АП.АДРЕСА" + +#. 0 +#: ../cli/src/devices.c:115 +msgid "CARRIER-DETECT" +msgstr "ВИЗН.НОСІЯ" + +#. 1 +#: ../cli/src/devices.c:116 +msgid "SPEED" +msgstr "ШВИДКІСТЬ" + +#. 0 +#: ../cli/src/devices.c:125 +msgid "CARRIER" +msgstr "НОСІЙ" + +#. 0 +#: ../cli/src/devices.c:135 +msgid "WEP" +msgstr "WEP" + +#. 1 +#: ../cli/src/devices.c:136 +msgid "WPA" +msgstr "WPA" + +#. 2 +#: ../cli/src/devices.c:137 +msgid "WPA2" +msgstr "WPA2" + +#. 3 +#: ../cli/src/devices.c:138 +msgid "TKIP" +msgstr "TKIP" + +#. 4 +#: ../cli/src/devices.c:139 +msgid "CCMP" +msgstr "CCMP" + +#. 0 +#: ../cli/src/devices.c:149 +msgid "CTR-FREQ" +msgstr "CTR-FREQ" + +#. 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 "TX-POW" + +#. 4 +#: ../cli/src/devices.c:153 +msgid "BSID" +msgstr "BSID" + +#. 0 +#: ../cli/src/devices.c:163 ../cli/src/devices.c:174 +msgid "ADDRESS" +msgstr "АДРЕСА" + +#. 1 +#: ../cli/src/devices.c:164 ../cli/src/devices.c:175 +msgid "PREFIX" +msgstr "ПРЕФІКС" + +#. 2 +#: ../cli/src/devices.c:165 ../cli/src/devices.c:176 +msgid "GATEWAY" +msgstr "ШЛЮЗ" + +#. 0 +#: ../cli/src/devices.c:185 ../cli/src/devices.c:194 +msgid "DNS" +msgstr "DNS" + +#. 0 +#: ../cli/src/devices.c:203 +msgid "SSID" +msgstr "SSID" + +#. 1 +#: ../cli/src/devices.c:204 +msgid "BSSID" +msgstr "BSSID" + +#. 2 +#: ../cli/src/devices.c:205 +msgid "MODE" +msgstr "РЕЖИМ" + +#. 3 +#: ../cli/src/devices.c:206 +msgid "FREQ" +msgstr "ЧАСТОТА" + +#. 4 +#: ../cli/src/devices.c:207 +msgid "RATE" +msgstr "ШВИДКІСТЬ" + +#. 5 +#. 1 +#: ../cli/src/devices.c:208 ../cli/src/devices.c:226 +msgid "SIGNAL" +msgstr "СИГНАЛ" + +#. 6 +#: ../cli/src/devices.c:209 +msgid "SECURITY" +msgstr "ЗАХИСТ" + +#. 7 +#: ../cli/src/devices.c:210 +msgid "WPA-FLAGS" +msgstr "ПРАПОРЦІ WPA" + +#. 8 +#: ../cli/src/devices.c:211 +msgid "RSN-FLAGS" +msgstr "ПРАПОРЦІ RSN" + +#. 10 +#. 4 +#: ../cli/src/devices.c:213 ../cli/src/devices.c:229 +msgid "ACTIVE" +msgstr "АКТИВНИЙ" + +#: ../cli/src/devices.c:256 +#, c-format msgid "" -"No suitable VPN software was found on your system. Contact your system " -"administrator." +"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 ]\n" +" disconnect iface [--nowait] [--timeout ]\n" +" wifi [list [iface ] [hwaddr ]]\n" +" wimax [list [iface ] [nsp ]]\n" +"\n" +msgstr "" +"Використання: nmcli dev { КОМАНДА | help }\n" +"\n" +" КОМАНДА := { status | list | disconnect | wifi | wimax }\n" +"\n" +" КОМАНДА := { status | list | disconnect | wifi }\n" +"\n" +" status\n" +" list [iface <інтерфейс>]\n" +" disconnect iface <інтерфейс> [--nowait] [--timeout <очікування>]\n" +" wifi [list [iface <інтерфейс>] [hwaddr <ап. адреса>]]\n" +" wimax [list [iface <інтерфейс>] [nsp <назва>]]\n" +"\n" + +#: ../cli/src/devices.c:284 +msgid "unmanaged" +msgstr "некерований" + +#: ../cli/src/devices.c:286 +msgid "unavailable" +msgstr "недоступний" + +#: ../cli/src/devices.c:288 ../cli/src/network-manager.c:115 +msgid "disconnected" +msgstr "роз'єднано" + +#: ../cli/src/devices.c:290 +msgid "connecting (prepare)" +msgstr "з’єднання (приготування)" + +#: ../cli/src/devices.c:292 +msgid "connecting (configuring)" +msgstr "з’єднання (налаштовування)" + +#: ../cli/src/devices.c:294 +msgid "connecting (need authentication)" +msgstr "з’єднання (потрібне розпізнавання)" + +#: ../cli/src/devices.c:296 +msgid "connecting (getting IP configuration)" +msgstr "з’єднання (отримання налаштувань IP)" + +#: ../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 "з'єднано" + +#: ../cli/src/devices.c:306 +msgid "connection failed" +msgstr "невдала спроба з’єднання" + +#: ../cli/src/devices.c:331 ../cli/src/devices.c:341 ../cli/src/devices.c:501 +#: ../cli/src/devices.c:545 +msgid "Unknown" +msgstr "Невідомо" + +#: ../cli/src/devices.c:374 +msgid "(none)" +msgstr "(немає)" + +#: ../cli/src/devices.c:399 +#, c-format +msgid "%s: error converting IP4 address 0x%X" +msgstr "%s: помилка під час перетворення адреси IP4 0x%X" + +#: ../cli/src/devices.c:470 +#, c-format +msgid "%u MHz" +msgstr "%u МГц" + +#: ../cli/src/devices.c:471 +#, c-format +msgid "%u MB/s" +msgstr "%u МБ/с" + +#: ../cli/src/devices.c:480 +msgid "Encrypted: " +msgstr "Зашифровано: " + +#: ../cli/src/devices.c:485 +msgid "WEP " +msgstr "WEP " + +#: ../cli/src/devices.c:487 +msgid "WPA " +msgstr "WPA " + +#: ../cli/src/devices.c:489 +msgid "WPA2 " +msgstr "WPA2 " + +#: ../cli/src/devices.c:492 +msgid "Enterprise " +msgstr "Enterprise " + +#: ../cli/src/devices.c:501 +msgid "Ad-Hoc" +msgstr "Ad-Hoc" + +#: ../cli/src/devices.c:501 +msgid "Infrastructure" +msgstr "Інфраструктура" + +#: ../cli/src/devices.c:536 +msgid "Home" +msgstr "Домівка" + +#: ../cli/src/devices.c:539 +msgid "Partner" +msgstr "Партнер" + +#: ../cli/src/devices.c:542 +msgid "Roaming" +msgstr "Роумінг" + +#: ../cli/src/devices.c:612 +#, c-format +msgid "Error: 'dev list': %s" +msgstr "Помилка: «dev list»: %s" + +#: ../cli/src/devices.c:614 +#, c-format +msgid "Error: 'dev list': %s; allowed fields: %s" +msgstr "Помилка: «dev list»: %s; дозволені поля: %s" + +#: ../cli/src/devices.c:623 +msgid "Device details" +msgstr "Дані щодо пристрою" + +#: ../cli/src/devices.c:657 ../cli/src/devices.c:1152 ../cli/src/utils.c:342 +msgid "(unknown)" +msgstr "(невідомо)" + +#: ../cli/src/devices.c:658 +msgid "unknown)" +msgstr "невідомо)" + +#: ../cli/src/devices.c:684 +#, c-format +msgid "%u Mb/s" +msgstr "%u Мб/с" + +#. Print header +#. "WIRED-PROPERTIES" +#: ../cli/src/devices.c:757 +msgid "on" +msgstr "увімкн." + +#: ../cli/src/devices.c:757 +msgid "off" +msgstr "вимкн." + +#: ../cli/src/devices.c:1004 +#, c-format +msgid "Error: 'dev status': %s" +msgstr "Помилка: «dev status»: %s" + +#: ../cli/src/devices.c:1006 +#, c-format +msgid "Error: 'dev status': %s; allowed fields: %s" +msgstr "Помилка: «dev status»: %s; дозволені поля: %s" + +#: ../cli/src/devices.c:1029 +msgid "Status of devices" +msgstr "Стан пристрою" + +#: ../cli/src/devices.c:1060 +#, c-format +msgid "Error: '%s' argument is missing." +msgstr "Помилка: не вказано аргументу «%s»." + +#: ../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 "Помилка: не знайдено пристрій «%s»." + +#: ../cli/src/devices.c:1124 +#, c-format +msgid "Success: Device '%s' successfully disconnected." +msgstr "Виконано: пристрій «%s» успішно від’єднано." + +#: ../cli/src/devices.c:1149 +#, c-format +msgid "Error: Device '%s' (%s) disconnecting failed: %s" +msgstr "Помилка: невдала спроба від’єднання «%s» (%s): %s" + +#: ../cli/src/devices.c:1157 +#, c-format +msgid "Device state: %d (%s)\n" +msgstr "Стан пристрою: %d (%s)\n" + +#: ../cli/src/devices.c:1222 +#, c-format +msgid "Error: iface has to be specified." +msgstr "Помилка: мало бути вказано інтерфейс." + +#: ../cli/src/devices.c:1347 +#, c-format +msgid "Error: 'dev wifi': %s" +msgstr "Помилка: «dev wifi»: %s" + +#: ../cli/src/devices.c:1349 +#, c-format +msgid "Error: 'dev wifi': %s; allowed fields: %s" +msgstr "Помилка: «dev wifi»: %s; дозволені поля: %s" + +#: ../cli/src/devices.c:1372 +msgid "WiFi scan list" +msgstr "Список сканування WiFi" + +#: ../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 "Помилка: не знайдено точки доступу з апаратною адресою «%s»." + +#: ../cli/src/devices.c:1426 +#, c-format +msgid "Error: Device '%s' is not a WiFi device." +msgstr "Помилка: пристрій «%s» не є пристроєм WiFi." + +#: ../cli/src/devices.c:1490 +#, c-format +msgid "Error: 'dev wifi' command '%s' is not valid." +msgstr "Помилка: команда «dev wifi» «%s» є некоректною." + +#: ../cli/src/devices.c:1566 +#, c-format +msgid "Error: 'dev wimax': %s" +msgstr "Помилка: «dev wimax»: %s" + +#: ../cli/src/devices.c:1568 +#, c-format +msgid "Error: 'dev wimax': %s; allowed fields: %s" +msgstr "Помилка: «dev wimax»: %s; дозволені поля: %s" + +#: ../cli/src/devices.c:1591 +msgid "WiMAX NSP list" +msgstr "Список WiMAX NSP" + +#: ../cli/src/devices.c:1628 +#, c-format +msgid "Error: NSP with name '%s' not found." +msgstr "Помилка: не знайдено NSP з назвою «%s»." + +#: ../cli/src/devices.c:1639 +#, c-format +msgid "Error: Device '%s' is not a WiMAX device." +msgstr "Помилка: пристрій «%s» не є пристроєм WiMAX." + +#: ../cli/src/devices.c:1697 +#, c-format +msgid "Error: 'dev wimax' command '%s' is not valid." +msgstr "Помилка: команда «dev wimax» «%s» є некоректною." + +#: ../cli/src/devices.c:1747 +#, c-format +msgid "Error: 'dev' command '%s' is not valid." +msgstr "Помилка: команда «dev» «%s» є некоректною." + +#: ../cli/src/network-manager.c:37 +msgid "RUNNING" +msgstr "ВИКОНУЄТЬСЯ" + +#. 0 +#: ../cli/src/network-manager.c:38 +msgid "VERSION" +msgstr "ВЕРСІЯ" + +#. 2 +#: ../cli/src/network-manager.c:40 +msgid "NET-ENABLED" +msgstr "NET-ENABLED" + +#. 3 +#: ../cli/src/network-manager.c:41 +msgid "WIFI-HARDWARE" +msgstr "ОБЛАДНАННЯ WIFI" + +#. 4 +#: ../cli/src/network-manager.c:42 +msgid "WIFI" +msgstr "WIFI" + +#. 5 +#: ../cli/src/network-manager.c:43 +msgid "WWAN-HARDWARE" +msgstr "ОБЛАДНАННЯ WWAN" + +#. 6 +#: ../cli/src/network-manager.c:44 +msgid "WWAN" +msgstr "WWAN" + +#. 7 +#: ../cli/src/network-manager.c:45 +msgid "WIMAX-HARDWARE" +msgstr "ОБЛАДНАННЯ WIMAX" + +#. 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" +" enable [true|false]\n" +" sleep [true|false]\n" +" wifi [on|off]\n" +" wwan [on|off]\n" +" wimax [on|off]\n" +"\n" +msgstr "" +"Використання: nmcli nm { КОМАНДА | help }\n" +"\n" +" КОМАНДА := { status | enable | sleep | wifi | wwan | wimax }\n" +"\n" +" КОМАНДА := { status | enable | sleep | wifi | wwan }\n" +"\n" +" status\n" +" enable [true|false]\n" +" sleep [true|false]\n" +" wifi [on|off]\n" +" wwan [on|off]\n" +" wimax [on|off]\n" +"\n" + +#: ../cli/src/network-manager.c:103 +msgid "asleep" +msgstr "приспаний" + +#: ../cli/src/network-manager.c:105 +msgid "connecting" +msgstr "з’єднується" + +#: ../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 "роз’єднується" + +#: ../cli/src/network-manager.c:153 +#, c-format +msgid "Error: 'nm status': %s" +msgstr "Помилка: «nm status»: %s" + +#: ../cli/src/network-manager.c:155 +#, c-format +msgid "Error: 'nm status': %s; allowed fields: %s" +msgstr "Помилка: «nm status»: %s; дозволені поля: %s" + +#. 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 "увімкнено" + +#: ../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 "вимкнено" + +#: ../cli/src/network-manager.c:188 +msgid "NetworkManager status" +msgstr "Стан NetworkManager" + +#. Print header +#: ../cli/src/network-manager.c:191 +msgid "running" +msgstr "виконується" + +#: ../cli/src/network-manager.c:191 +msgid "not running" +msgstr "не виконується" + +#: ../cli/src/network-manager.c:222 ../cli/src/utils.c:322 +#, c-format +msgid "Error: Couldn't connect to system bus: %s" +msgstr "" +"Помилка: не вдалося встановити з’єднання з системним каналом обміну даними: %s" + +#: ../cli/src/network-manager.c:233 +#, c-format +msgid "Error: Couldn't create D-Bus object proxy." +msgstr "Помилка: не вдалося створити проксі-об’єкт D-Bus." + +#: ../cli/src/network-manager.c:239 +#, c-format +msgid "Error in sleep: %s" +msgstr "Помилка у затримці: %s" + +#: ../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 "" +"Помилка: значення «--fields» «%s» не можна використовувати тут; дозволені " +"поля: %s" + +#: ../cli/src/network-manager.c:291 +msgid "Networking enabled" +msgstr "Мережу увімкнено" + +#: ../cli/src/network-manager.c:307 +#, c-format +msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'." +msgstr "" +"Помилка: некоректний параметр «enable»: «%s»; мало бути «true» або «false»." + +#: ../cli/src/network-manager.c:317 +#, c-format +msgid "Error: Sleeping status is not exported by NetworkManager." +msgstr "Помилка: стан присипляння не експортовано NetworkManager." + +#: ../cli/src/network-manager.c:325 +#, c-format +msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'." +msgstr "" +"Помилка: некоректний параметр «sleep»: «%s»; мало бути «true» або «false»." + +#: ../cli/src/network-manager.c:346 +msgid "WiFi enabled" +msgstr "WiFi увімкнено" + +#: ../cli/src/network-manager.c:362 +#, c-format +msgid "Error: invalid 'wifi' parameter: '%s'." +msgstr "Помилка: некоректний параметр «wifi»: «%s»." + +#: ../cli/src/network-manager.c:384 +msgid "WWAN enabled" +msgstr "WWAN увімкнено" + +#: ../cli/src/network-manager.c:400 +#, c-format +msgid "Error: invalid 'wwan' parameter: '%s'." +msgstr "Помилка: некоректний параметр «wwan»: «%s»." + +#: ../cli/src/network-manager.c:423 +msgid "WiMAX enabled" +msgstr "WiMAX увімкнено" + +#: ../cli/src/network-manager.c:439 +#, c-format +msgid "Error: invalid 'wimax' parameter: '%s'." +msgstr "Помилка: некоректний параметр «wimax»: «%s»." + +#: ../cli/src/network-manager.c:452 +#, c-format +msgid "Error: 'nm' command '%s' is not valid." +msgstr "Помилка: команда «nm» «%s» є некоректною." + +#: ../cli/src/nmcli.c:64 +#, c-format +msgid "" +"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n" +"\n" +"OPTIONS\n" +" -t[erse] terse output\n" +" -p[retty] pretty output\n" +" -m[ode] tabular|multiline output mode\n" +" -f[ields] |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" +"OBJECT\n" +" nm NetworkManager status\n" +" con NetworkManager connections\n" +" dev devices managed by NetworkManager\n" +"\n" +msgstr "" +"Використання: %s [ПАРАМЕТРИ] ОБ’ЄКТ { КОМАНДА | help }\n" +"\n" +"ПАРАМЕТРИ\n" +" -t[erse] скорочене виведення\n" +" -p[retty] форматоване виведення\n" +" -m[ode] tabular|multiline режим виведення\n" +" -f[ields] <поле1,поле2,...>|all|common вказати поля для виведення\n" +" -e[scape] yes|no вилучати роздільники стовпчиків " +"у значеннях\n" +" -n[ocheck] не перевіряти версії nmcli і " +"NetworkManager\n" +" -v[ersion] показати версію програми\n" +" -h[elp] вивести цю довідку\n" +"\n" +"ОБ’ЄКТ\n" +" nm стан NetworkManager\n" +" con з’єднання NetworkManager\n" +" dev пристрої, керовані NetworkManager\n" +"\n" + +#: ../cli/src/nmcli.c:109 +#, c-format +msgid "Error: Object '%s' is unknown, try 'nmcli help'." +msgstr "Помилка: невідомий об’єкт «%s», спробуйте «nmcli help»." + +#: ../cli/src/nmcli.c:139 +#, c-format +msgid "Error: Option '--terse' is specified the second time." +msgstr "Помилка: параметр «--terse» вказано двічі." + +#: ../cli/src/nmcli.c:144 +#, c-format +msgid "Error: Option '--terse' is mutually exclusive with '--pretty'." +msgstr "" +"Помилка: параметр «--terse» і «--pretty» не можна використовувати одночасно." + +#: ../cli/src/nmcli.c:152 +#, c-format +msgid "Error: Option '--pretty' is specified the second time." +msgstr "Помилка: параметр «--pretty» вказано двічі." + +#: ../cli/src/nmcli.c:157 +#, c-format +msgid "Error: Option '--pretty' is mutually exclusive with '--terse'." +msgstr "" +"Помилка: параметр «--pretty» і «--terse» не можна використовувати одночасно" + +#: ../cli/src/nmcli.c:167 ../cli/src/nmcli.c:183 +#, c-format +msgid "Error: missing argument for '%s' option." +msgstr "Помилка: не вказано аргумент параметра «%s»." + +#: ../cli/src/nmcli.c:176 ../cli/src/nmcli.c:192 +#, c-format +msgid "Error: '%s' is not valid argument for '%s' option." +msgstr "Помилка: «%s» не є коректним аргументом «%s»." + +#: ../cli/src/nmcli.c:199 +#, c-format +msgid "Error: fields for '%s' options are missing." +msgstr "Помилка: не вказано полів для параметрів «%s»." + +#: ../cli/src/nmcli.c:207 +#, c-format +msgid "nmcli tool, version %s\n" +msgstr "інструмент nmcli, версія %s\n" + +#: ../cli/src/nmcli.c:213 +#, c-format +msgid "Error: Option '%s' is unknown, try 'nmcli -help'." +msgstr "Помилка: невідомий параметр «%s», спробуйте «nmcli -help»." + +#: ../cli/src/nmcli.c:232 +#, c-format +msgid "Caught signal %d, shutting down..." +msgstr "Отримано сигнал %d, завершення роботи…" + +#: ../cli/src/nmcli.c:257 +msgid "Error: Could not create NMClient object." +msgstr "Помилка: не вдалося створити об’єкт NMClient." + +#: ../cli/src/nmcli.c:273 +msgid "Success" +msgstr "Виконано" + +#: ../cli/src/settings.c:423 +#, c-format +msgid "%d (hex-ascii-key)" +msgstr "%d (16-ковий ASCII-ключ)" + +#: ../cli/src/settings.c:425 +#, c-format +msgid "%d (104/128-bit passphrase)" +msgstr "%d (104/128-бітовий пароль)" + +#: ../cli/src/settings.c:428 +#, c-format +msgid "%d (unknown)" +msgstr "%d (невідомо)" + +#: ../cli/src/settings.c:454 +msgid "0 (unknown)" +msgstr "0 (невідомо)" + +#: ../cli/src/settings.c:460 +msgid "any, " +msgstr "будь-який, " + +#: ../cli/src/settings.c:462 +msgid "900 MHz, " +msgstr "900 МГц, " + +#: ../cli/src/settings.c:464 +msgid "1800 MHz, " +msgstr "1800 МГц, " + +#: ../cli/src/settings.c:466 +msgid "1900 MHz, " +msgstr "1900 МГц, " + +#: ../cli/src/settings.c:468 +msgid "850 MHz, " +msgstr "800 МГц, " + +#: ../cli/src/settings.c:470 +msgid "WCDMA 3GPP UMTS 2100 MHz, " +msgstr "WCDMA 3GPP UMTS 2100 МГц, " + +#: ../cli/src/settings.c:472 +msgid "WCDMA 3GPP UMTS 1800 MHz, " +msgstr "WCDMA 3GPP UMTS 1800 МГц, " + +#: ../cli/src/settings.c:474 +msgid "WCDMA 3GPP UMTS 1700/2100 MHz, " +msgstr "WCDMA 3GPP UMTS 1700/2100 МГц, " + +#: ../cli/src/settings.c:476 +msgid "WCDMA 3GPP UMTS 800 MHz, " +msgstr "WCDMA 3GPP UMTS 800 МГц, " + +#: ../cli/src/settings.c:478 +msgid "WCDMA 3GPP UMTS 850 MHz, " +msgstr "WCDMA 3GPP UMTS 850 МГц, " + +#: ../cli/src/settings.c:480 +msgid "WCDMA 3GPP UMTS 900 MHz, " +msgstr "WCDMA 3GPP UMTS 900 МГц, " + +#: ../cli/src/settings.c:482 +msgid "WCDMA 3GPP UMTS 1700 MHz, " +msgstr "WCDMA 3GPP UMTS 1700 МГц, " + +#: ../cli/src/settings.c:566 ../cli/src/settings.c:732 +msgid "auto" +msgstr "авто" + +#: ../cli/src/settings.c:727 ../cli/src/settings.c:730 +#: ../cli/src/settings.c:731 ../cli/src/utils.c:176 +msgid "not set" +msgstr "не встановлено" + +#: ../cli/src/utils.c:128 +#, c-format +msgid "field '%s' has to be alone" +msgstr "поле «%s» має бути єдиним" + +#: ../cli/src/utils.c:131 +#, c-format +msgid "invalid field '%s'" +msgstr "некоректне поле «%s»" + +#: ../cli/src/utils.c:150 +#, c-format +msgid "Option '--terse' requires specifying '--fields'" +msgstr "Використання параметра «--terse» потребує визначення «--fields»" + +#: ../cli/src/utils.c:154 +#, c-format +msgid "Option '--terse' requires specific '--fields' option values , not '%s'" +msgstr "" +"Параметр «--terse» потребує певних значень параметра «--fields», а не «%s»" + +#: ../cli/src/utils.c:333 +#, c-format +msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus" msgstr "" -"У системі не встановлено потрібне програмне забезпечення VPN. Зв'яжіться з " -"системним адміністратором." +"Помилка: не вдалося створити проксі-об’єкт D-Bus для org.freedesktop.DBus" -#: ../gnome/vpn-properties/nm-vpn-properties.c:461 -msgid "Cannot import VPN connection" -msgstr "Не вдається імпортувати з'єднання VPN" +#: ../cli/src/utils.c:341 +#, c-format +msgid "Error: NameHasOwner request failed: %s" +msgstr "Помилка: невдала спроба запиту NameHasOwner: %s" -#: ../gnome/vpn-properties/nm-vpn-properties.c:463 +#: ../cli/src/utils.c:386 #, c-format msgid "" -"Cannot find suitable software for VPN connection type '%s' to import the " -"file '%s'. Contact your system administrator." +"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --" +"nocheck to suppress the warning.\n" msgstr "" -"Не вдається знайти відповідне програмне забезпечення для з'єднань VPN типу '%" -"s', щоб імпортувати файл '%s'. Зв'яжіться з системним адміністратором." +"Увага: версії nmcli (%s) і NetworkManager (%s) не збігаються. Скористайтеся " +"параметром --nocheck для вимикання цього попередження.\n" -#: ../gnome/vpn-properties/nm-vpn-properties.c:580 +#: ../cli/src/utils.c:395 #, c-format -msgid "Error retrieving VPN connection '%s'" -msgstr "Помилка отримання з'єднання VPN '%s'" +msgid "" +"Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force " +"execution using --nocheck, but the results are unpredictable." +msgstr "" +"Помилка: версії nmcli (%s) і NetworkManager (%s) не збігаються. Для запуску у " +"примусовому режимі скористайтеся параметром --nocheck, але результати можуть " +"бути непередбачуваними.\n." -#: ../gnome/vpn-properties/nm-vpn-properties.c:583 +#: ../libnm-util/crypto.c:133 #, c-format -msgid "" -"Could not find the UI files for VPN connection type '%s'. Contact your " -"system administrator." +msgid "PEM key file had no end tag '%s'." +msgstr "У файлі ключа PEM не міститься завершального теґу «%s»." + +#: ../libnm-util/crypto.c:146 +#, c-format +msgid "Doesn't look like a PEM private key file." +msgstr "Ймовірно, цей файл не є файлом закритого ключа PEM." + +#: ../libnm-util/crypto.c:154 +#, c-format +msgid "Not enough memory to store PEM file data." +msgstr "Недостатньо пам’яті для збереження даних файла PEM." + +#: ../libnm-util/crypto.c:170 +#, c-format +msgid "Malformed PEM file: Proc-Type was not first tag." +msgstr "Помилкове форматування PEM: Proc-Type не є першим теґом." + +#: ../libnm-util/crypto.c:178 +#, c-format +msgid "Malformed PEM file: unknown Proc-Type tag '%s'." +msgstr "Помилкове форматування PEM: невідомий теґ Proc-Type «%s»." + +#: ../libnm-util/crypto.c:188 +#, c-format +msgid "Malformed PEM file: DEK-Info was not the second tag." +msgstr "Помилкове форматування PEM: DEK-Info не є другим теґом." + +#: ../libnm-util/crypto.c:199 +#, c-format +msgid "Malformed PEM file: no IV found in DEK-Info tag." +msgstr "Помилкове форматування файла PEM: не знайдено теґу DEK-Info у ВІ." + +#: ../libnm-util/crypto.c:206 +#, c-format +msgid "Malformed PEM file: invalid format of IV in DEK-Info tag." msgstr "" -"Не вдається знайти файли графічного інтерфейсу для з'єднання VPN типу '%s'. " -"Зв'яжіться з системним адміністратором." +"Помилкове форматування файла PEM: некоректне форматування ВІ у тезі DEK-Info." -#: ../gnome/vpn-properties/nm-vpn-properties.c:727 +#: ../libnm-util/crypto.c:219 #, c-format -msgid "Delete VPN connection \"%s\"?" -msgstr "Видалити з'єднання VPN \"%s\"?" +msgid "Malformed PEM file: unknown private key cipher '%s'." +msgstr "" +"Помилкове форматування файла PEM: невідоме шифрування закритого ключа «%s»." -#: ../gnome/vpn-properties/nm-vpn-properties.c:730 +#: ../libnm-util/crypto.c:238 #, c-format -msgid "" -"All information about the VPN connection \"%s\" will be lost and you may " -"need your system administrator to provide information to create a new " -"connection." -msgstr "" -"Уся інформація про з'єднання VPN \"%s\" буде втрачена. Можливо, вам " -"доведеться звернутись до системного адміністратора за інформацією для " -"створення нового з'єднання." - -#: ../gnome/vpn-properties/nm-vpn-properties.c:924 -msgid "Unable to load" -msgstr "Не вдається завантажити" - -#: ../gnome/vpn-properties/nm-vpn-properties.c:926 -msgid "Cannot find some needed resources (the glade file)!" -msgstr "Не вдається знайти деякі необхідні ресурси (не знайдено файл glade)!" - -#. druid_window = GTK_DIALOG (gtk_dialog_new_with_buttons (_("Create VPN Connection"), -#. NULL, -#. GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, -#. GTK_STOCK_CANCEL, -#. GTK_RESPONSE_REJECT, -#. GTK_STOCK_APPLY, -#. GTK_RESPONSE_ACCEPT, -#. NULL)); -#: ../gnome/vpn-properties/nm-vpn-properties.c:1081 -msgid "Create VPN Connection" -msgstr "Створення з'єднання VPN" - -#. gtk_container_add (GTK_CONTAINER (druid_window->vbox), GTK_WIDGET(gtk_label_new("Some label"))); -#. gtk_box_pack_start (GTK_BOX (druid_window->vbox), GTK_WIDGET(druid), TRUE,TRUE,0); -#. gtk_box_pack_start (GTK_BOX (druid_window->vbox), GTK_WIDGET(gtk_label_new("Some label")), TRUE,TRUE,0); -#. toplevel = gtk_widget_get_toplevel (GTK_WIDGET (druid)); -#. gtk_signal_connect (GTK_OBJECT (toplevel), "delete_event", GTK_SIGNAL_FUNC (vpn_window_close), NULL); -#. make the druid window modal wrt. our main window -#. gtk_window_set_modal (druid_window, TRUE); -#. gtk_window_set_transient_for (GTK_WINDOW(druid_window), GTK_WINDOW (dialog)); -#. Edit dialog -#: ../gnome/vpn-properties/nm-vpn-properties.c:1099 -msgid "Edit VPN Connection" -msgstr "Правка з'єднання VPN" - -#: ../gnome/vpn-properties/nm-vpn-properties.glade.h:1 -msgid "Add a new VPN connection" -msgstr "Додати нове з'єднання VPN" - -#: ../gnome/vpn-properties/nm-vpn-properties.glade.h:2 -msgid "Delete the selected VPN connection" -msgstr "Видалити виділені з'єднання VPN" - -#: ../gnome/vpn-properties/nm-vpn-properties.glade.h:3 -msgid "E_xport" -msgstr "_Експорт" - -#: ../gnome/vpn-properties/nm-vpn-properties.glade.h:4 -msgid "Edit the selected VPN connection" -msgstr "Редагувати виділене з'єднання VPN" - -#: ../gnome/vpn-properties/nm-vpn-properties.glade.h:5 -msgid "Export the VPN settings to a file" -msgstr "Експортувати параметри VPN у файл" - -#: ../gnome/vpn-properties/nm-vpn-properties.glade.h:6 -msgid "Export the selected VPN connection to a file" -msgstr "Експортувати виділене з'єднання VPN у файл" - -#: ../gnome/vpn-properties/nm-vpn-properties.glade.h:7 -msgid "Manage Virtual Private Network Connections" -msgstr "Керування з'єднаннями VPN" - -#: ../gnome/vpn-properties/nm-vpn-properties.glade.h:8 -msgid "VPN Connections" -msgstr "Налаштовування VPN" - -#: ../src/nm-ap-security-wep.c:52 -msgid "40-bit WEP" -msgstr "40-bit WEP" - -#: ../src/nm-ap-security-wep.c:54 -msgid "104-bit WEP" -msgstr "104-bit WEP" - -#: ../src/nm-ap-security-wpa-psk.c:51 -msgid "WPA TKIP" -msgstr "WPA TKIP" - -#: ../src/nm-ap-security-wpa-psk.c:53 -msgid "WPA CCMP" -msgstr "WPA CCMP" - -#: ../src/nm-ap-security-wpa-psk.c:55 -msgid "WPA Automatic" -msgstr "WPA Automatic" - -#: ../src/nm-ap-security-wpa-psk.c:60 -msgid "WPA2 TKIP" -msgstr "WPA2 TKIP" - -#: ../src/nm-ap-security-wpa-psk.c:62 -msgid "WPA2 CCMP" -msgstr "WPA2 CCMP" - -#: ../src/nm-ap-security-wpa-psk.c:64 -msgid "WPA2 Automatic" -msgstr "WPA2 Automatic" - -#: ../src/nm-ap-security.c:326 -msgid "none" -msgstr "немає" +msgid "Could not decode private key." +msgstr "Не вдалося декодувати закритий ключ." + +#: ../libnm-util/crypto.c:284 +msgid "Failed to find expected PKCS#8 start tag." +msgstr "Не вдалося знайти очікуваний початковий теґ PKCS#8." + +#: ../libnm-util/crypto.c:292 +#, c-format +msgid "Failed to find expected PKCS#8 end tag '%s'." +msgstr "Не вдалося знайти очікуваний завершальний теґ PKCS#8 «%s»." + +#: ../libnm-util/crypto.c:312 +msgid "Not enough memory to store private key data." +msgstr "Недостатньо пам’яті для зберігання даних закритого ключа." + +#: ../libnm-util/crypto.c:317 +msgid "Failed to decode PKCS#8 private key." +msgstr "Не вдалося декодувати закритий ключ PKCS#8." + +#: ../libnm-util/crypto.c:339 ../libnm-util/crypto.c:625 +#, c-format +msgid "Not enough memory to store certificate data." +msgstr "Недостатньо пам’яті для збереження даних сертифіката." + +#: ../libnm-util/crypto.c:365 +#, c-format +msgid "IV must be an even number of bytes in length." +msgstr "Довжина ВІ має дорівнювати парній кількості байтів." + +#: ../libnm-util/crypto.c:374 +#, c-format +msgid "Not enough memory to store the IV." +msgstr "Недостатньо пам’яті для зберігання ВІ." + +#: ../libnm-util/crypto.c:385 +#, c-format +msgid "IV contains non-hexadecimal digits." +msgstr "ВІ містить не шістнадцяткові цифри." + +#: ../libnm-util/crypto.c:423 ../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 "Невідоме шифрування закритого ключа «%s»." + +#: ../libnm-util/crypto.c:432 +#, c-format +msgid "Not enough memory to decrypt private key." +msgstr "Недостатньо пам’яті для дешифрування закритого ключа." + +#: ../libnm-util/crypto.c:497 +#, c-format +msgid "Not enough memory to store decrypted private key." +msgstr "Недостатньо пам’яті для зберігання розшифрованого закритого ключа." + +#: ../libnm-util/crypto.c:542 +#, c-format +msgid "Unable to determine private key type." +msgstr "Не вдалося визначити тип закритого ключа." + +#: ../libnm-util/crypto.c:597 +#, c-format +msgid "PEM certificate had no start tag '%s'." +msgstr "Сертифікат PEM не містить початкового теґу «%s»." + +#: ../libnm-util/crypto.c:606 +#, c-format +msgid "PEM certificate had no end tag '%s'." +msgstr "Сертифікат PEM не містить завершального теґу «%s»." + +#: ../libnm-util/crypto.c:630 +#, c-format +msgid "Failed to decode certificate." +msgstr "Не вдалося декодувати сертифікат." + +#: ../libnm-util/crypto_gnutls.c:50 +msgid "Failed to initialize the crypto engine." +msgstr "Не вдалося ініціалізувати рушій шифрування." + +#: ../libnm-util/crypto_gnutls.c:92 +#, c-format +msgid "Failed to initialize the MD5 engine: %s / %s." +msgstr "Не вдалося ініціалізувати рушій обчислення MD5: %s / %s." + +#: ../libnm-util/crypto_gnutls.c:155 +#, c-format +msgid "Invalid IV length (must be at least %zd)." +msgstr "Некоректна довжина ВІ (має бути принаймні %zd)." + +#: ../libnm-util/crypto_gnutls.c:164 ../libnm-util/crypto_nss.c:184 +#, c-format +msgid "Not enough memory for decrypted key buffer." +msgstr "Недостатньо пам’яті для буфера розшифрованого ключа." + +#: ../libnm-util/crypto_gnutls.c:172 +#, c-format +msgid "Failed to initialize the decryption cipher context: %s / %s." +msgstr "Не вдалося ініціалізувати контекст шифру декодування: %s / %s." + +#: ../libnm-util/crypto_gnutls.c:181 +#, c-format +msgid "Failed to set symmetric key for decryption: %s / %s." +msgstr "Не вдалося встановити симетричний ключ для розшифрування: %s / %s." + +#: ../libnm-util/crypto_gnutls.c:190 +#, c-format +msgid "Failed to set IV for decryption: %s / %s." +msgstr "Не вдалося встановити ВІ для розшифрування: %s / %s." + +#: ../libnm-util/crypto_gnutls.c:199 +#, c-format +msgid "Failed to decrypt the private key: %s / %s." +msgstr "Не вдалося розшифрувати закритий ключ: %s / %s." + +#: ../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 "Не вдалося розшифрувати закритий ключ: неочікувана довжина доповнення." + +#: ../libnm-util/crypto_gnutls.c:220 ../libnm-util/crypto_nss.c:274 +#, c-format +msgid "Failed to decrypt the private key." +msgstr "Не вдалося розшифрувати закритий ключ." + +#: ../libnm-util/crypto_gnutls.c:285 ../libnm-util/crypto_nss.c:352 +#, c-format +msgid "Could not allocate memory for encrypting." +msgstr "Не вдалося отримати область розшифрування у пам’яті." + +#: ../libnm-util/crypto_gnutls.c:293 +#, c-format +msgid "Failed to initialize the encryption cipher context: %s / %s." +msgstr "Не вдалося ініціалізувати контекст шифру кодування: %s / %s." + +#: ../libnm-util/crypto_gnutls.c:302 +#, c-format +msgid "Failed to set symmetric key for encryption: %s / %s." +msgstr "Не вдалося встановити симетричний ключ для шифрування: %s / %s." + +#: ../libnm-util/crypto_gnutls.c:312 +#, c-format +msgid "Failed to set IV for encryption: %s / %s." +msgstr "Не вдалося встановити ВІ для шифрування: %s / %s." + +#: ../libnm-util/crypto_gnutls.c:321 +#, c-format +msgid "Failed to encrypt the data: %s / %s." +msgstr "Не вдалося зашифрувати дані: %s / %s." + +#: ../libnm-util/crypto_gnutls.c:361 +#, c-format +msgid "Error initializing certificate data: %s" +msgstr "Помилка під час спроби ініціалізації даних сертифіката: %s" + +#: ../libnm-util/crypto_gnutls.c:383 +#, c-format +msgid "Couldn't decode certificate: %s" +msgstr "Не вдалося декодувати сертифікат: %s" + +#: ../libnm-util/crypto_gnutls.c:407 +#, c-format +msgid "Couldn't initialize PKCS#12 decoder: %s" +msgstr "Не вдалося ініціалізувати інструмент розшифрування PKCS#12: %s" + +#: ../libnm-util/crypto_gnutls.c:420 +#, c-format +msgid "Couldn't decode PKCS#12 file: %s" +msgstr "Не вдалося розшифрувати файл PKCS#12: %s" + +#: ../libnm-util/crypto_gnutls.c:432 +#, c-format +msgid "Couldn't verify PKCS#12 file: %s" +msgstr "Не вдалося перевірити файл PKCS#12: %s" + +#: ../libnm-util/crypto_gnutls.c:460 +#, c-format +msgid "Couldn't initialize PKCS#8 decoder: %s" +msgstr "Не вдалося ініціалізувати інструмент розшифрування PKCS#8: %s" + +#: ../libnm-util/crypto_gnutls.c:483 +#, c-format +msgid "Couldn't decode PKCS#8 file: %s" +msgstr "Не вдалося розшифрувати файл PKCS#8: %s" + +#: ../libnm-util/crypto_nss.c:56 +#, c-format +msgid "Failed to initialize the crypto engine: %d." +msgstr "Не вдалося ініціалізувати рушій шифрування: %d." + +#: ../libnm-util/crypto_nss.c:107 +#, c-format +msgid "Failed to initialize the MD5 context: %d." +msgstr "Не вдалося ініціалізувати контекст MD5: %d." -#: ../src/nm-netlink-monitor.c:174 +#: ../libnm-util/crypto_nss.c:175 #, c-format +msgid "Invalid IV length (must be at least %d)." +msgstr "Некоректна довжина ВІ (має бути принаймні %d)." + +#: ../libnm-util/crypto_nss.c:192 +#, c-format +msgid "Failed to initialize the decryption cipher slot." +msgstr "Не вдалося ініціалізувати слот шифру декодування." + +#: ../libnm-util/crypto_nss.c:202 +#, c-format +msgid "Failed to set symmetric key for decryption." +msgstr "Не вдалося встановити симетричний ключ для розшифрування." + +#: ../libnm-util/crypto_nss.c:212 +#, c-format +msgid "Failed to set IV for decryption." +msgstr "Не вдалося встановити ВІ для розшифрування." + +#: ../libnm-util/crypto_nss.c:220 +#, c-format +msgid "Failed to initialize the decryption context." +msgstr "Не вдалося ініціалізувати контекст розшифрування." + +#: ../libnm-util/crypto_nss.c:233 +#, c-format +msgid "Failed to decrypt the private key: %d." +msgstr "Не вдалося розшифрувати закритий ключ: %d." + +#: ../libnm-util/crypto_nss.c:241 +#, c-format +msgid "Failed to decrypt the private key: decrypted data too large." +msgstr "" +"Не вдалося розшифрувати закритий ключ: розшифровані дані є занадто об’ємними." + +#: ../libnm-util/crypto_nss.c:252 +#, c-format +msgid "Failed to finalize decryption of the private key: %d." +msgstr "Не вдалося завершити розшифрування закритого ключа: %d." + +#: ../libnm-util/crypto_nss.c:360 +#, c-format +msgid "Failed to initialize the encryption cipher slot." +msgstr "Не вдалося ініціалізувати слот шифру розкодування." + +#: ../libnm-util/crypto_nss.c:368 +#, c-format +msgid "Failed to set symmetric key for encryption." +msgstr "Не вдалося встановити симетричний ключ для шифрування." + +#: ../libnm-util/crypto_nss.c:376 +#, c-format +msgid "Failed to set IV for encryption." +msgstr "Не вдалося встановити вектор ініціалізації для шифрування." + +#: ../libnm-util/crypto_nss.c:384 +#, c-format +msgid "Failed to initialize the encryption context." +msgstr "Не вдалося ініціалізувати контекст шифрування." + +#: ../libnm-util/crypto_nss.c:392 +#, c-format +msgid "Failed to encrypt: %d." +msgstr "Не вдалося зашифрувати: %d." + +#: ../libnm-util/crypto_nss.c:400 +#, c-format +msgid "Unexpected amount of data after encrypting." +msgstr "Неочікуваний об’єм даних після шифрування." + +#: ../libnm-util/crypto_nss.c:443 +#, c-format +msgid "Couldn't decode certificate: %d" +msgstr "Не вдалося розшифрувати сертифікат: %d" + +#: ../libnm-util/crypto_nss.c:478 +#, c-format +msgid "Couldn't convert password to UCS2: %d" +msgstr "Не вдалося змінити кодування пароля на UCS2: %d" + +#: ../libnm-util/crypto_nss.c:506 +#, c-format +msgid "Couldn't initialize PKCS#12 decoder: %d" +msgstr "Не вдалося ініціалізувати інструмент розшифрування PKCS#12: %d" + +#: ../libnm-util/crypto_nss.c:515 +#, c-format +msgid "Couldn't decode PKCS#12 file: %d" +msgstr "Не вдалося розшифрувати файл PKCS#12: %d" + +#: ../libnm-util/crypto_nss.c:524 +#, c-format +msgid "Couldn't verify PKCS#12 file: %d" +msgstr "Не вдалося перевірити файл PKCS#12: %d" + +#: ../libnm-util/crypto_nss.c:568 +msgid "Could not generate random data." +msgstr "Не вдалося створити псевдовипадкові дані." + +#: ../libnm-util/nm-utils.c:2000 +#, c-format +msgid "Not enough memory to make encryption key." +msgstr "Недостатньо пам’яті для створення ключа шифрування." + +#: ../libnm-util/nm-utils.c:2110 +msgid "Could not allocate memory for PEM file creation." +msgstr "Не вдалося отримати область пам’яті для створення файла PEM." + +#: ../libnm-util/nm-utils.c:2122 +#, c-format +msgid "Could not allocate memory for writing IV to PEM file." +msgstr "Не вдалося отримати область пам’яті для запису ВІ до файла PEM." + +#: ../libnm-util/nm-utils.c:2134 +#, c-format +msgid "Could not allocate memory for writing encrypted key to PEM file." +msgstr "" +"Не вдалося отримати область пам’яті для запису зашифрованого ключа до файла " +"PEM." + +#: ../libnm-util/nm-utils.c:2153 +#, c-format +msgid "Could not allocate memory for PEM file data." +msgstr "Не вдалося отримати область пам’яті для даних файла PEM." + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1 +msgid "Allow control of network connections" +msgstr "Дозволити керування з’єднаннями мережею" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2 +msgid "Connection sharing via a protected WiFi network" +msgstr "Спільне використання з’єднання на основі захищеної мережі WiFi" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3 +msgid "Connection sharing via an open WiFi network" +msgstr "Спільне використання з’єднання на основі відкритої мережі WiFi" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4 +msgid "Enable or disable WiFi devices" +msgstr "Увімкнути або вимкнути пристрої WiFi" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5 +msgid "Enable or disable WiMAX mobile broadband devices" +msgstr "Увімкнути або вимкнути пристрої широкосмугових мобільних мереж WiMAX" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6 +msgid "Enable or disable mobile broadband devices" +msgstr "Увімкнути або вимкнути пристрої широкосмугових мобільних мереж" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7 +msgid "Enable or disable system networking" +msgstr "Увімкнути або вимкнути системну роботу у мережі" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8 +msgid "Modify network connections for all users" +msgstr "Внести зміни до мережевих з’єднань всіх користувачів" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9 +msgid "Modify persistent system hostname" +msgstr "Змінити постійну назву вузла у мережі" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10 +msgid "Modify personal network connections" +msgstr "Змінити параметри особистих з’єднань з мережею" + +#: ../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 "" +"Призупинити або поновити роботу NetworkManager (має використовуватися лише " +"інструментами керування живленням системи)" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12 +msgid "System policy prevents control of network connections" +msgstr "Правила системи забороняють керування з’єднаннями" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:13 +msgid "System policy prevents enabling or disabling WiFi devices" +msgstr "Правила системи забороняють вмикання або вимикання пристроїв WiFi" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:14 msgid "" -"unable to create netlink socket for monitoring wired ethernet devices - %s" +"System policy prevents enabling or disabling WiMAX mobile broadband devices" msgstr "" -"не вдається створити мережний сокет для контролю пристрою ethernet - %s" +"Правила системи забороняють вмикання або вимикання пристроїв широкосмугових " +"мобільних мереж WiMAX" -#: ../src/nm-netlink-monitor.c:192 +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:15 +msgid "System policy prevents enabling or disabling mobile broadband devices" +msgstr "" +"Правила системи забороняють вмикання або вимикання пристроїв широкосмугових " +"мобільних мереж" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:16 +msgid "System policy prevents enabling or disabling system networking" +msgstr "" +"Правила системи забороняють вмикання або вимикання з’єднань з мережею на " +"системному рівні" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:17 +msgid "System policy prevents modification of network settings for all users" +msgstr "" +"Правила системи забороняють внесення змін до параметрів мережі для всіх " +"користувачів" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:18 +msgid "System policy prevents modification of personal network settings" +msgstr "" +"Правила системи забороняють внесення змін до особистих параметрів мережі" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:19 +msgid "System policy prevents modification of the persistent system hostname" +msgstr "" +"Правила системи забороняють внесення змін до постійної назви вузла у мережі" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:20 +msgid "System policy prevents putting NetworkManager to sleep or waking it up" +msgstr "" +"Правила системи забороняють присипляння та поновлення роботи NetworkManager" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:21 +msgid "System policy prevents sharing connections via a protected WiFi network" +msgstr "" +"Правила системи забороняють спільне використання з’єднань за допомогою " +"захищеної мережі WiFi" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:22 +msgid "System policy prevents sharing connections via an open WiFi network" +msgstr "" +"Правила системи забороняють спільне використання з’єднань за допомогою " +"відкритої мережі WiFi" + +#: ../src/main.c:530 +#, c-format +msgid "Invalid option. Please use --help to see a list of valid options.\n" +msgstr "" +"Некоректний параметр. Щоб ознайомитися зі списком параметрів, скористайтеся " +"параметром --help.\n" + +#: ../src/main.c:611 +#, c-format +msgid "%s. Please use --help to see a list of valid options.\n" +msgstr "" +"%s. Щоб ознайомитися зі списком параметрів, скористайтеся параметром --help.\n" + +#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:62 +msgid "# Created by NetworkManager\n" +msgstr "# Створено за допомогою NetworkManager\n" + +#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:69 #, c-format msgid "" -"unable to bind to netlink socket for monitoring wired ethernet devices - %s" +"# Merged from %s\n" +"\n" +msgstr "" +"# Об’єднано з %s\n" +"\n" + +#: ../src/dhcp-manager/nm-dhcp-manager.c:284 +msgid "no usable DHCP client could be found." +msgstr "не вдалося знайти придатного до використання клієнта DHCP." + +#: ../src/dhcp-manager/nm-dhcp-manager.c:293 +msgid "'dhclient' could be found." +msgstr "не вдалося знайти «dhclient»." + +#: ../src/dhcp-manager/nm-dhcp-manager.c:303 +msgid "'dhcpcd' could be found." +msgstr "не вдалося знайти «dhcpcd»." + +#: ../src/dhcp-manager/nm-dhcp-manager.c:311 +#, c-format +msgid "unsupported DHCP client '%s'" +msgstr "підтримки клієнта DHCP «%s» не передбачено" + +#: ../src/dns-manager/nm-dns-manager.c:376 +msgid "NOTE: the libc resolver may not support more than 3 nameservers." msgstr "" -"не вдається прив'язатись до мережного сокету для контролю пристрою ethernet " -"- %s" +"ЗАУВАЖЕННЯ: можливо, інструмент визначення адрес за назвами libc вашої " +"системи не підтримує використання понад 3 серверів назв." + +#: ../src/dns-manager/nm-dns-manager.c:378 +msgid "The nameservers listed below may not be recognized." +msgstr "Вказані у наведеному нижче списку сервери назв може бути пропущено." + +#: ../src/logging/nm-logging.c:149 +#, c-format +msgid "Unknown log level '%s'" +msgstr "Невідомий рівень журналювання «%s»" + +#: ../src/logging/nm-logging.c:174 +#, c-format +msgid "Unknown log domain '%s'" +msgstr "Невідомий домен журналювання «%s»" + +#: ../src/modem-manager/nm-modem-cdma.c:296 ../src/nm-device-bt.c:355 +#, c-format +msgid "CDMA connection %d" +msgstr "З’єднання CDMA %d" + +#: ../src/modem-manager/nm-modem-gsm.c:499 ../src/nm-device-bt.c:351 +#, c-format +msgid "GSM connection %d" +msgstr "З’єднання GSM %d" + +#: ../src/nm-device-bt.c:326 +#, c-format +msgid "PAN connection %d" +msgstr "З’єднання PAN %d" + +#: ../src/nm-device-bt.c:359 +#, c-format +msgid "DUN connection %d" +msgstr "З’єднання DUN %d" + +#: ../src/nm-device-ethernet.c:1723 +#, c-format +msgid "PPPoE connection %d" +msgstr "З’єднання PPPoE %d" -#: ../src/nm-netlink-monitor.c:427 -msgid "operation took too long" -msgstr "операція виконується надто довго" +#: ../src/nm-device-ethernet.c:1723 ../src/settings/nm-settings-utils.c:50 +#, c-format +msgid "Wired connection %d" +msgstr "Дротове з’єднання %d" -#: ../src/nm-netlink-monitor.c:524 -msgid "received data from wrong type of sender" -msgstr "отримано дані з неправильним типом відправника" +#: ../src/nm-device-olpc-mesh.c:393 +#, c-format +msgid "Mesh %d" +msgstr "Mesh %d" -#: ../src/nm-netlink-monitor.c:537 -msgid "received data from unexpected sender" -msgstr "отримано дані з несподіваним відправником" +#: ../src/nm-manager.c:657 +#, c-format +msgid "VPN connection %d" +msgstr "З’єднання VPN %d" -#: ../src/nm-netlink-monitor.c:666 -msgid "too much data was sent over socket and some of it was lost" -msgstr "через сокет надто багато даних надіслано, та частину з них втрачено" +#: ../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 "помилка під час обробки повідомлення netlink: %s" -#: ../src/nm-netlink-monitor.c:774 +#: ../src/nm-netlink-monitor.c:214 msgid "error occurred while waiting for data on socket" -msgstr "помилка при очікуванні даних з сокету" +msgstr "під час очікування на дані з сокета сталася помилка" + +#: ../src/nm-netlink-monitor.c:254 +#, c-format +msgid "unable to connect to netlink for monitoring link status: %s" +msgstr "" +"не вдалося встановити з’єднання з netlink для спостереження за станом " +"з’єднання: %s" + +#: ../src/nm-netlink-monitor.c:265 +#, c-format +msgid "unable to enable netlink handle credential passing: %s" +msgstr "" +"не вдалося увімкнути інструмент netlink передавання реєстраційних даних: %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 "" +"не вдалося розмістити у пам’яті інструмент netlink для спостереження за " +"станом з’єднання: %s" + +#: ../src/nm-netlink-monitor.c:376 +#, c-format +msgid "unable to allocate netlink link cache for monitoring link status: %s" +msgstr "" +"не вдалося розмістити у пам’яті кеш з’єднань netlink для спостереження за " +"станом з’єднань: %s" + +#: ../src/nm-netlink-monitor.c:502 +#, c-format +msgid "unable to join netlink group: %s" +msgstr "не вдалося долучитися до групи netlink: %s" -#: ../src/nm-ap-security-wpa-eap.c:93 ../src/nm-ap-security-wpa-eap.c:112 -msgid "WPA2 Enterprise" -msgstr "WPA2 Enterprise" +#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642 +#, c-format +msgid "error updating link cache: %s" +msgstr "помилка під час спроби оновлення кешу з’єднання: %s" -#: ../src/nm-ap-security-wpa-eap.c:95 ../src/nm-ap-security-wpa-eap.c:115 -msgid "WPA Enterprise" -msgstr "WPA Enterprise" +#: ../src/settings/plugins/ifcfg-rh/reader.c:3575 +#: ../src/settings/plugins/ifnet/connection_parser.c:51 +msgid "System" +msgstr "Система" -#: ../src/nm-ap-security-leap.c:66 ../src/nm-ap-security-leap.c:80 -msgid "LEAP" -msgstr "LEAP" diff --git a/policy/org.freedesktop.NetworkManager.policy b/policy/org.freedesktop.NetworkManager.policy index 3aea453a..73689dc9 100644 --- a/policy/org.freedesktop.NetworkManager.policy +++ b/policy/org.freedesktop.NetworkManager.policy @@ -29,11 +29,13 @@ ତନ୍ତ୍ର ନେଟୱର୍କିଙ୍ଗକୁ ସକ୍ରିୟ କିମ୍ବା ନିଷ୍କ୍ରିୟ କରନ୍ତୁ ਸਿਸਟਮ ਨੈੱਟਵਰਕਿੰਗ ਚਾਲੂ ਜਾਂ ਬੰਦ Włączenie lub wyłączenie sieci systemowej + Включить или выключить системные соединения Omogoči ali onemogoči sistemske omrežne povezave Омогући или онемогући умрежавање на систему Omogući ili onemogući umrežavanje na sistemu Aktivera eller inaktivera systemnätverk సిస్టమ్ నెట్వర్కింగ్‌ను చేతనము లేదా అచేతనము చేయుము + Увімкнути або вимкнути системну роботу у мережі 启用或禁用系统网络 System policy prevents enabling or disabling system networking Политиката на системата не позволява включване и изключване на мрежата на системно ниво @@ -55,11 +57,13 @@ ତନ୍ତ୍ର ନିତୀ ତନ୍ତ୍ର ନେଟୱର୍କିଙ୍ଗକୁ ସକ୍ରିୟ କିମ୍ବା ନିଷ୍କ୍ରିୟ ହେବାରୁ ବାରଣ କରିଥାଏ ਸਿਸਟਮ ਪਾਲਸੀ ਸਿਸਟਮ ਨੈੱਟਵਰਕਿੰਗ ਚਾਲੂ ਜਾਂ ਬੰਦ ਕਰਨ ਤੋਂ ਰੋਕਦੀ ਹੈ Polityka systemu powstrzymuje włączanie lub wyłączanie sieci systemowej + Системная политика запрещает включение и выключение системных подключений Sistemska določila preprečujejo omogočanje ali onemogočanje omrežnih povezav. Овлашћења система онемогућавају управљање мрежом на систему Ovlašćenja sistema onemogućavaju upravljanje mrežom na sistemu Systemets policy förhindrar aktivering eller inaktivering av systemnätverk సిస్టమ్ నెట్వర్కింగ్‌ను చేతనము చేయుటకు లేదా అచేతనము చేయుటకు సిస్టమ్ విధానము నిరోధించుచున్నది + Правила системи забороняють вмикання або вимикання з’єднань з мережею на системному рівні 系统策略阻止启用或禁用系统网络 no @@ -88,11 +92,13 @@ NetworkManager କୁ ସୁପ୍ତ କିମ୍ବା ଜାଗ୍ରତ ରଖନ୍ତୁ (କେବଳ ତନ୍ତ୍ର ଶକ୍ତି ପରିଚାଳନା ଦ୍ୱାରା ବ୍ୟବହାର ହେବା ଉଚିତ) ਨੈੱਟਵਰਕਮੈਨਜੇਰ ਨੂੰ ਸਲੀਪ ਕਰੋ ਜਾਂ ਵੇਕ ਅੱਪ ਕਰੋ (ਕੇਵਲ ਸਿਸਟਮ ਪਾਵਰ ਮੈਨਜੇਮੈਂਟ ਰਾਹੀਂ ਵਰਤਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ) Umieszczenie usługi NetworkManager w stanie uśpienia lub przebudzenie go (powinno być używane tylko przez systemowe zarządzanie zasilaniem) + Перевести NetworkManager в режим сна или пробудить его (должно использоваться только системой управления питанием) Postavi program NetworkManager v mirovanje ali iz njega (možnost je namenjena upravljanju napajanja) Омогућава успављивање Управника мреже (користи се са Управником потрошње на систему) Omogućava uspavljivanje Upravnika mreže (koristi se sa Upravnikom potrošnje na sistemu) Försätt Nätverkshanterare i vänteläge eller återställ efter det (bör endast användas av systemets strömhantering) నెట్వర్కుమేనేజర్‌ను స్లీప్‌నకు లేదా దానిని మెల్కొలుపుటకు వుంచండి (సిస్టమ్ పవర్ నిర్వహణ చేత మాత్రమే వుపయోగించబడాలి) + Призупинити або поновити роботу NetworkManager (має використовуватися лише інструментами керування живленням системи) 挂起或唤醒 NetworkManager (应仅用于系统电源管理) System policy prevents putting NetworkManager to sleep or waking it up Политиката на системата не позволява приспиване и събуждане на NetworkManager @@ -114,11 +120,13 @@ ତନ୍ତ୍ର ନିତୀ NetworkManager କୁ ସୁପ୍ତ କିମ୍ବା ଜାଗ୍ରତ ରହିବାରୁ ବାରଣ କରିଥାଏ ਸਿਸਟਮ ਪਾਲਸੀ ਨੈੱਟਵਰਕਮੈਨੇਜਰ ਨੂੰ ਸਲੀਪ ਜਾਂ ਵੇਕਅੱਪ ਕਰਨ ਤੋਂ ਰੋਕਦੀ ਹੈ Polityka systemu powstrzymuje umieszczenie usługi NetworkManager w stanie uśpienia lub przebudzenie go + Системная политика не разрешает переводить NetworkManager в режим сна или пробуждать его Sistemska določila preprečujejo postavitev programa NetworkManager v mirovanje ali iz njega. Овлашћења система онемогућавају успављивање Управника мрежом Ovlašćenja sistema onemogućavaju uspavljivanje Upravnika mrežom Systemets policy förhindrar att Nätverkshanterare försätts i vänteläge eller återställs efter det నెట్వర్కుమేనేజర్‌ను స్లీప్‌నకు లేదా దానిని మెల్కొలుపుటకు వుంచుటను సిస్టమ్ విధానము నిరోధించుచున్నది + Правила системи забороняють присипляння та поновлення роботи NetworkManager 系统策略阻止挂起或唤醒 NetworkManager no @@ -147,11 +155,13 @@ WiFi ଉପକରଣଗୁଡ଼ିକୁ ସକ୍ରିୟ କିମ୍ବା ନିଷ୍କ୍ରିୟ କରନ୍ତୁ ਵਾਈ-ਫਾਈ ਜੰਤਰ ਚਾਲੂ ਜਾਂ ਬੰਦ ਕਰੋ Włączenie lub wyłączenie urządzeń WiFi + Включить или выключить устройства WiFi Omogoči ali onemogoči naprave WiFi Омогући или онемогући бежичне уређаје Omogući ili onemogući bežične uređaje Aktivera eller inaktivera WiFi-enheter WiFi పరికరములను చేతనము లేదా అచేతనము చేయుము + Увімкнути або вимкнути пристрої WiFi 启用或禁用 WiFi 设备 System policy prevents enabling or disabling WiFi devices Политиката на системата не позволява включване и изключване на устройства за безжични мрежи @@ -173,11 +183,13 @@ ତନ୍ତ୍ର ନିତୀ WiFi ଉପକରଣଗୁଡ଼ିକୁ ସକ୍ରିୟ କିମ୍ବା ନିଷ୍କ୍ରିୟ ହେବାରୁ ବାରଣ କରିଥାଏ ਸਿਸਟਮ ਪਾਲਸੀ ਵਾਈ-ਫਾਈ ਜੰਤਰ ਚਾਲੂ ਜਾਂ ਬੰਦ ਕਰਨੋਂ ਰੋਕਦੀ ਹੈ Polityka systemu powstrzymuje włączanie lub wyłączanie urządzeń WiFi + Системная политика запрещает включение и выключение WiFi устройств Sistemska določila preprečujejo omogočanja ali onemogočanje WiFi naprav Овлашћења система онемогућавају управљање бежичним уређајима Ovlašćenja sistema onemogućavaju upravljanje bežičnim uređajima Systemets policy förhindrar aktivering eller inaktivering av WiFi-enheter WiFi పరికరములను చేతనము చేయుటకు లేదా అచేతనము చేయుటకు సిస్టమ్ విధానము నిరోధించుచున్నది + Правила системи забороняють вмикання або вимикання пристроїв WiFi 系统策略阻止启用或禁用 WiFi 设备 no @@ -206,11 +218,13 @@ ମୋବାଇଲ ବ୍ରୋଡବ୍ୟାଣ୍ଡ ଉପକରଣଗୁଡ଼ିକୁ ସକ୍ରିୟ କିମ୍ବା ନିଷ୍କ୍ରିୟ କରନ୍ତୁ ਮੋਬਾਇਲ ਬਰਾਡਬੈਂਡ ਜੰਤਰ ਚਾਲੂ ਜਾਂ ਬੰਦ Włączenie lub wyłączenie urządzeń komórkowych + Включить или выключить устройства мобильных сетей Omogoči ali onemogoči naprave mobilnih širokopasovnih storitev Омогући или онемогући мобилне широкопојасне уређаје Omogući ili onemogući mobilne širokopojasne uređaje Aktivera eller inaktivera mobila bredbandsenheter మొబైల్ బ్రాడ్‌బాండ్ పరికరములను చేతనము లేదా అచేతనము చేయుము + Увімкнути або вимкнути пристрої широкосмугових мобільних мереж 启用或禁用移动宽带设备 System policy prevents enabling or disabling mobile broadband devices Политиката на системата не позволява включване и изключване на устройства за мобилни мрежи @@ -232,11 +246,13 @@ ତନ୍ତ୍ର ନିତୀ ମୋବାଇଲ ବ୍ରୋଡବ୍ୟାଣ୍ଡ ଉପକରଣଗୁଡ଼ିକୁ ସକ୍ରିୟ କିମ୍ବା ନିଷ୍କ୍ରିୟ ହେବାରୁ ବାରଣ କରିଥାଏ ਸਿਸਟਮ ਪਾਲਸੀ ਮੋਬਾਇਲ ਬਰਾਡਬੈਂਡ ਜੰਤਰ ਚਾਲੂ ਜਾਂ ਬੰਦ ਕਰਨ ਤੋਂ ਰੋਕਦੀ ਹੈ Polityka systemu powstrzymuje włączenie lub wyłączenie urządzeń komórkowych + Системная политика запрещает включение или выключение устройств мобильной связи Sistemska določila preprečuje omogočanja ali onemogočanje mobilne širokopasovne naprave Овлашћења система онемогућавају управљање мобилним широкопојасним уређајима Ovlašćenja sistema onemogućavaju upravljanje mobilnim širokopojasnim uređajima Systemets policy förhindrar aktivering eller inaktivering av mobila bredbandsenheter మొబైల్ బ్రాడ్‌బాండ్ పరికరములను చేతనముచేయుటకు లేదా అచేతనముచేయుటకు సిస్టమ్ విధానము నిరోధించుచున్నది + Правила системи забороняють вмикання або вимикання пристроїв широкосмугових мобільних мереж 系统策略阻止启用或禁用移动宽带设备 no @@ -252,9 +268,12 @@ Enŝalti aŭ elŝalti WiMAX-larĝkapacitajn aparatojn Activar o desactivar los dispositivos de banda ancha móvil WiMAX WiMAX mobil széles sávú eszközök be- és kikapcsolása + Aktifkan atau matikan perangkat broadband bergerak WiMAX 와이맥스 모바일 광대역 장치 사용 여부 WiMAX मोबाईल ब्रॉडबँड साधने सुरू किंवा बंद करा Włączenie lub wyłączenie urządzeń komórkowych WiMAX + Включить или выключить устройства мобильных сетей WiMax + Увімкнути або вимкнути пристрої широкосмугових мобільних мереж WiMAX System policy prevents enabling or disabling WiMAX mobile broadband devices Политиката на системата не позволява включване и изключване на устройства за мобилни мрежи по WiMAX La política del sistema impedeix habilitar o inhabilitar els dispositius de banda ampla mòbil WiMAX @@ -262,9 +281,12 @@ Sistempolitiko preventas enŝalton aŭ elŝalton de larĝkapacitaj WiMAX-aparatoj La política del sistema evita activar o desactivar los dispositivos de banda ancha móvil WiMAX A rendszer házirendje megakadályozza a WiMAX mobil széles sávú eszközök be- vagy kikapcsolását + Kebijakan sistem mencegah mengaktifkan atau mematikan perangkat broadband bergerak WiMAX 시스템 정책이 와이맥스 모바일 광대역 장치의 사용 여부 설정을 금지합니다 प्रणाली करार WiMAX मोबाईल ब्रॉडबँड साधनांना सुरू किंवा बंद होण्यापासून रोखते Polityka systemu powstrzymuje włączenie lub wyłączenie urządzeń komórkowych WiMAX + Системная политика запрещает включение или выключение устройств мобильной связи WiMAX + Правила системи забороняють вмикання або вимикання пристроїв широкосмугових мобільних мереж WiMAX no yes @@ -292,11 +314,13 @@ ନେଟୱର୍କ ସଂଯୋଗଗୁଡ଼ିକ ପାଇଁ ନିୟନ୍ତ୍ରଣକୁ ଅନୁମତି ଦିଅନ୍ତୁ ਨੈੱਟਵਰਕ ਕੁਨੈਕਸ਼ਨਾਂ ਲਈ ਕੰਟਰੋਲ ਮਨਜ਼ੂਰ Umożliwienie kontroli połączeń sieciowych + Разрешить контроль сетевых подключений Dovoli nadzor omrežnih povezav Дозволи контролу мрежних веза Dozvoli kontrolu mrežnih veza Tillåt kontroll av nätverksanslutningar నెట్వర్కు అనుసంధానముల యొక్క నియంత్రణ అనుమతించుము + Дозволити керування з’єднаннями мережею 允许控制网络连接 System policy prevents control of network connections Политиката на системата не позволява управляване на мрежовите връзки @@ -318,11 +342,13 @@ ତନ୍ତ୍ର ନିତୀ ନେଟୱର୍କ ସଂଯୋଗଗୁଡ଼ିକର ନିୟନ୍ତ୍ରଣକୁ ବାରଣ କରିଥାଏ ਸਿਸਟਮ ਪਾਲਸੀ ਨੈੱਟਵਰਕ ਕੁਨੈਕਸ਼ਨ ਕੰਟਰੋਲ ਕਰਨ ਤੋਂ ਸੋਧ ਤੋਂ ਰੋਕਦੀ ਹੈ Polityka systemu powstrzymuje kontrolę połączeń sieciowych + Системная политика запрещает управление подключениями. Sistemska določila preprečujejo nadzor omrežnih povezav Овлашћења система онемогућавају контролу мрежних веза Ovlašćenja sistema onemogućavaju kontrolu mrežnih veza Systemets policy förhindrar kontroll av nätverksanslutningar నెట్వర్కు అనుసంధానముల నియంత్రణను సిస్టమ్ విధానము నిరోధించుచున్నది + Правила системи забороняють керування з’єднаннями 系统策略阻止更改网络连接 yes @@ -368,6 +394,7 @@ Anslutningsdelning via ett skyddat trådlöst nätverk ஒரு பாதுகாக்கப்ப WiFi நெட்வொர்க்கின் வழியாக இணைப்பு பகிரப்படுகிறது రక్షిత WiFi నెట్వర్కు ద్వారా అనుసంధానపు భాగస్వామ్యము. + Спільне використання з’єднання на основі захищеної мережі WiFi 通过受保护的 WiFi 网络共享连接 透過受保護的 WiFi 網路共享連線 System policy prevents sharing connections via a protected WiFi network @@ -407,6 +434,7 @@ Systemets policy förhindrar delning av anslutningar via ett skyddat trådlöst nätverk பாதுகாக்கப்பட்ட WiFi நெட்வொர்க்கின் வழியாக இணைப்புகளை பகிருவதை கணினி பாலிசி தடுக்கிறது రక్షిత WiFi నెట్వర్కు ద్వారా అనుసంధానములను భాగస్వామ్యపరచుట సిస్టమ్ విధానము నిరోధించుచున్నది + Правила системи забороняють спільне використання з’єднань за допомогою захищеної мережі WiFi 系统策略阻止使用受保护的 WiFi 网络共享连接 系統政策讓您無法透過受保護的 WiFi 網路共享連結 @@ -453,6 +481,7 @@ Anslutningsdelning via ett öppet trådlöst nätverk ஒரு திறந்த WiFi நெட்வொர்க்கின் வழியாக இணைப்பு பகிரப்படுகிறது ఓపెన్ WiFi నెట్వర్కు ద్వారా అనుసంధానపు భాగస్వామ్యము + Спільне використання з’єднання на основі відкритої мережі WiFi 通过公开 WiFi 网络共享连接 透過開放的 WiFi 網路共享連線 System policy prevents sharing connections via an open WiFi network @@ -485,13 +514,14 @@ ਸਿਸਟਮ ਪਾਲਸੀ ਕੁਨੈਕਸ਼ਨ ਨੂੰ ਓਪਨ ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ ਰਾਹੀਂ ਸਾਂਝਾ ਕਰਨ ਤੋਂ ਰੋਕਦੀ ਹੈ Polityka systemu powstrzymuje współdzielenie połączeń przez otwartą sieć WiFi Políticas de sistema previnem compartilhamento de conexões através de uma rede sem fio aberta - Системная политика запрещает совместное использование соединений в закрытой сети WiFi + Системная политика запрещает совместное использование соединений в открытой сети WiFi Sistemska pravila preprečujejo souporabo povezav preko odprtega WiFi omrežja Овлашћења система не дозвољавају дељење везе преко отворене бежичне мреже Ovlašćenja sistema ne dozvoljavaju deljenje veze preko otvorene bežične mreže Systemets policy förhindrar delning av anslutningar via ett öppet trådlöst nätverk திறந்த WiFi நெட்வொர்க்கின் வழியாக இணைப்புகளை பகிருவதை கணினி பாலிசி தடுக்கிறது ఓపెన్ WiFi నెట్వర్కు ద్వారా అనుసంధానములను భాగస్వామ్యపరచుట సిస్టమ్ విధానము నిరోధించుచున్నది + Правила системи забороняють спільне використання з’єднань за допомогою відкритої мережі WiFi 系统策略阻止使用公开 WiFi 网络共享连接 系統政策讓您無法透過開放的 WiFi 網路共享連線 @@ -506,17 +536,23 @@ Modifi proprajn retkonektojn Modificar las conexiones de red personales Személyes hálózati kapcsolatok módosítása + Ubah koneksi jaringan personal 개인 네트워크 연결을 수정합니다 वैयक्तिक नेटवर्क जोडणी संपादित करा Modyfikacja osobistych połączeń sieciowych + Редактировать личные настройки подключения + Змінити параметри особистих з’єднань з мережею System policy prevents modification of personal network settings Die Systemrichtlinien verhindern das Bearbeiten von eigenen Netzwerkeinstellungen Sistempolitiko preventas modifadon de propraj retagordoj La política del sistema evita la modificación de la configuración personal de la red A rendszer házirendje megakadályozza a személyes hálózati beállítások módosítását + Kebijakan sistem mencegah pengubahan tatanan jaringan pribadi 시스템 정책이 개인 네트워크 설정의 수정을 금지합니다 प्रणाली करार, व्यक्तिगत नेटवर्क सेटिंग्स् संपादीत करण्यापासून रोखते Polityka systemu powstrzymuje modyfikację osobistych ustawień systemowych + Системная политика запрещает изменение персональных настроек сети + Правила системи забороняють внесення змін до особистих параметрів мережі no yes @@ -529,17 +565,23 @@ Modifi retkonektojn por ĉiuj uzantoj Modificar las conexiones de red para todos los usuarios Hálózati kapcsolatok módosítása minden felhasználó számára + Ubah koneksi jaringan bagi semua pengguna 모든 사용자의 네트워크 연결을 수정합니다 सर्व वापरकर्त्यांकरीता नेटवर्क जोडणी संपादित करा Modyfikacja połączeń sieciowych dla wszystkich użytkowników + Изменить подключения доступные всем пользователям + Внести зміни до мережевих з’єднань всіх користувачів System policy prevents modification of network settings for all users Die Systemrichtlinien verhindern das Bearbeiten von Netzwerkeinstellungen für alle Benutzer Sistempolitiko preventas modifadon de retagordoj por ĉiuj uzantoj La política del sistema evita la modificación de la configuración de la red para todos los usuarios 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 + Kebijakan sistem mencegah pengubahan tatanan sistem bagi semua pengguna 시스템 정책이 모든 사용자의 네트워크 설정의 수정을 금지합니다 प्रणाली करार सर्व वापरकर्त्यांना नेटवर्क सेटिंग्स् संपादीत करण्यापासून रोखते Polityka systemu powstrzymuje modyfikację ustawień sieciowych dla wszystkich użytkowników + Системная политика запрещает изменение настроек для всех пользователей + Правила системи забороняють внесення змін до параметрів мережі для всіх користувачів no auth_admin_keep @@ -584,6 +626,7 @@ Ändra bestående värdnamn för systemet நிலையான கணினி புரவலப்பெயரை மாற்றியமை నిరంతర సిస్టమ్ హోస్టునామము మార్చుము + Змінити постійну назву вузла у мережі 更改系统固有主机名 修改永久系統的主機名稱 System policy prevents modification of the persistent system hostname @@ -623,6 +666,7 @@ Systemets policy förhindrar ändring av bestående värdnamn för systemet நிலையான கணினி புரவலபெயர் மாற்றியமைப்பதை கணினி பாலிசி தடுக்கிறது నిరంతర సిస్టమ్ హోస్టునామమును సవరించుటను సిస్టమ్ విధానము నిరోధించుచున్నది + Правила системи забороняють внесення змін до постійної назви вузла у мережі 系统策略阻止更改系统固有主机名 系統政策讓您無法修改永久的系統主機名稱 diff --git a/src/NetworkManager.conf b/src/NetworkManager.conf index b256a444..15b11b7e 100644 --- a/src/NetworkManager.conf +++ b/src/NetworkManager.conf @@ -10,6 +10,19 @@ send_interface="org.freedesktop.NetworkManager.PPP"/> + + + + + + + diff --git a/src/NetworkManagerUtils.c b/src/NetworkManagerUtils.c index 5a6a61b6..f96f2aad 100644 --- a/src/NetworkManagerUtils.c +++ b/src/NetworkManagerUtils.c @@ -39,6 +39,9 @@ #include "nm-setting-connection.h" #include "nm-setting-ip4-config.h" #include "nm-setting-ip6-config.h" +#include "nm-setting-wireless.h" +#include "nm-setting-wireless-security.h" +#include "nm-manager-auth.h" #include #include @@ -709,6 +712,33 @@ nm_match_spec_s390_subchannels (const GSList *specs, const char *subchannels) return FALSE; } +const char * +nm_utils_get_shared_wifi_permission (NMConnection *connection) +{ + NMSettingWireless *s_wifi; + NMSettingWirelessSecurity *s_wsec; + NMSettingIP4Config *s_ip4; + const char *method = NULL; + + s_ip4 = nm_connection_get_setting_ip4_config (connection); + if (s_ip4) + method = nm_setting_ip4_config_get_method (s_ip4); + + if (g_strcmp0 (method, NM_SETTING_IP4_CONFIG_METHOD_SHARED) != 0) + return NULL; /* Not shared */ + + s_wifi = nm_connection_get_setting_wireless (connection); + if (s_wifi) { + s_wsec = nm_connection_get_setting_wireless_security (connection); + if (nm_setting_wireless_get_security (s_wifi) || s_wsec) + return NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED; + else + return NM_AUTH_PERMISSION_WIFI_SHARE_OPEN; + } + + return NULL; +} + /*********************************/ static void diff --git a/src/NetworkManagerUtils.h b/src/NetworkManagerUtils.h index aaa267fb..1bf741ed 100644 --- a/src/NetworkManagerUtils.h +++ b/src/NetworkManagerUtils.h @@ -52,6 +52,7 @@ void nm_utils_call_dispatcher (const char *action, gboolean nm_match_spec_hwaddr (const GSList *specs, const char *hwaddr); gboolean nm_match_spec_s390_subchannels (const GSList *specs, const char *subchannels); +const char *nm_utils_get_shared_wifi_permission (NMConnection *connection); GHashTable *value_hash_create (void); void value_hash_add (GHashTable *hash, diff --git a/src/dns-manager/nm-dns-manager.c b/src/dns-manager/nm-dns-manager.c index fc582327..49cd74e5 100644 --- a/src/dns-manager/nm-dns-manager.c +++ b/src/dns-manager/nm-dns-manager.c @@ -165,7 +165,7 @@ merge_one_ip4_config (NMResolvConfData *rc, NMIP4Config *src) } static void -merge_one_ip6_config (NMResolvConfData *rc, NMIP6Config *src) +merge_one_ip6_config (NMResolvConfData *rc, NMIP6Config *src, const char *iface) { guint32 num, i; @@ -181,8 +181,15 @@ merge_one_ip6_config (NMResolvConfData *rc, NMIP6Config *src) if (inet_ntop (AF_INET, &(addr->s6_addr32[3]), buf, INET_ADDRSTRLEN) > 0) add_string_item (rc->nameservers, buf); } else { - if (inet_ntop (AF_INET6, addr, buf, INET6_ADDRSTRLEN) > 0) - add_string_item (rc->nameservers, buf); + if (inet_ntop (AF_INET6, addr, buf, INET6_ADDRSTRLEN) > 0) { + if (IN6_IS_ADDR_LINKLOCAL (addr) && strchr (buf, '%') == NULL) { + char *tmp; + tmp = g_strdup_printf ("%s%%%s", buf, iface); + add_string_item (rc->nameservers, tmp); + g_free (tmp); + } else + add_string_item (rc->nameservers, buf); + } } } @@ -594,9 +601,9 @@ update_dns (NMDnsManager *self, merge_one_ip4_config (&rc, priv->ip4_device_config); if (priv->ip6_vpn_config) - merge_one_ip6_config (&rc, priv->ip6_vpn_config); + merge_one_ip6_config (&rc, priv->ip6_vpn_config, iface); if (priv->ip6_device_config) - merge_one_ip6_config (&rc, priv->ip6_device_config); + merge_one_ip6_config (&rc, priv->ip6_device_config, iface); for (iter = priv->configs; iter; iter = g_slist_next (iter)) { if ( (iter->data == priv->ip4_vpn_config) @@ -612,7 +619,7 @@ update_dns (NMDnsManager *self, } else if (NM_IS_IP6_CONFIG (iter->data)) { NMIP6Config *config = NM_IP6_CONFIG (iter->data); - merge_one_ip6_config (&rc, config); + merge_one_ip6_config (&rc, config, iface); } else g_assert_not_reached (); } diff --git a/src/modem-manager/nm-modem.c b/src/modem-manager/nm-modem.c index 33f10789..1823e5e6 100644 --- a/src/modem-manager/nm-modem.c +++ b/src/modem-manager/nm-modem.c @@ -86,6 +86,17 @@ enum { static guint signals[LAST_SIGNAL] = { 0 }; +static void +update_mm_enabled (NMModem *self, gboolean new_enabled) +{ + NMModemPrivate *priv = NM_MODEM_GET_PRIVATE (self); + + if (priv->mm_enabled != new_enabled) { + priv->mm_enabled = new_enabled; + g_object_notify (G_OBJECT (self), NM_MODEM_ENABLED); + } +} + gboolean nm_modem_get_mm_enabled (NMModem *self) { @@ -822,8 +833,7 @@ get_mm_enabled_done (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_d } if (G_VALUE_HOLDS_BOOLEAN (&value)) { - NM_MODEM_GET_PRIVATE (self)->mm_enabled = g_value_get_boolean (&value); - g_object_notify (G_OBJECT (self), NM_MODEM_ENABLED); + update_mm_enabled (self, g_value_get_boolean (&value)); } else nm_log_warn (LOGD_MB, "failed get modem enabled state: unexpected reply type"); @@ -880,6 +890,9 @@ nm_modem_set_mm_enabled (NMModem *self, gboolean enabled) self, NULL, G_TYPE_BOOLEAN, enabled, G_TYPE_INVALID); + /* If we are disabling the modem, stop saying that it's enabled. */ + if (!enabled) + update_mm_enabled (self, enabled); } } @@ -898,8 +911,7 @@ modem_properties_changed (DBusGProxy *proxy, value = g_hash_table_lookup (props, "Enabled"); if (value && G_VALUE_HOLDS_BOOLEAN (value)) { - priv->mm_enabled = g_value_get_boolean (value); - g_object_notify (G_OBJECT (self), NM_MODEM_ENABLED); + update_mm_enabled (self, g_value_get_boolean (value)); } value = g_hash_table_lookup (props, "IpMethod"); diff --git a/src/nm-device-ethernet.c b/src/nm-device-ethernet.c index f470e090..35b73670 100644 --- a/src/nm-device-ethernet.c +++ b/src/nm-device-ethernet.c @@ -34,6 +34,7 @@ #include #include #include +#include #include @@ -881,6 +882,8 @@ real_get_best_auto_connection (NMDevice *dev, NMSettingWired *s_wired; const char *connection_type; gboolean is_pppoe = FALSE; + const GSList *mac_blacklist, *mac_blacklist_iter; + gboolean mac_blacklist_found = FALSE; s_con = (NMSettingConnection *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION); g_assert (s_con); @@ -909,6 +912,25 @@ real_get_best_auto_connection (NMDevice *dev, mac = nm_setting_wired_get_mac_address (s_wired); if (try_mac && mac && memcmp (mac->data, &priv->perm_hw_addr, ETH_ALEN)) continue; + + /* Check for MAC address blacklist */ + mac_blacklist = nm_setting_wired_get_mac_address_blacklist (s_wired); + for (mac_blacklist_iter = mac_blacklist; mac_blacklist_iter; + mac_blacklist_iter = g_slist_next (mac_blacklist_iter)) { + struct ether_addr addr; + + if (!ether_aton_r (mac_blacklist_iter->data, &addr)) { + g_warn_if_reached (); + continue; + } + if (memcmp (&addr, &priv->perm_hw_addr, ETH_ALEN) == 0) { + mac_blacklist_found = TRUE; + break; + } + } + /* Found device MAC address in the blacklist - do not use this connection */ + if (mac_blacklist_found) + continue; } return connection; @@ -1605,6 +1627,7 @@ real_check_connection_compatible (NMDevice *device, gboolean is_pppoe = FALSE; const GByteArray *mac; gboolean try_mac = TRUE; + const GSList *mac_blacklist, *mac_blacklist_iter; s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION)); g_assert (s_con); @@ -1645,6 +1668,25 @@ real_check_connection_compatible (NMDevice *device, "The connection's MAC address did not match this device."); return FALSE; } + + /* Check for MAC address blacklist */ + mac_blacklist = nm_setting_wired_get_mac_address_blacklist (s_wired); + for (mac_blacklist_iter = mac_blacklist; mac_blacklist_iter; + mac_blacklist_iter = g_slist_next (mac_blacklist_iter)) { + struct ether_addr addr; + + if (!ether_aton_r (mac_blacklist_iter->data, &addr)) { + g_warn_if_reached (); + continue; + } + if (memcmp (&addr, &priv->perm_hw_addr, ETH_ALEN) == 0) { + g_set_error (error, + NM_ETHERNET_ERROR, NM_ETHERNET_ERROR_CONNECTION_INCOMPATIBLE, + "The connection's MAC address (%s) is blacklisted in %s.", + (char *) mac_blacklist_iter->data, NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST); + return FALSE; + } + } } // FIXME: check bitrate against device capabilities diff --git a/src/nm-device-olpc-mesh.c b/src/nm-device-olpc-mesh.c index 8c8f9d0d..88322344 100644 --- a/src/nm-device-olpc-mesh.c +++ b/src/nm-device-olpc-mesh.c @@ -104,7 +104,6 @@ struct _NMDeviceOlpcMeshPrivate gint8 num_freqs; guint32 freqs[IW_MAX_FREQUENCIES]; - guint8 we_version; gboolean up; NMDevice * companion; @@ -147,44 +146,7 @@ nm_olpc_mesh_error_get_type (void) static guint32 real_get_generic_capabilities (NMDevice *dev) { - int fd; - guint32 caps = NM_DEVICE_CAP_NONE; - struct iw_range range; - struct iwreq wrq; - const char *iface = nm_device_get_iface (dev); - - /* Check for Wireless Extensions support >= 16 for wireless devices */ - - fd = socket (PF_INET, SOCK_DGRAM, 0); - if (fd < 0) { - nm_log_warn (LOGD_OLPC_MESH, "couldn't open control socket."); - goto out; - } - - memset (&wrq, 0, sizeof (struct iwreq)); - memset (&range, 0, sizeof (struct iw_range)); - strncpy (wrq.ifr_name, iface, IFNAMSIZ); - wrq.u.data.pointer = (caddr_t) ⦥ - wrq.u.data.length = sizeof (struct iw_range); - - if (ioctl (fd, SIOCGIWRANGE, &wrq) < 0) { - nm_log_warn (LOGD_OLPC_MESH, "couldn't get driver range information."); - goto out; - } - - if ((wrq.u.data.length < 300) || (range.we_version_compiled < 16)) { - nm_log_warn (LOGD_OLPC_MESH, - "(%s): driver's Wireless Extensions version (%d) is too old.", - iface, range.we_version_compiled); - goto out; - } else { - caps |= NM_DEVICE_CAP_NM_SUPPORTED; - } - -out: - if (fd >= 0) - close (fd); - return caps; + return NM_DEVICE_CAP_NM_SUPPORTED; } static void @@ -193,7 +155,6 @@ nm_device_olpc_mesh_init (NMDeviceOlpcMesh * self) NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (self); priv->dispose_has_run = FALSE; - priv->we_version = 0; priv->companion = NULL; priv->stage1_waiting = FALSE; @@ -276,15 +237,24 @@ constructor (GType type, wrq.u.data.pointer = (caddr_t) ⦥ wrq.u.data.length = sizeof (struct iw_range); - if (ioctl (fd, SIOCGIWRANGE, &wrq) < 0) + if (ioctl (fd, SIOCGIWRANGE, &wrq) < 0) { + nm_log_info (LOGD_HW | LOGD_WIFI, "(%s): driver WEXT range request failed", + nm_device_get_iface (NM_DEVICE (self))); + goto error; + } + + if ((wrq.u.data.length < 300) || (range.we_version_compiled < 21)) { + nm_log_info (LOGD_HW | LOGD_WIFI, + "(%s): driver WEXT version too old (got %d, expected >= 21)", + nm_device_get_iface (NM_DEVICE (self)), + range.we_version_compiled); goto error; + } priv->num_freqs = MIN (range.num_frequency, IW_MAX_FREQUENCIES); for (i = 0; i < priv->num_freqs; i++) priv->freqs[i] = iw_freq_to_uint32 (&range.freq[i]); - priv->we_version = range.we_version_compiled; - close (fd); /* shorter timeout for mesh connectivity */ @@ -453,7 +423,7 @@ create_socket_with_request (NMDevice *self, struct iwreq *req) g_return_val_if_fail (self != NULL, -1); sk = socket (AF_INET, SOCK_DGRAM, 0); - if (!sk) { + if (sk == -1) { nm_log_err (LOGD_OLPC_MESH, "Couldn't create socket: %d.", errno); return -1; } @@ -531,7 +501,6 @@ nm_device_olpc_mesh_set_channel (NMDeviceOlpcMesh *self, guint32 channel) static void nm_device_olpc_mesh_set_ssid (NMDeviceOlpcMesh *self, const GByteArray * ssid) { - NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (self); int sk; struct iwreq wrq; const char * iface; @@ -541,7 +510,7 @@ nm_device_olpc_mesh_set_ssid (NMDeviceOlpcMesh *self, const GByteArray * ssid) g_return_if_fail (self != NULL); sk = socket (AF_INET, SOCK_DGRAM, 0); - if (!sk) { + if (sk == -1) { nm_log_err (LOGD_OLPC_MESH, "Couldn't create socket: %d.", errno); return; } @@ -554,24 +523,10 @@ nm_device_olpc_mesh_set_ssid (NMDeviceOlpcMesh *self, const GByteArray * ssid) memcpy (buf, ssid->data, MIN (sizeof (buf) - 1, len)); } wrq.u.essid.pointer = (caddr_t) buf; - - if (priv->we_version < 21) { - /* For historic reasons, set SSID length to include one extra - * character, C string nul termination, even though SSID is - * really an octet string that should not be presented as a C - * string. Some Linux drivers decrement the length by one and - * can thus end up missing the last octet of the SSID if the - * length is not incremented here. WE-21 changes this to - * explicitly require the length _not_ to include nul - * termination. */ - if (len) - len++; - } wrq.u.essid.length = len; wrq.u.essid.flags = (len > 0) ? 1 : 0; /* 1=enable SSID, 0=disable/any */ strncpy (wrq.ifr_name, iface, IFNAMSIZ); - if (ioctl (sk, SIOCSIWESSID, &wrq) < 0) { if (errno != ENODEV) { nm_log_err (LOGD_OLPC_MESH, "(%s): error setting SSID to '%s': %s", diff --git a/src/nm-device-wifi.c b/src/nm-device-wifi.c index 7a6e7528..278d9a06 100644 --- a/src/nm-device-wifi.c +++ b/src/nm-device-wifi.c @@ -33,6 +33,7 @@ #include #include #include +#include #include "nm-glib-compat.h" #include "nm-device.h" @@ -55,6 +56,7 @@ #include "nm-setting-ip4-config.h" #include "nm-setting-ip6-config.h" #include "nm-system.h" +#include "nm-settings-connection.h" static gboolean impl_device_get_access_points (NMDeviceWifi *device, GPtrArray **aps, @@ -153,7 +155,6 @@ struct _NMDeviceWifiPrivate { guint link_timeout_id; /* Static options from driver */ - guint8 we_version; guint32 capabilities; gboolean has_scan_capa_ssid; }; @@ -503,29 +504,14 @@ static guint32 real_get_generic_capabilities (NMDevice *dev) { int fd, err; - guint32 caps = NM_DEVICE_CAP_NONE, response_len = 0; + guint32 caps = NM_DEVICE_CAP_NONE; struct iwreq wrq; - struct iw_range range; const char *iface = nm_device_get_iface (dev); - gboolean success; - - memset (&range, 0, sizeof (struct iw_range)); - success = wireless_get_range (NM_DEVICE_WIFI (dev), &range, &response_len); - if (!success) - return NM_DEVICE_CAP_NONE; - - /* Check for Wireless Extensions support >= 16 for wireless devices */ - if ((response_len < 300) || (range.we_version_compiled < 16)) { - nm_log_err (LOGD_HW | LOGD_WIFI, - "(%s): driver's Wireless Extensions version (%d) is too old.", - iface, range.we_version_compiled); - return NM_DEVICE_CAP_NONE; - } fd = socket (PF_INET, SOCK_DGRAM, 0); if (fd < 0) { nm_log_err (LOGD_HW, "(%s): couldn't open control socket.", iface); - goto out; + return NM_DEVICE_CAP_NONE; } /* Cards that don't scan aren't supported */ @@ -538,7 +524,6 @@ real_get_generic_capabilities (NMDevice *dev) else caps |= NM_DEVICE_CAP_NM_SUPPORTED; -out: return caps; } @@ -548,11 +533,8 @@ out: NM_WIFI_DEVICE_CAP_RSN) static guint32 -get_wireless_capabilities (NMDeviceWifi *self, - iwrange * range, - guint32 data_len) +get_wireless_capabilities (NMDeviceWifi *self, iwrange *range) { - guint32 minlen; guint32 caps = NM_WIFI_DEVICE_CAP_NONE; const char * iface; @@ -561,39 +543,35 @@ get_wireless_capabilities (NMDeviceWifi *self, iface = nm_device_get_iface (NM_DEVICE (self)); - minlen = ((char *) &range->enc_capa) - (char *) range + sizeof (range->enc_capa); - /* All drivers should support WEP by default */ caps |= NM_WIFI_DEVICE_CAP_CIPHER_WEP40 | NM_WIFI_DEVICE_CAP_CIPHER_WEP104; - if ((data_len >= minlen) && range->we_version_compiled >= 18) { - if (range->enc_capa & IW_ENC_CAPA_CIPHER_TKIP) - caps |= NM_WIFI_DEVICE_CAP_CIPHER_TKIP; + if (range->enc_capa & IW_ENC_CAPA_CIPHER_TKIP) + caps |= NM_WIFI_DEVICE_CAP_CIPHER_TKIP; - if (range->enc_capa & IW_ENC_CAPA_CIPHER_CCMP) - caps |= NM_WIFI_DEVICE_CAP_CIPHER_CCMP; + if (range->enc_capa & IW_ENC_CAPA_CIPHER_CCMP) + caps |= NM_WIFI_DEVICE_CAP_CIPHER_CCMP; - if (range->enc_capa & IW_ENC_CAPA_WPA) - caps |= NM_WIFI_DEVICE_CAP_WPA; + if (range->enc_capa & IW_ENC_CAPA_WPA) + caps |= NM_WIFI_DEVICE_CAP_WPA; - if (range->enc_capa & IW_ENC_CAPA_WPA2) - caps |= NM_WIFI_DEVICE_CAP_RSN; + if (range->enc_capa & IW_ENC_CAPA_WPA2) + caps |= NM_WIFI_DEVICE_CAP_RSN; - /* Check for cipher support but not WPA support */ - if ( (caps & (NM_WIFI_DEVICE_CAP_CIPHER_TKIP | NM_WIFI_DEVICE_CAP_CIPHER_CCMP)) - && !(caps & (NM_WIFI_DEVICE_CAP_WPA | NM_WIFI_DEVICE_CAP_RSN))) { - nm_log_warn (LOGD_WIFI, "%s: device supports WPA ciphers but not WPA protocol; " - "WPA unavailable.", iface); - caps &= ~WPA_CAPS; - } + /* Check for cipher support but not WPA support */ + if ( (caps & (NM_WIFI_DEVICE_CAP_CIPHER_TKIP | NM_WIFI_DEVICE_CAP_CIPHER_CCMP)) + && !(caps & (NM_WIFI_DEVICE_CAP_WPA | NM_WIFI_DEVICE_CAP_RSN))) { + nm_log_warn (LOGD_WIFI, "%s: device supports WPA ciphers but not WPA protocol; " + "WPA unavailable.", iface); + caps &= ~WPA_CAPS; + } - /* Check for WPA support but not cipher support */ - if ( (caps & (NM_WIFI_DEVICE_CAP_WPA | NM_WIFI_DEVICE_CAP_RSN)) - && !(caps & (NM_WIFI_DEVICE_CAP_CIPHER_TKIP | NM_WIFI_DEVICE_CAP_CIPHER_CCMP))) { - nm_log_warn (LOGD_WIFI, "%s: device supports WPA protocol but not WPA ciphers; " - "WPA unavailable.", iface); - caps &= ~WPA_CAPS; - } + /* Check for WPA support but not cipher support */ + if ( (caps & (NM_WIFI_DEVICE_CAP_WPA | NM_WIFI_DEVICE_CAP_RSN)) + && !(caps & (NM_WIFI_DEVICE_CAP_CIPHER_TKIP | NM_WIFI_DEVICE_CAP_CIPHER_CCMP))) { + nm_log_warn (LOGD_WIFI, "%s: device supports WPA protocol but not WPA ciphers; " + "WPA unavailable.", iface); + caps &= ~WPA_CAPS; } return caps; @@ -665,8 +643,19 @@ constructor (GType type, memset (&range, 0, sizeof (struct iw_range)); success = wireless_get_range (NM_DEVICE_WIFI (object), &range, &response_len); - if (!success) + if (!success) { + nm_log_info (LOGD_HW | LOGD_WIFI, "(%s): driver WEXT range request failed", + nm_device_get_iface (NM_DEVICE (self))); goto error; + } + + if ((response_len < 300) || (range.we_version_compiled < 21)) { + nm_log_info (LOGD_HW | LOGD_WIFI, + "(%s): driver WEXT version too old (got %d, expected >= 21)", + nm_device_get_iface (NM_DEVICE (self)), + range.we_version_compiled); + goto error; + } priv->max_qual.qual = range.max_qual.qual; priv->max_qual.level = range.max_qual.level; @@ -677,8 +666,6 @@ constructor (GType type, for (i = 0; i < priv->num_freqs; i++) priv->freqs[i] = iw_freq_to_uint32 (&range.freq[i]); - priv->we_version = range.we_version_compiled; - /* Check for the ability to scan specific SSIDs. Until the scan_capa * field gets added to wireless-tools, need to work around that by casting * to the custom structure. @@ -698,7 +685,7 @@ constructor (GType type, } /* 802.11 wireless-specific capabilities */ - priv->capabilities = get_wireless_capabilities (self, &range, response_len); + priv->capabilities = get_wireless_capabilities (self, &range); /* Connect to the supplicant manager */ priv->supplicant.mgr = nm_supplicant_manager_get (); @@ -977,6 +964,31 @@ get_active_ap (NMDeviceWifi *self, return NULL; } +static void +update_seen_bssids_cache (NMDeviceWifi *self, NMAccessPoint *ap) +{ + NMActRequest *req; + NMConnection *connection; + + g_return_if_fail (NM_IS_DEVICE_WIFI (self)); + + if (ap == NULL) + return; + + /* Don't cache the BSSID for Ad-Hoc APs */ + if (nm_ap_get_mode (ap) != NM_802_11_MODE_INFRA) + return; + + if (nm_device_get_state (NM_DEVICE (self)) == NM_DEVICE_STATE_ACTIVATED) { + req = nm_device_get_act_request (NM_DEVICE (self)); + if (req) { + connection = nm_act_request_get_connection (req); + nm_settings_connection_add_seen_bssid (NM_SETTINGS_CONNECTION (connection), + nm_ap_get_address (ap)); + } + } +} + static void set_current_ap (NMDeviceWifi *self, NMAccessPoint *new_ap) { @@ -1003,6 +1015,9 @@ set_current_ap (NMDeviceWifi *self, NMAccessPoint *new_ap) */ priv->ap_list = g_slist_remove (priv->ap_list, new_ap); priv->ap_list = g_slist_prepend (priv->ap_list, new_ap); + + /* Update seen BSSIDs cache */ + update_seen_bssids_cache (self, priv->current_ap); } /* Unref old AP here to ensure object lives if new_ap == old_ap */ @@ -1303,6 +1318,7 @@ real_check_connection_compatible (NMDevice *device, NMSettingConnection *s_con; NMSettingWireless *s_wireless; const GByteArray *mac; + const GSList *mac_blacklist, *mac_blacklist_iter; s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION)); g_assert (s_con); @@ -1330,6 +1346,25 @@ real_check_connection_compatible (NMDevice *device, return FALSE; } + /* Check for MAC address blacklist */ + mac_blacklist = nm_setting_wireless_get_mac_address_blacklist (s_wireless); + for (mac_blacklist_iter = mac_blacklist; mac_blacklist_iter; + mac_blacklist_iter = g_slist_next (mac_blacklist_iter)) { + struct ether_addr addr; + + if (!ether_aton_r (mac_blacklist_iter->data, &addr)) { + g_warn_if_reached (); + continue; + } + if (memcmp (&addr, &priv->perm_hw_addr, ETH_ALEN) == 0) { + g_set_error (error, + NM_WIFI_ERROR, NM_WIFI_ERROR_CONNECTION_INCOMPATIBLE, + "The connection's MAC address (%s) is blacklisted in %s.", + (char *) mac_blacklist_iter->data, NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST); + return FALSE; + } + } + // FIXME: check channel/freq/band against bands the hardware supports // FIXME: check encryption against device capabilities // FIXME: check bitrate against device capabilities @@ -1574,6 +1609,8 @@ real_get_best_auto_connection (NMDevice *dev, NMSettingConnection *s_con; NMSettingWireless *s_wireless; const GByteArray *mac; + const GSList *mac_blacklist, *mac_blacklist_iter; + gboolean mac_blacklist_found = FALSE; NMSettingIP4Config *s_ip4; const char *method = NULL; @@ -1591,7 +1628,26 @@ real_get_best_auto_connection (NMDevice *dev, mac = nm_setting_wireless_get_mac_address (s_wireless); if (mac && memcmp (mac->data, &priv->perm_hw_addr, ETH_ALEN)) + continue; + + /* Check for MAC address blacklist */ + mac_blacklist = nm_setting_wireless_get_mac_address_blacklist (s_wireless); + for (mac_blacklist_iter = mac_blacklist; mac_blacklist_iter; + mac_blacklist_iter = g_slist_next (mac_blacklist_iter)) { + struct ether_addr addr; + + if (!ether_aton_r (mac_blacklist_iter->data, &addr)) { + g_warn_if_reached (); continue; + } + if (memcmp (&addr, &priv->perm_hw_addr, ETH_ALEN) == 0) { + mac_blacklist_found = TRUE; + break; + } + } + /* Found device MAC address in the blacklist - do not use this connection */ + if (mac_blacklist_found) + continue; /* Use the connection if it's a shared connection */ s_ip4 = (NMSettingIP4Config *) nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG); @@ -1820,7 +1876,7 @@ nm_device_wifi_get_ssid (NMDeviceWifi *self) priv = NM_DEVICE_WIFI_GET_PRIVATE (self); sk = socket (AF_INET, SOCK_DGRAM, 0); - if (!sk) { + if (sk == -1) { nm_log_err (LOGD_HW, "couldn't create socket: %d.", errno); return NULL; } @@ -1844,13 +1900,6 @@ nm_device_wifi_get_ssid (NMDeviceWifi *self) len = wrq.u.essid.length; if (!nm_utils_is_empty_ssid ((guint8 *) ssid, len)) { - /* Some drivers include nul termination in the SSID, so let's - * remove it here before further processing. WE-21 changes this - * to explicitly require the length _not_ to include nul - * termination. */ - if (len > 0 && ssid[len - 1] == '\0' && priv->we_version < 21) - len--; - priv->ssid = g_byte_array_sized_new (len); g_byte_array_append (priv->ssid, (const guint8 *) ssid, len); } @@ -2446,88 +2495,86 @@ remove_link_timeout (NMDeviceWifi *self) static gboolean link_timeout_cb (gpointer user_data) { - NMDevice * dev = NM_DEVICE (user_data); - NMDeviceWifi * self = NM_DEVICE_WIFI (dev); - NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self); - NMActRequest * req = NULL; - NMAccessPoint * ap = NULL; - NMConnection * connection; - const char * setting_name; - gboolean auth_enforced, encrypted = FALSE; - - g_assert (dev); + NMDevice *dev = NM_DEVICE (user_data); - priv->link_timeout_id = 0; + nm_log_warn (LOGD_WIFI, "(%s): link timed out.", nm_device_get_iface (dev)); - req = nm_device_get_act_request (dev); - ap = nm_device_wifi_get_activation_ap (self); - if (req == NULL || ap == NULL) { - /* shouldn't ever happen */ - nm_log_err (LOGD_WIFI, "couldn't get activation request or activation AP."); - if (nm_device_is_activating (dev)) { - cleanup_association_attempt (self, TRUE); - nm_device_state_changed (dev, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_NONE); - } - return FALSE; - } + NM_DEVICE_WIFI_GET_PRIVATE (dev)->link_timeout_id = 0; /* Disconnect event while activated; the supplicant hasn't been able * to reassociate within the timeout period, so the connection must * fail. */ - if (nm_device_get_state (dev) == NM_DEVICE_STATE_ACTIVATED) { + if (nm_device_get_state (dev) == NM_DEVICE_STATE_ACTIVATED) nm_device_state_changed (dev, NM_DEVICE_STATE_DISCONNECTED, NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT); - return FALSE; - } - /* Disconnect event during initial authentication and credentials - * ARE checked - we are likely to have wrong key. Ask the user for - * another one. + return FALSE; +} + +static gboolean +handle_authenticate_fail (NMDeviceWifi *self, guint32 new_state, guint32 old_state) +{ + NMDevice *device = NM_DEVICE (self); + NMSetting8021x *s_8021x; + NMSettingWirelessSecurity *s_wsec; + NMSettingSecretFlags secret_flags = NM_SETTING_SECRET_FLAG_NONE; + NMActRequest *req; + NMConnection *connection; + const char *setting_name = NULL; + gboolean handled = FALSE; + + g_return_val_if_fail (new_state == NM_SUPPLICANT_INTERFACE_STATE_DISCONNECTED, FALSE); + + /* Only care about ASSOCIATED -> DISCONNECTED transitions since 802.1x stuff + * happens between the ASSOCIATED and AUTHENTICATED states. */ - if (nm_device_get_state (dev) != NM_DEVICE_STATE_CONFIG) - goto time_out; + if (old_state != NM_SUPPLICANT_INTERFACE_STATE_ASSOCIATED) + return FALSE; - connection = nm_act_request_get_connection (req); - if (!connection) - goto time_out; + req = nm_device_get_act_request (NM_DEVICE (self)); + g_return_val_if_fail (req != NULL, FALSE); - auth_enforced = ap_auth_enforced (connection, ap, &encrypted); - if (!encrypted || !auth_enforced) - goto time_out; + connection = nm_act_request_get_connection (req); + g_return_val_if_fail (connection != NULL, FALSE); - /* Drivers are still just too crappy, and emit too many disassociation - * events during connection. So for now, just let the driver and supplicant - * keep trying to associate, and don't ask for new secrets when we get - * disconnected during association. + /* If it's an 802.1x or LEAP connection with "always ask"/unsaved secrets + * then we need to ask again because it might be an OTP token and the PIN + * may have changed. */ - if (0) { + s_8021x = nm_connection_get_setting_802_1x (connection); + s_wsec = nm_connection_get_setting_wireless_security (connection); + + if (s_8021x) { + nm_setting_get_secret_flags (NM_SETTING (s_8021x), + NM_SETTING_802_1X_PASSWORD, + &secret_flags, + NULL); + setting_name = NM_SETTING_802_1X_SETTING_NAME; + } else if (s_wsec) { + nm_setting_get_secret_flags (NM_SETTING (s_wsec), + NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD, + &secret_flags, + NULL); + setting_name = NM_SETTING_WIRELESS_SECURITY_SETTING_NAME; + } + + if (setting_name && (secret_flags & NM_SETTING_SECRET_FLAG_NOT_SAVED)) { + NMSettingsGetSecretsFlags flags = NM_SETTINGS_GET_SECRETS_FLAG_ALLOW_INTERACTION + | NM_SETTINGS_GET_SECRETS_FLAG_REQUEST_NEW; + nm_connection_clear_secrets (connection); - setting_name = nm_connection_need_secrets (connection, NULL); - if (!setting_name) - goto time_out; - /* Association/authentication failed during association, probably have a - * bad encryption key and the authenticating entity (AP, RADIUS server, etc) - * denied the association due to bad credentials. - */ nm_log_info (LOGD_DEVICE | LOGD_WIFI, "Activation (%s/wireless): disconnected during association," - " asking for new key.", nm_device_get_iface (dev)); - cleanup_association_attempt (self, TRUE); - nm_device_state_changed (dev, NM_DEVICE_STATE_NEED_AUTH, NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT); - nm_act_request_get_secrets (req, - setting_name, - NM_SETTINGS_GET_SECRETS_FLAG_REQUEST_NEW, - NULL, - wifi_secrets_cb, - self); + " asking for new key.", nm_device_get_iface (device)); - return FALSE; + cleanup_association_attempt (self, TRUE); + nm_device_state_changed (device, NM_DEVICE_STATE_NEED_AUTH, NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT); + nm_act_request_get_secrets (req, setting_name, flags, NULL, wifi_secrets_cb, self); + handled = TRUE; } -time_out: - nm_log_warn (LOGD_WIFI, "(%s): link timed out.", nm_device_get_iface (dev)); - return FALSE; + return handled; } static void @@ -2596,14 +2643,20 @@ supplicant_iface_state_cb (NMSupplicantInterface *iface, break; case NM_SUPPLICANT_INTERFACE_STATE_DISCONNECTED: if ((devstate == NM_DEVICE_STATE_ACTIVATED) || nm_device_is_activating (device)) { - /* Start the link timeout so we allow some time for reauthentication, - * use a longer timeout if we are scanning since some cards take a - * while to scan. + /* Disconnect during authentication means the 802.1x password is wrong */ + if (handle_authenticate_fail (self, new_state, old_state)) + break; + } + + if (devstate == NM_DEVICE_STATE_ACTIVATED) { + /* If it's a disconnect while activated then start the link timer + * to let the supplicant reconnect for a bit and if that doesn't + * work kill the connection and try something else. Allow a bit + * more time if the card is scanning since sometimes the link will + * drop while scanning and come back when the scan is done. */ - if (!priv->link_timeout_id) { - priv->link_timeout_id = g_timeout_add_seconds (scanning ? 30 : 15, - link_timeout_cb, self); - } + if (priv->link_timeout_id == 0) + priv->link_timeout_id = g_timeout_add_seconds (scanning ? 30 : 15, link_timeout_cb, self); } break; case NM_SUPPLICANT_INTERFACE_STATE_DOWN: @@ -3436,11 +3489,13 @@ activation_success_handler (NMDevice *dev) done: periodic_update (self); + /* Update seen BSSIDs cache with the connected AP */ + update_seen_bssids_cache (self, priv->current_ap); + /* Reset scan interval to something reasonable */ priv->scan_interval = SCAN_INTERVAL_MIN + (SCAN_INTERVAL_STEP * 2); } - static void activation_failure_handler (NMDevice *dev) { @@ -3565,6 +3620,10 @@ device_state_changed (NMDevice *device, } clear_aps = TRUE; break; + case NM_DEVICE_STATE_NEED_AUTH: + if (priv->supplicant.iface) + nm_supplicant_interface_disconnect (priv->supplicant.iface); + break; case NM_DEVICE_STATE_ACTIVATED: activation_success_handler (device); break; diff --git a/src/nm-device.c b/src/nm-device.c index 4b7ec5df..1301197a 100644 --- a/src/nm-device.c +++ b/src/nm-device.c @@ -2890,34 +2890,6 @@ check_connection_compatible (NMDeviceInterface *dev_iface, return TRUE; } -static gboolean -device_activation_precheck (NMDevice *self, NMConnection *connection, GError **error) -{ - NMConnection *current_connection; - - g_return_val_if_fail (NM_IS_DEVICE (self), FALSE); - g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE); - - if (nm_device_get_state (self) != NM_DEVICE_STATE_ACTIVATED) - return TRUE; - - if (!nm_device_is_activating (self)) - return TRUE; - - // FIXME: why not just check connection path & service? - current_connection = nm_act_request_get_connection (nm_device_get_act_request (self)); - if (nm_connection_compare (connection, current_connection, NM_SETTING_COMPARE_FLAG_EXACT)) { - /* Already activating or activated with the same connection */ - g_set_error (error, - NM_DEVICE_INTERFACE_ERROR, - NM_DEVICE_INTERFACE_ERROR_CONNECTION_ACTIVATING, - "%s", "Connection is already activating"); - return FALSE; - } - - return TRUE; -} - static gboolean nm_device_activate (NMDeviceInterface *device, NMActRequest *req, @@ -2926,9 +2898,21 @@ nm_device_activate (NMDeviceInterface *device, NMDevice *self = NM_DEVICE (device); NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self); - if (!device_activation_precheck (self, nm_act_request_get_connection (req), error)) { - g_assert (*error); - return FALSE; + /* Make sure this connection isn't activated already, or in the process of + * being activated. + */ + if ( nm_device_is_activating (self) + || (nm_device_get_state (self) == NM_DEVICE_STATE_ACTIVATED)) { + NMConnection *new = nm_act_request_get_connection (req); + NMConnection *current = nm_act_request_get_connection (priv->act_request); + + if (new == current) { + g_set_error_literal (error, + NM_DEVICE_INTERFACE_ERROR, + NM_DEVICE_INTERFACE_ERROR_CONNECTION_ACTIVATING, + "Connection is already activating"); + return FALSE; + } } priv->act_request = g_object_ref (req); diff --git a/src/nm-manager-auth.c b/src/nm-manager-auth.c index 9171663b..beed65ab 100644 --- a/src/nm-manager-auth.c +++ b/src/nm-manager-auth.c @@ -173,6 +173,37 @@ nm_auth_chain_get_data (NMAuthChain *self, const char *tag) return tmp ? tmp->data : NULL; } +/** + * nm_auth_chain_steal_data: + * @self: A #NMAuthChain. + * @tag: A "tag" uniquely identifying the data to steal. + * + * Removes the datum assocated with @tag from the chain's data associations, + * without invoking the association's destroy handler. The caller assumes + * ownership over the returned value. + * + * Returns: the datum originally associated with @tag + */ +gpointer +nm_auth_chain_steal_data (NMAuthChain *self, const char *tag) +{ + ChainData *tmp; + gpointer value = NULL; + + g_return_val_if_fail (self != NULL, NULL); + g_return_val_if_fail (tag != NULL, NULL); + + tmp = g_hash_table_lookup (self->data, tag); + if (tmp) { + g_hash_table_steal (self->data, tag); + value = tmp->data; + /* Make sure the destroy handler isn't called when freeing */ + tmp->destroy = NULL; + free_data (tmp); + } + return value; +} + void nm_auth_chain_set_data (NMAuthChain *self, const char *tag, @@ -309,7 +340,8 @@ 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 (!call->idle_id) + call->idle_id = g_idle_add ((GSourceFunc) auth_call_complete, call); } #if WITH_POLKIT @@ -544,45 +576,82 @@ typedef struct { gpointer changed_data; } PkChangedInfo; +static GSList *funcs = NULL; + #if WITH_POLKIT static void -pk_authority_changed_cb (GObject *object, PkChangedInfo *info) +pk_authority_changed_cb (GObject *object, gpointer unused) { - info->changed_callback (info->changed_data); + GSList *iter; + + for (iter = funcs; iter; iter = g_slist_next (iter)) { + PkChangedInfo *info = iter->data; + + info->changed_callback (info->changed_data); + } } #endif void -nm_auth_set_changed_func (GDestroyNotify callback, gpointer callback_data) +nm_auth_changed_func_register (GDestroyNotify callback, gpointer callback_data) { #if WITH_POLKIT - static PkChangedInfo info = { NULL, NULL }; - static guint32 changed_id = 0; PolkitAuthority *authority; + static guint32 changed_id = 0; +#endif + PkChangedInfo *info; + GSList *iter; + gboolean found = FALSE; +#if WITH_POLKIT 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); + /* Hook up the changed signal the first time a callback is registered */ + if (changed_id == 0) { + changed_id = g_signal_connect (authority, + "changed", + G_CALLBACK (pk_authority_changed_cb), + &funcs); + } +#endif + + /* No duplicates */ + for (iter = funcs; iter; iter = g_slist_next (iter)) { + info = iter->data; + if ((callback == info->changed_callback) && (callback_data == info->changed_data)) { + found = TRUE; + break; } } + g_warn_if_fail (found == FALSE); + if (found == FALSE) { + info = g_malloc0 (sizeof (*info)); + info->changed_callback = callback; + info->changed_data = callback_data; + funcs = g_slist_append (funcs, info); + } + +#if WITH_POLKIT g_object_unref (authority); #endif } +void +nm_auth_changed_func_unregister (GDestroyNotify callback, gpointer callback_data) +{ + GSList *iter; + + for (iter = funcs; iter; iter = g_slist_next (iter)) { + PkChangedInfo *info = iter->data; + + if ((callback == info->changed_callback) && (callback_data == info->changed_data)) { + g_free (info); + funcs = g_slist_delete_link (funcs, iter); + break; + } + } +} + diff --git a/src/nm-manager-auth.h b/src/nm-manager-auth.h index ad14d306..15317c71 100644 --- a/src/nm-manager-auth.h +++ b/src/nm-manager-auth.h @@ -70,6 +70,8 @@ NMAuthChain *nm_auth_chain_new_dbus_sender (const char *dbus_sender, gpointer nm_auth_chain_get_data (NMAuthChain *chain, const char *tag); +gpointer nm_auth_chain_steal_data (NMAuthChain *chain, const char *tag); + void nm_auth_chain_set_data (NMAuthChain *chain, const char *tag, gpointer data, @@ -102,7 +104,9 @@ 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); +void nm_auth_changed_func_register (GDestroyNotify callback, gpointer callback_data); + +void nm_auth_changed_func_unregister (GDestroyNotify callback, gpointer callback_data); #endif /* NM_MANAGER_AUTH_H */ diff --git a/src/nm-manager.c b/src/nm-manager.c index 961c9d8c..f5782254 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -63,6 +63,7 @@ #include "nm-settings-connection.h" #include "nm-manager-auth.h" #include "NetworkManagerUtils.h" +#include "nm-utils.h" #define NM_AUTOIP_DBUS_SERVICE "org.freedesktop.nm_avahi_autoipd" #define NM_AUTOIP_DBUS_IFACE "org.freedesktop.nm_avahi_autoipd" @@ -172,6 +173,7 @@ struct PendingActivation { DBusGMethodInvocation *context; PendingActivationFunc callback; NMAuthChain *chain; + const char *wifi_shared_permission; char *connection_path; NMConnection *connection; @@ -739,17 +741,15 @@ pending_activation_new (NMManager *manager, } static void -pending_auth_net_done (NMAuthChain *chain, - GError *error, - DBusGMethodInvocation *context, - gpointer user_data) +pending_auth_done (NMAuthChain *chain, + GError *error, + DBusGMethodInvocation *context, + gpointer user_data) { PendingActivation *pending = user_data; NMAuthCallResult result; GError *tmp_error = NULL; - pending->chain = NULL; - /* Caller has had a chance to obtain authorization, so we only need to * check for 'yes' here. */ @@ -758,10 +758,23 @@ pending_auth_net_done (NMAuthChain *chain, tmp_error = g_error_new_literal (NM_MANAGER_ERROR, NM_MANAGER_ERROR_PERMISSION_DENIED, "Not authorized to control networking."); + goto out; + } + + if (pending->wifi_shared_permission) { + result = nm_auth_chain_get_result (chain, pending->wifi_shared_permission); + if (result != NM_AUTH_CALL_RESULT_YES) { + tmp_error = g_error_new_literal (NM_MANAGER_ERROR, + NM_MANAGER_ERROR_PERMISSION_DENIED, + "Not authorized to share connections via wifi."); + goto out; + } } + /* Otherwise authorized and available to activate */ + +out: pending->callback (pending, tmp_error); - nm_auth_chain_unref (chain); g_clear_error (&tmp_error); } @@ -772,12 +785,15 @@ pending_activation_check_authorized (PendingActivation *pending, char *error_desc = NULL; gulong sender_uid = G_MAXULONG; GError *error; + const char *wifi_permission = NULL; + NMConnection *connection; + NMSettings *settings; g_return_if_fail (pending != NULL); g_return_if_fail (dbus_mgr != NULL); if (!nm_auth_get_caller_uid (pending->context, - dbus_mgr, + dbus_mgr, &sender_uid, &error_desc)) { error = g_error_new_literal (NM_MANAGER_ERROR, @@ -795,17 +811,40 @@ pending_activation_check_authorized (PendingActivation *pending, return; } + /* By this point we have an auto-completed connection (for AddAndActivate) + * or an existing connection (for Activate). + */ + connection = pending->connection; + if (!connection) { + settings = NM_MANAGER_GET_PRIVATE (pending->manager)->settings; + connection = (NMConnection *) nm_settings_get_connection_by_path (settings, pending->connection_path); + } + + if (!connection) { + error = g_error_new_literal (NM_MANAGER_ERROR, + NM_MANAGER_ERROR_UNKNOWN_CONNECTION, + "Connection could not be found."); + pending->callback (pending, error); + g_error_free (error); + return; + } + /* 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->context, NULL, - pending_auth_net_done, + pending_auth_done, pending); g_assert (pending->chain); - nm_auth_chain_add_call (pending->chain, - NM_AUTH_PERMISSION_NETWORK_CONTROL, - TRUE); + nm_auth_chain_add_call (pending->chain, NM_AUTH_PERMISSION_NETWORK_CONTROL, TRUE); + + /* Shared wifi connections require special permissions too */ + wifi_permission = nm_utils_get_shared_wifi_permission (connection); + if (wifi_permission) { + pending->wifi_shared_permission = wifi_permission; + nm_auth_chain_add_call (pending->chain, wifi_permission, TRUE); + } } static void @@ -1040,52 +1079,27 @@ manager_hidden_ap_found (NMDeviceInterface *device, { NMManager *manager = NM_MANAGER (user_data); NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager); - const struct ether_addr *ap_addr; - const GByteArray *ap_ssid; + const struct ether_addr *bssid; GSList *iter; GSList *connections; gboolean done = FALSE; - ap_ssid = nm_ap_get_ssid (ap); - if (ap_ssid && ap_ssid->len) - return; + g_return_if_fail (nm_ap_get_ssid (ap) == NULL); - ap_addr = nm_ap_get_address (ap); - g_assert (ap_addr); + bssid = nm_ap_get_address (ap); + g_assert (bssid); /* Look for this AP's BSSID in the seen-bssids list of a connection, * and if a match is found, copy over the SSID */ connections = nm_settings_get_connections (priv->settings); - for (iter = connections; iter && !done; iter = g_slist_next (iter)) { NMConnection *connection = NM_CONNECTION (iter->data); - NMSettingWireless *s_wireless; - const GByteArray *ssid; - guint32 num_bssids; - guint32 i; - - s_wireless = (NMSettingWireless *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS); - if (!s_wireless) - continue; - - num_bssids = nm_setting_wireless_get_num_seen_bssids (s_wireless); - if (num_bssids < 1) - continue; - - ssid = nm_setting_wireless_get_ssid (s_wireless); - g_assert (ssid); + NMSettingWireless *s_wifi; - for (i = 0; i < num_bssids && !done; i++) { - const char *seen_bssid = nm_setting_wireless_get_seen_bssid (s_wireless, i); - struct ether_addr seen_addr; - - if (ether_aton_r (seen_bssid, &seen_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; - } - } + s_wifi = nm_connection_get_setting_wireless (connection); + if (s_wifi) { + if (nm_settings_connection_has_seen_bssid (NM_SETTINGS_CONNECTION (connection), bssid)) + nm_ap_set_ssid (ap, nm_setting_wireless_get_ssid (s_wifi)); } } g_slist_free (connections); @@ -1667,12 +1681,11 @@ bluez_manager_bdaddr_removed_cb (NMBluezManager *bluez_mgr, g_return_if_fail (bdaddr != NULL); g_return_if_fail (object_path != NULL); - nm_log_info (LOGD_HW, "BT device %s removed", bdaddr); - for (iter = priv->devices; iter; iter = iter->next) { NMDevice *device = NM_DEVICE (iter->data); if (!strcmp (nm_device_get_udi (device), object_path)) { + nm_log_info (LOGD_HW, "BT device %s removed", bdaddr); priv->devices = remove_one_device (self, priv->devices, device, FALSE); break; } @@ -1866,6 +1879,8 @@ internal_activate_device (NMManager *manager, /* Tear down any existing connection */ if (nm_device_get_act_request (device)) { + nm_log_info (LOGD_DEVICE, "(%s): disconnecting for new activation request.", + nm_device_get_iface (device)); nm_device_state_changed (device, NM_DEVICE_STATE_DISCONNECTED, NM_DEVICE_STATE_REASON_NONE); @@ -2040,7 +2055,9 @@ pending_activate (NMManager *self, PendingActivation *pending) if (!path) { nm_log_warn (LOGD_CORE, "connection %s failed to activate: (%d) %s", - pending->connection_path, error->code, error->message); + pending->connection_path, + error ? error->code : -1, + error && error->message ? error->message : "(unknown)"); } else g_object_notify (G_OBJECT (pending->manager), NM_MANAGER_ACTIVE_CONNECTIONS); @@ -3104,6 +3121,13 @@ nm_manager_get (NMSettings *settings, return singleton; } +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 dispose (GObject *object) { @@ -3121,7 +3145,7 @@ dispose (GObject *object) g_slist_foreach (priv->auth_chains, (GFunc) nm_auth_chain_unref, NULL); g_slist_free (priv->auth_chains); - nm_auth_set_changed_func (NULL, NULL); + nm_auth_changed_func_unregister (authority_changed_cb, manager); while (g_slist_length (priv->devices)) { priv->devices = remove_one_device (manager, @@ -3397,13 +3421,6 @@ periodic_update_active_connection_timestamps (gpointer user_data) return TRUE; } -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) { @@ -3502,7 +3519,7 @@ nm_manager_init (NMManager *manager) nm_log_warn (LOGD_SUSPEND, "could not initialize UPower D-Bus proxy"); /* Listen for authorization changes */ - nm_auth_set_changed_func (authority_changed_cb, manager); + nm_auth_changed_func_register (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 194d1111..a42a0fa9 100644 --- a/src/nm-policy.c +++ b/src/nm-policy.c @@ -46,6 +46,7 @@ #include "nm-dns-manager.h" #include "nm-vpn-manager.h" #include "nm-policy-hostname.h" +#include "nm-manager-auth.h" struct NMPolicy { NMManager *manager; @@ -66,12 +67,17 @@ struct NMPolicy { HostnameThread *lookup; + gint reset_retries_id; /* idle handler for resetting the retries count */ + char *orig_hostname; /* hostname at NM start time */ char *cur_hostname; /* hostname we want to assign */ }; #define RETRIES_TAG "autoconnect-retries" #define RETRIES_DEFAULT 4 +#define RESET_RETRIES_TIMESTAMP_TAG "reset-retries-timestamp-tag" +#define RESET_RETRIES_TIMER 300 +#define FAILURE_REASON_TAG "failure-reason" static NMDevice * get_best_ip4_device (NMManager *manager, NMActRequest **out_req) @@ -316,36 +322,36 @@ update_system_hostname (NMPolicy *policy, NMDevice *best4, NMDevice *best6) /* Grab a hostname out of the device's DHCP4 config */ dhcp4_config = nm_device_get_dhcp4_config (best4); if (dhcp4_config) { - p = dhcp_hostname = nm_dhcp4_config_get_option (dhcp4_config, "host_name"); + p = dhcp_hostname = nm_dhcp4_config_get_option (dhcp4_config, "new_host_name"); if (dhcp_hostname && strlen (dhcp_hostname)) { /* Sanity check; strip leading spaces */ while (*p) { if (!isblank (*p++)) { - _set_hostname (policy, TRUE, dhcp_hostname, "from DHCPv4"); + _set_hostname (policy, TRUE, p-1, "from DHCPv4"); return; } } nm_log_warn (LOGD_DNS, "DHCPv4-provided hostname '%s' looks invalid; ignoring it", - dhcp_hostname); + dhcp_hostname); } } } else if (best6) { NMDHCP6Config *dhcp6_config; - /* Grab a hostname out of the device's DHCP4 config */ + /* Grab a hostname out of the device's DHCP6 config */ dhcp6_config = nm_device_get_dhcp6_config (best6); if (dhcp6_config) { - p = dhcp_hostname = nm_dhcp6_config_get_option (dhcp6_config, "host_name"); + p = dhcp_hostname = nm_dhcp6_config_get_option (dhcp6_config, "new_host_name"); if (dhcp_hostname && strlen (dhcp_hostname)) { /* Sanity check; strip leading spaces */ while (*p) { if (!isblank (*p++)) { - _set_hostname (policy, TRUE, dhcp_hostname, "from DHCPv6"); + _set_hostname (policy, TRUE, p-1, "from DHCPv6"); return; } } nm_log_warn (LOGD_DNS, "DHCPv6-provided hostname '%s' looks invalid; ignoring it", - dhcp_hostname); + dhcp_hostname); } } } @@ -722,16 +728,29 @@ auto_activate_device (gpointer user_data) /* Remove connections that shouldn't be auto-activated */ while (iter) { - NMConnection *candidate = NM_CONNECTION (iter->data); + NMSettingsConnection *candidate = NM_SETTINGS_CONNECTION (iter->data); + gboolean remove_it = FALSE; + const char *permission; /* Grab next item before we possibly delete the current item */ iter = g_slist_next (iter); /* Ignore connections that were tried too many times or are not visible - * to any logged-in users. + * to any logged-in users. Also ignore shared wifi connections for + * which no user has the shared wifi permission. */ - if ( get_connection_auto_retries (candidate) == 0 - || nm_settings_connection_is_visible (NM_SETTINGS_CONNECTION (candidate)) == FALSE) + if ( get_connection_auto_retries (NM_CONNECTION (candidate)) == 0 + || nm_settings_connection_is_visible (candidate) == FALSE) + remove_it = TRUE; + else { + permission = nm_utils_get_shared_wifi_permission (NM_CONNECTION (candidate)); + if (permission) { + if (nm_settings_connection_check_permission (candidate, permission) == FALSE) + remove_it = TRUE; + } + } + + if (remove_it) connections = g_slist_remove (connections, candidate); } @@ -739,6 +758,8 @@ auto_activate_device (gpointer user_data) if (best_connection) { GError *error = NULL; + nm_log_info (LOGD_DEVICE, "Auto-activating connection '%s'.", + nm_connection_get_id (best_connection)); if (!nm_manager_activate_connection (policy->manager, best_connection, specific_object, @@ -817,13 +838,34 @@ hostname_changed (NMManager *manager, GParamSpec *pspec, gpointer user_data) } static void -reset_retries_all (NMSettings *settings) +reset_retries_all (NMSettings *settings, NMDevice *device) +{ + GSList *connections, *iter; + GError *error = NULL; + + connections = nm_settings_get_connections (settings); + for (iter = connections; iter; iter = g_slist_next (iter)) { + if (!device || nm_device_interface_check_connection_compatible (NM_DEVICE_INTERFACE (device), iter->data, &error)) + set_connection_auto_retries (NM_CONNECTION (iter->data), RETRIES_DEFAULT); + g_clear_error (&error); + } + g_slist_free (connections); +} + +static void +reset_retries_for_failed_secrets (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); + for (iter = connections; iter; iter = g_slist_next (iter)) { + NMDeviceStateReason reason = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (iter->data), FAILURE_REASON_TAG)); + + if (reason == NM_DEVICE_STATE_REASON_NO_SECRETS) { + set_connection_auto_retries (NM_CONNECTION (iter->data), RETRIES_DEFAULT); + g_object_set_data (G_OBJECT (iter->data), FAILURE_REASON_TAG, GUINT_TO_POINTER (0)); + } + } g_slist_free (connections); } @@ -838,7 +880,7 @@ sleeping_changed (NMManager *manager, GParamSpec *pspec, gpointer user_data) /* Reset retries on all connections so they'll checked on wakeup */ if (sleeping || !enabled) - reset_retries_all (policy->settings); + reset_retries_all (policy->settings, NULL); } static void @@ -854,6 +896,9 @@ schedule_activate_check (NMPolicy *policy, NMDevice *device, guint delay_seconds if (state < NM_DEVICE_STATE_DISCONNECTED) return; + if (!nm_device_interface_get_enabled (NM_DEVICE_INTERFACE (device))) + return; + if (!nm_device_autoconnect_allowed (device)) return; @@ -864,6 +909,37 @@ schedule_activate_check (NMPolicy *policy, NMDevice *device, guint delay_seconds } } +static gboolean +reset_connections_retries (gpointer user_data) +{ + NMPolicy *policy = (NMPolicy *) user_data; + GSList *connections, *iter; + time_t con_stamp, min_stamp, now; + + policy->reset_retries_id = 0; + + min_stamp = now = time (NULL); + connections = nm_settings_get_connections (policy->settings); + for (iter = connections; iter; iter = g_slist_next (iter)) { + con_stamp = GPOINTER_TO_SIZE (g_object_get_data (G_OBJECT (iter->data), RESET_RETRIES_TIMESTAMP_TAG)); + if (con_stamp == 0) + continue; + if (con_stamp + RESET_RETRIES_TIMER <= now) { + set_connection_auto_retries (NM_CONNECTION (iter->data), RETRIES_DEFAULT); + g_object_set_data (G_OBJECT (iter->data), RESET_RETRIES_TIMESTAMP_TAG, GSIZE_TO_POINTER (0)); + continue; + } + if (con_stamp < min_stamp) + min_stamp = con_stamp; + } + g_slist_free (connections); + + /* Schedule the handler again if there are some stamps left */ + if (min_stamp != now) + policy->reset_retries_id = g_timeout_add_seconds (RESET_RETRIES_TIMER - (now - min_stamp), reset_connections_retries, policy); + return FALSE; +} + static NMConnection * get_device_connection (NMDevice *device) { @@ -886,6 +962,9 @@ device_state_changed (NMDevice *device, NMPolicy *policy = (NMPolicy *) user_data; NMConnection *connection = get_device_connection (device); + if (connection) + g_object_set_data (G_OBJECT (connection), FAILURE_REASON_TAG, GUINT_TO_POINTER (0)); + switch (new_state) { case NM_DEVICE_STATE_FAILED: /* Mark the connection invalid if it failed during activation so that @@ -900,6 +979,11 @@ device_state_changed (NMDevice *device, * automatically retrying because it's just going to fail anyway. */ set_connection_auto_retries (connection, 0); + + /* Mark the connection as failed due to missing secrets so that we can reset + * RETRIES_TAG and automatically re-try when an secret agent registers. + */ + g_object_set_data (G_OBJECT (connection), FAILURE_REASON_TAG, GUINT_TO_POINTER (NM_DEVICE_STATE_REASON_NO_SECRETS)); } else if (tries > 0) { /* Otherwise if it's a random failure, just decrease the number * of automatic retries so that the connection gets tried again @@ -908,8 +992,13 @@ device_state_changed (NMDevice *device, set_connection_auto_retries (connection, tries - 1); } - if (get_connection_auto_retries (connection) == 0) + if (get_connection_auto_retries (connection) == 0) { nm_log_info (LOGD_DEVICE, "Marking connection '%s' invalid.", nm_connection_get_id (connection)); + /* Schedule a handler to reset retries count */ + g_object_set_data (G_OBJECT (connection), RESET_RETRIES_TIMESTAMP_TAG, GSIZE_TO_POINTER ((gsize) time (NULL))); + if (!policy->reset_retries_id) + policy->reset_retries_id = g_timeout_add_seconds (RESET_RETRIES_TIMER, reset_connections_retries, policy); + } nm_connection_clear_secrets (connection); } schedule_activate_check (policy, device, 3); @@ -932,6 +1021,11 @@ device_state_changed (NMDevice *device, update_routing_and_dns (policy, FALSE); break; case NM_DEVICE_STATE_DISCONNECTED: + /* Reset RETRIES_TAG when carrier on. If cable was unplugged + * and plugged again, we should try to reconnect */ + if (reason == NM_DEVICE_STATE_REASON_CARRIER && old_state == NM_DEVICE_STATE_UNAVAILABLE) + reset_retries_all (policy->settings, device); + /* Device is now available for auto-activation */ update_routing_and_dns (policy, FALSE); schedule_activate_check (policy, device, 0); @@ -963,6 +1057,12 @@ nsps_changed (NMDeviceWimax *device, NMWimaxNsp *nsp, gpointer user_data) } #endif +static void +modem_enabled_changed (NMDeviceModem *device, gpointer user_data) +{ + schedule_activate_check ((NMPolicy *) (user_data), NM_DEVICE (device), 0); +} + typedef struct { gulong id; NMDevice *device; @@ -997,6 +1097,8 @@ device_added (NMManager *manager, NMDevice *device, gpointer user_data) _connect_device_signal (policy, device, "nsp-added", nsps_changed); _connect_device_signal (policy, device, "nsp-removed", nsps_changed); #endif + } else if (NM_IS_DEVICE_MODEM (device)) { + _connect_device_signal (policy, device, NM_DEVICE_MODEM_ENABLE_CHANGED, modem_enabled_changed); } } @@ -1058,7 +1160,7 @@ connections_loaded (NMSettings *settings, gpointer user_data) // that by calling reset_retries_all() in nm_policy_new() /* Initialize connections' auto-retries */ - reset_retries_all (settings); + reset_retries_all (settings, NULL); schedule_activate_all ((NMPolicy *) user_data); } @@ -1121,6 +1223,19 @@ connection_visibility_changed (NMSettings *settings, _deactivate_if_active (policy->manager, NM_CONNECTION (connection)); } +static void +secret_agent_registered (NMSettings *settings, + NMSecretAgent *agent, + gpointer user_data) +{ + /* The registered secret agent may provide some missing secrets. Thus we + * reset retries count here and schedule activation, so that the + * connections failed due to missing secrets may re-try auto-connection. + */ + reset_retries_for_failed_secrets (settings); + schedule_activate_all ((NMPolicy *) user_data); +} + static void _connect_manager_signal (NMPolicy *policy, const char *name, gpointer callback) { @@ -1161,7 +1276,10 @@ nm_policy_new (NMManager *manager, memset (hostname, 0, sizeof (hostname)); if (gethostname (&hostname[0], HOST_NAME_MAX) == 0) { /* only cache it if it's a valid hostname */ - if (strlen (hostname) && strcmp (hostname, "localhost") && strcmp (hostname, "localhost.localdomain")) + if ( strlen (hostname) + && strcmp (hostname, "localhost") + && strcmp (hostname, "localhost.localdomain") + && strcmp (hostname, "(none)")) policy->orig_hostname = g_strdup (hostname); } @@ -1186,9 +1304,10 @@ nm_policy_new (NMManager *manager, _connect_settings_signal (policy, NM_SETTINGS_SIGNAL_CONNECTION_REMOVED, connection_removed); _connect_settings_signal (policy, NM_SETTINGS_SIGNAL_CONNECTION_VISIBILITY_CHANGED, connection_visibility_changed); + _connect_settings_signal (policy, NM_SETTINGS_SIGNAL_AGENT_REGISTERED, secret_agent_registered); /* Initialize connections' auto-retries */ - reset_retries_all (policy->settings); + reset_retries_all (policy->settings, NULL); initialized = TRUE; return policy; @@ -1232,6 +1351,9 @@ nm_policy_destroy (NMPolicy *policy) } g_slist_free (policy->dev_ids); + if (policy->reset_retries_id) + g_source_remove (policy->reset_retries_id); + g_free (policy->orig_hostname); g_free (policy->cur_hostname); diff --git a/src/nm-udev-manager.c b/src/nm-udev-manager.c index e0795e81..72501c28 100644 --- a/src/nm-udev-manager.c +++ b/src/nm-udev-manager.c @@ -384,6 +384,9 @@ is_wireless (GUdevDevice *device) g_assert (ifname); fd = socket (PF_INET, SOCK_DGRAM, 0); + if (fd == -1) + return FALSE; + strncpy (iwr.ifr_ifrn.ifrn_name, ifname, IFNAMSIZ); path = g_udev_device_get_sysfs_path (device); diff --git a/src/settings/nm-agent-manager.c b/src/settings/nm-agent-manager.c index 8a5ea106..5ccbdc67 100644 --- a/src/settings/nm-agent-manager.c +++ b/src/settings/nm-agent-manager.c @@ -49,6 +49,9 @@ typedef struct { NMDBusManager *dbus_mgr; NMSessionMonitor *session_monitor; + /* Auth chains for checking agent permissions */ + GSList *chains; + /* Hashed by owner name, not identifier, since two agents in different * sessions can use the same identifier. */ @@ -57,6 +60,14 @@ typedef struct { GHashTable *requests; } NMAgentManagerPrivate; +enum { + AGENT_REGISTERED, + + LAST_SIGNAL +}; +static guint signals[LAST_SIGNAL] = { 0 }; + + typedef struct _Request Request; static void request_add_agent (Request *req, @@ -217,6 +228,59 @@ validate_identifier (const char *identifier, GError **error) return TRUE; } +static void +agent_register_permissions_done (NMAuthChain *chain, + GError *error, + DBusGMethodInvocation *context, + gpointer user_data) +{ + NMAgentManager *self = NM_AGENT_MANAGER (user_data); + NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (self); + NMSecretAgent *agent; + const char *sender; + GError *local = NULL; + NMAuthCallResult result; + GHashTableIter iter; + Request *req; + + priv->chains = g_slist_remove (priv->chains, chain); + + if (error) { + local = g_error_new (NM_AGENT_MANAGER_ERROR, + NM_AGENT_MANAGER_ERROR_PERMISSION_DENIED, + "Failed to request agent permissions: (%d) %s", + error->code, error->message); + dbus_g_method_return_error (context, local); + g_error_free (local); + } else { + agent = nm_auth_chain_steal_data (chain, "agent"); + + result = nm_auth_chain_get_result (chain, NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED); + if (result == NM_AUTH_CALL_RESULT_YES) + nm_secret_agent_add_permission (agent, NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED, TRUE); + + result = nm_auth_chain_get_result (chain, NM_AUTH_PERMISSION_WIFI_SHARE_OPEN); + if (result == NM_AUTH_CALL_RESULT_YES) + nm_secret_agent_add_permission (agent, NM_AUTH_PERMISSION_WIFI_SHARE_OPEN, TRUE); + + sender = nm_secret_agent_get_dbus_owner (agent); + g_hash_table_insert (priv->agents, g_strdup (sender), agent); + nm_log_dbg (LOGD_AGENTS, "(%s) agent registered", + nm_secret_agent_get_description (agent)); + dbus_g_method_return (context); + + /* Signal an agent was registered */ + g_signal_emit (self, signals[AGENT_REGISTERED], 0, agent); + + /* Add this agent to any in-progress secrets requests */ + g_hash_table_iter_init (&iter, priv->requests); + while (g_hash_table_iter_next (&iter, NULL, (gpointer) &req)) + request_add_agent (req, agent, priv->session_monitor); + } + + nm_auth_chain_unref (chain); +} + static void impl_agent_manager_register (NMAgentManager *self, const char *identifier, @@ -227,8 +291,7 @@ impl_agent_manager_register (NMAgentManager *self, gulong sender_uid = G_MAXULONG; GError *error = NULL, *local = NULL; NMSecretAgent *agent; - GHashTableIter iter; - gpointer data; + NMAuthChain *chain; if (!nm_auth_get_caller_uid (context, priv->dbus_mgr, @@ -272,15 +335,16 @@ impl_agent_manager_register (NMAgentManager *self, goto done; } - g_hash_table_insert (priv->agents, g_strdup (sender), agent); - nm_log_dbg (LOGD_AGENTS, "(%s) agent registered", + nm_log_dbg (LOGD_AGENTS, "(%s) requesting permissions", nm_secret_agent_get_description (agent)); - dbus_g_method_return (context); - /* Add this agent to any in-progress secrets requests */ - g_hash_table_iter_init (&iter, priv->requests); - while (g_hash_table_iter_next (&iter, NULL, &data)) - request_add_agent ((Request *) data, agent, priv->session_monitor); + /* Kick off permissions requests for this agent */ + chain = nm_auth_chain_new (context, NULL, agent_register_permissions_done, self); + nm_auth_chain_set_data (chain, "agent", agent, g_object_unref); + nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED, FALSE); + nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_WIFI_SHARE_OPEN, FALSE); + + priv->chains = g_slist_append (priv->chains, chain); done: if (error) @@ -945,8 +1009,8 @@ get_start (gpointer user_data) g_clear_error (&error); } else { /* Do we have everything we need? */ - /* FIXME: handle second check for VPN connections */ - if ((nm_connection_need_secrets (tmp, NULL) == NULL) && (request_new == FALSE)) { + if ( (req->flags & NM_SETTINGS_GET_SECRETS_FLAG_ONLY_SYSTEM) + || ((nm_connection_need_secrets (tmp, NULL) == NULL) && (request_new == FALSE))) { nm_log_dbg (LOGD_AGENTS, "(%p/%s) system settings secrets sufficient", req, req->setting_name); @@ -1059,7 +1123,8 @@ nm_agent_manager_get_secrets (NMAgentManager *self, g_hash_table_insert (priv->requests, GUINT_TO_POINTER (req->reqid), req); /* Kick off the request */ - request_add_agents (self, req); + if (!(req->flags & NM_SETTINGS_GET_SECRETS_FLAG_ONLY_SYSTEM)) + request_add_agents (self, req); req->idle_id = g_idle_add (get_start, req); return req->reqid; @@ -1277,6 +1342,24 @@ nm_agent_manager_delete_secrets (NMAgentManager *self, /*************************************************************/ +NMSecretAgent * +nm_agent_manager_get_agent_by_user (NMAgentManager *self, const char *username) +{ + NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (self); + GHashTableIter iter; + NMSecretAgent *agent; + + g_hash_table_iter_init (&iter, priv->agents); + while (g_hash_table_iter_next (&iter, NULL, (gpointer) &agent)) { + if (g_strcmp0 (nm_secret_agent_get_owner_username (agent), username) == 0) + return agent; + } + + return NULL; +} + +/*************************************************************/ + static void name_owner_changed_cb (NMDBusManager *dbus_mgr, const char *name, @@ -1290,6 +1373,73 @@ name_owner_changed_cb (NMDBusManager *dbus_mgr, } } +static void +agent_permissions_changed_done (NMAuthChain *chain, + GError *error, + DBusGMethodInvocation *context, + gpointer user_data) +{ + NMAgentManager *self = NM_AGENT_MANAGER (user_data); + NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (self); + NMSecretAgent *agent; + NMAuthCallResult result; + + priv->chains = g_slist_remove (priv->chains, chain); + + agent = nm_auth_chain_get_data (chain, "agent"); + + if (error) { + nm_log_dbg (LOGD_AGENTS, "(%s) failed to request updated agent permissions", + nm_secret_agent_get_description (agent)); + nm_secret_agent_add_permission (agent, NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED, FALSE); + nm_secret_agent_add_permission (agent, NM_AUTH_PERMISSION_WIFI_SHARE_OPEN, FALSE); + } else { + nm_log_dbg (LOGD_AGENTS, "(%s) updated agent permissions", + nm_secret_agent_get_description (agent)); + + result = nm_auth_chain_get_result (chain, NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED); + nm_secret_agent_add_permission (agent, + NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED, + (result == NM_AUTH_CALL_RESULT_YES)); + + result = nm_auth_chain_get_result (chain, NM_AUTH_PERMISSION_WIFI_SHARE_OPEN); + nm_secret_agent_add_permission (agent, + NM_AUTH_PERMISSION_WIFI_SHARE_OPEN, + (result == NM_AUTH_CALL_RESULT_YES)); + } + + nm_auth_chain_unref (chain); +} + +static void +authority_changed_cb (gpointer user_data) +{ + NMAgentManager *self = NM_AGENT_MANAGER (user_data); + NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (self); + GHashTableIter iter; + NMSecretAgent *agent; + + /* Recheck the permissions of all secret agents */ + g_hash_table_iter_init (&iter, priv->agents); + while (g_hash_table_iter_next (&iter, NULL, (gpointer) &agent)) { + NMAuthChain *chain; + const char *sender; + + /* Kick off permissions requests for this agent */ + sender = nm_secret_agent_get_dbus_owner (agent); + chain = nm_auth_chain_new_dbus_sender (sender, agent_permissions_changed_done, self); + + /* Make sure if the agent quits while the permissions call is in progress + * that the object sticks around until our callback. + */ + nm_auth_chain_set_data (chain, "agent", g_object_ref (agent), g_object_unref); + nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED, FALSE); + nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_WIFI_SHARE_OPEN, FALSE); + + priv->chains = g_slist_append (priv->chains, chain); + } +} + /*************************************************************/ NMAgentManager * @@ -1319,6 +1469,8 @@ nm_agent_manager_get (void) G_CALLBACK (name_owner_changed_cb), singleton); + nm_auth_changed_func_register (authority_changed_cb, singleton); + return singleton; } @@ -1342,6 +1494,10 @@ dispose (GObject *object) if (!priv->disposed) { priv->disposed = TRUE; + nm_auth_changed_func_unregister (authority_changed_cb, NM_AGENT_MANAGER (object)); + + g_slist_foreach (priv->chains, (GFunc) nm_auth_chain_unref, NULL); + g_hash_table_destroy (priv->agents); g_hash_table_destroy (priv->requests); @@ -1362,6 +1518,17 @@ nm_agent_manager_class_init (NMAgentManagerClass *agent_manager_class) /* virtual methods */ object_class->dispose = dispose; + /* Signals */ + signals[AGENT_REGISTERED] = + g_signal_new ("agent-registered", + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (NMAgentManagerClass, agent_registered), + NULL, NULL, + g_cclosure_marshal_VOID__OBJECT, + G_TYPE_NONE, 1, + G_TYPE_OBJECT); + dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (agent_manager_class), &dbus_glib_nm_agent_manager_object_info); diff --git a/src/settings/nm-agent-manager.h b/src/settings/nm-agent-manager.h index 788a9175..e49f579d 100644 --- a/src/settings/nm-agent-manager.h +++ b/src/settings/nm-agent-manager.h @@ -25,6 +25,7 @@ #include #include #include "nm-settings-flags.h" +#include "nm-secret-agent.h" #define NM_TYPE_AGENT_MANAGER (nm_agent_manager_get_type ()) #define NM_AGENT_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_AGENT_MANAGER, NMAgentManager)) @@ -39,6 +40,9 @@ typedef struct { typedef struct { GObjectClass parent; + + /* Signals */ + void (*agent_registered) (NMAgentManager *agent_mgr, NMSecretAgent *agent); } NMAgentManagerClass; GType nm_agent_manager_get_type (void); @@ -85,4 +89,7 @@ guint32 nm_agent_manager_delete_secrets (NMAgentManager *manager, gboolean filter_by_uid, gulong uid_filter); +NMSecretAgent *nm_agent_manager_get_agent_by_user (NMAgentManager *manager, + const char *username); + #endif /* NM_AGENT_MANAGER_H */ diff --git a/src/settings/nm-secret-agent.c b/src/settings/nm-secret-agent.c index 2b1156cb..94f046e5 100644 --- a/src/settings/nm-secret-agent.c +++ b/src/settings/nm-secret-agent.c @@ -20,6 +20,9 @@ #include +#include +#include + #include #include #include @@ -41,8 +44,11 @@ typedef struct { char *owner; char *identifier; uid_t owner_uid; + char *owner_username; guint32 hash; + GSList *permissions; + NMDBusManager *dbus_mgr; DBusGProxy *proxy; @@ -134,6 +140,15 @@ nm_secret_agent_get_owner_uid (NMSecretAgent *agent) return NM_SECRET_AGENT_GET_PRIVATE (agent)->owner_uid; } +const char * +nm_secret_agent_get_owner_username(NMSecretAgent *agent) +{ + g_return_val_if_fail (agent != NULL, NULL); + g_return_val_if_fail (NM_IS_SECRET_AGENT (agent), NULL); + + return NM_SECRET_AGENT_GET_PRIVATE (agent)->owner_username; +} + guint32 nm_secret_agent_get_hash (NMSecretAgent *agent) { @@ -143,6 +158,76 @@ nm_secret_agent_get_hash (NMSecretAgent *agent) return NM_SECRET_AGENT_GET_PRIVATE (agent)->hash; } +/** + * nm_secret_agent_add_permission: + * @agent: A #NMSecretAgent. + * @permission: The name of the permission + * + * Records whether or not the agent has a given permission. + */ +void +nm_secret_agent_add_permission (NMSecretAgent *agent, + const char *permission, + gboolean allowed) +{ + NMSecretAgentPrivate *priv; + GSList *iter; + + g_return_if_fail (agent != NULL); + g_return_if_fail (permission != NULL); + + priv = NM_SECRET_AGENT_GET_PRIVATE (agent); + + /* Check if the permission is already in the list */ + for (iter = priv->permissions; iter; iter = g_slist_next (iter)) { + if (g_strcmp0 (permission, iter->data) == 0) { + /* If the permission is no longer allowed, remove it from the + * list. If it is now allowed, do nothing since it's already + * in the list. + */ + if (allowed == FALSE) { + g_free (iter->data); + priv->permissions = g_slist_delete_link (priv->permissions, iter); + } + return; + } + } + + /* New permission that's allowed */ + if (allowed) + priv->permissions = g_slist_prepend (priv->permissions, g_strdup (permission)); +} + +/** + * nm_secret_agent_has_permission: + * @agent: A #NMSecretAgent. + * @permission: The name of the permission to check for + * + * Returns whether or not the agent has the given permission. + * + * Returns: %TRUE if the agent has the given permission, %FALSE if it does not + * or if the permission was not previous recorded with + * nm_secret_agent_add_permission(). + */ +gboolean +nm_secret_agent_has_permission (NMSecretAgent *agent, const char *permission) +{ + NMSecretAgentPrivate *priv; + GSList *iter; + + g_return_val_if_fail (agent != NULL, FALSE); + g_return_val_if_fail (permission != NULL, FALSE); + + priv = NM_SECRET_AGENT_GET_PRIVATE (agent); + + /* Check if the permission is already in the list */ + for (iter = priv->permissions; iter; iter = g_slist_next (iter)) { + if (g_strcmp0 (permission, iter->data) == 0) + return TRUE; + } + return FALSE; +} + /*************************************************************/ static void @@ -189,6 +274,9 @@ nm_secret_agent_get_secrets (NMSecretAgent *self, hash = nm_connection_to_hash (connection, NM_SETTING_HASH_FLAG_ALL); + /* Mask off the private ONLY_SYSTEM flag if present */ + flags &= ~NM_SETTINGS_GET_SECRETS_FLAG_ONLY_SYSTEM; + r = request_new (self, nm_connection_get_path (connection), setting_name, callback, callback_data); r->call = dbus_g_proxy_begin_call_with_timeout (priv->proxy, "GetSecrets", @@ -327,11 +415,17 @@ nm_secret_agent_new (NMDBusManager *dbus_mgr, NMSecretAgent *self; NMSecretAgentPrivate *priv; DBusGConnection *bus; - char *hash_str; + char *hash_str, *username; + struct passwd *pw; g_return_val_if_fail (owner != NULL, NULL); g_return_val_if_fail (identifier != NULL, NULL); + pw = getpwuid (owner_uid); + g_return_val_if_fail (pw != NULL, NULL); + g_return_val_if_fail (pw->pw_name[0] != '\0', NULL); + username = g_strdup (pw->pw_name); + self = (NMSecretAgent *) g_object_new (NM_TYPE_SECRET_AGENT, NULL); if (self) { priv = NM_SECRET_AGENT_GET_PRIVATE (self); @@ -339,6 +433,7 @@ nm_secret_agent_new (NMDBusManager *dbus_mgr, priv->owner = g_strdup (owner); priv->identifier = g_strdup (identifier); priv->owner_uid = owner_uid; + priv->owner_username = g_strdup (username); hash_str = g_strdup_printf ("%08u%s", owner_uid, identifier); priv->hash = g_str_hash (hash_str); @@ -353,6 +448,7 @@ nm_secret_agent_new (NMDBusManager *dbus_mgr, g_assert (priv->proxy); } + g_free (username); return self; } @@ -376,6 +472,10 @@ dispose (GObject *object) g_free (priv->description); g_free (priv->owner); g_free (priv->identifier); + g_free (priv->owner_username); + + g_slist_foreach (priv->permissions, (GFunc) g_free, NULL); + g_slist_free (priv->permissions); g_hash_table_destroy (priv->requests); g_object_unref (priv->proxy); diff --git a/src/settings/nm-secret-agent.h b/src/settings/nm-secret-agent.h index 597940b4..29b02be1 100644 --- a/src/settings/nm-secret-agent.h +++ b/src/settings/nm-secret-agent.h @@ -60,8 +60,17 @@ const char *nm_secret_agent_get_identifier (NMSecretAgent *agent); uid_t nm_secret_agent_get_owner_uid (NMSecretAgent *agent); +const char *nm_secret_agent_get_owner_username (NMSecretAgent *agent); + guint32 nm_secret_agent_get_hash (NMSecretAgent *agent); +void nm_secret_agent_add_permission (NMSecretAgent *agent, + const char *permission, + gboolean allowed); + +gboolean nm_secret_agent_has_permission (NMSecretAgent *agent, + const char *permission); + typedef void (*NMSecretAgentCallback) (NMSecretAgent *agent, gconstpointer call, GHashTable *new_secrets, /* NULL for save & delete */ diff --git a/src/settings/nm-settings-connection.c b/src/settings/nm-settings-connection.c index 60de6b06..4b3a56cd 100644 --- a/src/settings/nm-settings-connection.c +++ b/src/settings/nm-settings-connection.c @@ -22,6 +22,7 @@ #include "config.h" #include +#include #include #include @@ -38,8 +39,10 @@ #include "nm-manager-auth.h" #include "nm-marshal.h" #include "nm-agent-manager.h" +#include "NetworkManagerUtils.h" #define SETTINGS_TIMESTAMPS_FILE LOCALSTATEDIR"/lib/NetworkManager/timestamps" +#define SETTINGS_SEEN_BSSIDS_FILE LOCALSTATEDIR"/lib/NetworkManager/seen-bssids" static void impl_settings_connection_get_settings (NMSettingsConnection *connection, DBusGMethodInvocation *context); @@ -91,7 +94,8 @@ typedef struct { NMSessionMonitor *session_monitor; guint session_changed_id; - guint64 timestamp; /* Up-to-date timestamp of connection use */ + guint64 timestamp; /* Up-to-date timestamp of connection use */ + GHashTable *seen_bssids; /* Up-to-date BSSIDs that's been seen for the connection */ } NMSettingsConnectionPrivate; /**************************************************************/ @@ -238,6 +242,58 @@ session_changed_cb (NMSessionMonitor *self, gpointer user_data) /**************************************************************/ +/* Return TRUE if any active user in the connection's ACL has the given + * permission without having to authorize for it via PolicyKit. Connections + * visible to everyone automatically pass the check. + */ +gboolean +nm_settings_connection_check_permission (NMSettingsConnection *self, + const char *permission) +{ + NMSettingsConnectionPrivate *priv; + NMSettingConnection *s_con; + guint32 num, i; + const char *puser; + + g_return_val_if_fail (self != NULL, FALSE); + g_return_val_if_fail (NM_IS_SETTINGS_CONNECTION (self), FALSE); + + priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self); + + if (priv->visible == FALSE) + return FALSE; + + s_con = nm_connection_get_setting_connection (NM_CONNECTION (self)); + g_assert (s_con); + + /* Check every user in the ACL for a session */ + num = nm_setting_connection_get_num_permissions (s_con); + if (num == 0) { + /* Visible to all so it's OK to auto-activate */ + return TRUE; + } + + for (i = 0; i < num; i++) { + /* For each user get their secret agent and check if that agent has the + * required permission. + * + * FIXME: what if the user isn't running an agent? PolKit needs a bus + * name or a PID but if the user isn't running an agent they won't have + * either. + */ + if (nm_setting_connection_get_permission (s_con, i, NULL, &puser, NULL)) { + NMSecretAgent *agent = nm_agent_manager_get_agent_by_user (priv->agent_mgr, puser); + + if (agent && nm_secret_agent_has_permission (agent, permission)) + return TRUE; + } + } + + return FALSE; +} + +/**************************************************************/ + static void only_system_secrets_cb (NMSetting *setting, const char *key, @@ -326,25 +382,14 @@ nm_settings_connection_replace_settings (NMSettingsConnection *self, 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); - } - } + if (transient_secrets) + nm_connection_update_secrets (NM_CONNECTION (self), NULL, transient_secrets, NULL); nm_settings_connection_recheck_visibility (self); success = TRUE; @@ -455,12 +500,20 @@ commit_changes (NMSettingsConnection *connection, } static void -remove_timestamp_from_db (NMSettingsConnection *connection) +remove_entry_from_db (NMSettingsConnection *connection, const char* db_name) { - GKeyFile *timestamps_file; + GKeyFile *key_file; + const char *db_file; - timestamps_file = g_key_file_new (); - if (g_key_file_load_from_file (timestamps_file, SETTINGS_TIMESTAMPS_FILE, G_KEY_FILE_KEEP_COMMENTS, NULL)) { + if (strcmp (db_name, "timestamps") == 0) + db_file = SETTINGS_TIMESTAMPS_FILE; + else if (strcmp (db_name, "seen-bssids") == 0) + db_file = SETTINGS_SEEN_BSSIDS_FILE; + else + return; + + key_file = g_key_file_new (); + if (g_key_file_load_from_file (key_file, db_file, G_KEY_FILE_KEEP_COMMENTS, NULL)) { const char *connection_uuid; char *data; gsize len; @@ -468,18 +521,18 @@ remove_timestamp_from_db (NMSettingsConnection *connection) connection_uuid = nm_connection_get_uuid (NM_CONNECTION (connection)); - g_key_file_remove_key (timestamps_file, "timestamps", connection_uuid, NULL); - data = g_key_file_to_data (timestamps_file, &len, &error); + g_key_file_remove_key (key_file, db_name, connection_uuid, NULL); + data = g_key_file_to_data (key_file, &len, &error); if (data) { - g_file_set_contents (SETTINGS_TIMESTAMPS_FILE, data, len, &error); + g_file_set_contents (db_file, data, len, &error); g_free (data); } if (error) { - nm_log_warn (LOGD_SETTINGS, "error writing timestamps file '%s': %s", SETTINGS_TIMESTAMPS_FILE, error->message); + nm_log_warn (LOGD_SETTINGS, "error writing %s file '%s': %s", db_name, db_file, error->message); g_error_free (error); } } - g_key_file_free (timestamps_file); + g_key_file_free (key_file); } static void @@ -499,7 +552,10 @@ do_delete (NMSettingsConnection *connection, nm_agent_manager_delete_secrets (priv->agent_mgr, for_agents, FALSE, 0); /* Remove timestamp from timestamps database file */ - remove_timestamp_from_db (connection); + remove_entry_from_db (connection, "timestamps"); + + /* Remove connection from seen-bssids database file */ + remove_entry_from_db (connection, "seen-bssids"); /* Signal the connection is removed and deleted */ g_signal_emit (connection, signals[REMOVED], 0); @@ -980,21 +1036,21 @@ check_writable (NMConnection *connection, GError **error) static void get_settings_auth_cb (NMSettingsConnection *self, - DBusGMethodInvocation *context, - gulong sender_uid, - GError *error, - gpointer data) + DBusGMethodInvocation *context, + gulong sender_uid, + GError *error, + gpointer data) { if (error) dbus_g_method_return_error (context, error); else { GHashTable *settings; - NMConnection *dupl_con; + NMConnection *dupl_con; NMSettingConnection *s_con; guint64 timestamp; - dupl_con = nm_connection_duplicate (NM_CONNECTION (self)); - g_assert (dupl_con); + dupl_con = nm_connection_duplicate (NM_CONNECTION (self)); + g_assert (dupl_con); /* Timestamp is not updated in connection's 'timestamp' property, * because it would force updating the connection and in turn @@ -1004,7 +1060,7 @@ get_settings_auth_cb (NMSettingsConnection *self, */ timestamp = nm_settings_connection_get_timestamp (self); if (timestamp) { - s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (NM_CONNECTION (dupl_con), NM_TYPE_SETTING_CONNECTION)); + s_con = nm_connection_get_setting_connection (NM_CONNECTION (dupl_con)); g_assert (s_con); g_object_set (s_con, NM_SETTING_CONNECTION_TIMESTAMP, timestamp, NULL); } @@ -1017,7 +1073,7 @@ get_settings_auth_cb (NMSettingsConnection *self, g_assert (settings); dbus_g_method_return (context, settings); g_hash_table_destroy (settings); - g_object_unref (dupl_con); + g_object_unref (dupl_con); } } @@ -1042,31 +1098,30 @@ con_update_cb (NMSettingsConnection *connection, } static void -only_agent_secrets_cb (NMSetting *setting, - const char *key, - const GValue *value, - GParamFlags flags, - gpointer user_data) +secrets_filter_cb (NMSetting *setting, + const char *key, + const GValue *value, + GParamFlags flags, + gpointer user_data) { - if (flags & NM_SETTING_PARAM_SECRET) { - NMSettingSecretFlags secret_flags = NM_SETTING_SECRET_FLAG_NONE; + NMSettingSecretFlags filter_flags = GPOINTER_TO_UINT (user_data); + NMSettingSecretFlags secret_flags = NM_SETTING_SECRET_FLAG_NONE; + const char *secret_name = NULL; + GHashTableIter iter; - /* Clear out system-owned or always-ask secrets */ + if (flags & NM_SETTING_PARAM_SECRET) { if (NM_IS_SETTING_VPN (setting) && !strcmp (key, NM_SETTING_VPN_SECRETS)) { - GHashTableIter iter; - const char *secret_name = NULL; - /* 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)) { + while (g_hash_table_iter_next (&iter, (gpointer) &secret_name, NULL)) { 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) + if (!(secret_flags & filter_flags)) nm_setting_vpn_remove_secret (NM_SETTING_VPN (setting), secret_name); } } else { nm_setting_get_secret_flags (setting, key, &secret_flags, NULL); - if (secret_flags != NM_SETTING_SECRET_FLAG_AGENT_OWNED) + if (!(secret_flags & filter_flags)) g_object_set (G_OBJECT (setting), key, NULL, NULL); } } @@ -1081,23 +1136,52 @@ update_auth_cb (NMSettingsConnection *self, { NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self); NMConnection *new_settings = data; - NMConnection *for_agent; + NMConnection *for_agent, *dup; + NMSettingSecretFlags filter_flags; + GHashTable *hash; + GError *local = NULL; if (error) dbus_g_method_return_error (context, error); else { + /* Cache the new secrets since they may get overwritten by the replace + * when transient secrets are copied back. + */ + dup = nm_connection_duplicate (new_settings); + /* Update and commit our settings. */ nm_settings_connection_replace_and_commit (self, new_settings, con_update_cb, context); + /* Copy new agent secrets back to the connection */ + filter_flags = NM_SETTING_SECRET_FLAG_AGENT_OWNED | NM_SETTING_SECRET_FLAG_NOT_SAVED; + nm_connection_for_each_setting_value (dup, + secrets_filter_cb, + GUINT_TO_POINTER (filter_flags)); + hash = nm_connection_to_hash (dup, NM_SETTING_HASH_FLAG_ONLY_SECRETS); + g_object_unref (dup); + + if (hash) { + if (!nm_connection_update_secrets (NM_CONNECTION (self), NULL, hash, &local)) { + nm_log_warn (LOGD_SETTINGS, "Failed to update connection secrets: (%d) %s", + local ? local->code : -1, + local && local->message ? local->message : "(unknown)"); + g_clear_error (&local); + } + g_hash_table_destroy (hash); + } + /* Dupe the connection and clear out non-agent-owned secrets so we can * send the agent-owned ones to agents to be saved. Only send them to * agents of the same UID as the Update() request sender. */ for_agent = nm_connection_duplicate (NM_CONNECTION (self)); - nm_connection_for_each_setting_value (for_agent, only_agent_secrets_cb, NULL); + filter_flags = NM_SETTING_SECRET_FLAG_AGENT_OWNED; + nm_connection_for_each_setting_value (for_agent, + secrets_filter_cb, + GUINT_TO_POINTER (filter_flags)); nm_agent_manager_save_secrets (priv->agent_mgr, for_agent, TRUE, sender_uid); g_object_unref (for_agent); } @@ -1272,6 +1356,8 @@ dbus_get_agent_secrets_cb (NMSettingsConnection *self, update_secrets_cache (self); hash = nm_connection_to_hash (NM_CONNECTION (self), NM_SETTING_HASH_FLAG_ONLY_SECRETS); + if (!hash) + hash = g_hash_table_new (NULL, NULL); dbus_g_method_return (context, hash); g_hash_table_destroy (hash); } @@ -1440,6 +1526,181 @@ nm_settings_connection_read_and_fill_timestamp (NMSettingsConnection *connection g_key_file_free (timestamps_file); } +static guint +mac_hash (gconstpointer v) +{ + const guint8 *p = v; + guint32 i, h = 5381; + + for (i = 0; i < ETH_ALEN; i++) + h = (h << 5) + h + p[i]; + return h; +} + +static gboolean +mac_equal (gconstpointer a, gconstpointer b) +{ + return memcmp (a, b, ETH_ALEN) == 0; +} + +static guint8 * +mac_dup (const struct ether_addr *old) +{ + guint8 *new; + + g_return_val_if_fail (old != NULL, NULL); + + new = g_malloc0 (ETH_ALEN); + memcpy (new, old, ETH_ALEN); + return new; +} + +/** + * nm_settings_connection_has_seen_bssid: + * @connection: the #NMSettingsConnection + * @bssid: the BSSID to check the seen BSSID list for + * + * Returns: TRUE if the given @bssid is in the seen BSSIDs list + **/ +gboolean +nm_settings_connection_has_seen_bssid (NMSettingsConnection *connection, + const struct ether_addr *bssid) +{ + g_return_val_if_fail (connection != NULL, FALSE); + g_return_val_if_fail (NM_IS_SETTINGS_CONNECTION (connection), FALSE); + g_return_val_if_fail (bssid != NULL, FALSE); + + return !!g_hash_table_lookup (NM_SETTINGS_CONNECTION_GET_PRIVATE (connection)->seen_bssids, bssid); +} + +/** + * nm_settings_connection_add_seen_bssid: + * @connection: the #NMSettingsConnection + * @seen_bssid: BSSID to set into the connection and to store into + * the seen-bssids database + * + * Updates the connection and seen-bssids database with the provided BSSID. + **/ +void +nm_settings_connection_add_seen_bssid (NMSettingsConnection *connection, + const struct ether_addr *seen_bssid) +{ + NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (connection); + const char *connection_uuid; + GKeyFile *seen_bssids_file; + char *data, *bssid_str; + const char **list; + gsize len; + GError *error = NULL; + GHashTableIter iter; + guint n; + + g_return_if_fail (seen_bssid != NULL); + + if (g_hash_table_lookup (priv->seen_bssids, seen_bssid)) + return; /* Already in the list */ + + /* Add the new BSSID; let the hash take ownership of the allocated BSSID string */ + bssid_str = nm_ether_ntop (seen_bssid); + g_return_if_fail (bssid_str != NULL); + g_hash_table_insert (priv->seen_bssids, mac_dup (seen_bssid), bssid_str); + + /* Build up a list of all the BSSIDs in string form */ + n = 0; + list = g_malloc0 (g_hash_table_size (priv->seen_bssids) * sizeof (char *)); + g_hash_table_iter_init (&iter, priv->seen_bssids); + while (g_hash_table_iter_next (&iter, NULL, (gpointer) &bssid_str)) + list[n++] = bssid_str; + + /* Save BSSID to seen-bssids file */ + seen_bssids_file = g_key_file_new (); + g_key_file_set_list_separator (seen_bssids_file, ','); + if (!g_key_file_load_from_file (seen_bssids_file, SETTINGS_SEEN_BSSIDS_FILE, G_KEY_FILE_KEEP_COMMENTS, &error)) { + if (!g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_NOENT)) { + nm_log_warn (LOGD_SETTINGS, "error parsing seen-bssids file '%s': %s", + SETTINGS_SEEN_BSSIDS_FILE, error->message); + } + g_clear_error (&error); + } + + connection_uuid = nm_connection_get_uuid (NM_CONNECTION (connection)); + g_key_file_set_string_list (seen_bssids_file, "seen-bssids", connection_uuid, list, n); + g_free (list); + + data = g_key_file_to_data (seen_bssids_file, &len, &error); + if (data) { + g_file_set_contents (SETTINGS_SEEN_BSSIDS_FILE, data, len, &error); + g_free (data); + } + g_key_file_free (seen_bssids_file); + + if (error) { + nm_log_warn (LOGD_SETTINGS, "error saving seen-bssids to file '%s': %s", + SETTINGS_SEEN_BSSIDS_FILE, error->message); + g_error_free (error); + } +} + +static void +add_seen_bssid_string (NMSettingsConnection *self, const char *bssid) +{ + struct ether_addr mac; + + g_return_if_fail (bssid != NULL); + if (ether_aton_r (bssid, &mac)) { + g_hash_table_insert (NM_SETTINGS_CONNECTION_GET_PRIVATE (self)->seen_bssids, + mac_dup (&mac), + g_strdup (bssid)); + } +} + +/** + * nm_settings_connection_read_and_fill_seen_bssids: + * @connection: the #NMSettingsConnection + * + * Retrieves seen BSSIDs of the connection from database file and stores then into the + * connection private data. + **/ +void +nm_settings_connection_read_and_fill_seen_bssids (NMSettingsConnection *connection) +{ + NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (connection); + const char *connection_uuid; + GKeyFile *seen_bssids_file; + char **tmp_strv = NULL; + gsize i, len = 0; + NMSettingWireless *s_wifi; + + /* Get seen BSSIDs from database file */ + seen_bssids_file = g_key_file_new (); + g_key_file_set_list_separator (seen_bssids_file, ','); + if (g_key_file_load_from_file (seen_bssids_file, SETTINGS_SEEN_BSSIDS_FILE, G_KEY_FILE_KEEP_COMMENTS, NULL)) { + connection_uuid = nm_connection_get_uuid (NM_CONNECTION (connection)); + tmp_strv = g_key_file_get_string_list (seen_bssids_file, "seen-bssids", connection_uuid, &len, NULL); + } + g_key_file_free (seen_bssids_file); + + /* Update connection's seen-bssids */ + if (tmp_strv) { + g_hash_table_remove_all (priv->seen_bssids); + for (i = 0; i < len; i++) + add_seen_bssid_string (connection, tmp_strv[i]); + g_strfreev (tmp_strv); + } else { + /* If this connection didn't have an entry in the seen-bssids database, + * maybe this is the first time we've read it in, so populate the + * seen-bssids list from the deprecated seen-bssids property of the + * wifi setting. + */ + s_wifi = nm_connection_get_setting_wireless (NM_CONNECTION (connection)); + if (s_wifi) { + len = nm_setting_wireless_get_num_seen_bssids (s_wifi); + for (i = 0; i < len; i++) + add_seen_bssid_string (connection, nm_setting_wireless_get_seen_bssid (s_wifi, i)); + } + } +} + /**************************************************************/ static void @@ -1463,6 +1724,8 @@ nm_settings_connection_init (NMSettingsConnection *self) self); priv->agent_mgr = nm_agent_manager_get (); + + priv->seen_bssids = g_hash_table_new_full (mac_hash, mac_equal, g_free, g_free); } static void @@ -1490,6 +1753,8 @@ dispose (GObject *object) nm_agent_manager_cancel_secrets (priv->agent_mgr, GPOINTER_TO_UINT (iter->data)); g_slist_free (priv->reqs); + g_hash_table_destroy (priv->seen_bssids); + set_visible (self, FALSE); if (priv->session_changed_id) diff --git a/src/settings/nm-settings-connection.h b/src/settings/nm-settings-connection.h index 116bfdcc..bc9e3c47 100644 --- a/src/settings/nm-settings-connection.h +++ b/src/settings/nm-settings-connection.h @@ -24,6 +24,7 @@ #include #include "nm-settings-flags.h" +#include G_BEGIN_DECLS @@ -116,6 +117,9 @@ gboolean nm_settings_connection_is_visible (NMSettingsConnection *self); void nm_settings_connection_recheck_visibility (NMSettingsConnection *self); +gboolean nm_settings_connection_check_permission (NMSettingsConnection *self, + const char *permission); + void nm_settings_connection_signal_remove (NMSettingsConnection *self); guint64 nm_settings_connection_get_timestamp (NMSettingsConnection *connection); @@ -124,6 +128,14 @@ void nm_settings_connection_update_timestamp (NMSettingsConnection *connection, void nm_settings_connection_read_and_fill_timestamp (NMSettingsConnection *connection); +gboolean nm_settings_connection_has_seen_bssid (NMSettingsConnection *connection, + const struct ether_addr *bssid); + +void nm_settings_connection_add_seen_bssid (NMSettingsConnection *connection, + const struct ether_addr *seen_bssid); + +void nm_settings_connection_read_and_fill_seen_bssids (NMSettingsConnection *connection); + G_END_DECLS #endif /* NM_SETTINGS_CONNECTION_H */ diff --git a/src/settings/nm-settings.c b/src/settings/nm-settings.c index e23e8d13..733e9145 100644 --- a/src/settings/nm-settings.c +++ b/src/settings/nm-settings.c @@ -135,6 +135,7 @@ enum { CONNECTION_REMOVED, CONNECTION_VISIBILITY_CHANGED, CONNECTIONS_LOADED, + AGENT_REGISTERED, NEW_CONNECTION, /* exported, not used internally */ LAST_SIGNAL @@ -699,6 +700,18 @@ connection_visibility_changed (NMSettingsConnection *connection, connection); } +static void +secret_agent_registered (NMAgentManager *agent_mgr, + NMSecretAgent *agent, + gpointer user_data) +{ + /* Re-emit for listeners like NMPolicy */ + g_signal_emit (NM_SETTINGS (user_data), + signals[AGENT_REGISTERED], + 0, + agent); +} + #define NM_DBUS_SERVICE_OPENCONNECT "org.freedesktop.NetworkManager.openconnect" #define NM_OPENCONNECT_KEY_GATEWAY "gateway" #define NM_OPENCONNECT_KEY_COOKIE "cookie" @@ -773,6 +786,9 @@ claim_connection (NMSettings *self, /* Read timestamp from look-aside file and put it into the connection's data */ nm_settings_connection_read_and_fill_timestamp (connection); + /* Read seen-bssids from look-aside file and put it into the connection's data */ + nm_settings_connection_read_and_fill_seen_bssids (connection); + /* Ensure it's initial visibility is up-to-date */ nm_settings_connection_recheck_visibility (connection); @@ -1527,6 +1543,8 @@ nm_settings_init (NMSettings *self) * recreated often. */ priv->agent_mgr = nm_agent_manager_get (); + + g_signal_connect (priv->agent_mgr, "agent-registered", G_CALLBACK (secret_agent_registered), self); } static void @@ -1690,6 +1708,16 @@ nm_settings_class_init (NMSettingsClass *class) g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); + signals[AGENT_REGISTERED] = + g_signal_new (NM_SETTINGS_SIGNAL_AGENT_REGISTERED, + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (NMSettingsClass, agent_registered), + NULL, NULL, + g_cclosure_marshal_VOID__OBJECT, + G_TYPE_NONE, 1, G_TYPE_OBJECT); + + signals[NEW_CONNECTION] = g_signal_new ("new-connection", G_OBJECT_CLASS_TYPE (object_class), diff --git a/src/settings/nm-settings.h b/src/settings/nm-settings.h index a5cb4d7c..66d41cce 100644 --- a/src/settings/nm-settings.h +++ b/src/settings/nm-settings.h @@ -19,7 +19,7 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * - * (C) Copyright 2007 - 2010 Red Hat, Inc. + * (C) Copyright 2007 - 2011 Red Hat, Inc. * (C) Copyright 2008 Novell, Inc. */ @@ -31,6 +31,7 @@ #include "nm-settings-connection.h" #include "nm-system-config-interface.h" #include "nm-device.h" +#include "nm-secret-agent.h" #define NM_TYPE_SETTINGS (nm_settings_get_type ()) #define NM_SETTINGS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTINGS, NMSettings)) @@ -48,6 +49,7 @@ #define NM_SETTINGS_SIGNAL_CONNECTION_REMOVED "connection-removed" #define NM_SETTINGS_SIGNAL_CONNECTION_VISIBILITY_CHANGED "connection-visibility-changed" #define NM_SETTINGS_SIGNAL_CONNECTIONS_LOADED "connections-loaded" +#define NM_SETTINGS_SIGNAL_AGENT_REGISTERED "agent-registered" typedef struct { GObject parent_instance; @@ -68,6 +70,8 @@ typedef struct { void (*connection_visibility_changed) (NMSettings *self, NMSettingsConnection *connection); void (*connections_loaded) (NMSettings *self); + + void (*agent_registered) (NMSettings *self, NMSecretAgent *agent); } NMSettingsClass; GType nm_settings_get_type (void); diff --git a/src/settings/plugins/ifcfg-rh/nm-ifcfg-connection.c b/src/settings/plugins/ifcfg-rh/nm-ifcfg-connection.c index 433f933b..04d3d3e4 100644 --- a/src/settings/plugins/ifcfg-rh/nm-ifcfg-connection.c +++ b/src/settings/plugins/ifcfg-rh/nm-ifcfg-connection.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) 2008 - 2010 Red Hat, Inc. + * Copyright (C) 2008 - 2011 Red Hat, Inc. */ #include @@ -181,12 +181,13 @@ nm_ifcfg_connection_get_unmanaged_spec (NMIfcfgConnection *self) static void commit_changes (NMSettingsConnection *connection, NMSettingsConnectionCommitFunc callback, - gpointer user_data) + gpointer user_data) { NMIfcfgConnectionPrivate *priv = NM_IFCFG_CONNECTION_GET_PRIVATE (connection); GError *error = NULL; NMConnection *reread; char *unmanaged = NULL, *keyfile = NULL, *routefile = NULL, *route6file = NULL; + gboolean same = FALSE; /* To ensure we don't rewrite files that are only changed from other * processes on-disk, read the existing connection back in and only rewrite @@ -200,28 +201,36 @@ commit_changes (NMSettingsConnection *connection, g_free (routefile); g_free (route6file); - if (reread && nm_connection_compare (NM_CONNECTION (connection), - reread, - NM_SETTING_COMPARE_FLAG_EXACT)) - goto out; + if (reread) { + same = nm_connection_compare (NM_CONNECTION (connection), + reread, + NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS | + NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS); + g_object_unref (reread); - if (!writer_update_connection (NM_CONNECTION (connection), - IFCFG_DIR, - priv->path, - priv->keyfile, - &error)) { + /* Don't bother writing anything out if in-memory and on-disk data are the same */ + if (same) { + /* But chain up to parent to handle success - emits updated signal */ + NM_SETTINGS_CONNECTION_CLASS (nm_ifcfg_connection_parent_class)->commit_changes (connection, callback, user_data); + return; + } + } + + if (writer_update_connection (NM_CONNECTION (connection), + IFCFG_DIR, + priv->path, + priv->keyfile, + &error)) { + /* Chain up to parent to handle success */ + NM_SETTINGS_CONNECTION_CLASS (nm_ifcfg_connection_parent_class)->commit_changes (connection, callback, user_data); + } else { + /* Otherwise immediate error */ callback (connection, error, user_data); g_error_free (error); - return; } - -out: - if (reread) - g_object_unref (reread); - NM_SETTINGS_CONNECTION_CLASS (nm_ifcfg_connection_parent_class)->commit_changes (connection, callback, user_data); } -static void +static void do_delete (NMSettingsConnection *connection, NMSettingsConnectionDeleteFunc callback, gpointer user_data) diff --git a/src/settings/plugins/ifcfg-rh/plugin.c b/src/settings/plugins/ifcfg-rh/plugin.c index 7915c467..ed0dceca 100644 --- a/src/settings/plugins/ifcfg-rh/plugin.c +++ b/src/settings/plugins/ifcfg-rh/plugin.c @@ -269,19 +269,24 @@ connection_new_or_changed (SCPluginIfcfg *self, /* Successfully read connection changes */ - /* When the connections are the same, nothing is done */ - if (nm_connection_compare (NM_CONNECTION (existing), - NM_CONNECTION (new), - NM_SETTING_COMPARE_FLAG_EXACT)) { + old_unmanaged = nm_ifcfg_connection_get_unmanaged_spec (NM_IFCFG_CONNECTION (existing)); + new_unmanaged = nm_ifcfg_connection_get_unmanaged_spec (NM_IFCFG_CONNECTION (new)); + + /* When interface is unmanaged or the connections and unmanaged specs are the same + * there's nothing to do */ + if ( (g_strcmp0 (old_unmanaged, new_unmanaged) == 0 && new_unmanaged != NULL) + || ( nm_connection_compare (NM_CONNECTION (existing), + NM_CONNECTION (new), + NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS | + NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS) + && g_strcmp0 (old_unmanaged, new_unmanaged) == 0)) { + g_object_unref (new); return; } PLUGIN_PRINT (IFCFG_PLUGIN_NAME, "updating %s", path); - old_unmanaged = nm_ifcfg_connection_get_unmanaged_spec (NM_IFCFG_CONNECTION (existing)); - new_unmanaged = nm_ifcfg_connection_get_unmanaged_spec (NM_IFCFG_CONNECTION (new)); - if (new_unmanaged) { if (!old_unmanaged) { /* Unexport the connection by telling the settings service it's @@ -289,6 +294,11 @@ connection_new_or_changed (SCPluginIfcfg *self, * unmanaged specs have changed. */ nm_settings_connection_signal_remove (NM_SETTINGS_CONNECTION (existing)); + /* Remove the path so that claim_connection() doesn't complain later when + * interface gets managed and connection is re-added. */ + nm_connection_set_path (NM_CONNECTION (existing), NULL); + + g_object_set (existing, NM_IFCFG_CONNECTION_UNMANAGED, new_unmanaged, NULL); g_signal_emit_by_name (self, NM_SYSTEM_CONFIG_INTERFACE_UNMANAGED_SPECS_CHANGED); } } else { diff --git a/src/settings/plugins/ifcfg-rh/reader.c b/src/settings/plugins/ifcfg-rh/reader.c index a6f9ca85..cdf5889e 100644 --- a/src/settings/plugins/ifcfg-rh/reader.c +++ b/src/settings/plugins/ifcfg-rh/reader.c @@ -176,9 +176,9 @@ read_mac_address (shvarFile *ifcfg, const char *key, GByteArray **array, GError mac = ether_aton (value); if (!mac) { - g_free (value); g_set_error (error, IFCFG_PLUGIN_ERROR, 0, "%s: the MAC address '%s' was invalid.", key, value); + g_free (value); return FALSE; } @@ -574,7 +574,8 @@ read_full_ip4_address (shvarFile *ifcfg, if (!nm_ip4_address_get_prefix (addr)) { if (!read_ip4_address (ifcfg, netmask_tag, &tmp, error)) goto error; - nm_ip4_address_set_prefix (addr, nm_utils_ip4_netmask_to_prefix (tmp)); + if (tmp) + nm_ip4_address_set_prefix (addr, nm_utils_ip4_netmask_to_prefix (tmp)); } /* Try to autodetermine the prefix for the address' class */ @@ -661,7 +662,8 @@ read_one_ip4_route (shvarFile *ifcfg, /* Prefix */ if (!read_ip4_address (ifcfg, netmask_tag, &tmp, error)) goto out; - nm_ip4_route_set_prefix (route, nm_utils_ip4_netmask_to_prefix (tmp)); + if (tmp) + nm_ip4_route_set_prefix (route, nm_utils_ip4_netmask_to_prefix (tmp)); /* Validate the prefix */ if ( !nm_ip4_route_get_prefix (route) @@ -788,7 +790,7 @@ read_route_file_legacy (const char *filename, NMSettingIP4Config *s_ip4, GError if (prefix) { errno = 0; prefix_int = strtol (prefix, NULL, 10); - if (errno || prefix_int < 0 || prefix_int > 32) { + if (errno || prefix_int <= 0 || prefix_int > 32) { g_set_error (error, IFCFG_PLUGIN_ERROR, 0, "Invalid IP4 route destination prefix '%s'", prefix); g_free (prefix); @@ -973,9 +975,9 @@ read_route6_file (const char *filename, NMSettingIP6Config *s_ip6, GError **erro const char *pattern_empty = "^\\s*(\\#.*)?$"; const char *pattern_to1 = "^\\s*(" IPV6_ADDR_REGEX "|default)" /* IPv6 or 'default' keyword */ - "(?:/(\\d{1,2}))?"; /* optional prefix */ + "(?:/(\\d{1,3}))?"; /* optional prefix */ const char *pattern_to2 = "to\\s+(" IPV6_ADDR_REGEX "|default)" /* IPv6 or 'default' keyword */ - "(?:/(\\d{1,2}))?"; /* optional prefix */ + "(?:/(\\d{1,3}))?"; /* optional prefix */ const char *pattern_via = "via\\s+(" IPV6_ADDR_REGEX ")"; /* IPv6 of gateway */ const char *pattern_metric = "metric\\s+(\\d+)"; /* metric */ @@ -1041,7 +1043,7 @@ read_route6_file (const char *filename, NMSettingIP6Config *s_ip6, GError **erro if (prefix) { errno = 0; prefix_int = strtol (prefix, NULL, 10); - if (errno || prefix_int < 0 || prefix_int > 128) { + if (errno || prefix_int <= 0 || prefix_int > 128) { g_set_error (error, IFCFG_PLUGIN_ERROR, 0, "Invalid IP6 route destination prefix '%s'", prefix); g_free (prefix); @@ -1228,15 +1230,11 @@ make_ip4_setting (shvarFile *ifcfg, && !tmp_ip4_0 && !tmp_prefix_0 && !tmp_netmask_0 && !tmp_ip4_1 && !tmp_prefix_1 && !tmp_netmask_1 && !tmp_ip4_2 && !tmp_prefix_2 && !tmp_netmask_2) { - if (valid_ip6_config) { + if (valid_ip6_config) /* Nope, no IPv4 */ - g_object_set (s_ip4, - NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_DISABLED, - NULL); - return NM_SETTING (s_ip4); - } - - method = NM_SETTING_IP4_CONFIG_METHOD_AUTO; + method = NM_SETTING_IP4_CONFIG_METHOD_DISABLED; + else + method = NM_SETTING_IP4_CONFIG_METHOD_AUTO; } g_free (tmp_ip4); g_free (tmp_prefix); @@ -1260,6 +1258,9 @@ make_ip4_setting (shvarFile *ifcfg, NM_SETTING_IP4_CONFIG_MAY_FAIL, !svTrueValue (ifcfg, "IPV4_FAILURE_FATAL", TRUE), NULL); + if (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED) == 0) + return NM_SETTING (s_ip4); + /* Handle manual settings */ if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_MANUAL)) { NMIP4Address *addr; @@ -1418,7 +1419,7 @@ make_ip6_setting (shvarFile *ifcfg, char *value = NULL; char *str_value; char *route6_path = NULL; - gboolean bool_value, ipv6forwarding, ipv6_autoconf, dhcp6 = FALSE; + gboolean ipv6init, ipv6forwarding, ipv6_autoconf, dhcp6 = FALSE; char *method = NM_SETTING_IP6_CONFIG_METHOD_MANUAL; guint32 i; shvarFile *network_ifcfg; @@ -1431,26 +1432,6 @@ make_ip6_setting (shvarFile *ifcfg, return NULL; } - /* Is IPV6 enabled? Set method to "ignored", when not enabled */ - str_value = svGetValue (ifcfg, "IPV6INIT", FALSE); - bool_value = svTrueValue (ifcfg, "IPV6INIT", FALSE); - if (!str_value) { - network_ifcfg = svNewFile (network_file); - if (network_ifcfg) { - bool_value = svTrueValue (network_ifcfg, "IPV6INIT", FALSE); - svCloseFile (network_ifcfg); - } - } - g_free (str_value); - - if (!bool_value) { - /* IPv6 is disabled */ - g_object_set (s_ip6, - NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, - NULL); - return NM_SETTING (s_ip6); - } - /* First check if IPV6_DEFROUTE is set for this device; IPV6_DEFROUTE has the * opposite meaning from never-default. The default if IPV6_DEFROUTE is not * specified is IPV6_DEFROUTE=yes which means that this connection can be used @@ -1493,23 +1474,39 @@ make_ip6_setting (shvarFile *ifcfg, } /* Find out method property */ - ipv6forwarding = svTrueValue (ifcfg, "IPV6FORWARDING", FALSE); - ipv6_autoconf = svTrueValue (ifcfg, "IPV6_AUTOCONF", !ipv6forwarding); - dhcp6 = svTrueValue (ifcfg, "DHCPV6C", FALSE); - - if (ipv6_autoconf) - method = NM_SETTING_IP6_CONFIG_METHOD_AUTO; - else if (dhcp6) - method = NM_SETTING_IP6_CONFIG_METHOD_DHCP; + /* Is IPV6 enabled? Set method to "ignored", when not enabled */ + str_value = svGetValue (ifcfg, "IPV6INIT", FALSE); + ipv6init = svTrueValue (ifcfg, "IPV6INIT", FALSE); + if (!str_value) { + network_ifcfg = svNewFile (network_file); + if (network_ifcfg) { + ipv6init = svTrueValue (network_ifcfg, "IPV6INIT", FALSE); + svCloseFile (network_ifcfg); + } + } + g_free (str_value); + + if (!ipv6init) + method = NM_SETTING_IP6_CONFIG_METHOD_IGNORE; /* IPv6 is disabled */ else { - /* IPV6_AUTOCONF=no and no IPv6 address -> method 'link-local' */ - str_value = svGetValue (ifcfg, "IPV6ADDR", FALSE); - if (!str_value) - str_value = svGetValue (ifcfg, "IPV6ADDR_SECONDARIES", FALSE); + ipv6forwarding = svTrueValue (ifcfg, "IPV6FORWARDING", FALSE); + ipv6_autoconf = svTrueValue (ifcfg, "IPV6_AUTOCONF", !ipv6forwarding); + dhcp6 = svTrueValue (ifcfg, "DHCPV6C", FALSE); + + if (ipv6_autoconf) + method = NM_SETTING_IP6_CONFIG_METHOD_AUTO; + else if (dhcp6) + method = NM_SETTING_IP6_CONFIG_METHOD_DHCP; + else { + /* IPV6_AUTOCONF=no and no IPv6 address -> method 'link-local' */ + str_value = svGetValue (ifcfg, "IPV6ADDR", FALSE); + if (!str_value) + str_value = svGetValue (ifcfg, "IPV6ADDR_SECONDARIES", FALSE); - if (!str_value) - method = NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL; - g_free (str_value); + if (!str_value) + method = NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL; + g_free (str_value); + } } /* TODO - handle other methods */ @@ -1521,6 +1518,10 @@ make_ip6_setting (shvarFile *ifcfg, NM_SETTING_IP6_CONFIG_MAY_FAIL, !svTrueValue (ifcfg, "IPV6_FAILURE_FATAL", FALSE), NULL); + /* Don't bother to read IP, DNS and routes when IPv6 is disabled */ + if (strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_IGNORE) == 0) + return NM_SETTING (s_ip6); + if (!strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_MANUAL)) { NMIP6Address *addr; char *val; @@ -2234,6 +2235,7 @@ eap_peap_reader (const char *eap_method, gboolean phase2, GError **error) { + char *anon_ident = NULL; char *ca_cert = NULL; char *real_cert_path = NULL; char *inner_auth = NULL; @@ -2275,6 +2277,10 @@ eap_peap_reader (const char *eap_method, if (svTrueValue (ifcfg, "IEEE_8021X_PEAP_FORCE_NEW_LABEL", FALSE)) g_object_set (s_8021x, NM_SETTING_802_1X_PHASE1_PEAPLABEL, "1", NULL); + anon_ident = svGetValue (ifcfg, "IEEE_8021X_ANON_IDENTITY", FALSE); + if (anon_ident && strlen (anon_ident)) + g_object_set (s_8021x, NM_SETTING_802_1X_ANONYMOUS_IDENTITY, anon_ident, NULL); + inner_auth = svGetValue (ifcfg, "IEEE_8021X_INNER_AUTH_METHODS", FALSE); if (!inner_auth) { g_set_error (error, IFCFG_PLUGIN_ERROR, 0, @@ -2324,6 +2330,7 @@ done: g_free (peapver); g_free (real_cert_path); g_free (ca_cert); + g_free (anon_ident); return success; } @@ -2737,6 +2744,7 @@ make_wireless_setting (shvarFile *ifcfg, { NMSettingWireless *s_wireless; GByteArray *array = NULL; + GSList *macaddr_blacklist = NULL; char *value; s_wireless = NM_SETTING_WIRELESS (nm_setting_wireless_new ()); @@ -2770,6 +2778,33 @@ make_wireless_setting (shvarFile *ifcfg, g_object_set (s_wireless, NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, array, NULL); g_byte_array_free (array, TRUE); } + } else { + PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: %s", (*error)->message); + g_clear_error (error); + } + + value = svGetValue (ifcfg, "HWADDR_BLACKLIST", FALSE); + if (value) { + char **list = NULL, **iter; + struct ether_addr addr; + + list = g_strsplit_set (value, " \t", 0); + for (iter = list; iter && *iter; iter++) { + if (**iter == '\0') + continue; + if (!ether_aton_r (*iter, &addr)) { + PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: invalid MAC in HWADDR_BLACKLIST '%s'", *iter); + continue; + } + macaddr_blacklist = g_slist_prepend (macaddr_blacklist, *iter); + } + if (macaddr_blacklist) { + macaddr_blacklist = g_slist_reverse (macaddr_blacklist); + g_object_set (s_wireless, NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST, macaddr_blacklist, NULL); + g_slist_free (macaddr_blacklist); + } + g_free (value); + g_strfreev (list); } value = svGetValue (ifcfg, "ESSID", TRUE); @@ -3030,6 +3065,7 @@ make_wired_setting (shvarFile *ifcfg, char *value = NULL; int mtu; GByteArray *mac = NULL; + GSList *macaddr_blacklist = NULL; char *nettype; s_wired = NM_SETTING_WIRED (nm_setting_wired_new ()); @@ -3162,6 +3198,33 @@ make_wired_setting (shvarFile *ifcfg, g_object_set (s_wired, NM_SETTING_WIRED_CLONED_MAC_ADDRESS, mac, NULL); g_byte_array_free (mac, TRUE); } + } else { + PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: %s", (*error)->message); + g_clear_error (error); + } + + value = svGetValue (ifcfg, "HWADDR_BLACKLIST", FALSE); + if (value) { + char **list = NULL, **iter; + struct ether_addr addr; + + list = g_strsplit_set (value, " \t", 0); + for (iter = list; iter && *iter; iter++) { + if (**iter == '\0') + continue; + if (!ether_aton_r (*iter, &addr)) { + PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: invalid MAC in HWADDR_BLACKLIST '%s'", *iter); + continue; + } + macaddr_blacklist = g_slist_prepend (macaddr_blacklist, *iter); + } + if (macaddr_blacklist) { + macaddr_blacklist = g_slist_reverse (macaddr_blacklist); + g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST, macaddr_blacklist, NULL); + g_slist_free (macaddr_blacklist); + } + g_free (value); + g_strfreev (list); } value = svGetValue (ifcfg, "KEY_MGMT", FALSE); @@ -3246,7 +3309,7 @@ is_wireless_device (const char *iface) g_return_val_if_fail (iface != NULL, FALSE); fd = socket(AF_INET, SOCK_DGRAM, 0); - if (!fd) + if (fd == -1) return FALSE; memset (&wrq, 0, sizeof (struct iwreq)); diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-8021x-peap-mschapv2 b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-8021x-peap-mschapv2 index 6d68eca1..27bcbbf9 100644 --- a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-8021x-peap-mschapv2 +++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-8021x-peap-mschapv2 @@ -12,4 +12,4 @@ IEEE_8021X_CA_CERT=test_ca_cert.pem IEEE_8021X_PEAP_VERSION=1 IEEE_8021X_PEAP_FORCE_NEW_LABEL=yes IEEE_8021X_INNER_AUTH_METHODS=MSCHAPV2 - +IEEE_8021X_ANON_IDENTITY=somebody diff --git a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c index e6013f8d..d1f08aa9 100644 --- a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c +++ b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c @@ -2707,6 +2707,7 @@ test_read_wired_8021x_peap_mschapv2 (void) GError *error = NULL; const char *tmp; const char *expected_identity = "David Smith"; + const char *expected_anon_identity = "somebody"; const char *expected_password = "foobar baz"; gboolean success = FALSE; const char *expected_ca_cert_path; @@ -2793,6 +2794,19 @@ test_read_wired_8021x_peap_mschapv2 (void) NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_IDENTITY); + /* Anonymous Identity */ + tmp = nm_setting_802_1x_get_anonymous_identity (s_8021x); + ASSERT (tmp != NULL, + "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: missing %s / %s key", + TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2, + NM_SETTING_802_1X_SETTING_NAME, + NM_SETTING_802_1X_ANONYMOUS_IDENTITY); + ASSERT (strcmp (tmp, expected_anon_identity) == 0, + "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: unexpected %s / %s key value", + TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2, + NM_SETTING_802_1X_SETTING_NAME, + NM_SETTING_802_1X_ANONYMOUS_IDENTITY); + /* Password */ tmp = nm_setting_802_1x_get_password (s_8021x); ASSERT (tmp != NULL, @@ -6491,7 +6505,7 @@ test_write_wired_static (void) struct in6_addr ip6, ip6_1, ip6_2; struct in6_addr route1_dest, route2_dest, route1_nexthop, route2_nexthop; struct in6_addr dns6_1, dns6_2; - const guint32 route1_prefix = 64, route2_prefix = 0; + const guint32 route1_prefix = 64, route2_prefix = 128; const guint32 route1_metric = 99, route2_metric = 1; NMIP4Address *addr; NMIP6Address *addr6; @@ -6774,6 +6788,7 @@ test_write_wired_dhcp (void) g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, + NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE, NULL); /* Save the ifcfg */ @@ -7234,7 +7249,10 @@ test_write_wired_static_routes (void) NM_SETTING_IP6_CONFIG_SETTING_NAME); nm_connection_add_setting (connection, NM_SETTING (s_ip6)); - g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL); + g_object_set (s_ip6, + NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, + NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE, + NULL); ASSERT (nm_connection_verify (connection, &error) == TRUE, "wired-static-routes-write", "failed to verify connection: %s", @@ -7350,7 +7368,10 @@ test_write_wired_dhcp_8021x_peap_mschapv2 (void) NM_SETTING_IP6_CONFIG_SETTING_NAME); nm_connection_add_setting (connection, NM_SETTING (s_ip6)); - g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL); + g_object_set (s_ip6, + NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, + NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE, + NULL); /* 802.1x setting */ s_8021x = (NMSetting8021x *) nm_setting_802_1x_new (); @@ -7361,6 +7382,7 @@ test_write_wired_dhcp_8021x_peap_mschapv2 (void) g_object_set (s_8021x, NM_SETTING_802_1X_IDENTITY, "Bob Saget", + NM_SETTING_802_1X_ANONYMOUS_IDENTITY, "barney", NM_SETTING_802_1X_PASSWORD, "Kids, it was back in October 2008...", NM_SETTING_802_1X_PHASE1_PEAPVER, "1", NM_SETTING_802_1X_PHASE1_PEAPLABEL, "1", @@ -7508,7 +7530,10 @@ test_write_wired_8021x_tls (NMSetting8021xCKScheme scheme, /* IP6 setting */ s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new (); g_assert (s_ip6); - g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL); + g_object_set (s_ip6, + NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, + NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE, + NULL); nm_connection_add_setting (connection, NM_SETTING (s_ip6)); /* 802.1x setting */ @@ -7753,7 +7778,10 @@ test_write_wifi_open (void) NM_SETTING_IP6_CONFIG_SETTING_NAME); nm_connection_add_setting (connection, NM_SETTING (s_ip6)); - g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL); + g_object_set (s_ip6, + NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, + NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE, + NULL); ASSERT (nm_connection_verify (connection, &error) == TRUE, "wifi-open-write", "failed to verify connection: %s", @@ -7892,7 +7920,10 @@ test_write_wifi_open_hex_ssid (void) NM_SETTING_IP6_CONFIG_SETTING_NAME); nm_connection_add_setting (connection, NM_SETTING (s_ip6)); - g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL); + g_object_set (s_ip6, + NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, + NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE, + NULL); ASSERT (nm_connection_verify (connection, &error) == TRUE, "wifi-open-hex-ssid-write", "failed to verify connection: %s", @@ -8035,7 +8066,10 @@ test_write_wifi_wep (void) NM_SETTING_IP6_CONFIG_SETTING_NAME); nm_connection_add_setting (connection, NM_SETTING (s_ip6)); - g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL); + g_object_set (s_ip6, + NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, + NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE, + NULL); ASSERT (nm_connection_verify (connection, &error) == TRUE, "wifi-wep-write", "failed to verify connection: %s", @@ -8198,7 +8232,10 @@ test_write_wifi_wep_adhoc (void) NM_SETTING_IP6_CONFIG_SETTING_NAME); nm_connection_add_setting (connection, NM_SETTING (s_ip6)); - g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL); + g_object_set (s_ip6, + NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, + NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE, + NULL); ASSERT (nm_connection_verify (connection, &error) == TRUE, "wifi-wep-adhoc-write", "failed to verify connection: %s", @@ -8351,7 +8388,10 @@ test_write_wifi_wep_passphrase (void) NM_SETTING_IP6_CONFIG_SETTING_NAME); nm_connection_add_setting (connection, NM_SETTING (s_ip6)); - g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL); + g_object_set (s_ip6, + NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, + NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE, + NULL); ASSERT (nm_connection_verify (connection, &error) == TRUE, "wifi-wep-passphrase-write", "failed to verify connection: %s", @@ -8506,7 +8546,10 @@ test_write_wifi_wep_40_ascii (void) NM_SETTING_IP6_CONFIG_SETTING_NAME); nm_connection_add_setting (connection, NM_SETTING (s_ip6)); - g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL); + g_object_set (s_ip6, + NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, + NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE, + NULL); ASSERT (nm_connection_verify (connection, &error) == TRUE, "wifi-wep-40-ascii-write", "failed to verify connection: %s", @@ -8661,7 +8704,10 @@ test_write_wifi_wep_104_ascii (void) NM_SETTING_IP6_CONFIG_SETTING_NAME); nm_connection_add_setting (connection, NM_SETTING (s_ip6)); - g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL); + g_object_set (s_ip6, + NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, + NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE, + NULL); ASSERT (nm_connection_verify (connection, &error) == TRUE, "wifi-wep-104-ascii-write", "failed to verify connection: %s", @@ -8813,7 +8859,10 @@ test_write_wifi_leap (void) NM_SETTING_IP6_CONFIG_SETTING_NAME); nm_connection_add_setting (connection, NM_SETTING (s_ip6)); - g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL); + g_object_set (s_ip6, + NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, + NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE, + NULL); ASSERT (nm_connection_verify (connection, &error) == TRUE, "wifi-leap-write", "failed to verify connection: %s", @@ -8949,7 +8998,11 @@ test_write_wifi_leap_secret_flags (NMSettingSecretFlags flags) s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new (); g_assert (s_ip6); nm_connection_add_setting (connection, NM_SETTING (s_ip6)); - g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL); + + g_object_set (s_ip6, + NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, + NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE, + NULL); success = nm_connection_verify (connection, &error); g_assert_no_error (error); @@ -9114,7 +9167,10 @@ test_write_wifi_wpa_psk (const char *name, NM_SETTING_IP6_CONFIG_SETTING_NAME); nm_connection_add_setting (connection, NM_SETTING (s_ip6)); - g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL); + g_object_set (s_ip6, + NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, + NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE, + NULL); ASSERT (nm_connection_verify (connection, &error) == TRUE, test_name, "failed to verify connection: %s", @@ -9277,7 +9333,10 @@ test_write_wifi_wpa_psk_adhoc (void) NM_SETTING_IP6_CONFIG_SETTING_NAME); nm_connection_add_setting (connection, NM_SETTING (s_ip6)); - g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL); + g_object_set (s_ip6, + NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, + NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE, + NULL); ASSERT (nm_connection_verify (connection, &error) == TRUE, "wifi-wpa-psk-adhoc-write", "failed to verify connection: %s", @@ -9458,7 +9517,10 @@ test_write_wifi_wpa_eap_tls (void) NM_SETTING_IP6_CONFIG_SETTING_NAME); nm_connection_add_setting (connection, NM_SETTING (s_ip6)); - g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL); + g_object_set (s_ip6, + NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, + NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE, + NULL); ASSERT (nm_connection_verify (connection, &error) == TRUE, "wifi-wpa-eap-tls-write", "failed to verify connection: %s", @@ -9657,7 +9719,10 @@ test_write_wifi_wpa_eap_ttls_tls (void) NM_SETTING_IP6_CONFIG_SETTING_NAME); nm_connection_add_setting (connection, NM_SETTING (s_ip6)); - g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL); + g_object_set (s_ip6, + NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, + NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE, + NULL); ASSERT (nm_connection_verify (connection, &error) == TRUE, "wifi-wpa-eap-ttls-tls-write", "failed to verify connection: %s", @@ -9828,7 +9893,10 @@ test_write_wifi_wpa_eap_ttls_mschapv2 (void) NM_SETTING_IP6_CONFIG_SETTING_NAME); nm_connection_add_setting (connection, NM_SETTING (s_ip6)); - g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL); + g_object_set (s_ip6, + NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, + NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE, + NULL); ASSERT (nm_connection_verify (connection, &error) == TRUE, "wifi-wpa-eap-ttls-mschapv2-write", "failed to verify connection: %s", @@ -9970,7 +10038,10 @@ test_write_wifi_wpa_then_open (void) g_assert (s_ip6); nm_connection_add_setting (connection, NM_SETTING (s_ip6)); - g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL); + g_object_set (s_ip6, + NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, + NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE, + NULL); success = nm_connection_verify (connection, &error); g_assert_no_error (error); @@ -10154,9 +10225,13 @@ test_write_wifi_dynamic_wep_leap (void) /* IP6 setting */ s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new (); g_assert (s_ip6); - g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL); nm_connection_add_setting (connection, NM_SETTING (s_ip6)); + g_object_set (s_ip6, + NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, + NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE, + NULL); + success = nm_connection_verify (connection, &error); g_assert_no_error (error); g_assert (success); @@ -10688,6 +10763,7 @@ test_write_wired_qeth_dhcp (void) g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, + NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE, NULL); /* Verify */ @@ -10804,7 +10880,11 @@ test_write_wired_ctc_dhcp (void) s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new (); g_assert (s_ip6); nm_connection_add_setting (connection, NM_SETTING (s_ip6)); - g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL); + + g_object_set (s_ip6, + NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, + NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE, + NULL); /* Verify */ success = nm_connection_verify (connection, &error); @@ -10939,6 +11019,7 @@ test_write_permissions (void) g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, + NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE, NULL); /* Verify */ @@ -11040,7 +11121,11 @@ test_write_wifi_wep_agent_keys (void) s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new (); g_assert (s_ip6); nm_connection_add_setting (connection, NM_SETTING (s_ip6)); - g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL); + + g_object_set (s_ip6, + NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, + NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE, + NULL); /* Wifi setting */ s_wifi = (NMSettingWireless *) nm_setting_wireless_new (); diff --git a/src/settings/plugins/ifcfg-rh/writer.c b/src/settings/plugins/ifcfg-rh/writer.c index 6b66b232..192226ac 100644 --- a/src/settings/plugins/ifcfg-rh/writer.c +++ b/src/settings/plugins/ifcfg-rh/writer.c @@ -758,6 +758,7 @@ write_wireless_setting (NMConnection *connection, char buf[33]; guint32 mtu, chan, i; gboolean adhoc = FALSE, hex_ssid = FALSE; + const GSList *macaddr_blacklist; s_wireless = (NMSettingWireless *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS); if (!s_wireless) { @@ -786,6 +787,23 @@ write_wireless_setting (NMConnection *connection, g_free (tmp); } + svSetValue (ifcfg, "HWADDR_BLACKLIST", NULL, FALSE); + macaddr_blacklist = nm_setting_wireless_get_mac_address_blacklist (s_wireless); + if (macaddr_blacklist) { + const GSList *iter; + GString *blacklist_str = g_string_new (NULL); + + for (iter = macaddr_blacklist; iter; iter = g_slist_next (iter)) { + g_string_append (blacklist_str, iter->data); + g_string_append_c (blacklist_str, ' '); + + } + if (blacklist_str->len > 0) + g_string_truncate (blacklist_str, blacklist_str->len - 1); + svSetValue (ifcfg, "HWADDR_BLACKLIST", blacklist_str->str, FALSE); + g_string_free (blacklist_str, TRUE); + } + svSetValue (ifcfg, "MTU", NULL, FALSE); mtu = nm_setting_wireless_get_mtu (s_wireless); if (mtu) { @@ -934,6 +952,7 @@ write_wired_setting (NMConnection *connection, shvarFile *ifcfg, GError **error) guint32 mtu, num_opts, i; const GPtrArray *s390_subchannels; GString *str; + const GSList *macaddr_blacklist; s_wired = (NMSettingWired *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED); if (!s_wired) { @@ -961,6 +980,23 @@ write_wired_setting (NMConnection *connection, shvarFile *ifcfg, GError **error) g_free (tmp); } + svSetValue (ifcfg, "HWADDR_BLACKLIST", NULL, FALSE); + macaddr_blacklist = nm_setting_wired_get_mac_address_blacklist (s_wired); + if (macaddr_blacklist) { + const GSList *iter; + GString *blacklist_str = g_string_new (NULL); + + for (iter = macaddr_blacklist; iter; iter = g_slist_next (iter)) { + g_string_append (blacklist_str, iter->data); + g_string_append_c (blacklist_str, ' '); + + } + if (blacklist_str->len > 0) + g_string_truncate (blacklist_str, blacklist_str->len - 1); + svSetValue (ifcfg, "HWADDR_BLACKLIST", blacklist_str->str, FALSE); + g_string_free (blacklist_str, TRUE); + } + svSetValue (ifcfg, "MTU", NULL, FALSE); mtu = nm_setting_wired_get_mtu (s_wired); if (mtu) { @@ -1316,13 +1352,14 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error) if (utils_has_route_file_new_syntax (route_path)) { shvarFile *routefile; - g_free (route_path); routefile = utils_get_route_ifcfg (ifcfg->fileName, TRUE); if (!routefile) { g_set_error (error, IFCFG_PLUGIN_ERROR, 0, - "Could not create route file '%s'", routefile->fileName); + "Could not create route file '%s'", route_path); + g_free (route_path); goto out; } + g_free (route_path); num = nm_setting_ip4_config_get_num_routes (s_ip4); for (i = 0; i < 256; i++) { diff --git a/src/settings/plugins/ifnet/plugin.c b/src/settings/plugins/ifnet/plugin.c index 69b7bc80..59083688 100644 --- a/src/settings/plugins/ifnet/plugin.c +++ b/src/settings/plugins/ifnet/plugin.c @@ -278,7 +278,8 @@ reload_connections (gpointer config) if (auto_refresh && is_true (auto_refresh)) { if (!nm_connection_compare (NM_CONNECTION (old), NM_CONNECTION (new), - NM_SETTING_COMPARE_FLAG_EXACT)) { + NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS | + NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS)) { PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Auto refreshing %s", conn_name); /* Remove and re-add to disconnect and reconnect with new settings */ diff --git a/src/settings/plugins/keyfile/common.h b/src/settings/plugins/keyfile/common.h index 6c8f9ceb..7d94a705 100644 --- a/src/settings/plugins/keyfile/common.h +++ b/src/settings/plugins/keyfile/common.h @@ -23,9 +23,6 @@ #include -#define SWP_TAG ".swp" -#define SWPX_TAG ".swpx" - #define KEYFILE_PLUGIN_NAME "keyfile" #define KEYFILE_PLUGIN_INFO "(c) 2007 - 2010 Red Hat, Inc. To report bugs please use the NetworkManager mailing list." diff --git a/src/settings/plugins/keyfile/plugin.c b/src/settings/plugins/keyfile/plugin.c index ffc614bc..af69c200 100644 --- a/src/settings/plugins/keyfile/plugin.c +++ b/src/settings/plugins/keyfile/plugin.c @@ -231,7 +231,8 @@ dir_changed (GFileMonitor *monitor, if (tmp) { if (!nm_connection_compare (NM_CONNECTION (connection), NM_CONNECTION (tmp), - NM_SETTING_COMPARE_FLAG_EXACT)) { + NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS | + NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS)) { PLUGIN_PRINT (KEYFILE_PLUGIN_NAME, "updating %s", full_path); update_connection_settings (connection, tmp); } diff --git a/src/settings/plugins/keyfile/reader.c b/src/settings/plugins/keyfile/reader.c index a8eaaa8e..c4136e05 100644 --- a/src/settings/plugins/keyfile/reader.c +++ b/src/settings/plugins/keyfile/reader.c @@ -16,7 +16,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * Copyright (C) 2008 - 2009 Novell, Inc. - * Copyright (C) 2008 - 2010 Red Hat, Inc. + * Copyright (C) 2008 - 2011 Red Hat, Inc. */ #include @@ -40,6 +40,7 @@ #include #include "nm-dbus-glib-types.h" +#include "nm-system-config-interface.h" #include "reader.h" #include "common.h" @@ -735,29 +736,27 @@ get_uchar_array (GKeyFile *keyfile, const char *key) { GByteArray *array = NULL; - char *p, *tmp_string; + char *tmp_string; gint *tmp_list; gsize length; int i; - /* New format: just a string. We try parsing the new format if there are - * no ';' in the string or it's not just numbers. + /* New format: just a string + * Old format: integer list; e.g. 11;25;38 */ - p = tmp_string = g_key_file_get_string (keyfile, setting_name, key, NULL); + tmp_string = g_key_file_get_string (keyfile, setting_name, key, NULL); if (tmp_string) { gboolean new_format = FALSE; + GRegex *regex; + GMatchInfo *match_info; + const char *pattern = "^[[:space:]]*[[:digit:]]{1,3}[[:space:]]*(;[[:space:]]*[[:digit:]]{1,3}[[:space:]]*)*(;[[:space:]]*)?$"; - if (strchr (p, ';') == NULL) - new_format = TRUE; - else { + regex = g_regex_new (pattern, 0, 0, NULL); + g_regex_match (regex, tmp_string, 0, &match_info); + if (!g_match_info_matches (match_info)) new_format = TRUE; - while (p && *p) { - if (!isdigit (*p++)) { - new_format = FALSE; - break; - } - } - } + g_match_info_free (match_info); + g_regex_unref (regex); if (new_format) { array = g_byte_array_sized_new (strlen (tmp_string)); @@ -835,6 +834,24 @@ get_cert_path (const char *keyfile_path, GByteArray *cert_path) #define SCHEME_PATH "file://" +static const char *certext[] = { ".pem", ".cert", ".crt", ".cer", ".p12", ".der", ".key" }; + +static gboolean +has_cert_ext (GByteArray *array) +{ + int i; + + for (i = 0; i < G_N_ELEMENTS (certext); i++) { + guint32 extlen = strlen (certext[i]); + + if (array->len <= extlen) + continue; + if (memcmp (&array->data[array->len - extlen], certext[i], extlen) == 0) + return TRUE; + } + return FALSE; +} + static void cert_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, const char *keyfile_path) { @@ -859,17 +876,31 @@ cert_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, const char && g_utf8_validate ((const char *) array->data, array->len, NULL)) { GByteArray *val; char *path; + gboolean exists; + + /* Might be a bare path without the file:// prefix; in that case + * if it's an absolute path, use that, otherwise treat it as a + * relative path to the current directory. + */ path = get_cert_path (keyfile_path, array); - if (g_file_test (path, G_FILE_TEST_EXISTS)) { + exists = g_file_test (path, G_FILE_TEST_EXISTS); + if ( exists + || memchr (array->data, '/', array->len) + || has_cert_ext (array)) { /* Construct the proper value as required for the PATH scheme */ val = g_byte_array_sized_new (strlen (SCHEME_PATH) + array->len + 1); g_byte_array_append (val, (const guint8 *) SCHEME_PATH, strlen (SCHEME_PATH)); - g_byte_array_append (val, array->data, array->len); + g_byte_array_append (val, (const guint8 *) path, strlen (path)); g_byte_array_append (val, (const guint8 *) "\0", 1); g_object_set (setting, key, val, NULL); g_byte_array_free (val, TRUE); success = TRUE; + + /* Warn if the certificate didn't exist */ + if (exists == FALSE) { + PLUGIN_WARN (KEYFILE_PLUGIN_NAME, " certificate or key %s does not exist", path); + } } g_free (path); } @@ -881,7 +912,7 @@ cert_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, const char g_byte_array_free (array, TRUE); } else { - g_warning ("%s: ignoring invalid SSID for %s / %s", + g_warning ("%s: ignoring invalid key/cert value for %s / %s", __func__, setting_name, key); } } diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Makefile.am b/src/settings/plugins/keyfile/tests/keyfiles/Makefile.am index 0ce03209..302db866 100644 --- a/src/settings/plugins/keyfile/tests/keyfiles/Makefile.am +++ b/src/settings/plugins/keyfile/tests/keyfiles/Makefile.am @@ -7,8 +7,11 @@ KEYFILES = \ ATT_Data_Connect_BT \ ATT_Data_Connect_Plain \ Test_String_SSID \ + Test_Intlist_SSID \ Test_Wired_TLS_Old \ - Test_Wired_TLS_New + Test_Wired_TLS_New \ + Test_Wired_TLS_Blob \ + Test_Wired_TLS_Path_Missing CERTS = \ test-ca-cert.pem \ diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Makefile.in b/src/settings/plugins/keyfile/tests/keyfiles/Makefile.in index 2c3c1630..083615b0 100644 --- a/src/settings/plugins/keyfile/tests/keyfiles/Makefile.in +++ b/src/settings/plugins/keyfile/tests/keyfiles/Makefile.in @@ -277,8 +277,11 @@ KEYFILES = \ ATT_Data_Connect_BT \ ATT_Data_Connect_Plain \ Test_String_SSID \ + Test_Intlist_SSID \ Test_Wired_TLS_Old \ - Test_Wired_TLS_New + Test_Wired_TLS_New \ + Test_Wired_TLS_Blob \ + Test_Wired_TLS_Path_Missing CERTS = \ test-ca-cert.pem \ diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Test_Intlist_SSID b/src/settings/plugins/keyfile/tests/keyfiles/Test_Intlist_SSID new file mode 100644 index 00000000..6d2bc0fa --- /dev/null +++ b/src/settings/plugins/keyfile/tests/keyfiles/Test_Intlist_SSID @@ -0,0 +1,11 @@ +[connection] +id=Test +uuid=2f962388-e5f3-45af-a62c-ac220b8f7baa +type=802-11-wireless + +[802-11-wireless] +ssid=98;108;97;104;49;50;51;52; + +[ipv4] +method=auto + diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Test_Wired_TLS_Blob b/src/settings/plugins/keyfile/tests/keyfiles/Test_Wired_TLS_Blob new file mode 100644 index 00000000..9f4ef62f --- /dev/null +++ b/src/settings/plugins/keyfile/tests/keyfiles/Test_Wired_TLS_Blob @@ -0,0 +1,22 @@ + +[connection] +id=Wired TLS +uuid=5ee46013-9469-4c6a-a60a-0c7a1e1c7488 +type=802-3-ethernet + +[802-1x] +eap=tls; +identity=Bill Smith +ca-cert=48;130;2;52;48;130;1;161;2;16;2;173;102;126;78;69;254;94;87;111;60;152;25;94;221;192;48;13;6;9;42;134;72;134;247;13;1;1;2;5;0;48;95;49;11;48;9;6;3;85;4;6;19;2;85;83;49;32;48;30;6;3;85;4;10;19;23;82;83;65;32;68;97;116;97;32;83;101;99;117;114;105;116;121;44;32;73;110;99;46;49;46;48;44;6;3;85;4;11;19;37;83;101;99;117;114;101;32;83;101;114;118;101;114;32;67;101;114;116;105;102;105;99;97;116;105;111;110;32;65;117;116;104;111;114;105;116;121;48;30;23;13;57;52;49;49;48;57;48;48;48;48;48;48;90;23;13;49;48;48;49;48;55;50;51;53;57;53;57;90;48;95;49;11;48;9;6;3;85;4;6;19;2;85;83;49;32;48;30;6;3;85;4;10;19;23;82;83;65;32;68;97;116;97;32;83;101;99;117;114;105;116;121;44;32;73;110;99;46;49;46;48;44;6;3;85;4;11;19;37;83;101;99;117;114;101;32;83;101;114;118;101;114;32;67;101;114;116;105;102;105;99;97;116;105;111;110;32;65;117;116;104;111;114;105;116;121;48;129;155;48;13;6;9;42;134;72;134;247;13;1;1;1;5;0;3;129;137;0;48;129;133;2;126;0;146;206;122;193;174;131;62;90;170;137;131;87;172;37;1;118;12;173;174;142;44;55;206;235;53;120;100;84;3;229;132;64;81;201;191;143;8;226;138;130;8;210;22;134;55;85;233;177;33;2;173;118;104;129;154;5;162;75;201;75;37;102;34;86;108;136;7;143;247;129;89;109;132;7;101;112;19;113;118;62;155;119;76;227;80;137;86;152;72;185;29;167;41;26;19;46;74;17;89;156;30;21;213;73;84;44;115;58;105;130;177;151;57;156;109;112;103;72;229;221;45;214;200;30;123;2;3;1;0;1;48;13;6;9;42;134;72;134;247;13;1;1;2;5;0;3;126;0;101;221;126;225;178;236;176;226;58;224;236;113;70;154;25;17;184;211;199;160;180;3;64;38;2;62;9;156;225;18;179;209;90;246;55;165;183;97;3;182;91;22;105;59;198;68;8;12;136;83;12;107;151;73;199;62;53;220;108;185;187;170;223;92;187;58;47;147;96;182;169;75;77;242;32;247;205;95;127;100;123;142;220;0;92;215;250;119;202;57;22;89;111;14;234;211;181;131;127;77;77;66;86;118;180;201;95;4;248;56;248;235;210;95;117;95;205;123;252;229;142;128;124;252;80; +client-cert=102;105;108;101;58;47;47;47;104;111;109;101;47;100;99;98;119;47;68;101;115;107;116;111;112;47;99;101;114;116;105;110;102;114;97;47;99;108;105;101;110;116;46;112;101;109;0; +private-key=102;105;108;101;58;47;47;47;104;111;109;101;47;100;99;98;119;47;68;101;115;107;116;111;112;47;99;101;114;116;105;110;102;114;97;47;99;108;105;101;110;116;46;112;101;109;0; +private-key-password=12345testing + +[ipv4] +method=auto + +[802-3-ethernet] +duplex=full + +[ipv6] +method=ignore diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Test_Wired_TLS_Path_Missing b/src/settings/plugins/keyfile/tests/keyfiles/Test_Wired_TLS_Path_Missing new file mode 100644 index 00000000..2b39538e --- /dev/null +++ b/src/settings/plugins/keyfile/tests/keyfiles/Test_Wired_TLS_Path_Missing @@ -0,0 +1,22 @@ + +[connection] +id=Wired TLS +uuid=5ee46013-9469-4c6a-a60a-0c7a1e1c7488 +type=802-3-ethernet + +[802-1x] +eap=tls; +identity=Bill Smith +ca-cert=/some/random/cert/path.pem +client-cert=test-key-and-cert.pem +private-key=test-key-and-cert.pem +private-key-password=12345testing + +[ipv4] +method=auto + +[802-3-ethernet] +duplex=full + +[ipv6] +method=ignore diff --git a/src/settings/plugins/keyfile/tests/test-keyfile.c b/src/settings/plugins/keyfile/tests/test-keyfile.c index bfe5aa43..3bbaaaec 100644 --- a/src/settings/plugins/keyfile/tests/test-keyfile.c +++ b/src/settings/plugins/keyfile/tests/test-keyfile.c @@ -1438,6 +1438,131 @@ test_write_string_ssid (void) g_object_unref (connection); } +#define TEST_INTLIST_SSID_FILE TEST_KEYFILES_DIR"/Test_Intlist_SSID" + +static void +test_read_intlist_ssid (void) +{ + NMConnection *connection; + NMSettingWireless *s_wifi; + GError *error = NULL; + gboolean success; + const GByteArray *array; + const char *expected_ssid = "blah1234"; + + connection = nm_keyfile_plugin_connection_from_file (TEST_INTLIST_SSID_FILE, &error); + g_assert_no_error (error); + g_assert (connection); + + success = nm_connection_verify (connection, &error); + g_assert_no_error (error); + g_assert (success); + + /* SSID */ + s_wifi = nm_connection_get_setting_wireless (connection); + g_assert (s_wifi); + + array = nm_setting_wireless_get_ssid (s_wifi); + g_assert (array != NULL); + g_assert_cmpint (array->len, ==, strlen (expected_ssid)); + g_assert_cmpint (memcmp (array->data, expected_ssid, strlen (expected_ssid)), ==, 0); + + g_object_unref (connection); +} + +static void +test_write_intlist_ssid (void) +{ + NMConnection *connection; + NMSettingConnection *s_con; + NMSettingWireless *s_wifi; + NMSettingIP4Config *s_ip4; + char *uuid, *testfile = NULL; + GByteArray *ssid; + unsigned char tmpssid[] = { 65, 49, 50, 51, 0, 50, 50 }; + gboolean success; + NMConnection *reread; + GError *error = NULL; + pid_t owner_grp; + uid_t owner_uid; + GKeyFile *keyfile; + gint *intlist; + gsize len = 0, i; + + connection = nm_connection_new (); + g_assert (connection); + + /* Connection setting */ + + s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ()); + g_assert (s_con); + nm_connection_add_setting (connection, NM_SETTING (s_con)); + + uuid = nm_utils_uuid_generate (); + g_object_set (s_con, + NM_SETTING_CONNECTION_ID, "Intlist SSID Test", + NM_SETTING_CONNECTION_UUID, uuid, + NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME, + NULL); + g_free (uuid); + + /* Wireless setting */ + s_wifi = NM_SETTING_WIRELESS (nm_setting_wireless_new ()); + g_assert (s_wifi); + nm_connection_add_setting (connection, NM_SETTING (s_wifi)); + + ssid = g_byte_array_sized_new (sizeof (tmpssid)); + g_byte_array_append (ssid, &tmpssid[0], sizeof (tmpssid)); + g_object_set (s_wifi, NM_SETTING_WIRELESS_SSID, ssid, NULL); + g_byte_array_free (ssid, TRUE); + + /* IP4 setting */ + s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ()); + g_assert (s_ip4); + nm_connection_add_setting (connection, NM_SETTING (s_ip4)); + g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL); + + /* Write out the connection */ + owner_uid = geteuid (); + owner_grp = getegid (); + success = nm_keyfile_plugin_write_test_connection (connection, TEST_SCRATCH_DIR, owner_uid, owner_grp, &testfile, &error); + g_assert_no_error (error); + g_assert (success); + g_assert (testfile != NULL); + + /* Ensure the SSID was written out as an int list */ + keyfile = g_key_file_new (); + success = g_key_file_load_from_file (keyfile, testfile, 0, &error); + g_assert_no_error (error); + g_assert (success); + + intlist = g_key_file_get_integer_list (keyfile, NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_SSID, &len, &error); + g_assert_no_error (error); + g_assert (intlist); + g_assert_cmpint (len, ==, sizeof (tmpssid)); + + for (i = 0; i < len; i++) + g_assert_cmpint (intlist[i], ==, tmpssid[i]); + g_free (intlist); + + g_key_file_free (keyfile); + + /* Read the connection back in and compare it to the one we just wrote out */ + reread = nm_keyfile_plugin_connection_from_file (testfile, &error); + g_assert_no_error (error); + g_assert (reread); + + success = nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT); + g_assert (success); + + g_clear_error (&error); + unlink (testfile); + g_free (testfile); + + g_object_unref (reread); + g_object_unref (connection); +} + #define TEST_BT_DUN_FILE TEST_KEYFILES_DIR"/ATT_Data_Connect_BT" static void @@ -1953,6 +2078,133 @@ test_write_gsm_connection (void) g_object_unref (connection); } +#define TEST_WIRED_TLS_BLOB_FILE TEST_KEYFILES_DIR"/Test_Wired_TLS_Blob" + +static void +test_read_wired_8021x_tls_blob_connection (void) +{ + NMConnection *connection; + NMSetting *s_wired; + NMSetting8021x *s_8021x; + GError *error = NULL; + const char *tmp; + gboolean success; + const GByteArray *array; + + connection = nm_keyfile_plugin_connection_from_file (TEST_WIRED_TLS_BLOB_FILE, &error); + if (connection == NULL) { + g_assert (error); + g_warning ("Failed to read %s: %s", TEST_WIRED_TLS_BLOB_FILE, error->message); + g_assert (connection); + } + + success = nm_connection_verify (connection, &error); + if (!success) { + g_assert (error); + g_warning ("Failed to verify %s: %s", TEST_WIRED_TLS_BLOB_FILE, error->message); + g_assert (success); + } + + /* ===== Wired Setting ===== */ + s_wired = nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED); + g_assert (s_wired != NULL); + + /* ===== 802.1x Setting ===== */ + s_8021x = (NMSetting8021x *) nm_connection_get_setting (connection, NM_TYPE_SETTING_802_1X); + g_assert (s_8021x != NULL); + + g_assert (nm_setting_802_1x_get_num_eap_methods (s_8021x) == 1); + tmp = nm_setting_802_1x_get_eap_method (s_8021x, 0); + g_assert (g_strcmp0 (tmp, "tls") == 0); + + tmp = nm_setting_802_1x_get_identity (s_8021x); + g_assert (g_strcmp0 (tmp, "Bill Smith") == 0); + + tmp = nm_setting_802_1x_get_private_key_password (s_8021x); + g_assert (g_strcmp0 (tmp, "12345testing") == 0); + + g_assert_cmpint (nm_setting_802_1x_get_ca_cert_scheme (s_8021x), ==, NM_SETTING_802_1X_CK_SCHEME_BLOB); + + /* Make sure it's not a path, since it's a blob */ + tmp = nm_setting_802_1x_get_ca_cert_path (s_8021x); + g_assert (tmp == NULL); + + /* Validate the path */ + array = nm_setting_802_1x_get_ca_cert_blob (s_8021x); + g_assert (array != NULL); + g_assert_cmpint (array->len, ==, 568); + + tmp = nm_setting_802_1x_get_client_cert_path (s_8021x); + g_assert_cmpstr (tmp, ==, "/home/dcbw/Desktop/certinfra/client.pem"); + + tmp = nm_setting_802_1x_get_private_key_path (s_8021x); + g_assert_cmpstr (tmp, ==, "/home/dcbw/Desktop/certinfra/client.pem"); + + g_object_unref (connection); +} + +#define TEST_WIRED_TLS_PATH_MISSING_FILE TEST_KEYFILES_DIR"/Test_Wired_TLS_Path_Missing" + +static void +test_read_wired_8021x_tls_bad_path_connection (void) +{ + NMConnection *connection; + NMSetting *s_wired; + NMSetting8021x *s_8021x; + GError *error = NULL; + const char *tmp; + char *tmp2; + gboolean success; + + connection = nm_keyfile_plugin_connection_from_file (TEST_WIRED_TLS_PATH_MISSING_FILE, &error); + if (connection == NULL) { + g_assert (error); + g_warning ("Failed to read %s: %s", TEST_WIRED_TLS_PATH_MISSING_FILE, error->message); + g_assert (connection); + } + + success = nm_connection_verify (connection, &error); + if (!success) { + g_assert (error); + g_warning ("Failed to verify %s: %s", TEST_WIRED_TLS_BLOB_FILE, error->message); + g_assert (success); + } + + /* ===== Wired Setting ===== */ + s_wired = nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED); + g_assert (s_wired != NULL); + + /* ===== 802.1x Setting ===== */ + s_8021x = (NMSetting8021x *) nm_connection_get_setting (connection, NM_TYPE_SETTING_802_1X); + g_assert (s_8021x != NULL); + + g_assert (nm_setting_802_1x_get_num_eap_methods (s_8021x) == 1); + tmp = nm_setting_802_1x_get_eap_method (s_8021x, 0); + g_assert (g_strcmp0 (tmp, "tls") == 0); + + tmp = nm_setting_802_1x_get_identity (s_8021x); + g_assert (g_strcmp0 (tmp, "Bill Smith") == 0); + + tmp = nm_setting_802_1x_get_private_key_password (s_8021x); + g_assert (g_strcmp0 (tmp, "12345testing") == 0); + + g_assert_cmpint (nm_setting_802_1x_get_ca_cert_scheme (s_8021x), ==, NM_SETTING_802_1X_CK_SCHEME_PATH); + + tmp = nm_setting_802_1x_get_ca_cert_path (s_8021x); + g_assert_cmpstr (tmp, ==, "/some/random/cert/path.pem"); + + tmp2 = g_strdup_printf (TEST_KEYFILES_DIR "/test-key-and-cert.pem"); + + tmp = nm_setting_802_1x_get_client_cert_path (s_8021x); + g_assert_cmpstr (tmp, ==, tmp2); + + tmp = nm_setting_802_1x_get_private_key_path (s_8021x); + g_assert_cmpstr (tmp, ==, tmp2); + + g_free (tmp2); + g_object_unref (connection); +} + #define TEST_WIRED_TLS_OLD_FILE TEST_KEYFILES_DIR"/Test_Wired_TLS_Old" static void @@ -2019,6 +2271,7 @@ test_read_wired_8021x_tls_new_connection (void) NMSetting8021x *s_8021x; GError *error = NULL; const char *tmp; + char *tmp2; gboolean success; connection = nm_keyfile_plugin_connection_from_file (TEST_WIRED_TLS_NEW_FILE, &error); @@ -2053,15 +2306,20 @@ test_read_wired_8021x_tls_new_connection (void) tmp = nm_setting_802_1x_get_private_key_password (s_8021x); g_assert (g_strcmp0 (tmp, "12345testing") == 0); + tmp2 = g_strdup_printf (TEST_KEYFILES_DIR "/test-ca-cert.pem"); tmp = nm_setting_802_1x_get_ca_cert_path (s_8021x); - g_assert (g_strcmp0 (tmp, "test-ca-cert.pem") == 0); + g_assert_cmpstr (tmp, ==, tmp2); + g_free (tmp2); + + tmp2 = g_strdup_printf (TEST_KEYFILES_DIR "/test-key-and-cert.pem"); tmp = nm_setting_802_1x_get_client_cert_path (s_8021x); - g_assert (g_strcmp0 (tmp, "test-key-and-cert.pem") == 0); + g_assert_cmpstr (tmp, ==, tmp2); tmp = nm_setting_802_1x_get_private_key_path (s_8021x); - g_assert (g_strcmp0 (tmp, "test-key-and-cert.pem") == 0); + g_assert_cmpstr (tmp, ==, tmp2); + g_free (tmp2); g_object_unref (connection); } @@ -2153,16 +2411,23 @@ create_wired_tls_connection (NMSetting8021xCKScheme scheme) return connection; } +static char * +get_path (const char *file, gboolean relative) +{ + return relative ? g_path_get_basename (file) : g_strdup (file); +} + static void test_write_wired_8021x_tls_connection_path (void) { NMConnection *connection; - char *tmp; + char *tmp, *tmp2; gboolean success; NMConnection *reread; char *testfile = NULL; GError *error = NULL; GKeyFile *keyfile; + gboolean relative = FALSE; connection = create_wired_tls_connection (NM_SETTING_802_1X_CK_SCHEME_PATH); g_assert (connection != NULL); @@ -2200,12 +2465,22 @@ test_write_wired_8021x_tls_connection_path (void) g_assert (success); } + /* Depending on whether this test is being run from 'make check' or + * 'make distcheck' we might be using relative paths (check) or + * absolute ones (distcheck). + */ + tmp2 = g_path_get_dirname (testfile); + if (g_strcmp0 (tmp2, TEST_KEYFILES_DIR) == 0) + relative = TRUE; + /* CA cert */ tmp = g_key_file_get_string (keyfile, NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_CA_CERT, NULL); - g_assert (g_strcmp0 (tmp, TEST_WIRED_TLS_CA_CERT) == 0); + tmp2 = get_path (TEST_WIRED_TLS_CA_CERT, relative); + g_assert_cmpstr (tmp, ==, tmp2); + g_free (tmp2); g_free (tmp); /* Client cert */ @@ -2213,7 +2488,9 @@ test_write_wired_8021x_tls_connection_path (void) NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_CLIENT_CERT, NULL); - g_assert (g_strcmp0 (tmp, TEST_WIRED_TLS_CLIENT_CERT) == 0); + tmp2 = get_path (TEST_WIRED_TLS_CLIENT_CERT, relative); + g_assert_cmpstr (tmp, ==, tmp2); + g_free (tmp2); g_free (tmp); /* Private key */ @@ -2221,7 +2498,9 @@ test_write_wired_8021x_tls_connection_path (void) NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PRIVATE_KEY, NULL); - g_assert (g_strcmp0 (tmp, TEST_WIRED_TLS_PRIVKEY) == 0); + tmp2 = get_path (TEST_WIRED_TLS_PRIVKEY, relative); + g_assert_cmpstr (tmp, ==, tmp2); + g_free (tmp2); g_free (tmp); g_key_file_free (keyfile); @@ -2334,12 +2613,18 @@ int main (int argc, char **argv) test_read_string_ssid (); test_write_string_ssid (); + test_read_intlist_ssid (); + test_write_intlist_ssid (); + test_read_bt_dun_connection (); test_write_bt_dun_connection (); test_read_gsm_connection (); test_write_gsm_connection (); + test_read_wired_8021x_tls_blob_connection (); + test_read_wired_8021x_tls_bad_path_connection (); + test_read_wired_8021x_tls_old_connection (); test_read_wired_8021x_tls_new_connection (); test_write_wired_8021x_tls_connection_path (); diff --git a/src/settings/plugins/keyfile/utils.c b/src/settings/plugins/keyfile/utils.c index 7b93a245..f3531172 100644 --- a/src/settings/plugins/keyfile/utils.c +++ b/src/settings/plugins/keyfile/utils.c @@ -74,6 +74,11 @@ check_suffix (const char *base, const char *tag) return FALSE; } +#define SWP_TAG ".swp" +#define SWPX_TAG ".swpx" +#define PEM_TAG ".pem" +#define DER_TAG ".der" + gboolean nm_keyfile_plugin_utils_should_ignore_file (const char *filename) { @@ -88,6 +93,8 @@ nm_keyfile_plugin_utils_should_ignore_file (const char *filename) /* Ignore files with certain patterns */ if ( (check_prefix (base, ".") && check_suffix (base, SWP_TAG)) /* vim temporary files: .filename.swp */ || (check_prefix (base, ".") && check_suffix (base, SWPX_TAG)) /* vim temporary files: .filename.swpx */ + || check_suffix (base, PEM_TAG) /* 802.1x certificates and keys */ + || check_suffix (base, DER_TAG) /* 802.1x certificates and keys */ || check_mkstemp_suffix (base) /* temporary files created by mkstemp() */ || base[strlen (base) - 1] == '~') ignore = TRUE; diff --git a/src/settings/plugins/keyfile/writer.c b/src/settings/plugins/keyfile/writer.c index eeb14556..060093ce 100644 --- a/src/settings/plugins/keyfile/writer.c +++ b/src/settings/plugins/keyfile/writer.c @@ -668,6 +668,16 @@ cert_writer (GKeyFile *file, if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH) { path = objtype->path_func (NM_SETTING_802_1X (setting)); g_assert (path); + + /* If the path is rooted in the keyfile directory, just use a + * relative path instead of an absolute one. + */ + if (g_str_has_prefix (path, keyfile_dir)) { + path += strlen (keyfile_dir); + while (*path == '/') + path++; + } + g_key_file_set_string (file, setting_name, key, path); } else if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) { const GByteArray *blob; diff --git a/src/supplicant-manager/nm-supplicant-config.c b/src/supplicant-manager/nm-supplicant-config.c index 81d68bb3..c651e0fa 100644 --- a/src/supplicant-manager/nm-supplicant-config.c +++ b/src/supplicant-manager/nm-supplicant-config.c @@ -451,7 +451,7 @@ add_string_val (NMSupplicantConfig *self, return success; } -#define ADD_STRING_LIST_VAL(setting, setting_name, field, field_plural, name, ucase, secret) \ +#define ADD_STRING_LIST_VAL(setting, setting_name, field, field_plural, name, separator, ucase, secret) \ if (nm_setting_##setting_name##_get_num_##field_plural (setting)) { \ guint32 k; \ GString *str = g_string_new (NULL); \ @@ -460,7 +460,7 @@ add_string_val (NMSupplicantConfig *self, if (!str->len) { \ g_string_append (str, item); \ } else { \ - g_string_append_c (str, ' '); \ + g_string_append_c (str, separator); \ g_string_append (str, item); \ } \ } \ @@ -636,9 +636,9 @@ nm_supplicant_config_add_setting_wireless_security (NMSupplicantConfig *self, if ( !strcmp (key_mgmt, "wpa-none") || !strcmp (key_mgmt, "wpa-psk") || !strcmp (key_mgmt, "wpa-eap")) { - ADD_STRING_LIST_VAL (setting, wireless_security, proto, protos, "proto", TRUE, FALSE); - ADD_STRING_LIST_VAL (setting, wireless_security, pairwise, pairwise, "pairwise", TRUE, FALSE); - ADD_STRING_LIST_VAL (setting, wireless_security, group, groups, "group", TRUE, FALSE); + ADD_STRING_LIST_VAL (setting, wireless_security, proto, protos, "proto", ' ', TRUE, FALSE); + ADD_STRING_LIST_VAL (setting, wireless_security, pairwise, pairwise, "pairwise", ' ', TRUE, FALSE); + ADD_STRING_LIST_VAL (setting, wireless_security, group, groups, "group", ' ', TRUE, FALSE); } /* WEP keys if required */ @@ -742,7 +742,7 @@ nm_supplicant_config_add_setting_8021x (NMSupplicantConfig *self, nm_supplicant_config_set_ap_scan (self, 0); } - ADD_STRING_LIST_VAL (setting, 802_1x, eap_method, eap_methods, "eap", TRUE, FALSE); + ADD_STRING_LIST_VAL (setting, 802_1x, eap_method, eap_methods, "eap", ' ', TRUE, FALSE); /* Check for PEAP + GTC */ num_eap = nm_setting_802_1x_get_num_eap_methods (setting); @@ -864,6 +864,18 @@ nm_supplicant_config_add_setting_8021x (NMSupplicantConfig *self, break; } + /* Subject match */ + value = nm_setting_802_1x_get_subject_match (setting); + if (!add_string_val (self, value, "subject_match", FALSE, FALSE)) + return FALSE; + value = nm_setting_802_1x_get_phase2_subject_match (setting); + if (!add_string_val (self, value, "subject_match2", FALSE, FALSE)) + return FALSE; + + /* altSubjectName match */ + ADD_STRING_LIST_VAL (setting, 802_1x, altsubject_match, altsubject_matches, "altsubject_match", ';', FALSE, FALSE); + ADD_STRING_LIST_VAL (setting, 802_1x, phase2_altsubject_match, phase2_altsubject_matches, "altsubject_match2", ';', FALSE, FALSE); + /* Private key */ added = FALSE; switch (nm_setting_802_1x_get_private_key_scheme (setting)) { diff --git a/src/supplicant-manager/nm-supplicant-interface.c b/src/supplicant-manager/nm-supplicant-interface.c index e9e58f39..857cde51 100644 --- a/src/supplicant-manager/nm-supplicant-interface.c +++ b/src/supplicant-manager/nm-supplicant-interface.c @@ -467,7 +467,8 @@ interface_add_done (NMSupplicantInterface *self, char *path) G_CALLBACK (wpas_iface_properties_changed), self, NULL); - dbus_g_proxy_add_signal (priv->iface_proxy, "ScanDone", G_TYPE_INVALID); + dbus_g_proxy_add_signal (priv->iface_proxy, "ScanDone", + G_TYPE_BOOLEAN, G_TYPE_INVALID); dbus_g_proxy_connect_signal (priv->iface_proxy, "ScanDone", G_CALLBACK (wpas_iface_scan_done), self, @@ -475,9 +476,11 @@ interface_add_done (NMSupplicantInterface *self, char *path) dbus_g_object_register_marshaller (_nm_marshal_VOID__STRING_BOXED, G_TYPE_NONE, - G_TYPE_STRING, DBUS_TYPE_G_MAP_OF_VARIANT, + DBUS_TYPE_G_OBJECT_PATH, DBUS_TYPE_G_MAP_OF_VARIANT, G_TYPE_INVALID); - dbus_g_proxy_add_signal (priv->iface_proxy, "BSSAdded", G_TYPE_INVALID); + dbus_g_proxy_add_signal (priv->iface_proxy, "BSSAdded", + DBUS_TYPE_G_OBJECT_PATH, DBUS_TYPE_G_MAP_OF_VARIANT, + G_TYPE_INVALID); dbus_g_proxy_connect_signal (priv->iface_proxy, "BSSAdded", G_CALLBACK (wpas_iface_bss_added), self, @@ -551,6 +554,9 @@ interface_add_cb (DBusGProxy *proxy, /* Interface already added, just get its object path */ interface_get (info->interface); } else if ( g_error_matches (error, DBUS_GERROR, DBUS_GERROR_SERVICE_UNKNOWN) + || g_error_matches (error, DBUS_GERROR, DBUS_GERROR_SPAWN_EXEC_FAILED) + || g_error_matches (error, DBUS_GERROR, DBUS_GERROR_SPAWN_FORK_FAILED) + || g_error_matches (error, DBUS_GERROR, DBUS_GERROR_SPAWN_FAILED) || dbus_g_error_has_name (error, DBUS_ERROR_SPAWN_SERVICE_NOT_FOUND)) { /* Supplicant wasn't running and could be launched via service * activation. Wait for it to start by moving back to the INIT @@ -682,12 +688,13 @@ nm_supplicant_interface_disconnect (NMSupplicantInterface * self) if (!priv->iface_proxy) return; - /* Don't try to disconnect if the supplicant interface is already disconnected */ - if ( priv->state == NM_SUPPLICANT_INTERFACE_STATE_DISCONNECTED - || priv->state == NM_SUPPLICANT_INTERFACE_STATE_INACTIVE) { - g_free (priv->net_path); - priv->net_path = NULL; - return; + /* Disconnect from the current AP */ + if ( (priv->state >= NM_SUPPLICANT_INTERFACE_STATE_SCANNING) + && (priv->state <= NM_SUPPLICANT_INTERFACE_STATE_COMPLETED)) { + dbus_g_proxy_begin_call (priv->iface_proxy, "Disconnect", + disconnect_cb, + NULL, NULL, + G_TYPE_INVALID); } /* Remove any network that was added by NetworkManager */ @@ -700,11 +707,6 @@ nm_supplicant_interface_disconnect (NMSupplicantInterface * self) g_free (priv->net_path); priv->net_path = NULL; } - - dbus_g_proxy_begin_call (priv->iface_proxy, "Disconnect", - disconnect_cb, - NULL, NULL, - G_TYPE_INVALID); } static void diff --git a/src/supplicant-manager/nm-supplicant-settings-verify.c b/src/supplicant-manager/nm-supplicant-settings-verify.c index 0372fd93..aea5bfec 100644 --- a/src/supplicant-manager/nm-supplicant-settings-verify.c +++ b/src/supplicant-manager/nm-supplicant-settings-verify.c @@ -102,6 +102,8 @@ static const struct Opt opt_table[] = { { "identity", TYPE_BYTES, 0, 0, FALSE, NULL }, { "password", TYPE_BYTES, 0, 0, FALSE, NULL }, { "ca_path", TYPE_BYTES, 0, 0, FALSE, NULL }, + { "subject_match", TYPE_BYTES, 0, 0, FALSE, NULL }, + { "altsubject_match", TYPE_BYTES, 0, 0, FALSE, NULL }, { "ca_cert", TYPE_BYTES, 0, 65536, FALSE, NULL }, { "client_cert", TYPE_BYTES, 0, 65536, FALSE, NULL }, { "private_key", TYPE_BYTES, 0, 65536, FALSE, NULL }, @@ -110,6 +112,8 @@ static const struct Opt opt_table[] = { { "phase2", TYPE_KEYWORD, 0, 0, TRUE, phase2_allowed }, { "anonymous_identity", TYPE_BYTES, 0, 0, FALSE, NULL }, { "ca_path2", TYPE_BYTES, 0, 0, FALSE, NULL }, + { "subject_match2", TYPE_BYTES, 0, 0, FALSE, NULL }, + { "altsubject_match2", TYPE_BYTES, 0, 0, FALSE, NULL }, { "ca_cert2", TYPE_BYTES, 0, 65536, FALSE, NULL }, { "client_cert2", TYPE_BYTES, 0, 65536, FALSE, NULL }, { "private_key2", TYPE_BYTES, 0, 65536, FALSE, NULL }, diff --git a/src/supplicant-manager/tests/test-supplicant-config.c b/src/supplicant-manager/tests/test-supplicant-config.c index d0868b5f..d92fb0d1 100644 --- a/src/supplicant-manager/tests/test-supplicant-config.c +++ b/src/supplicant-manager/tests/test-supplicant-config.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) 2008 - 2009 Red Hat, Inc. + * Copyright (C) 2008 - 2011 Red Hat, Inc. */ #include @@ -496,11 +496,9 @@ test_wifi_wpa_psk_types (void) int main (int argc, char **argv) { GError *error = NULL; - DBusGConnection *bus; char *base; g_type_init (); - bus = dbus_g_bus_get (DBUS_BUS_SESSION, NULL); if (!nm_utils_init (&error)) FAIL ("nm-utils-init", "failed to initialize libnm-util: %s", error->message); diff --git a/src/tests/test-dhcp-options.c b/src/tests/test-dhcp-options.c index aa85f87e..9463ed5b 100644 --- a/src/tests/test-dhcp-options.c +++ b/src/tests/test-dhcp-options.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) 2008 - 2010 Red Hat, Inc. + * Copyright (C) 2008 - 2011 Red Hat, Inc. * */ @@ -779,13 +779,11 @@ test_ip4_prefix_classless (const char *client) int main (int argc, char **argv) { GError *error = NULL; - DBusGConnection *bus; char *base; const char *clients[2][2] = { {DHCLIENT_PATH, "dhclient"}, {DHCPCD_PATH, "dhcpcd"} }; guint32 i; g_type_init (); - bus = dbus_g_bus_get (DBUS_BUS_SESSION, NULL); if (!nm_utils_init (&error)) FAIL ("nm-utils-init", "failed to initialize libnm-util: %s", error->message); diff --git a/src/vpn-manager/nm-vpn-connection.c b/src/vpn-manager/nm-vpn-connection.c index cf6135a6..067b2dce 100644 --- a/src/vpn-manager/nm-vpn-connection.c +++ b/src/vpn-manager/nm-vpn-connection.c @@ -53,6 +53,17 @@ G_DEFINE_TYPE (NMVPNConnection, nm_vpn_connection, NM_TYPE_VPN_CONNECTION_BASE) +typedef enum { + /* Only system secrets */ + SECRETS_REQ_SYSTEM = 0, + /* All existing secrets including agent secrets */ + SECRETS_REQ_EXISTING = 1, + /* New secrets required; ask an agent */ + SECRETS_REQ_NEW = 2, + /* Placeholder for bounds checking */ + SECRETS_REQ_LAST +} SecretsReq; + typedef struct { gboolean disposed; @@ -61,6 +72,7 @@ typedef struct { gboolean user_requested; gulong user_uid; guint32 secrets_id; + SecretsReq secrets_idx; char *username; NMDevice *parent_dev; @@ -98,6 +110,8 @@ enum { LAST_PROP }; +static void get_secrets (NMVPNConnection *self, SecretsReq secrets_idx); + static void nm_vpn_connection_set_vpn_state (NMVPNConnection *connection, NMVPNConnectionState vpn_state, @@ -792,84 +806,50 @@ nm_vpn_connection_disconnect (NMVPNConnection *connection, /******************************************************************************/ static void -vpn_secrets_cb (NMSettingsConnection *connection, - guint32 call_id, - const char *agent_username, - const char *setting_name, - GError *error, - gpointer user_data) -{ - NMVPNConnection *self = NM_VPN_CONNECTION (user_data); - NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (self); - - g_return_if_fail (NM_CONNECTION (connection) == priv->connection); - g_return_if_fail (call_id == priv->secrets_id); - - priv->secrets_id = 0; - - if (error) - nm_vpn_connection_fail (self, NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS); - else - really_activate (self, agent_username); -} - -static void -connection_need_secrets_cb (DBusGProxy *proxy, - char *setting_name, - GError *error, - gpointer user_data) +plugin_need_secrets_cb (DBusGProxy *proxy, + char *setting_name, + GError *error, + gpointer user_data) { NMVPNConnection *self = NM_VPN_CONNECTION (user_data); NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (self); - GError *local = NULL; if (error) { - nm_log_err (LOGD_VPN, "NeedSecrets failed: %s %s", + nm_log_err (LOGD_VPN, "(%s/%s) plugin NeedSecrets request #%d failed: %s %s", + nm_connection_get_uuid (priv->connection), + nm_connection_get_id (priv->connection), + priv->secrets_idx + 1, g_quark_to_string (error->domain), error->message); nm_vpn_connection_fail (self, NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS); return; } - if (!setting_name || !strlen (setting_name)) { - nm_log_dbg (LOGD_VPN, "(%s/%s) service indicated no additional secrets required", - nm_connection_get_uuid (priv->connection), - nm_connection_get_id (priv->connection)); + if (setting_name && strlen (setting_name)) { + /* More secrets required */ + nm_log_dbg (LOGD_VPN, "(%s/%s) service indicated additional secrets required", + nm_connection_get_uuid (priv->connection), + nm_connection_get_id (priv->connection)); - /* No secrets required */ - really_activate (self, priv->username); + get_secrets (self, priv->secrets_idx + 1); return; } - nm_log_dbg (LOGD_VPN, "(%s/%s) service indicated additional '%s' secrets required", - nm_connection_get_uuid (priv->connection), - nm_connection_get_id (priv->connection), - setting_name); + nm_log_dbg (LOGD_VPN, "(%s/%s) service indicated no additional secrets required", + nm_connection_get_uuid (priv->connection), + nm_connection_get_id (priv->connection)); - priv->secrets_id = nm_settings_connection_get_secrets (NM_SETTINGS_CONNECTION (priv->connection), - priv->user_requested, - priv->user_uid, - setting_name, - NM_SETTINGS_GET_SECRETS_FLAG_ALLOW_INTERACTION, - NULL, - vpn_secrets_cb, - self, - &local); - if (!priv->secrets_id) { - if (local) - nm_log_err (LOGD_VPN, "failed to get secrets: (%d) %s", local->code, local->message); - nm_vpn_connection_fail (self, NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS); - g_clear_error (&local); - } + /* No secrets required; we can start the VPN */ + really_activate (self, priv->username); } static void -existing_secrets_cb (NMSettingsConnection *connection, - guint32 call_id, - const char *agent_username, - const char *setting_name, - GError *error, - gpointer user_data) +get_secrets_cb (NMSettingsConnection *connection, + guint32 call_id, + const char *agent_username, + const char *setting_name, + GError *error, + gpointer user_data) { NMVPNConnection *self = NM_VPN_CONNECTION (user_data); NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (self); @@ -881,57 +861,77 @@ existing_secrets_cb (NMSettingsConnection *connection, priv->secrets_id = 0; if (error) { - nm_log_err (LOGD_VPN, "Failed to request existing VPN secrets #2: (%s) %s", - g_quark_to_string (error->domain), - error->message); + nm_log_err (LOGD_VPN, "Failed to request VPN secrets #%d: (%d) %s", + priv->secrets_idx + 1, error->code, error->message); nm_vpn_connection_fail (self, NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS); } else { nm_log_dbg (LOGD_VPN, "(%s/%s) asking service if additional secrets are required", - nm_connection_get_uuid (priv->connection), - nm_connection_get_id (priv->connection)); + nm_connection_get_uuid (priv->connection), + nm_connection_get_id (priv->connection)); /* Cache the username for later */ - g_free (priv->username); - priv->username = g_strdup (agent_username); + if (agent_username) { + g_free (priv->username); + priv->username = g_strdup (agent_username); + } /* Ask the VPN service if more secrets are required */ hash = _hash_with_username (priv->connection, priv->username); org_freedesktop_NetworkManager_VPN_Plugin_need_secrets_async (priv->proxy, hash, - connection_need_secrets_cb, + plugin_need_secrets_cb, self); g_hash_table_destroy (hash); } } static void -get_existing_secrets (NMVPNConnection *self) +get_secrets (NMVPNConnection *self, SecretsReq secrets_idx) { NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (self); + NMSettingsGetSecretsFlags flags = NM_SETTINGS_GET_SECRETS_FLAG_NONE; GError *error = NULL; + gboolean filter_by_uid = priv->user_requested; + + g_return_if_fail (secrets_idx < SECRETS_REQ_LAST); + priv->secrets_idx = secrets_idx; - nm_log_dbg (LOGD_VPN, "(%s/%s) requesting existing VPN secrets", + nm_log_dbg (LOGD_VPN, "(%s/%s) requesting VPN secrets pass #%d", nm_connection_get_uuid (priv->connection), - nm_connection_get_id (priv->connection)); + nm_connection_get_id (priv->connection), + priv->secrets_idx + 1); + + switch (priv->secrets_idx) { + case SECRETS_REQ_SYSTEM: + flags = NM_SETTINGS_GET_SECRETS_FLAG_ONLY_SYSTEM; + filter_by_uid = FALSE; + break; + case SECRETS_REQ_EXISTING: + flags = NM_SETTINGS_GET_SECRETS_FLAG_NONE; + break; + case SECRETS_REQ_NEW: + flags = NM_SETTINGS_GET_SECRETS_FLAG_ALLOW_INTERACTION; + break; + default: + g_assert_not_reached (); + } - /* Just get existing secrets if any so we can ask the VPN service if - * any more are required. - */ priv->secrets_id = nm_settings_connection_get_secrets (NM_SETTINGS_CONNECTION (priv->connection), - priv->user_requested, + filter_by_uid, priv->user_uid, NM_SETTING_VPN_SETTING_NAME, - NM_SETTINGS_GET_SECRETS_FLAG_NONE, + flags, NULL, - existing_secrets_cb, + get_secrets_cb, self, &error); - if (priv->secrets_id == 0) { - nm_log_err (LOGD_VPN, "Failed to request existing VPN secrets #1: (%s) %s", - g_quark_to_string (error->domain), - error->message); - g_error_free (error); + if (!priv->secrets_id) { + if (error) { + nm_log_err (LOGD_VPN, "failed to request VPN secrets #%d: (%d) %s", + priv->secrets_idx + 1, error->code, error->message); + } nm_vpn_connection_fail (self, NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS); + g_clear_error (&error); } } @@ -1002,10 +1002,16 @@ connection_state_changed (NMVPNConnection *self, nm_settings_connection_cancel_secrets (NM_SETTINGS_CONNECTION (priv->connection), priv->secrets_id); priv->secrets_id = 0; } + priv->secrets_idx = SECRETS_REQ_SYSTEM; switch (state) { case NM_VPN_CONNECTION_STATE_NEED_AUTH: - get_existing_secrets (self); + /* Kick off the secrets requests; first we get existing system secrets + * and ask the plugin if these are sufficient, next we get all existing + * secrets from system and from user agents and ask the plugin again, + * and last we ask the user for new secrets if required. + */ + get_secrets (self, SECRETS_REQ_SYSTEM); break; case NM_VPN_CONNECTION_STATE_ACTIVATED: /* Secrets no longer needed now that we're connected */ diff --git a/test/nm-tool.c b/test/nm-tool.c index ffe70af9..9ce44f88 100644 --- a/test/nm-tool.c +++ b/test/nm-tool.c @@ -39,9 +39,7 @@ #include #include #include -#if WITH_WIMAX #include -#endif #include #include #include @@ -198,7 +196,6 @@ detail_access_point (gpointer data, gpointer user_data) g_free (tmp); } -#if WITH_WIMAX static const char * wimax_network_type_to_str (NMWimaxNspNetworkType type) { @@ -238,7 +235,6 @@ detail_nsp (gpointer data, gpointer user_data) g_free (label); g_free (data_str); } -#endif static gchar * ip4_address_as_string (guint32 ip) @@ -370,10 +366,8 @@ detail_device (gpointer data, gpointer user_data) print_string ("Type", "Mobile Broadband (unknown)"); } else if (NM_IS_DEVICE_BT (device)) print_string ("Type", "Bluetooth"); -#if WITH_WIMAX else if (NM_IS_DEVICE_WIMAX (device)) print_string ("Type", "WiMAX"); -#endif print_string ("Driver", nm_device_get_driver (device) ? nm_device_get_driver (device) : "(unknown)"); @@ -390,10 +384,8 @@ detail_device (gpointer data, gpointer user_data) tmp = g_strdup (nm_device_ethernet_get_hw_address (NM_DEVICE_ETHERNET (device))); else if (NM_IS_DEVICE_WIFI (device)) tmp = g_strdup (nm_device_wifi_get_hw_address (NM_DEVICE_WIFI (device))); -#if WITH_WIMAX else if (NM_IS_DEVICE_WIMAX (device)) tmp = g_strdup (nm_device_wimax_get_hw_address (NM_DEVICE_WIMAX (device))); -#endif if (tmp) { print_string ("HW Address", tmp); @@ -459,7 +451,6 @@ detail_device (gpointer data, gpointer user_data) print_string (" Carrier", "on"); else print_string (" Carrier", "off"); -#if WITH_WIMAX } else if (NM_IS_DEVICE_WIMAX (device)) { NMDeviceWimax *wimax = NM_DEVICE_WIMAX (device); NMWimaxNsp *active_nsp = NULL; @@ -520,7 +511,6 @@ detail_device (gpointer data, gpointer user_data) nsps = nm_device_wimax_get_nsps (NM_DEVICE_WIMAX (device)); if (nsps && nsps->len) g_ptr_array_foreach ((GPtrArray *) nsps, detail_nsp, (gpointer) active_name); -#endif } /* IP Setup info */ -- cgit 1.3.0-6-gf8a5