From 485d149fe80915d94ed49ea6c2c0552cf7a3e79a Mon Sep 17 00:00:00 2001 From: Michael Biebl Date: Fri, 28 Oct 2011 23:04:16 +0200 Subject: Imported Upstream version 0.9.1.95 --- Makefile.in | 8 + NEWS | 118 + TODO | 120 ++ callouts/Makefile.in | 8 + callouts/tests/Makefile.in | 8 + cli/Makefile.in | 8 + cli/src/Makefile.in | 8 + cli/src/connections.c | 107 +- cli/src/devices.c | 67 +- cli/src/network-manager.c | 9 +- cli/src/settings.c | 221 +- cli/src/utils.c | 3 +- config.h.in | 12 + configure | 365 +++- configure.ac | 52 +- data/Makefile.in | 8 + docs/Makefile.in | 8 + docs/api/Makefile.in | 8 + 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 | 36 +- docs/api/html/spec.html | 132 +- docs/api/spec.html | 132 +- docs/api/version.xml | 2 +- docs/libnm-glib/Makefile.am | 2 +- docs/libnm-glib/Makefile.in | 10 +- docs/libnm-glib/html/NMDevice.html | 5 +- docs/libnm-glib/html/NMRemoteConnection.html | 12 +- docs/libnm-glib/html/NMRemoteSettings.html | 7 +- docs/libnm-glib/html/NMSecretAgent.html | 36 +- docs/libnm-glib/html/ch02.html | 2 +- docs/libnm-glib/html/index.html | 2 +- docs/libnm-util/Makefile.in | 8 + docs/libnm-util/html/NMConnection.html | 93 + docs/libnm-util/html/NMSetting.html | 85 +- docs/libnm-util/html/api-index-full.html | 431 +--- docs/libnm-util/html/ch01.html | 2 +- docs/libnm-util/html/index.sgml | 5 + docs/libnm-util/html/libnm-util-nm-utils.html | 12 +- docs/libnm-util/html/libnm-util.devhelp | 5 + docs/libnm-util/html/libnm-util.devhelp2 | 5 + docs/libnm-util/libnm-util-sections.txt | 4 + examples/C/Makefile.in | 8 + examples/C/glib/Makefile.in | 8 + examples/C/qt/Makefile.in | 8 + examples/C/qt/add-connection-wired.cpp | 2 + examples/Makefile.in | 8 + examples/python/Makefile.am | 5 +- examples/python/Makefile.in | 11 +- include/Makefile.in | 8 + include/nm-glib-compat.h | 15 +- include/nm-version.h | 2 +- include/wireless-helper.h | 2 +- initscript/Arch/Makefile.in | 8 + initscript/Debian/Makefile.in | 8 + initscript/Gentoo/Makefile.in | 8 + initscript/Makefile.in | 8 + initscript/Mandriva/Makefile.in | 8 + initscript/RedHat/Makefile.in | 8 + initscript/SUSE/Makefile.in | 8 + initscript/Slackware/Makefile.in | 8 + initscript/linexa/Makefile.in | 8 + initscript/paldo/Makefile.in | 8 + introspection/Makefile.in | 8 + introspection/all.xml.in | 1 + libnm-glib/Makefile.in | 8 + libnm-glib/nm-device.c | 5 +- libnm-glib/nm-object.c | 25 +- libnm-glib/nm-remote-connection.c | 15 +- libnm-glib/nm-remote-settings.c | 10 +- libnm-glib/nm-secret-agent.c | 18 +- libnm-glib/nm-secret-agent.h | 18 +- libnm-glib/tests/Makefile.in | 8 + libnm-util/Makefile.am | 2 +- libnm-util/Makefile.in | 10 +- libnm-util/libnm-util.ver | 3 + libnm-util/nm-connection.c | 90 +- libnm-util/nm-connection.h | 6 + libnm-util/nm-param-spec-specialized.c | 7 +- libnm-util/nm-setting-gsm.c | 2 +- libnm-util/nm-setting-serial.c | 5 +- libnm-util/nm-setting-vpn.c | 25 + libnm-util/nm-setting.c | 59 +- libnm-util/nm-setting.h | 26 +- libnm-util/nm-utils.c | 10 +- libnm-util/tests/Makefile.in | 8 + libnm-util/tests/certs/Makefile.in | 8 + man/Makefile.in | 8 + man/nmcli.1 | 26 +- man/nmcli.1.in | 26 +- marshallers/Makefile.in | 8 + po/de.po | 340 +-- po/es.po | 601 +++--- po/fi.po | 1897 +++++++++++++++- po/gl.po | 1666 +++++++++----- po/hr.po | 2268 ++++++++++++++++++-- po/pl.po | 918 ++++---- po/sl.po | 1567 ++++++++------ policy/Makefile.in | 8 + policy/org.freedesktop.NetworkManager.policy | 24 + src/Makefile.am | 6 + src/Makefile.in | 68 + src/NetworkManagerUtils.c | 4 +- src/backends/Makefile.in | 8 + src/backends/NetworkManagerGeneric.c | 16 +- src/bluez-manager/Makefile.in | 8 + src/dhcp-manager/Makefile.in | 8 + src/dhcp-manager/nm-dhcp-client.c | 2 +- src/dhcp-manager/tests/Makefile.in | 8 + src/dns-manager/Makefile.in | 8 + src/dns-manager/nm-dns-bind.c | 3 +- src/dns-manager/nm-dns-dnsmasq.c | 73 +- src/dns-manager/nm-dns-manager.c | 3 +- src/dns-manager/nm-dns-plugin.c | 6 +- src/dns-manager/nm-dns-plugin.h | 6 +- src/dnsmasq-manager/Makefile.in | 8 + src/ip6-manager/Makefile.in | 8 + src/ip6-manager/nm-ip6-manager.c | 59 +- src/logging/Makefile.in | 8 + src/logging/nm-logging.c | 7 +- src/main.c | 185 +- src/modem-manager/Makefile.in | 8 + src/modem-manager/nm-modem-manager.c | 29 +- src/modem-manager/nm-modem.c | 14 +- src/nm-config.c | 247 +++ src/nm-config.h | 55 + src/nm-crash-logger.c | 1 + src/nm-device-ethernet.c | 96 +- src/nm-device-olpc-mesh.c | 12 +- src/nm-device-wifi.c | 267 +-- src/nm-device.c | 54 +- src/nm-manager.c | 67 +- src/nm-manager.h | 7 +- src/nm-netlink-compat.c | 105 + src/nm-netlink-compat.h | 207 ++ src/nm-netlink-monitor.c | 98 +- src/nm-netlink-monitor.h | 4 +- src/nm-netlink-utils.c | 426 ++++ src/nm-netlink-utils.h | 80 + src/nm-policy.c | 20 +- src/nm-system.c | 1014 ++++----- src/nm-system.h | 35 +- src/nm-udev-manager.c | 76 +- src/nm-wifi-ap.c | 99 +- src/nm-wifi-ap.h | 9 +- src/ppp-manager/Makefile.in | 8 + src/ppp-manager/nm-ppp-manager.c | 4 +- src/settings/Makefile.in | 8 + src/settings/nm-settings-connection.c | 289 ++- src/settings/nm-settings.c | 62 +- src/settings/nm-settings.h | 2 +- src/settings/plugins/Makefile.in | 8 + src/settings/plugins/ifcfg-rh/Makefile.in | 8 + src/settings/plugins/ifcfg-rh/plugin.c | 6 +- src/settings/plugins/ifcfg-rh/reader.c | 4 +- src/settings/plugins/ifcfg-rh/shvar.c | 20 +- src/settings/plugins/ifcfg-rh/tests/Makefile.in | 8 + .../ifcfg-rh/tests/network-scripts/Makefile.in | 8 + .../plugins/ifcfg-rh/tests/test-ifcfg-rh.c | 202 ++ src/settings/plugins/ifcfg-rh/writer.c | 3 +- src/settings/plugins/ifcfg-suse/Makefile.in | 8 + src/settings/plugins/ifnet/Makefile.in | 8 + src/settings/plugins/ifnet/connection_parser.c | 18 +- src/settings/plugins/ifnet/net_utils.c | 2 +- src/settings/plugins/ifnet/tests/Makefile.in | 8 + src/settings/plugins/ifnet/tests/net | 2 + src/settings/plugins/ifnet/tests/test_all.c | 48 +- .../plugins/ifnet/tests/wpa_supplicant.conf | 3 +- src/settings/plugins/ifupdown/Makefile.in | 8 + src/settings/plugins/ifupdown/tests/Makefile.in | 8 + src/settings/plugins/keyfile/Makefile.in | 8 + src/settings/plugins/keyfile/reader.c | 176 +- src/settings/plugins/keyfile/tests/Makefile.in | 8 + .../plugins/keyfile/tests/keyfiles/Makefile.am | 2 + .../plugins/keyfile/tests/keyfiles/Makefile.in | 10 + .../keyfile/tests/keyfiles/Test_Intlike_SSID | 11 + .../keyfile/tests/keyfiles/Test_Intlike_SSID_2 | 11 + src/settings/plugins/keyfile/tests/test-keyfile.c | 246 +++ src/settings/plugins/keyfile/writer.c | 45 +- src/settings/tests/Makefile.in | 8 + src/supplicant-manager/Makefile.in | 8 + src/supplicant-manager/nm-supplicant-config.c | 2 +- src/supplicant-manager/nm-supplicant-manager.c | 69 +- src/supplicant-manager/tests/Makefile.in | 8 + src/tests/Makefile.in | 8 + src/vpn-manager/Makefile.in | 8 + src/vpn-manager/nm-vpn-connection-base.c | 16 +- src/vpn-manager/nm-vpn-connection-base.h | 5 +- src/vpn-manager/nm-vpn-connection.c | 62 +- src/vpn-manager/nm-vpn-connection.h | 3 + src/vpn-manager/nm-vpn-manager.c | 24 +- src/vpn-manager/nm-vpn-manager.h | 8 +- src/vpn-manager/nm-vpn-service.c | 5 +- src/vpn-manager/nm-vpn-service.h | 3 +- src/wimax/Makefile.in | 8 + src/wimax/iwmxsdk.c | 77 +- src/wimax/iwmxsdk.h | 2 + src/wimax/nm-device-wimax.c | 115 +- test/Makefile.in | 8 + tools/Makefile.in | 8 + 203 files changed, 12592 insertions(+), 4870 deletions(-) create mode 100644 src/nm-config.c create mode 100644 src/nm-config.h create mode 100644 src/nm-netlink-compat.c create mode 100644 src/nm-netlink-compat.h create mode 100644 src/nm-netlink-utils.c create mode 100644 src/nm-netlink-utils.h create mode 100644 src/settings/plugins/keyfile/tests/keyfiles/Test_Intlike_SSID create mode 100644 src/settings/plugins/keyfile/tests/keyfiles/Test_Intlike_SSID_2 diff --git a/Makefile.in b/Makefile.in index da04d938..35557071 100644 --- a/Makefile.in +++ b/Makefile.in @@ -235,8 +235,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/NEWS b/NEWS index b27a9b2e..63f39e01 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,121 @@ +============================================== +NetworkManager-0.9.2 +Overview of changes since NetworkManager-0.9.0 +============================================== + +* Support for libnl2 and libnl3 and various memory leak fixes +* Bug fixes for the ifnet config plugin +* Ensure IPv6 link-local DNS servers work correctly in the dnsmasq DNS plugin +* Add ability for nmcli to delete connections +* Fix setup of connection sharing with newer iptables versions +* Ensure WiMAX activation emits correct signals (fixes initial signal strength) +* Fix an issue with duplicated keyfile connections +* Ensure the 'novj' options is passed through to pppd +* Store timestamps for VPN connections too +* Fix a crash when deleting default wired connections +* Fix a security issue in the ifcfg-rh plugin with newlines in file names +* Fix the "SpecificObject" property for active VPN connection objects +* Improve handling of rfkill on some platforms +* Spaces no longer used in ifcfg config file names +* IPv6 RAs are now accepted when forwarding is configured +* dnsmasq local caching nameserver plugin cache size bumped to 400 entries (from 150) +* Fix handling of SSIDs in the keyfile plugin +* Fix some GObject Introspection annotations in libnm-glib and libnm-util +* Fix setting hostnames from DHCP + + +============================================== +NetworkManager-0.9.0 +Overview of changes since NetworkManager-0.8.x +============================================== + +This is a new stable release of NetworkManager. Notable changes include: + +* All connections and configuration now managed by NetworkManager +* Secrets for any connection can now be stored in user session or by NetworkManager +* All secrets can now be requested each time +* Fast User Switching support +* Support for WiMAX mobile broadband +* Connections can now be restricted to one or more users +* Support for 802.1X certificate subject matching for greater security +* Requires wpa_supplicant 0.7 or later +* Better support for AP roaming using nl80211 and background scanning +* Simplified D-Bus API for easier client usage +* Support for GObject Introspection in libnm-glib and libnm-util + + +============================================== +NetworkManager-0.8.6 +Overview of changes since NetworkManager-0.8.4 +============================================== + +This is a new stable release of NetworkManager. Notable changes include: + +* Fix handling of WINS server address in libnm-glib +* Fix checks for s390 CTC device types +* Fix export of nm_device_get_ip_iface() in libnm-glib +* Fix export of IPv6 DNS GValue conversion functions in libnm-glib +* Recognize and manage platform 'gadget' devices +* Send only "short" hostname, not FQDN, to DHCP servers +* Allow "_" as a valid character for GSM APNs +* Handle shared connections in the ifnet plugin +* Fix Ad-Hoc frequency selection for user-created Ad-Hoc networks +* Allow failed connections to be retried when Ethernet carrier bounces +* Allow usage of paths for certificates and keys in the keyfile plugin +* Fix crash requesting system VPN secrets +* Add ability to blacklist certain MAC addresses for wired & wifi connections +* Ensure users are authorized to share wifi networks (CVE-2011-2176) + + +============================================== +NetworkManager-0.8.4 +Overview of changes since NetworkManager-0.8.2 +============================================== + +This is a new stable release of NetworkManager. Notable changes include: + +* Preliminary support for Exherbo Linux +* Logging fixes to suppress unnecessary messages +* Ensure removed devices are cleaned up +* Fix potential 64-bit crash updating timestamps +* IPv6 setup, routing, and compliance fixes +* Fix WWAN enable/disable handling +* Handle reverse DNS lookups with local caching nameserver configurations +* Ensure usable DNS configuration is written when NetworkManager quits +* No longer updates /etc/hosts when hostname changes +* Request WPAD option from DHCP servers +* Allow use of paths for certificates and keys in connection keyfiles +* Allow operation without any DHCP client installed +* Fix operation with newer versions of dnsmasq +* nmcli support for WWAN connections +* Persistent hostname sent to DHCP servers by default +* Allow disabing PPP support at build time +* Red Hat/Fedora ifcfg plugin fixes for handling S390 CTC device configuration +* Red Hat/Fedora ifcfg plugin fixes for handling IPADDR config items +* Shutdown crash fixes +* Memory leak fixes +* Documentation fixes and updates +* and much more... + +============================================== +NetworkManager-0.8.2 +Overview of changes since NetworkManager-0.8.1 +============================================== + +This is a new stable release of NetworkManager. Notable changes include: + +* Native local caching nameserver support using dnsmasq +* Automatically detect addition and removal of new VPN plugins +* Support for handling suspend/resume signals from UPower +* Ensure users are allowed to enable/disable WiFi and networking +* Ensure WiFi enable state is perserved across reboot and suspend +* Better handling of /etc/hosts and preservation of custom hostnames +* Support for the systemd session management service +* Better handling of 'keyfile' system connection errors +* Support for S390 network devices +* and much more... + + ============================================== NetworkManager-0.7.0 Overview of changes since NetworkManager-0.6.6 diff --git a/TODO b/TODO index 369be1e5..3b8438ac 100644 --- a/TODO +++ b/TODO @@ -495,3 +495,123 @@ a bridge or bond and shouldn't be automatically started by NetworkManager or displayed as separate connections in the user interface. TO BE CONTINUED + + +* Better Tablet/Mobile Behavior + +There are a few components to this: + +1) kernel driver and hardware capabilities: most mobile devices use periodic +background scanning to quickly determine whether a known SSID is available and +notify the connection manager to connect to it. This typically requires special +capabilities and good powersave/sleep support from the WiFi kernel driver. +There is a background scanning API in nl80211, but we need to determine how many +SSIDs each driver allows for background scanning, and based on that number, give +the driver the most recent N SSIDs. We still need to periodically wake the +device up and do a full scan just in case the user is near a known SSID that was +not in the N top recently used networks. This is also beneficial to normal +desktop use-cases. + +wpa_supplicant doesn't currently provide an explicit interface for sending SSIDs +to the driver for background scanning, but could simply send a list using +configured networks. However, NM currently does not send *all* configured +connections' SSIDs to the supplicant, so that's something we should do first +to optimize connection times. To do this, NM would need to order all networks +using the NM timestamp and convert that into a supplicant priority number, which +would need to be adjusted periodically when the timestamp was updated. This +would involve tracking each network (exposed by the supplicant as a D-Bus +object) and making sure they were added, deleted, and updated when the backing +NMConnection objects changed. One complication is that the supplicant +requires secrets for various network types when the network is added via D-Bus, +and NetworkManager might not have those secrets yet. We may need to modify +the supplicant allow for *all* secrets (PSKs, WEP keys, etc) to be requested +on-demand, not just EAP secrets like 802.1x passwords. We then need to fix +up the supplicant's D-Bus interface to actually send requests for secrets out +over D-Bus (like wpa_supplicant_eap_param_needed() does for the socket-based +control interface) and to handle the resulting reply from a D-Bus client like +wpa_supplicant_ctrl_iface_ctrl_rsp() does. + +With the secrets request stuff and priority handling in place, wpa_supplicant +would control network selection and roaming (based on the priorities NM gave it +of course) instead of NetworkManager itself, and hopefully lead to a faster WiFi +connection process. + +2) single-device-at-a-time with overlapping connections: this is also probably +the best route to go for desktop use-cases as well. Instead of bringing all +available connections up, only bring up the "best" connection at any given +time based on the current priority list (which is rougly Ethernet > WiFi > +3G/Bluetooth/WiMAX). However, to ensure seamless connectivity, when one +connection begins to degrade, the next-best connection should be started before +the current one is terminated, such that there is a small amount of overlap. +Consequently the same behavior should be used when a better connection becomes +available. This behavior should be suspended when special connections like +Internet Connection Sharing ones are started, where clearly the priorities +are different (ie, for Mobile Hotspot 3G > WiFi). + + +* IP over Infiniband (IPoIB) + +These interfaces are similar to Ethernet interfaces with a few distinct +differences: + + 1) they have 64-bit MAC addresses (GUIDs in Infiniband parlance) + 2) DHCP clients need to be modified to handle IPoIB + 3) they have a different ARP type and different L2 options + +By default the interfaces do not have IP capability, but they gain that +capability when certain kernel modules (ib_ipoib.ko) are loaded, which causes +the IP-capable interface is created. The IP-capable interfaces apparently have +ARPHRD_INFINIBAND set, which is likely what NM should use to identify them. + +One outstanding question is whether NM should (a) detect all Infiniband +interfaces and load ib_ipoib.ko only when there is a defined NMConnection for +an Infiniband interface, or (b) whether NM should automatically load ib_ipoib.ko +for every Infiniband interface, or (c) whether NM should only manage Infiniband +interfaces that already have associated IP-capable interfaces (ie, something +else is responsible for loading ib_ipoib.ko). Depending on our implementation, +(a) might not be possible, because if IPoIB connections are treated similar to +plain Ethernet connections, we may not have any information about whether a +specific NMConnection is Infiniband other than the MAC address. + +It turns out that on some distros other components (like system services) may +load ib_ipoib.ko for us. For exmaple, the 'rdma' package on Fedora/RHEL systems +contains /etc/rc.d/init.d/rdma which uses values in /etc/rdma/rdma.conf to load +ib_ipoib.ko at system startup if the user has requested it via IPOIB_LOAD=yes. +For the time being, if the some other component of the system loads IP for us, +NetworkManager should probably still recognize the Infiniband interface, but +leave it in unmanaged mode if there is no available IPoIB interface associated +with the Infiniband one. i.e. for now, NM should not automatically load +ib_ipoib.ko. + +The second question is whether to fold IPoIB support into the NMDeviceEthernet +class as was done for s390 network interfaces, or whether to create a subclass +of NMDevice: + +1) extend NMDeviceEthernet: this would involve loosening the assumption that +hardware addresses (the 'hw-address'/'perm-hw-address' properties of +NMDeviceEthernet and the 'mac-address'/'cloned-mac-address' properties of +NMSettingWired) are 48 bits wide and instead can be either 48 or 64 bits wide. + +2) create a new NMDevice subclass for Infiniband devices tailored to Infiniband +specific behavior and attributes. This would be a lot more code since we'd have +to duplicate much of what NMDeviceEthernet already does, plus add the +Infiniband device class to libnm-glib. This also would be the least invasive +from an API standpoint since the existing API would be unchanged, except for +the addition of a new value in the NMDeviceType enum, which clients should +ignore if they don't understand it. (Need to coordinate additions to this enum +between 0.8.x and 0.9.x since 0.9.x has more device types, but we want to make +sure new device types get the same number for both branches). + +For Infiniband specific options we could either fold them into NMSettingEthernet +or create a new NMSettingInfiniband class. Current Infiniband specific options +are partitions/P_Keys, datagram vs. connected mode, and MTU. The default MTU +varies with the 'mode'; for datagram it is currently 2044, while for connected +mode it is currently 65520. Given that we only have 2 IB-specific options +we should probably just fold them into NMSettingEthernet similar to what was +done for s390-specific options. + +For some general (and also Red Hat/Fedora specific) information see: + +http://tools.ietf.org/html/rfc4392 +http://rhkernel.org/#RHEL6+2.6.32-71.18.2.el6/Documentation/infiniband/ipoib.txt + diff --git a/callouts/Makefile.in b/callouts/Makefile.in index 763d7fb2..a064732c 100644 --- a/callouts/Makefile.in +++ b/callouts/Makefile.in @@ -279,8 +279,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/callouts/tests/Makefile.in b/callouts/tests/Makefile.in index 4c8fa909..b4b7807e 100644 --- a/callouts/tests/Makefile.in +++ b/callouts/tests/Makefile.in @@ -188,8 +188,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/cli/Makefile.in b/cli/Makefile.in index bd3d8737..b3b3fc5a 100644 --- a/cli/Makefile.in +++ b/cli/Makefile.in @@ -192,8 +192,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/cli/src/Makefile.in b/cli/src/Makefile.in index 33aa3f2b..11c1d50c 100644 --- a/cli/src/Makefile.in +++ b/cli/src/Makefile.in @@ -189,8 +189,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/cli/src/connections.c b/cli/src/connections.c index 5febc58a..7d4fffc0 100644 --- a/cli/src/connections.c +++ b/cli/src/connections.c @@ -141,39 +141,26 @@ typedef struct { char **argv; } ArgsInfo; -extern GMainLoop *loop; /* glib main loop variable */ +/* glib main loop variable - defined in nmcli.c */ +extern GMainLoop *loop; static ArgsInfo args_info; -/* static function prototypes */ -static void usage (void); -static void quit (void); -static void show_connection (NMConnection *data, gpointer user_data); -static NMConnection *find_connection (GSList *list, const char *filter_type, const char *filter_val); -static gboolean find_device_for_connection (NmCli *nmc, NMConnection *connection, const char *iface, const char *ap, - const char *nsp, NMDevice **device, const char **spec_object, GError **error); -static const char *active_connection_state_to_string (NMActiveConnectionState state); -static void active_connection_state_cb (NMActiveConnection *active, GParamSpec *pspec, gpointer user_data); -static void get_connections_cb (NMRemoteSettings *settings, gpointer user_data); -static NMCResultCode do_connections_list (NmCli *nmc, int argc, char **argv); -static NMCResultCode do_connections_status (NmCli *nmc, int argc, char **argv); -static NMCResultCode do_connection_up (NmCli *nmc, int argc, char **argv); -static NMCResultCode do_connection_down (NmCli *nmc, int argc, char **argv); - static void usage (void) { fprintf (stderr, _("Usage: nmcli con { COMMAND | help }\n" - " COMMAND := { list | status | up | down }\n\n" + " COMMAND := { list | status | up | down | delete }\n\n" " list [id | uuid ]\n" " status\n" #if WITH_WIMAX - " up id | uuid [iface ] [ap ] [nsp ] [--nowait] [--timeout ]\n" + " up id | uuid [iface ] [ap ] [nsp ] [--nowait] [--timeout ]\n" #else - " up id | uuid [iface ] [ap ] [--nowait] [--timeout ]\n" + " up id | uuid [iface ] [ap ] [--nowait] [--timeout ]\n" #endif - " down id | uuid \n")); + " down id | uuid \n" + " delete id | uuid \n")); } /* The real commands that do something - i.e. not 'help', etc. */ @@ -182,6 +169,7 @@ static const char *real_con_commands[] = { "status", "up", "down", + "delete", NULL }; @@ -1073,7 +1061,7 @@ find_device_for_connection (NmCli *nmc, g_assert (s_con); con_type = nm_setting_connection_get_connection_type (s_con); - if (strcmp (con_type, "vpn") == 0) { + if (strcmp (con_type, NM_SETTING_VPN_SETTING_NAME) == 0) { /* VPN connections */ NMActiveConnection *active = NULL; if (iface) { @@ -1116,22 +1104,22 @@ find_device_for_connection (NmCli *nmc, } } - if (found_device && ap && !strcmp (con_type, "802-11-wireless") && NM_IS_DEVICE_WIFI (dev)) { - char *hwaddr_up = g_ascii_strup (ap, -1); + if (found_device && ap && !strcmp (con_type, NM_SETTING_WIRELESS_SETTING_NAME) && NM_IS_DEVICE_WIFI (dev)) { + char *bssid_up = g_ascii_strup (ap, -1); const GPtrArray *aps = nm_device_wifi_get_access_points (NM_DEVICE_WIFI (dev)); found_device = NULL; /* Mark as not found; set to the device again later, only if AP matches */ for (j = 0; aps && (j < aps->len); j++) { NMAccessPoint *candidate_ap = g_ptr_array_index (aps, j); - const char *candidate_hwaddr = nm_access_point_get_hw_address (candidate_ap); + const char *candidate_bssid = nm_access_point_get_bssid (candidate_ap); - if (!strcmp (hwaddr_up, candidate_hwaddr)) { + if (!strcmp (bssid_up, candidate_bssid)) { found_device = dev; *spec_object = nm_object_get_path (NM_OBJECT (candidate_ap)); break; } } - g_free (hwaddr_up); + g_free (bssid_up); } #if WITH_WIMAX @@ -1575,6 +1563,66 @@ error: return nmc->return_value; } +static NMCResultCode +do_connection_delete (NmCli *nmc, int argc, char **argv) +{ + NMConnection *connection = NULL; + const char *selector = NULL; + const char *id = NULL; + GError *error = NULL; + + nmc->should_wait = FALSE; + + while (argc > 0) { + if (strcmp (*argv, "id") == 0 || strcmp (*argv, "uuid") == 0) { + selector = *argv; + if (next_arg (&argc, &argv) != 0) { + g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *argv); + nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; + goto error; + } + id = *argv; + } + else + fprintf (stderr, _("Unknown parameter: %s\n"), *argv); + + argc--; + argv++; + } + + if (!id) { + g_string_printf (nmc->return_text, _("Error: id or uuid has to be specified.")); + nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; + goto error; + } + + if (!nmc_is_nm_running (nmc, &error)) { + if (error) { + g_string_printf (nmc->return_text, _("Error: Can't find out if NetworkManager is running: %s."), error->message); + nmc->return_value = NMC_RESULT_ERROR_UNKNOWN; + g_error_free (error); + } else { + g_string_printf (nmc->return_text, _("Error: NetworkManager is not running.")); + nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING; + } + goto error; + } + + connection = find_connection (nmc->system_connections, selector, id); + + if (!connection) { + g_string_printf (nmc->return_text, _("Error: Unknown connection: %s."), id); + nmc->return_value = NMC_RESULT_ERROR_UNKNOWN; + goto error; + } + + /* Delete the connection */ + nm_remote_connection_delete (NM_REMOTE_CONNECTION (connection), NULL, NULL); + +error: + return nmc->return_value; +} + static NMCResultCode parse_cmd (NmCli *nmc, int argc, char **argv) { @@ -1600,6 +1648,9 @@ parse_cmd (NmCli *nmc, int argc, char **argv) else if (matches(*argv, "down") == 0) { nmc->return_value = do_connection_down (nmc, argc-1, argv+1); } + else if (matches(*argv, "delete") == 0) { + nmc->return_value = do_connection_delete (nmc, argc-1, argv+1); + } else if (matches (*argv, "help") == 0) { usage (); nmc->should_wait = FALSE; @@ -1672,6 +1723,7 @@ do_connections (NmCli *nmc, int argc, char **argv) if (error || !bus) { g_string_printf (nmc->return_text, _("Error: could not connect to D-Bus.")); nmc->return_value = NMC_RESULT_ERROR_UNKNOWN; + nmc->should_wait = FALSE; return nmc->return_value; } @@ -1679,8 +1731,8 @@ do_connections (NmCli *nmc, int argc, char **argv) if (!(nmc->system_settings = nm_remote_settings_new (bus))) { g_string_printf (nmc->return_text, _("Error: Could not get system settings.")); nmc->return_value = NMC_RESULT_ERROR_UNKNOWN; + nmc->should_wait = FALSE; return nmc->return_value; - } /* find out whether settings service is running */ @@ -1689,6 +1741,7 @@ do_connections (NmCli *nmc, int argc, char **argv) if (!nmc->system_settings_running) { g_string_printf (nmc->return_text, _("Error: Can't obtain connections: settings service is not running.")); nmc->return_value = NMC_RESULT_ERROR_UNKNOWN; + nmc->should_wait = FALSE; return nmc->return_value; } diff --git a/cli/src/devices.c b/cli/src/devices.c index c6228ba1..500d2341 100644 --- a/cli/src/devices.c +++ b/cli/src/devices.c @@ -236,18 +236,8 @@ static NmcOutputField nmc_fields_dev_wimax_list[] = { #endif -/* static function prototypes */ -static void usage (void); -static const char *device_state_to_string (NMDeviceState state); -static NMCResultCode do_devices_status (NmCli *nmc, int argc, char **argv); -static NMCResultCode do_devices_list (NmCli *nmc, int argc, char **argv); -static NMCResultCode do_device_disconnect (NmCli *nmc, int argc, char **argv); -static NMCResultCode do_device_wifi (NmCli *nmc, int argc, char **argv); -#if WITH_WIMAX -static NMCResultCode do_device_wimax (NmCli *nmc, int argc, char **argv); -#endif - -extern GMainLoop *loop; /* glib main loop variable */ +/* glib main loop variable - defined in nmcli.c */ +extern GMainLoop *loop; static void usage (void) @@ -262,7 +252,7 @@ usage (void) " status\n" " list [iface ]\n" " disconnect iface [--nowait] [--timeout ]\n" - " wifi [list [iface ] [hwaddr ]]\n" + " wifi [list [iface ] [bssid ]]\n" #if WITH_WIMAX " wimax [list [iface ] [nsp ]]\n\n" #endif @@ -441,15 +431,15 @@ detail_access_point (gpointer data, gpointer user_data) NM80211ApSecurityFlags wpa_flags, rsn_flags; guint32 freq, bitrate; guint8 strength; - const GByteArray *ssid; - const char *hwaddr; + const GByteArray *ssid; + const char *bssid; NM80211Mode mode; char *freq_str, *ssid_str, *bitrate_str, *strength_str, *wpa_flags_str, *rsn_flags_str; GString *security_str; char *ap_name; if (info->active_bssid) { - const char *current_bssid = nm_access_point_get_hw_address (ap); + const char *current_bssid = nm_access_point_get_bssid (ap); if (current_bssid && !strcmp (current_bssid, info->active_bssid)) active = TRUE; } @@ -459,7 +449,7 @@ detail_access_point (gpointer data, gpointer user_data) wpa_flags = nm_access_point_get_wpa_flags (ap); rsn_flags = nm_access_point_get_rsn_flags (ap); ssid = nm_access_point_get_ssid (ap); - hwaddr = nm_access_point_get_hw_address (ap); + bssid = nm_access_point_get_bssid (ap); freq = nm_access_point_get_frequency (ap); mode = nm_access_point_get_mode (ap); bitrate = nm_access_point_get_max_bitrate (ap); @@ -497,7 +487,7 @@ detail_access_point (gpointer data, gpointer user_data) ap_name = g_strdup_printf ("AP%d", info->index++); /* AP */ info->nmc->allowed_fields[0].value = ap_name; info->nmc->allowed_fields[1].value = ssid_str; - info->nmc->allowed_fields[2].value = hwaddr; + info->nmc->allowed_fields[2].value = bssid; info->nmc->allowed_fields[3].value = mode == NM_802_11_MODE_ADHOC ? _("Ad-Hoc") : mode == NM_802_11_MODE_INFRA ? _("Infrastructure") : _("Unknown"); info->nmc->allowed_fields[4].value = freq_str; info->nmc->allowed_fields[5].value = bitrate_str; @@ -725,7 +715,7 @@ show_device_info (gpointer data, gpointer user_data) if (!strcasecmp (nmc_fields_dev_list_sections[section_idx].name, nmc_fields_dev_list_sections[3].name)) { if (state == NM_DEVICE_STATE_ACTIVATED) { active_ap = nm_device_wifi_get_active_access_point (NM_DEVICE_WIFI (device)); - active_bssid = active_ap ? nm_access_point_get_hw_address (active_ap) : NULL; + active_bssid = active_ap ? nm_access_point_get_bssid (active_ap) : NULL; } nmc->allowed_fields = nmc_fields_dev_wifi_list; @@ -1275,7 +1265,7 @@ show_acces_point_info (NMDevice *device, NmCli *nmc) if (nm_device_get_state (device) == NM_DEVICE_STATE_ACTIVATED) { active_ap = nm_device_wifi_get_active_access_point (NM_DEVICE_WIFI (device)); - active_bssid = active_ap ? nm_access_point_get_hw_address (active_ap) : NULL; + active_bssid = active_ap ? nm_access_point_get_bssid (active_ap) : NULL; } info = g_malloc0 (sizeof (APInfo)); @@ -1296,7 +1286,7 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv) NMDevice *device = NULL; NMAccessPoint *ap = NULL; const char *iface = NULL; - const char *hwaddr_user = NULL; + const char *bssid_user = NULL; const GPtrArray *devices; const GPtrArray *aps; APInfo *info; @@ -1316,13 +1306,14 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv) goto error; } iface = *argv; - } else if (strcmp (*argv, "hwaddr") == 0) { + } else if (strcmp (*argv, "bssid") == 0 || strcmp (*argv, "hwaddr") == 0) { + /* hwaddr is deprecated and will be removed later */ if (next_arg (&argc, &argv) != 0) { g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *argv); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; goto error; } - hwaddr_user = *argv; + bssid_user = *argv; } else { fprintf (stderr, _("Unknown parameter: %s\n"), *argv); } @@ -1392,21 +1383,21 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv) } if (NM_IS_DEVICE_WIFI (device)) { - if (hwaddr_user) { + if (bssid_user) { /* Specific AP requested - list only that */ aps = nm_device_wifi_get_access_points (NM_DEVICE_WIFI (device)); for (j = 0; aps && (j < aps->len); j++) { - char *hwaddr_up; + char *bssid_up; NMAccessPoint *candidate_ap = g_ptr_array_index (aps, j); - const char *candidate_hwaddr = nm_access_point_get_hw_address (candidate_ap); + const char *candidate_bssid = nm_access_point_get_bssid (candidate_ap); - hwaddr_up = g_ascii_strup (hwaddr_user, -1); - if (!strcmp (hwaddr_up, candidate_hwaddr)) + bssid_up = g_ascii_strup (bssid_user, -1); + if (!strcmp (bssid_up, candidate_bssid)) ap = candidate_ap; - g_free (hwaddr_up); + g_free (bssid_up); } if (!ap) { - g_string_printf (nmc->return_text, _("Error: Access point with hwaddr '%s' not found."), hwaddr_user); + g_string_printf (nmc->return_text, _("Error: Access point with bssid '%s' not found."), bssid_user); nmc->return_value = NMC_RESULT_ERROR_UNKNOWN; goto error; } @@ -1430,7 +1421,7 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv) } else { /* List APs for all devices */ print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */ - if (hwaddr_user) { + if (bssid_user) { /* Specific AP requested - list only that */ for (i = 0; devices && (i < devices->len); i++) { NMDevice *dev = g_ptr_array_index (devices, i); @@ -1440,12 +1431,12 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv) aps = nm_device_wifi_get_access_points (NM_DEVICE_WIFI (dev)); for (j = 0; aps && (j < aps->len); j++) { - char *hwaddr_up; + char *bssid_up; NMAccessPoint *candidate_ap = g_ptr_array_index (aps, j); - const char *candidate_hwaddr = nm_access_point_get_hw_address (candidate_ap); + const char *candidate_bssid = nm_access_point_get_bssid (candidate_ap); - hwaddr_up = g_ascii_strup (hwaddr_user, -1); - if (!strcmp (hwaddr_up, candidate_hwaddr)) { + bssid_up = g_ascii_strup (bssid_user, -1); + if (!strcmp (bssid_up, candidate_bssid)) { ap = candidate_ap; info = g_malloc0 (sizeof (APInfo)); @@ -1456,11 +1447,11 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv) detail_access_point (ap, info); g_free (info); } - g_free (hwaddr_up); + g_free (bssid_up); } } if (!ap) { - g_string_printf (nmc->return_text, _("Error: Access point with hwaddr '%s' not found."), hwaddr_user); + g_string_printf (nmc->return_text, _("Error: Access point with bssid '%s' not found."), bssid_user); nmc->return_value = NMC_RESULT_ERROR_UNKNOWN; goto error; } @@ -1667,7 +1658,7 @@ do_device_wimax_list (NmCli *nmc, int argc, char **argv) } } if (!nsp) { - g_string_printf (nmc->return_text, _("Error: Access point with hwaddr '%s' not found."), nsp_user); + g_string_printf (nmc->return_text, _("Error: Access point with nsp '%s' not found."), nsp_user); nmc->return_value = NMC_RESULT_ERROR_UNKNOWN; goto error; } diff --git a/cli/src/network-manager.c b/cli/src/network-manager.c index ac9a3841..c23c9fae 100644 --- a/cli/src/network-manager.c +++ b/cli/src/network-manager.c @@ -57,16 +57,9 @@ static NmcOutputField nmc_fields_nm_status[] = { #define NMC_FIELDS_NM_WWAN "WWAN" #define NMC_FIELDS_NM_WIMAX "WIMAX" - +/* glib main loop variable - defined in nmcli.c */ extern GMainLoop *loop; -/* static function prototypes */ -static void usage (void); -static void quit (void); -static const char *nm_state_to_string (NMState state); -static NMCResultCode show_nm_status (NmCli *nmc); - - static void usage (void) { diff --git a/cli/src/settings.c b/cli/src/settings.c index c2385370..ccbe9589 100644 --- a/cli/src/settings.c +++ b/cli/src/settings.c @@ -14,7 +14,7 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * - * (C) Copyright 2010 Red Hat, Inc. + * (C) Copyright 2010 - 2011 Red Hat, Inc. */ #include "config.h" @@ -39,6 +39,7 @@ static NmcOutputField nmc_fields_setting_connection[] = { SETTING_FIELD (NM_SETTING_CONNECTION_AUTOCONNECT, 13), /* 4 */ SETTING_FIELD (NM_SETTING_CONNECTION_TIMESTAMP, 10), /* 5 */ SETTING_FIELD (NM_SETTING_CONNECTION_READ_ONLY, 10), /* 6 */ + SETTING_FIELD (NM_SETTING_CONNECTION_PERMISSIONS, 30), /* 7 */ {NULL, NULL, 0, NULL, 0} }; #define NMC_FIELDS_SETTING_CONNECTION_ALL "name"","\ @@ -47,19 +48,24 @@ static NmcOutputField nmc_fields_setting_connection[] = { NM_SETTING_CONNECTION_TYPE","\ NM_SETTING_CONNECTION_AUTOCONNECT","\ NM_SETTING_CONNECTION_TIMESTAMP","\ - NM_SETTING_CONNECTION_READ_ONLY + NM_SETTING_CONNECTION_READ_ONLY","\ + NM_SETTING_CONNECTION_PERMISSIONS #define NMC_FIELDS_SETTING_CONNECTION_COMMON NMC_FIELDS_SETTING_CONNECTION_ALL /* Available fields for NM_SETTING_WIRED_SETTING_NAME */ static NmcOutputField nmc_fields_setting_wired[] = { - SETTING_FIELD ("name", 17), /* 0 */ - SETTING_FIELD (NM_SETTING_WIRED_PORT, 8), /* 1 */ - SETTING_FIELD (NM_SETTING_WIRED_SPEED, 10), /* 2 */ - SETTING_FIELD (NM_SETTING_WIRED_DUPLEX, 10), /* 3 */ - SETTING_FIELD (NM_SETTING_WIRED_AUTO_NEGOTIATE, 15), /* 4 */ - SETTING_FIELD (NM_SETTING_WIRED_MAC_ADDRESS, 19), /* 5 */ - SETTING_FIELD (NM_SETTING_WIRED_CLONED_MAC_ADDRESS, 19), /* 6 */ - SETTING_FIELD (NM_SETTING_WIRED_MTU, 6), /* 7 */ + SETTING_FIELD ("name", 17), /* 0 */ + SETTING_FIELD (NM_SETTING_WIRED_PORT, 8), /* 1 */ + SETTING_FIELD (NM_SETTING_WIRED_SPEED, 10), /* 2 */ + SETTING_FIELD (NM_SETTING_WIRED_DUPLEX, 10), /* 3 */ + SETTING_FIELD (NM_SETTING_WIRED_AUTO_NEGOTIATE, 15), /* 4 */ + SETTING_FIELD (NM_SETTING_WIRED_MAC_ADDRESS, 19), /* 5 */ + SETTING_FIELD (NM_SETTING_WIRED_CLONED_MAC_ADDRESS, 19), /* 6 */ + SETTING_FIELD (NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST, 39), /* 7 */ + SETTING_FIELD (NM_SETTING_WIRED_MTU, 6), /* 8 */ + SETTING_FIELD (NM_SETTING_WIRED_S390_SUBCHANNELS, 20), /* 9 */ + SETTING_FIELD (NM_SETTING_WIRED_S390_NETTYPE, 15), /* 10 */ + SETTING_FIELD (NM_SETTING_WIRED_S390_OPTIONS, 20), /* 11 */ {NULL, NULL, 0, NULL, 0} }; #define NMC_FIELDS_SETTING_WIRED_ALL "name"","\ @@ -69,7 +75,11 @@ static NmcOutputField nmc_fields_setting_wired[] = { NM_SETTING_WIRED_AUTO_NEGOTIATE","\ NM_SETTING_WIRED_MAC_ADDRESS","\ NM_SETTING_WIRED_CLONED_MAC_ADDRESS","\ - NM_SETTING_WIRED_MTU + NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST","\ + NM_SETTING_WIRED_MTU","\ + NM_SETTING_WIRED_S390_SUBCHANNELS","\ + NM_SETTING_WIRED_S390_NETTYPE","\ + NM_SETTING_WIRED_S390_OPTIONS #define NMC_FIELDS_SETTING_WIRED_COMMON NMC_FIELDS_SETTING_WIRED_ALL /* Available fields for NM_SETTING_802_1X_SETTING_NAME */ @@ -80,22 +90,26 @@ static NmcOutputField nmc_fields_setting_8021X[] = { SETTING_FIELD (NM_SETTING_802_1X_ANONYMOUS_IDENTITY, 15), /* 3 */ SETTING_FIELD (NM_SETTING_802_1X_CA_CERT, 10), /* 4 */ SETTING_FIELD (NM_SETTING_802_1X_CA_PATH, 10), /* 5 */ - SETTING_FIELD (NM_SETTING_802_1X_CLIENT_CERT, 10), /* 6 */ - SETTING_FIELD (NM_SETTING_802_1X_PHASE1_PEAPVER, 10), /* 7 */ - SETTING_FIELD (NM_SETTING_802_1X_PHASE1_PEAPLABEL, 10), /* 8 */ - SETTING_FIELD (NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING, 10), /* 9 */ - SETTING_FIELD (NM_SETTING_802_1X_PHASE2_AUTH, 10), /* 10 */ - SETTING_FIELD (NM_SETTING_802_1X_PHASE2_AUTHEAP, 10), /* 11 */ - SETTING_FIELD (NM_SETTING_802_1X_PHASE2_CA_CERT, 20), /* 12 */ - SETTING_FIELD (NM_SETTING_802_1X_PHASE2_CA_PATH, 20), /* 13 */ - SETTING_FIELD (NM_SETTING_802_1X_PHASE2_CLIENT_CERT, 20), /* 14 */ - SETTING_FIELD (NM_SETTING_802_1X_PASSWORD, 10), /* 15 */ - SETTING_FIELD (NM_SETTING_802_1X_PRIVATE_KEY, 15), /* 16 */ - SETTING_FIELD (NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD, 20), /* 17 */ - SETTING_FIELD (NM_SETTING_802_1X_PHASE2_PRIVATE_KEY, 20), /* 18 */ - SETTING_FIELD (NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD, 20), /* 19 */ - SETTING_FIELD (NM_SETTING_802_1X_PIN, 8), /* 20 */ - SETTING_FIELD (NM_SETTING_802_1X_SYSTEM_CA_CERTS, 17), /* 21 */ + SETTING_FIELD (NM_SETTING_802_1X_SUBJECT_MATCH, 10), /* 6 */ + SETTING_FIELD (NM_SETTING_802_1X_ALTSUBJECT_MATCHES, 10), /* 7 */ + SETTING_FIELD (NM_SETTING_802_1X_CLIENT_CERT, 10), /* 8 */ + SETTING_FIELD (NM_SETTING_802_1X_PHASE1_PEAPVER, 10), /* 9 */ + SETTING_FIELD (NM_SETTING_802_1X_PHASE1_PEAPLABEL, 10), /* 10 */ + SETTING_FIELD (NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING, 10), /* 11 */ + SETTING_FIELD (NM_SETTING_802_1X_PHASE2_AUTH, 10), /* 12 */ + SETTING_FIELD (NM_SETTING_802_1X_PHASE2_AUTHEAP, 10), /* 13 */ + SETTING_FIELD (NM_SETTING_802_1X_PHASE2_CA_CERT, 20), /* 14 */ + SETTING_FIELD (NM_SETTING_802_1X_PHASE2_CA_PATH, 20), /* 15 */ + SETTING_FIELD (NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH, 10), /* 16 */ + SETTING_FIELD (NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES, 10), /* 17 */ + SETTING_FIELD (NM_SETTING_802_1X_PHASE2_CLIENT_CERT, 20), /* 18 */ + SETTING_FIELD (NM_SETTING_802_1X_PASSWORD, 10), /* 19 */ + SETTING_FIELD (NM_SETTING_802_1X_PRIVATE_KEY, 15), /* 20 */ + SETTING_FIELD (NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD, 20), /* 21 */ + SETTING_FIELD (NM_SETTING_802_1X_PHASE2_PRIVATE_KEY, 20), /* 22 */ + SETTING_FIELD (NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD, 20), /* 23 */ + SETTING_FIELD (NM_SETTING_802_1X_PIN, 8), /* 24 */ + SETTING_FIELD (NM_SETTING_802_1X_SYSTEM_CA_CERTS, 17), /* 25 */ {NULL, NULL, 0, NULL, 0} }; #define NMC_FIELDS_SETTING_802_1X_ALL "name"","\ @@ -104,6 +118,8 @@ static NmcOutputField nmc_fields_setting_8021X[] = { 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","\ @@ -112,6 +128,8 @@ static NmcOutputField nmc_fields_setting_8021X[] = { 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_PRIVATE_KEY","\ @@ -134,9 +152,10 @@ static NmcOutputField nmc_fields_setting_wireless[] = { SETTING_FIELD (NM_SETTING_WIRELESS_TX_POWER, 10), /* 7 */ SETTING_FIELD (NM_SETTING_WIRELESS_MAC_ADDRESS, 19), /* 8 */ SETTING_FIELD (NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, 19), /* 9 */ - SETTING_FIELD (NM_SETTING_WIRELESS_MTU, 6), /* 10 */ - SETTING_FIELD (NM_SETTING_WIRELESS_SEEN_BSSIDS, 35), /* 11 */ - SETTING_FIELD (NM_SETTING_WIRELESS_SEC, 10), /* 12 */ + SETTING_FIELD (NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST, 39), /* 10 */ + SETTING_FIELD (NM_SETTING_WIRELESS_MTU, 6), /* 11 */ + SETTING_FIELD (NM_SETTING_WIRELESS_SEEN_BSSIDS, 35), /* 12 */ + SETTING_FIELD (NM_SETTING_WIRELESS_SEC, 10), /* 13 */ {NULL, NULL, 0, NULL, 0} }; #define NMC_FIELDS_SETTING_WIRELESS_ALL "name"","\ @@ -149,6 +168,7 @@ static NmcOutputField nmc_fields_setting_wireless[] = { 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 @@ -204,6 +224,7 @@ static NmcOutputField nmc_fields_setting_ip4_config[] = { SETTING_FIELD (NM_SETTING_IP4_CONFIG_DHCP_SEND_HOSTNAME, 19), /* 9 */ SETTING_FIELD (NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME, 14), /* 10 */ SETTING_FIELD (NM_SETTING_IP4_CONFIG_NEVER_DEFAULT, 15), /* 11 */ + SETTING_FIELD (NM_SETTING_IP4_CONFIG_MAY_FAIL, 12), /* 12 */ {NULL, NULL, 0, NULL, 0} }; #define NMC_FIELDS_SETTING_IP4_CONFIG_ALL "name"","\ @@ -217,7 +238,8 @@ static NmcOutputField nmc_fields_setting_ip4_config[] = { NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID","\ NM_SETTING_IP4_CONFIG_DHCP_SEND_HOSTNAME","\ NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME","\ - NM_SETTING_IP4_CONFIG_NEVER_DEFAULT + NM_SETTING_IP4_CONFIG_NEVER_DEFAULT","\ + NM_SETTING_IP4_CONFIG_MAY_FAIL #define NMC_FIELDS_SETTING_IP4_CONFIG_COMMON NMC_FIELDS_SETTING_IP4_CONFIG_ALL /* Available fields for NM_SETTING_IP6_CONFIG_SETTING_NAME */ @@ -231,6 +253,7 @@ static NmcOutputField nmc_fields_setting_ip6_config[] = { SETTING_FIELD (NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES, 19), /* 6 */ SETTING_FIELD (NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS, 16), /* 7 */ SETTING_FIELD (NM_SETTING_IP6_CONFIG_NEVER_DEFAULT, 15), /* 8 */ + SETTING_FIELD (NM_SETTING_IP6_CONFIG_MAY_FAIL, 12), /* 9 */ {NULL, NULL, 0, NULL, 0} }; #define NMC_FIELDS_SETTING_IP6_CONFIG_ALL "name"","\ @@ -241,7 +264,8 @@ static NmcOutputField nmc_fields_setting_ip6_config[] = { NM_SETTING_IP6_CONFIG_ROUTES","\ NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES","\ NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS","\ - NM_SETTING_IP6_CONFIG_NEVER_DEFAULT + NM_SETTING_IP6_CONFIG_NEVER_DEFAULT","\ + NM_SETTING_IP6_CONFIG_MAY_FAIL #define NMC_FIELDS_SETTING_IP6_CONFIG_COMMON NMC_FIELDS_SETTING_IP4_CONFIG_ALL /* Available fields for NM_SETTING_SERIAL_SETTING_NAME */ @@ -480,6 +504,10 @@ allowed_bands_to_string (guint32 bands) g_string_append (band_str, _("WCDMA 3GPP UMTS 900 MHz, ")); if (bands & NM_SETTING_GSM_BAND_U17IX) g_string_append (band_str, _("WCDMA 3GPP UMTS 1700 MHz, ")); + if (bands & NM_SETTING_GSM_BAND_U1900) + g_string_append (band_str, _("WCDMA 3GPP UMTS 1900 MHz, ")); + if (bands & NM_SETTING_GSM_BAND_U2600) + g_string_append (band_str, _("WCDMA 3GPP UMTS 2600 MHz, ")); if (band_str->str[band_str->len-1] == '(') g_string_assign (band_str, _("unknown")); @@ -491,13 +519,16 @@ allowed_bands_to_string (guint32 bands) return g_string_free (band_str, FALSE); } - gboolean setting_connection_details (NMSetting *setting, NmCli *nmc) { NMSettingConnection *s_con; guint64 timestamp; char *timestamp_str; + const char *perm_item; + const char *perm_type; + GString *perm = NULL; + int i; guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0; guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0; guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0; @@ -513,6 +544,15 @@ setting_connection_details (NMSetting *setting, NmCli *nmc) timestamp = nm_setting_connection_get_timestamp (s_con); timestamp_str = g_strdup_printf ("%" G_GUINT64_FORMAT, timestamp); + /* get permissions */ + perm = g_string_new (NULL); + for (i = 0; i < nm_setting_connection_get_num_permissions (s_con); i++) { + nm_setting_connection_get_permission (s_con, i, &perm_type, &perm_item, NULL); + g_string_append_printf (perm, "%s:%s,", perm_type, perm_item); + } + if (perm->len > 0) + g_string_truncate (perm, perm->len-1); /* remove trailing , */ + nmc->allowed_fields[0].value = NM_SETTING_CONNECTION_SETTING_NAME; nmc->allowed_fields[1].value = nm_setting_connection_get_id (s_con); nmc->allowed_fields[2].value = nm_setting_connection_get_uuid (s_con); @@ -520,11 +560,13 @@ setting_connection_details (NMSetting *setting, NmCli *nmc) nmc->allowed_fields[4].value = nm_setting_connection_get_autoconnect (s_con) ? _("yes") : _("no"); nmc->allowed_fields[5].value = timestamp_str; nmc->allowed_fields[6].value = nm_setting_connection_get_read_only (s_con) ? ("yes") : _("no"); + nmc->allowed_fields[7].value = perm->str; nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX; print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */ g_free (timestamp_str); + g_string_free (perm, TRUE); return TRUE; } @@ -534,7 +576,11 @@ setting_wired_details (NMSetting *setting, NmCli *nmc) { NMSettingWired *s_wired; const GByteArray *mac; + const GSList *iter; + const GPtrArray *s390_channels; + int i; char *speed_str, *mtu_str, *device_mac_str = NULL, *cloned_mac_str = NULL; + GString *mac_blacklist_s, *s390_channels_s, *s390_options_s; guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0; guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0; guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0; @@ -556,6 +602,29 @@ setting_wired_details (NMSetting *setting, NmCli *nmc) if (mac) cloned_mac_str = g_strdup_printf ("%02X:%02X:%02X:%02X:%02X:%02X", mac->data[0], mac->data[1], mac->data[2], mac->data[3], mac->data[4], mac->data[5]); + mac_blacklist_s = g_string_new (NULL); + iter = nm_setting_wired_get_mac_address_blacklist (s_wired); + while (iter) { + g_string_append_printf (mac_blacklist_s, "%s,", (char *) iter->data); + iter = iter->next; + } + g_string_truncate (mac_blacklist_s, mac_blacklist_s->len-1); /* chop off trailing ',' */ + + s390_channels_s = g_string_new (NULL); + s390_channels = nm_setting_wired_get_s390_subchannels (s_wired); + for (i = 0; s390_channels && i < s390_channels->len; i++) + g_string_append_printf (s390_channels_s, "%s,", (char *) g_ptr_array_index (s390_channels, i)); + g_string_truncate (s390_channels_s, s390_channels_s->len-1); /* chop off trailing ',' */ + + s390_options_s = g_string_new (NULL); + for (i = 0; i < nm_setting_wired_get_num_s390_options (s_wired); i++) { + const char *key, *value; + + nm_setting_wired_get_s390_option (s_wired, i, &key, &value); + g_string_append_printf (s390_options_s, "%s=%s,", key, value); + } + g_string_truncate (s390_options_s, s390_options_s->len-1); /* chop off trailing ',' */ + nmc->allowed_fields[0].value = NM_SETTING_WIRED_SETTING_NAME; nmc->allowed_fields[1].value = nm_setting_wired_get_port (s_wired); nmc->allowed_fields[2].value = speed_str; @@ -563,7 +632,11 @@ setting_wired_details (NMSetting *setting, NmCli *nmc) nmc->allowed_fields[4].value = nm_setting_wired_get_auto_negotiate (s_wired) ? _("yes") : _("no"); nmc->allowed_fields[5].value = device_mac_str; nmc->allowed_fields[6].value = cloned_mac_str; - nmc->allowed_fields[7].value = strcmp (mtu_str, "0") ? mtu_str : _("auto"); + nmc->allowed_fields[7].value = mac_blacklist_s->str; + nmc->allowed_fields[8].value = strcmp (mtu_str, "0") ? mtu_str : _("auto"); + nmc->allowed_fields[9].value = s390_channels_s->str; + nmc->allowed_fields[10].value = nm_setting_wired_get_s390_nettype (s_wired); + nmc->allowed_fields[11].value = s390_options_s->str; nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX; print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */ @@ -572,6 +645,9 @@ setting_wired_details (NMSetting *setting, NmCli *nmc) g_free (device_mac_str); g_free (cloned_mac_str); g_free (mtu_str); + g_string_free (mac_blacklist_s, TRUE); + g_string_free (s390_channels_s, TRUE); + g_string_free (s390_options_s, TRUE); return TRUE; } @@ -581,7 +657,7 @@ setting_802_1X_details (NMSetting *setting, NmCli *nmc) { NMSetting8021x *s_8021X; NMSetting8021xCKScheme scheme; - GString *eap_str; + GString *eap_str, *alt_sub_match, *phase2_alt_sub_match; char *ca_cert_str = NULL, *client_cert_str = NULL, *phase2_ca_cert_str = NULL; char *phase2_client_cert_str = NULL, *private_key_str = NULL, *phase2_private_key_str = NULL; int i; @@ -639,28 +715,42 @@ setting_802_1X_details (NMSetting *setting, NmCli *nmc) if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH) phase2_private_key_str = g_strdup (nm_setting_802_1x_get_phase2_private_key_path (s_8021X)); + alt_sub_match = g_string_new (NULL); + for (i = 0; i < nm_setting_802_1x_get_num_altsubject_matches (s_8021X); i++) + g_string_append_printf (alt_sub_match, "%s,", nm_setting_802_1x_get_altsubject_match (s_8021X, i)); + g_string_truncate (alt_sub_match, alt_sub_match->len-1); /* chop off trailing ',' */ + + phase2_alt_sub_match = g_string_new (NULL); + for (i = 0; i < nm_setting_802_1x_get_num_phase2_altsubject_matches (s_8021X); i++) + g_string_append_printf (phase2_alt_sub_match, "%s,", nm_setting_802_1x_get_phase2_altsubject_match (s_8021X, i)); + g_string_truncate (phase2_alt_sub_match, phase2_alt_sub_match->len-1); /* chop off trailing ',' */ + nmc->allowed_fields[0].value = NM_SETTING_802_1X_SETTING_NAME; nmc->allowed_fields[1].value = eap_str->str; nmc->allowed_fields[2].value = nm_setting_802_1x_get_identity (s_8021X); nmc->allowed_fields[3].value = nm_setting_802_1x_get_anonymous_identity (s_8021X); nmc->allowed_fields[4].value = ca_cert_str; nmc->allowed_fields[5].value = nm_setting_802_1x_get_ca_path (s_8021X); - nmc->allowed_fields[6].value = client_cert_str; - nmc->allowed_fields[7].value = nm_setting_802_1x_get_phase1_peapver (s_8021X); - nmc->allowed_fields[8].value = nm_setting_802_1x_get_phase1_peaplabel (s_8021X); - nmc->allowed_fields[9].value = nm_setting_802_1x_get_phase1_fast_provisioning (s_8021X); - nmc->allowed_fields[10].value = nm_setting_802_1x_get_phase2_auth (s_8021X); - nmc->allowed_fields[11].value = nm_setting_802_1x_get_phase2_autheap (s_8021X); - nmc->allowed_fields[12].value = phase2_ca_cert_str; - nmc->allowed_fields[13].value = nm_setting_802_1x_get_phase2_ca_path (s_8021X); - nmc->allowed_fields[14].value = phase2_client_cert_str; - nmc->allowed_fields[15].value = nm_setting_802_1x_get_password (s_8021X); - nmc->allowed_fields[16].value = private_key_str; - nmc->allowed_fields[17].value = nm_setting_802_1x_get_private_key_password (s_8021X); - nmc->allowed_fields[18].value = phase2_private_key_str; - nmc->allowed_fields[19].value = nm_setting_802_1x_get_phase2_private_key_password (s_8021X); - nmc->allowed_fields[20].value = nm_setting_802_1x_get_pin (s_8021X); - nmc->allowed_fields[21].value = nm_setting_802_1x_get_system_ca_certs (s_8021X) ? _("yes") : _("no"); + nmc->allowed_fields[6].value = nm_setting_802_1x_get_subject_match (s_8021X); + nmc->allowed_fields[7].value = alt_sub_match->str; + nmc->allowed_fields[8].value = client_cert_str; + nmc->allowed_fields[9].value = nm_setting_802_1x_get_phase1_peapver (s_8021X); + nmc->allowed_fields[10].value = nm_setting_802_1x_get_phase1_peaplabel (s_8021X); + nmc->allowed_fields[11].value = nm_setting_802_1x_get_phase1_fast_provisioning (s_8021X); + nmc->allowed_fields[12].value = nm_setting_802_1x_get_phase2_auth (s_8021X); + nmc->allowed_fields[13].value = nm_setting_802_1x_get_phase2_autheap (s_8021X); + nmc->allowed_fields[14].value = phase2_ca_cert_str; + nmc->allowed_fields[15].value = nm_setting_802_1x_get_phase2_ca_path (s_8021X); + nmc->allowed_fields[16].value = nm_setting_802_1x_get_phase2_subject_match (s_8021X); + nmc->allowed_fields[17].value = phase2_alt_sub_match->str; + nmc->allowed_fields[18].value = phase2_client_cert_str; + nmc->allowed_fields[19].value = nm_setting_802_1x_get_password (s_8021X); + nmc->allowed_fields[20].value = private_key_str; + nmc->allowed_fields[21].value = nm_setting_802_1x_get_private_key_password (s_8021X); + nmc->allowed_fields[22].value = phase2_private_key_str; + nmc->allowed_fields[23].value = nm_setting_802_1x_get_phase2_private_key_password (s_8021X); + nmc->allowed_fields[24].value = nm_setting_802_1x_get_pin (s_8021X); + nmc->allowed_fields[25].value = nm_setting_802_1x_get_system_ca_certs (s_8021X) ? _("yes") : _("no"); nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX; print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */ @@ -672,6 +762,8 @@ setting_802_1X_details (NMSetting *setting, NmCli *nmc) g_free (private_key_str); g_free (phase2_private_key_str); g_string_free (eap_str, TRUE); + g_string_free (alt_sub_match, TRUE); + g_string_free (phase2_alt_sub_match, TRUE); return TRUE; } @@ -684,7 +776,8 @@ setting_wireless_details (NMSetting *setting, NmCli *nmc) const GByteArray *ssid, *bssid, *mac; char *ssid_str, *channel_str, *rate_str, *tx_power_str, *mtu_str; char *device_mac_str = NULL, *cloned_mac_str = NULL, *bssid_str = NULL; - GString *seen_bssids; + GString *mac_blacklist, *seen_bssids; + const GSList *iter; guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0; guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0; guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0; @@ -712,6 +805,15 @@ setting_wireless_details (NMSetting *setting, NmCli *nmc) mac = nm_setting_wireless_get_cloned_mac_address (s_wireless); if (mac) cloned_mac_str = g_strdup_printf ("%02X:%02X:%02X:%02X:%02X:%02X", mac->data[0], mac->data[1], mac->data[2], mac->data[3], mac->data[4], mac->data[5]); + + mac_blacklist = g_string_new (NULL); + iter = nm_setting_wireless_get_mac_address_blacklist (s_wireless); + while (iter) { + g_string_append_printf (mac_blacklist, "%s,", (char *) iter->data); + iter = iter->next; + } + g_string_truncate (mac_blacklist, mac_blacklist->len-1); /* chop off trailing ',' */ + seen_bssids = g_string_new (NULL); for (i = 0; i < nm_setting_wireless_get_num_seen_bssids (s_wireless); i++) { if (i > 0) @@ -729,9 +831,10 @@ setting_wireless_details (NMSetting *setting, NmCli *nmc) nmc->allowed_fields[7].value = tx_power_str; nmc->allowed_fields[8].value = device_mac_str ? device_mac_str : _("not set"); nmc->allowed_fields[9].value = cloned_mac_str ? cloned_mac_str : _("not set"); - nmc->allowed_fields[10].value = strcmp (mtu_str, "0") ? mtu_str : _("auto"); - nmc->allowed_fields[11].value = seen_bssids->str; - nmc->allowed_fields[12].value = nm_setting_wireless_get_security (s_wireless); + nmc->allowed_fields[10].value = mac_blacklist->str; + nmc->allowed_fields[11].value = strcmp (mtu_str, "0") ? mtu_str : _("auto"); + nmc->allowed_fields[12].value = seen_bssids->str; + nmc->allowed_fields[13].value = nm_setting_wireless_get_security (s_wireless); nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX; print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */ @@ -745,6 +848,7 @@ setting_wireless_details (NMSetting *setting, NmCli *nmc) g_free (cloned_mac_str); g_free (mtu_str); g_string_free (seen_bssids, TRUE); + g_string_free (mac_blacklist, TRUE); return TRUE; } @@ -940,6 +1044,7 @@ setting_ip4_config_details (NMSetting *setting, NmCli *nmc) nmc->allowed_fields[9].value = nm_setting_ip4_config_get_dhcp_send_hostname (s_ip4) ? _("yes") : _("no"); nmc->allowed_fields[10].value = nm_setting_ip4_config_get_dhcp_hostname (s_ip4); nmc->allowed_fields[11].value = nm_setting_ip4_config_get_never_default (s_ip4) ? _("yes") : _("no"); + nmc->allowed_fields[12].value = nm_setting_ip4_config_get_may_fail (s_ip4) ? _("yes") : _("no"); nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX; print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */ @@ -1019,6 +1124,11 @@ setting_ip6_config_details (NMSetting *setting, NmCli *nmc) g_string_append (addr_str, tmp); g_free (tmp); + memset (buf, 0, sizeof (buf)); + ip = nm_ip6_address_get_gateway (addr); + inet_ntop (AF_INET6, (const void *) ip, buf, sizeof (buf)); + g_string_append_printf (addr_str, ", gw = %s", buf); + g_string_append (addr_str, " }"); } @@ -1067,6 +1177,7 @@ setting_ip6_config_details (NMSetting *setting, NmCli *nmc) nmc->allowed_fields[6].value = nm_setting_ip6_config_get_ignore_auto_routes (s_ip6) ? _("yes") : _("no"); nmc->allowed_fields[7].value = nm_setting_ip6_config_get_ignore_auto_dns (s_ip6) ? _("yes") : _("no"); nmc->allowed_fields[8].value = nm_setting_ip6_config_get_never_default (s_ip6) ? _("yes") : _("no"); + nmc->allowed_fields[9].value = nm_setting_ip6_config_get_may_fail (s_ip6) ? _("yes") : _("no"); nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX; print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */ diff --git a/cli/src/utils.c b/cli/src/utils.c index 3c4e4f36..c5637e4f 100644 --- a/cli/src/utils.c +++ b/cli/src/utils.c @@ -194,6 +194,7 @@ print_fields (const NmcPrintFields fields, const NmcOutputField field_values[]) if (multiline) { /* --- Multiline mode --- */ enum { ML_HEADER_WIDTH = 79 }; + enum { ML_VALUE_INDENT = 40 }; if (main_header && pretty) { /* Print the main header */ int header_width = nmc_string_screen_width (fields.header_name, NULL) + 4; @@ -218,7 +219,7 @@ print_fields (const NmcPrintFields fields, const NmcOutputField field_values[]) tmp = g_strdup_printf ("%s%s%s:", section_prefix ? field_values[0].value : "", section_prefix ? "." : "", _(field_values[idx].name_l10n)); - printf ("%-*s%s\n", terse ? 0 : 32, tmp, field_values[idx].value ? field_values[idx].value : not_set_str); + printf ("%-*s%s\n", terse ? 0 : ML_VALUE_INDENT, tmp, field_values[idx].value ? field_values[idx].value : not_set_str); g_free (tmp); } if (pretty) { diff --git a/config.h.in b/config.h.in index bdbd783e..2a002e91 100644 --- a/config.h.in +++ b/config.h.in @@ -3,6 +3,9 @@ /* Define if building universal (internal helper macro) */ #undef AC_APPLE_UNIVERSAL_BUILD +/* Define if you have GNU backtrace extensions */ +#undef ENABLE_CRASHTRACE + /* Define to 1 if translation of program messages to the user's native language is requested. */ #undef ENABLE_NLS @@ -44,6 +47,15 @@ /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H +/* Define if you require libnl-1 legacy support */ +#undef HAVE_LIBNL1 + +/* Define if you require specific libnl-2 support */ +#undef HAVE_LIBNL2 + +/* Define if you require specific libnl-3 support */ +#undef HAVE_LIBNL3 + /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H diff --git a/configure b/configure index 637c085b..c6a844fd 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.9.0. +# Generated by GNU Autoconf 2.68 for NetworkManager 0.9.1.95. # # Report bugs to . # @@ -571,8 +571,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='NetworkManager' PACKAGE_TARNAME='NetworkManager' -PACKAGE_VERSION='0.9.0' -PACKAGE_STRING='NetworkManager 0.9.0' +PACKAGE_VERSION='0.9.1.95' +PACKAGE_STRING='NetworkManager 0.9.1.95' PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=NetworkManager' PACKAGE_URL='' @@ -668,6 +668,14 @@ UUID_LIBS UUID_CFLAGS LIBNL_LIBS LIBNL_CFLAGS +LIBNL1_LIBS +LIBNL1_CFLAGS +LIBNL2_LIBS +LIBNL2_CFLAGS +LIBNL_ROUTE3_LIBS +LIBNL_ROUTE3_CFLAGS +LIBNL3_LIBS +LIBNL3_CFLAGS WITH_CONSOLEKIT_FALSE WITH_CONSOLEKIT_TRUE HAVE_SYSTEMD_FALSE @@ -934,6 +942,7 @@ with_resolvconf with_iptables with_system_ca_path with_kernel_firmware_dir +enable_crashtrace enable_more_warnings with_html_dir enable_gtk_doc @@ -969,8 +978,14 @@ GIO_CFLAGS GIO_LIBS QT_CFLAGS QT_LIBS -LIBNL_CFLAGS -LIBNL_LIBS +LIBNL3_CFLAGS +LIBNL3_LIBS +LIBNL_ROUTE3_CFLAGS +LIBNL_ROUTE3_LIBS +LIBNL2_CFLAGS +LIBNL2_LIBS +LIBNL1_CFLAGS +LIBNL1_LIBS UUID_CFLAGS UUID_LIBS IWMX_SDK_CFLAGS @@ -1523,7 +1538,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.9.0 to adapt to many kinds of systems. +\`configure' configures NetworkManager 0.9.1.95 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1593,7 +1608,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of NetworkManager 0.9.0:";; + short | recursive ) echo "Configuration of NetworkManager 0.9.1.95:";; esac cat <<\_ACEOF @@ -1620,6 +1635,7 @@ Optional Features: --enable-wimax enable WiMAX support --enable-polkit enable PolicyKit support --enable-ppp enable PPP/PPPoE support + --disable-crashtrace Disable GNU backtrace extensions --enable-more-warnings Maximum compiler warnings --enable-gtk-doc use gtk-doc to build documentation [[default=no]] --enable-gtk-doc-html build documentation in html format [[default=yes]] @@ -1703,9 +1719,19 @@ Some influential environment variables: GIO_LIBS linker flags for GIO, overriding pkg-config QT_CFLAGS C compiler flags for QT, overriding pkg-config QT_LIBS linker flags for QT, overriding pkg-config - LIBNL_CFLAGS - C compiler flags for LIBNL, overriding pkg-config - LIBNL_LIBS linker flags for LIBNL, overriding pkg-config + LIBNL3_CFLAGS + C compiler flags for LIBNL3, overriding pkg-config + LIBNL3_LIBS linker flags for LIBNL3, overriding pkg-config + LIBNL_ROUTE3_CFLAGS + C compiler flags for LIBNL_ROUTE3, overriding pkg-config + LIBNL_ROUTE3_LIBS + linker flags for LIBNL_ROUTE3, overriding pkg-config + LIBNL2_CFLAGS + C compiler flags for LIBNL2, overriding pkg-config + LIBNL2_LIBS linker flags for LIBNL2, overriding pkg-config + LIBNL1_CFLAGS + C compiler flags for LIBNL1, overriding pkg-config + LIBNL1_LIBS linker flags for LIBNL1, overriding pkg-config UUID_CFLAGS C compiler flags for UUID, overriding pkg-config UUID_LIBS linker flags for UUID, overriding pkg-config IWMX_SDK_CFLAGS @@ -1787,7 +1813,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -NetworkManager configure 0.9.0 +NetworkManager configure 0.9.1.95 generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. @@ -2331,7 +2357,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.9.0, which was +It was created by NetworkManager $as_me 0.9.1.95, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ @@ -3152,7 +3178,7 @@ fi # Define the identity of the package. PACKAGE='NetworkManager' - VERSION='0.9.0' + VERSION='0.9.1.95' cat >>confdefs.h <<_ACEOF @@ -16279,8 +16305,8 @@ fi NM_MAJOR_VERSION=0 NM_MINOR_VERSION=9 -NM_MICRO_VERSION=0 -NM_VERSION=0.9.0 +NM_MICRO_VERSION=1 +NM_VERSION=0.9.1.95 @@ -20828,37 +20854,38 @@ cat >>confdefs.h <<_ACEOF _ACEOF +have_libnl="no" pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBNL" >&5 -$as_echo_n "checking for LIBNL... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBNL3" >&5 +$as_echo_n "checking for LIBNL3... " >&6; } -if test -n "$LIBNL_CFLAGS"; then - pkg_cv_LIBNL_CFLAGS="$LIBNL_CFLAGS" +if test -n "$LIBNL3_CFLAGS"; then + pkg_cv_LIBNL3_CFLAGS="$LIBNL3_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnl-1 >= 1.0-pre8\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libnl-1 >= 1.0-pre8") 2>&5 + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnl-3.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libnl-3.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - pkg_cv_LIBNL_CFLAGS=`$PKG_CONFIG --cflags "libnl-1 >= 1.0-pre8" 2>/dev/null` + pkg_cv_LIBNL3_CFLAGS=`$PKG_CONFIG --cflags "libnl-3.0" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi -if test -n "$LIBNL_LIBS"; then - pkg_cv_LIBNL_LIBS="$LIBNL_LIBS" +if test -n "$LIBNL3_LIBS"; then + pkg_cv_LIBNL3_LIBS="$LIBNL3_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnl-1 >= 1.0-pre8\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libnl-1 >= 1.0-pre8") 2>&5 + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnl-3.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libnl-3.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - pkg_cv_LIBNL_LIBS=`$PKG_CONFIG --libs "libnl-1 >= 1.0-pre8" 2>/dev/null` + pkg_cv_LIBNL3_LIBS=`$PKG_CONFIG --libs "libnl-3.0" 2>/dev/null` else pkg_failed=yes fi @@ -20878,49 +20905,269 @@ else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then - LIBNL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libnl-1 >= 1.0-pre8" 2>&1` + LIBNL3_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libnl-3.0" 2>&1` else - LIBNL_PKG_ERRORS=`$PKG_CONFIG --print-errors "libnl-1 >= 1.0-pre8" 2>&1` + LIBNL3_PKG_ERRORS=`$PKG_CONFIG --print-errors "libnl-3.0" 2>&1` fi # Put the nasty error message in config.log where it belongs - echo "$LIBNL_PKG_ERRORS" >&5 + echo "$LIBNL3_PKG_ERRORS" >&5 - as_fn_error $? "Package requirements (libnl-1 >= 1.0-pre8) were not met: + have_libnl3=no +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + have_libnl3=no +else + LIBNL3_CFLAGS=$pkg_cv_LIBNL3_CFLAGS + LIBNL3_LIBS=$pkg_cv_LIBNL3_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + have_libnl3=yes +fi -$LIBNL_PKG_ERRORS +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBNL_ROUTE3" >&5 +$as_echo_n "checking for LIBNL_ROUTE3... " >&6; } -Consider adjusting the PKG_CONFIG_PATH environment variable if you -installed software in a non-standard prefix. +if test -n "$LIBNL_ROUTE3_CFLAGS"; then + pkg_cv_LIBNL_ROUTE3_CFLAGS="$LIBNL_ROUTE3_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnl-route-3.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libnl-route-3.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBNL_ROUTE3_CFLAGS=`$PKG_CONFIG --cflags "libnl-route-3.0" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$LIBNL_ROUTE3_LIBS"; then + pkg_cv_LIBNL_ROUTE3_LIBS="$LIBNL_ROUTE3_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnl-route-3.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libnl-route-3.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBNL_ROUTE3_LIBS=`$PKG_CONFIG --libs "libnl-route-3.0" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi -Alternatively, you may set the environment variables LIBNL_CFLAGS -and LIBNL_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details." "$LINENO" 5 + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + LIBNL_ROUTE3_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libnl-route-3.0" 2>&1` + else + LIBNL_ROUTE3_PKG_ERRORS=`$PKG_CONFIG --print-errors "libnl-route-3.0" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$LIBNL_ROUTE3_PKG_ERRORS" >&5 + + have_libnl_route3=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it -is in your PATH or set the PKG_CONFIG environment variable to the full -path to pkg-config. + have_libnl_route3=no +else + LIBNL_ROUTE3_CFLAGS=$pkg_cv_LIBNL_ROUTE3_CFLAGS + LIBNL_ROUTE3_LIBS=$pkg_cv_LIBNL_ROUTE3_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + have_libnl_route3=yes +fi +if (test "${have_libnl3}" = "yes" -a "${have_libnl_route3}" = "yes"); then -Alternatively, you may set the environment variables LIBNL_CFLAGS -and LIBNL_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details. +$as_echo "#define HAVE_LIBNL3 1" >>confdefs.h -To get pkg-config, see . -See \`config.log' for more details" "$LINENO" 5; } + LIBNL_CFLAGS="$LIBNL3_CFLAGS $LIBNL_ROUTE3_CFLAGS" + LIBNL_LIBS="$LIBNL3_LIBS $LIBNL_ROUTE3_LIBS" + libnl_version="3" + have_libnl="yes" +else + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBNL2" >&5 +$as_echo_n "checking for LIBNL2... " >&6; } +if test -n "$LIBNL2_CFLAGS"; then + pkg_cv_LIBNL2_CFLAGS="$LIBNL2_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnl-2.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libnl-2.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBNL2_CFLAGS=`$PKG_CONFIG --cflags "libnl-2.0" 2>/dev/null` else - LIBNL_CFLAGS=$pkg_cv_LIBNL_CFLAGS - LIBNL_LIBS=$pkg_cv_LIBNL_LIBS + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$LIBNL2_LIBS"; then + pkg_cv_LIBNL2_LIBS="$LIBNL2_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnl-2.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libnl-2.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBNL2_LIBS=`$PKG_CONFIG --libs "libnl-2.0" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + LIBNL2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libnl-2.0" 2>&1` + else + LIBNL2_PKG_ERRORS=`$PKG_CONFIG --print-errors "libnl-2.0" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$LIBNL2_PKG_ERRORS" >&5 + + have_libnl2=no +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + have_libnl2=no +else + LIBNL2_CFLAGS=$pkg_cv_LIBNL2_CFLAGS + LIBNL2_LIBS=$pkg_cv_LIBNL2_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } + have_libnl2=yes +fi + if (test "${have_libnl2}" = "yes"); then + +$as_echo "#define HAVE_LIBNL2 1" >>confdefs.h + + LIBNL_CFLAGS="$LIBNL2_CFLAGS" + LIBNL_LIBS="$LIBNL2_LIBS" + libnl_version="2" + have_libnl="yes" + else +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBNL1" >&5 +$as_echo_n "checking for LIBNL1... " >&6; } + +if test -n "$LIBNL1_CFLAGS"; then + pkg_cv_LIBNL1_CFLAGS="$LIBNL1_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnl-1 >= 1.0-pre8\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libnl-1 >= 1.0-pre8") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBNL1_CFLAGS=`$PKG_CONFIG --cflags "libnl-1 >= 1.0-pre8" 2>/dev/null` +else + pkg_failed=yes fi + else + pkg_failed=untried +fi +if test -n "$LIBNL1_LIBS"; then + pkg_cv_LIBNL1_LIBS="$LIBNL1_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnl-1 >= 1.0-pre8\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libnl-1 >= 1.0-pre8") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBNL1_LIBS=`$PKG_CONFIG --libs "libnl-1 >= 1.0-pre8" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + LIBNL1_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libnl-1 >= 1.0-pre8" 2>&1` + else + LIBNL1_PKG_ERRORS=`$PKG_CONFIG --print-errors "libnl-1 >= 1.0-pre8" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$LIBNL1_PKG_ERRORS" >&5 + + have_libnl1=no +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + have_libnl1=no +else + LIBNL1_CFLAGS=$pkg_cv_LIBNL1_CFLAGS + LIBNL1_LIBS=$pkg_cv_LIBNL1_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + have_libnl1=yes +fi + if (test "${have_libnl1}" = "yes"); then + +$as_echo "#define HAVE_LIBNL1 1" >>confdefs.h + + LIBNL_CFLAGS="$LIBNL1_CFLAGS" + LIBNL_LIBS="$LIBNL1_LIBS" + libnl_version="1" + have_libnl="yes" + fi + fi +fi + +if (test "${have_libnl}" = "no"); then + as_fn_error $? "libnl development header are required" "$LINENO" 5 +fi + + + +if (test "${libnl_version}" = "1"); then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libnl address caching bug" >&5 $as_echo_n "checking for libnl address caching bug... " >&6; } @@ -21012,6 +21259,7 @@ $as_echo "?" >&6; } ;; esac +fi pkg_failed=no @@ -21956,6 +22204,19 @@ _ACEOF +# Check whether --enable-crashtrace was given. +if test "${enable_crashtrace+set}" = set; then : + enableval=$enable_crashtrace; enable_crashtrace=${enableval} +else + enable_crashtrace=yes +fi + +if test x"$enable_crashtrace" = xyes; then + +$as_echo "#define ENABLE_CRASHTRACE 1" >>confdefs.h + +fi + # Check whether --enable-more-warnings was given. if test "${enable_more_warnings+set}" = set; then : enableval=$enable_more_warnings; set_more_warnings="$enableval" @@ -22929,7 +23190,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.9.0, which was +This file was extended by NetworkManager $as_me 0.9.1.95, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -22995,7 +23256,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.9.0 +NetworkManager config.status 0.9.1.95 configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" @@ -25316,6 +25577,8 @@ else echo PPP support: no fi +echo libnl version: ${libnl_version} + echo echo Building documentation: ${with_docs} echo Building tests: ${with_tests} diff --git a/configure.ac b/configure.ac index c557c6be..75b99781 100644 --- a/configure.ac +++ b/configure.ac @@ -3,9 +3,10 @@ AC_PREREQ([2.63]) dnl The NM version number m4_define([nm_major_version], [0]) m4_define([nm_minor_version], [9]) -m4_define([nm_micro_version], [0]) +m4_define([nm_micro_version], [1]) +m4_define([nm_nano_version], [95]) m4_define([nm_version], - [nm_major_version.nm_minor_version.nm_micro_version]) + [nm_major_version.nm_minor_version.nm_micro_version.nm_nano_version]) AC_INIT([NetworkManager], [nm_version], [http://bugzilla.gnome.org/enter_bug.cgi?product=NetworkManager], @@ -312,10 +313,44 @@ else fi AC_DEFINE_UNQUOTED(NO_CONSOLEKIT, $no_ck, [Define to disable use of ConsoleKit]) -PKG_CHECK_MODULES(LIBNL, libnl-1 >= 1.0-pre8) +have_libnl="no" +PKG_CHECK_MODULES(LIBNL3, libnl-3.0, [have_libnl3=yes], [have_libnl3=no]) +PKG_CHECK_MODULES(LIBNL_ROUTE3, libnl-route-3.0, [have_libnl_route3=yes], [have_libnl_route3=no]) +if (test "${have_libnl3}" = "yes" -a "${have_libnl_route3}" = "yes"); then + AC_DEFINE(HAVE_LIBNL3, 1, [Define if you require specific libnl-3 support]) + LIBNL_CFLAGS="$LIBNL3_CFLAGS $LIBNL_ROUTE3_CFLAGS" + LIBNL_LIBS="$LIBNL3_LIBS $LIBNL_ROUTE3_LIBS" + libnl_version="3" + have_libnl="yes" +else + PKG_CHECK_MODULES(LIBNL2, libnl-2.0, [have_libnl2=yes], [have_libnl2=no]) + if (test "${have_libnl2}" = "yes"); then + AC_DEFINE(HAVE_LIBNL2, 1, [Define if you require specific libnl-2 support]) + LIBNL_CFLAGS="$LIBNL2_CFLAGS" + LIBNL_LIBS="$LIBNL2_LIBS" + libnl_version="2" + have_libnl="yes" + else + PKG_CHECK_MODULES(LIBNL1, libnl-1 >= 1.0-pre8, [have_libnl1=yes], [have_libnl1=no]) + if (test "${have_libnl1}" = "yes"); then + AC_DEFINE(HAVE_LIBNL1, 1, [Define if you require libnl-1 legacy support]) + LIBNL_CFLAGS="$LIBNL1_CFLAGS" + LIBNL_LIBS="$LIBNL1_LIBS" + libnl_version="1" + have_libnl="yes" + fi + fi +fi + +if (test "${have_libnl}" = "no"); then + AC_MSG_ERROR([libnl development header are required]) +fi AC_SUBST(LIBNL_CFLAGS) AC_SUBST(LIBNL_LIBS) -NM_LIBNL_CHECK + +if (test "${libnl_version}" = "1"); then + NM_LIBNL_CHECK +fi PKG_CHECK_MODULES(UUID, uuid) AC_SUBST(UUID_CFLAGS) @@ -576,6 +611,13 @@ fi AC_DEFINE_UNQUOTED(KERNEL_FIRMWARE_DIR, "$KERNEL_FIRMWARE_DIR", [Define to path of the kernel firmware directory]) AC_SUBST(KERNEL_FIRMWARE_DIR) +AC_ARG_ENABLE(crashtrace, + AS_HELP_STRING([--disable-crashtrace], [Disable GNU backtrace extensions]), + [enable_crashtrace=${enableval}], [enable_crashtrace=yes]) +if test x"$enable_crashtrace" = xyes; then + AC_DEFINE(ENABLE_CRASHTRACE, 1, [Define if you have GNU backtrace extensions]) +fi + NM_COMPILER_WARNINGS GTK_DOC_CHECK(1.0) @@ -738,6 +780,8 @@ else echo PPP support: no fi +echo libnl version: ${libnl_version} + echo echo Building documentation: ${with_docs} echo Building tests: ${with_tests} diff --git a/data/Makefile.in b/data/Makefile.in index a5061e00..08280c96 100644 --- a/data/Makefile.in +++ b/data/Makefile.in @@ -177,8 +177,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/docs/Makefile.in b/docs/Makefile.in index 91ce98e5..334c16cf 100644 --- a/docs/Makefile.in +++ b/docs/Makefile.in @@ -192,8 +192,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/docs/api/Makefile.in b/docs/api/Makefile.in index 47874caf..043ecf8a 100644 --- a/docs/api/Makefile.in +++ b/docs/api/Makefile.in @@ -196,8 +196,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/docs/api/html/NetworkManager.devhelp b/docs/api/html/NetworkManager.devhelp index 225718a4..a6c6d17d 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 e5538797..2c08e0b1 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 c734b922..84aa84c9 100644 --- a/docs/api/html/index.html +++ b/docs/api/html/index.html @@ -22,11 +22,11 @@     
  

-

Version 0.9.0 +

Version 0.9.1.95

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 5db0ccd8..59994af9 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

@@ -228,7 +228,7 @@


-

Table 2. bluetooth setting

+

Table 2. bluetooth setting

@@ -267,7 +267,7 @@


-

Table 3. cdma setting

+

Table 3. cdma setting

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


-

Table 4. connection setting

+

Table 4. connection setting

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


-

Table 5. gsm setting

+

Table 5. gsm setting

@@ -480,7 +480,7 @@


-

Table 6. ipv4 setting

+

Table 6. ipv4 setting

@@ -579,7 +579,7 @@


-

Table 7. ipv6 setting

+

Table 7. ipv6 setting

@@ -660,7 +660,7 @@


-

Table 8. 802-11-olpc-mesh setting

+

Table 8. 802-11-olpc-mesh setting

@@ -705,7 +705,7 @@


-

Table 9. ppp setting

+

Table 9. ppp setting

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


-

Table 10. pppoe setting

+

Table 10. pppoe setting

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


-

Table 11. serial setting

+

Table 11. serial setting

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


-

Table 12. vpn setting

+

Table 12. vpn setting

@@ -999,7 +999,7 @@


-

Table 13. wimax setting

+

Table 13. wimax setting

@@ -1038,7 +1038,7 @@


-

Table 14. 802-3-ethernet setting

+

Table 14. 802-3-ethernet setting

@@ -1131,7 +1131,7 @@


-

Table 15. 802-11-wireless setting

+

Table 15. 802-11-wireless setting

@@ -1236,7 +1236,7 @@


-

Table 16. 802-11-wireless-security setting

+

Table 16. 802-11-wireless-security setting

diff --git a/docs/api/html/spec.html b/docs/api/html/spec.html index c8abf6ca..3d38d7e3 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.0

NetworkManager D-Bus Interface Specification

Version 0.9.0

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

NetworkManager D-Bus Interface Specification

Version 0.9.1.95

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 @@ -112,7 +112,7 @@ 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.

-

Interfaces

+

Interfaces

org.freedesktop.NetworkManager

Methods:

GetDevices ( ) → @@ -1169,6 +1169,129 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

Interface has no signals.

Interface has no properties.

+ +

org.freedesktop.NetworkManager.SecretAgent

+ Private D-Bus interface used by secret agents that store and provide + 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. +

Methods:

GetSecrets ( + a{sa{sv}}: connection, o: connection_path, s: setting_name, as: hints, u: flags + ) → + a{sa{sv}}

+ Retrieve and return stored secrets, if any, or request new + secrets from the agent's user. +

Parameters

connection - + a{sa{sv}} + (String_String_Variant_Map_Map) +
+ Nested settings maps containing the connection for which + secrets are being requested. This may contain system-owned + secrets if the agent has successfully authenticated to + modify system network settings and the GetSecrets request + flags allow user interaction. +
connection_path - + o
+ Object path of the connection for which secrets are being + requested. +
setting_name - + s
+ Setting name for which secrets are being requested. +
hints - + as
+ Array of strings of key names in the requested setting for + which NetworkManager thinks a secrets may be required, + and/or well-known identifiers and data that may be useful + to the client in processing the secrets request. The Agent + should return any secrets it has, or that it thinks are + required, regardless of what hints NetworkManager sends + in this request. +
flags - + u + (NM_SECRET_AGENT_GET_SECRETS_FLAGS) +
+ Flags which modify the behavior of the secrets request. + If true, new secrets are assumed to be invalid or incorrect, + and the agent should ask the user for new secrets. If false, + existing secrets should be retrieved from storage and + returned without interrupting the user. +

Returns

secrets - + a{sa{sv}} + (String_String_Variant_Map_Map) +
+ Nested settings maps containing secrets. Each setting MUST + contain at least the 'name' field, containing the name of + the setting, and one or more secrets. +

CancelGetSecrets ( + o: connection_path, s: setting_name + ) → + nothing

+ Cancel a pending GetSecrets request for secrets of the given + connection. Any matching request should be canceled. +

Parameters

connection_path - + o
+ Object path of the connection for which, if secrets are being + requested, the request should be canceled. +
setting_name - + s
+ Setting name for which secrets for this connection were + originally being requested. +

SaveSecrets ( + a{sa{sv}}: connection, o: connection_path + ) → + nothing

+ Save given secrets to backing storage. +

Parameters

connection - + a{sa{sv}} + (String_String_Variant_Map_Map) +
+ Nested settings maps containing the entire connection + (including secrets), for which the agent should save the + 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. +
connection_path - + o
+ Object path of the connection for which the agent should + save secrets to backing storage. +

DeleteSecrets ( + a{sa{sv}}: connection, o: connection_path + ) → + nothing

+ Delete secrets from backing storage. +

Parameters

connection - + a{sa{sv}} + (String_String_Variant_Map_Map) +
+ Nested settings maps containing the connection properties + (sans secrets), for which the agent should delete the + secrets from backing storage. +
connection_path - + o
+ Object path of the connection for which the agent should + delete secrets from backing storage. +

Interface has no signals.

Interface has no properties.

Sets of flags:

NM_SECRET_AGENT_GET_SECRETS_FLAGS

+ Flags modifying the behavior of GetSecrets request. +
NM_SECRET_AGENT_GET_SECRETS_FLAG_NONE = 0x0
+ No special behavior; by default no user interaction is allowed and + requests for secrets are fulfilled from persistent storage, or + if no secrets are available an error is returned. +
NM_SECRET_AGENT_GET_SECRETS_FLAG_ALLOW_INTERACTION = 0x1
+ Allows the request to interact with the user, possibly prompting + via UI for secrets if any are required, or if none are found in + persistent storage. +
NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW = 0x2
+ Explicitly prompt for new secrets from the user. This flag + signals that NetworkManager thinks any existing secrets are + invalid or wrong. This flag implies that interaction is allowed. +
+ +

org.freedesktop.NetworkManager.VPN.Connection

Represents an active connection to a Virtual Private Network.

Interface has no methods.

Signals:

PropertiesChanged ( @@ -1379,7 +1502,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.org.freedesktop.NetworkManager.VPN.Error.BadArguments

Invalid arguments were passed with the request. FIXME: too general.

org.freedesktop.NetworkManager.VPN.Error.LaunchFailed

A binary providing the service failed to launch.

org.freedesktop.NetworkManager.VPN.Error.ConnectionInvalid

The request could not be processed because the VPN connection settings were invalid. -

Index

Index of interfaces

Index of types

- - diff --git a/docs/libnm-glib/html/NMRemoteConnection.html b/docs/libnm-glib/html/NMRemoteConnection.html index 87aaf32b..bbdd59fd 100644 --- a/docs/libnm-glib/html/NMRemoteConnection.html +++ b/docs/libnm-glib/html/NMRemoteConnection.html @@ -221,12 +221,13 @@ save them in the settings service. - - @@ -256,7 +257,7 @@ Delete the connection. - @@ -286,12 +287,13 @@ Request the connection's secrets. - - diff --git a/docs/libnm-glib/html/NMRemoteSettings.html b/docs/libnm-glib/html/NMRemoteSettings.html index 0457a567..09f803ff 100644 --- a/docs/libnm-glib/html/NMRemoteSettings.html +++ b/docs/libnm-glib/html/NMRemoteSettings.html @@ -421,7 +421,7 @@ added, not the object itself - @@ -457,12 +457,13 @@ persistent hostname - - diff --git a/docs/libnm-glib/html/NMSecretAgent.html b/docs/libnm-glib/html/NMSecretAgent.html index 4b08499c..ff6be0da 100644 --- a/docs/libnm-glib/html/NMSecretAgent.html +++ b/docs/libnm-glib/html/NMSecretAgent.html @@ -75,15 +75,15 @@ enum const char **hints, NMSecretAgentGetSecretsFlags flags, NMSecretAgentGetSecretsFunc callback, - gpointer callback_data); + gpointer user_data); voidnm_secret_agent_save_secrets (NMSecretAgent *self, NMConnection *connection, NMSecretAgentSaveSecretsFunc callback, - gpointer callback_data); + gpointer user_data); voidnm_secret_agent_delete_secrets (NMSecretAgent *self, NMConnection *connection, NMSecretAgentDeleteSecretsFunc callback, - gpointer callback_data); + gpointer user_data);
@@ -263,7 +263,7 @@ is allowed. /* Called when the subclass should retrieve and return secrets. Subclass * must copy or reference any arguments it may require after returning from * this method, as the arguments will freed (except for 'agent', 'callback', - * and 'callback_data' of course). If the request is canceled, the callback + * and 'user_data' of course). If the request is canceled, the callback * should still be called, but with the NM_SECRET_AGENT_ERROR_AGENT_CANCELED * error. */ @@ -274,7 +274,7 @@ is allowed. const char **hints, NMSecretAgentGetSecretsFlags flags, NMSecretAgentGetSecretsFunc callback, - gpointer callback_data); + gpointer user_data); /* Called when the subclass should cancel an outstanding request to * get secrets for a given connection. Canceling the request MUST @@ -289,26 +289,26 @@ is allowed. /* Called when the subclass should save the secrets contained in the * connection to backing storage. Subclass must copy or reference any * arguments it may require after returning from this method, as the - * arguments will freed (except for 'agent', 'callback', and 'callback_data' + * arguments will freed (except for 'agent', 'callback', and 'user_data' * of course). */ void (*save_secrets) (NMSecretAgent *agent, NMConnection *connection, const char *connection_path, NMSecretAgentSaveSecretsFunc callback, - gpointer callback_data); + gpointer user_data); /* Called when the subclass should delete the secrets contained in the * connection from backing storage. Subclass must copy or reference any * arguments it may require after returning from this method, as the - * arguments will freed (except for 'agent', 'callback', and 'callback_data' + * arguments will freed (except for 'agent', 'callback', and 'user_data' * of course). */ void (*delete_secrets) (NMSecretAgent *agent, NMConnection *connection, const char *connection_path, NMSecretAgentDeleteSecretsFunc callback, - gpointer callback_data); + gpointer user_data); /* Signals */ void (*registration_result) (NMSecretAgent *agent, GError *error); @@ -393,7 +393,7 @@ store secrets on behalf of this user. const char **hints, NMSecretAgentGetSecretsFlags flags, NMSecretAgentGetSecretsFunc callback, - gpointer callback_data); + gpointer user_data);

Asyncronously retrieve secrets belonging to connection for the setting setting_name. flags indicate specific behavior that the secret @@ -435,8 +435,8 @@ VFunc: get_secrets

- - + @@ -448,7 +448,7 @@ VFunc: get_secrets
void                nm_secret_agent_save_secrets        (NMSecretAgent *self,
                                                          NMConnection *connection,
                                                          NMSecretAgentSaveSecretsFunc callback,
-                                                         gpointer callback_data);
+ gpointer user_data);

Asyncronously ensure that all secrets inside connection are stored to disk. @@ -475,8 +475,8 @@ VFunc: save_secrets

- - + @@ -488,7 +488,7 @@ VFunc: save_secrets
void                nm_secret_agent_delete_secrets      (NMSecretAgent *self,
                                                          NMConnection *connection,
                                                          NMSecretAgentDeleteSecretsFunc callback,
-                                                         gpointer callback_data);
+ gpointer user_data);

Asynchronously ask the agent to delete all saved secrets belonging to connection. @@ -515,8 +515,8 @@ VFunc: delete_secrets

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

callback :

callback to be called when disconnect operation completes. [scope async] +callback to be called when disconnect +operation completes. [scope async][allow-none]

user_data :

caller-specific data passed to callback +caller-specific data passed to callback. [closure]

callback :

a function to be called when the commit completes. [scope async] +a function to be called when the +commit completes. [scope async][allow none]

user_data :

caller-specific data to be passed to callback +caller-specific data to be passed to callback. [closure]

user_data :

caller-specific data to be passed to callback +caller-specific data to be passed to callback. [closure]

callback :

a function to be called when the update completes. [scope async] +a function to be called when the update completes; +must not be NULL. [scope async]

user_data :

caller-specific data to be passed to callback +caller-specific data to be passed to callback. [closure]

user_data :

caller-specific data passed to callback +caller-specific data passed to callback. [closure]

callback :

callback to be called when the hostname operation completes. [scope async] +callback to be called when the +hostname operation completes. [scope async][allow none]

user_data :

caller-specific data passed to callback +caller-specific data passed to callback. [closure]

callback_data :

. [closure] +

user_data :

caller-specific data to be passed to callback. [closure]

callback_data :

. [closure] +

user_data :

caller-specific data to be passed to callback. [closure]

callback_data :

. [closure] +

user_data :

caller-specific data to be passed to callback. [closure]

-libnm-glib API Reference

+libnm-glib API Reference
NMClient diff --git a/docs/libnm-glib/html/index.html b/docs/libnm-glib/html/index.html index 10f59ff8..c64038ed 100644 --- a/docs/libnm-glib/html/index.html +++ b/docs/libnm-glib/html/index.html @@ -29,7 +29,7 @@

-

+

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 diff --git a/docs/libnm-util/Makefile.in b/docs/libnm-util/Makefile.in index 0b90a06e..43d198aa 100644 --- a/docs/libnm-util/Makefile.in +++ b/docs/libnm-util/Makefile.in @@ -159,8 +159,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/docs/libnm-util/html/NMConnection.html b/docs/libnm-util/html/NMConnection.html index c700c0d9..3eb0788a 100644 --- a/docs/libnm-util/html/NMConnection.html +++ b/docs/libnm-util/html/NMConnection.html @@ -82,6 +82,10 @@ enum N const char * nm_connection_need_secrets (NMConnection *connection, GPtrArray **hints); void nm_connection_clear_secrets (NMConnection *connection); +void nm_connection_clear_secrets_with_flags + (NMConnection *connection, + NMSettingClearSecretsWithFlagsFn func, + gpointer user_data); gboolean nm_connection_update_secrets (NMConnection *connection, const char *setting_name, GHashTable *secrets, @@ -89,6 +93,8 @@ const char * void nm_connection_set_path (NMConnection *connection, const char *path); const char * nm_connection_get_path (NMConnection *connection); +gboolean nm_connection_is_type (NMConnection *connection, + const char *type); void nm_connection_for_each_setting_value (NMConnection *connection, NMSettingValueIterFn func, @@ -153,6 +159,7 @@ const char *

Signals

+  "secrets-cleared"                                : Run First
   "secrets-updated"                                : Run First
 
@@ -700,6 +707,38 @@ keeping secret data in memory when not needed.

+

nm_connection_clear_secrets_with_flags ()

+
void                nm_connection_clear_secrets_with_flags
+                                                        (NMConnection *connection,
+                                                         NMSettingClearSecretsWithFlagsFn func,
+                                                         gpointer user_data);
+

+Clears and frees secrets determined by func. +

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

connection :

the NMConnection +

func :

function to be called to determine whether a +specific secret should be cleared or not. [scope call] +

user_data :

caller-supplied data passed to func +
+
+
+

nm_connection_update_secrets ()

gboolean            nm_connection_update_secrets        (NMConnection *connection,
                                                          const char *setting_name,
@@ -796,6 +835,37 @@ Returns the connection's D-Bus path.
 

+

nm_connection_is_type ()

+
gboolean            nm_connection_is_type               (NMConnection *connection,
+                                                         const char *type);
+

+A convenience function to check if the given connection is a particular +type (ie wired, wifi, ppp, etc). Checks the "type" +property of the connection and matches that against type. +

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

connection :

the NMConnection +

type :

a setting name to check the connection's type against (like +NM_SETTING_WIRELESS_SETTING_NAME or NM_SETTING_WIRED_SETTING_NAME)

Returns :

+TRUE if the connection is of the given type, FALSE if not
+
+
+

nm_connection_for_each_setting_value ()

void                nm_connection_for_each_setting_value
                                                         (NMConnection *connection,
@@ -1344,6 +1414,29 @@ of the D-Bus path of the connection as provided by a settings service.
 

Signal Details

+

The "secrets-cleared" signal

+
void                user_function                      (NMConnection *connection,
+                                                        gpointer      user_data)       : Run First
+

+The ::secrets-cleared signal is emitted when the secrets of a connection +are cleared. +

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

connection :

the object on which the signal is emitted

user_data :

user data set when the signal handler was connected.
+
+
+

The "secrets-updated" signal

void                user_function                      (NMConnection *connection,
                                                         gchar        *setting_name,
diff --git a/docs/libnm-util/html/NMSetting.html b/docs/libnm-util/html/NMSetting.html
index 0cc1fd03..eec15973 100644
--- a/docs/libnm-util/html/NMSetting.html
+++ b/docs/libnm-util/html/NMSetting.html
@@ -56,6 +56,10 @@ enum                NMSetti
 enum                NMSettingSecretFlags;
 enum                NMSettingCompareFlags;
                     NMSetting;
+gboolean            (*NMSettingClearSecretsWithFlagsFn) (NMSetting *setting,
+                                                         const char *secret,
+                                                         NMSettingSecretFlags flags,
+                                                         gpointer user_data);
                     NMSettingClass;
 void                (*NMSettingValueIterFn)             (NMSetting *setting,
                                                          const char *key,
@@ -87,6 +91,9 @@ enum                gpointer user_data);
 char *              nm_setting_to_string                (NMSetting *setting);
 void                nm_setting_clear_secrets            (NMSetting *setting);
+void                nm_setting_clear_secrets_with_flags (NMSetting *setting,
+                                                         NMSettingClearSecretsWithFlagsFn func,
+                                                         gpointer user_data);
 GPtrArray *         nm_setting_need_secrets             (NMSetting *setting);
 gboolean            nm_setting_update_secrets           (NMSetting *setting,
                                                          GHashTable *secrets,
@@ -380,6 +387,42 @@ It should only be accessed through the functions described below.
 

+

NMSettingClearSecretsWithFlagsFn ()

+
gboolean            (*NMSettingClearSecretsWithFlagsFn) (NMSetting *setting,
+                                                         const char *secret,
+                                                         NMSettingSecretFlags flags,
+                                                         gpointer user_data);
+
++ + + + + + + + + + + + + + + + + + + + + + +

setting :

The setting for which secrets are being iterated

secret :

The secret's name

flags :

The secret's flags, eg NM_SETTING_SECRET_FLAG_AGENT_OWNED +

user_data :

User data passed to nm_connection_clear_secrets_with_flags() +

Returns :

+TRUE to clear the secret, FALSE to not clear the secret
+
+
+

NMSettingClass

typedef struct {
 	GObjectClass parent;
@@ -414,10 +457,14 @@ It should only be accessed through the functions described below.
 	                                  const GParamSpec *prop_spec,
 	                                  NMSettingCompareFlags flags);
 
+	void        (*clear_secrets_with_flags) (NMSetting *setting,
+	                                         GParamSpec *pspec,
+	                                         NMSettingClearSecretsWithFlagsFn func,
+	                                         gpointer user_data);
+
 	/* Padding for future expansion */
 	void (*_reserved1) (void);
 	void (*_reserved2) (void);
-	void (*_reserved3) (void);
 } NMSettingClass;
 

@@ -635,8 +682,9 @@ failed validation, and in what way that property failed validation.

all_settings :

-a GSList of all settings in the connection from which setting -came +a GSList of all settings +in the connection from which setting came. [element-type NMSetting] +

error :

@@ -851,6 +899,37 @@ leakage of information.

+

nm_setting_clear_secrets_with_flags ()

+
void                nm_setting_clear_secrets_with_flags (NMSetting *setting,
+                                                         NMSettingClearSecretsWithFlagsFn func,
+                                                         gpointer user_data);
+

+Clears and frees secrets determined by func. +

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

setting :

the NMSetting +

func :

function to be called to determine whether a +specific secret should be cleared or not. [scope call] +

user_data :

caller-supplied data passed to func +
+
+
+

nm_setting_need_secrets ()

GPtrArray *         nm_setting_need_secrets             (NMSetting *setting);

diff --git a/docs/libnm-util/html/api-index-full.html b/docs/libnm-util/html/api-index-full.html index f47ea2c9..d2b7bdbe 100644 --- a/docs/libnm-util/html/api-index-full.html +++ b/docs/libnm-util/html/api-index-full.html @@ -21,20 +21,10 @@ Next -8 -  |  - A -  |  - B -  |  - C -  |  - D +C  |  I  |  - M -  |  S  |  T @@ -49,36 +39,13 @@

API Index

-

8

-
-NM80211ApFlags, enum in NetworkManager -
-
-
-NM80211ApSecurityFlags, enum in NetworkManager -
-
-
-NM80211Mode, enum in NetworkManager -
-
-

A

-
-NMActiveConnectionState, enum in NetworkManager -
-
-

B

-
-NMBluetoothCapabilities, enum in NetworkManager -
-
-

C

+

C

-NM_CHECK_VERSION, macro in nm-version +NMConnection, struct in NMConnection
-NMConnection, struct in NMConnection +NMConnection::secrets-cleared, object signal in NMConnection
@@ -106,6 +73,10 @@ NM_CHECK_VERSION, macro in nm-version
+nm_connection_clear_secrets_with_flags, function in NMConnection +
+
+
nm_connection_compare, function in NMConnection
@@ -222,6 +193,10 @@ NM_CHECK_VERSION, macro in nm-version
+nm_connection_is_type, function in NMConnection +
+
+
nm_connection_lookup_setting_type, function in NMConnection
@@ -269,275 +244,6 @@ NM_CHECK_VERSION, macro in nm-version 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 @@ -763,19 +469,6 @@ NMDeviceWifiCapabilities, enum in NetworkManager 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 @@ -966,6 +659,10 @@ NM_MINOR_VERSION, macro in nm-version
+NMSettingClearSecretsWithFlagsFn, user_function in NMSetting +
+
+
NMSettingCompareFlags, enum in NMSetting
@@ -2098,6 +1795,10 @@ NM_MINOR_VERSION, macro in nm-version
+nm_setting_clear_secrets_with_flags, function in NMSetting +
+
+
nm_setting_compare, function in NMSetting
@@ -3661,14 +3362,6 @@ NM_SETTING_SECRET_FLAGS_ALL, macro in nm-setting-private 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 @@ -3865,93 +3558,9 @@ NM_STATE_CONNECTED, macro in NetworkManager

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 d97a8939..e21c769e 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 diff --git a/docs/libnm-util/html/index.sgml b/docs/libnm-util/html/index.sgml index eda2a542..306a2efd 100644 --- a/docs/libnm-util/html/index.sgml +++ b/docs/libnm-util/html/index.sgml @@ -33,9 +33,11 @@ + + @@ -61,6 +63,7 @@ + @@ -95,6 +98,7 @@ + @@ -116,6 +120,7 @@ + diff --git a/docs/libnm-util/html/libnm-util-nm-utils.html b/docs/libnm-util/html/libnm-util-nm-utils.html index 00c11126..d4440e8d 100644 --- a/docs/libnm-util/html/libnm-util-nm-utils.html +++ b/docs/libnm-util/html/libnm-util-nm-utils.html @@ -507,7 +507,8 @@ extended in the future.

list :

-a list of NMIP4Address objects +a list of NMIP4Address objects. [element-type NMIP4Address] +

value :

@@ -561,7 +562,8 @@ be extended in the future.

list :

-a list of NMIP4Route objects +a list of NMIP4Route objects. [element-type NMIP4Route] +

value :

@@ -675,7 +677,8 @@ future.

list :

-a list of NMIP6Address objects +a list of NMIP6Address objects. [element-type NMIP6Address] +

value :

@@ -730,7 +733,8 @@ guaranteed to be stable and may be extended in the future.

list :

-a list of NMIP6Route objects +a list of NMIP6Route objects. [element-type NMIP6Route] +

value :

diff --git a/docs/libnm-util/html/libnm-util.devhelp b/docs/libnm-util/html/libnm-util.devhelp index 21ba39f2..7e48f817 100644 --- a/docs/libnm-util/html/libnm-util.devhelp +++ b/docs/libnm-util/html/libnm-util.devhelp @@ -50,9 +50,11 @@ + + @@ -76,6 +78,7 @@ + @@ -89,6 +92,7 @@ + @@ -104,6 +108,7 @@ + diff --git a/docs/libnm-util/html/libnm-util.devhelp2 b/docs/libnm-util/html/libnm-util.devhelp2 index a6544ddd..3c4ec11b 100644 --- a/docs/libnm-util/html/libnm-util.devhelp2 +++ b/docs/libnm-util/html/libnm-util.devhelp2 @@ -50,9 +50,11 @@ + + @@ -76,6 +78,7 @@ + @@ -89,6 +92,7 @@ + @@ -104,6 +108,7 @@ + diff --git a/docs/libnm-util/libnm-util-sections.txt b/docs/libnm-util/libnm-util-sections.txt index 06bd0d32..8a3cf261 100644 --- a/docs/libnm-util/libnm-util-sections.txt +++ b/docs/libnm-util/libnm-util-sections.txt @@ -657,6 +657,7 @@ NM_SETTING_NAME NMSettingSecretFlags NMSettingCompareFlags NMSetting +NMSettingClearSecretsWithFlagsFn NMSettingClass NMSettingValueIterFn nm_setting_get_type @@ -672,6 +673,7 @@ nm_setting_diff nm_setting_enumerate_values nm_setting_to_string nm_setting_clear_secrets +nm_setting_clear_secrets_with_flags nm_setting_need_secrets nm_setting_update_secrets nm_setting_get_secret_flags @@ -769,9 +771,11 @@ nm_connection_diff nm_connection_verify nm_connection_need_secrets nm_connection_clear_secrets +nm_connection_clear_secrets_with_flags nm_connection_update_secrets nm_connection_set_path nm_connection_get_path +nm_connection_is_type nm_connection_for_each_setting_value nm_connection_to_hash nm_connection_dump diff --git a/examples/C/Makefile.in b/examples/C/Makefile.in index ea5932e6..a7a04ce9 100644 --- a/examples/C/Makefile.in +++ b/examples/C/Makefile.in @@ -193,8 +193,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/examples/C/glib/Makefile.in b/examples/C/glib/Makefile.in index 1d637510..2d10c11d 100644 --- a/examples/C/glib/Makefile.in +++ b/examples/C/glib/Makefile.in @@ -239,8 +239,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/examples/C/qt/Makefile.in b/examples/C/qt/Makefile.in index a07fe015..d52d61b1 100644 --- a/examples/C/qt/Makefile.in +++ b/examples/C/qt/Makefile.in @@ -196,8 +196,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/examples/C/qt/add-connection-wired.cpp b/examples/C/qt/add-connection-wired.cpp index f9e3f6c1..475eafff 100644 --- a/examples/C/qt/add-connection-wired.cpp +++ b/examples/C/qt/add-connection-wired.cpp @@ -72,4 +72,6 @@ int main() { QDBusConnection::systemBus()); addConnection(interface, "__Test connection__"); + + return 0; } diff --git a/examples/Makefile.in b/examples/Makefile.in index a84d601c..735b9665 100644 --- a/examples/Makefile.in +++ b/examples/Makefile.in @@ -192,8 +192,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/examples/python/Makefile.am b/examples/python/Makefile.am index 7fa376ef..59e16088 100644 --- a/examples/python/Makefile.am +++ b/examples/python/Makefile.am @@ -6,6 +6,5 @@ EXTRA_DIST = \ list-connections.py \ show-bssids.py \ disconnect-device.py \ - get-active-connections.py - - + get-active-connections.py \ + list-devices.py diff --git a/examples/python/Makefile.in b/examples/python/Makefile.in index 983f843d..59f379e3 100644 --- a/examples/python/Makefile.in +++ b/examples/python/Makefile.in @@ -152,8 +152,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ @@ -461,7 +469,8 @@ uninstall-am: list-connections.py \ show-bssids.py \ disconnect-device.py \ - get-active-connections.py + get-active-connections.py \ + list-devices.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/Makefile.in b/include/Makefile.in index fda755a2..27d7ad02 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -179,8 +179,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/include/nm-glib-compat.h b/include/nm-glib-compat.h index 9c1fe347..4b968710 100644 --- a/include/nm-glib-compat.h +++ b/include/nm-glib-compat.h @@ -16,7 +16,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 2008 Red Hat, Inc. + * (C) Copyright 2008 - 2011 Red Hat, Inc. */ #ifndef NM_GLIB_COMPAT_H @@ -24,14 +24,9 @@ #include -#if !GLIB_CHECK_VERSION(2,14,0) - -#define g_timeout_add_seconds(i, f, d) \ - g_timeout_add (i * G_USEC_PER_SEC, f, d) - -#define g_timeout_add_seconds_full(p, i, f, d, n) \ - g_timeout_add_full (p, i * G_USEC_PER_SEC, f, d, n) - -#endif /* !GLIB_CHECK_VERSION(2,14,0) */ +#if !GLIB_CHECK_VERSION(2,31,0) +#define g_value_set_schar g_value_set_char +#define g_value_get_schar g_value_get_char +#endif #endif /* NM_GLIB_COMPAT_H */ diff --git a/include/nm-version.h b/include/nm-version.h index 3d3adfba..b893219d 100644 --- a/include/nm-version.h +++ b/include/nm-version.h @@ -43,7 +43,7 @@ * Evaluates to the micro version number of NetworkManager which this source * compiled against. */ -#define NM_MICRO_VERSION (0) +#define NM_MICRO_VERSION (1) /** * NM_CHECK_VERSION: diff --git a/include/wireless-helper.h b/include/wireless-helper.h index d150ef7d..2e4509a8 100644 --- a/include/wireless-helper.h +++ b/include/wireless-helper.h @@ -27,6 +27,6 @@ #include #include #include -#include +#include #include diff --git a/initscript/Arch/Makefile.in b/initscript/Arch/Makefile.in index 86adf2b2..3b7349d4 100644 --- a/initscript/Arch/Makefile.in +++ b/initscript/Arch/Makefile.in @@ -177,8 +177,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/initscript/Debian/Makefile.in b/initscript/Debian/Makefile.in index 8b3384b6..73daae51 100644 --- a/initscript/Debian/Makefile.in +++ b/initscript/Debian/Makefile.in @@ -177,8 +177,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/initscript/Gentoo/Makefile.in b/initscript/Gentoo/Makefile.in index 5a1514ed..dd92b10e 100644 --- a/initscript/Gentoo/Makefile.in +++ b/initscript/Gentoo/Makefile.in @@ -177,8 +177,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/initscript/Makefile.in b/initscript/Makefile.in index 582c9dd5..becf7c4b 100644 --- a/initscript/Makefile.in +++ b/initscript/Makefile.in @@ -202,8 +202,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/initscript/Mandriva/Makefile.in b/initscript/Mandriva/Makefile.in index d1006a13..f0412c2a 100644 --- a/initscript/Mandriva/Makefile.in +++ b/initscript/Mandriva/Makefile.in @@ -177,8 +177,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/initscript/RedHat/Makefile.in b/initscript/RedHat/Makefile.in index 4449798b..2329b6e0 100644 --- a/initscript/RedHat/Makefile.in +++ b/initscript/RedHat/Makefile.in @@ -177,8 +177,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/initscript/SUSE/Makefile.in b/initscript/SUSE/Makefile.in index 5621ccdb..bbc5a8a6 100644 --- a/initscript/SUSE/Makefile.in +++ b/initscript/SUSE/Makefile.in @@ -153,8 +153,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/initscript/Slackware/Makefile.in b/initscript/Slackware/Makefile.in index df3222ff..8a84419c 100644 --- a/initscript/Slackware/Makefile.in +++ b/initscript/Slackware/Makefile.in @@ -177,8 +177,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/initscript/linexa/Makefile.in b/initscript/linexa/Makefile.in index 0b6124e2..de30d93a 100644 --- a/initscript/linexa/Makefile.in +++ b/initscript/linexa/Makefile.in @@ -177,8 +177,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/initscript/paldo/Makefile.in b/initscript/paldo/Makefile.in index d7550c6a..c2a53bdf 100644 --- a/initscript/paldo/Makefile.in +++ b/initscript/paldo/Makefile.in @@ -177,8 +177,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/introspection/Makefile.in b/introspection/Makefile.in index 95c3c47e..a92e5793 100644 --- a/introspection/Makefile.in +++ b/introspection/Makefile.in @@ -153,8 +153,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/introspection/all.xml.in b/introspection/all.xml.in index 4d2c2721..bcb8d045 100644 --- a/introspection/all.xml.in +++ b/introspection/all.xml.in @@ -43,6 +43,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + diff --git a/libnm-glib/Makefile.in b/libnm-glib/Makefile.in index 9728f7d9..513c607f 100644 --- a/libnm-glib/Makefile.in +++ b/libnm-glib/Makefile.in @@ -348,8 +348,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/libnm-glib/nm-device.c b/libnm-glib/nm-device.c index f06c1e4a..1f9f3671 100644 --- a/libnm-glib/nm-device.c +++ b/libnm-glib/nm-device.c @@ -1475,8 +1475,9 @@ deactivate_cb (DBusGProxy *proxy, /** * nm_device_disconnect: * @device: a #NMDevice - * @callback: (scope async): callback to be called when disconnect operation completes - * @user_data: caller-specific data passed to @callback + * @callback: (scope async) (allow-none): callback to be called when disconnect + * operation completes + * @user_data: (closure): caller-specific data passed to @callback * * Disconnects the device if currently connected, and prevents the device from * automatically connecting to networks until the next manual network connection diff --git a/libnm-glib/nm-object.c b/libnm-glib/nm-object.c index cbcf2919..9a8a60f7 100644 --- a/libnm-glib/nm-object.c +++ b/libnm-glib/nm-object.c @@ -28,6 +28,7 @@ #include "nm-object-cache.h" #include "nm-object-private.h" #include "nm-dbus-glib-types.h" +#include "nm-glib-compat.h" #define DEBUG 0 @@ -438,11 +439,11 @@ _nm_object_handle_properties_changed (NMObject *object, } } -#define HANDLE_TYPE(ucase, lcase) \ +#define HANDLE_TYPE(ucase, lcase, getter) \ } else if (pspec->value_type == G_TYPE_##ucase) { \ if (G_VALUE_HOLDS_##ucase (value)) { \ g##lcase *param = (g##lcase *) field; \ - *param = g_value_get_##lcase (value); \ + *param = g_value_get_##getter (value); \ } else { \ success = FALSE; \ goto done; \ @@ -474,16 +475,16 @@ _nm_object_demarshal_generic (NMObject *object, success = FALSE; goto done; } - HANDLE_TYPE(BOOLEAN, boolean) - HANDLE_TYPE(CHAR, char) - HANDLE_TYPE(UCHAR, uchar) - HANDLE_TYPE(DOUBLE, double) - HANDLE_TYPE(INT, int) - HANDLE_TYPE(UINT, uint) - HANDLE_TYPE(INT64, int) - HANDLE_TYPE(UINT64, uint) - HANDLE_TYPE(LONG, long) - HANDLE_TYPE(ULONG, ulong) + HANDLE_TYPE(BOOLEAN, boolean, boolean) + HANDLE_TYPE(CHAR, char, schar) + HANDLE_TYPE(UCHAR, uchar, uchar) + HANDLE_TYPE(DOUBLE, double, double) + HANDLE_TYPE(INT, int, int) + HANDLE_TYPE(UINT, uint, uint) + HANDLE_TYPE(INT64, int, int) + HANDLE_TYPE(UINT64, uint, uint) + HANDLE_TYPE(LONG, long, long) + HANDLE_TYPE(ULONG, ulong, ulong) } else { g_warning ("%s: %s/%s unhandled type %s.", __func__, G_OBJECT_TYPE_NAME (object), pspec->name, diff --git a/libnm-glib/nm-remote-connection.c b/libnm-glib/nm-remote-connection.c index 57870c62..9e190d9e 100644 --- a/libnm-glib/nm-remote-connection.c +++ b/libnm-glib/nm-remote-connection.c @@ -94,15 +94,17 @@ update_cb (DBusGProxy *proxy, GError *error, gpointer user_data) RemoteCall *call = user_data; NMRemoteConnectionCommitFunc func = (NMRemoteConnectionCommitFunc) call->callback; - (*func)(call->self, error, call->user_data); + if (func != NULL) + (*func)(call->self, error, call->user_data); remote_call_complete (call->self, call); } /** * nm_remote_connection_commit_changes: * @connection: the #NMRemoteConnection - * @callback: (scope async): a function to be called when the commit completes - * @user_data: caller-specific data to be passed to @callback + * @callback: (scope async) (allow-none): a function to be called when the + * commit completes + * @user_data: (closure): caller-specific data to be passed to @callback * * Save any local changes to the settings and properties of this connection and * save them in the settings service. @@ -154,7 +156,7 @@ delete_cb (DBusGProxy *proxy, GError *error, gpointer user_data) * nm_remote_connection_delete: * @connection: the #NMRemoteConnection * @callback: (scope async) (allow-none): a function to be called when the delete completes - * @user_data: caller-specific data to be passed to @callback + * @user_data: (closure): caller-specific data to be passed to @callback * * Delete the connection. **/ @@ -197,8 +199,9 @@ get_secrets_cb (DBusGProxy *proxy, GHashTable *secrets, GError *error, gpointer * nm_remote_connection_get_secrets: * @connection: the #NMRemoteConnection * @setting_name: the #NMSetting object name to get secrets for - * @callback: (scope async): a function to be called when the update completes - * @user_data: caller-specific data to be passed to @callback + * @callback: (scope async): a function to be called when the update completes; + * must not be NULL + * @user_data: (closure): caller-specific data to be passed to @callback * * Request the connection's secrets. **/ diff --git a/libnm-glib/nm-remote-settings.c b/libnm-glib/nm-remote-settings.c index b6aaabb0..7658623f 100644 --- a/libnm-glib/nm-remote-settings.c +++ b/libnm-glib/nm-remote-settings.c @@ -501,7 +501,7 @@ add_connection_done (DBusGProxy *proxy, DBusGProxyCall *call, gpointer user_data * @connection: the connection to add. Note that this object's settings will be * added, not the object itself * @callback: (scope async): callback to be called when the add operation completes - * @user_data: caller-specific data passed to @callback + * @user_data: (closure): caller-specific data passed to @callback * * Requests that the remote settings service add the given settings to a new * connection. @@ -594,7 +594,8 @@ save_hostname_cb (DBusGProxy *proxy, GError *error = NULL; dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID); - info->callback (info->settings, error, info->callback_data); + if (info->callback != NULL) + info->callback (info->settings, error, info->callback_data); g_clear_error (&error); } @@ -603,8 +604,9 @@ save_hostname_cb (DBusGProxy *proxy, * @settings: the %NMRemoteSettings * @hostname: the new persistent hostname to set, or NULL to clear any existing * persistent hostname - * @callback: (scope async): callback to be called when the hostname operation completes - * @user_data: caller-specific data passed to @callback + * @callback: (scope async) (allow-none): callback to be called when the + * hostname operation completes + * @user_data: (closure): caller-specific data passed to @callback * * Requests that the machine's persistent hostname be set to the specified value * or cleared. diff --git a/libnm-glib/nm-secret-agent.c b/libnm-glib/nm-secret-agent.c index 90bdfbe7..1b413171 100644 --- a/libnm-glib/nm-secret-agent.c +++ b/libnm-glib/nm-secret-agent.c @@ -656,7 +656,7 @@ auto_register_cb (gpointer user_data) * @hints: (array zero-terminated=1): hints to the agent * @flags: flags that modify the behavior of the request * @callback: (scope async): a callback, invoked when the operation is done - * @callback_data: (closure): + * @user_data: (closure): caller-specific data to be passed to @callback * * Asyncronously retrieve secrets belonging to @connection for the * setting @setting_name. @flags indicate specific behavior that the secret @@ -673,7 +673,7 @@ nm_secret_agent_get_secrets (NMSecretAgent *self, const char **hints, NMSecretAgentGetSecretsFlags flags, NMSecretAgentGetSecretsFunc callback, - gpointer callback_data) + gpointer user_data) { g_return_if_fail (self != NULL); g_return_if_fail (NM_IS_SECRET_AGENT (self)); @@ -691,7 +691,7 @@ nm_secret_agent_get_secrets (NMSecretAgent *self, hints, flags, callback, - callback_data); + user_data); } /** @@ -699,7 +699,7 @@ nm_secret_agent_get_secrets (NMSecretAgent *self, * @self: a #NMSecretAgent * @connection: a #NMConnection * @callback: (scope async): a callback, invoked when the operation is done - * @callback_data: (closure): + * @user_data: (closure): caller-specific data to be passed to @callback * * Asyncronously ensure that all secrets inside @connection * are stored to disk. @@ -710,7 +710,7 @@ void nm_secret_agent_save_secrets (NMSecretAgent *self, NMConnection *connection, NMSecretAgentSaveSecretsFunc callback, - gpointer callback_data) + gpointer user_data) { g_return_if_fail (self != NULL); g_return_if_fail (NM_IS_SECRET_AGENT (self)); @@ -722,7 +722,7 @@ nm_secret_agent_save_secrets (NMSecretAgent *self, connection, nm_connection_get_path (connection), callback, - callback_data); + user_data); } /** @@ -730,7 +730,7 @@ nm_secret_agent_save_secrets (NMSecretAgent *self, * @self: a #NMSecretAgent * @connection: a #NMConnection * @callback: (scope async): a callback, invoked when the operation is done - * @callback_data: (closure): + * @user_data: (closure): caller-specific data to be passed to @callback * * Asynchronously ask the agent to delete all saved secrets belonging to * @connection. @@ -741,7 +741,7 @@ void nm_secret_agent_delete_secrets (NMSecretAgent *self, NMConnection *connection, NMSecretAgentDeleteSecretsFunc callback, - gpointer callback_data) + gpointer user_data) { g_return_if_fail (self != NULL); g_return_if_fail (NM_IS_SECRET_AGENT (self)); @@ -753,7 +753,7 @@ nm_secret_agent_delete_secrets (NMSecretAgent *self, connection, nm_connection_get_path (connection), callback, - callback_data); + user_data); } /**************************************************************/ diff --git a/libnm-glib/nm-secret-agent.h b/libnm-glib/nm-secret-agent.h index 6b209c44..2e0cce40 100644 --- a/libnm-glib/nm-secret-agent.h +++ b/libnm-glib/nm-secret-agent.h @@ -101,7 +101,7 @@ typedef struct { /* Called when the subclass should retrieve and return secrets. Subclass * must copy or reference any arguments it may require after returning from * this method, as the arguments will freed (except for 'agent', 'callback', - * and 'callback_data' of course). If the request is canceled, the callback + * and 'user_data' of course). If the request is canceled, the callback * should still be called, but with the NM_SECRET_AGENT_ERROR_AGENT_CANCELED * error. */ @@ -112,7 +112,7 @@ typedef struct { const char **hints, NMSecretAgentGetSecretsFlags flags, NMSecretAgentGetSecretsFunc callback, - gpointer callback_data); + gpointer user_data); /* Called when the subclass should cancel an outstanding request to * get secrets for a given connection. Canceling the request MUST @@ -127,26 +127,26 @@ typedef struct { /* Called when the subclass should save the secrets contained in the * connection to backing storage. Subclass must copy or reference any * arguments it may require after returning from this method, as the - * arguments will freed (except for 'agent', 'callback', and 'callback_data' + * arguments will freed (except for 'agent', 'callback', and 'user_data' * of course). */ void (*save_secrets) (NMSecretAgent *agent, NMConnection *connection, const char *connection_path, NMSecretAgentSaveSecretsFunc callback, - gpointer callback_data); + gpointer user_data); /* Called when the subclass should delete the secrets contained in the * connection from backing storage. Subclass must copy or reference any * arguments it may require after returning from this method, as the - * arguments will freed (except for 'agent', 'callback', and 'callback_data' + * arguments will freed (except for 'agent', 'callback', and 'user_data' * of course). */ void (*delete_secrets) (NMSecretAgent *agent, NMConnection *connection, const char *connection_path, NMSecretAgentDeleteSecretsFunc callback, - gpointer callback_data); + gpointer user_data); /* Signals */ void (*registration_result) (NMSecretAgent *agent, GError *error); @@ -172,17 +172,17 @@ void nm_secret_agent_get_secrets (NMSecretAgent *self, const char **hints, NMSecretAgentGetSecretsFlags flags, NMSecretAgentGetSecretsFunc callback, - gpointer callback_data); + gpointer user_data); void nm_secret_agent_save_secrets (NMSecretAgent *self, NMConnection *connection, NMSecretAgentSaveSecretsFunc callback, - gpointer callback_data); + gpointer user_data); void nm_secret_agent_delete_secrets (NMSecretAgent *self, NMConnection *connection, NMSecretAgentDeleteSecretsFunc callback, - gpointer callback_data); + gpointer user_data); G_END_DECLS diff --git a/libnm-glib/tests/Makefile.in b/libnm-glib/tests/Makefile.in index d4d5e6b5..d3c3ecaa 100644 --- a/libnm-glib/tests/Makefile.in +++ b/libnm-glib/tests/Makefile.in @@ -188,8 +188,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/libnm-util/Makefile.am b/libnm-util/Makefile.am index 0a29e9c5..1327565a 100644 --- a/libnm-util/Makefile.am +++ b/libnm-util/Makefile.am @@ -69,7 +69,7 @@ libnm_util_la_LIBADD = $(GLIB_LIBS) $(DBUS_LIBS) $(UUID_LIBS) SYMBOL_VIS_FILE=$(srcdir)/libnm-util.ver libnm_util_la_LDFLAGS = -Wl,--version-script=$(SYMBOL_VIS_FILE) \ - -version-info "2:0:0" + -version-info "4:0:2" if WITH_GNUTLS libnm_util_la_SOURCES += crypto_gnutls.c diff --git a/libnm-util/Makefile.in b/libnm-util/Makefile.in index d251ea8c..188b0a5e 100644 --- a/libnm-util/Makefile.in +++ b/libnm-util/Makefile.in @@ -314,8 +314,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ @@ -492,7 +500,7 @@ libnm_util_la_LIBADD = $(GLIB_LIBS) $(DBUS_LIBS) $(UUID_LIBS) \ $(am__append_3) $(am__append_6) SYMBOL_VIS_FILE = $(srcdir)/libnm-util.ver libnm_util_la_LDFLAGS = -Wl,--version-script=$(SYMBOL_VIS_FILE) \ - -version-info "2:0:0" + -version-info "4:0:2" libnm_util_includedir = $(includedir)/NetworkManager diff --git a/libnm-util/libnm-util.ver b/libnm-util/libnm-util.ver index 6052c275..53c2482e 100644 --- a/libnm-util/libnm-util.ver +++ b/libnm-util/libnm-util.ver @@ -2,6 +2,7 @@ global: nm_connection_add_setting; nm_connection_clear_secrets; + nm_connection_clear_secrets_with_flags; nm_connection_compare; nm_connection_create_setting; nm_connection_diff; @@ -31,6 +32,7 @@ global: nm_connection_get_setting_wireless_security; nm_connection_get_type; nm_connection_get_uuid; + nm_connection_is_type; nm_connection_lookup_setting_type; nm_connection_lookup_setting_type_by_quark; nm_connection_need_secrets; @@ -174,6 +176,7 @@ global: nm_setting_cdma_get_username; nm_setting_cdma_new; nm_setting_clear_secrets; + nm_setting_clear_secrets_with_flags; nm_setting_compare; nm_setting_connection_add_permission; nm_setting_connection_error_get_type; diff --git a/libnm-util/nm-connection.c b/libnm-util/nm-connection.c index 91fc3afa..cdc3b81f 100644 --- a/libnm-util/nm-connection.c +++ b/libnm-util/nm-connection.c @@ -127,7 +127,7 @@ enum { enum { SECRETS_UPDATED, - + SECRETS_CLEARED, LAST_SIGNAL }; @@ -950,12 +950,6 @@ nm_connection_need_secrets (NMConnection *connection, return name; } -static void -clear_setting_secrets (gpointer key, gpointer data, gpointer user_data) -{ - nm_setting_clear_secrets (NM_SETTING (data)); -} - /** * nm_connection_clear_secrets: * @connection: the #NMConnection @@ -966,12 +960,42 @@ clear_setting_secrets (gpointer key, gpointer data, gpointer user_data) void nm_connection_clear_secrets (NMConnection *connection) { - NMConnectionPrivate *priv; + GHashTableIter iter; + NMSetting *setting; g_return_if_fail (NM_IS_CONNECTION (connection)); - priv = NM_CONNECTION_GET_PRIVATE (connection); - g_hash_table_foreach (priv->settings, clear_setting_secrets, NULL); + g_hash_table_iter_init (&iter, NM_CONNECTION_GET_PRIVATE (connection)->settings); + while (g_hash_table_iter_next (&iter, NULL, (gpointer) &setting)) + nm_setting_clear_secrets (setting); + + g_signal_emit (connection, signals[SECRETS_CLEARED], 0); +} + +/** + * nm_connection_clear_secrets_with_flags: + * @connection: the #NMConnection + * @func: (scope call): function to be called to determine whether a + * specific secret should be cleared or not + * @user_data: caller-supplied data passed to @func + * + * Clears and frees secrets determined by @func. + **/ +void +nm_connection_clear_secrets_with_flags (NMConnection *connection, + NMSettingClearSecretsWithFlagsFn func, + gpointer user_data) +{ + GHashTableIter iter; + NMSetting *setting; + + g_return_if_fail (NM_IS_CONNECTION (connection)); + + g_hash_table_iter_init (&iter, NM_CONNECTION_GET_PRIVATE (connection)->settings); + while (g_hash_table_iter_next (&iter, NULL, (gpointer) &setting)) + nm_setting_clear_secrets_with_flags (setting, func, user_data); + + g_signal_emit (connection, signals[SECRETS_CLEARED], 0); } /** @@ -1026,6 +1050,37 @@ nm_connection_to_hash (NMConnection *connection, NMSettingHashFlags flags) return ret; } +/** + * nm_connection_is_type: + * @connection: the #NMConnection + * @type: a setting name to check the connection's type against (like + * %NM_SETTING_WIRELESS_SETTING_NAME or %NM_SETTING_WIRED_SETTING_NAME) + * + * A convenience function to check if the given @connection is a particular + * type (ie wired, wifi, ppp, etc). Checks the #NMSettingConnection:type + * property of the connection and matches that against @type. + * + * Returns: %TRUE if the connection is of the given @type, %FALSE if not + **/ +gboolean +nm_connection_is_type (NMConnection *connection, const char *type) +{ + NMSettingConnection *s_con; + const char *type2; + + g_return_val_if_fail (connection != NULL, FALSE); + g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE); + g_return_val_if_fail (type != NULL, FALSE); + + s_con = nm_connection_get_setting_connection (connection); + g_assert (s_con); + + type2 = nm_setting_connection_get_connection_type (s_con); + g_assert (type2); + + return !strcmp (type2, type); +} + /** * nm_connection_for_each_setting_value: * @connection: the #NMConnection @@ -1609,5 +1664,20 @@ nm_connection_class_init (NMConnectionClass *klass) g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING); + + /** + * NMConnection::secrets-cleared: + * @connection: the object on which the signal is emitted + * + * The ::secrets-cleared signal is emitted when the secrets of a connection + * are cleared. + */ + signals[SECRETS_CLEARED] = + g_signal_new ("secrets-cleared", + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_FIRST, + 0, NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); } diff --git a/libnm-util/nm-connection.h b/libnm-util/nm-connection.h index 3cd18747..069dc84c 100644 --- a/libnm-util/nm-connection.h +++ b/libnm-util/nm-connection.h @@ -147,6 +147,10 @@ const char * nm_connection_need_secrets (NMConnection *connection, void nm_connection_clear_secrets (NMConnection *connection); +void nm_connection_clear_secrets_with_flags (NMConnection *connection, + NMSettingClearSecretsWithFlagsFn func, + gpointer user_data); + gboolean nm_connection_update_secrets (NMConnection *connection, const char *setting_name, GHashTable *secrets, @@ -157,6 +161,8 @@ void nm_connection_set_path (NMConnection *connection, const char * nm_connection_get_path (NMConnection *connection); +gboolean nm_connection_is_type (NMConnection *connection, const char *type); + void nm_connection_for_each_setting_value (NMConnection *connection, NMSettingValueIterFn func, gpointer user_data); diff --git a/libnm-util/nm-param-spec-specialized.c b/libnm-util/nm-param-spec-specialized.c index 7e921bca..82ec6a40 100644 --- a/libnm-util/nm-param-spec-specialized.c +++ b/libnm-util/nm-param-spec-specialized.c @@ -19,11 +19,12 @@ * 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. */ #include "nm-param-spec-specialized.h" +#include "nm-glib-compat.h" struct _NMParamSpecSpecialized { GParamSpec parent; @@ -92,8 +93,8 @@ _gvalues_compare_fixed (const GValue *value1, const GValue *value2) switch (G_VALUE_TYPE (value1)) { case G_TYPE_CHAR: { - gchar val1 = g_value_get_char (value1); - gchar val2 = g_value_get_char (value2); + gchar val1 = g_value_get_schar (value1); + gchar val2 = g_value_get_schar (value2); if (val1 != val2) ret = val1 < val2 ? -1 : val1 > val2; break; diff --git a/libnm-util/nm-setting-gsm.c b/libnm-util/nm-setting-gsm.c index 7033541b..80d3fd31 100644 --- a/libnm-util/nm-setting-gsm.c +++ b/libnm-util/nm-setting-gsm.c @@ -768,7 +768,7 @@ nm_setting_gsm_class_init (NMSettingGsmClass *setting_class) g_object_class_install_property (object_class, PROP_HOME_ONLY, g_param_spec_boolean (NM_SETTING_GSM_HOME_ONLY, - "PIN", + "Home Only", "When TRUE, only connections to the home network will " "be allowed. Connections to roaming networks will " "not be made.", diff --git a/libnm-util/nm-setting-serial.c b/libnm-util/nm-setting-serial.c index 7ed15e9e..24e6253e 100644 --- a/libnm-util/nm-setting-serial.c +++ b/libnm-util/nm-setting-serial.c @@ -26,6 +26,7 @@ #include #include "nm-setting-serial.h" +#include "nm-glib-compat.h" /** * SECTION:nm-setting-serial @@ -214,7 +215,7 @@ set_property (GObject *object, guint prop_id, priv->bits = g_value_get_uint (value); break; case PROP_PARITY: - priv->parity = g_value_get_char (value); + priv->parity = g_value_get_schar (value); break; case PROP_STOPBITS: priv->stopbits = g_value_get_uint (value); @@ -242,7 +243,7 @@ get_property (GObject *object, guint prop_id, g_value_set_uint (value, nm_setting_serial_get_bits (setting)); break; case PROP_PARITY: - g_value_set_char (value, nm_setting_serial_get_parity (setting)); + g_value_set_schar (value, nm_setting_serial_get_parity (setting)); break; case PROP_STOPBITS: g_value_set_uint (value, nm_setting_serial_get_stopbits (setting)); diff --git a/libnm-util/nm-setting-vpn.c b/libnm-util/nm-setting-vpn.c index 50091cb9..755c1a45 100644 --- a/libnm-util/nm-setting-vpn.c +++ b/libnm-util/nm-setting-vpn.c @@ -611,6 +611,30 @@ compare_property (NMSetting *setting, return same; } +static void +clear_secrets_with_flags (NMSetting *setting, + GParamSpec *pspec, + NMSettingClearSecretsWithFlagsFn func, + gpointer user_data) +{ + NMSettingVPNPrivate *priv = NM_SETTING_VPN_GET_PRIVATE (setting); + GHashTableIter iter; + const char *secret; + + if (priv->secrets == NULL) + return; + + /* Iterate through secrets hash and check each entry */ + g_hash_table_iter_init (&iter, priv->secrets); + while (g_hash_table_iter_next (&iter, (gpointer) &secret, NULL)) { + NMSettingSecretFlags flags = NM_SETTING_SECRET_FLAG_NONE; + + nm_setting_get_secret_flags (setting, secret, &flags, NULL); + if (func (setting, pspec->name, flags, user_data) == TRUE) + g_hash_table_iter_remove (&iter); + } +} + static void destroy_one_secret (gpointer data) { @@ -733,6 +757,7 @@ nm_setting_vpn_class_init (NMSettingVPNClass *setting_class) parent_class->set_secret_flags = set_secret_flags; parent_class->need_secrets = need_secrets; parent_class->compare_property = compare_property; + parent_class->clear_secrets_with_flags = clear_secrets_with_flags; /* Properties */ /** diff --git a/libnm-util/nm-setting.c b/libnm-util/nm-setting.c index 3573f888..2b3bdc58 100644 --- a/libnm-util/nm-setting.c +++ b/libnm-util/nm-setting.c @@ -308,8 +308,8 @@ nm_setting_get_name (NMSetting *setting) /** * nm_setting_verify: * @setting: the #NMSetting to verify - * @all_settings: a #GSList of all settings in the connection from which @setting - * came + * @all_settings: (element-type NMSetting): a #GSList of all settings + * in the connection from which @setting came * @error: location to store error, or %NULL * * Validates the setting. Each setting's properties have allowed values, and @@ -648,6 +648,60 @@ nm_setting_clear_secrets (NMSetting *setting) g_free (property_specs); } +static void +clear_secrets_with_flags (NMSetting *setting, + GParamSpec *pspec, + NMSettingClearSecretsWithFlagsFn func, + gpointer user_data) +{ + GValue value = { 0 }; + NMSettingSecretFlags flags = NM_SETTING_SECRET_FLAG_NONE; + + /* Clear the secret if the user function says to do so */ + nm_setting_get_secret_flags (setting, pspec->name, &flags, NULL); + if (func (setting, pspec->name, flags, user_data) == TRUE) { + g_value_init (&value, pspec->value_type); + g_param_value_set_default (pspec, &value); + g_object_set_property (G_OBJECT (setting), pspec->name, &value); + g_value_unset (&value); + } +} + +/** + * nm_setting_clear_secrets_with_flags: + * @setting: the #NMSetting + * @func: (scope call): function to be called to determine whether a + * specific secret should be cleared or not + * @user_data: caller-supplied data passed to @func + * + * Clears and frees secrets determined by @func. + **/ +void +nm_setting_clear_secrets_with_flags (NMSetting *setting, + NMSettingClearSecretsWithFlagsFn func, + gpointer user_data) +{ + GParamSpec **property_specs; + guint n_property_specs; + guint i; + + g_return_if_fail (setting); + g_return_if_fail (NM_IS_SETTING (setting)); + g_return_if_fail (func != NULL); + + property_specs = g_object_class_list_properties (G_OBJECT_GET_CLASS (setting), &n_property_specs); + for (i = 0; i < n_property_specs; i++) { + if (property_specs[i]->flags & NM_SETTING_PARAM_SECRET) { + NM_SETTING_GET_CLASS (setting)->clear_secrets_with_flags (setting, + property_specs[i], + func, + user_data); + } + } + + g_free (property_specs); +} + /** * nm_setting_need_secrets: * @setting: the #NMSetting @@ -1029,6 +1083,7 @@ nm_setting_class_init (NMSettingClass *setting_class) setting_class->get_secret_flags = get_secret_flags; setting_class->set_secret_flags = set_secret_flags; setting_class->compare_property = compare_property; + setting_class->clear_secrets_with_flags = clear_secrets_with_flags; /* Properties */ diff --git a/libnm-util/nm-setting.h b/libnm-util/nm-setting.h index e21efd81..3edf2a1f 100644 --- a/libnm-util/nm-setting.h +++ b/libnm-util/nm-setting.h @@ -150,6 +150,21 @@ typedef struct { GObject parent; } NMSetting; + +/** + * NMSettingClearSecretsWithFlagsFn: + * @setting: The setting for which secrets are being iterated + * @secret: The secret's name + * @flags: The secret's flags, eg %NM_SETTING_SECRET_FLAG_AGENT_OWNED + * @user_data: User data passed to nm_connection_clear_secrets_with_flags() + * + * Returns: %TRUE to clear the secret, %FALSE to not clear the secret + */ +typedef gboolean (*NMSettingClearSecretsWithFlagsFn) (NMSetting *setting, + const char *secret, + NMSettingSecretFlags flags, + gpointer user_data); + typedef struct { GObjectClass parent; @@ -183,10 +198,14 @@ typedef struct { const GParamSpec *prop_spec, NMSettingCompareFlags flags); + void (*clear_secrets_with_flags) (NMSetting *setting, + GParamSpec *pspec, + NMSettingClearSecretsWithFlagsFn func, + gpointer user_data); + /* Padding for future expansion */ void (*_reserved1) (void); void (*_reserved2) (void); - void (*_reserved3) (void); } NMSettingClass; /** @@ -269,6 +288,11 @@ char *nm_setting_to_string (NMSetting *setting); /* Secrets */ void nm_setting_clear_secrets (NMSetting *setting); + +void nm_setting_clear_secrets_with_flags (NMSetting *setting, + NMSettingClearSecretsWithFlagsFn func, + gpointer user_data); + GPtrArray *nm_setting_need_secrets (NMSetting *setting); gboolean nm_setting_update_secrets (NMSetting *setting, GHashTable *secrets, diff --git a/libnm-util/nm-utils.c b/libnm-util/nm-utils.c index d8bcf349..9d4418e4 100644 --- a/libnm-util/nm-utils.c +++ b/libnm-util/nm-utils.c @@ -490,7 +490,7 @@ nm_utils_gvalue_hash_dup (GHashTable *hash) } /** - * nm_utils_slist_free: + * nm_utils_slist_free: (skip) * @list: a #GSList * @elem_destroy_fn: user function called for each element in @list * @@ -1373,7 +1373,7 @@ nm_utils_ip4_addresses_from_gvalue (const GValue *value) /** * nm_utils_ip4_addresses_to_gvalue: - * @list: a list of #NMIP4Address objects + * @list: (element-type NMIP4Address): a list of #NMIP4Address objects * @value: a pointer to a #GValue into which to place the converted addresses, * which should be unset by the caller (when no longer needed) with * g_value_unset(). @@ -1456,7 +1456,7 @@ nm_utils_ip4_routes_from_gvalue (const GValue *value) /** * nm_utils_ip4_routes_to_gvalue: - * @list: a list of #NMIP4Route objects + * @list: (element-type NMIP4Route): a list of #NMIP4Route objects * @value: a pointer to a #GValue into which to place the converted routes, * which should be unset by the caller (when no longer needed) with * g_value_unset(). @@ -1664,7 +1664,7 @@ nm_utils_ip6_addresses_from_gvalue (const GValue *value) /** * nm_utils_ip6_addresses_to_gvalue: - * @list: a list of #NMIP6Address objects + * @list: (element-type NMIP6Address): a list of #NMIP6Address objects * @value: a pointer to a #GValue into which to place the converted addresses, * which should be unset by the caller (when no longer needed) with * g_value_unset(). @@ -1786,7 +1786,7 @@ nm_utils_ip6_routes_from_gvalue (const GValue *value) /** * nm_utils_ip6_routes_to_gvalue: - * @list: a list of #NMIP6Route objects + * @list: (element-type NMIP6Route): a list of #NMIP6Route objects * @value: a pointer to a #GValue into which to place the converted routes, * which should be unset by the caller (when no longer needed) with * g_value_unset(). diff --git a/libnm-util/tests/Makefile.in b/libnm-util/tests/Makefile.in index c4919ffc..b8aa1791 100644 --- a/libnm-util/tests/Makefile.in +++ b/libnm-util/tests/Makefile.in @@ -250,8 +250,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/libnm-util/tests/certs/Makefile.in b/libnm-util/tests/certs/Makefile.in index 5149078b..b0fbee9e 100644 --- a/libnm-util/tests/certs/Makefile.in +++ b/libnm-util/tests/certs/Makefile.in @@ -161,8 +161,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/man/Makefile.in b/man/Makefile.in index ef05bde1..dd6dfdf6 100644 --- a/man/Makefile.in +++ b/man/Makefile.in @@ -185,8 +185,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/man/nmcli.1 b/man/nmcli.1 index 5afb802b..03ed664c 100644 --- a/man/nmcli.1 +++ b/man/nmcli.1 @@ -20,9 +20,9 @@ .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. .\" -.\" Copyright (C) 2010 Red Hat, Inc. +.\" Copyright (C) 2010 - 2011 Red Hat, Inc. .\" -.TH NMCLI "1" "22 September 2010" +.TH NMCLI "1" "6 September 2011" .SH NAME nmcli \- command-line tool for controlling NetworkManager @@ -201,7 +201,7 @@ Connections .br Get information about NetworkManager's connections. .TP -.SS \fICOMMAND\fP := { list | status | up | down } +.SS \fICOMMAND\fP := { list | status | up | down | delete } .sp .RS .TP @@ -226,7 +226,7 @@ Print status of active connections. No simple reference. .fi .TP -.B up id | uuid [iface ] [ap ] [\-\-nowait] [\-\-timeout ] +.B up id | uuid [iface ] [ap ] [\-\-nowait] [\-\-timeout ] .br Activate a connection. The connection is identified by its name using \fIid\fP or UUID using \fIuuid\fP. For requiring particular device to activate @@ -255,6 +255,18 @@ interface: org.freedesktop.NetworkManager method: DeactivateConnection arguments: according to arguments .fi +.TP +.B delete id | uuid +.br +Delete a configured connection. The connection to delete is specified with +\fIid\fP (connection name) or \fIuuid\fP (connection UUID). +.br +.nf +\fBReference to D-Bus:\fP +interface: org.freedesktop.NetworkManager.Settings.Connection +method: Delete +arguments: none +.fi .RE .TP @@ -303,9 +315,9 @@ method: Disconnect arguments: none .fi .TP -.B wifi [list [iface ] [hwaddr ]] +.B wifi [list [iface ] [bssid ]] .br -List available WiFi access points. \fIiface\fP and \fIhwaddr\fP options +List available WiFi access points. \fIiface\fP and \fIbssid\fP options can be used to get just APs for particular interface or specific AP, respectively. .br @@ -329,7 +341,7 @@ or null. .RE Notes about localization: .br -Be aware that \fInmcli\fP is localized and that's why the output depends on +Be aware that \fInmcli\fP is localized and that's why the output depends on your environment. It's important to realize that especially when you parse the output. .br diff --git a/man/nmcli.1.in b/man/nmcli.1.in index 5afb802b..03ed664c 100644 --- a/man/nmcli.1.in +++ b/man/nmcli.1.in @@ -20,9 +20,9 @@ .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. .\" -.\" Copyright (C) 2010 Red Hat, Inc. +.\" Copyright (C) 2010 - 2011 Red Hat, Inc. .\" -.TH NMCLI "1" "22 September 2010" +.TH NMCLI "1" "6 September 2011" .SH NAME nmcli \- command-line tool for controlling NetworkManager @@ -201,7 +201,7 @@ Connections .br Get information about NetworkManager's connections. .TP -.SS \fICOMMAND\fP := { list | status | up | down } +.SS \fICOMMAND\fP := { list | status | up | down | delete } .sp .RS .TP @@ -226,7 +226,7 @@ Print status of active connections. No simple reference. .fi .TP -.B up id | uuid [iface ] [ap ] [\-\-nowait] [\-\-timeout ] +.B up id | uuid [iface ] [ap ] [\-\-nowait] [\-\-timeout ] .br Activate a connection. The connection is identified by its name using \fIid\fP or UUID using \fIuuid\fP. For requiring particular device to activate @@ -255,6 +255,18 @@ interface: org.freedesktop.NetworkManager method: DeactivateConnection arguments: according to arguments .fi +.TP +.B delete id | uuid +.br +Delete a configured connection. The connection to delete is specified with +\fIid\fP (connection name) or \fIuuid\fP (connection UUID). +.br +.nf +\fBReference to D-Bus:\fP +interface: org.freedesktop.NetworkManager.Settings.Connection +method: Delete +arguments: none +.fi .RE .TP @@ -303,9 +315,9 @@ method: Disconnect arguments: none .fi .TP -.B wifi [list [iface ] [hwaddr ]] +.B wifi [list [iface ] [bssid ]] .br -List available WiFi access points. \fIiface\fP and \fIhwaddr\fP options +List available WiFi access points. \fIiface\fP and \fIbssid\fP options can be used to get just APs for particular interface or specific AP, respectively. .br @@ -329,7 +341,7 @@ or null. .RE Notes about localization: .br -Be aware that \fInmcli\fP is localized and that's why the output depends on +Be aware that \fInmcli\fP is localized and that's why the output depends on your environment. It's important to realize that especially when you parse the output. .br diff --git a/marshallers/Makefile.in b/marshallers/Makefile.in index 5e2e86db..5901c3a4 100644 --- a/marshallers/Makefile.in +++ b/marshallers/Makefile.in @@ -183,8 +183,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/po/de.po b/po/de.po index eb02b0f8..0aa41eea 100644 --- a/po/de.po +++ b/po/de.po @@ -15,8 +15,8 @@ msgstr "" "Project-Id-Version: NetworkManager HEAD\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=NetworkManager&keywords=I18N+L10N&component=general\n" -"POT-Creation-Date: 2011-03-31 15:25+0000\n" -"PO-Revision-Date: 2011-03-31 21:08+0200\n" +"POT-Creation-Date: 2011-08-20 15:25+0000\n" +"PO-Revision-Date: 2011-08-31 13:16+0100\n" "Last-Translator: Christian Kirbach \n" "Language-Team: Deutsch \n" "MIME-Version: 1.0\n" @@ -121,12 +121,12 @@ msgstr "" "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 "Fehler: »Verb. Liste«: %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 "Fehler: »Verb. Liste«: %s; erlaubte Felder: %s" @@ -135,15 +135,15 @@ msgstr "Fehler: »Verb. Liste«: %s; erlaubte Felder: %s" msgid "Connection details" msgstr "Verbindungsinformationen" -#: ../cli/src/connections.c:417 +#: ../cli/src/connections.c:419 msgid "never" msgstr "nie" #. "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/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 @@ -162,8 +162,8 @@ msgstr "nie" msgid "yes" msgstr "ja" -#: ../cli/src/connections.c:418 ../cli/src/connections.c:419 -#: ../cli/src/connections.c:597 ../cli/src/connections.c:599 +#: ../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 @@ -182,14 +182,14 @@ msgstr "ja" msgid "no" msgstr "nein" -#: ../cli/src/connections.c:493 +#: ../cli/src/connections.c:495 msgid "Connection list" msgstr "Verbindungsliste" -#: ../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/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 @@ -197,42 +197,42 @@ msgstr "Verbindungsliste" msgid "Error: %s argument is missing." msgstr "Fehler: Argument %s fehlt." -#: ../cli/src/connections.c:519 +#: ../cli/src/connections.c:521 #, c-format msgid "Error: %s - no such connection." msgstr "Fehler: Verbindung %s existiert nicht." -#: ../cli/src/connections.c:525 ../cli/src/connections.c:1437 -#: ../cli/src/connections.c:1536 ../cli/src/devices.c:987 +#: ../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 "Unbekannter Parameter: %s\n" -#: ../cli/src/connections.c:534 +#: ../cli/src/connections.c:536 #, c-format msgid "Error: no valid parameter specified." msgstr "Fehler: Es wurde kein gültiger Parameter angegeben." -#: ../cli/src/connections.c:549 ../cli/src/connections.c:1627 +#: ../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 "Fehler: %s." -#: ../cli/src/connections.c:637 +#: ../cli/src/connections.c:639 #, c-format msgid "Error: 'con status': %s" msgstr "Fehler: »Verb. Status«: %s" -#: ../cli/src/connections.c:639 +#: ../cli/src/connections.c:641 #, c-format msgid "Error: 'con status': %s; allowed fields: %s" msgstr "Fehler: »Verb. Status«: %s; erlaubte Felder: %s" -#: ../cli/src/connections.c:647 ../cli/src/connections.c:1452 -#: ../cli/src/connections.c:1551 ../cli/src/devices.c:1014 +#: ../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 @@ -240,227 +240,228 @@ msgid "Error: Can't find out if NetworkManager is running: %s." msgstr "" "Fehler: Es kann nicht erkannt werden, ob NetworkManager ausgeführt wird: %s." -#: ../cli/src/connections.c:651 ../cli/src/connections.c:1456 -#: ../cli/src/connections.c:1555 ../cli/src/devices.c:1018 +#: ../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 "Fehler: NetworkManager wird nicht ausgeführt" -#: ../cli/src/connections.c:659 +#: ../cli/src/connections.c:661 msgid "Active connections" msgstr "Aktive Verbindungen" -#: ../cli/src/connections.c:1095 +#: ../cli/src/connections.c:1085 #, c-format msgid "no active connection on device '%s'" msgstr "Keine aktive Verbindung auf Gerät »%s«" -#: ../cli/src/connections.c:1103 +#: ../cli/src/connections.c:1093 #, c-format msgid "no active connection or device" msgstr "Keine aktive Verbindung oder Gerät" -#: ../cli/src/connections.c:1174 +#: ../cli/src/connections.c:1164 #, c-format msgid "device '%s' not compatible with connection '%s'" msgstr "Gerät »%s« ist nicht mit der Verbindung »%s« kompatibel" -#: ../cli/src/connections.c:1176 +#: ../cli/src/connections.c:1166 #, c-format msgid "no device found for connection '%s'" msgstr "Für die Verbindung »%s« wurde kein Gerät gefunden" -#: ../cli/src/connections.c:1187 +#: ../cli/src/connections.c:1177 msgid "activating" msgstr "wird aktiviert" -#: ../cli/src/connections.c:1189 +#: ../cli/src/connections.c:1179 msgid "activated" msgstr "aktiviert" -#: ../cli/src/connections.c:1191 ../cli/src/devices.c:304 +#: ../cli/src/connections.c:1181 ../cli/src/devices.c:304 msgid "deactivating" msgstr "wird deaktiviert" -#: ../cli/src/connections.c:1194 ../cli/src/connections.c:1217 -#: ../cli/src/connections.c:1250 ../cli/src/devices.c:308 +#: ../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: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 +#: ../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 "unbekannt" -#: ../cli/src/connections.c:1203 +#: ../cli/src/connections.c:1193 msgid "VPN connecting (prepare)" msgstr "VPN wird verbunden (wird vorbereitet)" -#: ../cli/src/connections.c:1205 +#: ../cli/src/connections.c:1195 msgid "VPN connecting (need authentication)" msgstr "VPN wird verbunden (Legitimierung wird benötigt)" -#: ../cli/src/connections.c:1207 +#: ../cli/src/connections.c:1197 msgid "VPN connecting" msgstr "VPN wird verbunden" -#: ../cli/src/connections.c:1209 +#: ../cli/src/connections.c:1199 msgid "VPN connecting (getting IP configuration)" msgstr "VPN wird verbunden (IP-Einstellungen werden ermittelt)" -#: ../cli/src/connections.c:1211 +#: ../cli/src/connections.c:1201 msgid "VPN connected" msgstr "VPN verbunden" -#: ../cli/src/connections.c:1213 +#: ../cli/src/connections.c:1203 msgid "VPN connection failed" msgstr "VPN-Verbindung gescheitert" -#: ../cli/src/connections.c:1215 +#: ../cli/src/connections.c:1205 msgid "VPN disconnected" msgstr "VPN getrennt" -#: ../cli/src/connections.c:1226 +#: ../cli/src/connections.c:1216 msgid "unknown reason" msgstr "unbekannter Grund" -#: ../cli/src/connections.c:1228 +#: ../cli/src/connections.c:1218 msgid "none" msgstr "kein" -#: ../cli/src/connections.c:1230 +#: ../cli/src/connections.c:1220 msgid "the user was disconnected" msgstr "Der Benutzer wurde getrennt" -#: ../cli/src/connections.c:1232 +#: ../cli/src/connections.c:1222 msgid "the base network connection was interrupted" msgstr "Die Basisverbindung wurde unterbrochen" -#: ../cli/src/connections.c:1234 +#: ../cli/src/connections.c:1224 msgid "the VPN service stopped unexpectedly" msgstr "Der VPN-Dienst wurde unerwartet gestoppt" -#: ../cli/src/connections.c:1236 +#: ../cli/src/connections.c:1226 msgid "the VPN service returned invalid configuration" msgstr "Der VPN-Dienst gab ungültige Einstellungen zurück" -#: ../cli/src/connections.c:1238 +#: ../cli/src/connections.c:1228 msgid "the connection attempt timed out" msgstr "Der Verbindungsversuch benötigte zu viel Zeit" -#: ../cli/src/connections.c:1240 +#: ../cli/src/connections.c:1230 msgid "the VPN service did not start in time" msgstr "Der VPN-Dienst wurde nicht rechtzeitig gestartet" -#: ../cli/src/connections.c:1242 +#: ../cli/src/connections.c:1232 msgid "the VPN service failed to start" msgstr "Der VPN-Dienst konnte nicht gestartet werden" -#: ../cli/src/connections.c:1244 +#: ../cli/src/connections.c:1234 msgid "no valid VPN secrets" msgstr "Keine gültigen VPN-Schlüssel" -#: ../cli/src/connections.c:1246 +#: ../cli/src/connections.c:1236 msgid "invalid VPN secrets" msgstr "Ungültige VPN-Schlüssel" -#: ../cli/src/connections.c:1248 +#: ../cli/src/connections.c:1238 msgid "the connection was removed" msgstr "Die Verbindung wurde entfernt" -#: ../cli/src/connections.c:1262 +#: ../cli/src/connections.c:1252 #, c-format msgid "state: %s\n" msgstr "Status: %s\n" -#: ../cli/src/connections.c:1265 ../cli/src/connections.c:1291 +#: ../cli/src/connections.c:1255 ../cli/src/connections.c:1281 #, c-format msgid "Connection activated\n" msgstr "Verbindung aktiviert\n" -#: ../cli/src/connections.c:1268 +#: ../cli/src/connections.c:1258 #, c-format msgid "Error: Connection activation failed." msgstr "Fehler: Aktivierung der Verbindung ist gescheitert." -#: ../cli/src/connections.c:1287 +#: ../cli/src/connections.c:1277 #, c-format msgid "state: %s (%d)\n" msgstr "Status: %s (%d)\n" -#: ../cli/src/connections.c:1297 +#: ../cli/src/connections.c:1287 #, c-format msgid "Error: Connection activation failed: %s." msgstr "Fehler: Aktivierung der Verbindung ist gescheitert: %s." -#: ../cli/src/connections.c:1314 ../cli/src/devices.c:1136 +#: ../cli/src/connections.c:1304 ../cli/src/devices.c:1136 #, c-format msgid "Error: Timeout %d sec expired." msgstr "Fehler: Zeitbeschränkung von %d Sekunden ist abgelaufen." -#: ../cli/src/connections.c:1327 +#: ../cli/src/connections.c:1317 #, c-format msgid "Error: Connection activation failed: %s" msgstr "Fehler: Aktivierung der Verbindung ist gescheitert: %s" -#: ../cli/src/connections.c:1333 +#: ../cli/src/connections.c:1323 #, c-format msgid "Active connection state: %s\n" msgstr "Status der aktiven Verbindung: %s\n" -#: ../cli/src/connections.c:1334 +#: ../cli/src/connections.c:1324 #, c-format msgid "Active connection path: %s\n" msgstr "Pfad der aktiven Verbindung: %s\n" -#: ../cli/src/connections.c:1386 ../cli/src/connections.c:1527 +#: ../cli/src/connections.c:1376 ../cli/src/connections.c:1517 #, c-format msgid "Error: Unknown connection: %s." msgstr "Fehler: Unbekannte Verbindung: %s." -#: ../cli/src/connections.c:1432 ../cli/src/devices.c:1208 +#: ../cli/src/connections.c:1422 ../cli/src/devices.c:1208 #, c-format msgid "Error: timeout value '%s' is not valid." msgstr "Fehler: Der Wert »%s« ist keine gültige Zeitangabe." -#: ../cli/src/connections.c:1445 ../cli/src/connections.c:1544 +#: ../cli/src/connections.c:1435 ../cli/src/connections.c:1534 #, c-format msgid "Error: id or uuid has to be specified." msgstr "Fehler: id oder uuid müssen angegeben werden." -#: ../cli/src/connections.c:1473 +#: ../cli/src/connections.c:1463 #, c-format msgid "Error: No suitable device found: %s." msgstr "Fehler: Es wurde kein passendes Gerät gefunden: %s." -#: ../cli/src/connections.c:1475 +#: ../cli/src/connections.c:1465 #, c-format msgid "Error: No suitable device found." msgstr "Fehler: Es wurde kein passendes Gerät gefunden." -#: ../cli/src/connections.c:1580 +#: ../cli/src/connections.c:1570 #, c-format msgid "Warning: Connection not active\n" msgstr "Warnung: Verbindung ist nicht aktiv\n" -#: ../cli/src/connections.c:1618 +#: ../cli/src/connections.c:1608 #, c-format msgid "Error: 'con' command '%s' is not valid." msgstr "Fehler: Der »con«-Befehl »%s« ist ungültig." -#: ../cli/src/connections.c:1683 +#: ../cli/src/connections.c:1673 #, c-format msgid "Error: could not connect to D-Bus." msgstr "Fehler: Verbindung zu D-Bus konnte nicht hergestellt werden." -#: ../cli/src/connections.c:1690 +#: ../cli/src/connections.c:1680 #, c-format msgid "Error: Could not get system settings." msgstr "Fehler: Systemeinstellungen konnten nicht ermittelt werden." -#: ../cli/src/connections.c:1700 +#: ../cli/src/connections.c:1690 #, c-format msgid "Error: Can't obtain connections: settings service is not running." msgstr "" @@ -1418,111 +1419,129 @@ msgstr "" "überein. Eine Ausführung kann mit »--nocheck« erzwungen werden, aber die " "Resultate sind unvorhersehbar." -#: ../libnm-util/crypto.c:127 +#: ../libnm-util/crypto.c:133 #, c-format msgid "PEM key file had no end tag '%s'." msgstr "PEM-Schlüsseldatei hat kein abschließendes Tag »%s«." -#: ../libnm-util/crypto.c:140 +#: ../libnm-util/crypto.c:146 #, c-format msgid "Doesn't look like a PEM private key file." msgstr "Das sieht nicht nach einer privaten PEM-Schlüsseldatei aus." -#: ../libnm-util/crypto.c:148 +#: ../libnm-util/crypto.c:154 #, c-format msgid "Not enough memory to store PEM file data." msgstr "Nicht genügend freier Speicher zum Speichern der PEM-Datendatei." -#: ../libnm-util/crypto.c:164 +#: ../libnm-util/crypto.c:170 #, c-format msgid "Malformed PEM file: Proc-Type was not first tag." msgstr "Fehlerhafte PEM-Datei: Proc-Type ist nicht das erste Tag." -#: ../libnm-util/crypto.c:172 +#: ../libnm-util/crypto.c:178 #, c-format msgid "Malformed PEM file: unknown Proc-Type tag '%s'." msgstr "Fehlerhafte PEM-Datei: unbekannter Proc-Type-Tag »%s«." -#: ../libnm-util/crypto.c:182 +#: ../libnm-util/crypto.c:188 #, c-format msgid "Malformed PEM file: DEK-Info was not the second tag." msgstr "Fehlerhafte PEM-Datei: DEK-Info ist nicht das zweite Tag." -#: ../libnm-util/crypto.c:193 +#: ../libnm-util/crypto.c:199 #, c-format msgid "Malformed PEM file: no IV found in DEK-Info tag." msgstr "Fehlerhafte PEM-Datei: kein IV im DEK-Info-Tag gefunden." -#: ../libnm-util/crypto.c:200 +#: ../libnm-util/crypto.c:206 #, c-format msgid "Malformed PEM file: invalid format of IV in DEK-Info tag." msgstr "Fehlerhafte PEM-Datei: falsches Format des IV im DEK-Info-Tag." -#: ../libnm-util/crypto.c:213 +#: ../libnm-util/crypto.c:219 #, c-format msgid "Malformed PEM file: unknown private key cipher '%s'." msgstr "Fehlerhafte PEM-Datei: Unbekannter privater Schlüsselstrom »%s«." -#: ../libnm-util/crypto.c:232 +#: ../libnm-util/crypto.c:238 #, c-format msgid "Could not decode private key." msgstr "Der private Schlüssel konnte nicht entschlüsselt werden." -#: ../libnm-util/crypto.c:268 ../libnm-util/crypto.c:554 +#: ../libnm-util/crypto.c:284 +msgid "Failed to find expected PKCS#8 start tag." +msgstr "Auffinden der erwarteten PKCS#8-Startmarkierung scheiterte." + +#: ../libnm-util/crypto.c:292 +#, c-format +msgid "Failed to find expected PKCS#8 end tag '%s'." +msgstr "Auffinden der erwarteten PKCS#8-Endmarkierung »%s« scheiterte." + +#: ../libnm-util/crypto.c:312 +msgid "Not enough memory to store private key data." +msgstr "" +"Nicht genug freier Speicher zum Speichern der Daten des privaten Schlüssels." + +#: ../libnm-util/crypto.c:317 +msgid "Failed to decode PKCS#8 private key." +msgstr "Die Entschlüsselung des privaten PKCS#8-Schlüssels scheiterte." + +#: ../libnm-util/crypto.c:339 ../libnm-util/crypto.c:625 #, c-format msgid "Not enough memory to store certificate data." msgstr "Nicht genug freier Speicher zum Speichern des Zertifikats." -#: ../libnm-util/crypto.c:294 +#: ../libnm-util/crypto.c:365 #, c-format msgid "IV must be an even number of bytes in length." msgstr "IV muss eine gerade Anzahl an Byte lang sein." -#: ../libnm-util/crypto.c:303 +#: ../libnm-util/crypto.c:374 #, c-format msgid "Not enough memory to store the IV." msgstr "Nicht genug freier Speicher zum Speichern des IV." -#: ../libnm-util/crypto.c:314 +#: ../libnm-util/crypto.c:385 #, c-format msgid "IV contains non-hexadecimal digits." msgstr "IV enthält nicht-hexadezimale Zeichen." -#: ../libnm-util/crypto.c:352 ../libnm-util/crypto_gnutls.c:149 -#: ../libnm-util/crypto_gnutls.c:267 ../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 "Privater Schlüsselstrom »%s« ist unbekannt." -#: ../libnm-util/crypto.c:361 +#: ../libnm-util/crypto.c:432 #, c-format msgid "Not enough memory to decrypt private key." msgstr "Nicht genug freier Speicher zum Entschlüsseln des privaten Schlüssels." -#: ../libnm-util/crypto.c:426 +#: ../libnm-util/crypto.c:497 #, c-format msgid "Not enough memory to store decrypted private key." msgstr "" "Nicht genug freier Speicher zum Speichern des entschlüsselten privaten " "Schlüssels." -#: ../libnm-util/crypto.c:471 +#: ../libnm-util/crypto.c:542 #, c-format msgid "Unable to determine private key type." msgstr "Der Typ des privaten Schlüssels konnte nicht bestimmt werden." -#: ../libnm-util/crypto.c:526 +#: ../libnm-util/crypto.c:597 #, c-format msgid "PEM certificate had no start tag '%s'." msgstr "PEM-Zertifikat hatte kein Start-Tag »%s«." -#: ../libnm-util/crypto.c:535 +#: ../libnm-util/crypto.c:606 #, c-format msgid "PEM certificate had no end tag '%s'." msgstr "PEM-Zertifikat hatte kein abschließendes Tag »%s«." -#: ../libnm-util/crypto.c:559 +#: ../libnm-util/crypto.c:630 #, c-format msgid "Failed to decode certificate." msgstr "Die Entschlüsselung des Zertifikats scheiterte." @@ -1531,254 +1550,264 @@ msgstr "Die Entschlüsselung des Zertifikats scheiterte." msgid "Failed to initialize the crypto engine." msgstr "Die Initialisierung der crypto-engine scheiterte." -#: ../libnm-util/crypto_gnutls.c:94 +#: ../libnm-util/crypto_gnutls.c:92 #, c-format msgid "Failed to initialize the MD5 engine: %s / %s." msgstr "Die Initialisierung der MD5-engine %s / %s scheiterte." -#: ../libnm-util/crypto_gnutls.c:157 +#: ../libnm-util/crypto_gnutls.c:155 #, c-format msgid "Invalid IV length (must be at least %zd)." msgstr "Ungültige IV-Länge (muss mindestens %zd betragen)." -#: ../libnm-util/crypto_gnutls.c:166 ../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 "" "Nicht genug freier Speicher zum Zwischenspeichern des entschlüsselten " "Schlüssels." -#: ../libnm-util/crypto_gnutls.c:174 +#: ../libnm-util/crypto_gnutls.c:172 #, c-format msgid "Failed to initialize the decryption cipher context: %s / %s." msgstr "" "Die Initialisierung des Entschlüsselung-Chiffrekontextes scheiterte: %s / %s." -#: ../libnm-util/crypto_gnutls.c:183 +#: ../libnm-util/crypto_gnutls.c:181 #, c-format msgid "Failed to set symmetric key for decryption: %s / %s." msgstr "" "Das Anlegen der symmetrischen Schlüssel zum Entschlüsseln scheiterte: %s / %" "s." -#: ../libnm-util/crypto_gnutls.c:192 +#: ../libnm-util/crypto_gnutls.c:190 #, c-format msgid "Failed to set IV for decryption: %s / %s." msgstr "Das Anlegen des IV zum Entschlüsseln scheiterte: %s / %s." -#: ../libnm-util/crypto_gnutls.c:201 +#: ../libnm-util/crypto_gnutls.c:199 #, c-format msgid "Failed to decrypt the private key: %s / %s." msgstr "Die Entschlüsselung des privaten Schlüssels scheiterte: %s / %s." -#: ../libnm-util/crypto_gnutls.c:211 ../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 "" "Die Entschlüsselung des privaten Schlüssels scheiterte: Unerwartete " "Zeilenlänge." -#: ../libnm-util/crypto_gnutls.c:222 ../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 "Die Entschlüsselung des privaten Schlüssels scheiterte." -#: ../libnm-util/crypto_gnutls.c:287 ../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 "" "Es konnte nicht genügend freier Speicher zum Verschlüsseln angefordert " "werden." -#: ../libnm-util/crypto_gnutls.c:295 +#: ../libnm-util/crypto_gnutls.c:293 #, c-format msgid "Failed to initialize the encryption cipher context: %s / %s." msgstr "" "Die Initialisierung des Verschlüsselung-Chiffrekontextes scheiterte: %s / %s." -#: ../libnm-util/crypto_gnutls.c:304 +#: ../libnm-util/crypto_gnutls.c:302 #, c-format msgid "Failed to set symmetric key for encryption: %s / %s." msgstr "" "Das Anlegen des symmetrischen Schlüssels zum Verschlüsseln scheiterte: %s / %" "s." -#: ../libnm-util/crypto_gnutls.c:314 +#: ../libnm-util/crypto_gnutls.c:312 #, c-format msgid "Failed to set IV for encryption: %s / %s." msgstr "Das Anlegen des IV zur Verschlüsselung scheiterte: %s / %s." -#: ../libnm-util/crypto_gnutls.c:323 +#: ../libnm-util/crypto_gnutls.c:321 #, c-format msgid "Failed to encrypt the data: %s / %s." msgstr "Die Verschlüsselung der Daten scheiterte: %s / %s." -#: ../libnm-util/crypto_gnutls.c:363 +#: ../libnm-util/crypto_gnutls.c:361 #, c-format msgid "Error initializing certificate data: %s" msgstr "Die Initialisierung der Zertifikatsdaten schlug fehl: %s" -#: ../libnm-util/crypto_gnutls.c:385 +#: ../libnm-util/crypto_gnutls.c:383 #, c-format msgid "Couldn't decode certificate: %s" msgstr "Zertifikat konnte nicht entschlüsselt werden: %s" -#: ../libnm-util/crypto_gnutls.c:409 +#: ../libnm-util/crypto_gnutls.c:407 #, c-format msgid "Couldn't initialize PKCS#12 decoder: %s" msgstr "PKCS#12-Decoder konnte nicht initialisiert werden: %s" -#: ../libnm-util/crypto_gnutls.c:422 +#: ../libnm-util/crypto_gnutls.c:420 #, c-format msgid "Couldn't decode PKCS#12 file: %s" msgstr "PKCS#12 konnte nicht entschlüsselt werden: %s" -#: ../libnm-util/crypto_gnutls.c:434 +#: ../libnm-util/crypto_gnutls.c:432 #, c-format msgid "Couldn't verify PKCS#12 file: %s" msgstr "PKCS#12-Datei konnte nicht überprüft werden: %s" +#: ../libnm-util/crypto_gnutls.c:460 +#, c-format +msgid "Couldn't initialize PKCS#8 decoder: %s" +msgstr "PKCS#8-Decoder konnte nicht initialisiert werden: %s" + +#: ../libnm-util/crypto_gnutls.c:483 +#, c-format +msgid "Couldn't decode PKCS#8 file: %s" +msgstr "PKCS#8-Datei konnte nicht entschlüsselt werden: %s" + #: ../libnm-util/crypto_nss.c:56 #, c-format msgid "Failed to initialize the crypto engine: %d." msgstr "Die Initialisierung der crypto-engine scheiterte: %d." -#: ../libnm-util/crypto_nss.c:111 +#: ../libnm-util/crypto_nss.c:107 #, c-format msgid "Failed to initialize the MD5 context: %d." msgstr "Die Initialisierung des MD5-Kontexts scheiterte: %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 "Ungültige IV-Länge (muss mindestens %d betragen)." -#: ../libnm-util/crypto_nss.c:196 +#: ../libnm-util/crypto_nss.c:192 #, c-format msgid "Failed to initialize the decryption cipher slot." msgstr "Die Initialisierung des Entschlüsselungsstromslots scheiterte." -#: ../libnm-util/crypto_nss.c:206 +#: ../libnm-util/crypto_nss.c:202 #, c-format msgid "Failed to set symmetric key for decryption." msgstr "" "Das Anlegen des symmetrischen Schlüssels zur Entschlüsselung scheiterte." -#: ../libnm-util/crypto_nss.c:216 +#: ../libnm-util/crypto_nss.c:212 #, c-format msgid "Failed to set IV for decryption." msgstr "Das Anlegen des IV zur Entschlüsselung scheiterte." -#: ../libnm-util/crypto_nss.c:224 +#: ../libnm-util/crypto_nss.c:220 #, c-format msgid "Failed to initialize the decryption context." msgstr "Die Initialisierung des Entschlüsselungskontexts scheiterte." -#: ../libnm-util/crypto_nss.c:237 +#: ../libnm-util/crypto_nss.c:233 #, c-format msgid "Failed to decrypt the private key: %d." msgstr "Das Entschlüsseln des privaten Schlüssels scheiterte: %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 "" "Das Entschlüsseln des privaten Schlüssels scheiterte: Die entschlüsselten " "Daten sind zu groß." -#: ../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 "" "Das Abschließen der Entschlüsselung des privaten Schlüssels scheiterte: %d." -#: ../libnm-util/crypto_nss.c:364 +#: ../libnm-util/crypto_nss.c:360 #, c-format msgid "Failed to initialize the encryption cipher slot." msgstr "Die Initialisierung des Verschlüsselungsstromslots scheiterte." -#: ../libnm-util/crypto_nss.c:372 +#: ../libnm-util/crypto_nss.c:368 #, c-format msgid "Failed to set symmetric key for encryption." msgstr "" "Das Anlegen des symmetrischen Schlüssels zur Verschlüsselung scheiterte." -#: ../libnm-util/crypto_nss.c:380 +#: ../libnm-util/crypto_nss.c:376 #, c-format msgid "Failed to set IV for encryption." msgstr "Das Anlegen des IV zur Verschlüsselung scheiterte." -#: ../libnm-util/crypto_nss.c:388 +#: ../libnm-util/crypto_nss.c:384 #, c-format msgid "Failed to initialize the encryption context." -msgstr "Die Initialisierung des Verschlusselungskontexts scheiterte." +msgstr "Die Initialisierung des Verschlüsselungskontexts scheiterte." -#: ../libnm-util/crypto_nss.c:396 +#: ../libnm-util/crypto_nss.c:392 #, c-format msgid "Failed to encrypt: %d." msgstr "Das Verschlüsseln scheiterte: %d." -#: ../libnm-util/crypto_nss.c:404 +#: ../libnm-util/crypto_nss.c:400 #, c-format msgid "Unexpected amount of data after encrypting." msgstr "Unerwartete Datenmenge nach der Verschlüsselung." -#: ../libnm-util/crypto_nss.c:447 +#: ../libnm-util/crypto_nss.c:443 #, c-format msgid "Couldn't decode certificate: %d" msgstr "Das Zertifikat konnte nicht entschlüsselt werden: %d" -#: ../libnm-util/crypto_nss.c:482 +#: ../libnm-util/crypto_nss.c:478 #, c-format msgid "Couldn't convert password to UCS2: %d" msgstr "Das Passwort konnte nicht zu UCS2 konvertiert werden: %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-Decoder konnte nicht initialisiert werden: %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-Datei konnte nicht verschlüsselt werden: %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-Datei konnte nicht überprüft werden: %d" -#: ../libnm-util/crypto_nss.c:557 +#: ../libnm-util/crypto_nss.c:568 msgid "Could not generate random data." msgstr "Es konnten keine Zufallsdaten generiert werden." -#: ../libnm-util/nm-utils.c:1989 +#: ../libnm-util/nm-utils.c:2000 #, c-format msgid "Not enough memory to make encryption key." msgstr "" "Nicht genügend freier Speicher zur Erstellung des Verschlüsselungsschlüssels." -#: ../libnm-util/nm-utils.c:2099 +#: ../libnm-util/nm-utils.c:2110 msgid "Could not allocate memory for PEM file creation." msgstr "" "Es konnte nicht genügend freier Speicher zur Erstellung der PEM-Datei " "angefordert werden." -#: ../libnm-util/nm-utils.c:2111 +#: ../libnm-util/nm-utils.c:2122 #, c-format msgid "Could not allocate memory for writing IV to PEM file." msgstr "" "Es konnte nicht genügend freier Speicher zum Schreiben des IV in die PEM-" "Datei angefordert werden." -#: ../libnm-util/nm-utils.c:2123 +#: ../libnm-util/nm-utils.c:2134 #, c-format msgid "Could not allocate memory for writing encrypted key to PEM file." msgstr "" "Es konnte nicht genügend freier Speicher zum Schreiben des verschlüsselten " "Schlüssels in die PEM-Datei angefordert werden." -#: ../libnm-util/nm-utils.c:2142 +#: ../libnm-util/nm-utils.c:2153 #, c-format msgid "Could not allocate memory for PEM file data." msgstr "" @@ -1899,14 +1928,14 @@ msgstr "" "Die Systemrichtlinien verhindern Verbindungsfreigaben über ein offenes WLAN-" "Netzwerk" -#: ../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 "" "Ungültige Option. Verwenden Sie --help um eine Liste der verfügbaren " "Optionen zu erhalten.\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 "" @@ -1943,13 +1972,13 @@ msgstr "»dhcpcd« konnte nicht gefunden werden." msgid "unsupported DHCP client '%s'" msgstr "Nicht unterstützter DHCP-Client »%s«" -#: ../src/dns-manager/nm-dns-manager.c:367 +#: ../src/dns-manager/nm-dns-manager.c:376 msgid "NOTE: the libc resolver may not support more than 3 nameservers." msgstr "" "HINWEIS: Der libc-resolver unterstützt eventuell nicht mehr als drei " "Nameserver." -#: ../src/dns-manager/nm-dns-manager.c:369 +#: ../src/dns-manager/nm-dns-manager.c:378 msgid "The nameservers listed below may not be recognized." msgstr "Die nachfolgend gelisteten Nameserver werden eventuell nicht erkannt." @@ -1983,22 +2012,22 @@ msgstr "PAN-Verbindung %d" msgid "DUN connection %d" msgstr "DUN-Verbindung %d" -#: ../src/nm-device-ethernet.c:1681 +#: ../src/nm-device-ethernet.c:1723 #, c-format msgid "PPPoE connection %d" msgstr "PPPoE-Verbindung %d" -#: ../src/nm-device-ethernet.c:1681 ../src/settings/nm-settings-utils.c:50 +#: ../src/nm-device-ethernet.c:1723 ../src/settings/nm-settings-utils.c:50 #, c-format msgid "Wired connection %d" msgstr "Kabelgebundene Verbindung %d" -#: ../src/nm-device-olpc-mesh.c:423 +#: ../src/nm-device-olpc-mesh.c:393 #, c-format msgid "Mesh %d" msgstr "Maschennetz %d‬" -#: ../src/nm-manager.c:660 +#: ../src/nm-manager.c:657 #, c-format msgid "VPN connection %d" msgstr "VPN-Verbindung %d" @@ -2051,7 +2080,7 @@ msgstr "Der netlink-Gruppe konnte nicht beigetreten werden: %s" msgid "error updating link cache: %s" msgstr "Die Aktualisierung des Verbindungszwischenspeichers schlug fehl: %s" -#: ../src/settings/plugins/ifcfg-rh/reader.c:3464 +#: ../src/settings/plugins/ifcfg-rh/reader.c:3575 #: ../src/settings/plugins/ifnet/connection_parser.c:51 msgid "System" msgstr "System" @@ -2080,9 +2109,6 @@ msgstr "System" #~ msgid "Error: Could not get user settings." #~ msgstr "Fehler: Benutzereinstellungen konnten nicht ermittelt werden." -#~ msgid "Not enough memory to store file data." -#~ msgstr "Nicht genug freier Speicher zum Speichern der Datei." - #~ msgid "Allow use of user-specific connections" #~ msgstr "Die Verwendung von benutzerspezifischen Verbindungen erlauben" diff --git a/po/es.po b/po/es.po index 802d482f..08815ef0 100644 --- a/po/es.po +++ b/po/es.po @@ -15,15 +15,15 @@ msgstr "" "Project-Id-Version: NetworkManager.master\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-03-13 15:03+0100\n" +"POT-Creation-Date: 2011-09-24 03:25+0000\n" +"PO-Revision-Date: 2011-10-01 13:57+0200\n" "Last-Translator: Jorge González \n" -"Language-Team: Español \n" +"Language-Team: Español; Castellano \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.4\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" #: ../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 @@ -97,22 +97,34 @@ msgstr "AUTOCONECTAR" msgid "READONLY" msgstr "SÓLOLECTURA" -#: ../cli/src/connections.c:167 -#, c-format +#: ../cli/src/connections.c:153 +#, 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" msgid "" "Usage: nmcli con { COMMAND | help }\n" -" COMMAND := { list | status | up | down }\n" +" COMMAND := { list | status | up | down | delete }\n" "\n" " list [id | uuid ]\n" " status\n" -" up id | uuid [iface ] [ap ] [nsp ] [--" +" up id | uuid [iface ] [ap ] [nsp ] [--" "nowait] [--timeout ]\n" -" up id | uuid [iface ] [ap ] [--nowait] [--timeout " +" up id | uuid [iface ] [ap ] [--nowait] [--timeout " "]\n" " down id | uuid \n" +" delete id | uuid \n" msgstr "" "Uso: nmcli con { COMANDO | help }\n" -" COMANDO := { list | status | up | down }\n" +" COMANDO := { list | status | up | down | delete }\n" "\n" " list [id | uuid ]\n" " status\n" @@ -121,347 +133,355 @@ msgstr "" " up id | uuid [iface ] [ap ] [--nowait] [--timeout " "]\n" " down id | uuid \n" +" delete id | uuid \n" -#: ../cli/src/connections.c:220 ../cli/src/connections.c:542 +#: ../cli/src/connections.c:208 ../cli/src/connections.c:532 #, c-format msgid "Error: 'con list': %s" msgstr "Error: «con list»: %s" -#: ../cli/src/connections.c:222 ../cli/src/connections.c:544 +#: ../cli/src/connections.c:210 ../cli/src/connections.c:534 #, c-format msgid "Error: 'con list': %s; allowed fields: %s" msgstr "Error: «con list»: %s; campos permitidos: %s" -#: ../cli/src/connections.c:230 +#: ../cli/src/connections.c:218 msgid "Connection details" msgstr "Detalles de conexiones" -#: ../cli/src/connections.c:417 +#: ../cli/src/connections.c:407 msgid "never" msgstr "nunca" #. "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: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 +#: ../cli/src/connections.c:408 ../cli/src/connections.c:409 +#: ../cli/src/connections.c:587 ../cli/src/connections.c:589 +#: ../cli/src/devices.c:499 ../cli/src/devices.c:552 ../cli/src/devices.c:677 +#: ../cli/src/devices.c:703 ../cli/src/devices.c:704 ../cli/src/devices.c:705 +#: ../cli/src/devices.c:706 ../cli/src/devices.c:707 ../cli/src/settings.c:560 +#: ../cli/src/settings.c:632 ../cli/src/settings.c:753 +#: ../cli/src/settings.c:1041 ../cli/src/settings.c:1042 +#: ../cli/src/settings.c:1044 ../cli/src/settings.c:1046 +#: ../cli/src/settings.c:1047 ../cli/src/settings.c:1177 +#: ../cli/src/settings.c:1178 ../cli/src/settings.c:1179 +#: ../cli/src/settings.c:1180 ../cli/src/settings.c:1259 +#: ../cli/src/settings.c:1260 ../cli/src/settings.c:1261 +#: ../cli/src/settings.c:1262 ../cli/src/settings.c:1263 +#: ../cli/src/settings.c:1264 ../cli/src/settings.c:1265 +#: ../cli/src/settings.c:1266 ../cli/src/settings.c:1267 +#: ../cli/src/settings.c:1268 ../cli/src/settings.c:1269 +#: ../cli/src/settings.c:1270 ../cli/src/settings.c:1271 +#: ../cli/src/settings.c:1346 msgid "yes" msgstr "sí" -#: ../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 +#: ../cli/src/connections.c:408 ../cli/src/connections.c:409 +#: ../cli/src/connections.c:587 ../cli/src/connections.c:589 +#: ../cli/src/devices.c:499 ../cli/src/devices.c:552 ../cli/src/devices.c:677 +#: ../cli/src/devices.c:703 ../cli/src/devices.c:704 ../cli/src/devices.c:705 +#: ../cli/src/devices.c:706 ../cli/src/devices.c:707 ../cli/src/settings.c:560 +#: ../cli/src/settings.c:562 ../cli/src/settings.c:632 +#: ../cli/src/settings.c:753 ../cli/src/settings.c:1041 +#: ../cli/src/settings.c:1042 ../cli/src/settings.c:1044 +#: ../cli/src/settings.c:1046 ../cli/src/settings.c:1047 +#: ../cli/src/settings.c:1177 ../cli/src/settings.c:1178 +#: ../cli/src/settings.c:1179 ../cli/src/settings.c:1180 +#: ../cli/src/settings.c:1259 ../cli/src/settings.c:1260 +#: ../cli/src/settings.c:1261 ../cli/src/settings.c:1262 +#: ../cli/src/settings.c:1263 ../cli/src/settings.c:1264 +#: ../cli/src/settings.c:1265 ../cli/src/settings.c:1266 +#: ../cli/src/settings.c:1267 ../cli/src/settings.c:1268 +#: ../cli/src/settings.c:1269 ../cli/src/settings.c:1270 +#: ../cli/src/settings.c:1271 ../cli/src/settings.c:1346 msgid "no" msgstr "no" -#: ../cli/src/connections.c:493 +#: ../cli/src/connections.c:483 msgid "Connection list" msgstr "Lista de conexiones" -#: ../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 +#: ../cli/src/connections.c:496 ../cli/src/connections.c:1356 +#: ../cli/src/connections.c:1371 ../cli/src/connections.c:1380 +#: ../cli/src/connections.c:1390 ../cli/src/connections.c:1402 +#: ../cli/src/connections.c:1497 ../cli/src/connections.c:1580 +#: ../cli/src/devices.c:1180 ../cli/src/devices.c:1190 +#: ../cli/src/devices.c:1304 ../cli/src/devices.c:1312 +#: ../cli/src/devices.c:1525 ../cli/src/devices.c:1532 #, c-format msgid "Error: %s argument is missing." msgstr "Error: falta el argumento %s." -#: ../cli/src/connections.c:519 +#: ../cli/src/connections.c:509 #, c-format msgid "Error: %s - no such connection." msgstr "Error: %s - no hay tal conexión." -#: ../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 +#: ../cli/src/connections.c:515 ../cli/src/connections.c:1415 +#: ../cli/src/connections.c:1514 ../cli/src/connections.c:1587 +#: ../cli/src/devices.c:977 ../cli/src/devices.c:1057 +#: ../cli/src/devices.c:1204 ../cli/src/devices.c:1318 +#: ../cli/src/devices.c:1538 #, c-format msgid "Unknown parameter: %s\n" msgstr "Parámetro desconocido: %s\n" -#: ../cli/src/connections.c:534 +#: ../cli/src/connections.c:524 #, c-format msgid "Error: no valid parameter specified." msgstr "Error: no se especificó un parámetro válido." -#: ../cli/src/connections.c:549 ../cli/src/connections.c:1627 -#: ../cli/src/devices.c:1755 ../cli/src/network-manager.c:463 +#: ../cli/src/connections.c:539 ../cli/src/connections.c:1668 +#: ../cli/src/devices.c:1746 ../cli/src/network-manager.c:456 #, c-format msgid "Error: %s." msgstr "Error: %s." -#: ../cli/src/connections.c:637 +#: ../cli/src/connections.c:627 #, c-format msgid "Error: 'con status': %s" msgstr "Error: «con status»: %s" -#: ../cli/src/connections.c:639 +#: ../cli/src/connections.c:629 #, c-format msgid "Error: 'con status': %s; allowed fields: %s" msgstr "Error: «con status»: %s; campos permitidos: %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 +#: ../cli/src/connections.c:637 ../cli/src/connections.c:1430 +#: ../cli/src/connections.c:1529 ../cli/src/connections.c:1601 +#: ../cli/src/devices.c:1004 ../cli/src/devices.c:1066 +#: ../cli/src/devices.c:1219 ../cli/src/devices.c:1348 +#: ../cli/src/devices.c:1567 #, c-format 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: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 +#: ../cli/src/connections.c:641 ../cli/src/connections.c:1434 +#: ../cli/src/connections.c:1533 ../cli/src/connections.c:1605 +#: ../cli/src/devices.c:1008 ../cli/src/devices.c:1070 +#: ../cli/src/devices.c:1223 ../cli/src/devices.c:1352 +#: ../cli/src/devices.c:1571 #, c-format msgid "Error: NetworkManager is not running." msgstr "Error: NetworkManager no se está ejecutando." -#: ../cli/src/connections.c:659 +#: ../cli/src/connections.c:649 msgid "Active connections" msgstr "Conexiones activas" -#: ../cli/src/connections.c:1095 +#: ../cli/src/connections.c:1073 #, c-format msgid "no active connection on device '%s'" msgstr "conexión no activa en el dispositivo «%s»" -#: ../cli/src/connections.c:1103 +#: ../cli/src/connections.c:1081 #, c-format msgid "no active connection or device" msgstr "conexión o dispositivo no activo" -#: ../cli/src/connections.c:1174 +#: ../cli/src/connections.c:1152 #, c-format msgid "device '%s' not compatible with connection '%s'" msgstr "dispositivo «%s» incompatible con conexión «%s»" -#: ../cli/src/connections.c:1176 +#: ../cli/src/connections.c:1154 #, c-format msgid "no device found for connection '%s'" msgstr "no se encontró dispositivo para conexión «%s»" -#: ../cli/src/connections.c:1187 +#: ../cli/src/connections.c:1165 msgid "activating" msgstr "activando" -#: ../cli/src/connections.c:1189 +#: ../cli/src/connections.c:1167 msgid "activated" msgstr "activada" -#: ../cli/src/connections.c:1191 ../cli/src/devices.c:304 +#: ../cli/src/connections.c:1169 ../cli/src/devices.c:294 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 +#: ../cli/src/connections.c:1172 ../cli/src/connections.c:1195 +#: ../cli/src/connections.c:1228 ../cli/src/devices.c:298 +#: ../cli/src/devices.c:678 ../cli/src/network-manager.c:111 +#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:176 +#: ../cli/src/network-manager.c:185 ../cli/src/network-manager.c:291 +#: ../cli/src/network-manager.c:346 ../cli/src/network-manager.c:384 +#: ../cli/src/network-manager.c:423 ../cli/src/settings.c:513 +#: ../cli/src/utils.c:397 msgid "unknown" msgstr "desconocido" -#: ../cli/src/connections.c:1203 +#: ../cli/src/connections.c:1181 msgid "VPN connecting (prepare)" msgstr "Conectando VPN (preparar)" -#: ../cli/src/connections.c:1205 +#: ../cli/src/connections.c:1183 msgid "VPN connecting (need authentication)" msgstr "Conectando VPN (necesita autenticación)" -#: ../cli/src/connections.c:1207 +#: ../cli/src/connections.c:1185 msgid "VPN connecting" msgstr "Conectando VPN" -#: ../cli/src/connections.c:1209 +#: ../cli/src/connections.c:1187 msgid "VPN connecting (getting IP configuration)" msgstr "Conectando VPN (obteniendo configuración IP)" -#: ../cli/src/connections.c:1211 +#: ../cli/src/connections.c:1189 msgid "VPN connected" msgstr "VPN conectada" -#: ../cli/src/connections.c:1213 +#: ../cli/src/connections.c:1191 msgid "VPN connection failed" msgstr "Falló la conexión VPN" -#: ../cli/src/connections.c:1215 +#: ../cli/src/connections.c:1193 msgid "VPN disconnected" msgstr "VPN desconectada" -#: ../cli/src/connections.c:1226 +#: ../cli/src/connections.c:1204 msgid "unknown reason" msgstr "razón desconocida" -#: ../cli/src/connections.c:1228 +#: ../cli/src/connections.c:1206 msgid "none" msgstr "ninguna" -#: ../cli/src/connections.c:1230 +#: ../cli/src/connections.c:1208 msgid "the user was disconnected" msgstr "el usuario estaba desconectado" -#: ../cli/src/connections.c:1232 +#: ../cli/src/connections.c:1210 msgid "the base network connection was interrupted" msgstr "se interrumpió la conexión de red de base" -#: ../cli/src/connections.c:1234 +#: ../cli/src/connections.c:1212 msgid "the VPN service stopped unexpectedly" msgstr "el servicio VPN se detuvo inesperadamente" -#: ../cli/src/connections.c:1236 +#: ../cli/src/connections.c:1214 msgid "the VPN service returned invalid configuration" msgstr "el servicio VPN retornó una configuración no válida" -#: ../cli/src/connections.c:1238 +#: ../cli/src/connections.c:1216 msgid "the connection attempt timed out" msgstr "se agotaron los intentos de conexión" -#: ../cli/src/connections.c:1240 +#: ../cli/src/connections.c:1218 msgid "the VPN service did not start in time" msgstr "el servicio VPN no inició a tiempo" -#: ../cli/src/connections.c:1242 +#: ../cli/src/connections.c:1220 msgid "the VPN service failed to start" msgstr "el servicio VPN falló en el inicio" -#: ../cli/src/connections.c:1244 +#: ../cli/src/connections.c:1222 msgid "no valid VPN secrets" msgstr "secretos VPN inválidos" -#: ../cli/src/connections.c:1246 +#: ../cli/src/connections.c:1224 msgid "invalid VPN secrets" msgstr "secretos VPN válidos" -#: ../cli/src/connections.c:1248 +#: ../cli/src/connections.c:1226 msgid "the connection was removed" msgstr "se eliminó la conexión" -#: ../cli/src/connections.c:1262 +#: ../cli/src/connections.c:1240 #, c-format msgid "state: %s\n" msgstr "estado: %s\n" -#: ../cli/src/connections.c:1265 ../cli/src/connections.c:1291 +#: ../cli/src/connections.c:1243 ../cli/src/connections.c:1269 #, c-format msgid "Connection activated\n" msgstr "Conexión activada\n" -#: ../cli/src/connections.c:1268 +#: ../cli/src/connections.c:1246 #, c-format msgid "Error: Connection activation failed." msgstr "Error: falló la activación de la conexión." -#: ../cli/src/connections.c:1287 +#: ../cli/src/connections.c:1265 #, c-format msgid "state: %s (%d)\n" msgstr "estado: %s (%d)\n" -#: ../cli/src/connections.c:1297 +#: ../cli/src/connections.c:1275 #, c-format msgid "Error: Connection activation failed: %s." msgstr "Error: falló la activación de la conexión: %s." -#: ../cli/src/connections.c:1314 ../cli/src/devices.c:1136 +#: ../cli/src/connections.c:1292 ../cli/src/devices.c:1126 #, c-format msgid "Error: Timeout %d sec expired." msgstr "Error: expiró la pausa de %d segundos." -#: ../cli/src/connections.c:1327 +#: ../cli/src/connections.c:1305 #, c-format msgid "Error: Connection activation failed: %s" msgstr "Error: falló la activación de la conexión: %s" -#: ../cli/src/connections.c:1333 +#: ../cli/src/connections.c:1311 #, c-format msgid "Active connection state: %s\n" msgstr "Estado de la conexión activa: %s\n" -#: ../cli/src/connections.c:1334 +#: ../cli/src/connections.c:1312 #, c-format msgid "Active connection path: %s\n" msgstr "Ruta de la conexión activa: %s\n" -#: ../cli/src/connections.c:1386 ../cli/src/connections.c:1527 +#: ../cli/src/connections.c:1364 ../cli/src/connections.c:1505 +#: ../cli/src/connections.c:1614 #, c-format msgid "Error: Unknown connection: %s." msgstr "Error: conexión desconocida: %s." -#: ../cli/src/connections.c:1432 ../cli/src/devices.c:1208 +#: ../cli/src/connections.c:1410 ../cli/src/devices.c:1198 #, c-format msgid "Error: timeout value '%s' is not valid." msgstr "Error: valor de pausa «%s» inválido." -#: ../cli/src/connections.c:1445 ../cli/src/connections.c:1544 +#: ../cli/src/connections.c:1423 ../cli/src/connections.c:1522 +#: ../cli/src/connections.c:1594 #, c-format msgid "Error: id or uuid has to be specified." msgstr "Error: se debe especificar un id o uuid." -#: ../cli/src/connections.c:1473 +#: ../cli/src/connections.c:1451 #, c-format msgid "Error: No suitable device found: %s." msgstr "Error: no se encontró un dispositivo apropiado: %s." -#: ../cli/src/connections.c:1475 +#: ../cli/src/connections.c:1453 #, c-format msgid "Error: No suitable device found." msgstr "Error: no se encontró un dispositivo apropiado." -#: ../cli/src/connections.c:1580 +#: ../cli/src/connections.c:1558 #, c-format msgid "Warning: Connection not active\n" msgstr "Advertencia: conexión inactiva\n" -#: ../cli/src/connections.c:1618 +#: ../cli/src/connections.c:1659 #, c-format msgid "Error: 'con' command '%s' is not valid." msgstr "Error: comando «con» «%s» no es válido." -#: ../cli/src/connections.c:1683 +#: ../cli/src/connections.c:1724 #, c-format msgid "Error: could not connect to D-Bus." msgstr "Error: no se pudo conectar con D-Bus." -#: ../cli/src/connections.c:1690 +#: ../cli/src/connections.c:1732 #, c-format msgid "Error: Could not get system settings." msgstr "Error: no se pudo obtener configuración de sistema." -#: ../cli/src/connections.c:1700 +#: ../cli/src/connections.c:1742 #, c-format msgid "Error: Can't obtain connections: settings service is not running." msgstr "" @@ -686,8 +706,21 @@ msgstr "INDICADORES-RSN" msgid "ACTIVE" msgstr "ACTIVO" -#: ../cli/src/devices.c:256 -#, c-format +#: ../cli/src/devices.c:246 +#, 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" msgid "" "Usage: nmcli dev { COMMAND | help }\n" "\n" @@ -698,12 +731,14 @@ msgid "" " status\n" " list [iface ]\n" " disconnect iface [--nowait] [--timeout ]\n" -" wifi [list [iface ] [hwaddr ]]\n" +" wifi [list [iface ] [bssid ]]\n" " wimax [list [iface ] [nsp ]]\n" "\n" msgstr "" "Uso: nmcli dev { COMANDO | help }\n" "\n" +" COMANDO := { status | list | disconnect | wifi | wimax }\n" +"\n" " COMANDO := { status | list | disconnect | wifi }\n" "\n" " status\n" @@ -713,256 +748,262 @@ msgstr "" " wimax [list [iface ] [nsp ]]\n" "\n" -#: ../cli/src/devices.c:284 +#: ../cli/src/devices.c:274 msgid "unmanaged" msgstr "sin gestión" -#: ../cli/src/devices.c:286 +#: ../cli/src/devices.c:276 msgid "unavailable" msgstr "no disponible" -#: ../cli/src/devices.c:288 ../cli/src/network-manager.c:115 +#: ../cli/src/devices.c:278 ../cli/src/network-manager.c:108 msgid "disconnected" msgstr "desconectado" -#: ../cli/src/devices.c:290 +#: ../cli/src/devices.c:280 msgid "connecting (prepare)" msgstr "conectando (preparar)" -#: ../cli/src/devices.c:292 +#: ../cli/src/devices.c:282 msgid "connecting (configuring)" msgstr "conectando (configurando)" -#: ../cli/src/devices.c:294 +#: ../cli/src/devices.c:284 msgid "connecting (need authentication)" msgstr "conectando (necesita autenticación)" -#: ../cli/src/devices.c:296 +#: ../cli/src/devices.c:286 msgid "connecting (getting IP configuration)" msgstr "conectando (obteniendo configuración IP)" -#: ../cli/src/devices.c:298 +#: ../cli/src/devices.c:288 msgid "connecting (checking IP connectivity)" msgstr "conectando (comprobando conectividad IP)" -#: ../cli/src/devices.c:300 +#: ../cli/src/devices.c:290 msgid "connecting (starting secondary connections)" msgstr "conectando (iniciando conexiones secundarias)" -#: ../cli/src/devices.c:302 ../cli/src/network-manager.c:111 +#: ../cli/src/devices.c:292 ../cli/src/network-manager.c:104 msgid "connected" msgstr "conectado" -#: ../cli/src/devices.c:306 +#: ../cli/src/devices.c:296 msgid "connection failed" msgstr "conexión falló" -#: ../cli/src/devices.c:331 ../cli/src/devices.c:341 ../cli/src/devices.c:501 -#: ../cli/src/devices.c:545 +#: ../cli/src/devices.c:321 ../cli/src/devices.c:331 ../cli/src/devices.c:491 +#: ../cli/src/devices.c:535 msgid "Unknown" msgstr "desconocido" -#: ../cli/src/devices.c:374 +#: ../cli/src/devices.c:364 msgid "(none)" msgstr "(ninguno)" -#: ../cli/src/devices.c:399 +#: ../cli/src/devices.c:389 #, c-format msgid "%s: error converting IP4 address 0x%X" msgstr "%s: error convirtiendo dirección IP4 0x%X" -#: ../cli/src/devices.c:470 +#: ../cli/src/devices.c:460 #, c-format msgid "%u MHz" msgstr "%u MHz" -#: ../cli/src/devices.c:471 +#: ../cli/src/devices.c:461 #, c-format msgid "%u MB/s" msgstr "%u MB/s" -#: ../cli/src/devices.c:480 +#: ../cli/src/devices.c:470 msgid "Encrypted: " msgstr "Encriptado: " -#: ../cli/src/devices.c:485 +#: ../cli/src/devices.c:475 msgid "WEP " msgstr "WEP" -#: ../cli/src/devices.c:487 +#: ../cli/src/devices.c:477 msgid "WPA " msgstr "WPA" -#: ../cli/src/devices.c:489 +#: ../cli/src/devices.c:479 msgid "WPA2 " msgstr "WPA2" -#: ../cli/src/devices.c:492 +#: ../cli/src/devices.c:482 msgid "Enterprise " msgstr "Empresa" -#: ../cli/src/devices.c:501 +#: ../cli/src/devices.c:491 msgid "Ad-Hoc" msgstr "Ad-Hoc" -#: ../cli/src/devices.c:501 +#: ../cli/src/devices.c:491 msgid "Infrastructure" msgstr "Infraestructura" -#: ../cli/src/devices.c:536 +#: ../cli/src/devices.c:526 msgid "Home" msgstr "Casa" -#: ../cli/src/devices.c:539 +#: ../cli/src/devices.c:529 msgid "Partner" msgstr "Asociado" -#: ../cli/src/devices.c:542 +#: ../cli/src/devices.c:532 msgid "Roaming" msgstr "Roaming" -#: ../cli/src/devices.c:612 +#: ../cli/src/devices.c:602 #, c-format msgid "Error: 'dev list': %s" msgstr "Error: «dev list»: %s" -#: ../cli/src/devices.c:614 +#: ../cli/src/devices.c:604 #, c-format msgid "Error: 'dev list': %s; allowed fields: %s" msgstr "Error: «dev list»: %s; campos permitidos: %s" -#: ../cli/src/devices.c:623 +#: ../cli/src/devices.c:613 msgid "Device details" msgstr "Detalles de los dispositivos" -#: ../cli/src/devices.c:657 ../cli/src/devices.c:1152 ../cli/src/utils.c:342 +#: ../cli/src/devices.c:647 ../cli/src/devices.c:1142 ../cli/src/utils.c:343 msgid "(unknown)" msgstr "(desconocido)" -#: ../cli/src/devices.c:658 +#: ../cli/src/devices.c:648 msgid "unknown)" msgstr "desconocido" -#: ../cli/src/devices.c:684 +#: ../cli/src/devices.c:674 #, c-format msgid "%u Mb/s" msgstr "%u Mb/s" #. Print header #. "WIRED-PROPERTIES" -#: ../cli/src/devices.c:757 +#: ../cli/src/devices.c:747 msgid "on" msgstr "encendido" -#: ../cli/src/devices.c:757 +#: ../cli/src/devices.c:747 msgid "off" msgstr "apagado" -#: ../cli/src/devices.c:1004 +#: ../cli/src/devices.c:994 #, c-format msgid "Error: 'dev status': %s" msgstr "Error: «dev status»: %s" -#: ../cli/src/devices.c:1006 +#: ../cli/src/devices.c:996 #, c-format msgid "Error: 'dev status': %s; allowed fields: %s" msgstr "Error: «dev status»: %s; campos permitidos: %s" -#: ../cli/src/devices.c:1029 +#: ../cli/src/devices.c:1019 msgid "Status of devices" msgstr "Estado de los dispositivos" -#: ../cli/src/devices.c:1060 +#: ../cli/src/devices.c:1050 #, c-format msgid "Error: '%s' argument is missing." msgstr "Error: falta el argumento «%s»." -#: ../cli/src/devices.c:1101 ../cli/src/devices.c:1253 -#: ../cli/src/devices.c:1389 ../cli/src/devices.c:1608 +#: ../cli/src/devices.c:1091 ../cli/src/devices.c:1243 +#: ../cli/src/devices.c:1380 ../cli/src/devices.c:1599 #, c-format msgid "Error: Device '%s' not found." msgstr "Error: no se encontró el dispositivo «%s»." -#: ../cli/src/devices.c:1124 +#: ../cli/src/devices.c:1114 #, c-format msgid "Success: Device '%s' successfully disconnected." msgstr "Éxito: dispositivo «%s» desconectado correctamente." -#: ../cli/src/devices.c:1149 +#: ../cli/src/devices.c:1139 #, 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:1157 +#: ../cli/src/devices.c:1147 #, c-format msgid "Device state: %d (%s)\n" msgstr "Estado del dispositivo: %d (%s)\n" -#: ../cli/src/devices.c:1222 +#: ../cli/src/devices.c:1212 #, c-format msgid "Error: iface has to be specified." msgstr "Error: se debe especificar iface." -#: ../cli/src/devices.c:1347 +#: ../cli/src/devices.c:1338 #, c-format msgid "Error: 'dev wifi': %s" msgstr "Error: «dev wifi» «%s»" -#: ../cli/src/devices.c:1349 +#: ../cli/src/devices.c:1340 #, c-format msgid "Error: 'dev wifi': %s; allowed fields: %s" msgstr "Error: «dev wifi»: %s; campos permitidos: %s" -#: ../cli/src/devices.c:1372 +#: ../cli/src/devices.c:1363 msgid "WiFi scan list" msgstr "lista de análisis WiFi" -#: ../cli/src/devices.c:1409 ../cli/src/devices.c:1463 -#: ../cli/src/devices.c:1670 +#: ../cli/src/devices.c:1400 ../cli/src/devices.c:1454 #, c-format -msgid "Error: Access point with hwaddr '%s' not found." -msgstr "Error: no se encontró el punto de acceso con hwaddr «%s»." +#| msgid "Error: Access point with hwaddr '%s' not found." +msgid "Error: Access point with bssid '%s' not found." +msgstr "Error: no se encontró el punto de acceso con bssid «%s»." -#: ../cli/src/devices.c:1426 +#: ../cli/src/devices.c:1417 #, 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:1490 +#: ../cli/src/devices.c:1481 #, c-format msgid "Error: 'dev wifi' command '%s' is not valid." msgstr "Error: comando «dev wifi» «%s» inválido." -#: ../cli/src/devices.c:1566 +#: ../cli/src/devices.c:1557 #, c-format msgid "Error: 'dev wimax': %s" msgstr "Error: «dev wimax» «%s»" -#: ../cli/src/devices.c:1568 +#: ../cli/src/devices.c:1559 #, c-format msgid "Error: 'dev wimax': %s; allowed fields: %s" msgstr "Error: «dev wimax»: %s; campos permitidos: %s" -#: ../cli/src/devices.c:1591 +#: ../cli/src/devices.c:1582 msgid "WiMAX NSP list" msgstr "Lista PSR WiMAX" -#: ../cli/src/devices.c:1628 +#: ../cli/src/devices.c:1619 #, c-format msgid "Error: NSP with name '%s' not found." msgstr "Error: no se encontró el PSR con el nombre «%s»." -#: ../cli/src/devices.c:1639 +#: ../cli/src/devices.c:1630 #, c-format msgid "Error: Device '%s' is not a WiMAX device." msgstr "Error: el dispositivo «%s» no es un dispositivo WiMAX." -#: ../cli/src/devices.c:1697 +#: ../cli/src/devices.c:1661 +#, c-format +#| msgid "Error: Access point with hwaddr '%s' not found." +msgid "Error: Access point with nsp '%s' not found." +msgstr "Error: no se encontró el punto de acceso con nsp «%s»." + +#: ../cli/src/devices.c:1688 #, c-format msgid "Error: 'dev wimax' command '%s' is not valid." msgstr "Error: comando «dev wimax» «%s» no válido." -#: ../cli/src/devices.c:1747 +#: ../cli/src/devices.c:1738 #, c-format msgid "Error: 'dev' command '%s' is not valid." msgstr "Error: comando «dev» «%s» no válido." @@ -1011,7 +1052,7 @@ msgstr "HARDWARE-WIMAX" msgid "WIMAX" msgstr "WIMAX" -#: ../cli/src/network-manager.c:74 +#: ../cli/src/network-manager.c:67 #, c-format msgid "" "Usage: nmcli nm { COMMAND | help }\n" @@ -1042,136 +1083,136 @@ msgstr "" " wimax [on|off]\n" "\n" -#: ../cli/src/network-manager.c:103 +#: ../cli/src/network-manager.c:96 msgid "asleep" msgstr "dormido" -#: ../cli/src/network-manager.c:105 +#: ../cli/src/network-manager.c:98 msgid "connecting" msgstr "conectando" -#: ../cli/src/network-manager.c:107 +#: ../cli/src/network-manager.c:100 msgid "connected (local only)" msgstr "conectado (sólo local)" -#: ../cli/src/network-manager.c:109 +#: ../cli/src/network-manager.c:102 msgid "connected (site only)" msgstr "conectado (sólo el sitio)" -#: ../cli/src/network-manager.c:113 +#: ../cli/src/network-manager.c:106 msgid "disconnecting" msgstr "desconectando" -#: ../cli/src/network-manager.c:153 +#: ../cli/src/network-manager.c:146 #, c-format msgid "Error: 'nm status': %s" msgstr "Error: «nm status»: %s" -#: ../cli/src/network-manager.c:155 +#: ../cli/src/network-manager.c:148 #, 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: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 +#: ../cli/src/network-manager.c:161 ../cli/src/network-manager.c:162 +#: ../cli/src/network-manager.c:163 ../cli/src/network-manager.c:164 +#: ../cli/src/network-manager.c:165 ../cli/src/network-manager.c:167 +#: ../cli/src/network-manager.c:168 ../cli/src/network-manager.c:289 +#: ../cli/src/network-manager.c:344 ../cli/src/network-manager.c:382 +#: ../cli/src/network-manager.c:421 msgid "enabled" msgstr "activado" -#: ../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 +#: ../cli/src/network-manager.c:161 ../cli/src/network-manager.c:162 +#: ../cli/src/network-manager.c:163 ../cli/src/network-manager.c:164 +#: ../cli/src/network-manager.c:165 ../cli/src/network-manager.c:167 +#: ../cli/src/network-manager.c:168 ../cli/src/network-manager.c:289 +#: ../cli/src/network-manager.c:344 ../cli/src/network-manager.c:382 +#: ../cli/src/network-manager.c:421 msgid "disabled" msgstr "desactivado" -#: ../cli/src/network-manager.c:188 +#: ../cli/src/network-manager.c:181 msgid "NetworkManager status" msgstr "Estado de NetworkManager" #. Print header -#: ../cli/src/network-manager.c:191 +#: ../cli/src/network-manager.c:184 msgid "running" msgstr "ejecutando" -#: ../cli/src/network-manager.c:191 +#: ../cli/src/network-manager.c:184 msgid "not running" msgstr "no ejecutando" -#: ../cli/src/network-manager.c:222 ../cli/src/utils.c:322 +#: ../cli/src/network-manager.c:215 ../cli/src/utils.c:323 #, 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:233 +#: ../cli/src/network-manager.c:226 #, 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:239 +#: ../cli/src/network-manager.c:232 #, c-format msgid "Error in sleep: %s" msgstr "Error al dormir: %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 +#: ../cli/src/network-manager.c:276 ../cli/src/network-manager.c:331 +#: ../cli/src/network-manager.c:369 ../cli/src/network-manager.c:408 #, 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:291 +#: ../cli/src/network-manager.c:284 msgid "Networking enabled" msgstr "Red activada" -#: ../cli/src/network-manager.c:307 +#: ../cli/src/network-manager.c:300 #, 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:317 +#: ../cli/src/network-manager.c:310 #, 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:325 +#: ../cli/src/network-manager.c:318 #, 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:346 +#: ../cli/src/network-manager.c:339 msgid "WiFi enabled" msgstr "WiFi activado" -#: ../cli/src/network-manager.c:362 +#: ../cli/src/network-manager.c:355 #, c-format msgid "Error: invalid 'wifi' parameter: '%s'." msgstr "Error: parámetro «wifi» inválido: «%s»." -#: ../cli/src/network-manager.c:384 +#: ../cli/src/network-manager.c:377 msgid "WWAN enabled" msgstr "WWAN activado" -#: ../cli/src/network-manager.c:400 +#: ../cli/src/network-manager.c:393 #, c-format msgid "Error: invalid 'wwan' parameter: '%s'." msgstr "Error: parámetro «wwan» inválido: «%s»." -#: ../cli/src/network-manager.c:423 +#: ../cli/src/network-manager.c:416 msgid "WiMAX enabled" msgstr "WiMAX activado" -#: ../cli/src/network-manager.c:439 +#: ../cli/src/network-manager.c:432 #, c-format msgid "Error: invalid 'wimax' parameter: '%s'." msgstr "Error: parámetro «wimax» inválido: «%s»." -#: ../cli/src/network-manager.c:452 +#: ../cli/src/network-manager.c:445 #, c-format msgid "Error: 'nm' command '%s' is not valid." msgstr "Error: comando «nm» command «%s» inválido." @@ -1284,79 +1325,89 @@ msgstr "Error: no se pudo crear un objeto NMClient." msgid "Success" msgstr "Éxito" -#: ../cli/src/settings.c:423 +#: ../cli/src/settings.c:447 #, c-format msgid "%d (hex-ascii-key)" msgstr "%d (clave-hex-ascii)" -#: ../cli/src/settings.c:425 +#: ../cli/src/settings.c:449 #, c-format msgid "%d (104/128-bit passphrase)" msgstr "%d (frase de acceso 104/128-bits)" -#: ../cli/src/settings.c:428 +#: ../cli/src/settings.c:452 #, c-format msgid "%d (unknown)" msgstr "%d (desconocido)" -#: ../cli/src/settings.c:454 +#: ../cli/src/settings.c:478 msgid "0 (unknown)" msgstr "0 (desconocido)" -#: ../cli/src/settings.c:460 +#: ../cli/src/settings.c:484 msgid "any, " msgstr "cualquiera," -#: ../cli/src/settings.c:462 +#: ../cli/src/settings.c:486 msgid "900 MHz, " msgstr "900 MHz, " -#: ../cli/src/settings.c:464 +#: ../cli/src/settings.c:488 msgid "1800 MHz, " msgstr "1800 MHz, " -#: ../cli/src/settings.c:466 +#: ../cli/src/settings.c:490 msgid "1900 MHz, " msgstr "1900 MHz, " -#: ../cli/src/settings.c:468 +#: ../cli/src/settings.c:492 msgid "850 MHz, " msgstr "850 MHz, " -#: ../cli/src/settings.c:470 +#: ../cli/src/settings.c:494 msgid "WCDMA 3GPP UMTS 2100 MHz, " msgstr "WCDMA 3GPP UMTS 2100 MHz, " -#: ../cli/src/settings.c:472 +#: ../cli/src/settings.c:496 msgid "WCDMA 3GPP UMTS 1800 MHz, " msgstr "WCDMA 3GPP UMTS 1800 MHz, " -#: ../cli/src/settings.c:474 +#: ../cli/src/settings.c:498 msgid "WCDMA 3GPP UMTS 1700/2100 MHz, " msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, " -#: ../cli/src/settings.c:476 +#: ../cli/src/settings.c:500 msgid "WCDMA 3GPP UMTS 800 MHz, " msgstr "WCDMA 3GPP UMTS 800 MHz, " -#: ../cli/src/settings.c:478 +#: ../cli/src/settings.c:502 msgid "WCDMA 3GPP UMTS 850 MHz, " msgstr "WCDMA 3GPP UMTS 850 MHz, " -#: ../cli/src/settings.c:480 +#: ../cli/src/settings.c:504 msgid "WCDMA 3GPP UMTS 900 MHz, " msgstr "WCDMA 3GPP UMTS 900 MHz, " -#: ../cli/src/settings.c:482 +#: ../cli/src/settings.c:506 msgid "WCDMA 3GPP UMTS 1700 MHz, " msgstr "WCDMA 3GPP UMTS 1700 MHz, " -#: ../cli/src/settings.c:566 ../cli/src/settings.c:732 +#: ../cli/src/settings.c:508 +#| msgid "WCDMA 3GPP UMTS 900 MHz, " +msgid "WCDMA 3GPP UMTS 1900 MHz, " +msgstr "WCDMA 3GPP UMTS 1900 MHz, " + +#: ../cli/src/settings.c:510 +#| msgid "WCDMA 3GPP UMTS 2100 MHz, " +msgid "WCDMA 3GPP UMTS 2600 MHz, " +msgstr "WCDMA 3GPP UMTS 2600 MHz, " + +#: ../cli/src/settings.c:636 ../cli/src/settings.c:835 msgid "auto" msgstr "auto" -#: ../cli/src/settings.c:727 ../cli/src/settings.c:730 -#: ../cli/src/settings.c:731 ../cli/src/utils.c:176 +#: ../cli/src/settings.c:829 ../cli/src/settings.c:832 +#: ../cli/src/settings.c:833 ../cli/src/utils.c:176 msgid "not set" msgstr "no establecido" @@ -1380,18 +1431,18 @@ msgstr "Opción «--terse» requiere especificar «--fields»" msgid "Option '--terse' requires specific '--fields' option values , not '%s'" msgstr "Opción «--terse» requiere valores de «--fields» específicos, no «%s»" -#: ../cli/src/utils.c:333 +#: ../cli/src/utils.c:334 #, c-format 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" -#: ../cli/src/utils.c:341 +#: ../cli/src/utils.c:342 #, c-format msgid "Error: NameHasOwner request failed: %s" msgstr "Error: falló la solicitud NameHasOwner: %s" -#: ../cli/src/utils.c:386 +#: ../cli/src/utils.c:387 #, c-format msgid "" "Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --" @@ -1400,14 +1451,15 @@ msgstr "" "Advertencia: las versiones de nmcli (%s) y de NetworkManager (%s) no " "coinciden. Use «--nocheck» para evitar el aviso.\n" -#: ../cli/src/utils.c:395 +#: ../cli/src/utils.c:396 #, c-format msgid "" "Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force " "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:133 #, c-format @@ -1470,12 +1522,11 @@ 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." +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." @@ -1637,13 +1688,11 @@ 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" @@ -1934,13 +1983,13 @@ msgstr "se pudo encontrar «dhcpcd»." msgid "unsupported DHCP client '%s'" msgstr "«%s» cliente DHCP sin soporte " -#: ../src/dns-manager/nm-dns-manager.c:369 +#: ../src/dns-manager/nm-dns-manager.c:376 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:371 +#: ../src/dns-manager/nm-dns-manager.c:378 msgid "The nameservers listed below may not be recognized." msgstr "Puede que los servidores de nombres listados abajo no se reconozcan." @@ -1974,72 +2023,72 @@ msgstr "Conexión PAN %d" msgid "DUN connection %d" msgstr "Conexión DUN %d" -#: ../src/nm-device-ethernet.c:1681 +#: ../src/nm-device-ethernet.c:1724 #, c-format msgid "PPPoE connection %d" msgstr "Conexión PPPoE %d" -#: ../src/nm-device-ethernet.c:1681 ../src/settings/nm-settings-utils.c:50 +#: ../src/nm-device-ethernet.c:1724 ../src/settings/nm-settings-utils.c:50 #, c-format msgid "Wired connection %d" msgstr "Conexión cableada %d" -#: ../src/nm-device-olpc-mesh.c:423 +#: ../src/nm-device-olpc-mesh.c:393 #, c-format msgid "Mesh %d" msgstr "Malla %d" -#: ../src/nm-manager.c:673 +#: ../src/nm-manager.c:670 #, c-format msgid "VPN connection %d" msgstr "Conexión VPN %d" -#: ../src/nm-netlink-monitor.c:100 ../src/nm-netlink-monitor.c:231 -#: ../src/nm-netlink-monitor.c:653 +#: ../src/nm-netlink-monitor.c:101 ../src/nm-netlink-monitor.c:234 +#: ../src/nm-netlink-monitor.c:661 #, c-format msgid "error processing netlink message: %s" msgstr "error al procesar el mensaje de netlink: %s" -#: ../src/nm-netlink-monitor.c:214 +#: ../src/nm-netlink-monitor.c:216 msgid "error occurred while waiting for data on socket" msgstr "ha ocurrido un error mientras esperaban datos en un socket" -#: ../src/nm-netlink-monitor.c:254 +#: ../src/nm-netlink-monitor.c:260 #, c-format msgid "unable to connect to netlink for monitoring link status: %s" msgstr "" "no se puede conectar con netlink para monitorizar el estado del enlace: %s" -#: ../src/nm-netlink-monitor.c:265 +#: ../src/nm-netlink-monitor.c:271 #, c-format msgid "unable to enable netlink handle credential passing: %s" msgstr "no se puede activar el manejador netlink para pasar credenciales: %s" -#: ../src/nm-netlink-monitor.c:291 ../src/nm-netlink-monitor.c:353 +#: ../src/nm-netlink-monitor.c:294 ../src/nm-netlink-monitor.c:354 #, c-format msgid "unable to allocate netlink handle for monitoring link status: %s" msgstr "" "no se puede asignar el manejador netlink para monitorizar el estado del " "enlace: %s" -#: ../src/nm-netlink-monitor.c:376 +#: ../src/nm-netlink-monitor.c:379 #, c-format msgid "unable to allocate netlink link cache for monitoring link status: %s" msgstr "" "no se puede asignar el enlace a la cache de netlink para monitorizar el " "estado del enlace: %s" -#: ../src/nm-netlink-monitor.c:502 +#: ../src/nm-netlink-monitor.c:506 #, c-format msgid "unable to join netlink group: %s" msgstr "no pudo unirse al grupo netlink: %s" -#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642 +#: ../src/nm-netlink-monitor.c:637 ../src/nm-netlink-monitor.c:650 #, c-format msgid "error updating link cache: %s" msgstr "error al actualizar el enlace caché: %s" -#: ../src/settings/plugins/ifcfg-rh/reader.c:3512 +#: ../src/settings/plugins/ifcfg-rh/reader.c:3575 #: ../src/settings/plugins/ifnet/connection_parser.c:51 msgid "System" msgstr "Sistema" diff --git a/po/fi.po b/po/fi.po index 31187e9f..8a7517f6 100644 --- a/po/fi.po +++ b/po/fi.po @@ -4,302 +4,1848 @@ # # Ilkka Tuohela , 2005-2008. # +# Additional Launchpad translators with re-licensable originally BSD licensed contributions: +# Christian Hellberg (https://launchpad.net/~christian-hellberg), Heikki Kulhia (https://launchpad.net/~hessuk), Heikki Mäntysaari , Jere Sokka (https://launchpad.net/~jerry-sokka), Jiri Grönroos , Joonas Pajuniva (https://launchpad.net/~joonas-pajuniva), Jussi Aalto, Lazy (https://launchpad.net/~ubuntu-bugs-oittaa), Matti Karnaattu (https://launchpad.net/~mattikarnaattu), Miko-Matias Grönvalli (https://launchpad.net/~matias-gronvall), Pasi Tarhonen (https://launchpad.net/~pasi-tarhonen), Sorkkarauta (https://launchpad.net/~sorkkarauta), Timo Jyrinki , Tomi Juntunen (https://launchpad.net/~tojuntu), Toni Lähdekorpi , vilQuri . +# +msgid "" +msgstr "" +"Project-Id-Version: NetworkManager\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-09-12 16:51+0300\n" +"PO-Revision-Date: 2011-09-12 16:51+0300\n" +"Last-Translator: Timo Jyrinki \n" +"Language-Team: Finnish \n" +"Language: fi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-09-12 13:20+0000\n" +"X-Generator: Launchpad (build 13910)\n" + +#: ../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 "NIMI" + +#. 0 +#: ../cli/src/connections.c:65 ../cli/src/connections.c:79 +msgid "UUID" +msgstr "UUID" + +#. 1 +#: ../cli/src/connections.c:66 +msgid "DEVICES" +msgstr "LAITTEET" + +#. 2 +#: ../cli/src/connections.c:67 +msgid "DEFAULT" +msgstr "OLETUS" + +#. 3 +#: ../cli/src/connections.c:68 +msgid "SPEC-OBJECT" +msgstr "SPEC-KOHDE" + +#. 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 "" + +#. 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 "TYYPPI" + +#. 2 +#: ../cli/src/connections.c:81 +msgid "TIMESTAMP" +msgstr "AIKALEIMA" + +#. 3 +#: ../cli/src/connections.c:82 +msgid "TIMESTAMP-REAL" +msgstr "AIKALEIMA-TODELLINEN" + +#. 4 +#: ../cli/src/connections.c:83 +msgid "AUTOCONNECT" +msgstr "AUTOMAATTINEN YHTEYDENMUODOSTUS" + +#. 5 +#: ../cli/src/connections.c:84 +msgid "READONLY" +msgstr "VAIN LUKU" + +#: ../cli/src/connections.c:153 +#, c-format +msgid "" +"Usage: nmcli con { COMMAND | help }\n" +" COMMAND := { list | status | up | down | delete }\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" +" delete id | uuid \n" +msgstr "" + +#: ../cli/src/connections.c:208 ../cli/src/connections.c:532 +#, c-format +msgid "Error: 'con list': %s" +msgstr "" + +#: ../cli/src/connections.c:210 ../cli/src/connections.c:534 +#, c-format +msgid "Error: 'con list': %s; allowed fields: %s" +msgstr "" + +#: ../cli/src/connections.c:218 +msgid "Connection details" +msgstr "Yhteyden tiedot" + +#: ../cli/src/connections.c:407 +msgid "never" +msgstr "ei koskaan" + +#. "CAPABILITIES" +#. Print header +#. "WIFI-PROPERTIES" +#: ../cli/src/connections.c:408 ../cli/src/connections.c:409 +#: ../cli/src/connections.c:587 ../cli/src/connections.c:589 +#: ../cli/src/devices.c:499 ../cli/src/devices.c:552 ../cli/src/devices.c:677 +#: ../cli/src/devices.c:703 ../cli/src/devices.c:704 ../cli/src/devices.c:705 +#: ../cli/src/devices.c:706 ../cli/src/devices.c:707 ../cli/src/settings.c:560 +#: ../cli/src/settings.c:632 ../cli/src/settings.c:753 +#: ../cli/src/settings.c:1041 ../cli/src/settings.c:1042 +#: ../cli/src/settings.c:1044 ../cli/src/settings.c:1046 +#: ../cli/src/settings.c:1047 ../cli/src/settings.c:1177 +#: ../cli/src/settings.c:1178 ../cli/src/settings.c:1179 +#: ../cli/src/settings.c:1180 ../cli/src/settings.c:1259 +#: ../cli/src/settings.c:1260 ../cli/src/settings.c:1261 +#: ../cli/src/settings.c:1262 ../cli/src/settings.c:1263 +#: ../cli/src/settings.c:1264 ../cli/src/settings.c:1265 +#: ../cli/src/settings.c:1266 ../cli/src/settings.c:1267 +#: ../cli/src/settings.c:1268 ../cli/src/settings.c:1269 +#: ../cli/src/settings.c:1270 ../cli/src/settings.c:1271 +#: ../cli/src/settings.c:1346 +msgid "yes" +msgstr "kyllä" + +#: ../cli/src/connections.c:408 ../cli/src/connections.c:409 +#: ../cli/src/connections.c:587 ../cli/src/connections.c:589 +#: ../cli/src/devices.c:499 ../cli/src/devices.c:552 ../cli/src/devices.c:677 +#: ../cli/src/devices.c:703 ../cli/src/devices.c:704 ../cli/src/devices.c:705 +#: ../cli/src/devices.c:706 ../cli/src/devices.c:707 ../cli/src/settings.c:560 +#: ../cli/src/settings.c:562 ../cli/src/settings.c:632 +#: ../cli/src/settings.c:753 ../cli/src/settings.c:1041 +#: ../cli/src/settings.c:1042 ../cli/src/settings.c:1044 +#: ../cli/src/settings.c:1046 ../cli/src/settings.c:1047 +#: ../cli/src/settings.c:1177 ../cli/src/settings.c:1178 +#: ../cli/src/settings.c:1179 ../cli/src/settings.c:1180 +#: ../cli/src/settings.c:1259 ../cli/src/settings.c:1260 +#: ../cli/src/settings.c:1261 ../cli/src/settings.c:1262 +#: ../cli/src/settings.c:1263 ../cli/src/settings.c:1264 +#: ../cli/src/settings.c:1265 ../cli/src/settings.c:1266 +#: ../cli/src/settings.c:1267 ../cli/src/settings.c:1268 +#: ../cli/src/settings.c:1269 ../cli/src/settings.c:1270 +#: ../cli/src/settings.c:1271 ../cli/src/settings.c:1346 +msgid "no" +msgstr "ei" + +#: ../cli/src/connections.c:483 +msgid "Connection list" +msgstr "" + +#: ../cli/src/connections.c:496 ../cli/src/connections.c:1356 +#: ../cli/src/connections.c:1371 ../cli/src/connections.c:1380 +#: ../cli/src/connections.c:1390 ../cli/src/connections.c:1402 +#: ../cli/src/connections.c:1497 ../cli/src/connections.c:1580 +#: ../cli/src/devices.c:1180 ../cli/src/devices.c:1190 +#: ../cli/src/devices.c:1304 ../cli/src/devices.c:1312 +#: ../cli/src/devices.c:1525 ../cli/src/devices.c:1532 +#, c-format +msgid "Error: %s argument is missing." +msgstr "Virhe: %s-argumentti puuttuu." + +#: ../cli/src/connections.c:509 +#, c-format +msgid "Error: %s - no such connection." +msgstr "Virhe: %s - ei kyseistä yhteyttä." + +#: ../cli/src/connections.c:515 ../cli/src/connections.c:1415 +#: ../cli/src/connections.c:1514 ../cli/src/connections.c:1587 +#: ../cli/src/devices.c:977 ../cli/src/devices.c:1057 +#: ../cli/src/devices.c:1204 ../cli/src/devices.c:1318 +#: ../cli/src/devices.c:1538 +#, c-format +msgid "Unknown parameter: %s\n" +msgstr "Tuntematon parametri: %s\n" + +#: ../cli/src/connections.c:524 +#, c-format +msgid "Error: no valid parameter specified." +msgstr "Virhe: annettu parametri on virheellinen." + +#: ../cli/src/connections.c:539 ../cli/src/connections.c:1668 +#: ../cli/src/devices.c:1746 ../cli/src/network-manager.c:456 +#, c-format +msgid "Error: %s." +msgstr "Virhe: %s." + +#: ../cli/src/connections.c:627 +#, c-format +msgid "Error: 'con status': %s" +msgstr "" + +#: ../cli/src/connections.c:629 +#, c-format +msgid "Error: 'con status': %s; allowed fields: %s" +msgstr "" + +#: ../cli/src/connections.c:637 ../cli/src/connections.c:1430 +#: ../cli/src/connections.c:1529 ../cli/src/connections.c:1601 +#: ../cli/src/devices.c:1004 ../cli/src/devices.c:1066 +#: ../cli/src/devices.c:1219 ../cli/src/devices.c:1348 +#: ../cli/src/devices.c:1567 +#, c-format +msgid "Error: Can't find out if NetworkManager is running: %s." +msgstr "Virhe: Ei saada selville onko NetworkManager käynnissä: %s." + +#: ../cli/src/connections.c:641 ../cli/src/connections.c:1434 +#: ../cli/src/connections.c:1533 ../cli/src/connections.c:1605 +#: ../cli/src/devices.c:1008 ../cli/src/devices.c:1070 +#: ../cli/src/devices.c:1223 ../cli/src/devices.c:1352 +#: ../cli/src/devices.c:1571 +#, c-format +msgid "Error: NetworkManager is not running." +msgstr "Virhe: NetworkManager ei ole käynnissä." + +#: ../cli/src/connections.c:649 +msgid "Active connections" +msgstr "Aktiiviset yhteydet" + +#: ../cli/src/connections.c:1073 +#, c-format +msgid "no active connection on device '%s'" +msgstr "ei aktiivista yhteyttä laitteessa '%s'" + +#: ../cli/src/connections.c:1081 +#, c-format +msgid "no active connection or device" +msgstr "ei aktiivista yhteyttä tai laitetta" + +#: ../cli/src/connections.c:1152 +#, c-format +msgid "device '%s' not compatible with connection '%s'" +msgstr "laite '%s' ei ole yhteensopiva yhteyden '%s' kanssa" + +#: ../cli/src/connections.c:1154 +#, c-format +msgid "no device found for connection '%s'" +msgstr "laitetta yhteydelle '%s' ei löytynyt" + +#: ../cli/src/connections.c:1165 +msgid "activating" +msgstr "akitvoidaan" + +#: ../cli/src/connections.c:1167 +msgid "activated" +msgstr "aktivoitu" + +#: ../cli/src/connections.c:1169 ../cli/src/devices.c:294 +msgid "deactivating" +msgstr "" + +#: ../cli/src/connections.c:1172 ../cli/src/connections.c:1195 +#: ../cli/src/connections.c:1228 ../cli/src/devices.c:298 +#: ../cli/src/devices.c:678 ../cli/src/network-manager.c:111 +#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:176 +#: ../cli/src/network-manager.c:185 ../cli/src/network-manager.c:291 +#: ../cli/src/network-manager.c:346 ../cli/src/network-manager.c:384 +#: ../cli/src/network-manager.c:423 ../cli/src/settings.c:513 +#: ../cli/src/utils.c:397 +msgid "unknown" +msgstr "tuntematon" + +#: ../cli/src/connections.c:1181 +msgid "VPN connecting (prepare)" +msgstr "VPN yhdistää (valmistelu)" + +#: ../cli/src/connections.c:1183 +msgid "VPN connecting (need authentication)" +msgstr "VPN yhdistää (tarvitaan autentikointi)" + +#: ../cli/src/connections.c:1185 +msgid "VPN connecting" +msgstr "VPN yhdistää" + +#: ../cli/src/connections.c:1187 +msgid "VPN connecting (getting IP configuration)" +msgstr "VPN yhdistää (haetaan IP-asetuksia)" + +#: ../cli/src/connections.c:1189 +msgid "VPN connected" +msgstr "VPN yhdistetty" + +#: ../cli/src/connections.c:1191 +msgid "VPN connection failed" +msgstr "VPN-yhteyden avaus epäonnistui" + +#: ../cli/src/connections.c:1193 +msgid "VPN disconnected" +msgstr "VPN-yhteys katkaistu" + +#: ../cli/src/connections.c:1204 +msgid "unknown reason" +msgstr "tuntematon syy" + +#: ../cli/src/connections.c:1206 +msgid "none" +msgstr "ei mitään" + +#: ../cli/src/connections.c:1208 +msgid "the user was disconnected" +msgstr "käyttäjän yhteys katkaistu" + +#: ../cli/src/connections.c:1210 +msgid "the base network connection was interrupted" +msgstr "verkkoyhteys keskeytynyt" + +#: ../cli/src/connections.c:1212 +msgid "the VPN service stopped unexpectedly" +msgstr "VPN-palvelut pysähtyi yllättäen" + +#: ../cli/src/connections.c:1214 +msgid "the VPN service returned invalid configuration" +msgstr "VPN-palvelu palautti virheelliset asetukset" + +#: ../cli/src/connections.c:1216 +msgid "the connection attempt timed out" +msgstr "yhteyden muodostus aikakatkaistiin" + +#: ../cli/src/connections.c:1218 +msgid "the VPN service did not start in time" +msgstr "VPN-palvelu ei käynnistynyt ajoissa" + +#: ../cli/src/connections.c:1220 +msgid "the VPN service failed to start" +msgstr "VPN-palvelu ei käynnistynyt" + +#: ../cli/src/connections.c:1222 +msgid "no valid VPN secrets" +msgstr "" + +#: ../cli/src/connections.c:1224 +msgid "invalid VPN secrets" +msgstr "" + +#: ../cli/src/connections.c:1226 +msgid "the connection was removed" +msgstr "yhteys poistettu" + +#: ../cli/src/connections.c:1240 +#, c-format +msgid "state: %s\n" +msgstr "tila: %s\n" + +#: ../cli/src/connections.c:1243 ../cli/src/connections.c:1269 +#, c-format +msgid "Connection activated\n" +msgstr "yhteys aktivoitu\n" + +#: ../cli/src/connections.c:1246 +#, c-format +msgid "Error: Connection activation failed." +msgstr "Virhe: Yhteyden aktivointi epäonnistui." + +#: ../cli/src/connections.c:1265 +#, c-format +msgid "state: %s (%d)\n" +msgstr "tila: %s (%d)\n" + +#: ../cli/src/connections.c:1275 +#, c-format +msgid "Error: Connection activation failed: %s." +msgstr "Virhe: Yhteyden aktivointi epäonnistui: %s" + +#: ../cli/src/connections.c:1292 ../cli/src/devices.c:1126 +#, c-format +msgid "Error: Timeout %d sec expired." +msgstr "Virhe: Yhteydenmuodostus kesti liian kauan (%d s)" + +#: ../cli/src/connections.c:1305 +#, c-format +msgid "Error: Connection activation failed: %s" +msgstr "Virhe: Yhteyden aktivointi epäonnistui: %s" + +#: ../cli/src/connections.c:1311 +#, c-format +msgid "Active connection state: %s\n" +msgstr "Aktiivinen yhteyden tila:%s\n" + +#: ../cli/src/connections.c:1312 +#, c-format +msgid "Active connection path: %s\n" +msgstr "Aktiivisen yhteyden polku: %s\n" + +#: ../cli/src/connections.c:1364 ../cli/src/connections.c:1505 +#: ../cli/src/connections.c:1614 +#, c-format +msgid "Error: Unknown connection: %s." +msgstr "Virhe: tuntematon yhteys: %s." + +#: ../cli/src/connections.c:1410 ../cli/src/devices.c:1198 +#, c-format +msgid "Error: timeout value '%s' is not valid." +msgstr "Virhe: Kytkentäajan asetus '%s' virheellinen" + +#: ../cli/src/connections.c:1423 ../cli/src/connections.c:1522 +#: ../cli/src/connections.c:1594 +#, c-format +msgid "Error: id or uuid has to be specified." +msgstr "" + +#: ../cli/src/connections.c:1451 +#, c-format +msgid "Error: No suitable device found: %s." +msgstr "Virhe: Soveltuvaa laitetta ei löytynyt: %s." + +#: ../cli/src/connections.c:1453 +#, c-format +msgid "Error: No suitable device found." +msgstr "Virhe: Soveltuvaa laitetta ei löytynyt." + +#: ../cli/src/connections.c:1558 +#, c-format +msgid "Warning: Connection not active\n" +msgstr "Varoitus: Ei aktiivista yhteyttä\n" + +#: ../cli/src/connections.c:1659 +#, c-format +msgid "Error: 'con' command '%s' is not valid." +msgstr "" + +#: ../cli/src/connections.c:1724 +#, c-format +msgid "Error: could not connect to D-Bus." +msgstr "" + +#: ../cli/src/connections.c:1732 +#, c-format +msgid "Error: Could not get system settings." +msgstr "Virhe: Järjestelmäasetuksia ei saada." + +#: ../cli/src/connections.c:1742 +#, 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 "TILA" + +#: ../cli/src/devices.c:78 +msgid "GENERAL" +msgstr "YLEISTÄ" + +#. 0 +#: ../cli/src/devices.c:79 +msgid "CAPABILITIES" +msgstr "" + +#. 1 +#: ../cli/src/devices.c:80 +msgid "WIFI-PROPERTIES" +msgstr "" + +#. 2 +#: ../cli/src/devices.c:81 +msgid "AP" +msgstr "" + +#. 3 +#: ../cli/src/devices.c:82 +msgid "WIRED-PROPERTIES" +msgstr "" + +#. 4 +#: ../cli/src/devices.c:83 +msgid "WIMAX-PROPERTIES" +msgstr "" + +#. 5 +#. 0 +#: ../cli/src/devices.c:84 ../cli/src/devices.c:225 +msgid "NSP" +msgstr "" + +#. 6 +#: ../cli/src/devices.c:85 +msgid "IP4-SETTINGS" +msgstr "IP4-ASETUKSET" + +#. 7 +#: ../cli/src/devices.c:86 +msgid "IP4-DNS" +msgstr "" + +#. 8 +#: ../cli/src/devices.c:87 +msgid "IP6-SETTINGS" +msgstr "" + +#. 9 +#: ../cli/src/devices.c:88 +msgid "IP6-DNS" +msgstr "" + +#. 2 +#: ../cli/src/devices.c:104 +msgid "DRIVER" +msgstr "OHJAIN" + +#. 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 "NOPEUS" + +#. 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 "" + +#. 0 +#: ../cli/src/devices.c:149 +msgid "CTR-FREQ" +msgstr "" + +#. 1 +#: ../cli/src/devices.c:150 +msgid "RSSI" +msgstr "" + +#. 2 +#: ../cli/src/devices.c:151 +msgid "CINR" +msgstr "" + +#. 3 +#: ../cli/src/devices.c:152 +msgid "TX-POW" +msgstr "" + +#. 4 +#: ../cli/src/devices.c:153 +msgid "BSID" +msgstr "" + +#. 0 +#: ../cli/src/devices.c:163 ../cli/src/devices.c:174 +msgid "ADDRESS" +msgstr "" + +#. 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 "" + +#. 1 +#: ../cli/src/devices.c:204 +msgid "BSSID" +msgstr "" + +#. 2 +#: ../cli/src/devices.c:205 +msgid "MODE" +msgstr "TILA" + +#. 3 +#: ../cli/src/devices.c:206 +msgid "FREQ" +msgstr "TAAJ" + +#. 4 +#: ../cli/src/devices.c:207 +msgid "RATE" +msgstr "NOPEUS" + +#. 5 +#. 1 +#: ../cli/src/devices.c:208 ../cli/src/devices.c:226 +msgid "SIGNAL" +msgstr "" + +#. 6 +#: ../cli/src/devices.c:209 +msgid "SECURITY" +msgstr "TURVALLISUUS" + +#. 7 +#: ../cli/src/devices.c:210 +msgid "WPA-FLAGS" +msgstr "WPA-LIPUT" + +#. 8 +#: ../cli/src/devices.c:211 +msgid "RSN-FLAGS" +msgstr "RSN-LIPUT" + +#. 10 +#. 4 +#: ../cli/src/devices.c:213 ../cli/src/devices.c:229 +msgid "ACTIVE" +msgstr "AKTIIVINEN" + +#: ../cli/src/devices.c:246 +#, 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 ] [bssid ]]\n" +" wimax [list [iface ] [nsp ]]\n" +"\n" +msgstr "" + +#: ../cli/src/devices.c:274 +msgid "unmanaged" +msgstr "hallinnoimaton" + +#: ../cli/src/devices.c:276 +msgid "unavailable" +msgstr "" + +#: ../cli/src/devices.c:278 ../cli/src/network-manager.c:108 +msgid "disconnected" +msgstr "" + +#: ../cli/src/devices.c:280 +msgid "connecting (prepare)" +msgstr "yhdistetään (valmistellaan)" + +#: ../cli/src/devices.c:282 +msgid "connecting (configuring)" +msgstr "yhdistetään (määritellään)" + +#: ../cli/src/devices.c:284 +msgid "connecting (need authentication)" +msgstr "yhdistetään (tarvitsee valtuutuksen)" + +#: ../cli/src/devices.c:286 +msgid "connecting (getting IP configuration)" +msgstr "yhdistetään (haetaan IP määrittelyjä)" + +#: ../cli/src/devices.c:288 +msgid "connecting (checking IP connectivity)" +msgstr "yhdistää (tarkastaa IP yhteyttä)" + +#: ../cli/src/devices.c:290 +msgid "connecting (starting secondary connections)" +msgstr "yhdistää (käynnistää toisen tason yhteydet)" + +#: ../cli/src/devices.c:292 ../cli/src/network-manager.c:104 +msgid "connected" +msgstr "" + +#: ../cli/src/devices.c:296 +msgid "connection failed" +msgstr "yhdistäminen epäonnistui" + +#: ../cli/src/devices.c:321 ../cli/src/devices.c:331 ../cli/src/devices.c:491 +#: ../cli/src/devices.c:535 +msgid "Unknown" +msgstr "Tuntematon" + +#: ../cli/src/devices.c:364 +msgid "(none)" +msgstr "" + +#: ../cli/src/devices.c:389 +#, c-format +msgid "%s: error converting IP4 address 0x%X" +msgstr "" + +#: ../cli/src/devices.c:460 +#, c-format +msgid "%u MHz" +msgstr "%u MHz" + +#: ../cli/src/devices.c:461 +#, c-format +msgid "%u MB/s" +msgstr "" + +#: ../cli/src/devices.c:470 +msgid "Encrypted: " +msgstr "" + +#: ../cli/src/devices.c:475 +msgid "WEP " +msgstr "WEP " + +#: ../cli/src/devices.c:477 +msgid "WPA " +msgstr "WPA " + +#: ../cli/src/devices.c:479 +msgid "WPA2 " +msgstr "WPA2 " + +#: ../cli/src/devices.c:482 +msgid "Enterprise " +msgstr "" + +#: ../cli/src/devices.c:491 +msgid "Ad-Hoc" +msgstr "" + +#: ../cli/src/devices.c:491 +msgid "Infrastructure" +msgstr "" + +#: ../cli/src/devices.c:526 +msgid "Home" +msgstr "" + +#: ../cli/src/devices.c:529 +msgid "Partner" +msgstr "" + +#: ../cli/src/devices.c:532 +msgid "Roaming" +msgstr "" + +#: ../cli/src/devices.c:602 +#, c-format +msgid "Error: 'dev list': %s" +msgstr "" + +#: ../cli/src/devices.c:604 +#, c-format +msgid "Error: 'dev list': %s; allowed fields: %s" +msgstr "" + +#: ../cli/src/devices.c:613 +msgid "Device details" +msgstr "Laitetiedot" + +#: ../cli/src/devices.c:647 ../cli/src/devices.c:1142 ../cli/src/utils.c:343 +msgid "(unknown)" +msgstr "(tuntematon)" + +#: ../cli/src/devices.c:648 +msgid "unknown)" +msgstr "tuntematon)" + +#: ../cli/src/devices.c:674 +#, c-format +msgid "%u Mb/s" +msgstr "" + +#. Print header +#. "WIRED-PROPERTIES" +#: ../cli/src/devices.c:747 +msgid "on" +msgstr "" + +#: ../cli/src/devices.c:747 +msgid "off" +msgstr "" + +#: ../cli/src/devices.c:994 +#, c-format +msgid "Error: 'dev status': %s" +msgstr "Virhe: 'laitetila': %s" + +#: ../cli/src/devices.c:996 +#, c-format +msgid "Error: 'dev status': %s; allowed fields: %s" +msgstr "Virhe: 'laitetila': %s; sallitut kentät: %s" + +#: ../cli/src/devices.c:1019 +msgid "Status of devices" +msgstr "Laitteiden tilat" + +#: ../cli/src/devices.c:1050 +#, c-format +msgid "Error: '%s' argument is missing." +msgstr "" + +#: ../cli/src/devices.c:1091 ../cli/src/devices.c:1243 +#: ../cli/src/devices.c:1380 ../cli/src/devices.c:1599 +#, c-format +msgid "Error: Device '%s' not found." +msgstr "Virhe: laitetta '%s' ei löytynyt." + +#: ../cli/src/devices.c:1114 +#, c-format +msgid "Success: Device '%s' successfully disconnected." +msgstr "" + +#: ../cli/src/devices.c:1139 +#, c-format +msgid "Error: Device '%s' (%s) disconnecting failed: %s" +msgstr "" + +#: ../cli/src/devices.c:1147 +#, c-format +msgid "Device state: %d (%s)\n" +msgstr "Laitteen tila: %d (%s)\n" + +#: ../cli/src/devices.c:1212 +#, c-format +msgid "Error: iface has to be specified." +msgstr "" + +#: ../cli/src/devices.c:1338 +#, c-format +msgid "Error: 'dev wifi': %s" +msgstr "" + +#: ../cli/src/devices.c:1340 +#, c-format +msgid "Error: 'dev wifi': %s; allowed fields: %s" +msgstr "" + +#: ../cli/src/devices.c:1363 +msgid "WiFi scan list" +msgstr "" + +#: ../cli/src/devices.c:1400 ../cli/src/devices.c:1454 +#, c-format +msgid "Error: Access point with bssid '%s' not found." +msgstr "Virhe: Tukiasemaa bssid:llä '%s' ei löytynyt." + +#: ../cli/src/devices.c:1417 +#, c-format +msgid "Error: Device '%s' is not a WiFi device." +msgstr "" + +#: ../cli/src/devices.c:1481 +#, c-format +msgid "Error: 'dev wifi' command '%s' is not valid." +msgstr "" + +#: ../cli/src/devices.c:1557 +#, c-format +msgid "Error: 'dev wimax': %s" +msgstr "" + +#: ../cli/src/devices.c:1559 +#, c-format +msgid "Error: 'dev wimax': %s; allowed fields: %s" +msgstr "" + +#: ../cli/src/devices.c:1582 +msgid "WiMAX NSP list" +msgstr "" + +#: ../cli/src/devices.c:1619 +#, c-format +msgid "Error: NSP with name '%s' not found." +msgstr "" + +#: ../cli/src/devices.c:1630 +#, c-format +msgid "Error: Device '%s' is not a WiMAX device." +msgstr "" + +#: ../cli/src/devices.c:1661 +#, c-format +msgid "Error: Access point with nsp '%s' not found." +msgstr "Virhe: Tukiasemaa nsp:llä '%s' ei löytynyt." + +#: ../cli/src/devices.c:1688 +#, c-format +msgid "Error: 'dev wimax' command '%s' is not valid." +msgstr "" + +#: ../cli/src/devices.c:1738 +#, c-format +msgid "Error: 'dev' command '%s' is not valid." +msgstr "" + +#: ../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 "" + +#. 3 +#: ../cli/src/network-manager.c:41 +msgid "WIFI-HARDWARE" +msgstr "" + +#. 4 +#: ../cli/src/network-manager.c:42 +msgid "WIFI" +msgstr "" + +#. 5 +#: ../cli/src/network-manager.c:43 +msgid "WWAN-HARDWARE" +msgstr "" + +#. 6 +#: ../cli/src/network-manager.c:44 +msgid "WWAN" +msgstr "" + +#. 7 +#: ../cli/src/network-manager.c:45 +msgid "WIMAX-HARDWARE" +msgstr "" + +#. 8 +#: ../cli/src/network-manager.c:46 +msgid "WIMAX" +msgstr "" + +#: ../cli/src/network-manager.c:67 +#, 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 "" + +#: ../cli/src/network-manager.c:96 +msgid "asleep" +msgstr "" + +#: ../cli/src/network-manager.c:98 +msgid "connecting" +msgstr "" + +#: ../cli/src/network-manager.c:100 +msgid "connected (local only)" +msgstr "" + +#: ../cli/src/network-manager.c:102 +msgid "connected (site only)" +msgstr "" + +#: ../cli/src/network-manager.c:106 +msgid "disconnecting" +msgstr "" + +#: ../cli/src/network-manager.c:146 +#, c-format +msgid "Error: 'nm status': %s" +msgstr "" + +#: ../cli/src/network-manager.c:148 +#, c-format +msgid "Error: 'nm status': %s; allowed fields: %s" +msgstr "" + +#. create NMClient +#: ../cli/src/network-manager.c:161 ../cli/src/network-manager.c:162 +#: ../cli/src/network-manager.c:163 ../cli/src/network-manager.c:164 +#: ../cli/src/network-manager.c:165 ../cli/src/network-manager.c:167 +#: ../cli/src/network-manager.c:168 ../cli/src/network-manager.c:289 +#: ../cli/src/network-manager.c:344 ../cli/src/network-manager.c:382 +#: ../cli/src/network-manager.c:421 +msgid "enabled" +msgstr "" + +#: ../cli/src/network-manager.c:161 ../cli/src/network-manager.c:162 +#: ../cli/src/network-manager.c:163 ../cli/src/network-manager.c:164 +#: ../cli/src/network-manager.c:165 ../cli/src/network-manager.c:167 +#: ../cli/src/network-manager.c:168 ../cli/src/network-manager.c:289 +#: ../cli/src/network-manager.c:344 ../cli/src/network-manager.c:382 +#: ../cli/src/network-manager.c:421 +msgid "disabled" +msgstr "" + +#: ../cli/src/network-manager.c:181 +msgid "NetworkManager status" +msgstr "" + +#. Print header +#: ../cli/src/network-manager.c:184 +msgid "running" +msgstr "" + +#: ../cli/src/network-manager.c:184 +msgid "not running" +msgstr "" + +#: ../cli/src/network-manager.c:215 ../cli/src/utils.c:323 +#, c-format +msgid "Error: Couldn't connect to system bus: %s" +msgstr "" + +#: ../cli/src/network-manager.c:226 +#, c-format +msgid "Error: Couldn't create D-Bus object proxy." +msgstr "" + +#: ../cli/src/network-manager.c:232 +#, c-format +msgid "Error in sleep: %s" +msgstr "" + +#: ../cli/src/network-manager.c:276 ../cli/src/network-manager.c:331 +#: ../cli/src/network-manager.c:369 ../cli/src/network-manager.c:408 +#, c-format +msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s" +msgstr "" + +#: ../cli/src/network-manager.c:284 +msgid "Networking enabled" +msgstr "" + +#: ../cli/src/network-manager.c:300 +#, c-format +msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'." +msgstr "" + +#: ../cli/src/network-manager.c:310 +#, c-format +msgid "Error: Sleeping status is not exported by NetworkManager." +msgstr "" + +#: ../cli/src/network-manager.c:318 +#, c-format +msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'." +msgstr "" + +#: ../cli/src/network-manager.c:339 +msgid "WiFi enabled" +msgstr "" + +#: ../cli/src/network-manager.c:355 +#, c-format +msgid "Error: invalid 'wifi' parameter: '%s'." +msgstr "" + +#: ../cli/src/network-manager.c:377 +msgid "WWAN enabled" +msgstr "" + +#: ../cli/src/network-manager.c:393 +#, c-format +msgid "Error: invalid 'wwan' parameter: '%s'." +msgstr "" + +#: ../cli/src/network-manager.c:416 +msgid "WiMAX enabled" +msgstr "" + +#: ../cli/src/network-manager.c:432 +#, c-format +msgid "Error: invalid 'wimax' parameter: '%s'." +msgstr "" + +#: ../cli/src/network-manager.c:445 +#, c-format +msgid "Error: 'nm' command '%s' is not valid." +msgstr "" + +#: ../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 "" + +#: ../cli/src/nmcli.c:109 +#, c-format +msgid "Error: Object '%s' is unknown, try 'nmcli help'." +msgstr "" + +#: ../cli/src/nmcli.c:139 +#, c-format +msgid "Error: Option '--terse' is specified the second time." +msgstr "" + +#: ../cli/src/nmcli.c:144 +#, c-format +msgid "Error: Option '--terse' is mutually exclusive with '--pretty'." +msgstr "" + +#: ../cli/src/nmcli.c:152 +#, c-format +msgid "Error: Option '--pretty' is specified the second time." +msgstr "" + +#: ../cli/src/nmcli.c:157 +#, c-format +msgid "Error: Option '--pretty' is mutually exclusive with '--terse'." +msgstr "" + +#: ../cli/src/nmcli.c:167 ../cli/src/nmcli.c:183 +#, c-format +msgid "Error: missing argument for '%s' option." +msgstr "" + +#: ../cli/src/nmcli.c:176 ../cli/src/nmcli.c:192 +#, c-format +msgid "Error: '%s' is not valid argument for '%s' option." +msgstr "" + +#: ../cli/src/nmcli.c:199 +#, c-format +msgid "Error: fields for '%s' options are missing." +msgstr "" + +#: ../cli/src/nmcli.c:207 +#, c-format +msgid "nmcli tool, version %s\n" +msgstr "" + +#: ../cli/src/nmcli.c:213 +#, c-format +msgid "Error: Option '%s' is unknown, try 'nmcli -help'." +msgstr "" + +#: ../cli/src/nmcli.c:232 +#, c-format +msgid "Caught signal %d, shutting down..." +msgstr "" + +#: ../cli/src/nmcli.c:257 +msgid "Error: Could not create NMClient object." +msgstr "" + +#: ../cli/src/nmcli.c:273 +msgid "Success" +msgstr "" + +#: ../cli/src/settings.c:447 +#, c-format +msgid "%d (hex-ascii-key)" +msgstr "" + +#: ../cli/src/settings.c:449 +#, c-format +msgid "%d (104/128-bit passphrase)" +msgstr "" + +#: ../cli/src/settings.c:452 +#, c-format +msgid "%d (unknown)" +msgstr "%d (tuntematon)" + +#: ../cli/src/settings.c:478 +msgid "0 (unknown)" +msgstr "0 (tuntematon)" + +#: ../cli/src/settings.c:484 +msgid "any, " +msgstr "" + +#: ../cli/src/settings.c:486 +msgid "900 MHz, " +msgstr "900 MHz, " + +#: ../cli/src/settings.c:488 +msgid "1800 MHz, " +msgstr "1800 MHz, " + +#: ../cli/src/settings.c:490 +msgid "1900 MHz, " +msgstr "1900 MHz, " + +#: ../cli/src/settings.c:492 +msgid "850 MHz, " +msgstr "850 MHz, " + +#: ../cli/src/settings.c:494 +msgid "WCDMA 3GPP UMTS 2100 MHz, " +msgstr "WCDMA 3GPP UMTS 2100 MHz, " + +#: ../cli/src/settings.c:496 +msgid "WCDMA 3GPP UMTS 1800 MHz, " +msgstr "WCDMA 3GPP UMTS 1800 MHz, " + +#: ../cli/src/settings.c:498 +msgid "WCDMA 3GPP UMTS 1700/2100 MHz, " +msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, " + +#: ../cli/src/settings.c:500 +msgid "WCDMA 3GPP UMTS 800 MHz, " +msgstr "WCDMA 3GPP UMTS 800 MHz, " + +#: ../cli/src/settings.c:502 +msgid "WCDMA 3GPP UMTS 850 MHz, " +msgstr "WCDMA 3GPP UMTS 850 MHz, " + +#: ../cli/src/settings.c:504 +msgid "WCDMA 3GPP UMTS 900 MHz, " +msgstr "WCDMA 3GPP UMTS 900 MHz, " + +#: ../cli/src/settings.c:506 +msgid "WCDMA 3GPP UMTS 1700 MHz, " +msgstr "WCDMA 3GPP UMTS 1700 MHz, " + +#: ../cli/src/settings.c:508 +msgid "WCDMA 3GPP UMTS 1900 MHz, " +msgstr "WCDMA 3GPP UMTS 1900 MHz, " + +#: ../cli/src/settings.c:510 +msgid "WCDMA 3GPP UMTS 2600 MHz, " +msgstr "WCDMA 3GPP UMTS 2100 MHz, " + +#: ../cli/src/settings.c:636 ../cli/src/settings.c:835 +msgid "auto" +msgstr "auto" + +#: ../cli/src/settings.c:829 ../cli/src/settings.c:832 +#: ../cli/src/settings.c:833 ../cli/src/utils.c:176 +msgid "not set" +msgstr "ei asetettu" + +#: ../cli/src/utils.c:128 +#, c-format +msgid "field '%s' has to be alone" +msgstr "" + +#: ../cli/src/utils.c:131 +#, c-format +msgid "invalid field '%s'" +msgstr "" + +#: ../cli/src/utils.c:150 +#, c-format +msgid "Option '--terse' requires specifying '--fields'" +msgstr "" + +#: ../cli/src/utils.c:154 +#, c-format +msgid "Option '--terse' requires specific '--fields' option values , not '%s'" +msgstr "" + +#: ../cli/src/utils.c:334 +#, c-format +msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus" +msgstr "" + +#: ../cli/src/utils.c:342 +#, c-format +msgid "Error: NameHasOwner request failed: %s" +msgstr "" + +#: ../cli/src/utils.c:387 +#, c-format msgid "" +"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --" +"nocheck to suppress the warning.\n" msgstr "" -"Project-Id-Version: NetworkManager\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-11-29 20:22+0300\n" -"PO-Revision-Date: 2008-11-29 20:00+0300\n" -"Last-Translator: Ilkka Tuohela \n" -"Language-Team: Finnish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../libnm-util/crypto.c:120 +#: ../cli/src/utils.c:396 +#, c-format +msgid "" +"Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force " +"execution using --nocheck, but the results are unpredictable." +msgstr "" + +#: ../libnm-util/crypto.c:133 #, c-format msgid "PEM key file had no end tag '%s'." msgstr "PEM-avaintiedostossa ei ole loppumerkkiä \"%s\"." -#: ../libnm-util/crypto.c:130 +#: ../libnm-util/crypto.c:146 #, c-format msgid "Doesn't look like a PEM private key file." msgstr "Tämä ei näytä PEM-muotoiselta salaisen avaimen tiedostolta." -#: ../libnm-util/crypto.c:138 +#: ../libnm-util/crypto.c:154 #, c-format msgid "Not enough memory to store PEM file data." msgstr "Muisti ei riitä PEM-tiedoston sisällön tallentamiseen." -#: ../libnm-util/crypto.c:154 +#: ../libnm-util/crypto.c:170 #, c-format msgid "Malformed PEM file: Proc-Type was not first tag." msgstr "Virheellinen PEM-tiedosto: ensimmäinen merkintä ei ollut Proc-Type." -#: ../libnm-util/crypto.c:162 +#: ../libnm-util/crypto.c:178 #, c-format msgid "Malformed PEM file: unknown Proc-Type tag '%s'." msgstr "Virheellinen PEM-tiedosto: tuntematon Proc-Type-merkintä \"%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 "Virheellinen PEM-tiedosto: DEK-Info ei ollut toinen merkintä." -#: ../libnm-util/crypto.c:183 +#: ../libnm-util/crypto.c:199 #, c-format msgid "Malformed PEM file: no IV found in DEK-Info tag." msgstr "Virheellinen PEM-tiedosto: alustusvektoria ei löytynyt DEK-Infosta." -#: ../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 "Virheellinen PEM-tiedosto: alustusvektori DEK-Infossa on virheellinen." -#: ../libnm-util/crypto.c:203 +#: ../libnm-util/crypto.c:219 #, c-format msgid "Malformed PEM file: unknown private key cipher '%s'." msgstr "Virheellinen PEM-tiedosto: tuntematon salaisen avaimen sifferi \"%s\"." -#: ../libnm-util/crypto.c:222 +#: ../libnm-util/crypto.c:238 #, c-format msgid "Could not decode private key." msgstr "Salaista avainta ei voitu purkaa." -#: ../libnm-util/crypto.c:267 -#, c-format -msgid "PEM certificate '%s' had no end tag '%s'." -msgstr "PEM-varmenne \"%s\" ei sisällä päätösmerkkiä \"%s\"." +#: ../libnm-util/crypto.c:284 +msgid "Failed to find expected PKCS#8 start tag." +msgstr "" -#: ../libnm-util/crypto.c:277 +#: ../libnm-util/crypto.c:292 #, c-format -msgid "Failed to decode certificate." -msgstr "Varmennetta ei voitu purkaa." +msgid "Failed to find expected PKCS#8 end tag '%s'." +msgstr "" + +#: ../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 "" -#: ../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 "Muisti ei riitä varmenteen tietojen tallennukseen." -#: ../libnm-util/crypto.c:294 -#, c-format -msgid "Not enough memory to store file data." -msgstr "Muisti ei riitä tiedoston sisällön tallentamiseen." - -#: ../libnm-util/crypto.c:324 +#: ../libnm-util/crypto.c:365 #, c-format msgid "IV must be an even number of bytes in length." msgstr "Alustusvektorin täytyy olla parillisen tavumäärän pituinen." -#: ../libnm-util/crypto.c:333 +#: ../libnm-util/crypto.c:374 #, c-format msgid "Not enough memory to store the IV." msgstr "Muisti ei riitä alustusvektorin tallennukseen." -#: ../libnm-util/crypto.c:344 +#: ../libnm-util/crypto.c:385 #, c-format msgid "IV contains non-hexadecimal digits." msgstr "Alustusvektori sisältää muita kuin heksadesimaalisia merkkejä." -#: ../libnm-util/crypto.c:382 ../libnm-util/crypto_gnutls.c:143 -#: ../libnm-util/crypto_nss.c:169 +#: ../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 "Salaisen avaimen sifferi \"%s\" oli tuntematon." -#: ../libnm-util/crypto.c:391 +#: ../libnm-util/crypto.c:432 #, c-format msgid "Not enough memory to decrypt private key." msgstr "Muisti ei riitä salaisen avaimen purkamiseen." -#: ../libnm-util/crypto.c:511 +#: ../libnm-util/crypto.c:497 +#, c-format +msgid "Not enough memory to store decrypted private key." +msgstr "Muisti ei riitä puretun salaisen avaimen tallennukseen." + +#: ../libnm-util/crypto.c:542 #, c-format msgid "Unable to determine private key type." msgstr "Salaisen avaimen tyyppiä ei voi selvittää." -#: ../libnm-util/crypto.c:530 +#: ../libnm-util/crypto.c:597 #, c-format -msgid "Not enough memory to store decrypted private key." -msgstr "Muisti ei riitä puretun salaisen avaimen tallennukseen." +msgid "PEM certificate had no start tag '%s'." +msgstr "" -#: ../libnm-util/crypto_gnutls.c:46 +#: ../libnm-util/crypto.c:606 +#, c-format +msgid "PEM certificate had no end tag '%s'." +msgstr "" + +#: ../libnm-util/crypto.c:630 +#, c-format +msgid "Failed to decode certificate." +msgstr "Varmennetta ei voitu purkaa." + +#: ../libnm-util/crypto_gnutls.c:50 msgid "Failed to initialize the crypto engine." msgstr "Salausmoottoria ei voitu alustaa." -#: ../libnm-util/crypto_gnutls.c:90 +#: ../libnm-util/crypto_gnutls.c:92 #, c-format msgid "Failed to initialize the MD5 engine: %s / %s." -msgstr "MD5-moottoria ei voitu alustaa: %s / %s." +msgstr "MD5-moottorin alustus epäonnistui: %s / %s." + +#: ../libnm-util/crypto_gnutls.c:155 +#, c-format +msgid "Invalid IV length (must be at least %zd)." +msgstr "Alustusvektorin pituus ei kelpaa (täytyy olla vähintään %zd)" -#: ../libnm-util/crypto_gnutls.c:152 ../libnm-util/crypto_nss.c:178 +#: ../libnm-util/crypto_gnutls.c:164 ../libnm-util/crypto_nss.c:184 #, c-format msgid "Not enough memory for decrypted key buffer." msgstr "Muisti ei riitä puretulle avainpuskurille." -#: ../libnm-util/crypto_gnutls.c:160 +#: ../libnm-util/crypto_gnutls.c:172 #, c-format msgid "Failed to initialize the decryption cipher context: %s / %s." msgstr "Virhe alustettaessa purkusifferin kontekstia: %s / %s." -#: ../libnm-util/crypto_gnutls.c:169 +#: ../libnm-util/crypto_gnutls.c:181 #, c-format msgid "Failed to set symmetric key for decryption: %s / %s." msgstr "Virhe asetettaessa symmetristä salausavainta: %s / %s." -#: ../libnm-util/crypto_gnutls.c:178 +#: ../libnm-util/crypto_gnutls.c:190 #, c-format msgid "Failed to set IV for decryption: %s / %s." msgstr "Alustusvektoria purkua varten ei voitu alustaa: %s / %s." -#: ../libnm-util/crypto_gnutls.c:187 +#: ../libnm-util/crypto_gnutls.c:199 #, c-format msgid "Failed to decrypt the private key: %s / %s." msgstr "Salaista avainta ei voitu purkaa: %s / %s." -#: ../libnm-util/crypto_gnutls.c:200 +#: ../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 "Henkilökohtaisen avaimen purku epäonnistui: odottamaton täytepituus." + +#: ../libnm-util/crypto_gnutls.c:220 ../libnm-util/crypto_nss.c:274 #, c-format msgid "Failed to decrypt the private key." msgstr "Salaisen avaimen purku epäonnistui." -#: ../libnm-util/crypto_gnutls.c:235 +#: ../libnm-util/crypto_gnutls.c:285 ../libnm-util/crypto_nss.c:352 +#, c-format +msgid "Could not allocate memory for encrypting." +msgstr "Muistin varaus salausta varten ei onnistunut." + +#: ../libnm-util/crypto_gnutls.c:293 +#, c-format +msgid "Failed to initialize the encryption cipher context: %s / %s." +msgstr "Salauksen sisällön alustus epäonnistui: %s / %s" + +#: ../libnm-util/crypto_gnutls.c:302 +#, c-format +msgid "Failed to set symmetric key for encryption: %s / %s." +msgstr "Virhe asetettaessa salauksen symmetristä avainta: %s / %s." + +#: ../libnm-util/crypto_gnutls.c:312 +#, c-format +msgid "Failed to set IV for encryption: %s / %s." +msgstr "Salauksen alustusvektorin asettaminen epäonnistui: %s / %s." + +#: ../libnm-util/crypto_gnutls.c:321 +#, c-format +msgid "Failed to encrypt the data: %s / %s." +msgstr "Virhe tietojen salaamisessa: %s / %s." + +#: ../libnm-util/crypto_gnutls.c:361 #, c-format msgid "Error initializing certificate data: %s" msgstr "Virhe alustettaessa varmenteen tietoja: %s" -#: ../libnm-util/crypto_gnutls.c:257 +#: ../libnm-util/crypto_gnutls.c:383 #, c-format msgid "Couldn't decode certificate: %s" msgstr "Varmennetta ei voitu purkaa: %s" -#: ../libnm-util/crypto_gnutls.c:281 +#: ../libnm-util/crypto_gnutls.c:407 #, c-format msgid "Couldn't initialize PKCS#12 decoder: %s" msgstr "PKCS#12-tulkkia ei voitu alustaa: %s" -#: ../libnm-util/crypto_gnutls.c:294 +#: ../libnm-util/crypto_gnutls.c:420 #, c-format msgid "Couldn't decode PKCS#12 file: %s" msgstr "PKCS#12-tiedostoa ei voitu purkaa: %s" -#: ../libnm-util/crypto_gnutls.c:306 +#: ../libnm-util/crypto_gnutls.c:432 #, c-format msgid "Couldn't verify PKCS#12 file: %s" msgstr "PKCS#12-tiedostoa ei voitu varmentaa: %s" -#: ../libnm-util/crypto_nss.c:57 +#: ../libnm-util/crypto_gnutls.c:460 +#, c-format +msgid "Couldn't initialize PKCS#8 decoder: %s" +msgstr "" + +#: ../libnm-util/crypto_gnutls.c:483 +#, c-format +msgid "Couldn't decode PKCS#8 file: %s" +msgstr "" + +#: ../libnm-util/crypto_nss.c:56 #, c-format msgid "Failed to initialize the crypto engine: %d." msgstr "Salausmoottoria ei voitu alustaa: %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-kontekstia ei voitu alustaa: %d." -#: ../libnm-util/crypto_nss.c:186 +#: ../libnm-util/crypto_nss.c:175 +#, c-format +msgid "Invalid IV length (must be at least %d)." +msgstr "Alustusvektorin pituus ei kelpaa (täytyy olla vähintään %d)." + +#: ../libnm-util/crypto_nss.c:192 #, c-format msgid "Failed to initialize the decryption cipher slot." msgstr "Salausmenetelmän lohkoa ei voitu alustaa." -#: ../libnm-util/crypto_nss.c:196 +#: ../libnm-util/crypto_nss.c:202 #, c-format msgid "Failed to set symmetric key for decryption." msgstr "Symmetristä salausavainta ei voitu asettaa." -#: ../libnm-util/crypto_nss.c:206 +#: ../libnm-util/crypto_nss.c:212 #, c-format msgid "Failed to set IV for decryption." msgstr "Salauksen purun aloitusvektorin asetus epäonnistui." -#: ../libnm-util/crypto_nss.c:214 +#: ../libnm-util/crypto_nss.c:220 #, c-format msgid "Failed to initialize the decryption context." msgstr "Salauksen purun kontekstia ei voitu alustaa." -#: ../libnm-util/crypto_nss.c:227 +#: ../libnm-util/crypto_nss.c:233 #, c-format msgid "Failed to decrypt the private key: %d." -msgstr "Salaista avainta ei voitu purkaa: %d." +msgstr "Salaisen avaimen purku epäonnistui: %d" + +#: ../libnm-util/crypto_nss.c:241 +#, c-format +msgid "Failed to decrypt the private key: decrypted data too large." +msgstr "" +"Henkilökohtaisen avaimen purkaminen ei onnistu: käsiteltävää dataa on liikaa." -#: ../libnm-util/crypto_nss.c:239 +#: ../libnm-util/crypto_nss.c:252 #, c-format msgid "Failed to finalize decryption of the private key: %d." msgstr "Salaisen avaimen salauksen purkua ei voitu viimeistellä: %d." -#: ../libnm-util/crypto_nss.c:284 +#: ../libnm-util/crypto_nss.c:360 +#, c-format +msgid "Failed to initialize the encryption cipher slot." +msgstr "Salausavainpaikan alustus epäonnistui." + +#: ../libnm-util/crypto_nss.c:368 +#, c-format +msgid "Failed to set symmetric key for encryption." +msgstr "Symmetrisen avaimen asettaminen salausta varten ei onnistunut." + +#: ../libnm-util/crypto_nss.c:376 +#, c-format +msgid "Failed to set IV for encryption." +msgstr "Salauksen alustusvektorin asettaminen epäonnistui." + +#: ../libnm-util/crypto_nss.c:384 +#, c-format +msgid "Failed to initialize the encryption context." +msgstr "Salauskontekstin alustus epäonnistui." + +#: ../libnm-util/crypto_nss.c:392 +#, c-format +msgid "Failed to encrypt: %d." +msgstr "Virhe salauksessa: %d." + +#: ../libnm-util/crypto_nss.c:400 +#, c-format +msgid "Unexpected amount of data after encrypting." +msgstr "Odottamaton määrä tietoa salauksen jälkeen." + +#: ../libnm-util/crypto_nss.c:443 #, c-format msgid "Couldn't decode certificate: %d" msgstr "Varmennetta ei voitu tulkita: %d" -#: ../libnm-util/crypto_nss.c:319 +#: ../libnm-util/crypto_nss.c:478 #, c-format msgid "Couldn't convert password to UCS2: %d" msgstr "Salasanaa ei voitu muuntaa UCS2-muotoon: %d" -#: ../libnm-util/crypto_nss.c:347 +#: ../libnm-util/crypto_nss.c:506 #, c-format msgid "Couldn't initialize PKCS#12 decoder: %d" msgstr "PKCS#12-tulkkia ei voitu alustaa: %d" -#: ../libnm-util/crypto_nss.c:356 +#: ../libnm-util/crypto_nss.c:515 #, c-format msgid "Couldn't decode PKCS#12 file: %d" msgstr "PKCS#12-tiedostoa ei voitu tulkita: %d" -#: ../libnm-util/crypto_nss.c:365 +#: ../libnm-util/crypto_nss.c:524 #, c-format msgid "Couldn't verify PKCS#12 file: %d" msgstr "PKCS#12-tiedostoa ei voitu varmistaa: %d" -#: ../src/nm-netlink-monitor.c:194 ../src/nm-netlink-monitor.c:454 -#, c-format -msgid "error processing netlink message: %s" -msgstr "virhe käsiteltäessä netlink-viestiä: %s" +#: ../libnm-util/crypto_nss.c:568 +msgid "Could not generate random data." +msgstr "Ei voitu tuottaa satunnaista dataa." -#: ../src/nm-netlink-monitor.c:251 +#: ../libnm-util/nm-utils.c:2000 #, c-format -msgid "unable to allocate netlink handle for monitoring link status: %s" -msgstr "ei voitu varata netlink-kahvaa linkin tilan tarkkailulle: %s" +msgid "Not enough memory to make encryption key." +msgstr "Ei tarpeeksi muistia salausavaimen luomiseksi." + +#: ../libnm-util/nm-utils.c:2110 +msgid "Could not allocate memory for PEM file creation." +msgstr "Muistin varaus PEM-tiedoston luontia varten ei onnistunut." -#: ../src/nm-netlink-monitor.c:261 +#: ../libnm-util/nm-utils.c:2122 #, c-format -msgid "unable to connect to netlink for monitoring link status: %s" +msgid "Could not allocate memory for writing IV to PEM file." msgstr "" -"ei voitu yhdistää netlink-pistokkeeseen linkin tilan tarkkailua varten: %s" +"Muistinvaraus epäonnistui kirjoitettaessa alustusvektoria PEM-tiedostoon." -#: ../src/nm-netlink-monitor.c:269 +#: ../libnm-util/nm-utils.c:2134 #, c-format -msgid "unable to join netlink group for monitoring link status: %s" -msgstr "ei voit liittyä netlink-ryhmään linkin tilan tarkkailua varten: %s" +msgid "Could not allocate memory for writing encrypted key to PEM file." +msgstr "" +"Muistinvaraus epäonnistui kirjoitettaessa salattua avainta PEM-tiedostoon." -#: ../src/nm-netlink-monitor.c:277 +#: ../libnm-util/nm-utils.c:2153 #, c-format -msgid "unable to allocate netlink link cache for monitoring link status: %s" +msgid "Could not allocate memory for PEM file data." +msgstr "Muistinvaraus PEM-tiedoston luomiseksi epäonnistui." + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1 +msgid "Allow control of network connections" msgstr "" -"ei voitu varata netlink-linkin välimuistia inkin tilan tarkkailua varten %s" -#: ../src/nm-netlink-monitor.c:418 -#, c-format -msgid "error updating link cache: %s" -msgstr "virhe päivitettäessä linkkivälimuistia: %s" +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2 +msgid "Connection sharing via a protected WiFi network" +msgstr "Yhteyden jakaminen suojatun langattoman verkon kautta" -#: ../src/nm-netlink-monitor.c:484 -msgid "error occurred while waiting for data on socket" -msgstr "virhe odotettaessa tietoja pistokkeesta" +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3 +msgid "Connection sharing via an open WiFi network" +msgstr "Yhteyden jakaminen avoimen langattoman verkon kautta" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4 +msgid "Enable or disable WiFi devices" +msgstr "" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5 +msgid "Enable or disable WiMAX mobile broadband devices" +msgstr "" + +#: ../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 "Muuta järjestelmän verkkonimeä" + +#: ../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 "" + +#: ../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 "" -#: ../src/NetworkManager.c:293 +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:14 +msgid "" +"System policy prevents enabling or disabling WiMAX mobile broadband devices" +msgstr "" + +#: ../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 "Tietoturvakäytäntö estää tietokoneen nimen muuttamisen" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:20 +msgid "System policy prevents putting NetworkManager to sleep or waking it up" +msgstr "" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:21 +msgid "System policy prevents sharing connections via a protected WiFi network" +msgstr "" +"Tietoturvakäytäntö estää yhteyksien jakamisen suojatun langattoman verkon " +"kautta" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:22 +msgid "System policy prevents sharing connections via an open WiFi network" +msgstr "" +"Tietoturvakäytäntö estää yhteyksien jakamisen avoimen langattoman verkon " +"kautta" + +#: ../src/main.c:530 #, c-format msgid "Invalid option. Please use --help to see a list of valid options.\n" msgstr "" "Virheellinen valitsin: Antamalla --help näet luettelon kelvollisista\n" "valitsimista.\n" -#: ../src/dhcp-manager/nm-dhcp-dhclient.c:88 +#: ../src/main.c:611 +#, c-format +msgid "%s. Please use --help to see a list of valid options.\n" +msgstr "" + +#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:62 msgid "# Created by NetworkManager\n" msgstr "# NetworkManagerin luoma\n" -#: ../src/dhcp-manager/nm-dhcp-dhclient.c:94 +#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:69 #, c-format msgid "" "# Merged from %s\n" @@ -308,21 +1854,160 @@ msgstr "" "# Yhdistetty tiedostosta %s\n" "\n" -#: ../src/dns-manager/nm-dns-manager.c:256 +#: ../src/dhcp-manager/nm-dhcp-manager.c:284 +msgid "no usable DHCP client could be found." +msgstr "DHCP-asiakasta ei käytettävissä" + +#: ../src/dhcp-manager/nm-dhcp-manager.c:293 +msgid "'dhclient' could be found." +msgstr "'dhclient' ei löydetty." + +#: ../src/dhcp-manager/nm-dhcp-manager.c:303 +msgid "'dhcpcd' could be found." +msgstr "" + +#: ../src/dhcp-manager/nm-dhcp-manager.c:311 +#, c-format +msgid "unsupported DHCP client '%s'" +msgstr "" + +#: ../src/dns-manager/nm-dns-manager.c:376 msgid "NOTE: the libc resolver may not support more than 3 nameservers." msgstr "HUOMAUTUS: libc-nimenselvennys ei ehkä tue kuin kolmea nimipalvelinta." -#: ../src/dns-manager/nm-dns-manager.c:258 +#: ../src/dns-manager/nm-dns-manager.c:378 msgid "The nameservers listed below may not be recognized." msgstr "Alla olevaa nimipalvelinluetteloa ei voitu tunnistaa." -#: ../system-settings/src/main.c:380 +#: ../src/logging/nm-logging.c:149 +#, c-format +msgid "Unknown log level '%s'" +msgstr "" + +#: ../src/logging/nm-logging.c:174 +#, c-format +msgid "Unknown log domain '%s'" +msgstr "" + +#: ../src/modem-manager/nm-modem-cdma.c:296 ../src/nm-device-bt.c:355 +#, c-format +msgid "CDMA connection %d" +msgstr "" + +#: ../src/modem-manager/nm-modem-gsm.c:499 ../src/nm-device-bt.c:351 +#, c-format +msgid "GSM connection %d" +msgstr "" + +#: ../src/nm-device-bt.c:326 +#, c-format +msgid "PAN connection %d" +msgstr "" + +#: ../src/nm-device-bt.c:359 +#, c-format +msgid "DUN connection %d" +msgstr "" + +#: ../src/nm-device-ethernet.c:1724 +#, c-format +msgid "PPPoE connection %d" +msgstr "" + +#: ../src/nm-device-ethernet.c:1724 ../src/settings/nm-settings-utils.c:50 +#, c-format +msgid "Wired connection %d" +msgstr "" + +#: ../src/nm-device-olpc-mesh.c:393 +#, c-format +msgid "Mesh %d" +msgstr "" + +#: ../src/nm-manager.c:657 +#, c-format +msgid "VPN connection %d" +msgstr "" + +#: ../src/nm-netlink-monitor.c:101 ../src/nm-netlink-monitor.c:234 +#: ../src/nm-netlink-monitor.c:667 +#, c-format +msgid "error processing netlink message: %s" +msgstr "virhe käsiteltäessä netlink-viestiä: %s" + +#: ../src/nm-netlink-monitor.c:216 +msgid "error occurred while waiting for data on socket" +msgstr "virhe odotettaessa tietoja pistokkeesta" + +#: ../src/nm-netlink-monitor.c:260 +#, c-format +msgid "unable to connect to netlink for monitoring link status: %s" +msgstr "" +"ei voitu yhdistää netlink-pistokkeeseen linkin tilan tarkkailua varten: %s" + +#: ../src/nm-netlink-monitor.c:271 +#, c-format +msgid "unable to enable netlink handle credential passing: %s" +msgstr "" + +#: ../src/nm-netlink-monitor.c:297 ../src/nm-netlink-monitor.c:360 +#, c-format +msgid "unable to allocate netlink handle for monitoring link status: %s" +msgstr "ei voitu varata netlink-kahvaa linkin tilan tarkkailulle: %s" + +#: ../src/nm-netlink-monitor.c:385 +#, c-format +msgid "unable to allocate netlink link cache for monitoring link status: %s" +msgstr "" +"ei voitu varata netlink-linkin välimuistia linkin tilan tarkkailua varten %s" + +#: ../src/nm-netlink-monitor.c:512 +#, c-format +msgid "unable to join netlink group: %s" +msgstr "Verkkolinkkiryhmään %s ei voida liittyä" + +#: ../src/nm-netlink-monitor.c:643 ../src/nm-netlink-monitor.c:656 #, c-format -msgid "Auto %s" -msgstr "Auto-%s" +msgid "error updating link cache: %s" +msgstr "virhe päivitettäessä linkkivälimuistia: %s" + +#: ../src/settings/plugins/ifcfg-rh/reader.c:3575 +#: ../src/settings/plugins/ifnet/connection_parser.c:51 +msgid "System" +msgstr "Järjestelmä" + +#~ msgid "Auto %s" +#~ msgstr "Auto-%s" + +#~ msgid "Not enough memory to store file data." +#~ msgstr "Muisti ei riitä tiedoston sisällön tallentamiseen." + +#~ msgid "System policy prevents modification of system settings" +#~ msgstr "Tietoturvakäytäntö estää järjestelmäasetusten muuttamisen" + +#~ msgid "Modify system connections" +#~ msgstr "Muokkaa järjestelmän yhteyksiä" + +#~ msgid "PEM certificate '%s' had no end tag '%s'." +#~ msgstr "PEM-varmenteessa \"%s\" ei ole lopputunnistetta \"%s\"." + +#~ msgid "System connections" +#~ msgstr "Järjestelmäyhteydet" + +#~ msgid "system" +#~ msgstr "järjestelmä" + +#~ msgid "User connections" +#~ msgstr "Käyttäjän yhteydet" + +#~ msgid "DBUS-SERVICE" +#~ msgstr "DBUS-PALVELU" + +#~ msgid "user" +#~ msgstr "käyttäjä" -#~ msgid "Not enough memory to create private key decryption key." -#~ msgstr "Muisti ei riitä luomaan salaisen avaimen purkuavainta." +#~ msgid "SCOPE" +#~ msgstr "ALUE" -#~ msgid "Auto Wired" -#~ msgstr "Automaattinen kiinteä" +#~ msgid "Error: Obtaining active connection for '%s' failed." +#~ msgstr "Virhe: Aktiivista yhteyttä '%s' ei saatu." diff --git a/po/gl.po b/po/gl.po index 62dc71f3..7242f4dd 100644 --- a/po/gl.po +++ b/po/gl.po @@ -4,978 +4,1244 @@ # # Ignacio Casal Quinteiro , 2007, 2008. # Miguel Anxo Bouzada , 2010. +# Fran Diéguez , 2011. +# msgid "" msgstr "" "Project-Id-Version: gl\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-11 21:19+0000\n" -"PO-Revision-Date: 2010-08-23 00:53+0000\n" -"Last-Translator: Francisco Diéguez \n" -"Language-Team: Galego \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-24 19:48+0000\n" +"PO-Revision-Date: 2011-08-25 01:12+0000\n" +"Last-Translator: Fran Diéguez \n" +"Language-Team: Galician \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2010-08-23 01:00+0000\n" -"X-Generator: Launchpad (build Unknown)\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 "NOME" #. 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 "DISPOSITIVOS" #. 2 -#: ../cli/src/connections.c:63 ../cli/src/connections.c:78 -msgid "SCOPE" -msgstr "AMBITO" - -#. 3 -#: ../cli/src/connections.c:64 +#: ../cli/src/connections.c:67 msgid "DEFAULT" msgstr "PREDEFINIDO" -#. 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-OBXECTO" -#. 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-RUTA" + #. 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 "TIPO" -#. 3 -#: ../cli/src/connections.c:79 +#. 2 +#: ../cli/src/connections.c:81 msgid "TIMESTAMP" msgstr "MARCADETEMPO" -#. 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 "AUTOCONECTAR" -#. 6 -#: ../cli/src/connections.c:82 +#. 5 +#: ../cli/src/connections.c:84 msgid "READONLY" msgstr "SO-LECTURA" -#: ../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 ] [nsp ] [--" +"nowait] [--timeout ]\n" " up id | uuid [iface ] [ap ] [--nowait] [--timeout " "]\n" " down id | uuid \n" msgstr "" -"Uso: nmcli con { ORDE | help }\n" -" ORDE := { list | status | up | down }\n" +"Uso: nmcli con { COMANDO | help }\n" +" COMANDO := { 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:544 #, c-format msgid "Error: 'con list': %s" msgstr "Erro: 'con list': %s" -#: ../cli/src/connections.c:200 ../cli/src/connections.c:539 +#: ../cli/src/connections.c:222 ../cli/src/connections.c:546 #, c-format msgid "Error: 'con list': %s; allowed fields: %s" msgstr "Erro: 'con list': %s; campos permitidos: %s" -#: ../cli/src/connections.c:208 +#: ../cli/src/connections.c:230 msgid "Connection details" msgstr "Detalles da conexión" -#: ../cli/src/connections.c:382 ../cli/src/connections.c:602 -msgid "system" -msgstr "sistema" - -#: ../cli/src/connections.c:382 ../cli/src/connections.c:602 -msgid "user" -msgstr "usuario" - -#: ../cli/src/connections.c:384 +#: ../cli/src/connections.c:419 msgid "never" msgstr "nunca" #. "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: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 "si" -#: ../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: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 "non" -#: ../cli/src/connections.c:458 ../cli/src/connections.c:501 -msgid "System connections" -msgstr "Conexións do sistema" +#: ../cli/src/connections.c:495 +#| msgid "Connection details" +msgid "Connection list" +msgstr "Lista de conexións" -#: ../cli/src/connections.c:463 ../cli/src/connections.c:514 -msgid "User connections" -msgstr "Conexións do usuario" - -#: ../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: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 "Erro: falta o argumento %s" -#: ../cli/src/connections.c:488 +#: ../cli/src/connections.c:521 #, c-format msgid "Error: %s - no such connection." msgstr "Erro: %s - non existe dita conexión." -#: ../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: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 "Parámetros descoñecidos: %s\n" -#: ../cli/src/connections.c:529 +#: ../cli/src/connections.c:536 #, c-format msgid "Error: no valid parameter specified." msgstr "Erro: non se especificou un parámetro válido" -#: ../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:551 ../cli/src/connections.c:1617 +#: ../cli/src/devices.c:1755 ../cli/src/network-manager.c:463 #, c-format msgid "Error: %s." msgstr "Erro: %s." -#: ../cli/src/connections.c:650 +#: ../cli/src/connections.c:639 #, c-format msgid "Error: 'con status': %s" msgstr "Erro: «con status»: %s" -#: ../cli/src/connections.c:652 +#: ../cli/src/connections.c:641 #, c-format msgid "Error: 'con status': %s; allowed fields: %s" msgstr "Erro: «con status»: %s; campos permitidos: %s" -#: ../cli/src/connections.c:659 +#: ../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 "Erro: non é posíbel determinar se NetworkManager está a funcionar: %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 "Erro: NetworkManager non está a funcionar." + +#: ../cli/src/connections.c:661 msgid "Active connections" msgstr "Conexións activas" -#: ../cli/src/connections.c:1027 +#: ../cli/src/connections.c:1085 #, c-format msgid "no active connection on device '%s'" msgstr "non hai conexións activas no dispositivo «%s»" -#: ../cli/src/connections.c:1035 +#: ../cli/src/connections.c:1093 #, c-format msgid "no active connection or device" msgstr "non hai conexións activas ou dispositivo" -#: ../cli/src/connections.c:1085 +#: ../cli/src/connections.c:1164 #, c-format msgid "device '%s' not compatible with connection '%s'" msgstr "o dispositivo «%s» non é compatíbel coa conexión «%s»" -#: ../cli/src/connections.c:1087 +#: ../cli/src/connections.c:1166 #, c-format msgid "no device found for connection '%s'" msgstr "non foi posíbel encontrar un dispositivo para a conexión «%s»" -#: ../cli/src/connections.c:1098 +#: ../cli/src/connections.c:1177 msgid "activating" msgstr "activando" -#: ../cli/src/connections.c:1100 +#: ../cli/src/connections.c:1179 msgid "activated" msgstr "activada" -#: ../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:1181 ../cli/src/devices.c:304 +#| msgid "activating" +msgid "deactivating" +msgstr "desactivando" + +#: ../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 "descoñecido" -#: ../cli/src/connections.c:1112 +#: ../cli/src/connections.c:1193 msgid "VPN connecting (prepare)" msgstr "Conectándose á VPN (preparando)" -#: ../cli/src/connections.c:1114 +#: ../cli/src/connections.c:1195 msgid "VPN connecting (need authentication)" msgstr "Conexión VPN (requírese autenticación)" -#: ../cli/src/connections.c:1116 +#: ../cli/src/connections.c:1197 msgid "VPN connecting" msgstr "Conexión VPN" -#: ../cli/src/connections.c:1118 +#: ../cli/src/connections.c:1199 msgid "VPN connecting (getting IP configuration)" msgstr "Conectándose á VPN (obtendo a configuración de IP)" -#: ../cli/src/connections.c:1120 +#: ../cli/src/connections.c:1201 msgid "VPN connected" msgstr "Conectado á VPN" -#: ../cli/src/connections.c:1122 +#: ../cli/src/connections.c:1203 msgid "VPN connection failed" msgstr "Produciuse un fallo ao conectarse á VPN" -#: ../cli/src/connections.c:1124 +#: ../cli/src/connections.c:1205 msgid "VPN disconnected" msgstr "Desconectado á VPN" -#: ../cli/src/connections.c:1135 +#: ../cli/src/connections.c:1216 msgid "unknown reason" msgstr "razón descoñecida" -#: ../cli/src/connections.c:1137 +#: ../cli/src/connections.c:1218 msgid "none" msgstr "ninguna" -#: ../cli/src/connections.c:1139 +#: ../cli/src/connections.c:1220 msgid "the user was disconnected" msgstr "o usuario desconectouse" -#: ../cli/src/connections.c:1141 +#: ../cli/src/connections.c:1222 msgid "the base network connection was interrupted" msgstr "a conexión de rede base foi interrompida" -#: ../cli/src/connections.c:1143 +#: ../cli/src/connections.c:1224 msgid "the VPN service stopped unexpectedly" msgstr "o servizo de VPN deteuse de forma inesperada" -#: ../cli/src/connections.c:1145 +#: ../cli/src/connections.c:1226 msgid "the VPN service returned invalid configuration" msgstr "o servizo de VPN devolveu unha configuración non válida" -#: ../cli/src/connections.c:1147 +#: ../cli/src/connections.c:1228 msgid "the connection attempt timed out" msgstr "o intento de conexión superou o tempo de espera máximo" -#: ../cli/src/connections.c:1149 +#: ../cli/src/connections.c:1230 msgid "the VPN service did not start in time" msgstr "o servizo de VPN non se iniciou a tempo" -#: ../cli/src/connections.c:1151 +#: ../cli/src/connections.c:1232 msgid "the VPN service failed to start" msgstr "o servizo de VPN fallou ao iniciarse" -#: ../cli/src/connections.c:1153 +#: ../cli/src/connections.c:1234 msgid "no valid VPN secrets" msgstr "non hai segredos VPN válidos" -#: ../cli/src/connections.c:1155 +#: ../cli/src/connections.c:1236 msgid "invalid VPN secrets" msgstr "segredos VPN non válidos" -#: ../cli/src/connections.c:1157 +#: ../cli/src/connections.c:1238 msgid "the connection was removed" msgstr "eliminouse a conexión" -#: ../cli/src/connections.c:1171 +#: ../cli/src/connections.c:1252 #, c-format msgid "state: %s\n" msgstr "estado: %s\n" -#: ../cli/src/connections.c:1174 ../cli/src/connections.c:1200 +#: ../cli/src/connections.c:1255 ../cli/src/connections.c:1281 #, c-format msgid "Connection activated\n" msgstr "Conexión activada\n" -#: ../cli/src/connections.c:1177 +#: ../cli/src/connections.c:1258 #, c-format msgid "Error: Connection activation failed." msgstr "Erro: A activación da conexión fallou." -#: ../cli/src/connections.c:1196 +#: ../cli/src/connections.c:1277 #, c-format msgid "state: %s (%d)\n" msgstr "estado: %s (%d)\n" -#: ../cli/src/connections.c:1206 +#: ../cli/src/connections.c:1287 #, c-format msgid "Error: Connection activation failed: %s." msgstr "Erro: A activación da conexión fallou: %s." -#: ../cli/src/connections.c:1223 ../cli/src/devices.c:909 +#: ../cli/src/connections.c:1304 ../cli/src/devices.c:1136 #, c-format msgid "Error: Timeout %d sec expired." msgstr "Erro: Alcanzouse o tempo de espera de %d segundos." -#: ../cli/src/connections.c:1266 +#: ../cli/src/connections.c:1317 #, c-format msgid "Error: Connection activation failed: %s" msgstr "Erro: Produciuse un fallo ao activar a conexión: %s" -#: ../cli/src/connections.c:1280 -#, c-format -msgid "Error: Obtaining active connection for '%s' failed." -msgstr "Erro: Produciuse un fallo ao obter a conexión activa para «%s»." - -#: ../cli/src/connections.c:1289 +#: ../cli/src/connections.c:1323 #, c-format msgid "Active connection state: %s\n" msgstr "Estado da conexión activa: %s\n" -#: ../cli/src/connections.c:1290 +#: ../cli/src/connections.c:1324 #, c-format msgid "Active connection path: %s\n" msgstr "Camiño da conexión activa: %s\n" -#: ../cli/src/connections.c:1344 ../cli/src/connections.c:1465 +#: ../cli/src/connections.c:1376 ../cli/src/connections.c:1517 #, c-format msgid "Error: Unknown connection: %s." msgstr "Erro: Conexión descoñecida: %s." -#: ../cli/src/connections.c:1379 ../cli/src/devices.c:980 +#: ../cli/src/connections.c:1422 ../cli/src/devices.c:1208 #, c-format msgid "Error: timeout value '%s' is not valid." msgstr "Erro: O valor do tempo de espera máximo «%s» non é válido." -#: ../cli/src/connections.c:1392 ../cli/src/connections.c:1482 +#: ../cli/src/connections.c:1435 ../cli/src/connections.c:1534 #, c-format msgid "Error: id or uuid has to be specified." msgstr "Erro: debe especificar o id ou o uuid." -#: ../cli/src/connections.c:1412 +#: ../cli/src/connections.c:1463 #, c-format msgid "Error: No suitable device found: %s." msgstr "Erro: Non se encontrou un dispositivo axeitado: %s." -#: ../cli/src/connections.c:1414 +#: ../cli/src/connections.c:1465 #, c-format msgid "Error: No suitable device found." msgstr "Erro: Non se encontrou o dispositivo axeitado." -#: ../cli/src/connections.c:1509 +#: ../cli/src/connections.c:1570 #, c-format msgid "Warning: Connection not active\n" msgstr "Aviso: A conexión non está activa.\n" -#: ../cli/src/connections.c:1566 +#: ../cli/src/connections.c:1608 #, c-format msgid "Error: 'con' command '%s' is not valid." msgstr "Erro: «con» a orde «%s» non é válida" -#: ../cli/src/connections.c:1602 +#: ../cli/src/connections.c:1673 #, c-format msgid "Error: could not connect to D-Bus." msgstr "Erro: non é posíbel conectarse a D-Bus." -#: ../cli/src/connections.c:1609 +#: ../cli/src/connections.c:1680 #, c-format msgid "Error: Could not get system settings." msgstr "Erro: Non é posíbel obter as opcións do sistema." -#: ../cli/src/connections.c:1617 -#, c-format -msgid "Error: Could not get user settings." -msgstr "Erro: Non é posíbel obter as opcións do usuario." - -#: ../cli/src/connections.c:1627 +#: ../cli/src/connections.c:1690 #, 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 "" -"Erro: Non é posíbel obter as conexións: os servizos de opcións non están " -"executándose." +"Erro: Non é posíbel obter as conexións: o servizo de configuracións non " +"están executándose." #. 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 "DISPOSITIVO" #. 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 "ESTADO" -#: ../cli/src/devices.c:72 +#: ../cli/src/devices.c:78 msgid "GENERAL" msgstr "XERAL" #. 0 -#: ../cli/src/devices.c:73 +#: ../cli/src/devices.c:79 msgid "CAPABILITIES" msgstr "CAPACIDADES" #. 1 -#: ../cli/src/devices.c:74 +#: ../cli/src/devices.c:80 msgid "WIFI-PROPERTIES" msgstr "PROPIEDADES-WIFI" #. 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 "PROPIEDADES-CONCABLES" #. 4 -#: ../cli/src/devices.c:77 +#: ../cli/src/devices.c:83 +#| msgid "WIFI-PROPERTIES" +msgid "WIMAX-PROPERTIES" +msgstr "PROPIEDADES-WIMAX" + +#. 5 +#. 0 +#: ../cli/src/devices.c:84 ../cli/src/devices.c:225 +#| msgid "DNS" +msgid "NSP" +msgstr "PSR" + +#. 6 +#: ../cli/src/devices.c:85 msgid "IP4-SETTINGS" msgstr "CONFIGURACIONS-IP4" -#. 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 "IP4-CONFIGURACIONS" -#. 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 "CONTROLADOR" #. 3 -#: ../cli/src/devices.c:92 +#: ../cli/src/devices.c:105 msgid "HWADDR" msgstr "ENDEREZO-HARDWARE" #. 0 -#: ../cli/src/devices.c:102 +#: ../cli/src/devices.c:115 msgid "CARRIER-DETECT" msgstr "DETECTAR-CARRIERV" #. 1 -#: ../cli/src/devices.c:103 +#: ../cli/src/devices.c:116 msgid "SPEED" msgstr "VELOCIDADE" #. 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-FREC" + +#. 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 "ENDEREZO" #. 1 -#: ../cli/src/devices.c:136 ../cli/src/devices.c:147 +#: ../cli/src/devices.c:164 ../cli/src/devices.c:175 msgid "PREFIX" msgstr "PREFIXO" #. 2 -#: ../cli/src/devices.c:137 ../cli/src/devices.c:148 +#: ../cli/src/devices.c:165 ../cli/src/devices.c:176 msgid "GATEWAY" msgstr "PASARELA" #. 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 "MODO" #. 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 "TAXA" #. 5 -#: ../cli/src/devices.c:180 +#. 1 +#: ../cli/src/devices.c:208 ../cli/src/devices.c:226 msgid "SIGNAL" msgstr "SINAL" #. 6 -#: ../cli/src/devices.c:181 +#: ../cli/src/devices.c:209 msgid "SECURITY" msgstr "SEGURIDADE" #. 7 -#: ../cli/src/devices.c:182 +#: ../cli/src/devices.c:210 msgid "WPA-FLAGS" msgstr "OPCIONS-WPA" #. 8 -#: ../cli/src/devices.c:183 +#: ../cli/src/devices.c:211 msgid "RSN-FLAGS" msgstr "OPCIONS-RSN" #. 10 -#: ../cli/src/devices.c:185 +#. 4 +#: ../cli/src/devices.c:213 ../cli/src/devices.c:229 msgid "ACTIVE" msgstr "ACTIVA" -#: ../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 "" "Uso: nmcli dev { ORDE | help }\n" "\n" -" ORDE := { status | list | disconnect | wifi }\n" +" COMANDO := { status | list | disconnect | wifi }\n" "\n" " status\n" -" list [iface ]\n" -" disconnect iface [--nowait] [--timeout ]\n" -" wifi [list [iface ] [hwaddr ]]\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 "non xestionada" -#: ../cli/src/devices.c:230 +#: ../cli/src/devices.c:286 msgid "unavailable" msgstr "non dispoñíbel" -#: ../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 "desconectado" -#: ../cli/src/devices.c:234 +#: ../cli/src/devices.c:290 msgid "connecting (prepare)" msgstr "conectando (preparando)" -#: ../cli/src/devices.c:236 +#: ../cli/src/devices.c:292 msgid "connecting (configuring)" msgstr "conectando (configurando)" -#: ../cli/src/devices.c:238 +#: ../cli/src/devices.c:294 msgid "connecting (need authentication)" msgstr "conectando (precisa autenticación)" -#: ../cli/src/devices.c:240 +#: ../cli/src/devices.c:296 msgid "connecting (getting IP configuration)" msgstr "conectando (obtendo a configuración 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 "conectando (comprobando conectividade IP)" + +#: ../cli/src/devices.c:300 +#| msgid "connecting (getting IP configuration)" +msgid "connecting (starting secondary connections)" +msgstr "conectando (iniciando conexións secundarias)" + +#: ../cli/src/devices.c:302 ../cli/src/network-manager.c:111 msgid "connected" msgstr "conectado" -#: ../cli/src/devices.c:244 +#: ../cli/src/devices.c:306 msgid "connection failed" msgstr "produciuse un fallo na conexión" -#: ../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 "Descoñecido" -#: ../cli/src/devices.c:299 +#: ../cli/src/devices.c:374 msgid "(none)" msgstr "(ningún)" -#: ../cli/src/devices.c:324 +#: ../cli/src/devices.c:399 #, c-format msgid "%s: error converting IP4 address 0x%X" msgstr "%s: produciuse un erro ao converter o enderezo 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 "Cifrado: " -#: ../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 "Empresa " -#: ../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 "Infraestrutura" -#: ../cli/src/devices.c:486 +#: ../cli/src/devices.c:536 +msgid "Home" +msgstr "Casa" + +#: ../cli/src/devices.c:539 +msgid "Partner" +msgstr "Asociado" + +#: ../cli/src/devices.c:542 +msgid "Roaming" +msgstr "Roaming" + +#: ../cli/src/devices.c:612 #, c-format msgid "Error: 'dev list': %s" msgstr "Erro: «dev list»: %s" -#: ../cli/src/devices.c:488 +#: ../cli/src/devices.c:614 #, c-format msgid "Error: 'dev list': %s; allowed fields: %s" msgstr "Erro: «dev list»: %s campos permitidos: %s" -#: ../cli/src/devices.c:497 +#: ../cli/src/devices.c:623 msgid "Device details" msgstr "Detalles do dispositivo" -#: ../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 "(descoñecido)" -#: ../cli/src/devices.c:528 +#: ../cli/src/devices.c:658 msgid "unknown)" msgstr "descoñecido)" -#: ../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 "activado" -#: ../cli/src/devices.c:627 +#: ../cli/src/devices.c:757 msgid "off" msgstr "desactivado" -#: ../cli/src/devices.c:808 +#: ../cli/src/devices.c:1004 #, c-format msgid "Error: 'dev status': %s" msgstr "Erro: «dev status»: %s" -#: ../cli/src/devices.c:810 +#: ../cli/src/devices.c:1006 #, c-format msgid "Error: 'dev status': %s; allowed fields: %s" msgstr "Erro: «dev status»: %s campos permitidos: %s" -#: ../cli/src/devices.c:817 +#: ../cli/src/devices.c:1029 msgid "Status of devices" msgstr "Estado dos dispositivos" -#: ../cli/src/devices.c:845 +#: ../cli/src/devices.c:1060 #, c-format msgid "Error: '%s' argument is missing." msgstr "Erro: falta o argumento «%s»." -#: ../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 "Erro: Non é posíbel encontrar o dispositivo %s." -#: ../cli/src/devices.c:897 +#: ../cli/src/devices.c:1124 #, c-format msgid "Success: Device '%s' successfully disconnected." msgstr "Éxito: O dispositivo «%s» desconectouse correctamente." -#: ../cli/src/devices.c:922 +#: ../cli/src/devices.c:1149 #, c-format msgid "Error: Device '%s' (%s) disconnecting failed: %s" msgstr "Erro: Fallou a desconexión do dispositivo «%s» (%s): %s" -#: ../cli/src/devices.c:930 +#: ../cli/src/devices.c:1157 #, c-format msgid "Device state: %d (%s)\n" msgstr "Estado do dispositivo: %d (%s)\n" -#: ../cli/src/devices.c:994 +#: ../cli/src/devices.c:1222 #, c-format msgid "Error: iface has to be specified." msgstr "Erro: non se especificou a interface." -#: ../cli/src/devices.c:1112 +#: ../cli/src/devices.c:1347 #, c-format msgid "Error: 'dev wifi': %s" msgstr "Erro: «dev wifi»: %s" -#: ../cli/src/devices.c:1114 +#: ../cli/src/devices.c:1349 #, c-format msgid "Error: 'dev wifi': %s; allowed fields: %s" msgstr "Erro: «dev wiki»: %s; campos permitidos: %s" -#: ../cli/src/devices.c:1121 +#: ../cli/src/devices.c:1372 msgid "WiFi scan list" msgstr "Lista de escaneo 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 "Erro: Non se encontrou o punto de acces co enderezo hardware «%s»." -#: ../cli/src/devices.c:1173 +#: ../cli/src/devices.c:1426 #, c-format msgid "Error: Device '%s' is not a WiFi device." msgstr "Erro: O dispositivo «%s» non é un dispositivo WiFi." -#: ../cli/src/devices.c:1237 +#: ../cli/src/devices.c:1490 #, c-format msgid "Error: 'dev wifi' command '%s' is not valid." msgstr "Erro: «dev wifi» a orde «%s» non é válida." -#: ../cli/src/devices.c:1284 +#: ../cli/src/devices.c:1566 +#, c-format +#| msgid "Error: 'dev wifi': %s" +msgid "Error: 'dev wimax': %s" +msgstr "Erro: «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 "Erro: «dev wimax»: %s; campos permitidos: %s" + +#: ../cli/src/devices.c:1591 +msgid "WiMAX NSP list" +msgstr "Lista PSR WiMAX" + +#: ../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 encontrou o PSR co nome «%s»." + +#: ../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: o dispositivo «%s» non é un dispositivo 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 "Error: orde «dev wimax» «%s» non válida." + +#: ../cli/src/devices.c:1747 #, c-format msgid "Error: 'dev' command '%s' is not valid." msgstr "Erro: «dev» a orde «%s» non é válida." -#: ../cli/src/network-manager.c:35 +#: ../cli/src/network-manager.c:37 msgid "RUNNING" msgstr "EXECUTANDO" -#. 1 -#: ../cli/src/network-manager.c:37 +#. 0 +#: ../cli/src/network-manager.c:38 +msgid "VERSION" +msgstr "VERSIÓN" + +#. 2 +#: ../cli/src/network-manager.c:40 +msgid "NET-ENABLED" +msgstr "NET-ACTIVADA" + +#. 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 "HARDWARE-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" +#| "\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 "" -"Usage: nmcli nm { ORDE | help }\n" +"Uso: nmcli nm { ORDE | help }\n" +"\n" +" COMANDO := { status | enable | sleep | wifi | wwan | wimax }\n" "\n" -" ORDE := { status | sleep | wakeup | wifi | wwan }\n" +" COMANDO := { 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" -#: ../cli/src/network-manager.c:83 +#: ../cli/src/network-manager.c:103 msgid "asleep" msgstr "dormido" -#: ../cli/src/network-manager.c:85 +#: ../cli/src/network-manager.c:105 msgid "connecting" msgstr "conectando" -#: ../cli/src/network-manager.c:125 +#: ../cli/src/network-manager.c:107 +msgid "connected (local only)" +msgstr "conectado (só local)" + +#: ../cli/src/network-manager.c:109 +#| msgid "connected" +msgid "connected (site only)" +msgstr "conectado (só o sitio)" + +#: ../cli/src/network-manager.c:113 +#| msgid "connecting" +msgid "disconnecting" +msgstr "desconectando" + +#: ../cli/src/network-manager.c:153 #, c-format msgid "Error: 'nm status': %s" msgstr "Erro:«'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 "Erro: 'nm status': %s; campos permitidos: %s" -#: ../cli/src/network-manager.c:134 -msgid "NetworkManager status" -msgstr "Estado de 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 "activado" -#: ../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 "desactivado" -#: ../cli/src/network-manager.c:148 +#: ../cli/src/network-manager.c:188 +msgid "NetworkManager status" +msgstr "Estado de NetworkManager" + +#. Print header +#: ../cli/src/network-manager.c:191 msgid "running" msgstr "en execución" -#: ../cli/src/network-manager.c:148 +#: ../cli/src/network-manager.c:191 msgid "not running" msgstr "non está a executarse" -#: ../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 "Erro: Non se puido conectar ao bus do sistema: %s" + +#: ../cli/src/network-manager.c:233 +#, c-format +msgid "Error: Couldn't create D-Bus object proxy." +msgstr "Erro: Non se puido crear o proxy do obxecto D-Bus." + +#: ../cli/src/network-manager.c:239 +#, c-format +msgid "Error in sleep: %s" +msgstr "Erro ao durmir: %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 "Erro: '--fields' valor '%s' non é válido aquí; campos permitidos: %s" -#: ../cli/src/network-manager.c:209 +#: ../cli/src/network-manager.c:291 +msgid "Networking enabled" +msgstr "Rede activada" + +#: ../cli/src/network-manager.c:307 +#, c-format +msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'." +msgstr "" +"Erro: o parámetro 'activar' é incorrecto: '%s'; use 'verdadeiro' ou 'falso'." + +#: ../cli/src/network-manager.c:317 +#, c-format +msgid "Error: Sleeping status is not exported by NetworkManager." +msgstr "Erro: O status dormente non foi exportado polo NetworkManager." + +#: ../cli/src/network-manager.c:325 +#, c-format +msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'." +msgstr "" +"Erro: O parámetro 'durmir' é incorrecto: '%s'; use 'verdadeiro' ou 'falso'." + +#: ../cli/src/network-manager.c:346 msgid "WiFi enabled" msgstr "WiFi activada" -#: ../cli/src/network-manager.c:220 +#: ../cli/src/network-manager.c:362 #, c-format msgid "Error: invalid 'wifi' parameter: '%s'." msgstr "Erro: parámetro «wifi» non válido: «%s»." -#: ../cli/src/network-manager.c:241 +#: ../cli/src/network-manager.c:384 msgid "WWAN enabled" msgstr "WWAN activada" -#: ../cli/src/network-manager.c:252 +#: ../cli/src/network-manager.c:400 #, c-format msgid "Error: invalid 'wwan' parameter: '%s'." msgstr "Erro: parámetro «wwan» non válido: «%s»." -#: ../cli/src/network-manager.c:263 +#: ../cli/src/network-manager.c:423 +#| msgid "WiFi enabled" +msgid "WiMAX enabled" +msgstr "WiMAX activado" + +#: ../cli/src/network-manager.c:439 +#, c-format +#| msgid "Error: invalid 'wifi' parameter: '%s'." +msgid "Error: invalid 'wimax' parameter: '%s'." +msgstr "Erro: parámetro «wimax» non válido: «%s»." + +#: ../cli/src/network-manager.c:452 #, c-format msgid "Error: 'nm' command '%s' is not valid." msgstr "Erro: «nm» a orde «%s» non é válida." -#: ../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" @@ -986,6 +1252,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" @@ -995,598 +1263,647 @@ msgid "" " dev devices managed by NetworkManager\n" "\n" msgstr "" -"Uso: %s [OPCIÓNS] OBXECTO { ORDE | ayuda }\n" +"Uso: %s [OPCIÓNS] OBXECTO { ORDE | help }\n" "\n" "OPCIÓNS\n" -" -t[erse] saída terse \n" -" -p[retty] saída pretty\n" -" -v[ersion] mostrar a versión do programa\n" -" -h[elp] imprimir esta axuda\n" +" -t[erse] saída terse \n" +" -p[retty] saída pretty\n" +" -m[ode] tabular|multiline saída mode\n" +" -f[ields] |all|common especificar os campos que " +"mostrar\n" +" -e[scape] yes|no escapar os separadores de " +"columnas nos valores\n" +" -n[ocheck] non comprobar versións de nmcli " +"e NetworkManager\n" +" -v[ersion] mostrar a versión do programa\n" +" -h[elp] mostrar esta axuda\n" "\n" "OBXECTO\n" -" nm estado do NetworkManager\n" -" con conexións do NetworkManager\n" -" dev dispositivos administrados por NetworkManager\n" +" nm estado de NetworkManager\n" +" con conexións de NetworkManager\n" +" dev dispositivos xestionados por 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 "Erro: O obxecto «%s» é descoñecido, tente a executar «nmcli help»." -#: ../cli/src/nmcli.c:143 +#: ../cli/src/nmcli.c:139 #, c-format msgid "Error: Option '--terse' is specified the second time." msgstr "Erro: A opción «--terse» especifícase en segundo lugar." -#: ../cli/src/nmcli.c:148 +#: ../cli/src/nmcli.c:144 #, c-format msgid "Error: Option '--terse' is mutually exclusive with '--pretty'." msgstr "Erro: A opción «--terse» é mutuamente exclusiva con «--pretty»." -#: ../cli/src/nmcli.c:156 +#: ../cli/src/nmcli.c:152 #, c-format msgid "Error: Option '--pretty' is specified the second time." msgstr "Erro: A opción «--pretty» especifícase en segundo lugar." -#: ../cli/src/nmcli.c:161 +#: ../cli/src/nmcli.c:157 #, c-format msgid "Error: Option '--pretty' is mutually exclusive with '--terse'." msgstr "Erro: A opción «--pretty» é mutuamente exclusiva con «--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 "Erro: falta o argumento para a opción «%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 "Erro: «%s» non é un argumento válido para a opción «%s»." -#: ../cli/src/nmcli.c:203 +#: ../cli/src/nmcli.c:199 #, c-format msgid "Error: fields for '%s' options are missing." msgstr "Erro: faltan os campos para «%s»." -#: ../cli/src/nmcli.c:209 +#: ../cli/src/nmcli.c:207 #, c-format msgid "nmcli tool, version %s\n" msgstr "ferramenta nmcli, versión %s\n" -#: ../cli/src/nmcli.c:215 +#: ../cli/src/nmcli.c:213 #, c-format msgid "Error: Option '%s' is unknown, try 'nmcli -help'." msgstr "Erro: A opción «%s» é descoñecida, tente «nmcli --help»" -#: ../cli/src/nmcli.c:234 +#: ../cli/src/nmcli.c:232 #, c-format msgid "Caught signal %d, shutting down..." msgstr "Sinal %d capturada, apagando..." -#: ../cli/src/nmcli.c:259 -#, c-format -msgid "Error: Could not connect to NetworkManager." -msgstr "Erro: non foi posíbel conectarse a NetworkManager" +#: ../cli/src/nmcli.c:257 +msgid "Error: Could not create NMClient object." +msgstr "Erro: non é posíbel crear o obxecto NMClient." -#: ../cli/src/nmcli.c:275 +#: ../cli/src/nmcli.c:273 msgid "Success" msgstr "Éxito" -#: ../cli/src/settings.c:411 +#: ../cli/src/settings.c:423 #, c-format msgid "%d (hex-ascii-key)" msgstr "%d (hex-ascii-key)" -#: ../cli/src/settings.c:413 +#: ../cli/src/settings.c:425 #, c-format msgid "%d (104/128-bit passphrase)" msgstr "%d (frase de paso 104/128-bit)" -#: ../cli/src/settings.c:416 +#: ../cli/src/settings.c:428 #, c-format msgid "%d (unknown)" msgstr "%d (descoñecido)" -#: ../cli/src/settings.c:442 +#: ../cli/src/settings.c:454 msgid "0 (unknown)" msgstr "0 (descoñecido)" -#: ../cli/src/settings.c:448 +#: ../cli/src/settings.c:460 msgid "any, " msgstr "calquera, " -#: ../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 "automático" -#: ../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 "non definido" -#: ../cli/src/utils.c:124 +#: ../cli/src/utils.c:128 #, c-format msgid "field '%s' has to be alone" msgstr "o campo «%s» ten que estar só" -#: ../cli/src/utils.c:127 +#: ../cli/src/utils.c:131 #, c-format msgid "invalid field '%s'" msgstr "campo «%s» non válido" -#: ../cli/src/utils.c:146 +#: ../cli/src/utils.c:150 #, c-format msgid "Option '--terse' requires specifying '--fields'" msgstr "A opcións «--terse» require que especifique «--fields»" -#: ../cli/src/utils.c:150 +#: ../cli/src/utils.c:154 #, c-format -msgid "" -"Option '--terse' requires specific '--fields' option values , not '%s'" +msgid "Option '--terse' requires specific '--fields' option values , not '%s'" msgstr "" "A opción «--terse» require que especifique os valores da opción «--fields», " "non «%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 "" +"Erro: non é posíbel crear un proxy de obxecto D-Bus para org.freedesktop." +"DBus." + +#: ../cli/src/utils.c:341 +#, c-format +msgid "Error: NameHasOwner request failed: %s" +msgstr "Erro: produciuse un fallo na resposta «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 "" +"Advertencia: as versións de nmcli (%s) e de NetworkManager (%s) non " +"coinciden. Use «--nocheck» para evitar o aviso.\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 "" +"Erro: as versións de nmcli (%s) e de NetworkManager (%s) non coinciden. " +"Force a execución usando «--nocheck», pero os resultados son impredecíbeis." + +#: ../libnm-util/crypto.c:133 #, c-format msgid "PEM key file had no end tag '%s'." msgstr "O ficheiro de chave PEM non ten a etiqueta de final «%s»." -#: ../libnm-util/crypto.c:130 +#: ../libnm-util/crypto.c:146 #, c-format msgid "Doesn't look like a PEM private key file." msgstr "Non parece un ficheiro de chave privada PEM." -#: ../libnm-util/crypto.c:138 +#: ../libnm-util/crypto.c:154 #, c-format msgid "Not enough memory to store PEM file data." msgstr "Non hai memoria abondo para almacenar o ficheiro PEM." -#: ../libnm-util/crypto.c:154 +#: ../libnm-util/crypto.c:170 #, c-format msgid "Malformed PEM file: Proc-Type was not first tag." msgstr "Ficheiro PEM malformado: Proc-Type non é a primeira etiqueta." -#: ../libnm-util/crypto.c:162 +#: ../libnm-util/crypto.c:178 #, c-format msgid "Malformed PEM file: unknown Proc-Type tag '%s'." -msgstr "Ficheiro PEM malformado: a etiqueta Proc-Type «%s »é descoñecida." +msgstr "O ficheiro PEM é erróneo: a etiqueta Proc-Type «%s» é descoñecida." -#: ../libnm-util/crypto.c:172 +#: ../libnm-util/crypto.c:188 #, c-format msgid "Malformed PEM file: DEK-Info was not the second tag." msgstr "Ficheiro PEM malformado: Proc-Type non é a segunda etiqueta." -#: ../libnm-util/crypto.c:183 +#: ../libnm-util/crypto.c:199 #, c-format msgid "Malformed PEM file: no IV found in DEK-Info tag." -msgstr "" -"Ficheiro PEM malformado: non se atopou ningún IV na etiqueta DEK-Info" +msgstr "Ficheiro PEM malformado: non se atopou ningún IV na etiqueta 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 "" -"Ficheiro PEM malformado: formato de IV incorrecto na etiqueta DEK-Info" +msgstr "Ficheiro PEM malformado: formato de IV incorrecto na etiqueta DEK-Info" -#: ../libnm-util/crypto.c:203 +#: ../libnm-util/crypto.c:219 #, c-format msgid "Malformed PEM file: unknown private key cipher '%s'." -msgstr "" -"Ficheiro PEM malformado: o cifrado da chave privada «%s» é descoñecido" +msgstr "Ficheiro PEM malformado: o cifrado da chave privada «%s» é descoñecido" -#: ../libnm-util/crypto.c:222 +#: ../libnm-util/crypto.c:238 #, c-format msgid "Could not decode private key." msgstr "Non puido ser decodificada a chave privada." -#: ../libnm-util/crypto.c:267 -#, c-format -msgid "PEM certificate '%s' had no end tag '%s'." -msgstr "O certificado PEM «%s» non ten unha etiqueta de final «%s»." +#: ../libnm-util/crypto.c:284 +msgid "Failed to find expected PKCS#8 start tag." +msgstr "Produciuse un fallo ao buscar a etiqueta de inicio «%s» de PKCS#8." -#: ../libnm-util/crypto.c:277 +#: ../libnm-util/crypto.c:292 #, c-format -msgid "Failed to decode certificate." -msgstr "Fallou ao decodificar o certificado" +msgid "Failed to find expected PKCS#8 end tag '%s'." +msgstr "" +"Produciuse un fallo ao buscar a etiqueta de finalización «%s» de PKCS#8." -#: ../libnm-util/crypto.c:286 +#: ../libnm-util/crypto.c:312 +#| msgid "Not enough memory to store file data." +msgid "Not enough memory to store private key data." +msgstr "No hai memoria dabondo para almacenar os datos da chave privada." + +#: ../libnm-util/crypto.c:317 +#| msgid "Failed to decrypt the private key." +msgid "Failed to decode PKCS#8 private key." +msgstr "Produciuse un erro ao descifrar a chave privada PKCS#8." + +#: ../libnm-util/crypto.c:339 ../libnm-util/crypto.c:625 #, c-format msgid "Not enough memory to store certificate data." msgstr "Non hai memoria abondo para almacenar os datos do certificado" -#: ../libnm-util/crypto.c:294 -#, c-format -msgid "Not enough memory to store file data." -msgstr "Non hai memoriaabondo para almacenar os datos do ficheiro" - -#: ../libnm-util/crypto.c:324 +#: ../libnm-util/crypto.c:365 #, c-format msgid "IV must be an even number of bytes in length." msgstr "IV debe ter un número par de bytes en lonxitude." -#: ../libnm-util/crypto.c:333 +#: ../libnm-util/crypto.c:374 #, c-format msgid "Not enough memory to store the IV." msgstr "Non hai memoria abondo para almacenar o IV." -#: ../libnm-util/crypto.c:344 +#: ../libnm-util/crypto.c:385 #, c-format msgid "IV contains non-hexadecimal digits." msgstr "IV contén díxitos non hexadecimais." -#: ../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 "O cifrado «%s» da chave privada é descoñecido." -#: ../libnm-util/crypto.c:391 +#: ../libnm-util/crypto.c:432 #, c-format msgid "Not enough memory to decrypt private key." msgstr "Non hai memoria abondo para descifrar esta chave privada." -#: ../libnm-util/crypto.c:511 +#: ../libnm-util/crypto.c:497 +#, c-format +msgid "Not enough memory to store decrypted private key." +msgstr "Non hai memoria abondo para almacenar a chave privada descifrada." + +#: ../libnm-util/crypto.c:542 #, c-format msgid "Unable to determine private key type." msgstr "Non foi posíbel determinar o tipo de chave privada" -#: ../libnm-util/crypto.c:530 +#: ../libnm-util/crypto.c:597 #, c-format -msgid "Not enough memory to store decrypted private key." -msgstr "Non hai memoria abondo para almacenar a chave privada descifrada." +#| msgid "PEM certificate '%s' had no end tag '%s'." +msgid "PEM certificate had no start tag '%s'." +msgstr "O certificado PEM non ten etiqueta de inicio «%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 "O certificado PEM non ten etiqueta de finalización «%s»." + +#: ../libnm-util/crypto.c:630 +#, c-format +msgid "Failed to decode certificate." +msgstr "Fallou ao decodificar o certificado" -#: ../libnm-util/crypto_gnutls.c:49 +#: ../libnm-util/crypto_gnutls.c:50 msgid "Failed to initialize the crypto engine." msgstr "Produciuse un erro ao iniciar o motor de cifrado" -#: ../libnm-util/crypto_gnutls.c:93 +#: ../libnm-util/crypto_gnutls.c:92 #, c-format msgid "Failed to initialize the MD5 engine: %s / %s." msgstr "Produciuse un erro ao iniciar a arquitectura 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 "Lonxitude de IV incorrecta (debe ser polo menos %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 "Non hai memoria abondo para o búfer da chave 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 "" "Produciuse un erro ao inicializar o contexto de cifrado para o 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 "" "Produciuse un erro ao establecer a chave simétrica para o 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 "Produciuse un erro ao establecer IV para o 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 "Produciuse un erro ao descifrar a chave 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 "" "Produciuse un fallo ao descifrar a chave privada: lonxitude de desprazamento " "non esperada." -#: ../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 "Produciuse un erro ao descifrar a chave 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 "Non foi posíbel asignar a memoria para cifrar." -#: ../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 "" "Produciuse un erro ao inicializar o contexto da chave de cifrado: %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 "" "Produciuse un erro ao establecer a chave simétrica para o 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 "Produciuse un erro ao establecer IV para o 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 "Produciuse un erro ao cifrar os datos: %s / %s." -#: ../libnm-util/crypto_gnutls.c:362 +#: ../libnm-util/crypto_gnutls.c:361 #, c-format msgid "Error initializing certificate data: %s" msgstr "Produciuse un erro ao iniciar a certificación dos datos: %s" -#: ../libnm-util/crypto_gnutls.c:384 +#: ../libnm-util/crypto_gnutls.c:383 #, c-format msgid "Couldn't decode certificate: %s" msgstr "Non se puido decodificar o 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 "Non foi posíbel iniciar o 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 "Non foi posíbel decodificar o ficheiro 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 "Non foi posíbel verificar o ficheiro 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 "Non foi posíbel iniciar o 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 "Non foi posíbel decodificar o ficheiro PKCS#8: %s" + #: ../libnm-util/crypto_nss.c:56 #, c-format msgid "Failed to initialize the crypto engine: %d." msgstr "Produciuse un erro ao iniciar o 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 "Produciuse un erro ao iniciar o 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 "Lonxitude de IV incorrecta (debe ser polo menos %d)." -#: ../libnm-util/crypto_nss.c:196 +#: ../libnm-util/crypto_nss.c:192 #, c-format msgid "Failed to initialize the decryption cipher slot." msgstr "Produciuse un erro ao iniciar a rañura de cifrado para o descifrado" -#: ../libnm-util/crypto_nss.c:206 +#: ../libnm-util/crypto_nss.c:202 #, c-format msgid "Failed to set symmetric key for decryption." -msgstr "" -"Produciuse un erro ao establecer a chave simétrica para o descifrado." +msgstr "Produciuse un erro ao establecer a chave simétrica para o descifrado." -#: ../libnm-util/crypto_nss.c:216 +#: ../libnm-util/crypto_nss.c:212 #, c-format msgid "Failed to set IV for decryption." msgstr "Produciuse un erro ao establecer IV para o descifrado." -#: ../libnm-util/crypto_nss.c:224 +#: ../libnm-util/crypto_nss.c:220 #, c-format msgid "Failed to initialize the decryption context." msgstr "Produciuse un erro ao iniciar o 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 "Produciuse un erro ao descifrar a chave 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 "" "Produciuse un erro ao descifrar a chave privada: os datos descifrados son " "moi 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 "Produciuse un erro ao finalizar o descifrado da chave 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 "Produciuse un erro ao inicializar a rañura da cifra 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 "Produciuse un erro ao establecer a chave simétrica para o cifrado." -#: ../libnm-util/crypto_nss.c:380 +#: ../libnm-util/crypto_nss.c:376 #, c-format msgid "Failed to set IV for encryption." msgstr "Produciuse un erro ao establecer IV para o cifrado." -#: ../libnm-util/crypto_nss.c:388 +#: ../libnm-util/crypto_nss.c:384 #, c-format msgid "Failed to initialize the encryption context." msgstr "Produciuse un erro ao inicializar o contexto de cifrado." -#: ../libnm-util/crypto_nss.c:396 +#: ../libnm-util/crypto_nss.c:392 #, c-format msgid "Failed to encrypt: %d." msgstr "Produciuse un erro ao cifrar: %d." -#: ../libnm-util/crypto_nss.c:404 +#: ../libnm-util/crypto_nss.c:400 #, c-format msgid "Unexpected amount of data after encrypting." msgstr "Tamaño non agardado de datos despois de cifrar." -#: ../libnm-util/crypto_nss.c:447 +#: ../libnm-util/crypto_nss.c:443 #, c-format msgid "Couldn't decode certificate: %d" msgstr "Non foi posíbel decodificar o 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 "Non foi posíbel converter a chave 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 "Non foi posíbel iniciar o 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 "Non fo posíbel decodificar o ficheiro 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 "Non foi posíbel verficar o ficheiro PKCS#12: %d" -#: ../libnm-util/crypto_nss.c:557 +#: ../libnm-util/crypto_nss.c:568 msgid "Could not generate random data." msgstr "Non foi posíbel xerar datos aleatorios." -#: ../libnm-util/nm-utils.c:1975 +#: ../libnm-util/nm-utils.c:2000 #, c-format msgid "Not enough memory to make encryption key." msgstr "Sen memoria abondo para crear a chave de cifrado." -#: ../libnm-util/nm-utils.c:2085 +#: ../libnm-util/nm-utils.c:2110 msgid "Could not allocate memory for PEM file creation." msgstr "Non foi posíbel asignar memoria para a creación do ficheiro 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 "Non foi posíbel asignar memoria para escribir IV no ficheiro 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 "" "Non foi posíbel asignar memoria para escribir a chave cifrada no ficheiro " "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 "Non foi posíbel asignar memoria para os datos do ficheiro PEM." -#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1 -msgid "Connection sharing via a protected WiFi network" -msgstr "Conexión compartida a través dunha rede WiFi protexida" - -#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2 -msgid "Connection sharing via an open WiFi network" -msgstr "Conexión compartida a través dunha rede WiFi aberta" - -#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3 -msgid "Modify persistent system hostname" -msgstr "Modificar o nome persistente do anfitrión do sistema" - -#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4 -msgid "Modify system connections" -msgstr "Modificar as conexións do sistema" - -#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5 -msgid "System policy prevents modification of system settings" -msgstr "" -"A política do sistema impide a modificación da configuración do sistema" - -#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6 -msgid "System policy prevents modification of the persistent system hostname" -msgstr "" -"A política do sistema impide a modificación do nome do anfitrión do sistema" - -#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7 -msgid "" -"System policy prevents sharing connections via a protected WiFi network" -msgstr "" -"A política do sistema impide compartir conexións a través dunha rede WiFi " -"protexida" - -#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8 -msgid "System policy prevents sharing connections via an open WiFi network" -msgstr "" -"A política do sistema impide compartir conexións a través dunha rede WiFi " -"aberta" - #: ../policy/org.freedesktop.NetworkManager.policy.in.h:1 msgid "Allow control of network connections" msgstr "Permitir o control das conexións de rede" #: ../policy/org.freedesktop.NetworkManager.policy.in.h:2 -msgid "Allow use of user-specific connections" -msgstr "Permitir o uso de conexións específicas do usuario" +msgid "Connection sharing via a protected WiFi network" +msgstr "Conexión compartida a través dunha rede WiFi protexida" #: ../policy/org.freedesktop.NetworkManager.policy.in.h:3 +msgid "Connection sharing via an open WiFi network" +msgstr "Conexión compartida a través dunha rede WiFi aberta" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4 msgid "Enable or disable WiFi devices" msgstr "Activar ou desactivar os dispositivos WiFi" -#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4 +#: ../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 ou desactivar os dispositivos de banda larga móbil WIMAX" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6 msgid "Enable or disable mobile broadband devices" msgstr "Activar ou desactivar os dispositivos de banda ancha móbiles" -#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5 +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7 msgid "Enable or disable system networking" msgstr "Activar ou desactivar a rede do sistema" -#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6 +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8 +#| msgid "Modify system connections" +msgid "Modify network connections for all users" +msgstr "Modificar as conexións de rede para tódolos usuarios" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9 +msgid "Modify persistent system hostname" +msgstr "Modificar o nome persistente do anfitrión do sistema" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10 +#| msgid "Allow control of network connections" +msgid "Modify personal network connections" +msgstr "Modificar as conexións de rede persoais" + +#: ../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)" @@ -1594,101 +1911,87 @@ msgstr "" "Poñer o NetworkManager en suspensión e espertalo (só debe ser usado polo " "sistema de xestión de rede)" -#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7 +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12 msgid "System policy prevents control of network connections" msgstr "A normativa do sistema evita o control das conexións de rede" -#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8 +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:13 msgid "System policy prevents enabling or disabling WiFi devices" msgstr "" "A normativa do sistema evita a activación e desactivación dos dispositivos " "WiFi" -#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9 +#: ../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 "" +"A normativa do sistema evita activar ou desactivar os dispositivos de banda " +"larga móbil WIMAX." + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:15 msgid "System policy prevents enabling or disabling mobile broadband devices" msgstr "" "A normativa do sistema evita a activación ou desactivación dos dispositivos " "de banda ancha." -#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10 +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:16 msgid "System policy prevents enabling or disabling system networking" msgstr "" "A normativa do sistema evita a activación ou desactivación da rede do sistema" -#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11 -msgid "" -"System policy prevents putting NetworkManager to sleep or waking it up" +#: ../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 "" -"A normativa do sistema evita poñer o NetworkManager en suspensión ou " -"espertalo" +"A política do sistema impide a modificación da configuración da rede para " +"tódolos usuarios" -#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12 -msgid "System policy prevents use of user-specific connections" +#: ../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 "" -"A normativa do sistema evita o uso de conexións específicas do usuario" +"A política do sistema impide a modificación da configuración persoal da rede" -#: ../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 "produciuse un erro procesando a mensaxe netlink: %s" - -#: ../src/nm-netlink-monitor.c:214 -msgid "error occurred while waiting for data on socket" -msgstr "producouse un erro agardando por datos nun socket" - -#: ../src/nm-netlink-monitor.c:254 -#, c-format -msgid "unable to connect to netlink for monitoring link status: %s" +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:19 +msgid "System policy prevents modification of the persistent system hostname" msgstr "" -"non é posíbel conectar ao netlink para monitorizar o estado da lingazón: %s" +"A política do sistema impide a modificación do nome do anfitrión do sistema" -#: ../src/nm-netlink-monitor.c:265 -#, c-format -msgid "unable to enable netlink handle credential passing: %s" +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:20 +msgid "System policy prevents putting NetworkManager to sleep or waking it up" msgstr "" -"non é posíbel activar a ligazón de rede para xestionar o paso de " -"creadenciais: %s" +"A normativa do sistema evita poñer o NetworkManager en suspensión ou " +"espertalo" -#: ../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:21 +msgid "System policy prevents sharing connections via a protected WiFi network" msgstr "" -"non é posíbel crear o manexador netlink para monitorizar o estado da " -"ligazón: %s" +"A política do sistema impide compartir conexións a través dunha rede WiFi " +"protexida" -#: ../src/nm-netlink-monitor.c:376 -#, c-format -msgid "unable to allocate netlink link cache for monitoring link status: %s" +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:22 +msgid "System policy prevents sharing connections via an open WiFi network" msgstr "" -"non é posíbel asignar a ligazón á caché netlink para monitorizar o estado da " -"ligazón: %s" - -#: ../src/nm-netlink-monitor.c:502 -#, c-format -msgid "unable to join netlink group: %s" -msgstr "non é posíbel unir ao grupo da ligazón de rede: %s" - -#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642 -#, c-format -msgid "error updating link cache: %s" -msgstr "produciuse un erro ao actualizar a caché de ligazóns: %s" +"A política do sistema impide compartir conexións a través dunha rede WiFi " +"aberta" -#: ../src/main.c:498 +#: ../src/main.c:525 #, c-format msgid "Invalid option. Please use --help to see a list of valid options.\n" msgstr "Opción incorrecta. Use --help para ver a lista de opcións válidas.\n" -#: ../src/main.c:569 +#: ../src/main.c:606 #, c-format msgid "%s. Please use --help to see a list of valid options.\n" msgstr "%s. Use --help para ver a lista das opcións válidas.\n" -#: ../src/dhcp-manager/nm-dhcp-dhclient.c:328 +#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:62 msgid "# Created by NetworkManager\n" msgstr "# Creado por NetworkManager\n" -#: ../src/dhcp-manager/nm-dhcp-dhclient.c:344 +#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:69 #, c-format msgid "" "# Merged from %s\n" @@ -1714,38 +2017,275 @@ msgstr "Non foi posíbel encontrar «dhcpcd»." msgid "unsupported DHCP client '%s'" msgstr "cliente DHCP «%s» non compatíbel" -#: ../src/logging/nm-logging.c:146 +#: ../src/dns-manager/nm-dns-manager.c:376 +msgid "NOTE: the libc resolver may not support more than 3 nameservers." +msgstr "NOTE: o importador libc non permite máis de 3 nomes de servidores." + +#: ../src/dns-manager/nm-dns-manager.c:378 +msgid "The nameservers listed below may not be recognized." +msgstr "Os nomes de servidores listados a seguir poden non ser recoñecidos" + +#: ../src/logging/nm-logging.c:149 #, c-format msgid "Unknown log level '%s'" msgstr "Nivel de rexistro «%s» descoñecido" -#: ../src/logging/nm-logging.c:171 +#: ../src/logging/nm-logging.c:174 #, c-format msgid "Unknown log domain '%s'" msgstr "Dominio de rexistro «%s» descoñecido" -#: ../src/dns-manager/nm-dns-manager.c:384 -msgid "NOTE: the libc resolver may not support more than 3 nameservers." -msgstr "NOTE: o importador libc non permite máis de 3 nomes de servidores." +#: ../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/dns-manager/nm-dns-manager.c:386 -msgid "The nameservers listed below may not be recognized." -msgstr "Os nomes de servidores listados a seguir poden non ser recoñecidos" +#: ../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:326 +#, c-format +#| msgid "VPN connection failed" +msgid "PAN connection %d" +msgstr "Conexión PAN %d" + +#: ../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:1724 +#, c-format +#| msgid "VPN connection failed" +msgid "PPPoE connection %d" +msgstr "Conexión PPPoE %d" + +#: ../src/nm-device-ethernet.c:1724 ../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:393 +#, c-format +msgid "Mesh %d" +msgstr "Malla %d" + +#: ../src/nm-manager.c:663 +#, c-format +#| msgid "VPN connection failed" +msgid "VPN connection %d" +msgstr "Conexión VPN %d" + +#: ../src/nm-netlink-monitor.c:101 ../src/nm-netlink-monitor.c:234 +#: ../src/nm-netlink-monitor.c:667 +#, c-format +msgid "error processing netlink message: %s" +msgstr "produciuse un erro procesando a mensaxe netlink: %s" + +#: ../src/nm-netlink-monitor.c:216 +msgid "error occurred while waiting for data on socket" +msgstr "producouse un erro agardando por datos nun socket" + +#: ../src/nm-netlink-monitor.c:260 +#, c-format +msgid "unable to connect to netlink for monitoring link status: %s" +msgstr "" +"non é posíbel conectar ao netlink para monitorizar o estado da lingazón: %s" + +#: ../src/nm-netlink-monitor.c:271 +#, c-format +msgid "unable to enable netlink handle credential passing: %s" +msgstr "" +"non é posíbel activar a ligazón de rede para xestionar o paso de " +"creadenciais: %s" + +#: ../src/nm-netlink-monitor.c:297 ../src/nm-netlink-monitor.c:360 +#, c-format +msgid "unable to allocate netlink handle for monitoring link status: %s" +msgstr "" +"non é posíbel crear o manexador netlink para monitorizar o estado da " +"ligazón: %s" -#: ../src/settings/nm-default-wired-connection.c:157 +#: ../src/nm-netlink-monitor.c:385 #, c-format -msgid "Auto %s" -msgstr "Auto %s" +msgid "unable to allocate netlink link cache for monitoring link status: %s" +msgstr "" +"non é posíbel asignar a ligazón á caché netlink para monitorizar o estado da " +"ligazón: %s" -#: ../system-settings/plugins/ifcfg-rh/reader.c:3412 +#: ../src/nm-netlink-monitor.c:512 +#, c-format +msgid "unable to join netlink group: %s" +msgstr "non é posíbel unir ao grupo da ligazón de rede: %s" + +#: ../src/nm-netlink-monitor.c:643 ../src/nm-netlink-monitor.c:656 +#, c-format +msgid "error updating link cache: %s" +msgstr "produciuse un erro ao actualizar a caché de ligazóns: %s" + +#: ../src/settings/plugins/ifcfg-rh/reader.c:3575 +#: ../src/settings/plugins/ifnet/connection_parser.c:51 msgid "System" msgstr "Sistema" -#, c-format +#~ msgid "Auto %s" +#~ msgstr "Auto %s" + +#~ msgid "System policy prevents modification of system settings" +#~ msgstr "" +#~ "A política do sistema impide a modificación da configuración do sistema" + +#~ msgid "Modify system connections" +#~ msgstr "Modificar as conexións do sistema" + +#~ msgid "PEM certificate '%s' had no end tag '%s'." +#~ msgstr "O certificado PEM «%s» non ten unha etiqueta de final «%s»." + +#~ msgid "Not enough memory to store file data." +#~ msgstr "Non hai memoriaabondo para almacenar os datos do ficheiro" + +#~ msgid "SCOPE" +#~ msgstr "AMBITO" + +#~ msgid "DBUS-SERVICE" +#~ msgstr "DBUS-SERVICE" + +#~ msgid "system" +#~ msgstr "sistema" + +#~ msgid "user" +#~ msgstr "usuario" + +#~ msgid "User connections" +#~ msgstr "Conexións do usuario" + +#~ msgid "System connections" +#~ msgstr "Conexións do sistema" + +#~ msgid "Error: Obtaining active connection for '%s' failed." +#~ msgstr "Erro: Produciuse un fallo ao obter a conexión activa para «%s»." + +#~ 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" +#~ msgstr "" +#~ "Uso: nmcli con { ORDE | help }\n" +#~ " ORDE := { 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 "System policy prevents use of user-specific connections" +#~ msgstr "" +#~ "A normativa do sistema evita o uso de conexións específicas do usuario" + +#~ msgid "Error: Could not get user settings." +#~ msgstr "Erro: Non é posíbel obter as opcións do usuario." + +#~ msgid "Error: Can't obtain connections: settings services are not running." +#~ msgstr "" +#~ "Erro: Non é posíbel obter as conexións: os servizos de opcións non están " +#~ "executándose." + +#~ msgid "Allow use of user-specific connections" +#~ msgstr "Permitir o uso de conexións específicas do usuario" + +#~ 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" +#~ msgstr "" +#~ "Uso: nmcli dev { ORDE | help }\n" +#~ "\n" +#~ " ORDE := { status | list | disconnect | wifi }\n" +#~ "\n" +#~ " status\n" +#~ " list [iface ]\n" +#~ " disconnect iface [--nowait] [--timeout ]\n" +#~ " wifi [list [iface ] [hwaddr ]]\n" +#~ "\n" + +#~ 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" +#~ msgstr "" +#~ "Uso: %s [OPCIÓNS] OBXECTO { ORDE | ayuda }\n" +#~ "\n" +#~ "OPCIÓNS\n" +#~ " -t[erse] saída terse \n" +#~ " -p[retty] saída pretty\n" +#~ " -v[ersion] mostrar a versión do programa\n" +#~ " -h[elp] imprimir esta axuda\n" +#~ "\n" +#~ "OBXECTO\n" +#~ " nm estado do NetworkManager\n" +#~ " con conexións do NetworkManager\n" +#~ " dev dispositivos administrados por NetworkManager\n" +#~ "\n" + +#~ 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" +#~ msgstr "" +#~ "Uso: nmcli nm { ORDE | axuda }\n" +#~ "\n" +#~ " ORDE := { status | activar | durmir | wifi | wwan }\n" +#~ "\n" +#~ " status\n" +#~ " activar [verdadeiro|falso]\n" +#~ " durmir [verdadeiro|falso]\n" +#~ " wifi [activa|desactivada]\n" +#~ " wwan [activa|desactivada]\n" +#~ "\n" + #~ msgid "unable to join netlink group for monitoring link status: %s" #~ msgstr "" -#~ "non é posíbel unir ao grupo netlink para monitorizar o estado da ligazón: %s" +#~ "non é posíbel unir ao grupo netlink para monitorizar o estado da ligazón: " +#~ "%s" -#, c-format #~ msgid "unable to connect to netlink: %s" #~ msgstr "non é posíbel conectar coa ligazón de rede: %s" diff --git a/po/hr.po b/po/hr.po index 3ddfd37d..1d0b4676 100644 --- a/po/hr.po +++ b/po/hr.po @@ -1,220 +1,2180 @@ # NetworkManager # Copyright (C) Red Hat, Inc. # This file is distributed under the same license as the NetworkManager package. +# # Tomislav Vujec , 2005. # msgid "" msgstr "" "Project-Id-Version: NetworkManager \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2005-02-04 17:28+0100\n" -"PO-Revision-Date: 2005-02-04 01:08+0100\n" -"Last-Translator: Tomislav Vujec \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-09-14 02:06+0200\n" +"Last-Translator: Tomislav Krznar \n" "Language-Team: Croatian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\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: hr\n" +"X-Generator: Lokalize 1.2\n" + +#: ../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 "NAZIV" + +#. 0 +#: ../cli/src/connections.c:65 ../cli/src/connections.c:79 +msgid "UUID" +msgstr "UUID" + +#. 1 +#: ../cli/src/connections.c:66 +msgid "DEVICES" +msgstr "UREĐAJI" + +#. 2 +#: ../cli/src/connections.c:67 +msgid "DEFAULT" +msgstr "UOBIČAJENO" + +#. 3 +#: ../cli/src/connections.c:68 +#, fuzzy +msgid "SPEC-OBJECT" +msgstr "SPEC-OBJEKT" + +#. 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-PUTANJA" -#: info-daemon/networks.glade:11 -msgid "Modify Wireless Networks" -msgstr "Postavke bežičnih mreža" +#. 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 "TIP" -#: info-daemon/networks.glade:92 -msgid "Wireless Networks:" -msgstr "Bežične mreže:" +#. 2 +#: ../cli/src/connections.c:81 +#, fuzzy +msgid "TIMESTAMP" +msgstr "VREMENSKA OZNAKA" -#: info-daemon/passphrase.glade:9 -msgid "Wireless Network Key Required" -msgstr "Potreban je ključ bežične mreže" +#. 3 +#: ../cli/src/connections.c:82 +#, fuzzy +msgid "TIMESTAMP-REAL" +msgstr "VREMENSKA OZNAKA-STVARNO" -#: info-daemon/passphrase.glade:52 -msgid "_Login to Network" -msgstr "_Prijava na mrežu" +#. 4 +#: ../cli/src/connections.c:83 +#, fuzzy +msgid "AUTOCONNECT" +msgstr "AUTOMATSKO SPAJANJE" -#: info-daemon/passphrase.glade:100 +#. 5 +#: ../cli/src/connections.c:84 +#, fuzzy +msgid "READONLY" +msgstr "SAMO ZA ČITANJE" + +#: ../cli/src/connections.c:167 +#, c-format msgid "" -"Passphrase Required by Wireless " -"Network\n" +"Usage: nmcli con { COMMAND | help }\n" +" COMMAND := { list | status | up | down }\n" "\n" -"A passphrase or encryption key is required to access the wireless network '%" -"s'." +" 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 "" -"Potrebna je lozinka za bežičnu mrežu\n" +"Uporaba: nmcli con { NAREDBA | help }\n" +" COMMAND := { list | status | up | down }\n" "\n" -"Za pristup mreži '%s', potrebna je lozinka ili ključ." +" 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:542 +#, c-format +msgid "Error: 'con list': %s" +msgstr "Greška: 'con list': %s" + +#: ../cli/src/connections.c:222 ../cli/src/connections.c:544 +#, c-format +msgid "Error: 'con list': %s; allowed fields: %s" +msgstr "Greška: 'con list': %s; dozvoljena polja: %s" + +#: ../cli/src/connections.c:230 +msgid "Connection details" +msgstr "Detalji veze" + +#: ../cli/src/connections.c:417 +msgid "never" +msgstr "nikad" + +#. "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: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 "da" + +#: ../cli/src/connections.c:418 ../cli/src/connections.c:419 +#: ../cli/src/connections.c:597 ../cli/src/connections.c:599 +#: ../cli/src/devices.c:509 ../cli/src/devices.c:562 ../cli/src/devices.c:687 +#: ../cli/src/devices.c:713 ../cli/src/devices.c:714 ../cli/src/devices.c:715 +#: ../cli/src/devices.c:716 ../cli/src/devices.c:717 ../cli/src/settings.c:520 +#: ../cli/src/settings.c:522 ../cli/src/settings.c:563 +#: ../cli/src/settings.c:663 ../cli/src/settings.c:937 +#: ../cli/src/settings.c:938 ../cli/src/settings.c:940 +#: ../cli/src/settings.c:942 ../cli/src/settings.c:1067 +#: ../cli/src/settings.c:1068 ../cli/src/settings.c:1069 +#: ../cli/src/settings.c:1148 ../cli/src/settings.c:1149 +#: ../cli/src/settings.c:1150 ../cli/src/settings.c:1151 +#: ../cli/src/settings.c:1152 ../cli/src/settings.c:1153 +#: ../cli/src/settings.c:1154 ../cli/src/settings.c:1155 +#: ../cli/src/settings.c:1156 ../cli/src/settings.c:1157 +#: ../cli/src/settings.c:1158 ../cli/src/settings.c:1159 +#: ../cli/src/settings.c:1160 ../cli/src/settings.c:1235 +msgid "no" +msgstr "ne" + +#: ../cli/src/connections.c:493 +#| msgid "C_onnect" +msgid "Connection list" +msgstr "Lista veza" + +#: ../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 "Greška: nedostaje argument %s." + +#: ../cli/src/connections.c:519 +#, c-format +msgid "Error: %s - no such connection." +msgstr "Greška: %s - veza ne postoji." + +#: ../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 "Nepoznati parametar: %s\n" + +#: ../cli/src/connections.c:534 +#, c-format +msgid "Error: no valid parameter specified." +msgstr "Greška: nije određen važeći parametar." + +#: ../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 "Greška: %s." + +#: ../cli/src/connections.c:637 +#, c-format +msgid "Error: 'con status': %s" +msgstr "Greška: 'con status': %s" + +#: ../cli/src/connections.c:639 +#, c-format +msgid "Error: 'con status': %s; allowed fields: %s" +msgstr "Greška: 'con status': %s; dozvoljena polja: %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: Can't find out if NetworkManager is running: %s." +msgstr "Greška: Ne mogu otkriti je li NetworkManager pokrenut: %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 is not running" +msgid "Error: NetworkManager is not running." +msgstr "Greška: NetworkManager nije pokrenut." + +#: ../cli/src/connections.c:659 +#| msgid "Wired network connection" +msgid "Active connections" +msgstr "Aktivne veze" + +#: ../cli/src/connections.c:1095 +#, c-format +msgid "no active connection on device '%s'" +msgstr "nema aktivne veze na uređaju '%s'" + +#: ../cli/src/connections.c:1103 +#, c-format +msgid "no active connection or device" +msgstr "nema aktivne veze ili uređaja" + +#: ../cli/src/connections.c:1174 +#, c-format +msgid "device '%s' not compatible with connection '%s'" +msgstr "uređaj '%s' ne podržava vezu '%s'" + +#: ../cli/src/connections.c:1176 +#, c-format +msgid "no device found for connection '%s'" +msgstr "nije pronađen uređaj za vezu '%s'" + +#: ../cli/src/connections.c:1187 +msgid "activating" +msgstr "aktiviram" + +#: ../cli/src/connections.c:1189 +msgid "activated" +msgstr "aktivirano" + +#: ../cli/src/connections.c:1191 ../cli/src/devices.c:304 +msgid "deactivating" +msgstr "deaktiviram" + +#: ../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 "nepoznato" + +#: ../cli/src/connections.c:1203 +msgid "VPN connecting (prepare)" +msgstr "VPN spajanje (priprema)" + +#: ../cli/src/connections.c:1205 +msgid "VPN connecting (need authentication)" +msgstr "VPN spajanje (potrebna potvrda)" + +#: ../cli/src/connections.c:1207 +#| msgid "No network connection" +msgid "VPN connecting" +msgstr "VPN spajanje" + +#: ../cli/src/connections.c:1209 +msgid "VPN connecting (getting IP configuration)" +msgstr "VPN spajanje (dohvat IP konfiguracije)" + +#: ../cli/src/connections.c:1211 +msgid "VPN connected" +msgstr "VPN spojen" + +#: ../cli/src/connections.c:1213 +msgid "VPN connection failed" +msgstr "VPN spajanje neuspješno" + +#: ../cli/src/connections.c:1215 +msgid "VPN disconnected" +msgstr "VPN odspojen" + +#: ../cli/src/connections.c:1226 +msgid "unknown reason" +msgstr "nepoznat razlog" + +#: ../cli/src/connections.c:1228 +msgid "none" +msgstr "nijedan" + +#: ../cli/src/connections.c:1230 +msgid "the user was disconnected" +msgstr "korisnik je odspojen" + +#: ../cli/src/connections.c:1232 +#| msgid "Wireless network connection" +msgid "the base network connection was interrupted" +msgstr "osnovna mrežna veza je prekinuta" + +#: ../cli/src/connections.c:1234 +msgid "the VPN service stopped unexpectedly" +msgstr "VPN servis je neočekivano zaustavljen" + +#: ../cli/src/connections.c:1236 +msgid "the VPN service returned invalid configuration" +msgstr "VPN servis je vratio nevažeću konfiguraciju" + +#: ../cli/src/connections.c:1238 +msgid "the connection attempt timed out" +msgstr "vrijeme spajanja je prekoračeno" + +#: ../cli/src/connections.c:1240 +msgid "the VPN service did not start in time" +msgstr "VPN servis nije pokrenut pravovremeno" + +#: ../cli/src/connections.c:1242 +msgid "the VPN service failed to start" +msgstr "VPN servis nije pokrenut" + +#: ../cli/src/connections.c:1244 +msgid "no valid VPN secrets" +msgstr "nema važećih VPN tajni" + +#: ../cli/src/connections.c:1246 +msgid "invalid VPN secrets" +msgstr "nevažeće VPN tajne" + +#: ../cli/src/connections.c:1248 +msgid "the connection was removed" +msgstr "veza je uklonjena" + +#: ../cli/src/connections.c:1262 +#, c-format +msgid "state: %s\n" +msgstr "stanje: %s\n" + +#: ../cli/src/connections.c:1265 ../cli/src/connections.c:1291 +#, c-format +msgid "Connection activated\n" +msgstr "Veza aktivirana\n" + +#: ../cli/src/connections.c:1268 +#, c-format +msgid "Error: Connection activation failed." +msgstr "Greška: Aktivacija veze neuspješna." + +#: ../cli/src/connections.c:1287 +#, c-format +msgid "state: %s (%d)\n" +msgstr "stanje: %s (%d)\n" + +#: ../cli/src/connections.c:1297 +#, c-format +msgid "Error: Connection activation failed: %s." +msgstr "Greška: Aktivacija veze neuspješna: %s." + +#: ../cli/src/connections.c:1314 ../cli/src/devices.c:1136 +#, c-format +msgid "Error: Timeout %d sec expired." +msgstr "Greška: Vrijeme spajanja %d sekundi prekoračeno." + +#: ../cli/src/connections.c:1327 +#, c-format +msgid "Error: Connection activation failed: %s" +msgstr "Greška: Aktivacija veze neuspješna: %s" + +#: ../cli/src/connections.c:1333 +#, c-format +msgid "Active connection state: %s\n" +msgstr "Stanje aktivne veze: %s\n" + +#: ../cli/src/connections.c:1334 +#, c-format +msgid "Active connection path: %s\n" +msgstr "Putanja aktivne veze: %s\n" + +#: ../cli/src/connections.c:1386 ../cli/src/connections.c:1527 +#, c-format +msgid "Error: Unknown connection: %s." +msgstr "Greška: Nepoznata veza: %s." + +#: ../cli/src/connections.c:1432 ../cli/src/devices.c:1208 +#, c-format +msgid "Error: timeout value '%s' is not valid." +msgstr "Greška: vrijednost vremena spajanja '%s' nije važeća." + +#: ../cli/src/connections.c:1445 ../cli/src/connections.c:1544 +#, c-format +msgid "Error: id or uuid has to be specified." +msgstr "Greška: id ili uuid mora biti određen." + +#: ../cli/src/connections.c:1473 +#, c-format +msgid "Error: No suitable device found: %s." +msgstr "Greška: Prikladni uređaji nisu pronađeni: %s." + +#: ../cli/src/connections.c:1475 +#, c-format +msgid "Error: No suitable device found." +msgstr "Greška: Prikladni uređaji nisu pronađeni." + +#: ../cli/src/connections.c:1580 +#, c-format +msgid "Warning: Connection not active\n" +msgstr "Upozorenje: Veza nije aktivna\n" + +#: ../cli/src/connections.c:1618 +#, c-format +msgid "Error: 'con' command '%s' is not valid." +msgstr "Greška: 'con' naredba '%s' nije važeća." + +#: ../cli/src/connections.c:1683 +#, c-format +msgid "Error: could not connect to D-Bus." +msgstr "Greška: neuspješno spajanje na D-Bus." + +#: ../cli/src/connections.c:1690 +#, c-format +msgid "Error: Could not get system settings." +msgstr "Greška: Neuspješan dohvat postavki sustava." + +#: ../cli/src/connections.c:1700 +#, c-format +msgid "Error: Can't obtain connections: settings service is not running." +msgstr "Greška: Neuspješan dohvat veza: servis postavki nije pokrenut." + +#. 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 "UREĐAJ" + +#. 1 +#. 4 +#. 1 +#: ../cli/src/devices.c:68 ../cli/src/devices.c:106 +#: ../cli/src/network-manager.c:39 +msgid "STATE" +msgstr "STANJE" + +#: ../cli/src/devices.c:78 +msgid "GENERAL" +msgstr "OPĆENITO" + +#. 0 +#: ../cli/src/devices.c:79 +msgid "CAPABILITIES" +msgstr "MOGUĆNOSTI" + +#. 1 +#: ../cli/src/devices.c:80 +msgid "WIFI-PROPERTIES" +msgstr "WIFI-SVOJSTVA" + +#. 2 +#: ../cli/src/devices.c:81 +msgid "AP" +msgstr "AP" + +#. 3 +#: ../cli/src/devices.c:82 +#, fuzzy +msgid "WIRED-PROPERTIES" +msgstr "ŽIČNO-SVOJSTVA" + +#. 4 +#: ../cli/src/devices.c:83 +msgid "WIMAX-PROPERTIES" +msgstr "WIMAX-SVOJSTVA" + +#. 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-POSTAVKE" + +#. 7 +#: ../cli/src/devices.c:86 +msgid "IP4-DNS" +msgstr "IP4-DNS" + +#. 8 +#: ../cli/src/devices.c:87 +msgid "IP6-SETTINGS" +msgstr "IP6-POSTAVKE" + +#. 9 +#: ../cli/src/devices.c:88 +msgid "IP6-DNS" +msgstr "IP6-DNS" + +#. 2 +#: ../cli/src/devices.c:104 +#, fuzzy +msgid "DRIVER" +msgstr "DRIVER" + +#. 3 +#: ../cli/src/devices.c:105 +#, fuzzy +msgid "HWADDR" +msgstr "HWADDR" + +#. 0 +#: ../cli/src/devices.c:115 +#, fuzzy +msgid "CARRIER-DETECT" +msgstr "OTKRIVANJE-NOSIOCA" + +#. 1 +#: ../cli/src/devices.c:116 +msgid "SPEED" +msgstr "BRZINA" + +#. 0 +#: ../cli/src/devices.c:125 +msgid "CARRIER" +msgstr "NOSIOC" + +#. 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" -#: info-daemon/passphrase.glade:129 panel-applet/essid.glade:246 -msgid "Key Type:" -msgstr "Tip ključa:" +#. 3 +#: ../cli/src/devices.c:138 +msgid "TKIP" +msgstr "TKIP" -#: info-daemon/passphrase.glade:150 panel-applet/essid.glade:315 +#. 4 +#: ../cli/src/devices.c:139 +msgid "CCMP" +msgstr "CCMP" + +#. 0 +#: ../cli/src/devices.c:149 +#, fuzzy +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 +#, fuzzy +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 "ADRESA" + +#. 1 +#: ../cli/src/devices.c:164 ../cli/src/devices.c:175 +msgid "PREFIX" +msgstr "PREFIKS" + +#. 2 +#: ../cli/src/devices.c:165 ../cli/src/devices.c:176 +#, fuzzy +msgid "GATEWAY" +msgstr "GATEWAY" + +#. 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 +#, fuzzy +msgid "MODE" +msgstr "NAČIN" + +#. 3 +#: ../cli/src/devices.c:206 +msgid "FREQ" +msgstr "FREKVENCIJA" + +#. 4 +#: ../cli/src/devices.c:207 +msgid "RATE" +msgstr "BRZINA" + +#. 5 +#. 1 +#: ../cli/src/devices.c:208 ../cli/src/devices.c:226 +msgid "SIGNAL" +msgstr "SIGNAL" + +#. 6 +#: ../cli/src/devices.c:209 +msgid "SECURITY" +msgstr "SIGURNOST" + +#. 7 +#: ../cli/src/devices.c:210 +msgid "WPA-FLAGS" +msgstr "WPA-ZASTAVICE" + +#. 8 +#: ../cli/src/devices.c:211 +msgid "RSN-FLAGS" +msgstr "RSN-ZASTAVICE" + +#. 10 +#. 4 +#: ../cli/src/devices.c:213 ../cli/src/devices.c:229 +msgid "ACTIVE" +msgstr "AKTIVAN" + +#: ../cli/src/devices.c:256 +#, c-format msgid "" -"128-bit Passphrase (WEP)\n" -"Ascii Key (WEP)\n" -"Hex Key (WEP)" +"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 "" -"128-bitna lozinka (WEP)\n" -"Slovčani ključ (WEP)\n" -"Heksadecimalni ključ (WEP)" +"Uporaba: nmcli dev { NAREDBA | help }\n" +"\n" +" NAREDBA := { status | list | disconnect | wifi | wimax }\n" +"\n" +" NAREDBA := { 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 "neupravljan" + +#: ../cli/src/devices.c:286 +msgid "unavailable" +msgstr "nedostupan" + +#: ../cli/src/devices.c:288 ../cli/src/network-manager.c:115 +#| msgid "C_onnect" +msgid "disconnected" +msgstr "odspojen" -#: info-daemon/passphrase.glade:181 -#: info-daemon/NetworkManagerInfoPassphraseDialog.c:139 -#: panel-applet/NMWirelessAppletOtherNetworkDialog.c:149 -#: panel-applet/essid.glade:270 -msgid "Passphrase:" -msgstr "Lozinka:" +#: ../cli/src/devices.c:290 +msgid "connecting (prepare)" +msgstr "spajanje (priprema)" -#: info-daemon/passphrase.glade:209 panel-applet/essid.glade:203 -#: panel-applet/essid.glade:300 -msgid "*" -msgstr "*" +#: ../cli/src/devices.c:292 +msgid "connecting (configuring)" +msgstr "spajanje (konfiguracija)" -#: info-daemon/NetworkManagerInfoPassphraseDialog.c:142 -#: panel-applet/NMWirelessAppletOtherNetworkDialog.c:152 -msgid "Ascii Key:" -msgstr "Slovčani ključ" +#: ../cli/src/devices.c:294 +msgid "connecting (need authentication)" +msgstr "spajanje (potrebna potvrda)" -#: info-daemon/NetworkManagerInfoPassphraseDialog.c:145 -#: panel-applet/NMWirelessAppletOtherNetworkDialog.c:155 -msgid "Hex Key:" -msgstr "Heksadecimalni ključ" +#: ../cli/src/devices.c:296 +msgid "connecting (getting IP configuration)" +msgstr "spajanje (dohvat IP konfiguracije)" -#: info-daemon/NetworkManagerInfoVPN.c:157 +#: ../cli/src/devices.c:298 +msgid "connecting (checking IP connectivity)" +msgstr "spajanje (provjera IP spojivosti)" + +#: ../cli/src/devices.c:300 +msgid "connecting (starting secondary connections)" +msgstr "spajanje (pokretanje sekundarnih veza)" + +#: ../cli/src/devices.c:302 ../cli/src/network-manager.c:111 +#| msgid "C_onnect" +msgid "connected" +msgstr "spojen" + +#: ../cli/src/devices.c:306 +msgid "connection failed" +msgstr "spajanje neuspješno" + +#: ../cli/src/devices.c:331 ../cli/src/devices.c:341 ../cli/src/devices.c:501 +#: ../cli/src/devices.c:545 +msgid "Unknown" +msgstr "Nepoznat" + +#: ../cli/src/devices.c:374 +msgid "(none)" +msgstr "(nijedan)" + +#: ../cli/src/devices.c:399 +#, c-format +msgid "%s: error converting IP4 address 0x%X" +msgstr "%s: greška pretvorbe IP4 adrese 0x%X" + +#: ../cli/src/devices.c:470 #, c-format -msgid "You must log in to access the private network %s" -msgstr "Prijava je potrebna za pristup na mrežu %s" +msgid "%u MHz" +msgstr "%u MHz" + +#: ../cli/src/devices.c:471 +#, c-format +msgid "%u MB/s" +msgstr "%u MB/s" + +#: ../cli/src/devices.c:480 +msgid "Encrypted: " +msgstr "Zaštićeno: " + +#: ../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" -#: panel-applet/NMWirelessApplet.c:313 -msgid "No network connection" -msgstr "Nema spoja na mrežu" +#: ../cli/src/devices.c:501 +msgid "Infrastructure" +msgstr "Infrastruktura" -#: panel-applet/NMWirelessApplet.c:318 -msgid "Wired network connection" -msgstr "Spoj na žičanu mrežu" +#: ../cli/src/devices.c:536 +msgid "Home" +msgstr "Početna" -#: panel-applet/NMWirelessApplet.c:323 -msgid "Connecting to a wired network..." -msgstr "Spajanje na žičanu mrežu..." +#: ../cli/src/devices.c:539 +msgid "Partner" +msgstr "Partner" -#: panel-applet/NMWirelessApplet.c:332 -msgid "Connected to an Ad-Hoc wireless network" -msgstr "Spoj na Ad-Hoc bežičnu mrežu" +#: ../cli/src/devices.c:542 +msgid "Roaming" +msgstr "Roaming" -#: panel-applet/NMWirelessApplet.c:346 +#: ../cli/src/devices.c:612 #, c-format -msgid "Wireless network connection to '%s' (%d%%)" -msgstr "Spoj na bežičnu mrežu '%s' (%d%%)" +msgid "Error: 'dev list': %s" +msgstr "Greška: 'dev list': %s" -#: panel-applet/NMWirelessApplet.c:351 -msgid "Wireless network connection" -msgstr "Spoj na bežičnu mrežu" +#: ../cli/src/devices.c:614 +#, c-format +msgid "Error: 'dev list': %s; allowed fields: %s" +msgstr "Greška: 'dev list': %s; dozvoljena polja: %s" + +#: ../cli/src/devices.c:623 +msgid "Device details" +msgstr "Detalji uređaja" + +#: ../cli/src/devices.c:657 ../cli/src/devices.c:1152 ../cli/src/utils.c:342 +msgid "(unknown)" +msgstr "(nepoznat)" + +#: ../cli/src/devices.c:658 +msgid "unknown)" +msgstr "nepoznat)" -#: panel-applet/NMWirelessApplet.c:356 +#: ../cli/src/devices.c:684 #, c-format -msgid "Connecting to wireless network '%s'..." -msgstr "Spajanje na bežičnu mrežu '%s'..." +msgid "%u Mb/s" +msgstr "%u Mb/s" -#: panel-applet/NMWirelessApplet.c:362 -msgid "NetworkManager is not running" -msgstr "NetworkManager nije pokrenut" +#. Print header +#. "WIRED-PROPERTIES" +#: ../cli/src/devices.c:757 +msgid "on" +msgstr "uključen" -#: panel-applet/NMWirelessApplet.c:367 -msgid "Scanning for wireless networks..." -msgstr "Potraga za bežičnim mrežama..." +#: ../cli/src/devices.c:757 +msgid "off" +msgstr "isključen" + +#: ../cli/src/devices.c:1004 +#, c-format +msgid "Error: 'dev status': %s" +msgstr "Greška: 'dev status': %s" + +#: ../cli/src/devices.c:1006 +#, c-format +msgid "Error: 'dev status': %s; allowed fields: %s" +msgstr "Greška: 'dev status': s; dozvoljena polja: %s" -#: panel-applet/NMWirelessApplet.c:690 -msgid "Other Wireless Networks..." -msgstr "Ostale bežične mreže..." +#: ../cli/src/devices.c:1029 +msgid "Status of devices" +msgstr "Stanje uređaja" -#: panel-applet/NMWirelessApplet.c:711 -msgid "Create new Wireless Network..." -msgstr "Stvori novu bečičnu mrežu..." +#: ../cli/src/devices.c:1060 +#, c-format +msgid "Error: '%s' argument is missing." +msgstr "Greška: nedostaje argument '%s'." -#: panel-applet/NMWirelessApplet.c:821 -msgid "No network devices have been found" -msgstr "Nema mrežnih uređaja" +#: ../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 "Greška: Uređaj '%s' nije pronađen." -#: panel-applet/NMWirelessApplet.c:939 -msgid "NetworkManager is not running..." -msgstr "NetworkManager nije pokrenut..." +#: ../cli/src/devices.c:1124 +#, c-format +msgid "Success: Device '%s' successfully disconnected." +msgstr "Uspjeh: Uređaj '%s' uspješno odspojen." -#: panel-applet/NMWirelessAppletOtherNetworkDialog.c:228 -msgid "Create new wireless network" -msgstr "Stvori novu bečičnu mrežu" +#: ../cli/src/devices.c:1149 +#, c-format +msgid "Error: Device '%s' (%s) disconnecting failed: %s" +msgstr "Greška: Odspajanje uređaja '%s' (%s) neuspješno: %s" -#: panel-applet/NMWirelessAppletOtherNetworkDialog.c:229 -msgid "" -"Enter the ESSID and security settings of the wireless network you wish to " -"create." -msgstr "Unesi ESSID i sigurnosne postavke bežične mreže koju treba stvoriti." +#: ../cli/src/devices.c:1157 +#, c-format +msgid "Device state: %d (%s)\n" +msgstr "Stanje uređaja: %d (%s) \n" -#: panel-applet/NMWirelessAppletOtherNetworkDialog.c:234 -msgid "Custom wireless network" -msgstr "Posebna bežična mreža" +#: ../cli/src/devices.c:1222 +#, c-format +msgid "Error: iface has to be specified." +msgstr "Greška: iface mora biti određen." -#: panel-applet/NMWirelessAppletOtherNetworkDialog.c:235 -msgid "Enter the ESSID of the wireless network to which you wish to connect." -msgstr "" -"Unesi ESSID i sigurnosne postavke bežične mreže na koju se treba spojiti." +#: ../cli/src/devices.c:1347 +#, c-format +msgid "Error: 'dev wifi': %s" +msgstr "Greška: 'dev wifi': %s" + +#: ../cli/src/devices.c:1349 +#, c-format +msgid "Error: 'dev wifi': %s; allowed fields: %s" +msgstr "Greška: 'dev wifi': %s; dozvoljena polja: %s" + +#: ../cli/src/devices.c:1372 +msgid "WiFi scan list" +msgstr "WiFi rezultati skeniranja" + +#: ../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 "Greška: Pristupna točka adrese '%s' nije pronađena." + +#: ../cli/src/devices.c:1426 +#, c-format +msgid "Error: Device '%s' is not a WiFi device." +msgstr "Greška: Uređaj '%s' nije WiFi uređaj." + +#: ../cli/src/devices.c:1490 +#, c-format +msgid "Error: 'dev wifi' command '%s' is not valid." +msgstr "Greška: 'dev wifi' naredba '%s' nije važeća." + +#: ../cli/src/devices.c:1566 +#, c-format +msgid "Error: 'dev wimax': %s" +msgstr "Greška: 'dev wimax': %s" + +#: ../cli/src/devices.c:1568 +#, c-format +msgid "Error: 'dev wimax': %s; allowed fields: %s" +msgstr "Greška: 'dev wimax': %s; dozvoljena polja: %s" + +#: ../cli/src/devices.c:1591 +msgid "WiMAX NSP list" +msgstr "WiMAX NSP popis" + +#: ../cli/src/devices.c:1628 +#, c-format +msgid "Error: NSP with name '%s' not found." +msgstr "Greška: NSP imena '%s' nije pronađen." + +#: ../cli/src/devices.c:1639 +#, c-format +msgid "Error: Device '%s' is not a WiMAX device." +msgstr "Greška: Uređaj '%s' nije WiMAX uređaj." + +#: ../cli/src/devices.c:1697 +#, c-format +msgid "Error: 'dev wimax' command '%s' is not valid." +msgstr "Greška: 'dev wimax' naredba '%s' nije važeća." + +#: ../cli/src/devices.c:1747 +#, c-format +msgid "Error: 'dev' command '%s' is not valid." +msgstr "Greška: 'dev' naredba '%s' nije važeća." + +#: ../cli/src/network-manager.c:37 +msgid "RUNNING" +msgstr "POKRENUT" + +#. 0 +#: ../cli/src/network-manager.c:38 +msgid "VERSION" +msgstr "VERZIJA" + +#. 2 +#: ../cli/src/network-manager.c:40 +#, fuzzy +msgid "NET-ENABLED" +msgstr "MREŽA-OMOGUĆENA" + +#. 3 +#: ../cli/src/network-manager.c:41 +#, fuzzy +msgid "WIFI-HARDWARE" +msgstr "WIFI-HARDVER" + +#. 4 +#: ../cli/src/network-manager.c:42 +msgid "WIFI" +msgstr "WIFI" + +#. 5 +#: ../cli/src/network-manager.c:43 +#, fuzzy +msgid "WWAN-HARDWARE" +msgstr "WWAN-HARDVER" + +#. 6 +#: ../cli/src/network-manager.c:44 +msgid "WWAN" +msgstr "WWAN" + +#. 7 +#: ../cli/src/network-manager.c:45 +#, fuzzy +msgid "WIMAX-HARDWARE" +msgstr "WIMAX-HARDVER" + +#. 8 +#: ../cli/src/network-manager.c:46 +msgid "WIMAX" +msgstr "WIMAX" -#. Reuse the above string to make the translators less angry. -#: panel-applet/NMWirelessAppletOtherNetworkDialog.c:316 -#: panel-applet/NMWirelessAppletOtherNetworkDialog.c:325 +#: ../cli/src/network-manager.c:74 +#, c-format msgid "" -"The NetworkManager Applet could not find some required resources (the glade " -"file was not found)." +"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 "" +"Uporaba: nmcli nm { NAREDBA | help }\n" +"\n" +" NAREDBA := { status | enable | sleep | wifi | wwan | wimax }\n" +"\n" +" NAREDBA := { 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 +#, fuzzy +msgid "asleep" +msgstr "u stanju čekanja" + +#: ../cli/src/network-manager.c:105 +#| msgid "C_onnect" +msgid "connecting" +msgstr "spajanje" + +#: ../cli/src/network-manager.c:107 +msgid "connected (local only)" +msgstr "spojen (lokalna veza)" + +#: ../cli/src/network-manager.c:109 +msgid "connected (site only)" msgstr "" -"NetworkManager ne može naći potrebne datoteke (glade datoteka nije " -"pronađena)." -#: panel-applet/essid.glade:53 -msgid "C_onnect" -msgstr "_Spoji se" +#: ../cli/src/network-manager.c:113 +msgid "disconnecting" +msgstr "odspajanje" + +#: ../cli/src/network-manager.c:153 +#, c-format +msgid "Error: 'nm status': %s" +msgstr "Greška: 'nm status': %s" + +#: ../cli/src/network-manager.c:155 +#, c-format +msgid "Error: 'nm status': %s; allowed fields: %s" +msgstr "Greška: 'nm status': %s; dozvoljena polja: %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 "omogućen" + +#: ../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 "onemogućen" + +#: ../cli/src/network-manager.c:188 +#| msgid "NetworkManager is not running" +msgid "NetworkManager status" +msgstr "NetworkManager stanje" + +#. Print header +#: ../cli/src/network-manager.c:191 +msgid "running" +msgstr "pokrenut" + +#: ../cli/src/network-manager.c:191 +msgid "not running" +msgstr "nije pokrenut" + +#: ../cli/src/network-manager.c:222 ../cli/src/utils.c:322 +#, c-format +msgid "Error: Couldn't connect to system bus: %s" +msgstr "Greška: Neuspješno spajanje na sabirnicu sustava: %s" + +#: ../cli/src/network-manager.c:233 +#, c-format +msgid "Error: Couldn't create D-Bus object proxy." +msgstr "" -#: panel-applet/essid.glade:132 -msgid "Wireless _adapter:" -msgstr "Bežični _uređaj:" +#: ../cli/src/network-manager.c:239 +#, c-format +msgid "Error in sleep: %s" +msgstr "Pogreška u čekanju: %s" -#: panel-applet/essid.glade:172 -msgid "Wireless _Network:" -msgstr "Bežična _mreža:" +#: ../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 "Greška: '--fields' vrijednost '%s' nije važeća; dozvoljena polja: %s" -#: panel-applet/essid.glade:337 -msgid "Connect with encryption enabled" -msgstr "Spoji se sa enkripcijom" +#: ../cli/src/network-manager.c:291 +msgid "Networking enabled" +msgstr "Umrežavanje omogućeno" -#: panel-applet/menu-info.c:109 +#: ../cli/src/network-manager.c:307 #, c-format -msgid "Wired Network (%s)" -msgstr "Žičana mreža (%s)" +msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'." +msgstr "" +"Greška: nevažeći 'enable' parametar: '%s'; dozvoljeni su 'true' i 'false'." -#: panel-applet/menu-info.c:111 -msgid "Wired Network" -msgstr "Žičana mreža" +#: ../cli/src/network-manager.c:317 +#, c-format +msgid "Error: Sleeping status is not exported by NetworkManager." +msgstr "Greška: NetworkManager nije izveo stanje čekanja." -#: panel-applet/menu-info.c:177 +#: ../cli/src/network-manager.c:325 #, c-format -msgid "Wireless Network (%s)" -msgid_plural "Wireless Networks (%s)" -msgstr[0] "Bežična mreža (%s)" -msgstr[1] "Bežične mreže (%s)" +msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'." +msgstr "" +"Greška: nevažeći 'sleep' parametar: '%s'; dozvoljeni su 'true' i 'false'." + +#: ../cli/src/network-manager.c:346 +msgid "WiFi enabled" +msgstr "WiFi omogućen" + +#: ../cli/src/network-manager.c:362 +#, c-format +msgid "Error: invalid 'wifi' parameter: '%s'." +msgstr "Greška: nevažeći 'wifi' parametar: '%s'." + +#: ../cli/src/network-manager.c:384 +msgid "WWAN enabled" +msgstr "WWAN omogućen" + +#: ../cli/src/network-manager.c:400 +#, c-format +msgid "Error: invalid 'wwan' parameter: '%s'." +msgstr "Greška: nevažeći 'wwan' parametar: '%s'." + +#: ../cli/src/network-manager.c:423 +msgid "WiMAX enabled" +msgstr "WiMAX omogućen" + +#: ../cli/src/network-manager.c:439 +#, c-format +msgid "Error: invalid 'wimax' parameter: '%s'." +msgstr "Greška: nevažeći 'wimax' parametar: '%s'." + +#: ../cli/src/network-manager.c:452 +#, c-format +msgid "Error: 'nm' command '%s' is not valid." +msgstr "Greška: 'nm' naredba '%s' nije važeća." + +#: ../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 "" +"Uporaba: %s [OPCIJE] OBJEKT { NAREDBA | help }\n" +"\n" +"OPCIJE\n" +" -t[erse] sažet ispis\n" +" -p[retty] uljepšan ispis\n" +" -m[ode] tabular|multiline način ispisa\n" +" -f[ields] |all|common određuje polja koja će se " +"ispisati\n" +" -e[scape] yes|no izbacuje razdjelnike stupaca u " +"vrijednostima\n" +" -n[ocheck] bez provjere verzija nmcli i " +"NetworkManagera\n" +" -v[ersion] prikazuje verziju programa\n" +" -h[elp] ispisuje ovu pomoć\n" +"\n" +"OBJEKT\n" +" nm NetworkManager stanje\n" +" con NetworkManager veze\n" +" dev uređaji kojima upravlja NetworkManager\n" +"\n" + +#: ../cli/src/nmcli.c:109 +#, c-format +msgid "Error: Object '%s' is unknown, try 'nmcli help'." +msgstr "Greška: Objekt '%s' je nepoznat, pokušajte 'nmcli help'." + +#: ../cli/src/nmcli.c:139 +#, c-format +msgid "Error: Option '--terse' is specified the second time." +msgstr "Greška: Opcija '--terse' označena dva puta." + +#: ../cli/src/nmcli.c:144 +#, c-format +msgid "Error: Option '--terse' is mutually exclusive with '--pretty'." +msgstr "Greška: Opcije '--terse' i '--pretty' se međusobno isključuju." + +#: ../cli/src/nmcli.c:152 +#, c-format +msgid "Error: Option '--pretty' is specified the second time." +msgstr "Greška: Opcija '--pretty' označena dva puta." + +#: ../cli/src/nmcli.c:157 +#, c-format +msgid "Error: Option '--pretty' is mutually exclusive with '--terse'." +msgstr "Greška: Opcije '--pretty' i '--terse' se međusobno isključuju." + +#: ../cli/src/nmcli.c:167 ../cli/src/nmcli.c:183 +#, c-format +msgid "Error: missing argument for '%s' option." +msgstr "Greška: nedostaje argument za opciju '%s'." + +#: ../cli/src/nmcli.c:176 ../cli/src/nmcli.c:192 +#, c-format +msgid "Error: '%s' is not valid argument for '%s' option." +msgstr "Greška: nevažeći argument '%s' za opciju '%s'." + +#: ../cli/src/nmcli.c:199 +#, c-format +msgid "Error: fields for '%s' options are missing." +msgstr "Greška: nedostaju polja za opciju '%s'." + +#: ../cli/src/nmcli.c:207 +#, c-format +msgid "nmcli tool, version %s\n" +msgstr "nmcli alat, verzija %s\n" + +#: ../cli/src/nmcli.c:213 +#, c-format +msgid "Error: Option '%s' is unknown, try 'nmcli -help'." +msgstr "Greška: Nepoznata opcija '%s', pokušajte 'nmcli -help'." + +#: ../cli/src/nmcli.c:232 +#, c-format +msgid "Caught signal %d, shutting down..." +msgstr "Primljen signal %d, isključujem..." + +#: ../cli/src/nmcli.c:257 +msgid "Error: Could not create NMClient object." +msgstr "Greška: Neuspješno stvaranje NMClient objekta." + +#: ../cli/src/nmcli.c:273 +msgid "Success" +msgstr "Uspjeh" + +#: ../cli/src/settings.c:423 +#, fuzzy, c-format +msgid "%d (hex-ascii-key)" +msgstr "%d (heksadekadski ascii ključ)" + +#: ../cli/src/settings.c:425 +#, c-format +msgid "%d (104/128-bit passphrase)" +msgstr "%d (104/128-bitna lozinka)" + +#: ../cli/src/settings.c:428 +#, c-format +msgid "%d (unknown)" +msgstr "%d (nepoznat)" + +#: ../cli/src/settings.c:454 +msgid "0 (unknown)" +msgstr "0 (nepoznat)" + +#: ../cli/src/settings.c:460 +msgid "any, " +msgstr "bilo koji, " + +#: ../cli/src/settings.c:462 +msgid "900 MHz, " +msgstr "900 MHz, " + +#: ../cli/src/settings.c:464 +msgid "1800 MHz, " +msgstr "1800 MHz, " + +#: ../cli/src/settings.c:466 +msgid "1900 MHz, " +msgstr "1900 MHz, " + +#: ../cli/src/settings.c:468 +msgid "850 MHz, " +msgstr "850 MHz, " + +#: ../cli/src/settings.c:470 +msgid "WCDMA 3GPP UMTS 2100 MHz, " +msgstr "WCDMA 3GPP UMTS 2100 MHz, " + +#: ../cli/src/settings.c:472 +msgid "WCDMA 3GPP UMTS 1800 MHz, " +msgstr "WCDMA 3GPP UMTS 1800 MHz, " + +#: ../cli/src/settings.c:474 +msgid "WCDMA 3GPP UMTS 1700/2100 MHz, " +msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, " + +#: ../cli/src/settings.c:476 +msgid "WCDMA 3GPP UMTS 800 MHz, " +msgstr "WCDMA 3GPP UMTS 800 MHz, " + +#: ../cli/src/settings.c:478 +msgid "WCDMA 3GPP UMTS 850 MHz, " +msgstr "WCDMA 3GPP UMTS 850 MHz, " + +#: ../cli/src/settings.c:480 +msgid "WCDMA 3GPP UMTS 900 MHz, " +msgstr "WCDMA 3GPP UMTS 900 MHz, " + +#: ../cli/src/settings.c:482 +msgid "WCDMA 3GPP UMTS 1700 MHz, " +msgstr "WCDMA 3GPP UMTS 1700 MHz, " + +#: ../cli/src/settings.c:566 ../cli/src/settings.c:732 +msgid "auto" +msgstr "automatski" + +#: ../cli/src/settings.c:727 ../cli/src/settings.c:730 +#: ../cli/src/settings.c:731 ../cli/src/utils.c:176 +msgid "not set" +msgstr "nije postavljen" + +#: ../cli/src/utils.c:128 +#, c-format +msgid "field '%s' has to be alone" +msgstr "polje '%s' mora biti samo" + +#: ../cli/src/utils.c:131 +#, c-format +msgid "invalid field '%s'" +msgstr "nevažeće polje '%s'" + +#: ../cli/src/utils.c:150 +#, c-format +msgid "Option '--terse' requires specifying '--fields'" +msgstr "Opcija '--terse' zahtijeva označavanje '--fields'" + +#: ../cli/src/utils.c:154 +#, c-format +msgid "Option '--terse' requires specific '--fields' option values , not '%s'" +msgstr "" +"Opcija '--terse' zahtijeva označene vrijednosti opcije '--fields', a ne '%s'" + +#: ../cli/src/utils.c:333 +#, c-format +msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus" +msgstr "" + +#: ../cli/src/utils.c:341 +#, fuzzy, c-format +msgid "Error: NameHasOwner request failed: %s" +msgstr "Greška: NameHasOwner zahtjev neuspješan: %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 "" +"Upozorenje: verzije nmcli (%s) i NetworkManager (%s) se ne podudaraju. " +"Korištenje " +"--nocheck zanemaruje ovo upozorenje.\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 "" +"Greška: verzije nmcli (%s) i NetworkManager (%s) se ne podudaraju. Korištenje " +"--nocheck prisiljava izvršavanje, uz moguće neočekivane rezultate.\n." + +#: ../libnm-util/crypto.c:133 +#, c-format +msgid "PEM key file had no end tag '%s'." +msgstr "Datoteka PEM ključa nema završnu oznaku '%s'." + +#: ../libnm-util/crypto.c:146 +#, c-format +msgid "Doesn't look like a PEM private key file." +msgstr "Ne izgleda kao datoteka PEM privatnog ključa." + +#: ../libnm-util/crypto.c:154 +#, c-format +msgid "Not enough memory to store PEM file data." +msgstr "Nedovoljno memorije za spremanje podataka PEM datoteke." + +#: ../libnm-util/crypto.c:170 +#, fuzzy, c-format +msgid "Malformed PEM file: Proc-Type was not first tag." +msgstr "Deformirana PEM datoteka: Proc-Type nije prva oznaka." + +#: ../libnm-util/crypto.c:178 +#, fuzzy, c-format +msgid "Malformed PEM file: unknown Proc-Type tag '%s'." +msgstr "Deformirana PEM datoteka: nepoznata Proc-Type oznaka '%s'." + +#: ../libnm-util/crypto.c:188 +#, fuzzy, c-format +msgid "Malformed PEM file: DEK-Info was not the second tag." +msgstr "Deformirana PEM datoteka: DEK-Info nije druga oznaka." + +#: ../libnm-util/crypto.c:199 +#, fuzzy, c-format +msgid "Malformed PEM file: no IV found in DEK-Info tag." +msgstr "Deformirana PEM datoteka: IV nije pronađen u DEK-Info oznaci." + +#: ../libnm-util/crypto.c:206 +#, fuzzy, c-format +msgid "Malformed PEM file: invalid format of IV in DEK-Info tag." +msgstr "Deformirana PEM datoteka: nevažeći IV oblik u DEK-Info oznaci." + +#: ../libnm-util/crypto.c:219 +#, fuzzy, c-format +msgid "Malformed PEM file: unknown private key cipher '%s'." +msgstr "Deformirana PEM datoteka: nepoznata šifra privatnog ključa '%s'." + +#: ../libnm-util/crypto.c:238 +#, c-format +msgid "Could not decode private key." +msgstr "Neuspješno dekodiranje privatnog ključa." + +#: ../libnm-util/crypto.c:284 +msgid "Failed to find expected PKCS#8 start tag." +msgstr "Neuspješno traženje očekivane PKCS#8 početne oznake." + +#: ../libnm-util/crypto.c:292 +#, c-format +msgid "Failed to find expected PKCS#8 end tag '%s'." +msgstr "Neuspješno traženje očekivane PKCS#8 krajnje oznake '%s'." + +#: ../libnm-util/crypto.c:312 +msgid "Not enough memory to store private key data." +msgstr "Nedovoljno memorije za spremanje podataka privatnog ključa." + +#: ../libnm-util/crypto.c:317 +msgid "Failed to decode PKCS#8 private key." +msgstr "Neuspješno dekodiranje PKCS#8 privatnog ključa." + +#: ../libnm-util/crypto.c:339 ../libnm-util/crypto.c:625 +#, c-format +msgid "Not enough memory to store certificate data." +msgstr "Nedovoljno memorije za spremanje podataka certifikata." + +#: ../libnm-util/crypto.c:365 +#, c-format +msgid "IV must be an even number of bytes in length." +msgstr "IV mora biti dugačak paran broj bajtova." + +#: ../libnm-util/crypto.c:374 +#, c-format +msgid "Not enough memory to store the IV." +msgstr "Nedovoljno memorije za spremanje IV-a." + +#: ../libnm-util/crypto.c:385 +#, c-format +msgid "IV contains non-hexadecimal digits." +msgstr "IV sadrži znamenke koje nisu heksadekadske." + +#: ../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 "Šifra privatnog ključa '%s' je nepoznata." + +#: ../libnm-util/crypto.c:432 +#, c-format +msgid "Not enough memory to decrypt private key." +msgstr "Nedovoljno memorije za dešifriranje privatnog ključa." + +#: ../libnm-util/crypto.c:497 +#, c-format +msgid "Not enough memory to store decrypted private key." +msgstr "Nedovoljno memorije za spremanje dešifriranog privatnog ključa." + +#: ../libnm-util/crypto.c:542 +#, c-format +msgid "Unable to determine private key type." +msgstr "Neuspješno određivanje vrste privatnog ključa." + +#: ../libnm-util/crypto.c:597 +#, c-format +msgid "PEM certificate had no start tag '%s'." +msgstr "PEM certifikat nema početnu oznaku '%s'." + +#: ../libnm-util/crypto.c:606 +#, c-format +msgid "PEM certificate had no end tag '%s'." +msgstr "PEM certifikat nema krajnju oznaku '%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 "" + +#: ../libnm-util/crypto_gnutls.c:155 +#, c-format +msgid "Invalid IV length (must be at least %zd)." +msgstr "" + +#: ../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 "" + +#: ../libnm-util/crypto_gnutls.c:181 +#, c-format +msgid "Failed to set symmetric key for decryption: %s / %s." +msgstr "" + +#: ../libnm-util/crypto_gnutls.c:190 +#, c-format +msgid "Failed to set IV for decryption: %s / %s." +msgstr "" + +#: ../libnm-util/crypto_gnutls.c:199 +#, c-format +msgid "Failed to decrypt the private key: %s / %s." +msgstr "" + +#: ../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 "" + +#: ../libnm-util/crypto_gnutls.c:302 +#, c-format +msgid "Failed to set symmetric key for encryption: %s / %s." +msgstr "" + +#: ../libnm-util/crypto_gnutls.c:312 +#, c-format +msgid "Failed to set IV for encryption: %s / %s." +msgstr "" + +#: ../libnm-util/crypto_gnutls.c:321 +#, c-format +msgid "Failed to encrypt the data: %s / %s." +msgstr "" + +#: ../libnm-util/crypto_gnutls.c:361 +#, c-format +msgid "Error initializing certificate data: %s" +msgstr "" + +#: ../libnm-util/crypto_gnutls.c:383 +#, c-format +msgid "Couldn't decode certificate: %s" +msgstr "" + +#: ../libnm-util/crypto_gnutls.c:407 +#, c-format +msgid "Couldn't initialize PKCS#12 decoder: %s" +msgstr "" + +#: ../libnm-util/crypto_gnutls.c:420 +#, c-format +msgid "Couldn't decode PKCS#12 file: %s" +msgstr "" + +#: ../libnm-util/crypto_gnutls.c:432 +#, c-format +msgid "Couldn't verify PKCS#12 file: %s" +msgstr "" + +#: ../libnm-util/crypto_gnutls.c:460 +#, c-format +msgid "Couldn't initialize PKCS#8 decoder: %s" +msgstr "" + +#: ../libnm-util/crypto_gnutls.c:483 +#, c-format +msgid "Couldn't decode PKCS#8 file: %s" +msgstr "" + +#: ../libnm-util/crypto_nss.c:56 +#, c-format +msgid "Failed to initialize the crypto engine: %d." +msgstr "" + +#: ../libnm-util/crypto_nss.c:107 +#, c-format +msgid "Failed to initialize the MD5 context: %d." +msgstr "" + +#: ../libnm-util/crypto_nss.c:175 +#, c-format +msgid "Invalid IV length (must be at least %d)." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../libnm-util/crypto_nss.c:478 +#, c-format +msgid "Couldn't convert password to UCS2: %d" +msgstr "" + +#: ../libnm-util/crypto_nss.c:506 +#, c-format +msgid "Couldn't initialize PKCS#12 decoder: %d" +msgstr "" + +#: ../libnm-util/crypto_nss.c:515 +#, c-format +msgid "Couldn't decode PKCS#12 file: %d" +msgstr "" + +#: ../libnm-util/crypto_nss.c:524 +#, c-format +msgid "Couldn't verify PKCS#12 file: %d" +msgstr "" + +#: ../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 "" + +#: ../libnm-util/nm-utils.c:2122 +#, c-format +msgid "Could not allocate memory for writing IV to PEM file." +msgstr "" + +#: ../libnm-util/nm-utils.c:2134 +#, c-format +msgid "Could not allocate memory for writing encrypted key to PEM file." +msgstr "" + +#: ../libnm-util/nm-utils.c:2153 +#, c-format +msgid "Could not allocate memory for PEM file data." +msgstr "" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1 +#| msgid "No network connection" +msgid "Allow control of network connections" +msgstr "Dozvoli upravljanje mrežnim vezama" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2 +#| msgid "Connecting to a wired network..." +msgid "Connection sharing via a protected WiFi network" +msgstr "Dijeljenje veze korištenjem zaštićene WiFi mreže" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3 +#| msgid "Connecting to a wired network..." +msgid "Connection sharing via an open WiFi network" +msgstr "Dijeljenje veze korištenjem otvorene WiFi mreže" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4 +msgid "Enable or disable WiFi devices" +msgstr "Omogućuje ili onemogućuje WiFi uređaje" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5 +msgid "Enable or disable WiMAX mobile broadband devices" +msgstr "Omogućuje ili onemogućuje WiMAX mobilne širokopojasne uređaje" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6 +msgid "Enable or disable mobile broadband devices" +msgstr "Omogućuje ili onemogućuje mobilne širokopojasne uređaje" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7 +msgid "Enable or disable system networking" +msgstr "" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8 +#| msgid "No network connection" +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 "No network connection" +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 "" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12 +#| msgid "Wireless network connection" +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 "" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:14 +msgid "" +"System policy prevents enabling or disabling WiMAX mobile broadband devices" +msgstr "" + +#: ../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 "" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:21 +msgid "System policy prevents sharing connections via a protected WiFi network" +msgstr "" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:22 +msgid "System policy prevents sharing connections via an open WiFi network" +msgstr "" + +#: ../src/main.c:530 +#, c-format +msgid "Invalid option. Please use --help to see a list of valid options.\n" +msgstr "Nevažeća opcija. Upišite --help za popis važećih opcija.\n" + +#: ../src/main.c:611 +#, c-format +msgid "%s. Please use --help to see a list of valid options.\n" +msgstr "%s. Upišite --help za popis važećih opcija.\n" + +#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:62 +msgid "# Created by NetworkManager\n" +msgstr "# Napravio NetworkManager\n" + +#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:69 +#, c-format +msgid "" +"# Merged from %s\n" +"\n" +msgstr "" +"# Spojeno iz %s\n" +"\n" + +#: ../src/dhcp-manager/nm-dhcp-manager.c:284 +msgid "no usable DHCP client could be found." +msgstr "nije pronađen upotrebljiv DHCP klijent." + +#: ../src/dhcp-manager/nm-dhcp-manager.c:293 +msgid "'dhclient' could be found." +msgstr "'dhclient' nije pronađen." + +#: ../src/dhcp-manager/nm-dhcp-manager.c:303 +msgid "'dhcpcd' could be found." +msgstr "'dhcpcd' nije pronađen." + +#: ../src/dhcp-manager/nm-dhcp-manager.c:311 +#, c-format +msgid "unsupported DHCP client '%s'" +msgstr "nepodržani DHCP klijent '%s'" + +#: ../src/dns-manager/nm-dns-manager.c:369 +#, fuzzy +msgid "NOTE: the libc resolver may not support more than 3 nameservers." +msgstr "OPASKA: libc resolver ne podržava više od 3 nameservera" + +#: ../src/dns-manager/nm-dns-manager.c:371 +msgid "The nameservers listed below may not be recognized." +msgstr "" + +#: ../src/logging/nm-logging.c:149 +#, fuzzy, c-format +msgid "Unknown log level '%s'" +msgstr "Nepoznata razina dnevnika '%s'" + +#: ../src/logging/nm-logging.c:174 +#, fuzzy, c-format +msgid "Unknown log domain '%s'" +msgstr "Nepoznata domena dnevnika '%s'" + +#: ../src/modem-manager/nm-modem-cdma.c:296 ../src/nm-device-bt.c:355 +#, c-format +msgid "CDMA connection %d" +msgstr "CDMA veza %d" + +#: ../src/modem-manager/nm-modem-gsm.c:499 ../src/nm-device-bt.c:351 +#, c-format +msgid "GSM connection %d" +msgstr "GSM veza %d" + +#: ../src/nm-device-bt.c:326 +#, c-format +#| msgid "No network connection" +msgid "PAN connection %d" +msgstr "PAN veza %d" + +#: ../src/nm-device-bt.c:359 +#, c-format +#| msgid "No network connection" +msgid "DUN connection %d" +msgstr "DUN veza %d" + +#: ../src/nm-device-ethernet.c:1681 +#, c-format +#| msgid "No network connection" +msgid "PPPoE connection %d" +msgstr "PPPoE veza %d" + +#: ../src/nm-device-ethernet.c:1681 ../src/settings/nm-settings-utils.c:50 +#, fuzzy, c-format +#| msgid "Wired network connection" +msgid "Wired connection %d" +msgstr "Spoj na žičanu mrežu %d" + +#: ../src/nm-device-olpc-mesh.c:423 +#, c-format +msgid "Mesh %d" +msgstr "Mreža %d" + +#: ../src/nm-manager.c:673 +#, c-format +#| msgid "No network connection" +msgid "VPN connection %d" +msgstr "VPN veza %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 "" + +#: ../src/nm-netlink-monitor.c:214 +msgid "error occurred while waiting for data on socket" +msgstr "" + +#: ../src/nm-netlink-monitor.c:254 +#, c-format +msgid "unable to connect to netlink for monitoring link status: %s" +msgstr "" + +#: ../src/nm-netlink-monitor.c:265 +#, c-format +msgid "unable to enable netlink handle credential passing: %s" +msgstr "" + +#: ../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 "" + +#: ../src/nm-netlink-monitor.c:376 +#, c-format +msgid "unable to allocate netlink link cache for monitoring link status: %s" +msgstr "" + +#: ../src/nm-netlink-monitor.c:502 +#, c-format +msgid "unable to join netlink group: %s" +msgstr "" + +#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642 +#, c-format +msgid "error updating link cache: %s" +msgstr "" + +#: ../src/settings/plugins/ifcfg-rh/reader.c:3512 +#: ../src/settings/plugins/ifnet/connection_parser.c:51 +msgid "System" +msgstr "Sustav" + +#~ msgid "Modify Wireless Networks" +#~ msgstr "Postavke bežičnih mreža" + +#~ msgid "Wireless Networks:" +#~ msgstr "Bežične mreže:" + +#~ msgid "Wireless Network Key Required" +#~ msgstr "Potreban je ključ bežične mreže" + +#~ msgid "_Login to Network" +#~ msgstr "_Prijava na mrežu" + +#~ msgid "" +#~ "Passphrase Required by Wireless " +#~ "Network\n" +#~ "\n" +#~ "A passphrase or encryption key is required to access the wireless network " +#~ "'%s'." +#~ msgstr "" +#~ "Potrebna je lozinka za bežičnu " +#~ "mrežu\n" +#~ "\n" +#~ "Za pristup mreži '%s', potrebna je lozinka ili ključ." + +#~ msgid "Key Type:" +#~ msgstr "Tip ključa:" + +#~ msgid "" +#~ "128-bit Passphrase (WEP)\n" +#~ "Ascii Key (WEP)\n" +#~ "Hex Key (WEP)" +#~ msgstr "" +#~ "128-bitna lozinka (WEP)\n" +#~ "Slovčani ključ (WEP)\n" +#~ "Heksadecimalni ključ (WEP)" + +#~ msgid "Passphrase:" +#~ msgstr "Lozinka:" + +#~ msgid "*" +#~ msgstr "*" + +#~ msgid "Ascii Key:" +#~ msgstr "Slovčani ključ" + +#~ msgid "Hex Key:" +#~ msgstr "Heksadecimalni ključ" + +#~ msgid "You must log in to access the private network %s" +#~ msgstr "Prijava je potrebna za pristup na mrežu %s" + +#~ msgid "Connected to an Ad-Hoc wireless network" +#~ msgstr "Spoj na Ad-Hoc bežičnu mrežu" + +#~ msgid "Wireless network connection to '%s' (%d%%)" +#~ msgstr "Spoj na bežičnu mrežu '%s' (%d%%)" + +#~ msgid "Connecting to wireless network '%s'..." +#~ msgstr "Spajanje na bežičnu mrežu '%s'..." + +#~ msgid "Scanning for wireless networks..." +#~ msgstr "Potraga za bežičnim mrežama..." + +#~ msgid "Other Wireless Networks..." +#~ msgstr "Ostale bežične mreže..." + +#~ msgid "Create new Wireless Network..." +#~ msgstr "Stvori novu bečičnu mrežu..." + +#~ msgid "No network devices have been found" +#~ msgstr "Nema mrežnih uređaja" + +#~ msgid "NetworkManager is not running..." +#~ msgstr "NetworkManager nije pokrenut..." + +#~ msgid "Create new wireless network" +#~ msgstr "Stvori novu bečičnu mrežu" + +#~ msgid "" +#~ "Enter the ESSID and security settings of the wireless network you wish to " +#~ "create." +#~ msgstr "" +#~ "Unesi ESSID i sigurnosne postavke bežične mreže koju treba stvoriti." + +#~ msgid "Custom wireless network" +#~ msgstr "Posebna bežična mreža" + +#~ msgid "" +#~ "Enter the ESSID of the wireless network to which you wish to connect." +#~ msgstr "" +#~ "Unesi ESSID i sigurnosne postavke bežične mreže na koju se treba spojiti." + +#~ msgid "" +#~ "The NetworkManager Applet could not find some required resources (the " +#~ "glade file was not found)." +#~ msgstr "" +#~ "NetworkManager ne može naći potrebne datoteke (glade datoteka nije " +#~ "pronađena)." + +#~ msgid "Wireless _adapter:" +#~ msgstr "Bežični _uređaj:" + +#~ msgid "Wireless _Network:" +#~ msgstr "Bežična _mreža:" + +#~ msgid "Connect with encryption enabled" +#~ msgstr "Spoji se sa enkripcijom" + +#~ msgid "Wired Network (%s)" +#~ msgstr "Žičana mreža (%s)" + +#~ msgid "Wired Network" +#~ msgstr "Žičana mreža" + +#~ msgid "Wireless Network (%s)" +#~ msgid_plural "Wireless Networks (%s)" +#~ msgstr[0] "Bežična mreža (%s)" +#~ msgstr[1] "Bežične mreže (%s)" -#: panel-applet/menu-info.c:179 -msgid "Wireless Network" -msgid_plural "Wireless Networks" -msgstr[0] "Bežična mreža" -msgstr[1] "Bežične mreže" +#~ msgid "Wireless Network" +#~ msgid_plural "Wireless Networks" +#~ msgstr[0] "Bežična mreža" +#~ msgstr[1] "Bežične mreže" -#: panel-applet/menu-info.c:316 -msgid " (invalid Unicode)" -msgstr " (greška u unicodu)" +#~ msgid " (invalid Unicode)" +#~ msgstr " (greška u unicodu)" -#: examples/python/systray/eggtrayicon.c:111 -msgid "Orientation" -msgstr "Orjentacija" +#~ msgid "Orientation" +#~ msgstr "Orjentacija" -#: examples/python/systray/eggtrayicon.c:112 -msgid "The orientation of the tray." -msgstr "Orjentacija ladice." +#~ msgid "The orientation of the tray." +#~ msgstr "Orjentacija ladice." diff --git a/po/pl.po b/po/pl.po index ceb85738..7aeb3733 100644 --- a/po/pl.po +++ b/po/pl.po @@ -8,50 +8,50 @@ msgid "" msgstr "" "Project-Id-Version: NetworkManager\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" -"product=NetworkManager&component=general\n" -"POT-Creation-Date: 2011-03-10 15:25+0000\n" -"PO-Revision-Date: 2011-03-10 17:07+0100\n" +"product=NetworkManager&keywords=I18N+L10N&component=general\n" +"POT-Creation-Date: 2011-09-24 03:25+0000\n" +"PO-Revision-Date: 2011-09-28 21:47+0200\n" "Last-Translator: Piotr Drąg \n" "Language-Team: Polish \n" -"Language: pl\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: pl\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-Poedit-Language: Polish\n" "X-Poedit-Country: Poland\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 "NAZWA" #. 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 "URZĄDZENIA" #. 2 -#: ../cli/src/connections.c:65 +#: ../cli/src/connections.c:67 msgid "DEFAULT" msgstr "DOMYŚLNE" #. 3 -#: ../cli/src/connections.c:66 +#: ../cli/src/connections.c:68 msgid "SPEC-OBJECT" msgstr "KONKRETNY-OBIEKT" #. 4 -#: ../cli/src/connections.c:67 +#: ../cli/src/connections.c:69 msgid "VPN" msgstr "VPN" @@ -60,8 +60,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 "ŚCIEŻKA-DO-DBUS" @@ -69,397 +69,406 @@ msgstr "ŚCIEŻKA-DO-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 "TYP" #. 2 -#: ../cli/src/connections.c:79 +#: ../cli/src/connections.c:81 msgid "TIMESTAMP" msgstr "OKRES-CZASU" #. 3 -#: ../cli/src/connections.c:80 +#: ../cli/src/connections.c:82 msgid "TIMESTAMP-REAL" msgstr "RZECZYWISTY-OKRES-CZASU" #. 4 -#: ../cli/src/connections.c:81 +#: ../cli/src/connections.c:83 msgid "AUTOCONNECT" msgstr "ŁĄCZENIE-AUTOMATYCZNE" #. 5 -#: ../cli/src/connections.c:82 +#: ../cli/src/connections.c:84 msgid "READONLY" msgstr "TYLKO-DO-ODCZYTU" -#: ../cli/src/connections.c:166 +#: ../cli/src/connections.c:153 #, c-format msgid "" "Usage: nmcli con { COMMAND | help }\n" -" COMMAND := { list | status | up | down }\n" +" COMMAND := { list | status | up | down | delete }\n" "\n" " list [id | uuid ]\n" " status\n" -" up id | uuid [iface ] [ap ] [nsp ] [--" +" up id | uuid [iface ] [ap ] [nsp ] [--" "nowait] [--timeout ]\n" -" up id | uuid [iface ] [ap ] [--nowait] [--timeout " +" up id | uuid [iface ] [ap ] [--nowait] [--timeout " "]\n" " down id | uuid \n" +" delete id | uuid \n" msgstr "" "Użycie: nmcli con { POLECENIE | help }\n" -" POLECENIE := { list | status | up | down }\n" +" POLECENIE := { list | status | up | down | delete }\n" "\n" " list [id | uuid ]\n" " status\n" " up id | uuid [iface ] [ap " -"] [nsp ] [--nowait] [--timeout ]\n" +"] [nsp ] [--nowait] [--timeout ]\n" " up id | uuid [iface ] [ap " -"] [--nowait] [--timeout ]\n" +"] [--nowait] [--timeout ]\n" " down id | uuid \n" +" delete id | uuid \n" -#: ../cli/src/connections.c:219 ../cli/src/connections.c:541 +#: ../cli/src/connections.c:208 ../cli/src/connections.c:532 #, c-format msgid "Error: 'con list': %s" msgstr "Błąd: \"con list\": %s" -#: ../cli/src/connections.c:221 ../cli/src/connections.c:543 +#: ../cli/src/connections.c:210 ../cli/src/connections.c:534 #, c-format msgid "Error: 'con list': %s; allowed fields: %s" msgstr "Błąd: \"con list\": %s; dozwolone pola: %s" -#: ../cli/src/connections.c:229 +#: ../cli/src/connections.c:218 msgid "Connection details" msgstr "Szczegóły połączenia" -#: ../cli/src/connections.c:416 +#: ../cli/src/connections.c:407 msgid "never" msgstr "nigdy" #. "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/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/connections.c:408 ../cli/src/connections.c:409 +#: ../cli/src/connections.c:587 ../cli/src/connections.c:589 +#: ../cli/src/devices.c:499 ../cli/src/devices.c:552 ../cli/src/devices.c:677 +#: ../cli/src/devices.c:703 ../cli/src/devices.c:704 ../cli/src/devices.c:705 +#: ../cli/src/devices.c:706 ../cli/src/devices.c:707 ../cli/src/settings.c:560 +#: ../cli/src/settings.c:632 ../cli/src/settings.c:753 +#: ../cli/src/settings.c:1041 ../cli/src/settings.c:1042 +#: ../cli/src/settings.c:1044 ../cli/src/settings.c:1046 +#: ../cli/src/settings.c:1047 ../cli/src/settings.c:1177 +#: ../cli/src/settings.c:1178 ../cli/src/settings.c:1179 +#: ../cli/src/settings.c:1180 ../cli/src/settings.c:1259 +#: ../cli/src/settings.c:1260 ../cli/src/settings.c:1261 +#: ../cli/src/settings.c:1262 ../cli/src/settings.c:1263 +#: ../cli/src/settings.c:1264 ../cli/src/settings.c:1265 +#: ../cli/src/settings.c:1266 ../cli/src/settings.c:1267 +#: ../cli/src/settings.c:1268 ../cli/src/settings.c:1269 +#: ../cli/src/settings.c:1270 ../cli/src/settings.c:1271 +#: ../cli/src/settings.c:1346 msgid "yes" msgstr "tak" -#: ../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/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/connections.c:408 ../cli/src/connections.c:409 +#: ../cli/src/connections.c:587 ../cli/src/connections.c:589 +#: ../cli/src/devices.c:499 ../cli/src/devices.c:552 ../cli/src/devices.c:677 +#: ../cli/src/devices.c:703 ../cli/src/devices.c:704 ../cli/src/devices.c:705 +#: ../cli/src/devices.c:706 ../cli/src/devices.c:707 ../cli/src/settings.c:560 +#: ../cli/src/settings.c:562 ../cli/src/settings.c:632 +#: ../cli/src/settings.c:753 ../cli/src/settings.c:1041 +#: ../cli/src/settings.c:1042 ../cli/src/settings.c:1044 +#: ../cli/src/settings.c:1046 ../cli/src/settings.c:1047 +#: ../cli/src/settings.c:1177 ../cli/src/settings.c:1178 +#: ../cli/src/settings.c:1179 ../cli/src/settings.c:1180 +#: ../cli/src/settings.c:1259 ../cli/src/settings.c:1260 +#: ../cli/src/settings.c:1261 ../cli/src/settings.c:1262 +#: ../cli/src/settings.c:1263 ../cli/src/settings.c:1264 +#: ../cli/src/settings.c:1265 ../cli/src/settings.c:1266 +#: ../cli/src/settings.c:1267 ../cli/src/settings.c:1268 +#: ../cli/src/settings.c:1269 ../cli/src/settings.c:1270 +#: ../cli/src/settings.c:1271 ../cli/src/settings.c:1346 msgid "no" msgstr "nie" -#: ../cli/src/connections.c:492 +#: ../cli/src/connections.c:483 msgid "Connection list" msgstr "Lista połączeń" -#: ../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:496 ../cli/src/connections.c:1356 +#: ../cli/src/connections.c:1371 ../cli/src/connections.c:1380 +#: ../cli/src/connections.c:1390 ../cli/src/connections.c:1402 +#: ../cli/src/connections.c:1497 ../cli/src/connections.c:1580 +#: ../cli/src/devices.c:1180 ../cli/src/devices.c:1190 +#: ../cli/src/devices.c:1304 ../cli/src/devices.c:1312 +#: ../cli/src/devices.c:1525 ../cli/src/devices.c:1532 #, c-format msgid "Error: %s argument is missing." msgstr "Błąd: brak parametru %s." -#: ../cli/src/connections.c:518 +#: ../cli/src/connections.c:509 #, c-format msgid "Error: %s - no such connection." msgstr "Błąd: %s - nie ma takiego połączenia." -#: ../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:515 ../cli/src/connections.c:1415 +#: ../cli/src/connections.c:1514 ../cli/src/connections.c:1587 +#: ../cli/src/devices.c:977 ../cli/src/devices.c:1057 +#: ../cli/src/devices.c:1204 ../cli/src/devices.c:1318 +#: ../cli/src/devices.c:1538 #, c-format msgid "Unknown parameter: %s\n" msgstr "Nieznany parametr: %s\n" -#: ../cli/src/connections.c:533 +#: ../cli/src/connections.c:524 #, c-format msgid "Error: no valid parameter specified." msgstr "Błąd: nie podano prawidłowego parametru." -#: ../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:539 ../cli/src/connections.c:1668 +#: ../cli/src/devices.c:1746 ../cli/src/network-manager.c:456 #, c-format msgid "Error: %s." msgstr "Błąd: %s." -#: ../cli/src/connections.c:636 +#: ../cli/src/connections.c:627 #, c-format msgid "Error: 'con status': %s" msgstr "Błąd: \"con status\": %s" -#: ../cli/src/connections.c:638 +#: ../cli/src/connections.c:629 #, c-format msgid "Error: 'con status': %s; allowed fields: %s" msgstr "Błąd: \"con status\": %s; dozwolone pola: %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:637 ../cli/src/connections.c:1430 +#: ../cli/src/connections.c:1529 ../cli/src/connections.c:1601 +#: ../cli/src/devices.c:1004 ../cli/src/devices.c:1066 +#: ../cli/src/devices.c:1219 ../cli/src/devices.c:1348 +#: ../cli/src/devices.c:1567 #, c-format msgid "Error: Can't find out if NetworkManager is running: %s." msgstr "" "Błąd: nie można ustalić, czy usługa NetworkManager jest uruchomiona: %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:641 ../cli/src/connections.c:1434 +#: ../cli/src/connections.c:1533 ../cli/src/connections.c:1605 +#: ../cli/src/devices.c:1008 ../cli/src/devices.c:1070 +#: ../cli/src/devices.c:1223 ../cli/src/devices.c:1352 +#: ../cli/src/devices.c:1571 #, c-format msgid "Error: NetworkManager is not running." msgstr "Błąd: usługa NetworkManager nie jest uruchomiona." -#: ../cli/src/connections.c:658 +#: ../cli/src/connections.c:649 msgid "Active connections" msgstr "Aktywne połączenia" -#: ../cli/src/connections.c:1128 +#: ../cli/src/connections.c:1073 #, c-format msgid "no active connection on device '%s'" msgstr "brak aktywnych połączeń na urządzeniu \"%s\"" -#: ../cli/src/connections.c:1136 +#: ../cli/src/connections.c:1081 #, c-format msgid "no active connection or device" msgstr "brak aktywnych połączeń na urządzeń" -#: ../cli/src/connections.c:1207 +#: ../cli/src/connections.c:1152 #, c-format msgid "device '%s' not compatible with connection '%s'" msgstr "urządzenie \"%s\" nie jest zgodne z połączeniem \"%s\"" -#: ../cli/src/connections.c:1209 +#: ../cli/src/connections.c:1154 #, c-format msgid "no device found for connection '%s'" msgstr "nie odnaleziono urządzenia dla połączenia \"%s\"" -#: ../cli/src/connections.c:1220 +#: ../cli/src/connections.c:1165 msgid "activating" msgstr "aktywowanie" -#: ../cli/src/connections.c:1222 +#: ../cli/src/connections.c:1167 msgid "activated" msgstr "aktywowano" -#: ../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:1169 ../cli/src/devices.c:294 +msgid "deactivating" +msgstr "deaktywowanie" + +#: ../cli/src/connections.c:1172 ../cli/src/connections.c:1195 +#: ../cli/src/connections.c:1228 ../cli/src/devices.c:298 +#: ../cli/src/devices.c:678 ../cli/src/network-manager.c:111 +#: ../cli/src/network-manager.c:173 ../cli/src/network-manager.c:176 +#: ../cli/src/network-manager.c:185 ../cli/src/network-manager.c:291 +#: ../cli/src/network-manager.c:346 ../cli/src/network-manager.c:384 +#: ../cli/src/network-manager.c:423 ../cli/src/settings.c:513 +#: ../cli/src/utils.c:397 msgid "unknown" msgstr "nieznane" -#: ../cli/src/connections.c:1234 +#: ../cli/src/connections.c:1181 msgid "VPN connecting (prepare)" msgstr "Łączenie z VPN (przygotowanie)" -#: ../cli/src/connections.c:1236 +#: ../cli/src/connections.c:1183 msgid "VPN connecting (need authentication)" msgstr "Łączenie z VPN (wymaga uwierzytelnienia)" -#: ../cli/src/connections.c:1238 +#: ../cli/src/connections.c:1185 msgid "VPN connecting" msgstr "Łączenie z VPN" -#: ../cli/src/connections.c:1240 +#: ../cli/src/connections.c:1187 msgid "VPN connecting (getting IP configuration)" msgstr "Łączenie z VPN (pobieranie konfiguracji adresu IP)" -#: ../cli/src/connections.c:1242 +#: ../cli/src/connections.c:1189 msgid "VPN connected" msgstr "Połączono z VPN" -#: ../cli/src/connections.c:1244 +#: ../cli/src/connections.c:1191 msgid "VPN connection failed" msgstr "Połączenie z VPN się nie powiodło" -#: ../cli/src/connections.c:1246 +#: ../cli/src/connections.c:1193 msgid "VPN disconnected" msgstr "Rozłączono z VPN" -#: ../cli/src/connections.c:1257 +#: ../cli/src/connections.c:1204 msgid "unknown reason" msgstr "nieznany powód" -#: ../cli/src/connections.c:1259 +#: ../cli/src/connections.c:1206 msgid "none" msgstr "brak" -#: ../cli/src/connections.c:1261 +#: ../cli/src/connections.c:1208 msgid "the user was disconnected" msgstr "użytkownik został rozłączony" -#: ../cli/src/connections.c:1263 +#: ../cli/src/connections.c:1210 msgid "the base network connection was interrupted" msgstr "podstawowe połączenie sieciowe zostało przerwane" -#: ../cli/src/connections.c:1265 +#: ../cli/src/connections.c:1212 msgid "the VPN service stopped unexpectedly" msgstr "usługa VPN została nieoczekiwanie zatrzymana" -#: ../cli/src/connections.c:1267 +#: ../cli/src/connections.c:1214 msgid "the VPN service returned invalid configuration" msgstr "usługa VPN zwróciła nieprawidłową konfigurację" -#: ../cli/src/connections.c:1269 +#: ../cli/src/connections.c:1216 msgid "the connection attempt timed out" msgstr "próba połączenia przekroczyła czas oczekiwania" -#: ../cli/src/connections.c:1271 +#: ../cli/src/connections.c:1218 msgid "the VPN service did not start in time" msgstr "usługa VPN nie została uruchomiona w czasie" -#: ../cli/src/connections.c:1273 +#: ../cli/src/connections.c:1220 msgid "the VPN service failed to start" msgstr "uruchomienie usługi VPN się nie powiodło" -#: ../cli/src/connections.c:1275 +#: ../cli/src/connections.c:1222 msgid "no valid VPN secrets" msgstr "brak prawidłowych haseł VPN" -#: ../cli/src/connections.c:1277 +#: ../cli/src/connections.c:1224 msgid "invalid VPN secrets" msgstr "nieprawidłowe hasła VPN" -#: ../cli/src/connections.c:1279 +#: ../cli/src/connections.c:1226 msgid "the connection was removed" msgstr "połączenie zostało usunięte" -#: ../cli/src/connections.c:1293 +#: ../cli/src/connections.c:1240 #, c-format msgid "state: %s\n" msgstr "stan: %s\n" -#: ../cli/src/connections.c:1296 ../cli/src/connections.c:1322 +#: ../cli/src/connections.c:1243 ../cli/src/connections.c:1269 #, c-format msgid "Connection activated\n" msgstr "Aktywowano połączenie\n" -#: ../cli/src/connections.c:1299 +#: ../cli/src/connections.c:1246 #, c-format msgid "Error: Connection activation failed." msgstr "Błąd: aktywacja połączenia się nie powiodła." -#: ../cli/src/connections.c:1318 +#: ../cli/src/connections.c:1265 #, c-format msgid "state: %s (%d)\n" msgstr "stan: %s (%d)\n" -#: ../cli/src/connections.c:1328 +#: ../cli/src/connections.c:1275 #, c-format msgid "Error: Connection activation failed: %s." msgstr "Błąd: aktywacja połączenia się nie powiodła: %s." -#: ../cli/src/connections.c:1345 ../cli/src/devices.c:1134 +#: ../cli/src/connections.c:1292 ../cli/src/devices.c:1126 #, c-format msgid "Error: Timeout %d sec expired." msgstr "Błąd: przekroczono czas oczekiwania o %d sekund." -#: ../cli/src/connections.c:1388 +#: ../cli/src/connections.c:1305 #, c-format msgid "Error: Connection activation failed: %s" msgstr "Błąd: aktywacja połączenia się nie powiodła: %s" -#: ../cli/src/connections.c:1402 -#, c-format -msgid "Error: Obtaining active connection for '%s' failed." -msgstr "Błąd: uzyskanie aktywnego połączenia dla \"%s\" się nie powiodło." - -#: ../cli/src/connections.c:1411 +#: ../cli/src/connections.c:1311 #, c-format msgid "Active connection state: %s\n" msgstr "Stan aktywnego połączenia: %s\n" -#: ../cli/src/connections.c:1412 +#: ../cli/src/connections.c:1312 #, c-format msgid "Active connection path: %s\n" msgstr "Ścieżka aktywnego połączenia: %s\n" -#: ../cli/src/connections.c:1465 ../cli/src/connections.c:1606 +#: ../cli/src/connections.c:1364 ../cli/src/connections.c:1505 +#: ../cli/src/connections.c:1614 #, c-format msgid "Error: Unknown connection: %s." msgstr "Błąd: nieznane połączenie: %s." -#: ../cli/src/connections.c:1511 ../cli/src/devices.c:1206 +#: ../cli/src/connections.c:1410 ../cli/src/devices.c:1198 #, c-format msgid "Error: timeout value '%s' is not valid." msgstr "Błąd: wartość czasu oczekiwania \"%s\" jest nieprawidłowa." -#: ../cli/src/connections.c:1524 ../cli/src/connections.c:1623 +#: ../cli/src/connections.c:1423 ../cli/src/connections.c:1522 +#: ../cli/src/connections.c:1594 #, c-format msgid "Error: id or uuid has to be specified." msgstr "Błąd: należy podać identyfikator lub UUID." -#: ../cli/src/connections.c:1554 +#: ../cli/src/connections.c:1451 #, c-format msgid "Error: No suitable device found: %s." msgstr "Błąd: nie odnaleziono odpowiedniego urządzenia: %s" -#: ../cli/src/connections.c:1556 +#: ../cli/src/connections.c:1453 #, c-format msgid "Error: No suitable device found." msgstr "Błąd: nie odnaleziono odpowiedniego urządzenia." -#: ../cli/src/connections.c:1659 +#: ../cli/src/connections.c:1558 #, c-format msgid "Warning: Connection not active\n" msgstr "Ostrzeżenie: połączenie nie jest aktywne\n" -#: ../cli/src/connections.c:1697 +#: ../cli/src/connections.c:1659 #, c-format msgid "Error: 'con' command '%s' is not valid." msgstr "Błąd: polecenie \"con\" \"%s\" jest nieprawidłowe." -#: ../cli/src/connections.c:1762 +#: ../cli/src/connections.c:1724 #, c-format msgid "Error: could not connect to D-Bus." msgstr "Błąd: nie można połączyć się z D-Bus." -#: ../cli/src/connections.c:1769 +#: ../cli/src/connections.c:1732 #, c-format msgid "Error: Could not get system settings." msgstr "Błąd: nie można uzyskać ustawień systemu." -#: ../cli/src/connections.c:1779 +#: ../cli/src/connections.c:1742 #, c-format msgid "Error: Can't obtain connections: settings service is not running." msgstr "" @@ -468,222 +477,222 @@ 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 "URZĄDZENIE" #. 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 "STAN" -#: ../cli/src/devices.c:76 +#: ../cli/src/devices.c:78 msgid "GENERAL" msgstr "OGÓLNE" #. 0 -#: ../cli/src/devices.c:77 +#: ../cli/src/devices.c:79 msgid "CAPABILITIES" msgstr "MOŻLIWOŚCI" #. 1 -#: ../cli/src/devices.c:78 +#: ../cli/src/devices.c:80 msgid "WIFI-PROPERTIES" msgstr "WŁAŚCIWOŚCI-WIFI" #. 2 -#: ../cli/src/devices.c:79 +#: ../cli/src/devices.c:81 msgid "AP" msgstr "PUNKT-DOSTĘPOWY" #. 3 -#: ../cli/src/devices.c:80 +#: ../cli/src/devices.c:82 msgid "WIRED-PROPERTIES" msgstr "WŁAŚCIWOŚCI-POŁĄCZENIA-PRZEWODOWEGO" #. 4 -#: ../cli/src/devices.c:81 +#: ../cli/src/devices.c:83 msgid "WIMAX-PROPERTIES" msgstr "WŁAŚCIWOŚCI-WIMAX" #. 5 #. 0 -#: ../cli/src/devices.c:82 ../cli/src/devices.c:223 +#: ../cli/src/devices.c:84 ../cli/src/devices.c:225 msgid "NSP" msgstr "NSP" #. 6 -#: ../cli/src/devices.c:83 +#: ../cli/src/devices.c:85 msgid "IP4-SETTINGS" msgstr "USTAWIENIA-IP4" #. 7 -#: ../cli/src/devices.c:84 +#: ../cli/src/devices.c:86 msgid "IP4-DNS" msgstr "IP4-DNS" #. 8 -#: ../cli/src/devices.c:85 +#: ../cli/src/devices.c:87 msgid "IP6-SETTINGS" msgstr "USTAWIENIA-IP6" #. 9 -#: ../cli/src/devices.c:86 +#: ../cli/src/devices.c:88 msgid "IP6-DNS" msgstr "IP6-DNS" #. 2 -#: ../cli/src/devices.c:102 +#: ../cli/src/devices.c:104 msgid "DRIVER" msgstr "STEROWNIK" #. 3 -#: ../cli/src/devices.c:103 +#: ../cli/src/devices.c:105 msgid "HWADDR" msgstr "ADRES-SPRZĘTOWY" #. 0 -#: ../cli/src/devices.c:113 +#: ../cli/src/devices.c:115 msgid "CARRIER-DETECT" msgstr "WYKRYWANIE-OPERATORA" #. 1 -#: ../cli/src/devices.c:114 +#: ../cli/src/devices.c:116 msgid "SPEED" msgstr "PRĘDKOŚĆ" #. 0 -#: ../cli/src/devices.c:123 +#: ../cli/src/devices.c:125 msgid "CARRIER" msgstr "OPERATOR" #. 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 +#: ../cli/src/devices.c:149 msgid "CTR-FREQ" msgstr "CZĘSTOTLIWOŚĆ-CTR" #. 1 -#: ../cli/src/devices.c:148 +#: ../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 +#: ../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 "ADRES" #. 1 -#: ../cli/src/devices.c:162 ../cli/src/devices.c:173 +#: ../cli/src/devices.c:164 ../cli/src/devices.c:175 msgid "PREFIX" msgstr "PRZEDROSTEK" #. 2 -#: ../cli/src/devices.c:163 ../cli/src/devices.c:174 +#: ../cli/src/devices.c:165 ../cli/src/devices.c:176 msgid "GATEWAY" msgstr "BRAMA" #. 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 "TRYB" #. 3 -#: ../cli/src/devices.c:204 +#: ../cli/src/devices.c:206 msgid "FREQ" msgstr "CZĘSTOTLIWOŚĆ" #. 4 -#: ../cli/src/devices.c:205 +#: ../cli/src/devices.c:207 msgid "RATE" msgstr "OCENA" #. 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 "SYGNAŁ" #. 6 -#: ../cli/src/devices.c:207 +#: ../cli/src/devices.c:209 msgid "SECURITY" msgstr "ZABEZPIECZENIA" #. 7 -#: ../cli/src/devices.c:208 +#: ../cli/src/devices.c:210 msgid "WPA-FLAGS" msgstr "FLAGI-WPA" #. 8 -#: ../cli/src/devices.c:209 +#: ../cli/src/devices.c:211 msgid "RSN-FLAGS" msgstr "FLAGI-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 "AKTYWNOŚĆ" -#: ../cli/src/devices.c:254 +#: ../cli/src/devices.c:246 #, c-format msgid "" "Usage: nmcli dev { COMMAND | help }\n" @@ -695,7 +704,7 @@ msgid "" " status\n" " list [iface ]\n" " disconnect iface [--nowait] [--timeout ]\n" -" wifi [list [iface ] [hwaddr ]]\n" +" wifi [list [iface ] [bssid ]]\n" " wimax [list [iface ] [nsp ]]\n" "\n" msgstr "" @@ -708,312 +717,312 @@ msgstr "" " status\n" " list [iface [--nowait] [--timeout ]\n" -" wifi [list [iface ] [hwaddr ]]\n" +" wifi [list [iface ] [bssid ]]\n" " wimax [list [iface ] [nsp ]]\n" -#: ../cli/src/devices.c:282 +#: ../cli/src/devices.c:274 msgid "unmanaged" msgstr "niezarządzane" -#: ../cli/src/devices.c:284 +#: ../cli/src/devices.c:276 msgid "unavailable" msgstr "niedostępne" -#: ../cli/src/devices.c:286 ../cli/src/network-manager.c:113 +#: ../cli/src/devices.c:278 ../cli/src/network-manager.c:108 msgid "disconnected" msgstr "rozłączono" -#: ../cli/src/devices.c:288 +#: ../cli/src/devices.c:280 msgid "connecting (prepare)" msgstr "łączenie (przygotowanie)" -#: ../cli/src/devices.c:290 +#: ../cli/src/devices.c:282 msgid "connecting (configuring)" msgstr "łączenie (konfigurowanie)" -#: ../cli/src/devices.c:292 +#: ../cli/src/devices.c:284 msgid "connecting (need authentication)" msgstr "łączenie (wymaga uwierzytelnienia)" -#: ../cli/src/devices.c:294 +#: ../cli/src/devices.c:286 msgid "connecting (getting IP configuration)" msgstr "łączenie (pobieranie konfiguracji adresu IP)" -#: ../cli/src/devices.c:296 +#: ../cli/src/devices.c:288 msgid "connecting (checking IP connectivity)" msgstr "łączenie (sprawdzanie łączności IP)" -#: ../cli/src/devices.c:298 +#: ../cli/src/devices.c:290 msgid "connecting (starting secondary connections)" msgstr "łączenie (uruchamianie drugorzędnych połączeń)" -#: ../cli/src/devices.c:300 ../cli/src/network-manager.c:109 +#: ../cli/src/devices.c:292 ../cli/src/network-manager.c:104 msgid "connected" msgstr "połączono" -#: ../cli/src/devices.c:302 -msgid "deactivating" -msgstr "deaktywowanie" - -#: ../cli/src/devices.c:304 +#: ../cli/src/devices.c:296 msgid "connection failed" msgstr "połączenie się nie powiodło" -#: ../cli/src/devices.c:329 ../cli/src/devices.c:339 ../cli/src/devices.c:499 -#: ../cli/src/devices.c:543 +#: ../cli/src/devices.c:321 ../cli/src/devices.c:331 ../cli/src/devices.c:491 +#: ../cli/src/devices.c:535 msgid "Unknown" msgstr "Nieznane" -#: ../cli/src/devices.c:372 +#: ../cli/src/devices.c:364 msgid "(none)" msgstr "(brak)" -#: ../cli/src/devices.c:397 +#: ../cli/src/devices.c:389 #, c-format msgid "%s: error converting IP4 address 0x%X" msgstr "%s: błąd podczas konwertowania adresu IPv4 0x%X" -#: ../cli/src/devices.c:468 +#: ../cli/src/devices.c:460 #, c-format msgid "%u MHz" msgstr "%u MHz" -#: ../cli/src/devices.c:469 +#: ../cli/src/devices.c:461 #, c-format msgid "%u MB/s" msgstr "%u MB/s" -#: ../cli/src/devices.c:478 +#: ../cli/src/devices.c:470 msgid "Encrypted: " msgstr "Zaszyfrowane: " -#: ../cli/src/devices.c:483 +#: ../cli/src/devices.c:475 msgid "WEP " msgstr "WEP " -#: ../cli/src/devices.c:485 +#: ../cli/src/devices.c:477 msgid "WPA " msgstr "WPA " -#: ../cli/src/devices.c:487 +#: ../cli/src/devices.c:479 msgid "WPA2 " msgstr "WPA2 " -#: ../cli/src/devices.c:490 +#: ../cli/src/devices.c:482 msgid "Enterprise " msgstr "Enterprise " -#: ../cli/src/devices.c:499 +#: ../cli/src/devices.c:491 msgid "Ad-Hoc" msgstr "Ad-hoc" -#: ../cli/src/devices.c:499 +#: ../cli/src/devices.c:491 msgid "Infrastructure" msgstr "Infrastruktura" -#: ../cli/src/devices.c:534 +#: ../cli/src/devices.c:526 msgid "Home" msgstr "Dom" -#: ../cli/src/devices.c:537 +#: ../cli/src/devices.c:529 msgid "Partner" msgstr "Partner" -#: ../cli/src/devices.c:540 +#: ../cli/src/devices.c:532 msgid "Roaming" msgstr "Roaming" -#: ../cli/src/devices.c:610 +#: ../cli/src/devices.c:602 #, c-format msgid "Error: 'dev list': %s" msgstr "Błąd: \"dev list\": %s" -#: ../cli/src/devices.c:612 +#: ../cli/src/devices.c:604 #, c-format msgid "Error: 'dev list': %s; allowed fields: %s" msgstr "Błąd: \"dev list\": %s; dozwolone pola: %s" -#: ../cli/src/devices.c:621 +#: ../cli/src/devices.c:613 msgid "Device details" msgstr "Informacje o urządzeniu" -#: ../cli/src/devices.c:655 ../cli/src/devices.c:1150 ../cli/src/utils.c:342 +#: ../cli/src/devices.c:647 ../cli/src/devices.c:1142 ../cli/src/utils.c:343 msgid "(unknown)" msgstr "(nieznane)" -#: ../cli/src/devices.c:656 +#: ../cli/src/devices.c:648 msgid "unknown)" msgstr "nieznane)" -#: ../cli/src/devices.c:682 +#: ../cli/src/devices.c:674 #, c-format msgid "%u Mb/s" msgstr "%u Mb/s" #. Print header #. "WIRED-PROPERTIES" -#: ../cli/src/devices.c:755 +#: ../cli/src/devices.c:747 msgid "on" msgstr "włączone" -#: ../cli/src/devices.c:755 +#: ../cli/src/devices.c:747 msgid "off" msgstr "wyłączone" -#: ../cli/src/devices.c:1002 +#: ../cli/src/devices.c:994 #, c-format msgid "Error: 'dev status': %s" msgstr "Błąd: \"dev status\": %s" -#: ../cli/src/devices.c:1004 +#: ../cli/src/devices.c:996 #, c-format msgid "Error: 'dev status': %s; allowed fields: %s" msgstr "Błąd: \"dev status\": %s; dozwolone pola: %s" -#: ../cli/src/devices.c:1027 +#: ../cli/src/devices.c:1019 msgid "Status of devices" msgstr "Stan urządzenia" -#: ../cli/src/devices.c:1058 +#: ../cli/src/devices.c:1050 #, c-format msgid "Error: '%s' argument is missing." msgstr "Błąd: brak parametru \"%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:1091 ../cli/src/devices.c:1243 +#: ../cli/src/devices.c:1380 ../cli/src/devices.c:1599 #, c-format msgid "Error: Device '%s' not found." msgstr "Błąd: nie odnaleziono urządzenia \"%s\"." -#: ../cli/src/devices.c:1122 +#: ../cli/src/devices.c:1114 #, c-format msgid "Success: Device '%s' successfully disconnected." msgstr "Powodzenie: urządzenie \"%s\" zostało rozłączone." -#: ../cli/src/devices.c:1147 +#: ../cli/src/devices.c:1139 #, c-format msgid "Error: Device '%s' (%s) disconnecting failed: %s" msgstr "Błąd: rozłączenie urządzenia \"%s\" (%s) się nie powiodło: %s" -#: ../cli/src/devices.c:1155 +#: ../cli/src/devices.c:1147 #, c-format msgid "Device state: %d (%s)\n" msgstr "Stan urządzenia: %d (%s)\n" -#: ../cli/src/devices.c:1220 +#: ../cli/src/devices.c:1212 #, c-format msgid "Error: iface has to be specified." msgstr "Błąd: należy podać interfejs." -#: ../cli/src/devices.c:1345 +#: ../cli/src/devices.c:1338 #, c-format msgid "Error: 'dev wifi': %s" msgstr "Błąd: \"dev wifi\": %s" -#: ../cli/src/devices.c:1347 +#: ../cli/src/devices.c:1340 #, c-format msgid "Error: 'dev wifi': %s; allowed fields: %s" msgstr "Błąd: \"dev wifi\": %s; dozwolone pola: %s" -#: ../cli/src/devices.c:1370 +#: ../cli/src/devices.c:1363 msgid "WiFi scan list" msgstr "Lista skanowania sieci WiFi" -#: ../cli/src/devices.c:1407 ../cli/src/devices.c:1461 -#: ../cli/src/devices.c:1668 +#: ../cli/src/devices.c:1400 ../cli/src/devices.c:1454 #, c-format -msgid "Error: Access point with hwaddr '%s' not found." -msgstr "Błąd: nie odnaleziono punktu dostępowego z adresem sprzętowym \"%s\"." +msgid "Error: Access point with bssid '%s' not found." +msgstr "Błąd: nie odnaleziono punktu dostępowego z BSSID \"%s\"." -#: ../cli/src/devices.c:1424 +#: ../cli/src/devices.c:1417 #, c-format msgid "Error: Device '%s' is not a WiFi device." msgstr "Błąd: urządzenie \"%s\" nie jest urządzeniem WiFi." -#: ../cli/src/devices.c:1488 +#: ../cli/src/devices.c:1481 #, c-format msgid "Error: 'dev wifi' command '%s' is not valid." msgstr "Błąd: polecenie \"dev wifi\" \"%s\" jest nieprawidłowe." -#: ../cli/src/devices.c:1564 +#: ../cli/src/devices.c:1557 #, c-format msgid "Error: 'dev wimax': %s" msgstr "Błąd: \"dev wimax\": %s" -#: ../cli/src/devices.c:1566 +#: ../cli/src/devices.c:1559 #, c-format msgid "Error: 'dev wimax': %s; allowed fields: %s" msgstr "Błąd: \"dev wimax\": %s; dozwolone pola: %s" -#: ../cli/src/devices.c:1589 +#: ../cli/src/devices.c:1582 msgid "WiMAX NSP list" msgstr "Lista NSP sieci WiMAX" -#: ../cli/src/devices.c:1626 +#: ../cli/src/devices.c:1619 #, c-format msgid "Error: NSP with name '%s' not found." msgstr "Błąd: nie odnaleziono NSP o nazwie \"%s\"." -#: ../cli/src/devices.c:1637 +#: ../cli/src/devices.c:1630 #, c-format msgid "Error: Device '%s' is not a WiMAX device." msgstr "Błąd: urządzenie \"%s\" nie jest urządzeniem WiMAX." -#: ../cli/src/devices.c:1695 +#: ../cli/src/devices.c:1661 +#, c-format +msgid "Error: Access point with nsp '%s' not found." +msgstr "Błąd: nie odnaleziono punktu dostępowego z NSP \"%s\"." + +#: ../cli/src/devices.c:1688 #, c-format msgid "Error: 'dev wimax' command '%s' is not valid." msgstr "Błąd: polecenie \"dev wimax\" \"%s\" jest nieprawidłowe." -#: ../cli/src/devices.c:1745 +#: ../cli/src/devices.c:1738 #, c-format msgid "Error: 'dev' command '%s' is not valid." msgstr "Błąd: polecenie \"dev\" \"%s\" jest nieprawidłowe." -#: ../cli/src/network-manager.c:35 +#: ../cli/src/network-manager.c:37 msgid "RUNNING" msgstr "URUCHOMIONE" #. 0 -#: ../cli/src/network-manager.c:36 +#: ../cli/src/network-manager.c:38 msgid "VERSION" msgstr "WERSJA" #. 2 -#: ../cli/src/network-manager.c:38 +#: ../cli/src/network-manager.c:40 msgid "NET-ENABLED" msgstr "SIEĆ-WŁĄCZONA" #. 3 -#: ../cli/src/network-manager.c:39 +#: ../cli/src/network-manager.c:41 msgid "WIFI-HARDWARE" msgstr "SPRZĘT-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 "SPRZĘT-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 "SPRZĘT-WIMAX" #. 8 -#: ../cli/src/network-manager.c:44 +#: ../cli/src/network-manager.c:46 msgid "WIMAX" msgstr "WIMAX" -#: ../cli/src/network-manager.c:72 +#: ../cli/src/network-manager.c:67 #, c-format msgid "" "Usage: nmcli nm { COMMAND | help }\n" @@ -1043,142 +1052,142 @@ msgstr "" " wwan [on|off]\n" " wimax [on|off]\n" -#: ../cli/src/network-manager.c:101 +#: ../cli/src/network-manager.c:96 msgid "asleep" msgstr "wstrzymane" -#: ../cli/src/network-manager.c:103 +#: ../cli/src/network-manager.c:98 msgid "connecting" msgstr "łączenie" -#: ../cli/src/network-manager.c:105 +#: ../cli/src/network-manager.c:100 msgid "connected (local only)" msgstr "połączono (tylko lokalnie)" -#: ../cli/src/network-manager.c:107 +#: ../cli/src/network-manager.c:102 msgid "connected (site only)" msgstr "połączono (tylko witryny)" -#: ../cli/src/network-manager.c:111 +#: ../cli/src/network-manager.c:106 msgid "disconnecting" msgstr "rozłączanie" -#: ../cli/src/network-manager.c:151 +#: ../cli/src/network-manager.c:146 #, c-format msgid "Error: 'nm status': %s" msgstr "Błąd: \"nm status\": %s" -#: ../cli/src/network-manager.c:153 +#: ../cli/src/network-manager.c:148 #, c-format msgid "Error: 'nm status': %s; allowed fields: %s" msgstr "Błąd: \"nm status\": %s; dozwolone pola: %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:161 ../cli/src/network-manager.c:162 +#: ../cli/src/network-manager.c:163 ../cli/src/network-manager.c:164 +#: ../cli/src/network-manager.c:165 ../cli/src/network-manager.c:167 +#: ../cli/src/network-manager.c:168 ../cli/src/network-manager.c:289 +#: ../cli/src/network-manager.c:344 ../cli/src/network-manager.c:382 +#: ../cli/src/network-manager.c:421 msgid "enabled" msgstr "włączone" -#: ../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:161 ../cli/src/network-manager.c:162 +#: ../cli/src/network-manager.c:163 ../cli/src/network-manager.c:164 +#: ../cli/src/network-manager.c:165 ../cli/src/network-manager.c:167 +#: ../cli/src/network-manager.c:168 ../cli/src/network-manager.c:289 +#: ../cli/src/network-manager.c:344 ../cli/src/network-manager.c:382 +#: ../cli/src/network-manager.c:421 msgid "disabled" msgstr "wyłączone" -#: ../cli/src/network-manager.c:186 +#: ../cli/src/network-manager.c:181 msgid "NetworkManager status" msgstr "Stan usługi NetworkManager" #. Print header -#: ../cli/src/network-manager.c:189 +#: ../cli/src/network-manager.c:184 msgid "running" msgstr "uruchamiany" -#: ../cli/src/network-manager.c:189 +#: ../cli/src/network-manager.c:184 msgid "not running" msgstr "nieuruchomiony" -#: ../cli/src/network-manager.c:220 ../cli/src/utils.c:322 +#: ../cli/src/network-manager.c:215 ../cli/src/utils.c:323 #, c-format msgid "Error: Couldn't connect to system bus: %s" msgstr "Błąd: nie można połączyć się z magistralą systemową: %s" -#: ../cli/src/network-manager.c:231 +#: ../cli/src/network-manager.c:226 #, c-format msgid "Error: Couldn't create D-Bus object proxy." msgstr "Błąd: nie można utworzyć pośrednika obiektu usługi D-Bus." -#: ../cli/src/network-manager.c:237 +#: ../cli/src/network-manager.c:232 #, c-format msgid "Error in sleep: %s" msgstr "Błąd w poleceniu sleep: %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:276 ../cli/src/network-manager.c:331 +#: ../cli/src/network-manager.c:369 ../cli/src/network-manager.c:408 #, c-format msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s" msgstr "" -"Błąd: wartość \"%s\" opcji \"--fields\" jest nieprawidłowa; dozwolone pola: " -"%s." +"Błąd: wartość \"%s\" opcji \"--fields\" jest nieprawidłowa; dozwolone pola: %" +"s." -#: ../cli/src/network-manager.c:289 +#: ../cli/src/network-manager.c:284 msgid "Networking enabled" msgstr "Sieć jest włączona" -#: ../cli/src/network-manager.c:305 +#: ../cli/src/network-manager.c:300 #, c-format msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'." msgstr "" "Błąd: nieprawidłowy parametr \"enable\": \"%s\"; należy użyć \"true\" lub " "\"false\"." -#: ../cli/src/network-manager.c:315 +#: ../cli/src/network-manager.c:310 #, c-format msgid "Error: Sleeping status is not exported by NetworkManager." msgstr "Błąd: stan snu nie jest eksportowany przez usługę NetworkManager." -#: ../cli/src/network-manager.c:323 +#: ../cli/src/network-manager.c:318 #, c-format msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'." msgstr "" "Błąd: nieprawidłowy parametr \"sleep\": \"%s\"; należy użyć \"true\" lub " "\"false\"." -#: ../cli/src/network-manager.c:344 +#: ../cli/src/network-manager.c:339 msgid "WiFi enabled" msgstr "WiFi jest włączone" -#: ../cli/src/network-manager.c:360 +#: ../cli/src/network-manager.c:355 #, c-format msgid "Error: invalid 'wifi' parameter: '%s'." msgstr "Błąd: nieprawidłowy parametr \"wifi\": \"%s\"." -#: ../cli/src/network-manager.c:382 +#: ../cli/src/network-manager.c:377 msgid "WWAN enabled" msgstr "WWAN jest włączone" -#: ../cli/src/network-manager.c:398 +#: ../cli/src/network-manager.c:393 #, c-format msgid "Error: invalid 'wwan' parameter: '%s'." msgstr "Błąd: nieprawidłowy parametr \"wwan\": \"%s\"." -#: ../cli/src/network-manager.c:421 +#: ../cli/src/network-manager.c:416 msgid "WiMAX enabled" msgstr "WiMAX jest włączone" -#: ../cli/src/network-manager.c:437 +#: ../cli/src/network-manager.c:432 #, c-format msgid "Error: invalid 'wimax' parameter: '%s'." msgstr "Błąd: nieprawidłowy parametr \"wimax\": \"%s\"." -#: ../cli/src/network-manager.c:450 +#: ../cli/src/network-manager.c:445 #, c-format msgid "Error: 'nm' command '%s' is not valid." msgstr "Błąd: parametr \"nm\" \"%s\" jest nieprawidłowy." @@ -1293,79 +1302,87 @@ msgstr "Błąd: nie można utworzyć obiektu NMClient." msgid "Success" msgstr "Powodzenie" -#: ../cli/src/settings.c:421 +#: ../cli/src/settings.c:447 #, c-format msgid "%d (hex-ascii-key)" msgstr "%d (klucz-szesnastkowy-acsii))" -#: ../cli/src/settings.c:423 +#: ../cli/src/settings.c:449 #, c-format msgid "%d (104/128-bit passphrase)" msgstr "%d (104/128-bitowe hasło)" -#: ../cli/src/settings.c:426 +#: ../cli/src/settings.c:452 #, c-format msgid "%d (unknown)" msgstr "%d (nieznane)" -#: ../cli/src/settings.c:452 +#: ../cli/src/settings.c:478 msgid "0 (unknown)" msgstr "0 (nieznane)" -#: ../cli/src/settings.c:458 +#: ../cli/src/settings.c:484 msgid "any, " msgstr "dowolne, " -#: ../cli/src/settings.c:460 +#: ../cli/src/settings.c:486 msgid "900 MHz, " msgstr "900 MHz, " -#: ../cli/src/settings.c:462 +#: ../cli/src/settings.c:488 msgid "1800 MHz, " msgstr "1800 MHz, " -#: ../cli/src/settings.c:464 +#: ../cli/src/settings.c:490 msgid "1900 MHz, " msgstr "1900 MHz, " -#: ../cli/src/settings.c:466 +#: ../cli/src/settings.c:492 msgid "850 MHz, " msgstr "850 MHz, " -#: ../cli/src/settings.c:468 +#: ../cli/src/settings.c:494 msgid "WCDMA 3GPP UMTS 2100 MHz, " msgstr "WCDMA 3GPP UMTS 2100 MHz, " -#: ../cli/src/settings.c:470 +#: ../cli/src/settings.c:496 msgid "WCDMA 3GPP UMTS 1800 MHz, " msgstr "WCDMA 3GPP UMTS 1800 MHz, " -#: ../cli/src/settings.c:472 +#: ../cli/src/settings.c:498 msgid "WCDMA 3GPP UMTS 1700/2100 MHz, " msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, " -#: ../cli/src/settings.c:474 +#: ../cli/src/settings.c:500 msgid "WCDMA 3GPP UMTS 800 MHz, " msgstr "WCDMA 3GPP UMTS 800 MHz, " -#: ../cli/src/settings.c:476 +#: ../cli/src/settings.c:502 msgid "WCDMA 3GPP UMTS 850 MHz, " msgstr "WCDMA 3GPP UMTS 850 MHz, " -#: ../cli/src/settings.c:478 +#: ../cli/src/settings.c:504 msgid "WCDMA 3GPP UMTS 900 MHz, " msgstr "WCDMA 3GPP UMTS 900 MHz, " -#: ../cli/src/settings.c:480 +#: ../cli/src/settings.c:506 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:508 +msgid "WCDMA 3GPP UMTS 1900 MHz, " +msgstr "WCDMA 3GPP UMTS 1900 MHz, " + +#: ../cli/src/settings.c:510 +msgid "WCDMA 3GPP UMTS 2600 MHz, " +msgstr "WCDMA 3GPP UMTS 2600 MHz, " + +#: ../cli/src/settings.c:636 ../cli/src/settings.c:835 msgid "auto" msgstr "automatyczne" -#: ../cli/src/settings.c:725 ../cli/src/settings.c:728 -#: ../cli/src/settings.c:729 ../cli/src/utils.c:176 +#: ../cli/src/settings.c:829 ../cli/src/settings.c:832 +#: ../cli/src/settings.c:833 ../cli/src/utils.c:176 msgid "not set" msgstr "nieustawione" @@ -1390,19 +1407,19 @@ msgid "Option '--terse' requires specific '--fields' option values , not '%s'" msgstr "" "Opcja \"--terse\" wymaga konkretnej wartości opcji \"--fields\", nie \"%s\"" -#: ../cli/src/utils.c:333 +#: ../cli/src/utils.c:334 #, c-format msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus" msgstr "" "Błąd: nie można utworzyć pośrednika obiektu usługi D-Bus dla org.freedesktop." "DBus" -#: ../cli/src/utils.c:341 +#: ../cli/src/utils.c:342 #, c-format msgid "Error: NameHasOwner request failed: %s" msgstr "Błąd: żądanie NameHasOwner się nie powiodło: %s" -#: ../cli/src/utils.c:386 +#: ../cli/src/utils.c:387 #, c-format msgid "" "Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --" @@ -1411,7 +1428,7 @@ msgstr "" "Ostrzeżenie: wersje programu nmcli (%s) i usługi NetworkManager (%s) się nie " "zgadzają. Użycie opcji --nocheck ukrywa ostrzeżenie.\n" -#: ../cli/src/utils.c:395 +#: ../cli/src/utils.c:396 #, c-format msgid "" "Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force " @@ -1421,353 +1438,383 @@ msgstr "" "zgadzają. Wymuszono wykonanie używając opcji --nocheck, ale wynik może być " "nieprzewidywalny." -#: ../libnm-util/crypto.c:125 +#: ../libnm-util/crypto.c:133 #, c-format msgid "PEM key file had no end tag '%s'." msgstr "Plik klucza PEM nie zawiera znacznika końcowego \"%s\"." -#: ../libnm-util/crypto.c:138 +#: ../libnm-util/crypto.c:146 #, c-format msgid "Doesn't look like a PEM private key file." msgstr "Nie wygląda na plik klucza prywatnego PEM." -#: ../libnm-util/crypto.c:146 +#: ../libnm-util/crypto.c:154 #, c-format msgid "Not enough memory to store PEM file data." msgstr "Brak wystarczającej ilości pamięci do przechowania danych pliku PEM." -#: ../libnm-util/crypto.c:162 +#: ../libnm-util/crypto.c:170 #, c-format msgid "Malformed PEM file: Proc-Type was not first tag." msgstr "Uszkodzony plik PEM: Proc-Type nie był pierwszym znacznikiem." -#: ../libnm-util/crypto.c:170 +#: ../libnm-util/crypto.c:178 #, c-format msgid "Malformed PEM file: unknown Proc-Type tag '%s'." msgstr "Uszkodzony plik PEM: nieznany znacznik Proc-Type \"%s\"." -#: ../libnm-util/crypto.c:180 +#: ../libnm-util/crypto.c:188 #, c-format msgid "Malformed PEM file: DEK-Info was not the second tag." msgstr "Uszkodzony plik PEM: DEK-Info nie był drugim znacznikiem." -#: ../libnm-util/crypto.c:191 +#: ../libnm-util/crypto.c:199 #, c-format msgid "Malformed PEM file: no IV found in DEK-Info tag." msgstr "Uszkodzony plik PEM: brak IV w znaczniku 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 "Uszkodzony plik PEM: nieprawidłowy format IV w znaczniku DEK-Info." -#: ../libnm-util/crypto.c:211 +#: ../libnm-util/crypto.c:219 #, c-format msgid "Malformed PEM file: unknown private key cipher '%s'." msgstr "Uszkodzony plik PEM: nieznany szyfr klucza prywatnego: \"%s\"." -#: ../libnm-util/crypto.c:230 +#: ../libnm-util/crypto.c:238 #, c-format msgid "Could not decode private key." msgstr "Nie można zdekodować klucza prywatnego." -#: ../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 "" +"Odnalezienie oczekiwanego znacznika początkowego PKCS#8 się nie powiodło." + +#: ../libnm-util/crypto.c:292 +#, c-format +msgid "Failed to find expected PKCS#8 end tag '%s'." +msgstr "" +"Odnalezienie oczekiwanego znacznika końcowego PKCS#8 \"%s\" się nie powiodło." + +#: ../libnm-util/crypto.c:312 +msgid "Not enough memory to store private key data." +msgstr "" +"Brak wystarczającej ilości pamięci do przechowania danych klucza prywatnego." + +#: ../libnm-util/crypto.c:317 +msgid "Failed to decode PKCS#8 private key." +msgstr "Odkodowanie klucza prywatnego PKCS#8 się nie powiodło." + +#: ../libnm-util/crypto.c:339 ../libnm-util/crypto.c:625 #, c-format msgid "Not enough memory to store certificate data." msgstr "Brak wystarczającej ilości pamięci do przechowania danych certyfikatu." -#: ../libnm-util/crypto.c:292 +#: ../libnm-util/crypto.c:365 #, c-format msgid "IV must be an even number of bytes in length." msgstr "Liczba bajtów w IV musi być liczbą parzystą." -#: ../libnm-util/crypto.c:301 +#: ../libnm-util/crypto.c:374 #, c-format msgid "Not enough memory to store the IV." msgstr "Brak wystarczającej ilości pamięci do przechowania IV." -#: ../libnm-util/crypto.c:312 +#: ../libnm-util/crypto.c:385 #, c-format msgid "IV contains non-hexadecimal digits." msgstr "IV zawiera nieszesnastkowe cyfry." -#: ../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 "Nieznany szyfr klucza prywatnego \"%s\"." -#: ../libnm-util/crypto.c:359 +#: ../libnm-util/crypto.c:432 #, c-format msgid "Not enough memory to decrypt private key." msgstr "Brak wystarczającej ilości pamięci do odszyfrowania klucza prywatnego." -#: ../libnm-util/crypto.c:424 +#: ../libnm-util/crypto.c:497 #, c-format msgid "Not enough memory to store decrypted private key." msgstr "" "Brak wystarczającej ilości pamięci do przechowania odszyfrowanego klucza " "prywatnego." -#: ../libnm-util/crypto.c:469 +#: ../libnm-util/crypto.c:542 #, c-format msgid "Unable to determine private key type." msgstr "Nie można określić typu klucza prywatnego." -#: ../libnm-util/crypto.c:524 +#: ../libnm-util/crypto.c:597 #, c-format msgid "PEM certificate had no start tag '%s'." msgstr "Certyfikat PEM nie zawiera początkowego znacznika \"%s\"." -#: ../libnm-util/crypto.c:533 +#: ../libnm-util/crypto.c:606 #, c-format msgid "PEM certificate had no end tag '%s'." msgstr "Certyfikat PEM nie zawiera kończącego znacznika \"%s\"." -#: ../libnm-util/crypto.c:557 +#: ../libnm-util/crypto.c:630 #, c-format msgid "Failed to decode certificate." msgstr "Zdekodowanie certyfikatu się nie powiodło." -#: ../libnm-util/crypto_gnutls.c:49 +#: ../libnm-util/crypto_gnutls.c:50 msgid "Failed to initialize the crypto engine." msgstr "Zainicjowanie modułu szyfrowania się nie powiodło." -#: ../libnm-util/crypto_gnutls.c:93 +#: ../libnm-util/crypto_gnutls.c:92 #, c-format msgid "Failed to initialize the MD5 engine: %s / %s." msgstr "Zainicjowanie modułu MD5 się nie powiodło: %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 "Nieprawidłowa długość IV (musi wynosić co najmniej %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 "Brak wystarczającej ilości pamięci dla bufora odszyfrowanego klucza." -#: ../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 "" "Zainicjowanie kontekstu szyfru do odszyfrowania się nie powiodło: %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 "" "Ustawienie klucza symetrycznego do odszyfrowania się nie powiodło: %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 "Ustawienie IV do odszyfrowania się nie powiodło: %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 "Odszyfrowanie klucza prywatnego się nie powiodło: %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 "" "Odszyfrowanie klucza prywatnego się nie powiodło: nieoczekiwana długość " "wypełnienia." -#: ../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 "Odszyfrowanie klucza prywatnego się nie powiodło." -#: ../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 "Nie można przydzielić pamięci do szyfrowania." -#: ../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 "" "Zainicjowanie kontekstu szyfru do szyfrowania się nie powiodło: %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 "" "Ustawienie klucza symetrycznego do szyfrowania się nie powiodło: %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 "Ustawienie IV do szyfrowania się nie powiodło: %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 "Zaszyfrowanie danych się nie powiodło: %s / %s." -#: ../libnm-util/crypto_gnutls.c:362 +#: ../libnm-util/crypto_gnutls.c:361 #, c-format msgid "Error initializing certificate data: %s" msgstr "Błąd podczas inicjowania danych certyfikatu: %s" -#: ../libnm-util/crypto_gnutls.c:384 +#: ../libnm-util/crypto_gnutls.c:383 #, c-format msgid "Couldn't decode certificate: %s" msgstr "Nie można zdekodować certyfikatu: %s" -#: ../libnm-util/crypto_gnutls.c:408 +#: ../libnm-util/crypto_gnutls.c:407 #, c-format msgid "Couldn't initialize PKCS#12 decoder: %s" msgstr "Nie można zainicjować dekodera 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 "Nie można odszyfrować pliku 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 "Nie można zweryfikować pliku PKCS#12: %s" +#: ../libnm-util/crypto_gnutls.c:460 +#, c-format +msgid "Couldn't initialize PKCS#8 decoder: %s" +msgstr "Nie można zainicjować dekodera PKCS#8: %s" + +#: ../libnm-util/crypto_gnutls.c:483 +#, c-format +msgid "Couldn't decode PKCS#8 file: %s" +msgstr "Nie można dekodować pliku PKCS#8: %s" + #: ../libnm-util/crypto_nss.c:56 #, c-format msgid "Failed to initialize the crypto engine: %d." msgstr "Zainicjowanie modułu szyfrowania się nie powiodło: %d." -#: ../libnm-util/crypto_nss.c:111 +#: ../libnm-util/crypto_nss.c:107 #, c-format msgid "Failed to initialize the MD5 context: %d." msgstr "Zainicjowanie kontekstu MD5 się nie powiodło: %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 "Nieprawidłowa długość IV (musi wynosić co najmniej %d)." -#: ../libnm-util/crypto_nss.c:196 +#: ../libnm-util/crypto_nss.c:192 #, c-format msgid "Failed to initialize the decryption cipher slot." msgstr "Zainicjowanie gniazda szyfru do odszyfrowania się nie powiodło." -#: ../libnm-util/crypto_nss.c:206 +#: ../libnm-util/crypto_nss.c:202 #, c-format msgid "Failed to set symmetric key for decryption." msgstr "Ustawienie klucza symetrycznego do odszyfrowania się nie powiodło." -#: ../libnm-util/crypto_nss.c:216 +#: ../libnm-util/crypto_nss.c:212 #, c-format msgid "Failed to set IV for decryption." msgstr "Ustawienie IV do odszyfrowania się nie powiodło." -#: ../libnm-util/crypto_nss.c:224 +#: ../libnm-util/crypto_nss.c:220 #, c-format msgid "Failed to initialize the decryption context." msgstr "Zainicjowanie kontekstu odszyfrowania się nie powiodło." -#: ../libnm-util/crypto_nss.c:237 +#: ../libnm-util/crypto_nss.c:233 #, c-format msgid "Failed to decrypt the private key: %d." msgstr "Odszyfrowanie klucza prywatnego się nie powiodło: %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 "" "Odszyfrowanie klucza prywatnego się nie powiodło: odszyfrowane dane są za " "duże." -#: ../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 "Zakończenie odszyfrowania klucza prywatnego się nie powiodło: %d." -#: ../libnm-util/crypto_nss.c:364 +#: ../libnm-util/crypto_nss.c:360 #, c-format msgid "Failed to initialize the encryption cipher slot." msgstr "Zainicjowanie gniazda szyfru do szyfrowania się nie powiodło." -#: ../libnm-util/crypto_nss.c:372 +#: ../libnm-util/crypto_nss.c:368 #, c-format msgid "Failed to set symmetric key for encryption." msgstr "Ustawienie klucza symetrycznego do szyfrowania się nie powiodło." -#: ../libnm-util/crypto_nss.c:380 +#: ../libnm-util/crypto_nss.c:376 #, c-format msgid "Failed to set IV for encryption." msgstr "Ustawienie IV do szyfrowania się nie powiodło." -#: ../libnm-util/crypto_nss.c:388 +#: ../libnm-util/crypto_nss.c:384 #, c-format msgid "Failed to initialize the encryption context." msgstr "Zainicjowanie kontekstu szyfrowania się nie powiodło." -#: ../libnm-util/crypto_nss.c:396 +#: ../libnm-util/crypto_nss.c:392 #, c-format msgid "Failed to encrypt: %d." msgstr "Zaszyfrowanie się nie powiodło: %d." -#: ../libnm-util/crypto_nss.c:404 +#: ../libnm-util/crypto_nss.c:400 #, c-format msgid "Unexpected amount of data after encrypting." msgstr "Nieoczekiwana ilość danych po zaszyfrowaniu." -#: ../libnm-util/crypto_nss.c:447 +#: ../libnm-util/crypto_nss.c:443 #, c-format msgid "Couldn't decode certificate: %d" msgstr "Nie można zdekodować certyfikatu: %d" -#: ../libnm-util/crypto_nss.c:482 +#: ../libnm-util/crypto_nss.c:478 #, c-format msgid "Couldn't convert password to UCS2: %d" msgstr "Nie można przekonwertować hasła do 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 "Nie można zainicjować dekodera 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 "Nie można odszyfrować pliku 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 "Nie można zweryfikować pliku PKCS#12: %d" -#: ../libnm-util/crypto_nss.c:557 +#: ../libnm-util/crypto_nss.c:568 msgid "Could not generate random data." msgstr "Nie można utworzyć losowych danych." -#: ../libnm-util/nm-utils.c:1988 +#: ../libnm-util/nm-utils.c:2000 #, c-format msgid "Not enough memory to make encryption key." msgstr "Brak wystarczającej ilości pamięci, aby utworzyć klucz szyfrowania." -#: ../libnm-util/nm-utils.c:2098 +#: ../libnm-util/nm-utils.c:2110 msgid "Could not allocate memory for PEM file creation." msgstr "Nie można przydzielić pamięci do utworzenia pliku 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 "Nie można przydzielić pamięci do zapisywania IV do pliku 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 "" "Nie można przydzielić pamięci do zapisywania zaszyfrowanego klucza do pliku " "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 "Nie można przydzielić pamięci dla danych pliku PEM." @@ -1878,13 +1925,13 @@ msgid "System policy prevents sharing connections via an open WiFi network" msgstr "" "Polityka systemu powstrzymuje współdzielenie połączeń przez otwartą sieć 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 "" "Nieprawidłowa opcja. Parametr --help wyświetli listę prawidłowych opcji.\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. Parametr --help wyświetli listę prawidłowych opcji.\n" @@ -1919,116 +1966,111 @@ msgstr "nie można odnaleźć usługi \"dhcpcd\"." msgid "unsupported DHCP client '%s'" msgstr "nieobsługiwany klient DHCP \"%s\"" -#: ../src/dns-manager/nm-dns-manager.c:367 +#: ../src/dns-manager/nm-dns-manager.c:376 msgid "NOTE: the libc resolver may not support more than 3 nameservers." msgstr "UWAGA: obsługa nazw libc nie obsługuje więcej niż 3 serwery nazw." -#: ../src/dns-manager/nm-dns-manager.c:369 +#: ../src/dns-manager/nm-dns-manager.c:378 msgid "The nameservers listed below may not be recognized." msgstr "Poniższe serwery nazw nie mogą nie zostać rozpoznane." -#: ../src/logging/nm-logging.c:148 +#: ../src/logging/nm-logging.c:149 #, c-format msgid "Unknown log level '%s'" msgstr "Nieznany poziom dziennika \"%s\"" -#: ../src/logging/nm-logging.c:173 +#: ../src/logging/nm-logging.c:174 #, c-format msgid "Unknown log domain '%s'" msgstr "Nieznana domena dziennika \"%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 "CDMA connection %d" msgstr "Połączenie 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 "GSM connection %d" msgstr "Połączenie GSM %d" -#: ../src/nm-device-bt.c:324 +#: ../src/nm-device-bt.c:326 #, c-format msgid "PAN connection %d" msgstr "Połączenie PAN %d" -#: ../src/nm-device-bt.c:357 +#: ../src/nm-device-bt.c:359 #, c-format msgid "DUN connection %d" msgstr "Połączenie DUN %d" -#: ../src/nm-device-ethernet.c:1681 +#: ../src/nm-device-ethernet.c:1724 #, c-format msgid "PPPoE connection %d" msgstr "Połączenie PPPoE %d" -#: ../src/nm-device-ethernet.c:1681 +#: ../src/nm-device-ethernet.c:1724 ../src/settings/nm-settings-utils.c:50 #, c-format msgid "Wired connection %d" msgstr "Połączenie przewodowe %d" -#: ../src/nm-device-olpc-mesh.c:422 +#: ../src/nm-device-olpc-mesh.c:393 #, c-format msgid "Mesh %d" msgstr "Sieć kratowa %d" -#: ../src/nm-manager.c:656 +#: ../src/nm-manager.c:670 #, c-format msgid "VPN connection %d" msgstr "Połączenie VPN %d" -#: ../src/nm-netlink-monitor.c:100 ../src/nm-netlink-monitor.c:231 -#: ../src/nm-netlink-monitor.c:653 +#: ../src/nm-netlink-monitor.c:101 ../src/nm-netlink-monitor.c:234 +#: ../src/nm-netlink-monitor.c:661 #, c-format msgid "error processing netlink message: %s" msgstr "błąd podczas przetwarzania komunikatu netlink: %s" -#: ../src/nm-netlink-monitor.c:214 +#: ../src/nm-netlink-monitor.c:216 msgid "error occurred while waiting for data on socket" msgstr "wystąpił błąd podczas oczekiwania na dane na gnieździe" -#: ../src/nm-netlink-monitor.c:254 +#: ../src/nm-netlink-monitor.c:260 #, c-format msgid "unable to connect to netlink for monitoring link status: %s" msgstr "" "nie można połączyć się z netlink dla monitorowania stanu połączenia: %s" -#: ../src/nm-netlink-monitor.c:265 +#: ../src/nm-netlink-monitor.c:271 #, c-format msgid "unable to enable netlink handle credential passing: %s" msgstr "" -"nie można włączyć przekazywania danych uwierzytelniających uchwytu netlink: " -"%s" +"nie można włączyć przekazywania danych uwierzytelniających uchwytu netlink: %" +"s" -#: ../src/nm-netlink-monitor.c:291 ../src/nm-netlink-monitor.c:353 +#: ../src/nm-netlink-monitor.c:294 ../src/nm-netlink-monitor.c:354 #, c-format msgid "unable to allocate netlink handle for monitoring link status: %s" msgstr "" "nie można przydzielić uchwytu netlink dla monitorowania stanu połączenia: %s" -#: ../src/nm-netlink-monitor.c:376 +#: ../src/nm-netlink-monitor.c:379 #, c-format msgid "unable to allocate netlink link cache for monitoring link status: %s" msgstr "" "nie można przydzielić pamięci podręcznej połączenia netlink dla " "monitorowania stanu połączenia: %s" -#: ../src/nm-netlink-monitor.c:502 +#: ../src/nm-netlink-monitor.c:506 #, c-format msgid "unable to join netlink group: %s" msgstr "nie można dołączyć do grupy netlink: %s" -#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642 +#: ../src/nm-netlink-monitor.c:637 ../src/nm-netlink-monitor.c:650 #, c-format msgid "error updating link cache: %s" msgstr "błąd podczas aktualizowania pamięci podręcznej połączenia: %s" -#: ../src/settings/plugins/ifcfg-rh/reader.c:3458 -#: ../src/settings/plugins/ifnet/connection_parser.c:49 +#: ../src/settings/plugins/ifcfg-rh/reader.c:3575 +#: ../src/settings/plugins/ifnet/connection_parser.c:51 msgid "System" msgstr "Systemowe" - -#: ../src/settings/nm-default-wired-connection.c:143 -#, c-format -msgid "Auto %s" -msgstr "Automatyczne %s" diff --git a/po/sl.po b/po/sl.po index 33af9c1e..40b2741d 100644 --- a/po/sl.po +++ b/po/sl.po @@ -5,111 +5,120 @@ # Matic Žgur , 2007. # Andrej Žnidaršič , 2009 - 2010. # Matej Urbančič , 2010. +# Martin Srebotnjak , 2011. # 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: 2010-09-18 15:24+0000\n" -"PO-Revision-Date: 2010-09-18 20:27+0100\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-20 15:25+0000\n" +"PO-Revision-Date: 2011-09-21 09:12+0100\n" "Last-Translator: Matej Urbančič \n" "Language-Team: Slovenian GNOME Translation Team \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: \n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);\n" "X-Poedit-Country: SLOVENIA\n" "X-Poedit-Language: Slovenian\n" "X-Poedit-SourceCharset: utf-8\n" -#: ../cli/src/connections.c:60 -#: ../cli/src/connections.c:75 -#: ../cli/src/devices.c:88 +#: ../cli/src/connections.c:64 +#: ../cli/src/connections.c:78 #: ../cli/src/devices.c:101 -#: ../cli/src/devices.c:111 -#: ../cli/src/devices.c:121 +#: ../cli/src/devices.c:114 +#: ../cli/src/devices.c:124 #: ../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/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 "IME" #. 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 "NAPRAVE" #. 2 -#: ../cli/src/connections.c:63 -#: ../cli/src/connections.c:78 -msgid "SCOPE" -msgstr "OBSEG" - -#. 3 -#: ../cli/src/connections.c:64 +#: ../cli/src/connections.c:67 msgid "DEFAULT" msgstr "PRIVZETO" -#. 4 -#: ../cli/src/connections.c:65 -msgid "DBUS-SERVICE" -msgstr "STORITEV-DBUS" - -#. 5 -#: ../cli/src/connections.c:66 +#. 3 +#: ../cli/src/connections.c:68 msgid "SPEC-OBJECT" msgstr "SPEC-PREDMET" -#. 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-POT" + #. 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 "VRSTA" -#. 3 -#: ../cli/src/connections.c:79 +#. 2 +#: ../cli/src/connections.c:81 msgid "TIMESTAMP" msgstr "ČASOVNI ŽIG" -#. 4 -#: ../cli/src/connections.c:80 +#. 3 +#: ../cli/src/connections.c:82 msgid "TIMESTAMP-REAL" msgstr "REAL-ČASOVNI ŽIG" -#. 5 -#: ../cli/src/connections.c:81 +#. 4 +#: ../cli/src/connections.c:83 msgid "AUTOCONNECT" msgstr "SAMODEJNO POVEŽI" -#. 6 -#: ../cli/src/connections.c:82 +#. 5 +#: ../cli/src/connections.c:84 msgid "READONLY" msgstr "SAMO ZA BRANJE" -#: ../cli/src/connections.c:158 +#: ../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 "" @@ -118,862 +127,999 @@ msgstr "" "\n" " list [id | uuid | system | user]\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:198 -#: ../cli/src/connections.c:537 +#: ../cli/src/connections.c:220 +#: ../cli/src/connections.c:544 #, c-format msgid "Error: 'con list': %s" msgstr "Napaka: 'con list': %s" -#: ../cli/src/connections.c:200 -#: ../cli/src/connections.c:539 +#: ../cli/src/connections.c:222 +#: ../cli/src/connections.c:546 #, c-format msgid "Error: 'con list': %s; allowed fields: %s" msgstr "Napaka: 'con list': %s; dovoljena so polja: %s" -#: ../cli/src/connections.c:208 +#: ../cli/src/connections.c:230 msgid "Connection details" msgstr "Podatki o povezavi" -#: ../cli/src/connections.c:382 -#: ../cli/src/connections.c:602 -msgid "system" -msgstr "sistem" - -#: ../cli/src/connections.c:382 -#: ../cli/src/connections.c:602 -msgid "user" -msgstr "uporabnik" - -#: ../cli/src/connections.c:384 +#: ../cli/src/connections.c:419 msgid "never" msgstr "nikoli" #. "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/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:1224 +#: ../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 "da" -#: ../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/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:1224 +#: ../cli/src/settings.c:1150 +#: ../cli/src/settings.c:1151 +#: ../cli/src/settings.c:1152 +#: ../cli/src/settings.c:1153 +#: ../cli/src/settings.c:1154 +#: ../cli/src/settings.c:1155 +#: ../cli/src/settings.c:1156 +#: ../cli/src/settings.c:1157 +#: ../cli/src/settings.c:1158 +#: ../cli/src/settings.c:1159 +#: ../cli/src/settings.c:1160 +#: ../cli/src/settings.c:1235 msgid "no" msgstr "ne" -#: ../cli/src/connections.c:458 -#: ../cli/src/connections.c:501 -msgid "System connections" -msgstr "Sistemske povezave" - -#: ../cli/src/connections.c:463 -#: ../cli/src/connections.c:514 -msgid "User connections" -msgstr "Uporabniške povezave" - -#: ../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:495 +msgid "Connection list" +msgstr "Seznam povezav" + +#: ../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 "Napaka: manjka argument %s." -#: ../cli/src/connections.c:488 +#: ../cli/src/connections.c:521 #, c-format msgid "Error: %s - no such connection." msgstr "Napaka: %s - povezava ne obstaja." -#: ../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: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 "Neznan parameter: %s\n" -#: ../cli/src/connections.c:529 +#: ../cli/src/connections.c:536 #, c-format msgid "Error: no valid parameter specified." msgstr "Napaka: ni podanega veljavnega parametra." -#: ../cli/src/connections.c:544 -#: ../cli/src/connections.c:1577 -#: ../cli/src/devices.c:1293 -#: ../cli/src/network-manager.c:359 +#: ../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 "Napaka: %s." -#: ../cli/src/connections.c:650 +#: ../cli/src/connections.c:639 #, c-format msgid "Error: 'con status': %s" msgstr "Napaka: 'con status': %s" -#: ../cli/src/connections.c:652 +#: ../cli/src/connections.c:641 #, c-format msgid "Error: 'con status': %s; allowed fields: %s" msgstr "Napaka: 'con status': %s; dovoljena polja: %s" -#: ../cli/src/connections.c:659 +#: ../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 "Napaka: ni mogoče ugotoviti, ali se program NetworkManager izvaja: %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 "Napaka: program NetworkManager ni zagnan." + +#: ../cli/src/connections.c:661 msgid "Active connections" msgstr "Dejavne povezave" -#: ../cli/src/connections.c:1027 +#: ../cli/src/connections.c:1085 #, c-format msgid "no active connection on device '%s'" msgstr "ni dejavnih povezav na napravi '%s'" -#: ../cli/src/connections.c:1035 +#: ../cli/src/connections.c:1093 #, c-format msgid "no active connection or device" msgstr "ni dejavne povezave ali naprave" -#: ../cli/src/connections.c:1085 +#: ../cli/src/connections.c:1164 #, c-format msgid "device '%s' not compatible with connection '%s'" msgstr "naprava '%s' ni združljiva s povezavo '%s'" -#: ../cli/src/connections.c:1087 +#: ../cli/src/connections.c:1166 #, c-format msgid "no device found for connection '%s'" msgstr "ni naprave za povezavo '%s'" -#: ../cli/src/connections.c:1098 +#: ../cli/src/connections.c:1177 msgid "activating" msgstr "začenjanje" -#: ../cli/src/connections.c:1100 +#: ../cli/src/connections.c:1179 msgid "activated" msgstr "začeto" -#: ../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:94 -#: ../cli/src/network-manager.c:149 -#: ../cli/src/settings.c:473 +#: ../cli/src/connections.c:1181 +#: ../cli/src/devices.c:304 +msgid "deactivating" +msgstr "onemogočanje" + +#: ../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 "neznano" -#: ../cli/src/connections.c:1112 +#: ../cli/src/connections.c:1193 msgid "VPN connecting (prepare)" msgstr "VPN povezovanje (priprava)" -#: ../cli/src/connections.c:1114 +#: ../cli/src/connections.c:1195 msgid "VPN connecting (need authentication)" msgstr "VPN povezovanje (zahtevana je overitev)" -#: ../cli/src/connections.c:1116 +#: ../cli/src/connections.c:1197 msgid "VPN connecting" msgstr "VPN povezovanje" -#: ../cli/src/connections.c:1118 +#: ../cli/src/connections.c:1199 msgid "VPN connecting (getting IP configuration)" msgstr "VPN povezovanje (pridobivanje nastavitev IP)" -#: ../cli/src/connections.c:1120 +#: ../cli/src/connections.c:1201 msgid "VPN connected" msgstr "Povezan v VPN" -#: ../cli/src/connections.c:1122 +#: ../cli/src/connections.c:1203 msgid "VPN connection failed" msgstr "Povezava z VPN je spodletela" -#: ../cli/src/connections.c:1124 +#: ../cli/src/connections.c:1205 msgid "VPN disconnected" msgstr "Povezava z VPN je prekinjena" -#: ../cli/src/connections.c:1135 +#: ../cli/src/connections.c:1216 msgid "unknown reason" msgstr "neznan vzrok" -#: ../cli/src/connections.c:1137 +#: ../cli/src/connections.c:1218 msgid "none" msgstr "brez" -#: ../cli/src/connections.c:1139 +#: ../cli/src/connections.c:1220 msgid "the user was disconnected" msgstr "povezava z uporabnikom je prekinjena" -#: ../cli/src/connections.c:1141 +#: ../cli/src/connections.c:1222 msgid "the base network connection was interrupted" msgstr "osnovna omrežna povezava je bila prekinjena" -#: ../cli/src/connections.c:1143 +#: ../cli/src/connections.c:1224 msgid "the VPN service stopped unexpectedly" msgstr "storitev VPN je nepričakovano zaustavljena" -#: ../cli/src/connections.c:1145 +#: ../cli/src/connections.c:1226 msgid "the VPN service returned invalid configuration" msgstr "storitev VPN je vrnila neveljavne nastavitve" -#: ../cli/src/connections.c:1147 +#: ../cli/src/connections.c:1228 msgid "the connection attempt timed out" msgstr "poskus povezave je časovno potekel" -#: ../cli/src/connections.c:1149 +#: ../cli/src/connections.c:1230 msgid "the VPN service did not start in time" msgstr "storitev VPN se ni pravočasno začela" -#: ../cli/src/connections.c:1151 +#: ../cli/src/connections.c:1232 msgid "the VPN service failed to start" msgstr "storitev VPN ni uspešno začeta" -#: ../cli/src/connections.c:1153 +#: ../cli/src/connections.c:1234 msgid "no valid VPN secrets" msgstr "ni veljavnih VPN skrivnosti" -#: ../cli/src/connections.c:1155 +#: ../cli/src/connections.c:1236 msgid "invalid VPN secrets" msgstr "neveljavne VPN skrivnosti" -#: ../cli/src/connections.c:1157 +#: ../cli/src/connections.c:1238 msgid "the connection was removed" msgstr "povezava je odstranjena" -#: ../cli/src/connections.c:1171 +#: ../cli/src/connections.c:1252 #, c-format msgid "state: %s\n" msgstr "stanje: %s\n" -#: ../cli/src/connections.c:1174 -#: ../cli/src/connections.c:1200 +#: ../cli/src/connections.c:1255 +#: ../cli/src/connections.c:1281 #, c-format msgid "Connection activated\n" msgstr "Povezava je omogočena\n" -#: ../cli/src/connections.c:1177 +#: ../cli/src/connections.c:1258 #, c-format msgid "Error: Connection activation failed." msgstr "Napaka: začenjanje povezave ni uspelo." -#: ../cli/src/connections.c:1196 +#: ../cli/src/connections.c:1277 #, c-format msgid "state: %s (%d)\n" msgstr "stanje: %s (%d)\n" -#: ../cli/src/connections.c:1206 +#: ../cli/src/connections.c:1287 #, c-format msgid "Error: Connection activation failed: %s." msgstr "Napaka: začenjanje povezave ni uspelo: %s." -#: ../cli/src/connections.c:1223 -#: ../cli/src/devices.c:909 +#: ../cli/src/connections.c:1304 +#: ../cli/src/devices.c:1136 #, c-format msgid "Error: Timeout %d sec expired." msgstr "Napaka: časovna omejitev %d sekund je potekla." -#: ../cli/src/connections.c:1266 +#: ../cli/src/connections.c:1317 #, c-format msgid "Error: Connection activation failed: %s" msgstr "Napaka: začenjanje povezave ni uspelo: %s." -#: ../cli/src/connections.c:1280 -#, c-format -msgid "Error: Obtaining active connection for '%s' failed." -msgstr "Napaka: pridobivanje dejavne povezave '%s' je spodletelo." - -#: ../cli/src/connections.c:1289 +#: ../cli/src/connections.c:1323 #, c-format msgid "Active connection state: %s\n" msgstr "Stanje dejavne povezave: %s\n" -#: ../cli/src/connections.c:1290 +#: ../cli/src/connections.c:1324 #, c-format msgid "Active connection path: %s\n" msgstr "Pot dejavne povezave: %s\n" -#: ../cli/src/connections.c:1344 -#: ../cli/src/connections.c:1465 +#: ../cli/src/connections.c:1376 +#: ../cli/src/connections.c:1517 #, c-format msgid "Error: Unknown connection: %s." msgstr "Napaka: neznana povezava: %s." -#: ../cli/src/connections.c:1379 -#: ../cli/src/devices.c:980 +#: ../cli/src/connections.c:1422 +#: ../cli/src/devices.c:1208 #, c-format msgid "Error: timeout value '%s' is not valid." msgstr "Napaka: vrednost časovne omejitve '%s' ni veljavna." -#: ../cli/src/connections.c:1392 -#: ../cli/src/connections.c:1482 +#: ../cli/src/connections.c:1435 +#: ../cli/src/connections.c:1534 #, c-format msgid "Error: id or uuid has to be specified." msgstr "Napaka: podatek id ali uuid ni naveden." -#: ../cli/src/connections.c:1412 +#: ../cli/src/connections.c:1463 #, c-format msgid "Error: No suitable device found: %s." msgstr "Napaka: ni mogoče najti ustrezne naprave: %s." -#: ../cli/src/connections.c:1414 +#: ../cli/src/connections.c:1465 #, c-format msgid "Error: No suitable device found." msgstr "Napaka: ni mogoče najti ustrezne naprave." -#: ../cli/src/connections.c:1509 +#: ../cli/src/connections.c:1570 #, c-format msgid "Warning: Connection not active\n" msgstr "Opozorilo: povezava ni dejavna\n" -#: ../cli/src/connections.c:1566 +#: ../cli/src/connections.c:1608 #, c-format msgid "Error: 'con' command '%s' is not valid." msgstr "Napaka: ukaz 'con' '%s' ni veljaven." -#: ../cli/src/connections.c:1602 +#: ../cli/src/connections.c:1673 #, c-format msgid "Error: could not connect to D-Bus." msgstr "Napaka: povezava z D-Bus ni mogoča." -#: ../cli/src/connections.c:1609 +#: ../cli/src/connections.c:1680 #, c-format msgid "Error: Could not get system settings." msgstr "Napaka: ni mogoče pridobiti sistemskih nastavitev." -#: ../cli/src/connections.c:1617 -#, c-format -msgid "Error: Could not get user settings." -msgstr "Napaka: ni mogoče pridobiti uporabniških nastavitev." - -#: ../cli/src/connections.c:1627 +#: ../cli/src/connections.c:1690 #, c-format -msgid "Error: Can't obtain connections: settings services are not running." -msgstr "Napaka: ni mogoče pridobiti povezave: storitve nastavitev niso zagnane." +msgid "Error: Can't obtain connections: settings service is not running." +msgstr "Napaka: ni mogoče pridobiti povezav: storitev nastavitev ni zagnana." #. 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 "NAPRAVA" #. 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 "STANJE" -#: ../cli/src/devices.c:72 +#: ../cli/src/devices.c:78 msgid "GENERAL" msgstr "SPLOŠNO" #. 0 -#: ../cli/src/devices.c:73 +#: ../cli/src/devices.c:79 msgid "CAPABILITIES" msgstr "ZMOŽNOSTI" #. 1 -#: ../cli/src/devices.c:74 +#: ../cli/src/devices.c:80 msgid "WIFI-PROPERTIES" msgstr "WIFI-LASTNOSTI" #. 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 "LASTNOSTI ŽIČNE POVEZAVE" #. 4 -#: ../cli/src/devices.c:77 +#: ../cli/src/devices.c:83 +msgid "WIMAX-PROPERTIES" +msgstr "WIMAX-LASTNOSTI" + +#. 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-NASTAVITVE" -#. 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-NASTAVITVE" -#. 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 "GONILNIK" #. 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 "ZAZNAVA-OPERATERJA" #. 1 -#: ../cli/src/devices.c:103 +#: ../cli/src/devices.c:116 msgid "SPEED" msgstr "HITROST" #. 0 -#: ../cli/src/devices.c:112 +#: ../cli/src/devices.c:125 msgid "CARRIER" msgstr "OPERATER" #. 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 "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 "NASLOV" #. 1 -#: ../cli/src/devices.c:136 -#: ../cli/src/devices.c:147 +#: ../cli/src/devices.c:164 +#: ../cli/src/devices.c:175 msgid "PREFIX" msgstr "PREDPONA" #. 2 -#: ../cli/src/devices.c:137 -#: ../cli/src/devices.c:148 +#: ../cli/src/devices.c:165 +#: ../cli/src/devices.c:176 msgid "GATEWAY" msgstr "PREHOD" #. 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 "NAČIN" #. 3 -#: ../cli/src/devices.c:178 +#: ../cli/src/devices.c:206 msgid "FREQ" msgstr "FREKVENCA" #. 4 -#: ../cli/src/devices.c:179 +#: ../cli/src/devices.c:207 msgid "RATE" msgstr "HITROST" #. 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 "VARNOST" #. 7 -#: ../cli/src/devices.c:182 +#: ../cli/src/devices.c:210 msgid "WPA-FLAGS" msgstr "WPA-ZASTAVICE" #. 8 -#: ../cli/src/devices.c:183 +#: ../cli/src/devices.c:211 msgid "RSN-FLAGS" msgstr "RSN-ZASTAVICE" #. 10 -#: ../cli/src/devices.c:185 +#. 4 +#: ../cli/src/devices.c:213 +#: ../cli/src/devices.c:229 msgid "ACTIVE" msgstr "DEJAVNO" -#: ../cli/src/devices.c:208 +#: ../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 "" "Uporaba: nmcli dev { UKAZ | help }\n" "\n" +"UKAZ := { status | list | disconnect | wifi | wimax }\n" +"\n" "UKAZ := { status | list | disconnect | wifi }\n" "\n" -"status\n" -"list [iface ]\n" -"disconnect iface [--nowait] [--timeout ]\n" -"wifi [list [iface ] [hwaddr ]]\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 "neupravljano" -#: ../cli/src/devices.c:230 +#: ../cli/src/devices.c:286 msgid "unavailable" msgstr "ni razpoložljivo" -#: ../cli/src/devices.c:232 -#: ../cli/src/network-manager.c:91 +#: ../cli/src/devices.c:288 +#: ../cli/src/network-manager.c:115 msgid "disconnected" msgstr "povezava je prekinjena" -#: ../cli/src/devices.c:234 +#: ../cli/src/devices.c:290 msgid "connecting (prepare)" msgstr "povezovanje (priprava)" -#: ../cli/src/devices.c:236 +#: ../cli/src/devices.c:292 msgid "connecting (configuring)" msgstr "povezovanje (nastavljanje)" -#: ../cli/src/devices.c:238 +#: ../cli/src/devices.c:294 msgid "connecting (need authentication)" msgstr "povezovanje (zahteva overitev)" -#: ../cli/src/devices.c:240 +#: ../cli/src/devices.c:296 msgid "connecting (getting IP configuration)" msgstr "povezovanje (pridobivanje nastavitev IP)" -#: ../cli/src/devices.c:242 -#: ../cli/src/network-manager.c:89 +#: ../cli/src/devices.c:298 +msgid "connecting (checking IP connectivity)" +msgstr "povezovanje (preverjanje povezljivosti IP)" + +#: ../cli/src/devices.c:300 +msgid "connecting (starting secondary connections)" +msgstr "povezovanje (zagon drugotnih povezav)" + +#: ../cli/src/devices.c:302 +#: ../cli/src/network-manager.c:111 msgid "connected" msgstr "povezano" -#: ../cli/src/devices.c:244 +#: ../cli/src/devices.c:306 msgid "connection failed" msgstr "povezava je spodletela" -#: ../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 "Neznano" -#: ../cli/src/devices.c:299 +#: ../cli/src/devices.c:374 msgid "(none)" msgstr "(brez)" -#: ../cli/src/devices.c:324 +#: ../cli/src/devices.c:399 #, c-format msgid "%s: error converting IP4 address 0x%X" msgstr "%s: napaka med pretvarjanjem naslova 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 "Šifrirano: " -#: ../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 "Podjetniški " -#: ../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 "infrastruktura" -#: ../cli/src/devices.c:486 +#: ../cli/src/devices.c:536 +msgid "Home" +msgstr "Domov" + +#: ../cli/src/devices.c:539 +msgid "Partner" +msgstr "Partner" + +#: ../cli/src/devices.c:542 +msgid "Roaming" +msgstr "Gostovanje" + +#: ../cli/src/devices.c:612 #, c-format msgid "Error: 'dev list': %s" msgstr "Napaka: 'dev list': %s" -#: ../cli/src/devices.c:488 +#: ../cli/src/devices.c:614 #, c-format msgid "Error: 'dev list': %s; allowed fields: %s" msgstr "Napaka: 'dev list': %s; dovoljena polja: %s" -#: ../cli/src/devices.c:497 +#: ../cli/src/devices.c:623 msgid "Device details" msgstr "Podrobnosti naprave" -#: ../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 "(neznano)" -#: ../cli/src/devices.c:528 +#: ../cli/src/devices.c:658 msgid "unknown)" msgstr "neznano)" -#: ../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 "omogočeno" -#: ../cli/src/devices.c:627 +#: ../cli/src/devices.c:757 msgid "off" msgstr "onemogočeno" -#: ../cli/src/devices.c:808 +#: ../cli/src/devices.c:1004 #, c-format msgid "Error: 'dev status': %s" msgstr "Napaka: 'dev status': %s" -#: ../cli/src/devices.c:810 +#: ../cli/src/devices.c:1006 #, c-format msgid "Error: 'dev status': %s; allowed fields: %s" msgstr "Napaka: 'dev status': %s; dovoljena polja: %s" -#: ../cli/src/devices.c:817 +#: ../cli/src/devices.c:1029 msgid "Status of devices" msgstr "Stanje naprav" -#: ../cli/src/devices.c:845 +#: ../cli/src/devices.c:1060 #, c-format msgid "Error: '%s' argument is missing." msgstr "Napaka: manjka argument '%s'" -#: ../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 "Napaka: naprave '%s' ni mogoče najti" -#: ../cli/src/devices.c:897 +#: ../cli/src/devices.c:1124 #, c-format msgid "Success: Device '%s' successfully disconnected." msgstr "Obvestilo: povezava naprave '%s' je uspešno prekinjena." -#: ../cli/src/devices.c:922 +#: ../cli/src/devices.c:1149 #, c-format msgid "Error: Device '%s' (%s) disconnecting failed: %s" msgstr "Napaka: prišlo je do napake med prekinjanjem naprave '%s' (%s): %s" -#: ../cli/src/devices.c:930 +#: ../cli/src/devices.c:1157 #, c-format msgid "Device state: %d (%s)\n" msgstr "Stanje naprave: %d (%s)\n" -#: ../cli/src/devices.c:994 +#: ../cli/src/devices.c:1222 #, c-format msgid "Error: iface has to be specified." msgstr "Napaka: iface nastavitev mora določena." -#: ../cli/src/devices.c:1112 +#: ../cli/src/devices.c:1347 #, c-format msgid "Error: 'dev wifi': %s" msgstr "Napaka: 'dev wifi': %s" -#: ../cli/src/devices.c:1114 +#: ../cli/src/devices.c:1349 #, c-format msgid "Error: 'dev wifi': %s; allowed fields: %s" msgstr "Napaka: 'dev wifi': %s; dovoljena polja: %s" -#: ../cli/src/devices.c:1121 +#: ../cli/src/devices.c:1372 msgid "WiFi scan list" msgstr "WiFi seznam preiskovanja" -#: ../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 "Napaka: dostopne točke s strojnim naslovom '%s' ni mogoče najti." -#: ../cli/src/devices.c:1173 +#: ../cli/src/devices.c:1426 #, c-format msgid "Error: Device '%s' is not a WiFi device." msgstr "Napaka: naprava '%s' ni veljavna WiFi naprava." -#: ../cli/src/devices.c:1237 +#: ../cli/src/devices.c:1490 #, c-format msgid "Error: 'dev wifi' command '%s' is not valid." msgstr "Napaka: 'dev wifi' ukaz '%s' ni veljaven." -#: ../cli/src/devices.c:1284 +#: ../cli/src/devices.c:1566 +#, c-format +msgid "Error: 'dev wimax': %s" +msgstr "Napaka: 'dev wimax': %s" + +#: ../cli/src/devices.c:1568 +#, c-format +msgid "Error: 'dev wimax': %s; allowed fields: %s" +msgstr "Napaka: 'dev wimax': %s; dovoljena polja: %s" + +#: ../cli/src/devices.c:1591 +msgid "WiMAX NSP list" +msgstr "Seznam ponudnikov storitev WiMAX" + +#: ../cli/src/devices.c:1628 +#, c-format +msgid "Error: NSP with name '%s' not found." +msgstr "Napaka: ponudnika omrežnih storitev '%s' ni mogoče najti" + +#: ../cli/src/devices.c:1639 +#, c-format +msgid "Error: Device '%s' is not a WiMAX device." +msgstr "Napaka: naprava '%s' ni naprava WiMAX." + +#: ../cli/src/devices.c:1697 +#, c-format +msgid "Error: 'dev wimax' command '%s' is not valid." +msgstr "Napaka: 'dev wimax' ukaz '%s' ni veljaven." + +#: ../cli/src/devices.c:1747 #, c-format msgid "Error: 'dev' command '%s' is not valid." msgstr "Napaka: 'dev' ukaz '%s' ni veljaven." -#: ../cli/src/network-manager.c:35 +#: ../cli/src/network-manager.c:37 msgid "RUNNING" msgstr "V TEKU" -#. 1 -#: ../cli/src/network-manager.c:37 +#. 0 +#: ../cli/src/network-manager.c:38 +msgid "VERSION" +msgstr "RAZLIČICA" + +#. 2 +#: ../cli/src/network-manager.c:40 msgid "NET-ENABLED" msgstr "NET-OMOGOČENO" -#. 2 -#: ../cli/src/network-manager.c:38 +#. 3 +#: ../cli/src/network-manager.c:41 msgid "WIFI-HARDWARE" msgstr "WIFI-STROJNA OPREMA" -#. 3 -#: ../cli/src/network-manager.c:39 +#. 4 +#: ../cli/src/network-manager.c:42 msgid "WIFI" msgstr "WIFI" -#. 4 -#: ../cli/src/network-manager.c:40 +#. 5 +#: ../cli/src/network-manager.c:43 msgid "WWAN-HARDWARE" msgstr "WWAN-STROJNA OPREMA" -#. 5 -#: ../cli/src/network-manager.c:41 +#. 6 +#: ../cli/src/network-manager.c:44 msgid "WWAN" msgstr "WWAN" -#: ../cli/src/network-manager.c:64 +#. 7 +#: ../cli/src/network-manager.c:45 +msgid "WIMAX-HARDWARE" +msgstr "WIFI-STROJNA OPREMA" + +#. 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" @@ -981,137 +1127,171 @@ msgid "" " sleep [true|false]\n" " wifi [on|off]\n" " wwan [on|off]\n" +" wimax [on|off]\n" "\n" msgstr "" "Uporaba: nmcli nm { UKAZ | help }\n" "\n" -" UKAZ := { status | enable | sleep | wifi | wwan }\n" +" UKAZ := { status | enable | sleep | wifi | wwan | wimax}\n" +"\n" +" UKAZ := { 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:85 +#: ../cli/src/network-manager.c:103 msgid "asleep" msgstr "v mirovanju" -#: ../cli/src/network-manager.c:87 +#: ../cli/src/network-manager.c:105 msgid "connecting" msgstr "povezovanje" -#: ../cli/src/network-manager.c:128 +#: ../cli/src/network-manager.c:107 +msgid "connected (local only)" +msgstr "povezan (le krajevno)" + +#: ../cli/src/network-manager.c:109 +msgid "connected (site only)" +msgstr "povezan (le mesto)" + +#: ../cli/src/network-manager.c:113 +msgid "disconnecting" +msgstr "prekinjanje povezave" + +#: ../cli/src/network-manager.c:153 #, c-format msgid "Error: 'nm status': %s" msgstr "Napaka: 'nm status': %s" -#: ../cli/src/network-manager.c:130 +#: ../cli/src/network-manager.c:155 #, c-format msgid "Error: 'nm status': %s; allowed fields: %s" msgstr "Napaka: 'nm status': %s; dovoljena polja: %s" -#: ../cli/src/network-manager.c:137 -msgid "NetworkManager status" -msgstr "Stanje NetworkManager" - -#. Print header -#: ../cli/src/network-manager.c:144 -#: ../cli/src/network-manager.c:145 -#: ../cli/src/network-manager.c:146 -#: ../cli/src/network-manager.c:147 -#: ../cli/src/network-manager.c:154 -#: ../cli/src/network-manager.c:247 +#. 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:328 +#: ../cli/src/network-manager.c:351 +#: ../cli/src/network-manager.c:389 +#: ../cli/src/network-manager.c:428 msgid "enabled" msgstr "omogočeno" -#: ../cli/src/network-manager.c:144 -#: ../cli/src/network-manager.c:145 -#: ../cli/src/network-manager.c:146 -#: ../cli/src/network-manager.c:147 -#: ../cli/src/network-manager.c:154 -#: ../cli/src/network-manager.c:247 +#: ../cli/src/network-manager.c: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:328 +#: ../cli/src/network-manager.c:351 +#: ../cli/src/network-manager.c:389 +#: ../cli/src/network-manager.c:428 msgid "disabled" msgstr "onemogočeno" -#: ../cli/src/network-manager.c:152 +#: ../cli/src/network-manager.c:188 +msgid "NetworkManager status" +msgstr "Stanje NetworkManager" + +#. Print header +#: ../cli/src/network-manager.c:191 msgid "running" msgstr "v teku" -#: ../cli/src/network-manager.c:152 +#: ../cli/src/network-manager.c:191 msgid "not running" msgstr "ni v teku" -#: ../cli/src/network-manager.c:175 +#: ../cli/src/network-manager.c:222 +#: ../cli/src/utils.c:322 #, c-format msgid "Error: Couldn't connect to system bus: %s" msgstr "Napaka: ni se mogoče povezati s sistemskim vodilom: %s" -#: ../cli/src/network-manager.c:186 +#: ../cli/src/network-manager.c:233 #, c-format msgid "Error: Couldn't create D-Bus object proxy." msgstr "Napaka: ni mogoče ustvariti posredniškega predmeta vodila D-Bus." -#: ../cli/src/network-manager.c:192 +#: ../cli/src/network-manager.c:239 #, c-format msgid "Error in sleep: %s" msgstr "Napaka v mirovanju: %s" -#: ../cli/src/network-manager.c:237 -#: ../cli/src/network-manager.c:286 -#: ../cli/src/network-manager.c:318 +#: ../cli/src/network-manager.c:283 +#: ../cli/src/network-manager.c:338 +#: ../cli/src/network-manager.c:376 +#: ../cli/src/network-manager.c:415 #, c-format msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s" msgstr "Napaka: vrednost '--fields' '%s' ni veljavna, dovoljena polja: %s" -#: ../cli/src/network-manager.c:245 +#: ../cli/src/network-manager.c:291 msgid "Networking enabled" msgstr "Omrežje je omogočeno" -#: ../cli/src/network-manager.c:256 +#: ../cli/src/network-manager.c:307 #, c-format msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'." msgstr "Napaka: neveljaven parameter 'enable': '%s'; uporabite 'true' ali 'false'." -#: ../cli/src/network-manager.c:265 +#: ../cli/src/network-manager.c:317 #, c-format msgid "Error: Sleeping status is not exported by NetworkManager." msgstr "Napaka: stanje v mirovanju ni izvoženo s programom NetworkManager." -#: ../cli/src/network-manager.c:273 +#: ../cli/src/network-manager.c:325 #, c-format msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'." msgstr "Napaka: neveljaven parameter 'sleep': '%s'; uporabite 'true' ali 'false'." -#: ../cli/src/network-manager.c:294 +#: ../cli/src/network-manager.c:346 msgid "WiFi enabled" msgstr "WiFi je omogočen" -#: ../cli/src/network-manager.c:305 +#: ../cli/src/network-manager.c:362 #, c-format msgid "Error: invalid 'wifi' parameter: '%s'." msgstr "Napaka: neveljaven 'wifi' parameter: '%s'." -#: ../cli/src/network-manager.c:326 +#: ../cli/src/network-manager.c:384 msgid "WWAN enabled" msgstr "WWAN je omogočen" -#: ../cli/src/network-manager.c:337 +#: ../cli/src/network-manager.c:400 #, c-format msgid "Error: invalid 'wwan' parameter: '%s'." msgstr "Napaka: neveljaven 'wwan' parameter: '%s'." -#: ../cli/src/network-manager.c:348 +#: ../cli/src/network-manager.c:423 +msgid "WiMAX enabled" +msgstr "WiMAX je omogočen" + +#: ../cli/src/network-manager.c:439 +#, c-format +msgid "Error: invalid 'wimax' parameter: '%s'." +msgstr "Napaka: neveljaven parameter 'wimax': '%s'." + +#: ../cli/src/network-manager.c:452 #, c-format msgid "Error: 'nm' command '%s' is not valid." msgstr "Napaka: ukaz 'nm' '%s' ni veljaven" -#: ../cli/src/nmcli.c:69 +#: ../cli/src/nmcli.c:64 #, c-format msgid "" "Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n" @@ -1122,6 +1302,7 @@ msgid "" " -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" @@ -1134,609 +1315,766 @@ msgstr "" "Uporaba: %s [MOŽNOSTI] PREDMET { UKAZ| help }\n" "\n" "MOŽNOSTI\n" -"-t[erse] zgoščen odvod\n" -"-p[retty] olepšan odvod\n" -"-m[ode] tabular|multiline način odvoda\n" -"-f[ields] |all|common določilo polj odvoda\n" -"-e[scape] yes|no izpuščanje ločilnikov vrednosti\n" -"-v[ersion] pokaži različico programa\n" -"-h[elp] natisni pomoč\n" +" -t[erse] zgoščen odvod\n" +" -p[retty] olepšan odvod\n" +" -m[ode] tabular|multiline način odvoda\n" +" -f[ields] |all|common določilo polj odvoda\n" +" -e[scape] yes|no izpuščanje ločilnikov vrednosti\n" +" -n[ocheck] ne preverjaj različic nmcli in NetworkManager\n" +" -v[ersion] pokaži različico programa\n" +" -h[elp] natisni pomoč\n" "\n" "PREDMET\n" "nm stanje programa NetworkManager\n" "con povezave programa NetworkManager\n" -"dev naprave upravljane s programom NetworkManager\n" +"dev naprave, upravljane s programom 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 "Napaka: predmeta '%s' ni mogoče prepoznati, poskusite: 'nmcli help'." -#: ../cli/src/nmcli.c:143 +#: ../cli/src/nmcli.c:139 #, c-format msgid "Error: Option '--terse' is specified the second time." msgstr "Napaka: možnost '--terse' je podana dvakrat." -#: ../cli/src/nmcli.c:148 +#: ../cli/src/nmcli.c:144 #, c-format msgid "Error: Option '--terse' is mutually exclusive with '--pretty'." msgstr "Napaka: možnosti \"--terse\" in \"--pretty\" se med seboj izključujeta." -#: ../cli/src/nmcli.c:156 +#: ../cli/src/nmcli.c:152 #, c-format msgid "Error: Option '--pretty' is specified the second time." msgstr "Napaka: možnost '--pretty' je podana dvakrat." -#: ../cli/src/nmcli.c:161 +#: ../cli/src/nmcli.c:157 #, c-format msgid "Error: Option '--pretty' is mutually exclusive with '--terse'." msgstr "Napaka: možnosti \"--pretty\" in \"--tearse\" se med seboj izključujeta." -#: ../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 "Napaka: manjka argument za možnost '%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 "Napaka: '%s' ni veljaven argument za možnost '%s'." -#: ../cli/src/nmcli.c:203 +#: ../cli/src/nmcli.c:199 #, c-format msgid "Error: fields for '%s' options are missing." msgstr "Napaka: polja za možnosti '%s' manjkajo." -#: ../cli/src/nmcli.c:209 +#: ../cli/src/nmcli.c:207 #, c-format msgid "nmcli tool, version %s\n" msgstr "nmcli orodje, različica %s\n" -#: ../cli/src/nmcli.c:215 +#: ../cli/src/nmcli.c:213 #, c-format msgid "Error: Option '%s' is unknown, try 'nmcli -help'." msgstr "Napaka: možnost '%s' ni prepoznana, poskusite 'nmcli -help'." -#: ../cli/src/nmcli.c:234 +#: ../cli/src/nmcli.c:232 #, c-format msgid "Caught signal %d, shutting down..." msgstr "Ujet signal %d, povezava bo izklopljena ..." -#: ../cli/src/nmcli.c:259 -#, c-format -msgid "Error: Could not connect to NetworkManager." -msgstr "Napaka: ni se mogoče povezati s programom NetworkManager." +#: ../cli/src/nmcli.c:257 +msgid "Error: Could not create NMClient object." +msgstr "Napaka: ni mogoče ustvariti predmeta NMClient." -#: ../cli/src/nmcli.c:275 +#: ../cli/src/nmcli.c:273 msgid "Success" msgstr "Uspešno zaključeno" -#: ../cli/src/settings.c:411 +#: ../cli/src/settings.c:423 #, c-format msgid "%d (hex-ascii-key)" msgstr "%d (šestnajstiški-ascii-ključ)" -#: ../cli/src/settings.c:413 +#: ../cli/src/settings.c:425 #, c-format msgid "%d (104/128-bit passphrase)" msgstr "%d (104/128-bitno šifrirno geslo)" -#: ../cli/src/settings.c:416 +#: ../cli/src/settings.c:428 #, c-format msgid "%d (unknown)" msgstr "%d (neznano)" -#: ../cli/src/settings.c:442 +#: ../cli/src/settings.c:454 msgid "0 (unknown)" msgstr "0 (neznano)" -#: ../cli/src/settings.c:448 +#: ../cli/src/settings.c:460 msgid "any, " msgstr "karkoli, " -#: ../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 "samodejno" -#: ../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 "ni nastavljeno" -#: ../cli/src/utils.c:124 +#: ../cli/src/utils.c:128 #, c-format msgid "field '%s' has to be alone" msgstr "polje '%s' mora biti samostojno." -#: ../cli/src/utils.c:127 +#: ../cli/src/utils.c:131 #, c-format msgid "invalid field '%s'" msgstr "neveljavno polje '%s'" -#: ../cli/src/utils.c:146 +#: ../cli/src/utils.c:150 #, c-format msgid "Option '--terse' requires specifying '--fields'" msgstr "Možnost '--terse' zahteva podan argument '--fields'" -#: ../cli/src/utils.c:150 +#: ../cli/src/utils.c:154 #, c-format msgid "Option '--terse' requires specific '--fields' option values , not '%s'" msgstr "Možnost '--terse' zahteva posebne vrednosti '--polja' in ne '%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 "Napaka: ni mogoče ustvariti posredniškega predmeta D-Bus za org.freedesktop.DBus" + +#: ../cli/src/utils.c:341 +#, c-format +msgid "Error: NameHasOwner request failed: %s" +msgstr "Napaka: zahteva NameHasOwner ni uspela: %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 "Opozorilo: različici nmcli (%s) in NetworkManager (%s) se ne ujemata. Uporabite --nocheck, da onemogočite opozorilo.\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 "Napaka: različici nmcli (%s) in NetworkManager (%s) se ne ujemata. Izvajanje vsilite z --nocheck, rezultati pa niso napovedljivi." + +#: ../libnm-util/crypto.c:133 #, c-format msgid "PEM key file had no end tag '%s'." msgstr "Datoteka ključa PEM nima končne oznake '%s'." -#: ../libnm-util/crypto.c:130 +#: ../libnm-util/crypto.c:146 #, c-format msgid "Doesn't look like a PEM private key file." msgstr "Datoteka ni videti kot PEM datoteka zasebnega ključa." -#: ../libnm-util/crypto.c:138 +#: ../libnm-util/crypto.c:154 #, c-format msgid "Not enough memory to store PEM file data." msgstr "Ni dovolj pomnilnika za shranjevanje podatkov datoteke PEM." -#: ../libnm-util/crypto.c:154 +#: ../libnm-util/crypto.c:170 #, c-format msgid "Malformed PEM file: Proc-Type was not first tag." msgstr "Slabo oblikovana datoteka PEM: Proc-Type ni prva oznaka." -#: ../libnm-util/crypto.c:162 +#: ../libnm-util/crypto.c:178 #, c-format msgid "Malformed PEM file: unknown Proc-Type tag '%s'." msgstr "Slabo oblikovana datoteka PEM: neznana oznaka 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 "Slabo oblikovana datoteka PEM: DEK-Info ni druga oznaka." -#: ../libnm-util/crypto.c:183 +#: ../libnm-util/crypto.c:199 #, c-format msgid "Malformed PEM file: no IV found in DEK-Info tag." msgstr "Slabo oblikovana datoteka PEM: IV ni mogoče najti v DEK-Info oznaki." -#: ../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 "Slabo oblikovana datoteka PEM: neveljavna oblika IV v DEK-Info oznaki." -#: ../libnm-util/crypto.c:203 +#: ../libnm-util/crypto.c:219 #, c-format msgid "Malformed PEM file: unknown private key cipher '%s'." msgstr "Slabo oblikovana datoteka PEM: neznana cifra zasebnega ključa '%s'." -#: ../libnm-util/crypto.c:222 +#: ../libnm-util/crypto.c:238 #, c-format msgid "Could not decode private key." msgstr "Zasebnega ključa ni mogoče odkodirati." -#: ../libnm-util/crypto.c:267 -#, c-format -msgid "PEM certificate '%s' had no end tag '%s'." -msgstr "PEM potrdilo '%s' nima končne oznake '%s'." +#: ../libnm-util/crypto.c:284 +msgid "Failed to find expected PKCS#8 start tag." +msgstr "Pričakovane začetne oznake PKCS#8 ni mogoče najti." -#: ../libnm-util/crypto.c:277 +#: ../libnm-util/crypto.c:292 #, c-format -msgid "Failed to decode certificate." -msgstr "Odkodiranje potrdila je spodletelo." +msgid "Failed to find expected PKCS#8 end tag '%s'." +msgstr "Pričakovane končne oznake PKCS#8 '%s' ni mogoče najti." + +#: ../libnm-util/crypto.c:312 +msgid "Not enough memory to store private key data." +msgstr "Ni dovolj pomnilnika za shranjevanje podatkov zasebnega ključa." -#: ../libnm-util/crypto.c:286 +#: ../libnm-util/crypto.c:317 +msgid "Failed to decode PKCS#8 private key." +msgstr "Odkodiranje zasebnega ključa PKCS#8 je spodletelo." + +#: ../libnm-util/crypto.c:339 +#: ../libnm-util/crypto.c:625 #, c-format msgid "Not enough memory to store certificate data." msgstr "Ni dovolj pomnilnika za shranjevanje podatkov potrdila." -#: ../libnm-util/crypto.c:294 -#, c-format -msgid "Not enough memory to store file data." -msgstr "Ni dovolj pomnilnika za shranjevanje podatkov datoteke." - -#: ../libnm-util/crypto.c:324 +#: ../libnm-util/crypto.c:365 #, c-format msgid "IV must be an even number of bytes in length." msgstr "IV mora biti dolg sodo število bajtov." -#: ../libnm-util/crypto.c:333 +#: ../libnm-util/crypto.c:374 #, c-format msgid "Not enough memory to store the IV." msgstr "Za shranjevanje IV ni dovolj pomnilnika." -#: ../libnm-util/crypto.c:344 +#: ../libnm-util/crypto.c:385 #, c-format msgid "IV contains non-hexadecimal digits." msgstr "IV vsebuje ne-šestnajstiške številke." -#: ../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 "Cifra zasebnega ključa '%s' je neznana." -#: ../libnm-util/crypto.c:391 +#: ../libnm-util/crypto.c:432 #, c-format msgid "Not enough memory to decrypt private key." msgstr "Ni dovolj pomnilnika za dešifriranje zasebnega ključa." -#: ../libnm-util/crypto.c:511 +#: ../libnm-util/crypto.c:497 +#, c-format +msgid "Not enough memory to store decrypted private key." +msgstr "Ni dovolj pomnilnika za shranjevanje odšifriranega zasebnega ključa." + +#: ../libnm-util/crypto.c:542 #, c-format msgid "Unable to determine private key type." msgstr "Ni mogoče določiti vrste zasebnega ključa." -#: ../libnm-util/crypto.c:530 +#: ../libnm-util/crypto.c:597 #, c-format -msgid "Not enough memory to store decrypted private key." -msgstr "Ni dovolj pomnilnika za shranjevanje odšifriranega zasebnega ključa." +msgid "PEM certificate had no start tag '%s'." +msgstr "Potrdilo PEM nima začetne oznake '%s'." -#: ../libnm-util/crypto_gnutls.c:49 +#: ../libnm-util/crypto.c:606 +#, c-format +msgid "PEM certificate had no end tag '%s'." +msgstr "Potrdilo PEM nima končne oznake '%s'." + +#: ../libnm-util/crypto.c:630 +#, c-format +msgid "Failed to decode certificate." +msgstr "Odkodiranje potrdila je spodletelo." + +#: ../libnm-util/crypto_gnutls.c:50 msgid "Failed to initialize the crypto engine." msgstr "Začenjanje programnika šifriranja je spodletelo." -#: ../libnm-util/crypto_gnutls.c:93 +#: ../libnm-util/crypto_gnutls.c:92 #, c-format msgid "Failed to initialize the MD5 engine: %s / %s." msgstr "Začenjanje programnika MD5 je spodletelo: %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 "Neveljavna dolžina IV (mora biti vsaj %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 "Ni dovolj pomnilnika za medpomnilnik odšifriranega ključa." -#: ../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 "Začenjanje vsebine odšifrirne cifre je spodletelo: %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 "Nastavljanje simetričnega ključa za odšifriranje je spodletelo: %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 "Nastavljanje IV za odšifriranje je spodletelo: %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 "Odšifriranje zasebnega ključa je spodletelo: %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 "Odšifriranje zasebnega ključa je spodletelo: nepričakovana dolžina blazinjenja." -#: ../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 "Odšifriranje zasebnega ključa je spodletelo." -#: ../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 "Ni mogoče dodeliti pomnilnika za šifriranje." -#: ../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 "Začenjanje vsebine šifrirne cifre je spodletelo: %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 "Nastavitev simetričnega ključa za šifriranje je spodletela: %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 "Nastavitev IV za šifriranje je spodletela: %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 "Šifriranje podatkov je spodletelo: %s / %s." -#: ../libnm-util/crypto_gnutls.c:362 +#: ../libnm-util/crypto_gnutls.c:361 #, c-format msgid "Error initializing certificate data: %s" msgstr "Napaka med zaganjanjem podatkov potrdila: %s" -#: ../libnm-util/crypto_gnutls.c:384 +#: ../libnm-util/crypto_gnutls.c:383 #, c-format msgid "Couldn't decode certificate: %s" msgstr "Potrdila ni mogoča odkodirati: %s" -#: ../libnm-util/crypto_gnutls.c:408 +#: ../libnm-util/crypto_gnutls.c:407 #, c-format msgid "Couldn't initialize PKCS#12 decoder: %s" msgstr "Odkodirnika PKCS#12 ni mogoče začeti: %s" -#: ../libnm-util/crypto_gnutls.c:421 +#: ../libnm-util/crypto_gnutls.c:420 #, c-format msgid "Couldn't decode PKCS#12 file: %s" msgstr "Datoteke PKCS#12 ni mogoče odkodirati: %s" -#: ../libnm-util/crypto_gnutls.c:433 +#: ../libnm-util/crypto_gnutls.c:432 #, c-format msgid "Couldn't verify PKCS#12 file: %s" msgstr "Datoteke PKCS#12 ni mogoče preveriti: %s" +#: ../libnm-util/crypto_gnutls.c:460 +#, c-format +msgid "Couldn't initialize PKCS#8 decoder: %s" +msgstr "Odkodirnika PKCS#8 ni mogoče zagnati: %s" + +#: ../libnm-util/crypto_gnutls.c:483 +#, c-format +msgid "Couldn't decode PKCS#8 file: %s" +msgstr "Datoteke PKCS#8 ni mogoče odkodirati: %s" + #: ../libnm-util/crypto_nss.c:56 #, c-format msgid "Failed to initialize the crypto engine: %d." msgstr "Začenjanje programnika šifriranja je spodletelo: %d." -#: ../libnm-util/crypto_nss.c:111 +#: ../libnm-util/crypto_nss.c:107 #, c-format msgid "Failed to initialize the MD5 context: %d." msgstr "Začenjanje vsebine MD5 je spodletelo: %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 "Neveljavna dolžina IV (mora biti vsaj %d)." -#: ../libnm-util/crypto_nss.c:196 +#: ../libnm-util/crypto_nss.c:192 #, c-format msgid "Failed to initialize the decryption cipher slot." msgstr "Začenjanje polja cifre odšifriranja je spodletelo." -#: ../libnm-util/crypto_nss.c:206 +#: ../libnm-util/crypto_nss.c:202 #, c-format msgid "Failed to set symmetric key for decryption." msgstr "Nastavljanje simetričnega ključa za opis je spodletelo." -#: ../libnm-util/crypto_nss.c:216 +#: ../libnm-util/crypto_nss.c:212 #, c-format msgid "Failed to set IV for decryption." msgstr "Nastavljanje IV za odšifriranje je spodletelo." -#: ../libnm-util/crypto_nss.c:224 +#: ../libnm-util/crypto_nss.c:220 #, c-format msgid "Failed to initialize the decryption context." msgstr "Začenjanje vsebine odšifriranja je spodletelo." -#: ../libnm-util/crypto_nss.c:237 +#: ../libnm-util/crypto_nss.c:233 #, c-format msgid "Failed to decrypt the private key: %d." msgstr "Odšifriranje zasebnega ključa je spodletelo: %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 "Odšifriranje zasebnega ključa je spodletelo: odšifrirani podatki so preveliki." -#: ../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 "Končanje odšifriranja zasebnega ključa je spodletelo: %d." -#: ../libnm-util/crypto_nss.c:364 +#: ../libnm-util/crypto_nss.c:360 #, c-format msgid "Failed to initialize the encryption cipher slot." msgstr "Začenjanje polja cifre šifriranja je spodletelo." -#: ../libnm-util/crypto_nss.c:372 +#: ../libnm-util/crypto_nss.c:368 #, c-format msgid "Failed to set symmetric key for encryption." msgstr "Nastavljanje simetričnega ključa za šifriranje je spodletelo." -#: ../libnm-util/crypto_nss.c:380 +#: ../libnm-util/crypto_nss.c:376 #, c-format msgid "Failed to set IV for encryption." msgstr "Nastavljanje IV za šifriranje je spodletelo." -#: ../libnm-util/crypto_nss.c:388 +#: ../libnm-util/crypto_nss.c:384 #, c-format msgid "Failed to initialize the encryption context." msgstr "Začenjanje vsebine šifriranja je spodletelo." -#: ../libnm-util/crypto_nss.c:396 +#: ../libnm-util/crypto_nss.c:392 #, c-format msgid "Failed to encrypt: %d." msgstr "Šifriranje je spodletelo: %d." -#: ../libnm-util/crypto_nss.c:404 +#: ../libnm-util/crypto_nss.c:400 #, c-format msgid "Unexpected amount of data after encrypting." msgstr "Nepričakovana količina podatkov po šifriranju." -#: ../libnm-util/crypto_nss.c:447 +#: ../libnm-util/crypto_nss.c:443 #, c-format msgid "Couldn't decode certificate: %d" msgstr "Potrdila ni mogoče odkodirati: %d" -#: ../libnm-util/crypto_nss.c:482 +#: ../libnm-util/crypto_nss.c:478 #, c-format msgid "Couldn't convert password to UCS2: %d" msgstr "Gesla ni mogoče pretvoriti v 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 "Dekodirnika PKCS#12 ni mogoče začeti: %d" -#: ../libnm-util/crypto_nss.c:519 +#: ../libnm-util/crypto_nss.c:515 #, c-format msgid "Couldn't decode PKCS#12 file: %d" msgstr "Datoteke PCKS#12 ni mogoče odkodirati: %d" -#: ../libnm-util/crypto_nss.c:528 +#: ../libnm-util/crypto_nss.c:524 #, c-format msgid "Couldn't verify PKCS#12 file: %d" msgstr "Datoteke PCKS#12 ni mogoče preveriti: %d" -#: ../libnm-util/crypto_nss.c:557 +#: ../libnm-util/crypto_nss.c:568 msgid "Could not generate random data." msgstr "Naključnih podatkov ni mogoče ustvariti." -#: ../libnm-util/nm-utils.c:1975 +#: ../libnm-util/nm-utils.c:2000 #, c-format msgid "Not enough memory to make encryption key." msgstr "Ni dovolj pomnilnika za ustvarjanje šifrirnega ključa." -#: ../libnm-util/nm-utils.c:2085 +#: ../libnm-util/nm-utils.c:2110 msgid "Could not allocate memory for PEM file creation." msgstr "Ni mogoče dodeliti pomnilnika za ustvarjanje datoteke 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 "Ni mogoče dodeliti pomnilnika za zapis IV v datoteko 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 "Ni mogoče dodeliti pomnilnika za zapis šifriranega ključa v datoteko 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 "Ni mogoče dodeliti pomnilnika za podatke datoteke PEM." -#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1 -msgid "Connection sharing via a protected WiFi network" -msgstr "Souporaba povezave preko zaščitenega WiFi omrežja" - -#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2 -msgid "Connection sharing via an open WiFi network" -msgstr "Souporaba povezave preko odprtega WiFi omrežja" - -#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3 -msgid "Modify persistent system hostname" -msgstr "Spremeni trajno sistemsko ime gostitelja" - -#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4 -msgid "Modify system connections" -msgstr "Spremeni sistemske povezave" - -#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5 -msgid "System policy prevents modification of system settings" -msgstr "Sistemska določila onemogočajo spreminjanje sistemskih nastavitev" - -#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6 -msgid "System policy prevents modification of the persistent system hostname" -msgstr "Sistemska pravila preprečujejo spremembo imena gostitelja trajnega sistema" - -#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7 -msgid "System policy prevents sharing connections via a protected WiFi network" -msgstr "Sistemska pravila preprečujejo souporabo povezav preko zaščitenega WiFi omrežja" - -#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8 -msgid "System policy prevents sharing connections via an open WiFi network" -msgstr "Sistemska pravila preprečujejo souporabo povezav preko odprtega WiFi omrežja" - #: ../policy/org.freedesktop.NetworkManager.policy.in.h:1 msgid "Allow control of network connections" msgstr "Dovoli nadzor omrežnih povezav" #: ../policy/org.freedesktop.NetworkManager.policy.in.h:2 -msgid "Allow use of user-specific connections" -msgstr "Dovoli uporabo posebnih uporabniških povezav." +msgid "Connection sharing via a protected WiFi network" +msgstr "Souporaba povezave preko zaščitenega WiFi omrežja" #: ../policy/org.freedesktop.NetworkManager.policy.in.h:3 +msgid "Connection sharing via an open WiFi network" +msgstr "Souporaba povezave preko odprtega WiFi omrežja" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4 msgid "Enable or disable WiFi devices" msgstr "Omogoči ali onemogoči naprave WiFi" -#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4 +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5 +msgid "Enable or disable WiMAX mobile broadband devices" +msgstr "Omogoči ali onemogoči mobilne širokopasovne naprave WiMAX" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6 msgid "Enable or disable mobile broadband devices" msgstr "Omogoči ali onemogoči naprave mobilnih širokopasovnih storitev" -#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5 +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7 msgid "Enable or disable system networking" msgstr "Omogoči ali onemogoči sistemske omrežne povezave" -#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6 +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8 +msgid "Modify network connections for all users" +msgstr "Spremeni omrežne povezave za vse uporabnike" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9 +msgid "Modify persistent system hostname" +msgstr "Spremeni trajno sistemsko ime gostitelja" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10 +msgid "Modify personal network connections" +msgstr "Spremeni osebne omrežne povezave" + +#: ../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 "Postavi program NetworkManager v mirovanje ali iz njega (možnost je namenjena upravljanju napajanja)" -#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7 +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12 msgid "System policy prevents control of network connections" msgstr "Sistemska določila preprečujejo nadzor omrežnih povezav" -#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8 +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:13 msgid "System policy prevents enabling or disabling WiFi devices" msgstr "Sistemska določila preprečujejo omogočanja ali onemogočanje WiFi naprav" -#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9 +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:14 +msgid "System policy prevents enabling or disabling WiMAX mobile broadband devices" +msgstr "Sistemska določila preprečujejo omogočanje ali onemogočanje mobilnih širokopasovnih naprav WiMAX" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:15 msgid "System policy prevents enabling or disabling mobile broadband devices" msgstr "Sistemska določila preprečuje omogočanja ali onemogočanje mobilne širokopasovne naprave" -#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10 +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:16 msgid "System policy prevents enabling or disabling system networking" msgstr "Sistemska določila preprečujejo omogočanje ali onemogočanje omrežnih povezav." -#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11 +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:17 +msgid "System policy prevents modification of network settings for all users" +msgstr "Sistemska določila preprečujejo spreminjanje sistemskih nastavitev za vse uporabnike" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:18 +msgid "System policy prevents modification of personal network settings" +msgstr "Sistemska določila preprečujejo spreminjanje osebnih omrežnih nastavitev" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:19 +msgid "System policy prevents modification of the persistent system hostname" +msgstr "Sistemska pravila preprečujejo spremembo imena gostitelja trajnega sistema" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:20 msgid "System policy prevents putting NetworkManager to sleep or waking it up" msgstr "Sistemska določila preprečujejo postavitev programa NetworkManager v mirovanje ali iz njega." -#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12 -msgid "System policy prevents use of user-specific connections" -msgstr "Sistemska določila preprečujejo uporabo uporabniških povezav." +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:21 +msgid "System policy prevents sharing connections via a protected WiFi network" +msgstr "Sistemska pravila preprečujejo souporabo povezav preko zaščitenega WiFi omrežja" + +#: ../policy/org.freedesktop.NetworkManager.policy.in.h:22 +msgid "System policy prevents sharing connections via an open WiFi network" +msgstr "Sistemska pravila preprečujejo souporabo povezav preko odprtega WiFi omrežja" + +#: ../src/main.c:530 +#, c-format +msgid "Invalid option. Please use --help to see a list of valid options.\n" +msgstr "Neveljavna možnost. Uporabite --help za seznam veljavnih možnosti.\n" + +#: ../src/main.c:611 +#, c-format +msgid "%s. Please use --help to see a list of valid options.\n" +msgstr "%s. Uporabite --help za prikaz seznam veljavnih možnosti.\n" + +#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:62 +msgid "# Created by NetworkManager\n" +msgstr "#Ustvarjeno z upravljalnikom omrežij\n" + +#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:69 +#, c-format +msgid "" +"# Merged from %s\n" +"\n" +msgstr "" +"# Združeno iz %s\n" +"\n" + +#: ../src/dhcp-manager/nm-dhcp-manager.c:284 +msgid "no usable DHCP client could be found." +msgstr "ni mogoče najti uporabnega odjemalca DHCP." + +#: ../src/dhcp-manager/nm-dhcp-manager.c:293 +msgid "'dhclient' could be found." +msgstr "'dhclient' je najden." + +#: ../src/dhcp-manager/nm-dhcp-manager.c:303 +msgid "'dhcpcd' could be found." +msgstr "'dhcpcd' ni mogoče najti." + +#: ../src/dhcp-manager/nm-dhcp-manager.c:311 +#, c-format +msgid "unsupported DHCP client '%s'" +msgstr "nepodprt odjemalec DHCP '%s'" + +#: ../src/dns-manager/nm-dns-manager.c:376 +msgid "NOTE: the libc resolver may not support more than 3 nameservers." +msgstr "OPOMBA: razreševalnik libc morda ne podpira več kot 3 imenskih strežnikov." + +#: ../src/dns-manager/nm-dns-manager.c:378 +msgid "The nameservers listed below may not be recognized." +msgstr "Navedeni imenski strežniki morda ne bodo prepoznani." + +#: ../src/logging/nm-logging.c:149 +#, c-format +msgid "Unknown log level '%s'" +msgstr "Neznana raven beleženja '%s'" + +#: ../src/logging/nm-logging.c:174 +#, c-format +msgid "Unknown log domain '%s'" +msgstr "Neznana domena beleženja '%s'" + +#: ../src/modem-manager/nm-modem-cdma.c:296 +#: ../src/nm-device-bt.c:355 +#, c-format +msgid "CDMA connection %d" +msgstr "Povezava CDMA %d" + +#: ../src/modem-manager/nm-modem-gsm.c:499 +#: ../src/nm-device-bt.c:351 +#, c-format +msgid "GSM connection %d" +msgstr "Povezava GSM %d" + +#: ../src/nm-device-bt.c:326 +#, c-format +msgid "PAN connection %d" +msgstr "Povezava PAN %d" + +#: ../src/nm-device-bt.c:359 +#, c-format +msgid "DUN connection %d" +msgstr "Povezava DUN %d" + +#: ../src/nm-device-ethernet.c:1723 +#, c-format +msgid "PPPoE connection %d" +msgstr "Povezava PPPoE %d" + +#: ../src/nm-device-ethernet.c:1723 +#: ../src/settings/nm-settings-utils.c:50 +#, c-format +msgid "Wired connection %d" +msgstr "Žična povezava %d" + +#: ../src/nm-device-olpc-mesh.c:393 +#, c-format +msgid "Mesh %d" +msgstr "Mreža %d" + +#: ../src/nm-manager.c:657 +#, c-format +msgid "VPN connection %d" +msgstr "Povezava VPN %d" #: ../src/nm-netlink-monitor.c:100 #: ../src/nm-netlink-monitor.c:231 @@ -1781,71 +2119,40 @@ msgstr "skupini netlink se ni mogoče pridružiti: %s" msgid "error updating link cache: %s" msgstr "napaka med posodabljanjem predpomnilnika povezave: %s" -#: ../src/main.c:499 -#, c-format -msgid "Invalid option. Please use --help to see a list of valid options.\n" -msgstr "Neveljavna možnost. Uporabite --help za seznam veljavnih možnosti.\n" +#: ../src/settings/plugins/ifcfg-rh/reader.c:3575 +#: ../src/settings/plugins/ifnet/connection_parser.c:51 +msgid "System" +msgstr "Sistem" -#: ../src/main.c:570 -#, c-format -msgid "%s. Please use --help to see a list of valid options.\n" -msgstr "%s. Uporabite --help za prikaz seznam veljavnih možnosti.\n" +#~ msgid "SCOPE" +#~ msgstr "OBSEG" -#: ../src/dhcp-manager/nm-dhcp-dhclient.c:328 -msgid "# Created by NetworkManager\n" -msgstr "#Ustvarjeno z upravljalnikom omrežij\n" +#~ msgid "DBUS-SERVICE" +#~ msgstr "STORITEV-DBUS" -#: ../src/dhcp-manager/nm-dhcp-dhclient.c:344 -#, c-format -msgid "" -"# Merged from %s\n" -"\n" -msgstr "" -"# Združeno iz %s\n" -"\n" +#~ msgid "system" +#~ msgstr "sistem" -#: ../src/dhcp-manager/nm-dhcp-manager.c:284 -msgid "no usable DHCP client could be found." -msgstr "ni mogoče najti uporabnega odjemalca DHCP." +#~ msgid "user" +#~ msgstr "uporabnik" -#: ../src/dhcp-manager/nm-dhcp-manager.c:293 -msgid "'dhclient' could be found." -msgstr "'dhclient' je najden." - -#: ../src/dhcp-manager/nm-dhcp-manager.c:303 -msgid "'dhcpcd' could be found." -msgstr "'dhcpcd' ni mogoče najti." - -#: ../src/dhcp-manager/nm-dhcp-manager.c:311 -#, c-format -msgid "unsupported DHCP client '%s'" -msgstr "nepodprt odjemalec DHCP '%s'" - -#: ../src/logging/nm-logging.c:146 -#, c-format -msgid "Unknown log level '%s'" -msgstr "Neznana raven beleženja '%s'" +#~ msgid "System connections" +#~ msgstr "Sistemske povezave" -#: ../src/logging/nm-logging.c:171 -#, c-format -msgid "Unknown log domain '%s'" -msgstr "Neznana domena beleženja '%s'" +#~ msgid "User connections" +#~ msgstr "Uporabniške povezave" -#: ../src/dns-manager/nm-dns-manager.c:384 -msgid "NOTE: the libc resolver may not support more than 3 nameservers." -msgstr "OPOMBA: razreševalnik libc morda ne podpira več kot 3 imenskih strežnikov." +#~ msgid "Error: Obtaining active connection for '%s' failed." +#~ msgstr "Napaka: pridobivanje dejavne povezave '%s' je spodletelo." -#: ../src/dns-manager/nm-dns-manager.c:386 -msgid "The nameservers listed below may not be recognized." -msgstr "Navedeni imenski strežniki morda ne bodo prepoznani." +#~ msgid "Error: Could not get user settings." +#~ msgstr "Napaka: ni mogoče pridobiti uporabniških nastavitev." -#: ../src/settings/nm-default-wired-connection.c:157 -#, c-format -msgid "Auto %s" -msgstr "Samodejno %s" +#~ msgid "Allow use of user-specific connections" +#~ msgstr "Dovoli uporabo posebnih uporabniških povezav." -#: ../system-settings/plugins/ifcfg-rh/reader.c:3412 -#: ../system-settings/plugins/ifnet/connection_parser.c:49 -msgid "System" -msgstr "Sistem" +#~ msgid "System policy prevents use of user-specific connections" +#~ msgstr "Sistemska določila preprečujejo uporabo uporabniških povezav." +#~ msgid "Auto %s" +#~ msgstr "Samodejno %s" diff --git a/policy/Makefile.in b/policy/Makefile.in index c63e1c5e..739987cd 100644 --- a/policy/Makefile.in +++ b/policy/Makefile.in @@ -177,8 +177,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/policy/org.freedesktop.NetworkManager.policy b/policy/org.freedesktop.NetworkManager.policy index 73689dc9..7f349115 100644 --- a/policy/org.freedesktop.NetworkManager.policy +++ b/policy/org.freedesktop.NetworkManager.policy @@ -146,6 +146,7 @@ Activar o desactivar los dispositivos inalámbricos Activar ou desactivar os dispositivos WiFi WiFi युक्तियाँ सक्रिय या निष्क्रिय करें + Omogućuje ili onemogućuje WiFi uređaje WiFi eszközök be- és kikapcsolása Aktifkan atau matikan perangkat WiFi WiFi ಸಾಧನಗಳನ್ನು ಶಕ್ತಗೊಳಿಸಿ ಅಥವ ಅಶಕ್ತಗೊಳಿಸಿ @@ -209,6 +210,7 @@ Activar o desactivar los dispositivos de banda ancha móvil Activar ou desactivar os dispositivos de banda ancha móbiles मोबाइल ब्राडबैंड युक्तियाँ सक्रिय या निष्क्रिय करें + Omogućuje ili onemogućuje mobilne širokopojasne uređaje Mobil széles sávú eszközök be- és kikapcsolása Aktifkan atau matikan perangkat broadband bergerak ಮೊಬೈಲ್ ಬ್ರಾಡ್‌ಬ್ಯಾಂಡ್ ಸಾಧನಗಳನ್ನು ಶಕ್ತಗೊಳಿಸಿ ಅಥವ ಅಶಕ್ತಗೊಳಿಸಿ @@ -267,12 +269,15 @@ Mobile WiMAX-Breitbandgeräte aktivieren oder deaktivieren Enŝalti aŭ elŝalti WiMAX-larĝkapacitajn aparatojn Activar o desactivar los dispositivos de banda ancha móvil WiMAX + Activar ou desactivar os dispositivos de banda larga móbil WIMAX + Omogućuje ili onemogućuje WiMAX mobilne širokopojasne uređaje 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 + Omogoči ali onemogoči mobilne širokopasovne naprave WiMAX Увімкнути або вимкнути пристрої широкосмугових мобільних мереж WiMAX System policy prevents enabling or disabling WiMAX mobile broadband devices Политиката на системата не позволява включване и изключване на устройства за мобилни мрежи по WiMAX @@ -280,12 +285,14 @@ Die Systemrichtlinien verhindern die Aktivierung oder Deaktivierung mobiler WiMAX-Breitbandgeräte 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 normativa do sistema evita activar ou desactivar os dispositivos de banda larga móbil 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 + Sistemska določila preprečujejo omogočanje ali onemogočanje mobilnih širokopasovnih naprav WiMAX Правила системи забороняють вмикання або вимикання пристроїв широкосмугових мобільних мереж WiMAX no @@ -305,6 +312,7 @@ Permitir controlar las conexiones de red Permitir o control das conexións de rede संजाल कनेक्शन के नियंत्रण स्वीकार करें + Dozvoli upravljanje mrežnim vezama Hálózati kapcsolatok felügyeletének engedélyezése Ijinkan pengendalian sambungan jaringan ಜಾಲಬಂಧ ಸಂಪರ್ಕಗಳನ್ನು ನಿಯಂತ್ರಿಸುವುದನ್ನು ಅನುಮತಿಸಿ @@ -370,10 +378,12 @@ Kundivido de konektoj per protektita WiFi-reto Compartir conexión a través de una red WIFI protegida Konexio partekatua babestutako haririk gabeko sarearen bidez + Yhteyden jakaminen suojatun langattoman verkon kautta Partage de connexion via un réseau WiFi protégé Conexión compartida a través dunha rede WiFi protexida સુરક્ષિત થયેલ WiFi નેટવર્ક મારફતે જોડાણ વહેંચણી किसी संरक्षित WiFi संजाल के द्वारा कनेक्शन साझा + Dijeljenje veze korištenjem zaštićene WiFi mreže Kapcsolatmegosztás védett WiFi hálózaton Berbagi koneksi melalui jaringan WiFi terlindung. Condivide connessione attraverso una rete WiFi protetta @@ -410,6 +420,7 @@ Sistempolitiko preventas kundividon de konektoj per protektita WiFi-reto La política del sistema evita compartir conexiones a través de una red WiFi protegida Sistemako arauek babestutako haririk gabeko sareen bidez konexioak partekatzea saihesten dute + Tietoturvakäytäntö estää yhteyksien jakamisen suojatun langattoman verkon kautta La stratégie du système empêche tout partage des connexions via un réseau WiFi protégé A política do sistema impide compartir conexións a través dunha rede WiFi protexida સિસ્ટમ પોલિસી એ સુરક્ષિત થયેલ WiFi નેટવર્ક મારફતે વહેંચણી જોડાણોને રોકી રહ્યા છે @@ -457,10 +468,12 @@ Kundivido de konektoj per malferma WiFi-reto Compartir conexión a través de una red WIFI abierta Konexio partekatua irekitako haririk gabeko sarearen bidez + Yhteyden jakaminen avoimen langattoman verkon kautta Partage de connexion via un réseau WiFi ouvert Conexión compartida a través dunha rede WiFi aberta ખુલ્લા WiFi નેટવર્ક મારફતે જોડાણ વહેંચણી किसी खुले WiFi संजाल के द्वारा कनेक्शन साझा + Dijeljenje veze korištenjem otvorene WiFi mreže Kapcsolatmegosztás nyílt WiFi hálózaton Berbagi koneksi melalui jaringan WiFi terbuka Condivide connessione attraverso una rete WiFi aperta @@ -497,6 +510,7 @@ Sistempolitiko preventas kundividon de konektoj per malferma WiFi-reto La política del sistema evita compartir conexiones a través de una red WiFi abierta Sistemako arauek irakitako haririk gabeko sareen bidez konexioak partekatzea saihesten dute + Tietoturvakäytäntö estää yhteyksien jakamisen avoimen langattoman verkon kautta La stratégie du système empêche tout partage des connexions via un réseau WiFi ouvert A política do sistema impide compartir conexións a través dunha rede WiFi aberta સિસ્ટમ પોલિસી એ ખુલ્લા WiFi નેટવર્ક મારફતે વહેંચણી જોડાણોને રોકી રહ્યા છે @@ -535,23 +549,27 @@ Eigene Netzwerkverbindungen bearbeiten Modifi proprajn retkonektojn Modificar las conexiones de red personales + Modificar as conexións de rede persoais Személyes hálózati kapcsolatok módosítása Ubah koneksi jaringan personal 개인 네트워크 연결을 수정합니다 वैयक्तिक नेटवर्क जोडणी संपादित करा Modyfikacja osobistych połączeń sieciowych Редактировать личные настройки подключения + Spremeni osebne omrežne povezave Змінити параметри особистих з’єднань з мережею 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 política do sistema impide a modificación da configuración persoal da rede 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 Системная политика запрещает изменение персональных настроек сети + Sistemska določila preprečujejo spreminjanje osebnih omrežnih nastavitev Правила системи забороняють внесення змін до особистих параметрів мережі no @@ -564,23 +582,27 @@ Netzwerkverbindungen für alle Benutzer bearbeiten Modifi retkonektojn por ĉiuj uzantoj Modificar las conexiones de red para todos los usuarios + Modificar as conexións de rede para tódolos 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 Изменить подключения доступные всем пользователям + Spremeni omrežne povezave za vse uporabnike Внести зміни до мережевих з’єднань всіх користувачів 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 política do sistema impide a modificación da configuración da rede para tódolos 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 Системная политика запрещает изменение настроек для всех пользователей + Sistemska določila preprečujejo spreminjanje sistemskih nastavitev za vse uporabnike Правила системи забороняють внесення змін до параметрів мережі для всіх користувачів no @@ -602,6 +624,7 @@ Modifi permanentan sisteman gastigan nomon Modificar nombre de host de sistema persistente Aldatu sistemako ostalari-izen iraunkorra + Muuta järjestelmän verkkonimeä Modifier le nom d'hôte du système persistant Modificar o nome persistente do anfitrión do sistema નિરંતર સિસ્ટમ યજમાનનામને બદલો @@ -642,6 +665,7 @@ Sistempolitiko preventas modifadon de la konstanta sistem-gastnomo La política del sistema evita la modificación del nombre persistente del sistema Sistemako arauek sistemako ostalari-izen iraunkorra aldatzea saihesten dute + Tietoturvakäytäntö estää tietokoneen nimen muuttamisen La stratégie du système empêche toute modification du nom d'hôte du système persistant A política do sistema impide a modificación do nome do anfitrión do sistema સિસ્ટમ પોલિસી એ નિરંતર સિસ્ટમ યજમાનનામનાં બદલાવને અટકાવે છે diff --git a/src/Makefile.am b/src/Makefile.am index 94e1a8c0..cbcfdc62 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -142,6 +142,8 @@ NetworkManager_SOURCES = \ nm-ip6-config.h \ nm-active-connection.h \ nm-active-connection.c \ + nm-config.h \ + nm-config.c \ main.c \ nm-policy.c \ nm-policy.h \ @@ -159,6 +161,10 @@ NetworkManager_SOURCES = \ nm-manager-auth.h \ nm-netlink-monitor.c \ nm-netlink-monitor.h \ + nm-netlink-utils.c \ + nm-netlink-utils.h \ + nm-netlink-compat.h \ + nm-netlink-compat.c \ nm-activation-request.c \ nm-activation-request.h \ nm-properties-changed-signal.c \ diff --git a/src/Makefile.in b/src/Makefile.in index 5d9567ed..103df7fb 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -107,6 +107,7 @@ am_NetworkManager_OBJECTS = NetworkManager-nm-call-store.$(OBJEXT) \ NetworkManager-nm-ip4-config.$(OBJEXT) \ NetworkManager-nm-ip6-config.$(OBJEXT) \ NetworkManager-nm-active-connection.$(OBJEXT) \ + NetworkManager-nm-config.$(OBJEXT) \ NetworkManager-main.$(OBJEXT) \ NetworkManager-nm-policy.$(OBJEXT) \ NetworkManager-nm-policy-hosts.$(OBJEXT) \ @@ -116,6 +117,8 @@ am_NetworkManager_OBJECTS = NetworkManager-nm-call-store.$(OBJEXT) \ NetworkManager-nm-manager.$(OBJEXT) \ NetworkManager-nm-manager-auth.$(OBJEXT) \ NetworkManager-nm-netlink-monitor.$(OBJEXT) \ + NetworkManager-nm-netlink-utils.$(OBJEXT) \ + NetworkManager-nm-netlink-compat.$(OBJEXT) \ NetworkManager-nm-activation-request.$(OBJEXT) \ NetworkManager-nm-properties-changed-signal.$(OBJEXT) \ NetworkManager-wpa.$(OBJEXT) \ @@ -338,8 +341,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ @@ -565,6 +576,8 @@ NetworkManager_SOURCES = \ nm-ip6-config.h \ nm-active-connection.h \ nm-active-connection.c \ + nm-config.h \ + nm-config.c \ main.c \ nm-policy.c \ nm-policy.h \ @@ -582,6 +595,10 @@ NetworkManager_SOURCES = \ nm-manager-auth.h \ nm-netlink-monitor.c \ nm-netlink-monitor.h \ + nm-netlink-utils.c \ + nm-netlink-utils.h \ + nm-netlink-compat.h \ + nm-netlink-compat.c \ nm-activation-request.c \ nm-activation-request.h \ nm-properties-changed-signal.c \ @@ -832,6 +849,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-activation-request.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-active-connection.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-call-store.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-config.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-dbus-manager.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-device-bt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-device-ethernet.Po@am__quote@ @@ -847,7 +865,9 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-ip6-config.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-manager-auth.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-manager.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-netlink-compat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-netlink-monitor.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-netlink-utils.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-policy-hostname.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-policy-hosts.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetworkManager-nm-policy.Po@am__quote@ @@ -1197,6 +1217,22 @@ NetworkManager-nm-active-connection.obj: nm-active-connection.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-active-connection.obj `if test -f 'nm-active-connection.c'; then $(CYGPATH_W) 'nm-active-connection.c'; else $(CYGPATH_W) '$(srcdir)/nm-active-connection.c'; fi` +NetworkManager-nm-config.o: nm-config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-config.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-config.Tpo -c -o NetworkManager-nm-config.o `test -f 'nm-config.c' || echo '$(srcdir)/'`nm-config.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-config.Tpo $(DEPDIR)/NetworkManager-nm-config.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nm-config.c' object='NetworkManager-nm-config.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-config.o `test -f 'nm-config.c' || echo '$(srcdir)/'`nm-config.c + +NetworkManager-nm-config.obj: nm-config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-config.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-config.Tpo -c -o NetworkManager-nm-config.obj `if test -f 'nm-config.c'; then $(CYGPATH_W) 'nm-config.c'; else $(CYGPATH_W) '$(srcdir)/nm-config.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-config.Tpo $(DEPDIR)/NetworkManager-nm-config.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nm-config.c' object='NetworkManager-nm-config.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-config.obj `if test -f 'nm-config.c'; then $(CYGPATH_W) 'nm-config.c'; else $(CYGPATH_W) '$(srcdir)/nm-config.c'; fi` + NetworkManager-main.o: main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-main.o -MD -MP -MF $(DEPDIR)/NetworkManager-main.Tpo -c -o NetworkManager-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-main.Tpo $(DEPDIR)/NetworkManager-main.Po @@ -1341,6 +1377,38 @@ NetworkManager-nm-netlink-monitor.obj: nm-netlink-monitor.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-netlink-monitor.obj `if test -f 'nm-netlink-monitor.c'; then $(CYGPATH_W) 'nm-netlink-monitor.c'; else $(CYGPATH_W) '$(srcdir)/nm-netlink-monitor.c'; fi` +NetworkManager-nm-netlink-utils.o: nm-netlink-utils.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-netlink-utils.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-netlink-utils.Tpo -c -o NetworkManager-nm-netlink-utils.o `test -f 'nm-netlink-utils.c' || echo '$(srcdir)/'`nm-netlink-utils.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-netlink-utils.Tpo $(DEPDIR)/NetworkManager-nm-netlink-utils.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nm-netlink-utils.c' object='NetworkManager-nm-netlink-utils.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-netlink-utils.o `test -f 'nm-netlink-utils.c' || echo '$(srcdir)/'`nm-netlink-utils.c + +NetworkManager-nm-netlink-utils.obj: nm-netlink-utils.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-netlink-utils.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-netlink-utils.Tpo -c -o NetworkManager-nm-netlink-utils.obj `if test -f 'nm-netlink-utils.c'; then $(CYGPATH_W) 'nm-netlink-utils.c'; else $(CYGPATH_W) '$(srcdir)/nm-netlink-utils.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-netlink-utils.Tpo $(DEPDIR)/NetworkManager-nm-netlink-utils.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nm-netlink-utils.c' object='NetworkManager-nm-netlink-utils.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-netlink-utils.obj `if test -f 'nm-netlink-utils.c'; then $(CYGPATH_W) 'nm-netlink-utils.c'; else $(CYGPATH_W) '$(srcdir)/nm-netlink-utils.c'; fi` + +NetworkManager-nm-netlink-compat.o: nm-netlink-compat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-netlink-compat.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-netlink-compat.Tpo -c -o NetworkManager-nm-netlink-compat.o `test -f 'nm-netlink-compat.c' || echo '$(srcdir)/'`nm-netlink-compat.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-netlink-compat.Tpo $(DEPDIR)/NetworkManager-nm-netlink-compat.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nm-netlink-compat.c' object='NetworkManager-nm-netlink-compat.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-netlink-compat.o `test -f 'nm-netlink-compat.c' || echo '$(srcdir)/'`nm-netlink-compat.c + +NetworkManager-nm-netlink-compat.obj: nm-netlink-compat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-netlink-compat.obj -MD -MP -MF $(DEPDIR)/NetworkManager-nm-netlink-compat.Tpo -c -o NetworkManager-nm-netlink-compat.obj `if test -f 'nm-netlink-compat.c'; then $(CYGPATH_W) 'nm-netlink-compat.c'; else $(CYGPATH_W) '$(srcdir)/nm-netlink-compat.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-netlink-compat.Tpo $(DEPDIR)/NetworkManager-nm-netlink-compat.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nm-netlink-compat.c' object='NetworkManager-nm-netlink-compat.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NetworkManager-nm-netlink-compat.obj `if test -f 'nm-netlink-compat.c'; then $(CYGPATH_W) 'nm-netlink-compat.c'; else $(CYGPATH_W) '$(srcdir)/nm-netlink-compat.c'; fi` + NetworkManager-nm-activation-request.o: nm-activation-request.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NetworkManager_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NetworkManager-nm-activation-request.o -MD -MP -MF $(DEPDIR)/NetworkManager-nm-activation-request.Tpo -c -o NetworkManager-nm-activation-request.o `test -f 'nm-activation-request.c' || echo '$(srcdir)/'`nm-activation-request.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NetworkManager-nm-activation-request.Tpo $(DEPDIR)/NetworkManager-nm-activation-request.Po diff --git a/src/NetworkManagerUtils.c b/src/NetworkManagerUtils.c index f96f2aad..451de6d0 100644 --- a/src/NetworkManagerUtils.c +++ b/src/NetworkManagerUtils.c @@ -26,6 +26,7 @@ #include #include #include +#include #include "NetworkManagerUtils.h" #include "nm-utils.h" @@ -43,9 +44,6 @@ #include "nm-setting-wireless-security.h" #include "nm-manager-auth.h" -#include -#include - /* * nm_ethernet_address_is_valid * diff --git a/src/backends/Makefile.in b/src/backends/Makefile.in index 2f489e75..9eb2e0ff 100644 --- a/src/backends/Makefile.in +++ b/src/backends/Makefile.in @@ -232,8 +232,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/src/backends/NetworkManagerGeneric.c b/src/backends/NetworkManagerGeneric.c index 8f16066f..89b8a46d 100644 --- a/src/backends/NetworkManagerGeneric.c +++ b/src/backends/NetworkManagerGeneric.c @@ -34,7 +34,9 @@ #include "nm-system.h" #include "NetworkManagerUtils.h" #include "nm-logging.h" +#include "nm-netlink-compat.h" #include "nm-netlink-monitor.h" +#include "nm-netlink-utils.h" /* Because of a bug in libnl, rtnl.h should be included before route.h */ #include @@ -50,15 +52,13 @@ */ void nm_generic_enable_loopback (void) { - struct nl_handle * nlh = NULL; + struct nl_sock * nlh = NULL; struct rtnl_addr * addr = NULL; struct nl_addr * nl_addr = NULL; guint32 binaddr = 0; int iface_idx = -1; int err; - nm_system_device_set_up_down_with_iface ("lo", TRUE, NULL); - nlh = nm_netlink_get_default_handle (); if (!nlh) return; @@ -67,6 +67,8 @@ void nm_generic_enable_loopback (void) if (iface_idx < 0) return; + nm_system_iface_set_up (iface_idx, TRUE, NULL); + addr = rtnl_addr_alloc (); if (!addr) return; @@ -90,10 +92,10 @@ void nm_generic_enable_loopback (void) rtnl_addr_set_scope (addr, RT_SCOPE_HOST); rtnl_addr_set_label (addr, "lo"); - if ((err = rtnl_addr_add (nlh, addr, 0)) < 0) { - if (err != -EEXIST) { - nm_log_warn (LOGD_CORE, "error %d returned from rtnl_addr_add():\n%s", err, nl_geterror()); - } + err = rtnl_addr_add (nlh, addr, 0); + if (err && (err != -NLE_EXIST)) { + nm_log_warn (LOGD_CORE, "error setting loopback address: (%d) %s", + err, nl_geterror (err)); } out: if (addr) diff --git a/src/bluez-manager/Makefile.in b/src/bluez-manager/Makefile.in index 1336b7ec..764493a4 100644 --- a/src/bluez-manager/Makefile.in +++ b/src/bluez-manager/Makefile.in @@ -189,8 +189,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/src/dhcp-manager/Makefile.in b/src/dhcp-manager/Makefile.in index dd557056..d373f7e9 100644 --- a/src/dhcp-manager/Makefile.in +++ b/src/dhcp-manager/Makefile.in @@ -237,8 +237,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/src/dhcp-manager/nm-dhcp-client.c b/src/dhcp-manager/nm-dhcp-client.c index 3418bf3b..f10f3de9 100644 --- a/src/dhcp-manager/nm-dhcp-client.c +++ b/src/dhcp-manager/nm-dhcp-client.c @@ -638,7 +638,7 @@ nm_dhcp_client_foreach_option (NMDHCPClient *self, } if (!ignore) { - const char *tmp_key = value; + const char *tmp_key = key; /* Remove the "new_" prefix that dhclient passes back */ if (!strncmp (key, NEW_TAG, strlen (NEW_TAG))) diff --git a/src/dhcp-manager/tests/Makefile.in b/src/dhcp-manager/tests/Makefile.in index 7e875055..8a3c2e97 100644 --- a/src/dhcp-manager/tests/Makefile.in +++ b/src/dhcp-manager/tests/Makefile.in @@ -187,8 +187,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/src/dns-manager/Makefile.in b/src/dns-manager/Makefile.in index aad1c562..d44c3bfc 100644 --- a/src/dns-manager/Makefile.in +++ b/src/dns-manager/Makefile.in @@ -190,8 +190,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/src/dns-manager/nm-dns-bind.c b/src/dns-manager/nm-dns-bind.c index fc7af776..55fce030 100644 --- a/src/dns-manager/nm-dns-bind.c +++ b/src/dns-manager/nm-dns-bind.c @@ -297,7 +297,8 @@ update (NMDnsPlugin *plugin, const GSList *vpn_configs, const GSList *dev_configs, const GSList *other_configs, - const char *hostname) + const char *hostname, + const char *iface) { NMDnsBind *self = NM_DNS_BIND (plugin); NMDnsBindPrivate *priv = NM_DNS_BIND_GET_PRIVATE (self); diff --git a/src/dns-manager/nm-dns-dnsmasq.c b/src/dns-manager/nm-dns-dnsmasq.c index 9cc01978..a602c54f 100644 --- a/src/dns-manager/nm-dns-dnsmasq.c +++ b/src/dns-manager/nm-dns-dnsmasq.c @@ -133,23 +133,56 @@ add_ip4_config (GString *str, NMIP4Config *ip4, gboolean split) return TRUE; } -static gboolean -ip6_addr_to_string (const struct in6_addr *addr, char *buf, size_t buflen) +#define IP6_ADDR_BUFLEN (INET6_ADDRSTRLEN + 50) + +static char * +ip6_addr_to_string (const struct in6_addr *addr, const char *iface) { - memset (buf, 0, buflen); + char *buf, *p; + + /* allocate enough space for the address + interface name */ + buf = g_malloc0 (IP6_ADDR_BUFLEN + 1); /* inet_ntop is probably supposed to do this for us, but it doesn't */ - if (IN6_IS_ADDR_V4MAPPED (addr)) - return !!inet_ntop (AF_INET, &(addr->s6_addr32[3]), buf, buflen); + if (IN6_IS_ADDR_V4MAPPED (addr)) { + if (!inet_ntop (AF_INET, &(addr->s6_addr32[3]), buf, IP6_ADDR_BUFLEN)) + goto error; + return buf; + } - return !!inet_ntop (AF_INET6, addr, buf, buflen); + if (!inet_ntop (AF_INET6, addr, buf, IP6_ADDR_BUFLEN)) + goto error; + + /* In the case of addr being a link-local address, inet_ntop can either + * return an address with scope identifier already in place (like + * fe80::202:b3ff:fe8d:7aaf%wlan0) or it returns an address without + * scope identifier at all (like fe80::202:b3ff:fe8d:7aaf) + */ + p = strchr (buf, '%'); + if (p) { + /* If we got a scope identifier, we need to replace the '%' + * with '@', since dnsmasq supports '%' in server= addresses + * only since version 2.58 and up + */ + *p = '@'; + } else if (IN6_IS_ADDR_LINKLOCAL (addr)) { + /* If we got no scope identifier at all append the interface name */ + strncat (buf, "@", IP6_ADDR_BUFLEN - strlen (buf)); + strncat (buf, iface, IP6_ADDR_BUFLEN - strlen (buf)); + } + + return buf; + +error: + g_free (buf); + return NULL; } static gboolean -add_ip6_config (GString *str, NMIP6Config *ip6, gboolean split) +add_ip6_config (GString *str, NMIP6Config *ip6, gboolean split, const char *iface) { - char buf[INET6_ADDRSTRLEN + 1]; const struct in6_addr *addr; + char *buf; int n, i; gboolean added = FALSE; @@ -159,7 +192,8 @@ add_ip6_config (GString *str, NMIP6Config *ip6, gboolean split) * the first nameserver here. */ addr = nm_ip6_config_get_nameserver (ip6, 0); - if (!ip6_addr_to_string (addr, &buf[0], sizeof (buf))) + buf = ip6_addr_to_string (addr, iface); + if (!buf) return FALSE; /* searches are preferred over domains */ @@ -181,6 +215,8 @@ add_ip6_config (GString *str, NMIP6Config *ip6, gboolean split) added = TRUE; } } + + g_free (buf); } /* If no searches or domains, just add the namservers */ @@ -188,8 +224,11 @@ add_ip6_config (GString *str, NMIP6Config *ip6, gboolean split) n = nm_ip6_config_get_num_nameservers (ip6); for (i = 0; i < n; i++) { addr = nm_ip6_config_get_nameserver (ip6, i); - if (ip6_addr_to_string (addr, &buf[0], sizeof (buf))) + buf = ip6_addr_to_string (addr, iface); + if (buf) { g_string_append_printf (str, "server=%s\n", buf); + g_free (buf); + } } } @@ -201,12 +240,13 @@ update (NMDnsPlugin *plugin, const GSList *vpn_configs, const GSList *dev_configs, const GSList *other_configs, - const char *hostname) + const char *hostname, + const char *iface) { NMDnsDnsmasq *self = NM_DNS_DNSMASQ (plugin); GString *conf; GSList *iter; - const char *argv[10]; + const char *argv[11]; GError *error = NULL; int ignored; GPid pid = 0; @@ -226,7 +266,7 @@ update (NMDnsPlugin *plugin, if (NM_IS_IP4_CONFIG (iter->data)) add_ip4_config (conf, NM_IP4_CONFIG (iter->data), TRUE); else if (NM_IS_IP6_CONFIG (iter->data)) - add_ip6_config (conf, NM_IP6_CONFIG (iter->data), TRUE); + add_ip6_config (conf, NM_IP6_CONFIG (iter->data), TRUE, iface); } /* Now add interface configs without split DNS */ @@ -234,7 +274,7 @@ update (NMDnsPlugin *plugin, if (NM_IS_IP4_CONFIG (iter->data)) add_ip4_config (conf, NM_IP4_CONFIG (iter->data), FALSE); else if (NM_IS_IP6_CONFIG (iter->data)) - add_ip6_config (conf, NM_IP6_CONFIG (iter->data), FALSE); + add_ip6_config (conf, NM_IP6_CONFIG (iter->data), FALSE, iface); } /* And any other random configs */ @@ -242,7 +282,7 @@ update (NMDnsPlugin *plugin, if (NM_IS_IP4_CONFIG (iter->data)) add_ip4_config (conf, NM_IP4_CONFIG (iter->data), FALSE); else if (NM_IS_IP6_CONFIG (iter->data)) - add_ip6_config (conf, NM_IP6_CONFIG (iter->data), FALSE); + add_ip6_config (conf, NM_IP6_CONFIG (iter->data), FALSE, iface); } /* Write out the config file */ @@ -267,7 +307,8 @@ update (NMDnsPlugin *plugin, argv[5] = "--pid-file=" PIDFILE; argv[6] = "--listen-address=127.0.0.1"; /* Should work for both 4 and 6 */ argv[7] = "--conf-file=" CONFFILE; - argv[8] = NULL; + argv[8] = "--cache-size=400"; + argv[9] = NULL; /* And finally spawn dnsmasq */ pid = nm_dns_plugin_child_spawn (NM_DNS_PLUGIN (self), argv, PIDFILE, "bin/dnsmasq"); diff --git a/src/dns-manager/nm-dns-manager.c b/src/dns-manager/nm-dns-manager.c index 49cd74e5..0203f2bb 100644 --- a/src/dns-manager/nm-dns-manager.c +++ b/src/dns-manager/nm-dns-manager.c @@ -711,7 +711,8 @@ update_dns (NMDnsManager *self, vpn_configs, dev_configs, other_configs, - priv->hostname)) { + priv->hostname, + iface)) { nm_log_warn (LOGD_DNS, "DNS: plugin %s update failed", plugin_name); /* If the plugin failed to update, we shouldn't write out a local diff --git a/src/dns-manager/nm-dns-plugin.c b/src/dns-manager/nm-dns-plugin.c index ae230ada..e997948e 100644 --- a/src/dns-manager/nm-dns-plugin.c +++ b/src/dns-manager/nm-dns-plugin.c @@ -55,7 +55,8 @@ nm_dns_plugin_update (NMDnsPlugin *self, const GSList *vpn_configs, const GSList *dev_configs, const GSList *other_configs, - const char *hostname) + const char *hostname, + const char *iface) { g_return_val_if_fail (NM_DNS_PLUGIN_GET_CLASS (self)->update != NULL, FALSE); @@ -63,7 +64,8 @@ nm_dns_plugin_update (NMDnsPlugin *self, vpn_configs, dev_configs, other_configs, - hostname); + hostname, + iface); } static gboolean diff --git a/src/dns-manager/nm-dns-plugin.h b/src/dns-manager/nm-dns-plugin.h index d4298b86..37dd7336 100644 --- a/src/dns-manager/nm-dns-plugin.h +++ b/src/dns-manager/nm-dns-plugin.h @@ -53,7 +53,8 @@ typedef struct { const GSList *vpn_configs, const GSList *dev_configs, const GSList *other_configs, - const char *hostname); + const char *hostname, + const char *iface); /* Subclasses should override and return TRUE if they start a local * caching nameserver that listens on localhost and would block any @@ -91,7 +92,8 @@ gboolean nm_dns_plugin_update (NMDnsPlugin *self, const GSList *vpn_configs, const GSList *dev_configs, const GSList *other_configs, - const char *hostname); + const char *hostname, + const char *iface); /* For subclasses/plugins */ diff --git a/src/dnsmasq-manager/Makefile.in b/src/dnsmasq-manager/Makefile.in index 89f55e5e..de3a4478 100644 --- a/src/dnsmasq-manager/Makefile.in +++ b/src/dnsmasq-manager/Makefile.in @@ -186,8 +186,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/src/ip6-manager/Makefile.in b/src/ip6-manager/Makefile.in index 33539f51..1912bd59 100644 --- a/src/ip6-manager/Makefile.in +++ b/src/ip6-manager/Makefile.in @@ -187,8 +187,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/src/ip6-manager/nm-ip6-manager.c b/src/ip6-manager/nm-ip6-manager.c index 4a5dee58..1c761305 100644 --- a/src/ip6-manager/nm-ip6-manager.c +++ b/src/ip6-manager/nm-ip6-manager.c @@ -27,6 +27,8 @@ #include "nm-ip6-manager.h" #include "nm-netlink-monitor.h" +#include "nm-netlink-utils.h" +#include "nm-netlink-compat.h" #include "NetworkManagerUtils.h" #include "nm-marshal.h" #include "nm-logging.h" @@ -44,7 +46,7 @@ typedef struct { NMNetlinkMonitor *monitor; GHashTable *devices; - struct nl_handle *nlh; + struct nl_sock *nlh; struct nl_cache *addr_cache, *route_cache; guint netlink_id; @@ -155,7 +157,7 @@ nm_ip6_device_new (NMIP6Manager *manager, int ifindex) } device->ifindex = ifindex; - device->iface = g_strdup (nm_netlink_index_to_iface (ifindex)); + device->iface = nm_netlink_index_to_iface (ifindex); if (!device->iface) { nm_log_err (LOGD_IP6, "(%d): could not find interface name from index.", ifindex); @@ -549,11 +551,12 @@ process_addr (NMIP6Manager *manager, struct nl_msg *msg) device = nm_ip6_manager_get_device (manager, rtnl_addr_get_ifindex (rtnladdr)); if (!device) { nm_log_dbg (LOGD_IP6, "ignoring message for unknown device"); + rtnl_addr_put (rtnladdr); return NULL; } old_size = nl_cache_nitems (priv->addr_cache); - nl_cache_include (priv->addr_cache, (struct nl_object *)rtnladdr, NULL); + nl_cache_include (priv->addr_cache, (struct nl_object *)rtnladdr, NULL, NULL); rtnl_addr_put (rtnladdr); /* The kernel will re-notify us of automatically-added addresses @@ -589,11 +592,12 @@ process_route (NMIP6Manager *manager, struct nl_msg *msg) device = nm_ip6_manager_get_device (manager, rtnl_route_get_oif (rtnlroute)); if (!device) { nm_log_dbg (LOGD_IP6, "ignoring message for unknown device"); + rtnl_route_put (rtnlroute); return NULL; } old_size = nl_cache_nitems (priv->route_cache); - nl_cache_include (priv->route_cache, (struct nl_object *)rtnlroute, NULL); + nl_cache_include (priv->route_cache, (struct nl_object *)rtnlroute, NULL, NULL); rtnl_route_put (rtnlroute); /* As above in process_addr */ @@ -620,6 +624,11 @@ process_prefix (NMIP6Manager *manager, struct nl_msg *msg) nm_log_dbg (LOGD_IP6, "processing netlink new prefix message"); + if (!nlmsg_valid_hdr (nlmsg_hdr (msg), sizeof(*pmsg))) { + nm_log_dbg (LOGD_IP6, "ignoring invalid prefix message"); + return NULL; + } + pmsg = (struct prefixmsg *) NLMSG_DATA (nlmsg_hdr (msg)); device = nm_ip6_manager_get_device (manager, pmsg->prefix_ifindex); @@ -907,6 +916,13 @@ process_nduseropt (NMIP6Manager *manager, struct nl_msg *msg) ndmsg = (struct nduseroptmsg *) NLMSG_DATA (nlmsg_hdr (msg)); + if (!nlmsg_valid_hdr (nlmsg_hdr (msg), sizeof (*ndmsg)) || + nlmsg_datalen (nlmsg_hdr (msg)) < + (ndmsg->nduseropt_opts_len + sizeof (*ndmsg))) { + nm_log_dbg (LOGD_IP6, "ignoring invalid nduseropt message"); + return NULL; + } + if (ndmsg->nduseropt_family != AF_INET6 || ndmsg->nduseropt_icmp_type != ND_ROUTER_ADVERT || ndmsg->nduseropt_icmp_code != 0) { @@ -966,6 +982,19 @@ process_newlink (NMIP6Manager *manager, struct nl_msg *msg) struct nlattr *pi[IFLA_INET6_MAX + 1]; int err; + /* FIXME: we have to do this manually for now since libnl doesn't yet + * support the IFLA_PROTINFO attribute of NEWLINK messages. When it does, + * we can get rid of this function and just grab IFLA_PROTINFO from + * nm_ip6_device_sync_from_netlink(), then get the IFLA_INET6_FLAGS out of + * the PROTINFO. + */ + err = nlmsg_parse (hdr, sizeof (*ifi), tb, IFLA_MAX, link_policy); + if (err < 0) { + nm_log_dbg (LOGD_IP6, "ignoring invalid newlink netlink message " + "while parsing PROTINFO attribute"); + return NULL; + } + ifi = nlmsg_data (hdr); if (ifi->ifi_family != AF_INET6) { nm_log_dbg (LOGD_IP6, "ignoring netlink message family %d", ifi->ifi_family); @@ -979,18 +1008,6 @@ process_newlink (NMIP6Manager *manager, struct nl_msg *msg) return NULL; } - /* FIXME: we have to do this manually for now since libnl doesn't yet - * support the IFLA_PROTINFO attribute of NEWLINK messages. When it does, - * we can get rid of this function and just grab IFLA_PROTINFO from - * nm_ip6_device_sync_from_netlink(), then get the IFLA_INET6_FLAGS out of - * the PROTINFO. - */ - - err = nlmsg_parse (hdr, sizeof (*ifi), tb, IFLA_MAX, link_policy); - if (err < 0) { - nm_log_dbg (LOGD_IP6, "(%s): error parsing PROTINFO attribute", device->iface); - return NULL; - } if (!tb[IFLA_PROTINFO]) { nm_log_dbg (LOGD_IP6, "(%s): message had no PROTINFO attribute", device->iface); return NULL; @@ -1087,7 +1104,7 @@ nm_ip6_manager_prepare_interface (NMIP6Manager *manager, nm_utils_do_sysctl (accept_ra_path, "0\n"); } else { device->target_state = NM_IP6_DEVICE_GOT_ADDRESS; - nm_utils_do_sysctl (accept_ra_path, "1\n"); + nm_utils_do_sysctl (accept_ra_path, "2\n"); } return TRUE; @@ -1248,7 +1265,7 @@ nm_ip6_manager_get_ip6_config (NMIP6Manager *manager, int ifindex) nm_ip6_route_set_dest (ip6route, dest); nm_ip6_route_set_prefix (ip6route, rtnl_route_get_dst_len (rtnlroute)); nm_ip6_route_set_next_hop (ip6route, gateway); - metric = rtnl_route_get_metric (rtnlroute, 1); + rtnl_route_get_metric(rtnlroute, 1, &metric); if (metric != UINT_MAX) nm_ip6_route_set_metric (ip6route, metric); nm_ip6_config_take_route (config, ip6route); @@ -1344,8 +1361,10 @@ nm_ip6_manager_init (NMIP6Manager *manager) G_CALLBACK (netlink_notification), manager); priv->nlh = nm_netlink_get_default_handle (); - priv->addr_cache = rtnl_addr_alloc_cache (priv->nlh); - priv->route_cache = rtnl_route_alloc_cache (priv->nlh); + rtnl_addr_alloc_cache (priv->nlh, &priv->addr_cache); + g_warn_if_fail (priv->addr_cache != NULL); + rtnl_route_alloc_cache (priv->nlh, NETLINK_ROUTE, NL_AUTO_PROVIDE, &priv->route_cache); + g_warn_if_fail (priv->route_cache != NULL); } static void diff --git a/src/logging/Makefile.in b/src/logging/Makefile.in index a85578d9..4606160a 100644 --- a/src/logging/Makefile.in +++ b/src/logging/Makefile.in @@ -183,8 +183,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/src/logging/nm-logging.c b/src/logging/nm-logging.c index d8353f27..078f1527 100644 --- a/src/logging/nm-logging.c +++ b/src/logging/nm-logging.c @@ -30,10 +30,13 @@ #include #include #include -#include #include #include +#ifdef ENABLE_CRASHTRACE +#include +#endif + #include #include "nm-logging.h" @@ -262,6 +265,7 @@ _nm_log (const char *loc, static void fallback_get_backtrace (void) { +#ifdef ENABLE_CRASHTRACE void *frames[64]; Dl_info info; size_t size; @@ -289,6 +293,7 @@ fallback_get_backtrace (void) } } syslog (LOG_CRIT, "******************* END **********************************"); +#endif /* ENABLE_CRASHTRACE */ } diff --git a/src/main.c b/src/main.c index 328c253d..b7c0fd5a 100644 --- a/src/main.c +++ b/src/main.c @@ -15,7 +15,7 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * - * Copyright (C) 2004 - 2010 Red Hat, Inc. + * Copyright (C) 2004 - 2011 Red Hat, Inc. * Copyright (C) 2005 - 2008 Novell, Inc. */ @@ -50,14 +50,13 @@ #include "nm-vpn-manager.h" #include "nm-logging.h" #include "nm-policy-hosts.h" +#include "nm-config.h" #if !defined(NM_DIST_VERSION) # define NM_DIST_VERSION VERSION #endif #define NM_DEFAULT_PID_FILE LOCALSTATEDIR"/run/NetworkManager.pid" -#define NM_DEFAULT_SYSTEM_CONF_FILE SYSCONFDIR"/NetworkManager/NetworkManager.conf" -#define NM_OLD_SYSTEM_CONF_FILE SYSCONFDIR"/NetworkManager/nm-system-settings.conf" #define NM_DEFAULT_SYSTEM_STATE_FILE LOCALSTATEDIR"/lib/NetworkManager/NetworkManager.state" /* @@ -309,52 +308,12 @@ done: return nm_running; } -static gboolean -parse_config_file (const char *filename, - char **plugins, - char **dhcp_client, - char ***dns_plugins, - char **log_level, - char **log_domains, - GError **error) -{ - GKeyFile *config; - gboolean success = FALSE; - - config = g_key_file_new (); - if (!config) { - g_set_error (error, 0, 0, - "Not enough memory to load config file."); - return FALSE; - } - - g_key_file_set_list_separator (config, ','); - if (!g_key_file_load_from_file (config, filename, G_KEY_FILE_NONE, error)) - goto out; - - *plugins = g_key_file_get_value (config, "main", "plugins", error); - if (*error) - goto out; - - *dhcp_client = g_key_file_get_value (config, "main", "dhcp", NULL); - *dns_plugins = g_key_file_get_string_list (config, "main", "dns", NULL, NULL); - - *log_level = g_key_file_get_value (config, "logging", "level", NULL); - *log_domains = g_key_file_get_value (config, "logging", "domains", NULL); - - success = TRUE; - -out: - g_key_file_free (config); - return success; -} - static gboolean parse_state_file (const char *filename, gboolean *net_enabled, gboolean *wifi_enabled, gboolean *wwan_enabled, - gboolean *wimax_enabled, + gboolean *wimax_enabled, GError **error) { GKeyFile *state_file; @@ -368,13 +327,15 @@ parse_state_file (const char *filename, state_file = g_key_file_new (); if (!state_file) { - g_set_error (error, 0, 0, - "Not enough memory to load state file."); + g_set_error (error, NM_CONFIG_ERROR, NM_CONFIG_ERROR_NO_MEMORY, + "Not enough memory to load state file %s.", filename); return FALSE; } g_key_file_set_list_separator (state_file, ','); if (!g_key_file_load_from_file (state_file, filename, G_KEY_FILE_KEEP_COMMENTS, &tmp_error)) { + gboolean ret = FALSE; + /* This is kinda ugly; create the file and directory if it doesn't * exist yet. We can't rely on distros necessarily creating the * /var/lib/NetworkManager for us since we have to ensure that @@ -384,15 +345,16 @@ parse_state_file (const char *filename, && tmp_error->code == G_FILE_ERROR_NOENT) { char *data, *dirname; gsize len = 0; - gboolean ret = FALSE; + + g_clear_error (&tmp_error); /* try to create the directory if it doesn't exist */ dirname = g_path_get_dirname (filename); errno = 0; - if (mkdir (dirname, 0755) != 0) { + if (g_mkdir_with_parents (dirname, 0755) != 0) { if (errno != EEXIST) { g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_ACCES, - "Error creating state directory %s: %d", dirname, errno); + "Error creating state directory %s: %s", dirname, strerror(errno)); g_free (dirname); return FALSE; } @@ -409,53 +371,38 @@ parse_state_file (const char *filename, if (data) ret = g_file_set_contents (filename, data, len, error); g_free (data); - - return ret; } else { - g_set_error_literal (error, tmp_error->domain, tmp_error->code, tmp_error->message); - g_clear_error (&tmp_error); + /* the error is not "No such file or directory" - propagate the error */ + g_propagate_error (error, tmp_error); } - /* Otherwise, file probably corrupt or inaccessible */ - return FALSE; + return ret; } /* Reading state bits of NetworkManager; an error leaves the passed-in state * value unchanged. */ net = g_key_file_get_boolean (state_file, "main", "NetworkingEnabled", &tmp_error); - if (tmp_error) - g_set_error_literal (error, tmp_error->domain, tmp_error->code, tmp_error->message); - else + if (tmp_error == NULL) *net_enabled = net; g_clear_error (&tmp_error); wifi = g_key_file_get_boolean (state_file, "main", "WirelessEnabled", &tmp_error); - if (tmp_error) { - g_clear_error (error); - g_set_error_literal (error, tmp_error->domain, tmp_error->code, tmp_error->message); - } else + if (tmp_error == NULL) *wifi_enabled = wifi; g_clear_error (&tmp_error); wwan = g_key_file_get_boolean (state_file, "main", "WWANEnabled", &tmp_error); - if (tmp_error) { - g_clear_error (error); - g_set_error_literal (error, tmp_error->domain, tmp_error->code, tmp_error->message); - } else + if (tmp_error == NULL) *wwan_enabled = wwan; g_clear_error (&tmp_error); wimax = g_key_file_get_boolean (state_file, "main", "WimaxEnabled", &tmp_error); - if (tmp_error) { - g_clear_error (error); - g_set_error_literal (error, tmp_error->domain, tmp_error->code, tmp_error->message); - } else + if (tmp_error == NULL) *wimax_enabled = wimax; g_clear_error (&tmp_error); g_key_file_free (state_file); - return TRUE; } @@ -469,10 +416,9 @@ main (int argc, char *argv[]) GOptionContext *opt_ctx = NULL; gboolean become_daemon = FALSE; gboolean g_fatal_warnings = FALSE; - char *pidfile = NULL, *state_file = NULL, *dhcp = NULL; - char *config = NULL, *plugins = NULL, *conf_plugins = NULL; + char *pidfile = NULL, *state_file = NULL; + char *config_path = NULL, *plugins = NULL; char *log_level = NULL, *log_domains = NULL; - char **dns = NULL; gboolean wifi_enabled = TRUE, net_enabled = TRUE, wwan_enabled = TRUE, wimax_enabled = TRUE; gboolean success, show_version = FALSE; NMPolicy *policy = NULL; @@ -482,9 +428,9 @@ main (int argc, char *argv[]) NMSupplicantManager *sup_mgr = NULL; NMDHCPManager *dhcp_mgr = NULL; NMSettings *settings = NULL; + NMConfig *config; GError *error = NULL; gboolean wrote_pidfile = FALSE; - char *cfg_log_level = NULL, *cfg_log_domains = NULL; GOptionEntry options[] = { { "version", 0, 0, G_OPTION_ARG_NONE, &show_version, "Print NetworkManager version and exit", NULL }, @@ -492,7 +438,7 @@ main (int argc, char *argv[]) { "g-fatal-warnings", 0, 0, G_OPTION_ARG_NONE, &g_fatal_warnings, "Make all warnings fatal", NULL }, { "pid-file", 0, 0, G_OPTION_ARG_FILENAME, &pidfile, "Specify the location of a PID file", "filename" }, { "state-file", 0, 0, G_OPTION_ARG_FILENAME, &state_file, "State file location", "/path/to/state.file" }, - { "config", 0, 0, G_OPTION_ARG_FILENAME, &config, "Config file location", "/path/to/config.file" }, + { "config", 0, 0, G_OPTION_ARG_FILENAME, &config_path, "Config file location", "/path/to/config.file" }, { "plugins", 0, 0, G_OPTION_ARG_STRING, &plugins, "List of plugins separated by ','", "plugin1,plugin2" }, { "log-level", 0, 0, G_OPTION_ARG_STRING, &log_level, "Log level: one of [ERR, WARN, INFO, DEBUG]", "INFO" }, { "log-domains", 0, 0, G_OPTION_ARG_STRING, &log_domains, @@ -554,58 +500,18 @@ main (int argc, char *argv[]) if (check_pidfile (pidfile)) exit (1); - /* Parse the config file */ - if (config) { - if (!parse_config_file (config, &conf_plugins, &dhcp, &dns, &cfg_log_level, &cfg_log_domains, &error)) { - fprintf (stderr, "Config file %s invalid: (%d) %s\n", - config, - error ? error->code : -1, - (error && error->message) ? error->message : "unknown"); - exit (1); - } - } else { - gboolean parsed = FALSE; - - /* Even though we prefer NetworkManager.conf, we need to check the - * old nm-system-settings.conf first to preserve compat with older - * setups. In package managed systems dropping a NetworkManager.conf - * onto the system would make NM use it instead of nm-system-settings.conf, - * changing behavior during an upgrade. We don't want that. - */ - - /* Try deprecated nm-system-settings.conf first */ - if (g_file_test (NM_OLD_SYSTEM_CONF_FILE, G_FILE_TEST_EXISTS)) { - config = g_strdup (NM_OLD_SYSTEM_CONF_FILE); - parsed = parse_config_file (config, &conf_plugins, &dhcp, &dns, &cfg_log_level, &cfg_log_domains, &error); - if (!parsed) { - fprintf (stderr, "Default config file %s invalid: (%d) %s\n", - config, - error ? error->code : -1, - (error && error->message) ? error->message : "unknown"); - g_free (config); - config = NULL; - g_clear_error (&error); - } - } - - /* Try the preferred NetworkManager.conf last */ - if (!parsed && g_file_test (NM_DEFAULT_SYSTEM_CONF_FILE, G_FILE_TEST_EXISTS)) { - config = g_strdup (NM_DEFAULT_SYSTEM_CONF_FILE); - parsed = parse_config_file (config, &conf_plugins, &dhcp, &dns, &cfg_log_level, &cfg_log_domains, &error); - if (!parsed) { - fprintf (stderr, "Default config file %s invalid: (%d) %s\n", - config, - error ? error->code : -1, - (error && error->message) ? error->message : "unknown"); - g_free (config); - config = NULL; - g_clear_error (&error); - } - } + /* Read the config file and CLI overrides */ + config = nm_config_new (config_path, plugins, log_level, log_domains, &error); + if (config == NULL) { + fprintf (stderr, "Failed to read configuration: (%d) %s\n", + error ? error->code : -1, + (error && error->message) ? error->message : "unknown"); + exit (1); } + /* Logging setup */ - if (!nm_logging_setup (log_level ? log_level : cfg_log_level, - log_domains ? log_domains : cfg_log_domains, + if (!nm_logging_setup (nm_config_get_log_level (config), + nm_config_get_log_domains (config), &error)) { fprintf (stderr, _("%s. Please use --help to see a list of valid options.\n"), @@ -613,10 +519,6 @@ main (int argc, char *argv[]) exit (1); } - /* Plugins specified with '--plugins' override those of config file */ - plugins = plugins ? plugins : g_strdup (conf_plugins); - g_free (conf_plugins); - /* Parse the state file */ if (!parse_state_file (state_file, &net_enabled, &wifi_enabled, &wwan_enabled, &wimax_enabled, &error)) { fprintf (stderr, "State file %s parsing failed: (%d) %s\n", @@ -683,8 +585,7 @@ main (int argc, char *argv[]) nm_log_info (LOGD_CORE, "NetworkManager (version " NM_DIST_VERSION ") is starting..."); success = FALSE; - if (config) - nm_log_info (LOGD_CORE, "Read config file %s", config); + nm_log_info (LOGD_CORE, "Read config file %s", nm_config_get_path (config)); main_loop = g_main_loop_new (NULL, FALSE); @@ -704,22 +605,22 @@ main (int argc, char *argv[]) goto done; } - dns_mgr = nm_dns_manager_get ((const char **) dns); + dns_mgr = nm_dns_manager_get (nm_config_get_dns_plugins (config)); if (!dns_mgr) { nm_log_err (LOGD_CORE, "failed to start the DNS manager."); goto done; } - settings = nm_settings_new (config, plugins, &error); + settings = nm_settings_new (nm_config_get_path (config), + nm_config_get_plugins (config), + &error); if (!settings) { nm_log_err (LOGD_CORE, "failed to initialize settings storage: %s", error && error->message ? error->message : "(unknown)"); goto done; } - manager = nm_manager_get (settings, - config, - plugins, + manager = nm_manager_new (settings, state_file, net_enabled, wifi_enabled, @@ -746,7 +647,7 @@ main (int argc, char *argv[]) } /* Initialize DHCP manager */ - dhcp_mgr = nm_dhcp_manager_new (dhcp, &error); + dhcp_mgr = nm_dhcp_manager_new (nm_config_get_dhcp_client (config), &error); if (!dhcp_mgr) { nm_log_err (LOGD_CORE, "failed to start the DHCP manager: %s.", error->message); goto done; @@ -806,17 +707,15 @@ done: if (pidfile && wrote_pidfile) unlink (pidfile); + nm_config_free (config); + /* Free options */ g_free (pidfile); g_free (state_file); - g_free (config); + g_free (config_path); g_free (plugins); - g_free (dhcp); - g_strfreev (dns); g_free (log_level); g_free (log_domains); - g_free (cfg_log_level); - g_free (cfg_log_domains); nm_log_info (LOGD_CORE, "exiting (%s)", success ? "success" : "error"); exit (success ? 0 : 1); diff --git a/src/modem-manager/Makefile.in b/src/modem-manager/Makefile.in index 2a054f70..c78ed0f3 100644 --- a/src/modem-manager/Makefile.in +++ b/src/modem-manager/Makefile.in @@ -189,8 +189,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/src/modem-manager/nm-modem-manager.c b/src/modem-manager/nm-modem-manager.c index f5ade50c..3509d667 100644 --- a/src/modem-manager/nm-modem-manager.c +++ b/src/modem-manager/nm-modem-manager.c @@ -29,6 +29,7 @@ #include "nm-dbus-manager.h" #include "nm-modem-types.h" #include "nm-marshal.h" +#include "nm-dbus-glib-types.h" #define MODEM_POKE_INTERVAL 120 @@ -235,6 +236,23 @@ modem_removed (DBusGProxy *proxy, const char *path, gpointer user_data) } } +static void +mm_poke_cb (DBusGProxy *proxy, DBusGProxyCall *call, gpointer user_data) +{ + GPtrArray *modems; + int i; + + if (dbus_g_proxy_end_call (proxy, call, NULL, + DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH, &modems, + G_TYPE_INVALID)) { + /* Don't care about the returned value, just free it */ + for (i = 0; i < modems->len; i++) + g_free ((char *) g_ptr_array_index (modems, i)); + g_ptr_array_free (modems, TRUE); + } + g_object_unref (proxy); +} + static gboolean poke_modem_cb (gpointer user_data) { @@ -242,6 +260,7 @@ poke_modem_cb (gpointer user_data) NMModemManagerPrivate *priv = NM_MODEM_MANAGER_GET_PRIVATE (self); DBusGConnection *g_connection; DBusGProxy *proxy; + DBusGProxyCall *call; g_connection = nm_dbus_manager_get_connection (priv->dbus_mgr); proxy = dbus_g_proxy_new_for_name (g_connection, @@ -249,9 +268,13 @@ poke_modem_cb (gpointer user_data) MM_DBUS_PATH, MM_DBUS_INTERFACE); - dbus_g_proxy_call_no_reply (proxy, "EnumerateDevices", G_TYPE_INVALID); - g_object_unref (proxy); - + call = dbus_g_proxy_begin_call_with_timeout (proxy, + "EnumerateDevices", + mm_poke_cb, + NULL, + NULL, + 5000, + G_TYPE_INVALID); return TRUE; } diff --git a/src/modem-manager/nm-modem.c b/src/modem-manager/nm-modem.c index 1823e5e6..debfbdf7 100644 --- a/src/modem-manager/nm-modem.c +++ b/src/modem-manager/nm-modem.c @@ -640,7 +640,7 @@ static void real_deactivate (NMModem *self, NMDevice *device) { NMModemPrivate *priv; - const char *iface; + int ifindex; g_return_if_fail (self != NULL); g_return_if_fail (NM_IS_MODEM (self)); @@ -679,11 +679,11 @@ real_deactivate (NMModem *self, NMDevice *device) break; case MM_MODEM_IP_METHOD_STATIC: case MM_MODEM_IP_METHOD_DHCP: - iface = nm_device_get_ip_iface (device); + ifindex = nm_device_get_ip_ifindex (device); /* FIXME: use AF_UNSPEC here when we have IPv6 support */ - nm_system_device_flush_routes_with_iface (iface, AF_INET); - nm_system_device_flush_addresses_with_iface (iface); - nm_system_device_set_up_down_with_iface (iface, FALSE, NULL); + nm_system_iface_flush_routes (ifindex, AF_INET); + nm_system_iface_flush_addresses (ifindex, AF_UNSPEC); + nm_system_iface_set_up (ifindex, FALSE, NULL); break; default: nm_log_err (LOGD_MB, "unknown IP method %d", priv->ip_method); @@ -775,7 +775,7 @@ nm_modem_hw_is_up (NMModem *self, NMDevice *device) state = nm_device_interface_get_state (NM_DEVICE_INTERFACE (device)); if (priv->pending_ip4_config || _state_is_active (state)) - return nm_system_device_is_up (device); + return nm_system_iface_is_up (nm_device_get_ip_ifindex (device)); } return TRUE; @@ -792,7 +792,7 @@ nm_modem_hw_bring_up (NMModem *self, NMDevice *device, gboolean *no_firmware) state = nm_device_interface_get_state (NM_DEVICE_INTERFACE (device)); if (priv->pending_ip4_config || _state_is_active (state)) - return nm_system_device_set_up_down (device, TRUE, no_firmware); + return nm_system_iface_set_up (nm_device_get_ip_ifindex (device), TRUE, no_firmware); } return TRUE; diff --git a/src/nm-config.c b/src/nm-config.c new file mode 100644 index 00000000..71f67d55 --- /dev/null +++ b/src/nm-config.c @@ -0,0 +1,247 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ +/* NetworkManager -- Network link manager + * + * 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. + * + * Copyright (C) 2011 Red Hat, Inc. + */ + +#include +#include +#include + +#include "nm-config.h" + +#define NM_DEFAULT_SYSTEM_CONF_FILE SYSCONFDIR"/NetworkManager/NetworkManager.conf" +#define NM_OLD_SYSTEM_CONF_FILE SYSCONFDIR"/NetworkManager/nm-system-settings.conf" + +struct NMConfig { + char *path; + char **plugins; + char *dhcp_client; + char **dns_plugins; + char *log_level; + char *log_domains; +}; + +/************************************************************************/ + +GQuark +nm_config_error_quark (void) +{ + static GQuark quark = 0; + if (!quark) + quark = g_quark_from_static_string ("nm-config-error"); + return quark; +} + +/* This should really be standard. */ +#define ENUM_ENTRY(NAME, DESC) { NAME, "" #NAME "", DESC } + +GType +nm_config_error_get_type (void) +{ + static GType etype = 0; + + if (etype == 0) { + static const GEnumValue values[] = { + /* Not enough memory to parse the config file. */ + ENUM_ENTRY (NM_CONFIG_ERROR_NO_MEMORY, "NoMemory"), + { 0, 0, 0 } + }; + etype = g_enum_register_static ("NMConfigError", values); + } + return etype; +} + +/************************************************************************/ + +const char * +nm_config_get_path (NMConfig *config) +{ + g_return_val_if_fail (config != NULL, NULL); + + return config->path; +} + +const char ** +nm_config_get_plugins (NMConfig *config) +{ + g_return_val_if_fail (config != NULL, NULL); + + return (const char **) config->plugins; +} + +const char * +nm_config_get_dhcp_client (NMConfig *config) +{ + g_return_val_if_fail (config != NULL, NULL); + + return config->dhcp_client; +} + +const char ** +nm_config_get_dns_plugins (NMConfig *config) +{ + g_return_val_if_fail (config != NULL, NULL); + + return (const char **) config->dns_plugins; +} + +const char * +nm_config_get_log_level (NMConfig *config) +{ + g_return_val_if_fail (config != NULL, NULL); + + return config->log_level; +} + +const char * +nm_config_get_log_domains (NMConfig *config) +{ + g_return_val_if_fail (config != NULL, NULL); + + return config->log_domains; +} + +/************************************************************************/ + +static gboolean +fill_from_file (NMConfig *config, + const char *path, + const char *cli_plugins, + const char *cli_log_level, + const char *cli_log_domains, + GError **error) +{ + GKeyFile *kf; + gboolean success = FALSE; + + if (g_file_test (path, G_FILE_TEST_EXISTS) == FALSE) { + g_set_error (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_NOT_FOUND, "file %s not found", path); + return FALSE; + } + + kf = g_key_file_new (); + if (!kf) { + g_set_error (error, NM_CONFIG_ERROR, NM_CONFIG_ERROR_NO_MEMORY, + "Not enough memory to load config file %s", path); + return FALSE; + } + + g_key_file_set_list_separator (kf, ','); + if (g_key_file_load_from_file (kf, path, G_KEY_FILE_NONE, error)) { + config->path = g_strdup (path); + + /* CLI provided options override config file options */ + if (cli_plugins && strlen (cli_plugins)) + config->plugins = g_strsplit_set (cli_plugins, ",", 0); + else + config->plugins = g_key_file_get_string_list (kf, "main", "plugins", NULL, NULL); + + config->dhcp_client = g_key_file_get_value (kf, "main", "dhcp", NULL); + config->dns_plugins = g_key_file_get_string_list (kf, "main", "dns", NULL, NULL); + + if (cli_log_level && strlen (cli_log_level)) + config->log_level = g_strdup (cli_log_level); + else + config->log_level = g_key_file_get_value (kf, "logging", "level", NULL); + + if (cli_log_domains && strlen (cli_log_domains)) + config->log_domains = g_strdup (cli_log_domains); + else + config->log_domains = g_key_file_get_value (kf, "logging", "domains", NULL); + success = TRUE; + } + + g_key_file_free (kf); + return success; +} + +NMConfig * +nm_config_new (const char *cli_config_path, + const char *cli_plugins, + const char *cli_log_level, + const char *cli_log_domains, + GError **error) +{ + NMConfig *config; + GError *local = NULL; + + config = g_malloc0 (sizeof (*config)); + + if (cli_config_path) { + /* Bad user-specific config file path is a hard error */ + if (!fill_from_file (config, cli_config_path, cli_plugins, cli_log_level, cli_log_domains, error)) { + nm_config_free (config); + return NULL; + } + return config; + } + + /* Even though we prefer NetworkManager.conf, we need to check the + * old nm-system-settings.conf first to preserve compat with older + * setups. In package managed systems dropping a NetworkManager.conf + * onto the system would make NM use it instead of nm-system-settings.conf, + * changing behavior during an upgrade. We don't want that. + */ + + /* Try deprecated nm-system-settings.conf first */ + if (fill_from_file (config, NM_OLD_SYSTEM_CONF_FILE, cli_plugins, cli_log_level, cli_log_domains, &local)) + return config; + + if (g_error_matches (local, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_NOT_FOUND) == FALSE) { + fprintf (stderr, "Default config file %s invalid: (%d) %s\n", + NM_OLD_SYSTEM_CONF_FILE, + local ? local->code : -1, + (local && local->message) ? local->message : "unknown"); + } + g_clear_error (&local); + + /* Try the standard config file location next */ + if (fill_from_file (config, NM_DEFAULT_SYSTEM_CONF_FILE, cli_plugins, cli_log_level, cli_log_domains, &local)) + return config; + + if (g_error_matches (local, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_NOT_FOUND) == FALSE) { + fprintf (stderr, "Default config file %s invalid: (%d) %s\n", + NM_DEFAULT_SYSTEM_CONF_FILE, + local ? local->code : -1, + (local && local->message) ? local->message : "unknown"); + g_propagate_error (error, local); + nm_config_free (config); + return NULL; + } + + /* ignore error if config file not found */ + g_clear_error (&local); + return config; +} + +void +nm_config_free (NMConfig *config) +{ + g_return_if_fail (config != NULL); + + g_free (config->path); + g_strfreev (config->plugins); + g_free (config->dhcp_client); + g_strfreev (config->dns_plugins); + g_free (config->log_level); + g_free (config->log_domains); + + memset (config, 0, sizeof (*config)); + g_free (config); +} + diff --git a/src/nm-config.h b/src/nm-config.h new file mode 100644 index 00000000..fae344fb --- /dev/null +++ b/src/nm-config.h @@ -0,0 +1,55 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ +/* NetworkManager -- Network link manager + * + * 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. + * + * Copyright (C) 2011 Red Hat, Inc. + */ + +#ifndef NM_CONFIG_H +#define NM_CONFIG_H + +#include +#include + +typedef struct NMConfig NMConfig; + +typedef enum { + NM_CONFIG_ERROR_NO_MEMORY = 0, +} NMConfigError; + +#define NM_CONFIG_ERROR (nm_config_error_quark ()) +GQuark nm_config_error_quark (void); +#define NM_TYPE_CONFIG_ERROR (nm_config_error_get_type ()) +GType nm_config_error_get_type (void); + + +NMConfig *nm_config_new (const char *cli_config_path, + const char *cli_plugins, + const char *cli_log_level, + const char *cli_log_domains, + GError **error); + +const char *nm_config_get_path (NMConfig *config); +const char **nm_config_get_plugins (NMConfig *config); +const char *nm_config_get_dhcp_client (NMConfig *config); +const char **nm_config_get_dns_plugins (NMConfig *config); +const char *nm_config_get_log_level (NMConfig *config); +const char *nm_config_get_log_domains (NMConfig *config); + +void nm_config_free (NMConfig *config); + +#endif /* NM_CONFIG_H */ + diff --git a/src/nm-crash-logger.c b/src/nm-crash-logger.c index 9ad0412d..e0e7cbf6 100644 --- a/src/nm-crash-logger.c +++ b/src/nm-crash-logger.c @@ -55,6 +55,7 @@ int main (int argc, char ** argv) syslog (LOG_CRIT, "******************* START **********************************"); while (!done) { + line[sizeof (line) - 1] = '\0'; bytes_read = read (out, line, sizeof (line) - 1); if (bytes_read > 0) { diff --git a/src/nm-device-ethernet.c b/src/nm-device-ethernet.c index 35b73670..8556c5bd 100644 --- a/src/nm-device-ethernet.c +++ b/src/nm-device-ethernet.c @@ -59,6 +59,7 @@ #include "nm-logging.h" #include "nm-properties-changed-signal.h" #include "nm-dhcp-manager.h" +#include "nm-netlink-utils.h" #include "nm-device-ethernet-glue.h" @@ -546,19 +547,19 @@ real_take_down (NMDevice *dev) static gboolean real_hw_is_up (NMDevice *device) { - return nm_system_device_is_up (device); + return nm_system_iface_is_up (nm_device_get_ip_ifindex (device)); } static gboolean real_hw_bring_up (NMDevice *dev, gboolean *no_firmware) { - return nm_system_device_set_up_down (dev, TRUE, no_firmware); + return nm_system_iface_set_up (nm_device_get_ip_ifindex (dev), TRUE, no_firmware); } static void real_hw_take_down (NMDevice *dev) { - nm_system_device_set_up_down (dev, FALSE, NULL); + nm_system_iface_set_up (nm_device_get_ip_ifindex (dev), FALSE, NULL); } NMDevice * @@ -677,7 +678,7 @@ _set_hw_addr (NMDeviceEthernet *self, const guint8 *addr, const char *detail) /* Can't change MAC address while device is up */ real_hw_take_down (dev); - success = nm_system_device_set_mac (iface, (struct ether_addr *) addr); + success = nm_system_iface_set_mac (nm_device_get_ip_ifindex (dev), (struct ether_addr *) addr); if (success) { /* MAC address succesfully changed; update the current MAC to match */ _update_hw_addr (self, addr); @@ -1796,73 +1797,19 @@ wired_match_config (NMDevice *self, NMConnection *connection) return TRUE; } -typedef struct { - int ifindex; - NMIP4Address *addr; - gboolean found; -} AddrData; - -static void -check_one_address (struct nl_object *object, void *user_data) -{ - AddrData *data = user_data; - struct rtnl_addr *addr = (struct rtnl_addr *) object; - struct nl_addr *local; - struct in_addr tmp; - - if (rtnl_addr_get_ifindex (addr) != data->ifindex) - return; - if (rtnl_addr_get_family (addr) != AF_INET) - return; - - if (nm_ip4_address_get_prefix (data->addr) != rtnl_addr_get_prefixlen (addr)) - return; - - local = rtnl_addr_get_local (addr); - if (nl_addr_get_family (local) != AF_INET) - return; - if (nl_addr_get_len (local) != sizeof (struct in_addr)) - return; - if (!nl_addr_get_binary_addr (local)) - return; - - memcpy (&tmp, nl_addr_get_binary_addr (local), nl_addr_get_len (local)); - if (tmp.s_addr != nm_ip4_address_get_address (data->addr)) - return; - - /* Yay, found it */ - data->found = TRUE; -} - static gboolean ip4_match_config (NMDevice *self, NMConnection *connection) { NMSettingIP4Config *s_ip4; - struct nl_handle *nlh = NULL; - struct nl_cache *addr_cache = NULL; int i, num; GSList *leases, *iter; NMDHCPManager *dhcp_mgr; const char *method; - int ifindex; - AddrData check_data; - - ifindex = nm_device_get_ifindex (self); - s_ip4 = (NMSettingIP4Config *) nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG); + s_ip4 = nm_connection_get_setting_ip4_config (connection); if (!s_ip4) return FALSE; - /* Read all the device's IP addresses */ - nlh = nm_netlink_get_default_handle (); - if (!nlh) - return FALSE; - - addr_cache = rtnl_addr_alloc_cache (nlh); - if (!addr_cache) - return FALSE; - nl_cache_mngt_provide (addr_cache); - /* Get any saved leases that apply to this connection */ dhcp_mgr = nm_dhcp_manager_get (); leases = nm_dhcp_manager_get_lease_config (dhcp_mgr, @@ -1876,15 +1823,14 @@ ip4_match_config (NMDevice *self, NMConnection *connection) /* Find at least one lease's address on the device */ for (iter = leases; iter; iter = g_slist_next (iter)) { - NMIP4Config *addr = iter->data; - - memset (&check_data, 0, sizeof (check_data)); - check_data.ifindex = ifindex; - check_data.found = FALSE; - check_data.addr = nm_ip4_config_get_address (addr, 0); - - nl_cache_foreach (addr_cache, check_one_address, &check_data); - if (check_data.found) { + NMIP4Config *ip4_config = iter->data; + NMIP4Address *addr = nm_ip4_config_get_address (ip4_config, 0); + struct in_addr tmp = { .s_addr = nm_ip4_address_get_address (addr) }; + + if (addr && nm_netlink_find_address (nm_device_get_ip_ifindex (self), + AF_INET, + &tmp, + nm_ip4_address_get_prefix (addr))) { found = TRUE; /* Yay, device has same address as a lease */ break; } @@ -1908,16 +1854,16 @@ ip4_match_config (NMDevice *self, NMConnection *connection) /* Everything below for static addressing */ - /* Find all IP4 addresses of this connection in the device's address list */ + /* Find all IP4 addresses of this connection on the device */ num = nm_setting_ip4_config_get_num_addresses (s_ip4); for (i = 0; i < num; i++) { - memset (&check_data, 0, sizeof (check_data)); - check_data.ifindex = ifindex; - check_data.found = FALSE; - check_data.addr = nm_setting_ip4_config_get_address (s_ip4, i); + NMIP4Address *addr = nm_setting_ip4_config_get_address (s_ip4, i); + struct in_addr tmp = { .s_addr = nm_ip4_address_get_address (addr) }; - nl_cache_foreach (addr_cache, check_one_address, &check_data); - if (!check_data.found) + if (!nm_netlink_find_address (nm_device_get_ip_ifindex (self), + AF_INET, + &tmp, + nm_ip4_address_get_prefix (addr))) return FALSE; } diff --git a/src/nm-device-olpc-mesh.c b/src/nm-device-olpc-mesh.c index 88322344..ddd5198e 100644 --- a/src/nm-device-olpc-mesh.c +++ b/src/nm-device-olpc-mesh.c @@ -271,19 +271,19 @@ error: static gboolean real_hw_is_up (NMDevice *device) { - return nm_system_device_is_up (device); + return nm_system_iface_is_up (nm_device_get_ip_ifindex (device)); } static gboolean real_hw_bring_up (NMDevice *dev, gboolean *no_firmware) { - return nm_system_device_set_up_down (dev, TRUE, no_firmware); + return nm_system_iface_set_up (nm_device_get_ip_ifindex (dev), TRUE, no_firmware); } static void real_hw_take_down (NMDevice *dev) { - nm_system_device_set_up_down (dev, FALSE, NULL); + nm_system_iface_set_up (nm_device_get_ip_ifindex (dev), FALSE, NULL); } static gboolean @@ -653,7 +653,7 @@ dispose (GObject *object) device_cleanup (self); - manager = nm_manager_get (NULL, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, NULL); + manager = nm_manager_get (); if (priv->device_added_id) g_signal_handler_disconnect (manager, priv->device_added_id); g_object_unref (manager); @@ -852,7 +852,7 @@ is_companion (NMDeviceOlpcMesh *self, NMDevice *other) priv->companion = other; /* When we've found the companion, stop listening for other devices */ - manager = nm_manager_get (NULL, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, NULL); + manager = nm_manager_get (); if (priv->device_added_id) { g_signal_handler_disconnect (manager, priv->device_added_id); priv->device_added_id = 0; @@ -907,7 +907,7 @@ check_companion_cb (gpointer user_data) if (priv->device_added_id != 0) return FALSE; - manager = nm_manager_get (NULL, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, NULL); + manager = nm_manager_get (); priv->device_added_id = g_signal_connect (manager, "device-added", G_CALLBACK (device_added_cb), self); diff --git a/src/nm-device-wifi.c b/src/nm-device-wifi.c index 278d9a06..9695c077 100644 --- a/src/nm-device-wifi.c +++ b/src/nm-device-wifi.c @@ -1133,7 +1133,7 @@ out: static gboolean real_hw_is_up (NMDevice *device) { - return nm_system_device_is_up (device); + return nm_system_iface_is_up (nm_device_get_ip_ifindex (device)); } static gboolean @@ -1142,13 +1142,13 @@ real_hw_bring_up (NMDevice *device, gboolean *no_firmware) if (!NM_DEVICE_WIFI_GET_PRIVATE (device)->enabled) return FALSE; - return nm_system_device_set_up_down (device, TRUE, no_firmware); + return nm_system_iface_set_up (nm_device_get_ip_ifindex (device), TRUE, no_firmware); } static void -real_hw_take_down (NMDevice *dev) +real_hw_take_down (NMDevice *device) { - nm_system_device_set_up_down (dev, FALSE, NULL); + nm_system_iface_set_up (nm_device_get_ip_ifindex (device), FALSE, NULL); } static gboolean @@ -1209,7 +1209,7 @@ _set_hw_addr (NMDeviceWifi *self, const guint8 *addr, const char *detail) /* Can't change MAC address while device is up */ real_hw_take_down (dev); - success = nm_system_device_set_mac (iface, (struct ether_addr *) addr); + success = nm_system_iface_set_mac (nm_device_get_ip_ifindex (dev), (struct ether_addr *) addr); if (success) { /* MAC address succesfully changed; update the current MAC to match */ _update_hw_addr (self, addr); @@ -1690,7 +1690,7 @@ nm_device_wifi_get_address (NMDeviceWifi *self, } static void -nm_device_wifi_ap_list_print (NMDeviceWifi *self) +ap_list_dump (NMDeviceWifi *self) { NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self); GSList * elt; @@ -1701,7 +1701,7 @@ nm_device_wifi_ap_list_print (NMDeviceWifi *self) nm_log_dbg (LOGD_WIFI_SCAN, "Current AP list:"); for (elt = priv->ap_list; elt; elt = g_slist_next (elt), i++) { NMAccessPoint * ap = NM_AP (elt->data); - nm_ap_print_self (ap, "AP: "); + nm_ap_dump (ap, "List AP: "); } nm_log_dbg (LOGD_WIFI_SCAN, "Current AP list: done"); } @@ -2180,91 +2180,20 @@ supplicant_iface_scan_done_cb (NMSupplicantInterface *iface, * happens when there are actual scan results to process. */ cull_scan_list (self); - nm_device_wifi_ap_list_print (self); + ap_list_dump (self); } #endif } -static gboolean -is_encrypted (guint32 flags, guint32 wpa_flags, guint32 rsn_flags) -{ - if (flags & NM_802_11_AP_FLAGS_PRIVACY) - return TRUE; - if (wpa_flags & (NM_802_11_AP_SEC_KEY_MGMT_PSK | NM_802_11_AP_SEC_KEY_MGMT_802_1X)) - return TRUE; - if (rsn_flags & (NM_802_11_AP_SEC_KEY_MGMT_PSK | NM_802_11_AP_SEC_KEY_MGMT_802_1X)) - return TRUE; - - return FALSE; -} - -/* - * ap_auth_enforced - * - * Checks whether or not there is an encryption key present for - * this connection, and whether or not the authentication method - * in use will result in an authentication rejection if the key - * is wrong. For example, Ad Hoc mode networks don't have a - * master node and therefore nothing exists to reject the station. - * Similarly, Open System WEP access points don't reject a station - * when the key is wrong. Shared Key WEP access points will. - * - */ -static gboolean -ap_auth_enforced (NMConnection *connection, - NMAccessPoint *ap, - gboolean *encrypted) -{ - guint32 flags, wpa_flags, rsn_flags; - gboolean enforced = FALSE; - - g_return_val_if_fail (NM_IS_AP (ap), FALSE); - g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE); - g_return_val_if_fail (encrypted != NULL, FALSE); - - flags = nm_ap_get_flags (ap); - wpa_flags = nm_ap_get_wpa_flags (ap); - rsn_flags = nm_ap_get_rsn_flags (ap); - - if (nm_ap_get_mode (ap) == NM_802_11_MODE_ADHOC) - goto out; - - /* Static WEP */ - if ( (flags & NM_802_11_AP_FLAGS_PRIVACY) - && (wpa_flags == NM_802_11_AP_SEC_NONE) - && (rsn_flags == NM_802_11_AP_SEC_NONE)) { - NMSettingWirelessSecurity *s_wireless_sec; - const char *auth_alg; - - /* No way to tell if the key is wrong with Open System - * auth mode in WEP. Auth is not enforced like Shared Key. - */ - s_wireless_sec = (NMSettingWirelessSecurity *) nm_connection_get_setting (connection, - NM_TYPE_SETTING_WIRELESS_SECURITY); - if (s_wireless_sec) { - auth_alg = nm_setting_wireless_security_get_auth_alg (s_wireless_sec); - if (!auth_alg || !strcmp (auth_alg, "open")) - goto out; - } - - enforced = TRUE; - } else if (wpa_flags != NM_802_11_AP_SEC_NONE) { /* WPA */ - enforced = TRUE; - } else if (rsn_flags != NM_802_11_AP_SEC_NONE) { /* WPA2 */ - enforced = TRUE; - } - -out: - *encrypted = is_encrypted (flags, wpa_flags, rsn_flags); - return enforced; -} - /**************************************************************************** * WPA Supplicant control stuff * */ +#define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x" +#define MAC_ARG(x) ((guint8*)(x))[0],((guint8*)(x))[1],((guint8*)(x))[2],((guint8*)(x))[3],((guint8*)(x))[4],((guint8*)(x))[5] + /* * merge_scanned_ap * @@ -2284,16 +2213,33 @@ merge_scanned_ap (NMDeviceWifi *self, NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self); NMAccessPoint *found_ap = NULL; const GByteArray *ssid; + const struct ether_addr *bssid; gboolean strict_match = TRUE; NMAccessPoint *current_ap = NULL; /* Let the manager try to fill in the SSID from seen-bssids lists * if it can */ + bssid = nm_ap_get_address (merge_ap); ssid = nm_ap_get_ssid (merge_ap); if (!ssid || nm_utils_is_empty_ssid (ssid->data, ssid->len)) { + /* Let the manager try to fill the AP's SSID from the database */ g_signal_emit (self, signals[HIDDEN_AP_FOUND], 0, merge_ap); - nm_ap_set_broadcast (merge_ap, FALSE); + + ssid = nm_ap_get_ssid (merge_ap); + if (ssid && (nm_utils_is_empty_ssid (ssid->data, ssid->len) == FALSE)) { + /* Yay, matched it, no longer treat as hidden */ + nm_log_dbg (LOGD_WIFI_SCAN, "(%s): matched hidden AP " MAC_FMT " => '%s'", + nm_device_get_iface (NM_DEVICE (self)), + MAC_ARG (bssid->ether_addr_octet), + nm_utils_escape_ssid (ssid->data, ssid->len)); + nm_ap_set_broadcast (merge_ap, FALSE); + } else { + /* Didn't have an entry for this AP in the database */ + nm_log_dbg (LOGD_WIFI_SCAN, "(%s): failed to match hidden AP " MAC_FMT, + nm_device_get_iface (NM_DEVICE (self)), + MAC_ARG (bssid->ether_addr_octet)); + } } /* If the incoming scan result matches the hidden AP that NM is currently @@ -2308,6 +2254,13 @@ merge_scanned_ap (NMDeviceWifi *self, found_ap = nm_ap_match_in_list (merge_ap, priv->ap_list, strict_match); if (found_ap) { + nm_log_dbg (LOGD_WIFI_SCAN, "(%s): merging AP '%s' " MAC_FMT " (%p) with existing (%p)", + nm_device_get_iface (NM_DEVICE (self)), + ssid ? nm_utils_escape_ssid (ssid->data, ssid->len) : "(none)", + MAC_ARG (bssid->ether_addr_octet), + merge_ap, + found_ap); + nm_ap_set_flags (found_ap, nm_ap_get_flags (merge_ap)); nm_ap_set_wpa_flags (found_ap, nm_ap_get_wpa_flags (merge_ap)); nm_ap_set_rsn_flags (found_ap, nm_ap_get_rsn_flags (merge_ap)); @@ -2323,7 +2276,12 @@ merge_scanned_ap (NMDeviceWifi *self, nm_ap_set_fake (found_ap, FALSE); } else { /* New entry in the list */ - // FIXME: figure out if reference counts are correct here for AP objects + nm_log_dbg (LOGD_WIFI_SCAN, "(%s): adding new AP '%s' " MAC_FMT " (%p)", + nm_device_get_iface (NM_DEVICE (self)), + ssid ? nm_utils_escape_ssid (ssid->data, ssid->len) : "(none)", + MAC_ARG (bssid->ether_addr_octet), + merge_ap); + g_object_ref (merge_ap); priv->ap_list = g_slist_prepend (priv->ap_list, merge_ap); nm_ap_export_to_dbus (merge_ap); @@ -2421,7 +2379,7 @@ supplicant_iface_new_bss_cb (NMSupplicantInterface *iface, ap = nm_ap_new_from_properties (properties); if (ap) { - nm_ap_print_self (ap, "AP: "); + nm_ap_dump (ap, "New AP: "); /* Add the AP to the device's AP list */ merge_scanned_ap (self, ap); @@ -2430,7 +2388,7 @@ supplicant_iface_new_bss_cb (NMSupplicantInterface *iface, /* Remove outdated access points */ cull_scan_list (self); - nm_device_wifi_ap_list_print (self); + ap_list_dump (self); } else { nm_log_warn (LOGD_WIFI_SCAN, "(%s): invalid AP properties received", nm_device_get_iface (NM_DEVICE (self))); @@ -2512,7 +2470,7 @@ link_timeout_cb (gpointer user_data) } static gboolean -handle_authenticate_fail (NMDeviceWifi *self, guint32 new_state, guint32 old_state) +handle_8021x_auth_fail (NMDeviceWifi *self, guint32 new_state, guint32 old_state) { NMDevice *device = NM_DEVICE (self); NMSetting8021x *s_8021x; @@ -2643,18 +2601,21 @@ supplicant_iface_state_cb (NMSupplicantInterface *iface, break; case NM_SUPPLICANT_INTERFACE_STATE_DISCONNECTED: if ((devstate == NM_DEVICE_STATE_ACTIVATED) || nm_device_is_activating (device)) { - /* Disconnect during authentication means the 802.1x password is wrong */ - if (handle_authenticate_fail (self, new_state, old_state)) + /* Disconnect of an 802.1x/LEAP connection during authentication + * means secrets might be wrong. Not always the case, but until we + * have more information from wpa_supplicant about why the + * disconnect happened this is the best we can do. + */ + if (handle_8021x_auth_fail (self, new_state, old_state)) break; } + /* Otherwise it might be a stupid driver or some transient error, so + * let the supplicant try to reconnect a few more times. Give it more + * time if a scan is in progress since the link might be dropped during + * the scan but will be re-established when the scan is done. + */ 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 == 0) priv->link_timeout_id = g_timeout_add_seconds (scanning ? 30 : 15, link_timeout_cb, self); } @@ -2756,7 +2717,7 @@ supplicant_iface_notify_scanning_cb (NMSupplicantInterface *iface, scanning = nm_supplicant_interface_get_scanning (iface); nm_log_dbg (LOGD_WIFI_SCAN, "(%s): now %s", nm_device_get_iface (NM_DEVICE (self)), - scanning ? "scanning" : "not scanning"); + scanning ? "scanning" : "idle"); g_object_notify (G_OBJECT (self), "scanning"); } @@ -2826,6 +2787,29 @@ handle_auth_or_fail (NMDeviceWifi *self, return ret; } +static gboolean +is_encrypted (NMAccessPoint *ap, NMConnection *connection) +{ + NM80211ApFlags flags; + NM80211ApSecurityFlags wpa_flags, rsn_flags; + + g_return_val_if_fail (ap != NULL, FALSE); + g_return_val_if_fail (connection != NULL, FALSE); + + flags = nm_ap_get_flags (ap); + wpa_flags = nm_ap_get_wpa_flags (ap); + rsn_flags = nm_ap_get_rsn_flags (ap); + + if (flags & NM_802_11_AP_FLAGS_PRIVACY) + return TRUE; + if (wpa_flags & (NM_802_11_AP_SEC_KEY_MGMT_PSK | NM_802_11_AP_SEC_KEY_MGMT_802_1X)) + return TRUE; + if (rsn_flags & (NM_802_11_AP_SEC_KEY_MGMT_PSK | NM_802_11_AP_SEC_KEY_MGMT_802_1X)) + return TRUE; + + return FALSE; +} + /* * supplicant_connection_timeout_cb * @@ -2835,11 +2819,10 @@ handle_auth_or_fail (NMDeviceWifi *self, static gboolean supplicant_connection_timeout_cb (gpointer user_data) { - NMDevice * dev = NM_DEVICE (user_data); - NMDeviceWifi * self = NM_DEVICE_WIFI (user_data); - NMAccessPoint * ap; - NMActRequest * req; - gboolean auth_enforced = FALSE, encrypted = FALSE; + NMDevice *dev = NM_DEVICE (user_data); + NMDeviceWifi *self = NM_DEVICE_WIFI (user_data); + NMAccessPoint *ap; + NMActRequest *req; NMConnection *connection; cleanup_association_attempt (self, TRUE); @@ -2847,10 +2830,10 @@ supplicant_connection_timeout_cb (gpointer user_data) if (!nm_device_is_activating (dev)) return FALSE; - /* Timed out waiting for authentication success; if the security in use - * does not require access point side authentication (Open System - * WEP, for example) then we are likely using the wrong authentication - * algorithm or key. Request new one from the user. + /* Timed out waiting for a successful connection to the AP; if the AP's + * security requires network-side authentication (like WPA or 802.1x) + * and the connection attempt timed out then it's likely the authentication + * information (passwords, pin codes, etc) are wrong. */ req = nm_device_get_act_request (dev); @@ -2862,16 +2845,24 @@ supplicant_connection_timeout_cb (gpointer user_data) ap = nm_device_wifi_get_activation_ap (self); g_assert (ap); - auth_enforced = ap_auth_enforced (connection, ap, &encrypted); - if (!encrypted) { + if (nm_ap_get_mode (ap) == NM_802_11_MODE_ADHOC) { + /* In Ad-Hoc mode there's nothing to check the encryption key (if any) + * so supplicant timeouts here are almost certainly the wifi driver + * being really stupid. + */ nm_log_warn (LOGD_DEVICE | LOGD_WIFI, - "Activation (%s/wireless): association took too long, " - "failing activation.", + "Activation (%s/wireless): Ad-Hoc network creation took " + "too long, failing activation.", nm_device_get_iface (dev)); nm_device_state_changed (dev, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT); - } else { - /* Authentication failed, encryption key is probably bad */ + return FALSE; + } + + if (is_encrypted (ap, connection)) { + /* Connection failed; either driver problems, the encryption key is + * wrong, or the passwords or certificates were wrong. + */ nm_log_warn (LOGD_DEVICE | LOGD_WIFI, "Activation (%s/wireless): association took too long.", nm_device_get_iface (dev)); @@ -2884,6 +2875,13 @@ supplicant_connection_timeout_cb (gpointer user_data) nm_device_state_changed (dev, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_NO_SECRETS); } + } else { + nm_log_warn (LOGD_DEVICE | LOGD_WIFI, + "Activation (%s/wireless): association took too long, " + "failing activation.", + nm_device_get_iface (dev)); + nm_device_state_changed (dev, NM_DEVICE_STATE_FAILED, + NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT); } return FALSE; @@ -3323,6 +3321,34 @@ real_act_stage4_get_ip4_config (NMDevice *dev, return ret; } +static gboolean +is_static_wep (NMAccessPoint *ap, NMConnection *connection) +{ + NM80211ApFlags flags; + NM80211ApSecurityFlags wpa_flags, rsn_flags; + NMSettingWirelessSecurity *s_wsec; + const char *key_mgmt; + + g_return_val_if_fail (ap != NULL, FALSE); + g_return_val_if_fail (connection != NULL, FALSE); + + flags = nm_ap_get_flags (ap); + wpa_flags = nm_ap_get_wpa_flags (ap); + rsn_flags = nm_ap_get_rsn_flags (ap); + + if ( (flags & NM_802_11_AP_FLAGS_PRIVACY) + && (wpa_flags == NM_802_11_AP_SEC_NONE) + && (rsn_flags == NM_802_11_AP_SEC_NONE)) { + s_wsec = nm_connection_get_setting_wireless_security (connection); + if (s_wsec) { + key_mgmt = nm_setting_wireless_security_get_key_mgmt (s_wsec); + if (g_strcmp0 (key_mgmt, "none") == 0) + return TRUE; + } + } + + return FALSE; +} static NMActStageReturn handle_ip_config_timeout (NMDeviceWifi *self, @@ -3333,20 +3359,20 @@ handle_ip_config_timeout (NMDeviceWifi *self, { NMAccessPoint *ap; NMActStageReturn ret = NM_ACT_STAGE_RETURN_FAILURE; - gboolean auth_enforced = FALSE, encrypted = FALSE; g_return_val_if_fail (connection != NULL, NM_ACT_STAGE_RETURN_FAILURE); ap = nm_device_wifi_get_activation_ap (self); g_assert (ap); - /* If nothing checks the security authentication information (as in - * Open System WEP for example), and DHCP times out, then - * the encryption key is likely wrong. Ask the user for a new one. - * Otherwise the failure likely happened after a successful authentication. + /* If IP configuration times out and it's a static WEP connection, that + * usually means the WEP key is wrong. WEP's Open System auth mode has + * no provision for figuring out if the WEP key is wrong, so you just have + * to wait for DHCP to fail to figure it out. For all other WiFi security + * types (open, WPA, 802.1x, etc) if the secrets/certs were wrong the + * connection would have failed before IP configuration. */ - auth_enforced = ap_auth_enforced (connection, ap, &encrypted); - if (encrypted && !auth_enforced && !may_fail) { + if (is_static_wep (ap, connection) && (may_fail == FALSE)) { /* Activation failed, we must have bad encryption key */ nm_log_warn (LOGD_DEVICE | LOGD_WIFI, "Activation (%s/wireless): could not get IP configuration for " @@ -3363,10 +3389,7 @@ handle_ip_config_timeout (NMDeviceWifi *self, *reason = NM_DEVICE_STATE_REASON_NO_SECRETS; } } else { - /* Non-encrypted network or authentication is enforced by some - * entity (AP, RADIUS server, etc), but IP configure failed. Let the - * superclass handle it. - */ + /* Not static WEP or failure allowed; let superclass handle it */ *chain_up = TRUE; } diff --git a/src/nm-device.c b/src/nm-device.c index 1301197a..a4cd3e93 100644 --- a/src/nm-device.c +++ b/src/nm-device.c @@ -25,7 +25,6 @@ #include #include #include -#include #include #include #include @@ -34,6 +33,7 @@ #include #include #include +#include #include "nm-glib-compat.h" #include "nm-device-interface.h" @@ -47,6 +47,8 @@ #include "nm-utils.h" #include "nm-logging.h" #include "nm-netlink-monitor.h" +#include "nm-netlink-utils.h" +#include "nm-netlink-compat.h" #include "nm-setting-ip4-config.h" #include "nm-setting-ip6-config.h" #include "nm-setting-connection.h" @@ -187,6 +189,8 @@ static void addrconf6_cleanup (NMDevice *self); static void dhcp6_cleanup (NMDevice *self, gboolean stop, gboolean release); static void dhcp4_cleanup (NMDevice *self, gboolean stop, gboolean release); +static const char *reason_to_string (NMDeviceStateReason reason); + static void device_interface_init (NMDeviceInterface *device_interface_class) @@ -1569,8 +1573,11 @@ nm_device_dhcp4_renew (NMDevice *self, gboolean release) g_return_val_if_fail (priv->dhcp4_client != NULL, FALSE); + nm_log_info (LOGD_DHCP4, "(%s): DHCPv4 lease renewal requested", + nm_device_get_iface (self)); + /* Terminate old DHCP instance and release the old lease */ - dhcp4_cleanup (self, TRUE, TRUE); + dhcp4_cleanup (self, TRUE, release); req = nm_device_get_act_request (self); g_assert (req); @@ -1591,16 +1598,15 @@ real_act_stage3_ip4_config_start (NMDevice *self, NMDeviceStateReason *reason) NMSettingIP4Config *s_ip4; NMActRequest *req; NMActStageReturn ret = NM_ACT_STAGE_RETURN_SUCCESS; - const char *ip_iface, *method = NULL; + const char *method = NULL; + int ifindex; g_return_val_if_fail (reason != NULL, NM_ACT_STAGE_RETURN_FAILURE); - /* Use the IP interface (not the control interface) for IP stuff */ - ip_iface = nm_device_get_ip_iface (self); - /* Make sure the interface is up before trying to do anything with it */ - if (!nm_system_device_is_up_with_iface (ip_iface)) - nm_system_device_set_up_down_with_iface (ip_iface, TRUE, NULL); + ifindex = nm_device_get_ip_ifindex (self); + if (!nm_system_iface_is_up (ifindex)) + nm_system_iface_set_up (ifindex, TRUE, NULL); req = nm_device_get_act_request (self); connection = nm_act_request_get_connection (req); @@ -1680,10 +1686,10 @@ dhcp6_start (NMDevice *self, */ err = nm_system_set_ip6_route (priv->ip_iface ? priv->ip_ifindex : priv->ifindex, &dest, 8, NULL, 256, 0, RTPROT_BOOT, RT_TABLE_LOCAL, NULL); - if (err && (nl_get_errno () != EEXIST)) { + if (err && (err != -NLE_EXIST)) { nm_log_err (LOGD_DEVICE | LOGD_IP6, "(%s): failed to add IPv6 multicast route: %s", - priv->ip_iface ? priv->ip_iface : priv->iface, nl_geterror ()); + priv->ip_iface ? priv->ip_iface : priv->iface, nl_geterror (err)); } s_ip6 = (NMSettingIP6Config *) nm_connection_get_setting (connection, NM_TYPE_SETTING_IP6_CONFIG); @@ -2522,7 +2528,7 @@ start_sharing (NMDevice *self) add_share_rule (req, "filter", "FORWARD --in-interface %s --out-interface %s --jump ACCEPT", ip_iface, ip_iface); add_share_rule (req, "filter", "FORWARD --source %s/%s --in-interface %s --jump ACCEPT", str_addr, str_mask, ip_iface); add_share_rule (req, "filter", "FORWARD --destination %s/%s --out-interface %s --match state --state ESTABLISHED,RELATED --jump ACCEPT", str_addr, str_mask, ip_iface); - add_share_rule (req, "nat", "POSTROUTING --source %s/%s --destination ! %s/%s --jump MASQUERADE", str_addr, str_mask, str_addr, str_mask); + add_share_rule (req, "nat", "POSTROUTING --source %s/%s ! --destination %s/%s --jump MASQUERADE", str_addr, str_mask, str_addr, str_mask); nm_act_request_set_shared (req, TRUE); @@ -2820,14 +2826,15 @@ nm_device_deactivate (NMDeviceInterface *device, NMDeviceStateReason reason) NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self); NMDeviceStateReason ignored = NM_DEVICE_STATE_REASON_NONE; gboolean tried_ipv6 = FALSE; + int ifindex, family; g_return_if_fail (self != NULL); - nm_log_info (LOGD_DEVICE, "(%s): deactivating device (reason: %d).", - nm_device_get_iface (self), reason); + nm_log_info (LOGD_DEVICE, "(%s): deactivating device (reason '%s') [%d]", + nm_device_get_iface (self), reason_to_string (reason), reason); /* Save whether or not we tried IPv6 for later */ - if (NM_DEVICE_GET_PRIVATE (self)->ip6_manager) + if (priv->ip6_manager || priv->ip6_config) tried_ipv6 = TRUE; /* Break the activation chain */ @@ -2857,8 +2864,10 @@ nm_device_deactivate (NMDeviceInterface *device, NMDeviceStateReason reason) clear_act_request (self); /* Take out any entries in the routing table and any IP address the device had. */ - nm_system_device_flush_routes (self, tried_ipv6 ? AF_UNSPEC : AF_INET); - nm_system_device_flush_addresses (self, tried_ipv6 ? AF_UNSPEC : AF_INET); + ifindex = nm_device_get_ip_ifindex (self); + family = tried_ipv6 ? AF_UNSPEC : AF_INET; + nm_system_iface_flush_routes (ifindex, family); + nm_system_iface_flush_addresses (ifindex, family); nm_device_update_ip4_address (self); /* Clean up nameservers and addresses */ @@ -3009,6 +3018,7 @@ nm_device_set_ip4_config (NMDevice *self, gboolean success = TRUE; NMIP4ConfigCompareFlags diff = NM_IP4_COMPARE_FLAG_ALL; NMDnsManager *dns_mgr; + int ip_ifindex; g_return_val_if_fail (NM_IS_DEVICE (self), FALSE); g_return_val_if_fail (reason != NULL, FALSE); @@ -3039,8 +3049,10 @@ nm_device_set_ip4_config (NMDevice *self, /* Don't touch the device's actual IP config if the connection is * assumed when NM starts. */ - if (!assumed) - success = nm_system_apply_ip4_config (ip_iface, new_config, nm_device_get_priority (self), diff); + if (!assumed) { + ip_ifindex = nm_device_get_ip_ifindex (self); + success = nm_system_apply_ip4_config (ip_ifindex, new_config, nm_device_get_priority (self), diff); + } if (success || assumed) { /* Export over D-Bus */ @@ -3112,12 +3124,14 @@ nm_device_set_ip6_config (NMDevice *self, gboolean success = TRUE; NMIP6ConfigCompareFlags diff = NM_IP6_COMPARE_FLAG_ALL; NMDnsManager *dns_mgr; + int ip_ifindex; g_return_val_if_fail (NM_IS_DEVICE (self), FALSE); g_return_val_if_fail (reason != NULL, FALSE); priv = NM_DEVICE_GET_PRIVATE (self); ip_iface = nm_device_get_ip_iface (self); + ip_ifindex = nm_device_get_ip_ifindex (self); old_config = priv->ip6_config; @@ -3143,7 +3157,7 @@ nm_device_set_ip6_config (NMDevice *self, * assumed when NM starts. */ if (!assumed) - success = nm_system_apply_ip6_config (ip_iface, new_config, nm_device_get_priority (self), diff); + success = nm_system_apply_ip6_config (ip_ifindex, new_config, nm_device_get_priority (self), diff); if (success || assumed) { /* Export over D-Bus */ @@ -3395,7 +3409,7 @@ set_property (GObject *object, guint prop_id, priv->iface = g_value_dup_string (value); if (priv->iface) { priv->ifindex = nm_netlink_iface_to_index (priv->iface); - if (priv->ifindex < 0) { + if (priv->ifindex <= 0) { nm_log_warn (LOGD_HW, "(%s): failed to look up interface index", priv->iface); } } diff --git a/src/nm-manager.c b/src/nm-manager.c index f5782254..475344a5 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -196,7 +196,6 @@ typedef struct { } RadioState; typedef struct { - char *config_file; char *state_file; GSList *devices; @@ -214,7 +213,8 @@ typedef struct { gboolean net_enabled; NMVPNManager *vpn_manager; - guint vpn_manager_id; + gulong vpn_manager_activated_id; + gulong vpn_manager_deactivated_id; NMModemManager *modem_manager; guint modem_added_id; @@ -376,6 +376,18 @@ manager_sleeping (NMManager *self) return FALSE; } +static void +vpn_manager_connection_activated_cb (NMVPNManager *manager, + NMVPNConnection *vpn, + NMVPNConnectionState state, + NMVPNConnectionStateReason reason, + gpointer user_data) +{ + /* Update timestamp for the VPN connection */ + nm_settings_connection_update_timestamp (NM_SETTINGS_CONNECTION (nm_vpn_connection_get_connection (vpn)), + (guint64) time (NULL)); +} + static void vpn_manager_connection_deactivated_cb (NMVPNManager *manager, NMVPNConnection *vpn, @@ -1980,6 +1992,7 @@ nm_manager_activate_connection (NMManager *manager, vpn_connection = nm_vpn_manager_activate_connection (priv->vpn_manager, connection, device, + nm_act_request_get_active_connection_path (parent_req), TRUE, sender_uid, error); @@ -3029,10 +3042,17 @@ out: return DBUS_HANDLER_RESULT_HANDLED; } +static NMManager *singleton = NULL; + +NMManager * +nm_manager_get (void) +{ + g_assert (singleton); + return g_object_ref (singleton); +} + NMManager * -nm_manager_get (NMSettings *settings, - const char *config_file, - const char *plugins, +nm_manager_new (NMSettings *settings, const char *state_file, gboolean initial_net_enabled, gboolean initial_wifi_enabled, @@ -3040,16 +3060,14 @@ nm_manager_get (NMSettings *settings, gboolean initial_wimax_enabled, GError **error) { - static NMManager *singleton = NULL; NMManagerPrivate *priv; DBusGConnection *bus; DBusConnection *dbus_connection; - if (singleton) - return g_object_ref (singleton); - g_assert (settings); + /* Can only be called once */ + g_assert (singleton == NULL); singleton = (NMManager *) g_object_new (NM_TYPE_MANAGER, NULL); g_assert (singleton); @@ -3068,7 +3086,6 @@ nm_manager_get (NMSettings *settings, priv->settings = g_object_ref (settings); - priv->config_file = g_strdup (config_file); priv->state_file = g_strdup (state_file); priv->net_enabled = initial_net_enabled; @@ -3155,13 +3172,16 @@ dispose (GObject *object) } g_free (priv->hostname); - g_free (priv->config_file); g_object_unref (priv->settings); - if (priv->vpn_manager_id) { - g_source_remove (priv->vpn_manager_id); - priv->vpn_manager_id = 0; + if (priv->vpn_manager_activated_id) { + g_source_remove (priv->vpn_manager_activated_id); + priv->vpn_manager_activated_id = 0; + } + if (priv->vpn_manager_deactivated_id) { + g_source_remove (priv->vpn_manager_deactivated_id); + priv->vpn_manager_deactivated_id = 0; } g_object_unref (priv->vpn_manager); @@ -3402,6 +3422,7 @@ static gboolean periodic_update_active_connection_timestamps (gpointer user_data) { NMManager *manager = NM_MANAGER (user_data); + NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager); GPtrArray *active; int i; @@ -3416,6 +3437,15 @@ periodic_update_active_connection_timestamps (gpointer user_data) if (device && nm_device_get_state (device) == NM_DEVICE_STATE_ACTIVATED) nm_settings_connection_update_timestamp (NM_SETTINGS_CONNECTION (nm_act_request_get_connection (req)), (guint64) time (NULL)); + else { + /* The connection is probably VPN */ + NMVPNConnection *vpn_con; + + vpn_con = nm_vpn_manager_get_vpn_connection_for_active (priv->vpn_manager, active_path); + if (vpn_con && nm_vpn_connection_get_vpn_state (vpn_con) == NM_VPN_CONNECTION_STATE_ACTIVATED) + nm_settings_connection_update_timestamp (NM_SETTINGS_CONNECTION (nm_vpn_connection_get_connection (vpn_con)), + (guint64) time (NULL)); + } } return TRUE; @@ -3426,7 +3456,7 @@ nm_manager_init (NMManager *manager) { NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager); DBusGConnection *g_connection; - guint id, i; + guint i; GFile *file; /* Initialize rfkill structures and states */ @@ -3471,9 +3501,10 @@ nm_manager_init (NMManager *manager) G_CALLBACK (modem_removed), manager); priv->vpn_manager = nm_vpn_manager_get (); - id = g_signal_connect (G_OBJECT (priv->vpn_manager), "connection-deactivated", - G_CALLBACK (vpn_manager_connection_deactivated_cb), manager); - priv->vpn_manager_id = id; + priv->vpn_manager_activated_id = g_signal_connect (G_OBJECT (priv->vpn_manager), "connection-activated", + G_CALLBACK (vpn_manager_connection_activated_cb), manager); + priv->vpn_manager_deactivated_id = g_signal_connect (G_OBJECT (priv->vpn_manager), "connection-deactivated", + G_CALLBACK (vpn_manager_connection_deactivated_cb), manager); g_connection = nm_dbus_manager_get_connection (priv->dbus_mgr); diff --git a/src/nm-manager.h b/src/nm-manager.h index 22bfca9e..b044971f 100644 --- a/src/nm-manager.h +++ b/src/nm-manager.h @@ -67,9 +67,8 @@ typedef struct { GType nm_manager_get_type (void); -NMManager *nm_manager_get (NMSettings *settings, - const char *config_file, - const char *plugins, +/* nm_manager_new() should only be used by main.c */ +NMManager *nm_manager_new (NMSettings *settings, const char *state_file, gboolean initial_net_enabled, gboolean initial_wifi_enabled, @@ -77,6 +76,8 @@ NMManager *nm_manager_get (NMSettings *settings, gboolean initial_wimax_enabled, GError **error); +NMManager *nm_manager_get (void); + void nm_manager_start (NMManager *manager); /* Device handling */ diff --git a/src/nm-netlink-compat.c b/src/nm-netlink-compat.c new file mode 100644 index 00000000..e91a1ff2 --- /dev/null +++ b/src/nm-netlink-compat.c @@ -0,0 +1,105 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ +/* NetworkManager -- Network link manager + * + * 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. + * + * Copyright (C) 2011 Caixa Magica Software. + */ + +#include +#include + +#include "nm-netlink-compat.h" + +#ifndef HAVE_LIBNL1 +struct rtnl_nexthop * +nm_netlink_get_nh (struct rtnl_route * route) +{ + int hops; + + hops = rtnl_route_get_nnexthops (route); + g_return_val_if_fail(hops > 0, NULL); + return rtnl_route_nexthop_n (route, 0); +} + +int +rtnl_route_get_oif (struct rtnl_route * route) +{ + struct rtnl_nexthop * nh; + + nh = nm_netlink_get_nh(route); + g_return_val_if_fail(nh, -NLE_OBJ_NOTFOUND); + return rtnl_route_nh_get_ifindex (nh); +} + +int +rtnl_route_set_oif (struct rtnl_route * route, int ifindex) +{ + struct rtnl_nexthop * nh; + + nh = rtnl_route_nh_alloc(); + rtnl_route_nh_set_ifindex(nh, ifindex); + rtnl_route_add_nexthop(route, nh); + return 0; +} + +struct nl_addr * +rtnl_route_get_gateway (struct rtnl_route * route) +{ + struct rtnl_nexthop * nh; + + nh = nm_netlink_get_nh(route); + g_return_val_if_fail(nh, NULL); + return rtnl_route_nh_get_gateway(nh); +} + +int +rtnl_route_set_gateway (struct rtnl_route * route, struct nl_addr * gw_addr) +{ + struct rtnl_nexthop * nh; + + nh = nm_netlink_get_nh(route); + g_return_val_if_fail(nh, -NLE_OBJ_NOTFOUND); + + rtnl_route_nh_set_gateway(nh, gw_addr); + return 0; +} + +int +rtnl_route_get_dst_len(struct rtnl_route * rtnlroute) +{ + struct nl_addr * dst; + + dst = rtnl_route_get_dst(rtnlroute); + return nl_addr_get_prefixlen(dst); +} +#endif + +#ifdef HAVE_LIBNL1 +int +nl_compat_error (int err) +{ + err = abs (err); + + if (err == EEXIST) + err = NLE_EXIST; + else if (err == ENOENT || err == ESRCH) + err = NLE_OBJ_NOTFOUND; + else if (err == ERANGE) + err = NLE_RANGE; + + return -err; +} +#endif diff --git a/src/nm-netlink-compat.h b/src/nm-netlink-compat.h new file mode 100644 index 00000000..af21fb9a --- /dev/null +++ b/src/nm-netlink-compat.h @@ -0,0 +1,207 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ +/* NetworkManager -- Network link manager + * + * 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. + * + * Copyright (C) 2011 Caixa Magica Software. + */ + +#ifndef NM_NETLINK_COMPAT_H +#define NM_NETLINK_COMPAT_H + +#include + +#include +#include +#include +#include +#include + + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +/* libnl-1 API compatibility for libnl-2/3*/ +#ifndef HAVE_LIBNL1 + +struct rtnl_nexthop * nm_netlink_get_nh(struct rtnl_route *); +int rtnl_route_get_oif(struct rtnl_route *); +int rtnl_route_set_oif(struct rtnl_route *, int); +int rtnl_route_set_gateway(struct rtnl_route *, struct nl_addr *); +int rtnl_route_get_dst_len(struct rtnl_route *); +struct nl_addr * rtnl_route_get_gateway(struct rtnl_route *); +#endif + +/* libnl-2 API compatibility for libnl-3 */ +#ifdef HAVE_LIBNL3 +static inline int +__rtnl_link_alloc_cache (struct nl_sock *h, struct nl_cache **cache) +{ + return rtnl_link_alloc_cache (h, AF_UNSPEC, cache); +} +#define rtnl_link_alloc_cache __rtnl_link_alloc_cache +#endif + + +/* libnl-2.0 compat functions */ +#ifdef HAVE_LIBNL2 + +/* functions with similar prototypes */ +#define nlmsg_datalen nlmsg_len +#endif + + +/* libnl-1.0 compat functions */ +#ifdef HAVE_LIBNL1 + +#define nl_sock nl_handle + +/* libnl-1.0 functions with similar prototypes */ +#define nl_socket_alloc nl_handle_alloc +#define nl_socket_alloc_cb nl_handle_alloc_cb +#define nl_socket_free nl_handle_destroy +#define nl_socket_set_passcred nl_set_passcred +#define nl_socket_disable_seq_check nl_disable_sequence_check +#define rtnl_route_set_priority rtnl_route_set_prio +#define nlmsg_datalen nlmsg_len + +/* auxiliary functions */ +int nl_compat_error (int); + +/* libnl-1.0 functions with modified prototypes in libnl-2/3*/ +static inline const char * +__nl_geterror (int err) +{ + /* err is set, can be parsed */ + return nl_geterror (); +} +#define nl_geterror __nl_geterror + +static inline int +__rtnl_addr_alloc_cache (struct nl_sock *h, struct nl_cache **cache) +{ + g_return_val_if_fail (cache != NULL, -EINVAL); + + *cache = rtnl_addr_alloc_cache (h); + return *cache ? 0 : -ENOMEM; +} +#define rtnl_addr_alloc_cache __rtnl_addr_alloc_cache + +static inline int +__rtnl_route_alloc_cache (struct nl_sock *h, int family, int flags, struct nl_cache **cache) +{ + g_return_val_if_fail (cache != NULL, -EINVAL); + + *cache = rtnl_route_alloc_cache (h); + return *cache ? 0 : -ENOMEM; +} +#define rtnl_route_alloc_cache __rtnl_route_alloc_cache + +static inline int +__rtnl_link_alloc_cache (struct nl_sock *h, struct nl_cache **cache) +{ + g_return_val_if_fail (cache != NULL, -EINVAL); + + *cache = rtnl_link_alloc_cache (h); + return *cache ? 0 : -ENOMEM; +} +#define rtnl_link_alloc_cache __rtnl_link_alloc_cache + +static inline int +__rtnl_route_get_metric (struct rtnl_route *route, int metric, unsigned int *value) +{ + g_return_val_if_fail (value != NULL, -EINVAL); + + *value = rtnl_route_get_metric (route, metric); + return 0; +} +#define rtnl_route_get_metric __rtnl_route_get_metric + +static inline int +__rtnl_addr_add (struct nl_sock *h, struct rtnl_addr *addr, int flags) +{ + return nl_compat_error (rtnl_addr_add (h, addr, flags)); +} +#define rtnl_addr_add __rtnl_addr_add + +static inline int +__rtnl_route_add (struct nl_sock *sk, struct rtnl_route *route, int flags) +{ + return nl_compat_error (rtnl_route_add (sk, route, flags)); +} +#define rtnl_route_add __rtnl_route_add + +static inline int +rtnl_route_delete (struct nl_sock *h, struct rtnl_route *route, int flags) +{ + return nl_compat_error (rtnl_route_del (h, route, flags)); +} +#define rtnl_route_del rtnl_route_delete + +static inline int +__rtnl_link_change (struct nl_sock *h, struct rtnl_link *old, struct rtnl_link *tmpl, int flags) +{ + return nl_compat_error (rtnl_link_change (h, old, tmpl,flags)); +} +#define rtnl_link_change __rtnl_link_change + +static inline int +__nl_cache_include (struct nl_cache *cache, struct nl_object *obj, change_func_t cb, void *data) +{ + return nl_cache_include (cache, obj, cb); +} +#define nl_cache_include __nl_cache_include + +#define NLE_SUCCESS 0 +#define NLE_FAILURE 1 +#define NLE_INTR 2 +#define NLE_BAD_SOCK 3 +#define NLE_AGAIN 4 +#define NLE_NOMEM 5 +#define NLE_EXIST 6 +#define NLE_INVAL 7 +#define NLE_RANGE 8 +#define NLE_MSGSIZE 9 +#define NLE_OPNOTSUPP 10 +#define NLE_AF_NOSUPPORT 11 +#define NLE_OBJ_NOTFOUND 12 +#define NLE_NOATTR 13 +#define NLE_MISSING_ATTR 14 +#define NLE_AF_MISMATCH 15 +#define NLE_SEQ_MISMATCH 16 +#define NLE_MSG_OVERFLOW 17 +#define NLE_MSG_TRUNC 18 +#define NLE_NOADDR 19 +#define NLE_SRCRT_NOSUPPORT 20 +#define NLE_MSG_TOOSHORT 21 +#define NLE_MSGTYPE_NOSUPPORT 22 +#define NLE_OBJ_MISMATCH 23 +#define NLE_NOCACHE 24 +#define NLE_BUSY 25 +#define NLE_PROTO_MISMATCH 26 +#define NLE_NOACCESS 27 +#define NLE_PERM 28 +#define NLE_PKTLOC_FILE 29 +#endif + +#endif /* NM_NETLINK_COMPAT_H */ diff --git a/src/nm-netlink-monitor.c b/src/nm-netlink-monitor.c index 13b3ab98..9b8dac5c 100644 --- a/src/nm-netlink-monitor.c +++ b/src/nm-netlink-monitor.c @@ -45,6 +45,7 @@ #include #include +#include "nm-netlink-compat.h" #include "nm-netlink-monitor.h" #include "nm-logging.h" @@ -58,12 +59,12 @@ typedef struct { /* Async event listener connection */ - struct nl_handle *nlh_event; + struct nl_sock *nlh_event; GIOChannel * io_channel; guint event_id; /* Sync/blocking request/response connection */ - struct nl_handle *nlh_sync; + struct nl_sock *nlh_sync; struct nl_cache * link_cache; guint request_status_id; @@ -98,7 +99,7 @@ link_msg_handler (struct nl_object *obj, void *arg) error = g_error_new (NM_NETLINK_MONITOR_ERROR, NM_NETLINK_MONITOR_ERROR_BAD_ALLOC, _("error processing netlink message: %s"), - nl_geterror ()); + nl_geterror (ENOMEM)); g_signal_emit (self, signals[ERROR], 0, error); g_error_free (error); return; @@ -130,7 +131,7 @@ link_msg_handler (struct nl_object *obj, void *arg) static int event_msg_recv (struct nl_msg *msg, void *arg) { - struct nl_handle *nlh = arg; + struct nl_sock *nlh = arg; struct nlmsghdr *hdr = nlmsg_hdr (msg); struct ucred *creds = nlmsg_get_creds (msg); const struct sockaddr_nl *snl; @@ -195,6 +196,7 @@ event_handler (GIOChannel *channel, NMNetlinkMonitor *self = (NMNetlinkMonitor *) user_data; NMNetlinkMonitorPrivate *priv; GError *error = NULL; + int err; g_return_val_if_fail (NM_IS_NETLINK_MONITOR (self), TRUE); @@ -225,11 +227,12 @@ event_handler (GIOChannel *channel, g_return_val_if_fail (!(io_condition & ~EVENT_CONDITIONS), FALSE); /* Process the netlink messages */ - if (nl_recvmsgs_default (priv->nlh_event) < 0) { + err = nl_recvmsgs_default (priv->nlh_event); + if (err < 0) { error = g_error_new (NM_NETLINK_MONITOR_ERROR, NM_NETLINK_MONITOR_ERROR_PROCESSING_MESSAGE, _("error processing netlink message: %s"), - nl_geterror ()); + nl_geterror (err)); g_signal_emit (self, signals[ERROR], 0, error); g_error_free (error); } @@ -238,32 +241,35 @@ event_handler (GIOChannel *channel, } static gboolean -nlh_setup (struct nl_handle *nlh, +nlh_setup (struct nl_sock *nlh, nl_recvmsg_msg_cb_t valid_func, gpointer cb_data, GError **error) { + int err; + nl_socket_modify_cb (nlh, NL_CB_MSG_IN, NL_CB_CUSTOM, event_msg_recv, cb_data); if (valid_func) nl_socket_modify_cb (nlh, NL_CB_VALID, NL_CB_CUSTOM, valid_func, cb_data); - if (nl_connect (nlh, NETLINK_ROUTE) < 0) { + err = nl_connect (nlh, NETLINK_ROUTE); + if (err < 0) { g_set_error (error, NM_NETLINK_MONITOR_ERROR, NM_NETLINK_MONITOR_ERROR_NETLINK_CONNECT, _("unable to connect to netlink for monitoring link status: %s"), - nl_geterror ()); + nl_geterror (err)); return FALSE; } /* Enable unix socket peer credentials which we use for verifying that the * sender of the message is actually the kernel. */ - if (nl_set_passcred (nlh, 1) < 0) { + if (nl_socket_set_passcred (nlh, 1) < 0) { g_set_error (error, NM_NETLINK_MONITOR_ERROR, NM_NETLINK_MONITOR_ERROR_NETLINK_CONNECT, _("unable to enable netlink handle credential passing: %s"), - nl_geterror ()); + nl_geterror (err)); return FALSE; } @@ -276,27 +282,24 @@ event_connection_setup (NMNetlinkMonitor *self, GError **error) NMNetlinkMonitorPrivate *priv = NM_NETLINK_MONITOR_GET_PRIVATE (self); GError *channel_error = NULL; GIOFlags channel_flags; - struct nl_cb *cb; int fd; g_return_val_if_fail (priv->io_channel == NULL, FALSE); /* Set up the event listener connection */ - cb = nl_cb_alloc (NL_CB_DEFAULT); - priv->nlh_event = nl_handle_alloc_cb (cb); - nl_cb_put (cb); + priv->nlh_event = nl_socket_alloc (); if (!priv->nlh_event) { g_set_error (error, NM_NETLINK_MONITOR_ERROR, NM_NETLINK_MONITOR_ERROR_NETLINK_ALLOC_HANDLE, _("unable to allocate netlink handle for monitoring link status: %s"), - nl_geterror ()); + nl_geterror (ENOMEM)); goto error; } if (!nlh_setup (priv->nlh_event, event_msg_ready, self, error)) goto error; - nl_disable_sequence_check (priv->nlh_event); + nl_socket_disable_seq_check (priv->nlh_event); /* Subscribe to the LINK group for internal carrier signals */ if (!nm_netlink_monitor_subscribe (self, RTNLGRP_LINK, error)) @@ -327,7 +330,7 @@ error: nm_netlink_monitor_close_connection (self); if (priv->nlh_event) { - nl_handle_destroy (priv->nlh_event); + nl_socket_free (priv->nlh_event); priv->nlh_event = NULL; } @@ -338,20 +341,18 @@ static gboolean sync_connection_setup (NMNetlinkMonitor *self, GError **error) { NMNetlinkMonitorPrivate *priv = NM_NETLINK_MONITOR_GET_PRIVATE (self); - struct nl_cb *cb; #ifdef LIBNL_NEEDS_ADDR_CACHING_WORKAROUND struct nl_cache *addr_cache; #endif + int err; /* Set up the event listener connection */ - cb = nl_cb_alloc (NL_CB_DEFAULT); - priv->nlh_sync = nl_handle_alloc_cb (cb); - nl_cb_put (cb); + priv->nlh_sync = nl_socket_alloc (); if (!priv->nlh_sync) { g_set_error (error, NM_NETLINK_MONITOR_ERROR, NM_NETLINK_MONITOR_ERROR_NETLINK_ALLOC_HANDLE, _("unable to allocate netlink handle for monitoring link status: %s"), - nl_geterror ()); + nl_geterror (ENOMEM)); goto error; } @@ -365,16 +366,18 @@ sync_connection_setup (NMNetlinkMonitor *self, GError **error) * result, most addresses will not compare as equal even to * themselves, busting caching. */ - addr_cache = rtnl_addr_alloc_cache (priv->nlh_sync); + rtnl_addr_alloc_cache (priv->nlh_sync, &addr_cache); + g_warn_if_fail (addr_cache != NULL); nl_cache_get_ops (addr_cache)->co_obj_ops->oo_id_attrs &= ~0x80; nl_cache_free (addr_cache); #endif - if ((priv->link_cache = rtnl_link_alloc_cache (priv->nlh_sync)) == NULL) { + err = rtnl_link_alloc_cache (priv->nlh_sync, &priv->link_cache); + if (err < 0) { g_set_error (error, NM_NETLINK_MONITOR_ERROR, NM_NETLINK_MONITOR_ERROR_NETLINK_ALLOC_LINK_CACHE, _("unable to allocate netlink link cache for monitoring link status: %s"), - nl_geterror ()); + nl_geterror (err)); goto error; } nl_cache_mngt_provide (priv->link_cache); @@ -388,7 +391,7 @@ error: } if (priv->nlh_sync) { - nl_handle_destroy (priv->nlh_sync); + nl_socket_free (priv->nlh_sync); priv->nlh_sync = NULL; } @@ -483,7 +486,7 @@ gboolean nm_netlink_monitor_subscribe (NMNetlinkMonitor *self, int group, GError **error) { NMNetlinkMonitorPrivate *priv; - int subs; + int subs, err; g_return_val_if_fail (NM_IS_NETLINK_MONITOR (self), FALSE); @@ -496,11 +499,12 @@ nm_netlink_monitor_subscribe (NMNetlinkMonitor *self, int group, GError **error) subs = get_subs (self, group) + 1; if (subs == 1) { - if (nl_socket_add_membership (priv->nlh_event, group) < 0) { + err = nl_socket_add_membership (priv->nlh_event, group); + if (err < 0) { g_set_error (error, NM_NETLINK_MONITOR_ERROR, NM_NETLINK_MONITOR_ERROR_NETLINK_JOIN_GROUP, _("unable to join netlink group: %s"), - nl_geterror ()); + nl_geterror (err)); return FALSE; } } @@ -558,15 +562,17 @@ deferred_emit_carrier_state (gpointer user_data) { NMNetlinkMonitor *self = NM_NETLINK_MONITOR (user_data); NMNetlinkMonitorPrivate *priv = NM_NETLINK_MONITOR_GET_PRIVATE (self); + int err; priv->request_status_id = 0; /* Update the link cache with latest state, and if there are no errors * emit the link states for all the interfaces in the cache. */ - if (nl_cache_refill (priv->nlh_sync, priv->link_cache)) { - nm_log_err (LOGD_HW, "error updating link cache: %s", nl_geterror ()); - } else + err = nl_cache_refill (priv->nlh_sync, priv->link_cache); + if (err < 0) + nm_log_err (LOGD_HW, "error updating link cache: %s", nl_geterror (err)); + else nl_cache_foreach_filter (priv->link_cache, NULL, link_msg_handler, self); return FALSE; @@ -614,6 +620,7 @@ nm_netlink_monitor_get_flags_sync (NMNetlinkMonitor *self, NMNetlinkMonitorPrivate *priv; GetFlagsInfo info; struct rtnl_link *filter; + int err; g_return_val_if_fail (self != NULL, FALSE); g_return_val_if_fail (NM_IS_NETLINK_MONITOR (self), FALSE); @@ -622,12 +629,13 @@ nm_netlink_monitor_get_flags_sync (NMNetlinkMonitor *self, priv = NM_NETLINK_MONITOR_GET_PRIVATE (self); /* Update the link cache with the latest information */ - if (nl_cache_refill (priv->nlh_sync, priv->link_cache)) { + err = nl_cache_refill (priv->nlh_sync, priv->link_cache); + if (err < 0) { g_set_error (error, NM_NETLINK_MONITOR_ERROR, NM_NETLINK_MONITOR_ERROR_LINK_CACHE_UPDATE, _("error updating link cache: %s"), - nl_geterror ()); + nl_geterror (err)); return FALSE; } @@ -640,7 +648,7 @@ nm_netlink_monitor_get_flags_sync (NMNetlinkMonitor *self, NM_NETLINK_MONITOR_ERROR, NM_NETLINK_MONITOR_ERROR_LINK_CACHE_UPDATE, _("error updating link cache: %s"), - nl_geterror ()); + nl_geterror (err)); return FALSE; } @@ -651,7 +659,7 @@ nm_netlink_monitor_get_flags_sync (NMNetlinkMonitor *self, NM_NETLINK_MONITOR_ERROR, NM_NETLINK_MONITOR_ERROR_BAD_ALLOC, _("error processing netlink message: %s"), - nl_geterror ()); + nl_geterror (err)); return FALSE; } rtnl_link_set_ifindex (filter, ifindex); @@ -678,11 +686,11 @@ nm_netlink_monitor_get_flags_sync (NMNetlinkMonitor *self, /***************************************************************/ -struct nl_handle * +struct nl_sock * nm_netlink_get_default_handle (void) { NMNetlinkMonitor *self; - struct nl_handle *nlh; + struct nl_sock *nlh; self = nm_netlink_monitor_get (); nlh = NM_NETLINK_MONITOR_GET_PRIVATE (self)->nlh_sync; @@ -710,6 +718,13 @@ nm_netlink_iface_to_index (const char *iface) return idx; } +/** + * nm_netlink_index_to_iface: + * @idx: kernel interface index + * + * Returns: the device name corresponding to the kernel interface index; caller + * owns returned value and must free it when it is no longer required + **/ #define MAX_IFACE_LEN 33 char * nm_netlink_index_to_iface (int idx) @@ -728,6 +743,7 @@ nm_netlink_index_to_iface (int idx) nl_cache_refill (priv->nlh_sync, priv->link_cache); if (!rtnl_link_i2name (priv->link_cache, idx, buf, MAX_IFACE_LEN - 1)) { + nm_log_warn (LOGD_HW, "(%d) failed to find interface name for index", idx); g_free (buf); buf = NULL; } @@ -796,12 +812,12 @@ finalize (GObject *object) } if (priv->nlh_event) { - nl_handle_destroy (priv->nlh_event); + nl_socket_free (priv->nlh_event); priv->nlh_event = NULL; } if (priv->nlh_sync) { - nl_handle_destroy (priv->nlh_sync); + nl_socket_free (priv->nlh_sync); priv->nlh_sync = NULL; } diff --git a/src/nm-netlink-monitor.h b/src/nm-netlink-monitor.h index 8b57a312..5c1fa339 100644 --- a/src/nm-netlink-monitor.h +++ b/src/nm-netlink-monitor.h @@ -90,10 +90,12 @@ gboolean nm_netlink_monitor_get_flags_sync (NMNetlinkMonitor *monitor guint32 *ifflags, GError **error); +#include "nm-netlink-compat.h" + /* Generic utility functions */ int nm_netlink_iface_to_index (const char *iface); char * nm_netlink_index_to_iface (int idx); struct rtnl_link *nm_netlink_index_to_rtnl_link (int idx); -struct nl_handle *nm_netlink_get_default_handle (void); +struct nl_sock * nm_netlink_get_default_handle (void); #endif /* NM_NETLINK_MONITOR_H */ diff --git a/src/nm-netlink-utils.c b/src/nm-netlink-utils.c new file mode 100644 index 00000000..4a62aa55 --- /dev/null +++ b/src/nm-netlink-utils.c @@ -0,0 +1,426 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ +/* NetworkManager -- Network link manager + * + * 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. + * + * Copyright (C) 2011 Red Hat, Inc. + */ + +#include "logging/nm-logging.h" +#include "nm-netlink-utils.h" +#include "nm-netlink-monitor.h" +#include "nm-netlink-compat.h" + +#include +#include +#include +#include +#include + +#include + +typedef struct { + int ifindex; + int family; + void *addr; + int addrlen; + int prefix; + gboolean found; +} FindAddrInfo; + +static void +find_one_address (struct nl_object *object, void *user_data) +{ + FindAddrInfo *info = user_data; + struct rtnl_addr *addr = (struct rtnl_addr *) object; + struct nl_addr *local; + void *binaddr; + + if (info->found) + return; + + if (rtnl_addr_get_ifindex (addr) != info->ifindex) + return; + if (rtnl_addr_get_family (addr) != info->family) + return; + + if (rtnl_addr_get_prefixlen (addr) != info->prefix) + return; + + local = rtnl_addr_get_local (addr); + if (nl_addr_get_family (local) != info->family) + return; + if (nl_addr_get_len (local) != info->addrlen) + return; + binaddr = nl_addr_get_binary_addr (local); + if (binaddr) { + if (memcmp (binaddr, info->addr, info->addrlen) == 0) + info->found = TRUE; /* Yay, found it */ + } +} + +/** + * nm_netlink_find_address: + * @ifindex: interface index + * @family: address family, either AF_INET or AF_INET6 + * @addr: binary address, either struct in_addr* or struct in6_addr* + * @prefix: prefix length + * + * Searches for a matching address on the given interface. + * + * Returns: %TRUE if the given address was found on the interface, %FALSE if it + * was not found or an error occurred. + **/ +gboolean +nm_netlink_find_address (int ifindex, + int family, + void *addr, /* struct in_addr or struct in6_addr */ + int prefix) +{ + struct nl_sock *nlh = NULL; + struct nl_cache *cache = NULL; + FindAddrInfo info; + + g_return_val_if_fail (ifindex > 0, FALSE); + g_return_val_if_fail (family == AF_INET || family == AF_INET6, FALSE); + g_return_val_if_fail (addr != NULL, FALSE); + g_return_val_if_fail (prefix >= 0, FALSE); + + memset (&info, 0, sizeof (info)); + info.ifindex = ifindex; + info.family = family; + info.prefix = prefix; + info.addr = addr; + if (family == AF_INET) + info.addrlen = sizeof (struct in_addr); + else if (family == AF_INET6) + info.addrlen = sizeof (struct in6_addr); + else + g_assert_not_reached (); + + nlh = nm_netlink_get_default_handle (); + if (nlh) { + rtnl_addr_alloc_cache(nlh, &cache); + if (cache) { + nl_cache_mngt_provide (cache); + nl_cache_foreach (cache, find_one_address, &info); + nl_cache_free (cache); + } + } + return info.found; +} + +struct rtnl_route * +nm_netlink_route_new (int ifindex, + int family, + int mss, + ...) +{ + va_list var_args; + struct rtnl_route *route; + NmNlProp prop = NMNL_PROP_INVALID; + int value; + + route = rtnl_route_alloc (); + g_return_val_if_fail (route != NULL, NULL); + + if (ifindex >= 0) + rtnl_route_set_oif (route, ifindex); + if (family != AF_UNSPEC) + rtnl_route_set_family (route, family); + if (mss > 0) + rtnl_route_set_metric (route, RTAX_ADVMSS, mss); + + va_start (var_args, mss); + prop = va_arg (var_args, NmNlProp); + while (prop != NMNL_PROP_INVALID) { + value = va_arg (var_args, int); + + if (prop == NMNL_PROP_PROT && value != RTPROT_UNSPEC) + rtnl_route_set_protocol (route, value); + else if (prop == NMNL_PROP_TABLE && value != RT_TABLE_UNSPEC) + rtnl_route_set_table (route, value); + else if (prop == NMNL_PROP_SCOPE && value != RT_SCOPE_NOWHERE) + rtnl_route_set_scope (route, value); + else if (prop == NMNL_PROP_PRIO && value > 0) + rtnl_route_set_priority (route, value); + + prop = va_arg (var_args, NmNlProp); + } + va_end (var_args); + + return route; +} + +/** + * nm_netlink_route_add: + * @route: the route to add + * + * Returns: zero if succeeded or the netlink error otherwise. + **/ +int nm_netlink_route_add(struct rtnl_route * route, + int family, + const void * dest, /* in_addr or in6_addr */ + int dest_prefix, + const void * gateway, /* in_addr or in6_addr */ + int flags) +{ + struct nl_sock * sk; + struct nl_addr * dest_addr, * gw_addr; + void * tmp_addr; + int addrlen, err, log; + + if(family == AF_INET) { + addrlen = sizeof(struct in_addr); + log = LOGD_IP4; + } + else if (family == AF_INET6) { + addrlen = sizeof(struct in6_addr); + log = LOGD_IP6; + } else { + g_assert_not_reached (); + } + + + sk = nm_netlink_get_default_handle(); + + /* Build up the destination address */ + if (dest) { + /* Copy to preserve const */ + tmp_addr = g_malloc0(addrlen); + memcpy(tmp_addr, dest, addrlen); + + dest_addr = nl_addr_build (family, tmp_addr, addrlen); + g_free(tmp_addr); + + g_return_val_if_fail (dest_addr != NULL, -NLE_INVAL); + nl_addr_set_prefixlen (dest_addr, dest_prefix); + + rtnl_route_set_dst (route, dest_addr); + nl_addr_put (dest_addr); + } + + /* Build up the gateway address */ + if (gateway) { + tmp_addr = g_malloc0(addrlen); + memcpy(tmp_addr, gateway, addrlen); + + gw_addr = nl_addr_build (family, tmp_addr, addrlen); + g_free(tmp_addr); + + if (gw_addr) { + nl_addr_set_prefixlen (gw_addr, 0); + rtnl_route_set_gateway (route, gw_addr); + rtnl_route_set_scope (route, RT_SCOPE_UNIVERSE); + nl_addr_put(gw_addr); + } else { + nm_log_err (LOGD_DEVICE | log, "Invalid gateway"); + } + } + + err = rtnl_route_add (sk, route, flags); + + /* LIBNL Bug: Aliased ESRCH */ + if (err == -NLE_FAILURE) + err = -NLE_OBJ_NOTFOUND; + + if (err) + nm_log_warn (LOGD_DEVICE | log, + "Failed to add route %s", + nl_geterror(err)); + + return err; +} + +/** + * nm_netlink_route_delete: + * @route: the route to delete + * + * Returns: %TRUE if the request was successful, %FALSE if it failed + **/ +gboolean +nm_netlink_route_delete (struct rtnl_route *route) +{ + struct nl_sock *nlh; + int err = 0; + + g_return_val_if_fail (route != NULL, FALSE); + + nlh = nm_netlink_get_default_handle (); + err = rtnl_route_delete (nlh, route, 0); + + if (err) + nm_log_dbg (LOGD_IP4 | LOGD_IP6, "%s (%d)", nl_geterror(err), err); + + /* Workaround libnl BUG: ESRCH is aliased to generic NLE_FAILURE + * See: http://git.kernel.org/?p=libs/netlink/libnl.git;a=commit;h=7e9d5f */ + if (err == -NLE_FAILURE) + err = -NLE_OBJ_NOTFOUND; + + return (err && (err != -NLE_OBJ_NOTFOUND) && (err != -NLE_RANGE) ) ? FALSE : TRUE; +} + + +static void +dump_route (struct rtnl_route *route) +{ + char buf6[INET6_ADDRSTRLEN]; + char buf4[INET_ADDRSTRLEN]; + struct nl_addr *nl; + struct in6_addr *addr6 = NULL; + struct in_addr *addr4 = NULL; + int prefixlen = 0; + const char *sf = "UNSPEC"; + int family = rtnl_route_get_family (route); + guint32 log_level = LOGD_IP4 | LOGD_IP6; + + memset (buf6, 0, sizeof (buf6)); + memset (buf4, 0, sizeof (buf4)); + nl = rtnl_route_get_dst (route); + if (nl) { + if (nl_addr_get_family (nl) == AF_INET) { + addr4 = nl_addr_get_binary_addr (nl); + if (addr4) + inet_ntop (AF_INET, addr4, &buf4[0], sizeof (buf4)); + } else if (nl_addr_get_family (nl) == AF_INET6) { + addr6 = nl_addr_get_binary_addr (nl); + if (addr6) + inet_ntop (AF_INET6, addr6, &buf6[0], sizeof (buf6)); + } + prefixlen = nl_addr_get_prefixlen (nl); + } + + if (family == AF_INET) { + sf = "INET"; + log_level = LOGD_IP4; + } else if (family == AF_INET6) { + sf = "INET6"; + log_level = LOGD_IP6; + } + + nm_log_dbg (log_level, " route idx %d family %s (%d) addr %s/%d", + rtnl_route_get_oif (route), + sf, family, + strlen (buf4) ? buf4 : (strlen (buf6) ? buf6 : ""), + prefixlen); +} + + +typedef struct { + int ifindex; + int family; + int scope; + gboolean ignore_inet6_ll_mc; + char *iface; + NlRouteForeachFunc callback; + gpointer user_data; + struct rtnl_route *out_route; +} ForeachRouteInfo; + +static void +foreach_route_cb (struct nl_object *object, void *user_data) +{ + ForeachRouteInfo *info = user_data; + struct rtnl_route *route = (struct rtnl_route *) object; + struct nl_addr *dst; + + if (info->out_route) + return; + + if (nm_logging_level_enabled (LOGL_DEBUG)) + dump_route (route); + + if ( info->ifindex >= 0 + && rtnl_route_get_oif (route) != info->ifindex) + return; + + if ( info->scope != RT_SCOPE_UNIVERSE + && rtnl_route_get_scope (route) != info->scope) + return; + + if ( info->family != AF_UNSPEC + && rtnl_route_get_family (route) != info->family) + return; + + dst = rtnl_route_get_dst (route); + + /* Check for IPv6 LL and MC routes that might need to be ignored */ + if ( (info->family == AF_INET6 || info->family == AF_UNSPEC) + && (rtnl_route_get_family (route) == AF_INET6)) { + struct in6_addr *addr = NULL; + + if (dst) + addr = nl_addr_get_binary_addr (dst); + if (addr) { + if ( IN6_IS_ADDR_LINKLOCAL (addr) + || IN6_IS_ADDR_MC_LINKLOCAL (addr) + || (IN6_IS_ADDR_MULTICAST (addr) && (nl_addr_get_prefixlen (dst) == 8))) + return; + } + } + + info->out_route = info->callback (route, dst, info->iface, info->user_data); + if (info->out_route) { + /* Ref the route so it sticks around after the cache is cleared */ + rtnl_route_get (info->out_route); + } +} + +/** + * nm_netlink_foreach_route: + * @ifindex: the interface index to filter routes for + * @family: the address family to filter routes for + * @scope: route scope, eg RT_SCOPE_LINK + * @ignore_inet6_ll_mc: if %TRUE ignore IPv6 link-local and multi-cast routes + * @callback: function called when a route matches the filter + * @user_data: data passed to @callback + * + * Filters each route in the routing table against the given @ifindex and + * @family (if given) and calls @callback for each matching route. + * + * Returns: a route if @callback returned one; the caller must dispose of the + * route using rtnl_route_put() when it is no longer required. + **/ +struct rtnl_route * +nm_netlink_foreach_route (int ifindex, + int family, + int scope, + gboolean ignore_inet6_ll_mc, + NlRouteForeachFunc callback, + gpointer user_data) +{ + struct nl_cache *cache; + ForeachRouteInfo info; + + memset (&info, 0, sizeof (info)); + info.ifindex = ifindex; + info.family = family; + info.scope = scope; + info.ignore_inet6_ll_mc = ignore_inet6_ll_mc; + info.callback = callback; + info.user_data = user_data; + info.iface = nm_netlink_index_to_iface (ifindex); + + rtnl_route_alloc_cache (nm_netlink_get_default_handle (), family, NL_AUTO_PROVIDE, &cache); + g_warn_if_fail (cache != NULL); + if (cache) { + nl_cache_foreach (cache, foreach_route_cb, &info); + nl_cache_free (cache); + } + g_free (info.iface); + return info.out_route; +} + + diff --git a/src/nm-netlink-utils.h b/src/nm-netlink-utils.h new file mode 100644 index 00000000..c6c452a0 --- /dev/null +++ b/src/nm-netlink-utils.h @@ -0,0 +1,80 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ +/* NetworkManager -- Network link manager + * + * 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. + * + * Copyright (C) 2011 Red Hat, Inc. + */ + +#ifndef NM_NETLINK_UTILS_H +#define NM_NETLINK_UTILS_H + +#include +#include +#include + +gboolean nm_netlink_find_address (int ifindex, + int family, + void *addr, /* struct in_addr or struct in6_addr */ + int prefix_); + +typedef enum { + NMNL_PROP_INVALID = 0, + NMNL_PROP_PROT, + NMNL_PROP_SCOPE, + NMNL_PROP_TABLE, + NMNL_PROP_PRIO, +} NmNlProp; + +struct rtnl_route * nm_netlink_route_new (int ifindex, + int family, + int mss, + ...) __attribute__((__sentinel__)); + +int nm_netlink_route_add (struct rtnl_route *route, + int family, + const void * dst, /* struct in_addr or struct in6_addr */ + int prefix, + const void * gw, /* struct in_addr or struct in6_addr */ + int flags); + +gboolean nm_netlink_route_delete (struct rtnl_route *route); + +/** + * NlRouteForeachFunc: + * @route: the route being processed + * @dst: the route's destination address + * @iface: the interface name of the index passed to nm_netlink_foreach_route() + * @in_family: the address family passed to nm_netlink_foreach_route() + * @user_data: the user data pointer passed to nm_netlink_foreach_route() + * + * Returns: a route to return to the caller of nm_netlink_foreach_route() which + * terminates routing table iteration, or NULL to continue iterating the + * routing table. + **/ +typedef struct rtnl_route * (*NlRouteForeachFunc) (struct rtnl_route *route, + struct nl_addr *dst, + const char *iface, + gpointer user_data); + +struct rtnl_route * nm_netlink_foreach_route (int ifindex, + int family, + int scope, + gboolean ignore_inet6_ll_mc, + NlRouteForeachFunc callback, + gpointer user_data); + +#endif /* NM_NETLINK_MONITOR_H */ + diff --git a/src/nm-policy.c b/src/nm-policy.c index a42a0fa9..5c4059e1 100644 --- a/src/nm-policy.c +++ b/src/nm-policy.c @@ -322,7 +322,7 @@ 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, "new_host_name"); + p = dhcp_hostname = nm_dhcp4_config_get_option (dhcp4_config, "host_name"); if (dhcp_hostname && strlen (dhcp_hostname)) { /* Sanity check; strip leading spaces */ while (*p) { @@ -341,7 +341,7 @@ update_system_hostname (NMPolicy *policy, NMDevice *best4, NMDevice *best6) /* 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, "new_host_name"); + p = dhcp_hostname = nm_dhcp6_config_get_option (dhcp6_config, "host_name"); if (dhcp_hostname && strlen (dhcp_hostname)) { /* Sanity check; strip leading spaces */ while (*p) { @@ -425,6 +425,7 @@ update_ip4_routing_and_dns (NMPolicy *policy, gboolean force_update) NMConnection *connection = NULL; NMSettingConnection *s_con = NULL; const char *connection_id; + int ip_ifindex = 0; best = get_best_ip4_device (policy->manager, &best_req); if (!best) @@ -461,17 +462,18 @@ update_ip4_routing_and_dns (NMPolicy *policy, gboolean force_update) NMDevice *parent; ip_iface = nm_vpn_connection_get_ip_iface (candidate); + ip_ifindex = nm_vpn_connection_get_ip_ifindex (candidate); connection = nm_vpn_connection_get_connection (candidate); addr = nm_ip4_config_get_address (ip4_config, 0); parent = nm_vpn_connection_get_parent_device (candidate); parent_ip4 = nm_device_get_ip4_config (parent); - nm_system_replace_default_ip4_route_vpn (ip_iface, + nm_system_replace_default_ip4_route_vpn (ip_ifindex, nm_ip4_address_get_gateway (addr), nm_vpn_connection_get_ip4_internal_gateway (candidate), nm_ip4_config_get_mss (ip4_config), - nm_device_get_ip_iface (parent), + nm_device_get_ip_ifindex (parent), nm_ip4_config_get_mss (parent_ip4)); dns_type = NM_DNS_IP_CONFIG_TYPE_VPN; @@ -483,12 +485,14 @@ update_ip4_routing_and_dns (NMPolicy *policy, gboolean force_update) if (!ip_iface || !ip4_config) { connection = nm_act_request_get_connection (best_req); ip_iface = nm_device_get_ip_iface (best); + ip_ifindex = nm_device_get_ip_ifindex (best); ip4_config = nm_device_get_ip4_config (best); g_assert (ip4_config); addr = nm_ip4_config_get_address (ip4_config, 0); - nm_system_replace_default_ip4_route (ip_iface, nm_ip4_address_get_gateway (addr), nm_ip4_config_get_mss (ip4_config)); - + nm_system_replace_default_ip4_route (ip_ifindex, + nm_ip4_address_get_gateway (addr), + nm_ip4_config_get_mss (ip4_config)); dns_type = NM_DNS_IP_CONFIG_TYPE_BEST_DEVICE; } @@ -551,6 +555,7 @@ update_ip6_routing_and_dns (NMPolicy *policy, gboolean force_update) NMIP6Config *ip6_config = NULL; NMIP6Address *addr; const char *ip_iface = NULL; + int ip_ifindex = -1; NMConnection *connection = NULL; NMSettingConnection *s_con = NULL; const char *connection_id; @@ -608,11 +613,12 @@ update_ip6_routing_and_dns (NMPolicy *policy, gboolean force_update) if (!ip_iface || !ip6_config) { connection = nm_act_request_get_connection (best_req); ip_iface = nm_device_get_ip_iface (best); + ip_ifindex = nm_device_get_ip_ifindex (best); ip6_config = nm_device_get_ip6_config (best); g_assert (ip6_config); addr = nm_ip6_config_get_address (ip6_config, 0); - nm_system_replace_default_ip6_route (ip_iface, nm_ip6_address_get_gateway (addr)); + nm_system_replace_default_ip6_route (ip_ifindex, nm_ip6_address_get_gateway (addr)); dns_type = NM_DNS_IP_CONFIG_TYPE_BEST_DEVICE; } diff --git a/src/nm-system.c b/src/nm-system.c index 88db6596..62ab8b93 100644 --- a/src/nm-system.c +++ b/src/nm-system.c @@ -40,7 +40,7 @@ #include #include #include -#include +#include #include "nm-system.h" #include "nm-device.h" @@ -48,9 +48,8 @@ #include "nm-utils.h" #include "nm-logging.h" #include "nm-netlink-monitor.h" - -/* Because of a bug in libnl, rtnl.h should be included before route.h */ -#include +#include "nm-netlink-utils.h" +#include "nm-netlink-compat.h" #include #include @@ -58,9 +57,9 @@ #include #include -static void nm_system_device_set_priority (const char *iface, - NMIP4Config *config, - int priority); +static void nm_system_device_set_priority (int ifindex, + NMIP4Config *config, + int priority); static gboolean ip4_dest_in_same_subnet (NMIP4Config *config, guint32 dest, guint32 dest_prefix) @@ -87,99 +86,54 @@ ip4_dest_in_same_subnet (NMIP4Config *config, guint32 dest, guint32 dest_prefix) } static struct rtnl_route * -create_route (int iface_idx, int mss) -{ - struct rtnl_route *route; - - route = rtnl_route_alloc (); - if (route) { - rtnl_route_set_oif (route, iface_idx); - - if (mss && rtnl_route_set_metric (route, RTAX_ADVMSS, mss) < 0) { - nm_log_warn (LOGD_DEVICE, "could not set mss"); - } - } else - nm_log_err (LOGD_DEVICE, "could not allocate route"); - - return route; -} - -static struct rtnl_route * -nm_system_device_set_ip4_route (const char *iface, +nm_system_device_set_ip4_route (int ifindex, guint32 ip4_dest, guint32 ip4_prefix, guint32 ip4_gateway, guint32 metric, int mss) { - struct nl_handle *nlh; + struct nl_sock *nlh; struct rtnl_route *route; - struct nl_addr *dest_addr; - struct nl_addr *gw_addr = NULL; - int err, iface_idx; + int err; + + g_return_val_if_fail (ifindex > 0, NULL); nlh = nm_netlink_get_default_handle (); g_return_val_if_fail (nlh != NULL, NULL); - iface_idx = nm_netlink_iface_to_index (iface); - g_return_val_if_fail (iface_idx >= 0, NULL); - - route = create_route (iface_idx, mss); + route = nm_netlink_route_new (ifindex, AF_INET, mss, + NMNL_PROP_PRIO, metric, + NULL); g_return_val_if_fail (route != NULL, NULL); - /* Destination */ - dest_addr = nl_addr_build (AF_INET, &ip4_dest, sizeof (ip4_dest)); - g_return_val_if_fail (dest_addr != NULL, NULL); - nl_addr_set_prefixlen (dest_addr, (int) ip4_prefix); - - rtnl_route_set_dst (route, dest_addr); - nl_addr_put (dest_addr); - - /* Gateway */ - if (ip4_gateway) { - gw_addr = nl_addr_build (AF_INET, &ip4_gateway, sizeof (ip4_gateway)); - if (gw_addr) { - rtnl_route_set_gateway (route, gw_addr); - rtnl_route_set_scope (route, RT_SCOPE_UNIVERSE); - } else { - nm_log_err (LOGD_DEVICE | LOGD_IP4, "Invalid gateway 0x%X", ip4_gateway); - rtnl_route_put (route); - return NULL; - } - } - - /* Metric */ - if (metric) - rtnl_route_set_prio (route, metric); - /* Add the route */ - err = rtnl_route_add (nlh, route, 0); - if (err == -ESRCH && ip4_gateway) { + err = nm_netlink_route_add(route, AF_INET, &ip4_dest, ip4_prefix, &ip4_gateway, 0); + if (err == -NLE_OBJ_NOTFOUND && ip4_gateway) { /* Gateway might be over a bridge; try adding a route to gateway first */ struct rtnl_route *route2; - route2 = create_route (iface_idx, mss); + route2 = nm_netlink_route_new (ifindex, AF_INET, mss, NULL); if (route2) { /* Add route to gateway over bridge */ - rtnl_route_set_dst (route2, gw_addr); - err = rtnl_route_add (nlh, route2, 0); + err = nm_netlink_route_add(route2, AF_INET, &ip4_gateway, 32, NULL, 0); if (!err) { - /* Try adding the route again */ - err = rtnl_route_add (nlh, route, 0); + err = nm_netlink_route_add(route, AF_INET, &ip4_dest, ip4_prefix, &ip4_gateway, 0); if (err) - rtnl_route_del (nlh, route2, 0); + nm_netlink_route_delete (route2); } rtnl_route_put (route2); } } - if (gw_addr) - nl_addr_put (gw_addr); - if (err) { + char *iface = nm_netlink_index_to_iface (ifindex); + nm_log_err (LOGD_DEVICE | LOGD_IP4, "(%s): failed to set IPv4 route: %s", - iface, nl_geterror ()); + iface ? iface : "unknown", nl_geterror (err)); + g_free (iface); + rtnl_route_put (route); route = NULL; } @@ -188,17 +142,21 @@ nm_system_device_set_ip4_route (const char *iface, } static gboolean -sync_addresses (const char *iface, int ifindex, int family, - struct rtnl_addr **addrs, int num_addrs) +sync_addresses (int ifindex, + int family, + struct rtnl_addr **addrs, + int num_addrs) { - struct nl_handle *nlh; - struct nl_cache *addr_cache; - struct rtnl_addr *filter_addr, *match_addr; + struct nl_sock *nlh; + struct nl_cache *addr_cache = NULL; + struct rtnl_addr *filter_addr = NULL, *match_addr; struct nl_object *match; struct nl_addr *nladdr; int i, err; guint32 log_domain = (family == AF_INET) ? LOGD_IP4 : LOGD_IP6; char buf[INET6_ADDRSTRLEN + 1]; + char *iface = NULL; + gboolean success = FALSE; log_domain |= LOGD_DEVICE; @@ -206,19 +164,22 @@ sync_addresses (const char *iface, int ifindex, int family, if (!nlh) return FALSE; - addr_cache = rtnl_addr_alloc_cache (nlh); - if (!addr_cache) + err = rtnl_addr_alloc_cache (nlh, &addr_cache); + if (err < 0) return FALSE; filter_addr = rtnl_addr_alloc (); - if (!filter_addr) { - nl_cache_free (addr_cache); - return FALSE; - } + if (!filter_addr) + goto out; + rtnl_addr_set_ifindex (filter_addr, ifindex); if (family) rtnl_addr_set_family (filter_addr, family); + iface = nm_netlink_index_to_iface (ifindex); + if (!iface) + goto out; + nm_log_dbg (log_domain, "(%s): syncing addresses (family %d)", iface, family); /* Walk through the cache, comparing the addresses already on @@ -279,13 +240,10 @@ sync_addresses (const char *iface, int ifindex, int family, err = rtnl_addr_delete (nlh, match_addr, 0); if (err < 0) { nm_log_err (log_domain, "(%s): error %d returned from rtnl_addr_delete(): %s", - iface, err, nl_geterror ()); + iface, err, nl_geterror (err)); } } - rtnl_addr_put (filter_addr); - nl_cache_free (addr_cache); - /* Now add the remaining new addresses */ for (i = 0; i < num_addrs; i++) { struct in6_addr *in6tmp; @@ -312,28 +270,40 @@ sync_addresses (const char *iface, int ifindex, int family, } err = rtnl_addr_add (nlh, addrs[i], 0); - if (err < 0 && (nl_get_errno () != EEXIST)) { + if (err < 0 && (err != -NLE_EXIST)) { nm_log_err (log_domain, "(%s): error %d returned from rtnl_addr_add():\n%s", - iface, err, nl_geterror ()); + iface, err, nl_geterror (err)); } rtnl_addr_put (addrs[i]); } g_free (addrs); + success = TRUE; - return TRUE; +out: + if (filter_addr) + rtnl_addr_put (filter_addr); + if (addr_cache) + nl_cache_free (addr_cache); + g_free (iface); + return success; } static gboolean -add_ip4_addresses (NMIP4Config *config, const char *iface) +add_ip4_addresses (NMIP4Config *config, int ifindex) { - int num_addrs, i, iface_idx; + char *iface; + int num_addrs, i; guint32 flags = 0; gboolean did_gw = FALSE; struct rtnl_addr **addrs; - iface_idx = nm_netlink_iface_to_index (iface); + g_return_val_if_fail (ifindex > 0, FALSE); + + iface = nm_netlink_index_to_iface (ifindex); + if (!iface) + return FALSE; num_addrs = nm_ip4_config_get_num_addresses (config); addrs = g_new0 (struct rtnl_addr *, num_addrs + 1); @@ -355,13 +325,14 @@ add_ip4_addresses (NMIP4Config *config, const char *iface) if (!addrs[i]) { nm_log_warn (LOGD_DEVICE | LOGD_IP4, "(%s): couldn't create rtnl address!", - iface); + iface ? iface : "unknown"); continue; } - rtnl_addr_set_ifindex (addrs[i], iface_idx); + rtnl_addr_set_ifindex (addrs[i], ifindex); } + g_free (iface); - return sync_addresses (iface, iface_idx, AF_INET, addrs, num_addrs); + return sync_addresses (ifindex, AF_INET, addrs, num_addrs); } struct rtnl_route * @@ -406,10 +377,10 @@ nm_system_add_ip4_vpn_gateway_route (NMDevice *parent_device, NMIP4Config *vpn_c * parent device. */ if (ip4_dest_in_same_subnet (parent_config, vpn_gw, parent_prefix)) { - route = nm_system_device_set_ip4_route (nm_device_get_ip_iface (parent_device), + route = nm_system_device_set_ip4_route (nm_device_get_ip_ifindex (parent_device), vpn_gw, 32, 0, 0, nm_ip4_config_get_mss (parent_config)); } else { - route = nm_system_device_set_ip4_route (nm_device_get_ip_iface (parent_device), + route = nm_system_device_set_ip4_route (nm_device_get_ip_ifindex (parent_device), vpn_gw, 32, parent_gw, 0, nm_ip4_config_get_mss (parent_config)); } @@ -423,18 +394,18 @@ nm_system_add_ip4_vpn_gateway_route (NMDevice *parent_device, NMIP4Config *vpn_c * */ gboolean -nm_system_apply_ip4_config (const char *iface, +nm_system_apply_ip4_config (int ifindex, NMIP4Config *config, int priority, NMIP4ConfigCompareFlags flags) { int i; - g_return_val_if_fail (iface != NULL, FALSE); + g_return_val_if_fail (ifindex > 0, FALSE); g_return_val_if_fail (config != NULL, FALSE); if (flags & NM_IP4_COMPARE_FLAG_ADDRESSES) { - if (!add_ip4_addresses (config, iface)) + if (!add_ip4_addresses (config, ifindex)) return FALSE; sleep (1); } @@ -459,7 +430,7 @@ nm_system_apply_ip4_config (const char *iface, && nm_ip4_route_get_dest (route) == 0) continue; - tmp = nm_system_device_set_ip4_route (iface, + tmp = nm_system_device_set_ip4_route (ifindex, nm_ip4_route_get_dest (route), nm_ip4_route_get_prefix (route), nm_ip4_route_get_next_hop (route), @@ -471,11 +442,11 @@ nm_system_apply_ip4_config (const char *iface, if (flags & NM_IP4_COMPARE_FLAG_MTU) { if (nm_ip4_config_get_mtu (config)) - nm_system_device_set_mtu (iface, nm_ip4_config_get_mtu (config)); + nm_system_iface_set_mtu (ifindex, nm_ip4_config_get_mtu (config)); } if (priority > 0) - nm_system_device_set_priority (iface, config, priority); + nm_system_device_set_priority (ifindex, config, priority); return TRUE; } @@ -491,10 +462,8 @@ nm_system_set_ip6_route (int ifindex, int table, struct rtnl_route **out_route) { - struct nl_handle *nlh; + struct nl_sock *nlh; struct rtnl_route *route; - struct nl_addr *dest_addr; - struct nl_addr *gw_addr = NULL; int err = 0; g_return_val_if_fail (ifindex >= 0, -1); @@ -502,64 +471,33 @@ nm_system_set_ip6_route (int ifindex, nlh = nm_netlink_get_default_handle (); g_return_val_if_fail (nlh != NULL, -1); - route = create_route (ifindex, mss); + route = nm_netlink_route_new (ifindex, AF_INET6, mss, + NMNL_PROP_PROT, protocol, + NMNL_PROP_PRIO, metric, + NMNL_PROP_TABLE, table, + NULL); g_return_val_if_fail (route != NULL, -1); - /* Destination */ - dest_addr = nl_addr_build (AF_INET6, (struct in6_addr *) ip6_dest, sizeof (*ip6_dest)); - g_return_val_if_fail (dest_addr != NULL, -1); - nl_addr_set_prefixlen (dest_addr, (int) ip6_prefix); - - rtnl_route_set_dst (route, dest_addr); - nl_addr_put (dest_addr); - - /* Gateway */ - if (ip6_gateway && !IN6_IS_ADDR_UNSPECIFIED (ip6_gateway)) { - gw_addr = nl_addr_build (AF_INET6, (struct in6_addr *) ip6_gateway, sizeof (*ip6_gateway)); - if (gw_addr) { - rtnl_route_set_gateway (route, gw_addr); - rtnl_route_set_scope (route, RT_SCOPE_UNIVERSE); - } else { - nm_log_warn (LOGD_DEVICE | LOGD_IP6, "Invalid gateway"); - rtnl_route_put (route); - return -1; - } - } - - /* Metric */ - if (metric) - rtnl_route_set_prio (route, metric); - - if (protocol) - rtnl_route_set_protocol (route, protocol); - - if (table) - rtnl_route_set_table (route, table); - /* Add the route */ - err = rtnl_route_add (nlh, route, 0); - if (err == -ESRCH && ip6_gateway) { + err = nm_netlink_route_add(route, AF_INET6, &ip6_dest, ip6_prefix, &ip6_gateway, 0); + if (err == -NLE_OBJ_NOTFOUND && ip6_gateway) { /* Gateway might be over a bridge; try adding a route to gateway first */ struct rtnl_route *route2; - route2 = create_route (ifindex, mss); + route2 = nm_netlink_route_new (ifindex, AF_INET6, mss, NULL); if (route2) { + err = nm_netlink_route_add(route, AF_INET6, &ip6_gateway, 128, NULL, 0); /* Add route to gateway over bridge */ - rtnl_route_set_dst (route2, gw_addr); - err = rtnl_route_add (nlh, route2, 0); if (!err) { /* Try adding the route again */ - err = rtnl_route_add (nlh, route, 0); + err = nm_netlink_route_add(route, AF_INET6, &ip6_dest, ip6_prefix, &ip6_gateway, 0); if (err) - rtnl_route_del (nlh, route2, 0); + nm_netlink_route_delete (route2); } rtnl_route_put (route2); } } - if (gw_addr) - nl_addr_put (gw_addr); - if (out_route) *out_route = route; else @@ -569,12 +507,17 @@ nm_system_set_ip6_route (int ifindex, } static gboolean -add_ip6_addresses (NMIP6Config *config, const char *iface) +add_ip6_addresses (NMIP6Config *config, int ifindex) { - int num_addrs, i, iface_idx; + char *iface; + int num_addrs, i; struct rtnl_addr **addrs; - iface_idx = nm_netlink_iface_to_index (iface); + g_return_val_if_fail (ifindex > 0, FALSE); + + iface = nm_netlink_index_to_iface (ifindex); + if (!iface) + return FALSE; num_addrs = nm_ip6_config_get_num_addresses (config); addrs = g_new0 (struct rtnl_addr *, num_addrs + 1); @@ -589,13 +532,14 @@ add_ip6_addresses (NMIP6Config *config, const char *iface) if (!addrs[i]) { nm_log_warn (LOGD_DEVICE | LOGD_IP6, "(%s): couldn't create rtnl address!", - iface); + iface ? iface : "unknown"); continue; } - rtnl_addr_set_ifindex (addrs[i], iface_idx); + rtnl_addr_set_ifindex (addrs[i], ifindex); } + g_free (iface); - return sync_addresses (iface, iface_idx, AF_INET6, addrs, num_addrs); + return sync_addresses (ifindex, AF_INET6, addrs, num_addrs); } /* @@ -605,24 +549,24 @@ add_ip6_addresses (NMIP6Config *config, const char *iface) * */ gboolean -nm_system_apply_ip6_config (const char *iface, +nm_system_apply_ip6_config (int ifindex, NMIP6Config *config, int priority, NMIP6ConfigCompareFlags flags) { int i; - g_return_val_if_fail (iface != NULL, FALSE); + g_return_val_if_fail (ifindex > 0, FALSE); g_return_val_if_fail (config != NULL, FALSE); if (flags & NM_IP6_COMPARE_FLAG_ADDRESSES) { - if (!add_ip6_addresses (config, iface)) + if (!add_ip6_addresses (config, ifindex)) return FALSE; sleep (1); // FIXME? } if (flags & NM_IP6_COMPARE_FLAG_ROUTES) { - int ifindex = nm_netlink_iface_to_index (iface); + char *iface = nm_netlink_index_to_iface (ifindex); for (i = 0; i < nm_ip6_config_get_num_routes (config); i++) { NMIP6Route *route = nm_ip6_config_get_route (config, i); @@ -647,9 +591,11 @@ nm_system_apply_ip6_config (const char *iface, if (err) { nm_log_err (LOGD_DEVICE | LOGD_IP6, "(%s): failed to set IPv6 route: %s", - iface, nl_geterror ()); + iface ? iface : "unknown", + nl_geterror (err)); } } + g_free (iface); } // FIXME @@ -659,217 +605,221 @@ nm_system_apply_ip6_config (const char *iface, return TRUE; } -/* - * nm_system_device_set_up_down +/** + * nm_system_iface_set_up: + * @ifindex: interface index + * @up: %TRUE to bring interface up, or %FALSE to take it down + * @no_firmware: on return, %TRUE if the operation may have failed due to + * missing firmware * - * Mark the device as up or down. + * Bring the interface up or take it down. * - */ -gboolean -nm_system_device_set_up_down (NMDevice *dev, - gboolean up, - gboolean *no_firmware) -{ - g_return_val_if_fail (dev != NULL, FALSE); - - return nm_system_device_set_up_down_with_iface (nm_device_get_ip_iface (dev), up, no_firmware); -} - + * Returns: %TRUE on success, %FALSE on failure + **/ gboolean -nm_system_device_set_up_down_with_iface (const char *iface, - gboolean up, - gboolean *no_firmware) +nm_system_iface_set_up (int ifindex, + gboolean up, + gboolean *no_firmware) { struct rtnl_link *request = NULL, *old = NULL; - struct nl_handle *nlh; + struct nl_sock *nlh; gboolean success = FALSE; - guint32 idx; + int err; - g_return_val_if_fail (iface != NULL, FALSE); + g_return_val_if_fail (ifindex > 0, FALSE); if (no_firmware) g_return_val_if_fail (*no_firmware == FALSE, FALSE); if (!(request = rtnl_link_alloc ())) - goto out; + return FALSE; if (up) rtnl_link_set_flags (request, IFF_UP); else rtnl_link_unset_flags (request, IFF_UP); - idx = nm_netlink_iface_to_index (iface); - old = nm_netlink_index_to_rtnl_link (idx); + old = nm_netlink_index_to_rtnl_link (ifindex); if (old) { nlh = nm_netlink_get_default_handle (); if (nlh) { - if (rtnl_link_change (nlh, old, request, 0) == 0) + err = rtnl_link_change (nlh, old, request, 0); + if (err == 0) { success = TRUE; - else if ((nl_get_errno () == ENOENT) && no_firmware && up) - *no_firmware = TRUE; + } else { + if ((err == -NLE_OBJ_NOTFOUND) && no_firmware && up) + *no_firmware = TRUE; + } } } rtnl_link_put (old); rtnl_link_put (request); - -out: return success; } +/** + * nm_system_iface_is_up: + * @ifindex: interface index + * + * Returns: %TRUE if the interface is up, %FALSE if it was down or the check + * failed. + **/ gboolean -nm_system_device_is_up (NMDevice *device) +nm_system_iface_is_up (int ifindex) { - g_return_val_if_fail (device != NULL, FALSE); + struct rtnl_link *l; + guint32 flags; - return nm_system_device_is_up_with_iface (nm_device_get_ip_iface (device)); -} + g_return_val_if_fail (ifindex > 0, FALSE); -gboolean -nm_system_device_is_up_with_iface (const char *iface) -{ - struct ifreq ifr; - int fd; - gboolean up = FALSE; + l = nm_netlink_index_to_rtnl_link (ifindex); + if (l == NULL) { + char *iface = nm_netlink_index_to_iface (ifindex); - fd = socket (PF_INET, SOCK_DGRAM, 0); - if (fd < 0) { - nm_log_err (LOGD_HW, "couldn't open control socket."); + g_warn_if_fail (iface != NULL); + nm_log_err (LOGD_HW, "(%s): failed to get interface link object", + iface ? iface : "unknown"); + g_free (iface); return FALSE; } - /* Get device's flags */ - memset (&ifr, 0, sizeof (ifr)); - strncpy (ifr.ifr_name, iface, IFNAMSIZ); - if (ioctl (fd, SIOCGIFFLAGS, &ifr) < 0) { - if (errno != ENODEV) { - nm_log_err (LOGD_HW, "(%s): could not get flags: errno %d", - iface, errno); - } - } else { - up = !!(ifr.ifr_flags & IFF_UP); - } - close (fd); + flags = rtnl_link_get_flags (l); + rtnl_link_put (l); - return up; + return flags & IFF_UP; } +/** + * nm_system_iface_set_mtu: + * @ifindex: interface index + * @mtu: the new MTU + * + * Returns: %TRUE if the request was successful, %FALSE if it failed + **/ gboolean -nm_system_device_set_mtu (const char *iface, guint32 mtu) +nm_system_iface_set_mtu (int ifindex, guint32 mtu) { struct rtnl_link *old; struct rtnl_link *new; gboolean success = FALSE; - struct nl_handle *nlh; - int iface_idx; + struct nl_sock *nlh; + int err; - g_return_val_if_fail (iface != NULL, FALSE); + g_return_val_if_fail (ifindex > 0, FALSE); g_return_val_if_fail (mtu > 0, FALSE); new = rtnl_link_alloc (); if (!new) return FALSE; - iface_idx = nm_netlink_iface_to_index (iface); - old = nm_netlink_index_to_rtnl_link (iface_idx); + old = nm_netlink_index_to_rtnl_link (ifindex); if (old) { rtnl_link_set_mtu (new, mtu); nlh = nm_netlink_get_default_handle (); if (nlh) { - rtnl_link_change (nlh, old, new, 0); - success = TRUE; + err = rtnl_link_change (nlh, old, new, 0); + if (err == 0) + success = TRUE; + else { + char *iface = nm_netlink_index_to_iface (ifindex); + + nm_log_warn (LOGD_HW, "(%s): failed to change interface MTU", + iface ? iface : "unknown"); + g_free (iface); + } } rtnl_link_put (old); } - rtnl_link_put (new); + return success; } +/** + * nm_system_iface_set_mac: + * @ifindex: interface index + * @mac: new MAC address + * + * Attempts to change the interface's MAC address to the requested value, + * ie MAC spoofing or cloning. + * + * Returns: %TRUE if the request succeeded, %FALSE if it failed. + **/ gboolean -nm_system_device_set_mac (const char *iface, const struct ether_addr *mac) +nm_system_iface_set_mac (int ifindex, const struct ether_addr *mac) { - struct rtnl_link *old; - struct rtnl_link *new; + struct rtnl_link *old, *new; gboolean success = FALSE; - struct nl_handle *nlh; - int iface_idx; + struct nl_sock *nlh; + char *iface; struct nl_addr *addr = NULL; + int err; - g_return_val_if_fail (iface != NULL, FALSE); + g_return_val_if_fail (ifindex > 0, FALSE); g_return_val_if_fail (mac != NULL, FALSE); new = rtnl_link_alloc (); if (!new) return FALSE; - iface_idx = nm_netlink_iface_to_index (iface); - old = nm_netlink_index_to_rtnl_link (iface_idx); + iface = nm_netlink_index_to_iface (ifindex); + if (!iface) + goto out; + + old = nm_netlink_index_to_rtnl_link (ifindex); if (old) { addr = nl_addr_build (AF_LLC, (void *) mac, ETH_ALEN); if (!addr) { - char *mac_str; - mac_str = g_strdup_printf ("%02X:%02X:%02X:%02X:%02X:%02X", mac->ether_addr_octet[0], mac->ether_addr_octet[1], mac->ether_addr_octet[2], - mac->ether_addr_octet[3], mac->ether_addr_octet[4], mac->ether_addr_octet[5]); - nm_log_err (LOGD_DEVICE, "(%s): could not allocate memory for MAC address (%s)", iface, mac_str); - g_free (mac_str); + nm_log_err (LOGD_HW, "(%s): failed to allocate memory for MAC address change", iface); + rtnl_link_put (old); + rtnl_link_put (new); return FALSE; } rtnl_link_set_addr (new, addr); + nl_addr_put (addr); nlh = nm_netlink_get_default_handle (); if (nlh) { - rtnl_link_change (nlh, old, new, 0); - success = TRUE; + err = rtnl_link_change (nlh, old, new, 0); + if (err == 0) + success = TRUE; + else + nm_log_warn (LOGD_HW, "(%s): failed to change interface MAC address", iface); } rtnl_link_put (old); } +out: rtnl_link_put (new); + g_free (iface); return success; } static struct rtnl_route * -add_ip4_route_to_gateway (const char *iface, guint32 gw, guint32 mss) +add_ip4_route_to_gateway (int ifindex, guint32 gw, guint32 mss) { - struct nl_handle *nlh; + struct nl_sock *nlh; struct rtnl_route *route = NULL; - struct nl_addr *gw_addr = NULL; - int iface_idx, err; + int err; nlh = nm_netlink_get_default_handle (); g_return_val_if_fail (nlh != NULL, NULL); - iface_idx = nm_netlink_iface_to_index (iface); - if (iface_idx < 0) - return NULL; - /* Gateway might be over a bridge; try adding a route to gateway first */ - route = rtnl_route_alloc (); - if (route == NULL) - return NULL; - - rtnl_route_set_family (route, AF_INET); - rtnl_route_set_table (route, RT_TABLE_MAIN); - rtnl_route_set_oif (route, iface_idx); - rtnl_route_set_scope (route, RT_SCOPE_LINK); - - gw_addr = nl_addr_build (AF_INET, &gw, sizeof (gw)); - if (!gw_addr) - goto error; - nl_addr_set_prefixlen (gw_addr, 32); - rtnl_route_set_dst (route, gw_addr); - nl_addr_put (gw_addr); - - if (mss) { - if (rtnl_route_set_metric (route, RTAX_ADVMSS, mss) < 0) - goto error; - } + route = nm_netlink_route_new (ifindex, AF_INET, mss, + NMNL_PROP_SCOPE, RT_SCOPE_LINK, + NMNL_PROP_TABLE, RT_TABLE_MAIN, + NULL); + g_return_val_if_fail (route != NULL, NULL); /* Add direct route to the gateway */ - err = rtnl_route_add (nlh, route, 0); + err = nm_netlink_route_add(route, AF_INET, &gw, 32, NULL, 0); if (err) { + char *iface = nm_netlink_index_to_iface (ifindex); + nm_log_err (LOGD_DEVICE | LOGD_IP4, "(%s): failed to add IPv4 route to gateway (%d)", - iface, err); + iface ? iface : "unknown", err); + g_free (iface); goto error; } @@ -881,64 +831,27 @@ error: } static int -replace_default_ip4_route (const char *iface, guint32 gw, guint32 mss) +replace_default_ip4_route (int ifindex, guint32 gw, guint32 mss) { struct rtnl_route *route = NULL; - struct nl_handle *nlh; - struct nl_addr *dst_addr = NULL; - guint32 dst = 0; - struct nl_addr *gw_addr = NULL; - int iface_idx, err = -1; + struct nl_sock *nlh; + int err = -1; + int dst=0; - g_return_val_if_fail (iface != NULL, -ENODEV); + g_return_val_if_fail (ifindex > 0, -ENODEV); nlh = nm_netlink_get_default_handle (); g_return_val_if_fail (nlh != NULL, -ENOMEM); - iface_idx = nm_netlink_iface_to_index (iface); - if (iface_idx < 0) - return -ENODEV; - - route = rtnl_route_alloc(); + route = nm_netlink_route_new (ifindex, AF_INET, mss, + NMNL_PROP_SCOPE, RT_SCOPE_UNIVERSE, + NMNL_PROP_TABLE, RT_TABLE_MAIN, + NULL); g_return_val_if_fail (route != NULL, -ENOMEM); - rtnl_route_set_family (route, AF_INET); - rtnl_route_set_table (route, RT_TABLE_MAIN); - rtnl_route_set_scope (route, RT_SCOPE_UNIVERSE); - rtnl_route_set_oif (route, iface_idx); - - /* Build up the destination address */ - dst_addr = nl_addr_build (AF_INET, &dst, sizeof (dst)); - if (!dst_addr) { - err = -ENOMEM; - goto out; - } - nl_addr_set_prefixlen (dst_addr, 0); - rtnl_route_set_dst (route, dst_addr); - - /* Build up the gateway address */ - gw_addr = nl_addr_build (AF_INET, &gw, sizeof (gw)); - if (!gw_addr) { - err = -ENOMEM; - goto out; - } - nl_addr_set_prefixlen (gw_addr, 0); - rtnl_route_set_gateway (route, gw_addr); - - if (mss > 0) { - err = rtnl_route_set_metric (route, RTAX_ADVMSS, mss); - if (err < 0) - goto out; - } - /* Add the new default route */ - err = rtnl_route_add (nlh, route, NLM_F_REPLACE); + err = nm_netlink_route_add (route, AF_INET, &dst, 0, &gw, NLM_F_REPLACE); -out: - if (dst_addr) - nl_addr_put (dst_addr); - if (gw_addr) - nl_addr_put (gw_addr); rtnl_route_put (route); return err; } @@ -950,47 +863,56 @@ out: * */ gboolean -nm_system_replace_default_ip4_route_vpn (const char *iface, +nm_system_replace_default_ip4_route_vpn (int ifindex, guint32 ext_gw, guint32 int_gw, guint32 mss, - const char *parent_iface, + int parent_ifindex, guint32 parent_mss) { struct rtnl_route *gw_route = NULL; - struct nl_handle *nlh; + struct nl_sock *nlh; gboolean success = FALSE; int err; + char *iface; nlh = nm_netlink_get_default_handle (); g_return_val_if_fail (nlh != NULL, FALSE); - err = replace_default_ip4_route (iface, int_gw, mss); - if (err == 0) { + err = replace_default_ip4_route (ifindex, int_gw, mss); + if (err == 0) return TRUE; - } else if (err != -ESRCH) { + + iface = nm_netlink_index_to_iface (ifindex); + if (!iface) + goto out; + + if ((err != -NLE_OBJ_NOTFOUND) && (err != -NLE_FAILURE)) { nm_log_err (LOGD_DEVICE | LOGD_IP4, "(%s): failed to set IPv4 default route: %d", iface, err); - return FALSE; + goto out; } /* Try adding a direct route to the gateway first */ - gw_route = add_ip4_route_to_gateway (parent_iface, ext_gw, parent_mss); + gw_route = add_ip4_route_to_gateway (parent_ifindex, ext_gw, parent_mss); if (!gw_route) - return FALSE; + goto out; /* Try adding the original route again */ - err = replace_default_ip4_route (iface, int_gw, mss); + err = replace_default_ip4_route (ifindex, int_gw, mss); if (err != 0) { - rtnl_route_del (nlh, gw_route, 0); + nm_netlink_route_delete (gw_route); nm_log_err (LOGD_DEVICE | LOGD_IP4, "(%s): failed to set IPv4 default route (pass #2): %d", iface, err); } else success = TRUE; - rtnl_route_put (gw_route); +out: + if (gw_route) + rtnl_route_put (gw_route); + g_free (iface); return success; } @@ -1001,132 +923,105 @@ nm_system_replace_default_ip4_route_vpn (const char *iface, * */ gboolean -nm_system_replace_default_ip4_route (const char *iface, guint32 gw, guint32 mss) +nm_system_replace_default_ip4_route (int ifindex, guint32 gw, guint32 mss) { struct rtnl_route *gw_route = NULL; - struct nl_handle *nlh; gboolean success = FALSE; + char *iface; int err; - nlh = nm_netlink_get_default_handle (); - g_return_val_if_fail (nlh != NULL, FALSE); - - err = replace_default_ip4_route (iface, gw, mss); - if (err == 0) { + err = replace_default_ip4_route (ifindex, gw, mss); + if (err == 0) return TRUE; - } else if (err != -ESRCH) { + + iface = nm_netlink_index_to_iface (ifindex); + if (!iface) + goto out; + + if (err != -NLE_OBJ_NOTFOUND) { nm_log_err (LOGD_DEVICE | LOGD_IP4, "(%s): failed to set IPv4 default route: %d", iface, err); - return FALSE; + goto out; } /* Try adding a direct route to the gateway first */ - gw_route = add_ip4_route_to_gateway (iface, gw, mss); + gw_route = add_ip4_route_to_gateway (ifindex, gw, mss); if (!gw_route) - return FALSE; + goto out; /* Try adding the original route again */ - err = replace_default_ip4_route (iface, gw, mss); + err = replace_default_ip4_route (ifindex, gw, mss); if (err != 0) { - rtnl_route_del (nlh, gw_route, 0); + nm_netlink_route_delete (gw_route); nm_log_err (LOGD_DEVICE | LOGD_IP4, "(%s): failed to set IPv4 default route (pass #2): %d", iface, err); } else success = TRUE; - rtnl_route_put (gw_route); +out: + if (gw_route) + rtnl_route_put (gw_route); + g_free (iface); return success; } static struct rtnl_route * -add_ip6_route_to_gateway (const char *iface, const struct in6_addr *gw) +add_ip6_route_to_gateway (int ifindex, const struct in6_addr *gw) { - struct nl_handle *nlh; + struct nl_sock *nlh; struct rtnl_route *route = NULL; - struct nl_addr *gw_addr = NULL; - int iface_idx, err; + int err; nlh = nm_netlink_get_default_handle (); g_return_val_if_fail (nlh != NULL, NULL); - iface_idx = nm_netlink_iface_to_index (iface); - if (iface_idx < 0) - return NULL; - /* Gateway might be over a bridge; try adding a route to gateway first */ - route = rtnl_route_alloc (); - if (route == NULL) - return NULL; - - rtnl_route_set_family (route, AF_INET6); - rtnl_route_set_table (route, RT_TABLE_MAIN); - rtnl_route_set_oif (route, iface_idx); - rtnl_route_set_scope (route, RT_SCOPE_LINK); - - gw_addr = nl_addr_build (AF_INET, (void *) gw, sizeof (*gw)); - if (!gw_addr) - goto error; - nl_addr_set_prefixlen (gw_addr, 128); - rtnl_route_set_dst (route, gw_addr); - nl_addr_put (gw_addr); + route = nm_netlink_route_new (ifindex, AF_INET6, 0, + NMNL_PROP_SCOPE, RT_SCOPE_LINK, + NMNL_PROP_TABLE, RT_TABLE_MAIN, + NULL); + g_return_val_if_fail (route != NULL, NULL); /* Add direct route to the gateway */ - err = rtnl_route_add (nlh, route, 0); + err = nm_netlink_route_add(route, AF_INET, gw, 128, NULL, 0); if (err) { + char *iface = nm_netlink_index_to_iface (ifindex); + nm_log_err (LOGD_DEVICE | LOGD_IP6, - "(%s): failed to add IPv4 route to gateway (%d)", - iface, err); - goto error; + "(%s): failed to add IPv6 route to gateway (%d)", + iface ? iface : "unknown", err); + g_free (iface); + + rtnl_route_put (route); + route = NULL; } return route; - -error: - rtnl_route_put (route); - return NULL; } static int -replace_default_ip6_route (const char *iface, const struct in6_addr *gw) +replace_default_ip6_route (int ifindex, const struct in6_addr *gw) { struct rtnl_route *route = NULL; - struct nl_handle *nlh; - struct nl_addr *gw_addr = NULL; - int iface_idx, err = -1; + struct nl_sock *nlh; + int err = -1; - g_return_val_if_fail (iface != NULL, -ENODEV); + g_return_val_if_fail (ifindex > 0, FALSE); nlh = nm_netlink_get_default_handle (); g_return_val_if_fail (nlh != NULL, -ENOMEM); - iface_idx = nm_netlink_iface_to_index (iface); - if (iface_idx < 0) - return -ENODEV; - - route = rtnl_route_alloc(); + route = nm_netlink_route_new (ifindex, AF_INET6, 0, + NMNL_PROP_SCOPE, RT_SCOPE_UNIVERSE, + NMNL_PROP_TABLE, RT_TABLE_MAIN, + NULL); g_return_val_if_fail (route != NULL, -ENOMEM); - rtnl_route_set_family (route, AF_INET6); - rtnl_route_set_table (route, RT_TABLE_MAIN); - rtnl_route_set_scope (route, RT_SCOPE_UNIVERSE); - rtnl_route_set_oif (route, iface_idx); - - if (gw && !IN6_IS_ADDR_UNSPECIFIED (gw)) { - /* Build up the gateway address */ - gw_addr = nl_addr_build (AF_INET6, (void *) gw, sizeof (*gw)); - if (!gw_addr) { - err = -ENOMEM; - goto out; - } - nl_addr_set_prefixlen (gw_addr, -1); - rtnl_route_set_gateway (route, gw_addr); - } - /* Add the new default route */ - err = rtnl_route_add (nlh, route, NLM_F_REPLACE); - if (err == -EEXIST) { + nm_netlink_route_add(route, AF_INET6, NULL, 0, gw, NLM_F_REPLACE); + if (err == -NLE_EXIST) { /* FIXME: even though we use NLM_F_REPLACE the kernel won't replace * the route if it's the same. Should try to remove it first, then * add the new one again here. @@ -1134,9 +1029,6 @@ replace_default_ip6_route (const char *iface, const struct in6_addr *gw) err = 0; } -out: - if (gw_addr) - nl_addr_put (gw_addr); rtnl_route_put (route); return err; } @@ -1148,208 +1040,99 @@ out: * */ gboolean -nm_system_replace_default_ip6_route (const char *iface, const struct in6_addr *gw) +nm_system_replace_default_ip6_route (int ifindex, const struct in6_addr *gw) { struct rtnl_route *gw_route = NULL; - struct nl_handle *nlh; gboolean success = FALSE; + char *iface; int err; - nlh = nm_netlink_get_default_handle (); - g_return_val_if_fail (nlh != NULL, FALSE); - - err = replace_default_ip6_route (iface, gw); - if (err == 0) { + err = replace_default_ip6_route (ifindex, gw); + if (err == 0) return TRUE; - } else if (err != -ESRCH) { + + iface = nm_netlink_index_to_iface (ifindex); + if (!iface) + goto out; + + if (err != -NLE_OBJ_NOTFOUND) { nm_log_err (LOGD_DEVICE | LOGD_IP6, "(%s): failed to set IPv6 default route: %d", iface, err); - return FALSE; + goto out; } /* Try adding a direct route to the gateway first */ - gw_route = add_ip6_route_to_gateway (iface, gw); + gw_route = add_ip6_route_to_gateway (ifindex, gw); if (!gw_route) - return FALSE; + goto out; /* Try adding the original route again */ - err = replace_default_ip6_route (iface, gw); + err = replace_default_ip6_route (ifindex, gw); if (err != 0) { - rtnl_route_del (nlh, gw_route, 0); + nm_netlink_route_delete (gw_route); nm_log_err (LOGD_DEVICE | LOGD_IP6, "(%s): failed to set IPv6 default route (pass #2): %d", iface, err); } else success = TRUE; - rtnl_route_put (gw_route); +out: + if (gw_route) + rtnl_route_put (gw_route); + g_free (iface); return success; } -static void flush_addresses (const char *iface, int family) -{ - int iface_idx; - - g_return_if_fail (iface != NULL); - iface_idx = nm_netlink_iface_to_index (iface); - if (iface_idx >= 0) - sync_addresses (iface, iface_idx, family, NULL, 0); -} - -/* - * nm_system_device_flush_addresses - * - * Flush all network addresses associated with a network device - * - */ -void nm_system_device_flush_addresses (NMDevice *dev, int family) -{ - g_return_if_fail (dev != NULL); - - flush_addresses (nm_device_get_ip_iface (dev), family); -} - - /* - * nm_system_device_flush_addresses_with_iface + * nm_system_iface_flush_addresses * * Flush all network addresses associated with a network device * */ -void nm_system_device_flush_addresses_with_iface (const char *iface) -{ - flush_addresses (iface, AF_UNSPEC); -} - - -static void -foreach_route (void (*callback)(struct nl_object *, gpointer), - gpointer user_data) -{ - struct nl_handle *nlh; - struct nl_cache *route_cache; - - nlh = nm_netlink_get_default_handle (); - route_cache = rtnl_route_alloc_cache (nlh); - g_assert (route_cache); - nl_cache_foreach (route_cache, callback, user_data); - nl_cache_free (route_cache); -} - -static void -dump_route (struct rtnl_route *route) +gboolean +nm_system_iface_flush_addresses (int ifindex, int family) { - char buf6[INET6_ADDRSTRLEN]; - char buf4[INET_ADDRSTRLEN]; - struct nl_addr *nl; - struct in6_addr *addr6 = NULL; - struct in_addr *addr4 = NULL; - int prefixlen = 0; - const char *sf = "UNSPEC"; - int family = rtnl_route_get_family (route); - - memset (buf6, 0, sizeof (buf6)); - memset (buf4, 0, sizeof (buf4)); - nl = rtnl_route_get_dst (route); - if (nl) { - if (nl_addr_get_family (nl) == AF_INET) { - addr4 = nl_addr_get_binary_addr (nl); - if (addr4) - inet_ntop (AF_INET, addr4, &buf4[0], sizeof (buf4)); - } else if (nl_addr_get_family (nl) == AF_INET6) { - addr6 = nl_addr_get_binary_addr (nl); - if (addr6) - inet_ntop (AF_INET6, addr6, &buf6[0], sizeof (buf6)); - } - prefixlen = nl_addr_get_prefixlen (nl); - } - - if (family == AF_INET) - sf = "INET"; - else if (family == AF_INET6) - sf = "INET6"; - - nm_log_dbg (LOGD_IP4 | LOGD_IP6, " route idx %d family %s (%d) addr %s/%d", - rtnl_route_get_oif (route), - sf, family, - strlen (buf4) ? buf4 : (strlen (buf6) ? buf6 : ""), - prefixlen); + g_return_val_if_fail (ifindex > 0, FALSE); + return sync_addresses (ifindex, family, NULL, 0); } -typedef struct { - const char *iface; - int iface_idx; - int family; -} RouteCheckData; -static void -check_one_route (struct nl_object *object, void *user_data) +static struct rtnl_route * +delete_one_route (struct rtnl_route *route, + struct nl_addr *dst, + const char *iface, + gpointer user_data) { - RouteCheckData *data = (RouteCheckData *) user_data; - struct rtnl_route *route = (struct rtnl_route *) object; - int err; - guint32 log_level = LOGD_IP4 | LOGD_IP6; - - if (nm_logging_level_enabled (LOGL_DEBUG)) - dump_route (route); - - /* Delete all routes from this interface */ - if (rtnl_route_get_oif (route) != data->iface_idx) - return; - if (data->family && rtnl_route_get_family (route) != data->family) - return; - - /* We don't want to flush IPv6 link-local routes that may exist on the - * the interface since the LL address and routes should normally stay - * assigned all the time. - */ - if ( (data->family == AF_INET6 || data->family == AF_UNSPEC) - && (rtnl_route_get_family (route) == AF_INET6)) { - struct nl_addr *nl; - struct in6_addr *addr = NULL; - - nl = rtnl_route_get_dst (route); - if (nl) - addr = nl_addr_get_binary_addr (nl); - - if (addr) { - if ( IN6_IS_ADDR_LINKLOCAL (addr) - || IN6_IS_ADDR_MC_LINKLOCAL (addr) - || (IN6_IS_ADDR_MULTICAST (addr) && (nl_addr_get_prefixlen (nl) == 8))) - return; - } - } + guint32 log_level = GPOINTER_TO_UINT (user_data); - if (data->family == AF_INET) - log_level = LOGD_IP4; - else if (data->family == AF_INET6) - log_level = LOGD_IP6; nm_log_dbg (log_level, " deleting route"); + if (!nm_netlink_route_delete (route)) + nm_log_err (LOGD_DEVICE, "(%s): failed to delete route", iface); - err = rtnl_route_del (nm_netlink_get_default_handle (), route, 0); - if (err < 0 && (err != -ERANGE)) { - nm_log_err (LOGD_DEVICE, - "(%s): error %d returned from rtnl_route_del(): %s", - data->iface, err, nl_geterror ()); - } + return NULL; } -static void flush_routes (int ifindex, const char *iface, int family) +/** + * nm_system_iface_flush_routes: + * @ifindex: interface index + * @family: address family, i.e. AF_INET, AF_INET6, or AF_UNSPEC + * + * Flush all network addresses associated with a network device. + * + * Returns: %TRUE on success, %FALSE on failure + **/ +gboolean +nm_system_iface_flush_routes (int ifindex, int family) { - RouteCheckData check_data; guint32 log_level = LOGD_IP4 | LOGD_IP6; const char *sf = "UNSPEC"; + char *iface; - g_return_if_fail (iface != NULL); + g_return_val_if_fail (ifindex > 0, FALSE); - if (ifindex < 0) { - ifindex = nm_netlink_iface_to_index (iface); - if (ifindex < 0) { - nm_log_dbg (LOGD_DEVICE, "(%s) failed to lookup interface index", iface); - return; - } - } + iface = nm_netlink_index_to_iface (ifindex); + g_return_val_if_fail (iface != NULL, FALSE); if (family == AF_INET) { log_level = LOGD_IP4; @@ -1361,104 +1144,61 @@ static void flush_routes (int ifindex, const char *iface, int family) nm_log_dbg (log_level, "(%s): flushing routes ifindex %d family %s (%d)", iface, ifindex, sf, family); - memset (&check_data, 0, sizeof (check_data)); - check_data.iface = iface; - check_data.iface_idx = ifindex; - check_data.family = family; - foreach_route (check_one_route, &check_data); -} - -/* - * nm_system_device_flush_routes - * - * Flush all network addresses associated with a network device - * - */ -void nm_system_device_flush_routes (NMDevice *dev, int family) -{ - g_return_if_fail (dev != NULL); - - flush_routes (nm_device_get_ip_ifindex (dev), - nm_device_get_ip_iface (dev), - family); -} + /* We don't want to flush IPv6 link-local routes that may exist on the + * the interface since the LL address and routes should normally stay + * assigned all the time. + */ + nm_netlink_foreach_route (ifindex, family, RT_SCOPE_UNIVERSE, TRUE, delete_one_route, GUINT_TO_POINTER (log_level)); -/* - * nm_system_device_flush_routes_with_iface - * - * Flush all routes associated with a network device. 'family' is an - * address family, either AF_INET, AF_INET6, or AF_UNSPEC. - * - */ -void nm_system_device_flush_routes_with_iface (const char *iface, int family) -{ - flush_routes (-1, iface, family); + g_free (iface); + return TRUE; } -typedef struct { - struct rtnl_route *route; - NMIP4Config *config; - int iface; -} SetPriorityInfo; - -static void -find_route (struct nl_object *object, gpointer user_data) +static struct rtnl_route * +find_route (struct rtnl_route *route, + struct nl_addr *dst, + const char *iface, + gpointer user_data) { - struct rtnl_route *route = (struct rtnl_route *) object; - SetPriorityInfo *info = (SetPriorityInfo *) user_data; - struct nl_addr *dst; + NMIP4Config *config = user_data; struct in_addr *dst_addr; int num; int i; - if (info->route || - rtnl_route_get_oif (route) != info->iface || - rtnl_route_get_scope (route) != RT_SCOPE_LINK) - return; - - dst = rtnl_route_get_dst (route); - if (nl_addr_get_family (dst) != AF_INET) - return; + if (dst && (nl_addr_get_family (dst) != AF_INET)) + return NULL; + /* Find the first route that handles a subnet of at least one of the + * device's IPv4 addresses. + */ dst_addr = nl_addr_get_binary_addr (dst); - num = nm_ip4_config_get_num_addresses (info->config); + num = nm_ip4_config_get_num_addresses (config); for (i = 0; i < num; i++) { - NMIP4Address *addr = nm_ip4_config_get_address (info->config, i); + NMIP4Address *addr = nm_ip4_config_get_address (config, i); guint32 prefix = nm_ip4_address_get_prefix (addr); guint32 address = nm_ip4_address_get_address (addr); - if (prefix == nl_addr_get_prefixlen (dst) && - (address & nm_utils_ip4_prefix_to_netmask (prefix)) == dst_addr->s_addr) { - - /* Ref the route so it sticks around after the cache is cleared */ - rtnl_route_get (route); - info->route = route; - break; - } + if ( prefix == nl_addr_get_prefixlen (dst) + && (address & nm_utils_ip4_prefix_to_netmask (prefix)) == dst_addr->s_addr) + return route; } + return NULL; } static void -nm_system_device_set_priority (const char *iface, - NMIP4Config *config, - int priority) +nm_system_device_set_priority (int ifindex, + NMIP4Config *config, + int priority) { - SetPriorityInfo info; - - info.route = NULL; - info.config = config; - info.iface = nm_netlink_iface_to_index (iface); - g_return_if_fail (info.iface >= 0); - - foreach_route (find_route, &info); - if (info.route) { - struct nl_handle *nlh; + struct nl_sock *nlh; + struct rtnl_route *found; + found = nm_netlink_foreach_route (ifindex, AF_INET, RT_SCOPE_LINK, FALSE, find_route, config); + if (found) { nlh = nm_netlink_get_default_handle (); - rtnl_route_del (nlh, info.route, 0); - - rtnl_route_set_prio (info.route, priority); - rtnl_route_add (nlh, info.route, 0); - rtnl_route_put (info.route); + nm_netlink_route_delete (found); + rtnl_route_set_priority (found, priority); + rtnl_route_add (nlh, found, 0); + rtnl_route_put (found); } } diff --git a/src/nm-system.h b/src/nm-system.h index 094f40ef..ae4e7d91 100644 --- a/src/nm-system.h +++ b/src/nm-system.h @@ -35,33 +35,31 @@ * implemented in the backend files in backends/ directory */ -void nm_system_device_flush_routes (NMDevice *dev, int family); -void nm_system_device_flush_routes_with_iface (const char *iface, int family); +gboolean nm_system_iface_flush_routes (int ifindex, int family); -gboolean nm_system_replace_default_ip4_route (const char *iface, +gboolean nm_system_replace_default_ip4_route (int ifindex, guint32 gw, guint32 mss); -gboolean nm_system_replace_default_ip6_route (const char *iface, +gboolean nm_system_replace_default_ip6_route (int ifindex, const struct in6_addr *gw); -gboolean nm_system_replace_default_ip4_route_vpn (const char *iface, +gboolean nm_system_replace_default_ip4_route_vpn (int ifindex, guint32 ext_gw, guint32 int_gw, guint32 mss, - const char *parent_iface, + int parent_ifindex, guint32 parent_mss); struct rtnl_route *nm_system_add_ip4_vpn_gateway_route (NMDevice *parent_device, NMIP4Config *vpn_config); -void nm_system_device_flush_addresses (NMDevice *dev, int family); -void nm_system_device_flush_addresses_with_iface (const char *iface); +gboolean nm_system_iface_flush_addresses (int ifindex, int family); void nm_system_enable_loopback (void); void nm_system_update_dns (void); -gboolean nm_system_apply_ip4_config (const char *iface, +gboolean nm_system_apply_ip4_config (int ifindex, NMIP4Config *config, int priority, NMIP4ConfigCompareFlags flags); @@ -76,22 +74,19 @@ int nm_system_set_ip6_route (int ifindex, int table, struct rtnl_route **out_route); -gboolean nm_system_apply_ip6_config (const char *iface, +gboolean nm_system_apply_ip6_config (int ifindex, NMIP6Config *config, int priority, NMIP6ConfigCompareFlags flags); -gboolean nm_system_device_set_up_down (NMDevice *dev, - gboolean up, - gboolean *no_firmware); -gboolean nm_system_device_set_up_down_with_iface (const char *iface, - gboolean up, - gboolean *no_firmware); +gboolean nm_system_iface_set_up (int ifindex, + gboolean up, + gboolean *no_firmware); -gboolean nm_system_device_is_up (NMDevice *device); -gboolean nm_system_device_is_up_with_iface (const char *iface); +gboolean nm_system_iface_is_up (int ifindex); -gboolean nm_system_device_set_mtu (const char *iface, guint32 mtu); -gboolean nm_system_device_set_mac (const char *iface, const struct ether_addr *mac); +gboolean nm_system_iface_set_mtu (int ifindex, guint32 mtu); + +gboolean nm_system_iface_set_mac (int ifindex, const struct ether_addr *mac); #endif diff --git a/src/nm-udev-manager.c b/src/nm-udev-manager.c index 72501c28..e8c6b822 100644 --- a/src/nm-udev-manager.c +++ b/src/nm-udev-manager.c @@ -195,78 +195,50 @@ recheck_killswitches (NMUdevManager *self) NMUdevManagerPrivate *priv = NM_UDEV_MANAGER_GET_PRIVATE (self); GSList *iter; RfKillState poll_states[RFKILL_TYPE_MAX]; + RfKillState platform_states[RFKILL_TYPE_MAX]; gboolean platform_checked[RFKILL_TYPE_MAX]; int i; /* Default state is unblocked */ for (i = 0; i < RFKILL_TYPE_MAX; i++) { poll_states[i] = RFKILL_UNBLOCKED; + platform_states[i] = RFKILL_UNBLOCKED; platform_checked[i] = FALSE; } - /* Perform two passes here; the first pass is for non-platform switches, - * which typically if hardkilled cannot be changed except by a physical - * hardware switch. The second pass checks platform killswitches, which - * take precedence over device killswitches, because typically platform - * killswitches control device killswitches. That is, a hardblocked device - * switch can often be unblocked by a platform switch. Thus if we have - * a hardblocked device switch and a softblocked platform switch, the - * combined state should be softblocked since the platform switch can be - * unblocked to change the device switch. - */ - - /* Device switches first */ + /* Poll the states of all killswitches */ for (iter = priv->killswitches; iter; iter = g_slist_next (iter)) { Killswitch *ks = iter->data; GUdevDevice *device; RfKillState dev_state; int sysfs_state; - if (ks->platform == FALSE) { - device = g_udev_client_query_by_subsystem_and_name (priv->client, "rfkill", ks->name); - if (device) { - sysfs_state = g_udev_device_get_property_as_int (device, "RFKILL_STATE"); - dev_state = sysfs_state_to_nm_state (sysfs_state); + device = g_udev_client_query_by_subsystem_and_name (priv->client, "rfkill", ks->name); + if (device) { + sysfs_state = g_udev_device_get_property_as_int (device, "RFKILL_STATE"); + dev_state = sysfs_state_to_nm_state (sysfs_state); + if (ks->platform == FALSE) { if (dev_state > poll_states[ks->rtype]) poll_states[ks->rtype] = dev_state; - g_object_unref (device); - } - } - } - - /* Platform switches next; their state overwrites device state */ - for (iter = priv->killswitches; iter; iter = g_slist_next (iter)) { - Killswitch *ks = iter->data; - GUdevDevice *device; - RfKillState dev_state; - int sysfs_state; - - if (ks->platform == TRUE) { - device = g_udev_client_query_by_subsystem_and_name (priv->client, "rfkill", ks->name); - if (device) { - sysfs_state = g_udev_device_get_property_as_int (device, "RFKILL_STATE"); - dev_state = sysfs_state_to_nm_state (sysfs_state); - - if (platform_checked[ks->rtype] == FALSE) { - /* Overwrite device state with platform state for first - * platform switch found. - */ - poll_states[ks->rtype] = dev_state; - platform_checked[ks->rtype] = TRUE; - } else { - /* If there are multiple platform switches of the same type, - * take the "worst" state for all of that type. - */ - if (dev_state > poll_states[ks->rtype]) - poll_states[ks->rtype] = dev_state; - } - g_object_unref (device); + } else { + platform_checked[ks->rtype] = TRUE; + if (dev_state > platform_states[ks->rtype]) + platform_states[ks->rtype] = dev_state; } + g_object_unref (device); } } /* Log and emit change signal for final rfkill states */ for (i = 0; i < RFKILL_TYPE_MAX; i++) { + if (platform_checked[i] == TRUE) { + /* blocked platform switch state overrides device state, otherwise + * let the device state stand. (bgo #655773) + */ + if (platform_states[i] != RFKILL_UNBLOCKED) + poll_states[i] = platform_states[i]; + } + if (poll_states[i] != priv->rfkill_states[i]) { nm_log_dbg (LOGD_RFKILL, "%s rfkill state now '%s'", rfkill_type_to_desc (i), @@ -515,7 +487,7 @@ net_add (NMUdevManager *self, GUdevDevice *device) * FIXME: use something other than interface name to detect CTC here. */ if ((etype != 1) && (is_ctc == FALSE)) { - nm_log_dbg (LOGD_HW, "ignoring interface with type %d", etype); + nm_log_dbg (LOGD_HW, "(%s): ignoring interface with type %d", iface, etype); return; } @@ -528,7 +500,7 @@ net_add (NMUdevManager *self, GUdevDevice *device) */ tmp = g_udev_device_get_property (device, "DEVTYPE"); if (g_strcmp0 (tmp, "wwan") == 0) { - nm_log_dbg (LOGD_HW, "ignoring interface with devtype '%s'", tmp); + nm_log_dbg (LOGD_HW, "(%s): ignoring interface with devtype '%s'", iface, tmp); return; } @@ -539,7 +511,7 @@ net_add (NMUdevManager *self, GUdevDevice *device) if (g_strcmp0 (tmp, "0421") == 0) { /* Nokia vendor ID */ tmp = g_udev_device_get_property (device, "ID_MODEL"); if (tmp && (strstr (tmp, "PC-Suite") || strstr (tmp, "PC Suite"))) { - nm_log_dbg (LOGD_HW, "ignoring Nokia PC-Suite ethernet interface"); + nm_log_dbg (LOGD_HW, "(%s): ignoring Nokia PC-Suite ethernet interface", iface); return; } } diff --git a/src/nm-wifi-ap.c b/src/nm-wifi-ap.c index f9c66473..be836df0 100644 --- a/src/nm-wifi-ap.c +++ b/src/nm-wifi-ap.c @@ -15,7 +15,7 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * - * Copyright (C) 2004 - 2010 Red Hat, Inc. + * Copyright (C) 2004 - 2011 Red Hat, Inc. * Copyright (C) 2006 - 2008 Novell, Inc. */ @@ -33,6 +33,7 @@ #include "wpa.h" #include "nm-properties-changed-signal.h" #include "nm-setting-wireless.h" +#include "nm-glib-compat.h" #include "nm-access-point-glue.h" @@ -59,10 +60,6 @@ typedef struct gboolean fake; /* Whether or not the AP is from a scan */ gboolean broadcast; /* Whether or not the AP is broadcasting (hidden) */ glong last_seen; /* Last time the AP was seen in a scan in seconds */ - - /* Things from user prefs/NetworkManagerInfo */ - GTimeVal timestamp; - GSList * user_addresses; } NMAccessPointPrivate; #define NM_AP_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_AP, NMAccessPointPrivate)) @@ -112,8 +109,6 @@ finalize (GObject *object) g_free (priv->dbus_path); if (priv->ssid) g_byte_array_free (priv->ssid, TRUE); - g_slist_foreach (priv->user_addresses, (GFunc)g_free, NULL); - g_slist_free (priv->user_addresses); G_OBJECT_CLASS (nm_ap_parent_class)->finalize (object); } @@ -147,7 +142,7 @@ set_property (GObject *object, guint prop_id, nm_ap_set_max_bitrate (ap, g_value_get_uint (value)); break; case PROP_STRENGTH: - nm_ap_set_strength (ap, g_value_get_char (value)); + nm_ap_set_strength (ap, g_value_get_schar (value)); break; case PROP_HW_ADDRESS: break; @@ -197,7 +192,7 @@ get_property (GObject *object, guint prop_id, g_value_set_uint (value, priv->max_bitrate); break; case PROP_STRENGTH: - g_value_set_char (value, priv->strength); + g_value_set_schar (value, priv->strength); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -757,8 +752,7 @@ error: #define MAC_ARG(x) ((guint8*)(x))[0],((guint8*)(x))[1],((guint8*)(x))[2],((guint8*)(x))[3],((guint8*)(x))[4],((guint8*)(x))[5] void -nm_ap_print_self (NMAccessPoint *ap, - const char * prefix) +nm_ap_dump (NMAccessPoint *ap, const char *prefix) { NMAccessPointPrivate *priv; @@ -773,7 +767,6 @@ nm_ap_print_self (NMAccessPoint *ap, ap); nm_log_dbg (LOGD_WIFI_SCAN, " BSSID " MAC_FMT, MAC_ARG (priv->address.ether_addr_octet)); nm_log_dbg (LOGD_WIFI_SCAN, " mode %d", priv->mode); - nm_log_dbg (LOGD_WIFI_SCAN, " timestamp %ld", priv->timestamp.tv_sec); nm_log_dbg (LOGD_WIFI_SCAN, " flags 0x%X", priv->flags); nm_log_dbg (LOGD_WIFI_SCAN, " wpa flags 0x%X", priv->wpa_flags); nm_log_dbg (LOGD_WIFI_SCAN, " rsn flags 0x%X", priv->rsn_flags); @@ -791,37 +784,6 @@ nm_ap_get_dbus_path (NMAccessPoint *ap) return NM_AP_GET_PRIVATE (ap)->dbus_path; } - -/* - * Get/set functions for timestamp - * - */ -const GTimeVal *nm_ap_get_timestamp (const NMAccessPoint *ap) -{ - g_return_val_if_fail (NM_IS_AP (ap), 0); - - return (&NM_AP_GET_PRIVATE (ap)->timestamp); -} - -void nm_ap_set_timestamp (NMAccessPoint *ap, glong sec, glong usec) -{ - NMAccessPointPrivate *priv; - - g_return_if_fail (NM_IS_AP (ap)); - - priv = NM_AP_GET_PRIVATE (ap); - - priv->timestamp.tv_sec = sec; - priv->timestamp.tv_usec = usec; -} - -void nm_ap_set_timestamp_via_timestamp (NMAccessPoint *ap, const GTimeVal *timestamp) -{ - g_return_if_fail (NM_IS_AP (ap)); - - NM_AP_GET_PRIVATE (ap)->timestamp = *timestamp; -} - /* * Get/set functions for ssid * @@ -1151,57 +1113,6 @@ void nm_ap_set_last_seen (NMAccessPoint *ap, const glong last_seen) NM_AP_GET_PRIVATE (ap)->last_seen = last_seen; } - -/* - * Get/Set functions for user address list - * - * The internal address list is always "owned" by the AP and - * the list returned by nm_ap_get_user_addresses() is a deep copy. - * Likewise, when setting the list, a deep copy is made for the - * ap's actual list. - * - */ -GSList *nm_ap_get_user_addresses (const NMAccessPoint *ap) -{ - GSList *new = NULL; - GSList *elt = NULL; - - g_return_val_if_fail (NM_IS_AP (ap), NULL); - - for (elt = NM_AP_GET_PRIVATE (ap)->user_addresses; elt; elt = g_slist_next (elt)) - { - if (elt->data) - new = g_slist_append (new, g_strdup (elt->data)); - } - - /* Return a _deep__copy_ of the address list */ - return new; -} - -void nm_ap_set_user_addresses (NMAccessPoint *ap, GSList *list) -{ - NMAccessPointPrivate *priv; - GSList *elt = NULL; - GSList *new = NULL; - - g_return_if_fail (NM_IS_AP (ap)); - - priv = NM_AP_GET_PRIVATE (ap); - - /* Free existing list */ - g_slist_foreach (priv->user_addresses, (GFunc) g_free, NULL); - - /* Copy new list and set as our own */ - for (elt = list; elt; elt = g_slist_next (elt)) - { - if (elt->data) - new = g_slist_append (new, g_ascii_strup (elt->data, -1)); - } - - priv->user_addresses = new; -} - - gboolean nm_ap_check_compatible (NMAccessPoint *self, NMConnection *connection) diff --git a/src/nm-wifi-ap.h b/src/nm-wifi-ap.h index 95514ba6..31100d34 100644 --- a/src/nm-wifi-ap.h +++ b/src/nm-wifi-ap.h @@ -24,7 +24,6 @@ #include #include -#include #include "NetworkManager.h" #include "nm-connection.h" @@ -64,9 +63,6 @@ NMAccessPoint * nm_ap_new_fake_from_connection (NMConnection *connection); void nm_ap_export_to_dbus (NMAccessPoint *ap); const char * nm_ap_get_dbus_path (NMAccessPoint *ap); -const GTimeVal * nm_ap_get_timestamp (const NMAccessPoint *ap); -void nm_ap_set_timestamp (NMAccessPoint *ap, glong sec, glong usec); -void nm_ap_set_timestamp_via_timestamp (NMAccessPoint *ap, const GTimeVal *timestamp); const GByteArray * nm_ap_get_ssid (const NMAccessPoint * ap); void nm_ap_set_ssid (NMAccessPoint * ap, const GByteArray * ssid); @@ -104,9 +100,6 @@ void nm_ap_set_broadcast (NMAccessPoint *ap, gboolean broadcast); glong nm_ap_get_last_seen (const NMAccessPoint *ap); void nm_ap_set_last_seen (NMAccessPoint *ap, const glong last_seen); -GSList * nm_ap_get_user_addresses (const NMAccessPoint *ap); -void nm_ap_set_user_addresses (NMAccessPoint *ap, GSList *list); - gboolean nm_ap_check_compatible (NMAccessPoint *self, NMConnection *connection); @@ -119,6 +112,6 @@ NMAccessPoint * nm_ap_match_in_list (NMAccessPoint *find_ap, GSList *ap_list, gboolean strict_match); -void nm_ap_print_self (NMAccessPoint *ap, const char * prefix); +void nm_ap_dump (NMAccessPoint *ap, const char *prefix); #endif /* NM_ACCESS_POINT_H */ diff --git a/src/ppp-manager/Makefile.in b/src/ppp-manager/Makefile.in index 13c60b41..6971408f 100644 --- a/src/ppp-manager/Makefile.in +++ b/src/ppp-manager/Makefile.in @@ -222,8 +222,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/src/ppp-manager/nm-ppp-manager.c b/src/ppp-manager/nm-ppp-manager.c index e863aaba..3546f8d7 100644 --- a/src/ppp-manager/nm-ppp-manager.c +++ b/src/ppp-manager/nm-ppp-manager.c @@ -32,7 +32,7 @@ #include #include #include -#include +#include #include #include @@ -875,6 +875,8 @@ create_pppd_cmd_line (NMPPPManager *self, nm_cmd_line_add_string (cmd, "refuse-mschap-v2"); if (nm_setting_ppp_get_nobsdcomp (setting)) nm_cmd_line_add_string (cmd, "nobsdcomp"); + if (nm_setting_ppp_get_no_vj_comp (setting)) + nm_cmd_line_add_string (cmd, "novj"); if (nm_setting_ppp_get_nodeflate (setting)) nm_cmd_line_add_string (cmd, "nodeflate"); if (nm_setting_ppp_get_require_mppe (setting)) diff --git a/src/settings/Makefile.in b/src/settings/Makefile.in index 980f35cb..09da869d 100644 --- a/src/settings/Makefile.in +++ b/src/settings/Makefile.in @@ -248,8 +248,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/src/settings/nm-settings-connection.c b/src/settings/nm-settings-connection.c index 4b3a56cd..cdad8325 100644 --- a/src/settings/nm-settings-connection.c +++ b/src/settings/nm-settings-connection.c @@ -84,15 +84,27 @@ typedef struct { NMDBusManager *dbus_mgr; NMAgentManager *agent_mgr; + NMSessionMonitor *session_monitor; + guint session_changed_id; GSList *pending_auths; /* List of pending authentication requests */ - NMConnection *secrets; gboolean visible; /* Is this connection is visible by some session? */ - GSList *reqs; /* in-progress secrets requests */ - NMSessionMonitor *session_monitor; - guint session_changed_id; + /* Caches secrets from on-disk connections; were they not cached any + * call to nm_connection_clear_secrets() wipes them out and we'd have + * to re-read them from disk which defeats the purpose of having the + * connection in-memory at all. + */ + NMConnection *system_secrets; + + /* Caches secrets from agents during the activation process; if new system + * secrets are returned from an agent, they get written out to disk, + * triggering a re-read of the connection, which reads only system + * secrets, and would wipe out any agent-owned or not-saved secrets the + * agent also returned. + */ + NMConnection *agent_secrets; guint64 timestamp; /* Up-to-date timestamp of connection use */ GHashTable *seen_bssids; /* Up-to-date BSSIDs that's been seen for the connection */ @@ -294,57 +306,67 @@ nm_settings_connection_check_permission (NMSettingsConnection *self, /**************************************************************/ -static void -only_system_secrets_cb (NMSetting *setting, - const char *key, - const GValue *value, - GParamFlags flags, - gpointer user_data) +static gboolean +secrets_filter_cb (NMSetting *setting, + const char *secret, + NMSettingSecretFlags 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); - /* VPNs are special; need to handle each secret separately */ - if (NM_IS_SETTING_VPN (setting) && !strcmp (key, NM_SETTING_VPN_SECRETS)) { - GHashTableIter iter; - const char *secret_name = NULL; + /* Returns TRUE to remove the secret */ - g_hash_table_iter_init (&iter, (GHashTable *) g_value_get_boxed (value)); - 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_NONE) - 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_NONE) - g_object_set (G_OBJECT (setting), key, NULL, NULL); - } - } + /* Can't use bitops with SECRET_FLAG_NONE so handle that specifically */ + if ( (flags == NM_SETTING_SECRET_FLAG_NONE) + && (filter_flags == NM_SETTING_SECRET_FLAG_NONE)) + return FALSE; + + /* Otherwise if the secret has at least one of the desired flags keep it */ + return (flags & filter_flags) ? FALSE : TRUE; } static void -update_secrets_cache (NMSettingsConnection *self) +update_system_secrets_cache (NMSettingsConnection *self) { NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self); - if (priv->secrets) - g_object_unref (priv->secrets); - priv->secrets = nm_connection_duplicate (NM_CONNECTION (self)); + if (priv->system_secrets) + g_object_unref (priv->system_secrets); + priv->system_secrets = nm_connection_duplicate (NM_CONNECTION (self)); /* Clear out non-system-owned and not-saved secrets */ - nm_connection_for_each_setting_value (priv->secrets, only_system_secrets_cb, NULL); + nm_connection_clear_secrets_with_flags (priv->system_secrets, + secrets_filter_cb, + GUINT_TO_POINTER (NM_SETTING_SECRET_FLAG_NONE)); } -static gboolean -clear_system_secrets (GHashTableIter *iter, - NMSettingSecretFlags flags, - gpointer user_data) +static void +update_agent_secrets_cache (NMSettingsConnection *self, NMConnection *new) { - if (flags == NM_SETTING_SECRET_FLAG_NONE) - g_hash_table_iter_remove (iter); - return TRUE; + NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self); + NMSettingSecretFlags filter_flags = NM_SETTING_SECRET_FLAG_NOT_SAVED | NM_SETTING_SECRET_FLAG_AGENT_OWNED; + + if (priv->agent_secrets) + g_object_unref (priv->agent_secrets); + priv->agent_secrets = nm_connection_duplicate (new ? new : NM_CONNECTION (self)); + + /* Clear out non-system-owned secrets */ + nm_connection_clear_secrets_with_flags (priv->agent_secrets, + secrets_filter_cb, + GUINT_TO_POINTER (filter_flags)); +} + +static void +secrets_cleared_cb (NMSettingsConnection *self) +{ + NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self); + + /* Clear agent secrets when connection's secrets are cleared since agent + * secrets are transient. + */ + if (priv->agent_secrets) + g_object_unref (priv->agent_secrets); + priv->agent_secrets = NULL; } /* Update the settings of this connection to match that of 'new', taking care to @@ -356,7 +378,7 @@ nm_settings_connection_replace_settings (NMSettingsConnection *self, GError **error) { NMSettingsConnectionPrivate *priv; - GHashTable *new_settings, *transient_secrets; + GHashTable *new_settings, *hash = NULL; gboolean success = FALSE; g_return_val_if_fail (self != NULL, FALSE); @@ -366,37 +388,29 @@ nm_settings_connection_replace_settings (NMSettingsConnection *self, priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self); - /* Replacing the settings might replace transient secrets, such as when - * a user agent returns secrets, which might trigger the connection to be - * written out, which triggers an inotify event to re-read and update the - * connection, which, if we're not careful, could wipe out the transient - * secrets the user agent just sent us. Basically, only - * nm_connection_clear_secrets() should wipe out transient secrets but - * re-reading a connection from on-disk and updating our in-memory copy - * should not. Thus we preserve non-system-owned secrets here. - */ - transient_secrets = nm_connection_to_hash (NM_CONNECTION (self), NM_SETTING_HASH_FLAG_ONLY_SECRETS); - if (transient_secrets) - for_each_secret (NM_CONNECTION (self), transient_secrets, clear_system_secrets, NULL); - new_settings = nm_connection_to_hash (new, NM_SETTING_HASH_FLAG_ALL); g_assert (new_settings); if (nm_connection_replace_settings (NM_CONNECTION (self), new_settings, error)) { - /* Copy the connection to keep its secrets around even if NM - * calls nm_connection_clear_secrets(). + /* Cache the just-updated system secrets in case something calls + * nm_connection_clear_secrets() and clears them. */ - update_secrets_cache (self); + update_system_secrets_cache (self); + success = TRUE; - /* And add the transient secrets back */ - if (transient_secrets) - nm_connection_update_secrets (NM_CONNECTION (self), NULL, transient_secrets, NULL); + /* Add agent and always-ask secrets back; they won't necessarily be + * in the replacement connection data if it was eg reread from disk. + */ + if (priv->agent_secrets) { + hash = nm_connection_to_hash (priv->agent_secrets, NM_SETTING_HASH_FLAG_ONLY_SECRETS); + if (hash) { + success = nm_connection_update_secrets (NM_CONNECTION (self), NULL, hash, error); + g_hash_table_destroy (hash); + } + } nm_settings_connection_recheck_visibility (self); - success = TRUE; } g_hash_table_destroy (new_settings); - if (transient_secrets) - g_hash_table_destroy (transient_secrets); return success; } @@ -550,6 +564,7 @@ do_delete (NMSettingsConnection *connection, for_agents = nm_connection_duplicate (NM_CONNECTION (connection)); nm_connection_clear_secrets (for_agents); nm_agent_manager_delete_secrets (priv->agent_mgr, for_agents, FALSE, 0); + g_object_unref (for_agents); /* Remove timestamp from timestamps database file */ remove_entry_from_db (connection, "timestamps"); @@ -719,7 +734,7 @@ agent_secrets_done_cb (NMAgentManager *manager, /* Update the connection with our existing secrets from backing storage */ nm_connection_clear_secrets (NM_CONNECTION (self)); - hash = nm_connection_to_hash (priv->secrets, NM_SETTING_HASH_FLAG_ONLY_SECRETS); + hash = nm_connection_to_hash (priv->system_secrets, NM_SETTING_HASH_FLAG_ONLY_SECRETS); if (!hash || nm_connection_update_secrets (NM_CONNECTION (self), setting_name, hash, &local)) { /* Update the connection with the agent's secrets; by this point if any * system-owned secrets exist in 'secrets' the agent that provided them @@ -730,7 +745,8 @@ agent_secrets_done_cb (NMAgentManager *manager, /* Now that all secrets are updated, copy and cache new secrets, * then save them to backing storage. */ - update_secrets_cache (self); + update_system_secrets_cache (self); + update_agent_secrets_cache (self, NULL); /* Only save secrets to backing storage if the agent returned any * new system secrets. If it didn't, then the secrets are agent- @@ -807,11 +823,9 @@ nm_settings_connection_get_secrets (NMSettingsConnection *self, guint32 call_id = 0; /* Use priv->secrets to work around the fact that nm_connection_clear_secrets() - * will clear secrets on this object's settings. priv->secrets should be - * a complete copy of this object and kept in sync by - * nm_settings_connection_replace_settings(). + * will clear secrets on this object's settings. */ - if (!priv->secrets) { + if (!priv->system_secrets) { g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION, "%s.%d - Internal error; secrets cache invalid.", __FILE__, __LINE__); @@ -826,7 +840,7 @@ nm_settings_connection_get_secrets (NMSettingsConnection *self, return 0; } - existing_secrets = nm_connection_to_hash (priv->secrets, NM_SETTING_HASH_FLAG_ONLY_SECRETS); + existing_secrets = nm_connection_to_hash (priv->system_secrets, NM_SETTING_HASH_FLAG_ONLY_SECRETS); call_id = nm_agent_manager_get_secrets (priv->agent_mgr, NM_CONNECTION (self), filter_by_uid, @@ -1084,47 +1098,40 @@ impl_settings_connection_get_settings (NMSettingsConnection *self, auth_start (self, context, NULL, get_settings_auth_cb, NULL); } +typedef struct { + DBusGMethodInvocation *context; + NMAgentManager *agent_mgr; + gulong sender_uid; +} UpdateInfo; + static void -con_update_cb (NMSettingsConnection *connection, +con_update_cb (NMSettingsConnection *self, GError *error, gpointer user_data) { - DBusGMethodInvocation *context = user_data; + UpdateInfo *info = user_data; + NMConnection *for_agent; if (error) - dbus_g_method_return_error (context, error); - else - dbus_g_method_return (context); -} - -static void -secrets_filter_cb (NMSetting *setting, - const char *key, - const GValue *value, - GParamFlags flags, - gpointer user_data) -{ - NMSettingSecretFlags filter_flags = GPOINTER_TO_UINT (user_data); - NMSettingSecretFlags secret_flags = NM_SETTING_SECRET_FLAG_NONE; - const char *secret_name = NULL; - GHashTableIter iter; + dbus_g_method_return_error (info->context, error); + else { + /* Dupe the connection so we can clear out non-agent-owned secrets, + * as agent-owned secrets are the only ones we send back be saved. + * Only send secrets to agents of the same UID that called update too. + */ + for_agent = nm_connection_duplicate (NM_CONNECTION (self)); + nm_connection_clear_secrets_with_flags (for_agent, + secrets_filter_cb, + GUINT_TO_POINTER (NM_SETTING_SECRET_FLAG_AGENT_OWNED)); + nm_agent_manager_save_secrets (info->agent_mgr, for_agent, TRUE, info->sender_uid); + g_object_unref (for_agent); - if (flags & NM_SETTING_PARAM_SECRET) { - if (NM_IS_SETTING_VPN (setting) && !strcmp (key, NM_SETTING_VPN_SECRETS)) { - /* 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)) { - secret_flags = NM_SETTING_SECRET_FLAG_NONE; - nm_setting_get_secret_flags (setting, secret_name, &secret_flags, NULL); - 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 & filter_flags)) - g_object_set (G_OBJECT (setting), key, NULL, NULL); - } + dbus_g_method_return (info->context); } + + g_object_unref (info->agent_mgr); + memset (info, 0, sizeof (*info)); + g_free (info); } static void @@ -1136,54 +1143,27 @@ update_auth_cb (NMSettingsConnection *self, { NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self); NMConnection *new_settings = data; - NMConnection *for_agent, *dup; - NMSettingSecretFlags filter_flags; - GHashTable *hash; - GError *local = NULL; + UpdateInfo *info; 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. + info = g_malloc0 (sizeof (*info)); + info->context = context; + info->agent_mgr = g_object_ref (priv->agent_mgr); + info->sender_uid = sender_uid; + + /* Cache the new secrets from the agent, as stuff like inotify-triggered + * changes to connection's backing config files will blow them away if + * they're in the main connection. */ - dup = nm_connection_duplicate (new_settings); + update_agent_secrets_cache (self, 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)); - 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); + new_settings, + con_update_cb, + info); } g_object_unref (new_settings); @@ -1345,16 +1325,11 @@ dbus_get_agent_secrets_cb (NMSettingsConnection *self, if (error) dbus_g_method_return_error (context, error); else { - /* The connection's secrets will have been updated by the agent manager, - * so we want to refresh the secrets cache. Note that we will never save - * new secrets to backing storage here because D-Bus initated requests will - * never ask for completely new secrets from agents. Thus system-owned - * secrets should not have changed from backing storage. We also don't - * send agent-owned secrets back out to be saved since we assume the agent - * that provided the secrets saved them itself. + /* Return secrets from agent and backing storage to the D-Bus caller; + * nm_settings_connection_get_secrets() will have updated itself with + * secrets from backing storage and those returned from the agent + * by the time we get here. */ - 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); @@ -1726,6 +1701,8 @@ nm_settings_connection_init (NMSettingsConnection *self) priv->agent_mgr = nm_agent_manager_get (); priv->seen_bssids = g_hash_table_new_full (mac_hash, mac_equal, g_free, g_free); + + g_signal_connect (self, "secrets-cleared", G_CALLBACK (secrets_cleared_cb), NULL); } static void @@ -1739,8 +1716,10 @@ dispose (GObject *object) goto out; priv->disposed = TRUE; - if (priv->secrets) - g_object_unref (priv->secrets); + if (priv->system_secrets) + g_object_unref (priv->system_secrets); + if (priv->agent_secrets) + g_object_unref (priv->agent_secrets); /* Cancel PolicyKit requests */ for (iter = priv->pending_auths; iter; iter = g_slist_next (iter)) diff --git a/src/settings/nm-settings.c b/src/settings/nm-settings.c index 733e9145..f0bfc162 100644 --- a/src/settings/nm-settings.c +++ b/src/settings/nm-settings.c @@ -27,6 +27,7 @@ #include #include +#include #include #include #include @@ -546,24 +547,23 @@ find_plugin (GSList *list, const char *pname) } static gboolean -load_plugins (NMSettings *self, const char *plugins, GError **error) +load_plugins (NMSettings *self, const char **plugins, GError **error) { GSList *list = NULL; - char **plist; - char **iter; + const char **iter; gboolean success = TRUE; - plist = g_strsplit (plugins, ",", 0); - if (!plist) - return FALSE; - - for (iter = plist; *iter; iter++) { + for (iter = plugins; *iter; iter++) { GModule *plugin; char *full_name, *path; - const char *pname = g_strstrip (*iter); + const char *pname = *iter; GObject *obj; GObject * (*factory_func) (void); + /* strip leading spaces */ + while (isblank (*pname)) + pname++; + /* keyfile plugin built in now */ if (!strcmp (pname, "keyfile")) continue; @@ -616,8 +616,6 @@ load_plugins (NMSettings *self, const char *plugins, GError **error) list = g_slist_append (list, obj); } - g_strfreev (plist); - g_slist_foreach (list, (GFunc) g_object_unref, NULL); g_slist_free (list); @@ -634,6 +632,7 @@ connection_removed (NMSettingsConnection *obj, gpointer user_data) { GObject *connection = G_OBJECT (obj); guint id; + g_object_ref (connection); /* Disconnect signal handlers, as plugins might still keep references @@ -653,7 +652,7 @@ connection_removed (NMSettingsConnection *obj, gpointer user_data) if (id) g_signal_handler_disconnect (connection, id); - /* Forget about the connection internall */ + /* Forget about the connection internally */ g_hash_table_remove (NM_SETTINGS_GET_PRIVATE (user_data)->connections, (gpointer) nm_connection_get_path (NM_CONNECTION (connection))); @@ -840,9 +839,6 @@ claim_connection (NMSettings *self, } } -// TODO it seems that this is only ever used to remove a -// NMDefaultWiredConnection, and it probably needs to stay that way. So this -// *needs* a better name! static void remove_default_wired_connection (NMSettings *self, NMSettingsConnection *connection, @@ -852,7 +848,8 @@ remove_default_wired_connection (NMSettings *self, const char *path = nm_connection_get_path (NM_CONNECTION (connection)); if (g_hash_table_lookup (priv->connections, path)) { - g_signal_emit_by_name (G_OBJECT (connection), NM_SETTINGS_CONNECTION_REMOVED); + if (do_signal) + g_signal_emit_by_name (G_OBJECT (connection), NM_SETTINGS_CONNECTION_REMOVED); g_hash_table_remove (priv->connections, path); } } @@ -1378,7 +1375,7 @@ delete_cb (NMSettingsConnection *connection, GError *error, gpointer user_data) { } -static gboolean +static void default_wired_try_update (NMDefaultWiredConnection *wired, NMSettings *self) { @@ -1390,6 +1387,9 @@ default_wired_try_update (NMDefaultWiredConnection *wired, * persistent storage. */ + /* Keep it alive over removal so we can re-add it if we need to */ + g_object_ref (wired); + id = nm_connection_get_id (NM_CONNECTION (wired)); g_assert (id); @@ -1402,21 +1402,21 @@ default_wired_try_update (NMDefaultWiredConnection *wired, DEFAULT_WIRED_TAG, NULL); nm_log_info (LOGD_SETTINGS, "Saved default wired connection '%s' to persistent storage", id); - return FALSE; + } else { + nm_log_warn (LOGD_SETTINGS, "couldn't save default wired connection '%s': %d / %s", + id, + error ? error->code : -1, + (error && error->message) ? error->message : "(unknown)"); + g_clear_error (&error); + + /* If there was an error, don't destroy the default wired connection, + * but add it back to the system settings service. Connection is already + * exported on the bus, don't export it again, thus do_export == FALSE. + */ + claim_connection (self, NM_SETTINGS_CONNECTION (wired), FALSE); } - nm_log_warn (LOGD_SETTINGS, "couldn't save default wired connection '%s': %d / %s", - id, - error ? error->code : -1, - (error && error->message) ? error->message : "(unknown)"); - g_clear_error (&error); - - /* If there was an error, don't destroy the default wired connection, - * but add it back to the system settings service. Connection is already - * exported on the bus, don't export it again, thus do_export == FALSE. - */ - claim_connection (self, NM_SETTINGS_CONNECTION (wired), FALSE); - return TRUE; + g_object_unref (wired); } void @@ -1492,7 +1492,7 @@ nm_settings_device_removed (NMSettings *self, NMDevice *device) NMSettings * nm_settings_new (const char *config_file, - const char *plugins, + const char **plugins, GError **error) { NMSettings *self; diff --git a/src/settings/nm-settings.h b/src/settings/nm-settings.h index 66d41cce..77485e19 100644 --- a/src/settings/nm-settings.h +++ b/src/settings/nm-settings.h @@ -77,7 +77,7 @@ typedef struct { GType nm_settings_get_type (void); NMSettings *nm_settings_new (const char *config_file, - const char *plugins, + const char **plugins, GError **error); typedef void (*NMSettingsForEachFunc) (NMSettings *settings, diff --git a/src/settings/plugins/Makefile.in b/src/settings/plugins/Makefile.in index 148e9620..c23e3be0 100644 --- a/src/settings/plugins/Makefile.in +++ b/src/settings/plugins/Makefile.in @@ -197,8 +197,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/src/settings/plugins/ifcfg-rh/Makefile.in b/src/settings/plugins/ifcfg-rh/Makefile.in index f02b6431..b904563a 100644 --- a/src/settings/plugins/ifcfg-rh/Makefile.in +++ b/src/settings/plugins/ifcfg-rh/Makefile.in @@ -267,8 +267,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/src/settings/plugins/ifcfg-rh/plugin.c b/src/settings/plugins/ifcfg-rh/plugin.c index ed0dceca..b4be4cba 100644 --- a/src/settings/plugins/ifcfg-rh/plugin.c +++ b/src/settings/plugins/ifcfg-rh/plugin.c @@ -655,8 +655,10 @@ sc_plugin_ifcfg_init (SCPluginIfcfg *plugin) } if (!success) { - dbus_g_connection_unref (priv->bus); - priv->bus = NULL; + if (priv->bus) { + dbus_g_connection_unref (priv->bus); + priv->bus = NULL; + } } } diff --git a/src/settings/plugins/ifcfg-rh/reader.c b/src/settings/plugins/ifcfg-rh/reader.c index cdf5889e..910cca35 100644 --- a/src/settings/plugins/ifcfg-rh/reader.c +++ b/src/settings/plugins/ifcfg-rh/reader.c @@ -28,10 +28,10 @@ #include #include #include -#include #include #include #include +#include #ifndef __user #define __user @@ -3382,7 +3382,7 @@ connection_from_file (const char *filename, network_file = SYSCONFDIR "/sysconfig/network"; if (!iscsiadm_path) - iscsiadm_path = SBINDIR "/iscsiadm"; + iscsiadm_path = "/sbin/iscsiadm"; ifcfg_name = utils_get_ifcfg_name (filename, TRUE); if (!ifcfg_name) { diff --git a/src/settings/plugins/ifcfg-rh/shvar.c b/src/settings/plugins/ifcfg-rh/shvar.c index db084969..0aa8efc2 100644 --- a/src/settings/plugins/ifcfg-rh/shvar.c +++ b/src/settings/plugins/ifcfg-rh/shvar.c @@ -142,10 +142,11 @@ svUnescape(char *s) { */ static const char escapees[] = "\"'\\$~`"; /* must be escaped */ static const char spaces[] = " \t|&;()<>"; /* only require "" */ +static const char newlines[] = "\n\r"; /* will be removed */ char * svEscape(const char *s) { char *new; - int i, j, mangle = 0, space = 0; + int i, j, mangle = 0, space = 0, newline = 0; int newlen, slen; static int esclen, splen; @@ -156,23 +157,26 @@ svEscape(const char *s) { for (i = 0; i < slen; i++) { if (strchr(escapees, s[i])) mangle++; if (strchr(spaces, s[i])) space++; + if (strchr(newlines, s[i])) newline++; } - if (!mangle && !space) return strdup(s); + if (!mangle && !space && !newline) return strdup(s); - newlen = slen + mangle + 3; /* 3 is extra ""\0 */ + newlen = slen + mangle - newline + 3; /* 3 is extra ""\0 */ new = g_malloc0(newlen); if (!new) return NULL; j = 0; new[j++] = '"'; for (i = 0; i < slen; i++) { + if (strchr(newlines, s[i])) + continue; if (strchr(escapees, s[i])) { new[j++] = '\\'; } new[j++] = s[i]; } new[j++] = '"'; - g_assert(j == slen + mangle + 2); /* j is the index of the '\0' */ + g_assert(j == slen + mangle - newline + 2); /* j is the index of the '\0' */ return new; } @@ -332,13 +336,13 @@ svSetValue(shvarFile *s, const char *key, const char *value, gboolean verbatim) } end: - if (newval) free(newval); - if (val1) free(val1); - if (val2) free(val2); + g_free(newval); + g_free(val1); + g_free(val2); return; bail: - if (keyValue) free (keyValue); + g_free (keyValue); goto end; } diff --git a/src/settings/plugins/ifcfg-rh/tests/Makefile.in b/src/settings/plugins/ifcfg-rh/tests/Makefile.in index cd37d0a7..6c509fd0 100644 --- a/src/settings/plugins/ifcfg-rh/tests/Makefile.in +++ b/src/settings/plugins/ifcfg-rh/tests/Makefile.in @@ -228,8 +228,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.in b/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.in index a10cbb86..7a00bcfd 100644 --- a/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.in +++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.in @@ -152,8 +152,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ 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 d1f08aa9..e32266cb 100644 --- a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c +++ b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c @@ -10140,6 +10140,207 @@ test_write_wifi_wpa_then_open (void) g_object_unref (connection); } +static void +test_write_wifi_wpa_then_wep_with_perms (void) +{ + NMConnection *connection; + NMConnection *reread; + NMSettingConnection *s_con; + NMSettingWireless *s_wifi; + NMSettingWirelessSecurity *s_wsec; + NMSettingIP4Config *s_ip4; + NMSettingIP6Config *s_ip6; + char *uuid; + gboolean success; + GError *error = NULL; + char *testfile = NULL; + char *unmanaged = NULL; + char *keyfile = NULL; + char *routefile = NULL; + char *route6file = NULL; + gboolean ignore_error = FALSE; + GByteArray *ssid; + GSList *perm_list = NULL; + const unsigned char ssid_data[] = "SomeSSID"; + + /* Test that writing out a WPA config then changing that to a WEP + * config works and doesn't cause infinite loop or other issues. + */ + + connection = nm_connection_new (); + g_assert (connection); + + /* Connection setting */ + s_con = (NMSettingConnection *) nm_setting_connection_new (); + g_assert (s_con); + nm_connection_add_setting (connection, NM_SETTING (s_con)); + + uuid = nm_utils_uuid_generate (); + perm_list = g_slist_append (perm_list, "user:superman:"); + g_object_set (s_con, + NM_SETTING_CONNECTION_ID, "random wifi connection 2", + NM_SETTING_CONNECTION_UUID, uuid, + NM_SETTING_CONNECTION_AUTOCONNECT, TRUE, + NM_SETTING_CONNECTION_PERMISSIONS, perm_list, + NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME, + NULL); + g_free (uuid); + g_slist_free (perm_list); + ASSERT (nm_setting_connection_get_num_permissions (s_con) == 1, + "test_write_wifi_wpa_then_wep_with_perms", "unexpected failure adding valid user permisson"); + + /* Wifi setting */ + s_wifi = (NMSettingWireless *) nm_setting_wireless_new (); + g_assert (s_wifi); + nm_connection_add_setting (connection, NM_SETTING (s_wifi)); + + ssid = g_byte_array_sized_new (sizeof (ssid_data)); + g_byte_array_append (ssid, ssid_data, sizeof (ssid_data)); + + g_object_set (s_wifi, + NM_SETTING_WIRELESS_SSID, ssid, + NM_SETTING_WIRELESS_MODE, "infrastructure", + NM_SETTING_WIRELESS_SEC, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, + NULL); + + g_byte_array_free (ssid, TRUE); + + /* Wireless security setting */ + s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new (); + g_assert (s_wsec); + nm_connection_add_setting (connection, NM_SETTING (s_wsec)); + + g_object_set (s_wsec, + NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-psk", + NM_SETTING_WIRELESS_SECURITY_PSK, "My cool PSK", + NULL); + + nm_setting_wireless_security_add_proto (s_wsec, "wpa"); + nm_setting_wireless_security_add_pairwise (s_wsec, "tkip"); + nm_setting_wireless_security_add_group (s_wsec, "tkip"); + + nm_setting_wireless_security_add_proto (s_wsec, "rsn"); + nm_setting_wireless_security_add_pairwise (s_wsec, "ccmp"); + nm_setting_wireless_security_add_group (s_wsec, "ccmp"); + + /* IP4 setting */ + s_ip4 = (NMSettingIP4Config *) 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); + + /* IP6 setting */ + 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, + NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE, + NULL); + + success = nm_connection_verify (connection, &error); + g_assert_no_error (error); + g_assert (success); + + /* Save the ifcfg */ + success = writer_new_connection (connection, + TEST_SCRATCH_DIR "/network-scripts/", + &testfile, + &error); + g_assert_no_error (error); + g_assert (success); + g_assert (testfile); + + /* re-read the connection for comparison */ + reread = connection_from_file (testfile, + NULL, + TYPE_WIRELESS, + NULL, + &unmanaged, + &keyfile, + &routefile, + &route6file, + &error, + &ignore_error); + g_assert_no_error (error); + g_assert (reread); + + success = nm_connection_verify (reread, &error); + g_assert_no_error (error); + + success = nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT); + g_assert (success); + + g_free (unmanaged); + unmanaged = NULL; + g_free (routefile); + routefile = NULL; + g_free (route6file); + route6file = NULL; + g_object_unref (reread); + + /* Now change the connection to WEP and recheck */ + s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new (); + g_assert (s_wsec); + nm_connection_add_setting (connection, NM_SETTING (s_wsec)); + + g_object_set (s_wsec, + NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "none", + NULL); + nm_setting_wireless_security_set_wep_key (s_wsec, 0, "abraka dabra"); + + /* Write it back out */ + success = writer_update_connection (connection, + TEST_SCRATCH_DIR "/network-scripts/", + testfile, + keyfile, + &error); + g_assert_no_error (error); + g_assert (success); + + g_free (keyfile); + keyfile = NULL; + + /* re-read it for comparison */ + reread = connection_from_file (testfile, + NULL, + TYPE_WIRELESS, + NULL, + &unmanaged, + &keyfile, + &routefile, + &route6file, + &error, + &ignore_error); + g_assert_no_error (error); + + g_assert (reread); + + success = nm_connection_verify (reread, &error); + g_assert_no_error (error); + + success = nm_connection_compare (connection, reread, + NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS | + NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS); + + ASSERT (success, + "test_write_wifi_wpa_then_wep_with_perms", "failed to compare connections"); + + unlink (keyfile); + unlink (testfile); + + g_free (testfile); + g_free (unmanaged); + g_free (keyfile); + g_free (routefile); + g_free (route6file); + g_object_unref (reread); + + g_object_unref (connection); +} + static void test_write_wifi_dynamic_wep_leap (void) { @@ -11713,6 +11914,7 @@ int main (int argc, char **argv) test_write_wifi_wpa_eap_ttls_mschapv2 (); test_write_wifi_dynamic_wep_leap (); test_write_wifi_wpa_then_open (); + test_write_wifi_wpa_then_wep_with_perms (); test_write_wired_qeth_dhcp (); test_write_wired_ctc_dhcp (); test_write_permissions (); diff --git a/src/settings/plugins/ifcfg-rh/writer.c b/src/settings/plugins/ifcfg-rh/writer.c index 192226ac..068bcda2 100644 --- a/src/settings/plugins/ifcfg-rh/writer.c +++ b/src/settings/plugins/ifcfg-rh/writer.c @@ -569,6 +569,7 @@ write_wireless_security_setting (NMConnection *connection, svSetValue (ifcfg, "DEFAULTKEY", NULL, FALSE); if (!strcmp (key_mgmt, "none")) { + svSetValue (ifcfg, "KEY_MGMT", NULL, FALSE); wep = TRUE; *no_8021x = TRUE; } else if (!strcmp (key_mgmt, "wpa-none") || !strcmp (key_mgmt, "wpa-psk")) { @@ -1725,7 +1726,7 @@ write_connection (NMConnection *connection, g_free (ifcfg_name); while (idx++ < 500) { - ifcfg_name = g_strdup_printf ("%s/ifcfg-%s %u", ifcfg_dir, escaped, idx); + ifcfg_name = g_strdup_printf ("%s/ifcfg-%s-%u", ifcfg_dir, escaped, idx); if (g_file_test (ifcfg_name, G_FILE_TEST_EXISTS) == FALSE) break; g_free (ifcfg_name); diff --git a/src/settings/plugins/ifcfg-suse/Makefile.in b/src/settings/plugins/ifcfg-suse/Makefile.in index 02e2247a..b8017e24 100644 --- a/src/settings/plugins/ifcfg-suse/Makefile.in +++ b/src/settings/plugins/ifcfg-suse/Makefile.in @@ -215,8 +215,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/src/settings/plugins/ifnet/Makefile.in b/src/settings/plugins/ifnet/Makefile.in index 2bc7bc32..519e07c0 100644 --- a/src/settings/plugins/ifnet/Makefile.in +++ b/src/settings/plugins/ifnet/Makefile.in @@ -263,8 +263,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/src/settings/plugins/ifnet/connection_parser.c b/src/settings/plugins/ifnet/connection_parser.c index 982f94f9..b4aaa8d2 100644 --- a/src/settings/plugins/ifnet/connection_parser.c +++ b/src/settings/plugins/ifnet/connection_parser.c @@ -1742,27 +1742,27 @@ ifnet_update_connection_from_config_block (const char *conn_name, GError **error /* IPv4 setting */ make_ip4_setting (connection, conn_name, error); - if (error && *error) - PLUGIN_WARN (IFNET_PLUGIN_NAME, - "Found error: %s", (*error)->message); + if (error && *error) { + PLUGIN_WARN (IFNET_PLUGIN_NAME, "Found error: %s", (*error)->message); + goto error; + } /* IPv6 setting */ make_ip6_setting (connection, conn_name, error); - if (error && *error) - PLUGIN_WARN (IFNET_PLUGIN_NAME, - "Found error: %s", (*error)->message); + if (error && *error) { + PLUGIN_WARN (IFNET_PLUGIN_NAME, "Found error: %s", (*error)->message); + goto error; + } success = nm_connection_verify (connection, error); if (error && *error) - PLUGIN_WARN (IFNET_PLUGIN_NAME, - "Found error: %s", (*error)->message); + PLUGIN_WARN (IFNET_PLUGIN_NAME, "Found error: %s", (*error)->message); PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Connection verified %s:%d", conn_name, success); if (!success) goto error; return connection; error: - g_object_unref (setting); g_object_unref (connection); return NULL; } diff --git a/src/settings/plugins/ifnet/net_utils.c b/src/settings/plugins/ifnet/net_utils.c index 83f86ab5..b533ae3f 100644 --- a/src/settings/plugins/ifnet/net_utils.c +++ b/src/settings/plugins/ifnet/net_utils.c @@ -313,7 +313,7 @@ is_ip4_address (const char *in_address) gboolean result = FALSE; gchar *tmp; GRegex *regex = g_regex_new (pattern, 0, 0, NULL); - GMatchInfo *match_info; + GMatchInfo *match_info = NULL; if (!address) goto done; diff --git a/src/settings/plugins/ifnet/tests/Makefile.in b/src/settings/plugins/ifnet/tests/Makefile.in index 17b80c36..d2cbb871 100644 --- a/src/settings/plugins/ifnet/tests/Makefile.in +++ b/src/settings/plugins/ifnet/tests/Makefile.in @@ -186,8 +186,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/src/settings/plugins/ifnet/tests/net b/src/settings/plugins/ifnet/tests/net index e7550002..0eef399a 100644 --- a/src/settings/plugins/ifnet/tests/net +++ b/src/settings/plugins/ifnet/tests/net @@ -35,6 +35,8 @@ config_eth6=("192.168.4.{1..101}/24") config_eth7=( "dhcp" ) auto_eth7="true" +# missing config_eth8 +auto_eth8="true" config_myxjtu2=("202.117.16.121/24 brd 202.117.16.255") routes_myxjtu2=("default via 202.117.16.1") diff --git a/src/settings/plugins/ifnet/tests/test_all.c b/src/settings/plugins/ifnet/tests/test_all.c index d114bbba..52d9ce2a 100644 --- a/src/settings/plugins/ifnet/tests/test_all.c +++ b/src/settings/plugins/ifnet/tests/test_all.c @@ -252,25 +252,25 @@ test_is_unmanaged () static void test_new_connection () { - GError **error = NULL; + GError *error = NULL; NMConnection *connection; - connection = ifnet_update_connection_from_config_block ("eth2", error); + connection = ifnet_update_connection_from_config_block ("eth2", &error); ASSERT (connection != NULL, "new connection", "new connection failed: %s", - error == NULL ? "None" : (*error)->message); + error ? error->message : "None"); g_object_unref (connection); - connection = - ifnet_update_connection_from_config_block ("qiaomuf", error); + + connection = ifnet_update_connection_from_config_block ("qiaomuf", &error); ASSERT (connection != NULL, "new connection", - "new connection failed: %s", error - && (*error) ? (*error)->message : "NONE"); + "new connection failed: %s", + error ? error->message : "NONE"); g_object_unref (connection); - connection = - ifnet_update_connection_from_config_block ("myxjtu2", error); + + connection = ifnet_update_connection_from_config_block ("myxjtu2", &error); ASSERT (connection != NULL, "new connection", - "new connection failed: %s", error - && (*error) ? (*error)->message : "NONE"); + "new connection failed: %s", + error ? error->message : "NONE"); g_object_unref (connection); } @@ -280,32 +280,32 @@ test_new_connection () static void test_update_connection () { - GError **error = NULL; + GError *error = NULL; NMConnection *connection; gboolean success; - connection = ifnet_update_connection_from_config_block ("eth0", error); + connection = ifnet_update_connection_from_config_block ("eth0", &error); ASSERT (connection != NULL, "get connection", "get connection failed: %s", - error == NULL ? "None" : (*error)->message); + error ? error->message : "None"); success = ifnet_update_parsers_by_connection (connection, "eth0", NET_GEN_NAME, SUP_GEN_NAME, NULL, - error); + &error); ASSERT (success, "update connection", "update connection failed %s", "eth0"); g_object_unref (connection); - connection = ifnet_update_connection_from_config_block ("0xab3ace", error); + connection = ifnet_update_connection_from_config_block ("0xab3ace", &error); ASSERT (connection != NULL, "get connection", "get connection failed: %s", - error == NULL ? "None" : (*error)->message); + error ? error->message : "None"); success = ifnet_update_parsers_by_connection (connection, "0xab3ace", NET_GEN_NAME, SUP_GEN_NAME, NULL, - error); + &error); ASSERT (success, "update connection", "update connection failed %s", "0xab3ace"); g_object_unref (connection); @@ -356,6 +356,17 @@ test_delete_connection () unlink (SUP_GEN_NAME); } +static void +test_missing_config () +{ + GError *error = NULL; + NMConnection *connection; + + connection = ifnet_update_connection_from_config_block ("eth8", &error); + ASSERT (connection == NULL && error != NULL, "get connection", + "get connection should fail with 'Unknown config for eth8'"); +} + static void run_all (gboolean run) { @@ -378,6 +389,7 @@ run_all (gboolean run) test_update_connection (); test_add_connection (); test_delete_connection (); + test_missing_config (); } } diff --git a/src/settings/plugins/ifnet/tests/wpa_supplicant.conf b/src/settings/plugins/ifnet/tests/wpa_supplicant.conf index a2595d42..4f5f68cf 100644 --- a/src/settings/plugins/ifnet/tests/wpa_supplicant.conf +++ b/src/settings/plugins/ifnet/tests/wpa_supplicant.conf @@ -859,6 +859,7 @@ network={ identity="user@example.com" anonymous_identity="anonymous@example.com" password="foobar" - ca_cert="blob://exampleblob" + ca_cert="test_ca_cert.pem" + phase2="auth=CHAP" priority=20 } diff --git a/src/settings/plugins/ifupdown/Makefile.in b/src/settings/plugins/ifupdown/Makefile.in index 5f5a456b..b6896b59 100644 --- a/src/settings/plugins/ifupdown/Makefile.in +++ b/src/settings/plugins/ifupdown/Makefile.in @@ -262,8 +262,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/src/settings/plugins/ifupdown/tests/Makefile.in b/src/settings/plugins/ifupdown/tests/Makefile.in index 7412e65d..3c8bf793 100644 --- a/src/settings/plugins/ifupdown/tests/Makefile.in +++ b/src/settings/plugins/ifupdown/tests/Makefile.in @@ -186,8 +186,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/src/settings/plugins/keyfile/Makefile.in b/src/settings/plugins/keyfile/Makefile.in index a2a7d231..cf821e46 100644 --- a/src/settings/plugins/keyfile/Makefile.in +++ b/src/settings/plugins/keyfile/Makefile.in @@ -238,8 +238,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/src/settings/plugins/keyfile/reader.c b/src/settings/plugins/keyfile/reader.c index c4136e05..4128b9f2 100644 --- a/src/settings/plugins/keyfile/reader.c +++ b/src/settings/plugins/keyfile/reader.c @@ -730,10 +730,27 @@ read_hash_of_string (GKeyFile *file, NMSetting *setting, const char *key) g_strfreev (keys); } +static void +unescape_semicolons (char *str) +{ + int i; + gsize len = strlen (str); + + for (i = 0; i < len; i++) { + if (str[i] == '\\' && str[i+1] == ';') { + memmove(str + i, str + i + 1, len - (i + 1)); + len--; + } + str[len] = '\0'; + } +} + static GByteArray * get_uchar_array (GKeyFile *keyfile, const char *setting_name, - const char *key) + const char *key, + gboolean zero_terminate, + gboolean unescape_semicolon) { GByteArray *array = NULL; char *tmp_string; @@ -742,26 +759,28 @@ get_uchar_array (GKeyFile *keyfile, int i; /* New format: just a string - * Old format: integer list; e.g. 11;25;38 + * Old format: integer list; e.g. 11;25;38; */ 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:]]*)?$"; + const char *pattern = "^[[:space:]]*[[:digit:]]{1,3}[[:space:]]*;([[:space:]]*[[:digit:]]{1,3}[[:space:]]*;)*([[:space:]]*)?$"; 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; + if (!g_match_info_matches (match_info)) { + /* Handle as a simple string (ie, new format) */ + if (unescape_semicolon) + unescape_semicolons (tmp_string); + length = strlen (tmp_string); + if (zero_terminate) + length++; + array = g_byte_array_sized_new (length); + g_byte_array_append (array, (guint8 *) tmp_string, length); + } g_match_info_free (match_info); g_regex_unref (regex); - - if (new_format) { - array = g_byte_array_sized_new (strlen (tmp_string)); - g_byte_array_append (array, (guint8 *) tmp_string, strlen (tmp_string)); - } g_free (tmp_string); } @@ -796,7 +815,7 @@ ssid_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, const char const char *setting_name = nm_setting_get_name (setting); GByteArray *array; - array = get_uchar_array (keyfile, setting_name, key); + array = get_uchar_array (keyfile, setting_name, key, FALSE, TRUE); if (array) { g_object_set (setting, key, array, NULL); g_byte_array_free (array, TRUE); @@ -837,21 +856,79 @@ get_cert_path (const char *keyfile_path, GByteArray *cert_path) static const char *certext[] = { ".pem", ".cert", ".crt", ".cer", ".p12", ".der", ".key" }; static gboolean -has_cert_ext (GByteArray *array) +has_cert_ext (const char *path) { 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) + if (g_str_has_suffix (path, certext[i])) return TRUE; } return FALSE; } +static gboolean +handle_as_scheme (GByteArray *array, NMSetting *setting, const char *key) +{ + /* It's the PATH scheme, can just set plain data */ + if ( (array->len > strlen (SCHEME_PATH)) + && g_str_has_prefix ((const char *) array->data, SCHEME_PATH) + && (array->data[array->len - 1] == '\0')) { + g_object_set (setting, key, array, NULL); + return TRUE; + } + return FALSE; +} + +static gboolean +handle_as_path (GByteArray *array, + NMSetting *setting, + const char *key, + const char *keyfile_path) +{ + gsize validate_len = array->len; + GByteArray *val; + char *path; + gboolean exists, success = FALSE; + + if (array->len > 500 || array->len < 1) + return FALSE; + + /* If there's a trailing NULL tell g_utf8_validate() to to until the NULL */ + if (array->data[array->len - 1] == '\0') + validate_len = -1; + + if (g_utf8_validate ((const char *) array->data, validate_len, NULL) == FALSE) + return FALSE; + + /* 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); + exists = g_file_test (path, G_FILE_TEST_EXISTS); + if ( exists + || memchr (array->data, '/', array->len) + || has_cert_ext (path)) { + /* Construct the proper value as required for the PATH scheme */ + val = g_byte_array_sized_new (strlen (SCHEME_PATH) + strlen (path) + 1); + g_byte_array_append (val, (const guint8 *) SCHEME_PATH, strlen (SCHEME_PATH)); + 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); + + return success; +} + static void cert_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, const char *keyfile_path) { @@ -859,62 +936,25 @@ cert_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, const char GByteArray *array; gboolean success = FALSE; - array = get_uchar_array (keyfile, setting_name, key); - if (array) { - /* Value could be either: - * 1) the raw key/cert data as a blob - * 2) a path scheme (ie, starts with "file://") - * 3) a plain path - */ - if ( (array->len > strlen (SCHEME_PATH)) - && g_str_has_prefix ((const char *) array->data, SCHEME_PATH) - && (array->data[array->len - 1] == '\0')) { - /* It's the PATH scheme, can just set plain data */ - g_object_set (setting, key, array, NULL); - success = TRUE; - } else if ( (array->len < 500) - && 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); - 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, (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); - } + array = get_uchar_array (keyfile, setting_name, key, TRUE, FALSE); + if (array && array->len > 0) { + /* Try as a path + scheme (ie, starts with "file://") */ + success = handle_as_scheme (array, setting, key); - if (!success) { - /* Assume it's a simple blob value of the certificate or private key's data */ - g_object_set (setting, key, array, NULL); - } + /* If not, it might be a plain path */ + if (success == FALSE) + success = handle_as_path (array, setting, key, keyfile_path); - g_byte_array_free (array, TRUE); + /* If neither of those two, assume blob with certificate data */ + if (success == FALSE) + g_object_set (setting, key, array, NULL); } else { g_warning ("%s: ignoring invalid key/cert value for %s / %s", __func__, setting_name, key); } + + if (array) + g_byte_array_free (array, TRUE); } typedef struct { diff --git a/src/settings/plugins/keyfile/tests/Makefile.in b/src/settings/plugins/keyfile/tests/Makefile.in index 05ed3a61..9d4f478d 100644 --- a/src/settings/plugins/keyfile/tests/Makefile.in +++ b/src/settings/plugins/keyfile/tests/Makefile.in @@ -224,8 +224,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Makefile.am b/src/settings/plugins/keyfile/tests/keyfiles/Makefile.am index 302db866..55dda7ee 100644 --- a/src/settings/plugins/keyfile/tests/keyfiles/Makefile.am +++ b/src/settings/plugins/keyfile/tests/keyfiles/Makefile.am @@ -8,6 +8,8 @@ KEYFILES = \ ATT_Data_Connect_Plain \ Test_String_SSID \ Test_Intlist_SSID \ + Test_Intlike_SSID \ + Test_Intlike_SSID_2 \ Test_Wired_TLS_Old \ Test_Wired_TLS_New \ Test_Wired_TLS_Blob \ diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Makefile.in b/src/settings/plugins/keyfile/tests/keyfiles/Makefile.in index 083615b0..3408cb15 100644 --- a/src/settings/plugins/keyfile/tests/keyfiles/Makefile.in +++ b/src/settings/plugins/keyfile/tests/keyfiles/Makefile.in @@ -152,8 +152,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ @@ -278,6 +286,8 @@ KEYFILES = \ ATT_Data_Connect_Plain \ Test_String_SSID \ Test_Intlist_SSID \ + Test_Intlike_SSID \ + Test_Intlike_SSID_2 \ Test_Wired_TLS_Old \ Test_Wired_TLS_New \ Test_Wired_TLS_Blob \ diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Test_Intlike_SSID b/src/settings/plugins/keyfile/tests/keyfiles/Test_Intlike_SSID new file mode 100644 index 00000000..2bacb725 --- /dev/null +++ b/src/settings/plugins/keyfile/tests/keyfiles/Test_Intlike_SSID @@ -0,0 +1,11 @@ +[connection] +id=Test +uuid=2f962388-e5f3-45af-a62c-ac220b8f7baa +type=802-11-wireless + +[802-11-wireless] +ssid=101 + +[ipv4] +method=auto + diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Test_Intlike_SSID_2 b/src/settings/plugins/keyfile/tests/keyfiles/Test_Intlike_SSID_2 new file mode 100644 index 00000000..20240251 --- /dev/null +++ b/src/settings/plugins/keyfile/tests/keyfiles/Test_Intlike_SSID_2 @@ -0,0 +1,11 @@ +[connection] +id=Test SSID - escaping semicolon in string +uuid=2f962388-e5f3-45af-a62c-ac220b8f7baa +type=802-11-wireless + +[802-11-wireless] +ssid=11\\;12\\;13\\; + +[ipv4] +method=auto + diff --git a/src/settings/plugins/keyfile/tests/test-keyfile.c b/src/settings/plugins/keyfile/tests/test-keyfile.c index 3bbaaaec..2859cb3e 100644 --- a/src/settings/plugins/keyfile/tests/test-keyfile.c +++ b/src/settings/plugins/keyfile/tests/test-keyfile.c @@ -1563,6 +1563,246 @@ test_write_intlist_ssid (void) g_object_unref (connection); } +#define TEST_INTLIKE_SSID_FILE TEST_KEYFILES_DIR"/Test_Intlike_SSID" + +static void +test_read_intlike_ssid (void) +{ + NMConnection *connection; + NMSettingWireless *s_wifi; + GError *error = NULL; + gboolean success; + const GByteArray *array; + const char *expected_ssid = "101"; + + connection = nm_keyfile_plugin_connection_from_file (TEST_INTLIKE_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); +} + +#define TEST_INTLIKE_SSID_2_FILE TEST_KEYFILES_DIR"/Test_Intlike_SSID_2" + +static void +test_read_intlike_ssid_2 (void) +{ + NMConnection *connection; + NMSettingWireless *s_wifi; + GError *error = NULL; + gboolean success; + const GByteArray *array; + const char *expected_ssid = "11;12;13;"; + + connection = nm_keyfile_plugin_connection_from_file (TEST_INTLIKE_SSID_2_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_intlike_ssid (void) +{ + NMConnection *connection; + NMSettingConnection *s_con; + NMSettingWireless *s_wifi; + NMSettingIP4Config *s_ip4; + char *uuid, *testfile = NULL; + GByteArray *ssid; + unsigned char tmpssid[] = { 49, 48, 49 }; + gboolean success; + NMConnection *reread; + GError *error = NULL; + pid_t owner_grp; + uid_t owner_uid; + GKeyFile *keyfile; + char *tmp; + + 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, "Intlike 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 a plain "101" */ + keyfile = g_key_file_new (); + success = g_key_file_load_from_file (keyfile, testfile, 0, &error); + g_assert_no_error (error); + g_assert (success); + + tmp = g_key_file_get_string (keyfile, NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_SSID, &error); + g_assert_no_error (error); + g_assert (tmp); + g_assert_cmpstr (tmp, ==, "101"); + + 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); +} + +static void +test_write_intlike_ssid_2 (void) +{ + NMConnection *connection; + NMSettingConnection *s_con; + NMSettingWireless *s_wifi; + NMSettingIP4Config *s_ip4; + char *uuid, *testfile = NULL; + GByteArray *ssid; + unsigned char tmpssid[] = { 49, 49, 59, 49, 50, 59, 49, 51, 59}; + gboolean success; + NMConnection *reread; + GError *error = NULL; + pid_t owner_grp; + uid_t owner_uid; + GKeyFile *keyfile; + char *tmp; + + 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, "Intlike SSID Test 2", + 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 a plain "11;12;13;" */ + keyfile = g_key_file_new (); + success = g_key_file_load_from_file (keyfile, testfile, 0, &error); + g_assert_no_error (error); + g_assert (success); + + tmp = g_key_file_get_string (keyfile, NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_SSID, &error); + g_assert_no_error (error); + g_assert (tmp); + g_assert_cmpstr (tmp, ==, "11\\;12\\;13\\;"); + + 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 @@ -2616,6 +2856,12 @@ int main (int argc, char **argv) test_read_intlist_ssid (); test_write_intlist_ssid (); + test_read_intlike_ssid (); + test_write_intlike_ssid (); + + test_read_intlike_ssid_2 (); + test_write_intlike_ssid_2 (); + test_read_bt_dun_connection (); test_write_bt_dun_connection (); diff --git a/src/settings/plugins/keyfile/writer.c b/src/settings/plugins/keyfile/writer.c index 060093ce..db43b233 100644 --- a/src/settings/plugins/keyfile/writer.c +++ b/src/settings/plugins/keyfile/writer.c @@ -44,6 +44,7 @@ #include #include "nm-dbus-glib-types.h" +#include "nm-glib-compat.h" #include "writer.h" #include "common.h" @@ -483,6 +484,7 @@ ssid_writer (GKeyFile *file, GByteArray *array; const char *setting_name = nm_setting_get_name (setting); gboolean new_format = TRUE; + unsigned int semicolons = 0; int i, *tmp_array; char *ssid; @@ -501,11 +503,24 @@ ssid_writer (GKeyFile *file, new_format = FALSE; break; } + if (c == ';') + semicolons++; } if (new_format) { - ssid = g_malloc0 (array->len + 1); - memcpy (ssid, array->data, array->len); + ssid = g_malloc0 (array->len + semicolons + 1); + if (semicolons == 0) + memcpy (ssid, array->data, array->len); + else { + /* Escape semicolons with backslashes to make strings + * containing ';', such as '16;17;' unambiguous */ + int j = 0; + for (i = 0; i < array->len; i++) { + if (array->data[i] == ';') + ssid[j++] = '\\'; + ssid[j++] = array->data[i]; + } + } g_key_file_set_string (file, setting_name, key, ssid); g_free (ssid); } else { @@ -876,7 +891,7 @@ write_setting_value (NMSetting *setting, } else if (type == G_TYPE_BOOLEAN) { g_key_file_set_boolean (info->keyfile, setting_name, key, g_value_get_boolean (value)); } else if (type == G_TYPE_CHAR) { - g_key_file_set_integer (info->keyfile, setting_name, key, (int) g_value_get_char (value)); + g_key_file_set_integer (info->keyfile, setting_name, key, (int) g_value_get_schar (value)); } else if (type == DBUS_TYPE_G_UCHAR_ARRAY) { GByteArray *array; @@ -993,15 +1008,27 @@ _internal_write_connection (NMConnection *connection, path = g_strdup_printf ("%s/%s-%s", keyfile_dir, filename, nm_connection_get_uuid (connection)); if (g_file_test (path, G_FILE_TEST_EXISTS)) { - /* Hmm, this is odd. Give up. */ - g_set_error (error, KEYFILE_PLUGIN_ERROR, 0, - "%s.%d: could not find suitable keyfile file name (%s already used)", - __FILE__, __LINE__, path); - g_free (path); - goto out; + if (existing_path == NULL || g_strcmp0 (path, existing_path) != 0) { + /* This should not happen. But, it actually occurs when + * two connections have the same UUID, and one of the connections + * is edited to contain the same ID as the other one. + * Give up. + */ + g_set_error (error, KEYFILE_PLUGIN_ERROR, 0, + "%s.%d: could not find suitable keyfile file name (%s already used)", + __FILE__, __LINE__, path); + g_free (path); + goto out; + } } } + /* In case of updating the connection and changing the file path, + * we need to remove the old one, not to end up with two connections. + */ + if (existing_path != NULL && strcmp (path, existing_path) != 0) + unlink (existing_path); + g_file_set_contents (path, data, len, error); if (chown (path, owner_uid, owner_grp) < 0) { g_set_error (error, KEYFILE_PLUGIN_ERROR, 0, diff --git a/src/settings/tests/Makefile.in b/src/settings/tests/Makefile.in index 33c4bd38..94ae4830 100644 --- a/src/settings/tests/Makefile.in +++ b/src/settings/tests/Makefile.in @@ -188,8 +188,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/src/supplicant-manager/Makefile.in b/src/supplicant-manager/Makefile.in index 729917d3..3a9c43f4 100644 --- a/src/supplicant-manager/Makefile.in +++ b/src/supplicant-manager/Makefile.in @@ -229,8 +229,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/src/supplicant-manager/nm-supplicant-config.c b/src/supplicant-manager/nm-supplicant-config.c index c651e0fa..4860314b 100644 --- a/src/supplicant-manager/nm-supplicant-config.c +++ b/src/supplicant-manager/nm-supplicant-config.c @@ -123,7 +123,7 @@ nm_supplicant_config_add_option_with_type (NMSupplicantConfig *self, char buf[255]; memset (&buf[0], 0, sizeof (buf)); memcpy (&buf[0], value, len > 254 ? 254 : len); - nm_log_warn (LOGD_SUPPLICANT, "Key '%s' and/or value '%s' invalid.", key, buf); + nm_log_warn (LOGD_SUPPLICANT, "Key '%s' and/or value '%s' invalid.", key, secret ? "" : buf); return FALSE; } } diff --git a/src/supplicant-manager/nm-supplicant-manager.c b/src/supplicant-manager/nm-supplicant-manager.c index 8209da21..349f722a 100644 --- a/src/supplicant-manager/nm-supplicant-manager.c +++ b/src/supplicant-manager/nm-supplicant-manager.c @@ -45,8 +45,10 @@ typedef struct { NMDBusManager * dbus_mgr; guint name_owner_id; DBusGProxy * proxy; + DBusGProxy * props_proxy; gboolean running; GHashTable * ifaces; + gboolean fast_supported; guint die_count_reset_id; guint die_count; gboolean disposed; @@ -122,6 +124,56 @@ nm_supplicant_manager_iface_release (NMSupplicantManager *self, g_hash_table_remove (priv->ifaces, ifname); } +static void +get_eap_methods_reply (DBusGProxy *proxy, + DBusGProxyCall *call, + gpointer user_data) +{ + NMSupplicantManager *self = NM_SUPPLICANT_MANAGER (user_data); + NMSupplicantManagerPrivate *priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (self); + GError *error = NULL; + GValue value = { 0 }; + const char **iter; + + if (dbus_g_proxy_end_call (proxy, call, &error, + G_TYPE_VALUE, &value, + G_TYPE_INVALID)) { + if (G_VALUE_HOLDS (&value, G_TYPE_STRV)) { + iter = g_value_get_boxed (&value); + while (iter && *iter) { + if (strcasecmp (*iter++, "FAST") == 0) { + priv->fast_supported = TRUE; + break; + } + } + } else { + nm_log_warn (LOGD_SUPPLICANT, "Unexpected EapMethods property type %s", + G_VALUE_TYPE_NAME (&value)); + } + g_value_unset (&value); + } else { + nm_log_warn (LOGD_SUPPLICANT, "Unexpected error requesting EapMethods: (%d) %s", + error ? error->code : -1, + error && error->message ? error->message : "(unknown)"); + g_clear_error (&error); + } + + nm_log_dbg (LOGD_SUPPLICANT, "EAP-FAST is %ssupported", + priv->fast_supported ? "" : "not "); +} + +static void +check_supported_eap_methods (NMSupplicantManager *self) +{ + NMSupplicantManagerPrivate *priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (self); + + dbus_g_proxy_begin_call (priv->props_proxy, "Get", + get_eap_methods_reply, self, NULL, + G_TYPE_STRING, WPAS_DBUS_INTERFACE, + G_TYPE_STRING, "EapMethods", + G_TYPE_INVALID); +} + gboolean nm_supplicant_manager_available (NMSupplicantManager *self) { @@ -187,6 +239,7 @@ name_owner_changed (NMDBusManager *dbus_mgr, if (!old_owner_good && new_owner_good) { nm_log_info (LOGD_SUPPLICANT, "wpa_supplicant started"); set_running (self, TRUE); + check_supported_eap_methods (self); } else if (old_owner_good && !new_owner_good) { nm_log_info (LOGD_SUPPLICANT, "wpa_supplicant stopped"); @@ -207,6 +260,8 @@ name_owner_changed (NMDBusManager *dbus_mgr, } set_running (self, FALSE); + + priv->fast_supported = FALSE; } } @@ -227,7 +282,7 @@ nm_supplicant_manager_get (void) } static void -nm_supplicant_manager_init (NMSupplicantManager * self) +nm_supplicant_manager_init (NMSupplicantManager *self) { NMSupplicantManagerPrivate *priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (self); DBusGConnection *bus; @@ -245,7 +300,16 @@ nm_supplicant_manager_init (NMSupplicantManager * self) WPAS_DBUS_PATH, WPAS_DBUS_INTERFACE); + priv->props_proxy = dbus_g_proxy_new_for_name (bus, + WPAS_DBUS_SERVICE, + WPAS_DBUS_PATH, + DBUS_INTERFACE_PROPERTIES); + priv->ifaces = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref); + + /* Grab list of supported EAP methods */ + if (priv->running) + check_supported_eap_methods (self); } static void @@ -290,6 +354,9 @@ dispose (GObject *object) if (priv->proxy) g_object_unref (priv->proxy); + if (priv->props_proxy) + g_object_unref (priv->props_proxy); + out: /* Chain up to the parent class */ G_OBJECT_CLASS (nm_supplicant_manager_parent_class)->dispose (object); diff --git a/src/supplicant-manager/tests/Makefile.in b/src/supplicant-manager/tests/Makefile.in index 18288c6e..e0fa89e6 100644 --- a/src/supplicant-manager/tests/Makefile.in +++ b/src/supplicant-manager/tests/Makefile.in @@ -188,8 +188,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/src/tests/Makefile.in b/src/tests/Makefile.in index 0f19b712..a60ca43f 100644 --- a/src/tests/Makefile.in +++ b/src/tests/Makefile.in @@ -205,8 +205,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/src/vpn-manager/Makefile.in b/src/vpn-manager/Makefile.in index 3785667e..8999e831 100644 --- a/src/vpn-manager/Makefile.in +++ b/src/vpn-manager/Makefile.in @@ -190,8 +190,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/src/vpn-manager/nm-vpn-connection-base.c b/src/vpn-manager/nm-vpn-connection-base.c index c7373627..bc2cffb2 100644 --- a/src/vpn-manager/nm-vpn-connection-base.c +++ b/src/vpn-manager/nm-vpn-connection-base.c @@ -36,6 +36,7 @@ typedef struct { NMConnection *connection; char *ac_path; + char *specific_object; gboolean is_default; gboolean is_default6; NMActiveConnectionState state; @@ -91,9 +92,16 @@ nm_vpn_connection_base_get_ac_path (NMVpnConnectionBase *self) return NM_VPN_CONNECTION_BASE_GET_PRIVATE (self)->ac_path; } +const char * +nm_vpn_connection_base_get_specific_object (NMVpnConnectionBase *self) +{ + return NM_VPN_CONNECTION_BASE_GET_PRIVATE (self)->specific_object; +} + void nm_vpn_connection_base_export (NMVpnConnectionBase *self, - NMConnection *connection) + NMConnection *connection, + const char *specific_object) { NMVpnConnectionBasePrivate *priv = NM_VPN_CONNECTION_BASE_GET_PRIVATE (self); NMDBusManager *dbus_mgr; @@ -101,6 +109,7 @@ nm_vpn_connection_base_export (NMVpnConnectionBase *self, g_return_if_fail (priv->connection == NULL); priv->connection = g_object_ref (connection); + priv->specific_object = g_strdup (specific_object); dbus_mgr = nm_dbus_manager_get (); dbus_g_connection_register_g_object (nm_dbus_manager_get_connection (dbus_mgr), @@ -128,6 +137,7 @@ dispose (GObject *object) priv->disposed = TRUE; g_free (priv->ac_path); + g_free (priv->specific_object); g_object_unref (priv->connection); } @@ -145,10 +155,10 @@ get_property (GObject *object, guint prop_id, g_value_set_boxed (value, nm_connection_get_path (priv->connection)); break; case PROP_UUID: - g_value_set_boxed (value, nm_connection_get_uuid (priv->connection)); + g_value_set_string (value, nm_connection_get_uuid (priv->connection)); break; case PROP_SPECIFIC_OBJECT: - g_value_set_boxed (value, priv->ac_path); + g_value_set_boxed (value, priv->specific_object); break; case PROP_DEVICES: g_value_take_boxed (value, g_ptr_array_new ()); diff --git a/src/vpn-manager/nm-vpn-connection-base.h b/src/vpn-manager/nm-vpn-connection-base.h index 0c17d9e8..6f19e7c5 100644 --- a/src/vpn-manager/nm-vpn-connection-base.h +++ b/src/vpn-manager/nm-vpn-connection-base.h @@ -44,8 +44,11 @@ GType nm_vpn_connection_base_get_type (void); const char *nm_vpn_connection_base_get_ac_path (NMVpnConnectionBase *self); +const char *nm_vpn_connection_base_get_specific_object (NMVpnConnectionBase *self); + void nm_vpn_connection_base_export (NMVpnConnectionBase *self, - NMConnection *connection); + NMConnection *connection, + const char *specific_object); void nm_vpn_connection_base_set_state (NMVpnConnectionBase *self, NMVPNConnectionState vpn_state); diff --git a/src/vpn-manager/nm-vpn-connection.c b/src/vpn-manager/nm-vpn-connection.c index 067b2dce..73f2b553 100644 --- a/src/vpn-manager/nm-vpn-connection.c +++ b/src/vpn-manager/nm-vpn-connection.c @@ -46,6 +46,7 @@ #include "NetworkManagerUtils.h" #include "nm-dns-manager.h" #include "nm-netlink-monitor.h" +#include "nm-netlink-utils.h" #include "nm-glib-compat.h" #include "settings/nm-settings-connection.h" @@ -86,6 +87,7 @@ typedef struct { NMIP4Config *ip4_config; guint32 ip4_internal_gw; char *ip_iface; + int ip_ifindex; char *banner; struct rtnl_route *gw_route; @@ -219,6 +221,7 @@ device_ip4_config_changed (NMDevice *device, NMVPNConnection * nm_vpn_connection_new (NMConnection *connection, NMDevice *parent_device, + const char *specific_object, gboolean user_requested, gulong user_uid) { @@ -247,7 +250,7 @@ nm_vpn_connection_new (NMConnection *connection, G_CALLBACK (device_ip4_config_changed), self); - nm_vpn_connection_base_export (NM_VPN_CONNECTION_BASE (self), connection); + nm_vpn_connection_base_export (NM_VPN_CONNECTION_BASE (self), connection, specific_object); return self; } @@ -283,6 +286,28 @@ plugin_failed (DBusGProxy *proxy, } } +static const char * +vpn_state_to_string (NMVPNServiceState state) +{ + switch (state) { + case NM_VPN_SERVICE_STATE_INIT: + return "init"; + case NM_VPN_SERVICE_STATE_SHUTDOWN: + return "shutdown"; + case NM_VPN_SERVICE_STATE_STARTING: + return "starting"; + case NM_VPN_SERVICE_STATE_STARTED: + return "started"; + case NM_VPN_SERVICE_STATE_STOPPING: + return "stopping"; + case NM_VPN_SERVICE_STATE_STOPPED: + return "stopped"; + default: + break; + } + return "unknown"; +} + static void plugin_state_changed (DBusGProxy *proxy, NMVPNServiceState state, @@ -291,7 +316,8 @@ plugin_state_changed (DBusGProxy *proxy, NMVPNConnection *connection = NM_VPN_CONNECTION (user_data); NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection); - nm_log_info (LOGD_VPN, "VPN plugin state changed: %d", state); + nm_log_info (LOGD_VPN, "VPN plugin state changed: %s (%d)", + vpn_state_to_string (state), state); if (state == NM_VPN_SERVICE_STATE_STOPPED) { /* Clear connection secrets to ensure secrets get requested each time the @@ -424,6 +450,13 @@ nm_vpn_connection_ip4_config_get (DBusGProxy *proxy, goto error; } + /* Grab the interface index for address/routing operations */ + priv->ip_ifindex = nm_netlink_iface_to_index (priv->ip_iface); + if (!priv->ip_ifindex) { + nm_log_err (LOGD_VPN, "(%s): failed to look up VPN interface index", priv->ip_iface); + goto error; + } + addr = nm_ip4_address_new (); nm_ip4_address_set_prefix (addr, 24); /* default to class C */ @@ -529,9 +562,9 @@ nm_vpn_connection_ip4_config_get (DBusGProxy *proxy, s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (priv->connection, NM_TYPE_SETTING_IP4_CONFIG)); nm_utils_merge_ip4_config (config, s_ip4); - nm_system_device_set_up_down_with_iface (priv->ip_iface, TRUE, NULL); + nm_system_iface_set_up (priv->ip_ifindex, TRUE, NULL); - if (nm_system_apply_ip4_config (priv->ip_iface, config, 0, NM_IP4_COMPARE_FLAG_ALL)) { + if (nm_system_apply_ip4_config (priv->ip_ifindex, config, 0, NM_IP4_COMPARE_FLAG_ALL)) { NMDnsManager *dns_mgr; /* Add any explicit route to the VPN gateway through the parent device */ @@ -765,6 +798,14 @@ nm_vpn_connection_get_ip_iface (NMVPNConnection *connection) return NM_VPN_CONNECTION_GET_PRIVATE (connection)->ip_iface; } +int +nm_vpn_connection_get_ip_ifindex (NMVPNConnection *connection) +{ + g_return_val_if_fail (NM_IS_VPN_CONNECTION (connection), -1); + + return NM_VPN_CONNECTION_GET_PRIVATE (connection)->ip_ifindex; +} + NMDevice * nm_vpn_connection_get_parent_device (NMVPNConnection *connection) { @@ -940,11 +981,11 @@ vpn_cleanup (NMVPNConnection *connection) { NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection); - if (priv->ip_iface) { - nm_system_device_set_up_down_with_iface (priv->ip_iface, FALSE, NULL); + if (priv->ip_ifindex) { + nm_system_iface_set_up (priv->ip_ifindex, FALSE, NULL); /* FIXME: use AF_UNSPEC here when we have IPv6 support */ - nm_system_device_flush_routes_with_iface (priv->ip_iface, AF_INET); - nm_system_device_flush_addresses_with_iface (priv->ip_iface); + nm_system_iface_flush_routes (priv->ip_ifindex, AF_INET); + nm_system_iface_flush_addresses (priv->ip_ifindex, AF_UNSPEC); } if (priv->ip4_config) { @@ -958,12 +999,12 @@ vpn_cleanup (NMVPNConnection *connection) /* Remove any previously added VPN gateway host route */ if (priv->gw_route) - rtnl_route_del (nm_netlink_get_default_handle (), priv->gw_route, 0); + nm_netlink_route_delete (priv->gw_route); /* Reset routes and addresses of the currently active device */ parent_config = nm_device_get_ip4_config (priv->parent_dev); if (parent_config) { - if (!nm_system_apply_ip4_config (nm_device_get_ip_iface (priv->parent_dev), + if (!nm_system_apply_ip4_config (nm_device_get_ip_ifindex (priv->parent_dev), nm_device_get_ip4_config (priv->parent_dev), nm_device_get_priority (priv->parent_dev), NM_IP4_COMPARE_FLAG_ADDRESSES | NM_IP4_COMPARE_FLAG_ROUTES)) { @@ -982,6 +1023,7 @@ vpn_cleanup (NMVPNConnection *connection) g_free (priv->ip_iface); priv->ip_iface = NULL; + priv->ip_ifindex = 0; /* Clear out connection secrets to ensure that the settings service * gets asked for them next time the connection is activated. diff --git a/src/vpn-manager/nm-vpn-connection.h b/src/vpn-manager/nm-vpn-connection.h index ee8eb5b6..c0d15f8a 100644 --- a/src/vpn-manager/nm-vpn-connection.h +++ b/src/vpn-manager/nm-vpn-connection.h @@ -57,12 +57,14 @@ GType nm_vpn_connection_get_type (void); NMVPNConnection * nm_vpn_connection_new (NMConnection *connection, NMDevice *parent_device, + const char *specific_object, gboolean user_requested, gulong user_uid); void nm_vpn_connection_activate (NMVPNConnection *connection); NMConnection * nm_vpn_connection_get_connection (NMVPNConnection *connection); const char * nm_vpn_connection_get_active_connection_path (NMVPNConnection *connection); +const char * nm_vpn_connection_get_specific_object_path (NMVPNConnection *connection); const char * nm_vpn_connection_get_name (NMVPNConnection *connection); NMVPNConnectionState nm_vpn_connection_get_vpn_state (NMVPNConnection *connection); const char * nm_vpn_connection_get_banner (NMVPNConnection *connection); @@ -72,6 +74,7 @@ void nm_vpn_connection_disconnect (NMVPNConnection *connect NMVPNConnectionStateReason reason); NMIP4Config * nm_vpn_connection_get_ip4_config (NMVPNConnection *connection); const char * nm_vpn_connection_get_ip_iface (NMVPNConnection *connection); +int nm_vpn_connection_get_ip_ifindex (NMVPNConnection *connection); NMDevice * nm_vpn_connection_get_parent_device (NMVPNConnection *connection); guint32 nm_vpn_connection_get_ip4_internal_gateway (NMVPNConnection *connection); diff --git a/src/vpn-manager/nm-vpn-manager.c b/src/vpn-manager/nm-vpn-manager.c index 6772bb18..41e96c0b 100644 --- a/src/vpn-manager/nm-vpn-manager.c +++ b/src/vpn-manager/nm-vpn-manager.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) 2005 - 2010 Red Hat, Inc. + * Copyright (C) 2005 - 2011 Red Hat, Inc. * Copyright (C) 2006 - 2008 Novell, Inc. */ @@ -162,6 +162,7 @@ NMVPNConnection * nm_vpn_manager_activate_connection (NMVPNManager *manager, NMConnection *connection, NMDevice *device, + const char *specific_object, gboolean user_requested, gulong user_uid, GError **error) @@ -209,7 +210,7 @@ nm_vpn_manager_activate_connection (NMVPNManager *manager, return NULL; } - vpn = nm_vpn_service_activate (service, connection, device, user_requested, user_uid, error); + vpn = nm_vpn_service_activate (service, connection, device, specific_object, user_requested, user_uid, error); if (vpn) { g_signal_connect (vpn, "vpn-state-changed", G_CALLBACK (connection_vpn_state_changed), @@ -306,9 +307,9 @@ nm_vpn_manager_get_active_connections (NMVPNManager *self) return list; } -NMConnection * -nm_vpn_manager_get_connection_for_active (NMVPNManager *manager, - const char *active_path) +NMVPNConnection * +nm_vpn_manager_get_vpn_connection_for_active (NMVPNManager *manager, + const char *active_path) { NMVPNManagerPrivate *priv; GHashTableIter iter; @@ -327,13 +328,24 @@ nm_vpn_manager_get_connection_for_active (NMVPNManager *manager, ac_path = nm_vpn_connection_get_active_connection_path (vpn); if (ac_path && !strcmp (ac_path, active_path)) - return nm_vpn_connection_get_connection (vpn); + return vpn; } } return NULL; } +NMConnection * +nm_vpn_manager_get_connection_for_active (NMVPNManager *manager, + const char *active_path) +{ + NMVPNConnection *vpn_con; + + vpn_con = nm_vpn_manager_get_vpn_connection_for_active (manager, active_path); + + return vpn_con ? nm_vpn_connection_get_connection (vpn_con) : NULL; +} + static char * service_name_from_file (const char *path) { diff --git a/src/vpn-manager/nm-vpn-manager.h b/src/vpn-manager/nm-vpn-manager.h index a899122c..78a5220b 100644 --- a/src/vpn-manager/nm-vpn-manager.h +++ b/src/vpn-manager/nm-vpn-manager.h @@ -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) 2005 - 2008 Red Hat, Inc. + * Copyright (C) 2005 - 2011 Red Hat, Inc. * Copyright (C) 2006 - 2008 Novell, Inc. */ @@ -69,6 +69,7 @@ NMVPNManager *nm_vpn_manager_get (void); NMVPNConnection *nm_vpn_manager_activate_connection (NMVPNManager *manager, NMConnection *connection, NMDevice *device, + const char *specific_object, gboolean user_requested, gulong user_uid, GError **error); @@ -83,7 +84,10 @@ void nm_vpn_manager_add_active_connections (NMVPNManager *manager, GSList *nm_vpn_manager_get_active_connections (NMVPNManager *manager); +NMVPNConnection *nm_vpn_manager_get_vpn_connection_for_active (NMVPNManager *manager, + const char *active_path); + NMConnection *nm_vpn_manager_get_connection_for_active (NMVPNManager *manager, const char *active_path); -#endif /* NM_VPN_VPN_MANAGER_H */ +#endif /* NM_VPN_MANAGER_H */ diff --git a/src/vpn-manager/nm-vpn-service.c b/src/vpn-manager/nm-vpn-service.c index ed08a40a..95e4f2b1 100644 --- a/src/vpn-manager/nm-vpn-service.c +++ b/src/vpn-manager/nm-vpn-service.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) 2005 - 2010 Red Hat, Inc. + * Copyright (C) 2005 - 2011 Red Hat, Inc. * Copyright (C) 2005 - 2008 Novell, Inc. */ @@ -324,6 +324,7 @@ NMVPNConnection * nm_vpn_service_activate (NMVPNService *service, NMConnection *connection, NMDevice *device, + const char *specific_object, gboolean user_requested, gulong user_uid, GError **error) @@ -341,7 +342,7 @@ nm_vpn_service_activate (NMVPNService *service, clear_quit_timeout (service); - vpn = nm_vpn_connection_new (connection, device, user_requested, user_uid); + vpn = nm_vpn_connection_new (connection, device, specific_object, user_requested, user_uid); g_signal_connect (vpn, "vpn-state-changed", G_CALLBACK (connection_vpn_state_changed), service); diff --git a/src/vpn-manager/nm-vpn-service.h b/src/vpn-manager/nm-vpn-service.h index cbe394ca..e8b1cfc4 100644 --- a/src/vpn-manager/nm-vpn-service.h +++ b/src/vpn-manager/nm-vpn-service.h @@ -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) 2005 - 2008 Red Hat, Inc. + * Copyright (C) 2005 - 2011 Red Hat, Inc. * Copyright (C) 2005 - 2008 Novell, Inc. */ @@ -57,6 +57,7 @@ const char *nm_vpn_service_get_name_file (NMVPNService *service); NMVPNConnection * nm_vpn_service_activate (NMVPNService *service, NMConnection *connection, NMDevice *device, + const char *specific_object, gboolean user_requested, gulong user_uid, GError **error); diff --git a/src/wimax/Makefile.in b/src/wimax/Makefile.in index e6064bc6..1be78482 100644 --- a/src/wimax/Makefile.in +++ b/src/wimax/Makefile.in @@ -186,8 +186,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/src/wimax/iwmxsdk.c b/src/wimax/iwmxsdk.c index dd78d5a4..9c3a78bb 100644 --- a/src/wimax/iwmxsdk.c +++ b/src/wimax/iwmxsdk.c @@ -27,7 +27,8 @@ #include #include #include -#include +#include +#include #include @@ -190,6 +191,7 @@ typedef struct { WIMAX_API_DEVICE_STATUS new_status; WIMAX_API_DEVICE_STATUS old_status; WIMAX_API_STATUS_REASON reason; + WIMAX_API_CONNECTION_PROGRESS_INFO progress; } StateChangeInfo; static gboolean @@ -202,6 +204,7 @@ state_change_handler(gpointer user_data) info->new_status, info->old_status, info->reason, + info->progress, info->wmxsdk->callback_data); } wmxsdk_unref(info->wmxsdk); @@ -214,7 +217,8 @@ static void _schedule_state_change(struct wmxsdk *wmxsdk, WIMAX_API_DEVICE_STATUS new_status, WIMAX_API_DEVICE_STATUS old_status, - WIMAX_API_STATUS_REASON reason) + WIMAX_API_STATUS_REASON reason, + WIMAX_API_CONNECTION_PROGRESS_INFO progress) { StateChangeInfo *info; @@ -227,6 +231,7 @@ _schedule_state_change(struct wmxsdk *wmxsdk, info->new_status = new_status; info->old_status = old_status; info->reason = reason; + info->progress = progress; wmxsdk_ref(wmxsdk); g_idle_add(state_change_handler, info); @@ -476,6 +481,48 @@ const char *iwmx_sdk_media_status_to_str(WIMAX_API_MEDIA_STATUS status) } } +const char * +iwmx_sdk_con_progress_to_str(WIMAX_API_CONNECTION_PROGRESS_INFO progress) +{ + switch (progress) { + + /**< Device is in Ranging */ + case WIMAX_API_DEVICE_CONNECTION_PROGRESS_Ranging: + return "ranging"; + + /**< Device is in SBC */ + case WIMAX_API_DEVICE_CONNECTION_PROGRESS_SBC: + return "sbc"; + + /**< Device is in EAP authentication Device */ + case WIMAX_API_DEVICE_CONNECTION_PROGRESS_EAP_authentication_Device: + return "eap-auth-device"; + + /**< Device is in EAP authentication User */ + case WIMAX_API_DEVICE_CONNECTION_PROGRESS_EAP_authentication_User: + return "eap-auth-user"; + + /**< Device is in 3-way-handshake */ + case WIMAX_API_DEVICE_CONNECTION_PROGRESS_3_way_handshake: + return "3way-handshake"; + + /**< Device is in Registration */ + case WIMAX_API_DEVICE_CONNECTION_PROGRESS_Registration: + return "registration"; + + /**< Device is in De-registration */ + case WIMAX_API_DEVICE_CONNECTION_PROGRESS_De_registration: + return "deregistration"; + + /**< Device is registered (operational) */ + case WIMAX_API_DEVICE_CONNECTION_PROGRESS_Registered: + return "registered"; + + default: + return "unknown"; + } +} + /* * Get the device's status from the device * @@ -982,7 +1029,7 @@ static void __iwmx_sdk_state_change_cb(WIMAX_API_DEVICE_ID *device_id, wmxsdk->status = status; g_mutex_unlock(wmxsdk->status_mutex); - _schedule_state_change(wmxsdk, status, old_status, reason); + _schedule_state_change(wmxsdk, status, old_status, reason, pi); } /* @@ -1170,7 +1217,8 @@ static int iwmx_sdk_setup(struct wmxsdk *wmxsdk) _schedule_state_change(wmxsdk, status, WIMAX_API_DEVICE_STATUS_UnInitialized, - WIMAX_API_STATUS_REASON_Normal); + WIMAX_API_STATUS_REASON_Normal, + WIMAX_API_DEVICE_CONNECTION_PROGRESS_Ranging); return 0; @@ -1268,23 +1316,22 @@ void wmxsdk_unref(struct wmxsdk *wmxsdk) static void iwmx_sdk_dev_add(unsigned idx, unsigned api_idx, const char *name) { - int ifindex; struct wmxsdk *wmxsdk; const char *s; if (idx >= IWMX_SDK_DEV_MAX) { nm_log_err(LOGD_WIMAX, "BUG! idx (%u) >= IWMX_SDK_DEV_MAX (%u)", idx, IWMX_SDK_DEV_MAX); - goto error_bug; + return; } if (g_iwmx_sdk_devs[idx] != NULL) { nm_log_err(LOGD_WIMAX, "BUG! device index %u already enumerated?", idx); - goto error_bug; + return; } wmxsdk = wmxsdk_new(); if (wmxsdk == NULL) { nm_log_err(LOGD_WIMAX, "Can't allocate %zu bytes", sizeof(*wmxsdk)); - goto error_bug; + return; } /* @@ -1297,23 +1344,17 @@ static void iwmx_sdk_dev_add(unsigned idx, unsigned api_idx, const char *name) || sscanf(s, "if:%15[^ \f\n\r\t\v]", wmxsdk->ifname) != 1) { nm_log_err(LOGD_WIMAX, "Cannot extract network interface name off '%s'", name); - goto error_noifname; + goto error; } nm_log_dbg(LOGD_WIMAX, "network interface name: '%s'", wmxsdk->ifname); - ifindex = if_nametoindex(wmxsdk->ifname); - if (ifindex <= 0) { - nm_log_err(LOGD_WIMAX, "wxmsdk: %s: cannot find interface index", wmxsdk->ifname); - goto error_noifname; - } - strncpy(wmxsdk->name, name, sizeof(wmxsdk->name)); wmxsdk->device_id.privilege = WIMAX_API_PRIVILEGE_READ_WRITE; wmxsdk->device_id.deviceIndex = api_idx; if (iwmx_sdk_setup(wmxsdk) != 0) { nm_log_err(LOGD_WIMAX, "wxmsdk: %s: cannot set up interface", wmxsdk->ifname); - goto error_setup; + goto error; } g_iwmx_sdk_devs[idx] = wmxsdk; @@ -1322,10 +1363,8 @@ static void iwmx_sdk_dev_add(unsigned idx, unsigned api_idx, const char *name) iwmx_sdk_call_new_callbacks (wmxsdk); return; -error_setup: -error_noifname: +error: wmxsdk_unref(wmxsdk); -error_bug: return; } diff --git a/src/wimax/iwmxsdk.h b/src/wimax/iwmxsdk.h index bd55679a..1888b709 100644 --- a/src/wimax/iwmxsdk.h +++ b/src/wimax/iwmxsdk.h @@ -34,6 +34,7 @@ typedef void (*WimaxStateChangeFunc) (struct wmxsdk *wmxsdk, WIMAX_API_DEVICE_STATUS new_status, WIMAX_API_DEVICE_STATUS old_status, WIMAX_API_STATUS_REASON reason, + WIMAX_API_CONNECTION_PROGRESS_INFO info, void *user_data); typedef void (*WimaxMediaStatusFunc) (struct wmxsdk *wmxsdk, @@ -101,6 +102,7 @@ WIMAX_API_LINK_STATUS_INFO_EX *iwmx_sdk_get_link_status_info(struct wmxsdk *wmxs const char *iwmx_sdk_dev_status_to_str(WIMAX_API_DEVICE_STATUS status); const char *iwmx_sdk_reason_to_str(WIMAX_API_STATUS_REASON reason); const char *iwmx_sdk_media_status_to_str(WIMAX_API_MEDIA_STATUS status); +const char *iwmx_sdk_con_progress_to_str(WIMAX_API_CONNECTION_PROGRESS_INFO progress); int iwmx_sdk_rf_state_set(struct wmxsdk *wmxsdk, WIMAX_API_RF_STATE rf_state); int iwmx_sdk_get_networks(struct wmxsdk *wmxsdk); int iwmx_sdk_api_init(void); diff --git a/src/wimax/nm-device-wimax.c b/src/wimax/nm-device-wimax.c index 9dff503d..2d8553a0 100644 --- a/src/wimax/nm-device-wimax.c +++ b/src/wimax/nm-device-wimax.c @@ -23,7 +23,8 @@ #include #include #include -#include +#include +#include #include #include @@ -91,6 +92,9 @@ typedef struct { struct ether_addr hw_addr; guint activation_timeout_id; + /* Track whether stage1 (Prepare) is completed yet or not */ + gboolean prepare_done; + guint sdk_action_defer_id; guint link_timeout_id; @@ -231,27 +235,25 @@ set_current_nsp (NMDeviceWimax *self, NMWimaxNsp *new_nsp) { NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self); NMWimaxNsp *old_nsp; - char *old_path = NULL; + gboolean path_changed = FALSE; old_nsp = priv->current_nsp; - if (old_nsp) { - old_path = g_strdup (nm_wimax_nsp_get_dbus_path (old_nsp)); - priv->current_nsp = NULL; - } + priv->current_nsp = NULL; if (new_nsp) priv->current_nsp = g_object_ref (new_nsp); - if (old_nsp) - g_object_unref (old_nsp); + if (old_nsp && new_nsp) { + path_changed = (g_strcmp0 (nm_wimax_nsp_get_dbus_path (old_nsp), + nm_wimax_nsp_get_dbus_path (new_nsp)) != 0); + } /* Only notify if it's really changed */ - if ( (!old_path && new_nsp) - || (old_path && !new_nsp) - || (old_path && new_nsp && strcmp (old_path, nm_wimax_nsp_get_dbus_path (new_nsp)))) + if (old_nsp != new_nsp || path_changed) g_object_notify (G_OBJECT (self), NM_DEVICE_WIMAX_ACTIVE_NSP); - g_free (old_path); + if (old_nsp) + g_object_unref (old_nsp); } NMWimaxNsp * @@ -390,7 +392,7 @@ real_take_down (NMDevice *device) static gboolean real_hw_is_up (NMDevice *device) { - return nm_system_device_is_up (device); + return nm_system_iface_is_up (nm_device_get_ip_ifindex (device)); } static gboolean @@ -401,13 +403,13 @@ real_hw_bring_up (NMDevice *dev, gboolean *no_firmware) if (!priv->enabled || !priv->wimaxd_enabled) return FALSE; - return nm_system_device_set_up_down (dev, TRUE, no_firmware); + return nm_system_iface_set_up (nm_device_get_ip_ifindex (dev), TRUE, no_firmware); } static void real_hw_take_down (NMDevice *dev) { - nm_system_device_set_up_down (dev, FALSE, NULL); + nm_system_iface_set_up (nm_device_get_ip_ifindex (dev), FALSE, NULL); } static void @@ -749,6 +751,8 @@ real_act_stage1_prepare (NMDevice *device, NMDeviceStateReason *reason) set_current_nsp (NM_DEVICE_WIMAX (device), nsp); + priv->prepare_done = TRUE; + /* If the device is scanning, it won't connect, so we have to wait until * it's not scanning to proceed to stage 2. */ @@ -853,6 +857,7 @@ wmx_state_change_cb (struct wmxsdk *wmxsdk, WIMAX_API_DEVICE_STATUS new_status, WIMAX_API_DEVICE_STATUS old_status, WIMAX_API_STATUS_REASON reason, + WIMAX_API_CONNECTION_PROGRESS_INFO progress, void *user_data) { NMDeviceWimax *self = NM_DEVICE_WIMAX (user_data); @@ -862,10 +867,17 @@ wmx_state_change_cb (struct wmxsdk *wmxsdk, gboolean old_available = FALSE; const char *nsp_name = NULL; + iface = nm_device_get_iface (NM_DEVICE (self)); + nm_log_info (LOGD_WIMAX, "(%s): wimax state change %s -> %s (%s (%d))", + iface, + iwmx_sdk_dev_status_to_str (old_status), + iwmx_sdk_dev_status_to_str (new_status), + iwmx_sdk_con_progress_to_str (progress), + progress); + if (new_status == old_status) return; - iface = nm_device_get_iface (NM_DEVICE (self)); state = nm_device_interface_get_state (NM_DEVICE_INTERFACE (self)); old_available = nm_device_is_available (NM_DEVICE (self)); @@ -873,12 +885,6 @@ wmx_state_change_cb (struct wmxsdk *wmxsdk, if (priv->current_nsp) nsp_name = nm_wimax_nsp_get_name (priv->current_nsp); - nm_log_info (LOGD_WIMAX, "(%s): wimax state change %s -> %s (reason %d)", - iface, - iwmx_sdk_dev_status_to_str (old_status), - iwmx_sdk_dev_status_to_str (new_status), - reason); - switch (new_status) { case WIMAX_API_DEVICE_STATUS_UnInitialized: case WIMAX_API_DEVICE_STATUS_RF_OFF_HW_SW: @@ -936,7 +942,7 @@ wmx_state_change_cb (struct wmxsdk *wmxsdk, * then check if we need to move to stage2 now that the device might be * ready. */ - if (state == NM_DEVICE_STATE_PREPARE) { + if (state == NM_DEVICE_STATE_PREPARE && priv->prepare_done) { if ( new_status == WIMAX_API_DEVICE_STATUS_Ready || new_status == WIMAX_API_DEVICE_STATUS_Connecting) { nm_device_activate_schedule_stage2_device_config (NM_DEVICE (self)); @@ -1003,7 +1009,7 @@ wmx_media_status_cb (struct wmxsdk *wmxsdk, break; case WIMAX_API_MEDIA_STATUS_LINK_DOWN: nm_log_dbg (LOGD_WIMAX, "(%s): starting link timeout", iface); - priv->link_timeout_id = g_timeout_add (15, link_timeout_cb, self); + priv->link_timeout_id = g_timeout_add_seconds (15, link_timeout_cb, self); break; case WIMAX_API_MEDIA_STATUS_LINK_RENEW: nm_log_dbg (LOGD_WIMAX, "(%s): renewing DHCP lease", iface); @@ -1130,18 +1136,22 @@ wmx_removed_cb (struct wmxsdk *wmxsdk, void *user_data) NMDeviceWimax *self = NM_DEVICE_WIMAX (user_data); NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self); - if (priv->sdk) { - /* Clear callbacks just in case we don't hold the last reference */ - iwmx_sdk_set_callbacks (priv->sdk, NULL, NULL, NULL, NULL, NULL, NULL); + if (!priv->sdk) { + nm_log_dbg (LOGD_WIMAX, "(%s): removed unhandled WiMAX interface", wmxsdk->ifname); + return; + } - wmxsdk_unref (priv->sdk); - priv->sdk = NULL; + nm_log_dbg (LOGD_WIMAX, "(%s): removed WiMAX interface", wmxsdk->ifname); - priv->status = WIMAX_API_DEVICE_STATUS_UnInitialized; - nm_device_state_changed (NM_DEVICE (self), - NM_DEVICE_STATE_UNAVAILABLE, - NM_DEVICE_STATE_REASON_NONE); - } + /* Clear callbacks just in case we don't hold the last reference */ + iwmx_sdk_set_callbacks (priv->sdk, NULL, NULL, NULL, NULL, NULL, NULL); + wmxsdk_unref (priv->sdk); + priv->sdk = NULL; + + priv->status = WIMAX_API_DEVICE_STATUS_UnInitialized; + nm_device_state_changed (NM_DEVICE (self), + NM_DEVICE_STATE_UNAVAILABLE, + NM_DEVICE_STATE_REASON_NONE); } /*************************************************************************/ @@ -1277,6 +1287,9 @@ device_state_changed (NMDevice *device, NMDeviceWimax *self = NM_DEVICE_WIMAX (device); NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self); + /* Reset our stage1 (Prepare) done marker since it's only valid while in stage1 */ + priv->prepare_done = FALSE; + if (new_state < NM_DEVICE_STATE_DISCONNECTED) remove_all_nsps (self); @@ -1323,21 +1336,27 @@ wmx_new_sdk_cb (struct wmxsdk *sdk, void *user_data) NMDeviceWimax *self = NM_DEVICE_WIMAX (user_data); NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self); - /* If we now have the SDK, schedule an idle handler to start the device up */ - if (!priv->sdk) { - priv->sdk = wmxsdk_ref (sdk); - iwmx_sdk_set_callbacks(priv->sdk, - wmx_state_change_cb, - wmx_media_status_cb, - wmx_connect_result_cb, - wmx_scan_result_cb, - wmx_removed_cb, - self); - iwmx_sdk_set_fast_reconnect_enabled (priv->sdk, 0); - - if (!priv->sdk_action_defer_id) - priv->sdk_action_defer_id = g_idle_add (sdk_action_defer_cb, self); + /* We only track one wmxsdk at a time because the WiMAX SDK is pretty stupid */ + if (priv->sdk) { + nm_log_dbg (LOGD_WIMAX, "(%s): WiMAX interface already known", sdk->ifname); + return; } + + nm_log_dbg (LOGD_WIMAX, "(%s): new WiMAX interface (%s)", sdk->ifname, sdk->name); + + /* Now that we have an SDK, schedule an idle handler to start the device up */ + priv->sdk = wmxsdk_ref (sdk); + iwmx_sdk_set_callbacks(priv->sdk, + wmx_state_change_cb, + wmx_media_status_cb, + wmx_connect_result_cb, + wmx_scan_result_cb, + wmx_removed_cb, + self); + iwmx_sdk_set_fast_reconnect_enabled (priv->sdk, 0); + + if (!priv->sdk_action_defer_id) + priv->sdk_action_defer_id = g_idle_add (sdk_action_defer_cb, self); } /*************************************************************************/ diff --git a/test/Makefile.in b/test/Makefile.in index 852e33b2..456a2648 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -205,8 +205,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ diff --git a/tools/Makefile.in b/tools/Makefile.in index 2ff9f088..5f0ecb3b 100644 --- a/tools/Makefile.in +++ b/tools/Makefile.in @@ -152,8 +152,16 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ +LIBNL1_CFLAGS = @LIBNL1_CFLAGS@ +LIBNL1_LIBS = @LIBNL1_LIBS@ +LIBNL2_CFLAGS = @LIBNL2_CFLAGS@ +LIBNL2_LIBS = @LIBNL2_LIBS@ +LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ +LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ LIBNL_LIBS = @LIBNL_LIBS@ +LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ +LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ -- cgit 1.3.0-6-gf8a5