summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2011-01-02 17:24:23 -0600
committerDan Williams <dcbw@redhat.com>2011-01-02 17:24:23 -0600
commit0587ef1179c7abb1c83ff5d12ce8e1b587ed0625 (patch)
tree7e66edf56183e99552e17044433e6eb234359d0b
parentb2f9747dba513fd34dac2b427ad1e0ac6ccb31e9 (diff)
parent15a9f29a14783fcd1b8e936a8338452737825726 (diff)
downloadNetworkManager-0587ef1179c7abb1c83ff5d12ce8e1b587ed0625.tar.gz
Merge remote branch 'origin/master' into wimax
-rw-r--r--.gitignore6
-rw-r--r--ChangeLog6
-rw-r--r--Makefile.am7
-rw-r--r--README4
-rw-r--r--callouts/Makefile.am2
-rw-r--r--callouts/nm-dispatcher-action.c8
-rw-r--r--cli/src/connections.c32
-rw-r--r--cli/src/devices.c135
-rw-r--r--cli/src/network-manager.c121
-rw-r--r--cli/src/nmcli.c1
-rw-r--r--cli/src/nmcli.h1
-rw-r--r--cli/src/settings.c58
-rw-r--r--configure.ac113
-rw-r--r--data/Makefile.am26
-rw-r--r--data/NetworkManager.service.in12
-rw-r--r--data/org.freedesktop.NetworkManager.service.in11
-rw-r--r--docs/Makefile.am4
-rw-r--r--examples/C/Makefile.am54
-rw-r--r--examples/C/add-connection-glib.c113
-rw-r--r--examples/C/get-active-connections.c248
-rw-r--r--examples/C/get-ap-info-libnm-glib.c229
-rw-r--r--examples/C/list-connections-dbus.c83
-rw-r--r--examples/C/list-connections-libnm-glib.c178
-rw-r--r--examples/Makefile.am4
-rw-r--r--examples/python/Makefile.am3
-rwxr-xr-xexamples/python/disconnect-device.py62
-rw-r--r--examples/python/nm-state.py6
-rw-r--r--include/NetworkManager.h4
-rw-r--r--include/NetworkManagerVPN.h3
-rw-r--r--initscript/Makefile.am3
-rwxr-xr-xinitscript/RedHat/NetworkManager.in2
-rw-r--r--initscript/linexa/Makefile.am6
-rw-r--r--initscript/linexa/networkmanager.in59
-rw-r--r--introspection/nm-device-ethernet.xml8
-rw-r--r--introspection/nm-device-wifi.xml9
-rw-r--r--introspection/nm-device.xml19
-rw-r--r--introspection/nm-manager-client.xml18
-rw-r--r--introspection/nm-manager.xml68
-rw-r--r--libnm-glib/Makefile.am40
-rw-r--r--libnm-glib/libnm-glib.ver10
-rw-r--r--libnm-glib/nm-client.c278
-rw-r--r--libnm-glib/nm-client.h28
-rw-r--r--libnm-glib/nm-device-ethernet.c69
-rw-r--r--libnm-glib/nm-device-ethernet.h4
-rw-r--r--libnm-glib/nm-device-wifi.c69
-rw-r--r--libnm-glib/nm-device-wifi.h4
-rw-r--r--libnm-glib/nm-device.c153
-rw-r--r--libnm-glib/nm-device.h30
-rw-r--r--libnm-glib/nm-dhcp4-config.c8
-rw-r--r--libnm-glib/nm-dhcp6-config.c6
-rw-r--r--libnm-glib/nm-ip6-config.c12
-rw-r--r--libnm-glib/nm-object.c36
-rw-r--r--libnm-glib/nm-remote-connection.c2
-rw-r--r--libnm-glib/nm-remote-settings.c24
-rw-r--r--libnm-glib/nm-settings-interface.c4
-rw-r--r--libnm-glib/nm-settings-interface.h5
-rw-r--r--libnm-glib/nm-types.c12
-rw-r--r--libnm-util/Makefile.am2
-rw-r--r--libnm-util/crypto.c1
-rw-r--r--libnm-util/libnm-util.ver13
-rw-r--r--libnm-util/nm-connection.c48
-rw-r--r--libnm-util/nm-setting-gsm.c46
-rw-r--r--libnm-util/nm-setting-pppoe.c19
-rw-r--r--libnm-util/nm-setting-serial.c8
-rw-r--r--libnm-util/nm-setting-vpn.c14
-rw-r--r--libnm-util/nm-setting-wired.c414
-rw-r--r--libnm-util/nm-setting-wired.h37
-rw-r--r--libnm-util/nm-setting-wireless-security.c3
-rw-r--r--libnm-util/nm-setting-wireless.c103
-rw-r--r--libnm-util/nm-setting-wireless.h4
-rw-r--r--libnm-util/nm-setting.c2
-rw-r--r--libnm-util/nm-utils.c301
-rw-r--r--libnm-util/nm-utils.h5
-rw-r--r--libnm-util/tests/test-general.c69
-rw-r--r--man/Makefile.am2
-rw-r--r--man/NetworkManager.8.in4
-rw-r--r--man/NetworkManager.conf.5.in55
-rw-r--r--man/nm-online.1.in64
-rw-r--r--man/nmcli.1.in69
-rw-r--r--po/LINGUAS2
-rw-r--r--po/POTFILES.in7
-rw-r--r--po/ar.po4
-rw-r--r--po/as.po4
-rw-r--r--po/be@latin.po4
-rw-r--r--po/bg.po1927
-rw-r--r--po/bn_IN.po1148
-rw-r--r--po/ca.po4
-rw-r--r--po/cs.po1594
-rw-r--r--po/de.po1373
-rw-r--r--po/el.po1596
-rw-r--r--po/en_GB.po4
-rw-r--r--po/eo.po1766
-rw-r--r--po/es.po1536
-rw-r--r--po/et.po4
-rw-r--r--po/eu.po4
-rw-r--r--po/fi.po4
-rw-r--r--po/fr.po1616
-rw-r--r--po/gl.po1499
-rw-r--r--po/gu.po4
-rw-r--r--po/hi.po138
-rw-r--r--po/hu.po1499
-rw-r--r--po/id.po2175
-rw-r--r--po/it.po4
-rw-r--r--po/ja.po1141
-rw-r--r--po/kn.po235
-rw-r--r--po/ko.po4
-rw-r--r--po/lt.po1743
-rw-r--r--po/ml.po4
-rw-r--r--po/mr.po1261
-rw-r--r--po/nb.po4
-rw-r--r--po/nl.po4
-rw-r--r--po/oc.po4
-rw-r--r--po/or.po612
-rw-r--r--po/pa.po846
-rw-r--r--po/pl.po1751
-rw-r--r--po/pt_BR.po1395
-rw-r--r--po/ru.po10
-rw-r--r--po/sl.po2127
-rw-r--r--po/sr.po2256
-rw-r--r--po/sr@latin.po2256
-rw-r--r--po/sv.po1791
-rw-r--r--po/ta.po1806
-rw-r--r--po/te.po231
-rw-r--r--po/vi.po4
-rw-r--r--po/zh_CN.po716
-rw-r--r--po/zh_HK.po4
-rw-r--r--po/zh_TW.po4
-rw-r--r--policy/Makefile.am5
-rw-r--r--policy/org.freedesktop.NetworkManager.policy.in67
-rw-r--r--src/Makefile.am40
-rw-r--r--src/NetworkManager.conf24
-rw-r--r--src/NetworkManagerUtils.c96
-rw-r--r--src/NetworkManagerUtils.h3
-rw-r--r--src/backends/Makefile.am10
-rw-r--r--src/backends/NetworkManagerDebian.c7
-rw-r--r--src/backends/NetworkManagerExherbo.c64
-rw-r--r--src/backends/NetworkManagerGentoo.c49
-rw-r--r--src/backends/NetworkManagerLinexa.c66
-rw-r--r--src/bluez-manager/nm-bluez-manager.c6
-rw-r--r--src/dhcp-manager/Makefile.am40
-rw-r--r--src/dhcp-manager/nm-dhcp-client.c292
-rw-r--r--src/dhcp-manager/nm-dhcp-client.h17
-rw-r--r--src/dhcp-manager/nm-dhcp-dhclient-utils.c217
-rw-r--r--src/dhcp-manager/nm-dhcp-dhclient-utils.h35
-rw-r--r--src/dhcp-manager/nm-dhcp-dhclient.c280
-rw-r--r--src/dhcp-manager/nm-dhcp-dhcpcd.c87
-rw-r--r--src/dhcp-manager/nm-dhcp-manager.c50
-rw-r--r--src/dhcp-manager/tests/Makefile.am28
-rw-r--r--src/dhcp-manager/tests/test-dhcp-dhclient.c249
-rw-r--r--src/dns-manager/Makefile.am30
-rw-r--r--src/dns-manager/nm-dns-bind.c528
-rw-r--r--src/dns-manager/nm-dns-bind.h47
-rw-r--r--src/dns-manager/nm-dns-dnsmasq.c385
-rw-r--r--src/dns-manager/nm-dns-dnsmasq.h47
-rw-r--r--src/dns-manager/nm-dns-manager.c (renamed from src/named-manager/nm-named-manager.c)558
-rw-r--r--src/dns-manager/nm-dns-manager.h95
-rw-r--r--src/dns-manager/nm-dns-plugin.c319
-rw-r--r--src/dns-manager/nm-dns-plugin.h112
-rw-r--r--src/dns-manager/nm-dns-utils.c99
-rw-r--r--src/dns-manager/nm-dns-utils.h28
-rw-r--r--src/dnsmasq-manager/nm-dnsmasq-manager.c21
-rw-r--r--src/ip6-manager/Makefile.am3
-rw-r--r--src/ip6-manager/nm-ip6-manager.c398
-rw-r--r--src/logging/nm-logging.c6
-rw-r--r--src/logging/nm-logging.h1
-rw-r--r--src/main.c80
-rw-r--r--src/modem-manager/Makefile.am2
-rw-r--r--src/modem-manager/nm-modem.c6
-rw-r--r--src/named-manager/Makefile.am21
-rw-r--r--src/named-manager/nm-named-manager.h92
-rw-r--r--src/nm-device-ethernet.c698
-rw-r--r--src/nm-device-ethernet.h3
-rw-r--r--src/nm-device-interface.c42
-rw-r--r--src/nm-device-interface.h42
-rw-r--r--src/nm-device-modem.c12
-rw-r--r--src/nm-device-modem.h2
-rw-r--r--src/nm-device-private.h4
-rw-r--r--src/nm-device-wifi.c982
-rw-r--r--src/nm-device-wifi.h16
-rw-r--r--src/nm-device.c205
-rw-r--r--src/nm-device.h4
-rw-r--r--src/nm-ip4-config.c79
-rw-r--r--src/nm-ip4-config.h11
-rw-r--r--src/nm-ip6-config.c23
-rw-r--r--src/nm-manager-auth.c424
-rw-r--r--src/nm-manager-auth.h94
-rw-r--r--src/nm-manager.c2436
-rw-r--r--src/nm-manager.h15
-rw-r--r--src/nm-netlink-monitor.c4
-rw-r--r--src/nm-policy-hostname.c128
-rw-r--r--src/nm-policy-hostname.h10
-rw-r--r--src/nm-policy-hosts.c214
-rw-r--r--src/nm-policy-hosts.h12
-rw-r--r--src/nm-policy.c280
-rw-r--r--src/nm-system.c192
-rw-r--r--src/nm-system.h15
-rw-r--r--src/nm-wifi-ap.c326
-rw-r--r--src/nm-wifi-ap.h9
-rw-r--r--src/ppp-manager/Makefile.am2
-rw-r--r--src/ppp-manager/nm-ppp-manager.c33
-rw-r--r--src/supplicant-manager/Makefile.am3
-rw-r--r--src/supplicant-manager/nm-supplicant-config.c24
-rw-r--r--src/supplicant-manager/nm-supplicant-interface.c1583
-rw-r--r--src/supplicant-manager/nm-supplicant-interface.h77
-rw-r--r--src/supplicant-manager/nm-supplicant-manager.c427
-rw-r--r--src/supplicant-manager/nm-supplicant-manager.h44
-rw-r--r--src/supplicant-manager/nm-supplicant-settings-verify.c1
-rw-r--r--src/system-settings/Makefile.am2
-rw-r--r--src/system-settings/nm-default-wired-connection.c1
-rw-r--r--src/system-settings/nm-polkit-helpers.h17
-rw-r--r--src/system-settings/nm-sysconfig-connection.c12
-rw-r--r--src/system-settings/nm-sysconfig-settings.c31
-rw-r--r--src/system-settings/nm-system-config-interface.h8
-rw-r--r--src/tests/test-dhcp-options.c478
-rw-r--r--src/tests/test-policy-hosts.c326
-rw-r--r--src/vpn-manager/Makefile.am6
-rw-r--r--src/vpn-manager/nm-vpn-connection.c36
-rw-r--r--src/vpn-manager/nm-vpn-manager.c342
-rw-r--r--src/vpn-manager/nm-vpn-manager.h3
-rw-r--r--src/vpn-manager/nm-vpn-service.c308
-rw-r--r--src/vpn-manager/nm-vpn-service.h14
-rw-r--r--system-settings/plugins/Makefile.am4
-rw-r--r--system-settings/plugins/ifcfg-rh/Makefile.am2
-rw-r--r--system-settings/plugins/ifcfg-rh/common.h8
-rw-r--r--system-settings/plugins/ifcfg-rh/nm-ifcfg-connection.c22
-rw-r--r--system-settings/plugins/ifcfg-rh/plugin.c58
-rw-r--r--system-settings/plugins/ifcfg-rh/reader.c378
-rw-r--r--system-settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am11
-rw-r--r--system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bridge-component5
-rw-r--r--system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bridge-main7
-rw-r--r--system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-vlan-interface7
-rw-r--r--system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-wep-104-ascii14
-rw-r--r--system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-wep-40-ascii14
-rw-r--r--system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-dhcp6-only11
-rw-r--r--system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-qeth-static13
-rw-r--r--system-settings/plugins/ifcfg-rh/tests/network-scripts/keys-test-wifi-wep-104-ascii1
-rw-r--r--system-settings/plugins/ifcfg-rh/tests/network-scripts/keys-test-wifi-wep-40-ascii1
-rw-r--r--system-settings/plugins/ifcfg-rh/tests/test-ifcfg-rh-utils.c2
-rw-r--r--system-settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c1101
-rw-r--r--system-settings/plugins/ifcfg-rh/utils.c28
-rw-r--r--system-settings/plugins/ifcfg-rh/writer.c195
-rw-r--r--system-settings/plugins/ifnet/Makefile.am61
-rw-r--r--system-settings/plugins/ifnet/connection_parser.c2997
-rw-r--r--system-settings/plugins/ifnet/connection_parser.h43
-rw-r--r--system-settings/plugins/ifnet/net_parser.c635
-rw-r--r--system-settings/plugins/ifnet/net_parser.h46
-rw-r--r--system-settings/plugins/ifnet/net_utils.c932
-rw-r--r--system-settings/plugins/ifnet/net_utils.h80
-rw-r--r--system-settings/plugins/ifnet/nm-ifnet-connection.c251
-rw-r--r--system-settings/plugins/ifnet/nm-ifnet-connection.h49
-rw-r--r--system-settings/plugins/ifnet/plugin.c585
-rw-r--r--system-settings/plugins/ifnet/plugin.h47
-rw-r--r--system-settings/plugins/ifnet/tests/Makefile.am14
-rw-r--r--system-settings/plugins/ifnet/tests/hostname2
-rw-r--r--system-settings/plugins/ifnet/tests/net147
-rw-r--r--system-settings/plugins/ifnet/tests/net.all864
-rw-r--r--system-settings/plugins/ifnet/tests/nm-system-settings.conf5
-rw-r--r--system-settings/plugins/ifnet/tests/test_all.c379
-rw-r--r--system-settings/plugins/ifnet/tests/wpa_supplicant.conf876
-rw-r--r--system-settings/plugins/ifnet/wpa_parser.c558
-rw-r--r--system-settings/plugins/ifnet/wpa_parser.h40
-rw-r--r--system-settings/plugins/ifupdown/Makefile.am25
-rw-r--r--system-settings/plugins/ifupdown/interface_parser.c200
-rw-r--r--system-settings/plugins/ifupdown/interface_parser.h6
-rw-r--r--system-settings/plugins/ifupdown/nm-ifupdown-connection.h4
-rw-r--r--system-settings/plugins/ifupdown/plugin.c61
-rw-r--r--system-settings/plugins/ifupdown/tests/Makefile.am32
-rw-r--r--system-settings/plugins/ifupdown/tests/test-ifupdown.c496
-rw-r--r--system-settings/plugins/ifupdown/tests/test16
-rw-r--r--system-settings/plugins/ifupdown/tests/test115
-rw-r--r--system-settings/plugins/ifupdown/tests/test125
-rw-r--r--system-settings/plugins/ifupdown/tests/test133
-rw-r--r--system-settings/plugins/ifupdown/tests/test145
-rw-r--r--system-settings/plugins/ifupdown/tests/test153
-rw-r--r--system-settings/plugins/ifupdown/tests/test162
-rw-r--r--system-settings/plugins/ifupdown/tests/test24
-rw-r--r--system-settings/plugins/ifupdown/tests/test35
-rw-r--r--system-settings/plugins/ifupdown/tests/test43
-rw-r--r--system-settings/plugins/ifupdown/tests/test53
-rw-r--r--system-settings/plugins/ifupdown/tests/test63
-rw-r--r--system-settings/plugins/ifupdown/tests/test73
-rw-r--r--system-settings/plugins/ifupdown/tests/test85
-rw-r--r--system-settings/plugins/ifupdown/tests/test910
-rw-r--r--system-settings/plugins/keyfile/Makefile.am34
-rw-r--r--system-settings/plugins/keyfile/common.h40
-rw-r--r--system-settings/plugins/keyfile/errors.c35
-rw-r--r--system-settings/plugins/keyfile/io/Makefile.am20
-rw-r--r--system-settings/plugins/keyfile/nm-keyfile-connection.c124
-rw-r--r--system-settings/plugins/keyfile/nm-keyfile-connection.h2
-rw-r--r--system-settings/plugins/keyfile/plugin.c147
-rw-r--r--system-settings/plugins/keyfile/reader.c (renamed from system-settings/plugins/keyfile/io/reader.c)208
-rw-r--r--system-settings/plugins/keyfile/reader.h (renamed from system-settings/plugins/keyfile/io/reader.h)4
-rw-r--r--system-settings/plugins/keyfile/tests/Makefile.am4
-rw-r--r--system-settings/plugins/keyfile/tests/keyfiles/ATT_Data_Connect_BT23
-rw-r--r--system-settings/plugins/keyfile/tests/keyfiles/ATT_Data_Connect_Plain20
-rw-r--r--system-settings/plugins/keyfile/tests/keyfiles/Makefile.am5
-rw-r--r--system-settings/plugins/keyfile/tests/keyfiles/Test_String_SSID11
-rw-r--r--system-settings/plugins/keyfile/tests/test-keyfile.c726
-rw-r--r--system-settings/plugins/keyfile/utils.c97
-rw-r--r--system-settings/plugins/keyfile/utils.h30
-rw-r--r--system-settings/plugins/keyfile/writer.c (renamed from system-settings/plugins/keyfile/io/writer.c)84
-rw-r--r--system-settings/plugins/keyfile/writer.h (renamed from system-settings/plugins/keyfile/io/writer.h)0
-rw-r--r--test/Makefile.am4
-rwxr-xr-xtest/NMLoadModules61
-rw-r--r--test/nm-online.c4
-rw-r--r--test/nm-tool.c107
306 files changed, 55006 insertions, 14764 deletions
diff --git a/.gitignore b/.gitignore
index 2df9a0d4b0..201955cec8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -93,12 +93,14 @@ libnm-util/tests/test-need-secrets
libnm-util/tests/test-setting-8021x
src/tests/test-dhcp-options
src/tests/test-policy-hosts
+src/dhcp-manager/tests/test-dhcp-dhclient
system-settings/plugins/keyfile/tests/test-keyfile
system-settings/plugins/ifcfg-rh/tests/test-ifcfg-rh
system-settings/plugins/ifcfg-rh/tests/test-ifcfg-rh-utils
system-settings/plugins/ifcfg-rh/tests/network-scripts/Test_Write_*
system-settings/plugins/ifcfg-rh/tests/network-scripts/*-Test_Write_*
+system-settings/plugins/ifupdown/tests/test-ifupdown
m4/gtk-doc.m4
m4/intltool.m4
@@ -106,5 +108,9 @@ m4/libtool.m4
m4/lt*.m4
policy/org.freedesktop.network-manager-settings.system.policy
+policy/org.freedesktop.NetworkManager.policy
+
+data/NetworkManager.service
+data/org.freedesktop.NetworkManager.service
cli/src/nmcli
diff --git a/ChangeLog b/ChangeLog
index d529664b9e..b611b3d4f9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1317,7 +1317,7 @@
2008-09-30 Dan Williams <dcbw@redhat.com>
* src/NetworkManagerPolicy.c
- - (lookup_thread_worker): don't store the idle handler ID becuase the
+ - (lookup_thread_worker): don't store the idle handler ID because the
idle handler could have already run and freed the LookupThread
structure
@@ -8391,7 +8391,7 @@
internally; clients should provide a setting that applies to
the device with 'autoconnect: True'. Problem was that these
internally auto-created connections don't have a proxy or service
- name becuase they weren't created by a settings daemon, and therefore
+ name because they weren't created by a settings daemon, and therefore
clients have no idea what to do with them.
2007-10-03 Dan Williams <dcbw@redhat.com>
@@ -9794,7 +9794,7 @@
* libnm-glib/nm-settings.c
libnm-glib/nm-settings.h
- make the dbus path a property of the object, and autogenerate it.
- It can't be composed of the 'id' field becuase that's not available
+ It can't be composed of the 'id' field because that's not available
yet during the GObject creation in nm_connection_settings_init()
2007-08-29 Dan Williams <dcbw@redhat.com>
diff --git a/Makefile.am b/Makefile.am
index 7e34571218..64be5c8526 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -10,6 +10,7 @@ SUBDIRS = \
cli \
tools \
policy \
+ data \
initscript \
test \
po \
@@ -24,7 +25,11 @@ EXTRA_DIST = \
intltool-merge.in \
intltool-update.in
-DISTCHECK_CONFIGURE_FLAGS = --with-tests=yes --with-docs=yes --with-udev-dir=$$dc_install_base/lib/udev
+DISTCHECK_CONFIGURE_FLAGS = \
+ --with-tests=yes \
+ --with-docs=yes \
+ --with-udev-dir=$$dc_install_base/lib/udev \
+ --with-systemdsystemunitdir=$$dc_install_base/$(systemdsystemunitdir)
DISTCLEANFILES = intltool-extract intltool-merge intltool-update
diff --git a/README b/README
index acb807bfbf..286cabcb13 100644
--- a/README
+++ b/README
@@ -66,11 +66,11 @@ those drivers that are shipped with the upstream Linux kernel, because only
those drivers can be easily fixed and debugged. ndiswrapper, vendor binary
drivers, or other out-of-tree drivers may or may not work well with
NetworkManager, precisely because they have not been vetted and improved by the
-open-source community, and becuase problems in these drivers usually cannot
+open-source community, and because problems in these drivers usually cannot
be fixed.
Sometimes, command-line tools like 'iwconfig' will work, but NetworkManager will
-fail. This is again often due to buggy drivers, becuase these drivers simply
+fail. This is again often due to buggy drivers, because these drivers simply
aren't expecting the dynamic requests that NetworkManager and wpa_supplicant
make. Driver bugs should be filed in the bug tracker of the distribution being
run, since often distributions customize their kernel and drivers.
diff --git a/callouts/Makefile.am b/callouts/Makefile.am
index 6f28f5a7b2..9fcdd6c7c0 100644
--- a/callouts/Makefile.am
+++ b/callouts/Makefile.am
@@ -60,7 +60,7 @@ nm_dispatcher_action_LDADD = \
$(GLIB_LIBS)
nm-dispatcher-glue.h: nm-dispatcher.xml
- dbus-binding-tool --prefix=nm_dispatcher --mode=glib-server --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_dispatcher --mode=glib-server --output=$@ $<
udevrulesdir = $(UDEV_BASE_DIR)/rules.d
udevrules_DATA = 77-nm-olpc-mesh.rules
diff --git a/callouts/nm-dispatcher-action.c b/callouts/nm-dispatcher-action.c
index 828d8be13c..8040853f7a 100644
--- a/callouts/nm-dispatcher-action.c
+++ b/callouts/nm-dispatcher-action.c
@@ -489,6 +489,10 @@ nm_dispatcher_action (Handler *h,
if (!d->persist)
d->quit_timeout = g_timeout_add_seconds (10, quit_timeout_cb, NULL);
+ /* Hostname changes don't require a device nor contain a connection */
+ if (!strcmp (action, "hostname"))
+ goto dispatch;
+
connection = nm_connection_new_from_hash (connection_hash, error);
if (connection) {
NMSettingConnection *s_con;
@@ -506,10 +510,6 @@ nm_dispatcher_action (Handler *h,
*error = NULL;
}
- /* Hostname changes don't require a device */
- if (!strcmp (action, "hostname"))
- goto dispatch;
-
/* interface name */
value = g_hash_table_lookup (device_props, NMD_DEVICE_PROPS_INTERFACE);
if (!value || !G_VALUE_HOLDS_STRING (value)) {
diff --git a/cli/src/connections.c b/cli/src/connections.c
index e9aa597d11..e0b94ceb8c 100644
--- a/cli/src/connections.c
+++ b/cli/src/connections.c
@@ -24,6 +24,7 @@
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
+#include <unistd.h>
#include <errno.h>
#include <signal.h>
#include <netinet/ether.h>
@@ -64,9 +65,10 @@ static NmcOutputField nmc_fields_con_status[] = {
{"DBUS-SERVICE", N_("DBUS-SERVICE"), 45, NULL, 0}, /* 5 */
{"SPEC-OBJECT", N_("SPEC-OBJECT"), 10, NULL, 0}, /* 6 */
{"VPN", N_("VPN"), 5, NULL, 0}, /* 7 */
+ {"DBUS-PATH", N_("DBUS-PATH"), 51, NULL, 0}, /* 8 */
{NULL, NULL, 0, NULL, 0}
};
-#define NMC_FIELDS_CON_STATUS_ALL "NAME,UUID,DEVICES,SCOPE,DEFAULT,VPN,DBUS-SERVICE,SPEC-OBJECT"
+#define NMC_FIELDS_CON_STATUS_ALL "NAME,UUID,DEVICES,SCOPE,DEFAULT,VPN,DBUS-SERVICE,DBUS-PATH,SPEC-OBJECT"
#define NMC_FIELDS_CON_STATUS_COMMON "NAME,UUID,DEVICES,SCOPE,DEFAULT,VPN"
/* Available fields for 'con list' */
@@ -79,9 +81,10 @@ static NmcOutputField nmc_fields_con_list[] = {
{"TIMESTAMP-REAL", N_("TIMESTAMP-REAL"), 34, NULL, 0}, /* 5 */
{"AUTOCONNECT", N_("AUTOCONNECT"), 13, NULL, 0}, /* 6 */
{"READONLY", N_("READONLY"), 10, NULL, 0}, /* 7 */
+ {"DBUS-PATH", N_("DBUS-PATH"), 42, NULL, 0}, /* 8 */
{NULL, NULL, 0, NULL, 0}
};
-#define NMC_FIELDS_CON_LIST_ALL "NAME,UUID,TYPE,SCOPE,TIMESTAMP,TIMESTAMP-REAL,AUTOCONNECT,READONLY"
+#define NMC_FIELDS_CON_LIST_ALL "NAME,UUID,TYPE,SCOPE,TIMESTAMP,TIMESTAMP-REAL,AUTOCONNECT,READONLY,DBUS-PATH"
#define NMC_FIELDS_CON_LIST_COMMON "NAME,UUID,TYPE,SCOPE,TIMESTAMP-REAL"
@@ -375,6 +378,7 @@ show_connection (NMConnection *data, gpointer user_data)
timestamp = nm_setting_connection_get_timestamp (s_con);
timestamp_str = g_strdup_printf ("%" G_GUINT64_FORMAT, timestamp);
strftime (timestamp_real_str, sizeof (timestamp_real_str), "%c", localtime ((time_t *) &timestamp));
+
nmc->allowed_fields[0].value = nm_setting_connection_get_id (s_con);
nmc->allowed_fields[1].value = nm_setting_connection_get_uuid (s_con);
nmc->allowed_fields[2].value = nm_setting_connection_get_connection_type (s_con);
@@ -383,6 +387,7 @@ show_connection (NMConnection *data, gpointer user_data)
nmc->allowed_fields[5].value = timestamp ? timestamp_real_str : _("never");
nmc->allowed_fields[6].value = nm_setting_connection_get_autoconnect (s_con) ? _("yes") : _("no");
nmc->allowed_fields[7].value = nm_setting_connection_get_read_only (s_con) ? _("yes") : _("no");
+ nmc->allowed_fields[8].value = nm_connection_get_path (connection);
nmc->print_fields.flags &= ~NMC_PF_FLAG_MAIN_HEADER_ADD & ~NMC_PF_FLAG_MAIN_HEADER_ONLY & ~NMC_PF_FLAG_FIELD_NAMES; /* Clear header flags */
print_fields (nmc->print_fields, nmc->allowed_fields);
@@ -603,6 +608,7 @@ show_active_connection (gpointer data, gpointer user_data)
info->nmc->allowed_fields[5].value = nm_active_connection_get_service_name (active);
info->nmc->allowed_fields[6].value = nm_active_connection_get_specific_object (active);
info->nmc->allowed_fields[7].value = NM_IS_VPN_CONNECTION (active) ? _("yes") : _("no");
+ info->nmc->allowed_fields[8].value = nm_object_get_path (NM_OBJECT (active));
info->nmc->print_fields.flags &= ~NMC_PF_FLAG_MAIN_HEADER_ADD & ~NMC_PF_FLAG_MAIN_HEADER_ONLY & ~NMC_PF_FLAG_FIELD_NAMES; /* Clear header flags */
print_fields (info->nmc->print_fields, info->nmc->allowed_fields);
@@ -711,10 +717,11 @@ check_ethernet_compatible (NMDeviceEthernet *device, NMConnection *connection, G
if (s_wired) {
const GByteArray *mac;
const char *device_mac_str;
- struct ether_addr *device_mac;
+ struct ether_addr *device_mac = NULL;
- device_mac_str = nm_device_ethernet_get_hw_address (device);
- device_mac = ether_aton (device_mac_str);
+ device_mac_str = nm_device_ethernet_get_permanent_hw_address (device);
+ if (device_mac_str)
+ device_mac = ether_aton (device_mac_str);
if (!device_mac) {
g_set_error (error, 0, 0, "Invalid device MAC address.");
return FALSE;
@@ -760,10 +767,11 @@ check_wifi_compatible (NMDeviceWifi *device, NMConnection *connection, GError **
if (s_wireless) {
const GByteArray *mac;
const char *device_mac_str;
- struct ether_addr *device_mac;
+ struct ether_addr *device_mac = NULL;
- device_mac_str = nm_device_wifi_get_hw_address (device);
- device_mac = ether_aton (device_mac_str);
+ device_mac_str = nm_device_wifi_get_permanent_hw_address (device);
+ if (device_mac_str)
+ device_mac = ether_aton (device_mac_str);
if (!device_mac) {
g_set_error (error, 0, 0, "Invalid device MAC address.");
return FALSE;
@@ -1288,7 +1296,7 @@ activate_connection_cb (gpointer user_data, const char *path, GError *error)
printf (_("Active connection state: %s\n"), active_connection_state_to_string (state));
printf (_("Active connection path: %s\n"), orig_path);
- if (!orig_nmc->should_wait || state == NM_ACTIVE_CONNECTION_STATE_ACTIVATED) {
+ if (orig_nmc->nowait_flag || state == NM_ACTIVE_CONNECTION_STATE_ACTIVATED) {
/* don't want to wait or already activated */
quit ();
} else {
@@ -1415,7 +1423,10 @@ do_connection_up (NmCli *nmc, int argc, char **argv)
goto error;
}
- nmc->should_wait = wait;
+ /* Use nowait_flag instead of should_wait because exitting has to be postponed till active_connection_state_cb()
+ * is called, giving NM time to check our permissions */
+ nmc->nowait_flag = !wait;
+ nmc->should_wait = TRUE;
nm_client_activate_connection (nmc->client,
is_system ? NM_DBUS_SERVICE_SYSTEM_SETTINGS : NM_DBUS_SERVICE_USER_SETTINGS,
con_path,
@@ -1504,6 +1515,7 @@ do_connection_down (NmCli *nmc, int argc, char **argv)
else {
fprintf (stderr, _("Warning: Connection not active\n"));
}
+ sleep (1); /* Don't quit immediatelly and give NM time to check our permissions */
error:
nmc->should_wait = FALSE;
diff --git a/cli/src/devices.c b/cli/src/devices.c
index 7811e2aeda..12da386c4d 100644
--- a/cli/src/devices.c
+++ b/cli/src/devices.c
@@ -41,6 +41,7 @@
//#include <nm-device-olpc-mesh.h>
#include <nm-utils.h>
#include <nm-setting-ip4-config.h>
+#include <nm-setting-ip6-config.h>
#include <nm-vpn-connection.h>
#include <nm-setting-connection.h>
#include <nm-setting-wired.h>
@@ -57,12 +58,13 @@
/* Available fields for 'dev status' */
static NmcOutputField nmc_fields_dev_status[] = {
- {"DEVICE", N_("DEVICE"), 10, NULL, 0}, /* 0 */
- {"TYPE", N_("TYPE"), 17, NULL, 0}, /* 1 */
- {"STATE", N_("STATE"), 12, NULL, 0}, /* 2 */
- {NULL, NULL, 0, NULL, 0}
+ {"DEVICE", N_("DEVICE"), 10, NULL, 0}, /* 0 */
+ {"TYPE", N_("TYPE"), 17, NULL, 0}, /* 1 */
+ {"STATE", N_("STATE"), 13, NULL, 0}, /* 2 */
+ {"DBUS-PATH", N_("DBUS-PATH"), 43, NULL, 0}, /* 3 */
+ {NULL, NULL, 0, NULL, 0}
};
-#define NMC_FIELDS_DEV_STATUS_ALL "DEVICE,TYPE,STATE"
+#define NMC_FIELDS_DEV_STATUS_ALL "DEVICE,TYPE,STATE,DBUS-PATH"
#define NMC_FIELDS_DEV_STATUS_COMMON "DEVICE,TYPE,STATE"
@@ -75,10 +77,12 @@ static NmcOutputField nmc_fields_dev_list_sections[] = {
{"WIRED-PROPERTIES", N_("WIRED-PROPERTIES"), 0, NULL, 0}, /* 4 */
{"IP4-SETTINGS", N_("IP4-SETTINGS"), 0, NULL, 0}, /* 5 */
{"IP4-DNS", N_("IP4-DNS"), 0, NULL, 0}, /* 6 */
+ {"IP6-SETTINGS", N_("IP6-SETTINGS"), 0, NULL, 0}, /* 7 */
+ {"IP6-DNS", N_("IP6-DNS"), 0, NULL, 0}, /* 8 */
{NULL, NULL, 0, NULL, 0}
};
-#define NMC_FIELDS_DEV_LIST_SECTIONS_ALL "GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,IP4-SETTINGS,IP4-DNS"
-#define NMC_FIELDS_DEV_LIST_SECTIONS_COMMON "GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,IP4-SETTINGS,IP4-DNS"
+#define NMC_FIELDS_DEV_LIST_SECTIONS_ALL "GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,IP4-SETTINGS,IP4-DNS,IP6-SETTINGS,IP6-DNS"
+#define NMC_FIELDS_DEV_LIST_SECTIONS_COMMON "GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,IP4-SETTINGS,IP4-DNS,IP6-SETTINGS,IP6-DNS"
/* Available fields for 'dev list' - GENERAL part */
static NmcOutputField nmc_fields_dev_list_general[] = {
@@ -137,6 +141,17 @@ static NmcOutputField nmc_fields_dev_list_ip4_settings[] = {
#define NMC_FIELDS_DEV_LIST_IP4_SETTINGS_ALL "NAME,ADDRESS,PREFIX,GATEWAY"
#define NMC_FIELDS_DEV_LIST_IP4_SETTINGS_COMMON "NAME,ADDRESS,PREFIX,GATEWAY"
+/* Available fields for 'dev list' - IPv6 settings part */
+static NmcOutputField nmc_fields_dev_list_ip6_settings[] = {
+ {"NAME", N_("NAME"), 15, NULL, 0}, /* 0 */
+ {"ADDRESS", N_("ADDRESS"), 15, NULL, 0}, /* 1 */
+ {"PREFIX", N_("PREFIX"), 20, NULL, 0}, /* 2 */
+ {"GATEWAY", N_("GATEWAY"), 20, NULL, 0}, /* 3 */
+ {NULL, NULL, 0, NULL, 0}
+};
+#define NMC_FIELDS_DEV_LIST_IP6_SETTINGS_ALL "NAME,ADDRESS,PREFIX,GATEWAY"
+#define NMC_FIELDS_DEV_LIST_IP6_SETTINGS_COMMON "NAME,ADDRESS,PREFIX,GATEWAY"
+
/* Available fields for 'dev list' - IPv4 settings DNS part */
static NmcOutputField nmc_fields_dev_list_ip4_dns[] = {
{"NAME", N_("NAME"), 15, NULL, 0}, /* 0 */
@@ -146,6 +161,14 @@ static NmcOutputField nmc_fields_dev_list_ip4_dns[] = {
#define NMC_FIELDS_DEV_LIST_IP4_DNS_ALL "NAME,DNS"
#define NMC_FIELDS_DEV_LIST_IP4_DNS_COMMON "NAME,DNS"
+/* Available fields for 'dev list' - IPv6 settings DNS part */
+static NmcOutputField nmc_fields_dev_list_ip6_dns[] = {
+ {"NAME", N_("NAME"), 15, NULL, 0}, /* 0 */
+ {"DNS", N_("DNS"), 17, NULL, 0}, /* 1 */
+ {NULL, NULL, 0, NULL, 0}
+};
+#define NMC_FIELDS_DEV_LIST_IP6_DNS_ALL "NAME,DNS"
+#define NMC_FIELDS_DEV_LIST_IP6_DNS_COMMON "NAME,DNS"
/* Available fields for 'dev wifi list' */
static NmcOutputField nmc_fields_dev_wifi_list[] = {
@@ -161,9 +184,10 @@ static NmcOutputField nmc_fields_dev_wifi_list[] = {
{"RSN-FLAGS", N_("RSN-FLAGS"), 25, NULL, 0}, /* 9 */
{"DEVICE", N_("DEVICE"), 10, NULL, 0}, /* 10 */
{"ACTIVE", N_("ACTIVE"), 8, NULL, 0}, /* 11 */
+ {"DBUS-PATH", N_("DBUS-PATH"), 46, NULL, 0}, /* 12 */
{NULL, NULL, 0, NULL, 0}
};
-#define NMC_FIELDS_DEV_WIFI_LIST_ALL "SSID,BSSID,MODE,FREQ,RATE,SIGNAL,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE"
+#define NMC_FIELDS_DEV_WIFI_LIST_ALL "SSID,BSSID,MODE,FREQ,RATE,SIGNAL,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,DBUS-PATH"
#define NMC_FIELDS_DEV_WIFI_LIST_COMMON "SSID,BSSID,MODE,FREQ,RATE,SIGNAL,SECURITY,ACTIVE"
#define NMC_FIELDS_DEV_WIFI_LIST_FOR_DEV_LIST "NAME,"NMC_FIELDS_DEV_WIFI_LIST_COMMON
@@ -305,6 +329,28 @@ ip4_address_as_string (guint32 ip)
}
}
+static gchar *
+ip6_address_as_string (const struct in6_addr *ip)
+{
+ char buf[INET6_ADDRSTRLEN];
+
+ memset (&buf, '\0', sizeof (buf));
+
+ if (inet_ntop (AF_INET6, ip, buf, INET6_ADDRSTRLEN)) {
+ return g_strdup (buf);
+ } else {
+ int j;
+ GString *ip6_str = g_string_new (NULL);
+ g_string_append_printf (ip6_str, "%02X", ip->s6_addr[0]);
+ for (j = 1; j < 16; j++)
+ g_string_append_printf (ip6_str, " %02X", ip->s6_addr[j]);
+ nm_warning ("%s: error converting IP6 address %s",
+ __func__, ip6_str->str);
+ g_string_free (ip6_str, TRUE);
+ return NULL;
+ }
+}
+
typedef struct {
NmCli *nmc;
int index;
@@ -386,6 +432,7 @@ detail_access_point (gpointer data, gpointer user_data)
info->nmc->allowed_fields[9].value = rsn_flags_str;
info->nmc->allowed_fields[10].value = info->device;
info->nmc->allowed_fields[11].value = active ? _("yes") : _("no");
+ info->nmc->allowed_fields[12].value = nm_object_get_path (NM_OBJECT (ap));
info->nmc->print_fields.flags &= ~NMC_PF_FLAG_MAIN_HEADER_ADD & ~NMC_PF_FLAG_MAIN_HEADER_ONLY & ~NMC_PF_FLAG_FIELD_NAMES; /* Clear header flags */
print_fields (info->nmc->print_fields, info->nmc->allowed_fields);
@@ -590,17 +637,18 @@ show_device_info (gpointer data, gpointer user_data)
/* IP Setup info */
if (state == NM_DEVICE_STATE_ACTIVATED) {
- NMIP4Config *cfg = nm_device_get_ip4_config (device);
+ NMIP4Config *cfg4 = nm_device_get_ip4_config (device);
+ NMIP6Config *cfg6 = nm_device_get_ip6_config (device);
GSList *iter;
/* IP4-SETTINGS */
- if (!strcasecmp (nmc_fields_dev_list_sections[section_idx].name, nmc_fields_dev_list_sections[5].name)) {
+ if (cfg4 && !strcasecmp (nmc_fields_dev_list_sections[section_idx].name, nmc_fields_dev_list_sections[5].name)) {
nmc->allowed_fields = nmc_fields_dev_list_ip4_settings;
nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_DEV_LIST_IP4_SETTINGS_ALL, nmc->allowed_fields, NULL);
print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
- for (iter = (GSList *) nm_ip4_config_get_addresses (cfg); iter; iter = g_slist_next (iter)) {
+ for (iter = (GSList *) nm_ip4_config_get_addresses (cfg4); iter; iter = g_slist_next (iter)) {
NMIP4Address *addr = (NMIP4Address *) iter->data;
guint32 prefix = nm_ip4_address_get_prefix (addr);
char *tmp2;
@@ -628,8 +676,8 @@ show_device_info (gpointer data, gpointer user_data)
was_output = TRUE;
}
/* IP4-DNS */
- if (!strcasecmp (nmc_fields_dev_list_sections[section_idx].name, nmc_fields_dev_list_sections[6].name)) {
- array = nm_ip4_config_get_nameservers (cfg);
+ if (cfg4 && !strcasecmp (nmc_fields_dev_list_sections[section_idx].name, nmc_fields_dev_list_sections[6].name)) {
+ array = nm_ip4_config_get_nameservers (cfg4);
if (array) {
int i;
@@ -652,6 +700,59 @@ show_device_info (gpointer data, gpointer user_data)
}
was_output = TRUE;
}
+
+ /* IP6-SETTINGS */
+ if (cfg6 && !strcasecmp (nmc_fields_dev_list_sections[section_idx].name, nmc_fields_dev_list_sections[7].name)) {
+ nmc->allowed_fields = nmc_fields_dev_list_ip6_settings;
+ nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
+ nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_DEV_LIST_IP6_SETTINGS_ALL, nmc->allowed_fields, NULL);
+ print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
+
+ for (iter = (GSList *) nm_ip6_config_get_addresses (cfg6); iter; iter = g_slist_next (iter)) {
+ NMIP6Address *addr = (NMIP6Address *) iter->data;
+ guint32 prefix = nm_ip6_address_get_prefix (addr);
+ char *addr_str, *prefix_str, *gateway_str;
+
+ addr_str = ip6_address_as_string (nm_ip6_address_get_address (addr));
+
+ prefix_str = g_strdup_printf ("%d", prefix);
+ gateway_str = ip6_address_as_string (nm_ip6_address_get_gateway (addr));
+
+ nmc->allowed_fields[0].value = nmc_fields_dev_list_sections[7].name; /* "IP6-SETTINGS" */
+ nmc->allowed_fields[1].value = addr_str;
+ nmc->allowed_fields[2].value = prefix_str;
+ nmc->allowed_fields[3].value = gateway_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 (addr_str);
+ g_free (prefix_str);
+ g_free (gateway_str);
+ }
+ was_output = TRUE;
+ }
+ /* IP6-DNS */
+ if (cfg6 && !strcasecmp (nmc_fields_dev_list_sections[section_idx].name, nmc_fields_dev_list_sections[8].name)) {
+ int i = 1;
+ nmc->allowed_fields = nmc_fields_dev_list_ip6_dns;
+ nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
+ nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_DEV_LIST_IP6_DNS_ALL, nmc->allowed_fields, NULL);
+ print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
+
+ for (iter = (GSList *) nm_ip6_config_get_nameservers (cfg6); iter; iter = g_slist_next (iter)) {
+ char *dns_name = g_strdup_printf ("%s%d", nmc_fields_dev_list_sections[8].name, i++);
+
+ tmp = ip6_address_as_string (iter->data);
+ nmc->allowed_fields[0].value = dns_name; /* "IP6-DNS<num>" */
+ nmc->allowed_fields[1].value = tmp;
+
+ 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 (tmp);
+ g_free (dns_name);
+ }
+ was_output = TRUE;
+ }
}
}
@@ -665,6 +766,7 @@ show_device_status (NMDevice *device, NmCli *nmc)
nmc->allowed_fields[0].value = nm_device_get_iface (device);
nmc->allowed_fields[1].value = get_device_type (device);
nmc->allowed_fields[2].value = device_state_to_string (nm_device_get_state (device));
+ nmc->allowed_fields[3].value = nm_object_get_path (NM_OBJECT (device));
nmc->print_fields.flags &= ~NMC_PF_FLAG_MAIN_HEADER_ADD & ~NMC_PF_FLAG_MAIN_HEADER_ONLY & ~NMC_PF_FLAG_FIELD_NAMES; /* Clear header flags */
print_fields (nmc->print_fields, nmc->allowed_fields);
@@ -831,7 +933,7 @@ disconnect_device_cb (NMDevice *device, GError *error, gpointer user_data)
state = nm_device_get_state (device);
printf (_("Device state: %d (%s)\n"), state, device_state_to_string (state));
- if (!nmc->should_wait || state == NM_DEVICE_STATE_DISCONNECTED) {
+ if (nmc->nowait_flag || state == NM_DEVICE_STATE_DISCONNECTED) {
/* Don't want to wait or device already disconnected */
quit ();
} else {
@@ -917,7 +1019,10 @@ do_device_disconnect (NmCli *nmc, int argc, char **argv)
goto error;
}
- nmc->should_wait = wait;
+ /* Use nowait_flag instead of should_wait because exitting has to be postponed till disconnect_device_cb()
+ * is called, giving NM time to check our permissions */
+ nmc->nowait_flag = !wait;
+ nmc->should_wait = TRUE;
nm_device_disconnect (device, disconnect_device_cb, nmc);
error:
diff --git a/cli/src/network-manager.c b/cli/src/network-manager.c
index b65dfcd7bd..23a2ef11e7 100644
--- a/cli/src/network-manager.c
+++ b/cli/src/network-manager.c
@@ -34,14 +34,16 @@
static NmcOutputField nmc_fields_nm_status[] = {
{"RUNNING", N_("RUNNING"), 15, NULL, 0}, /* 0 */
{"STATE", N_("STATE"), 15, NULL, 0}, /* 1 */
- {"WIFI-HARDWARE", N_("WIFI-HARDWARE"), 15, NULL, 0}, /* 2 */
- {"WIFI", N_("WIFI"), 10, NULL, 0}, /* 3 */
- {"WWAN-HARDWARE", N_("WWAN-HARDWARE"), 15, NULL, 0}, /* 4 */
- {"WWAN", N_("WWAN"), 10, NULL, 0}, /* 5 */
+ {"NET-ENABLED", N_("NET-ENABLED"), 13, NULL, 0}, /* 2 */
+ {"WIFI-HARDWARE", N_("WIFI-HARDWARE"), 15, NULL, 0}, /* 3 */
+ {"WIFI", N_("WIFI"), 10, NULL, 0}, /* 4 */
+ {"WWAN-HARDWARE", N_("WWAN-HARDWARE"), 15, NULL, 0}, /* 5 */
+ {"WWAN", N_("WWAN"), 10, NULL, 0}, /* 6 */
{NULL, NULL, 0, NULL, 0}
};
-#define NMC_FIELDS_NM_STATUS_ALL "RUNNING,STATE,WIFI-HARDWARE,WIFI,WWAN-HARDWARE,WWAN"
+#define NMC_FIELDS_NM_STATUS_ALL "RUNNING,STATE,NET-ENABLED,WIFI-HARDWARE,WIFI,WWAN-HARDWARE,WWAN"
#define NMC_FIELDS_NM_STATUS_COMMON "RUNNING,STATE,WIFI-HARDWARE,WIFI,WWAN-HARDWARE,WWAN"
+#define NMC_FIELDS_NM_NET_ENABLED "NET-ENABLED"
#define NMC_FIELDS_NM_WIFI "WIFI"
#define NMC_FIELDS_NM_WWAN "WWAN"
@@ -60,10 +62,10 @@ usage (void)
{
fprintf (stderr,
_("Usage: nmcli nm { COMMAND | help }\n\n"
- " COMMAND := { status | sleep | wakeup | wifi | wwan }\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\n"));
}
@@ -97,6 +99,7 @@ static NMCResultCode
show_nm_status (NmCli *nmc)
{
gboolean nm_running;
+ gboolean net_enabled;
NMState state;
const char *wireless_hw_enabled_str, *wireless_enabled_str;
const char *wwan_hw_enabled_str, *wwan_enabled_str;
@@ -136,6 +139,7 @@ show_nm_status (NmCli *nmc)
nm_running = nm_client_get_manager_running (nmc->client);
state = nm_client_get_state (nmc->client);
+ net_enabled = nm_client_networking_get_enabled (nmc->client);
if (nm_running) {
wireless_hw_enabled_str = nm_client_wireless_hardware_get_enabled (nmc->client) ? _("enabled") : _("disabled");
wireless_enabled_str = nm_client_wireless_get_enabled (nmc->client) ? _("enabled") : _("disabled");
@@ -147,10 +151,11 @@ show_nm_status (NmCli *nmc)
nmc->allowed_fields[0].value = nm_running ? _("running") : _("not running");
nmc->allowed_fields[1].value = nm_state_to_string (state);
- nmc->allowed_fields[2].value = wireless_hw_enabled_str;
- nmc->allowed_fields[3].value = wireless_enabled_str;
- nmc->allowed_fields[4].value = wwan_hw_enabled_str;
- nmc->allowed_fields[5].value = wwan_enabled_str;
+ nmc->allowed_fields[2].value = net_enabled ? _("enabled") : _("disabled");
+ nmc->allowed_fields[3].value = wireless_hw_enabled_str;
+ nmc->allowed_fields[4].value = wireless_enabled_str;
+ nmc->allowed_fields[5].value = wwan_hw_enabled_str;
+ nmc->allowed_fields[6].value = wwan_enabled_str;
nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag;
print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
@@ -158,12 +163,49 @@ show_nm_status (NmCli *nmc)
return NMC_RESULT_SUCCESS;
}
+/* libnm-glib doesn't provide API fro Sleep method - implement D-Bus call ourselves */
+static void networking_set_sleep (NmCli *nmc, gboolean in_sleep)
+{
+ DBusGConnection *connection = NULL;
+ DBusGProxy *proxy = NULL;
+ GError *err = NULL;
+
+ connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &err);
+ if (!connection) {
+ g_string_printf (nmc->return_text, _("Error: Couldn't connect to system bus: %s"), err->message);
+ nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+ g_error_free (err);
+ goto gone;
+ }
+
+ proxy = dbus_g_proxy_new_for_name (connection,
+ "org.freedesktop.NetworkManager",
+ "/org/freedesktop/NetworkManager",
+ "org.freedesktop.NetworkManager");
+ if (!proxy) {
+ g_string_printf (nmc->return_text, _("Error: Couldn't create D-Bus object proxy."));
+ nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+ goto gone;
+ }
+
+ if (!dbus_g_proxy_call (proxy, "Sleep", &err, G_TYPE_BOOLEAN, in_sleep, G_TYPE_INVALID, G_TYPE_INVALID)) {
+ g_string_printf (nmc->return_text, _("Error in sleep: %s"), err->message);
+ nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+ g_error_free (err);
+ }
+
+gone:
+ if (connection) dbus_g_connection_unref (connection);
+ if (proxy) g_object_unref (proxy);
+}
/* entry point function for global network manager related commands 'nmcli nm' */
NMCResultCode
do_network_manager (NmCli *nmc, int argc, char **argv)
{
GError *error = NULL;
+ gboolean sleep_flag;
+ gboolean enable_net;
gboolean enable_wifi;
gboolean enable_wwan;
guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
@@ -186,11 +228,54 @@ do_network_manager (NmCli *nmc, int argc, char **argv)
goto opt_error;
nmc->return_value = show_nm_status (nmc);
}
- else if (matches (*argv, "sleep") == 0) {
- nm_client_sleep (nmc->client, TRUE);
+ else if (matches (*argv, "enable") == 0) {
+ if (next_arg (&argc, &argv) != 0) {
+ /* no argument, show current state of networking */
+ if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error))
+ goto opt_error;
+ if (nmc->required_fields && strcasecmp (nmc->required_fields, "NET-ENABLED")) {
+ g_string_printf (nmc->return_text, _("Error: '--fields' value '%s' is not valid here; allowed fields: %s"),
+ nmc->required_fields, NMC_FIELDS_NM_NET_ENABLED);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto end;
+ }
+ nmc->allowed_fields = nmc_fields_nm_status;
+ nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_NM_NET_ENABLED, nmc->allowed_fields, NULL);
+ nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_MAIN_HEADER_ADD | NMC_PF_FLAG_FIELD_NAMES;
+ nmc->print_fields.header_name = _("Networking enabled");
+ print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
+ nmc->allowed_fields[2].value = nm_client_networking_get_enabled (nmc->client) ? _("enabled") : _("disabled");
+ nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag;
+ print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
+ } else {
+ if (!strcmp (*argv, "true"))
+ enable_net = TRUE;
+ else if (!strcmp (*argv, "false"))
+ enable_net = FALSE;
+ else {
+ g_string_printf (nmc->return_text, _("Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."), *argv);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto end;
+ }
+ nm_client_networking_set_enabled (nmc->client, enable_net);
+ }
}
- else if (matches (*argv, "wakeup") == 0) {
- nm_client_sleep (nmc->client, FALSE);
+ else if (matches (*argv, "sleep") == 0) {
+ if (next_arg (&argc, &argv) != 0) {
+ g_string_printf (nmc->return_text, _("Error: Sleeping status is not exported by NetworkManager."));
+ nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+ } else {
+ if (!strcmp (*argv, "true"))
+ sleep_flag = TRUE;
+ else if (!strcmp (*argv, "false"))
+ sleep_flag = FALSE;
+ else {
+ g_string_printf (nmc->return_text, _("Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."), *argv);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto end;
+ }
+ networking_set_sleep (nmc, sleep_flag);
+ }
}
else if (matches (*argv, "wifi") == 0) {
if (next_arg (&argc, &argv) != 0) {
@@ -208,7 +293,7 @@ do_network_manager (NmCli *nmc, int argc, char **argv)
nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_MAIN_HEADER_ADD | NMC_PF_FLAG_FIELD_NAMES;
nmc->print_fields.header_name = _("WiFi enabled");
print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
- nmc->allowed_fields[3].value = nm_client_wireless_get_enabled (nmc->client) ? _("enabled") : _("disabled");
+ nmc->allowed_fields[4].value = nm_client_wireless_get_enabled (nmc->client) ? _("enabled") : _("disabled");
nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag;
print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
} else {
@@ -240,7 +325,7 @@ do_network_manager (NmCli *nmc, int argc, char **argv)
nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_MAIN_HEADER_ADD | NMC_PF_FLAG_FIELD_NAMES;
nmc->print_fields.header_name = _("WWAN enabled");
print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
- nmc->allowed_fields[5].value = nm_client_wwan_get_enabled (nmc->client) ? _("enabled") : _("disabled");
+ nmc->allowed_fields[6].value = nm_client_wwan_get_enabled (nmc->client) ? _("enabled") : _("disabled");
nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag;
print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
} else {
diff --git a/cli/src/nmcli.c b/cli/src/nmcli.c
index 328a6d8ee5..d416952c6c 100644
--- a/cli/src/nmcli.c
+++ b/cli/src/nmcli.c
@@ -286,6 +286,7 @@ nmc_init (NmCli *nmc)
nmc->user_connections = NULL;
nmc->should_wait = FALSE;
+ nmc->nowait_flag = TRUE;
nmc->print_output = NMC_PRINT_NORMAL;
nmc->multiline_output = FALSE;
nmc->mode_specified = FALSE;
diff --git a/cli/src/nmcli.h b/cli/src/nmcli.h
index b4e4562bfe..9788ef086c 100644
--- a/cli/src/nmcli.h
+++ b/cli/src/nmcli.h
@@ -102,6 +102,7 @@ typedef struct _NmCli {
GSList *user_connections; /* List of user connections */
gboolean should_wait; /* Indication that nmcli should not end yet */
+ gboolean nowait_flag; /* '--nowait' option; used for passing to callbacks */
NMCPrintOutput print_output; /* Output mode */
gboolean multiline_output; /* Multiline output instead of default tabular */
gboolean mode_specified; /* Whether tabular/multiline mode was specified via '--mode' option */
diff --git a/cli/src/settings.c b/cli/src/settings.c
index 1371bfbef5..8b62876479 100644
--- a/cli/src/settings.c
+++ b/cli/src/settings.c
@@ -50,13 +50,14 @@ static NmcOutputField nmc_fields_setting_connection[] = {
/* 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_MTU, 6), /* 6 */
+ 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 */
{NULL, NULL, 0, NULL, 0}
};
#define NMC_FIELDS_SETTING_WIRED_ALL "name"","\
@@ -65,6 +66,7 @@ static NmcOutputField nmc_fields_setting_wired[] = {
NM_SETTING_WIRED_DUPLEX","\
NM_SETTING_WIRED_AUTO_NEGOTIATE","\
NM_SETTING_WIRED_MAC_ADDRESS","\
+ NM_SETTING_WIRED_CLONED_MAC_ADDRESS","\
NM_SETTING_WIRED_MTU
#define NMC_FIELDS_SETTING_WIRED_COMMON NMC_FIELDS_SETTING_WIRED_ALL
@@ -131,9 +133,10 @@ static NmcOutputField nmc_fields_setting_wireless[] = {
SETTING_FIELD (NM_SETTING_WIRELESS_RATE, 10), /* 6 */
SETTING_FIELD (NM_SETTING_WIRELESS_TX_POWER, 10), /* 7 */
SETTING_FIELD (NM_SETTING_WIRELESS_MAC_ADDRESS, 19), /* 8 */
- SETTING_FIELD (NM_SETTING_WIRELESS_MTU, 6), /* 9 */
- SETTING_FIELD (NM_SETTING_WIRELESS_SEEN_BSSIDS, 35), /* 10 */
- SETTING_FIELD (NM_SETTING_WIRELESS_SEC, 10), /* 11 */
+ 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 */
{NULL, NULL, 0, NULL, 0}
};
#define NMC_FIELDS_SETTING_WIRELESS_ALL "name"","\
@@ -145,6 +148,7 @@ static NmcOutputField nmc_fields_setting_wireless[] = {
NM_SETTING_WIRELESS_RATE","\
NM_SETTING_WIRELESS_TX_POWER","\
NM_SETTING_WIRELESS_MAC_ADDRESS","\
+ NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS","\
NM_SETTING_WIRELESS_MTU","\
NM_SETTING_WIRELESS_SEEN_BSSIDS","\
NM_SETTING_WIRELESS_SEC
@@ -518,7 +522,7 @@ setting_wired_details (NMSetting *setting, NmCli *nmc)
{
NMSettingWired *s_wired;
const GByteArray *mac;
- char *speed_str, *mtu_str, *mac_str = NULL;
+ char *speed_str, *mtu_str, *device_mac_str = NULL, *cloned_mac_str = NULL;
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;
@@ -535,21 +539,26 @@ setting_wired_details (NMSetting *setting, NmCli *nmc)
mtu_str = g_strdup_printf ("%d", nm_setting_wired_get_mtu (s_wired));
mac = nm_setting_wired_get_mac_address (s_wired);
if (mac)
- 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]);
+ device_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 = nm_setting_wired_get_cloned_mac_address (s_wired);
+ 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]);
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;
nmc->allowed_fields[3].value = nm_setting_wired_get_duplex (s_wired);
nmc->allowed_fields[4].value = nm_setting_wired_get_auto_negotiate (s_wired) ? _("yes") : _("no");
- nmc->allowed_fields[5].value = mac_str;
- nmc->allowed_fields[6].value = strcmp (mtu_str, "0") ? mtu_str : _("auto");
+ 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->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 (speed_str);
- g_free (mac_str);
+ g_free (device_mac_str);
+ g_free (cloned_mac_str);
g_free (mtu_str);
return TRUE;
@@ -663,7 +672,7 @@ setting_wireless_details (NMSetting *setting, NmCli *nmc)
int i;
const GByteArray *ssid, *bssid, *mac;
char *ssid_str, *channel_str, *rate_str, *tx_power_str, *mtu_str;
- char *mac_str = NULL, *bssid_str = NULL;
+ char *device_mac_str = NULL, *cloned_mac_str = NULL, *bssid_str = NULL;
GString *seen_bssids;
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;
@@ -688,7 +697,10 @@ setting_wireless_details (NMSetting *setting, NmCli *nmc)
mtu_str = g_strdup_printf ("%d", nm_setting_wireless_get_mtu (s_wireless));
mac = nm_setting_wireless_get_mac_address (s_wireless);
if (mac)
- 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]);
+ device_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 = 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]);
seen_bssids = g_string_new (NULL);
for (i = 0; i < nm_setting_wireless_get_num_seen_bssids (s_wireless); i++) {
if (i > 0)
@@ -704,10 +716,11 @@ setting_wireless_details (NMSetting *setting, NmCli *nmc)
nmc->allowed_fields[5].value = bssid_str ? bssid_str : _("not set");
nmc->allowed_fields[6].value = rate_str;
nmc->allowed_fields[7].value = tx_power_str;
- nmc->allowed_fields[8].value = mac_str ? mac_str : _("not set");
- nmc->allowed_fields[9].value = strcmp (mtu_str, "0") ? mtu_str : _("auto");
- nmc->allowed_fields[10].value = seen_bssids->str;
- nmc->allowed_fields[11].value = nm_setting_wireless_get_security (s_wireless);
+ 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->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
@@ -717,7 +730,8 @@ setting_wireless_details (NMSetting *setting, NmCli *nmc)
g_free (bssid_str);
g_free (rate_str);
g_free (tx_power_str);
- g_free (mac_str);
+ g_free (device_mac_str);
+ g_free (cloned_mac_str);
g_free (mtu_str);
g_string_free (seen_bssids, TRUE);
diff --git a/configure.ac b/configure.ac
index fc331d459e..ecdc05b0cd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,7 +1,8 @@
AC_PREREQ(2.52)
-AC_INIT(NetworkManager, 0.8.0.997, dcbw@redhat.com, NetworkManager)
+AC_INIT(NetworkManager, 0.8.990, dcbw@redhat.com, NetworkManager)
AM_INIT_AUTOMAKE([1.9 subdir-objects tar-ustar no-dist-gzip dist-bzip2])
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([no])])
AM_MAINTAINER_MODE
AC_CONFIG_MACRO_DIR([m4])
@@ -29,7 +30,7 @@ AC_SUBST([ACLOCAL_AMFLAGS])
dnl maintainer mode stuff
if test $USE_MAINTAINER_MODE = yes; then
- DISABLE_DEPRECATED="-DG_DISABLE_DEPRECATED -DGCONF_DISABLE_DEPRECATED"
+ DISABLE_DEPRECATED="-DG_DISABLE_DEPRECATED"
else
DISABLE_DEPRECATED=""
fi
@@ -83,7 +84,7 @@ dnl Make sha1.c happy on big endian systems
dnl
AC_C_BIGENDIAN
-AC_ARG_WITH(distro, AS_HELP_STRING([--with-distro=DISTRO], [Specify the Linux distribution to target: One of redhat, suse, gentoo, debian, arch, slackware, paldo, mandriva or pardus]))
+AC_ARG_WITH(distro, AS_HELP_STRING([--with-distro=DISTRO], [Specify the Linux distribution to target: One of redhat, suse, gentoo, debian, arch, slackware, paldo, mandriva, pardus, linexa or exherbo]))
if test "z$with_distro" = "z"; then
AC_CHECK_FILE(/etc/redhat-release,with_distro="redhat")
AC_CHECK_FILE(/etc/SuSE-release,with_distro="suse")
@@ -95,6 +96,8 @@ if test "z$with_distro" = "z"; then
AC_CHECK_FILE(/etc/frugalware-release,with_distro="frugalware")
AC_CHECK_FILE(/etc/mandriva-release,with_distro="mandriva")
AC_CHECK_FILE(/etc/pardus-release,with_distro="pardus")
+ AC_CHECK_FILE(/etc/linexa-release,with_distro="linexa")
+ AC_CHECK_FILE(/etc/exherbo-release,with_distro="exherbo")
if test "z$with_distro" = "z"; then
with_distro=`lsb_release -is`
fi
@@ -106,7 +109,7 @@ if test "z$with_distro" = "z"; then
exit 1
else
case $with_distro in
- redhat|suse|gentoo|debian|slackware|arch|paldo|frugalware|mandriva|pardus) ;;
+ redhat|suse|gentoo|debian|slackware|arch|paldo|frugalware|mandriva|pardus|linexa|exherbo) ;;
*)
echo "Your distribution (${with_distro}) is not yet supported! (patches welcome)"
exit 1
@@ -164,6 +167,16 @@ if test x"$with_distro" = xpardus; then
AC_DEFINE(TARGET_PARDUS, 1, [Define if you have Pardus])
fi
+AM_CONDITIONAL(TARGET_LINEXA, test x"$with_distro" = xlinexa)
+if test x"$with_distro" = xlinexa; then
+ AC_DEFINE(TARGET_LINEXA, 1, [Define if you have linexa])
+fi
+
+AM_CONDITIONAL(TARGET_EXHERBO, test x"$with_distro" = xexherbo)
+if test x"$with_distro" = xexherbo; then
+ AC_DEFINE(TARGET_EXHERBO, 1, [Define if you have Exherbo])
+fi
+
dnl
dnl Distribution version string
dnl
@@ -202,6 +215,12 @@ dnl
AC_CHECK_LIB([dl], [dladdr], LIBDL="-ldl", LIBDL="")
AC_SUBST(LIBDL)
+dnl
+dnl Checks for new dbus-glib property access function
+dnl
+AC_CHECK_LIB([dbus-glib-1], [dbus_glib_global_set_disable_legacy_property_access], ac_have_dg_prop="1", ac_have_dg_prop="0")
+AC_DEFINE_UNQUOTED(HAVE_DBUS_GLIB_DISABLE_LEGACY_PROP_ACCESS, $ac_have_dg_prop, [Define if you have a dbus-glib with dbus_glib_global_set_disable_legacy_property_access()])
+
PKG_CHECK_MODULES(DBUS, dbus-1 >= 1.1 dbus-glib-1 >= 0.75)
AC_SUBST(DBUS_CFLAGS)
AC_SUBST(DBUS_LIBS)
@@ -230,6 +249,16 @@ else
fi
AC_SUBST(UDEV_BASE_DIR)
+# systemd
+AC_ARG_WITH([systemdsystemunitdir],
+ AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]),
+ [],
+ [with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)])
+if test "x$with_systemdsystemunitdir" != xno; then
+ AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])
+fi
+AM_CONDITIONAL(HAVE_SYSTEMD, [test -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != xno ])
+
PKG_CHECK_MODULES(LIBNL, libnl-1 >= 1.0-pre8)
AC_SUBST(LIBNL_CFLAGS)
AC_SUBST(LIBNL_LIBS)
@@ -239,11 +268,14 @@ PKG_CHECK_MODULES(UUID, uuid)
AC_SUBST(UUID_CFLAGS)
AC_SUBST(UUID_LIBS)
-PKG_CHECK_MODULES(POLKIT, polkit-gobject-1)
+PKG_CHECK_MODULES(WIMAX, libiWmxSdk-0)
+PKG_CHECK_MODULES(POLKIT, polkit-gobject-1)
AC_SUBST(POLKIT_CFLAGS)
-PKG_CHECK_MODULES(WIMAX, libiWmxSdk-0)
+# Check for polkit_authority_get_sync()
+AC_CHECK_LIB([polkit-gobject-1], [polkit_authority_get_sync], ac_have_pk_auth_get_sync="1", ac_have_pk_auth_get_sync="0")
+AC_DEFINE_UNQUOTED(HAVE_POLKIT_AUTHORITY_GET_SYNC, $ac_have_pk_auth_get_sync, [Define if you have a polkit with polkit_authority_get_sync()])
AC_ARG_WITH(crypto, AS_HELP_STRING([--with-crypto=nss | gnutls], [Cryptography library to use for certificate and key operations]),ac_crypto=$withval, ac_crypto=nss)
@@ -251,6 +283,20 @@ with_nss=no
with_gnutls=no
if test x"$ac_crypto" = xnss; then
PKG_CHECK_MODULES(NSS, [nss >= 3.11])
+
+ # Work around a pkg-config bug (fdo #29801) where exists != usable
+ AC_PATH_PROG(PKGCONFIG_PATH, pkg-config, no)
+ if test x"$PKGCONFIG_PATH" = xno; then
+ AC_MSG_ERROR([pkgconfig required but not found])
+ else
+ FOO=`$PKGCONFIG_PATH --cflags --libs nss`
+ if test x"$?" != "x0"; then
+ AC_MSG_ERROR([No usable NSS found])
+ fi
+ fi
+
+ AC_SUBST(NSS_CFLAGS)
+ AC_SUBST(NSS_LIBS)
AC_DEFINE(HAVE_NSS, 1, [Define if you have NSS])
with_nss=yes
elif test x"$ac_crypto" = xgnutls; then
@@ -267,7 +313,7 @@ elif test x"$ac_crypto" = xgnutls; then
with_gnutls=yes
fi
else
- AC_MSG_ERROR([Please choose either 'nss' or 'gnutls' for certificate and key operations])
+ AC_MSG_ERROR([Please choose either 'nss' or 'gnutls' for certificate and crypto operations])
fi
AM_CONDITIONAL(WITH_NSS, test x"$with_nss" != xno)
AM_CONDITIONAL(WITH_GNUTLS, test x"$with_gnutls" != xno)
@@ -306,21 +352,30 @@ AC_SUBST(PPPD_PLUGIN_DIR)
AC_ARG_WITH([dhclient], AS_HELP_STRING([--with-dhclient=yes|no|path], [Enable dhclient 4.x support]))
# If a full path is given, use that and do not test if it works or not.
case "${with_dhclient}" in
+ # NM only works with ISC dhclient - other derivatives don't have
+ # the same userland. dhclient 4.x is required for IPv6 support;
+ # with older versions NM won't be able to use DHCPv6.
+
/*)
DHCLIENT_PATH="${with_dhclient}"
+ DHCLIENT_VERSION=4
+ if test -x "${with_dhclient}"; then
+ case `"${with_dhclient}" --version 2>&1` in
+ "isc-dhclient-4"*) DHCLIENT_VERSION=4; break;;
+ "isc-dhclient-V3"*) DHCLIENT_VERSION=3; break;;
+ esac
+ fi
AC_MSG_NOTICE(using dhclient at ${DHCLIENT_PATH})
;;
no) AC_MSG_NOTICE(dhclient support disabled)
;;
*)
AC_MSG_CHECKING(for dhclient)
- # NM only works with ISC dhclient - other derivatives don't have
- # the same userland. NM also requires dhclient 4.x since older
- # versions do not have IPv6 support.
for path in /sbin /usr/sbin /usr/pkg/sbin /usr/local/sbin; do
test -x "${path}/dhclient" || continue
case `"$path/dhclient" --version 2>&1` in
- "isc-dhclient-4"*) DHCLIENT_PATH="$path/dhclient"; break;;
+ "isc-dhclient-4"*) DHCLIENT_PATH="$path/dhclient"; DHCLIENT_VERSION=4; break;;
+ "isc-dhclient-V3"*) DHCLIENT_PATH="$path/dhclient"; DHCLIENT_VERSION=3; break;;
esac
done
if test -n "${DHCLIENT_PATH}"; then
@@ -345,10 +400,10 @@ case "${with_dhcpcd}" in
AC_MSG_CHECKING(for dhcpcd)
# We fully work with upstream dhcpcd-4
for path in /sbin /usr/sbin /usr/pkg/sbin /usr/local/sbin; do
- test -x "${path}/dhclient" || continue
+ test -x "${path}/dhcpcd" || continue
case `"$path/dhcpcd" --version 2>/dev/null` in
"dhcpcd "[123]*);;
- "dhcpcd "*) DHCP_CLIENT_PATH="$path/dhcpcd"; break;;
+ "dhcpcd "*) DHCPCD_PATH="$path/dhcpcd"; break;;
esac
done
if test -n "${DHCPCD_PATH}"; then
@@ -365,9 +420,10 @@ if test -z "$DHCPCD_PATH" -a -z "$DHCLIENT_PATH"; then
# in most distros, so use it.
AC_MSG_WARN([Could not find a suitable DHCP client])
DHCLIENT_PATH=/sbin/dhclient
- AC_MSG_WARN([Falling back to ISC dhclient, ${DHCP_CLIENT_PATH}])
+ AC_MSG_WARN([Falling back to ISC dhclient, ${DHCLIENT_PATH}])
fi
AC_SUBST(DHCLIENT_PATH)
+AC_SUBST(DHCLIENT_VERSION)
AC_SUBST(DHCPCD_PATH)
# resolvconf support
@@ -425,6 +481,16 @@ fi
AC_DEFINE_UNQUOTED(SYSTEM_CA_PATH, "$SYSTEM_CA_PATH", [Define to path to system CA certificates])
AC_SUBST(SYSTEM_CA_PATH)
+AC_ARG_WITH(kernel-firmware-dir, AS_HELP_STRING([--with-kernel-firmware-dir=DIR], [where kernel firmware directory is (default is /lib/firmware)]))
+
+if test -n "$with_kernel_firmware_dir" ; then
+ KERNEL_FIRMWARE_DIR="$with_kernel_firmware_dir"
+else
+ KERNEL_FIRMWARE_DIR="/lib/firmware"
+fi
+AC_DEFINE_UNQUOTED(KERNEL_FIRMWARE_DIR, "$KERNEL_FIRMWARE_DIR", [Define to path of the kernel firmware directory])
+AC_SUBST(KERNEL_FIRMWARE_DIR)
+
NM_COMPILER_WARNINGS
GTK_DOC_CHECK(1.0)
@@ -451,9 +517,10 @@ src/Makefile
src/tests/Makefile
marshallers/Makefile
src/logging/Makefile
-src/named-manager/Makefile
+src/dns-manager/Makefile
src/vpn-manager/Makefile
src/dhcp-manager/Makefile
+src/dhcp-manager/tests/Makefile
src/ip6-manager/Makefile
src/supplicant-manager/Makefile
src/supplicant-manager/tests/Makefile
@@ -476,12 +543,14 @@ tools/Makefile
system-settings/Makefile
system-settings/plugins/Makefile
system-settings/plugins/ifupdown/Makefile
+system-settings/plugins/ifupdown/tests/Makefile
+system-settings/plugins/ifnet/Makefile
+system-settings/plugins/ifnet/tests/Makefile
system-settings/plugins/ifcfg-rh/Makefile
system-settings/plugins/ifcfg-rh/tests/Makefile
system-settings/plugins/ifcfg-rh/tests/network-scripts/Makefile
system-settings/plugins/ifcfg-suse/Makefile
system-settings/plugins/keyfile/Makefile
-system-settings/plugins/keyfile/io/Makefile
system-settings/plugins/keyfile/tests/Makefile
system-settings/plugins/keyfile/tests/keyfiles/Makefile
cli/Makefile
@@ -504,21 +573,26 @@ initscript/paldo/Makefile
initscript/paldo/NetworkManager
initscript/Mandriva/Makefile
initscript/Mandriva/networkmanager
+initscript/linexa/Makefile
+initscript/linexa/networkmanager
introspection/Makefile
man/Makefile
man/NetworkManager.8
man/NetworkManager.conf.5
man/nm-system-settings.conf.5
man/nm-tool.1
+man/nm-online.1
man/nmcli.1
po/Makefile.in
policy/Makefile
+data/Makefile
docs/Makefile
docs/libnm-glib/Makefile
docs/libnm-util/Makefile
NetworkManager.pc
examples/Makefile
examples/python/Makefile
+examples/C/Makefile
])
AC_OUTPUT
@@ -530,6 +604,7 @@ echo
if test -n "${DHCLIENT_PATH}"; then
echo ISC dhclient support: ${DHCLIENT_PATH}
+ echo ISC dhclient version: ${DHCLIENT_VERSION}
else
echo ISC dhclient support: no
fi
@@ -540,6 +615,12 @@ else
echo dhcpcd support: no
fi
+if test -n "${with_systemdsystemunitdir}"; then
+ echo systemd support: ${with_systemdsystemunitdir}
+else
+ echo systemd support: no
+fi
+
echo
echo Building documentation: ${with_docs}
echo Building tests: ${with_tests}
diff --git a/data/Makefile.am b/data/Makefile.am
new file mode 100644
index 0000000000..f91d3a8255
--- /dev/null
+++ b/data/Makefile.am
@@ -0,0 +1,26 @@
+
+if HAVE_SYSTEMD
+systemdsystemunit_DATA = NetworkManager.service
+
+NetworkManager.service: NetworkManager.service.in
+ $(edit) $< >$@
+
+servicedir = $(datadir)/dbus-1/system-services
+service_in_files = org.freedesktop.NetworkManager.service.in
+service_DATA = $(service_in_files:.service.in=.service)
+
+$(service_DATA): $(service_in_files) Makefile
+ $(edit) $< >$@
+endif
+
+edit = sed \
+ -e 's|@sbindir[@]|$(sbindir)|g' \
+ -e 's|@sysconfdir[@]|$(sysconfdir)|g' \
+ -e 's|@localstatedir[@]|$(localstatedir)|g'
+
+EXTRA_DIST = \
+ NetworkManager.service.in \
+ org.freedesktop.NetworkManager.service.in
+
+CLEANFILES = NetworkManager.service org.freedesktop.NetworkManager.service
+
diff --git a/data/NetworkManager.service.in b/data/NetworkManager.service.in
new file mode 100644
index 0000000000..d93fc6709d
--- /dev/null
+++ b/data/NetworkManager.service.in
@@ -0,0 +1,12 @@
+[Unit]
+Description=Network Manager
+After=syslog.target
+
+[Service]
+Type=dbus
+BusName=org.freedesktop.NetworkManager
+ExecStart=@sbindir@/NetworkManager --no-daemon
+
+[Install]
+WantedBy=network.target multi-user.target
+Alias=dbus-org.freedesktop.NetworkManager.service
diff --git a/data/org.freedesktop.NetworkManager.service.in b/data/org.freedesktop.NetworkManager.service.in
new file mode 100644
index 0000000000..5bd091b4d3
--- /dev/null
+++ b/data/org.freedesktop.NetworkManager.service.in
@@ -0,0 +1,11 @@
+# This D-Bus service activation file is only for systemd support since
+# an auto-activated NetworkManager would be quite surprising for those people
+# who have NM installed but turned off. Thus the Exec path available to
+# D-Bus is /bin/false, but systemd knows the real Exec path due to the NM
+# systemd .service file.
+
+[D-BUS Service]
+Name=org.freedesktop.NetworkManager
+Exec=/bin/false
+User=root
+SystemdService=dbus-org.freedesktop.NetworkManager.service
diff --git a/docs/Makefile.am b/docs/Makefile.am
index fe74511025..5a3da7e067 100644
--- a/docs/Makefile.am
+++ b/docs/Makefile.am
@@ -1,7 +1,7 @@
-SUBDIRS = libnm-glib libnm-util
-
if WITH_DOCS
+SUBDIRS = libnm-glib libnm-util
+
INCLUDES = \
-I$(top_srcdir)/include \
-I$(top_srcdir)/libnm-util
diff --git a/examples/C/Makefile.am b/examples/C/Makefile.am
new file mode 100644
index 0000000000..a8b5a64075
--- /dev/null
+++ b/examples/C/Makefile.am
@@ -0,0 +1,54 @@
+INCLUDES = -I${top_srcdir}/libnm-util \
+ -I${top_srcdir}/libnm-glib \
+ -I${top_srcdir}/include
+
+AM_CPPFLAGS = \
+ $(DBUS_CFLAGS) \
+ $(GLIB_CFLAGS)
+
+noinst_PROGRAMS = \
+ add-connection-glib \
+ get-active-connections \
+ list-connections-dbus \
+ list-connections-libnm-glib \
+ get-ap-info-libnm-glib
+
+add_connection_glib_SOURCES = add-connection-glib.c
+add_connection_glib_LDADD = \
+ $(top_builddir)/libnm-util/libnm-util.la \
+ $(DBUS_LIBS) \
+ $(GLIB_LIBS)
+
+get_active_connections_SOURCES = get-active-connections.c
+get_active_connections_LDADD = \
+ $(top_builddir)/libnm-util/libnm-util.la \
+ $(DBUS_LIBS) \
+ $(GLIB_LIBS)
+
+list_connections_dbus_SOURCES = list-connections-dbus.c
+list_connections_dbus_LDADD = \
+ $(top_builddir)/libnm-util/libnm-util.la \
+ $(DBUS_LIBS) \
+ $(GLIB_LIBS)
+
+list_connections_libnm_glib_SOURCES = list-connections-libnm-glib.c
+list_connections_libnm_glib_LDADD = \
+ $(top_builddir)/libnm-util/libnm-util.la \
+ $(top_builddir)/libnm-glib/libnm-glib.la \
+ $(DBUS_LIBS) \
+ $(GLIB_LIBS)
+
+get_ap_info_libnm_glib_SOURCES = get-ap-info-libnm-glib.c
+get_ap_info_libnm_glib_LDADD = \
+ $(top_builddir)/libnm-util/libnm-util.la \
+ $(top_builddir)/libnm-glib/libnm-glib.la \
+ $(DBUS_LIBS) \
+ $(GLIB_LIBS)
+
+EXTRA_DIST = \
+ add-connection-glib.c \
+ get-active-connections.c \
+ list-connections-dbus.c \
+ list-connections-libnm-glib.c \
+ get-ap-info-libnm-glib.c
+
diff --git a/examples/C/add-connection-glib.c b/examples/C/add-connection-glib.c
new file mode 100644
index 0000000000..4cdcfa2310
--- /dev/null
+++ b/examples/C/add-connection-glib.c
@@ -0,0 +1,113 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * (C) Copyright 2010 Red Hat, Inc.
+ */
+
+/*
+ * The example shows how to call AddConnection() D-Bus method to add
+ * a connection to system settings service. It uses dbus-glib and libnm-util
+ * libraries.
+ *
+ * Compile with:
+ * gcc -Wall `pkg-config --libs --cflags glib-2.0 dbus-glib-1 libnm-util` add-connection-glib.c -o add-connection-glib
+ */
+
+#include <glib.h>
+#include <dbus/dbus-glib.h>
+
+#include <nm-connection.h>
+#include <nm-setting-connection.h>
+#include <nm-setting-wired.h>
+#include <nm-setting-ip4-config.h>
+#include <NetworkManager.h>
+#include <nm-utils.h>
+
+#define DBUS_TYPE_G_MAP_OF_VARIANT (dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_VALUE))
+#define DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT (dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, DBUS_TYPE_G_MAP_OF_VARIANT))
+
+static void
+add_connection (DBusGProxy *proxy, const char *con_name)
+{
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ NMSettingWired *s_wired;
+ NMSettingIP4Config *s_ip4;
+ char *uuid;
+ GHashTable *hash;
+ GError *error = NULL;
+
+ /* Create a new connection object */
+ connection = (NMConnection *) nm_connection_new ();
+
+ /* Build up the 'connection' Setting */
+ s_con = (NMSettingConnection *) nm_setting_connection_new ();
+ uuid = nm_utils_uuid_generate ();
+ g_object_set (G_OBJECT (s_con),
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_ID, con_name,
+ NM_SETTING_CONNECTION_TYPE, "802-3-ethernet",
+ NULL);
+ g_free (uuid);
+ nm_connection_add_setting (connection, NM_SETTING (s_con));
+
+ /* Build up the 'wired' Setting */
+ s_wired = (NMSettingWired *) nm_setting_wired_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_wired));
+
+ /* Build up the 'ipv4' Setting */
+ s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ g_object_set (G_OBJECT (s_ip4),
+ NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
+ NULL);
+ nm_connection_add_setting (connection, NM_SETTING (s_ip4));
+
+ hash = nm_connection_to_hash (connection);
+
+ /* Call AddConnection with the hash as argument */
+ dbus_g_proxy_call (proxy, "AddConnection", &error,
+ DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, hash,
+ G_TYPE_INVALID);
+
+ g_hash_table_destroy (hash);
+ g_object_unref (connection);
+}
+
+
+int main (int argc, char *argv[])
+{
+ DBusGConnection *bus;
+ DBusGProxy *proxy;
+
+ /* Initialize GType system */
+ g_type_init ();
+
+ /* Get system bus */
+ bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, NULL);
+
+ /* Create a D-Bus proxy; NM_DBUS_* defined in NetworkManager.h */
+ proxy = dbus_g_proxy_new_for_name (bus,
+ NM_DBUS_SERVICE_SYSTEM_SETTINGS,
+ NM_DBUS_PATH_SETTINGS,
+ NM_DBUS_IFACE_SETTINGS);
+
+ /* Add a connection */
+ add_connection (proxy, "__Test connection__");
+
+ g_object_unref (proxy);
+ dbus_g_connection_unref (bus);
+
+ return 0;
+}
diff --git a/examples/C/get-active-connections.c b/examples/C/get-active-connections.c
new file mode 100644
index 0000000000..36224d29ad
--- /dev/null
+++ b/examples/C/get-active-connections.c
@@ -0,0 +1,248 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * (C) Copyright 2010 Red Hat, Inc.
+ */
+
+/*
+ * The example shows how to call the D-Bus properties interface to get the
+ * list of currently active connections known to NetworkManager. It uses
+ * dbus-glib and libnm-util libraries.
+ *
+ * Compile with:
+ * gcc -Wall `pkg-config --libs --cflags glib-2.0 dbus-glib-1 libnm-util` get-active-connections.c -o get-active-connections
+ */
+
+#include <glib.h>
+#include <dbus/dbus-glib.h>
+
+#include <nm-connection.h>
+#include <nm-setting-connection.h>
+#include <nm-setting-wired.h>
+#include <nm-setting-ip4-config.h>
+#include <NetworkManager.h>
+#include <nm-utils.h>
+
+#define DBUS_TYPE_G_MAP_OF_VARIANT (dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_VALUE))
+#define DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT (dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, DBUS_TYPE_G_MAP_OF_VARIANT))
+#define DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH (dbus_g_type_get_collection ("GPtrArray", DBUS_TYPE_G_OBJECT_PATH))
+
+static void
+print_connection (DBusGConnection *bus, const char *service, const char *path)
+{
+ DBusGProxy *proxy;
+ GError *error = NULL;
+ GHashTable *hash = NULL;
+ NMConnection *connection = NULL;
+
+ /* This function asks the Settings Service that provides this network
+ * configuration for the details of that configuration.
+ */
+
+ /* Create the D-Bus proxy for the Settings Service so we can ask it for the
+ * connection configuration details.
+ */
+ proxy = dbus_g_proxy_new_for_name (bus,
+ service,
+ path,
+ NM_DBUS_IFACE_SETTINGS_CONNECTION);
+ g_assert (proxy);
+
+ /* Request the all the configuration of the Connection */
+ if (!dbus_g_proxy_call (proxy, "GetSettings", &error,
+ G_TYPE_INVALID,
+ DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, &hash,
+ G_TYPE_INVALID)) {
+ g_warning ("Failed to get active connection Connection property: %s",
+ error->message);
+ g_error_free (error);
+ goto out;
+ }
+
+ /* Using the raw configuration, create an NMConnection object for it. This
+ * step also verifies that the data we got from the settings service is
+ * valid. */
+ connection = nm_connection_new_from_hash (hash, &error);
+ if (!connection) {
+ g_warning ("Received invalid connection data: %s", error->message);
+ g_error_free (error);
+ goto out;
+ }
+
+ /* And finally dump all the configuration to stdout */
+ g_message ("%s => %s", service, path);
+ nm_connection_dump (connection);
+
+out:
+ if (connection)
+ g_object_unref (connection);
+ if (hash)
+ g_hash_table_destroy (hash);
+ g_object_unref (proxy);
+}
+
+static void
+get_active_connection_details (DBusGConnection *bus, const char *obj_path)
+{
+ DBusGProxy *props_proxy;
+ GValue path_value = { 0 };
+ GValue serv_value = { 0 };
+ GError *error = NULL;
+ const char *path = NULL, *service = NULL;
+
+ /* This function gets the backing Connection object that describes the
+ * network configuration that the ActiveConnection object is actually using.
+ * The ActiveConnection object contains the mapping between the configuration
+ * and the actual network interfaces that are using that configuration.
+ */
+
+ /* Create a D-Bus object proxy for the active connection object's properties */
+ props_proxy = dbus_g_proxy_new_for_name (bus,
+ NM_DBUS_SERVICE,
+ obj_path,
+ DBUS_INTERFACE_PROPERTIES);
+ g_assert (props_proxy);
+
+ /* Get the object path of the Connection details */
+ if (!dbus_g_proxy_call (props_proxy, "Get", &error,
+ G_TYPE_STRING, NM_DBUS_INTERFACE_ACTIVE_CONNECTION,
+ G_TYPE_STRING, "Connection",
+ G_TYPE_INVALID,
+ G_TYPE_VALUE, &path_value,
+ G_TYPE_INVALID)) {
+ g_warning ("Failed to get active connection Connection property: %s",
+ error->message);
+ g_error_free (error);
+ goto out;
+ }
+
+ if (!G_VALUE_HOLDS (&path_value, DBUS_TYPE_G_OBJECT_PATH)) {
+ g_warning ("Unexpected type returned getting Connection property: %s",
+ G_VALUE_TYPE_NAME (&path_value));
+ goto out;
+ }
+
+ path = g_value_get_boxed (&path_value);
+ if (!path) {
+ g_warning ("Missing connection path!");
+ goto out;
+ }
+
+ /* Get the service name of the D-Bus service that provides the Connection */
+ if (!dbus_g_proxy_call (props_proxy, "Get", &error,
+ G_TYPE_STRING, NM_DBUS_INTERFACE_ACTIVE_CONNECTION,
+ G_TYPE_STRING, "ServiceName",
+ G_TYPE_INVALID,
+ G_TYPE_VALUE, &serv_value,
+ G_TYPE_INVALID)) {
+ g_warning ("Failed to get active connection ServiceName property: %s",
+ error->message);
+ g_error_free (error);
+ goto out;
+ }
+
+ if (!G_VALUE_HOLDS (&serv_value, G_TYPE_STRING)) {
+ g_warning ("Unexpected type returned getting Connection property: %s",
+ G_VALUE_TYPE_NAME (&serv_value));
+ goto out;
+ }
+
+ service = g_value_get_string (&serv_value);
+ if (!service) {
+ g_warning ("Missing connection service name!");
+ goto out;
+ }
+
+ /* Print out the actual connection details */
+ print_connection (bus, service, path);
+
+out:
+ g_value_unset (&path_value);
+ g_value_unset (&serv_value);
+ g_object_unref (props_proxy);
+}
+
+static void
+get_active_connections (DBusGConnection *bus, DBusGProxy *proxy)
+{
+ GError *error = NULL;
+ GValue value = { 0 };
+ GPtrArray *paths = NULL;
+ int i;
+
+ /* Get the ActiveConnections property from the NM Manager object */
+ if (!dbus_g_proxy_call (proxy, "Get", &error,
+ G_TYPE_STRING, NM_DBUS_INTERFACE,
+ G_TYPE_STRING, "ActiveConnections",
+ G_TYPE_INVALID,
+ G_TYPE_VALUE, &value,
+ G_TYPE_INVALID)) {
+ g_warning ("Failed to get ActiveConnections property: %s", error->message);
+ g_error_free (error);
+ return;
+ }
+
+ /* Make sure the ActiveConnections property is the type we expect it to be */
+ if (!G_VALUE_HOLDS (&value, DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH)) {
+ g_warning ("Unexpected type returned getting ActiveConnections: %s",
+ G_VALUE_TYPE_NAME (&value));
+ goto out;
+ }
+
+ /* Extract the active connections array from the GValue */
+ paths = g_value_get_boxed (&value);
+ if (!paths) {
+ g_warning ("Could not retrieve active connections property");
+ goto out;
+ }
+
+ /* And print out the details of each active connection */
+ for (i = 0; i < paths->len; i++)
+ get_active_connection_details (bus, g_ptr_array_index (paths, i));
+
+out:
+ g_value_unset (&value);
+}
+
+
+int main (int argc, char *argv[])
+{
+ DBusGConnection *bus;
+ DBusGProxy *props_proxy;
+
+ /* Initialize GType system */
+ g_type_init ();
+
+ /* Get system bus */
+ bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, NULL);
+
+ /* Create a D-Bus proxy to get the object properties from the NM Manager
+ * object. NM_DBUS_* defines are from NetworkManager.h.
+ */
+ props_proxy = dbus_g_proxy_new_for_name (bus,
+ NM_DBUS_SERVICE,
+ NM_DBUS_PATH,
+ DBUS_INTERFACE_PROPERTIES);
+ g_assert (props_proxy);
+
+ /* Get active connections */
+ get_active_connections (bus, props_proxy);
+
+ g_object_unref (props_proxy);
+ dbus_g_connection_unref (bus);
+
+ return 0;
+}
diff --git a/examples/C/get-ap-info-libnm-glib.c b/examples/C/get-ap-info-libnm-glib.c
new file mode 100644
index 0000000000..6ff310d821
--- /dev/null
+++ b/examples/C/get-ap-info-libnm-glib.c
@@ -0,0 +1,229 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * (C) Copyright 2010 Red Hat, Inc.
+ */
+
+/*
+ * The example shows how to get info about APs visible by Wi-Fi devices
+ * using libnm-glib (that wraps direct D-Bus calls).
+ * The example uses dbus-glib, libnm-util and libnm-glib libraries.
+ *
+ * Compile with:
+ * gcc -Wall `pkg-config --libs --cflags glib-2.0 dbus-glib-1 libnm-util libnm-glib` get-ap-info-libnm-glib.c -o get-ap-info-libnm-glib
+ */
+
+#include <glib.h>
+#include <dbus/dbus-glib.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <nm-client.h>
+#include <nm-device.h>
+#include <nm-device-wifi.h>
+#include <nm-access-point.h>
+#include <NetworkManager.h>
+#include <nm-utils.h>
+
+/* Convert flags to string */
+static char *
+ap_wpa_rsn_flags_to_string (guint32 flags)
+{
+ char *flags_str[16]; /* Enough space for flags and terminating NULL */
+ char *ret_str;
+ int i = 0;
+
+ if (flags & NM_802_11_AP_SEC_PAIR_WEP40)
+ flags_str[i++] = g_strdup ("pair_wpe40");
+ if (flags & NM_802_11_AP_SEC_PAIR_WEP104)
+ flags_str[i++] = g_strdup ("pair_wpe104");
+ if (flags & NM_802_11_AP_SEC_PAIR_TKIP)
+ flags_str[i++] = g_strdup ("pair_tkip");
+ if (flags & NM_802_11_AP_SEC_PAIR_CCMP)
+ flags_str[i++] = g_strdup ("pair_ccmp");
+ if (flags & NM_802_11_AP_SEC_GROUP_WEP40)
+ flags_str[i++] = g_strdup ("group_wpe40");
+ if (flags & NM_802_11_AP_SEC_GROUP_WEP104)
+ flags_str[i++] = g_strdup ("group_wpe104");
+ if (flags & NM_802_11_AP_SEC_GROUP_TKIP)
+ flags_str[i++] = g_strdup ("group_tkip");
+ if (flags & NM_802_11_AP_SEC_GROUP_CCMP)
+ flags_str[i++] = g_strdup ("group_ccmp");
+ if (flags & NM_802_11_AP_SEC_KEY_MGMT_PSK)
+ flags_str[i++] = g_strdup ("psk");
+ if (flags & NM_802_11_AP_SEC_KEY_MGMT_802_1X)
+ flags_str[i++] = g_strdup ("802.1X");
+
+ if (i == 0)
+ flags_str[i++] = g_strdup ("none");
+
+ flags_str[i] = NULL;
+
+ ret_str = g_strjoinv (" ", flags_str);
+
+ i = 0;
+ while (flags_str[i])
+ g_free (flags_str[i++]);
+
+ return ret_str;
+}
+
+static void
+show_access_point_info (NMAccessPoint *ap)
+{
+ guint32 flags, wpa_flags, rsn_flags, freq, bitrate;
+ guint8 strength;
+ const GByteArray *ssid;
+ const char *hwaddr;
+ NM80211Mode mode;
+ char *freq_str, *ssid_str, *bitrate_str, *strength_str, *wpa_flags_str, *rsn_flags_str;
+ GString *security_str;
+
+ /* Get AP properties */
+ flags = nm_access_point_get_flags (ap);
+ 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);
+ freq = nm_access_point_get_frequency (ap);
+ mode = nm_access_point_get_mode (ap);
+ bitrate = nm_access_point_get_max_bitrate (ap);
+ strength = nm_access_point_get_strength (ap);
+
+ /* Convert to strings */
+ ssid_str = nm_utils_ssid_to_utf8 ((const char *) ssid->data, ssid->len);
+ freq_str = g_strdup_printf ("%u MHz", freq);
+ bitrate_str = g_strdup_printf ("%u MB/s", bitrate/1000);
+ strength_str = g_strdup_printf ("%u", strength);
+ wpa_flags_str = ap_wpa_rsn_flags_to_string (wpa_flags);
+ rsn_flags_str = ap_wpa_rsn_flags_to_string (rsn_flags);
+
+ security_str = g_string_new (NULL);
+ if ( !(flags & NM_802_11_AP_FLAGS_PRIVACY)
+ && (wpa_flags != NM_802_11_AP_SEC_NONE)
+ && (rsn_flags != NM_802_11_AP_SEC_NONE))
+ g_string_append (security_str, "Encrypted: ");
+
+ if ( (flags & NM_802_11_AP_FLAGS_PRIVACY)
+ && (wpa_flags == NM_802_11_AP_SEC_NONE)
+ && (rsn_flags == NM_802_11_AP_SEC_NONE))
+ g_string_append (security_str, "WEP ");
+ if (wpa_flags != NM_802_11_AP_SEC_NONE)
+ g_string_append (security_str, "WPA ");
+ if (rsn_flags != NM_802_11_AP_SEC_NONE)
+ g_string_append (security_str, "WPA2 ");
+ if ( (wpa_flags & NM_802_11_AP_SEC_KEY_MGMT_802_1X)
+ || (rsn_flags & NM_802_11_AP_SEC_KEY_MGMT_802_1X))
+ g_string_append (security_str, "Enterprise ");
+
+ if (security_str->len > 0)
+ g_string_truncate (security_str, security_str->len-1); /* Chop off last space */
+
+ printf ("SSID: %s\n", ssid_str);
+ printf ("BSSID: %s\n", hwaddr);
+ printf ("Mode: %s\n", mode == NM_802_11_MODE_ADHOC ? "Ad-Hoc" : mode == NM_802_11_MODE_INFRA ? "Infrastructure" : "Unknown");
+ printf ("Freq: %s\n", freq_str);
+ printf ("Bitrate: %s\n", bitrate_str);
+ printf ("Strength: %s\n", strength_str);
+ printf ("Security: %s\n", security_str->str);
+ printf ("WPA flags: %s\n", wpa_flags_str);
+ printf ("RSN flags: %s\n", rsn_flags_str);
+ printf ("D-Bus path: %s\n\n", nm_object_get_path (NM_OBJECT (ap)));
+
+ g_free (ssid_str);
+ g_free (freq_str);
+ g_free (bitrate_str);
+ g_free (strength_str);
+ g_free (wpa_flags_str);
+ g_free (rsn_flags_str);
+ g_string_free (security_str, TRUE);
+}
+
+static void
+show_wifi_device_info (NMDevice *device)
+{
+ NMAccessPoint *active_ap = NULL;
+ const GPtrArray *aps;
+ const char *iface;
+ const char *driver;
+ guint32 speed;
+ const GByteArray *active_ssid;
+ char *active_ssid_str = NULL;
+ int i;
+
+ /* Get active AP */
+ if (nm_device_get_state (device) == NM_DEVICE_STATE_ACTIVATED) {
+ if ((active_ap = nm_device_wifi_get_active_access_point (NM_DEVICE_WIFI (device)))) {
+ active_ssid = nm_access_point_get_ssid (active_ap);
+ active_ssid_str = nm_utils_ssid_to_utf8 ((const char *) active_ssid->data, active_ssid->len);
+ }
+ }
+
+ iface = nm_device_get_iface (device);
+ driver = nm_device_get_driver (device);
+ speed = nm_device_wifi_get_bitrate (NM_DEVICE_WIFI (device));
+ speed /= 1000;
+
+ printf ("Device: %s ---- Driver: %s ---- Speed: %d MB/s ---- Active AP: %s\n",
+ iface, driver, speed, active_ssid_str ? active_ssid_str : "none");
+ printf ("=================================================================================\n");
+ g_free (active_ssid_str);
+
+ /* Get all APs of the Wi-Fi device */
+ aps = nm_device_wifi_get_access_points (NM_DEVICE_WIFI (device));
+
+ /* Print AP details */
+ for (i = 0; aps && (i < aps->len); i++) {
+ NMAccessPoint *ap = g_ptr_array_index (aps, i);
+ show_access_point_info (ap);
+ }
+}
+
+int main (int argc, char *argv[])
+{
+ DBusGConnection *bus;
+ NMClient *client;
+ const GPtrArray *devices;
+ int i;
+
+ /* Initialize GType system */
+ g_type_init ();
+
+ /* Get system bus */
+ bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, NULL);
+
+ /* Get NMClient object */
+ client = nm_client_new ();
+ if (!client) {
+ dbus_g_connection_unref (bus);
+ g_message ("Error: Could not create NMClient.");
+ return EXIT_FAILURE;
+ }
+
+ /* Get all devices managed by NetworkManager */
+ devices = nm_client_get_devices (client);
+
+ /* Go through the array and process Wi-Fi devices */
+ for (i = 0; devices && (i < devices->len); i++) {
+ NMDevice *device = g_ptr_array_index (devices, i);
+ if (NM_IS_DEVICE_WIFI (device))
+ show_wifi_device_info (device);
+ }
+
+ g_object_unref (client);
+ dbus_g_connection_unref (bus);
+
+ return EXIT_SUCCESS;
+}
diff --git a/examples/C/list-connections-dbus.c b/examples/C/list-connections-dbus.c
new file mode 100644
index 0000000000..957723c4e9
--- /dev/null
+++ b/examples/C/list-connections-dbus.c
@@ -0,0 +1,83 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * (C) Copyright 2010 Red Hat, Inc.
+ */
+
+/*
+ * The example shows how to list connections from System Settings service using direct
+ * D-Bus call of ListConnections method.
+ * The example uses dbus-glib, libnm-util libraries.
+ *
+ * Compile with:
+ * gcc -Wall `pkg-config --libs --cflags glib-2.0 dbus-glib-1 libnm-util` list-connections-dbus.c -o list-connections-dbus
+ */
+
+#include <glib.h>
+#include <dbus/dbus-glib.h>
+#include <stdio.h>
+
+#include <NetworkManager.h>
+#include <nm-utils.h>
+
+#define DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH (dbus_g_type_get_collection ("GPtrArray", DBUS_TYPE_G_OBJECT_PATH))
+
+static void
+list_connections (DBusGProxy *proxy)
+{
+ int i;
+ GError *error = NULL;
+ GPtrArray *con_array;
+
+ /* Call ListConnections D-Bus method */
+ dbus_g_proxy_call (proxy, "ListConnections", &error,
+ /* No input arguments */
+ G_TYPE_INVALID,
+ DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH, &con_array, /* Return values */
+ G_TYPE_INVALID);
+
+ for (i = 0; con_array && i < con_array->len; i++) {
+ char *connection_path = g_ptr_array_index (con_array, i);
+ printf ("%s\n", connection_path);
+ g_free (connection_path);
+ }
+ g_ptr_array_free (con_array, TRUE);
+}
+
+int main (int argc, char *argv[])
+{
+ DBusGConnection *bus;
+ DBusGProxy *proxy;
+
+ /* Initialize GType system */
+ g_type_init ();
+
+ /* Get system bus */
+ bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, NULL);
+
+ /* Create a D-Bus proxy; NM_DBUS_* defined in NetworkManager.h */
+ proxy = dbus_g_proxy_new_for_name (bus,
+ NM_DBUS_SERVICE_SYSTEM_SETTINGS,
+ NM_DBUS_PATH_SETTINGS,
+ NM_DBUS_IFACE_SETTINGS);
+
+ /* List connections of system settings service */
+ list_connections (proxy);
+
+ g_object_unref (proxy);
+ dbus_g_connection_unref (bus);
+
+ return 0;
+}
diff --git a/examples/C/list-connections-libnm-glib.c b/examples/C/list-connections-libnm-glib.c
new file mode 100644
index 0000000000..4fc2556a4c
--- /dev/null
+++ b/examples/C/list-connections-libnm-glib.c
@@ -0,0 +1,178 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * (C) Copyright 2010 Red Hat, Inc.
+ */
+
+/*
+ * The example shows how to list connections from System Settings service using libnm-glib
+ * (that wraps direct D-Bus calls).
+ * The example uses dbus-glib, libnm-util and libnm-glib libraries.
+ *
+ * Compile with:
+ * gcc -Wall `pkg-config --libs --cflags glib-2.0 dbus-glib-1 libnm-util libnm-glib` list-connections-libnm-glib.c -o list-connections-libnm-glib
+ */
+
+#include <glib.h>
+#include <dbus/dbus-glib.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <signal.h>
+
+#include <nm-connection.h>
+#include <nm-setting-connection.h>
+#include <NetworkManager.h>
+#include <nm-utils.h>
+#include <nm-remote-settings.h>
+#include <nm-remote-settings-system.h>
+#include <nm-settings-interface.h>
+
+
+/* Global variables */
+GMainLoop *loop = NULL; /* Main loop variable - needed for waiting for signal */
+int result = EXIT_SUCCESS;
+
+static void
+signal_handler (int signo)
+{
+ if (signo == SIGINT || signo == SIGTERM) {
+ g_message ("Caught signal %d, shutting down...", signo);
+ g_main_loop_quit (loop);
+ }
+}
+
+static void
+setup_signals (void)
+{
+ struct sigaction action;
+ sigset_t mask;
+
+ sigemptyset (&mask);
+ action.sa_handler = signal_handler;
+ action.sa_mask = mask;
+ action.sa_flags = 0;
+ sigaction (SIGTERM, &action, NULL);
+ sigaction (SIGINT, &action, NULL);
+}
+
+/* Print details of connection */
+static void
+show_connection (NMConnection *data, gpointer user_data)
+{
+ NMConnection *connection = (NMConnection *) data;
+ NMSettingConnection *s_con;
+ guint64 timestamp;
+ char *timestamp_str;
+ char timestamp_real_str[64];
+ const char *val1, *val2, *val3, *val4, *val5;
+
+ s_con = (NMSettingConnection *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION);
+ if (s_con) {
+ /* Get various info from NMSettingConnection and show it */
+ timestamp = nm_setting_connection_get_timestamp (s_con);
+ timestamp_str = g_strdup_printf ("%" G_GUINT64_FORMAT, timestamp);
+ strftime (timestamp_real_str, sizeof (timestamp_real_str), "%c", localtime ((time_t *) &timestamp));
+
+ val1 = nm_setting_connection_get_id (s_con);
+ val2 = nm_setting_connection_get_uuid (s_con);
+ val3 = nm_setting_connection_get_connection_type (s_con);
+ val4 = nm_connection_get_path (connection);
+ val5 = timestamp ? timestamp_real_str : "never";
+
+ printf ("%-25s | %s | %-15s | %-43s | %s\n", val1, val2, val3, val4, val5);
+
+ g_free (timestamp_str);
+ }
+}
+
+/* This callback is called when connections from the settings service are ready.
+ * Now the connections can be listed.
+ */
+static void
+get_connections_cb (NMSettingsInterface *settings, gpointer user_data)
+{
+ GSList *system_connections;
+
+ system_connections = nm_settings_interface_list_connections (settings);
+
+ printf ("System connections:\n===================\n");
+
+ g_slist_foreach (system_connections, (GFunc) show_connection, NULL);
+
+ g_slist_free (system_connections);
+ g_object_unref (settings);
+
+ /* We are done, exit main loop */
+ g_main_loop_quit (loop);
+}
+
+/* Get system settings and then connect to connections-read signal */
+static gboolean
+list_connections (gpointer data)
+{
+ DBusGConnection *bus = (DBusGConnection *) data;
+ NMRemoteSettingsSystem *system_settings;
+ gboolean system_settings_running;
+
+ /* Get system settings */
+ if (!(system_settings = nm_remote_settings_system_new (bus))) {
+ g_message ("Error: Could not get system settings.");
+ result = EXIT_FAILURE;
+ g_main_loop_quit (loop);
+ return FALSE;
+ }
+
+ /* Find out whether setting service is running */
+ g_object_get (system_settings, NM_REMOTE_SETTINGS_SERVICE_RUNNING, &system_settings_running, NULL);
+
+ if (!system_settings_running) {
+ g_message ("Error: Can't obtain connections: settings service is not running.");
+ result = EXIT_FAILURE;
+ g_main_loop_quit (loop);
+ return FALSE;
+ }
+
+ /* Connect to signal "connections-read" - emitted when connections are fetched and ready */
+ g_signal_connect (system_settings, NM_SETTINGS_INTERFACE_CONNECTIONS_READ,
+ G_CALLBACK (get_connections_cb), NULL);
+
+ return FALSE;
+}
+
+int main (int argc, char *argv[])
+{
+ DBusGConnection *bus;
+
+ /* Initialize GType system */
+ g_type_init ();
+
+ /* Get system bus */
+ bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, NULL);
+
+ /* Run list_connections from main loop, because we need to wait for "connections-read"
+ * signal to have connections ready. The execution will be finished in get_connections_cb()
+ * callback on the signal.
+ */
+ g_idle_add (list_connections, bus);
+
+ loop = g_main_loop_new (NULL, FALSE); /* Create main loop */
+ setup_signals (); /* Setup UNIX signals */
+ g_main_loop_run (loop); /* Run main loop */
+
+ g_main_loop_unref (loop);
+ dbus_g_connection_unref (bus);
+
+ return result;
+}
diff --git a/examples/Makefile.am b/examples/Makefile.am
index c2ddf781cc..643959b143 100644
--- a/examples/Makefile.am
+++ b/examples/Makefile.am
@@ -1 +1,3 @@
-SUBDIRS=python
+SUBDIRS= \
+ python \
+ C
diff --git a/examples/python/Makefile.am b/examples/python/Makefile.am
index 179e2f3c9a..dec8b571f7 100644
--- a/examples/python/Makefile.am
+++ b/examples/python/Makefile.am
@@ -3,6 +3,7 @@ EXTRA_DIST = \
add-system-connection.py \
vpn.py \
list-connections.py \
- show-bssids.py
+ show-bssids.py \
+ disconnect-device.py
diff --git a/examples/python/disconnect-device.py b/examples/python/disconnect-device.py
new file mode 100755
index 0000000000..f885495140
--- /dev/null
+++ b/examples/python/disconnect-device.py
@@ -0,0 +1,62 @@
+#!/bin/env python
+# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Copyright (C) 2010 Red Hat, Inc.
+#
+
+import dbus, sys
+
+# This example takes a device interface name as a parameter and tells
+# NetworkManager to disconnect that device, closing down any network
+# connection it may have
+
+if len(sys.argv) != 2:
+ raise Exception("Usage: %s <interface>" % sys.argv[0])
+
+bus = dbus.SystemBus()
+
+# Get a proxy for the base NetworkManager object
+proxy = bus.get_object("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager")
+manager = dbus.Interface(proxy, "org.freedesktop.NetworkManager")
+
+dpath = None
+
+# Find the device the user wants to disconnect
+devices = manager.GetDevices()
+for d in devices:
+ dev_proxy = bus.get_object("org.freedesktop.NetworkManager", d)
+ prop_iface = dbus.Interface(dev_proxy, "org.freedesktop.DBus.Properties")
+ iface = prop_iface.Get("org.freedesktop.NetworkManager.Device", "Interface")
+ if iface == sys.argv[1]:
+ dpath = d
+ break
+
+if not dpath or not len(dpath):
+ raise Exception("NetworkManager knows nothing about %s" % sys.argv[1])
+
+dev_proxy = bus.get_object("org.freedesktop.NetworkManager", dpath)
+dev_iface = dbus.Interface(dev_proxy, "org.freedesktop.NetworkManager.Device")
+prop_iface = dbus.Interface(dev_proxy, "org.freedesktop.DBus.Properties")
+
+# Make sure the device is connected before we try to disconnect it
+state = prop_iface.Get("org.freedesktop.NetworkManager.Device", "State")
+if state <= 3:
+ raise Exception("Device %s isn't connected" % sys.argv[1])
+
+# Tell NM to disconnect it
+dev_iface.Disconnect()
+
diff --git a/examples/python/nm-state.py b/examples/python/nm-state.py
index fddd2da629..2bbdd2db4a 100644
--- a/examples/python/nm-state.py
+++ b/examples/python/nm-state.py
@@ -47,13 +47,13 @@ active = manager_prop_iface.Get("org.freedesktop.NetworkManager", "ActiveConnect
for a in active:
ac_proxy = bus.get_object("org.freedesktop.NetworkManager", a)
prop_iface = dbus.Interface(ac_proxy, "org.freedesktop.DBus.Properties")
- state = prop_iface.Get("org.freedesktop.NetworkManager.ActiveConnection", "State")
+ state = prop_iface.Get("org.freedesktop.NetworkManager.Connection.Active", "State")
# Connections in NM are a collection of settings that describe everything
# needed to connect to a specific network. Lets get those details so we
# can find the user-readable name of the connection.
- con_path = prop_iface.Get("org.freedesktop.NetworkManager.ActiveConnection", "Connection")
- con_service = prop_iface.Get("org.freedesktop.NetworkManager.ActiveConnection", "ServiceName")
+ con_path = prop_iface.Get("org.freedesktop.NetworkManager.Connection.Active", "Connection")
+ con_service = prop_iface.Get("org.freedesktop.NetworkManager.Connection.Active", "ServiceName")
# ask the provider of the connection for its details
service_proxy = bus.get_object(con_service, con_path)
diff --git a/include/NetworkManager.h b/include/NetworkManager.h
index 2a0c6969fa..7e68855a13 100644
--- a/include/NetworkManager.h
+++ b/include/NetworkManager.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 2004 - 2008 Red Hat, Inc.
+ * (C) Copyright 2004 - 2010 Red Hat, Inc.
*/
#ifndef NETWORK_MANAGER_H
@@ -250,7 +250,7 @@ typedef enum {
/* Device is now managed */
NM_DEVICE_STATE_REASON_NOW_MANAGED = 2,
- /* Device is now managed unmanaged */
+ /* Device is now unmanaged */
NM_DEVICE_STATE_REASON_NOW_UNMANAGED = 3,
/* The device could not be readied for configuration */
diff --git a/include/NetworkManagerVPN.h b/include/NetworkManagerVPN.h
index d792847d6a..f4ef93d3d4 100644
--- a/include/NetworkManagerVPN.h
+++ b/include/NetworkManagerVPN.h
@@ -166,6 +166,9 @@ typedef enum {
*/
#define NM_VPN_PLUGIN_IP4_CONFIG_ROUTES "routes"
+/* boolean: prevent this VPN connection from ever getting the default route */
+#define NM_VPN_PLUGIN_IP4_CONFIG_NEVER_DEFAULT "never-default"
+
/* Deprecated */
#define NM_VPN_PLUGIN_IP4_CONFIG_GATEWAY NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY
diff --git a/initscript/Makefile.am b/initscript/Makefile.am
index 4cc710eba4..65555e3eff 100644
--- a/initscript/Makefile.am
+++ b/initscript/Makefile.am
@@ -23,3 +23,6 @@ endif
if TARGET_MANDRIVA
SUBDIRS += Mandriva
endif
+if TARGET_LINEXA
+SUBDIRS += linexa
+endif
diff --git a/initscript/RedHat/NetworkManager.in b/initscript/RedHat/NetworkManager.in
index 66f949597f..e26e59ed42 100755
--- a/initscript/RedHat/NetworkManager.in
+++ b/initscript/RedHat/NetworkManager.in
@@ -49,7 +49,7 @@ start()
echo
echo -n $"Starting NetworkManager daemon: "
- daemon --check $servicename $processname --pid-file=$pidfile
+ daemon --pidfile $pidfile --check $servicename $processname --pid-file=$pidfile
RETVAL=$?
echo
if [ -n "${NETWORKWAIT}" ]; then
diff --git a/initscript/linexa/Makefile.am b/initscript/linexa/Makefile.am
new file mode 100644
index 0000000000..0a0cc2bb3e
--- /dev/null
+++ b/initscript/linexa/Makefile.am
@@ -0,0 +1,6 @@
+EXTRA_DIST = networkmanager
+DISTCLEANFILES = networkmanager
+
+initddir = $(sysconfdir)/rc.d/init.d
+initd_SCRIPTS = networkmanager
+
diff --git a/initscript/linexa/networkmanager.in b/initscript/linexa/networkmanager.in
new file mode 100644
index 0000000000..0d754c3604
--- /dev/null
+++ b/initscript/linexa/networkmanager.in
@@ -0,0 +1,59 @@
+#!/bin/bash
+# Start the networkmanager daemon
+#
+# Author: Elias <elias@linexa.de>
+# [2010-08-20]
+
+# Information about the daemon
+title="networkmanager" # No spaces allowed in here
+start_after="dbus" # dependencies for start-up
+stop_after="xinetd" # dependencies for stop
+runlevel="2" # start/stop in this runlevel
+sequence="25" # "checkinstall networkmanager enable"
+ # will create links to:
+ # /etc/rc.d/rc${runlevel}.d/S${sequence}${title}
+ # /etc/rc.d/rc${runlevel}.d/S$((100 - ${sequence}))${title}
+
+# check whether daemon is running
+# returns 0 if running, >0 if not
+check() {
+ [ -f /var/run/NetworkManager.pid ]
+}
+
+# start procedure
+start() {
+ if check ; then
+ warning "${title} is already running. Type 'service restart ${title}'" # Issue a warning
+ else
+ /usr/sbin/NetworkManager &
+ evaluate_retval "Starting ${title}. " # Print [ done ] or [ failed ] depending on outcome
+ fi
+}
+
+# stop procedure
+stop() {
+ if check ; then # daemon is running
+ kill $(cat /var/run/NetworkManager.pid)
+ evaluate_retval "Stopping ${title}." # Print [ done ] or [ failed ] depending on outcome
+ else # daemon not running
+ warning "${title} is not running." # Issue a warning
+ fi
+}
+
+# restart procedure
+restart() {
+ stop
+ sleep 1
+ start
+}
+
+# reload action
+reload() {
+ if check ; then # daemon is running
+ kill -HUP $(cat /var/run/NetworkManager.pid) &>/dev/null
+ evaluate_retval "Reloading ${title}." # Print [ done ] or [ failed ] depending on outcome
+ else # daemon not running
+ warning "${title} is not running." # Issue a warning
+ fi
+}
+
diff --git a/introspection/nm-device-ethernet.xml b/introspection/nm-device-ethernet.xml
index 5b7c88ebfd..000caf752f 100644
--- a/introspection/nm-device-ethernet.xml
+++ b/introspection/nm-device-ethernet.xml
@@ -5,7 +5,13 @@
<property name="HwAddress" type="s" access="read">
<tp:docstring>
- Hardware address of the device.
+ Active hardware address of the device.
+ </tp:docstring>
+ </property>
+
+ <property name="PermHwAddress" type="s" access="read">
+ <tp:docstring>
+ Permanent hardware address of the device.
</tp:docstring>
</property>
diff --git a/introspection/nm-device-wifi.xml b/introspection/nm-device-wifi.xml
index 21ace0a49e..fb50762438 100644
--- a/introspection/nm-device-wifi.xml
+++ b/introspection/nm-device-wifi.xml
@@ -16,9 +16,16 @@
<property name="HwAddress" type="s" access="read">
<tp:docstring>
- The hardware address of the device.
+ The active hardware address of the device.
</tp:docstring>
</property>
+
+ <property name="PermHwAddress" type="s" access="read">
+ <tp:docstring>
+ The permanent hardware address of the device.
+ </tp:docstring>
+ </property>
+
<property name="Mode" type="u" access="read" tp:type="NM_802_11_MODE">
<tp:docstring>
The operating mode of the wireless device.
diff --git a/introspection/nm-device.xml b/introspection/nm-device.xml
index 0d0a9508ae..016c121e72 100644
--- a/introspection/nm-device.xml
+++ b/introspection/nm-device.xml
@@ -9,7 +9,15 @@
</property>
<property name="Interface" type="s" access="read">
<tp:docstring>
- The network interface offered by the device.
+ The name of the device's control (and often data) interface.
+ </tp:docstring>
+ </property>
+ <property name="IpInterface" type="s" access="read">
+ <tp:docstring>
+ The name of the device's data interface when available. This property
+ may not refer to the actual data interface until the device has
+ successfully established a data connection, indicated by the device's
+ State becoming ACTIVATED.
</tp:docstring>
</property>
<property name="Driver" type="s" access="read">
@@ -52,6 +60,12 @@
Whether or not this device is managed by NetworkManager.
</tp:docstring>
</property>
+ <property name="FirmwareMissing" type="b" access="read">
+ <tp:docstring>
+ If TRUE, indicates the device is likely missing firmware necessary for
+ its operation.
+ </tp:docstring>
+ </property>
<property name="DeviceType" type="u" access="read" tp:type="NM_DEVICE_TYPE">
<tp:docstring>
The general type of the network device; ie Ethernet, WiFi, etc.
@@ -59,10 +73,11 @@
</property>
<method name="Disconnect">
+ <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_device_disconnect"/>
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
<tp:docstring>
Disconnects a device and prevents the device from automatically activating further connections without user intervention.
</tp:docstring>
- <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_device_disconnect"/>
</method>
<signal name="StateChanged">
diff --git a/introspection/nm-manager-client.xml b/introspection/nm-manager-client.xml
index a3e89f34b7..aae7a5f745 100644
--- a/introspection/nm-manager-client.xml
+++ b/introspection/nm-manager-client.xml
@@ -31,14 +31,31 @@ object. dbus-glib generates the same bound function names for D-Bus the methods
<method name="DeactivateConnection">
<annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_manager_deactivate_connection"/>
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
<arg name="active_connection" type="o" direction="in"/>
</method>
<method name="Sleep">
<annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_manager_sleep"/>
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
<arg name="sleep" type="b" direction="in"/>
</method>
+ <method name="Enable">
+ <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_manager_enable"/>
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <arg name="enable" type="b" direction="in"/>
+ </method>
+
+ <method name="GetPermissions">
+ <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_manager_get_permissions"/>
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <arg name="permissions" type="a{ss}" direction="out"/>
+ </method>
+
+ <signal name="CheckPermissions"/>
+
+ <property name="NetworkingEnabled" type="b" access="read"/>
<property name="WirelessEnabled" type="b" access="readwrite"/>
<property name="WirelessHardwareEnabled" type="b" access="read"/>
<property name="WwanEnabled" type="b" access="readwrite"/>
@@ -46,6 +63,7 @@ object. dbus-glib generates the same bound function names for D-Bus the methods
<property name="WimaxEnabled" type="b" access="readwrite"/>
<property name="WimaxHardwareEnabled" type="b" access="read"/>
<property name="ActiveConnections" type="ao" access="read"/>
+ <property name="Version" type="s" access="read"/>
<property name="State" type="u" access="read"/>
<signal name="StateChanged">
diff --git a/introspection/nm-manager.xml b/introspection/nm-manager.xml
index 9da51a24d9..9e8f0dff40 100644
--- a/introspection/nm-manager.xml
+++ b/introspection/nm-manager.xml
@@ -77,6 +77,7 @@
Deactivate an active connection.
</tp:docstring>
<annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_manager_deactivate_connection"/>
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
<arg name="active_connection" type="o" direction="in">
<tp:docstring>
The currently active connection to deactivate.
@@ -86,8 +87,12 @@
<method name="Sleep">
<annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_manager_sleep"/>
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
<tp:docstring>
- Control the NetworkManager daemon's sleep state. When asleep, all interfaces that it manages are deactivated. When awake, devices are available to be activated.
+ Control the NetworkManager daemon's sleep state. When asleep, all
+ interfaces that it manages are deactivated. When awake, devices are
+ available to be activated. This command should not be called directly
+ by users or clients; it is intended for system suspend/resume tracking.
</tp:docstring>
<arg name="sleep" type="b" direction="in">
<tp:docstring>
@@ -96,6 +101,52 @@
</arg>
</method>
+ <method name="Enable">
+ <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_manager_enable"/>
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <tp:docstring>
+ Control whether overall networking is enabled or disabled. When
+ disabled, all interfaces that NM manages are deactivated. When enabled,
+ all managed interfaces are re-enabled and available to be activated.
+ This command should be used by clients that provide to users the ability
+ to enable/disable all networking.
+ </tp:docstring>
+ <arg name="enable" type="b" direction="in">
+ <tp:docstring>
+ If FALSE, indicates that all networking should be disabled. If TRUE,
+ indicates that NetworkManager should begin managing network devices.
+ </tp:docstring>
+ </arg>
+ </method>
+
+ <method name="GetPermissions">
+ <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_manager_get_permissions"/>
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <tp:docstring>
+ Returns the permissions a caller has for various authenticated operations
+ that NetworkManager provides, like Enable/Disable networking, changing
+ WiFi, WWAN, and WiMAX state, etc.
+ </tp:docstring>
+ <arg name="permissions" type="a{ss}" direction="out">
+ <tp:docstring>
+ Dictionary of available permissions and results. Each permission
+ is represented by a name (ie "org.freedesktop.NetworkManager.Foobar")
+ and each result is one of the following values: "yes" (the permission
+ is available), "auth" (the permission is available after a successful
+ authentication), or "no" (the permission is denied). Clients may use
+ these values in the UI to indicate the ability to perform certain
+ operations.
+ </tp:docstring>
+ </arg>
+ </method>
+
+ <signal name="CheckPermissions">
+ <tp:docstring>
+ Emitted when system authorization details change, indicating that
+ clients may wish to recheck permissions with GetPermissions.
+ </tp:docstring>
+ </signal>
+
<method name="SetLogging">
<annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_manager_set_logging"/>
<tp:docstring>
@@ -118,6 +169,13 @@
</arg>
</method>
+ <property name="NetworkingEnabled" type="b" access="read">
+ <tp:docstring>
+ Indicates if overall networking is currently enabled or not. See the
+ Enable() method.
+ </tp:docstring>
+ </property>
+
<property name="WirelessEnabled" type="b" access="readwrite">
<tp:docstring>
Indicates if wireless is currently enabled or not.
@@ -160,6 +218,12 @@
</tp:docstring>
</property>
+ <property name="Version" type="s" access="read">
+ <tp:docstring>
+ NetworkManager version.
+ </tp:docstring>
+ </property>
+
<property name="State" type="u" access="read" tp:type="NM_STATE">
<tp:docstring>
The overall state of the NetworkManager daemon.
@@ -259,6 +323,7 @@
DEPRECATED. Control the NetworkManager daemon's sleep state. When asleep, all interfaces that it manages are deactivated.
</tp:docstring>
<annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_manager_legacy_sleep"/>
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
</method>
<method name="wake">
@@ -266,6 +331,7 @@
DEPRECATED. Control the NetworkManager daemon's sleep state. When awake, all known interfaces are available to be activated.
</tp:docstring>
<annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_manager_legacy_wake"/>
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
</method>
<method name="state">
diff --git a/libnm-glib/Makefile.am b/libnm-glib/Makefile.am
index 2506c8db7e..02ba666717 100644
--- a/libnm-glib/Makefile.am
+++ b/libnm-glib/Makefile.am
@@ -53,7 +53,6 @@ lib_LTLIBRARIES = libnm-glib.la libnm-glib-vpn.la
libnm_glib_la_CFLAGS = \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS) \
- $(GCONF_CFLAGS) \
$(GUDEV_CFLAGS)
libnmincludedir = $(includedir)/libnm-glib
@@ -133,11 +132,10 @@ libnm_glib_la_LIBADD = \
$(builddir)/libdeprecated-nm-glib.la \
$(GLIB_LIBS) \
$(DBUS_LIBS) \
- $(GCONF_LIBS) \
$(GUDEV_LIBS)
libnm_glib_la_LDFLAGS = -Wl,--version-script=$(srcdir)/libnm-glib.ver \
- -version-info "4:2:2"
+ -version-info "6:2:4"
noinst_PROGRAMS = libnm-glib-test
@@ -154,58 +152,58 @@ libnm_glib_vpn_la_LDFLAGS = -Wl,--version-script=$(srcdir)/libnm-glib-vpn.ver \
nm-client-bindings.h: $(top_srcdir)/introspection/nm-manager-client.xml
- dbus-binding-tool --prefix=nm_client --mode=glib-client --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_client --mode=glib-client --output=$@ $<
nm-device-bindings.h: $(top_srcdir)/introspection/nm-device.xml
- dbus-binding-tool --prefix=nm_device --mode=glib-client --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_device --mode=glib-client --output=$@ $<
nm-device-ethernet-bindings.h: $(top_srcdir)/introspection/nm-device-ethernet.xml
- dbus-binding-tool --prefix=nm_device_ethernet --mode=glib-client --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_ethernet --mode=glib-client --output=$@ $<
nm-device-wifi-bindings.h: $(top_srcdir)/introspection/nm-device-wifi.xml
- dbus-binding-tool --prefix=nm_device_wifi --mode=glib-client --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_wifi --mode=glib-client --output=$@ $<
nm-device-bt-bindings.h: $(top_srcdir)/introspection/nm-device-bt.xml
- dbus-binding-tool --prefix=nm_device_bt --mode=glib-client --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_bt --mode=glib-client --output=$@ $<
nm-access-point-bindings.h: $(top_srcdir)/introspection/nm-access-point.xml
- dbus-binding-tool --prefix=nm_access_point --mode=glib-client --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_access_point --mode=glib-client --output=$@ $<
nm-settings-glue.h: $(top_srcdir)/introspection/nm-settings.xml
- dbus-binding-tool --prefix=nm_settings --mode=glib-server --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_settings --mode=glib-server --output=$@ $<
nm-settings-bindings.h: $(top_srcdir)/introspection/nm-settings.xml
- dbus-binding-tool --prefix=nm_settings --mode=glib-client --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_settings --mode=glib-client --output=$@ $<
nm-settings-system-bindings.h: $(top_srcdir)/introspection/nm-settings-system.xml
- dbus-binding-tool --prefix=nm_settings_system --mode=glib-client --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_settings_system --mode=glib-client --output=$@ $<
nm-exported-connection-glue.h: $(top_srcdir)/introspection/nm-exported-connection.xml
- dbus-binding-tool --prefix=nm_exported_connection --mode=glib-server --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_exported_connection --mode=glib-server --output=$@ $<
nm-exported-connection-bindings.h: $(top_srcdir)/introspection/nm-exported-connection.xml
- dbus-binding-tool --prefix=nm_exported_connection --mode=glib-client --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_exported_connection --mode=glib-client --output=$@ $<
nm-vpn-connection-bindings.h: $(top_srcdir)/introspection/nm-vpn-connection.xml
- dbus-binding-tool --prefix=nm_vpn_connection --mode=glib-client --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_vpn_connection --mode=glib-client --output=$@ $<
nm-vpn-plugin-glue.h: $(top_srcdir)/introspection/nm-vpn-plugin.xml
- dbus-binding-tool --prefix=nm_vpn_plugin --mode=glib-server --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_vpn_plugin --mode=glib-server --output=$@ $<
nm-active-connection-bindings.h: $(top_srcdir)/introspection/nm-active-connection.xml
- dbus-binding-tool --prefix=nm_active_connection --mode=glib-client --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_active_connection --mode=glib-client --output=$@ $<
nm-ip4-config-bindings.h: $(top_srcdir)/introspection/nm-ip4-config.xml
- dbus-binding-tool --prefix=nm_ip4_config --mode=glib-client --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_ip4_config --mode=glib-client --output=$@ $<
nm-dhcp4-config-bindings.h: $(top_srcdir)/introspection/nm-dhcp4-config.xml
- dbus-binding-tool --prefix=nm_dhcp4_config --mode=glib-client --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_dhcp4_config --mode=glib-client --output=$@ $<
nm-ip6-config-bindings.h: $(top_srcdir)/introspection/nm-ip6-config.xml
- dbus-binding-tool --prefix=nm_ip6_config --mode=glib-client --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_ip6_config --mode=glib-client --output=$@ $<
nm-dhcp6-config-bindings.h: $(top_srcdir)/introspection/nm-dhcp6-config.xml
- dbus-binding-tool --prefix=nm_dhcp6_config --mode=glib-client --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_dhcp6_config --mode=glib-client --output=$@ $<
nm-wimax-device-bindings.h: $(top_srcdir)/introspection/nm-wimax-device.xml
dbus-binding-tool --prefix=nm_wimax_device --mode=glib-client --output=$@ $<
diff --git a/libnm-glib/libnm-glib.ver b/libnm-glib/libnm-glib.ver
index 3dbdde179d..9ec54de9dd 100644
--- a/libnm-glib/libnm-glib.ver
+++ b/libnm-glib/libnm-glib.ver
@@ -34,8 +34,11 @@ global:
nm_client_get_device_by_path;
nm_client_get_devices;
nm_client_get_manager_running;
+ nm_client_get_permission_result;
nm_client_get_state;
nm_client_get_type;
+ nm_client_networking_get_enabled;
+ nm_client_networking_set_enabled;
nm_client_new;
nm_client_sleep;
nm_client_wireless_get_enabled;
@@ -63,12 +66,14 @@ global:
nm_device_bt_get_type;
nm_device_ethernet_get_carrier;
nm_device_ethernet_get_hw_address;
+ nm_device_ethernet_get_permanent_hw_address;
nm_device_ethernet_get_speed;
nm_device_ethernet_get_type;
nm_device_ethernet_new;
nm_device_get_capabilities;
nm_device_get_dhcp4_config;
nm_device_get_driver;
+ nm_device_get_firmware_missing;
nm_device_get_iface;
nm_device_get_ip4_config;
nm_device_get_ip6_config;
@@ -85,6 +90,7 @@ global:
nm_device_wifi_get_bitrate;
nm_device_wifi_get_capabilities;
nm_device_wifi_get_hw_address;
+ nm_device_wifi_get_permanent_hw_address;
nm_device_wifi_get_mode;
nm_device_wifi_get_type;
nm_device_wifi_new;
@@ -92,6 +98,10 @@ global:
nm_dhcp4_config_get_options;
nm_dhcp4_config_get_type;
nm_dhcp4_config_new;
+ nm_dhcp6_config_get_one_option;
+ nm_dhcp6_config_get_options;
+ nm_dhcp6_config_get_type;
+ nm_dhcp6_config_new;
nm_exported_connection_export;
nm_exported_connection_get_type;
nm_exported_connection_new;
diff --git a/libnm-glib/nm-client.c b/libnm-glib/nm-client.c
index 8365d0907c..dcfdf074b6 100644
--- a/libnm-glib/nm-client.c
+++ b/libnm-glib/nm-client.c
@@ -18,7 +18,7 @@
* Boston, MA 02110-1301 USA.
*
* Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2008 Red Hat, Inc.
+ * Copyright (C) 2007 - 2010 Red Hat, Inc.
*/
#include <dbus/dbus-glib.h>
@@ -58,6 +58,11 @@ typedef struct {
GPtrArray *devices;
GPtrArray *active_connections;
+ DBusGProxyCall *perm_call;
+ GHashTable *permissions;
+
+ gboolean have_networking_enabled;
+ gboolean networking_enabled;
gboolean wireless_enabled;
gboolean wireless_hw_enabled;
@@ -72,6 +77,7 @@ enum {
PROP_0,
PROP_STATE,
PROP_MANAGER_RUNNING,
+ PROP_NETWORKING_ENABLED,
PROP_WIRELESS_ENABLED,
PROP_WIRELESS_HARDWARE_ENABLED,
PROP_WWAN_ENABLED,
@@ -86,6 +92,7 @@ enum {
enum {
DEVICE_ADDED,
DEVICE_REMOVED,
+ PERMISSION_CHANGED,
LAST_SIGNAL
};
@@ -102,11 +109,30 @@ static void client_device_added_proxy (DBusGProxy *proxy, char *path, gpointer u
static void client_device_removed_proxy (DBusGProxy *proxy, char *path, gpointer user_data);
static void
+handle_net_enabled_changed (GObject *object,
+ GParamSpec *pspec,
+ GValue *value,
+ gpointer user_data)
+{
+ NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (object);
+
+ /* Update the cache flag when it changes */
+ priv->have_networking_enabled = TRUE;
+}
+
+static void
nm_client_init (NMClient *client)
{
NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (client);
priv->state = NM_STATE_UNKNOWN;
+
+ priv->permissions = g_hash_table_new (g_direct_hash, g_direct_equal);
+
+ g_signal_connect (client,
+ "notify::" NM_CLIENT_NETWORKING_ENABLED,
+ G_CALLBACK (handle_net_enabled_changed),
+ client);
}
static void
@@ -285,6 +311,7 @@ register_for_property_changed (NMClient *client)
NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (client);
const NMPropertiesChangedInfo property_changed_info[] = {
{ NM_CLIENT_STATE, _nm_object_demarshal_generic, &priv->state },
+ { NM_CLIENT_NETWORKING_ENABLED, _nm_object_demarshal_generic, &priv->networking_enabled },
{ NM_CLIENT_WIRELESS_ENABLED, _nm_object_demarshal_generic, &priv->wireless_enabled },
{ NM_CLIENT_WIRELESS_HARDWARE_ENABLED, _nm_object_demarshal_generic, &priv->wireless_hw_enabled },
{ NM_CLIENT_WWAN_ENABLED, _nm_object_demarshal_generic, &priv->wwan_enabled },
@@ -300,6 +327,130 @@ register_for_property_changed (NMClient *client)
property_changed_info);
}
+#define NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK "org.freedesktop.NetworkManager.enable-disable-network"
+#define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI "org.freedesktop.NetworkManager.enable-disable-wifi"
+#define NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN "org.freedesktop.NetworkManager.enable-disable-wwan"
+#define NM_AUTH_PERMISSION_USE_USER_CONNECTIONS "org.freedesktop.NetworkManager.use-user-connections"
+
+static NMClientPermission
+nm_permission_to_client (const char *nm)
+{
+ if (!strcmp (nm, NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK))
+ return NM_CLIENT_PERMISSION_ENABLE_DISABLE_NETWORK;
+ else if (!strcmp (nm, NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI))
+ return NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIFI;
+ else if (!strcmp (nm, NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN))
+ return NM_CLIENT_PERMISSION_ENABLE_DISABLE_WWAN;
+ else if (!strcmp (nm, NM_AUTH_PERMISSION_USE_USER_CONNECTIONS))
+ return NM_CLIENT_PERMISSION_USE_USER_CONNECTIONS;
+ return NM_CLIENT_PERMISSION_NONE;
+}
+
+static NMClientPermissionResult
+nm_permission_result_to_client (const char *nm)
+{
+ if (!strcmp (nm, "yes"))
+ return NM_CLIENT_PERMISSION_RESULT_YES;
+ else if (!strcmp (nm, "no"))
+ return NM_CLIENT_PERMISSION_RESULT_NO;
+ else if (!strcmp (nm, "auth"))
+ return NM_CLIENT_PERMISSION_RESULT_AUTH;
+ return NM_CLIENT_PERMISSION_RESULT_UNKNOWN;
+}
+
+static void
+update_permissions (NMClient *self, GHashTable *permissions)
+{
+ NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (self);
+ GHashTableIter iter;
+ gpointer key, value;
+ NMClientPermission perm;
+ NMClientPermissionResult perm_result;
+ GList *keys, *keys_iter;
+
+ /* get list of old permissions for change notification */
+ keys = g_hash_table_get_keys (priv->permissions);
+ g_hash_table_remove_all (priv->permissions);
+
+ if (permissions) {
+ /* Process new permissions */
+ g_hash_table_iter_init (&iter, permissions);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ perm = nm_permission_to_client ((const char *) key);
+ perm_result = nm_permission_result_to_client ((const char *) value);
+ if (perm) {
+ g_hash_table_insert (priv->permissions,
+ GUINT_TO_POINTER (perm),
+ GUINT_TO_POINTER (perm_result));
+
+ /* Remove this permission from the list of previous permissions
+ * we'll be sending NM_CLIENT_PERMISSION_RESULT_UNKNOWN for
+ * in the change signal since it is still a known permission.
+ */
+ keys = g_list_remove (keys, GUINT_TO_POINTER (perm));
+ }
+ }
+ }
+
+ /* Signal changes in all updated permissions */
+ g_hash_table_iter_init (&iter, priv->permissions);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ g_signal_emit (self, signals[PERMISSION_CHANGED], 0,
+ GPOINTER_TO_UINT (key),
+ GPOINTER_TO_UINT (value));
+ }
+
+ /* And signal changes in all permissions that used to be valid but for
+ * some reason weren't received in the last request (if any).
+ */
+ for (keys_iter = keys; keys_iter; keys_iter = g_list_next (keys_iter)) {
+ g_signal_emit (self, signals[PERMISSION_CHANGED], 0,
+ GPOINTER_TO_UINT (keys_iter->data),
+ NM_CLIENT_PERMISSION_RESULT_UNKNOWN);
+ }
+ g_list_free (keys);
+}
+
+static void
+get_permissions_sync (NMClient *self)
+{
+ gboolean success;
+ GHashTable *permissions = NULL;
+
+ success = dbus_g_proxy_call_with_timeout (NM_CLIENT_GET_PRIVATE (self)->client_proxy,
+ "GetPermissions", 3000, NULL,
+ G_TYPE_INVALID,
+ DBUS_TYPE_G_MAP_OF_STRING, &permissions, G_TYPE_INVALID);
+ update_permissions (self, success ? permissions : NULL);
+ if (permissions)
+ g_hash_table_destroy (permissions);
+}
+
+static void
+get_permissions_reply (DBusGProxy *proxy,
+ GHashTable *permissions,
+ GError *error,
+ gpointer user_data)
+{
+ NMClient *self = NM_CLIENT (user_data);
+
+ NM_CLIENT_GET_PRIVATE (self)->perm_call = NULL;
+ update_permissions (NM_CLIENT (user_data), error ? NULL : permissions);
+}
+
+static void
+client_recheck_permissions (DBusGProxy *proxy, gpointer user_data)
+{
+ NMClient *self = NM_CLIENT (user_data);
+ NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (self);
+
+ if (!priv->perm_call) {
+ priv->perm_call = org_freedesktop_NetworkManager_get_permissions_async (NM_CLIENT_GET_PRIVATE (self)->client_proxy,
+ get_permissions_reply,
+ self);
+ }
+}
+
static GObject*
constructor (GType type,
guint n_construct_params,
@@ -340,6 +491,15 @@ constructor (GType type,
object,
NULL);
+ /* Permissions */
+ dbus_g_proxy_add_signal (priv->client_proxy, "CheckPermissions", G_TYPE_INVALID);
+ dbus_g_proxy_connect_signal (priv->client_proxy,
+ "CheckPermissions",
+ G_CALLBACK (client_recheck_permissions),
+ object,
+ NULL);
+ get_permissions_sync (NM_CLIENT (object));
+
priv->bus_proxy = dbus_g_proxy_new_for_name (connection,
"org.freedesktop.DBus",
"/org/freedesktop/DBus",
@@ -398,12 +558,17 @@ dispose (GObject *object)
return;
}
+ if (priv->perm_call)
+ dbus_g_proxy_cancel_call (priv->client_proxy, priv->perm_call);
+
g_object_unref (priv->client_proxy);
g_object_unref (priv->bus_proxy);
free_object_array (&priv->devices);
free_object_array (&priv->active_connections);
+ g_hash_table_destroy (priv->permissions);
+
G_OBJECT_CLASS (nm_client_parent_class)->dispose (object);
}
@@ -479,6 +644,9 @@ get_property (GObject *object,
case PROP_MANAGER_RUNNING:
g_value_set_boolean (value, priv->manager_running);
break;
+ case PROP_NETWORKING_ENABLED:
+ g_value_set_boolean (value, priv->networking_enabled);
+ break;
case PROP_WIRELESS_ENABLED:
g_value_set_boolean (value, priv->wireless_enabled);
break;
@@ -548,6 +716,19 @@ nm_client_class_init (NMClientClass *client_class)
G_PARAM_READABLE));
/**
+ * NMClient::networking-enabled:
+ *
+ * Whether networking is enabled.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_NETWORKING_ENABLED,
+ g_param_spec_boolean (NM_CLIENT_NETWORKING_ENABLED,
+ "NetworkingEnabled",
+ "Is networking enabled",
+ TRUE,
+ G_PARAM_READABLE));
+
+ /**
* NMClient::wireless-enabled:
*
* Whether wireless is enabled.
@@ -673,6 +854,22 @@ nm_client_class_init (NMClientClass *client_class)
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 1,
G_TYPE_OBJECT);
+
+ /**
+ * NMClient::permission-changed:
+ * @widget: the client that received the signal
+ * @permission: a permission from #NMClientPermission
+ * @result: the permission's result, one of #NMClientPermissionResult
+ *
+ * Notifies that a permission has changed
+ **/
+ signals[PERMISSION_CHANGED] =
+ g_signal_new ("permission-changed",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ 0, NULL, NULL,
+ _nm_marshal_VOID__UINT_UINT,
+ G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT);
}
/**
@@ -1184,27 +1381,70 @@ nm_client_get_state (NMClient *client)
}
/**
- * nm_client_sleep:
+ * nm_client_networking_get_enabled:
* @client: a #NMClient
- * @sleep: %TRUE to put the daemon to sleep
*
- * Enables or disables networking. When the daemon is put to sleep, it'll deactivate and disable
- * all the active devices.
+ * Whether networking is enabled or disabled.
+ *
+ * Returns: %TRUE if networking is disabled, %FALSE if networking is enabled
+ **/
+gboolean
+nm_client_networking_get_enabled (NMClient *client)
+{
+ NMClientPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_CLIENT (client), FALSE);
+
+ priv = NM_CLIENT_GET_PRIVATE (client);
+ if (!priv->have_networking_enabled) {
+ priv = NM_CLIENT_GET_PRIVATE (client);
+ if (!priv->networking_enabled) {
+ priv->networking_enabled = _nm_object_get_boolean_property (NM_OBJECT (client),
+ NM_DBUS_INTERFACE,
+ "NetworkingEnabled");
+ priv->have_networking_enabled = TRUE;
+ }
+ }
+
+ return priv->networking_enabled;
+}
+
+/**
+ * nm_client_networking_set_enabled:
+ * @client: a #NMClient
+ * @enabled: %TRUE to set networking enabled, %FALSE to set networking disabled
+ *
+ * Enables or disables networking. When networking is disabled, all controlled
+ * interfaces are disconnected and deactivated. When networking is enabled,
+ * all controlled interfaces are available for activation.
**/
void
-nm_client_sleep (NMClient *client, gboolean sleep)
+nm_client_networking_set_enabled (NMClient *client, gboolean enable)
{
GError *err = NULL;
g_return_if_fail (NM_IS_CLIENT (client));
- if (!org_freedesktop_NetworkManager_sleep (NM_CLIENT_GET_PRIVATE (client)->client_proxy, sleep, &err)) {
- g_warning ("Error in sleep: %s", err->message);
+ if (!org_freedesktop_NetworkManager_enable (NM_CLIENT_GET_PRIVATE (client)->client_proxy, enable, &err)) {
+ g_warning ("Error enabling/disabling networking: %s", err->message);
g_error_free (err);
}
}
/**
+ * nm_client_sleep:
+ * @client: a #NMClient
+ * @sleep: %TRUE to put the daemon to sleep
+ *
+ * Deprecated; use nm_client_networking_set_enabled() instead.
+ **/
+void
+nm_client_sleep (NMClient *client, gboolean sleep)
+{
+ nm_client_networking_set_enabled (client, !sleep);
+}
+
+/**
* nm_client_get_manager_running:
* @client: a #NMClient
*
@@ -1220,3 +1460,25 @@ nm_client_get_manager_running (NMClient *client)
return NM_CLIENT_GET_PRIVATE (client)->manager_running;
}
+/**
+ * nm_client_get_permission_result:
+ * @client: a #NMClient
+ * @permission: the permission for which to return the result, one of #NMClientPermission
+ *
+ * Requests the result of a specific permission, which indicates whether the
+ * client can or cannot perform the action the permission represents
+ *
+ * Returns: the permission's result, one of #NMClientPermissionResult
+ **/
+NMClientPermissionResult
+nm_client_get_permission_result (NMClient *client, NMClientPermission permission)
+{
+ gpointer result;
+
+ g_return_val_if_fail (NM_IS_CLIENT (client), NM_CLIENT_PERMISSION_RESULT_UNKNOWN);
+
+ result = g_hash_table_lookup (NM_CLIENT_GET_PRIVATE (client)->permissions,
+ GUINT_TO_POINTER (permission));
+ return GPOINTER_TO_UINT (result);
+}
+
diff --git a/libnm-glib/nm-client.h b/libnm-glib/nm-client.h
index b75bf2231a..3c6f737488 100644
--- a/libnm-glib/nm-client.h
+++ b/libnm-glib/nm-client.h
@@ -18,7 +18,7 @@
* Boston, MA 02110-1301 USA.
*
* Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2008 Red Hat, Inc.
+ * Copyright (C) 2007 - 2010 Red Hat, Inc.
*/
#ifndef NM_CLIENT_H
@@ -43,6 +43,7 @@ G_BEGIN_DECLS
#define NM_CLIENT_STATE "state"
#define NM_CLIENT_MANAGER_RUNNING "manager-running"
+#define NM_CLIENT_NETWORKING_ENABLED "networking-enabled"
#define NM_CLIENT_WIRELESS_ENABLED "wireless-enabled"
#define NM_CLIENT_WIRELESS_HARDWARE_ENABLED "wireless-hardware-enabled"
#define NM_CLIENT_WWAN_ENABLED "wwan-enabled"
@@ -51,6 +52,25 @@ G_BEGIN_DECLS
#define NM_CLIENT_WIMAX_HARDWARE_ENABLED "wimax-hardware-enabled"
#define NM_CLIENT_ACTIVE_CONNECTIONS "active-connections"
+/* Permissions */
+typedef enum {
+ NM_CLIENT_PERMISSION_NONE = 0,
+ NM_CLIENT_PERMISSION_ENABLE_DISABLE_NETWORK = 1,
+ NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIFI = 2,
+ NM_CLIENT_PERMISSION_ENABLE_DISABLE_WWAN = 3,
+ NM_CLIENT_PERMISSION_USE_USER_CONNECTIONS = 4,
+
+ NM_CLIENT_PERMISSION_LAST = NM_CLIENT_PERMISSION_USE_USER_CONNECTIONS
+} NMClientPermission;
+
+typedef enum {
+ NM_CLIENT_PERMISSION_RESULT_UNKNOWN = 0,
+ NM_CLIENT_PERMISSION_RESULT_YES,
+ NM_CLIENT_PERMISSION_RESULT_AUTH,
+ NM_CLIENT_PERMISSION_RESULT_NO
+} NMClientPermissionResult;
+
+
typedef struct {
NMObject parent;
} NMClient;
@@ -90,6 +110,9 @@ void nm_client_activate_connection (NMClient *client,
void nm_client_deactivate_connection (NMClient *client, NMActiveConnection *active);
+gboolean nm_client_networking_get_enabled (NMClient *client);
+void nm_client_networking_set_enabled (NMClient *client, gboolean enabled);
+
gboolean nm_client_wireless_get_enabled (NMClient *client);
void nm_client_wireless_set_enabled (NMClient *client, gboolean enabled);
gboolean nm_client_wireless_hardware_get_enabled (NMClient *client);
@@ -107,6 +130,9 @@ gboolean nm_client_get_manager_running (NMClient *client);
const GPtrArray *nm_client_get_active_connections (NMClient *client);
void nm_client_sleep (NMClient *client, gboolean sleep);
+NMClientPermissionResult nm_client_get_permission_result (NMClient *client,
+ NMClientPermission permission);
+
G_END_DECLS
#endif /* NM_CLIENT_H */
diff --git a/libnm-glib/nm-device-ethernet.c b/libnm-glib/nm-device-ethernet.c
index 7a0cd925d0..44b2742765 100644
--- a/libnm-glib/nm-device-ethernet.c
+++ b/libnm-glib/nm-device-ethernet.c
@@ -18,7 +18,7 @@
* Boston, MA 02110-1301 USA.
*
* Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2008 Red Hat, Inc.
+ * Copyright (C) 2007 - 2010 Red Hat, Inc.
*/
#include "nm-device-ethernet.h"
@@ -34,7 +34,8 @@ G_DEFINE_TYPE (NMDeviceEthernet, nm_device_ethernet, NM_TYPE_DEVICE)
typedef struct {
DBusGProxy *proxy;
- char * hw_address;
+ char *hw_address;
+ char *perm_hw_address;
guint32 speed;
gboolean carrier;
gboolean carrier_valid;
@@ -45,6 +46,7 @@ typedef struct {
enum {
PROP_0,
PROP_HW_ADDRESS,
+ PROP_PERM_HW_ADDRESS,
PROP_SPEED,
PROP_CARRIER,
@@ -52,6 +54,7 @@ enum {
};
#define DBUS_PROP_HW_ADDRESS "HwAddress"
+#define DBUS_PROP_PERM_HW_ADDRESS "PermHwAddress"
#define DBUS_PROP_SPEED "Speed"
#define DBUS_PROP_CARRIER "Carrier"
@@ -80,9 +83,9 @@ nm_device_ethernet_new (DBusGConnection *connection, const char *path)
* nm_device_ethernet_get_hw_address:
* @device: a #NMDeviceEthernet
*
- * Gets the hardware (MAC) address of the #NMDeviceEthernet
+ * Gets the active hardware (MAC) address of the #NMDeviceEthernet
*
- * Returns: the hardware address. This is the internal string used by the
+ * Returns: the active hardware address. This is the internal string used by the
* device, and must not be modified.
**/
const char *
@@ -103,6 +106,32 @@ nm_device_ethernet_get_hw_address (NMDeviceEthernet *device)
}
/**
+ * nm_device_ethernet_get_permanent_hw_address:
+ * @device: a #NMDeviceEthernet
+ *
+ * Gets the permanent hardware (MAC) address of the #NMDeviceEthernet
+ *
+ * Returns: the permanent hardware address. This is the internal string used by the
+ * device, and must not be modified.
+ **/
+const char *
+nm_device_ethernet_get_permanent_hw_address (NMDeviceEthernet *device)
+{
+ NMDeviceEthernetPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_DEVICE_ETHERNET (device), NULL);
+
+ priv = NM_DEVICE_ETHERNET_GET_PRIVATE (device);
+ if (!priv->perm_hw_address) {
+ priv->perm_hw_address = _nm_object_get_string_property (NM_OBJECT (device),
+ NM_DBUS_INTERFACE_DEVICE_WIRED,
+ DBUS_PROP_PERM_HW_ADDRESS);
+ }
+
+ return priv->perm_hw_address;
+}
+
+/**
* nm_device_ethernet_get_speed:
* @device: a #NMDeviceEthernet
*
@@ -168,9 +197,10 @@ register_for_property_changed (NMDeviceEthernet *device)
{
NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (device);
const NMPropertiesChangedInfo property_changed_info[] = {
- { NM_DEVICE_ETHERNET_HW_ADDRESS, _nm_object_demarshal_generic, &priv->hw_address },
- { NM_DEVICE_ETHERNET_SPEED, _nm_object_demarshal_generic, &priv->speed },
- { NM_DEVICE_ETHERNET_CARRIER, _nm_object_demarshal_generic, &priv->carrier },
+ { NM_DEVICE_ETHERNET_HW_ADDRESS, _nm_object_demarshal_generic, &priv->hw_address },
+ { NM_DEVICE_ETHERNET_PERMANENT_HW_ADDRESS, _nm_object_demarshal_generic, &priv->perm_hw_address },
+ { NM_DEVICE_ETHERNET_SPEED, _nm_object_demarshal_generic, &priv->speed },
+ { NM_DEVICE_ETHERNET_CARRIER, _nm_object_demarshal_generic, &priv->carrier },
{ NULL },
};
@@ -230,6 +260,9 @@ finalize (GObject *object)
if (priv->hw_address)
g_free (priv->hw_address);
+ if (priv->perm_hw_address)
+ g_free (priv->perm_hw_address);
+
G_OBJECT_CLASS (nm_device_ethernet_parent_class)->finalize (object);
}
@@ -245,6 +278,9 @@ get_property (GObject *object,
case PROP_HW_ADDRESS:
g_value_set_string (value, nm_device_ethernet_get_hw_address (device));
break;
+ case PROP_PERM_HW_ADDRESS:
+ g_value_set_string (value, nm_device_ethernet_get_permanent_hw_address (device));
+ break;
case PROP_SPEED:
g_value_set_uint (value, nm_device_ethernet_get_speed (device));
break;
@@ -275,13 +311,26 @@ nm_device_ethernet_class_init (NMDeviceEthernetClass *device_class)
/**
* NMDeviceEthernet:hw-address:
*
- * The hardware (MAC) address of the device.
+ * The active hardware (MAC) address of the device.
**/
g_object_class_install_property
(object_class, PROP_HW_ADDRESS,
g_param_spec_string (NM_DEVICE_ETHERNET_HW_ADDRESS,
- "MAC Address",
- "Hardware MAC address",
+ "Active MAC Address",
+ "Currently set hardware MAC address",
+ NULL,
+ G_PARAM_READABLE));
+
+ /**
+ * NMDeviceEthernet:perm-hw-address:
+ *
+ * The permanent hardware (MAC) address of the device.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PERM_HW_ADDRESS,
+ g_param_spec_string (NM_DEVICE_ETHERNET_PERMANENT_HW_ADDRESS,
+ "Permanent MAC Address",
+ "Permanent hardware MAC address",
NULL,
G_PARAM_READABLE));
diff --git a/libnm-glib/nm-device-ethernet.h b/libnm-glib/nm-device-ethernet.h
index 565e3e7e05..305ca022e8 100644
--- a/libnm-glib/nm-device-ethernet.h
+++ b/libnm-glib/nm-device-ethernet.h
@@ -18,7 +18,7 @@
* Boston, MA 02110-1301 USA.
*
* Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2008 Red Hat, Inc.
+ * Copyright (C) 2007 - 2010 Red Hat, Inc.
*/
#ifndef NM_DEVICE_ETHERNET_H
@@ -36,6 +36,7 @@ G_BEGIN_DECLS
#define NM_DEVICE_ETHERNET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_ETHERNET, NMDeviceEthernetClass))
#define NM_DEVICE_ETHERNET_HW_ADDRESS "hw-address"
+#define NM_DEVICE_ETHERNET_PERMANENT_HW_ADDRESS "perm-hw-address"
#define NM_DEVICE_ETHERNET_SPEED "speed"
#define NM_DEVICE_ETHERNET_CARRIER "carrier"
@@ -60,6 +61,7 @@ GType nm_device_ethernet_get_type (void);
GObject *nm_device_ethernet_new (DBusGConnection *connection, const char *path);
const char * nm_device_ethernet_get_hw_address (NMDeviceEthernet *device);
+const char * nm_device_ethernet_get_permanent_hw_address (NMDeviceEthernet *device);
guint32 nm_device_ethernet_get_speed (NMDeviceEthernet *device);
gboolean nm_device_ethernet_get_carrier (NMDeviceEthernet *device);
diff --git a/libnm-glib/nm-device-wifi.c b/libnm-glib/nm-device-wifi.c
index 1729c8aae9..3d17023950 100644
--- a/libnm-glib/nm-device-wifi.c
+++ b/libnm-glib/nm-device-wifi.c
@@ -18,7 +18,7 @@
* Boston, MA 02110-1301 USA.
*
* Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2008 Red Hat, Inc.
+ * Copyright (C) 2007 - 2010 Red Hat, Inc.
*/
#include <string.h>
@@ -45,6 +45,7 @@ typedef struct {
DBusGProxy *proxy;
char *hw_address;
+ char *perm_hw_address;
NM80211Mode mode;
guint32 rate;
NMAccessPoint *active_ap;
@@ -58,6 +59,7 @@ typedef struct {
enum {
PROP_0,
PROP_HW_ADDRESS,
+ PROP_PERM_HW_ADDRESS,
PROP_MODE,
PROP_BITRATE,
PROP_ACTIVE_ACCESS_POINT,
@@ -67,6 +69,7 @@ enum {
};
#define DBUS_PROP_HW_ADDRESS "HwAddress"
+#define DBUS_PROP_PERM_HW_ADDRESS "PermHwAddress"
#define DBUS_PROP_MODE "Mode"
#define DBUS_PROP_BITRATE "Bitrate"
#define DBUS_PROP_ACTIVE_ACCESS_POINT "ActiveAccessPoint"
@@ -106,9 +109,9 @@ nm_device_wifi_new (DBusGConnection *connection, const char *path)
* nm_device_wifi_get_hw_address:
* @device: a #NMDeviceWifi
*
- * Gets the hardware (MAC) address of the #NMDeviceWifi
+ * Gets the actual hardware (MAC) address of the #NMDeviceWifi
*
- * Returns: the hardware address. This is the internal string used by the
+ * Returns: the actual hardware address. This is the internal string used by the
* device, and must not be modified.
**/
const char *
@@ -129,6 +132,32 @@ nm_device_wifi_get_hw_address (NMDeviceWifi *device)
}
/**
+ * nm_device_wifi_get_permanent_hw_address:
+ * @device: a #NMDeviceWifi
+ *
+ * Gets the permanent hardware (MAC) address of the #NMDeviceWifi
+ *
+ * Returns: the permanent hardware address. This is the internal string used by the
+ * device, and must not be modified.
+ **/
+const char *
+nm_device_wifi_get_permanent_hw_address (NMDeviceWifi *device)
+{
+ NMDeviceWifiPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_DEVICE_WIFI (device), NULL);
+
+ priv = NM_DEVICE_WIFI_GET_PRIVATE (device);
+ if (!priv->perm_hw_address) {
+ priv->perm_hw_address = _nm_object_get_string_property (NM_OBJECT (device),
+ NM_DBUS_INTERFACE_DEVICE_WIRELESS,
+ DBUS_PROP_PERM_HW_ADDRESS);
+ }
+
+ return priv->perm_hw_address;
+}
+
+/**
* nm_device_wifi_get_mode:
* @device: a #NMDeviceWifi
*
@@ -464,6 +493,9 @@ get_property (GObject *object,
case PROP_HW_ADDRESS:
g_value_set_string (value, nm_device_wifi_get_hw_address (self));
break;
+ case PROP_PERM_HW_ADDRESS:
+ g_value_set_string (value, nm_device_wifi_get_permanent_hw_address (self));
+ break;
case PROP_MODE:
g_value_set_uint (value, nm_device_wifi_get_mode (self));
break;
@@ -554,11 +586,12 @@ register_for_property_changed (NMDeviceWifi *device)
{
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (device);
const NMPropertiesChangedInfo property_changed_info[] = {
- { NM_DEVICE_WIFI_HW_ADDRESS, _nm_object_demarshal_generic, &priv->hw_address },
- { NM_DEVICE_WIFI_MODE, _nm_object_demarshal_generic, &priv->mode },
- { NM_DEVICE_WIFI_BITRATE, _nm_object_demarshal_generic, &priv->rate },
- { NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT, demarshal_active_ap, &priv->active_ap },
- { NM_DEVICE_WIFI_CAPABILITIES, _nm_object_demarshal_generic, &priv->wireless_caps },
+ { NM_DEVICE_WIFI_HW_ADDRESS, _nm_object_demarshal_generic, &priv->hw_address },
+ { NM_DEVICE_WIFI_PERMANENT_HW_ADDRESS, _nm_object_demarshal_generic, &priv->perm_hw_address },
+ { NM_DEVICE_WIFI_MODE, _nm_object_demarshal_generic, &priv->mode },
+ { NM_DEVICE_WIFI_BITRATE, _nm_object_demarshal_generic, &priv->rate },
+ { NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT, demarshal_active_ap, &priv->active_ap },
+ { NM_DEVICE_WIFI_CAPABILITIES, _nm_object_demarshal_generic, &priv->wireless_caps },
{ NULL },
};
@@ -638,6 +671,9 @@ finalize (GObject *object)
if (priv->hw_address)
g_free (priv->hw_address);
+ if (priv->perm_hw_address)
+ g_free (priv->perm_hw_address);
+
G_OBJECT_CLASS (nm_device_wifi_parent_class)->finalize (object);
}
@@ -664,8 +700,21 @@ nm_device_wifi_class_init (NMDeviceWifiClass *device_class)
g_object_class_install_property
(object_class, PROP_HW_ADDRESS,
g_param_spec_string (NM_DEVICE_WIFI_HW_ADDRESS,
- "MAC Address",
- "Hardware MAC address",
+ "Active MAC Address",
+ "Currently set hardware MAC address",
+ NULL,
+ G_PARAM_READABLE));
+
+ /**
+ * NMDeviceWifi:perm-hw-address:
+ *
+ * The hardware (MAC) address of the device.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PERM_HW_ADDRESS,
+ g_param_spec_string (NM_DEVICE_WIFI_PERMANENT_HW_ADDRESS,
+ "Permanent MAC Address",
+ "Permanent hardware MAC address",
NULL,
G_PARAM_READABLE));
diff --git a/libnm-glib/nm-device-wifi.h b/libnm-glib/nm-device-wifi.h
index 9152ab29db..21f3558af3 100644
--- a/libnm-glib/nm-device-wifi.h
+++ b/libnm-glib/nm-device-wifi.h
@@ -18,7 +18,7 @@
* Boston, MA 02110-1301 USA.
*
* Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2008 Red Hat, Inc.
+ * Copyright (C) 2007 - 2010 Red Hat, Inc.
*/
#ifndef NM_DEVICE_WIFI_H
@@ -37,6 +37,7 @@ G_BEGIN_DECLS
#define NM_DEVICE_WIFI_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_WIFI, NMDeviceWifiClass))
#define NM_DEVICE_WIFI_HW_ADDRESS "hw-address"
+#define NM_DEVICE_WIFI_PERMANENT_HW_ADDRESS "perm-hw-address"
#define NM_DEVICE_WIFI_MODE "mode"
#define NM_DEVICE_WIFI_BITRATE "bitrate"
#define NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT "active-access-point"
@@ -67,6 +68,7 @@ GType nm_device_wifi_get_type (void);
GObject *nm_device_wifi_new (DBusGConnection *connection, const char *path);
const char * nm_device_wifi_get_hw_address (NMDeviceWifi *device);
+const char * nm_device_wifi_get_permanent_hw_address (NMDeviceWifi *device);
NM80211Mode nm_device_wifi_get_mode (NMDeviceWifi *device);
guint32 nm_device_wifi_get_bitrate (NMDeviceWifi *device);
guint32 nm_device_wifi_get_capabilities (NMDeviceWifi *device);
diff --git a/libnm-glib/nm-device.c b/libnm-glib/nm-device.c
index f8185fbed2..74f9342ef3 100644
--- a/libnm-glib/nm-device.c
+++ b/libnm-glib/nm-device.c
@@ -18,7 +18,7 @@
* Boston, MA 02110-1301 USA.
*
* Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2008 Red Hat, Inc.
+ * Copyright (C) 2007 - 2010 Red Hat, Inc.
*/
#include <string.h>
@@ -50,10 +50,12 @@ typedef struct {
DBusGProxy *proxy;
char *iface;
+ char *ip_iface;
char *udi;
char *driver;
guint32 capabilities;
gboolean managed;
+ gboolean firmware_missing;
NMIP4Config *ip4_config;
gboolean null_ip4_config;
NMDHCP4Config *dhcp4_config;
@@ -76,6 +78,7 @@ enum {
PROP_DRIVER,
PROP_CAPABILITIES,
PROP_MANAGED,
+ PROP_FIRMWARE_MISSING,
PROP_IP4_CONFIG,
PROP_DHCP4_CONFIG,
PROP_IP6_CONFIG,
@@ -83,6 +86,7 @@ enum {
PROP_PRODUCT,
PROP_VENDOR,
PROP_DHCP6_CONFIG,
+ PROP_IP_INTERFACE,
LAST_PROP
};
@@ -269,15 +273,17 @@ register_for_property_changed (NMDevice *device)
{
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
const NMPropertiesChangedInfo property_changed_info[] = {
- { NM_DEVICE_UDI, _nm_object_demarshal_generic, &priv->udi },
- { NM_DEVICE_INTERFACE, _nm_object_demarshal_generic, &priv->iface },
- { NM_DEVICE_DRIVER, _nm_object_demarshal_generic, &priv->driver },
- { NM_DEVICE_CAPABILITIES, _nm_object_demarshal_generic, &priv->capabilities },
- { NM_DEVICE_MANAGED, _nm_object_demarshal_generic, &priv->managed },
- { NM_DEVICE_IP4_CONFIG, demarshal_ip4_config, &priv->ip4_config },
- { NM_DEVICE_DHCP4_CONFIG, demarshal_dhcp4_config, &priv->dhcp4_config },
- { NM_DEVICE_IP6_CONFIG, demarshal_ip6_config, &priv->ip6_config },
- { NM_DEVICE_DHCP6_CONFIG, demarshal_dhcp6_config, &priv->dhcp6_config },
+ { NM_DEVICE_UDI, _nm_object_demarshal_generic, &priv->udi },
+ { NM_DEVICE_INTERFACE, _nm_object_demarshal_generic, &priv->iface },
+ { NM_DEVICE_IP_INTERFACE, _nm_object_demarshal_generic, &priv->ip_iface },
+ { NM_DEVICE_DRIVER, _nm_object_demarshal_generic, &priv->driver },
+ { NM_DEVICE_CAPABILITIES, _nm_object_demarshal_generic, &priv->capabilities },
+ { NM_DEVICE_MANAGED, _nm_object_demarshal_generic, &priv->managed },
+ { NM_DEVICE_FIRMWARE_MISSING, _nm_object_demarshal_generic, &priv->firmware_missing },
+ { NM_DEVICE_IP4_CONFIG, demarshal_ip4_config, &priv->ip4_config },
+ { NM_DEVICE_DHCP4_CONFIG, demarshal_dhcp4_config, &priv->dhcp4_config },
+ { NM_DEVICE_IP6_CONFIG, demarshal_ip6_config, &priv->ip6_config },
+ { NM_DEVICE_DHCP6_CONFIG, demarshal_dhcp6_config, &priv->dhcp6_config },
{ NULL },
};
@@ -377,6 +383,7 @@ finalize (GObject *object)
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (object);
g_free (priv->iface);
+ g_free (priv->ip_iface);
g_free (priv->udi);
g_free (priv->driver);
g_free (priv->product);
@@ -400,6 +407,9 @@ get_property (GObject *object,
case PROP_INTERFACE:
g_value_set_string (value, nm_device_get_iface (device));
break;
+ case PROP_IP_INTERFACE:
+ g_value_set_string (value, nm_device_get_ip_iface (device));
+ break;
case PROP_DRIVER:
g_value_set_string (value, nm_device_get_driver (device));
break;
@@ -409,6 +419,9 @@ get_property (GObject *object,
case PROP_MANAGED:
g_value_set_boolean (value, nm_device_get_managed (device));
break;
+ case PROP_FIRMWARE_MISSING:
+ g_value_set_boolean (value, nm_device_get_firmware_missing (device));
+ break;
case PROP_IP4_CONFIG:
g_value_set_object (value, nm_device_get_ip4_config (device));
break;
@@ -465,6 +478,20 @@ nm_device_class_init (NMDeviceClass *device_class)
G_PARAM_READABLE));
/**
+ * NMDevice:ip-interface:
+ *
+ * The IP interface of the device which should be used for all IP-related
+ * operations like addressing and routing.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_IP_INTERFACE,
+ g_param_spec_string (NM_DEVICE_IP_INTERFACE,
+ "IP Interface",
+ "IP Interface name",
+ NULL,
+ G_PARAM_READABLE));
+
+ /**
* NMDevice:udi:
*
* The Unique Device Identifier of the device.
@@ -517,6 +544,20 @@ nm_device_class_init (NMDeviceClass *device_class)
G_PARAM_READABLE));
/**
+ * NMDevice:firmware-missing:
+ *
+ * When %TRUE indicates the device is likely missing firmware required
+ * for its operation.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_FIRMWARE_MISSING,
+ g_param_spec_boolean (NM_DEVICE_FIRMWARE_MISSING,
+ "FirmwareMissing",
+ "Firmware missing",
+ FALSE,
+ G_PARAM_READABLE));
+
+ /**
* NMDevice:ip4-config:
*
* The #NMIP4Config of the device.
@@ -731,6 +772,33 @@ nm_device_get_iface (NMDevice *device)
}
/**
+ * nm_device_get_ip_iface:
+ * @device: a #NMDevice
+ *
+ * Gets the IP interface name of the #NMDevice over which IP traffic flows
+ * when the device is in the ACTIVATED state.
+ *
+ * Returns: the IP traffic interface of the device. This is the internal string
+ * used by the device, and must not be modified.
+ **/
+const char *
+nm_device_get_ip_iface (NMDevice *device)
+{
+ NMDevicePrivate *priv;
+
+ g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
+
+ priv = NM_DEVICE_GET_PRIVATE (device);
+ if (!priv->ip_iface) {
+ priv->ip_iface = _nm_object_get_string_property (NM_OBJECT (device),
+ NM_DBUS_INTERFACE_DEVICE,
+ "IpInterface");
+ }
+
+ return priv->ip_iface;
+}
+
+/**
* nm_device_get_udi:
* @device: a #NMDevice
*
@@ -834,6 +902,33 @@ nm_device_get_managed (NMDevice *device)
}
/**
+ * nm_device_get_firmware_missing:
+ * @device: a #NMDevice
+ *
+ * Indicates that firmware required for the device's operation is likely
+ * to be missing.
+ *
+ * Returns: %TRUE if firmware required for the device's operation is likely
+ * to be missing.
+ **/
+gboolean
+nm_device_get_firmware_missing (NMDevice *device)
+{
+ NMDevicePrivate *priv;
+
+ g_return_val_if_fail (NM_IS_DEVICE (device), 0);
+
+ priv = NM_DEVICE_GET_PRIVATE (device);
+ if (!priv->firmware_missing) {
+ priv->firmware_missing = _nm_object_get_boolean_property (NM_OBJECT (device),
+ NM_DBUS_INTERFACE_DEVICE,
+ "FirmwareMissing");
+ }
+
+ return priv->firmware_missing;
+}
+
+/**
* nm_device_get_ip4_config:
* @device: a #NMDevice
*
@@ -1055,7 +1150,7 @@ nm_device_update_description (NMDevice *device)
{
NMDevicePrivate *priv;
const char *subsys[3] = { "net", "tty", NULL };
- GUdevDevice *udev_device = NULL, *tmpdev;
+ GUdevDevice *udev_device = NULL, *tmpdev, *olddev;
const char *ifname;
guint32 count = 0;
const char *vendor, *model;
@@ -1073,9 +1168,8 @@ nm_device_update_description (NMDevice *device)
if (!ifname)
return;
- if (NM_IS_DEVICE_ETHERNET (device) || NM_IS_DEVICE_WIFI (device))
- udev_device = g_udev_client_query_by_subsystem_and_name (priv->client, "net", ifname);
- else if (NM_IS_GSM_DEVICE (device) || NM_IS_CDMA_DEVICE (device))
+ udev_device = g_udev_client_query_by_subsystem_and_name (priv->client, "net", ifname);
+ if (!udev_device)
udev_device = g_udev_client_query_by_subsystem_and_name (priv->client, "tty", ifname);
if (!udev_device)
return;
@@ -1088,7 +1182,11 @@ nm_device_update_description (NMDevice *device)
/* Walk up the chain of the device and its parents a few steps to grab
* vendor and device ID information off it.
*/
- tmpdev = udev_device;
+
+ /* Ref the device again because we have to unref it each iteration,
+ * as g_udev_device_get_parent() returns a ref-ed object.
+ */
+ tmpdev = g_object_ref (udev_device);
while ((count++ < 3) && tmpdev && (!priv->vendor || !priv->product)) {
if (!priv->vendor)
priv->vendor = get_decoded_property (tmpdev, "ID_VENDOR_ENC");
@@ -1096,11 +1194,23 @@ nm_device_update_description (NMDevice *device)
if (!priv->product)
priv->product = get_decoded_property (tmpdev, "ID_MODEL_ENC");
+ olddev = tmpdev;
tmpdev = g_udev_device_get_parent (tmpdev);
+ g_object_unref (olddev);
}
+ /* Unref the last device if we found what we needed before running out
+ * of parents.
+ */
+ if (tmpdev)
+ g_object_unref (tmpdev);
+
/* If we didn't get strings directly from the device, try database strings */
- tmpdev = udev_device;
+
+ /* Again, ref the original device as we need to unref it every iteration
+ * since g_udev_device_get_parent() returns a refed object.
+ */
+ tmpdev = g_object_ref (udev_device);
count = 0;
while ((count++ < 3) && tmpdev && (!priv->vendor || !priv->product)) {
if (!priv->vendor) {
@@ -1115,9 +1225,20 @@ nm_device_update_description (NMDevice *device)
priv->product = g_strdup (model);
}
+ olddev = tmpdev;
tmpdev = g_udev_device_get_parent (tmpdev);
+ g_object_unref (olddev);
}
+ /* Unref the last device if we found what we needed before running out
+ * of parents.
+ */
+ if (tmpdev)
+ g_object_unref (tmpdev);
+
+ /* Balance the initial g_udev_client_query_by_subsystem_and_name() */
+ g_object_unref (udev_device);
+
_nm_object_queue_notify (NM_OBJECT (device), NM_DEVICE_VENDOR);
_nm_object_queue_notify (NM_OBJECT (device), NM_DEVICE_PRODUCT);
}
diff --git a/libnm-glib/nm-device.h b/libnm-glib/nm-device.h
index 64694ec833..59bf4de6b1 100644
--- a/libnm-glib/nm-device.h
+++ b/libnm-glib/nm-device.h
@@ -18,7 +18,7 @@
* Boston, MA 02110-1301 USA.
*
* Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2008 Red Hat, Inc.
+ * Copyright (C) 2007 - 2010 Red Hat, Inc.
*/
#ifndef NM_DEVICE_H
@@ -46,9 +46,11 @@ G_BEGIN_DECLS
#define NM_DEVICE_UDI "udi"
#define NM_DEVICE_INTERFACE "interface"
+#define NM_DEVICE_IP_INTERFACE "ip-interface"
#define NM_DEVICE_DRIVER "driver"
#define NM_DEVICE_CAPABILITIES "capabilities"
#define NM_DEVICE_MANAGED "managed"
+#define NM_DEVICE_FIRMWARE_MISSING "firmware-missing"
#define NM_DEVICE_IP4_CONFIG "ip4-config"
#define NM_DEVICE_DHCP4_CONFIG "dhcp4-config"
#define NM_DEVICE_IP6_CONFIG "ip6-config"
@@ -83,18 +85,20 @@ GType nm_device_get_type (void);
GObject * nm_device_new (DBusGConnection *connection, const char *path);
-const char * nm_device_get_iface (NMDevice *device);
-const char * nm_device_get_udi (NMDevice *device);
-const char * nm_device_get_driver (NMDevice *device);
-guint32 nm_device_get_capabilities (NMDevice *device);
-gboolean nm_device_get_managed (NMDevice *device);
-NMIP4Config * nm_device_get_ip4_config (NMDevice *device);
-NMDHCP4Config * nm_device_get_dhcp4_config (NMDevice *device);
-NMIP6Config * nm_device_get_ip6_config (NMDevice *device);
-NMDHCP6Config * nm_device_get_dhcp6_config (NMDevice *device);
-NMDeviceState nm_device_get_state (NMDevice *device);
-const char * nm_device_get_product (NMDevice *device);
-const char * nm_device_get_vendor (NMDevice *device);
+const char * nm_device_get_iface (NMDevice *device);
+const char * nm_device_get_ip_iface (NMDevice *device);
+const char * nm_device_get_udi (NMDevice *device);
+const char * nm_device_get_driver (NMDevice *device);
+guint32 nm_device_get_capabilities (NMDevice *device);
+gboolean nm_device_get_managed (NMDevice *device);
+gboolean nm_device_get_firmware_missing (NMDevice *device);
+NMIP4Config * nm_device_get_ip4_config (NMDevice *device);
+NMDHCP4Config * nm_device_get_dhcp4_config (NMDevice *device);
+NMIP6Config * nm_device_get_ip6_config (NMDevice *device);
+NMDHCP6Config * nm_device_get_dhcp6_config (NMDevice *device);
+NMDeviceState nm_device_get_state (NMDevice *device);
+const char * nm_device_get_product (NMDevice *device);
+const char * nm_device_get_vendor (NMDevice *device);
typedef void (*NMDeviceDeactivateFn) (NMDevice *device, GError *error, gpointer user_data);
diff --git a/libnm-glib/nm-dhcp4-config.c b/libnm-glib/nm-dhcp4-config.c
index c87feedf4f..442d19d192 100644
--- a/libnm-glib/nm-dhcp4-config.c
+++ b/libnm-glib/nm-dhcp4-config.c
@@ -17,7 +17,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2008 Red Hat, Inc.
+ * Copyright (C) 2008 - 2010 Red Hat, Inc.
* Copyright (C) 2008 Novell, Inc.
*/
@@ -216,9 +216,9 @@ nm_dhcp4_config_get_options (NMDHCP4Config *config)
return priv->options;
if (!_nm_object_get_property (NM_OBJECT (config),
- "org.freedesktop.DBus.Properties",
- "Options",
- &value))
+ NM_DBUS_INTERFACE_DHCP4_CONFIG,
+ "Options",
+ &value))
goto out;
demarshal_dhcp4_options (NM_OBJECT (config), NULL, &value, &priv->options);
diff --git a/libnm-glib/nm-dhcp6-config.c b/libnm-glib/nm-dhcp6-config.c
index 49eeda39ec..3792867207 100644
--- a/libnm-glib/nm-dhcp6-config.c
+++ b/libnm-glib/nm-dhcp6-config.c
@@ -216,9 +216,9 @@ nm_dhcp6_config_get_options (NMDHCP6Config *config)
return priv->options;
if (!_nm_object_get_property (NM_OBJECT (config),
- "org.freedesktop.DBus.Properties",
- "Options",
- &value))
+ NM_DBUS_INTERFACE_DHCP6_CONFIG,
+ "Options",
+ &value))
goto out;
demarshal_dhcp6_options (NM_OBJECT (config), NULL, &value, &priv->options);
diff --git a/libnm-glib/nm-ip6-config.c b/libnm-glib/nm-ip6-config.c
index f7a2107520..fe71c1b8d3 100644
--- a/libnm-glib/nm-ip6-config.c
+++ b/libnm-glib/nm-ip6-config.c
@@ -92,7 +92,7 @@ demarshal_ip6_nameserver_array (NMObject *object, GParamSpec *pspec, GValue *val
if (!_nm_ip6_address_array_demarshal (value, (GSList **) field))
return FALSE;
- if (!strcmp (pspec->name, NM_IP6_CONFIG_NAMESERVERS))
+ if (pspec && !strcmp (pspec->name, NM_IP6_CONFIG_NAMESERVERS))
_nm_object_queue_notify (object, NM_IP6_CONFIG_NAMESERVERS);
return TRUE;
@@ -162,9 +162,9 @@ nm_ip6_config_get_addresses (NMIP6Config *config)
return priv->addresses;
if (!_nm_object_get_property (NM_OBJECT (config),
- "org.freedesktop.DBus.Properties",
- "Addresses",
- &value)) {
+ NM_DBUS_INTERFACE_IP6_CONFIG,
+ "Addresses",
+ &value)) {
return NULL;
}
@@ -188,6 +188,7 @@ const GSList *
nm_ip6_config_get_nameservers (NMIP6Config *config)
{
NMIP6ConfigPrivate *priv;
+ GParamSpec *pspec;
GValue value = {0,};
g_return_val_if_fail (NM_IS_IP6_CONFIG (config), NULL);
@@ -203,7 +204,8 @@ nm_ip6_config_get_nameservers (NMIP6Config *config)
return NULL;
}
- demarshal_ip6_nameserver_array (NM_OBJECT (config), NULL, &value, &priv->nameservers);
+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (G_OBJECT (config)), NM_IP6_CONFIG_NAMESERVERS);
+ demarshal_ip6_nameserver_array (NM_OBJECT (config), pspec, &value, &priv->nameservers);
g_value_unset (&value);
return priv->nameservers;
diff --git a/libnm-glib/nm-object.c b/libnm-glib/nm-object.c
index 94bda26e56..85cb6b78ab 100644
--- a/libnm-glib/nm-object.c
+++ b/libnm-glib/nm-object.c
@@ -47,7 +47,7 @@ typedef struct {
NMObject *parent;
GSList *notify_props;
- gulong notify_id;
+ guint32 notify_id;
gboolean disposed;
} NMObjectPrivate;
@@ -255,18 +255,23 @@ deferred_notify_cb (gpointer data)
{
NMObject *object = NM_OBJECT (data);
NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
- GSList *iter;
+ GSList *props, *iter;
priv->notify_id = 0;
- priv->notify_props = g_slist_reverse (priv->notify_props);
- for (iter = priv->notify_props; iter; iter = g_slist_next (iter)) {
+ /* Clear priv->notify_props early so that an NMObject subclass that
+ * listens to property changes can queue up other property changes
+ * during the g_object_notify() call separately from the property
+ * list we're iterating.
+ */
+ props = g_slist_reverse (priv->notify_props);
+ priv->notify_props = NULL;
+
+ for (iter = props; iter; iter = g_slist_next (iter)) {
g_object_notify (G_OBJECT (object), (const char *) iter->data);
g_free (iter->data);
}
- g_slist_free (priv->notify_props);
- priv->notify_props = NULL;
-
+ g_slist_free (props);
return FALSE;
}
@@ -522,12 +527,17 @@ _nm_object_set_property (NMObject *object,
g_return_if_fail (prop_name != NULL);
g_return_if_fail (G_IS_VALUE (value));
- dbus_g_proxy_call_no_reply (NM_OBJECT_GET_PRIVATE (object)->properties_proxy,
- "Set",
- G_TYPE_STRING, interface,
- G_TYPE_STRING, prop_name,
- G_TYPE_VALUE, value,
- G_TYPE_INVALID);
+ if (!dbus_g_proxy_call_with_timeout (NM_OBJECT_GET_PRIVATE (object)->properties_proxy,
+ "Set", 2000, NULL,
+ G_TYPE_STRING, interface,
+ G_TYPE_STRING, prop_name,
+ G_TYPE_VALUE, value,
+ G_TYPE_INVALID)) {
+
+ /* Ignore errors. dbus_g_proxy_call_with_timeout() is called instead of
+ * dbus_g_proxy_call_no_reply() to give NM chance to authenticate the caller.
+ */
+ }
}
char *
diff --git a/libnm-glib/nm-remote-connection.c b/libnm-glib/nm-remote-connection.c
index 5d104d0680..1039a7d188 100644
--- a/libnm-glib/nm-remote-connection.c
+++ b/libnm-glib/nm-remote-connection.c
@@ -164,7 +164,7 @@ get_secrets_cb (DBusGProxy *proxy, GHashTable *secrets, GError *error, gpointer
RemoteCall *call = user_data;
NMSettingsConnectionInterfaceGetSecretsFunc func = (NMSettingsConnectionInterfaceGetSecretsFunc) call->callback;
- (*func)(NM_SETTINGS_CONNECTION_INTERFACE (call->self), secrets, error, call->user_data);
+ (*func)(NM_SETTINGS_CONNECTION_INTERFACE (call->self), error ? NULL : secrets, error, call->user_data);
remote_call_complete (call->self, call);
}
diff --git a/libnm-glib/nm-remote-settings.c b/libnm-glib/nm-remote-settings.c
index 92814a15ce..6a9a1d71e9 100644
--- a/libnm-glib/nm-remote-settings.c
+++ b/libnm-glib/nm-remote-settings.c
@@ -166,12 +166,26 @@ fetch_connections_done (DBusGProxy *proxy,
int i;
if (error) {
- g_warning ("%s: error fetching %s connections: (%d) %s.",
- __func__,
- priv->scope == NM_CONNECTION_SCOPE_USER ? "user" : "system",
- error->code,
- error->message ? error->message : "(unknown)");
+ gboolean is_spawn_error = FALSE;
+
+ /* Don't warn if the user settings service wasn't running since that's
+ * just annoying when running headless.
+ */
+ if ( g_error_matches (error, DBUS_GERROR, DBUS_GERROR_SERVICE_UNKNOWN)
+ || g_error_matches (error, DBUS_GERROR, DBUS_GERROR_NAME_HAS_NO_OWNER))
+ is_spawn_error = TRUE;
+
+ if (!is_spawn_error || priv->scope == NM_CONNECTION_SCOPE_SYSTEM) {
+ g_warning ("%s: error fetching %s connections: (%d) %s.",
+ __func__,
+ priv->scope == NM_CONNECTION_SCOPE_USER ? "user" : "system",
+ error->code,
+ error->message ? error->message : "(unknown)");
+ }
g_clear_error (&error);
+
+ /* We tried to read connections and failed */
+ g_signal_emit_by_name (self, NM_SETTINGS_INTERFACE_CONNECTIONS_READ);
return;
}
diff --git a/libnm-glib/nm-settings-interface.c b/libnm-glib/nm-settings-interface.c
index a1d548ed15..3bd4037a1e 100644
--- a/libnm-glib/nm-settings-interface.c
+++ b/libnm-glib/nm-settings-interface.c
@@ -17,7 +17,7 @@
* Boston, MA 02110-1301 USA.
*
* Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2008 Red Hat, Inc.
+ * Copyright (C) 2007 - 2010 Red Hat, Inc.
*/
#include "nm-settings-interface.h"
@@ -62,6 +62,8 @@ nm_settings_interface_error_get_type (void)
ENUM_ENTRY (NM_SETTINGS_INTERFACE_ERROR_SECRETS_REQUEST_CANCELED, "SecretsRequestCanceled"),
/* The request could not be completed because permission was denied. */
ENUM_ENTRY (NM_SETTINGS_INTERFACE_ERROR_PERMISSION_DENIED, "PermissionDenied"),
+ /* The requested setting does not existing in this connection. */
+ ENUM_ENTRY (NM_SETTINGS_INTERFACE_ERROR_INVALID_SETTING, "InvalidSetting"),
{ 0, 0, 0 },
};
etype = g_enum_register_static ("NMSettingsInterfaceError", values);
diff --git a/libnm-glib/nm-settings-interface.h b/libnm-glib/nm-settings-interface.h
index dc7bd0eb82..5920bd8255 100644
--- a/libnm-glib/nm-settings-interface.h
+++ b/libnm-glib/nm-settings-interface.h
@@ -17,7 +17,7 @@
* Boston, MA 02110-1301 USA.
*
* Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2009 Red Hat, Inc.
+ * Copyright (C) 2007 - 2010 Red Hat, Inc.
*/
#ifndef NM_SETTINGS_INTERFACE_H
@@ -36,7 +36,8 @@ typedef enum {
NM_SETTINGS_INTERFACE_ERROR_INTERNAL_ERROR,
NM_SETTINGS_INTERFACE_ERROR_SECRETS_UNAVAILABLE,
NM_SETTINGS_INTERFACE_ERROR_SECRETS_REQUEST_CANCELED,
- NM_SETTINGS_INTERFACE_ERROR_PERMISSION_DENIED
+ NM_SETTINGS_INTERFACE_ERROR_PERMISSION_DENIED,
+ NM_SETTINGS_INTERFACE_ERROR_INVALID_SETTING,
} NMSettingsInterfaceError;
#define NM_SETTINGS_INTERFACE_ERROR (nm_settings_interface_error_quark ())
diff --git a/libnm-glib/nm-types.c b/libnm-glib/nm-types.c
index baceb86ba6..cf9e084c77 100644
--- a/libnm-glib/nm-types.c
+++ b/libnm-glib/nm-types.c
@@ -359,7 +359,7 @@ _nm_ip6_address_array_demarshal (GValue *value, GSList **dest)
{
GPtrArray *array;
- if (!G_VALUE_HOLDS (value, DBUS_TYPE_G_UINT_ARRAY))
+ if (!G_VALUE_HOLDS (value, DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UCHAR))
return FALSE;
if (*dest) {
@@ -373,12 +373,12 @@ _nm_ip6_address_array_demarshal (GValue *value, GSList **dest)
int i;
for (i = 0; i < array->len; i++) {
- struct in6_addr *addr = g_ptr_array_index (array, i);
- struct in6_addr *dup;
+ GByteArray *bytearray = (GByteArray *) g_ptr_array_index (array, i);
+ struct in6_addr *addr;
- dup = g_malloc0 (sizeof (struct in6_addr));
- memcpy (dup, addr, sizeof (struct in6_addr));
- *dest = g_slist_append (*dest, dup);
+ addr = g_malloc0 (sizeof (struct in6_addr));
+ memcpy (addr->s6_addr, bytearray->data, bytearray->len);
+ *dest = g_slist_append (*dest, addr);
}
}
diff --git a/libnm-util/Makefile.am b/libnm-util/Makefile.am
index 97f68e6b7d..fdadc7517f 100644
--- a/libnm-util/Makefile.am
+++ b/libnm-util/Makefile.am
@@ -61,7 +61,7 @@ libnm_util_la_SOURCES= \
libnm_util_la_LIBADD = $(GLIB_LIBS) $(DBUS_LIBS) $(UUID_LIBS)
libnm_util_la_LDFLAGS = -Wl,--version-script=$(srcdir)/libnm-util.ver \
- -version-info "4:4:3"
+ -version-info "7:0:6"
if WITH_GNUTLS
libnm_util_la_SOURCES += crypto_gnutls.c
diff --git a/libnm-util/crypto.c b/libnm-util/crypto.c
index 813cbc8ee5..70872db414 100644
--- a/libnm-util/crypto.c
+++ b/libnm-util/crypto.c
@@ -23,6 +23,7 @@
#include <glib.h>
#include <string.h>
+#include <strings.h>
#include <unistd.h>
#include <stdlib.h>
#include <glib/gi18n.h>
diff --git a/libnm-util/libnm-util.ver b/libnm-util/libnm-util.ver
index 8f846a9fcc..00629d750d 100644
--- a/libnm-util/libnm-util.ver
+++ b/libnm-util/libnm-util.ver
@@ -294,7 +294,15 @@ global:
nm_setting_wired_get_duplex;
nm_setting_wired_get_auto_negotiate;
nm_setting_wired_get_mac_address;
+ nm_setting_wired_get_cloned_mac_address;
nm_setting_wired_get_mtu;
+ nm_setting_wired_get_num_s390_options;
+ nm_setting_wired_get_s390_nettype;
+ nm_setting_wired_get_s390_option;
+ nm_setting_wired_get_s390_option_by_key;
+ nm_setting_wired_add_s390_option;
+ nm_setting_wired_get_s390_subchannels;
+ nm_setting_wired_remove_s390_option;
nm_setting_wireless_ap_security_compatible;
nm_setting_wireless_error_get_type;
nm_setting_wireless_error_quark;
@@ -308,6 +316,7 @@ global:
nm_setting_wireless_get_rate;
nm_setting_wireless_get_tx_power;
nm_setting_wireless_get_mac_address;
+ nm_setting_wireless_get_cloned_mac_address;
nm_setting_wireless_get_mtu;
nm_setting_wireless_get_security;
nm_setting_wireless_add_seen_bssid;
@@ -371,6 +380,10 @@ global:
nm_utils_ssid_to_utf8;
nm_utils_uuid_generate;
nm_utils_uuid_generate_from_string;
+ nm_utils_wifi_freq_to_channel;
+ nm_utils_wifi_channel_to_freq;
+ nm_utils_wifi_find_next_channel;
+ nm_utils_wifi_is_channel_valid;
nm_ip4_address_compare;
nm_ip4_address_dup;
nm_ip4_address_get_address;
diff --git a/libnm-util/nm-connection.c b/libnm-util/nm-connection.c
index 6ca9139316..ad9ed813f7 100644
--- a/libnm-util/nm-connection.c
+++ b/libnm-util/nm-connection.c
@@ -562,30 +562,6 @@ nm_connection_compare (NMConnection *a,
return info.failed ? FALSE : TRUE;
}
-typedef struct {
- gboolean success;
- GSList *all_settings;
- GError **error;
-} VerifySettingsInfo;
-
-static void
-verify_one_setting (gpointer data, gpointer user_data)
-{
- NMSetting *setting = NM_SETTING (data);
- VerifySettingsInfo *info = (VerifySettingsInfo *) user_data;
-
- if (info->success)
- info->success = nm_setting_verify (setting, info->all_settings, info->error);
-}
-
-static void
-hash_values_to_slist (gpointer key, gpointer value, gpointer user_data)
-{
- GSList **list = (GSList **) user_data;
-
- *list = g_slist_prepend (*list, value);
-}
-
/**
* nm_connection_verify:
* @connection: the #NMConnection to verify
@@ -608,7 +584,10 @@ nm_connection_verify (NMConnection *connection, GError **error)
{
NMConnectionPrivate *priv;
NMSetting *s_con;
- VerifySettingsInfo info;
+ GHashTableIter iter;
+ gpointer value;
+ GSList *all_settings = NULL;
+ gboolean success = TRUE;
if (error)
g_return_val_if_fail (*error == NULL, FALSE);
@@ -633,15 +612,18 @@ nm_connection_verify (NMConnection *connection, GError **error)
return FALSE;
}
+ /* Build up the list of settings */
+ g_hash_table_iter_init (&iter, priv->settings);
+ while (g_hash_table_iter_next (&iter, NULL, &value))
+ all_settings = g_slist_append (all_settings, value);
+
/* Now, run the verify function of each setting */
- memset (&info, 0, sizeof (info));
- info.success = TRUE;
- info.error = error;
- g_hash_table_foreach (priv->settings, hash_values_to_slist, &info.all_settings);
-
- g_slist_foreach (info.all_settings, verify_one_setting, &info);
- g_slist_free (info.all_settings);
- return info.success;
+ g_hash_table_iter_init (&iter, priv->settings);
+ while (g_hash_table_iter_next (&iter, NULL, &value) && success)
+ success = nm_setting_verify (NM_SETTING (value), all_settings, error);
+
+ g_slist_free (all_settings);
+ return success;
}
/**
diff --git a/libnm-util/nm-setting-gsm.c b/libnm-util/nm-setting-gsm.c
index 4b4560cd6d..9f24265d8c 100644
--- a/libnm-util/nm-setting-gsm.c
+++ b/libnm-util/nm-setting-gsm.c
@@ -231,12 +231,30 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
return FALSE;
}
- if (priv->apn && (strlen (priv->apn) < 1 || strchr (priv->apn, '"'))) {
- g_set_error (error,
- NM_SETTING_GSM_ERROR,
- NM_SETTING_GSM_ERROR_INVALID_PROPERTY,
- NM_SETTING_GSM_APN);
- return FALSE;
+ if (priv->apn) {
+ guint32 apn_len = strlen (priv->apn);
+ guint32 i;
+
+ if (apn_len < 1 || apn_len > 64) {
+ g_set_error (error,
+ NM_SETTING_GSM_ERROR,
+ NM_SETTING_GSM_ERROR_INVALID_PROPERTY,
+ NM_SETTING_GSM_APN);
+ return FALSE;
+ }
+
+ /* APNs roughly follow the same rules as DNS domain names. Allowed
+ * characters are a-z, 0-9, . and -. GSM 03.60 Section 14.9.
+ */
+ for (i = 0; i < apn_len; i++) {
+ if (!isalnum (priv->apn[i]) && (priv->apn[i] != '.') && (priv->apn[i] != '-')) {
+ g_set_error (error,
+ NM_SETTING_GSM_ERROR,
+ NM_SETTING_GSM_ERROR_INVALID_PROPERTY,
+ NM_SETTING_GSM_APN);
+ return FALSE;
+ }
+ }
}
if (priv->username && !strlen (priv->username)) {
@@ -326,6 +344,7 @@ set_property (GObject *object, guint prop_id,
{
NMSettingGsmPrivate *priv = NM_SETTING_GSM_GET_PRIVATE (object);
const char *str;
+ char *tmp;
switch (prop_id) {
case PROP_NUMBER:
@@ -342,11 +361,17 @@ set_property (GObject *object, guint prop_id,
break;
case PROP_APN:
g_free (priv->apn);
- priv->apn = g_value_dup_string (value);
+ priv->apn = NULL;
+ tmp = g_value_dup_string (value);
+ if (tmp)
+ priv->apn = g_strstrip (tmp);
break;
case PROP_NETWORK_ID:
g_free (priv->network_id);
- priv->network_id = g_value_dup_string (value);
+ priv->network_id = NULL;
+ tmp = g_value_dup_string (value);
+ if (tmp)
+ priv->network_id = g_strstrip (tmp);
break;
case PROP_NETWORK_TYPE:
priv->network_type = g_value_get_int (value);
@@ -503,6 +528,8 @@ nm_setting_gsm_class_init (NMSettingGsmClass *setting_class)
* the user will be billed for their network usage and whether the user has
* access to the Internet or just a provider-specific walled-garden, so it
* is important to use the correct APN for the user's mobile broadband plan.
+ * The APN may only be composed of the characters a-z, 0-9, ., and - per
+ * GSM 03.60 Section 14.9.
**/
g_object_class_install_property
(object_class, PROP_APN,
@@ -515,7 +542,8 @@ nm_setting_gsm_class_init (NMSettingGsmClass *setting_class)
"user has access to the Internet or just a provider-"
"specific walled-garden, so it is important to use "
"the correct APN for the user's mobile broadband "
- "plan.",
+ "plan. The APN may only be composed of the characters "
+ "a-z, 0-9, ., and - per GSM 03.60 Section 14.9.",
NULL,
G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
diff --git a/libnm-util/nm-setting-pppoe.c b/libnm-util/nm-setting-pppoe.c
index 6b0241b475..d1aba43d30 100644
--- a/libnm-util/nm-setting-pppoe.c
+++ b/libnm-util/nm-setting-pppoe.c
@@ -19,7 +19,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2008 Red Hat, Inc.
+ * (C) Copyright 2007 - 2010 Red Hat, Inc.
* (C) Copyright 2007 - 2008 Novell, Inc.
*/
@@ -112,15 +112,6 @@ nm_setting_pppoe_get_password (NMSettingPPPOE *setting)
return NM_SETTING_PPPOE_GET_PRIVATE (setting)->password;
}
-static gint
-find_setting_by_name (gconstpointer a, gconstpointer b)
-{
- NMSetting *setting = NM_SETTING (a);
- const char *str = (const char *) b;
-
- return strcmp (nm_setting_get_name (setting), str);
-}
-
static gboolean
verify (NMSetting *setting, GSList *all_settings, GError **error)
{
@@ -148,14 +139,6 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
return FALSE;
}
- if (!g_slist_find_custom (all_settings, NM_SETTING_PPP_SETTING_NAME, find_setting_by_name)) {
- g_set_error (error,
- NM_SETTING_PPPOE_ERROR,
- NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING,
- NULL);
- return FALSE;
- }
-
return TRUE;
}
diff --git a/libnm-util/nm-setting-serial.c b/libnm-util/nm-setting-serial.c
index 7a20688a40..779e53a8d5 100644
--- a/libnm-util/nm-setting-serial.c
+++ b/libnm-util/nm-setting-serial.c
@@ -149,10 +149,10 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
/* Serial connections require a PPP setting */
if (all_settings &&
!g_slist_find_custom (all_settings, NM_SETTING_PPP_SETTING_NAME, find_setting_by_name)) {
- g_set_error (error,
- NM_SETTING_SERIAL_ERROR,
- NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING,
- NULL);
+ g_set_error_literal (error,
+ NM_SETTING_SERIAL_ERROR,
+ NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING,
+ "Missing required PPP setting");
return FALSE;
}
diff --git a/libnm-util/nm-setting-vpn.c b/libnm-util/nm-setting-vpn.c
index cef8323432..53b609e2d8 100644
--- a/libnm-util/nm-setting-vpn.c
+++ b/libnm-util/nm-setting-vpn.c
@@ -248,6 +248,7 @@ static gboolean
update_one_secret (NMSetting *setting, const char *key, GValue *value, GError **error)
{
NMSettingVPNPrivate *priv = NM_SETTING_VPN_GET_PRIVATE (setting);
+ char *str;
g_return_val_if_fail (key != NULL, FALSE);
g_return_val_if_fail (value != NULL, FALSE);
@@ -259,8 +260,17 @@ update_one_secret (NMSetting *setting, const char *key, GValue *value, GError **
return FALSE;
}
- g_hash_table_insert (priv->secrets, g_strdup (key), g_value_dup_string (value));
- return FALSE;
+ str = g_value_dup_string (value);
+ if (!str || !strlen (str)) {
+ g_set_error (error, NM_SETTING_ERROR,
+ NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH,
+ "Secret %s was empty", key);
+ g_free (str);
+ return FALSE;
+ }
+
+ g_hash_table_insert (priv->secrets, g_strdup (key), str);
+ return TRUE;
}
static void
diff --git a/libnm-util/nm-setting-wired.c b/libnm-util/nm-setting-wired.c
index 2f25243318..ad47ac943c 100644
--- a/libnm-util/nm-setting-wired.c
+++ b/libnm-util/nm-setting-wired.c
@@ -19,16 +19,20 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2008 Red Hat, Inc.
+ * (C) Copyright 2007 - 2010 Red Hat, Inc.
* (C) Copyright 2007 - 2008 Novell, Inc.
*/
+#include <string.h>
+#include <ctype.h>
#include <net/ethernet.h>
#include <dbus/dbus-glib.h>
+
#include "nm-setting-wired.h"
#include "nm-param-spec-specialized.h"
#include "nm-utils.h"
#include "nm-utils-private.h"
+#include "nm-dbus-glib-types.h"
GQuark
nm_setting_wired_error_quark (void)
@@ -73,8 +77,12 @@ typedef struct {
guint32 speed;
char *duplex;
gboolean auto_negotiate;
- GByteArray *mac_address;
+ GByteArray *device_mac_address;
+ GByteArray *cloned_mac_address;
guint32 mtu;
+ GPtrArray *s390_subchannels;
+ char *s390_nettype;
+ GHashTable *s390_options;
} NMSettingWiredPrivate;
enum {
@@ -84,11 +92,25 @@ enum {
PROP_DUPLEX,
PROP_AUTO_NEGOTIATE,
PROP_MAC_ADDRESS,
+ PROP_CLONED_MAC_ADDRESS,
PROP_MTU,
+ PROP_S390_SUBCHANNELS,
+ PROP_S390_NETTYPE,
+ PROP_S390_OPTIONS,
LAST_PROP
};
+static const char *valid_s390_opts[] = {
+ "portno", "layer2", "portname", "protocol", "priority_queueing",
+ "buffer_count", "isolation", "total", "inter", "inter_jumbo", "route4",
+ "route6", "fake_broadcast", "broadcast_mode", "canonical_macaddr",
+ "checksumming", "sniffer", "large_send", "ipato_enable", "ipato_invert4",
+ "ipato_add4", "ipato_invert6", "ipato_add6", "vipa_add4", "vipa_add6",
+ "rxip_add4", "rxip_add6", "lancmd_timeout",
+ NULL
+};
+
NMSetting *
nm_setting_wired_new (void)
{
@@ -132,7 +154,15 @@ nm_setting_wired_get_mac_address (NMSettingWired *setting)
{
g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), NULL);
- return NM_SETTING_WIRED_GET_PRIVATE (setting)->mac_address;
+ return NM_SETTING_WIRED_GET_PRIVATE (setting)->device_mac_address;
+}
+
+const GByteArray *
+nm_setting_wired_get_cloned_mac_address (NMSettingWired *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), NULL);
+
+ return NM_SETTING_WIRED_GET_PRIVATE (setting)->cloned_mac_address;
}
guint32
@@ -143,12 +173,197 @@ nm_setting_wired_get_mtu (NMSettingWired *setting)
return NM_SETTING_WIRED_GET_PRIVATE (setting)->mtu;
}
+/**
+ * nm_setting_wired_get_s390_subchannels:
+ * @setting: the #NMSettingWired
+ *
+ * Return the list of s390 subchannels that identify the device that this
+ * connection is applicable to. The connection should only be used in
+ * conjunction with that device.
+ *
+ * Returns: a #GPtrArray of strings, each specifying one subchannel the
+ * s390 device uses to communicate to the host.
+ **/
+const GPtrArray *
+nm_setting_wired_get_s390_subchannels (NMSettingWired *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), NULL);
+
+ return NM_SETTING_WIRED_GET_PRIVATE (setting)->s390_subchannels;
+}
+
+/**
+ * nm_setting_wired_get_s390_nettype:
+ * @setting: the #NMSettingWired
+ *
+ * Returns the s390 device type this connection should apply to. Will be one
+ * of 'qeth', 'lcs', or 'ctcm'.
+ *
+ * Returns: the s390 device type
+ **/
+const char *
+nm_setting_wired_get_s390_nettype (NMSettingWired *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), NULL);
+
+ return NM_SETTING_WIRED_GET_PRIVATE (setting)->s390_nettype;
+}
+
+/**
+ * nm_setting_wired_get_num_s390_options:
+ * @setting: the #NMSettingWired
+ *
+ * Returns the number of s390-specific options that should be set for this
+ * device when it is activated. This can be used to retrieve each s390
+ * option individually using nm_setting_wired_get_s390_option().
+ *
+ * Returns: the number of s390-specific device options
+ **/
+guint32
+nm_setting_wired_get_num_s390_options (NMSettingWired *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), 0);
+
+ return g_hash_table_size (NM_SETTING_WIRED_GET_PRIVATE (setting)->s390_options);
+}
+
+/**
+ * nm_setting_wired_get_s390_option:
+ * @setting: the #NMSettingWired
+ * @idx: index of the desired option, from 0 to
+ * nm_setting_wired_get_num_s390_options() - 1
+ * @out_key: on return, the key name of the s390 specific option; this value is
+ * owned by the setting and should not be modified
+ * @out_value: on return, the value of the key of the s390 specific option; this
+ * value is owned by the setting and should not be modified
+ *
+ * Given an index, return the value of the s390 option at that index. indexes
+ * are *not* guaranteed to be static across modifications to options done by
+ * nm_setting_wired_add_s390_option() and nm_setting_wired_remove_s390_option(),
+ * and should not be used to refer to options except for short periods of time
+ * such as during option iteration.
+ *
+ * Returns: %TRUE on success if the index was valid and an option was found,
+ * %FALSE if the index was invalid (ie, greater than the number of options
+ * currently held by the setting)
+ **/
+gboolean
+nm_setting_wired_get_s390_option (NMSettingWired *setting,
+ guint32 idx,
+ const char **out_key,
+ const char **out_value)
+{
+ NMSettingWiredPrivate *priv;
+ guint32 num_keys;
+ GList *keys;
+ const char *_key = NULL, *_value = NULL;
+
+ g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), FALSE);
+
+ priv = NM_SETTING_WIRED_GET_PRIVATE (setting);
+
+ num_keys = nm_setting_wired_get_num_s390_options (setting);
+ g_return_val_if_fail (idx < num_keys, FALSE);
+
+ keys = g_hash_table_get_keys (priv->s390_options);
+ _key = g_list_nth_data (keys, idx);
+ _value = g_hash_table_lookup (priv->s390_options, _key);
+
+ if (out_key)
+ *out_key = _key;
+ if (out_value)
+ *out_value = _value;
+ return TRUE;
+}
+
+/**
+ * nm_setting_wired_get_s390_option_by_key:
+ * @setting: the #NMSettingWired
+ * @key: the key for which to retrieve the value
+ *
+ * Returns the value associated with the s390-specific option specified by
+ * @key, if it exists.
+ *
+ * Returns: the value, or NULL if the key/value pair was never added to the
+ * setting; the value is owned by the setting and must not be modified
+ **/
+const char *
+nm_setting_wired_get_s390_option_by_key (NMSettingWired *setting,
+ const char *key)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), NULL);
+ g_return_val_if_fail (key != NULL, NULL);
+ g_return_val_if_fail (strlen (key), NULL);
+
+ return g_hash_table_lookup (NM_SETTING_WIRED_GET_PRIVATE (setting)->s390_options, key);
+}
+
+/**
+ * nm_setting_wired_add_s390_options:
+ * @setting: the #NMSettingWired
+ * @key: key name for the option
+ * @value: value for the option
+ *
+ * Add an option to the table. The option is compared to an internal list
+ * of allowed options. Key names may contain only alphanumeric characters
+ * (ie [a-zA-Z0-9]). Adding a new key replaces any existing key/value pair that
+ * may already exist.
+ *
+ * Returns: %TRUE if the option was valid and was added to the internal option
+ * list, %FALSE if it was not.
+ **/
+gboolean nm_setting_wired_add_s390_option (NMSettingWired *setting,
+ const char *key,
+ const char *value)
+{
+ size_t value_len;
+
+ g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), FALSE);
+ g_return_val_if_fail (key != NULL, FALSE);
+ g_return_val_if_fail (strlen (key), FALSE);
+ g_return_val_if_fail (_nm_utils_string_in_list (key, valid_s390_opts), FALSE);
+ g_return_val_if_fail (value != NULL, FALSE);
+
+ value_len = strlen (value);
+ g_return_val_if_fail (value_len > 0 && value_len < 200, FALSE);
+
+ g_hash_table_insert (NM_SETTING_WIRED_GET_PRIVATE (setting)->s390_options,
+ g_strdup (key),
+ g_strdup (value));
+ return TRUE;
+}
+
+/**
+ * nm_setting_wired_remove_s390_options:
+ * @setting: the #NMSettingWired
+ * @key: key name for the option to remove
+ *
+ * Remove the s390-specific option referenced by @key from the internal option
+ * list.
+ *
+ * Returns: %TRUE if the option was found and removed from the internal option
+ * list, %FALSE if it was not.
+ **/
+gboolean
+nm_setting_wired_remove_s390_option (NMSettingWired *setting,
+ const char *key)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), FALSE);
+ g_return_val_if_fail (key != NULL, FALSE);
+ g_return_val_if_fail (strlen (key), FALSE);
+
+ return g_hash_table_remove (NM_SETTING_WIRED_GET_PRIVATE (setting)->s390_options, key);
+}
+
static gboolean
verify (NMSetting *setting, GSList *all_settings, GError **error)
{
NMSettingWiredPrivate *priv = NM_SETTING_WIRED_GET_PRIVATE (setting);
const char *valid_ports[] = { "tp", "aui", "bnc", "mii", NULL };
const char *valid_duplex[] = { "half", "full", NULL };
+ const char *valid_nettype[] = { "qeth", "lcs", "ctcm", NULL };
+ GHashTableIter iter;
+ const char *key, *value;
if (priv->port && !_nm_utils_string_in_list (priv->port, valid_ports)) {
g_set_error (error,
@@ -166,7 +381,7 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
return FALSE;
}
- if (priv->mac_address && priv->mac_address->len != ETH_ALEN) {
+ if (priv->device_mac_address && priv->device_mac_address->len != ETH_ALEN) {
g_set_error (error,
NM_SETTING_WIRED_ERROR,
NM_SETTING_WIRED_ERROR_INVALID_PROPERTY,
@@ -174,13 +389,54 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
return FALSE;
}
+ if ( priv->s390_subchannels
+ && !(priv->s390_subchannels->len == 3 || priv->s390_subchannels->len == 2)) {
+ g_set_error (error,
+ NM_SETTING_WIRED_ERROR,
+ NM_SETTING_WIRED_ERROR_INVALID_PROPERTY,
+ NM_SETTING_WIRED_S390_SUBCHANNELS);
+ return FALSE;
+ }
+
+ if (priv->s390_nettype && !_nm_utils_string_in_list (priv->s390_nettype, valid_nettype)) {
+ g_set_error (error,
+ NM_SETTING_WIRED_ERROR,
+ NM_SETTING_WIRED_ERROR_INVALID_PROPERTY,
+ NM_SETTING_WIRED_S390_NETTYPE);
+ return FALSE;
+ }
+
+ g_hash_table_iter_init (&iter, priv->s390_options);
+ while (g_hash_table_iter_next (&iter, (gpointer) &key, (gpointer) &value)) {
+ if ( !_nm_utils_string_in_list (key, valid_s390_opts)
+ || !strlen (value)
+ || (strlen (value) > 200)) {
+ g_set_error (error,
+ NM_SETTING_WIRED_ERROR,
+ NM_SETTING_WIRED_ERROR_INVALID_PROPERTY,
+ NM_SETTING_WIRED_S390_OPTIONS);
+ return FALSE;
+ }
+ }
+
+ if (priv->cloned_mac_address && priv->cloned_mac_address->len != ETH_ALEN) {
+ g_set_error (error,
+ NM_SETTING_WIRED_ERROR,
+ NM_SETTING_WIRED_ERROR_INVALID_PROPERTY,
+ NM_SETTING_WIRED_CLONED_MAC_ADDRESS);
+ return FALSE;
+ }
+
return TRUE;
}
static void
nm_setting_wired_init (NMSettingWired *setting)
{
+ NMSettingWiredPrivate *priv = NM_SETTING_WIRED_GET_PRIVATE (setting);
+
g_object_set (setting, NM_SETTING_NAME, NM_SETTING_WIRED_SETTING_NAME, NULL);
+ priv->s390_options = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
}
static void
@@ -190,18 +446,31 @@ finalize (GObject *object)
g_free (priv->port);
g_free (priv->duplex);
+ g_free (priv->s390_nettype);
+
+ g_hash_table_destroy (priv->s390_options);
+
+ if (priv->device_mac_address)
+ g_byte_array_free (priv->device_mac_address, TRUE);
- if (priv->mac_address)
- g_byte_array_free (priv->mac_address, TRUE);
+ if (priv->cloned_mac_address)
+ g_byte_array_free (priv->cloned_mac_address, TRUE);
G_OBJECT_CLASS (nm_setting_wired_parent_class)->finalize (object);
}
static void
+copy_hash (gpointer key, gpointer value, gpointer user_data)
+{
+ g_hash_table_insert ((GHashTable *) user_data, g_strdup (key), g_strdup (value));
+}
+
+static void
set_property (GObject *object, guint prop_id,
- const GValue *value, GParamSpec *pspec)
+ const GValue *value, GParamSpec *pspec)
{
NMSettingWiredPrivate *priv = NM_SETTING_WIRED_GET_PRIVATE (object);
+ GHashTable *new_hash;
switch (prop_id) {
case PROP_PORT:
@@ -219,13 +488,36 @@ set_property (GObject *object, guint prop_id,
priv->auto_negotiate = g_value_get_boolean (value);
break;
case PROP_MAC_ADDRESS:
- if (priv->mac_address)
- g_byte_array_free (priv->mac_address, TRUE);
- priv->mac_address = g_value_dup_boxed (value);
+ if (priv->device_mac_address)
+ g_byte_array_free (priv->device_mac_address, TRUE);
+ priv->device_mac_address = g_value_dup_boxed (value);
+ break;
+ case PROP_CLONED_MAC_ADDRESS:
+ if (priv->cloned_mac_address)
+ g_byte_array_free (priv->cloned_mac_address, TRUE);
+ priv->cloned_mac_address = g_value_dup_boxed (value);
break;
case PROP_MTU:
priv->mtu = g_value_get_uint (value);
break;
+ case PROP_S390_SUBCHANNELS:
+ if (priv->s390_subchannels) {
+ g_ptr_array_foreach (priv->s390_subchannels, (GFunc) g_free, NULL);
+ g_ptr_array_free (priv->s390_subchannels, TRUE);
+ }
+ priv->s390_subchannels = g_value_dup_boxed (value);
+ break;
+ case PROP_S390_NETTYPE:
+ g_free (priv->s390_nettype);
+ priv->s390_nettype = g_value_dup_string (value);
+ break;
+ case PROP_S390_OPTIONS:
+ /* Must make a deep copy of the hash table here... */
+ g_hash_table_remove_all (priv->s390_options);
+ new_hash = g_value_get_boxed (value);
+ if (new_hash)
+ g_hash_table_foreach (new_hash, copy_hash, priv->s390_options);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -234,9 +526,10 @@ set_property (GObject *object, guint prop_id,
static void
get_property (GObject *object, guint prop_id,
- GValue *value, GParamSpec *pspec)
+ GValue *value, GParamSpec *pspec)
{
NMSettingWired *setting = NM_SETTING_WIRED (object);
+ NMSettingWiredPrivate *priv = NM_SETTING_WIRED_GET_PRIVATE (setting);
switch (prop_id) {
case PROP_PORT:
@@ -254,9 +547,21 @@ get_property (GObject *object, guint prop_id,
case PROP_MAC_ADDRESS:
g_value_set_boxed (value, nm_setting_wired_get_mac_address (setting));
break;
+ case PROP_CLONED_MAC_ADDRESS:
+ g_value_set_boxed (value, nm_setting_wired_get_cloned_mac_address (setting));
+ break;
case PROP_MTU:
g_value_set_uint (value, nm_setting_wired_get_mtu (setting));
break;
+ case PROP_S390_SUBCHANNELS:
+ g_value_set_boxed (value, nm_setting_wired_get_s390_subchannels (setting));
+ break;
+ case PROP_S390_NETTYPE:
+ g_value_set_string (value, nm_setting_wired_get_s390_nettype (setting));
+ break;
+ case PROP_S390_OPTIONS:
+ g_value_set_boxed (value, priv->s390_options);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -351,21 +656,37 @@ nm_setting_wired_class_init (NMSettingWiredClass *setting_class)
* NMSettingWired:mac-address:
*
* If specified, this connection will only apply to the ethernet device
- * whose MAC address matches. This property does not change the MAC address
- * of the device (known as MAC spoofing).
+ * whose permanent MAC address matches. This property does not change the MAC address
+ * of the device (i.e. MAC spoofing).
**/
g_object_class_install_property
(object_class, PROP_MAC_ADDRESS,
_nm_param_spec_specialized (NM_SETTING_WIRED_MAC_ADDRESS,
- "MAC Address",
+ "Device MAC Address",
"If specified, this connection will only apply to "
- "the ethernet device whose MAC address matches. "
+ "the ethernet device whose permanent MAC address matches. "
"This property does not change the MAC address "
- "of the device (known as MAC spoofing).",
+ "of the device (i.e. MAC spoofing).",
DBUS_TYPE_G_UCHAR_ARRAY,
G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
/**
+ * NMSettingWired:cloned-mac-address:
+ *
+ * If specified, request that the device use this MAC address instead of its
+ * permanent MAC address. This is known as MAC cloning or spoofing.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_CLONED_MAC_ADDRESS,
+ _nm_param_spec_specialized (NM_SETTING_WIRED_CLONED_MAC_ADDRESS,
+ "Cloned MAC Address",
+ "If specified, request that the device use "
+ "this MAC address instead of its permanent MAC address. "
+ "This is known as MAC cloning or spoofing.",
+ DBUS_TYPE_G_UCHAR_ARRAY,
+ G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+
+ /**
* NMSettingWired:mtu:
*
* If non-zero, only transmit packets of the specified size or smaller,
@@ -380,5 +701,66 @@ nm_setting_wired_class_init (NMSettingWiredClass *setting_class)
"multiple Ethernet frames.",
0, G_MAXUINT32, 0,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_FUZZY_IGNORE));
+
+ /**
+ * NMSettingWired:s390-subchannels:
+ *
+ * Identifies specific subchannels that this network device uses for
+ * communcation with z/VM or s390 host. Like #NMSettingWired:mac-address
+ * for non-z/VM devices, this property can be used to ensure this connection
+ * only applies to the network device that uses these subchannels. The
+ * list should contain exactly 3 strings, and each string may only be
+ * composed of hexadecimal characters and the period (.) character.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_S390_SUBCHANNELS,
+ _nm_param_spec_specialized (NM_SETTING_WIRED_S390_SUBCHANNELS,
+ "z/VM Subchannels",
+ "Identifies specific subchannels that this "
+ "network device uses for communcation with z/VM "
+ "or s390 host. Like the 'mac-address' property "
+ "for non-z/VM devices, this property can be used "
+ "to ensure this connection only applies to the "
+ "network device that uses these subchannels. The "
+ "list should contain exactly 3 strings, and each "
+ "string may only be composed of hexadecimal "
+ "characters and the period (.) character.",
+ DBUS_TYPE_G_ARRAY_OF_STRING,
+ G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+
+ /**
+ * NMSettingWired:s390-nettype:
+ *
+ * s390 network device type; one of 'qeth', 'lcs', or 'ctc', representing
+ * the different types of virtual network devices available on s390 systems.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_S390_NETTYPE,
+ g_param_spec_string (NM_SETTING_WIRED_S390_NETTYPE,
+ "s390 Net Type",
+ "s390 network device type; one of 'qeth', 'lcs', or "
+ "'ctc', representing the different types of virtual "
+ "network devices available on s390 systems.",
+ NULL,
+ G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+
+ /**
+ * NMSettingWired:s390-options:
+ *
+ * Dictionary of key/value pairs of s390-specific device options. Both keys
+ * and values must be strings. Allowed keys include 'portno', 'layer2',
+ * 'portname', 'protocol', among others. Key names must contain only
+ * alphanumeric characters (ie, [a-zA-Z0-9]).
+ **/
+ g_object_class_install_property
+ (object_class, PROP_S390_OPTIONS,
+ _nm_param_spec_specialized (NM_SETTING_WIRED_S390_OPTIONS,
+ "s390 Options",
+ "Dictionary of key/value pairs of s390-specific "
+ "device options. Both keys and values must be "
+ "strings. Allowed keys include 'portno', "
+ "'layer2', 'portname', 'protocol', among others.",
+ DBUS_TYPE_G_MAP_OF_STRING,
+ G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
}
diff --git a/libnm-util/nm-setting-wired.h b/libnm-util/nm-setting-wired.h
index 44127347f2..32361b4bca 100644
--- a/libnm-util/nm-setting-wired.h
+++ b/libnm-util/nm-setting-wired.h
@@ -19,7 +19,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2008 Red Hat, Inc.
+ * (C) Copyright 2007 - 2010 Red Hat, Inc.
* (C) Copyright 2007 - 2008 Novell, Inc.
*/
@@ -57,7 +57,11 @@ GQuark nm_setting_wired_error_quark (void);
#define NM_SETTING_WIRED_DUPLEX "duplex"
#define NM_SETTING_WIRED_AUTO_NEGOTIATE "auto-negotiate"
#define NM_SETTING_WIRED_MAC_ADDRESS "mac-address"
+#define NM_SETTING_WIRED_CLONED_MAC_ADDRESS "cloned-mac-address"
#define NM_SETTING_WIRED_MTU "mtu"
+#define NM_SETTING_WIRED_S390_SUBCHANNELS "s390-subchannels"
+#define NM_SETTING_WIRED_S390_NETTYPE "s390-nettype"
+#define NM_SETTING_WIRED_S390_OPTIONS "s390-options"
typedef struct {
NMSetting parent;
@@ -75,13 +79,30 @@ typedef struct {
GType nm_setting_wired_get_type (void);
-NMSetting *nm_setting_wired_new (void);
-const char *nm_setting_wired_get_port (NMSettingWired *setting);
-guint32 nm_setting_wired_get_speed (NMSettingWired *setting);
-const char *nm_setting_wired_get_duplex (NMSettingWired *setting);
-gboolean nm_setting_wired_get_auto_negotiate (NMSettingWired *setting);
-const GByteArray *nm_setting_wired_get_mac_address (NMSettingWired *setting);
-guint32 nm_setting_wired_get_mtu (NMSettingWired *setting);
+NMSetting * nm_setting_wired_new (void);
+const char * nm_setting_wired_get_port (NMSettingWired *setting);
+guint32 nm_setting_wired_get_speed (NMSettingWired *setting);
+const char * nm_setting_wired_get_duplex (NMSettingWired *setting);
+gboolean nm_setting_wired_get_auto_negotiate (NMSettingWired *setting);
+const GByteArray *nm_setting_wired_get_mac_address (NMSettingWired *setting);
+const GByteArray *nm_setting_wired_get_cloned_mac_address (NMSettingWired *setting);
+guint32 nm_setting_wired_get_mtu (NMSettingWired *setting);
+
+const GPtrArray * nm_setting_wired_get_s390_subchannels (NMSettingWired *setting);
+const char * nm_setting_wired_get_s390_nettype (NMSettingWired *setting);
+
+guint32 nm_setting_wired_get_num_s390_options (NMSettingWired *setting);
+gboolean nm_setting_wired_get_s390_option (NMSettingWired *setting,
+ guint32 idx,
+ const char **out_key,
+ const char **out_value);
+const char * nm_setting_wired_get_s390_option_by_key (NMSettingWired *setting,
+ const char *key);
+gboolean nm_setting_wired_add_s390_option (NMSettingWired *setting,
+ const char *key,
+ const char *item);
+gboolean nm_setting_wired_remove_s390_option (NMSettingWired *setting,
+ const char *key);
G_END_DECLS
diff --git a/libnm-util/nm-setting-wireless-security.c b/libnm-util/nm-setting-wireless-security.c
index 678a6fad80..ca789b422b 100644
--- a/libnm-util/nm-setting-wireless-security.c
+++ b/libnm-util/nm-setting-wireless-security.c
@@ -19,10 +19,11 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2008 Red Hat, Inc.
+ * (C) Copyright 2007 - 2010 Red Hat, Inc.
* (C) Copyright 2007 - 2008 Novell, Inc.
*/
+#include <config.h>
#include <string.h>
#include <ctype.h>
#include <dbus/dbus-glib.h>
diff --git a/libnm-util/nm-setting-wireless.c b/libnm-util/nm-setting-wireless.c
index 9213429c84..ec7d53ad77 100644
--- a/libnm-util/nm-setting-wireless.c
+++ b/libnm-util/nm-setting-wireless.c
@@ -19,11 +19,12 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2008 Red Hat, Inc.
+ * (C) Copyright 2007 - 2010 Red Hat, Inc.
* (C) Copyright 2007 - 2008 Novell, Inc.
*/
#include <string.h>
+#include <net/ethernet.h>
#include <netinet/ether.h>
#include <dbus/dbus-glib.h>
@@ -86,7 +87,8 @@ typedef struct {
GByteArray *bssid;
guint32 rate;
guint32 tx_power;
- GByteArray *mac_address;
+ GByteArray *device_mac_address;
+ GByteArray *cloned_mac_address;
guint32 mtu;
GSList *seen_bssids;
char *security;
@@ -102,6 +104,7 @@ enum {
PROP_RATE,
PROP_TX_POWER,
PROP_MAC_ADDRESS,
+ PROP_CLONED_MAC_ADDRESS,
PROP_MTU,
PROP_SEEN_BSSIDS,
PROP_SEC,
@@ -353,7 +356,15 @@ nm_setting_wireless_get_mac_address (NMSettingWireless *setting)
{
g_return_val_if_fail (NM_IS_SETTING_WIRELESS (setting), NULL);
- return NM_SETTING_WIRELESS_GET_PRIVATE (setting)->mac_address;
+ return NM_SETTING_WIRELESS_GET_PRIVATE (setting)->device_mac_address;
+}
+
+const GByteArray *
+nm_setting_wireless_get_cloned_mac_address (NMSettingWireless *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS (setting), NULL);
+
+ return NM_SETTING_WIRELESS_GET_PRIVATE (setting)->cloned_mac_address;
}
guint32
@@ -480,31 +491,11 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
}
if (priv->channel) {
- if (!strcmp (priv->band, "a")) {
- int i;
- int valid_channels[] = { 7, 8, 9, 11, 12, 16, 34, 36, 40, 44, 48,
- 52, 56, 60, 64, 100, 104, 108, 112, 116,
- 120, 124, 128, 132, 136, 140, 149, 153,
- 157, 161, 165, 183, 184, 185, 187, 188,
- 192, 196, 0 };
-
- for (i = 0; valid_channels[i]; i++) {
- if (priv->channel == valid_channels[i])
- break;
- }
-
- if (valid_channels[i] == 0) {
- g_set_error (error,
- NM_SETTING_WIRELESS_ERROR,
- NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRELESS_CHANNEL);
- return FALSE;
- }
- } else if (!strcmp (priv->band, "bg") && priv->channel > 14) {
- g_set_error (error,
- NM_SETTING_WIRELESS_ERROR,
- NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRELESS_CHANNEL);
+ if (!nm_utils_wifi_is_channel_valid (priv->channel, priv->band)) {
+ g_set_error (error,
+ NM_SETTING_WIRELESS_ERROR,
+ NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY,
+ NM_SETTING_WIRELESS_CHANNEL);
return FALSE;
}
}
@@ -517,7 +508,7 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
return FALSE;
}
- if (priv->mac_address && priv->mac_address->len != ETH_ALEN) {
+ if (priv->device_mac_address && priv->device_mac_address->len != ETH_ALEN) {
g_set_error (error,
NM_SETTING_WIRELESS_ERROR,
NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY,
@@ -525,6 +516,14 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
return FALSE;
}
+ if (priv->cloned_mac_address && priv->cloned_mac_address->len != ETH_ALEN) {
+ g_set_error (error,
+ NM_SETTING_WIRELESS_ERROR,
+ NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY,
+ NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS);
+ return FALSE;
+ }
+
for (iter = priv->seen_bssids; iter; iter = iter->next) {
struct ether_addr addr;
@@ -568,8 +567,10 @@ finalize (GObject *object)
g_byte_array_free (priv->ssid, TRUE);
if (priv->bssid)
g_byte_array_free (priv->bssid, TRUE);
- if (priv->mac_address)
- g_byte_array_free (priv->mac_address, TRUE);
+ if (priv->device_mac_address)
+ g_byte_array_free (priv->device_mac_address, TRUE);
+ if (priv->cloned_mac_address)
+ g_byte_array_free (priv->cloned_mac_address, TRUE);
nm_utils_slist_free (priv->seen_bssids, g_free);
@@ -611,9 +612,14 @@ set_property (GObject *object, guint prop_id,
priv->tx_power = g_value_get_uint (value);
break;
case PROP_MAC_ADDRESS:
- if (priv->mac_address)
- g_byte_array_free (priv->mac_address, TRUE);
- priv->mac_address = g_value_dup_boxed (value);
+ if (priv->device_mac_address)
+ g_byte_array_free (priv->device_mac_address, TRUE);
+ priv->device_mac_address = g_value_dup_boxed (value);
+ break;
+ case PROP_CLONED_MAC_ADDRESS:
+ if (priv->cloned_mac_address)
+ g_byte_array_free (priv->cloned_mac_address, TRUE);
+ priv->cloned_mac_address = g_value_dup_boxed (value);
break;
case PROP_MTU:
priv->mtu = g_value_get_uint (value);
@@ -663,6 +669,9 @@ get_property (GObject *object, guint prop_id,
case PROP_MAC_ADDRESS:
g_value_set_boxed (value, nm_setting_wireless_get_mac_address (setting));
break;
+ case PROP_CLONED_MAC_ADDRESS:
+ g_value_set_boxed (value, nm_setting_wireless_get_cloned_mac_address (setting));
+ break;
case PROP_MTU:
g_value_set_uint (value, nm_setting_wireless_get_mtu (setting));
break;
@@ -829,21 +838,37 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_class)
* NMSettingWireless:mac-address:
*
* If specified, this connection will only apply to the WiFi device
- * whose MAC address matches. This property does not change the MAC address
- * of the device (known as MAC spoofing).
+ * whose permanent MAC address matches. This property does not change the MAC address
+ * of the device (i.e. MAC spoofing).
**/
g_object_class_install_property
(object_class, PROP_MAC_ADDRESS,
_nm_param_spec_specialized (NM_SETTING_WIRELESS_MAC_ADDRESS,
- "MAC Address",
+ "Device MAC Address",
"If specified, this connection will only apply to "
- "the WiFi device whose MAC address matches. "
+ "the WiFi device whose permanent MAC address matches. "
"This property does not change the MAC address "
- "of the device (known as MAC spoofing).",
+ "of the device (i.e. MAC spoofing).",
DBUS_TYPE_G_UCHAR_ARRAY,
G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
/**
+ * NMSettingWireless:cloned-mac-address:
+ *
+ * If specified, request that the Wifi device use this MAC address instead of its
+ * permanent MAC address. This is known as MAC cloning or spoofing.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_CLONED_MAC_ADDRESS,
+ _nm_param_spec_specialized (NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS,
+ "Spoof MAC Address",
+ "If specified, request that the WiFi device use "
+ "this MAC address instead of its permanent MAC address. "
+ "This is known as MAC cloning or spoofing.",
+ DBUS_TYPE_G_UCHAR_ARRAY,
+ G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+
+ /**
* NMSettingWireless:seen-bssids:
*
* A list of BSSIDs (each BSSID formatted as a MAC address like
diff --git a/libnm-util/nm-setting-wireless.h b/libnm-util/nm-setting-wireless.h
index da2ea5b6b0..2216a246af 100644
--- a/libnm-util/nm-setting-wireless.h
+++ b/libnm-util/nm-setting-wireless.h
@@ -19,7 +19,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2008 Red Hat, Inc.
+ * (C) Copyright 2007 - 2010 Red Hat, Inc.
* (C) Copyright 2007 - 2008 Novell, Inc.
*/
@@ -63,6 +63,7 @@ GQuark nm_setting_wireless_error_quark (void);
#define NM_SETTING_WIRELESS_RATE "rate"
#define NM_SETTING_WIRELESS_TX_POWER "tx-power"
#define NM_SETTING_WIRELESS_MAC_ADDRESS "mac-address"
+#define NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS "cloned-mac-address"
#define NM_SETTING_WIRELESS_MTU "mtu"
#define NM_SETTING_WIRELESS_SEEN_BSSIDS "seen-bssids"
#define NM_SETTING_WIRELESS_SEC "security"
@@ -93,6 +94,7 @@ const GByteArray *nm_setting_wireless_get_bssid (NMSettingWireless
guint32 nm_setting_wireless_get_rate (NMSettingWireless *setting);
guint32 nm_setting_wireless_get_tx_power (NMSettingWireless *setting);
const GByteArray *nm_setting_wireless_get_mac_address (NMSettingWireless *setting);
+const GByteArray *nm_setting_wireless_get_cloned_mac_address (NMSettingWireless *setting);
guint32 nm_setting_wireless_get_mtu (NMSettingWireless *setting);
const char *nm_setting_wireless_get_security (NMSettingWireless *setting);
diff --git a/libnm-util/nm-setting.c b/libnm-util/nm-setting.c
index 06994c73de..190199c121 100644
--- a/libnm-util/nm-setting.c
+++ b/libnm-util/nm-setting.c
@@ -620,6 +620,8 @@ nm_setting_to_string (NMSetting *setting)
is_serializable = prop_spec->flags & NM_SETTING_PARAM_SERIALIZE;
is_default = g_param_value_defaults (prop_spec, &value);
+ g_value_unset (&value);
+
if (is_serializable || is_default) {
g_string_append (string, " (");
diff --git a/libnm-util/nm-utils.c b/libnm-util/nm-utils.c
index 5a8a8800db..9c3662f47f 100644
--- a/libnm-util/nm-utils.c
+++ b/libnm-util/nm-utils.c
@@ -117,7 +117,7 @@ static const struct IsoLangToEncodings isoLangEntries2[] =
/* Arabic */
{ "ar", {"iso-8859-6", "windows-1256", NULL} },
- /* Balitc */
+ /* Baltic */
{ "et", {"iso-8859-4", "windows-1257", NULL} }, /* Estonian */
{ "lt", {"iso-8859-4", "windows-1257", NULL} }, /* Lithuanian */
{ "lv", {"iso-8859-4", "windows-1257", NULL} }, /* Latvian */
@@ -352,7 +352,7 @@ nm_utils_ssid_to_utf8 (const char *ssid, guint32 len)
/* Shamelessly ripped from the Linux kernel ieee80211 stack */
/**
- * nm_utils_deinit:
+ * nm_utils_is_empty_ssid:
* @ssid: pointer to a buffer containing the SSID data
* @len: length of the SSID data in @ssid
*
@@ -568,6 +568,24 @@ nm_utils_convert_strv_to_slist (const GValue *src_value, GValue *dest_value)
}
static void
+nm_utils_convert_strv_to_ptrarray (const GValue *src_value, GValue *dest_value)
+{
+ char **str;
+ GPtrArray *array = NULL;
+ guint i = 0;
+
+ g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), G_TYPE_STRV));
+
+ str = (char **) g_value_get_boxed (src_value);
+
+ array = g_ptr_array_sized_new (3);
+ while (str && str[i])
+ g_ptr_array_add (array, g_strdup (str[i++]));
+
+ g_value_take_boxed (dest_value, array);
+}
+
+static void
nm_utils_convert_strv_to_string (const GValue *src_value, GValue *dest_value)
{
GSList *strings;
@@ -594,6 +612,32 @@ nm_utils_convert_strv_to_string (const GValue *src_value, GValue *dest_value)
}
static void
+nm_utils_convert_string_array_to_string (const GValue *src_value, GValue *dest_value)
+{
+ GPtrArray *strings;
+ GString *printable;
+ int i;
+
+ g_return_if_fail (g_type_is_a (G_VALUE_TYPE (src_value), DBUS_TYPE_G_ARRAY_OF_STRING));
+
+ strings = (GPtrArray *) g_value_get_boxed (src_value);
+
+ printable = g_string_new ("[");
+ for (i = 0; strings && i < strings->len; i++) {
+ if (i > 0)
+ g_string_append (printable, ", '");
+ else
+ g_string_append_c (printable, '\'');
+ g_string_append (printable, g_ptr_array_index (strings, i));
+ g_string_append_c (printable, '\'');
+ }
+ g_string_append_c (printable, ']');
+
+ g_value_take_string (dest_value, printable->str);
+ g_string_free (printable, FALSE);
+}
+
+static void
nm_utils_convert_uint_array_to_string (const GValue *src_value, GValue *dest_value)
{
GArray *array;
@@ -1055,9 +1099,15 @@ _nm_utils_register_value_transformations (void)
g_value_register_transform_func (G_TYPE_STRV,
DBUS_TYPE_G_LIST_OF_STRING,
nm_utils_convert_strv_to_slist);
+ g_value_register_transform_func (G_TYPE_STRV,
+ DBUS_TYPE_G_ARRAY_OF_STRING,
+ nm_utils_convert_strv_to_ptrarray);
g_value_register_transform_func (DBUS_TYPE_G_LIST_OF_STRING,
G_TYPE_STRING,
nm_utils_convert_strv_to_string);
+ g_value_register_transform_func (DBUS_TYPE_G_ARRAY_OF_STRING,
+ G_TYPE_STRING,
+ nm_utils_convert_string_array_to_string);
g_value_register_transform_func (DBUS_TYPE_G_UINT_ARRAY,
G_TYPE_STRING,
nm_utils_convert_uint_array_to_string);
@@ -1219,14 +1269,24 @@ nm_utils_security_valid (NMUtilsSecurityType type,
if (!(wifi_caps & NM_WIFI_DEVICE_CAP_WPA))
return FALSE;
if (have_ap) {
- /* Ad-Hoc WPA APs won't necessarily have the PSK flag set */
- if ((ap_wpa & NM_802_11_AP_SEC_KEY_MGMT_PSK) || adhoc) {
- if ( (ap_wpa & NM_802_11_AP_SEC_PAIR_TKIP)
+ /* Ad-Hoc WPA APs won't necessarily have the PSK flag set, and
+ * they don't have any pairwise ciphers. */
+ if (adhoc) {
+ if ( (ap_wpa & NM_802_11_AP_SEC_GROUP_TKIP)
&& (wifi_caps & NM_WIFI_DEVICE_CAP_CIPHER_TKIP))
return TRUE;
- if ( (ap_wpa & NM_802_11_AP_SEC_PAIR_CCMP)
+ if ( (ap_wpa & NM_802_11_AP_SEC_GROUP_CCMP)
&& (wifi_caps & NM_WIFI_DEVICE_CAP_CIPHER_CCMP))
return TRUE;
+ } else {
+ if (ap_wpa & NM_802_11_AP_SEC_KEY_MGMT_PSK) {
+ if ( (ap_wpa & NM_802_11_AP_SEC_PAIR_TKIP)
+ && (wifi_caps & NM_WIFI_DEVICE_CAP_CIPHER_TKIP))
+ return TRUE;
+ if ( (ap_wpa & NM_802_11_AP_SEC_PAIR_CCMP)
+ && (wifi_caps & NM_WIFI_DEVICE_CAP_CIPHER_CCMP))
+ return TRUE;
+ }
}
return FALSE;
}
@@ -1235,14 +1295,22 @@ nm_utils_security_valid (NMUtilsSecurityType type,
if (!(wifi_caps & NM_WIFI_DEVICE_CAP_RSN))
return FALSE;
if (have_ap) {
- /* Ad-Hoc WPA APs won't necessarily have the PSK flag set */
- if ((ap_rsn & NM_802_11_AP_SEC_KEY_MGMT_PSK) || adhoc) {
- if ( (ap_rsn & NM_802_11_AP_SEC_PAIR_TKIP)
- && (wifi_caps & NM_WIFI_DEVICE_CAP_CIPHER_TKIP))
+ /* Ad-Hoc WPA APs won't necessarily have the PSK flag set, and
+ * they don't have any pairwise ciphers, nor any RSA flags yet. */
+ if (adhoc) {
+ if (wifi_caps & NM_WIFI_DEVICE_CAP_CIPHER_TKIP)
return TRUE;
- if ( (ap_rsn & NM_802_11_AP_SEC_PAIR_CCMP)
- && (wifi_caps & NM_WIFI_DEVICE_CAP_CIPHER_CCMP))
+ if (wifi_caps & NM_WIFI_DEVICE_CAP_CIPHER_CCMP)
return TRUE;
+ } else {
+ if (ap_rsn & NM_802_11_AP_SEC_KEY_MGMT_PSK) {
+ if ( (ap_rsn & NM_802_11_AP_SEC_PAIR_TKIP)
+ && (wifi_caps & NM_WIFI_DEVICE_CAP_CIPHER_TKIP))
+ return TRUE;
+ if ( (ap_rsn & NM_802_11_AP_SEC_PAIR_CCMP)
+ && (wifi_caps & NM_WIFI_DEVICE_CAP_CIPHER_CCMP))
+ return TRUE;
+ }
}
return FALSE;
}
@@ -2102,3 +2170,212 @@ out:
return ret;
}
+/* Band, channel/frequency stuff for wireless */
+struct cf_pair {
+ guint32 chan;
+ guint32 freq;
+};
+
+static struct cf_pair a_table[] = {
+ /* A band */
+ { 7, 5035 },
+ { 8, 5040 },
+ { 9, 5045 },
+ { 11, 5055 },
+ { 12, 5060 },
+ { 16, 5080 },
+ { 34, 5170 },
+ { 36, 5180 },
+ { 38, 5190 },
+ { 40, 5200 },
+ { 42, 5210 },
+ { 44, 5220 },
+ { 46, 5230 },
+ { 48, 5240 },
+ { 50, 5250 },
+ { 52, 5260 },
+ { 56, 5280 },
+ { 58, 5290 },
+ { 60, 5300 },
+ { 64, 5320 },
+ { 100, 5500 },
+ { 104, 5520 },
+ { 108, 5540 },
+ { 112, 5560 },
+ { 116, 5580 },
+ { 120, 5600 },
+ { 124, 5620 },
+ { 128, 5640 },
+ { 132, 5660 },
+ { 136, 5680 },
+ { 140, 5700 },
+ { 149, 5745 },
+ { 152, 5760 },
+ { 153, 5765 },
+ { 157, 5785 },
+ { 160, 5800 },
+ { 161, 5805 },
+ { 165, 5825 },
+ { 183, 4915 },
+ { 184, 4920 },
+ { 185, 4925 },
+ { 187, 4935 },
+ { 188, 4945 },
+ { 192, 4960 },
+ { 196, 4980 },
+ { 0, -1 }
+};
+
+static struct cf_pair bg_table[] = {
+ /* B/G band */
+ { 1, 2412 },
+ { 2, 2417 },
+ { 3, 2422 },
+ { 4, 2427 },
+ { 5, 2432 },
+ { 6, 2437 },
+ { 7, 2442 },
+ { 8, 2447 },
+ { 9, 2452 },
+ { 10, 2457 },
+ { 11, 2462 },
+ { 12, 2467 },
+ { 13, 2472 },
+ { 14, 2484 },
+ { 0, -1 }
+};
+
+/**
+ * nm_utils_wifi_freq_to_channel:
+ * @freq: frequency
+ *
+ * Utility function to translate a WiFi frequency to its corresponding channel.
+ *
+ * Returns: the channel represented by the frequency or 0
+ **/
+guint32
+nm_utils_wifi_freq_to_channel (guint32 freq)
+{
+ int i = 0;
+
+ if (freq > 4900) {
+ while (a_table[i].chan && (a_table[i].freq != freq))
+ i++;
+ return a_table[i].chan;
+ } else {
+ while (bg_table[i].chan && (bg_table[i].freq != freq))
+ i++;
+ return bg_table[i].chan;
+ }
+
+ return 0;
+}
+
+/**
+ * nm_utils_wifi_channel_to_freq:
+ * @channel: channel
+ * @band: frequency band for wireless ("a" or "bg")
+ *
+ * Utility function to translate a WiFi channel to its corresponding frequency.
+ *
+ * Returns: the frequency represented by the channel of the band,
+ * or -1 when the freq is invalid, or 0 when the band
+ * is invalid
+ **/
+guint32
+nm_utils_wifi_channel_to_freq (guint32 channel, const char *band)
+{
+ int i = 0;
+
+ if (!strcmp (band, "a")) {
+ while (a_table[i].chan && (a_table[i].chan != channel))
+ i++;
+ return a_table[i].freq;
+ } else if (!strcmp (band, "bg")) {
+ while (bg_table[i].chan && (bg_table[i].chan != channel))
+ i++;
+ return bg_table[i].freq;
+ }
+
+ return 0;
+}
+
+/**
+ * nm_utils_wifi_find_next_channel:
+ * @channel: current channel
+ * @direction: whether going downward (0 or less) or upward (1 or more)
+ * @band: frequency band for wireless ("a" or "bg")
+ *
+ * Utility function to find out next/previous WiFi channel for a channel.
+ *
+ * Returns: the next channel in the specified direction or 0
+ **/
+guint32
+nm_utils_wifi_find_next_channel (guint32 channel, int direction, char *band)
+{
+ size_t a_size = sizeof (a_table) / sizeof (struct cf_pair);
+ size_t bg_size = sizeof (bg_table) / sizeof (struct cf_pair);
+ struct cf_pair *pair = NULL;
+
+ if (!strcmp (band, "a")) {
+ if (channel < a_table[0].chan)
+ return a_table[0].chan;
+ if (channel > a_table[a_size - 2].chan)
+ return a_table[a_size - 2].chan;
+ pair = &a_table[0];
+ } else if (!strcmp (band, "bg")) {
+ if (channel < bg_table[0].chan)
+ return bg_table[0].chan;
+ if (channel > bg_table[bg_size - 2].chan)
+ return bg_table[bg_size - 2].chan;
+ pair = &bg_table[0];
+ } else {
+ g_assert_not_reached ();
+ return 0;
+ }
+
+ while (pair->chan) {
+ if (channel == pair->chan)
+ return channel;
+ if ((channel < (pair+1)->chan) && (channel > pair->chan)) {
+ if (direction > 0)
+ return (pair+1)->chan;
+ else
+ return pair->chan;
+ }
+ pair++;
+ }
+ return 0;
+}
+
+/**
+ * nm_utils_wifi_is_channel_valid:
+ * @channel: channel
+ * @band: frequency band for wireless ("a" or "bg")
+ *
+ * Utility function to verify WiFi channel validity.
+ *
+ * Returns: TRUE or FALSE
+ **/
+gboolean
+nm_utils_wifi_is_channel_valid (guint32 channel, const char *band)
+{
+ struct cf_pair *table = NULL;
+ int i = 0;
+
+ if (!strcmp (band, "a"))
+ table = a_table;
+ else if (!strcmp (band, "bg"))
+ table = bg_table;
+ else
+ return FALSE;
+
+ while (table[i].chan && (table[i].chan != channel))
+ i++;
+
+ if (table[i].chan != 0)
+ return TRUE;
+ else
+ return FALSE;
+}
+
diff --git a/libnm-util/nm-utils.h b/libnm-util/nm-utils.h
index 68501d53fb..6be91793eb 100644
--- a/libnm-util/nm-utils.h
+++ b/libnm-util/nm-utils.h
@@ -215,4 +215,9 @@ GByteArray *nm_utils_rsa_key_encrypt (const GByteArray *data,
G_END_DECLS
+guint32 nm_utils_wifi_freq_to_channel (guint32 freq);
+guint32 nm_utils_wifi_channel_to_freq (guint32 channel, const char *band);
+guint32 nm_utils_wifi_find_next_channel (guint32 channel, int direction, char *band);
+gboolean nm_utils_wifi_is_channel_valid (guint32 channel, const char *band);
+
#endif /* NM_UTILS_H */
diff --git a/libnm-util/tests/test-general.c b/libnm-util/tests/test-general.c
index 9530445959..e91e2b5ce2 100644
--- a/libnm-util/tests/test-general.c
+++ b/libnm-util/tests/test-general.c
@@ -28,6 +28,7 @@
#include "nm-setting-connection.h"
#include "nm-setting-vpn.h"
+#include "nm-setting-gsm.h"
#include "nm-setting-ip6-config.h"
#include "nm-dbus-glib-types.h"
@@ -222,6 +223,72 @@ test_setting_ip6_config_old_address_array (void)
g_object_unref (s_ip6);
}
+static void
+test_setting_gsm_apn_spaces (void)
+{
+ NMSettingGsm *s_gsm;
+ const char *tmp;
+
+ s_gsm = (NMSettingGsm *) nm_setting_gsm_new ();
+ ASSERT (s_gsm != NULL,
+ "gsm-apn-spaces",
+ "error creating GSM setting");
+
+ /* Trailing space */
+ g_object_set (s_gsm, NM_SETTING_GSM_APN, "foobar ", NULL);
+ tmp = nm_setting_gsm_get_apn (s_gsm);
+ ASSERT (tmp != NULL,
+ "gsm-apn-spaces", "empty APN");
+ ASSERT (strcmp (tmp, "foobar") == 0,
+ "gsm-apn-spaces", "unexpected APN");
+
+ /* Leading space */
+ g_object_set (s_gsm, NM_SETTING_GSM_APN, " foobar", NULL);
+ tmp = nm_setting_gsm_get_apn (s_gsm);
+ ASSERT (tmp != NULL,
+ "gsm-apn-spaces", "empty APN");
+ ASSERT (strcmp (tmp, "foobar") == 0,
+ "gsm-apn-spaces", "unexpected APN");
+}
+
+static void
+test_setting_gsm_apn_bad_chars (void)
+{
+ NMSettingGsm *s_gsm;
+
+ s_gsm = (NMSettingGsm *) nm_setting_gsm_new ();
+ ASSERT (s_gsm != NULL,
+ "gsm-apn-bad-chars",
+ "error creating GSM setting");
+
+ g_object_set (s_gsm, NM_SETTING_GSM_NUMBER, "*99#", NULL);
+
+ /* Make sure a valid APN works */
+ g_object_set (s_gsm, NM_SETTING_GSM_APN, "foobar123.-baz", NULL);
+ ASSERT (nm_setting_verify (NM_SETTING (s_gsm), NULL, NULL) == TRUE,
+ "gsm-apn-bad-chars", "unexpectedly invalid GSM setting");
+
+ /* Random invalid chars */
+ g_object_set (s_gsm, NM_SETTING_GSM_APN, "@#%$@#%@#%", NULL);
+ ASSERT (nm_setting_verify (NM_SETTING (s_gsm), NULL, NULL) == FALSE,
+ "gsm-apn-bad-chars", "unexpectedly valid GSM setting");
+
+ /* Spaces */
+ g_object_set (s_gsm, NM_SETTING_GSM_APN, "foobar baz", NULL);
+ ASSERT (nm_setting_verify (NM_SETTING (s_gsm), NULL, NULL) == FALSE,
+ "gsm-apn-bad-chars", "unexpectedly valid GSM setting");
+
+ /* 0 characters long */
+ g_object_set (s_gsm, NM_SETTING_GSM_APN, "", NULL);
+ ASSERT (nm_setting_verify (NM_SETTING (s_gsm), NULL, NULL) == FALSE,
+ "gsm-apn-bad-chars", "unexpectedly valid GSM setting");
+
+ /* 65-character long */
+ g_object_set (s_gsm, NM_SETTING_GSM_APN, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkl1", NULL);
+ ASSERT (nm_setting_verify (NM_SETTING (s_gsm), NULL, NULL) == FALSE,
+ "gsm-apn-bad-chars", "unexpectedly valid GSM setting");
+}
+
int main (int argc, char **argv)
{
GError *error = NULL;
@@ -237,6 +304,8 @@ int main (int argc, char **argv)
/* The tests */
test_setting_vpn_items ();
test_setting_ip6_config_old_address_array ();
+ test_setting_gsm_apn_spaces ();
+ test_setting_gsm_apn_bad_chars ();
base = g_path_get_basename (argv[0]);
fprintf (stdout, "%s: SUCCESS\n", base);
diff --git a/man/Makefile.am b/man/Makefile.am
index 097fdc6bea..973ef2c250 100644
--- a/man/Makefile.am
+++ b/man/Makefile.am
@@ -3,6 +3,7 @@ man_MANS = \
NetworkManager.conf.5 \
nm-system-settings.conf.5 \
nm-tool.1 \
+ nm-online.1 \
nmcli.1
EXTRA_DIST = \
@@ -11,6 +12,7 @@ EXTRA_DIST = \
NetworkManager.conf.5.in \
nm-system-settings.conf.5.in \
nm-tool.1.in \
+ nm-online.1.in \
nmcli.1.in
CLEANFILES = $(man_MANS)
diff --git a/man/NetworkManager.8.in b/man/NetworkManager.8.in
index a6be073170..4f700e9a38 100644
--- a/man/NetworkManager.8.in
+++ b/man/NetworkManager.8.in
@@ -52,6 +52,10 @@ A VPN connection has been deactivated.
.TP
.I "hostname"
The system hostname has been updated. Use gethostname(2) to retrieve it.
+.I "dhcp4\-change"
+The DHCPv4 lease has changed (renewed, rebound, etc).
+.I "dhcp6\-change"
+The DHCPv6 lease has changed (renewed, rebound, etc).
.SH OPTIONS
The following options are supported:
.TP
diff --git a/man/NetworkManager.conf.5.in b/man/NetworkManager.conf.5.in
index c3af611675..c866f1b337 100644
--- a/man/NetworkManager.conf.5.in
+++ b/man/NetworkManager.conf.5.in
@@ -2,7 +2,7 @@
.\"
.\" Copyright (C) 2010 Red Hat, Inc.
.\"
-.TH "NetworkManager.conf" "5" "1 February 2010" ""
+.TH "NetworkManager.conf" "5" "23 November 2010" ""
.SH NAME
NetworkManager.conf \- NetworkManager configuration file
.SH SYNOPSIS
@@ -44,12 +44,13 @@ Description of sections and available keys follows:
This section is the only mandatory section of the configuration file.
.TP
.B plugins=\fIplugin1\fP,\fIplugin2\fP, ...
-List plugin names separated by ','. Plugins are used to read/write system-wide
-connection. When more plugins are specified, the connections are read from all
-listed plugins. When writing connections, the plugins will be asked to save the
-connection in the order listed here. If the first plugin cannot write out that
-connection type, or can't write out any connections, the next plugin is tried.
-If none of the plugins can save the connection, the error is returned to the user.
+List system settings plugin names separated by ','. These plugins are used to
+read/write system-wide connection. When more plugins are specified, the
+connections are read from all listed plugins. When writing connections, the
+plugins will be asked to save the connection in the order listed here. If the
+first plugin cannot write out that connection type, or can't write out any
+connections, the next plugin is tried. If none of the plugins can save the
+connection, the error is returned to the user.
.P
.RS
.B "Available plugins:"
@@ -87,6 +88,38 @@ This key sets up what DHCP client NetworkManager will use. Presently
\fIdhclient\fP and \fIdhcpcd\fP are supported. The client configured here should
be available on your system too. If this key is missing, available DHCP clients
are looked for in this order: dhclient, dhcpcd.
+.TP
+.B no-auto-default=\fI<hwaddr>\fP,\fI<hwaddr>\fP,... | \fI*\fP
+Set devices for which NetworkManager shouldn't create default wired connection
+(Auto eth0). NetworkManager creates a default wired connection for any wired
+device that is managed and doesn't have a connection configured. List a device
+in this option to inhibit creating the default connection for the device.
+.br
+When the default wired connection is deleted or saved to a new persistent connection
+by a plugin, the MAC address of the wired device is automatically added to this list
+to prevent creating the default connection for that device again.
+Devices are specified by their MAC addresses, in lowercase. Multiple
+entries are separated by commas. You can use the glob character \fI*\fP instead
+of listing addresses to specify all devices.
+.br
+Examples:
+.nf
+no-auto-default=00:22:68:5c:5d:c4,00:1e:65:ff:aa:ee
+no-auto-default=*
+.fi
+.TP
+.B dns=\fIplugin1\fP,\fIplugin2\fP, ...
+List DNS plugin names separated by ','. DNS plugins are used to provide local
+caching nameserver functionality (which speeds up DNS queries) and to push
+DNS data to applications that use it.
+.P
+.RS
+.B "Available plugins:"
+.br
+.TP
+.I dnsmasq
+this plugin uses dnsmasq to provide local caching nameserver functionality.
+.RE
.SS [keyfile]
This section contains keyfile-specific options and thus only has effect when using \fIkeyfile\fP plugin.
.TP
@@ -96,10 +129,12 @@ Set a persistent hostname when using the \fIkeyfile\fP plugin.
.B unmanaged-devices=\fImac:<hwaddr>\fP;\fImac:<hwaddr>\fP;...
Set devices that should be ignored by NetworkManager when using the \fIkeyfile\fP
plugin. Devices are specified in the following format: "mac:<hwaddr>", where
-<hwaddr> is MAC address of the device to be ignored, in lowercase. Multiple
-entries are separated by a semicolon. Example:
+<hwaddr> is MAC address of the device to be ignored, in hex-digits-and-colons notation.
+Multiple entries are separated by a semicolon. No spaces are allowed in the value.
+.br
+Example:
.nf
-unmanaged-devices=mac:00:22:68:1c:59:b1;mac:00:1e:65:30:d1:c4
+unmanaged-devices=mac:00:22:68:1c:59:b1;mac:00:1E:65:30:D1:C4
.fi
.SS [ifupdown]
This section contains ifupdown-specific options and thus only has effect when using \fIifupdown\fP plugin.
diff --git a/man/nm-online.1.in b/man/nm-online.1.in
new file mode 100644
index 0000000000..2c8c9e9afc
--- /dev/null
+++ b/man/nm-online.1.in
@@ -0,0 +1,64 @@
+.\" nm-online (1) manual page
+.\"
+.\" This is free documentation; 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.
+.\"
+.\" The GNU General Public License's references to "object code"
+.\" and "executables" are to be interpreted as the output of any
+.\" document formatting or typesetting system, including
+.\" intermediate and printed output.
+.\"
+.\" This manual 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 manual; if not, write to the Free
+.\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111,
+.\" USA.
+.\"
+.\" Copyright (C) 2010 Red Hat, Inc.
+.\"
+.TH NM-ONLINE "1" "6 August 2010"
+
+.SH NAME
+nm-online \- ask NetworkManager whether the network is connected
+.SH SYNOPSIS
+.B nm-online
+.RI " [ " OPTIONS " ]
+
+.SH DESCRIPTION
+.B nm-online
+is a utility to find out whether we are online. It is done by asking
+NetworkManager about its status. When run, \fInm\-online\fP waits until
+NetworkManager reports an active connection, or specified timeout expires. On
+exit, the returned status code should be checked (see the return codes bellow).
+
+.SH OPTIONS
+.TP
+.B \-t, \-\-timeout
+Time to wait for a connection, in seconds. If not specified, the default is 30
+seconds.
+.TP
+.B \-x, \-\-exit
+Exit immediately if NetworkManager is not running or connecting.
+.TP
+.B \-q, \-\-quiet
+Don't print anything.
+
+.SH EXIT STATUS
+
+.IP "0" 4
+Success - already online or connection established within given timeout
+.IP "1" 4
+Offline or not online within given timeout
+.IP "2" 4
+Unspecified error
+
+.SH SEE ALSO
+.BR nm\-tool (1),
+.BR nmcli (1),
+.BR NetworkManager(8).
diff --git a/man/nmcli.1.in b/man/nmcli.1.in
index 056b5bdd40..44e9558ad2 100644
--- a/man/nmcli.1.in
+++ b/man/nmcli.1.in
@@ -22,7 +22,7 @@
.\"
.\" Copyright (C) 2010 Red Hat, Inc.
.\"
-.TH NMCLI "1" "14 April 2010"
+.TH NMCLI "1" "22 September 2010"
.SH NAME
nmcli \- command-line tool for controlling NetworkManager
@@ -131,7 +131,7 @@ NetworkManager
.br
Use this object to inquire and change state of NetworkManager.
.TP
-.SS \fICOMMAND\fP := { status | sleep | wakeup | wifi | wwan }
+.SS \fICOMMAND\fP := { status | enable | sleep | wifi | wwan }
.sp
.RS
.TP
@@ -145,28 +145,31 @@ command is provided to \fInm\fP object.
No simple reference.
.fi
.TP
-.B sleep
+.B enable [true|false]
.br
-Put NetworkManager to sleeping mode. Thus all interfaces that NetworkManager
-manages are deactivated.
+Get networking-enabled status or enable/disable networking by NetworkManager.
+All interfaces managed by NetworkManager are deactivated when networking has
+been disabled.
.br
.nf
\fBReference to D-Bus:\fP
interface: org.freedesktop.NetworkManager
-method: Sleep
-arguments: TRUE
+method: Enable
+arguments: TRUE or FALSE
.fi
.TP
-.B wakeup
+.B sleep [true|false]
.br
-Awake NetworkManager from sleep. When NetworkManager is awaken, devices are
-available to be activated.
+Get sleep status or put to sleep/awake NetworkManager. All interfaces managed by NetworkManager
+are deactivated when it falls asleep. This command is not meant for user to enable/disable
+networking, use \fIenable\fP for that. D-Bus \fISleep\fP method is designed
+to put NetworkManager to sleep or awake for suspending/resuming computer.
.br
.nf
\fBReference to D-Bus:\fP
interface: org.freedesktop.NetworkManager
method: Sleep
-arguments: FALSE
+arguments: TRUE or FALSE
.fi
.TP
.B wifi [on|off]
@@ -312,10 +315,54 @@ No simple reference.
.fi
.RE
+.SH ENVIRONMENT VARIABLES
+\fInmcli\fP's behavior is affected by the following environment variables.
+.IP "LC_ALL" 13
+If set to a non-empty string value, override the values of all the other
+internationalization variables.
+.IP "LC_MESSAGES" 13
+Determines the locale to be used for internationalised messages.
+.IP "LANG" 13
+Provides a default value for the internationalization variables that are unset
+or null.
+
+.RE
+Notes about localization:
+.br
+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
+Call \fInmcli\fP as \fBLC_ALL=C nmcli\fP to be sure the locale is
+set to "C" while executing in a script.
+
+\fBLC_ALL\fP, \fBLC_MESSAGES\fP, \fBLANG\fP variables specify the LC_MESSAGES
+locale category (in that order), which determines the language that \fInmcli\fP
+uses for messages. The "C" locale is used if none of these variables are set,
+and this locale uses English messages.
+
+.SH EXIT STATUS
+\fInmcli\fP exits with status 0 if it succeeds, a value greater than 0 is returned if errors occur.
+.IP "0" 4
+Success - indicates the operation succeeded
+.IP "1" 4
+Unknown or unspecified error
+.IP "2" 4
+Invalid user input, wrong \fInmcli\fP invocation
+.IP "3" 4
+Timeout expired (see commands with \fI\-\-timeout\fP option)
+.IP "4" 4
+Connection activation failed
+.IP "5" 4
+Connection deactivation failed
+.IP "6" 4
+Disconnecting device failed
+
.SH BUGS
There are probably some. If you find a bug, please report to
https://bugzilla.gnome.org/ \- product \fINetworkManager\fP.
.SH SEE ALSO
.BR nm\-tool (1),
+.BR nm\-online (1),
.BR NetworkManager(8).
diff --git a/po/LINGUAS b/po/LINGUAS
index 9494643213..f77d9c0d23 100644
--- a/po/LINGUAS
+++ b/po/LINGUAS
@@ -14,6 +14,7 @@ dz
el
en_CA
en_GB
+eo
es
et
eu
@@ -54,6 +55,7 @@ sq
sr
sr@latin
sv
+ta
te
th
uk
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 4d7faa5873..d4988c43ca 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -11,13 +11,16 @@ libnm-util/crypto.c
libnm-util/crypto_gnutls.c
libnm-util/crypto_nss.c
libnm-util/nm-utils.c
+policy/org.freedesktop.network-manager-settings.system.policy.in
+policy/org.freedesktop.NetworkManager.policy.in
src/nm-netlink-monitor.c
src/main.c
src/dhcp-manager/nm-dhcp-dhclient.c
+src/dhcp-manager/nm-dhcp-dhclient-utils.c
src/dhcp-manager/nm-dhcp-manager.c
src/logging/nm-logging.c
-src/named-manager/nm-named-manager.c
+src/dns-manager/nm-dns-manager.c
src/system-settings/nm-default-wired-connection.c
system-settings/plugins/ifcfg-rh/reader.c
-policy/org.freedesktop.network-manager-settings.system.policy.in
+system-settings/plugins/ifnet/connection_parser.c
diff --git a/po/ar.po b/po/ar.po
index 5796a044d7..f02091564b 100644
--- a/po/ar.po
+++ b/po/ar.po
@@ -67,11 +67,11 @@ msgid ""
"\n"
msgstr ""
-#: ../src/named-manager/nm-named-manager.c:117
+#: ../src/dns-manager/nm-dns-manager.c:117
msgid "NOTE: the glibc resolver does not support more than 3 nameservers."
msgstr ""
-#: ../src/named-manager/nm-named-manager.c:119
+#: ../src/dns-manager/nm-dns-manager.c:119
msgid "The nameservers listed below may not be recognized."
msgstr ""
diff --git a/po/as.po b/po/as.po
index 2f79166f07..46e41809b6 100644
--- a/po/as.po
+++ b/po/as.po
@@ -1590,11 +1590,11 @@ msgstr "অজà§à¦žà¦¾à¦¤ লগ সà§à¦¤à§° '%s'"
msgid "Unknown log domain '%s'"
msgstr "অজà§à¦žà¦¾à¦¤ লগ ডোমেইন '%s'"
-#: ../src/named-manager/nm-named-manager.c:343
+#: ../src/dns-manager/nm-dns-manager.c:343
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr "মন কৰিব: libc resolver ৰ দà§à¦¬à¦¾à§°à¦¾ ৩ তকৈ অধিক নামৰ সেৱক সমৰà§à¦¥à¦¿à¦¤ ন'হ'বও পাৰে ।"
-#: ../src/named-manager/nm-named-manager.c:345
+#: ../src/dns-manager/nm-dns-manager.c:345
msgid "The nameservers listed below may not be recognized."
msgstr "নিমà§à¦¨à¦²à¦¿à¦–িত নাম-সেৱকসমূহ চিনাকà§à¦¤ ন'হ'বও পাৰে ।"
diff --git a/po/be@latin.po b/po/be@latin.po
index ab4d7705b0..8737643d16 100644
--- a/po/be@latin.po
+++ b/po/be@latin.po
@@ -55,11 +55,11 @@ msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgstr ""
"Niapravilnaja opcyja. Kab pahladzieć Å›pis mahÄymych opcyj, užyj --help.\n"
-#: ../src/named-manager/nm-named-manager.c:218
+#: ../src/dns-manager/nm-dns-manager.c:218
msgid "NOTE: the glibc resolver does not support more than 3 nameservers."
msgstr "UVAHA: resolver glibc nie padtrymlivaje bolš za 3 servery nazvaŭ."
-#: ../src/named-manager/nm-named-manager.c:220
+#: ../src/dns-manager/nm-dns-manager.c:220
msgid "The nameservers listed below may not be recognized."
msgstr "NiemahÄyma paznać nastupnyja servery nazvaÅ­."
diff --git a/po/bg.po b/po/bg.po
index a423af318e..5a1e7c1c08 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -2,274 +2,1891 @@
# Copyright (C) 2005, 2007, 2008 Free Software Foundation, Inc.
# This file is distributed under the same license as the NetworkManager package.
# Alexander Shopov <ash@contact.bg>, 2005, 2007, 2008.
+# Damyan Ivanov <dam+gnome@ktnx.net>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: NetworkManager trunk\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-08-02 08:52+0300\n"
-"PO-Revision-Date: 2008-08-01 07:30+0300\n"
-"Last-Translator: Alexander Shopov <ash@contact.bg>\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=NetworkManager&component=general\n"
+"POT-Creation-Date: 2010-09-20 15:25+0000\n"
+"PO-Revision-Date: 2010-09-29 23:55+0300\n"
+"Last-Translator: Damyan Ivanov <dam+gnome@ktnx.net>\n"
"Language-Team: Bulgarian <dict@fsa-bg.org>\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"
-#: ../src/nm-netlink-monitor.c:193 ../src/nm-netlink-monitor.c:471
+#: ../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
+msgid "NAME"
+msgstr "ИМЕ"
+
+#. 0
+#: ../cli/src/connections.c:61 ../cli/src/connections.c:76
+msgid "UUID"
+msgstr "УÐИВЕРСÐЛЕРИДЕÐТИФИКÐТОР"
+
+#. 1
+#: ../cli/src/connections.c:62
+msgid "DEVICES"
+msgstr "УСТРОЙСТВÐ"
+
+#. 2
+#: ../cli/src/connections.c:63 ../cli/src/connections.c:78
+msgid "SCOPE"
+msgstr "ОБСЕГ"
+
+#. 3
+#: ../cli/src/connections.c:64
+msgid "DEFAULT"
+msgstr "ПОДРÐЗ."
+
+#. 4
+#: ../cli/src/connections.c:65
+msgid "DBUS-SERVICE"
+msgstr "УСЛУГÐ-DBUS"
+
+#. 5
+#: ../cli/src/connections.c:66
+msgid "SPEC-OBJECT"
+msgstr "СПЕЦИФИКÐЦ."
+
+#. 6
+#: ../cli/src/connections.c:67
+msgid "VPN"
+msgstr "ВЧМ"
+
+#. 1
+#. 0
+#. 1
+#: ../cli/src/connections.c:77 ../cli/src/devices.c:62 ../cli/src/devices.c:90
+msgid "TYPE"
+msgstr "ВИД"
+
+# Заглавие за датата и чаÑа, когато поÑледно е използвана връзката.
+# Използва Ñе вътрешниÑÑ‚ формат (Ñекунди от фикÑирана дата през 1700г).
+#. 3
+#: ../cli/src/connections.c:79
+msgid "TIMESTAMP"
+msgstr "ПОСЛ. ÐКТ."
+
+# Заглавие за датата и чаÑа, когато поÑледно е използвана връзката.
+# Използва Ñе локализиран формат за дата и чаÑ.
+#. 4
+#: ../cli/src/connections.c:80
+msgid "TIMESTAMP-REAL"
+msgstr "ПОСЛЕДÐО ÐКТИВÐÐ"
+
+#. 5
+#: ../cli/src/connections.c:81
+msgid "AUTOCONNECT"
+msgstr "ÐВТОМÐТИЧÐÐ"
+
+#. 6
+#: ../cli/src/connections.c:82
+msgid "READONLY"
+msgstr "СÐМО ЧЕТ."
+
+#. 7
+#: ../cli/src/connections.c:83
+msgid "DBUS-PATH"
+msgstr "ПЪТ-DBUS"
+
+#: ../cli/src/connections.c:159
#, c-format
-msgid "error processing netlink message: %s"
-msgstr "грешка при обработката на Ñледното Ñъобщение от Ð¼Ñ€ÐµÐ¶Ð¾Ð²Ð¸Ñ Ñлой: %s"
+msgid ""
+"Usage: nmcli con { COMMAND | help }\n"
+" COMMAND := { list | status | up | down }\n"
+"\n"
+" list [id <id> | uuid <id> | system | user]\n"
+" status\n"
+" up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout "
+"<timeout>]\n"
+" down id <id> | uuid <id>\n"
+msgstr ""
+"Употреба: nmcli con { КОМÐÐДР| help }\n"
+" КОМÐÐДР:= { 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"
-#: ../src/nm-netlink-monitor.c:250
+#: ../cli/src/connections.c:199 ../cli/src/connections.c:540
#, c-format
-msgid "unable to allocate netlink handle for monitoring link status: %s"
+msgid "Error: 'con list': %s"
+msgstr "Грешка при „con list“ – %s"
+
+#: ../cli/src/connections.c:201 ../cli/src/connections.c:542
+#, c-format
+msgid "Error: 'con list': %s; allowed fields: %s"
+msgstr "Грешка при „con list“ – %s; допуÑтимите полета Ñа %s"
+
+#: ../cli/src/connections.c:209
+#| msgid "Connection Established"
+msgid "Connection details"
+msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° връзката"
+
+#: ../cli/src/connections.c:384 ../cli/src/connections.c:605
+msgid "system"
+msgstr "ÑиÑтема"
+
+#: ../cli/src/connections.c:384 ../cli/src/connections.c:605
+msgid "user"
+msgstr "потреб."
+
+#: ../cli/src/connections.c:386
+msgid "never"
+msgstr "никога"
+
+#. "CAPABILITIES"
+#. Print header
+#. "WIFI-PROPERTIES"
+#: ../cli/src/connections.c:387 ../cli/src/connections.c:388
+#: ../cli/src/connections.c:606 ../cli/src/connections.c:609
+#: ../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
+msgid "yes"
+msgstr "да"
+
+#: ../cli/src/connections.c:387 ../cli/src/connections.c:388
+#: ../cli/src/connections.c:606 ../cli/src/connections.c:609
+#: ../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
+#| msgid "none"
+msgid "no"
+msgstr "не"
+
+#: ../cli/src/connections.c:461 ../cli/src/connections.c:504
+#| msgid "No active connections!"
+msgid "System connections"
+msgstr "СиÑтемни връзки"
+
+#: ../cli/src/connections.c:466 ../cli/src/connections.c:517
+#| msgid "VPN Connections"
+msgid "User connections"
+msgstr "ПотребителÑки връзки"
+
+#: ../cli/src/connections.c:478 ../cli/src/connections.c:1338
+#: ../cli/src/connections.c:1354 ../cli/src/connections.c:1363
+#: ../cli/src/connections.c:1374 ../cli/src/connections.c:1459
+#: ../cli/src/devices.c:962 ../cli/src/devices.c:972 ../cli/src/devices.c:1074
+#: ../cli/src/devices.c:1081
+#, c-format
+msgid "Error: %s argument is missing."
+msgstr "ЛипÑва аргумент за „%s“."
+
+#: ../cli/src/connections.c:491
+#, c-format
+msgid "Error: %s - no such connection."
+msgstr "ÐÑма връзка „%s“."
+
+#: ../cli/src/connections.c:523 ../cli/src/connections.c:1387
+#: ../cli/src/connections.c:1477 ../cli/src/devices.c:785
+#: ../cli/src/devices.c:852 ../cli/src/devices.c:986 ../cli/src/devices.c:1087
+#, c-format
+msgid "Unknown parameter: %s\n"
+msgstr "Ðепознат параметър „%s“\n"
+
+#: ../cli/src/connections.c:532
+#, c-format
+msgid "Error: no valid parameter specified."
+msgstr "ÐÑма указани параметри."
+
+#: ../cli/src/connections.c:547 ../cli/src/connections.c:1580
+#: ../cli/src/devices.c:1293 ../cli/src/network-manager.c:359
+#, c-format
+msgid "Error: %s."
+msgstr "Грешка – %s."
+
+#: ../cli/src/connections.c:653
+#, c-format
+msgid "Error: 'con status': %s"
+msgstr "Грешка при „con status“ – %s"
+
+#: ../cli/src/connections.c:655
+#, c-format
+msgid "Error: 'con status': %s; allowed fields: %s"
+msgstr "Грешка при „con status“ – %s. ДопуÑтимите полета Ñа %s"
+
+#: ../cli/src/connections.c:662
+#| msgid "No active connections!"
+msgid "Active connections"
+msgstr "Ðктивни връзки"
+
+#: ../cli/src/connections.c:1030
+#, c-format
+#| msgid "No active connections!"
+msgid "no active connection on device '%s'"
+msgstr "нÑма активна връзка, използваща уÑтройÑтвото „%s“"
+
+#: ../cli/src/connections.c:1038
+#, c-format
+#| msgid "No active connections!"
+msgid "no active connection or device"
+msgstr "нÑма активна връзка или уÑтройÑтво"
+
+#: ../cli/src/connections.c:1088
+#, c-format
+msgid "device '%s' not compatible with connection '%s'"
+msgstr "уÑтройÑтвото „%s“ не е ÑъвмеÑтимо Ñ Ð²Ñ€ÑŠÐ·ÐºÐ°Ñ‚Ð° „%s“"
+
+#: ../cli/src/connections.c:1090
+#, c-format
+#| msgid "Error retrieving VPN connection '%s'"
+msgid "no device found for connection '%s'"
+msgstr "не е открито уÑтройÑтво за връзката „%s“"
+
+#: ../cli/src/connections.c:1101
+msgid "activating"
+msgstr "включване"
+
+#: ../cli/src/connections.c:1103
+msgid "activated"
+msgstr "включена"
+
+#: ../cli/src/connections.c:1106 ../cli/src/connections.c:1129
+#: ../cli/src/connections.c:1162 ../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
+#| msgid "(unknown)"
+msgid "unknown"
+msgstr "неизвеÑтно"
+
+#: ../cli/src/connections.c:1115
+#| msgid "VPN connecting to '%s'"
+msgid "VPN connecting (prepare)"
+msgstr "Свързване към ВЧМ (подготовка)"
+
+#: ../cli/src/connections.c:1117
+msgid "VPN connecting (need authentication)"
+msgstr "Свързване към ВЧМ (нужна е идентификациÑ)"
+
+#: ../cli/src/connections.c:1119
+#| msgid "VPN Connections"
+msgid "VPN connecting"
+msgstr "Свързване към ВЧМ"
+
+#: ../cli/src/connections.c:1121
+msgid "VPN connecting (getting IP configuration)"
+msgstr "Свързване към ВЧМ (получаване на наÑтройките за IP)"
+
+#: ../cli/src/connections.c:1123
+#| msgid "Disconnected"
+msgid "VPN connected"
+msgstr "Свързан към ВЧМ"
+
+#: ../cli/src/connections.c:1125
+#| msgid "VPN Connect Failure"
+msgid "VPN connection failed"
+msgstr "ÐеуÑпешно Ñвързване към ВЧМ"
+
+#: ../cli/src/connections.c:1127
+#| msgid "Disconnected"
+msgid "VPN disconnected"
+msgstr "Връзката към ВЧМ е прекъÑната"
+
+#: ../cli/src/connections.c:1138
+#| msgid "(unknown)"
+msgid "unknown reason"
+msgstr "неизвеÑтна причина"
+
+#: ../cli/src/connections.c:1140
+msgid "none"
+msgstr "липÑва"
+
+#: ../cli/src/connections.c:1142
+#| msgid "The network connection has been disconnected."
+msgid "the user was disconnected"
+msgstr "потребителÑÑ‚ е изключен"
+
+#: ../cli/src/connections.c:1144
+#| msgid "The network connection has been disconnected."
+msgid "the base network connection was interrupted"
+msgstr "оÑновната връзка към мрежата е прекъÑната"
+
+#: ../cli/src/connections.c:1146
+msgid "the VPN service stopped unexpectedly"
+msgstr "уÑлугата за ВЧМ ÑÐ¿Ñ€Ñ Ð½ÐµÐ¾Ñ‡Ð°ÐºÐ²Ð°Ð½Ð¾"
+
+#: ../cli/src/connections.c:1148
+msgid "the VPN service returned invalid configuration"
+msgstr "уÑлугата за ВЧМ предоÑтави неправилни наÑтройки"
+
+#: ../cli/src/connections.c:1150
+msgid "the connection attempt timed out"
+msgstr "времето за Ñвързване изтече"
+
+#: ../cli/src/connections.c:1152
+msgid "the VPN service did not start in time"
+msgstr "уÑлугата за ВЧМ не уÑÐ¿Ñ Ð´Ð° тръгне в определеното време"
+
+#: ../cli/src/connections.c:1154
+msgid "the VPN service failed to start"
+msgstr "уÑлугата за ВЧМ не уÑÐ¿Ñ Ð´Ð° тръгне"
+
+#: ../cli/src/connections.c:1156
+msgid "no valid VPN secrets"
+msgstr "нÑма правилни пароли за ВЧМ"
+
+#: ../cli/src/connections.c:1158
+msgid "invalid VPN secrets"
+msgstr "неправилни пароли за ВЧМ"
+
+#: ../cli/src/connections.c:1160
+msgid "the connection was removed"
+msgstr "връзката е премахната"
+
+#: ../cli/src/connections.c:1174
+#, c-format
+msgid "state: %s\n"
+msgstr "ÑÑŠÑтоÑние: %s\n"
+
+#: ../cli/src/connections.c:1177 ../cli/src/connections.c:1203
+#, c-format
+#| msgid "Connection Established"
+msgid "Connection activated\n"
+msgstr "Връзката е активирана\n"
+
+#: ../cli/src/connections.c:1180
+#, c-format
+#| msgid "Connection to the wired network failed."
+msgid "Error: Connection activation failed."
+msgstr "Грешка при активиране на връзката."
+
+#: ../cli/src/connections.c:1199
+#, c-format
+msgid "state: %s (%d)\n"
+msgstr "ÑÑŠÑтоÑние: %s (%d)\n"
+
+#: ../cli/src/connections.c:1209
+#, c-format
+msgid "Error: Connection activation failed: %s."
+msgstr "Грешка при активиране на връзката: %s."
+
+#: ../cli/src/connections.c:1226 ../cli/src/devices.c:909
+#, c-format
+msgid "Error: Timeout %d sec expired."
+msgstr "ПроÑрочено е времето от %d Ñек."
+
+#: ../cli/src/connections.c:1269
+#, c-format
+msgid "Error: Connection activation failed: %s"
+msgstr "Грешка при активиране на връзката: %s"
+
+#: ../cli/src/connections.c:1283
+#, c-format
+#| msgid "Error retrieving VPN connection '%s'"
+msgid "Error: Obtaining active connection for '%s' failed."
+msgstr "Грешка при получаване на активната връзка за „%s“."
+
+#: ../cli/src/connections.c:1292
+#, c-format
+#| msgid "No active connections!"
+msgid "Active connection state: %s\n"
+msgstr "СъÑтоÑние на активната връзка: %s\n"
+
+#: ../cli/src/connections.c:1293
+#, c-format
+#| msgid "No active connections!"
+msgid "Active connection path: %s\n"
+msgstr "Път на активната връзка: %s\n"
+
+#: ../cli/src/connections.c:1347 ../cli/src/connections.c:1468
+#, c-format
+#| msgid "Error retrieving VPN connection '%s'"
+msgid "Error: Unknown connection: %s."
+msgstr "Ðепозната връзка „%s“."
+
+#: ../cli/src/connections.c:1382 ../cli/src/devices.c:980
+#, c-format
+msgid "Error: timeout value '%s' is not valid."
+msgstr "Ограничението на времето „%s“ не е правилно."
+
+#: ../cli/src/connections.c:1395 ../cli/src/connections.c:1485
+#, c-format
+msgid "Error: id or uuid has to be specified."
msgstr ""
-"не може да Ñе зададе модул в Ð¼Ñ€ÐµÐ¶Ð¾Ð²Ð¸Ñ Ñлой за наблюдение на ÑÑŠÑтоÑнието на "
-"връзката — %s"
+"Указването на идентификатор или универÑален идентификатор (uuid) е "
+"задължително."
-#: ../src/nm-netlink-monitor.c:260
+#: ../cli/src/connections.c:1415
#, c-format
-msgid "unable to connect to netlink for monitoring link status: %s"
+msgid "Error: No suitable device found: %s."
+msgstr "Ðе е намерено подходÑщо уÑтройÑтво – %s."
+
+#: ../cli/src/connections.c:1417
+#, c-format
+msgid "Error: No suitable device found."
+msgstr "Ðе е намерено подходÑщо уÑтройÑтво."
+
+#: ../cli/src/connections.c:1512
+#, c-format
+#| msgid "Connection Information"
+msgid "Warning: Connection not active\n"
+msgstr "Предупреждение: Връзката не е активна\n"
+
+#: ../cli/src/connections.c:1569
+#, c-format
+msgid "Error: 'con' command '%s' is not valid."
+msgstr "„con“ не поддържа команда „%s“."
+
+#: ../cli/src/connections.c:1605
+#, c-format
+msgid "Error: could not connect to D-Bus."
+msgstr "Грешка при Ñвързване Ñ D-Bus."
+
+#: ../cli/src/connections.c:1612
+#, c-format
+msgid "Error: Could not get system settings."
+msgstr "Грешка при получаване на ÑиÑтемните наÑтройки."
+
+#: ../cli/src/connections.c:1620
+#, c-format
+msgid "Error: Could not get user settings."
+msgstr "Грешка при получаване на потребителÑките наÑтройки."
+
+#: ../cli/src/connections.c:1630
+#, c-format
+msgid "Error: Can't obtain connections: settings services are not running."
+msgstr ""
+"Грешка при получаване на ÑпиÑъка Ñ Ð²Ñ€ÑŠÐ·ÐºÐ¸ – уÑлугите за наÑтройки не Ñа "
+"налични."
+
+#. 0
+#. 9
+#: ../cli/src/devices.c:61 ../cli/src/devices.c:89 ../cli/src/devices.c:184
+msgid "DEVICE"
+msgstr "УСТРОЙСТВО"
+
+#. 1
+#. 4
+#. 0
+#: ../cli/src/devices.c:63 ../cli/src/devices.c:93
+#: ../cli/src/network-manager.c:36
+msgid "STATE"
+msgstr "СЪСТОЯÐИЕ"
+
+#: ../cli/src/devices.c:72
+msgid "GENERAL"
+msgstr "ОБЩИ"
+
+#. 0
+#: ../cli/src/devices.c:73
+msgid "CAPABILITIES"
+msgstr "ВЪЗМОЖÐОСТИ"
+
+#. 1
+#: ../cli/src/devices.c:74
+msgid "WIFI-PROPERTIES"
+msgstr "БЕЗЖИЧÐИ-Ð¥ÐРÐКТЕРИСТИКИ"
+
+#. 2
+#: ../cli/src/devices.c:75
+#| msgid "PEAP"
+msgid "AP"
+msgstr "ТД"
+
+#. 3
+#: ../cli/src/devices.c:76
+msgid "WIRED-PROPERTIES"
+msgstr "ЖИЧÐИ-Ð¥ÐРÐКТЕРИСТИКИ"
+
+#. 4
+#: ../cli/src/devices.c:77
+msgid "IP4-SETTINGS"
+msgstr "ПÐРÐМЕТРИ-IP4"
+
+#. 5
+#: ../cli/src/devices.c:78
+msgid "IP4-DNS"
+msgstr "IP4-DNS"
+
+#. 6
+#: ../cli/src/devices.c:79
+msgid "IP6-SETTINGS"
+msgstr "ПÐРÐМЕТРИ-IP6"
+
+#. 7
+#: ../cli/src/devices.c:80
+msgid "IP6-DNS"
+msgstr "IP6-DNS"
+
+#. 2
+#: ../cli/src/devices.c:91
+msgid "DRIVER"
+msgstr "ДРÐЙВЕР"
+
+#. 3
+#: ../cli/src/devices.c:92
+msgid "HWADDR"
+msgstr "Ð¥ÐРДУЕРЕÐ-ÐДРЕС"
+
+#. 0
+#: ../cli/src/devices.c:102
+msgid "CARRIER-DETECT"
+msgstr "СИГÐÐЛ-ОТКР."
+
+#. 1
+#: ../cli/src/devices.c:103
+msgid "SPEED"
+msgstr "СКОРОСТ"
+
+#. 0
+#: ../cli/src/devices.c:112
+msgid "CARRIER"
+msgstr "СИГÐÐЛ"
+
+#. 0
+#: ../cli/src/devices.c:122
+msgid "WEP"
+msgstr "WEP"
+
+#. 1
+#: ../cli/src/devices.c:123
+msgid "WPA"
+msgstr "WPA"
+
+#. 2
+#: ../cli/src/devices.c:124
+#| msgid "WPA2 TKIP"
+msgid "WPA2"
+msgstr "WPA2"
+
+#. 3
+#: ../cli/src/devices.c:125
+msgid "TKIP"
+msgstr "TKIP"
+
+#. 4
+#: ../cli/src/devices.c:126
+#| msgid "AES-CCMP"
+msgid "CCMP"
+msgstr "CCMP"
+
+#. 0
+#: ../cli/src/devices.c:135 ../cli/src/devices.c:146
+msgid "ADDRESS"
+msgstr "ÐДРЕС"
+
+#. 1
+#: ../cli/src/devices.c:136 ../cli/src/devices.c:147
+msgid "PREFIX"
+msgstr "ПРЕФИКС"
+
+#. 2
+#: ../cli/src/devices.c:137 ../cli/src/devices.c:148
+msgid "GATEWAY"
+msgstr "ШЛЮЗ"
+
+#. 0
+#: ../cli/src/devices.c:157 ../cli/src/devices.c:166
+msgid "DNS"
+msgstr "DNS"
+
+#. 0
+#: ../cli/src/devices.c:175
+msgid "SSID"
+msgstr "SSID"
+
+#. 1
+#: ../cli/src/devices.c:176
+msgid "BSSID"
+msgstr "BSSID"
+
+#. 2
+#: ../cli/src/devices.c:177
+msgid "MODE"
+msgstr "РЕЖИМ"
+
+#. 3
+#: ../cli/src/devices.c:178
+msgid "FREQ"
+msgstr "ЧЕСТОТÐ"
+
+#. 4
+#: ../cli/src/devices.c:179
+msgid "RATE"
+msgstr "СКОРОСТ-ПРЕДÐÐ’ÐÐЕ"
+
+#. 5
+#: ../cli/src/devices.c:180
+msgid "SIGNAL"
+msgstr "СИГÐÐЛ"
+
+#. 6
+#: ../cli/src/devices.c:181
+msgid "SECURITY"
+msgstr "СИГУРÐОСТ"
+
+#. 7
+#: ../cli/src/devices.c:182
+msgid "WPA-FLAGS"
+msgstr "ФЛÐГОВЕ-WPA"
+
+#. 8
+#: ../cli/src/devices.c:183
+msgid "RSN-FLAGS"
+msgstr "ФЛÐГОВЕ-RSN"
+
+#. 10
+#: ../cli/src/devices.c:185
+msgid "ACTIVE"
+msgstr "ÐКТИВÐÐ"
+
+#: ../cli/src/devices.c:208
+#, c-format
+msgid ""
+"Usage: nmcli dev { COMMAND | help }\n"
+"\n"
+" COMMAND := { status | list | disconnect | wifi }\n"
+"\n"
+" status\n"
+" list [iface <iface>]\n"
+" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
+" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+"\n"
+msgstr ""
+"Употреба: nmcli dev { КОМÐÐДР| help }\n"
+"\n"
+" КОМÐÐДР:= { status | list | disconnect | wifi }\n"
+"\n"
+" status\n"
+" list [ iface <интерфейÑ>]\n"
+" disconnect iface <интерфейÑ> [--nowait] [--timeout <време>]\n"
+" wifi [list [iface <интерфейÑ>] [hwaddr <хардуерен адреÑ>]]\n"
+"\n"
+
+#: ../cli/src/devices.c:228
+msgid "unmanaged"
+msgstr "не Ñе управлÑва"
+
+#: ../cli/src/devices.c:230
+msgid "unavailable"
+msgstr "не е налично"
+
+# Ñтава дума за уÑтройÑтво
+# или за общото ÑÑŠÑтоÑние на N-M
+#: ../cli/src/devices.c:232 ../cli/src/network-manager.c:91
+#| msgid "Disconnected"
+msgid "disconnected"
+msgstr "без връзка"
+
+#: ../cli/src/devices.c:234
+msgid "connecting (prepare)"
+msgstr "Ñвързване (подготовка)"
+
+#: ../cli/src/devices.c:236
+#| msgid "Connection Information"
+msgid "connecting (configuring)"
+msgstr "Ñвързване (наÑтройка)"
+
+#: ../cli/src/devices.c:238
+msgid "connecting (need authentication)"
+msgstr "Ñвързване (нужна е идентификациÑ)"
+
+#: ../cli/src/devices.c:240
+#| msgid "Connection Information"
+msgid "connecting (getting IP configuration)"
+msgstr "Ñвързване (получаване на наÑтройките за IP)"
+
+# Ñтава дума и за конкретно уÑтройÑтво,
+# и за NM като цÑло
+#: ../cli/src/devices.c:242 ../cli/src/network-manager.c:89
+#| msgid "Disconnected"
+msgid "connected"
+msgstr "има връзка"
+
+#: ../cli/src/devices.c:244
+#| msgid "Connection Established"
+msgid "connection failed"
+msgstr "неуÑпешно Ñвързване"
+
+# вид уÑтройÑтво (жично, безжично, телефон, bluetooth) или вид мрежа (инфраÑтруктура, ad-hoc)
+#: ../cli/src/devices.c:267 ../cli/src/devices.c:424
+msgid "Unknown"
+msgstr "Ðепознат"
+
+# низът Ñе използва когато дадена безжична мрежа нÑма флагове от рода на pair_ccmp, pair_wpe140 и Ñ‚.н.
+#: ../cli/src/devices.c:299
+#| msgid "none"
+msgid "(none)"
+msgstr "(без)"
+
+#: ../cli/src/devices.c:324
+#, c-format
+msgid "%s: error converting IP4 address 0x%X"
+msgstr "%s: грешка при преобразуване на Ð°Ð´Ñ€ÐµÑ IP4 0x%X"
+
+#: ../cli/src/devices.c:393
+#, c-format
+msgid "%u MHz"
+msgstr "%u МХц"
+
+#: ../cli/src/devices.c:394
+#, c-format
+#| msgid "%d Mb/s"
+msgid "%u MB/s"
+msgstr "%u МБ/Ñ"
+
+#: ../cli/src/devices.c:403
+msgid "Encrypted: "
+msgstr "Шифроване: "
+
+#: ../cli/src/devices.c:408
+msgid "WEP "
+msgstr "WEP"
+
+#: ../cli/src/devices.c:410
+#| msgid "WPA TKIP"
+msgid "WPA "
+msgstr "WPA"
+
+#: ../cli/src/devices.c:412
+#| msgid "WPA2 TKIP"
+msgid "WPA2 "
+msgstr "WPA2"
+
+#: ../cli/src/devices.c:415
+#| msgid "WPA Enterprise"
+msgid "Enterprise "
+msgstr "ИндуÑÑ‚Ñ€."
+
+# Режима на мрежата
+#: ../cli/src/devices.c:424
+msgid "Ad-Hoc"
+msgstr "Специален"
+
+# Режима на мрежата
+#: ../cli/src/devices.c:424
+msgid "Infrastructure"
+msgstr "ИнфраÑтруктурен"
+
+#: ../cli/src/devices.c:486
+#, c-format
+msgid "Error: 'dev list': %s"
+msgstr "Грешка при „dev list“ – %s"
+
+#: ../cli/src/devices.c:488
+#, c-format
+msgid "Error: 'dev list': %s; allowed fields: %s"
+msgstr "Грешка при „dev list“ – %s; допуÑтимите полета Ñа %s"
+
+#: ../cli/src/devices.c:497
+msgid "Device details"
+msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° уÑтройÑтвото"
+
+# или е драйвер,
+# или е грешка при прекъÑване на връзката
+#: ../cli/src/devices.c:527 ../cli/src/devices.c:925
+msgid "(unknown)"
+msgstr "(нÑма информациÑ)"
+
+# хардуерен адреÑ
+#: ../cli/src/devices.c:528
+#| msgid "(unknown)"
+msgid "unknown)"
+msgstr "(нÑма информациÑ)"
+
+#: ../cli/src/devices.c:554
+#, c-format
+#| msgid "%d Mb/s"
+msgid "%u Mb/s"
+msgstr "%u Мб/Ñ"
+
+# дадено уÑтройÑтво има Ñигнал по жицата
+#. Print header
+#. "WIRED-PROPERTIES"
+#: ../cli/src/devices.c:627
+#| msgid "None"
+msgid "on"
+msgstr "Ñвързано"
+
+#: ../cli/src/devices.c:627
+msgid "off"
+msgstr "без връзка"
+
+#: ../cli/src/devices.c:808
+#, c-format
+msgid "Error: 'dev status': %s"
+msgstr "Грешка при „dev status“ – %s"
+
+#: ../cli/src/devices.c:810
+#, c-format
+msgid "Error: 'dev status': %s; allowed fields: %s"
+msgstr "Грешка при „dev status“ – %s; допуÑтимите полета Ñа %s"
+
+#: ../cli/src/devices.c:817
+msgid "Status of devices"
+msgstr "СъÑтоÑние на уÑтройÑтвата"
+
+#: ../cli/src/devices.c:845
+#, c-format
+msgid "Error: '%s' argument is missing."
+msgstr "ЛипÑва аргумент за „%s“."
+
+#: ../cli/src/devices.c:874 ../cli/src/devices.c:1013
+#: ../cli/src/devices.c:1136
+#, c-format
+msgid "Error: Device '%s' not found."
+msgstr "УÑтройÑтвото „%s“ не е намерено."
+
+#: ../cli/src/devices.c:897
+#, c-format
+msgid "Success: Device '%s' successfully disconnected."
+msgstr "Връзката на уÑтройÑтвото „%s“ е прекъÑната."
+
+#: ../cli/src/devices.c:922
+#, c-format
+msgid "Error: Device '%s' (%s) disconnecting failed: %s"
+msgstr "Грешка при прекъÑване на връзката на уÑтройÑтвото „%s“ (%s) – %s"
+
+#: ../cli/src/devices.c:930
+#, c-format
+msgid "Device state: %d (%s)\n"
+msgstr "СъÑтоÑние на уÑтройÑтвото: %d (%s)\n"
+
+#: ../cli/src/devices.c:994
+#, c-format
+msgid "Error: iface has to be specified."
+msgstr "Указването на „iface“ е задължително."
+
+#: ../cli/src/devices.c:1112
+#, c-format
+msgid "Error: 'dev wifi': %s"
+msgstr "Грешка при „dev wifi“ – %s"
+
+#: ../cli/src/devices.c:1114
+#, c-format
+msgid "Error: 'dev wifi': %s; allowed fields: %s"
+msgstr "Грешка при „dev wifi“ – %s; допуÑтимите полета Ñа %s"
+
+#: ../cli/src/devices.c:1121
+msgid "WiFi scan list"
+msgstr "Открити безжични мрежи"
+
+#: ../cli/src/devices.c:1156 ../cli/src/devices.c:1210
+#, c-format
+msgid "Error: Access point with hwaddr '%s' not found."
+msgstr "Ðе е открита точка за доÑтъп Ñ Ñ…Ð°Ñ€Ð´ÑƒÐµÑ€ÐµÐ½ Ð°Ð´Ñ€ÐµÑ â€ž%s“."
+
+#: ../cli/src/devices.c:1173
+#, c-format
+msgid "Error: Device '%s' is not a WiFi device."
+msgstr "„%s“ не е уÑтройÑтво за безжична мрежа."
+
+#: ../cli/src/devices.c:1237
+#, c-format
+msgid "Error: 'dev wifi' command '%s' is not valid."
+msgstr "„%s“ не е правилна команда за „dev wifi“."
+
+#: ../cli/src/devices.c:1284
+#, c-format
+msgid "Error: 'dev' command '%s' is not valid."
+msgstr "„%s“ не е правилна команда за „dev“."
+
+#: ../cli/src/network-manager.c:35
+msgid "RUNNING"
+msgstr "ВКЛЮЧЕÐ"
+
+#. 1
+#: ../cli/src/network-manager.c:37
+msgid "NET-ENABLED"
+msgstr "МРЕЖÐ-ВКЛЮЧ"
+
+#. 2
+#: ../cli/src/network-manager.c:38
+msgid "WIFI-HARDWARE"
+msgstr "БЕЗЖ. Ð¥ÐРДУЕР"
+
+#. 3
+#: ../cli/src/network-manager.c:39
+msgid "WIFI"
+msgstr "БЕЗЖ.МРЕЖÐ"
+
+#. 4
+#: ../cli/src/network-manager.c:40
+msgid "WWAN-HARDWARE"
+msgstr "МОБ. Ð¥ÐРДУЕР"
+
+#. 5
+#: ../cli/src/network-manager.c:41
+msgid "WWAN"
+msgstr "МОБ. МРЕЖÐ"
+
+#: ../cli/src/network-manager.c:64
+#, c-format
+msgid ""
+"Usage: nmcli nm { COMMAND | help }\n"
+"\n"
+" COMMAND := { status | enable | sleep | wifi | wwan }\n"
+"\n"
+" status\n"
+" enable [true|false]\n"
+" sleep [true|false]\n"
+" wifi [on|off]\n"
+" wwan [on|off]\n"
+"\n"
msgstr ""
-"не може да Ñе оÑъщеÑтви връзка Ñ Ð¼Ñ€ÐµÐ¶Ð¾Ð²Ð¸Ñ Ñлой за наблюдение на ÑÑŠÑтоÑнието "
-"на връзката — %s"
+"Употреба: nmcli nm { КОМÐÐДР| help }\n"
+"\n"
+" КОМÐÐДР:= { status | enable | sleep | wifi | wwan }\n"
+"\n"
+" status\n"
+" enable [true|false]\n"
+" sleep [true|false]\n"
+" wifi [on|off]\n"
+" wwan [on|off]\n"
+"\n"
-#: ../src/nm-netlink-monitor.c:268
+#: ../cli/src/network-manager.c:85
+msgid "asleep"
+msgstr "ÑпÑщ"
+
+#: ../cli/src/network-manager.c:87
+#| msgid "C_onnect"
+msgid "connecting"
+msgstr "Ñвързване"
+
+#: ../cli/src/network-manager.c:128
+#, c-format
+msgid "Error: 'nm status': %s"
+msgstr "Грешка при „nm status“ – %s"
+
+#: ../cli/src/network-manager.c:130
+#, c-format
+msgid "Error: 'nm status': %s; allowed fields: %s"
+msgstr "Грешка при „nm status“ – %s; допуÑтимите полета Ñа %s"
+
+#: ../cli/src/network-manager.c:137
+#| msgid "NetworkManager Applet"
+msgid "NetworkManager status"
+msgstr "СъÑтоÑние на NetworkManager"
+
+#. Print header
+#: ../cli/src/network-manager.c:144 ../cli/src/network-manager.c:145
+#: ../cli/src/network-manager.c:146 ../cli/src/network-manager.c:147
+#: ../cli/src/network-manager.c:154 ../cli/src/network-manager.c:247
+#: ../cli/src/network-manager.c:296 ../cli/src/network-manager.c:328
+msgid "enabled"
+msgstr "включено"
+
+#: ../cli/src/network-manager.c:144 ../cli/src/network-manager.c:145
+#: ../cli/src/network-manager.c:146 ../cli/src/network-manager.c:147
+#: ../cli/src/network-manager.c:154 ../cli/src/network-manager.c:247
+#: ../cli/src/network-manager.c:296 ../cli/src/network-manager.c:328
+msgid "disabled"
+msgstr "изключено"
+
+#: ../cli/src/network-manager.c:152
+msgid "running"
+msgstr "включен"
+
+#: ../cli/src/network-manager.c:152
+msgid "not running"
+msgstr "изключен"
+
+#: ../cli/src/network-manager.c:175
+#, c-format
+msgid "Error: Couldn't connect to system bus: %s"
+msgstr "Грешка при Ñвързване към ÑиÑтемната шина – %s"
+
+#: ../cli/src/network-manager.c:186
#, c-format
-msgid "unable to join netlink group for monitoring link status: %s"
+msgid "Error: Couldn't create D-Bus object proxy."
+msgstr "Грешка при Ñъздаване на обект-поÑредник за D-Bus."
+
+#: ../cli/src/network-manager.c:192
+#, c-format
+msgid "Error in sleep: %s"
+msgstr "Грешка при приÑпиване – %s"
+
+#: ../cli/src/network-manager.c:237 ../cli/src/network-manager.c:286
+#: ../cli/src/network-manager.c:318
+#, c-format
+msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
+msgstr "СтойноÑтта „%s“ за „--fields“ не е правилна; допуÑтимите полета Ñа %s"
+
+#: ../cli/src/network-manager.c:245
+#| msgid "Networking disabled"
+msgid "Networking enabled"
+msgstr "Мрежата е включена"
+
+#: ../cli/src/network-manager.c:256
+#, c-format
+msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
msgstr ""
-"не може да Ñе оÑъщеÑтви приÑъединÑване към групата на Ð¼Ñ€ÐµÐ¶Ð¾Ð²Ð¸Ñ Ñлой за "
-"наблюдение на ÑÑŠÑтоÑнието на връзката — %s"
+"ÐедопуÑтим аргумент на „enable“ – „%s“. Използвайте „true“ или „false“."
-#: ../src/nm-netlink-monitor.c:276
+#: ../cli/src/network-manager.c:265
#, c-format
-msgid "unable to allocate netlink link cache for monitoring link status: %s"
+msgid "Error: Sleeping status is not exported by NetworkManager."
+msgstr "NetworkManager не предоÑÑ‚Ð°Ð²Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° приÑпиването."
+
+#: ../cli/src/network-manager.c:273
+#, c-format
+msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
msgstr ""
-"не може да Ñе зададе временна памет в Ð¼Ñ€ÐµÐ¶Ð¾Ð²Ð¸Ñ Ñлой за наблюдение на "
-"ÑÑŠÑтоÑнието на връзката — %s"
+"„%s“ не е правилен параметър за „sleep“. Използвайте „true“ или „false“."
+
+#: ../cli/src/network-manager.c:294
+msgid "WiFi enabled"
+msgstr "Безжичната мрежа е включена"
-#: ../src/nm-netlink-monitor.c:494
+#: ../cli/src/network-manager.c:305
#, c-format
-msgid "error occurred while waiting for data on socket"
-msgstr "грешка при изчакване за данни през гнездо"
+msgid "Error: invalid 'wifi' parameter: '%s'."
+msgstr "„%s“ не е правилен параметър за „wifi“."
+
+#: ../cli/src/network-manager.c:326
+msgid "WWAN enabled"
+msgstr "Мобилната мрежа е включена"
-#: ../src/NetworkManager.c:250
+#: ../cli/src/network-manager.c:337
#, c-format
-msgid "Invalid option. Please use --help to see a list of valid options.\n"
-msgstr "Ðеправилна опциÑ. Ползвайте --help, за да видите ÑпиÑъка Ñ Ð¾Ð¿Ñ†Ð¸Ð¸.\n"
+msgid "Error: invalid 'wwan' parameter: '%s'."
+msgstr "„%s“ не е правилен параметър за „wwan“."
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:87
-msgid "# Created by NetworkManager\n"
-msgstr "# Създаден от NetworkManager\n"
+#: ../cli/src/network-manager.c:348
+#, c-format
+msgid "Error: 'nm' command '%s' is not valid."
+msgstr "„%s“ не е правилна команда за „nm“."
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:93
+#: ../cli/src/nmcli.c:69
#, c-format
msgid ""
-"# Merged from %s\n"
+"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] <field1,field2,...>|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 ""
-"# СлÑÑ‚ от %s\n"
+"Употреба: %s [ОПЦИИ] ОБЕКТ { КОМÐÐДР| help }\n"
+"\n"
+"ОПЦИИ\n"
+" -t[erse] Ñбит изход\n"
+" -p[retty] краÑив изход\n"
+" -m[ode] tabular|multiline режим на изхода\n"
+" -f[ields] <поле1,поле2,…>|all|common извеждани полета\n"
+" -е[scape] yes|no кодиране на разделителите между "
+"колоните в ÑтойноÑтите\n"
+" -v[ersion] показване на верÑиÑта на "
+"програмата\n"
+" -h[elp] показване на тази помощна "
+"информациÑ\n"
+"\n"
+"OBJECT\n"
+" nm ÑÑŠÑтоÑние на NetworkManager\n"
+" con връзки на NetworkManager\n"
+" dev уÑтройÑтва, управлÑвани от NetworkManager\n"
"\n"
-#: ../src/named-manager/nm-named-manager.c:117
-msgid "NOTE: the glibc resolver does not support more than 3 nameservers."
-msgstr "БЕЛЕЖКÐ: Ñтандартно glibc поддържа макÑимум 3 Ñървъра за имена."
+#: ../cli/src/nmcli.c:113
+#, c-format
+msgid "Error: Object '%s' is unknown, try 'nmcli help'."
+msgstr "Обектът „%s“ е непознат. Опитайте Ñ â€žnmcli help“."
-#: ../src/named-manager/nm-named-manager.c:119
-msgid "The nameservers listed below may not be recognized."
-msgstr "Сървърите за имена отдолу могат да не бъдат разпознати."
+#: ../cli/src/nmcli.c:143
+#, c-format
+msgid "Error: Option '--terse' is specified the second time."
+msgstr "ОпциÑта „--terse“ е указана втори път."
-#: ../system-settings/src/main.c:365
+#: ../cli/src/nmcli.c:148
#, c-format
-msgid "Auto %s"
-msgstr "Ðвтоматично %s"
+msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
+msgstr "ОпциÑта „--terse“ е неÑъвмеÑтима Ñ â€ž--pretty“."
-#: ../libnm-util/crypto.c:125
+#: ../cli/src/nmcli.c:156
+#, c-format
+msgid "Error: Option '--pretty' is specified the second time."
+msgstr "ОпциÑта „--pretty“ е указана втори път."
+
+#: ../cli/src/nmcli.c:161
+#, c-format
+msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
+msgstr "ОпциÑта „--pretty“ е неÑъвмеÑтима Ñ â€ž--terse“."
+
+#: ../cli/src/nmcli.c:171 ../cli/src/nmcli.c:187
+#, c-format
+msgid "Error: missing argument for '%s' option."
+msgstr "ЛипÑва аргумент на опциÑта „%s“."
+
+#: ../cli/src/nmcli.c:180 ../cli/src/nmcli.c:196
+#, c-format
+msgid "Error: '%s' is not valid argument for '%s' option."
+msgstr "„%s“ не е правилен аргумент за опциÑта „%s“."
+
+#: ../cli/src/nmcli.c:203
+#, c-format
+msgid "Error: fields for '%s' options are missing."
+msgstr "ЛипÑват полета за опциите „%s“."
+
+#: ../cli/src/nmcli.c:209
+#, c-format
+msgid "nmcli tool, version %s\n"
+msgstr "nmcli, верÑÐ¸Ñ %s\n"
+
+#: ../cli/src/nmcli.c:215
+#, c-format
+msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
+msgstr "ОпциÑта „%s“ е непозната. Опитайте Ñ â€žnmcli -help“."
+
+#: ../cli/src/nmcli.c:234
+#, c-format
+msgid "Caught signal %d, shutting down..."
+msgstr "Получен е Ñигнал %d, Ñпиране…"
+
+#: ../cli/src/nmcli.c:259
+#, c-format
+msgid "Error: Could not connect to NetworkManager."
+msgstr "Грешка при Ñвързване Ñ NetworkManager."
+
+#: ../cli/src/nmcli.c:275
+msgid "Success"
+msgstr "УÑпех"
+
+#: ../cli/src/settings.c:411
+#, c-format
+msgid "%d (hex-ascii-key)"
+msgstr "%d (ключ в шеÑтнайÑетичен запиÑ)"
+
+#: ../cli/src/settings.c:413
+#, c-format
+#| msgid "WEP 128-bit Passphrase"
+msgid "%d (104/128-bit passphrase)"
+msgstr "%d (104/128 битова парола)"
+
+#: ../cli/src/settings.c:416
+#, c-format
+#| msgid "(unknown)"
+msgid "%d (unknown)"
+msgstr "%d (неизвеÑтен)"
+
+#: ../cli/src/settings.c:442
+#| msgid "(unknown)"
+msgid "0 (unknown)"
+msgstr "0 (неизвеÑтно)"
+
+#: ../cli/src/settings.c:448
+msgid "any, "
+msgstr "вÑÑка, "
+
+#: ../cli/src/settings.c:450
+msgid "900 MHz, "
+msgstr "900 МХц, "
+
+#: ../cli/src/settings.c:452
+msgid "1800 MHz, "
+msgstr "1800 МХц, "
+
+#: ../cli/src/settings.c:454
+msgid "1900 MHz, "
+msgstr "1900 МХц, "
+
+#: ../cli/src/settings.c:456
+msgid "850 MHz, "
+msgstr "850 МХц, "
+
+#: ../cli/src/settings.c:458
+msgid "WCDMA 3GPP UMTS 2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 2100 МХц, "
+
+#: ../cli/src/settings.c:460
+msgid "WCDMA 3GPP UMTS 1800 MHz, "
+msgstr "WCDMA 3GPP UMTS 1800 МХц, "
+
+#: ../cli/src/settings.c:462
+msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700/2100 МХц, "
+
+#: ../cli/src/settings.c:464
+msgid "WCDMA 3GPP UMTS 800 MHz, "
+msgstr "WCDMA 3GPP UMTS 800 МХц, "
+
+#: ../cli/src/settings.c:466
+msgid "WCDMA 3GPP UMTS 850 MHz, "
+msgstr "WCDMA 3GPP UMTS 850 МХц, "
+
+#: ../cli/src/settings.c:468
+msgid "WCDMA 3GPP UMTS 900 MHz, "
+msgstr "WCDMA 3GPP UMTS 900 МХц, "
+
+#: ../cli/src/settings.c:470
+msgid "WCDMA 3GPP UMTS 1700 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700 МХц, "
+
+#: ../cli/src/settings.c:554 ../cli/src/settings.c:721
+msgid "auto"
+msgstr "автоматично"
+
+#: ../cli/src/settings.c:716 ../cli/src/settings.c:719
+#: ../cli/src/settings.c:720 ../cli/src/utils.c:172
+msgid "not set"
+msgstr "не е зададено"
+
+#: ../cli/src/utils.c:124
+#, c-format
+msgid "field '%s' has to be alone"
+msgstr "полето „%s“ Ñ‚Ñ€Ñбва да е единÑтвено"
+
+#: ../cli/src/utils.c:127
+#, c-format
+msgid "invalid field '%s'"
+msgstr "грешно поле „%s“"
+
+#: ../cli/src/utils.c:146
+#, c-format
+msgid "Option '--terse' requires specifying '--fields'"
+msgstr "ОпциÑта „--terse“ изиÑква указването на „--fields“"
+
+#: ../cli/src/utils.c:150
+#, c-format
+msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
+msgstr "ОпциÑта „--terse“ изиÑква конкретни ÑтойноÑти за „--fields“, а не „%s“"
+
+#: ../libnm-util/crypto.c:120
#, c-format
msgid "PEM key file had no end tag '%s'."
msgstr "КрайниÑÑ‚ етикет „%s“ липÑва в Ñертификат във формат PEM."
-#: ../libnm-util/crypto.c:135
+#: ../libnm-util/crypto.c:130
#, c-format
msgid "Doesn't look like a PEM private key file."
msgstr "Това не изглежда да е Ñертификат във формат PEM Ñ Ñ‡Ð°Ñтен ключ."
-#: ../libnm-util/crypto.c:143
+#: ../libnm-util/crypto.c:138
#, c-format
msgid "Not enough memory to store PEM file data."
msgstr ""
"ÐÑма доÑтатъчно памет за запазването на данните от Ñертификата във формат "
"PEM."
-#: ../libnm-util/crypto.c:159
+#: ../libnm-util/crypto.c:154
#, c-format
msgid "Malformed PEM file: Proc-Type was not first tag."
msgstr ""
-"Ðеправилен Ñертификат във формат PEM: първиÑÑ‚ етикет не беше „Proc-Type“."
+"Ðеправилен Ñертификат във формат PEM – първиÑÑ‚ етикет не е „Proc-Type“."
-#: ../libnm-util/crypto.c:167
+#: ../libnm-util/crypto.c:162
#, c-format
msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
msgstr ""
"Ðеправилен Ñертификат във формат PEM: непознат етикет „Proc-Type“ — „%s“."
-#: ../libnm-util/crypto.c:177
+#: ../libnm-util/crypto.c:172
#, c-format
msgid "Malformed PEM file: DEK-Info was not the second tag."
-msgstr ""
-"Ðеправилен Ñертификат във формат PEM: вториÑÑ‚ етикет не беше „DEK-Info“."
+msgstr "Ðеправилен Ñертификат във формат PEM – вториÑÑ‚ етикет не е „DEK-Info“."
-#: ../libnm-util/crypto.c:188
+#: ../libnm-util/crypto.c:183
#, c-format
msgid "Malformed PEM file: no IV found in DEK-Info tag."
msgstr ""
-"Ðеправилен Ñертификат във формат PEM: липÑва първоначален вектор в етикета "
-"„DEK-Info“."
+"Ðеправилен Ñертификат във формат PEM – в етикета „DEK-Info“ липÑва начален "
+"вектор."
-#: ../libnm-util/crypto.c:195
+#: ../libnm-util/crypto.c:190
#, c-format
msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
msgstr ""
-"Ðеправилен Ñертификат във формат PEM: неправилен първоначален вектор в "
-"етикета „DEK-Info“."
+"Ðеправилен Ñертификат във формат PEM – неправилен начален вектор в етикета "
+"„DEK-Info“."
-#: ../libnm-util/crypto.c:208
+#: ../libnm-util/crypto.c:203
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
msgstr ""
-"Ðеправилен Ñертификат във формат PEM: непознат шифър за чаÑтен ключ „%s“."
+"Ðеправилен Ñертификат във формат PEM – непознат шифър „%s“ за чаÑÑ‚Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡."
-#: ../libnm-util/crypto.c:227
+#: ../libnm-util/crypto.c:222
#, c-format
msgid "Could not decode private key."
-msgstr "ЧаÑтниÑÑ‚ ключ не може да бъде декодиран."
+msgstr "Грешка при декодиране на чаÑÑ‚Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡."
-#: ../libnm-util/crypto.c:271
+#: ../libnm-util/crypto.c:267
#, c-format
msgid "PEM certificate '%s' had no end tag '%s'."
-msgstr "КрайниÑÑ‚ етикет „1$%s“ липÑва в Ñертификата във формат PEM — „2$%s“."
+msgstr "КрайниÑÑ‚ етикет „%2$s“ липÑва в Ñертификата във формат PEM — „%1$s“."
-#: ../libnm-util/crypto.c:281
+#: ../libnm-util/crypto.c:277
#, c-format
msgid "Failed to decode certificate."
-msgstr "Сертификатът не може да бъде декодиран."
+msgstr "Грешка при декодиране на Ñертификата."
-#: ../libnm-util/crypto.c:290 ../libnm-util/crypto.c:298
+#: ../libnm-util/crypto.c:286
#, c-format
msgid "Not enough memory to store certificate data."
-msgstr "ÐÑма памет за запазването на данните от Ñертификат."
+msgstr "ÐÑма доÑтатъчно памет за ÑъхранÑване на данните от Ñертификата."
-#: ../libnm-util/crypto.c:328
+#: ../libnm-util/crypto.c:294
+#, c-format
+#| msgid "Not enough memory to store PEM file data."
+msgid "Not enough memory to store file data."
+msgstr "ÐÑма доÑтатъчно памет за ÑъхранÑване на данните от файла."
+
+#: ../libnm-util/crypto.c:324
#, c-format
msgid "IV must be an even number of bytes in length."
-msgstr "ÐачалниÑÑ‚ вектор Ñ‚Ñ€Ñбва да е четен брой байта на дължина."
+msgstr "ÐачалниÑÑ‚ вектор Ñ‚Ñ€Ñбва да е Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€ четен брой байта."
-#: ../libnm-util/crypto.c:337
+#: ../libnm-util/crypto.c:333
#, c-format
msgid "Not enough memory to store the IV."
-msgstr "ÐÑма доÑтатъчно памет за запазването на Ð½Ð°Ñ‡Ð°Ð»Ð½Ð¸Ñ Ð²ÐµÐºÑ‚Ð¾Ñ€."
+msgstr "ÐÑма доÑтатъчно памет за ÑъхранÑване на Ð½Ð°Ñ‡Ð°Ð»Ð½Ð¸Ñ Ð²ÐµÐºÑ‚Ð¾Ñ€."
-#: ../libnm-util/crypto.c:348
+#: ../libnm-util/crypto.c:344
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "ÐачалниÑÑ‚ вектор Ñъдържа низ, който не е шеÑтнайÑетично чиÑло."
-#: ../libnm-util/crypto.c:386 ../libnm-util/crypto_gnutls.c:126
-#: ../libnm-util/crypto_nss.c:136
+#: ../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
#, c-format
msgid "Private key cipher '%s' was unknown."
msgstr "Шифърът за чаÑтен ключ „%s“ е непознат."
-#: ../libnm-util/crypto.c:395
+#: ../libnm-util/crypto.c:391
+#, c-format
+#| msgid "Not enough memory to store decrypted private key."
+msgid "Not enough memory to decrypt private key."
+msgstr "ÐÑма доÑтатъчно памет за разшифроване на чаÑÑ‚Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡."
+
+#: ../libnm-util/crypto.c:511
#, c-format
-msgid "Not enough memory to create private key decryption key."
-msgstr "ÐÑма доÑтатъчно памет за Ñъздаването на чаÑтен ключ за дешифриране."
+#| msgid "Failed to decrypt the private key: %d."
+msgid "Unable to determine private key type."
+msgstr "Видът на чаÑÑ‚Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡ не може да Ñе определи."
-#: ../libnm-util/crypto.c:513
+#: ../libnm-util/crypto.c:530
#, c-format
msgid "Not enough memory to store decrypted private key."
-msgstr "ÐÑма доÑтатъчно памет за запазването на чаÑтен ключ за дешифриране."
+msgstr "ÐÑма доÑтатъчно памет за ÑъхранÑване на Ñ€Ð°Ð·ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ‡Ð°Ñтен ключ."
-#: ../libnm-util/crypto_gnutls.c:73
+#: ../libnm-util/crypto_gnutls.c:49
+#| msgid "Failed to initialize the decryption context."
+msgid "Failed to initialize the crypto engine."
+msgstr "Грешка при инициализиране на модула за шифроване."
+
+#: ../libnm-util/crypto_gnutls.c:93
#, c-format
msgid "Failed to initialize the MD5 engine: %s / %s."
-msgstr "Модулът за MD5 не може да бъде инициализиран: %s / %s."
+msgstr "Грешка при инициализиране на модула за MD5 – %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:156
+#, c-format
+msgid "Invalid IV length (must be at least %zd)."
+msgstr "Ðеправилен начален вектор (Ñ‚Ñ€Ñбва да е поне %zd)."
-#: ../libnm-util/crypto_gnutls.c:135 ../libnm-util/crypto_nss.c:145
+#: ../libnm-util/crypto_gnutls.c:165 ../libnm-util/crypto_nss.c:188
#, c-format
msgid "Not enough memory for decrypted key buffer."
-msgstr "ÐÑма доÑтатъчно памет за буфера за дешифриране."
+msgstr "ÐÑма доÑтатъчно памет за буфера за Ñ€Ð°Ð·ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡."
-#: ../libnm-util/crypto_gnutls.c:143
+#: ../libnm-util/crypto_gnutls.c:173
#, c-format
msgid "Failed to initialize the decryption cipher context: %s / %s."
-msgstr "КонтекÑÑ‚ÑŠÑ‚ за дешифриране не може да бъде инициализиран: %s / %s."
+msgstr "Грешка при инициализиране на контекÑта за разшифроване – %s / %s."
-#: ../libnm-util/crypto_gnutls.c:152
+#: ../libnm-util/crypto_gnutls.c:182
#, c-format
msgid "Failed to set symmetric key for decryption: %s / %s."
-msgstr "СиметричниÑÑ‚ ключ за дешифриране не може да бъде зададен: %s / %s."
+msgstr "Грешка при задаване на ÑÐ¸Ð¼ÐµÑ‚Ñ€Ð¸Ñ‡Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡ за разшифроване – %s / %s."
-#: ../libnm-util/crypto_gnutls.c:161
+#: ../libnm-util/crypto_gnutls.c:191
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
-msgstr "ÐачалниÑÑ‚ вектор за дешифриране не може да бъде зададен: %s / %s."
+msgstr "Грешка при задаване на Ð½Ð°Ñ‡Ð°Ð»Ð½Ð¸Ñ Ð²ÐµÐºÑ‚Ð¾Ñ€ за разшифроване – %s / %s."
-#: ../libnm-util/crypto_gnutls.c:170
+#: ../libnm-util/crypto_gnutls.c:200
#, c-format
msgid "Failed to decrypt the private key: %s / %s."
-msgstr "ЧаÑтниÑÑ‚ ключ не може да бъде дешифриран: %s / %s."
+msgstr "Грешка при разшифроване на чаÑÑ‚Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡ – %s / %s."
-#: ../libnm-util/crypto_gnutls.c:208
+#: ../libnm-util/crypto_gnutls.c:210 ../libnm-util/crypto_nss.c:267
+#, c-format
+#| msgid "Failed to decrypt the private key: %d."
+msgid "Failed to decrypt the private key: unexpected padding length."
+msgstr ""
+"Грешка при разшифроване на чаÑÑ‚Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡ – неочаквана дължина на "
+"подравнÑването."
+
+#: ../libnm-util/crypto_gnutls.c:221 ../libnm-util/crypto_nss.c:278
+#, c-format
+#| msgid "Failed to decrypt the private key: %d."
+msgid "Failed to decrypt the private key."
+msgstr "Грешка при разшифроване на чаÑÑ‚Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡."
+
+#: ../libnm-util/crypto_gnutls.c:286 ../libnm-util/crypto_nss.c:356
+#, c-format
+msgid "Could not allocate memory for encrypting."
+msgstr "ÐÑма доÑтатъчно памет за буфер при шифроване."
+
+#: ../libnm-util/crypto_gnutls.c:294
+#, c-format
+#| msgid "Failed to initialize the decryption cipher context: %s / %s."
+msgid "Failed to initialize the encryption cipher context: %s / %s."
+msgstr "Грешка при инициализиране на контекÑта за шифроване – %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:303
+#, c-format
+#| msgid "Failed to set symmetric key for decryption: %s / %s."
+msgid "Failed to set symmetric key for encryption: %s / %s."
+msgstr "Грешка при задаване на ÑÐ¸Ð¼ÐµÑ‚Ñ€Ð¸Ñ‡Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡ за шифроване – %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:313
+#, c-format
+#| msgid "Failed to set IV for decryption: %s / %s."
+msgid "Failed to set IV for encryption: %s / %s."
+msgstr "Грешка при задаване на Ð½Ð°Ñ‡Ð°Ð»Ð½Ð¸Ñ Ð²ÐµÐºÑ‚Ð¾Ñ€ за шифроване – %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:322
+#, c-format
+#| msgid "Failed to decrypt the private key: %s / %s."
+msgid "Failed to encrypt the data: %s / %s."
+msgstr "Грешка при шифроване на данните – %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:362
#, c-format
msgid "Error initializing certificate data: %s"
-msgstr "Грешка при инициализиране на данните от Ñертификата: %s"
+msgstr "Грешка при инициализиране на данните от Ñертификата – %s"
-#: ../libnm-util/crypto_gnutls.c:220
+#: ../libnm-util/crypto_gnutls.c:384
#, c-format
msgid "Couldn't decode certificate: %s"
-msgstr "Сертификатът не може да бъде декодиран: %s"
+msgstr "Грешка при декодиране на Ñертификата – %s"
+
+#: ../libnm-util/crypto_gnutls.c:408
+#, c-format
+msgid "Couldn't initialize PKCS#12 decoder: %s"
+msgstr "Грешка при инициализиране на модула за декодиране на PKCS#12 – %s"
+
+#: ../libnm-util/crypto_gnutls.c:421
+#, c-format
+#| msgid "Couldn't decode certificate: %s"
+msgid "Couldn't decode PKCS#12 file: %s"
+msgstr "Грешка при декодиране на файла PKCS#12 – %s"
-#: ../libnm-util/crypto_nss.c:78
+#: ../libnm-util/crypto_gnutls.c:433
+#, c-format
+#| msgid "Couldn't decode certificate: %s"
+msgid "Couldn't verify PKCS#12 file: %s"
+msgstr "Грешка при проверка на файла PKCS#12 – %s"
+
+#: ../libnm-util/crypto_nss.c:56
+#, c-format
+#| msgid "Failed to initialize the MD5 engine: %s / %s."
+msgid "Failed to initialize the crypto engine: %d."
+msgstr "Грешка при инициализиране на модула за шифроване – %d."
+
+#: ../libnm-util/crypto_nss.c:111
#, c-format
msgid "Failed to initialize the MD5 context: %d."
-msgstr "КонтекÑÑ‚ÑŠÑ‚ за MD5 не може да бъде инициализиран: %d."
+msgstr "Грешка при инициализиране на контекÑта за MD5 – %d."
+
+#: ../libnm-util/crypto_nss.c:179
+#, c-format
+msgid "Invalid IV length (must be at least %d)."
+msgstr "Ðеправилна дължина на Ð½Ð°Ñ‡Ð°Ð»Ð½Ð¸Ñ Ð²ÐµÐºÑ‚Ð¾Ñ€ (Ñ‚Ñ€Ñбва да е поне %d)."
-#: ../libnm-util/crypto_nss.c:153
+#: ../libnm-util/crypto_nss.c:196
#, c-format
msgid "Failed to initialize the decryption cipher slot."
-msgstr "Буферът за шифъра за дешифриране не може да бъде инициализиран."
+msgstr "Грешка при инициализиране на буфер за шифъра за разшифроване."
-#: ../libnm-util/crypto_nss.c:163
+#: ../libnm-util/crypto_nss.c:206
#, c-format
msgid "Failed to set symmetric key for decryption."
-msgstr "СиметричниÑÑ‚ ключ за дешифриране не може да бъде зададен."
+msgstr "Грешка при задаване на ÑÐ¸Ð¼ÐµÑ‚Ñ€Ð¸Ñ‡Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡ за разшифроване."
-#: ../libnm-util/crypto_nss.c:173
+#: ../libnm-util/crypto_nss.c:216
#, c-format
msgid "Failed to set IV for decryption."
-msgstr "ÐачалниÑÑ‚ вектор за дешифриране не може да бъде зададен."
+msgstr "Грешка при задаване на Ð½Ð°Ñ‡Ð°Ð»Ð½Ð¸Ñ Ð²ÐµÐºÑ‚Ð¾Ñ€ за разшифроване."
-#: ../libnm-util/crypto_nss.c:181
+#: ../libnm-util/crypto_nss.c:224
#, c-format
msgid "Failed to initialize the decryption context."
-msgstr "КонтекÑÑ‚ÑŠÑ‚ за дешифриране не може да бъде инициализиран."
+msgstr "Грешка при инициализиране на контекÑта за разшифроване."
-#: ../libnm-util/crypto_nss.c:194
+#: ../libnm-util/crypto_nss.c:237
#, c-format
msgid "Failed to decrypt the private key: %d."
-msgstr "ЧаÑтниÑÑ‚ ключ не може да бъде дешифриран: %d."
+msgstr "Грешка при разшифроване на чаÑÑ‚Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡ – %d."
-#: ../libnm-util/crypto_nss.c:206
+#: ../libnm-util/crypto_nss.c:245
+#, c-format
+#| msgid "Failed to decrypt the private key: %d."
+msgid "Failed to decrypt the private key: decrypted data too large."
+msgstr ""
+"Грешка при разшифроване на чаÑÑ‚Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡ – твърде много разшифровани данни."
+
+#: ../libnm-util/crypto_nss.c:256
#, c-format
msgid "Failed to finalize decryption of the private key: %d."
-msgstr "Дешифрирането на чаÑÑ‚Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡ не може да приключи: %d."
+msgstr "Грешка при завършване на разшифроването на чаÑÑ‚Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡ – %d."
+
+#: ../libnm-util/crypto_nss.c:364
+#, c-format
+#| msgid "Failed to initialize the decryption cipher slot."
+msgid "Failed to initialize the encryption cipher slot."
+msgstr "Грешка при инициализиране на буфер за шифъра за шифроване."
+
+#: ../libnm-util/crypto_nss.c:372
+#, c-format
+#| msgid "Failed to set symmetric key for decryption."
+msgid "Failed to set symmetric key for encryption."
+msgstr "Грешка при задаване на ÑÐ¸Ð¼ÐµÑ‚Ñ€Ð¸Ñ‡Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡ за шифроване."
+
+#: ../libnm-util/crypto_nss.c:380
+#, c-format
+#| msgid "Failed to set IV for decryption."
+msgid "Failed to set IV for encryption."
+msgstr "Грешка при задаване на Ð½Ð°Ñ‡Ð°Ð»Ð½Ð¸Ñ Ð²ÐµÐºÑ‚Ð¾Ñ€ за шифроване."
+
+#: ../libnm-util/crypto_nss.c:388
+#, c-format
+#| msgid "Failed to initialize the decryption context."
+msgid "Failed to initialize the encryption context."
+msgstr "Грешка при инициализиране на контекÑта за шифроване."
-#: ../libnm-util/crypto_nss.c:250
+#: ../libnm-util/crypto_nss.c:396
+#, c-format
+#| msgid "Failed to decrypt the private key: %d."
+msgid "Failed to encrypt: %d."
+msgstr "Грешка при шифроване – %d."
+
+#: ../libnm-util/crypto_nss.c:404
+#, c-format
+msgid "Unexpected amount of data after encrypting."
+msgstr "Ðеочакван обем данни Ñлед шифроване."
+
+#: ../libnm-util/crypto_nss.c:447
#, c-format
msgid "Couldn't decode certificate: %d"
-msgstr "Сертификатът не може да бъде дешифриран: %d"
+msgstr "Грешка при декодиране на Ñертификата – %d"
+
+#: ../libnm-util/crypto_nss.c:482
+#, c-format
+msgid "Couldn't convert password to UCS2: %d"
+msgstr "Грешка при преобразуване на паролата в UCS2 – %d"
+
+#: ../libnm-util/crypto_nss.c:510
+#, c-format
+msgid "Couldn't initialize PKCS#12 decoder: %d"
+msgstr "Грешка при инициализиране на модула за декодиране на PKCS#12 – %d"
+
+#: ../libnm-util/crypto_nss.c:519
+#, c-format
+#| msgid "Couldn't decode certificate: %d"
+msgid "Couldn't decode PKCS#12 file: %d"
+msgstr "Грешка при декодиране на файла Ñ PKCS#12 – %d"
+
+#: ../libnm-util/crypto_nss.c:528
+#, c-format
+#| msgid "Couldn't decode certificate: %d"
+msgid "Couldn't verify PKCS#12 file: %d"
+msgstr "Грешка при проверка на файла Ñ PKCS#12 – %d"
+
+#: ../libnm-util/crypto_nss.c:557
+#| msgid "Could not decode private key."
+msgid "Could not generate random data."
+msgstr "Грешка при генериране на Ñлучайни чиÑла."
+
+#: ../libnm-util/nm-utils.c:1975
+#, c-format
+#| msgid "Not enough memory to create private key decryption key."
+msgid "Not enough memory to make encryption key."
+msgstr "ÐÑма доÑтатъчно памет за Ñъздаването на ключ за шифроване."
+
+#: ../libnm-util/nm-utils.c:2085
+#| msgid "Not enough memory to store PEM file data."
+msgid "Could not allocate memory for PEM file creation."
+msgstr "ÐÑма доÑтатъчно памет за Ñъздаването на файл във формат PEM."
+
+#: ../libnm-util/nm-utils.c:2097
+#, c-format
+msgid "Could not allocate memory for writing IV to PEM file."
+msgstr ""
+"ÐÑма доÑтатъчно памет за запиÑването на Ð½Ð°Ñ‡Ð°Ð»Ð½Ð¸Ñ Ð²ÐµÐºÑ‚Ð¾Ñ€ във файл във формат "
+"PEM."
+
+#: ../libnm-util/nm-utils.c:2109
+#, c-format
+msgid "Could not allocate memory for writing encrypted key to PEM file."
+msgstr ""
+"ÐÑма доÑтатъчно памет за запиÑване на ключа за шифроване във файл във формат "
+"PEM."
+
+#: ../libnm-util/nm-utils.c:2128
+#, c-format
+#| msgid "Not enough memory to store PEM file data."
+msgid "Could not allocate memory for PEM file data."
+msgstr "ÐÑма доÑтатъчно памет за данните за файла във формат PEM."
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
+msgid "Connection sharing via a protected WiFi network"
+msgstr "СподелÑне на връзката през защитена безжична мрежа"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
+msgid "Connection sharing via an open WiFi network"
+msgstr "СподелÑне на връзката през отворена безжична мрежа"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
+msgid "Modify persistent system hostname"
+msgstr "ПромÑна на името на хоÑта"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
+#| msgid "No active connections!"
+msgid "Modify system connections"
+msgstr "ПромÑна на ÑиÑтемни връзки"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
+msgid "System policy prevents modification of system settings"
+msgstr "Политиката на ÑиÑтемата не позволÑва промÑна на ÑиÑтемните наÑтройки"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
+msgid "System policy prevents modification of the persistent system hostname"
+msgstr "Политиката на ÑиÑтемата не позволÑва промÑна на името на хоÑта"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
+msgid "System policy prevents sharing connections via a protected WiFi network"
+msgstr ""
+"Политиката на ÑиÑтемата не позволÑва ÑподелÑне на връзки през защитена "
+"безжична мрежа"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
+msgid "System policy prevents sharing connections via an open WiFi network"
+msgstr ""
+"Политиката на ÑиÑтемата не позволÑва ÑподелÑне на връзки през отворена "
+"безжична мрежа"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
+#| msgid "No network connection"
+msgid "Allow control of network connections"
+msgstr "Разрешаване на управлението на мрежовите връзки"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
+msgid "Allow use of user-specific connections"
+msgstr "Разрешаване на използването на потребителÑки връзки"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
+msgid "Enable or disable WiFi devices"
+msgstr "Включване и изключване на уÑтройÑтва за безжични мрежи"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
+msgid "Enable or disable mobile broadband devices"
+msgstr "Включване и изключване на уÑтройÑтва за доÑтъп до мобилни мрежи"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+#| msgid "Enable _Networking"
+msgid "Enable or disable system networking"
+msgstr "Включване и изключване на мрежата на ÑиÑтемно ниво"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
+msgid ""
+"Put NetworkManager to sleep or wake it up (should only be used by system "
+"power management)"
+msgstr ""
+"ПриÑпиване и Ñъбуждане на NetworkManager (за целите на модула за управление "
+"на захранването на ÑиÑтемата)"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
+msgid "System policy prevents control of network connections"
+msgstr "Политиката на ÑиÑтемата не позволÑва управлÑване на мрежовите връзки"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
+msgid "System policy prevents enabling or disabling WiFi devices"
+msgstr ""
+"Политиката на ÑиÑтемата не позволÑва включване и изключване на уÑтройÑтва за "
+"безжични мрежи"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
+msgid "System policy prevents enabling or disabling mobile broadband devices"
+msgstr ""
+"Политиката на ÑиÑтемата не позволÑва включване и изключване на уÑтройÑтва за "
+"мобилни мрежи"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
+msgid "System policy prevents enabling or disabling system networking"
+msgstr ""
+"Политиката на ÑиÑтемата не позволÑва включване и изключване на мрежата на "
+"ÑиÑтемно ниво"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
+msgid "System policy prevents putting NetworkManager to sleep or waking it up"
+msgstr ""
+"Политиката на ÑиÑтемата не позволÑва приÑпиване и Ñъбуждане на NetworkManager"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
+msgid "System policy prevents use of user-specific connections"
+msgstr ""
+"Политиката на ÑиÑтемата не позволÑва използване на потребителÑки връзки"
+
+#: ../src/nm-netlink-monitor.c:100 ../src/nm-netlink-monitor.c:231
+#: ../src/nm-netlink-monitor.c:653
+#, c-format
+msgid "error processing netlink message: %s"
+msgstr "грешка при обработката на Ñъобщение от Ð¼Ñ€ÐµÐ¶Ð¾Ð²Ð¸Ñ Ñлой – %s"
+
+#: ../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 ""
+"грешка при Ñвързване Ñ Ð¼Ñ€ÐµÐ¶Ð¾Ð²Ð¸Ñ Ñлой за наблюдение на ÑÑŠÑтоÑнието на "
+"връзката — %s"
+
+#: ../src/nm-netlink-monitor.c:265
+#, c-format
+#| msgid "unable to allocate netlink handle for monitoring link status: %s"
+msgid "unable to enable netlink handle credential passing: %s"
+msgstr ""
+"грешка при включване на предаването на удоÑÑ‚Ð¾Ð²ÐµÑ€ÐµÐ½Ð¸Ñ Ð² модула на Ð¼Ñ€ÐµÐ¶Ð¾Ð²Ð¸Ñ "
+"Ñлой — %s"
+
+#: ../src/nm-netlink-monitor.c:291 ../src/nm-netlink-monitor.c:353
+#, c-format
+msgid "unable to allocate netlink handle for monitoring link status: %s"
+msgstr ""
+"грешка при задаване на модул в Ð¼Ñ€ÐµÐ¶Ð¾Ð²Ð¸Ñ Ñлой за наблюдение на ÑÑŠÑтоÑнието на "
+"връзката — %s"
+
+#: ../src/nm-netlink-monitor.c:376
+#, c-format
+msgid "unable to allocate netlink link cache for monitoring link status: %s"
+msgstr ""
+"грешка при заделÑне на временна памет в Ð¼Ñ€ÐµÐ¶Ð¾Ð²Ð¸Ñ Ñлой за наблюдение на "
+"ÑÑŠÑтоÑнието на връзката — %s"
+
+#: ../src/nm-netlink-monitor.c:502
+#, c-format
+#| msgid "unable to join netlink group for monitoring link status: %s"
+msgid "unable to join netlink group: %s"
+msgstr "грешка при приÑъединÑване към групата на Ð¼Ñ€ÐµÐ¶Ð¾Ð²Ð¸Ñ Ñлой — %s"
+
+#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642
+#, c-format
+#| msgid "error processing netlink message: %s"
+msgid "error updating link cache: %s"
+msgstr "грешка при обновÑване на информациÑта за връзките – %s"
+
+#: ../src/main.c:499
+#, c-format
+msgid "Invalid option. Please use --help to see a list of valid options.\n"
+msgstr "Ðеправилна опциÑ. Ползвайте --help, за да видите ÑпиÑъка Ñ Ð¾Ð¿Ñ†Ð¸Ð¸.\n"
+
+#: ../src/main.c:570
+#, c-format
+#| msgid "Invalid option. Please use --help to see a list of valid options.\n"
+msgid "%s. Please use --help to see a list of valid options.\n"
+msgstr "%s. Ползвайте --help, за да видите ÑпиÑъка Ñ Ð¾Ð¿Ñ†Ð¸Ð¸.\n"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:328
+msgid "# Created by NetworkManager\n"
+msgstr "# Създаден от NetworkManager\n"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:344
+#, c-format
+msgid ""
+"# Merged from %s\n"
+"\n"
+msgstr ""
+"# СлÑÑ‚ от %s\n"
+"\n"
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:284
+msgid "no usable DHCP client could be found."
+msgstr "не е намерен подходÑщ клиент за DHCP."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+msgid "'dhclient' could be found."
+msgstr "Ðе е намерен „dhclient“."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:303
+msgid "'dhcpcd' could be found."
+msgstr "Ðе е намерен „dhcpcd“."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:311
+#, c-format
+msgid "unsupported DHCP client '%s'"
+msgstr "Клиентът за DHCP „%s“ не Ñе поддържа"
+
+#: ../src/logging/nm-logging.c:146
+#, c-format
+msgid "Unknown log level '%s'"
+msgstr "Ðепознат праг за ÑъобщениÑта в журнала „%s“"
+
+#: ../src/logging/nm-logging.c:171
+#, c-format
+msgid "Unknown log domain '%s'"
+msgstr "Ðепознат домейн за ÑъобщениÑта в журнала „%s“"
+
+#: ../src/dns-manager/nm-dns-manager.c:384
+#| msgid "NOTE: the glibc resolver does not support more than 3 nameservers."
+msgid "NOTE: the libc resolver may not support more than 3 nameservers."
+msgstr "ЗÐБЕЛЕЖКÐ: libc може да не поддържа повече от 3 Ñървъра за имена."
+
+#: ../src/dns-manager/nm-dns-manager.c:386
+msgid "The nameservers listed below may not be recognized."
+msgstr "Долните Ñървъри за имена може да не бъдат разпознати."
+
+#: ../src/system-settings/nm-default-wired-connection.c:157
+#, c-format
+msgid "Auto %s"
+msgstr "Ðвтоматично %s"
+
+#: ../system-settings/plugins/ifcfg-rh/reader.c:3412
+#: ../system-settings/plugins/ifnet/connection_parser.c:49
+#| msgid "Open System"
+msgid "System"
+msgstr "СиÑтемна"
#~ msgid "Passphrase for wireless network %s"
#~ msgstr "Парола за безжичната мрежа %s"
@@ -277,33 +1894,18 @@ msgstr "Сертификатът не може да бъде дешифрираÐ
#~ msgid "Connection to the wireless network '%s' failed."
#~ msgstr "ÐеуÑпешно Ñвързване към безжичната мрежа „%s“."
-#~ msgid "Connection to the wired network failed."
-#~ msgstr "ÐеуÑпешно Ñвързване към кабелната мрежа."
-
#~ msgid "Error displaying connection information:"
#~ msgstr "Грешка при показване на информациÑта за връзката:"
#~ msgid "Could not find some required resources (the glade file)!"
#~ msgstr "ÐÑкои реÑурÑи не бÑха открити (файлът на glade)!"
-#~ msgid "No active connections!"
-#~ msgstr "ÐÑма дейÑтващи връзки!"
-
-#~ msgid "%d Mb/s"
-#~ msgstr "%d Mb/s"
-
#~ msgid "Wired Ethernet (%s)"
#~ msgstr "Кабелен Етернет (%s)"
#~ msgid "Wireless Ethernet (%s)"
#~ msgstr "Безжичен Етернет (%s)"
-#~ msgid "Unknown"
-#~ msgstr "неопределима"
-
-#~ msgid "NetworkManager Applet"
-#~ msgstr "Ðплетът NetworkManager"
-
#~ msgid ""
#~ "Copyright © 2004-2006 Red Hat, Inc.\n"
#~ "Copyright © 2005-2006 Novell, Inc."
@@ -351,9 +1953,6 @@ msgstr "Сертификатът не може да бъде дешифрираÐ
#~ "Връзката към ВЧМ „%s“ Ñе провали поради грешка при Ñтартиране на "
#~ "програмата за ВЧМ."
-#~ msgid "VPN Connect Failure"
-#~ msgstr "Грешка при Ñвързване към ВЧМ"
-
#~ msgid "Could not start the VPN connection '%s' due to a connection error."
#~ msgstr "Връзката към ВЧМ „%s“ Ñе провали поради грешка при Ñвързването."
@@ -386,9 +1985,6 @@ msgstr "Сертификатът не може да бъде дешифрираÐ
#~ msgid "The network device \"%s (%s)\" does not support link detection."
#~ msgstr "Мрежовото уÑтройÑтво „%s (%s)“ не поддържа заÑичане на връзка."
-#~ msgid "(unknown)"
-#~ msgstr "(не Ñе знае)"
-
#~ msgid "Preparing device %s for the wired network..."
#~ msgstr "ПодготвÑне на уÑтройÑтвото „%s“ за кабелната мрежа…"
@@ -419,12 +2015,6 @@ msgstr "Сертификатът не може да бъде дешифрираÐ
#~ msgid "NetworkManager is not running"
#~ msgstr "NetworkManager не е включен"
-#~ msgid "Networking disabled"
-#~ msgstr "Мрежата е изключена"
-
-#~ msgid "No network connection"
-#~ msgstr "ÐÑма връзка към мрежа"
-
#~ msgid "Wired network connection"
#~ msgstr "Връзка към кабелна мрежа"
@@ -437,9 +2027,6 @@ msgstr "Сертификатът не може да бъде дешифрираÐ
#~ msgid "VPN connection to '%s'"
#~ msgstr "Връзка по ВЧМ към „%s“"
-#~ msgid "VPN connecting to '%s'"
-#~ msgstr "Свързване по ВЧМ към „%s“"
-
#~ msgid "_Connect to Other Wireless Network..."
#~ msgstr "_Свързване към други безжични мрежи…"
@@ -470,9 +2057,6 @@ msgstr "Сертификатът не може да бъде дешифрираÐ
#~ msgid "NetworkManager is not running..."
#~ msgstr "NetworkManager не е включен…"
-#~ msgid "Enable _Networking"
-#~ msgstr "_Включване на мрежата"
-
#~ msgid "Enable _Wireless"
#~ msgstr "Включване на _безжичната мрежа"
@@ -492,39 +2076,21 @@ msgstr "Сертификатът не може да бъде дешифрираÐ
#~ "Ðплетът NetworkManager не може да открие необходим реÑурÑ. Програмата не "
#~ "може да продължи работа.\n"
-#~ msgid "Open System"
-#~ msgstr "Открита ÑиÑтема"
-
#~ msgid "Shared Key"
#~ msgstr "Споделен ключ"
#~ msgid "Automatic (Default)"
#~ msgstr "Ðвтоматично (по подразбиране)"
-#~ msgid "AES-CCMP"
-#~ msgstr "AES-CCMP"
-
-#~ msgid "TKIP"
-#~ msgstr "TKIP"
-
#~ msgid "Dynamic WEP"
#~ msgstr "Динамичен WEP"
-#~ msgid "None"
-#~ msgstr "Без"
-
#~ msgid "WEP 64/128-bit ASCII"
#~ msgstr "40/128-битов ключ за WEP в ASCII"
#~ msgid "WEP 64/128-bit Hex"
#~ msgstr "40/128-битов шеÑтнадеÑетичен ключ за WEP"
-#~ msgid "WEP 128-bit Passphrase"
-#~ msgstr "128 битова парола WEP"
-
-#~ msgid "PEAP"
-#~ msgstr "PEAP"
-
#~ msgid "TLS"
#~ msgstr "TLS"
@@ -534,9 +2100,6 @@ msgstr "Сертификатът не може да бъде дешифрираÐ
#~ msgid "WPA2 Enterprise"
#~ msgstr "WPA2 Enterprise"
-#~ msgid "WPA Enterprise"
-#~ msgstr "WPA Enterprise"
-
#~ msgid "WPA2 Personal"
#~ msgstr "WPA2 Personal"
@@ -683,15 +2246,9 @@ msgstr "Сертификатът не може да бъде дешифрираÐ
#~ msgid "CA Certificate File:"
#~ msgstr "Файл ÑÑŠÑ Ñертификатите на Ñертифициращите организации:"
-#~ msgid "C_onnect"
-#~ msgstr "_Свързване"
-
#~ msgid "Client Certificate File:"
#~ msgstr "Файл Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ñките Ñертификати:"
-#~ msgid "Connection Information"
-#~ msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° връзката"
-
#~ msgid "Default Route:"
#~ msgstr "Маршрут по подразбиране:"
@@ -842,9 +2399,6 @@ msgstr "Сертификатът не може да бъде дешифрираÐ
#~ "Ñофтуер за връзка към ВЧМ от вида „%1$s“. Свържете Ñе ÑÑŠÑ ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ "
#~ "админиÑтратор."
-#~ msgid "Error retrieving VPN connection '%s'"
-#~ msgstr "Грешка при получаване на Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° връзката към ВЧМ „%s“"
-
#~ msgid ""
#~ "Could not find the UI files for VPN connection type '%s'. Contact your "
#~ "system administrator."
@@ -897,36 +2451,24 @@ msgstr "Сертификатът не може да бъде дешифрираÐ
#~ msgid "Manage Virtual Private Network Connections"
#~ msgstr "Управление на връзките към ВЧМ"
-#~ msgid "VPN Connections"
-#~ msgstr "Връзки към ВЧМ"
-
#~ msgid "40-bit WEP"
#~ msgstr "40-битов WEP"
#~ msgid "104-bit WEP"
#~ msgstr "104-битов WEP"
-#~ msgid "WPA TKIP"
-#~ msgstr "WPA TKIP"
-
#~ msgid "WPA CCMP"
#~ msgstr "WPA CCMP"
#~ msgid "WPA Automatic"
#~ msgstr "Ðвтоматичен WPA"
-#~ msgid "WPA2 TKIP"
-#~ msgstr "WPA2 TKIP"
-
#~ msgid "WPA2 CCMP"
#~ msgstr "WPA2 CCMP"
#~ msgid "WPA2 Automatic"
#~ msgstr "Ðвтоматичен WPA2"
-#~ msgid "none"
-#~ msgstr "липÑва"
-
#~ msgid "operation took too long"
#~ msgstr "операциÑта продължи прекалено дълго"
@@ -949,14 +2491,5 @@ msgstr "Сертификатът не може да бъде дешифрираÐ
#~ msgid "You are now connected to the wired network."
#~ msgstr "Свързани Ñте към кабелната мрежа."
-#~ msgid "Connection Established"
-#~ msgstr "Връзката е оÑъщеÑтвена"
-
-#~ msgid "Disconnected"
-#~ msgstr "Без връзка"
-
-#~ msgid "The network connection has been disconnected."
-#~ msgstr "Връзката към мрежата е прекъÑната."
-
#~ msgid "LEAP"
#~ msgstr "LEAP"
diff --git a/po/bn_IN.po b/po/bn_IN.po
index 602ba3fa0c..cf275dad69 100644
--- a/po/bn_IN.po
+++ b/po/bn_IN.po
@@ -1,4 +1,4 @@
-# translation of NetworkManager.master.po to Bengali INDIA
+# translation of bn_IN.po to Bengali INDIA
# Bengali (India) translation of NetworkManager.
# Copyright (C) 2009 NetworkManager's COPYRIGHT HOLDER
# This file is distributed under the same license as the NetworkManager package.
@@ -6,10 +6,10 @@
# Runa Bhattacharjee <runab@redhat.com>, 2009, 2010.
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-04-30 03:24+0000\n"
-"PO-Revision-Date: 2010-05-07 11:04+0530\n"
+"Project-Id-Version: bn_IN\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-05-06 14:31+0530\n"
+"PO-Revision-Date: 2010-05-07 10:43+0530\n"
"Last-Translator: Runa Bhattacharjee <runab@redhat.com>\n"
"Language-Team: Bengali INDIA <anubad@lists.ankur.org.in>\n"
"MIME-Version: 1.0\n"
@@ -18,7 +18,76 @@ msgstr ""
"X-Generator: KBabel 1.11.4\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ../cli/src/connections.c:86
+#: ../cli/src/connections.c:59 ../cli/src/connections.c:74
+#: ../cli/src/devices.c:85 ../cli/src/devices.c:98 ../cli/src/devices.c:108
+#: ../cli/src/devices.c:118 ../cli/src/devices.c:131 ../cli/src/devices.c:142
+#: ../cli/src/devices.c:152
+msgid "NAME"
+msgstr "NAME"
+
+#. 0
+#: ../cli/src/connections.c:60 ../cli/src/connections.c:75
+msgid "UUID"
+msgstr "UUID"
+
+#. 1
+#: ../cli/src/connections.c:61
+msgid "DEVICES"
+msgstr "DEVICES"
+
+#. 2
+#: ../cli/src/connections.c:62 ../cli/src/connections.c:77
+msgid "SCOPE"
+msgstr "SCOPE"
+
+#. 3
+#: ../cli/src/connections.c:63
+msgid "DEFAULT"
+msgstr "DEFAULT"
+
+#. 4
+#: ../cli/src/connections.c:64
+msgid "DBUS-SERVICE"
+msgstr "DBUS-SERVICE"
+
+#. 5
+#: ../cli/src/connections.c:65
+msgid "SPEC-OBJECT"
+msgstr "SPEC-OBJECT"
+
+#. 6
+#: ../cli/src/connections.c:66
+msgid "VPN"
+msgstr "VPN"
+
+#. 1
+#. 0
+#. 1
+#: ../cli/src/connections.c:76 ../cli/src/devices.c:61 ../cli/src/devices.c:87
+msgid "TYPE"
+msgstr "TYPE"
+
+#. 3
+#: ../cli/src/connections.c:78
+msgid "TIMESTAMP"
+msgstr "TIMESTAMP"
+
+#. 4
+#: ../cli/src/connections.c:79
+msgid "TIMESTAMP-REAL"
+msgstr "TIMESTAMP-REAL"
+
+#. 5
+#: ../cli/src/connections.c:80
+msgid "AUTOCONNECT"
+msgstr "AUTOCONNECT"
+
+#. 6
+#: ../cli/src/connections.c:81
+msgid "READONLY"
+msgstr "READONLY"
+
+#: ../cli/src/connections.c:157
#, c-format
msgid ""
"Usage: nmcli con { COMMAND | help }\n"
@@ -39,310 +108,514 @@ msgstr ""
"<timeout>]\n"
" down id <id> | uuid <id>\n"
-#: ../cli/src/connections.c:158
-msgid "Connections"
-msgstr "সংযোগ"
-
-#: ../cli/src/connections.c:158 ../cli/src/connections.c:160
-#: ../cli/src/connections.c:196 ../cli/src/connections.c:198
-#: ../cli/src/connections.c:205 ../cli/src/connections.c:207
-#: ../cli/src/devices.c:298 ../cli/src/devices.c:458 ../cli/src/devices.c:460
-msgid "Type"
-msgstr "ধরন"
-
-#: ../cli/src/connections.c:158 ../cli/src/connections.c:160
-#: ../cli/src/connections.c:196 ../cli/src/connections.c:198
-#: ../cli/src/connections.c:205 ../cli/src/connections.c:207
-#: ../cli/src/connections.c:297 ../cli/src/connections.c:299
-msgid "UUID"
-msgstr "UUID"
-
-#: ../cli/src/connections.c:158 ../cli/src/connections.c:160
-#: ../cli/src/connections.c:196 ../cli/src/connections.c:198
-#: ../cli/src/connections.c:205 ../cli/src/connections.c:207
-#: ../cli/src/connections.c:297 ../cli/src/connections.c:299
-msgid "Name"
-msgstr "নাম"
-
-#: ../cli/src/connections.c:163
+#: ../cli/src/connections.c:197 ../cli/src/connections.c:536
#, c-format
-msgid "System connections:\n"
-msgstr "সিসà§à¦Ÿà§‡à¦®à§‡à¦° সংযোগ:\n"
+msgid "Error: 'con list': %s"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'con list': %s"
-#: ../cli/src/connections.c:167
+#: ../cli/src/connections.c:199 ../cli/src/connections.c:538
#, c-format
-msgid "User connections:\n"
-msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€à¦° সংযোগ:\n"
+msgid "Error: 'con list': %s; allowed fields: %s"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'con list': %s; অনà§à¦®à§‹à¦¦à¦¿à¦¤ কà§à¦·à§‡à¦¤à§à¦°: %s"
+
+#: ../cli/src/connections.c:207
+msgid "Connection details"
+msgstr "সংযোগ সংকà§à¦°à¦¾à¦¨à§à¦¤ বিবরণ"
+
+#: ../cli/src/connections.c:381 ../cli/src/connections.c:601
+msgid "system"
+msgstr "সিসà§à¦Ÿà§‡à¦®"
+
+#: ../cli/src/connections.c:381 ../cli/src/connections.c:601
+msgid "user"
+msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€"
+
+#: ../cli/src/connections.c:383
+msgid "never"
+msgstr "কখনো নয়"
+
+#. "CAPABILITIES"
+#. Print header
+#. "WIFI-PROPERTIES"
+#: ../cli/src/connections.c:384 ../cli/src/connections.c:385
+#: ../cli/src/connections.c:602 ../cli/src/connections.c:605
+#: ../cli/src/devices.c:388 ../cli/src/devices.c:513 ../cli/src/devices.c:539
+#: ../cli/src/devices.c:540 ../cli/src/devices.c:541 ../cli/src/devices.c:542
+#: ../cli/src/devices.c:543 ../cli/src/settings.c:504
+#: ../cli/src/settings.c:544 ../cli/src/settings.c:643
+#: ../cli/src/settings.c:912 ../cli/src/settings.c:913
+#: ../cli/src/settings.c:915 ../cli/src/settings.c:917
+#: ../cli/src/settings.c:1042 ../cli/src/settings.c:1043
+#: ../cli/src/settings.c:1044 ../cli/src/settings.c:1123
+#: ../cli/src/settings.c:1124 ../cli/src/settings.c:1125
+#: ../cli/src/settings.c:1126 ../cli/src/settings.c:1127
+#: ../cli/src/settings.c:1128 ../cli/src/settings.c:1129
+#: ../cli/src/settings.c:1130 ../cli/src/settings.c:1131
+#: ../cli/src/settings.c:1132 ../cli/src/settings.c:1133
+#: ../cli/src/settings.c:1134 ../cli/src/settings.c:1135
+#: ../cli/src/settings.c:1210
+msgid "yes"
+msgstr "হà§à¦¯à¦¾à¦"
-#: ../cli/src/connections.c:178 ../cli/src/connections.c:967
-#: ../cli/src/connections.c:983 ../cli/src/connections.c:992
-#: ../cli/src/connections.c:1003 ../cli/src/connections.c:1085
-#: ../cli/src/devices.c:604 ../cli/src/devices.c:614 ../cli/src/devices.c:699
-#: ../cli/src/devices.c:785 ../cli/src/devices.c:792
+#: ../cli/src/connections.c:384 ../cli/src/connections.c:385
+#: ../cli/src/connections.c:602 ../cli/src/connections.c:605
+#: ../cli/src/devices.c:388 ../cli/src/devices.c:513 ../cli/src/devices.c:539
+#: ../cli/src/devices.c:540 ../cli/src/devices.c:541 ../cli/src/devices.c:542
+#: ../cli/src/devices.c:543 ../cli/src/settings.c:504
+#: ../cli/src/settings.c:506 ../cli/src/settings.c:544
+#: ../cli/src/settings.c:643 ../cli/src/settings.c:912
+#: ../cli/src/settings.c:913 ../cli/src/settings.c:915
+#: ../cli/src/settings.c:917 ../cli/src/settings.c:1042
+#: ../cli/src/settings.c:1043 ../cli/src/settings.c:1044
+#: ../cli/src/settings.c:1123 ../cli/src/settings.c:1124
+#: ../cli/src/settings.c:1125 ../cli/src/settings.c:1126
+#: ../cli/src/settings.c:1127 ../cli/src/settings.c:1128
+#: ../cli/src/settings.c:1129 ../cli/src/settings.c:1130
+#: ../cli/src/settings.c:1131 ../cli/src/settings.c:1132
+#: ../cli/src/settings.c:1133 ../cli/src/settings.c:1134
+#: ../cli/src/settings.c:1135 ../cli/src/settings.c:1210
+msgid "no"
+msgstr "না"
+
+#: ../cli/src/connections.c:457 ../cli/src/connections.c:500
+msgid "System connections"
+msgstr "সিসà§à¦Ÿà§‡à¦®à§‡à¦° সংযোগ"
+
+#: ../cli/src/connections.c:462 ../cli/src/connections.c:513
+msgid "User connections"
+msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€à¦° সংযোগ"
+
+#: ../cli/src/connections.c:474 ../cli/src/connections.c:1334
+#: ../cli/src/connections.c:1350 ../cli/src/connections.c:1359
+#: ../cli/src/connections.c:1370 ../cli/src/connections.c:1452
+#: ../cli/src/devices.c:864 ../cli/src/devices.c:874 ../cli/src/devices.c:973
+#: ../cli/src/devices.c:980
#, c-format
msgid "Error: %s argument is missing."
msgstr "তà§à¦°à§à¦Ÿà¦¿: %s আরà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤à¥¤"
-#: ../cli/src/connections.c:189
+#: ../cli/src/connections.c:487
#, c-format
msgid "Error: %s - no such connection."
msgstr "তà§à¦°à§à¦Ÿà¦¿: %s - à¦à¦‡ ধরনের কোনো সংযোগ উপসà§à¦¥à¦¿à¦¤ নেই।"
-#: ../cli/src/connections.c:196
-msgid "System-wide connections"
-msgstr "সিসà§à¦Ÿà§‡à¦® বà§à¦¯à¦¾à¦ªà§€ সংযোগ"
-
-#: ../cli/src/connections.c:205
-msgid "User connections"
-msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€à¦° সংযোগ"
-
-#: ../cli/src/connections.c:212 ../cli/src/connections.c:1016
-#: ../cli/src/connections.c:1103 ../cli/src/devices.c:446
-#: ../cli/src/devices.c:494 ../cli/src/devices.c:628 ../cli/src/devices.c:706
-#: ../cli/src/devices.c:798
+#: ../cli/src/connections.c:519 ../cli/src/connections.c:1383
+#: ../cli/src/connections.c:1470 ../cli/src/devices.c:687
+#: ../cli/src/devices.c:754 ../cli/src/devices.c:888 ../cli/src/devices.c:986
#, c-format
msgid "Unknown parameter: %s\n"
msgstr "অজানা পরামিতি: %s\n"
-#: ../cli/src/connections.c:221
+#: ../cli/src/connections.c:528
#, c-format
msgid "Error: no valid parameter specified."
msgstr "তà§à¦°à§à¦Ÿà¦¿: বৈধ পরামিতি উলà§à¦²à§‡à¦– করা যায়নি।"
-#. FIXME: Fix the output
-#: ../cli/src/connections.c:268 ../cli/src/devices.c:302
-#: ../cli/src/devices.c:321 ../cli/src/devices.c:353 ../cli/src/devices.c:355
-#: ../cli/src/devices.c:357 ../cli/src/devices.c:359 ../cli/src/devices.c:361
-msgid "yes"
-msgstr "হà§à¦¯à¦¾à¦"
+#: ../cli/src/connections.c:543 ../cli/src/connections.c:1572
+#: ../cli/src/devices.c:1192 ../cli/src/network-manager.c:274
+#, c-format
+msgid "Error: %s."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: %s।"
-#: ../cli/src/connections.c:268 ../cli/src/devices.c:304
-msgid "no"
-msgstr "না"
+#: ../cli/src/connections.c:649
+#, c-format
+msgid "Error: 'con status': %s"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'con status': %s"
-#: ../cli/src/connections.c:297
+#: ../cli/src/connections.c:651
+#, c-format
+msgid "Error: 'con status': %s; allowed fields: %s"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'con status': %s; অনà§à¦®à§‹à¦¦à¦¿à¦¤ কà§à¦·à§‡à¦¤à§à¦°: %s"
+
+#: ../cli/src/connections.c:658
msgid "Active connections"
msgstr "সকà§à¦°à¦¿à§Ÿ সংযোগ"
-#: ../cli/src/connections.c:297 ../cli/src/connections.c:299
-#: ../cli/src/devices.c:302 ../cli/src/devices.c:304
-msgid "Default"
-msgstr "ডিফলà§à¦Ÿ"
-
-#: ../cli/src/connections.c:297 ../cli/src/connections.c:299
-msgid "Service"
-msgstr "পরিসেবা"
-
-#: ../cli/src/connections.c:297 ../cli/src/connections.c:299
-msgid "Devices"
-msgstr "ডিভাইস"
-
-#: ../cli/src/connections.c:659
+#: ../cli/src/connections.c:1026
#, c-format
msgid "no active connection on device '%s'"
msgstr "'%s' ডিভাইসের মধà§à¦¯à§‡ কোনো সকà§à¦°à¦¿à§Ÿ সংযোগ উপসà§à¦¥à¦¿à¦¤ নেই"
-#: ../cli/src/connections.c:667
+#: ../cli/src/connections.c:1034
#, c-format
msgid "no active connection or device"
msgstr "কোনো সকà§à¦°à¦¿à§Ÿ সংযোগ অথবা ডিভাইস উপসà§à¦¥à¦¿à¦¤ নেই"
-#: ../cli/src/connections.c:730
+#: ../cli/src/connections.c:1084
+#, c-format
+msgid "device '%s' not compatible with connection '%s'"
+msgstr "'%s' ডিভাইসের সাথে '%s' সংযোগটি সà§à¦¸à¦‚গত নয়"
+
+#: ../cli/src/connections.c:1086
+#, c-format
+msgid "no device found for connection '%s'"
+msgstr "'%s' সংযোগের জনà§à¦¯ কোনো ডিভাইস পাওয়া যায়নি"
+
+#: ../cli/src/connections.c:1097
msgid "activating"
msgstr "সকà§à¦°à¦¿à§Ÿ করা হচà§à¦›à§‡"
-#: ../cli/src/connections.c:732
+#: ../cli/src/connections.c:1099
msgid "activated"
msgstr "সকà§à¦°à¦¿à§Ÿ করা হয়েছে"
-#: ../cli/src/connections.c:735 ../cli/src/connections.c:758
-#: ../cli/src/connections.c:791 ../cli/src/devices.c:111
-#: ../cli/src/network-manager.c:76 ../cli/src/network-manager.c:98
+#: ../cli/src/connections.c:1102 ../cli/src/connections.c:1125
+#: ../cli/src/connections.c:1158 ../cli/src/devices.c:224
+#: ../cli/src/devices.c:514 ../cli/src/network-manager.c:92
+#: ../cli/src/network-manager.c:145 ../cli/src/settings.c:469
msgid "unknown"
msgstr "অজানা"
-#: ../cli/src/connections.c:744
+#: ../cli/src/connections.c:1111
msgid "VPN connecting (prepare)"
msgstr "VPN সংযোগ সà§à¦¥à¦¾à¦ªà¦¨ করা হচà§à¦›à§‡ (পà§à¦°à¦¸à§à¦¤à§à¦¤à¦¿)"
-#: ../cli/src/connections.c:746
+#: ../cli/src/connections.c:1113
msgid "VPN connecting (need authentication)"
msgstr "VPN সংযোগ সà§à¦¥à¦¾à¦ªà¦¨ করা হচà§à¦›à§‡ (অনà§à¦®à§‹à¦¦à¦¨ পà§à¦°à§Ÿà§‹à¦œà¦¨)"
-#: ../cli/src/connections.c:748
+#: ../cli/src/connections.c:1115
msgid "VPN connecting"
msgstr "VPN সংযোগ সà§à¦¥à¦¾à¦ªà¦¨ করা হচà§à¦›à§‡"
-#: ../cli/src/connections.c:750
+#: ../cli/src/connections.c:1117
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN সংযোগ সà§à¦¥à¦¾à¦ªà¦¨ করা হচà§à¦›à§‡ (IP কনফিগারেশন পà§à¦°à¦¾à¦ªà§à¦¤ করা হচà§à¦›à§‡)"
-#: ../cli/src/connections.c:752
+#: ../cli/src/connections.c:1119
msgid "VPN connected"
msgstr "VPN সংযোগ সà§à¦¥à¦¾à¦ªà¦¨ করা হয়েছে"
-#: ../cli/src/connections.c:754
+#: ../cli/src/connections.c:1121
msgid "VPN connection failed"
msgstr "VPN সংযোগ বিফল হয়েছে"
-#: ../cli/src/connections.c:756
+#: ../cli/src/connections.c:1123
msgid "VPN disconnected"
msgstr "VPN সংযোগ বিচà§à¦›à¦¿à¦¨à§à¦¨ করা হয়েছে"
-#: ../cli/src/connections.c:767
+#: ../cli/src/connections.c:1134
msgid "unknown reason"
msgstr "অজানা কারণ"
-#: ../cli/src/connections.c:769
+#: ../cli/src/connections.c:1136
msgid "none"
msgstr "শূণà§à¦¯"
-#: ../cli/src/connections.c:771
+#: ../cli/src/connections.c:1138
msgid "the user was disconnected"
msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€à¦° সাথে সংযোগ বিচà§à¦›à¦¿à¦¨à§à¦¨ করা হয়েছে"
-#: ../cli/src/connections.c:773
+#: ../cli/src/connections.c:1140
msgid "the base network connection was interrupted"
msgstr "মূল নেটওয়ারà§à¦• সংযোগ বিঘà§à¦¨à¦¿à¦¤ হয়েছে"
-#: ../cli/src/connections.c:775
+#: ../cli/src/connections.c:1142
msgid "the VPN service stopped unexpectedly"
msgstr "অপà§à¦°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤à¦­à¦¾à¦¬à§‡ VPN পরিসেবা বনà§à¦§ করা হয়েছে"
-#: ../cli/src/connections.c:777
+#: ../cli/src/connections.c:1144
msgid "the VPN service returned invalid configuration"
msgstr "VPN পরিসেবা থেকে অবৈধ কনফিগারেশন পাওয়া গিয়েছে"
-#: ../cli/src/connections.c:779
+#: ../cli/src/connections.c:1146
msgid "the connection attempt timed out"
msgstr "সংযোগের পà§à¦°à§Ÿà¦¾à¦¸à¦•à¦¾à¦²à§‡ সময়সীমা উতà§à¦¤à§€à¦°à§à¦£ হয়েছে"
-#: ../cli/src/connections.c:781
+#: ../cli/src/connections.c:1148
msgid "the VPN service did not start in time"
msgstr "যথাযত সময়ে VPN পরিসেবা আরমà§à¦­ করা হয়নি"
-#: ../cli/src/connections.c:783
+#: ../cli/src/connections.c:1150
msgid "the VPN service failed to start"
msgstr "VPN পরিসেবা আরমà§à¦­ করা যায়নি"
-#: ../cli/src/connections.c:785
+#: ../cli/src/connections.c:1152
msgid "no valid VPN secrets"
msgstr "VPN-র বৈধ গোপন তথà§à¦¯ উপসà§à¦¥à¦¿à¦¤ নেই"
-#: ../cli/src/connections.c:787
+#: ../cli/src/connections.c:1154
msgid "invalid VPN secrets"
msgstr "VPN-র অবৈধ গোপন তথà§à¦¯"
-#: ../cli/src/connections.c:789
+#: ../cli/src/connections.c:1156
msgid "the connection was removed"
msgstr "সংযোগ মà§à¦›à§‡ ফেলা হয়েছে"
-#: ../cli/src/connections.c:803
+#: ../cli/src/connections.c:1170
#, c-format
msgid "state: %s\n"
msgstr "অবসà§à¦¥à¦¾: %s\n"
-#: ../cli/src/connections.c:806 ../cli/src/connections.c:832
+#: ../cli/src/connections.c:1173 ../cli/src/connections.c:1199
#, c-format
msgid "Connection activated\n"
msgstr "সংযোগ সকà§à¦°à¦¿à§Ÿ করা হয়েছে\n"
-#: ../cli/src/connections.c:809
+#: ../cli/src/connections.c:1176
#, c-format
msgid "Error: Connection activation failed."
msgstr "তà§à¦°à§à¦Ÿà¦¿: সংযোগ সকà§à¦°à¦¿à§Ÿ করতে বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../cli/src/connections.c:828
+#: ../cli/src/connections.c:1195
#, c-format
msgid "state: %s (%d)\n"
msgstr "অবসà§à¦¥à¦¾: %s (%d)\n"
-#: ../cli/src/connections.c:838
+#: ../cli/src/connections.c:1205
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "তà§à¦°à§à¦Ÿà¦¿: সংযোগ সকà§à¦°à¦¿à§Ÿ করতে বà§à¦¯à¦°à§à¦¥: %s।"
-#: ../cli/src/connections.c:855 ../cli/src/devices.c:551
+#: ../cli/src/connections.c:1222 ../cli/src/devices.c:811
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "তà§à¦°à§à¦Ÿà¦¿: %d সেকেনà§à¦¡à§‡à¦° সময়সীমা উতà§à¦¤à§€à¦°à§à¦£ হয়েছে।"
-#: ../cli/src/connections.c:898
+#: ../cli/src/connections.c:1265
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "তà§à¦°à§à¦Ÿà¦¿: সংযোগ সকà§à¦°à¦¿à§Ÿ করতে বà§à¦¯à¦°à§à¦¥: %s"
-#: ../cli/src/connections.c:912
+#: ../cli/src/connections.c:1279
#, c-format
msgid "Error: Obtaining active connection for '%s' failed."
msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s'-র জনà§à¦¯ সকà§à¦°à¦¿à§Ÿ সংযোগ পà§à¦°à¦¾à¦ªà§à¦¤ করতে বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../cli/src/connections.c:921
+#: ../cli/src/connections.c:1288
#, c-format
msgid "Active connection state: %s\n"
msgstr "সকà§à¦°à¦¿à§Ÿ সংযোগের অবসà§à¦¥à¦¾: %s\n"
-#: ../cli/src/connections.c:922
+#: ../cli/src/connections.c:1289
#, c-format
msgid "Active connection path: %s\n"
msgstr "সকà§à¦°à¦¿à§Ÿ সংযোগের পাথ: %s\n"
-#: ../cli/src/connections.c:976 ../cli/src/connections.c:1094
+#: ../cli/src/connections.c:1343 ../cli/src/connections.c:1461
#, c-format
msgid "Error: Unknown connection: %s."
msgstr "তà§à¦°à§à¦Ÿà¦¿: অজানা সংযোগ: %s."
-#: ../cli/src/connections.c:1011 ../cli/src/devices.c:622
+#: ../cli/src/connections.c:1378 ../cli/src/devices.c:882
#, c-format
msgid "Error: timeout value '%s' is not valid."
msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' সময়সীমার মান বৈধ নয়।"
-#: ../cli/src/connections.c:1024 ../cli/src/connections.c:1111
+#: ../cli/src/connections.c:1391 ../cli/src/connections.c:1478
#, c-format
msgid "Error: id or uuid has to be specified."
msgstr "তà§à¦°à§à¦Ÿà¦¿: id অথবা uuid নিরà§à¦§à¦¾à¦°à¦£ করা আবশà§à¦¯à¦•à¥¤"
-#: ../cli/src/connections.c:1044
+#: ../cli/src/connections.c:1411
#, c-format
msgid "Error: No suitable device found: %s."
msgstr "তà§à¦°à§à¦Ÿà¦¿: পà§à¦°à¦¯à§‹à¦œà§à¦¯ কোনো ডিভাইস পাওয়া যায়নি: %s."
-#: ../cli/src/connections.c:1046
+#: ../cli/src/connections.c:1413
#, c-format
msgid "Error: No suitable device found."
msgstr "তà§à¦°à§à¦Ÿà¦¿: কোনো পà§à¦°à¦¯à§‹à¦œà§à¦¯ ডিভাইস পাওয়া যায়নি।"
-#: ../cli/src/connections.c:1138
+#: ../cli/src/connections.c:1505
#, c-format
msgid "Warning: Connection not active\n"
msgstr "সতরà§à¦•à¦¬à¦¾à¦°à§à¦¤à¦¾: সংযোগ সকà§à¦°à¦¿à§Ÿ নয়\n"
-#: ../cli/src/connections.c:1189
+#: ../cli/src/connections.c:1561
#, c-format
msgid "Error: 'con' command '%s' is not valid."
msgstr "তà§à¦°à§à¦Ÿà¦¿: 'con' কমানà§à¦¡ '%s', বৈধ নয়।"
-#: ../cli/src/connections.c:1216
+#: ../cli/src/connections.c:1597
#, c-format
msgid "Error: could not connect to D-Bus."
msgstr "তà§à¦°à§à¦Ÿà¦¿: D-Bus-র সাথে সংযোগ করতে বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../cli/src/connections.c:1223
+#: ../cli/src/connections.c:1604
#, c-format
msgid "Error: Could not get system settings."
msgstr "তà§à¦°à§à¦Ÿà¦¿: সিসà§à¦Ÿà§‡à¦®à§‡à¦° বৈশিষà§à¦Ÿà§à¦¯ পà§à¦°à¦¾à¦ªà§à¦¤ করতে বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../cli/src/connections.c:1231
+#: ../cli/src/connections.c:1612
#, c-format
msgid "Error: Could not get user settings."
msgstr "তà§à¦°à§à¦Ÿà¦¿: বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€à¦° বৈশিষà§à¦Ÿà§à¦¯ পà§à¦°à¦¾à¦ªà§à¦¤ করতে বà§à¦¯à¦°à§à¦¥"
-#: ../cli/src/connections.c:1241
+#: ../cli/src/connections.c:1622
#, c-format
msgid "Error: Can't obtain connections: settings services are not running."
msgstr "তà§à¦°à§à¦Ÿà¦¿: সংযোগ পà§à¦°à¦¾à¦ªà§à¦¤ করতে বà§à¦¯à¦°à§à¦¥: বৈশিষà§à¦Ÿà§à¦¯à§‡à¦° পরিসেবা বরà§à¦¤à¦®à¦¾à¦¨à§‡ চলছে না।"
+#. 0
+#. 9
+#: ../cli/src/devices.c:60 ../cli/src/devices.c:86 ../cli/src/devices.c:162
+msgid "DEVICE"
+msgstr "DEVICE"
+
+#. 1
+#. 4
+#. 0
+#: ../cli/src/devices.c:62 ../cli/src/devices.c:90
+#: ../cli/src/network-manager.c:36
+msgid "STATE"
+msgstr "STATE"
+
+#: ../cli/src/devices.c:71
+msgid "GENERAL"
+msgstr "GENERAL"
+
+#. 0
+#: ../cli/src/devices.c:72
+msgid "CAPABILITIES"
+msgstr "CAPABILITIES"
+
+#. 1
#: ../cli/src/devices.c:73
+msgid "WIFI-PROPERTIES"
+msgstr "WIFI-PROPERTIES"
+
+#. 2
+#: ../cli/src/devices.c:74
+msgid "AP"
+msgstr "AP"
+
+#. 3
+#: ../cli/src/devices.c:75
+msgid "WIRED-PROPERTIES"
+msgstr "WIRED-PROPERTIES"
+
+#. 4
+#: ../cli/src/devices.c:76
+msgid "IP4-SETTINGS"
+msgstr "IP4-SETTINGS"
+
+#. 5
+#: ../cli/src/devices.c:77
+msgid "IP4-DNS"
+msgstr "IP4-DNS"
+
+#. 2
+#: ../cli/src/devices.c:88
+msgid "DRIVER"
+msgstr "DRIVER"
+
+#. 3
+#: ../cli/src/devices.c:89
+msgid "HWADDR"
+msgstr "HWADDR"
+
+#. 0
+#: ../cli/src/devices.c:99
+msgid "CARRIER-DETECT"
+msgstr "CARRIER-DETECT"
+
+#. 1
+#: ../cli/src/devices.c:100
+msgid "SPEED"
+msgstr "SPEED"
+
+#. 0
+#: ../cli/src/devices.c:109
+msgid "CARRIER"
+msgstr "CARRIER"
+
+#. 0
+#: ../cli/src/devices.c:119
+msgid "WEP"
+msgstr "WEP"
+
+#. 1
+#: ../cli/src/devices.c:120
+msgid "WPA"
+msgstr "WPA"
+
+#. 2
+#: ../cli/src/devices.c:121
+msgid "WPA2"
+msgstr "WPA2"
+
+#. 3
+#: ../cli/src/devices.c:122
+msgid "TKIP"
+msgstr "TKIP"
+
+#. 4
+#: ../cli/src/devices.c:123
+msgid "CCMP"
+msgstr "CCMP"
+
+#. 0
+#: ../cli/src/devices.c:132
+msgid "ADDRESS"
+msgstr "ADDRESS"
+
+#. 1
+#: ../cli/src/devices.c:133
+msgid "PREFIX"
+msgstr "PREFIX"
+
+#. 2
+#: ../cli/src/devices.c:134
+msgid "GATEWAY"
+msgstr "GATEWAY"
+
+#. 0
+#: ../cli/src/devices.c:143
+msgid "DNS"
+msgstr "DNS"
+
+#. 0
+#: ../cli/src/devices.c:153
+msgid "SSID"
+msgstr "SSID"
+
+#. 1
+#: ../cli/src/devices.c:154
+msgid "BSSID"
+msgstr "BSSID"
+
+#. 2
+#: ../cli/src/devices.c:155
+msgid "MODE"
+msgstr "MODE"
+
+#. 3
+#: ../cli/src/devices.c:156
+msgid "FREQ"
+msgstr "FREQ"
+
+#. 4
+#: ../cli/src/devices.c:157
+msgid "RATE"
+msgstr "RATE"
+
+#. 5
+#: ../cli/src/devices.c:158
+msgid "SIGNAL"
+msgstr "SIGNAL"
+
+#. 6
+#: ../cli/src/devices.c:159
+msgid "SECURITY"
+msgstr "SECURITY"
+
+#. 7
+#: ../cli/src/devices.c:160
+msgid "WPA-FLAGS"
+msgstr "WPA-FLAGS"
+
+#. 8
+#: ../cli/src/devices.c:161
+msgid "RSN-FLAGS"
+msgstr "RSN-FLAGS"
+
+#. 10
+#: ../cli/src/devices.c:163
+msgid "ACTIVE"
+msgstr "ACTIVE"
+
+#: ../cli/src/devices.c:186
#, c-format
msgid ""
"Usage: nmcli dev { COMMAND | help }\n"
@@ -352,7 +625,7 @@ msgid ""
" status\n"
" list [iface <iface>]\n"
" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] | apinfo iface <iface> hwaddr <hwaddr>]\n"
+" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
"\n"
msgstr ""
"বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦ªà§à¦°à¦£à¦¾à¦²à§€: nmcli dev { COMMAND | help }\n"
@@ -362,349 +635,236 @@ msgstr ""
" status\n"
" list [iface <iface>]\n"
" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] | apinfo iface <iface> hwaddr <hwaddr>]\n"
+" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
"\n"
-#: ../cli/src/devices.c:93
+#: ../cli/src/devices.c:206
msgid "unmanaged"
msgstr "পরিচালিত নয়"
-#: ../cli/src/devices.c:95
+#: ../cli/src/devices.c:208
msgid "unavailable"
msgstr "উপলবà§à¦§ নয়"
-#: ../cli/src/devices.c:97 ../cli/src/network-manager.c:73
+#: ../cli/src/devices.c:210 ../cli/src/network-manager.c:89
msgid "disconnected"
msgstr "বিচà§à¦›à¦¿à¦¨à§à¦¨"
-#: ../cli/src/devices.c:99
+#: ../cli/src/devices.c:212
msgid "connecting (prepare)"
msgstr "সংযোগ করা হচà§à¦›à§‡ (পà§à¦°à¦¸à§à¦¤à§à¦¤à¦¿)"
-#: ../cli/src/devices.c:101
+#: ../cli/src/devices.c:214
msgid "connecting (configuring)"
msgstr "সংযোগ করা হচà§à¦›à§‡ (কনফিগার করা হচà§à¦›à§‡)"
-#: ../cli/src/devices.c:103
+#: ../cli/src/devices.c:216
msgid "connecting (need authentication)"
msgstr "সংযোগ করা হচà§à¦›à§‡ (অনà§à¦®à§‹à¦¦à¦¨ পà§à¦°à§Ÿà§‹à¦œà¦¨)"
-#: ../cli/src/devices.c:105
+#: ../cli/src/devices.c:218
msgid "connecting (getting IP configuration)"
msgstr "সংযোগ করা হচà§à¦›à§‡ (IP কনফিগারেশন পà§à¦°à¦¾à¦ªà§à¦¤ করা হচà§à¦›à§‡)"
-#: ../cli/src/devices.c:107 ../cli/src/network-manager.c:71
+#: ../cli/src/devices.c:220 ../cli/src/network-manager.c:87
msgid "connected"
msgstr "সংযোগ সà§à¦¥à¦¾à¦ªà¦¿à¦¤"
-#: ../cli/src/devices.c:109
+#: ../cli/src/devices.c:222
msgid "connection failed"
msgstr "সংযোগ বিফল"
-#: ../cli/src/devices.c:132 ../cli/src/devices.c:876
+#: ../cli/src/devices.c:245 ../cli/src/devices.c:380
msgid "Unknown"
msgstr "অজানা"
-#. print them
-#: ../cli/src/devices.c:164 ../cli/src/devices.c:266 ../cli/src/devices.c:861
-#: ../cli/src/devices.c:879
+#: ../cli/src/devices.c:277
msgid "(none)"
msgstr "(শূণà§à¦¯)"
-#: ../cli/src/devices.c:209
+#: ../cli/src/devices.c:302
#, c-format
msgid "%s: error converting IP4 address 0x%X"
msgstr "%s: IP4 ঠিকানা 0x%X রূপানà§à¦¤à¦° করতে তà§à¦°à§à¦Ÿà¦¿"
-#: ../cli/src/devices.c:238
+#: ../cli/src/devices.c:349
#, c-format
-msgid "%s, %s, Freq %d MHz, Rate %d Mb/s, Strength %d"
-msgstr "%s, %s, ফà§à¦°à¦¿à¦•à§‹à§Ÿà§‡à¦¨à§à¦¸à¦¿ %d MHz, হার %d Mb/s, কà§à¦·à¦®à¦¤à¦¾ %d"
-
-#: ../cli/src/devices.c:239
-msgid "Ad-Hoc"
-msgstr "অà§à¦¯à¦¾à¦¡-হক"
-
-#: ../cli/src/devices.c:248
-msgid ", Encrypted: "
-msgstr ", à¦à¦¨à¦•à§à¦°à¦¿à¦ªà¦¶à¦¨ সহ: "
-
-#: ../cli/src/devices.c:253
-msgid " WEP"
-msgstr " WEP"
+msgid "%u MHz"
+msgstr "%u MHz"
-#: ../cli/src/devices.c:255
-msgid " WPA"
-msgstr " WPA"
+#: ../cli/src/devices.c:350
+#, c-format
+msgid "%u MB/s"
+msgstr "%u মেগাবাইট/সেকেনà§à¦¡"
-#: ../cli/src/devices.c:257
-msgid " WPA2"
-msgstr " WPA2"
+#: ../cli/src/devices.c:359
+msgid "Encrypted: "
+msgstr "à¦à¦¨à¦•à§à¦°à¦¿à¦ªà¦¶à¦¨ সহ: "
-#: ../cli/src/devices.c:260
-msgid " Enterprise"
-msgstr " à¦à¦¨à§à¦Ÿà¦¾à¦°à¦ªà§à¦°à¦¾à¦‡à¦œ"
+#: ../cli/src/devices.c:364
+msgid "WEP "
+msgstr "WEP "
-#: ../cli/src/devices.c:294 ../cli/src/devices.c:458 ../cli/src/devices.c:460
-msgid "Device"
-msgstr "ডিভাইস"
+#: ../cli/src/devices.c:366
+msgid "WPA "
+msgstr "WPA "
-#: ../cli/src/devices.c:299
-msgid "Driver"
-msgstr "ডà§à¦°à¦¾à¦‡à¦­à¦¾à¦°"
+#: ../cli/src/devices.c:368
+msgid "WPA2 "
+msgstr "WPA2 "
-#: ../cli/src/devices.c:299 ../cli/src/devices.c:567
-msgid "(unknown)"
-msgstr "(অজানা)"
+#: ../cli/src/devices.c:371
+msgid "Enterprise "
+msgstr "à¦à¦¨à§à¦Ÿà¦¾à¦°à¦ªà§à¦°à¦¾à¦‡à¦œ "
-#: ../cli/src/devices.c:300 ../cli/src/devices.c:458 ../cli/src/devices.c:460
-msgid "State"
-msgstr "অবসà§à¦¥à¦¾"
+#: ../cli/src/devices.c:380
+msgid "Ad-Hoc"
+msgstr "অà§à¦¯à¦¾à¦¡-হক"
-#: ../cli/src/devices.c:313
-msgid "HW Address"
-msgstr "হারà§à¦¡à¦“য়à§à¦¯à¦¾à¦°à§‡à¦° ঠিকানা"
+#: ../cli/src/devices.c:380
+msgid "Infrastructure"
+msgstr "পরিকাঠামো"
-#: ../cli/src/devices.c:319
+#: ../cli/src/devices.c:442
#, c-format
-msgid ""
-"\n"
-" Capabilities:\n"
-msgstr ""
-"\n"
-" করà§à¦®à¦•à§à¦·à¦®à¦¤à¦¾:\n"
-
-#: ../cli/src/devices.c:321
-msgid "Carrier Detect"
-msgstr "পরিবহণকারী সনাকà§à¦¤à¦•à¦°à¦£"
+msgid "Error: 'dev list': %s"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'dev list': %s"
-#: ../cli/src/devices.c:336
+#: ../cli/src/devices.c:444
#, c-format
-msgid "%u Mb/s"
-msgstr "%u মেগাবাইট/সেকেনà§à¦¡"
+msgid "Error: 'dev list': %s; allowed fields: %s"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'dev list': %s; অনà§à¦®à§‹à¦¦à¦¿à¦¤ কà§à¦·à§‡à¦¤à§à¦°: %s"
-#: ../cli/src/devices.c:337
-msgid "Speed"
-msgstr "গতি"
+#: ../cli/src/devices.c:453
+msgid "Device details"
+msgstr "ডিভাইসের বিবরণ"
-#: ../cli/src/devices.c:348
-#, c-format
-msgid ""
-"\n"
-" Wireless Properties\n"
-msgstr ""
-"\n"
-" বেতারের বৈশিষà§à¦Ÿà§à¦¯\n"
-
-#: ../cli/src/devices.c:353
-msgid "WEP Encryption"
-msgstr "WEP à¦à¦¨à¦•à§à¦°à¦¿à¦ªà¦¶à¦¨"
-
-#: ../cli/src/devices.c:355
-msgid "WPA Encryption"
-msgstr "WPA à¦à¦¨à¦•à§à¦°à¦¿à¦ªà¦¶à¦¨"
-
-#: ../cli/src/devices.c:357
-msgid "WPA2 Encryption"
-msgstr "WPA2 à¦à¦¨à¦•à§à¦°à¦¿à¦ªà¦¶à¦¨"
-
-#: ../cli/src/devices.c:359
-msgid "TKIP cipher"
-msgstr "TKIP সাইফার"
-
-#: ../cli/src/devices.c:361
-msgid "CCMP cipher"
-msgstr "CCMP সাইফার"
-
-#: ../cli/src/devices.c:368
-#, c-format
-msgid ""
-"\n"
-" Wireless Access Points %s\n"
-msgstr ""
-"\n"
-" বেতার অà§à¦¯à¦¾à¦•à¦¸à§‡à¦¸ পয়েনà§à¦Ÿ %s\n"
+#: ../cli/src/devices.c:483 ../cli/src/devices.c:827
+msgid "(unknown)"
+msgstr "(অজানা)"
-#: ../cli/src/devices.c:368
-msgid "(* = current AP)"
-msgstr "(* = বরà§à¦¤à¦®à¦¾à¦¨ অà§à¦¯à¦¾à¦•à¦¸à§‡à¦¸ পয়েনà§à¦Ÿ)"
+#: ../cli/src/devices.c:484
+msgid "unknown)"
+msgstr "অজানা)"
-#: ../cli/src/devices.c:374
+#: ../cli/src/devices.c:510
#, c-format
-msgid ""
-"\n"
-" Wired Properties\n"
-msgstr ""
-"\n"
-" তারযà§à¦•à§à¦¤ সংযোগের বৈশিষà§à¦Ÿà§à¦¯\n"
-
-#: ../cli/src/devices.c:377 ../cli/src/devices.c:379
-msgid "Carrier"
-msgstr "পরিবহণকারী"
+msgid "%u Mb/s"
+msgstr "%u মেগাবাইট/সেকেনà§à¦¡"
-#: ../cli/src/devices.c:377
+#. Print header
+#. "WIRED-PROPERTIES"
+#: ../cli/src/devices.c:583
msgid "on"
msgstr "চালà§"
-#: ../cli/src/devices.c:379
+#: ../cli/src/devices.c:583
msgid "off"
msgstr "বনà§à¦§"
-#: ../cli/src/devices.c:387
+#: ../cli/src/devices.c:710
#, c-format
-msgid ""
-"\n"
-" IPv4 Settings:\n"
-msgstr ""
-"\n"
-" IPv4 সংকà§à¦°à¦¾à¦¨à§à¦¤ বৈশিষà§à¦Ÿà§à¦¯:\n"
-
-#: ../cli/src/devices.c:395
-msgid "Address"
-msgstr "ঠিকানা"
-
-#: ../cli/src/devices.c:401
-msgid "Prefix"
-msgstr "পà§à¦°à¦¿-ফিকà§à¦¸"
+msgid "Error: 'dev status': %s"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'dev status': %s"
-#: ../cli/src/devices.c:405
-msgid "Gateway"
-msgstr "গেটওয়ে"
-
-#: ../cli/src/devices.c:416
-msgid "DNS"
-msgstr "DNS"
+#: ../cli/src/devices.c:712
+#, c-format
+msgid "Error: 'dev status': %s; allowed fields: %s"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'dev status': %s; অনà§à¦®à§‹à¦¦à¦¿à¦¤ কà§à¦·à§‡à¦¤à§à¦°: %s"
-#: ../cli/src/devices.c:458
+#: ../cli/src/devices.c:719
msgid "Status of devices"
msgstr "ডিভাইসের অবসà§à¦¥à¦¾"
-#: ../cli/src/devices.c:487
+#: ../cli/src/devices.c:747
#, c-format
msgid "Error: '%s' argument is missing."
msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' আরà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤à¥¤"
-#: ../cli/src/devices.c:516 ../cli/src/devices.c:655 ../cli/src/devices.c:729
+#: ../cli/src/devices.c:776 ../cli/src/devices.c:915 ../cli/src/devices.c:1035
#, c-format
msgid "Error: Device '%s' not found."
msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' ডিভাইস পাওয়া যায়নি।"
-#: ../cli/src/devices.c:539
+#: ../cli/src/devices.c:799
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "সাফলà§à¦¯: '%s' ডিভাইস সাফলà§à¦¯à§‡à¦° সাথে সংযোগ বিচà§à¦›à¦¿à¦¨à§à¦¨ করা হয়েছে।"
-#: ../cli/src/devices.c:564
+#: ../cli/src/devices.c:824
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' (%s) ডিভাইসের সাথে সংযোগ বিচà§à¦›à¦¿à¦¨à§à¦¨ করতে বà§à¦¯à¦°à§à¦¥: %s"
-#: ../cli/src/devices.c:572
+#: ../cli/src/devices.c:832
#, c-format
msgid "Device state: %d (%s)\n"
msgstr "ডিভাইসের অবসà§à¦¥à¦¾: %d (%s)\n"
-#: ../cli/src/devices.c:636
+#: ../cli/src/devices.c:896
#, c-format
msgid "Error: iface has to be specified."
msgstr "তà§à¦°à§à¦Ÿà¦¿: iface নিরà§à¦§à¦¾à¦°à¦£ করা আবশà§à¦¯à¦•à¥¤"
-#: ../cli/src/devices.c:736 ../cli/src/devices.c:746
-msgid "WiFi scan list"
-msgstr "ওয়াই-ফাই সà§à¦•à§à¦¯à¦¾à¦¨à§‡à¦° তালিকা"
-
-#: ../cli/src/devices.c:740
+#: ../cli/src/devices.c:1011
#, c-format
-msgid "Error: Device '%s' is not a WiFi device."
-msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' ডিভাইসটি ওয়াই-ফাই ডিভাইস নয়।"
-
-#: ../cli/src/devices.c:754
-msgid "Device:"
-msgstr "ডিভাইস:"
+msgid "Error: 'dev wifi': %s"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'dev wifi': %s"
-#: ../cli/src/devices.c:806
+#: ../cli/src/devices.c:1013
#, c-format
-msgid "Error: hwaddr has to be specified."
-msgstr "তà§à¦°à§à¦Ÿà¦¿: hwaddr নিরà§à¦§à¦¾à¦°à¦£ করা আবশà§à¦¯à¦•à¥¤"
+msgid "Error: 'dev wifi': %s; allowed fields: %s"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'dev wifi': %s; অনà§à¦®à§‹à¦¦à¦¿à¦¤ কà§à¦·à§‡à¦¤à§à¦°: %s"
-#: ../cli/src/devices.c:844
+#: ../cli/src/devices.c:1020
+msgid "WiFi scan list"
+msgstr "ওয়াই-ফাই সà§à¦•à§à¦¯à¦¾à¦¨à§‡à¦° তালিকা"
+
+#: ../cli/src/devices.c:1055 ../cli/src/devices.c:1109
#, c-format
msgid "Error: Access point with hwaddr '%s' not found."
msgstr "তà§à¦°à§à¦Ÿà¦¿: hwaddr '%s' সহ অà§à¦¯à¦¾à¦•à¦¸à§‡à¦¸ পয়েনà§à¦Ÿ পাওয়া যায়নি।"
-#: ../cli/src/devices.c:862
-#, c-format
-msgid "%u MHz"
-msgstr "%u MHz"
-
-#: ../cli/src/devices.c:863
+#: ../cli/src/devices.c:1072
#, c-format
-msgid "%u MB/s"
-msgstr "%u মেগাবাইট/সেকেনà§à¦¡"
-
-#: ../cli/src/devices.c:869 ../cli/src/devices.c:871
-msgid "AP parameters"
-msgstr "অà§à¦¯à¦¾à¦•à¦¸à§‡à¦¸ পয়েনà§à¦Ÿ সংকà§à¦°à¦¾à¦¨à§à¦¤ পরামিতি"
-
-#: ../cli/src/devices.c:873
-msgid "SSID:"
-msgstr "SSID:"
-
-#: ../cli/src/devices.c:874
-msgid "BSSID:"
-msgstr "BSSID:"
-
-#: ../cli/src/devices.c:875
-msgid "Frequency:"
-msgstr "ফà§à¦°à¦¿à¦•à§‹à§Ÿà§‡à¦¨à§à¦¸à¦¿:"
-
-#: ../cli/src/devices.c:876
-msgid "Mode:"
-msgstr "মোড:"
-
-#: ../cli/src/devices.c:876
-msgid "Ad-hoc"
-msgstr "অà§à¦¯à¦¾à¦¡-হক"
-
-#: ../cli/src/devices.c:876
-msgid "Infrastructure"
-msgstr "পরিকাঠামো"
-
-#: ../cli/src/devices.c:877
-msgid "Maximal bitrate:"
-msgstr "সরà§à¦¬à¦¾à¦§à¦¿à¦• বিট-রেট:"
-
-#: ../cli/src/devices.c:878
-msgid "Strength:"
-msgstr "কà§à¦·à¦®à¦¤à¦¾:"
-
-#: ../cli/src/devices.c:879
-msgid "Flags:"
-msgstr "ফà§à¦²à§à¦¯à¦¾à¦—:"
-
-#: ../cli/src/devices.c:879
-msgid "privacy"
-msgstr "গোপনীয়তা"
-
-#: ../cli/src/devices.c:880
-msgid "WPA flags:"
-msgstr "WPA ফà§à¦²à§à¦¯à¦¾à¦—:"
-
-#: ../cli/src/devices.c:881
-msgid "RSN flags:"
-msgstr "RSN ফà§à¦²à§à¦¯à¦¾à¦—:"
+msgid "Error: Device '%s' is not a WiFi device."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' ডিভাইসটি ওয়াই-ফাই ডিভাইস নয়।"
-#: ../cli/src/devices.c:907
+#: ../cli/src/devices.c:1136
#, c-format
msgid "Error: 'dev wifi' command '%s' is not valid."
msgstr "তà§à¦°à§à¦Ÿà¦¿: 'dev wifi' কমানà§à¦¡ '%s' বৈধ নয়।"
-#: ../cli/src/devices.c:943
+#: ../cli/src/devices.c:1183
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "তà§à¦°à§à¦Ÿà¦¿: 'dev' কমানà§à¦¡ '%s' বৈধ নয়।"
-#: ../cli/src/network-manager.c:46
+#: ../cli/src/network-manager.c:35
+msgid "RUNNING"
+msgstr "RUNNING"
+
+#. 1
+#: ../cli/src/network-manager.c:37
+msgid "WIFI-HARDWARE"
+msgstr "WIFI-HARDWARE"
+
+#. 2
+#: ../cli/src/network-manager.c:38
+msgid "WIFI"
+msgstr "WIFI"
+
+#. 3
+#: ../cli/src/network-manager.c:39
+msgid "WWAN-HARDWARE"
+msgstr "WWAN-HARDWARE"
+
+#. 4
+#: ../cli/src/network-manager.c:40
+msgid "WWAN"
+msgstr "WWAN"
+
+#: ../cli/src/network-manager.c:62
#, c-format
msgid ""
"Usage: nmcli nm { COMMAND | help }\n"
@@ -729,89 +889,91 @@ msgstr ""
" wwan [on|off]\n"
"\n"
-#: ../cli/src/network-manager.c:67
+#: ../cli/src/network-manager.c:83
msgid "asleep"
msgstr "নিদà§à¦°à¦¿à¦¤"
-#: ../cli/src/network-manager.c:69
+#: ../cli/src/network-manager.c:85
msgid "connecting"
msgstr "সংযোগ করা হচà§à¦›à§‡"
-#: ../cli/src/network-manager.c:93 ../cli/src/network-manager.c:94
-#: ../cli/src/network-manager.c:95 ../cli/src/network-manager.c:96
-#: ../cli/src/network-manager.c:143 ../cli/src/network-manager.c:160
-msgid "enabled"
-msgstr "সকà§à¦°à¦¿à§Ÿ"
+#: ../cli/src/network-manager.c:125
+#, c-format
+msgid "Error: 'nm status': %s"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'nm status': %s"
-#: ../cli/src/network-manager.c:93 ../cli/src/network-manager.c:94
-#: ../cli/src/network-manager.c:95 ../cli/src/network-manager.c:96
-#: ../cli/src/network-manager.c:143 ../cli/src/network-manager.c:160
-msgid "disabled"
-msgstr "নিষà§à¦•à§à¦°à¦¿à§Ÿ"
+#: ../cli/src/network-manager.c:127
+#, c-format
+msgid "Error: 'nm status': %s; allowed fields: %s"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'nm status': %s; অনà§à¦®à§‹à¦¦à¦¿à¦¤ কà§à¦·à§‡à¦¤à§à¦°: %s"
-#: ../cli/src/network-manager.c:102
+#: ../cli/src/network-manager.c:134
msgid "NetworkManager status"
msgstr "NetworkManager-র অবসà§à¦¥à¦¾"
-#: ../cli/src/network-manager.c:104
-msgid "NM running:"
-msgstr "NM চলমান:"
+#. 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
+msgid "enabled"
+msgstr "সকà§à¦°à¦¿à§Ÿ"
+
+#: ../cli/src/network-manager.c:140 ../cli/src/network-manager.c:141
+#: ../cli/src/network-manager.c:142 ../cli/src/network-manager.c:143
+#: ../cli/src/network-manager.c:211 ../cli/src/network-manager.c:243
+msgid "disabled"
+msgstr "নিষà§à¦•à§à¦°à¦¿à§Ÿ"
-#: ../cli/src/network-manager.c:104
+#: ../cli/src/network-manager.c:148
msgid "running"
msgstr "চলমান"
-#: ../cli/src/network-manager.c:104
+#: ../cli/src/network-manager.c:148
msgid "not running"
msgstr "চলমান নয়"
-#: ../cli/src/network-manager.c:105
-msgid "NM state:"
-msgstr "NM-র অবসà§à¦¥à¦¾:"
-
-#: ../cli/src/network-manager.c:106
-msgid "NM wireless hardware:"
-msgstr "NM-র বেতার সংকà§à¦°à¦¾à¦¨à§à¦¤ হারà§à¦¡à¦“য়à§à¦¯à¦¾à¦°:"
-
-#. no argument, show current state
-#: ../cli/src/network-manager.c:107 ../cli/src/network-manager.c:143
-msgid "NM wireless:"
-msgstr "NM-র বেতার:"
-
-#: ../cli/src/network-manager.c:108
-msgid "NM WWAN hardware:"
-msgstr "NM WWAN হারà§à¦¡à¦“য়à§à¦¯à¦¾à¦°:"
+#: ../cli/src/network-manager.c:201 ../cli/src/network-manager.c:233
+#, c-format
+msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: '--fields' মান '%s' à¦à¦‡à¦–ানে বৈধ নয়; অনà§à¦®à§‹à¦¦à¦¿à¦¤ কà§à¦·à§‡à¦¤à§à¦°: %s"
-#. no argument, show current state
-#: ../cli/src/network-manager.c:109 ../cli/src/network-manager.c:160
-msgid "NM WWAN:"
-msgstr "NM WWAN:"
+#: ../cli/src/network-manager.c:209
+msgid "WiFi enabled"
+msgstr "WiFi সকà§à¦°à¦¿à§Ÿ"
-#: ../cli/src/network-manager.c:150
+#: ../cli/src/network-manager.c:220
#, c-format
msgid "Error: invalid 'wifi' parameter: '%s'."
msgstr "তà§à¦°à§à¦Ÿà¦°: অবৈধ 'wifi' পরামিতি: '%s'।"
-#: ../cli/src/network-manager.c:167
+#: ../cli/src/network-manager.c:241
+msgid "WWAN enabled"
+msgstr "WWAN সকà§à¦°à¦¿à§Ÿ"
+
+#: ../cli/src/network-manager.c:252
#, c-format
msgid "Error: invalid 'wwan' parameter: '%s'."
msgstr "তà§à¦°à§à¦Ÿà¦¿: অবৈধ 'wwan' পরামিতি: '%s'।"
-#: ../cli/src/network-manager.c:178
+#: ../cli/src/network-manager.c:263
#, c-format
msgid "Error: 'nm' command '%s' is not valid."
msgstr "তà§à¦°à§à¦Ÿà¦¿: 'nm' কমানà§à¦¡ '%s' বৈধ নয়।"
-#: ../cli/src/nmcli.c:65
+#: ../cli/src/nmcli.c:69
#, c-format
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
"\n"
"OPTIONS\n"
-" -t[erse] terse output\n"
-" -p[retty] pretty output\n"
-" -v[ersion] show program version\n"
-" -h[elp] print this help\n"
+" -t[erse] terse output\n"
+" -p[retty] pretty output\n"
+" -m[ode] tabular|multiline output mode\n"
+" -f[ields] <field1,field2,...>|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"
@@ -822,10 +984,14 @@ msgstr ""
"বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦ªà§à¦°à¦£à¦¾à¦²à§€: %s [OPTIONS] OBJECT { COMMAND | help }\n"
"\n"
"OPTIONS\n"
-" -t[erse] terse output\n"
-" -p[retty] pretty output\n"
-" -v[ersion] show program version\n"
-" -h[elp] print this help\n"
+" -t[erse] terse output\n"
+" -p[retty] pretty output\n"
+" -m[ode] tabular|multiline output mode\n"
+" -f[ields] <field1,field2,...>|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"
@@ -833,35 +999,165 @@ msgstr ""
" dev devices managed by NetworkManager\n"
"\n"
-#: ../cli/src/nmcli.c:106
+#: ../cli/src/nmcli.c:113
+#, c-format
+msgid "Error: Object '%s' is unknown, try 'nmcli help'."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' অবজেকà§à¦Ÿ অজানা, 'nmcli help' বà§à¦¯à¦¬à¦¹à¦¾à¦°à§‡à¦° পà§à¦°à¦šà§‡à¦·à§à¦Ÿà¦¾ করà§à¦¨à¥¤"
+
+#: ../cli/src/nmcli.c:143
+#, c-format
+msgid "Error: Option '--terse' is specified the second time."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: '--terse' বিকলà§à¦ªà¦Ÿà¦¿ দà§à¦‡à¦¬à¦¾à¦° উলà§à¦²à¦¿à¦–িত হয়েছে।"
+
+#: ../cli/src/nmcli.c:148
#, c-format
-msgid "Object '%s' is unknown, try 'nmcli help'."
-msgstr "'%s' অবজেকà§à¦Ÿ অজানা, 'nmcli help' বà§à¦¯à¦¬à¦¹à¦¾à¦°à§‡à¦° পà§à¦°à¦šà§‡à¦·à§à¦Ÿà¦¾ করà§à¦¨à¥¤"
+msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: '--terse' ও '--pretty' বিকলà§à¦ª দà§à¦Ÿà¦¿ à¦à¦• অপরের উপর নিরà§à¦­à¦°à¦¶à§€à¦² নয়।"
-#: ../cli/src/nmcli.c:139
+#: ../cli/src/nmcli.c:156
+#, c-format
+msgid "Error: Option '--pretty' is specified the second time."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: '--pretty' বিকলà§à¦ªà¦Ÿà¦¿ দà§à¦‡à¦¬à¦¾à¦° উলà§à¦²à¦¿à¦–িত হয়েছে।"
+
+#: ../cli/src/nmcli.c:161
+#, c-format
+msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: '--pretty' ও '--terse' বিকলà§à¦ª দà§à¦Ÿà¦¿ à¦à¦• অপরের উপর নিরà§à¦­à¦°à¦¶à§€à¦² নয়।"
+
+#: ../cli/src/nmcli.c:171 ../cli/src/nmcli.c:187
+#, c-format
+msgid "Error: missing argument for '%s' option."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' বিকলà§à¦ªà§‡à¦° কà§à¦·à§‡à¦¤à§à¦°à§‡ আরà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤à¥¤"
+
+#: ../cli/src/nmcli.c:180 ../cli/src/nmcli.c:196
+#, c-format
+msgid "Error: '%s' is not valid argument for '%s' option."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' আরà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿà¦Ÿà¦¿ '%s' বিকলà§à¦ªà§‡à¦° জনà§à¦¯ বৈধ নয়।"
+
+#: ../cli/src/nmcli.c:203
+#, c-format
+msgid "Error: fields for '%s' options are missing."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' বিকলà§à¦ªà§‡à¦° কà§à¦·à§‡à¦¤à§à¦° অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤à¥¤"
+
+#: ../cli/src/nmcli.c:209
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "nmcli সরঞà§à¦œà¦¾à¦®, সংসà§à¦•à¦°à¦£ %s\n"
-#: ../cli/src/nmcli.c:145
+#: ../cli/src/nmcli.c:215
#, c-format
-msgid "Option '%s' is unknown, try 'nmcli -help'."
-msgstr "'%s' বিকলà§à¦ªà¦Ÿà¦¿ অজানা, 'nmcli -help' বà§à¦¯à¦¬à¦¹à¦¾à¦°à§‡à¦° পà§à¦°à§Ÿà§‹à¦— করà§à¦¨à¥¤"
+msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' বিকলà§à¦ªà¦Ÿà¦¿ অজানা, 'nmcli -help' বà§à¦¯à¦¬à¦¹à¦¾à¦°à§‡à¦° পà§à¦°à§Ÿà§‹à¦— করà§à¦¨à¥¤"
-#: ../cli/src/nmcli.c:164
+#: ../cli/src/nmcli.c:234
#, c-format
msgid "Caught signal %d, shutting down..."
msgstr "%d সংকেত পà§à¦°à¦¾à¦ªà§à¦¤ হয়েছে, বনà§à¦§ করা হচà§à¦›à§‡..."
-#: ../cli/src/nmcli.c:189
+#: ../cli/src/nmcli.c:259
#, c-format
msgid "Error: Could not connect to NetworkManager."
msgstr "তà§à¦°à§à¦Ÿà¦¿: NetworkManager-র সাথে সংযোগ সà§à¦¥à¦¾à¦ªà¦¨ করতে বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../cli/src/nmcli.c:205
+#: ../cli/src/nmcli.c:275
msgid "Success"
msgstr "সফল"
+#: ../cli/src/settings.c:407
+#, c-format
+msgid "%d (hex-ascii-key)"
+msgstr "%d (hex-ascii-key)"
+
+#: ../cli/src/settings.c:409
+#, c-format
+msgid "%d (104/128-bit passphrase)"
+msgstr "%d (১০৪/১২৮-বিট পরিচয়পংকà§à¦¤à¦¿)"
+
+#: ../cli/src/settings.c:412
+#, c-format
+msgid "%d (unknown)"
+msgstr "%d (অজানা)"
+
+#: ../cli/src/settings.c:438
+msgid "0 (unknown)"
+msgstr "০ (অজানা)"
+
+#: ../cli/src/settings.c:444
+msgid "any, "
+msgstr "যে কোনো, "
+
+#: ../cli/src/settings.c:446
+msgid "900 MHz, "
+msgstr "৯০০ MHz, "
+
+#: ../cli/src/settings.c:448
+msgid "1800 MHz, "
+msgstr "১৮০০ MHz, "
+
+#: ../cli/src/settings.c:450
+msgid "1900 MHz, "
+msgstr "১৯০০ MHz, "
+
+#: ../cli/src/settings.c:452
+msgid "850 MHz, "
+msgstr "৮৫০ MHz, "
+
+#: ../cli/src/settings.c:454
+msgid "WCDMA 3GPP UMTS 2100 MHz, "
+msgstr "WCDMA 3GPP UMTS ২১০০ MHz, "
+
+#: ../cli/src/settings.c:456
+msgid "WCDMA 3GPP UMTS 1800 MHz, "
+msgstr "WCDMA 3GPP UMTS ১৮০০ MHz, "
+
+#: ../cli/src/settings.c:458
+msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
+msgstr "WCDMA 3GPP UMTS ১৭০০/২১০০ MHz, "
+
+#: ../cli/src/settings.c:460
+msgid "WCDMA 3GPP UMTS 800 MHz, "
+msgstr "WCDMA 3GPP UMTS ৮০০ MHz, "
+
+#: ../cli/src/settings.c:462
+msgid "WCDMA 3GPP UMTS 850 MHz, "
+msgstr "WCDMA 3GPP UMTS ৮৫০ MHz, "
+
+#: ../cli/src/settings.c:464
+msgid "WCDMA 3GPP UMTS 900 MHz, "
+msgstr "WCDMA 3GPP UMTS ৯০০ MHz, "
+
+#: ../cli/src/settings.c:466
+msgid "WCDMA 3GPP UMTS 1700 MHz, "
+msgstr "WCDMA 3GPP UMTS ১৭০০ MHz, "
+
+#: ../cli/src/settings.c:546 ../cli/src/settings.c:708
+msgid "auto"
+msgstr "সà§à¦¬à§Ÿà¦‚কà§à¦°à¦¿à§Ÿ"
+
+#: ../cli/src/settings.c:704 ../cli/src/settings.c:707 ../cli/src/utils.c:172
+msgid "not set"
+msgstr "নিরà§à¦§à¦¾à¦°à¦¿à¦¤ হয়নি"
+
+#: ../cli/src/utils.c:124
+#, c-format
+msgid "field '%s' has to be alone"
+msgstr "'%s' কà§à¦·à§‡à¦¤à§à¦°à¦Ÿà¦¿ পৃথক থাকা আবশà§à¦¯à¦•"
+
+#: ../cli/src/utils.c:127
+#, c-format
+msgid "invalid field '%s'"
+msgstr "অবৈধ কà§à¦·à§‡à¦¤à§à¦° '%s'"
+
+#: ../cli/src/utils.c:146
+#, c-format
+msgid "Option '--terse' requires specifying '--fields'"
+msgstr "'--terse' বিকলà§à¦ªà§‡à¦° কà§à¦·à§‡à¦¤à§à¦°à§‡ '--fields' নিরà§à¦§à¦¾à¦°à¦£ করা আবশà§à¦¯à¦•"
+
+#: ../cli/src/utils.c:150
+#, c-format
+msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
+msgstr "'--terse' বিকলà§à¦ªà§‡à¦° কà§à¦·à§‡à¦¤à§à¦°à§‡ '--fields' বিকলà§à¦ªà§‡à¦° সà§à¦¨à¦¿à¦°à§à¦¦à¦¿à¦·à§à¦Ÿ মান উলà§à¦²à§‡à¦– করা আবশà§à¦¯à¦•, '%s' বà§à¦¯à¦¬à¦¹à¦¾à¦° করা যাবে না"
+
#: ../libnm-util/crypto.c:120
#, c-format
msgid "PEM key file had no end tag '%s'."
@@ -1177,26 +1473,26 @@ msgstr "PKCS#12 ফাইল যাচাই করতে বà§à¦¯à¦°à§à¦¥: %d
msgid "Could not generate random data."
msgstr "রâ€à§à¦¯à¦¾à¦¨à§à¦¡ তথà§à¦¯ নিরà§à¦®à¦¾à¦£ করতে বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../libnm-util/nm-utils.c:1924
+#: ../libnm-util/nm-utils.c:1925
#, c-format
msgid "Not enough memory to make encryption key."
msgstr "à¦à¦¨à¦•à§à¦°à¦¿à¦ªà¦¶à¦¨-কি নিরà§à¦®à¦¾à¦£à§‡à¦° জনà§à¦¯ পরà§à¦¯à¦¾à¦ªà§à¦¤ মেমরি অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤à¥¤"
-#: ../libnm-util/nm-utils.c:2034
+#: ../libnm-util/nm-utils.c:2035
msgid "Could not allocate memory for PEM file creation."
msgstr "PEM ফাইল নিরà§à¦®à¦¾à¦£à§‡à¦° জনà§à¦¯ মেমরি বরাদà§à¦¦ করতে বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../libnm-util/nm-utils.c:2046
+#: ../libnm-util/nm-utils.c:2047
#, c-format
msgid "Could not allocate memory for writing IV to PEM file."
msgstr "PEM ফাইলের মধà§à¦¯à§‡ IV লেখার জনà§à¦¯ মেমরি বরাদà§à¦¦ করতে বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../libnm-util/nm-utils.c:2058
+#: ../libnm-util/nm-utils.c:2059
#, c-format
msgid "Could not allocate memory for writing encrypted key to PEM file."
msgstr "PEM ফাইলের মধà§à¦¯à§‡ à¦à¦¨à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ করা কি লেখার জনà§à¦¯ মেমরি বরাদà§à¦¦ করা যায়নি।"
-#: ../libnm-util/nm-utils.c:2077
+#: ../libnm-util/nm-utils.c:2078
#, c-format
msgid "Could not allocate memory for PEM file data."
msgstr "PEM ফাইলের তথà§à¦¯à§‡ সংরকà§à¦·à¦£à§‡à¦° জনà§à¦¯ মেমরি বরাদà§à¦¦ করতে বà§à¦¯à¦°à§à¦¥à¥¤"
@@ -1291,13 +1587,13 @@ msgstr "লগের অজানা সà§à¦¤à¦° '%s'"
msgid "Unknown log domain '%s'"
msgstr "অজানা লগ ডোমেইন '%s'"
-#: ../src/named-manager/nm-named-manager.c:343
+#: ../src/dns-manager/nm-dns-manager.c:343
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr ""
"উলà§à¦²à§‡à¦–à§à¦¯: libc resolver দà§à¦¬à¦¾à¦°à¦¾ ৩-টির বেশি নেম-সারà§à¦­à¦¾à¦° সমরà§à¦¥à¦¿à¦¤ না হওয়ার সমà§à¦­à¦¾à¦¬à¦¨à¦¾ "
"রয়েছে।"
-#: ../src/named-manager/nm-named-manager.c:345
+#: ../src/dns-manager/nm-dns-manager.c:345
msgid "The nameservers listed below may not be recognized."
msgstr "নিমà§à¦¨à¦²à¦¿à¦–িত নেম-সারà§à¦­à¦¾à¦°à¦—à§à¦²à¦¿ সনাকà§à¦¤ না হওয়ার সমà§à¦­à¦¾à¦¬à¦¨à¦¾ রয়েছে।"
@@ -1306,7 +1602,7 @@ msgstr "নিমà§à¦¨à¦²à¦¿à¦–িত নেম-সারà§à¦­à¦¾à¦°à¦—à§à¦²à
msgid "Auto %s"
msgstr "সà§à¦¬à§Ÿà¦‚কà§à¦°à¦¿à§Ÿ %s"
-#: ../system-settings/plugins/ifcfg-rh/reader.c:3254
+#: ../system-settings/plugins/ifcfg-rh/reader.c:3256
msgid "System"
msgstr "সিসà§à¦Ÿà§‡à¦®"
diff --git a/po/ca.po b/po/ca.po
index d3d9053df7..ebe35d5592 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -335,13 +335,13 @@ msgstr ""
"# Fusionat des de %s\n"
"\n"
-#: ../src/named-manager/nm-named-manager.c:256
+#: ../src/dns-manager/nm-dns-manager.c:256
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr ""
"NOTA: pot ser que el sistema de resolució de la libc no funcioni amb més de "
"3 servidors de noms."
-#: ../src/named-manager/nm-named-manager.c:258
+#: ../src/dns-manager/nm-dns-manager.c:258
msgid "The nameservers listed below may not be recognized."
msgstr "Pot ser que no es reconeguin els servidors de noms llistats més avall."
diff --git a/po/cs.po b/po/cs.po
index 1be6b82e1a..ccea6bdbe0 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -1,26 +1,101 @@
# Czech translation of NetworkManager.
-# Copyright (C) 2004, 2005, 2006, 2008 the author(s) of NetworkManager.
+# Copyright (C) 2004, 2005, 2006, 2008, 2009, 2010 the author(s) of NetworkManager.
# Copyright (C) 2004, 2005, 2006 Miloslav Trmac <mitr@volny.cz>.
# This file is distributed under the same license as the NetworkManager package.
-# Miloslav Trmac <mitr@volny.cz>, 2004 - 2006.
+# Miloslav Trmac <mitr@volny.cz>, 2004, 2005, 2006.
# Jakub Friedl <jfriedl@suse.cz>, 2006.
# Jiří Eischmann <jiri@eischmann.cz>, 2008.
# Marek Černocký <marek@manet.cz>, 2010.
+# Vladimír Machat <atrament@seznam.cz>, 2010.
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: 2010-04-09 03:24+0000\n"
-"PO-Revision-Date: 2010-04-23 13:02+0200\n"
-"Last-Translator: Marek Černocký <marek@manet.cz>\n"
+"POT-Creation-Date: 2010-09-22 03:25+0000\n"
+"PO-Revision-Date: 2010-10-10 13:00+0100\n"
+"Last-Translator: Vladimír Machat <atrament@seznam.cz>\n"
"Language-Team: Czech <gnome-cs-list@gnome.org>\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==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-#: ../cli/src/connections.c:86
+#: ../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
+msgid "NAME"
+msgstr "NÃZEV"
+
+#. 0
+#: ../cli/src/connections.c:61 ../cli/src/connections.c:76
+msgid "UUID"
+msgstr "UUID"
+
+#. 1
+#: ../cli/src/connections.c:62
+msgid "DEVICES"
+msgstr "ZAŘÃZENÃ"
+
+#. 2
+#: ../cli/src/connections.c:63 ../cli/src/connections.c:78
+msgid "SCOPE"
+msgstr "ROZSAH"
+
+#. 3
+#: ../cli/src/connections.c:64
+msgid "DEFAULT"
+msgstr "VÃCHOZÃ"
+
+#. 4
+#: ../cli/src/connections.c:65
+msgid "DBUS-SERVICE"
+msgstr "SLUŽBA-DBUS"
+
+#. 5
+#: ../cli/src/connections.c:66
+msgid "SPEC-OBJECT"
+msgstr "OBJEKT-SPEC"
+
+#. 6
+#: ../cli/src/connections.c:67
+msgid "VPN"
+msgstr "VPN"
+
+#. 1
+#. 0
+#. 1
+#: ../cli/src/connections.c:77 ../cli/src/devices.c:62 ../cli/src/devices.c:90
+msgid "TYPE"
+msgstr "TYP"
+
+#. 3
+#: ../cli/src/connections.c:79
+msgid "TIMESTAMP"
+msgstr "ÄŒASOVÉ-RAZÃTKO"
+
+#. 4
+#: ../cli/src/connections.c:80
+msgid "TIMESTAMP-REAL"
+msgstr "ÄŒASOVÉ-RAZÃTKO-REÃLNÉ"
+
+#. 5
+#: ../cli/src/connections.c:81
+msgid "AUTOCONNECT"
+msgstr "AUTOMATICKY-PŘIPOJIT"
+
+#. 6
+#: ../cli/src/connections.c:82
+msgid "READONLY"
+msgstr "JEN-KE-ÄŒTENÃ"
+
+#. 7
+#: ../cli/src/connections.c:83
+msgid "DBUS-PATH"
+msgstr "CESTA-DBUS"
+
+#: ../cli/src/connections.c:159
#, c-format
msgid ""
"Usage: nmcli con { COMMAND | help }\n"
@@ -41,310 +116,524 @@ msgstr ""
"timeout <Äasový_limit>]\n"
" down id <id> | uuid <id>\n"
-#: ../cli/src/connections.c:158
-msgid "Connections"
-msgstr "Připojení"
-
-#: ../cli/src/connections.c:158 ../cli/src/connections.c:160
-#: ../cli/src/connections.c:196 ../cli/src/connections.c:198
-#: ../cli/src/connections.c:205 ../cli/src/connections.c:207
-#: ../cli/src/devices.c:298 ../cli/src/devices.c:458 ../cli/src/devices.c:460
-msgid "Type"
-msgstr "Typ"
-
-#: ../cli/src/connections.c:158 ../cli/src/connections.c:160
-#: ../cli/src/connections.c:196 ../cli/src/connections.c:198
-#: ../cli/src/connections.c:205 ../cli/src/connections.c:207
-#: ../cli/src/connections.c:297 ../cli/src/connections.c:299
-msgid "UUID"
-msgstr "UUID"
+#: ../cli/src/connections.c:199 ../cli/src/connections.c:540
+#, c-format
+msgid "Error: 'con list': %s"
+msgstr "Chyba: „con list“: %s"
+
+#: ../cli/src/connections.c:201 ../cli/src/connections.c:542
+#, c-format
+msgid "Error: 'con list': %s; allowed fields: %s"
+msgstr "Chyba: „con status“: %s; povolená pole: %s"
+
+#: ../cli/src/connections.c:209
+msgid "Connection details"
+msgstr "Detaily připojení"
+
+#: ../cli/src/connections.c:384 ../cli/src/connections.c:605
+msgid "system"
+msgstr "systém"
+
+#: ../cli/src/connections.c:384 ../cli/src/connections.c:605
+msgid "user"
+msgstr "uživatel"
+
+#: ../cli/src/connections.c:386
+msgid "never"
+msgstr "nikdy"
+
+#. "CAPABILITIES"
+#. Print header
+#. "WIFI-PROPERTIES"
+#: ../cli/src/connections.c:387 ../cli/src/connections.c:388
+#: ../cli/src/connections.c:606 ../cli/src/connections.c:609
+#: ../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
+msgid "yes"
+msgstr "ano"
-#: ../cli/src/connections.c:158 ../cli/src/connections.c:160
-#: ../cli/src/connections.c:196 ../cli/src/connections.c:198
-#: ../cli/src/connections.c:205 ../cli/src/connections.c:207
-#: ../cli/src/connections.c:297 ../cli/src/connections.c:299
-msgid "Name"
-msgstr "Název"
+#: ../cli/src/connections.c:387 ../cli/src/connections.c:388
+#: ../cli/src/connections.c:606 ../cli/src/connections.c:609
+#: ../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
+msgid "no"
+msgstr "ne"
-#: ../cli/src/connections.c:163
-#, c-format
-msgid "System connections:\n"
-msgstr "Systémová připojení:\n"
+#: ../cli/src/connections.c:461 ../cli/src/connections.c:504
+msgid "System connections"
+msgstr "Systémové připojení"
-#: ../cli/src/connections.c:167
-#, c-format
-msgid "User connections:\n"
-msgstr "Uživatelská připojení:\n"
+#: ../cli/src/connections.c:466 ../cli/src/connections.c:517
+msgid "User connections"
+msgstr "Uživatelské připojení"
-#: ../cli/src/connections.c:178 ../cli/src/connections.c:967
-#: ../cli/src/connections.c:983 ../cli/src/connections.c:992
-#: ../cli/src/connections.c:1003 ../cli/src/connections.c:1085
-#: ../cli/src/devices.c:604 ../cli/src/devices.c:614 ../cli/src/devices.c:699
-#: ../cli/src/devices.c:785 ../cli/src/devices.c:792
+#: ../cli/src/connections.c:478 ../cli/src/connections.c:1338
+#: ../cli/src/connections.c:1354 ../cli/src/connections.c:1363
+#: ../cli/src/connections.c:1374 ../cli/src/connections.c:1459
+#: ../cli/src/devices.c:962 ../cli/src/devices.c:972 ../cli/src/devices.c:1074
+#: ../cli/src/devices.c:1081
#, c-format
msgid "Error: %s argument is missing."
msgstr "Chyba: schází argument %s."
-#: ../cli/src/connections.c:189
+#: ../cli/src/connections.c:491
#, c-format
msgid "Error: %s - no such connection."
msgstr "Chyba: %s - takové připojení neexistuje."
-#: ../cli/src/connections.c:196
-msgid "System-wide connections"
-msgstr "Připojení v rámci systému"
-
-#: ../cli/src/connections.c:205
-msgid "User connections"
-msgstr "Uživatelská připojení"
-
-#: ../cli/src/connections.c:212 ../cli/src/connections.c:1016
-#: ../cli/src/connections.c:1103 ../cli/src/devices.c:446
-#: ../cli/src/devices.c:494 ../cli/src/devices.c:628 ../cli/src/devices.c:706
-#: ../cli/src/devices.c:798
+#: ../cli/src/connections.c:523 ../cli/src/connections.c:1387
+#: ../cli/src/connections.c:1477 ../cli/src/devices.c:785
+#: ../cli/src/devices.c:852 ../cli/src/devices.c:986 ../cli/src/devices.c:1087
#, c-format
msgid "Unknown parameter: %s\n"
msgstr "Neznámý parametr: %s\n"
-#: ../cli/src/connections.c:221
+#: ../cli/src/connections.c:532
#, c-format
msgid "Error: no valid parameter specified."
msgstr "Chyba: nezadán žádný platný parametr."
-#. FIXME: Fix the output
-#: ../cli/src/connections.c:268 ../cli/src/devices.c:302
-#: ../cli/src/devices.c:321 ../cli/src/devices.c:353 ../cli/src/devices.c:355
-#: ../cli/src/devices.c:357 ../cli/src/devices.c:359 ../cli/src/devices.c:361
-msgid "yes"
-msgstr "ano"
+#: ../cli/src/connections.c:547 ../cli/src/connections.c:1580
+#: ../cli/src/devices.c:1293 ../cli/src/network-manager.c:359
+#, c-format
+msgid "Error: %s."
+msgstr "Chyba: %s."
-#: ../cli/src/connections.c:268 ../cli/src/devices.c:304
-msgid "no"
-msgstr "ne"
+#: ../cli/src/connections.c:653
+#, c-format
+msgid "Error: 'con status': %s"
+msgstr "Chyba: „con status“: %s"
-#: ../cli/src/connections.c:297
+#: ../cli/src/connections.c:655
+#, c-format
+msgid "Error: 'con status': %s; allowed fields: %s"
+msgstr "Chyba: „con status“: %s; povolená pole: %s"
+
+#: ../cli/src/connections.c:662
msgid "Active connections"
msgstr "Aktivní připojení"
-#: ../cli/src/connections.c:297 ../cli/src/connections.c:299
-#: ../cli/src/devices.c:302 ../cli/src/devices.c:304
-msgid "Default"
-msgstr "Výchozí"
-
-#: ../cli/src/connections.c:297 ../cli/src/connections.c:299
-msgid "Service"
-msgstr "Služba"
-
-#: ../cli/src/connections.c:297 ../cli/src/connections.c:299
-msgid "Devices"
-msgstr "Zařízení"
-
-#: ../cli/src/connections.c:659
+#: ../cli/src/connections.c:1030
#, c-format
msgid "no active connection on device '%s'"
msgstr "žádné aktivní připojení nebo zařízení „%s“"
-#: ../cli/src/connections.c:667
+#: ../cli/src/connections.c:1038
#, c-format
msgid "no active connection or device"
msgstr "žádné aktivní připojení nebo zařízení"
-#: ../cli/src/connections.c:730
+#: ../cli/src/connections.c:1088
+#, c-format
+msgid "device '%s' not compatible with connection '%s'"
+msgstr "zařízení „%s“ není kompatibilní s připojením „%s“"
+
+#: ../cli/src/connections.c:1090
+#, c-format
+msgid "no device found for connection '%s'"
+msgstr "pro připojení „%s“ nebylo nalezeno žádné zařízení"
+
+#: ../cli/src/connections.c:1101
msgid "activating"
msgstr "aktivuje se"
-#: ../cli/src/connections.c:732
+#: ../cli/src/connections.c:1103
msgid "activated"
msgstr "aktivováno"
-#: ../cli/src/connections.c:735 ../cli/src/connections.c:758
-#: ../cli/src/connections.c:791 ../cli/src/devices.c:111
-#: ../cli/src/network-manager.c:76 ../cli/src/network-manager.c:98
+#: ../cli/src/connections.c:1106 ../cli/src/connections.c:1129
+#: ../cli/src/connections.c:1162 ../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
msgid "unknown"
-msgstr "neznámo"
+msgstr "neznámé"
-#: ../cli/src/connections.c:744
+#: ../cli/src/connections.c:1115
msgid "VPN connecting (prepare)"
msgstr "VPN se připojuje (příprava)"
-#: ../cli/src/connections.c:746
+#: ../cli/src/connections.c:1117
msgid "VPN connecting (need authentication)"
msgstr "VPN se připojuje (požaduje ověření)"
-#: ../cli/src/connections.c:748
+#: ../cli/src/connections.c:1119
msgid "VPN connecting"
msgstr "VPN se připojuje"
-#: ../cli/src/connections.c:750
+#: ../cli/src/connections.c:1121
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN se připojuje (získává se nastavení IP)"
-#: ../cli/src/connections.c:752
+#: ../cli/src/connections.c:1123
msgid "VPN connected"
msgstr "VPN připojena"
-#: ../cli/src/connections.c:754
+#: ../cli/src/connections.c:1125
msgid "VPN connection failed"
msgstr "VPN se nezdařilo připojit"
-#: ../cli/src/connections.c:756
+#: ../cli/src/connections.c:1127
msgid "VPN disconnected"
msgstr "VPN odpojena"
-#: ../cli/src/connections.c:767
+#: ../cli/src/connections.c:1138
msgid "unknown reason"
msgstr "neznámý důvod"
-#: ../cli/src/connections.c:769
+#: ../cli/src/connections.c:1140
msgid "none"
msgstr "žádný"
-#: ../cli/src/connections.c:771
+#: ../cli/src/connections.c:1142
msgid "the user was disconnected"
msgstr "uživatel byl odpojen"
-#: ../cli/src/connections.c:773
+#: ../cli/src/connections.c:1144
msgid "the base network connection was interrupted"
msgstr "základní síťové připojení bylo přerušeno"
-#: ../cli/src/connections.c:775
+#: ../cli/src/connections.c:1146
msgid "the VPN service stopped unexpectedly"
msgstr "služba VPN neoÄekávanÄ› zastavena"
-#: ../cli/src/connections.c:777
+#: ../cli/src/connections.c:1148
msgid "the VPN service returned invalid configuration"
msgstr "služba VPN vrátila neplatné nastavení"
-#: ../cli/src/connections.c:779
+#: ../cli/src/connections.c:1150
msgid "the connection attempt timed out"
msgstr "pokusu o pÅ™ipojení vyprÅ¡el Äasový limit"
-#: ../cli/src/connections.c:781
+#: ../cli/src/connections.c:1152
msgid "the VPN service did not start in time"
msgstr "služba VPN se nespustila v Äasovém limitu"
-#: ../cli/src/connections.c:783
+#: ../cli/src/connections.c:1154
msgid "the VPN service failed to start"
msgstr "službu VPN se nezdařilo spustit"
-#: ../cli/src/connections.c:785
+#: ../cli/src/connections.c:1156
msgid "no valid VPN secrets"
msgstr "žádná platná utajení VPN"
-#: ../cli/src/connections.c:787
+#: ../cli/src/connections.c:1158
msgid "invalid VPN secrets"
msgstr "neplatná utajení VPN"
-#: ../cli/src/connections.c:789
+#: ../cli/src/connections.c:1160
msgid "the connection was removed"
msgstr "připojení odstraněno"
-#: ../cli/src/connections.c:803
+#: ../cli/src/connections.c:1174
#, c-format
msgid "state: %s\n"
msgstr "stav: %s\n"
-#: ../cli/src/connections.c:806 ../cli/src/connections.c:832
+#: ../cli/src/connections.c:1177 ../cli/src/connections.c:1203
#, c-format
msgid "Connection activated\n"
msgstr "Připojení aktivováno\n"
-#: ../cli/src/connections.c:809
+#: ../cli/src/connections.c:1180
#, c-format
msgid "Error: Connection activation failed."
msgstr "Chyba: Selhala aktivace připojení."
-#: ../cli/src/connections.c:828
+#: ../cli/src/connections.c:1199
#, c-format
msgid "state: %s (%d)\n"
msgstr "stav: %s (%d)\n"
-#: ../cli/src/connections.c:838
+#: ../cli/src/connections.c:1209
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "Chyba: Selhala aktivace připojení: %s"
-#: ../cli/src/connections.c:855 ../cli/src/devices.c:551
+#: ../cli/src/connections.c:1226 ../cli/src/devices.c:909
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "Chyba: Časový limit %d sekund vypršel."
-#: ../cli/src/connections.c:898
+#: ../cli/src/connections.c:1269
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "Chyba: Selhala aktivace připojení: %s"
-#: ../cli/src/connections.c:912
+#: ../cli/src/connections.c:1283
#, c-format
msgid "Error: Obtaining active connection for '%s' failed."
msgstr "Chyba: Získání aktivního připojení pro „%s“ selhalo."
-#: ../cli/src/connections.c:921
+#: ../cli/src/connections.c:1292
#, c-format
msgid "Active connection state: %s\n"
msgstr "Stav aktivního připojení: %s\n"
-#: ../cli/src/connections.c:922
+#: ../cli/src/connections.c:1293
#, c-format
msgid "Active connection path: %s\n"
msgstr "Cesta aktivního připojení: %s\n"
-#: ../cli/src/connections.c:976 ../cli/src/connections.c:1094
+#: ../cli/src/connections.c:1347 ../cli/src/connections.c:1468
#, c-format
msgid "Error: Unknown connection: %s."
msgstr "Chyba: Neznámé připojení: %s."
-#: ../cli/src/connections.c:1011 ../cli/src/devices.c:622
+#: ../cli/src/connections.c:1382 ../cli/src/devices.c:980
#, c-format
msgid "Error: timeout value '%s' is not valid."
msgstr "Chyba: hodnota Äasového limitu „%s“ není platná."
-#: ../cli/src/connections.c:1024 ../cli/src/connections.c:1111
+#: ../cli/src/connections.c:1395 ../cli/src/connections.c:1485
#, c-format
msgid "Error: id or uuid has to be specified."
msgstr "Chyba: nebylo urÄeno id nebo uuid."
-#: ../cli/src/connections.c:1044
+#: ../cli/src/connections.c:1415
#, c-format
msgid "Error: No suitable device found: %s."
msgstr "Chyba: Nenalezeno vhodné zařízení: %s."
-#: ../cli/src/connections.c:1046
+#: ../cli/src/connections.c:1417
#, c-format
msgid "Error: No suitable device found."
msgstr "Chyba: Nenalezeno vhodné zařízení."
-#: ../cli/src/connections.c:1138
+#: ../cli/src/connections.c:1512
#, c-format
msgid "Warning: Connection not active\n"
msgstr "Varování: Připojení není aktivní\n"
-#: ../cli/src/connections.c:1189
+#: ../cli/src/connections.c:1569
#, c-format
msgid "Error: 'con' command '%s' is not valid."
msgstr "Chyba: příkaz „%s“ není pro „con“ platný."
-#: ../cli/src/connections.c:1216
+#: ../cli/src/connections.c:1605
#, c-format
msgid "Error: could not connect to D-Bus."
msgstr "Chyba: nelze se připojit ke sběrnici D-Bus."
-#: ../cli/src/connections.c:1223
+#: ../cli/src/connections.c:1612
#, c-format
msgid "Error: Could not get system settings."
msgstr "Chyba: Nelze získat systémová nastavení."
-#: ../cli/src/connections.c:1231
+#: ../cli/src/connections.c:1620
#, c-format
msgid "Error: Could not get user settings."
msgstr "Chyba: Nelze získat uživatelská nastavení."
-#: ../cli/src/connections.c:1241
+#: ../cli/src/connections.c:1630
#, c-format
msgid "Error: Can't obtain connections: settings services are not running."
msgstr "Chyba: Nelze získat připojení: služba správy nastavení neběží."
+#. 0
+#. 9
+#: ../cli/src/devices.c:61 ../cli/src/devices.c:89 ../cli/src/devices.c:184
+msgid "DEVICE"
+msgstr "ZAŘÃZENÃ"
+
+#. 1
+#. 4
+#. 0
+#: ../cli/src/devices.c:63 ../cli/src/devices.c:93
+#: ../cli/src/network-manager.c:36
+msgid "STATE"
+msgstr "STAV"
+
+#: ../cli/src/devices.c:72
+msgid "GENERAL"
+msgstr "OBECNÉ"
+
+#. 0
#: ../cli/src/devices.c:73
+msgid "CAPABILITIES"
+msgstr "SCHOPNOSTI"
+
+#. 1
+#: ../cli/src/devices.c:74
+msgid "WIFI-PROPERTIES"
+msgstr "VLASTNOSTI-WIFI"
+
+#. 2
+#: ../cli/src/devices.c:75
+msgid "AP"
+msgstr "AP"
+
+#. 3
+#: ../cli/src/devices.c:76
+msgid "WIRED-PROPERTIES"
+msgstr "DRÃTOVÉ-VLASTNOSTI"
+
+#. 4
+#: ../cli/src/devices.c:77
+msgid "IP4-SETTINGS"
+msgstr "NASTAVENÃ-IP4"
+
+#. 5
+#: ../cli/src/devices.c:78
+msgid "IP4-DNS"
+msgstr "DNS-IP4"
+
+#. 6
+#: ../cli/src/devices.c:79
+msgid "IP6-SETTINGS"
+msgstr "NASTAVENÃ-IP6"
+
+#. 7
+#: ../cli/src/devices.c:80
+msgid "IP6-DNS"
+msgstr "DNS-IP6"
+
+#. 2
+#: ../cli/src/devices.c:91
+msgid "DRIVER"
+msgstr "OVLADAČ"
+
+#. 3
+#: ../cli/src/devices.c:92
+msgid "HWADDR"
+msgstr "HWADRESA"
+
+#. 0
+#: ../cli/src/devices.c:102
+msgid "CARRIER-DETECT"
+msgstr "DETEKCE-SIGNÃLU"
+
+#. 1
+#: ../cli/src/devices.c:103
+msgid "SPEED"
+msgstr "RYCHLOST"
+
+#. 0
+#: ../cli/src/devices.c:112
+msgid "CARRIER"
+msgstr "SIGNÃL"
+
+#. 0
+#: ../cli/src/devices.c:122
+msgid "WEP"
+msgstr "WEP"
+
+#. 1
+#: ../cli/src/devices.c:123
+msgid "WPA"
+msgstr "WPA"
+
+#. 2
+#: ../cli/src/devices.c:124
+msgid "WPA2"
+msgstr "WPA2"
+
+#. 3
+#: ../cli/src/devices.c:125
+msgid "TKIP"
+msgstr "TKIP"
+
+#. 4
+#: ../cli/src/devices.c:126
+msgid "CCMP"
+msgstr "CCMP"
+
+#. 0
+#: ../cli/src/devices.c:135 ../cli/src/devices.c:146
+msgid "ADDRESS"
+msgstr "ADRESA"
+
+#. 1
+#: ../cli/src/devices.c:136 ../cli/src/devices.c:147
+msgid "PREFIX"
+msgstr "PREFIX"
+
+#. 2
+#: ../cli/src/devices.c:137 ../cli/src/devices.c:148
+msgid "GATEWAY"
+msgstr "BRÃNA"
+
+#. 0
+#: ../cli/src/devices.c:157 ../cli/src/devices.c:166
+msgid "DNS"
+msgstr "DNS"
+
+#. 0
+#: ../cli/src/devices.c:175
+msgid "SSID"
+msgstr "SSID"
+
+#. 1
+#: ../cli/src/devices.c:176
+msgid "BSSID"
+msgstr "BSSID"
+
+#. 2
+#: ../cli/src/devices.c:177
+msgid "MODE"
+msgstr "REŽIM"
+
+#. 3
+#: ../cli/src/devices.c:178
+msgid "FREQ"
+msgstr "FREKV"
+
+#. 4
+#: ../cli/src/devices.c:179
+msgid "RATE"
+msgstr "POMÄšR"
+
+#. 5
+#: ../cli/src/devices.c:180
+msgid "SIGNAL"
+msgstr "SIGNÃL"
+
+#. 6
+#: ../cli/src/devices.c:181
+msgid "SECURITY"
+msgstr "BEZPEÄŒNOST"
+
+#. 7
+#: ../cli/src/devices.c:182
+msgid "WPA-FLAGS"
+msgstr "PŘÃZNAKY-WPA"
+
+#. 8
+#: ../cli/src/devices.c:183
+msgid "RSN-FLAGS"
+msgstr "PŘÃZNAKY-RSN"
+
+#. 10
+#: ../cli/src/devices.c:185
+msgid "ACTIVE"
+msgstr "AKTIVNÃ"
+
+#: ../cli/src/devices.c:208
#, c-format
msgid ""
"Usage: nmcli dev { COMMAND | help }\n"
@@ -354,7 +643,7 @@ msgid ""
" status\n"
" list [iface <iface>]\n"
" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] | apinfo iface <iface> hwaddr <hwaddr>]\n"
+" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
"\n"
msgstr ""
"Použití: nmcli dev {PŘÃKAZ | help}\n"
@@ -364,457 +653,389 @@ msgstr ""
" status\n"
" list [iface <rozhraní>]\n"
" disconnect iface <rozhraní> [--nowait] [--timeout <Äasový_limit>]\n"
-" wifi [list [iface <rozhraní>] | apinfo iface <rozhraní> hwaddr "
-"<hw_adresa>]\n"
+" wifi [list [iface <rozhraní>] [hwaddr <hw_adresa>]]\n"
"\n"
-#: ../cli/src/devices.c:93
+#: ../cli/src/devices.c:228
msgid "unmanaged"
msgstr "není pod správou"
-#: ../cli/src/devices.c:95
+#: ../cli/src/devices.c:230
msgid "unavailable"
msgstr "nedostupné"
-#: ../cli/src/devices.c:97 ../cli/src/network-manager.c:73
+#: ../cli/src/devices.c:232 ../cli/src/network-manager.c:91
msgid "disconnected"
msgstr "odpojeno"
-#: ../cli/src/devices.c:99
+#: ../cli/src/devices.c:234
msgid "connecting (prepare)"
msgstr "připojuje se (příprava)"
-#: ../cli/src/devices.c:101
+#: ../cli/src/devices.c:236
msgid "connecting (configuring)"
msgstr "připojuje se (nastavování)"
-#: ../cli/src/devices.c:103
+#: ../cli/src/devices.c:238
msgid "connecting (need authentication)"
msgstr "připojuje se (požadováno ověření)"
-#: ../cli/src/devices.c:105
+#: ../cli/src/devices.c:240
msgid "connecting (getting IP configuration)"
msgstr "připojuje se (získává se nastavení IP)"
-#: ../cli/src/devices.c:107 ../cli/src/network-manager.c:71
+#: ../cli/src/devices.c:242 ../cli/src/network-manager.c:89
msgid "connected"
msgstr "připojeno"
-#: ../cli/src/devices.c:109
+#: ../cli/src/devices.c:244
msgid "connection failed"
msgstr "připojení se nezdařilo"
-#: ../cli/src/devices.c:132 ../cli/src/devices.c:876
+#: ../cli/src/devices.c:267 ../cli/src/devices.c:424
msgid "Unknown"
msgstr "Neznámý"
-#. print them
-#: ../cli/src/devices.c:164 ../cli/src/devices.c:266 ../cli/src/devices.c:861
-#: ../cli/src/devices.c:879
+#: ../cli/src/devices.c:299
msgid "(none)"
msgstr "(nic)"
-#: ../cli/src/devices.c:209
+#: ../cli/src/devices.c:324
#, c-format
msgid "%s: error converting IP4 address 0x%X"
msgstr "%s: chyba převodu adresy IP4 0x%X"
-#: ../cli/src/devices.c:238
+#: ../cli/src/devices.c:393
#, c-format
-msgid "%s, %s, Freq %d MHz, Rate %d Mb/s, Strength %d"
-msgstr "%s, %s, Frekv %d MHz, Rychlost %d Mb/s, Síla sig %d"
-
-#: ../cli/src/devices.c:239
-msgid "Ad-Hoc"
-msgstr "Ad-Hoc"
-
-#: ../cli/src/devices.c:248
-msgid ", Encrypted: "
-msgstr ", Šifrováno: "
-
-#: ../cli/src/devices.c:253
-msgid " WEP"
-msgstr " WEP"
+msgid "%u MHz"
+msgstr "%u MHz"
-#: ../cli/src/devices.c:255
-msgid " WPA"
-msgstr " WPA"
+#: ../cli/src/devices.c:394
+#, c-format
+msgid "%u MB/s"
+msgstr "%u MB/s"
-#: ../cli/src/devices.c:257
-msgid " WPA2"
-msgstr " WPA2"
+#: ../cli/src/devices.c:403
+msgid "Encrypted: "
+msgstr "Šifrováno: "
-#: ../cli/src/devices.c:260
-msgid " Enterprise"
-msgstr " Podnikové"
+#: ../cli/src/devices.c:408
+msgid "WEP "
+msgstr "WEP "
-#: ../cli/src/devices.c:294 ../cli/src/devices.c:458 ../cli/src/devices.c:460
-msgid "Device"
-msgstr "Zařízení"
+#: ../cli/src/devices.c:410
+msgid "WPA "
+msgstr "WPA "
-#: ../cli/src/devices.c:299
-msgid "Driver"
-msgstr "OvladaÄ"
+#: ../cli/src/devices.c:412
+msgid "WPA2 "
+msgstr "WPA2 "
-#: ../cli/src/devices.c:299 ../cli/src/devices.c:567
-msgid "(unknown)"
-msgstr "(neznámo)"
+#: ../cli/src/devices.c:415
+msgid "Enterprise "
+msgstr "Podnikové "
-#: ../cli/src/devices.c:300 ../cli/src/devices.c:458 ../cli/src/devices.c:460
-msgid "State"
-msgstr "Stav"
-
-#: ../cli/src/devices.c:313
-msgid "HW Address"
-msgstr "HW adresa"
-
-#: ../cli/src/devices.c:319
-#, c-format
-msgid ""
-"\n"
-" Capabilities:\n"
-msgstr ""
-"\n"
-" Schopnosti:\n"
+#: ../cli/src/devices.c:424
+msgid "Ad-Hoc"
+msgstr "Ad-Hoc"
-#: ../cli/src/devices.c:321
-msgid "Carrier Detect"
-msgstr "Detekce nosného signálu"
+#: ../cli/src/devices.c:424
+msgid "Infrastructure"
+msgstr "Infrastruktura"
-#: ../cli/src/devices.c:336
+#: ../cli/src/devices.c:486
#, c-format
-msgid "%u Mb/s"
-msgstr "%u Mb/s"
+msgid "Error: 'dev list': %s"
+msgstr "Chyba: „dev list“: %s"
-#: ../cli/src/devices.c:337
-msgid "Speed"
-msgstr "Rychlost"
-
-#: ../cli/src/devices.c:348
+#: ../cli/src/devices.c:488
#, c-format
-msgid ""
-"\n"
-" Wireless Properties\n"
-msgstr ""
-"\n"
-" Vlastnosti bezdrátové Äásti\n"
-
-#: ../cli/src/devices.c:353
-msgid "WEP Encryption"
-msgstr "Šifrování WEP"
-
-#: ../cli/src/devices.c:355
-msgid "WPA Encryption"
-msgstr "Šifrování WPA"
-
-#: ../cli/src/devices.c:357
-msgid "WPA2 Encryption"
-msgstr "Šifrování WPA2"
+msgid "Error: 'dev list': %s; allowed fields: %s"
+msgstr "Chyba: „dev list“: %s; povolená pole: %s"
-#: ../cli/src/devices.c:359
-msgid "TKIP cipher"
-msgstr "Å ifra TKIP"
+#: ../cli/src/devices.c:497
+msgid "Device details"
+msgstr "Detaily zařízení"
-#: ../cli/src/devices.c:361
-msgid "CCMP cipher"
-msgstr "Å ifra CCMP"
-
-#: ../cli/src/devices.c:368
-#, c-format
-msgid ""
-"\n"
-" Wireless Access Points %s\n"
-msgstr ""
-"\n"
-" Bezdrátový přístupový bod %s\n"
+#: ../cli/src/devices.c:527 ../cli/src/devices.c:925
+msgid "(unknown)"
+msgstr "(neznámo)"
-#: ../cli/src/devices.c:368
-msgid "(* = current AP)"
-msgstr "(* = aktuální přístupový bod)"
+#: ../cli/src/devices.c:528
+msgid "unknown)"
+msgstr "neznámé)"
-#: ../cli/src/devices.c:374
+#: ../cli/src/devices.c:554
#, c-format
-msgid ""
-"\n"
-" Wired Properties\n"
-msgstr ""
-"\n"
-" Vlastnosti drátové Äásti\n"
-
-#: ../cli/src/devices.c:377 ../cli/src/devices.c:379
-msgid "Carrier"
-msgstr "Nosný signál"
+msgid "%u Mb/s"
+msgstr "%u Mb/s"
-#: ../cli/src/devices.c:377
+#. Print header
+#. "WIRED-PROPERTIES"
+#: ../cli/src/devices.c:627
msgid "on"
msgstr "zapnut"
-#: ../cli/src/devices.c:379
+#: ../cli/src/devices.c:627
msgid "off"
msgstr "vypnut"
-#: ../cli/src/devices.c:387
+#: ../cli/src/devices.c:808
#, c-format
-msgid ""
-"\n"
-" IPv4 Settings:\n"
-msgstr ""
-"\n"
-" Nastavení IPv4:\n"
-
-#: ../cli/src/devices.c:395
-msgid "Address"
-msgstr "Adresa"
-
-#: ../cli/src/devices.c:401
-msgid "Prefix"
-msgstr "PÅ™edÄíslí"
+msgid "Error: 'dev status': %s"
+msgstr "Chyba: „dev status“: %s"
-#: ../cli/src/devices.c:405
-msgid "Gateway"
-msgstr "Brána"
-
-#: ../cli/src/devices.c:416
-msgid "DNS"
-msgstr "DNS"
+#: ../cli/src/devices.c:810
+#, c-format
+msgid "Error: 'dev status': %s; allowed fields: %s"
+msgstr "Chyba: „dev status“: %s; povolená pole: %s"
-#: ../cli/src/devices.c:458
+#: ../cli/src/devices.c:817
msgid "Status of devices"
msgstr "Stav zařízení"
-#: ../cli/src/devices.c:487
+#: ../cli/src/devices.c:845
#, c-format
msgid "Error: '%s' argument is missing."
msgstr "Chyba: schází argument „%s“."
-#: ../cli/src/devices.c:516 ../cli/src/devices.c:655 ../cli/src/devices.c:729
+#: ../cli/src/devices.c:874 ../cli/src/devices.c:1013
+#: ../cli/src/devices.c:1136
#, c-format
msgid "Error: Device '%s' not found."
msgstr "Chyba: Zařízení „%s“ nenalezeno."
-#: ../cli/src/devices.c:539
+#: ../cli/src/devices.c:897
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "Úspěch: Zařízení „%s“ úspěšně odpojeno."
-#: ../cli/src/devices.c:564
+#: ../cli/src/devices.c:922
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "Chyba: Odpojení zařízení „%s“ (%s) selhalo: %s"
-#: ../cli/src/devices.c:572
+#: ../cli/src/devices.c:930
#, c-format
msgid "Device state: %d (%s)\n"
msgstr "Stav zařízení: %d (%s)\n"
-#: ../cli/src/devices.c:636
+#: ../cli/src/devices.c:994
#, c-format
msgid "Error: iface has to be specified."
msgstr "Chyba: nebylo urÄeno rozhraní."
-#: ../cli/src/devices.c:736 ../cli/src/devices.c:746
-msgid "WiFi scan list"
-msgstr "Seznam prohledání WiFi"
-
-#: ../cli/src/devices.c:740
+#: ../cli/src/devices.c:1112
#, c-format
-msgid "Error: Device '%s' is not a WiFi device."
-msgstr "Chyba: Zařízení „%s“ není zařízení WiFi."
-
-#: ../cli/src/devices.c:754
-msgid "Device:"
-msgstr "Zařízení:"
+msgid "Error: 'dev wifi': %s"
+msgstr "Chyba: „dev wifi“: %s"
-#: ../cli/src/devices.c:806
+#: ../cli/src/devices.c:1114
#, c-format
-msgid "Error: hwaddr has to be specified."
-msgstr "Chyba: musí být urÄena hardwarová adresa."
+msgid "Error: 'dev wifi': %s; allowed fields: %s"
+msgstr "Chyba: „dev wifi“: %s; povolená pole: %s"
-#: ../cli/src/devices.c:844
+#: ../cli/src/devices.c:1121
+msgid "WiFi scan list"
+msgstr "Seznam prohledání WiFi"
+
+#: ../cli/src/devices.c:1156 ../cli/src/devices.c:1210
#, c-format
msgid "Error: Access point with hwaddr '%s' not found."
msgstr "Chyba: Přístupový bod s hardwarovou adresou „%s“ nenalezen."
-#: ../cli/src/devices.c:862
+#: ../cli/src/devices.c:1173
#, c-format
-msgid "%u MHz"
-msgstr "%u MHz"
+msgid "Error: Device '%s' is not a WiFi device."
+msgstr "Chyba: Zařízení „%s“ není zařízení WiFi."
-#: ../cli/src/devices.c:863
+#: ../cli/src/devices.c:1237
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
-
-#: ../cli/src/devices.c:869 ../cli/src/devices.c:871
-msgid "AP parameters"
-msgstr "Parametry přístupového bodu"
-
-#: ../cli/src/devices.c:873
-msgid "SSID:"
-msgstr "SSID:"
-
-#: ../cli/src/devices.c:874
-msgid "BSSID:"
-msgstr "BSSID:"
-
-#: ../cli/src/devices.c:875
-msgid "Frequency:"
-msgstr "KmitoÄet:"
-
-#: ../cli/src/devices.c:876
-msgid "Mode:"
-msgstr "Režim:"
-
-#: ../cli/src/devices.c:876
-msgid "Ad-hoc"
-msgstr "Ad-hoc"
-
-#: ../cli/src/devices.c:876
-msgid "Infrastructure"
-msgstr "Infrastruktura"
-
-#: ../cli/src/devices.c:877
-msgid "Maximal bitrate:"
-msgstr "Max. přenosová rychlost:"
+msgid "Error: 'dev wifi' command '%s' is not valid."
+msgstr "Chyba: příkaz „%s“ není pro „dev wifi“ platný."
-#: ../cli/src/devices.c:878
-msgid "Strength:"
-msgstr "Síla signálu:"
+#: ../cli/src/devices.c:1284
+#, c-format
+msgid "Error: 'dev' command '%s' is not valid."
+msgstr "Chyba: příkaz „%s“ není pro „dev“ platný."
-#: ../cli/src/devices.c:879
-msgid "Flags:"
-msgstr "Příznaky:"
+#: ../cli/src/network-manager.c:35
+msgid "RUNNING"
+msgstr "BĚŽÃCÃ"
-#: ../cli/src/devices.c:879
-msgid "privacy"
-msgstr "soukromé"
+#. 1
+#: ../cli/src/network-manager.c:37
+msgid "NET-ENABLED"
+msgstr "SÃŤ-POVOLENA"
-#: ../cli/src/devices.c:880
-msgid "WPA flags:"
-msgstr "Příznaky WPA:"
+#. 2
+#: ../cli/src/network-manager.c:38
+msgid "WIFI-HARDWARE"
+msgstr "WIFI-HARDWARE"
-#: ../cli/src/devices.c:881
-msgid "RSN flags:"
-msgstr "Příznaky RSN:"
+#. 3
+#: ../cli/src/network-manager.c:39
+msgid "WIFI"
+msgstr "WIFI"
-#: ../cli/src/devices.c:907
-#, c-format
-msgid "Error: 'dev wifi' command '%s' is not valid."
-msgstr "Chyba: příkaz „%s“ není pro „dev wifi“ platný."
+#. 4
+#: ../cli/src/network-manager.c:40
+msgid "WWAN-HARDWARE"
+msgstr "WWAN-HARDWARE"
-#: ../cli/src/devices.c:943
-#, c-format
-msgid "Error: 'dev' command '%s' is not valid."
-msgstr "Chyba: příkaz „%s“ není pro „dev“ platný."
+#. 5
+#: ../cli/src/network-manager.c:41
+msgid "WWAN"
+msgstr "WWAN"
-#: ../cli/src/network-manager.c:46
+#: ../cli/src/network-manager.c:64
#, c-format
msgid ""
"Usage: nmcli nm { COMMAND | help }\n"
"\n"
-" COMMAND := { status | sleep | wakeup | wifi | wwan }\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"
"\n"
msgstr ""
-"Použití: nmcli nm {PŘÃKAZ | help}\n"
+"Použití: nmcli nm { PŘÃKAZ | help}\n"
"\n"
-" PŘÃKAZ := {status | sleep | wakeup | wifi | wwan}\n"
+" PŘÃKAZ := {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"
"\n"
-#: ../cli/src/network-manager.c:67
+#: ../cli/src/network-manager.c:85
msgid "asleep"
msgstr "uspán"
-#: ../cli/src/network-manager.c:69
+#: ../cli/src/network-manager.c:87
msgid "connecting"
msgstr "připojuje se"
-#: ../cli/src/network-manager.c:93 ../cli/src/network-manager.c:94
-#: ../cli/src/network-manager.c:95 ../cli/src/network-manager.c:96
-#: ../cli/src/network-manager.c:143 ../cli/src/network-manager.c:160
-msgid "enabled"
-msgstr "povoleno"
+#: ../cli/src/network-manager.c:128
+#, c-format
+msgid "Error: 'nm status': %s"
+msgstr "Chyba: „nm status“: %s"
-#: ../cli/src/network-manager.c:93 ../cli/src/network-manager.c:94
-#: ../cli/src/network-manager.c:95 ../cli/src/network-manager.c:96
-#: ../cli/src/network-manager.c:143 ../cli/src/network-manager.c:160
-msgid "disabled"
-msgstr "zakázáno"
+#: ../cli/src/network-manager.c:130
+#, c-format
+msgid "Error: 'nm status': %s; allowed fields: %s"
+msgstr "Chyba: „nm status“: %s; povolená pole: %s"
-#: ../cli/src/network-manager.c:102
+#: ../cli/src/network-manager.c:137
msgid "NetworkManager status"
msgstr "Stav správce sítě NetworkManager"
-#: ../cli/src/network-manager.c:104
-msgid "NM running:"
-msgstr "Běh NM:"
+#. Print header
+#: ../cli/src/network-manager.c:144 ../cli/src/network-manager.c:145
+#: ../cli/src/network-manager.c:146 ../cli/src/network-manager.c:147
+#: ../cli/src/network-manager.c:154 ../cli/src/network-manager.c:247
+#: ../cli/src/network-manager.c:296 ../cli/src/network-manager.c:328
+msgid "enabled"
+msgstr "povoleno"
+
+#: ../cli/src/network-manager.c:144 ../cli/src/network-manager.c:145
+#: ../cli/src/network-manager.c:146 ../cli/src/network-manager.c:147
+#: ../cli/src/network-manager.c:154 ../cli/src/network-manager.c:247
+#: ../cli/src/network-manager.c:296 ../cli/src/network-manager.c:328
+msgid "disabled"
+msgstr "zakázáno"
-#: ../cli/src/network-manager.c:104
+#: ../cli/src/network-manager.c:152
msgid "running"
msgstr "běží"
-#: ../cli/src/network-manager.c:104
+#: ../cli/src/network-manager.c:152
msgid "not running"
msgstr "neběží"
-#: ../cli/src/network-manager.c:105
-msgid "NM state:"
-msgstr "Stav NM:"
+#: ../cli/src/network-manager.c:175
+#, c-format
+msgid "Error: Couldn't connect to system bus: %s"
+msgstr "Chyba: Nelze se připojit k systémové sběrnici: %s"
+
+#: ../cli/src/network-manager.c:186
+#, c-format
+msgid "Error: Couldn't create D-Bus object proxy."
+msgstr "Chyba: Nelze vytvořit proxy objekt D-Bus."
+
+#: ../cli/src/network-manager.c:192
+#, c-format
+msgid "Error in sleep: %s"
+msgstr "Chyba při uspání: %s"
-#: ../cli/src/network-manager.c:106
-msgid "NM wireless hardware:"
-msgstr "Bezdrátový hardware NM:"
+#: ../cli/src/network-manager.c:237 ../cli/src/network-manager.c:286
+#: ../cli/src/network-manager.c:318
+#, c-format
+msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
+msgstr ""
+"Chyba: hodnota „%s“ pÅ™epínaÄe „--fields“ je zde neplatná; povolená pole: %s"
-#. no argument, show current state
-#: ../cli/src/network-manager.c:107 ../cli/src/network-manager.c:143
-msgid "NM wireless:"
-msgstr "Bezdrátové sítě NM:"
+#: ../cli/src/network-manager.c:245
+msgid "Networking enabled"
+msgstr "Síť povolena"
-#: ../cli/src/network-manager.c:108
-msgid "NM WWAN hardware:"
-msgstr "Hardware WWAN NM"
+#: ../cli/src/network-manager.c:256
+#, c-format
+msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
+msgstr "Chyba: neplatný parametr „enable“: „%s“; použijte „true“ nebo „false“."
+
+#: ../cli/src/network-manager.c:265
+#, c-format
+msgid "Error: Sleeping status is not exported by NetworkManager."
+msgstr "Chyba: Network Manager neexportuje stav uspání."
+
+#: ../cli/src/network-manager.c:273
+#, c-format
+msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
+msgstr "Chyba: neplatný parametr „sleep“: „%s“; použijte „true“ nebo „false“."
-#. no argument, show current state
-#: ../cli/src/network-manager.c:109 ../cli/src/network-manager.c:160
-msgid "NM WWAN:"
-msgstr "Sítě WWAN NM:"
+#: ../cli/src/network-manager.c:294
+msgid "WiFi enabled"
+msgstr "WiFi povoleno"
-#: ../cli/src/network-manager.c:150
+#: ../cli/src/network-manager.c:305
#, c-format
msgid "Error: invalid 'wifi' parameter: '%s'."
-msgstr "Chyba: neplatný parametr pro „wifi“: „%s“"
+msgstr "Chyba: neplatný parametr pro „wifi“: „%s“."
-#: ../cli/src/network-manager.c:167
+#: ../cli/src/network-manager.c:326
+msgid "WWAN enabled"
+msgstr "WWAN povoleno"
+
+#: ../cli/src/network-manager.c:337
#, c-format
msgid "Error: invalid 'wwan' parameter: '%s'."
-msgstr "Chyba: neplatný parametr pro „wwan“: „%s“"
+msgstr "Chyba: neplatný parametr pro „wwan“: „%s“."
-#: ../cli/src/network-manager.c:178
+#: ../cli/src/network-manager.c:348
#, c-format
msgid "Error: 'nm' command '%s' is not valid."
msgstr "Chyba: příkaz „%s“ není pro „nm“ platný."
-#: ../cli/src/nmcli.c:65
+#: ../cli/src/nmcli.c:69
#, c-format
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
"\n"
"OPTIONS\n"
-" -t[erse] terse output\n"
-" -p[retty] pretty output\n"
-" -v[ersion] show program version\n"
-" -h[elp] print this help\n"
+" -t[erse] terse output\n"
+" -p[retty] pretty output\n"
+" -m[ode] tabular|multiline output mode\n"
+" -f[ields] <field1,field2,...>|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"
@@ -825,46 +1046,181 @@ msgstr ""
"Použití: %s [PŘEPÃNAÄŒE] OBJEKT {PŘÃKAZ | help}\n"
"\n"
"PŘEPÃNAÄŒE\n"
-" -t[erse] struÄný výpis\n"
-" -p[retty] hezký výpis\n"
-" -v[ersion] zobrazit verzi programu\n"
-" -h[elp] zobrazit tuto nápovědu\n"
+" -t[erse] struÄný výpis\n"
+" -p[retty] hezký výpis\n"
+" -m[ode] tabular|multiline režim výstupu\n"
+" -f[ields] <field1,field2,...>|all|common specifikace polí výstupu\n"
+" -e[scape] yes|no oddÄ›lovaÄe sloupců v hodnotách\n"
+" -v[ersion] zobrazit verzi programu\n"
+" -h[elp] zobrazit tuto nápovědu\n"
"\n"
"OBJEKT\n"
" nm stav NetworkManageru\n"
-" con připojení v NetworkManageru\n"
+" con připojení NetworkManageru\n"
" dev zařízení spravovaná NetworkManagerem\n"
"\n"
-#: ../cli/src/nmcli.c:106
+#: ../cli/src/nmcli.c:113
+#, c-format
+msgid "Error: Object '%s' is unknown, try 'nmcli help'."
+msgstr "Chyba: Objekt „%s“ je neznámý, zkuste „nmcli help“."
+
+#: ../cli/src/nmcli.c:143
+#, c-format
+msgid "Error: Option '--terse' is specified the second time."
+msgstr "Chyba: PÅ™epínaÄ â€ž--terse“ je specifikován dvakrát."
+
+#: ../cli/src/nmcli.c:148
#, c-format
-msgid "Object '%s' is unknown, try 'nmcli help'."
-msgstr "Objekt „%s“ je neznámý, zkuste „nmcli help“."
+msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
+msgstr "Chyba: PÅ™epínaÄ â€ž--terse“ je vzájemnÄ› nesluÄitelný s „--pretty“."
-#: ../cli/src/nmcli.c:139
+#: ../cli/src/nmcli.c:156
+#, c-format
+msgid "Error: Option '--pretty' is specified the second time."
+msgstr "Chyba: PÅ™epínaÄ â€ž--pretty“ je specifikován dvakrát."
+
+#: ../cli/src/nmcli.c:161
+#, c-format
+msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
+msgstr "Chyba: PÅ™epínaÄ â€ž--pretty“ je vzájemnÄ› nesluÄitelný s „--terse“."
+
+#: ../cli/src/nmcli.c:171 ../cli/src/nmcli.c:187
+#, c-format
+msgid "Error: missing argument for '%s' option."
+msgstr "Chyba: Chybí argument pro pÅ™epínaÄ â€ž%s“."
+
+#: ../cli/src/nmcli.c:180 ../cli/src/nmcli.c:196
+#, c-format
+msgid "Error: '%s' is not valid argument for '%s' option."
+msgstr "Chyba: „%s“ je neplatný argument pro pÅ™epínaÄ â€ž%s“."
+
+#: ../cli/src/nmcli.c:203
+#, c-format
+msgid "Error: fields for '%s' options are missing."
+msgstr "Chyba: pole pro pÅ™epínaÄe „%s“ chybí."
+
+#: ../cli/src/nmcli.c:209
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "nástroj nmcli, verze %s\n"
-#: ../cli/src/nmcli.c:145
+#: ../cli/src/nmcli.c:215
#, c-format
-msgid "Option '%s' is unknown, try 'nmcli -help'."
-msgstr "PÅ™epínaÄ â€ž%s“ je neznámý, zkuste „nmcli -help“."
+msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
+msgstr "Chyba: PÅ™epínaÄ â€ž%s“ je neznámý, zkuste „nmcli -help“."
-#: ../cli/src/nmcli.c:164
+#: ../cli/src/nmcli.c:234
#, c-format
msgid "Caught signal %d, shutting down..."
msgstr "Zachycen signál %d, vypíná se…"
-#: ../cli/src/nmcli.c:189
+#: ../cli/src/nmcli.c:259
#, c-format
msgid "Error: Could not connect to NetworkManager."
msgstr "Chyba: Nelze se připojit ke správci sítě NetworkManager."
-#: ../cli/src/nmcli.c:205
+#: ../cli/src/nmcli.c:275
msgid "Success"
msgstr "Úspěch"
+#: ../cli/src/settings.c:411
+#, c-format
+msgid "%d (hex-ascii-key)"
+msgstr "%d (hex-ascii-klíÄ)"
+
+#: ../cli/src/settings.c:413
+#, c-format
+msgid "%d (104/128-bit passphrase)"
+msgstr "%d (104/128bitové heslo)"
+
+#: ../cli/src/settings.c:416
+#, c-format
+msgid "%d (unknown)"
+msgstr "%d (neznámé)"
+
+#: ../cli/src/settings.c:442
+msgid "0 (unknown)"
+msgstr "0 (neznámé)"
+
+#: ../cli/src/settings.c:448
+msgid "any, "
+msgstr "jakékoliv, "
+
+#: ../cli/src/settings.c:450
+msgid "900 MHz, "
+msgstr "900 MHz, "
+
+#: ../cli/src/settings.c:452
+msgid "1800 MHz, "
+msgstr "1800 MHz, "
+
+#: ../cli/src/settings.c:454
+msgid "1900 MHz, "
+msgstr "1900 MHz, "
+
+#: ../cli/src/settings.c:456
+msgid "850 MHz, "
+msgstr "850 MHz, "
+
+#: ../cli/src/settings.c:458
+msgid "WCDMA 3GPP UMTS 2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 2100 MHz, "
+
+#: ../cli/src/settings.c:460
+msgid "WCDMA 3GPP UMTS 1800 MHz, "
+msgstr "WCDMA 3GPP UMTS 1800 MHz, "
+
+#: ../cli/src/settings.c:462
+msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
+
+#: ../cli/src/settings.c:464
+msgid "WCDMA 3GPP UMTS 800 MHz, "
+msgstr "WCDMA 3GPP UMTS 800 MHz, "
+
+#: ../cli/src/settings.c:466
+msgid "WCDMA 3GPP UMTS 850 MHz, "
+msgstr "WCDMA 3GPP UMTS 850 MHz, "
+
+#: ../cli/src/settings.c:468
+msgid "WCDMA 3GPP UMTS 900 MHz, "
+msgstr "WCDMA 3GPP UMTS 900 MHz, "
+
+#: ../cli/src/settings.c:470
+msgid "WCDMA 3GPP UMTS 1700 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700 MHz, "
+
+#: ../cli/src/settings.c:554 ../cli/src/settings.c:721
+msgid "auto"
+msgstr "automaticky"
+
+#: ../cli/src/settings.c:716 ../cli/src/settings.c:719
+#: ../cli/src/settings.c:720 ../cli/src/utils.c:172
+msgid "not set"
+msgstr "nenastaveno"
+
+#: ../cli/src/utils.c:124
+#, c-format
+msgid "field '%s' has to be alone"
+msgstr "pole „%s“ musí být samo"
+
+#: ../cli/src/utils.c:127
+#, c-format
+msgid "invalid field '%s'"
+msgstr "neplatné pole „%s“"
+
+#: ../cli/src/utils.c:146
+#, c-format
+msgid "Option '--terse' requires specifying '--fields'"
+msgstr "PÅ™epínaÄ â€ž--terse“ vyžaduje urÄení „--fields“"
+
+#: ../cli/src/utils.c:150
+#, c-format
+msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
+msgstr ""
+"PÅ™epínaÄ â€ž--terse“ vyžaduje urÄité hodnoty pÅ™epínaÄe „--fields“, ne „%s“"
+
#: ../libnm-util/crypto.c:120
#, c-format
msgid "PEM key file had no end tag '%s'."
@@ -932,7 +1288,6 @@ msgstr "Nedostatek paměti pro uložení dat certifikátu."
#: ../libnm-util/crypto.c:294
#, c-format
-#| msgid "Not enough memory to store PEM file data."
msgid "Not enough memory to store file data."
msgstr "Nedostatek paměti na uložení dat souboru."
@@ -960,13 +1315,11 @@ msgstr "Å ifra soukromého klíÄe „%s“ je neznámá."
#: ../libnm-util/crypto.c:391
#, c-format
-#| msgid "Not enough memory to store decrypted private key."
msgid "Not enough memory to decrypt private key."
msgstr "Nedostatek pamÄ›ti pro deÅ¡ifrování soukromého klíÄe."
#: ../libnm-util/crypto.c:511
#, c-format
-#| msgid "Failed to decrypt the private key: %d."
msgid "Unable to determine private key type."
msgstr "Nelze urÄit typ soukromého klíÄe."
@@ -1016,13 +1369,11 @@ msgstr "Selhalo dekódování soukromého klíÄe: %s / %s."
#: ../libnm-util/crypto_gnutls.c:210 ../libnm-util/crypto_nss.c:267
#, c-format
-#| msgid "Failed to decrypt the private key: %d."
msgid "Failed to decrypt the private key: unexpected padding length."
msgstr "Selhalo deÅ¡ifrování soukromého klíÄe: neoÄekávané zarovnání délky."
#: ../libnm-util/crypto_gnutls.c:221 ../libnm-util/crypto_nss.c:278
#, c-format
-#| msgid "Failed to decrypt the private key: %d."
msgid "Failed to decrypt the private key."
msgstr "Selhalo deÅ¡ifrování soukromého klíÄe."
@@ -1033,25 +1384,21 @@ msgstr "Nelze alokovat paměť pro šifrování."
#: ../libnm-util/crypto_gnutls.c:294
#, c-format
-#| msgid "Failed to initialize the decryption cipher context: %s / %s."
msgid "Failed to initialize the encryption cipher context: %s / %s."
msgstr "Selhala inicializace kontextu šifrovací šifry: %s / %s."
#: ../libnm-util/crypto_gnutls.c:303
#, c-format
-#| msgid "Failed to set symmetric key for decryption: %s / %s."
msgid "Failed to set symmetric key for encryption: %s / %s."
msgstr "Selhalo nastavení symetrického klíÄe pro Å¡ifrování: %s / %s."
#: ../libnm-util/crypto_gnutls.c:313
#, c-format
-#| msgid "Failed to set IV for decryption: %s / %s."
msgid "Failed to set IV for encryption: %s / %s."
msgstr "Selhalo nastavení IV pro šifrování: %s / %s."
#: ../libnm-util/crypto_gnutls.c:322
#, c-format
-#| msgid "Failed to decrypt the private key: %s / %s."
msgid "Failed to encrypt the data: %s / %s."
msgstr "Selhalo šifrování dat: %s / %s."
@@ -1072,13 +1419,11 @@ msgstr "Nelze inicializovat dekodér PKCS#12: %s"
#: ../libnm-util/crypto_gnutls.c:421
#, c-format
-#| msgid "Couldn't decode certificate: %s"
msgid "Couldn't decode PKCS#12 file: %s"
msgstr "Nelze dekódovat soubor PKCS#12: %s"
#: ../libnm-util/crypto_gnutls.c:433
#, c-format
-#| msgid "Couldn't decode certificate: %s"
msgid "Couldn't verify PKCS#12 file: %s"
msgstr "Nelze ověřit soubor PKCS#12: %s"
@@ -1124,7 +1469,6 @@ msgstr "Selhalo deÅ¡ifrování soukromého klíÄe: %d."
#: ../libnm-util/crypto_nss.c:245
#, c-format
-#| msgid "Failed to decrypt the private key: %d."
msgid "Failed to decrypt the private key: decrypted data too large."
msgstr ""
"Selhalo deÅ¡ifrování soukromého klíÄe: deÅ¡ifrovaná data jsou příliÅ¡ velká."
@@ -1136,33 +1480,28 @@ msgstr "Selhalo dokonÄení deÅ¡ifrování soukromého klíÄe: %d."
#: ../libnm-util/crypto_nss.c:364
#, c-format
-#| msgid "Failed to initialize the decryption cipher slot."
msgid "Failed to initialize the encryption cipher slot."
msgstr "Selhala inicializace slotu šifrovací šifry."
#: ../libnm-util/crypto_nss.c:372
#, c-format
-#| msgid "Failed to set symmetric key for decryption."
msgid "Failed to set symmetric key for encryption."
msgstr "Selhalo nastavení symetrického klíÄe pro Å¡ifrování."
#: ../libnm-util/crypto_nss.c:380
#, c-format
-#| msgid "Failed to set IV for decryption."
msgid "Failed to set IV for encryption."
msgstr "Selhalo nastavení IV pro šifrování."
#: ../libnm-util/crypto_nss.c:388
#, c-format
-#| msgid "Failed to initialize the decryption context."
msgid "Failed to initialize the encryption context."
msgstr "Selhala inicializace kontextu šifrování."
#: ../libnm-util/crypto_nss.c:396
#, c-format
-#| msgid "Failed to decrypt the private key: %d."
msgid "Failed to encrypt: %d."
-msgstr "Selhalo šifrování: %d"
+msgstr "Selhalo šifrování: %d."
#: ../libnm-util/crypto_nss.c:404
#, c-format
@@ -1186,102 +1525,185 @@ msgstr "Nelze inicializovat dekodér PKCS#12: %d"
#: ../libnm-util/crypto_nss.c:519
#, c-format
-#| msgid "Couldn't decode certificate: %d"
msgid "Couldn't decode PKCS#12 file: %d"
msgstr "Nelze dekódovat soubor PKCS#12: %d"
#: ../libnm-util/crypto_nss.c:528
#, c-format
-#| msgid "Couldn't decode certificate: %d"
msgid "Couldn't verify PKCS#12 file: %d"
msgstr "Nelze ověřit soubor PKCS#12: %d"
#: ../libnm-util/crypto_nss.c:557
-#| msgid "Could not decode private key."
msgid "Could not generate random data."
msgstr "Nelze vygenerovat náhodná data."
-#: ../libnm-util/nm-utils.c:1818
+#: ../libnm-util/nm-utils.c:1975
#, c-format
-#| msgid "Not enough memory to create private key decryption key."
msgid "Not enough memory to make encryption key."
msgstr "Nedostatek pamÄ›ti pro vytvoÅ™ení Å¡ifrovacího klíÄe."
-#: ../libnm-util/nm-utils.c:1928
-#| msgid "Not enough memory to store PEM file data."
+#: ../libnm-util/nm-utils.c:2085
msgid "Could not allocate memory for PEM file creation."
msgstr "Nelze alokovat paměť pro vytvoření souboru PEM."
-#: ../libnm-util/nm-utils.c:1940
+#: ../libnm-util/nm-utils.c:2097
#, c-format
msgid "Could not allocate memory for writing IV to PEM file."
msgstr "Nelze alokovat paměť pro zápis IV do souboru PEM."
-#: ../libnm-util/nm-utils.c:1952
+#: ../libnm-util/nm-utils.c:2109
#, c-format
msgid "Could not allocate memory for writing encrypted key to PEM file."
msgstr "Nelze alokovat paměť pro zápis Å¡ifrovaného klíÄe do souboru PEM."
-#: ../libnm-util/nm-utils.c:1971
+#: ../libnm-util/nm-utils.c:2128
#, c-format
-#| msgid "Not enough memory to store PEM file data."
msgid "Could not allocate memory for PEM file data."
msgstr "Nelze alokovat paměť pro data souboru PEM."
-#: ../src/nm-netlink-monitor.c:195 ../src/nm-netlink-monitor.c:463
-#: ../src/nm-netlink-monitor.c:581
-#: ../src/ip6-manager/nm-netlink-listener.c:351
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
+msgid "Connection sharing via a protected WiFi network"
+msgstr "Sdílení připojení přes chráněnou síť WiFi"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
+msgid "Connection sharing via an open WiFi network"
+msgstr "Sdílení připojení přes otevřenou síť WiFi"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
+msgid "Modify persistent system hostname"
+msgstr "MÄ›nit trvalý systémový název poÄítaÄe"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
+msgid "Modify system connections"
+msgstr "Měnit systémová připojení"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
+msgid "System policy prevents modification of system settings"
+msgstr "Systémová politika zabránila změně systémového nastavení"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
+msgid "System policy prevents modification of the persistent system hostname"
+msgstr "Systémová politika zabránila zmÄ›nÄ› trvalého systémového názvu poÄítaÄe"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
+msgid "System policy prevents sharing connections via a protected WiFi network"
+msgstr "Systémová politika zabránila sdílení připojení přes chráněnou síť WiFi"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
+msgid "System policy prevents sharing connections via an open WiFi network"
+msgstr "Systémová politika zabránila sdílení připojení přes otevřenou síť WiFi"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
+msgid "Allow control of network connections"
+msgstr "Povolit ovládání síťových připojení"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
+msgid "Allow use of user-specific connections"
+msgstr "Povolit použití uživatelem specifikovaných připojení"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
+msgid "Enable or disable WiFi devices"
+msgstr "Povolit nebo zakázat zařízení WiFi"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
+msgid "Enable or disable mobile broadband devices"
+msgstr "Povolit nebo zakázat mobilní širokopásmová zařízení"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+msgid "Enable or disable system networking"
+msgstr "Povolit nebo zakázat systémovou síť"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
+msgid ""
+"Put NetworkManager to sleep or wake it up (should only be used by system "
+"power management)"
+msgstr ""
+"Uspat Network Manager nebo jej probudit (mělo by být používáno pouze "
+"systémovou správou napájení)"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
+msgid "System policy prevents control of network connections"
+msgstr "Systémová politika zamezuje ovládání síťových připojení"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
+msgid "System policy prevents enabling or disabling WiFi devices"
+msgstr "Systémová politika zamezuje povolit nebo zakázat zařízení WiFi"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
+msgid "System policy prevents enabling or disabling mobile broadband devices"
+msgstr ""
+"Systémová politika zamezuje povolení nebo zakázání mobilních širokopásmových "
+"zařízení"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
+msgid "System policy prevents enabling or disabling system networking"
+msgstr "Systémová politika zamezuje povolit nebo zakázat systémovou síť"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
+msgid "System policy prevents putting NetworkManager to sleep or waking it up"
+msgstr "Systémová politika zamezuje NetworkManager uspat nebo probudit"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
+msgid "System policy prevents use of user-specific connections"
+msgstr ""
+"Systémová politika zamezuje použití uživatelsky specifikovaných připojení"
+
+#: ../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 "chyba při zpracování zprávy netlink: %s"
-#: ../src/nm-netlink-monitor.c:259
-#, c-format
-msgid "unable to allocate netlink handle for monitoring link status: %s"
-msgstr "nelze alokovat ovládání netlinku pro sledování stavu spojení: %s"
+#: ../src/nm-netlink-monitor.c:214
+msgid "error occurred while waiting for data on socket"
+msgstr "vyskytla se chyba pÅ™i Äekání na data ze soketu"
-#: ../src/nm-netlink-monitor.c:269
+#: ../src/nm-netlink-monitor.c:254
#, c-format
msgid "unable to connect to netlink for monitoring link status: %s"
msgstr "nelze se připojit k netlinku pro sledování stavu spojení: %s"
-#: ../src/nm-netlink-monitor.c:277
+#: ../src/nm-netlink-monitor.c:265
#, c-format
-msgid "unable to join netlink group for monitoring link status: %s"
-msgstr "nelze se připojit ke skupině netlink pro sledování stavu spojení: %s"
+msgid "unable to enable netlink handle credential passing: %s"
+msgstr "nelze alokovat ovládání netlinku: %s"
-#: ../src/nm-netlink-monitor.c:285
+#: ../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 "nelze alokovat ovládání netlinku pro sledování stavu spojení: %s"
+
+#: ../src/nm-netlink-monitor.c:376
#, c-format
msgid "unable to allocate netlink link cache for monitoring link status: %s"
msgstr "nelze alokovat mezipaměť netlinku pro sledování stavu spojení: %s"
-#: ../src/nm-netlink-monitor.c:493
-#: ../src/ip6-manager/nm-netlink-listener.c:381
-msgid "error occurred while waiting for data on socket"
-msgstr "vyskytla se chyba pÅ™i Äekání na data ze soketu"
+#: ../src/nm-netlink-monitor.c:502
+#, c-format
+msgid "unable to join netlink group: %s"
+msgstr "nelze se připojit ke skupině netlink: %s"
-#: ../src/nm-netlink-monitor.c:557 ../src/nm-netlink-monitor.c:570
+#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642
#, c-format
msgid "error updating link cache: %s"
msgstr "chyba při aktualizaci mezipaměti spojení: %s"
-#: ../src/main.c:498
+#: ../src/main.c:499
#, c-format
msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgstr ""
-"Neplatný pÅ™epínaÄ. Platné pÅ™epínaÄe si můžete zobrazit pomocí --help.\n"
+"Neplatný pÅ™epínaÄ. Platné pÅ™epínaÄe si můžete zobrazit pomocí --help.\n"
-#: ../src/main.c:558
+#: ../src/main.c:570
#, c-format
-#| msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgid "%s. Please use --help to see a list of valid options.\n"
msgstr "%s. Pomocí --help si prosím zobrazte seznam platných pÅ™epínaÄů.\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:325
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:328
msgid "# Created by NetworkManager\n"
msgstr "# Vytvořeno NetworkManagerem\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:341
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:344
#, c-format
msgid ""
"# Merged from %s\n"
@@ -1290,41 +1712,23 @@ msgstr ""
"# SlouÄeno z %s\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:279
+#: ../src/dhcp-manager/nm-dhcp-manager.c:284
msgid "no usable DHCP client could be found."
msgstr "nebyl nalezen žádný použitelný klient DHCP."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:288
+#: ../src/dhcp-manager/nm-dhcp-manager.c:293
msgid "'dhclient' could be found."
msgstr "„dhclient“ byl nalezen."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:298
+#: ../src/dhcp-manager/nm-dhcp-manager.c:303
msgid "'dhcpcd' could be found."
msgstr "„dhcpcd“ byl nalezen."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:306
+#: ../src/dhcp-manager/nm-dhcp-manager.c:311
#, c-format
msgid "unsupported DHCP client '%s'"
msgstr "nepodporovaný klient DHCP „%s“"
-#: ../src/ip6-manager/nm-netlink-listener.c:199
-#, c-format
-#| msgid "unable to allocate netlink handle for monitoring link status: %s"
-msgid "unable to allocate netlink handle: %s"
-msgstr "nelze alokovat ovládání netlinku: %s"
-
-#: ../src/ip6-manager/nm-netlink-listener.c:209
-#, c-format
-#| msgid "unable to connect to netlink for monitoring link status: %s"
-msgid "unable to connect to netlink: %s"
-msgstr "nelze se připojit k netlinku: %s"
-
-#: ../src/ip6-manager/nm-netlink-listener.c:306
-#, c-format
-#| msgid "unable to join netlink group for monitoring link status: %s"
-msgid "unable to join netlink group: %s"
-msgstr "nelze se připojit ke skupině netlink: %s"
-
#: ../src/logging/nm-logging.c:146
#, c-format
msgid "Unknown log level '%s'"
@@ -1335,52 +1739,184 @@ msgstr "Neznámá úroveň evidence „%s“"
msgid "Unknown log domain '%s'"
msgstr "Neznámá doména evidence „%s“"
-#: ../src/named-manager/nm-named-manager.c:314
+#: ../src/dns-manager/nm-dns-manager.c:384
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr ""
-"Poznámka: pÅ™ekladaÄ adres z libc nemůže podporovat více než 3 jmenné servery."
+"POZNÃMKA: pÅ™ekladaÄ adres z libc nemůže podporovat více než 3 jmenné servery."
-#: ../src/named-manager/nm-named-manager.c:316
+#: ../src/dns-manager/nm-dns-manager.c:386
msgid "The nameservers listed below may not be recognized."
msgstr "Jmenné servery uvedené v následujícím seznamu nelze rozpoznat."
#: ../src/system-settings/nm-default-wired-connection.c:157
#, c-format
msgid "Auto %s"
-msgstr "%s (automaticky)"
+msgstr "Automaticky %s"
-#: ../system-settings/plugins/ifcfg-rh/reader.c:3213
+#: ../system-settings/plugins/ifcfg-rh/reader.c:3412
+#: ../system-settings/plugins/ifnet/connection_parser.c:49
msgid "System"
msgstr "Systém"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
-msgid "Connection sharing via a protected WiFi network"
-msgstr "Sdílení připojení přes chráněnou síť WiFi"
+#~ msgid "Type"
+#~ msgstr "Typ"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
-msgid "Connection sharing via an open WiFi network"
-msgstr "Sdílení připojení přes otevřenou síť WiFi"
+#~ msgid "Name"
+#~ msgstr "Název"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
-msgid "Modify persistent system hostname"
-msgstr "MÄ›nit trvalý systémový název poÄítaÄe"
+#~ msgid "User connections:\n"
+#~ msgstr "Uživatelská připojení:\n"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
-msgid "Modify system connections"
-msgstr "Měnit systémová připojení"
+#~ msgid "System-wide connections"
+#~ msgstr "Připojení v rámci systému"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
-msgid "System policy prevents modification of system settings"
-msgstr "Systémová politika zabránila změně systémového nastavení."
+#~ msgid "Default"
+#~ msgstr "Výchozí"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
-msgid "System policy prevents modification of the persistent system hostname"
-msgstr "Systémová politika zabránila zmÄ›nÄ› trvalého systémového názvu poÄítaÄe"
+#~ msgid "Service"
+#~ msgstr "Služba"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
-msgid "System policy prevents sharing connections via a protected WiFi network"
-msgstr "Systémová politika zabránila sdílení připojení přes chráněnou síť WiFi"
+#~ msgid "%s, %s, Freq %d MHz, Rate %d Mb/s, Strength %d"
+#~ msgstr "%s, %s, Frekv %d MHz, Rychlost %d Mb/s, Síla sig %d"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
-msgid "System policy prevents sharing connections via an open WiFi network"
-msgstr "Systémová politika zabránila sdílení připojení přes otevřenou síť WiFi"
+#~ msgid "Device"
+#~ msgstr "Zařízení"
+
+#~ msgid "Driver"
+#~ msgstr "OvladaÄ"
+
+#~ msgid "State"
+#~ msgstr "Stav"
+
+#~ msgid "HW Address"
+#~ msgstr "HW adresa"
+
+#~ msgid ""
+#~ "\n"
+#~ " Capabilities:\n"
+#~ msgstr ""
+#~ "\n"
+#~ " Schopnosti:\n"
+
+#~ msgid "Carrier Detect"
+#~ msgstr "Detekce nosného signálu"
+
+#~ msgid "Speed"
+#~ msgstr "Rychlost"
+
+#~ msgid ""
+#~ "\n"
+#~ " Wireless Properties\n"
+#~ msgstr ""
+#~ "\n"
+#~ " Vlastnosti bezdrátové Äásti\n"
+
+#~ msgid "WEP Encryption"
+#~ msgstr "Šifrování WEP"
+
+#~ msgid "WPA Encryption"
+#~ msgstr "Šifrování WPA"
+
+#~ msgid "WPA2 Encryption"
+#~ msgstr "Šifrování WPA2"
+
+#~ msgid "TKIP cipher"
+#~ msgstr "Å ifra TKIP"
+
+#~ msgid "CCMP cipher"
+#~ msgstr "Å ifra CCMP"
+
+#~ msgid ""
+#~ "\n"
+#~ " Wireless Access Points %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ " Bezdrátový přístupový bod %s\n"
+
+#~ msgid "(* = current AP)"
+#~ msgstr "(* = aktuální přístupový bod)"
+
+#~ msgid ""
+#~ "\n"
+#~ " Wired Properties\n"
+#~ msgstr ""
+#~ "\n"
+#~ " Vlastnosti drátové Äásti\n"
+
+#~ msgid "Carrier"
+#~ msgstr "Nosný signál"
+
+#~ msgid ""
+#~ "\n"
+#~ " IPv4 Settings:\n"
+#~ msgstr ""
+#~ "\n"
+#~ " Nastavení IPv4:\n"
+
+#~ msgid "Address"
+#~ msgstr "Adresa"
+
+#~ msgid "Prefix"
+#~ msgstr "PÅ™edÄíslí"
+
+#~ msgid "Gateway"
+#~ msgstr "Brána"
+
+#~ msgid "Device:"
+#~ msgstr "Zařízení:"
+
+#~ msgid "Error: hwaddr has to be specified."
+#~ msgstr "Chyba: musí být urÄena hardwarová adresa."
+
+#~ msgid "AP parameters"
+#~ msgstr "Parametry přístupového bodu"
+
+#~ msgid "Frequency:"
+#~ msgstr "KmitoÄet:"
+
+#~ msgid "Mode:"
+#~ msgstr "Režim:"
+
+#~ msgid "Ad-hoc"
+#~ msgstr "Ad-hoc"
+
+#~ msgid "Maximal bitrate:"
+#~ msgstr "Max. přenosová rychlost:"
+
+#~ msgid "Strength:"
+#~ msgstr "Síla signálu:"
+
+#~ msgid "Flags:"
+#~ msgstr "Příznaky:"
+
+#~ msgid "privacy"
+#~ msgstr "soukromé"
+
+#~ msgid "WPA flags:"
+#~ msgstr "Příznaky WPA:"
+
+#~ msgid "RSN flags:"
+#~ msgstr "Příznaky RSN:"
+
+#~ msgid "NM running:"
+#~ msgstr "Běh NM:"
+
+#~ msgid "NM state:"
+#~ msgstr "Stav NM:"
+
+#~ msgid "NM wireless hardware:"
+#~ msgstr "Bezdrátový hardware NM:"
+
+#~ msgid "NM wireless:"
+#~ msgstr "Bezdrátové sítě NM:"
+
+#~ msgid "NM WWAN hardware:"
+#~ msgstr "Hardware WWAN NM"
+
+#~ msgid "unable to join netlink group for monitoring link status: %s"
+#~ msgstr ""
+#~ "nelze se připojit ke skupině netlink pro sledování stavu spojení: %s"
+
+#~| msgid "unable to connect to netlink for monitoring link status: %s"
+#~ msgid "unable to connect to netlink: %s"
+#~ msgstr "nelze se připojit k netlinku: %s"
diff --git a/po/de.po b/po/de.po
index ad8f810f56..07a6a3b242 100644
--- a/po/de.po
+++ b/po/de.po
@@ -1,4 +1,6 @@
-# translation of de.po to
+# German translation of NetworkManager.
+# Copyright (C) 2005 Dan Williams <dcbw@redhat.com>
+# This file is distributed under the same license as the NetworkManager package.
# Hendrik Brandt <heb@gnome-de.org>, 2004, 2005.
# Frank Arnold <frank@scirocco-5v-turbo.de>, 2005.
# Hendrik Richter <hendrikr@gnome.org>, 2006.
@@ -6,94 +8,92 @@
# Andre Klapper <ak-47@gmx.net>, 2007.
# Hauke Mehrtens <hauke@hauke-m.de>, 2008.
# Christian Kirbach <Christian.Kirbach@googlemail.com>, 2009, 2010.
-# Timo Trinks <ttrinks@redhat.com>, 2010.
-# German translation of NetworkManager.
-# Copyright (C) 2005 Dan Williams <dcbw@redhat.com>
-# This file is distributed under the same license as the NetworkManager package.
+# Daniel Schury <Daniel.Schury@physik.uni-giessen.de>, 2010.
+#
msgid ""
msgstr ""
-"Project-Id-Version: de\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-06 14:31+0530\n"
-"PO-Revision-Date: 2010-05-07 10:49+1000\n"
-"Last-Translator: Timo Trinks <ttrinks@redhat.com>\n"
-"Language-Team: <de@li.org>\n"
+"Project-Id-Version: NetworkManager HEAD\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 23:56+0200\n"
+"Last-Translator: Daniel Schury <Daniel.Schury@physik.uni-giessen.de>\n"
+"Language-Team: Deutsch <translators-de@lists.ubuntu-eu.org>\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-Generator: KBabel 1.11.4\n"
-
-#: ../cli/src/connections.c:59 ../cli/src/connections.c:74
-#: ../cli/src/devices.c:85 ../cli/src/devices.c:98 ../cli/src/devices.c:108
-#: ../cli/src/devices.c:118 ../cli/src/devices.c:131 ../cli/src/devices.c:142
-#: ../cli/src/devices.c:152
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\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
msgid "NAME"
msgstr "NAME"
#. 0
-#: ../cli/src/connections.c:60 ../cli/src/connections.c:75
+#: ../cli/src/connections.c:61 ../cli/src/connections.c:76
msgid "UUID"
msgstr "UUID"
#. 1
-#: ../cli/src/connections.c:61
+#: ../cli/src/connections.c:62
msgid "DEVICES"
-msgstr "GERÄTE"
+msgstr "GERÄTE"
#. 2
-#: ../cli/src/connections.c:62 ../cli/src/connections.c:77
+#: ../cli/src/connections.c:63 ../cli/src/connections.c:78
msgid "SCOPE"
msgstr "BANDBREITE"
#. 3
-#: ../cli/src/connections.c:63
+#: ../cli/src/connections.c:64
msgid "DEFAULT"
msgstr "VORGABE"
#. 4
-#: ../cli/src/connections.c:64
+#: ../cli/src/connections.c:65
msgid "DBUS-SERVICE"
-msgstr "DBUS-DIENST"
+msgstr "DBUS-SERVICE"
#. 5
-#: ../cli/src/connections.c:65
+#: ../cli/src/connections.c:66
msgid "SPEC-OBJECT"
-msgstr "SPEC-OBJEKT"
+msgstr "SPEC-OBJECT"
#. 6
-#: ../cli/src/connections.c:66
+#: ../cli/src/connections.c:67
msgid "VPN"
msgstr "VPN"
#. 1
#. 0
#. 1
-#: ../cli/src/connections.c:76 ../cli/src/devices.c:61 ../cli/src/devices.c:87
+#: ../cli/src/connections.c:77 ../cli/src/devices.c:62 ../cli/src/devices.c:90
msgid "TYPE"
msgstr "TYP"
#. 3
-#: ../cli/src/connections.c:78
+#: ../cli/src/connections.c:79
msgid "TIMESTAMP"
msgstr "ZEITSTEMPEL"
#. 4
-#: ../cli/src/connections.c:79
+#: ../cli/src/connections.c:80
msgid "TIMESTAMP-REAL"
-msgstr "ZEITSTEMPEL-REAL"
+msgstr "ZEITSTEMPEL-ECHT"
#. 5
-#: ../cli/src/connections.c:80
+#: ../cli/src/connections.c:81
msgid "AUTOCONNECT"
-msgstr "AUTOCONNECT"
+msgstr "AUTO-VERBINDEN"
#. 6
-#: ../cli/src/connections.c:81
+#: ../cli/src/connections.c:82
msgid "READONLY"
-msgstr "NURLESEN"
+msgstr "NUR-LESEN"
-#: ../cli/src/connections.c:157
+#: ../cli/src/connections.c:158
#, c-format
msgid ""
"Usage: nmcli con { COMMAND | help }\n"
@@ -114,516 +114,526 @@ msgstr ""
"<timeout>]\n"
" down id <id> | uuid <id>\n"
-#: ../cli/src/connections.c:197 ../cli/src/connections.c:536
+#: ../cli/src/connections.c:198 ../cli/src/connections.c:537
#, c-format
msgid "Error: 'con list': %s"
-msgstr "Fehler: 'con list': %s"
+msgstr "Fehler: »Verb. Liste«: %s"
-#: ../cli/src/connections.c:199 ../cli/src/connections.c:538
+#: ../cli/src/connections.c:200 ../cli/src/connections.c:539
#, c-format
msgid "Error: 'con list': %s; allowed fields: %s"
-msgstr "Fehler: 'con list': %s; erlaubte Felder: %s"
+msgstr "Fehler: »Verb. Liste«: %s; erlaubte Felder: %s"
-#: ../cli/src/connections.c:207
+#: ../cli/src/connections.c:208
msgid "Connection details"
-msgstr "Verbindungsdetails"
+msgstr "Verbindungsinformationen"
-#: ../cli/src/connections.c:381 ../cli/src/connections.c:601
+#: ../cli/src/connections.c:382 ../cli/src/connections.c:602
msgid "system"
msgstr "System"
-#: ../cli/src/connections.c:381 ../cli/src/connections.c:601
+#: ../cli/src/connections.c:382 ../cli/src/connections.c:602
msgid "user"
msgstr "Benutzer"
-#: ../cli/src/connections.c:383
+#: ../cli/src/connections.c:384
msgid "never"
msgstr "nie"
#. "CAPABILITIES"
#. Print header
#. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:384 ../cli/src/connections.c:385
-#: ../cli/src/connections.c:602 ../cli/src/connections.c:605
-#: ../cli/src/devices.c:388 ../cli/src/devices.c:513 ../cli/src/devices.c:539
-#: ../cli/src/devices.c:540 ../cli/src/devices.c:541 ../cli/src/devices.c:542
-#: ../cli/src/devices.c:543 ../cli/src/settings.c:504
-#: ../cli/src/settings.c:544 ../cli/src/settings.c:643
-#: ../cli/src/settings.c:912 ../cli/src/settings.c:913
-#: ../cli/src/settings.c:915 ../cli/src/settings.c:917
-#: ../cli/src/settings.c:1042 ../cli/src/settings.c:1043
-#: ../cli/src/settings.c:1044 ../cli/src/settings.c:1123
-#: ../cli/src/settings.c:1124 ../cli/src/settings.c:1125
-#: ../cli/src/settings.c:1126 ../cli/src/settings.c:1127
-#: ../cli/src/settings.c:1128 ../cli/src/settings.c:1129
-#: ../cli/src/settings.c:1130 ../cli/src/settings.c:1131
-#: ../cli/src/settings.c:1132 ../cli/src/settings.c:1133
-#: ../cli/src/settings.c:1134 ../cli/src/settings.c:1135
-#: ../cli/src/settings.c:1210
+#: ../cli/src/connections.c: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
msgid "yes"
msgstr "ja"
-#: ../cli/src/connections.c:384 ../cli/src/connections.c:385
-#: ../cli/src/connections.c:602 ../cli/src/connections.c:605
-#: ../cli/src/devices.c:388 ../cli/src/devices.c:513 ../cli/src/devices.c:539
-#: ../cli/src/devices.c:540 ../cli/src/devices.c:541 ../cli/src/devices.c:542
-#: ../cli/src/devices.c:543 ../cli/src/settings.c:504
-#: ../cli/src/settings.c:506 ../cli/src/settings.c:544
-#: ../cli/src/settings.c:643 ../cli/src/settings.c:912
-#: ../cli/src/settings.c:913 ../cli/src/settings.c:915
-#: ../cli/src/settings.c:917 ../cli/src/settings.c:1042
-#: ../cli/src/settings.c:1043 ../cli/src/settings.c:1044
-#: ../cli/src/settings.c:1123 ../cli/src/settings.c:1124
-#: ../cli/src/settings.c:1125 ../cli/src/settings.c:1126
-#: ../cli/src/settings.c:1127 ../cli/src/settings.c:1128
-#: ../cli/src/settings.c:1129 ../cli/src/settings.c:1130
-#: ../cli/src/settings.c:1131 ../cli/src/settings.c:1132
-#: ../cli/src/settings.c:1133 ../cli/src/settings.c:1134
-#: ../cli/src/settings.c:1135 ../cli/src/settings.c:1210
+#: ../cli/src/connections.c: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
msgid "no"
msgstr "nein"
-#: ../cli/src/connections.c:457 ../cli/src/connections.c:500
+#: ../cli/src/connections.c:458 ../cli/src/connections.c:501
msgid "System connections"
-msgstr "System-Verbindungen"
+msgstr "Systemverbindungen"
-#: ../cli/src/connections.c:462 ../cli/src/connections.c:513
+#: ../cli/src/connections.c:463 ../cli/src/connections.c:514
msgid "User connections"
-msgstr "Benutzer-Verbindungen"
+msgstr "Benutzerverbindungen"
-#: ../cli/src/connections.c:474 ../cli/src/connections.c:1334
-#: ../cli/src/connections.c:1350 ../cli/src/connections.c:1359
-#: ../cli/src/connections.c:1370 ../cli/src/connections.c:1452
-#: ../cli/src/devices.c:864 ../cli/src/devices.c:874 ../cli/src/devices.c:973
-#: ../cli/src/devices.c:980
+#: ../cli/src/connections.c: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
#, c-format
msgid "Error: %s argument is missing."
-msgstr "Fehler: %s Argument fehlt."
+msgstr "Fehler: Argument %s fehlt."
-#: ../cli/src/connections.c:487
+#: ../cli/src/connections.c:488
#, c-format
msgid "Error: %s - no such connection."
-msgstr "Fehler: %s - keine solche Verbindung."
+msgstr "Fehler: Verbindung %s existiert nicht."
-#: ../cli/src/connections.c:519 ../cli/src/connections.c:1383
-#: ../cli/src/connections.c:1470 ../cli/src/devices.c:687
-#: ../cli/src/devices.c:754 ../cli/src/devices.c:888 ../cli/src/devices.c:986
+#: ../cli/src/connections.c: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
#, c-format
msgid "Unknown parameter: %s\n"
msgstr "Unbekannter Parameter: %s\n"
-#: ../cli/src/connections.c:528
+#: ../cli/src/connections.c:529
#, c-format
msgid "Error: no valid parameter specified."
-msgstr "Fehler: Kein gültiger Parameter angegeben."
+msgstr "Fehler: Es wurde kein gültiger Parameter angegeben."
-#: ../cli/src/connections.c:543 ../cli/src/connections.c:1572
-#: ../cli/src/devices.c:1192 ../cli/src/network-manager.c:274
+#: ../cli/src/connections.c:544 ../cli/src/connections.c:1577
+#: ../cli/src/devices.c:1293 ../cli/src/network-manager.c:359
#, c-format
msgid "Error: %s."
msgstr "Fehler: %s."
-#: ../cli/src/connections.c:649
+#: ../cli/src/connections.c:650
#, c-format
msgid "Error: 'con status': %s"
-msgstr "Fehler: 'con status': %s"
+msgstr "Fehler: »Verb. Status«: %s"
-#: ../cli/src/connections.c:651
+#: ../cli/src/connections.c:652
#, c-format
msgid "Error: 'con status': %s; allowed fields: %s"
-msgstr "Fehler: 'con status': %s; erlaubte Felder: %s"
+msgstr "Fehler: »Verb. Status«: %s; erlaubte Felder: %s"
-#: ../cli/src/connections.c:658
+#: ../cli/src/connections.c:659
msgid "Active connections"
msgstr "Aktive Verbindungen"
-#: ../cli/src/connections.c:1026
+#: ../cli/src/connections.c:1027
#, c-format
msgid "no active connection on device '%s'"
-msgstr "keine aktive Verbindung auf Gerät '%s'"
+msgstr "Keine aktive Verbindung auf Gerät »%s«"
-#: ../cli/src/connections.c:1034
+#: ../cli/src/connections.c:1035
#, c-format
msgid "no active connection or device"
-msgstr "keine aktive Verbindung auf Gerät"
+msgstr "Keine aktive Verbindung oder Gerät"
-#: ../cli/src/connections.c:1084
+#: ../cli/src/connections.c:1085
#, c-format
msgid "device '%s' not compatible with connection '%s'"
-msgstr "Gerät '%s' nicht mit Verbindung '%s' kompatibel"
+msgstr "Gerät »%s« ist nicht mit der Verbindung »%s« kompatibel"
-#: ../cli/src/connections.c:1086
+#: ../cli/src/connections.c:1087
#, c-format
msgid "no device found for connection '%s'"
-msgstr "kein Gerät für Verbindung '%s' gefunden"
+msgstr "Für die Verbindung »%s« wurde kein Gerät gefunden"
-#: ../cli/src/connections.c:1097
+#: ../cli/src/connections.c:1098
msgid "activating"
msgstr "wird aktiviert"
-#: ../cli/src/connections.c:1099
+#: ../cli/src/connections.c:1100
msgid "activated"
msgstr "aktiviert"
-#: ../cli/src/connections.c:1102 ../cli/src/connections.c:1125
-#: ../cli/src/connections.c:1158 ../cli/src/devices.c:224
-#: ../cli/src/devices.c:514 ../cli/src/network-manager.c:92
-#: ../cli/src/network-manager.c:145 ../cli/src/settings.c:469
+#: ../cli/src/connections.c: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
msgid "unknown"
msgstr "unbekannt"
-#: ../cli/src/connections.c:1111
+#: ../cli/src/connections.c:1112
msgid "VPN connecting (prepare)"
-msgstr "VPN wird verbunden (vorbereiten)"
+msgstr "VPN wird verbunden (wird vorbereitet)"
-#: ../cli/src/connections.c:1113
+#: ../cli/src/connections.c:1114
msgid "VPN connecting (need authentication)"
-msgstr "VPN wird verbunden (Authentifizierung erforderlich)"
+msgstr "VPN wird verbunden (Legitimierung wird benötigt)"
-#: ../cli/src/connections.c:1115
+#: ../cli/src/connections.c:1116
msgid "VPN connecting"
msgstr "VPN wird verbunden"
-#: ../cli/src/connections.c:1117
+#: ../cli/src/connections.c:1118
msgid "VPN connecting (getting IP configuration)"
-msgstr "VPN wird verbunden (IP-Konfiguration wird ermittelt)"
+msgstr "VPN wird verbunden (IP-Einstellungen werden ermittelt)"
-#: ../cli/src/connections.c:1119
+#: ../cli/src/connections.c:1120
msgid "VPN connected"
msgstr "VPN verbunden"
-#: ../cli/src/connections.c:1121
+#: ../cli/src/connections.c:1122
msgid "VPN connection failed"
-msgstr "VPN-Verbindung fehlgeschlagen"
+msgstr "VPN-Verbindung gescheitert"
-#: ../cli/src/connections.c:1123
+#: ../cli/src/connections.c:1124
msgid "VPN disconnected"
msgstr "VPN getrennt"
-#: ../cli/src/connections.c:1134
+#: ../cli/src/connections.c:1135
msgid "unknown reason"
msgstr "unbekannter Grund"
-#: ../cli/src/connections.c:1136
+#: ../cli/src/connections.c:1137
msgid "none"
msgstr "kein"
-#: ../cli/src/connections.c:1138
+#: ../cli/src/connections.c:1139
msgid "the user was disconnected"
-msgstr "der Benutzer wurde getrennt"
+msgstr "Der Benutzer wurde getrennt"
-#: ../cli/src/connections.c:1140
+#: ../cli/src/connections.c:1141
msgid "the base network connection was interrupted"
-msgstr "die Basisverbindung wurde unterbrochen"
+msgstr "Die Basisverbindung wurde unterbrochen"
-#: ../cli/src/connections.c:1142
+#: ../cli/src/connections.c:1143
msgid "the VPN service stopped unexpectedly"
-msgstr "der VPN-Dienst brach unerwartet ab"
+msgstr "Der VPN-Dienst wurde unerwartet gestoppt"
-#: ../cli/src/connections.c:1144
+#: ../cli/src/connections.c:1145
msgid "the VPN service returned invalid configuration"
-msgstr "der VPN-Dienst gab eine ungültige Konfiguration zurück"
+msgstr "Der VPN-Dienst gab ungültige Einstellungen zurück"
-#: ../cli/src/connections.c:1146
+#: ../cli/src/connections.c:1147
msgid "the connection attempt timed out"
-msgstr "Der Verbindungsversuch ist zeitlich abgelaufen"
+msgstr "Der Verbindungsversuch benötigte zu viel Zeit"
-#: ../cli/src/connections.c:1148
+#: ../cli/src/connections.c:1149
msgid "the VPN service did not start in time"
-msgstr "der VPN-Dienst ist nicht rechtzeitig gestartet"
+msgstr "Der VPN-Dienst wurde nicht rechtzeitig gestartet"
-#: ../cli/src/connections.c:1150
+#: ../cli/src/connections.c:1151
msgid "the VPN service failed to start"
-msgstr "der VPN-Dienst konnte nicht starten"
+msgstr "Der VPN-Dienst konnte nicht gestartet werden"
-#: ../cli/src/connections.c:1152
+#: ../cli/src/connections.c:1153
msgid "no valid VPN secrets"
-msgstr "keine gültigen VPN-Geheimnisse"
+msgstr "Keine gültigen VPN-Schlüssel"
-#: ../cli/src/connections.c:1154
+#: ../cli/src/connections.c:1155
msgid "invalid VPN secrets"
-msgstr "ungültige VPN-Geheimnisse"
+msgstr "Ungültige VPN-Schlüssel"
-#: ../cli/src/connections.c:1156
+#: ../cli/src/connections.c:1157
msgid "the connection was removed"
msgstr "Die Verbindung wurde entfernt"
-#: ../cli/src/connections.c:1170
+#: ../cli/src/connections.c:1171
#, c-format
msgid "state: %s\n"
msgstr "Status: %s\n"
-#: ../cli/src/connections.c:1173 ../cli/src/connections.c:1199
+#: ../cli/src/connections.c:1174 ../cli/src/connections.c:1200
#, c-format
msgid "Connection activated\n"
msgstr "Verbindung aktiviert\n"
-#: ../cli/src/connections.c:1176
+#: ../cli/src/connections.c:1177
#, c-format
msgid "Error: Connection activation failed."
-msgstr "Fehler: Aktivierung der Verbindung fehlgeschlagen."
+msgstr "Fehler: Aktivierung der Verbindung ist gescheitert."
-#: ../cli/src/connections.c:1195
+#: ../cli/src/connections.c:1196
#, c-format
msgid "state: %s (%d)\n"
msgstr "Status: %s (%d)\n"
-#: ../cli/src/connections.c:1205
+#: ../cli/src/connections.c:1206
#, c-format
msgid "Error: Connection activation failed: %s."
-msgstr "Fehler: Aktivierung der Verbindung fehlgeschlagen: %s."
+msgstr "Fehler: Aktivierung der Verbindung ist gescheitert: %s."
-#: ../cli/src/connections.c:1222 ../cli/src/devices.c:811
+#: ../cli/src/connections.c:1223 ../cli/src/devices.c:909
#, c-format
msgid "Error: Timeout %d sec expired."
-msgstr "Fehler: Zeitbeschränkung von %d Sekunden abgelaufen."
+msgstr "Fehler: Zeitbeschränkung von %d Sekunden ist abgelaufen."
-#: ../cli/src/connections.c:1265
+#: ../cli/src/connections.c:1266
#, c-format
msgid "Error: Connection activation failed: %s"
-msgstr "Fehler: Aktivierung der Verbindung fehlgeschlagen: %s"
+msgstr "Fehler: Aktivierung der Verbindung ist gescheitert: %s"
-#: ../cli/src/connections.c:1279
+#: ../cli/src/connections.c:1280
#, c-format
msgid "Error: Obtaining active connection for '%s' failed."
-msgstr "Fehler: Erlangen der Verbindung für '%s' ist fehlgeschlagen."
+msgstr "Fehler: Ermittlung der aktiven Verbindung für »%s« ist gescheitert."
-#: ../cli/src/connections.c:1288
+#: ../cli/src/connections.c:1289
#, c-format
msgid "Active connection state: %s\n"
msgstr "Status der aktiven Verbindung: %s\n"
-#: ../cli/src/connections.c:1289
+#: ../cli/src/connections.c:1290
#, c-format
msgid "Active connection path: %s\n"
msgstr "Pfad der aktiven Verbindung: %s\n"
-#: ../cli/src/connections.c:1343 ../cli/src/connections.c:1461
+#: ../cli/src/connections.c:1344 ../cli/src/connections.c:1465
#, c-format
msgid "Error: Unknown connection: %s."
msgstr "Fehler: Unbekannte Verbindung: %s."
-#: ../cli/src/connections.c:1378 ../cli/src/devices.c:882
+#: ../cli/src/connections.c:1379 ../cli/src/devices.c:980
#, c-format
msgid "Error: timeout value '%s' is not valid."
-msgstr "Fehler: Der Wert '%s' für den Zeitablauf ist nicht gültig."
+msgstr "Fehler: Der Wert »%s« ist keine gültige Zeitangabe."
-#: ../cli/src/connections.c:1391 ../cli/src/connections.c:1478
+#: ../cli/src/connections.c:1392 ../cli/src/connections.c:1482
#, c-format
msgid "Error: id or uuid has to be specified."
-msgstr "Fehler: id oder uuid muss angegeben werden."
+msgstr "Fehler: id oder uuid müssen angegeben werden."
-#: ../cli/src/connections.c:1411
+#: ../cli/src/connections.c:1412
#, c-format
msgid "Error: No suitable device found: %s."
-msgstr "Fehler: Kein passendes Gerät gefunden: %s."
+msgstr "Fehler: Es wurde kein passendes Gerät gefunden: %s."
-#: ../cli/src/connections.c:1413
+#: ../cli/src/connections.c:1414
#, c-format
msgid "Error: No suitable device found."
-msgstr "Fehler: Kein passendes Gerät gefunden."
+msgstr "Fehler: Es wurde kein passendes Gerät gefunden."
-#: ../cli/src/connections.c:1505
+#: ../cli/src/connections.c:1509
#, c-format
msgid "Warning: Connection not active\n"
-msgstr "Warnung: Verbindung ist derzeit nicht aktiv\n"
+msgstr "Warnung: Verbindung ist nicht aktiv\n"
-#: ../cli/src/connections.c:1561
+#: ../cli/src/connections.c:1566
#, c-format
msgid "Error: 'con' command '%s' is not valid."
-msgstr "Fehler: Der Befehl '%s' für 'con' ist nicht gültig."
+msgstr "Fehler: Der »con«-Befehl »%s« ist ungültig."
-#: ../cli/src/connections.c:1597
+#: ../cli/src/connections.c:1602
#, c-format
msgid "Error: could not connect to D-Bus."
-msgstr "Fehler: Es konnte nicht mit D-Bus verbunden werden."
+msgstr "Fehler: Verbindung zu D-Bus konnte nicht hergestellt werden."
-#: ../cli/src/connections.c:1604
+#: ../cli/src/connections.c:1609
#, c-format
msgid "Error: Could not get system settings."
-msgstr "Fehler: Systemeinstellungen konnten nicht ermittelt werden"
+msgstr "Fehler: Systemeinstellungen konnten nicht ermittelt werden."
-#: ../cli/src/connections.c:1612
+#: ../cli/src/connections.c:1617
#, c-format
msgid "Error: Could not get user settings."
msgstr "Fehler: Benutzereinstellungen konnten nicht ermittelt werden."
-#: ../cli/src/connections.c:1622
+#: ../cli/src/connections.c:1627
#, c-format
msgid "Error: Can't obtain connections: settings services are not running."
msgstr ""
-"Fehler: Verbindungen können nicht erlangt werden: Die Einstellungsdienste "
+"Fehler: Verbindungen konnten nicht ermittelt werden: Die Einstellungsdienste "
"werden nicht ausgeführt."
#. 0
#. 9
-#: ../cli/src/devices.c:60 ../cli/src/devices.c:86 ../cli/src/devices.c:162
+#: ../cli/src/devices.c:61 ../cli/src/devices.c:89 ../cli/src/devices.c:184
msgid "DEVICE"
-msgstr "GERÄT"
+msgstr "GERÄT"
#. 1
#. 4
#. 0
-#: ../cli/src/devices.c:62 ../cli/src/devices.c:90
+#: ../cli/src/devices.c:63 ../cli/src/devices.c:93
#: ../cli/src/network-manager.c:36
msgid "STATE"
msgstr "STATUS"
-#: ../cli/src/devices.c:71
+#: ../cli/src/devices.c:72
msgid "GENERAL"
msgstr "ALLGEMEIN"
#. 0
-#: ../cli/src/devices.c:72
+#: ../cli/src/devices.c:73
msgid "CAPABILITIES"
-msgstr "FÄHIGKEITEN"
+msgstr "RESSOURCEN"
#. 1
-#: ../cli/src/devices.c:73
+#: ../cli/src/devices.c:74
msgid "WIFI-PROPERTIES"
-msgstr "WIFI-EIGENSCHAFTEN"
+msgstr "WLAN-EIGENSCHAFTEN"
#. 2
-#: ../cli/src/devices.c:74
+#: ../cli/src/devices.c:75
msgid "AP"
msgstr "AP"
#. 3
-#: ../cli/src/devices.c:75
+#: ../cli/src/devices.c:76
msgid "WIRED-PROPERTIES"
msgstr "KABEL-EIGENSCHAFTEN"
#. 4
-#: ../cli/src/devices.c:76
+#: ../cli/src/devices.c:77
msgid "IP4-SETTINGS"
msgstr "IP4-EINSTELLUNGEN"
#. 5
-#: ../cli/src/devices.c:77
+#: ../cli/src/devices.c:78
msgid "IP4-DNS"
msgstr "IP4-DNS"
+#. 6
+#: ../cli/src/devices.c:79
+msgid "IP6-SETTINGS"
+msgstr "IP6-EINSTELLUNGEN"
+
+#. 7
+#: ../cli/src/devices.c:80
+msgid "IP6-DNS"
+msgstr "IP6-DNS"
+
#. 2
-#: ../cli/src/devices.c:88
+#: ../cli/src/devices.c:91
msgid "DRIVER"
msgstr "TREIBER"
#. 3
-#: ../cli/src/devices.c:89
+#: ../cli/src/devices.c:92
msgid "HWADDR"
msgstr "HWADDR"
#. 0
-#: ../cli/src/devices.c:99
+#: ../cli/src/devices.c:102
msgid "CARRIER-DETECT"
-msgstr "ANBIETER-SUCHE"
+msgstr "TRÄGERFREQUENZERKENNUNG"
#. 1
-#: ../cli/src/devices.c:100
+#: ../cli/src/devices.c:103
msgid "SPEED"
msgstr "GESCHWINDIGKEIT"
#. 0
-#: ../cli/src/devices.c:109
+#: ../cli/src/devices.c:112
msgid "CARRIER"
-msgstr "ANBIETER"
+msgstr "TRÄGERFREQUENZ"
#. 0
-#: ../cli/src/devices.c:119
+#: ../cli/src/devices.c:122
msgid "WEP"
msgstr "WEP"
#. 1
-#: ../cli/src/devices.c:120
+#: ../cli/src/devices.c:123
msgid "WPA"
msgstr "WPA"
#. 2
-#: ../cli/src/devices.c:121
+#: ../cli/src/devices.c:124
msgid "WPA2"
msgstr "WPA2"
#. 3
-#: ../cli/src/devices.c:122
+#: ../cli/src/devices.c:125
msgid "TKIP"
msgstr "TKIP"
#. 4
-#: ../cli/src/devices.c:123
+#: ../cli/src/devices.c:126
msgid "CCMP"
msgstr "CCMP"
#. 0
-#: ../cli/src/devices.c:132
+#: ../cli/src/devices.c:135 ../cli/src/devices.c:146
msgid "ADDRESS"
msgstr "ADRESSE"
#. 1
-#: ../cli/src/devices.c:133
+#: ../cli/src/devices.c:136 ../cli/src/devices.c:147
msgid "PREFIX"
-msgstr "PRÄFIX"
+msgstr "PRÄFIX"
#. 2
-#: ../cli/src/devices.c:134
+#: ../cli/src/devices.c:137 ../cli/src/devices.c:148
msgid "GATEWAY"
msgstr "GATEWAY"
#. 0
-#: ../cli/src/devices.c:143
+#: ../cli/src/devices.c:157 ../cli/src/devices.c:166
msgid "DNS"
msgstr "DNS"
#. 0
-#: ../cli/src/devices.c:153
+#: ../cli/src/devices.c:175
msgid "SSID"
msgstr "SSID"
#. 1
-#: ../cli/src/devices.c:154
+#: ../cli/src/devices.c:176
msgid "BSSID"
msgstr "BSSID"
#. 2
-#: ../cli/src/devices.c:155
+#: ../cli/src/devices.c:177
msgid "MODE"
msgstr "MODUS"
#. 3
-#: ../cli/src/devices.c:156
+#: ../cli/src/devices.c:178
msgid "FREQ"
-msgstr "FREQ"
+msgstr "FREQUENZ"
#. 4
-#: ../cli/src/devices.c:157
+#: ../cli/src/devices.c:179
msgid "RATE"
msgstr "RATE"
#. 5
-#: ../cli/src/devices.c:158
+#: ../cli/src/devices.c:180
msgid "SIGNAL"
msgstr "SIGNAL"
#. 6
-#: ../cli/src/devices.c:159
+#: ../cli/src/devices.c:181
msgid "SECURITY"
msgstr "SICHERHEIT"
#. 7
-#: ../cli/src/devices.c:160
+#: ../cli/src/devices.c:182
msgid "WPA-FLAGS"
-msgstr "WPA-FLAGS"
+msgstr "WPA-SCHALTER"
#. 8
-#: ../cli/src/devices.c:161
+#: ../cli/src/devices.c:183
msgid "RSN-FLAGS"
-msgstr "RSN-FLAGS"
+msgstr "RSN-SCHALTER"
#. 10
-#: ../cli/src/devices.c:163
+#: ../cli/src/devices.c:185
msgid "ACTIVE"
msgstr "AKTIV"
-#: ../cli/src/devices.c:186
+#: ../cli/src/devices.c:208
#, c-format
msgid ""
"Usage: nmcli dev { COMMAND | help }\n"
@@ -646,328 +656,378 @@ msgstr ""
" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
"\n"
-#: ../cli/src/devices.c:206
+#: ../cli/src/devices.c:228
msgid "unmanaged"
msgstr "nicht verwaltet"
-#: ../cli/src/devices.c:208
+#: ../cli/src/devices.c:230
msgid "unavailable"
msgstr "nicht verfügbar"
-#: ../cli/src/devices.c:210 ../cli/src/network-manager.c:89
+#: ../cli/src/devices.c:232 ../cli/src/network-manager.c:91
msgid "disconnected"
-msgstr "getrennt"
+msgstr "nicht verbunden"
-#: ../cli/src/devices.c:212
+#: ../cli/src/devices.c:234
msgid "connecting (prepare)"
-msgstr "wird verbunden (vorbereiten)"
+msgstr "wird verbunden (wird vorbereitet)"
-#: ../cli/src/devices.c:214
+#: ../cli/src/devices.c:236
msgid "connecting (configuring)"
-msgstr "wird verbunden (konfigurieren)"
+msgstr "wird verbunden (wird eingerichtet)"
-#: ../cli/src/devices.c:216
+#: ../cli/src/devices.c:238
msgid "connecting (need authentication)"
-msgstr "wird verbunden (Authentifizierung erforderlich)"
+msgstr "wird verbunden (Legitimierung wird benötigt)"
-#: ../cli/src/devices.c:218
+#: ../cli/src/devices.c:240
msgid "connecting (getting IP configuration)"
-msgstr "wird verbunden (IP-Konfiguration wird ermittelt)"
+msgstr "wird verbunden (IP-Einstellungen werden ermittelt)"
-#: ../cli/src/devices.c:220 ../cli/src/network-manager.c:87
+#: ../cli/src/devices.c:242 ../cli/src/network-manager.c:89
msgid "connected"
msgstr "verbunden"
-#: ../cli/src/devices.c:222
+#: ../cli/src/devices.c:244
msgid "connection failed"
-msgstr "Verbindung fehlgeschlagen"
+msgstr "Verbindung gescheitert"
-#: ../cli/src/devices.c:245 ../cli/src/devices.c:380
+#: ../cli/src/devices.c:267 ../cli/src/devices.c:424
msgid "Unknown"
msgstr "Unbekannt"
-#: ../cli/src/devices.c:277
+#: ../cli/src/devices.c:299
msgid "(none)"
msgstr "(keine)"
-#: ../cli/src/devices.c:302
+#: ../cli/src/devices.c:324
#, c-format
msgid "%s: error converting IP4 address 0x%X"
msgstr "%s: Fehler bei Umwandlung der IPv4-Addresse 0x%X"
-#: ../cli/src/devices.c:349
+#: ../cli/src/devices.c:393
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:350
+#: ../cli/src/devices.c:394
#, c-format
msgid "%u MB/s"
msgstr "%u MB/s"
-#: ../cli/src/devices.c:359
+#: ../cli/src/devices.c:403
msgid "Encrypted: "
msgstr "Verschlüsselt: "
-#: ../cli/src/devices.c:364
+#: ../cli/src/devices.c:408
msgid "WEP "
-msgstr "WEP "
+msgstr "WEP"
-#: ../cli/src/devices.c:366
+#: ../cli/src/devices.c:410
msgid "WPA "
-msgstr "WPA "
+msgstr "WPA"
-#: ../cli/src/devices.c:368
+#: ../cli/src/devices.c:412
msgid "WPA2 "
-msgstr "WPA2 "
+msgstr "WPA2"
# Das ergibt z.B. WPA-Enterprise, klingt komisch mit »Unternehmen«
-#: ../cli/src/devices.c:371
+#: ../cli/src/devices.c:415
msgid "Enterprise "
-msgstr "Enterprise "
+msgstr "Enterprise"
-#: ../cli/src/devices.c:380
+#: ../cli/src/devices.c:424
msgid "Ad-Hoc"
msgstr "Ad-Hoc"
-#: ../cli/src/devices.c:380
+#: ../cli/src/devices.c:424
msgid "Infrastructure"
msgstr "Infrastuktur"
-#: ../cli/src/devices.c:442
+#: ../cli/src/devices.c:486
#, c-format
msgid "Error: 'dev list': %s"
-msgstr "Fehler: 'dev list': %s"
+msgstr "Fehler: »Geräteliste«: %s"
-#: ../cli/src/devices.c:444
+#: ../cli/src/devices.c:488
#, c-format
msgid "Error: 'dev list': %s; allowed fields: %s"
-msgstr "Fehler: 'dev list': %s; erlaubte Felder: %s"
+msgstr "Fehler: »Geräteliste«: %s; erlaubte Felder: %s"
-#: ../cli/src/devices.c:453
+#: ../cli/src/devices.c:497
msgid "Device details"
-msgstr "Gerätedetails"
+msgstr "Geräteinformationen"
-#: ../cli/src/devices.c:483 ../cli/src/devices.c:827
+#: ../cli/src/devices.c:527 ../cli/src/devices.c:925
msgid "(unknown)"
msgstr "(unbekannt)"
-#: ../cli/src/devices.c:484
+#: ../cli/src/devices.c:528
msgid "unknown)"
msgstr "unbekannt)"
-#: ../cli/src/devices.c:510
+#: ../cli/src/devices.c:554
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
#. Print header
#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:583
+#: ../cli/src/devices.c:627
msgid "on"
msgstr "an"
-#: ../cli/src/devices.c:583
+#: ../cli/src/devices.c:627
msgid "off"
msgstr "aus"
-#: ../cli/src/devices.c:710
+#: ../cli/src/devices.c:808
#, c-format
msgid "Error: 'dev status': %s"
-msgstr "Fehler: 'dev status': %s"
+msgstr "Fehler: »Gerätestatus«: %s"
-#: ../cli/src/devices.c:712
+#: ../cli/src/devices.c:810
#, c-format
msgid "Error: 'dev status': %s; allowed fields: %s"
-msgstr "Fehler: 'dev status': %s; erlaubte Felder: %s"
+msgstr "Fehler: »Gerätestatus«: %s; erlaubte Felder: %s"
-#: ../cli/src/devices.c:719
+#: ../cli/src/devices.c:817
msgid "Status of devices"
-msgstr "Status von Geräten"
+msgstr "Status der Geräte"
-#: ../cli/src/devices.c:747
+#: ../cli/src/devices.c:845
#, c-format
msgid "Error: '%s' argument is missing."
-msgstr "Fehler: Argument '%s' fehlt."
+msgstr "Fehler: Argument »%s« fehlt."
-#: ../cli/src/devices.c:776 ../cli/src/devices.c:915 ../cli/src/devices.c:1035
+#: ../cli/src/devices.c:874 ../cli/src/devices.c:1013
+#: ../cli/src/devices.c:1136
#, c-format
msgid "Error: Device '%s' not found."
-msgstr "Fehler: Gerät '%s' wurde nicht gefunden"
+msgstr "Fehler: Gerät »%s« wurde nicht gefunden."
-#: ../cli/src/devices.c:799
+#: ../cli/src/devices.c:897
#, c-format
msgid "Success: Device '%s' successfully disconnected."
-msgstr "Erfolg: Gerät '%s' wurde erfolgreich getrennt."
+msgstr "Erfolg: Gerät »%s« wurde erfolgreich getrennt."
-#: ../cli/src/devices.c:824
+#: ../cli/src/devices.c:922
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
-msgstr "Fehler: Trennung des Gerätes '%s' (%s) ist fehlgeschlagen: %s"
+msgstr "Fehler: Trennung des Gerätes »%s« (%s) ist gescheitert: %s"
-#: ../cli/src/devices.c:832
+#: ../cli/src/devices.c:930
#, c-format
msgid "Device state: %d (%s)\n"
-msgstr "Gerätezustand: %d (%s)\n"
+msgstr "Gerätezustand: %d (%s)\n"
-#: ../cli/src/devices.c:896
+#: ../cli/src/devices.c:994
#, c-format
msgid "Error: iface has to be specified."
-msgstr "Fehler: Schnittstelle muss angegeben werden."
+msgstr "Fehler: Es muss eine Schnittstelle angegeben werden."
-#: ../cli/src/devices.c:1011
+#: ../cli/src/devices.c:1112
#, c-format
msgid "Error: 'dev wifi': %s"
-msgstr "Fehler: 'dev wifi': %s"
+msgstr "Fehler: »Geräte-WLAN«: %s"
-#: ../cli/src/devices.c:1013
+#: ../cli/src/devices.c:1114
#, c-format
msgid "Error: 'dev wifi': %s; allowed fields: %s"
-msgstr "Fehler: 'dev wifi': %s; erlaubte Felder: %s"
+msgstr "Fehler: »Geräte-WLAN«: %s; erlaubte Felder: %s"
-#: ../cli/src/devices.c:1020
+#: ../cli/src/devices.c:1121
msgid "WiFi scan list"
-msgstr "Suchliste für WiFi"
+msgstr "Suchliste des WLAN"
-#: ../cli/src/devices.c:1055 ../cli/src/devices.c:1109
+#: ../cli/src/devices.c:1156 ../cli/src/devices.c:1210
#, c-format
msgid "Error: Access point with hwaddr '%s' not found."
-msgstr "Fehler: Der Zugangspunkt mit Hardware-Adresse '%s' wurde nicht gefunden."
+msgstr ""
+"Fehler: Der Zugangspunkt mit der Hardware-Adresse »%s« wurde nicht gefunden."
-#: ../cli/src/devices.c:1072
+#: ../cli/src/devices.c:1173
#, c-format
msgid "Error: Device '%s' is not a WiFi device."
-msgstr "Fehler: Gerät '%s' ist kein WiFi-Gerät."
+msgstr "Fehler: Gerät »%s« ist kein WLAN-Gerät."
-#: ../cli/src/devices.c:1136
+#: ../cli/src/devices.c:1237
#, c-format
msgid "Error: 'dev wifi' command '%s' is not valid."
-msgstr "Fehler: Der Befehl '%s' für 'dev wifi' ist nicht gültig."
+msgstr "Fehler: Der Befehl »%s« für »dev wifi« ist ungültig."
-#: ../cli/src/devices.c:1183
+#: ../cli/src/devices.c:1284
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
-msgstr "Fehler: Der Befehl '%s' für 'dev' ist nicht gültig."
+msgstr "Fehler: Der Befehl »%s« für »dev« ist ungültig."
#: ../cli/src/network-manager.c:35
msgid "RUNNING"
-msgstr "WIRD AUSGEFÃœHRT"
+msgstr "LAUFEND"
#. 1
#: ../cli/src/network-manager.c:37
-msgid "WIFI-HARDWARE"
-msgstr "WIFI-HARDWARE"
+msgid "NET-ENABLED"
+msgstr "NETZ-AKTIVIERT"
#. 2
#: ../cli/src/network-manager.c:38
-msgid "WIFI"
-msgstr "WIFI"
+msgid "WIFI-HARDWARE"
+msgstr "WLAN-HARDWARE"
#. 3
#: ../cli/src/network-manager.c:39
-msgid "WWAN-HARDWARE"
-msgstr "WWAN-HARDWARE"
+msgid "WIFI"
+msgstr "WLAN"
#. 4
#: ../cli/src/network-manager.c:40
+msgid "WWAN-HARDWARE"
+msgstr "WWAN-HARDWARE"
+
+#. 5
+#: ../cli/src/network-manager.c:41
msgid "WWAN"
msgstr "WWAN"
-#: ../cli/src/network-manager.c:62
+#: ../cli/src/network-manager.c:64
#, c-format
msgid ""
"Usage: nmcli nm { COMMAND | help }\n"
"\n"
-" COMMAND := { status | sleep | wakeup | wifi | wwan }\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"
"\n"
msgstr ""
"Aufruf: nmcli nm { BEFEHL | help }\n"
"\n"
-" BEFEHL := { status | sleep | wakeup | wifi | wwan }\n"
+" BEFEHL := { 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"
"\n"
-#: ../cli/src/network-manager.c:83
+#: ../cli/src/network-manager.c:85
msgid "asleep"
msgstr "schlafend"
-#: ../cli/src/network-manager.c:85
+#: ../cli/src/network-manager.c:87
msgid "connecting"
msgstr "wird verbunden"
-#: ../cli/src/network-manager.c:125
+#: ../cli/src/network-manager.c:128
#, c-format
msgid "Error: 'nm status': %s"
-msgstr "Fehler: 'nm status': %s"
+msgstr "Fehler: »NM-Status«: %s"
-#: ../cli/src/network-manager.c:127
+#: ../cli/src/network-manager.c:130
#, c-format
msgid "Error: 'nm status': %s; allowed fields: %s"
-msgstr "Fehler: 'nm status': %s; erlaubte Felder: %s"
+msgstr "Fehler: »NM-Status«: %s; erlaubte Felder: %s"
-#: ../cli/src/network-manager.c:134
+#: ../cli/src/network-manager.c:137
msgid "NetworkManager status"
msgstr "Status von 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
+#: ../cli/src/network-manager.c:144 ../cli/src/network-manager.c:145
+#: ../cli/src/network-manager.c:146 ../cli/src/network-manager.c:147
+#: ../cli/src/network-manager.c:154 ../cli/src/network-manager.c:247
+#: ../cli/src/network-manager.c:296 ../cli/src/network-manager.c:328
msgid "enabled"
msgstr "aktiviert"
-#: ../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:144 ../cli/src/network-manager.c:145
+#: ../cli/src/network-manager.c:146 ../cli/src/network-manager.c:147
+#: ../cli/src/network-manager.c:154 ../cli/src/network-manager.c:247
+#: ../cli/src/network-manager.c:296 ../cli/src/network-manager.c:328
msgid "disabled"
msgstr "deaktiviert"
-#: ../cli/src/network-manager.c:148
+#: ../cli/src/network-manager.c:152
msgid "running"
msgstr "wird ausgeführt"
-#: ../cli/src/network-manager.c:148
+#: ../cli/src/network-manager.c:152
msgid "not running"
msgstr "wird nicht ausgeführt"
-#: ../cli/src/network-manager.c:201 ../cli/src/network-manager.c:233
+#: ../cli/src/network-manager.c:175
+#, c-format
+msgid "Error: Couldn't connect to system bus: %s"
+msgstr "Fehler: Verbindung zum Systembus konnte nicht hergestellt werden: %s"
+
+#: ../cli/src/network-manager.c:186
+#, c-format
+msgid "Error: Couldn't create D-Bus object proxy."
+msgstr "Fehler: D-Bus-Objektproxy konnte nicht erstellt werden."
+
+#: ../cli/src/network-manager.c:192
+#, c-format
+msgid "Error in sleep: %s"
+msgstr "Fehler beim schlafen gehen: %s"
+
+#: ../cli/src/network-manager.c:237 ../cli/src/network-manager.c:286
+#: ../cli/src/network-manager.c:318
#, c-format
msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
-msgstr "Fehler: '--fields' Wert '%s' hier nicht gültig; erlaubte Felder: %s"
+msgstr ""
+"Fehler: Der Wert »%s« für »--fields« ist hier nicht gültig; erlaubte Felder: %s"
+
+#: ../cli/src/network-manager.c:245
+msgid "Networking enabled"
+msgstr "Netzwerk aktiviert"
+
+#: ../cli/src/network-manager.c:256
+#, c-format
+msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
+msgstr ""
+"Fehler: Ungültiger »aktiviert«-Parameter: »%s«; Verwenden Sie »true« oder "
+"»false«."
+
+#: ../cli/src/network-manager.c:265
+#, c-format
+msgid "Error: Sleeping status is not exported by NetworkManager."
+msgstr ""
+"Fehler: Der Schlafzustand-Status wurde von NetworkManager nicht exportiert."
-#: ../cli/src/network-manager.c:209
+#: ../cli/src/network-manager.c:273
+#, c-format
+msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
+msgstr ""
+"Fehler: Ungültiger »schlafend«-Parameter: »%s«; Verwenden Sie »true« oder "
+"»false«."
+
+#: ../cli/src/network-manager.c:294
msgid "WiFi enabled"
-msgstr "WiFi aktiviert"
+msgstr "WLAN aktiviert"
-#: ../cli/src/network-manager.c:220
+#: ../cli/src/network-manager.c:305
#, c-format
msgid "Error: invalid 'wifi' parameter: '%s'."
-msgstr "Fehler: Ungültiger 'wifi'-Parameter: '%s'."
+msgstr "Fehler: Ungültiger »wifi«-Parameter: »%s«."
-#: ../cli/src/network-manager.c:241
+#: ../cli/src/network-manager.c:326
msgid "WWAN enabled"
msgstr "WWAN aktiviert"
-#: ../cli/src/network-manager.c:252
+#: ../cli/src/network-manager.c:337
#, c-format
msgid "Error: invalid 'wwan' parameter: '%s'."
-msgstr "Fehler: Ungültiger 'wwan'-Parameter: '%s'."
+msgstr "Fehler: Ungültiger »wwan«-Parameter: »%s«."
-#: ../cli/src/network-manager.c:263
+#: ../cli/src/network-manager.c:348
#, c-format
msgid "Error: 'nm' command '%s' is not valid."
-msgstr "Fehler: Der Befehl '%s' für 'nm' ist nicht gültig."
+msgstr "Fehler: Der Befehl »%s« für »nm« ist ungültig."
#: ../cli/src/nmcli.c:69
#, c-format
@@ -993,13 +1053,14 @@ msgstr ""
"Aufruf: %s [OPTIONEN] OBJEKT { BEFEHL | help }\n"
"\n"
"OPTIONEN\n"
-" -t[erse] knappe Ausgabe\n"
-" -p[retty] hübsche Ausgabe\n"
-" -m[ode] tabular|multiline Ausgabemodus\n"
-" -f[ields] <field1,field2,...>|all|common Ausgabefelder angeben\n"
-" -e[scape] yes|no Spaltentrenner in den Werten mit Maskierungszeichen versehen\n"
-" -v[ersion] Programm-Version anzeigen\n"
-" -h[elp] dies Hilfe ausgeben\n"
+" -t[erse] kurze Ausgabe\n"
+" -p[retty] hübsche Ausgabe\n"
+" -m[ode] tabular|multiline Ausgabemodue\n"
+" -f[ields] <field1,field2,…>|all|common gibt Ausgabefelder an\n"
+" -e[scape] yes|no Escape-Spaltenseparator in "
+"Werten\n"
+" -v[ersion] Programmversion anzeigen\n"
+" -h[elp] diese Hilfe ausgeben\n"
"\n"
"OBJEKT\n"
" nm Status von NetworkManager\n"
@@ -1010,52 +1071,52 @@ msgstr ""
#: ../cli/src/nmcli.c:113
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
-msgstr "Fehler: Objekt '%s' ist unbekannt, versuchen Sie 'nmcli help'."
+msgstr "Fehler: Objekt »%s« ist unbekannt, versuchen Sie »nmcli help«."
#: ../cli/src/nmcli.c:143
#, c-format
msgid "Error: Option '--terse' is specified the second time."
-msgstr "Fehler: Option '--terse' wird als zweite Option angegeben."
+msgstr "Fehler: Option »---terse« wurde zweimal gesetzt."
#: ../cli/src/nmcli.c:148
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
-msgstr "Fehler: Option '--terse' und '--pretty' schließen sich gegenseitig aus."
+msgstr "Fehler: Option »--terse« schließt »--pretty« aus."
#: ../cli/src/nmcli.c:156
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
-msgstr "Fehler: Option '--pretty' wird als zweite Option angegeben."
+msgstr "Fehler: Option »--pretty« wurde zweimal gesetzt."
#: ../cli/src/nmcli.c:161
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
-msgstr "Fehler: Option '--pretty' und '--terse' schließen sich gegenseitig aus."
+msgstr "Fehler: Option »--pretty« schließt »--terse« aus."
#: ../cli/src/nmcli.c:171 ../cli/src/nmcli.c:187
#, c-format
msgid "Error: missing argument for '%s' option."
-msgstr "Fehler: Fehlendes Argument für die Option '%s'."
+msgstr "Fehler: Fehlendes Argument für die Option »%s«."
#: ../cli/src/nmcli.c:180 ../cli/src/nmcli.c:196
#, c-format
msgid "Error: '%s' is not valid argument for '%s' option."
-msgstr "Fehler: '%s' kein gültiges Argument für die Option '%s'."
+msgstr "Fehler: »%s« ist kein gültiges Argument für die Option »%s«."
#: ../cli/src/nmcli.c:203
#, c-format
msgid "Error: fields for '%s' options are missing."
-msgstr "Fehler: Felder für die Optionen '%s' fehlen."
+msgstr "Fehler: Felder für die Option »%s« fehlen."
#: ../cli/src/nmcli.c:209
#, c-format
msgid "nmcli tool, version %s\n"
-msgstr "nmcli, Version %s\n"
+msgstr "nmcli-Werkzeug, Version %s\n"
#: ../cli/src/nmcli.c:215
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
-msgstr "Fehler: Option '%s' ist unbekannt, versuchen Sie 'nmcli -help'."
+msgstr "Fehler: Option »%s« ist unbekannt, versuchen Sie »nmcli -help«."
#: ../cli/src/nmcli.c:234
#, c-format
@@ -1071,297 +1132,306 @@ msgstr "Fehler: Verbindung mit NetworkManager konnte nicht hergestellt werden."
msgid "Success"
msgstr "Erfolg"
-#: ../cli/src/settings.c:407
+#: ../cli/src/settings.c:411
#, c-format
msgid "%d (hex-ascii-key)"
-msgstr "%d (hex-ascii-key)"
+msgstr "%d (HEX-ASCII-Schlüssel)"
-#: ../cli/src/settings.c:409
+#: ../cli/src/settings.c:413
#, c-format
msgid "%d (104/128-bit passphrase)"
-msgstr "%d (104/128-Bit Passphrase)"
+msgstr "%d (104/128-bit-Passphrase)"
-#: ../cli/src/settings.c:412
+#: ../cli/src/settings.c:416
#, c-format
msgid "%d (unknown)"
msgstr "%d (unbekannt)"
-#: ../cli/src/settings.c:438
+#: ../cli/src/settings.c:442
msgid "0 (unknown)"
msgstr "0 (unbekannt)"
-#: ../cli/src/settings.c:444
+#: ../cli/src/settings.c:448
msgid "any, "
-msgstr "beliebig, "
+msgstr "jede,"
-#: ../cli/src/settings.c:446
+#: ../cli/src/settings.c:450
msgid "900 MHz, "
-msgstr "900 MHz, "
+msgstr "900 MHz,"
-#: ../cli/src/settings.c:448
+#: ../cli/src/settings.c:452
msgid "1800 MHz, "
-msgstr "1800 MHz, "
+msgstr "1800 MHz,"
-#: ../cli/src/settings.c:450
+#: ../cli/src/settings.c:454
msgid "1900 MHz, "
-msgstr "1900 MHz, "
+msgstr "1900 MHz,"
-#: ../cli/src/settings.c:452
+#: ../cli/src/settings.c:456
msgid "850 MHz, "
-msgstr "850 MHz, "
+msgstr "850 MHz,"
-#: ../cli/src/settings.c:454
+#: ../cli/src/settings.c:458
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../cli/src/settings.c:456
+#: ../cli/src/settings.c:460
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../cli/src/settings.c:458
+#: ../cli/src/settings.c:462
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../cli/src/settings.c:460
+#: ../cli/src/settings.c:464
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../cli/src/settings.c:462
+#: ../cli/src/settings.c:466
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../cli/src/settings.c:464
+#: ../cli/src/settings.c:468
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../cli/src/settings.c:466
+#: ../cli/src/settings.c:470
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../cli/src/settings.c:546 ../cli/src/settings.c:708
+#: ../cli/src/settings.c:554 ../cli/src/settings.c:721
msgid "auto"
msgstr "auto"
-#: ../cli/src/settings.c:704 ../cli/src/settings.c:707 ../cli/src/utils.c:172
+#: ../cli/src/settings.c:716 ../cli/src/settings.c:719
+#: ../cli/src/settings.c:720 ../cli/src/utils.c:172
msgid "not set"
msgstr "nicht gesetzt"
#: ../cli/src/utils.c:124
#, c-format
msgid "field '%s' has to be alone"
-msgstr "Feld '%s' muss isoliert sein"
+msgstr "Feld »%s« muss allein stehen"
#: ../cli/src/utils.c:127
#, c-format
msgid "invalid field '%s'"
-msgstr "ungültiges Feld '%s'"
+msgstr "ungültiges Feld »%s«"
#: ../cli/src/utils.c:146
#, c-format
msgid "Option '--terse' requires specifying '--fields'"
-msgstr "Option '--terse' erfordert die Angabe von '--fields'"
+msgstr "Optione »--terse« benötigt die Angabe von »--fields«"
#: ../cli/src/utils.c:150
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
-msgstr "Option '--terse' erfordert spezielle '--fields' Optionswerte , nicht '%s'"
+msgstr "Option »--terse« benötigt bestimmte »--fields«-Werte, nicht »%s«"
#: ../libnm-util/crypto.c:120
#, c-format
msgid "PEM key file had no end tag '%s'."
-msgstr "PEM-Schlüssel Datei hat kein abschließendes Tag '%s'."
+msgstr "PEM-Schlüsseldatei hat kein abschließendes Tag »%s«."
#: ../libnm-util/crypto.c:130
#, c-format
msgid "Doesn't look like a PEM private key file."
-msgstr "Dies scheint kein privater PEM-Schlüssel zu sein."
+msgstr "Das sieht nicht nach einer privaten PEM-Schlüsseldatei aus."
#: ../libnm-util/crypto.c:138
#, c-format
msgid "Not enough memory to store PEM file data."
-msgstr "Es steht nicht genug Speicher zum Speichern der PEM-Datei zur Verfügung."
+msgstr "Nicht genügend freier Speicher zum Speichern der PEM-Datendatei."
#: ../libnm-util/crypto.c:154
#, c-format
msgid "Malformed PEM file: Proc-Type was not first tag."
-msgstr "Fehlerhafte PEM-Datei: Proc-Type ist nicht der erste Tag."
+msgstr "Fehlerhafte PEM-Datei: Proc-Type ist nicht das erste Tag."
#: ../libnm-util/crypto.c:162
#, c-format
msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
-msgstr "Fehlerhafte PEM-Datei: unbekannter Proc-Type Tag '%s'."
+msgstr "Fehlerhafte PEM-Datei: unbekannter Proc-Type-Tag »%s«."
#: ../libnm-util/crypto.c:172
#, c-format
msgid "Malformed PEM file: DEK-Info was not the second tag."
-msgstr "Fehlerhafte PEM-Datei: DEK-Info ist nicht der zweite Tag."
+msgstr "Fehlerhafte PEM-Datei: DEK-Info ist nicht das zweite Tag."
#: ../libnm-util/crypto.c:183
#, c-format
msgid "Malformed PEM file: no IV found in DEK-Info tag."
-msgstr "Fehlerhafte PEM-Datei: kein IV im DEK-Info Tag gefunden."
+msgstr "Fehlerhafte PEM-Datei: kein IV im DEK-Info-Tag gefunden."
#: ../libnm-util/crypto.c:190
#, c-format
msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
-msgstr "Fehlerhafte PEM-Datei: falsches Format des IV in DEK-Info Tag."
+msgstr "Fehlerhafte PEM-Datei: falsches Format des IV im DEK-Info-Tag."
#: ../libnm-util/crypto.c:203
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
-msgstr ""
-"Fehlerhafte PEM-Datei: Unbekannte Verschlüsselung '%s' des privaten "
-"Schlüssels."
+msgstr "Fehlerhafte PEM-Datei: Unbekannter privater Schlüsselstrom »%s«."
#: ../libnm-util/crypto.c:222
#, c-format
msgid "Could not decode private key."
-msgstr "Der private Schlüssel konnte nicht dekodiert werden."
+msgstr "Der private Schlüssel konnte nicht entschlüsselt werden."
#: ../libnm-util/crypto.c:267
#, c-format
msgid "PEM certificate '%s' had no end tag '%s'."
-msgstr "PEM-Zertifikat '%s' hat kein abschließendes Tag '%s'."
+msgstr "PEM-Zertifikat »%s« hat kein abschließendes Tag »%s«."
#: ../libnm-util/crypto.c:277
#, c-format
msgid "Failed to decode certificate."
-msgstr "Das Dekodieren des Zertifikats ist fehlgeschlagen."
+msgstr "Die Entschlüsselung des Zertifikats scheiterte."
#: ../libnm-util/crypto.c:286
#, c-format
msgid "Not enough memory to store certificate data."
-msgstr "Nicht genug Speicher zum Abspeichern des Zertifikates."
+msgstr "Nicht genug freier Speicher zum Speichern des Zertifikats."
#: ../libnm-util/crypto.c:294
#, c-format
msgid "Not enough memory to store file data."
-msgstr "Nicht genug Speicher zum Abspeichern der Datei."
+msgstr "Nicht genug freier Speicher zum Speichern der Datei."
#: ../libnm-util/crypto.c:324
#, c-format
msgid "IV must be an even number of bytes in length."
-msgstr "IV muss eine gerade Anzahl an Zeichen lang sein."
+msgstr "IV muss eine gerade Anzahl an Byte lang sein."
#: ../libnm-util/crypto.c:333
#, c-format
msgid "Not enough memory to store the IV."
-msgstr "Nicht genug Speicher zum Sichern des IV."
+msgstr "Nicht genug freier Speicher zum Speichern des IV."
#: ../libnm-util/crypto.c:344
#, c-format
msgid "IV contains non-hexadecimal digits."
-msgstr "IV enthält nicht hexadezimale Zeichen."
+msgstr "IV enthält nicht-hexadezimale Zeichen."
#: ../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
#, c-format
msgid "Private key cipher '%s' was unknown."
-msgstr "Unbekannte Verschlüsselung '%s' des privaten Schlüssels."
+msgstr "Privater Schlüsselstrom »%s« ist unbekannt."
#: ../libnm-util/crypto.c:391
#, c-format
msgid "Not enough memory to decrypt private key."
-msgstr "Nicht genug Speicher zum Entschlüsseln des privaten Schlüssels."
+msgstr "Nicht genug freier Speicher zum Entschlüsseln des privaten Schlüssels."
#: ../libnm-util/crypto.c:511
#, c-format
msgid "Unable to determine private key type."
-msgstr "Die Art des privaten Schlüssels kann nicht bestimmt werden."
+msgstr "Der Typ des privaten Schlüssels konnte nicht bestimmt werden."
#: ../libnm-util/crypto.c:530
#, c-format
msgid "Not enough memory to store decrypted private key."
-msgstr "Nicht genug Speicher zum Speichern des entschlüsselten privaten Schlüssels."
+msgstr ""
+"Nicht genug freier Speicher zum Speichern des entschlüsselten privaten "
+"Schlüssels."
#: ../libnm-util/crypto_gnutls.c:49
msgid "Failed to initialize the crypto engine."
-msgstr "Fehler beim Initialisieren der Verschlüsselung."
+msgstr "Die Initialisierung der crypto-engine scheiterte."
#: ../libnm-util/crypto_gnutls.c:93
#, c-format
msgid "Failed to initialize the MD5 engine: %s / %s."
-msgstr "Fehler beim Initialisieren von MD5: %s / %s."
+msgstr "Die Initialisierung der MD5-engine %s / %s scheiterte."
#: ../libnm-util/crypto_gnutls.c:156
#, c-format
msgid "Invalid IV length (must be at least %zd)."
-msgstr "Ungültige Länge des IV (muss zumindest %zd sein)."
+msgstr "Ungültige IV-Länge (muss mindestens %zd betragen)."
#: ../libnm-util/crypto_gnutls.c:165 ../libnm-util/crypto_nss.c:188
#, c-format
msgid "Not enough memory for decrypted key buffer."
-msgstr "Nicht genug Speicher für den Puffer zur Entschlüsselung."
+msgstr ""
+"Nicht genug freier Speicher zum Zwischenspeichern des entschlüsselten "
+"Schlüssels."
#: ../libnm-util/crypto_gnutls.c:173
#, c-format
msgid "Failed to initialize the decryption cipher context: %s / %s."
-msgstr "Fehler beim Initialisieren des Entschlüsselungs-Kontextes: %s / %s."
+msgstr ""
+"Die Initialisierung des Entschlüsselung-Chiffrekontextes scheiterte: %s / %s."
#: ../libnm-util/crypto_gnutls.c:182
#, c-format
msgid "Failed to set symmetric key for decryption: %s / %s."
msgstr ""
-"Fehler beim Festlegen des symmetrischen Schlüssels für die Entschlüsselung: %"
-"s / %s."
+"Das Anlegen der symmetrischen Schlüssel zum Entschlüsseln scheiterte: %s / %"
+"s."
#: ../libnm-util/crypto_gnutls.c:191
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
-msgstr "Fehler beim Festlegen des IV für die Verschlüsselung: %s / %s."
+msgstr "Das Anlegen des IV zum Entschlüsseln scheiterte: %s / %s."
#: ../libnm-util/crypto_gnutls.c:200
#, c-format
msgid "Failed to decrypt the private key: %s / %s."
-msgstr "Fehler beim Entschlüsseln des privaten Schlüssels: %s / %s."
+msgstr "Die Entschlüsselung des privaten Schlüssels scheiterte: %s / %s."
#: ../libnm-util/crypto_gnutls.c:210 ../libnm-util/crypto_nss.c:267
#, c-format
msgid "Failed to decrypt the private key: unexpected padding length."
-msgstr "Fehler beim Entschlüsseln des privaten Schlüssels: Unerwartete Fülllänge."
+msgstr ""
+"Die Entschlüsselung des privaten Schlüssels scheiterte: Unerwartete "
+"Zeilenlänge."
#: ../libnm-util/crypto_gnutls.c:221 ../libnm-util/crypto_nss.c:278
#, c-format
msgid "Failed to decrypt the private key."
-msgstr "Fehler beim Entschlüsseln des privaten Schlüssels."
+msgstr "Die Entschlüsselung des privaten Schlüssels scheiterte."
#: ../libnm-util/crypto_gnutls.c:286 ../libnm-util/crypto_nss.c:356
#, c-format
msgid "Could not allocate memory for encrypting."
-msgstr "Es konnte kein Arbeitsspeicher zur Verschlüsselung angefordert werden."
+msgstr ""
+"Es konnte nicht genügend freier Speicher zum Verschlüsseln angefordert "
+"werden."
#: ../libnm-util/crypto_gnutls.c:294
#, c-format
msgid "Failed to initialize the encryption cipher context: %s / %s."
-msgstr "Fehler beim Initialisieren des Verschlüsselungs-Kontextes: %s / %s."
+msgstr ""
+"Die Initialisierung des Verschlüsselung-Chiffrekontextes scheiterte: %s / %s."
#: ../libnm-util/crypto_gnutls.c:303
#, c-format
msgid "Failed to set symmetric key for encryption: %s / %s."
msgstr ""
-"Fehler beim Festlegen des symmetrischen Schlüssels für die Verschlüsselung: %"
-"s / %s."
+"Das Anlegen des symmetrischen Schlüssels zum Verschlüsseln scheiterte: %s / %"
+"s."
#: ../libnm-util/crypto_gnutls.c:313
#, c-format
msgid "Failed to set IV for encryption: %s / %s."
-msgstr "Fehler beim Festlegen des IV für die Verschlüsselung: %s / %s."
+msgstr "Das Anlegen des IV zur Verschlüsselung scheiterte: %s / %s."
#: ../libnm-util/crypto_gnutls.c:322
#, c-format
msgid "Failed to encrypt the data: %s / %s."
-msgstr "Fehler beim Verschlüsseln der Daten: %s / %s."
+msgstr "Die Verschlüsselung der Daten scheiterte: %s / %s."
#: ../libnm-util/crypto_gnutls.c:362
#, c-format
msgid "Error initializing certificate data: %s"
-msgstr "Fehler beim Initialisieren des Zertifikats: %s"
+msgstr "Die Initialisierung der Zertifikatsdaten schlug fehl: %s"
#: ../libnm-util/crypto_gnutls.c:384
#, c-format
msgid "Couldn't decode certificate: %s"
-msgstr "Zertifikat konnte nicht dekodiert werden: %s"
+msgstr "Zertifikat konnte nicht entschlüsselt werden: %s"
#: ../libnm-util/crypto_gnutls.c:408
#, c-format
@@ -1371,7 +1441,7 @@ msgstr "PKCS#12-Decoder konnte nicht initialisiert werden: %s"
#: ../libnm-util/crypto_gnutls.c:421
#, c-format
msgid "Couldn't decode PKCS#12 file: %s"
-msgstr "PKCS#12 konnte nicht decodiert werden: %s"
+msgstr "PKCS#12 konnte nicht entschlüsselt werden: %s"
#: ../libnm-util/crypto_gnutls.c:433
#, c-format
@@ -1381,79 +1451,82 @@ msgstr "PKCS#12-Datei konnte nicht überprüft werden: %s"
#: ../libnm-util/crypto_nss.c:56
#, c-format
msgid "Failed to initialize the crypto engine: %d."
-msgstr "Fehler beim Initialisieren der Verschlüsselung: %d."
+msgstr "Die Initialisierung der crypto-engine scheiterte: %d."
#: ../libnm-util/crypto_nss.c:111
#, c-format
msgid "Failed to initialize the MD5 context: %d."
-msgstr "Fehler beim Initialisieren des MD5-Kontextes: %d."
+msgstr "Die Initialisierung des MD5-Kontexts scheiterte: %d."
#: ../libnm-util/crypto_nss.c:179
#, c-format
msgid "Invalid IV length (must be at least %d)."
-msgstr "Ungültige Länge des IV (muss zumindest %d sein)."
+msgstr "Ungültige IV-Länge (muss mindestens %d betragen)."
#: ../libnm-util/crypto_nss.c:196
#, c-format
msgid "Failed to initialize the decryption cipher slot."
-msgstr "Fehler beim Einrichten des Verschlüsselungs-Slots."
+msgstr "Die Initialisierung des Entschlüsselungsstromslots scheiterte."
#: ../libnm-util/crypto_nss.c:206
#, c-format
msgid "Failed to set symmetric key for decryption."
-msgstr "Fehler beim Festlegen des symmetrischen Schlüssels für die Entschlüsselung."
+msgstr ""
+"Das Anlegen des symmetrischen Schlüssels zur Entschlüsselung scheiterte."
#: ../libnm-util/crypto_nss.c:216
#, c-format
msgid "Failed to set IV for decryption."
-msgstr "Fehler beim Festlegen des IV für die Entschlüsselung."
+msgstr "Das Anlegen des IV zur Entschlüsselung scheiterte."
#: ../libnm-util/crypto_nss.c:224
#, c-format
msgid "Failed to initialize the decryption context."
-msgstr "Fehler beim Einrichten des Entschlüsselungs-Kontextes."
+msgstr "Die Initialisierung des Entschlüsselungskontexts scheiterte."
#: ../libnm-util/crypto_nss.c:237
#, c-format
msgid "Failed to decrypt the private key: %d."
-msgstr "Fehler beim Entschlüsseln des privaten Schlüssels: %d."
+msgstr "Das Entschlüsseln des privaten Schlüssels scheiterte: %d."
#: ../libnm-util/crypto_nss.c:245
#, c-format
msgid "Failed to decrypt the private key: decrypted data too large."
msgstr ""
-"Fehler beim Entschlüsseln des privaten Schlüssels: Die entschlüsselten Daten "
-"sind zu groß."
+"Das Entschlüsseln des privaten Schlüssels scheiterte: Die entschlüsselten "
+"Daten sind zu groß."
#: ../libnm-util/crypto_nss.c:256
#, c-format
msgid "Failed to finalize decryption of the private key: %d."
-msgstr "Fehler beim Abschließen der Entschlüsselung des privaten Schlüssels: %d."
+msgstr ""
+"Das Abschließen der Entschlüsselung des privaten Schlüssels scheiterte: %d."
#: ../libnm-util/crypto_nss.c:364
#, c-format
msgid "Failed to initialize the encryption cipher slot."
-msgstr "Fehler beim Einrichten des Verschlüsselungs-Slots."
+msgstr "Die Initialisierung des Verschlüsselungsstromslots scheiterte."
#: ../libnm-util/crypto_nss.c:372
#, c-format
msgid "Failed to set symmetric key for encryption."
-msgstr "Fehler beim Festlegen des symmetrischen Schlüssels für die Verschlüsselung."
+msgstr ""
+"Das Anlegen des symmetrischen Schlüssels zur Verschlüsselung scheiterte."
#: ../libnm-util/crypto_nss.c:380
#, c-format
msgid "Failed to set IV for encryption."
-msgstr "Fehler beim Festlegen des IV für die Verschlüsselung."
+msgstr "Das Anlegen des IV zur Verschlüsselung scheiterte."
#: ../libnm-util/crypto_nss.c:388
#, c-format
msgid "Failed to initialize the encryption context."
-msgstr "Fehler beim Initialisieren des Verschlüsselungs-Kontextes."
+msgstr "Die Initialisierung des Verschlusselungskontexts scheiterte."
#: ../libnm-util/crypto_nss.c:396
#, c-format
msgid "Failed to encrypt: %d."
-msgstr "Fehler beim Verschlüsseln: %d."
+msgstr "Das Verschlüsseln scheiterte: %d."
#: ../libnm-util/crypto_nss.c:404
#, c-format
@@ -1463,12 +1536,12 @@ msgstr "Unerwartete Datenmenge nach der Verschlüsselung."
#: ../libnm-util/crypto_nss.c:447
#, c-format
msgid "Couldn't decode certificate: %d"
-msgstr "Zertifikat konnte nicht dekodiert werden: %d"
+msgstr "Das Zertifikat konnte nicht entschlüsselt werden: %d"
#: ../libnm-util/crypto_nss.c:482
#, c-format
msgid "Couldn't convert password to UCS2: %d"
-msgstr "Passwort konnte nicht zu UCS2 konvertiert werden: %d"
+msgstr "Das Passwort konnte nicht zu UCS2 konvertiert werden: %d"
#: ../libnm-util/crypto_nss.c:510
#, c-format
@@ -1478,7 +1551,7 @@ msgstr "PKCS#12-Decoder konnte nicht initialisiert werden: %d"
#: ../libnm-util/crypto_nss.c:519
#, c-format
msgid "Couldn't decode PKCS#12 file: %d"
-msgstr "PKCS#12-Datei konnte nicht decodiert werden: %d"
+msgstr "PKCS#12-Datei konnte nicht verschlüsselt werden: %d"
#: ../libnm-util/crypto_nss.c:528
#, c-format
@@ -1487,35 +1560,142 @@ msgstr "PKCS#12-Datei konnte nicht überprüft werden: %d"
#: ../libnm-util/crypto_nss.c:557
msgid "Could not generate random data."
-msgstr "Zufällige Daten konnten nicht erstellt werden."
+msgstr "Es konnten keine Zufallsdaten generiert werden."
-#: ../libnm-util/nm-utils.c:1925
+#: ../libnm-util/nm-utils.c:1975
#, c-format
msgid "Not enough memory to make encryption key."
-msgstr "Nicht genug Speicher zum Erstellen eines Schlüssels."
+msgstr ""
+"Nicht genügend freier Speicher zur Erstellung des Verschlüsselungsschlüssels."
-#: ../libnm-util/nm-utils.c:2035
+#: ../libnm-util/nm-utils.c:2085
msgid "Could not allocate memory for PEM file creation."
-msgstr "Es konnte kein Speicher zum Erstellen der PEM-Datei angefordert werden."
+msgstr ""
+"Es konnte nicht genügend freier Speicher zur Erstellung der PEM-Datei "
+"angefordert werden."
-#: ../libnm-util/nm-utils.c:2047
+#: ../libnm-util/nm-utils.c:2097
#, c-format
msgid "Could not allocate memory for writing IV to PEM file."
msgstr ""
-"Es konnte kein Speicher zum Schreiben des IV in die PEM-Datei angefordert "
-"werden."
+"Es konnte nicht genügend freier Speicher zum Schreiben des IV in die PEM-"
+"Datei angefordert werden."
-#: ../libnm-util/nm-utils.c:2059
+#: ../libnm-util/nm-utils.c:2109
#, c-format
msgid "Could not allocate memory for writing encrypted key to PEM file."
msgstr ""
-"Es konnte kein Speicher zum Schreiben des IV in die PEM-Datei angefordert "
-"werden."
+"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:2078
+#: ../libnm-util/nm-utils.c:2128
#, c-format
msgid "Could not allocate memory for PEM file data."
-msgstr "Es konnte kein Speicher für die Daten der PEM-Datei angefordert werden."
+msgstr ""
+"Es konnte nicht genügend freier Speicher für die PEM-Datei angefordert "
+"werden."
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
+msgid "Connection sharing via a protected WiFi network"
+msgstr "Verbindungsfreigabe über ein geschütztes WLAN-Netzwerk"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
+msgid "Connection sharing via an open WiFi network"
+msgstr "Verbindungsfreigabe über ein offenes WLAN-Netzwerk"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
+msgid "Modify persistent system hostname"
+msgstr "Den ständigen Rechnernamen des Systems bearbeiten"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
+msgid "Modify system connections"
+msgstr "Systemverbindungen bearbeiten"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
+msgid "System policy prevents modification of system settings"
+msgstr ""
+"Die Systemrichtlinien verhindern das Bearbeiten von Systemeinstellungen"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
+msgid "System policy prevents modification of the persistent system hostname"
+msgstr ""
+"Die Systemrichtlinien verhindern das Bearbeiten des ständigen Rechnernamens "
+"des Systems"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
+msgid "System policy prevents sharing connections via a protected WiFi network"
+msgstr ""
+"Die Systemrichtlinien verhindern Verbindungsfreigaben über ein geschütztes "
+"WLAN-Netzwerk"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
+msgid "System policy prevents sharing connections via an open WiFi network"
+msgstr ""
+"Die Systemrichtlinien verhindern Verbindungsfreigaben über ein offenes WLAN-"
+"Netzwerk"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
+msgid "Allow control of network connections"
+msgstr "Die Kontrolle von Netzwerkverbindungen erlauben"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
+msgid "Allow use of user-specific connections"
+msgstr "Die Verwendung von benutzerspezifischen Verbindungen erlauben"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
+msgid "Enable or disable WiFi devices"
+msgstr "WLAN-Geräte aktivieren oder deaktivieren"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
+msgid "Enable or disable mobile broadband devices"
+msgstr "Mobile Breitbandgeräte aktivieren oder deaktivieren"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+msgid "Enable or disable system networking"
+msgstr "System-Netzwerke aktivieren oder deaktivieren"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
+msgid ""
+"Put NetworkManager to sleep or wake it up (should only be used by system "
+"power management)"
+msgstr ""
+"NetworkManager in den Schlafzustand versetzen oder daraus aufwecken (Sollte "
+"nur von der System-Energieverwaltung verwendet werden)"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
+msgid "System policy prevents control of network connections"
+msgstr ""
+"Die Systemrichtlinien verhindern die Kontrolle von Netzwerkverbindungen"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
+msgid "System policy prevents enabling or disabling WiFi devices"
+msgstr ""
+"Die Systemrichtlinien verhindern die Aktivierung oder Deaktivierung von WLAN-"
+"Geräten"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
+msgid "System policy prevents enabling or disabling mobile broadband devices"
+msgstr ""
+"Die Systemrichtlinien verhindern die Aktivierung oder Deaktivierung mobiler "
+"Breitbandgeräte"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
+msgid "System policy prevents enabling or disabling system networking"
+msgstr ""
+"Die Systemrichtlinien verhindern die Aktivierung oder Deaktivierung von "
+"System-Netzwerken"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
+msgid "System policy prevents putting NetworkManager to sleep or waking it up"
+msgstr ""
+"Die Systemrichtlinien verhindern das in den Schlaf versetzen oder Aufwecken "
+"von NetworkManager"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
+msgid "System policy prevents use of user-specific connections"
+msgstr ""
+"Die Systemrichtlinien verhindern die Verwendung von benutzerspezifischen "
+"Verbindungen"
#: ../src/nm-netlink-monitor.c:100 ../src/nm-netlink-monitor.c:231
#: ../src/nm-netlink-monitor.c:653
@@ -1531,148 +1711,287 @@ msgstr "Während des Wartens auf Daten am Socket ist ein Fehler aufgetreten"
#, c-format
msgid "unable to connect to netlink for monitoring link status: %s"
msgstr ""
-"Es kann nicht mit netlink zur Ãœberwachung der Netzwerkverbindung verbunden "
-"werden: %s"
+"Die Verbindung zu netlink zur Ãœberwachung der Netzwerkverbindung konnte "
+"nicht hergestellt werden: %s"
#: ../src/nm-netlink-monitor.c:265
#, c-format
msgid "unable to enable netlink handle credential passing: %s"
-msgstr "Kann Weitergabe von Berechtigungen des netlink-Handle nicht aktivieren: %s"
+msgstr ""
+"Die netlink-Handle-Berechtigungsnachweisfreigabe konnte nicht aktiviert "
+"werden: %s"
#: ../src/nm-netlink-monitor.c:291 ../src/nm-netlink-monitor.c:353
#, c-format
msgid "unable to allocate netlink handle for monitoring link status: %s"
msgstr ""
-"Es kann kein netlink-Handle zur Ãœberwachung der Netzwerkverbindung "
+"Es konnte kein netlink-Handle zur Ãœberwachung der Netzwerkverbindung "
"angefordert werden: %s"
#: ../src/nm-netlink-monitor.c:376
#, c-format
msgid "unable to allocate netlink link cache for monitoring link status: %s"
msgstr ""
-"Es kann kein netlink-Cache zur Ãœberwachung der Netzwerkverbindung belegt "
-"werden: %s"
+"Es konnte kein netlink-Verbindungszwischenspeicher zur Ãœberwachung der "
+"Netzwerkverbindung angefordert werden: %s"
#: ../src/nm-netlink-monitor.c:502
#, c-format
msgid "unable to join netlink group: %s"
-msgstr "Der netlink-Gruppe kann nicht beigetreten werden: %s"
+msgstr "Der netlink-Gruppe konnte nicht beigetreten werden: %s"
#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642
#, c-format
msgid "error updating link cache: %s"
-msgstr "Fehler beim Aktualisieren des Verbindungs-Cache: %s"
+msgstr "Die Aktualisierung des Verbindungszwischenspeichers schlug fehl: %s"
-#: ../src/main.c:502
+#: ../src/main.c:499
#, c-format
msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgstr ""
-"Ungültige Option. Verwenden Sie bitte '--help', um eine Liste der gültigen "
+"Ungültige Option. Verwenden Sie --help um eine Liste der verfügbaren "
"Optionen zu erhalten.\n"
-#: ../src/main.c:562
+#: ../src/main.c:570
#, c-format
msgid "%s. Please use --help to see a list of valid options.\n"
msgstr ""
-"%s Verwenden Sie bitte '--help', um eine Liste der gültigen Optionen zu "
+"%s. Verwenden Sie --help, um eine Liste der verfügbaren Optionen zu "
"erhalten.\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:325
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:328
msgid "# Created by NetworkManager\n"
msgstr "# Erstellt von NetworkManager\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:341
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:344
#, c-format
msgid ""
"# Merged from %s\n"
"\n"
msgstr ""
-"# Zusammengefügt aus %s\n"
+"# Zusammengeführt aus %s\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:279
+#: ../src/dhcp-manager/nm-dhcp-manager.c:284
msgid "no usable DHCP client could be found."
-msgstr "Kein brauchbarer DHCP-Client gefunden."
+msgstr "Es konnte kein verwendbarer DHCP-Client gefunden werden."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:288
+#: ../src/dhcp-manager/nm-dhcp-manager.c:293
msgid "'dhclient' could be found."
-msgstr "'dhclient' wurde gefunden."
+msgstr "»dhclient« konnte nicht gefunden werden."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:298
+#: ../src/dhcp-manager/nm-dhcp-manager.c:303
msgid "'dhcpcd' could be found."
-msgstr "'dhcpcd' wurde gefunden."
+msgstr "»dhcpcd« konnte nicht gefunden werden."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:306
+#: ../src/dhcp-manager/nm-dhcp-manager.c:311
#, c-format
msgid "unsupported DHCP client '%s'"
-msgstr "Nicht unterstützter DHCP-Client '%s'"
+msgstr "Nicht unterstützter DHCP-Client »%s«"
#: ../src/logging/nm-logging.c:146
#, c-format
msgid "Unknown log level '%s'"
-msgstr "Unbekanntes Log-Level '%s'"
+msgstr "Unbekannte Protokollstufe »%s«"
#: ../src/logging/nm-logging.c:171
#, c-format
msgid "Unknown log domain '%s'"
-msgstr "Unbekannte Log-Domain '%s'"
+msgstr "Unbekannte Protokolldomäne »%s«"
-#: ../src/named-manager/nm-named-manager.c:343
+#: ../src/dns-manager/nm-dns-manager.c:384
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr ""
-"HINWEIS: Der libc-Auflöser unterstützt eventuell nicht mehr als 3 Server zur "
-"Namensauflösung."
+"HINWEIS: Der libc-resolver unterstützt eventuell nicht mehr als drei "
+"Nameserver."
-#: ../src/named-manager/nm-named-manager.c:345
+#: ../src/dns-manager/nm-dns-manager.c:386
msgid "The nameservers listed below may not be recognized."
-msgstr ""
-"Die nachfolgend aufgelisteten Server zur Namensauflösung werden eventuell "
-"nicht erkannt."
+msgstr "Die nachfolgend gelisteten Nameserver werden eventuell nicht erkannt."
#: ../src/system-settings/nm-default-wired-connection.c:157
#, c-format
msgid "Auto %s"
msgstr "Auto %s"
-#: ../system-settings/plugins/ifcfg-rh/reader.c:3256
+#: ../system-settings/plugins/ifcfg-rh/reader.c:3412
+#: ../system-settings/plugins/ifnet/connection_parser.c:49
msgid "System"
msgstr "System"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
-msgid "Connection sharing via a protected WiFi network"
-msgstr "Verbindungsfreigabe über ein geschütztes WiFi-Netzwerk"
+#~ msgid "Type"
+#~ msgstr "Typ"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
-msgid "Connection sharing via an open WiFi network"
-msgstr "Verbindungsfreigabe über ein offenes WiFi-Netzwerk"
+#~ msgid "Name"
+#~ msgstr "Name"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
-msgid "Modify persistent system hostname"
-msgstr "Den ständigen Rechnernamen des Systems bearbeiten"
+#~ msgid "User connections:\n"
+#~ msgstr "Benutzerverbindungen:\n"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
-msgid "Modify system connections"
-msgstr "System-Verbindungen bearbeiten"
+#~ msgid "System-wide connections"
+#~ msgstr "Systemweite Verbindungen"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
-msgid "System policy prevents modification of system settings"
-msgstr "Die Systemrichtlinien verhindern das Bearbeiten von Systemeinstellungen"
+#~ msgid "Default"
+#~ msgstr "Vorgabe"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
-msgid "System policy prevents modification of the persistent system hostname"
-msgstr ""
-"Die Systemrichtlinien verhindern das Bearbeiten des ständigen Rechnernamens "
-"des Systems"
+#~ msgid "Service"
+#~ msgstr "Dienst"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
-msgid "System policy prevents sharing connections via a protected WiFi network"
-msgstr ""
-"Die Systemrichtlinien verhindern Verbindungsfreigaben über ein geschütztes "
-"WiFi-Netzwerk"
+#~ msgid "%s, %s, Freq %d MHz, Rate %d Mb/s, Strength %d"
+#~ msgstr "%s, %s, Frequenz %d MHz, Durchsatz %d Mb/s, Stärke %d"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
-msgid "System policy prevents sharing connections via an open WiFi network"
-msgstr ""
-"Die Systemrichtlinien verhindern Verbindungsfreigaben über ein offenes WiFi-"
-"Netzwerk"
+#~ msgid "Device"
+#~ msgstr "Gerät"
+
+#~ msgid "Driver"
+#~ msgstr "Treiber"
+
+#~ msgid "State"
+#~ msgstr "Status"
+
+#~ msgid "HW Address"
+#~ msgstr "Hardwareadresse"
+
+#~ msgid ""
+#~ "\n"
+#~ " Capabilities:\n"
+#~ msgstr ""
+#~ "\n"
+#~ " Fähigkeiten:\n"
+
+#~ msgid "Carrier Detect"
+#~ msgstr "Trägersignalkennung"
+
+#~ msgid "Speed"
+#~ msgstr "Geschwindigkeit"
+
+#~ msgid ""
+#~ "\n"
+#~ " Wireless Properties\n"
+#~ msgstr ""
+#~ "\n"
+#~ " Eigenschaften der Funkverbindung\n"
+
+#~ msgid "WEP Encryption"
+#~ msgstr "WEP-Verschlüsselung"
+
+#~ msgid "WPA Encryption"
+#~ msgstr "WPA-Verschlüsselung"
+
+#~ msgid "WPA2 Encryption"
+#~ msgstr "WPA2-Verschlüsselung"
+
+#~ msgid "TKIP cipher"
+#~ msgstr "TKIP-Chiffre"
+
+#~ msgid "CCMP cipher"
+#~ msgstr "CCMP-Chiffre"
+
+#~ msgid ""
+#~ "\n"
+#~ " Wireless Access Points %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ " Funknetzwerk-Zugangspunkte %s\n"
+
+#~ msgid "(* = current AP)"
+#~ msgstr "(* = momentaner Zugangspunkt)"
+
+#~ msgid ""
+#~ "\n"
+#~ " Wired Properties\n"
+#~ msgstr ""
+#~ "\n"
+#~ " Eigenschaften der kabelgebundenen Verbindung\n"
+
+#~ msgid "Carrier"
+#~ msgstr "Trägersignal"
+
+#~ msgid ""
+#~ "\n"
+#~ " IPv4 Settings:\n"
+#~ msgstr ""
+#~ "\n"
+#~ " IPv4-Einstellungen:\n"
+
+#~ msgid "Address"
+#~ msgstr "Adresse"
+
+#~ msgid "Prefix"
+#~ msgstr "Präfix"
+
+#~ msgid "Gateway"
+#~ msgstr "Gateway"
+
+#~ msgid "Device:"
+#~ msgstr "Gerät:"
+
+#~ msgid "Error: hwaddr has to be specified."
+#~ msgstr "Fehler: Es muss eine Hardwareadresse angegeben werden."
+
+#~ msgid "AP parameters"
+#~ msgstr "Parameter des Zugangspunkts"
+
+#~ msgid "Frequency:"
+#~ msgstr "Frequenz:"
+
+#~ msgid "Mode:"
+#~ msgstr "Modus:"
+
+#~ msgid "Ad-hoc"
+#~ msgstr "Ad-hoc"
+
+#~ msgid "Maximal bitrate:"
+#~ msgstr "Maximale Ãœbertragungsgeschwindigkeit:"
+
+#~ msgid "Strength:"
+#~ msgstr "Stärke:"
+
+#~ msgid "Flags:"
+#~ msgstr "Flags:"
+
+#~ msgid "privacy"
+#~ msgstr "Vertraulichkeit"
+
+#~ msgid "WPA flags:"
+#~ msgstr "WPA-Flags:"
+
+#~ msgid "RSN flags:"
+#~ msgstr "RSN-Flags:"
+
+#~ msgid "NM running:"
+#~ msgstr "NM läuft:"
+
+#~ msgid "NM state:"
+#~ msgstr "Status von NM:"
+
+#~ msgid "NM wireless hardware:"
+#~ msgstr "NM Funknetzwerk-Hardware:"
+
+#~ msgid "NM wireless:"
+#~ msgstr "NM Funk:"
+
+#~ msgid "NM WWAN hardware:"
+#~ msgstr "NM WWAN-Hardware:"
+
+#~ msgid "unable to join netlink group for monitoring link status: %s"
+#~ msgstr ""
+#~ "Es kann nicht mit einer netlink-Gruppe zur Ãœberwachung der "
+#~ "Netzwerkverbindung verbunden werden: %s"
+
+#~ msgid "unable to connect to netlink: %s"
+#~ msgstr "Es kann nicht mit netlink verbunden werden: %s"
+
+#~ msgid "operation took too long"
+#~ msgstr "Vorgang dauerte zu lange"
+
+#~ msgid "received data from wrong type of sender"
+#~ msgstr "Daten von einem falschen Absendertyp erhalten"
+
+#~ msgid "received data from unexpected sender"
+#~ msgstr "Daten von einem unerwarteten Absender erhalten"
+#~ msgid "too much data was sent over socket and some of it was lost"
+#~ msgstr ""
+#~ "Es wurden zu viele Daten über den Socket gesendet und einige davon sind "
+#~ "verloren gegangen"
diff --git a/po/el.po b/po/el.po
index 7890d9b9ce..cb9fa186b0 100644
--- a/po/el.po
+++ b/po/el.po
@@ -6,21 +6,1186 @@
# Dimitris Glezos <dimitris@glezos.com>, 2006.
# Jennie Petoumenou <epetoumenou@gmail.com>, 2008, 2009.
# Tournaris Pavlos <p.tournaris@gmail.com>, 2009.
+# Simos Xenitellis <simos@gnome.org>, 2010.
+#
msgid ""
msgstr ""
"Project-Id-Version: NetworkManager.HEAD\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=NetworkManager&component=general\n"
-"POT-Creation-Date: 2009-08-27 03:24+0000\n"
-"PO-Revision-Date: 2009-09-10 11:08+0200\n"
-"Last-Translator: Tournaris Pavlos <p.tournaris@gmail.com>\n"
-"Language-Team: Greek <team@lists.gnome.gr>\n"
+"POT-Creation-Date: 2010-08-10 03:25+0000\n"
+"PO-Revision-Date: 2010-09-01 22:08+0300\n"
+"Last-Translator: Simos Xenitellis <simos@gnome.org>\n"
+"Language-Team: Greek <team@gnome.gr>\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=2; plural=n>1;\n"
"X-Generator: Lokalize 0.3\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
+msgid "NAME"
+msgstr "ΟÎΟΜΑ"
+
+#. 0
+#: ../cli/src/connections.c:61 ../cli/src/connections.c:76
+msgid "UUID"
+msgstr "UUID"
+
+#. 1
+#: ../cli/src/connections.c:62
+msgid "DEVICES"
+msgstr "ΣΥΣΚΕΥΕΣ"
+
+#. 2
+#: ../cli/src/connections.c:63 ../cli/src/connections.c:78
+msgid "SCOPE"
+msgstr "ΕΥΡΟΣ"
+
+#. 3
+#: ../cli/src/connections.c:64
+msgid "DEFAULT"
+msgstr "ΠΡΟΕΠΙΛΟΓΗ"
+
+#. 4
+#: ../cli/src/connections.c:65
+msgid "DBUS-SERVICE"
+msgstr "ΥΠΗΡΕΣΙΑ DBUS"
+
+#. 5
+#: ../cli/src/connections.c:66
+msgid "SPEC-OBJECT"
+msgstr "SPEC-OBJECT"
+
+#. 6
+#: ../cli/src/connections.c:67
+msgid "VPN"
+msgstr "VPN"
+
+#. 1
+#. 0
+#. 1
+#: ../cli/src/connections.c:77 ../cli/src/devices.c:62 ../cli/src/devices.c:90
+msgid "TYPE"
+msgstr "ΤΥΠΟΣ"
+
+#. 3
+#: ../cli/src/connections.c:79
+msgid "TIMESTAMP"
+msgstr "TIMESTAMP"
+
+#. 4
+#: ../cli/src/connections.c:80
+msgid "TIMESTAMP-REAL"
+msgstr "TIMESTAMP-ΠΡΑΓΜΑΤΙΚΟ"
+
+#. 5
+#: ../cli/src/connections.c:81
+msgid "AUTOCONNECT"
+msgstr "ΑΥΤΟΜΑΤΗ-ΣΥÎΔΕΣΗ"
+
+#. 6
+#: ../cli/src/connections.c:82
+msgid "READONLY"
+msgstr "ΜΟÎΟ-ΓΙΑ-ΑÎΑΓÎΩΣΗ"
+
+#: ../cli/src/connections.c:158
+#, c-format
+msgid ""
+"Usage: nmcli con { COMMAND | help }\n"
+" COMMAND := { list | status | up | down }\n"
+"\n"
+" list [id <id> | uuid <id> | system | user]\n"
+" status\n"
+" up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout "
+"<timeout>]\n"
+" down id <id> | uuid <id>\n"
+msgstr ""
+"ΧÏήση: nmcli con { COMMAND | help }\n"
+" COMMAND := { list | status | up | down }\n"
+"\n"
+" list [id <id> | uuid <id> | system | user]\n"
+" status\n"
+" up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout "
+"<timeout>]\n"
+" down id <id> | uuid <id>\n"
+
+#: ../cli/src/connections.c:198 ../cli/src/connections.c:537
+#, c-format
+msgid "Error: 'con list': %s"
+msgstr "Σφάλμα: 'con list': %s"
+
+#: ../cli/src/connections.c:200 ../cli/src/connections.c:539
+#, c-format
+msgid "Error: 'con list': %s; allowed fields: %s"
+msgstr "Σφάλμα: 'con list': %s; επιτÏεπόμενα πεδία: %s"
+
+#: ../cli/src/connections.c:208
+msgid "Connection details"
+msgstr "ΛεπτομέÏειες σÏνδεσης"
+
+#: ../cli/src/connections.c:382 ../cli/src/connections.c:602
+#| msgid "System"
+msgid "system"
+msgstr "σÏστημα"
+
+#: ../cli/src/connections.c:382 ../cli/src/connections.c:602
+msgid "user"
+msgstr "χÏήστης"
+
+#: ../cli/src/connections.c:384
+msgid "never"
+msgstr "ποτέ"
+
+#. "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
+msgid "yes"
+msgstr "ναι"
+
+#: ../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
+msgid "no"
+msgstr "όχι"
+
+#: ../cli/src/connections.c:458 ../cli/src/connections.c:501
+#| msgid "Modify system connections"
+msgid "System connections"
+msgstr "Συνδέσεις συστήματος"
+
+#: ../cli/src/connections.c:463 ../cli/src/connections.c:514
+#| msgid "Modify system connections"
+msgid "User connections"
+msgstr "Συνδέσεις χÏήστη"
+
+#: ../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
+#, c-format
+msgid "Error: %s argument is missing."
+msgstr "Σφάλμα: λείπει το ÏŒÏισμα %s."
+
+#: ../cli/src/connections.c:488
+#, c-format
+msgid "Error: %s - no such connection."
+msgstr "Σφάλμα: %s - δεν υπάÏχει τέτοια σÏνδεση."
+
+#: ../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
+#, c-format
+msgid "Unknown parameter: %s\n"
+msgstr "Άγνωστη παÏάμετÏος: %s\n"
+
+#: ../cli/src/connections.c:529
+#, c-format
+msgid "Error: no valid parameter specified."
+msgstr "Σφάλμα: δεν οÏίσθηκε έγκυÏη παÏάμετÏος."
+
+#: ../cli/src/connections.c:544 ../cli/src/connections.c:1577
+#: ../cli/src/devices.c:1293 ../cli/src/network-manager.c:274
+#, c-format
+msgid "Error: %s."
+msgstr "Σφάλμα: %s."
+
+#: ../cli/src/connections.c:650
+#, c-format
+msgid "Error: 'con status': %s"
+msgstr "Σφάλμα: 'con status': %s"
+
+#: ../cli/src/connections.c:652
+#, c-format
+msgid "Error: 'con status': %s; allowed fields: %s"
+msgstr "Σφάλμα: 'con status': %s; επιτÏεπόμενα πεδία: %s"
+
+#: ../cli/src/connections.c:659
+#| msgid "Modify system connections"
+msgid "Active connections"
+msgstr "ΕνεÏγές συνδέσεις"
+
+#: ../cli/src/connections.c:1027
+#, c-format
+msgid "no active connection on device '%s'"
+msgstr "δεν υπάÏχει ενεÏγή σÏνδεση στη συσκευή '%s'"
+
+#: ../cli/src/connections.c:1035
+#, c-format
+msgid "no active connection or device"
+msgstr "δεν πυάÏχει ενεÏγή σÏνδεση ή συσκευή"
+
+#: ../cli/src/connections.c:1085
+#, c-format
+msgid "device '%s' not compatible with connection '%s'"
+msgstr "η συσκευή '%s' δεν είναι συμβατή με τη σÏνδεση '%s'"
+
+#: ../cli/src/connections.c:1087
+#, c-format
+msgid "no device found for connection '%s'"
+msgstr "δεν βÏέθηκε συσκευή για τη σÏνδεση '%s'"
+
+#: ../cli/src/connections.c:1098
+msgid "activating"
+msgstr "ενεÏγοποίηση"
+
+#: ../cli/src/connections.c:1100
+msgid "activated"
+msgstr "ενεÏγοποιήθηκε"
+
+#: ../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
+msgid "unknown"
+msgstr "άγνωστη"
+
+#: ../cli/src/connections.c:1112
+msgid "VPN connecting (prepare)"
+msgstr "ΣÏνδεση VPN (Ï€Ïοετοιμασία)"
+
+#: ../cli/src/connections.c:1114
+msgid "VPN connecting (need authentication)"
+msgstr "ΣÏνδεση VPN (απαιτείται πιστοποίηση)"
+
+#: ../cli/src/connections.c:1116
+msgid "VPN connecting"
+msgstr "ΣÏνδεση VPN"
+
+#: ../cli/src/connections.c:1118
+msgid "VPN connecting (getting IP configuration)"
+msgstr "ΣÏνδεση VPN (γίνεται λήψη Ïυθμίσεων IP)"
+
+#: ../cli/src/connections.c:1120
+msgid "VPN connected"
+msgstr "VPN συνδέθηκε"
+
+#: ../cli/src/connections.c:1122
+msgid "VPN connection failed"
+msgstr "ΣÏνδεση VPN απέτυχε"
+
+#: ../cli/src/connections.c:1124
+msgid "VPN disconnected"
+msgstr "VPN αποσυνδέθηκε"
+
+#: ../cli/src/connections.c:1135
+msgid "unknown reason"
+msgstr "άγνωστη αιτία"
+
+#: ../cli/src/connections.c:1137
+msgid "none"
+msgstr "κανένα"
+
+#: ../cli/src/connections.c:1139
+msgid "the user was disconnected"
+msgstr "ο χÏήστης αποσυνδέθηκε"
+
+#: ../cli/src/connections.c:1141
+msgid "the base network connection was interrupted"
+msgstr "η βασική σÏνδεση δικτÏου διακόπηκε"
+
+#: ../cli/src/connections.c:1143
+msgid "the VPN service stopped unexpectedly"
+msgstr "η υπηÏεσία VPN σταμάτησε απÏόσμενα"
+
+#: ../cli/src/connections.c:1145
+msgid "the VPN service returned invalid configuration"
+msgstr "η υπηÏεσία VPN επέστÏεψε μη έγκυÏη διαμόÏφωση"
+
+#: ../cli/src/connections.c:1147
+msgid "the connection attempt timed out"
+msgstr "έληξε το χÏονικό ÏŒÏιο απόπειÏας σÏνδεσης"
+
+#: ../cli/src/connections.c:1149
+msgid "the VPN service did not start in time"
+msgstr "η υπηÏεσία VPN δεν ξεκίνησε εγκαίÏως"
+
+#: ../cli/src/connections.c:1151
+msgid "the VPN service failed to start"
+msgstr "η υπηÏεσία VPN απέτυχε να εκκινήσει"
+
+#: ../cli/src/connections.c:1153
+msgid "no valid VPN secrets"
+msgstr "δεν υπάÏχουν έγκυÏα μυστικά VPN"
+
+#: ../cli/src/connections.c:1155
+msgid "invalid VPN secrets"
+msgstr "μη έγκυÏα μυστικά VPN"
+
+#: ../cli/src/connections.c:1157
+msgid "the connection was removed"
+msgstr "η σÏνδεση αφαιÏέθηκε"
+
+#: ../cli/src/connections.c:1171
+#, c-format
+msgid "state: %s\n"
+msgstr "κατάσταση: %s\n"
+
+#: ../cli/src/connections.c:1174 ../cli/src/connections.c:1200
+#, c-format
+msgid "Connection activated\n"
+msgstr "ΕνεÏγοποιήθηκε η σÏνδεση\n"
+
+#: ../cli/src/connections.c:1177
+#, c-format
+msgid "Error: Connection activation failed."
+msgstr "Σφάλμα: Αποτυχία ενεÏγοποίησης σÏνδεσης."
+
+#: ../cli/src/connections.c:1196
+#, c-format
+msgid "state: %s (%d)\n"
+msgstr "κατάσταση: %s (%d)\n"
+
+#: ../cli/src/connections.c:1206
+#, c-format
+msgid "Error: Connection activation failed: %s."
+msgstr "Σφάλμα: Αποτυχία ενεÏγοποίησης σÏνδεσης: %s."
+
+#: ../cli/src/connections.c:1223 ../cli/src/devices.c:909
+#, c-format
+msgid "Error: Timeout %d sec expired."
+msgstr "Σφάλμα: Έληξε το χÏονικό ÏŒÏιο %d sec"
+
+#: ../cli/src/connections.c:1266
+#, c-format
+msgid "Error: Connection activation failed: %s"
+msgstr "Σφάλμα: Αποτυχία ενεÏγοποίησης σÏνδεσης: %s"
+
+#: ../cli/src/connections.c:1280
+#, c-format
+msgid "Error: Obtaining active connection for '%s' failed."
+msgstr "Σφάλμα: Αποτυχία απόκτησης ενεÏγής σÏνδεσης για '%s'."
+
+#: ../cli/src/connections.c:1289
+#, c-format
+msgid "Active connection state: %s\n"
+msgstr "Κατάσταση ενεÏγής σÏνδεσης: %s\n"
+
+#: ../cli/src/connections.c:1290
+#, c-format
+msgid "Active connection path: %s\n"
+msgstr "ΔιαδÏομή ενεÏγής σÏνδεσης: %s\n"
+
+#: ../cli/src/connections.c:1344 ../cli/src/connections.c:1465
+#, c-format
+msgid "Error: Unknown connection: %s."
+msgstr "Σφάλμα: Άγνωστη σÏνδεση: %s."
+
+#: ../cli/src/connections.c:1379 ../cli/src/devices.c:980
+#, c-format
+msgid "Error: timeout value '%s' is not valid."
+msgstr "Σφάλμα: η τιμή του χοÏÎ½Î¹ÎºÎ¿Ï Î¿Ïίου '%s' δεν είναι έγκυÏη."
+
+#: ../cli/src/connections.c:1392 ../cli/src/connections.c:1482
+#, c-format
+msgid "Error: id or uuid has to be specified."
+msgstr "Σφάλμα: Ï€Ïέπει να καθοÏισθεί id ή uuid "
+
+#: ../cli/src/connections.c:1412
+#, c-format
+msgid "Error: No suitable device found: %s."
+msgstr "Σφάλμα: Δεν βÏέθηκε κατάλληλη συσκευή: %s."
+
+#: ../cli/src/connections.c:1414
+#, c-format
+msgid "Error: No suitable device found."
+msgstr "Σφάλμα: Δεν βÏέθηκε κατάλληλη συσκευή."
+
+#: ../cli/src/connections.c:1509
+#, c-format
+msgid "Warning: Connection not active\n"
+msgstr "ΠÏοειδοποίηση: Η σÏνδεση δεν είναι ενεÏγή\n"
+
+#: ../cli/src/connections.c:1566
+#, c-format
+msgid "Error: 'con' command '%s' is not valid."
+msgstr "Σφάλμα: η εντολή 'con' '%s' δεν είναι έγκυÏη."
+
+#: ../cli/src/connections.c:1602
+#, c-format
+msgid "Error: could not connect to D-Bus."
+msgstr "Σφάλμα: αδυναμία σÏνδεσης στο D-Bus."
+
+#: ../cli/src/connections.c:1609
+#, c-format
+msgid "Error: Could not get system settings."
+msgstr "Σφάλμα: Αδυναμία λήψης Ïυθμίσεων συστήματος."
+
+#: ../cli/src/connections.c:1617
+#, c-format
+msgid "Error: Could not get user settings."
+msgstr "Σφάλμα: Αδυναμία λήψης Ïυθμίσεων χÏήστη."
+
+#: ../cli/src/connections.c:1627
+#, c-format
+msgid "Error: Can't obtain connections: settings services are not running."
+msgstr ""
+"Σφάλμα: Αδυναμία απόκτησης συνδέσεων: οι υπηÏεσίες Ïυθμίσεων δεν εκτελοÏνται."
+
+#. 0
+#. 9
+#: ../cli/src/devices.c:61 ../cli/src/devices.c:89 ../cli/src/devices.c:184
+msgid "DEVICE"
+msgstr "ΣΥΣΚΕΥΗ"
+
+#. 1
+#. 4
+#. 0
+#: ../cli/src/devices.c:63 ../cli/src/devices.c:93
+#: ../cli/src/network-manager.c:36
+msgid "STATE"
+msgstr "ΚΑΤΑΣΤΑΣΗ"
+
+#: ../cli/src/devices.c:72
+msgid "GENERAL"
+msgstr "ΓΕÎΙΚΑ"
+
+#. 0
+#: ../cli/src/devices.c:73
+msgid "CAPABILITIES"
+msgstr "ΔΥÎΑΤΟΤΗΤΕΣ"
+
+#. 1
+#: ../cli/src/devices.c:74
+msgid "WIFI-PROPERTIES"
+msgstr "ΙΔΙΟΤΗΤΕΣ-WIFI"
+
+#. 2
+#: ../cli/src/devices.c:75
+msgid "AP"
+msgstr "AP"
+
+#. 3
+#: ../cli/src/devices.c:76
+msgid "WIRED-PROPERTIES"
+msgstr "ΙΔΙΟΤΗΤΕΣ-ΕÎΣΥΡΜΑΤΗΣ"
+
+#. 4
+#: ../cli/src/devices.c:77
+msgid "IP4-SETTINGS"
+msgstr "ΡΥΘΜΙΣΕΙΣ-IP4"
+
+#. 5
+#: ../cli/src/devices.c:78
+msgid "IP4-DNS"
+msgstr "IP4-DNS"
+
+#. 6
+#: ../cli/src/devices.c:79
+msgid "IP6-SETTINGS"
+msgstr "ΡΥΘΜΙΣΕΙΣ-IP6"
+
+#. 7
+#: ../cli/src/devices.c:80
+msgid "IP6-DNS"
+msgstr "IP6-DNS"
+
+#. 2
+#: ../cli/src/devices.c:91
+msgid "DRIVER"
+msgstr "ΟΔΗΓΟΣ"
+
+#. 3
+#: ../cli/src/devices.c:92
+msgid "HWADDR"
+msgstr "ΔΙΕΥΘΥÎΣΗ-ΥΛΙΚΟΥ"
+
+#. 0
+#: ../cli/src/devices.c:102
+msgid "CARRIER-DETECT"
+msgstr "ΑÎΙΧÎΕΥΣΗ-ΣΗΜΑΤΟΣ-ΓΡΑΜΜΗΣ"
+
+#. 1
+#: ../cli/src/devices.c:103
+msgid "SPEED"
+msgstr "ΤΑΧΥΤΗΤΑ"
+
+#. 0
+#: ../cli/src/devices.c:112
+msgid "CARRIER"
+msgstr "CARRIER"
+
+#. 0
+#: ../cli/src/devices.c:122
+msgid "WEP"
+msgstr "WEP"
+
+#. 1
+#: ../cli/src/devices.c:123
+msgid "WPA"
+msgstr "WPA"
+
+#. 2
+#: ../cli/src/devices.c:124
+msgid "WPA2"
+msgstr "WPA2"
+
+#. 3
+#: ../cli/src/devices.c:125
+msgid "TKIP"
+msgstr "TKIP"
+
+#. 4
+#: ../cli/src/devices.c:126
+msgid "CCMP"
+msgstr "CCMP"
+
+#. 0
+#: ../cli/src/devices.c:135 ../cli/src/devices.c:146
+msgid "ADDRESS"
+msgstr "ΔΙΕΥΘΥÎΣΗ"
+
+#. 1
+#: ../cli/src/devices.c:136 ../cli/src/devices.c:147
+msgid "PREFIX"
+msgstr "ΠΡΟΘΕΜΑ"
+
+#. 2
+#: ../cli/src/devices.c:137 ../cli/src/devices.c:148
+msgid "GATEWAY"
+msgstr "ΠΥΛΗ"
+
+#. 0
+#: ../cli/src/devices.c:157 ../cli/src/devices.c:166
+msgid "DNS"
+msgstr "DNS"
+
+#. 0
+#: ../cli/src/devices.c:175
+msgid "SSID"
+msgstr "SSID"
+
+#. 1
+#: ../cli/src/devices.c:176
+msgid "BSSID"
+msgstr "BSSID"
+
+#. 2
+#: ../cli/src/devices.c:177
+msgid "MODE"
+msgstr "ΛΕΙΤΟΥΡΓΙΑ"
+
+#. 3
+#: ../cli/src/devices.c:178
+msgid "FREQ"
+msgstr "ΣΥΧÎΟΤΗΤΑ"
+
+#. 4
+#: ../cli/src/devices.c:179
+msgid "RATE"
+msgstr "ΡΥΘΜΟΣ"
+
+#. 5
+#: ../cli/src/devices.c:180
+msgid "SIGNAL"
+msgstr "ΣΗΜΑ"
+
+#. 6
+#: ../cli/src/devices.c:181
+msgid "SECURITY"
+msgstr "ΑΣΦΑΛΕΙΑ"
+
+#. 7
+#: ../cli/src/devices.c:182
+msgid "WPA-FLAGS"
+msgstr "ΕΠΙΛΟΓΕΣ-WPA"
+
+#. 8
+#: ../cli/src/devices.c:183
+msgid "RSN-FLAGS"
+msgstr "ΕΠΙΛΟΓΕΣ-RSN"
+
+#. 10
+#: ../cli/src/devices.c:185
+msgid "ACTIVE"
+msgstr "ΕÎΕΡΓΗ"
+
+#: ../cli/src/devices.c:208
+#, c-format
+msgid ""
+"Usage: nmcli dev { COMMAND | help }\n"
+"\n"
+" COMMAND := { status | list | disconnect | wifi }\n"
+"\n"
+" status\n"
+" list [iface <iface>]\n"
+" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
+" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+"\n"
+msgstr ""
+"ΧÏήση: nmcli dev { COMMAND | help }\n"
+"\n"
+" COMMAND := { status | list | disconnect | wifi }\n"
+"\n"
+" status\n"
+" list [iface <iface>]\n"
+" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
+" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+"\n"
+
+#: ../cli/src/devices.c:228
+msgid "unmanaged"
+msgstr "χωÏίς διαχείÏιση"
+
+#: ../cli/src/devices.c:230
+msgid "unavailable"
+msgstr "μη διαθέσιμη"
+
+#: ../cli/src/devices.c:232 ../cli/src/network-manager.c:89
+msgid "disconnected"
+msgstr "αποσυνδέθηκε"
+
+#: ../cli/src/devices.c:234
+msgid "connecting (prepare)"
+msgstr "σÏνδεση (Ï€Ïοετοιμασία)"
+
+#: ../cli/src/devices.c:236
+msgid "connecting (configuring)"
+msgstr "σÏνδεση (διαμόÏφωση)"
+
+#: ../cli/src/devices.c:238
+msgid "connecting (need authentication)"
+msgstr "σÏνδεση (απαιτείται πιστοποίηση)"
+
+#: ../cli/src/devices.c:240
+msgid "connecting (getting IP configuration)"
+msgstr "σÏνδεση (γίνεται λήψη Ïυθμίσεων IP)"
+
+#: ../cli/src/devices.c:242 ../cli/src/network-manager.c:87
+msgid "connected"
+msgstr "συνδέθηκε"
+
+#: ../cli/src/devices.c:244
+msgid "connection failed"
+msgstr "αποτυχία σÏνδεσης"
+
+#: ../cli/src/devices.c:267 ../cli/src/devices.c:424
+msgid "Unknown"
+msgstr "Άγνωστο"
+
+#: ../cli/src/devices.c:299
+msgid "(none)"
+msgstr "(κανένα)"
+
+#: ../cli/src/devices.c:324
+#, c-format
+msgid "%s: error converting IP4 address 0x%X"
+msgstr "%s: σφάλμα κατά τη μετατÏοπή της διεÏθυνσης IP4 0x%X"
+
+#: ../cli/src/devices.c:393
+#, c-format
+msgid "%u MHz"
+msgstr "%u MHz"
+
+#: ../cli/src/devices.c:394
+#, c-format
+msgid "%u MB/s"
+msgstr "%u MB/s"
+
+#: ../cli/src/devices.c:403
+msgid "Encrypted: "
+msgstr "ΚÏυπτογÏαφημένη:"
+
+#: ../cli/src/devices.c:408
+msgid "WEP "
+msgstr "WEP "
+
+#: ../cli/src/devices.c:410
+msgid "WPA "
+msgstr "WPA "
+
+#: ../cli/src/devices.c:412
+msgid "WPA2 "
+msgstr "WPA2 "
+
+#: ../cli/src/devices.c:415
+msgid "Enterprise "
+msgstr "ΕπιχείÏηση "
+
+#: ../cli/src/devices.c:424
+msgid "Ad-Hoc"
+msgstr "Ad-Hoc"
+
+#: ../cli/src/devices.c:424
+msgid "Infrastructure"
+msgstr "Υποδομή"
+
+#: ../cli/src/devices.c:486
+#, c-format
+msgid "Error: 'dev list': %s"
+msgstr "Σφάλμα: 'dev list': %s"
+
+#: ../cli/src/devices.c:488
+#, c-format
+msgid "Error: 'dev list': %s; allowed fields: %s"
+msgstr "Σφάλμα: 'dev list': %s, επιτÏεπόμενα πεδία: %s"
+
+#: ../cli/src/devices.c:497
+msgid "Device details"
+msgstr "ΛεπτομέÏειες συσκευής"
+
+#: ../cli/src/devices.c:527 ../cli/src/devices.c:925
+msgid "(unknown)"
+msgstr "(άγνωστο)"
+
+#: ../cli/src/devices.c:528
+msgid "unknown)"
+msgstr "άγνωστο)"
+
+#: ../cli/src/devices.c:554
+#, c-format
+msgid "%u Mb/s"
+msgstr "%u Mb/s"
+
+#. Print header
+#. "WIRED-PROPERTIES"
+#: ../cli/src/devices.c:627
+msgid "on"
+msgstr "on"
+
+#: ../cli/src/devices.c:627
+msgid "off"
+msgstr "off"
+
+#: ../cli/src/devices.c:808
+#, c-format
+msgid "Error: 'dev status': %s"
+msgstr "Σφάλμα: 'dev status': %s"
+
+#: ../cli/src/devices.c:810
+#, c-format
+msgid "Error: 'dev status': %s; allowed fields: %s"
+msgstr "Σφάλμα: 'dev status': %s, επιτÏεπόμενα πεδία: %s"
+
+#: ../cli/src/devices.c:817
+msgid "Status of devices"
+msgstr "Κατάσταση συσκευών"
+
+#: ../cli/src/devices.c:845
+#, c-format
+msgid "Error: '%s' argument is missing."
+msgstr "Σφάλμα: Λείπει το ÏŒÏισμα '%s' ."
+
+#: ../cli/src/devices.c:874 ../cli/src/devices.c:1013
+#: ../cli/src/devices.c:1136
+#, c-format
+msgid "Error: Device '%s' not found."
+msgstr "Σφάλμα: Δεν βÏέθηκε η συσκευή '%s'."
+
+#: ../cli/src/devices.c:897
+#, c-format
+msgid "Success: Device '%s' successfully disconnected."
+msgstr "Επιτυχία: Η συσκευή '%s' αποσυνδέθηκε επιτυχώς."
+
+#: ../cli/src/devices.c:922
+#, c-format
+msgid "Error: Device '%s' (%s) disconnecting failed: %s"
+msgstr "Σφάλμα: Αποτυχία αποσÏνδεσης συσκευής '%s' (%s): %s"
+
+#: ../cli/src/devices.c:930
+#, c-format
+msgid "Device state: %d (%s)\n"
+msgstr "Κατάσταση συσκευής: %d (%s)\n"
+
+#: ../cli/src/devices.c:994
+#, c-format
+msgid "Error: iface has to be specified."
+msgstr "Σφάλμα: Ï€Ïέπει να καθοÏισθεί το iface."
+
+#: ../cli/src/devices.c:1112
+#, c-format
+msgid "Error: 'dev wifi': %s"
+msgstr "Σφάλμα: 'dev wifi': %s"
+
+#: ../cli/src/devices.c:1114
+#, c-format
+msgid "Error: 'dev wifi': %s; allowed fields: %s"
+msgstr "Σφάλμα: 'dev wifi': %s, επιτÏεπόμενα πεδία: %s"
+
+#: ../cli/src/devices.c:1121
+msgid "WiFi scan list"
+msgstr "Λίστα σάÏωσης WiFi"
+
+#: ../cli/src/devices.c:1156 ../cli/src/devices.c:1210
+#, c-format
+msgid "Error: Access point with hwaddr '%s' not found."
+msgstr "Σφάλμα: δεν βÏέθηκε σημείο Ï€Ïόσβασης με hwaddr '%s'."
+
+#: ../cli/src/devices.c:1173
+#, c-format
+msgid "Error: Device '%s' is not a WiFi device."
+msgstr "Σφάλμα: Η συσκευή '%s' δεν είναι συσκευή WiFi."
+
+#: ../cli/src/devices.c:1237
+#, c-format
+msgid "Error: 'dev wifi' command '%s' is not valid."
+msgstr "Σφάλμα: η εντολή 'dev wifi' '%s' δεν είναι έγκυÏη."
+
+#: ../cli/src/devices.c:1284
+#, c-format
+msgid "Error: 'dev' command '%s' is not valid."
+msgstr "Σφάλμα: η εντολή 'dev' '%s' δεν είναι έγκυÏη."
+
+#: ../cli/src/network-manager.c:35
+msgid "RUNNING"
+msgstr "ΕΚΤΕΛΕΙΤΑΙ"
+
+#. 1
+#: ../cli/src/network-manager.c:37
+msgid "WIFI-HARDWARE"
+msgstr "ΥΛΙΚΟ WIFI"
+
+#. 2
+#: ../cli/src/network-manager.c:38
+msgid "WIFI"
+msgstr "WIFI"
+
+#. 3
+#: ../cli/src/network-manager.c:39
+msgid "WWAN-HARDWARE"
+msgstr "ΥΛΙΚΟ WWAN"
+
+#. 4
+#: ../cli/src/network-manager.c:40
+msgid "WWAN"
+msgstr "WWAN"
+
+#: ../cli/src/network-manager.c:62
+#, 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"
+msgstr ""
+"ΧÏήση: 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"
+
+#: ../cli/src/network-manager.c:83
+msgid "asleep"
+msgstr "Ïπνωση"
+
+#: ../cli/src/network-manager.c:85
+msgid "connecting"
+msgstr "σÏνδεση"
+
+#: ../cli/src/network-manager.c:125
+#, c-format
+msgid "Error: 'nm status': %s"
+msgstr "Σφάλμα: 'nm status': %s"
+
+#: ../cli/src/network-manager.c:127
+#, c-format
+msgid "Error: 'nm status': %s; allowed fields: %s"
+msgstr "Σφάλμα: 'nm status': %s, επιτÏεπόμενα πεδία: %s"
+
+#: ../cli/src/network-manager.c:134
+msgid "NetworkManager status"
+msgstr "Κατάσταση της ΔιαχείÏισης ΔικτÏου"
+
+#. 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
+msgid "enabled"
+msgstr "ενεÏγοποιημένη"
+
+#: ../cli/src/network-manager.c:140 ../cli/src/network-manager.c:141
+#: ../cli/src/network-manager.c:142 ../cli/src/network-manager.c:143
+#: ../cli/src/network-manager.c:211 ../cli/src/network-manager.c:243
+msgid "disabled"
+msgstr "απενεÏγοποιημένη"
+
+#: ../cli/src/network-manager.c:148
+msgid "running"
+msgstr "εκτελείται"
+
+#: ../cli/src/network-manager.c:148
+msgid "not running"
+msgstr "δεν εκτελείται"
+
+#: ../cli/src/network-manager.c:201 ../cli/src/network-manager.c:233
+#, c-format
+msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
+msgstr ""
+"Σφάλμα: η τιμή '%s' του οÏίσματος '--fields' δεν είναι έγκυÏη εδώ. "
+"ΕπιτÏεπόμενα πεδία: %s"
+
+#: ../cli/src/network-manager.c:209
+msgid "WiFi enabled"
+msgstr "ΑσÏÏματο (WiFi) ενεÏγοποιημένο"
+
+#: ../cli/src/network-manager.c:220
+#, c-format
+msgid "Error: invalid 'wifi' parameter: '%s'."
+msgstr "Σφάλμα: μη έγκυÏη παÏάμετÏος 'wifi': '%s'."
+
+#: ../cli/src/network-manager.c:241
+msgid "WWAN enabled"
+msgstr "WWAN ενεÏγοποιημένο"
+
+#: ../cli/src/network-manager.c:252
+#, c-format
+msgid "Error: invalid 'wwan' parameter: '%s'."
+msgstr "Σφάλμα: μη έγκυÏη παÏάμετÏος 'wwan': '%s'."
+
+#: ../cli/src/network-manager.c:263
+#, c-format
+msgid "Error: 'nm' command '%s' is not valid."
+msgstr "Σφάλμα: η 'nm' εντολή '%s' δεν είναι έγκυÏη."
+
+#: ../cli/src/nmcli.c:69
+#, 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] <field1,field2,...>|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 ""
+"ΧÏήση: %s [OPTIONS] OBJECT { COMMAND | help }\n"
+"\n"
+"OPTIONS\n"
+" -t[erse] λιτή έξοδος\n"
+" -p[retty] όμοÏφη έξοδος\n"
+" -m[ode] tabular|multiline Ï„Ïόπος εξόδου\n"
+" -f[ields] <field1,field2,...>|all|common καθοÏισμός πεδίων για έξοδο\n"
+" -e[scape] yes|no escape διαχωÏιστικά στηλών στις "
+"τιμές\n"
+" -v[ersion] εμφάνιση έκδοσης ποÏγÏάμματος\n"
+" -h[elp] εκτÏπωση βοήθειας\n"
+"\n"
+"OBJECT\n"
+" nm Κατάσταση του NetworkManager\n"
+" con Συνδέσεις του NetworkManager\n"
+" dev συσκευές που διαχειÏίζεται ο NetworkManager\n"
+"\n"
+
+#: ../cli/src/nmcli.c:113
+#, c-format
+msgid "Error: Object '%s' is unknown, try 'nmcli help'."
+msgstr "Σφάλμα: το αντικείμενο '%s' είναι άγνωστο, δοκιμάστε την 'nmcli help'."
+
+#: ../cli/src/nmcli.c:143
+#, c-format
+msgid "Error: Option '--terse' is specified the second time."
+msgstr "Σφάλμα: η επιλογή '--terse' καθοÏίζεται τη δεÏτεÏη φοÏά."
+
+#: ../cli/src/nmcli.c:148
+#, c-format
+msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
+msgstr ""
+"Σφάλμα: η επιλογή '--terse' είναι αμοιβαία αποκλειόμενη με την '--pretty'."
+
+#: ../cli/src/nmcli.c:156
+#, c-format
+msgid "Error: Option '--pretty' is specified the second time."
+msgstr "Σφάλμα: η επιλογή '--pretty' καθοÏίζεται τη δεÏτεÏη φοÏά."
+
+#: ../cli/src/nmcli.c:161
+#, c-format
+msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
+msgstr ""
+"Σφάλμα: η επιλογή '--pretty' είναι αμοιβαία αποκλειόμενη με την '--terse'."
+
+#: ../cli/src/nmcli.c:171 ../cli/src/nmcli.c:187
+#, c-format
+msgid "Error: missing argument for '%s' option."
+msgstr "Σφάλμα: απουσίας οÏίσματος για τηνη επιλογή '%s'."
+
+#: ../cli/src/nmcli.c:180 ../cli/src/nmcli.c:196
+#, c-format
+msgid "Error: '%s' is not valid argument for '%s' option."
+msgstr "Σφάλμα: το '%s' δεν είναι έγκυÏο ÏŒÏισμα για την επιλογή '%s'."
+
+#: ../cli/src/nmcli.c:203
+#, c-format
+msgid "Error: fields for '%s' options are missing."
+msgstr "Σφάλμα: λείπουν πεδία για τις επιλογές '%s'."
+
+#: ../cli/src/nmcli.c:209
+#, c-format
+msgid "nmcli tool, version %s\n"
+msgstr "ΕÏγαλείο nmcli, έκδοση %s\n"
+
+#: ../cli/src/nmcli.c:215
+#, c-format
+msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
+msgstr "Σφάλμα: Η επιλογή '%s' είναι άγνωστη, δοκιμάστε 'nmcli -help'."
+
+#: ../cli/src/nmcli.c:234
+#, c-format
+msgid "Caught signal %d, shutting down..."
+msgstr "Ελήφθη σήμα %d, τεÏματισμός…"
+
+#: ../cli/src/nmcli.c:259
+#, c-format
+msgid "Error: Could not connect to NetworkManager."
+msgstr "Σφάλμα: Αδυναμία σÏνδεσης στη ΔιαχείÏιση ΔικτÏου."
+
+#: ../cli/src/nmcli.c:275
+msgid "Success"
+msgstr "Επιτυχία"
+
+#: ../cli/src/settings.c:411
+#, c-format
+msgid "%d (hex-ascii-key)"
+msgstr "%d (hex-ascii-key)"
+
+#: ../cli/src/settings.c:413
+#, c-format
+msgid "%d (104/128-bit passphrase)"
+msgstr "%d (104/128-bit φÏάση κλειδί)"
+
+#: ../cli/src/settings.c:416
+#, c-format
+msgid "%d (unknown)"
+msgstr "%d (άγνωστο)"
+
+#: ../cli/src/settings.c:442
+msgid "0 (unknown)"
+msgstr "0 (άγνωστο)"
+
+#: ../cli/src/settings.c:448
+msgid "any, "
+msgstr "οποιοδήποτε,"
+
+#: ../cli/src/settings.c:450
+msgid "900 MHz, "
+msgstr "900 MHz, "
+
+#: ../cli/src/settings.c:452
+msgid "1800 MHz, "
+msgstr "1800 MHz, "
+
+#: ../cli/src/settings.c:454
+msgid "1900 MHz, "
+msgstr "1900 MHz, "
+
+#: ../cli/src/settings.c:456
+msgid "850 MHz, "
+msgstr "850 MHz, "
+
+#: ../cli/src/settings.c:458
+msgid "WCDMA 3GPP UMTS 2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 2100 MHz, "
+
+#: ../cli/src/settings.c:460
+msgid "WCDMA 3GPP UMTS 1800 MHz, "
+msgstr "WCDMA 3GPP UMTS 1800 MHz, "
+
+#: ../cli/src/settings.c:462
+msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
+
+#: ../cli/src/settings.c:464
+msgid "WCDMA 3GPP UMTS 800 MHz, "
+msgstr "WCDMA 3GPP UMTS 800 MHz, "
+
+#: ../cli/src/settings.c:466
+msgid "WCDMA 3GPP UMTS 850 MHz, "
+msgstr "WCDMA 3GPP UMTS 850 MHz, "
+
+#: ../cli/src/settings.c:468
+msgid "WCDMA 3GPP UMTS 900 MHz, "
+msgstr "WCDMA 3GPP UMTS 900 MHz, "
+
+#: ../cli/src/settings.c:470
+msgid "WCDMA 3GPP UMTS 1700 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700 MHz, "
+
+#: ../cli/src/settings.c:554 ../cli/src/settings.c:721
+msgid "auto"
+msgstr "αυτόματα"
+
+#: ../cli/src/settings.c:716 ../cli/src/settings.c:719
+#: ../cli/src/settings.c:720 ../cli/src/utils.c:172
+msgid "not set"
+msgstr "δεν οÏίσθηκε"
+
+#: ../cli/src/utils.c:124
+#, c-format
+msgid "field '%s' has to be alone"
+msgstr "το πεδίο '%s' Ï€Ïέπει να είναι μόνο του"
+
+#: ../cli/src/utils.c:127
+#, c-format
+msgid "invalid field '%s'"
+msgstr "μη έγκυÏο πεδίο '%s'"
+
+#: ../cli/src/utils.c:146
+#, c-format
+msgid "Option '--terse' requires specifying '--fields'"
+msgstr "Η επιλογή '--terse' απαιτεί να καθοÏισθοÏν '--fields'"
+
+#: ../cli/src/utils.c:150
+#, c-format
+msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
+msgstr ""
+"Η επιλογή '--terse' απαιτεί να καθοÏισθοÏν συγκεκÏιμένες τιμές της επιλογής "
+"'--fields', όχι '%s'"
+
#: ../libnm-util/crypto.c:120
#, c-format
msgid "PEM key file had no end tag '%s'."
@@ -109,8 +1274,9 @@ msgstr "Δεν επαÏκεί η μνήμη για την αποθήκευση Ï
msgid "IV contains non-hexadecimal digits."
msgstr "Το IV πεÏιέχει μη δεκαεξαδικά ψηφία."
-#: ../libnm-util/crypto.c:382 ../libnm-util/crypto_gnutls.c:143
-#: ../libnm-util/crypto_nss.c:169
+#: ../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
#, c-format
msgid "Private key cipher '%s' was unknown."
msgstr "Άγνωστος ο κÏυπτογÏαφικός αλγόÏιθμος '%s' του Î¹Î´Î¹Ï‰Ï„Î¹ÎºÎ¿Ï ÎºÎ»ÎµÎ¹Î´Î¹Î¿Ï."
@@ -132,75 +1298,116 @@ msgstr ""
"Δεν επαÏκεί η μνήμη για την αποθήκευση του αποκÏυπτογÏαφημένου Î¹Î´Î¹Ï‰Ï„Î¹ÎºÎ¿Ï "
"κλειδιοÏ."
-#: ../libnm-util/crypto_gnutls.c:46
+#: ../libnm-util/crypto_gnutls.c:49
msgid "Failed to initialize the crypto engine."
msgstr "Απέτυχε η αÏχικοποίηση της μηχανής κÏυπτογÏαφίας."
-#: ../libnm-util/crypto_gnutls.c:90
+#: ../libnm-util/crypto_gnutls.c:93
#, c-format
msgid "Failed to initialize the MD5 engine: %s / %s."
msgstr "Απέτυχε η αÏχικοποίηση της μηχανής MD5 : %s / %s."
-#: ../libnm-util/crypto_gnutls.c:152 ../libnm-util/crypto_nss.c:178
+#: ../libnm-util/crypto_gnutls.c:156
+#, c-format
+msgid "Invalid IV length (must be at least %zd)."
+msgstr "Μη έγκυÏο μήκος IV (Ï€Ïέπει να είναι τουλάχιστον %zd)"
+
+#: ../libnm-util/crypto_gnutls.c:165 ../libnm-util/crypto_nss.c:188
#, c-format
msgid "Not enough memory for decrypted key buffer."
msgstr ""
"Η μνήμη δεν επαÏκεί για τις ανάγκες της ενδιάμεσης μνήμης του "
"αποκÏυπτογÏαφημένου κλειδιοÏ."
-#: ../libnm-util/crypto_gnutls.c:160
+#: ../libnm-util/crypto_gnutls.c:173
#, c-format
msgid "Failed to initialize the decryption cipher context: %s / %s."
msgstr "Απέτυχε η αÏχικοποίηση του αλγοÏίθμου αποκÏυπτογÏάφησης: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:169
+#: ../libnm-util/crypto_gnutls.c:182
#, c-format
msgid "Failed to set symmetric key for decryption: %s / %s."
msgstr ""
"Απέτυχε ο οÏισμός συμμετÏÎ¹ÎºÎ¿Ï ÎºÎ»ÎµÎ¹Î´Î¹Î¿Ï Î³Î¹Î± την αποκÏυπτογÏάφηση: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:178
+#: ../libnm-util/crypto_gnutls.c:191
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
msgstr "Απέτυχε ο οÏισμός IV για την αποκÏυπτογÏάφηση: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:187
+#: ../libnm-util/crypto_gnutls.c:200
#, c-format
msgid "Failed to decrypt the private key: %s / %s."
msgstr "Απέτυχε η αποκÏυπτογÏάφηση του Î¹Î´Î¹Ï‰Ï„Î¹ÎºÎ¿Ï ÎºÎ»ÎµÎ¹Î´Î¹Î¿Ï: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:200
+#: ../libnm-util/crypto_gnutls.c:210 ../libnm-util/crypto_nss.c:267
+#, c-format
+#| msgid "Failed to decrypt the private key: %d."
+msgid "Failed to decrypt the private key: unexpected padding length."
+msgstr ""
+"Απέτυχε η αποκÏυπτογÏάφηση του Î¹Î´Î¹Ï‰Ï„Î¹ÎºÎ¿Ï ÎºÎ»ÎµÎ¹Î´Î¹Î¿Ï: μη αναμενόμενο μήκος "
+"συμπλήÏωσης."
+
+#: ../libnm-util/crypto_gnutls.c:221 ../libnm-util/crypto_nss.c:278
#, c-format
msgid "Failed to decrypt the private key."
msgstr "Απέτυχε η αποκÏυπτογÏάφηση του Î¹Î´Î¹Ï‰Ï„Î¹ÎºÎ¿Ï ÎºÎ»ÎµÎ¹Î´Î¹Î¿Ï."
-#: ../libnm-util/crypto_gnutls.c:235
+#: ../libnm-util/crypto_gnutls.c:286 ../libnm-util/crypto_nss.c:356
+#, c-format
+msgid "Could not allocate memory for encrypting."
+msgstr "Αδυναμία διάθεσης μνήμης για κÏυπτογÏάφηση."
+
+#: ../libnm-util/crypto_gnutls.c:294
+#, c-format
+#| msgid "Failed to initialize the decryption cipher context: %s / %s."
+msgid "Failed to initialize the encryption cipher context: %s / %s."
+msgstr "Απέτυχε η αÏχικοποίηση του αλγοÏίθμου κÏυπτογÏάφησης: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:303
+#, c-format
+#| msgid "Failed to set symmetric key for decryption: %s / %s."
+msgid "Failed to set symmetric key for encryption: %s / %s."
+msgstr "Απέτυχε ο οÏισμός συμμετÏÎ¹ÎºÎ¿Ï ÎºÎ»ÎµÎ¹Î´Î¹Î¿Ï Î³Î¹Î± την κÏυπτογÏάφηση: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:313
+#, c-format
+#| msgid "Failed to set IV for decryption: %s / %s."
+msgid "Failed to set IV for encryption: %s / %s."
+msgstr "Απέτυχε να οÏισθεί το IV για την κÏυπτογÏάφηση: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:322
+#, c-format
+#| msgid "Failed to decrypt the private key: %s / %s."
+msgid "Failed to encrypt the data: %s / %s."
+msgstr "Απέτυχε η κÏυπτογÏάφηση των δεδομένων: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:362
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "Σφάλμα κατά την αÏχικοποίηση των δεδομένων του πιστοποιητικοÏ: %s"
-#: ../libnm-util/crypto_gnutls.c:257
+#: ../libnm-util/crypto_gnutls.c:384
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "ΑδÏνατη η αποκωδικοποίηση του πιστοποιητικοÏ: %s"
-#: ../libnm-util/crypto_gnutls.c:281
+#: ../libnm-util/crypto_gnutls.c:408
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %s"
msgstr "ΑδÏνατη η αÏχικοποίηση του αποκωδικοποιητή PKCS#12: %s"
-#: ../libnm-util/crypto_gnutls.c:294
+#: ../libnm-util/crypto_gnutls.c:421
#, c-format
msgid "Couldn't decode PKCS#12 file: %s"
msgstr "ΑδÏνατη η αποκωδικοποίηση του αÏχείου PKCS#12: %s"
-#: ../libnm-util/crypto_gnutls.c:306
+#: ../libnm-util/crypto_gnutls.c:433
#, c-format
msgid "Couldn't verify PKCS#12 file: %s"
msgstr "ΑδÏνατη η διαπίστωση του αÏχείου PKCS#12: %s"
-#: ../libnm-util/crypto_nss.c:57
-#: ../system-settings/plugins/ifcfg-rh/crypto.c:52
+#: ../libnm-util/crypto_nss.c:56
#, c-format
msgid "Failed to initialize the crypto engine: %d."
msgstr "Απέτυχε η αÏχικοποίηση της μηχανής κÏυπτογÏαφίας: %d."
@@ -210,110 +1417,317 @@ msgstr "Απέτυχε η αÏχικοποίηση της μηχανής κÏÏ…Ï
msgid "Failed to initialize the MD5 context: %d."
msgstr "Απέτυχε η αÏχικοποίηση του MD5 : %d."
-#: ../libnm-util/crypto_nss.c:186
+#: ../libnm-util/crypto_nss.c:179
+#, c-format
+msgid "Invalid IV length (must be at least %d)."
+msgstr "Μη έγκυÏο μήκος IV (Ï€Ïέπει να είναι τουλάχιστον %d)"
+
+#: ../libnm-util/crypto_nss.c:196
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "Απέτυχε η αÏχικοποίηση του αλγοÏίθμου αποκÏυπτογÏάφησης."
-#: ../libnm-util/crypto_nss.c:196
+#: ../libnm-util/crypto_nss.c:206
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "Απέτυχε ο οÏισμός συμμετÏÎ¹ÎºÎ¿Ï ÎºÎ»ÎµÎ¹Î´Î¹Î¿Ï Î³Î¹Î± την αποκÏυπτογÏάφηση."
-#: ../libnm-util/crypto_nss.c:206
+#: ../libnm-util/crypto_nss.c:216
#, c-format
msgid "Failed to set IV for decryption."
msgstr "Απέτυχε ο οÏισμός IV για την αποκÏυπτογÏάφηση."
-#: ../libnm-util/crypto_nss.c:214
+#: ../libnm-util/crypto_nss.c:224
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "Απέτυχε η αÏχικοποίηση της αποκÏυπτογÏάφησης."
-#: ../libnm-util/crypto_nss.c:227
+#: ../libnm-util/crypto_nss.c:237
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "Απέτυχε η αποκÏυπτογÏάφηση του Î¹Î´Î¹Ï‰Ï„Î¹ÎºÎ¿Ï ÎºÎ»ÎµÎ¹Î´Î¹Î¿Ï: %d."
-#: ../libnm-util/crypto_nss.c:239
+#: ../libnm-util/crypto_nss.c:245
+#, c-format
+#| msgid "Failed to decrypt the private key: %d."
+msgid "Failed to decrypt the private key: decrypted data too large."
+msgstr ""
+"Απέτυχε η αποκÏυπτογÏάφηση του Î¹Î´Î¹Ï‰Ï„Î¹ÎºÎ¿Ï ÎºÎ»ÎµÎ¹Î´Î¹Î¿Ï: τα αποκÏυπτογÏαφημένα "
+"δεδομένα είναι πάÏα πολλά."
+
+#: ../libnm-util/crypto_nss.c:256
#, c-format
msgid "Failed to finalize decryption of the private key: %d."
msgstr "Απέτυχε η ολοκλήÏωση της αποκÏυπτογÏάφησης του Î¹Î´Î¹Ï‰Ï„Î¹ÎºÎ¿Ï ÎºÎ»ÎµÎ¹Î´Î¹Î¿Ï: %d."
-#: ../libnm-util/crypto_nss.c:284
+#: ../libnm-util/crypto_nss.c:364
+#, c-format
+#| msgid "Failed to initialize the decryption cipher slot."
+msgid "Failed to initialize the encryption cipher slot."
+msgstr "Απέτυχε η αÏχικοποίηση του αλγοÏίθμου κÏυπτογÏάφησης."
+
+#: ../libnm-util/crypto_nss.c:372
+#, c-format
+#| msgid "Failed to set symmetric key for decryption."
+msgid "Failed to set symmetric key for encryption."
+msgstr "Απέτυχε ο οÏισμός συμμετÏÎ¹ÎºÎ¿Ï ÎºÎ»ÎµÎ¹Î´Î¹Î¿Ï Î³Î¹Î± την κÏυπτογÏάφηση."
+
+#: ../libnm-util/crypto_nss.c:380
+#, c-format
+#| msgid "Failed to set IV for decryption."
+msgid "Failed to set IV for encryption."
+msgstr "Απέτυχε ο οÏισμός IV για την κÏυπτογÏάφηση."
+
+#: ../libnm-util/crypto_nss.c:388
+#, c-format
+#| msgid "Failed to initialize the decryption context."
+msgid "Failed to initialize the encryption context."
+msgstr "Απέτυχε η αÏχικοποίηση του πλαισίου της κÏυπτογÏάφησης."
+
+#: ../libnm-util/crypto_nss.c:396
+#, c-format
+#| msgid "Failed to decrypt the private key: %d."
+msgid "Failed to encrypt: %d."
+msgstr "Αποτυχία κÏυπτογÏάφησης: %d."
+
+#: ../libnm-util/crypto_nss.c:404
+#, c-format
+msgid "Unexpected amount of data after encrypting."
+msgstr "Μη αναμενόμενη ποσότητα δεδομένων μετά την κÏυπτογÏάφηση."
+
+#: ../libnm-util/crypto_nss.c:447
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "ΑδÏνατη η αποκωδικοποίηση του πιστοποιητικοÏ: %d"
-#: ../libnm-util/crypto_nss.c:319
+#: ../libnm-util/crypto_nss.c:482
#, c-format
msgid "Couldn't convert password to UCS2: %d"
msgstr "ΑδÏνατη η μετατÏοπή του ÏƒÏ…Î½Î¸Î·Î¼Î±Ï„Î¹ÎºÎ¿Ï ÏƒÎµ UCS2: %d"
-#: ../libnm-util/crypto_nss.c:347
+#: ../libnm-util/crypto_nss.c:510
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %d"
msgstr "ΑδÏνατη η αÏχικοποίηση του αποκωδικοποιητή PKCS#12: %d"
-#: ../libnm-util/crypto_nss.c:356
+#: ../libnm-util/crypto_nss.c:519
#, c-format
msgid "Couldn't decode PKCS#12 file: %d"
msgstr "ΑδÏνατη η αποκωδικοποίηση του αÏχείου PKCS#12: %d"
-#: ../libnm-util/crypto_nss.c:365
+#: ../libnm-util/crypto_nss.c:528
#, c-format
msgid "Couldn't verify PKCS#12 file: %d"
msgstr "ΑδÏνατη η διαπίστωση του αÏχείου PKCS#12: %d"
-#: ../src/nm-netlink-monitor.c:194 ../src/nm-netlink-monitor.c:464
+#: ../libnm-util/crypto_nss.c:557
+#| msgid "Could not decode private key."
+msgid "Could not generate random data."
+msgstr "ΑδÏνατη η δημιουÏγία τυχαίων δεδομένων."
+
+#: ../libnm-util/nm-utils.c:1975
#, c-format
-msgid "error processing netlink message: %s"
-msgstr "σφάλμα κατά την επεξεÏγασία μηνÏματος netlink: %s"
+#| msgid "Not enough memory to decrypt private key."
+msgid "Not enough memory to make encryption key."
+msgstr "Δεν επαÏκεί η μνήμη για την δημιουÏγία ÎºÎ»ÎµÎ¹Î´Î¹Î¿Ï ÎºÏυπτογÏάφησης."
+
+#: ../libnm-util/nm-utils.c:2085
+#| msgid "Not enough memory to store PEM file data."
+msgid "Could not allocate memory for PEM file creation."
+msgstr "Δεν επαÏκεί η μνήμη για την δημιουÏγία αÏχείου PEM."
-#: ../src/nm-netlink-monitor.c:260
+#: ../libnm-util/nm-utils.c:2097
#, c-format
-msgid "unable to allocate netlink handle for monitoring link status: %s"
+msgid "Could not allocate memory for writing IV to PEM file."
+msgstr "Αδυναμία διάθεσης μνήμης για εγγÏαφή του IV στο αÏχείο PEM."
+
+#: ../libnm-util/nm-utils.c:2109
+#, c-format
+msgid "Could not allocate memory for writing encrypted key to PEM file."
msgstr ""
-"αδÏνατη η δέσμευση χειÏιστή netlink για την παÏακολοÏθηση της κατάστασης της "
-"σÏνδεσης: %s"
+"Αδυναμία διάθεσης μνήμης για εγγÏαφή του κÏυπτογÏαφημένου ÎºÎ»ÎµÎ¹Î´Î¿Ï ÏƒÏ„Î¿ αÏχείο "
+"PEM."
+
+#: ../libnm-util/nm-utils.c:2128
+#, c-format
+#| msgid "Not enough memory to store PEM file data."
+msgid "Could not allocate memory for PEM file data."
+msgstr "Δεν επαÏκεί η μνήμη για τα δεδομένα του αÏχείου PEM."
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
+msgid "Connection sharing via a protected WiFi network"
+msgstr "Κοινή χÏήση σÏνδεσης μέσω Ï€Ïοστατευμένου ασÏÏματου δικτÏου"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
+msgid "Connection sharing via an open WiFi network"
+msgstr "Κοινή χÏήση σÏνδεσης μέσω Î±Î½Î¿Î¹Ï‡Ï„Î¿Ï Î±ÏƒÏÏματου δικτÏου"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
+msgid "Modify persistent system hostname"
+msgstr "Αλλαγή πάγιου ονόματος συστήματος"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
+msgid "Modify system connections"
+msgstr "ΤÏοποποίηση συνδέσεων συστήματος"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
+msgid "System policy prevents modification of system settings"
+msgstr ""
+"Η πολιτική συστήματος δεν επιτÏέπει Ï„Ïοποποίηση των Ïυθμίσεων συστήματος"
-#: ../src/nm-netlink-monitor.c:270
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
+msgid "System policy prevents modification of the persistent system hostname"
+msgstr ""
+"Η πολιτική συστήματος δεν επιτÏέπει Ï„Ïοποποίηση του πάγιου ονόματος "
+"συστήματος"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
+msgid "System policy prevents sharing connections via a protected WiFi network"
+msgstr ""
+"Η πολιτική συστήματος δεν επιτÏέπει κοινή χÏήση συνδέσεων μέσω "
+"Ï€Ïοστατευμένου ασÏÏματου δικτÏου"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
+msgid "System policy prevents sharing connections via an open WiFi network"
+msgstr ""
+"Η πολιτική συστήματος δεν επιτÏέπει κοινή χÏήση συνδέσεων μέσω Î±Î½Î¿Î¹Ï‡Ï„Î¿Ï "
+"ασÏÏματου δικτÏου"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
+msgid "Allow control of network connections"
+msgstr "Îα επιτÏέπεται ο έλεγχος των συνδέσεων δικτÏου"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
+msgid "Allow use of user-specific connections"
+msgstr "Îα επιτÏέπεται η χÏήση συνδέσεων συγκεκÏιμένων για το χÏήστη"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
+msgid "Enable or disable WiFi devices"
+msgstr "ΕνεÏγοποίηση ή απενεÏγοποίηση συσκευών ασÏÏματης δικτÏωσης (WiFi)"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
+msgid "Enable or disable mobile broadband devices"
+msgstr ""
+"ΕνεÏγοποίηση ή απενεÏγοποίηση συσκευών ευÏυζωνικότητας κινητής τηλεφωνίας"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+msgid "Enable or disable system networking"
+msgstr "ΕνεÏγοποίηση ή απενεÏγοποίηση δικτÏωσης συστήματος"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
+msgid ""
+"Put NetworkManager to sleep or wake it up (should only be used by system "
+"power management)"
+msgstr ""
+"Θέση της ΔιαχείÏισης δικτÏου σε αδÏάνεια ή ενεÏγοποίησή της (Ï€Ïέπει να "
+"χÏησιμοποιείται μόνο από τη διαχείÏιση ενέÏγειας του συστήματος)"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
+#| msgid "System policy prevents modification of system settings"
+msgid "System policy prevents control of network connections"
+msgstr "Η πολιτική συστήματος δεν επιτÏέπει τον έλεγχο των συνδέσεων δικτÏου"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
+#| msgid "System policy prevents sharing connections via an open WiFi network"
+msgid "System policy prevents enabling or disabling WiFi devices"
+msgstr ""
+"Η πολιτική συστήματος δεν επιτÏέπει ενεÏγοποίηση ή απενεÏγοποίηση συσκευών "
+"Î±Î½Î¿Î¹Ï‡Ï„Î¿Ï Î±ÏƒÏÏματου δικτÏου (WiFi)"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
+msgid "System policy prevents enabling or disabling mobile broadband devices"
+msgstr ""
+"Η πολιτική του συστήματος δεν επιτÏέπει την ενεÏγοποίηση ή απενεÏγοποίηση "
+"συσκευών ευÏυζωνικότητας κινητής τηλεφωνίας"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
+#| msgid "System policy prevents modification of system settings"
+msgid "System policy prevents enabling or disabling system networking"
+msgstr ""
+"Η πολιτική συστήματος δεν επιτÏέπει ενεÏγοποίηση ή απενεÏγοποίηση της "
+"δικτÏωσης του συστήματος"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
+msgid "System policy prevents putting NetworkManager to sleep or waking it up"
+msgstr ""
+"Η πολιτική του συστήματος δεν επιτÏέπει να τίθεται η διαχείÏιση δικτÏου σε "
+"αδÏάνεια ή να ενεÏγοποιείται."
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
+#| msgid "System policy prevents modification of system settings"
+msgid "System policy prevents use of user-specific connections"
+msgstr ""
+"Η πολιτική συστήματος δεν επιτÏέπει τη χÏήση συνδέσεων συγκεκÏιμένων για "
+"κάθε χÏήστη"
+
+#: ../src/nm-netlink-monitor.c:100 ../src/nm-netlink-monitor.c:231
+#: ../src/nm-netlink-monitor.c:653
+#, c-format
+msgid "error processing netlink message: %s"
+msgstr "σφάλμα κατά την επεξεÏγασία μηνÏματος netlink: %s"
+
+#: ../src/nm-netlink-monitor.c: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 ""
"αδÏνατη η σÏνδεση με το netlink για την παÏακολοÏθηση της κατάστασης της "
"σÏνδεσης: %s"
-#: ../src/nm-netlink-monitor.c:278
+#: ../src/nm-netlink-monitor.c:265
+#, c-format
+#| msgid "unable to allocate netlink handle for monitoring link status: %s"
+msgid "unable to enable netlink handle credential passing: %s"
+msgstr "unable to enable netlink handle credential passing: %s"
+
+#: ../src/nm-netlink-monitor.c:291 ../src/nm-netlink-monitor.c:353
#, c-format
-msgid "unable to join netlink group for monitoring link status: %s"
+msgid "unable to allocate netlink handle for monitoring link status: %s"
msgstr ""
-"αδÏνατη η ένταξη στην ομάδα του netlink για την παÏακολοÏθηση της κατάστασης "
-"της σÏνδεσης: %s"
+"αδÏνατη η δέσμευση χειÏιστή netlink για την παÏακολοÏθηση της κατάστασης της "
+"σÏνδεσης: %s"
-#: ../src/nm-netlink-monitor.c:286
+#: ../src/nm-netlink-monitor.c:376
#, c-format
msgid "unable to allocate netlink link cache for monitoring link status: %s"
msgstr ""
"αδÏνατη η εκχώÏηση λανθάνουσας μνήμης στη σÏνδεση netlink για την "
"παÏακολοÏθηση της κατάστασης της σÏνδεσης δικτÏου: %s"
-#: ../src/nm-netlink-monitor.c:494
-msgid "error occurred while waiting for data on socket"
-msgstr "σφάλμα κατά την αναμονή για δεδομένα στην υποδοχή"
+#: ../src/nm-netlink-monitor.c:502
+#, c-format
+#| msgid "unable to join netlink group for monitoring link status: %s"
+msgid "unable to join netlink group: %s"
+msgstr "αδÏνατη η σÏνδεση στην ομάδα του netlink: %s"
-#: ../src/NetworkManager.c:330
+#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642
+#, c-format
+msgid "error updating link cache: %s"
+msgstr "σφάλμα κατά την ενημέÏωση της λανθάνουσας μνήμης της σÏνδεσης: %s"
+
+#: ../src/main.c:502
#, c-format
msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgstr ""
"ΆκυÏη επιλογή. ΠαÏακαλώ χÏησιμοποιήστε --help για να δείτε τη λίστα των "
"έγκυÏων επιλογών.\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:304
+#: ../src/main.c:573
+#, c-format
+#| msgid "Invalid option. Please use --help to see a list of valid options.\n"
+msgid "%s. Please use --help to see a list of valid options.\n"
+msgstr ""
+"%s. ΠαÏακαλώ χÏησιμοποιήστε την επιλογή --help για να δείτε τη λίστα των "
+"έγκυÏων επιλογών.\n"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:324
msgid "# Created by NetworkManager\n"
msgstr "# ΔημιουÏγήθηκε από το NetworkManager\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:310
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:340
#, c-format
msgid ""
"# Merged from %s\n"
@@ -322,64 +1736,48 @@ msgstr ""
"# ΣυγχωνεÏθηκαν από το %s\n"
"\n"
-#: ../src/named-manager/nm-named-manager.c:315
+#: ../src/dhcp-manager/nm-dhcp-manager.c:284
+msgid "no usable DHCP client could be found."
+msgstr "αδυναμία εÏÏεσης πελάτη DHCP που να μποÏεί να χÏησιμοποιηθεί."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+msgid "'dhclient' could be found."
+msgstr "ΕÏÏεση 'dhclient'."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:303
+msgid "'dhcpcd' could be found."
+msgstr "ΕÏÏεση 'dhcpcd'."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:311
+#, c-format
+msgid "unsupported DHCP client '%s'"
+msgstr "μη υποστηÏιζόμενος πελάτης DHCP '%s'"
+
+#: ../src/logging/nm-logging.c:146
+#, c-format
+msgid "Unknown log level '%s'"
+msgstr "Άγνωστο επίπεδο καταγÏαφής '%s'"
+
+#: ../src/logging/nm-logging.c:171
+#, c-format
+msgid "Unknown log domain '%s'"
+msgstr "Άγνωστος τομέας καταγÏαφής '%s'"
+
+#: ../src/dns-manager/nm-dns-manager.c:384
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr ""
"ΣΗΜΕΙΩΣΗ: Ο libc resolver μποÏεί να μην υποστηÏίζει πεÏισσότεÏους από 3 "
"εξυπηÏετητές ονομάτων."
-#: ../src/named-manager/nm-named-manager.c:317
+#: ../src/dns-manager/nm-dns-manager.c:386
msgid "The nameservers listed below may not be recognized."
msgstr "Οι κάτωθι εξυπηÏετητές ονομάτων ίσως να μην αναγνωÏίζονται."
-#: ../src/system-settings/nm-default-wired-connection.c:194
+#: ../src/system-settings/nm-default-wired-connection.c:157
#, c-format
msgid "Auto %s"
msgstr "Αυτόματο %s"
-#: ../system-settings/plugins/ifcfg-rh/reader.c:2446
+#: ../system-settings/plugins/ifcfg-rh/reader.c:3412
msgid "System"
msgstr "ΣÏστημα"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
-msgid "Connection sharing via a protected WiFi network"
-msgstr "Κοινή χÏήση σÏνδεσης μέσω Ï€Ïοστατευμένου ασÏÏματου δικτÏου"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
-msgid "Connection sharing via an open WiFi network"
-msgstr "Κοινή χÏήση σÏνδεσης μέσω Î±Î½Î¿Î¹Ï‡Ï„Î¿Ï Î±ÏƒÏÏματου δικτÏου"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
-msgid "Modify persistent system hostname"
-msgstr "Αλλαγή πάγιου ονόματος συστήματος"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
-msgid "Modify system connections"
-msgstr "ΤÏοποποίηση συνδέσεων συστήματος"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
-msgid "System policy prevents modification of system settings"
-msgstr ""
-"Η πολιτική συστήματος δεν επιτÏέπει Ï„Ïοποποίηση των Ïυθμίσεων συστήματος"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
-#| msgid "System policy prevents modification of system settings"
-msgid "System policy prevents modification of the persistent system hostname"
-msgstr ""
-"Η πολιτική συστήματος δεν επιτÏέπει Ï„Ïοποποίηση του πάγιου ονόματος "
-"συστήματος"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
-msgid "System policy prevents sharing connections via a protected WiFi network"
-msgstr ""
-"Η πολιτική συστήματος δεν επιτÏέπει κοινή χÏήση συνδέσεων μέσω "
-"Ï€Ïοστατευμένου ασÏÏματου δικτÏου"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
-msgid "System policy prevents sharing connections via an open WiFi network"
-msgstr ""
-"Η πολιτική συστήματος δεν επιτÏέπει κοινή χÏήση συνδέσεων μέσω Î±Î½Î¿Î¹Ï‡Ï„Î¿Ï "
-"ασÏÏματου δικτÏου"
-
-#~ msgid "error updating link cache: %s"
-#~ msgstr "σφάλμα κατά την ενημέÏωση της λανθάνουσας μνήμης της σÏνδεσης: %s"
diff --git a/po/en_GB.po b/po/en_GB.po
index 1e57470a60..ef279f8fab 100644
--- a/po/en_GB.po
+++ b/po/en_GB.po
@@ -318,11 +318,11 @@ msgstr "unable to connect to netlink: %s"
msgid "unable to join netlink group: %s"
msgstr "unable to join netlink group: %s"
-#: ../src/named-manager/nm-named-manager.c:315
+#: ../src/dns-manager/nm-dns-manager.c:315
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr "NOTE: the libc resolver may not support more than 3 nameservers."
-#: ../src/named-manager/nm-named-manager.c:317
+#: ../src/dns-manager/nm-dns-manager.c:317
msgid "The nameservers listed below may not be recognized."
msgstr "The nameservers listed below may not be recognised."
diff --git a/po/eo.po b/po/eo.po
new file mode 100644
index 0000000000..c099b86cd0
--- /dev/null
+++ b/po/eo.po
@@ -0,0 +1,1766 @@
+# Esperanto translation for NetworkManager
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the network-manager package.
+#
+# Patrick (Petriko) OUDEJANS < >, 2010.
+# Aisano < >, 2010.
+# Kim RIBEIRO < >, 2010.
+# Serge LEBLANC < >, 2010.
+# Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: network-manager\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=NetworkManager&component=general\n"
+"POT-Creation-Date: 2010-12-10 15:25+0000\n"
+"PO-Revision-Date: 2010-12-11 10:32+0100\n"
+"Last-Translator: Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>\n"
+"Language-Team: Esperanto <ubuntu-l10n-eo@lists.launchpad.net>\n"
+"Language: eo\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"X-Launchpad-Export-Date: 2010-12-10 16:56+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: ../cli/src/connections.c:60 ../cli/src/connections.c:76
+#: ../cli/src/devices.c:89 ../cli/src/devices.c:102 ../cli/src/devices.c:112
+#: ../cli/src/devices.c:122 ../cli/src/devices.c:135 ../cli/src/devices.c:146
+#: ../cli/src/devices.c:157 ../cli/src/devices.c:166 ../cli/src/devices.c:175
+msgid "NAME"
+msgstr "NOMO"
+
+#. 0
+#: ../cli/src/connections.c:61 ../cli/src/connections.c:77
+msgid "UUID"
+msgstr "UUID"
+
+#. 1
+#: ../cli/src/connections.c:62
+msgid "DEVICES"
+msgstr "APARATOJ"
+
+#. 2
+#: ../cli/src/connections.c:63 ../cli/src/connections.c:79
+msgid "SCOPE"
+msgstr "AMPLEKSO"
+
+#. 3
+#: ../cli/src/connections.c:64
+msgid "DEFAULT"
+msgstr "DEFAŬLTA"
+
+#. 4
+#: ../cli/src/connections.c:65
+msgid "DBUS-SERVICE"
+msgstr "DBUS-SERVO"
+
+#. 5
+#: ../cli/src/connections.c:66
+msgid "SPEC-OBJECT"
+msgstr "SPEC-OBJEKTO"
+
+#. 6
+#: ../cli/src/connections.c:67
+msgid "VPN"
+msgstr "VPN"
+
+#. 7
+#. 2
+#: ../cli/src/connections.c:68 ../cli/src/connections.c:84
+#: ../cli/src/devices.c:64
+msgid "DBUS-PATH"
+msgstr "DBUS-VOJO"
+
+#. 1
+#. 0
+#. 1
+#: ../cli/src/connections.c:78 ../cli/src/devices.c:62 ../cli/src/devices.c:91
+msgid "TYPE"
+msgstr "SPECO"
+
+#. 3
+#: ../cli/src/connections.c:80
+msgid "TIMESTAMP"
+msgstr "TEMPINDIKO"
+
+#. 4
+#: ../cli/src/connections.c:81
+msgid "TIMESTAMP-REAL"
+msgstr "REALA-TEMPINDIKO"
+
+#. 5
+#: ../cli/src/connections.c:82
+msgid "AUTOCONNECT"
+msgstr "AŬTOMATA-KONEKTO"
+
+#. 6
+#: ../cli/src/connections.c:83
+msgid "READONLY"
+msgstr "NUR-LEGI"
+
+#: ../cli/src/connections.c:160
+#, c-format
+msgid ""
+"Usage: nmcli con { COMMAND | help }\n"
+" COMMAND := { list | status | up | down }\n"
+"\n"
+" list [id <id> | uuid <id> | system | user]\n"
+" status\n"
+" up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout "
+"<timeout>]\n"
+" down id <id> | uuid <id>\n"
+msgstr ""
+"Uzo: nmcli con { KOMANDO | help }\n"
+" KOMANDO := { list | status | up | down }\n"
+"\n"
+" list [id <id> | uuid <id> | system | user]\n"
+" status\n"
+" up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout "
+"<timeout>]\n"
+" down id <id> | uuid <id>\n"
+
+#: ../cli/src/connections.c:200 ../cli/src/connections.c:541
+#, c-format
+msgid "Error: 'con list': %s"
+msgstr "Eraro: 'con list': %s"
+
+#: ../cli/src/connections.c:202 ../cli/src/connections.c:543
+#, c-format
+msgid "Error: 'con list': %s; allowed fields: %s"
+msgstr "Eraro: 'con list': %s; permesataj kampoj: %s"
+
+#: ../cli/src/connections.c:210
+msgid "Connection details"
+msgstr "Konektodetaloj"
+
+#: ../cli/src/connections.c:385 ../cli/src/connections.c:606
+msgid "system"
+msgstr "sistemo"
+
+#: ../cli/src/connections.c:385 ../cli/src/connections.c:606
+msgid "user"
+msgstr "uzanto"
+
+#: ../cli/src/connections.c:387
+msgid "never"
+msgstr "neniam"
+
+#. "CAPABILITIES"
+#. Print header
+#. "WIFI-PROPERTIES"
+#: ../cli/src/connections.c:388 ../cli/src/connections.c:389
+#: ../cli/src/connections.c:607 ../cli/src/connections.c:610
+#: ../cli/src/devices.c:433 ../cli/src/devices.c:558 ../cli/src/devices.c:584
+#: ../cli/src/devices.c:585 ../cli/src/devices.c:586 ../cli/src/devices.c:587
+#: ../cli/src/devices.c:588 ../cli/src/settings.c:508
+#: ../cli/src/settings.c:551 ../cli/src/settings.c:652
+#: ../cli/src/settings.c:926 ../cli/src/settings.c:927
+#: ../cli/src/settings.c:929 ../cli/src/settings.c:931
+#: ../cli/src/settings.c:1056 ../cli/src/settings.c:1057
+#: ../cli/src/settings.c:1058 ../cli/src/settings.c:1137
+#: ../cli/src/settings.c:1138 ../cli/src/settings.c:1139
+#: ../cli/src/settings.c:1140 ../cli/src/settings.c:1141
+#: ../cli/src/settings.c:1142 ../cli/src/settings.c:1143
+#: ../cli/src/settings.c:1144 ../cli/src/settings.c:1145
+#: ../cli/src/settings.c:1146 ../cli/src/settings.c:1147
+#: ../cli/src/settings.c:1148 ../cli/src/settings.c:1149
+#: ../cli/src/settings.c:1224
+msgid "yes"
+msgstr "jes"
+
+#: ../cli/src/connections.c:388 ../cli/src/connections.c:389
+#: ../cli/src/connections.c:607 ../cli/src/connections.c:610
+#: ../cli/src/devices.c:433 ../cli/src/devices.c:558 ../cli/src/devices.c:584
+#: ../cli/src/devices.c:585 ../cli/src/devices.c:586 ../cli/src/devices.c:587
+#: ../cli/src/devices.c:588 ../cli/src/settings.c:508
+#: ../cli/src/settings.c:510 ../cli/src/settings.c:551
+#: ../cli/src/settings.c:652 ../cli/src/settings.c:926
+#: ../cli/src/settings.c:927 ../cli/src/settings.c:929
+#: ../cli/src/settings.c:931 ../cli/src/settings.c:1056
+#: ../cli/src/settings.c:1057 ../cli/src/settings.c:1058
+#: ../cli/src/settings.c:1137 ../cli/src/settings.c:1138
+#: ../cli/src/settings.c:1139 ../cli/src/settings.c:1140
+#: ../cli/src/settings.c:1141 ../cli/src/settings.c:1142
+#: ../cli/src/settings.c:1143 ../cli/src/settings.c:1144
+#: ../cli/src/settings.c:1145 ../cli/src/settings.c:1146
+#: ../cli/src/settings.c:1147 ../cli/src/settings.c:1148
+#: ../cli/src/settings.c:1149 ../cli/src/settings.c:1224
+msgid "no"
+msgstr "ne"
+
+#: ../cli/src/connections.c:462 ../cli/src/connections.c:505
+msgid "System connections"
+msgstr "Sistemkonektoj"
+
+#: ../cli/src/connections.c:467 ../cli/src/connections.c:518
+msgid "User connections"
+msgstr "Uzanto-konektoj"
+
+#: ../cli/src/connections.c:479 ../cli/src/connections.c:1342
+#: ../cli/src/connections.c:1358 ../cli/src/connections.c:1367
+#: ../cli/src/connections.c:1378 ../cli/src/connections.c:1463
+#: ../cli/src/devices.c:964 ../cli/src/devices.c:974 ../cli/src/devices.c:1076
+#: ../cli/src/devices.c:1083
+#, c-format
+msgid "Error: %s argument is missing."
+msgstr "Eraro: argumento %s mankas."
+
+#: ../cli/src/connections.c:492
+#, c-format
+msgid "Error: %s - no such connection."
+msgstr "Eraro: %s - neniu tia konekto"
+
+#: ../cli/src/connections.c:524 ../cli/src/connections.c:1391
+#: ../cli/src/connections.c:1481 ../cli/src/devices.c:787
+#: ../cli/src/devices.c:854 ../cli/src/devices.c:988 ../cli/src/devices.c:1089
+#, c-format
+msgid "Unknown parameter: %s\n"
+msgstr "Nekonata parametro: %s\n"
+
+#: ../cli/src/connections.c:533
+#, c-format
+msgid "Error: no valid parameter specified."
+msgstr "Eraro: neniu valida parametro difinita."
+
+#: ../cli/src/connections.c:548 ../cli/src/connections.c:1584
+#: ../cli/src/devices.c:1295 ../cli/src/network-manager.c:359
+#, c-format
+msgid "Error: %s."
+msgstr "Eraro: %s."
+
+#: ../cli/src/connections.c:655
+#, c-format
+msgid "Error: 'con status': %s"
+msgstr "Eraro: 'con status': %s"
+
+#: ../cli/src/connections.c:657
+#, c-format
+msgid "Error: 'con status': %s; allowed fields: %s"
+msgstr "Eraro: 'con status': %s; permesataj kampoj: %s"
+
+#: ../cli/src/connections.c:664
+msgid "Active connections"
+msgstr "Aktivaj konektoj"
+
+#: ../cli/src/connections.c:1034
+#, c-format
+msgid "no active connection on device '%s'"
+msgstr "neniu aktiva konekto sur aparato '%s'"
+
+#: ../cli/src/connections.c:1042
+#, c-format
+msgid "no active connection or device"
+msgstr "neniu aktiva konekto aÅ­ aparato"
+
+#: ../cli/src/connections.c:1092
+#, c-format
+msgid "device '%s' not compatible with connection '%s'"
+msgstr "aparato '%s' ne kongruas kun konekto '%s'"
+
+#: ../cli/src/connections.c:1094
+#, c-format
+msgid "no device found for connection '%s'"
+msgstr "neniu aparato trovita por konekto '%s'"
+
+#: ../cli/src/connections.c:1105
+msgid "activating"
+msgstr "enÅaltas"
+
+#: ../cli/src/connections.c:1107
+msgid "activated"
+msgstr "enÅaltite"
+
+#: ../cli/src/connections.c:1110 ../cli/src/connections.c:1133
+#: ../cli/src/connections.c:1166 ../cli/src/devices.c:247
+#: ../cli/src/devices.c:559 ../cli/src/network-manager.c:94
+#: ../cli/src/network-manager.c:149 ../cli/src/settings.c:473
+msgid "unknown"
+msgstr "nekonate"
+
+#: ../cli/src/connections.c:1119
+msgid "VPN connecting (prepare)"
+msgstr "VPN konektas (preparo)"
+
+#: ../cli/src/connections.c:1121
+msgid "VPN connecting (need authentication)"
+msgstr "VPN konektas (bezonas aÅ­tentigon)"
+
+#: ../cli/src/connections.c:1123
+msgid "VPN connecting"
+msgstr "VPN konektas"
+
+#: ../cli/src/connections.c:1125
+msgid "VPN connecting (getting IP configuration)"
+msgstr "VPN konektas (akiras IP-agordaron)"
+
+#: ../cli/src/connections.c:1127
+msgid "VPN connected"
+msgstr "VPN konektita"
+
+#: ../cli/src/connections.c:1129
+msgid "VPN connection failed"
+msgstr "VPN-konekto fiaskis"
+
+#: ../cli/src/connections.c:1131
+msgid "VPN disconnected"
+msgstr "VPN malkonektis"
+
+#: ../cli/src/connections.c:1142
+msgid "unknown reason"
+msgstr "nekonata kialo"
+
+#: ../cli/src/connections.c:1144
+msgid "none"
+msgstr "nenio"
+
+#: ../cli/src/connections.c:1146
+msgid "the user was disconnected"
+msgstr "la uzanto estis malkonektita"
+
+#: ../cli/src/connections.c:1148
+msgid "the base network connection was interrupted"
+msgstr "la baza retkonekto estis interrompita"
+
+#: ../cli/src/connections.c:1150
+msgid "the VPN service stopped unexpectedly"
+msgstr "la VPN-servo neatendite ĉesis"
+
+#: ../cli/src/connections.c:1152
+msgid "the VPN service returned invalid configuration"
+msgstr "la VPN-servo revenigis nevalidan agordaron"
+
+#: ../cli/src/connections.c:1154
+msgid "the connection attempt timed out"
+msgstr "la konektoprovo eltempiÄis"
+
+#: ../cli/src/connections.c:1156
+msgid "the VPN service did not start in time"
+msgstr "la VPN-servo ne startis Äustatempe"
+
+#: ../cli/src/connections.c:1158
+msgid "the VPN service failed to start"
+msgstr "la VPN-servo fiaskis starti"
+
+#: ../cli/src/connections.c:1160
+msgid "no valid VPN secrets"
+msgstr "neniu valida VPN-sekreto"
+
+#: ../cli/src/connections.c:1162
+msgid "invalid VPN secrets"
+msgstr "nevalidaj VPN-sekretoj"
+
+#: ../cli/src/connections.c:1164
+msgid "the connection was removed"
+msgstr "la konekto estis forigita"
+
+#: ../cli/src/connections.c:1178
+#, c-format
+msgid "state: %s\n"
+msgstr "stato: %s\n"
+
+#: ../cli/src/connections.c:1181 ../cli/src/connections.c:1207
+#, c-format
+msgid "Connection activated\n"
+msgstr "Konekto enÅaltita\n"
+
+#: ../cli/src/connections.c:1184
+#, c-format
+msgid "Error: Connection activation failed."
+msgstr "Eraro: EnÅalto de konekto fiaskis."
+
+#: ../cli/src/connections.c:1203
+#, c-format
+msgid "state: %s (%d)\n"
+msgstr "stato: %s (%d)\n"
+
+#: ../cli/src/connections.c:1213
+#, c-format
+msgid "Error: Connection activation failed: %s."
+msgstr "Eraro: EnÅalto de konekto fiaskis: %s."
+
+#: ../cli/src/connections.c:1230 ../cli/src/devices.c:911
+#, c-format
+msgid "Error: Timeout %d sec expired."
+msgstr "Eraro: EltempiÄo finiÄis %d sek."
+
+#: ../cli/src/connections.c:1273
+#, c-format
+msgid "Error: Connection activation failed: %s"
+msgstr "Eraro: EnÅalto de konekto fiaskis: %s"
+
+#: ../cli/src/connections.c:1287
+#, c-format
+msgid "Error: Obtaining active connection for '%s' failed."
+msgstr "Eraro: Akiro de aktiva konekto por '%s' fiaskis."
+
+#: ../cli/src/connections.c:1296
+#, c-format
+msgid "Active connection state: %s\n"
+msgstr "Stato de aktiva konekto: %s\n"
+
+#: ../cli/src/connections.c:1297
+#, c-format
+msgid "Active connection path: %s\n"
+msgstr "Vojo de aktiva konekto: %s\n"
+
+#: ../cli/src/connections.c:1351 ../cli/src/connections.c:1472
+#, c-format
+msgid "Error: Unknown connection: %s."
+msgstr "Eraro: Nekonata konekto: %s."
+
+#: ../cli/src/connections.c:1386 ../cli/src/devices.c:982
+#, c-format
+msgid "Error: timeout value '%s' is not valid."
+msgstr "Eraro: eltempiÄa valoro '%s' ne validas."
+
+#: ../cli/src/connections.c:1399 ../cli/src/connections.c:1489
+#, c-format
+msgid "Error: id or uuid has to be specified."
+msgstr "Eraro: id aÅ­ uuid devas esti specifata."
+
+#: ../cli/src/connections.c:1419
+#, c-format
+msgid "Error: No suitable device found: %s."
+msgstr "Eraro: Trovis neniun taÅ­gan aparaton: %s."
+
+#: ../cli/src/connections.c:1421
+#, c-format
+msgid "Error: No suitable device found."
+msgstr "Eraro: Trovis neniun taÅ­gan aparaton."
+
+#: ../cli/src/connections.c:1516
+#, c-format
+msgid "Warning: Connection not active\n"
+msgstr "Atenton: Konekto ne aktivas\n"
+
+#: ../cli/src/connections.c:1573
+#, c-format
+msgid "Error: 'con' command '%s' is not valid."
+msgstr "Eraro: 'con'-komando '%s' ne validas."
+
+#: ../cli/src/connections.c:1609
+#, c-format
+msgid "Error: could not connect to D-Bus."
+msgstr "Eraro: ne povis konekti al D-Bus."
+
+#: ../cli/src/connections.c:1616
+#, c-format
+msgid "Error: Could not get system settings."
+msgstr "Eraro: Ne povis akiri sistemajn agordojn."
+
+#: ../cli/src/connections.c:1624
+#, c-format
+msgid "Error: Could not get user settings."
+msgstr "Eraro: Ne povis akiri uzanto-agordojn."
+
+#: ../cli/src/connections.c:1634
+#, c-format
+msgid "Error: Can't obtain connections: settings services are not running."
+msgstr "Eraro: Ne povas obteni konektojn: agordo-servoj ne aktivas."
+
+#. 0
+#. 9
+#: ../cli/src/devices.c:61 ../cli/src/devices.c:90 ../cli/src/devices.c:185
+msgid "DEVICE"
+msgstr "APARATO"
+
+#. 1
+#. 4
+#. 0
+#: ../cli/src/devices.c:63 ../cli/src/devices.c:94
+#: ../cli/src/network-manager.c:36
+msgid "STATE"
+msgstr "STATO"
+
+#: ../cli/src/devices.c:73
+msgid "GENERAL"
+msgstr "ÄœENERALA"
+
+#. 0
+#: ../cli/src/devices.c:74
+msgid "CAPABILITIES"
+msgstr "KAPABLOJ"
+
+#. 1
+#: ../cli/src/devices.c:75
+msgid "WIFI-PROPERTIES"
+msgstr "WIFI-ECOJ"
+
+#. 2
+#: ../cli/src/devices.c:76
+msgid "AP"
+msgstr "AP"
+
+#. 3
+#: ../cli/src/devices.c:77
+msgid "WIRED-PROPERTIES"
+msgstr "DRATA-ECOJ"
+
+#. 4
+#: ../cli/src/devices.c:78
+msgid "IP4-SETTINGS"
+msgstr "IP4-AGORDOJ"
+
+#. 5
+#: ../cli/src/devices.c:79
+msgid "IP4-DNS"
+msgstr "IP4-DNS"
+
+#. 6
+#: ../cli/src/devices.c:80
+msgid "IP6-SETTINGS"
+msgstr "IP6-AGORDOJ"
+
+#. 7
+#: ../cli/src/devices.c:81
+msgid "IP6-DNS"
+msgstr "IP6-DNS"
+
+#. 2
+#: ../cli/src/devices.c:92
+msgid "DRIVER"
+msgstr "PELILO"
+
+#. 3
+#: ../cli/src/devices.c:93
+msgid "HWADDR"
+msgstr "APARATADRESO"
+
+#. 0
+#: ../cli/src/devices.c:103
+msgid "CARRIER-DETECT"
+msgstr "PORTANTO-REKONO"
+
+#. 1
+#: ../cli/src/devices.c:104
+msgid "SPEED"
+msgstr "RAPIDO"
+
+#. 0
+#: ../cli/src/devices.c:113
+msgid "CARRIER"
+msgstr "PORTANTO"
+
+#. 0
+#: ../cli/src/devices.c:123
+msgid "WEP"
+msgstr "WEP"
+
+#. 1
+#: ../cli/src/devices.c:124
+msgid "WPA"
+msgstr "WPA"
+
+#. 2
+#: ../cli/src/devices.c:125
+msgid "WPA2"
+msgstr "WPA2"
+
+#. 3
+#: ../cli/src/devices.c:126
+msgid "TKIP"
+msgstr "TKIP"
+
+#. 4
+#: ../cli/src/devices.c:127
+msgid "CCMP"
+msgstr "CCMP"
+
+#. 0
+#: ../cli/src/devices.c:136 ../cli/src/devices.c:147
+msgid "ADDRESS"
+msgstr "ADRESO"
+
+#. 1
+#: ../cli/src/devices.c:137 ../cli/src/devices.c:148
+msgid "PREFIX"
+msgstr "PREFIKSO"
+
+#. 2
+#: ../cli/src/devices.c:138 ../cli/src/devices.c:149
+msgid "GATEWAY"
+msgstr "KLUZO"
+
+#. 0
+#: ../cli/src/devices.c:158 ../cli/src/devices.c:167
+msgid "DNS"
+msgstr "DNS"
+
+#. 0
+#: ../cli/src/devices.c:176
+msgid "SSID"
+msgstr "SSID"
+
+#. 1
+#: ../cli/src/devices.c:177
+msgid "BSSID"
+msgstr "BSSID"
+
+#. 2
+#: ../cli/src/devices.c:178
+msgid "MODE"
+msgstr "REÄœIMO"
+
+#. 3
+#: ../cli/src/devices.c:179
+msgid "FREQ"
+msgstr "FREKV"
+
+#. 4
+#: ../cli/src/devices.c:180
+msgid "RATE"
+msgstr "TRANSMETRAPIDO"
+
+#. 5
+#: ../cli/src/devices.c:181
+msgid "SIGNAL"
+msgstr "SIGNALO"
+
+#. 6
+#: ../cli/src/devices.c:182
+msgid "SECURITY"
+msgstr "SEKURECO"
+
+#. 7
+#: ../cli/src/devices.c:183
+msgid "WPA-FLAGS"
+msgstr "WPA-FLAGOJ"
+
+#. 8
+#: ../cli/src/devices.c:184
+msgid "RSN-FLAGS"
+msgstr "RSN-FLAGOJ"
+
+#. 10
+#: ../cli/src/devices.c:186
+msgid "ACTIVE"
+msgstr "AKTIVA"
+
+#: ../cli/src/devices.c:209
+#, c-format
+msgid ""
+"Usage: nmcli dev { COMMAND | help }\n"
+"\n"
+" COMMAND := { status | list | disconnect | wifi }\n"
+"\n"
+" status\n"
+" list [iface <iface>]\n"
+" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
+" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+"\n"
+msgstr ""
+"Usage: nmcli dev { KOMANDO | help }\n"
+"\n"
+" KOMANDO := { status | list | disconnect | wifi }\n"
+"\n"
+" status\n"
+" list [iface <iface>]\n"
+" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
+" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+"\n"
+
+#: ../cli/src/devices.c:229
+msgid "unmanaged"
+msgstr "nemastrumata"
+
+#: ../cli/src/devices.c:231
+msgid "unavailable"
+msgstr "neatingebla"
+
+#: ../cli/src/devices.c:233 ../cli/src/network-manager.c:91
+msgid "disconnected"
+msgstr "nekonektite"
+
+#: ../cli/src/devices.c:235
+msgid "connecting (prepare)"
+msgstr "konektas (preparo)"
+
+#: ../cli/src/devices.c:237
+msgid "connecting (configuring)"
+msgstr "konektas (agordado)"
+
+#: ../cli/src/devices.c:239
+msgid "connecting (need authentication)"
+msgstr "konektas (bezonas aÅ­tentigon)"
+
+#: ../cli/src/devices.c:241
+msgid "connecting (getting IP configuration)"
+msgstr "konektas (akiras IP-agordaron)"
+
+#: ../cli/src/devices.c:243 ../cli/src/network-manager.c:89
+msgid "connected"
+msgstr "konektita"
+
+#: ../cli/src/devices.c:245
+msgid "connection failed"
+msgstr "konekto fiaskis"
+
+#: ../cli/src/devices.c:268 ../cli/src/devices.c:425
+msgid "Unknown"
+msgstr "Nekonata"
+
+#: ../cli/src/devices.c:300
+msgid "(none)"
+msgstr "(nenio)"
+
+#: ../cli/src/devices.c:325
+#, c-format
+msgid "%s: error converting IP4 address 0x%X"
+msgstr "%s: eraro dum konverto de IP4-adreso 0x%X"
+
+#: ../cli/src/devices.c:394
+#, c-format
+msgid "%u MHz"
+msgstr "%u MHz"
+
+#: ../cli/src/devices.c:395
+#, c-format
+msgid "%u MB/s"
+msgstr "%u MB/s"
+
+#: ../cli/src/devices.c:404
+msgid "Encrypted: "
+msgstr "Ĉifrita: "
+
+#: ../cli/src/devices.c:409
+msgid "WEP "
+msgstr "WEP "
+
+#: ../cli/src/devices.c:411
+msgid "WPA "
+msgstr "WPA "
+
+#: ../cli/src/devices.c:413
+msgid "WPA2 "
+msgstr "WPA2 "
+
+#: ../cli/src/devices.c:416
+msgid "Enterprise "
+msgstr "Entrepreno "
+
+#: ../cli/src/devices.c:425
+msgid "Ad-Hoc"
+msgstr "LaÅ­cela"
+
+#: ../cli/src/devices.c:425
+msgid "Infrastructure"
+msgstr "Infrastrukturo"
+
+#: ../cli/src/devices.c:487
+#, c-format
+msgid "Error: 'dev list': %s"
+msgstr "Eraro: 'dev list': %s"
+
+#: ../cli/src/devices.c:489
+#, c-format
+msgid "Error: 'dev list': %s; allowed fields: %s"
+msgstr "Eraro: 'dev list': %s; permesataj kampoj: %s"
+
+#: ../cli/src/devices.c:498
+msgid "Device details"
+msgstr "Detaloj de aparato"
+
+#: ../cli/src/devices.c:528 ../cli/src/devices.c:927
+msgid "(unknown)"
+msgstr "(nekonata)"
+
+#: ../cli/src/devices.c:529
+msgid "unknown)"
+msgstr "nekonata)"
+
+#: ../cli/src/devices.c:555
+#, c-format
+msgid "%u Mb/s"
+msgstr "%u Mb/s"
+
+#. Print header
+#. "WIRED-PROPERTIES"
+#: ../cli/src/devices.c:628
+msgid "on"
+msgstr "enÅaltite"
+
+#: ../cli/src/devices.c:628
+msgid "off"
+msgstr "elÅaltite"
+
+#: ../cli/src/devices.c:810
+#, c-format
+msgid "Error: 'dev status': %s"
+msgstr "Eraro: 'dev status': %s"
+
+#: ../cli/src/devices.c:812
+#, c-format
+msgid "Error: 'dev status': %s; allowed fields: %s"
+msgstr "Eraro: 'dev status': %s; permesataj kampoj: %s"
+
+#: ../cli/src/devices.c:819
+msgid "Status of devices"
+msgstr "Stato de aparatoj"
+
+#: ../cli/src/devices.c:847
+#, c-format
+msgid "Error: '%s' argument is missing."
+msgstr "Eraro: argumento '%s' mankas."
+
+#: ../cli/src/devices.c:876 ../cli/src/devices.c:1015
+#: ../cli/src/devices.c:1138
+#, c-format
+msgid "Error: Device '%s' not found."
+msgstr "Eraro: Aparato '%s' ne trovita."
+
+#: ../cli/src/devices.c:899
+#, c-format
+msgid "Success: Device '%s' successfully disconnected."
+msgstr "Sukceso: Aparato '%s' sukcese malkonektiÄis."
+
+#: ../cli/src/devices.c:924
+#, c-format
+msgid "Error: Device '%s' (%s) disconnecting failed: %s"
+msgstr "Eraro: Aparato '%s' (%s) eraro dum malkonektiÄo: %s"
+
+#: ../cli/src/devices.c:932
+#, c-format
+msgid "Device state: %d (%s)\n"
+msgstr "Stato de aparato: %d (%s)\n"
+
+#: ../cli/src/devices.c:996
+#, c-format
+msgid "Error: iface has to be specified."
+msgstr "Eraro: 'iface' devas esti specifata."
+
+#: ../cli/src/devices.c:1114
+#, c-format
+msgid "Error: 'dev wifi': %s"
+msgstr "Eraro: 'dev wifi': %s"
+
+#: ../cli/src/devices.c:1116
+#, c-format
+msgid "Error: 'dev wifi': %s; allowed fields: %s"
+msgstr "Eraro: 'dev wifi': %s; permesataj kampoj: %s"
+
+#: ../cli/src/devices.c:1123
+msgid "WiFi scan list"
+msgstr "WiFi-skanlisto"
+
+#: ../cli/src/devices.c:1158 ../cli/src/devices.c:1212
+#, c-format
+msgid "Error: Access point with hwaddr '%s' not found."
+msgstr "Eraro: Retkaptejo kun 'hwaddr' '%s' ne trovita"
+
+#: ../cli/src/devices.c:1175
+#, c-format
+msgid "Error: Device '%s' is not a WiFi device."
+msgstr "Eraro: Aparato '%s' ne estas WiFi-aparato."
+
+#: ../cli/src/devices.c:1239
+#, c-format
+msgid "Error: 'dev wifi' command '%s' is not valid."
+msgstr "Eraro: 'dev wifi'-komando '%s' ne validas."
+
+#: ../cli/src/devices.c:1286
+#, c-format
+msgid "Error: 'dev' command '%s' is not valid."
+msgstr "Eraro: 'dev'-komando '%s' ne validas."
+
+#: ../cli/src/network-manager.c:35
+msgid "RUNNING"
+msgstr "AKTIVA"
+
+#. 1
+#: ../cli/src/network-manager.c:37
+msgid "NET-ENABLED"
+msgstr "RET-ENÅœALTITE"
+
+#. 2
+#: ../cli/src/network-manager.c:38
+msgid "WIFI-HARDWARE"
+msgstr "WIFI-APARATARO"
+
+#. 3
+#: ../cli/src/network-manager.c:39
+msgid "WIFI"
+msgstr "WIFI"
+
+#. 4
+#: ../cli/src/network-manager.c:40
+msgid "WWAN-HARDWARE"
+msgstr "WWAN-APARATARO"
+
+#. 5
+#: ../cli/src/network-manager.c:41
+msgid "WWAN"
+msgstr "WWAN"
+
+#: ../cli/src/network-manager.c:64
+#, c-format
+msgid ""
+"Usage: nmcli nm { COMMAND | help }\n"
+"\n"
+" COMMAND := { status | enable | sleep | wifi | wwan }\n"
+"\n"
+" status\n"
+" enable [true|false]\n"
+" sleep [true|false]\n"
+" wifi [on|off]\n"
+" wwan [on|off]\n"
+"\n"
+msgstr ""
+"Uzo: nmcli nm { KOMANDO | help }\n"
+"\n"
+" KOMANDO := { status | enable | sleep | wifi | wwan }\n"
+"\n"
+" status\n"
+" enable [true|false]\n"
+" sleep [true|false]\n"
+" wifi [on|off]\n"
+" wwan [on|off]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:85
+msgid "asleep"
+msgstr "dormas"
+
+#: ../cli/src/network-manager.c:87
+msgid "connecting"
+msgstr "konektas"
+
+#: ../cli/src/network-manager.c:128
+#, c-format
+msgid "Error: 'nm status': %s"
+msgstr "Eraro: 'nm status': %s"
+
+#: ../cli/src/network-manager.c:130
+#, c-format
+msgid "Error: 'nm status': %s; allowed fields: %s"
+msgstr "Eraro: 'nm status': %s; permesataj kampoj: %s"
+
+#: ../cli/src/network-manager.c:137
+msgid "NetworkManager status"
+msgstr "Stato de NetworkManager"
+
+#. Print header
+#: ../cli/src/network-manager.c:144 ../cli/src/network-manager.c:145
+#: ../cli/src/network-manager.c:146 ../cli/src/network-manager.c:147
+#: ../cli/src/network-manager.c:154 ../cli/src/network-manager.c:247
+#: ../cli/src/network-manager.c:296 ../cli/src/network-manager.c:328
+msgid "enabled"
+msgstr "enÅaltita"
+
+#: ../cli/src/network-manager.c:144 ../cli/src/network-manager.c:145
+#: ../cli/src/network-manager.c:146 ../cli/src/network-manager.c:147
+#: ../cli/src/network-manager.c:154 ../cli/src/network-manager.c:247
+#: ../cli/src/network-manager.c:296 ../cli/src/network-manager.c:328
+msgid "disabled"
+msgstr "elÅaltite"
+
+#: ../cli/src/network-manager.c:152
+msgid "running"
+msgstr "aktiva"
+
+#: ../cli/src/network-manager.c:152
+msgid "not running"
+msgstr "neaktiva"
+
+#: ../cli/src/network-manager.c:175
+#, c-format
+msgid "Error: Couldn't connect to system bus: %s"
+msgstr "Eraro: Ne povis konekti al sistem-buso: %s."
+
+#: ../cli/src/network-manager.c:186
+#, c-format
+msgid "Error: Couldn't create D-Bus object proxy."
+msgstr "Eraro: Ne povis krei D-busan objekt-prokurservilon."
+
+#: ../cli/src/network-manager.c:192
+#, c-format
+msgid "Error in sleep: %s"
+msgstr "Eraro dum dormo: %s"
+
+#: ../cli/src/network-manager.c:237 ../cli/src/network-manager.c:286
+#: ../cli/src/network-manager.c:318
+#, c-format
+msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
+msgstr "Eraro: valoro '--fields' '%s' ne validas tie ĉi; permesataj kampoj: %s"
+
+#: ../cli/src/network-manager.c:245
+msgid "Networking enabled"
+msgstr "Retkonektado enÅaltita"
+
+#: ../cli/src/network-manager.c:256
+#, c-format
+msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
+msgstr "Eraro: nevalida 'enÅalt'-parametro: '%s'; uzu 'true' aÅ­ 'false'."
+
+#: ../cli/src/network-manager.c:265
+#, c-format
+msgid "Error: Sleeping status is not exported by NetworkManager."
+msgstr "Eraro: Dorm-stato ne estas elportite de NetworkManager."
+
+#: ../cli/src/network-manager.c:273
+#, c-format
+msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
+msgstr "Eraro: nevalida 'dorm'-parametro: '%s'; uzu 'true' aŭ 'false'."
+
+#: ../cli/src/network-manager.c:294
+msgid "WiFi enabled"
+msgstr "WiFi enÅaltita"
+
+#: ../cli/src/network-manager.c:305
+#, c-format
+msgid "Error: invalid 'wifi' parameter: '%s'."
+msgstr "Eraro: nevalida 'wifi'-parametro: '%s'."
+
+#: ../cli/src/network-manager.c:326
+msgid "WWAN enabled"
+msgstr "WWAN enÅaltita"
+
+#: ../cli/src/network-manager.c:337
+#, c-format
+msgid "Error: invalid 'wwan' parameter: '%s'."
+msgstr "Eraro: nevalida 'wwan'-parametro: '%s'."
+
+#: ../cli/src/network-manager.c:348
+#, c-format
+msgid "Error: 'nm' command '%s' is not valid."
+msgstr "Eraro: 'nm'-komando '%s' ne validas."
+
+#: ../cli/src/nmcli.c:69
+#, 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] <field1,field2,...>|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 ""
+"Uzo: %s [OPCIOJ] OBJEKTO { KOMANDO | help }\n"
+"\n"
+"OPCIOJ\n"
+" -t[erse] konciza eligo\n"
+" -p[retty] bela eligo\n"
+" -m[ode] tabular|multiline eliga reÄimo\n"
+" -f[ields] <field1,field2,...>|all|common specifigi eligo-kampojn\n"
+" -e[scape] yes|no eskapaj kolumno-separoj en "
+"valoroj\n"
+" -v[ersion] montri programversion\n"
+" -h[elp] printi tiun ĉi help-paÄon\n"
+"\n"
+"OBJEKTO\n"
+" nm stato de NetworkManager\n"
+" con konektoj de NetworkManager\n"
+" dev aparatoj mastrumataj de NetworkManager\n"
+"\n"
+
+#: ../cli/src/nmcli.c:113
+#, c-format
+msgid "Error: Object '%s' is unknown, try 'nmcli help'."
+msgstr "Eraro: Objekto '%s' estas nekonata, provu: 'nmcli help'."
+
+#: ../cli/src/nmcli.c:143
+#, c-format
+msgid "Error: Option '--terse' is specified the second time."
+msgstr "Eraro: Opcio '--terse' specifiÄis duan fojon."
+
+#: ../cli/src/nmcli.c:148
+#, c-format
+msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
+msgstr "Eraro: Opcioj '--terse' kaj '--pretty' ekskludas unu la alian."
+
+#: ../cli/src/nmcli.c:156
+#, c-format
+msgid "Error: Option '--pretty' is specified the second time."
+msgstr "Eraro: Opcio '--pretty' specifiÄis duan fojon."
+
+#: ../cli/src/nmcli.c:161
+#, c-format
+msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
+msgstr "Eraro: Opcioj '--pretty' kaj '--terse' ekskludas unu la alian."
+
+#: ../cli/src/nmcli.c:171 ../cli/src/nmcli.c:187
+#, c-format
+msgid "Error: missing argument for '%s' option."
+msgstr "Eraro: mankas argumento por elektindaĵo '%s'."
+
+#: ../cli/src/nmcli.c:180 ../cli/src/nmcli.c:196
+#, c-format
+msgid "Error: '%s' is not valid argument for '%s' option."
+msgstr "Eraro: '%s' ne estas valida argumento por elektindaĵo '%s'."
+
+#: ../cli/src/nmcli.c:203
+#, c-format
+msgid "Error: fields for '%s' options are missing."
+msgstr "Eraro: kampoj por elektindaĵoj '%s' mankas."
+
+#: ../cli/src/nmcli.c:209
+#, c-format
+msgid "nmcli tool, version %s\n"
+msgstr "ilo 'nmcli', versio %s\n"
+
+#: ../cli/src/nmcli.c:215
+#, c-format
+msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
+msgstr "Eraro: Opcio '%s' estas nekonata, provu: 'nmcli -help'."
+
+#: ../cli/src/nmcli.c:234
+#, c-format
+msgid "Caught signal %d, shutting down..."
+msgstr "Ricevis signalon '%d', elÅaltas..."
+
+#: ../cli/src/nmcli.c:259
+#, c-format
+msgid "Error: Could not connect to NetworkManager."
+msgstr "Eraro: Ne eblis konekti al NetworkManager"
+
+#: ../cli/src/nmcli.c:275
+msgid "Success"
+msgstr "Sukceso"
+
+#: ../cli/src/settings.c:411
+#, c-format
+msgid "%d (hex-ascii-key)"
+msgstr "%d (heks-ascii-Ålosilo)"
+
+#: ../cli/src/settings.c:413
+#, c-format
+msgid "%d (104/128-bit passphrase)"
+msgstr "%d (104/128-bita pasvorto)"
+
+#: ../cli/src/settings.c:416
+#, c-format
+msgid "%d (unknown)"
+msgstr "%d (nekonata)"
+
+#: ../cli/src/settings.c:442
+msgid "0 (unknown)"
+msgstr "0 (nekonata)"
+
+#: ../cli/src/settings.c:448
+msgid "any, "
+msgstr "ajna, "
+
+#: ../cli/src/settings.c:450
+msgid "900 MHz, "
+msgstr "900 MHz, "
+
+#: ../cli/src/settings.c:452
+msgid "1800 MHz, "
+msgstr "1800 MHz, "
+
+#: ../cli/src/settings.c:454
+msgid "1900 MHz, "
+msgstr "1900 MHz, "
+
+#: ../cli/src/settings.c:456
+msgid "850 MHz, "
+msgstr "850 MHz, "
+
+#: ../cli/src/settings.c:458
+msgid "WCDMA 3GPP UMTS 2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 2100 MHz, "
+
+#: ../cli/src/settings.c:460
+msgid "WCDMA 3GPP UMTS 1800 MHz, "
+msgstr "WCDMA 3GPP UMTS 1800 MHz, "
+
+#: ../cli/src/settings.c:462
+msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
+
+#: ../cli/src/settings.c:464
+msgid "WCDMA 3GPP UMTS 800 MHz, "
+msgstr "WCDMA 3GPP UMTS 800 MHz, "
+
+#: ../cli/src/settings.c:466
+msgid "WCDMA 3GPP UMTS 850 MHz, "
+msgstr "WCDMA 3GPP UMTS 850 MHz, "
+
+#: ../cli/src/settings.c:468
+msgid "WCDMA 3GPP UMTS 900 MHz, "
+msgstr "WCDMA 3GPP UMTS 900 MHz, "
+
+#: ../cli/src/settings.c:470
+msgid "WCDMA 3GPP UMTS 1700 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700 MHz, "
+
+#: ../cli/src/settings.c:554 ../cli/src/settings.c:721
+msgid "auto"
+msgstr "aÅ­to"
+
+#: ../cli/src/settings.c:716 ../cli/src/settings.c:719
+#: ../cli/src/settings.c:720 ../cli/src/utils.c:172
+msgid "not set"
+msgstr "neagordita"
+
+#: ../cli/src/utils.c:124
+#, c-format
+msgid "field '%s' has to be alone"
+msgstr "kampo '%s' devas esti sola"
+
+#: ../cli/src/utils.c:127
+#, c-format
+msgid "invalid field '%s'"
+msgstr "nevalida kampo '%s'"
+
+#: ../cli/src/utils.c:146
+#, c-format
+msgid "Option '--terse' requires specifying '--fields'"
+msgstr "Elektindaĵo '--terse' postulas specifigon de '--fields'"
+
+#: ../cli/src/utils.c:150
+#, c-format
+msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
+msgstr ""
+"Elektindaĵo '--terse' postulas specifajn elektindajn valorojn de '--fields', "
+"ne '%s'"
+
+#: ../libnm-util/crypto.c:121
+#, c-format
+msgid "PEM key file had no end tag '%s'."
+msgstr "PEM-Ålosil-dosiero ne havis finan etikedon '%s'."
+
+#: ../libnm-util/crypto.c:131
+#, c-format
+msgid "Doesn't look like a PEM private key file."
+msgstr "Tio ĉi ne aspektas kiel privat-Ålosila PEM-dosiero."
+
+#: ../libnm-util/crypto.c:139
+#, c-format
+msgid "Not enough memory to store PEM file data."
+msgstr "Malsufiĉas memoro por stori datenojn de PEM-dosiero."
+
+#: ../libnm-util/crypto.c:155
+#, c-format
+msgid "Malformed PEM file: Proc-Type was not first tag."
+msgstr "Misforma PEM-dosiero: 'Proc-Type' ne estas la unua etikedo."
+
+#: ../libnm-util/crypto.c:163
+#, c-format
+msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
+msgstr "Misforma PEM-dosiero: nekonata Proc-Type-etikedo \"%s\"."
+
+#: ../libnm-util/crypto.c:173
+#, c-format
+msgid "Malformed PEM file: DEK-Info was not the second tag."
+msgstr "Misforma PEM-dosiero: 'DEK-Info' ne estas la dua etikedo."
+
+#: ../libnm-util/crypto.c:184
+#, c-format
+msgid "Malformed PEM file: no IV found in DEK-Info tag."
+msgstr "Misforma PEM-dosiero: mi ne trovis IV en la etikedo \"DEK-Info\"."
+
+#: ../libnm-util/crypto.c:191
+#, c-format
+msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
+msgstr ""
+"Misforma PEM-dosiero: nevalida struktturo de IV en la etikedo \"DEK-Info\"."
+
+#: ../libnm-util/crypto.c:204
+#, c-format
+msgid "Malformed PEM file: unknown private key cipher '%s'."
+msgstr "Misforma PEM-dosiero: nekonata privat-Ålosila ĉifro \"%s\"."
+
+#: ../libnm-util/crypto.c:223
+#, c-format
+msgid "Could not decode private key."
+msgstr "Ne eblis malĉifri la privatan Ålosilon."
+
+#: ../libnm-util/crypto.c:268
+#, c-format
+msgid "PEM certificate '%s' had no end tag '%s'."
+msgstr "La PEM-certigilo \"%s\" ne havas finan etikedon \"%s\"."
+
+#: ../libnm-util/crypto.c:278
+#, c-format
+msgid "Failed to decode certificate."
+msgstr "Malsuksesis malĉifri la certigilon."
+
+#: ../libnm-util/crypto.c:287
+#, c-format
+msgid "Not enough memory to store certificate data."
+msgstr "Malsufiĉas memoro por stori la datenojn de la certigilo."
+
+#: ../libnm-util/crypto.c:295
+#, c-format
+msgid "Not enough memory to store file data."
+msgstr "Malsufiĉas memoro por stori la datenojn de la dosiero."
+
+#: ../libnm-util/crypto.c:325
+#, c-format
+msgid "IV must be an even number of bytes in length."
+msgstr "IV nepre amkplesu paran nombron da bajtoj."
+
+#: ../libnm-util/crypto.c:334
+#, c-format
+msgid "Not enough memory to store the IV."
+msgstr "Malsufiĉas memoro por stori la IV-on."
+
+#: ../libnm-util/crypto.c:345
+#, c-format
+msgid "IV contains non-hexadecimal digits."
+msgstr "IV enhavas nedeksesumajn ciferojn"
+
+#: ../libnm-util/crypto.c:383 ../libnm-util/crypto_gnutls.c:148
+#: ../libnm-util/crypto_gnutls.c:266 ../libnm-util/crypto_nss.c:171
+#: ../libnm-util/crypto_nss.c:336
+#, c-format
+msgid "Private key cipher '%s' was unknown."
+msgstr "Privata Cipher-Ålosilo '%s' estas nekonata."
+
+#: ../libnm-util/crypto.c:392
+#, c-format
+msgid "Not enough memory to decrypt private key."
+msgstr "Nesufiĉa memoro por malĉifri privatan Ålosilon."
+
+#: ../libnm-util/crypto.c:512
+#, c-format
+msgid "Unable to determine private key type."
+msgstr "Ne eblas determini la tipon de la privata Ålosilo."
+
+#: ../libnm-util/crypto.c:531
+#, c-format
+msgid "Not enough memory to store decrypted private key."
+msgstr "Nesufiĉa memoro por gardi privatan Ålosilon malĉifritan."
+
+#: ../libnm-util/crypto_gnutls.c:49
+msgid "Failed to initialize the crypto engine."
+msgstr "Pretigo de la kriptografia maÅino fiaskis."
+
+#: ../libnm-util/crypto_gnutls.c:93
+#, c-format
+msgid "Failed to initialize the MD5 engine: %s / %s."
+msgstr "Pretigo de la MD5-maÅino fiaskis: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:156
+#, c-format
+msgid "Invalid IV length (must be at least %zd)."
+msgstr "Nevalida amplekso por IV (devas esti almenaÅ­ %zd)."
+
+#: ../libnm-util/crypto_gnutls.c:165 ../libnm-util/crypto_nss.c:188
+#, c-format
+msgid "Not enough memory for decrypted key buffer."
+msgstr "Nesufiĉa memoro por bufro de la malĉifrita Ålosilo."
+
+#: ../libnm-util/crypto_gnutls.c:173
+#, c-format
+msgid "Failed to initialize the decryption cipher context: %s / %s."
+msgstr "Fiaskis pravalorizi la malĉifran Cipher-kuntekston: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:182
+#, c-format
+msgid "Failed to set symmetric key for decryption: %s / %s."
+msgstr "Fiaskis agordi simetrian Ålosilon por malĉifro: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:191
+#, c-format
+msgid "Failed to set IV for decryption: %s / %s."
+msgstr "Fiaskis agordi IV por malĉifro: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:200
+#, c-format
+msgid "Failed to decrypt the private key: %s / %s."
+msgstr "Fiaskis malĉifri la privatan Ålosilon: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:210 ../libnm-util/crypto_nss.c:267
+#, c-format
+msgid "Failed to decrypt the private key: unexpected padding length."
+msgstr "Fiaskis malĉifri la privatan Ålosilon: neatendita Åtopada longo."
+
+#: ../libnm-util/crypto_gnutls.c:221 ../libnm-util/crypto_nss.c:278
+#, c-format
+msgid "Failed to decrypt the private key."
+msgstr "Fiaskis malĉifri la privatan Ålosilon."
+
+#: ../libnm-util/crypto_gnutls.c:286 ../libnm-util/crypto_nss.c:356
+#, c-format
+msgid "Could not allocate memory for encrypting."
+msgstr "Ne eblis rezervi memoron por ĉifrado."
+
+#: ../libnm-util/crypto_gnutls.c:294
+#, c-format
+msgid "Failed to initialize the encryption cipher context: %s / %s."
+msgstr "Fiaskis valorizi la ĉifradan kuntekston: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:303
+#, c-format
+msgid "Failed to set symmetric key for encryption: %s / %s."
+msgstr "Fiaskis agordi simetrian Ålosilon por ĉifrado: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:313
+#, c-format
+msgid "Failed to set IV for encryption: %s / %s."
+msgstr "Fiaskis agordi IV por ĉifrado: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:322
+#, c-format
+msgid "Failed to encrypt the data: %s / %s."
+msgstr "Ĉifrado de datumoj malsukcesis: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:362
+#, c-format
+msgid "Error initializing certificate data: %s"
+msgstr "Eraro dum pravalorizo de atestilaj datumoj: %s"
+
+#: ../libnm-util/crypto_gnutls.c:384
+#, c-format
+msgid "Couldn't decode certificate: %s"
+msgstr "Ne povis malkodi certigilon: %s"
+
+#: ../libnm-util/crypto_gnutls.c:408
+#, c-format
+msgid "Couldn't initialize PKCS#12 decoder: %s"
+msgstr "Ne povis pravalorizi PKCS#12-malkodilon: %s"
+
+#: ../libnm-util/crypto_gnutls.c:421
+#, c-format
+msgid "Couldn't decode PKCS#12 file: %s"
+msgstr "Ne eblis dekodi PKCS#12-dosieron: %s"
+
+#: ../libnm-util/crypto_gnutls.c:433
+#, c-format
+msgid "Couldn't verify PKCS#12 file: %s"
+msgstr "No povis kontroli PKCS#12-dosieron: %s"
+
+#: ../libnm-util/crypto_nss.c:56
+#, c-format
+msgid "Failed to initialize the crypto engine: %d."
+msgstr "Pravalorigo de la kriptografia maÅino fiaskis: %d."
+
+#: ../libnm-util/crypto_nss.c:111
+#, c-format
+msgid "Failed to initialize the MD5 context: %d."
+msgstr "Fiaskis pravalorizi la MD5-kuntekston: %d."
+
+#: ../libnm-util/crypto_nss.c:179
+#, c-format
+msgid "Invalid IV length (must be at least %d)."
+msgstr "Nevalida IV-longo (devas esti almenaÅ­ %d)."
+
+#: ../libnm-util/crypto_nss.c:196
+#, c-format
+msgid "Failed to initialize the decryption cipher slot."
+msgstr "Fiaskis pravalorizi la malĉifran Cipher-foldon."
+
+#: ../libnm-util/crypto_nss.c:206
+#, c-format
+msgid "Failed to set symmetric key for decryption."
+msgstr "Fiaskis agordi simetrian Ålosilon por malĉifrado."
+
+#: ../libnm-util/crypto_nss.c:216
+#, c-format
+msgid "Failed to set IV for decryption."
+msgstr "Fiaskis agordi IV por malĉifrado."
+
+#: ../libnm-util/crypto_nss.c:224
+#, c-format
+msgid "Failed to initialize the decryption context."
+msgstr "Fiaskis pravalorizi la malĉifran kuntekston."
+
+#: ../libnm-util/crypto_nss.c:237
+#, c-format
+msgid "Failed to decrypt the private key: %d."
+msgstr "Fiaskis malĉifri la privatan Ålosilon: %d."
+
+#: ../libnm-util/crypto_nss.c:245
+#, c-format
+msgid "Failed to decrypt the private key: decrypted data too large."
+msgstr "Fiaskis malĉifri la privatan Ålosilon: malĉifritaj datumoj tro longas."
+
+#: ../libnm-util/crypto_nss.c:256
+#, c-format
+msgid "Failed to finalize decryption of the private key: %d."
+msgstr "Fiaskis fini malĉifradon de la privata Ålosilo: %d."
+
+#: ../libnm-util/crypto_nss.c:364
+#, c-format
+msgid "Failed to initialize the encryption cipher slot."
+msgstr "Fiaskis pravalorizi la ĉifran Cipher-foldon."
+
+#: ../libnm-util/crypto_nss.c:372
+#, c-format
+msgid "Failed to set symmetric key for encryption."
+msgstr "Fiaskis agordi simetrian Ålosilon por ĉifrado."
+
+#: ../libnm-util/crypto_nss.c:380
+#, c-format
+msgid "Failed to set IV for encryption."
+msgstr "Fiaskis agordi IV por ĉifrado."
+
+#: ../libnm-util/crypto_nss.c:388
+#, c-format
+msgid "Failed to initialize the encryption context."
+msgstr "Fiaskis pravalorizi la ĉifradan kuntekston."
+
+#: ../libnm-util/crypto_nss.c:396
+#, c-format
+msgid "Failed to encrypt: %d."
+msgstr "Fiaskis ĉifri: %d."
+
+#: ../libnm-util/crypto_nss.c:404
+#, c-format
+msgid "Unexpected amount of data after encrypting."
+msgstr "Neatendita nombro da datumoj post ĉifrado."
+
+#: ../libnm-util/crypto_nss.c:447
+#, c-format
+msgid "Couldn't decode certificate: %d"
+msgstr "Ne povis malkodigi atestilon: %d"
+
+#: ../libnm-util/crypto_nss.c:482
+#, c-format
+msgid "Couldn't convert password to UCS2: %d"
+msgstr "Ne povis konverti pasvorton al UCS2: %d"
+
+#: ../libnm-util/crypto_nss.c:510
+#, c-format
+msgid "Couldn't initialize PKCS#12 decoder: %d"
+msgstr "Ne povis pravalorizi PKCS#12-malkodilon: %d"
+
+#: ../libnm-util/crypto_nss.c:519
+#, c-format
+msgid "Couldn't decode PKCS#12 file: %d"
+msgstr "Ne povis malkodigi PKCS#12-dosieron: %d"
+
+#: ../libnm-util/crypto_nss.c:528
+#, c-format
+msgid "Couldn't verify PKCS#12 file: %d"
+msgstr "Ne povis kontroli PKCS#12-dosieron: %d"
+
+#: ../libnm-util/crypto_nss.c:557
+msgid "Could not generate random data."
+msgstr "Ne povis generi hazardajn datumojn."
+
+#: ../libnm-util/nm-utils.c:1975
+#, c-format
+msgid "Not enough memory to make encryption key."
+msgstr "Nesufiĉa memoro por fari ĉifran Ålosilon."
+
+#: ../libnm-util/nm-utils.c:2085
+msgid "Could not allocate memory for PEM file creation."
+msgstr "Ne povis atribui memoron por kreo de PEM-dosiero."
+
+#: ../libnm-util/nm-utils.c:2097
+#, c-format
+msgid "Could not allocate memory for writing IV to PEM file."
+msgstr "Ne povis atribui memoron por konservi IV en PEM-dosieron."
+
+#: ../libnm-util/nm-utils.c:2109
+#, c-format
+msgid "Could not allocate memory for writing encrypted key to PEM file."
+msgstr ""
+"Ne povis atribui memoron por konservi ĉifritan Ålosilon en PEM-dosieron."
+
+#: ../libnm-util/nm-utils.c:2128
+#, c-format
+msgid "Could not allocate memory for PEM file data."
+msgstr "Ne povis atribui memoron por datumoj de PEM-dosiero."
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
+msgid "Connection sharing via a protected WiFi network"
+msgstr "Kundivido de konektoj per protektita WiFi-reto"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
+msgid "Connection sharing via an open WiFi network"
+msgstr "Kundivido de konektoj per malferma WiFi-reto"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
+msgid "Modify persistent system hostname"
+msgstr "Modifi permanentan sisteman gastigan nomon"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
+msgid "Modify system connections"
+msgstr "Modifi sistemajn konektojn"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
+msgid "System policy prevents modification of system settings"
+msgstr "Sistempolico preventas modifadon de sistemagordoj"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
+msgid "System policy prevents modification of the persistent system hostname"
+msgstr "Sistempolico preventas modifadon de la konstanta sistem-gastnomo"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
+msgid "System policy prevents sharing connections via a protected WiFi network"
+msgstr "Sistempolico preventas kundividon de konektoj per protektita WiFi-reto"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
+msgid "System policy prevents sharing connections via an open WiFi network"
+msgstr "Sistempolitiko preventas kundividon de konektoj per malferma WiFi-reto"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
+msgid "Allow control of network connections"
+msgstr "Permesi kontrolon de retkonektoj"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
+msgid "Allow use of user-specific connections"
+msgstr "Permesi uzon de specifaj konektoj por uzantoj"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
+msgid "Enable or disable WiFi devices"
+msgstr "EnÅalti aÅ­ elÅalti WiFi-aparatojn"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
+msgid "Enable or disable mobile broadband devices"
+msgstr "EnÅalti aÅ­ elÅalti poÅtelefonajn larÄkapacitajn aparatojn"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+msgid "Enable or disable system networking"
+msgstr "EnÅalti aÅ­ elÅalti sistemretkonektadon"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
+msgid ""
+"Put NetworkManager to sleep or wake it up (should only be used by system "
+"power management)"
+msgstr ""
+"Dormigi aÅ­ veki NetworkManager (estu uzata nur de sistema energimastumado)"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
+msgid "System policy prevents control of network connections"
+msgstr "Sistempolitiko preventas kontrolon de retkonektoj"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
+msgid "System policy prevents enabling or disabling WiFi devices"
+msgstr "Sistempolitiko preventas enÅalton aÅ­ malÅalton de WiFi-aparatoj"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
+msgid "System policy prevents enabling or disabling mobile broadband devices"
+msgstr ""
+"Sistempolitiko preventas enÅalton aÅ­ malÅalton de poÅtelefonaj larÄkapacitaj "
+"aparatoj"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
+msgid "System policy prevents enabling or disabling system networking"
+msgstr "Sistempolitiko preventas enÅalton aÅ­ malÅalton de sistema retkonektado"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
+msgid "System policy prevents putting NetworkManager to sleep or waking it up"
+msgstr "Sistempolitiko preventas dormigi aÅ­ veki NetworkManager"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
+msgid "System policy prevents use of user-specific connections"
+msgstr "Sistempolitiko preventas uzon de uzant-specifaj konektoj"
+
+#: ../src/nm-netlink-monitor.c:100 ../src/nm-netlink-monitor.c:231
+#: ../src/nm-netlink-monitor.c:653
+#, c-format
+msgid "error processing netlink message: %s"
+msgstr "eraro dum traktado de netlink-mesaÄo: %s"
+
+#: ../src/nm-netlink-monitor.c:214
+msgid "error occurred while waiting for data on socket"
+msgstr "okazis eraro dum atendado je datumoj sur kontaktoskatolo"
+
+#: ../src/nm-netlink-monitor.c:254
+#, c-format
+msgid "unable to connect to netlink for monitoring link status: %s"
+msgstr "ne eblas konekti al netlink por kontroli ligilan staton: %s"
+
+#: ../src/nm-netlink-monitor.c:265
+#, c-format
+msgid "unable to enable netlink handle credential passing: %s"
+msgstr "ne povis aktivigi la netlink-tenilan legitimaĵo-pasadon: %s"
+
+#: ../src/nm-netlink-monitor.c:291 ../src/nm-netlink-monitor.c:353
+#, c-format
+msgid "unable to allocate netlink handle for monitoring link status: %s"
+msgstr "ne povis atribui retligiltenilon por kontroli ligilstaton: %s"
+
+#: ../src/nm-netlink-monitor.c:376
+#, c-format
+msgid "unable to allocate netlink link cache for monitoring link status: %s"
+msgstr ""
+"ne povis atribui ligilan kaÅmemoron de netlink por kontroli ligilstaton: %s"
+
+#: ../src/nm-netlink-monitor.c:502
+#, c-format
+msgid "unable to join netlink group: %s"
+msgstr "ne eblas membriÄi al retligila grupo: %s"
+
+#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642
+#, c-format
+msgid "error updating link cache: %s"
+msgstr "eraro dum Äisdatigo de ligila kaÅmemoro: %s"
+
+#: ../src/main.c:502
+#, c-format
+msgid "Invalid option. Please use --help to see a list of valid options.\n"
+msgstr ""
+"Nevalida elektindaĵo. Bonvolu uzi --help por vidi liston da validaj "
+"elektindaĵoj.\n"
+
+#: ../src/main.c:573
+#, c-format
+msgid "%s. Please use --help to see a list of valid options.\n"
+msgstr "%s. Bovolu uzi --help por vidi liston da validaj elektindaĵoj.\n"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:328
+msgid "# Created by NetworkManager\n"
+msgstr "# Kreita de NetworkManager\n"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:344
+#, c-format
+msgid ""
+"# Merged from %s\n"
+"\n"
+msgstr ""
+"# Kunfandita el %s\n"
+"\n"
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:284
+msgid "no usable DHCP client could be found."
+msgstr "neniu uzebla DHCP-kliento estis trovebla"
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+msgid "'dhclient' could be found."
+msgstr "'dhclient' povis esti trovita."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:303
+msgid "'dhcpcd' could be found."
+msgstr "'dhcpcd' povis esti trovita."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:311
+#, c-format
+msgid "unsupported DHCP client '%s'"
+msgstr "nesubtenata DHCP-kliento '%s'"
+
+#: ../src/logging/nm-logging.c:146
+#, c-format
+msgid "Unknown log level '%s'"
+msgstr "Nekonata protokolnivelo '%s'"
+
+#: ../src/logging/nm-logging.c:171
+#, c-format
+msgid "Unknown log domain '%s'"
+msgstr "Nekonata protokola regiono '%s'"
+
+#: ../src/dns-manager/nm-dns-manager.c:367
+msgid "NOTE: the libc resolver may not support more than 3 nameservers."
+msgstr "NOTO: la libc-solvilo eble ne povus subteni pli ol 3 nomservilojn."
+
+#: ../src/dns-manager/nm-dns-manager.c:369
+msgid "The nameservers listed below may not be recognized."
+msgstr "La sube ligstigitaj nomserviloj eble ne estos rekonataj."
+
+#: ../src/system-settings/nm-default-wired-connection.c:157
+#, c-format
+msgid "Auto %s"
+msgstr "AÅ­to %s"
+
+#: ../system-settings/plugins/ifcfg-rh/reader.c:3408
+#: ../system-settings/plugins/ifnet/connection_parser.c:49
+msgid "System"
+msgstr "Sistemo"
diff --git a/po/es.po b/po/es.po
index 1390671209..74746f4a46 100644
--- a/po/es.po
+++ b/po/es.po
@@ -1,19 +1,22 @@
-# translation of NetworkManager.HEAD.po to Spanish
+# translation of es.po to Spanish
+# translation of NetworkManager.master.po to
+# Traducción de NetworkManager al español.
# Copyright (C) Spanish translation for NetworkManager
# This file is distributed under the same license as the NetworkManager package.
#
# Antonio Ognio <antonio@linux.org.pe>, 2004.
-# Francisco Javier F. Serrador <serrador@cvs.gnome.org>, 2004, 2005, 2006, 2010.
+# Francisco Javier F. Serrador <serrador@cvs.gnome.org>, 2004, 2005, 2006.
# Lucas Vieites Fariña <lucas@asixinformatica.com>, 2005, 2006.
+# Gladys Guerrero <gguerrer@redhat.com>, 2010.
# Jorge González <jorgegonz@svn.gnome.org>, 2007, 2008, 2010.
#
msgid ""
msgstr ""
-"Project-Id-Version: NetworkManager.HEAD\n"
+"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-04-27 15:25+0000\n"
-"PO-Revision-Date: 2010-05-01 10:55+0200\n"
+"POT-Creation-Date: 2010-09-21 03:25+0000\n"
+"PO-Revision-Date: 2010-09-25 11:36+0200\n"
"Last-Translator: Jorge González <jorgegonz@svn.gnome.org>\n"
"Language-Team: Español <gnome-es-list@gnome.org>\n"
"MIME-Version: 1.0\n"
@@ -22,7 +25,81 @@ msgstr ""
"X-Generator: KBabel 1.11.4\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ../cli/src/connections.c:86
+#: ../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
+msgid "NAME"
+msgstr "NOMBRE"
+
+#. 0
+#: ../cli/src/connections.c:61 ../cli/src/connections.c:76
+msgid "UUID"
+msgstr "UUID"
+
+#. 1
+#: ../cli/src/connections.c:62
+msgid "DEVICES"
+msgstr "DISPOSITIVOS"
+
+#. 2
+#: ../cli/src/connections.c:63 ../cli/src/connections.c:78
+msgid "SCOPE"
+msgstr "ALCANCE"
+
+#. 3
+#: ../cli/src/connections.c:64
+msgid "DEFAULT"
+msgstr "PREDETERMINADO"
+
+#. 4
+#: ../cli/src/connections.c:65
+msgid "DBUS-SERVICE"
+msgstr "SERVICIO DBUS"
+
+#. 5
+#: ../cli/src/connections.c:66
+msgid "SPEC-OBJECT"
+msgstr "OBJETO SPEC"
+
+#. 6
+#: ../cli/src/connections.c:67
+msgid "VPN"
+msgstr "VPN"
+
+#. 1
+#. 0
+#. 1
+#: ../cli/src/connections.c:77 ../cli/src/devices.c:62 ../cli/src/devices.c:90
+msgid "TYPE"
+msgstr "TIPO"
+
+#. 3
+#: ../cli/src/connections.c:79
+msgid "TIMESTAMP"
+msgstr "MARCA DE TIEMPO"
+
+#. 4
+#: ../cli/src/connections.c:80
+msgid "TIMESTAMP-REAL"
+msgstr "MARCA DE TIEMPO-REAL"
+
+#. 5
+#: ../cli/src/connections.c:81
+msgid "AUTOCONNECT"
+msgstr "AUTOCONECTAR"
+
+#. 6
+#: ../cli/src/connections.c:82
+msgid "READONLY"
+msgstr "SÓLOLECTURA"
+
+#. 7
+#: ../cli/src/connections.c:83
+msgid "DBUS-PATH"
+msgstr "RUTA-DBUS"
+
+#: ../cli/src/connections.c:159
#, c-format
msgid ""
"Usage: nmcli con { COMMAND | help }\n"
@@ -34,321 +111,535 @@ msgid ""
"<timeout>]\n"
" down id <id> | uuid <id>\n"
msgstr ""
-"Uso: nmcli con { COMANDO | help }\n"
-" COMANDO := { list | status | up | down }\n"
+"Uso: nmcli con { COMMAND | help }\n"
+" COMMAND := { list | status | up | down }\n"
"\n"
" list [id <id> | uuid <id> | system | user]\n"
" status\n"
-" up id <id> | uuid <id> [iface <interfaz>] [ap <dirección-hardware>] [--"
-"nowait] [--timeout <tiempo-de-expiración>]\n"
+" up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout "
+"<timeout>]\n"
" down id <id> | uuid <id>\n"
-#: ../cli/src/connections.c:158
-msgid "Connections"
-msgstr "Conexiones"
-
-#: ../cli/src/connections.c:158 ../cli/src/connections.c:160
-#: ../cli/src/connections.c:196 ../cli/src/connections.c:198
-#: ../cli/src/connections.c:205 ../cli/src/connections.c:207
-#: ../cli/src/devices.c:298 ../cli/src/devices.c:458 ../cli/src/devices.c:460
-msgid "Type"
-msgstr "Tipo"
-
-#: ../cli/src/connections.c:158 ../cli/src/connections.c:160
-#: ../cli/src/connections.c:196 ../cli/src/connections.c:198
-#: ../cli/src/connections.c:205 ../cli/src/connections.c:207
-#: ../cli/src/connections.c:297 ../cli/src/connections.c:299
-msgid "UUID"
-msgstr "UUID"
+#: ../cli/src/connections.c:199 ../cli/src/connections.c:540
+#, c-format
+msgid "Error: 'con list': %s"
+msgstr "Error: «con list»: %s"
+
+#: ../cli/src/connections.c:201 ../cli/src/connections.c:542
+#, c-format
+msgid "Error: 'con list': %s; allowed fields: %s"
+msgstr "Error: «con list»: %s; campos permitidos: %s"
+
+#: ../cli/src/connections.c:209
+msgid "Connection details"
+msgstr "Detalles de conexiones"
+
+#: ../cli/src/connections.c:384 ../cli/src/connections.c:605
+msgid "system"
+msgstr "sistema"
+
+#: ../cli/src/connections.c:384 ../cli/src/connections.c:605
+msgid "user"
+msgstr "usuario"
+
+#: ../cli/src/connections.c:386
+msgid "never"
+msgstr "nunca"
+
+#. "CAPABILITIES"
+#. Print header
+#. "WIFI-PROPERTIES"
+#: ../cli/src/connections.c:387 ../cli/src/connections.c:388
+#: ../cli/src/connections.c:606 ../cli/src/connections.c:609
+#: ../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
+msgid "yes"
+msgstr "sí"
-#: ../cli/src/connections.c:158 ../cli/src/connections.c:160
-#: ../cli/src/connections.c:196 ../cli/src/connections.c:198
-#: ../cli/src/connections.c:205 ../cli/src/connections.c:207
-#: ../cli/src/connections.c:297 ../cli/src/connections.c:299
-msgid "Name"
-msgstr "Nombre"
+#: ../cli/src/connections.c:387 ../cli/src/connections.c:388
+#: ../cli/src/connections.c:606 ../cli/src/connections.c:609
+#: ../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
+msgid "no"
+msgstr "no"
-#: ../cli/src/connections.c:163
-#, c-format
-msgid "System connections:\n"
-msgstr "Conexiones del sistema:\n"
+#: ../cli/src/connections.c:461 ../cli/src/connections.c:504
+msgid "System connections"
+msgstr "Conexiones de sistema"
-#: ../cli/src/connections.c:167
-#, c-format
-msgid "User connections:\n"
-msgstr "Conexiones del usuario:\n"
+#: ../cli/src/connections.c:466 ../cli/src/connections.c:517
+msgid "User connections"
+msgstr "Conexiones de usuario"
-#: ../cli/src/connections.c:178 ../cli/src/connections.c:967
-#: ../cli/src/connections.c:983 ../cli/src/connections.c:992
-#: ../cli/src/connections.c:1003 ../cli/src/connections.c:1085
-#: ../cli/src/devices.c:604 ../cli/src/devices.c:614 ../cli/src/devices.c:699
-#: ../cli/src/devices.c:785 ../cli/src/devices.c:792
+#: ../cli/src/connections.c:478 ../cli/src/connections.c:1338
+#: ../cli/src/connections.c:1354 ../cli/src/connections.c:1363
+#: ../cli/src/connections.c:1374 ../cli/src/connections.c:1459
+#: ../cli/src/devices.c:962 ../cli/src/devices.c:972 ../cli/src/devices.c:1074
+#: ../cli/src/devices.c:1081
#, c-format
msgid "Error: %s argument is missing."
msgstr "Error: falta el argumento %s."
-#: ../cli/src/connections.c:189
+#: ../cli/src/connections.c:491
#, c-format
msgid "Error: %s - no such connection."
-msgstr "Error: %s; no existe tal conexión."
-
-#: ../cli/src/connections.c:196
-msgid "System-wide connections"
-msgstr "Conexiones amplias del sistema"
-
-#: ../cli/src/connections.c:205
-msgid "User connections"
-msgstr "Conexiones del usuario"
+msgstr "Error: %s - no hay tal conexión."
-#: ../cli/src/connections.c:212 ../cli/src/connections.c:1016
-#: ../cli/src/connections.c:1103 ../cli/src/devices.c:446
-#: ../cli/src/devices.c:494 ../cli/src/devices.c:628 ../cli/src/devices.c:706
-#: ../cli/src/devices.c:798
+#: ../cli/src/connections.c:523 ../cli/src/connections.c:1387
+#: ../cli/src/connections.c:1477 ../cli/src/devices.c:785
+#: ../cli/src/devices.c:852 ../cli/src/devices.c:986 ../cli/src/devices.c:1087
#, c-format
msgid "Unknown parameter: %s\n"
msgstr "Parámetro desconocido: %s\n"
-#: ../cli/src/connections.c:221
+#: ../cli/src/connections.c:532
#, c-format
msgid "Error: no valid parameter specified."
msgstr "Error: no se especificó un parámetro válido."
-#. FIXME: Fix the output
-#: ../cli/src/connections.c:268 ../cli/src/devices.c:302
-#: ../cli/src/devices.c:321 ../cli/src/devices.c:353 ../cli/src/devices.c:355
-#: ../cli/src/devices.c:357 ../cli/src/devices.c:359 ../cli/src/devices.c:361
-msgid "yes"
-msgstr "sí"
-
-#: ../cli/src/connections.c:268 ../cli/src/devices.c:304
-msgid "no"
-msgstr "no"
-
-#: ../cli/src/connections.c:297
-msgid "Active connections"
-msgstr "Activar conexiones"
+#: ../cli/src/connections.c:547 ../cli/src/connections.c:1580
+#: ../cli/src/devices.c:1293 ../cli/src/network-manager.c:359
+#, c-format
+msgid "Error: %s."
+msgstr "Error: %s."
-#: ../cli/src/connections.c:297 ../cli/src/connections.c:299
-#: ../cli/src/devices.c:302 ../cli/src/devices.c:304
-msgid "Default"
-msgstr "Predeterminada"
+#: ../cli/src/connections.c:653
+#, c-format
+msgid "Error: 'con status': %s"
+msgstr "Error: «con status»: %s"
-#: ../cli/src/connections.c:297 ../cli/src/connections.c:299
-msgid "Service"
-msgstr "Servicio"
+#: ../cli/src/connections.c:655
+#, c-format
+msgid "Error: 'con status': %s; allowed fields: %s"
+msgstr "Error: «con status»: %s; campos permitidos: %s"
-#: ../cli/src/connections.c:297 ../cli/src/connections.c:299
-msgid "Devices"
-msgstr "Dispositivos"
+#: ../cli/src/connections.c:662
+msgid "Active connections"
+msgstr "Conexiones activas"
-#: ../cli/src/connections.c:659
+#: ../cli/src/connections.c:1030
#, c-format
msgid "no active connection on device '%s'"
-msgstr "no existe una conexión activa en el dispositivo «%s»"
+msgstr "conexión no activa en el dispositivo «%s»"
-#: ../cli/src/connections.c:667
+#: ../cli/src/connections.c:1038
#, c-format
msgid "no active connection or device"
-msgstr "no existe una conexión o dispositivo activo"
+msgstr "conexión o dispositivo no activo"
+
+#: ../cli/src/connections.c:1088
+#, c-format
+msgid "device '%s' not compatible with connection '%s'"
+msgstr "dispositivo «%s» incompatible con conexión «%s»"
-#: ../cli/src/connections.c:730
+#: ../cli/src/connections.c:1090
+#, c-format
+msgid "no device found for connection '%s'"
+msgstr "no se encontró dispositivo para conexión «%s»"
+
+#: ../cli/src/connections.c:1101
msgid "activating"
msgstr "activando"
-#: ../cli/src/connections.c:732
+#: ../cli/src/connections.c:1103
msgid "activated"
msgstr "activada"
-#: ../cli/src/connections.c:735 ../cli/src/connections.c:758
-#: ../cli/src/connections.c:791 ../cli/src/devices.c:111
-#: ../cli/src/network-manager.c:76 ../cli/src/network-manager.c:98
+#: ../cli/src/connections.c:1106 ../cli/src/connections.c:1129
+#: ../cli/src/connections.c:1162 ../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
msgid "unknown"
msgstr "desconocido"
-#: ../cli/src/connections.c:744
+#: ../cli/src/connections.c:1115
msgid "VPN connecting (prepare)"
-msgstr "Conectando con la VPN (preparación)"
+msgstr "Conectando VPN (preparar)"
-#: ../cli/src/connections.c:746
+#: ../cli/src/connections.c:1117
msgid "VPN connecting (need authentication)"
-msgstr "Conectando con la VPN (necesita autorización)"
+msgstr "Conectando VPN (necesita autenticación)"
-#: ../cli/src/connections.c:748
+#: ../cli/src/connections.c:1119
msgid "VPN connecting"
-msgstr "Conectando con la VPN"
+msgstr "Conectando VPN"
-#: ../cli/src/connections.c:750
+#: ../cli/src/connections.c:1121
msgid "VPN connecting (getting IP configuration)"
-msgstr "Conectando con la VPN (obteniendo configuración IP)"
+msgstr "Conectando VPN (obteniendo configuración IP)"
-#: ../cli/src/connections.c:752
+#: ../cli/src/connections.c:1123
msgid "VPN connected"
msgstr "VPN conectada"
-#: ../cli/src/connections.c:754
+#: ../cli/src/connections.c:1125
msgid "VPN connection failed"
-msgstr "Falló la conexión VPN"
+msgstr "FalloÌ la conexioÌn VPN"
-#: ../cli/src/connections.c:756
+#: ../cli/src/connections.c:1127
msgid "VPN disconnected"
msgstr "VPN desconectada"
-#: ../cli/src/connections.c:767
+#: ../cli/src/connections.c:1138
msgid "unknown reason"
msgstr "razón desconocida"
-#: ../cli/src/connections.c:769
+#: ../cli/src/connections.c:1140
msgid "none"
msgstr "ninguna"
-#: ../cli/src/connections.c:771
+#: ../cli/src/connections.c:1142
msgid "the user was disconnected"
-msgstr "se desconectó al usuario"
+msgstr "el usuario estaba desconectado"
-#: ../cli/src/connections.c:773
+#: ../cli/src/connections.c:1144
msgid "the base network connection was interrupted"
-msgstr "se interrumpió la conexión base de red"
+msgstr "se interrumpió la conexión de red de base"
-#: ../cli/src/connections.c:775
+#: ../cli/src/connections.c:1146
msgid "the VPN service stopped unexpectedly"
-msgstr "el servicio VPN finalizó inesperadamente"
+msgstr "el servicio VPN se detuvo inesperadamente"
-#: ../cli/src/connections.c:777
+#: ../cli/src/connections.c:1148
msgid "the VPN service returned invalid configuration"
-msgstr "el servicio VPN devolvió una configuración no válida"
+msgstr "el servicio VPN retornó una configuración no válida"
-#: ../cli/src/connections.c:779
+#: ../cli/src/connections.c:1150
msgid "the connection attempt timed out"
-msgstr "expiró el intento de conexión"
+msgstr "se agotaron los intentos de conexión"
-#: ../cli/src/connections.c:781
+#: ../cli/src/connections.c:1152
msgid "the VPN service did not start in time"
-msgstr "el servicio VPN no se inició a tiempo"
+msgstr "el servicio VPN no inició a tiempo"
-#: ../cli/src/connections.c:783
+#: ../cli/src/connections.c:1154
msgid "the VPN service failed to start"
-msgstr "el servicio VPN falló al iniciar"
+msgstr "el servicio VPN falló en el inicio"
-#: ../cli/src/connections.c:785
+#: ../cli/src/connections.c:1156
msgid "no valid VPN secrets"
-msgstr "secretos VPN no válidos"
+msgstr "secretos VPN inválidos"
-#: ../cli/src/connections.c:787
+#: ../cli/src/connections.c:1158
msgid "invalid VPN secrets"
-msgstr "secretos VPN inválidos"
+msgstr "secretos VPN válidos"
-#: ../cli/src/connections.c:789
+#: ../cli/src/connections.c:1160
msgid "the connection was removed"
-msgstr "se rechazó la conexión"
+msgstr "se eliminó la conexión"
-#: ../cli/src/connections.c:803
+#: ../cli/src/connections.c:1174
#, c-format
msgid "state: %s\n"
msgstr "estado: %s\n"
-#: ../cli/src/connections.c:806 ../cli/src/connections.c:832
+#: ../cli/src/connections.c:1177 ../cli/src/connections.c:1203
#, c-format
msgid "Connection activated\n"
msgstr "Conexión activada\n"
-#: ../cli/src/connections.c:809
+#: ../cli/src/connections.c:1180
#, c-format
msgid "Error: Connection activation failed."
msgstr "Error: falló la activación de la conexión."
-#: ../cli/src/connections.c:828
+#: ../cli/src/connections.c:1199
#, c-format
msgid "state: %s (%d)\n"
msgstr "estado: %s (%d)\n"
-#: ../cli/src/connections.c:838
+#: ../cli/src/connections.c:1209
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "Error: falló la activación de la conexión: %s."
-#: ../cli/src/connections.c:855 ../cli/src/devices.c:551
+#: ../cli/src/connections.c:1226 ../cli/src/devices.c:909
#, c-format
msgid "Error: Timeout %d sec expired."
-msgstr "Error: Expiró el tiempo de conexión de %d segs."
+msgstr "Error: expiró la pausa de %d segundos."
-#: ../cli/src/connections.c:898
+#: ../cli/src/connections.c:1269
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "Error: falló la activación de la conexión: %s"
-#: ../cli/src/connections.c:912
+#: ../cli/src/connections.c:1283
#, c-format
msgid "Error: Obtaining active connection for '%s' failed."
-msgstr "Error: falló la obtención de una conexión activa para «%s»."
+msgstr "Error: falló la obtención de conexión activa para «%s»."
-#: ../cli/src/connections.c:921
+#: ../cli/src/connections.c:1292
#, c-format
msgid "Active connection state: %s\n"
msgstr "Estado de la conexión activa: %s\n"
-#: ../cli/src/connections.c:922
+#: ../cli/src/connections.c:1293
#, c-format
msgid "Active connection path: %s\n"
msgstr "Ruta de la conexión activa: %s\n"
-#: ../cli/src/connections.c:976 ../cli/src/connections.c:1094
+#: ../cli/src/connections.c:1347 ../cli/src/connections.c:1468
#, c-format
msgid "Error: Unknown connection: %s."
msgstr "Error: conexión desconocida: %s."
-#: ../cli/src/connections.c:1011 ../cli/src/devices.c:622
+#: ../cli/src/connections.c:1382 ../cli/src/devices.c:980
#, c-format
msgid "Error: timeout value '%s' is not valid."
-msgstr "Error: el valor «%s» no es válido para el tiempo de expiración."
+msgstr "Error: valor de pausa «%s» inválido."
-#: ../cli/src/connections.c:1024 ../cli/src/connections.c:1111
+#: ../cli/src/connections.c:1395 ../cli/src/connections.c:1485
#, c-format
msgid "Error: id or uuid has to be specified."
-msgstr "Error: se debe especificar el «id» o «uuid»."
+msgstr "Error: se debe especificar un id o uuid."
-#: ../cli/src/connections.c:1044
+#: ../cli/src/connections.c:1415
#, c-format
msgid "Error: No suitable device found: %s."
msgstr "Error: no se encontró un dispositivo apropiado: %s."
-#: ../cli/src/connections.c:1046
+#: ../cli/src/connections.c:1417
#, c-format
msgid "Error: No suitable device found."
msgstr "Error: no se encontró un dispositivo apropiado."
-#: ../cli/src/connections.c:1138
+#: ../cli/src/connections.c:1512
#, c-format
msgid "Warning: Connection not active\n"
-msgstr "Aviso: la conexión no está activa\n"
+msgstr "Advertencia: conexión inactiva\n"
-#: ../cli/src/connections.c:1189
+#: ../cli/src/connections.c:1569
#, c-format
msgid "Error: 'con' command '%s' is not valid."
-msgstr "Error: el comando «con» «%s» no es válido."
+msgstr "Error: comando «con» «%s» no es válido."
-#: ../cli/src/connections.c:1216
+#: ../cli/src/connections.c:1605
#, c-format
msgid "Error: could not connect to D-Bus."
msgstr "Error: no se pudo conectar con D-Bus."
-#: ../cli/src/connections.c:1223
+#: ../cli/src/connections.c:1612
#, c-format
msgid "Error: Could not get system settings."
-msgstr "Error: no se pudo obtener la configuración del sistema."
+msgstr "Error: no se pudo obtener configuración de sistema."
-#: ../cli/src/connections.c:1231
+#: ../cli/src/connections.c:1620
#, c-format
msgid "Error: Could not get user settings."
-msgstr "Error: no se pudo obtener la configuración del usuario."
+msgstr "Error: No se pudo obtener configuración de usuario."
-#: ../cli/src/connections.c:1241
+#: ../cli/src/connections.c:1630
#, c-format
msgid "Error: Can't obtain connections: settings services are not running."
msgstr ""
-"Error: no se pueden obtener las conexiones: los servicios de configuración "
-"no se están ejecutando."
-
+"Error: no se pudieron obtener conexiones: servicios de configuración no se "
+"están ejecutando."
+
+#. 0
+#. 9
+#: ../cli/src/devices.c:61 ../cli/src/devices.c:89 ../cli/src/devices.c:184
+msgid "DEVICE"
+msgstr "DISPOSITIVO"
+
+#. 1
+#. 4
+#. 0
+#: ../cli/src/devices.c:63 ../cli/src/devices.c:93
+#: ../cli/src/network-manager.c:36
+msgid "STATE"
+msgstr "ESTADO"
+
+#: ../cli/src/devices.c:72
+msgid "GENERAL"
+msgstr "GENERAL"
+
+#. 0
#: ../cli/src/devices.c:73
+msgid "CAPABILITIES"
+msgstr "FUNCIONALIDADES"
+
+#. 1
+#: ../cli/src/devices.c:74
+msgid "WIFI-PROPERTIES"
+msgstr "PROPIEDADES-WIFI"
+
+#. 2
+#: ../cli/src/devices.c:75
+msgid "AP"
+msgstr "AP"
+
+#. 3
+#: ../cli/src/devices.c:76
+msgid "WIRED-PROPERTIES"
+msgstr "PROPIEDADES ALÃMBRICAS"
+
+#. 4
+#: ../cli/src/devices.c:77
+msgid "IP4-SETTINGS"
+msgstr "CONFIGURACIONES IP4"
+
+#. 5
+#: ../cli/src/devices.c:78
+msgid "IP4-DNS"
+msgstr "DNS IP4"
+
+#. 6
+#: ../cli/src/devices.c:79
+msgid "IP6-SETTINGS"
+msgstr "CONFIGURACIONES IP6"
+
+#. 7
+#: ../cli/src/devices.c:80
+msgid "IP6-DNS"
+msgstr "DNS IP6"
+
+#. 2
+#: ../cli/src/devices.c:91
+msgid "DRIVER"
+msgstr "CONTROLADOR"
+
+#. 3
+#: ../cli/src/devices.c:92
+msgid "HWADDR"
+msgstr "HWADDR"
+
+#. 0
+#: ../cli/src/devices.c:102
+msgid "CARRIER-DETECT"
+msgstr "DETECTAR-PORTADOR"
+
+#. 1
+#: ../cli/src/devices.c:103
+msgid "SPEED"
+msgstr "VELOCIDAD"
+
+#. 0
+#: ../cli/src/devices.c:112
+msgid "CARRIER"
+msgstr "PORTADOR"
+
+#. 0
+#: ../cli/src/devices.c:122
+msgid "WEP"
+msgstr "WEP"
+
+#. 1
+#: ../cli/src/devices.c:123
+msgid "WPA"
+msgstr "WPA"
+
+#. 2
+#: ../cli/src/devices.c:124
+msgid "WPA2"
+msgstr "WPA2"
+
+#. 3
+#: ../cli/src/devices.c:125
+msgid "TKIP"
+msgstr "TKIP"
+
+#. 4
+#: ../cli/src/devices.c:126
+msgid "CCMP"
+msgstr "CCMP"
+
+#. 0
+#: ../cli/src/devices.c:135 ../cli/src/devices.c:146
+msgid "ADDRESS"
+msgstr "DIRECCIÓN"
+
+#. 1
+#: ../cli/src/devices.c:136 ../cli/src/devices.c:147
+msgid "PREFIX"
+msgstr "PREFIJO"
+
+#. 2
+#: ../cli/src/devices.c:137 ../cli/src/devices.c:148
+msgid "GATEWAY"
+msgstr "PUERTA DE ENLACE"
+
+#. 0
+#: ../cli/src/devices.c:157 ../cli/src/devices.c:166
+msgid "DNS"
+msgstr "DNS"
+
+#. 0
+#: ../cli/src/devices.c:175
+msgid "SSID"
+msgstr "SSID"
+
+#. 1
+#: ../cli/src/devices.c:176
+msgid "BSSID"
+msgstr "BSSID"
+
+#. 2
+#: ../cli/src/devices.c:177
+msgid "MODE"
+msgstr "MODO"
+
+#. 3
+#: ../cli/src/devices.c:178
+msgid "FREQ"
+msgstr "FREC"
+
+#. 4
+#: ../cli/src/devices.c:179
+msgid "RATE"
+msgstr "TASA"
+
+#. 5
+#: ../cli/src/devices.c:180
+msgid "SIGNAL"
+msgstr "SEÑAL"
+
+#. 6
+#: ../cli/src/devices.c:181
+msgid "SECURITY"
+msgstr "SEGURIDAD"
+
+#. 7
+#: ../cli/src/devices.c:182
+msgid "WPA-FLAGS"
+msgstr "INDICADORES-WPA"
+
+#. 8
+#: ../cli/src/devices.c:183
+msgid "RSN-FLAGS"
+msgstr "INDICADORES-RSN"
+
+#. 10
+#: ../cli/src/devices.c:185
+msgid "ACTIVE"
+msgstr "ACTIVO"
+
+#: ../cli/src/devices.c:208
#, c-format
msgid ""
"Usage: nmcli dev { COMMAND | help }\n"
@@ -358,467 +649,399 @@ msgid ""
" status\n"
" list [iface <iface>]\n"
" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] | apinfo iface <iface> hwaddr <hwaddr>]\n"
+" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
"\n"
msgstr ""
-"Uso: nmcli dev { COMANDO | help }\n"
+"Uso: nmcli dev { COMMAND | help }\n"
"\n"
-" COMANDO := { status | list | disconnect | wifi }\n"
+" COMMAND := { status | list | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <interfaz>]\n"
-" disconnect iface <interfaz> [--nowait] [--timeout <tiempo-de-expiración>]\n"
-" wifi [list [iface <interfaz>] | apinfo iface <interfaz> hwaddr <dirección-"
-"hardware>]\n"
+" list [iface <iface>]\n"
+" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
+" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
"\n"
-#: ../cli/src/devices.c:93
+#: ../cli/src/devices.c:228
msgid "unmanaged"
-msgstr "sin gestionar"
+msgstr "sin gestión"
-#: ../cli/src/devices.c:95
+#: ../cli/src/devices.c:230
msgid "unavailable"
msgstr "no disponible"
-#: ../cli/src/devices.c:97 ../cli/src/network-manager.c:73
+#: ../cli/src/devices.c:232 ../cli/src/network-manager.c:91
msgid "disconnected"
msgstr "desconectado"
-#: ../cli/src/devices.c:99
+#: ../cli/src/devices.c:234
msgid "connecting (prepare)"
-msgstr "conectando (preparación)"
+msgstr "conectando (preparar)"
-#: ../cli/src/devices.c:101
+#: ../cli/src/devices.c:236
msgid "connecting (configuring)"
-msgstr "conectando (configuración)"
+msgstr "conectando (configurando)"
-#: ../cli/src/devices.c:103
+#: ../cli/src/devices.c:238
msgid "connecting (need authentication)"
-msgstr "conectando (necesita autorización)"
+msgstr "conectando (necesita autenticación)"
-#: ../cli/src/devices.c:105
+#: ../cli/src/devices.c:240
msgid "connecting (getting IP configuration)"
msgstr "conectando (obteniendo configuración IP)"
-#: ../cli/src/devices.c:107 ../cli/src/network-manager.c:71
+#: ../cli/src/devices.c:242 ../cli/src/network-manager.c:89
msgid "connected"
msgstr "conectado"
-#: ../cli/src/devices.c:109
+#: ../cli/src/devices.c:244
msgid "connection failed"
-msgstr "falló la conexión"
+msgstr "conexión falló"
-#: ../cli/src/devices.c:132 ../cli/src/devices.c:876
+#: ../cli/src/devices.c:267 ../cli/src/devices.c:424
msgid "Unknown"
-msgstr "Desconocido"
+msgstr "desconocido"
-#. print them
-#: ../cli/src/devices.c:164 ../cli/src/devices.c:266 ../cli/src/devices.c:861
-#: ../cli/src/devices.c:879
+#: ../cli/src/devices.c:299
msgid "(none)"
-msgstr "(nada)"
+msgstr "(ninguno)"
-#: ../cli/src/devices.c:209
+#: ../cli/src/devices.c:324
#, c-format
msgid "%s: error converting IP4 address 0x%X"
-msgstr "%s: error al convertir la dirección IP4 en 0x%X"
+msgstr "%s: error convirtiendo dirección IP4 0x%X"
-#: ../cli/src/devices.c:238
+#: ../cli/src/devices.c:393
#, c-format
-msgid "%s, %s, Freq %d MHz, Rate %d Mb/s, Strength %d"
-msgstr "%s, %s, frecuencia %d MHz, tasa %d Mb/s, intensidad %d"
-
-#: ../cli/src/devices.c:239
-msgid "Ad-Hoc"
-msgstr "Ad-Hoc"
-
-#: ../cli/src/devices.c:248
-msgid ", Encrypted: "
-msgstr ", cifrado: "
-
-#: ../cli/src/devices.c:253
-msgid " WEP"
-msgstr " WEP"
-
-#: ../cli/src/devices.c:255
-msgid " WPA"
-msgstr " WPA"
-
-#: ../cli/src/devices.c:257
-msgid " WPA2"
-msgstr " WPA2"
+msgid "%u MHz"
+msgstr "%u MHz"
-#: ../cli/src/devices.c:260
-msgid " Enterprise"
-msgstr " Enterprise"
+#: ../cli/src/devices.c:394
+#, c-format
+msgid "%u MB/s"
+msgstr "%u MB/s"
-#: ../cli/src/devices.c:294 ../cli/src/devices.c:458 ../cli/src/devices.c:460
-msgid "Device"
-msgstr "Dispositivo"
+#: ../cli/src/devices.c:403
+msgid "Encrypted: "
+msgstr "Encriptado: "
-#: ../cli/src/devices.c:299
-msgid "Driver"
-msgstr "Controlador"
+#: ../cli/src/devices.c:408
+msgid "WEP "
+msgstr "WEP"
-#: ../cli/src/devices.c:299 ../cli/src/devices.c:567
-msgid "(unknown)"
-msgstr "(desconocido)"
+#: ../cli/src/devices.c:410
+msgid "WPA "
+msgstr "WPA"
-#: ../cli/src/devices.c:300 ../cli/src/devices.c:458 ../cli/src/devices.c:460
-msgid "State"
-msgstr "Estado"
+#: ../cli/src/devices.c:412
+msgid "WPA2 "
+msgstr "WPA2"
-#: ../cli/src/devices.c:313
-msgid "HW Address"
-msgstr "Dirección hardware"
+#: ../cli/src/devices.c:415
+msgid "Enterprise "
+msgstr "Empresa"
-#: ../cli/src/devices.c:319
-#, c-format
-msgid ""
-"\n"
-" Capabilities:\n"
-msgstr ""
-"\n"
-" Capacidades:\n"
+#: ../cli/src/devices.c:424
+msgid "Ad-Hoc"
+msgstr "Ad-Hoc"
-#: ../cli/src/devices.c:321
-msgid "Carrier Detect"
-msgstr "Detector de portadora"
+#: ../cli/src/devices.c:424
+msgid "Infrastructure"
+msgstr "Infraestructura"
-#: ../cli/src/devices.c:336
+#: ../cli/src/devices.c:486
#, c-format
-msgid "%u Mb/s"
-msgstr "%u Mb/s"
+msgid "Error: 'dev list': %s"
+msgstr "Error: «dev list»: %s"
-#: ../cli/src/devices.c:337
-msgid "Speed"
-msgstr "Velocidad"
-
-#: ../cli/src/devices.c:348
+#: ../cli/src/devices.c:488
#, c-format
-msgid ""
-"\n"
-" Wireless Properties\n"
-msgstr ""
-"\n"
-" Propiedades de la conexión inalámbrica\n"
-
-#: ../cli/src/devices.c:353
-msgid "WEP Encryption"
-msgstr "Cifrado WEP"
-
-#: ../cli/src/devices.c:355
-msgid "WPA Encryption"
-msgstr "Cifrado WPA"
-
-#: ../cli/src/devices.c:357
-msgid "WPA2 Encryption"
-msgstr "Cifrado WPA2"
-
-#: ../cli/src/devices.c:359
-msgid "TKIP cipher"
-msgstr "Cifrado TKIP"
+msgid "Error: 'dev list': %s; allowed fields: %s"
+msgstr "Error: «dev list»: %s; campos permitidos: %s"
-#: ../cli/src/devices.c:361
-msgid "CCMP cipher"
-msgstr "Cifrado CCMP"
+#: ../cli/src/devices.c:497
+msgid "Device details"
+msgstr "Detalles de los dispositivos"
-#: ../cli/src/devices.c:368
-#, c-format
-msgid ""
-"\n"
-" Wireless Access Points %s\n"
-msgstr ""
-"\n"
-" Puntos de acceso inalámbricos %s\n"
+#: ../cli/src/devices.c:527 ../cli/src/devices.c:925
+msgid "(unknown)"
+msgstr "(desconocido)"
-#: ../cli/src/devices.c:368
-msgid "(* = current AP)"
-msgstr "(* = PA actual)"
+#: ../cli/src/devices.c:528
+msgid "unknown)"
+msgstr "desconocido"
-#: ../cli/src/devices.c:374
+#: ../cli/src/devices.c:554
#, c-format
-msgid ""
-"\n"
-" Wired Properties\n"
-msgstr ""
-"\n"
-" Propiedades de la conexión cableada\n"
-
-#: ../cli/src/devices.c:377 ../cli/src/devices.c:379
-msgid "Carrier"
-msgstr "Portadora"
+msgid "%u Mb/s"
+msgstr "%u Mb/s"
-#: ../cli/src/devices.c:377
+#. Print header
+#. "WIRED-PROPERTIES"
+#: ../cli/src/devices.c:627
msgid "on"
msgstr "encendido"
-#: ../cli/src/devices.c:379
+#: ../cli/src/devices.c:627
msgid "off"
msgstr "apagado"
-#: ../cli/src/devices.c:387
+#: ../cli/src/devices.c:808
#, c-format
-msgid ""
-"\n"
-" IPv4 Settings:\n"
-msgstr ""
-"\n"
-" Ajustes de IPv4:\n"
-
-#: ../cli/src/devices.c:395
-msgid "Address"
-msgstr "Dirección"
-
-#: ../cli/src/devices.c:401
-msgid "Prefix"
-msgstr "Prefijo"
-
-#: ../cli/src/devices.c:405
-msgid "Gateway"
-msgstr "Pasarela"
+msgid "Error: 'dev status': %s"
+msgstr "Error: «dev status»: %s"
-#: ../cli/src/devices.c:416
-msgid "DNS"
-msgstr "DNS"
+#: ../cli/src/devices.c:810
+#, c-format
+msgid "Error: 'dev status': %s; allowed fields: %s"
+msgstr "Error: «dev status»: %s; campos permitidos: %s"
-#: ../cli/src/devices.c:458
+#: ../cli/src/devices.c:817
msgid "Status of devices"
msgstr "Estado de los dispositivos"
-#: ../cli/src/devices.c:487
+#: ../cli/src/devices.c:845
#, c-format
msgid "Error: '%s' argument is missing."
msgstr "Error: falta el argumento «%s»."
-#: ../cli/src/devices.c:516 ../cli/src/devices.c:655 ../cli/src/devices.c:729
+#: ../cli/src/devices.c:874 ../cli/src/devices.c:1013
+#: ../cli/src/devices.c:1136
#, c-format
msgid "Error: Device '%s' not found."
-msgstr "Error: no se encontró el dispositivo «%s»"
+msgstr "Error: no se encontró el dispositivo «%s»."
-#: ../cli/src/devices.c:539
+#: ../cli/src/devices.c:897
#, c-format
msgid "Success: Device '%s' successfully disconnected."
-msgstr "Éxito: se desconectó correctamente el dispositivo «%s»."
+msgstr "Éxito: dispositivo «%s» desconectado correctamente."
-#: ../cli/src/devices.c:564
+#: ../cli/src/devices.c:922
#, 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:572
+#: ../cli/src/devices.c:930
#, c-format
msgid "Device state: %d (%s)\n"
msgstr "Estado del dispositivo: %d (%s)\n"
-#: ../cli/src/devices.c:636
+#: ../cli/src/devices.c:994
#, c-format
msgid "Error: iface has to be specified."
-msgstr "Error: se debe especificar la interfaz."
-
-#: ../cli/src/devices.c:736 ../cli/src/devices.c:746
-msgid "WiFi scan list"
-msgstr "Lista de la inspección inalámbrica"
+msgstr "Error: se debe especificar iface."
-#: ../cli/src/devices.c:740
+#: ../cli/src/devices.c:1112
#, c-format
-msgid "Error: Device '%s' is not a WiFi device."
-msgstr "Error: el dispositivo «%s» no es un dispositivo inalámbrico."
-
-#: ../cli/src/devices.c:754
-msgid "Device:"
-msgstr "Dispositivo:"
+msgid "Error: 'dev wifi': %s"
+msgstr "Error: «dev wifi» «%s»"
-#: ../cli/src/devices.c:806
+#: ../cli/src/devices.c:1114
#, c-format
-msgid "Error: hwaddr has to be specified."
-msgstr "Error: se debe especificar la dirección hardware."
+msgid "Error: 'dev wifi': %s; allowed fields: %s"
+msgstr "Error: «dev wifi»: %s; campos permitidos: %s"
+
+#: ../cli/src/devices.c:1121
+msgid "WiFi scan list"
+msgstr "lista de análisis WiFi"
-#: ../cli/src/devices.c:844
+#: ../cli/src/devices.c:1156 ../cli/src/devices.c:1210
#, c-format
msgid "Error: Access point with hwaddr '%s' not found."
-msgstr "Error: no se encontró el punto de acceso con dirección hardware «%s»."
+msgstr "Error: no se encontró el punto de acceso con hwaddr «%s»."
-#: ../cli/src/devices.c:862
+#: ../cli/src/devices.c:1173
#, c-format
-msgid "%u MHz"
-msgstr "%u MHz"
+msgid "Error: Device '%s' is not a WiFi device."
+msgstr "Error: el dispositivo «%s» no es un dispositivo WiFi."
-#: ../cli/src/devices.c:863
+#: ../cli/src/devices.c:1237
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
-
-#: ../cli/src/devices.c:869 ../cli/src/devices.c:871
-msgid "AP parameters"
-msgstr "Parámetros del PA"
-
-#: ../cli/src/devices.c:873
-msgid "SSID:"
-msgstr "SSID:"
-
-#: ../cli/src/devices.c:874
-msgid "BSSID:"
-msgstr "BSSID:"
-
-#: ../cli/src/devices.c:875
-msgid "Frequency:"
-msgstr "Frecuencia:"
-
-#: ../cli/src/devices.c:876
-msgid "Mode:"
-msgstr "Modo:"
-
-#: ../cli/src/devices.c:876
-msgid "Ad-hoc"
-msgstr "Ad-hoc"
+msgid "Error: 'dev wifi' command '%s' is not valid."
+msgstr "Error: comando «dev wifi» «%s» inválido."
-#: ../cli/src/devices.c:876
-msgid "Infrastructure"
-msgstr "Infraestructura"
+#: ../cli/src/devices.c:1284
+#, c-format
+msgid "Error: 'dev' command '%s' is not valid."
+msgstr "Error: comando «dev» «%s» no válido."
-#: ../cli/src/devices.c:877
-msgid "Maximal bitrate:"
-msgstr "Tasa de bits máxima:"
+#: ../cli/src/network-manager.c:35
+msgid "RUNNING"
+msgstr "EJECUTANDO"
-#: ../cli/src/devices.c:878
-msgid "Strength:"
-msgstr "Intensidad:"
+#. 1
+#: ../cli/src/network-manager.c:37
+msgid "NET-ENABLED"
+msgstr "RED-ACTIVADA"
-#: ../cli/src/devices.c:879
-msgid "Flags:"
-msgstr "Opciones:"
+#. 2
+#: ../cli/src/network-manager.c:38
+msgid "WIFI-HARDWARE"
+msgstr "HARDWARE-WIFI"
-#: ../cli/src/devices.c:879
-msgid "privacy"
-msgstr "privacidad"
+#. 3
+#: ../cli/src/network-manager.c:39
+msgid "WIFI"
+msgstr "WIFI"
-#: ../cli/src/devices.c:880
-msgid "WPA flags:"
-msgstr "Opciones WPA:"
+#. 4
+#: ../cli/src/network-manager.c:40
+msgid "WWAN-HARDWARE"
+msgstr "HARDWARE-WWAN"
-#: ../cli/src/devices.c:881
-msgid "RSN flags:"
-msgstr "Opciones RSN:"
+#. 5
+#: ../cli/src/network-manager.c:41
+msgid "WWAN"
+msgstr "WWAN"
-#: ../cli/src/devices.c:907
-#, c-format
-msgid "Error: 'dev wifi' command '%s' is not valid."
-msgstr "Error: el comando «dev wifi» «%s» no es válido."
-
-#: ../cli/src/devices.c:943
-#, c-format
-msgid "Error: 'dev' command '%s' is not valid."
-msgstr "Error: el comando «dev» «%s» no es válido."
-
-#: ../cli/src/network-manager.c:46
+#: ../cli/src/network-manager.c:64
#, c-format
msgid ""
"Usage: nmcli nm { COMMAND | help }\n"
"\n"
-" COMMAND := { status | sleep | wakeup | wifi | wwan }\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"
"\n"
msgstr ""
-"Uso: nmcli nm {COMANDO | help }\n"
+"Uso: nmcli nm { COMANDO | ayuda }\n"
"\n"
-" COMANDO := { status | sleep | wakeup | wifi | wwan }\n"
+" COMANDO := { status | enable | sleep | wakeup | wifi | wwan }\n"
"\n"
-" status\n"
-" sleep\n"
-" wakeup\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
+" estado\n"
+" activar [cierto|falso]\n"
+" dormir\n"
+" despertar\n"
+" wifi [encendido|apagado]\n"
+" wwan [encendido|apagado]\n"
"\n"
-#: ../cli/src/network-manager.c:67
+#: ../cli/src/network-manager.c:85
msgid "asleep"
-msgstr "dormida"
+msgstr "dormido"
-#: ../cli/src/network-manager.c:69
+#: ../cli/src/network-manager.c:87
msgid "connecting"
msgstr "conectando"
-#: ../cli/src/network-manager.c:93 ../cli/src/network-manager.c:94
-#: ../cli/src/network-manager.c:95 ../cli/src/network-manager.c:96
-#: ../cli/src/network-manager.c:143 ../cli/src/network-manager.c:160
-msgid "enabled"
-msgstr "activado"
+#: ../cli/src/network-manager.c:128
+#, c-format
+msgid "Error: 'nm status': %s"
+msgstr "Error: «nm status»: %s"
-#: ../cli/src/network-manager.c:93 ../cli/src/network-manager.c:94
-#: ../cli/src/network-manager.c:95 ../cli/src/network-manager.c:96
-#: ../cli/src/network-manager.c:143 ../cli/src/network-manager.c:160
-msgid "disabled"
-msgstr "desactivado"
+#: ../cli/src/network-manager.c:130
+#, c-format
+msgid "Error: 'nm status': %s; allowed fields: %s"
+msgstr "Error: «nm status»: %s; campos permitidos: %s"
-#: ../cli/src/network-manager.c:102
+#: ../cli/src/network-manager.c:137
msgid "NetworkManager status"
msgstr "Estado de NetworkManager"
-#: ../cli/src/network-manager.c:104
-msgid "NM running:"
-msgstr "NM en ejecución:"
+#. Print header
+#: ../cli/src/network-manager.c:144 ../cli/src/network-manager.c:145
+#: ../cli/src/network-manager.c:146 ../cli/src/network-manager.c:147
+#: ../cli/src/network-manager.c:154 ../cli/src/network-manager.c:247
+#: ../cli/src/network-manager.c:296 ../cli/src/network-manager.c:328
+msgid "enabled"
+msgstr "activado"
+
+#: ../cli/src/network-manager.c:144 ../cli/src/network-manager.c:145
+#: ../cli/src/network-manager.c:146 ../cli/src/network-manager.c:147
+#: ../cli/src/network-manager.c:154 ../cli/src/network-manager.c:247
+#: ../cli/src/network-manager.c:296 ../cli/src/network-manager.c:328
+msgid "disabled"
+msgstr "desactivado"
-#: ../cli/src/network-manager.c:104
+#: ../cli/src/network-manager.c:152
msgid "running"
-msgstr "en ejecución"
+msgstr "ejecutando"
-#: ../cli/src/network-manager.c:104
+#: ../cli/src/network-manager.c:152
msgid "not running"
-msgstr "no está en ejecución"
+msgstr "no ejecutando"
+
+#: ../cli/src/network-manager.c:175
+#, 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:186
+#, 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:192
+#, c-format
+msgid "Error in sleep: %s"
+msgstr "Error al dormir: %s"
+
+#: ../cli/src/network-manager.c:237 ../cli/src/network-manager.c:286
+#: ../cli/src/network-manager.c:318
+#, 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:105
-msgid "NM state:"
-msgstr "Estado de NM:"
+#: ../cli/src/network-manager.c:245
+msgid "Networking enabled"
+msgstr "Red activada"
-#: ../cli/src/network-manager.c:106
-msgid "NM wireless hardware:"
-msgstr "Hardware inalámbrico de NM:"
+#: ../cli/src/network-manager.c:256
+#, c-format
+msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
+msgstr "Error: parámetro «enable» inválido: «%s»; use «true» o «false»."
-#. no argument, show current state
-#: ../cli/src/network-manager.c:107 ../cli/src/network-manager.c:143
-msgid "NM wireless:"
-msgstr "Inalámbrico de NM:"
+#: ../cli/src/network-manager.c:265
+#, 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:108
-msgid "NM WWAN hardware:"
-msgstr "Hardware WWAN de NM:"
+#: ../cli/src/network-manager.c:273
+#, c-format
+msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
+msgstr "Error: parámetro «wifi» inválido: «%s»."
-#. no argument, show current state
-#: ../cli/src/network-manager.c:109 ../cli/src/network-manager.c:160
-msgid "NM WWAN:"
-msgstr "WWAN de NM:"
+#: ../cli/src/network-manager.c:294
+msgid "WiFi enabled"
+msgstr "WiFi activado"
-#: ../cli/src/network-manager.c:150
+#: ../cli/src/network-manager.c:305
#, c-format
msgid "Error: invalid 'wifi' parameter: '%s'."
-msgstr "Error: parámetro «wifi» no válido: «%s»."
+msgstr "Error: parámetro «wifi» inválido: «%s»."
-#: ../cli/src/network-manager.c:167
+#: ../cli/src/network-manager.c:326
+msgid "WWAN enabled"
+msgstr "WWAN activado"
+
+#: ../cli/src/network-manager.c:337
#, c-format
msgid "Error: invalid 'wwan' parameter: '%s'."
-msgstr "Error: parámetro «wwan» no válido: «%s»."
+msgstr "Error: parámetro «wwan» inválido: «%s»."
-#: ../cli/src/network-manager.c:178
+#: ../cli/src/network-manager.c:348
#, c-format
msgid "Error: 'nm' command '%s' is not valid."
-msgstr "Error: el comando «nm» «%s» no es válido."
+msgstr "Error: comando «nm» command «%s» inválido."
-#: ../cli/src/nmcli.c:65
+#: ../cli/src/nmcli.c:69
#, c-format
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
"\n"
"OPTIONS\n"
-" -t[erse] terse output\n"
-" -p[retty] pretty output\n"
-" -v[ersion] show program version\n"
-" -h[elp] print this help\n"
+" -t[erse] terse output\n"
+" -p[retty] pretty output\n"
+" -m[ode] tabular|multiline output mode\n"
+" -f[ields] <field1,field2,...>|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"
@@ -826,49 +1049,180 @@ msgid ""
" dev devices managed by NetworkManager\n"
"\n"
msgstr ""
-"Uso: %s [OPCIONES] OBJETO { COMANDO | help }\n"
+"Uso: %s [OPCIONES] OBJETO { COMANDO | ayuda }\n"
"\n"
-"OPTIONS\n"
-" -t[erse] salida breve\n"
-" -p[retty] salida bonita\n"
-" -v[ersion] mostrar la versión del programa\n"
-" -h[elp] mostrar esta ayuda\n"
+"OPCIONES\n"
+" -t[erse] salida terse \n"
+" -p[retty] salida pretty\n"
+" -v[ersion] mostrar versión programa\n"
+" -h[elp] imprimir esta ayuda\n"
"\n"
-"OBJECT\n"
-" nm estado de NetworkManager\n"
+"OBJETO\n"
+" nm estatus de NetworkManager\n"
" con conexiones de NetworkManager\n"
-" dev dispositivos gestionados por NetworkManager\n"
+" dev dispositivos administrados por NetworkManager\n"
"\n"
-#: ../cli/src/nmcli.c:106
+#: ../cli/src/nmcli.c:113
+#, c-format
+msgid "Error: Object '%s' is unknown, try 'nmcli help'."
+msgstr "Error: el objeto «%s» desconocido, intente «nmcli help»."
+
+#: ../cli/src/nmcli.c:143
+#, c-format
+msgid "Error: Option '--terse' is specified the second time."
+msgstr "Error: la opción «--terse» se especifica la segunda vez."
+
+#: ../cli/src/nmcli.c:148
+#, c-format
+msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
+msgstr "Error: la opción «--terse» es mutuamente exclusiva con «--pretty»."
+
+#: ../cli/src/nmcli.c:156
+#, c-format
+msgid "Error: Option '--pretty' is specified the second time."
+msgstr "Error: la opción «--pretty» se especifica la segunda vez."
+
+#: ../cli/src/nmcli.c:161
+#, c-format
+msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
+msgstr "Error: la opción «--pretty» es mutuamente exclusiva con «--terse»."
+
+#: ../cli/src/nmcli.c:171 ../cli/src/nmcli.c:187
+#, c-format
+msgid "Error: missing argument for '%s' option."
+msgstr "Error: falta argumento para opción «%s»."
+
+#: ../cli/src/nmcli.c:180 ../cli/src/nmcli.c:196
#, c-format
-msgid "Object '%s' is unknown, try 'nmcli help'."
-msgstr "Se desconoce el objeto «%s», intente «nmcli help»."
+msgid "Error: '%s' is not valid argument for '%s' option."
+msgstr "Error: «%s» no es válido argumento para opción «%s»."
-#: ../cli/src/nmcli.c:139
+#: ../cli/src/nmcli.c:203
+#, c-format
+msgid "Error: fields for '%s' options are missing."
+msgstr "Error: faltan campos para opciones «%s»."
+
+#: ../cli/src/nmcli.c:209
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "herramienta nmcli, versión %s\n"
-#: ../cli/src/nmcli.c:145
+#: ../cli/src/nmcli.c:215
#, c-format
-msgid "Option '%s' is unknown, try 'nmcli -help'."
-msgstr "Se desconoce la opción «%s», intente «nmcli -help»."
+msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
+msgstr "Error: opción «%s» desconocida, intente «nmcli -help»."
-#: ../cli/src/nmcli.c:164
+#: ../cli/src/nmcli.c:234
#, c-format
msgid "Caught signal %d, shutting down..."
-msgstr "Se capturó la señal %d, apagando..."
+msgstr "Señal capturada %d, apagando..."
-#: ../cli/src/nmcli.c:189
+#: ../cli/src/nmcli.c:259
#, c-format
msgid "Error: Could not connect to NetworkManager."
msgstr "Error: no se pudo conectar con NetworkManager."
-#: ../cli/src/nmcli.c:205
+#: ../cli/src/nmcli.c:275
msgid "Success"
msgstr "Éxito"
+#: ../cli/src/settings.c:411
+#, c-format
+msgid "%d (hex-ascii-key)"
+msgstr "%d (clave-hex-ascii)"
+
+#: ../cli/src/settings.c:413
+#, c-format
+msgid "%d (104/128-bit passphrase)"
+msgstr "%d (frase de acceso 104/128-bits)"
+
+#: ../cli/src/settings.c:416
+#, c-format
+msgid "%d (unknown)"
+msgstr "%d (desconocido)"
+
+#: ../cli/src/settings.c:442
+msgid "0 (unknown)"
+msgstr "0 (desconocido)"
+
+#: ../cli/src/settings.c:448
+msgid "any, "
+msgstr "cualquiera,"
+
+#: ../cli/src/settings.c:450
+msgid "900 MHz, "
+msgstr "900 MHz, "
+
+#: ../cli/src/settings.c:452
+msgid "1800 MHz, "
+msgstr "1800 MHz, "
+
+#: ../cli/src/settings.c:454
+msgid "1900 MHz, "
+msgstr "1900 MHz, "
+
+#: ../cli/src/settings.c:456
+msgid "850 MHz, "
+msgstr "850 MHz, "
+
+#: ../cli/src/settings.c:458
+msgid "WCDMA 3GPP UMTS 2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 2100 MHz, "
+
+#: ../cli/src/settings.c:460
+msgid "WCDMA 3GPP UMTS 1800 MHz, "
+msgstr "WCDMA 3GPP UMTS 1800 MHz, "
+
+#: ../cli/src/settings.c:462
+msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
+
+#: ../cli/src/settings.c:464
+msgid "WCDMA 3GPP UMTS 800 MHz, "
+msgstr "WCDMA 3GPP UMTS 800 MHz, "
+
+#: ../cli/src/settings.c:466
+msgid "WCDMA 3GPP UMTS 850 MHz, "
+msgstr "WCDMA 3GPP UMTS 850 MHz, "
+
+#: ../cli/src/settings.c:468
+msgid "WCDMA 3GPP UMTS 900 MHz, "
+msgstr "WCDMA 3GPP UMTS 900 MHz, "
+
+#: ../cli/src/settings.c:470
+msgid "WCDMA 3GPP UMTS 1700 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700 MHz, "
+
+#: ../cli/src/settings.c:554 ../cli/src/settings.c:721
+msgid "auto"
+msgstr "auto"
+
+#: ../cli/src/settings.c:716 ../cli/src/settings.c:719
+#: ../cli/src/settings.c:720 ../cli/src/utils.c:172
+msgid "not set"
+msgstr "no establecido"
+
+#: ../cli/src/utils.c:124
+#, c-format
+msgid "field '%s' has to be alone"
+msgstr "el campo «%s» tiene que estar solo"
+
+#: ../cli/src/utils.c:127
+#, c-format
+msgid "invalid field '%s'"
+msgstr "campo inválido «%s»"
+
+#: ../cli/src/utils.c:146
+#, c-format
+msgid "Option '--terse' requires specifying '--fields'"
+msgstr "Opción «--terse» requiere especificar «--fields»"
+
+#: ../cli/src/utils.c:150
+#, c-format
+msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
+msgstr "Opción «--terse» requiere valores de «--fields» específicos, no «%s»"
+
#: ../libnm-util/crypto.c:120
#, c-format
msgid "PEM key file had no end tag '%s'."
@@ -989,7 +1343,7 @@ msgstr "Falló al inicializar el motor MD5: %s / %s."
#: ../libnm-util/crypto_gnutls.c:156
#, c-format
msgid "Invalid IV length (must be at least %zd)."
-msgstr "Longitud IV no válida (debe ser al menos %zd)."
+msgstr "Longitud IV inválida (debe ser al menos de %zd)."
#: ../libnm-util/crypto_gnutls.c:165 ../libnm-util/crypto_nss.c:188
#, c-format
@@ -1034,7 +1388,7 @@ msgstr "No se pudo reservar memoria para el cifrado."
#: ../libnm-util/crypto_gnutls.c:294
#, c-format
msgid "Failed to initialize the encryption cipher context: %s / %s."
-msgstr "Falló al inicializar el contexto de cifrado: %s / %s."
+msgstr "Falló al inicializar el contexto de cifrador: %s / %s."
#: ../libnm-util/crypto_gnutls.c:303
#, c-format
@@ -1089,7 +1443,7 @@ msgstr "Falló al inicializar el contexto MD5: %d"
#: ../libnm-util/crypto_nss.c:179
#, c-format
msgid "Invalid IV length (must be at least %d)."
-msgstr "Longitud de IV no válida (debe ser al menos %d)."
+msgstr "Longitud IV inválida (debe ser al menos de %d)."
#: ../libnm-util/crypto_nss.c:196
#, c-format
@@ -1156,7 +1510,7 @@ msgstr "Falló al cifrar: %d."
#: ../libnm-util/crypto_nss.c:404
#, c-format
msgid "Unexpected amount of data after encrypting."
-msgstr "Cantidad de datos inesperada después de cifrar."
+msgstr "Cantidad inesperada de datos después del encriptado."
#: ../libnm-util/crypto_nss.c:447
#, c-format
@@ -1187,31 +1541,127 @@ msgstr "No se pudo verificar el archivo PKCS#12: %d"
msgid "Could not generate random data."
msgstr "No se pudo generar datos aleatorios."
-#: ../libnm-util/nm-utils.c:1924
+#: ../libnm-util/nm-utils.c:1975
#, c-format
msgid "Not enough memory to make encryption key."
msgstr "No hay memoria suficiente para crear la clave privada de cifrado."
-#: ../libnm-util/nm-utils.c:2034
+#: ../libnm-util/nm-utils.c:2085
msgid "Could not allocate memory for PEM file creation."
msgstr "No se pudo reservar memoria para crear el archivo PEM."
-#: ../libnm-util/nm-utils.c:2046
+#: ../libnm-util/nm-utils.c:2097
#, c-format
msgid "Could not allocate memory for writing IV to PEM file."
-msgstr "No se pudo asignar memoria para escribir IV en el archivo PEM."
+msgstr "No pudo asignar memoria para escribir IV al archivo PEM."
-#: ../libnm-util/nm-utils.c:2058
+#: ../libnm-util/nm-utils.c:2109
#, c-format
msgid "Could not allocate memory for writing encrypted key to PEM file."
msgstr ""
-"No se pudo asignar memoria para escribir la clave cifrada en el archivo PEM."
+"No se pudo asignar memoria para escribir llave encriptada al archivo PEM."
-#: ../libnm-util/nm-utils.c:2077
+#: ../libnm-util/nm-utils.c:2128
#, c-format
msgid "Could not allocate memory for PEM file data."
msgstr "No se pudo reservar memoria para el archivo de datos PEM."
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
+msgid "Connection sharing via a protected WiFi network"
+msgstr "Compartir conexión a través de una red WIFI protegida"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
+msgid "Connection sharing via an open WiFi network"
+msgstr "Compartir conexión a través de una red WIFI abierta"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
+msgid "Modify persistent system hostname"
+msgstr "Modificar nombre de host de sistema persistente"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
+msgid "Modify system connections"
+msgstr "Modificar conexiones de sistema"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
+msgid "System policy prevents modification of system settings"
+msgstr "Política de sistema evita modificación de configuración de sistema"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
+msgid "System policy prevents modification of the persistent system hostname"
+msgstr ""
+"Política de sistema evita modificación de nombre de host de sistema "
+"persistente"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
+msgid "System policy prevents sharing connections via a protected WiFi network"
+msgstr ""
+"Política de sistema evita compartir conexiones a través de una red WIFI "
+"protegida"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
+msgid "System policy prevents sharing connections via an open WiFi network"
+msgstr ""
+"Política de sistema evita compartir conexiones a través de una red WIFI "
+"abierta"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
+msgid "Allow control of network connections"
+msgstr "Permitir controlar las conexiones de red"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
+msgid "Allow use of user-specific connections"
+msgstr "Permitir el uso de conexiones especiÌficas de usuario"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
+msgid "Enable or disable WiFi devices"
+msgstr "Activar o desactivar los dispositivos inalaÌmbricos"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
+msgid "Enable or disable mobile broadband devices"
+msgstr "Activar o desactivar los dispositivos de banda ancha moÌvil"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+msgid "Enable or disable system networking"
+msgstr "Activar o desactivar la red del sistema"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
+msgid ""
+"Put NetworkManager to sleep or wake it up (should only be used by system "
+"power management)"
+msgstr ""
+"Poner NetworkManager a dormir o despertarlo (soÌlo lo deberiÌa usar el gestor "
+"de energiÌa del sistema)"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
+msgid "System policy prevents control of network connections"
+msgstr "La poliÌtica de sistema evita el control de las conexiones de red"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
+msgid "System policy prevents enabling or disabling WiFi devices"
+msgstr ""
+"La poliÌtica de sistema evita activar o desactivar los dispositivos "
+"inalaÌmbricos"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
+msgid "System policy prevents enabling or disabling mobile broadband devices"
+msgstr ""
+"La poliÌtica del sistema evita activar o desactivar los dispositivos de banda "
+"ancha moÌvil"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
+msgid "System policy prevents enabling or disabling system networking"
+msgstr "La poliÌtica de sistema evita activar o desactivar la red del sistema"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
+msgid "System policy prevents putting NetworkManager to sleep or waking it up"
+msgstr ""
+"La poliÌtica del sistema evita poner a NetworkManager a dormir o despertarlo"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
+msgid "System policy prevents use of user-specific connections"
+msgstr ""
+"La poliÌtica del sistema evita el uso de conexiones especiÌficas de usuario"
+
#: ../src/nm-netlink-monitor.c:100 ../src/nm-netlink-monitor.c:231
#: ../src/nm-netlink-monitor.c:653
#, c-format
@@ -1230,9 +1680,8 @@ msgstr ""
#: ../src/nm-netlink-monitor.c:265
#, c-format
-#| msgid "unable to allocate netlink handle: %s"
msgid "unable to enable netlink handle credential passing: %s"
-msgstr "no se pudo activar el manejador de paso de credenciales de netlink: %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
#, c-format
@@ -1245,7 +1694,7 @@ msgstr ""
#, c-format
msgid "unable to allocate netlink link cache for monitoring link status: %s"
msgstr ""
-"no se puede asignar el enlace a la caché de netlink para monitorizar el "
+"no se puede asignar el enlace a la cache de netlink para monitorizar el "
"estado del enlace: %s"
#: ../src/nm-netlink-monitor.c:502
@@ -1258,22 +1707,22 @@ msgstr "no pudo unirse al grupo netlink: %s"
msgid "error updating link cache: %s"
msgstr "error al actualizar el enlace caché: %s"
-#: ../src/main.c:502
+#: ../src/main.c:499
#, c-format
msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgstr ""
"Opción no válida. Use --help para ver una lista de las opciones válidas.\n"
-#: ../src/main.c:562
+#: ../src/main.c:570
#, c-format
msgid "%s. Please use --help to see a list of valid options.\n"
-msgstr "%s. Use --help para ver una lista de las opciones válidas.\n"
+msgstr "%s. Usar --help para ver la lista de opciones válidas.\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:325
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:328
msgid "# Created by NetworkManager\n"
msgstr "# Creado por NetworkManager\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:341
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:344
#, c-format
msgid ""
"# Merged from %s\n"
@@ -1282,94 +1731,49 @@ msgstr ""
"# Mezclado de %s\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:279
+#: ../src/dhcp-manager/nm-dhcp-manager.c:284
msgid "no usable DHCP client could be found."
-msgstr "no se encontró ningún cliente de DHCP usable."
+msgstr "cliente DHCP inútil pudo ser hallado."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:288
+#: ../src/dhcp-manager/nm-dhcp-manager.c:293
msgid "'dhclient' could be found."
-msgstr "no se pudo encontrar «dhclient»."
+msgstr "se pudo encontrar «dhclient»."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:298
+#: ../src/dhcp-manager/nm-dhcp-manager.c:303
msgid "'dhcpcd' could be found."
-msgstr "no se pudo encontrar «dhcpd»."
+msgstr "se pudo encontrar «dhcpcd»."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:306
+#: ../src/dhcp-manager/nm-dhcp-manager.c:311
#, c-format
msgid "unsupported DHCP client '%s'"
-msgstr "no se soporta el cliente de DHCP «%s»"
+msgstr "«%s» cliente DHCP sin soporte "
#: ../src/logging/nm-logging.c:146
#, c-format
msgid "Unknown log level '%s'"
-msgstr "Nivel de registro «%s» desconocido"
+msgstr "Nivel de registro desconocido «%s»"
#: ../src/logging/nm-logging.c:171
#, c-format
msgid "Unknown log domain '%s'"
-msgstr "Dominio de registro «%s» desconocido"
+msgstr "Dominio de registro desconocido «%s»"
-#: ../src/named-manager/nm-named-manager.c:343
+#: ../src/dns-manager/nm-dns-manager.c:384
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/named-manager/nm-named-manager.c:345
+#: ../src/dns-manager/nm-dns-manager.c:386
msgid "The nameservers listed below may not be recognized."
msgstr "Puede que los servidores de nombres listados abajo no se reconozcan."
#: ../src/system-settings/nm-default-wired-connection.c:157
#, c-format
msgid "Auto %s"
-msgstr "Auto %ss"
+msgstr "Auto %s"
-#: ../system-settings/plugins/ifcfg-rh/reader.c:3254
+#: ../system-settings/plugins/ifcfg-rh/reader.c:3412
+#: ../system-settings/plugins/ifnet/connection_parser.c:49
msgid "System"
msgstr "Sistema"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
-msgid "Connection sharing via a protected WiFi network"
-msgstr "Compartir la conexión a través de una red inalámbrica protegida"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
-msgid "Connection sharing via an open WiFi network"
-msgstr "Compartir la conexión a través de una red inalámbrica abierta"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
-msgid "Modify persistent system hostname"
-msgstr "Modificar el nombre de equipo persistente del sistema"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
-msgid "Modify system connections"
-msgstr "Modificar las conexiones del sistema"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
-msgid "System policy prevents modification of system settings"
-msgstr ""
-"La política del sistema impide modificaciones de los ajustes del sistema"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
-msgid "System policy prevents modification of the persistent system hostname"
-msgstr ""
-"La política del sistema impide la modificaciones del nombre de equipo "
-"persistente del sistema"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
-msgid "System policy prevents sharing connections via a protected WiFi network"
-msgstr ""
-"La política del sistema impide compartir conexiones a través de una red "
-"inalámbrica protegida"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
-msgid "System policy prevents sharing connections via an open WiFi network"
-msgstr ""
-"La política del sistema impide compartir conexiones a través de una red "
-"inalámbrica abierta"
-
-#~ msgid "unable to join netlink group for monitoring link status: %s"
-#~ msgstr ""
-#~ "no pudo unirse al grupo netlink para monitorizar el estado del enlace: %s"
-
-#~ msgid "unable to connect to netlink: %s"
-#~ msgstr "no se puede conectar con netlink: %s"
diff --git a/po/et.po b/po/et.po
index 3a57c8d12e..711c744817 100644
--- a/po/et.po
+++ b/po/et.po
@@ -76,11 +76,11 @@ msgstr ""
"# Liidetud allikast %s\n"
"\n"
-#: ../src/named-manager/nm-named-manager.c:240
+#: ../src/dns-manager/nm-dns-manager.c:240
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr "MÄRKUS: libc lahendaja ei pruugi toetada rohkem kui 3 nimeserverit."
-#: ../src/named-manager/nm-named-manager.c:242
+#: ../src/dns-manager/nm-dns-manager.c:242
msgid "The nameservers listed below may not be recognized."
msgstr "Järgneva nimistu nimeservereid ei tuntud ära."
diff --git a/po/eu.po b/po/eu.po
index f2e96a504a..5a584ec367 100644
--- a/po/eu.po
+++ b/po/eu.po
@@ -1300,11 +1300,11 @@ msgstr "ezin da netlink-ekin konektatu: %s"
msgid "unable to join netlink group: %s"
msgstr "ezin da netlink taldearekin elkartu: %s"
-#: ../src/named-manager/nm-named-manager.c:315
+#: ../src/dns-manager/nm-dns-manager.c:315
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr "OHARRA: libc-en ebaztaileak ez du 3 izen-zerbitzari baino gehiago onartzen."
-#: ../src/named-manager/nm-named-manager.c:317
+#: ../src/dns-manager/nm-dns-manager.c:317
msgid "The nameservers listed below may not be recognized."
msgstr "Azpian zerrendatutako izen-zenbitzariak ez dira ezagutuko."
diff --git a/po/fi.po b/po/fi.po
index 43d3524c56..31187e9fba 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -308,11 +308,11 @@ msgstr ""
"# Yhdistetty tiedostosta %s\n"
"\n"
-#: ../src/named-manager/nm-named-manager.c:256
+#: ../src/dns-manager/nm-dns-manager.c:256
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr "HUOMAUTUS: libc-nimenselvennys ei ehkä tue kuin kolmea nimipalvelinta."
-#: ../src/named-manager/nm-named-manager.c:258
+#: ../src/dns-manager/nm-dns-manager.c:258
msgid "The nameservers listed below may not be recognized."
msgstr "Alla olevaa nimipalvelinluetteloa ei voitu tunnistaa."
diff --git a/po/fr.po b/po/fr.po
index b61f094831..25b6c76b8b 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -1,266 +1,1670 @@
+# translation of fr.po to French
# French translation of NetworkManager.
# Copyright (C) 2004-2008 The GNOME Foundation.
# This file is distributed under the same license as the NetworkManager package.
#
+#
# Raphaël Tournoy <lexpas@free.fr>, 2004.
# Stéphane Raimbault <stephane.raimbault@gmail.com>, 2006-2008.
# Jonathan Ernst <jonathan@ernstfamily.ch>, 2007.
# Robert-André Mauchin <zebob.m@pengzone.org>, 2007-2008.
-#
+# Sam Friedmann <sam.friedmann@redhat.com>, 2010.
msgid ""
msgstr ""
-"Project-Id-Version: NetworkManager 0.7.0\n"
+"Project-Id-Version: fr\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-25 22:59+0200\n"
-"PO-Revision-Date: 2008-09-25 23:04+0200\n"
-"Last-Translator: Claude Paroz <claude@2xlibre.net>\n"
-"Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
+"POT-Creation-Date: 2010-05-06 14:31+0530\n"
+"PO-Revision-Date: 2010-05-07 15:23+1000\n"
+"Last-Translator: Sam Friedmann <sam.friedmann@redhat.com>\n"
+"Language-Team: French <French fedora-trans-fr@fedoraproject.org>\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-Generator: KBabel 1.11.4\n"
-#: ../src/nm-netlink-monitor.c:193 ../src/nm-netlink-monitor.c:474
-#, c-format
-msgid "error processing netlink message: %s"
-msgstr "erreur lors du traitement du message netlink : %s"
+#: ../cli/src/connections.c:59 ../cli/src/connections.c:74
+#: ../cli/src/devices.c:85 ../cli/src/devices.c:98 ../cli/src/devices.c:108
+#: ../cli/src/devices.c:118 ../cli/src/devices.c:131 ../cli/src/devices.c:142
+#: ../cli/src/devices.c:152
+msgid "NAME"
+msgstr "NOM"
+
+#. 0
+#: ../cli/src/connections.c:60 ../cli/src/connections.c:75
+msgid "UUID"
+msgstr "UUID"
+
+#. 1
+#: ../cli/src/connections.c:61
+msgid "DEVICES"
+msgstr "PÉRIPHÉRIQUES"
+
+#. 2
+#: ../cli/src/connections.c:62 ../cli/src/connections.c:77
+msgid "SCOPE"
+msgstr "ÉTENDUE"
+
+#. 3
+#: ../cli/src/connections.c:63
+msgid "DEFAULT"
+msgstr "DÉFAUT"
+
+#. 4
+#: ../cli/src/connections.c:64
+msgid "DBUS-SERVICE"
+msgstr "DBUS-SERVICE"
+
+#. 5
+#: ../cli/src/connections.c:65
+msgid "SPEC-OBJECT"
+msgstr "SPEC-OBJECT"
+
+#. 6
+#: ../cli/src/connections.c:66
+msgid "VPN"
+msgstr "VPN"
+
+#. 1
+#. 0
+#. 1
+#: ../cli/src/connections.c:76 ../cli/src/devices.c:61 ../cli/src/devices.c:87
+msgid "TYPE"
+msgstr "TYPE"
+
+#. 3
+#: ../cli/src/connections.c:78
+msgid "TIMESTAMP"
+msgstr "TIMESTAMP"
+
+#. 4
+#: ../cli/src/connections.c:79
+msgid "TIMESTAMP-REAL"
+msgstr "TIMESTAMP-REAL"
+
+#. 5
+#: ../cli/src/connections.c:80
+msgid "AUTOCONNECT"
+msgstr "AUTOCONNECT"
-#: ../src/nm-netlink-monitor.c:250
+#. 6
+#: ../cli/src/connections.c:81
+msgid "READONLY"
+msgstr "READONLY"
+
+#: ../cli/src/connections.c:157
#, c-format
-msgid "unable to allocate netlink handle for monitoring link status: %s"
+msgid ""
+"Usage: nmcli con { COMMAND | help }\n"
+" COMMAND := { list | status | up | down }\n"
+"\n"
+" list [id <id> | uuid <id> | system | user]\n"
+" status\n"
+" up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout "
+"<timeout>]\n"
+" down id <id> | uuid <id>\n"
msgstr ""
-"impossible d'allouer un gestionnaire netlink pour surveiller l'état de la "
-"connexion : %s"
+"Usage: nmcli con { COMMAND | help }\n"
+" COMMAND := { list | status | up | down }\n"
+"\n"
+" list [id <id> | uuid <id> | system | user]\n"
+" status\n"
+" up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout "
+"<timeout>]\n"
+" down id <id> | uuid <id>\n"
-#: ../src/nm-netlink-monitor.c:260
+#: ../cli/src/connections.c:197 ../cli/src/connections.c:536
#, c-format
-msgid "unable to connect to netlink for monitoring link status: %s"
-msgstr ""
-"impossible de se connecter à netlink pour surveiller l'état de la "
-"connexion : %s"
+msgid "Error: 'con list': %s"
+msgstr "Erreur&nbsp;: 'con list': %s"
+
+#: ../cli/src/connections.c:199 ../cli/src/connections.c:538
+#, c-format
+msgid "Error: 'con list': %s; allowed fields: %s"
+msgstr "Erreur&nbsp;: 'con list': %s&nbsp;; champs autorisés&nbsp;: %s"
+
+#: ../cli/src/connections.c:207
+msgid "Connection details"
+msgstr "Détails de connexion"
+
+#: ../cli/src/connections.c:381 ../cli/src/connections.c:601
+msgid "system"
+msgstr "système"
+
+#: ../cli/src/connections.c:381 ../cli/src/connections.c:601
+msgid "user"
+msgstr "utilisateur"
-#: ../src/nm-netlink-monitor.c:268
+#: ../cli/src/connections.c:383
+msgid "never"
+msgstr "jamais"
+
+#. "CAPABILITIES"
+#. Print header
+#. "WIFI-PROPERTIES"
+#: ../cli/src/connections.c:384 ../cli/src/connections.c:385
+#: ../cli/src/connections.c:602 ../cli/src/connections.c:605
+#: ../cli/src/devices.c:388 ../cli/src/devices.c:513 ../cli/src/devices.c:539
+#: ../cli/src/devices.c:540 ../cli/src/devices.c:541 ../cli/src/devices.c:542
+#: ../cli/src/devices.c:543 ../cli/src/settings.c:504
+#: ../cli/src/settings.c:544 ../cli/src/settings.c:643
+#: ../cli/src/settings.c:912 ../cli/src/settings.c:913
+#: ../cli/src/settings.c:915 ../cli/src/settings.c:917
+#: ../cli/src/settings.c:1042 ../cli/src/settings.c:1043
+#: ../cli/src/settings.c:1044 ../cli/src/settings.c:1123
+#: ../cli/src/settings.c:1124 ../cli/src/settings.c:1125
+#: ../cli/src/settings.c:1126 ../cli/src/settings.c:1127
+#: ../cli/src/settings.c:1128 ../cli/src/settings.c:1129
+#: ../cli/src/settings.c:1130 ../cli/src/settings.c:1131
+#: ../cli/src/settings.c:1132 ../cli/src/settings.c:1133
+#: ../cli/src/settings.c:1134 ../cli/src/settings.c:1135
+#: ../cli/src/settings.c:1210
+msgid "yes"
+msgstr "oui"
+
+#: ../cli/src/connections.c:384 ../cli/src/connections.c:385
+#: ../cli/src/connections.c:602 ../cli/src/connections.c:605
+#: ../cli/src/devices.c:388 ../cli/src/devices.c:513 ../cli/src/devices.c:539
+#: ../cli/src/devices.c:540 ../cli/src/devices.c:541 ../cli/src/devices.c:542
+#: ../cli/src/devices.c:543 ../cli/src/settings.c:504
+#: ../cli/src/settings.c:506 ../cli/src/settings.c:544
+#: ../cli/src/settings.c:643 ../cli/src/settings.c:912
+#: ../cli/src/settings.c:913 ../cli/src/settings.c:915
+#: ../cli/src/settings.c:917 ../cli/src/settings.c:1042
+#: ../cli/src/settings.c:1043 ../cli/src/settings.c:1044
+#: ../cli/src/settings.c:1123 ../cli/src/settings.c:1124
+#: ../cli/src/settings.c:1125 ../cli/src/settings.c:1126
+#: ../cli/src/settings.c:1127 ../cli/src/settings.c:1128
+#: ../cli/src/settings.c:1129 ../cli/src/settings.c:1130
+#: ../cli/src/settings.c:1131 ../cli/src/settings.c:1132
+#: ../cli/src/settings.c:1133 ../cli/src/settings.c:1134
+#: ../cli/src/settings.c:1135 ../cli/src/settings.c:1210
+msgid "no"
+msgstr "non"
+
+#: ../cli/src/connections.c:457 ../cli/src/connections.c:500
+msgid "System connections"
+msgstr "Connexions système"
+
+#: ../cli/src/connections.c:462 ../cli/src/connections.c:513
+msgid "User connections"
+msgstr "Connexions utilisateur"
+
+#: ../cli/src/connections.c:474 ../cli/src/connections.c:1334
+#: ../cli/src/connections.c:1350 ../cli/src/connections.c:1359
+#: ../cli/src/connections.c:1370 ../cli/src/connections.c:1452
+#: ../cli/src/devices.c:864 ../cli/src/devices.c:874 ../cli/src/devices.c:973
+#: ../cli/src/devices.c:980
+#, c-format
+msgid "Error: %s argument is missing."
+msgstr "Erreur&nbsp;: l'argument %s est manquant."
+
+#: ../cli/src/connections.c:487
+#, c-format
+msgid "Error: %s - no such connection."
+msgstr "Erreur&nbsp;: %s - connexion introuvable."
+
+#: ../cli/src/connections.c:519 ../cli/src/connections.c:1383
+#: ../cli/src/connections.c:1470 ../cli/src/devices.c:687
+#: ../cli/src/devices.c:754 ../cli/src/devices.c:888 ../cli/src/devices.c:986
+#, c-format
+msgid "Unknown parameter: %s\n"
+msgstr "Paramètre inconnu&nbsp;: %s\n"
+
+#: ../cli/src/connections.c:528
+#, c-format
+msgid "Error: no valid parameter specified."
+msgstr "Erreur&nbsp;: aucun paramètre valide spécifié."
+
+#: ../cli/src/connections.c:543 ../cli/src/connections.c:1572
+#: ../cli/src/devices.c:1192 ../cli/src/network-manager.c:274
+#, c-format
+msgid "Error: %s."
+msgstr "Erreur&nbsp;: %s."
+
+#: ../cli/src/connections.c:649
+#, c-format
+msgid "Error: 'con status': %s"
+msgstr "Erreur&nbsp;: 'con status'&nbsp;: %s"
+
+#: ../cli/src/connections.c:651
+#, c-format
+msgid "Error: 'con status': %s; allowed fields: %s"
+msgstr "Erreur&nbsp;: 'con status'&nbsp;: %s&nbsp;; champs autorisés&nbsp;: %s"
+
+#: ../cli/src/connections.c:658
+msgid "Active connections"
+msgstr "Connexions actives"
+
+#: ../cli/src/connections.c:1026
+#, c-format
+msgid "no active connection on device '%s'"
+msgstr "aucune connexion active sur le périphérique '%s'"
+
+#: ../cli/src/connections.c:1034
+#, c-format
+msgid "no active connection or device"
+msgstr "aucune connexion active ou périphérique"
+
+#: ../cli/src/connections.c:1084
#, c-format
-msgid "unable to join netlink group for monitoring link status: %s"
+msgid "device '%s' not compatible with connection '%s'"
+msgstr "périphérique '%s' incompatible avec la connexion '%s'"
+
+#: ../cli/src/connections.c:1086
+#, c-format
+msgid "no device found for connection '%s'"
+msgstr "aucun périphérique trouvé pour la connexion '%s'"
+
+#: ../cli/src/connections.c:1097
+msgid "activating"
+msgstr "activation"
+
+#: ../cli/src/connections.c:1099
+msgid "activated"
+msgstr "activé"
+
+#: ../cli/src/connections.c:1102 ../cli/src/connections.c:1125
+#: ../cli/src/connections.c:1158 ../cli/src/devices.c:224
+#: ../cli/src/devices.c:514 ../cli/src/network-manager.c:92
+#: ../cli/src/network-manager.c:145 ../cli/src/settings.c:469
+msgid "unknown"
+msgstr "inconnu"
+
+#: ../cli/src/connections.c:1111
+msgid "VPN connecting (prepare)"
+msgstr "Connexion VPN (préparation)"
+
+#: ../cli/src/connections.c:1113
+msgid "VPN connecting (need authentication)"
+msgstr "Connexion VPN (authentification requise)"
+
+#: ../cli/src/connections.c:1115
+msgid "VPN connecting"
+msgstr "Connexion VPN"
+
+#: ../cli/src/connections.c:1117
+msgid "VPN connecting (getting IP configuration)"
+msgstr "Connexion VPN (obtention de la configuration IP)"
+
+#: ../cli/src/connections.c:1119
+msgid "VPN connected"
+msgstr "VPN connecté"
+
+#: ../cli/src/connections.c:1121
+msgid "VPN connection failed"
+msgstr "Échec de la connexion VPN"
+
+#: ../cli/src/connections.c:1123
+msgid "VPN disconnected"
+msgstr "VPN déconnecté"
+
+#: ../cli/src/connections.c:1134
+msgid "unknown reason"
+msgstr "raison inconnue"
+
+#: ../cli/src/connections.c:1136
+msgid "none"
+msgstr "aucun"
+
+#: ../cli/src/connections.c:1138
+msgid "the user was disconnected"
+msgstr "l'utilisateur a été déconnecté"
+
+#: ../cli/src/connections.c:1140
+msgid "the base network connection was interrupted"
+msgstr "la connexion réseau de base a été interrompue"
+
+#: ../cli/src/connections.c:1142
+msgid "the VPN service stopped unexpectedly"
+msgstr "arrêt inattendu du service VPN"
+
+#: ../cli/src/connections.c:1144
+msgid "the VPN service returned invalid configuration"
+msgstr "le service VPN a retourné une configuration invalide"
+
+#: ../cli/src/connections.c:1146
+msgid "the connection attempt timed out"
+msgstr "le délai d'attente de la tentative de connexion a été dépassé"
+
+#: ../cli/src/connections.c:1148
+msgid "the VPN service did not start in time"
+msgstr "le service VPN n'a pas démarré à temps"
+
+#: ../cli/src/connections.c:1150
+msgid "the VPN service failed to start"
+msgstr "échec du démarrage du service VPN"
+
+#: ../cli/src/connections.c:1152
+msgid "no valid VPN secrets"
+msgstr "aucun secret VPN valide"
+
+#: ../cli/src/connections.c:1154
+msgid "invalid VPN secrets"
+msgstr "secrets VPN invalides"
+
+#: ../cli/src/connections.c:1156
+msgid "the connection was removed"
+msgstr "la connexion a été supprimée"
+
+#: ../cli/src/connections.c:1170
+#, c-format
+msgid "state: %s\n"
+msgstr "état&nbsp;: %s\n"
+
+#: ../cli/src/connections.c:1173 ../cli/src/connections.c:1199
+#, c-format
+msgid "Connection activated\n"
+msgstr "Connexion activée\n"
+
+#: ../cli/src/connections.c:1176
+#, c-format
+msgid "Error: Connection activation failed."
+msgstr "Erreur&nbsp;: Échec de l'activation de la connexion"
+
+#: ../cli/src/connections.c:1195
+#, c-format
+msgid "state: %s (%d)\n"
+msgstr "état&nbsp;: %s (%d)\n"
+
+#: ../cli/src/connections.c:1205
+#, c-format
+msgid "Error: Connection activation failed: %s."
+msgstr "Erreur&nbsp;: L'activation de la connexion a échoué&nbsp;: %s."
+
+#: ../cli/src/connections.c:1222 ../cli/src/devices.c:811
+#, c-format
+msgid "Error: Timeout %d sec expired."
+msgstr "Erreur&nbsp;: Le délai d'attente de %d sec a expiré."
+
+#: ../cli/src/connections.c:1265
+#, c-format
+msgid "Error: Connection activation failed: %s"
+msgstr "Erreur&nbsp;: L'activation de la connexion a échoué&nbsp;: %s"
+
+#: ../cli/src/connections.c:1279
+#, c-format
+msgid "Error: Obtaining active connection for '%s' failed."
+msgstr "Erreur&nbsp;: L'obtention d'une connexion active pour '%s' a échoué."
+
+#: ../cli/src/connections.c:1288
+#, c-format
+msgid "Active connection state: %s\n"
+msgstr "État de connexion active&nbsp;: %s\n"
+
+#: ../cli/src/connections.c:1289
+#, c-format
+msgid "Active connection path: %s\n"
+msgstr "État de chemin actif&nbsp;: %s\n"
+
+#: ../cli/src/connections.c:1343 ../cli/src/connections.c:1461
+#, c-format
+msgid "Error: Unknown connection: %s."
+msgstr "Erreur&nbsp;: Connexion inconnue&nbsp;: %s."
+
+#: ../cli/src/connections.c:1378 ../cli/src/devices.c:882
+#, c-format
+msgid "Error: timeout value '%s' is not valid."
+msgstr "Erreur&nbsp;: Valeur de délai d'attente '%s' invalide."
+
+#: ../cli/src/connections.c:1391 ../cli/src/connections.c:1478
+#, c-format
+msgid "Error: id or uuid has to be specified."
+msgstr "Erreur&nbsp;: ID ou UUID doit être spécifié."
+
+#: ../cli/src/connections.c:1411
+#, c-format
+msgid "Error: No suitable device found: %s."
+msgstr "Erreur&nbsp;: Aucun périphérique convenable trouvé&nbsp;: %s."
+
+#: ../cli/src/connections.c:1413
+#, c-format
+msgid "Error: No suitable device found."
+msgstr "Erreur&nbsp;: Aucun périphérique convenable trouvé."
+
+#: ../cli/src/connections.c:1505
+#, c-format
+msgid "Warning: Connection not active\n"
+msgstr "Avertissement&nbsp;: Connexion inactive\n"
+
+#: ../cli/src/connections.c:1561
+#, c-format
+msgid "Error: 'con' command '%s' is not valid."
+msgstr "Erreur&nbsp;: Commande 'con' '%s' invalide."
+
+#: ../cli/src/connections.c:1597
+#, c-format
+msgid "Error: could not connect to D-Bus."
+msgstr "Erreur&nbsp;: impossible de connecter à D-Bus."
+
+#: ../cli/src/connections.c:1604
+#, c-format
+msgid "Error: Could not get system settings."
+msgstr "Erreur&nbsp;: Paramètres système introuvables."
+
+#: ../cli/src/connections.c:1612
+#, c-format
+msgid "Error: Could not get user settings."
+msgstr "Erreur&nbsp;: Paramètres utilisteur introuvables."
+
+#: ../cli/src/connections.c:1622
+#, c-format
+msgid "Error: Can't obtain connections: settings services are not running."
msgstr ""
-"impossible de joindre le groupe netlink pour surveiller l'état de la "
-"connexion : %s"
+"Erreur&nbsp;: Impossible d'obtenir les connexions&nbsp;: les services des "
+"paramètres ne sont pas en cours d'exécution."
+
+#. 0
+#. 9
+#: ../cli/src/devices.c:60 ../cli/src/devices.c:86 ../cli/src/devices.c:162
+msgid "DEVICE"
+msgstr "PÉRIPHÉRIQUE"
+
+#. 1
+#. 4
+#. 0
+#: ../cli/src/devices.c:62 ../cli/src/devices.c:90
+#: ../cli/src/network-manager.c:36
+msgid "STATE"
+msgstr "ÉTAT"
+
+#: ../cli/src/devices.c:71
+msgid "GENERAL"
+msgstr "GÉNÉRAL"
+
+#. 0
+#: ../cli/src/devices.c:72
+msgid "CAPABILITIES"
+msgstr "CAPABILITÉS"
-#: ../src/nm-netlink-monitor.c:276
+#. 1
+#: ../cli/src/devices.c:73
+msgid "WIFI-PROPERTIES"
+msgstr "PROPRIÉTÉS-WIFI"
+
+#. 2
+#: ../cli/src/devices.c:74
+msgid "AP"
+msgstr "PA"
+
+#. 3
+#: ../cli/src/devices.c:75
+msgid "WIRED-PROPERTIES"
+msgstr "PROPRIÉTÉS-CABLÉES"
+
+#. 4
+#: ../cli/src/devices.c:76
+msgid "IP4-SETTINGS"
+msgstr "PARAMÈTRES-IP4"
+
+#. 5
+#: ../cli/src/devices.c:77
+msgid "IP4-DNS"
+msgstr "DNS-IP4"
+
+#. 2
+#: ../cli/src/devices.c:88
+msgid "DRIVER"
+msgstr "PILOTE"
+
+#. 3
+#: ../cli/src/devices.c:89
+msgid "HWADDR"
+msgstr "HWADDR"
+
+#. 0
+#: ../cli/src/devices.c:99
+msgid "CARRIER-DETECT"
+msgstr "DÉTECTION-OPÉRATEUR"
+
+#. 1
+#: ../cli/src/devices.c:100
+msgid "SPEED"
+msgstr "VITESSE"
+
+#. 0
+#: ../cli/src/devices.c:109
+msgid "CARRIER"
+msgstr "OPÉRATEUR"
+
+#. 0
+#: ../cli/src/devices.c:119
+msgid "WEP"
+msgstr "WEP"
+
+#. 1
+#: ../cli/src/devices.c:120
+msgid "WPA"
+msgstr "WPA"
+
+#. 2
+#: ../cli/src/devices.c:121
+msgid "WPA2"
+msgstr "WPA2"
+
+#. 3
+#: ../cli/src/devices.c:122
+msgid "TKIP"
+msgstr "TKIP"
+
+#. 4
+#: ../cli/src/devices.c:123
+msgid "CCMP"
+msgstr "CCMP"
+
+#. 0
+#: ../cli/src/devices.c:132
+msgid "ADDRESS"
+msgstr "ADRESSE"
+
+#. 1
+#: ../cli/src/devices.c:133
+msgid "PREFIX"
+msgstr "PRÉFIXE"
+
+#. 2
+#: ../cli/src/devices.c:134
+msgid "GATEWAY"
+msgstr "PASSERELLE"
+
+#. 0
+#: ../cli/src/devices.c:143
+msgid "DNS"
+msgstr "DNS"
+
+#. 0
+#: ../cli/src/devices.c:153
+msgid "SSID"
+msgstr "SSID"
+
+#. 1
+#: ../cli/src/devices.c:154
+msgid "BSSID"
+msgstr "BSSID"
+
+#. 2
+#: ../cli/src/devices.c:155
+msgid "MODE"
+msgstr "MODE"
+
+#. 3
+#: ../cli/src/devices.c:156
+msgid "FREQ"
+msgstr "FREQ"
+
+#. 4
+#: ../cli/src/devices.c:157
+msgid "RATE"
+msgstr "DÉBIT"
+
+#. 5
+#: ../cli/src/devices.c:158
+msgid "SIGNAL"
+msgstr "SIGNAL"
+
+#. 6
+#: ../cli/src/devices.c:159
+msgid "SECURITY"
+msgstr "SÉCURITÉ"
+
+#. 7
+#: ../cli/src/devices.c:160
+msgid "WPA-FLAGS"
+msgstr "DRAPEAUX-WPA"
+
+#. 8
+#: ../cli/src/devices.c:161
+msgid "RSN-FLAGS"
+msgstr "DRAPEAUX-RSN"
+
+#. 10
+#: ../cli/src/devices.c:163
+msgid "ACTIVE"
+msgstr "ACTIF"
+
+#: ../cli/src/devices.c:186
#, c-format
-msgid "unable to allocate netlink link cache for monitoring link status: %s"
+msgid ""
+"Usage: nmcli dev { COMMAND | help }\n"
+"\n"
+" COMMAND := { status | list | disconnect | wifi }\n"
+"\n"
+" status\n"
+" list [iface <iface>]\n"
+" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
+" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+"\n"
msgstr ""
-"impossible d'allouer un cache de connexion netlink pour surveiller l'état de "
-"la connexion : %s"
+"Usage: nmcli dev { COMMAND | help }\n"
+"\n"
+" COMMAND := { status | list | disconnect | wifi }\n"
+"\n"
+" status\n"
+" list [iface <iface>]\n"
+" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
+" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+"\n"
+
+#: ../cli/src/devices.c:206
+msgid "unmanaged"
+msgstr "non-géré"
+
+#: ../cli/src/devices.c:208
+msgid "unavailable"
+msgstr "indisponible"
+
+#: ../cli/src/devices.c:210 ../cli/src/network-manager.c:89
+msgid "disconnected"
+msgstr "déconnecté"
+
+#: ../cli/src/devices.c:212
+msgid "connecting (prepare)"
+msgstr "connexion (préparer)"
+
+#: ../cli/src/devices.c:214
+msgid "connecting (configuring)"
+msgstr "connexion (configuration)"
+
+#: ../cli/src/devices.c:216
+msgid "connecting (need authentication)"
+msgstr "connexion (authentification requise)"
+
+#: ../cli/src/devices.c:218
+msgid "connecting (getting IP configuration)"
+msgstr "connexion (obtention de la configuration IP)"
+
+#: ../cli/src/devices.c:220 ../cli/src/network-manager.c:87
+msgid "connected"
+msgstr "connecté"
+
+#: ../cli/src/devices.c:222
+msgid "connection failed"
+msgstr "échec de la connexion"
-#: ../src/nm-netlink-monitor.c:439
+#: ../cli/src/devices.c:245 ../cli/src/devices.c:380
+msgid "Unknown"
+msgstr "Inconnu"
+
+#: ../cli/src/devices.c:277
+msgid "(none)"
+msgstr "(aucun)"
+
+#: ../cli/src/devices.c:302
#, c-format
-msgid "error updating link cache: %s"
-msgstr "erreur lors de la mise à jour du cache de connexion : %s"
+msgid "%s: error converting IP4 address 0x%X"
+msgstr "%s&nbsp;: erreur lors de la conversion de l'adresse IP4 0x%X"
-#: ../src/nm-netlink-monitor.c:497
-msgid "error occurred while waiting for data on socket"
-msgstr "une erreur est survenue pendant l'attente de données sur le connecteur"
+#: ../cli/src/devices.c:349
+#, c-format
+msgid "%u MHz"
+msgstr "%u MHz"
-#: ../src/NetworkManager.c:250
-msgid "Invalid option. Please use --help to see a list of valid options.\n"
-msgstr ""
-"Option non valide. Utilisez --help pour afficher une liste d'options "
-"valides.\n"
+#: ../cli/src/devices.c:350
+#, c-format
+msgid "%u MB/s"
+msgstr "%u Mo/s"
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:89
-msgid "# Created by NetworkManager\n"
-msgstr "# Créé par NetworkManager\n"
+#: ../cli/src/devices.c:359
+msgid "Encrypted: "
+msgstr "Chiffré&nbsp;: "
+
+#: ../cli/src/devices.c:364
+msgid "WEP "
+msgstr "WEP "
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:95
+#: ../cli/src/devices.c:366
+msgid "WPA "
+msgstr "WPA "
+
+#: ../cli/src/devices.c:368
+msgid "WPA2 "
+msgstr "WPA2 "
+
+#: ../cli/src/devices.c:371
+msgid "Enterprise "
+msgstr "Enterprise "
+
+#: ../cli/src/devices.c:380
+msgid "Ad-Hoc"
+msgstr "Ad-Hoc"
+
+#: ../cli/src/devices.c:380
+msgid "Infrastructure"
+msgstr "Infrastructure"
+
+#: ../cli/src/devices.c:442
+#, c-format
+msgid "Error: 'dev list': %s"
+msgstr "Erreur&nbsp;: 'dev list'&nbsp;: %s"
+
+#: ../cli/src/devices.c:444
+#, c-format
+msgid "Error: 'dev list': %s; allowed fields: %s"
+msgstr "Erreur&nbsp;: 'dev list'&nbsp;: %s&nbsp;; champs autorisés&nbsp;: %s"
+
+#: ../cli/src/devices.c:453
+msgid "Device details"
+msgstr "Détails périphérique"
+
+#: ../cli/src/devices.c:483 ../cli/src/devices.c:827
+msgid "(unknown)"
+msgstr "(inconnu)"
+
+#: ../cli/src/devices.c:484
+msgid "unknown)"
+msgstr "inconnu)"
+
+#: ../cli/src/devices.c:510
+#, c-format
+msgid "%u Mb/s"
+msgstr "%u Mo/s"
+
+#. Print header
+#. "WIRED-PROPERTIES"
+#: ../cli/src/devices.c:583
+msgid "on"
+msgstr "marche"
+
+#: ../cli/src/devices.c:583
+msgid "off"
+msgstr "arrêt"
+
+#: ../cli/src/devices.c:710
+#, c-format
+msgid "Error: 'dev status': %s"
+msgstr "Erreur&nbsp;: 'dev status'&nbsp;: %s"
+
+#: ../cli/src/devices.c:712
+#, c-format
+msgid "Error: 'dev status': %s; allowed fields: %s"
+msgstr "Erreur&nbsp;: 'dev status'&nbsp;: %s&nbsp;; champs autorisés&nbsp;: %s"
+
+#: ../cli/src/devices.c:719
+msgid "Status of devices"
+msgstr "Statut des périphériques"
+
+#: ../cli/src/devices.c:747
+#, c-format
+msgid "Error: '%s' argument is missing."
+msgstr "Erreur&nbsp;: L'argument '%s' est manquant."
+
+#: ../cli/src/devices.c:776 ../cli/src/devices.c:915 ../cli/src/devices.c:1035
+#, c-format
+msgid "Error: Device '%s' not found."
+msgstr "Erreur&nbsp;: Périphérique '%s' introuvable."
+
+#: ../cli/src/devices.c:799
+#, c-format
+msgid "Success: Device '%s' successfully disconnected."
+msgstr "Opération réussie&nbsp;: Périphérique '%s' correctement déconnecté."
+
+#: ../cli/src/devices.c:824
+#, c-format
+msgid "Error: Device '%s' (%s) disconnecting failed: %s"
+msgstr "Erreur&nbsp;: Échec de la déconnexion du périphérique '%s' (%s)&nbsp;: %s"
+
+#: ../cli/src/devices.c:832
+#, c-format
+msgid "Device state: %d (%s)\n"
+msgstr "État du périphérique&nbsp;: %d (%s)\n"
+
+#: ../cli/src/devices.c:896
+#, c-format
+msgid "Error: iface has to be specified."
+msgstr "Erreur&nbsp;: iface doit être spécifié."
+
+#: ../cli/src/devices.c:1011
+#, c-format
+msgid "Error: 'dev wifi': %s"
+msgstr "Erreur&nbsp;: 'dev wifi'&nbsp;: %s"
+
+#: ../cli/src/devices.c:1013
+#, c-format
+msgid "Error: 'dev wifi': %s; allowed fields: %s"
+msgstr "Erreur&nbsp;: 'dev wifi'&nbsp;: %s&nbsp;; champs autorisés&nbsp;: %s"
+
+#: ../cli/src/devices.c:1020
+msgid "WiFi scan list"
+msgstr "Liste du balayage WiFi"
+
+#: ../cli/src/devices.c:1055 ../cli/src/devices.c:1109
+#, c-format
+msgid "Error: Access point with hwaddr '%s' not found."
+msgstr "Erreur&nbsp;: Point d'accès avec hwaddr '%s' introuvable."
+
+#: ../cli/src/devices.c:1072
+#, c-format
+msgid "Error: Device '%s' is not a WiFi device."
+msgstr "Erreur&nbsp;: Le périphérique '%s' n'est pas un périphérique WiFi."
+
+#: ../cli/src/devices.c:1136
+#, c-format
+msgid "Error: 'dev wifi' command '%s' is not valid."
+msgstr "Erreur&nbsp;: Commande 'dev wifi' '%s' invalide."
+
+#: ../cli/src/devices.c:1183
+#, c-format
+msgid "Error: 'dev' command '%s' is not valid."
+msgstr "Erreur&nbsp;: Commande 'dev' '%s' invalide."
+
+#: ../cli/src/network-manager.c:35
+msgid "RUNNING"
+msgstr "EN COURS D'EXÉCUTION"
+
+#. 1
+#: ../cli/src/network-manager.c:37
+msgid "WIFI-HARDWARE"
+msgstr "MATÉRIEL-WIFI"
+
+#. 2
+#: ../cli/src/network-manager.c:38
+msgid "WIFI"
+msgstr "WIFI"
+
+#. 3
+#: ../cli/src/network-manager.c:39
+msgid "WWAN-HARDWARE"
+msgstr "MATÉRIEL-WWAN"
+
+#. 4
+#: ../cli/src/network-manager.c:40
+msgid "WWAN"
+msgstr "WWAN"
+
+#: ../cli/src/network-manager.c:62
#, c-format
msgid ""
-"# Merged from %s\n"
+"Usage: nmcli nm { COMMAND | help }\n"
+"\n"
+" COMMAND := { status | sleep | wakeup | wifi | wwan }\n"
+"\n"
+" status\n"
+" sleep\n"
+" wakeup\n"
+" wifi [on|off]\n"
+" wwan [on|off]\n"
"\n"
msgstr ""
-"# Fusionné depuis %s\n"
+"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"
-#: ../src/named-manager/nm-named-manager.c:256
-msgid "NOTE: the libc resolver may not support more than 3 nameservers."
+#: ../cli/src/network-manager.c:83
+msgid "asleep"
+msgstr "veille"
+
+#: ../cli/src/network-manager.c:85
+msgid "connecting"
+msgstr "connexion"
+
+#: ../cli/src/network-manager.c:125
+#, c-format
+msgid "Error: 'nm status': %s"
+msgstr "Erreur&nbsp;: 'nm status'&nbsp;: %s"
+
+#: ../cli/src/network-manager.c:127
+#, c-format
+msgid "Error: 'nm status': %s; allowed fields: %s"
+msgstr "Erreur&nbsp;: 'nm status'&nbsp;: %s&nbsp;; champs autorisés&nbsp;: %s"
+
+#: ../cli/src/network-manager.c:134
+msgid "NetworkManager status"
+msgstr "État 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
+msgid "enabled"
+msgstr "activé"
+
+#: ../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
+msgid "disabled"
+msgstr "désactivé"
+
+#: ../cli/src/network-manager.c:148
+msgid "running"
+msgstr "actif"
+
+#: ../cli/src/network-manager.c:148
+msgid "not running"
+msgstr "inactif"
+
+#: ../cli/src/network-manager.c:201 ../cli/src/network-manager.c:233
+#, c-format
+msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
+msgstr "Erreur&nbsp;: Valeur '--fields' '%s' est invalide&nbsp;; champs autorisés&nbsp;: %s"
+
+#: ../cli/src/network-manager.c:209
+msgid "WiFi enabled"
+msgstr "WiFi activé"
+
+#: ../cli/src/network-manager.c:220
+#, c-format
+msgid "Error: invalid 'wifi' parameter: '%s'."
+msgstr "Erreur&nbsp;: Paramètre 'wifi' invalide&nbsp;: '%s'."
+
+#: ../cli/src/network-manager.c:241
+msgid "WWAN enabled"
+msgstr "WWAN activé"
+
+#: ../cli/src/network-manager.c:252
+#, c-format
+msgid "Error: invalid 'wwan' parameter: '%s'."
+msgstr "Erreur&nbsp;: Paramètre 'wwan' invalide&nbsp;: '%s'."
+
+#: ../cli/src/network-manager.c:263
+#, c-format
+msgid "Error: 'nm' command '%s' is not valid."
+msgstr "Erreur&nbsp;: Commande 'nm' '%s' invalide."
+
+#: ../cli/src/nmcli.c:69
+#, 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] <field1,field2,...>|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 ""
-"NOTE : il se peut que le solveur libc ne prenne pas en charge plus de 3 serveurs de noms."
+"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
+"\n"
+"OPTIONS\n"
+" -t[erse] sortie laconique\n"
+" -p[retty] sortie formatée\n"
+" -m[ode] tabular|multiline mode de sortie\n"
+" -f[ields] <field1,field2,...>|all|common spécifie les champs à sortir\n"
+" -e[scape] yes|no échapper les séprateurs de colonnes dans les valeurs\n"
+" -v[ersion] afficher la version du programme\n"
+" -h[elp] imprimer l'aide\n"
+"\n"
+"OBJECT\n"
+" nm statut de NetworkManager\n"
+" con connexions de NetworkManager\n"
+" dev périphériques gérés par NetworkManager\n"
+"\n"
-#: ../src/named-manager/nm-named-manager.c:258
-msgid "The nameservers listed below may not be recognized."
-msgstr "Les serveurs de noms listés ci-dessous peuvent ne pas être reconnus."
+#: ../cli/src/nmcli.c:113
+#, c-format
+msgid "Error: Object '%s' is unknown, try 'nmcli help'."
+msgstr "Erreur&nbsp;: Objet '%s' inconnu, essayez 'nmcli help'."
-#: ../system-settings/src/main.c:366
+#: ../cli/src/nmcli.c:143
#, c-format
-msgid "Auto %s"
-msgstr "Auto %s"
+msgid "Error: Option '--terse' is specified the second time."
+msgstr "Erreur&nbsp;: Option '--terse' est spécifiée la seconde fois."
+
+#: ../cli/src/nmcli.c:148
+#, c-format
+msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
+msgstr "Erreur&nbsp;: Option '--terse' est mutuellement exclusive avec '--pretty'."
+
+#: ../cli/src/nmcli.c:156
+#, c-format
+msgid "Error: Option '--pretty' is specified the second time."
+msgstr "Erreur&nbsp;: Option '--pretty' est spécifiée la seconde fois."
+
+#: ../cli/src/nmcli.c:161
+#, c-format
+msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
+msgstr "Erreur&nbsp;: Option '--pretty' est mutuellement exclusive avec '--terse'."
+
+#: ../cli/src/nmcli.c:171 ../cli/src/nmcli.c:187
+#, c-format
+msgid "Error: missing argument for '%s' option."
+msgstr "Erreur&nbsp;: argument manquant pour l'option '%s'."
+
+#: ../cli/src/nmcli.c:180 ../cli/src/nmcli.c:196
+#, c-format
+msgid "Error: '%s' is not valid argument for '%s' option."
+msgstr "Erreur&nbsp;: '%s' est un argument invalide pour l'option '%s'."
+
+#: ../cli/src/nmcli.c:203
+#, c-format
+msgid "Error: fields for '%s' options are missing."
+msgstr "Erreur&nbsp;: Les champs pour les options '%s' sont manquants."
+
+#: ../cli/src/nmcli.c:209
+#, c-format
+msgid "nmcli tool, version %s\n"
+msgstr "outil nmcli, version %s\n"
+
+#: ../cli/src/nmcli.c:215
+#, c-format
+msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
+msgstr "Erreur&nbsp;: Option '%s' inconnue, essayez 'nmcli -help'."
+
+#: ../cli/src/nmcli.c:234
+#, c-format
+msgid "Caught signal %d, shutting down..."
+msgstr "Signal %d reçu, arrêt en cours..."
+
+#: ../cli/src/nmcli.c:259
+#, c-format
+msgid "Error: Could not connect to NetworkManager."
+msgstr "Erreur&nbsp;: Impossible de connecter à NetworkManager."
+
+#: ../cli/src/nmcli.c:275
+msgid "Success"
+msgstr "Réussite"
+
+#: ../cli/src/settings.c:407
+#, c-format
+msgid "%d (hex-ascii-key)"
+msgstr "%d (hex-ascii-key)"
+
+#: ../cli/src/settings.c:409
+#, c-format
+msgid "%d (104/128-bit passphrase)"
+msgstr "%d (104/128-bit passphrase)"
+
+#: ../cli/src/settings.c:412
+#, c-format
+msgid "%d (unknown)"
+msgstr "%d (inconnu)"
+
+#: ../cli/src/settings.c:438
+msgid "0 (unknown)"
+msgstr "0 (inconnu)"
+
+#: ../cli/src/settings.c:444
+msgid "any, "
+msgstr "any, "
+
+#: ../cli/src/settings.c:446
+msgid "900 MHz, "
+msgstr "900 MHz, "
+
+#: ../cli/src/settings.c:448
+msgid "1800 MHz, "
+msgstr "1800 MHz, "
+
+#: ../cli/src/settings.c:450
+msgid "1900 MHz, "
+msgstr "1900 MHz, "
+
+#: ../cli/src/settings.c:452
+msgid "850 MHz, "
+msgstr "850 MHz, "
+
+#: ../cli/src/settings.c:454
+msgid "WCDMA 3GPP UMTS 2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../libnm-util/crypto.c:125
+#: ../cli/src/settings.c:456
+msgid "WCDMA 3GPP UMTS 1800 MHz, "
+msgstr "WCDMA 3GPP UMTS 1800 MHz, "
+
+#: ../cli/src/settings.c:458
+msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
+
+#: ../cli/src/settings.c:460
+msgid "WCDMA 3GPP UMTS 800 MHz, "
+msgstr "WCDMA 3GPP UMTS 800 MHz, "
+
+#: ../cli/src/settings.c:462
+msgid "WCDMA 3GPP UMTS 850 MHz, "
+msgstr "WCDMA 3GPP UMTS 850 MHz, "
+
+#: ../cli/src/settings.c:464
+msgid "WCDMA 3GPP UMTS 900 MHz, "
+msgstr "WCDMA 3GPP UMTS 900 MHz, "
+
+#: ../cli/src/settings.c:466
+msgid "WCDMA 3GPP UMTS 1700 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700 MHz, "
+
+#: ../cli/src/settings.c:546 ../cli/src/settings.c:708
+msgid "auto"
+msgstr "auto"
+
+#: ../cli/src/settings.c:704 ../cli/src/settings.c:707 ../cli/src/utils.c:172
+msgid "not set"
+msgstr "non défini"
+
+#: ../cli/src/utils.c:124
+#, c-format
+msgid "field '%s' has to be alone"
+msgstr "champ '%s' doit être seul"
+
+#: ../cli/src/utils.c:127
+#, c-format
+msgid "invalid field '%s'"
+msgstr "champ '%s' invalide"
+
+#: ../cli/src/utils.c:146
+#, c-format
+msgid "Option '--terse' requires specifying '--fields'"
+msgstr "Option '--terse' requiert la spécification de '--fields'"
+
+#: ../cli/src/utils.c:150
+#, c-format
+msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
+msgstr "Option '--terse' requiert des valeurs d'options '--fields' spécifiques, pas '%s'"
+
+#: ../libnm-util/crypto.c:120
#, c-format
msgid "PEM key file had no end tag '%s'."
msgstr "Le fichier de clé PEM n'a pas de balise de fin « %s »."
-#: ../libnm-util/crypto.c:135
+#: ../libnm-util/crypto.c:130
+#, c-format
msgid "Doesn't look like a PEM private key file."
msgstr "Cela ne semble pas être un fichier de clé privée PEM."
-#: ../libnm-util/crypto.c:143
+#: ../libnm-util/crypto.c:138
+#, c-format
msgid "Not enough memory to store PEM file data."
msgstr "Mémoire insuffisante pour contenir les données du fichier PEM."
-#: ../libnm-util/crypto.c:159
+#: ../libnm-util/crypto.c:154
+#, c-format
msgid "Malformed PEM file: Proc-Type was not first tag."
msgstr "Fichier PEM incorrect : Proc-Type n'est pas la première balise."
-#: ../libnm-util/crypto.c:167
+#: ../libnm-util/crypto.c:162
#, c-format
msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
msgstr "Fichier PEM incorrect : étiquette Proc-Type « %s » inconnue."
-#: ../libnm-util/crypto.c:177
+#: ../libnm-util/crypto.c:172
+#, c-format
msgid "Malformed PEM file: DEK-Info was not the second tag."
msgstr "Fichier PEM incorrect : DEK-Info n'est pas la deuxième balise."
-#: ../libnm-util/crypto.c:188
+#: ../libnm-util/crypto.c:183
+#, c-format
msgid "Malformed PEM file: no IV found in DEK-Info tag."
msgstr "Fichier PEM incorrect : aucun IV trouvé dans la balise DEK-Info."
-#: ../libnm-util/crypto.c:195
+#: ../libnm-util/crypto.c:190
+#, c-format
msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
-msgstr "Fichier PEM incorrect : format de IV invalide dans la balise DEK-Info."
+msgstr "Fichier PEM incorrect : format IV invalide dans la balise DEK-Info."
-#: ../libnm-util/crypto.c:208
+#: ../libnm-util/crypto.c:203
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
msgstr "Fichier PEM incorrect : chiffre de clé privée « %s » inconnu."
-#: ../libnm-util/crypto.c:227
+#: ../libnm-util/crypto.c:222
+#, c-format
msgid "Could not decode private key."
msgstr "Impossible de décoder la clé privée."
-#: ../libnm-util/crypto.c:271
+#: ../libnm-util/crypto.c:267
#, c-format
msgid "PEM certificate '%s' had no end tag '%s'."
msgstr "Le certificat PEM « %s » n'a pas de balise de fin « %s »."
-#: ../libnm-util/crypto.c:281
+#: ../libnm-util/crypto.c:277
+#, c-format
msgid "Failed to decode certificate."
msgstr "Impossible de décoder le certificat."
-#: ../libnm-util/crypto.c:290 ../libnm-util/crypto.c:298
+#: ../libnm-util/crypto.c:286
+#, c-format
msgid "Not enough memory to store certificate data."
msgstr "Mémoire insuffisante pour contenir les données du certificat."
-#: ../libnm-util/crypto.c:328
+#: ../libnm-util/crypto.c:294
+#, c-format
+msgid "Not enough memory to store file data."
+msgstr "Mémoire insuffisante pour contenir les données du fichier."
+
+#: ../libnm-util/crypto.c:324
+#, c-format
msgid "IV must be an even number of bytes in length."
-msgstr "La longueur en octets de IV doit être paire."
+msgstr "La longueur en octets d'IV doit être paire."
-#: ../libnm-util/crypto.c:337
+#: ../libnm-util/crypto.c:333
+#, c-format
msgid "Not enough memory to store the IV."
-msgstr "Mémoire insuffisante pour contenir IV."
+msgstr "Mémoire insuffisante pour contenir l'IV."
-#: ../libnm-util/crypto.c:348
+#: ../libnm-util/crypto.c:344
+#, c-format
msgid "IV contains non-hexadecimal digits."
-msgstr "IV contient des chiffres non-hexadécimaux."
+msgstr "L'IV contient des chiffres non-hexadécimaux."
-#: ../libnm-util/crypto.c:386 ../libnm-util/crypto_gnutls.c:143
-#: ../libnm-util/crypto_nss.c:157
+#: ../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
#, c-format
msgid "Private key cipher '%s' was unknown."
msgstr "Le chiffre « %s » de la clé privée est inconnu."
-#: ../libnm-util/crypto.c:395
-msgid "Not enough memory to create private key decryption key."
-msgstr ""
-"Mémoire insuffisante pour créer une clé de déchiffrement de la clé privée."
+#: ../libnm-util/crypto.c:391
+#, c-format
+msgid "Not enough memory to decrypt private key."
+msgstr "Mémoire insuffisante pour contenir la clé privée déchiffrée."
+
+#: ../libnm-util/crypto.c:511
+#, c-format
+msgid "Unable to determine private key type."
+msgstr "Impossible de déterminer le type de la clé privée."
-#: ../libnm-util/crypto.c:513
+#: ../libnm-util/crypto.c:530
+#, c-format
msgid "Not enough memory to store decrypted private key."
msgstr "Mémoire insuffisante pour contenir la clé privée déchiffrée."
-#: ../libnm-util/crypto_gnutls.c:45
+#: ../libnm-util/crypto_gnutls.c:49
msgid "Failed to initialize the crypto engine."
msgstr "L'initialisation du moteur de chiffrement a échoué."
-#: ../libnm-util/crypto_gnutls.c:89
+#: ../libnm-util/crypto_gnutls.c:93
#, c-format
msgid "Failed to initialize the MD5 engine: %s / %s."
msgstr "L'initialisation du moteur MD5 a échoué : %s / %s."
-#: ../libnm-util/crypto_gnutls.c:152 ../libnm-util/crypto_nss.c:166
+#: ../libnm-util/crypto_gnutls.c:156
+#, c-format
+msgid "Invalid IV length (must be at least %zd)."
+msgstr "Longueur IV invalide (minimum %zd)."
+
+#: ../libnm-util/crypto_gnutls.c:165 ../libnm-util/crypto_nss.c:188
+#, c-format
msgid "Not enough memory for decrypted key buffer."
msgstr "Mémoire insuffisante pour le tampon de clé déchiffrée."
-#: ../libnm-util/crypto_gnutls.c:160
+#: ../libnm-util/crypto_gnutls.c:173
#, c-format
msgid "Failed to initialize the decryption cipher context: %s / %s."
-msgstr ""
-"L'initialisation du contexte du chiffre de déchiffrement a échoué : %s / %s."
+msgstr "L'initialisation du contexte du chiffre de déchiffrement a échoué : %s / %s."
-#: ../libnm-util/crypto_gnutls.c:169
+#: ../libnm-util/crypto_gnutls.c:182
#, c-format
msgid "Failed to set symmetric key for decryption: %s / %s."
-msgstr ""
-"La définition de la clé symétrique pour le déchiffrement a échoué : %s / %s."
+msgstr "La définition de la clé symétrique pour le déchiffrement a échoué : %s / %s."
-#: ../libnm-util/crypto_gnutls.c:178
+#: ../libnm-util/crypto_gnutls.c:191
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
-msgstr "La définition de IV pour le déchiffrement a échoué : %s / %s."
+msgstr "La définition d'IV pour le déchiffrement a échoué : %s / %s."
-#: ../libnm-util/crypto_gnutls.c:187
+#: ../libnm-util/crypto_gnutls.c:200
#, c-format
msgid "Failed to decrypt the private key: %s / %s."
msgstr "Le déchiffrement de la clé privée a échoué : %s / %s."
-#: ../libnm-util/crypto_gnutls.c:225
+#: ../libnm-util/crypto_gnutls.c:210 ../libnm-util/crypto_nss.c:267
+#, c-format
+msgid "Failed to decrypt the private key: unexpected padding length."
+msgstr ""
+"Le déchiffrement de la clé privée a échoué&nbsp;: Longueur de remplissage "
+"inattendue."
+
+#: ../libnm-util/crypto_gnutls.c:221 ../libnm-util/crypto_nss.c:278
+#, c-format
+msgid "Failed to decrypt the private key."
+msgstr "Le déchiffrement de la clé privée a échoué."
+
+#: ../libnm-util/crypto_gnutls.c:286 ../libnm-util/crypto_nss.c:356
+#, c-format
+msgid "Could not allocate memory for encrypting."
+msgstr "Allocation de mémoire pour chiffrement impossible."
+
+#: ../libnm-util/crypto_gnutls.c:294
+#, c-format
+msgid "Failed to initialize the encryption cipher context: %s / %s."
+msgstr ""
+"L'initialisation du contexte du cryptage de chiffrement a échoué&nbsp;: %s / "
+"%s."
+
+#: ../libnm-util/crypto_gnutls.c:303
+#, c-format
+msgid "Failed to set symmetric key for encryption: %s / %s."
+msgstr ""
+"La définition de la clé symétrique pour le chiffrement a échoué&nbsp;: %s / %"
+"s."
+
+#: ../libnm-util/crypto_gnutls.c:313
+#, c-format
+msgid "Failed to set IV for encryption: %s / %s."
+msgstr "La définition d'IV pour le chiffrement a échoué&nbsp;: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:322
+#, c-format
+msgid "Failed to encrypt the data: %s / %s."
+msgstr "Le chiffrement des données a échoué&nbsp;; %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:362
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "Erreur lors de l'initialisation des données du certificat : %s"
-#: ../libnm-util/crypto_gnutls.c:237
+#: ../libnm-util/crypto_gnutls.c:384
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "Impossible de décoder le certificat : %s"
-#: ../libnm-util/crypto_nss.c:52
+#: ../libnm-util/crypto_gnutls.c:408
+#, c-format
+msgid "Couldn't initialize PKCS#12 decoder: %s"
+msgstr "L'initialisation du décodeur PKCS#12 a échoué&nbsp;: %s"
+
+#: ../libnm-util/crypto_gnutls.c:421
+#, c-format
+msgid "Couldn't decode PKCS#12 file: %s"
+msgstr "Impossible de décoder le fichier PKCS#12&nbsp;: %s"
+
+#: ../libnm-util/crypto_gnutls.c:433
+#, c-format
+msgid "Couldn't verify PKCS#12 file: %s"
+msgstr "Impossible de vérifier le fichier PKCS#12&nbsp;: %s"
+
+#: ../libnm-util/crypto_nss.c:56
#, c-format
msgid "Failed to initialize the crypto engine: %d."
msgstr "L'initialisation du moteur de chiffrement a échoué : %d."
-#: ../libnm-util/crypto_nss.c:98
+#: ../libnm-util/crypto_nss.c:111
#, c-format
msgid "Failed to initialize the MD5 context: %d."
msgstr "L'initialisation du contexte MD5 a échoué : %d."
-#: ../libnm-util/crypto_nss.c:174
+#: ../libnm-util/crypto_nss.c:179
+#, c-format
+msgid "Invalid IV length (must be at least %d)."
+msgstr "Longueur IV invalide (minimum %d)."
+
+#: ../libnm-util/crypto_nss.c:196
+#, c-format
msgid "Failed to initialize the decryption cipher slot."
-msgstr ""
-"L'initialisation de l'emplacement du chiffre de déchiffrement a échoué."
+msgstr "L'initialisation de l'emplacement du chiffre de déchiffrement a échoué."
-#: ../libnm-util/crypto_nss.c:184
+#: ../libnm-util/crypto_nss.c:206
+#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "La définition de la clé symétrique pour le déchiffrement a échoué."
-#: ../libnm-util/crypto_nss.c:194
+#: ../libnm-util/crypto_nss.c:216
+#, c-format
msgid "Failed to set IV for decryption."
-msgstr "La définition de IV pour le déchiffrement a échoué."
+msgstr "La définition d'IV pour le déchiffrement a échoué."
-#: ../libnm-util/crypto_nss.c:202
+#: ../libnm-util/crypto_nss.c:224
+#, c-format
msgid "Failed to initialize the decryption context."
msgstr "L'initialisation du contexte de déchiffrement a échoué."
-#: ../libnm-util/crypto_nss.c:215
+#: ../libnm-util/crypto_nss.c:237
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "Le déchiffrement de la clé privée a échoué : %d."
-#: ../libnm-util/crypto_nss.c:227
+#: ../libnm-util/crypto_nss.c:245
+#, c-format
+msgid "Failed to decrypt the private key: decrypted data too large."
+msgstr ""
+"Le déchiffrement de la clé privée a échoué&nbsp;: les données déchiffrées "
+"sont trop longues."
+
+#: ../libnm-util/crypto_nss.c:256
#, c-format
msgid "Failed to finalize decryption of the private key: %d."
msgstr "La finalisation du déchiffrement de la clé privée a échoué : %d."
-#: ../libnm-util/crypto_nss.c:271
+#: ../libnm-util/crypto_nss.c:364
+#, c-format
+msgid "Failed to initialize the encryption cipher slot."
+msgstr "L'initialisation de l'emplacement du cryptage de chiffrement a échoué."
+
+#: ../libnm-util/crypto_nss.c:372
+#, c-format
+msgid "Failed to set symmetric key for encryption."
+msgstr "La définition de la clé symétrique pour le chiffrement a échoué."
+
+#: ../libnm-util/crypto_nss.c:380
+#, c-format
+msgid "Failed to set IV for encryption."
+msgstr "La définition d'IV pour le déchiffrement a échoué."
+
+#: ../libnm-util/crypto_nss.c:388
+#, c-format
+msgid "Failed to initialize the encryption context."
+msgstr "L'initialisation du contexte de chiffrement a échoué."
+
+#: ../libnm-util/crypto_nss.c:396
+#, c-format
+msgid "Failed to encrypt: %d."
+msgstr "Le chiffrement a échoué : %d."
+
+#: ../libnm-util/crypto_nss.c:404
+#, c-format
+msgid "Unexpected amount of data after encrypting."
+msgstr "Quantité de données inattendue après chiffrement."
+
+#: ../libnm-util/crypto_nss.c:447
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "Impossible de décoder le certificat : %d"
+
+#: ../libnm-util/crypto_nss.c:482
+#, c-format
+msgid "Couldn't convert password to UCS2: %d"
+msgstr "Impossible de convertir le mot de passe en UCS2&nbsp;: %d."
+
+#: ../libnm-util/crypto_nss.c:510
+#, c-format
+msgid "Couldn't initialize PKCS#12 decoder: %d"
+msgstr "Impossible d'initialiser le décodeur PKCS#12&nbsp;: %d"
+
+#: ../libnm-util/crypto_nss.c:519
+#, c-format
+msgid "Couldn't decode PKCS#12 file: %d"
+msgstr "Impossible de décoder le fichier PKCS#12&nbsp;: %d"
+
+#: ../libnm-util/crypto_nss.c:528
+#, c-format
+msgid "Couldn't verify PKCS#12 file: %d"
+msgstr "Impossible de vérifier le fichier PKCS#12&nbsp;: %d"
+
+#: ../libnm-util/crypto_nss.c:557
+msgid "Could not generate random data."
+msgstr "Impossible des données aléatoires."
+
+#: ../libnm-util/nm-utils.c:1925
+#, c-format
+msgid "Not enough memory to make encryption key."
+msgstr "Mémoire insuffisante pour créer une clé de chiffrement."
+
+#: ../libnm-util/nm-utils.c:2035
+msgid "Could not allocate memory for PEM file creation."
+msgstr "Allocation de mémoire pour la création du fichier PEM impossible."
+
+#: ../libnm-util/nm-utils.c:2047
+#, c-format
+msgid "Could not allocate memory for writing IV to PEM file."
+msgstr "Allocation de mémoire pour l'écriture d'IV sur le fichier PEM impossible."
+
+#: ../libnm-util/nm-utils.c:2059
+#, c-format
+msgid "Could not allocate memory for writing encrypted key to PEM file."
+msgstr ""
+"Allocation de mémoire pour l'écriture de la clé chiffrée sur le fichier PEM "
+"impossible."
+
+#: ../libnm-util/nm-utils.c:2078
+#, c-format
+msgid "Could not allocate memory for PEM file data."
+msgstr "Allocation de mémoire pour les données du fichier PEM impossible."
+
+#: ../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 "erreur lors du traitement du message netlink : %s"
+
+#: ../src/nm-netlink-monitor.c:214
+msgid "error occurred while waiting for data on socket"
+msgstr "une erreur est survenue pendant l'attente de données sur le connecteur"
+
+#: ../src/nm-netlink-monitor.c:254
+#, c-format
+msgid "unable to connect to netlink for monitoring link status: %s"
+msgstr ""
+"impossible de se connecter à netlink pour surveiller l'état de la "
+"connexion : %s"
+
+#: ../src/nm-netlink-monitor.c:265
+#, c-format
+msgid "unable to enable netlink handle credential passing: %s"
+msgstr "impossible d'activer le passage de crédentiels de gestion netlink&nbsp;: %s"
+
+#: ../src/nm-netlink-monitor.c:291 ../src/nm-netlink-monitor.c:353
+#, c-format
+msgid "unable to allocate netlink handle for monitoring link status: %s"
+msgstr ""
+"impossible d'allouer un gestionnaire netlink pour surveiller l'état de la "
+"connexion : %s"
+
+#: ../src/nm-netlink-monitor.c:376
+#, c-format
+msgid "unable to allocate netlink link cache for monitoring link status: %s"
+msgstr ""
+"impossible d'allouer un cache de connexion netlink pour surveiller l'état de "
+"la connexion : %s"
+
+#: ../src/nm-netlink-monitor.c:502
+#, c-format
+msgid "unable to join netlink group: %s"
+msgstr "impossible de joindre le groupe netlink&nbsp;: %s"
+
+#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642
+#, c-format
+msgid "error updating link cache: %s"
+msgstr "erreur lors de la mise à jour du cache de connexion : %s"
+
+#: ../src/main.c:502
+#, c-format
+msgid "Invalid option. Please use --help to see a list of valid options.\n"
+msgstr ""
+"Option non valide. Utilisez --help pour afficher une liste d'options "
+"valides.\n"
+
+#: ../src/main.c:562
+#, c-format
+msgid "%s. Please use --help to see a list of valid options.\n"
+msgstr "%s. Veuillez utiliser --help pour afficher une liste d'options valides.\n"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:325
+msgid "# Created by NetworkManager\n"
+msgstr "# Créé par NetworkManager\n"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:341
+#, c-format
+msgid ""
+"# Merged from %s\n"
+"\n"
+msgstr ""
+"# Fusionné depuis %s\n"
+"\n"
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:279
+msgid "no usable DHCP client could be found."
+msgstr "aucun client DHCP utilisable n'a pu être trouvé."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:288
+msgid "'dhclient' could be found."
+msgstr "'dhclient' a été trouvé.be found."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:298
+msgid "'dhcpcd' could be found."
+msgstr "'dhcpcd' introuvable."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:306
+#, c-format
+msgid "unsupported DHCP client '%s'"
+msgstr "client DHCP '%s' non pris en charge"
+
+#: ../src/logging/nm-logging.c:146
+#, c-format
+msgid "Unknown log level '%s'"
+msgstr "Niveau de journalisation inconnu '%s'"
+
+#: ../src/logging/nm-logging.c:171
+#, c-format
+msgid "Unknown log domain '%s'"
+msgstr "Domaine de journalisation inconnu '%s'"
+
+#: ../src/dns-manager/nm-dns-manager.c:343
+msgid "NOTE: the libc resolver may not support more than 3 nameservers."
+msgstr ""
+"NOTE : il se peut que le solveur libc ne prenne pas en charge plus de 3 "
+"serveurs de noms."
+
+#: ../src/dns-manager/nm-dns-manager.c:345
+msgid "The nameservers listed below may not be recognized."
+msgstr "Les serveurs de noms listés ci-dessous peuvent ne pas être reconnus."
+
+#: ../src/system-settings/nm-default-wired-connection.c:157
+#, c-format
+msgid "Auto %s"
+msgstr "Auto %s"
+
+#: ../system-settings/plugins/ifcfg-rh/reader.c:3256
+msgid "System"
+msgstr "Système"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
+msgid "Connection sharing via a protected WiFi network"
+msgstr "Partage de connexion via un réseau WiFi protégé"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
+msgid "Connection sharing via an open WiFi network"
+msgstr "Partage de connexion via un réseau WiFi ouvert"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
+msgid "Modify persistent system hostname"
+msgstr "Modifier le nom d'hôte du système persistant"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
+msgid "Modify system connections"
+msgstr "Modifier les connexions système"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
+msgid "System policy prevents modification of system settings"
+msgstr "La stratégie du système empêche toute modification des paramètres du système"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
+msgid "System policy prevents modification of the persistent system hostname"
+msgstr ""
+"La stratégie du système empêche toute modification du nom d'hôte du système "
+"persistant"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
+msgid "System policy prevents sharing connections via a protected WiFi network"
+msgstr ""
+"La stratégie du système empêche tout partage des connexions via un réseau "
+"WiFi protégé"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
+msgid "System policy prevents sharing connections via an open WiFi network"
+msgstr ""
+"La stratégie du système empêche tout partage des connexions via un réseau "
+"WiFi ouvert"
+
diff --git a/po/gl.po b/po/gl.po
index ca5d3d53cd..4adefda785 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -7,15 +7,1170 @@
msgid ""
msgstr ""
"Project-Id-Version: gl\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=NetworkManager&component=general\n"
-"POT-Creation-Date: 2009-09-29 03:25+0000\n"
-"PO-Revision-Date: 2010-02-25 11:06+0100\n"
-"Last-Translator: Miguel Anxo Bouzada <mbouzada@gmail.com>\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 <Unknown>\n"
"Language-Team: Galego <proxecto@trasno.net>\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"
+"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
+msgid "NAME"
+msgstr "NOME"
+
+#. 0
+#: ../cli/src/connections.c:61 ../cli/src/connections.c:76
+msgid "UUID"
+msgstr "UUID"
+
+#. 1
+#: ../cli/src/connections.c:62
+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
+msgid "DEFAULT"
+msgstr "PREDEFINIDO"
+
+#. 4
+#: ../cli/src/connections.c:65
+msgid "DBUS-SERVICE"
+msgstr "DBUS-SERVICE"
+
+#. 5
+#: ../cli/src/connections.c:66
+msgid "SPEC-OBJECT"
+msgstr "SPEC-OBXECTO"
+
+#. 6
+#: ../cli/src/connections.c:67
+msgid "VPN"
+msgstr "VPN"
+
+#. 1
+#. 0
+#. 1
+#: ../cli/src/connections.c:77 ../cli/src/devices.c:62 ../cli/src/devices.c:90
+msgid "TYPE"
+msgstr "TIPO"
+
+#. 3
+#: ../cli/src/connections.c:79
+msgid "TIMESTAMP"
+msgstr "MARCADETEMPO"
+
+#. 4
+#: ../cli/src/connections.c:80
+msgid "TIMESTAMP-REAL"
+msgstr "TIMESTAMP-REAL"
+
+#. 5
+#: ../cli/src/connections.c:81
+msgid "AUTOCONNECT"
+msgstr "AUTOCONECTAR"
+
+#. 6
+#: ../cli/src/connections.c:82
+msgid "READONLY"
+msgstr "SO-LECTURA"
+
+#: ../cli/src/connections.c:158
+#, c-format
+msgid ""
+"Usage: nmcli con { COMMAND | help }\n"
+" COMMAND := { list | status | up | down }\n"
+"\n"
+" list [id <id> | uuid <id> | system | user]\n"
+" status\n"
+" up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout "
+"<timeout>]\n"
+" down id <id> | uuid <id>\n"
+msgstr ""
+"Uso: nmcli con { ORDE | help }\n"
+" ORDE := { list | status | up | down }\n"
+"\n"
+" list [id <id> | uuid <id> | system | user]\n"
+" status\n"
+" up id <id> | uuid <id> [iface <interface>] [ap <hwaddr>] [--nowait] [--"
+"timeout <timeout>]\n"
+" down id <id> | uuid <id>\n"
+
+#: ../cli/src/connections.c:198 ../cli/src/connections.c:537
+#, c-format
+msgid "Error: 'con list': %s"
+msgstr "Erro: 'con list': %s"
+
+#: ../cli/src/connections.c:200 ../cli/src/connections.c:539
+#, c-format
+msgid "Error: 'con list': %s; allowed fields: %s"
+msgstr "Erro: 'con list': %s; campos permitidos: %s"
+
+#: ../cli/src/connections.c:208
+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
+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
+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
+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: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
+#, c-format
+msgid "Error: %s argument is missing."
+msgstr "Erro: falta o argumento %s"
+
+#: ../cli/src/connections.c:488
+#, 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
+#, c-format
+msgid "Unknown parameter: %s\n"
+msgstr "Parámetros descoñecidos: %s\n"
+
+#: ../cli/src/connections.c:529
+#, 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
+#, c-format
+msgid "Error: %s."
+msgstr "Erro: %s."
+
+#: ../cli/src/connections.c:650
+#, c-format
+msgid "Error: 'con status': %s"
+msgstr "Erro: «con status»: %s"
+
+#: ../cli/src/connections.c:652
+#, c-format
+msgid "Error: 'con status': %s; allowed fields: %s"
+msgstr "Erro: «con status»: %s; campos permitidos: %s"
+
+#: ../cli/src/connections.c:659
+msgid "Active connections"
+msgstr "Conexións activas"
+
+#: ../cli/src/connections.c:1027
+#, c-format
+msgid "no active connection on device '%s'"
+msgstr "non hai conexións activas no dispositivo «%s»"
+
+#: ../cli/src/connections.c:1035
+#, c-format
+msgid "no active connection or device"
+msgstr "non hai conexións activas ou dispositivo"
+
+#: ../cli/src/connections.c:1085
+#, 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
+#, 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
+msgid "activating"
+msgstr "activando"
+
+#: ../cli/src/connections.c:1100
+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
+msgid "unknown"
+msgstr "descoñecido"
+
+#: ../cli/src/connections.c:1112
+msgid "VPN connecting (prepare)"
+msgstr "Conectándose á VPN (preparando)"
+
+#: ../cli/src/connections.c:1114
+msgid "VPN connecting (need authentication)"
+msgstr "Conexión VPN (requírese autenticación)"
+
+#: ../cli/src/connections.c:1116
+msgid "VPN connecting"
+msgstr "Conexión VPN"
+
+#: ../cli/src/connections.c:1118
+msgid "VPN connecting (getting IP configuration)"
+msgstr "Conectándose á VPN (obtendo a configuración de IP)"
+
+#: ../cli/src/connections.c:1120
+msgid "VPN connected"
+msgstr "Conectado á VPN"
+
+#: ../cli/src/connections.c:1122
+msgid "VPN connection failed"
+msgstr "Produciuse un fallo ao conectarse á VPN"
+
+#: ../cli/src/connections.c:1124
+msgid "VPN disconnected"
+msgstr "Desconectado á VPN"
+
+#: ../cli/src/connections.c:1135
+msgid "unknown reason"
+msgstr "razón descoñecida"
+
+#: ../cli/src/connections.c:1137
+msgid "none"
+msgstr "ninguna"
+
+#: ../cli/src/connections.c:1139
+msgid "the user was disconnected"
+msgstr "o usuario desconectouse"
+
+#: ../cli/src/connections.c:1141
+msgid "the base network connection was interrupted"
+msgstr "a conexión de rede base foi interrompida"
+
+#: ../cli/src/connections.c:1143
+msgid "the VPN service stopped unexpectedly"
+msgstr "o servizo de VPN deteuse de forma inesperada"
+
+#: ../cli/src/connections.c:1145
+msgid "the VPN service returned invalid configuration"
+msgstr "o servizo de VPN devolveu unha configuración non válida"
+
+#: ../cli/src/connections.c:1147
+msgid "the connection attempt timed out"
+msgstr "o intento de conexión superou o tempo de espera máximo"
+
+#: ../cli/src/connections.c:1149
+msgid "the VPN service did not start in time"
+msgstr "o servizo de VPN non se iniciou a tempo"
+
+#: ../cli/src/connections.c:1151
+msgid "the VPN service failed to start"
+msgstr "o servizo de VPN fallou ao iniciarse"
+
+#: ../cli/src/connections.c:1153
+msgid "no valid VPN secrets"
+msgstr "non hai segredos VPN válidos"
+
+#: ../cli/src/connections.c:1155
+msgid "invalid VPN secrets"
+msgstr "segredos VPN non válidos"
+
+#: ../cli/src/connections.c:1157
+msgid "the connection was removed"
+msgstr "eliminouse a conexión"
+
+#: ../cli/src/connections.c:1171
+#, c-format
+msgid "state: %s\n"
+msgstr "estado: %s\n"
+
+#: ../cli/src/connections.c:1174 ../cli/src/connections.c:1200
+#, c-format
+msgid "Connection activated\n"
+msgstr "Conexión activada\n"
+
+#: ../cli/src/connections.c:1177
+#, c-format
+msgid "Error: Connection activation failed."
+msgstr "Erro: A activación da conexión fallou."
+
+#: ../cli/src/connections.c:1196
+#, c-format
+msgid "state: %s (%d)\n"
+msgstr "estado: %s (%d)\n"
+
+#: ../cli/src/connections.c:1206
+#, 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
+#, c-format
+msgid "Error: Timeout %d sec expired."
+msgstr "Erro: Alcanzouse o tempo de espera de %d segundos."
+
+#: ../cli/src/connections.c:1266
+#, 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
+#, c-format
+msgid "Active connection state: %s\n"
+msgstr "Estado da conexión activa: %s\n"
+
+#: ../cli/src/connections.c:1290
+#, 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
+#, c-format
+msgid "Error: Unknown connection: %s."
+msgstr "Erro: Conexión descoñecida: %s."
+
+#: ../cli/src/connections.c:1379 ../cli/src/devices.c:980
+#, 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
+#, 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
+#, c-format
+msgid "Error: No suitable device found: %s."
+msgstr "Erro: Non se encontrou un dispositivo axeitado: %s."
+
+#: ../cli/src/connections.c:1414
+#, c-format
+msgid "Error: No suitable device found."
+msgstr "Erro: Non se encontrou o dispositivo axeitado."
+
+#: ../cli/src/connections.c:1509
+#, c-format
+msgid "Warning: Connection not active\n"
+msgstr "Aviso: A conexión non está activa.\n"
+
+#: ../cli/src/connections.c:1566
+#, c-format
+msgid "Error: 'con' command '%s' is not valid."
+msgstr "Erro: «con» a orde «%s» non é válida"
+
+#: ../cli/src/connections.c:1602
+#, c-format
+msgid "Error: could not connect to D-Bus."
+msgstr "Erro: non é posíbel conectarse a D-Bus."
+
+#: ../cli/src/connections.c:1609
+#, 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
+#, c-format
+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."
+
+#. 0
+#. 9
+#: ../cli/src/devices.c:61 ../cli/src/devices.c:89 ../cli/src/devices.c:184
+msgid "DEVICE"
+msgstr "DISPOSITIVO"
+
+#. 1
+#. 4
+#. 0
+#: ../cli/src/devices.c:63 ../cli/src/devices.c:93
+#: ../cli/src/network-manager.c:36
+msgid "STATE"
+msgstr "ESTADO"
+
+#: ../cli/src/devices.c:72
+msgid "GENERAL"
+msgstr "XERAL"
+
+#. 0
+#: ../cli/src/devices.c:73
+msgid "CAPABILITIES"
+msgstr "CAPACIDADES"
+
+#. 1
+#: ../cli/src/devices.c:74
+msgid "WIFI-PROPERTIES"
+msgstr "PROPIEDADES-WIFI"
+
+#. 2
+#: ../cli/src/devices.c:75
+msgid "AP"
+msgstr "AP"
+
+#. 3
+#: ../cli/src/devices.c:76
+msgid "WIRED-PROPERTIES"
+msgstr "PROPIEDADES-CONCABLES"
+
+#. 4
+#: ../cli/src/devices.c:77
+msgid "IP4-SETTINGS"
+msgstr "CONFIGURACIONS-IP4"
+
+#. 5
+#: ../cli/src/devices.c:78
+msgid "IP4-DNS"
+msgstr "IP4-DNS"
+
+#. 6
+#: ../cli/src/devices.c:79
+msgid "IP6-SETTINGS"
+msgstr "IP4-CONFIGURACIONS"
+
+#. 7
+#: ../cli/src/devices.c:80
+msgid "IP6-DNS"
+msgstr "IP6-DNS"
+
+#. 2
+#: ../cli/src/devices.c:91
+msgid "DRIVER"
+msgstr "CONTROLADOR"
+
+#. 3
+#: ../cli/src/devices.c:92
+msgid "HWADDR"
+msgstr "ENDEREZO-HARDWARE"
+
+#. 0
+#: ../cli/src/devices.c:102
+msgid "CARRIER-DETECT"
+msgstr "DETECTAR-CARRIERV"
+
+#. 1
+#: ../cli/src/devices.c:103
+msgid "SPEED"
+msgstr "VELOCIDADE"
+
+#. 0
+#: ../cli/src/devices.c:112
+msgid "CARRIER"
+msgstr "CARRIER"
+
+#. 0
+#: ../cli/src/devices.c:122
+msgid "WEP"
+msgstr "WEP"
+
+#. 1
+#: ../cli/src/devices.c:123
+msgid "WPA"
+msgstr "WPA"
+
+#. 2
+#: ../cli/src/devices.c:124
+msgid "WPA2"
+msgstr "WPA2"
+
+#. 3
+#: ../cli/src/devices.c:125
+msgid "TKIP"
+msgstr "TKIP"
+
+#. 4
+#: ../cli/src/devices.c:126
+msgid "CCMP"
+msgstr "CCMP"
+
+#. 0
+#: ../cli/src/devices.c:135 ../cli/src/devices.c:146
+msgid "ADDRESS"
+msgstr "ENDEREZO"
+
+#. 1
+#: ../cli/src/devices.c:136 ../cli/src/devices.c:147
+msgid "PREFIX"
+msgstr "PREFIXO"
+
+#. 2
+#: ../cli/src/devices.c:137 ../cli/src/devices.c:148
+msgid "GATEWAY"
+msgstr "PASARELA"
+
+#. 0
+#: ../cli/src/devices.c:157 ../cli/src/devices.c:166
+msgid "DNS"
+msgstr "DNS"
+
+#. 0
+#: ../cli/src/devices.c:175
+msgid "SSID"
+msgstr "SSID"
+
+#. 1
+#: ../cli/src/devices.c:176
+msgid "BSSID"
+msgstr "BSSID"
+
+#. 2
+#: ../cli/src/devices.c:177
+msgid "MODE"
+msgstr "MODO"
+
+#. 3
+#: ../cli/src/devices.c:178
+msgid "FREQ"
+msgstr "FREQ"
+
+#. 4
+#: ../cli/src/devices.c:179
+msgid "RATE"
+msgstr "TAXA"
+
+#. 5
+#: ../cli/src/devices.c:180
+msgid "SIGNAL"
+msgstr "SINAL"
+
+#. 6
+#: ../cli/src/devices.c:181
+msgid "SECURITY"
+msgstr "SEGURIDADE"
+
+#. 7
+#: ../cli/src/devices.c:182
+msgid "WPA-FLAGS"
+msgstr "OPCIONS-WPA"
+
+#. 8
+#: ../cli/src/devices.c:183
+msgid "RSN-FLAGS"
+msgstr "OPCIONS-RSN"
+
+#. 10
+#: ../cli/src/devices.c:185
+msgid "ACTIVE"
+msgstr "ACTIVA"
+
+#: ../cli/src/devices.c:208
+#, c-format
+msgid ""
+"Usage: nmcli dev { COMMAND | help }\n"
+"\n"
+" COMMAND := { status | list | disconnect | wifi }\n"
+"\n"
+" status\n"
+" list [iface <iface>]\n"
+" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
+" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+"\n"
+msgstr ""
+"Uso: nmcli dev { ORDE | help }\n"
+"\n"
+" ORDE := { status | list | disconnect | wifi }\n"
+"\n"
+" status\n"
+" list [iface <interface>]\n"
+" disconnect iface <interface> [--nowait] [--timeout <tempo-de-espera>]\n"
+" wifi [list [iface <interface>] [hwaddr <enderezo-hardware>]]\n"
+"\n"
+
+#: ../cli/src/devices.c:228
+msgid "unmanaged"
+msgstr "non xestionada"
+
+#: ../cli/src/devices.c:230
+msgid "unavailable"
+msgstr "non dispoñíbel"
+
+#: ../cli/src/devices.c:232 ../cli/src/network-manager.c:89
+msgid "disconnected"
+msgstr "desconectado"
+
+#: ../cli/src/devices.c:234
+msgid "connecting (prepare)"
+msgstr "conectando (preparando)"
+
+#: ../cli/src/devices.c:236
+msgid "connecting (configuring)"
+msgstr "conectando (configurando)"
+
+#: ../cli/src/devices.c:238
+msgid "connecting (need authentication)"
+msgstr "conectando (precisa autenticación)"
+
+#: ../cli/src/devices.c:240
+msgid "connecting (getting IP configuration)"
+msgstr "conectando (obtendo a configuración IP)"
+
+#: ../cli/src/devices.c:242 ../cli/src/network-manager.c:87
+msgid "connected"
+msgstr "conectado"
+
+#: ../cli/src/devices.c:244
+msgid "connection failed"
+msgstr "produciuse un fallo na conexión"
+
+#: ../cli/src/devices.c:267 ../cli/src/devices.c:424
+msgid "Unknown"
+msgstr "Descoñecido"
+
+#: ../cli/src/devices.c:299
+msgid "(none)"
+msgstr "(ningún)"
+
+#: ../cli/src/devices.c:324
+#, 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
+#, c-format
+msgid "%u MHz"
+msgstr "%u MHz"
+
+#: ../cli/src/devices.c:394
+#, c-format
+msgid "%u MB/s"
+msgstr "%u MB/s"
+
+#: ../cli/src/devices.c:403
+msgid "Encrypted: "
+msgstr "Cifrado: "
+
+#: ../cli/src/devices.c:408
+msgid "WEP "
+msgstr "WEP "
+
+#: ../cli/src/devices.c:410
+msgid "WPA "
+msgstr "WPA "
+
+#: ../cli/src/devices.c:412
+msgid "WPA2 "
+msgstr "WPA2 "
+
+#: ../cli/src/devices.c:415
+msgid "Enterprise "
+msgstr "Empresa "
+
+#: ../cli/src/devices.c:424
+msgid "Ad-Hoc"
+msgstr "Ad-Hoc"
+
+#: ../cli/src/devices.c:424
+msgid "Infrastructure"
+msgstr "Infraestrutura"
+
+#: ../cli/src/devices.c:486
+#, c-format
+msgid "Error: 'dev list': %s"
+msgstr "Erro: «dev list»: %s"
+
+#: ../cli/src/devices.c:488
+#, c-format
+msgid "Error: 'dev list': %s; allowed fields: %s"
+msgstr "Erro: «dev list»: %s campos permitidos: %s"
+
+#: ../cli/src/devices.c:497
+msgid "Device details"
+msgstr "Detalles do dispositivo"
+
+#: ../cli/src/devices.c:527 ../cli/src/devices.c:925
+msgid "(unknown)"
+msgstr "(descoñecido)"
+
+#: ../cli/src/devices.c:528
+msgid "unknown)"
+msgstr "descoñecido)"
+
+#: ../cli/src/devices.c:554
+#, c-format
+msgid "%u Mb/s"
+msgstr "%u Mb/s"
+
+#. Print header
+#. "WIRED-PROPERTIES"
+#: ../cli/src/devices.c:627
+msgid "on"
+msgstr "activado"
+
+#: ../cli/src/devices.c:627
+msgid "off"
+msgstr "desactivado"
+
+#: ../cli/src/devices.c:808
+#, c-format
+msgid "Error: 'dev status': %s"
+msgstr "Erro: «dev status»: %s"
+
+#: ../cli/src/devices.c:810
+#, c-format
+msgid "Error: 'dev status': %s; allowed fields: %s"
+msgstr "Erro: «dev status»: %s campos permitidos: %s"
+
+#: ../cli/src/devices.c:817
+msgid "Status of devices"
+msgstr "Estado dos dispositivos"
+
+#: ../cli/src/devices.c:845
+#, 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
+#, c-format
+msgid "Error: Device '%s' not found."
+msgstr "Erro: Non é posíbel encontrar o dispositivo %s."
+
+#: ../cli/src/devices.c:897
+#, c-format
+msgid "Success: Device '%s' successfully disconnected."
+msgstr "Éxito: O dispositivo «%s» desconectouse correctamente."
+
+#: ../cli/src/devices.c:922
+#, 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
+#, c-format
+msgid "Device state: %d (%s)\n"
+msgstr "Estado do dispositivo: %d (%s)\n"
+
+#: ../cli/src/devices.c:994
+#, c-format
+msgid "Error: iface has to be specified."
+msgstr "Erro: non se especificou a interface."
+
+#: ../cli/src/devices.c:1112
+#, c-format
+msgid "Error: 'dev wifi': %s"
+msgstr "Erro: «dev wifi»: %s"
+
+#: ../cli/src/devices.c:1114
+#, c-format
+msgid "Error: 'dev wifi': %s; allowed fields: %s"
+msgstr "Erro: «dev wiki»: %s; campos permitidos: %s"
+
+#: ../cli/src/devices.c:1121
+msgid "WiFi scan list"
+msgstr "Lista de escaneo WiFi"
+
+#: ../cli/src/devices.c:1156 ../cli/src/devices.c:1210
+#, 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
+#, 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
+#, 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
+#, 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
+msgid "RUNNING"
+msgstr "EXECUTANDO"
+
+#. 1
+#: ../cli/src/network-manager.c:37
+msgid "WIFI-HARDWARE"
+msgstr "WIFI-HARDWARE"
+
+#. 2
+#: ../cli/src/network-manager.c:38
+msgid "WIFI"
+msgstr "WIFI"
+
+#. 3
+#: ../cli/src/network-manager.c:39
+msgid "WWAN-HARDWARE"
+msgstr "WWAN-HARDWARE"
+
+#. 4
+#: ../cli/src/network-manager.c:40
+msgid "WWAN"
+msgstr "WWAN"
+
+#: ../cli/src/network-manager.c:62
+#, 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"
+msgstr ""
+"Usage: nmcli nm { ORDE | help }\n"
+"\n"
+" ORDE := { status | sleep | wakeup | wifi | wwan }\n"
+"\n"
+" status\n"
+" sleep\n"
+" wakeup\n"
+" wifi [on|off]\n"
+" wwan [on|off]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:83
+msgid "asleep"
+msgstr "dormido"
+
+#: ../cli/src/network-manager.c:85
+msgid "connecting"
+msgstr "conectando"
+
+#: ../cli/src/network-manager.c:125
+#, c-format
+msgid "Error: 'nm status': %s"
+msgstr "Erro:«'nm status»: %s"
+
+#: ../cli/src/network-manager.c:127
+#, 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
+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
+msgid "disabled"
+msgstr "desactivado"
+
+#: ../cli/src/network-manager.c:148
+msgid "running"
+msgstr "en execución"
+
+#: ../cli/src/network-manager.c:148
+msgid "not running"
+msgstr "non está a executarse"
+
+#: ../cli/src/network-manager.c:201 ../cli/src/network-manager.c:233
+#, 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
+msgid "WiFi enabled"
+msgstr "WiFi activada"
+
+#: ../cli/src/network-manager.c:220
+#, c-format
+msgid "Error: invalid 'wifi' parameter: '%s'."
+msgstr "Erro: parámetro «wifi» non válido: «%s»."
+
+#: ../cli/src/network-manager.c:241
+msgid "WWAN enabled"
+msgstr "WWAN activada"
+
+#: ../cli/src/network-manager.c:252
+#, c-format
+msgid "Error: invalid 'wwan' parameter: '%s'."
+msgstr "Erro: parámetro «wwan» non válido: «%s»."
+
+#: ../cli/src/network-manager.c:263
+#, 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
+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] <field1,field2,...>|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"
+
+#: ../cli/src/nmcli.c:113
+#, 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
+#, 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
+#, 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
+#, 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
+#, 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
+#, 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
+#, 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
+#, c-format
+msgid "Error: fields for '%s' options are missing."
+msgstr "Erro: faltan os campos para «%s»."
+
+#: ../cli/src/nmcli.c:209
+#, c-format
+msgid "nmcli tool, version %s\n"
+msgstr "ferramenta nmcli, versión %s\n"
+
+#: ../cli/src/nmcli.c:215
+#, 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
+#, 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:275
+msgid "Success"
+msgstr "Éxito"
+
+#: ../cli/src/settings.c:411
+#, c-format
+msgid "%d (hex-ascii-key)"
+msgstr "%d (hex-ascii-key)"
+
+#: ../cli/src/settings.c:413
+#, c-format
+msgid "%d (104/128-bit passphrase)"
+msgstr "%d (frase de paso 104/128-bit)"
+
+#: ../cli/src/settings.c:416
+#, c-format
+msgid "%d (unknown)"
+msgstr "%d (descoñecido)"
+
+#: ../cli/src/settings.c:442
+msgid "0 (unknown)"
+msgstr "0 (descoñecido)"
+
+#: ../cli/src/settings.c:448
+msgid "any, "
+msgstr "calquera, "
+
+#: ../cli/src/settings.c:450
+msgid "900 MHz, "
+msgstr "900 MHz, "
+
+#: ../cli/src/settings.c:452
+msgid "1800 MHz, "
+msgstr "1800 MHz, "
+
+#: ../cli/src/settings.c:454
+msgid "1900 MHz, "
+msgstr "1900 MHz, "
+
+#: ../cli/src/settings.c:456
+msgid "850 MHz, "
+msgstr "850 MHz, "
+
+#: ../cli/src/settings.c:458
+msgid "WCDMA 3GPP UMTS 2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 2100 MHz, "
+
+#: ../cli/src/settings.c:460
+msgid "WCDMA 3GPP UMTS 1800 MHz, "
+msgstr "WCDMA 3GPP UMTS 1800 MHz, "
+
+#: ../cli/src/settings.c:462
+msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
+
+#: ../cli/src/settings.c:464
+msgid "WCDMA 3GPP UMTS 800 MHz, "
+msgstr "WCDMA 3GPP UMTS 800 MHz, "
+
+#: ../cli/src/settings.c:466
+msgid "WCDMA 3GPP UMTS 850 MHz, "
+msgstr "WCDMA 3GPP UMTS 850 MHz, "
+
+#: ../cli/src/settings.c:468
+msgid "WCDMA 3GPP UMTS 900 MHz, "
+msgstr "WCDMA 3GPP UMTS 900 MHz, "
+
+#: ../cli/src/settings.c:470
+msgid "WCDMA 3GPP UMTS 1700 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700 MHz, "
+
+#: ../cli/src/settings.c:554 ../cli/src/settings.c:721
+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
+msgid "not set"
+msgstr "non definido"
+
+#: ../cli/src/utils.c:124
+#, c-format
+msgid "field '%s' has to be alone"
+msgstr "o campo «%s» ten que estar só"
+
+#: ../cli/src/utils.c:127
+#, c-format
+msgid "invalid field '%s'"
+msgstr "campo «%s» non válido"
+
+#: ../cli/src/utils.c:146
+#, c-format
+msgid "Option '--terse' requires specifying '--fields'"
+msgstr "A opcións «--terse» require que especifique «--fields»"
+
+#: ../cli/src/utils.c:150
+#, c-format
+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
#, c-format
@@ -50,17 +1205,20 @@ msgstr "Ficheiro PEM malformado: Proc-Type non é a segunda etiqueta."
#: ../libnm-util/crypto.c:183
#, 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
#, 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
#, 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
#, c-format
@@ -102,11 +1260,9 @@ msgstr "Non hai memoria abondo para almacenar o IV."
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:335
+#: ../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
#, c-format
msgid "Private key cipher '%s' was unknown."
msgstr "O cifrado «%s» da chave privada é descoñecido."
@@ -140,8 +1296,7 @@ msgstr "Produciuse un erro ao iniciar a arquitectura MD5: %s / %s."
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:165 ../libnm-util/crypto_nss.c:188
#, c-format
msgid "Not enough memory for decrypted key buffer."
msgstr "Non hai memoria abondo para o búfer da chave descifrada."
@@ -149,12 +1304,16 @@ msgstr "Non hai memoria abondo para o búfer da chave descifrada."
#: ../libnm-util/crypto_gnutls.c:173
#, 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."
+msgstr ""
+"Produciuse un erro ao inicializar o contexto de cifrado para o descifrado: "
+"%s / %s."
#: ../libnm-util/crypto_gnutls.c:182
#, 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."
+msgstr ""
+"Produciuse un erro ao establecer a chave simétrica para o descifrado: %s / "
+"%s."
#: ../libnm-util/crypto_gnutls.c:191
#, c-format
@@ -166,20 +1325,19 @@ msgstr "Produciuse un erro ao establecer IV para o descifrado: %s / %s."
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:266
+#: ../libnm-util/crypto_gnutls.c:210 ../libnm-util/crypto_nss.c:267
#, 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."
+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:277
+#: ../libnm-util/crypto_gnutls.c:221 ../libnm-util/crypto_nss.c:278
#, 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:355
+#: ../libnm-util/crypto_gnutls.c:286 ../libnm-util/crypto_nss.c:356
#, c-format
msgid "Could not allocate memory for encrypting."
msgstr "Non foi posíbel asignar a memoria para cifrar."
@@ -187,12 +1345,14 @@ msgstr "Non foi posíbel asignar a memoria para cifrar."
#: ../libnm-util/crypto_gnutls.c:294
#, 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."
+msgstr ""
+"Produciuse un erro ao inicializar o contexto da chave de cifrado: %s / %s."
#: ../libnm-util/crypto_gnutls.c:303
#, 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."
+msgstr ""
+"Produciuse un erro ao establecer a chave simétrica para o cifrado: %s / %s."
#: ../libnm-util/crypto_gnutls.c:313
#, c-format
@@ -229,7 +1389,7 @@ msgstr "Non foi posíbel decodificar o ficheiro PKCS#12: %s"
msgid "Couldn't verify PKCS#12 file: %s"
msgstr "Non foi posíbel verificar o ficheiro PKCS#12: %s"
-#: ../libnm-util/crypto_nss.c:57
+#: ../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."
@@ -252,7 +1412,8 @@ msgstr "Produciuse un erro ao iniciar a rañura de cifrado para o descifrado"
#: ../libnm-util/crypto_nss.c:206
#, 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
#, c-format
@@ -272,145 +1433,262 @@ msgstr "Produciuse un erro ao descifrar a chave privada: %d."
#: ../libnm-util/crypto_nss.c:245
#, 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."
+msgstr ""
+"Produciuse un erro ao descifrar a chave privada: os datos descifrados son "
+"moi grandes."
#: ../libnm-util/crypto_nss.c:256
#, 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:363
+#: ../libnm-util/crypto_nss.c:364
#, 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:371
+#: ../libnm-util/crypto_nss.c:372
#, 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:379
+#: ../libnm-util/crypto_nss.c:380
#, c-format
msgid "Failed to set IV for encryption."
msgstr "Produciuse un erro ao establecer IV para o cifrado."
-#: ../libnm-util/crypto_nss.c:387
+#: ../libnm-util/crypto_nss.c:388
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "Produciuse un erro ao inicializar o contexto de cifrado."
-#: ../libnm-util/crypto_nss.c:395
+#: ../libnm-util/crypto_nss.c:396
#, c-format
msgid "Failed to encrypt: %d."
msgstr "Produciuse un erro ao cifrar: %d."
-#: ../libnm-util/crypto_nss.c:403
+#: ../libnm-util/crypto_nss.c:404
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "Tamaño non agardado de datos despois de cifrar."
-#: ../libnm-util/crypto_nss.c:446
+#: ../libnm-util/crypto_nss.c:447
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "Non foi posíbel decodificar o certificado: %d"
-#: ../libnm-util/crypto_nss.c:481
+#: ../libnm-util/crypto_nss.c:482
#, 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:509
+#: ../libnm-util/crypto_nss.c:510
#, 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:518
+#: ../libnm-util/crypto_nss.c:519
#, 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:527
+#: ../libnm-util/crypto_nss.c:528
#, 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:556
+#: ../libnm-util/crypto_nss.c:557
msgid "Could not generate random data."
msgstr "Non foi posíbel xerar datos aleatorios."
-#: ../libnm-util/nm-utils.c:1522
+#: ../libnm-util/nm-utils.c:1975
#, 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:1633
+#: ../libnm-util/nm-utils.c:2085
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:1645
+#: ../libnm-util/nm-utils.c:2097
#, 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:1657
+#: ../libnm-util/nm-utils.c:2109
#, 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."
+msgstr ""
+"Non foi posíbel asignar memoria para escribir a chave cifrada no ficheiro "
+"PEM."
-#: ../libnm-util/nm-utils.c:1676
+#: ../libnm-util/nm-utils.c:2128
#, c-format
msgid "Could not allocate memory for PEM file data."
msgstr "Non foi posíbel asignar memoria para os datos do ficheiro PEM."
-#: ../src/nm-netlink-monitor.c:194
-#: ../src/nm-netlink-monitor.c:464
-#: ../src/nm-netlink-monitor.c:569
-#: ../src/ip6-manager/nm-netlink-listener.c:352
+#: ../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"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
+msgid "Enable or disable WiFi devices"
+msgstr "Activar ou desactivar os dispositivos WiFi"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
+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
+msgid "Enable or disable system networking"
+msgstr "Activar ou desactivar a rede do sistema"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
+msgid ""
+"Put NetworkManager to sleep or wake it up (should only be used by system "
+"power management)"
+msgstr ""
+"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
+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
+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
+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
+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"
+msgstr ""
+"A normativa do sistema evita poñer o NetworkManager en suspensión ou "
+"espertalo"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
+msgid "System policy prevents use of user-specific connections"
+msgstr ""
+"A normativa do sistema evita o uso de conexións específicas do usuario"
+
+#: ../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:260
-#, 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/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:270
+#: ../src/nm-netlink-monitor.c:254
#, 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"
+msgstr ""
+"non é posíbel conectar ao netlink para monitorizar o estado da lingazón: %s"
+
+#: ../src/nm-netlink-monitor.c:265
+#, 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:278
+#: ../src/nm-netlink-monitor.c:291 ../src/nm-netlink-monitor.c:353
#, c-format
-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"
+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/nm-netlink-monitor.c:286
+#: ../src/nm-netlink-monitor.c:376
#, c-format
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"
+msgstr ""
+"non é posíbel asignar a ligazón á caché netlink para monitorizar o estado da "
+"ligazón: %s"
-#: ../src/nm-netlink-monitor.c:494
-#: ../src/ip6-manager/nm-netlink-listener.c:382
-msgid "error occurred while waiting for data on socket"
-msgstr "producouse un erro agardando por datos nun socket"
+#: ../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:558
+#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642
#, c-format
-#| msgid "error processing netlink message: %s"
msgid "error updating link cache: %s"
msgstr "produciuse un erro ao actualizar a caché de ligazóns: %s"
-#: ../src/NetworkManager.c:330
+#: ../src/main.c:498
#, 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/dhcp-manager/nm-dhcp-dhclient.c:304
+#: ../src/main.c:569
+#, 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
msgid "# Created by NetworkManager\n"
msgstr "# Creado por NetworkManager\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:310
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:344
#, c-format
msgid ""
"# Merged from %s\n"
@@ -419,70 +1697,55 @@ msgstr ""
"# Fusionado desde %s\n"
"\n"
-#: ../src/ip6-manager/nm-netlink-listener.c:200
+#: ../src/dhcp-manager/nm-dhcp-manager.c:284
+msgid "no usable DHCP client could be found."
+msgstr "non se encontrou un cliente de DHCP usábel."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+msgid "'dhclient' could be found."
+msgstr "Non foi posíbel encontrar «dhclient»."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:303
+msgid "'dhcpcd' could be found."
+msgstr "Non foi posíbel encontrar «dhcpcd»."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:311
#, c-format
-#| msgid "unable to allocate netlink handle for monitoring link status: %s"
-msgid "unable to allocate netlink handle: %s"
-msgstr "non é posíbel asignar un manexador para a ligazon de rede: %s"
+msgid "unsupported DHCP client '%s'"
+msgstr "cliente DHCP «%s» non compatíbel"
-#: ../src/ip6-manager/nm-netlink-listener.c:210
+#: ../src/logging/nm-logging.c:146
#, c-format
-#| msgid "unable to connect to netlink for monitoring link status: %s"
-msgid "unable to connect to netlink: %s"
-msgstr "non é posíbel conectar coa ligazón de rede: %s"
+msgid "Unknown log level '%s'"
+msgstr "Nivel de rexistro «%s» descoñecido"
-#: ../src/ip6-manager/nm-netlink-listener.c:307
+#: ../src/logging/nm-logging.c:171
#, c-format
-#| msgid "unable to join netlink group for monitoring link status: %s"
-msgid "unable to join netlink group: %s"
-msgstr "non é posíbel unir ao grupo da ligazón de rede: %s"
+msgid "Unknown log domain '%s'"
+msgstr "Dominio de rexistro «%s» descoñecido"
-#: ../src/named-manager/nm-named-manager.c:315
+#: ../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/named-manager/nm-named-manager.c:317
+#: ../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/system-settings/nm-default-wired-connection.c:194
+#: ../src/system-settings/nm-default-wired-connection.c:157
#, c-format
msgid "Auto %s"
msgstr "Auto %s"
-#: ../system-settings/plugins/ifcfg-rh/reader.c:2406
+#: ../system-settings/plugins/ifcfg-rh/reader.c:3412
msgid "System"
msgstr "Sistema"
-#: ../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"
+#, c-format
+#~ 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"
+#, c-format
+#~ msgid "unable to connect to netlink: %s"
+#~ msgstr "non é posíbel conectar coa ligazón de rede: %s"
diff --git a/po/gu.po b/po/gu.po
index 83fba507ed..3fa8cf3333 100644
--- a/po/gu.po
+++ b/po/gu.po
@@ -1588,11 +1588,11 @@ msgstr "અજà«àªžàª¾àª¤ લોગ સà«àª¤àª° '%s'"
msgid "Unknown log domain '%s'"
msgstr "અજà«àªžàª¾àª¤ લોગ ડોમેઇન '%s'"
-#: ../src/named-manager/nm-named-manager.c:343
+#: ../src/dns-manager/nm-dns-manager.c:343
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr "નોંધ: libc સà«àª§àª¾àª°àª¨àª¾àª° ઠ૩ નામ સરà«àªµàª°à«‹ કરતા વધારે આધારને સમાવી શકતૠનથી."
-#: ../src/named-manager/nm-named-manager.c:345
+#: ../src/dns-manager/nm-dns-manager.c:345
msgid "The nameservers listed below may not be recognized."
msgstr "નીચે યાદી થયેલ નામસરà«àªµàª°à«‹ ઠઓળખી શકાતા નથી."
diff --git a/po/hi.po b/po/hi.po
index 9b6c3f1707..aab5c03467 100644
--- a/po/hi.po
+++ b/po/hi.po
@@ -5,12 +5,12 @@
# Rajesh Ranjan <rranjan@redhat.com>, 2010.
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-05-06 14:31+0530\n"
-"PO-Revision-Date: 2010-05-07 15:23+0530\n"
+"Project-Id-Version: hi\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-07-20 12:39+0530\n"
+"PO-Revision-Date: 2010-07-26 13:05+0530\n"
"Last-Translator: Rajesh Ranjan <rranjan@redhat.com>\n"
-"Language-Team: Hindi <Red Hat>\n"
+"Language-Team: Hindi <fedora-trans-hi@redhat.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -499,6 +499,16 @@ msgstr "IP4-SETTINGS"
msgid "IP4-DNS"
msgstr "IP4-DNS"
+#. 6
+#: ../cli/src/devices.c:79
+msgid "IP6-SETTINGS"
+msgstr "IP6-SETTINGS"
+
+#. 7
+#: ../cli/src/devices.c:80
+msgid "IP6-DNS"
+msgstr "IP6-DNS"
+
#. 2
#: ../cli/src/devices.c:88
msgid "DRIVER"
@@ -1501,6 +1511,88 @@ msgstr "गोपित कà¥à¤‚जी को PEM फाइल में लि
msgid "Could not allocate memory for PEM file data."
msgstr "PEM फाइल आà¤à¤•à¤¡à¤¼à¤¾ के लिठसà¥à¤®à¥ƒà¤¤à¤¿ नहीं आबंटित कर सका."
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
+msgid "Connection sharing via a protected WiFi network"
+msgstr "किसी संरकà¥à¤·à¤¿à¤¤ WiFi संजाल के दà¥à¤µà¤¾à¤°à¤¾ कनेकà¥à¤¶à¤¨ साà¤à¤¾"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
+msgid "Connection sharing via an open WiFi network"
+msgstr "किसी खà¥à¤²à¥‡ WiFi संजाल के दà¥à¤µà¤¾à¤°à¤¾ कनेकà¥à¤¶à¤¨ साà¤à¤¾"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
+msgid "Modify persistent system hostname"
+msgstr "सà¥à¤¥à¤¿à¤° सिसà¥à¤Ÿà¤® होसà¥à¤Ÿà¤¨à¥‡à¤® को सà¥à¤§à¤¾à¤°à¥‡à¤‚"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
+msgid "Modify system connections"
+msgstr "सिसà¥à¤Ÿà¤® कनेकà¥à¤¶à¤¨ सà¥à¤§à¤¾à¤°à¥‡à¤‚"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
+msgid "System policy prevents modification of system settings"
+msgstr "सिसà¥à¤Ÿà¤® नीति सिसà¥à¤Ÿà¤® सेटिंग के रूपांतरण को रोकता है."
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
+msgid "System policy prevents modification of the persistent system hostname"
+msgstr "सिसà¥à¤Ÿà¤® नीति सà¥à¤¥à¤¿à¤° सिसà¥à¤Ÿà¤® होसà¥à¤Ÿà¤¨à¥‡à¤® के रूपांतरण को रोकता है."
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
+msgid "System policy prevents sharing connections via a protected WiFi network"
+msgstr "किसी संरकà¥à¤·à¤¿à¤¤ WiFi संजाल के दà¥à¤µà¤¾à¤°à¤¾ साà¤à¤¾ कनेकà¥à¤¶à¤¨ को सिसà¥à¤Ÿà¤® नीति रोकता है"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
+msgid "System policy prevents sharing connections via an open WiFi network"
+msgstr "किसी खà¥à¤²à¥‡ WiFi संजाल के दà¥à¤µà¤¾à¤°à¤¾ साà¤à¤¾ कनेकà¥à¤¶à¤¨ को सिसà¥à¤Ÿà¤® नीति रोकता है"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
+msgid "Allow control of network connections"
+msgstr "संजाल कनेकà¥à¤¶à¤¨ के नियंतà¥à¤°à¤£ सà¥à¤µà¥€à¤•à¤¾à¤° करें"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
+msgid "Allow use of user-specific connections"
+msgstr "उपयोकà¥à¤¤à¤¾ विशिषà¥à¤Ÿ कनेकà¥à¤¶à¤¨ के उपयोग की सà¥à¤µà¥€à¤•à¥ƒà¤¤à¤¿ दें"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
+msgid "Enable or disable WiFi devices"
+msgstr "WiFi यà¥à¤•à¥à¤¤à¤¿à¤¯à¤¾à¤ सकà¥à¤°à¤¿à¤¯ या निषà¥à¤•à¥à¤°à¤¿à¤¯ करें"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
+msgid "Enable or disable mobile broadband devices"
+msgstr "मोबाइल बà¥à¤°à¤¾à¤¡à¤¬à¥ˆà¤‚ड यà¥à¤•à¥à¤¤à¤¿à¤¯à¤¾à¤ सकà¥à¤°à¤¿à¤¯ या निषà¥à¤•à¥à¤°à¤¿à¤¯ करें"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+msgid "Enable or disable system networking"
+msgstr "तंतà¥à¤° संजालन सकà¥à¤°à¤¿à¤¯ या निषà¥à¤•à¥à¤°à¤¿à¤¯ करें"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
+msgid ""
+"Put NetworkManager to sleep or wake it up (should only be used by system "
+"power management)"
+msgstr " NetworkManager को सà¥à¤²à¥€à¤ª सà¥à¤¥à¤¿à¤¤à¤¿ या वेकअप सà¥à¤¥à¤¿à¤¤à¤¿ में रखें (केवल सिसà¥à¤Ÿà¤® पावर मैनेजमेंट के दà¥à¤µà¤¾à¤°à¤¾ पà¥à¤°à¤¯à¥‹à¤— किया जाà¤à¤—ा)"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
+msgid "System policy prevents control of network connections"
+msgstr "सिसà¥à¤Ÿà¤® कनेकà¥à¤¶à¤¨ के नियंतà¥à¤°à¤£ को सिसà¥à¤Ÿà¤® नीति रोकता है"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
+msgid "System policy prevents enabling or disabling WiFi devices"
+msgstr "WiFi यà¥à¤•à¥à¤¤à¤¿ के सकà¥à¤°à¤¿à¤¯à¤£ या निषà¥à¤•à¥à¤°à¤¿à¤¯à¤£ को तंतà¥à¤° नीति रोकता है"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
+msgid "System policy prevents enabling or disabling mobile broadband devices"
+msgstr "मोबाइल बà¥à¤°à¥‰à¤¡à¤¬à¥ˆà¤‚ड यà¥à¤•à¥à¤¤à¤¿ के सकà¥à¤°à¤¿à¤¯à¤£ या निषà¥à¤•à¥à¤°à¤¿à¤¯à¤£ को तंतà¥à¤° नीति रोकता है"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
+msgid "System policy prevents enabling or disabling system networking"
+msgstr "तंतà¥à¤° संजालन के यà¥à¤•à¥à¤¤à¤¿ के सकà¥à¤°à¤¿à¤¯à¤£ या निषà¥à¤•à¥à¤°à¤¿à¤¯à¤£ को तंतà¥à¤° नीति रोकता है"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
+msgid "System policy prevents putting NetworkManager to sleep or waking it up"
+msgstr "NetworkManager को सà¥à¤²à¥€à¤ª या वेकअप सà¥à¤¥à¤¿à¤¤à¤¿ में लाने के लिठनेटवरà¥à¤•à¤®à¥ˆà¤¨à¥‡à¤œà¤° रोकता है"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
+msgid "System policy prevents use of user-specific connections"
+msgstr "सिसà¥à¤Ÿà¤® नीति उपयोकà¥à¤¤à¤¾ विशेष कनेकà¥à¤¶à¤¨ के उपयोग को रोकता है"
+
#: ../src/nm-netlink-monitor.c:100 ../src/nm-netlink-monitor.c:231
#: ../src/nm-netlink-monitor.c:653
#, c-format
@@ -1591,11 +1683,11 @@ msgstr "अजà¥à¤žà¤¾à¤¤ लॉग सà¥à¤¤à¤° '%s'"
msgid "Unknown log domain '%s'"
msgstr "अजà¥à¤žà¤¾à¤¤ लॉग डोमेन '%s'"
-#: ../src/named-manager/nm-named-manager.c:343
+#: ../src/dns-manager/nm-dns-manager.c:343
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr "नोट: libc समाधानकरà¥à¤¤à¤¾ 3 नेमसरà¥à¤µà¤° से अधिक का समरà¥à¤¥à¤¨ नहीं कर सकता है."
-#: ../src/named-manager/nm-named-manager.c:345
+#: ../src/dns-manager/nm-dns-manager.c:345
msgid "The nameservers listed below may not be recognized."
msgstr "नीचे सूची में दिया गया नेमसरà¥à¤µà¤° पहचाना नहीं जा सकता है."
@@ -1608,35 +1700,3 @@ msgstr "सà¥à¤µà¤¤à¤ƒ %s"
msgid "System"
msgstr "तंतà¥à¤°"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
-msgid "Connection sharing via a protected WiFi network"
-msgstr "किसी संरकà¥à¤·à¤¿à¤¤ WiFi संजाल के दà¥à¤µà¤¾à¤°à¤¾ कनेकà¥à¤¶à¤¨ साà¤à¤¾"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
-msgid "Connection sharing via an open WiFi network"
-msgstr "किसी खà¥à¤²à¥‡ WiFi संजाल के दà¥à¤µà¤¾à¤°à¤¾ कनेकà¥à¤¶à¤¨ साà¤à¤¾"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
-msgid "Modify persistent system hostname"
-msgstr "सà¥à¤¥à¤¿à¤° सिसà¥à¤Ÿà¤® होसà¥à¤Ÿà¤¨à¥‡à¤® को सà¥à¤§à¤¾à¤°à¥‡à¤‚"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
-msgid "Modify system connections"
-msgstr "सिसà¥à¤Ÿà¤® कनेकà¥à¤¶à¤¨ सà¥à¤§à¤¾à¤°à¥‡à¤‚"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
-msgid "System policy prevents modification of system settings"
-msgstr "सिसà¥à¤Ÿà¤® नीति सिसà¥à¤Ÿà¤® सेटिंग के रूपांतरण को रोकता है."
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
-msgid "System policy prevents modification of the persistent system hostname"
-msgstr "सिसà¥à¤Ÿà¤® नीति सà¥à¤¥à¤¿à¤° सिसà¥à¤Ÿà¤® होसà¥à¤Ÿà¤¨à¥‡à¤® के रूपांतरण को रोकता है."
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
-msgid "System policy prevents sharing connections via a protected WiFi network"
-msgstr "किसी संरकà¥à¤·à¤¿à¤¤ WiFi संजाल के दà¥à¤µà¤¾à¤°à¤¾ साà¤à¤¾ कनेकà¥à¤¶à¤¨ को सिसà¥à¤Ÿà¤® नीति रोकता है"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
-msgid "System policy prevents sharing connections via an open WiFi network"
-msgstr "किसी खà¥à¤²à¥‡ WiFi संजाल के दà¥à¤µà¤¾à¤°à¤¾ साà¤à¤¾ कनेकà¥à¤¶à¤¨ को सिसà¥à¤Ÿà¤® नीति रोकता है"
-
diff --git a/po/hu.po b/po/hu.po
index 742cdb15b3..0ca4386f29 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -7,16 +7,1234 @@ 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: 2009-09-29 03:25+0000\n"
-"PO-Revision-Date: 2010-01-03 14:57+0100\n"
+"POT-Creation-Date: 2010-09-22 03:25+0000\n"
+"PO-Revision-Date: 2010-10-02 20:50+0200\n"
"Last-Translator: Gabor Kelemen <kelemeng at gnome dot hu>\n"
"Language-Team: Hungarian <gnome at fsf dot hu>\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-10-02 18:28+0000\n"
"X-Generator: KBabel 1.11.4\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
+msgid "NAME"
+msgstr "NÉV"
+
+#. 0
+#: ../cli/src/connections.c:61 ../cli/src/connections.c:76
+msgid "UUID"
+msgstr "UUID"
+
+#. 1
+#: ../cli/src/connections.c:62
+msgid "DEVICES"
+msgstr "ESZKÖZÖK"
+
+#. 2
+#: ../cli/src/connections.c:63 ../cli/src/connections.c:78
+msgid "SCOPE"
+msgstr "HATÓKÖR"
+
+#. 3
+#: ../cli/src/connections.c:64
+msgid "DEFAULT"
+msgstr "ALAPÉRTELMEZETT"
+
+#. 4
+#: ../cli/src/connections.c:65
+msgid "DBUS-SERVICE"
+msgstr "DBUS-SZOLGÃLTATÃS"
+
+#. 5
+#: ../cli/src/connections.c:66
+msgid "SPEC-OBJECT"
+msgstr "SPEC-OBJEKTUM"
+
+#. 6
+#: ../cli/src/connections.c:67
+msgid "VPN"
+msgstr "VPN"
+
+#. 1
+#. 0
+#. 1
+#: ../cli/src/connections.c:77 ../cli/src/devices.c:62 ../cli/src/devices.c:90
+msgid "TYPE"
+msgstr "TÃPUS"
+
+#. 3
+#: ../cli/src/connections.c:79
+msgid "TIMESTAMP"
+msgstr "IDÅBÉLYEG"
+
+#. 4
+#: ../cli/src/connections.c:80
+msgid "TIMESTAMP-REAL"
+msgstr "IDÅBÉLYEG-VALÓDI"
+
+#. 5
+#: ../cli/src/connections.c:81
+msgid "AUTOCONNECT"
+msgstr "AUTO-CSATLAKOZÃS"
+
+#. 6
+#: ../cli/src/connections.c:82
+msgid "READONLY"
+msgstr "CSAK OLVASHATÓ"
+
+#. 7
+#: ../cli/src/connections.c:83
+msgid "DBUS-PATH"
+msgstr "DBUS-ÚTVONAL"
+
+#: ../cli/src/connections.c:159
+#, c-format
+msgid ""
+"Usage: nmcli con { COMMAND | help }\n"
+" COMMAND := { list | status | up | down }\n"
+"\n"
+" list [id <id> | uuid <id> | system | user]\n"
+" status\n"
+" up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout "
+"<timeout>]\n"
+" down id <id> | uuid <id>\n"
+msgstr ""
+"Használat: nmcli con { PARANCS | help }\n"
+" PARANCS := { list | status | up | down }\n"
+"\n"
+" list [id <azonosító> | uuid <azonosító> | system | user]\n"
+" status\n"
+" up id <azonosító> | uuid <azonosító> [iface <csatoló>] [ap <hwcím>] [--"
+"nowait] [--timeout <időkorlát>]\n"
+" down id <azonosító> | uuid <azonosító>\n"
+
+#: ../cli/src/connections.c:199 ../cli/src/connections.c:540
+#, c-format
+msgid "Error: 'con list': %s"
+msgstr "Hiba: „con listâ€: %s"
+
+#: ../cli/src/connections.c:201 ../cli/src/connections.c:542
+#, c-format
+msgid "Error: 'con list': %s; allowed fields: %s"
+msgstr "Hiba: „con listâ€: %s; engedélyezett mezÅ‘k: %s"
+
+#: ../cli/src/connections.c:209
+msgid "Connection details"
+msgstr "Kapcsolat részletei"
+
+#: ../cli/src/connections.c:384 ../cli/src/connections.c:605
+msgid "system"
+msgstr "rendszer"
+
+#: ../cli/src/connections.c:384 ../cli/src/connections.c:605
+msgid "user"
+msgstr "felhasználó"
+
+#: ../cli/src/connections.c:386
+msgid "never"
+msgstr "soha"
+
+#. "CAPABILITIES"
+#. Print header
+#. "WIFI-PROPERTIES"
+#: ../cli/src/connections.c:387 ../cli/src/connections.c:388
+#: ../cli/src/connections.c:606 ../cli/src/connections.c:609
+#: ../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
+msgid "yes"
+msgstr "igen"
+
+#: ../cli/src/connections.c:387 ../cli/src/connections.c:388
+#: ../cli/src/connections.c:606 ../cli/src/connections.c:609
+#: ../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
+msgid "no"
+msgstr "nem"
+
+#: ../cli/src/connections.c:461 ../cli/src/connections.c:504
+msgid "System connections"
+msgstr "Rendszerkapcsolatok"
+
+#: ../cli/src/connections.c:466 ../cli/src/connections.c:517
+msgid "User connections"
+msgstr "Felhasználói kapcsolatok"
+
+#: ../cli/src/connections.c:478 ../cli/src/connections.c:1338
+#: ../cli/src/connections.c:1354 ../cli/src/connections.c:1363
+#: ../cli/src/connections.c:1374 ../cli/src/connections.c:1459
+#: ../cli/src/devices.c:962 ../cli/src/devices.c:972 ../cli/src/devices.c:1074
+#: ../cli/src/devices.c:1081
+#, c-format
+msgid "Error: %s argument is missing."
+msgstr "Hiba: az argumentum (%s) hiányzik."
+
+#: ../cli/src/connections.c:491
+#, c-format
+msgid "Error: %s - no such connection."
+msgstr "Hiba: nincs ilyen kapcsolat: %s."
+
+#: ../cli/src/connections.c:523 ../cli/src/connections.c:1387
+#: ../cli/src/connections.c:1477 ../cli/src/devices.c:785
+#: ../cli/src/devices.c:852 ../cli/src/devices.c:986 ../cli/src/devices.c:1087
+#, c-format
+msgid "Unknown parameter: %s\n"
+msgstr "Ismeretlen paraméter: %s\n"
+
+#: ../cli/src/connections.c:532
+#, c-format
+msgid "Error: no valid parameter specified."
+msgstr "Hiba: nincs megadva érvényes paraméter."
+
+#: ../cli/src/connections.c:547 ../cli/src/connections.c:1580
+#: ../cli/src/devices.c:1293 ../cli/src/network-manager.c:359
+#, c-format
+msgid "Error: %s."
+msgstr "Hiba: %s."
+
+#: ../cli/src/connections.c:653
+#, c-format
+msgid "Error: 'con status': %s"
+msgstr "Hiba: „con statusâ€: %s"
+
+#: ../cli/src/connections.c:655
+#, c-format
+msgid "Error: 'con status': %s; allowed fields: %s"
+msgstr "Hiba: „con statusâ€: %s; engedélyezett mezÅ‘k: %s"
+
+#: ../cli/src/connections.c:662
+msgid "Active connections"
+msgstr "Aktív kapcsolatok"
+
+#: ../cli/src/connections.c:1030
+#, c-format
+msgid "no active connection on device '%s'"
+msgstr "nincs aktív kapcsolat a(z) „%s†eszközön"
+
+#: ../cli/src/connections.c:1038
+#, c-format
+msgid "no active connection or device"
+msgstr "nincs aktív kapcsolat vagy eszköz"
+
+#: ../cli/src/connections.c:1088
+#, c-format
+msgid "device '%s' not compatible with connection '%s'"
+msgstr "a(z) „%s†eszköz nem kompatibilis a(z) „%s†kapcsolattal"
+
+#: ../cli/src/connections.c:1090
+#, c-format
+msgid "no device found for connection '%s'"
+msgstr "nem található eszköz a(z) „%s†kapcsolathoz"
+
+#: ../cli/src/connections.c:1101
+msgid "activating"
+msgstr "aktiválás"
+
+#: ../cli/src/connections.c:1103
+msgid "activated"
+msgstr "aktiválva"
+
+#: ../cli/src/connections.c:1106 ../cli/src/connections.c:1129
+#: ../cli/src/connections.c:1162 ../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
+msgid "unknown"
+msgstr "ismeretlen"
+
+#: ../cli/src/connections.c:1115
+msgid "VPN connecting (prepare)"
+msgstr "VPN kapcsolódás (előkészítés)"
+
+#: ../cli/src/connections.c:1117
+msgid "VPN connecting (need authentication)"
+msgstr "VPN csatlakozás (hitelesítés szükséges)"
+
+#: ../cli/src/connections.c:1119
+msgid "VPN connecting"
+msgstr "VPN csatlakozás"
+
+#: ../cli/src/connections.c:1121
+msgid "VPN connecting (getting IP configuration)"
+msgstr "VPN kapcsolódás (IP-beállítások lekérése)"
+
+#: ../cli/src/connections.c:1123
+msgid "VPN connected"
+msgstr "VPN csatlakozott"
+
+#: ../cli/src/connections.c:1125
+msgid "VPN connection failed"
+msgstr "VPN csatlakozás sikertelen"
+
+#: ../cli/src/connections.c:1127
+msgid "VPN disconnected"
+msgstr "VPN leválasztva"
+
+#: ../cli/src/connections.c:1138
+msgid "unknown reason"
+msgstr "ismeretlen ok"
+
+#: ../cli/src/connections.c:1140
+msgid "none"
+msgstr "nincs"
+
+#: ../cli/src/connections.c:1142
+msgid "the user was disconnected"
+msgstr "felhasználó leválasztva"
+
+#: ../cli/src/connections.c:1144
+msgid "the base network connection was interrupted"
+msgstr "az alap hálózati kapcsolat megszakadt"
+
+#: ../cli/src/connections.c:1146
+msgid "the VPN service stopped unexpectedly"
+msgstr "a VPN szolgáltatás váratlanul leállt"
+
+#: ../cli/src/connections.c:1148
+msgid "the VPN service returned invalid configuration"
+msgstr "a VPN szolgáltatás érvénytelen beállításokat adott"
+
+#: ../cli/src/connections.c:1150
+msgid "the connection attempt timed out"
+msgstr "a csatlakozási kísérlet túllépte az időkorlátot"
+
+#: ../cli/src/connections.c:1152
+msgid "the VPN service did not start in time"
+msgstr "a VPN szolgáltatás nem indult el időben"
+
+#: ../cli/src/connections.c:1154
+msgid "the VPN service failed to start"
+msgstr "a VPN szolgáltatás nem indult el"
+
+#: ../cli/src/connections.c:1156
+msgid "no valid VPN secrets"
+msgstr "nincsenek érvényes VPN titkok"
+
+#: ../cli/src/connections.c:1158
+msgid "invalid VPN secrets"
+msgstr "érvénytelen VPN titkok"
+
+#: ../cli/src/connections.c:1160
+msgid "the connection was removed"
+msgstr "a kapcsolat eltávolításra került"
+
+#: ../cli/src/connections.c:1174
+#, c-format
+msgid "state: %s\n"
+msgstr "állapot: %s\n"
+
+#: ../cli/src/connections.c:1177 ../cli/src/connections.c:1203
+#, c-format
+msgid "Connection activated\n"
+msgstr "Kapcsolat aktiválva\n"
+
+#: ../cli/src/connections.c:1180
+#, c-format
+msgid "Error: Connection activation failed."
+msgstr "Hiba: a kapcsolat aktiválása meghiúsult."
+
+#: ../cli/src/connections.c:1199
+#, c-format
+msgid "state: %s (%d)\n"
+msgstr "állapot: %s (%d)\n"
+
+#: ../cli/src/connections.c:1209
+#, c-format
+msgid "Error: Connection activation failed: %s."
+msgstr "Hiba: a kapcsolat aktiválása meghiúsult: %s."
+
+#: ../cli/src/connections.c:1226 ../cli/src/devices.c:909
+#, c-format
+msgid "Error: Timeout %d sec expired."
+msgstr "Hiba: az időkorlát (%d mp) lejárt."
+
+#: ../cli/src/connections.c:1269
+#, c-format
+msgid "Error: Connection activation failed: %s"
+msgstr "Hiba: a kapcsolat aktiválása meghiúsult: %s"
+
+#: ../cli/src/connections.c:1283
+#, c-format
+msgid "Error: Obtaining active connection for '%s' failed."
+msgstr "Hiba: az aktív kapcsolat létrehozása meghiúsult ehhez: „%sâ€."
+
+#: ../cli/src/connections.c:1292
+#, c-format
+msgid "Active connection state: %s\n"
+msgstr "Aktív kapcsolat állapota: %s\n"
+
+#: ../cli/src/connections.c:1293
+#, c-format
+msgid "Active connection path: %s\n"
+msgstr "Aktív kapcsolat útvonala: %s\n"
+
+#: ../cli/src/connections.c:1347 ../cli/src/connections.c:1468
+#, c-format
+msgid "Error: Unknown connection: %s."
+msgstr "Hiba: ismeretlen kapcsolat: %s."
+
+#: ../cli/src/connections.c:1382 ../cli/src/devices.c:980
+#, c-format
+msgid "Error: timeout value '%s' is not valid."
+msgstr "Hiba: a(z) „%s†időkorlát érvénytelen."
+
+#: ../cli/src/connections.c:1395 ../cli/src/connections.c:1485
+#, c-format
+msgid "Error: id or uuid has to be specified."
+msgstr "Hiba: meg kell adni az id vagy uuid egyikét."
+
+#: ../cli/src/connections.c:1415
+#, c-format
+msgid "Error: No suitable device found: %s."
+msgstr "Hiba: nem található megfelelő eszköz: %s."
+
+#: ../cli/src/connections.c:1417
+#, c-format
+msgid "Error: No suitable device found."
+msgstr "Hiba: nem található megfelelő eszköz."
+
+#: ../cli/src/connections.c:1512
+#, c-format
+msgid "Warning: Connection not active\n"
+msgstr "Figyelmeztetés: a kapcsolat nem aktív\n"
+
+#: ../cli/src/connections.c:1569
+#, c-format
+msgid "Error: 'con' command '%s' is not valid."
+msgstr "Hiba: a(z) „%s†„con†parancs nem érvényes."
+
+#: ../cli/src/connections.c:1605
+#, c-format
+msgid "Error: could not connect to D-Bus."
+msgstr "Hiba: nem lehet a D-Bushoz kapcsolódni."
+
+#: ../cli/src/connections.c:1612
+#, c-format
+msgid "Error: Could not get system settings."
+msgstr "Hiba: a rendszer beállításai nem kérhetők le."
+
+#: ../cli/src/connections.c:1620
+#, c-format
+msgid "Error: Could not get user settings."
+msgstr "Hiba: a felhasználó beállításai nem kérhetők le."
+
+#: ../cli/src/connections.c:1630
+#, c-format
+msgid "Error: Can't obtain connections: settings services are not running."
+msgstr "Hiba: nem kérhetők le a kapcsolatok: a beállítószolgáltatások nem futnak."
+
+#. 0
+#. 9
+#: ../cli/src/devices.c:61 ../cli/src/devices.c:89 ../cli/src/devices.c:184
+msgid "DEVICE"
+msgstr "ESZKÖZ"
+
+#. 1
+#. 4
+#. 0
+#: ../cli/src/devices.c:63 ../cli/src/devices.c:93
+#: ../cli/src/network-manager.c:36
+msgid "STATE"
+msgstr "ÃLLAPOT"
+
+#: ../cli/src/devices.c:72
+msgid "GENERAL"
+msgstr "ÃLTALÃNOS"
+
+#. 0
+#: ../cli/src/devices.c:73
+msgid "CAPABILITIES"
+msgstr "KÉPESSÉGEK"
+
+#. 1
+#: ../cli/src/devices.c:74
+msgid "WIFI-PROPERTIES"
+msgstr "WIFI-KÉPESSÉGEK"
+
+#. 2
+#: ../cli/src/devices.c:75
+msgid "AP"
+msgstr "AP"
+
+#. 3
+#: ../cli/src/devices.c:76
+msgid "WIRED-PROPERTIES"
+msgstr "VEZETÉKES-TULAJDONSÃGOK"
+
+#. 4
+#: ../cli/src/devices.c:77
+msgid "IP4-SETTINGS"
+msgstr "IP4-BEÃLLÃTÃSOK"
+
+#. 5
+#: ../cli/src/devices.c:78
+msgid "IP4-DNS"
+msgstr "IP4-DNS"
+
+#. 6
+#: ../cli/src/devices.c:79
+msgid "IP6-SETTINGS"
+msgstr "IP6-BEÃLLÃTÃSOK"
+
+#. 7
+#: ../cli/src/devices.c:80
+msgid "IP6-DNS"
+msgstr "IP6-DNS"
+
+#. 2
+#: ../cli/src/devices.c:91
+msgid "DRIVER"
+msgstr "ILLESZTÅPROGRAM"
+
+#. 3
+#: ../cli/src/devices.c:92
+msgid "HWADDR"
+msgstr "HWCÃM"
+
+#. 0
+#: ../cli/src/devices.c:102
+msgid "CARRIER-DETECT"
+msgstr "HORDOZÓ-FELISMERÉS"
+
+#. 1
+#: ../cli/src/devices.c:103
+msgid "SPEED"
+msgstr "SEBESSÉG"
+
+#. 0
+#: ../cli/src/devices.c:112
+msgid "CARRIER"
+msgstr "HORDOZÓ"
+
+#. 0
+#: ../cli/src/devices.c:122
+msgid "WEP"
+msgstr "WEP"
+
+#. 1
+#: ../cli/src/devices.c:123
+msgid "WPA"
+msgstr "WPA"
+
+#. 2
+#: ../cli/src/devices.c:124
+msgid "WPA2"
+msgstr "WPA2"
+
+#. 3
+#: ../cli/src/devices.c:125
+msgid "TKIP"
+msgstr "TKIP"
+
+#. 4
+#: ../cli/src/devices.c:126
+msgid "CCMP"
+msgstr "CCMP"
+
+#. 0
+#: ../cli/src/devices.c:135 ../cli/src/devices.c:146
+msgid "ADDRESS"
+msgstr "CÃM"
+
+#. 1
+#: ../cli/src/devices.c:136 ../cli/src/devices.c:147
+msgid "PREFIX"
+msgstr "ELÅTAG"
+
+#. 2
+#: ../cli/src/devices.c:137 ../cli/src/devices.c:148
+msgid "GATEWAY"
+msgstr "ÃTJÃRÓ"
+
+#. 0
+#: ../cli/src/devices.c:157 ../cli/src/devices.c:166
+msgid "DNS"
+msgstr "DNS"
+
+#. 0
+#: ../cli/src/devices.c:175
+msgid "SSID"
+msgstr "SSID"
+
+#. 1
+#: ../cli/src/devices.c:176
+msgid "BSSID"
+msgstr "BSSID"
+
+#. 2
+#: ../cli/src/devices.c:177
+msgid "MODE"
+msgstr "MÓD"
+
+#. 3
+#: ../cli/src/devices.c:178
+msgid "FREQ"
+msgstr "FREK"
+
+#. 4
+#: ../cli/src/devices.c:179
+msgid "RATE"
+msgstr "SEBESSÉG"
+
+#. 5
+#: ../cli/src/devices.c:180
+msgid "SIGNAL"
+msgstr "SZIGNÃL"
+
+#. 6
+#: ../cli/src/devices.c:181
+msgid "SECURITY"
+msgstr "BIZTONSÃG"
+
+#. 7
+#: ../cli/src/devices.c:182
+msgid "WPA-FLAGS"
+msgstr "WPA-JELZÅK"
+
+#. 8
+#: ../cli/src/devices.c:183
+msgid "RSN-FLAGS"
+msgstr "RSN-JELZÅK"
+
+#. 10
+#: ../cli/src/devices.c:185
+msgid "ACTIVE"
+msgstr "AKTÃV"
+
+#: ../cli/src/devices.c:208
+#, c-format
+msgid ""
+"Usage: nmcli dev { COMMAND | help }\n"
+"\n"
+" COMMAND := { status | list | disconnect | wifi }\n"
+"\n"
+" status\n"
+" list [iface <iface>]\n"
+" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
+" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+"\n"
+msgstr ""
+"Használat: nmcli dev { PARANCS | help }\n"
+"\n"
+" PARANCS := { status | list | disconnect | wifi }\n"
+"\n"
+" status\n"
+" list [iface <csatoló>]\n"
+" disconnect iface <csatoló> [--nowait] [--timeout <időkorlát>]\n"
+" wifi [list [iface <csatoló>] [hwaddr <hwcím>]]\n"
+"\n"
+
+#: ../cli/src/devices.c:228
+msgid "unmanaged"
+msgstr "kezeletlen"
+
+#: ../cli/src/devices.c:230
+msgid "unavailable"
+msgstr "elérhetetlen"
+
+#: ../cli/src/devices.c:232 ../cli/src/network-manager.c:91
+msgid "disconnected"
+msgstr "leválasztva"
+
+#: ../cli/src/devices.c:234
+msgid "connecting (prepare)"
+msgstr "kapcsolódás (előkészítés)"
+
+#: ../cli/src/devices.c:236
+msgid "connecting (configuring)"
+msgstr "kapcsolódás (konfigurálás)"
+
+#: ../cli/src/devices.c:238
+msgid "connecting (need authentication)"
+msgstr "kapcsolódás (hitelesítés szükséges)"
+
+#: ../cli/src/devices.c:240
+msgid "connecting (getting IP configuration)"
+msgstr "kapcsolódás (IP-beállítások lekérése)"
+
+#: ../cli/src/devices.c:242 ../cli/src/network-manager.c:89
+msgid "connected"
+msgstr "kapcsolódva"
+
+#: ../cli/src/devices.c:244
+msgid "connection failed"
+msgstr "kapcsolódás sikertelen"
+
+#: ../cli/src/devices.c:267 ../cli/src/devices.c:424
+msgid "Unknown"
+msgstr "Ismeretlen"
+
+#: ../cli/src/devices.c:299
+msgid "(none)"
+msgstr "(semmi)"
+
+#: ../cli/src/devices.c:324
+#, c-format
+msgid "%s: error converting IP4 address 0x%X"
+msgstr "%s: hiba az IP4 cím (0x%X) konvertálásakor"
+
+#: ../cli/src/devices.c:393
+#, c-format
+msgid "%u MHz"
+msgstr "%u MHz"
+
+#: ../cli/src/devices.c:394
+#, c-format
+msgid "%u MB/s"
+msgstr "%u MB/s"
+
+#: ../cli/src/devices.c:403
+msgid "Encrypted: "
+msgstr "Titkosított: "
+
+#: ../cli/src/devices.c:408
+msgid "WEP "
+msgstr "WEP "
+
+#: ../cli/src/devices.c:410
+msgid "WPA "
+msgstr "WPA "
+
+#: ../cli/src/devices.c:412
+msgid "WPA2 "
+msgstr "WPA2 "
+
+#: ../cli/src/devices.c:415
+msgid "Enterprise "
+msgstr "Enterprise "
+
+#: ../cli/src/devices.c:424
+msgid "Ad-Hoc"
+msgstr "Eseti"
+
+#: ../cli/src/devices.c:424
+msgid "Infrastructure"
+msgstr "Infrastruktúra"
+
+#: ../cli/src/devices.c:486
+#, c-format
+msgid "Error: 'dev list': %s"
+msgstr "Hiba: „dev listâ€: %s"
+
+#: ../cli/src/devices.c:488
+#, c-format
+msgid "Error: 'dev list': %s; allowed fields: %s"
+msgstr "Hiba: „dev listâ€: %s; engedélyezett mezÅ‘k: %s"
+
+#: ../cli/src/devices.c:497
+msgid "Device details"
+msgstr "Eszköz részletei"
+
+#: ../cli/src/devices.c:527 ../cli/src/devices.c:925
+msgid "(unknown)"
+msgstr "(ismeretlen)"
+
+#: ../cli/src/devices.c:528
+msgid "unknown)"
+msgstr "ismeretlen)"
+
+#: ../cli/src/devices.c:554
+#, c-format
+msgid "%u Mb/s"
+msgstr "%u Mb/s"
+
+#. Print header
+#. "WIRED-PROPERTIES"
+#: ../cli/src/devices.c:627
+msgid "on"
+msgstr "be"
+
+#: ../cli/src/devices.c:627
+msgid "off"
+msgstr "ki"
+
+#: ../cli/src/devices.c:808
+#, c-format
+msgid "Error: 'dev status': %s"
+msgstr "Hiba: „dev statusâ€: %s"
+
+#: ../cli/src/devices.c:810
+#, c-format
+msgid "Error: 'dev status': %s; allowed fields: %s"
+msgstr "Hiba: „dev statusâ€: %s; engedélyezett mezÅ‘k: %s"
+
+#: ../cli/src/devices.c:817
+msgid "Status of devices"
+msgstr "Eszközök állapota"
+
+#: ../cli/src/devices.c:845
+#, c-format
+msgid "Error: '%s' argument is missing."
+msgstr "Hiba: „%s†argumentum hiányzik."
+
+#: ../cli/src/devices.c:874 ../cli/src/devices.c:1013
+#: ../cli/src/devices.c:1136
+#, c-format
+msgid "Error: Device '%s' not found."
+msgstr "Hiba: a(z) „%s†eszköz nem található."
+
+#: ../cli/src/devices.c:897
+#, c-format
+msgid "Success: Device '%s' successfully disconnected."
+msgstr "Siker: a(z) „%s†eszköz sikeresen leválasztva."
+
+#: ../cli/src/devices.c:922
+#, c-format
+msgid "Error: Device '%s' (%s) disconnecting failed: %s"
+msgstr "Hiba: a(z) „%s†(%s) eszköz leválasztása meghiúsult: %s"
+
+#: ../cli/src/devices.c:930
+#, c-format
+msgid "Device state: %d (%s)\n"
+msgstr "Eszköz állapota: %d (%s)\n"
+
+#: ../cli/src/devices.c:994
+#, c-format
+msgid "Error: iface has to be specified."
+msgstr "Hiba: meg kell adni a csatolót."
+
+#: ../cli/src/devices.c:1112
+#, c-format
+msgid "Error: 'dev wifi': %s"
+msgstr "Hiba: „dev wifiâ€: %s"
+
+#: ../cli/src/devices.c:1114
+#, c-format
+msgid "Error: 'dev wifi': %s; allowed fields: %s"
+msgstr "Hiba: „dev wifiâ€: %s; engedélyezett mezÅ‘k: %s"
+
+#: ../cli/src/devices.c:1121
+msgid "WiFi scan list"
+msgstr "WiFi-keresési lista"
+
+#: ../cli/src/devices.c:1156 ../cli/src/devices.c:1210
+#, c-format
+msgid "Error: Access point with hwaddr '%s' not found."
+msgstr "Hiba: nem található a(z) „%s†hwcímű hozzáférési pont,"
+
+#: ../cli/src/devices.c:1173
+#, c-format
+msgid "Error: Device '%s' is not a WiFi device."
+msgstr "Hiba: a(z) „%s†eszköz nem WiFi-eszköz."
+
+#: ../cli/src/devices.c:1237
+#, c-format
+msgid "Error: 'dev wifi' command '%s' is not valid."
+msgstr "Hiba: a „dev wifi†parancs („%s) nem érvényes."
+
+#: ../cli/src/devices.c:1284
+#, c-format
+msgid "Error: 'dev' command '%s' is not valid."
+msgstr "Hiba: a „dev†parancs („%s) nem érvényes."
+
+#: ../cli/src/network-manager.c:35
+msgid "RUNNING"
+msgstr "FUT"
+
+#. 1
+#: ../cli/src/network-manager.c:37
+msgid "NET-ENABLED"
+msgstr "NET-KÉPES"
+
+#. 2
+#: ../cli/src/network-manager.c:38
+msgid "WIFI-HARDWARE"
+msgstr "WIFI-HARDVER"
+
+#. 3
+#: ../cli/src/network-manager.c:39
+msgid "WIFI"
+msgstr "WIFI"
+
+#. 4
+#: ../cli/src/network-manager.c:40
+msgid "WWAN-HARDWARE"
+msgstr "WWAN-HARDVER"
+
+#. 5
+#: ../cli/src/network-manager.c:41
+msgid "WWAN"
+msgstr "WWAN"
+
+#: ../cli/src/network-manager.c:64
+#, 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 | 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 ""
+"Használat: nmcli nm { PARANCS | help }\n"
+"\n"
+" PARANCS := { status | enable | sleep | wifi | wwan }\n"
+"\n"
+" status\n"
+" enable [true|false]\n"
+" sleep [true|false]\n"
+" wifi [on|off]\n"
+" wwan [on|off]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:85
+msgid "asleep"
+msgstr "alszik"
+
+#: ../cli/src/network-manager.c:87
+msgid "connecting"
+msgstr "csatlakozás"
+
+#: ../cli/src/network-manager.c:128
+#, c-format
+msgid "Error: 'nm status': %s"
+msgstr "Hiba: „nm statusâ€: %s"
+
+#: ../cli/src/network-manager.c:130
+#, c-format
+msgid "Error: 'nm status': %s; allowed fields: %s"
+msgstr "Hiba: „nm statusâ€: %s; engedélyezett mezÅ‘k: %s"
+
+#: ../cli/src/network-manager.c:137
+msgid "NetworkManager status"
+msgstr "Hálózatkezelő állapota"
+
+#. Print header
+#: ../cli/src/network-manager.c:144 ../cli/src/network-manager.c:145
+#: ../cli/src/network-manager.c:146 ../cli/src/network-manager.c:147
+#: ../cli/src/network-manager.c:154 ../cli/src/network-manager.c:247
+#: ../cli/src/network-manager.c:296 ../cli/src/network-manager.c:328
+msgid "enabled"
+msgstr "engedélyezve"
+
+#: ../cli/src/network-manager.c:144 ../cli/src/network-manager.c:145
+#: ../cli/src/network-manager.c:146 ../cli/src/network-manager.c:147
+#: ../cli/src/network-manager.c:154 ../cli/src/network-manager.c:247
+#: ../cli/src/network-manager.c:296 ../cli/src/network-manager.c:328
+msgid "disabled"
+msgstr "letiltva"
+
+#: ../cli/src/network-manager.c:152
+msgid "running"
+msgstr "fut"
+
+#: ../cli/src/network-manager.c:152
+msgid "not running"
+msgstr "nem fut"
+
+#: ../cli/src/network-manager.c:175
+#, c-format
+#| msgid "Error: could not connect to D-Bus."
+msgid "Error: Couldn't connect to system bus: %s"
+msgstr "Hiba: nem lehet a rendszerbuszhoz kapcsolódni: %s"
+
+#: ../cli/src/network-manager.c:186
+#, c-format
+#| msgid "Error: could not connect to D-Bus."
+msgid "Error: Couldn't create D-Bus object proxy."
+msgstr "Hiba: nem lehet a D-Bus objektumproxyhoz kapcsolódni."
+
+#: ../cli/src/network-manager.c:192
+#, c-format
+#| msgid "Error: 'con list': %s"
+msgid "Error in sleep: %s"
+msgstr "Hiba az alváskor: %s"
+
+#: ../cli/src/network-manager.c:237 ../cli/src/network-manager.c:286
+#: ../cli/src/network-manager.c:318
+#, c-format
+msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
+msgstr "Hiba: a(z) „%s†„--fields†érték itt nem érvényes; engedélyezett mezők: %s"
+
+#: ../cli/src/network-manager.c:245
+#| msgid "WiFi enabled"
+msgid "Networking enabled"
+msgstr "Hálózatkezelés engedélyezve"
+
+#: ../cli/src/network-manager.c:256
+#, c-format
+#| msgid "Error: invalid 'wwan' parameter: '%s'."
+msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
+msgstr "Hiba: érvénytelen „enable†paraméter: „%sâ€; használja a „true†vagy „false†egyikét."
+
+#: ../cli/src/network-manager.c:265
+#, c-format
+#| msgid "Error: Could not connect to NetworkManager."
+msgid "Error: Sleeping status is not exported by NetworkManager."
+msgstr "Hiba: a Hálózatkezelő nem exportálta az alvási állapotot."
+
+#: ../cli/src/network-manager.c:273
+#, c-format
+#| msgid "Error: invalid 'wifi' parameter: '%s'."
+msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
+msgstr "Hiba: érvénytelen „sleep†paraméter: „%sâ€; használja a „true†vagy „false†egyikét."
+
+#: ../cli/src/network-manager.c:294
+msgid "WiFi enabled"
+msgstr "WiFi engedélyezve"
+
+#: ../cli/src/network-manager.c:305
+#, c-format
+msgid "Error: invalid 'wifi' parameter: '%s'."
+msgstr "Hiba: érvénytelen „wifi†paraméter: „%sâ€."
+
+#: ../cli/src/network-manager.c:326
+msgid "WWAN enabled"
+msgstr "WWAN engedélyezve"
+
+#: ../cli/src/network-manager.c:337
+#, c-format
+msgid "Error: invalid 'wwan' parameter: '%s'."
+msgstr "Hiba: érvénytelen „wwan†paraméter: „%sâ€."
+
+#: ../cli/src/network-manager.c:348
+#, c-format
+msgid "Error: 'nm' command '%s' is not valid."
+msgstr "Hiba: a(z) „%s†„nm†parancs nem érvényes."
+
+#: ../cli/src/nmcli.c:69
+#, 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] <field1,field2,...>|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 ""
+"Használat: %s [KAPCSOLÓK] OBJEKTUM { PARANCS | help }\n"
+"\n"
+"KAPCSOLÓK\n"
+" -t[erse] tömör kimenet\n"
+" -p[retty] szép kimenet\n"
+" -m[ode] tabular|multiline kimeneti mód\n"
+" -f[ields] <mező1,mező2,…>|all|common kiírandó mezők megadása\n"
+" -e[scape] yes|no oszlopelválasztók escape-lése "
+"az értékekben\n"
+" -v[ersion] programverzió kiírása\n"
+" -h[elp] ezen súgó kiírása\n"
+"\n"
+"OBJEKTUM\n"
+" nm Hálózatkezelő állapota\n"
+" con Hálózatkezelő kapcsolatai\n"
+" dev A Hálózatkezelő által kezelt eszközök\n"
+"\n"
+
+#: ../cli/src/nmcli.c:113
+#, c-format
+msgid "Error: Object '%s' is unknown, try 'nmcli help'."
+msgstr "Hiba: a(z) „%s†objektum ismeretlen, adja ki az „nmcli help†parancsot."
+
+#: ../cli/src/nmcli.c:143
+#, c-format
+msgid "Error: Option '--terse' is specified the second time."
+msgstr "Hiba: a „--terse†kapcsoló másodszor lett megadva."
+
+#: ../cli/src/nmcli.c:148
+#, c-format
+msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
+msgstr "Hiba: a „--terse†és a „--pretty†kapcsolók kölcsönösen kizáróak."
+
+#: ../cli/src/nmcli.c:156
+#, c-format
+msgid "Error: Option '--pretty' is specified the second time."
+msgstr "Hiba: a „--pretty†kapcsoló másodszor lett megadva."
+
+#: ../cli/src/nmcli.c:161
+#, c-format
+msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
+msgstr "Hiba: a „--pretty†és „--terse†kapcsolók kölcsönösen kizáróak."
+
+#: ../cli/src/nmcli.c:171 ../cli/src/nmcli.c:187
+#, c-format
+msgid "Error: missing argument for '%s' option."
+msgstr "Hiba: a(z) „%s†kapcsoló argumentuma hiányzik."
+
+#: ../cli/src/nmcli.c:180 ../cli/src/nmcli.c:196
+#, c-format
+msgid "Error: '%s' is not valid argument for '%s' option."
+msgstr "Hiba: „%s†nem érvényes argumentum a(z) „%s†kapcsolóhoz."
+
+#: ../cli/src/nmcli.c:203
+#, c-format
+msgid "Error: fields for '%s' options are missing."
+msgstr "Hiba: a(z) „%s†kapcsoló mezői hiányoznak."
+
+#: ../cli/src/nmcli.c:209
+#, c-format
+msgid "nmcli tool, version %s\n"
+msgstr "nmcli eszköz, %s verzió\n"
+
+#: ../cli/src/nmcli.c:215
+#, c-format
+msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
+msgstr "Hiba: a(z) „%s†kapcsoló ismeretlen, adja ki az „nmcli-help†parancsot."
+
+#: ../cli/src/nmcli.c:234
+#, c-format
+msgid "Caught signal %d, shutting down..."
+msgstr "%d szignál érkezett, leállítás…"
+
+#: ../cli/src/nmcli.c:259
+#, c-format
+msgid "Error: Could not connect to NetworkManager."
+msgstr "Hiba: nem lehet kapcsolódni a Hálózatkezelőhöz."
+
+#: ../cli/src/nmcli.c:275
+msgid "Success"
+msgstr "Siker"
+
+#: ../cli/src/settings.c:411
+#, c-format
+msgid "%d (hex-ascii-key)"
+msgstr "%d (hex-ascii-kulcs)"
+
+#: ../cli/src/settings.c:413
+#, c-format
+msgid "%d (104/128-bit passphrase)"
+msgstr "%d (104/128 bites jelmondat)"
+
+#: ../cli/src/settings.c:416
+#, c-format
+msgid "%d (unknown)"
+msgstr "%d (ismeretlen)"
+
+#: ../cli/src/settings.c:442
+msgid "0 (unknown)"
+msgstr "0 (ismeretlen)"
+
+#: ../cli/src/settings.c:448
+msgid "any, "
+msgstr "bármely, "
+
+#: ../cli/src/settings.c:450
+msgid "900 MHz, "
+msgstr "900 MHz, "
+
+#: ../cli/src/settings.c:452
+msgid "1800 MHz, "
+msgstr "1800 MHz, "
+
+#: ../cli/src/settings.c:454
+msgid "1900 MHz, "
+msgstr "1900 MHz, "
+
+#: ../cli/src/settings.c:456
+msgid "850 MHz, "
+msgstr "850 MHz, "
+
+#: ../cli/src/settings.c:458
+msgid "WCDMA 3GPP UMTS 2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 2100 MHz, "
+
+#: ../cli/src/settings.c:460
+msgid "WCDMA 3GPP UMTS 1800 MHz, "
+msgstr "WCDMA 3GPP UMTS 1800 MHz, "
+
+#: ../cli/src/settings.c:462
+msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
+
+#: ../cli/src/settings.c:464
+msgid "WCDMA 3GPP UMTS 800 MHz, "
+msgstr "WCDMA 3GPP UMTS 800 MHz, "
+
+#: ../cli/src/settings.c:466
+msgid "WCDMA 3GPP UMTS 850 MHz, "
+msgstr "WCDMA 3GPP UMTS 850 MHz, "
+
+#: ../cli/src/settings.c:468
+msgid "WCDMA 3GPP UMTS 900 MHz, "
+msgstr "WCDMA 3GPP UMTS 900 MHz, "
+
+#: ../cli/src/settings.c:470
+msgid "WCDMA 3GPP UMTS 1700 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700 MHz, "
+
+#: ../cli/src/settings.c:554 ../cli/src/settings.c:721
+msgid "auto"
+msgstr "auto"
+
+#: ../cli/src/settings.c:716 ../cli/src/settings.c:719
+#: ../cli/src/settings.c:720 ../cli/src/utils.c:172
+msgid "not set"
+msgstr "nincs beállítva"
+
+#: ../cli/src/utils.c:124
+#, c-format
+msgid "field '%s' has to be alone"
+msgstr "a(z) „%s†mezőnek önállónak kell lennie"
+
+#: ../cli/src/utils.c:127
+#, c-format
+msgid "invalid field '%s'"
+msgstr "érvénytelen mezÅ‘: „%sâ€"
+
+#: ../cli/src/utils.c:146
+#, c-format
+msgid "Option '--terse' requires specifying '--fields'"
+msgstr "A „--terse†megköveteli a „--fields†megadását."
+
+#: ../cli/src/utils.c:150
+#, c-format
+msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
+msgstr "A „--terse†adott „--fields†kapcsolóértékeket követel meg, nem ezt: „%sâ€."
+
#: ../libnm-util/crypto.c:120
#, c-format
msgid "PEM key file had no end tag '%s'."
@@ -104,7 +1322,7 @@ msgstr "Az IV nem hexadecimális számjegyeket tartalmaz."
#: ../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:335
+#: ../libnm-util/crypto_nss.c:336
#, c-format
msgid "Private key cipher '%s' was unknown."
msgstr "A(z) „%s†személyeskulcs-titkosító ismeretlen."
@@ -163,17 +1381,17 @@ msgstr "Az IV beállítása meghiúsult a visszafejtéshez: %s / %s."
msgid "Failed to decrypt the private key: %s / %s."
msgstr "A személyes kulcs visszafejtése meghiúsult: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:210 ../libnm-util/crypto_nss.c:266
+#: ../libnm-util/crypto_gnutls.c:210 ../libnm-util/crypto_nss.c:267
#, c-format
msgid "Failed to decrypt the private key: unexpected padding length."
msgstr "A személyes kulcs visszafejtése meghiúsult: váratlan kitöltéshossz."
-#: ../libnm-util/crypto_gnutls.c:221 ../libnm-util/crypto_nss.c:277
+#: ../libnm-util/crypto_gnutls.c:221 ../libnm-util/crypto_nss.c:278
#, c-format
msgid "Failed to decrypt the private key."
msgstr "A személyes kulcs visszafejtése meghiúsult."
-#: ../libnm-util/crypto_gnutls.c:286 ../libnm-util/crypto_nss.c:355
+#: ../libnm-util/crypto_gnutls.c:286 ../libnm-util/crypto_nss.c:356
#, c-format
msgid "Could not allocate memory for encrypting."
msgstr "Nem sikerült memóriát foglalni a titkosításhoz."
@@ -223,7 +1441,7 @@ msgstr "A PKCS#12 fájl nem fejthető vissza: %s"
msgid "Couldn't verify PKCS#12 file: %s"
msgstr "A PKCS#12 fájl nem ellenőrizhető: %s"
-#: ../libnm-util/crypto_nss.c:57
+#: ../libnm-util/crypto_nss.c:56
#, c-format
msgid "Failed to initialize the crypto engine: %d."
msgstr "A titkosító alrendszer előkészítése meghiúsult: %d."
@@ -266,153 +1484,259 @@ msgstr "A személyes kulcs visszafejtése meghiúsult: %d."
#: ../libnm-util/crypto_nss.c:245
#, c-format
msgid "Failed to decrypt the private key: decrypted data too large."
-msgstr "A személyes kulcs visszafejtése meghiúsult: a visszafejtett adatok túl nagyok."
+msgstr ""
+"A személyes kulcs visszafejtése meghiúsult: a visszafejtett adatok túl "
+"nagyok."
#: ../libnm-util/crypto_nss.c:256
#, c-format
msgid "Failed to finalize decryption of the private key: %d."
msgstr "A személyes kulcs visszafejtésének befejezése meghiúsult: %d."
-#: ../libnm-util/crypto_nss.c:363
+#: ../libnm-util/crypto_nss.c:364
#, c-format
msgid "Failed to initialize the encryption cipher slot."
msgstr "A titkosítóhely előkészítése meghiúsult."
-#: ../libnm-util/crypto_nss.c:371
+#: ../libnm-util/crypto_nss.c:372
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "A szimmetrikus kulcs nem állítható be a titkosításhoz."
-#: ../libnm-util/crypto_nss.c:379
+#: ../libnm-util/crypto_nss.c:380
#, c-format
msgid "Failed to set IV for encryption."
msgstr "Az IV nem állítható be a titkosításhoz."
-#: ../libnm-util/crypto_nss.c:387
+#: ../libnm-util/crypto_nss.c:388
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "A titkosítási kontextus előkészítése meghiúsult."
-#: ../libnm-util/crypto_nss.c:395
+#: ../libnm-util/crypto_nss.c:396
#, c-format
msgid "Failed to encrypt: %d."
msgstr "A titkosítás meghiúsult: %d."
-#: ../libnm-util/crypto_nss.c:403
+#: ../libnm-util/crypto_nss.c:404
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "Váratlan mennyiségű adat a titkosítás után."
-#: ../libnm-util/crypto_nss.c:446
+#: ../libnm-util/crypto_nss.c:447
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "A tanúsítvány nem fejthető vissza: %d"
-#: ../libnm-util/crypto_nss.c:481
+#: ../libnm-util/crypto_nss.c:482
#, c-format
msgid "Couldn't convert password to UCS2: %d"
msgstr "A jelszó nem alakítható UCS2 formátumra: %d"
-#: ../libnm-util/crypto_nss.c:509
+#: ../libnm-util/crypto_nss.c:510
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %d"
msgstr "A PKCS#12 dekódoló nem készíthető elő: %d"
-#: ../libnm-util/crypto_nss.c:518
+#: ../libnm-util/crypto_nss.c:519
#, c-format
msgid "Couldn't decode PKCS#12 file: %d"
msgstr "A PKCS#12 fájl nem fejthető vissza: %d"
-#: ../libnm-util/crypto_nss.c:527
+#: ../libnm-util/crypto_nss.c:528
#, c-format
msgid "Couldn't verify PKCS#12 file: %d"
msgstr "A PKCS#12 fájl nem ellenőrizhető: %d"
-#: ../libnm-util/crypto_nss.c:556
+#: ../libnm-util/crypto_nss.c:557
msgid "Could not generate random data."
msgstr "Nem sikerült a véletlen adatok előállítása."
-#: ../libnm-util/nm-utils.c:1522
+#: ../libnm-util/nm-utils.c:1975
#, c-format
msgid "Not enough memory to make encryption key."
msgstr "Nincs elég memória titkosítási kulcs készítéséhez."
-#: ../libnm-util/nm-utils.c:1633
+#: ../libnm-util/nm-utils.c:2085
msgid "Could not allocate memory for PEM file creation."
msgstr "Nem sikerült memóriát foglalni PEM fájl készítéséhez."
-#: ../libnm-util/nm-utils.c:1645
+#: ../libnm-util/nm-utils.c:2097
#, c-format
msgid "Could not allocate memory for writing IV to PEM file."
msgstr "Nem sikerült memóriát foglalni az IV írásához PEM fájlba."
-#: ../libnm-util/nm-utils.c:1657
+#: ../libnm-util/nm-utils.c:2109
#, c-format
msgid "Could not allocate memory for writing encrypted key to PEM file."
msgstr "Nem sikerült memóriát foglalni a titkosított kulcs PEM fájlba írásához."
-#: ../libnm-util/nm-utils.c:1676
+#: ../libnm-util/nm-utils.c:2128
#, c-format
msgid "Could not allocate memory for PEM file data."
msgstr "Nem sikerült memóriát foglalni a PEM fájl adatainak."
-#: ../src/nm-netlink-monitor.c:194 ../src/nm-netlink-monitor.c:464
-#: ../src/nm-netlink-monitor.c:569
-#: ../src/ip6-manager/nm-netlink-listener.c:352
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
+msgid "Connection sharing via a protected WiFi network"
+msgstr "Kapcsolatmegosztás védett WiFi hálózaton"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
+msgid "Connection sharing via an open WiFi network"
+msgstr "Kapcsolatmegosztás nyílt WiFi hálózaton"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
+msgid "Modify persistent system hostname"
+msgstr "Ãllandó rendszergépnév módosítása"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
+msgid "Modify system connections"
+msgstr "Rendszerkapcsolatok módosítása"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
+msgid "System policy prevents modification of system settings"
+msgstr "A rendszer házirendje megakadályozza a rendszerbeállítások módosítását"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
+msgid "System policy prevents modification of the persistent system hostname"
+msgstr ""
+"A rendszer házirendje megakadályozza a rendszer állandó gépnevének "
+"módosítását"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
+msgid "System policy prevents sharing connections via a protected WiFi network"
+msgstr ""
+"A rendszer házirendje megakadályozza a kapcsolatok megosztását védett WiFi "
+"hálózaton"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
+msgid "System policy prevents sharing connections via an open WiFi network"
+msgstr ""
+"A rendszer házirendje megakadályozza a kapcsolatok megosztását nyílt WiFi "
+"hálózaton"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
+msgid "Allow control of network connections"
+msgstr "Hálózati kapcsolatok felügyeletének engedélyezése"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
+msgid "Allow use of user-specific connections"
+msgstr "Felhasználói szintű kapcsolatok engedélyezése"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
+msgid "Enable or disable WiFi devices"
+msgstr "WiFi eszközök be- és kikapcsolása"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
+msgid "Enable or disable mobile broadband devices"
+msgstr "Mobil széles sávú eszközök be- és kikapcsolása"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+msgid "Enable or disable system networking"
+msgstr "Rendszer hálózatkezelésének be- és kikapcsolása"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
+msgid ""
+"Put NetworkManager to sleep or wake it up (should only be used by system "
+"power management)"
+msgstr ""
+"Hálózatkezelő elaltatása vagy felébresztése (csak a rendszer "
+"energiagazdálkodása által használandó)"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
+msgid "System policy prevents control of network connections"
+msgstr "A rendszer házirendje megakadályozza a hálózati kapcsolatok felügyeletét"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
+msgid "System policy prevents enabling or disabling WiFi devices"
+msgstr "A rendszer házirendje megakadályozza a WiFi eszközök be- vagy kikapcsolását"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
+msgid "System policy prevents enabling or disabling mobile broadband devices"
+msgstr ""
+"A rendszer házirendje megakadályozza a mobil széles sávú eszközök be- vagy "
+"kikapcsolását"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
+msgid "System policy prevents enabling or disabling system networking"
+msgstr ""
+"A rendszer házirendje megakadályozza a rendszer hálózatkezelésének be- vagy "
+"kikapcsolását"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
+msgid "System policy prevents putting NetworkManager to sleep or waking it up"
+msgstr ""
+"A rendszer házirendje megakadályozza a Hálózatkezelő elaltatását vagy "
+"felébresztését"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
+msgid "System policy prevents use of user-specific connections"
+msgstr "A rendszer házirendje megakadályozza a felhasználói kapcsolatok használatát"
+
+#: ../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 "hiba a netlink üzenet feldolgozásakor: %s"
-#: ../src/nm-netlink-monitor.c:260
-#, c-format
-msgid "unable to allocate netlink handle for monitoring link status: %s"
-msgstr ""
-"nem lehet netlink kezelőt lefoglalni a kapcsolat állapotának megfigyelése "
-"érdekében: %s"
+#: ../src/nm-netlink-monitor.c:214
+msgid "error occurred while waiting for data on socket"
+msgstr "hiba lépett fel adatokra várakozás közben a foglalaton"
-#: ../src/nm-netlink-monitor.c:270
+#: ../src/nm-netlink-monitor.c:254
#, c-format
msgid "unable to connect to netlink for monitoring link status: %s"
msgstr ""
"nem lehet kapcsolódni a netlinkhez a kapcsolat állapotának megfigyelése "
"érdekében: %s"
-#: ../src/nm-netlink-monitor.c:278
+#: ../src/nm-netlink-monitor.c:265
#, c-format
-msgid "unable to join netlink group for monitoring link status: %s"
+msgid "unable to enable netlink handle credential passing: %s"
msgstr ""
-"nem lehet csatlakozni a netlink csoporthoz a kapcsolat állapotának "
-"megfigyelése érdekében: %s"
+"nem engedélyezhető a hálózati kapcsolatkezelő hitelesítési adatainak "
+"átadása: %s"
+
+#: ../src/nm-netlink-monitor.c:291 ../src/nm-netlink-monitor.c:353
+#, c-format
+msgid "unable to allocate netlink handle for monitoring link status: %s"
+msgstr ""
+"nem lehet netlink kezelőt lefoglalni a kapcsolat állapotának megfigyelése "
+"érdekében: %s"
-#: ../src/nm-netlink-monitor.c:286
+#: ../src/nm-netlink-monitor.c:376
#, c-format
msgid "unable to allocate netlink link cache for monitoring link status: %s"
msgstr ""
"nem lehet netlink kapcsolat-gyorsítótárat lefoglalni a kapcsolat állapotának "
"megfigyelése érdekében: %s"
-#: ../src/nm-netlink-monitor.c:494
-#: ../src/ip6-manager/nm-netlink-listener.c:382
-msgid "error occurred while waiting for data on socket"
-msgstr "hiba lépett fel adatokra várakozás közben a foglalaton"
+#: ../src/nm-netlink-monitor.c:502
+#, c-format
+msgid "unable to join netlink group: %s"
+msgstr "nem lehet csatlakozni a netlink csoporthoz: %s"
-#: ../src/nm-netlink-monitor.c:558
+#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642
#, c-format
msgid "error updating link cache: %s"
msgstr "hiba a kapcsolat gyorsítótárának frissítésekor: %s"
-#: ../src/NetworkManager.c:330
+#: ../src/main.c:499
#, c-format
msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgstr ""
"Érvénytelen kapcsoló. Az érvényes kapcsolók listájáért használja a --help "
"kapcsolót.\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:304
+#: ../src/main.c:570
+#, c-format
+msgid "%s. Please use --help to see a list of valid options.\n"
+msgstr "%s. Használja a --help kapcsolót az érvényes kapcsolókért.\n"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:328
msgid "# Created by NetworkManager\n"
-msgstr "# Készítette a NetworkManager\n"
+msgstr "# Készítette a Hálózatkezelő\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:310
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:344
#, c-format
msgid ""
"# Merged from %s\n"
@@ -421,73 +1745,48 @@ msgstr ""
"# Összefésülve ebből: %s\n"
"\n"
-#: ../src/ip6-manager/nm-netlink-listener.c:200
+#: ../src/dhcp-manager/nm-dhcp-manager.c:284
+msgid "no usable DHCP client could be found."
+msgstr "nem található használható DHCP-kliens."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+msgid "'dhclient' could be found."
+msgstr "A „dhclient†nem használható."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:303
+msgid "'dhcpcd' could be found."
+msgstr "A „dhcpd†nem használható."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:311
#, c-format
-msgid "unable to allocate netlink handle: %s"
-msgstr "nem lehet netlink kezelőt lefoglalni: %s"
+msgid "unsupported DHCP client '%s'"
+msgstr "nem támogatott DHCP-kliens („%sâ€)"
-#: ../src/ip6-manager/nm-netlink-listener.c:210
+#: ../src/logging/nm-logging.c:146
#, c-format
-msgid "unable to connect to netlink: %s"
-msgstr "nem lehet kapcsolódni a netlinkhez: %s"
+msgid "Unknown log level '%s'"
+msgstr "Ismeretlen naplózási szint: „%sâ€"
-#: ../src/ip6-manager/nm-netlink-listener.c:307
+#: ../src/logging/nm-logging.c:171
#, c-format
-msgid "unable to join netlink group: %s"
-msgstr "nem lehet csatlakozni a netlink csoporthoz: %s"
+msgid "Unknown log domain '%s'"
+msgstr "Ismeretlen naplózási tartomány: „%sâ€"
-#: ../src/named-manager/nm-named-manager.c:315
+#: ../src/dns-manager/nm-dns-manager.c:384
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr "MEGJEGYZÉS: a libc feloldó nem támogat háromnál több névkiszolgálót."
-#: ../src/named-manager/nm-named-manager.c:317
+#: ../src/dns-manager/nm-dns-manager.c:386
msgid "The nameservers listed below may not be recognized."
msgstr "Az alább felsorolt névkiszolgálók lehet, hogy nem kerülnek felismerésre."
-#: ../src/system-settings/nm-default-wired-connection.c:194
+#: ../src/system-settings/nm-default-wired-connection.c:157
#, c-format
msgid "Auto %s"
msgstr "Automatikus %s"
-#: ../system-settings/plugins/ifcfg-rh/reader.c:2406
+#: ../system-settings/plugins/ifcfg-rh/reader.c:3412
+#: ../system-settings/plugins/ifnet/connection_parser.c:49
msgid "System"
msgstr "Rendszer"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
-msgid "Connection sharing via a protected WiFi network"
-msgstr "Kapcsolatmegosztás védett WiFi hálózaton"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
-msgid "Connection sharing via an open WiFi network"
-msgstr "Kapcsolatmegosztás nyílt WiFi hálózaton"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
-msgid "Modify persistent system hostname"
-msgstr "Ãllandó rendszergépnév módosítása"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
-msgid "Modify system connections"
-msgstr "Rendszerkapcsolatok módosítása"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
-msgid "System policy prevents modification of system settings"
-msgstr "A rendszer házirendje megakadályozza a rendszerbeállítások módosítását"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
-msgid "System policy prevents modification of the persistent system hostname"
-msgstr ""
-"A rendszer házirendje megakadályozza a rendszer állandó gépnevének "
-"módosítását"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
-msgid "System policy prevents sharing connections via a protected WiFi network"
-msgstr ""
-"A rendszer házirendje megakadályozza a kapcsolatok megosztását védett WiFi "
-"hálózaton"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
-msgid "System policy prevents sharing connections via an open WiFi network"
-msgstr ""
-"A rendszer házirendje megakadályozza a kapcsolatok megosztását nyílt WiFi "
-"hálózaton"
-
diff --git a/po/id.po b/po/id.po
index 82d1f2348b..b88792905f 100644
--- a/po/id.po
+++ b/po/id.po
@@ -1,963 +1,1716 @@
# Indonesian translation for network-manager
-# Copyright (c) 2007 Rosetta Contributors and Canonical Ltd 2007
+# Copyright (C) 2010 THE network-manager'S COPYRIGHT HOLDER
# This file is distributed under the same license as the network-manager package.
-# Andika Triwidada <andika@gmail.com>, 2007.
+# Andika Triwidada <andika@gmail.com>, 2010.
#
msgid ""
msgstr ""
-"Project-Id-Version: network-manager\n"
-"POT-Creation-Date: 2007-04-13 11:43+0000\n"
-"PO-Revision-Date: 2007-04-21 11:10+0000\n"
+"Project-Id-Version: network-manager master\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=NetworkManager&component=general\n"
+"POT-Creation-Date: 2010-08-10 03:25+0000\n"
+"PO-Revision-Date: 2010-08-10 16:04+0700\n"
"Last-Translator: Andika Triwidada <andika@gmail.com>\n"
-"Language-Team: Indonesian <id@li.org>\n"
+"Language-Team: GNOME Indonesian Translation Team <gnome@i15n.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=(0);\n"
-"X-Rosetta-Export-Date: 2007-05-01 15:50:07+0000\n"
+"X-Poedit-Language: Indonesian\n"
+"X-Poedit-Country: Indonesia\n"
+
+#: ../cli/src/connections.c:60 ../cli/src/connections.c:75
+#: ../cli/src/devices.c:88 ../cli/src/devices.c:101 ../cli/src/devices.c:111
+#: ../cli/src/devices.c:121 ../cli/src/devices.c:134 ../cli/src/devices.c:145
+#: ../cli/src/devices.c:156 ../cli/src/devices.c:165 ../cli/src/devices.c:174
+msgid "NAME"
+msgstr "NAME"
+
+#. 0
+#: ../cli/src/connections.c:61 ../cli/src/connections.c:76
+msgid "UUID"
+msgstr "UUID"
+
+#. 1
+#: ../cli/src/connections.c:62
+msgid "DEVICES"
+msgstr "DEVICES"
+
+#. 2
+#: ../cli/src/connections.c:63 ../cli/src/connections.c:78
+msgid "SCOPE"
+msgstr "SCOPE"
+
+#. 3
+#: ../cli/src/connections.c:64
+msgid "DEFAULT"
+msgstr "DEFAULT"
+
+#. 4
+#: ../cli/src/connections.c:65
+msgid "DBUS-SERVICE"
+msgstr "DBUS-SERVICE"
+
+#. 5
+#: ../cli/src/connections.c:66
+msgid "SPEC-OBJECT"
+msgstr "SPEC-OBJECT"
+
+#. 6
+#: ../cli/src/connections.c:67
+msgid "VPN"
+msgstr "VPN"
+
+#. 1
+#. 0
+#. 1
+#: ../cli/src/connections.c:77 ../cli/src/devices.c:62 ../cli/src/devices.c:90
+msgid "TYPE"
+msgstr "TYPE"
+
+#. 3
+#: ../cli/src/connections.c:79
+msgid "TIMESTAMP"
+msgstr "TIMESTAMP"
+
+#. 4
+#: ../cli/src/connections.c:80
+msgid "TIMESTAMP-REAL"
+msgstr "TIMESTAMP-REAL"
+
+#. 5
+#: ../cli/src/connections.c:81
+msgid "AUTOCONNECT"
+msgstr "AUTOCONNECT"
+
+#. 6
+#: ../cli/src/connections.c:82
+msgid "READONLY"
+msgstr "READONLY"
+
+#: ../cli/src/connections.c:158
+#, c-format
+msgid ""
+"Usage: nmcli con { COMMAND | help }\n"
+" COMMAND := { list | status | up | down }\n"
+"\n"
+" list [id <id> | uuid <id> | system | user]\n"
+" status\n"
+" up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout "
+"<timeout>]\n"
+" down id <id> | uuid <id>\n"
+msgstr ""
+"Cara pakai: nmcli con { PERINTAH | help }\n"
+" PERINTAH := { list | status | up | down }\n"
+"\n"
+" list [id <id> | uuid <id> | system | user]\n"
+" status\n"
+" up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout "
+"<timeout>]\n"
+" down id <id> | uuid <id>\n"
-#: ../gnome/applet/applet-compat.c:171 ../gnome/applet/applet-dbus-info.c:915
+#: ../cli/src/connections.c:198 ../cli/src/connections.c:537
#, c-format
-msgid "Passphrase for wireless network %s"
-msgstr "Frasa-kunci untuk jaringan nirkabel %s"
+msgid "Error: 'con list': %s"
+msgstr "Galat: 'con list': %s"
-#: ../gnome/applet/applet-dbus.c:265
+#: ../cli/src/connections.c:200 ../cli/src/connections.c:539
#, c-format
-msgid "Connection to the wireless network '%s' failed."
-msgstr "Koneksi ke jaringan nirkabel '%s' gagal."
+msgid "Error: 'con list': %s; allowed fields: %s"
+msgstr "Galat: 'con list': %s; ruas yang diijinkan: %s"
+
+#: ../cli/src/connections.c:208
+msgid "Connection details"
+msgstr "Rincian koneksi"
+
+#: ../cli/src/connections.c:382 ../cli/src/connections.c:602
+msgid "system"
+msgstr "system"
+
+#: ../cli/src/connections.c:382 ../cli/src/connections.c:602
+msgid "user"
+msgstr "user"
+
+#: ../cli/src/connections.c:384
+msgid "never"
+msgstr "never"
+
+#. "CAPABILITIES"
+#. Print header
+#. "WIFI-PROPERTIES"
+#: ../cli/src/connections.c:385 ../cli/src/connections.c:386
+#: ../cli/src/connections.c:603 ../cli/src/connections.c:606
+#: ../cli/src/devices.c:432 ../cli/src/devices.c:557 ../cli/src/devices.c:583
+#: ../cli/src/devices.c:584 ../cli/src/devices.c:585 ../cli/src/devices.c:586
+#: ../cli/src/devices.c:587 ../cli/src/settings.c:508
+#: ../cli/src/settings.c:551 ../cli/src/settings.c:652
+#: ../cli/src/settings.c:926 ../cli/src/settings.c:927
+#: ../cli/src/settings.c:929 ../cli/src/settings.c:931
+#: ../cli/src/settings.c:1056 ../cli/src/settings.c:1057
+#: ../cli/src/settings.c:1058 ../cli/src/settings.c:1137
+#: ../cli/src/settings.c:1138 ../cli/src/settings.c:1139
+#: ../cli/src/settings.c:1140 ../cli/src/settings.c:1141
+#: ../cli/src/settings.c:1142 ../cli/src/settings.c:1143
+#: ../cli/src/settings.c:1144 ../cli/src/settings.c:1145
+#: ../cli/src/settings.c:1146 ../cli/src/settings.c:1147
+#: ../cli/src/settings.c:1148 ../cli/src/settings.c:1149
+#: ../cli/src/settings.c:1224
+msgid "yes"
+msgstr "ya"
+
+#: ../cli/src/connections.c:385 ../cli/src/connections.c:386
+#: ../cli/src/connections.c:603 ../cli/src/connections.c:606
+#: ../cli/src/devices.c:432 ../cli/src/devices.c:557 ../cli/src/devices.c:583
+#: ../cli/src/devices.c:584 ../cli/src/devices.c:585 ../cli/src/devices.c:586
+#: ../cli/src/devices.c:587 ../cli/src/settings.c:508
+#: ../cli/src/settings.c:510 ../cli/src/settings.c:551
+#: ../cli/src/settings.c:652 ../cli/src/settings.c:926
+#: ../cli/src/settings.c:927 ../cli/src/settings.c:929
+#: ../cli/src/settings.c:931 ../cli/src/settings.c:1056
+#: ../cli/src/settings.c:1057 ../cli/src/settings.c:1058
+#: ../cli/src/settings.c:1137 ../cli/src/settings.c:1138
+#: ../cli/src/settings.c:1139 ../cli/src/settings.c:1140
+#: ../cli/src/settings.c:1141 ../cli/src/settings.c:1142
+#: ../cli/src/settings.c:1143 ../cli/src/settings.c:1144
+#: ../cli/src/settings.c:1145 ../cli/src/settings.c:1146
+#: ../cli/src/settings.c:1147 ../cli/src/settings.c:1148
+#: ../cli/src/settings.c:1149 ../cli/src/settings.c:1224
+msgid "no"
+msgstr "tidak"
+
+#: ../cli/src/connections.c:458 ../cli/src/connections.c:501
+msgid "System connections"
+msgstr "Koneksi sistem"
+
+#: ../cli/src/connections.c:463 ../cli/src/connections.c:514
+msgid "User connections"
+msgstr "Koneksi pengguna"
+
+#: ../cli/src/connections.c: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
+#, c-format
+msgid "Error: %s argument is missing."
+msgstr "Galat: argumen %s hilang."
-#: ../gnome/applet/applet-dbus.c:270
-msgid "Connection to the wired network failed."
-msgstr "Koneksi ke jaringan berkabel gagal."
+#: ../cli/src/connections.c:488
+#, c-format
+msgid "Error: %s - no such connection."
+msgstr "Galat: %s - koneksi tak ada."
-#: ../gnome/applet/applet.c:184
-msgid "Error displaying connection information:"
-msgstr "Kesalahan menampilkan informasi sambungan:"
+#: ../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
+#, c-format
+msgid "Unknown parameter: %s\n"
+msgstr "Parameter tak dikenal: %s\n"
-#: ../gnome/applet/applet.c:202
-msgid "Could not find some required resources (the glade file)!"
-msgstr ""
-"Tidak dapat menemukan beberapa sumberdaya yang diperlukan (berkas glade)!"
+#: ../cli/src/connections.c:529
+#, c-format
+msgid "Error: no valid parameter specified."
+msgstr "Galat: tak ada parameter valid yang dinyatakan."
-#: ../gnome/applet/applet.c:213
-msgid "No active connections!"
-msgstr "Tidak ada koneksi aktif!"
+#: ../cli/src/connections.c:544 ../cli/src/connections.c:1577
+#: ../cli/src/devices.c:1293 ../cli/src/network-manager.c:274
+#, c-format
+msgid "Error: %s."
+msgstr "Galat: %s."
-#: ../gnome/applet/applet.c:234
+#: ../cli/src/connections.c:650
#, c-format
-msgid "Wired Ethernet (%s)"
-msgstr "Ethernet Berkabel (%s)"
+msgid "Error: 'con status': %s"
+msgstr "Galat: 'con status': %s"
-#: ../gnome/applet/applet.c:236
+#: ../cli/src/connections.c:652
#, c-format
-msgid "Wireless Ethernet (%s)"
-msgstr "Ethernet Nirkabel (%s)"
+msgid "Error: 'con status': %s; allowed fields: %s"
+msgstr "Galat: 'con status': %s; ruas yang diijinkan: %s"
-#: ../gnome/applet/applet.c:332 ../gnome/applet/applet.c:358
-msgid "NetworkManager Applet"
-msgstr "Applet NetworkManager"
+#: ../cli/src/connections.c:659
+msgid "Active connections"
+msgstr "Koneksi aktif"
-#: ../gnome/applet/applet.c:334
-msgid ""
-"Copyright © 2004-2006 Red Hat, Inc.\n"
-"Copyright © 2005-2006 Novell, Inc."
-msgstr ""
-"Hak Cipta © 2004-2006 Red Hat, Inc.\n"
-"Hak Cipta © 2005-2006 Novell, Inc."
+#: ../cli/src/connections.c:1027
+#, c-format
+msgid "no active connection on device '%s'"
+msgstr "tak ada koneksi aktif pada perangkat '%s'"
-#: ../gnome/applet/applet.c:336 ../gnome/applet/applet.c:362
-msgid ""
-"Notification area applet for managing your network devices and connections."
-msgstr ""
-"Applet wilayah notifikasi untuk mengelola perangkat dan koneksi jaringan."
+#: ../cli/src/connections.c:1035
+#, c-format
+msgid "no active connection or device"
+msgstr "tak ada koneksi atau perangkat aktif "
+
+#: ../cli/src/connections.c:1085
+#, c-format
+msgid "device '%s' not compatible with connection '%s'"
+msgstr "perangkat '%s' tak kompatibel dengan koneksi '%s'"
-#: ../gnome/applet/applet.c:339 ../gnome/applet/applet.c:366
-msgid "translator-credits"
-msgstr "Andika Triwidada <andika@gmail.com>, 2007."
+#: ../cli/src/connections.c:1087
+#, c-format
+msgid "no device found for connection '%s'"
+msgstr "tak ditemukan perangkat bagi koneksi '%s'"
-#: ../gnome/applet/applet.c:360
-msgid ""
-"Copyright © 2004-2005 Red Hat, Inc.\n"
-"Copyright © 2005-2006 Novell, Inc."
-msgstr ""
-"Hak Cipta © 2004-2005 Red Hat, Inc.\n"
-"Hak Cipta © 2005-2006 Novell, Inc."
+#: ../cli/src/connections.c:1098
+msgid "activating"
+msgstr "mengaktifkan"
+
+#: ../cli/src/connections.c:1100
+msgid "activated"
+msgstr "diaktifkan"
+
+#: ../cli/src/connections.c:1103 ../cli/src/connections.c:1126
+#: ../cli/src/connections.c:1159 ../cli/src/devices.c:246
+#: ../cli/src/devices.c:558 ../cli/src/network-manager.c:92
+#: ../cli/src/network-manager.c:145 ../cli/src/settings.c:473
+msgid "unknown"
+msgstr "tak diketahui"
+
+#: ../cli/src/connections.c:1112
+msgid "VPN connecting (prepare)"
+msgstr "VPN sedang menyiapkan"
+
+#: ../cli/src/connections.c:1114
+msgid "VPN connecting (need authentication)"
+msgstr "VPN sedang menyambung (perlu otentikasi)"
+
+#: ../cli/src/connections.c:1116
+msgid "VPN connecting"
+msgstr "VPN sedang menyambung"
+
+#: ../cli/src/connections.c:1118
+msgid "VPN connecting (getting IP configuration)"
+msgstr "VPN sedang menyambung (sedang mengambil konfigurasi IP)"
+
+#: ../cli/src/connections.c:1120
+msgid "VPN connected"
+msgstr "VPN terhubung"
+
+#: ../cli/src/connections.c:1122
+msgid "VPN connection failed"
+msgstr "Sambungan VPN gagal"
+
+#: ../cli/src/connections.c:1124
+msgid "VPN disconnected"
+msgstr "VPN diputus"
+
+#: ../cli/src/connections.c:1135
+msgid "unknown reason"
+msgstr "alasan tidak diketahui"
+
+#: ../cli/src/connections.c:1137
+msgid "none"
+msgstr "tidak ada"
+
+#: ../cli/src/connections.c:1139
+msgid "the user was disconnected"
+msgstr "pengguna diputus"
-#: ../gnome/applet/applet.c:422
-msgid "VPN Login Failure"
-msgstr "Kegagalan Login VPN"
+#: ../cli/src/connections.c:1141
+msgid "the base network connection was interrupted"
+msgstr "koneksi jaringan dasar terputus"
-#: ../gnome/applet/applet.c:423
+#: ../cli/src/connections.c:1143
+msgid "the VPN service stopped unexpectedly"
+msgstr "layanan VPN berhenti secara tak terduga"
+
+#: ../cli/src/connections.c:1145
+msgid "the VPN service returned invalid configuration"
+msgstr "layanan VPN mengembalikan konfigurasi yang tak valid"
+
+#: ../cli/src/connections.c:1147
+msgid "the connection attempt timed out"
+msgstr "usaha koneksi kehabisan waktu"
+
+#: ../cli/src/connections.c:1149
+msgid "the VPN service did not start in time"
+msgstr "layanan VPN tak mulai pada waktunya"
+
+#: ../cli/src/connections.c:1151
+msgid "the VPN service failed to start"
+msgstr "layanan VPN gagal dimulai"
+
+#: ../cli/src/connections.c:1153
+msgid "no valid VPN secrets"
+msgstr "tak ada rahasia VPN yang valid"
+
+#: ../cli/src/connections.c:1155
+msgid "invalid VPN secrets"
+msgstr "rahasia VPN tak valid"
+
+#: ../cli/src/connections.c:1157
+msgid "the connection was removed"
+msgstr "koneksi dihapus"
+
+#: ../cli/src/connections.c:1171
#, c-format
-msgid "Could not start the VPN connection '%s' due to a login failure."
-msgstr "Tidak dapat memulai koneksi VPN '%s' karena sebuah kegagalan login."
+msgid "state: %s\n"
+msgstr "keadaan: %s\n"
-#: ../gnome/applet/applet.c:427
-msgid "VPN Start Failure"
-msgstr "Kegagalan Memulai VPN"
+#: ../cli/src/connections.c:1174 ../cli/src/connections.c:1200
+#, c-format
+msgid "Connection activated\n"
+msgstr "Koneksi diaktifkan\n"
-#: ../gnome/applet/applet.c:428
+#: ../cli/src/connections.c:1177
#, c-format
-msgid ""
-"Could not start the VPN connection '%s' due to a failure launching the VPN "
-"program."
-msgstr ""
-"Tidak dapat memulai koneksi VPN '%s' karena kegagalan menjalankan program "
-"VPN."
+msgid "Error: Connection activation failed."
+msgstr "Galat: Aktivasi koneksi gagal."
-#: ../gnome/applet/applet.c:432 ../gnome/applet/applet.c:442
-msgid "VPN Connect Failure"
-msgstr "Kegagalan Koneksi VPN"
+#: ../cli/src/connections.c:1196
+#, c-format
+msgid "state: %s (%d)\n"
+msgstr "keadaan: %s (%d)\n"
-#: ../gnome/applet/applet.c:433
+#: ../cli/src/connections.c:1206
#, c-format
-msgid "Could not start the VPN connection '%s' due to a connection error."
-msgstr "Tidak dapat memulai koneksi VPN '%s' karena kesalahan sambungan."
+msgid "Error: Connection activation failed: %s."
+msgstr "Galat: Aktivasi koneksi gagal: %s."
-#: ../gnome/applet/applet.c:437
-msgid "VPN Configuration Error"
-msgstr "Kesalahan Konfigurasi VPN"
+#: ../cli/src/connections.c:1223 ../cli/src/devices.c:909
+#, c-format
+msgid "Error: Timeout %d sec expired."
+msgstr "Galat: Timeout %d detik telah berlalu."
-#: ../gnome/applet/applet.c:438
+#: ../cli/src/connections.c:1266
#, c-format
-msgid "The VPN connection '%s' was not correctly configured."
-msgstr "Koneksi VPN '%s' tidak dikonfigurasi dengan benar."
+msgid "Error: Connection activation failed: %s"
+msgstr "Galat: Aktivasi koneksi gagal: %s"
-#: ../gnome/applet/applet.c:443
+#: ../cli/src/connections.c:1280
#, c-format
-msgid ""
-"Could not start the VPN connection '%s' because the VPN server did not "
-"return an adequate network configuration."
-msgstr ""
-"Tidak dapat memulai koneksi VPN '%s' karena server VPN tidak mengembalikan "
-"konfigurasi jaringan yang cukup."
+msgid "Error: Obtaining active connection for '%s' failed."
+msgstr "Galat: Memperoleh koneksi aktif bagi '%s' gagal."
-#: ../gnome/applet/applet.c:513
-msgid "VPN Login Message"
-msgstr "Pesan Login VPN"
+#: ../cli/src/connections.c:1289
+#, c-format
+msgid "Active connection state: %s\n"
+msgstr "Keadaan koneksi aktif: %s\n"
-#: ../gnome/applet/applet.c:737 ../gnome/applet/applet.c:2549
-#: ../gnome/applet/other-network-dialog.c:453
-#: ../gnome/applet/passphrase-dialog.c:228
-msgid ""
-"The NetworkManager Applet could not find some required resources (the glade "
-"file was not found)."
-msgstr ""
-"Applet NetworkManager tidak dapat menemukan beberapa sumberdaya yang "
-"diperlukan (berkas glade tidak ditemukan)."
+#: ../cli/src/connections.c:1290
+#, c-format
+msgid "Active connection path: %s\n"
+msgstr "Path koneksi aktif: %s\n"
-#: ../gnome/applet/applet.c:749
+#: ../cli/src/connections.c:1344 ../cli/src/connections.c:1465
#, c-format
-msgid "The network device \"%s (%s)\" does not support wireless scanning."
-msgstr "Perangkat jaringan \"%s (%s)\" tidak mendukung pelarikan nirkabel."
+msgid "Error: Unknown connection: %s."
+msgstr "Galat: Koneksi tak dikenal: %s."
-#: ../gnome/applet/applet.c:757
+#: ../cli/src/connections.c:1379 ../cli/src/devices.c:980
#, c-format
-msgid "The network device \"%s (%s)\" does not support link detection."
-msgstr "Perangkat jaringan \"%s (%s)\" tidak mendukung deteksi link."
+msgid "Error: timeout value '%s' is not valid."
+msgstr "Galat: nilai timeout '%s' tak valid."
-#: ../gnome/applet/applet.c:903
+#: ../cli/src/connections.c:1392 ../cli/src/connections.c:1482
#, c-format
-msgid "Preparing device %s for the wired network..."
-msgstr "Sedang menyiapkan perangkat %s untuk jaringan berkabel..."
+msgid "Error: id or uuid has to be specified."
+msgstr "Galat: id atau uuid mesti dinyatakan."
-#: ../gnome/applet/applet.c:905
+#: ../cli/src/connections.c:1412
#, c-format
-msgid "Preparing device %s for the wireless network '%s'..."
-msgstr "Menyiapkan perangkat %s untuk jaringan nirkabel '%s'..."
+msgid "Error: No suitable device found: %s."
+msgstr "Galat: tak ditemukan perangkat yang cocok: %s."
-#: ../gnome/applet/applet.c:913
+#: ../cli/src/connections.c:1414
#, c-format
-msgid "Configuring device %s for the wired network..."
-msgstr "Mengkonfigur perangkat %s untuk jaringan berkabel..."
+msgid "Error: No suitable device found."
+msgstr "Galat: tak ditemukan perangkat yang cocok."
-#: ../gnome/applet/applet.c:915
+#: ../cli/src/connections.c:1509
#, c-format
-msgid "Attempting to join the wireless network '%s'..."
-msgstr "Sedang berupaya bergabung ke jaringan nirkabel '%s'..."
+msgid "Warning: Connection not active\n"
+msgstr "Peringatan: Sambungan tak aktif\n"
-#: ../gnome/applet/applet.c:923
+#: ../cli/src/connections.c:1566
#, c-format
-msgid "Waiting for Network Key for the wireless network '%s'..."
-msgstr "Menunggu Kunci Jaringan untuk jaringan nirkabel '%s'..."
+msgid "Error: 'con' command '%s' is not valid."
+msgstr "Galat: 'con' perintah '%s' tak valid."
-#: ../gnome/applet/applet.c:931 ../gnome/applet/applet.c:941
-msgid "Requesting a network address from the wired network..."
-msgstr "Meminta alamat jaringan dari jaringan berkabel..."
+#: ../cli/src/connections.c:1602
+#, c-format
+msgid "Error: could not connect to D-Bus."
+msgstr "Galat: tak bisa menyambung ke D-Bus."
-#: ../gnome/applet/applet.c:933 ../gnome/applet/applet.c:943
+#: ../cli/src/connections.c:1609
#, c-format
-msgid "Requesting a network address from the wireless network '%s'..."
-msgstr "Meminta sebuah alamat jaringan dari jaringan nirkabel '%s'..."
+msgid "Error: Could not get system settings."
+msgstr "Galat: Tak bisa memperoleh tatanan sistem."
-#: ../gnome/applet/applet.c:951
-msgid "Finishing connection to the wired network..."
-msgstr "Menyelesaikan koneksi ke jaringan berkabel..."
+#: ../cli/src/connections.c:1617
+#, c-format
+msgid "Error: Could not get user settings."
+msgstr "Galat: Tak bisa memperoleh tatanan pengguna."
-#: ../gnome/applet/applet.c:953
+#: ../cli/src/connections.c:1627
#, c-format
-msgid "Finishing connection to the wireless network '%s'..."
-msgstr "Mengakhiri koneksi ke jaringan nirkabel '%s'..."
+msgid "Error: Can't obtain connections: settings services are not running."
+msgstr "Galat: Tak bisa mendapat koneksi: layanan penataan tak berjalan."
+
+#. 0
+#. 9
+#: ../cli/src/devices.c:61 ../cli/src/devices.c:89 ../cli/src/devices.c:184
+msgid "DEVICE"
+msgstr "DEVICE"
+
+#. 1
+#. 4
+#. 0
+#: ../cli/src/devices.c:63 ../cli/src/devices.c:93
+#: ../cli/src/network-manager.c:36
+msgid "STATE"
+msgstr "STATE"
+
+#: ../cli/src/devices.c:72
+msgid "GENERAL"
+msgstr "GENERAL"
+
+#. 0
+#: ../cli/src/devices.c:73
+msgid "CAPABILITIES"
+msgstr "CAPABILITIES"
+
+#. 1
+#: ../cli/src/devices.c:74
+msgid "WIFI-PROPERTIES"
+msgstr "WIFI-PROPERTIES"
+
+#. 2
+#: ../cli/src/devices.c:75
+msgid "AP"
+msgstr "AP"
+
+#. 3
+#: ../cli/src/devices.c:76
+msgid "WIRED-PROPERTIES"
+msgstr "WIRED-PROPERTIES"
+
+#. 4
+#: ../cli/src/devices.c:77
+msgid "IP4-SETTINGS"
+msgstr "IP4-SETTINGS"
+
+#. 5
+#: ../cli/src/devices.c:78
+msgid "IP4-DNS"
+msgstr "IP4-DNS"
+
+#. 6
+#: ../cli/src/devices.c:79
+msgid "IP6-SETTINGS"
+msgstr "IP6-SETTINGS"
+
+#. 7
+#: ../cli/src/devices.c:80
+msgid "IP6-DNS"
+msgstr "IP6-DNS"
+
+#. 2
+#: ../cli/src/devices.c:91
+msgid "DRIVER"
+msgstr "DRIVER"
+
+#. 3
+#: ../cli/src/devices.c:92
+msgid "HWADDR"
+msgstr "HWADDR"
+
+#. 0
+#: ../cli/src/devices.c:102
+msgid "CARRIER-DETECT"
+msgstr "CARRIER-DETECT"
+
+#. 1
+#: ../cli/src/devices.c:103
+msgid "SPEED"
+msgstr "SPEED"
+
+#. 0
+#: ../cli/src/devices.c:112
+msgid "CARRIER"
+msgstr "CARRIER"
+
+#. 0
+#: ../cli/src/devices.c:122
+msgid "WEP"
+msgstr "WEP"
+
+#. 1
+#: ../cli/src/devices.c:123
+msgid "WPA"
+msgstr " WPA"
+
+#. 2
+#: ../cli/src/devices.c:124
+msgid "WPA2"
+msgstr " WPA2"
+
+#. 3
+#: ../cli/src/devices.c:125
+msgid "TKIP"
+msgstr "TKIP"
+
+#. 4
+#: ../cli/src/devices.c:126
+msgid "CCMP"
+msgstr "CCMP"
+
+#. 0
+#: ../cli/src/devices.c:135 ../cli/src/devices.c:146
+msgid "ADDRESS"
+msgstr "ADDRESS"
+
+#. 1
+#: ../cli/src/devices.c:136 ../cli/src/devices.c:147
+msgid "PREFIX"
+msgstr "PREFIX"
+
+#. 2
+#: ../cli/src/devices.c:137 ../cli/src/devices.c:148
+msgid "GATEWAY"
+msgstr "GATEWAY"
+
+#. 0
+#: ../cli/src/devices.c:157 ../cli/src/devices.c:166
+msgid "DNS"
+msgstr "DNS"
+
+#. 0
+#: ../cli/src/devices.c:175
+msgid "SSID"
+msgstr "SSID"
+
+#. 1
+#: ../cli/src/devices.c:176
+msgid "BSSID"
+msgstr "BSSID"
+
+#. 2
+#: ../cli/src/devices.c:177
+msgid "MODE"
+msgstr "MODE"
+
+#. 3
+#: ../cli/src/devices.c:178
+msgid "FREQ"
+msgstr "FREQ"
+
+#. 4
+#: ../cli/src/devices.c:179
+msgid "RATE"
+msgstr "RATE"
+
+#. 5
+#: ../cli/src/devices.c:180
+msgid "SIGNAL"
+msgstr "SIGNAL"
+
+#. 6
+#: ../cli/src/devices.c:181
+msgid "SECURITY"
+msgstr "SECURITY"
+
+#. 7
+#: ../cli/src/devices.c:182
+msgid "WPA-FLAGS"
+msgstr "WPA-FLAGS"
+
+#. 8
+#: ../cli/src/devices.c:183
+msgid "RSN-FLAGS"
+msgstr "RSN-FLAGS"
+
+#. 10
+#: ../cli/src/devices.c:185
+msgid "ACTIVE"
+msgstr "ACTIVE"
+
+#: ../cli/src/devices.c:208
+#, c-format
+msgid ""
+"Usage: nmcli dev { COMMAND | help }\n"
+"\n"
+" COMMAND := { status | list | disconnect | wifi }\n"
+"\n"
+" status\n"
+" list [iface <iface>]\n"
+" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
+" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+"\n"
+msgstr ""
+"Cara pakai: nmcli dev { PERINTAH | help }\n"
+"\n"
+" PERINTAH := { status | list | disconnect | wifi }\n"
+"\n"
+" status\n"
+" list [iface <iface>]\n"
+" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
+" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+"\n"
+
+#: ../cli/src/devices.c:228
+msgid "unmanaged"
+msgstr "tak dikelola"
+
+#: ../cli/src/devices.c:230
+msgid "unavailable"
+msgstr "tak tersedia"
-#: ../gnome/applet/applet.c:1070
-msgid "NetworkManager is not running"
-msgstr "NetworkManager tidak sedang jalan"
+#: ../cli/src/devices.c:232 ../cli/src/network-manager.c:89
+msgid "disconnected"
+msgstr "terputus"
-#: ../gnome/applet/applet.c:1078 ../gnome/applet/applet.c:1864
-msgid "Networking disabled"
-msgstr "Fungsi jaringan dimatikan"
+#: ../cli/src/devices.c:234
+msgid "connecting (prepare)"
+msgstr "sedang menyambung (bersiap)"
-#: ../gnome/applet/applet.c:1083
-msgid "No network connection"
-msgstr "Tidak ada koneksi jaringan"
+#: ../cli/src/devices.c:236
+msgid "connecting (configuring)"
+msgstr "sedang menyambung (sedang menata)"
-#: ../gnome/applet/applet.c:1088
-msgid "Manual network configuration"
-msgstr "Konfigurasi jaringan manual"
+#: ../cli/src/devices.c:238
+msgid "connecting (need authentication)"
+msgstr "sedang menyambung (perlu otentikasi)"
-#: ../gnome/applet/applet.c:1090
-msgid "Wired network connection"
-msgstr "Koneksi jaringan berkabel"
+#: ../cli/src/devices.c:240
+msgid "connecting (getting IP configuration)"
+msgstr "sedang menyambung (sedang mengambil konfigurasi IP)"
-#: ../gnome/applet/applet.c:1094
-msgid "Connected to an Ad-Hoc wireless network"
-msgstr "Telah tersambung ke jaringan nirkabel Ad-Hoc"
+#: ../cli/src/devices.c:242 ../cli/src/network-manager.c:87
+msgid "connected"
+msgstr "terhubung"
-#: ../gnome/applet/applet.c:1096
+#: ../cli/src/devices.c:244
+msgid "connection failed"
+msgstr "koneksi gagal"
+
+#: ../cli/src/devices.c:267 ../cli/src/devices.c:424
+msgid "Unknown"
+msgstr "Tak dikenal"
+
+#: ../cli/src/devices.c:299
+msgid "(none)"
+msgstr "(tidak ada)"
+
+#: ../cli/src/devices.c:324
#, c-format
-msgid "Wireless network connection to '%s' (%d%%)"
-msgstr "Koneksi jaringan nirkabel ke '%s' (%d%%)"
+msgid "%s: error converting IP4 address 0x%X"
+msgstr "%s: galat mengubah alamat IP4 0x%X"
-#: ../gnome/applet/applet.c:1117
+#: ../cli/src/devices.c:393
#, c-format
-msgid "VPN connection to '%s'"
-msgstr "Koneksi VPN ke '%s'"
+msgid "%u MHz"
+msgstr "%u MHz"
-#: ../gnome/applet/applet.c:1125
+#: ../cli/src/devices.c:394
#, c-format
-msgid "VPN connecting to '%s'"
-msgstr "Sedang menyambung VPN ke '%s\""
+msgid "%u MB/s"
+msgstr "%u MB/s"
-#: ../gnome/applet/applet.c:1555
-msgid "_Connect to Other Wireless Network..."
-msgstr "Sambung ke Jaringan Nirkabel Lain..."
+#: ../cli/src/devices.c:403
+msgid "Encrypted: "
+msgstr "Terenkripsi:"
-#: ../gnome/applet/applet.c:1576
-msgid "Create _New Wireless Network..."
-msgstr "Buat Jaringan Nirkabel Baru"
+#: ../cli/src/devices.c:408
+msgid "WEP "
+msgstr "WEP "
-#: ../gnome/applet/applet.c:1695
-msgid "_Manual configuration..."
-msgstr "Konfigurasi manual..."
+#: ../cli/src/devices.c:410
+msgid "WPA "
+msgstr "WPA "
-#: ../gnome/applet/applet.c:1718
-msgid "_VPN Connections"
-msgstr "Sambungan VPN"
+#: ../cli/src/devices.c:412
+msgid "WPA2 "
+msgstr "WPA2 "
-#: ../gnome/applet/applet.c:1763
-msgid "_Configure VPN..."
-msgstr "Mengkonfigur VPN..."
+#: ../cli/src/devices.c:415
+msgid "Enterprise "
+msgstr "Enterprise "
-#: ../gnome/applet/applet.c:1767
-msgid "_Disconnect VPN..."
-msgstr "Memutus VPN..."
+#: ../cli/src/devices.c:424
+msgid "Ad-Hoc"
+msgstr "Ad-Hoc"
-#: ../gnome/applet/applet.c:1789
-msgid "_Dial Up Connections"
-msgstr "Koneksi Dial Up"
+#: ../cli/src/devices.c:424
+msgid "Infrastructure"
+msgstr "Infrastruktur"
-#: ../gnome/applet/applet.c:1800
+#: ../cli/src/devices.c:486
#, c-format
-msgid "Connect to %s..."
-msgstr "Menyambung ke %s..."
+msgid "Error: 'dev list': %s"
+msgstr "Galat: 'dev list': %s"
-#: ../gnome/applet/applet.c:1806
+#: ../cli/src/devices.c:488
#, c-format
-msgid "Disconnect from %s..."
-msgstr "Memutus dari %s..."
+msgid "Error: 'dev list': %s; allowed fields: %s"
+msgstr "Galat: 'dev list': %s; ruas yang diijinkan: %s"
-#: ../gnome/applet/applet.c:1856
-msgid "No network devices have been found"
-msgstr "Tidak menemukan perangkat jaringan"
+#: ../cli/src/devices.c:497
+msgid "Device details"
+msgstr "Rincian perangkat"
-#: ../gnome/applet/applet.c:2051
-msgid "NetworkManager is not running..."
-msgstr "NetworkManager tidak sedang jalan..."
+#: ../cli/src/devices.c:527 ../cli/src/devices.c:925
+msgid "(unknown)"
+msgstr "(tak diketahui)"
-#: ../gnome/applet/applet.c:2208
-msgid "Enable _Networking"
-msgstr "Fungsikan Jaringan"
+#: ../cli/src/devices.c:528
+msgid "unknown)"
+msgstr "tak diketahui)"
-#: ../gnome/applet/applet.c:2214
-msgid "Enable _Wireless"
-msgstr "Fungsikan Nirkabel"
+#: ../cli/src/devices.c:554
+#, c-format
+msgid "%u Mb/s"
+msgstr "%u Mb/s"
-#: ../gnome/applet/applet.c:2220
-msgid "Connection _Information"
-msgstr "Informasi Koneksi"
+#. Print header
+#. "WIRED-PROPERTIES"
+#: ../cli/src/devices.c:627
+msgid "on"
+msgstr "nyala"
-#: ../gnome/applet/applet.c:2231
-msgid "_Help"
-msgstr "Bantuan"
+#: ../cli/src/devices.c:627
+msgid "off"
+msgstr "mati"
-#: ../gnome/applet/applet.c:2240
-msgid "_About"
-msgstr "_Ihwal"
+#: ../cli/src/devices.c:808
+#, c-format
+msgid "Error: 'dev status': %s"
+msgstr "Galat: 'dev status': %s"
-#: ../gnome/applet/applet.c:2708
-msgid ""
-"The NetworkManager applet could not find some required resources. It cannot "
-"continue.\n"
-msgstr ""
-"Applet NetworkManager tidak dapat menemukan beberapa sumberdaya yang "
-"diperlukan. Tidak dapat melanjutkan.\n"
+#: ../cli/src/devices.c:810
+#, c-format
+msgid "Error: 'dev status': %s; allowed fields: %s"
+msgstr "Galat: 'dev status': %s; ruas yang diijinkan: %s"
-#: ../gnome/applet/wireless-security-option.c:157
-msgid "Open System"
-msgstr "Sistem Terbuka"
+#: ../cli/src/devices.c:817
+msgid "Status of devices"
+msgstr "Status perangkat"
-#: ../gnome/applet/wireless-security-option.c:160
-msgid "Shared Key"
-msgstr "Kunci Bersama"
+#: ../cli/src/devices.c:845
+#, c-format
+msgid "Error: '%s' argument is missing."
+msgstr "Galat: argumen '%s' hilang."
-#: ../gnome/applet/wireless-security-option.c:208
-msgid "Automatic (Default)"
-msgstr "Otomatis (Default)"
+#: ../cli/src/devices.c:874 ../cli/src/devices.c:1013
+#: ../cli/src/devices.c:1136
+#, c-format
+msgid "Error: Device '%s' not found."
+msgstr "Galat: Perangkat '%s' tak ditemukan."
-#: ../gnome/applet/wireless-security-option.c:215
-msgid "AES-CCMP"
-msgstr "AES-CCMP"
+#: ../cli/src/devices.c:897
+#, c-format
+msgid "Success: Device '%s' successfully disconnected."
+msgstr "Sukses: Perangkat '%s' diputus dengan sukses."
-#: ../gnome/applet/wireless-security-option.c:223
-msgid "TKIP"
-msgstr "TKIP"
+#: ../cli/src/devices.c:922
+#, c-format
+msgid "Error: Device '%s' (%s) disconnecting failed: %s"
+msgstr "Galat: Pemutusan perangkat '%s' (%s) gagal: %s "
-#: ../gnome/applet/wireless-security-option.c:231
-msgid "Dynamic WEP"
-msgstr "WEP Dinamis"
+#: ../cli/src/devices.c:930
+#, c-format
+msgid "Device state: %d (%s)\n"
+msgstr "Keadaan perangkat: %d (%s)\n"
-#: ../gnome/applet/wso-none.c:53
-msgid "None"
-msgstr "Tak Ada"
+#: ../cli/src/devices.c:994
+#, c-format
+msgid "Error: iface has to be specified."
+msgstr "Galat: iface mesti dinyatakan."
-#: ../gnome/applet/wso-wep-ascii.c:138
-msgid "WEP 64/128-bit ASCII"
-msgstr "WEP ASCII 64/128-bit"
+#: ../cli/src/devices.c:1112
+#, c-format
+msgid "Error: 'dev wifi': %s"
+msgstr "Galat: 'dev wifi': %s"
-#: ../gnome/applet/wso-wep-hex.c:135
-msgid "WEP 64/128-bit Hex"
-msgstr "WEP Hex 64/128-bit"
+#: ../cli/src/devices.c:1114
+#, c-format
+msgid "Error: 'dev wifi': %s; allowed fields: %s"
+msgstr "Galat: 'dev wifi': %s; ruas yang diijinkan: %s"
-#: ../gnome/applet/wso-wep-passphrase.c:135
-msgid "WEP 128-bit Passphrase"
-msgstr "Frasa-kunci WEP 128-bit"
+#: ../cli/src/devices.c:1121
+msgid "WiFi scan list"
+msgstr "Daftar pindai WiFi"
-#: ../gnome/applet/wso-wpa-eap.c:237
-msgid "PEAP"
-msgstr "PEAP"
+#: ../cli/src/devices.c:1156 ../cli/src/devices.c:1210
+#, c-format
+msgid "Error: Access point with hwaddr '%s' not found."
+msgstr "Galat: Access point dengan hwaddr '%s' tak ditemukan."
-#: ../gnome/applet/wso-wpa-eap.c:238
-msgid "TLS"
-msgstr "TLS"
+#: ../cli/src/devices.c:1173
+#, c-format
+msgid "Error: Device '%s' is not a WiFi device."
+msgstr "Galat: Perangkat '%s' bukan perangkat WiFi."
-#: ../gnome/applet/wso-wpa-eap.c:239
-msgid "TTLS"
-msgstr "TTLS"
+#: ../cli/src/devices.c:1237
+#, c-format
+msgid "Error: 'dev wifi' command '%s' is not valid."
+msgstr "Galat: 'dev wifi' perintah '%s' tak valid."
-#: ../gnome/applet/wso-wpa-eap.c:247 ../src/nm-ap-security-wpa-eap.c:93
-#: ../src/nm-ap-security-wpa-eap.c:117
-msgid "WPA2 Enterprise"
-msgstr "WPA2 Enterprise"
+#: ../cli/src/devices.c:1284
+#, c-format
+msgid "Error: 'dev' command '%s' is not valid."
+msgstr "Galat: 'dev' perintah '%s' tak valid."
+
+#: ../cli/src/network-manager.c:35
+msgid "RUNNING"
+msgstr "RUNNING"
+
+#. 1
+#: ../cli/src/network-manager.c:37
+msgid "WIFI-HARDWARE"
+msgstr "WIFI-HARDWARE"
+
+#. 2
+#: ../cli/src/network-manager.c:38
+msgid "WIFI"
+msgstr "WIFI"
+
+#. 3
+#: ../cli/src/network-manager.c:39
+msgid "WWAN-HARDWARE"
+msgstr "WWAN-HARDWARE"
+
+#. 4
+#: ../cli/src/network-manager.c:40
+msgid "WWAN"
+msgstr "WWAN"
+
+#: ../cli/src/network-manager.c:62
+#, 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"
+msgstr ""
+"Cara pakai: nmcli nm { PERINTAH | help }\n"
+"\n"
+" PERINTAH := { status | sleep | wakeup | wifi | wwan }\n"
+"\n"
+" status\n"
+" sleep\n"
+" wakeup\n"
+" wifi [on|off]\n"
+" wwan [on|off]\n"
+"\n"
-#: ../gnome/applet/wso-wpa-eap.c:249 ../src/nm-ap-security-wpa-eap.c:95
-#: ../src/nm-ap-security-wpa-eap.c:122
-msgid "WPA Enterprise"
-msgstr "WPA Enterprise"
+#: ../cli/src/network-manager.c:83
+msgid "asleep"
+msgstr "mengantuk"
-#: ../gnome/applet/wso-wpa-psk.c:178
-msgid "WPA2 Personal"
-msgstr "WPA2 Personal"
+#: ../cli/src/network-manager.c:85
+msgid "connecting"
+msgstr "menyambung"
-#: ../gnome/applet/wso-wpa-psk.c:180
-msgid "WPA Personal"
-msgstr "WPA Personal"
+#: ../cli/src/network-manager.c:125
+#, c-format
+msgid "Error: 'nm status': %s"
+msgstr "Galat: 'nm status': %s"
-#: ../gnome/applet/eggtrayicon.c:134
-msgid "Orientation"
-msgstr "Orientasi"
+#: ../cli/src/network-manager.c:127
+#, c-format
+msgid "Error: 'nm status': %s; allowed fields: %s"
+msgstr "Galat: 'nm status': %s; ruas yang diijinkan: %s"
+
+#: ../cli/src/network-manager.c:134
+msgid "NetworkManager status"
+msgstr "Status NetworkManager"
+
+#. Print header
+#: ../cli/src/network-manager.c:140 ../cli/src/network-manager.c:141
+#: ../cli/src/network-manager.c:142 ../cli/src/network-manager.c:143
+#: ../cli/src/network-manager.c:211 ../cli/src/network-manager.c:243
+msgid "enabled"
+msgstr "diaktifkan"
+
+#: ../cli/src/network-manager.c:140 ../cli/src/network-manager.c:141
+#: ../cli/src/network-manager.c:142 ../cli/src/network-manager.c:143
+#: ../cli/src/network-manager.c:211 ../cli/src/network-manager.c:243
+msgid "disabled"
+msgstr "dimatikan"
+
+#: ../cli/src/network-manager.c:148
+msgid "running"
+msgstr "berjalan"
+
+#: ../cli/src/network-manager.c:148
+msgid "not running"
+msgstr "tak berjalan"
+
+#: ../cli/src/network-manager.c:201 ../cli/src/network-manager.c:233
+#, c-format
+msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
+msgstr "Galat: nilai '--fields' '%s' tak valid disini; ruas yang diijinkan: %s"
-#: ../gnome/applet/eggtrayicon.c:135
-msgid "The orientation of the tray."
-msgstr "Orientasi dari tray"
+#: ../cli/src/network-manager.c:209
+msgid "WiFi enabled"
+msgstr "WiFi diaktifkan"
-#: ../gnome/applet/menu-items.c:88
+#: ../cli/src/network-manager.c:220
#, c-format
-msgid "Wired Network (%s)"
-msgstr "Jaringan Berkabel (%s)"
+msgid "Error: invalid 'wifi' parameter: '%s'."
+msgstr "Galat: parameter 'wifi' tak valid: '%s'."
-#: ../gnome/applet/menu-items.c:91
-msgid "_Wired Network"
-msgstr "Jaringan Berkabel"
+#: ../cli/src/network-manager.c:241
+msgid "WWAN enabled"
+msgstr "WWAN diaktifkan"
-#: ../gnome/applet/menu-items.c:162
+#: ../cli/src/network-manager.c:252
#, c-format
-msgid "Wireless Network (%s)"
-msgid_plural "Wireless Networks (%s)"
-msgstr[0] "Jaringan Nirkabel (%s)"
+msgid "Error: invalid 'wwan' parameter: '%s'."
+msgstr "Galat: parameter 'wwan' tak valid: '%s'."
-#: ../gnome/applet/menu-items.c:164
-msgid "Wireless Network"
-msgid_plural "Wireless Networks"
-msgstr[0] "Jaringan Nirkabel"
-
-#: ../gnome/applet/menu-items.c:343
-msgid " (invalid Unicode)"
-msgstr " (Unicode yang salah)"
+#: ../cli/src/network-manager.c:263
+#, c-format
+msgid "Error: 'nm' command '%s' is not valid."
+msgstr "Galat: 'nm' perintah '%s' tak valid."
-#: ../gnome/applet/other-network-dialog.c:352
+#: ../cli/src/nmcli.c:69
#, c-format
msgid ""
-"By default, the wireless network's name is set to your computer's name, %s, "
-"with no encryption enabled"
+"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] <field1,field2,...>|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 ""
-"Secara default, nama jaringan nirkabel disamakan dengan nama komputer anda, "
-"%s, tanpa enkripsi"
+"Cara pakai: %s [OPSI] OBJEK { PERINTAH | help }\n"
+"\n"
+"OPSI\n"
+" -t[erse] keluaran terinci\n"
+" -p[retty] keluaran rapi\n"
+" -m[ode] tabular|multiline mode keluaran\n"
+" -f[ields] <field1,field2,...>|all|common nyatakan ruas yang ditampilkan\n"
+" -e[scape] yes|no pemisah kolom escape di nilai\n"
+" -v[ersion] tampilkan versi program\n"
+" -h[elp] cetak bantuan ini\n"
+"\n"
+"OBJEK\n"
+" nm status NetworkManager\n"
+" con sambungan NetworkManager\n"
+" dev perangkat yang dikelola oleh NetworkManager\n"
+"\n"
-#: ../gnome/applet/other-network-dialog.c:358
-msgid "Create new wireless network"
-msgstr "Buat jaringan nirkabel baru"
+#: ../cli/src/nmcli.c:113
+#, c-format
+msgid "Error: Object '%s' is unknown, try 'nmcli help'."
+msgstr "Galat: Objek '%s' tak dikenal, coba 'nmcli help'."
-#: ../gnome/applet/other-network-dialog.c:359
-msgid ""
-"Enter the name and security settings of the wireless network you wish to "
-"create."
-msgstr ""
-"Masukkan nama dan pengaturan keamanan dari jaringan nirkabel yang akan anda "
-"buat."
+#: ../cli/src/nmcli.c:143
+#, c-format
+msgid "Error: Option '--terse' is specified the second time."
+msgstr "Galat: Opsi '--terse' dinyatakan kedua kali."
-#: ../gnome/applet/other-network-dialog.c:363
-msgid "Create New Wireless Network"
-msgstr "Buat Jaringan Nirkabel Baru"
+#: ../cli/src/nmcli.c:148
+#, c-format
+msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
+msgstr "Galat: Opsi '--terse' eksklusif mutual dengan '--pretty'."
-#: ../gnome/applet/other-network-dialog.c:368
-msgid "Existing wireless network"
-msgstr "Jaringan nirkabel yang telah ada"
+#: ../cli/src/nmcli.c:156
+#, c-format
+msgid "Error: Option '--pretty' is specified the second time."
+msgstr "Galat: Opsi '--pretty' dinyatakan kedua kali."
-#: ../gnome/applet/other-network-dialog.c:369
-msgid "Enter the name of the wireless network to which you wish to connect."
-msgstr "Masukkan nama jaringan nirkabel yang ingin anda hubungi."
+#: ../cli/src/nmcli.c:161
+#, c-format
+msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
+msgstr "Galat: Opsi '--pretty' eksklusif mutual dengan '--terse'."
-#: ../gnome/applet/other-network-dialog.c:371
-msgid "Connect to Other Wireless Network"
-msgstr "Menyambung ke Jaringan Nirkabel Lain"
+#: ../cli/src/nmcli.c:171 ../cli/src/nmcli.c:187
+#, c-format
+msgid "Error: missing argument for '%s' option."
+msgstr "Galat: argumen hilang bagi opsi '%s'."
-#: ../gnome/applet/passphrase-dialog.c:215
-msgid "Error connecting to wireless network"
-msgstr "Kesalahan menyambung ke jaringan nirkabel"
+#: ../cli/src/nmcli.c:180 ../cli/src/nmcli.c:196
+#, c-format
+msgid "Error: '%s' is not valid argument for '%s' option."
+msgstr "Galat: '%s' bukan argumen yang valid bagi opsi '%s'."
-#: ../gnome/applet/passphrase-dialog.c:216
-msgid ""
-"The requested wireless network requires security capabilities unsupported by "
-"your hardware."
-msgstr ""
-"Jaringan nirkabel yang diminta memerlukan kapabilitas keamanan yang tidak "
-"didukung oleh perangkat keras anda."
+#: ../cli/src/nmcli.c:203
+#, c-format
+msgid "Error: fields for '%s' options are missing."
+msgstr "Galat: ruas bagi opsi '%s' hilang."
-#: ../gnome/applet/vpn-password-dialog.c:151
-#: ../gnome/applet/vpn-password-dialog.c:188
+#: ../cli/src/nmcli.c:209
#, c-format
-msgid "Cannot start VPN connection '%s'"
-msgstr "Tidak dapat memulai sambungan VPN '%s'"
+msgid "nmcli tool, version %s\n"
+msgstr "alat nmcli, versi %s\n"
-#: ../gnome/applet/vpn-password-dialog.c:154
+#: ../cli/src/nmcli.c:215
#, c-format
-msgid ""
-"Could not find the authentication dialog for VPN connection type '%s'. "
-"Contact your system administrator."
-msgstr ""
-"Tidak dapat menemukan dialog autentikasi untuk koneksi VPN tipe '%s'. "
-"Hubungi administrator sistem anda."
+msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
+msgstr "Galat: Opsi '%s' tak dikenal, coba 'nmcli -help'."
-#: ../gnome/applet/vpn-password-dialog.c:191
+#: ../cli/src/nmcli.c:234
#, c-format
-msgid ""
-"There was a problem launching the authentication dialog for VPN connection "
-"type '%s'. Contact your system administrator."
-msgstr ""
-"Ada masalah ketika menjalankan dialog autentikasi untuk koneksi VPN tipe "
-"'%s'. Hubungi administrator sistem anda."
+msgid "Caught signal %d, shutting down..."
+msgstr "Menangkap sinyal %d, sedang mematikan..."
-#: ../gnome/applet/applet.glade.h:1
-msgid " "
-msgstr " "
+#: ../cli/src/nmcli.c:259
+#, c-format
+msgid "Error: Could not connect to NetworkManager."
+msgstr "Galat: Tak bisa menyambung ke NetworkManager."
-#: ../gnome/applet/applet.glade.h:2
-msgid ""
-"<span weight=\"bold\" size=\"larger\">Active Connection Information</span>"
-msgstr ""
-"<span weight=\"bold\" size=\"larger\">Informasi Sambungan Aktif</span>"
+#: ../cli/src/nmcli.c:275
+msgid "Success"
+msgstr "Sukses"
-#: ../gnome/applet/applet.glade.h:4
-#, no-c-format
-msgid ""
-"<span weight=\"bold\" size=\"larger\">Passphrase Required by Wireless "
-"Network</span>\n"
-"\n"
-"A passphrase or encryption key is required to access the wireless network "
-"'%s'."
-msgstr ""
-"<span weight=\"bold\" size=\"larger\">Frasa-kunci Diperlukan oleh Jaringan "
-"Nirkabel</span>"
+#: ../cli/src/settings.c:411
+#, c-format
+msgid "%d (hex-ascii-key)"
+msgstr "%d (kunci-hex-ascii)"
-#: ../gnome/applet/applet.glade.h:8
-#, no-c-format
-msgid ""
-"<span weight=\"bold\" size=\"larger\">Reduced Network Functionality</span>\n"
-"\n"
-"%s It will not be completely functional."
-msgstr ""
-"<span weight=\"bold\" size=\"larger\">Fungsionalitas Jaringan yang "
-"Dikurangi</span>\n"
-"\n"
-"%s Ini tidak akan fungsional secara lengkap."
+#: ../cli/src/settings.c:413
+#, c-format
+msgid "%d (104/128-bit passphrase)"
+msgstr "%d (104/128-bit frasa sandi)"
-#: ../gnome/applet/applet.glade.h:12
-#, no-c-format
-msgid ""
-"<span weight=\"bold\" size=\"larger\">Wireless Network Login "
-"Confirmation</span>\n"
-"\n"
-"You have chosen to log in to the wireless network '%s'. If you are sure "
-"that this wireless network is secure, click the checkbox below and "
-"NetworkManager will not require confirmation on subsequent log ins."
-msgstr ""
-"<span weight=\"bold\" size=\"larger\">Konfirmasi Login Jaringan "
-"Nirkabel</span>\n"
-"\n"
-"Anda telah memilih untuk login ke jaringan nirkabel '%s'. Bila anda yakin "
-"bahwa jaringan nirkabel ini aman, klik checkbox di bawah dan NetworkManager "
-"akan tidak meminta konfirmasi pada login berikutnya."
+#: ../cli/src/settings.c:416
+#, c-format
+msgid "%d (unknown)"
+msgstr "%d (tak dikenal)"
-#: ../gnome/applet/applet.glade.h:15
-msgid "Anonymous Identity:"
-msgstr "Identitas Anonim:"
+#: ../cli/src/settings.c:442
+msgid "0 (unknown)"
+msgstr "0 (tak dikenal)"
-#: ../gnome/applet/applet.glade.h:16
-msgid "Authentication:"
-msgstr "Autentikasi:"
+#: ../cli/src/settings.c:448
+msgid "any, "
+msgstr "sebarang, "
-#: ../gnome/applet/applet.glade.h:17
-msgid "Broadcast Address:"
-msgstr "Alamat Broadcast:"
+#: ../cli/src/settings.c:450
+msgid "900 MHz, "
+msgstr "900 MHz, "
-#: ../gnome/applet/applet.glade.h:18
-msgid "CA Certificate File:"
-msgstr "Berkas Sertifikat CA:"
+#: ../cli/src/settings.c:452
+msgid "1800 MHz, "
+msgstr "1800 MHz, "
-#: ../gnome/applet/applet.glade.h:19
-msgid "C_onnect"
-msgstr "Sambung"
+#: ../cli/src/settings.c:454
+msgid "1900 MHz, "
+msgstr "1900 MHz, "
-#: ../gnome/applet/applet.glade.h:20
-msgid "Client Certificate File:"
-msgstr "Berkas Sertifikat Klien:"
+#: ../cli/src/settings.c:456
+msgid "850 MHz, "
+msgstr "850 MHz, "
-#: ../gnome/applet/applet.glade.h:21
-msgid "Connection Information"
-msgstr "Informasi Koneksi"
+#: ../cli/src/settings.c:458
+msgid "WCDMA 3GPP UMTS 2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../gnome/applet/applet.glade.h:22
-msgid "Default Route:"
-msgstr "Route Default:"
+#: ../cli/src/settings.c:460
+msgid "WCDMA 3GPP UMTS 1800 MHz, "
+msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../gnome/applet/applet.glade.h:23
-msgid "Destination Address:"
-msgstr "Alamat Tujuan:"
+#: ../cli/src/settings.c:462
+msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../gnome/applet/applet.glade.h:24
-msgid "Driver:"
-msgstr "Driver:"
+#: ../cli/src/settings.c:464
+msgid "WCDMA 3GPP UMTS 800 MHz, "
+msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../gnome/applet/applet.glade.h:25
-msgid "EAP Method:"
-msgstr "Metoda EAP:"
+#: ../cli/src/settings.c:466
+msgid "WCDMA 3GPP UMTS 850 MHz, "
+msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../gnome/applet/applet.glade.h:26
-msgid "Hardware Address:"
-msgstr "Alamat Perangkat Keras:"
+#: ../cli/src/settings.c:468
+msgid "WCDMA 3GPP UMTS 900 MHz, "
+msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../gnome/applet/applet.glade.h:27
-msgid "IP Address:"
-msgstr "Alamat IP:"
+#: ../cli/src/settings.c:470
+msgid "WCDMA 3GPP UMTS 1700 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../gnome/applet/applet.glade.h:28
-msgid "Identity:"
-msgstr "Identitas:"
+#: ../cli/src/settings.c:554 ../cli/src/settings.c:721
+msgid "auto"
+msgstr "otomatis"
-#: ../gnome/applet/applet.glade.h:29
-msgid "Interface:"
-msgstr "Antarmuka:"
+#: ../cli/src/settings.c:716 ../cli/src/settings.c:719
+#: ../cli/src/settings.c:720 ../cli/src/utils.c:172
+msgid "not set"
+msgstr "tak ditata"
-#: ../gnome/applet/applet.glade.h:30
-msgid "Key Type:"
-msgstr "Tipe Kunci:"
+#: ../cli/src/utils.c:124
+#, c-format
+msgid "field '%s' has to be alone"
+msgstr "ruas '%s' mesti sendiri"
-#: ../gnome/applet/applet.glade.h:31
-msgid "Key:"
-msgstr "Kunci:"
+#: ../cli/src/utils.c:127
+#, c-format
+msgid "invalid field '%s'"
+msgstr "ruas tak valid '%s'"
-#: ../gnome/applet/applet.glade.h:32
-msgid ""
-"None\n"
-"WEP 128-bit Passphrase\n"
-"WEP 64/128-bit Hex\n"
-"WEP 64/128-bit ASCII\n"
-msgstr ""
-"Tidak ada\n"
-"Frasa-kunci WEP 128-bit\n"
-"WEP Hex 64/128-bit\n"
-"WEP ASCII 64/128-bit\n"
+#: ../cli/src/utils.c:146
+#, c-format
+msgid "Option '--terse' requires specifying '--fields'"
+msgstr "Opsi '--terse' memerlukan penyataan '--fields'"
-#: ../gnome/applet/applet.glade.h:37
-msgid ""
-"Open System\n"
-"Shared Key"
-msgstr ""
-"Sistem Terbuka\n"
-"Kunci Bersama"
+#: ../cli/src/utils.c:150
+#, c-format
+msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
+msgstr "Opsi '--terse' memerlukan nilai opsi '--fields' spesifik, bukan '%s'"
-#: ../gnome/applet/applet.glade.h:39
-msgid "Other Wireless Network..."
-msgstr "Jaringan Nirkabel Lain..."
+#: ../libnm-util/crypto.c:120
+#, c-format
+msgid "PEM key file had no end tag '%s'."
+msgstr "Berkas kunci PEM tak memiliki tag akhir '%s'."
-#: ../gnome/applet/applet.glade.h:40
-msgid "Passphrase:"
-msgstr "Frasa-kunci:"
+#: ../libnm-util/crypto.c:130
+#, c-format
+msgid "Doesn't look like a PEM private key file."
+msgstr "Tak seperti sebuah berkas kunci privat PEM."
-#: ../gnome/applet/applet.glade.h:41
-msgid "Password:"
-msgstr "Kata sandi:"
+#: ../libnm-util/crypto.c:138
+#, c-format
+msgid "Not enough memory to store PEM file data."
+msgstr "Tak cukup memori untuk menyimpan data berkas PEM."
-#: ../gnome/applet/applet.glade.h:42
-msgid "Primary DNS:"
-msgstr "DNS Utama:"
+#: ../libnm-util/crypto.c:154
+#, c-format
+msgid "Malformed PEM file: Proc-Type was not first tag."
+msgstr "Berkas PEM rusak: Proc-Type bukan tag pertama."
-#: ../gnome/applet/applet.glade.h:43
-msgid "Private Key File:"
-msgstr "Berkas Kunci Privat:"
+#: ../libnm-util/crypto.c:162
+#, c-format
+msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
+msgstr "Berkas PEM rusak: tag Proc-Type tak dikenal '%s'."
-#: ../gnome/applet/applet.glade.h:44
-msgid "Private Key Password:"
-msgstr "Kata sandi Kunci Privat:"
+#: ../libnm-util/crypto.c:172
+#, c-format
+msgid "Malformed PEM file: DEK-Info was not the second tag."
+msgstr "Berkas PEM rusak: DEK-Info bukan tag kedua."
-#: ../gnome/applet/applet.glade.h:45
-msgid "Secondary DNS:"
-msgstr "DNS Sekunder"
+#: ../libnm-util/crypto.c:183
+#, c-format
+msgid "Malformed PEM file: no IV found in DEK-Info tag."
+msgstr "Berkas PEM rusak: tak ditemukan IV di tag DEK-Info."
-#: ../gnome/applet/applet.glade.h:46
-msgid "Select the CA Certificate File"
-msgstr "Pilih Berkas Sertifikat CA"
+#: ../libnm-util/crypto.c:190
+#, c-format
+msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
+msgstr "Berkas PEM rusak: bentuk IV tak valid di tag DEK-Info."
-#: ../gnome/applet/applet.glade.h:47
-msgid "Select the Client Certificate File"
-msgstr "Pilih Berkas Sertifikat Klien"
+#: ../libnm-util/crypto.c:203
+#, c-format
+msgid "Malformed PEM file: unknown private key cipher '%s'."
+msgstr "Berkas PEM rusak: cipher kunci privat '%s' tak dikenal."
-#: ../gnome/applet/applet.glade.h:48
-msgid "Select the Private Key File"
-msgstr "Pilih Berkas Kunci Privat"
+#: ../libnm-util/crypto.c:222
+#, c-format
+msgid "Could not decode private key."
+msgstr "Tak bisa mengawa kode (decode) kunci privat."
-#: ../gnome/applet/applet.glade.h:49
-msgid "Show key"
-msgstr "Tampilkan Kunci"
+#: ../libnm-util/crypto.c:267
+#, c-format
+msgid "PEM certificate '%s' had no end tag '%s'."
+msgstr "Sertifikat PEM '%s' tak memiliki tag akhir '%s'."
-#: ../gnome/applet/applet.glade.h:50
-msgid "Show passphrase"
-msgstr "Tampilkan frasa-kunci"
+#: ../libnm-util/crypto.c:277
+#, c-format
+msgid "Failed to decode certificate."
+msgstr "Gagal mengawa kode (decode) sertifikat."
-#: ../gnome/applet/applet.glade.h:51
-msgid "Show password"
-msgstr "Tampilkan kata sandi"
+#: ../libnm-util/crypto.c:286
+#, c-format
+msgid "Not enough memory to store certificate data."
+msgstr "Tak cukup memori untuk menyimpan data sertifikat."
-#: ../gnome/applet/applet.glade.h:52
-msgid "Show passwords"
-msgstr "Tampilkan kata sandi"
+#: ../libnm-util/crypto.c:294
+#, c-format
+msgid "Not enough memory to store file data."
+msgstr "Tak cukup memori untuk menyimpan data berkas."
-#: ../gnome/applet/applet.glade.h:53
-msgid "Speed:"
-msgstr "Kecepatan:"
+#: ../libnm-util/crypto.c:324
+#, c-format
+msgid "IV must be an even number of bytes in length."
+msgstr "Panjang IV dalam byte mesti merupakan bilangan genap."
-#: ../gnome/applet/applet.glade.h:54
-msgid "Subnet Mask:"
-msgstr "Mask Subnet:"
+#: ../libnm-util/crypto.c:333
+#, c-format
+msgid "Not enough memory to store the IV."
+msgstr "Tak cukup memori untuk menyimpan IV."
-#: ../gnome/applet/applet.glade.h:55
-msgid "Type:"
-msgstr "Tipe:"
+#: ../libnm-util/crypto.c:344
+#, c-format
+msgid "IV contains non-hexadecimal digits."
+msgstr "IV memuat digit bukan heksadesimal."
-#: ../gnome/applet/applet.glade.h:56
-msgid "User Name:"
-msgstr "Nama Pemakai:"
+#: ../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
+#, c-format
+msgid "Private key cipher '%s' was unknown."
+msgstr "Cipher kunci privat '%s' tak dikenal."
-#: ../gnome/applet/applet.glade.h:57
-msgid "Wireless Network Key Required"
-msgstr "Kunci Jaringan Nirkabel Dibutuhkan"
+#: ../libnm-util/crypto.c:391
+#, c-format
+msgid "Not enough memory to decrypt private key."
+msgstr "Tak cukup memori untuk mengawa sandi (decrypt) kunci privat."
-#: ../gnome/applet/applet.glade.h:58
-msgid "Wireless _adapter:"
-msgstr "Adaptor Nirkabel:"
+#: ../libnm-util/crypto.c:511
+#, c-format
+msgid "Unable to determine private key type."
+msgstr "Tak bisa menentukan jenis kunci privat."
-#: ../gnome/applet/applet.glade.h:59
-msgid "_Always Trust this Wireless Network"
-msgstr "Selalu Percayai Jaringan Nirkabel ini"
+#: ../libnm-util/crypto.c:530
+#, c-format
+msgid "Not enough memory to store decrypted private key."
+msgstr ""
+"Tak cukup memori untuk menyimpan kunci privat terawa sandi (decrypted)."
-#: ../gnome/applet/applet.glade.h:60
-msgid "_Don't remind me again"
-msgstr "Jangan mengingatkan saya lagi"
+#: ../libnm-util/crypto_gnutls.c:49
+msgid "Failed to initialize the crypto engine."
+msgstr "Gagal menginisialisasi mesin kripto."
-#: ../gnome/applet/applet.glade.h:61
-msgid "_Login to Network"
-msgstr "_Login ke Jaringan"
+#: ../libnm-util/crypto_gnutls.c:93
+#, c-format
+msgid "Failed to initialize the MD5 engine: %s / %s."
+msgstr "Gagal menginisialisasi mesin MD5: %s / %s."
-#: ../gnome/applet/applet.glade.h:62
-msgid "_Network Name:"
-msgstr "_Nama Jarigan:"
+#: ../libnm-util/crypto_gnutls.c:156
+#, c-format
+msgid "Invalid IV length (must be at least %zd)."
+msgstr "Panjang IV tak valid (mesti paling tidak %zd)."
-#: ../gnome/applet/applet.glade.h:63
-msgid "_Wireless Security:"
-msgstr "Keamanan Nirkabel:"
+#: ../libnm-util/crypto_gnutls.c:165 ../libnm-util/crypto_nss.c:188
+#, c-format
+msgid "Not enough memory for decrypted key buffer."
+msgstr "Tak cukup memori untuk penyangga kunci terawa sandi (decrypted)."
-#: ../gnome/vpn-properties/nm-vpn-properties.c:383
-msgid "Cannot add VPN connection"
-msgstr "Tidak dapat menambah koneksi VPN"
+#: ../libnm-util/crypto_gnutls.c:173
+#, c-format
+msgid "Failed to initialize the decryption cipher context: %s / %s."
+msgstr ""
+"Gagal menginisialisasi konteks cipher pengawasandian (decryption): %s / %s."
-#: ../gnome/vpn-properties/nm-vpn-properties.c:385
-msgid ""
-"No suitable VPN software was found on your system. Contact your system "
-"administrator."
+#: ../libnm-util/crypto_gnutls.c:182
+#, c-format
+msgid "Failed to set symmetric key for decryption: %s / %s."
msgstr ""
-"Tidak ada perangkat lunak VPN yang sesuai yang dapat ditemukan di sistem "
-"anda. Hubungi administrator sistem anda."
+"Gagal menata kunci simetrik untuk pengawasandian (decryption): %s / %s."
-#: ../gnome/vpn-properties/nm-vpn-properties.c:437
-msgid "Cannot import VPN connection"
-msgstr "Tidak dapat meng-impor koneksi VPN"
+#: ../libnm-util/crypto_gnutls.c:191
+#, c-format
+msgid "Failed to set IV for decryption: %s / %s."
+msgstr "Gagal menata IV untuk pengawasandian (decryption): %s / %s."
-#: ../gnome/vpn-properties/nm-vpn-properties.c:439
+#: ../libnm-util/crypto_gnutls.c:200
#, c-format
-msgid ""
-"Cannot find suitable software for VPN connection type '%s' to import the "
-"file '%s'. Contact your system administrator."
+msgid "Failed to decrypt the private key: %s / %s."
+msgstr "Gagal mengawa sandi (decrypt) kunci privat: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:210 ../libnm-util/crypto_nss.c:267
+#, c-format
+msgid "Failed to decrypt the private key: unexpected padding length."
msgstr ""
-"Tidak dapat menemukan perangkat lunak untuk koneksi VPN tipe '%s' untuk meng-"
-"impor berkas '%s'. Hubungi administrator sistem anda."
+"Gagal mengawa sandi (decrypt) kunci privat: panjang padding tak diharapkan."
-#: ../gnome/vpn-properties/nm-vpn-properties.c:579
+#: ../libnm-util/crypto_gnutls.c:221 ../libnm-util/crypto_nss.c:278
#, c-format
-msgid "Error retrieving VPN connection '%s'"
-msgstr "Kesalahan dalam mengambil koneksi VPN '%s'"
+msgid "Failed to decrypt the private key."
+msgstr "Gagal mengawa sandi (decrypt) kunci privat."
-#: ../gnome/vpn-properties/nm-vpn-properties.c:582
+#: ../libnm-util/crypto_gnutls.c:286 ../libnm-util/crypto_nss.c:356
#, c-format
-msgid ""
-"Could not find the UI files for VPN connection type '%s'. Contact your "
-"system administrator."
-msgstr ""
-"Tidak dapat menemukan berkas UI untuk koneksi VPN tipe '%s'. Hubungi "
-"administrator sistem anda."
+msgid "Could not allocate memory for encrypting."
+msgstr "Tak bisa mengalokasikan memori untuk menyandi."
-#: ../gnome/vpn-properties/nm-vpn-properties.c:739
+#: ../libnm-util/crypto_gnutls.c:294
#, c-format
-msgid "Delete VPN connection \"%s\"?"
-msgstr "Hapus koneksi VPN \"%s\"?"
+msgid "Failed to initialize the encryption cipher context: %s / %s."
+msgstr "Gagal menginisialisasi konteks cipher penyandian: %s / %s."
-#: ../gnome/vpn-properties/nm-vpn-properties.c:742
+#: ../libnm-util/crypto_gnutls.c:303
#, c-format
-msgid ""
-"All information about the VPN connection \"%s\" will be lost and you may "
-"need your system administrator to provide information to create a new "
-"connection."
+msgid "Failed to set symmetric key for encryption: %s / %s."
+msgstr "Gagal menata kunci simetrik untuk penyandian: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:313
+#, c-format
+msgid "Failed to set IV for encryption: %s / %s."
+msgstr "Gagal menata IV untuk penyandian: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:322
+#, c-format
+msgid "Failed to encrypt the data: %s / %s."
+msgstr "Gagal menyandi data: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:362
+#, c-format
+msgid "Error initializing certificate data: %s"
+msgstr "Gagal menginisialisasi data sertifikat: %s"
+
+#: ../libnm-util/crypto_gnutls.c:384
+#, c-format
+msgid "Couldn't decode certificate: %s"
+msgstr "Tak bisa mengawa kode (decode) sertifikat: %s"
+
+#: ../libnm-util/crypto_gnutls.c:408
+#, c-format
+msgid "Couldn't initialize PKCS#12 decoder: %s"
+msgstr "Tak bisa menginisialisasi pengawa kode (decoder) PKCS#12: %s"
+
+#: ../libnm-util/crypto_gnutls.c:421
+#, c-format
+msgid "Couldn't decode PKCS#12 file: %s"
+msgstr "Tak bisa mengawa kode (decode) berkas PKCS#12: %s"
+
+#: ../libnm-util/crypto_gnutls.c:433
+#, c-format
+msgid "Couldn't verify PKCS#12 file: %s"
+msgstr "Tak bisa memeriksa berkas PKCS#12: %s"
+
+#: ../libnm-util/crypto_nss.c:56
+#, c-format
+msgid "Failed to initialize the crypto engine: %d."
+msgstr "Gagal menginisialisasi mesin kripto: %d"
+
+#: ../libnm-util/crypto_nss.c:111
+#, c-format
+msgid "Failed to initialize the MD5 context: %d."
+msgstr "Gagal menginisialisasi konteks MD5: %d."
+
+#: ../libnm-util/crypto_nss.c:179
+#, c-format
+msgid "Invalid IV length (must be at least %d)."
+msgstr "Panjang IV tak valid (mesti paling tidak %d)."
+
+#: ../libnm-util/crypto_nss.c:196
+#, c-format
+msgid "Failed to initialize the decryption cipher slot."
+msgstr "Gagal menginisialisasi slot cipher pengawasandian (decryption)."
+
+#: ../libnm-util/crypto_nss.c:206
+#, c-format
+msgid "Failed to set symmetric key for decryption."
+msgstr "Gagal menata kunci simetrik untuk pengawasandian (decryption)."
+
+#: ../libnm-util/crypto_nss.c:216
+#, c-format
+msgid "Failed to set IV for decryption."
+msgstr "Gagal menata IV untuk pengawasandian (decryption)."
+
+#: ../libnm-util/crypto_nss.c:224
+#, c-format
+msgid "Failed to initialize the decryption context."
+msgstr "Gagal menginisialisasi konteks pengawasandian (decryption)."
+
+#: ../libnm-util/crypto_nss.c:237
+#, c-format
+msgid "Failed to decrypt the private key: %d."
+msgstr "Gagal mengawa sandi (decrypt) kunci privat: %d"
+
+#: ../libnm-util/crypto_nss.c:245
+#, c-format
+msgid "Failed to decrypt the private key: decrypted data too large."
msgstr ""
-"Semua informasi tentang koneksi VPN \"%s\" akan hilang dan anda mungkin "
-"memerlukan administrator sistem anda untuk mendapatkan informasi untuk "
-"membuat koneksi baru."
+"Gagal mengawa sandi (decrypt) kunci privat: data terawa sandi terlalu besar."
+
+#: ../libnm-util/crypto_nss.c:256
+#, c-format
+msgid "Failed to finalize decryption of the private key: %d."
+msgstr "Gagal memfinalisasi pengawasandian (decryption) kunci privat: %d."
+
+#: ../libnm-util/crypto_nss.c:364
+#, c-format
+msgid "Failed to initialize the encryption cipher slot."
+msgstr "Gagal menginisialisasi slot cipher penyandian."
+
+#: ../libnm-util/crypto_nss.c:372
+#, c-format
+msgid "Failed to set symmetric key for encryption."
+msgstr "Gagal menata kunci simetrik untuk penyandian."
+
+#: ../libnm-util/crypto_nss.c:380
+#, c-format
+msgid "Failed to set IV for encryption."
+msgstr "Gagal menata IV untuk penyandian."
+
+#: ../libnm-util/crypto_nss.c:388
+#, c-format
+msgid "Failed to initialize the encryption context."
+msgstr "Gagal menginisialisasi konteks penyandian."
+
+#: ../libnm-util/crypto_nss.c:396
+#, c-format
+msgid "Failed to encrypt: %d."
+msgstr "Gagal mengawasandi: %d."
+
+#: ../libnm-util/crypto_nss.c:404
+#, c-format
+msgid "Unexpected amount of data after encrypting."
+msgstr "Banyaknya data tak terduga setelah penyandian."
+
+#: ../libnm-util/crypto_nss.c:447
+#, c-format
+msgid "Couldn't decode certificate: %d"
+msgstr "Tak bisa mengawa kode (decode) sertifikat: %d"
+
+#: ../libnm-util/crypto_nss.c:482
+#, c-format
+msgid "Couldn't convert password to UCS2: %d"
+msgstr "Tak bisa mengubah kata sandi ke UCS2: %d"
+
+#: ../libnm-util/crypto_nss.c:510
+#, c-format
+msgid "Couldn't initialize PKCS#12 decoder: %d"
+msgstr "Tak bisa menginisialisasi pengawa kode (decoder) PKCS#12: %d"
+
+#: ../libnm-util/crypto_nss.c:519
+#, c-format
+msgid "Couldn't decode PKCS#12 file: %d"
+msgstr "Tak bisa mengawa kode (decode) berkas PKCS#12: %d"
+
+#: ../libnm-util/crypto_nss.c:528
+#, c-format
+msgid "Couldn't verify PKCS#12 file: %d"
+msgstr "Tak bisa memeriksa berkas PKCS#12: %d"
+
+#: ../libnm-util/crypto_nss.c:557
+msgid "Could not generate random data."
+msgstr "Tak bisa menjangkitkan data acak."
+
+#: ../libnm-util/nm-utils.c:1975
+#, c-format
+msgid "Not enough memory to make encryption key."
+msgstr "Tak cukup memori untuk membuat kunci penyandian."
+
+#: ../libnm-util/nm-utils.c:2085
+msgid "Could not allocate memory for PEM file creation."
+msgstr "Tak bisa mengalokasikan memori bagi pembuatan berkas PEM."
-#: ../gnome/vpn-properties/nm-vpn-properties.c:959
-msgid "Unable to load"
-msgstr "Tidak dapat memuat"
+#: ../libnm-util/nm-utils.c:2097
+#, c-format
+msgid "Could not allocate memory for writing IV to PEM file."
+msgstr "Tak bisa mengalokasikan memori untuk menulis IV ke berkas PEM."
-#: ../gnome/vpn-properties/nm-vpn-properties.c:961
-msgid "Cannot find some needed resources (the glade file)!"
+#: ../libnm-util/nm-utils.c:2109
+#, c-format
+msgid "Could not allocate memory for writing encrypted key to PEM file."
msgstr ""
-"Tidak dapat menemukan beberapa sumberdaya yang diperlukan (berkas glade)!"
+"Tak bisa mengalokasikan memori untuk menulis kunci tersandi ke berkas PEM."
-#: ../gnome/vpn-properties/nm-vpn-properties.c:1071
-msgid "Edit VPN Connection"
-msgstr "Sunting Koneksi VPN"
+#: ../libnm-util/nm-utils.c:2128
+#, c-format
+msgid "Could not allocate memory for PEM file data."
+msgstr "Tak bisa mengalokasikan memori bagi data berkas PEM."
-#: ../gnome/vpn-properties/nm-vpn-properties.glade.h:1
-msgid "Add a new VPN connection"
-msgstr "Tambah koneksi VPN baru"
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
+msgid "Connection sharing via a protected WiFi network"
+msgstr "Berbagi koneksi melalui jaringan WiFi terlindung."
-#: ../gnome/vpn-properties/nm-vpn-properties.glade.h:2
-msgid "Choose which type of VPN connection you wish to create."
-msgstr "Pilih tipe koneksi VPN yang ingin anda buat"
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
+msgid "Connection sharing via an open WiFi network"
+msgstr "Berbagi koneksi melalui jaringan WiFi terbuka"
-#: ../gnome/vpn-properties/nm-vpn-properties.glade.h:3
-msgid "Connect to:"
-msgstr "Menyambung ke:"
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
+msgid "Modify persistent system hostname"
+msgstr "Ubah nama host sistem yang persisten"
-#: ../gnome/vpn-properties/nm-vpn-properties.glade.h:4
-msgid "Create VPN Connection"
-msgstr "Buat Koneksi VPN"
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
+msgid "Modify system connections"
+msgstr "Ubah koneksi sistem"
-#: ../gnome/vpn-properties/nm-vpn-properties.glade.h:5
-msgid "Create VPN Connection - 1 of 2"
-msgstr "Buat Koneksi VPN - 1 dari 2"
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
+msgid "System policy prevents modification of system settings"
+msgstr "Kebijakan sistem mencegah pengubahan tatanan sistem"
-#: ../gnome/vpn-properties/nm-vpn-properties.glade.h:6
-msgid "Create VPN Connection - 2 of 2"
-msgstr "Buat Koneksi VPN - 2 dari 2"
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
+msgid "System policy prevents modification of the persistent system hostname"
+msgstr "Kebijakan sistem mencegah pengubahan nama host yang persisten"
-#: ../gnome/vpn-properties/nm-vpn-properties.glade.h:7
-msgid "Delete the selected VPN connection"
-msgstr "Hapus koneksi VPN yang dipilih"
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
+msgid "System policy prevents sharing connections via a protected WiFi network"
+msgstr ""
+"Kebijakan sistem mencegah berbagi sambungan melalui jaringan WiFi terlindung"
-#: ../gnome/vpn-properties/nm-vpn-properties.glade.h:8
-msgid "E_xport"
-msgstr "Ekspor"
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
+msgid "System policy prevents sharing connections via an open WiFi network"
+msgstr ""
+"Kebijakan sistem mencegah berbagi sambungan melalui jaringan WiFi terbuka"
-#: ../gnome/vpn-properties/nm-vpn-properties.glade.h:9
-msgid "Edit the selected VPN connection"
-msgstr "Sunting koneksi VPN yang dipilih"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
+msgid "Allow control of network connections"
+msgstr "Ijinkan pengendalian sambungan jaringan"
-#: ../gnome/vpn-properties/nm-vpn-properties.glade.h:10
-msgid "Export the VPN settings to a file"
-msgstr "Ekspor pengaturan VPN ke sebuah berkas"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
+msgid "Allow use of user-specific connections"
+msgstr "Ijinkan penggunaan sambungan spesifik-pengguna"
-#: ../gnome/vpn-properties/nm-vpn-properties.glade.h:11
-msgid "Export the selected VPN connection to a file"
-msgstr "Ekspor koneksi VPN yang dipilih ke sebuah berkas"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
+msgid "Enable or disable WiFi devices"
+msgstr "Aktifkan atau matikan perangkat WiFi"
-#: ../gnome/vpn-properties/nm-vpn-properties.glade.h:12
-msgid "Finish Creating VPN Connection"
-msgstr "Mengakhiri Pembuatan Koneksi VPN"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
+msgid "Enable or disable mobile broadband devices"
+msgstr "Aktifkan atau matikan perangkat broadband bergerak"
-#: ../gnome/vpn-properties/nm-vpn-properties.glade.h:13
-msgid "Manage Virtual Private Network Connections"
-msgstr "Kelola Koneksi Virtual Private Network"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+msgid "Enable or disable system networking"
+msgstr "Aktifkan atau matikan jejaring sistem"
-#: ../gnome/vpn-properties/nm-vpn-properties.glade.h:14
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
msgid ""
-"This assistant will guide you through the creation of a connection to a "
-"Virtual Private Network (VPN).\n"
-"\n"
-"It will require some information, such as IP addresses and secrets. Please "
-"see your system administrator to obtain this information."
+"Put NetworkManager to sleep or wake it up (should only be used by system "
+"power management)"
msgstr ""
-"Pemandu ini akan membantu anda dalam pembuatan koneksi ke sebuah Virtual "
-"Private Network (VPN).\n"
-"Dia akan memerlukan beberapa informasi, seperti misalnya alamat IP dan "
-"rahasia-rahasia. Silahkan menemui administrator sistem untuk memperoleh "
-"informasi ini."
+"Tidurkan NetworkManager atau bangunkan (mestinya hanya dipakai oleh "
+"manajemen daya sistem)"
-#: ../gnome/vpn-properties/nm-vpn-properties.glade.h:17
-msgid "VPN Connections"
-msgstr "Koneksi VPN"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
+msgid "System policy prevents control of network connections"
+msgstr "Kebijakan sistem mencegah pengendalian sambungan jaringan"
-#: ../src/nm-ap-security-wep.c:52
-msgid "40-bit WEP"
-msgstr "WEP 40-bit"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
+msgid "System policy prevents enabling or disabling WiFi devices"
+msgstr "Kebijakan sistem mencegah mengaktifkan atau mematikan perangkat WiFi"
-#: ../src/nm-ap-security-wep.c:54
-msgid "104-bit WEP"
-msgstr "WEP 104-bit"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
+msgid "System policy prevents enabling or disabling mobile broadband devices"
+msgstr ""
+"Kebijakan sistem mencegah mengaktifkan atau mematikan perangkat broadband "
+"bergerak"
-#: ../src/nm-ap-security-wpa-psk.c:50
-msgid "WPA TKIP"
-msgstr "WPA TKIP"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
+msgid "System policy prevents enabling or disabling system networking"
+msgstr "Kebijakan sistem mencegah mengaktifkan atau mematikan jejaring sistem"
-#: ../src/nm-ap-security-wpa-psk.c:52
-msgid "WPA CCMP"
-msgstr "WPA CCMP"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
+msgid "System policy prevents putting NetworkManager to sleep or waking it up"
+msgstr ""
+"Kebijakan sistem mencegah menidurkan NetworkManager atau membangunkannya"
-#: ../src/nm-ap-security-wpa-psk.c:54
-msgid "WPA Automatic"
-msgstr "WPA Otomatis"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
+msgid "System policy prevents use of user-specific connections"
+msgstr "Kebijakan sistem mencegah penggunaan sambungan spesifik-pengguna"
-#: ../src/nm-ap-security-wpa-psk.c:59
-msgid "WPA2 TKIP"
-msgstr "WPA2 TKIP"
+#: ../src/nm-netlink-monitor.c:100 ../src/nm-netlink-monitor.c:231
+#: ../src/nm-netlink-monitor.c:653
+#, c-format
+msgid "error processing netlink message: %s"
+msgstr "galat memroses pesan netlink: %s"
-#: ../src/nm-ap-security-wpa-psk.c:61
-msgid "WPA2 CCMP"
-msgstr "WPA2 CCMP"
+#: ../src/nm-netlink-monitor.c:214
+msgid "error occurred while waiting for data on socket"
+msgstr "galat terjadi ketika menunggu data pada soket"
-#: ../src/nm-ap-security-wpa-psk.c:63
-msgid "WPA2 Automatic"
-msgstr "WPA2 Otomatis"
+#: ../src/nm-netlink-monitor.c:254
+#, c-format
+msgid "unable to connect to netlink for monitoring link status: %s"
+msgstr "tak bisa menyambung ke netlink untuk pemantauan status sambungan: %s"
-#: ../src/nm-ap-security.c:321
-msgid "none"
-msgstr "tidak ada"
+#: ../src/nm-netlink-monitor.c:265
+#, c-format
+msgid "unable to enable netlink handle credential passing: %s"
+msgstr "tak bisa mengaktifkan penyampaian kredensial handle netlink: %s"
-#: ../src/nm-netlink-monitor.c:163
+#: ../src/nm-netlink-monitor.c:291 ../src/nm-netlink-monitor.c:353
#, c-format
-msgid ""
-"unable to create netlink socket for monitoring wired ethernet devices - %s"
+msgid "unable to allocate netlink handle for monitoring link status: %s"
msgstr ""
-"tidak dapat membuat soket netlink untuk mengamati perangkat ethernet - %s"
+"tak bisa mengalokasikan handle netlink untuk pemantauan status sambungan: %s"
-#: ../src/nm-netlink-monitor.c:181
+#: ../src/nm-netlink-monitor.c:376
#, c-format
-msgid ""
-"unable to bind to netlink socket for monitoring wired ethernet devices - %s"
+msgid "unable to allocate netlink link cache for monitoring link status: %s"
msgstr ""
-"tidak dapat mem-bind ke soket netlink untuk mengamati perangkat ethernet - %s"
+"tak bisa mengalokasikan singgahan sambungan netlink untuk pemantauan status "
+"sambungan: %s"
-#: ../src/nm-netlink-monitor.c:414
-msgid "operation took too long"
-msgstr "operasi memakan waktu terlalu lama"
+#: ../src/nm-netlink-monitor.c:502
+#, c-format
+msgid "unable to join netlink group: %s"
+msgstr "tak bisa bergabung dengan grup netlink: %s"
-#: ../src/nm-netlink-monitor.c:511
-msgid "received data from wrong type of sender"
-msgstr "menerima data dari pengirim bertipe salah"
+#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642
+#, c-format
+msgid "error updating link cache: %s"
+msgstr "galat memperbarui singgahan sambungan: %s"
-#: ../src/nm-netlink-monitor.c:524
-msgid "received data from unexpected sender"
-msgstr "menerima data dari pengirim yang tak diharapkan"
+#: ../src/main.c:502
+#, c-format
+msgid "Invalid option. Please use --help to see a list of valid options.\n"
+msgstr ""
+"Opsi tak valid. Silakan pakai --help untuk melihat daftar opsi yang valid.\n"
-#: ../src/nm-netlink-monitor.c:655
-msgid "too much data was sent over socket and some of it was lost"
+#: ../src/main.c:573
+#, c-format
+msgid "%s. Please use --help to see a list of valid options.\n"
+msgstr "%s. Silakan pakai --help untuk melihat daftar opsi yang valid.\n"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:324
+msgid "# Created by NetworkManager\n"
+msgstr "# Dibuat oleh NetworkManager\n"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:340
+#, c-format
+msgid ""
+"# Merged from %s\n"
+"\n"
msgstr ""
-"terlalu banyak data yang telah dikirim lewat soket dan sebagian diantaranya "
-"hilang"
+"# Digabung dari %s\n"
+"\n"
-#: ../src/nm-netlink-monitor.c:744
-msgid "error occurred while waiting for data on socket"
-msgstr "kesalahan terjadi ketika menunggu data pada soket"
+#: ../src/dhcp-manager/nm-dhcp-manager.c:284
+msgid "no usable DHCP client could be found."
+msgstr "tak menemukan klien DHCP yang dapat dipakai."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+msgid "'dhclient' could be found."
+msgstr "'dhclient' dapat ditemukan."
-#: ../gnome/applet/applet-dbus-devices.c:898
+#: ../src/dhcp-manager/nm-dhcp-manager.c:303
+msgid "'dhcpcd' could be found."
+msgstr "'dhcpd' dapat ditemukan."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:311
+#, c-format
+msgid "unsupported DHCP client '%s'"
+msgstr "Klien DHCP '%s' yang tak didukung"
+
+#: ../src/logging/nm-logging.c:146
#, c-format
-msgid "You are now connected to the Ad-Hoc wireless network '%s'."
-msgstr "Anda sekarang terhubung ke jaringan nirkabel Ad-Hoc `%s'."
+msgid "Unknown log level '%s'"
+msgstr "Aras log tak dikenal '%s'"
-#: ../gnome/applet/applet-dbus-devices.c:903
+#: ../src/logging/nm-logging.c:171
#, c-format
-msgid "You are now connected to the wireless network '%s'."
-msgstr "Anda sekarang terhubung ke jaringan nirkabel '%s'."
+msgid "Unknown log domain '%s'"
+msgstr "Ranah log tak dikenal '%s'"
-#: ../gnome/applet/applet-dbus-devices.c:910
-msgid "You are now connected to the wired network."
-msgstr "Anda sekarang tersambung ke jaringan berkabel."
+#: ../src/dns-manager/nm-dns-manager.c:384
+msgid "NOTE: the libc resolver may not support more than 3 nameservers."
+msgstr "CATATAN: resolver libc mungkin tak mendukung lebih dari 3 nameserver."
-#: ../gnome/applet/applet-dbus-devices.c:916
-msgid "Connection Established"
-msgstr "Sambungan Terjalin"
+#: ../src/dns-manager/nm-dns-manager.c:386
+msgid "The nameservers listed below may not be recognized."
+msgstr "Nameserver yang terdaftar di bawah mungkin tak dikenali."
-#: ../gnome/applet/applet-dbus-devices.c:959
-msgid "Disconnected"
-msgstr "Terputus"
+#: ../src/system-settings/nm-default-wired-connection.c:157
+#, c-format
+msgid "Auto %s"
+msgstr "Otomatis %s"
-#: ../gnome/applet/applet-dbus-devices.c:960
-msgid "The network connection has been disconnected."
-msgstr "Koneksi jaringan telah diputus."
+#: ../system-settings/plugins/ifcfg-rh/reader.c:3412
+msgid "System"
+msgstr "Sistem"
diff --git a/po/it.po b/po/it.po
index 5c61af0ac5..dd24604d56 100644
--- a/po/it.po
+++ b/po/it.po
@@ -1602,11 +1602,11 @@ msgstr "Livello log '%s' sconosciuto"
msgid "Unknown log domain '%s'"
msgstr "Dominio log '%s' sconosciuto"
-#: ../src/named-manager/nm-named-manager.c:343
+#: ../src/dns-manager/nm-dns-manager.c:343
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr "NOTA: il risolutore libc non supporta più di 3 server di nomi."
-#: ../src/named-manager/nm-named-manager.c:345
+#: ../src/dns-manager/nm-dns-manager.c:345
msgid "The nameservers listed below may not be recognized."
msgstr "I server di nomi elencati sotto non possono essere riconosciuti."
diff --git a/po/ja.po b/po/ja.po
index 7dc8ba50fc..4b49f0089c 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -8,9 +8,9 @@
msgid ""
msgstr ""
"Project-Id-Version: ja\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=NetworkManager&component=general\n"
-"POT-Creation-Date: 2010-04-30 03:24+0000\n"
-"PO-Revision-Date: 2010-05-07 18:50+0900\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-05-06 14:31+0530\n"
+"PO-Revision-Date: 2010-05-07 16:04+0900\n"
"Last-Translator: Kiyoto Hashida <khashida@redhat.com>\n"
"Language-Team: Japanese <jp@li.org>\n"
"MIME-Version: 1.0\n"
@@ -19,10 +19,78 @@ msgstr ""
"Plural-Forms: Plural-Forms: nplurals=1; plural=0;\n\n"
"\n"
"\n"
-"\n"
"X-Generator: KBabel 1.11.4\n"
-#: ../cli/src/connections.c:86
+#: ../cli/src/connections.c:59 ../cli/src/connections.c:74
+#: ../cli/src/devices.c:85 ../cli/src/devices.c:98 ../cli/src/devices.c:108
+#: ../cli/src/devices.c:118 ../cli/src/devices.c:131 ../cli/src/devices.c:142
+#: ../cli/src/devices.c:152
+msgid "NAME"
+msgstr "åå‰"
+
+#. 0
+#: ../cli/src/connections.c:60 ../cli/src/connections.c:75
+msgid "UUID"
+msgstr "UUID"
+
+#. 1
+#: ../cli/src/connections.c:61
+msgid "DEVICES"
+msgstr "デãƒã‚¤ã‚¹"
+
+#. 2
+#: ../cli/src/connections.c:62 ../cli/src/connections.c:77
+msgid "SCOPE"
+msgstr "範囲"
+
+#. 3
+#: ../cli/src/connections.c:63
+msgid "DEFAULT"
+msgstr "デフォルト"
+
+#. 4
+#: ../cli/src/connections.c:64
+msgid "DBUS-SERVICE"
+msgstr "DBUS-サービス"
+
+#. 5
+#: ../cli/src/connections.c:65
+msgid "SPEC-OBJECT"
+msgstr "スペックオブジェクト"
+
+#. 6
+#: ../cli/src/connections.c:66
+msgid "VPN"
+msgstr "VPN"
+
+#. 1
+#. 0
+#. 1
+#: ../cli/src/connections.c:76 ../cli/src/devices.c:61 ../cli/src/devices.c:87
+msgid "TYPE"
+msgstr "タイプ"
+
+#. 3
+#: ../cli/src/connections.c:78
+msgid "TIMESTAMP"
+msgstr "タイムスタンプ"
+
+#. 4
+#: ../cli/src/connections.c:79
+msgid "TIMESTAMP-REAL"
+msgstr "タイムスタンプ-リアル"
+
+#. 5
+#: ../cli/src/connections.c:80
+msgid "AUTOCONNECT"
+msgstr "自動接続"
+
+#. 6
+#: ../cli/src/connections.c:81
+msgid "READONLY"
+msgstr "読ã¿è¾¼ã¿å°‚用"
+
+#: ../cli/src/connections.c:157
#, c-format
msgid ""
"Usage: nmcli con { COMMAND | help }\n"
@@ -43,310 +111,514 @@ msgstr ""
"<timeout>]\n"
" down id <id> | uuid <id>\n"
-#: ../cli/src/connections.c:158
-msgid "Connections"
-msgstr "接続"
+#: ../cli/src/connections.c:197 ../cli/src/connections.c:536
+#, c-format
+msgid "Error: 'con list': %s"
+msgstr "エラー:'con list': %s"
-#: ../cli/src/connections.c:158 ../cli/src/connections.c:160
-#: ../cli/src/connections.c:196 ../cli/src/connections.c:198
-#: ../cli/src/connections.c:205 ../cli/src/connections.c:207
-#: ../cli/src/devices.c:298 ../cli/src/devices.c:458 ../cli/src/devices.c:460
-msgid "Type"
-msgstr "タイプ"
+#: ../cli/src/connections.c:199 ../cli/src/connections.c:538
+#, c-format
+msgid "Error: 'con list': %s; allowed fields: %s"
+msgstr "エラー:'con list': %s ; 許å¯ã•ã‚Œã‚‹ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
-#: ../cli/src/connections.c:158 ../cli/src/connections.c:160
-#: ../cli/src/connections.c:196 ../cli/src/connections.c:198
-#: ../cli/src/connections.c:205 ../cli/src/connections.c:207
-#: ../cli/src/connections.c:297 ../cli/src/connections.c:299
-msgid "UUID"
-msgstr "UUID"
+#: ../cli/src/connections.c:207
+msgid "Connection details"
+msgstr "接続ã®è©³ç´°"
-#: ../cli/src/connections.c:158 ../cli/src/connections.c:160
-#: ../cli/src/connections.c:196 ../cli/src/connections.c:198
-#: ../cli/src/connections.c:205 ../cli/src/connections.c:207
-#: ../cli/src/connections.c:297 ../cli/src/connections.c:299
-msgid "Name"
-msgstr "åå‰"
+#: ../cli/src/connections.c:381 ../cli/src/connections.c:601
+msgid "system"
+msgstr "システム"
-#: ../cli/src/connections.c:163
-#, c-format
-msgid "System connections:\n"
-msgstr "システム接続:\n"
+#: ../cli/src/connections.c:381 ../cli/src/connections.c:601
+msgid "user"
+msgstr "ユーザー"
+
+#: ../cli/src/connections.c:383
+msgid "never"
+msgstr "ã—ãªã„"
+
+#. "CAPABILITIES"
+#. Print header
+#. "WIFI-PROPERTIES"
+#: ../cli/src/connections.c:384 ../cli/src/connections.c:385
+#: ../cli/src/connections.c:602 ../cli/src/connections.c:605
+#: ../cli/src/devices.c:388 ../cli/src/devices.c:513 ../cli/src/devices.c:539
+#: ../cli/src/devices.c:540 ../cli/src/devices.c:541 ../cli/src/devices.c:542
+#: ../cli/src/devices.c:543 ../cli/src/settings.c:504
+#: ../cli/src/settings.c:544 ../cli/src/settings.c:643
+#: ../cli/src/settings.c:912 ../cli/src/settings.c:913
+#: ../cli/src/settings.c:915 ../cli/src/settings.c:917
+#: ../cli/src/settings.c:1042 ../cli/src/settings.c:1043
+#: ../cli/src/settings.c:1044 ../cli/src/settings.c:1123
+#: ../cli/src/settings.c:1124 ../cli/src/settings.c:1125
+#: ../cli/src/settings.c:1126 ../cli/src/settings.c:1127
+#: ../cli/src/settings.c:1128 ../cli/src/settings.c:1129
+#: ../cli/src/settings.c:1130 ../cli/src/settings.c:1131
+#: ../cli/src/settings.c:1132 ../cli/src/settings.c:1133
+#: ../cli/src/settings.c:1134 ../cli/src/settings.c:1135
+#: ../cli/src/settings.c:1210
+msgid "yes"
+msgstr "ã¯ã„"
-#: ../cli/src/connections.c:167
-#, c-format
-msgid "User connections:\n"
-msgstr "ユーザー接続:\n"
+#: ../cli/src/connections.c:384 ../cli/src/connections.c:385
+#: ../cli/src/connections.c:602 ../cli/src/connections.c:605
+#: ../cli/src/devices.c:388 ../cli/src/devices.c:513 ../cli/src/devices.c:539
+#: ../cli/src/devices.c:540 ../cli/src/devices.c:541 ../cli/src/devices.c:542
+#: ../cli/src/devices.c:543 ../cli/src/settings.c:504
+#: ../cli/src/settings.c:506 ../cli/src/settings.c:544
+#: ../cli/src/settings.c:643 ../cli/src/settings.c:912
+#: ../cli/src/settings.c:913 ../cli/src/settings.c:915
+#: ../cli/src/settings.c:917 ../cli/src/settings.c:1042
+#: ../cli/src/settings.c:1043 ../cli/src/settings.c:1044
+#: ../cli/src/settings.c:1123 ../cli/src/settings.c:1124
+#: ../cli/src/settings.c:1125 ../cli/src/settings.c:1126
+#: ../cli/src/settings.c:1127 ../cli/src/settings.c:1128
+#: ../cli/src/settings.c:1129 ../cli/src/settings.c:1130
+#: ../cli/src/settings.c:1131 ../cli/src/settings.c:1132
+#: ../cli/src/settings.c:1133 ../cli/src/settings.c:1134
+#: ../cli/src/settings.c:1135 ../cli/src/settings.c:1210
+msgid "no"
+msgstr "ã„ã„ãˆ"
+
+#: ../cli/src/connections.c:457 ../cli/src/connections.c:500
+msgid "System connections"
+msgstr "システム接続"
+
+#: ../cli/src/connections.c:462 ../cli/src/connections.c:513
+msgid "User connections"
+msgstr "ユーザー接続"
-#: ../cli/src/connections.c:178 ../cli/src/connections.c:967
-#: ../cli/src/connections.c:983 ../cli/src/connections.c:992
-#: ../cli/src/connections.c:1003 ../cli/src/connections.c:1085
-#: ../cli/src/devices.c:604 ../cli/src/devices.c:614 ../cli/src/devices.c:699
-#: ../cli/src/devices.c:785 ../cli/src/devices.c:792
+#: ../cli/src/connections.c:474 ../cli/src/connections.c:1334
+#: ../cli/src/connections.c:1350 ../cli/src/connections.c:1359
+#: ../cli/src/connections.c:1370 ../cli/src/connections.c:1452
+#: ../cli/src/devices.c:864 ../cli/src/devices.c:874 ../cli/src/devices.c:973
+#: ../cli/src/devices.c:980
#, c-format
msgid "Error: %s argument is missing."
msgstr "エラー: %s 引数ãŒã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/connections.c:189
+#: ../cli/src/connections.c:487
#, c-format
msgid "Error: %s - no such connection."
msgstr "エラー: %s - ãã®ã‚ˆã†ãªæŽ¥ç¶šã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/connections.c:196
-msgid "System-wide connections"
-msgstr "システム全域接続"
-
-#: ../cli/src/connections.c:205
-msgid "User connections"
-msgstr "ユーザー接続"
-
-#: ../cli/src/connections.c:212 ../cli/src/connections.c:1016
-#: ../cli/src/connections.c:1103 ../cli/src/devices.c:446
-#: ../cli/src/devices.c:494 ../cli/src/devices.c:628 ../cli/src/devices.c:706
-#: ../cli/src/devices.c:798
+#: ../cli/src/connections.c:519 ../cli/src/connections.c:1383
+#: ../cli/src/connections.c:1470 ../cli/src/devices.c:687
+#: ../cli/src/devices.c:754 ../cli/src/devices.c:888 ../cli/src/devices.c:986
#, c-format
msgid "Unknown parameter: %s\n"
msgstr "ä¸æ˜Žãªãƒ‘ラメータ: %s\n"
-#: ../cli/src/connections.c:221
+#: ../cli/src/connections.c:528
#, c-format
msgid "Error: no valid parameter specified."
msgstr "エラー: 有効ãªãƒ‘ラメータãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-#. FIXME: Fix the output
-#: ../cli/src/connections.c:268 ../cli/src/devices.c:302
-#: ../cli/src/devices.c:321 ../cli/src/devices.c:353 ../cli/src/devices.c:355
-#: ../cli/src/devices.c:357 ../cli/src/devices.c:359 ../cli/src/devices.c:361
-msgid "yes"
-msgstr "ã¯ã„"
+#: ../cli/src/connections.c:543 ../cli/src/connections.c:1572
+#: ../cli/src/devices.c:1192 ../cli/src/network-manager.c:274
+#, c-format
+msgid "Error: %s."
+msgstr "エラー: %s"
-#: ../cli/src/connections.c:268 ../cli/src/devices.c:304
-msgid "no"
-msgstr "ã„ã„ãˆ"
+#: ../cli/src/connections.c:649
+#, c-format
+msgid "Error: 'con status': %s"
+msgstr "エラー: 'con status': %s"
-#: ../cli/src/connections.c:297
+#: ../cli/src/connections.c:651
+#, c-format
+msgid "Error: 'con status': %s; allowed fields: %s"
+msgstr "エラー: 'con status': %s ; 許å¯ã•ã‚Œã‚‹ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
+
+#: ../cli/src/connections.c:658
msgid "Active connections"
msgstr "アクティブãªæŽ¥ç¶š"
-#: ../cli/src/connections.c:297 ../cli/src/connections.c:299
-#: ../cli/src/devices.c:302 ../cli/src/devices.c:304
-msgid "Default"
-msgstr "デフォルト"
-
-#: ../cli/src/connections.c:297 ../cli/src/connections.c:299
-msgid "Service"
-msgstr "サービス"
-
-#: ../cli/src/connections.c:297 ../cli/src/connections.c:299
-msgid "Devices"
-msgstr "デãƒã‚¤ã‚¹"
-
-#: ../cli/src/connections.c:659
+#: ../cli/src/connections.c:1026
#, c-format
msgid "no active connection on device '%s'"
msgstr "デãƒã‚¤ã‚¹ '%s'上ã«ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªæŽ¥ç¶šãŒã‚ã‚Šã¾ã›ã‚“"
-#: ../cli/src/connections.c:667
+#: ../cli/src/connections.c:1034
#, c-format
msgid "no active connection or device"
msgstr "アクティブãªæŽ¥ç¶šã€åˆã¯ãƒ‡ãƒã‚¤ã‚¹ãŒã‚ã‚Šã¾ã›ã‚“"
-#: ../cli/src/connections.c:730
+#: ../cli/src/connections.c:1084
+#, c-format
+msgid "device '%s' not compatible with connection '%s'"
+msgstr "デãƒã‚¤ã‚¹ '%s' ã¯æŽ¥ç¶š '%s' ã¨äº’æ›æ€§ãŒã‚ã‚Šã¾ã›ã‚“"
+
+#: ../cli/src/connections.c:1086
+#, c-format
+msgid "no device found for connection '%s'"
+msgstr "接続 '%s'用ã®ãƒ‡ãƒã‚¤ã‚¹ãŒè¦‹ä»˜ã‹ã‚Šã¾ã›ã‚“"
+
+#: ../cli/src/connections.c:1097
msgid "activating"
msgstr "アクティベート中"
-#: ../cli/src/connections.c:732
+#: ../cli/src/connections.c:1099
msgid "activated"
msgstr "アクティベート済ã¿"
-#: ../cli/src/connections.c:735 ../cli/src/connections.c:758
-#: ../cli/src/connections.c:791 ../cli/src/devices.c:111
-#: ../cli/src/network-manager.c:76 ../cli/src/network-manager.c:98
+#: ../cli/src/connections.c:1102 ../cli/src/connections.c:1125
+#: ../cli/src/connections.c:1158 ../cli/src/devices.c:224
+#: ../cli/src/devices.c:514 ../cli/src/network-manager.c:92
+#: ../cli/src/network-manager.c:145 ../cli/src/settings.c:469
msgid "unknown"
msgstr "ä¸æ˜Ž"
-#: ../cli/src/connections.c:744
+#: ../cli/src/connections.c:1111
msgid "VPN connecting (prepare)"
msgstr "VPN 接続(準備)"
-#: ../cli/src/connections.c:746
+#: ../cli/src/connections.c:1113
msgid "VPN connecting (need authentication)"
msgstr "VPN 接続(èªè¨¼ãŒå¿…è¦ï¼‰"
-#: ../cli/src/connections.c:748
+#: ../cli/src/connections.c:1115
msgid "VPN connecting"
msgstr "VPN 接続"
-#: ../cli/src/connections.c:750
+#: ../cli/src/connections.c:1117
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN 接続(IP 設定をå–得)"
-#: ../cli/src/connections.c:752
+#: ../cli/src/connections.c:1119
msgid "VPN connected"
msgstr "VPN 接続済ã¿"
-#: ../cli/src/connections.c:754
+#: ../cli/src/connections.c:1121
msgid "VPN connection failed"
msgstr "VPN 接続失敗"
-#: ../cli/src/connections.c:756
+#: ../cli/src/connections.c:1123
msgid "VPN disconnected"
msgstr "VPN 切断済ã¿"
-#: ../cli/src/connections.c:767
+#: ../cli/src/connections.c:1134
msgid "unknown reason"
msgstr "ä¸æ˜Žãªç†ç”±"
-#: ../cli/src/connections.c:769
+#: ../cli/src/connections.c:1136
msgid "none"
msgstr "ãªã—"
-#: ../cli/src/connections.c:771
+#: ../cli/src/connections.c:1138
msgid "the user was disconnected"
msgstr "ユーザーã®æŽ¥ç¶šãŒåˆ‡æ–­ã•ã‚Œã¾ã—ãŸã€‚"
-#: ../cli/src/connections.c:773
+#: ../cli/src/connections.c:1140
msgid "the base network connection was interrupted"
msgstr "基本ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æŽ¥ç¶šãŒå¦¨å®³ã•ã‚Œã¾ã—ãŸã€‚"
-#: ../cli/src/connections.c:775
+#: ../cli/src/connections.c:1142
msgid "the VPN service stopped unexpectedly"
msgstr "VPN サービスãŒäºˆæœŸã—ãªã„åœæ­¢ã‚’ã—ã¾ã—ãŸ"
-#: ../cli/src/connections.c:777
+#: ../cli/src/connections.c:1144
msgid "the VPN service returned invalid configuration"
msgstr "VPN サービスã¯ç„¡åŠ¹ãªè¨­å®šã‚’è¿”ã—ã¾ã—ãŸ"
-#: ../cli/src/connections.c:779
+#: ../cli/src/connections.c:1146
msgid "the connection attempt timed out"
msgstr "接続試行ã¯æ™‚間切れã§ã™"
-#: ../cli/src/connections.c:781
+#: ../cli/src/connections.c:1148
msgid "the VPN service did not start in time"
msgstr "VPN サービスã¯æ™‚間内ã«é–‹å§‹ã—ã¦ã„ã¾ã›ã‚“"
-#: ../cli/src/connections.c:783
+#: ../cli/src/connections.c:1150
msgid "the VPN service failed to start"
msgstr "VPN サービスã®é–‹å§‹ã¯å¤±æ•—ã—ã¾ã—ãŸ"
-#: ../cli/src/connections.c:785
+#: ../cli/src/connections.c:1152
msgid "no valid VPN secrets"
msgstr "有効㪠VPN シークレットã¯ã‚ã‚Šã¾ã›ã‚“"
-#: ../cli/src/connections.c:787
+#: ../cli/src/connections.c:1154
msgid "invalid VPN secrets"
msgstr "無効㪠VPN シークレット"
-#: ../cli/src/connections.c:789
+#: ../cli/src/connections.c:1156
msgid "the connection was removed"
msgstr "接続ã¯å‰Šé™¤ã•ã‚Œã¾ã—ãŸ"
-#: ../cli/src/connections.c:803
+#: ../cli/src/connections.c:1170
#, c-format
msgid "state: %s\n"
msgstr "状態: %s\n"
-#: ../cli/src/connections.c:806 ../cli/src/connections.c:832
+#: ../cli/src/connections.c:1173 ../cli/src/connections.c:1199
#, c-format
msgid "Connection activated\n"
msgstr "接続ã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ãƒˆæ¸ˆã¿\n"
-#: ../cli/src/connections.c:809
+#: ../cli/src/connections.c:1176
#, c-format
msgid "Error: Connection activation failed."
msgstr "エラー: 接続ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ã‚·ãƒ§ãƒ³ã«å¤±æ•—"
-#: ../cli/src/connections.c:828
+#: ../cli/src/connections.c:1195
#, c-format
msgid "state: %s (%d)\n"
msgstr "状態: %s (%d)\n"
-#: ../cli/src/connections.c:838
+#: ../cli/src/connections.c:1205
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "エラー: 接続ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ã‚·ãƒ§ãƒ³ã«å¤±æ•—: %s."
-#: ../cli/src/connections.c:855 ../cli/src/devices.c:551
+#: ../cli/src/connections.c:1222 ../cli/src/devices.c:811
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "エラー: 制é™æ™‚é–“ã® %d 秒ãŒçµŒéŽ"
-#: ../cli/src/connections.c:898
+#: ../cli/src/connections.c:1265
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "エラー: 接続ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ã‚·ãƒ§ãƒ³ã«å¤±æ•—: %s"
-#: ../cli/src/connections.c:912
+#: ../cli/src/connections.c:1279
#, c-format
msgid "Error: Obtaining active connection for '%s' failed."
msgstr "エラー: '%s'用ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ–接続ã®å–å¾—ã«å¤±æ•—"
-#: ../cli/src/connections.c:921
+#: ../cli/src/connections.c:1288
#, c-format
msgid "Active connection state: %s\n"
msgstr "アクティブ接続ã®çŠ¶æ…‹: %s\n"
-#: ../cli/src/connections.c:922
+#: ../cli/src/connections.c:1289
#, c-format
msgid "Active connection path: %s\n"
msgstr "アクティブ接続ã®ãƒ‘ス: %s\n"
-#: ../cli/src/connections.c:976 ../cli/src/connections.c:1094
+#: ../cli/src/connections.c:1343 ../cli/src/connections.c:1461
#, c-format
msgid "Error: Unknown connection: %s."
msgstr "エラー: ä¸æ˜ŽãªæŽ¥ç¶š: %s"
-#: ../cli/src/connections.c:1011 ../cli/src/devices.c:622
+#: ../cli/src/connections.c:1378 ../cli/src/devices.c:882
#, c-format
msgid "Error: timeout value '%s' is not valid."
msgstr "エラー: 制é™æ™‚間値㮠'%s' ã¯æœ‰åŠ¹ã§ã‚ã‚Šã¾ã›ã‚“"
-#: ../cli/src/connections.c:1024 ../cli/src/connections.c:1111
+#: ../cli/src/connections.c:1391 ../cli/src/connections.c:1478
#, c-format
msgid "Error: id or uuid has to be specified."
msgstr "エラー: id ã‹åˆã¯ uuid ã®æŒ‡å®šãŒå¿…è¦ã§ã™"
-#: ../cli/src/connections.c:1044
+#: ../cli/src/connections.c:1411
#, c-format
msgid "Error: No suitable device found: %s."
msgstr "エラー: é©åˆ‡ãªãƒ‡ãƒã‚¤ã‚¹ãŒè¦‹ä»˜ã‹ã‚Šã¾ã›ã‚“: %s"
-#: ../cli/src/connections.c:1046
+#: ../cli/src/connections.c:1413
#, c-format
msgid "Error: No suitable device found."
msgstr "エラー: é©åˆ‡ãªãƒ‡ãƒã‚¤ã‚¹ãŒè¦‹ä»˜ã‹ã‚Šã¾ã›ã‚“"
-#: ../cli/src/connections.c:1138
+#: ../cli/src/connections.c:1505
#, c-format
msgid "Warning: Connection not active\n"
msgstr "警告: 接続ã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã§ã‚ã‚Šã¾ã›ã‚“\n"
-#: ../cli/src/connections.c:1189
+#: ../cli/src/connections.c:1561
#, c-format
msgid "Error: 'con' command '%s' is not valid."
msgstr "エラー: 'con' コマンド '%s' ã¯æœ‰åŠ¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: ../cli/src/connections.c:1216
+#: ../cli/src/connections.c:1597
#, c-format
msgid "Error: could not connect to D-Bus."
msgstr "エラー: D-Bus ã«æŽ¥ç¶šã§ãã¾ã›ã‚“ã§ã—ãŸ"
-#: ../cli/src/connections.c:1223
+#: ../cli/src/connections.c:1604
#, c-format
msgid "Error: Could not get system settings."
msgstr "エラー: システム設定をå–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸ"
-#: ../cli/src/connections.c:1231
+#: ../cli/src/connections.c:1612
#, c-format
msgid "Error: Could not get user settings."
msgstr "エラー: ユーザー設定をå–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸ"
-#: ../cli/src/connections.c:1241
+#: ../cli/src/connections.c:1622
#, c-format
msgid "Error: Can't obtain connections: settings services are not running."
msgstr "エラー: 接続をå–å¾—ã§ãã¾ã›ã‚“: 設定サービスãŒç¨¼åƒã—ã¦ã„ã¾ã›ã‚“"
+#. 0
+#. 9
+#: ../cli/src/devices.c:60 ../cli/src/devices.c:86 ../cli/src/devices.c:162
+msgid "DEVICE"
+msgstr "デãƒã‚¤ã‚¹"
+
+#. 1
+#. 4
+#. 0
+#: ../cli/src/devices.c:62 ../cli/src/devices.c:90
+#: ../cli/src/network-manager.c:36
+msgid "STATE"
+msgstr "状態"
+
+#: ../cli/src/devices.c:71
+msgid "GENERAL"
+msgstr "全般"
+
+#. 0
+#: ../cli/src/devices.c:72
+msgid "CAPABILITIES"
+msgstr "能力"
+
+#. 1
#: ../cli/src/devices.c:73
+msgid "WIFI-PROPERTIES"
+msgstr "WIFI-プロパティ"
+
+#. 2
+#: ../cli/src/devices.c:74
+msgid "AP"
+msgstr "AP"
+
+#. 3
+#: ../cli/src/devices.c:75
+msgid "WIRED-PROPERTIES"
+msgstr "有線接続-プロパティ"
+
+#. 4
+#: ../cli/src/devices.c:76
+msgid "IP4-SETTINGS"
+msgstr "IP4-セッティング"
+
+#. 5
+#: ../cli/src/devices.c:77
+msgid "IP4-DNS"
+msgstr "IP4-DNS"
+
+#. 2
+#: ../cli/src/devices.c:88
+msgid "DRIVER"
+msgstr "ドライãƒãƒ¼"
+
+#. 3
+#: ../cli/src/devices.c:89
+msgid "HWADDR"
+msgstr "HWADDR"
+
+#. 0
+#: ../cli/src/devices.c:99
+msgid "CARRIER-DETECT"
+msgstr "キャリア検出"
+
+#. 1
+#: ../cli/src/devices.c:100
+msgid "SPEED"
+msgstr "速度"
+
+#. 0
+#: ../cli/src/devices.c:109
+msgid "CARRIER"
+msgstr "キャリア"
+
+#. 0
+#: ../cli/src/devices.c:119
+msgid "WEP"
+msgstr "WEP"
+
+#. 1
+#: ../cli/src/devices.c:120
+msgid "WPA"
+msgstr "WPA"
+
+#. 2
+#: ../cli/src/devices.c:121
+msgid "WPA2"
+msgstr "WPA2"
+
+#. 3
+#: ../cli/src/devices.c:122
+msgid "TKIP"
+msgstr "TKIP"
+
+#. 4
+#: ../cli/src/devices.c:123
+msgid "CCMP"
+msgstr "CCMP"
+
+#. 0
+#: ../cli/src/devices.c:132
+msgid "ADDRESS"
+msgstr "アドレス"
+
+#. 1
+#: ../cli/src/devices.c:133
+msgid "PREFIX"
+msgstr "接頭辞"
+
+#. 2
+#: ../cli/src/devices.c:134
+msgid "GATEWAY"
+msgstr "ゲートウェイ"
+
+#. 0
+#: ../cli/src/devices.c:143
+msgid "DNS"
+msgstr "DNS"
+
+#. 0
+#: ../cli/src/devices.c:153
+msgid "SSID"
+msgstr "SSID"
+
+#. 1
+#: ../cli/src/devices.c:154
+msgid "BSSID"
+msgstr "BSSID"
+
+#. 2
+#: ../cli/src/devices.c:155
+msgid "MODE"
+msgstr "モード"
+
+#. 3
+#: ../cli/src/devices.c:156
+msgid "FREQ"
+msgstr "周波数"
+
+#. 4
+#: ../cli/src/devices.c:157
+msgid "RATE"
+msgstr "レート"
+
+#. 5
+#: ../cli/src/devices.c:158
+msgid "SIGNAL"
+msgstr "ä¿¡å·"
+
+#. 6
+#: ../cli/src/devices.c:159
+msgid "SECURITY"
+msgstr "セキュリティ"
+
+#. 7
+#: ../cli/src/devices.c:160
+msgid "WPA-FLAGS"
+msgstr "WPA-フラグ"
+
+#. 8
+#: ../cli/src/devices.c:161
+msgid "RSN-FLAGS"
+msgstr "RSN-フラグ"
+
+#. 10
+#: ../cli/src/devices.c:163
+msgid "ACTIVE"
+msgstr "アクティブ"
+
+#: ../cli/src/devices.c:186
#, c-format
msgid ""
"Usage: nmcli dev { COMMAND | help }\n"
@@ -356,7 +628,7 @@ msgid ""
" status\n"
" list [iface <iface>]\n"
" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] | apinfo iface <iface> hwaddr <hwaddr>]\n"
+" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
"\n"
msgstr ""
"使用法: nmcli dev { COMMAND | help }\n"
@@ -366,349 +638,236 @@ msgstr ""
" status\n"
" list [iface <iface>]\n"
" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] | apinfo iface <iface> hwaddr <hwaddr>]\n"
+" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
"\n"
-#: ../cli/src/devices.c:93
+#: ../cli/src/devices.c:206
msgid "unmanaged"
msgstr "管ç†ç„¡ã—"
-#: ../cli/src/devices.c:95
+#: ../cli/src/devices.c:208
msgid "unavailable"
msgstr "利用ä¸å¯"
-#: ../cli/src/devices.c:97 ../cli/src/network-manager.c:73
+#: ../cli/src/devices.c:210 ../cli/src/network-manager.c:89
msgid "disconnected"
msgstr "切断済ã¿"
-#: ../cli/src/devices.c:99
+#: ../cli/src/devices.c:212
msgid "connecting (prepare)"
msgstr "接続中(準備)"
-#: ../cli/src/devices.c:101
+#: ../cli/src/devices.c:214
msgid "connecting (configuring)"
msgstr "接続中(設定中)"
-#: ../cli/src/devices.c:103
+#: ../cli/src/devices.c:216
msgid "connecting (need authentication)"
msgstr "接続中(èªè¨¼ãŒå¿…è¦ï¼‰"
-#: ../cli/src/devices.c:105
+#: ../cli/src/devices.c:218
msgid "connecting (getting IP configuration)"
msgstr "接続中(IP 設定をå–得中)"
-#: ../cli/src/devices.c:107 ../cli/src/network-manager.c:71
+#: ../cli/src/devices.c:220 ../cli/src/network-manager.c:87
msgid "connected"
msgstr "接続済ã¿"
-#: ../cli/src/devices.c:109
+#: ../cli/src/devices.c:222
msgid "connection failed"
msgstr "接続ã«å¤±æ•—"
-#: ../cli/src/devices.c:132 ../cli/src/devices.c:876
+#: ../cli/src/devices.c:245 ../cli/src/devices.c:380
msgid "Unknown"
msgstr "ä¸æ˜Ž"
-#. print them
-#: ../cli/src/devices.c:164 ../cli/src/devices.c:266 ../cli/src/devices.c:861
-#: ../cli/src/devices.c:879
+#: ../cli/src/devices.c:277
msgid "(none)"
msgstr "(ãªã—)"
-#: ../cli/src/devices.c:209
+#: ../cli/src/devices.c:302
#, c-format
msgid "%s: error converting IP4 address 0x%X"
msgstr "%s: IP4 アドレス 0x%X を変æ›ä¸­ã«ã‚¨ãƒ©ãƒ¼ç™ºç”Ÿ"
-#: ../cli/src/devices.c:238
+#: ../cli/src/devices.c:349
#, c-format
-msgid "%s, %s, Freq %d MHz, Rate %d Mb/s, Strength %d"
-msgstr "%s, %s, 周波数 %d MHz, レート %d Mb/s, 強㕠%d"
-
-#: ../cli/src/devices.c:239
-msgid "Ad-Hoc"
-msgstr "アドホック"
-
-#: ../cli/src/devices.c:248
-msgid ", Encrypted: "
-msgstr ", æš—å·åŒ–:"
-
-#: ../cli/src/devices.c:253
-msgid " WEP"
-msgstr " WEP"
-
-#: ../cli/src/devices.c:255
-msgid " WPA"
-msgstr " WPA"
-
-#: ../cli/src/devices.c:257
-msgid " WPA2"
-msgstr " WPA2"
+msgid "%u MHz"
+msgstr "%u MHz"
-#: ../cli/src/devices.c:260
-msgid " Enterprise"
-msgstr " Enterprise"
+#: ../cli/src/devices.c:350
+#, c-format
+msgid "%u MB/s"
+msgstr "%u MB/s"
-#: ../cli/src/devices.c:294 ../cli/src/devices.c:458 ../cli/src/devices.c:460
-msgid "Device"
-msgstr "デãƒã‚¤ã‚¹"
+#: ../cli/src/devices.c:359
+msgid "Encrypted: "
+msgstr "æš—å·åŒ–:"
-#: ../cli/src/devices.c:299
-msgid "Driver"
-msgstr "ドライãƒãƒ¼"
+#: ../cli/src/devices.c:364
+msgid "WEP "
+msgstr "WEP "
-#: ../cli/src/devices.c:299 ../cli/src/devices.c:567
-msgid "(unknown)"
-msgstr "(ä¸æ˜Ž)"
+#: ../cli/src/devices.c:366
+msgid "WPA "
+msgstr "WPA "
-#: ../cli/src/devices.c:300 ../cli/src/devices.c:458 ../cli/src/devices.c:460
-msgid "State"
-msgstr "状態"
+#: ../cli/src/devices.c:368
+msgid "WPA2 "
+msgstr "WPA2 "
-#: ../cli/src/devices.c:313
-msgid "HW Address"
-msgstr "HW アドレス"
+#: ../cli/src/devices.c:371
+msgid "Enterprise "
+msgstr "Enterprise "
-#: ../cli/src/devices.c:319
-#, c-format
-msgid ""
-"\n"
-" Capabilities:\n"
-msgstr ""
-"\n"
-" 能力:\n"
+#: ../cli/src/devices.c:380
+msgid "Ad-Hoc"
+msgstr "アドホック"
-#: ../cli/src/devices.c:321
-msgid "Carrier Detect"
-msgstr "キャリア検出"
+#: ../cli/src/devices.c:380
+msgid "Infrastructure"
+msgstr "インフラストラクãƒãƒ£"
-#: ../cli/src/devices.c:336
+#: ../cli/src/devices.c:442
#, c-format
-msgid "%u Mb/s"
-msgstr "%u Mb/s"
+msgid "Error: 'dev list': %s"
+msgstr "エラー: 'dev list': %s"
-#: ../cli/src/devices.c:337
-msgid "Speed"
-msgstr "速度"
-
-#: ../cli/src/devices.c:348
+#: ../cli/src/devices.c:444
#, c-format
-msgid ""
-"\n"
-" Wireless Properties\n"
-msgstr ""
-"\n"
-" 無線接続ã®ãƒ—ロパティ\n"
-
-#: ../cli/src/devices.c:353
-msgid "WEP Encryption"
-msgstr "WEP æš—å·åŒ–"
-
-#: ../cli/src/devices.c:355
-msgid "WPA Encryption"
-msgstr "WPA æš—å·åŒ–"
+msgid "Error: 'dev list': %s; allowed fields: %s"
+msgstr "エラー: 'dev list': %s; 許å¯ã•ã‚Œã‚‹ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
-#: ../cli/src/devices.c:357
-msgid "WPA2 Encryption"
-msgstr "WPA2 æš—å·åŒ–"
+#: ../cli/src/devices.c:453
+msgid "Device details"
+msgstr "デãƒã‚¤ã‚¹ã®è©³ç´°"
-#: ../cli/src/devices.c:359
-msgid "TKIP cipher"
-msgstr "TKIP æš—å·"
-
-#: ../cli/src/devices.c:361
-msgid "CCMP cipher"
-msgstr "CCMP æš—å·"
-
-#: ../cli/src/devices.c:368
-#, c-format
-msgid ""
-"\n"
-" Wireless Access Points %s\n"
-msgstr ""
-"\n"
-" 無線アクセスãƒã‚¤ãƒ³ãƒˆ %s\n"
+#: ../cli/src/devices.c:483 ../cli/src/devices.c:827
+msgid "(unknown)"
+msgstr "(ä¸æ˜Ž)"
-#: ../cli/src/devices.c:368
-msgid "(* = current AP)"
-msgstr "(* = ç¾åœ¨ã® AP)"
+#: ../cli/src/devices.c:484
+msgid "unknown)"
+msgstr "ä¸æ˜Ž)"
-#: ../cli/src/devices.c:374
+#: ../cli/src/devices.c:510
#, c-format
-msgid ""
-"\n"
-" Wired Properties\n"
-msgstr ""
-"\n"
-" 有線接続ã®ãƒ—ロパティ\n"
-
-#: ../cli/src/devices.c:377 ../cli/src/devices.c:379
-msgid "Carrier"
-msgstr "キャリア"
+msgid "%u Mb/s"
+msgstr "%u Mb/s"
-#: ../cli/src/devices.c:377
+#. Print header
+#. "WIRED-PROPERTIES"
+#: ../cli/src/devices.c:583
msgid "on"
msgstr "オン"
-#: ../cli/src/devices.c:379
+#: ../cli/src/devices.c:583
msgid "off"
msgstr "オフ"
-#: ../cli/src/devices.c:387
+#: ../cli/src/devices.c:710
#, c-format
-msgid ""
-"\n"
-" IPv4 Settings:\n"
-msgstr ""
-"\n"
-" IPv4 セッティング:\n"
-
-#: ../cli/src/devices.c:395
-msgid "Address"
-msgstr "アドレス"
-
-#: ../cli/src/devices.c:401
-msgid "Prefix"
-msgstr "接頭辞"
+msgid "Error: 'dev status': %s"
+msgstr "エラー: 'dev status': %s"
-#: ../cli/src/devices.c:405
-msgid "Gateway"
-msgstr "ゲートウェイ"
-
-#: ../cli/src/devices.c:416
-msgid "DNS"
-msgstr "DNS"
+#: ../cli/src/devices.c:712
+#, c-format
+msgid "Error: 'dev status': %s; allowed fields: %s"
+msgstr "エラー: 'dev status': %s; 許å¯ã•ã‚Œã‚‹ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
-#: ../cli/src/devices.c:458
+#: ../cli/src/devices.c:719
msgid "Status of devices"
msgstr "デãƒã‚¤ã‚¹ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹"
-#: ../cli/src/devices.c:487
+#: ../cli/src/devices.c:747
#, c-format
msgid "Error: '%s' argument is missing."
msgstr "エラー: '%s' 引数ãŒã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/devices.c:516 ../cli/src/devices.c:655 ../cli/src/devices.c:729
+#: ../cli/src/devices.c:776 ../cli/src/devices.c:915 ../cli/src/devices.c:1035
#, c-format
msgid "Error: Device '%s' not found."
msgstr "エラー: デãƒã‚¤ã‚¹'%s' ãŒè¦‹ä»˜ã‹ã‚Šã¾ã›ã‚“"
-#: ../cli/src/devices.c:539
+#: ../cli/src/devices.c:799
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "æˆåŠŸ: デãƒã‚¤ã‚¹ '%s' ã¯æ­£å¸¸ã«åˆ‡æ–­ã•ã‚Œã¾ã—ãŸã€‚"
-#: ../cli/src/devices.c:564
+#: ../cli/src/devices.c:824
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "エラー: デãƒã‚¤ã‚¹ '%s' (%s) ã®åˆ‡æ–­ã«å¤±æ•—ã—ã¾ã—ãŸ: %s"
-#: ../cli/src/devices.c:572
+#: ../cli/src/devices.c:832
#, c-format
msgid "Device state: %d (%s)\n"
msgstr "デãƒã‚¤ã‚¹ã®çŠ¶æ…‹: %d (%s)\n"
-#: ../cli/src/devices.c:636
+#: ../cli/src/devices.c:896
#, c-format
msgid "Error: iface has to be specified."
msgstr "エラー: iface を指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
-#: ../cli/src/devices.c:736 ../cli/src/devices.c:746
-msgid "WiFi scan list"
-msgstr "WiFi スキャン一覧"
-
-#: ../cli/src/devices.c:740
+#: ../cli/src/devices.c:1011
#, c-format
-msgid "Error: Device '%s' is not a WiFi device."
-msgstr "エラー: デãƒã‚¤ã‚¹ '%s' 㯠WiFi デãƒã‚¤ã‚¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+msgid "Error: 'dev wifi': %s"
+msgstr "エラー: 'dev wifi': %s"
-#: ../cli/src/devices.c:754
-msgid "Device:"
-msgstr "デãƒã‚¤ã‚¹:"
-
-#: ../cli/src/devices.c:806
+#: ../cli/src/devices.c:1013
#, c-format
-msgid "Error: hwaddr has to be specified."
-msgstr "エラー: hwaddr を指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+msgid "Error: 'dev wifi': %s; allowed fields: %s"
+msgstr "エラー: 'dev wifi': %s; 許å¯ã•ã‚Œã‚‹ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
+
+#: ../cli/src/devices.c:1020
+msgid "WiFi scan list"
+msgstr "WiFi スキャン一覧"
-#: ../cli/src/devices.c:844
+#: ../cli/src/devices.c:1055 ../cli/src/devices.c:1109
#, c-format
msgid "Error: Access point with hwaddr '%s' not found."
msgstr "エラー: hwaddr '%s' ã®ã‚¢ã‚¯ã‚»ã‚¹ãƒã‚¤ãƒ³ãƒˆãŒè¦‹ä»˜ã‹ã‚Šã¾ã›ã‚“"
-#: ../cli/src/devices.c:862
-#, c-format
-msgid "%u MHz"
-msgstr "%u MHz"
-
-#: ../cli/src/devices.c:863
+#: ../cli/src/devices.c:1072
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
-
-#: ../cli/src/devices.c:869 ../cli/src/devices.c:871
-msgid "AP parameters"
-msgstr "AP パラメータ"
-
-#: ../cli/src/devices.c:873
-msgid "SSID:"
-msgstr "SSID:"
-
-#: ../cli/src/devices.c:874
-msgid "BSSID:"
-msgstr "BSSID:"
-
-#: ../cli/src/devices.c:875
-msgid "Frequency:"
-msgstr "周波数:"
-
-#: ../cli/src/devices.c:876
-msgid "Mode:"
-msgstr "モード:"
-
-#: ../cli/src/devices.c:876
-msgid "Ad-hoc"
-msgstr "アドホック"
-
-#: ../cli/src/devices.c:876
-msgid "Infrastructure"
-msgstr "インフラストラクãƒãƒ£"
-
-#: ../cli/src/devices.c:877
-msgid "Maximal bitrate:"
-msgstr "最大ビットレート:"
-
-#: ../cli/src/devices.c:878
-msgid "Strength:"
-msgstr "å¼·ã•:"
-
-#: ../cli/src/devices.c:879
-msgid "Flags:"
-msgstr "フラグ:"
-
-#: ../cli/src/devices.c:879
-msgid "privacy"
-msgstr "プライãƒã‚·ãƒ¼"
-
-#: ../cli/src/devices.c:880
-msgid "WPA flags:"
-msgstr "WPA フラグ:"
-
-#: ../cli/src/devices.c:881
-msgid "RSN flags:"
-msgstr "RSN フラグ:"
+msgid "Error: Device '%s' is not a WiFi device."
+msgstr "エラー: デãƒã‚¤ã‚¹ '%s' 㯠WiFi デãƒã‚¤ã‚¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/devices.c:907
+#: ../cli/src/devices.c:1136
#, c-format
msgid "Error: 'dev wifi' command '%s' is not valid."
msgstr "エラー: 'dev wifi' コマンド '%s' ã¯ç„¡åŠ¹ã§ã™ã€‚"
-#: ../cli/src/devices.c:943
+#: ../cli/src/devices.c:1183
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "エラー: 'dev' コマンド '%s' ã¯ç„¡åŠ¹ã§ã™ã€‚"
-#: ../cli/src/network-manager.c:46
+#: ../cli/src/network-manager.c:35
+msgid "RUNNING"
+msgstr "実行中"
+
+#. 1
+#: ../cli/src/network-manager.c:37
+msgid "WIFI-HARDWARE"
+msgstr "WIFI ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢"
+
+#. 2
+#: ../cli/src/network-manager.c:38
+msgid "WIFI"
+msgstr "WIFI"
+
+#. 3
+#: ../cli/src/network-manager.c:39
+msgid "WWAN-HARDWARE"
+msgstr "WWAN ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢"
+
+#. 4
+#: ../cli/src/network-manager.c:40
+msgid "WWAN"
+msgstr "WWAN"
+
+#: ../cli/src/network-manager.c:62
#, c-format
msgid ""
"Usage: nmcli nm { COMMAND | help }\n"
@@ -733,89 +892,91 @@ msgstr ""
" wwan [on|off]\n"
"\n"
-#: ../cli/src/network-manager.c:67
+#: ../cli/src/network-manager.c:83
msgid "asleep"
msgstr "休止中"
-#: ../cli/src/network-manager.c:69
+#: ../cli/src/network-manager.c:85
msgid "connecting"
msgstr "接続中"
-#: ../cli/src/network-manager.c:93 ../cli/src/network-manager.c:94
-#: ../cli/src/network-manager.c:95 ../cli/src/network-manager.c:96
-#: ../cli/src/network-manager.c:143 ../cli/src/network-manager.c:160
-msgid "enabled"
-msgstr "有効"
+#: ../cli/src/network-manager.c:125
+#, c-format
+msgid "Error: 'nm status': %s"
+msgstr "エラー: 'nm status': %s"
-#: ../cli/src/network-manager.c:93 ../cli/src/network-manager.c:94
-#: ../cli/src/network-manager.c:95 ../cli/src/network-manager.c:96
-#: ../cli/src/network-manager.c:143 ../cli/src/network-manager.c:160
-msgid "disabled"
-msgstr "無効"
+#: ../cli/src/network-manager.c:127
+#, c-format
+msgid "Error: 'nm status': %s; allowed fields: %s"
+msgstr "エラー: 'nm status': %s; 許å¯ã•ã‚Œã‚‹ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
-#: ../cli/src/network-manager.c:102
+#: ../cli/src/network-manager.c:134
msgid "NetworkManager status"
msgstr "NetworkManager ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹"
-#: ../cli/src/network-manager.c:104
-msgid "NM running:"
-msgstr "NM ãŒå®Ÿè¡Œä¸­:"
+#. 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
+msgid "enabled"
+msgstr "有効"
+
+#: ../cli/src/network-manager.c:140 ../cli/src/network-manager.c:141
+#: ../cli/src/network-manager.c:142 ../cli/src/network-manager.c:143
+#: ../cli/src/network-manager.c:211 ../cli/src/network-manager.c:243
+msgid "disabled"
+msgstr "無効"
-#: ../cli/src/network-manager.c:104
+#: ../cli/src/network-manager.c:148
msgid "running"
msgstr "実行中"
-#: ../cli/src/network-manager.c:104
+#: ../cli/src/network-manager.c:148
msgid "not running"
msgstr "実行ã—ã¦ã„ã¾ã›ã‚“"
-#: ../cli/src/network-manager.c:105
-msgid "NM state:"
-msgstr "NM ã®çŠ¶æ…‹: "
-
-#: ../cli/src/network-manager.c:106
-msgid "NM wireless hardware:"
-msgstr "NM ワイヤレスãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢:"
-
-#. no argument, show current state
-#: ../cli/src/network-manager.c:107 ../cli/src/network-manager.c:143
-msgid "NM wireless:"
-msgstr "NM ワイヤレス:"
-
-#: ../cli/src/network-manager.c:108
-msgid "NM WWAN hardware:"
-msgstr "NM WWAN ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢:"
+#: ../cli/src/network-manager.c:201 ../cli/src/network-manager.c:233
+#, c-format
+msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
+msgstr "エラー: '--fields' ã®å€¤ '%s' ã¯ã“ã“ã§ã¯æœ‰åŠ¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“; 許å¯ã•ã‚Œã‚‹ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
-#. no argument, show current state
-#: ../cli/src/network-manager.c:109 ../cli/src/network-manager.c:160
-msgid "NM WWAN:"
-msgstr "NM WWAN:"
+#: ../cli/src/network-manager.c:209
+msgid "WiFi enabled"
+msgstr "WiFi ã¯æœ‰åŠ¹ã§ã™"
-#: ../cli/src/network-manager.c:150
+#: ../cli/src/network-manager.c:220
#, c-format
msgid "Error: invalid 'wifi' parameter: '%s'."
msgstr "エラー: 無効ãª'wifi' パラメータ: '%s'"
-#: ../cli/src/network-manager.c:167
+#: ../cli/src/network-manager.c:241
+msgid "WWAN enabled"
+msgstr "WWAN ã¯æœ‰åŠ¹ã§ã™"
+
+#: ../cli/src/network-manager.c:252
#, c-format
msgid "Error: invalid 'wwan' parameter: '%s'."
msgstr "エラー: 無効ãª'wwan' パラメータ: '%s'"
-#: ../cli/src/network-manager.c:178
+#: ../cli/src/network-manager.c:263
#, c-format
msgid "Error: 'nm' command '%s' is not valid."
msgstr "エラー: 'nm' コマンド '%s' ã¯ç„¡åŠ¹ã§ã™ã€‚"
-#: ../cli/src/nmcli.c:65
+#: ../cli/src/nmcli.c:69
#, c-format
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
"\n"
"OPTIONS\n"
-" -t[erse] terse output\n"
-" -p[retty] pretty output\n"
-" -v[ersion] show program version\n"
-" -h[elp] print this help\n"
+" -t[erse] terse output\n"
+" -p[retty] pretty output\n"
+" -m[ode] tabular|multiline output mode\n"
+" -f[ields] <field1,field2,...>|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"
@@ -826,10 +987,14 @@ msgstr ""
"使用法: %s [OPTIONS] OBJECT { COMMAND | help }\n"
"\n"
"OPTIONS\n"
-" -t[erse] terse output\n"
-" -p[retty] pretty output\n"
-" -v[ersion] show program version\n"
-" -h[elp] print this help\n"
+" -t[erse] terse output\n"
+" -p[retty] pretty output\n"
+" -m[ode] tabular|multiline output mode\n"
+" -f[ields] <field1,field2,...>|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"
@@ -837,35 +1002,165 @@ msgstr ""
" dev devices managed by NetworkManager\n"
"\n"
-#: ../cli/src/nmcli.c:106
+#: ../cli/src/nmcli.c:113
+#, c-format
+msgid "Error: Object '%s' is unknown, try 'nmcli help'."
+msgstr "エラー: オブジェクト '%s' ã¯ä¸æ˜Žã§ã™ã€‚'nmcli help' を試ã—ã¦ä¸‹ã•ã„。"
+
+#: ../cli/src/nmcli.c:143
+#, c-format
+msgid "Error: Option '--terse' is specified the second time."
+msgstr "エラー: オプション '--terse' ã¯ï¼’回目ã®æŒ‡å®šã§ã™ã€‚"
+
+#: ../cli/src/nmcli.c:148
+#, c-format
+msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
+msgstr "エラー: オプション '--terse' 㯠'--pretty' ã¨ç›¸äº’ã«ç‹¬å çš„ã§ã™ã€‚"
+
+#: ../cli/src/nmcli.c:156
+#, c-format
+msgid "Error: Option '--pretty' is specified the second time."
+msgstr "エラー: オプション '--pretty' ã¯ï¼’回目ã®æŒ‡å®šã§ã™ã€‚"
+
+#: ../cli/src/nmcli.c:161
+#, c-format
+msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
+msgstr "エラー: オプション '--pretty' 㯠'--terse' ã¨ç›¸äº’ã«ç‹¬å çš„ã§ã™ã€‚"
+
+#: ../cli/src/nmcli.c:171 ../cli/src/nmcli.c:187
+#, c-format
+msgid "Error: missing argument for '%s' option."
+msgstr "エラー: %s オプション用ã®å¼•æ•°ãŒã‚ã‚Šã¾ã›ã‚“。"
+
+#: ../cli/src/nmcli.c:180 ../cli/src/nmcli.c:196
#, c-format
-msgid "Object '%s' is unknown, try 'nmcli help'."
-msgstr "オブジェクト'%s' ã¯ä¸æ˜Žã§ã™ã€‚'nmcli help' を試ã—ã¦ä¸‹ã•ã„。"
+msgid "Error: '%s' is not valid argument for '%s' option."
+msgstr "エラー: '%s' 㯠'%s' オプション用ã®æœ‰åŠ¹ãªå¼•æ•°ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/nmcli.c:139
+#: ../cli/src/nmcli.c:203
+#, c-format
+msgid "Error: fields for '%s' options are missing."
+msgstr "エラー: '%s' オプション用ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ãŒã‚ã‚Šã¾ã›ã‚“。"
+
+#: ../cli/src/nmcli.c:209
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "nmcli ツールã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³ %s\n"
-#: ../cli/src/nmcli.c:145
+#: ../cli/src/nmcli.c:215
#, c-format
-msgid "Option '%s' is unknown, try 'nmcli -help'."
-msgstr "オプション '%s' ã¯ä¸æ˜Žã§ã™ã€'nmcli -help' を試ã—ã¦ä¸‹ã•ã„。"
+msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
+msgstr "エラー: オプション '%s' ã¯ä¸æ˜Žã§ã™ã€'nmcli -help' を試ã—ã¦ä¸‹ã•ã„。"
-#: ../cli/src/nmcli.c:164
+#: ../cli/src/nmcli.c:234
#, c-format
msgid "Caught signal %d, shutting down..."
msgstr "シグナル %d ãŒå‡ºã¾ã—ãŸã€ã‚·ãƒ£ãƒƒãƒˆãƒ€ã‚¦ãƒ³ã—ã¾ã™..."
-#: ../cli/src/nmcli.c:189
+#: ../cli/src/nmcli.c:259
#, c-format
msgid "Error: Could not connect to NetworkManager."
msgstr "エラー: NetworkManager ã¸æŽ¥ç¶šå‡ºæ¥ã¾ã›ã‚“ã§ã—ãŸã€‚"
-#: ../cli/src/nmcli.c:205
+#: ../cli/src/nmcli.c:275
msgid "Success"
msgstr "æˆåŠŸ"
+#: ../cli/src/settings.c:407
+#, c-format
+msgid "%d (hex-ascii-key)"
+msgstr "%d (hex-ascii-key)"
+
+#: ../cli/src/settings.c:409
+#, c-format
+msgid "%d (104/128-bit passphrase)"
+msgstr "%d (104/128-bit パスフレーズ)"
+
+#: ../cli/src/settings.c:412
+#, c-format
+msgid "%d (unknown)"
+msgstr "%d (ä¸æ˜Ž)"
+
+#: ../cli/src/settings.c:438
+msgid "0 (unknown)"
+msgstr "0 (ä¸æ˜Ž)"
+
+#: ../cli/src/settings.c:444
+msgid "any, "
+msgstr "ã„ãšã‚Œã§ã‚‚ã€"
+
+#: ../cli/src/settings.c:446
+msgid "900 MHz, "
+msgstr "900 MHz, "
+
+#: ../cli/src/settings.c:448
+msgid "1800 MHz, "
+msgstr "1800 MHz, "
+
+#: ../cli/src/settings.c:450
+msgid "1900 MHz, "
+msgstr "1900 MHz, "
+
+#: ../cli/src/settings.c:452
+msgid "850 MHz, "
+msgstr "850 MHz, "
+
+#: ../cli/src/settings.c:454
+msgid "WCDMA 3GPP UMTS 2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 2100 MHz, "
+
+#: ../cli/src/settings.c:456
+msgid "WCDMA 3GPP UMTS 1800 MHz, "
+msgstr "WCDMA 3GPP UMTS 1800 MHz, "
+
+#: ../cli/src/settings.c:458
+msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
+
+#: ../cli/src/settings.c:460
+msgid "WCDMA 3GPP UMTS 800 MHz, "
+msgstr "WCDMA 3GPP UMTS 800 MHz, "
+
+#: ../cli/src/settings.c:462
+msgid "WCDMA 3GPP UMTS 850 MHz, "
+msgstr "WCDMA 3GPP UMTS 850 MHz, "
+
+#: ../cli/src/settings.c:464
+msgid "WCDMA 3GPP UMTS 900 MHz, "
+msgstr "WCDMA 3GPP UMTS 900 MHz, "
+
+#: ../cli/src/settings.c:466
+msgid "WCDMA 3GPP UMTS 1700 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700 MHz, "
+
+#: ../cli/src/settings.c:546 ../cli/src/settings.c:708
+msgid "auto"
+msgstr "自動"
+
+#: ../cli/src/settings.c:704 ../cli/src/settings.c:707 ../cli/src/utils.c:172
+msgid "not set"
+msgstr "セットã•ã‚Œã¦ã„ã¾ã›ã‚“"
+
+#: ../cli/src/utils.c:124
+#, c-format
+msgid "field '%s' has to be alone"
+msgstr "フィールド '%s' ã¯å­¤ç«‹ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™"
+
+#: ../cli/src/utils.c:127
+#, c-format
+msgid "invalid field '%s'"
+msgstr "無効ãªãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ '%s'"
+
+#: ../cli/src/utils.c:146
+#, c-format
+msgid "Option '--terse' requires specifying '--fields'"
+msgstr "オプション '--terse' ã«ã¯ '--fields' ã®æŒ‡å®šãŒå¿…è¦ã§ã™"
+
+#: ../cli/src/utils.c:150
+#, c-format
+msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
+msgstr "オプション'--terse' ã«ã¯ç‰¹å®šã® '--fields' オプションã®å€¤ãŒå¿…è¦ã§ã€ '%s' ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+
#: ../libnm-util/crypto.c:120
#, c-format
msgid "PEM key file had no end tag '%s'."
@@ -1181,26 +1476,26 @@ msgstr "PKCS#12 ファイルを確証出æ¥ã¾ã›ã‚“: %d"
msgid "Could not generate random data."
msgstr "ランダムデータを生æˆã§ãã¾ã›ã‚“。"
-#: ../libnm-util/nm-utils.c:1924
+#: ../libnm-util/nm-utils.c:1925
#, c-format
msgid "Not enough memory to make encryption key."
msgstr "æš—å·åŒ–キーを作æˆã™ã‚‹ã®ã«å分ãªãƒ¡ãƒ¢ãƒªãƒ¼ãŒã‚ã‚Šã¾ã›ã‚“。"
-#: ../libnm-util/nm-utils.c:2034
+#: ../libnm-util/nm-utils.c:2035
msgid "Could not allocate memory for PEM file creation."
msgstr "PEM ファイル作æˆç”¨ã«ãƒ¡ãƒ¢ãƒªãƒ¼ã‚’割り当ã¦å‡ºæ¥ã¾ã›ã‚“。"
-#: ../libnm-util/nm-utils.c:2046
+#: ../libnm-util/nm-utils.c:2047
#, c-format
msgid "Could not allocate memory for writing IV to PEM file."
msgstr "PEM ファイルã¸ã® IV ã®æ›¸ãè¾¼ã¿ç”¨ã«ãƒ¡ãƒ¢ãƒªãƒ¼ã‚’割り当ã¦å‡ºæ¥ã¾ã›ã‚“。"
-#: ../libnm-util/nm-utils.c:2058
+#: ../libnm-util/nm-utils.c:2059
#, c-format
msgid "Could not allocate memory for writing encrypted key to PEM file."
msgstr "PEM ファイルã¸ã®æš—å·åŒ–キーã®æ›¸ãè¾¼ã¿ç”¨ã«ãƒ¡ãƒ¢ãƒªãƒ¼ã‚’割り当ã¦å‡ºæ¥ã¾ã›ã‚“。"
-#: ../libnm-util/nm-utils.c:2077
+#: ../libnm-util/nm-utils.c:2078
#, c-format
msgid "Could not allocate memory for PEM file data."
msgstr "PEM ファイルデータ用ã«ãƒ¡ãƒ¢ãƒªãƒ¼ã‚’割り当ã¦å‡ºæ¥ã¾ã›ã‚“。"
@@ -1295,11 +1590,11 @@ msgstr "ä¸æ˜Žãªãƒ­ã‚°ã‚¤ãƒ³ãƒ¬ãƒ™ãƒ« '%s'"
msgid "Unknown log domain '%s'"
msgstr "ä¸æ˜Žãªãƒ­ã‚°ãƒ‰ãƒ¡ã‚¤ãƒ³ '%s'"
-#: ../src/named-manager/nm-named-manager.c:343
+#: ../src/dns-manager/nm-dns-manager.c:343
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr "注記: libc リゾルãƒã¯ 3ã¤ä»¥ä¸Šã®ãƒãƒ¼ãƒ ã‚µãƒ¼ãƒãƒ¼ã‚’サãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“。"
-#: ../src/named-manager/nm-named-manager.c:345
+#: ../src/dns-manager/nm-dns-manager.c:345
msgid "The nameservers listed below may not be recognized."
msgstr "以下ã®ä¸€è¦§ã«ã‚ã‚‹ãƒãƒ¼ãƒ ã‚µãƒ¼ãƒãƒ¼ã¯èªè­˜ã•ã‚Œãªã„ã‹ã‚‚知れã¾ã›ã‚“。"
@@ -1308,7 +1603,7 @@ msgstr "以下ã®ä¸€è¦§ã«ã‚ã‚‹ãƒãƒ¼ãƒ ã‚µãƒ¼ãƒãƒ¼ã¯èªè­˜ã•ã‚Œãªã„ã‹ã‚‚
msgid "Auto %s"
msgstr "自動 %s"
-#: ../system-settings/plugins/ifcfg-rh/reader.c:3254
+#: ../system-settings/plugins/ifcfg-rh/reader.c:3256
msgid "System"
msgstr "システム"
diff --git a/po/kn.po b/po/kn.po
index be51ba0dec..54769baa77 100644
--- a/po/kn.po
+++ b/po/kn.po
@@ -7,11 +7,12 @@
msgid ""
msgstr ""
"Project-Id-Version: NetworkManager.po.master.kn\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-06 14:31+0530\n"
-"PO-Revision-Date: 2010-05-07 10:54+0530\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug."
+"cgi?product=NetworkManager&component=general\n"
+"POT-Creation-Date: 2010-06-28 08:52+0000\n"
+"PO-Revision-Date: 2010-07-26 12:55+0530\n"
"Last-Translator: Shankar Prasad <svenkate@redhat.com>\n"
-"Language-Team: kn-IN <>\n"
+"Language-Team: kn_IN <kde-i18n-doc@kde.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -141,19 +142,19 @@ msgstr "ಎಂದಿಗೂ ಬೇಡ"
#: ../cli/src/connections.c:602 ../cli/src/connections.c:605
#: ../cli/src/devices.c:388 ../cli/src/devices.c:513 ../cli/src/devices.c:539
#: ../cli/src/devices.c:540 ../cli/src/devices.c:541 ../cli/src/devices.c:542
-#: ../cli/src/devices.c:543 ../cli/src/settings.c:504
-#: ../cli/src/settings.c:544 ../cli/src/settings.c:643
-#: ../cli/src/settings.c:912 ../cli/src/settings.c:913
-#: ../cli/src/settings.c:915 ../cli/src/settings.c:917
-#: ../cli/src/settings.c:1042 ../cli/src/settings.c:1043
-#: ../cli/src/settings.c:1044 ../cli/src/settings.c:1123
-#: ../cli/src/settings.c:1124 ../cli/src/settings.c:1125
-#: ../cli/src/settings.c:1126 ../cli/src/settings.c:1127
-#: ../cli/src/settings.c:1128 ../cli/src/settings.c:1129
-#: ../cli/src/settings.c:1130 ../cli/src/settings.c:1131
-#: ../cli/src/settings.c:1132 ../cli/src/settings.c:1133
-#: ../cli/src/settings.c:1134 ../cli/src/settings.c:1135
-#: ../cli/src/settings.c:1210
+#: ../cli/src/devices.c:543 ../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
msgid "yes"
msgstr "ಹೌದà³"
@@ -161,19 +162,19 @@ msgstr "ಹೌದà³"
#: ../cli/src/connections.c:602 ../cli/src/connections.c:605
#: ../cli/src/devices.c:388 ../cli/src/devices.c:513 ../cli/src/devices.c:539
#: ../cli/src/devices.c:540 ../cli/src/devices.c:541 ../cli/src/devices.c:542
-#: ../cli/src/devices.c:543 ../cli/src/settings.c:504
-#: ../cli/src/settings.c:506 ../cli/src/settings.c:544
-#: ../cli/src/settings.c:643 ../cli/src/settings.c:912
-#: ../cli/src/settings.c:913 ../cli/src/settings.c:915
-#: ../cli/src/settings.c:917 ../cli/src/settings.c:1042
-#: ../cli/src/settings.c:1043 ../cli/src/settings.c:1044
-#: ../cli/src/settings.c:1123 ../cli/src/settings.c:1124
-#: ../cli/src/settings.c:1125 ../cli/src/settings.c:1126
-#: ../cli/src/settings.c:1127 ../cli/src/settings.c:1128
-#: ../cli/src/settings.c:1129 ../cli/src/settings.c:1130
-#: ../cli/src/settings.c:1131 ../cli/src/settings.c:1132
-#: ../cli/src/settings.c:1133 ../cli/src/settings.c:1134
-#: ../cli/src/settings.c:1135 ../cli/src/settings.c:1210
+#: ../cli/src/devices.c:543 ../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
msgid "no"
msgstr "ಇಲà³à²²"
@@ -262,7 +263,7 @@ msgstr "ಸಕà³à²°à²¿à²¯à²—ೊಂಡಿದೆ"
#: ../cli/src/connections.c:1102 ../cli/src/connections.c:1125
#: ../cli/src/connections.c:1158 ../cli/src/devices.c:224
#: ../cli/src/devices.c:514 ../cli/src/network-manager.c:92
-#: ../cli/src/network-manager.c:145 ../cli/src/settings.c:469
+#: ../cli/src/network-manager.c:145 ../cli/src/settings.c:473
msgid "unknown"
msgstr "ಗೊತà³à²¤à²¿à²²à³à²²à²¦"
@@ -1063,78 +1064,79 @@ msgstr "ದೋಷ: NetworkManager ನೊಂದಿಗೆ ಸಂಪರà³à²•à²¸à²¾
msgid "Success"
msgstr "ಯಶಸà³à²µà²¿à²¯à²¾à²—ಿದೆ"
-#: ../cli/src/settings.c:407
+#: ../cli/src/settings.c:411
#, c-format
msgid "%d (hex-ascii-key)"
msgstr "%d (hex-ascii-key)"
-#: ../cli/src/settings.c:409
+#: ../cli/src/settings.c:413
#, c-format
msgid "%d (104/128-bit passphrase)"
msgstr "%d (104/128-ಬಿಟà³â€Œ ಗà³à²ªà³à²¤à²µà²¾à²•à³à²¯à²¾à²‚ಶ)"
-#: ../cli/src/settings.c:412
+#: ../cli/src/settings.c:416
#, c-format
msgid "%d (unknown)"
msgstr "%d (ಅಜà³à²žà²¾à²¤)"
-#: ../cli/src/settings.c:438
+#: ../cli/src/settings.c:442
msgid "0 (unknown)"
msgstr "0 (ಗೊತà³à²¤à²¿à²°à²¦)"
-#: ../cli/src/settings.c:444
+#: ../cli/src/settings.c:448
msgid "any, "
msgstr "ಯಾವà³à²¦à²¾à²¦à²°à³‚, "
-#: ../cli/src/settings.c:446
+#: ../cli/src/settings.c:450
msgid "900 MHz, "
msgstr "900 MHz, "
-#: ../cli/src/settings.c:448
+#: ../cli/src/settings.c:452
msgid "1800 MHz, "
msgstr "1800 MHz, "
-#: ../cli/src/settings.c:450
+#: ../cli/src/settings.c:454
msgid "1900 MHz, "
msgstr "1900 MHz, "
-#: ../cli/src/settings.c:452
+#: ../cli/src/settings.c:456
msgid "850 MHz, "
msgstr "850 MHz, "
-#: ../cli/src/settings.c:454
+#: ../cli/src/settings.c:458
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../cli/src/settings.c:456
+#: ../cli/src/settings.c:460
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../cli/src/settings.c:458
+#: ../cli/src/settings.c:462
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../cli/src/settings.c:460
+#: ../cli/src/settings.c:464
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../cli/src/settings.c:462
+#: ../cli/src/settings.c:466
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../cli/src/settings.c:464
+#: ../cli/src/settings.c:468
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../cli/src/settings.c:466
+#: ../cli/src/settings.c:470
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../cli/src/settings.c:546 ../cli/src/settings.c:708
+#: ../cli/src/settings.c:554 ../cli/src/settings.c:721
msgid "auto"
msgstr "ಸà³à²µà²¯à²‚ಚಾಲಿತ"
-#: ../cli/src/settings.c:704 ../cli/src/settings.c:707 ../cli/src/utils.c:172
+#: ../cli/src/settings.c:716 ../cli/src/settings.c:719
+#: ../cli/src/settings.c:720 ../cli/src/utils.c:172
msgid "not set"
msgstr "ಹೊಂದಿಸಲಾಗಿಲà³à²²"
@@ -1157,8 +1159,8 @@ msgstr "'--terse' ಎಂಬ ಆಯà³à²•à³†à²—ೆ '--fields' ಅನà³à²¨à³ ಸ
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
msgstr ""
-"'--terse' ಎಂಬ ಆಯà³à²•à³†à²—ೆ ನಿಶà³à²šà²¿à²¤à²µà²¾à²¦ '--fields' ಆಯà³à²•à³†à²¯ ಮೌಲà³à²¯à²¦ ಅಗತà³à²¯à²µà²¿à²°à³à²¤à³à²¤à²¦à³†à²¯à³† ಹೊರತà³, '%s' "
-"ಎಂಬà³à²¦à²²à³à²²"
+"'--terse' ಎಂಬ ಆಯà³à²•à³†à²—ೆ ನಿಶà³à²šà²¿à²¤à²µà²¾à²¦ '--fields' ಆಯà³à²•à³†à²¯ ಮೌಲà³à²¯à²¦ ಅಗತà³à²¯à²µà²¿à²°à³à²¤à³à²¤à²¦à³†à²¯à³† ಹೊರತà³, '%"
+"s' ಎಂಬà³à²¦à²²à³à²²"
#: ../libnm-util/crypto.c:120
#, c-format
@@ -1501,6 +1503,97 @@ msgstr "ಗೂಢಲಿಪೀಕರಿಸಲಾದ ಕೀಲಿಯನà³à²¨à³ P
msgid "Could not allocate memory for PEM file data."
msgstr "PEM ಕಡತ ದತà³à²¤à²¾à²‚ಶಕà³à²•à²¾à²—ಿ ಮೆಮೊರಿಯನà³à²¨à³ ನಿಯೋಜಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²."
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
+msgid "Connection sharing via a protected WiFi network"
+msgstr "ಒಂದೠಸಂರಕà³à²·à²¿à²¤à²µà²¾à²¦ WiFi ಜಾಲಬಂಧದ ಮೂಲಕ ಸಂಪರà³à²• ಸಾಧಿಸà³à²µà²¿à²•à³†"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
+msgid "Connection sharing via an open WiFi network"
+msgstr "ಒಂದೠಮà³à²•à³à²¤à²µà²¾à²¦ WiFi ಜಾಲಬಂಧದ ಮೂಲಕ ಸಂಪರà³à²• ಸಾಧಿಸà³à²µà²¿à²•à³†"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
+msgid "Modify persistent system hostname"
+msgstr "ಸà³à²¥à²¿à²° ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ಆತಿಥೇಯ ಹೆಸರನà³à²¨à³ ಮಾರà³à²ªà²¡à²¿à²¸à²¿"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
+msgid "Modify system connections"
+msgstr "ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ಸಂಪರà³à²•à²—ಳನà³à²¨à³ ಮಾರà³à²ªà²¡à²¿à²¸à³"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
+msgid "System policy prevents modification of system settings"
+msgstr "ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ಸಂಪರà³à²•à²—ಳನà³à²¨à³ ಮಾರà³à²ªà²¡à²¿à²¸à²¦à²‚ತೆ ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ನಿಯಮಗಳೠತಡೆಯà³à²¤à³à²¤à²¿à²µà³†"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
+msgid "System policy prevents modification of the persistent system hostname"
+msgstr "ಸà³à²¥à²¿à²° ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ಆತಿಥೇಯ ಹೆಸರನà³à²¨à³ ಮಾರà³à²ªà²¡à²¿à²¸à²¦à²‚ತೆ ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ನಿಯಮಗಳೠತಡೆಯà³à²¤à³à²¤à²µà³†"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
+msgid "System policy prevents sharing connections via a protected WiFi network"
+msgstr "ಒಂದೠಸಂರಕà³à²·à²¿à²¤à²µà²¾à²¦ WiFi ಜಾಲಬಂಧದ ಮೂಲಕ ಸಂಪರà³à²• ಸಾಧಿಸದಂತೆ ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ನಿಯಮಗಳೠತಡೆಯà³à²¤à³à²¤à²µà³†"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
+msgid "System policy prevents sharing connections via an open WiFi network"
+msgstr "ಒಂದೠಮà³à²•à³à²¤à²µà²¾à²¦ WiFi ಜಾಲಬಂಧದ ಮೂಲಕ ಸಂಪರà³à²• ಸಾಧಿಸದಂತೆ ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ನಿಯಮಗಳೠತಡೆಯà³à²¤à³à²¤à²µà³†"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
+msgid "Allow control of network connections"
+msgstr "ಜಾಲಬಂಧ ಸಂಪರà³à²•à²—ಳನà³à²¨à³ ನಿಯಂತà³à²°à²¿à²¸à³à²µà³à²¦à²¨à³à²¨à³ ಅನà³à²®à²¤à²¿à²¸à²¿"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
+msgid "Allow use of user-specific connections"
+msgstr "ಬಳಕೆದಾರ-ನಿಶà³à²šà²¿à²¤ ಸಂಪರà³à²•à²—ಳನà³à²¨à³ ಬಳಸà³à²µà³à²¦à²¨à³à²¨à³ ಅನà³à²®à²¤à²¿à²¸à³"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
+msgid "Enable or disable WiFi devices"
+msgstr "WiFi ಸಾಧನಗಳನà³à²¨à³ ಶಕà³à²¤à²—ೊಳಿಸಿ ಅಥವ ಅಶಕà³à²¤à²—ೊಳಿಸಿ"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
+msgid "Enable or disable mobile broadband devices"
+msgstr "ಮೊಬೈಲೠಬà³à²°à²¾à²¡à³â€Œà²¬à³à²¯à²¾à²‚ಡೠಸಾಧನಗಳನà³à²¨à³ ಶಕà³à²¤à²—ೊಳಿಸಿ ಅಥವ ಅಶಕà³à²¤à²—ೊಳಿಸಿ"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+msgid "Enable or disable system networking"
+msgstr "ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ಜಾಲಬಂಧವನà³à²¨à³ ಶಕà³à²¤à²—ೊಳಿಸಿ ಅಥವ ಅಶಕà³à²¤à²—ೊಳಿಸಿ"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
+msgid ""
+"Put NetworkManager to sleep or wake it up (should only be used by system "
+"power management)"
+msgstr ""
+"NetworkManager ಅನà³à²¨à³ ನಿದà³à²°à²¾à²¸à³à²¥à²¿à²¤à²¿à²—ೆ ಅಥವ ಎಚà³à²šà²°à²¸à³à²¥à²¿à²¤à²¿à²—ೆ ಕಳà³à²¹à²¿à²¸à²¿ (ಇದನà³à²¨à³ ಕೇವಲ ವà³à²¯à²µà²¸à³à²¥à³†à²¯ "
+"ವಿದà³à²¯à³à²šà³à²›à²•à³à²¤à²¿ ನಿರà³à²µà²¹à²£à³†à²¯à²¿à²‚ದ ಮಾತà³à²° ಬಳಸಬೇಕà³)"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
+#| msgid "System policy prevents modification of system settings"
+msgid "System policy prevents control of network connections"
+msgstr "ಜಾಲಬಂಧ ಸಂಪರà³à²•à²—ಳನà³à²¨à³ ನಿಯಂತà³à²°à²¿à²¸à³à²µà³à²¦à²¨à³à²¨à³ ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ನಿಯಮಗಳೠತಡೆಯà³à²¤à³à²¤à²¿à²µà³†"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
+#| msgid "System policy prevents sharing connections via an open WiFi network"
+msgid "System policy prevents enabling or disabling WiFi devices"
+msgstr "WiFi ಸಾಧನವನà³à²¨à³ ಶಕà³à²¤ ಅಥವ ಅಶಕà³à²¤à²—ೊಳಿಸದಂತೆ ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ನಿಯಮಗಳೠತಡೆಯà³à²¤à³à²¤à²¿à²µà³†"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
+msgid "System policy prevents enabling or disabling mobile broadband devices"
+msgstr ""
+"ಮೊಬೈಲೠಬà³à²°à²¾à²¡à³â€Œà²¬à³à²¯à²¾à²‚ಡೠಸಾಧನಗಳನà³à²¨à³ ಶಕà³à²¤ ಅಥವ ಅಶಕà³à²¤à²—ೊಳಿಸದಂತೆ ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ನಿಯಮಗಳೠತಡೆಯà³à²¤à³à²¤à²¿à²µà³†"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
+#| msgid "System policy prevents modification of system settings"
+msgid "System policy prevents enabling or disabling system networking"
+msgstr "ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ಜಾಲಬಂಧವನà³à²¨à³ ಶಕà³à²¤ ಅಥವ ಅಶಕà³à²¤à²—ೊಳಿಸದಂತೆ ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ಪಾಲಿಸಿಯೠತಡೆಯà³à²¤à³à²¤à²¿à²¦à³†"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
+msgid "System policy prevents putting NetworkManager to sleep or waking it up"
+msgstr ""
+"NetworkManager ಅನà³à²¨à³ ನಿದà³à²°à²¾à²¸à³à²¥à²¿à²¤à²¿à²—ೆ ಅಥವ ಎಚà³à²šà²°à²¸à³à²¥à²¿à²¤à²¿à²—ೆ ಕಳà³à²¹à²¿à²¸à³à²µà³à²¦à²¨à³à²¨à³ ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ನಿಯಮವೠ"
+"ತಡೆಯà³à²¤à³à²¤à²¿à²¦à³†"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
+#| msgid "System policy prevents modification of system settings"
+msgid "System policy prevents use of user-specific connections"
+msgstr "ಬಳಕೆದಾರ-ನಿಶà³à²šà²¿à²¤ ಸಂಪರà³à²•à²—ಳನà³à²¨à³ ಬಳಸà³à²µà³à²¦à²‚ತೆ ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ನಿಯಮವೠತಡೆಯà³à²¤à³à²¤à²¿à²¦à³†"
+
#: ../src/nm-netlink-monitor.c:100 ../src/nm-netlink-monitor.c:231
#: ../src/nm-netlink-monitor.c:653
#, c-format
@@ -1552,7 +1645,7 @@ msgstr "ಕೊಂಡಿ ಕà³à²¯à²¾à²¶à³†à²¯à²¨à³à²¨à³ ಅಪà³â€Œà²¡à³‡à²Ÿà
msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ ಆಯà³à²•à³†. ಮಾನà³à²¯à²µà²¾à²¦ ಆಯà³à²•à³†à²—ಳಿಗಾಗಿ ದಯವಿಟà³à²Ÿà³ --help ಅನà³à²¨à³ ನೋಡಿ.\n"
-#: ../src/main.c:562
+#: ../src/main.c:568
#, c-format
msgid "%s. Please use --help to see a list of valid options.\n"
msgstr "%s. ಮಾನà³à²¯à²µà²¾à²¦ ಆಯà³à²•à³†à²—ಳಿಗಾಗಿ ದಯವಿಟà³à²Ÿà³ --help ಅನà³à²¨à³ ನೋಡಿ.\n"
@@ -1597,13 +1690,13 @@ msgstr "ಗೊತà³à²¤à²¿à²°à²¦ ದಾಖಲೆ ಮಟà³à²Ÿ '%s'"
msgid "Unknown log domain '%s'"
msgstr "ಗೊತà³à²¤à²¿à²°à²¦ ದಾಖಲೆ ಡೊಮೈನೠ'%s'"
-#: ../src/named-manager/nm-named-manager.c:343
+#: ../src/dns-manager/nm-dns-manager.c:350
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr ""
"ಸೂಚನೆ: libc ಪರಿಹಾರಕವà³(ರಿಸಾಲà³à²µà²°à³) ೩ ನಾಮಪರಿಚಾರಕಗಳಿಗಿಂತ ಹೆಚà³à²šà²¿à²¨à²µà³à²—ಳನà³à²¨à³ "
"ಬೆಂಬಲಿಸà³à²µà³à²¦à²¿à²²à³à²²."
-#: ../src/named-manager/nm-named-manager.c:345
+#: ../src/dns-manager/nm-dns-manager.c:352
msgid "The nameservers listed below may not be recognized."
msgstr "ಈ ಕೆಳಗೆ ಸೂಚಿಸಲಾದ ನಾಮಪರಿಚಾರಕಗಳನà³à²¨à³ ಗà³à²°à³à²¤à²¿à²¸à²²à²¾à²—ಿಲà³à²²."
@@ -1612,42 +1705,10 @@ msgstr "ಈ ಕೆಳಗೆ ಸೂಚಿಸಲಾದ ನಾಮಪರಿಚಾರ
msgid "Auto %s"
msgstr "ಸà³à²µà²¯à²‚ %s"
-#: ../system-settings/plugins/ifcfg-rh/reader.c:3256
+#: ../system-settings/plugins/ifcfg-rh/reader.c:3275
msgid "System"
msgstr "ವà³à²¯à²µà²¸à³à²¥à³†"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
-msgid "Connection sharing via a protected WiFi network"
-msgstr "ಒಂದೠಸಂರಕà³à²·à²¿à²¤à²µà²¾à²¦ WiFi ಜಾಲಬಂಧದ ಮೂಲಕ ಸಂಪರà³à²• ಸಾಧಿಸà³à²µà²¿à²•à³†"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
-msgid "Connection sharing via an open WiFi network"
-msgstr "ಒಂದೠಮà³à²•à³à²¤à²µà²¾à²¦ WiFi ಜಾಲಬಂಧದ ಮೂಲಕ ಸಂಪರà³à²• ಸಾಧಿಸà³à²µà²¿à²•à³†"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
-msgid "Modify persistent system hostname"
-msgstr "ಸà³à²¥à²¿à²° ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ಆತಿಥೇಯ ಹೆಸರನà³à²¨à³ ಮಾರà³à²ªà²¡à²¿à²¸à²¿"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
-msgid "Modify system connections"
-msgstr "ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ಸಂಪರà³à²•à²—ಳನà³à²¨à³ ಮಾರà³à²ªà²¡à²¿à²¸à³"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
-msgid "System policy prevents modification of system settings"
-msgstr "ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ಸಂಪರà³à²•à²—ಳನà³à²¨à³ ಮಾರà³à²ªà²¡à²¿à²¸à²¦à²‚ತೆ ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ನಿಯಮಗಳೠತಡೆಯà³à²¤à³à²¤à²¿à²µà³†"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
-msgid "System policy prevents modification of the persistent system hostname"
-msgstr "ಸà³à²¥à²¿à²° ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ಆತಿಥೇಯ ಹೆಸರನà³à²¨à³ ಮಾರà³à²ªà²¡à²¿à²¸à²¦à²‚ತೆ ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ನಿಯಮಗಳೠತಡೆಯà³à²¤à³à²¤à²µà³†"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
-msgid "System policy prevents sharing connections via a protected WiFi network"
-msgstr "ಒಂದೠಸಂರಕà³à²·à²¿à²¤à²µà²¾à²¦ WiFi ಜಾಲಬಂಧದ ಮೂಲಕ ಸಂಪರà³à²• ಸಾಧಿಸದಂತೆ ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ನಿಯಮಗಳೠತಡೆಯà³à²¤à³à²¤à²µà³†"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
-msgid "System policy prevents sharing connections via an open WiFi network"
-msgstr "ಒಂದೠಮà³à²•à³à²¤à²µà²¾à²¦ WiFi ಜಾಲಬಂಧದ ಮೂಲಕ ಸಂಪರà³à²• ಸಾಧಿಸದಂತೆ ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ನಿಯಮಗಳೠತಡೆಯà³à²¤à³à²¤à²µà³†"
-
#~ msgid "Type"
#~ msgstr "ಬಗೆ"
diff --git a/po/ko.po b/po/ko.po
index ad463ab1d2..e2cc426bca 100644
--- a/po/ko.po
+++ b/po/ko.po
@@ -1590,11 +1590,11 @@ msgstr "알려지지 ì•Šì€ ë¡œê·¸ 수준 '%s'"
msgid "Unknown log domain '%s'"
msgstr "알려지지 ì•Šì€ ë¡œê·¸ ì˜ì—­ '%s'"
-#: ../src/named-manager/nm-named-manager.c:343
+#: ../src/dns-manager/nm-dns-manager.c:343
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr "주ì˜: libc 주소 ê²€ìƒ‰ì€ 3개를 초과하는 네임서버를 지ì›í•˜ì§€ ì•Šì„ ìˆ˜ 있습니다."
-#: ../src/named-manager/nm-named-manager.c:345
+#: ../src/dns-manager/nm-dns-manager.c:345
msgid "The nameservers listed below may not be recognized."
msgstr "아래 ì—´ê±°ëœ ë„¤ìž„ì„œë²„ë¥¼ ì¸ì‹í•˜ì§€ 못할 수 있습니다."
diff --git a/po/lt.po b/po/lt.po
index 53092d20b4..2f58078c69 100644
--- a/po/lt.po
+++ b/po/lt.po
@@ -1,22 +1,1251 @@
# Lithuanian translation of NetworkManager.
-# Copyright (C) 2005-2006 Free Software Foundation, Inc.
+# Copyright (C) 2005-2010 Free Software Foundation, Inc.
# This file is distributed under the same license as the NetworkManager package.
-# Žygimantas BeruÄka <zygis@gnome.org>, 2005-2006, 2008.
-#
-#
+# Žygimantas BeruÄka <zygis@gnome.org>, 2005-2006, 2008, 2010.
+# Aurimas ÄŒernius <aurisc4@gmail.com>, 2010.
+# Rimas Kudelis <rq@akl.lt>, 2010.
msgid ""
msgstr ""
"Project-Id-Version: NetworkManager HEAD\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-03-12 13:21+0200\n"
-"PO-Revision-Date: 2009-03-12 13:21+0200\n"
-"Last-Translator: Žygimantas BeruÄka <zygis@gnome.org>\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=Networ"
+"kManager&component=general\n"
+"POT-Creation-Date: 2010-09-20 15:25+0000\n"
+"PO-Revision-Date: 2010-10-16 17:10+0300\n"
+"Last-Translator: Rimas Kudelis <rq@akl.lt>\n"
"Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
+"Language: lt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
+"Content-Transfer-Encoding: UTF-8\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%"
"100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Virtaal 0.5.2\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
+msgid "NAME"
+msgstr "PAVADINIMAS"
+
+#. 0
+#: ../cli/src/connections.c:61 ../cli/src/connections.c:76
+msgid "UUID"
+msgstr "UUID"
+
+#. 1
+#: ../cli/src/connections.c:62
+msgid "DEVICES"
+msgstr "ĮRENGINIAI"
+
+#. 2
+#: ../cli/src/connections.c:63 ../cli/src/connections.c:78
+msgid "SCOPE"
+msgstr "SRITIS"
+
+#. 3
+#: ../cli/src/connections.c:64
+msgid "DEFAULT"
+msgstr "NUMATYTASIS"
+
+#. 4
+#: ../cli/src/connections.c:65
+msgid "DBUS-SERVICE"
+msgstr "DBUS-TARNYBA"
+
+#. 5
+#: ../cli/src/connections.c:66
+msgid "SPEC-OBJECT"
+msgstr "SPEC-OBJECTAS"
+
+#. 6
+#: ../cli/src/connections.c:67
+msgid "VPN"
+msgstr "VPN"
+
+#. 1
+#. 0
+#. 1
+#: ../cli/src/connections.c:77 ../cli/src/devices.c:62 ../cli/src/devices.c:90
+msgid "TYPE"
+msgstr "TIPAS"
+
+#. 3
+#: ../cli/src/connections.c:79
+msgid "TIMESTAMP"
+msgstr "LAIKO-ŽYMA"
+
+#. 4
+#: ../cli/src/connections.c:80
+msgid "TIMESTAMP-REAL"
+msgstr "LAIKO-ŽYMA-TIKROJI"
+
+#. 5
+#: ../cli/src/connections.c:81
+msgid "AUTOCONNECT"
+msgstr "AUTOPRISIJUNGIMAS"
+
+#. 6
+#: ../cli/src/connections.c:82
+msgid "READONLY"
+msgstr "TIKSKAITOMA"
+
+#. 7
+#: ../cli/src/connections.c:83
+msgid "DBUS-PATH"
+msgstr "DBUS-KELIAS"
+
+#: ../cli/src/connections.c:159
+#, c-format
+msgid ""
+"Usage: nmcli con { COMMAND | help }\n"
+" COMMAND := { list | status | up | down }\n"
+"\n"
+" list [id <id> | uuid <id> | system | user]\n"
+" status\n"
+" up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout "
+"<timeout>]\n"
+" down id <id> | uuid <id>\n"
+msgstr ""
+"Naudojimas: nmcli con { KOMANDA | help }\n"
+" KOMANDA := { list | status | up | down }\n"
+"\n"
+" list [id <id> | uuid <id> | system | user]\n"
+" status\n"
+" up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout "
+"<timeout>]\n"
+" down id <id> | uuid <id>\n"
+
+#: ../cli/src/connections.c:199 ../cli/src/connections.c:540
+#, c-format
+msgid "Error: 'con list': %s"
+msgstr "Klaida: „con list“: %s"
+
+#: ../cli/src/connections.c:201 ../cli/src/connections.c:542
+#, c-format
+msgid "Error: 'con list': %s; allowed fields: %s"
+msgstr "Klaida: „con list“: %s; leidžiami laukai: %s"
+
+#: ../cli/src/connections.c:209
+msgid "Connection details"
+msgstr "Ryšio informacija"
+
+#: ../cli/src/connections.c:384 ../cli/src/connections.c:605
+msgid "system"
+msgstr "sisteminis"
+
+#: ../cli/src/connections.c:384 ../cli/src/connections.c:605
+msgid "user"
+msgstr "naudotojo"
+
+#: ../cli/src/connections.c:386
+msgid "never"
+msgstr "niekada"
+
+#. "CAPABILITIES"
+#. Print header
+#. "WIFI-PROPERTIES"
+#: ../cli/src/connections.c:387 ../cli/src/connections.c:388
+#: ../cli/src/connections.c:606 ../cli/src/connections.c:609
+#: ../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
+msgid "yes"
+msgstr "taip"
+
+#: ../cli/src/connections.c:387 ../cli/src/connections.c:388
+#: ../cli/src/connections.c:606 ../cli/src/connections.c:609
+#: ../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
+msgid "no"
+msgstr "ne"
+
+#: ../cli/src/connections.c:461 ../cli/src/connections.c:504
+msgid "System connections"
+msgstr "Sistemos ryšiai"
+
+#: ../cli/src/connections.c:466 ../cli/src/connections.c:517
+msgid "User connections"
+msgstr "Naudotojo ryšiai"
+
+#: ../cli/src/connections.c:478 ../cli/src/connections.c:1338
+#: ../cli/src/connections.c:1354 ../cli/src/connections.c:1363
+#: ../cli/src/connections.c:1374 ../cli/src/connections.c:1459
+#: ../cli/src/devices.c:962 ../cli/src/devices.c:972 ../cli/src/devices.c:1074
+#: ../cli/src/devices.c:1081
+#, c-format
+msgid "Error: %s argument is missing."
+msgstr "Klaida: trūksta argumento %s."
+
+#: ../cli/src/connections.c:491
+#, c-format
+msgid "Error: %s - no such connection."
+msgstr "Klaida: ryšio %s nėra."
+
+#: ../cli/src/connections.c:523 ../cli/src/connections.c:1387
+#: ../cli/src/connections.c:1477 ../cli/src/devices.c:785
+#: ../cli/src/devices.c:852 ../cli/src/devices.c:986 ../cli/src/devices.c:1087
+#, c-format
+msgid "Unknown parameter: %s\n"
+msgstr "Nežinomas parametras: %s\n"
+
+#: ../cli/src/connections.c:532
+#, c-format
+msgid "Error: no valid parameter specified."
+msgstr "Klaida: nenurodyta tinkamų parametrų."
+
+#: ../cli/src/connections.c:547 ../cli/src/connections.c:1580
+#: ../cli/src/devices.c:1293 ../cli/src/network-manager.c:359
+#, c-format
+msgid "Error: %s."
+msgstr "Klaida: %s"
+
+#: ../cli/src/connections.c:653
+#, c-format
+msgid "Error: 'con status': %s"
+msgstr "Klaida: „con status“: %s"
+
+#: ../cli/src/connections.c:655
+#, c-format
+msgid "Error: 'con status': %s; allowed fields: %s"
+msgstr "Klaida: „con status“: %s; leidžiami laukai: %s"
+
+#: ../cli/src/connections.c:662
+msgid "Active connections"
+msgstr "Aktyvūs ryšiai"
+
+#: ../cli/src/connections.c:1030
+#, c-format
+msgid "no active connection on device '%s'"
+msgstr "nėra aktyvaus ryšio įrenginyje „%s“"
+
+#: ../cli/src/connections.c:1038
+#, c-format
+msgid "no active connection or device"
+msgstr "nėra aktyvaus ryšio įrenginyje"
+
+#: ../cli/src/connections.c:1088
+#, c-format
+msgid "device '%s' not compatible with connection '%s'"
+msgstr "įrenginys „%s“ nesuderinamas su ryšiu „%s“"
+
+#: ../cli/src/connections.c:1090
+#, c-format
+msgid "no device found for connection '%s'"
+msgstr "nerastas įrenginys ryšiui „%s“"
+
+#: ../cli/src/connections.c:1101
+msgid "activating"
+msgstr "aktyvuojama"
+
+#: ../cli/src/connections.c:1103
+msgid "activated"
+msgstr "aktyvuota"
+
+#: ../cli/src/connections.c:1106 ../cli/src/connections.c:1129
+#: ../cli/src/connections.c:1162 ../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
+msgid "unknown"
+msgstr "nežinoma"
+
+#: ../cli/src/connections.c:1115
+msgid "VPN connecting (prepare)"
+msgstr "VPN jungiamasi (ruošiama)"
+
+#: ../cli/src/connections.c:1117
+msgid "VPN connecting (need authentication)"
+msgstr "VPN jungiamasi (reikia nustatyti tapatybÄ™)"
+
+#: ../cli/src/connections.c:1119
+msgid "VPN connecting"
+msgstr "VPN jungiamasi"
+
+#: ../cli/src/connections.c:1121
+msgid "VPN connecting (getting IP configuration)"
+msgstr "VPN jungiamasi (gaunama IP konfigūracija)"
+
+#: ../cli/src/connections.c:1123
+msgid "VPN connected"
+msgstr "VPN prisijungta"
+
+#: ../cli/src/connections.c:1125
+msgid "VPN connection failed"
+msgstr "VPN prisijungti nepavyko"
+
+#: ../cli/src/connections.c:1127
+msgid "VPN disconnected"
+msgstr "VPN atsijungta"
+
+#: ../cli/src/connections.c:1138
+msgid "unknown reason"
+msgstr "nežinoma priežastis"
+
+#: ../cli/src/connections.c:1140
+msgid "none"
+msgstr "jokia"
+
+#: ../cli/src/connections.c:1142
+msgid "the user was disconnected"
+msgstr "naudotojas buvo atjungtas"
+
+#: ../cli/src/connections.c:1144
+msgid "the base network connection was interrupted"
+msgstr "bazinis tinklo ryšys buvo pertrauktas"
+
+#: ../cli/src/connections.c:1146
+msgid "the VPN service stopped unexpectedly"
+msgstr "VPN tarnyba netikÄ—tai sustojo"
+
+#: ../cli/src/connections.c:1148
+msgid "the VPN service returned invalid configuration"
+msgstr "VPN tarnyba grąžino netinkamą konfigūraciją"
+
+#: ../cli/src/connections.c:1150
+msgid "the connection attempt timed out"
+msgstr "bandymo jungtis laikas baigÄ—si"
+
+#: ../cli/src/connections.c:1152
+msgid "the VPN service did not start in time"
+msgstr "VPN tarnyba nebuvo paleista laiku"
+
+#: ../cli/src/connections.c:1154
+msgid "the VPN service failed to start"
+msgstr "nepavyko paleisti VPN tarnybos"
+
+#: ../cli/src/connections.c:1156
+msgid "no valid VPN secrets"
+msgstr "nÄ—ra tinkamų VPN paslapÄių"
+
+#: ../cli/src/connections.c:1158
+msgid "invalid VPN secrets"
+msgstr "netinkamos VPN paslaptys"
+
+#: ../cli/src/connections.c:1160
+msgid "the connection was removed"
+msgstr "ryšys buvo pašalintas"
+
+#: ../cli/src/connections.c:1174
+#, c-format
+msgid "state: %s\n"
+msgstr "būsena: %s\n"
+
+#: ../cli/src/connections.c:1177 ../cli/src/connections.c:1203
+#, c-format
+msgid "Connection activated\n"
+msgstr "Ryšys aktyvuotas\n"
+
+#: ../cli/src/connections.c:1180
+#, c-format
+msgid "Error: Connection activation failed."
+msgstr "Klaida: nepavyko aktyvuoti ryšio."
+
+#: ../cli/src/connections.c:1199
+#, c-format
+msgid "state: %s (%d)\n"
+msgstr "būsena: %s (%d)\n"
+
+#: ../cli/src/connections.c:1209
+#, c-format
+msgid "Error: Connection activation failed: %s."
+msgstr "Klaida: nepavyko aktyvuoti ryšio: %s."
+
+#: ../cli/src/connections.c:1226 ../cli/src/devices.c:909
+#, c-format
+msgid "Error: Timeout %d sec expired."
+msgstr "Klaida: baigÄ—si %d sek. laikas."
+
+#: ../cli/src/connections.c:1269
+#, c-format
+msgid "Error: Connection activation failed: %s"
+msgstr "Klaida: nepavyko aktyvuoti ryšio: %s"
+
+#: ../cli/src/connections.c:1283
+#, c-format
+msgid "Error: Obtaining active connection for '%s' failed."
+msgstr "Klaida: nepavyko „%s“ gauti aktyvaus ryšio."
+
+#: ../cli/src/connections.c:1292
+#, c-format
+msgid "Active connection state: %s\n"
+msgstr "Aktyvaus ryšio būsena: %s\n"
+
+#: ../cli/src/connections.c:1293
+#, c-format
+msgid "Active connection path: %s\n"
+msgstr "Aktyvaus ryšio kelias: %s\n"
+
+#: ../cli/src/connections.c:1347 ../cli/src/connections.c:1468
+#, c-format
+msgid "Error: Unknown connection: %s."
+msgstr "Klaida: nežinomas ryšys: %s"
+
+#: ../cli/src/connections.c:1382 ../cli/src/devices.c:980
+#, c-format
+msgid "Error: timeout value '%s' is not valid."
+msgstr "Klaida: netinkama laukimo laiko reikšmė „%s“."
+
+#: ../cli/src/connections.c:1395 ../cli/src/connections.c:1485
+#, c-format
+msgid "Error: id or uuid has to be specified."
+msgstr "Klaida: id arba uuid turi būti nurodytas."
+
+#: ../cli/src/connections.c:1415
+#, c-format
+msgid "Error: No suitable device found: %s."
+msgstr "Klaida: nerastas tinkamas įrenginys: %s."
+
+#: ../cli/src/connections.c:1417
+#, c-format
+msgid "Error: No suitable device found."
+msgstr "Klaida: nerastas tinkamas įrenginys."
+
+#: ../cli/src/connections.c:1512
+#, c-format
+msgid "Warning: Connection not active\n"
+msgstr "Įspėjimas: ryšys neaktyvus\n"
+
+#: ../cli/src/connections.c:1569
+#, c-format
+msgid "Error: 'con' command '%s' is not valid."
+msgstr "Klaida: netinkama „con“ komanda „%s“."
+
+#: ../cli/src/connections.c:1605
+#, c-format
+msgid "Error: could not connect to D-Bus."
+msgstr "Klaida: nepavyko prisijungti prie D-Bus."
+
+#: ../cli/src/connections.c:1612
+#, c-format
+msgid "Error: Could not get system settings."
+msgstr "Klaida: nepavyko gauti sistemos nustatymų."
+
+#: ../cli/src/connections.c:1620
+#, c-format
+msgid "Error: Could not get user settings."
+msgstr "Klaida: nepavyko gauti naudotojo nustatymų."
+
+#: ../cli/src/connections.c:1630
+#, c-format
+msgid "Error: Can't obtain connections: settings services are not running."
+msgstr "Klaida: nepavyko gauti ryšių: nustatymų tarnybos neveikia."
+
+#. 0
+#. 9
+#: ../cli/src/devices.c:61 ../cli/src/devices.c:89 ../cli/src/devices.c:184
+msgid "DEVICE"
+msgstr "ĮRENGINYS"
+
+#. 1
+#. 4
+#. 0
+#: ../cli/src/devices.c:63 ../cli/src/devices.c:93
+#: ../cli/src/network-manager.c:36
+msgid "STATE"
+msgstr "BŪSENA"
+
+#: ../cli/src/devices.c:72
+msgid "GENERAL"
+msgstr "BENDRA"
+
+#. 0
+#: ../cli/src/devices.c:73
+msgid "CAPABILITIES"
+msgstr "GEBOS"
+
+#. 1
+#: ../cli/src/devices.c:74
+msgid "WIFI-PROPERTIES"
+msgstr "WIFI-SAVYBÄ–S"
+
+#. 2
+#: ../cli/src/devices.c:75
+msgid "AP"
+msgstr "AP"
+
+#. 3
+#: ../cli/src/devices.c:76
+msgid "WIRED-PROPERTIES"
+msgstr "LAIDINIO-TINKLO-SAVYBÄ–S"
+
+#. 4
+#: ../cli/src/devices.c:77
+msgid "IP4-SETTINGS"
+msgstr "IP4-PARAMETRAI"
+
+#. 5
+#: ../cli/src/devices.c:78
+msgid "IP4-DNS"
+msgstr "IP4-DNS"
+
+#. 6
+#: ../cli/src/devices.c:79
+#| msgid "IP4-SETTINGS"
+msgid "IP6-SETTINGS"
+msgstr "IP6-PARAMETRAI"
+
+#. 7
+#: ../cli/src/devices.c:80
+#| msgid "IP4-DNS"
+msgid "IP6-DNS"
+msgstr "IP6-DNS"
+
+#. 2
+#: ../cli/src/devices.c:91
+msgid "DRIVER"
+msgstr "TVARKYKLÄ–"
+
+#. 3
+#: ../cli/src/devices.c:92
+msgid "HWADDR"
+msgstr "APARATINIS-ADRESAS"
+
+#. 0
+#: ../cli/src/devices.c:102
+msgid "CARRIER-DETECT"
+msgstr "NEÅ LIO-APTIKIMAS"
+
+#. 1
+#: ../cli/src/devices.c:103
+msgid "SPEED"
+msgstr "SPARTA"
+
+#. 0
+#: ../cli/src/devices.c:112
+msgid "CARRIER"
+msgstr "NEÅ LYS"
+
+#. 0
+#: ../cli/src/devices.c:122
+msgid "WEP"
+msgstr "WEP"
+
+#. 1
+#: ../cli/src/devices.c:123
+msgid "WPA"
+msgstr "WPA"
+
+#. 2
+#: ../cli/src/devices.c:124
+msgid "WPA2"
+msgstr "WPA2"
+
+#. 3
+#: ../cli/src/devices.c:125
+msgid "TKIP"
+msgstr "TKIP"
+
+#. 4
+#: ../cli/src/devices.c:126
+msgid "CCMP"
+msgstr "CCMP"
+
+#. 0
+#: ../cli/src/devices.c:135 ../cli/src/devices.c:146
+msgid "ADDRESS"
+msgstr "ADRESAS"
+
+#. 1
+#: ../cli/src/devices.c:136 ../cli/src/devices.c:147
+msgid "PREFIX"
+msgstr "PRIEÅ DÄ–LIS"
+
+#. 2
+#: ../cli/src/devices.c:137 ../cli/src/devices.c:148
+msgid "GATEWAY"
+msgstr "Å LIUZAS"
+
+#. 0
+#: ../cli/src/devices.c:157 ../cli/src/devices.c:166
+msgid "DNS"
+msgstr "DNS"
+
+#. 0
+#: ../cli/src/devices.c:175
+msgid "SSID"
+msgstr "SSID"
+
+#. 1
+#: ../cli/src/devices.c:176
+msgid "BSSID"
+msgstr "BSSID"
+
+#. 2
+#: ../cli/src/devices.c:177
+msgid "MODE"
+msgstr "VEIKSENA"
+
+#. 3
+#: ../cli/src/devices.c:178
+msgid "FREQ"
+msgstr "DAŽNIS"
+
+#. 4
+#: ../cli/src/devices.c:179
+msgid "RATE"
+msgstr "DAŽNUMAS"
+
+#. 5
+#: ../cli/src/devices.c:180
+
+msgid "SIGNAL"
+msgstr "SIGNALAS"
+
+#. 6
+#: ../cli/src/devices.c:181
+msgid "SECURITY"
+msgstr "SAUGA"
+
+#. 7
+#: ../cli/src/devices.c:182
+msgid "WPA-FLAGS"
+msgstr "WPA-ŽYMOS"
+
+#. 8
+#: ../cli/src/devices.c:183
+msgid "RSN-FLAGS"
+msgstr "RSN-ŽYMOS"
+
+#. 10
+#: ../cli/src/devices.c:185
+msgid "ACTIVE"
+msgstr "AKTYVUS"
+
+#: ../cli/src/devices.c:208
+#, c-format
+msgid ""
+"Usage: nmcli dev { COMMAND | help }\n"
+"\n"
+" COMMAND := { status | list | disconnect | wifi }\n"
+"\n"
+" status\n"
+" list [iface <iface>]\n"
+" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
+" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+"\n"
+msgstr ""
+"Naudojimas: nmcli dev { KOMANDA | help }\n"
+"\n"
+" KOMANDA := { status | list | disconnect | wifi }\n"
+"\n"
+" status\n"
+" list [iface <iface>]\n"
+" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
+" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+"\n"
+
+#: ../cli/src/devices.c:228
+msgid "unmanaged"
+msgstr "nevaldomas"
+
+#: ../cli/src/devices.c:230
+msgid "unavailable"
+msgstr "neprieinamas"
+
+#: ../cli/src/devices.c:232 ../cli/src/network-manager.c:91
+msgid "disconnected"
+msgstr "atjungtas"
+
+#: ../cli/src/devices.c:234
+msgid "connecting (prepare)"
+msgstr "jungiamasi (ruošiama)"
+
+#: ../cli/src/devices.c:236
+msgid "connecting (configuring)"
+msgstr "jungiamasi (konfigūruojama)"
+
+#: ../cli/src/devices.c:238
+msgid "connecting (need authentication)"
+msgstr "jungiamasi (reikia nustatyti tapatybÄ™)"
+
+#: ../cli/src/devices.c:240
+msgid "connecting (getting IP configuration)"
+msgstr "jungiamasi (gaunama IP konfigūracija)"
+
+#: ../cli/src/devices.c:242 ../cli/src/network-manager.c:89
+msgid "connected"
+msgstr "prisijungta"
+
+#: ../cli/src/devices.c:244
+msgid "connection failed"
+msgstr "prisijungti nepavyko"
+
+#: ../cli/src/devices.c:267 ../cli/src/devices.c:424
+msgid "Unknown"
+msgstr "Nežinoma"
+
+#: ../cli/src/devices.c:299
+msgid "(none)"
+msgstr "(jokios)"
+
+#: ../cli/src/devices.c:324
+#, c-format
+msgid "%s: error converting IP4 address 0x%X"
+msgstr "%s: klaida konvertuojant IP4 adresÄ… 0x%X"
+
+#: ../cli/src/devices.c:393
+#, c-format
+msgid "%u MHz"
+msgstr "%u MHz"
+
+#: ../cli/src/devices.c:394
+#, c-format
+msgid "%u MB/s"
+msgstr "%u MB/s"
+
+#: ../cli/src/devices.c:403
+msgid "Encrypted: "
+msgstr "Å ifruota: "
+
+#: ../cli/src/devices.c:408
+msgid "WEP "
+msgstr "WEP"
+
+#: ../cli/src/devices.c:410
+msgid "WPA "
+msgstr "WPA"
+
+#: ../cli/src/devices.c:412
+msgid "WPA2 "
+msgstr "WPA2"
+
+#: ../cli/src/devices.c:415
+msgid "Enterprise "
+msgstr "Kompanija "
+
+#: ../cli/src/devices.c:424
+msgid "Ad-Hoc"
+msgstr "Ad-Hoc"
+
+#: ../cli/src/devices.c:424
+msgid "Infrastructure"
+msgstr "Infrastruktūra"
+
+#: ../cli/src/devices.c:486
+#, c-format
+msgid "Error: 'dev list': %s"
+msgstr "Klaida: „dev list“: %s"
+
+#: ../cli/src/devices.c:488
+#, c-format
+msgid "Error: 'dev list': %s; allowed fields: %s"
+msgstr "Klaida: „dev list“: %s; leidžiami laukai: %s"
+
+#: ../cli/src/devices.c:497
+msgid "Device details"
+msgstr "Įrenginio informacija"
+
+#: ../cli/src/devices.c:527 ../cli/src/devices.c:925
+msgid "(unknown)"
+msgstr "(nežinoma)"
+
+#: ../cli/src/devices.c:528
+msgid "unknown)"
+msgstr "nežinoma)"
+
+#: ../cli/src/devices.c:554
+#, c-format
+msgid "%u Mb/s"
+msgstr "%u Mb/s"
+
+#. Print header
+#. "WIRED-PROPERTIES"
+#: ../cli/src/devices.c:627
+msgid "on"
+msgstr "įjungta"
+
+#: ../cli/src/devices.c:627
+msgid "off"
+msgstr "išjungta"
+
+#: ../cli/src/devices.c:808
+#, c-format
+msgid "Error: 'dev status': %s"
+msgstr "Klaida: „dev status“: %s"
+
+#: ../cli/src/devices.c:810
+#, c-format
+msgid "Error: 'dev status': %s; allowed fields: %s"
+msgstr "Klaida: „dev status“: %s; leidžiami laukai: %s"
+
+#: ../cli/src/devices.c:817
+msgid "Status of devices"
+msgstr "Įrenginių būsena"
+
+#: ../cli/src/devices.c:845
+#, c-format
+msgid "Error: '%s' argument is missing."
+msgstr "Klaida: trūksta argumento „%s“."
+
+#: ../cli/src/devices.c:874 ../cli/src/devices.c:1013
+#: ../cli/src/devices.c:1136
+#, c-format
+msgid "Error: Device '%s' not found."
+msgstr "Klaida: nerastas įrenginys „%s“."
+
+#: ../cli/src/devices.c:897
+#, c-format
+msgid "Success: Device '%s' successfully disconnected."
+msgstr "Pavyko: sėkmingai atjungtas įrenginys „%s“."
+
+#: ../cli/src/devices.c:922
+#, c-format
+msgid "Error: Device '%s' (%s) disconnecting failed: %s"
+msgstr "Klaida: įrenginio „%s“ (%s) atjungti nepavyko: %s"
+
+#: ../cli/src/devices.c:930
+#, c-format
+msgid "Device state: %d (%s)\n"
+msgstr "Įrenginio būsena: %d (%s)\n"
+
+#: ../cli/src/devices.c:994
+#, c-format
+msgid "Error: iface has to be specified."
+msgstr "Klaida: turi būti nurodytas iface."
+
+#: ../cli/src/devices.c:1112
+#, c-format
+msgid "Error: 'dev wifi': %s"
+msgstr "Klaida: „dev wifi“: %s"
+
+#: ../cli/src/devices.c:1114
+#, c-format
+msgid "Error: 'dev wifi': %s; allowed fields: %s"
+msgstr "Klaida: „dev wifi“: %s; leidžiami laukai: %s"
+
+#: ../cli/src/devices.c:1121
+msgid "WiFi scan list"
+msgstr "WiFi skenavimo sąrašas"
+
+#: ../cli/src/devices.c:1156 ../cli/src/devices.c:1210
+#, c-format
+msgid "Error: Access point with hwaddr '%s' not found."
+msgstr "Klaida: nerastas prieigos taškas su hwaddr „%s“."
+
+#: ../cli/src/devices.c:1173
+#, c-format
+msgid "Error: Device '%s' is not a WiFi device."
+msgstr "Klaida: „%s“ nėra WiFi įrenginys "
+
+#: ../cli/src/devices.c:1237
+#, c-format
+msgid "Error: 'dev wifi' command '%s' is not valid."
+msgstr "Klaida: netinkama „dev wifi“ komanda „%s“."
+
+#: ../cli/src/devices.c:1284
+#, c-format
+msgid "Error: 'dev' command '%s' is not valid."
+msgstr "Klaida: netinkama „dev“ komanda „%s“."
+
+#: ../cli/src/network-manager.c:35
+msgid "RUNNING"
+msgstr "VEIKIA"
+
+#. 1
+#: ../cli/src/network-manager.c:37
+msgid "NET-ENABLED"
+msgstr "TINKLAS-ĮJUNGTAS"
+
+#. 2
+#: ../cli/src/network-manager.c:38
+msgid "WIFI-HARDWARE"
+msgstr "WIFI-APARATINĖ-ĮRANGA"
+
+#. 3
+#: ../cli/src/network-manager.c:39
+msgid "WIFI"
+msgstr "WIFI"
+
+#. 4
+#: ../cli/src/network-manager.c:40
+msgid "WWAN-HARDWARE"
+msgstr "WWAN-APARATINĖ-ĮRANGA"
+
+#. 5
+#: ../cli/src/network-manager.c:41
+msgid "WWAN"
+msgstr "WWAN"
+
+#: ../cli/src/network-manager.c:64
+#, 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 | 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 ""
+"Naudojimas: nmcli nm { KOMANDA | help }\n"
+"\n"
+" KOMANDA := { status | enable | sleep | wifi | wwan }\n"
+"\n"
+" status\n"
+" enable [on|off]\n"
+" sleep [on|off]\n"
+" wifi [on|off]\n"
+" wwan [on|off]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:85
+msgid "asleep"
+msgstr "miegantis"
+
+#: ../cli/src/network-manager.c:87
+msgid "connecting"
+msgstr "jungiamasi"
+
+#: ../cli/src/network-manager.c:128
+#, c-format
+msgid "Error: 'nm status': %s"
+msgstr "Klaida: „nm status“: %s"
+
+#: ../cli/src/network-manager.c:130
+#, c-format
+msgid "Error: 'nm status': %s; allowed fields: %s"
+msgstr "Klaida: „nm status“: %s; leidžiami laukai: %s"
+
+#: ../cli/src/network-manager.c:137
+msgid "NetworkManager status"
+msgstr "NetworkManager būsena"
+
+#. Print header
+#: ../cli/src/network-manager.c:144 ../cli/src/network-manager.c:145
+#: ../cli/src/network-manager.c:146 ../cli/src/network-manager.c:147
+#: ../cli/src/network-manager.c:154 ../cli/src/network-manager.c:247
+#: ../cli/src/network-manager.c:296 ../cli/src/network-manager.c:328
+msgid "enabled"
+msgstr "įjungta"
+
+#: ../cli/src/network-manager.c:144 ../cli/src/network-manager.c:145
+#: ../cli/src/network-manager.c:146 ../cli/src/network-manager.c:147
+#: ../cli/src/network-manager.c:154 ../cli/src/network-manager.c:247
+#: ../cli/src/network-manager.c:296 ../cli/src/network-manager.c:328
+msgid "disabled"
+msgstr "išjungta"
+
+#: ../cli/src/network-manager.c:152
+msgid "running"
+msgstr "veikia"
+
+#: ../cli/src/network-manager.c:152
+msgid "not running"
+msgstr "neveikia"
+
+#: ../cli/src/network-manager.c:175
+#, c-format
+#| msgid "Error: could not connect to D-Bus."
+msgid "Error: Couldn't connect to system bus: %s"
+msgstr "Klaida: nepavyko prisijungti prie sistemos magistralÄ—s: %s"
+
+#: ../cli/src/network-manager.c:186
+#, c-format
+#| msgid "Error: could not connect to D-Bus."
+msgid "Error: Couldn't create D-Bus object proxy."
+msgstr "Klaida: nepavyko sukurti D-Bus tarpinio objekto."
+
+#: ../cli/src/network-manager.c:192
+#, c-format
+#| msgid "Error: 'con list': %s"
+msgid "Error in sleep: %s"
+msgstr "Klaida užmigdant: %s"
+
+#: ../cli/src/network-manager.c:237 ../cli/src/network-manager.c:286
+#: ../cli/src/network-manager.c:318
+#, c-format
+msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
+msgstr "Klaida: „--fields“ reikÅ¡mÄ— „%s“ Äia netinkama; leidžiami laukai: %s"
+
+#: ../cli/src/network-manager.c:245
+#| msgid "WiFi enabled"
+msgid "Networking enabled"
+msgstr "Tinklas įjungtas"
+
+#: ../cli/src/network-manager.c:256
+#, c-format
+#| msgid "Error: invalid 'wwan' parameter: '%s'."
+msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
+msgstr ""
+"Klaida: netinkamas „enable“ parametras: „%s“; naudokite „true“ arba „false“."
+
+#: ../cli/src/network-manager.c:265
+#, c-format
+#| msgid "Error: Could not connect to NetworkManager."
+msgid "Error: Sleeping status is not exported by NetworkManager."
+msgstr "Klaida: „NetworkManager“ nepateikia informacijos apie miego būseną."
+
+#: ../cli/src/network-manager.c:273
+#, c-format
+#| msgid "Error: invalid 'wifi' parameter: '%s'."
+msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
+msgstr ""
+"Klaida: netinkamas „sleep“ parametras: „%s“; naudokite „true“ arba „false“."
+
+#: ../cli/src/network-manager.c:294
+msgid "WiFi enabled"
+msgstr "WiFi įjungtas"
+
+#: ../cli/src/network-manager.c:305
+#, c-format
+msgid "Error: invalid 'wifi' parameter: '%s'."
+msgstr "Klaida: netinkamas „wifi“ parametras: „%s“."
+
+#: ../cli/src/network-manager.c:326
+msgid "WWAN enabled"
+msgstr "WWAN įjungta"
+
+#: ../cli/src/network-manager.c:337
+#, c-format
+msgid "Error: invalid 'wwan' parameter: '%s'."
+msgstr "Klaida: netinkamas „wwan“ parametras: „%s“."
+
+#: ../cli/src/network-manager.c:348
+#, c-format
+msgid "Error: 'nm' command '%s' is not valid."
+msgstr "Klaida: netinkama „nm“ komanda „%s“."
+
+#: ../cli/src/nmcli.c:69
+#, 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] <field1,field2,...>|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 ""
+"Naudojimas: %s [PARINKTYS] OBJEKTAS { KOMANDA | help }\n"
+"\n"
+"PARINKTYS\n"
+" -t[erse] trumpa išvestis\n"
+" -p[retty] graži išvestis\n"
+" -m[ode] tabular|multiline išvedimo veiksena\n"
+" -f[fields] <field1,field2,...>|all|common nurodyti išvedamus laukus\n"
+" -e[scape] yes|no atlikti stulpelių skirtukų "
+"kaitÄ…\n"
+" -v[ersion] rodyti programos versijÄ…\n"
+" -h[elp] išvesti šią pagalbą\n"
+"\n"
+"OBJEKTAS\n"
+" nm NetworkManager būsena\n"
+" con NetworkManager ryšiai\n"
+" dev NetworkManager valdomi įrenginiai\n"
+"\n"
+
+#: ../cli/src/nmcli.c:113
+#, c-format
+msgid "Error: Object '%s' is unknown, try 'nmcli help'."
+msgstr "Klaida: nežinomas objektas „%s“, bandykite „nmcli help“."
+
+#: ../cli/src/nmcli.c:143
+#, c-format
+msgid "Error: Option '--terse' is specified the second time."
+msgstr "Klaida: parinktis „--terse“ nurodyta antrą kartą."
+
+#: ../cli/src/nmcli.c:148
+#, c-format
+msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
+msgstr ""
+"Klaida: parinktis „--terse“ yra tarpusavyje nesuderinama su „--pretty“."
+
+#: ../cli/src/nmcli.c:156
+#, c-format
+msgid "Error: Option '--pretty' is specified the second time."
+msgstr "Klaida: parinktis „--pretty“ nurodyta antrą kartą."
+
+#: ../cli/src/nmcli.c:161
+#, c-format
+msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
+msgstr ""
+"Klaida: parinktis „--pretty“ yra tarpusavyje nesuderinama su „--terse“."
+
+#: ../cli/src/nmcli.c:171 ../cli/src/nmcli.c:187
+#, c-format
+msgid "Error: missing argument for '%s' option."
+msgstr "Klaida: trÅ«ksta argumento parinkÄiai „%s“."
+
+#: ../cli/src/nmcli.c:180 ../cli/src/nmcli.c:196
+#, c-format
+msgid "Error: '%s' is not valid argument for '%s' option."
+msgstr "Klaida: „%s“ yra netinkamas argumentas parinkÄiai „%s“."
+
+#: ../cli/src/nmcli.c:203
+#, c-format
+msgid "Error: fields for '%s' options are missing."
+msgstr "Klaida: trūksta laukų parinktims „%s“."
+
+#: ../cli/src/nmcli.c:209
+#, c-format
+msgid "nmcli tool, version %s\n"
+msgstr "nmcli įrankis, versija %s\n"
+
+#: ../cli/src/nmcli.c:215
+#, c-format
+msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
+msgstr "Klaida: nežinoma parinktis „%s“, bandykite „nmcli -help“."
+
+#: ../cli/src/nmcli.c:234
+#, c-format
+msgid "Caught signal %d, shutting down..."
+msgstr "Gautas signalas %d, išjungiama..."
+
+#: ../cli/src/nmcli.c:259
+#, c-format
+msgid "Error: Could not connect to NetworkManager."
+msgstr "Klaida: nepavyko prisijungti prie NetworkManager."
+
+#: ../cli/src/nmcli.c:275
+msgid "Success"
+msgstr "Pavyko"
+
+#: ../cli/src/settings.c:411
+#, c-format
+msgid "%d (hex-ascii-key)"
+msgstr "%d (šešioliktainis ascii raktas)"
+
+#: ../cli/src/settings.c:413
+#, c-format
+msgid "%d (104/128-bit passphrase)"
+msgstr "%d (104/128 bitų slaptažodis)"
+
+#: ../cli/src/settings.c:416
+#, c-format
+msgid "%d (unknown)"
+msgstr "%d (nežinoma)"
+
+#: ../cli/src/settings.c:442
+msgid "0 (unknown)"
+msgstr "0 (nežinoma)"
+
+#: ../cli/src/settings.c:448
+msgid "any, "
+msgstr "bet koks, "
+
+#: ../cli/src/settings.c:450
+msgid "900 MHz, "
+msgstr "900 MHz, "
+
+#: ../cli/src/settings.c:452
+msgid "1800 MHz, "
+msgstr "1800 MHz, "
+
+#: ../cli/src/settings.c:454
+msgid "1900 MHz, "
+msgstr "1900 MHz, "
+
+#: ../cli/src/settings.c:456
+msgid "850 MHz, "
+msgstr "850 MHz, "
+
+#: ../cli/src/settings.c:458
+msgid "WCDMA 3GPP UMTS 2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 2100 MHz, "
+
+#: ../cli/src/settings.c:460
+msgid "WCDMA 3GPP UMTS 1800 MHz, "
+msgstr "WCDMA 3GPP UMTS 1800 MHz, "
+
+#: ../cli/src/settings.c:462
+msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
+
+#: ../cli/src/settings.c:464
+msgid "WCDMA 3GPP UMTS 800 MHz, "
+msgstr "WCDMA 3GPP UMTS 800 MHz, "
+
+#: ../cli/src/settings.c:466
+msgid "WCDMA 3GPP UMTS 850 MHz, "
+msgstr "WCDMA 3GPP UMTS 850 MHz, "
+
+#: ../cli/src/settings.c:468
+msgid "WCDMA 3GPP UMTS 900 MHz, "
+msgstr "WCDMA 3GPP UMTS 900 MHz, "
+
+#: ../cli/src/settings.c:470
+msgid "WCDMA 3GPP UMTS 1700 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700 MHz, "
+
+#: ../cli/src/settings.c:554 ../cli/src/settings.c:721
+msgid "auto"
+msgstr "automatinis"
+
+#: ../cli/src/settings.c:716 ../cli/src/settings.c:719
+#: ../cli/src/settings.c:720 ../cli/src/utils.c:172
+msgid "not set"
+msgstr "nenustatyta"
+
+#: ../cli/src/utils.c:124
+#, c-format
+msgid "field '%s' has to be alone"
+msgstr "laukas „%s“ turi būti vienintelis"
+
+#: ../cli/src/utils.c:127
+#, c-format
+msgid "invalid field '%s'"
+msgstr "netinkamas laukas „%s“"
+
+#: ../cli/src/utils.c:146
+#, c-format
+msgid "Option '--terse' requires specifying '--fields'"
+msgstr "Parinktis „--terse“ reikalauja nurodyti „--fields“"
+
+#: ../cli/src/utils.c:150
+#, c-format
+msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
+msgstr ""
+"Parinktis „--terse“ reikalauja konkreÄių parinkties „--fields“ reikÅ¡mių, ne "
+"„%s“"
#: ../libnm-util/crypto.c:120
#, c-format
@@ -105,8 +1334,9 @@ msgstr "Nepakanka atminties IV saugojimui."
msgid "IV contains non-hexadecimal digits."
msgstr "IV yra ne šešioliktainių skaitmenų."
-#: ../libnm-util/crypto.c:382 ../libnm-util/crypto_gnutls.c:143
-#: ../libnm-util/crypto_nss.c:169
+#: ../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
#, c-format
msgid "Private key cipher '%s' was unknown."
msgstr "Asmeninio rakto šifras „%s“ nežinomas."
@@ -126,71 +1356,106 @@ msgstr "Nepavyko nustatyti asmeninio rakto tipo."
msgid "Not enough memory to store decrypted private key."
msgstr "Nepakanka atminties iššifruoto asmeninio rakto saugojimui."
-#: ../libnm-util/crypto_gnutls.c:46
+#: ../libnm-util/crypto_gnutls.c:49
msgid "Failed to initialize the crypto engine."
msgstr "Nepavyko inicijuoti Å¡ifravimo posistemÄ—s."
-#: ../libnm-util/crypto_gnutls.c:90
+#: ../libnm-util/crypto_gnutls.c:93
#, c-format
msgid "Failed to initialize the MD5 engine: %s / %s."
msgstr "Nepavyko inicijuoti MD5 posistemÄ—s: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:152 ../libnm-util/crypto_nss.c:178
+#: ../libnm-util/crypto_gnutls.c:156
+#, c-format
+msgid "Invalid IV length (must be at least %zd)."
+msgstr "Netinkamas IV ilgis (turi būti bent %zd)."
+
+#: ../libnm-util/crypto_gnutls.c:165 ../libnm-util/crypto_nss.c:188
#, c-format
msgid "Not enough memory for decrypted key buffer."
msgstr "Nepakanka atminties iššifruoto rakto buferiui."
-#: ../libnm-util/crypto_gnutls.c:160
+#: ../libnm-util/crypto_gnutls.c:173
#, c-format
msgid "Failed to initialize the decryption cipher context: %s / %s."
msgstr "Nepavyko inicijuoti iššifravimo šifro konteksto: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:169
+#: ../libnm-util/crypto_gnutls.c:182
#, c-format
msgid "Failed to set symmetric key for decryption: %s / %s."
msgstr "Nepavyko iššifravimui nustatyti simetriško rakto: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:178
+#: ../libnm-util/crypto_gnutls.c:191
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
msgstr "Nepavyko iššifravimui nustatyti IV: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:187
+#: ../libnm-util/crypto_gnutls.c:200
#, c-format
msgid "Failed to decrypt the private key: %s / %s."
msgstr "Nepavyko iššifruoti asmeninio rakto: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:200
+#: ../libnm-util/crypto_gnutls.c:210 ../libnm-util/crypto_nss.c:267
+#, c-format
+msgid "Failed to decrypt the private key: unexpected padding length."
+msgstr "Nepavyko iššifruoti asmeninio rakto: netikėtas užpildo ilgis."
+
+#: ../libnm-util/crypto_gnutls.c:221 ../libnm-util/crypto_nss.c:278
#, c-format
msgid "Failed to decrypt the private key."
msgstr "Nepavyko iššifruoti asmeninio rakto."
-#: ../libnm-util/crypto_gnutls.c:235
+#: ../libnm-util/crypto_gnutls.c:286 ../libnm-util/crypto_nss.c:356
+#, c-format
+msgid "Could not allocate memory for encrypting."
+msgstr "Nepavyko išskirti atminties šifravimui."
+
+#: ../libnm-util/crypto_gnutls.c:294
+#, c-format
+msgid "Failed to initialize the encryption cipher context: %s / %s."
+msgstr "Nepavyko inicijuoti Å¡ifravimo Å¡ifro konteksto: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:303
+#, c-format
+msgid "Failed to set symmetric key for encryption: %s / %s."
+msgstr "Nepavyko šifravimui nustatyti simetriško rakto: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:313
+#, c-format
+msgid "Failed to set IV for encryption: %s / %s."
+msgstr "Nepavyko Å¡ifravimui nustatyti IV: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:322
+#, c-format
+msgid "Failed to encrypt the data: %s / %s."
+msgstr "Nepavyko šifruoti duomenų: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:362
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "Klaida inicijuojant liudijimo duomenis: %s"
-#: ../libnm-util/crypto_gnutls.c:257
+#: ../libnm-util/crypto_gnutls.c:384
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "Nepavyko iškoduoti liudijimo: %s"
-#: ../libnm-util/crypto_gnutls.c:281
+#: ../libnm-util/crypto_gnutls.c:408
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %s"
msgstr "Nepavyko inicializuoti PKCS#12 dekoderio: %s"
-#: ../libnm-util/crypto_gnutls.c:294
+#: ../libnm-util/crypto_gnutls.c:421
#, c-format
msgid "Couldn't decode PKCS#12 file: %s"
msgstr "Nepavyko iškoduoti PKCS#12 failo: %s"
-#: ../libnm-util/crypto_gnutls.c:306
+#: ../libnm-util/crypto_gnutls.c:433
#, c-format
msgid "Couldn't verify PKCS#12 file: %s"
msgstr "Nepavyko patvirtinti PKCS#12 failo: %s"
-#: ../libnm-util/crypto_nss.c:57
+#: ../libnm-util/crypto_nss.c:56
#, c-format
msgid "Failed to initialize the crypto engine: %d."
msgstr "Nepavyko inicijuoti Å¡ifravimo posistemÄ—s: %d."
@@ -200,107 +1465,276 @@ msgstr "Nepavyko inicijuoti Å¡ifravimo posistemÄ—s: %d."
msgid "Failed to initialize the MD5 context: %d."
msgstr "Nepavyko inicijuoti MD5 konteksto: %d."
-#: ../libnm-util/crypto_nss.c:186
+#: ../libnm-util/crypto_nss.c:179
+#, c-format
+msgid "Invalid IV length (must be at least %d)."
+msgstr "Netinkamas IV ilgis (turi būti bent %d)."
+
+#: ../libnm-util/crypto_nss.c:196
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "Nepavyko inicijuoti iššifravimo šifro lizdo."
-#: ../libnm-util/crypto_nss.c:196
+#: ../libnm-util/crypto_nss.c:206
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "Nepavyko iššifravimui nustatyti simetriško rakto."
-#: ../libnm-util/crypto_nss.c:206
+#: ../libnm-util/crypto_nss.c:216
#, c-format
msgid "Failed to set IV for decryption."
msgstr "Nepavyko iššifravimui nustatyti IV."
-#: ../libnm-util/crypto_nss.c:214
+#: ../libnm-util/crypto_nss.c:224
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "Nepavyko inicijuoti iššifravimo konteksto."
-#: ../libnm-util/crypto_nss.c:227
+#: ../libnm-util/crypto_nss.c:237
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "Nepavyko iššifruoti asmeninio rakto: %d."
-#: ../libnm-util/crypto_nss.c:239
+#: ../libnm-util/crypto_nss.c:245
+#, c-format
+msgid "Failed to decrypt the private key: decrypted data too large."
+msgstr "Nepavyko iššifruoti asmeninio rakto: iššifruoti duomenys per dideli."
+
+#: ../libnm-util/crypto_nss.c:256
#, c-format
msgid "Failed to finalize decryption of the private key: %d."
msgstr "Nepavyko baigti asmeninio rakto iššifravimo: %d."
-#: ../libnm-util/crypto_nss.c:284
+#: ../libnm-util/crypto_nss.c:364
+#, c-format
+msgid "Failed to initialize the encryption cipher slot."
+msgstr "Nepavyko inicijuoti Å¡ifravimo Å¡ifro lizdo."
+
+#: ../libnm-util/crypto_nss.c:372
+#, c-format
+msgid "Failed to set symmetric key for encryption."
+msgstr "Nepavyko šifravimui nustatyti simetriško rakto."
+
+#: ../libnm-util/crypto_nss.c:380
+#, c-format
+msgid "Failed to set IV for encryption."
+msgstr "Nepavyko Å¡ifravimui nustatyti IV."
+
+#: ../libnm-util/crypto_nss.c:388
+#, c-format
+msgid "Failed to initialize the encryption context."
+msgstr "Nepavyko inicijuoti Å¡ifravimo konteksto."
+
+#: ../libnm-util/crypto_nss.c:396
+#, c-format
+msgid "Failed to encrypt: %d."
+msgstr "Nepavyko Å¡ifruoti: %d."
+
+#: ../libnm-util/crypto_nss.c:404
+#, c-format
+msgid "Unexpected amount of data after encrypting."
+msgstr "Netikėtas duomenų kiekis po šifravimo."
+
+#: ../libnm-util/crypto_nss.c:447
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "Nepavyko iškoduoti liudijimo: %d"
-#: ../libnm-util/crypto_nss.c:319
+#: ../libnm-util/crypto_nss.c:482
#, c-format
msgid "Couldn't convert password to UCS2: %d"
msgstr "Nepavyko konvertuoti slaptažodžio į UCS-2: %d"
-#: ../libnm-util/crypto_nss.c:347
+#: ../libnm-util/crypto_nss.c:510
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %d"
msgstr "Nepavyko inicializuoti PKCS#12 dekoderio: %d"
-#: ../libnm-util/crypto_nss.c:356
+#: ../libnm-util/crypto_nss.c:519
#, c-format
msgid "Couldn't decode PKCS#12 file: %d"
msgstr "Nepavyko iškoduoti PKCS#12 failo: %d"
-#: ../libnm-util/crypto_nss.c:365
+#: ../libnm-util/crypto_nss.c:528
#, c-format
msgid "Couldn't verify PKCS#12 file: %d"
msgstr "Nepavyko patvirtinti PKCS#12 failo: %d"
-#: ../src/nm-netlink-monitor.c:194 ../src/nm-netlink-monitor.c:458
+#: ../libnm-util/crypto_nss.c:557
+msgid "Could not generate random data."
+msgstr "Nepavyko sugeneruoti atsitiktinių duomenų."
+
+#: ../libnm-util/nm-utils.c:1975
+#, c-format
+msgid "Not enough memory to make encryption key."
+msgstr "Nepakanka atminties Å¡ifravimo raktui sukurti."
+
+#: ../libnm-util/nm-utils.c:2085
+msgid "Could not allocate memory for PEM file creation."
+msgstr "Nepakanka atminties PEM failui sukurti."
+
+#: ../libnm-util/nm-utils.c:2097
+#, c-format
+msgid "Could not allocate memory for writing IV to PEM file."
+msgstr "Nepakanka atminties IV įrašyti į PEM failą."
+
+#: ../libnm-util/nm-utils.c:2109
+#, c-format
+msgid "Could not allocate memory for writing encrypted key to PEM file."
+msgstr "Nepakanka atminties šifruotam raktui įrašyti į PEM failą."
+
+#: ../libnm-util/nm-utils.c:2128
+#, c-format
+msgid "Could not allocate memory for PEM file data."
+msgstr "Nepakanka atminties PEM failo duomenims."
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
+msgid "Connection sharing via a protected WiFi network"
+msgstr "Dalijimasis ryšiu naudojant apsaugotą WiFi tinklą"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
+msgid "Connection sharing via an open WiFi network"
+msgstr "Dalijimasis ryšiu naudojant atvirą WiFi tinklą"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
+msgid "Modify persistent system hostname"
+msgstr "Keisti pastovų sistemos vardą"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
+msgid "Modify system connections"
+msgstr "Keisti sistemos ryšius"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
+msgid "System policy prevents modification of system settings"
+msgstr "Sistemos politika neleidžia keisti sistemos nustatymų"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
+msgid "System policy prevents modification of the persistent system hostname"
+msgstr "Sistemos politika neleidžia keisti įsiminto sistemos vardo"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
+msgid "System policy prevents sharing connections via a protected WiFi network"
+msgstr ""
+"Sistemos politika nelaidžia dalytis ryšiais naudojant apsaugotą WiFi tinklą"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
+msgid "System policy prevents sharing connections via an open WiFi network"
+msgstr ""
+"Sistemos politika neleidžia dalytis ryšiais naudojant atvirą WiFi tinklą"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
+msgid "Allow control of network connections"
+msgstr "Leisti valdyti tinklo ryšius"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
+msgid "Allow use of user-specific connections"
+msgstr "Leisti naudoti pasirinktinius naudotojo ryšius"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
+msgid "Enable or disable WiFi devices"
+msgstr "Įjungti arba išjungti WiFi įrenginius"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
+msgid "Enable or disable mobile broadband devices"
+msgstr "Ä®jungti arba iÅ¡jungti mobiliojo plaÄiajuosÄio ryÅ¡io įrenginius"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+msgid "Enable or disable system networking"
+msgstr "Įjungti arba išjungti sistemos prieigą prie tinklo"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
+msgid ""
+"Put NetworkManager to sleep or wake it up (should only be used by system "
+"power management)"
+msgstr ""
+"Užmigdyti arba pažadinti NetworkManager (tai turėtų naudoti tik sistemos "
+"energijos valdymo posistemÄ—)"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
+msgid "System policy prevents control of network connections"
+msgstr "Sistemos politika neleidžia valdyti tinklo ryšių"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
+msgid "System policy prevents enabling or disabling WiFi devices"
+msgstr "Sistemos politika neleidžia įjungti arba išjungti WiFi įrenginių"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
+msgid "System policy prevents enabling or disabling mobile broadband devices"
+msgstr ""
+"Sistemos politika neleidžia įjungti arba iÅ¡jungti mobiliojo plaÄiajuosÄio "
+"ryšio įrenginių"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
+msgid "System policy prevents enabling or disabling system networking"
+msgstr ""
+"Sistemos politika neleidžia įjungti arba išjungti sistemos prieigos prie "
+"tinklo"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
+msgid "System policy prevents putting NetworkManager to sleep or waking it up"
+msgstr "Sistemos politika neleidžia užmigdyti arba pažadinti NetworkManager"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
+msgid "System policy prevents use of user-specific connections"
+msgstr "Sistemos politika neleidžia naudoti pasirinktinių naudotojo ryšių"
+
+#: ../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 "klaida apdorojant netlink pranešimo: %s"
+msgstr "klaida apdorojant netlink pranešimą: %s"
-#: ../src/nm-netlink-monitor.c:255
+#: ../src/nm-netlink-monitor.c:214
+msgid "error occurred while waiting for data on socket"
+msgstr "laukiant lizde duomenų įvyko klaida"
+
+#: ../src/nm-netlink-monitor.c:254
#, c-format
-msgid "unable to allocate netlink handle for monitoring link status: %s"
-msgstr "nepavyko rezervuoti netlink valdiklio saito būsenos stebėjimui: %s"
+msgid "unable to connect to netlink for monitoring link status: %s"
+msgstr "nepavyko prisijungti prie netlink saito būsenai stebėti: %s"
#: ../src/nm-netlink-monitor.c:265
#, c-format
-msgid "unable to connect to netlink for monitoring link status: %s"
-msgstr "nepavyko prisijungti prie netlink saito būsenos stebėjimui: %s"
+msgid "unable to enable netlink handle credential passing: %s"
+msgstr "nepavyko įjungti netlink valdiklio įgaliojimams perduoti: %s"
-#: ../src/nm-netlink-monitor.c:273
+#: ../src/nm-netlink-monitor.c:291 ../src/nm-netlink-monitor.c:353
#, c-format
-msgid "unable to join netlink group for monitoring link status: %s"
-msgstr "nepavyko prisijungti prie netlink grupės saito būsenos stebėjimui: %s"
+msgid "unable to allocate netlink handle for monitoring link status: %s"
+msgstr "nepavyko rezervuoti netlink valdiklio saito būsenai stebėti: %s"
-#: ../src/nm-netlink-monitor.c:281
+#: ../src/nm-netlink-monitor.c:376
#, c-format
msgid "unable to allocate netlink link cache for monitoring link status: %s"
-msgstr "nepavyko rezervuoti netlink saito podėlio saito būsenos stebėjimui: %s"
+msgstr "nepavyko rezervuoti netlink saito podėlio saito būsenai stebėti: %s"
-#: ../src/nm-netlink-monitor.c:422
+#: ../src/nm-netlink-monitor.c:502
+#, c-format
+msgid "unable to join netlink group: %s"
+msgstr "nepavyko prisijungti prie netlink grupÄ—s: %s"
+
+#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642
#, c-format
msgid "error updating link cache: %s"
msgstr "klaida atnaujinant saito podėlį: %s"
-#: ../src/nm-netlink-monitor.c:488
-msgid "error occurred while waiting for data on socket"
-msgstr "laukiant lizde duomenų įvyko klaida"
-
-#: ../src/NetworkManager.c:293
+#: ../src/main.c:499
#, c-format
msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgstr ""
"Netinkama parinktis. Galimų parinkÄių sÄ…raÅ¡Ä… galite pamatyti naudodami "
"parametrÄ… --help.\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:94
+#: ../src/main.c:570
+#, c-format
+msgid "%s. Please use --help to see a list of valid options.\n"
+msgstr "%s. Naudokite --help, galimų parinkÄių sÄ…raÅ¡ui gauti.\n"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:328
msgid "# Created by NetworkManager\n"
msgstr "# Sukurta NetworkManager programos\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:100
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:344
#, c-format
msgid ""
"# Merged from %s\n"
@@ -309,19 +1743,204 @@ msgstr ""
"# Sulieta iš %s\n"
"\n"
-#: ../src/named-manager/nm-named-manager.c:256
+#: ../src/dhcp-manager/nm-dhcp-manager.c:284
+msgid "no usable DHCP client could be found."
+msgstr "nerastas veikiantis DHCP klientas."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+msgid "'dhclient' could be found."
+msgstr "nerastas „dhclient“."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:303
+msgid "'dhcpcd' could be found."
+msgstr "nerastas „dhcpcd“."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:311
+#, c-format
+msgid "unsupported DHCP client '%s'"
+msgstr "nepalaikomas DHCP klientas „%s“."
+
+#: ../src/logging/nm-logging.c:146
+#, c-format
+msgid "Unknown log level '%s'"
+msgstr "Nežinomas žurnalo vedimo lygis „%s“"
+
+#: ../src/logging/nm-logging.c:171
+#, c-format
+msgid "Unknown log domain '%s'"
+msgstr "Nežinoma žurnalo sritis „%s“"
+
+#: ../src/dns-manager/nm-dns-manager.c:384
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr ""
-"PASTABA: libc sprendiklis gali nepalaikyti daugiau nei 3 vardų serverių."
+"PASTABA: libc adresų nustatymo funkcija gali nepalaikyti daugiau nei 3 vardų "
+"serverių."
-#: ../src/named-manager/nm-named-manager.c:258
+#: ../src/dns-manager/nm-dns-manager.c:386
msgid "The nameservers listed below may not be recognized."
msgstr "Žemiau pateikti vardų serveriai gali būti neatpažinti."
-#: ../system-settings/src/nm-default-wired-connection.c:182
+#: ../src/system-settings/nm-default-wired-connection.c:157
#, c-format
msgid "Auto %s"
msgstr "Automatinis %s"
-#~ msgid "Not enough memory to create private key decryption key."
-#~ msgstr "Nepakanka atminties asmeninio rakto iššifravimo rakto sukūrimui."
+#: ../system-settings/plugins/ifcfg-rh/reader.c:3412
+#: ../system-settings/plugins/ifnet/connection_parser.c:49
+msgid "System"
+msgstr "Sistema"
+
+#~ msgid "Type"
+#~ msgstr "Tipas"
+
+#~ msgid "Name"
+#~ msgstr "Pavadinimas"
+
+#~ msgid "User connections:\n"
+#~ msgstr "Naudotojo ryšiai:\n"
+
+#~ msgid "System-wide connections"
+#~ msgstr "Sistemos ryšiai"
+
+#~ msgid "Default"
+#~ msgstr "Numatyta"
+
+#~ msgid "Service"
+#~ msgstr "Tarnyba"
+
+#~ msgid "%s, %s, Freq %d MHz, Rate %d Mb/s, Strength %d"
+#~ msgstr "%s, %s, dažnis %d MHz, sparta %d Mb/s, stiprumas %d"
+
+#~ msgid "Device"
+#~ msgstr "Įrenginys"
+
+#~ msgid "Driver"
+#~ msgstr "TvarkyklÄ—"
+
+#~ msgid "State"
+#~ msgstr "BÅ«sena"
+
+#~ msgid "HW Address"
+#~ msgstr "Aparatinis adresas"
+
+#~ msgid ""
+#~ "\n"
+#~ " Capabilities:\n"
+#~ msgstr ""
+#~ "\n"
+#~ "GalimybÄ—s:\n"
+
+#~ msgid "Carrier Detect"
+#~ msgstr "Perdavimo aptikimas"
+
+#~ msgid "Speed"
+#~ msgstr "Sparta"
+
+#~ msgid ""
+#~ "\n"
+#~ " Wireless Properties\n"
+#~ msgstr ""
+#~ "\n"
+#~ " Belaidžio ryšio savybės\n"
+
+#~ msgid "WEP Encryption"
+#~ msgstr "WEP Å¡ifravimas"
+
+#~ msgid "WPA Encryption"
+#~ msgstr "WPA Å¡ifravimas"
+
+#~ msgid "WPA2 Encryption"
+#~ msgstr "WPA2 Å¡ifravimas"
+
+#~ msgid "TKIP cipher"
+#~ msgstr "TKIP Å¡ifras"
+
+#~ msgid "CCMP cipher"
+#~ msgstr "CCMP Å¡ifras"
+
+#~ msgid ""
+#~ "\n"
+#~ " Wireless Access Points %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ " Belaidžiai prieigos taškai %s\n"
+
+#~ msgid "(* = current AP)"
+#~ msgstr "(* = dabartinis prieigos taškas)"
+
+#~ msgid ""
+#~ "\n"
+#~ " Wired Properties\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Laidinio ryšio savybės\n"
+
+#~ msgid "Carrier"
+#~ msgstr "Perdavimas"
+
+#~ msgid ""
+#~ "\n"
+#~ " IPv4 Settings:\n"
+#~ msgstr ""
+#~ "\n"
+#~ " IPv4 nustatymai:\n"
+
+#~ msgid "Address"
+#~ msgstr "Adresas"
+
+#~ msgid "Prefix"
+#~ msgstr "Priešdėlis"
+
+#~ msgid "Gateway"
+#~ msgstr "Å liuzas"
+
+#~ msgid "Device:"
+#~ msgstr "Įrenginys:"
+
+#~ msgid "Error: hwaddr has to be specified."
+#~ msgstr "Klaida: turi būti nurodytas hwaddr."
+
+#~ msgid "AP parameters"
+#~ msgstr "Prieigos taško parametrai"
+
+#~ msgid "Frequency:"
+#~ msgstr "Dažnis:"
+
+#~ msgid "Mode:"
+#~ msgstr "Veiksena:"
+
+#~ msgid "Ad-hoc"
+#~ msgstr "Ad-hoc"
+
+#~ msgid "Maximal bitrate:"
+#~ msgstr "Didžiausias galimas bitų dažnis:"
+
+#~ msgid "Strength:"
+#~ msgstr "Stiprumas:"
+
+#~ msgid "Flags:"
+#~ msgstr "Požymiai:"
+
+#~ msgid "privacy"
+#~ msgstr "privatumas"
+
+#~ msgid "WPA flags:"
+#~ msgstr "WPA požymiai:"
+
+#~ msgid "RSN flags:"
+#~ msgstr "RSN požymiai:"
+
+#~ msgid "NM running:"
+#~ msgstr "NM veikimas:"
+
+#~ msgid "NM state:"
+#~ msgstr "NM būsena"
+
+#~ msgid "NM wireless hardware:"
+#~ msgstr "NM belaidė įranga:"
+
+#~ msgid "NM wireless:"
+#~ msgstr "NM belaidis:"
+
+#~ msgid "NM WWAN hardware:"
+#~ msgstr "NM WWAN įranga:"
diff --git a/po/ml.po b/po/ml.po
index 6c1e92f7ce..0d9796f9fe 100644
--- a/po/ml.po
+++ b/po/ml.po
@@ -1586,11 +1586,11 @@ msgstr "അപരിചതമായ ലോഗൠലവലàµâ€ '%s'"
msgid "Unknown log domain '%s'"
msgstr "അപരിചിതമായ ലോഗൠഡൊമെയിനàµâ€ '%s'"
-#: ../src/named-manager/nm-named-manager.c:343
+#: ../src/dns-manager/nm-dns-manager.c:343
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr "à´•àµà´±à´¿à´ªàµà´ªàµàµ: libc റിസോളàµâ€à´µà´°àµâ€ 3 നെയിംസരàµâ€à´µà´±àµà´•à´³à´¿à´²àµâ€ കൂടതലàµâ€ പിനàµà´¤àµà´£à´¯àµà´•àµà´•àµà´¨àµà´¨à´¤à´²àµà´²."
-#: ../src/named-manager/nm-named-manager.c:345
+#: ../src/dns-manager/nm-dns-manager.c:345
msgid "The nameservers listed below may not be recognized."
msgstr "താഴെ പറഞàµà´žà´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨ നെയിംസരàµâ€à´µà´±àµà´•à´³àµâ€ തിരിചàµà´šà´±à´¿à´¯à´ªàµà´ªàµ†à´Ÿàµà´¨àµà´¨à´µà´¯à´²àµà´²."
diff --git a/po/mr.po b/po/mr.po
index 33cb1976e8..67335ad2e3 100644
--- a/po/mr.po
+++ b/po/mr.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: mr\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=NetworkManager&component=general\n"
-"POT-Creation-Date: 2010-04-30 03:24+0000\n"
-"PO-Revision-Date: 2010-05-10 13:46+0530\n"
+"POT-Creation-Date: 2010-06-28 08:52+0000\n"
+"PO-Revision-Date: 2010-07-26 18:24+0530\n"
"Last-Translator: Sandeep Shedmake <sshedmak@redhat.com>\n"
"Language-Team: Marathi <fedora-trans-mr@redhat.com>\n"
"MIME-Version: 1.0\n"
@@ -18,7 +18,76 @@ msgstr ""
"X-Generator: KBabel 1.11.4\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
-#: ../cli/src/connections.c:86
+#: ../cli/src/connections.c:59 ../cli/src/connections.c:74
+#: ../cli/src/devices.c:85 ../cli/src/devices.c:98 ../cli/src/devices.c:108
+#: ../cli/src/devices.c:118 ../cli/src/devices.c:131 ../cli/src/devices.c:142
+#: ../cli/src/devices.c:152
+msgid "NAME"
+msgstr "NAME"
+
+#. 0
+#: ../cli/src/connections.c:60 ../cli/src/connections.c:75
+msgid "UUID"
+msgstr "UUID"
+
+#. 1
+#: ../cli/src/connections.c:61
+msgid "DEVICES"
+msgstr "DEVICES"
+
+#. 2
+#: ../cli/src/connections.c:62 ../cli/src/connections.c:77
+msgid "SCOPE"
+msgstr "SCOPE"
+
+#. 3
+#: ../cli/src/connections.c:63
+msgid "DEFAULT"
+msgstr "DEFAULT"
+
+#. 4
+#: ../cli/src/connections.c:64
+msgid "DBUS-SERVICE"
+msgstr "DBUS-SERVICE"
+
+#. 5
+#: ../cli/src/connections.c:65
+msgid "SPEC-OBJECT"
+msgstr "SPEC-OBJECT"
+
+#. 6
+#: ../cli/src/connections.c:66
+msgid "VPN"
+msgstr "VPN"
+
+#. 1
+#. 0
+#. 1
+#: ../cli/src/connections.c:76 ../cli/src/devices.c:61 ../cli/src/devices.c:87
+msgid "TYPE"
+msgstr "TYPE"
+
+#. 3
+#: ../cli/src/connections.c:78
+msgid "TIMESTAMP"
+msgstr "TIMESTAMP"
+
+#. 4
+#: ../cli/src/connections.c:79
+msgid "TIMESTAMP-REAL"
+msgstr "TIMESTAMP-REAL"
+
+#. 5
+#: ../cli/src/connections.c:80
+msgid "AUTOCONNECT"
+msgstr "AUTOCONNECT"
+
+#. 6
+#: ../cli/src/connections.c:81
+msgid "READONLY"
+msgstr "READONLY"
+
+#: ../cli/src/connections.c:157
#, c-format
msgid ""
"Usage: nmcli con { COMMAND | help }\n"
@@ -39,310 +108,514 @@ msgstr ""
"<timeout>]\n"
" down id <id> | uuid <id>\n"
-#: ../cli/src/connections.c:158
-msgid "Connections"
-msgstr "जोडणà¥à¤¯à¤¾"
-
-#: ../cli/src/connections.c:158 ../cli/src/connections.c:160
-#: ../cli/src/connections.c:196 ../cli/src/connections.c:198
-#: ../cli/src/connections.c:205 ../cli/src/connections.c:207
-#: ../cli/src/devices.c:298 ../cli/src/devices.c:458 ../cli/src/devices.c:460
-msgid "Type"
-msgstr "पà¥à¤°à¤•à¤¾à¤°"
-
-#: ../cli/src/connections.c:158 ../cli/src/connections.c:160
-#: ../cli/src/connections.c:196 ../cli/src/connections.c:198
-#: ../cli/src/connections.c:205 ../cli/src/connections.c:207
-#: ../cli/src/connections.c:297 ../cli/src/connections.c:299
-msgid "UUID"
-msgstr "UUID"
-
-#: ../cli/src/connections.c:158 ../cli/src/connections.c:160
-#: ../cli/src/connections.c:196 ../cli/src/connections.c:198
-#: ../cli/src/connections.c:205 ../cli/src/connections.c:207
-#: ../cli/src/connections.c:297 ../cli/src/connections.c:299
-msgid "Name"
-msgstr "नाव"
-
-#: ../cli/src/connections.c:163
+#: ../cli/src/connections.c:197 ../cli/src/connections.c:536
#, c-format
-msgid "System connections:\n"
-msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€ जोडणà¥à¤¯à¤¾:\n"
+msgid "Error: 'con list': %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'con list': %s"
-#: ../cli/src/connections.c:167
+#: ../cli/src/connections.c:199 ../cli/src/connections.c:538
#, c-format
-msgid "User connections:\n"
-msgstr "वापरकरà¥à¤¤à¤¾à¤šà¥à¤¯à¤¾ जोडणà¥à¤¯à¤¾:\n"
+msgid "Error: 'con list': %s; allowed fields: %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'con list': %s; सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
-#: ../cli/src/connections.c:178 ../cli/src/connections.c:967
-#: ../cli/src/connections.c:983 ../cli/src/connections.c:992
-#: ../cli/src/connections.c:1003 ../cli/src/connections.c:1085
-#: ../cli/src/devices.c:604 ../cli/src/devices.c:614 ../cli/src/devices.c:699
-#: ../cli/src/devices.c:785 ../cli/src/devices.c:792
+#: ../cli/src/connections.c:207
+msgid "Connection details"
+msgstr "जोडणीचे तपशील"
+
+#: ../cli/src/connections.c:381 ../cli/src/connections.c:601
+msgid "system"
+msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€"
+
+#: ../cli/src/connections.c:381 ../cli/src/connections.c:601
+msgid "user"
+msgstr "वापरकरà¥à¤¤à¤¾"
+
+#: ../cli/src/connections.c:383
+msgid "never"
+msgstr "कधिच नाही"
+
+#. "CAPABILITIES"
+#. Print header
+#. "WIFI-PROPERTIES"
+#: ../cli/src/connections.c:384 ../cli/src/connections.c:385
+#: ../cli/src/connections.c:602 ../cli/src/connections.c:605
+#: ../cli/src/devices.c:388 ../cli/src/devices.c:513 ../cli/src/devices.c:539
+#: ../cli/src/devices.c:540 ../cli/src/devices.c:541 ../cli/src/devices.c:542
+#: ../cli/src/devices.c:543 ../cli/src/settings.c: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
+msgid "yes"
+msgstr "होय"
+
+#: ../cli/src/connections.c:384 ../cli/src/connections.c:385
+#: ../cli/src/connections.c:602 ../cli/src/connections.c:605
+#: ../cli/src/devices.c:388 ../cli/src/devices.c:513 ../cli/src/devices.c:539
+#: ../cli/src/devices.c:540 ../cli/src/devices.c:541 ../cli/src/devices.c:542
+#: ../cli/src/devices.c:543 ../cli/src/settings.c: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
+msgid "no"
+msgstr "नाही"
+
+#: ../cli/src/connections.c:457 ../cli/src/connections.c:500
+msgid "System connections"
+msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€ जोडणी"
+
+#: ../cli/src/connections.c:462 ../cli/src/connections.c:513
+msgid "User connections"
+msgstr "वापरकरà¥à¤¤à¥à¤¯à¤¾à¤šà¥€ जोडणी"
+
+#: ../cli/src/connections.c:474 ../cli/src/connections.c:1334
+#: ../cli/src/connections.c:1350 ../cli/src/connections.c:1359
+#: ../cli/src/connections.c:1370 ../cli/src/connections.c:1452
+#: ../cli/src/devices.c:864 ../cli/src/devices.c:874 ../cli/src/devices.c:973
+#: ../cli/src/devices.c:980
#, c-format
msgid "Error: %s argument is missing."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: %s घटक आढळले नाही."
-#: ../cli/src/connections.c:189
+#: ../cli/src/connections.c:487
#, c-format
msgid "Error: %s - no such connection."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: %s - यापà¥à¤°à¤•à¤¾à¤°à¤šà¥€ जोडणी आढळली नाही."
-#: ../cli/src/connections.c:196
-msgid "System-wide connections"
-msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€-भर जोडणà¥à¤¯à¤¾"
-
-#: ../cli/src/connections.c:205
-msgid "User connections"
-msgstr "वापरकरà¥à¤¤à¥à¤¯à¤¾à¤šà¥€ जोडणी"
-
-#: ../cli/src/connections.c:212 ../cli/src/connections.c:1016
-#: ../cli/src/connections.c:1103 ../cli/src/devices.c:446
-#: ../cli/src/devices.c:494 ../cli/src/devices.c:628 ../cli/src/devices.c:706
-#: ../cli/src/devices.c:798
+#: ../cli/src/connections.c:519 ../cli/src/connections.c:1383
+#: ../cli/src/connections.c:1470 ../cli/src/devices.c:687
+#: ../cli/src/devices.c:754 ../cli/src/devices.c:888 ../cli/src/devices.c:986
#, c-format
msgid "Unknown parameter: %s\n"
msgstr "अपरिचीत घटक: %s\n"
-#: ../cli/src/connections.c:221
+#: ../cli/src/connections.c:528
#, c-format
msgid "Error: no valid parameter specified."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: वैध घटक निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ नाही."
-#. FIXME: Fix the output
-#: ../cli/src/connections.c:268 ../cli/src/devices.c:302
-#: ../cli/src/devices.c:321 ../cli/src/devices.c:353 ../cli/src/devices.c:355
-#: ../cli/src/devices.c:357 ../cli/src/devices.c:359 ../cli/src/devices.c:361
-msgid "yes"
-msgstr "होय"
+#: ../cli/src/connections.c:543 ../cli/src/connections.c:1572
+#: ../cli/src/devices.c:1192 ../cli/src/network-manager.c:274
+#, c-format
+msgid "Error: %s."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: %s."
-#: ../cli/src/connections.c:268 ../cli/src/devices.c:304
-msgid "no"
-msgstr "नाही"
+#: ../cli/src/connections.c:649
+#, c-format
+msgid "Error: 'con status': %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'con status': %s"
+
+#: ../cli/src/connections.c:651
+#, c-format
+msgid "Error: 'con status': %s; allowed fields: %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'con status': %s; सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
-#: ../cli/src/connections.c:297
+#: ../cli/src/connections.c:658
msgid "Active connections"
msgstr "सकà¥à¤°à¤¿à¤¯ जोडणी"
-#: ../cli/src/connections.c:297 ../cli/src/connections.c:299
-#: ../cli/src/devices.c:302 ../cli/src/devices.c:304
-msgid "Default"
-msgstr "पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¥€à¤¤"
-
-#: ../cli/src/connections.c:297 ../cli/src/connections.c:299
-msgid "Service"
-msgstr "सरà¥à¤µà¥à¤¹à¤¿à¤¸à¥"
-
-#: ../cli/src/connections.c:297 ../cli/src/connections.c:299
-msgid "Devices"
-msgstr "साधणे"
-
-#: ../cli/src/connections.c:659
+#: ../cli/src/connections.c:1026
#, c-format
msgid "no active connection on device '%s'"
msgstr "साधण '%s' वरील सकà¥à¤°à¤¿à¤¯ जोडणी आढळली नाही"
-#: ../cli/src/connections.c:667
+#: ../cli/src/connections.c:1034
#, c-format
msgid "no active connection or device"
msgstr "सकà¥à¤°à¤¿à¤¯ जोडणी किंवा साधण आढळले नाही"
-#: ../cli/src/connections.c:730
+#: ../cli/src/connections.c:1084
+#, c-format
+msgid "device '%s' not compatible with connection '%s'"
+msgstr "साधण '%s' जोडणी '%s' सह सहतà¥à¤µ नाही"
+
+#: ../cli/src/connections.c:1086
+#, c-format
+msgid "no device found for connection '%s'"
+msgstr "जोडणी '%s' करीता साधण आढळले नाही"
+
+#: ../cli/src/connections.c:1097
msgid "activating"
msgstr "सकà¥à¤°à¤¿à¤¯ करत आहे"
-#: ../cli/src/connections.c:732
+#: ../cli/src/connections.c:1099
msgid "activated"
msgstr "सकà¥à¤°à¤¿à¤¯ केले"
-#: ../cli/src/connections.c:735 ../cli/src/connections.c:758
-#: ../cli/src/connections.c:791 ../cli/src/devices.c:111
-#: ../cli/src/network-manager.c:76 ../cli/src/network-manager.c:98
+#: ../cli/src/connections.c:1102 ../cli/src/connections.c:1125
+#: ../cli/src/connections.c:1158 ../cli/src/devices.c:224
+#: ../cli/src/devices.c:514 ../cli/src/network-manager.c:92
+#: ../cli/src/network-manager.c:145 ../cli/src/settings.c:473
msgid "unknown"
msgstr "अपरिचीत"
-#: ../cli/src/connections.c:744
+#: ../cli/src/connections.c:1111
msgid "VPN connecting (prepare)"
msgstr "VPN जोडणी (तयार करा)"
-#: ../cli/src/connections.c:746
+#: ../cli/src/connections.c:1113
msgid "VPN connecting (need authentication)"
msgstr "VPN जोडणी (ओळख पटवणे आवशà¥à¤¯à¤• आहे)"
-#: ../cli/src/connections.c:748
+#: ../cli/src/connections.c:1115
msgid "VPN connecting"
msgstr "VPN जोडणी"
-#: ../cli/src/connections.c:750
+#: ../cli/src/connections.c:1117
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN जोडणी (IP संरचना पà¥à¤°à¤¾à¤ªà¥à¤¤ करत आहे)"
-#: ../cli/src/connections.c:752
+#: ../cli/src/connections.c:1119
msgid "VPN connected"
msgstr "VPN जोडणी यशसà¥à¤µà¥€"
-#: ../cli/src/connections.c:754
+#: ../cli/src/connections.c:1121
msgid "VPN connection failed"
msgstr "VPN जोडणी अपयशी"
-#: ../cli/src/connections.c:756
+#: ../cli/src/connections.c:1123
msgid "VPN disconnected"
msgstr "VPN जोडणी खंडीत à¤à¤¾à¤²à¥€"
-#: ../cli/src/connections.c:767
+#: ../cli/src/connections.c:1134
msgid "unknown reason"
msgstr "अपरिचीत कारण"
-#: ../cli/src/connections.c:769
+#: ../cli/src/connections.c:1136
msgid "none"
msgstr "काहिच नाही"
-#: ../cli/src/connections.c:771
+#: ../cli/src/connections.c:1138
msgid "the user was disconnected"
msgstr "वापरकरà¥à¤¤à¤¾ खंडीत à¤à¤¾à¤²à¥‡"
-#: ../cli/src/connections.c:773
+#: ../cli/src/connections.c:1140
msgid "the base network connection was interrupted"
msgstr "बेस नेटवरà¥à¤• जोडणी खंडीत à¤à¤¾à¤²à¥‡"
-#: ../cli/src/connections.c:775
+#: ../cli/src/connections.c:1142
msgid "the VPN service stopped unexpectedly"
msgstr "VPN सेवा अनपेकà¥à¤·à¥€à¤¤à¤°à¤¿à¤¤à¥à¤¯à¤¾ थांबली"
-#: ../cli/src/connections.c:777
+#: ../cli/src/connections.c:1144
msgid "the VPN service returned invalid configuration"
msgstr "VPN सेवाने अवैध संरचना रिटरà¥à¤¨ केली"
-#: ../cli/src/connections.c:779
+#: ../cli/src/connections.c:1146
msgid "the connection attempt timed out"
msgstr "जोडणी पà¥à¤°à¤¯à¤¤à¥à¤¨à¤¾à¤šà¥€ वेळ समापà¥à¤¤à¥€ आढळली"
-#: ../cli/src/connections.c:781
+#: ../cli/src/connections.c:1148
msgid "the VPN service did not start in time"
msgstr "VPN सेवा वेळेवर सà¥à¤°à¥‚ à¤à¤¾à¤²à¥€ नाही"
-#: ../cli/src/connections.c:783
+#: ../cli/src/connections.c:1150
msgid "the VPN service failed to start"
msgstr "VPN सेवा सà¥à¤°à¥‚ होणà¥à¤¯à¤¾à¤¸ अपयशी"
-#: ../cli/src/connections.c:785
+#: ../cli/src/connections.c:1152
msgid "no valid VPN secrets"
msgstr "वैध VPN गोपणीयता आढळले नाही"
-#: ../cli/src/connections.c:787
+#: ../cli/src/connections.c:1154
msgid "invalid VPN secrets"
msgstr "अवैध VPN गोपणीयता"
-#: ../cli/src/connections.c:789
+#: ../cli/src/connections.c:1156
msgid "the connection was removed"
msgstr "जोडणी काढून टाकली"
-#: ../cli/src/connections.c:803
+#: ../cli/src/connections.c:1170
#, c-format
msgid "state: %s\n"
msgstr "सà¥à¤¤à¤°: %s\n"
-#: ../cli/src/connections.c:806 ../cli/src/connections.c:832
+#: ../cli/src/connections.c:1173 ../cli/src/connections.c:1199
#, c-format
msgid "Connection activated\n"
msgstr "जोडणी सकà¥à¤°à¤¿à¤¯ केली\n"
-#: ../cli/src/connections.c:809
+#: ../cli/src/connections.c:1176
#, c-format
msgid "Error: Connection activation failed."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणी सकà¥à¤°à¤¿à¤¯ करणà¥à¤¯à¤¾à¤¸ अपयशी."
-#: ../cli/src/connections.c:828
+#: ../cli/src/connections.c:1195
#, c-format
msgid "state: %s (%d)\n"
msgstr "सà¥à¤¤à¤°: %s (%d)\n"
-#: ../cli/src/connections.c:838
+#: ../cli/src/connections.c:1205
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणी सकà¥à¤°à¤¿à¤¯ करणà¥à¤¯à¤¾à¤¸ अपयशी: %s."
-#: ../cli/src/connections.c:855 ../cli/src/devices.c:551
+#: ../cli/src/connections.c:1222 ../cli/src/devices.c:811
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: वेळसमापà¥à¤¤à¥€ %d सेकंद समापà¥à¤¤."
-#: ../cli/src/connections.c:898
+#: ../cli/src/connections.c:1265
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणी सकà¥à¤°à¤¿à¤¯ करणà¥à¤¯à¤¾à¤¸ अपयशी: %s"
-#: ../cli/src/connections.c:912
+#: ../cli/src/connections.c:1279
#, c-format
msgid "Error: Obtaining active connection for '%s' failed."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' करीता सकà¥à¤°à¤¿à¤¯ जोडणी पà¥à¤°à¤¾à¤ªà¥à¤¤ करणà¥à¤¯à¤¾à¤¸ अपयशी."
-#: ../cli/src/connections.c:921
+#: ../cli/src/connections.c:1288
#, c-format
msgid "Active connection state: %s\n"
msgstr "सकà¥à¤°à¤¿à¤¯ जोडणीचे सà¥à¤¤à¤°: %s\n"
-#: ../cli/src/connections.c:922
+#: ../cli/src/connections.c:1289
#, c-format
msgid "Active connection path: %s\n"
msgstr "सकà¥à¤°à¤¿à¤¯ जोडणीचे मारà¥à¤—: %s\n"
-#: ../cli/src/connections.c:976 ../cli/src/connections.c:1094
+#: ../cli/src/connections.c:1343 ../cli/src/connections.c:1461
#, c-format
msgid "Error: Unknown connection: %s."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: अपरिचीत जोडणी: %s."
-#: ../cli/src/connections.c:1011 ../cli/src/devices.c:622
+#: ../cli/src/connections.c:1378 ../cli/src/devices.c:882
#, c-format
msgid "Error: timeout value '%s' is not valid."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: वेळसमापà¥à¤¤à¥€à¤šà¥‡ मà¥à¤²à¥à¤¯ '%s' वैध नाही."
-#: ../cli/src/connections.c:1024 ../cli/src/connections.c:1111
+#: ../cli/src/connections.c:1391 ../cli/src/connections.c:1478
#, c-format
msgid "Error: id or uuid has to be specified."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: id किंवा uuid निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ करणे आवशà¥à¤¯à¤• आहे."
-#: ../cli/src/connections.c:1044
+#: ../cli/src/connections.c:1411
#, c-format
msgid "Error: No suitable device found: %s."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: योगà¥à¤¯ साधण आढळले नाही: %s."
-#: ../cli/src/connections.c:1046
+#: ../cli/src/connections.c:1413
#, c-format
msgid "Error: No suitable device found."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: योगà¥à¤¯ साधण आढळले नाही."
-#: ../cli/src/connections.c:1138
+#: ../cli/src/connections.c:1505
#, c-format
msgid "Warning: Connection not active\n"
msgstr "सावधान: जोडणी सकà¥à¤°à¤¿à¤¯ नाही\n"
-#: ../cli/src/connections.c:1189
+#: ../cli/src/connections.c:1561
#, c-format
msgid "Error: 'con' command '%s' is not valid."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'con' आदेश '%s' वैध नाही."
-#: ../cli/src/connections.c:1216
+#: ../cli/src/connections.c:1597
#, c-format
msgid "Error: could not connect to D-Bus."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: D-Bus सह जोडणी करणे अशकà¥à¤¯."
-#: ../cli/src/connections.c:1223
+#: ../cli/src/connections.c:1604
#, c-format
msgid "Error: Could not get system settings."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: पà¥à¤°à¤£à¤¾à¤²à¥€à¤šà¥€ संयोजना पà¥à¤°à¤¾à¤ªà¥à¤¤ करणे अशकà¥à¤¯."
-#: ../cli/src/connections.c:1231
+#: ../cli/src/connections.c:1612
#, c-format
msgid "Error: Could not get user settings."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: वापरकरà¥à¤¤à¤¾à¤šà¥€ संयोजना पà¥à¤°à¤¾à¤ªà¥à¤¤ करणे अशकà¥à¤¯."
-#: ../cli/src/connections.c:1241
+#: ../cli/src/connections.c:1622
#, c-format
msgid "Error: Can't obtain connections: settings services are not running."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणी पà¥à¤°à¤¾à¤ªà¥à¤¤ करणà¥à¤¯à¤¾à¤¸ अशकà¥à¤¯: सेटिंगà¥à¤¸à¥ सेवा कारà¥à¤¯à¤°à¤¤ नाही."
+#. 0
+#. 9
+#: ../cli/src/devices.c:60 ../cli/src/devices.c:86 ../cli/src/devices.c:162
+msgid "DEVICE"
+msgstr "DEVICE"
+
+#. 1
+#. 4
+#. 0
+#: ../cli/src/devices.c:62 ../cli/src/devices.c:90
+#: ../cli/src/network-manager.c:36
+msgid "STATE"
+msgstr "STATE"
+
+#: ../cli/src/devices.c:71
+msgid "GENERAL"
+msgstr "GENERAL"
+
+#. 0
+#: ../cli/src/devices.c:72
+msgid "CAPABILITIES"
+msgstr "CAPABILITIES"
+
+#. 1
#: ../cli/src/devices.c:73
+msgid "WIFI-PROPERTIES"
+msgstr "WIFI-PROPERTIES"
+
+#. 2
+#: ../cli/src/devices.c:74
+msgid "AP"
+msgstr "AP"
+
+#. 3
+#: ../cli/src/devices.c:75
+msgid "WIRED-PROPERTIES"
+msgstr "WIRED-PROPERTIES"
+
+#. 4
+#: ../cli/src/devices.c:76
+msgid "IP4-SETTINGS"
+msgstr "IP4-SETTINGS"
+
+#. 5
+#: ../cli/src/devices.c:77
+msgid "IP4-DNS"
+msgstr "IP4-DNS"
+
+#. 2
+#: ../cli/src/devices.c:88
+msgid "DRIVER"
+msgstr "DRIVER"
+
+#. 3
+#: ../cli/src/devices.c:89
+msgid "HWADDR"
+msgstr "HWADDR"
+
+#. 0
+#: ../cli/src/devices.c:99
+msgid "CARRIER-DETECT"
+msgstr "CARRIER-DETECT"
+
+#. 1
+#: ../cli/src/devices.c:100
+msgid "SPEED"
+msgstr "SPEED"
+
+#. 0
+#: ../cli/src/devices.c:109
+msgid "CARRIER"
+msgstr "CARRIER"
+
+#. 0
+#: ../cli/src/devices.c:119
+msgid "WEP"
+msgstr "WEP"
+
+#. 1
+#: ../cli/src/devices.c:120
+msgid "WPA"
+msgstr "WPA"
+
+#. 2
+#: ../cli/src/devices.c:121
+msgid "WPA2"
+msgstr "WPA2"
+
+#. 3
+#: ../cli/src/devices.c:122
+msgid "TKIP"
+msgstr "TKIP"
+
+#. 4
+#: ../cli/src/devices.c:123
+msgid "CCMP"
+msgstr "CCMP"
+
+#. 0
+#: ../cli/src/devices.c:132
+msgid "ADDRESS"
+msgstr "ADDRESS"
+
+#. 1
+#: ../cli/src/devices.c:133
+msgid "PREFIX"
+msgstr "PREFIX"
+
+#. 2
+#: ../cli/src/devices.c:134
+msgid "GATEWAY"
+msgstr "GATEWAY"
+
+#. 0
+#: ../cli/src/devices.c:143
+msgid "DNS"
+msgstr "DNS"
+
+#. 0
+#: ../cli/src/devices.c:153
+msgid "SSID"
+msgstr "SSID"
+
+#. 1
+#: ../cli/src/devices.c:154
+msgid "BSSID"
+msgstr "BSSID"
+
+#. 2
+#: ../cli/src/devices.c:155
+msgid "MODE"
+msgstr "MODE"
+
+#. 3
+#: ../cli/src/devices.c:156
+msgid "FREQ"
+msgstr "FREQ"
+
+#. 4
+#: ../cli/src/devices.c:157
+msgid "RATE"
+msgstr "RATE"
+
+#. 5
+#: ../cli/src/devices.c:158
+msgid "SIGNAL"
+msgstr "SIGNAL"
+
+#. 6
+#: ../cli/src/devices.c:159
+msgid "SECURITY"
+msgstr "SECURITY"
+
+#. 7
+#: ../cli/src/devices.c:160
+msgid "WPA-FLAGS"
+msgstr "WPA-FLAGS"
+
+#. 8
+#: ../cli/src/devices.c:161
+msgid "RSN-FLAGS"
+msgstr "RSN-FLAGS"
+
+#. 10
+#: ../cli/src/devices.c:163
+msgid "ACTIVE"
+msgstr "ACTIVE"
+
+#: ../cli/src/devices.c:186
#, c-format
msgid ""
"Usage: nmcli dev { COMMAND | help }\n"
@@ -352,7 +625,7 @@ msgid ""
" status\n"
" list [iface <iface>]\n"
" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] | apinfo iface <iface> hwaddr <hwaddr>]\n"
+" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
"\n"
msgstr ""
"वापर: nmcli dev { COMMAND | help }\n"
@@ -362,349 +635,236 @@ msgstr ""
" status\n"
" list [iface <iface>]\n"
" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] | apinfo iface <iface> hwaddr <hwaddr>]\n"
+" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
"\n"
-#: ../cli/src/devices.c:93
+#: ../cli/src/devices.c:206
msgid "unmanaged"
msgstr "अवà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¥€à¤¤"
-#: ../cli/src/devices.c:95
+#: ../cli/src/devices.c:208
msgid "unavailable"
msgstr "अनà¥à¤ªà¤²à¥à¤¬à¤§"
-#: ../cli/src/devices.c:97 ../cli/src/network-manager.c:73
+#: ../cli/src/devices.c:210 ../cli/src/network-manager.c:89
msgid "disconnected"
msgstr "खंडीत"
-#: ../cli/src/devices.c:99
+#: ../cli/src/devices.c:212
msgid "connecting (prepare)"
msgstr "जोडणी (तयार करत आहे)"
-#: ../cli/src/devices.c:101
+#: ../cli/src/devices.c:214
msgid "connecting (configuring)"
msgstr "जोडणी (संरचीत करत आहे)"
-#: ../cli/src/devices.c:103
+#: ../cli/src/devices.c:216
msgid "connecting (need authentication)"
msgstr "जोडणी (ओळख पटवणे आवशà¥à¤¯à¤• आहे)"
-#: ../cli/src/devices.c:105
+#: ../cli/src/devices.c:218
msgid "connecting (getting IP configuration)"
msgstr "जोडणी (IP संरचना पà¥à¤°à¤¾à¤ªà¥à¤¤ करत आहे)"
-#: ../cli/src/devices.c:107 ../cli/src/network-manager.c:71
+#: ../cli/src/devices.c:220 ../cli/src/network-manager.c:87
msgid "connected"
msgstr "जोडणी यशसà¥à¤µà¥€"
-#: ../cli/src/devices.c:109
+#: ../cli/src/devices.c:222
msgid "connection failed"
msgstr "जोडणी अपयशी"
-#: ../cli/src/devices.c:132 ../cli/src/devices.c:876
+#: ../cli/src/devices.c:245 ../cli/src/devices.c:380
msgid "Unknown"
msgstr "अपरिचीत"
-#. print them
-#: ../cli/src/devices.c:164 ../cli/src/devices.c:266 ../cli/src/devices.c:861
-#: ../cli/src/devices.c:879
+#: ../cli/src/devices.c:277
msgid "(none)"
msgstr "(काहिच नाही)"
-#: ../cli/src/devices.c:209
+#: ../cli/src/devices.c:302
#, c-format
msgid "%s: error converting IP4 address 0x%X"
msgstr "%s: IP4 पतà¥à¤¤à¤¾ 0x%X यांस रूपांतरीत करतेवेळी तà¥à¤°à¥à¤Ÿà¥€"
-#: ../cli/src/devices.c:238
+#: ../cli/src/devices.c:349
#, c-format
-msgid "%s, %s, Freq %d MHz, Rate %d Mb/s, Strength %d"
-msgstr "%s, %s, कà¥à¤°à¤¿à¤• %d MHz, रेट %d Mb/s, सà¥à¤Ÿà¥à¤°à¥‡à¤‚गà¥à¤¥à¥ %d"
-
-#: ../cli/src/devices.c:239
-msgid "Ad-Hoc"
-msgstr "à¤à¤¡-हॉक"
-
-#: ../cli/src/devices.c:248
-msgid ", Encrypted: "
-msgstr ", à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿà¥‡à¤¡: "
-
-#: ../cli/src/devices.c:253
-msgid " WEP"
-msgstr " WEP"
-
-#: ../cli/src/devices.c:255
-msgid " WPA"
-msgstr " WPA"
-
-#: ../cli/src/devices.c:257
-msgid " WPA2"
-msgstr " WPA2"
+msgid "%u MHz"
+msgstr "%u MHz"
-#: ../cli/src/devices.c:260
-msgid " Enterprise"
-msgstr " à¤à¤‚टरपà¥à¤°à¤¾à¤‡à¤œ"
+#: ../cli/src/devices.c:350
+#, c-format
+msgid "%u MB/s"
+msgstr "%u MB/s"
-#: ../cli/src/devices.c:294 ../cli/src/devices.c:458 ../cli/src/devices.c:460
-msgid "Device"
-msgstr "साधण"
+#: ../cli/src/devices.c:359
+msgid "Encrypted: "
+msgstr "à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿà¥‡à¤¡: "
-#: ../cli/src/devices.c:299
-msgid "Driver"
-msgstr "डà¥à¤°à¤¾à¤‡à¤µà¥à¤¹à¤°"
+#: ../cli/src/devices.c:364
+msgid "WEP "
+msgstr "WEP "
-#: ../cli/src/devices.c:299 ../cli/src/devices.c:567
-msgid "(unknown)"
-msgstr "(अपरिचीत)"
+#: ../cli/src/devices.c:366
+msgid "WPA "
+msgstr "WPA "
-#: ../cli/src/devices.c:300 ../cli/src/devices.c:458 ../cli/src/devices.c:460
-msgid "State"
-msgstr "सà¥à¤¤à¤°"
+#: ../cli/src/devices.c:368
+msgid "WPA2 "
+msgstr "WPA2 "
-#: ../cli/src/devices.c:313
-msgid "HW Address"
-msgstr "HW पतà¥à¤¤à¤¾"
+#: ../cli/src/devices.c:371
+msgid "Enterprise "
+msgstr "à¤à¤‚टरपà¥à¤°à¤¾à¤‡à¤œ"
-#: ../cli/src/devices.c:319
-#, c-format
-msgid ""
-"\n"
-" Capabilities:\n"
-msgstr ""
-"\n"
-" कà¥à¤·à¤®à¤¤à¤¾:\n"
+#: ../cli/src/devices.c:380
+msgid "Ad-Hoc"
+msgstr "à¤à¤¡-हॉक"
-#: ../cli/src/devices.c:321
-msgid "Carrier Detect"
-msgstr "कॅरिअर आढळले"
+#: ../cli/src/devices.c:380
+msgid "Infrastructure"
+msgstr "इंफà¥à¤°à¤¾à¤¸à¥à¤Ÿà¥à¤°à¤•à¥à¤šà¤°"
-#: ../cli/src/devices.c:336
+#: ../cli/src/devices.c:442
#, c-format
-msgid "%u Mb/s"
-msgstr "%u Mb/s"
+msgid "Error: 'dev list': %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'dev list': %s"
-#: ../cli/src/devices.c:337
-msgid "Speed"
-msgstr "गती"
-
-#: ../cli/src/devices.c:348
+#: ../cli/src/devices.c:444
#, c-format
-msgid ""
-"\n"
-" Wireless Properties\n"
-msgstr ""
-"\n"
-" वायरलेसॠगà¥à¤£à¤§à¤°à¥à¤®\n"
-
-#: ../cli/src/devices.c:353
-msgid "WEP Encryption"
-msgstr "WEP à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤¶à¤¨"
-
-#: ../cli/src/devices.c:355
-msgid "WPA Encryption"
-msgstr "WPA à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤¶à¤¨"
+msgid "Error: 'dev list': %s; allowed fields: %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'dev list': %s; सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
-#: ../cli/src/devices.c:357
-msgid "WPA2 Encryption"
-msgstr "WPA2 à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤¶à¤¨"
-
-#: ../cli/src/devices.c:359
-msgid "TKIP cipher"
-msgstr "TKIP सिफर"
+#: ../cli/src/devices.c:453
+msgid "Device details"
+msgstr "साधणाचे तपशील"
-#: ../cli/src/devices.c:361
-msgid "CCMP cipher"
-msgstr "CCMP सिफर"
-
-#: ../cli/src/devices.c:368
-#, c-format
-msgid ""
-"\n"
-" Wireless Access Points %s\n"
-msgstr ""
-"\n"
-" वायरलेसॠà¤à¤•à¥à¤¸à¥‡à¤¸à¥ पॉईंटसॠ%s\n"
+#: ../cli/src/devices.c:483 ../cli/src/devices.c:827
+msgid "(unknown)"
+msgstr "(अपरिचीत)"
-#: ../cli/src/devices.c:368
-msgid "(* = current AP)"
-msgstr "(* = सधà¥à¤¯à¤¾à¤šà¥‡ AP)"
+#: ../cli/src/devices.c:484
+msgid "unknown)"
+msgstr "अपरिचीत)"
-#: ../cli/src/devices.c:374
+#: ../cli/src/devices.c:510
#, c-format
-msgid ""
-"\n"
-" Wired Properties\n"
-msgstr ""
-"\n"
-" वायरà¥à¤¡à¥ गà¥à¤£à¤§à¤°à¥à¤®\n"
-
-#: ../cli/src/devices.c:377 ../cli/src/devices.c:379
-msgid "Carrier"
-msgstr "कॅरिअर"
+msgid "%u Mb/s"
+msgstr "%u Mb/s"
-#: ../cli/src/devices.c:377
+#. Print header
+#. "WIRED-PROPERTIES"
+#: ../cli/src/devices.c:583
msgid "on"
msgstr "सà¥à¤°à¥‚ करा"
-#: ../cli/src/devices.c:379
+#: ../cli/src/devices.c:583
msgid "off"
msgstr "बंद करा"
-#: ../cli/src/devices.c:387
+#: ../cli/src/devices.c:710
#, c-format
-msgid ""
-"\n"
-" IPv4 Settings:\n"
-msgstr ""
-"\n"
-" IPv4 संरचना:\n"
-
-#: ../cli/src/devices.c:395
-msgid "Address"
-msgstr "पतà¥à¤¤à¤¾"
+msgid "Error: 'dev status': %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'dev status': %s"
-#: ../cli/src/devices.c:401
-msgid "Prefix"
-msgstr "पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸à¥"
-
-#: ../cli/src/devices.c:405
-msgid "Gateway"
-msgstr "गेटवे"
-
-#: ../cli/src/devices.c:416
-msgid "DNS"
-msgstr "DNS"
+#: ../cli/src/devices.c:712
+#, c-format
+msgid "Error: 'dev status': %s; allowed fields: %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'dev status': %s; सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
-#: ../cli/src/devices.c:458
+#: ../cli/src/devices.c:719
msgid "Status of devices"
msgstr "साधणांची सà¥à¤¥à¤¿à¤¤à¥€"
-#: ../cli/src/devices.c:487
+#: ../cli/src/devices.c:747
#, c-format
msgid "Error: '%s' argument is missing."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' घटक आढळले नाही."
-#: ../cli/src/devices.c:516 ../cli/src/devices.c:655 ../cli/src/devices.c:729
+#: ../cli/src/devices.c:776 ../cli/src/devices.c:915 ../cli/src/devices.c:1035
#, c-format
msgid "Error: Device '%s' not found."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: साधण '%s' आढळले नाही."
-#: ../cli/src/devices.c:539
+#: ../cli/src/devices.c:799
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "यशसà¥à¤µà¥€: साधण '%s' यशसà¥à¤µà¥€à¤°à¤¿à¤¤à¥à¤¯à¤¾ खंडीत à¤à¤¾à¤²à¥‡."
-#: ../cli/src/devices.c:564
+#: ../cli/src/devices.c:824
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: साधण '%s' (%s) खंडीत होणे अपयशी à¤à¤¾à¤²à¥‡: %s"
-#: ../cli/src/devices.c:572
+#: ../cli/src/devices.c:832
#, c-format
msgid "Device state: %d (%s)\n"
msgstr "साधणाचे सà¥à¤¤à¤°: %d (%s)\n"
-#: ../cli/src/devices.c:636
+#: ../cli/src/devices.c:896
#, c-format
msgid "Error: iface has to be specified."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: iface निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ करणे आवशà¥à¤¯à¤• आहे."
-#: ../cli/src/devices.c:736 ../cli/src/devices.c:746
-msgid "WiFi scan list"
-msgstr "WiFi सà¥à¤•à¥…न सूची"
-
-#: ../cli/src/devices.c:740
+#: ../cli/src/devices.c:1011
#, c-format
-msgid "Error: Device '%s' is not a WiFi device."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: साधण '%s' WiFi साधण नाही."
-
-#: ../cli/src/devices.c:754
-msgid "Device:"
-msgstr "साधण:"
+msgid "Error: 'dev wifi': %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'dev wifi': %s"
-#: ../cli/src/devices.c:806
+#: ../cli/src/devices.c:1013
#, c-format
-msgid "Error: hwaddr has to be specified."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: hwaddr निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ करणे आवशà¥à¤¯à¤• आहे."
+msgid "Error: 'dev wifi': %s; allowed fields: %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'dev wifi': %s; सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
+
+#: ../cli/src/devices.c:1020
+msgid "WiFi scan list"
+msgstr "WiFi सà¥à¤•à¥…न सूची"
-#: ../cli/src/devices.c:844
+#: ../cli/src/devices.c:1055 ../cli/src/devices.c:1109
#, c-format
msgid "Error: Access point with hwaddr '%s' not found."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: à¤à¤•à¥à¤¸à¥‡à¤¸ पॉईंट hwaddr '%s' सह आढळले नाही."
-#: ../cli/src/devices.c:862
-#, c-format
-msgid "%u MHz"
-msgstr "%u MHz"
-
-#: ../cli/src/devices.c:863
+#: ../cli/src/devices.c:1072
#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
-
-#: ../cli/src/devices.c:869 ../cli/src/devices.c:871
-msgid "AP parameters"
-msgstr "AP घटके"
-
-#: ../cli/src/devices.c:873
-msgid "SSID:"
-msgstr "SSID:"
-
-#: ../cli/src/devices.c:874
-msgid "BSSID:"
-msgstr "BSSID:"
-
-#: ../cli/src/devices.c:875
-msgid "Frequency:"
-msgstr "कà¥à¤°à¤¿à¤•à¥à¤µà¥‡à¤‚सी:"
-
-#: ../cli/src/devices.c:876
-msgid "Mode:"
-msgstr "मोड:"
-
-#: ../cli/src/devices.c:876
-msgid "Ad-hoc"
-msgstr "à¤à¤¡-हॉक"
-
-#: ../cli/src/devices.c:876
-msgid "Infrastructure"
-msgstr "इंफà¥à¤°à¤¾à¤¸à¥à¤Ÿà¥à¤°à¤•à¥à¤šà¤°"
-
-#: ../cli/src/devices.c:877
-msgid "Maximal bitrate:"
-msgstr "कमाल बिटरेट:"
-
-#: ../cli/src/devices.c:878
-msgid "Strength:"
-msgstr "सà¥à¤Ÿà¥à¤°à¥‡à¤‚गà¥à¤¥à¥:"
-
-#: ../cli/src/devices.c:879
-msgid "Flags:"
-msgstr "फà¥à¤²à¥…गà¥à¤¸à¥:"
-
-#: ../cli/src/devices.c:879
-msgid "privacy"
-msgstr "गोपणीयता"
-
-#: ../cli/src/devices.c:880
-msgid "WPA flags:"
-msgstr "WPA फà¥à¤²à¥…गà¥à¤¸à¥:"
-
-#: ../cli/src/devices.c:881
-msgid "RSN flags:"
-msgstr "RSN फà¥à¤²à¥…गà¥à¤¸à¥:"
+msgid "Error: Device '%s' is not a WiFi device."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: साधण '%s' WiFi साधण नाही."
-#: ../cli/src/devices.c:907
+#: ../cli/src/devices.c:1136
#, c-format
msgid "Error: 'dev wifi' command '%s' is not valid."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'dev wifi' आदेश '%s' वैध नाही."
-#: ../cli/src/devices.c:943
+#: ../cli/src/devices.c:1183
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'dev' आदेश '%s' वैध नाही."
-#: ../cli/src/network-manager.c:46
+#: ../cli/src/network-manager.c:35
+msgid "RUNNING"
+msgstr "RUNNING"
+
+#. 1
+#: ../cli/src/network-manager.c:37
+msgid "WIFI-HARDWARE"
+msgstr "WIFI-HARDWARE"
+
+#. 2
+#: ../cli/src/network-manager.c:38
+msgid "WIFI"
+msgstr "WIFI"
+
+#. 3
+#: ../cli/src/network-manager.c:39
+msgid "WWAN-HARDWARE"
+msgstr "WWAN-HARDWARE"
+
+#. 4
+#: ../cli/src/network-manager.c:40
+msgid "WWAN"
+msgstr "WWAN"
+
+#: ../cli/src/network-manager.c:62
#, c-format
msgid ""
"Usage: nmcli nm { COMMAND | help }\n"
@@ -729,89 +889,91 @@ msgstr ""
" wwan [on|off]\n"
"\n"
-#: ../cli/src/network-manager.c:67
+#: ../cli/src/network-manager.c:83
msgid "asleep"
msgstr "असà¥à¤²à¥€à¤ªà¥"
-#: ../cli/src/network-manager.c:69
+#: ../cli/src/network-manager.c:85
msgid "connecting"
msgstr "जोडणी करत आहे"
-#: ../cli/src/network-manager.c:93 ../cli/src/network-manager.c:94
-#: ../cli/src/network-manager.c:95 ../cli/src/network-manager.c:96
-#: ../cli/src/network-manager.c:143 ../cli/src/network-manager.c:160
-msgid "enabled"
-msgstr "सà¥à¤°à¥‚ केले"
+#: ../cli/src/network-manager.c:125
+#, c-format
+msgid "Error: 'nm status': %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'nm status': %s"
-#: ../cli/src/network-manager.c:93 ../cli/src/network-manager.c:94
-#: ../cli/src/network-manager.c:95 ../cli/src/network-manager.c:96
-#: ../cli/src/network-manager.c:143 ../cli/src/network-manager.c:160
-msgid "disabled"
-msgstr "बंद केले"
+#: ../cli/src/network-manager.c:127
+#, c-format
+msgid "Error: 'nm status': %s; allowed fields: %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'nm status': %s; सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
-#: ../cli/src/network-manager.c:102
+#: ../cli/src/network-manager.c:134
msgid "NetworkManager status"
msgstr "NetworkManager सà¥à¤¥à¤¿à¤¤à¥€"
-#: ../cli/src/network-manager.c:104
-msgid "NM running:"
-msgstr "NM सà¥à¤°à¥‚ आहे:"
+#. 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
+msgid "enabled"
+msgstr "सà¥à¤°à¥‚ केले"
+
+#: ../cli/src/network-manager.c:140 ../cli/src/network-manager.c:141
+#: ../cli/src/network-manager.c:142 ../cli/src/network-manager.c:143
+#: ../cli/src/network-manager.c:211 ../cli/src/network-manager.c:243
+msgid "disabled"
+msgstr "बंद केले"
-#: ../cli/src/network-manager.c:104
+#: ../cli/src/network-manager.c:148
msgid "running"
msgstr "कारà¥à¤¯à¤°à¤¤ आहे"
-#: ../cli/src/network-manager.c:104
+#: ../cli/src/network-manager.c:148
msgid "not running"
msgstr "कारà¥à¤¯à¤°à¤¤ नाही"
-#: ../cli/src/network-manager.c:105
-msgid "NM state:"
-msgstr "NM सà¥à¤¤à¤°:"
-
-#: ../cli/src/network-manager.c:106
-msgid "NM wireless hardware:"
-msgstr "NM वायरलेसॠहारà¥à¤¡à¤µà¥‡à¤…र:"
-
-#. no argument, show current state
-#: ../cli/src/network-manager.c:107 ../cli/src/network-manager.c:143
-msgid "NM wireless:"
-msgstr "NM वायरलेसà¥:"
-
-#: ../cli/src/network-manager.c:108
-msgid "NM WWAN hardware:"
-msgstr "NM WWAN हारà¥à¤¡à¤µà¥‡à¤…र:"
+#: ../cli/src/network-manager.c:201 ../cli/src/network-manager.c:233
+#, c-format
+msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: येथील '--fields' मूलà¥à¤¯ '%s' वैध नाही; सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
-#. no argument, show current state
-#: ../cli/src/network-manager.c:109 ../cli/src/network-manager.c:160
-msgid "NM WWAN:"
-msgstr "NM WWAN:"
+#: ../cli/src/network-manager.c:209
+msgid "WiFi enabled"
+msgstr "WiFi समरà¥à¤¥à¥€à¤¤"
-#: ../cli/src/network-manager.c:150
+#: ../cli/src/network-manager.c:220
#, c-format
msgid "Error: invalid 'wifi' parameter: '%s'."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध 'wifi' घटक: '%s'."
-#: ../cli/src/network-manager.c:167
+#: ../cli/src/network-manager.c:241
+msgid "WWAN enabled"
+msgstr "WWAN समरà¥à¤¥à¥€à¤¤"
+
+#: ../cli/src/network-manager.c:252
#, c-format
msgid "Error: invalid 'wwan' parameter: '%s'."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध 'wwan' घटक: '%s'."
-#: ../cli/src/network-manager.c:178
+#: ../cli/src/network-manager.c:263
#, c-format
msgid "Error: 'nm' command '%s' is not valid."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'nm' आदेश '%s' वैध नाही."
-#: ../cli/src/nmcli.c:65
+#: ../cli/src/nmcli.c:69
#, c-format
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
"\n"
"OPTIONS\n"
-" -t[erse] terse output\n"
-" -p[retty] pretty output\n"
-" -v[ersion] show program version\n"
-" -h[elp] print this help\n"
+" -t[erse] terse output\n"
+" -p[retty] pretty output\n"
+" -m[ode] tabular|multiline output mode\n"
+" -f[ields] <field1,field2,...>|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"
@@ -822,10 +984,14 @@ msgstr ""
"वापर: %s [OPTIONS] OBJECT { COMMAND | help }\n"
"\n"
"OPTIONS\n"
-" -t[erse] terse output\n"
-" -p[retty] pretty output\n"
-" -v[ersion] show program version\n"
-" -h[elp] print this help\n"
+" -t[erse] terse output\n"
+" -p[retty] pretty output\n"
+" -m[ode] tabular|multiline output mode\n"
+" -f[ields] <field1,field2,...>|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"
@@ -833,35 +999,166 @@ msgstr ""
" dev devices managed by NetworkManager\n"
"\n"
-#: ../cli/src/nmcli.c:106
+#: ../cli/src/nmcli.c:113
+#, c-format
+msgid "Error: Object '%s' is unknown, try 'nmcli help'."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: घटक '%s' अपरिचीत आहे, 'nmcli help' वापरून पहा."
+
+#: ../cli/src/nmcli.c:143
+#, c-format
+msgid "Error: Option '--terse' is specified the second time."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: परà¥à¤¯à¤¾à¤¯ '--terse' दà¥à¤¸à¤±à¥à¤¯à¤¾à¤µà¥‡à¤³à¥€ निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ केले."
+
+#: ../cli/src/nmcli.c:148
+#, c-format
+msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: '--pretty' चà¥à¤¯à¤¾ तà¥à¤²à¤¨à¥‡à¤¤ परà¥à¤¯à¤¾à¤¯ '--terse' वेगळे आहे."
+
+#: ../cli/src/nmcli.c:156
+#, c-format
+msgid "Error: Option '--pretty' is specified the second time."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: परà¥à¤¯à¤¾à¤¯ '--pretty' दà¥à¤¸à¤±à¥à¤¯à¤¾à¤µà¥‡à¤³à¥€ निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ केले."
+
+#: ../cli/src/nmcli.c:161
+#, c-format
+msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: '--terse' चà¥à¤¯à¤¾ तà¥à¤²à¤¨à¥‡à¤¤ परà¥à¤¯à¤¾à¤¯ '--pretty' वेगळे आहे."
+
+#: ../cli/src/nmcli.c:171 ../cli/src/nmcli.c:187
+#, c-format
+msgid "Error: missing argument for '%s' option."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' परà¥à¤¯à¤¾à¤¯à¤•à¤°à¥€à¤¤à¤¾ न आढळलेले घटक."
+
+#: ../cli/src/nmcli.c:180 ../cli/src/nmcli.c:196
+#, c-format
+msgid "Error: '%s' is not valid argument for '%s' option."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' परà¥à¤¯à¤¾à¤¯à¤•à¤°à¥€à¤¤à¤¾ '%s' वैध घटक नाही."
+
+#: ../cli/src/nmcli.c:203
#, c-format
-msgid "Object '%s' is unknown, try 'nmcli help'."
-msgstr "घटक '%s' अपरिचीत आहे, 'nmcli help' वापरून पहा."
+msgid "Error: fields for '%s' options are missing."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' परà¥à¤¯à¤¾à¤¯à¤•à¤°à¥€à¤¤à¤¾ कà¥à¤·à¥‡à¤¤à¥à¤° आढळले नाही."
-#: ../cli/src/nmcli.c:139
+#: ../cli/src/nmcli.c:209
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "nmcli साधण, आवृतà¥à¤¤à¥€ %s\n"
-#: ../cli/src/nmcli.c:145
+#: ../cli/src/nmcli.c:215
#, c-format
-msgid "Option '%s' is unknown, try 'nmcli -help'."
-msgstr "परà¥à¤¯à¤¾à¤¯ '%s' अपरिचीत आहे, 'nmcli -help' वापरून पहा."
+msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: परà¥à¤¯à¤¾à¤¯ '%s' अपरिचीत आहे, 'nmcli -help' वापरून पहा."
-#: ../cli/src/nmcli.c:164
+#: ../cli/src/nmcli.c:234
#, c-format
msgid "Caught signal %d, shutting down..."
msgstr "संकेत %d पà¥à¤°à¤¾à¤ªà¥à¤¤ à¤à¤¾à¤²à¥‡, बंद करत आहे..."
-#: ../cli/src/nmcli.c:189
+#: ../cli/src/nmcli.c:259
#, c-format
msgid "Error: Could not connect to NetworkManager."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: NetworkManager सह जोडणी करणà¥à¤¯à¤¾à¤¸ अशकà¥à¤¯."
-#: ../cli/src/nmcli.c:205
+#: ../cli/src/nmcli.c:275
msgid "Success"
msgstr "यश"
+#: ../cli/src/settings.c:411
+#, c-format
+msgid "%d (hex-ascii-key)"
+msgstr "%d (hex-ascii-key)"
+
+#: ../cli/src/settings.c:413
+#, c-format
+msgid "%d (104/128-bit passphrase)"
+msgstr "%d (104/128-बीट पासफà¥à¤°à¥‡à¤œ)"
+
+#: ../cli/src/settings.c:416
+#, c-format
+msgid "%d (unknown)"
+msgstr "%d (अपरिचीत)"
+
+#: ../cli/src/settings.c:442
+msgid "0 (unknown)"
+msgstr "0 (अपरिचीत)"
+
+#: ../cli/src/settings.c:448
+msgid "any, "
+msgstr "कà¥à¤ à¤²à¥‡à¤¹à¥€, "
+
+#: ../cli/src/settings.c:450
+msgid "900 MHz, "
+msgstr "900 MHz, "
+
+#: ../cli/src/settings.c:452
+msgid "1800 MHz, "
+msgstr "1800 MHz, "
+
+#: ../cli/src/settings.c:454
+msgid "1900 MHz, "
+msgstr "1900 MHz, "
+
+#: ../cli/src/settings.c:456
+msgid "850 MHz, "
+msgstr "850 MHz, "
+
+#: ../cli/src/settings.c:458
+msgid "WCDMA 3GPP UMTS 2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 2100 MHz, "
+
+#: ../cli/src/settings.c:460
+msgid "WCDMA 3GPP UMTS 1800 MHz, "
+msgstr "WCDMA 3GPP UMTS 1800 MHz, "
+
+#: ../cli/src/settings.c:462
+msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
+
+#: ../cli/src/settings.c:464
+msgid "WCDMA 3GPP UMTS 800 MHz, "
+msgstr "WCDMA 3GPP UMTS 800 MHz, "
+
+#: ../cli/src/settings.c:466
+msgid "WCDMA 3GPP UMTS 850 MHz, "
+msgstr "WCDMA 3GPP UMTS 850 MHz, "
+
+#: ../cli/src/settings.c:468
+msgid "WCDMA 3GPP UMTS 900 MHz, "
+msgstr "WCDMA 3GPP UMTS 900 MHz, "
+
+#: ../cli/src/settings.c:470
+msgid "WCDMA 3GPP UMTS 1700 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700 MHz, "
+
+#: ../cli/src/settings.c:554 ../cli/src/settings.c:721
+msgid "auto"
+msgstr "सà¥à¤µà¤¯à¤‚"
+
+#: ../cli/src/settings.c:716 ../cli/src/settings.c:719
+#: ../cli/src/settings.c:720 ../cli/src/utils.c:172
+msgid "not set"
+msgstr "सेट केले नाही"
+
+#: ../cli/src/utils.c:124
+#, c-format
+msgid "field '%s' has to be alone"
+msgstr "कà¥à¤·à¥‡à¤¤à¥à¤° '%s' वेगळे असायला हवे"
+
+#: ../cli/src/utils.c:127
+#, c-format
+msgid "invalid field '%s'"
+msgstr "अवैध कà¥à¤·à¥‡à¤¤à¥à¤° '%s'"
+
+#: ../cli/src/utils.c:146
+#, c-format
+msgid "Option '--terse' requires specifying '--fields'"
+msgstr "परà¥à¤¯à¤¾à¤¯ '--terse' यांस '--fields' निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ करणे आवशà¥à¤¯à¤• आहे"
+
+#: ../cli/src/utils.c:150
+#, c-format
+msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
+msgstr "परà¥à¤¯à¤¾à¤¯ '--terse' यांस '--fields' परà¥à¤¯à¤¾à¤¯ मूलà¥à¤¯à¥‡ निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ करणे आवशà¥à¤¯à¤• आहे , '%s' नाही"
+
#: ../libnm-util/crypto.c:120
#, c-format
msgid "PEM key file had no end tag '%s'."
@@ -1177,30 +1474,114 @@ msgstr "PKCS#12 फाइल तपास करणà¥à¤¯à¤¾à¤¸ अशकà¥à¤¯:
msgid "Could not generate random data."
msgstr "विनाकà¥à¤°à¤® डाटा निरà¥à¤®à¤¾à¤£ करणे अशकà¥à¤¯."
-#: ../libnm-util/nm-utils.c:1924
+#: ../libnm-util/nm-utils.c:1925
#, c-format
msgid "Not enough memory to make encryption key."
msgstr "à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤¶à¤¨ कि निरà¥à¤®à¤¾à¤£ करणà¥à¤¯à¤¾à¤¸ अतिरीकà¥à¤¤ मेमरी आढळली नाही."
-#: ../libnm-util/nm-utils.c:2034
+#: ../libnm-util/nm-utils.c:2035
msgid "Could not allocate memory for PEM file creation."
msgstr "PEM फाइल निरà¥à¤®à¤¾à¤£à¤•à¤°à¥€à¤¤à¤¾ मेमरीचे वाटप करणे अशकà¥à¤¯."
-#: ../libnm-util/nm-utils.c:2046
+#: ../libnm-util/nm-utils.c:2047
#, c-format
msgid "Could not allocate memory for writing IV to PEM file."
msgstr "IV ला PEM फाइलवर लिहणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ मेमरीचे वाटप करणे अशकà¥à¤¯."
-#: ../libnm-util/nm-utils.c:2058
+#: ../libnm-util/nm-utils.c:2059
#, c-format
msgid "Could not allocate memory for writing encrypted key to PEM file."
msgstr "à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿà¥‡à¤¡ किला PEM फाइलवर लिहणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ मेमरीचे वाटप करणे अशकà¥à¤¯."
-#: ../libnm-util/nm-utils.c:2077
+#: ../libnm-util/nm-utils.c:2078
#, c-format
msgid "Could not allocate memory for PEM file data."
msgstr "PEM फाइल डाटाकरीता मेमरीचे वाटप करणे अशकà¥à¤¯."
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
+msgid "Connection sharing via a protected WiFi network"
+msgstr "सà¥à¤°à¤•à¥à¤·à¥€à¤¤ WiFi नेटवरà¥à¤• दà¥à¤µà¤¾à¤°à¥‡ जोडणीचे शेअरींग करा"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
+msgid "Connection sharing via an open WiFi network"
+msgstr "ओपन WiFi नेटवरà¥à¤• दà¥à¤µà¤¾à¤°à¥‡ कनेकà¥à¤¶à¤¨ शेअरींग करा"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
+msgid "Modify persistent system hostname"
+msgstr "परà¥à¤¸à¤¿à¤¸à¥à¤Ÿà¤‚ट पà¥à¤°à¤£à¤¾à¤²à¥€ यजमाननाव संपादीत करा"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
+msgid "Modify system connections"
+msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€ जà¥à¤³à¤µà¤£à¥€ संपादीत करा"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
+msgid "System policy prevents modification of system settings"
+msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€ करार, पà¥à¤°à¤£à¤¾à¤²à¥€ संयोजना संपादीत करणà¥à¤¯à¤¾à¤ªà¤¾à¤¸à¥‚न रोखतो"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
+msgid "System policy prevents modification of the persistent system hostname"
+msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€ करार परà¥à¤¸à¤¿à¤¸à¥à¤Ÿà¤‚ट पà¥à¤°à¤£à¤¾à¤²à¥€ यजमाननावाचे संपादन रोखत आहे"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
+msgid "System policy prevents sharing connections via a protected WiFi network"
+msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€ करार सà¥à¤°à¤•à¥à¤·à¥€à¤¤ WiFi नेटवरà¥à¤• दà¥à¤µà¤¾à¤°à¥‡ जोडणीचे शेअरींग रोखत आहे"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
+msgid "System policy prevents sharing connections via an open WiFi network"
+msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€ करार ओपन WiFi नेटवरà¥à¤• दà¥à¤µà¤¾à¤°à¥‡ जोडणीचे शेअरींग रोखत आहे"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
+msgid "Allow control of network connections"
+msgstr "नेटवरà¥à¤• जोडणींचे नियंतà¥à¤°à¤£ सà¥à¤µà¥€à¤•à¤¾à¤°à¤¾"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
+msgid "Allow use of user-specific connections"
+msgstr "वापरकरà¥à¤¤à¤¾-निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ जोडणींचा वापर सà¥à¤µà¥€à¤•à¤¾à¤°à¤¾"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
+msgid "Enable or disable WiFi devices"
+msgstr "WiFi साधने सà¥à¤°à¥‚ किंवा बंद करा"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
+msgid "Enable or disable mobile broadband devices"
+msgstr "मोबाईल बà¥à¤°à¥‰à¤¡à¤¬à¤à¤¡ साधने सà¥à¤°à¥‚ किंवा बंद करा"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+msgid "Enable or disable system networking"
+msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€ नेटवरà¥à¤•à¤¿à¤‚ग सà¥à¤°à¥‚ किंवा बंद करा"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
+msgid ""
+"Put NetworkManager to sleep or wake it up (should only be used by system "
+"power management)"
+msgstr ""
+"NetworkManager ला सà¥à¤²à¥€à¤ª किंवा वेकअप सà¥à¤¤à¤°à¤¾à¤¤ नà¥à¤¯à¤¾ (फकà¥à¤¤ पà¥à¤°à¤£à¤¾à¤²à¥€ पावर मॅनेजमेंटनेच याचा "
+"वापर करावा)"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
+msgid "System policy prevents control of network connections"
+msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€ करार नेटवरà¥à¤• जोडणीचे नियंतà¥à¤°à¤£ रोखते"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
+msgid "System policy prevents enabling or disabling WiFi devices"
+msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€ करार WiFi साधणांना सà¥à¤°à¥‚ किंवा बंद होणà¥à¤¯à¤¾à¤ªà¤¾à¤¸à¥‚न रोखते"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
+msgid "System policy prevents enabling or disabling mobile broadband devices"
+msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€ करार मोबाईल बà¥à¤°à¥‰à¤¡à¤¬à¤à¤¡ साधणांना सà¥à¤°à¥‚ किंवा बंद होणà¥à¤¯à¤¾à¤ªà¤¾à¤¸à¥‚न रोखते"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
+msgid "System policy prevents enabling or disabling system networking"
+msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€ करार पà¥à¤°à¤£à¤¾à¤²à¥€ नेटवरà¥à¤•à¤¿à¤‚गसा सà¥à¤°à¥‚ किंवा बंद होणà¥à¤¯à¤¾à¤ªà¤¾à¤¸à¥‚न रोखते"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
+msgid "System policy prevents putting NetworkManager to sleep or waking it up"
+msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€ करार NetworkManager ला सà¥à¤²à¥€à¤ª किंवा वेकअप मधà¥à¤¯à¥‡ जाणà¥à¤¯à¤¾à¤ªà¤¾à¤¸à¥‚न रोखते"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
+msgid "System policy prevents use of user-specific connections"
+msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€ करार वापरकरà¥à¤¤à¤¾-निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ जोडणींचे वापर रोखते"
+
#: ../src/nm-netlink-monitor.c:100 ../src/nm-netlink-monitor.c:231
#: ../src/nm-netlink-monitor.c:653
#, c-format
@@ -1246,7 +1627,7 @@ msgstr "दà¥à¤µà¤¾ कॅशे अदà¥à¤¯à¤¯à¤¾à¤µà¤¤ करतेवेळ
msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgstr "अवैध परà¥à¤¯à¤¾à¤¯. वैध परà¥à¤¯à¤¾à¤¯à¤šà¥€ यादी पहाणà¥à¤¯à¤¾à¤•à¤°à¥€à¤¤à¤¾ कृपया --help वापरा.\n"
-#: ../src/main.c:562
+#: ../src/main.c:568
#, c-format
msgid "%s. Please use --help to see a list of valid options.\n"
msgstr "%s. वैध परà¥à¤¯à¤¾à¤¯à¤šà¥€ सूची पहाणà¥à¤¯à¤¾à¤•à¤°à¥€à¤¤à¤¾ कृपया --help वापरा.\n"
@@ -1291,11 +1672,11 @@ msgstr "अपरिचीत लॉग सà¥à¤¤à¤° '%s'"
msgid "Unknown log domain '%s'"
msgstr "अपरिचीत लॉग डोमेन '%s'"
-#: ../src/named-manager/nm-named-manager.c:343
+#: ../src/dns-manager/nm-dns-manager.c:350
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr "NOTE: libc रिजॉलवà¥à¤¹à¤° 3 पेकà¥à¤·à¤¾ जासà¥à¤¤ नेमसरà¥à¤µà¥à¤¹à¤°à¥à¤¸à¥ करीता समरà¥à¤¥à¤¨ पà¥à¤°à¤µà¥‚ शकणार नाही."
-#: ../src/named-manager/nm-named-manager.c:345
+#: ../src/dns-manager/nm-dns-manager.c:352
msgid "The nameservers listed below may not be recognized."
msgstr "खालिल यादीतील नेमसरà¥à¤µà¥à¤¹à¤°à¥à¤¸à¥ अनोळखी राहतील."
@@ -1304,39 +1685,7 @@ msgstr "खालिल यादीतील नेमसरà¥à¤µà¥à¤¹à¤°à¥à
msgid "Auto %s"
msgstr "सà¥à¤µà¤¯à¤‚ %s"
-#: ../system-settings/plugins/ifcfg-rh/reader.c:3254
+#: ../system-settings/plugins/ifcfg-rh/reader.c:3275
msgid "System"
msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
-msgid "Connection sharing via a protected WiFi network"
-msgstr "सà¥à¤°à¤•à¥à¤·à¥€à¤¤ WiFi नेटवरà¥à¤• दà¥à¤µà¤¾à¤°à¥‡ जोडणीचे शेअरींग करा"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
-msgid "Connection sharing via an open WiFi network"
-msgstr "ओपन WiFi नेटवरà¥à¤• दà¥à¤µà¤¾à¤°à¥‡ कनेकà¥à¤¶à¤¨ शेअरींग करा"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
-msgid "Modify persistent system hostname"
-msgstr "परà¥à¤¸à¤¿à¤¸à¥à¤Ÿà¤‚ट पà¥à¤°à¤£à¤¾à¤²à¥€ यजमाननाव संपादीत करा"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
-msgid "Modify system connections"
-msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€ जà¥à¤³à¤µà¤£à¥€ संपादीत करा"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
-msgid "System policy prevents modification of system settings"
-msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€ करार, पà¥à¤°à¤£à¤¾à¤²à¥€ संयोजना संपादीत करणà¥à¤¯à¤¾à¤ªà¤¾à¤¸à¥‚न रोखतो"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
-msgid "System policy prevents modification of the persistent system hostname"
-msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€ करार परà¥à¤¸à¤¿à¤¸à¥à¤Ÿà¤‚ट पà¥à¤°à¤£à¤¾à¤²à¥€ यजमाननावाचे संपादन रोखत आहे"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
-msgid "System policy prevents sharing connections via a protected WiFi network"
-msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€ करार सà¥à¤°à¤•à¥à¤·à¥€à¤¤ WiFi नेटवरà¥à¤• दà¥à¤µà¤¾à¤°à¥‡ जोडणीचे शेअरींग रोखत आहे"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
-msgid "System policy prevents sharing connections via an open WiFi network"
-msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€ करार ओपन WiFi नेटवरà¥à¤• दà¥à¤µà¤¾à¤°à¥‡ जोडणीचे शेअरींग रोखत आहे"
-
diff --git a/po/nb.po b/po/nb.po
index fece349e5a..fdbcffebd8 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -76,11 +76,11 @@ msgstr ""
"# Flettet fra %s\n"
"\n"
-#: ../src/named-manager/nm-named-manager.c:256
+#: ../src/dns-manager/nm-dns-manager.c:256
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr "MERK: libc navneoppslag støtter ikke flere enn 3 navnetjenere."
-#: ../src/named-manager/nm-named-manager.c:258
+#: ../src/dns-manager/nm-dns-manager.c:258
msgid "The nameservers listed below may not be recognized."
msgstr "Navnetjenere listet under vil kanskje ikke bli gjenkjent."
diff --git a/po/nl.po b/po/nl.po
index 0d9b571ace..758746fcd3 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -87,13 +87,13 @@ msgstr ""
"# Samengevoegd vanuit %s\n"
"\n"
-#: ../src/named-manager/nm-named-manager.c:256
+#: ../src/dns-manager/nm-dns-manager.c:256
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr ""
"Merk op: de resolver van libc ondersteunt mogelijkerwijs niet meer dan 3 "
"nameservers."
-#: ../src/named-manager/nm-named-manager.c:258
+#: ../src/dns-manager/nm-dns-manager.c:258
msgid "The nameservers listed below may not be recognized."
msgstr "De naamservers hieronder worden mogelijk niet herkend."
diff --git a/po/oc.po b/po/oc.po
index df55c4a71e..bc7bc4a0d2 100644
--- a/po/oc.po
+++ b/po/oc.po
@@ -51,11 +51,11 @@ msgstr ""
msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgstr ""
-#: ../src/named-manager/nm-named-manager.c:117
+#: ../src/dns-manager/nm-dns-manager.c:117
msgid "NOTE: the glibc resolver does not support more than 3 nameservers."
msgstr ""
-#: ../src/named-manager/nm-named-manager.c:119
+#: ../src/dns-manager/nm-dns-manager.c:119
msgid "The nameservers listed below may not be recognized."
msgstr ""
diff --git a/po/or.po b/po/or.po
index d9fa2b7198..bba0d598c7 100644
--- a/po/or.po
+++ b/po/or.po
@@ -1,14 +1,14 @@
-# translation of or.po to Oriya
+# translation of NetworkManager.master.or.po to Oriya
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Manoj Kumar Giri <mgiri@redhat.com>, 2008, 2010.
msgid ""
msgstr ""
-"Project-Id-Version: or\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-06 14:31+0530\n"
-"PO-Revision-Date: 2010-05-07 12:43+0530\n"
+"Project-Id-Version: NetworkManager.master.or\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=NetworkManager&component=general\n"
+"POT-Creation-Date: 2010-08-10 03:25+0000\n"
+"PO-Revision-Date: 2010-08-10 12:47+0530\n"
"Last-Translator: Manoj Kumar Giri <mgiri@redhat.com>\n"
"Language-Team: Oriya <Translation-team-or@lists.sourceforge.net>\n"
"MIME-Version: 1.0\n"
@@ -21,76 +21,76 @@ msgstr ""
"\n"
"\n"
-#: ../cli/src/connections.c:59 ../cli/src/connections.c:74
-#: ../cli/src/devices.c:85 ../cli/src/devices.c:98 ../cli/src/devices.c:108
-#: ../cli/src/devices.c:118 ../cli/src/devices.c:131 ../cli/src/devices.c:142
-#: ../cli/src/devices.c:152
+#: ../cli/src/connections.c: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
msgid "NAME"
msgstr "NAME"
#. 0
-#: ../cli/src/connections.c:60 ../cli/src/connections.c:75
+#: ../cli/src/connections.c:61 ../cli/src/connections.c:76
msgid "UUID"
msgstr "UUID"
#. 1
-#: ../cli/src/connections.c:61
+#: ../cli/src/connections.c:62
msgid "DEVICES"
msgstr "DEVICES"
#. 2
-#: ../cli/src/connections.c:62 ../cli/src/connections.c:77
+#: ../cli/src/connections.c:63 ../cli/src/connections.c:78
msgid "SCOPE"
msgstr "SCOPE"
#. 3
-#: ../cli/src/connections.c:63
+#: ../cli/src/connections.c:64
msgid "DEFAULT"
msgstr "DEFAULT"
#. 4
-#: ../cli/src/connections.c:64
+#: ../cli/src/connections.c:65
msgid "DBUS-SERVICE"
msgstr "DBUS-SERVICE"
#. 5
-#: ../cli/src/connections.c:65
+#: ../cli/src/connections.c:66
msgid "SPEC-OBJECT"
msgstr "SPEC-OBJECT"
#. 6
-#: ../cli/src/connections.c:66
+#: ../cli/src/connections.c:67
msgid "VPN"
msgstr "VPN"
#. 1
#. 0
#. 1
-#: ../cli/src/connections.c:76 ../cli/src/devices.c:61 ../cli/src/devices.c:87
+#: ../cli/src/connections.c:77 ../cli/src/devices.c:62 ../cli/src/devices.c:90
msgid "TYPE"
msgstr "TYPE"
#. 3
-#: ../cli/src/connections.c:78
+#: ../cli/src/connections.c:79
msgid "TIMESTAMP"
msgstr "TIMESTAMP"
#. 4
-#: ../cli/src/connections.c:79
+#: ../cli/src/connections.c:80
msgid "TIMESTAMP-REAL"
msgstr "TIMESTAMP-REAL"
#. 5
-#: ../cli/src/connections.c:80
+#: ../cli/src/connections.c:81
msgid "AUTOCONNECT"
msgstr "AUTOCONNECT"
#. 6
-#: ../cli/src/connections.c:81
+#: ../cli/src/connections.c:82
msgid "READONLY"
msgstr "READONLY"
-#: ../cli/src/connections.c:157
+#: ../cli/src/connections.c:158
#, c-format
msgid ""
"Usage: nmcli con { COMMAND | help }\n"
@@ -111,514 +111,526 @@ msgstr ""
"<timeout>]\n"
" down id <id> | uuid <id>\n"
-#: ../cli/src/connections.c:197 ../cli/src/connections.c:536
+#: ../cli/src/connections.c:198 ../cli/src/connections.c:537
#, c-format
msgid "Error: 'con list': %s"
msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'con list': %s"
-#: ../cli/src/connections.c:199 ../cli/src/connections.c:538
+#: ../cli/src/connections.c:200 ../cli/src/connections.c:539
#, c-format
msgid "Error: 'con list': %s; allowed fields: %s"
msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'con list': %s; ଅନà­à¬®à¬¤à¬¿à¬ªà­à¬°à¬¾à¬ªà­à¬¤ କà­à¬·à­‡à¬¤à­à¬°: %s"
-#: ../cli/src/connections.c:207
+#: ../cli/src/connections.c:208
msgid "Connection details"
msgstr "ସଂଯୋଗ ବିବରଣୀ"
-#: ../cli/src/connections.c:381 ../cli/src/connections.c:601
+#: ../cli/src/connections.c:382 ../cli/src/connections.c:602
msgid "system"
msgstr "ତନà­à¬¤à­à¬°"
-#: ../cli/src/connections.c:381 ../cli/src/connections.c:601
+#: ../cli/src/connections.c:382 ../cli/src/connections.c:602
msgid "user"
msgstr "ଚାଳକ"
-#: ../cli/src/connections.c:383
+#: ../cli/src/connections.c:384
msgid "never"
msgstr "କଦାପି ନà­à¬¹à¬"
#. "CAPABILITIES"
#. Print header
#. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:384 ../cli/src/connections.c:385
-#: ../cli/src/connections.c:602 ../cli/src/connections.c:605
-#: ../cli/src/devices.c:388 ../cli/src/devices.c:513 ../cli/src/devices.c:539
-#: ../cli/src/devices.c:540 ../cli/src/devices.c:541 ../cli/src/devices.c:542
-#: ../cli/src/devices.c:543 ../cli/src/settings.c:504
-#: ../cli/src/settings.c:544 ../cli/src/settings.c:643
-#: ../cli/src/settings.c:912 ../cli/src/settings.c:913
-#: ../cli/src/settings.c:915 ../cli/src/settings.c:917
-#: ../cli/src/settings.c:1042 ../cli/src/settings.c:1043
-#: ../cli/src/settings.c:1044 ../cli/src/settings.c:1123
-#: ../cli/src/settings.c:1124 ../cli/src/settings.c:1125
-#: ../cli/src/settings.c:1126 ../cli/src/settings.c:1127
-#: ../cli/src/settings.c:1128 ../cli/src/settings.c:1129
-#: ../cli/src/settings.c:1130 ../cli/src/settings.c:1131
-#: ../cli/src/settings.c:1132 ../cli/src/settings.c:1133
-#: ../cli/src/settings.c:1134 ../cli/src/settings.c:1135
-#: ../cli/src/settings.c:1210
+#: ../cli/src/connections.c: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
msgid "yes"
msgstr "ହà¬"
-#: ../cli/src/connections.c:384 ../cli/src/connections.c:385
-#: ../cli/src/connections.c:602 ../cli/src/connections.c:605
-#: ../cli/src/devices.c:388 ../cli/src/devices.c:513 ../cli/src/devices.c:539
-#: ../cli/src/devices.c:540 ../cli/src/devices.c:541 ../cli/src/devices.c:542
-#: ../cli/src/devices.c:543 ../cli/src/settings.c:504
-#: ../cli/src/settings.c:506 ../cli/src/settings.c:544
-#: ../cli/src/settings.c:643 ../cli/src/settings.c:912
-#: ../cli/src/settings.c:913 ../cli/src/settings.c:915
-#: ../cli/src/settings.c:917 ../cli/src/settings.c:1042
-#: ../cli/src/settings.c:1043 ../cli/src/settings.c:1044
-#: ../cli/src/settings.c:1123 ../cli/src/settings.c:1124
-#: ../cli/src/settings.c:1125 ../cli/src/settings.c:1126
-#: ../cli/src/settings.c:1127 ../cli/src/settings.c:1128
-#: ../cli/src/settings.c:1129 ../cli/src/settings.c:1130
-#: ../cli/src/settings.c:1131 ../cli/src/settings.c:1132
-#: ../cli/src/settings.c:1133 ../cli/src/settings.c:1134
-#: ../cli/src/settings.c:1135 ../cli/src/settings.c:1210
+#: ../cli/src/connections.c: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
msgid "no"
msgstr "ନାà¬"
-#: ../cli/src/connections.c:457 ../cli/src/connections.c:500
+#: ../cli/src/connections.c:458 ../cli/src/connections.c:501
msgid "System connections"
msgstr "ତନà­à¬¤à­à¬° ସଂଯୋଗଗà­à¬¡à¬¼à¬¿à¬•"
-#: ../cli/src/connections.c:462 ../cli/src/connections.c:513
+#: ../cli/src/connections.c:463 ../cli/src/connections.c:514
msgid "User connections"
msgstr "ଚାଳକ ସଂଯୋଗଗà­à¬¡à¬¼à¬¿à¬•"
-#: ../cli/src/connections.c:474 ../cli/src/connections.c:1334
-#: ../cli/src/connections.c:1350 ../cli/src/connections.c:1359
-#: ../cli/src/connections.c:1370 ../cli/src/connections.c:1452
-#: ../cli/src/devices.c:864 ../cli/src/devices.c:874 ../cli/src/devices.c:973
-#: ../cli/src/devices.c:980
+#: ../cli/src/connections.c: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
#, c-format
msgid "Error: %s argument is missing."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: %s ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° ଅନà­à¬ªà¬¸à­à¬¥à¬¿à¬¤ ଅଛି।"
-#: ../cli/src/connections.c:487
+#: ../cli/src/connections.c:488
#, c-format
msgid "Error: %s - no such connection."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: %s - à¬à¬ªà¬°à¬¿ କୌଣସି ସଂଯୋଗ ନାହିà¬à¥¤"
-#: ../cli/src/connections.c:519 ../cli/src/connections.c:1383
-#: ../cli/src/connections.c:1470 ../cli/src/devices.c:687
-#: ../cli/src/devices.c:754 ../cli/src/devices.c:888 ../cli/src/devices.c:986
+#: ../cli/src/connections.c: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
#, c-format
msgid "Unknown parameter: %s\n"
msgstr "ଅଜଣା ପà­à¬°à¬¾à¬šà¬³: %s\n"
-#: ../cli/src/connections.c:528
+#: ../cli/src/connections.c:529
#, c-format
msgid "Error: no valid parameter specified."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: କୌଣସି ବୈଧ ପà­à¬°à¬¾à¬šà¬³ ଉଲà­à¬²à­‡à¬– ହୋଇନାହିà¬à¥¤"
-#: ../cli/src/connections.c:543 ../cli/src/connections.c:1572
-#: ../cli/src/devices.c:1192 ../cli/src/network-manager.c:274
+#: ../cli/src/connections.c:544 ../cli/src/connections.c:1577
+#: ../cli/src/devices.c:1293 ../cli/src/network-manager.c:274
#, c-format
msgid "Error: %s."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: %s."
-#: ../cli/src/connections.c:649
+#: ../cli/src/connections.c:650
#, c-format
msgid "Error: 'con status': %s"
msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'con status': %s"
-#: ../cli/src/connections.c:651
+#: ../cli/src/connections.c:652
#, c-format
msgid "Error: 'con status': %s; allowed fields: %s"
msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'con status': %s; ଅନà­à¬®à¬¤à¬¿à¬ªà­à¬°à¬¾à¬ªà­à¬¤ କà­à¬·à­‡à¬¤à­à¬°: %s"
-#: ../cli/src/connections.c:658
+#: ../cli/src/connections.c:659
msgid "Active connections"
msgstr "ସକà­à¬°à¬¿à­Ÿ ସଂଯୋଗଗà­à¬¡à¬¼à¬¿à¬•"
-#: ../cli/src/connections.c:1026
+#: ../cli/src/connections.c:1027
#, c-format
msgid "no active connection on device '%s'"
msgstr "ଉପକରଣ '%s' ରେ କୌଣସି ସକà­à¬°à¬¿à­Ÿ ସଂଯୋଗ ନାହିà¬"
-#: ../cli/src/connections.c:1034
+#: ../cli/src/connections.c:1035
#, c-format
msgid "no active connection or device"
msgstr "କୌଣସି ସକà­à¬°à¬¿à­Ÿ ସଂଯୋଗ କିମà­à¬¬à¬¾ ଉପକରଣ ନାହିà¬"
-#: ../cli/src/connections.c:1084
+#: ../cli/src/connections.c:1085
#, c-format
msgid "device '%s' not compatible with connection '%s'"
msgstr "ଉପକରଣ '%s' ସଂଯୋଗ '%s' ସହିତ ସà­à¬¸à¬™à­à¬—ତ ନà­à¬¹à¬"
-#: ../cli/src/connections.c:1086
+#: ../cli/src/connections.c:1087
#, c-format
msgid "no device found for connection '%s'"
msgstr "ସଂଯୋଗ '%s' ପାଇଠକୌଣସି ଉପକରଣ ମିଳିଲା ନାହିà¬"
-#: ../cli/src/connections.c:1097
+#: ../cli/src/connections.c:1098
msgid "activating"
msgstr "ସକà­à¬°à¬¿à­Ÿ କରà­à¬…ଛି"
-#: ../cli/src/connections.c:1099
+#: ../cli/src/connections.c:1100
msgid "activated"
msgstr "ସକà­à¬°à¬¿à­Ÿ ହୋଇସାରିଛି"
-#: ../cli/src/connections.c:1102 ../cli/src/connections.c:1125
-#: ../cli/src/connections.c:1158 ../cli/src/devices.c:224
-#: ../cli/src/devices.c:514 ../cli/src/network-manager.c:92
-#: ../cli/src/network-manager.c:145 ../cli/src/settings.c:469
+#: ../cli/src/connections.c: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
msgid "unknown"
msgstr "ଅଜଣା"
-#: ../cli/src/connections.c:1111
+#: ../cli/src/connections.c:1112
msgid "VPN connecting (prepare)"
msgstr "VPN ସଂଯୋଗ କରà­à¬…ଛି (ପà­à¬°à¬¸à­à¬¤à­à¬¤)"
-#: ../cli/src/connections.c:1113
+#: ../cli/src/connections.c:1114
msgid "VPN connecting (need authentication)"
msgstr "VPN ସଂଯୋଗ କରà­à¬…ଛି (ବୈଧିକରଣ ଆବଶà­à­Ÿà¬•)"
-#: ../cli/src/connections.c:1115
+#: ../cli/src/connections.c:1116
msgid "VPN connecting"
msgstr "VPN ସଂଯୋଗ କରà­à¬…ଛି"
-#: ../cli/src/connections.c:1117
+#: ../cli/src/connections.c:1118
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN ସଂଯୋଗ କରà­à¬…ଛି (IP ସଂରଚନା ଗà­à¬°à¬¹à¬£ କରà­à¬…ଛି)"
-#: ../cli/src/connections.c:1119
+#: ../cli/src/connections.c:1120
msgid "VPN connected"
msgstr "VPN ସଂଯà­à¬•à­à¬¤ ହୋଇଛି"
-#: ../cli/src/connections.c:1121
+#: ../cli/src/connections.c:1122
msgid "VPN connection failed"
msgstr "VPN ସଂଯୋଗ ବିଫଳ ହୋଇଛି"
-#: ../cli/src/connections.c:1123
+#: ../cli/src/connections.c:1124
msgid "VPN disconnected"
msgstr "VPN ସଂଯୋଗ ବିଚà­à¬›à¬¿à¬¨à­à¬¨ ହୋଇଛି"
-#: ../cli/src/connections.c:1134
+#: ../cli/src/connections.c:1135
msgid "unknown reason"
msgstr "ଅଜଣା କାରଣ"
-#: ../cli/src/connections.c:1136
+#: ../cli/src/connections.c:1137
msgid "none"
msgstr "କିଛି ନà­à¬¹à­‡à¬"
-#: ../cli/src/connections.c:1138
+#: ../cli/src/connections.c:1139
msgid "the user was disconnected"
msgstr "ଚାଳକଟି ସଂଯୋଗ ବିଚà­à¬›à¬¿à¬¨à­à¬¨ ହୋଇଥିଲା"
-#: ../cli/src/connections.c:1140
+#: ../cli/src/connections.c:1141
msgid "the base network connection was interrupted"
msgstr "ମୂଳ ନେଟୱରà­à¬• ସଂଯୋଗଟି ବାଧାପà­à¬°à¬¾à¬ªà­à¬¤ ହୋଇଥିଲା"
-#: ../cli/src/connections.c:1142
+#: ../cli/src/connections.c:1143
msgid "the VPN service stopped unexpectedly"
msgstr "VPN ସରà­à¬­à¬¿à¬¸ ଅପà­à¬°à¬¤à­à­Ÿà¬¾à¬¶à¬¿à¬¤ ଭାବରେ ବନà­à¬¦ ହୋଇଯାଇଛି"
-#: ../cli/src/connections.c:1144
+#: ../cli/src/connections.c:1145
msgid "the VPN service returned invalid configuration"
msgstr "VPN ସରà­à¬­à¬¿à¬¸ ଅବୈଧ ସଂରଚନା ଫେରାଇଛି"
-#: ../cli/src/connections.c:1146
+#: ../cli/src/connections.c:1147
msgid "the connection attempt timed out"
msgstr "ସଂଯୋଗ ସମୟ ସମାପà­à¬¤ ପାଇଠଚେଷà­à¬Ÿà¬¾à¬•à¬°à¬¿à¬›à¬¿"
-#: ../cli/src/connections.c:1148
+#: ../cli/src/connections.c:1149
msgid "the VPN service did not start in time"
msgstr "VPN ସରà­à¬­à¬¿à¬¸ ଠିକ ସମୟରେ ଆରମà­à¬­ ହୋଇନଥିଲା"
-#: ../cli/src/connections.c:1150
+#: ../cli/src/connections.c:1151
msgid "the VPN service failed to start"
msgstr "VPN ସରà­à¬­à¬¿à¬¸ ଆରମà­à¬­ ହେବାରେ ବିଫଳ ହୋଇଛି"
-#: ../cli/src/connections.c:1152
+#: ../cli/src/connections.c:1153
msgid "no valid VPN secrets"
msgstr "କୌଣସି ବୈଧ VPN ଗà­à¬ªà­à¬¤ ତଥà­à­Ÿ ନାହିà¬"
-#: ../cli/src/connections.c:1154
+#: ../cli/src/connections.c:1155
msgid "invalid VPN secrets"
msgstr "ଅବୈଧ VPN ଗà­à¬ªà­à¬¤ ତଥà­à­Ÿà¬—à­à¬¡à¬¼à¬¿à¬•"
-#: ../cli/src/connections.c:1156
+#: ../cli/src/connections.c:1157
msgid "the connection was removed"
msgstr "ସଂଯୋଗକୠକଢ଼ାଯାଇଛି"
-#: ../cli/src/connections.c:1170
+#: ../cli/src/connections.c:1171
#, c-format
msgid "state: %s\n"
msgstr "ଅବସà­à¬¥à¬¾: %s\n"
-#: ../cli/src/connections.c:1173 ../cli/src/connections.c:1199
+#: ../cli/src/connections.c:1174 ../cli/src/connections.c:1200
#, c-format
msgid "Connection activated\n"
msgstr "ସଂଯୋଗ ସକà­à¬°à¬¿à­Ÿ ହୋଇଛି\n"
-#: ../cli/src/connections.c:1176
+#: ../cli/src/connections.c:1177
#, c-format
msgid "Error: Connection activation failed."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: ସଂଯୋଗ ସକà­à¬°à¬¿à­Ÿà¬£ ବିଫଳ ହୋଇଛି।"
-#: ../cli/src/connections.c:1195
+#: ../cli/src/connections.c:1196
#, c-format
msgid "state: %s (%d)\n"
msgstr "ଅବସà­à¬¥à¬¾: %s (%d)\n"
-#: ../cli/src/connections.c:1205
+#: ../cli/src/connections.c:1206
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: ସଂଯୋଗ ସକà­à¬°à¬¿à­Ÿà¬£ ବିଫଳ ହୋଇଛି: %s."
-#: ../cli/src/connections.c:1222 ../cli/src/devices.c:811
+#: ../cli/src/connections.c:1223 ../cli/src/devices.c:909
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: ସମୟ ସମାପà­à¬¤ %d ସେକଣà­à¬¡ ବିତିଯାଇଛି।"
-#: ../cli/src/connections.c:1265
+#: ../cli/src/connections.c:1266
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "ତà­à¬°à­à¬Ÿà¬¿: ସଂଯୋଗ ସକà­à¬°à¬¿à­Ÿà¬£ ବିଫଳ ହୋଇଛି: %s"
-#: ../cli/src/connections.c:1279
+#: ../cli/src/connections.c:1280
#, c-format
msgid "Error: Obtaining active connection for '%s' failed."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: '%s' ପାଇଠସକà­à¬°à¬¿à­Ÿ ସଂଯୋଗ ଧାରଣ କରିବାରେ ବିଫଳ ହୋଇଛି।"
-#: ../cli/src/connections.c:1288
+#: ../cli/src/connections.c:1289
#, c-format
msgid "Active connection state: %s\n"
msgstr "ସକà­à¬°à¬¿à­Ÿ ସଂଯୋଗ ଅବସà­à¬¥à¬¾: %s\n"
-#: ../cli/src/connections.c:1289
+#: ../cli/src/connections.c:1290
#, c-format
msgid "Active connection path: %s\n"
msgstr "ସକà­à¬°à¬¿à­Ÿ ସଂଯୋଗ ପଥ: %s\n"
-#: ../cli/src/connections.c:1343 ../cli/src/connections.c:1461
+#: ../cli/src/connections.c:1344 ../cli/src/connections.c:1465
#, c-format
msgid "Error: Unknown connection: %s."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: ଅଜଣା ସଂଯୋଗ: %s."
-#: ../cli/src/connections.c:1378 ../cli/src/devices.c:882
+#: ../cli/src/connections.c:1379 ../cli/src/devices.c:980
#, c-format
msgid "Error: timeout value '%s' is not valid."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: ସମୟ ସମାପà­à¬¤ ମୂଲà­à­Ÿ '%s' ଟି ବୈଧ ନà­à¬¹à¬à¥¤"
-#: ../cli/src/connections.c:1391 ../cli/src/connections.c:1478
+#: ../cli/src/connections.c:1392 ../cli/src/connections.c:1482
#, c-format
msgid "Error: id or uuid has to be specified."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: id କିମà­à¬¬à¬¾ uuid କୠଉଲà­à¬²à­‡à¬– କରିବା ଉଚିତ।"
-#: ../cli/src/connections.c:1411
+#: ../cli/src/connections.c:1412
#, c-format
msgid "Error: No suitable device found: %s."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: କୌଣସି ଉପଯà­à¬•à­à¬¤ ଉପକରଣ ମିଳିଲାନାହିà¬: %s."
-#: ../cli/src/connections.c:1413
+#: ../cli/src/connections.c:1414
#, c-format
msgid "Error: No suitable device found."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: କୌଣସି ଉପଯà­à¬•à­à¬¤ ଉପକରଣ ମିଳିଲାନାହିà¬à¥¤"
-#: ../cli/src/connections.c:1505
+#: ../cli/src/connections.c:1509
#, c-format
msgid "Warning: Connection not active\n"
msgstr "ଚେତାବନୀ: ସଂଯୋଗ ସକà­à¬°à¬¿à­Ÿ ନà­à¬¹à¬\n"
-#: ../cli/src/connections.c:1561
+#: ../cli/src/connections.c:1566
#, c-format
msgid "Error: 'con' command '%s' is not valid."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'con' ନିରà­à¬¦à­à¬¦à­‡à¬¶ '%s' ଟି ବୈଧ ନà­à¬¹à¬à¥¤"
-#: ../cli/src/connections.c:1597
+#: ../cli/src/connections.c:1602
#, c-format
msgid "Error: could not connect to D-Bus."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: D-Bus ସହିତ ସଂଯà­à¬•à­à¬¤ ହୋଇପାରିଲା ନାହିà¬à¥¤"
-#: ../cli/src/connections.c:1604
+#: ../cli/src/connections.c:1609
#, c-format
msgid "Error: Could not get system settings."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: ତନà­à¬¤à­à¬° ସଂରଚନା ପାଇଲା ନାହିà¬à¥¤"
-#: ../cli/src/connections.c:1612
+#: ../cli/src/connections.c:1617
#, c-format
msgid "Error: Could not get user settings."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: ଚାଳକ ସଂରଚନା ପାଇଲା ନାହିà¬à¥¤"
-#: ../cli/src/connections.c:1622
+#: ../cli/src/connections.c:1627
#, c-format
msgid "Error: Can't obtain connections: settings services are not running."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: ସଂଯୋଗ ଧାରଣ କରିପାରିବେ ନାହିà¬: ବିନà­à­Ÿà¬¾à¬¸ ସରà­à¬­à¬¿à¬¸à¬—à­à¬¡à¬¼à¬¿à¬• ଚାଲà­à¬¨à¬¾à¬¹à¬¿à¬à¥¤"
#. 0
#. 9
-#: ../cli/src/devices.c:60 ../cli/src/devices.c:86 ../cli/src/devices.c:162
+#: ../cli/src/devices.c:61 ../cli/src/devices.c:89 ../cli/src/devices.c:184
msgid "DEVICE"
msgstr "DEVICE"
#. 1
#. 4
#. 0
-#: ../cli/src/devices.c:62 ../cli/src/devices.c:90
+#: ../cli/src/devices.c:63 ../cli/src/devices.c:93
#: ../cli/src/network-manager.c:36
msgid "STATE"
msgstr "STATE"
-#: ../cli/src/devices.c:71
+#: ../cli/src/devices.c:72
msgid "GENERAL"
msgstr "GENERAL"
#. 0
-#: ../cli/src/devices.c:72
+#: ../cli/src/devices.c:73
msgid "CAPABILITIES"
msgstr "CAPABILITIES"
#. 1
-#: ../cli/src/devices.c:73
+#: ../cli/src/devices.c:74
msgid "WIFI-PROPERTIES"
msgstr "WIFI-PROPERTIES"
#. 2
-#: ../cli/src/devices.c:74
+#: ../cli/src/devices.c:75
msgid "AP"
msgstr "AP"
#. 3
-#: ../cli/src/devices.c:75
+#: ../cli/src/devices.c:76
msgid "WIRED-PROPERTIES"
msgstr "WIRED-PROPERTIES"
#. 4
-#: ../cli/src/devices.c:76
+#: ../cli/src/devices.c:77
msgid "IP4-SETTINGS"
msgstr "IP4-SETTINGS"
#. 5
-#: ../cli/src/devices.c:77
+#: ../cli/src/devices.c:78
msgid "IP4-DNS"
msgstr "IP4-DNS"
+#. 6
+#: ../cli/src/devices.c:79
+#| msgid "IP4-SETTINGS"
+msgid "IP6-SETTINGS"
+msgstr "IP6-SETTINGS"
+
+#. 7
+#: ../cli/src/devices.c:80
+#| msgid "IP4-DNS"
+msgid "IP6-DNS"
+msgstr "IP6-DNS"
+
#. 2
-#: ../cli/src/devices.c:88
+#: ../cli/src/devices.c:91
msgid "DRIVER"
msgstr "DRIVER"
#. 3
-#: ../cli/src/devices.c:89
+#: ../cli/src/devices.c:92
msgid "HWADDR"
msgstr "HWADDR"
#. 0
-#: ../cli/src/devices.c:99
+#: ../cli/src/devices.c:102
msgid "CARRIER-DETECT"
msgstr "CARRIER-DETECT"
#. 1
-#: ../cli/src/devices.c:100
+#: ../cli/src/devices.c:103
msgid "SPEED"
msgstr "SPEED"
#. 0
-#: ../cli/src/devices.c:109
+#: ../cli/src/devices.c:112
msgid "CARRIER"
msgstr "CARRIER"
#. 0
-#: ../cli/src/devices.c:119
+#: ../cli/src/devices.c:122
msgid "WEP"
msgstr "WEP"
#. 1
-#: ../cli/src/devices.c:120
+#: ../cli/src/devices.c:123
msgid "WPA"
msgstr "WPA"
#. 2
-#: ../cli/src/devices.c:121
+#: ../cli/src/devices.c:124
msgid "WPA2"
msgstr "WPA2"
#. 3
-#: ../cli/src/devices.c:122
+#: ../cli/src/devices.c:125
msgid "TKIP"
msgstr "TKIP"
#. 4
-#: ../cli/src/devices.c:123
+#: ../cli/src/devices.c:126
msgid "CCMP"
msgstr "CCMP"
#. 0
-#: ../cli/src/devices.c:132
+#: ../cli/src/devices.c:135 ../cli/src/devices.c:146
msgid "ADDRESS"
msgstr "ADDRESS"
#. 1
-#: ../cli/src/devices.c:133
+#: ../cli/src/devices.c:136 ../cli/src/devices.c:147
msgid "PREFIX"
msgstr "PREFIX"
#. 2
-#: ../cli/src/devices.c:134
+#: ../cli/src/devices.c:137 ../cli/src/devices.c:148
msgid "GATEWAY"
msgstr "GATEWAY"
#. 0
-#: ../cli/src/devices.c:143
+#: ../cli/src/devices.c:157 ../cli/src/devices.c:166
msgid "DNS"
msgstr "DNS"
#. 0
-#: ../cli/src/devices.c:153
+#: ../cli/src/devices.c:175
msgid "SSID"
msgstr "SSID"
#. 1
-#: ../cli/src/devices.c:154
+#: ../cli/src/devices.c:176
msgid "BSSID"
msgstr "BSSID"
#. 2
-#: ../cli/src/devices.c:155
+#: ../cli/src/devices.c:177
msgid "MODE"
msgstr "MODE"
#. 3
-#: ../cli/src/devices.c:156
+#: ../cli/src/devices.c:178
msgid "FREQ"
msgstr "FREQ"
#. 4
-#: ../cli/src/devices.c:157
+#: ../cli/src/devices.c:179
msgid "RATE"
msgstr "RATE"
#. 5
-#: ../cli/src/devices.c:158
+#: ../cli/src/devices.c:180
msgid "SIGNAL"
msgstr "SIGNAL"
#. 6
-#: ../cli/src/devices.c:159
+#: ../cli/src/devices.c:181
msgid "SECURITY"
msgstr "SECURITY"
#. 7
-#: ../cli/src/devices.c:160
+#: ../cli/src/devices.c:182
msgid "WPA-FLAGS"
msgstr "WPA-FLAGS"
#. 8
-#: ../cli/src/devices.c:161
+#: ../cli/src/devices.c:183
msgid "RSN-FLAGS"
msgstr "RSN-FLAGS"
#. 10
-#: ../cli/src/devices.c:163
+#: ../cli/src/devices.c:185
msgid "ACTIVE"
msgstr "ACTIVE"
-#: ../cli/src/devices.c:186
+#: ../cli/src/devices.c:208
#, c-format
msgid ""
"Usage: nmcli dev { COMMAND | help }\n"
@@ -641,204 +653,205 @@ msgstr ""
" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
"\n"
-#: ../cli/src/devices.c:206
+#: ../cli/src/devices.c:228
msgid "unmanaged"
msgstr "ଅପରିଚାଳିତ"
-#: ../cli/src/devices.c:208
+#: ../cli/src/devices.c:230
msgid "unavailable"
msgstr "ଅନà­à¬ªà¬²à¬¬à­à¬§"
-#: ../cli/src/devices.c:210 ../cli/src/network-manager.c:89
+#: ../cli/src/devices.c:232 ../cli/src/network-manager.c:89
msgid "disconnected"
msgstr "ସଂଯୋଗ ବିଚà­à¬›à¬¿à¬¨à­à¬¨ ହୋଇଛି"
-#: ../cli/src/devices.c:212
+#: ../cli/src/devices.c:234
msgid "connecting (prepare)"
msgstr "ସଂଯୋଗ କରà­à¬…ଛି (ପà­à¬°à¬¸à­à¬¤à­à¬¤)"
-#: ../cli/src/devices.c:214
+#: ../cli/src/devices.c:236
msgid "connecting (configuring)"
msgstr "ସଂଯୋଗ କରà­à¬…ଛି (ବିନà­à­Ÿà¬¾à¬¸ କରà­à¬…ଛି)"
-#: ../cli/src/devices.c:216
+#: ../cli/src/devices.c:238
msgid "connecting (need authentication)"
msgstr "ସଂଯୋଗ କରà­à¬…ଛି (ବୈଧିକରଣ ଆବଶà­à­Ÿà¬•)"
-#: ../cli/src/devices.c:218
+#: ../cli/src/devices.c:240
msgid "connecting (getting IP configuration)"
msgstr "ସଂଯୋଗ କରà­à¬…ଛି (IP ସଂରଚନା ଗà­à¬°à¬¹à¬£ କରà­à¬…ଛି)"
-#: ../cli/src/devices.c:220 ../cli/src/network-manager.c:87
+#: ../cli/src/devices.c:242 ../cli/src/network-manager.c:87
msgid "connected"
msgstr "ସଂଯୋଗ ସà­à¬¥à¬¾à¬ªà¬¿à¬¤ ହେଲା"
-#: ../cli/src/devices.c:222
+#: ../cli/src/devices.c:244
msgid "connection failed"
msgstr "ସଂଯୋଗ ବିଫଳ ହୋଇଛି"
-#: ../cli/src/devices.c:245 ../cli/src/devices.c:380
+#: ../cli/src/devices.c:267 ../cli/src/devices.c:424
msgid "Unknown"
msgstr "ଅଜଣା"
-#: ../cli/src/devices.c:277
+#: ../cli/src/devices.c:299
msgid "(none)"
msgstr "(କିଛି ନାହିà¬)"
-#: ../cli/src/devices.c:302
+#: ../cli/src/devices.c:324
#, c-format
msgid "%s: error converting IP4 address 0x%X"
msgstr "%s: IP4 ଠିକଣା 0x%X କୠପରିବରà­à¬¤à­à¬¤à¬¨ କରିବାରେ ତà­à¬°à­à¬Ÿà¬¿"
-#: ../cli/src/devices.c:349
+#: ../cli/src/devices.c:393
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:350
+#: ../cli/src/devices.c:394
#, c-format
msgid "%u MB/s"
msgstr "%u MB/s"
-#: ../cli/src/devices.c:359
+#: ../cli/src/devices.c:403
msgid "Encrypted: "
msgstr "ସଂଗà­à¬ªà­à¬¤: "
-#: ../cli/src/devices.c:364
+#: ../cli/src/devices.c:408
msgid "WEP "
msgstr "WEP "
-#: ../cli/src/devices.c:366
+#: ../cli/src/devices.c:410
msgid "WPA "
msgstr "WPA "
-#: ../cli/src/devices.c:368
+#: ../cli/src/devices.c:412
msgid "WPA2 "
msgstr "WPA2 "
-#: ../cli/src/devices.c:371
+#: ../cli/src/devices.c:415
msgid "Enterprise "
msgstr "ବାଣିଜà­à­Ÿà¬¿à¬•"
-#: ../cli/src/devices.c:380
+#: ../cli/src/devices.c:424
msgid "Ad-Hoc"
msgstr "à¬à¬¡-ହୋକ"
-#: ../cli/src/devices.c:380
+#: ../cli/src/devices.c:424
msgid "Infrastructure"
msgstr "ଅବସଂରଚନା"
-#: ../cli/src/devices.c:442
+#: ../cli/src/devices.c:486
#, c-format
msgid "Error: 'dev list': %s"
msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'dev list': %s"
-#: ../cli/src/devices.c:444
+#: ../cli/src/devices.c:488
#, c-format
msgid "Error: 'dev list': %s; allowed fields: %s"
msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'dev list': %s; ଅନà­à¬®à¬¤à¬¿à¬ªà­à¬°à¬¾à¬ªà­à¬¤ କà­à¬·à­‡à¬¤à­à¬°à¬—à­à¬¡à¬¼à¬¿à¬•: %s"
-#: ../cli/src/devices.c:453
+#: ../cli/src/devices.c:497
msgid "Device details"
msgstr "ଉପକରଣ ବିବରଣୀ"
-#: ../cli/src/devices.c:483 ../cli/src/devices.c:827
+#: ../cli/src/devices.c:527 ../cli/src/devices.c:925
msgid "(unknown)"
msgstr "(ଅଜଣା)"
-#: ../cli/src/devices.c:484
+#: ../cli/src/devices.c:528
msgid "unknown)"
msgstr "ଅଜଣା)"
-#: ../cli/src/devices.c:510
+#: ../cli/src/devices.c:554
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
#. Print header
#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:583
+#: ../cli/src/devices.c:627
msgid "on"
msgstr "ଚାଲà­"
-#: ../cli/src/devices.c:583
+#: ../cli/src/devices.c:627
msgid "off"
msgstr "ବନà­à¬¦"
-#: ../cli/src/devices.c:710
+#: ../cli/src/devices.c:808
#, c-format
msgid "Error: 'dev status': %s"
msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'dev status': %s"
-#: ../cli/src/devices.c:712
+#: ../cli/src/devices.c:810
#, c-format
msgid "Error: 'dev status': %s; allowed fields: %s"
msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'dev status': %s; ଅନà­à¬®à¬¤à¬¿à¬ªà­à¬°à¬¾à¬ªà­à¬¤ କà­à¬·à­‡à¬¤à­à¬°à¬—à­à¬¡à¬¼à¬¿à¬•: %s"
-#: ../cli/src/devices.c:719
+#: ../cli/src/devices.c:817
msgid "Status of devices"
msgstr "ଉପକରଣର ସà­à¬¥à¬¿à¬¤à¬¿"
-#: ../cli/src/devices.c:747
+#: ../cli/src/devices.c:845
#, c-format
msgid "Error: '%s' argument is missing."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: '%s' ସà­à­±à¬¤à¬¨à­à¬¤à­à¬°à¬šà¬° ଅନà­à¬ªà¬¸à­à¬¥à¬¿à¬¤à¥¤"
-#: ../cli/src/devices.c:776 ../cli/src/devices.c:915 ../cli/src/devices.c:1035
+#: ../cli/src/devices.c:874 ../cli/src/devices.c:1013
+#: ../cli/src/devices.c:1136
#, c-format
msgid "Error: Device '%s' not found."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: ଉପକରଣ '%s' ମିଳିଲା ନାହିà¬à¥¤"
-#: ../cli/src/devices.c:799
+#: ../cli/src/devices.c:897
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "ସଫଳ: ଉପକରଣ '%s' ସଫଳତାର ସହିତ ସଂଯୋଗ ବିଚà­à¬›à¬¿à¬¨à­à¬¨ ହୋଇଛି।"
-#: ../cli/src/devices.c:824
+#: ../cli/src/devices.c:922
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "ତà­à¬°à­à¬Ÿà¬¿: ଉପକରଣ '%s' (%s) ସଂଯୋଗ ବିଚà­à¬›à¬¿à¬¨à­à¬¨ ବିଫଳ ହୋଇଛି: %s"
-#: ../cli/src/devices.c:832
+#: ../cli/src/devices.c:930
#, c-format
msgid "Device state: %d (%s)\n"
msgstr "ଉପକରଣ ସà­à¬¥à¬¿à¬¤à¬¿: %d (%s)\n"
-#: ../cli/src/devices.c:896
+#: ../cli/src/devices.c:994
#, c-format
msgid "Error: iface has to be specified."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: iface କୠଉଲà­à¬²à­‡à¬– କରାଯିବା ଉଚିତ।"
-#: ../cli/src/devices.c:1011
+#: ../cli/src/devices.c:1112
#, c-format
msgid "Error: 'dev wifi': %s"
msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'dev wifi': %s"
-#: ../cli/src/devices.c:1013
+#: ../cli/src/devices.c:1114
#, c-format
msgid "Error: 'dev wifi': %s; allowed fields: %s"
msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'dev wifi': %s; ଅନà­à¬®à¬¤à¬¿à¬ªà­à¬°à¬¾à¬ªà­à¬¤ କà­à¬·à­‡à¬¤à­à¬°à¬—à­à¬¡à¬¼à¬¿à¬•: %s"
-#: ../cli/src/devices.c:1020
+#: ../cli/src/devices.c:1121
msgid "WiFi scan list"
msgstr "WiFi କà­à¬°à¬®à¬¬à­€à¬•à­à¬·à¬£ ତାଲିକା"
-#: ../cli/src/devices.c:1055 ../cli/src/devices.c:1109
+#: ../cli/src/devices.c:1156 ../cli/src/devices.c:1210
#, c-format
msgid "Error: Access point with hwaddr '%s' not found."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: hwaddr '%s' ସହିତ ଅଭିଗମà­à­Ÿà¬¤à¬¾ ବିନà­à¬¦à­ ମିଳିଲା ନାହିà¬à¥¤"
-#: ../cli/src/devices.c:1072
+#: ../cli/src/devices.c:1173
#, c-format
msgid "Error: Device '%s' is not a WiFi device."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: ଉପକରଣ '%s' ଟି ଗୋଟିଠWiFi ଉପକରଣ ନà­à¬¹à¬à¥¤"
-#: ../cli/src/devices.c:1136
+#: ../cli/src/devices.c:1237
#, c-format
msgid "Error: 'dev wifi' command '%s' is not valid."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'dev wifi' ନିରà­à¬¦à­à¬¦à­‡à¬¶ '%s' ଟି ବୈଧ ନà­à¬¹à¬à¥¤"
-#: ../cli/src/devices.c:1183
+#: ../cli/src/devices.c:1284
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "ତà­à¬°à­à¬Ÿà¬¿: 'dev' ନିରà­à¬¦à­à¬¦à­‡à¬¶ '%s' ଟି ବୈଧ ନà­à¬¹à¬à¥¤"
@@ -1066,78 +1079,79 @@ msgstr "ତà­à¬°à­à¬Ÿà¬¿: NetworkManager ସହିତ ସଂଯୋଗ ସà­à¬
msgid "Success"
msgstr "ସଫଳତା"
-#: ../cli/src/settings.c:407
+#: ../cli/src/settings.c:411
#, c-format
msgid "%d (hex-ascii-key)"
msgstr "%d (hex-ascii-key)"
-#: ../cli/src/settings.c:409
+#: ../cli/src/settings.c:413
#, c-format
msgid "%d (104/128-bit passphrase)"
msgstr "%d (104/128-ବିଟ ପà­à¬°à¬¬à­‡à¬¶ ସଂକେତ ବାକà­à­Ÿà¬¾à¬‚ଶ)"
-#: ../cli/src/settings.c:412
+#: ../cli/src/settings.c:416
#, c-format
msgid "%d (unknown)"
msgstr "%d (ଅଜଣା)"
-#: ../cli/src/settings.c:438
+#: ../cli/src/settings.c:442
msgid "0 (unknown)"
msgstr "0 (ଅଜଣା)"
-#: ../cli/src/settings.c:444
+#: ../cli/src/settings.c:448
msgid "any, "
msgstr "ଯେକୌଣସି, "
-#: ../cli/src/settings.c:446
+#: ../cli/src/settings.c:450
msgid "900 MHz, "
msgstr "900 MHz, "
-#: ../cli/src/settings.c:448
+#: ../cli/src/settings.c:452
msgid "1800 MHz, "
msgstr "1800 MHz, "
-#: ../cli/src/settings.c:450
+#: ../cli/src/settings.c:454
msgid "1900 MHz, "
msgstr "1900 MHz, "
-#: ../cli/src/settings.c:452
+#: ../cli/src/settings.c:456
msgid "850 MHz, "
msgstr "850 MHz, "
-#: ../cli/src/settings.c:454
+#: ../cli/src/settings.c:458
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../cli/src/settings.c:456
+#: ../cli/src/settings.c:460
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../cli/src/settings.c:458
+#: ../cli/src/settings.c:462
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../cli/src/settings.c:460
+#: ../cli/src/settings.c:464
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../cli/src/settings.c:462
+#: ../cli/src/settings.c:466
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../cli/src/settings.c:464
+#: ../cli/src/settings.c:468
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../cli/src/settings.c:466
+#: ../cli/src/settings.c:470
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../cli/src/settings.c:546 ../cli/src/settings.c:708
+#: ../cli/src/settings.c:554 ../cli/src/settings.c:721
msgid "auto"
msgstr "ସà­à­±à­Ÿà¬‚ଚାଳିତ"
-#: ../cli/src/settings.c:704 ../cli/src/settings.c:707 ../cli/src/utils.c:172
+#: ../cli/src/settings.c:716 ../cli/src/settings.c:719
+#: ../cli/src/settings.c:720 ../cli/src/utils.c:172
msgid "not set"
msgstr "ସେଟ ହୋଇନାହିà¬"
@@ -1476,30 +1490,114 @@ msgstr "PKCS#12 ଫାଇଲକୠଯାଞà­à¬š କରିହେଲାନାà¬
msgid "Could not generate random data."
msgstr "ମନଇଚà­à¬›à¬¾ ତଥà­à­Ÿà¬•à­ ଅବସଂକେତ କରିହେଲା ନାହିà¬à¥¤"
-#: ../libnm-util/nm-utils.c:1925
+#: ../libnm-util/nm-utils.c:1975
#, c-format
msgid "Not enough memory to make encryption key."
msgstr "ବିକୋଡ଼ନ କି କୠନିରà­à¬®à¬¾à¬£ କରିବା ପାଇଠଯଥେଷà­à¬Ÿ ସà­à¬®à­ƒà¬¤à¬¿ ସà­à¬¥à¬¾à¬¨ ନାହିà¬à¥¤"
-#: ../libnm-util/nm-utils.c:2035
+#: ../libnm-util/nm-utils.c:2085
msgid "Could not allocate memory for PEM file creation."
msgstr "PEM ଫାଇଲ ନିରà­à¬®à¬¾à¬£ ପାଇଠସà­à¬®à­ƒà¬¤à¬¿ ସà­à¬¥à¬¾à¬¨ ବଣà­à¬Ÿà¬¨ କରିପାରିଲା ନାହିà¬à¥¤"
-#: ../libnm-util/nm-utils.c:2047
+#: ../libnm-util/nm-utils.c:2097
#, c-format
msgid "Could not allocate memory for writing IV to PEM file."
msgstr "PEM ଫାଇଲରେ IV ଲେଖିବା ପାଇଠସà­à¬®à­ƒà¬¤à¬¿ ସà­à¬¥à¬¾à¬¨ ବଣà­à¬Ÿà¬¨ କରିପାରିଲା ନାହିà¬à¥¤"
-#: ../libnm-util/nm-utils.c:2059
+#: ../libnm-util/nm-utils.c:2109
#, c-format
msgid "Could not allocate memory for writing encrypted key to PEM file."
msgstr "PEM ଫାଇଲରେ ସଂଗà­à¬ªà­à¬¤ କି ଲେଖିବା ପାଇଠସà­à¬®à­ƒà¬¤à¬¿ ସà­à¬¥à¬¾à¬¨ ବଣà­à¬Ÿà¬¨ କରିପାରିଲା ନାହିà¬à¥¤"
-#: ../libnm-util/nm-utils.c:2078
+#: ../libnm-util/nm-utils.c:2128
#, c-format
msgid "Could not allocate memory for PEM file data."
msgstr "PEM ଫାଇଲ ତଥà­à­Ÿà¬•à­ ବଣà­à¬Ÿà¬¨ କରିପାରିଲା ନାହିà¬à¥¤"
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
+msgid "Connection sharing via a protected WiFi network"
+msgstr "ଗୋଟିଠସà­à¬°à¬•à­à¬·à¬¿à¬¤ WiFi ନେଟୱରà­à¬•à¬°à­‡ ସଂଯୋଗ ସହଭାଗ"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
+msgid "Connection sharing via an open WiFi network"
+msgstr "ଗୋଟିଠଖୋଲା WiFi ନେଟୱରà­à¬•à¬°à­‡ ସଂଯୋଗ ସହଭାଗ"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
+msgid "Modify persistent system hostname"
+msgstr "ସà­à¬¥à¬¾à­Ÿà­€ ତନà­à¬¤à­à¬° ହୋଷà­à¬Ÿà¬¨à¬¾à¬®à¬•à­ ପରିବରà­à¬¤à­à¬¤à¬¨ କରନà­à¬¤à­"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
+msgid "Modify system connections"
+msgstr "ତନà­à¬¤à­à¬° ସଂଯୋଗଗà­à¬¡à¬¼à¬¿à¬•à­ ପରିବରà­à¬¤à­à¬¤à¬¨ କରନà­à¬¤à­"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
+msgid "System policy prevents modification of system settings"
+msgstr "ତନà­à¬¤à­à¬° ନିତୀ ତନà­à¬¤à­à¬° ବିନà­à­Ÿà¬¾à¬¸ ପରିବରà­à¬¤à­à¬¤à¬¨à¬•à­ ବାରଣ କରିଥାà¬"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
+msgid "System policy prevents modification of the persistent system hostname"
+msgstr "ତନà­à¬¤à­à¬° ନିତୀ ସà­à¬¥à¬¾à­Ÿà­€ ତନà­à¬¤à­à¬° ହୋଷà­à¬Ÿà¬¨à¬¾à¬®à¬° ପରିବରà­à¬¤à­à¬¤à¬¨à¬•à­ ବାରଣ କରିଥାà¬"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
+msgid "System policy prevents sharing connections via a protected WiFi network"
+msgstr "ତନà­à¬¤à­à¬° ନିତୀ ଗୋଟିଠସà­à¬°à¬•à­à¬·à¬¿à¬¤ WiFi ନେଟୱରà­à¬•à¬°à­‡ ସଂଯୋଗ ସହଭାଗ କରିବାରେ ବାରଣ କରିଥାà¬"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
+msgid "System policy prevents sharing connections via an open WiFi network"
+msgstr "ତନà­à¬¤à­à¬° ନିତୀ ଗୋଟିଠଖୋଲା WiFi ନେଟୱରà­à¬•à¬°à­‡ ସଂଯୋଗ ସହଭାଗ କରିବାରେ ବାରଣ କରିଥାà¬"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
+msgid "Allow control of network connections"
+msgstr "ନେଟୱରà­à¬• ସଂଯୋଗଗà­à¬¡à¬¼à¬¿à¬• ପାଇଠନିୟନà­à¬¤à­à¬°à¬£à¬•à­ ଅନà­à¬®à¬¤à¬¿ ଦିଅନà­à¬¤à­"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
+msgid "Allow use of user-specific connections"
+msgstr "ଚାଳକ-ନିରà­à¬¦à­à¬¦à¬¿à¬·à­à¬Ÿ ସଂଯୋଗଗà­à¬¡à¬¼à¬¿à¬•à¬° ବà­à­Ÿà¬¬à¬¹à¬¾à¬°à¬•à­ ଅନà­à¬®à¬¤à¬¿ ଦିଅନà­à¬¤à­"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
+msgid "Enable or disable WiFi devices"
+msgstr "WiFi ଉପକରଣଗà­à¬¡à¬¼à¬¿à¬•à­ ସକà­à¬°à¬¿à­Ÿ କିମà­à¬¬à¬¾ ନିଷà­à¬•à­à¬°à¬¿à­Ÿ କରନà­à¬¤à­"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
+msgid "Enable or disable mobile broadband devices"
+msgstr "ମୋବାଇଲ ବà­à¬°à­‹à¬¡à¬¬à­à­Ÿà¬¾à¬£à­à¬¡ ଉପକରଣଗà­à¬¡à¬¼à¬¿à¬•à­ ସକà­à¬°à¬¿à­Ÿ କିମà­à¬¬à¬¾ ନିଷà­à¬•à­à¬°à¬¿à­Ÿ କରନà­à¬¤à­"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+msgid "Enable or disable system networking"
+msgstr "ତନà­à¬¤à­à¬° ନେଟୱରà­à¬•à¬¿à¬™à­à¬—କୠସକà­à¬°à¬¿à­Ÿ କିମà­à¬¬à¬¾ ନିଷà­à¬•à­à¬°à¬¿à­Ÿ କରନà­à¬¤à­"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
+msgid ""
+"Put NetworkManager to sleep or wake it up (should only be used by system "
+"power management)"
+msgstr ""
+"NetworkManager କୠସà­à¬ªà­à¬¤ କିମà­à¬¬à¬¾ ଜାଗà­à¬°à¬¤ ରଖନà­à¬¤à­ (କେବଳ ତନà­à¬¤à­à¬° ଶକà­à¬¤à¬¿ ପରିଚାଳନା ଦà­à­±à¬¾à¬°à¬¾ ବà­à­Ÿà¬¬à¬¹à¬¾à¬° "
+"ହେବା ଉଚିତ)"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
+msgid "System policy prevents control of network connections"
+msgstr "ତନà­à¬¤à­à¬° ନିତୀ ନେଟୱରà­à¬• ସଂଯୋଗଗà­à¬¡à¬¼à¬¿à¬•à¬° ନିୟନà­à¬¤à­à¬°à¬£à¬•à­ ବାରଣ କରିଥାà¬"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
+msgid "System policy prevents enabling or disabling WiFi devices"
+msgstr "ତନà­à¬¤à­à¬° ନିତୀ WiFi ଉପକରଣଗà­à¬¡à¬¼à¬¿à¬•à­ ସକà­à¬°à¬¿à­Ÿ କିମà­à¬¬à¬¾ ନିଷà­à¬•à­à¬°à¬¿à­Ÿ ହେବାରୠବାରଣ କରିଥାà¬"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
+msgid "System policy prevents enabling or disabling mobile broadband devices"
+msgstr "ତନà­à¬¤à­à¬° ନିତୀ ମୋବାଇଲ ବà­à¬°à­‹à¬¡à¬¬à­à­Ÿà¬¾à¬£à­à¬¡ ଉପକରଣଗà­à¬¡à¬¼à¬¿à¬•à­ ସକà­à¬°à¬¿à­Ÿ କିମà­à¬¬à¬¾ ନିଷà­à¬•à­à¬°à¬¿à­Ÿ ହେବାରୠବାରଣ କରିଥାà¬"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
+msgid "System policy prevents enabling or disabling system networking"
+msgstr "ତନà­à¬¤à­à¬° ନିତୀ ତନà­à¬¤à­à¬° ନେଟୱରà­à¬•à¬¿à¬™à­à¬—କୠସକà­à¬°à¬¿à­Ÿ କିମà­à¬¬à¬¾ ନିଷà­à¬•à­à¬°à¬¿à­Ÿ ହେବାରୠବାରଣ କରିଥାà¬"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
+msgid "System policy prevents putting NetworkManager to sleep or waking it up"
+msgstr "ତନà­à¬¤à­à¬° ନିତୀ NetworkManager କୠସà­à¬ªà­à¬¤ କିମà­à¬¬à¬¾ ଜାଗà­à¬°à¬¤ ରହିବାରୠବାରଣ କରିଥାà¬"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
+msgid "System policy prevents use of user-specific connections"
+msgstr "ତନà­à¬¤à­à¬° ନିତୀ ତନà­à¬¤à­à¬°-ନିରà­à¬¦à­à¬¦à¬¿à¬·à­à¬Ÿ ସଂଯୋଗଗà­à¬¡à¬¼à¬¿à¬•à­ ବାରଣ କରିଥାà¬"
+
#: ../src/nm-netlink-monitor.c:100 ../src/nm-netlink-monitor.c:231
#: ../src/nm-netlink-monitor.c:653
#, c-format
@@ -1545,16 +1643,16 @@ msgstr "ସଂଯୋଗ କà­à­Ÿà¬¾à¬¶à­‡ ଅଦà­à­Ÿà¬¤à¬¨ କରିବାର
msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgstr "ଅବୈଧ ବିକଳà­à¬ª. ବୈଧ ବିକଳà­à¬ªà¬° ତାଲିକା ଦେଖିବା ପାଇଠଦୟାକରି --ସହାୟତା ବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­.\n"
-#: ../src/main.c:562
+#: ../src/main.c:573
#, c-format
msgid "%s. Please use --help to see a list of valid options.\n"
msgstr "%s. ବୈଧ ବିକଳà­à¬ªà¬° ତାଲିକା ଦେଖିବା ପାଇଠଦୟାକରି --help ବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­à¥¤\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:325
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:324
msgid "# Created by NetworkManager\n"
msgstr "# NetworkManager ଦà­à­±à¬¾à¬°à¬¾ ନିରà­à¬®à¬¿à¬¤\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:341
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:340
#, c-format
msgid ""
"# Merged from %s\n"
@@ -1563,19 +1661,19 @@ msgstr ""
"# %s ରୠମିଶà­à¬°à¬¿à¬¤\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:279
+#: ../src/dhcp-manager/nm-dhcp-manager.c:284
msgid "no usable DHCP client could be found."
msgstr "କୌଣସି ଉପଯୋଗୀ DHCP କà­à¬²à¬¾à¬à¬£à­à¬Ÿ ମିଳିଲା ନାହିà¬à¥¤"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:288
+#: ../src/dhcp-manager/nm-dhcp-manager.c:293
msgid "'dhclient' could be found."
msgstr "'dhclient' ମିଳି ପାରିଲା।"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:298
+#: ../src/dhcp-manager/nm-dhcp-manager.c:303
msgid "'dhcpcd' could be found."
msgstr "'dhcpcd' ମିଳିପାରିଲା।"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:306
+#: ../src/dhcp-manager/nm-dhcp-manager.c:311
#, c-format
msgid "unsupported DHCP client '%s'"
msgstr "ଅସମରà­à¬¥à¬¿à¬¤ DHCP କà­à¬²à¬¾à¬à¬£à­à¬Ÿ '%s'"
@@ -1590,11 +1688,11 @@ msgstr "ଅଜà­à¬žà¬¾à¬¤ ଲଗ ସà­à¬¤à¬° '%s'"
msgid "Unknown log domain '%s'"
msgstr "ଅଜà­à¬žà¬¾à¬¤ ଲଗ ଡମେନ '%s'"
-#: ../src/named-manager/nm-named-manager.c:343
+#: ../src/dns-manager/nm-dns-manager.c:384
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr "ଟିପà­à¬ªà¬£à­€: libc resolver 3 ରୠଅଧିକ nameserverଗà­à¬¡à¬¼à¬¿à¬•à­ ସମରà­à¬¥à¬¨ କରିନପାରେ."
-#: ../src/named-manager/nm-named-manager.c:345
+#: ../src/dns-manager/nm-dns-manager.c:386
msgid "The nameservers listed below may not be recognized."
msgstr "ନିମà­à¬¨à¬°à­‡ ତାଲିକାଭà­à¬•à­à¬¤ nameserverଗà­à¬¡à¬¼à¬¿à¬•à­ ଚିହà­à¬¨à¬¿ ହୋଇନପାରେ."
@@ -1603,39 +1701,7 @@ msgstr "ନିମà­à¬¨à¬°à­‡ ତାଲିକାଭà­à¬•à­à¬¤ nameserverଗà­
msgid "Auto %s"
msgstr "ସà­à­±à­Ÿà¬‚ %s"
-#: ../system-settings/plugins/ifcfg-rh/reader.c:3256
+#: ../system-settings/plugins/ifcfg-rh/reader.c:3412
msgid "System"
msgstr "ତନà­à¬¤à­à¬°"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
-msgid "Connection sharing via a protected WiFi network"
-msgstr "ଗୋଟିଠସà­à¬°à¬•à­à¬·à¬¿à¬¤ WiFi ନେଟୱରà­à¬•à¬°à­‡ ସଂଯୋଗ ସହଭାଗ"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
-msgid "Connection sharing via an open WiFi network"
-msgstr "ଗୋଟିଠଖୋଲା WiFi ନେଟୱରà­à¬•à¬°à­‡ ସଂଯୋଗ ସହଭାଗ"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
-msgid "Modify persistent system hostname"
-msgstr "ସà­à¬¥à¬¾à­Ÿà­€ ତନà­à¬¤à­à¬° ହୋଷà­à¬Ÿà¬¨à¬¾à¬®à¬•à­ ପରିବରà­à¬¤à­à¬¤à¬¨ କରନà­à¬¤à­"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
-msgid "Modify system connections"
-msgstr "ତନà­à¬¤à­à¬° ସଂଯୋଗଗà­à¬¡à¬¼à¬¿à¬•à­ ପରିବରà­à¬¤à­à¬¤à¬¨ କରନà­à¬¤à­"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
-msgid "System policy prevents modification of system settings"
-msgstr "ତନà­à¬¤à­à¬° ନିତୀ ତନà­à¬¤à­à¬° ବିନà­à­Ÿà¬¾à¬¸ ପରିବରà­à¬¤à­à¬¤à¬¨à¬•à­ ବାରଣ କରିଥାà¬"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
-msgid "System policy prevents modification of the persistent system hostname"
-msgstr "ତନà­à¬¤à­à¬° ନିତୀ ସà­à¬¥à¬¾à­Ÿà­€ ତନà­à¬¤à­à¬° ହୋଷà­à¬Ÿà¬¨à¬¾à¬®à¬° ପରିବରà­à¬¤à­à¬¤à¬¨à¬•à­ ବାରଣ କରିଥାà¬"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
-msgid "System policy prevents sharing connections via a protected WiFi network"
-msgstr "ତନà­à¬¤à­à¬° ନିତୀ ଗୋଟିଠସà­à¬°à¬•à­à¬·à¬¿à¬¤ WiFi ନେଟୱରà­à¬•à¬°à­‡ ସଂଯୋଗ ସହଭାଗ କରିବାରେ ବାରଣ କରିଥାà¬"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
-msgid "System policy prevents sharing connections via an open WiFi network"
-msgstr "ତନà­à¬¤à­à¬° ନିତୀ ଗୋଟିଠଖୋଲା WiFi ନେଟୱରà­à¬•à¬°à­‡ ସଂଯୋଗ ସହଭାଗ କରିବାରେ ବାରଣ କରିଥାà¬"
-
diff --git a/po/pa.po b/po/pa.po
index 90b36c5aee..cf3777a70b 100644
--- a/po/pa.po
+++ b/po/pa.po
@@ -4,16 +4,17 @@
#
# Amanpreet Singh Alam <aalam@redhat.com>, 2004.
# Amanpreet Singh Alam <amanpreetalam@yahoo.com>, 2005.
-# A S Alam <aalam@users.sf.net>, 2007.
+# A S Alam <aalam@users.sf.net>, 2007, 2010.
# Jaswinder Singh <jsingh@redhat.com>, 2010.
msgid ""
msgstr ""
"Project-Id-Version: NetworkManager.HEAD\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-06 14:31+0530\n"
-"PO-Revision-Date: 2010-05-07 10:40+0530\n"
-"Last-Translator: Jaswinder Singh <jsingh@redhat.com>\n"
-"Language-Team: Punjabi/Panjabi <kde-i18n-doc@kde.org>\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug."
+"cgi?product=NetworkManager&component=general\n"
+"POT-Creation-Date: 2010-09-18 03:25+0000\n"
+"PO-Revision-Date: 2010-09-19 08:09+0530\n"
+"Last-Translator: A S Alam <aalam@users.sf.net>\n"
+"Language-Team: Punjabi/Panjabi <punjabi-users@lists.sf.net>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -21,76 +22,76 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"\n"
-#: ../cli/src/connections.c:59 ../cli/src/connections.c:74
-#: ../cli/src/devices.c:85 ../cli/src/devices.c:98 ../cli/src/devices.c:108
-#: ../cli/src/devices.c:118 ../cli/src/devices.c:131 ../cli/src/devices.c:142
-#: ../cli/src/devices.c:152
+#: ../cli/src/connections.c: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
msgid "NAME"
msgstr "NAME"
#. 0
-#: ../cli/src/connections.c:60 ../cli/src/connections.c:75
+#: ../cli/src/connections.c:61 ../cli/src/connections.c:76
msgid "UUID"
msgstr "UUID"
#. 1
-#: ../cli/src/connections.c:61
+#: ../cli/src/connections.c:62
msgid "DEVICES"
msgstr "DEVICES"
#. 2
-#: ../cli/src/connections.c:62 ../cli/src/connections.c:77
+#: ../cli/src/connections.c:63 ../cli/src/connections.c:78
msgid "SCOPE"
msgstr "SCOPE"
#. 3
-#: ../cli/src/connections.c:63
+#: ../cli/src/connections.c:64
msgid "DEFAULT"
msgstr "DEFAULT"
#. 4
-#: ../cli/src/connections.c:64
+#: ../cli/src/connections.c:65
msgid "DBUS-SERVICE"
msgstr "DBUS-SERVICE"
#. 5
-#: ../cli/src/connections.c:65
+#: ../cli/src/connections.c:66
msgid "SPEC-OBJECT"
msgstr "SPEC-OBJECT"
#. 6
-#: ../cli/src/connections.c:66
+#: ../cli/src/connections.c:67
msgid "VPN"
msgstr "VPN"
#. 1
#. 0
#. 1
-#: ../cli/src/connections.c:76 ../cli/src/devices.c:61 ../cli/src/devices.c:87
+#: ../cli/src/connections.c:77 ../cli/src/devices.c:62 ../cli/src/devices.c:90
msgid "TYPE"
msgstr "TYPE"
#. 3
-#: ../cli/src/connections.c:78
+#: ../cli/src/connections.c:79
msgid "TIMESTAMP"
msgstr "TIMESTAMP"
#. 4
-#: ../cli/src/connections.c:79
+#: ../cli/src/connections.c:80
msgid "TIMESTAMP-REAL"
msgstr "TIMESTAMP-REAL"
#. 5
-#: ../cli/src/connections.c:80
+#: ../cli/src/connections.c:81
msgid "AUTOCONNECT"
msgstr "AUTOCONNECT"
#. 6
-#: ../cli/src/connections.c:81
+#: ../cli/src/connections.c:82
msgid "READONLY"
msgstr "READONLY"
-#: ../cli/src/connections.c:157
+#: ../cli/src/connections.c:158
#, c-format
msgid ""
"Usage: nmcli con { COMMAND | help }\n"
@@ -111,514 +112,524 @@ msgstr ""
"<timeout>]\n"
" down id <id> | uuid <id>\n"
-#: ../cli/src/connections.c:197 ../cli/src/connections.c:536
+#: ../cli/src/connections.c:198 ../cli/src/connections.c:537
#, c-format
msgid "Error: 'con list': %s"
msgstr "Error: 'con list': %s"
-#: ../cli/src/connections.c:199 ../cli/src/connections.c:538
+#: ../cli/src/connections.c:200 ../cli/src/connections.c:539
#, c-format
msgid "Error: 'con list': %s; allowed fields: %s"
msgstr "Error: 'con list': %s; allowed fields: %s"
-#: ../cli/src/connections.c:207
+#: ../cli/src/connections.c:208
msgid "Connection details"
msgstr "ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਵੇਰਵਾ"
-#: ../cli/src/connections.c:381 ../cli/src/connections.c:601
+#: ../cli/src/connections.c:382 ../cli/src/connections.c:602
msgid "system"
msgstr "ਸਿਸਟਮ"
-#: ../cli/src/connections.c:381 ../cli/src/connections.c:601
+#: ../cli/src/connections.c:382 ../cli/src/connections.c:602
msgid "user"
msgstr "ਯੂਜ਼ਰ"
-#: ../cli/src/connections.c:383
+#: ../cli/src/connections.c:384
msgid "never"
msgstr "ਕਦੇ ਨਹੀਂ"
#. "CAPABILITIES"
#. Print header
#. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:384 ../cli/src/connections.c:385
-#: ../cli/src/connections.c:602 ../cli/src/connections.c:605
-#: ../cli/src/devices.c:388 ../cli/src/devices.c:513 ../cli/src/devices.c:539
-#: ../cli/src/devices.c:540 ../cli/src/devices.c:541 ../cli/src/devices.c:542
-#: ../cli/src/devices.c:543 ../cli/src/settings.c:504
-#: ../cli/src/settings.c:544 ../cli/src/settings.c:643
-#: ../cli/src/settings.c:912 ../cli/src/settings.c:913
-#: ../cli/src/settings.c:915 ../cli/src/settings.c:917
-#: ../cli/src/settings.c:1042 ../cli/src/settings.c:1043
-#: ../cli/src/settings.c:1044 ../cli/src/settings.c:1123
-#: ../cli/src/settings.c:1124 ../cli/src/settings.c:1125
-#: ../cli/src/settings.c:1126 ../cli/src/settings.c:1127
-#: ../cli/src/settings.c:1128 ../cli/src/settings.c:1129
-#: ../cli/src/settings.c:1130 ../cli/src/settings.c:1131
-#: ../cli/src/settings.c:1132 ../cli/src/settings.c:1133
-#: ../cli/src/settings.c:1134 ../cli/src/settings.c:1135
-#: ../cli/src/settings.c:1210
+#: ../cli/src/connections.c: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
msgid "yes"
msgstr "ਹਾਂ"
-#: ../cli/src/connections.c:384 ../cli/src/connections.c:385
-#: ../cli/src/connections.c:602 ../cli/src/connections.c:605
-#: ../cli/src/devices.c:388 ../cli/src/devices.c:513 ../cli/src/devices.c:539
-#: ../cli/src/devices.c:540 ../cli/src/devices.c:541 ../cli/src/devices.c:542
-#: ../cli/src/devices.c:543 ../cli/src/settings.c:504
-#: ../cli/src/settings.c:506 ../cli/src/settings.c:544
-#: ../cli/src/settings.c:643 ../cli/src/settings.c:912
-#: ../cli/src/settings.c:913 ../cli/src/settings.c:915
-#: ../cli/src/settings.c:917 ../cli/src/settings.c:1042
-#: ../cli/src/settings.c:1043 ../cli/src/settings.c:1044
-#: ../cli/src/settings.c:1123 ../cli/src/settings.c:1124
-#: ../cli/src/settings.c:1125 ../cli/src/settings.c:1126
-#: ../cli/src/settings.c:1127 ../cli/src/settings.c:1128
-#: ../cli/src/settings.c:1129 ../cli/src/settings.c:1130
-#: ../cli/src/settings.c:1131 ../cli/src/settings.c:1132
-#: ../cli/src/settings.c:1133 ../cli/src/settings.c:1134
-#: ../cli/src/settings.c:1135 ../cli/src/settings.c:1210
+#: ../cli/src/connections.c: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
msgid "no"
msgstr "ਨਹੀਂ"
-#: ../cli/src/connections.c:457 ../cli/src/connections.c:500
+#: ../cli/src/connections.c:458 ../cli/src/connections.c:501
msgid "System connections"
msgstr "ਸਿਸਟਮ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨"
-#: ../cli/src/connections.c:462 ../cli/src/connections.c:513
+#: ../cli/src/connections.c:463 ../cli/src/connections.c:514
msgid "User connections"
msgstr "ਯੂਜ਼ਰ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨"
-#: ../cli/src/connections.c:474 ../cli/src/connections.c:1334
-#: ../cli/src/connections.c:1350 ../cli/src/connections.c:1359
-#: ../cli/src/connections.c:1370 ../cli/src/connections.c:1452
-#: ../cli/src/devices.c:864 ../cli/src/devices.c:874 ../cli/src/devices.c:973
-#: ../cli/src/devices.c:980
+#: ../cli/src/connections.c: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
#, c-format
msgid "Error: %s argument is missing."
msgstr "ਗਲਤੀ: %s ਆਰਗੂਮੈਂਟ ਮੌਜੂਦ ਨਹੀਂ ਹੈ।"
-#: ../cli/src/connections.c:487
+#: ../cli/src/connections.c:488
#, c-format
msgid "Error: %s - no such connection."
msgstr "ਗਲਤੀ: %s - ਇੰਠਦਾ ਕੋਈ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਨਹੀਂ ਹੈ"
-#: ../cli/src/connections.c:519 ../cli/src/connections.c:1383
-#: ../cli/src/connections.c:1470 ../cli/src/devices.c:687
-#: ../cli/src/devices.c:754 ../cli/src/devices.c:888 ../cli/src/devices.c:986
+#: ../cli/src/connections.c: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
#, c-format
msgid "Unknown parameter: %s\n"
msgstr "ਅਣਜਾਣ ਪੈਰਾਮੀਟਰ: %s\n"
-#: ../cli/src/connections.c:528
+#: ../cli/src/connections.c:529
#, c-format
msgid "Error: no valid parameter specified."
msgstr "ਗਲਤੀ: ਕੋਈ ਢà©à©±à¨•à¨µà¨¾à¨‚ ਪੈਰਾਮੀਟਰ ਨਹੀਂ ਦਿੱਤਾ।"
-#: ../cli/src/connections.c:543 ../cli/src/connections.c:1572
-#: ../cli/src/devices.c:1192 ../cli/src/network-manager.c:274
+#: ../cli/src/connections.c:544 ../cli/src/connections.c:1577
+#: ../cli/src/devices.c:1293 ../cli/src/network-manager.c:359
#, c-format
msgid "Error: %s."
-msgstr "ਗਲਤੀ: %s."
+msgstr "ਗਲਤੀ: %s"
-#: ../cli/src/connections.c:649
+#: ../cli/src/connections.c:650
#, c-format
msgid "Error: 'con status': %s"
-msgstr "Error: 'con status': %s"
+msgstr "ਗਲਤੀ: 'con status': %s"
-#: ../cli/src/connections.c:651
+#: ../cli/src/connections.c:652
#, c-format
msgid "Error: 'con status': %s; allowed fields: %s"
-msgstr "Error: 'con status': %s; allowed fields: %s"
+msgstr "ਗਲਤੀ: 'con status': %s; allowed fields: %s"
-#: ../cli/src/connections.c:658
+#: ../cli/src/connections.c:659
msgid "Active connections"
msgstr "ਚਾਲੂ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨"
-#: ../cli/src/connections.c:1026
+#: ../cli/src/connections.c:1027
#, c-format
msgid "no active connection on device '%s'"
msgstr "ਜੰਤਰ '%s' ਉੱਤੇ ਕੋਈ ਚਾਲੂ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਨਹੀਂ ਹੈ"
-#: ../cli/src/connections.c:1034
+#: ../cli/src/connections.c:1035
#, c-format
msgid "no active connection or device"
msgstr "ਕੋਈ ਚਾਲੂ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਜਾਂ ਜੰਤਰ ਨਹੀਂ ਹੈ"
-#: ../cli/src/connections.c:1084
+#: ../cli/src/connections.c:1085
#, c-format
msgid "device '%s' not compatible with connection '%s'"
-msgstr "device '%s' not compatible with connection '%s'"
+msgstr "ਜੰਤਰ '%s' ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ '%s' ਨਾਲ ਅਨà©à¨•à©‚ਲ ਨਹੀਂ ਹੈ"
-#: ../cli/src/connections.c:1086
+#: ../cli/src/connections.c:1087
#, c-format
msgid "no device found for connection '%s'"
msgstr "ਕà©à¨¨à©ˆà¨•à¨¶à¨¨ '%s' ਲਈ ਕੋਈ ਜੰਤਰ ਨਹੀਂ ਲੱਭਿਆ"
-#: ../cli/src/connections.c:1097
+#: ../cli/src/connections.c:1098
msgid "activating"
msgstr "ਚਾਲੂ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
-#: ../cli/src/connections.c:1099
+#: ../cli/src/connections.c:1100
msgid "activated"
msgstr "ਚਾਲੂ ਕੀਤਾ"
-#: ../cli/src/connections.c:1102 ../cli/src/connections.c:1125
-#: ../cli/src/connections.c:1158 ../cli/src/devices.c:224
-#: ../cli/src/devices.c:514 ../cli/src/network-manager.c:92
-#: ../cli/src/network-manager.c:145 ../cli/src/settings.c:469
+#: ../cli/src/connections.c: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
msgid "unknown"
msgstr "ਅਣਜਾਣ"
-#: ../cli/src/connections.c:1111
+#: ../cli/src/connections.c:1112
msgid "VPN connecting (prepare)"
msgstr "VPN ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ (ਤਿਆਰੀ)"
-#: ../cli/src/connections.c:1113
+#: ../cli/src/connections.c:1114
msgid "VPN connecting (need authentication)"
msgstr "VPN ਕà©à¨¨à©ˆà¨•à¨Ÿ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ (ਪਰਮਾਣਕਿਤਾ ਦੀ ਲੋੜ ਹੈ)"
-#: ../cli/src/connections.c:1115
+#: ../cli/src/connections.c:1116
msgid "VPN connecting"
msgstr "VPN ਕà©à¨¨à©ˆà¨•à¨Ÿ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
-#: ../cli/src/connections.c:1117
+#: ../cli/src/connections.c:1118
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN ਕà©à¨¨à©ˆà¨•à¨Ÿ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ (IP ਸੰਰਚਨਾ ਲਈ ਜਾ ਰਹੀ ਹੈ)"
-#: ../cli/src/connections.c:1119
+#: ../cli/src/connections.c:1120
msgid "VPN connected"
msgstr "VPN ਕà©à¨¨à©ˆà¨•à¨Ÿ ਹੈ"
-#: ../cli/src/connections.c:1121
+#: ../cli/src/connections.c:1122
msgid "VPN connection failed"
msgstr "VPN ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਫੇਲà©à¨¹ ਹੋਇਆ"
-#: ../cli/src/connections.c:1123
+#: ../cli/src/connections.c:1124
msgid "VPN disconnected"
msgstr "VPN ਡਿਸ-ਕà©à¨¨à©ˆà¨•à¨Ÿ"
-#: ../cli/src/connections.c:1134
+#: ../cli/src/connections.c:1135
msgid "unknown reason"
msgstr "ਅਣਜਾਣ ਕਾਰਨ"
-#: ../cli/src/connections.c:1136
+#: ../cli/src/connections.c:1137
msgid "none"
msgstr "ਕੋਈ ਨਹੀਂ"
-#: ../cli/src/connections.c:1138
+#: ../cli/src/connections.c:1139
msgid "the user was disconnected"
msgstr "ਯੂਜ਼ਰ ਡਿਸ-ਕà©à¨¨à©ˆà¨•à¨Ÿ ਹੋ ਗਿਆ"
-#: ../cli/src/connections.c:1140
+#: ../cli/src/connections.c:1141
msgid "the base network connection was interrupted"
msgstr "ਬੇਸ ਨੈੱਟਵਰਕ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ 'ਚ ਰà©à¨•à¨¾à¨µà¨Ÿ"
-#: ../cli/src/connections.c:1142
+#: ../cli/src/connections.c:1143
msgid "the VPN service stopped unexpectedly"
msgstr "VPN ਸਰਵਿਸ ਅਚਾਨਕ ਰà©à¨• ਗਈ"
-#: ../cli/src/connections.c:1144
+#: ../cli/src/connections.c:1145
msgid "the VPN service returned invalid configuration"
msgstr "VPN ਸਰਵਿਸ ਨੇ ਅਢà©à©±à¨•à¨µà©€à¨‚ ਸੰਰਚਨਾ ਵਾਪਸ ਕੀਤੀ"
-#: ../cli/src/connections.c:1146
+#: ../cli/src/connections.c:1147
msgid "the connection attempt timed out"
msgstr "ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਕੋਸ਼ਿਸ਼ ਦੌਰਾਨ ਸਮਾਂ ਸਮਾਪਤ ਹੋ ਗਿਆ"
-#: ../cli/src/connections.c:1148
+#: ../cli/src/connections.c:1149
msgid "the VPN service did not start in time"
msgstr "VPN ਸਰਵਿਸ ਸਮੇਂ 'ਚ ਸ਼à©à¨°à©‚ ਨਹੀਂ ਹੋਈ"
-#: ../cli/src/connections.c:1150
+#: ../cli/src/connections.c:1151
msgid "the VPN service failed to start"
msgstr "VPN ਸਰਵਿਸ ਸ਼à©à¨°à©‚ ਹੋਣ ਲਈ ਫੇਲà©à¨¹ ਹੋਈ"
-#: ../cli/src/connections.c:1152
+#: ../cli/src/connections.c:1153
msgid "no valid VPN secrets"
msgstr "ਕੋਈ ਢà©à©±à¨•à¨µà¨¾à¨‚ VPN ਭੇਦ ਨਹੀਂ"
-#: ../cli/src/connections.c:1154
+#: ../cli/src/connections.c:1155
msgid "invalid VPN secrets"
msgstr "ਅਢà©à©±à¨•à¨µà¨¾à¨‚ VPN ਭੇਦ"
-#: ../cli/src/connections.c:1156
+#: ../cli/src/connections.c:1157
msgid "the connection was removed"
msgstr "ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਹਟਾਇਆ ਗਿਆ"
-#: ../cli/src/connections.c:1170
+#: ../cli/src/connections.c:1171
#, c-format
msgid "state: %s\n"
msgstr "ਹਾਲਤ: %s\n"
-#: ../cli/src/connections.c:1173 ../cli/src/connections.c:1199
+#: ../cli/src/connections.c:1174 ../cli/src/connections.c:1200
#, c-format
msgid "Connection activated\n"
msgstr "ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਚਾਲੂ ਕੀਤਾ\n"
-#: ../cli/src/connections.c:1176
+#: ../cli/src/connections.c:1177
#, c-format
msgid "Error: Connection activation failed."
-msgstr "ਗਲਤ: ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਚਾਲੂ ਕਰਨ ਲਈ ਫੇਲà©à¨¹ ਹੈ।"
+msgstr "ਗਲਤੀ: ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਚਾਲੂ ਕਰਨ ਲਈ ਫੇਲà©à¨¹ ਹੈ।"
-#: ../cli/src/connections.c:1195
+#: ../cli/src/connections.c:1196
#, c-format
msgid "state: %s (%d)\n"
msgstr "ਹਾਲਤ: %s (%d)\n"
-#: ../cli/src/connections.c:1205
+#: ../cli/src/connections.c:1206
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "ਗਲਤੀ: ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਚਾਲੂ ਕਰਨ ਲਈ ਫੇਲà©à¨¹: %s।"
-#: ../cli/src/connections.c:1222 ../cli/src/devices.c:811
+#: ../cli/src/connections.c:1223 ../cli/src/devices.c:909
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "ਗਲਤੀ: ਸਮਾਂ-ਸਮਾਪਤੀ %d ਸਕਿੰਟ ਖਤਮ ਹੋà¨à¥¤"
-#: ../cli/src/connections.c:1265
+#: ../cli/src/connections.c:1266
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "ਗਲਤੀ: ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਚਾਲੂ ਕਰਨ ਲਈ ਫੇਲà©à¨¹: %s"
-#: ../cli/src/connections.c:1279
+#: ../cli/src/connections.c:1280
#, c-format
msgid "Error: Obtaining active connection for '%s' failed."
msgstr "ਗਲਤੀ: '%s' ਲਈ ਚਾਲੂ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਲੈਣ ਲਈ ਫੇਲà©à¨¹ ਹੈ।"
-#: ../cli/src/connections.c:1288
+#: ../cli/src/connections.c:1289
#, c-format
msgid "Active connection state: %s\n"
msgstr "ਚਾਲੂ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਹਾਲਤ: %s\n"
-#: ../cli/src/connections.c:1289
+#: ../cli/src/connections.c:1290
#, c-format
msgid "Active connection path: %s\n"
msgstr "ਚਾਲੂ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਪਾਥ: %s\n"
-#: ../cli/src/connections.c:1343 ../cli/src/connections.c:1461
+#: ../cli/src/connections.c:1344 ../cli/src/connections.c:1465
#, c-format
msgid "Error: Unknown connection: %s."
msgstr "ਗਲਤੀ: ਅਣਜਾਣ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨: %s।"
-#: ../cli/src/connections.c:1378 ../cli/src/devices.c:882
+#: ../cli/src/connections.c:1379 ../cli/src/devices.c:980
#, c-format
msgid "Error: timeout value '%s' is not valid."
msgstr "ਗਲਤੀ: ਸਮਾਂ-ਸਮਾਪਤੀ ਮà©à©±à¨² '%s' ਢà©à©±à¨•à¨µà¨¾à¨‚ ਨਹੀਂ ਹੈ।"
-#: ../cli/src/connections.c:1391 ../cli/src/connections.c:1478
+#: ../cli/src/connections.c:1392 ../cli/src/connections.c:1482
#, c-format
msgid "Error: id or uuid has to be specified."
msgstr "ਗਲਤੀ: id ਜਾਂ uuid ਨਹੀਂ ਦਿੱਤਾ।"
-#: ../cli/src/connections.c:1411
+#: ../cli/src/connections.c:1412
#, c-format
msgid "Error: No suitable device found: %s."
msgstr "ਗਲਤੀ: ਕੋਈ ਢà©à©±à¨•à¨µà¨¾à¨‚ ਜੰਤਰ ਨਹੀਂ ਲੱਭਿਆ: %s।"
-#: ../cli/src/connections.c:1413
+#: ../cli/src/connections.c:1414
#, c-format
msgid "Error: No suitable device found."
msgstr "ਗਲਤੀ: ਕੋਈ ਢà©à©±à¨•à¨µà¨¾à¨‚ ਜੰਤਰ ਨਹੀਂ ਮਿਲਿਆ।"
-#: ../cli/src/connections.c:1505
+#: ../cli/src/connections.c:1509
#, c-format
msgid "Warning: Connection not active\n"
msgstr "ਚੇਤਾਵਨੀ: ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਚਾਲੂ ਨਹੀਂ ਹੈ\n"
-#: ../cli/src/connections.c:1561
+#: ../cli/src/connections.c:1566
#, c-format
msgid "Error: 'con' command '%s' is not valid."
msgstr "ਗਲਤੀ: 'con' ਕਮਾਂਡ '%s' ਢà©à©±à¨•à¨µà¨¾à¨‚ ਨਹੀਂ।"
-#: ../cli/src/connections.c:1597
+#: ../cli/src/connections.c:1602
#, c-format
msgid "Error: could not connect to D-Bus."
msgstr "ਗਲਤੀ: ਡੀ-ਬੱਸ ਨਾਲ ਕà©à¨¨à©ˆà¨•à¨Ÿ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ।"
-#: ../cli/src/connections.c:1604
+#: ../cli/src/connections.c:1609
#, c-format
msgid "Error: Could not get system settings."
msgstr "ਗਲਤੀ: ਸਿਸਟਮ ਸੈਟਿੰਗ ਨਹੀਂ ਲਈ ਜਾ ਸਕੀ।"
-#: ../cli/src/connections.c:1612
+#: ../cli/src/connections.c:1617
#, c-format
msgid "Error: Could not get user settings."
msgstr "ਗਲਤੀ: ਯੂਜ਼ਰ ਸੈਟਿੰਗ ਨਹੀਂ ਲਈ ਜਾ ਸਕੀ।"
-#: ../cli/src/connections.c:1622
+#: ../cli/src/connections.c:1627
#, c-format
msgid "Error: Can't obtain connections: settings services are not running."
msgstr "ਗਲਤੀ: ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਨਹੀਂ ਲਿਆ ਜਾ ਸਕਦਾ: ਸਿਸਟਮ ਸਰਵਿਸ ਨਹੀਂ ਚੱਲ ਰਹੀ ਹੈ।"
#. 0
#. 9
-#: ../cli/src/devices.c:60 ../cli/src/devices.c:86 ../cli/src/devices.c:162
+#: ../cli/src/devices.c:61 ../cli/src/devices.c:89 ../cli/src/devices.c:184
msgid "DEVICE"
-msgstr "DEVICE"
+msgstr "ਜੰਤਰ"
#. 1
#. 4
#. 0
-#: ../cli/src/devices.c:62 ../cli/src/devices.c:90
+#: ../cli/src/devices.c:63 ../cli/src/devices.c:93
#: ../cli/src/network-manager.c:36
msgid "STATE"
-msgstr "STATE"
+msgstr "ਹਾਲਤ"
-#: ../cli/src/devices.c:71
+#: ../cli/src/devices.c:72
msgid "GENERAL"
-msgstr "GENERAL"
+msgstr "ਆਮ"
#. 0
-#: ../cli/src/devices.c:72
+#: ../cli/src/devices.c:73
msgid "CAPABILITIES"
-msgstr "CAPABILITIES"
+msgstr "ਸਮਰੱਥਾ"
#. 1
-#: ../cli/src/devices.c:73
+#: ../cli/src/devices.c:74
msgid "WIFI-PROPERTIES"
-msgstr "WIFI-PROPERTIES"
+msgstr "ਵਾਈਫਾਈ-ਵਿਸ਼ੇਸ਼ਤਾ"
#. 2
-#: ../cli/src/devices.c:74
+#: ../cli/src/devices.c:75
msgid "AP"
msgstr "AP"
#. 3
-#: ../cli/src/devices.c:75
+#: ../cli/src/devices.c:76
msgid "WIRED-PROPERTIES"
-msgstr "WIRED-PROPERTIES"
+msgstr "ਤਾਰ-ਵਿਸ਼ੇਸ਼ਤਾ"
#. 4
-#: ../cli/src/devices.c:76
+#: ../cli/src/devices.c:77
msgid "IP4-SETTINGS"
-msgstr "IP4-SETTINGS"
+msgstr "IP4-ਸੈਟਿੰਗ"
#. 5
-#: ../cli/src/devices.c:77
+#: ../cli/src/devices.c:78
msgid "IP4-DNS"
msgstr "IP4-DNS"
+#. 6
+#: ../cli/src/devices.c:79
+msgid "IP6-SETTINGS"
+msgstr "IP6-ਸੈਟਿੰਗ"
+
+#. 7
+#: ../cli/src/devices.c:80
+msgid "IP6-DNS"
+msgstr "IP6-DNS"
+
#. 2
-#: ../cli/src/devices.c:88
+#: ../cli/src/devices.c:91
msgid "DRIVER"
-msgstr "DRIVER"
+msgstr "ਡਰਾਇਵਰ"
#. 3
-#: ../cli/src/devices.c:89
+#: ../cli/src/devices.c:92
msgid "HWADDR"
msgstr "HWADDR"
#. 0
-#: ../cli/src/devices.c:99
+#: ../cli/src/devices.c:102
msgid "CARRIER-DETECT"
-msgstr "CARRIER-DETECT"
+msgstr "ਕੈਰੀਅਰ-ਖੋਜ"
#. 1
-#: ../cli/src/devices.c:100
+#: ../cli/src/devices.c:103
msgid "SPEED"
-msgstr "SPEED"
+msgstr "ਸਪੀਡ"
#. 0
-#: ../cli/src/devices.c:109
+#: ../cli/src/devices.c:112
msgid "CARRIER"
-msgstr "CARRIER"
+msgstr "ਕੈਰੀਅਰ"
#. 0
-#: ../cli/src/devices.c:119
+#: ../cli/src/devices.c:122
msgid "WEP"
msgstr "WEP"
#. 1
-#: ../cli/src/devices.c:120
+#: ../cli/src/devices.c:123
msgid "WPA"
msgstr "WPA"
#. 2
-#: ../cli/src/devices.c:121
+#: ../cli/src/devices.c:124
msgid "WPA2"
msgstr "WPA2"
#. 3
-#: ../cli/src/devices.c:122
+#: ../cli/src/devices.c:125
msgid "TKIP"
msgstr "TKIP"
#. 4
-#: ../cli/src/devices.c:123
+#: ../cli/src/devices.c:126
msgid "CCMP"
msgstr "CCMP"
#. 0
-#: ../cli/src/devices.c:132
+#: ../cli/src/devices.c:135 ../cli/src/devices.c:146
msgid "ADDRESS"
-msgstr "ADDRESS"
+msgstr "à¨à¨¡à¨°à©ˆà©±à¨¸"
#. 1
-#: ../cli/src/devices.c:133
+#: ../cli/src/devices.c:136 ../cli/src/devices.c:147
msgid "PREFIX"
-msgstr "PREFIX"
+msgstr "ਪà©à¨°à©€-ਫਿਕਸ"
#. 2
-#: ../cli/src/devices.c:134
+#: ../cli/src/devices.c:137 ../cli/src/devices.c:148
msgid "GATEWAY"
-msgstr "GATEWAY"
+msgstr "ਗੇਟਵੇ"
#. 0
-#: ../cli/src/devices.c:143
+#: ../cli/src/devices.c:157 ../cli/src/devices.c:166
msgid "DNS"
msgstr "DNS"
#. 0
-#: ../cli/src/devices.c:153
+#: ../cli/src/devices.c:175
msgid "SSID"
msgstr "SSID"
#. 1
-#: ../cli/src/devices.c:154
+#: ../cli/src/devices.c:176
msgid "BSSID"
msgstr "BSSID"
#. 2
-#: ../cli/src/devices.c:155
+#: ../cli/src/devices.c:177
msgid "MODE"
-msgstr "MODE"
+msgstr "ਮੋਡ"
#. 3
-#: ../cli/src/devices.c:156
+#: ../cli/src/devices.c:178
msgid "FREQ"
-msgstr "FREQ"
+msgstr "ਫਰੀਕਿਊਂਸੀ"
#. 4
-#: ../cli/src/devices.c:157
+#: ../cli/src/devices.c:179
msgid "RATE"
-msgstr "RATE"
+msgstr "ਰੇਟ"
#. 5
-#: ../cli/src/devices.c:158
+#: ../cli/src/devices.c:180
msgid "SIGNAL"
-msgstr "SIGNAL"
+msgstr "ਸਿਗਨਲ"
#. 6
-#: ../cli/src/devices.c:159
+#: ../cli/src/devices.c:181
msgid "SECURITY"
-msgstr "SECURITY"
+msgstr "ਸà©à¨°à©±à¨–ਿਆ"
#. 7
-#: ../cli/src/devices.c:160
+#: ../cli/src/devices.c:182
msgid "WPA-FLAGS"
msgstr "WPA-FLAGS"
#. 8
-#: ../cli/src/devices.c:161
+#: ../cli/src/devices.c:183
msgid "RSN-FLAGS"
msgstr "RSN-FLAGS"
#. 10
-#: ../cli/src/devices.c:163
+#: ../cli/src/devices.c:185
msgid "ACTIVE"
-msgstr "ACTIVE"
+msgstr "ਚਾਲੂ"
-#: ../cli/src/devices.c:186
+#: ../cli/src/devices.c:208
#, c-format
msgid ""
"Usage: nmcli dev { COMMAND | help }\n"
@@ -641,324 +652,385 @@ msgstr ""
" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
"\n"
-#: ../cli/src/devices.c:206
+#: ../cli/src/devices.c:228
msgid "unmanaged"
msgstr "ਬਿਨ-ਪਰਬੰਧ"
-#: ../cli/src/devices.c:208
+#: ../cli/src/devices.c:230
msgid "unavailable"
-msgstr "ਅਣ-ਉਪਲੱਬਧ"
+msgstr "ਨਾ-ਉਪਲੱਬਧ"
-#: ../cli/src/devices.c:210 ../cli/src/network-manager.c:89
+#: ../cli/src/devices.c:232 ../cli/src/network-manager.c:91
msgid "disconnected"
msgstr "ਡਿਸ-ਕà©à¨¨à©ˆà¨•à¨Ÿ ਕੀਤਾ"
-#: ../cli/src/devices.c:212
+#: ../cli/src/devices.c:234
msgid "connecting (prepare)"
msgstr "ਕà©à¨¨à©ˆà¨•à¨Ÿ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ (ਤਿਆਰੀ)"
-#: ../cli/src/devices.c:214
+#: ../cli/src/devices.c:236
msgid "connecting (configuring)"
msgstr "ਕà©à¨¨à©ˆà¨•à¨Ÿ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ (ਸੰਰਚਨਾ ਜਾਰੀ)"
-#: ../cli/src/devices.c:216
+#: ../cli/src/devices.c:238
msgid "connecting (need authentication)"
msgstr "ਕà©à¨¨à©ˆà¨•à¨Ÿ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ (ਪਰਮਾਣਕਿਤਾ ਦੀ ਲੋੜ)"
-#: ../cli/src/devices.c:218
+#: ../cli/src/devices.c:240
msgid "connecting (getting IP configuration)"
msgstr "ਕà©à¨¨à©ˆà¨•à¨Ÿ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ (IP ਸੰਰਚਨਾ ਲਈ ਜਾ ਰਹੀ ਹੈ)"
-#: ../cli/src/devices.c:220 ../cli/src/network-manager.c:87
+#: ../cli/src/devices.c:242 ../cli/src/network-manager.c:89
msgid "connected"
msgstr "ਕà©à¨¨à©ˆà¨•à¨Ÿ ਹੋਇਆ"
-#: ../cli/src/devices.c:222
+#: ../cli/src/devices.c:244
msgid "connection failed"
msgstr "ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਫੇਲà©à¨¹ ਹੈ"
-#: ../cli/src/devices.c:245 ../cli/src/devices.c:380
+#: ../cli/src/devices.c:267 ../cli/src/devices.c:424
msgid "Unknown"
msgstr "ਅਣਜਾਣ"
-#: ../cli/src/devices.c:277
+#: ../cli/src/devices.c:299
msgid "(none)"
msgstr "(ਕੋਈ ਨਹੀਂ)"
-#: ../cli/src/devices.c:302
+#: ../cli/src/devices.c:324
#, c-format
msgid "%s: error converting IP4 address 0x%X"
msgstr "%s: IP4 à¨à¨¡à¨°à©ˆà©±à¨¸ 0x%X ਬਦਲਣ ਦੌਰਾਨ ਗਲਤੀ"
-#: ../cli/src/devices.c:349
+#: ../cli/src/devices.c:393
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:350
+#: ../cli/src/devices.c:394
#, c-format
msgid "%u MB/s"
msgstr "%u MB/s"
-#: ../cli/src/devices.c:359
+#: ../cli/src/devices.c:403
msgid "Encrypted: "
msgstr "ਇੰਕà©à¨°à¨¿à¨ªà¨Ÿ ਕੀਤਾ: "
-#: ../cli/src/devices.c:364
+#: ../cli/src/devices.c:408
msgid "WEP "
msgstr "WEP "
-#: ../cli/src/devices.c:366
+#: ../cli/src/devices.c:410
msgid "WPA "
msgstr "WPA "
-#: ../cli/src/devices.c:368
+#: ../cli/src/devices.c:412
msgid "WPA2 "
msgstr "WPA2 "
-#: ../cli/src/devices.c:371
+#: ../cli/src/devices.c:415
msgid "Enterprise "
-msgstr "Enterprise "
+msgstr "ਇੰਟਰਪà©à¨°à¨¾à¨ˆà¨œà¨¼ "
-#: ../cli/src/devices.c:380
+#: ../cli/src/devices.c:424
msgid "Ad-Hoc"
-msgstr "Ad-Hoc"
+msgstr "à¨à¨¡-ਹਾਕ"
-#: ../cli/src/devices.c:380
+#: ../cli/src/devices.c:424
msgid "Infrastructure"
msgstr "ਇੰਫਰਾਸਟੱਕਚਰ"
-#: ../cli/src/devices.c:442
+#: ../cli/src/devices.c:486
#, c-format
msgid "Error: 'dev list': %s"
-msgstr "Error: 'dev list': %s"
+msgstr "ਗਲਤੀ: 'dev list': %s"
-#: ../cli/src/devices.c:444
+#: ../cli/src/devices.c:488
#, c-format
msgid "Error: 'dev list': %s; allowed fields: %s"
-msgstr "Error: 'dev list': %s; allowed fields: %s"
+msgstr "ਗਲਤੀ: 'dev list': %s; ਮਨਜ਼ੂਰ ਖੇਤਰ: %s"
-#: ../cli/src/devices.c:453
+#: ../cli/src/devices.c:497
msgid "Device details"
msgstr "ਜੰਤਰ ਵੇਰਵਾ"
-#: ../cli/src/devices.c:483 ../cli/src/devices.c:827
+#: ../cli/src/devices.c:527 ../cli/src/devices.c:925
msgid "(unknown)"
msgstr "(ਅਣਜਾਣ)"
-#: ../cli/src/devices.c:484
+#: ../cli/src/devices.c:528
msgid "unknown)"
msgstr "ਅਣਜਾਣ)"
-#: ../cli/src/devices.c:510
+#: ../cli/src/devices.c:554
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
#. Print header
#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:583
+#: ../cli/src/devices.c:627
msgid "on"
msgstr "ਚਾਲੂ"
-#: ../cli/src/devices.c:583
+#: ../cli/src/devices.c:627
msgid "off"
msgstr "ਬੰਦ"
-#: ../cli/src/devices.c:710
+#: ../cli/src/devices.c:808
#, c-format
msgid "Error: 'dev status': %s"
-msgstr "Error: 'dev status': %s"
+msgstr "ਗਲਤੀ: 'dev status': %s"
-#: ../cli/src/devices.c:712
+#: ../cli/src/devices.c:810
#, c-format
msgid "Error: 'dev status': %s; allowed fields: %s"
-msgstr "Error: 'dev status': %s; allowed fields: %s"
+msgstr "ਗਲਤੀ: 'dev status': %s; ਮਨਜ਼ੂਰ ਖੇਤਰ: %s"
-#: ../cli/src/devices.c:719
+#: ../cli/src/devices.c:817
msgid "Status of devices"
msgstr "ਜੰਤਰਾਂ ਦੀ ਹਾਲਤ"
-#: ../cli/src/devices.c:747
+#: ../cli/src/devices.c:845
#, c-format
msgid "Error: '%s' argument is missing."
msgstr "ਗਲਤੀ: '%s' ਆਰਗੂਮੈਂਟ ਗà©à©°à¨® ਹੈ।"
-#: ../cli/src/devices.c:776 ../cli/src/devices.c:915 ../cli/src/devices.c:1035
+#: ../cli/src/devices.c:874 ../cli/src/devices.c:1013
+#: ../cli/src/devices.c:1136
#, c-format
msgid "Error: Device '%s' not found."
msgstr "ਗਲਤੀ: ਜੰਤਰ '%s' ਨਹੀਂ ਲੱਭਿਆ।"
-#: ../cli/src/devices.c:799
+#: ../cli/src/devices.c:897
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "ਸਫ਼ਲ: ਜੰਤਰ '%s' ਠੀਕ ਤਰà©à¨¹à¨¾à¨‚ ਡਿਸ-ਕà©à¨¨à©ˆà¨•à¨Ÿ ਹੋ ਗਿਆ।"
-#: ../cli/src/devices.c:824
+#: ../cli/src/devices.c:922
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "ਗਲਤੀ: ਜੰਤਰ '%s' (%s) ਡਿਸ-ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਫੇਲà©à¨¹: %s"
-#: ../cli/src/devices.c:832
+#: ../cli/src/devices.c:930
#, c-format
msgid "Device state: %d (%s)\n"
msgstr "ਜੰਤਰ ਹਾਲਤ: %d (%s)\n"
-#: ../cli/src/devices.c:896
+#: ../cli/src/devices.c:994
#, c-format
msgid "Error: iface has to be specified."
msgstr "ਗਲਤੀ: iface ਦੇਣ ਲਈ ਫੇਲà©à¨¹ ਹੈ।"
-#: ../cli/src/devices.c:1011
+#: ../cli/src/devices.c:1112
#, c-format
msgid "Error: 'dev wifi': %s"
-msgstr "Error: 'dev wifi': %s"
+msgstr "ਗਲਤੀ: 'dev wifi': %s"
-#: ../cli/src/devices.c:1013
+#: ../cli/src/devices.c:1114
#, c-format
msgid "Error: 'dev wifi': %s; allowed fields: %s"
-msgstr "Error: 'dev wifi': %s; allowed fields: %s"
+msgstr "ਗਲਤੀ: 'dev wifi': %s; ਮਨਜ਼ੂਰ ਖੇਤਰ: %s"
-#: ../cli/src/devices.c:1020
+#: ../cli/src/devices.c:1121
msgid "WiFi scan list"
msgstr "ਵਾਈਫਾਈ ਸਕੈਨ ਲਿਸਟ"
-#: ../cli/src/devices.c:1055 ../cli/src/devices.c:1109
+#: ../cli/src/devices.c:1156 ../cli/src/devices.c:1210
#, c-format
msgid "Error: Access point with hwaddr '%s' not found."
msgstr "ਗਲਤੀ: hwaddr '%s' ਵਾਲਾ ਅਸੈੱਸ ਪà©à¨†à¨‡à©°à¨Ÿ ਨਹੀਂ ਲੱਭਿਆ।"
-#: ../cli/src/devices.c:1072
+#: ../cli/src/devices.c:1173
#, c-format
msgid "Error: Device '%s' is not a WiFi device."
msgstr "ਗਲਤੀ: ਜੰਤਰ '%s' ਵਾਈ-ਫਾਈ ਜੰਤਰ ਨਹੀਂ ਹੈ।"
-#: ../cli/src/devices.c:1136
+#: ../cli/src/devices.c:1237
#, c-format
msgid "Error: 'dev wifi' command '%s' is not valid."
msgstr "ਗਲਤੀ: 'dev wifi' ਕਮਾਂਡ '%s' ਢà©à©±à¨•à¨µà©€à¨‚ ਨਹੀਂ ਹੈ।"
-#: ../cli/src/devices.c:1183
+#: ../cli/src/devices.c:1284
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "ਗਲਤੀ: 'dev' ਕਮਾਂਡ '%s' ਢà©à©±à¨•à¨µà©€à¨‚ ਨਹੀਂ ਹੈ।"
#: ../cli/src/network-manager.c:35
msgid "RUNNING"
-msgstr "RUNNING"
+msgstr "ਚੱਲ ਰਿਹਾ ਹੈ"
#. 1
#: ../cli/src/network-manager.c:37
-msgid "WIFI-HARDWARE"
-msgstr "WIFI-HARDWARE"
+msgid "NET-ENABLED"
+msgstr "NET-ENABLED"
#. 2
#: ../cli/src/network-manager.c:38
-msgid "WIFI"
-msgstr "WIFI"
+msgid "WIFI-HARDWARE"
+msgstr "ਵਾਈਫਾਈ ਹਾਰਡਵੇਅਰ"
#. 3
#: ../cli/src/network-manager.c:39
-msgid "WWAN-HARDWARE"
-msgstr "WWAN-HARDWARE"
+msgid "WIFI"
+msgstr "ਵਾਈਫਾਈ"
#. 4
#: ../cli/src/network-manager.c:40
+msgid "WWAN-HARDWARE"
+msgstr "WWAN-ਹਾਰਡਵੇਅਰ"
+
+#. 5
+#: ../cli/src/network-manager.c:41
msgid "WWAN"
msgstr "WWAN"
-#: ../cli/src/network-manager.c:62
-#, c-format
+#: ../cli/src/network-manager.c:64
+#, 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 }\n"
"\n"
" status\n"
-" sleep\n"
-" wakeup\n"
+" enable [true|false]\n"
+" sleep [true|false]\n"
" wifi [on|off]\n"
" wwan [on|off]\n"
"\n"
msgstr ""
"ਵਰਤੋਂ: nmcli nm { COMMAND | help }\n"
"\n"
-" COMMAND := { status | sleep | wakeup | wifi | wwan }\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"
"\n"
-#: ../cli/src/network-manager.c:83
+#: ../cli/src/network-manager.c:85
msgid "asleep"
msgstr "asleep"
-#: ../cli/src/network-manager.c:85
+#: ../cli/src/network-manager.c:87
msgid "connecting"
msgstr "ਕà©à¨¨à©ˆà¨•à¨Ÿ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
-#: ../cli/src/network-manager.c:125
+#: ../cli/src/network-manager.c:128
#, c-format
msgid "Error: 'nm status': %s"
-msgstr "Error: 'nm status': %s"
+msgstr "ਗਲਤੀ: 'nm status': %s"
-#: ../cli/src/network-manager.c:127
+#: ../cli/src/network-manager.c:130
#, c-format
msgid "Error: 'nm status': %s; allowed fields: %s"
-msgstr "Error: 'nm status': %s; allowed fields: %s"
+msgstr "ਗਲਤੀ: 'nm status': %s; ਮਨਜ਼ੂਰ ਖੇਤਰ: %s"
-#: ../cli/src/network-manager.c:134
+#: ../cli/src/network-manager.c:137
msgid "NetworkManager status"
msgstr "ਨੈੱਟਵਰਕਮੈਨੇਜਰ ਹਾਲਤ"
#. 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
+#: ../cli/src/network-manager.c:144 ../cli/src/network-manager.c:145
+#: ../cli/src/network-manager.c:146 ../cli/src/network-manager.c:147
+#: ../cli/src/network-manager.c:154 ../cli/src/network-manager.c:247
+#: ../cli/src/network-manager.c:296 ../cli/src/network-manager.c:328
msgid "enabled"
msgstr "ਚਾਲੂ ਹੈ"
-#: ../cli/src/network-manager.c:140 ../cli/src/network-manager.c:141
-#: ../cli/src/network-manager.c:142 ../cli/src/network-manager.c:143
-#: ../cli/src/network-manager.c:211 ../cli/src/network-manager.c:243
+#: ../cli/src/network-manager.c:144 ../cli/src/network-manager.c:145
+#: ../cli/src/network-manager.c:146 ../cli/src/network-manager.c:147
+#: ../cli/src/network-manager.c:154 ../cli/src/network-manager.c:247
+#: ../cli/src/network-manager.c:296 ../cli/src/network-manager.c:328
msgid "disabled"
msgstr "ਬੰਦ ਹੈ"
-#: ../cli/src/network-manager.c:148
+#: ../cli/src/network-manager.c:152
msgid "running"
msgstr "ਚੱਲ ਰਿਹਾ ਹੈ"
-#: ../cli/src/network-manager.c:148
+#: ../cli/src/network-manager.c:152
msgid "not running"
msgstr "ਨਹੀਂ ਚੱਲ ਰਿਹਾ ਹੈ"
-#: ../cli/src/network-manager.c:201 ../cli/src/network-manager.c:233
+#: ../cli/src/network-manager.c:175
+#, c-format
+#| msgid "Error: could not connect to D-Bus."
+msgid "Error: Couldn't connect to system bus: %s"
+msgstr "ਗਲਤੀ: ਡੀ-ਬੱਸ ਨਾਲ ਕà©à¨¨à©ˆà¨•à¨Ÿ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ: %s"
+
+#: ../cli/src/network-manager.c:186
+#, c-format
+#| msgid "Error: could not connect to D-Bus."
+msgid "Error: Couldn't create D-Bus object proxy."
+msgstr "ਗਲਤੀ: ਡੀ-ਬੱਸ ਆਬਜੈਕਟ ਪਰਾਕਸੀ ਨਹੀਂ ਬਣਾਇਆ ਜਾ ਸਕਿਆ।"
+
+#: ../cli/src/network-manager.c:192
+#, c-format
+#| msgid "Error: 'con list': %s"
+msgid "Error in sleep: %s"
+msgstr "ਸਲੀਪ 'ਚ ਗਲਤੀ: %s"
+
+#: ../cli/src/network-manager.c:237 ../cli/src/network-manager.c:286
+#: ../cli/src/network-manager.c:318
#, c-format
msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
-msgstr "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
+msgstr "ਗਲਤੀ: '--fields' value '%s' is not valid here; allowed fields: %s"
+
+#: ../cli/src/network-manager.c:245
+#| msgid "WiFi enabled"
+msgid "Networking enabled"
+msgstr "ਨੈਟਵਰਕਿੰਗ ਚਾਲੂ ਹੈ"
+
+#: ../cli/src/network-manager.c:256
+#, c-format
+#| msgid "Error: invalid 'wwan' parameter: '%s'."
+msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
+msgstr "ਗਲਤ: ਗਲਤ 'enable' ਪੈਰਾਮੀਟਰ: '%s'; 'true' ਜਾਂ 'false' ਵਰਤੋਂ।"
-#: ../cli/src/network-manager.c:209
+#: ../cli/src/network-manager.c:265
+#, c-format
+#| msgid "Error: Could not connect to NetworkManager."
+msgid "Error: Sleeping status is not exported by NetworkManager."
+msgstr "ਗਲਤੀ: ਨੈੱਟਵਰਕਮੈਨੇਜਰ ਵਲੋਂ ਸਲੀਪ (sleep) ਹਾਲਤ à¨à¨•à¨¸à¨ªà©‹à¨°à¨Ÿ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ।"
+
+#: ../cli/src/network-manager.c:273
+#, c-format
+#| msgid "Error: invalid 'wifi' parameter: '%s'."
+msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
+msgstr "ਗਲਤੀ: ਗਲਤ 'sleep' ਪੈਰਾਮੀਟਰ: '%s'; 'true' ਜਾਂ 'false' ਵਰਤੋਂ।"
+
+#: ../cli/src/network-manager.c:294
msgid "WiFi enabled"
-msgstr "WiFi enabled"
+msgstr "ਵਾਈਫਾਈ ਚਾਲੂ ਹੈ"
-#: ../cli/src/network-manager.c:220
+#: ../cli/src/network-manager.c:305
#, c-format
msgid "Error: invalid 'wifi' parameter: '%s'."
msgstr "ਗਲਤੀ: ਅਢà©à©±à¨•à¨µà¨¾à¨‚ 'wifi' ਪੈਰਾਮੀਟਰ: '%s'."
-#: ../cli/src/network-manager.c:241
+#: ../cli/src/network-manager.c:326
msgid "WWAN enabled"
-msgstr "WWAN enabled"
+msgstr "WWAN ਚਾਲੂ ਹੈ"
-#: ../cli/src/network-manager.c:252
+#: ../cli/src/network-manager.c:337
#, c-format
msgid "Error: invalid 'wwan' parameter: '%s'."
msgstr "ਗਲਤੀ: ਅਢà©à©±à¨•à¨µà¨¾à¨‚ 'wwan' ਪੈਰਾਮੀਟਰ: '%s'."
-#: ../cli/src/network-manager.c:263
+#: ../cli/src/network-manager.c:348
#, c-format
msgid "Error: 'nm' command '%s' is not valid."
msgstr "ਗਲਤੀ: 'nm' ਕਮਾਂਡ '%s' ਢà©à©±à¨•à¨µà©€à¨‚ ਨਹੀਂ ਹੈ।"
@@ -1005,27 +1077,27 @@ msgstr ""
#: ../cli/src/nmcli.c:113
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
-msgstr "Error: Object '%s' is unknown, try 'nmcli help'."
+msgstr "ਗਲਤੀ: ਆਬਜੈਕਟ '%s' ਅਣਜਾਣ ਹੈ, 'nmcli help' ਵਰਤੋਂ।"
#: ../cli/src/nmcli.c:143
#, c-format
msgid "Error: Option '--terse' is specified the second time."
-msgstr "Error: Option '--terse' is specified the second time."
+msgstr "ਗਲਤੀ: ਚੋਣ '--terse' ਦੂਜੀ ਵਾਰ ਦਿੱਤੀ ਗਈ।"
#: ../cli/src/nmcli.c:148
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
-msgstr "Error: Option '--terse' is mutually exclusive with '--pretty'."
+msgstr "ਗਲਤੀ: Option '--terse' is mutually exclusive with '--pretty'."
#: ../cli/src/nmcli.c:156
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
-msgstr "Error: Option '--pretty' is specified the second time."
+msgstr "ਗਲਤੀ: Option '--pretty' is specified the second time."
#: ../cli/src/nmcli.c:161
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
-msgstr "Error: Option '--pretty' is mutually exclusive with '--terse'."
+msgstr "ਗਲਤੀ: Option '--pretty' is mutually exclusive with '--terse'."
#: ../cli/src/nmcli.c:171 ../cli/src/nmcli.c:187
#, c-format
@@ -1035,12 +1107,12 @@ msgstr "ਗਲਤੀ: '%s' ਚੋਣ ਲਈ ਆਰਗੂਮੈਂਟ ਮੌਜà©
#: ../cli/src/nmcli.c:180 ../cli/src/nmcli.c:196
#, c-format
msgid "Error: '%s' is not valid argument for '%s' option."
-msgstr "Error: '%s' is not valid argument for '%s' option."
+msgstr "ਗਲਤੀ: '%s' is not valid argument for '%s' option."
#: ../cli/src/nmcli.c:203
#, c-format
msgid "Error: fields for '%s' options are missing."
-msgstr "Error: fields for '%s' options are missing."
+msgstr "ਗਲਤੀ: fields for '%s' options are missing."
#: ../cli/src/nmcli.c:209
#, c-format
@@ -1066,78 +1138,79 @@ msgstr "ਗਲਤੀ: ਨੈੱਟਵਰਕਮੈਨੇਜਰ ਨਾਲ ਕà©à¨
msgid "Success"
msgstr "ਸਫ਼ਲ"
-#: ../cli/src/settings.c:407
+#: ../cli/src/settings.c:411
#, c-format
msgid "%d (hex-ascii-key)"
msgstr "%d (hex-ascii-key)"
-#: ../cli/src/settings.c:409
+#: ../cli/src/settings.c:413
#, c-format
msgid "%d (104/128-bit passphrase)"
-msgstr "%d (104/128-bit ਗà©à¨ªà¨¤à¨•à©‹à¨¡)"
+msgstr "%d (104/128-bit ਗà©à¨ªà¨¤-ਕੋਡ)"
-#: ../cli/src/settings.c:412
+#: ../cli/src/settings.c:416
#, c-format
msgid "%d (unknown)"
msgstr "%d (ਅਣਜਾਣ)"
-#: ../cli/src/settings.c:438
+#: ../cli/src/settings.c:442
msgid "0 (unknown)"
msgstr "0 (ਅਣਜਾਣ)"
-#: ../cli/src/settings.c:444
+#: ../cli/src/settings.c:448
msgid "any, "
msgstr "ਕੋਈ ਵੀ, "
-#: ../cli/src/settings.c:446
+#: ../cli/src/settings.c:450
msgid "900 MHz, "
msgstr "900 MHz, "
-#: ../cli/src/settings.c:448
+#: ../cli/src/settings.c:452
msgid "1800 MHz, "
msgstr "1800 MHz, "
-#: ../cli/src/settings.c:450
+#: ../cli/src/settings.c:454
msgid "1900 MHz, "
msgstr "1900 MHz, "
-#: ../cli/src/settings.c:452
+#: ../cli/src/settings.c:456
msgid "850 MHz, "
msgstr "850 MHz, "
-#: ../cli/src/settings.c:454
+#: ../cli/src/settings.c:458
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../cli/src/settings.c:456
+#: ../cli/src/settings.c:460
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../cli/src/settings.c:458
+#: ../cli/src/settings.c:462
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../cli/src/settings.c:460
+#: ../cli/src/settings.c:464
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../cli/src/settings.c:462
+#: ../cli/src/settings.c:466
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../cli/src/settings.c:464
+#: ../cli/src/settings.c:468
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../cli/src/settings.c:466
+#: ../cli/src/settings.c:470
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../cli/src/settings.c:546 ../cli/src/settings.c:708
+#: ../cli/src/settings.c:554 ../cli/src/settings.c:721
msgid "auto"
msgstr "ਆਟੋ"
-#: ../cli/src/settings.c:704 ../cli/src/settings.c:707 ../cli/src/utils.c:172
+#: ../cli/src/settings.c:716 ../cli/src/settings.c:719
+#: ../cli/src/settings.c:720 ../cli/src/utils.c:172
msgid "not set"
msgstr "ਸੈੱਟ ਨਹੀਂ ਹੈ"
@@ -1440,7 +1513,7 @@ msgstr "ਇੰਕà©à¨°à¨¿à¨ªà¨¸à¨¼à¨¨ ਪਰਸੰਗ ਸ਼à©à¨°à©‚ ਕਰਨ
#: ../libnm-util/crypto_nss.c:396
#, c-format
msgid "Failed to encrypt: %d."
-msgstr "ਇੰਕà©à¨°à¨¿à¨ªà¨Ÿ ਕਰਨ ਲਈ ਫੇਲà©à¨¹: %d."
+msgstr "ਇੰਕà©à¨°à¨¿à¨ªà¨Ÿ ਕਰਨ ਲਈ ਫੇਲà©à¨¹: %d"
#: ../libnm-util/crypto_nss.c:404
#, c-format
@@ -1476,30 +1549,114 @@ msgstr "PKCS#12 ਫਾਇਲ ਜਾਂਚੀ ਨਹੀਂ ਜਾ ਸਕੀ: %d"
msgid "Could not generate random data."
msgstr "ਰਲਵਾਂ ਡਾਟਾ ਤਿਆਰ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ।"
-#: ../libnm-util/nm-utils.c:1925
+#: ../libnm-util/nm-utils.c:1975
#, c-format
msgid "Not enough memory to make encryption key."
msgstr "ਇੰਕà©à¨°à¨¿à¨ªà¨¸à¨¼à¨¨ ਕà©à©°à¨œà©€ ਬਣਾਉਣ ਲਈ ਲੋੜੀਦੀ ਮੈਮੋਰੀ ਨਹੀਂ ਹੈ।"
-#: ../libnm-util/nm-utils.c:2035
+#: ../libnm-util/nm-utils.c:2085
msgid "Could not allocate memory for PEM file creation."
msgstr "PEM ਫਾਇਲ ਬਣਾਉਣ ਲਈ ਮੈਮੋਰੀ ਜਾਰੀ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ।"
-#: ../libnm-util/nm-utils.c:2047
+#: ../libnm-util/nm-utils.c:2097
#, c-format
msgid "Could not allocate memory for writing IV to PEM file."
msgstr "PEM ਫਾਇਲ ਵਾਸਤੇ IV ਲਿਖਣ ਲਈ ਮੈਮੋਰੀ ਦਿੱਤੀ ਨਹੀਂ ਜਾ ਸਕੀ।"
-#: ../libnm-util/nm-utils.c:2059
+#: ../libnm-util/nm-utils.c:2109
#, c-format
msgid "Could not allocate memory for writing encrypted key to PEM file."
msgstr "PEM ਫਾਇਲ ਵਾਸਤੇ ਇੰਕà©à¨°à¨¿à¨ªà¨Ÿ ਕੀਤੀ ਕà©à©°à¨œà©€ ਲਿਖਣ ਲਈ ਮੈਮੋਰੀ ਦਿੱਤੀ ਨਹੀਂ ਜਾ ਸਕੀ।"
-#: ../libnm-util/nm-utils.c:2078
+#: ../libnm-util/nm-utils.c:2128
#, c-format
msgid "Could not allocate memory for PEM file data."
msgstr "PEM ਫਾਇਲ ਡਾਟੇ ਲਈ ਮੈਮੋਰੀ ਜਾਰੀ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ"
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
+msgid "Connection sharing via a protected WiFi network"
+msgstr "ਸà©à¨°à©±à¨–ਿਅਤ ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ ਰਾਹੀਂ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਸਾਂà¨à¨¾ ਕਰੋ"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
+msgid "Connection sharing via an open WiFi network"
+msgstr "ਓਪਨ ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ ਰਾਹੀਂ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਸਾਂà¨à¨¾ ਕਰੋ"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
+msgid "Modify persistent system hostname"
+msgstr "ਸਥਿਰ ਸਿਸਟਮ ਹੋਸਟ-ਨਾਂ ਸੋਧ"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
+msgid "Modify system connections"
+msgstr "ਸਿਸਟਮ ਕà©à¨¨à©ˆà¨¸à¨¼à¨¨ ਸੋਧ"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
+msgid "System policy prevents modification of system settings"
+msgstr "ਸਿਸਟਮ ਪਾਲਸੀ ਸਿਸਟਮ ਸੈਟਿੰਗ ਲਈ ਸੋਧ ਤੋਂ ਰੋਕਦੀ ਹੈ"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
+msgid "System policy prevents modification of the persistent system hostname"
+msgstr "ਸਿਸਟਮ ਪਾਲਸੀ ਸਥਿਰ ਸਿਸਟਮ ਹੋਸਟ-ਨਾਂ ਲਈ ਸੋਧਾਂ ਤੋਂ ਰੋਕਦੀ ਹੈ"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
+msgid "System policy prevents sharing connections via a protected WiFi network"
+msgstr "ਸਿਸਟਮ ਪਾਲਸੀ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਨੂੰ ਸà©à¨°à©±à¨–ਿਅਤ ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ ਰਾਹੀਂ ਸਾਂà¨à¨¾ ਕਰਨ ਤੋਂ ਰੋਕਦੀ ਹੈ"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
+msgid "System policy prevents sharing connections via an open WiFi network"
+msgstr "ਸਿਸਟਮ ਪਾਲਸੀ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਨੂੰ ਓਪਨ ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ ਰਾਹੀਂ ਸਾਂà¨à¨¾ ਕਰਨ ਤੋਂ ਰੋਕਦੀ ਹੈ"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
+msgid "Allow control of network connections"
+msgstr "ਨੈੱਟਵਰਕ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨à¨¾à¨‚ ਲਈ ਕੰਟਰੋਲ ਮਨਜ਼ੂਰ"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
+msgid "Allow use of user-specific connections"
+msgstr "ਖਾਸ ਯੂਜ਼ਰ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨à¨¾à¨‚ ਦੀ ਵਰਤੋਂ ਮਨਜ਼ੂਰ"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
+msgid "Enable or disable WiFi devices"
+msgstr "ਵਾਈ-ਫਾਈ ਜੰਤਰ ਚਾਲੂ ਜਾਂ ਬੰਦ ਕਰੋ"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
+msgid "Enable or disable mobile broadband devices"
+msgstr "ਮੋਬਾਇਲ ਬਰਾਡਬੈਂਡ ਜੰਤਰ ਚਾਲੂ ਜਾਂ ਬੰਦ"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+msgid "Enable or disable system networking"
+msgstr "ਸਿਸਟਮ ਨੈੱਟਵਰਕਿੰਗ ਚਾਲੂ ਜਾਂ ਬੰਦ"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
+msgid ""
+"Put NetworkManager to sleep or wake it up (should only be used by system "
+"power management)"
+msgstr ""
+"ਨੈੱਟਵਰਕਮੈਨਜੇਰ ਨੂੰ ਸਲੀਪ ਕਰੋ ਜਾਂ ਵੇਕ ਅੱਪ ਕਰੋ (ਕੇਵਲ ਸਿਸਟਮ ਪਾਵਰ ਮੈਨਜੇਮੈਂਟ ਰਾਹੀਂ ਵਰਤਿਆ ਜਾਣਾ ਚਾਹੀਦਾ "
+"ਹੈ)"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
+msgid "System policy prevents control of network connections"
+msgstr "ਸਿਸਟਮ ਪਾਲਸੀ ਨੈੱਟਵਰਕ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਕੰਟਰੋਲ ਕਰਨ ਤੋਂ ਸੋਧ ਤੋਂ ਰੋਕਦੀ ਹੈ"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
+msgid "System policy prevents enabling or disabling WiFi devices"
+msgstr "ਸਿਸਟਮ ਪਾਲਸੀ ਵਾਈ-ਫਾਈ ਜੰਤਰ ਚਾਲੂ ਜਾਂ ਬੰਦ ਕਰਨੋਂ ਰੋਕਦੀ ਹੈ"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
+msgid "System policy prevents enabling or disabling mobile broadband devices"
+msgstr "ਸਿਸਟਮ ਪਾਲਸੀ ਮੋਬਾਇਲ ਬਰਾਡਬੈਂਡ ਜੰਤਰ ਚਾਲੂ ਜਾਂ ਬੰਦ ਕਰਨ ਤੋਂ ਰੋਕਦੀ ਹੈ"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
+msgid "System policy prevents enabling or disabling system networking"
+msgstr "ਸਿਸਟਮ ਪਾਲਸੀ ਸਿਸਟਮ ਨੈੱਟਵਰਕਿੰਗ ਚਾਲੂ ਜਾਂ ਬੰਦ ਕਰਨ ਤੋਂ ਰੋਕਦੀ ਹੈ"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
+msgid "System policy prevents putting NetworkManager to sleep or waking it up"
+msgstr "ਸਿਸਟਮ ਪਾਲਸੀ ਨੈੱਟਵਰਕਮੈਨੇਜਰ ਨੂੰ ਸਲੀਪ ਜਾਂ ਵੇਕਅੱਪ ਕਰਨ ਤੋਂ ਰੋਕਦੀ ਹੈ"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
+msgid "System policy prevents use of user-specific connections"
+msgstr "ਸਿਸਟਮ ਪਾਲਸੀ ਖਾਸ-ਯੂਜ਼ਰ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਵਰਤੋਂ ਤੋਂ ਰੋਕਦੀ ਹੈ"
+
#: ../src/nm-netlink-monitor.c:100 ../src/nm-netlink-monitor.c:231
#: ../src/nm-netlink-monitor.c:653
#, c-format
@@ -1518,7 +1675,7 @@ msgstr "ਲਿੰਕ ਹਾਲਤ ਦੀ ਨਿਗਰਾਨੀ ਲਈ ਨੈੱà
#: ../src/nm-netlink-monitor.c:265
#, c-format
msgid "unable to enable netlink handle credential passing: %s"
-msgstr "netlink ਹੈੱਡਲ ਕਰੀਡੈਂਸ਼ਲ ਪਾਸਿੰਗ ਯੋਯਗ ਕਰਨ ਲਈ ਅਸਮਰੱਥ: %s"
+msgstr "netlink ਹੈੱਡਲ ਸਨਦ ਪਾਸ ਕਰਨ ਲਈ ਅਸਮਰੱਥ: %s"
#: ../src/nm-netlink-monitor.c:291 ../src/nm-netlink-monitor.c:353
#, c-format
@@ -1533,28 +1690,28 @@ msgstr "ਲਿੰਕ ਹਾਲਤ ਦੀ ਨਿਗਰਾਨੀ ਲਈ ਨੈੱà
#: ../src/nm-netlink-monitor.c:502
#, c-format
msgid "unable to join netlink group: %s"
-msgstr "netlink ਗਰà©à©±à¨ª ਜà©à¨†à¨‡à©°à¨¨ ਕਰਨ ਲਈ ਅਣਸਮਰੱਥ:: %s"
+msgstr "netlink ਗਰà©à©±à¨ª ਜà©à¨†à¨‡à©°à¨¨ ਕਰਨ ਲਈ ਅਸਮਰੱਥ:: %s"
#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642
#, c-format
msgid "error updating link cache: %s"
msgstr "ਲਿੰਕ ਕੈਸ਼ ਅੱਪਡੇਟ ਕਰਨ ਦੌਰਾਨ ਗਲਤੀ: %s"
-#: ../src/main.c:502
+#: ../src/main.c:499
#, c-format
msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgstr "ਗਲਤ ਚੋਣ। ਢà©à©±à¨•à¨µà©€à¨†à¨‚ ਚੋਣਾਂ ਵੇਖਣ ਲਈ --help ਵਰਤੋਂ ਜੀ।\n"
-#: ../src/main.c:562
+#: ../src/main.c:570
#, c-format
msgid "%s. Please use --help to see a list of valid options.\n"
msgstr "%s। ਢà©à©±à¨•à¨µà©€à¨†à¨‚ ਚੋਣਾਂ ਦੀ ਲਿਸਟ ਵੇਖਣ ਲਈ --help ਵਰਤੋਂ ਜੀ।\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:325
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:328
msgid "# Created by NetworkManager\n"
msgstr "#ਨੈੱਟਵਰਕ ਮੈਨੇਜਰ ਵਲੋਂ ਬਣਾਈ\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:341
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:344
#, c-format
msgid ""
"# Merged from %s\n"
@@ -1563,19 +1720,19 @@ msgstr ""
"#%s ਤੋਂ ਮਿਲਾਇਆ\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:279
+#: ../src/dhcp-manager/nm-dhcp-manager.c:284
msgid "no usable DHCP client could be found."
msgstr "ਕੋਈ ਵਰਤੋਂਯੋਗ DHCP ਕਲਾਇਟ ਨਹੀਂ ਲੱਭਿਆ ਜਾ ਸਕਿਆ।"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:288
+#: ../src/dhcp-manager/nm-dhcp-manager.c:293
msgid "'dhclient' could be found."
msgstr "'dhclient' ਲੱਭਿਆ ਜਾ ਸਕਿਆ।"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:298
+#: ../src/dhcp-manager/nm-dhcp-manager.c:303
msgid "'dhcpcd' could be found."
msgstr "'dhcpcd' ਲੱਭਿਆ ਜਾ ਸਕਿਆ।"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:306
+#: ../src/dhcp-manager/nm-dhcp-manager.c:311
#, c-format
msgid "unsupported DHCP client '%s'"
msgstr "ਗੈਰਸਹਾਇਕ DHCP ਕਲਾਇਟ '%s'"
@@ -1590,11 +1747,11 @@ msgstr "ਅਣਜਾਣ ਲਾਗ ਲੈਵਲ '%s'"
msgid "Unknown log domain '%s'"
msgstr "ਅਣਜਾਣ ਲਾਗ ਡੋਮੇਨ '%s'"
-#: ../src/named-manager/nm-named-manager.c:343
+#: ../src/dns-manager/nm-dns-manager.c:384
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr "ਨੋਟ: libc ਰਿਜ਼ੋਲਵਰ ੩ ਤੋਂ ਵੱਧ ਨੇਮ-ਸਰਵਰ ਲਈ ਸਹਾਇਕ ਨਹੀਂ ਹੋ ਸਕਦਾ ਹੈ।"
-#: ../src/named-manager/nm-named-manager.c:345
+#: ../src/dns-manager/nm-dns-manager.c:386
msgid "The nameservers listed below may not be recognized."
msgstr "ਹੇਠਾਂ ਦਿੱਤੇ ਨੇਮ-ਸਰਵਰ ਪਛਾਣੇ ਨਹੀਂ ਜਾ ਸਕਦੇ।"
@@ -1603,41 +1760,10 @@ msgstr "ਹੇਠਾਂ ਦਿੱਤੇ ਨੇਮ-ਸਰਵਰ ਪਛਾਣੇ à
msgid "Auto %s"
msgstr "ਆਟੋ %s"
-#: ../system-settings/plugins/ifcfg-rh/reader.c:3256
+#: ../system-settings/plugins/ifcfg-rh/reader.c:3412
+#: ../system-settings/plugins/ifnet/connection_parser.c:49
msgid "System"
-msgstr "IPL ਲੀਨਕਸ (Linux) ਸਿਸਟਮ।"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
-msgid "Connection sharing via a protected WiFi network"
-msgstr "ਸà©à¨°à©±à¨–ਿਅਤ ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ ਰਾਹੀਂ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਸਾਂà¨à¨¾ ਕਰੋ"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
-msgid "Connection sharing via an open WiFi network"
-msgstr "ਓਪਨ ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ ਰਾਹੀਂ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਸਾਂà¨à¨¾ ਕਰੋ"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
-msgid "Modify persistent system hostname"
-msgstr "ਸਥਿਰ ਸਿਸਟਮ ਹੋਸਟ-ਨਾਂ ਸੋਧ"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
-msgid "Modify system connections"
-msgstr "ਸਿਸਟਮ ਕà©à¨¨à©ˆà¨¸à¨¼à¨¨ ਸੋਧ"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
-msgid "System policy prevents modification of system settings"
-msgstr "ਸਿਸਟਮ ਪਾਲਸੀ ਸਿਸਟਮ ਸੈਟਿੰਗ ਲਈ ਸੋਧ ਤੋਂ ਰੋਕਦੀ ਹੈ"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
-msgid "System policy prevents modification of the persistent system hostname"
-msgstr "ਸਿਸਟਮ ਪਾਲਸੀ ਸਥਿਰ ਸਿਸਟਮ ਹੋਸਟ-ਨਾਂ ਲਈ ਸੋਧਾਂ ਤੋਂ ਰੋਕਦੀ ਹੈ"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
-msgid "System policy prevents sharing connections via a protected WiFi network"
-msgstr "ਸਿਸਟਮ ਪਾਲਸੀ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਨੂੰ ਸà©à¨°à©±à¨–ਿਅਤ ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ ਰਾਹੀਂ ਸਾਂà¨à¨¾ ਕਰਨ ਤੋਂ ਰੋਕਦੀ ਹੈ"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
-msgid "System policy prevents sharing connections via an open WiFi network"
-msgstr "ਸਿਸਟਮ ਪਾਲਸੀ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਨੂੰ ਓਪਨ ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ ਰਾਹੀਂ ਸਾਂà¨à¨¾ ਕਰਨ ਤੋਂ ਰੋਕਦੀ ਹੈ"
+msgstr "ਸਿਸਟਮ।"
#~ msgid "Type"
#~ msgstr "ਕਿਸਮ"
diff --git a/po/pl.po b/po/pl.po
index 7ffa179913..f1b0650d04 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -7,20 +7,96 @@
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: 2010-02-26 03:24+0000\n"
-"PO-Revision-Date: 2010-03-08 11:52+0100\n"
-"Last-Translator: Tomasz Dominikowski <dominikowski@gmail.com>\n"
-"Language-Team: Polish <gnomepl@aviary.pl>\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=NetworkManager&component=general\n"
+"POT-Creation-Date: 2010-09-22 03:25+0000\n"
+"PO-Revision-Date: 2010-09-22 17:43+0200\n"
+"Last-Translator: Piotr DrÄ…g <piotrdrag@gmail.com>\n"
+"Language-Team: Polish <pl@li.org>\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"
+"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: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
+msgid "NAME"
+msgstr "NAZWA"
-#: ../cli/src/connections.c:86
+#. 0
+#: ../cli/src/connections.c:61 ../cli/src/connections.c:76
+msgid "UUID"
+msgstr "UUID"
+
+#. 1
+#: ../cli/src/connections.c:62
+msgid "DEVICES"
+msgstr "URZÄ„DZENIA"
+
+#. 2
+#: ../cli/src/connections.c:63 ../cli/src/connections.c:78
+msgid "SCOPE"
+msgstr "ZAKRES"
+
+#. 3
+#: ../cli/src/connections.c:64
+msgid "DEFAULT"
+msgstr "DOMYÅšLNE"
+
+#. 4
+#: ../cli/src/connections.c:65
+msgid "DBUS-SERVICE"
+msgstr "USÅUGA-DBUS"
+
+#. 5
+#: ../cli/src/connections.c:66
+msgid "SPEC-OBJECT"
+msgstr "KONKRETNY-OBIEKT"
+
+#. 6
+#: ../cli/src/connections.c:67
+msgid "VPN"
+msgstr "VPN"
+
+#. 1
+#. 0
+#. 1
+#: ../cli/src/connections.c:77 ../cli/src/devices.c:62 ../cli/src/devices.c:90
+msgid "TYPE"
+msgstr "TYP"
+
+#. 3
+#: ../cli/src/connections.c:79
+msgid "TIMESTAMP"
+msgstr "OKRES-CZASU"
+
+#. 4
+#: ../cli/src/connections.c:80
+msgid "TIMESTAMP-REAL"
+msgstr "RZECZYWISTY-OKRES-CZASU"
+
+#. 5
+#: ../cli/src/connections.c:81
+msgid "AUTOCONNECT"
+msgstr "ÅÄ„CZENIE-AUTOMATYCZNE"
+
+#. 6
+#: ../cli/src/connections.c:82
+msgid "READONLY"
+msgstr "TYLKO-DO-ODCZYTU"
+
+#. 7
+#: ../cli/src/connections.c:83
+msgid "DBUS-PATH"
+msgstr "ŚCIEŻKA-DO-DBUS"
+
+#: ../cli/src/connections.c:159
#, c-format
msgid ""
"Usage: nmcli con { COMMAND | help }\n"
@@ -28,7 +104,8 @@ msgid ""
"\n"
" list [id <id> | uuid <id> | system | user]\n"
" status\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout <timeout>]\n"
+" up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout "
+"<timeout>]\n"
" down id <id> | uuid <id>\n"
msgstr ""
"Użycie: nmcli con { POLECENIE | help }\n"
@@ -36,418 +113,528 @@ msgstr ""
"\n"
" list [id <identyfikator> | uuid <identyfikator> | system | user]\n"
" status\n"
-" up id <id> | uuid <id> [iface <interfejs>] [ap <adres_sprzętowy>] [--nowait] [--timeout <czas>]\n"
+" up id <id> | uuid <id> [iface <interfejs>] [ap <adres_sprzętowy>] [--"
+"nowait] [--timeout <czas>]\n"
" down id <identyfikator> | uuid <identyfikator>\n"
+#: ../cli/src/connections.c:199 ../cli/src/connections.c:540
+#, c-format
+msgid "Error: 'con list': %s"
+msgstr "BÅ‚Ä…d: \"con list\": %s"
+
+#: ../cli/src/connections.c:201 ../cli/src/connections.c:542
+#, c-format
+msgid "Error: 'con list': %s; allowed fields: %s"
+msgstr "BÅ‚Ä…d: \"con list\": %s; dozwolone pola: %s"
+
+#: ../cli/src/connections.c:209
+msgid "Connection details"
+msgstr "Szczegóły połączenia"
+
+#: ../cli/src/connections.c:384 ../cli/src/connections.c:605
+msgid "system"
+msgstr "systemowe"
+
+#: ../cli/src/connections.c:384 ../cli/src/connections.c:605
+msgid "user"
+msgstr "użytkownika"
+
+#: ../cli/src/connections.c:386
+msgid "never"
+msgstr "nigdy"
+
+#. "CAPABILITIES"
+#. Print header
+#. "WIFI-PROPERTIES"
+#: ../cli/src/connections.c:387 ../cli/src/connections.c:388
+#: ../cli/src/connections.c:606 ../cli/src/connections.c:609
+#: ../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
+msgid "yes"
+msgstr "tak"
-#: ../cli/src/connections.c:158
-msgid "Connections"
-msgstr "Połączenia"
-
-
-#: ../cli/src/connections.c:158
-#: ../cli/src/connections.c:160
-#: ../cli/src/connections.c:196
-#: ../cli/src/connections.c:198
-#: ../cli/src/connections.c:205
-#: ../cli/src/connections.c:207
-#: ../cli/src/devices.c:298
-#: ../cli/src/devices.c:458
-#: ../cli/src/devices.c:460
-msgid "Type"
-msgstr "Typ"
-
-
-#: ../cli/src/connections.c:158
-#: ../cli/src/connections.c:160
-#: ../cli/src/connections.c:196
-#: ../cli/src/connections.c:198
-#: ../cli/src/connections.c:205
-#: ../cli/src/connections.c:207
-#: ../cli/src/connections.c:297
-#: ../cli/src/connections.c:299
-msgid "UUID"
-msgstr "UUID"
-
-
-#: ../cli/src/connections.c:158
-#: ../cli/src/connections.c:160
-#: ../cli/src/connections.c:196
-#: ../cli/src/connections.c:198
-#: ../cli/src/connections.c:205
-#: ../cli/src/connections.c:207
-#: ../cli/src/connections.c:297
-#: ../cli/src/connections.c:299
-msgid "Name"
-msgstr "Nazwa"
-
-
-#: ../cli/src/connections.c:163
-#, c-format
-msgid "System connections:\n"
-msgstr "Połączenia systemowe:\n"
-
+#: ../cli/src/connections.c:387 ../cli/src/connections.c:388
+#: ../cli/src/connections.c:606 ../cli/src/connections.c:609
+#: ../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
+msgid "no"
+msgstr "nie"
-#: ../cli/src/connections.c:167
-#, c-format
-msgid "User connections:\n"
-msgstr "Połączenia użytkownika:\n"
+#: ../cli/src/connections.c:461 ../cli/src/connections.c:504
+msgid "System connections"
+msgstr "Połączenia systemowe"
+#: ../cli/src/connections.c:466 ../cli/src/connections.c:517
+msgid "User connections"
+msgstr "Połączenia użytkownika"
-#: ../cli/src/connections.c:178
-#: ../cli/src/connections.c:967
-#: ../cli/src/connections.c:983
-#: ../cli/src/connections.c:992
-#: ../cli/src/connections.c:1003
-#: ../cli/src/connections.c:1085
-#: ../cli/src/devices.c:604
-#: ../cli/src/devices.c:614
-#: ../cli/src/devices.c:699
-#: ../cli/src/devices.c:785
-#: ../cli/src/devices.c:792
+#: ../cli/src/connections.c:478 ../cli/src/connections.c:1338
+#: ../cli/src/connections.c:1354 ../cli/src/connections.c:1363
+#: ../cli/src/connections.c:1374 ../cli/src/connections.c:1459
+#: ../cli/src/devices.c:962 ../cli/src/devices.c:972 ../cli/src/devices.c:1074
+#: ../cli/src/devices.c:1081
#, c-format
msgid "Error: %s argument is missing."
msgstr "BÅ‚Ä…d: brak parametru %s."
-
-#: ../cli/src/connections.c:189
+#: ../cli/src/connections.c:491
#, c-format
msgid "Error: %s - no such connection."
msgstr "Błąd: %s - nie ma takiego połączenia."
-
-#: ../cli/src/connections.c:196
-msgid "System-wide connections"
-msgstr "Połączenia systemowe"
-
-
-#: ../cli/src/connections.c:205
-msgid "User connections"
-msgstr "Połączenia użytkownika"
-
-
-#: ../cli/src/connections.c:212
-#: ../cli/src/connections.c:1016
-#: ../cli/src/connections.c:1103
-#: ../cli/src/devices.c:446
-#: ../cli/src/devices.c:494
-#: ../cli/src/devices.c:628
-#: ../cli/src/devices.c:706
-#: ../cli/src/devices.c:798
+#: ../cli/src/connections.c:523 ../cli/src/connections.c:1387
+#: ../cli/src/connections.c:1477 ../cli/src/devices.c:785
+#: ../cli/src/devices.c:852 ../cli/src/devices.c:986 ../cli/src/devices.c:1087
#, c-format
msgid "Unknown parameter: %s\n"
msgstr "Nieznany parametr: %s\n"
-
-#: ../cli/src/connections.c:221
+#: ../cli/src/connections.c:532
#, c-format
msgid "Error: no valid parameter specified."
msgstr "Błąd: nie podano prawidłowego parametru."
+#: ../cli/src/connections.c:547 ../cli/src/connections.c:1580
+#: ../cli/src/devices.c:1293 ../cli/src/network-manager.c:359
+#, c-format
+msgid "Error: %s."
+msgstr "BÅ‚Ä…d: %s."
-#. FIXME: Fix the output
-#: ../cli/src/connections.c:268
-#: ../cli/src/devices.c:302
-#: ../cli/src/devices.c:321
-#: ../cli/src/devices.c:353
-#: ../cli/src/devices.c:355
-#: ../cli/src/devices.c:357
-#: ../cli/src/devices.c:359
-#: ../cli/src/devices.c:361
-msgid "yes"
-msgstr "tak"
-
-
-#: ../cli/src/connections.c:268
-#: ../cli/src/devices.c:304
-msgid "no"
-msgstr "nie"
+#: ../cli/src/connections.c:653
+#, c-format
+msgid "Error: 'con status': %s"
+msgstr "BÅ‚Ä…d: \"con status\": %s"
+#: ../cli/src/connections.c:655
+#, c-format
+msgid "Error: 'con status': %s; allowed fields: %s"
+msgstr "BÅ‚Ä…d: \"con status\": %s; dozwolone pola: %s"
-#: ../cli/src/connections.c:297
+#: ../cli/src/connections.c:662
msgid "Active connections"
msgstr "Aktywne połączenia"
-
-#: ../cli/src/connections.c:297
-#: ../cli/src/connections.c:299
-#: ../cli/src/devices.c:302
-#: ../cli/src/devices.c:304
-msgid "Default"
-msgstr "Domyślne"
-
-
-#: ../cli/src/connections.c:297
-#: ../cli/src/connections.c:299
-msgid "Service"
-msgstr "Usługa"
-
-
-#: ../cli/src/connections.c:297
-#: ../cli/src/connections.c:299
-msgid "Devices"
-msgstr "UrzÄ…dzenia"
-
-
-#: ../cli/src/connections.c:659
+#: ../cli/src/connections.c:1030
#, c-format
msgid "no active connection on device '%s'"
msgstr "brak aktywnych połączeń na urządzeniu \"%s\""
-
-#: ../cli/src/connections.c:667
+#: ../cli/src/connections.c:1038
#, c-format
msgid "no active connection or device"
msgstr "brak aktywnych połączeń na urządzeń"
+#: ../cli/src/connections.c:1088
+#, 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:1090
+#, c-format
+msgid "no device found for connection '%s'"
+msgstr "nie odnaleziono urządzenia dla połączenia \"%s\""
-#: ../cli/src/connections.c:730
+#: ../cli/src/connections.c:1101
msgid "activating"
msgstr "aktywowanie"
-
-#: ../cli/src/connections.c:732
+#: ../cli/src/connections.c:1103
msgid "activated"
msgstr "aktywowano"
-
-#: ../cli/src/connections.c:735
-#: ../cli/src/connections.c:758
-#: ../cli/src/connections.c:791
-#: ../cli/src/devices.c:111
-#: ../cli/src/network-manager.c:76
-#: ../cli/src/network-manager.c:98
+#: ../cli/src/connections.c:1106 ../cli/src/connections.c:1129
+#: ../cli/src/connections.c:1162 ../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
msgid "unknown"
msgstr "nieznane"
-
-#: ../cli/src/connections.c:744
+#: ../cli/src/connections.c:1115
msgid "VPN connecting (prepare)"
msgstr "ÅÄ…czenie z VPN (przygotowanie)"
-
-#: ../cli/src/connections.c:746
+#: ../cli/src/connections.c:1117
msgid "VPN connecting (need authentication)"
msgstr "ÅÄ…czenie z VPN (wymaga uwierzytelnienia)"
-
-#: ../cli/src/connections.c:748
+#: ../cli/src/connections.c:1119
msgid "VPN connecting"
msgstr "ÅÄ…czenie z VPN"
-
-#: ../cli/src/connections.c:750
+#: ../cli/src/connections.c:1121
msgid "VPN connecting (getting IP configuration)"
msgstr "ÅÄ…czenie z VPN (pobieranie konfiguracji adresu IP)"
-
-#: ../cli/src/connections.c:752
+#: ../cli/src/connections.c:1123
msgid "VPN connected"
msgstr "Połączono z VPN"
-
-#: ../cli/src/connections.c:754
+#: ../cli/src/connections.c:1125
msgid "VPN connection failed"
msgstr "Połączenie z VPN się nie powiodło"
-
-#: ../cli/src/connections.c:756
+#: ../cli/src/connections.c:1127
msgid "VPN disconnected"
msgstr "Rozłączono z VPN"
-
-#: ../cli/src/connections.c:767
+#: ../cli/src/connections.c:1138
msgid "unknown reason"
msgstr "nieznany powód"
-
-#: ../cli/src/connections.c:769
+#: ../cli/src/connections.c:1140
msgid "none"
msgstr "brak"
-
-#: ../cli/src/connections.c:771
+#: ../cli/src/connections.c:1142
msgid "the user was disconnected"
msgstr "użytkownik został rozłączony"
-
-#: ../cli/src/connections.c:773
+#: ../cli/src/connections.c:1144
msgid "the base network connection was interrupted"
msgstr "podstawowe połączenie sieciowe zostało przerwane"
-
-#: ../cli/src/connections.c:775
+#: ../cli/src/connections.c:1146
msgid "the VPN service stopped unexpectedly"
msgstr "usługa VPN została nieoczekiwanie zatrzymana"
-
-#: ../cli/src/connections.c:777
+#: ../cli/src/connections.c:1148
msgid "the VPN service returned invalid configuration"
msgstr "usługa VPN zwróciła nieprawidłową konfigurację"
-
-#: ../cli/src/connections.c:779
+#: ../cli/src/connections.c:1150
msgid "the connection attempt timed out"
msgstr "próba połączenia przekroczyła czas oczekiwania"
-
-#: ../cli/src/connections.c:781
+#: ../cli/src/connections.c:1152
msgid "the VPN service did not start in time"
msgstr "usługa VPN nie została uruchomiona w czasie"
-
-#: ../cli/src/connections.c:783
+#: ../cli/src/connections.c:1154
msgid "the VPN service failed to start"
msgstr "uruchomienie usługi VPN się nie powiodło"
-
-#: ../cli/src/connections.c:785
+#: ../cli/src/connections.c:1156
msgid "no valid VPN secrets"
msgstr "brak prawidłowych haseł VPN"
-
-#: ../cli/src/connections.c:787
+#: ../cli/src/connections.c:1158
msgid "invalid VPN secrets"
msgstr "nieprawidłowe hasła VPN"
-
-#: ../cli/src/connections.c:789
+#: ../cli/src/connections.c:1160
msgid "the connection was removed"
msgstr "połączenie zostało usunięte"
-
-#: ../cli/src/connections.c:803
+#: ../cli/src/connections.c:1174
#, c-format
msgid "state: %s\n"
msgstr "stan: %s\n"
-
-#: ../cli/src/connections.c:806
-#: ../cli/src/connections.c:832
+#: ../cli/src/connections.c:1177 ../cli/src/connections.c:1203
#, c-format
msgid "Connection activated\n"
msgstr "Aktywowano połączenie\n"
-
-#: ../cli/src/connections.c:809
+#: ../cli/src/connections.c:1180
#, c-format
msgid "Error: Connection activation failed."
msgstr "Błąd: aktywacja połączenia się nie powiodła."
-
-#: ../cli/src/connections.c:828
+#: ../cli/src/connections.c:1199
#, c-format
msgid "state: %s (%d)\n"
msgstr "stan: %s (%d)\n"
-
-#: ../cli/src/connections.c:838
+#: ../cli/src/connections.c:1209
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "Błąd: aktywacja połączenia się nie powiodła: %s."
-
-#: ../cli/src/connections.c:855
-#: ../cli/src/devices.c:551
+#: ../cli/src/connections.c:1226 ../cli/src/devices.c:909
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "BÅ‚Ä…d: przekroczono czas oczekiwania o %d sekund."
-
-#: ../cli/src/connections.c:898
+#: ../cli/src/connections.c:1269
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "Błąd: aktywacja połączenia się nie powiodła: %s"
-
-#: ../cli/src/connections.c:912
+#: ../cli/src/connections.c:1283
#, 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:921
+#: ../cli/src/connections.c:1292
#, c-format
msgid "Active connection state: %s\n"
msgstr "Stan aktywnego połączenia: %s\n"
-
-#: ../cli/src/connections.c:922
+#: ../cli/src/connections.c:1293
#, c-format
msgid "Active connection path: %s\n"
msgstr "Ścieżka aktywnego połączenia: %s\n"
-
-#: ../cli/src/connections.c:976
-#: ../cli/src/connections.c:1094
+#: ../cli/src/connections.c:1347 ../cli/src/connections.c:1468
#, c-format
msgid "Error: Unknown connection: %s."
msgstr "Błąd: nieznane połączenie: %s."
-
-#: ../cli/src/connections.c:1011
-#: ../cli/src/devices.c:622
+#: ../cli/src/connections.c:1382 ../cli/src/devices.c:980
#, c-format
msgid "Error: timeout value '%s' is not valid."
msgstr "Błąd: wartość czasu oczekiwania \"%s\" jest nieprawidłowa."
-
-#: ../cli/src/connections.c:1024
-#: ../cli/src/connections.c:1111
+#: ../cli/src/connections.c:1395 ../cli/src/connections.c:1485
#, c-format
msgid "Error: id or uuid has to be specified."
msgstr "Błąd: należy podać identyfikator lub UUID."
-
-#: ../cli/src/connections.c:1044
+#: ../cli/src/connections.c:1415
#, c-format
msgid "Error: No suitable device found: %s."
msgstr "BÅ‚Ä…d: nie odnaleziono odpowiedniego urzÄ…dzenia: %s"
-
-#: ../cli/src/connections.c:1046
+#: ../cli/src/connections.c:1417
#, c-format
msgid "Error: No suitable device found."
msgstr "BÅ‚Ä…d: nie odnaleziono odpowiedniego urzÄ…dzenia."
-
-#: ../cli/src/connections.c:1138
+#: ../cli/src/connections.c:1512
#, c-format
msgid "Warning: Connection not active\n"
msgstr "Ostrzeżenie: połączenie nie jest aktywne\n"
-
-#: ../cli/src/connections.c:1189
+#: ../cli/src/connections.c:1569
#, c-format
msgid "Error: 'con' command '%s' is not valid."
msgstr "Błąd: polecenie \"con\" \"%s\" jest nieprawidłowe."
-
-#: ../cli/src/connections.c:1216
+#: ../cli/src/connections.c:1605
#, 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:1223
+#: ../cli/src/connections.c:1612
#, c-format
msgid "Error: Could not get system settings."
msgstr "Błąd: nie można uzyskać ustawień systemu."
-
-#: ../cli/src/connections.c:1231
+#: ../cli/src/connections.c:1620
#, c-format
msgid "Error: Could not get user settings."
msgstr "Błąd: nie można uzyskać ustawień użytkownika."
-
-#: ../cli/src/connections.c:1241
+#: ../cli/src/connections.c:1630
#, c-format
msgid "Error: Can't obtain connections: settings services are not running."
msgstr "Błąd: nie można uzyskać połączeń: usługi ustawień nie są uruchomione."
-
+#. 0
+#. 9
+#: ../cli/src/devices.c:61 ../cli/src/devices.c:89 ../cli/src/devices.c:184
+msgid "DEVICE"
+msgstr "URZÄ„DZENIE"
+
+#. 1
+#. 4
+#. 0
+#: ../cli/src/devices.c:63 ../cli/src/devices.c:93
+#: ../cli/src/network-manager.c:36
+msgid "STATE"
+msgstr "STAN"
+
+#: ../cli/src/devices.c:72
+msgid "GENERAL"
+msgstr "OGÓLNE"
+
+#. 0
#: ../cli/src/devices.c:73
+msgid "CAPABILITIES"
+msgstr "MOŻLIWOŚCI"
+
+#. 1
+#: ../cli/src/devices.c:74
+msgid "WIFI-PROPERTIES"
+msgstr "WÅAÅšCIWOÅšCI-WIFI"
+
+#. 2
+#: ../cli/src/devices.c:75
+msgid "AP"
+msgstr "PUNKT-DOSTĘPOWY"
+
+#. 3
+#: ../cli/src/devices.c:76
+msgid "WIRED-PROPERTIES"
+msgstr "WÅAÅšCIWOÅšCI-POÅÄ„CZENIA-PRZEWODOWEGO"
+
+#. 4
+#: ../cli/src/devices.c:77
+msgid "IP4-SETTINGS"
+msgstr "USTAWIENIA-IP4"
+
+#. 5
+#: ../cli/src/devices.c:78
+msgid "IP4-DNS"
+msgstr "IP4-DNS"
+
+#. 6
+#: ../cli/src/devices.c:79
+msgid "IP6-SETTINGS"
+msgstr "USTAWIENIA-IP6"
+
+#. 7
+#: ../cli/src/devices.c:80
+msgid "IP6-DNS"
+msgstr "IP6-DNS"
+
+#. 2
+#: ../cli/src/devices.c:91
+msgid "DRIVER"
+msgstr "STEROWNIK"
+
+#. 3
+#: ../cli/src/devices.c:92
+msgid "HWADDR"
+msgstr "ADRES-SPRZĘTOWY"
+
+#. 0
+#: ../cli/src/devices.c:102
+msgid "CARRIER-DETECT"
+msgstr "WYKRYWANIE-OPERATORA"
+
+#. 1
+#: ../cli/src/devices.c:103
+msgid "SPEED"
+msgstr "PRĘDKOŚĆ"
+
+#. 0
+#: ../cli/src/devices.c:112
+msgid "CARRIER"
+msgstr "OPERATOR"
+
+#. 0
+#: ../cli/src/devices.c:122
+msgid "WEP"
+msgstr "WEP"
+
+#. 1
+#: ../cli/src/devices.c:123
+msgid "WPA"
+msgstr "WPA"
+
+#. 2
+#: ../cli/src/devices.c:124
+msgid "WPA2"
+msgstr "WPA2"
+
+#. 3
+#: ../cli/src/devices.c:125
+msgid "TKIP"
+msgstr "TKIP"
+
+#. 4
+#: ../cli/src/devices.c:126
+msgid "CCMP"
+msgstr "CCMP"
+
+#. 0
+#: ../cli/src/devices.c:135 ../cli/src/devices.c:146
+msgid "ADDRESS"
+msgstr "ADRES"
+
+#. 1
+#: ../cli/src/devices.c:136 ../cli/src/devices.c:147
+msgid "PREFIX"
+msgstr "PRZEDROSTEK"
+
+#. 2
+#: ../cli/src/devices.c:137 ../cli/src/devices.c:148
+msgid "GATEWAY"
+msgstr "BRAMA"
+
+#. 0
+#: ../cli/src/devices.c:157 ../cli/src/devices.c:166
+msgid "DNS"
+msgstr "DNS"
+
+#. 0
+#: ../cli/src/devices.c:175
+msgid "SSID"
+msgstr "SSID"
+
+#. 1
+#: ../cli/src/devices.c:176
+msgid "BSSID"
+msgstr "BSSID"
+
+#. 2
+#: ../cli/src/devices.c:177
+msgid "MODE"
+msgstr "TRYB"
+
+#. 3
+#: ../cli/src/devices.c:178
+msgid "FREQ"
+msgstr "CZĘSTOTLIWOŚĆ"
+
+#. 4
+#: ../cli/src/devices.c:179
+msgid "RATE"
+msgstr "OCENA"
+
+#. 5
+#: ../cli/src/devices.c:180
+msgid "SIGNAL"
+msgstr "SYGNAÅ"
+
+#. 6
+#: ../cli/src/devices.c:181
+msgid "SECURITY"
+msgstr "ZABEZPIECZENIA"
+
+#. 7
+#: ../cli/src/devices.c:182
+msgid "WPA-FLAGS"
+msgstr "FLAGI-WPA"
+
+#. 8
+#: ../cli/src/devices.c:183
+msgid "RSN-FLAGS"
+msgstr "FLAGI-RSN"
+
+#. 10
+#: ../cli/src/devices.c:185
+msgid "ACTIVE"
+msgstr "AKTYWNOŚĆ"
+
+#: ../cli/src/devices.c:208
#, c-format
msgid ""
"Usage: nmcli dev { COMMAND | help }\n"
@@ -457,581 +644,404 @@ msgid ""
" status\n"
" list [iface <iface>]\n"
" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] | apinfo iface <iface> hwaddr <hwaddr>]\n"
+" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
"\n"
msgstr ""
"Użycie: nmcli dev { POLECENIE | help }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi }\n"
+" POLECENIE := { status | list | disconnect | wifi }\n"
"\n"
" status\n"
" list [iface <interfejs>]\n"
" disconnect iface <interfejs> [--nowait] [--timeout <czas>]\n"
-" wifi [list [iface <interfejs>] | apinfo iface <interfejs> hwaddr <adres_sprzętowy>]\n"
+" wifi [list [iface <interfejs>] [hwaddr <adres_sprzętowy>]]\n"
"\n"
-
-#: ../cli/src/devices.c:93
+#: ../cli/src/devices.c:228
msgid "unmanaged"
msgstr "niezarzÄ…dzane"
-
-#: ../cli/src/devices.c:95
+#: ../cli/src/devices.c:230
msgid "unavailable"
msgstr "niedostępne"
-
-#: ../cli/src/devices.c:97
-#: ../cli/src/network-manager.c:73
+#: ../cli/src/devices.c:232 ../cli/src/network-manager.c:91
msgid "disconnected"
msgstr "rozłączono"
-
-#: ../cli/src/devices.c:99
+#: ../cli/src/devices.c:234
msgid "connecting (prepare)"
msgstr "Å‚Ä…czenie (przygotowanie)"
-
-#: ../cli/src/devices.c:101
+#: ../cli/src/devices.c:236
msgid "connecting (configuring)"
msgstr "Å‚Ä…czenie (konfigurowanie)"
-
-#: ../cli/src/devices.c:103
+#: ../cli/src/devices.c:238
msgid "connecting (need authentication)"
msgstr "Å‚Ä…czenie (wymaga uwierzytelnienia)"
-
-#: ../cli/src/devices.c:105
+#: ../cli/src/devices.c:240
msgid "connecting (getting IP configuration)"
msgstr "Å‚Ä…czenie (pobieranie konfiguracji adresu IP)"
-
-#: ../cli/src/devices.c:107
-#: ../cli/src/network-manager.c:71
+#: ../cli/src/devices.c:242 ../cli/src/network-manager.c:89
msgid "connected"
msgstr "połączono"
-
-#: ../cli/src/devices.c:109
+#: ../cli/src/devices.c:244
msgid "connection failed"
msgstr "połączenie się nie powiodło"
-
-#: ../cli/src/devices.c:132
-#: ../cli/src/devices.c:876
+#: ../cli/src/devices.c:267 ../cli/src/devices.c:424
msgid "Unknown"
msgstr "Nieznane"
-
-#. print them
-#: ../cli/src/devices.c:164
-#: ../cli/src/devices.c:266
-#: ../cli/src/devices.c:861
-#: ../cli/src/devices.c:879
+#: ../cli/src/devices.c:299
msgid "(none)"
msgstr "(brak)"
-
-#: ../cli/src/devices.c:209
+#: ../cli/src/devices.c:324
#, c-format
msgid "%s: error converting IP4 address 0x%X"
msgstr "%s: błąd podczas konwertowania adresu IPv4 0x%X"
-
-#: ../cli/src/devices.c:238
+#: ../cli/src/devices.c:393
#, c-format
-msgid "%s, %s, Freq %d MHz, Rate %d Mb/s, Strength %d"
-msgstr "%s, %s, częstotliwość %d MHz, prędkość %d Mb/s, siła sygnału %d"
-
-
-#: ../cli/src/devices.c:239
-msgid "Ad-Hoc"
-msgstr "Ad-hoc"
-
-
-#: ../cli/src/devices.c:248
-msgid ", Encrypted: "
-msgstr ", zaszyfrowane: "
-
-
-#: ../cli/src/devices.c:253
-msgid " WEP"
-msgstr " WEP"
+msgid "%u MHz"
+msgstr "%u MHz"
+#: ../cli/src/devices.c:394
+#, c-format
+msgid "%u MB/s"
+msgstr "%u MB/s"
-#: ../cli/src/devices.c:255
-msgid " WPA"
-msgstr " WPA"
+#: ../cli/src/devices.c:403
+msgid "Encrypted: "
+msgstr "Zaszyfrowane: "
+#: ../cli/src/devices.c:408
+msgid "WEP "
+msgstr "WEP "
-#: ../cli/src/devices.c:257
-msgid " WPA2"
-msgstr " WPA2"
+#: ../cli/src/devices.c:410
+msgid "WPA "
+msgstr "WPA "
+#: ../cli/src/devices.c:412
+msgid "WPA2 "
+msgstr "WPA2 "
-#: ../cli/src/devices.c:260
-msgid " Enterprise"
-msgstr " Enterprise"
+#: ../cli/src/devices.c:415
+msgid "Enterprise "
+msgstr "Enterprise "
+#: ../cli/src/devices.c:424
+msgid "Ad-Hoc"
+msgstr "Ad-hoc"
-#: ../cli/src/devices.c:294
-#: ../cli/src/devices.c:458
-#: ../cli/src/devices.c:460
-msgid "Device"
-msgstr "UrzÄ…dzenie"
+#: ../cli/src/devices.c:424
+msgid "Infrastructure"
+msgstr "Infrastruktura"
+#: ../cli/src/devices.c:486
+#, c-format
+msgid "Error: 'dev list': %s"
+msgstr "BÅ‚Ä…d: \"dev list\": %s"
-#: ../cli/src/devices.c:299
-msgid "Driver"
-msgstr "Sterownik"
+#: ../cli/src/devices.c:488
+#, c-format
+msgid "Error: 'dev list': %s; allowed fields: %s"
+msgstr "BÅ‚Ä…d: \"dev list\": %s; dozwolone pola: %s"
+#: ../cli/src/devices.c:497
+msgid "Device details"
+msgstr "Informacje o urzÄ…dzeniu"
-#: ../cli/src/devices.c:299
-#: ../cli/src/devices.c:567
+#: ../cli/src/devices.c:527 ../cli/src/devices.c:925
msgid "(unknown)"
msgstr "(nieznane)"
+#: ../cli/src/devices.c:528
+msgid "unknown)"
+msgstr "nieznane)"
-#: ../cli/src/devices.c:300
-#: ../cli/src/devices.c:458
-#: ../cli/src/devices.c:460
-msgid "State"
-msgstr "Stan"
-
-
-#: ../cli/src/devices.c:313
-msgid "HW Address"
-msgstr "Adres sprzętowy"
-
-
-#: ../cli/src/devices.c:319
-#, c-format
-msgid ""
-"\n"
-" Capabilities:\n"
-msgstr ""
-"\n"
-" Możliwości:\n"
-
-
-#: ../cli/src/devices.c:321
-msgid "Carrier Detect"
-msgstr "Wykrywanie operatora"
-
-
-#: ../cli/src/devices.c:336
+#: ../cli/src/devices.c:554
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-
-#: ../cli/src/devices.c:337
-msgid "Speed"
-msgstr "Prędkość"
-
-
-#: ../cli/src/devices.c:348
-#, c-format
-msgid ""
-"\n"
-" Wireless Properties\n"
-msgstr ""
-"\n"
-" Właściwości sieci bezprzewodowej\n"
-
-
-#: ../cli/src/devices.c:353
-msgid "WEP Encryption"
-msgstr "Szyfrowanie WEP"
-
-
-#: ../cli/src/devices.c:355
-msgid "WPA Encryption"
-msgstr "Szyfrowanie WPA"
-
-
-#: ../cli/src/devices.c:357
-msgid "WPA2 Encryption"
-msgstr "Szyfrowanie WPA2"
-
-
-#: ../cli/src/devices.c:359
-msgid "TKIP cipher"
-msgstr "Szyfr TKIP"
-
-
-#: ../cli/src/devices.c:361
-msgid "CCMP cipher"
-msgstr "Szyfr CCMP"
-
-
-#: ../cli/src/devices.c:368
-#, c-format
-msgid ""
-"\n"
-" Wireless Access Points %s\n"
-msgstr ""
-"\n"
-" Bezprzewodowe punkty dostępowe %s\n"
-
-
-#: ../cli/src/devices.c:368
-msgid "(* = current AP)"
-msgstr "(* = bieżący punkt dostępowy)"
-
-
-#: ../cli/src/devices.c:374
-#, c-format
-msgid ""
-"\n"
-" Wired Properties\n"
-msgstr ""
-"\n"
-" Właściwości sieci przewodowej\n"
-
-
-#: ../cli/src/devices.c:377
-#: ../cli/src/devices.c:379
-msgid "Carrier"
-msgstr "Operator"
-
-
-#: ../cli/src/devices.c:377
+#. Print header
+#. "WIRED-PROPERTIES"
+#: ../cli/src/devices.c:627
msgid "on"
msgstr "włączone"
-
-#: ../cli/src/devices.c:379
+#: ../cli/src/devices.c:627
msgid "off"
msgstr "wyłączone"
-
-#: ../cli/src/devices.c:387
+#: ../cli/src/devices.c:808
#, c-format
-msgid ""
-"\n"
-" IPv4 Settings:\n"
-msgstr ""
-"\n"
-" Ustawienia IPv4:\n"
-
-
-#: ../cli/src/devices.c:395
-msgid "Address"
-msgstr "Adres"
-
-
-#: ../cli/src/devices.c:401
-msgid "Prefix"
-msgstr "Przedrostek"
-
-
-#: ../cli/src/devices.c:405
-msgid "Gateway"
-msgstr "Brama"
-
-
-#: ../cli/src/devices.c:416
-msgid "DNS"
-msgstr "DNS"
+msgid "Error: 'dev status': %s"
+msgstr "BÅ‚Ä…d: \"dev status\": %s"
+#: ../cli/src/devices.c:810
+#, c-format
+msgid "Error: 'dev status': %s; allowed fields: %s"
+msgstr "BÅ‚Ä…d: \"dev status\": %s; dozwolone pola: %s"
-#: ../cli/src/devices.c:458
+#: ../cli/src/devices.c:817
msgid "Status of devices"
msgstr "Stan urzÄ…dzenia"
-
-#: ../cli/src/devices.c:487
+#: ../cli/src/devices.c:845
#, c-format
msgid "Error: '%s' argument is missing."
msgstr "BÅ‚Ä…d: brak parametru \"%s\"."
-
-#: ../cli/src/devices.c:516
-#: ../cli/src/devices.c:655
-#: ../cli/src/devices.c:729
+#: ../cli/src/devices.c:874 ../cli/src/devices.c:1013
+#: ../cli/src/devices.c:1136
#, c-format
msgid "Error: Device '%s' not found."
msgstr "BÅ‚Ä…d: nie odnaleziono urzÄ…dzenia \"%s\"."
-
-#: ../cli/src/devices.c:539
+#: ../cli/src/devices.c:897
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "Powodzenie: urządzenie \"%s\" zostało rozłączone."
-
-#: ../cli/src/devices.c:564
+#: ../cli/src/devices.c:922
#, 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:572
+#: ../cli/src/devices.c:930
#, c-format
msgid "Device state: %d (%s)\n"
msgstr "Stan urzÄ…dzenia: %d (%s)\n"
-
-#: ../cli/src/devices.c:636
+#: ../cli/src/devices.c:994
#, c-format
msgid "Error: iface has to be specified."
msgstr "Błąd: należy podać interfejs."
-
-#: ../cli/src/devices.c:736
-#: ../cli/src/devices.c:746
-msgid "WiFi scan list"
-msgstr "Lista skanowania sieci WiFi"
-
-
-#: ../cli/src/devices.c:740
+#: ../cli/src/devices.c:1112
#, 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:754
-msgid "Device:"
-msgstr "UrzÄ…dzenie:"
+msgid "Error: 'dev wifi': %s"
+msgstr "BÅ‚Ä…d: \"dev wifi\": %s"
-
-#: ../cli/src/devices.c:806
+#: ../cli/src/devices.c:1114
#, c-format
-msgid "Error: hwaddr has to be specified."
-msgstr "Błąd: należy podać adres sprzętowy."
+msgid "Error: 'dev wifi': %s; allowed fields: %s"
+msgstr "BÅ‚Ä…d: \"dev wifi\": %s; dozwolone pola: %s"
+#: ../cli/src/devices.c:1121
+msgid "WiFi scan list"
+msgstr "Lista skanowania sieci WiFi"
-#: ../cli/src/devices.c:844
+#: ../cli/src/devices.c:1156 ../cli/src/devices.c:1210
#, c-format
msgid "Error: Access point with hwaddr '%s' not found."
msgstr "Błąd: nie odnaleziono punktu dostępowego z adresem sprzętowym \"%s\"."
-
-#: ../cli/src/devices.c:862
+#: ../cli/src/devices.c:1173
#, c-format
-msgid "%u MHz"
-msgstr "%u MHz"
-
-
-#: ../cli/src/devices.c:863
-#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
-
-
-#: ../cli/src/devices.c:869
-#: ../cli/src/devices.c:871
-msgid "AP parameters"
-msgstr "Parametry punkty dostępowego"
-
-
-#: ../cli/src/devices.c:873
-msgid "SSID:"
-msgstr "SSID:"
-
-
-#: ../cli/src/devices.c:874
-msgid "BSSID:"
-msgstr "BSSID:"
-
-
-#: ../cli/src/devices.c:875
-msgid "Frequency:"
-msgstr "Częstotliwość:"
-
-
-#: ../cli/src/devices.c:876
-msgid "Mode:"
-msgstr "Tryb:"
-
-
-#: ../cli/src/devices.c:876
-msgid "Ad-hoc"
-msgstr "Ad-hoc"
-
-
-#: ../cli/src/devices.c:876
-msgid "Infrastructure"
-msgstr "Infrastruktura"
-
-
-#: ../cli/src/devices.c:877
-msgid "Maximal bitrate:"
-msgstr "Maksymalna prędkość:"
-
-
-#: ../cli/src/devices.c:878
-msgid "Strength:"
-msgstr "Siła sygnału:"
-
-
-#: ../cli/src/devices.c:879
-msgid "Flags:"
-msgstr "Flagi:"
-
-
-#: ../cli/src/devices.c:879
-msgid "privacy"
-msgstr "prywatne"
-
-
-#: ../cli/src/devices.c:880
-msgid "WPA flags:"
-msgstr "Flagi WPA:"
-
-
-#: ../cli/src/devices.c:881
-msgid "RSN flags:"
-msgstr "Flagi RSN:"
-
+msgid "Error: Device '%s' is not a WiFi device."
+msgstr "BÅ‚Ä…d: urzÄ…dzenie \"%s\" nie jest urzÄ…dzeniem WiFi."
-#: ../cli/src/devices.c:907
+#: ../cli/src/devices.c:1237
#, 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:943
+#: ../cli/src/devices.c:1284
#, 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
+msgid "RUNNING"
+msgstr "URUCHOMIONE"
+
+#. 1
+#: ../cli/src/network-manager.c:37
+msgid "NET-ENABLED"
+msgstr "SIEĆ-WÅÄ„CZONA"
-#: ../cli/src/network-manager.c:46
+#. 2
+#: ../cli/src/network-manager.c:38
+msgid "WIFI-HARDWARE"
+msgstr "SPRZĘT-WIFI"
+
+#. 3
+#: ../cli/src/network-manager.c:39
+msgid "WIFI"
+msgstr "WIFI"
+
+#. 4
+#: ../cli/src/network-manager.c:40
+msgid "WWAN-HARDWARE"
+msgstr "SPRZĘT-WWAN"
+
+#. 5
+#: ../cli/src/network-manager.c:41
+msgid "WWAN"
+msgstr "WWAN"
+
+#: ../cli/src/network-manager.c:64
#, c-format
msgid ""
"Usage: nmcli nm { COMMAND | help }\n"
"\n"
-" COMMAND := { status | sleep | wakeup | wifi | wwan }\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"
"\n"
msgstr ""
"Użycie: nmcli nm { POLECENIE | help }\n"
"\n"
-" POLECENIE := { status | sleep | wakeup | wifi | wwan }\n"
+" POLECENIE := { 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"
"\n"
-
-#: ../cli/src/network-manager.c:67
+#: ../cli/src/network-manager.c:85
msgid "asleep"
msgstr "wstrzymane"
-
-#: ../cli/src/network-manager.c:69
+#: ../cli/src/network-manager.c:87
msgid "connecting"
msgstr "Å‚Ä…czenie"
+#: ../cli/src/network-manager.c:128
+#, c-format
+msgid "Error: 'nm status': %s"
+msgstr "BÅ‚Ä…d: \"nm status\": %s"
-#: ../cli/src/network-manager.c:93
-#: ../cli/src/network-manager.c:94
-#: ../cli/src/network-manager.c:95
-#: ../cli/src/network-manager.c:96
-#: ../cli/src/network-manager.c:143
-#: ../cli/src/network-manager.c:160
-msgid "enabled"
-msgstr "włączone"
-
-
-#: ../cli/src/network-manager.c:93
-#: ../cli/src/network-manager.c:94
-#: ../cli/src/network-manager.c:95
-#: ../cli/src/network-manager.c:96
-#: ../cli/src/network-manager.c:143
-#: ../cli/src/network-manager.c:160
-msgid "disabled"
-msgstr "wyłączone"
-
+#: ../cli/src/network-manager.c:130
+#, c-format
+msgid "Error: 'nm status': %s; allowed fields: %s"
+msgstr "BÅ‚Ä…d: \"nm status\": %s; dozwolone pola: %s"
-#: ../cli/src/network-manager.c:102
+#: ../cli/src/network-manager.c:137
msgid "NetworkManager status"
msgstr "Stan programu NetworkManager"
+#. Print header
+#: ../cli/src/network-manager.c:144 ../cli/src/network-manager.c:145
+#: ../cli/src/network-manager.c:146 ../cli/src/network-manager.c:147
+#: ../cli/src/network-manager.c:154 ../cli/src/network-manager.c:247
+#: ../cli/src/network-manager.c:296 ../cli/src/network-manager.c:328
+msgid "enabled"
+msgstr "włączone"
-#: ../cli/src/network-manager.c:104
-msgid "NM running:"
-msgstr "Program NetworkManager jest uruchomiony:"
-
+#: ../cli/src/network-manager.c:144 ../cli/src/network-manager.c:145
+#: ../cli/src/network-manager.c:146 ../cli/src/network-manager.c:147
+#: ../cli/src/network-manager.c:154 ../cli/src/network-manager.c:247
+#: ../cli/src/network-manager.c:296 ../cli/src/network-manager.c:328
+msgid "disabled"
+msgstr "wyłączone"
-#: ../cli/src/network-manager.c:104
+#: ../cli/src/network-manager.c:152
msgid "running"
msgstr "uruchamiany"
-
-#: ../cli/src/network-manager.c:104
+#: ../cli/src/network-manager.c:152
msgid "not running"
msgstr "nieuruchomiony"
+#: ../cli/src/network-manager.c:175
+#, 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:105
-msgid "NM state:"
-msgstr "Stan programu NetworkManager:"
-
-
-#: ../cli/src/network-manager.c:106
-msgid "NM wireless hardware:"
-msgstr "Adres sprzętowy programu NetworkManager:"
+#: ../cli/src/network-manager.c:186
+#, 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:192
+#, c-format
+msgid "Error in sleep: %s"
+msgstr "BÅ‚Ä…d w poleceniu sleep: %s"
-#. no argument, show current state
-#: ../cli/src/network-manager.c:107
-#: ../cli/src/network-manager.c:143
-msgid "NM wireless:"
-msgstr "Sieć bezprzewodowa programu NetworkManager:"
+#: ../cli/src/network-manager.c:237 ../cli/src/network-manager.c:286
+#: ../cli/src/network-manager.c:318
+#, 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."
+#: ../cli/src/network-manager.c:245
+msgid "Networking enabled"
+msgstr "Sieć jest włączona"
-#: ../cli/src/network-manager.c:108
-msgid "NM WWAN hardware:"
-msgstr "WWAM sprzętu programu NetworkManager:"
+#: ../cli/src/network-manager.c:256
+#, 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:265
+#, c-format
+msgid "Error: Sleeping status is not exported by NetworkManager."
+msgstr "BÅ‚Ä…d: stan snu nie jest eksportowany przez program NetworkManager."
-#. no argument, show current state
-#: ../cli/src/network-manager.c:109
-#: ../cli/src/network-manager.c:160
-msgid "NM WWAN:"
-msgstr "WWAN programu NetworkManager:"
+#: ../cli/src/network-manager.c:273
+#, 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:294
+msgid "WiFi enabled"
+msgstr "WiFi jest włączone"
-#: ../cli/src/network-manager.c:150
+#: ../cli/src/network-manager.c:305
#, c-format
msgid "Error: invalid 'wifi' parameter: '%s'."
msgstr "Błąd: nieprawidłowy parametr \"wifi\": \"%s\"."
+#: ../cli/src/network-manager.c:326
+msgid "WWAN enabled"
+msgstr "WWAN jest włączone"
-#: ../cli/src/network-manager.c:167
+#: ../cli/src/network-manager.c:337
#, c-format
msgid "Error: invalid 'wwan' parameter: '%s'."
msgstr "Błąd: nieprawidłowy parametr \"wwan\": \"%s\"."
-
-#: ../cli/src/network-manager.c:178
+#: ../cli/src/network-manager.c:348
#, c-format
msgid "Error: 'nm' command '%s' is not valid."
msgstr "Błąd: parametr \"nm\" \"%s\" jest nieprawidłowy."
-
-#: ../cli/src/nmcli.c:65
+#: ../cli/src/nmcli.c:69
#, c-format
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
"\n"
"OPTIONS\n"
-" -t[erse] terse output\n"
-" -p[retty] pretty output\n"
-" -v[ersion] show program version\n"
-" -h[elp] print this help\n"
+" -t[erse] terse output\n"
+" -p[retty] pretty output\n"
+" -m[ode] tabular|multiline output mode\n"
+" -f[ields] <field1,field2,...>|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"
@@ -1042,10 +1052,14 @@ msgstr ""
"Użycie: %s [OPCJE] OBIEKT { POLECENIE | help }\n"
"\n"
"OPCJE\n"
-" -t[erse] zwięzłe wyjście\n"
-" -p[retty] sformatowane wyjście\n"
-" -v[ersion] wyświetla wersję programu\n"
-" -h[elp] wyświetla tę opcję\n"
+" -t[erse] zwięzłe wyjście\n"
+" -p[retty] sformatowane wyjście\n"
+" -m[ode] tabulatory|wielowierszowe tryb wyjścia\n"
+" -f[ields] <pole1,pole2,...>|all|common określa pola do wyjścia\n"
+" -e[scape] yes|no modyfikuje separatory kolumn w "
+"wartościach\n"
+" -v[ersion] wyświetla wersję programu\n"
+" -h[elp] wyświetla tę opcję\n"
"\n"
"OBIEKT\n"
" nm stan programu NetworkManager\n"
@@ -1053,41 +1067,170 @@ msgstr ""
" dev urzÄ…dzenia zarzÄ…dzane przez program NetworkManager\n"
"\n"
+#: ../cli/src/nmcli.c:113
+#, c-format
+msgid "Error: Object '%s' is unknown, try 'nmcli help'."
+msgstr ""
+"Błąd: obiekt \"%s\" jest nieznany, można spróbować polecenie \"nmcli help\"."
-#: ../cli/src/nmcli.c:106
+#: ../cli/src/nmcli.c:143
#, c-format
-msgid "Object '%s' is unknown, try 'nmcli help'."
-msgstr "Obiekt \"%s\" jest nieznany. Można spróbować polecenie \"nmcli help\"."
+msgid "Error: Option '--terse' is specified the second time."
+msgstr "Błąd: opcja \"--terse\" został podana po raz drugi."
+#: ../cli/src/nmcli.c:148
+#, c-format
+msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
+msgstr ""
+"BÅ‚Ä…d: opcja \"--terse\" jest wzajemnie wykluczajÄ…ca z opcjÄ… \"--pretty\"."
-#: ../cli/src/nmcli.c:139
+#: ../cli/src/nmcli.c:156
#, c-format
-msgid "nmcli tool, version %s\n"
-msgstr "narzędzie nmcli, wersja %s\n"
+msgid "Error: Option '--pretty' is specified the second time."
+msgstr "Błąd: opcja \"--pretty\" został podana po raz drugi."
+
+#: ../cli/src/nmcli.c:161
+#, c-format
+msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
+msgstr ""
+"BÅ‚Ä…d: opcja \"--pretty\" jest wzajemnie wykluczajÄ…ca z opcjÄ… \"--terse\"."
+
+#: ../cli/src/nmcli.c:171 ../cli/src/nmcli.c:187
+#, c-format
+msgid "Error: missing argument for '%s' option."
+msgstr "BÅ‚Ä…d: brak parametru dla opcji \"%s\"."
+
+#: ../cli/src/nmcli.c:180 ../cli/src/nmcli.c:196
+#, c-format
+msgid "Error: '%s' is not valid argument for '%s' option."
+msgstr "Błąd: \"%s\" nie jest prawidłowym parametrem dla opcji \"%s\"."
+#: ../cli/src/nmcli.c:203
+#, c-format
+msgid "Error: fields for '%s' options are missing."
+msgstr "Błąd: brak pól dla opcji \"%s\"."
-#: ../cli/src/nmcli.c:145
+#: ../cli/src/nmcli.c:209
#, c-format
-msgid "Option '%s' is unknown, try 'nmcli -help'."
-msgstr "Opcja \"%s\" jest nieznana. Można spróbować polecenie \"nmcli help\"."
+msgid "nmcli tool, version %s\n"
+msgstr "narzędzie nmcli, wersja %s\n"
+#: ../cli/src/nmcli.c:215
+#, c-format
+msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
+msgstr ""
+"Błąd: opcja \"%s\" jest nieznana. Można spróbować polecenie \"nmcli help\"."
-#: ../cli/src/nmcli.c:164
+#: ../cli/src/nmcli.c:234
#, c-format
msgid "Caught signal %d, shutting down..."
msgstr "Przechwycono sygnał %d, wyłączanie..."
-
-#: ../cli/src/nmcli.c:189
+#: ../cli/src/nmcli.c:259
#, c-format
msgid "Error: Could not connect to NetworkManager."
msgstr "Błąd: nie można połączyć się z programem NetworkManager."
-
-#: ../cli/src/nmcli.c:205
+#: ../cli/src/nmcli.c:275
msgid "Success"
msgstr "Powodzenie"
+#: ../cli/src/settings.c:411
+#, c-format
+msgid "%d (hex-ascii-key)"
+msgstr "%d (klucz-szesnastkowy-acsii))"
+
+#: ../cli/src/settings.c:413
+#, c-format
+msgid "%d (104/128-bit passphrase)"
+msgstr "%d (104/128-bitowe hasło)"
+
+#: ../cli/src/settings.c:416
+#, c-format
+msgid "%d (unknown)"
+msgstr "%d (nieznane)"
+
+#: ../cli/src/settings.c:442
+msgid "0 (unknown)"
+msgstr "0 (nieznane)"
+
+#: ../cli/src/settings.c:448
+msgid "any, "
+msgstr "dowolne, "
+
+#: ../cli/src/settings.c:450
+msgid "900 MHz, "
+msgstr "900 MHz, "
+
+#: ../cli/src/settings.c:452
+msgid "1800 MHz, "
+msgstr "1800 MHz, "
+
+#: ../cli/src/settings.c:454
+msgid "1900 MHz, "
+msgstr "1900 MHz, "
+
+#: ../cli/src/settings.c:456
+msgid "850 MHz, "
+msgstr "850 MHz, "
+
+#: ../cli/src/settings.c:458
+msgid "WCDMA 3GPP UMTS 2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 2100 MHz, "
+
+#: ../cli/src/settings.c:460
+msgid "WCDMA 3GPP UMTS 1800 MHz, "
+msgstr "WCDMA 3GPP UMTS 1800 MHz, "
+
+#: ../cli/src/settings.c:462
+msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
+
+#: ../cli/src/settings.c:464
+msgid "WCDMA 3GPP UMTS 800 MHz, "
+msgstr "WCDMA 3GPP UMTS 800 MHz, "
+
+#: ../cli/src/settings.c:466
+msgid "WCDMA 3GPP UMTS 850 MHz, "
+msgstr "WCDMA 3GPP UMTS 850 MHz, "
+
+#: ../cli/src/settings.c:468
+msgid "WCDMA 3GPP UMTS 900 MHz, "
+msgstr "WCDMA 3GPP UMTS 900 MHz, "
+
+#: ../cli/src/settings.c:470
+msgid "WCDMA 3GPP UMTS 1700 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700 MHz, "
+
+#: ../cli/src/settings.c:554 ../cli/src/settings.c:721
+msgid "auto"
+msgstr "automatyczne"
+
+#: ../cli/src/settings.c:716 ../cli/src/settings.c:719
+#: ../cli/src/settings.c:720 ../cli/src/utils.c:172
+msgid "not set"
+msgstr "nieustawione"
+
+#: ../cli/src/utils.c:124
+#, c-format
+msgid "field '%s' has to be alone"
+msgstr "pole \"%s\" musi być same"
+
+#: ../cli/src/utils.c:127
+#, c-format
+msgid "invalid field '%s'"
+msgstr "nieprawidłowe pole \"%s\""
+
+#: ../cli/src/utils.c:146
+#, c-format
+msgid "Option '--terse' requires specifying '--fields'"
+msgstr "Opcja \"--terse\" wymaga podania opcji \"--fields\""
+
+#: ../cli/src/utils.c:150
+#, c-format
+msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
+msgstr ""
+"Opcja \"--terse\" wymaga konkretnej wartości opcji \"--fields\", nie \"%s\""
#: ../libnm-util/crypto.c:120
#, c-format
@@ -1099,7 +1242,6 @@ msgstr "Plik klucza PEM nie zawiera znacznika końcowego \"%s\"."
msgid "Doesn't look like a PEM private key file."
msgstr "Nie wyglÄ…da na plik klucza prywatnego PEM."
-
#: ../libnm-util/crypto.c:138
#, c-format
msgid "Not enough memory to store PEM file data."
@@ -1145,7 +1287,6 @@ msgstr "Nie można zdekodować klucza prywatnego."
msgid "PEM certificate '%s' had no end tag '%s'."
msgstr "Certyfikat PEM \"%s\" nie zawiera kończącego znacznika \"%s\"."
-
#: ../libnm-util/crypto.c:277
#, c-format
msgid "Failed to decode certificate."
@@ -1161,7 +1302,6 @@ msgstr "Brak wystarczającej ilości pamięci do przechowania danych certyfikatu
msgid "Not enough memory to store file data."
msgstr "Brak wystarczającej ilości pamięci do przechowania danych pliku."
-
#: ../libnm-util/crypto.c:324
#, c-format
msgid "IV must be an even number of bytes in length."
@@ -1172,16 +1312,13 @@ msgstr "Liczba bajtów w IV musi być liczbą parzystą."
msgid "Not enough memory to store the IV."
msgstr "Brak wystarczającej ilości pamięci do przechowania IV."
-
#: ../libnm-util/crypto.c:344
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "IV zawiera nieszesnastkowe cyfry."
-#: ../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.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
#, c-format
msgid "Private key cipher '%s' was unknown."
@@ -1192,7 +1329,6 @@ msgstr "Nieznany szyfr klucza prywatnego \"%s\"."
msgid "Not enough memory to decrypt private key."
msgstr "Brak wystarczającej ilości pamięci do odszyfrowania klucza prywatnego."
-
#: ../libnm-util/crypto.c:511
#, c-format
msgid "Unable to determine private key type."
@@ -1201,95 +1337,85 @@ msgstr "Nie można określić typu klucza prywatnego."
#: ../libnm-util/crypto.c:530
#, c-format
msgid "Not enough memory to store decrypted private key."
-msgstr "Brak wystarczającej ilości pamięci do przechowania odszyfrowanego klucza prywatnego."
-
+msgstr ""
+"Brak wystarczającej ilości pamięci do przechowania odszyfrowanego klucza "
+"prywatnego."
#: ../libnm-util/crypto_gnutls.c:49
msgid "Failed to initialize the crypto engine."
msgstr "Zainicjowanie modułu szyfrowania się nie powiodło."
-
#: ../libnm-util/crypto_gnutls.c:93
#, 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
#, 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:165 ../libnm-util/crypto_nss.c:188
#, 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
#, c-format
msgid "Failed to initialize the decryption cipher context: %s / %s."
-msgstr "Zainicjowanie kontekstu szyfru do odszyfrowania się nie powiodło: %s / %s."
-
+msgstr ""
+"Zainicjowanie kontekstu szyfru do odszyfrowania się nie powiodło: %s / %s."
#: ../libnm-util/crypto_gnutls.c:182
#, c-format
msgid "Failed to set symmetric key for decryption: %s / %s."
-msgstr "Ustawienie klucza symetrycznego do odszyfrowania się nie powiodło: %s / %s."
-
+msgstr ""
+"Ustawienie klucza symetrycznego do odszyfrowania się nie powiodło: %s / %s."
#: ../libnm-util/crypto_gnutls.c:191
#, 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
#, 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:210 ../libnm-util/crypto_nss.c:267
#, 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."
-
+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:221 ../libnm-util/crypto_nss.c:278
#, 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:286 ../libnm-util/crypto_nss.c:356
#, c-format
msgid "Could not allocate memory for encrypting."
msgstr "Nie można przydzielić pamięci do szyfrowania."
-
#: ../libnm-util/crypto_gnutls.c:294
#, c-format
msgid "Failed to initialize the encryption cipher context: %s / %s."
-msgstr "Zainicjowanie kontekstu szyfru do szyfrowania się nie powiodło: %s / %s."
-
+msgstr ""
+"Zainicjowanie kontekstu szyfru do szyfrowania się nie powiodło: %s / %s."
#: ../libnm-util/crypto_gnutls.c:303
#, c-format
msgid "Failed to set symmetric key for encryption: %s / %s."
-msgstr "Ustawienie klucza symetrycznego do szyfrowania się nie powiodło: %s / %s."
-
+msgstr ""
+"Ustawienie klucza symetrycznego do szyfrowania się nie powiodło: %s / %s."
#: ../libnm-util/crypto_gnutls.c:313
#, 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
#, c-format
msgid "Failed to encrypt the data: %s / %s."
@@ -1300,7 +1426,6 @@ msgstr "Zaszyfrowanie danych się nie powiodło: %s / %s."
msgid "Error initializing certificate data: %s"
msgstr "BÅ‚Ä…d podczas inicjowania danych certyfikatu: %s"
-
#: ../libnm-util/crypto_gnutls.c:384
#, c-format
msgid "Couldn't decode certificate: %s"
@@ -1311,121 +1436,103 @@ msgstr "Nie można zdekodować certyfikatu: %s"
msgid "Couldn't initialize PKCS#12 decoder: %s"
msgstr "Nie można zainicjować dekodera PKCS#12: %s"
-
#: ../libnm-util/crypto_gnutls.c:421
#, 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
#, c-format
msgid "Couldn't verify PKCS#12 file: %s"
msgstr "Nie można zweryfikować pliku PKCS#12: %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
#, 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
#, 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
#, 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
#, 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
#, c-format
msgid "Failed to set IV for decryption."
msgstr "Ustawienie IV do odszyfrowania się nie powiodło."
-
#: ../libnm-util/crypto_nss.c:224
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "Zainicjowanie kontekstu odszyfrowania się nie powiodło."
-
#: ../libnm-util/crypto_nss.c:237
#, 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
#, 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."
-
+msgstr ""
+"Odszyfrowanie klucza prywatnego się nie powiodło: odszyfrowane dane są za "
+"duże."
#: ../libnm-util/crypto_nss.c:256
#, 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
#, 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
#, 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
#, c-format
msgid "Failed to set IV for encryption."
msgstr "Ustawienie IV do szyfrowania się nie powiodło."
-
#: ../libnm-util/crypto_nss.c:388
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "Zainicjowanie kontekstu szyfrowania się nie powiodło."
-
#: ../libnm-util/crypto_nss.c:396
#, c-format
msgid "Failed to encrypt: %d."
msgstr "Zaszyfrowanie się nie powiodło: %d."
-
#: ../libnm-util/crypto_nss.c:404
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "Nieoczekiwana ilość danych po zaszyfrowaniu."
-
#: ../libnm-util/crypto_nss.c:447
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "Nie można zdekodować certyfikatu: %d"
-
#: ../libnm-util/crypto_nss.c:482
#, c-format
msgid "Couldn't convert password to UCS2: %d"
@@ -1436,109 +1543,200 @@ msgstr "Nie można przekonwertować hasła do UCS2: %d"
msgid "Couldn't initialize PKCS#12 decoder: %d"
msgstr "Nie można zainicjować dekodera PKCS#12: %d"
-
#: ../libnm-util/crypto_nss.c:519
#, 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
#, 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
msgid "Could not generate random data."
msgstr "Nie można utworzyć losowych danych."
-
-#: ../libnm-util/nm-utils.c:1545
+#: ../libnm-util/nm-utils.c:1975
#, 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:1655
+#: ../libnm-util/nm-utils.c:2085
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:1667
+#: ../libnm-util/nm-utils.c:2097
#, 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:1679
+#: ../libnm-util/nm-utils.c:2109
#, 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."
-
+msgstr ""
+"Nie można przydzielić pamięci do zapisywania zaszyfrowanego klucza do pliku "
+"PEM."
-#: ../libnm-util/nm-utils.c:1698
+#: ../libnm-util/nm-utils.c:2128
#, c-format
msgid "Could not allocate memory for PEM file data."
msgstr "Nie można przydzielić pamięci dla danych pliku PEM."
-#: ../src/nm-netlink-monitor.c:194
-#: ../src/nm-netlink-monitor.c:464
-#: ../src/nm-netlink-monitor.c:582
-#: ../src/ip6-manager/nm-netlink-listener.c:352
-#, c-format
-msgid "error processing netlink message: %s"
-msgstr "błąd podczas przetwarzania komunikatu netlink: %s"
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
+msgid "Connection sharing via a protected WiFi network"
+msgstr "Współdzielenie połączenia przez chronioną sieć WiFi"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
+msgid "Connection sharing via an open WiFi network"
+msgstr "Współdzielenie połączenia przez otwartą sieć WiFi"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
+msgid "Modify persistent system hostname"
+msgstr "Modyfikacja trwałej systemowej nazwy komputera"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
+msgid "Modify system connections"
+msgstr "Modyfikacja połączeń systemowych"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
+msgid "System policy prevents modification of system settings"
+msgstr "Polityka systemu powstrzymuje modyfikację ustawień systemowych"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
+msgid "System policy prevents modification of the persistent system hostname"
+msgstr ""
+"Polityka systemu powstrzymuje modyfikację trwałej systemowej nazwy komputera"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
+msgid "System policy prevents sharing connections via a protected WiFi network"
+msgstr ""
+"Polityka systemu powstrzymuje współdzielenie połączeń przez chronioną sieć "
+"WiFi"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
+msgid "System policy prevents sharing connections via an open WiFi network"
+msgstr ""
+"Polityka systemu powstrzymuje współdzielenie połączeń przez otwartą sieć WiFi"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
+msgid "Allow control of network connections"
+msgstr "Umożliwienie kontroli połączeń sieciowych"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
+msgid "Allow use of user-specific connections"
+msgstr "Umożliwienie użycia połączeń użytkowników"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
+msgid "Enable or disable WiFi devices"
+msgstr "Włączenie lub wyłączenie urządzeń WiFi"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
+msgid "Enable or disable mobile broadband devices"
+msgstr "Włączenie lub wyłączenie urządzeń komórkowych"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+msgid "Enable or disable system networking"
+msgstr "Włączenie lub wyłączenie sieci systemowej"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
+msgid ""
+"Put NetworkManager to sleep or wake it up (should only be used by system "
+"power management)"
+msgstr ""
+"Umieszczenie programu NetworkManager w stanie uśpienia lub przebudzenie go "
+"(powinno być używane tylko przez systemowe zarządzanie zasilaniem)"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
+msgid "System policy prevents control of network connections"
+msgstr "Polityka systemu powstrzymuje kontrolę połączeń sieciowych"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
+msgid "System policy prevents enabling or disabling WiFi devices"
+msgstr "Polityka systemu powstrzymuje włączanie lub wyłączanie urządzeń WiFi"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
+msgid "System policy prevents enabling or disabling mobile broadband devices"
+msgstr ""
+"Polityka systemu powstrzymuje włączenie lub wyłączenie urządzeń komórkowych"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
+msgid "System policy prevents enabling or disabling system networking"
+msgstr ""
+"Polityka systemu powstrzymuje włączanie lub wyłączanie sieci systemowej"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
+msgid "System policy prevents putting NetworkManager to sleep or waking it up"
+msgstr ""
+"Polityka systemu powstrzymuje umieszczenie programu NetworkManager w stanie "
+"uśpienia lub przebudzenie go"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
+msgid "System policy prevents use of user-specific connections"
+msgstr "Polityka systemu powstrzymuje użycie połączeń użytkownika"
-#: ../src/nm-netlink-monitor.c:260
+#: ../src/nm-netlink-monitor.c:100 ../src/nm-netlink-monitor.c:231
+#: ../src/nm-netlink-monitor.c:653
#, 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"
+msgid "error processing netlink message: %s"
+msgstr "błąd podczas przetwarzania komunikatu netlink: %s"
+#: ../src/nm-netlink-monitor.c:214
+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:270
+#: ../src/nm-netlink-monitor.c:254
#, 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"
-
+msgstr ""
+"nie można połączyć się z netlink dla monitorowania stanu połączenia: %s"
-#: ../src/nm-netlink-monitor.c:278
+#: ../src/nm-netlink-monitor.c:265
#, c-format
-msgid "unable to join netlink group for monitoring link status: %s"
-msgstr "nie można dołączyć do grupy netlink dla monitorowania stanu połączenia: %s"
+msgid "unable to enable netlink handle credential passing: %s"
+msgstr ""
+"nie można włączyć przekazywania danych uwierzytelniających uchwytu netlink: "
+"%s"
+#: ../src/nm-netlink-monitor.c:291 ../src/nm-netlink-monitor.c:353
+#, c-format
+msgid "unable to allocate netlink handle for monitoring link status: %s"
+msgstr ""
+"nie można przydzielić uchwytu netlink dla monitorowania stanu połączenia: %s"
-#: ../src/nm-netlink-monitor.c:286
+#: ../src/nm-netlink-monitor.c:376
#, 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:494
-#: ../src/ip6-manager/nm-netlink-listener.c:382
-msgid "error occurred while waiting for data on socket"
-msgstr "wystąpił błąd podczas oczekiwania na dane na gnieździe"
+msgstr ""
+"nie można przydzielić pamięci podręcznej połączenia netlink dla "
+"monitorowania stanu połączenia: %s"
+#: ../src/nm-netlink-monitor.c:502
+#, c-format
+msgid "unable to join netlink group: %s"
+msgstr "nie można dołączyć do grupy netlink: %s"
-#: ../src/nm-netlink-monitor.c:558
-#: ../src/nm-netlink-monitor.c:571
+#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642
#, c-format
msgid "error updating link cache: %s"
msgstr "błąd podczas aktualizowania pamięci podręcznej połączenia: %s"
-
-#: ../src/NetworkManager.c:494
+#: ../src/main.c:499
#, 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"
+msgstr ""
+"Nieprawidłowa opcja. Parametr --help wyświetli listę prawidłowych opcji.\n"
+#: ../src/main.c:570
+#, 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"
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:300
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:328
msgid "# Created by NetworkManager\n"
msgstr "# Utworzony przez program NetworkManager\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:316
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:344
#, c-format
msgid ""
"# Merged from %s\n"
@@ -1547,70 +1745,47 @@ msgstr ""
"# Scalony od %s\n"
"\n"
+#: ../src/dhcp-manager/nm-dhcp-manager.c:284
+msgid "no usable DHCP client could be found."
+msgstr "nie odnaleziono używalnego klienta DHCP."
-#: ../src/ip6-manager/nm-netlink-listener.c:200
+#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+msgid "'dhclient' could be found."
+msgstr "nie można odnaleźć polecenia \"dhclient\"."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:303
+msgid "'dhcpcd' could be found."
+msgstr "nie można odnaleźć usługi \"dhcpcd\"."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:311
#, c-format
-msgid "unable to allocate netlink handle: %s"
-msgstr "nie można przydzielić uchwytu netlink: %s"
+msgid "unsupported DHCP client '%s'"
+msgstr "nieobsługiwany klient DHCP \"%s\""
-#: ../src/ip6-manager/nm-netlink-listener.c:210
+#: ../src/logging/nm-logging.c:146
#, c-format
-msgid "unable to connect to netlink: %s"
-msgstr "nie można połączyć się z netlink: %s"
+msgid "Unknown log level '%s'"
+msgstr "Nieznany poziom dziennika \"%s\""
-#: ../src/ip6-manager/nm-netlink-listener.c:307
+#: ../src/logging/nm-logging.c:171
#, c-format
-msgid "unable to join netlink group: %s"
-msgstr "nie można dołączyć do grupy netlink: %s"
+msgid "Unknown log domain '%s'"
+msgstr "Nieznana domena dziennika \"%s\""
-#: ../src/named-manager/nm-named-manager.c:315
+#: ../src/dns-manager/nm-dns-manager.c:384
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/named-manager/nm-named-manager.c:317
+#: ../src/dns-manager/nm-dns-manager.c:386
msgid "The nameservers listed below may not be recognized."
msgstr "Poniższe serwery nazw nie mogą nie zostać rozpoznane."
-
#: ../src/system-settings/nm-default-wired-connection.c:157
#, c-format
msgid "Auto %s"
msgstr "Automatyczne %s"
-
-#: ../system-settings/plugins/ifcfg-rh/reader.c:3213
+#: ../system-settings/plugins/ifcfg-rh/reader.c:3412
+#: ../system-settings/plugins/ifnet/connection_parser.c:49
msgid "System"
msgstr "Systemowe"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
-msgid "Connection sharing via a protected WiFi network"
-msgstr "Współdzielenie połączenia przez chronioną sieć WiFi"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
-msgid "Connection sharing via an open WiFi network"
-msgstr "Współdzielenie połączenia przez otwartą sieć WiFi"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
-msgid "Modify persistent system hostname"
-msgstr "Modyfikacja trwałej systemowej nazwy komputera"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
-msgid "Modify system connections"
-msgstr "Modyfikacja połączeń systemowych"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
-msgid "System policy prevents modification of system settings"
-msgstr "Polityka systemu powstrzymuje modyfikację ustawień systemowych"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
-msgid "System policy prevents modification of the persistent system hostname"
-msgstr "Polityka systemu powstrzymuje modyfikację trwałej systemowej nazwy komputera"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
-msgid "System policy prevents sharing connections via a protected WiFi network"
-msgstr "Polityka systemu powstrzymuje współdzielenie połączeń przez chronioną sieć WiFi"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
-msgid "System policy prevents sharing connections via an open WiFi network"
-msgstr "Polityka systemu powstrzymuje współdzielenie połączeń przez otwartą sieć WiFi"
-
diff --git a/po/pt_BR.po b/po/pt_BR.po
index a347564bec..40919e8a6b 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -1,98 +1,27 @@
-# translation of pt_BR.po to Portuguese
# Brazilian Portuguese translation of NetworkManager.
-# Copyright (C) 2004-2008, 2010 Free Software Foundation, Inc.
+# Copyright (C) 2004-2008 Free Software Foundation, Inc.
# This file is distributed under the same license as the NetworkManager package.
-#
-# Raphael Higino <phhigino@gmail.com>, 2004-2007.
+# Raphael Higino <phhigino@gmail.com>, 2004-2007
# Luiz Armesto <luiz.armesto@gmail.com>, 2007.
-# Henrique P. Machado <zehrique@gmail.com>, 2008.
+# Henrique P. Machado <hpmachado@gnome.org>, 2008, 2010.
# Og Maciel <ogmaciel@gnome.org>, 2008.
# Fabrício Godoy <skarllot@gmail.com>, 2008.
-# Glaucia Cintra <gcintra@redhat.com>, 2010.
+#
msgid ""
msgstr ""
-"Project-Id-Version: pt_BR\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-06 14:31+0530\n"
-"PO-Revision-Date: 2010-05-07 14:38+1000\n"
-"Last-Translator: Glaucia Cintra <gcintra@redhat.com>\n"
-"Language-Team: Portuguese <en@li.org>\n"
+"Project-Id-Version: NetworkManager\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=NetworkManager&component=general\n"
+"POT-Creation-Date: 2010-04-27 15:25+0000\n"
+"PO-Revision-Date: 2010-06-06 18:36-0300\n"
+"Last-Translator: Henrique P. Machado <hpmachado@gnome.org>\n"
+"Language-Team: Brazilian Portuguese <gnome-l10n-br@listas.cipsga.org.br>\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-Generator: KBabel 1.11.4\n"
-#: ../cli/src/connections.c:59 ../cli/src/connections.c:74
-#: ../cli/src/devices.c:85 ../cli/src/devices.c:98 ../cli/src/devices.c:108
-#: ../cli/src/devices.c:118 ../cli/src/devices.c:131 ../cli/src/devices.c:142
-#: ../cli/src/devices.c:152
-msgid "NAME"
-msgstr "NOME"
-
-#. 0
-#: ../cli/src/connections.c:60 ../cli/src/connections.c:75
-msgid "UUID"
-msgstr "UUID"
-
-#. 1
-#: ../cli/src/connections.c:61
-msgid "DEVICES"
-msgstr "DISPOSITIVOS"
-
-#. 2
-#: ../cli/src/connections.c:62 ../cli/src/connections.c:77
-msgid "SCOPE"
-msgstr "ESCOPO"
-
-#. 3
-#: ../cli/src/connections.c:63
-msgid "DEFAULT"
-msgstr "PADRÃO"
-
-#. 4
-#: ../cli/src/connections.c:64
-msgid "DBUS-SERVICE"
-msgstr "SERVIÇO-DBUS"
-
-#. 5
-#: ../cli/src/connections.c:65
-msgid "SPEC-OBJECT"
-msgstr "ESPECIFICAÇÕES DO OBJETO"
-
-#. 6
-#: ../cli/src/connections.c:66
-msgid "VPN"
-msgstr "VPN"
-
-#. 1
-#. 0
-#. 1
-#: ../cli/src/connections.c:76 ../cli/src/devices.c:61 ../cli/src/devices.c:87
-msgid "TYPE"
-msgstr "TIPO"
-
-#. 3
-#: ../cli/src/connections.c:78
-msgid "TIMESTAMP"
-msgstr "CARIMBO DE DATA E HORA"
-
-#. 4
-#: ../cli/src/connections.c:79
-msgid "TIMESTAMP-REAL"
-msgstr "CARIMBO DE DATA E HORA REAL"
-
-#. 5
-#: ../cli/src/connections.c:80
-msgid "AUTOCONNECT"
-msgstr "CONEXÃO AUTOMÃTICA"
-
-#. 6
-#: ../cli/src/connections.c:81
-msgid "READONLY"
-msgstr "SOMENTE LEITURA"
-
-#: ../cli/src/connections.c:157
+#: ../cli/src/connections.c:86
#, c-format
msgid ""
"Usage: nmcli con { COMMAND | help }\n"
@@ -104,8 +33,8 @@ msgid ""
"<timeout>]\n"
" down id <id> | uuid <id>\n"
msgstr ""
-"Usage: nmcli con { COMMAND | help }\n"
-" COMMAND := { list | status | up | down }\n"
+"Uso: nmcli con { COMANDO | help }\n"
+" COMANDO := { list | status | up | down }\n"
"\n"
" list [id <id> | uuid <id> | system | user]\n"
" status\n"
@@ -113,516 +42,312 @@ msgstr ""
"<timeout>]\n"
" down id <id> | uuid <id>\n"
-#: ../cli/src/connections.c:197 ../cli/src/connections.c:536
-#, c-format
-msgid "Error: 'con list': %s"
-msgstr "Erro: lista 'con': %s"
-
-#: ../cli/src/connections.c:199 ../cli/src/connections.c:538
-#, c-format
-msgid "Error: 'con list': %s; allowed fields: %s"
-msgstr "Erro: 'con list': %s; campos permitidos: %s"
-
-#: ../cli/src/connections.c:207
-msgid "Connection details"
-msgstr "Detalhes de Conexões"
-
-#: ../cli/src/connections.c:381 ../cli/src/connections.c:601
-msgid "system"
-msgstr "sistema"
-
-#: ../cli/src/connections.c:381 ../cli/src/connections.c:601
-msgid "user"
-msgstr "usuário"
-
-#: ../cli/src/connections.c:383
-msgid "never"
-msgstr "nunca"
-
-#. "CAPABILITIES"
-#. Print header
-#. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:384 ../cli/src/connections.c:385
-#: ../cli/src/connections.c:602 ../cli/src/connections.c:605
-#: ../cli/src/devices.c:388 ../cli/src/devices.c:513 ../cli/src/devices.c:539
-#: ../cli/src/devices.c:540 ../cli/src/devices.c:541 ../cli/src/devices.c:542
-#: ../cli/src/devices.c:543 ../cli/src/settings.c:504
-#: ../cli/src/settings.c:544 ../cli/src/settings.c:643
-#: ../cli/src/settings.c:912 ../cli/src/settings.c:913
-#: ../cli/src/settings.c:915 ../cli/src/settings.c:917
-#: ../cli/src/settings.c:1042 ../cli/src/settings.c:1043
-#: ../cli/src/settings.c:1044 ../cli/src/settings.c:1123
-#: ../cli/src/settings.c:1124 ../cli/src/settings.c:1125
-#: ../cli/src/settings.c:1126 ../cli/src/settings.c:1127
-#: ../cli/src/settings.c:1128 ../cli/src/settings.c:1129
-#: ../cli/src/settings.c:1130 ../cli/src/settings.c:1131
-#: ../cli/src/settings.c:1132 ../cli/src/settings.c:1133
-#: ../cli/src/settings.c:1134 ../cli/src/settings.c:1135
-#: ../cli/src/settings.c:1210
-msgid "yes"
-msgstr "sim"
+#: ../cli/src/connections.c:158
+msgid "Connections"
+msgstr "Conexões"
+
+#: ../cli/src/connections.c:158 ../cli/src/connections.c:160
+#: ../cli/src/connections.c:196 ../cli/src/connections.c:198
+#: ../cli/src/connections.c:205 ../cli/src/connections.c:207
+#: ../cli/src/devices.c:298 ../cli/src/devices.c:458 ../cli/src/devices.c:460
+msgid "Type"
+msgstr "Tipo"
+
+#: ../cli/src/connections.c:158 ../cli/src/connections.c:160
+#: ../cli/src/connections.c:196 ../cli/src/connections.c:198
+#: ../cli/src/connections.c:205 ../cli/src/connections.c:207
+#: ../cli/src/connections.c:297 ../cli/src/connections.c:299
+msgid "UUID"
+msgstr "UUID"
-#: ../cli/src/connections.c:384 ../cli/src/connections.c:385
-#: ../cli/src/connections.c:602 ../cli/src/connections.c:605
-#: ../cli/src/devices.c:388 ../cli/src/devices.c:513 ../cli/src/devices.c:539
-#: ../cli/src/devices.c:540 ../cli/src/devices.c:541 ../cli/src/devices.c:542
-#: ../cli/src/devices.c:543 ../cli/src/settings.c:504
-#: ../cli/src/settings.c:506 ../cli/src/settings.c:544
-#: ../cli/src/settings.c:643 ../cli/src/settings.c:912
-#: ../cli/src/settings.c:913 ../cli/src/settings.c:915
-#: ../cli/src/settings.c:917 ../cli/src/settings.c:1042
-#: ../cli/src/settings.c:1043 ../cli/src/settings.c:1044
-#: ../cli/src/settings.c:1123 ../cli/src/settings.c:1124
-#: ../cli/src/settings.c:1125 ../cli/src/settings.c:1126
-#: ../cli/src/settings.c:1127 ../cli/src/settings.c:1128
-#: ../cli/src/settings.c:1129 ../cli/src/settings.c:1130
-#: ../cli/src/settings.c:1131 ../cli/src/settings.c:1132
-#: ../cli/src/settings.c:1133 ../cli/src/settings.c:1134
-#: ../cli/src/settings.c:1135 ../cli/src/settings.c:1210
-msgid "no"
-msgstr "não"
+#: ../cli/src/connections.c:158 ../cli/src/connections.c:160
+#: ../cli/src/connections.c:196 ../cli/src/connections.c:198
+#: ../cli/src/connections.c:205 ../cli/src/connections.c:207
+#: ../cli/src/connections.c:297 ../cli/src/connections.c:299
+msgid "Name"
+msgstr "Nome"
-#: ../cli/src/connections.c:457 ../cli/src/connections.c:500
-msgid "System connections"
-msgstr "Conexões de sistema"
+#: ../cli/src/connections.c:163
+#, c-format
+msgid "System connections:\n"
+msgstr "Conexões de sistema:\n"
-#: ../cli/src/connections.c:462 ../cli/src/connections.c:513
-msgid "User connections"
-msgstr "Conexões de usuário"
+#: ../cli/src/connections.c:167
+#, c-format
+msgid "User connections:\n"
+msgstr "Conexões de usuário:\n"
-#: ../cli/src/connections.c:474 ../cli/src/connections.c:1334
-#: ../cli/src/connections.c:1350 ../cli/src/connections.c:1359
-#: ../cli/src/connections.c:1370 ../cli/src/connections.c:1452
-#: ../cli/src/devices.c:864 ../cli/src/devices.c:874 ../cli/src/devices.c:973
-#: ../cli/src/devices.c:980
+#: ../cli/src/connections.c:178 ../cli/src/connections.c:967
+#: ../cli/src/connections.c:983 ../cli/src/connections.c:992
+#: ../cli/src/connections.c:1003 ../cli/src/connections.c:1085
+#: ../cli/src/devices.c:604 ../cli/src/devices.c:614 ../cli/src/devices.c:699
+#: ../cli/src/devices.c:785 ../cli/src/devices.c:792
#, c-format
msgid "Error: %s argument is missing."
-msgstr "Erro: argumento %s está faltando"
+msgstr "Erro: faltando argumento %s."
-#: ../cli/src/connections.c:487
+#: ../cli/src/connections.c:189
#, c-format
msgid "Error: %s - no such connection."
-msgstr "Erro: %s - não existe tal conexão"
+msgstr "Erro: %s - não existe esta conexão."
+
+#: ../cli/src/connections.c:196
+msgid "System-wide connections"
+msgstr "Conexões de sistema"
-#: ../cli/src/connections.c:519 ../cli/src/connections.c:1383
-#: ../cli/src/connections.c:1470 ../cli/src/devices.c:687
-#: ../cli/src/devices.c:754 ../cli/src/devices.c:888 ../cli/src/devices.c:986
+#: ../cli/src/connections.c:205
+msgid "User connections"
+msgstr "Conexões de usuário"
+
+#: ../cli/src/connections.c:212 ../cli/src/connections.c:1016
+#: ../cli/src/connections.c:1103 ../cli/src/devices.c:446
+#: ../cli/src/devices.c:494 ../cli/src/devices.c:628 ../cli/src/devices.c:706
+#: ../cli/src/devices.c:798
#, c-format
msgid "Unknown parameter: %s\n"
msgstr "Parâmetro desconhecido: %s\n"
-#: ../cli/src/connections.c:528
+#: ../cli/src/connections.c:221
#, c-format
msgid "Error: no valid parameter specified."
-msgstr "Erro: não existe um parâmetro válido especificado"
+msgstr "Erro: nenhum parâmetro válido especificado."
-#: ../cli/src/connections.c:543 ../cli/src/connections.c:1572
-#: ../cli/src/devices.c:1192 ../cli/src/network-manager.c:274
-#, c-format
-msgid "Error: %s."
-msgstr "Erro: %s"
-
-#: ../cli/src/connections.c:649
-#, c-format
-msgid "Error: 'con status': %s"
-msgstr "Erro: status 'con':%s"
+#. FIXME: Fix the output
+#: ../cli/src/connections.c:268 ../cli/src/devices.c:302
+#: ../cli/src/devices.c:321 ../cli/src/devices.c:353 ../cli/src/devices.c:355
+#: ../cli/src/devices.c:357 ../cli/src/devices.c:359 ../cli/src/devices.c:361
+msgid "yes"
+msgstr "sim"
-#: ../cli/src/connections.c:651
-#, c-format
-msgid "Error: 'con status': %s; allowed fields: %s"
-msgstr "Erro: status 'con':%s, campos permitidos: %s"
+#: ../cli/src/connections.c:268 ../cli/src/devices.c:304
+msgid "no"
+msgstr "não"
-#: ../cli/src/connections.c:658
+#: ../cli/src/connections.c:297
msgid "Active connections"
msgstr "Conexões ativas"
-#: ../cli/src/connections.c:1026
-#, c-format
-msgid "no active connection on device '%s'"
-msgstr "nenhuma conexão ativa no dispositivo '%s'"
+#: ../cli/src/connections.c:297 ../cli/src/connections.c:299
+#: ../cli/src/devices.c:302 ../cli/src/devices.c:304
+msgid "Default"
+msgstr "Padrão"
-#: ../cli/src/connections.c:1034
-#, c-format
-msgid "no active connection or device"
-msgstr "nenhuma conexão ativa ou dispositivo"
+#: ../cli/src/connections.c:297 ../cli/src/connections.c:299
+msgid "Service"
+msgstr "Serviço"
+
+#: ../cli/src/connections.c:297 ../cli/src/connections.c:299
+msgid "Devices"
+msgstr "Dispositivos"
-#: ../cli/src/connections.c:1084
+#: ../cli/src/connections.c:659
#, c-format
-msgid "device '%s' not compatible with connection '%s'"
-msgstr "dispositivo '%s' não compatível com a conexão '%s'"
+msgid "no active connection on device '%s'"
+msgstr "nenhuma conexão ativa no dispositivo \"%s\""
-#: ../cli/src/connections.c:1086
+#: ../cli/src/connections.c:667
#, c-format
-msgid "no device found for connection '%s'"
-msgstr "nenhum dispositivo encontrado para a conexão '%s'"
+msgid "no active connection or device"
+msgstr "nenhuma conexão ou dispositivo ativo"
-#: ../cli/src/connections.c:1097
+#: ../cli/src/connections.c:730
msgid "activating"
msgstr "ativando"
-#: ../cli/src/connections.c:1099
+#: ../cli/src/connections.c:732
msgid "activated"
msgstr "ativado"
-#: ../cli/src/connections.c:1102 ../cli/src/connections.c:1125
-#: ../cli/src/connections.c:1158 ../cli/src/devices.c:224
-#: ../cli/src/devices.c:514 ../cli/src/network-manager.c:92
-#: ../cli/src/network-manager.c:145 ../cli/src/settings.c:469
+#: ../cli/src/connections.c:735 ../cli/src/connections.c:758
+#: ../cli/src/connections.c:791 ../cli/src/devices.c:111
+#: ../cli/src/network-manager.c:76 ../cli/src/network-manager.c:98
msgid "unknown"
msgstr "desconhecido"
-#: ../cli/src/connections.c:1111
+#: ../cli/src/connections.c:744
msgid "VPN connecting (prepare)"
-msgstr "Conectando com o VPN (preparar)"
+msgstr "Conexão VPN (preparando)"
-#: ../cli/src/connections.c:1113
+#: ../cli/src/connections.c:746
msgid "VPN connecting (need authentication)"
-msgstr "Conectando ao VPN (autenticação necessária)"
+msgstr "Conexão VPN (precisa de autenticação)"
-#: ../cli/src/connections.c:1115
+#: ../cli/src/connections.c:748
msgid "VPN connecting"
-msgstr "Conectando ao VPN"
+msgstr "Conexão VPN"
-#: ../cli/src/connections.c:1117
+#: ../cli/src/connections.c:750
msgid "VPN connecting (getting IP configuration)"
-msgstr "Conectando ao VPN (obtendo configuração do IP)"
+msgstr "Conexão VPN (obtendo configuração de IP)"
-#: ../cli/src/connections.c:1119
+#: ../cli/src/connections.c:752
msgid "VPN connected"
-msgstr "VPN conectado"
+msgstr "VPN conectada"
-#: ../cli/src/connections.c:1121
+#: ../cli/src/connections.c:754
msgid "VPN connection failed"
-msgstr "Falha da conexão ao VPN"
+msgstr "Conexão VPN falhou"
-#: ../cli/src/connections.c:1123
+#: ../cli/src/connections.c:756
msgid "VPN disconnected"
-msgstr "VPN desconectado"
+msgstr "VPN desconectada"
-#: ../cli/src/connections.c:1134
+#: ../cli/src/connections.c:767
msgid "unknown reason"
msgstr "razão desconhecida"
-#: ../cli/src/connections.c:1136
+#: ../cli/src/connections.c:769
msgid "none"
-msgstr "nenhuma"
+msgstr "nenhum(a)"
-#: ../cli/src/connections.c:1138
+#: ../cli/src/connections.c:771
msgid "the user was disconnected"
msgstr "o usuário foi desconectado"
-#: ../cli/src/connections.c:1140
+#: ../cli/src/connections.c:773
msgid "the base network connection was interrupted"
msgstr "a conexão de rede base foi interrompida"
-#: ../cli/src/connections.c:1142
+#: ../cli/src/connections.c:775
msgid "the VPN service stopped unexpectedly"
msgstr "o serviço VPN parou inesperadamente"
-#: ../cli/src/connections.c:1144
+#: ../cli/src/connections.c:777
msgid "the VPN service returned invalid configuration"
-msgstr "O serviço VPN retornou configurações inválidas"
+msgstr "o serviço VPN retornou uma configuração inválida"
-#: ../cli/src/connections.c:1146
+#: ../cli/src/connections.c:779
msgid "the connection attempt timed out"
-msgstr "a tentativa de conexão expirou o tempo limite"
+msgstr "tentativa de conexão esgotada"
-#: ../cli/src/connections.c:1148
+#: ../cli/src/connections.c:781
msgid "the VPN service did not start in time"
-msgstr "o serviço VPN não iniciou em tempo"
+msgstr "o serviço VPN não iniciou a tempo"
-#: ../cli/src/connections.c:1150
+#: ../cli/src/connections.c:783
msgid "the VPN service failed to start"
msgstr "o serviço VPN falhou ao iniciar"
-#: ../cli/src/connections.c:1152
+#: ../cli/src/connections.c:785
msgid "no valid VPN secrets"
-msgstr "Segredos do VPN não válidos"
+msgstr "sem segredos VPN válidos"
-#: ../cli/src/connections.c:1154
+#: ../cli/src/connections.c:787
msgid "invalid VPN secrets"
-msgstr "Segredos do VPN inválidos"
+msgstr "segredos VPN inválidos"
-#: ../cli/src/connections.c:1156
+#: ../cli/src/connections.c:789
msgid "the connection was removed"
msgstr "a conexão foi removida"
-#: ../cli/src/connections.c:1170
+#: ../cli/src/connections.c:803
#, c-format
msgid "state: %s\n"
-msgstr "stado: %s\n"
+msgstr "estado: %s\n"
-#: ../cli/src/connections.c:1173 ../cli/src/connections.c:1199
+#: ../cli/src/connections.c:806 ../cli/src/connections.c:832
#, c-format
msgid "Connection activated\n"
msgstr "Conexão ativada\n"
-#: ../cli/src/connections.c:1176
+#: ../cli/src/connections.c:809
#, c-format
msgid "Error: Connection activation failed."
-msgstr "Erro: Ativação da conexão falhou."
+msgstr "Erro: a ativação da conexão falhou."
-#: ../cli/src/connections.c:1195
+#: ../cli/src/connections.c:828
#, c-format
msgid "state: %s (%d)\n"
msgstr "estado: %s (%d)\n"
-#: ../cli/src/connections.c:1205
+#: ../cli/src/connections.c:838
#, c-format
msgid "Error: Connection activation failed: %s."
-msgstr "Erro: Ativação de conexão falhou: %s"
+msgstr "Erro: a ativação da conexão falhou: %s."
-#: ../cli/src/connections.c:1222 ../cli/src/devices.c:811
+#: ../cli/src/connections.c:855 ../cli/src/devices.c:551
#, c-format
msgid "Error: Timeout %d sec expired."
-msgstr "Erro: o Timeout%d de segundos expirou"
+msgstr "Erro: tempo expirado - %d seg."
-#: ../cli/src/connections.c:1265
+#: ../cli/src/connections.c:898
#, c-format
msgid "Error: Connection activation failed: %s"
-msgstr "Erro: Ativação de conexão falhou: %s"
+msgstr "Erro: a ativação da conexão falhou: %s"
-#: ../cli/src/connections.c:1279
+#: ../cli/src/connections.c:912
#, c-format
msgid "Error: Obtaining active connection for '%s' failed."
-msgstr "Erro: Obtenção de conexão ativa para '%s' falhou."
+msgstr "Erro: falha na obtenção da conexão ativa para \"%s\"."
-#: ../cli/src/connections.c:1288
+#: ../cli/src/connections.c:921
#, c-format
msgid "Active connection state: %s\n"
-msgstr "Estado de conexão ativa: %s\n"
+msgstr "Estado da conexão ativa: %s\n"
-#: ../cli/src/connections.c:1289
+#: ../cli/src/connections.c:922
#, c-format
msgid "Active connection path: %s\n"
-msgstr "Caminho de conexão ativa: %s\n"
+msgstr "Caminho da conexão ativa: %s\n"
-#: ../cli/src/connections.c:1343 ../cli/src/connections.c:1461
+#: ../cli/src/connections.c:976 ../cli/src/connections.c:1094
#, c-format
msgid "Error: Unknown connection: %s."
-msgstr "Erro: Conexão desconhecida: %s"
+msgstr "Erro: conexão desconhecida: %s."
-#: ../cli/src/connections.c:1378 ../cli/src/devices.c:882
+#: ../cli/src/connections.c:1011 ../cli/src/devices.c:622
#, c-format
msgid "Error: timeout value '%s' is not valid."
-msgstr "Erro: valor timeout '%s' não é válido."
+msgstr "Erro: valor do tempo de expiração \"%s\" não é válido."
-#: ../cli/src/connections.c:1391 ../cli/src/connections.c:1478
+#: ../cli/src/connections.c:1024 ../cli/src/connections.c:1111
#, c-format
msgid "Error: id or uuid has to be specified."
-msgstr "Erro: id ou uuid deve ser especificada."
+msgstr "Erro: id ou uuid tem que ser especificada."
-#: ../cli/src/connections.c:1411
+#: ../cli/src/connections.c:1044
#, c-format
msgid "Error: No suitable device found: %s."
-msgstr "Erro: Não foi encontrado nenhum dispositivo adequado: %s."
+msgstr "Erro: nenhum dispositivo adequado encontrado: %s."
-#: ../cli/src/connections.c:1413
+#: ../cli/src/connections.c:1046
#, c-format
msgid "Error: No suitable device found."
-msgstr "Erro: Não foi encontrado nenhum dispositivo adequado."
+msgstr "Erro: nenhum dispositivo adequado encontrado."
-#: ../cli/src/connections.c:1505
+#: ../cli/src/connections.c:1138
#, c-format
msgid "Warning: Connection not active\n"
-msgstr "Aviso: Conexão não ativa\n"
+msgstr "Aviso: conexão inativa\n"
-#: ../cli/src/connections.c:1561
+#: ../cli/src/connections.c:1189
#, c-format
msgid "Error: 'con' command '%s' is not valid."
-msgstr "Erro: 'con' comando '%s' não é válido."
+msgstr "Erro: comando \"con\" \"%s\" não é válido."
-#: ../cli/src/connections.c:1597
+#: ../cli/src/connections.c:1216
#, c-format
msgid "Error: could not connect to D-Bus."
-msgstr "Erro: Nâo foi possível conectar ao D-Bus."
+msgstr "Erro: não foi possível conectar ao D-Bus."
-#: ../cli/src/connections.c:1604
+#: ../cli/src/connections.c:1223
#, c-format
msgid "Error: Could not get system settings."
-msgstr "Erro: Não foi possível obter configurações de sistema"
+msgstr "Erro: não foi possível obter as configurações do sistema."
-#: ../cli/src/connections.c:1612
+#: ../cli/src/connections.c:1231
#, c-format
msgid "Error: Could not get user settings."
-msgstr "Erro: Não foi possível obter configurações de usuário."
+msgstr "Erro: não foi possível obter as configurações do usuário."
-#: ../cli/src/connections.c:1622
+#: ../cli/src/connections.c:1241
#, c-format
msgid "Error: Can't obtain connections: settings services are not running."
msgstr ""
-"Erro: Não foi possível obter conexões: serviços de configuração não estão "
-"funcionando."
-
-#. 0
-#. 9
-#: ../cli/src/devices.c:60 ../cli/src/devices.c:86 ../cli/src/devices.c:162
-msgid "DEVICE"
-msgstr "DISPOSITIVO"
-
-#. 1
-#. 4
-#. 0
-#: ../cli/src/devices.c:62 ../cli/src/devices.c:90
-#: ../cli/src/network-manager.c:36
-msgid "STATE"
-msgstr "ESTADO"
-
-#: ../cli/src/devices.c:71
-msgid "GENERAL"
-msgstr "GERAL"
-
-#. 0
-#: ../cli/src/devices.c:72
-msgid "CAPABILITIES"
-msgstr "CAPACIDADES"
-
-#. 1
-#: ../cli/src/devices.c:73
-msgid "WIFI-PROPERTIES"
-msgstr "PROPRIEDADES DO WIFI"
-
-#. 2
-#: ../cli/src/devices.c:74
-msgid "AP"
-msgstr "AP"
-
-#. 3
-#: ../cli/src/devices.c:75
-msgid "WIRED-PROPERTIES"
-msgstr "PROPRIEDADES CABEADAS"
-
-#. 4
-#: ../cli/src/devices.c:76
-msgid "IP4-SETTINGS"
-msgstr "CONFIGURAÇÕES DO IP4"
-
-#. 5
-#: ../cli/src/devices.c:77
-msgid "IP4-DNS"
-msgstr "DNS DO IP4"
-
-#. 2
-#: ../cli/src/devices.c:88
-msgid "DRIVER"
-msgstr "DRIVER"
-
-#. 3
-#: ../cli/src/devices.c:89
-msgid "HWADDR"
-msgstr "HWADDR"
-
-#. 0
-#: ../cli/src/devices.c:99
-msgid "CARRIER-DETECT"
-msgstr "DETECTOR DE CARREGADOR"
-
-#. 1
-#: ../cli/src/devices.c:100
-msgid "SPEED"
-msgstr "VELOCIDADE"
+"Erro: Não é possível obter conexões - serviços de configuração não estão em "
+"execução."
-#. 0
-#: ../cli/src/devices.c:109
-msgid "CARRIER"
-msgstr "CARREGADOR"
-
-#. 0
-#: ../cli/src/devices.c:119
-msgid "WEP"
-msgstr "WEP"
-
-#. 1
-#: ../cli/src/devices.c:120
-msgid "WPA"
-msgstr "WPA"
-
-#. 2
-#: ../cli/src/devices.c:121
-msgid "WPA2"
-msgstr "WPA2"
-
-#. 3
-#: ../cli/src/devices.c:122
-msgid "TKIP"
-msgstr "TKIP"
-
-#. 4
-#: ../cli/src/devices.c:123
-msgid "CCMP"
-msgstr "CCMP"
-
-#. 0
-#: ../cli/src/devices.c:132
-msgid "ADDRESS"
-msgstr "ENDEREÇO"
-
-#. 1
-#: ../cli/src/devices.c:133
-msgid "PREFIX"
-msgstr "PREFIXO"
-
-#. 2
-#: ../cli/src/devices.c:134
-msgid "GATEWAY"
-msgstr "GATEWAY"
-
-#. 0
-#: ../cli/src/devices.c:143
-msgid "DNS"
-msgstr "DNS"
-
-#. 0
-#: ../cli/src/devices.c:153
-msgid "SSID"
-msgstr "SSID"
-
-#. 1
-#: ../cli/src/devices.c:154
-msgid "BSSID"
-msgstr "BSSID"
-
-#. 2
-#: ../cli/src/devices.c:155
-msgid "MODE"
-msgstr "MODO"
-
-#. 3
-#: ../cli/src/devices.c:156
-msgid "FREQ"
-msgstr "FREQ"
-
-#. 4
-#: ../cli/src/devices.c:157
-msgid "RATE"
-msgstr "TAXA"
-
-#. 5
-#: ../cli/src/devices.c:158
-msgid "SIGNAL"
-msgstr "SINAL"
-
-#. 6
-#: ../cli/src/devices.c:159
-msgid "SECURITY"
-msgstr "SEGURANÇA"
-
-#. 7
-#: ../cli/src/devices.c:160
-msgid "WPA-FLAGS"
-msgstr "SINALIZADOR DO WPA"
-
-#. 8
-#: ../cli/src/devices.c:161
-msgid "RSN-FLAGS"
-msgstr "SINALIZADOR DO RSN"
-
-#. 10
-#: ../cli/src/devices.c:163
-msgid "ACTIVE"
-msgstr "ATIVO"
-
-#: ../cli/src/devices.c:186
+#: ../cli/src/devices.c:73
#, c-format
msgid ""
"Usage: nmcli dev { COMMAND | help }\n"
@@ -632,246 +357,359 @@ msgid ""
" status\n"
" list [iface <iface>]\n"
" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+" wifi [list [iface <iface>] | apinfo iface <iface> hwaddr <hwaddr>]\n"
"\n"
msgstr ""
-"Usage: nmcli dev { COMMAND | help }\n"
+"Uso: nmcli dev { COMANDO | help }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi }\n"
+" COMANDO := { status | list | disconnect | wifi }\n"
"\n"
" status\n"
" list [iface <iface>]\n"
" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+" wifi [list [iface <iface>] | apinfo iface <iface> hwaddr <hwaddr>]\n"
"\n"
-#: ../cli/src/devices.c:206
+#: ../cli/src/devices.c:93
msgid "unmanaged"
-msgstr "Não gerenciado"
+msgstr "não gerenciável"
-#: ../cli/src/devices.c:208
+#: ../cli/src/devices.c:95
msgid "unavailable"
msgstr "indisponível"
-#: ../cli/src/devices.c:210 ../cli/src/network-manager.c:89
+#: ../cli/src/devices.c:97 ../cli/src/network-manager.c:73
msgid "disconnected"
-msgstr "disconectado"
+msgstr "desconectado"
-#: ../cli/src/devices.c:212
+#: ../cli/src/devices.c:99
msgid "connecting (prepare)"
-msgstr "conectando (preparar)"
+msgstr "conectando (preparando)"
-#: ../cli/src/devices.c:214
+#: ../cli/src/devices.c:101
msgid "connecting (configuring)"
msgstr "conectando (configurando)"
-#: ../cli/src/devices.c:216
+#: ../cli/src/devices.c:103
msgid "connecting (need authentication)"
-msgstr "conectando (é necessário uma autenticação)"
+msgstr "conectando (precisa de autenticação)"
-#: ../cli/src/devices.c:218
+#: ../cli/src/devices.c:105
msgid "connecting (getting IP configuration)"
-msgstr "conectando (obtendo configuração do IP)"
+msgstr "conectando (obtendo configuração de IP)"
-#: ../cli/src/devices.c:220 ../cli/src/network-manager.c:87
+#: ../cli/src/devices.c:107 ../cli/src/network-manager.c:71
msgid "connected"
msgstr "conectado"
-#: ../cli/src/devices.c:222
+#: ../cli/src/devices.c:109
msgid "connection failed"
-msgstr "conexão falhou"
+msgstr "falha na conexão"
-#: ../cli/src/devices.c:245 ../cli/src/devices.c:380
+#: ../cli/src/devices.c:132 ../cli/src/devices.c:876
msgid "Unknown"
-msgstr "desconhecido"
+msgstr "Desconhecido"
-#: ../cli/src/devices.c:277
+#. print them
+#: ../cli/src/devices.c:164 ../cli/src/devices.c:266 ../cli/src/devices.c:861
+#: ../cli/src/devices.c:879
msgid "(none)"
-msgstr "(nenhum)"
+msgstr "(nenhum(a))"
-#: ../cli/src/devices.c:302
+#: ../cli/src/devices.c:209
#, c-format
msgid "%s: error converting IP4 address 0x%X"
msgstr "%s: erro ao converter endereço IP4 0x%X"
-#: ../cli/src/devices.c:349
+#: ../cli/src/devices.c:238
#, c-format
-msgid "%u MHz"
-msgstr "%u MHz"
+msgid "%s, %s, Freq %d MHz, Rate %d Mb/s, Strength %d"
+msgstr "%s, %s, Freq %d MHz, Taxa %d Mb/s, Força %d"
-#: ../cli/src/devices.c:350
-#, c-format
-msgid "%u MB/s"
-msgstr "%u MB/s"
+#: ../cli/src/devices.c:239
+msgid "Ad-Hoc"
+msgstr "Ad-Hoc"
-#: ../cli/src/devices.c:359
-msgid "Encrypted: "
-msgstr "Criptografado:"
+#: ../cli/src/devices.c:248
+msgid ", Encrypted: "
+msgstr ", Criptografada:"
-#: ../cli/src/devices.c:364
-msgid "WEP "
-msgstr "WEP"
+#: ../cli/src/devices.c:253
+msgid " WEP"
+msgstr " WEP"
-#: ../cli/src/devices.c:366
-msgid "WPA "
-msgstr "WPA"
+#: ../cli/src/devices.c:255
+msgid " WPA"
+msgstr " WPA"
-#: ../cli/src/devices.c:368
-msgid "WPA2 "
-msgstr "WPA2"
+#: ../cli/src/devices.c:257
+msgid " WPA2"
+msgstr " WPA2"
-#: ../cli/src/devices.c:371
-msgid "Enterprise "
-msgstr "Enterprise"
+#: ../cli/src/devices.c:260
+msgid " Enterprise"
+msgstr " Enterprise"
-#: ../cli/src/devices.c:380
-msgid "Ad-Hoc"
-msgstr "Ad-Hoc"
+#: ../cli/src/devices.c:294 ../cli/src/devices.c:458 ../cli/src/devices.c:460
+msgid "Device"
+msgstr "Dispositivo"
-#: ../cli/src/devices.c:380
-msgid "Infrastructure"
-msgstr "Infraestrutura"
+#: ../cli/src/devices.c:299
+msgid "Driver"
+msgstr "Controlador"
-#: ../cli/src/devices.c:442
-#, c-format
-msgid "Error: 'dev list': %s"
-msgstr "Erro: 'dev list': %s"
+#: ../cli/src/devices.c:299 ../cli/src/devices.c:567
+msgid "(unknown)"
+msgstr "(desconhecido)"
-#: ../cli/src/devices.c:444
-#, c-format
-msgid "Error: 'dev list': %s; allowed fields: %s"
-msgstr "Erro: 'dev list': %s, campos permitidos '%s'"
+#: ../cli/src/devices.c:300 ../cli/src/devices.c:458 ../cli/src/devices.c:460
+msgid "State"
+msgstr "Estado"
-#: ../cli/src/devices.c:453
-msgid "Device details"
-msgstr "Detalhes do Dispositivos"
+#: ../cli/src/devices.c:313
+msgid "HW Address"
+msgstr "Endereço de HW"
-#: ../cli/src/devices.c:483 ../cli/src/devices.c:827
-msgid "(unknown)"
-msgstr "(desconhecido)"
+#: ../cli/src/devices.c:319
+#, c-format
+msgid ""
+"\n"
+" Capabilities:\n"
+msgstr ""
+"\n"
+" Capacidades:\n"
-#: ../cli/src/devices.c:484
-msgid "unknown)"
-msgstr "desconhecido)"
+#: ../cli/src/devices.c:321
+msgid "Carrier Detect"
+msgstr "Detecção de Operadora"
-#: ../cli/src/devices.c:510
+#: ../cli/src/devices.c:336
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-#. Print header
-#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:583
+#: ../cli/src/devices.c:337
+msgid "Speed"
+msgstr "Velocidade"
+
+#: ../cli/src/devices.c:348
+#, c-format
+msgid ""
+"\n"
+" Wireless Properties\n"
+msgstr ""
+"\n"
+" Propriedades de rede sem fio\n"
+
+#: ../cli/src/devices.c:353
+msgid "WEP Encryption"
+msgstr "Criptografia WEP"
+
+#: ../cli/src/devices.c:355
+msgid "WPA Encryption"
+msgstr "Criptografia WPA"
+
+#: ../cli/src/devices.c:357
+msgid "WPA2 Encryption"
+msgstr "Criptografia WPA2"
+
+#: ../cli/src/devices.c:359
+msgid "TKIP cipher"
+msgstr "Cifrador TKIP"
+
+#: ../cli/src/devices.c:361
+msgid "CCMP cipher"
+msgstr "Cifrador CCMP"
+
+#: ../cli/src/devices.c:368
+#, c-format
+msgid ""
+"\n"
+" Wireless Access Points %s\n"
+msgstr ""
+"\n"
+" Pontos de acesso sem fio %s\n"
+
+#: ../cli/src/devices.c:368
+msgid "(* = current AP)"
+msgstr "(* = PA atual)"
+
+#: ../cli/src/devices.c:374
+#, c-format
+msgid ""
+"\n"
+" Wired Properties\n"
+msgstr ""
+"\n"
+" Propriedades de rede com fio\n"
+
+#: ../cli/src/devices.c:377 ../cli/src/devices.c:379
+msgid "Carrier"
+msgstr "Operadora"
+
+#: ../cli/src/devices.c:377
msgid "on"
msgstr "ligado"
-#: ../cli/src/devices.c:583
+#: ../cli/src/devices.c:379
msgid "off"
msgstr "desligado"
-#: ../cli/src/devices.c:710
+#: ../cli/src/devices.c:387
#, c-format
-msgid "Error: 'dev status': %s"
-msgstr "Erro: 'dev status': %s"
+msgid ""
+"\n"
+" IPv4 Settings:\n"
+msgstr ""
+"\n"
+" Configurações IPv4\n"
-#: ../cli/src/devices.c:712
-#, c-format
-msgid "Error: 'dev status': %s; allowed fields: %s"
-msgstr "Erro: 'dev status': %s; campos permitidos: %s"
+#: ../cli/src/devices.c:395
+msgid "Address"
+msgstr "Endereço"
+
+#: ../cli/src/devices.c:401
+msgid "Prefix"
+msgstr "Prefixo"
+
+#: ../cli/src/devices.c:405
+msgid "Gateway"
+msgstr "Gateway"
+
+#: ../cli/src/devices.c:416
+msgid "DNS"
+msgstr "DNS"
-#: ../cli/src/devices.c:719
+#: ../cli/src/devices.c:458
msgid "Status of devices"
-msgstr "Estado dos dispositivos"
+msgstr "Status dos dispositivos"
-#: ../cli/src/devices.c:747
+#: ../cli/src/devices.c:487
#, c-format
msgid "Error: '%s' argument is missing."
-msgstr "Erro: argumento '%s' está faltando"
+msgstr "Erro: argumento \"%s\" está faltando."
-#: ../cli/src/devices.c:776 ../cli/src/devices.c:915 ../cli/src/devices.c:1035
+#: ../cli/src/devices.c:516 ../cli/src/devices.c:655 ../cli/src/devices.c:729
#, c-format
msgid "Error: Device '%s' not found."
-msgstr "Erro: Dispositivo '%s' não foi encontrado."
+msgstr "Erro: dispositivo \"%s\" não encontrado."
-#: ../cli/src/devices.c:799
+#: ../cli/src/devices.c:539
#, c-format
msgid "Success: Device '%s' successfully disconnected."
-msgstr "Sucesso: Dispositivo '%s' foi desconectado com sucesso."
+msgstr "Sucesso: dispositivo \"%s\" desconectado com sucesso."
-#: ../cli/src/devices.c:824
+#: ../cli/src/devices.c:564
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
-msgstr "Erro: Desconexão do Dispositivo '%s' (%s) falhou: %s"
+msgstr "Erro: desconexão do dispositivo \"%s\" (%s) falhou: %s"
-#: ../cli/src/devices.c:832
+#: ../cli/src/devices.c:572
#, c-format
msgid "Device state: %d (%s)\n"
-msgstr "Estado do Dispositivo: %d (%s)\n"
+msgstr "Estado do dispositivo: %d (%s)\n"
-#: ../cli/src/devices.c:896
+#: ../cli/src/devices.c:636
#, c-format
msgid "Error: iface has to be specified."
-msgstr "Erro: iface precisa ser especificado."
+msgstr "Erro: iface tem que ser especificada."
-#: ../cli/src/devices.c:1011
-#, c-format
-msgid "Error: 'dev wifi': %s"
-msgstr "Erro: dev wifi '%s' "
+#: ../cli/src/devices.c:736 ../cli/src/devices.c:746
+msgid "WiFi scan list"
+msgstr "Lista de varredura de redes sem fio"
-#: ../cli/src/devices.c:1013
+#: ../cli/src/devices.c:740
#, c-format
-msgid "Error: 'dev wifi': %s; allowed fields: %s"
-msgstr "Erro: 'dev wifi': %s;campos permitidos: %s"
+msgid "Error: Device '%s' is not a WiFi device."
+msgstr "Erro: dispositivo \"%s\" não é um dispositivo sem fio."
-#: ../cli/src/devices.c:1020
-msgid "WiFi scan list"
-msgstr "Lista de scan do WiFi "
+#: ../cli/src/devices.c:754
+msgid "Device:"
+msgstr "Dispositivo:"
-#: ../cli/src/devices.c:1055 ../cli/src/devices.c:1109
+#: ../cli/src/devices.c:806
#, c-format
-msgid "Error: Access point with hwaddr '%s' not found."
-msgstr "Erro: Ponto de aceso com o hwaddr '%s' não foi encontrado."
+msgid "Error: hwaddr has to be specified."
+msgstr "Erro: hwaddr tem que ser especificado."
-#: ../cli/src/devices.c:1072
+#: ../cli/src/devices.c:844
#, c-format
-msgid "Error: Device '%s' is not a WiFi device."
-msgstr "Erro: Dispositivo '%s' não é um dispositivo WiFi."
+msgid "Error: Access point with hwaddr '%s' not found."
+msgstr "Erro: Ponto de acesso com hwaddr \"%s\" não encontrado."
-#: ../cli/src/devices.c:1136
+#: ../cli/src/devices.c:862
#, c-format
-msgid "Error: 'dev wifi' command '%s' is not valid."
-msgstr "Erro: comando dev wifi '%s' não é válido"
+msgid "%u MHz"
+msgstr "%u MHz"
-#: ../cli/src/devices.c:1183
+#: ../cli/src/devices.c:863
#, c-format
-msgid "Error: 'dev' command '%s' is not valid."
-msgstr "Erro: comando 'dev' '%s' não é válido"
+msgid "%u MB/s"
+msgstr "%u MB/s"
+
+#: ../cli/src/devices.c:869 ../cli/src/devices.c:871
+msgid "AP parameters"
+msgstr "Parâmetros do PA"
+
+#: ../cli/src/devices.c:873
+msgid "SSID:"
+msgstr "SSID:"
+
+#: ../cli/src/devices.c:874
+msgid "BSSID:"
+msgstr "BSSID:"
+
+#: ../cli/src/devices.c:875
+msgid "Frequency:"
+msgstr "Frequência:"
+
+#: ../cli/src/devices.c:876
+msgid "Mode:"
+msgstr "Modo:"
+
+#: ../cli/src/devices.c:876
+msgid "Ad-hoc"
+msgstr "Ad-hoc"
-#: ../cli/src/network-manager.c:35
-msgid "RUNNING"
-msgstr "EXECUTANDO"
+#: ../cli/src/devices.c:876
+msgid "Infrastructure"
+msgstr "Infraestrutura"
+
+#: ../cli/src/devices.c:877
+msgid "Maximal bitrate:"
+msgstr "Bitrate máxima:"
+
+#: ../cli/src/devices.c:878
+msgid "Strength:"
+msgstr "Potência:"
-#. 1
-#: ../cli/src/network-manager.c:37
-msgid "WIFI-HARDWARE"
-msgstr "HARDWARE DO WIFI"
+#: ../cli/src/devices.c:879
+msgid "Flags:"
+msgstr "Flags:"
-#. 2
-#: ../cli/src/network-manager.c:38
-msgid "WIFI"
-msgstr "WIFI"
+#: ../cli/src/devices.c:879
+msgid "privacy"
+msgstr "privacidade"
-#. 3
-#: ../cli/src/network-manager.c:39
-msgid "WWAN-HARDWARE"
-msgstr "HARDWARE DO WWAN"
+#: ../cli/src/devices.c:880
+msgid "WPA flags:"
+msgstr "Flags WPA:"
+
+#: ../cli/src/devices.c:881
+msgid "RSN flags:"
+msgstr "Flags RSN:"
+
+#: ../cli/src/devices.c:907
+#, c-format
+msgid "Error: 'dev wifi' command '%s' is not valid."
+msgstr "Erro: comando \"dev wifi %s\" é inválido."
-#. 4
-#: ../cli/src/network-manager.c:40
-msgid "WWAN"
-msgstr "WWAN"
+#: ../cli/src/devices.c:943
+#, c-format
+msgid "Error: 'dev' command '%s' is not valid."
+msgstr "Erro: comando \"dev %s\" é inválido."
-#: ../cli/src/network-manager.c:62
+#: ../cli/src/network-manager.c:46
#, c-format
msgid ""
"Usage: nmcli nm { COMMAND | help }\n"
@@ -885,9 +723,9 @@ msgid ""
" wwan [on|off]\n"
"\n"
msgstr ""
-"Usage: nmcli nm { COMMAND | help }\n"
+"Uso: nmcli nm { COMANDO | help }\n"
"\n"
-" COMMAND := { status | sleep | wakeup | wifi | wwan }\n"
+" COMANDO := { status | sleep | wakeup | wifi | wwan }\n"
"\n"
" status\n"
" sleep\n"
@@ -896,91 +734,89 @@ msgstr ""
" wwan [on|off]\n"
"\n"
-#: ../cli/src/network-manager.c:83
+#: ../cli/src/network-manager.c:67
msgid "asleep"
-msgstr "modo de espera"
+msgstr "adormecido"
-#: ../cli/src/network-manager.c:85
+#: ../cli/src/network-manager.c:69
msgid "connecting"
msgstr "conectando"
-#: ../cli/src/network-manager.c:125
-#, c-format
-msgid "Error: 'nm status': %s"
-msgstr "Erro: 'nm status': %s"
+#: ../cli/src/network-manager.c:93 ../cli/src/network-manager.c:94
+#: ../cli/src/network-manager.c:95 ../cli/src/network-manager.c:96
+#: ../cli/src/network-manager.c:143 ../cli/src/network-manager.c:160
+msgid "enabled"
+msgstr "habilitado"
-#: ../cli/src/network-manager.c:127
-#, c-format
-msgid "Error: 'nm status': %s; allowed fields: %s"
-msgstr "Erro: 'nm status': %s; campos permitidos: %s"
+#: ../cli/src/network-manager.c:93 ../cli/src/network-manager.c:94
+#: ../cli/src/network-manager.c:95 ../cli/src/network-manager.c:96
+#: ../cli/src/network-manager.c:143 ../cli/src/network-manager.c:160
+msgid "disabled"
+msgstr "desabilitado"
-#: ../cli/src/network-manager.c:134
+#: ../cli/src/network-manager.c:102
msgid "NetworkManager status"
-msgstr "status do NetworkManager "
+msgstr "Status do 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
-msgid "enabled"
-msgstr "ativado"
+#: ../cli/src/network-manager.c:104
+msgid "NM running:"
+msgstr "NM rodando:"
-#: ../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
-msgid "disabled"
-msgstr "desativado"
-
-#: ../cli/src/network-manager.c:148
+#: ../cli/src/network-manager.c:104
msgid "running"
-msgstr "executando:"
+msgstr "executando"
-#: ../cli/src/network-manager.c:148
+#: ../cli/src/network-manager.c:104
msgid "not running"
-msgstr "não está executando:"
+msgstr "não executando"
-#: ../cli/src/network-manager.c:201 ../cli/src/network-manager.c:233
-#, c-format
-msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
-msgstr "Erro: valor do '--fields' '%s' não é válido aqui; campos permitidos: %s"
+#: ../cli/src/network-manager.c:105
+msgid "NM state:"
+msgstr "Estado do NM:"
-#: ../cli/src/network-manager.c:209
-msgid "WiFi enabled"
-msgstr "WiFi ativado"
+#: ../cli/src/network-manager.c:106
+msgid "NM wireless hardware:"
+msgstr "Hardware sem fio do NM:"
-#: ../cli/src/network-manager.c:220
+#. no argument, show current state
+#: ../cli/src/network-manager.c:107 ../cli/src/network-manager.c:143
+msgid "NM wireless:"
+msgstr "NM sem fio:"
+
+#: ../cli/src/network-manager.c:108
+msgid "NM WWAN hardware:"
+msgstr "Hardware NM WWAN:"
+
+#. no argument, show current state
+#: ../cli/src/network-manager.c:109 ../cli/src/network-manager.c:160
+msgid "NM WWAN:"
+msgstr "NM WWAN:"
+
+#: ../cli/src/network-manager.c:150
#, c-format
msgid "Error: invalid 'wifi' parameter: '%s'."
-msgstr "Erro: parâmetro do 'wifi' inválido: '%s'"
+msgstr "Erro: parâmetro \"wifi\" inválido: \"%s\""
-#: ../cli/src/network-manager.c:241
-msgid "WWAN enabled"
-msgstr "WWAN ativado"
-
-#: ../cli/src/network-manager.c:252
+#: ../cli/src/network-manager.c:167
#, c-format
msgid "Error: invalid 'wwan' parameter: '%s'."
-msgstr "Erro: parâmetro 'wwan' inválido: '%s'."
+msgstr "Erro: parâmetro \"wwan\" inválido: \"%s\""
-#: ../cli/src/network-manager.c:263
+#: ../cli/src/network-manager.c:178
#, c-format
msgid "Error: 'nm' command '%s' is not valid."
-msgstr "Erro: comando 'nm' '%s' não é válido."
+msgstr "Erro: comando \"nm %s\" é inválido."
-#: ../cli/src/nmcli.c:69
+#: ../cli/src/nmcli.c:65
#, 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] <field1,field2,...>|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"
+" -t[erse] terse output\n"
+" -p[retty] pretty output\n"
+" -v[ersion] show program version\n"
+" -h[elp] print this help\n"
"\n"
"OBJECT\n"
" nm NetworkManager status\n"
@@ -988,187 +824,53 @@ msgid ""
" dev devices managed by NetworkManager\n"
"\n"
msgstr ""
-"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
+"Uso: %s [OPÇÕES] OBJETO { COMANDO | help }\n"
"\n"
-"OPTIONS\n"
-" -t[erse] terse output\n"
-" -p[retty] pretty output\n"
-" -m[ode] tabular|multiline output mode\n"
-" -f[ields] <field1,field2,...>|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"
+"OPÇÕES\n"
+" -t[erse] saída concisa\n"
+" -p[retty] saída elegante\n"
+" -v[ersion] mostra a versão do programa\n"
+" -h[elp] imprime esta ajuda\n"
"\n"
-"OBJECT\n"
-" nm NetworkManager status\n"
-" con NetworkManager connections\n"
-" dev devices managed by NetworkManager\n"
+"OBJETO\n"
+" nm Status do NetworkManager\n"
+" con Conexões do NetworkManager\n"
+" dev Dispositivos gerenciados pelo NetworkManager\n"
"\n"
-#: ../cli/src/nmcli.c:113
-#, c-format
-msgid "Error: Object '%s' is unknown, try 'nmcli help'."
-msgstr "Erro: Objeto '%s' é desconhecido, tente o 'nmcli help'."
-
-#: ../cli/src/nmcli.c:143
-#, c-format
-msgid "Error: Option '--terse' is specified the second time."
-msgstr "Erro: Opção '--terse' está especificada uma segunda vez"
-
-#: ../cli/src/nmcli.c:148
-#, c-format
-msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
-msgstr "Erro: Opção '--terse'é mutualmente exclusivo com o '--pretty'"
-
-#: ../cli/src/nmcli.c:156
-#, c-format
-msgid "Error: Option '--pretty' is specified the second time."
-msgstr "Erro: Opção '--pretty' está especificado uma segunda vez"
-
-#: ../cli/src/nmcli.c:161
-#, c-format
-msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
-msgstr "Erro: Opção '--pretty'é mutualmente exclusivo com o '--terse'"
-
-#: ../cli/src/nmcli.c:171 ../cli/src/nmcli.c:187
+#: ../cli/src/nmcli.c:106
#, c-format
-msgid "Error: missing argument for '%s' option."
-msgstr "Erro: argumento está faltando para a opção %s."
+msgid "Object '%s' is unknown, try 'nmcli help'."
+msgstr "Objeto \"%s\" é desconhecido, tente \"nmcli help\"."
-#: ../cli/src/nmcli.c:180 ../cli/src/nmcli.c:196
-#, c-format
-msgid "Error: '%s' is not valid argument for '%s' option."
-msgstr "Erro: '%s' não é um argumento válido para a opção '%s'"
-
-#: ../cli/src/nmcli.c:203
-#, c-format
-msgid "Error: fields for '%s' options are missing."
-msgstr "Erro: campos para as opções '%s' estão faltando"
-
-#: ../cli/src/nmcli.c:209
+#: ../cli/src/nmcli.c:139
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "ferramenta nmcli, versão %s\n"
-#: ../cli/src/nmcli.c:215
+#: ../cli/src/nmcli.c:145
#, c-format
-msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
-msgstr "Erro: Opção '%s' é desconhecida, tente 'nmcli help'."
+msgid "Option '%s' is unknown, try 'nmcli -help'."
+msgstr "Opção \"%s\" é desconhecida, tente \"nmcli -help\"."
-#: ../cli/src/nmcli.c:234
+#: ../cli/src/nmcli.c:164
#, c-format
msgid "Caught signal %d, shutting down..."
-msgstr "Obtenção de sinal %d, fechando..."
+msgstr "Sinal capturado %d, desligando..."
-#: ../cli/src/nmcli.c:259
+#: ../cli/src/nmcli.c:189
#, c-format
msgid "Error: Could not connect to NetworkManager."
-msgstr "Erro: Não foi possível conectar ao NetworkManager."
+msgstr "Erro: não foi possível conectar ao NetworkManager."
-#: ../cli/src/nmcli.c:275
+#: ../cli/src/nmcli.c:205
msgid "Success"
msgstr "Sucesso"
-#: ../cli/src/settings.c:407
-#, c-format
-msgid "%d (hex-ascii-key)"
-msgstr "%d (hex-ascii-key)"
-
-#: ../cli/src/settings.c:409
-#, c-format
-msgid "%d (104/128-bit passphrase)"
-msgstr "%d (104/128-bit passphrase)"
-
-#: ../cli/src/settings.c:412
-#, c-format
-msgid "%d (unknown)"
-msgstr "%d (desconhecido)"
-
-#: ../cli/src/settings.c:438
-msgid "0 (unknown)"
-msgstr "0 (desconhecido)"
-
-#: ../cli/src/settings.c:444
-msgid "any, "
-msgstr "qualquer um"
-
-#: ../cli/src/settings.c:446
-msgid "900 MHz, "
-msgstr "900 MHz, "
-
-#: ../cli/src/settings.c:448
-msgid "1800 MHz, "
-msgstr "1800 MHz, "
-
-#: ../cli/src/settings.c:450
-msgid "1900 MHz, "
-msgstr "1900 MHz, "
-
-#: ../cli/src/settings.c:452
-msgid "850 MHz, "
-msgstr "850 MHz, "
-
-#: ../cli/src/settings.c:454
-msgid "WCDMA 3GPP UMTS 2100 MHz, "
-msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-
-#: ../cli/src/settings.c:456
-msgid "WCDMA 3GPP UMTS 1800 MHz, "
-msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-
-#: ../cli/src/settings.c:458
-msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
-msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-
-#: ../cli/src/settings.c:460
-msgid "WCDMA 3GPP UMTS 800 MHz, "
-msgstr "WCDMA 3GPP UMTS 800 MHz, "
-
-#: ../cli/src/settings.c:462
-msgid "WCDMA 3GPP UMTS 850 MHz, "
-msgstr "WCDMA 3GPP UMTS 850 MHz, "
-
-#: ../cli/src/settings.c:464
-msgid "WCDMA 3GPP UMTS 900 MHz, "
-msgstr "WCDMA 3GPP UMTS 900 MHz, "
-
-#: ../cli/src/settings.c:466
-msgid "WCDMA 3GPP UMTS 1700 MHz, "
-msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-
-#: ../cli/src/settings.c:546 ../cli/src/settings.c:708
-msgid "auto"
-msgstr "auto"
-
-#: ../cli/src/settings.c:704 ../cli/src/settings.c:707 ../cli/src/utils.c:172
-msgid "not set"
-msgstr "não definido"
-
-#: ../cli/src/utils.c:124
-#, c-format
-msgid "field '%s' has to be alone"
-msgstr "campo '%s' precisa estar sozinho"
-
-#: ../cli/src/utils.c:127
-#, c-format
-msgid "invalid field '%s'"
-msgstr "campo inválido '%s'"
-
-#: ../cli/src/utils.c:146
-#, c-format
-msgid "Option '--terse' requires specifying '--fields'"
-msgstr "Opção '--terse' requer a especificação de '..fields' "
-
-#: ../cli/src/utils.c:150
-#, c-format
-msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
-msgstr "Opção '--terse' requer que especifique os valores da opção '--fields', e não '%s'"
-
#: ../libnm-util/crypto.c:120
#, c-format
msgid "PEM key file had no end tag '%s'."
-msgstr "A chave do arquivo PEM não tinha a marca de finalização '%s'."
+msgstr "A chave do arquivo PEM não tinha a marca de finalização \"%s\"."
#: ../libnm-util/crypto.c:130
#, c-format
@@ -1270,7 +972,8 @@ msgstr "Não foi possível determinar o tipo da chave privada."
#: ../libnm-util/crypto.c:530
#, c-format
msgid "Not enough memory to store decrypted private key."
-msgstr "Memória insuficiente para armazenar a chave privada de descriptografia."
+msgstr ""
+"Memória insuficiente para armazenar a chave privada de descriptografia."
#: ../libnm-util/crypto_gnutls.c:49
msgid "Failed to initialize the crypto engine."
@@ -1284,7 +987,7 @@ msgstr "Falha ao inicializar o motor MD5: %s / %s."
#: ../libnm-util/crypto_gnutls.c:156
#, c-format
msgid "Invalid IV length (must be at least %zd)."
-msgstr "Comprimento IV inválido (deve ter ao menos %zd)."
+msgstr "Tamanho do IV inválido (tem que ser pelo menos %zd)."
#: ../libnm-util/crypto_gnutls.c:165 ../libnm-util/crypto_nss.c:188
#, c-format
@@ -1314,7 +1017,9 @@ msgstr "Falha ao descriptografar a chave privada: %s / %s."
#: ../libnm-util/crypto_gnutls.c:210 ../libnm-util/crypto_nss.c:267
#, c-format
msgid "Failed to decrypt the private key: unexpected padding length."
-msgstr "Falha ao descriptografar a chave privada: comprimento da proteção inesperado."
+msgstr ""
+"Falha ao descriptografar a chave privada: comprimento de preenchimento não "
+"esperado."
#: ../libnm-util/crypto_gnutls.c:221 ../libnm-util/crypto_nss.c:278
#, c-format
@@ -1329,22 +1034,22 @@ msgstr "Não foi possível alocar memória para criptografia."
#: ../libnm-util/crypto_gnutls.c:294
#, c-format
msgid "Failed to initialize the encryption cipher context: %s / %s."
-msgstr "Falha ao inicializar o contexto da cifra de descriptografia: %s / %s. "
+msgstr "Falha ao inicializar o contexto da cifra de criptografia: %s / %s."
#: ../libnm-util/crypto_gnutls.c:303
#, c-format
msgid "Failed to set symmetric key for encryption: %s / %s."
-msgstr "Falha ao definir chave simétrica para descriptografia: %s / %s. "
+msgstr "Falha ao definir chave simétrica para criptografia: %s / %s."
#: ../libnm-util/crypto_gnutls.c:313
#, c-format
msgid "Failed to set IV for encryption: %s / %s."
-msgstr "Falha ao definir IV para descriptografia: %s / %s. "
+msgstr "Falha ao definir IV para criptografia: %s / %s."
#: ../libnm-util/crypto_gnutls.c:322
#, c-format
msgid "Failed to encrypt the data: %s / %s."
-msgstr "Falha ao descriptografar a chave privada: %s / %s. "
+msgstr "Falha ao criptografar a chave privada: %s / %s."
#: ../libnm-util/crypto_gnutls.c:362
#, c-format
@@ -1384,7 +1089,7 @@ msgstr "Falha ao inicializar o contexto MD5: %d."
#: ../libnm-util/crypto_nss.c:179
#, c-format
msgid "Invalid IV length (must be at least %d)."
-msgstr "Comprimento IV inválido (deve ter ao menos %d)."
+msgstr "Tamanho inválido do IV (tem que ser pelo menos %d)."
#: ../libnm-util/crypto_nss.c:196
#, c-format
@@ -1416,7 +1121,7 @@ msgstr "Falha ao descriptografar a chave privada: %d."
msgid "Failed to decrypt the private key: decrypted data too large."
msgstr ""
"Falha ao descriptografar a chave privada: dados descriptografados muito "
-"grandes."
+"compridos."
#: ../libnm-util/crypto_nss.c:256
#, c-format
@@ -1426,7 +1131,7 @@ msgstr "Falha ao finalizar a descriptografia da chave privada: %d."
#: ../libnm-util/crypto_nss.c:364
#, c-format
msgid "Failed to initialize the encryption cipher slot."
-msgstr "Falha ao inicializar o espaço de cifra de criptografia. "
+msgstr "Falha ao inicializar o espaço de cifra de criptografia."
#: ../libnm-util/crypto_nss.c:372
#, c-format
@@ -1446,12 +1151,12 @@ msgstr "Falha ao inicializar o contexto de criptografia."
#: ../libnm-util/crypto_nss.c:396
#, c-format
msgid "Failed to encrypt: %d."
-msgstr "Falha ao criptografar: %d."
+msgstr "Falha ao criptografar a chave privada: %d."
#: ../libnm-util/crypto_nss.c:404
#, c-format
msgid "Unexpected amount of data after encrypting."
-msgstr "Quantia inesperada de dados após criptografia."
+msgstr "Quantidade de dados inesperados depois da criptografia."
#: ../libnm-util/crypto_nss.c:447
#, c-format
@@ -1482,31 +1187,31 @@ msgstr "Não foi possível verificar o arquivo PKCS#12: %d"
msgid "Could not generate random data."
msgstr "Não foi possível gerar dados aleatórios."
-#: ../libnm-util/nm-utils.c:1925
+#: ../libnm-util/nm-utils.c:1924
#, c-format
msgid "Not enough memory to make encryption key."
-msgstr "Memória insuficiente para criptografar a chave."
+msgstr "Memória insuficiente para criar a chave de criptografia."
-#: ../libnm-util/nm-utils.c:2035
+#: ../libnm-util/nm-utils.c:2034
msgid "Could not allocate memory for PEM file creation."
-msgstr "Não foi possível alocar memória criar arquivo PEM."
+msgstr "Não foi possível alocar memória para criação do arquivo PEM."
-#: ../libnm-util/nm-utils.c:2047
+#: ../libnm-util/nm-utils.c:2046
#, c-format
msgid "Could not allocate memory for writing IV to PEM file."
msgstr "Não foi possível alocar memória para gravar IV no arquivo PEM."
-#: ../libnm-util/nm-utils.c:2059
+#: ../libnm-util/nm-utils.c:2058
#, c-format
msgid "Could not allocate memory for writing encrypted key to PEM file."
msgstr ""
-"Não foi possível alocar memória para gravar chave criptografada no arquivo "
+"Não foi possível alocar memória para gravar a chave criptografada no arquivo "
"PEM."
-#: ../libnm-util/nm-utils.c:2078
+#: ../libnm-util/nm-utils.c:2077
#, c-format
msgid "Could not allocate memory for PEM file data."
-msgstr "Nâo foi possível alocar memória para daods de arquivo PEM."
+msgstr "Não foi possível alocar memória para os dados do arquivo PEM."
#: ../src/nm-netlink-monitor.c:100 ../src/nm-netlink-monitor.c:231
#: ../src/nm-netlink-monitor.c:653
@@ -1521,12 +1226,15 @@ msgstr "ocorreu um erro ao esperar pelos dados da conexão"
#: ../src/nm-netlink-monitor.c:254
#, c-format
msgid "unable to connect to netlink for monitoring link status: %s"
-msgstr "não foi possível conectar ao netlink para monitoração de status do link: %s"
+msgstr ""
+"não foi possível conectar ao netlink para monitoração de status do link: %s"
#: ../src/nm-netlink-monitor.c:265
#, c-format
msgid "unable to enable netlink handle credential passing: %s"
-msgstr "não foi possível ativar o netlink para manipular a passagem da credencial: %s"
+msgstr ""
+"não foi possível habilitar o manipulador de credencial de passagem do "
+"netlink: %s"
#: ../src/nm-netlink-monitor.c:291 ../src/nm-netlink-monitor.c:353
#, c-format
@@ -1545,7 +1253,7 @@ msgstr ""
#: ../src/nm-netlink-monitor.c:502
#, c-format
msgid "unable to join netlink group: %s"
-msgstr "não foi possível associar-se ao grupo do netlink : %s"
+msgstr "não foi possível associar-se ao grupo do netlink: %s"
#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642
#, c-format
@@ -1555,7 +1263,8 @@ msgstr "erro ao atualizar o cache de link: %s"
#: ../src/main.c:502
#, c-format
msgid "Invalid option. Please use --help to see a list of valid options.\n"
-msgstr "Opção inválida. Por favor, use --help para ver uma lista de opções válidas.\n"
+msgstr ""
+"Opção inválida. Por favor, use --help para ver uma lista de opções válidas.\n"
#: ../src/main.c:562
#, c-format
@@ -1577,38 +1286,38 @@ msgstr ""
#: ../src/dhcp-manager/nm-dhcp-manager.c:279
msgid "no usable DHCP client could be found."
-msgstr "Não foi encontrado nenhum cliente DHCP usável."
+msgstr "nenhum cliente DHCP utilizável pôde ser encontrado."
#: ../src/dhcp-manager/nm-dhcp-manager.c:288
msgid "'dhclient' could be found."
-msgstr "'dhclient' não pôde ser encontrado."
+msgstr "\"dhclient\" não pôde ser encontrado."
#: ../src/dhcp-manager/nm-dhcp-manager.c:298
msgid "'dhcpcd' could be found."
-msgstr "Não foi possível encontrar 'dhcpcd'"
+msgstr "\"dhcpd\" não pôde ser encontrado."
#: ../src/dhcp-manager/nm-dhcp-manager.c:306
#, c-format
msgid "unsupported DHCP client '%s'"
-msgstr "Cliente DHCP sem suporte '%s'"
+msgstr "cliente DHCP \"%s\" não suportado"
#: ../src/logging/nm-logging.c:146
#, c-format
msgid "Unknown log level '%s'"
-msgstr "Nível de log desconhecido '%s'"
+msgstr "Nível de registro \"%s\" desconhecido"
#: ../src/logging/nm-logging.c:171
#, c-format
msgid "Unknown log domain '%s'"
-msgstr "Domínio de log desconhecido '%s'"
+msgstr "Domínio de registro \"%s\" desconhecido"
-#: ../src/named-manager/nm-named-manager.c:343
+#: ../src/dns-manager/nm-dns-manager.c:343
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr ""
"NOTA: o resolvedor da libc não tem suporte a mais do que 3 servidores de "
"nomes."
-#: ../src/named-manager/nm-named-manager.c:345
+#: ../src/dns-manager/nm-dns-manager.c:345
msgid "The nameservers listed below may not be recognized."
msgstr "Os servidores de nomes listados abaixo podem não ser reconhecidos."
@@ -1617,21 +1326,21 @@ msgstr "Os servidores de nomes listados abaixo podem não ser reconhecidos."
msgid "Auto %s"
msgstr "Auto %s"
-#: ../system-settings/plugins/ifcfg-rh/reader.c:3256
+#: ../system-settings/plugins/ifcfg-rh/reader.c:3254
msgid "System"
msgstr "Sistema"
#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
msgid "Connection sharing via a protected WiFi network"
-msgstr "Compartilhamento de conexão via rede WiFi protegida"
+msgstr "Compartilhamento de conexão via rede sem fio protegida"
#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
msgid "Connection sharing via an open WiFi network"
-msgstr "Compartilhamento de conexão via rede de WiFi aberta"
+msgstr "Compartilhamento de conexão via rede sem fio aberta"
#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
msgid "Modify persistent system hostname"
-msgstr "Modificar hostname do sistema persistente"
+msgstr "Modificar máquina de sistema persistente"
#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
msgid "Modify system connections"
@@ -1639,21 +1348,21 @@ msgstr "Modificar conexões de sistema"
#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
msgid "System policy prevents modification of system settings"
-msgstr "Política de sistema evita modificação de configuração de sistema"
+msgstr "Políticas de sistema previnem modificação das configurações do sistema"
#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
msgid "System policy prevents modification of the persistent system hostname"
-msgstr "Política de sistema evita modificação de hostname de sistema persistente"
+msgstr ""
+"Políticas de sistema previnem modificação da máquina persistente 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 ""
-"Política de Sistema evita compartilhamento de conexões via rede de WiFi "
-"protegida."
+"Políticas de sistema previnem compartilhamento de conexões através de uma "
+"rede sem fio protegida"
#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
msgid "System policy prevents sharing connections via an open WiFi network"
msgstr ""
-"Política de Sistema evita compartilhamento de conexões via rede de WiFi "
-"aberta"
-
+"Políticas de sistema previnem compartilhamento de conexões através de uma "
+"rede sem fio aberta"
diff --git a/po/ru.po b/po/ru.po
index d9df5d3f03..2595ab3c6b 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -10,8 +10,8 @@ msgstr ""
"Project-Id-Version: ru\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-05-06 14:31+0530\n"
-"PO-Revision-Date: 2010-05-07 14:56+1000\n"
-"Last-Translator: Yulia <ypoyarko@redhat.com>\n"
+"PO-Revision-Date: 2010-05-19 12:20+1000\n"
+"Last-Translator: \n"
"Language-Team: Russian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -490,7 +490,7 @@ msgstr "СВОЙСТВРПРОВОДÐОГО СОЕДИÐЕÐИЯ"
#. 4
#: ../cli/src/devices.c:76
msgid "IP4-SETTINGS"
-msgstr "ÐÐСТРОЙКИ IP4"
+msgstr "ПÐРÐМЕТРЫ IP4"
#. 5
#: ../cli/src/devices.c:77
@@ -1594,13 +1594,13 @@ msgstr "ÐеизвеÑтный уровень Ð¶ÑƒÑ€Ð½Ð°Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Â«%sÂ
msgid "Unknown log domain '%s'"
msgstr "ÐеизвеÑтный домен Ð¶ÑƒÑ€Ð½Ð°Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Â«%s»"
-#: ../src/named-manager/nm-named-manager.c:343
+#: ../src/dns-manager/nm-dns-manager.c:343
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr ""
"Ð’ÐИМÐÐИЕ: преобразователь имён glibc не поддерживает более трёх Ñерверов "
"имён."
-#: ../src/named-manager/nm-named-manager.c:345
+#: ../src/dns-manager/nm-dns-manager.c:345
msgid "The nameservers listed below may not be recognized."
msgstr "ÐижеперечиÑленные Ñервера могут быть пропущены."
diff --git a/po/sl.po b/po/sl.po
index 425fd752e2..cb37ee828a 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -1,16 +1,18 @@
-# Slovenian translation of NetworkManager.
+# -*- mode:po; coding:utf-8; -*- Slovenian message catalogue for NetworkManager.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the NetworkManager package.
+#
# Matic Žgur <mr.zgur@gmail.com>, 2007.
-# Andrej ŽnidarÅ¡iÄ <andrej.znidarsic@gmail.com>, 2009.
+# Andrej ŽnidarÅ¡iÄ <andrej.znidarsic@gmail.com>, 2009 - 2010.
+# Matej UrbanÄiÄ <matej.urban@gmail.com>, 2010.
#
msgid ""
msgstr ""
-"Project-Id-Version: NetworkManager\n"
+"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: 2009-09-29 03:25+0000\n"
-"PO-Revision-Date: 2009-12-17 07:10+0100\n"
-"Last-Translator: Andrej ŽnidarÅ¡iÄ <andrej.znidarsic@gmail.com>\n"
+"POT-Creation-Date: 2010-09-18 15:24+0000\n"
+"PO-Revision-Date: 2010-09-18 20:27+0100\n"
+"Last-Translator: Matej UrbanÄiÄ <mateju@svn.gnome.org>\n"
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,15 +22,1306 @@ msgstr ""
"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/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
+msgid "NAME"
+msgstr "IME"
+
+#. 0
+#: ../cli/src/connections.c:61
+#: ../cli/src/connections.c:76
+msgid "UUID"
+msgstr "UUID"
+
+#. 1
+#: ../cli/src/connections.c:62
+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
+msgid "DEFAULT"
+msgstr "PRIVZETO"
+
+#. 4
+#: ../cli/src/connections.c:65
+msgid "DBUS-SERVICE"
+msgstr "STORITEV-DBUS"
+
+#. 5
+#: ../cli/src/connections.c:66
+msgid "SPEC-OBJECT"
+msgstr "SPEC-PREDMET"
+
+#. 6
+#: ../cli/src/connections.c:67
+msgid "VPN"
+msgstr "VPN"
+
+#. 1
+#. 0
+#. 1
+#: ../cli/src/connections.c:77
+#: ../cli/src/devices.c:62
+#: ../cli/src/devices.c:90
+msgid "TYPE"
+msgstr "VRSTA"
+
+#. 3
+#: ../cli/src/connections.c:79
+msgid "TIMESTAMP"
+msgstr "ČASOVNI ŽIG"
+
+#. 4
+#: ../cli/src/connections.c:80
+msgid "TIMESTAMP-REAL"
+msgstr "REAL-ČASOVNI ŽIG"
+
+#. 5
+#: ../cli/src/connections.c:81
+msgid "AUTOCONNECT"
+msgstr "SAMODEJNO POVEŽI"
+
+#. 6
+#: ../cli/src/connections.c:82
+msgid "READONLY"
+msgstr "SAMO ZA BRANJE"
+
+#: ../cli/src/connections.c:158
+#, c-format
+msgid ""
+"Usage: nmcli con { COMMAND | help }\n"
+" COMMAND := { list | status | up | down }\n"
+"\n"
+" list [id <id> | uuid <id> | system | user]\n"
+" status\n"
+" up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout <timeout>]\n"
+" down id <id> | uuid <id>\n"
+msgstr ""
+"Uporaba: nmcli con { UKAZ | help }\n"
+" UKAZ := { list | status | up | down }\n"
+"\n"
+" list [id <id> | uuid <id> | system | user]\n"
+" status\n"
+" up id <id> | uuid <id> [iface <vmesnik>] [ap <strojni-naslov>] [--nowait] [--timeout <zakasnitev>]\n"
+" down id <id> | uuid <id>\n"
+
+#: ../cli/src/connections.c:198
+#: ../cli/src/connections.c:537
+#, c-format
+msgid "Error: 'con list': %s"
+msgstr "Napaka: 'con list': %s"
+
+#: ../cli/src/connections.c:200
+#: ../cli/src/connections.c:539
+#, c-format
+msgid "Error: 'con list': %s; allowed fields: %s"
+msgstr "Napaka: 'con list': %s; dovoljena so polja: %s"
+
+#: ../cli/src/connections.c:208
+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
+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/settings.c:1148
+#: ../cli/src/settings.c:1149
+#: ../cli/src/settings.c:1224
+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/settings.c:1148
+#: ../cli/src/settings.c:1149
+#: ../cli/src/settings.c:1224
+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
+#, c-format
+msgid "Error: %s argument is missing."
+msgstr "Napaka: manjka argument %s."
+
+#: ../cli/src/connections.c:488
+#, 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
+#, c-format
+msgid "Unknown parameter: %s\n"
+msgstr "Neznan parameter: %s\n"
+
+#: ../cli/src/connections.c:529
+#, 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
+#, c-format
+msgid "Error: %s."
+msgstr "Napaka: %s."
+
+#: ../cli/src/connections.c:650
+#, c-format
+msgid "Error: 'con status': %s"
+msgstr "Napaka: 'con status': %s"
+
+#: ../cli/src/connections.c:652
+#, c-format
+msgid "Error: 'con status': %s; allowed fields: %s"
+msgstr "Napaka: 'con status': %s; dovoljena polja: %s"
+
+#: ../cli/src/connections.c:659
+msgid "Active connections"
+msgstr "Dejavne povezave"
+
+#: ../cli/src/connections.c:1027
+#, c-format
+msgid "no active connection on device '%s'"
+msgstr "ni dejavnih povezav na napravi '%s'"
+
+#: ../cli/src/connections.c:1035
+#, c-format
+msgid "no active connection or device"
+msgstr "ni dejavne povezave ali naprave"
+
+#: ../cli/src/connections.c:1085
+#, c-format
+msgid "device '%s' not compatible with connection '%s'"
+msgstr "naprava '%s' ni združljiva s povezavo '%s'"
+
+#: ../cli/src/connections.c:1087
+#, c-format
+msgid "no device found for connection '%s'"
+msgstr "ni naprave za povezavo '%s'"
+
+#: ../cli/src/connections.c:1098
+msgid "activating"
+msgstr "zaÄenjanje"
+
+#: ../cli/src/connections.c:1100
+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
+msgid "unknown"
+msgstr "neznano"
+
+#: ../cli/src/connections.c:1112
+msgid "VPN connecting (prepare)"
+msgstr "VPN povezovanje (priprava)"
+
+#: ../cli/src/connections.c:1114
+msgid "VPN connecting (need authentication)"
+msgstr "VPN povezovanje (zahtevana je overitev)"
+
+#: ../cli/src/connections.c:1116
+msgid "VPN connecting"
+msgstr "VPN povezovanje"
+
+#: ../cli/src/connections.c:1118
+msgid "VPN connecting (getting IP configuration)"
+msgstr "VPN povezovanje (pridobivanje nastavitev IP)"
+
+#: ../cli/src/connections.c:1120
+msgid "VPN connected"
+msgstr "Povezan v VPN"
+
+#: ../cli/src/connections.c:1122
+msgid "VPN connection failed"
+msgstr "Povezava z VPN je spodletela"
+
+#: ../cli/src/connections.c:1124
+msgid "VPN disconnected"
+msgstr "Povezava z VPN je prekinjena"
+
+#: ../cli/src/connections.c:1135
+msgid "unknown reason"
+msgstr "neznan vzrok"
+
+#: ../cli/src/connections.c:1137
+msgid "none"
+msgstr "brez"
+
+#: ../cli/src/connections.c:1139
+msgid "the user was disconnected"
+msgstr "povezava z uporabnikom je prekinjena"
+
+#: ../cli/src/connections.c:1141
+msgid "the base network connection was interrupted"
+msgstr "osnovna omrežna povezava je bila prekinjena"
+
+#: ../cli/src/connections.c:1143
+msgid "the VPN service stopped unexpectedly"
+msgstr "storitev VPN je nepriÄakovano zaustavljena"
+
+#: ../cli/src/connections.c:1145
+msgid "the VPN service returned invalid configuration"
+msgstr "storitev VPN je vrnila neveljavne nastavitve"
+
+#: ../cli/src/connections.c:1147
+msgid "the connection attempt timed out"
+msgstr "poskus povezave je Äasovno potekel"
+
+#: ../cli/src/connections.c:1149
+msgid "the VPN service did not start in time"
+msgstr "storitev VPN se ni pravoÄasno zaÄela"
+
+#: ../cli/src/connections.c:1151
+msgid "the VPN service failed to start"
+msgstr "storitev VPN ni uspeÅ¡no zaÄeta"
+
+#: ../cli/src/connections.c:1153
+msgid "no valid VPN secrets"
+msgstr "ni veljavnih VPN skrivnosti"
+
+#: ../cli/src/connections.c:1155
+msgid "invalid VPN secrets"
+msgstr "neveljavne VPN skrivnosti"
+
+#: ../cli/src/connections.c:1157
+msgid "the connection was removed"
+msgstr "povezava je odstranjena"
+
+#: ../cli/src/connections.c:1171
+#, c-format
+msgid "state: %s\n"
+msgstr "stanje: %s\n"
+
+#: ../cli/src/connections.c:1174
+#: ../cli/src/connections.c:1200
+#, c-format
+msgid "Connection activated\n"
+msgstr "Povezava je omogoÄena\n"
+
+#: ../cli/src/connections.c:1177
+#, c-format
+msgid "Error: Connection activation failed."
+msgstr "Napaka: zaÄenjanje povezave ni uspelo."
+
+#: ../cli/src/connections.c:1196
+#, c-format
+msgid "state: %s (%d)\n"
+msgstr "stanje: %s (%d)\n"
+
+#: ../cli/src/connections.c:1206
+#, 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
+#, c-format
+msgid "Error: Timeout %d sec expired."
+msgstr "Napaka: Äasovna omejitev %d sekund je potekla."
+
+#: ../cli/src/connections.c:1266
+#, 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
+#, c-format
+msgid "Active connection state: %s\n"
+msgstr "Stanje dejavne povezave: %s\n"
+
+#: ../cli/src/connections.c:1290
+#, c-format
+msgid "Active connection path: %s\n"
+msgstr "Pot dejavne povezave: %s\n"
+
+#: ../cli/src/connections.c:1344
+#: ../cli/src/connections.c:1465
+#, c-format
+msgid "Error: Unknown connection: %s."
+msgstr "Napaka: neznana povezava: %s."
+
+#: ../cli/src/connections.c:1379
+#: ../cli/src/devices.c:980
+#, 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
+#, c-format
+msgid "Error: id or uuid has to be specified."
+msgstr "Napaka: podatek id ali uuid ni naveden."
+
+#: ../cli/src/connections.c:1412
+#, c-format
+msgid "Error: No suitable device found: %s."
+msgstr "Napaka: ni mogoÄe najti ustrezne naprave: %s."
+
+#: ../cli/src/connections.c:1414
+#, c-format
+msgid "Error: No suitable device found."
+msgstr "Napaka: ni mogoÄe najti ustrezne naprave."
+
+#: ../cli/src/connections.c:1509
+#, c-format
+msgid "Warning: Connection not active\n"
+msgstr "Opozorilo: povezava ni dejavna\n"
+
+#: ../cli/src/connections.c:1566
+#, c-format
+msgid "Error: 'con' command '%s' is not valid."
+msgstr "Napaka: ukaz 'con' '%s' ni veljaven."
+
+#: ../cli/src/connections.c:1602
+#, c-format
+msgid "Error: could not connect to D-Bus."
+msgstr "Napaka: povezava z D-Bus ni mogoÄa."
+
+#: ../cli/src/connections.c:1609
+#, 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
+#, c-format
+msgid "Error: Can't obtain connections: settings services are not running."
+msgstr "Napaka: ni mogoÄe pridobiti povezave: storitve nastavitev niso zagnane."
+
+#. 0
+#. 9
+#: ../cli/src/devices.c:61
+#: ../cli/src/devices.c:89
+#: ../cli/src/devices.c:184
+msgid "DEVICE"
+msgstr "NAPRAVA"
+
+#. 1
+#. 4
+#. 0
+#: ../cli/src/devices.c:63
+#: ../cli/src/devices.c:93
+#: ../cli/src/network-manager.c:36
+msgid "STATE"
+msgstr "STANJE"
+
+#: ../cli/src/devices.c:72
+msgid "GENERAL"
+msgstr "SPLOÅ NO"
+
+#. 0
+#: ../cli/src/devices.c:73
+msgid "CAPABILITIES"
+msgstr "ZMOŽNOSTI"
+
+#. 1
+#: ../cli/src/devices.c:74
+msgid "WIFI-PROPERTIES"
+msgstr "WIFI-LASTNOSTI"
+
+#. 2
+#: ../cli/src/devices.c:75
+msgid "AP"
+msgstr "AP"
+
+#. 3
+#: ../cli/src/devices.c:76
+msgid "WIRED-PROPERTIES"
+msgstr "LASTNOSTI ŽIČNE POVEZAVE"
+
+#. 4
+#: ../cli/src/devices.c:77
+msgid "IP4-SETTINGS"
+msgstr "IP4-NASTAVITVE"
+
+#. 5
+#: ../cli/src/devices.c:78
+msgid "IP4-DNS"
+msgstr "IP4-DNS"
+
+#. 6
+#: ../cli/src/devices.c:79
+msgid "IP6-SETTINGS"
+msgstr "IP6-NASTAVITVE"
+
+#. 7
+#: ../cli/src/devices.c:80
+msgid "IP6-DNS"
+msgstr "IP6-DNS"
+
+#. 2
+#: ../cli/src/devices.c:91
+msgid "DRIVER"
+msgstr "GONILNIK"
+
+#. 3
+#: ../cli/src/devices.c:92
+msgid "HWADDR"
+msgstr "HWADDR"
+
+#. 0
+#: ../cli/src/devices.c:102
+msgid "CARRIER-DETECT"
+msgstr "ZAZNAVA-OPERATERJA"
+
+#. 1
+#: ../cli/src/devices.c:103
+msgid "SPEED"
+msgstr "HITROST"
+
+#. 0
+#: ../cli/src/devices.c:112
+msgid "CARRIER"
+msgstr "OPERATER"
+
+#. 0
+#: ../cli/src/devices.c:122
+msgid "WEP"
+msgstr "WEP"
+
+#. 1
+#: ../cli/src/devices.c:123
+msgid "WPA"
+msgstr "WPA"
+
+#. 2
+#: ../cli/src/devices.c:124
+msgid "WPA2"
+msgstr "WPA2"
+
+#. 3
+#: ../cli/src/devices.c:125
+msgid "TKIP"
+msgstr "TKIP"
+
+#. 4
+#: ../cli/src/devices.c:126
+msgid "CCMP"
+msgstr "CCMP"
+
+#. 0
+#: ../cli/src/devices.c:135
+#: ../cli/src/devices.c:146
+msgid "ADDRESS"
+msgstr "NASLOV"
+
+#. 1
+#: ../cli/src/devices.c:136
+#: ../cli/src/devices.c:147
+msgid "PREFIX"
+msgstr "PREDPONA"
+
+#. 2
+#: ../cli/src/devices.c:137
+#: ../cli/src/devices.c:148
+msgid "GATEWAY"
+msgstr "PREHOD"
+
+#. 0
+#: ../cli/src/devices.c:157
+#: ../cli/src/devices.c:166
+msgid "DNS"
+msgstr "DNS"
+
+#. 0
+#: ../cli/src/devices.c:175
+msgid "SSID"
+msgstr "SSID"
+
+#. 1
+#: ../cli/src/devices.c:176
+msgid "BSSID"
+msgstr "BSSID"
+
+#. 2
+#: ../cli/src/devices.c:177
+msgid "MODE"
+msgstr "NAÄŒIN"
+
+#. 3
+#: ../cli/src/devices.c:178
+msgid "FREQ"
+msgstr "FREKVENCA"
+
+#. 4
+#: ../cli/src/devices.c:179
+msgid "RATE"
+msgstr "HITROST"
+
+#. 5
+#: ../cli/src/devices.c:180
+msgid "SIGNAL"
+msgstr "SIGNAL"
+
+#. 6
+#: ../cli/src/devices.c:181
+msgid "SECURITY"
+msgstr "VARNOST"
+
+#. 7
+#: ../cli/src/devices.c:182
+msgid "WPA-FLAGS"
+msgstr "WPA-ZASTAVICE"
+
+#. 8
+#: ../cli/src/devices.c:183
+msgid "RSN-FLAGS"
+msgstr "RSN-ZASTAVICE"
+
+#. 10
+#: ../cli/src/devices.c:185
+msgid "ACTIVE"
+msgstr "DEJAVNO"
+
+#: ../cli/src/devices.c:208
+#, c-format
+msgid ""
+"Usage: nmcli dev { COMMAND | help }\n"
+"\n"
+" COMMAND := { status | list | disconnect | wifi }\n"
+"\n"
+" status\n"
+" list [iface <iface>]\n"
+" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
+" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+"\n"
+msgstr ""
+"Uporaba: nmcli dev { UKAZ | help }\n"
+"\n"
+"UKAZ := { status | list | disconnect | wifi }\n"
+"\n"
+"status\n"
+"list [iface <iface>]\n"
+"disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
+"wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+"\n"
+
+#: ../cli/src/devices.c:228
+msgid "unmanaged"
+msgstr "neupravljano"
+
+#: ../cli/src/devices.c:230
+msgid "unavailable"
+msgstr "ni razpoložljivo"
+
+#: ../cli/src/devices.c:232
+#: ../cli/src/network-manager.c:91
+msgid "disconnected"
+msgstr "povezava je prekinjena"
+
+#: ../cli/src/devices.c:234
+msgid "connecting (prepare)"
+msgstr "povezovanje (priprava)"
+
+#: ../cli/src/devices.c:236
+msgid "connecting (configuring)"
+msgstr "povezovanje (nastavljanje)"
+
+#: ../cli/src/devices.c:238
+msgid "connecting (need authentication)"
+msgstr "povezovanje (zahteva overitev)"
+
+#: ../cli/src/devices.c:240
+msgid "connecting (getting IP configuration)"
+msgstr "povezovanje (pridobivanje nastavitev IP)"
+
+#: ../cli/src/devices.c:242
+#: ../cli/src/network-manager.c:89
+msgid "connected"
+msgstr "povezano"
+
+#: ../cli/src/devices.c:244
+msgid "connection failed"
+msgstr "povezava je spodletela"
+
+#: ../cli/src/devices.c:267
+#: ../cli/src/devices.c:424
+msgid "Unknown"
+msgstr "Neznano"
+
+#: ../cli/src/devices.c:299
+msgid "(none)"
+msgstr "(brez)"
+
+#: ../cli/src/devices.c:324
+#, c-format
+msgid "%s: error converting IP4 address 0x%X"
+msgstr "%s: napaka med pretvarjanjem naslova IP4 0x%X"
+
+#: ../cli/src/devices.c:393
+#, c-format
+msgid "%u MHz"
+msgstr "%u MHz"
+
+#: ../cli/src/devices.c:394
+#, c-format
+msgid "%u MB/s"
+msgstr "%u MB/s"
+
+#: ../cli/src/devices.c:403
+msgid "Encrypted: "
+msgstr "Å ifrirano: "
+
+#: ../cli/src/devices.c:408
+msgid "WEP "
+msgstr "WEP "
+
+#: ../cli/src/devices.c:410
+msgid "WPA "
+msgstr "WPA "
+
+#: ../cli/src/devices.c:412
+msgid "WPA2 "
+msgstr "WPA2 "
+
+#: ../cli/src/devices.c:415
+msgid "Enterprise "
+msgstr "Podjetniški "
+
+#: ../cli/src/devices.c:424
+msgid "Ad-Hoc"
+msgstr "Ad-Hoc"
+
+#: ../cli/src/devices.c:424
+msgid "Infrastructure"
+msgstr "infrastruktura"
+
+#: ../cli/src/devices.c:486
+#, c-format
+msgid "Error: 'dev list': %s"
+msgstr "Napaka: 'dev list': %s"
+
+#: ../cli/src/devices.c:488
+#, c-format
+msgid "Error: 'dev list': %s; allowed fields: %s"
+msgstr "Napaka: 'dev list': %s; dovoljena polja: %s"
+
+#: ../cli/src/devices.c:497
+msgid "Device details"
+msgstr "Podrobnosti naprave"
+
+#: ../cli/src/devices.c:527
+#: ../cli/src/devices.c:925
+msgid "(unknown)"
+msgstr "(neznano)"
+
+#: ../cli/src/devices.c:528
+msgid "unknown)"
+msgstr "neznano)"
+
+#: ../cli/src/devices.c:554
+#, c-format
+msgid "%u Mb/s"
+msgstr "%u Mb/s"
+
+#. Print header
+#. "WIRED-PROPERTIES"
+#: ../cli/src/devices.c:627
+msgid "on"
+msgstr "omogoÄeno"
+
+#: ../cli/src/devices.c:627
+msgid "off"
+msgstr "onemogoÄeno"
+
+#: ../cli/src/devices.c:808
+#, c-format
+msgid "Error: 'dev status': %s"
+msgstr "Napaka: 'dev status': %s"
+
+#: ../cli/src/devices.c:810
+#, c-format
+msgid "Error: 'dev status': %s; allowed fields: %s"
+msgstr "Napaka: 'dev status': %s; dovoljena polja: %s"
+
+#: ../cli/src/devices.c:817
+msgid "Status of devices"
+msgstr "Stanje naprav"
+
+#: ../cli/src/devices.c:845
+#, 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
+#, c-format
+msgid "Error: Device '%s' not found."
+msgstr "Napaka: naprave '%s' ni mogoÄe najti"
+
+#: ../cli/src/devices.c:897
+#, c-format
+msgid "Success: Device '%s' successfully disconnected."
+msgstr "Obvestilo: povezava naprave '%s' je uspešno prekinjena."
+
+#: ../cli/src/devices.c:922
+#, 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
+#, c-format
+msgid "Device state: %d (%s)\n"
+msgstr "Stanje naprave: %d (%s)\n"
+
+#: ../cli/src/devices.c:994
+#, c-format
+msgid "Error: iface has to be specified."
+msgstr "Napaka: iface nastavitev mora doloÄena."
+
+#: ../cli/src/devices.c:1112
+#, c-format
+msgid "Error: 'dev wifi': %s"
+msgstr "Napaka: 'dev wifi': %s"
+
+#: ../cli/src/devices.c:1114
+#, c-format
+msgid "Error: 'dev wifi': %s; allowed fields: %s"
+msgstr "Napaka: 'dev wifi': %s; dovoljena polja: %s"
+
+#: ../cli/src/devices.c:1121
+msgid "WiFi scan list"
+msgstr "WiFi seznam preiskovanja"
+
+#: ../cli/src/devices.c:1156
+#: ../cli/src/devices.c:1210
+#, 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
+#, c-format
+msgid "Error: Device '%s' is not a WiFi device."
+msgstr "Napaka: naprava '%s' ni veljavna WiFi naprava."
+
+#: ../cli/src/devices.c:1237
+#, c-format
+msgid "Error: 'dev wifi' command '%s' is not valid."
+msgstr "Napaka: 'dev wifi' ukaz '%s' ni veljaven."
+
+#: ../cli/src/devices.c:1284
+#, c-format
+msgid "Error: 'dev' command '%s' is not valid."
+msgstr "Napaka: 'dev' ukaz '%s' ni veljaven."
+
+#: ../cli/src/network-manager.c:35
+msgid "RUNNING"
+msgstr "V TEKU"
+
+#. 1
+#: ../cli/src/network-manager.c:37
+msgid "NET-ENABLED"
+msgstr "NET-OMOGOÄŒENO"
+
+#. 2
+#: ../cli/src/network-manager.c:38
+msgid "WIFI-HARDWARE"
+msgstr "WIFI-STROJNA OPREMA"
+
+#. 3
+#: ../cli/src/network-manager.c:39
+msgid "WIFI"
+msgstr "WIFI"
+
+#. 4
+#: ../cli/src/network-manager.c:40
+msgid "WWAN-HARDWARE"
+msgstr "WWAN-STROJNA OPREMA"
+
+#. 5
+#: ../cli/src/network-manager.c:41
+msgid "WWAN"
+msgstr "WWAN"
+
+#: ../cli/src/network-manager.c:64
+#, c-format
+msgid ""
+"Usage: nmcli nm { COMMAND | help }\n"
+"\n"
+" COMMAND := { status | enable | sleep | wifi | wwan }\n"
+"\n"
+" status\n"
+" enable [true|false]\n"
+" sleep [true|false]\n"
+" wifi [on|off]\n"
+" wwan [on|off]\n"
+"\n"
+msgstr ""
+"Uporaba: nmcli nm { UKAZ | help }\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"
+"\n"
+
+#: ../cli/src/network-manager.c:85
+msgid "asleep"
+msgstr "v mirovanju"
+
+#: ../cli/src/network-manager.c:87
+msgid "connecting"
+msgstr "povezovanje"
+
+#: ../cli/src/network-manager.c:128
+#, c-format
+msgid "Error: 'nm status': %s"
+msgstr "Napaka: 'nm status': %s"
+
+#: ../cli/src/network-manager.c:130
+#, 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
+#: ../cli/src/network-manager.c:296
+#: ../cli/src/network-manager.c:328
+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:296
+#: ../cli/src/network-manager.c:328
+msgid "disabled"
+msgstr "onemogoÄeno"
+
+#: ../cli/src/network-manager.c:152
+msgid "running"
+msgstr "v teku"
+
+#: ../cli/src/network-manager.c:152
+msgid "not running"
+msgstr "ni v teku"
+
+#: ../cli/src/network-manager.c:175
+#, 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
+#, 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
+#, 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
+#, 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
+msgid "Networking enabled"
+msgstr "Omrežje je omogoÄeno"
+
+#: ../cli/src/network-manager.c:256
+#, 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
+#, 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
+#, 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
+msgid "WiFi enabled"
+msgstr "WiFi je omogoÄen"
+
+#: ../cli/src/network-manager.c:305
+#, c-format
+msgid "Error: invalid 'wifi' parameter: '%s'."
+msgstr "Napaka: neveljaven 'wifi' parameter: '%s'."
+
+#: ../cli/src/network-manager.c:326
+msgid "WWAN enabled"
+msgstr "WWAN je omogoÄen"
+
+#: ../cli/src/network-manager.c:337
+#, c-format
+msgid "Error: invalid 'wwan' parameter: '%s'."
+msgstr "Napaka: neveljaven 'wwan' parameter: '%s'."
+
+#: ../cli/src/network-manager.c:348
+#, c-format
+msgid "Error: 'nm' command '%s' is not valid."
+msgstr "Napaka: ukaz 'nm' '%s' ni veljaven"
+
+#: ../cli/src/nmcli.c:69
+#, 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] <field1,field2,...>|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 ""
+"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] <polje1,polje2,...>|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"
+"\n"
+"PREDMET\n"
+"nm stanje programa NetworkManager\n"
+"con povezave programa NetworkManager\n"
+"dev naprave upravljane s programom NetworkManager\n"
+"\n"
+
+#: ../cli/src/nmcli.c:113
+#, 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
+#, c-format
+msgid "Error: Option '--terse' is specified the second time."
+msgstr "Napaka: možnost '--terse' je podana dvakrat."
+
+#: ../cli/src/nmcli.c:148
+#, 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
+#, c-format
+msgid "Error: Option '--pretty' is specified the second time."
+msgstr "Napaka: možnost '--pretty' je podana dvakrat."
+
+#: ../cli/src/nmcli.c:161
+#, 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
+#, 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
+#, 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
+#, c-format
+msgid "Error: fields for '%s' options are missing."
+msgstr "Napaka: polja za možnosti '%s' manjkajo."
+
+#: ../cli/src/nmcli.c:209
+#, c-format
+msgid "nmcli tool, version %s\n"
+msgstr "nmcli orodje, razliÄica %s\n"
+
+#: ../cli/src/nmcli.c:215
+#, 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
+#, 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:275
+msgid "Success"
+msgstr "UspeÅ¡no zakljuÄeno"
+
+#: ../cli/src/settings.c:411
+#, c-format
+msgid "%d (hex-ascii-key)"
+msgstr "%d (Å¡estnajstiÅ¡ki-ascii-kljuÄ)"
+
+#: ../cli/src/settings.c:413
+#, c-format
+msgid "%d (104/128-bit passphrase)"
+msgstr "%d (104/128-bitno Å¡ifrirno geslo)"
+
+#: ../cli/src/settings.c:416
+#, c-format
+msgid "%d (unknown)"
+msgstr "%d (neznano)"
+
+#: ../cli/src/settings.c:442
+msgid "0 (unknown)"
+msgstr "0 (neznano)"
+
+#: ../cli/src/settings.c:448
+msgid "any, "
+msgstr "karkoli, "
+
+#: ../cli/src/settings.c:450
+msgid "900 MHz, "
+msgstr "900 MHz, "
+
+#: ../cli/src/settings.c:452
+msgid "1800 MHz, "
+msgstr "1800 MHz, "
+
+#: ../cli/src/settings.c:454
+msgid "1900 MHz, "
+msgstr "1900 MHz, "
+
+#: ../cli/src/settings.c:456
+msgid "850 MHz, "
+msgstr "850 MHz, "
+
+#: ../cli/src/settings.c:458
+msgid "WCDMA 3GPP UMTS 2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 2100 MHz, "
+
+#: ../cli/src/settings.c:460
+msgid "WCDMA 3GPP UMTS 1800 MHz, "
+msgstr "WCDMA 3GPP UMTS 1800 MHz, "
+
+#: ../cli/src/settings.c:462
+msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
+
+#: ../cli/src/settings.c:464
+msgid "WCDMA 3GPP UMTS 800 MHz, "
+msgstr "WCDMA 3GPP UMTS 800 MHz, "
+
+#: ../cli/src/settings.c:466
+msgid "WCDMA 3GPP UMTS 850 MHz, "
+msgstr "WCDMA 3GPP UMTS 850 MHz, "
+
+#: ../cli/src/settings.c:468
+msgid "WCDMA 3GPP UMTS 900 MHz, "
+msgstr "WCDMA 3GPP UMTS 900 MHz, "
+
+#: ../cli/src/settings.c:470
+msgid "WCDMA 3GPP UMTS 1700 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700 MHz, "
+
+#: ../cli/src/settings.c:554
+#: ../cli/src/settings.c:721
+msgid "auto"
+msgstr "samodejno"
+
+#: ../cli/src/settings.c:716
+#: ../cli/src/settings.c:719
+#: ../cli/src/settings.c:720
+#: ../cli/src/utils.c:172
+msgid "not set"
+msgstr "ni nastavljeno"
+
+#: ../cli/src/utils.c:124
+#, c-format
+msgid "field '%s' has to be alone"
+msgstr "polje '%s' mora biti samostojno."
+
+#: ../cli/src/utils.c:127
+#, c-format
+msgid "invalid field '%s'"
+msgstr "neveljavno polje '%s'"
+
+#: ../cli/src/utils.c:146
+#, c-format
+msgid "Option '--terse' requires specifying '--fields'"
+msgstr "Možnost '--terse' zahteva podan argument '--fields'"
+
+#: ../cli/src/utils.c:150
+#, 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
#, c-format
msgid "PEM key file had no end tag '%s'."
-msgstr "KljuÄna datoteka PEM nima konÄne oznake '%s'."
+msgstr "Datoteka kljuÄa PEM nima konÄne oznake '%s'."
#: ../libnm-util/crypto.c:130
#, c-format
msgid "Doesn't look like a PEM private key file."
-msgstr "Ni videti kot PEM zasebna kljuÄna datoteka."
+msgstr "Datoteka ni videti kot PEM datoteka zasebnega kljuÄa."
#: ../libnm-util/crypto.c:138
#, c-format
@@ -68,7 +1361,7 @@ msgstr "Slabo oblikovana datoteka PEM: neznana cifra zasebnega kljuÄa '%s'."
#: ../libnm-util/crypto.c:222
#, c-format
msgid "Could not decode private key."
-msgstr "Zasebnega kljuÄa ni mogoÄe dekodirati."
+msgstr "Zasebnega kljuÄa ni mogoÄe odkodirati."
#: ../libnm-util/crypto.c:267
#, c-format
@@ -78,7 +1371,7 @@ msgstr "PEM potrdilo '%s' nima konÄne oznake '%s'."
#: ../libnm-util/crypto.c:277
#, c-format
msgid "Failed to decode certificate."
-msgstr "Dekodiranje potrdila je spodletelo."
+msgstr "Odkodiranje potrdila je spodletelo."
#: ../libnm-util/crypto.c:286
#, c-format
@@ -109,7 +1402,7 @@ msgstr "IV vsebuje ne-šestnajstiške številke."
#: ../libnm-util/crypto_gnutls.c:148
#: ../libnm-util/crypto_gnutls.c:266
#: ../libnm-util/crypto_nss.c:171
-#: ../libnm-util/crypto_nss.c:335
+#: ../libnm-util/crypto_nss.c:336
#, c-format
msgid "Private key cipher '%s' was unknown."
msgstr "Cifra zasebnega kljuÄa '%s' je neznana."
@@ -127,16 +1420,16 @@ msgstr "Ni mogoÄe doloÄiti vrste zasebnega kljuÄa."
#: ../libnm-util/crypto.c:530
#, c-format
msgid "Not enough memory to store decrypted private key."
-msgstr "Ni dovolj pomnilnika za shranjevanje deÅ¡ifriranega zasebnega kljuÄa."
+msgstr "Ni dovolj pomnilnika za shranjevanje odÅ¡ifriranega zasebnega kljuÄa."
#: ../libnm-util/crypto_gnutls.c:49
msgid "Failed to initialize the crypto engine."
-msgstr "Zagon motorja Å¡ifriranja je spodletel."
+msgstr "ZaÄenjanje programnika Å¡ifriranja je spodletelo."
#: ../libnm-util/crypto_gnutls.c:93
#, c-format
msgid "Failed to initialize the MD5 engine: %s / %s."
-msgstr "Zagon motorja MD5 je spodletel: %s / %s."
+msgstr "ZaÄenjanje programnika MD5 je spodletelo: %s / %s."
#: ../libnm-util/crypto_gnutls.c:156
#, c-format
@@ -147,50 +1440,50 @@ msgstr "Neveljavna dolžina IV (mora biti vsaj %zd)"
#: ../libnm-util/crypto_nss.c:188
#, c-format
msgid "Not enough memory for decrypted key buffer."
-msgstr "Ni dovolj pomnilnika za medpomnilnik kljuÄa deÅ¡ifriranja."
+msgstr "Ni dovolj pomnilnika za medpomnilnik odÅ¡ifriranega kljuÄa."
#: ../libnm-util/crypto_gnutls.c:173
#, c-format
msgid "Failed to initialize the decryption cipher context: %s / %s."
-msgstr "Zagon vsebine cifre dešifriranje je spodletel: %s / %s."
+msgstr "ZaÄenjanje vsebine odÅ¡ifrirne cifre je spodletelo: %s / %s."
#: ../libnm-util/crypto_gnutls.c:182
#, c-format
msgid "Failed to set symmetric key for decryption: %s / %s."
-msgstr "Nastavljanje simetriÄnega kljuÄa za deÅ¡ifriranje je spodletelo: %s / %s. "
+msgstr "Nastavljanje simetriÄnega kljuÄa za odÅ¡ifriranje je spodletelo: %s / %s."
#: ../libnm-util/crypto_gnutls.c:191
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
-msgstr "Nastavljanje IV za dešifriranje je spodletelo: %s / %s."
+msgstr "Nastavljanje IV za odšifriranje je spodletelo: %s / %s."
#: ../libnm-util/crypto_gnutls.c:200
#, c-format
msgid "Failed to decrypt the private key: %s / %s."
-msgstr "DeÅ¡ifriranje zasebnega kljuÄa je spodletelo: %s / %s."
+msgstr "OdÅ¡ifriranje zasebnega kljuÄa je spodletelo: %s / %s."
#: ../libnm-util/crypto_gnutls.c:210
-#: ../libnm-util/crypto_nss.c:266
+#: ../libnm-util/crypto_nss.c:267
#, c-format
msgid "Failed to decrypt the private key: unexpected padding length."
-msgstr "DeÅ¡ifriranje zasebnega kljuÄa je spodletelo: nepriÄakovana dolžina blazinjenja."
+msgstr "OdÅ¡ifriranje zasebnega kljuÄa je spodletelo: nepriÄakovana dolžina blazinjenja."
#: ../libnm-util/crypto_gnutls.c:221
-#: ../libnm-util/crypto_nss.c:277
+#: ../libnm-util/crypto_nss.c:278
#, c-format
msgid "Failed to decrypt the private key."
-msgstr "DeÅ¡ifriranje zasebnega kljuÄa je spodletelo."
+msgstr "OdÅ¡ifriranje zasebnega kljuÄa je spodletelo."
#: ../libnm-util/crypto_gnutls.c:286
-#: ../libnm-util/crypto_nss.c:355
+#: ../libnm-util/crypto_nss.c:356
#, c-format
msgid "Could not allocate memory for encrypting."
-msgstr "Pomnilnika za Å¡ifriranje ni mogoÄe dodeliti."
+msgstr "Ni mogoÄe dodeliti pomnilnika za Å¡ifriranje."
#: ../libnm-util/crypto_gnutls.c:294
#, c-format
msgid "Failed to initialize the encryption cipher context: %s / %s."
-msgstr "Zagon vsebine Å¡ifrirne cifre je spodletel: %s / %s. "
+msgstr "ZaÄenjanje vsebine Å¡ifrirne cifre je spodletelo: %s / %s."
#: ../libnm-util/crypto_gnutls.c:303
#, c-format
@@ -215,32 +1508,32 @@ msgstr "Napaka med zaganjanjem podatkov potrdila: %s"
#: ../libnm-util/crypto_gnutls.c:384
#, c-format
msgid "Couldn't decode certificate: %s"
-msgstr "Potrdila ni mogoÄa dekodirati: %s"
+msgstr "Potrdila ni mogoÄa odkodirati: %s"
#: ../libnm-util/crypto_gnutls.c:408
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %s"
-msgstr "Dekodirnika PKCS#12 ni mogoÄe zagnati: %s"
+msgstr "Odkodirnika PKCS#12 ni mogoÄe zaÄeti: %s"
#: ../libnm-util/crypto_gnutls.c:421
#, c-format
msgid "Couldn't decode PKCS#12 file: %s"
-msgstr "Datoteke PKCS#12 ni mogoÄe dekodirati: %s"
+msgstr "Datoteke PKCS#12 ni mogoÄe odkodirati: %s"
#: ../libnm-util/crypto_gnutls.c:433
#, c-format
msgid "Couldn't verify PKCS#12 file: %s"
msgstr "Datoteke PKCS#12 ni mogoÄe preveriti: %s"
-#: ../libnm-util/crypto_nss.c:57
+#: ../libnm-util/crypto_nss.c:56
#, c-format
msgid "Failed to initialize the crypto engine: %d."
-msgstr "Zagon motorja Å¡ifriranja je spodletel: %d."
+msgstr "ZaÄenjanje programnika Å¡ifriranja je spodletelo: %d."
#: ../libnm-util/crypto_nss.c:111
#, c-format
msgid "Failed to initialize the MD5 context: %d."
-msgstr "Zagon vsebine MD5 je spodletel: %d."
+msgstr "ZaÄenjanje vsebine MD5 je spodletelo: %d."
#: ../libnm-util/crypto_nss.c:179
#, c-format
@@ -250,7 +1543,7 @@ msgstr "Neveljavna dolžina IV (mora biti vsaj %d)."
#: ../libnm-util/crypto_nss.c:196
#, c-format
msgid "Failed to initialize the decryption cipher slot."
-msgstr "Zagon polja cifre dešifriranja je spodletel."
+msgstr "ZaÄenjanje polja cifre odÅ¡ifriranja je spodletelo."
#: ../libnm-util/crypto_nss.c:206
#, c-format
@@ -260,169 +1553,249 @@ msgstr "Nastavljanje simetriÄnega kljuÄa za opis je spodletelo."
#: ../libnm-util/crypto_nss.c:216
#, c-format
msgid "Failed to set IV for decryption."
-msgstr "Nastavljanje IV za dešifriranje je spodletelo."
+msgstr "Nastavljanje IV za odšifriranje je spodletelo."
#: ../libnm-util/crypto_nss.c:224
#, c-format
msgid "Failed to initialize the decryption context."
-msgstr "Zagon vsebine dešifriranja je spodletel."
+msgstr "ZaÄenjanje vsebine odÅ¡ifriranja je spodletelo."
#: ../libnm-util/crypto_nss.c:237
#, c-format
msgid "Failed to decrypt the private key: %d."
-msgstr "DeÅ¡ifriranje zasebnega kljuÄa je spodletelo: %d."
+msgstr "OdÅ¡ifriranje zasebnega kljuÄa je spodletelo: %d."
#: ../libnm-util/crypto_nss.c:245
#, c-format
msgid "Failed to decrypt the private key: decrypted data too large."
-msgstr "DeÅ¡ifriranje zasebnega kljuÄa je spodletelo: deÅ¡ifrirani podatki so preveliki."
+msgstr "OdÅ¡ifriranje zasebnega kljuÄa je spodletelo: odÅ¡ifrirani podatki so preveliki."
#: ../libnm-util/crypto_nss.c:256
#, c-format
msgid "Failed to finalize decryption of the private key: %d."
-msgstr "KonÄanje deÅ¡ifriranja zasebnega kljuÄa je spodletelo: %d."
+msgstr "KonÄanje odÅ¡ifriranja zasebnega kljuÄa je spodletelo: %d."
-#: ../libnm-util/crypto_nss.c:363
+#: ../libnm-util/crypto_nss.c:364
#, c-format
msgid "Failed to initialize the encryption cipher slot."
-msgstr "Zagon polja cifre Å¡ifriranja je spodletel."
+msgstr "ZaÄenjanje polja cifre Å¡ifriranja je spodletelo."
-#: ../libnm-util/crypto_nss.c:371
+#: ../libnm-util/crypto_nss.c:372
#, 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:379
+#: ../libnm-util/crypto_nss.c:380
#, c-format
msgid "Failed to set IV for encryption."
msgstr "Nastavljanje IV za Å¡ifriranje je spodletelo."
-#: ../libnm-util/crypto_nss.c:387
+#: ../libnm-util/crypto_nss.c:388
#, c-format
msgid "Failed to initialize the encryption context."
-msgstr "Zaganjanje vsebine Å¡ifriranja je spodletelo."
+msgstr "ZaÄenjanje vsebine Å¡ifriranja je spodletelo."
-#: ../libnm-util/crypto_nss.c:395
+#: ../libnm-util/crypto_nss.c:396
#, c-format
msgid "Failed to encrypt: %d."
msgstr "Å ifriranje je spodletelo: %d."
-#: ../libnm-util/crypto_nss.c:403
+#: ../libnm-util/crypto_nss.c:404
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "NepriÄakovana koliÄina podatkov po Å¡ifriranju."
-#: ../libnm-util/crypto_nss.c:446
+#: ../libnm-util/crypto_nss.c:447
#, c-format
msgid "Couldn't decode certificate: %d"
-msgstr "Potrdila ni mogoÄe dekodirati: %d"
+msgstr "Potrdila ni mogoÄe odkodirati: %d"
-#: ../libnm-util/crypto_nss.c:481
+#: ../libnm-util/crypto_nss.c:482
#, c-format
msgid "Couldn't convert password to UCS2: %d"
msgstr "Gesla ni mogoÄe pretvoriti v UCS2: %d"
-#: ../libnm-util/crypto_nss.c:509
+#: ../libnm-util/crypto_nss.c:510
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %d"
-msgstr "Dekodirnika PKCS#12 ni mogoÄe zagnati: %d"
+msgstr "Dekodirnika PKCS#12 ni mogoÄe zaÄeti: %d"
-#: ../libnm-util/crypto_nss.c:518
+#: ../libnm-util/crypto_nss.c:519
#, c-format
msgid "Couldn't decode PKCS#12 file: %d"
-msgstr "Datoteke PCKS#12 ni mogoÄe dekodirati: %d"
+msgstr "Datoteke PCKS#12 ni mogoÄe odkodirati: %d"
-#: ../libnm-util/crypto_nss.c:527
+#: ../libnm-util/crypto_nss.c:528
#, c-format
msgid "Couldn't verify PKCS#12 file: %d"
msgstr "Datoteke PCKS#12 ni mogoÄe preveriti: %d"
-#: ../libnm-util/crypto_nss.c:556
+#: ../libnm-util/crypto_nss.c:557
msgid "Could not generate random data."
msgstr "NakljuÄnih podatkov ni mogoÄe ustvariti."
-#: ../libnm-util/nm-utils.c:1522
+#: ../libnm-util/nm-utils.c:1975
#, c-format
msgid "Not enough memory to make encryption key."
msgstr "Ni dovolj pomnilnika za ustvarjanje Å¡ifrirnega kljuÄa."
-#: ../libnm-util/nm-utils.c:1633
+#: ../libnm-util/nm-utils.c:2085
msgid "Could not allocate memory for PEM file creation."
msgstr "Ni mogoÄe dodeliti pomnilnika za ustvarjanje datoteke PEM."
-#: ../libnm-util/nm-utils.c:1645
+#: ../libnm-util/nm-utils.c:2097
#, 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:1657
+#: ../libnm-util/nm-utils.c:2109
#, 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:1676
+#: ../libnm-util/nm-utils.c:2128
#, c-format
msgid "Could not allocate memory for PEM file data."
msgstr "Ni mogoÄe dodeliti pomnilnika za podatke datoteke PEM."
-#: ../src/nm-netlink-monitor.c:194
-#: ../src/nm-netlink-monitor.c:464
-#: ../src/nm-netlink-monitor.c:569
-#: ../src/ip6-manager/nm-netlink-listener.c:352
+#: ../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."
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
+msgid "Enable or disable WiFi devices"
+msgstr "OmogoÄi ali onemogoÄi naprave WiFi"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
+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
+msgid "Enable or disable system networking"
+msgstr "OmogoÄi ali onemogoÄi sistemske omrežne povezave"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
+msgid "Put NetworkManager to sleep or wake it up (should only be used by system power management)"
+msgstr "Postavi program NetworkManager v mirovanje ali iz njega (možnost je namenjena upravljanju napajanja)"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
+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
+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
+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
+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
+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."
+
+#: ../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 "napaka med obdelovanjem sporoÄila netlink: %s"
-#: ../src/nm-netlink-monitor.c:260
-#, c-format
-#| msgid ""
-#| "unable to create netlink socket for monitoring wired ethernet devices - %s"
-msgid "unable to allocate netlink handle for monitoring link status: %s"
-msgstr "ni mogoÄe dodeliti roÄice netlink za nadziranje stanja povezave: %s"
+#: ../src/nm-netlink-monitor.c:214
+msgid "error occurred while waiting for data on socket"
+msgstr "med Äakanjem na podatke na vtiÄu je priÅ¡lo do napake"
-#: ../src/nm-netlink-monitor.c:270
+#: ../src/nm-netlink-monitor.c:254
#, c-format
-#| msgid ""
-#| "unable to bind to netlink socket for monitoring wired ethernet devices - %"
-#| "s"
msgid "unable to connect to netlink for monitoring link status: %s"
msgstr "ni se mogoÄe povezati z netlink za nadziranje stanja povezave: %s"
-#: ../src/nm-netlink-monitor.c:278
+#: ../src/nm-netlink-monitor.c:265
#, c-format
-#| msgid ""
-#| "unable to bind to netlink socket for monitoring wired ethernet devices - %"
-#| "s"
-msgid "unable to join netlink group for monitoring link status: %s"
-msgstr "ni se mogoÄe povezati s skupino netlink za nadziranje stanja povezave: %s"
+msgid "unable to enable netlink handle credential passing: %s"
+msgstr "ni mogoÄe omogoÄiti roÄnika netlink overjanje:% s"
-#: ../src/nm-netlink-monitor.c:286
+#: ../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 "ni mogoÄe dodeliti roÄice netlink za nadziranje stanja povezave: %s"
+
+#: ../src/nm-netlink-monitor.c:376
#, c-format
-#| msgid ""
-#| "unable to create netlink socket for monitoring wired ethernet devices - %s"
msgid "unable to allocate netlink link cache for monitoring link status: %s"
msgstr "ni mogoÄe dodeliti predpomnilnika netlink povezav za nadziranje stanja povezave: %s"
-#: ../src/nm-netlink-monitor.c:494
-#: ../src/ip6-manager/nm-netlink-listener.c:382
-msgid "error occurred while waiting for data on socket"
-msgstr "med Äakanjem na podatke na vtiÄu je priÅ¡lo do napake"
+#: ../src/nm-netlink-monitor.c:502
+#, c-format
+msgid "unable to join netlink group: %s"
+msgstr "skupini netlink se ni mogoÄe pridružiti: %s"
-#: ../src/nm-netlink-monitor.c:558
+#: ../src/nm-netlink-monitor.c:629
+#: ../src/nm-netlink-monitor.c:642
#, c-format
msgid "error updating link cache: %s"
msgstr "napaka med posodabljanjem predpomnilnika povezave: %s"
-#: ../src/NetworkManager.c:330
+#: ../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/dhcp-manager/nm-dhcp-dhclient.c:304
+#: ../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"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:328
msgid "# Created by NetworkManager\n"
-msgstr "#Ustvaril upravljalnik omrežij\n"
+msgstr "#Ustvarjeno z upravljalnikom omrežij\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:310
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:344
#, c-format
msgid ""
"# Merged from %s\n"
@@ -431,562 +1804,48 @@ msgstr ""
"# Združeno iz %s\n"
"\n"
-#: ../src/ip6-manager/nm-netlink-listener.c:200
+#: ../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 "unable to allocate netlink handle: %s"
-msgstr "RoÄnika netlink ni mogoÄe dodeliti: %s"
+msgid "unsupported DHCP client '%s'"
+msgstr "nepodprt odjemalec DHCP '%s'"
-#: ../src/ip6-manager/nm-netlink-listener.c:210
+#: ../src/logging/nm-logging.c:146
#, c-format
-msgid "unable to connect to netlink: %s"
-msgstr "z netlink se ni mogoÄe povezati: %s"
+msgid "Unknown log level '%s'"
+msgstr "Neznana raven beleženja '%s'"
-#: ../src/ip6-manager/nm-netlink-listener.c:307
+#: ../src/logging/nm-logging.c:171
#, c-format
-msgid "unable to join netlink group: %s"
-msgstr "skupini netlink se ni mogoÄe pridružiti: %s"
+msgid "Unknown log domain '%s'"
+msgstr "Neznana domena beleženja '%s'"
-#: ../src/named-manager/nm-named-manager.c:315
+#: ../src/dns-manager/nm-dns-manager.c:384
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
-msgstr "OPOMBA: libc razreÅ¡evalnik morda ne podpira veÄ kot 3 imenske strežnike."
+msgstr "OPOMBA: razreÅ¡evalnik libc morda ne podpira veÄ kot 3 imenskih strežnikov."
-#: ../src/named-manager/nm-named-manager.c:317
+#: ../src/dns-manager/nm-dns-manager.c:386
msgid "The nameservers listed below may not be recognized."
-msgstr "Imenski strežniki našteti spodaj morda ne bodo prepoznani."
+msgstr "Navedeni imenski strežniki morda ne bodo prepoznani."
-#: ../src/system-settings/nm-default-wired-connection.c:194
+#: ../src/system-settings/nm-default-wired-connection.c:157
#, c-format
msgid "Auto %s"
msgstr "Samodejno %s"
-#: ../system-settings/plugins/ifcfg-rh/reader.c:2406
-#| msgid "Open System"
+#: ../system-settings/plugins/ifcfg-rh/reader.c:3412
+#: ../system-settings/plugins/ifnet/connection_parser.c:49
msgid "System"
msgstr "Sistem"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
-msgid "Connection sharing via a protected WiFi network"
-msgstr "Deljene 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 "Deljene 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 "No active connections!"
-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 deljenje 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 deljenje povezav preko odprtega WiFi omrežja"
-
-#~ msgid "Passphrase for wireless network %s"
-#~ msgstr "Å ifrirna fraza za brezžiÄno omrežje %s"
-#~ msgid "Connection to the wireless network '%s' failed."
-#~ msgstr "Povezava z brezžiÄnim omrežjem %s ni uspela"
-#~ msgid "Connection to the wired network failed."
-#~ msgstr "Povezava z žiÄnim omrežjem ni uspela."
-#~ msgid "Error displaying connection information:"
-#~ msgstr "Napaka pri prikazovanju informacij o povezavi:"
-#~ msgid "Could not find some required resources (the glade file)!"
-#~ msgstr "Ni mogoÄe najti nekaterih zahtevanih virov (datoteke glade)!"
-#~ msgid "%d Mb/s"
-#~ msgstr "%d Mb/s"
-#~ msgid "Wired Ethernet (%s)"
-#~ msgstr "ŽiÄni eternet (%s)"
-#~ msgid "Wireless Ethernet (%s)"
-#~ msgstr "BrezžiÄni eternet (%s)"
-#~ msgid "Unknown"
-#~ msgstr "Neznano"
-#~ msgid "NetworkManager Applet"
-#~ msgstr "ProgramÄek NetworkManager"
-#~ msgid ""
-#~ "Copyright © 2004-2006 Red Hat, Inc.\n"
-#~ "Copyright © 2005-2006 Novell, Inc."
-#~ msgstr ""
-#~ "Copyright © 2004-2006 Red Hat, Inc.\n"
-#~ "Copyright © 2005-2006 Novell, Inc."
-#~ msgid ""
-#~ "Notification area applet for managing your network devices and "
-#~ "connections."
-#~ msgstr ""
-#~ "ProgramÄek za obmoÄje obvestil za upravljanje vaÅ¡ih mrežnih naprav in "
-#~ "povezav."
-#~ msgid "translator-credits"
-#~ msgstr "Matic Žgur <mr.zgur@gmail.com>"
-#~ msgid ""
-#~ "Copyright © 2004-2005 Red Hat, Inc.\n"
-#~ "Copyright © 2005-2006 Novell, Inc."
-#~ msgstr ""
-#~ "Copyright © 2004-2005 Red Hat, Inc.\n"
-#~ "Copyright © 2005-2006 Novell, Inc."
-#~ msgid "VPN Login Failure"
-#~ msgstr "Neuspela prijava VPN"
-#~ msgid "Could not start the VPN connection '%s' due to a login failure."
-#~ msgstr "Ni mogoÄe zaÄeti povezave VPN '%s' zaradi neuspele prijave."
-#~ msgid "VPN Start Failure"
-#~ msgstr "Neuspel zagon VPN"
-#~ msgid ""
-#~ "Could not start the VPN connection '%s' due to a failure launching the "
-#~ "VPN program."
-#~ msgstr ""
-#~ "Ni mogoÄe zaÄeti povezave VPN '%s' zaradi neuspelega zagona programa VPN."
-#~ msgid "VPN Connect Failure"
-#~ msgstr "Neuspela povezava VPN"
-#~ msgid "Could not start the VPN connection '%s' due to a connection error."
-#~ msgstr "Ni mogoÄe zaÄeti povezave VPN '%s' zaradi napake pri povezavi."
-#~ msgid "VPN Configuration Error"
-#~ msgstr "Napaka nastavitev VPN"
-#~ msgid "The VPN connection '%s' was not correctly configured."
-#~ msgstr "Povezava VPN '%s' ni pravilno nastavljena."
-#~ msgid ""
-#~ "Could not start the VPN connection '%s' because the VPN server did not "
-#~ "return an adequate network configuration."
-#~ msgstr ""
-#~ "Ni mogoÄe zaÄeti povezave VPN '%s', ker strežnik VPN ni vrnil ustreznih "
-#~ "nastavitev."
-#~ msgid "VPN Login Message"
-#~ msgstr "Prijavno sporoÄilo VPN"
-#~ msgid ""
-#~ "The NetworkManager Applet could not find some required resources (the "
-#~ "glade file was not found)."
-#~ msgstr ""
-#~ "ProgramÄek NetworkManager ne more najti nekaterih zahtevanih virov "
-#~ "(datoteka glade ni bila najdena)."
-#~ msgid "The network device \"%s (%s)\" does not support wireless scanning."
-#~ msgstr ""
-#~ "Omrežna naprava \"%s (%s)\" ne podpira skeniranja brezžiÄnih omrežij."
-#~ msgid "The network device \"%s (%s)\" does not support link detection."
-#~ msgstr "Omrežna naprava \"%s (%s)\" ne podpira odkrivanja povezav."
-#~ msgid "(unknown)"
-#~ msgstr "(neznano)"
-#~ msgid "Preparing device %s for the wired network..."
-#~ msgstr "Pripravljanje naprave %s na žiÄno omrežje ..."
-#~ msgid "Preparing device %s for the wireless network '%s'..."
-#~ msgstr "Pripravljanje naprave %s na rezžiÄno omrežje '%s' ..."
-#~ msgid "Configuring device %s for the wired network..."
-#~ msgstr "Nastavljanje naprave %s za žiÄno omrežje ..."
-#~ msgid "Attempting to join the wireless network '%s'..."
-#~ msgstr "Poskus pridruževanja brezžiÄnemu omrežju '%s' ..."
-#~ msgid "Waiting for Network Key for the wireless network '%s'..."
-#~ msgstr "ÄŒakanje na omrežni kljuÄ za brezžiÄno omrežje '%s' ..."
-#~ msgid "Requesting a network address from the wired network..."
-#~ msgstr "Zahtevanje omrežnega naslova iz žiÄnega omrežja ..."
-#~ msgid "Requesting a network address from the wireless network '%s'..."
-#~ msgstr "Zahtevanje omrežnega naslova iz brezžiÄnega omrežja '%s' ..."
-#~ msgid "Finishing connection to the wired network..."
-#~ msgstr "ZakljuÄevanje povezave v žiÄno omrežje ..."
-#~ msgid "Finishing connection to the wireless network '%s'..."
-#~ msgstr "ZakljuÄevanje povezave v brezžiÄno omrežje '%s' ..."
-#~ msgid "NetworkManager is not running"
-#~ msgstr "NetworkManager ni zagnan"
-#~ msgid "Networking disabled"
-#~ msgstr "Omrežje onemogoÄeno"
-#~ msgid "No network connection"
-#~ msgstr "Nobene omrežne povezave"
-#~ msgid "Wired network connection"
-#~ msgstr "ŽiÄna omrežna povezava"
-#~ msgid "Connected to an Ad-Hoc wireless network"
-#~ msgstr "Povezan v ad-hoc brezžiÄno omrežje"
-#~ msgid "Wireless network connection to '%s' (%d%%)"
-#~ msgstr "BrezžiÄna omrežna povezava z '%s' (%d%%)"
-#~ msgid "VPN connection to '%s'"
-#~ msgstr "Povezave VPN z '%s'"
-#~ msgid "VPN connecting to '%s'"
-#~ msgstr "Povezovanje VPN z '%s'"
-#~ msgid "_Connect to Other Wireless Network..."
-#~ msgstr "Po_veži se v drugo brezžiÄno omrežje ..."
-#~ msgid "Create _New Wireless Network..."
-#~ msgstr "_Ustvari novo brezžiÄno omrežje ..."
-#~ msgid "_VPN Connections"
-#~ msgstr "_Povezave VPN"
-#~ msgid "_Configure VPN..."
-#~ msgstr "_Nastavi VPN ..."
-#~ msgid "_Disconnect VPN..."
-#~ msgstr "_Prekini povezavo z VPN ..."
-#~ msgid "_Dial Up Connections"
-#~ msgstr "_Klicna povezava"
-#~ msgid "Connect to %s..."
-#~ msgstr "Poveži se v %s ..."
-#~ msgid "Disconnect from %s..."
-#~ msgstr "Prekini povezavo z %s ..."
-#~ msgid "No network devices have been found"
-#~ msgstr "Najdena ni bila nobena omrežna naprava"
-#~ msgid "NetworkManager is not running..."
-#~ msgstr "NetworkManager ni zagnan ..."
-#~ msgid "Enable _Networking"
-#~ msgstr "OmogoÄi _omrežje"
-#~ msgid "Enable _Wireless"
-#~ msgstr "OmogoÄi _brezžiÄno omrežje"
-#~ msgid "Connection _Information"
-#~ msgstr "_Informacije o povezavi"
-#~ msgid "_Help"
-#~ msgstr "_PomoÄ"
-#~ msgid "_About"
-#~ msgstr "_O Programu"
-#~ msgid ""
-#~ "The NetworkManager applet could not find some required resources. It "
-#~ "cannot continue.\n"
-#~ msgstr ""
-#~ "ProgramÄek NetworkManager ne more najti nekaterih zahtevanih virov. Ni "
-#~ "mogoÄe nadaljevati.\n"
-#~ msgid "Shared Key"
-#~ msgstr "Deljeni kljuÄ"
-#~ msgid "Automatic (Default)"
-#~ msgstr "Samodejno (privzeto)"
-#~ msgid "AES-CCMP"
-#~ msgstr "AES-CCMP"
-#~ msgid "TKIP"
-#~ msgstr "TKIP"
-#~ msgid "Dynamic WEP"
-#~ msgstr "DinamiÄni WEP"
-#~ msgid "None"
-#~ msgstr "Brez"
-#~ msgid "WEP 64/128-bit ASCII"
-#~ msgstr "WEP 64/128-bit ASCII"
-#~ msgid "WEP 64/128-bit Hex"
-#~ msgstr "WEP 64/128-bit Hex"
-#~ msgid "WEP 128-bit Passphrase"
-#~ msgstr "WEP 128-bit Å¡ifrirna fraza"
-#~ msgid "PEAP"
-#~ msgstr "PEAP"
-#~ msgid "TLS"
-#~ msgstr "TLS"
-#~ msgid "TTLS"
-#~ msgstr "TTLS"
-#~ msgid "WPA2 Enterprise"
-#~ msgstr "Podjetniški WPA2"
-#~ msgid "WPA Enterprise"
-#~ msgstr "Podjetniški WPA"
-#~ msgid "WPA2 Personal"
-#~ msgstr "Osebni WPA2"
-#~ msgid "WPA Personal"
-#~ msgstr "Osebni WPA"
-#~ msgid "Orientation"
-#~ msgstr "Usmerjenost"
-#~ msgid "The orientation of the tray."
-#~ msgstr "Usmeritev pladnja."
-#~ msgid "Wired Network (%s)"
-#~ msgstr "ŽiÄno omrežje (%s)"
-#~ msgid "_Wired Network"
-#~ msgstr "Ž_iÄno omrežje"
-#~ msgid "Wireless Network (%s)"
-#~ msgid_plural "Wireless Networks (%s)"
-#~ msgstr[0] "BrezžiÄno omrežje (%s)"
-#~ msgstr[1] "BrezžiÄni omrežji (%s)"
-#~ msgstr[2] "BrezžiÄna omrežja (%s)"
-#~ msgstr[3] "BrezžiÄna omrežja (%s)"
-#~ msgid "Wireless Network"
-#~ msgid_plural "Wireless Networks"
-#~ msgstr[0] "BrezžiÄno omrežje"
-#~ msgstr[1] "BrezžiÄni omrežji"
-#~ msgstr[2] "BrezžiÄna omrežja"
-#~ msgstr[3] "BrezžiÄna omrežja"
-#~ msgid " (invalid Unicode)"
-#~ msgstr " (neveljaven Unicode)"
-#~ msgid ""
-#~ "By default, the wireless network's name is set to your computer's name, %"
-#~ "s, with no encryption enabled"
-#~ msgstr ""
-#~ "Privzeto je ime brezžiÄnega omrežja nastavljeno na ime vaÅ¡ega "
-#~ "raÄunalnika, %s, brez omogoÄenega Å¡ifriranja"
-#~ msgid "Create new wireless network"
-#~ msgstr "Ustvari novo brezžiÄno omrežje"
-#~ msgid ""
-#~ "Enter the name and security settings of the wireless network you wish to "
-#~ "create."
-#~ msgstr ""
-#~ "Vnesite ime in varnostne nastavitve brezžiÄnega omrežja, ki ga želite "
-#~ "ustvariti."
-#~ msgid "Create New Wireless Network"
-#~ msgstr "Ustvari novo brezžiÄno omrežje"
-#~ msgid "Existing wireless network"
-#~ msgstr "ObstojeÄe brezžiÄno omrežje"
-#~ msgid "Enter the name of the wireless network to which you wish to connect."
-#~ msgstr "Vnesite ime brezžiÄnega omrežja, v katerega se želite povezati."
-#~ msgid "Connect to Other Wireless Network"
-#~ msgstr "Poveži se v drugo brezžiÄno omrežje"
-#~ msgid "Error connecting to wireless network"
-#~ msgstr "Napaka pri povezovanju z brezžiÄnim omrežjem"
-#~ msgid ""
-#~ "The requested wireless network requires security capabilities unsupported "
-#~ "by your hardware."
-#~ msgstr ""
-#~ "Zahtevano brezžiÄno omrežje zahteva varnostne zmožnosti, ki so nepodprte "
-#~ "z vašo strojno opremo."
-#~ msgid "Cannot start VPN connection '%s'"
-#~ msgstr "Ni mogoÄe zaÄeti povezave VPN '%s'"
-#~ msgid ""
-#~ "Could not find the authentication dialog for VPN connection type '%s'. "
-#~ "Contact your system administrator."
-#~ msgstr ""
-#~ "Ni mogoÄe najti pogovornega okna za overitev za povezavo VPN vrste '%s'. "
-#~ "Kontaktirajte sistemskega administratorja."
-#~ msgid ""
-#~ "There was a problem launching the authentication dialog for VPN "
-#~ "connection type '%s'. Contact your system administrator."
-#~ msgstr ""
-#~ "Pri zagonu pogovornega okna za overovitev za povezavo VPN vrste '%s' je "
-#~ "prišlo do problema. Kontaktirajte sistemskega administratorja."
-#~ msgid " "
-#~ msgstr " "
-#~ msgid ""
-#~ "<span weight=\"bold\" size=\"larger\">Active Connection Information</span>"
-#~ msgstr ""
-#~ "<span weight=\"bold\" size=\"larger\">Informacije o aktivni povezavi</"
-#~ "span>"
-#~ msgid ""
-#~ "<span weight=\"bold\" size=\"larger\">Passphrase Required by Wireless "
-#~ "Network</span>\n"
-#~ "\n"
-#~ "A passphrase or encryption key is required to access the wireless network "
-#~ "'%s'."
-#~ msgstr ""
-#~ "<span weight=\"bold\" size=\"larger\">Å ifrirna fraza, ki jo zahteva "
-#~ "brezžiÄno omrežje</span>\n"
-#~ "\n"
-#~ "Za dostop do brezžiÄnega omrežja '%s' je zahtevana Å¡ifrirna fraza ali "
-#~ "Å¡ifrirni kljuÄ."
-#~ msgid ""
-#~ "<span weight=\"bold\" size=\"larger\">Reduced Network Functionality</"
-#~ "span>\n"
-#~ "\n"
-#~ "%s It will not be completely functional."
-#~ msgstr ""
-#~ "<span weight=\"bold\" size=\"larger\">Zmanjšana uporabnost omrežja</"
-#~ "span>\n"
-#~ "\n"
-#~ "%s ne bo popolnoma uporaben."
-#~ msgid ""
-#~ "<span weight=\"bold\" size=\"larger\">Wireless Network Login "
-#~ "Confirmation</span>\n"
-#~ "\n"
-#~ "You have chosen to log in to the wireless network '%s'. If you are sure "
-#~ "that this wireless network is secure, click the checkbox below and "
-#~ "NetworkManager will not require confirmation on subsequent log ins."
-#~ msgstr ""
-#~ "<span weight=\"bold\" size=\"larger\">Potrditev prijave v brezžiÄno "
-#~ "omrežje</span>\n"
-#~ "\n"
-#~ "Izbrali ste prijavo v brezžiÄno omrežje '%s'. ÄŒe ste prepriÄani, da je to "
-#~ "brezžiÄno omrežje varno, kliknite potrditveno polje spodaj in "
-#~ "NetworkManager ne bo veÄ zahteval potrditve za nadaljnje prijave."
-#~ msgid "Anonymous Identity:"
-#~ msgstr "Anonimna identiteta:"
-#~ msgid "Authentication:"
-#~ msgstr "Overovitev:"
-#~ msgid "Broadcast Address:"
-#~ msgstr "Naslov za razpršeno oddajanje:"
-#~ msgid "CA Certificate File:"
-#~ msgstr "Datoteka overiteljevega (CA) certifikata:"
-#~ msgid "C_onnect"
-#~ msgstr "Po_veži se"
-#~ msgid "Client Certificate File:"
-#~ msgstr "Datoteka odjemalÄevega certifikata:"
-#~ msgid "Connection Information"
-#~ msgstr "Informacije o povezavi"
-#~ msgid "Default Route:"
-#~ msgstr "Privzeta smer:"
-#~ msgid "Destination Address:"
-#~ msgstr "Ciljni naslov:"
-#~ msgid "Driver:"
-#~ msgstr "Gonilnik:"
-#~ msgid "EAP Method:"
-#~ msgstr "Metoda EAP:"
-#~ msgid "Hardware Address:"
-#~ msgstr "Naslov strojne opreme:"
-#~ msgid "IP Address:"
-#~ msgstr "IP naslov:"
-#~ msgid "Identity:"
-#~ msgstr "Identiteta:"
-#~ msgid "Interface:"
-#~ msgstr "Vmesnik:"
-#~ msgid "Key Type:"
-#~ msgstr "Vrsta kljuÄa:"
-#~ msgid "Key management:"
-#~ msgstr "Upravljanje s kljuÄi:"
-#~ msgid "Key:"
-#~ msgstr "KljuÄ:"
-#~ msgid ""
-#~ "None\n"
-#~ "WEP 128-bit Passphrase\n"
-#~ "WEP 64/128-bit Hex\n"
-#~ "WEP 64/128-bit ASCII\n"
-#~ msgstr ""
-#~ "Brez\n"
-#~ "WEP 128-bit Å¡ifrirna fraza\n"
-#~ "WEP 64/128-bit Hex\n"
-#~ "WEP 64/128-bit ASCII\n"
-#~ msgid ""
-#~ "Open System\n"
-#~ "Shared Key"
-#~ msgstr ""
-#~ "Odprti sistem\n"
-#~ "Deljeni kljuÄ"
-#~ msgid "Other Wireless Network..."
-#~ msgstr "Drugo brezžiÄno omrežje ..."
-#~ msgid "Passphrase:"
-#~ msgstr "Å ifrirna fraza:"
-#~ msgid "Password:"
-#~ msgstr "Geslo:"
-#~ msgid "Primary DNS:"
-#~ msgstr "Primarni DNS;"
-#~ msgid "Private Key File:"
-#~ msgstr "Datoteka zasebnega kljuÄa:"
-#~ msgid "Private Key Password:"
-#~ msgstr "Geslo zasebnega kljuÄa:"
-#~ msgid "Secondary DNS:"
-#~ msgstr "Sekundarni DNS:"
-#~ msgid "Select the CA Certificate File"
-#~ msgstr "Izberite datoteko overiteljevega (CA) certifikata"
-#~ msgid "Select the Client Certificate File"
-#~ msgstr "Izberite datoteko odjemalÄevega certifikata"
-#~ msgid "Select the Private Key File"
-#~ msgstr "Izberite datoteko zasebnega kljuÄa"
-#~ msgid "Show key"
-#~ msgstr "Pokaži kljuÄ"
-#~ msgid "Show passphrase"
-#~ msgstr "Pokaži šifrirno frazo"
-#~ msgid "Show password"
-#~ msgstr "Pokaži geslo"
-#~ msgid "Show passwords"
-#~ msgstr "Pokaži gesla"
-#~ msgid "Speed:"
-#~ msgstr "Hitrost:"
-#~ msgid "Subnet Mask:"
-#~ msgstr "Maska podomrežja:"
-#~ msgid "Type:"
-#~ msgstr "Vrsta:"
-#~ msgid "User Name:"
-#~ msgstr "Uporabniško ime:"
-#~ msgid "Wireless Network Key Required"
-#~ msgstr "Zahtevan kljuÄ brezžiÄnega omrežja"
-#~ msgid "Wireless _adapter:"
-#~ msgstr "BrezžiÄni _vmesnik:"
-#~ msgid "_Always Trust this Wireless Network"
-#~ msgstr "Vedno _zaupaj temu brezžiÄnemu omrežju"
-#~ msgid "_Don't remind me again"
-#~ msgstr "_Ne spomni me veÄ"
-#~ msgid "_Login to Network"
-#~ msgstr "_Prijava v omrežje"
-#~ msgid "_Network Name:"
-#~ msgstr "_Ime omrežja:"
-#~ msgid "_Wireless Security:"
-#~ msgstr "_ZaÅ¡Äita omrežja:"
-#~ msgid "Cannot add VPN connection"
-#~ msgstr "Ni mogoÄe dodati povezave VPN"
-#~ msgid ""
-#~ "No suitable VPN software was found on your system. Contact your system "
-#~ "administrator."
-#~ msgstr ""
-#~ "Ustrezna programska oprema za VPN ni bila najdena na vašem sistemu. "
-#~ "Kontaktirajte vašega sistemskega administratorja."
-#~ msgid "Cannot import VPN connection"
-#~ msgstr "Ni mogoÄe uvoziti povezave VPN"
-#~ msgid ""
-#~ "Cannot find suitable software for VPN connection type '%s' to import the "
-#~ "file '%s'. Contact your system administrator."
-#~ msgstr ""
-#~ "Ni mogoÄe najti ustrezne programske opreme za povezavo VPN vrste '%s' za "
-#~ "uvoz datoteke '%s'. Kontaktirajte vašega sistemskega administratorja."
-#~ msgid "Error retrieving VPN connection '%s'"
-#~ msgstr "Napaka pri pridobivanju povezave VPN '%s'"
-#~ msgid ""
-#~ "Could not find the UI files for VPN connection type '%s'. Contact your "
-#~ "system administrator."
-#~ msgstr ""
-#~ "Ni mogoÄe najti datotek uporabniÅ¡kega vmesnika za povezavo VPN vrste \"%s"
-#~ "\". Kontaktirajte vašega sistemskega administratorja."
-#~ msgid "Delete VPN connection \"%s\"?"
-#~ msgstr "Ali želite izbrisati povezavo VPN \"%s\"?"
-#~ msgid ""
-#~ "All information about the VPN connection \"%s\" will be lost and you may "
-#~ "need your system administrator to provide information to create a new "
-#~ "connection."
-#~ msgstr ""
-#~ "Vse informacije o povezavi VPN \"%s\" bodo izgubljene in mogoÄe boste "
-#~ "potrebovali vašega sistemskega administratorja, da vam priskrbi "
-#~ "informacije za ustvarjanje nove povezave."
-#~ msgid "Unable to load"
-#~ msgstr "Ni mogoÄe naložiti"
-#~ msgid "Cannot find some needed resources (the glade file)!"
-#~ msgstr "Ni mogoÄe najti nekaterih potrebnih virov (datoteke glade)!"
-#~ msgid "Create VPN Connection"
-#~ msgstr "Ustvari povezavo VPN"
-#~ msgid "Edit VPN Connection"
-#~ msgstr "Uredi povezavo VPN"
-#~ msgid "Add a new VPN connection"
-#~ msgstr "Dodaj novo povezavo VPN"
-#~ msgid "Delete the selected VPN connection"
-#~ msgstr "Izbriši izbrano povezavo VPN"
-#~ msgid "E_xport"
-#~ msgstr "I_zvozi"
-#~ msgid "Edit the selected VPN connection"
-#~ msgstr "Uredi izbrano povezavo VPN"
-#~ msgid "Export the VPN settings to a file"
-#~ msgstr "Izvozi nastavitve VPN v datoteko"
-#~ msgid "Export the selected VPN connection to a file"
-#~ msgstr "Izvozi izbrano povezavo VPN v datoteko"
-#~ msgid "Manage Virtual Private Network Connections"
-#~ msgstr "Upravljanje povezav navideznega zasebnega omrežja (VPN)"
-#~ msgid "VPN Connections"
-#~ msgstr "Povezave VPN"
-#~ msgid "40-bit WEP"
-#~ msgstr "40-bitni WEP"
-#~ msgid "104-bit WEP"
-#~ msgstr "104-bitni WEP"
-#~ msgid "WPA TKIP"
-#~ msgstr "WPA TKIP"
-#~ msgid "WPA CCMP"
-#~ msgstr "WPA CCMP"
-#~ msgid "WPA Automatic"
-#~ msgstr "Samodejni WPA"
-#~ msgid "WPA2 TKIP"
-#~ msgstr "WPA2 TKIP"
-#~ msgid "WPA2 CCMP"
-#~ msgstr "WPA2 CCMP"
-#~ msgid "WPA2 Automatic"
-#~ msgstr "Samodejni WPA2"
-#~ msgid "none"
-#~ msgstr "brez"
-#~ msgid "operation took too long"
-#~ msgstr "operacija je trajala predolgo"
-#~ msgid "received data from wrong type of sender"
-#~ msgstr "prejeti podatki od poÅ¡iljatelja napaÄne vrste"
-#~ msgid "received data from unexpected sender"
-#~ msgstr "prejeti podatki od nepriÄakovanega poÅ¡iljatelja"
-#~ msgid "too much data was sent over socket and some of it was lost"
-#~ msgstr ""
-#~ "preveÄ podatkov je bilo poslano preko vtiÄa in nekaj se jih je izgubilo"
-#~ msgid "You are now connected to the Ad-Hoc wireless network '%s'."
-#~ msgstr "Zdaj ste povezani v ad-hoc brezžiÄno omrežje '%s'."
-#~ msgid "You are now connected to the wireless network '%s'."
-#~ msgstr "Zdaj ste povezani z brezžiÄnim omrežjem '%s'."
-#~ msgid "You are now connected to the wired network."
-#~ msgstr "Zdaj ste povezani z žiÄnim omrežjem."
-#~ msgid "Connection Established"
-#~ msgstr "Povezava vzpostavljena"
-#~ msgid "Disconnected"
-#~ msgstr "Prekinjena povezava"
-#~ msgid "The network connection has been disconnected."
-#~ msgstr "Omrežna povezava je bila prekinjena."
-#~ msgid "LEAP"
-#~ msgstr "LEAP"
-
diff --git a/po/sr.po b/po/sr.po
index e04c016477..160630c377 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -1,437 +1,2079 @@
# Serbian Cyrillic and Latin translations for NetworkManager
# Copyright (C) 2004-2005 GNOME Foundation
# This file is distributed under the same licence as the NetworkManager package.
+# Милош Поповић <gpopac@gmail.com>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: NetworkManager\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-05-13 16:11-0400\n"
-"PO-Revision-Date: 2006-06-02 20:40+0200\n"
-"Last-Translator: Filip Miletic <f dot miletic at ewi dot tudelft dot nl>\n"
-"Language-Team: Serbian <gnu@prevod.org>\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=NetworkManager&component=general\n"
+"POT-Creation-Date: 2010-09-22 03:25+0000\n"
+"PO-Revision-Date: 2010-10-18 16:48+0200\n"
+"Last-Translator: Милош Поповић <gpopac@gmail.com>\n"
+"Language-Team: Serbian <gnom@prevod.org>\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"
+"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : n"
+"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\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
+msgid "NAME"
+msgstr "ИМЕ"
+
+#. 0
+#: ../cli/src/connections.c:61 ../cli/src/connections.c:76
+msgid "UUID"
+msgstr "УУИД"
+
+#. 1
+#: ../cli/src/connections.c:62
+msgid "DEVICES"
+msgstr "УРЕЂÐЈИ"
+
+#. 2
+#: ../cli/src/connections.c:63 ../cli/src/connections.c:78
+msgid "SCOPE"
+msgstr "ОПСЕГ"
+
+#. 3
+#: ../cli/src/connections.c:64
+msgid "DEFAULT"
+msgstr "ПОДРÐЗУМЕВÐÐО"
+
+#. 4
+#: ../cli/src/connections.c:65
+msgid "DBUS-SERVICE"
+msgstr "ДБУС-СЕРВИС"
+
+#. 5
+#: ../cli/src/connections.c:66
+msgid "SPEC-OBJECT"
+msgstr "СПЕЦ-ОБЈЕКТ"
+
+#. 6
+#: ../cli/src/connections.c:67
+msgid "VPN"
+msgstr "ВПÐ"
+
+#. 1
+#. 0
+#. 1
+#: ../cli/src/connections.c:77 ../cli/src/devices.c:62 ../cli/src/devices.c:90
+msgid "TYPE"
+msgstr "ВРСТÐ"
+
+#. 3
+#: ../cli/src/connections.c:79
+msgid "TIMESTAMP"
+msgstr "ОЗÐÐКÐ_ВРЕМЕÐÐ"
+
+#. 4
+#: ../cli/src/connections.c:80
+msgid "TIMESTAMP-REAL"
+msgstr "СТВÐРÐÐ-ОЗÐÐКÐ_ВРЕМЕÐÐ"
+
+#. 5
+#: ../cli/src/connections.c:81
+msgid "AUTOCONNECT"
+msgstr "СÐМОПОВЕЗИВÐЊЕ"
+
+#. 6
+#: ../cli/src/connections.c:82
+msgid "READONLY"
+msgstr "СÐМО_ЗÐ_ЧИТÐЊЕ"
+
+#. 7
+#: ../cli/src/connections.c:83
+msgid "DBUS-PATH"
+msgstr "ДБÐС-ПУТÐЊÐ"
+
+#: ../cli/src/connections.c:159
+#, c-format
+msgid ""
+"Usage: nmcli con { COMMAND | help }\n"
+" COMMAND := { list | status | up | down }\n"
+"\n"
+" list [id <id> | uuid <id> | system | user]\n"
+" status\n"
+" up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout "
+"<timeout>]\n"
+" down id <id> | uuid <id>\n"
+msgstr ""
+"Употреба: nmcli con { ÐÐРЕДБР| help }\n"
+" ÐÐРЕДБР:= { list | status | up | down }\n"
+"\n"
+" list [id <id> | uuid <id> | system | user]\n"
+" status\n"
+" up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout "
+"<timeout>]\n"
+" down id <id> | uuid <id>\n"
+
+#: ../cli/src/connections.c:199 ../cli/src/connections.c:540
+#, c-format
+msgid "Error: 'con list': %s"
+msgstr "Грешка: „con list“: %s"
-#: examples/python/systray/eggtrayicon.c:111 gnome/applet/eggtrayicon.c:118
-msgid "Orientation"
-msgstr "УÑмерење"
+#: ../cli/src/connections.c:201 ../cli/src/connections.c:542
+#, c-format
+msgid "Error: 'con list': %s; allowed fields: %s"
+msgstr "Грешка: „con list“: %s; дозвољена поља: %s"
+
+#: ../cli/src/connections.c:209
+msgid "Connection details"
+msgstr "Подаци о вези"
+
+#: ../cli/src/connections.c:384 ../cli/src/connections.c:605
+msgid "system"
+msgstr "ÑиÑтем"
+
+#: ../cli/src/connections.c:384 ../cli/src/connections.c:605
+msgid "user"
+msgstr "кориÑник"
+
+#: ../cli/src/connections.c:386
+msgid "never"
+msgstr "никада"
+
+#. "CAPABILITIES"
+#. Print header
+#. "WIFI-PROPERTIES"
+#: ../cli/src/connections.c:387 ../cli/src/connections.c:388
+#: ../cli/src/connections.c:606 ../cli/src/connections.c:609
+#: ../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
+msgid "yes"
+msgstr "да"
+
+#: ../cli/src/connections.c:387 ../cli/src/connections.c:388
+#: ../cli/src/connections.c:606 ../cli/src/connections.c:609
+#: ../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
+msgid "no"
+msgstr "не"
+
+#: ../cli/src/connections.c:461 ../cli/src/connections.c:504
+msgid "System connections"
+msgstr "Везе на ÑиÑтему"
+
+#: ../cli/src/connections.c:466 ../cli/src/connections.c:517
+msgid "User connections"
+msgstr "КориÑникове везе"
+
+#: ../cli/src/connections.c:478 ../cli/src/connections.c:1338
+#: ../cli/src/connections.c:1354 ../cli/src/connections.c:1363
+#: ../cli/src/connections.c:1374 ../cli/src/connections.c:1459
+#: ../cli/src/devices.c:962 ../cli/src/devices.c:972 ../cli/src/devices.c:1074
+#: ../cli/src/devices.c:1081
+#, c-format
+msgid "Error: %s argument is missing."
+msgstr "Грешка: ÐедоÑтаје аргумент %s."
-# Потребан је бољи превод за ово
-#: examples/python/systray/eggtrayicon.c:112 gnome/applet/eggtrayicon.c:119
-msgid "The orientation of the tray."
-msgstr "УÑмерење обавештајне зоне."
+#: ../cli/src/connections.c:491
+#, c-format
+msgid "Error: %s - no such connection."
+msgstr "Грешка: %s — ова веза не поÑтоји."
-#: gnome/applet/applet-dbus-info.c:852
+#: ../cli/src/connections.c:523 ../cli/src/connections.c:1387
+#: ../cli/src/connections.c:1477 ../cli/src/devices.c:785
+#: ../cli/src/devices.c:852 ../cli/src/devices.c:986 ../cli/src/devices.c:1087
#, c-format
-msgid ""
-"The requested wireless network '%s' does not appear to be in range. A "
-"different wireless network will be used if any are available."
-msgstr "Тражена бежична мрежа „%s“ није у домету. Биће коришћена друга бежична мрежа ако је раÑположива."
+msgid "Unknown parameter: %s\n"
+msgstr "Ðепознати параметар: %s\n"
-#: gnome/applet/applet-dbus.c:573
+#: ../cli/src/connections.c:532
#, c-format
-msgid "Connection to the wireless network '%s' failed.\n"
-msgstr "ÐеуÑпела веза Ñа бежичном мрежом „%s“.\n"
+msgid "Error: no valid parameter specified."
+msgstr "Грешка: није одређен иÑправан параметар."
-#: gnome/applet/applet-dbus.c:578
-msgid "Connection to the wired network failed.\n"
-msgstr "ÐеуÑпела веза Ñа жичаном мрежом.\n"
+#: ../cli/src/connections.c:547 ../cli/src/connections.c:1580
+#: ../cli/src/devices.c:1293 ../cli/src/network-manager.c:359
+#, c-format
+msgid "Error: %s."
+msgstr "Грешка: %s."
+
+#: ../cli/src/connections.c:653
+#, c-format
+msgid "Error: 'con status': %s"
+msgstr "Грешка: „con status“: %s"
-#: gnome/applet/applet.c:194 gnome/applet/applet.c:212
-msgid "NetworkManager Applet"
-msgstr "Ðплет Управник мреже"
+#: ../cli/src/connections.c:655
+#, c-format
+msgid "Error: 'con status': %s; allowed fields: %s"
+msgstr "Грешка: „con status“: %s; дозвољена поља: %s"
-#: gnome/applet/applet.c:196 gnome/applet/applet.c:214
-msgid "Copyright (C) 2004-2005 Red Hat, Inc."
-msgstr "Copyright (C) 2004-2005 Red Hat, Inc."
+#: ../cli/src/connections.c:662
+msgid "Active connections"
+msgstr "Ðктивне везе"
-#: gnome/applet/applet.c:197 gnome/applet/applet.c:215
-msgid ""
-"Notification area applet for managing your network devices and connections."
-msgstr "Ðплет за обавештајну зону за управљање мрежним уређајима и везама."
+#: ../cli/src/connections.c:1030
+#, c-format
+msgid "no active connection on device '%s'"
+msgstr "нема активних веза на уређају „%s“"
+
+#: ../cli/src/connections.c:1038
+#, c-format
+msgid "no active connection or device"
+msgstr "нема активних веза на уређају"
+
+#: ../cli/src/connections.c:1088
+#, c-format
+msgid "device '%s' not compatible with connection '%s'"
+msgstr "уређај „%s“ не подржава везу „%s“"
+
+#: ../cli/src/connections.c:1090
+#, c-format
+msgid "no device found for connection '%s'"
+msgstr "не поÑтоји уређај за везу „%s“"
+
+#: ../cli/src/connections.c:1101
+msgid "activating"
+msgstr "покрећем"
+
+#: ../cli/src/connections.c:1103
+msgid "activated"
+msgstr "покренуто"
+
+#: ../cli/src/connections.c:1106 ../cli/src/connections.c:1129
+#: ../cli/src/connections.c:1162 ../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
+msgid "unknown"
+msgstr "непознато"
+
+#: ../cli/src/connections.c:1115
+msgid "VPN connecting (prepare)"
+msgstr "Повезивање на ВПР(припрема)"
+
+#: ../cli/src/connections.c:1117
+msgid "VPN connecting (need authentication)"
+msgstr "Повезивање на ВПР(потребна пријава)"
+
+#: ../cli/src/connections.c:1119
+msgid "VPN connecting"
+msgstr "Повезивање на ВПÐ"
+
+#: ../cli/src/connections.c:1121
+msgid "VPN connecting (getting IP configuration)"
+msgstr "Повезивање на ВПР(прикупљам ИП подешавања)"
+
+#: ../cli/src/connections.c:1123
+msgid "VPN connected"
+msgstr "Повезани Ñте на ВПÐ"
+
+#: ../cli/src/connections.c:1125
+msgid "VPN connection failed"
+msgstr "Ðије уÑпело повезивање на ВПÐ"
+
+#: ../cli/src/connections.c:1127
+msgid "VPN disconnected"
+msgstr "ВПРвеза је прекинута"
+
+#: ../cli/src/connections.c:1138
+msgid "unknown reason"
+msgstr "непознат разлог"
+
+#: ../cli/src/connections.c:1140
+msgid "none"
+msgstr "ништа"
+
+#: ../cli/src/connections.c:1142
+msgid "the user was disconnected"
+msgstr "кориÑник је откачен Ñа мреже"
+
+#: ../cli/src/connections.c:1144
+msgid "the base network connection was interrupted"
+msgstr "оÑновна мрежна веза је поремећена"
+
+#: ../cli/src/connections.c:1146
+msgid "the VPN service stopped unexpectedly"
+msgstr "ВПРÑÐµÑ€Ð²Ð¸Ñ Ñ˜Ðµ неочекивано изашао"
+
+#: ../cli/src/connections.c:1148
+msgid "the VPN service returned invalid configuration"
+msgstr "ВПРÑÐµÑ€Ð²Ð¸Ñ Ñ˜Ðµ вратио погрешне поÑтавке"
+
+#: ../cli/src/connections.c:1150
+msgid "the connection attempt timed out"
+msgstr "иÑтекло је време за покушај повезивања"
+
+#: ../cli/src/connections.c:1152
+msgid "the VPN service did not start in time"
+msgstr "ВПРÑÐµÑ€Ð²Ð¸Ñ Ð½Ð¸Ñ˜Ðµ покренут на време"
+
+#: ../cli/src/connections.c:1154
+msgid "the VPN service failed to start"
+msgstr "не могу да покренем ВПРÑервиÑ"
+
+#: ../cli/src/connections.c:1156
+msgid "no valid VPN secrets"
+msgstr "ниÑу иÑправне ВПРлозинке"
+
+#: ../cli/src/connections.c:1158
+msgid "invalid VPN secrets"
+msgstr "неиÑправне ВПРлозинке"
+
+#: ../cli/src/connections.c:1160
+msgid "the connection was removed"
+msgstr "веза је уклоњена"
+
+#: ../cli/src/connections.c:1174
+#, c-format
+msgid "state: %s\n"
+msgstr "Ñтање: %s\n"
-#: gnome/applet/applet.c:280
+#: ../cli/src/connections.c:1177 ../cli/src/connections.c:1203
+#, c-format
+msgid "Connection activated\n"
+msgstr "Веза је покренута\n"
+
+#: ../cli/src/connections.c:1180
+#, c-format
+msgid "Error: Connection activation failed."
+msgstr "Грешка: Ðије уÑпело покретање везе."
+
+#: ../cli/src/connections.c:1199
+#, c-format
+msgid "state: %s (%d)\n"
+msgstr "Ñтање: %s (%d)\n"
+
+#: ../cli/src/connections.c:1209
+#, c-format
+msgid "Error: Connection activation failed: %s."
+msgstr "Грешка: Покретање везе није уÑпело: %s."
+
+#: ../cli/src/connections.c:1226 ../cli/src/devices.c:909
+#, c-format
+msgid "Error: Timeout %d sec expired."
+msgstr "Грешка: ИÑтекло је време од %d s."
+
+#: ../cli/src/connections.c:1269
+#, c-format
+msgid "Error: Connection activation failed: %s"
+msgstr "Грешка: Ðије уÑпело покретање везе: %s"
+
+#: ../cli/src/connections.c:1283
+#, c-format
+msgid "Error: Obtaining active connection for '%s' failed."
+msgstr "Грешка: Ðе могу да нађем покренуту везу за „%s“."
+
+#: ../cli/src/connections.c:1292
+#, c-format
+msgid "Active connection state: %s\n"
+msgstr "Стање активне везе: %s\n"
+
+#: ../cli/src/connections.c:1293
+#, c-format
+msgid "Active connection path: %s\n"
+msgstr "Путања до активне везе: %s\n"
+
+#: ../cli/src/connections.c:1347 ../cli/src/connections.c:1468
+#, c-format
+msgid "Error: Unknown connection: %s."
+msgstr "Грешка: Ðепозната веза: %s."
+
+#: ../cli/src/connections.c:1382 ../cli/src/devices.c:980
+#, c-format
+msgid "Error: timeout value '%s' is not valid."
+msgstr "Грешка: није иÑправна вредноÑÑ‚ „%s“ за иÑтек времена."
+
+#: ../cli/src/connections.c:1395 ../cli/src/connections.c:1485
+#, c-format
+msgid "Error: id or uuid has to be specified."
+msgstr "Грешка: морате да задате ид или ууид."
+
+#: ../cli/src/connections.c:1415
+#, c-format
+msgid "Error: No suitable device found: %s."
+msgstr "Грешка: Ðије пронађен одговарајући уређај: %s."
+
+#: ../cli/src/connections.c:1417
+#, c-format
+msgid "Error: No suitable device found."
+msgstr "Грешка: Ðије пронађен одговарајући уређај."
+
+#: ../cli/src/connections.c:1512
+#, c-format
+msgid "Warning: Connection not active\n"
+msgstr "Упозорење: Ðије покренута веза\n"
+
+#: ../cli/src/connections.c:1569
+#, c-format
+msgid "Error: 'con' command '%s' is not valid."
+msgstr "Грешка: „con“ наредба „%s“ није иÑправна."
+
+#: ../cli/src/connections.c:1605
+#, c-format
+msgid "Error: could not connect to D-Bus."
+msgstr "Грешка: не могу да Ñе повежем на Д-БаÑ."
+
+#: ../cli/src/connections.c:1612
+#, c-format
+msgid "Error: Could not get system settings."
+msgstr "Грешка: Ðе могу да добијем ÑиÑтемÑка подешавања."
+
+#: ../cli/src/connections.c:1620
+#, c-format
+msgid "Error: Could not get user settings."
+msgstr "Грешка: Ðе могу да добијем кориÑничка подешавања."
+
+#: ../cli/src/connections.c:1630
+#, c-format
+msgid "Error: Can't obtain connections: settings services are not running."
+msgstr ""
+"Грешка: Ðе могу да нађем везе: управљачки програми за подешавања ниÑу "
+"покренути."
+
+#. 0
+#. 9
+#: ../cli/src/devices.c:61 ../cli/src/devices.c:89 ../cli/src/devices.c:184
+msgid "DEVICE"
+msgstr "УРЕЂÐЈ"
+
+#. 1
+#. 4
+#. 0
+#: ../cli/src/devices.c:63 ../cli/src/devices.c:93
+#: ../cli/src/network-manager.c:36
+msgid "STATE"
+msgstr "СТÐЊЕ"
+
+#: ../cli/src/devices.c:72
+msgid "GENERAL"
+msgstr "ОПШТЕ"
+
+#. 0
+#: ../cli/src/devices.c:73
+msgid "CAPABILITIES"
+msgstr "СПОСОБÐОСТИ"
+
+#. 1
+#: ../cli/src/devices.c:74
+msgid "WIFI-PROPERTIES"
+msgstr "БЕЖИЧÐЕ-ОСОБИÐЕ"
+
+#. 2
+#: ../cli/src/devices.c:75
+msgid "AP"
+msgstr "ÐП"
+
+#. 3
+#: ../cli/src/devices.c:76
+msgid "WIRED-PROPERTIES"
+msgstr "ЖИЧÐÐЕ-ОСОБИÐЕ"
+
+#. 4
+#: ../cli/src/devices.c:77
+msgid "IP4-SETTINGS"
+msgstr "ИП4-ПОДЕШÐÐ’ÐЊÐ"
+
+#. 5
+#: ../cli/src/devices.c:78
+msgid "IP4-DNS"
+msgstr "ИП4-ДÐС"
+
+#. 6
+#: ../cli/src/devices.c:79
+msgid "IP6-SETTINGS"
+msgstr "ИП6-ПОДЕШÐÐ’ÐЊÐ"
+
+#. 7
+#: ../cli/src/devices.c:80
+msgid "IP6-DNS"
+msgstr "ИП6-ДÐС"
+
+#. 2
+#: ../cli/src/devices.c:91
+msgid "DRIVER"
+msgstr "ДРÐЈВЕР"
+
+#. 3
+#: ../cli/src/devices.c:92
+msgid "HWADDR"
+msgstr "Ð¥ÐРДВÐДРЕСÐ"
+
+#. 0
+#: ../cli/src/devices.c:102
+msgid "CARRIER-DETECT"
+msgstr "ÐÐЛÐЖ-ÐОСÐЧÐ"
+
+#. 1
+#: ../cli/src/devices.c:103
+msgid "SPEED"
+msgstr "БРЗИÐÐ"
+
+#. 0
+#: ../cli/src/devices.c:112
+msgid "CARRIER"
+msgstr "ÐОСÐЧ"
+
+#. 0
+#: ../cli/src/devices.c:122
+msgid "WEP"
+msgstr "ВЕП"
+
+#. 1
+#: ../cli/src/devices.c:123
+msgid "WPA"
+msgstr "ВПÐ"
+
+#. 2
+#: ../cli/src/devices.c:124
+msgid "WPA2"
+msgstr "ВПÐ2"
+
+#. 3
+#: ../cli/src/devices.c:125
+msgid "TKIP"
+msgstr "ТКИП"
+
+#. 4
+#: ../cli/src/devices.c:126
+msgid "CCMP"
+msgstr "ЦЦМП"
+
+#. 0
+#: ../cli/src/devices.c:135 ../cli/src/devices.c:146
+msgid "ADDRESS"
+msgstr "ÐДРЕСÐ"
+
+#. 1
+#: ../cli/src/devices.c:136 ../cli/src/devices.c:147
+msgid "PREFIX"
+msgstr "ПРЕФИКС"
+
+#. 2
+#: ../cli/src/devices.c:137 ../cli/src/devices.c:148
+msgid "GATEWAY"
+msgstr "ПРОЛÐЗ"
+
+#. 0
+#: ../cli/src/devices.c:157 ../cli/src/devices.c:166
+msgid "DNS"
+msgstr "ДÐС"
+
+#. 0
+#: ../cli/src/devices.c:175
+msgid "SSID"
+msgstr "ССИД"
+
+#. 1
+#: ../cli/src/devices.c:176
+msgid "BSSID"
+msgstr "БССИД"
+
+#. 2
+#: ../cli/src/devices.c:177
+msgid "MODE"
+msgstr "МОД"
+
+#. 3
+#: ../cli/src/devices.c:178
+msgid "FREQ"
+msgstr "ФРЕК"
+
+#. 4
+#: ../cli/src/devices.c:179
+msgid "RATE"
+msgstr "ПРОТОК"
+
+#. 5
+#: ../cli/src/devices.c:180
+msgid "SIGNAL"
+msgstr "СИГÐÐЛ"
+
+#. 6
+#: ../cli/src/devices.c:181
+msgid "SECURITY"
+msgstr "СИГУРÐОСТ"
+
+#. 7
+#: ../cli/src/devices.c:182
+msgid "WPA-FLAGS"
+msgstr "ВПÐ-ЗÐСТÐВИЦЕ"
+
+#. 8
+#: ../cli/src/devices.c:183
+msgid "RSN-FLAGS"
+msgstr "РСÐ-ЗÐСТÐВИЦЕ"
+
+#. 10
+#: ../cli/src/devices.c:185
+msgid "ACTIVE"
+msgstr "ÐКТИВÐО"
+
+#: ../cli/src/devices.c:208
#, c-format
msgid ""
-"<span weight=\"bold\" size=\"larger\">VPN Login Failure</span>\n"
+"Usage: nmcli dev { COMMAND | help }\n"
+"\n"
+" COMMAND := { status | list | disconnect | wifi }\n"
"\n"
-"Could not start the VPN connection '%s' due to a login failure.\n"
+" status\n"
+" list [iface <iface>]\n"
+" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
+" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
"\n"
-"The VPN service said: \"%s\""
msgstr ""
-"<span weight=\"bold\" size=\"larger\">Пријава на VPN није уÑпела</span>\n"
+"Употреба: nmcli уређај { ÐÐРЕДБР| help }\n"
+"\n"
+" ÐÐРЕДБР:= { status | list | disconnect | wifi }\n"
"\n"
-"VPN веза Ñа мрежом „%s“ није оÑтварена јер пријава није уÑпела.\n"
+" status\n"
+" list [iface <iface>]\n"
+" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
+" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
"\n"
-"Порука VPN ÑервиÑа је била : „%s“"
-#: gnome/applet/applet.c:341
+#: ../cli/src/devices.c:228
+msgid "unmanaged"
+msgstr "неподешено"
+
+#: ../cli/src/devices.c:230
+msgid "unavailable"
+msgstr "недоÑтупно"
+
+#: ../cli/src/devices.c:232 ../cli/src/network-manager.c:91
+msgid "disconnected"
+msgstr "није повезано"
+
+#: ../cli/src/devices.c:234
+msgid "connecting (prepare)"
+msgstr "повезујем Ñе (припрема)"
+
+#: ../cli/src/devices.c:236
+msgid "connecting (configuring)"
+msgstr "повезујем Ñе (подешавам)"
+
+#: ../cli/src/devices.c:238
+msgid "connecting (need authentication)"
+msgstr "повезујем Ñе (потребна пријава)"
+
+#: ../cli/src/devices.c:240
+msgid "connecting (getting IP configuration)"
+msgstr "повезујем Ñе (преузимам ИП подешавања)"
+
+#: ../cli/src/devices.c:242 ../cli/src/network-manager.c:89
+msgid "connected"
+msgstr "повезан"
+
+#: ../cli/src/devices.c:244
+msgid "connection failed"
+msgstr "повезивање није уÑпело"
+
+#: ../cli/src/devices.c:267 ../cli/src/devices.c:424
+msgid "Unknown"
+msgstr "Ðепознато"
+
+#: ../cli/src/devices.c:299
+msgid "(none)"
+msgstr "(ништа)"
+
+#: ../cli/src/devices.c:324
+#, c-format
+msgid "%s: error converting IP4 address 0x%X"
+msgstr "%s: грешка при преводу ИП4 адреÑе 0x%X"
+
+#: ../cli/src/devices.c:393
+#, c-format
+msgid "%u MHz"
+msgstr "%u MHz"
+
+#: ../cli/src/devices.c:394
+#, c-format
+msgid "%u MB/s"
+msgstr "%u MB/s"
+
+#: ../cli/src/devices.c:403
+msgid "Encrypted: "
+msgstr "Шифровано: "
+
+#: ../cli/src/devices.c:408
+msgid "WEP "
+msgstr "ВЕП"
+
+#: ../cli/src/devices.c:410
+msgid "WPA "
+msgstr "ВПÐ"
+
+#: ../cli/src/devices.c:412
+msgid "WPA2 "
+msgstr "ЦПÐ2"
+
+#: ../cli/src/devices.c:415
+msgid "Enterprise "
+msgstr "Предузимљиво"
+
+#: ../cli/src/devices.c:424
+msgid "Ad-Hoc"
+msgstr "Ðд-Хок"
+
+#: ../cli/src/devices.c:424
+msgid "Infrastructure"
+msgstr "ИнфраÑтруктурно"
+
+#: ../cli/src/devices.c:486
+#, c-format
+msgid "Error: 'dev list': %s"
+msgstr "Грешка: „dev list“: %s"
+
+#: ../cli/src/devices.c:488
+#, c-format
+msgid "Error: 'dev list': %s; allowed fields: %s"
+msgstr "Грешка: „dev list“: %s; дозвољена поља: %s"
+
+#: ../cli/src/devices.c:497
+msgid "Device details"
+msgstr "Подаци о драјверу"
+
+#: ../cli/src/devices.c:527 ../cli/src/devices.c:925
+msgid "(unknown)"
+msgstr "(непознато)"
+
+#: ../cli/src/devices.c:528
+msgid "unknown)"
+msgstr "непознато)"
+
+#: ../cli/src/devices.c:554
+#, c-format
+msgid "%u Mb/s"
+msgstr "%u Mb/s"
+
+#. Print header
+#. "WIRED-PROPERTIES"
+#: ../cli/src/devices.c:627
+msgid "on"
+msgstr "укљ"
+
+#: ../cli/src/devices.c:627
+msgid "off"
+msgstr "иÑкљ"
+
+#: ../cli/src/devices.c:808
+#, c-format
+msgid "Error: 'dev status': %s"
+msgstr "Грешка: „dev status“: %s"
+
+#: ../cli/src/devices.c:810
+#, c-format
+msgid "Error: 'dev status': %s; allowed fields: %s"
+msgstr "Грешка „dev status“: %s; дозвољена поља: %s"
+
+#: ../cli/src/devices.c:817
+msgid "Status of devices"
+msgstr "Стање уређаја"
+
+#: ../cli/src/devices.c:845
+#, c-format
+msgid "Error: '%s' argument is missing."
+msgstr "Грешка: недоÑтаје аргумент „%s“."
+
+#: ../cli/src/devices.c:874 ../cli/src/devices.c:1013
+#: ../cli/src/devices.c:1136
+#, c-format
+msgid "Error: Device '%s' not found."
+msgstr "Грешка: Ðије нађен уређај „%s“."
+
+#: ../cli/src/devices.c:897
+#, c-format
+msgid "Success: Device '%s' successfully disconnected."
+msgstr "Веза на уређају „%s“ је уÑпешно прекинута."
+
+#: ../cli/src/devices.c:922
+#, c-format
+msgid "Error: Device '%s' (%s) disconnecting failed: %s"
+msgstr "Грешка: Ðе могу да прекинем везу на уређају „%s“ (%s): %s"
+
+#: ../cli/src/devices.c:930
+#, c-format
+msgid "Device state: %d (%s)\n"
+msgstr "Стање уређаја: %d (%s)\n"
+
+#: ../cli/src/devices.c:994
+#, c-format
+msgid "Error: iface has to be specified."
+msgstr "Грешка: морате да задате iface."
+
+#: ../cli/src/devices.c:1112
+#, c-format
+msgid "Error: 'dev wifi': %s"
+msgstr "Грешка: „dev wifi“: %s"
+
+#: ../cli/src/devices.c:1114
#, c-format
+msgid "Error: 'dev wifi': %s; allowed fields: %s"
+msgstr "Грешка: „dev wifi“: %s; дозвољена поља: %s"
+
+#: ../cli/src/devices.c:1121
+msgid "WiFi scan list"
+msgstr "СпиÑак претраге бежичних мрежа"
+
+#: ../cli/src/devices.c:1156 ../cli/src/devices.c:1210
+#, c-format
+msgid "Error: Access point with hwaddr '%s' not found."
+msgstr "Грешка: Ðије нађена приÑтупна тачка Ñа хардверÑком адреÑом „%s“."
+
+#: ../cli/src/devices.c:1173
+#, c-format
+msgid "Error: Device '%s' is not a WiFi device."
+msgstr "Грешка: „%s“ није бежични мрежни уређај."
+
+#: ../cli/src/devices.c:1237
+#, c-format
+msgid "Error: 'dev wifi' command '%s' is not valid."
+msgstr "Грешка: „dev wifi“ наредба „%s“ није иÑправна."
+
+#: ../cli/src/devices.c:1284
+#, c-format
+msgid "Error: 'dev' command '%s' is not valid."
+msgstr "Грешка: „dev“ наредба „%s“ није иÑправна."
+
+#: ../cli/src/network-manager.c:35
+msgid "RUNNING"
+msgstr "ПОКРЕÐУТО"
+
+#. 1
+#: ../cli/src/network-manager.c:37
+msgid "NET-ENABLED"
+msgstr "МРЕЖÐ-ОМОГУЋЕÐÐ"
+
+#. 2
+#: ../cli/src/network-manager.c:38
+msgid "WIFI-HARDWARE"
+msgstr "WIFI-УРЕЂÐЈ"
+
+#. 3
+#: ../cli/src/network-manager.c:39
+msgid "WIFI"
+msgstr "WIFI"
+
+#. 4
+#: ../cli/src/network-manager.c:40
+msgid "WWAN-HARDWARE"
+msgstr "WWAN-УРЕЂÐЈ"
+
+#. 5
+#: ../cli/src/network-manager.c:41
+msgid "WWAN"
+msgstr "WWAN"
+
+#: ../cli/src/network-manager.c:64
+#, 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 ""
-"<span weight=\"bold\" size=\"larger\">VPN Login Message</span>\n"
+"Usage: nmcli nm { COMMAND | help }\n"
+"\n"
+" COMMAND := { status | enable | sleep | wifi | wwan }\n"
"\n"
-"VPN connection '%s' said:\n"
+" status\n"
+" enable [true|false]\n"
+" sleep [true|false]\n"
+" wifi [on|off]\n"
+" wwan [on|off]\n"
"\n"
-"\"%s\""
msgstr ""
-"<span weight=\"bold\" size=\"larger\">Порука при пријави на VPN</span>\n"
+"Употреба: nmcli nm { ÐÐРЕДБР| help }\n"
+"\n"
+" ÐÐРЕДБР:= { status | enable| sleep | wifi | wwan }\n"
"\n"
-"Порука VPN везе „%s“ је:\n"
+" status\n"
+" enable [true|false]\n"
+" sleep [true|false]\n"
+" wifi [on|off]\n"
+" wwan [on|off]\n"
"\n"
-"„%s“"
-#: gnome/applet/applet.c:559 gnome/applet/applet.c:1922
-#: gnome/applet/other-network-dialog.c:315
-#: gnome/applet/passphrase-dialog.c:430
+#: ../cli/src/network-manager.c:85
+msgid "asleep"
+msgstr "уÑпаван"
+
+#: ../cli/src/network-manager.c:87
+msgid "connecting"
+msgstr "повезује Ñе"
+
+#: ../cli/src/network-manager.c:128
+#, c-format
+msgid "Error: 'nm status': %s"
+msgstr "Грешка: „nm status“: %s"
+
+#: ../cli/src/network-manager.c:130
+#, c-format
+msgid "Error: 'nm status': %s; allowed fields: %s"
+msgstr "Грешка: „nm status“: %s; дозвољена поља: %s"
+
+#: ../cli/src/network-manager.c:137
+msgid "NetworkManager status"
+msgstr "Стање Управника мреже"
+
+#. Print header
+#: ../cli/src/network-manager.c:144 ../cli/src/network-manager.c:145
+#: ../cli/src/network-manager.c:146 ../cli/src/network-manager.c:147
+#: ../cli/src/network-manager.c:154 ../cli/src/network-manager.c:247
+#: ../cli/src/network-manager.c:296 ../cli/src/network-manager.c:328
+msgid "enabled"
+msgstr "омогућен"
+
+#: ../cli/src/network-manager.c:144 ../cli/src/network-manager.c:145
+#: ../cli/src/network-manager.c:146 ../cli/src/network-manager.c:147
+#: ../cli/src/network-manager.c:154 ../cli/src/network-manager.c:247
+#: ../cli/src/network-manager.c:296 ../cli/src/network-manager.c:328
+msgid "disabled"
+msgstr "онемогућен"
+
+#: ../cli/src/network-manager.c:152
+msgid "running"
+msgstr "покренут"
+
+#: ../cli/src/network-manager.c:152
+msgid "not running"
+msgstr "није покренут"
+
+#: ../cli/src/network-manager.c:175
+#, c-format
+#| msgid "Error: could not connect to D-Bus."
+msgid "Error: Couldn't connect to system bus: %s"
+msgstr "Грешка: не могу да Ñе повежем на ÑиÑтемÑку магиÑтралу: %s"
+
+#: ../cli/src/network-manager.c:186
+#, c-format
+#| msgid "Error: could not connect to D-Bus."
+msgid "Error: Couldn't create D-Bus object proxy."
+msgstr "Грешка: не могу да образујем Ð”Ð‘Ð°Ñ Ð¿Ð¾Ñредника."
+
+#: ../cli/src/network-manager.c:192
+#, c-format
+#| msgid "Error: 'con list': %s"
+msgid "Error in sleep: %s"
+msgstr "Грешка при уÑпављивању: %s"
+
+#: ../cli/src/network-manager.c:237 ../cli/src/network-manager.c:286
+#: ../cli/src/network-manager.c:318
+#, c-format
+msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
+msgstr "Грешка: „--fields“ вредноÑÑ‚ „%s“ није дозвољена овде; дозвољене Ñу: %s"
+
+#: ../cli/src/network-manager.c:245
+#| msgid "WiFi enabled"
+msgid "Networking enabled"
+msgstr "Умрежавање је омогућено"
+
+#: ../cli/src/network-manager.c:256
+#, c-format
+#| msgid "Error: invalid 'wwan' parameter: '%s'."
+msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
+msgstr ""
+"Грешка: неиÑправан „enable“ параметар: „%s“; дозвољени Ñу „true“ и „false“."
+
+#: ../cli/src/network-manager.c:265
+#, c-format
+#| msgid "Error: Could not connect to NetworkManager."
+msgid "Error: Sleeping status is not exported by NetworkManager."
+msgstr "Грешка: Управника мреже није извезао Ñтање уÑпављивања."
+
+#: ../cli/src/network-manager.c:273
+#, c-format
+#| msgid "Error: invalid 'wifi' parameter: '%s'."
+msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
+msgstr ""
+"Грешка: неиÑправан „sleep“ параметар: „%s“; дозвољени Ñу „true“ и „false“."
+
+#: ../cli/src/network-manager.c:294
+msgid "WiFi enabled"
+msgstr "WiFi омогућен"
+
+#: ../cli/src/network-manager.c:305
+#, c-format
+msgid "Error: invalid 'wifi' parameter: '%s'."
+msgstr "Грешка: неиÑправан „wifi“ параметар: „%s“."
+
+#: ../cli/src/network-manager.c:326
+msgid "WWAN enabled"
+msgstr "WWAN омогућен"
+
+#: ../cli/src/network-manager.c:337
+#, c-format
+msgid "Error: invalid 'wwan' parameter: '%s'."
+msgstr "Грешка: неиÑправан „wwan“ параметар: „%s“."
+
+#: ../cli/src/network-manager.c:348
+#, c-format
+msgid "Error: 'nm' command '%s' is not valid."
+msgstr "Грешка: „nm“ наредба „'%s“ није иÑправна."
+
+#: ../cli/src/nmcli.c:69
+#, c-format
msgid ""
-"The NetworkManager Applet could not find some required resources (the glade "
-"file was not found)."
-msgstr "Ðплет Управник мреже није могао да пронађе неке од потребних реÑурÑа (глејд датотека није пронађена)."
+"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] <field1,field2,...>|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 ""
+"Употреба: %s [ОПЦИЈЕ] ОБЈЕКÐТ { ÐÐРЕДБР| help }\n"
+"\n"
+"ОПЦИЈЕ\n"
+" -t[erse] Ñажет иÑпиÑ\n"
+" -p[retty] уређен иÑпиÑ\n"
+" -m[ode] tabular|multiline режим иÑпиÑа\n"
+" -f[ields] <field1,field2,...>|all|common одређује поља за иÑпиÑ\n"
+" -e[scape] yes|no не додаје раздвојнике колона у "
+"вредноÑтима\n"
+" -v[ersion] иÑпиÑује издање програма\n"
+" -h[elp] иÑпиÑује ову помоћ\n"
+"\n"
+"ОБЈЕКÐТ\n"
+" nm Ñтање Управника везама\n"
+" con везе Управника везама\n"
+" dev уређаји Управника мрежама\n"
+"\n"
-#: gnome/applet/applet.c:572
+#: ../cli/src/nmcli.c:113
#, c-format
-msgid "The network device \"%s (%s)\" does not support wireless scanning."
-msgstr "Мрежни уређај „%s (%s)“ не подржава потрагу за бежичним мрежама."
+msgid "Error: Object '%s' is unknown, try 'nmcli help'."
+msgstr "Грешка: „%s“ је непознати објекат, погледајте „nmcli help“."
-#: gnome/applet/applet.c:579
+#: ../cli/src/nmcli.c:143
#, c-format
-msgid "The network device \"%s (%s)\" does not support link detection."
-msgstr "Мрежни уређај „%s (%s)“ не подржава откривање везе."
+msgid "Error: Option '--terse' is specified the second time."
+msgstr "Грешка: Опција „--terse“ је задата по други пут."
-#: gnome/applet/applet.c:700
+#: ../cli/src/nmcli.c:148
#, c-format
-msgid "Preparing device %s for the wired network..."
-msgstr "Припрема уређаја %s за жичану мрежу..."
+msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
+msgstr "Грешка: Опције „--terse“ и „--pretty“ Ñе међуÑобно иÑкључују."
-#: gnome/applet/applet.c:702
+#: ../cli/src/nmcli.c:156
#, c-format
-msgid "Preparing device %s for the wireless network '%s'..."
-msgstr "Припрема уређаја %s за бежичну мрежу „%s“..."
+msgid "Error: Option '--pretty' is specified the second time."
+msgstr "Грешка: Опција „--pretty“ је задата по други пут."
-#: gnome/applet/applet.c:709
+#: ../cli/src/nmcli.c:161
#, c-format
-msgid "Configuring device %s for the wired network..."
-msgstr "Подешавање уређаја %s за бежичну мрежу..."
+msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
+msgstr "Грешка: Опције „--pretty“ и „--terse“ Ñе међуÑобно иÑкључују."
-#: gnome/applet/applet.c:711
+#: ../cli/src/nmcli.c:171 ../cli/src/nmcli.c:187
#, c-format
-msgid "Attempting to join the wireless network '%s'..."
-msgstr "Покушај приÑтупа бежичној мрежи „%s“..."
+msgid "Error: missing argument for '%s' option."
+msgstr "Грешка: недоÑтаје аргумент уз опцију „%s“."
-#: gnome/applet/applet.c:718
+#: ../cli/src/nmcli.c:180 ../cli/src/nmcli.c:196
#, c-format
-msgid "Waiting for Network Key for the wireless network '%s'..."
-msgstr "Чекање на мрежни кључ за бежичну мрежу „%s“..."
+msgid "Error: '%s' is not valid argument for '%s' option."
+msgstr "Грешка: „%s“ није иÑправан аргумент уз опцију „%s“."
-#: gnome/applet/applet.c:725 gnome/applet/applet.c:734
-msgid "Requesting a network address from the wired network..."
-msgstr "Потраживање мрежне адреÑе за жичану мрежу..."
+#: ../cli/src/nmcli.c:203
+#, c-format
+msgid "Error: fields for '%s' options are missing."
+msgstr "Грешка: недоÑтају поља за „%s“ опцију."
-#: gnome/applet/applet.c:727 gnome/applet/applet.c:736
+#: ../cli/src/nmcli.c:209
#, c-format
-msgid "Requesting a network address from the wireless network '%s'..."
-msgstr "Потраживање мрежне адреÑе за бежичну мрежу „%s“..."
+msgid "nmcli tool, version %s\n"
+msgstr "nmcli алат, издање %s\n"
-#: gnome/applet/applet.c:743
-msgid "Finishing connection to the wired network..."
-msgstr "ОбуÑтављање везе Ñа жичаном мрежом..."
+#: ../cli/src/nmcli.c:215
+#, c-format
+msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
+msgstr "Грешка: Опција „%s“ је непозната, пробајте „nmcli -help“."
-#: gnome/applet/applet.c:745
+#: ../cli/src/nmcli.c:234
#, c-format
-msgid "Finishing connection to the wireless network '%s'..."
-msgstr "ОбуÑтављање везе Ñа бежичном мрежом „%s“..."
+msgid "Caught signal %d, shutting down..."
+msgstr "Добио Ñам Ñигнал %d, иÑкључујем..."
-#: gnome/applet/applet.c:791
-msgid "NetworkManager is not running"
-msgstr "Управљач мреже није покренут"
+#: ../cli/src/nmcli.c:259
+#, c-format
+msgid "Error: Could not connect to NetworkManager."
+msgstr "Грешка: Ðе могу да Ñе повежем на Управника мреже."
-#: gnome/applet/applet.c:802
-msgid "No network connection"
-msgstr "Ðема мрежних веза"
+#: ../cli/src/nmcli.c:275
+msgid "Success"
+msgstr "УÑпешно"
-#: gnome/applet/applet.c:809
-msgid "Wired network connection"
-msgstr "Жична мрежна веза"
+#: ../cli/src/settings.c:411
+#, c-format
+msgid "%d (hex-ascii-key)"
+msgstr "%d (хекÑадекадни-аÑки-кључ)"
-# FIXME Ðд-хок
-#: gnome/applet/applet.c:816
-msgid "Connected to an Ad-Hoc wireless network"
-msgstr "Повезан Ñа ад-хок бежичном мрежом"
+#: ../cli/src/settings.c:413
+#, c-format
+msgid "%d (104/128-bit passphrase)"
+msgstr "%d (104/128-битна лозинка)"
-#: gnome/applet/applet.c:830
+#: ../cli/src/settings.c:416
#, c-format
-msgid "Wireless network connection to '%s' (%d%%)"
-msgstr "Бежична мрежна веза Ñа „%s“ (%d%%)"
+msgid "%d (unknown)"
+msgstr "%d (непознато)"
-#: gnome/applet/applet.c:1181
-msgid "Other Wireless Networks..."
-msgstr "ОÑтале бежичне мреже..."
+#: ../cli/src/settings.c:442
+msgid "0 (unknown)"
+msgstr "0 (напознато)"
-#: gnome/applet/applet.c:1202
-msgid "Create new Wireless Network..."
-msgstr "Ðаправи нову бежичну мрежу..."
+#: ../cli/src/settings.c:448
+msgid "any, "
+msgstr "вило које, "
-#: gnome/applet/applet.c:1315
-msgid "VPN Connections"
-msgstr "VPN везе"
+#: ../cli/src/settings.c:450
+msgid "900 MHz, "
+msgstr "900 MHz, "
-#: gnome/applet/applet.c:1337
-msgid "Disconnect VPN..."
-msgstr "ИÑкључи VPN..."
+#: ../cli/src/settings.c:452
+msgid "1800 MHz, "
+msgstr "1800 MHz, "
-#: gnome/applet/applet.c:1366
-msgid "No network devices have been found"
-msgstr "Ðије пронађен ниједан мрежни уређај"
+#: ../cli/src/settings.c:454
+msgid "1900 MHz, "
+msgstr "1900 MHz, "
-#: gnome/applet/applet.c:1529
-msgid "NetworkManager is not running..."
-msgstr "Управљач мрежом није покренут..."
+#: ../cli/src/settings.c:456
+msgid "850 MHz, "
+msgstr "850 MHz, "
-#: gnome/applet/applet.c:1599 gnome/applet/applet.c:1647
-msgid "Pause Wireless Scanning"
-msgstr "ОбуÑтави тражење бежичне мреже"
+#: ../cli/src/settings.c:458
+msgid "WCDMA 3GPP UMTS 2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: gnome/applet/applet.c:1604
-msgid "Resume Wireless Scanning"
-msgstr "ÐаÑтави тражење бежичне мреже"
+#: ../cli/src/settings.c:460
+msgid "WCDMA 3GPP UMTS 1800 MHz, "
+msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: gnome/applet/applet.c:1614 gnome/applet/applet.c:1653
-msgid "Stop All Wireless Devices"
-msgstr "ЗауÑтави Ñве бежичне уређаје"
+#: ../cli/src/settings.c:462
+msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: gnome/applet/applet.c:1619
-msgid "Start All Wireless Devices"
-msgstr "Покрени Ñве бежичне уређаје"
+#: ../cli/src/settings.c:464
+msgid "WCDMA 3GPP UMTS 800 MHz, "
+msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: gnome/applet/applet.c:1662
-msgid "Help"
-msgstr "Помоћ"
+#: ../cli/src/settings.c:466
+msgid "WCDMA 3GPP UMTS 850 MHz, "
+msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: gnome/applet/applet.c:1669
-msgid "About"
-msgstr "О програму"
+#: ../cli/src/settings.c:468
+msgid "WCDMA 3GPP UMTS 900 MHz, "
+msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: gnome/applet/applet.c:2070
-msgid ""
-"The NetworkManager applet could not find some required resources. It cannot "
-"continue.\n"
-msgstr "Управљач мрежом није уÑпео да пронађе неопходне реÑурÑе и не може да наÑтави рад.\n"
+#: ../cli/src/settings.c:470
+msgid "WCDMA 3GPP UMTS 1700 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700 MHz, "
+
+#: ../cli/src/settings.c:554 ../cli/src/settings.c:721
+msgid "auto"
+msgstr "аутоматÑки"
+
+#: ../cli/src/settings.c:716 ../cli/src/settings.c:719
+#: ../cli/src/settings.c:720 ../cli/src/utils.c:172
+msgid "not set"
+msgstr "није изабрано"
+
+#: ../cli/src/utils.c:124
+#, c-format
+msgid "field '%s' has to be alone"
+msgstr "поље „%s“ мора да буде празно"
+
+#: ../cli/src/utils.c:127
+#, c-format
+msgid "invalid field '%s'"
+msgstr "неиÑправно поље „%s“"
-#: gnome/applet/gtkcellrendererprogress.c:243
-#: gnome/applet/gtkcellrendererprogress.c:301
+#: ../cli/src/utils.c:146
#, c-format
-msgid "progress bar label|%d %%"
-msgstr "%d %%"
+msgid "Option '--terse' requires specifying '--fields'"
+msgstr "Опција „--terse“ захтева опцију „--fields“"
-#: gnome/applet/menu-items.c:91
+#: ../cli/src/utils.c:150
#, c-format
-msgid "Wired Network (%s)"
-msgstr "Жичана мрежа (%s)"
+msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
+msgstr "Опција „--terse“ захтева опцију „--fields“, а не „%s“"
-#: gnome/applet/menu-items.c:93
-msgid "Wired Network"
-msgstr "Жичана мрежа"
+#: ../libnm-util/crypto.c:120
+#, c-format
+msgid "PEM key file had no end tag '%s'."
+msgstr "ПЕМ датотека Ñа кључем нема завршну ознаку „%s“."
-#: gnome/applet/menu-items.c:166
+#: ../libnm-util/crypto.c:130
#, c-format
-msgid "Wireless Network (%s)"
-msgid_plural "Wireless Networks (%s)"
-msgstr[0] "Бежична мрежа (%s)"
-msgstr[1] "Бежичне мреже (%s)"
-msgstr[2] "Бежичних мрежа (%s)"
+msgid "Doesn't look like a PEM private key file."
+msgstr "Ðе изгледа као приватна ПЕМ датотека Ñа кључем."
-#: gnome/applet/menu-items.c:168
-msgid "Wireless Network"
-msgid_plural "Wireless Networks"
-msgstr[0] "Бежична мрежа"
-msgstr[1] "Бежичне мреже"
-msgstr[2] "Бежичне мреже"
+#: ../libnm-util/crypto.c:138
+#, c-format
+msgid "Not enough memory to store PEM file data."
+msgstr "Ðема довољно меморије за чување ПЕМ података."
-#: gnome/applet/menu-items.c:294
-msgid " (invalid Unicode)"
-msgstr " (неиÑправан Уникод)"
+#: ../libnm-util/crypto.c:154
+#, c-format
+msgid "Malformed PEM file: Proc-Type was not first tag."
+msgstr "Лоша ПЕМ датотека: Proc-Type није прва ознака."
-#: gnome/applet/other-network-dialog.c:148
-#: gnome/applet/passphrase-dialog.c:164
-#: gnome/applet/applet.glade.h:27
-msgid "Passphrase:"
-msgstr "Лозинка:"
+#: ../libnm-util/crypto.c:162
+#, c-format
+msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
+msgstr "Лоша ПЕМ датотека: непозната Proc-Type ознака „%s“."
-#: gnome/applet/other-network-dialog.c:151
-#: gnome/applet/passphrase-dialog.c:167
-msgid "Ascii Key:"
-msgstr "ÐСКРИ кључ:"
+#: ../libnm-util/crypto.c:172
+#, c-format
+msgid "Malformed PEM file: DEK-Info was not the second tag."
+msgstr "Лоша ПЕМ датотека: DEK-Info није друга ознака."
-#: gnome/applet/other-network-dialog.c:154
-#: gnome/applet/passphrase-dialog.c:170
-msgid "Hex Key:"
-msgstr "ХекÑа кључ:"
+#: ../libnm-util/crypto.c:183
+#, c-format
+msgid "Malformed PEM file: no IV found in DEK-Info tag."
+msgstr "Лоша ПЕМ датотека: није дат ИВ унутар DEK-Info ознаке."
-#: gnome/applet/other-network-dialog.c:229
-msgid "Create new wireless network"
-msgstr "Ðаправи нову бежичну мрежу"
+#: ../libnm-util/crypto.c:190
+#, c-format
+msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
+msgstr "Лоша ПЕМ датотека: неиÑправан формат за ИВ унутар DEK-Info ознаке."
-#: gnome/applet/other-network-dialog.c:230
-msgid ""
-"Enter the ESSID and security settings of the wireless network you wish to "
-"create."
-msgstr "УнеÑите ESSID и безбедноÑне поÑтавке бежичне мреже коју желите да начините."
+#: ../libnm-util/crypto.c:203
+#, c-format
+msgid "Malformed PEM file: unknown private key cipher '%s'."
+msgstr "Лоша ПЕМ датотека: непозната шифра приватног кључа „%s“."
-#: gnome/applet/other-network-dialog.c:235
-msgid "Custom wireless network"
-msgstr "КориÑничка бежична мрежа"
+#: ../libnm-util/crypto.c:222
+#, c-format
+msgid "Could not decode private key."
+msgstr "Ðе могу да дешифрујем приватни кључ."
-#: gnome/applet/other-network-dialog.c:236
-msgid "Enter the ESSID of the wireless network to which you wish to connect."
-msgstr "УнеÑите ESSID бежичне мреже Ñа којом желите да Ñе повежете."
+#: ../libnm-util/crypto.c:267
+#, c-format
+msgid "PEM certificate '%s' had no end tag '%s'."
+msgstr "ПЕМ Ñертификат „%s“ нема завршну ознаку „%s“."
-#: gnome/applet/vpn-password-dialog.c:105
+#: ../libnm-util/crypto.c:277
#, c-format
-msgid "You must log in to access the Virtual Private Network '%s'."
-msgstr "Морате бити пријављени како биÑте кориÑтили виртуелну приватну мрежу „%s“."
+msgid "Failed to decode certificate."
+msgstr "Ðе могу да дешифрујем Ñертификат."
-#: gnome/applet/applet.glade.h:1
-msgid " "
-msgstr " "
+#: ../libnm-util/crypto.c:286
+#, c-format
+msgid "Not enough memory to store certificate data."
+msgstr "Ðема довољно меморије за чување података о Ñертификату."
-#: gnome/applet/applet.glade.h:2
-msgid "*"
-msgstr "*"
+#: ../libnm-util/crypto.c:294
+#, c-format
+msgid "Not enough memory to store file data."
+msgstr "Ðема довољно меморије за чување података о датотеци."
-#: gnome/applet/applet.glade.h:3
-msgid ""
-"128-bit Passphrase (WEP)\n"
-"Ascii Key (WEP)\n"
-"Hex Key (WEP)"
+#: ../libnm-util/crypto.c:324
+#, c-format
+msgid "IV must be an even number of bytes in length."
+msgstr "IV мора да Ñадржи паран број битова."
+
+#: ../libnm-util/crypto.c:333
+#, c-format
+msgid "Not enough memory to store the IV."
+msgstr "Ðема довољно меморије за чување IV."
+
+#: ../libnm-util/crypto.c:344
+#, c-format
+msgid "IV contains non-hexadecimal digits."
+msgstr "IV Ñадржи цифре које ниÑу хекÑадецималне."
+
+#: ../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
+#, c-format
+msgid "Private key cipher '%s' was unknown."
+msgstr "Лозинка приватног кључа „%s“ није позната."
+
+#: ../libnm-util/crypto.c:391
+#, c-format
+msgid "Not enough memory to decrypt private key."
+msgstr "Ðема довољно меморије за дешифровање приватног кључа."
+
+#: ../libnm-util/crypto.c:511
+#, c-format
+msgid "Unable to determine private key type."
+msgstr "Ðе могу да одредим врÑту приватног кључа."
+
+#: ../libnm-util/crypto.c:530
+#, c-format
+msgid "Not enough memory to store decrypted private key."
+msgstr "Ðема довољно меморије за чување дешифрованог приватног кључа."
+
+#: ../libnm-util/crypto_gnutls.c:49
+msgid "Failed to initialize the crypto engine."
+msgstr "Ðе могу да покренем програм за шифровање."
+
+#: ../libnm-util/crypto_gnutls.c:93
+#, c-format
+msgid "Failed to initialize the MD5 engine: %s / %s."
+msgstr "Ðе могу да покренем програм за MD5 Ñуму: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:156
+#, c-format
+msgid "Invalid IV length (must be at least %zd)."
+msgstr "ÐеиÑправна IV дужина (мора да буде бар %zd)."
+
+#: ../libnm-util/crypto_gnutls.c:165 ../libnm-util/crypto_nss.c:188
+#, c-format
+msgid "Not enough memory for decrypted key buffer."
+msgstr "Ðема довољно меморије у оÑтави за дешифровани кључ."
+
+#: ../libnm-util/crypto_gnutls.c:173
+#, c-format
+msgid "Failed to initialize the decryption cipher context: %s / %s."
+msgstr "Ðе могу да покренем дешифровање лозинке: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:182
+#, c-format
+msgid "Failed to set symmetric key for decryption: %s / %s."
+msgstr "Ðе могу да поÑтавим Ñиметрични кључ за дешифровање: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:191
+#, c-format
+msgid "Failed to set IV for decryption: %s / %s."
+msgstr "Ðе могу да поÑтавим ИВ за дешифровање: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:200
+#, c-format
+msgid "Failed to decrypt the private key: %s / %s."
+msgstr "Ðе могу да дешифрујем приватни кључ: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:210 ../libnm-util/crypto_nss.c:267
+#, c-format
+msgid "Failed to decrypt the private key: unexpected padding length."
+msgstr "Ðе могу да дешифрујем приватни кључ: неочекивана дужина."
+
+#: ../libnm-util/crypto_gnutls.c:221 ../libnm-util/crypto_nss.c:278
+#, c-format
+msgid "Failed to decrypt the private key."
+msgstr "Ðе могу да дешифрујем приватни кључ."
+
+#: ../libnm-util/crypto_gnutls.c:286 ../libnm-util/crypto_nss.c:356
+#, c-format
+msgid "Could not allocate memory for encrypting."
+msgstr "Ðе могу да резервишем меморију за дешифровање."
+
+#: ../libnm-util/crypto_gnutls.c:294
+#, c-format
+msgid "Failed to initialize the encryption cipher context: %s / %s."
+msgstr "Ðе могу да покренем шифровање лозинке: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:303
+#, c-format
+msgid "Failed to set symmetric key for encryption: %s / %s."
+msgstr "Ðе могу да поÑтавим Ñиметрични кључ за шифровање: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:313
+#, c-format
+msgid "Failed to set IV for encryption: %s / %s."
+msgstr "Ðе могу да поÑтавим IV за шифровање: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:322
+#, c-format
+msgid "Failed to encrypt the data: %s / %s."
+msgstr "Ðе могу да шифрујем податке: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:362
+#, c-format
+msgid "Error initializing certificate data: %s"
+msgstr "Грешка приликом отварања података о Ñертификату: %s"
+
+#: ../libnm-util/crypto_gnutls.c:384
+#, c-format
+msgid "Couldn't decode certificate: %s"
+msgstr "Де могу да дешифрујем Ñертификат: %s"
+
+#: ../libnm-util/crypto_gnutls.c:408
+#, c-format
+msgid "Couldn't initialize PKCS#12 decoder: %s"
+msgstr "Ðе могу да започнем PKCS#12 дешифровање: %s"
+
+#: ../libnm-util/crypto_gnutls.c:421
+#, c-format
+msgid "Couldn't decode PKCS#12 file: %s"
+msgstr "Ðе могу да дешифрујем PKCS#12 датотеку: %s"
+
+#: ../libnm-util/crypto_gnutls.c:433
+#, c-format
+msgid "Couldn't verify PKCS#12 file: %s"
+msgstr "Ðе могу да проверим PKCS#12 датотеку: %s"
+
+#: ../libnm-util/crypto_nss.c:56
+#, c-format
+msgid "Failed to initialize the crypto engine: %d."
+msgstr "Ðе могу да покренем програм за шифровање: %d."
+
+#: ../libnm-util/crypto_nss.c:111
+#, c-format
+msgid "Failed to initialize the MD5 context: %d."
+msgstr "Ðе могу да покренем MD5 Ñадржај: %d."
+
+#: ../libnm-util/crypto_nss.c:179
+#, c-format
+msgid "Invalid IV length (must be at least %d)."
+msgstr "ÐеиÑправна IV дужина (мора да буде бар %d)."
+
+#: ../libnm-util/crypto_nss.c:196
+#, c-format
+msgid "Failed to initialize the decryption cipher slot."
+msgstr "Ðе могу да покренем Ñлот за дешифровање лозинке."
+
+#: ../libnm-util/crypto_nss.c:206
+#, c-format
+msgid "Failed to set symmetric key for decryption."
+msgstr "Ðе могу да поÑтавим Ñиметрични кључ за шифровање."
+
+#: ../libnm-util/crypto_nss.c:216
+#, c-format
+msgid "Failed to set IV for decryption."
+msgstr "Ðе могу да поÑтавим IV за дешифровање."
+
+#: ../libnm-util/crypto_nss.c:224
+#, c-format
+msgid "Failed to initialize the decryption context."
+msgstr "Ðе могу да покренем Ñадржај за дешифровање."
+
+#: ../libnm-util/crypto_nss.c:237
+#, c-format
+msgid "Failed to decrypt the private key: %d."
+msgstr "Ðе могу да дешифрујем приватни кључ: %d."
+
+#: ../libnm-util/crypto_nss.c:245
+#, c-format
+msgid "Failed to decrypt the private key: decrypted data too large."
+msgstr "Ðе могу да дешифрујем приватни кључ: дешифровани подаци Ñу предугачки."
+
+#: ../libnm-util/crypto_nss.c:256
+#, c-format
+msgid "Failed to finalize decryption of the private key: %d."
+msgstr "Ðе могу да завршим дешифровање приватног кључа: %d."
+
+#: ../libnm-util/crypto_nss.c:364
+#, c-format
+msgid "Failed to initialize the encryption cipher slot."
+msgstr "Ðе могу да покренем Ñлот за шифровање лозинке."
+
+#: ../libnm-util/crypto_nss.c:372
+#, c-format
+msgid "Failed to set symmetric key for encryption."
+msgstr "Ðе могу да поÑтавим Ñиметрични кључ за шифровање."
+
+#: ../libnm-util/crypto_nss.c:380
+#, c-format
+msgid "Failed to set IV for encryption."
+msgstr "Ðе могу да поÑтавим ИВ за шифровање."
+
+#: ../libnm-util/crypto_nss.c:388
+#, c-format
+msgid "Failed to initialize the encryption context."
+msgstr "Ðе могу да покренем Ñадржај за шифровање."
+
+#: ../libnm-util/crypto_nss.c:396
+#, c-format
+msgid "Failed to encrypt: %d."
+msgstr "Ðе могу да шифрујем: %d."
+
+#: ../libnm-util/crypto_nss.c:404
+#, c-format
+msgid "Unexpected amount of data after encrypting."
+msgstr "Ðеочекиван обим података након шифровања."
+
+#: ../libnm-util/crypto_nss.c:447
+#, c-format
+msgid "Couldn't decode certificate: %d"
+msgstr "Ðе могу да дешифрујем Ñертификат: %d"
+
+#: ../libnm-util/crypto_nss.c:482
+#, c-format
+msgid "Couldn't convert password to UCS2: %d"
+msgstr "Ðе могу да претворим лозинку у UCS2: %d"
+
+#: ../libnm-util/crypto_nss.c:510
+#, c-format
+msgid "Couldn't initialize PKCS#12 decoder: %d"
+msgstr "Ðе могу да покренем програм за PKCS#12 :дешифровање %d"
+
+#: ../libnm-util/crypto_nss.c:519
+#, c-format
+msgid "Couldn't decode PKCS#12 file: %d"
+msgstr "Ðе могу да дешифрујем PKCS#12 датотеку: %d"
+
+#: ../libnm-util/crypto_nss.c:528
+#, c-format
+msgid "Couldn't verify PKCS#12 file: %d"
+msgstr "Ðе могу да проверим PKCS#12 датотеку: %d"
+
+#: ../libnm-util/crypto_nss.c:557
+msgid "Could not generate random data."
+msgstr "Ðе могу да образујем наÑумичне податке."
+
+#: ../libnm-util/nm-utils.c:1975
+#, c-format
+msgid "Not enough memory to make encryption key."
+msgstr "Ðема довољно меморије за шифровање кључа."
+
+#: ../libnm-util/nm-utils.c:2085
+msgid "Could not allocate memory for PEM file creation."
+msgstr "Ðе могу да резервишем меморију за образовање ПЕМ датотеке."
+
+#: ../libnm-util/nm-utils.c:2097
+#, c-format
+msgid "Could not allocate memory for writing IV to PEM file."
+msgstr "Ðе могу да резервишем меморију за ÑƒÐ¿Ð¸Ñ IV у ПЕМ датотеку."
+
+#: ../libnm-util/nm-utils.c:2109
+#, c-format
+msgid "Could not allocate memory for writing encrypted key to PEM file."
msgstr ""
-"128-битни кључ (WEP)\n"
-"ÐСКРИ кључ (WEP)\n"
-"Ð¥ÐµÐºÑ ÐºÑ™ÑƒÑ‡ (WEP)"
+"Ðе могу да резервишем меморију за ÑƒÐ¿Ð¸Ñ ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¾Ð³ кључа у ПЕМ датотеку."
-#: gnome/applet/applet.glade.h:6
-msgid ""
-"128-bit passphrase (WEP)\n"
-"Ascii key (WEP)\n"
-"Hex key (WEP)"
+#: ../libnm-util/nm-utils.c:2128
+#, c-format
+msgid "Could not allocate memory for PEM file data."
+msgstr "Ðе могу да резервишем меморију за ПЕМ датотеку."
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
+msgid "Connection sharing via a protected WiFi network"
+msgstr "Веза Ñе дели преко заштићене бежичне мреже"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
+msgid "Connection sharing via an open WiFi network"
+msgstr "Веза Ñе дели преко отворене бежичне мреже"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
+msgid "Modify persistent system hostname"
+msgstr "Трајно измени име хоÑта"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
+msgid "Modify system connections"
+msgstr "Измени везе"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
+msgid "System policy prevents modification of system settings"
+msgstr "Овлашћења ÑиÑтема не дозвољавају измену ÑиÑтемÑких подешавања"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
+msgid "System policy prevents modification of the persistent system hostname"
+msgstr "Овлашћења ÑиÑтема не дозвољавају измену хоÑта"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
+msgid "System policy prevents sharing connections via a protected WiFi network"
msgstr ""
-"128-битни кључ (WEP)\n"
-"ÐСКРИ кључ (WEP)\n"
-"Ð¥ÐµÐºÑ ÐºÑ™ÑƒÑ‡ (WEP)"
+"Овлашћења ÑиÑтема не дозвољавају дељење везе преко заштићене бежичне мреже"
-#: gnome/applet/applet.glade.h:10
-#, no-c-format
-msgid ""
-"<span weight=\"bold\" size=\"larger\">Passphrase Required by Wireless "
-"Network</span>\n"
-"\n"
-"A passphrase or encryption key is required to access the wireless network '%"
-"s'."
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
+msgid "System policy prevents sharing connections via an open WiFi network"
msgstr ""
-"<span weight=\"bold\" size=\"larger\">Бежична мрежа захтева лозинку</span>\n"
-"\n"
-" Лозинка или кључ за шифровање Ñу неопходни за приÑтуп бежичној мрежи „%s“."
+"Овлашћења ÑиÑтема не дозвољавају дељење везе преко отворене бежичне мреже"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
+msgid "Allow control of network connections"
+msgstr "Дозволи контролу мрежних веза"
-#: gnome/applet/applet.glade.h:14
-#, no-c-format
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
+msgid "Allow use of user-specific connections"
+msgstr "Дозволи везе које одређује кориÑник"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
+msgid "Enable or disable WiFi devices"
+msgstr "Омогући или онемогући бежичне уређаје"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
+msgid "Enable or disable mobile broadband devices"
+msgstr "Омогући или онемогући мобилне широкопојаÑне уређаје"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+msgid "Enable or disable system networking"
+msgstr "Омогући или онемогући умрежавање на ÑиÑтему"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
msgid ""
-"<span weight=\"bold\" size=\"larger\">Reduced Network Functionality</span>\n"
-"\n"
-"%s It will not be completely functional."
+"Put NetworkManager to sleep or wake it up (should only be used by system "
+"power management)"
msgstr ""
-"<span weight=\"bold\" size=\"larger\">Смањена употребна вредноÑÑ‚ мреже</span>\n"
-"\n"
-"%s неће бити ÑаÑвим употребљива."
+"Омогућава уÑпављивање Управника мреже (кориÑти Ñе Ñа Управником потрошње на "
+"ÑиÑтему)"
-#: gnome/applet/applet.glade.h:18
-#, no-c-format
-msgid ""
-"<span weight=\"bold\" size=\"larger\">Wireless Network Login Confirmation</"
-"span>\n"
-"\n"
-"You have chosen log in to the wireless network '%s'. If you are sure this "
-"wireless network is secure, click the checkbox below and NetworkManager will "
-"no longer pester you with stupid questions when you connect to it."
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
+msgid "System policy prevents control of network connections"
+msgstr "Овлашћења ÑиÑтема онемогућавају контролу мрежних веза"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
+msgid "System policy prevents enabling or disabling WiFi devices"
+msgstr "Овлашћења ÑиÑтема онемогућавају управљање бежичним уређајима"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
+msgid "System policy prevents enabling or disabling mobile broadband devices"
msgstr ""
-"<span weight=\"bold\" size=\"larger\">Потврда пријаве на мрежу</span>\n"
-"\n"
-"Желите да Ñе пријавите на мрежу „%s“. Ðко Ñте Ñигурни да је ова бежична мрежа безбедна, обележите кућицу иÑпод и Управник мреже вам више неће поÑтављати Ñувишна питања при пријави на ову мрежу."
+"Овлашћења ÑиÑтема онемогућавају управљање мобилним широкопојаÑним уређајима"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
+msgid "System policy prevents enabling or disabling system networking"
+msgstr "Овлашћења ÑиÑтема онемогућавају управљање мрежом на ÑиÑтему"
-#: gnome/applet/applet.glade.h:21
-msgid "Always Trust this Wireless Network"
-msgstr "Увек поклони поверење бежичној мрежи"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
+msgid "System policy prevents putting NetworkManager to sleep or waking it up"
+msgstr "Овлашћења ÑиÑтема онемогућавају уÑпављивање Управника мрежом"
-#: gnome/applet/applet.glade.h:22
-msgid "C_onnect"
-msgstr "П_овежи Ñе"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
+msgid "System policy prevents use of user-specific connections"
+msgstr "Овлашћења ÑиÑтема онемогућавају употребу кориÑникових веза"
-#: gnome/applet/applet.glade.h:23
-msgid "Connect with encryption enabled"
-msgstr "Повежи Ñе и укључи шифровање"
+#: ../src/nm-netlink-monitor.c:100 ../src/nm-netlink-monitor.c:231
+#: ../src/nm-netlink-monitor.c:653
+#, c-format
+msgid "error processing netlink message: %s"
+msgstr "грешка у обради нетлинк поруке: %s"
-#: gnome/applet/applet.glade.h:24
-msgid "Don't remind me again"
-msgstr "Ðе подÑећај ме више"
+#: ../src/nm-netlink-monitor.c:214
+msgid "error occurred while waiting for data on socket"
+msgstr "грешка приликом чекања података на утичници"
-#: gnome/applet/applet.glade.h:25
-msgid "Key Type:"
-msgstr "Ð’Ñ€Ñта кључа:"
+#: ../src/nm-netlink-monitor.c:254
+#, c-format
+msgid "unable to connect to netlink for monitoring link status: %s"
+msgstr "не могу да Ñе повежем на нетлинк ради праћења Ñтања везе: %s"
-#: gnome/applet/applet.glade.h:26
-msgid "Key type:"
-msgstr "Ð’Ñ€Ñта кључа:"
+#: ../src/nm-netlink-monitor.c:265
+#, c-format
+msgid "unable to enable netlink handle credential passing: %s"
+msgstr "не могу да укључим нетлинк ÑигурноÑни пролаз: %s"
-#: gnome/applet/applet.glade.h:28
-msgid "Wireless Network Key Required"
-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 "не могу да резервишем нетлинк за праћење Ñтања везе: %s"
-#: gnome/applet/applet.glade.h:29
-msgid "Wireless _adapter:"
-msgstr "Бежични _уређај:"
+#: ../src/nm-netlink-monitor.c:376
+#, c-format
+msgid "unable to allocate netlink link cache for monitoring link status: %s"
+msgstr "не могу да резервишем нетлинк оÑтаву ради праћења Ñтања везе: %s"
-#: gnome/applet/applet.glade.h:30
-msgid "Wireless _network:"
-msgstr "Бежична _мрежа:"
+#: ../src/nm-netlink-monitor.c:502
+#, c-format
+msgid "unable to join netlink group: %s"
+msgstr "не могу да Ñе прикључин нетлинк групи: %s"
-#: gnome/applet/applet.glade.h:31
-msgid "_Login to Network"
-msgstr "_Умрежи Ñе"
+#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642
+#, c-format
+msgid "error updating link cache: %s"
+msgstr "грешка при оÑвежавању оÑтаве Ñа везама: %s"
-#: gnome/applet/applet.glade.h:32
-msgid "_OK"
-msgstr "_У реду"
+#: ../src/main.c:499
+#, c-format
+msgid "Invalid option. Please use --help to see a list of valid options.\n"
+msgstr "ÐеиÑправна опција. УнеÑите „--help“ за ÑпиÑак Ñвих опција.\n"
-#: src/nm-netlink-monitor.c:154
+#: ../src/main.c:570
#, c-format
-msgid ""
-"unable to create netlink socket for monitoring wired ethernet devices - %s"
-msgstr "Ðије могуће направити утичницу за поÑматрање жичаног мрежног уређаја - %s"
+msgid "%s. Please use --help to see a list of valid options.\n"
+msgstr "%s. Покрените Ñа --help за ÑпиÑак доÑтупних опција.\n"
-#: src/nm-netlink-monitor.c:172
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:328
+msgid "# Created by NetworkManager\n"
+msgstr "# Ðаправио NetworkManager\n"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:344
#, c-format
msgid ""
-"unable to bind to netlink socket for monitoring wired ethernet devices - %s"
-msgstr "Ðије могуће повезати Ñе на утичницу за поÑматрање жичаног мрежног уређаја - %s"
+"# Merged from %s\n"
+"\n"
+msgstr ""
+"# Спојено Ñа %s\n"
+"\n"
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:284
+msgid "no usable DHCP client could be found."
+msgstr "не могу да нађем ДХЦП програм."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+msgid "'dhclient' could be found."
+msgstr "Ðе могу да нађем „dhclient“."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:303
+msgid "'dhcpcd' could be found."
+msgstr "Ðе могу да нађем „dhcpcd“."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:311
+#, c-format
+msgid "unsupported DHCP client '%s'"
+msgstr "неподржан ДХЦП клијент „%s“"
-#: src/nm-netlink-monitor.c:404
-msgid "operation took too long"
-msgstr "Потрага је предуго трајала"
+#: ../src/logging/nm-logging.c:146
+#, c-format
+msgid "Unknown log level '%s'"
+msgstr "„%s“ није подржан ниво запиÑа дневника"
+
+#: ../src/logging/nm-logging.c:171
+#, c-format
+msgid "Unknown log domain '%s'"
+msgstr "„%s“ је непознат домен дневника"
-#: src/nm-netlink-monitor.c:501
-msgid "received data from wrong type of sender"
-msgstr "Примљени Ñу подаци погрешног типа од пошиљаоца"
+#: ../src/dns-manager/nm-dns-manager.c:384
+msgid "NOTE: the libc resolver may not support more than 3 nameservers."
+msgstr "ПРИМЕДБÐ: либц разрешавање не подржава више од 3 Ñервера имена."
-#: src/nm-netlink-monitor.c:514
-msgid "received data from unexpected sender"
-msgstr "Примљени Ñу подаци од неочекиваног пошиљаоца"
+#: ../src/dns-manager/nm-dns-manager.c:386
+msgid "The nameservers listed below may not be recognized."
+msgstr "Следећи Ñервери имена можда ниÑу препознати."
-#: src/nm-netlink-monitor.c:536
+#: ../src/system-settings/nm-default-wired-connection.c:157
#, c-format
-msgid "%s"
-msgstr "%s"
+msgid "Auto %s"
+msgstr "Ðуто %s"
+
+#: ../system-settings/plugins/ifcfg-rh/reader.c:3412
+#: ../system-settings/plugins/ifnet/connection_parser.c:49
+msgid "System"
+msgstr "СиÑтем"
+
+#~ msgid "Orientation"
+#~ msgstr "УÑмерење"
+
+# Потребан је бољи превод за ово
+#~ msgid "The orientation of the tray."
+#~ msgstr "УÑмерење обавештајне зоне."
+
+#~ msgid ""
+#~ "The requested wireless network '%s' does not appear to be in range. A "
+#~ "different wireless network will be used if any are available."
+#~ msgstr ""
+#~ "Тражена бежична мрежа „%s“ није у домету. Биће коришћена друга бежична "
+#~ "мрежа ако је раÑположива."
+
+#~ msgid "Connection to the wireless network '%s' failed.\n"
+#~ msgstr "ÐеуÑпела веза Ñа бежичном мрежом „%s“.\n"
+
+#~ msgid "Copyright (C) 2004-2005 Red Hat, Inc."
+#~ msgstr "Copyright (C) 2004-2005 Red Hat, Inc."
+
+#~ msgid ""
+#~ "Notification area applet for managing your network devices and "
+#~ "connections."
+#~ msgstr "Ðплет за обавештајну зону за управљање мрежним уређајима и везама."
+
+#~ msgid ""
+#~ "<span weight=\"bold\" size=\"larger\">VPN Login Failure</span>\n"
+#~ "\n"
+#~ "Could not start the VPN connection '%s' due to a login failure.\n"
+#~ "\n"
+#~ "The VPN service said: \"%s\""
+#~ msgstr ""
+#~ "<span weight=\"bold\" size=\"larger\">Пријава на VPN није уÑпела</span>\n"
+#~ "\n"
+#~ "VPN веза Ñа мрежом „%s“ није оÑтварена јер пријава није уÑпела.\n"
+#~ "\n"
+#~ "Порука VPN ÑервиÑа је била : „%s“"
+
+#~ msgid ""
+#~ "<span weight=\"bold\" size=\"larger\">VPN Login Message</span>\n"
+#~ "\n"
+#~ "VPN connection '%s' said:\n"
+#~ "\n"
+#~ "\"%s\""
+#~ msgstr ""
+#~ "<span weight=\"bold\" size=\"larger\">Порука при пријави на VPN</span>\n"
+#~ "\n"
+#~ "Порука VPN везе „%s“ је:\n"
+#~ "\n"
+#~ "„%s“"
+
+#~ msgid ""
+#~ "The NetworkManager Applet could not find some required resources (the "
+#~ "glade file was not found)."
+#~ msgstr ""
+#~ "Ðплет Управник мреже није могао да пронађе неке од потребних реÑурÑа "
+#~ "(глејд датотека није пронађена)."
+
+#~ msgid "The network device \"%s (%s)\" does not support wireless scanning."
+#~ msgstr "Мрежни уређај „%s (%s)“ не подржава потрагу за бежичним мрежама."
+
+#~ msgid "The network device \"%s (%s)\" does not support link detection."
+#~ msgstr "Мрежни уређај „%s (%s)“ не подржава откривање везе."
+
+#~ msgid "Preparing device %s for the wired network..."
+#~ msgstr "Припрема уређаја %s за жичану мрежу..."
+
+#~ msgid "Preparing device %s for the wireless network '%s'..."
+#~ msgstr "Припрема уређаја %s за бежичну мрежу „%s“..."
+
+#~ msgid "Configuring device %s for the wired network..."
+#~ msgstr "Подешавање уређаја %s за бежичну мрежу..."
+
+#~ msgid "Attempting to join the wireless network '%s'..."
+#~ msgstr "Покушај приÑтупа бежичној мрежи „%s“..."
+
+#~ msgid "Waiting for Network Key for the wireless network '%s'..."
+#~ msgstr "Чекање на мрежни кључ за бежичну мрежу „%s“..."
+
+#~ msgid "Requesting a network address from the wired network..."
+#~ msgstr "Потраживање мрежне адреÑе за жичану мрежу..."
+
+#~ msgid "Requesting a network address from the wireless network '%s'..."
+#~ msgstr "Потраживање мрежне адреÑе за бежичну мрежу „%s“..."
+
+#~ msgid "Finishing connection to the wired network..."
+#~ msgstr "ОбуÑтављање везе Ñа жичаном мрежом..."
+
+#~ msgid "Finishing connection to the wireless network '%s'..."
+#~ msgstr "ОбуÑтављање везе Ñа бежичном мрежом „%s“..."
+
+#~ msgid "NetworkManager is not running"
+#~ msgstr "Управљач мреже није покренут"
+
+#~ msgid "Wired network connection"
+#~ msgstr "Жична мрежна веза"
+
+# FIXME Ðд-хок
+#~ msgid "Connected to an Ad-Hoc wireless network"
+#~ msgstr "Повезан Ñа ад-хок бежичном мрежом"
+
+#~ msgid "Wireless network connection to '%s' (%d%%)"
+#~ msgstr "Бежична мрежна веза Ñа „%s“ (%d%%)"
+
+#~ msgid "Other Wireless Networks..."
+#~ msgstr "ОÑтале бежичне мреже..."
+
+#~ msgid "Create new Wireless Network..."
+#~ msgstr "Ðаправи нову бежичну мрежу..."
+
+#~ msgid "No network devices have been found"
+#~ msgstr "Ðије пронађен ниједан мрежни уређај"
+
+#~ msgid "NetworkManager is not running..."
+#~ msgstr "Управљач мрежом није покренут..."
+
+#~ msgid "Pause Wireless Scanning"
+#~ msgstr "ОбуÑтави тражење бежичне мреже"
+
+#~ msgid "Resume Wireless Scanning"
+#~ msgstr "ÐаÑтави тражење бежичне мреже"
+
+#~ msgid "Stop All Wireless Devices"
+#~ msgstr "ЗауÑтави Ñве бежичне уређаје"
-#: src/nm-netlink-monitor.c:645
-msgid "too much data was sent over socket and some of it was lost"
-msgstr "Сувише података је поÑлато кроз утичницу и нешто од њих је изгубљено"
+#~ msgid "Start All Wireless Devices"
+#~ msgstr "Покрени Ñве бежичне уређаје"
+
+#~ msgid "Help"
+#~ msgstr "Помоћ"
+
+#~ msgid "About"
+#~ msgstr "О програму"
+
+#~ msgid ""
+#~ "The NetworkManager applet could not find some required resources. It "
+#~ "cannot continue.\n"
+#~ msgstr ""
+#~ "Управљач мрежом није уÑпео да пронађе неопходне реÑурÑе и не може да "
+#~ "наÑтави рад.\n"
+
+#~ msgid "progress bar label|%d %%"
+#~ msgstr "%d %%"
+
+#~ msgid "Wired Network (%s)"
+#~ msgstr "Жичана мрежа (%s)"
+
+#~ msgid "Wired Network"
+#~ msgstr "Жичана мрежа"
+
+#~ msgid "Wireless Network (%s)"
+#~ msgid_plural "Wireless Networks (%s)"
+#~ msgstr[0] "Бежична мрежа (%s)"
+#~ msgstr[1] "Бежичне мреже (%s)"
+#~ msgstr[2] "Бежичних мрежа (%s)"
+
+#~ msgid "Wireless Network"
+#~ msgid_plural "Wireless Networks"
+#~ msgstr[0] "Бежична мрежа"
+#~ msgstr[1] "Бежичне мреже"
+#~ msgstr[2] "Бежичне мреже"
+
+#~ msgid " (invalid Unicode)"
+#~ msgstr " (неиÑправан Уникод)"
+
+#~ msgid "Passphrase:"
+#~ msgstr "Лозинка:"
+
+#~ msgid "Ascii Key:"
+#~ msgstr "ÐСКРИ кључ:"
+
+#~ msgid "Hex Key:"
+#~ msgstr "ХекÑа кључ:"
+
+#~ msgid "Create new wireless network"
+#~ msgstr "Ðаправи нову бежичну мрежу"
+
+#~ msgid ""
+#~ "Enter the ESSID and security settings of the wireless network you wish to "
+#~ "create."
+#~ msgstr ""
+#~ "УнеÑите ESSID и безбедноÑне поÑтавке бежичне мреже коју желите да "
+#~ "начините."
+
+#~ msgid "Custom wireless network"
+#~ msgstr "КориÑничка бежична мрежа"
+
+#~ msgid ""
+#~ "Enter the ESSID of the wireless network to which you wish to connect."
+#~ msgstr "УнеÑите ESSID бежичне мреже Ñа којом желите да Ñе повежете."
+
+#~ msgid "You must log in to access the Virtual Private Network '%s'."
+#~ msgstr ""
+#~ "Морате бити пријављени како биÑте кориÑтили виртуелну приватну мрежу „%s“."
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid ""
+#~ "128-bit Passphrase (WEP)\n"
+#~ "Ascii Key (WEP)\n"
+#~ "Hex Key (WEP)"
+#~ msgstr ""
+#~ "128-битни кључ (WEP)\n"
+#~ "ÐСКРИ кључ (WEP)\n"
+#~ "Ð¥ÐµÐºÑ ÐºÑ™ÑƒÑ‡ (WEP)"
+
+#~ msgid ""
+#~ "128-bit passphrase (WEP)\n"
+#~ "Ascii key (WEP)\n"
+#~ "Hex key (WEP)"
+#~ msgstr ""
+#~ "128-битни кључ (WEP)\n"
+#~ "ÐСКРИ кључ (WEP)\n"
+#~ "Ð¥ÐµÐºÑ ÐºÑ™ÑƒÑ‡ (WEP)"
+
+#~ msgid ""
+#~ "<span weight=\"bold\" size=\"larger\">Passphrase Required by Wireless "
+#~ "Network</span>\n"
+#~ "\n"
+#~ "A passphrase or encryption key is required to access the wireless network "
+#~ "'%s'."
+#~ msgstr ""
+#~ "<span weight=\"bold\" size=\"larger\">Бежична мрежа захтева лозинку</"
+#~ "span>\n"
+#~ "\n"
+#~ " Лозинка или кључ за шифровање Ñу неопходни за приÑтуп бежичној мрежи "
+#~ "„%s“."
+
+#~ msgid ""
+#~ "<span weight=\"bold\" size=\"larger\">Reduced Network Functionality</"
+#~ "span>\n"
+#~ "\n"
+#~ "%s It will not be completely functional."
+#~ msgstr ""
+#~ "<span weight=\"bold\" size=\"larger\">Смањена употребна вредноÑÑ‚ мреже</"
+#~ "span>\n"
+#~ "\n"
+#~ "%s неће бити ÑаÑвим употребљива."
+
+#~ msgid ""
+#~ "<span weight=\"bold\" size=\"larger\">Wireless Network Login "
+#~ "Confirmation</span>\n"
+#~ "\n"
+#~ "You have chosen log in to the wireless network '%s'. If you are sure "
+#~ "this wireless network is secure, click the checkbox below and "
+#~ "NetworkManager will no longer pester you with stupid questions when you "
+#~ "connect to it."
+#~ msgstr ""
+#~ "<span weight=\"bold\" size=\"larger\">Потврда пријаве на мрежу</span>\n"
+#~ "\n"
+#~ "Желите да Ñе пријавите на мрежу „%s“. Ðко Ñте Ñигурни да је ова бежична "
+#~ "мрежа безбедна, обележите кућицу иÑпод и Управник мреже вам више неће "
+#~ "поÑтављати Ñувишна питања при пријави на ову мрежу."
+
+#~ msgid "Always Trust this Wireless Network"
+#~ msgstr "Увек поклони поверење бежичној мрежи"
+
+#~ msgid "Connect with encryption enabled"
+#~ msgstr "Повежи Ñе и укључи шифровање"
+
+#~ msgid "Don't remind me again"
+#~ msgstr "Ðе подÑећај ме више"
+
+#~ msgid "Key Type:"
+#~ msgstr "Ð’Ñ€Ñта кључа:"
+
+#~ msgid "Key type:"
+#~ msgstr "Ð’Ñ€Ñта кључа:"
+
+#~ msgid "Wireless Network Key Required"
+#~ msgstr "Потребан је кључ за бежичну мрежу"
+
+#~ msgid "Wireless _adapter:"
+#~ msgstr "Бежични _уређај:"
+
+#~ msgid "Wireless _network:"
+#~ msgstr "Бежична _мрежа:"
+
+#~ msgid "_Login to Network"
+#~ msgstr "_Умрежи Ñе"
+
+#~ msgid "_OK"
+#~ msgstr "_У реду"
+
+#~ msgid "operation took too long"
+#~ msgstr "Потрага је предуго трајала"
+
+#~ msgid "received data from wrong type of sender"
+#~ msgstr "Примљени Ñу подаци погрешног типа од пошиљаоца"
+
+#~ msgid "received data from unexpected sender"
+#~ msgstr "Примљени Ñу подаци од неочекиваног пошиљаоца"
+
+#~ msgid "%s"
+#~ msgstr "%s"
+
+#~ msgid "too much data was sent over socket and some of it was lost"
+#~ msgstr ""
+#~ "Сувише података је поÑлато кроз утичницу и нешто од њих је изгубљено"
diff --git a/po/sr@latin.po b/po/sr@latin.po
index 4904cecd39..3158facc03 100644
--- a/po/sr@latin.po
+++ b/po/sr@latin.po
@@ -1,437 +1,2079 @@
# Serbian Cyrillic and Latin translations for NetworkManager
# Copyright (C) 2004-2005 GNOME Foundation
# This file is distributed under the same licence as the NetworkManager package.
+# Miloš Popović <gpopac@gmail.com>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: NetworkManager\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-05-13 16:11-0400\n"
-"PO-Revision-Date: 2006-06-02 20:40+0200\n"
-"Last-Translator: Filip Miletic <f dot miletic at ewi dot tudelft dot nl>\n"
-"Language-Team: Serbian <gnu@prevod.org>\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=NetworkManager&component=general\n"
+"POT-Creation-Date: 2010-09-22 03:25+0000\n"
+"PO-Revision-Date: 2010-10-18 16:48+0200\n"
+"Last-Translator: Miloš Popović <gpopac@gmail.com>\n"
+"Language-Team: Serbian <gnom@prevod.org>\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"
+"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : n"
+"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\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
+msgid "NAME"
+msgstr "IME"
+
+#. 0
+#: ../cli/src/connections.c:61 ../cli/src/connections.c:76
+msgid "UUID"
+msgstr "UUID"
+
+#. 1
+#: ../cli/src/connections.c:62
+msgid "DEVICES"
+msgstr "UREÄAJI"
+
+#. 2
+#: ../cli/src/connections.c:63 ../cli/src/connections.c:78
+msgid "SCOPE"
+msgstr "OPSEG"
+
+#. 3
+#: ../cli/src/connections.c:64
+msgid "DEFAULT"
+msgstr "PODRAZUMEVANO"
+
+#. 4
+#: ../cli/src/connections.c:65
+msgid "DBUS-SERVICE"
+msgstr "DBUS-SERVIS"
+
+#. 5
+#: ../cli/src/connections.c:66
+msgid "SPEC-OBJECT"
+msgstr "SPEC-OBJEKT"
+
+#. 6
+#: ../cli/src/connections.c:67
+msgid "VPN"
+msgstr "VPN"
+
+#. 1
+#. 0
+#. 1
+#: ../cli/src/connections.c:77 ../cli/src/devices.c:62 ../cli/src/devices.c:90
+msgid "TYPE"
+msgstr "VRSTA"
+
+#. 3
+#: ../cli/src/connections.c:79
+msgid "TIMESTAMP"
+msgstr "OZNAKA_VREMENA"
+
+#. 4
+#: ../cli/src/connections.c:80
+msgid "TIMESTAMP-REAL"
+msgstr "STVARNA-OZNAKA_VREMENA"
+
+#. 5
+#: ../cli/src/connections.c:81
+msgid "AUTOCONNECT"
+msgstr "SAMOPOVEZIVANJE"
+
+#. 6
+#: ../cli/src/connections.c:82
+msgid "READONLY"
+msgstr "SAMO_ZA_ÄŒITANJE"
+
+#. 7
+#: ../cli/src/connections.c:83
+msgid "DBUS-PATH"
+msgstr "DBAS-PUTANJA"
+
+#: ../cli/src/connections.c:159
+#, c-format
+msgid ""
+"Usage: nmcli con { COMMAND | help }\n"
+" COMMAND := { list | status | up | down }\n"
+"\n"
+" list [id <id> | uuid <id> | system | user]\n"
+" status\n"
+" up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout "
+"<timeout>]\n"
+" down id <id> | uuid <id>\n"
+msgstr ""
+"Upotreba: nmcli con { NAREDBA | help }\n"
+" NAREDBA := { list | status | up | down }\n"
+"\n"
+" list [id <id> | uuid <id> | system | user]\n"
+" status\n"
+" up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout "
+"<timeout>]\n"
+" down id <id> | uuid <id>\n"
+
+#: ../cli/src/connections.c:199 ../cli/src/connections.c:540
+#, c-format
+msgid "Error: 'con list': %s"
+msgstr "Greška: „con list“: %s"
-#: examples/python/systray/eggtrayicon.c:111 gnome/applet/eggtrayicon.c:118
-msgid "Orientation"
-msgstr "Usmerenje"
+#: ../cli/src/connections.c:201 ../cli/src/connections.c:542
+#, c-format
+msgid "Error: 'con list': %s; allowed fields: %s"
+msgstr "Greška: „con list“: %s; dozvoljena polja: %s"
+
+#: ../cli/src/connections.c:209
+msgid "Connection details"
+msgstr "Podaci o vezi"
+
+#: ../cli/src/connections.c:384 ../cli/src/connections.c:605
+msgid "system"
+msgstr "sistem"
+
+#: ../cli/src/connections.c:384 ../cli/src/connections.c:605
+msgid "user"
+msgstr "korisnik"
+
+#: ../cli/src/connections.c:386
+msgid "never"
+msgstr "nikada"
+
+#. "CAPABILITIES"
+#. Print header
+#. "WIFI-PROPERTIES"
+#: ../cli/src/connections.c:387 ../cli/src/connections.c:388
+#: ../cli/src/connections.c:606 ../cli/src/connections.c:609
+#: ../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
+msgid "yes"
+msgstr "da"
+
+#: ../cli/src/connections.c:387 ../cli/src/connections.c:388
+#: ../cli/src/connections.c:606 ../cli/src/connections.c:609
+#: ../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
+msgid "no"
+msgstr "ne"
+
+#: ../cli/src/connections.c:461 ../cli/src/connections.c:504
+msgid "System connections"
+msgstr "Veze na sistemu"
+
+#: ../cli/src/connections.c:466 ../cli/src/connections.c:517
+msgid "User connections"
+msgstr "Korisnikove veze"
+
+#: ../cli/src/connections.c:478 ../cli/src/connections.c:1338
+#: ../cli/src/connections.c:1354 ../cli/src/connections.c:1363
+#: ../cli/src/connections.c:1374 ../cli/src/connections.c:1459
+#: ../cli/src/devices.c:962 ../cli/src/devices.c:972 ../cli/src/devices.c:1074
+#: ../cli/src/devices.c:1081
+#, c-format
+msgid "Error: %s argument is missing."
+msgstr "Greška: Nedostaje argument %s."
-# Potreban je bolji prevod za ovo
-#: examples/python/systray/eggtrayicon.c:112 gnome/applet/eggtrayicon.c:119
-msgid "The orientation of the tray."
-msgstr "Usmerenje obaveštajne zone."
+#: ../cli/src/connections.c:491
+#, c-format
+msgid "Error: %s - no such connection."
+msgstr "Greška: %s — ova veza ne postoji."
-#: gnome/applet/applet-dbus-info.c:852
+#: ../cli/src/connections.c:523 ../cli/src/connections.c:1387
+#: ../cli/src/connections.c:1477 ../cli/src/devices.c:785
+#: ../cli/src/devices.c:852 ../cli/src/devices.c:986 ../cli/src/devices.c:1087
#, c-format
-msgid ""
-"The requested wireless network '%s' does not appear to be in range. A "
-"different wireless network will be used if any are available."
-msgstr "Tražena bežiÄna mreža „%s“ nije u dometu. Biće korišćena druga bežiÄna mreža ako je raspoloživa."
+msgid "Unknown parameter: %s\n"
+msgstr "Nepoznati parametar: %s\n"
-#: gnome/applet/applet-dbus.c:573
+#: ../cli/src/connections.c:532
#, c-format
-msgid "Connection to the wireless network '%s' failed.\n"
-msgstr "Neuspela veza sa bežiÄnom mrežom „%s“.\n"
+msgid "Error: no valid parameter specified."
+msgstr "Greška: nije određen ispravan parametar."
-#: gnome/applet/applet-dbus.c:578
-msgid "Connection to the wired network failed.\n"
-msgstr "Neuspela veza sa žiÄanom mrežom.\n"
+#: ../cli/src/connections.c:547 ../cli/src/connections.c:1580
+#: ../cli/src/devices.c:1293 ../cli/src/network-manager.c:359
+#, c-format
+msgid "Error: %s."
+msgstr "Greška: %s."
+
+#: ../cli/src/connections.c:653
+#, c-format
+msgid "Error: 'con status': %s"
+msgstr "Greška: „con status“: %s"
-#: gnome/applet/applet.c:194 gnome/applet/applet.c:212
-msgid "NetworkManager Applet"
-msgstr "Aplet Upravnik mreže"
+#: ../cli/src/connections.c:655
+#, c-format
+msgid "Error: 'con status': %s; allowed fields: %s"
+msgstr "Greška: „con status“: %s; dozvoljena polja: %s"
-#: gnome/applet/applet.c:196 gnome/applet/applet.c:214
-msgid "Copyright (C) 2004-2005 Red Hat, Inc."
-msgstr "Copyright (C) 2004-2005 Red Hat, Inc."
+#: ../cli/src/connections.c:662
+msgid "Active connections"
+msgstr "Aktivne veze"
-#: gnome/applet/applet.c:197 gnome/applet/applet.c:215
-msgid ""
-"Notification area applet for managing your network devices and connections."
-msgstr "Aplet za obaveštajnu zonu za upravljanje mrežnim uređajima i vezama."
+#: ../cli/src/connections.c:1030
+#, c-format
+msgid "no active connection on device '%s'"
+msgstr "nema aktivnih veza na uređaju „%s“"
+
+#: ../cli/src/connections.c:1038
+#, c-format
+msgid "no active connection or device"
+msgstr "nema aktivnih veza na uređaju"
+
+#: ../cli/src/connections.c:1088
+#, c-format
+msgid "device '%s' not compatible with connection '%s'"
+msgstr "uređaj „%s“ ne podržava vezu „%s“"
+
+#: ../cli/src/connections.c:1090
+#, c-format
+msgid "no device found for connection '%s'"
+msgstr "ne postoji uređaj za vezu „%s“"
+
+#: ../cli/src/connections.c:1101
+msgid "activating"
+msgstr "pokrećem"
+
+#: ../cli/src/connections.c:1103
+msgid "activated"
+msgstr "pokrenuto"
+
+#: ../cli/src/connections.c:1106 ../cli/src/connections.c:1129
+#: ../cli/src/connections.c:1162 ../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
+msgid "unknown"
+msgstr "nepoznato"
+
+#: ../cli/src/connections.c:1115
+msgid "VPN connecting (prepare)"
+msgstr "Povezivanje na VPN (priprema)"
+
+#: ../cli/src/connections.c:1117
+msgid "VPN connecting (need authentication)"
+msgstr "Povezivanje na VPN (potrebna prijava)"
+
+#: ../cli/src/connections.c:1119
+msgid "VPN connecting"
+msgstr "Povezivanje na VPN"
+
+#: ../cli/src/connections.c:1121
+msgid "VPN connecting (getting IP configuration)"
+msgstr "Povezivanje na VPN (prikupljam IP podešavanja)"
+
+#: ../cli/src/connections.c:1123
+msgid "VPN connected"
+msgstr "Povezani ste na VPN"
+
+#: ../cli/src/connections.c:1125
+msgid "VPN connection failed"
+msgstr "Nije uspelo povezivanje na VPN"
+
+#: ../cli/src/connections.c:1127
+msgid "VPN disconnected"
+msgstr "VPN veza je prekinuta"
+
+#: ../cli/src/connections.c:1138
+msgid "unknown reason"
+msgstr "nepoznat razlog"
+
+#: ../cli/src/connections.c:1140
+msgid "none"
+msgstr "ništa"
+
+#: ../cli/src/connections.c:1142
+msgid "the user was disconnected"
+msgstr "korisnik je otkaÄen sa mreže"
+
+#: ../cli/src/connections.c:1144
+msgid "the base network connection was interrupted"
+msgstr "osnovna mrežna veza je poremećena"
+
+#: ../cli/src/connections.c:1146
+msgid "the VPN service stopped unexpectedly"
+msgstr "VPN servis je neoÄekivano izaÅ¡ao"
+
+#: ../cli/src/connections.c:1148
+msgid "the VPN service returned invalid configuration"
+msgstr "VPN servis je vratio pogrešne postavke"
+
+#: ../cli/src/connections.c:1150
+msgid "the connection attempt timed out"
+msgstr "isteklo je vreme za pokušaj povezivanja"
+
+#: ../cli/src/connections.c:1152
+msgid "the VPN service did not start in time"
+msgstr "VPN servis nije pokrenut na vreme"
+
+#: ../cli/src/connections.c:1154
+msgid "the VPN service failed to start"
+msgstr "ne mogu da pokrenem VPN servis"
+
+#: ../cli/src/connections.c:1156
+msgid "no valid VPN secrets"
+msgstr "nisu ispravne VPN lozinke"
+
+#: ../cli/src/connections.c:1158
+msgid "invalid VPN secrets"
+msgstr "neispravne VPN lozinke"
+
+#: ../cli/src/connections.c:1160
+msgid "the connection was removed"
+msgstr "veza je uklonjena"
+
+#: ../cli/src/connections.c:1174
+#, c-format
+msgid "state: %s\n"
+msgstr "stanje: %s\n"
-#: gnome/applet/applet.c:280
+#: ../cli/src/connections.c:1177 ../cli/src/connections.c:1203
+#, c-format
+msgid "Connection activated\n"
+msgstr "Veza je pokrenuta\n"
+
+#: ../cli/src/connections.c:1180
+#, c-format
+msgid "Error: Connection activation failed."
+msgstr "Greška: Nije uspelo pokretanje veze."
+
+#: ../cli/src/connections.c:1199
+#, c-format
+msgid "state: %s (%d)\n"
+msgstr "stanje: %s (%d)\n"
+
+#: ../cli/src/connections.c:1209
+#, c-format
+msgid "Error: Connection activation failed: %s."
+msgstr "Greška: Pokretanje veze nije uspelo: %s."
+
+#: ../cli/src/connections.c:1226 ../cli/src/devices.c:909
+#, c-format
+msgid "Error: Timeout %d sec expired."
+msgstr "Greška: Isteklo je vreme od %d s."
+
+#: ../cli/src/connections.c:1269
+#, c-format
+msgid "Error: Connection activation failed: %s"
+msgstr "Greška: Nije uspelo pokretanje veze: %s"
+
+#: ../cli/src/connections.c:1283
+#, c-format
+msgid "Error: Obtaining active connection for '%s' failed."
+msgstr "Greška: Ne mogu da nađem pokrenutu vezu za „%s“."
+
+#: ../cli/src/connections.c:1292
+#, c-format
+msgid "Active connection state: %s\n"
+msgstr "Stanje aktivne veze: %s\n"
+
+#: ../cli/src/connections.c:1293
+#, c-format
+msgid "Active connection path: %s\n"
+msgstr "Putanja do aktivne veze: %s\n"
+
+#: ../cli/src/connections.c:1347 ../cli/src/connections.c:1468
+#, c-format
+msgid "Error: Unknown connection: %s."
+msgstr "Greška: Nepoznata veza: %s."
+
+#: ../cli/src/connections.c:1382 ../cli/src/devices.c:980
+#, c-format
+msgid "Error: timeout value '%s' is not valid."
+msgstr "Greška: nije ispravna vrednost „%s“ za istek vremena."
+
+#: ../cli/src/connections.c:1395 ../cli/src/connections.c:1485
+#, c-format
+msgid "Error: id or uuid has to be specified."
+msgstr "Greška: morate da zadate id ili uuid."
+
+#: ../cli/src/connections.c:1415
+#, c-format
+msgid "Error: No suitable device found: %s."
+msgstr "Greška: Nije pronađen odgovarajući uređaj: %s."
+
+#: ../cli/src/connections.c:1417
+#, c-format
+msgid "Error: No suitable device found."
+msgstr "Greška: Nije pronađen odgovarajući uređaj."
+
+#: ../cli/src/connections.c:1512
+#, c-format
+msgid "Warning: Connection not active\n"
+msgstr "Upozorenje: Nije pokrenuta veza\n"
+
+#: ../cli/src/connections.c:1569
+#, c-format
+msgid "Error: 'con' command '%s' is not valid."
+msgstr "Greška: „con“ naredba „%s“ nije ispravna."
+
+#: ../cli/src/connections.c:1605
+#, c-format
+msgid "Error: could not connect to D-Bus."
+msgstr "Greška: ne mogu da se povežem na D-Bas."
+
+#: ../cli/src/connections.c:1612
+#, c-format
+msgid "Error: Could not get system settings."
+msgstr "Greška: Ne mogu da dobijem sistemska podešavanja."
+
+#: ../cli/src/connections.c:1620
+#, c-format
+msgid "Error: Could not get user settings."
+msgstr "GreÅ¡ka: Ne mogu da dobijem korisniÄka podeÅ¡avanja."
+
+#: ../cli/src/connections.c:1630
+#, c-format
+msgid "Error: Can't obtain connections: settings services are not running."
+msgstr ""
+"GreÅ¡ka: Ne mogu da naÄ‘em veze: upravljaÄki programi za podeÅ¡avanja nisu "
+"pokrenuti."
+
+#. 0
+#. 9
+#: ../cli/src/devices.c:61 ../cli/src/devices.c:89 ../cli/src/devices.c:184
+msgid "DEVICE"
+msgstr "UREÄAJ"
+
+#. 1
+#. 4
+#. 0
+#: ../cli/src/devices.c:63 ../cli/src/devices.c:93
+#: ../cli/src/network-manager.c:36
+msgid "STATE"
+msgstr "STANJE"
+
+#: ../cli/src/devices.c:72
+msgid "GENERAL"
+msgstr "OPÅ TE"
+
+#. 0
+#: ../cli/src/devices.c:73
+msgid "CAPABILITIES"
+msgstr "SPOSOBNOSTI"
+
+#. 1
+#: ../cli/src/devices.c:74
+msgid "WIFI-PROPERTIES"
+msgstr "BEŽIČNE-OSOBINE"
+
+#. 2
+#: ../cli/src/devices.c:75
+msgid "AP"
+msgstr "AP"
+
+#. 3
+#: ../cli/src/devices.c:76
+msgid "WIRED-PROPERTIES"
+msgstr "ŽIČANE-OSOBINE"
+
+#. 4
+#: ../cli/src/devices.c:77
+msgid "IP4-SETTINGS"
+msgstr "IP4-PODEÅ AVANJA"
+
+#. 5
+#: ../cli/src/devices.c:78
+msgid "IP4-DNS"
+msgstr "IP4-DNS"
+
+#. 6
+#: ../cli/src/devices.c:79
+msgid "IP6-SETTINGS"
+msgstr "IP6-PODEÅ AVANJA"
+
+#. 7
+#: ../cli/src/devices.c:80
+msgid "IP6-DNS"
+msgstr "IP6-DNS"
+
+#. 2
+#: ../cli/src/devices.c:91
+msgid "DRIVER"
+msgstr "DRAJVER"
+
+#. 3
+#: ../cli/src/devices.c:92
+msgid "HWADDR"
+msgstr "HARDVADRESA"
+
+#. 0
+#: ../cli/src/devices.c:102
+msgid "CARRIER-DETECT"
+msgstr "NALAŽ-NOSAČA"
+
+#. 1
+#: ../cli/src/devices.c:103
+msgid "SPEED"
+msgstr "BRZINA"
+
+#. 0
+#: ../cli/src/devices.c:112
+msgid "CARRIER"
+msgstr "NOSAČ"
+
+#. 0
+#: ../cli/src/devices.c:122
+msgid "WEP"
+msgstr "VEP"
+
+#. 1
+#: ../cli/src/devices.c:123
+msgid "WPA"
+msgstr "VPA"
+
+#. 2
+#: ../cli/src/devices.c:124
+msgid "WPA2"
+msgstr "VPA2"
+
+#. 3
+#: ../cli/src/devices.c:125
+msgid "TKIP"
+msgstr "TKIP"
+
+#. 4
+#: ../cli/src/devices.c:126
+msgid "CCMP"
+msgstr "CCMP"
+
+#. 0
+#: ../cli/src/devices.c:135 ../cli/src/devices.c:146
+msgid "ADDRESS"
+msgstr "ADRESA"
+
+#. 1
+#: ../cli/src/devices.c:136 ../cli/src/devices.c:147
+msgid "PREFIX"
+msgstr "PREFIKS"
+
+#. 2
+#: ../cli/src/devices.c:137 ../cli/src/devices.c:148
+msgid "GATEWAY"
+msgstr "PROLAZ"
+
+#. 0
+#: ../cli/src/devices.c:157 ../cli/src/devices.c:166
+msgid "DNS"
+msgstr "DNS"
+
+#. 0
+#: ../cli/src/devices.c:175
+msgid "SSID"
+msgstr "SSID"
+
+#. 1
+#: ../cli/src/devices.c:176
+msgid "BSSID"
+msgstr "BSSID"
+
+#. 2
+#: ../cli/src/devices.c:177
+msgid "MODE"
+msgstr "MOD"
+
+#. 3
+#: ../cli/src/devices.c:178
+msgid "FREQ"
+msgstr "FREK"
+
+#. 4
+#: ../cli/src/devices.c:179
+msgid "RATE"
+msgstr "PROTOK"
+
+#. 5
+#: ../cli/src/devices.c:180
+msgid "SIGNAL"
+msgstr "SIGNAL"
+
+#. 6
+#: ../cli/src/devices.c:181
+msgid "SECURITY"
+msgstr "SIGURNOST"
+
+#. 7
+#: ../cli/src/devices.c:182
+msgid "WPA-FLAGS"
+msgstr "VPA-ZASTAVICE"
+
+#. 8
+#: ../cli/src/devices.c:183
+msgid "RSN-FLAGS"
+msgstr "RSN-ZASTAVICE"
+
+#. 10
+#: ../cli/src/devices.c:185
+msgid "ACTIVE"
+msgstr "AKTIVNO"
+
+#: ../cli/src/devices.c:208
#, c-format
msgid ""
-"<span weight=\"bold\" size=\"larger\">VPN Login Failure</span>\n"
+"Usage: nmcli dev { COMMAND | help }\n"
+"\n"
+" COMMAND := { status | list | disconnect | wifi }\n"
"\n"
-"Could not start the VPN connection '%s' due to a login failure.\n"
+" status\n"
+" list [iface <iface>]\n"
+" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
+" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
"\n"
-"The VPN service said: \"%s\""
msgstr ""
-"<span weight=\"bold\" size=\"larger\">Prijava na VPN nije uspela</span>\n"
+"Upotreba: nmcli uređaj { NAREDBA | help }\n"
+"\n"
+" NAREDBA := { status | list | disconnect | wifi }\n"
"\n"
-"VPN veza sa mrežom „%s“ nije ostvarena jer prijava nije uspela.\n"
+" status\n"
+" list [iface <iface>]\n"
+" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
+" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
"\n"
-"Poruka VPN servisa je bila : „%s“"
-#: gnome/applet/applet.c:341
+#: ../cli/src/devices.c:228
+msgid "unmanaged"
+msgstr "nepodešeno"
+
+#: ../cli/src/devices.c:230
+msgid "unavailable"
+msgstr "nedostupno"
+
+#: ../cli/src/devices.c:232 ../cli/src/network-manager.c:91
+msgid "disconnected"
+msgstr "nije povezano"
+
+#: ../cli/src/devices.c:234
+msgid "connecting (prepare)"
+msgstr "povezujem se (priprema)"
+
+#: ../cli/src/devices.c:236
+msgid "connecting (configuring)"
+msgstr "povezujem se (podešavam)"
+
+#: ../cli/src/devices.c:238
+msgid "connecting (need authentication)"
+msgstr "povezujem se (potrebna prijava)"
+
+#: ../cli/src/devices.c:240
+msgid "connecting (getting IP configuration)"
+msgstr "povezujem se (preuzimam IP podešavanja)"
+
+#: ../cli/src/devices.c:242 ../cli/src/network-manager.c:89
+msgid "connected"
+msgstr "povezan"
+
+#: ../cli/src/devices.c:244
+msgid "connection failed"
+msgstr "povezivanje nije uspelo"
+
+#: ../cli/src/devices.c:267 ../cli/src/devices.c:424
+msgid "Unknown"
+msgstr "Nepoznato"
+
+#: ../cli/src/devices.c:299
+msgid "(none)"
+msgstr "(ništa)"
+
+#: ../cli/src/devices.c:324
+#, c-format
+msgid "%s: error converting IP4 address 0x%X"
+msgstr "%s: greška pri prevodu IP4 adrese 0x%X"
+
+#: ../cli/src/devices.c:393
+#, c-format
+msgid "%u MHz"
+msgstr "%u MHz"
+
+#: ../cli/src/devices.c:394
+#, c-format
+msgid "%u MB/s"
+msgstr "%u MB/s"
+
+#: ../cli/src/devices.c:403
+msgid "Encrypted: "
+msgstr "Å ifrovano: "
+
+#: ../cli/src/devices.c:408
+msgid "WEP "
+msgstr "VEP"
+
+#: ../cli/src/devices.c:410
+msgid "WPA "
+msgstr "VPA"
+
+#: ../cli/src/devices.c:412
+msgid "WPA2 "
+msgstr "CPA2"
+
+#: ../cli/src/devices.c:415
+msgid "Enterprise "
+msgstr "Preduzimljivo"
+
+#: ../cli/src/devices.c:424
+msgid "Ad-Hoc"
+msgstr "Ad-Hok"
+
+#: ../cli/src/devices.c:424
+msgid "Infrastructure"
+msgstr "Infrastrukturno"
+
+#: ../cli/src/devices.c:486
+#, c-format
+msgid "Error: 'dev list': %s"
+msgstr "Greška: „dev list“: %s"
+
+#: ../cli/src/devices.c:488
+#, c-format
+msgid "Error: 'dev list': %s; allowed fields: %s"
+msgstr "Greška: „dev list“: %s; dozvoljena polja: %s"
+
+#: ../cli/src/devices.c:497
+msgid "Device details"
+msgstr "Podaci o drajveru"
+
+#: ../cli/src/devices.c:527 ../cli/src/devices.c:925
+msgid "(unknown)"
+msgstr "(nepoznato)"
+
+#: ../cli/src/devices.c:528
+msgid "unknown)"
+msgstr "nepoznato)"
+
+#: ../cli/src/devices.c:554
+#, c-format
+msgid "%u Mb/s"
+msgstr "%u Mb/s"
+
+#. Print header
+#. "WIRED-PROPERTIES"
+#: ../cli/src/devices.c:627
+msgid "on"
+msgstr "uklj"
+
+#: ../cli/src/devices.c:627
+msgid "off"
+msgstr "isklj"
+
+#: ../cli/src/devices.c:808
+#, c-format
+msgid "Error: 'dev status': %s"
+msgstr "Greška: „dev status“: %s"
+
+#: ../cli/src/devices.c:810
+#, c-format
+msgid "Error: 'dev status': %s; allowed fields: %s"
+msgstr "Greška „dev status“: %s; dozvoljena polja: %s"
+
+#: ../cli/src/devices.c:817
+msgid "Status of devices"
+msgstr "Stanje uređaja"
+
+#: ../cli/src/devices.c:845
+#, c-format
+msgid "Error: '%s' argument is missing."
+msgstr "Greška: nedostaje argument „%s“."
+
+#: ../cli/src/devices.c:874 ../cli/src/devices.c:1013
+#: ../cli/src/devices.c:1136
+#, c-format
+msgid "Error: Device '%s' not found."
+msgstr "Greška: Nije nađen uređaj „%s“."
+
+#: ../cli/src/devices.c:897
+#, c-format
+msgid "Success: Device '%s' successfully disconnected."
+msgstr "Veza na uređaju „%s“ je uspešno prekinuta."
+
+#: ../cli/src/devices.c:922
+#, c-format
+msgid "Error: Device '%s' (%s) disconnecting failed: %s"
+msgstr "Greška: Ne mogu da prekinem vezu na uređaju „%s“ (%s): %s"
+
+#: ../cli/src/devices.c:930
+#, c-format
+msgid "Device state: %d (%s)\n"
+msgstr "Stanje uređaja: %d (%s)\n"
+
+#: ../cli/src/devices.c:994
+#, c-format
+msgid "Error: iface has to be specified."
+msgstr "Greška: morate da zadate iface."
+
+#: ../cli/src/devices.c:1112
+#, c-format
+msgid "Error: 'dev wifi': %s"
+msgstr "Greška: „dev wifi“: %s"
+
+#: ../cli/src/devices.c:1114
#, c-format
+msgid "Error: 'dev wifi': %s; allowed fields: %s"
+msgstr "Greška: „dev wifi“: %s; dozvoljena polja: %s"
+
+#: ../cli/src/devices.c:1121
+msgid "WiFi scan list"
+msgstr "Spisak pretrage bežiÄnih mreža"
+
+#: ../cli/src/devices.c:1156 ../cli/src/devices.c:1210
+#, c-format
+msgid "Error: Access point with hwaddr '%s' not found."
+msgstr "GreÅ¡ka: Nije naÄ‘ena pristupna taÄka sa hardverskom adresom „%s“."
+
+#: ../cli/src/devices.c:1173
+#, c-format
+msgid "Error: Device '%s' is not a WiFi device."
+msgstr "GreÅ¡ka: „%s“ nije bežiÄni mrežni ureÄ‘aj."
+
+#: ../cli/src/devices.c:1237
+#, c-format
+msgid "Error: 'dev wifi' command '%s' is not valid."
+msgstr "Greška: „dev wifi“ naredba „%s“ nije ispravna."
+
+#: ../cli/src/devices.c:1284
+#, c-format
+msgid "Error: 'dev' command '%s' is not valid."
+msgstr "Greška: „dev“ naredba „%s“ nije ispravna."
+
+#: ../cli/src/network-manager.c:35
+msgid "RUNNING"
+msgstr "POKRENUTO"
+
+#. 1
+#: ../cli/src/network-manager.c:37
+msgid "NET-ENABLED"
+msgstr "MREŽA-OMOGUĆENA"
+
+#. 2
+#: ../cli/src/network-manager.c:38
+msgid "WIFI-HARDWARE"
+msgstr "WIFI-UREÄAJ"
+
+#. 3
+#: ../cli/src/network-manager.c:39
+msgid "WIFI"
+msgstr "WIFI"
+
+#. 4
+#: ../cli/src/network-manager.c:40
+msgid "WWAN-HARDWARE"
+msgstr "WWAN-UREÄAJ"
+
+#. 5
+#: ../cli/src/network-manager.c:41
+msgid "WWAN"
+msgstr "WWAN"
+
+#: ../cli/src/network-manager.c:64
+#, 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 ""
-"<span weight=\"bold\" size=\"larger\">VPN Login Message</span>\n"
+"Usage: nmcli nm { COMMAND | help }\n"
+"\n"
+" COMMAND := { status | enable | sleep | wifi | wwan }\n"
"\n"
-"VPN connection '%s' said:\n"
+" status\n"
+" enable [true|false]\n"
+" sleep [true|false]\n"
+" wifi [on|off]\n"
+" wwan [on|off]\n"
"\n"
-"\"%s\""
msgstr ""
-"<span weight=\"bold\" size=\"larger\">Poruka pri prijavi na VPN</span>\n"
+"Upotreba: nmcli nm { NAREDBA | help }\n"
+"\n"
+" NAREDBA := { status | enable| sleep | wifi | wwan }\n"
"\n"
-"Poruka VPN veze „%s“ je:\n"
+" status\n"
+" enable [true|false]\n"
+" sleep [true|false]\n"
+" wifi [on|off]\n"
+" wwan [on|off]\n"
"\n"
-"„%s“"
-#: gnome/applet/applet.c:559 gnome/applet/applet.c:1922
-#: gnome/applet/other-network-dialog.c:315
-#: gnome/applet/passphrase-dialog.c:430
+#: ../cli/src/network-manager.c:85
+msgid "asleep"
+msgstr "uspavan"
+
+#: ../cli/src/network-manager.c:87
+msgid "connecting"
+msgstr "povezuje se"
+
+#: ../cli/src/network-manager.c:128
+#, c-format
+msgid "Error: 'nm status': %s"
+msgstr "Greška: „nm status“: %s"
+
+#: ../cli/src/network-manager.c:130
+#, c-format
+msgid "Error: 'nm status': %s; allowed fields: %s"
+msgstr "Greška: „nm status“: %s; dozvoljena polja: %s"
+
+#: ../cli/src/network-manager.c:137
+msgid "NetworkManager status"
+msgstr "Stanje Upravnika mreže"
+
+#. Print header
+#: ../cli/src/network-manager.c:144 ../cli/src/network-manager.c:145
+#: ../cli/src/network-manager.c:146 ../cli/src/network-manager.c:147
+#: ../cli/src/network-manager.c:154 ../cli/src/network-manager.c:247
+#: ../cli/src/network-manager.c:296 ../cli/src/network-manager.c:328
+msgid "enabled"
+msgstr "omogućen"
+
+#: ../cli/src/network-manager.c:144 ../cli/src/network-manager.c:145
+#: ../cli/src/network-manager.c:146 ../cli/src/network-manager.c:147
+#: ../cli/src/network-manager.c:154 ../cli/src/network-manager.c:247
+#: ../cli/src/network-manager.c:296 ../cli/src/network-manager.c:328
+msgid "disabled"
+msgstr "onemogućen"
+
+#: ../cli/src/network-manager.c:152
+msgid "running"
+msgstr "pokrenut"
+
+#: ../cli/src/network-manager.c:152
+msgid "not running"
+msgstr "nije pokrenut"
+
+#: ../cli/src/network-manager.c:175
+#, c-format
+#| msgid "Error: could not connect to D-Bus."
+msgid "Error: Couldn't connect to system bus: %s"
+msgstr "Greška: ne mogu da se povežem na sistemsku magistralu: %s"
+
+#: ../cli/src/network-manager.c:186
+#, c-format
+#| msgid "Error: could not connect to D-Bus."
+msgid "Error: Couldn't create D-Bus object proxy."
+msgstr "Greška: ne mogu da obrazujem DBas posrednika."
+
+#: ../cli/src/network-manager.c:192
+#, c-format
+#| msgid "Error: 'con list': %s"
+msgid "Error in sleep: %s"
+msgstr "Greška pri uspavljivanju: %s"
+
+#: ../cli/src/network-manager.c:237 ../cli/src/network-manager.c:286
+#: ../cli/src/network-manager.c:318
+#, c-format
+msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
+msgstr "Greška: „--fields“ vrednost „%s“ nije dozvoljena ovde; dozvoljene su: %s"
+
+#: ../cli/src/network-manager.c:245
+#| msgid "WiFi enabled"
+msgid "Networking enabled"
+msgstr "Umrežavanje je omogućeno"
+
+#: ../cli/src/network-manager.c:256
+#, c-format
+#| msgid "Error: invalid 'wwan' parameter: '%s'."
+msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
+msgstr ""
+"Greška: neispravan „enable“ parametar: „%s“; dozvoljeni su „true“ i „false“."
+
+#: ../cli/src/network-manager.c:265
+#, c-format
+#| msgid "Error: Could not connect to NetworkManager."
+msgid "Error: Sleeping status is not exported by NetworkManager."
+msgstr "Greška: Upravnika mreže nije izvezao stanje uspavljivanja."
+
+#: ../cli/src/network-manager.c:273
+#, c-format
+#| msgid "Error: invalid 'wifi' parameter: '%s'."
+msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
+msgstr ""
+"Greška: neispravan „sleep“ parametar: „%s“; dozvoljeni su „true“ i „false“."
+
+#: ../cli/src/network-manager.c:294
+msgid "WiFi enabled"
+msgstr "WiFi omogućen"
+
+#: ../cli/src/network-manager.c:305
+#, c-format
+msgid "Error: invalid 'wifi' parameter: '%s'."
+msgstr "Greška: neispravan „wifi“ parametar: „%s“."
+
+#: ../cli/src/network-manager.c:326
+msgid "WWAN enabled"
+msgstr "WWAN omogućen"
+
+#: ../cli/src/network-manager.c:337
+#, c-format
+msgid "Error: invalid 'wwan' parameter: '%s'."
+msgstr "Greška: neispravan „wwan“ parametar: „%s“."
+
+#: ../cli/src/network-manager.c:348
+#, c-format
+msgid "Error: 'nm' command '%s' is not valid."
+msgstr "Greška: „nm“ naredba „'%s“ nije ispravna."
+
+#: ../cli/src/nmcli.c:69
+#, c-format
msgid ""
-"The NetworkManager Applet could not find some required resources (the glade "
-"file was not found)."
-msgstr "Aplet Upravnik mreže nije mogao da pronađe neke od potrebnih resursa (glejd datoteka nije pronađena)."
+"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] <field1,field2,...>|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 ""
+"Upotreba: %s [OPCIJE] OBJEKAT { NAREDBA | help }\n"
+"\n"
+"OPCIJE\n"
+" -t[erse] sažet ispis\n"
+" -p[retty] uređen ispis\n"
+" -m[ode] tabular|multiline režim ispisa\n"
+" -f[ields] <field1,field2,...>|all|common određuje polja za ispis\n"
+" -e[scape] yes|no ne dodaje razdvojnike kolona u "
+"vrednostima\n"
+" -v[ersion] ispisuje izdanje programa\n"
+" -h[elp] ispisuje ovu pomoć\n"
+"\n"
+"OBJEKAT\n"
+" nm stanje Upravnika vezama\n"
+" con veze Upravnika vezama\n"
+" dev uređaji Upravnika mrežama\n"
+"\n"
-#: gnome/applet/applet.c:572
+#: ../cli/src/nmcli.c:113
#, c-format
-msgid "The network device \"%s (%s)\" does not support wireless scanning."
-msgstr "Mrežni ureÄ‘aj „%s (%s)“ ne podržava potragu za bežiÄnim mrežama."
+msgid "Error: Object '%s' is unknown, try 'nmcli help'."
+msgstr "Greška: „%s“ je nepoznati objekat, pogledajte „nmcli help“."
-#: gnome/applet/applet.c:579
+#: ../cli/src/nmcli.c:143
#, c-format
-msgid "The network device \"%s (%s)\" does not support link detection."
-msgstr "Mrežni uređaj „%s (%s)“ ne podržava otkrivanje veze."
+msgid "Error: Option '--terse' is specified the second time."
+msgstr "Greška: Opcija „--terse“ je zadata po drugi put."
-#: gnome/applet/applet.c:700
+#: ../cli/src/nmcli.c:148
#, c-format
-msgid "Preparing device %s for the wired network..."
-msgstr "Priprema ureÄ‘aja %s za žiÄanu mrežu..."
+msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
+msgstr "GreÅ¡ka: Opcije „--terse“ i „--pretty“ se meÄ‘usobno iskljuÄuju."
-#: gnome/applet/applet.c:702
+#: ../cli/src/nmcli.c:156
#, c-format
-msgid "Preparing device %s for the wireless network '%s'..."
-msgstr "Priprema ureÄ‘aja %s za bežiÄnu mrežu „%s“..."
+msgid "Error: Option '--pretty' is specified the second time."
+msgstr "Greška: Opcija „--pretty“ je zadata po drugi put."
-#: gnome/applet/applet.c:709
+#: ../cli/src/nmcli.c:161
#, c-format
-msgid "Configuring device %s for the wired network..."
-msgstr "PodeÅ¡avanje ureÄ‘aja %s za bežiÄnu mrežu..."
+msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
+msgstr "GreÅ¡ka: Opcije „--pretty“ i „--terse“ se meÄ‘usobno iskljuÄuju."
-#: gnome/applet/applet.c:711
+#: ../cli/src/nmcli.c:171 ../cli/src/nmcli.c:187
#, c-format
-msgid "Attempting to join the wireless network '%s'..."
-msgstr "PokuÅ¡aj pristupa bežiÄnoj mreži „%s“..."
+msgid "Error: missing argument for '%s' option."
+msgstr "Greška: nedostaje argument uz opciju „%s“."
-#: gnome/applet/applet.c:718
+#: ../cli/src/nmcli.c:180 ../cli/src/nmcli.c:196
#, c-format
-msgid "Waiting for Network Key for the wireless network '%s'..."
-msgstr "ÄŒekanje na mrežni kljuÄ za bežiÄnu mrežu „%s“..."
+msgid "Error: '%s' is not valid argument for '%s' option."
+msgstr "Greška: „%s“ nije ispravan argument uz opciju „%s“."
-#: gnome/applet/applet.c:725 gnome/applet/applet.c:734
-msgid "Requesting a network address from the wired network..."
-msgstr "Potraživanje mrežne adrese za žiÄanu mrežu..."
+#: ../cli/src/nmcli.c:203
+#, c-format
+msgid "Error: fields for '%s' options are missing."
+msgstr "Greška: nedostaju polja za „%s“ opciju."
-#: gnome/applet/applet.c:727 gnome/applet/applet.c:736
+#: ../cli/src/nmcli.c:209
#, c-format
-msgid "Requesting a network address from the wireless network '%s'..."
-msgstr "Potraživanje mrežne adrese za bežiÄnu mrežu „%s“..."
+msgid "nmcli tool, version %s\n"
+msgstr "nmcli alat, izdanje %s\n"
-#: gnome/applet/applet.c:743
-msgid "Finishing connection to the wired network..."
-msgstr "Obustavljanje veze sa žiÄanom mrežom..."
+#: ../cli/src/nmcli.c:215
+#, c-format
+msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
+msgstr "Greška: Opcija „%s“ je nepoznata, probajte „nmcli -help“."
-#: gnome/applet/applet.c:745
+#: ../cli/src/nmcli.c:234
#, c-format
-msgid "Finishing connection to the wireless network '%s'..."
-msgstr "Obustavljanje veze sa bežiÄnom mrežom „%s“..."
+msgid "Caught signal %d, shutting down..."
+msgstr "Dobio sam signal %d, iskljuÄujem..."
-#: gnome/applet/applet.c:791
-msgid "NetworkManager is not running"
-msgstr "UpravljaÄ mreže nije pokrenut"
+#: ../cli/src/nmcli.c:259
+#, c-format
+msgid "Error: Could not connect to NetworkManager."
+msgstr "Greška: Ne mogu da se povežem na Upravnika mreže."
-#: gnome/applet/applet.c:802
-msgid "No network connection"
-msgstr "Nema mrežnih veza"
+#: ../cli/src/nmcli.c:275
+msgid "Success"
+msgstr "Uspešno"
-#: gnome/applet/applet.c:809
-msgid "Wired network connection"
-msgstr "ŽiÄna mrežna veza"
+#: ../cli/src/settings.c:411
+#, c-format
+msgid "%d (hex-ascii-key)"
+msgstr "%d (heksadekadni-aski-kljuÄ)"
-# FIXME Ad-hok
-#: gnome/applet/applet.c:816
-msgid "Connected to an Ad-Hoc wireless network"
-msgstr "Povezan sa ad-hok bežiÄnom mrežom"
+#: ../cli/src/settings.c:413
+#, c-format
+msgid "%d (104/128-bit passphrase)"
+msgstr "%d (104/128-bitna lozinka)"
-#: gnome/applet/applet.c:830
+#: ../cli/src/settings.c:416
#, c-format
-msgid "Wireless network connection to '%s' (%d%%)"
-msgstr "BežiÄna mrežna veza sa „%s“ (%d%%)"
+msgid "%d (unknown)"
+msgstr "%d (nepoznato)"
-#: gnome/applet/applet.c:1181
-msgid "Other Wireless Networks..."
-msgstr "Ostale bežiÄne mreže..."
+#: ../cli/src/settings.c:442
+msgid "0 (unknown)"
+msgstr "0 (napoznato)"
-#: gnome/applet/applet.c:1202
-msgid "Create new Wireless Network..."
-msgstr "Napravi novu bežiÄnu mrežu..."
+#: ../cli/src/settings.c:448
+msgid "any, "
+msgstr "vilo koje, "
-#: gnome/applet/applet.c:1315
-msgid "VPN Connections"
-msgstr "VPN veze"
+#: ../cli/src/settings.c:450
+msgid "900 MHz, "
+msgstr "900 MHz, "
-#: gnome/applet/applet.c:1337
-msgid "Disconnect VPN..."
-msgstr "IskljuÄi VPN..."
+#: ../cli/src/settings.c:452
+msgid "1800 MHz, "
+msgstr "1800 MHz, "
-#: gnome/applet/applet.c:1366
-msgid "No network devices have been found"
-msgstr "Nije pronađen nijedan mrežni uređaj"
+#: ../cli/src/settings.c:454
+msgid "1900 MHz, "
+msgstr "1900 MHz, "
-#: gnome/applet/applet.c:1529
-msgid "NetworkManager is not running..."
-msgstr "UpravljaÄ mrežom nije pokrenut..."
+#: ../cli/src/settings.c:456
+msgid "850 MHz, "
+msgstr "850 MHz, "
-#: gnome/applet/applet.c:1599 gnome/applet/applet.c:1647
-msgid "Pause Wireless Scanning"
-msgstr "Obustavi traženje bežiÄne mreže"
+#: ../cli/src/settings.c:458
+msgid "WCDMA 3GPP UMTS 2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: gnome/applet/applet.c:1604
-msgid "Resume Wireless Scanning"
-msgstr "Nastavi traženje bežiÄne mreže"
+#: ../cli/src/settings.c:460
+msgid "WCDMA 3GPP UMTS 1800 MHz, "
+msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: gnome/applet/applet.c:1614 gnome/applet/applet.c:1653
-msgid "Stop All Wireless Devices"
-msgstr "Zaustavi sve bežiÄne ureÄ‘aje"
+#: ../cli/src/settings.c:462
+msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: gnome/applet/applet.c:1619
-msgid "Start All Wireless Devices"
-msgstr "Pokreni sve bežiÄne ureÄ‘aje"
+#: ../cli/src/settings.c:464
+msgid "WCDMA 3GPP UMTS 800 MHz, "
+msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: gnome/applet/applet.c:1662
-msgid "Help"
-msgstr "Pomoć"
+#: ../cli/src/settings.c:466
+msgid "WCDMA 3GPP UMTS 850 MHz, "
+msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: gnome/applet/applet.c:1669
-msgid "About"
-msgstr "O programu"
+#: ../cli/src/settings.c:468
+msgid "WCDMA 3GPP UMTS 900 MHz, "
+msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: gnome/applet/applet.c:2070
-msgid ""
-"The NetworkManager applet could not find some required resources. It cannot "
-"continue.\n"
-msgstr "UpravljaÄ mrežom nije uspeo da pronaÄ‘e neophodne resurse i ne može da nastavi rad.\n"
+#: ../cli/src/settings.c:470
+msgid "WCDMA 3GPP UMTS 1700 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700 MHz, "
+
+#: ../cli/src/settings.c:554 ../cli/src/settings.c:721
+msgid "auto"
+msgstr "automatski"
+
+#: ../cli/src/settings.c:716 ../cli/src/settings.c:719
+#: ../cli/src/settings.c:720 ../cli/src/utils.c:172
+msgid "not set"
+msgstr "nije izabrano"
+
+#: ../cli/src/utils.c:124
+#, c-format
+msgid "field '%s' has to be alone"
+msgstr "polje „%s“ mora da bude prazno"
+
+#: ../cli/src/utils.c:127
+#, c-format
+msgid "invalid field '%s'"
+msgstr "neispravno polje „%s“"
-#: gnome/applet/gtkcellrendererprogress.c:243
-#: gnome/applet/gtkcellrendererprogress.c:301
+#: ../cli/src/utils.c:146
#, c-format
-msgid "progress bar label|%d %%"
-msgstr "%d %%"
+msgid "Option '--terse' requires specifying '--fields'"
+msgstr "Opcija „--terse“ zahteva opciju „--fields“"
-#: gnome/applet/menu-items.c:91
+#: ../cli/src/utils.c:150
#, c-format
-msgid "Wired Network (%s)"
-msgstr "ŽiÄana mreža (%s)"
+msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
+msgstr "Opcija „--terse“ zahteva opciju „--fields“, a ne „%s“"
-#: gnome/applet/menu-items.c:93
-msgid "Wired Network"
-msgstr "ŽiÄana mreža"
+#: ../libnm-util/crypto.c:120
+#, c-format
+msgid "PEM key file had no end tag '%s'."
+msgstr "PEM datoteka sa kljuÄem nema zavrÅ¡nu oznaku „%s“."
-#: gnome/applet/menu-items.c:166
+#: ../libnm-util/crypto.c:130
#, 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)"
-msgstr[2] "BežiÄnih mreža (%s)"
+msgid "Doesn't look like a PEM private key file."
+msgstr "Ne izgleda kao privatna PEM datoteka sa kljuÄem."
-#: gnome/applet/menu-items.c:168
-msgid "Wireless Network"
-msgid_plural "Wireless Networks"
-msgstr[0] "BežiÄna mreža"
-msgstr[1] "BežiÄne mreže"
-msgstr[2] "BežiÄne mreže"
+#: ../libnm-util/crypto.c:138
+#, c-format
+msgid "Not enough memory to store PEM file data."
+msgstr "Nema dovoljno memorije za Äuvanje PEM podataka."
-#: gnome/applet/menu-items.c:294
-msgid " (invalid Unicode)"
-msgstr " (neispravan Unikod)"
+#: ../libnm-util/crypto.c:154
+#, c-format
+msgid "Malformed PEM file: Proc-Type was not first tag."
+msgstr "Loša PEM datoteka: Proc-Type nije prva oznaka."
-#: gnome/applet/other-network-dialog.c:148
-#: gnome/applet/passphrase-dialog.c:164
-#: gnome/applet/applet.glade.h:27
-msgid "Passphrase:"
-msgstr "Lozinka:"
+#: ../libnm-util/crypto.c:162
+#, c-format
+msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
+msgstr "Loša PEM datoteka: nepoznata Proc-Type oznaka „%s“."
-#: gnome/applet/other-network-dialog.c:151
-#: gnome/applet/passphrase-dialog.c:167
-msgid "Ascii Key:"
-msgstr "ASKRI kljuÄ:"
+#: ../libnm-util/crypto.c:172
+#, c-format
+msgid "Malformed PEM file: DEK-Info was not the second tag."
+msgstr "Loša PEM datoteka: DEK-Info nije druga oznaka."
-#: gnome/applet/other-network-dialog.c:154
-#: gnome/applet/passphrase-dialog.c:170
-msgid "Hex Key:"
-msgstr "Heksa kljuÄ:"
+#: ../libnm-util/crypto.c:183
+#, c-format
+msgid "Malformed PEM file: no IV found in DEK-Info tag."
+msgstr "Loša PEM datoteka: nije dat IV unutar DEK-Info oznake."
-#: gnome/applet/other-network-dialog.c:229
-msgid "Create new wireless network"
-msgstr "Napravi novu bežiÄnu mrežu"
+#: ../libnm-util/crypto.c:190
+#, c-format
+msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
+msgstr "Loša PEM datoteka: neispravan format za IV unutar DEK-Info oznake."
-#: gnome/applet/other-network-dialog.c:230
-msgid ""
-"Enter the ESSID and security settings of the wireless network you wish to "
-"create."
-msgstr "Unesite ESSID i bezbednosne postavke bežiÄne mreže koju želite da naÄinite."
+#: ../libnm-util/crypto.c:203
+#, c-format
+msgid "Malformed PEM file: unknown private key cipher '%s'."
+msgstr "LoÅ¡a PEM datoteka: nepoznata Å¡ifra privatnog kljuÄa „%s“."
-#: gnome/applet/other-network-dialog.c:235
-msgid "Custom wireless network"
-msgstr "KorisniÄka bežiÄna mreža"
+#: ../libnm-util/crypto.c:222
+#, c-format
+msgid "Could not decode private key."
+msgstr "Ne mogu da deÅ¡ifrujem privatni kljuÄ."
-#: gnome/applet/other-network-dialog.c:236
-msgid "Enter the ESSID of the wireless network to which you wish to connect."
-msgstr "Unesite ESSID bežiÄne mreže sa kojom želite da se povežete."
+#: ../libnm-util/crypto.c:267
+#, c-format
+msgid "PEM certificate '%s' had no end tag '%s'."
+msgstr "PEM sertifikat „%s“ nema završnu oznaku „%s“."
-#: gnome/applet/vpn-password-dialog.c:105
+#: ../libnm-util/crypto.c:277
#, c-format
-msgid "You must log in to access the Virtual Private Network '%s'."
-msgstr "Morate biti prijavljeni kako biste koristili virtuelnu privatnu mrežu „%s“."
+msgid "Failed to decode certificate."
+msgstr "Ne mogu da dešifrujem sertifikat."
-#: gnome/applet/applet.glade.h:1
-msgid " "
-msgstr " "
+#: ../libnm-util/crypto.c:286
+#, c-format
+msgid "Not enough memory to store certificate data."
+msgstr "Nema dovoljno memorije za Äuvanje podataka o sertifikatu."
-#: gnome/applet/applet.glade.h:2
-msgid "*"
-msgstr "*"
+#: ../libnm-util/crypto.c:294
+#, c-format
+msgid "Not enough memory to store file data."
+msgstr "Nema dovoljno memorije za Äuvanje podataka o datoteci."
-#: gnome/applet/applet.glade.h:3
-msgid ""
-"128-bit Passphrase (WEP)\n"
-"Ascii Key (WEP)\n"
-"Hex Key (WEP)"
+#: ../libnm-util/crypto.c:324
+#, c-format
+msgid "IV must be an even number of bytes in length."
+msgstr "IV mora da sadrži paran broj bitova."
+
+#: ../libnm-util/crypto.c:333
+#, c-format
+msgid "Not enough memory to store the IV."
+msgstr "Nema dovoljno memorije za Äuvanje IV."
+
+#: ../libnm-util/crypto.c:344
+#, c-format
+msgid "IV contains non-hexadecimal digits."
+msgstr "IV sadrži cifre koje nisu heksadecimalne."
+
+#: ../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
+#, c-format
+msgid "Private key cipher '%s' was unknown."
+msgstr "Lozinka privatnog kljuÄa „%s“ nije poznata."
+
+#: ../libnm-util/crypto.c:391
+#, c-format
+msgid "Not enough memory to decrypt private key."
+msgstr "Nema dovoljno memorije za deÅ¡ifrovanje privatnog kljuÄa."
+
+#: ../libnm-util/crypto.c:511
+#, c-format
+msgid "Unable to determine private key type."
+msgstr "Ne mogu da odredim vrstu privatnog kljuÄa."
+
+#: ../libnm-util/crypto.c:530
+#, c-format
+msgid "Not enough memory to store decrypted private key."
+msgstr "Nema dovoljno memorije za Äuvanje deÅ¡ifrovanog privatnog kljuÄa."
+
+#: ../libnm-util/crypto_gnutls.c:49
+msgid "Failed to initialize the crypto engine."
+msgstr "Ne mogu da pokrenem program za Å¡ifrovanje."
+
+#: ../libnm-util/crypto_gnutls.c:93
+#, c-format
+msgid "Failed to initialize the MD5 engine: %s / %s."
+msgstr "Ne mogu da pokrenem program za MD5 sumu: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:156
+#, c-format
+msgid "Invalid IV length (must be at least %zd)."
+msgstr "Neispravna IV dužina (mora da bude bar %zd)."
+
+#: ../libnm-util/crypto_gnutls.c:165 ../libnm-util/crypto_nss.c:188
+#, c-format
+msgid "Not enough memory for decrypted key buffer."
+msgstr "Nema dovoljno memorije u ostavi za deÅ¡ifrovani kljuÄ."
+
+#: ../libnm-util/crypto_gnutls.c:173
+#, c-format
+msgid "Failed to initialize the decryption cipher context: %s / %s."
+msgstr "Ne mogu da pokrenem dešifrovanje lozinke: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:182
+#, c-format
+msgid "Failed to set symmetric key for decryption: %s / %s."
+msgstr "Ne mogu da postavim simetriÄni kljuÄ za deÅ¡ifrovanje: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:191
+#, c-format
+msgid "Failed to set IV for decryption: %s / %s."
+msgstr "Ne mogu da postavim IV za dešifrovanje: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:200
+#, c-format
+msgid "Failed to decrypt the private key: %s / %s."
+msgstr "Ne mogu da deÅ¡ifrujem privatni kljuÄ: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:210 ../libnm-util/crypto_nss.c:267
+#, c-format
+msgid "Failed to decrypt the private key: unexpected padding length."
+msgstr "Ne mogu da deÅ¡ifrujem privatni kljuÄ: neoÄekivana dužina."
+
+#: ../libnm-util/crypto_gnutls.c:221 ../libnm-util/crypto_nss.c:278
+#, c-format
+msgid "Failed to decrypt the private key."
+msgstr "Ne mogu da deÅ¡ifrujem privatni kljuÄ."
+
+#: ../libnm-util/crypto_gnutls.c:286 ../libnm-util/crypto_nss.c:356
+#, c-format
+msgid "Could not allocate memory for encrypting."
+msgstr "Ne mogu da rezervišem memoriju za dešifrovanje."
+
+#: ../libnm-util/crypto_gnutls.c:294
+#, c-format
+msgid "Failed to initialize the encryption cipher context: %s / %s."
+msgstr "Ne mogu da pokrenem Å¡ifrovanje lozinke: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:303
+#, c-format
+msgid "Failed to set symmetric key for encryption: %s / %s."
+msgstr "Ne mogu da postavim simetriÄni kljuÄ za Å¡ifrovanje: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:313
+#, c-format
+msgid "Failed to set IV for encryption: %s / %s."
+msgstr "Ne mogu da postavim IV za Å¡ifrovanje: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:322
+#, c-format
+msgid "Failed to encrypt the data: %s / %s."
+msgstr "Ne mogu da Å¡ifrujem podatke: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:362
+#, c-format
+msgid "Error initializing certificate data: %s"
+msgstr "Greška prilikom otvaranja podataka o sertifikatu: %s"
+
+#: ../libnm-util/crypto_gnutls.c:384
+#, c-format
+msgid "Couldn't decode certificate: %s"
+msgstr "De mogu da dešifrujem sertifikat: %s"
+
+#: ../libnm-util/crypto_gnutls.c:408
+#, c-format
+msgid "Couldn't initialize PKCS#12 decoder: %s"
+msgstr "Ne mogu da zapoÄnem PKCS#12 deÅ¡ifrovanje: %s"
+
+#: ../libnm-util/crypto_gnutls.c:421
+#, c-format
+msgid "Couldn't decode PKCS#12 file: %s"
+msgstr "Ne mogu da dešifrujem PKCS#12 datoteku: %s"
+
+#: ../libnm-util/crypto_gnutls.c:433
+#, c-format
+msgid "Couldn't verify PKCS#12 file: %s"
+msgstr "Ne mogu da proverim PKCS#12 datoteku: %s"
+
+#: ../libnm-util/crypto_nss.c:56
+#, c-format
+msgid "Failed to initialize the crypto engine: %d."
+msgstr "Ne mogu da pokrenem program za Å¡ifrovanje: %d."
+
+#: ../libnm-util/crypto_nss.c:111
+#, c-format
+msgid "Failed to initialize the MD5 context: %d."
+msgstr "Ne mogu da pokrenem MD5 sadržaj: %d."
+
+#: ../libnm-util/crypto_nss.c:179
+#, c-format
+msgid "Invalid IV length (must be at least %d)."
+msgstr "Neispravna IV dužina (mora da bude bar %d)."
+
+#: ../libnm-util/crypto_nss.c:196
+#, c-format
+msgid "Failed to initialize the decryption cipher slot."
+msgstr "Ne mogu da pokrenem slot za dešifrovanje lozinke."
+
+#: ../libnm-util/crypto_nss.c:206
+#, c-format
+msgid "Failed to set symmetric key for decryption."
+msgstr "Ne mogu da postavim simetriÄni kljuÄ za Å¡ifrovanje."
+
+#: ../libnm-util/crypto_nss.c:216
+#, c-format
+msgid "Failed to set IV for decryption."
+msgstr "Ne mogu da postavim IV za dešifrovanje."
+
+#: ../libnm-util/crypto_nss.c:224
+#, c-format
+msgid "Failed to initialize the decryption context."
+msgstr "Ne mogu da pokrenem sadržaj za dešifrovanje."
+
+#: ../libnm-util/crypto_nss.c:237
+#, c-format
+msgid "Failed to decrypt the private key: %d."
+msgstr "Ne mogu da deÅ¡ifrujem privatni kljuÄ: %d."
+
+#: ../libnm-util/crypto_nss.c:245
+#, c-format
+msgid "Failed to decrypt the private key: decrypted data too large."
+msgstr "Ne mogu da deÅ¡ifrujem privatni kljuÄ: deÅ¡ifrovani podaci su predugaÄki."
+
+#: ../libnm-util/crypto_nss.c:256
+#, c-format
+msgid "Failed to finalize decryption of the private key: %d."
+msgstr "Ne mogu da zavrÅ¡im deÅ¡ifrovanje privatnog kljuÄa: %d."
+
+#: ../libnm-util/crypto_nss.c:364
+#, c-format
+msgid "Failed to initialize the encryption cipher slot."
+msgstr "Ne mogu da pokrenem slot za Å¡ifrovanje lozinke."
+
+#: ../libnm-util/crypto_nss.c:372
+#, c-format
+msgid "Failed to set symmetric key for encryption."
+msgstr "Ne mogu da postavim simetriÄni kljuÄ za Å¡ifrovanje."
+
+#: ../libnm-util/crypto_nss.c:380
+#, c-format
+msgid "Failed to set IV for encryption."
+msgstr "Ne mogu da postavim IV za Å¡ifrovanje."
+
+#: ../libnm-util/crypto_nss.c:388
+#, c-format
+msgid "Failed to initialize the encryption context."
+msgstr "Ne mogu da pokrenem sadržaj za šifrovanje."
+
+#: ../libnm-util/crypto_nss.c:396
+#, c-format
+msgid "Failed to encrypt: %d."
+msgstr "Ne mogu da Å¡ifrujem: %d."
+
+#: ../libnm-util/crypto_nss.c:404
+#, c-format
+msgid "Unexpected amount of data after encrypting."
+msgstr "NeoÄekivan obim podataka nakon Å¡ifrovanja."
+
+#: ../libnm-util/crypto_nss.c:447
+#, c-format
+msgid "Couldn't decode certificate: %d"
+msgstr "Ne mogu da dešifrujem sertifikat: %d"
+
+#: ../libnm-util/crypto_nss.c:482
+#, c-format
+msgid "Couldn't convert password to UCS2: %d"
+msgstr "Ne mogu da pretvorim lozinku u UCS2: %d"
+
+#: ../libnm-util/crypto_nss.c:510
+#, c-format
+msgid "Couldn't initialize PKCS#12 decoder: %d"
+msgstr "Ne mogu da pokrenem program za PKCS#12 :dešifrovanje %d"
+
+#: ../libnm-util/crypto_nss.c:519
+#, c-format
+msgid "Couldn't decode PKCS#12 file: %d"
+msgstr "Ne mogu da dešifrujem PKCS#12 datoteku: %d"
+
+#: ../libnm-util/crypto_nss.c:528
+#, c-format
+msgid "Couldn't verify PKCS#12 file: %d"
+msgstr "Ne mogu da proverim PKCS#12 datoteku: %d"
+
+#: ../libnm-util/crypto_nss.c:557
+msgid "Could not generate random data."
+msgstr "Ne mogu da obrazujem nasumiÄne podatke."
+
+#: ../libnm-util/nm-utils.c:1975
+#, c-format
+msgid "Not enough memory to make encryption key."
+msgstr "Nema dovoljno memorije za Å¡ifrovanje kljuÄa."
+
+#: ../libnm-util/nm-utils.c:2085
+msgid "Could not allocate memory for PEM file creation."
+msgstr "Ne mogu da rezervišem memoriju za obrazovanje PEM datoteke."
+
+#: ../libnm-util/nm-utils.c:2097
+#, c-format
+msgid "Could not allocate memory for writing IV to PEM file."
+msgstr "Ne mogu da rezervišem memoriju za upis IV u PEM datoteku."
+
+#: ../libnm-util/nm-utils.c:2109
+#, c-format
+msgid "Could not allocate memory for writing encrypted key to PEM file."
msgstr ""
-"128-bitni kljuÄ (WEP)\n"
-"ASKRI kljuÄ (WEP)\n"
-"Heks kljuÄ (WEP)"
+"Ne mogu da rezerviÅ¡em memoriju za upis Å¡ifrovanog kljuÄa u PEM datoteku."
-#: gnome/applet/applet.glade.h:6
-msgid ""
-"128-bit passphrase (WEP)\n"
-"Ascii key (WEP)\n"
-"Hex key (WEP)"
+#: ../libnm-util/nm-utils.c:2128
+#, c-format
+msgid "Could not allocate memory for PEM file data."
+msgstr "Ne mogu da rezervišem memoriju za PEM datoteku."
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
+msgid "Connection sharing via a protected WiFi network"
+msgstr "Veza se deli preko zaÅ¡tićene bežiÄne mreže"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
+msgid "Connection sharing via an open WiFi network"
+msgstr "Veza se deli preko otvorene bežiÄne mreže"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
+msgid "Modify persistent system hostname"
+msgstr "Trajno izmeni ime hosta"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
+msgid "Modify system connections"
+msgstr "Izmeni veze"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
+msgid "System policy prevents modification of system settings"
+msgstr "Ovlašćenja sistema ne dozvoljavaju izmenu sistemskih podešavanja"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
+msgid "System policy prevents modification of the persistent system hostname"
+msgstr "Ovlašćenja sistema ne dozvoljavaju izmenu hosta"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
+msgid "System policy prevents sharing connections via a protected WiFi network"
msgstr ""
-"128-bitni kljuÄ (WEP)\n"
-"ASKRI kljuÄ (WEP)\n"
-"Heks kljuÄ (WEP)"
+"Ovlašćenja sistema ne dozvoljavaju deljenje veze preko zaÅ¡tićene bežiÄne mreže"
-#: gnome/applet/applet.glade.h:10
-#, no-c-format
-msgid ""
-"<span weight=\"bold\" size=\"larger\">Passphrase Required by Wireless "
-"Network</span>\n"
-"\n"
-"A passphrase or encryption key is required to access the wireless network '%"
-"s'."
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
+msgid "System policy prevents sharing connections via an open WiFi network"
msgstr ""
-"<span weight=\"bold\" size=\"larger\">BežiÄna mreža zahteva lozinku</span>\n"
-"\n"
-" Lozinka ili kljuÄ za Å¡ifrovanje su neophodni za pristup bežiÄnoj mreži „%s“."
+"Ovlašćenja sistema ne dozvoljavaju deljenje veze preko otvorene bežiÄne mreže"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
+msgid "Allow control of network connections"
+msgstr "Dozvoli kontrolu mrežnih veza"
-#: gnome/applet/applet.glade.h:14
-#, no-c-format
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
+msgid "Allow use of user-specific connections"
+msgstr "Dozvoli veze koje određuje korisnik"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
+msgid "Enable or disable WiFi devices"
+msgstr "Omogući ili onemogući bežiÄne ureÄ‘aje"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
+msgid "Enable or disable mobile broadband devices"
+msgstr "Omogući ili onemogući mobilne širokopojasne uređaje"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+msgid "Enable or disable system networking"
+msgstr "Omogući ili onemogući umrežavanje na sistemu"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
msgid ""
-"<span weight=\"bold\" size=\"larger\">Reduced Network Functionality</span>\n"
-"\n"
-"%s It will not be completely functional."
+"Put NetworkManager to sleep or wake it up (should only be used by system "
+"power management)"
msgstr ""
-"<span weight=\"bold\" size=\"larger\">Smanjena upotrebna vrednost mreže</span>\n"
-"\n"
-"%s neće biti sasvim upotrebljiva."
+"Omogućava uspavljivanje Upravnika mreže (koristi se sa Upravnikom potrošnje na "
+"sistemu)"
-#: gnome/applet/applet.glade.h:18
-#, no-c-format
-msgid ""
-"<span weight=\"bold\" size=\"larger\">Wireless Network Login Confirmation</"
-"span>\n"
-"\n"
-"You have chosen log in to the wireless network '%s'. If you are sure this "
-"wireless network is secure, click the checkbox below and NetworkManager will "
-"no longer pester you with stupid questions when you connect to it."
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
+msgid "System policy prevents control of network connections"
+msgstr "Ovlašćenja sistema onemogućavaju kontrolu mrežnih veza"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
+msgid "System policy prevents enabling or disabling WiFi devices"
+msgstr "Ovlašćenja sistema onemogućavaju upravljanje bežiÄnim ureÄ‘ajima"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
+msgid "System policy prevents enabling or disabling mobile broadband devices"
msgstr ""
-"<span weight=\"bold\" size=\"larger\">Potvrda prijave na mrežu</span>\n"
-"\n"
-"Želite da se prijavite na mrežu „%s“. Ako ste sigurni da je ova bežiÄna mreža bezbedna, obeležite kućicu ispod i Upravnik mreže vam viÅ¡e neće postavljati suviÅ¡na pitanja pri prijavi na ovu mrežu."
+"Ovlašćenja sistema onemogućavaju upravljanje mobilnim širokopojasnim uređajima"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
+msgid "System policy prevents enabling or disabling system networking"
+msgstr "Ovlašćenja sistema onemogućavaju upravljanje mrežom na sistemu"
-#: gnome/applet/applet.glade.h:21
-msgid "Always Trust this Wireless Network"
-msgstr "Uvek pokloni poverenje bežiÄnoj mreži"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
+msgid "System policy prevents putting NetworkManager to sleep or waking it up"
+msgstr "Ovlašćenja sistema onemogućavaju uspavljivanje Upravnika mrežom"
-#: gnome/applet/applet.glade.h:22
-msgid "C_onnect"
-msgstr "P_oveži se"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
+msgid "System policy prevents use of user-specific connections"
+msgstr "Ovlašćenja sistema onemogućavaju upotrebu korisnikovih veza"
-#: gnome/applet/applet.glade.h:23
-msgid "Connect with encryption enabled"
-msgstr "Poveži se i ukljuÄi Å¡ifrovanje"
+#: ../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 "greška u obradi netlink poruke: %s"
-#: gnome/applet/applet.glade.h:24
-msgid "Don't remind me again"
-msgstr "Ne podsećaj me više"
+#: ../src/nm-netlink-monitor.c:214
+msgid "error occurred while waiting for data on socket"
+msgstr "greÅ¡ka prilikom Äekanja podataka na utiÄnici"
-#: gnome/applet/applet.glade.h:25
-msgid "Key Type:"
-msgstr "Vrsta kljuÄa:"
+#: ../src/nm-netlink-monitor.c:254
+#, c-format
+msgid "unable to connect to netlink for monitoring link status: %s"
+msgstr "ne mogu da se povežem na netlink radi praćenja stanja veze: %s"
-#: gnome/applet/applet.glade.h:26
-msgid "Key type:"
-msgstr "Vrsta kljuÄa:"
+#: ../src/nm-netlink-monitor.c:265
+#, c-format
+msgid "unable to enable netlink handle credential passing: %s"
+msgstr "ne mogu da ukljuÄim netlink sigurnosni prolaz: %s"
-#: gnome/applet/applet.glade.h:28
-msgid "Wireless Network Key Required"
-msgstr "Potreban je kljuÄ za bežiÄnu mrežu"
+#: ../src/nm-netlink-monitor.c:291 ../src/nm-netlink-monitor.c:353
+#, c-format
+msgid "unable to allocate netlink handle for monitoring link status: %s"
+msgstr "ne mogu da rezervišem netlink za praćenje stanja veze: %s"
-#: gnome/applet/applet.glade.h:29
-msgid "Wireless _adapter:"
-msgstr "BežiÄni _ureÄ‘aj:"
+#: ../src/nm-netlink-monitor.c:376
+#, c-format
+msgid "unable to allocate netlink link cache for monitoring link status: %s"
+msgstr "ne mogu da rezervišem netlink ostavu radi praćenja stanja veze: %s"
-#: gnome/applet/applet.glade.h:30
-msgid "Wireless _network:"
-msgstr "BežiÄna _mreža:"
+#: ../src/nm-netlink-monitor.c:502
+#, c-format
+msgid "unable to join netlink group: %s"
+msgstr "ne mogu da se prikljuÄin netlink grupi: %s"
-#: gnome/applet/applet.glade.h:31
-msgid "_Login to Network"
-msgstr "_Umreži se"
+#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642
+#, c-format
+msgid "error updating link cache: %s"
+msgstr "greška pri osvežavanju ostave sa vezama: %s"
-#: gnome/applet/applet.glade.h:32
-msgid "_OK"
-msgstr "_U redu"
+#: ../src/main.c:499
+#, c-format
+msgid "Invalid option. Please use --help to see a list of valid options.\n"
+msgstr "Neispravna opcija. Unesite „--help“ za spisak svih opcija.\n"
-#: src/nm-netlink-monitor.c:154
+#: ../src/main.c:570
#, c-format
-msgid ""
-"unable to create netlink socket for monitoring wired ethernet devices - %s"
-msgstr "Nije moguće napraviti utiÄnicu za posmatranje žiÄanog mrežnog ureÄ‘aja - %s"
+msgid "%s. Please use --help to see a list of valid options.\n"
+msgstr "%s. Pokrenite sa --help za spisak dostupnih opcija.\n"
-#: src/nm-netlink-monitor.c:172
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:328
+msgid "# Created by NetworkManager\n"
+msgstr "# Napravio NetworkManager\n"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:344
#, c-format
msgid ""
-"unable to bind to netlink socket for monitoring wired ethernet devices - %s"
-msgstr "Nije moguće povezati se na utiÄnicu za posmatranje žiÄanog mrežnog ureÄ‘aja - %s"
+"# Merged from %s\n"
+"\n"
+msgstr ""
+"# Spojeno sa %s\n"
+"\n"
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:284
+msgid "no usable DHCP client could be found."
+msgstr "ne mogu da nađem DHCP program."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+msgid "'dhclient' could be found."
+msgstr "Ne mogu da nađem „dhclient“."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:303
+msgid "'dhcpcd' could be found."
+msgstr "Ne mogu da nađem „dhcpcd“."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:311
+#, c-format
+msgid "unsupported DHCP client '%s'"
+msgstr "nepodržan DHCP klijent „%s“"
-#: src/nm-netlink-monitor.c:404
-msgid "operation took too long"
-msgstr "Potraga je predugo trajala"
+#: ../src/logging/nm-logging.c:146
+#, c-format
+msgid "Unknown log level '%s'"
+msgstr "„%s“ nije podržan nivo zapisa dnevnika"
+
+#: ../src/logging/nm-logging.c:171
+#, c-format
+msgid "Unknown log domain '%s'"
+msgstr "„%s“ je nepoznat domen dnevnika"
-#: src/nm-netlink-monitor.c:501
-msgid "received data from wrong type of sender"
-msgstr "Primljeni su podaci pogrešnog tipa od pošiljaoca"
+#: ../src/dns-manager/nm-dns-manager.c:384
+msgid "NOTE: the libc resolver may not support more than 3 nameservers."
+msgstr "PRIMEDBA: libc razrešavanje ne podržava više od 3 servera imena."
-#: src/nm-netlink-monitor.c:514
-msgid "received data from unexpected sender"
-msgstr "Primljeni su podaci od neoÄekivanog poÅ¡iljaoca"
+#: ../src/dns-manager/nm-dns-manager.c:386
+msgid "The nameservers listed below may not be recognized."
+msgstr "Sledeći serveri imena možda nisu prepoznati."
-#: src/nm-netlink-monitor.c:536
+#: ../src/system-settings/nm-default-wired-connection.c:157
#, c-format
-msgid "%s"
-msgstr "%s"
+msgid "Auto %s"
+msgstr "Auto %s"
+
+#: ../system-settings/plugins/ifcfg-rh/reader.c:3412
+#: ../system-settings/plugins/ifnet/connection_parser.c:49
+msgid "System"
+msgstr "Sistem"
+
+#~ msgid "Orientation"
+#~ msgstr "Usmerenje"
+
+# Potreban je bolji prevod za ovo
+#~ msgid "The orientation of the tray."
+#~ msgstr "Usmerenje obaveštajne zone."
+
+#~ msgid ""
+#~ "The requested wireless network '%s' does not appear to be in range. A "
+#~ "different wireless network will be used if any are available."
+#~ msgstr ""
+#~ "Tražena bežiÄna mreža „%s“ nije u dometu. Biće korišćena druga bežiÄna "
+#~ "mreža ako je raspoloživa."
+
+#~ msgid "Connection to the wireless network '%s' failed.\n"
+#~ msgstr "Neuspela veza sa bežiÄnom mrežom „%s“.\n"
+
+#~ msgid "Copyright (C) 2004-2005 Red Hat, Inc."
+#~ msgstr "Copyright (C) 2004-2005 Red Hat, Inc."
+
+#~ msgid ""
+#~ "Notification area applet for managing your network devices and "
+#~ "connections."
+#~ msgstr "Aplet za obaveštajnu zonu za upravljanje mrežnim uređajima i vezama."
+
+#~ msgid ""
+#~ "<span weight=\"bold\" size=\"larger\">VPN Login Failure</span>\n"
+#~ "\n"
+#~ "Could not start the VPN connection '%s' due to a login failure.\n"
+#~ "\n"
+#~ "The VPN service said: \"%s\""
+#~ msgstr ""
+#~ "<span weight=\"bold\" size=\"larger\">Prijava na VPN nije uspela</span>\n"
+#~ "\n"
+#~ "VPN veza sa mrežom „%s“ nije ostvarena jer prijava nije uspela.\n"
+#~ "\n"
+#~ "Poruka VPN servisa je bila : „%s“"
+
+#~ msgid ""
+#~ "<span weight=\"bold\" size=\"larger\">VPN Login Message</span>\n"
+#~ "\n"
+#~ "VPN connection '%s' said:\n"
+#~ "\n"
+#~ "\"%s\""
+#~ msgstr ""
+#~ "<span weight=\"bold\" size=\"larger\">Poruka pri prijavi na VPN</span>\n"
+#~ "\n"
+#~ "Poruka VPN veze „%s“ je:\n"
+#~ "\n"
+#~ "„%s“"
+
+#~ msgid ""
+#~ "The NetworkManager Applet could not find some required resources (the "
+#~ "glade file was not found)."
+#~ msgstr ""
+#~ "Aplet Upravnik mreže nije mogao da pronađe neke od potrebnih resursa "
+#~ "(glejd datoteka nije pronađena)."
+
+#~ msgid "The network device \"%s (%s)\" does not support wireless scanning."
+#~ msgstr "Mrežni ureÄ‘aj „%s (%s)“ ne podržava potragu za bežiÄnim mrežama."
+
+#~ msgid "The network device \"%s (%s)\" does not support link detection."
+#~ msgstr "Mrežni uređaj „%s (%s)“ ne podržava otkrivanje veze."
+
+#~ msgid "Preparing device %s for the wired network..."
+#~ msgstr "Priprema ureÄ‘aja %s za žiÄanu mrežu..."
+
+#~ msgid "Preparing device %s for the wireless network '%s'..."
+#~ msgstr "Priprema ureÄ‘aja %s za bežiÄnu mrežu „%s“..."
+
+#~ msgid "Configuring device %s for the wired network..."
+#~ msgstr "PodeÅ¡avanje ureÄ‘aja %s za bežiÄnu mrežu..."
+
+#~ msgid "Attempting to join the wireless network '%s'..."
+#~ msgstr "PokuÅ¡aj pristupa bežiÄnoj mreži „%s“..."
+
+#~ msgid "Waiting for Network Key for the wireless network '%s'..."
+#~ msgstr "ÄŒekanje na mrežni kljuÄ za bežiÄnu mrežu „%s“..."
+
+#~ msgid "Requesting a network address from the wired network..."
+#~ msgstr "Potraživanje mrežne adrese za žiÄanu mrežu..."
+
+#~ msgid "Requesting a network address from the wireless network '%s'..."
+#~ msgstr "Potraživanje mrežne adrese za bežiÄnu mrežu „%s“..."
+
+#~ msgid "Finishing connection to the wired network..."
+#~ msgstr "Obustavljanje veze sa žiÄanom mrežom..."
+
+#~ msgid "Finishing connection to the wireless network '%s'..."
+#~ msgstr "Obustavljanje veze sa bežiÄnom mrežom „%s“..."
+
+#~ msgid "NetworkManager is not running"
+#~ msgstr "UpravljaÄ mreže nije pokrenut"
+
+#~ msgid "Wired network connection"
+#~ msgstr "ŽiÄna mrežna veza"
+
+# FIXME Ad-hok
+#~ msgid "Connected to an Ad-Hoc wireless network"
+#~ msgstr "Povezan sa ad-hok bežiÄnom mrežom"
+
+#~ msgid "Wireless network connection to '%s' (%d%%)"
+#~ msgstr "BežiÄna mrežna veza sa „%s“ (%d%%)"
+
+#~ msgid "Other Wireless Networks..."
+#~ msgstr "Ostale bežiÄne mreže..."
+
+#~ msgid "Create new Wireless Network..."
+#~ msgstr "Napravi novu bežiÄnu mrežu..."
+
+#~ msgid "No network devices have been found"
+#~ msgstr "Nije pronađen nijedan mrežni uređaj"
+
+#~ msgid "NetworkManager is not running..."
+#~ msgstr "UpravljaÄ mrežom nije pokrenut..."
+
+#~ msgid "Pause Wireless Scanning"
+#~ msgstr "Obustavi traženje bežiÄne mreže"
+
+#~ msgid "Resume Wireless Scanning"
+#~ msgstr "Nastavi traženje bežiÄne mreže"
+
+#~ msgid "Stop All Wireless Devices"
+#~ msgstr "Zaustavi sve bežiÄne ureÄ‘aje"
-#: src/nm-netlink-monitor.c:645
-msgid "too much data was sent over socket and some of it was lost"
-msgstr "SuviÅ¡e podataka je poslato kroz utiÄnicu i neÅ¡to od njih je izgubljeno"
+#~ msgid "Start All Wireless Devices"
+#~ msgstr "Pokreni sve bežiÄne ureÄ‘aje"
+
+#~ msgid "Help"
+#~ msgstr "Pomoć"
+
+#~ msgid "About"
+#~ msgstr "O programu"
+
+#~ msgid ""
+#~ "The NetworkManager applet could not find some required resources. It "
+#~ "cannot continue.\n"
+#~ msgstr ""
+#~ "UpravljaÄ mrežom nije uspeo da pronaÄ‘e neophodne resurse i ne može da "
+#~ "nastavi rad.\n"
+
+#~ msgid "progress bar label|%d %%"
+#~ msgstr "%d %%"
+
+#~ 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)"
+#~ msgstr[2] "BežiÄnih mreža (%s)"
+
+#~ msgid "Wireless Network"
+#~ msgid_plural "Wireless Networks"
+#~ msgstr[0] "BežiÄna mreža"
+#~ msgstr[1] "BežiÄne mreže"
+#~ msgstr[2] "BežiÄne mreže"
+
+#~ msgid " (invalid Unicode)"
+#~ msgstr " (neispravan Unikod)"
+
+#~ msgid "Passphrase:"
+#~ msgstr "Lozinka:"
+
+#~ msgid "Ascii Key:"
+#~ msgstr "ASKRI kljuÄ:"
+
+#~ msgid "Hex Key:"
+#~ msgstr "Heksa kljuÄ:"
+
+#~ msgid "Create new wireless network"
+#~ msgstr "Napravi novu bežiÄnu mrežu"
+
+#~ msgid ""
+#~ "Enter the ESSID and security settings of the wireless network you wish to "
+#~ "create."
+#~ msgstr ""
+#~ "Unesite ESSID i bezbednosne postavke bežiÄne mreže koju želite da "
+#~ "naÄinite."
+
+#~ msgid "Custom wireless network"
+#~ msgstr "KorisniÄka bežiÄna mreža"
+
+#~ msgid ""
+#~ "Enter the ESSID of the wireless network to which you wish to connect."
+#~ msgstr "Unesite ESSID bežiÄne mreže sa kojom želite da se povežete."
+
+#~ msgid "You must log in to access the Virtual Private Network '%s'."
+#~ msgstr ""
+#~ "Morate biti prijavljeni kako biste koristili virtuelnu privatnu mrežu „%s“."
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid ""
+#~ "128-bit Passphrase (WEP)\n"
+#~ "Ascii Key (WEP)\n"
+#~ "Hex Key (WEP)"
+#~ msgstr ""
+#~ "128-bitni kljuÄ (WEP)\n"
+#~ "ASKRI kljuÄ (WEP)\n"
+#~ "Heks kljuÄ (WEP)"
+
+#~ msgid ""
+#~ "128-bit passphrase (WEP)\n"
+#~ "Ascii key (WEP)\n"
+#~ "Hex key (WEP)"
+#~ msgstr ""
+#~ "128-bitni kljuÄ (WEP)\n"
+#~ "ASKRI kljuÄ (WEP)\n"
+#~ "Heks kljuÄ (WEP)"
+
+#~ msgid ""
+#~ "<span weight=\"bold\" size=\"larger\">Passphrase Required by Wireless "
+#~ "Network</span>\n"
+#~ "\n"
+#~ "A passphrase or encryption key is required to access the wireless network "
+#~ "'%s'."
+#~ msgstr ""
+#~ "<span weight=\"bold\" size=\"larger\">BežiÄna mreža zahteva lozinku</"
+#~ "span>\n"
+#~ "\n"
+#~ " Lozinka ili kljuÄ za Å¡ifrovanje su neophodni za pristup bežiÄnoj mreži "
+#~ "„%s“."
+
+#~ msgid ""
+#~ "<span weight=\"bold\" size=\"larger\">Reduced Network Functionality</"
+#~ "span>\n"
+#~ "\n"
+#~ "%s It will not be completely functional."
+#~ msgstr ""
+#~ "<span weight=\"bold\" size=\"larger\">Smanjena upotrebna vrednost mreže</"
+#~ "span>\n"
+#~ "\n"
+#~ "%s neće biti sasvim upotrebljiva."
+
+#~ msgid ""
+#~ "<span weight=\"bold\" size=\"larger\">Wireless Network Login "
+#~ "Confirmation</span>\n"
+#~ "\n"
+#~ "You have chosen log in to the wireless network '%s'. If you are sure "
+#~ "this wireless network is secure, click the checkbox below and "
+#~ "NetworkManager will no longer pester you with stupid questions when you "
+#~ "connect to it."
+#~ msgstr ""
+#~ "<span weight=\"bold\" size=\"larger\">Potvrda prijave na mrežu</span>\n"
+#~ "\n"
+#~ "Želite da se prijavite na mrežu „%s“. Ako ste sigurni da je ova bežiÄna "
+#~ "mreža bezbedna, obeležite kućicu ispod i Upravnik mreže vam više neće "
+#~ "postavljati suvišna pitanja pri prijavi na ovu mrežu."
+
+#~ msgid "Always Trust this Wireless Network"
+#~ msgstr "Uvek pokloni poverenje bežiÄnoj mreži"
+
+#~ msgid "Connect with encryption enabled"
+#~ msgstr "Poveži se i ukljuÄi Å¡ifrovanje"
+
+#~ msgid "Don't remind me again"
+#~ msgstr "Ne podsećaj me više"
+
+#~ msgid "Key Type:"
+#~ msgstr "Vrsta kljuÄa:"
+
+#~ msgid "Key type:"
+#~ msgstr "Vrsta kljuÄa:"
+
+#~ msgid "Wireless Network Key Required"
+#~ msgstr "Potreban je kljuÄ za bežiÄnu mrežu"
+
+#~ msgid "Wireless _adapter:"
+#~ msgstr "BežiÄni _ureÄ‘aj:"
+
+#~ msgid "Wireless _network:"
+#~ msgstr "BežiÄna _mreža:"
+
+#~ msgid "_Login to Network"
+#~ msgstr "_Umreži se"
+
+#~ msgid "_OK"
+#~ msgstr "_U redu"
+
+#~ msgid "operation took too long"
+#~ msgstr "Potraga je predugo trajala"
+
+#~ msgid "received data from wrong type of sender"
+#~ msgstr "Primljeni su podaci pogrešnog tipa od pošiljaoca"
+
+#~ msgid "received data from unexpected sender"
+#~ msgstr "Primljeni su podaci od neoÄekivanog poÅ¡iljaoca"
+
+#~ msgid "%s"
+#~ msgstr "%s"
+
+#~ msgid "too much data was sent over socket and some of it was lost"
+#~ msgstr ""
+#~ "SuviÅ¡e podataka je poslato kroz utiÄnicu i neÅ¡to od njih je izgubljeno"
diff --git a/po/sv.po b/po/sv.po
index d9d9147a5c..dc9869ed1f 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -9,8 +9,8 @@ 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: 2010-02-26 03:24+0000\n"
-"PO-Revision-Date: 2010-03-02 22:05+0100\n"
+"POT-Creation-Date: 2010-08-10 03:25+0000\n"
+"PO-Revision-Date: 2010-08-12 01:57+0100\n"
"Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
"MIME-Version: 1.0\n"
@@ -18,7 +18,87 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ../cli/src/connections.c:86
+#: ../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
+msgid "NAME"
+msgstr "NAMN"
+
+#. 0
+#: ../cli/src/connections.c:61
+#: ../cli/src/connections.c:76
+msgid "UUID"
+msgstr "UUID"
+
+#. 1
+#: ../cli/src/connections.c:62
+msgid "DEVICES"
+msgstr "ENHETER"
+
+#. 2
+#: ../cli/src/connections.c:63
+#: ../cli/src/connections.c:78
+msgid "SCOPE"
+msgstr "OMFÃ…NG"
+
+#. 3
+#: ../cli/src/connections.c:64
+msgid "DEFAULT"
+msgstr "STANDARD"
+
+#. 4
+#: ../cli/src/connections.c:65
+msgid "DBUS-SERVICE"
+msgstr "DBUS-TJÄNST"
+
+#. 5
+#: ../cli/src/connections.c:66
+msgid "SPEC-OBJECT"
+msgstr "SPEC-OBJECT"
+
+#. 6
+#: ../cli/src/connections.c:67
+msgid "VPN"
+msgstr "VPN"
+
+#. 1
+#. 0
+#. 1
+#: ../cli/src/connections.c:77
+#: ../cli/src/devices.c:62
+#: ../cli/src/devices.c:90
+msgid "TYPE"
+msgstr "TYP"
+
+#. 3
+#: ../cli/src/connections.c:79
+msgid "TIMESTAMP"
+msgstr "TIDSSTÄMPEL"
+
+#. 4
+#: ../cli/src/connections.c:80
+msgid "TIMESTAMP-REAL"
+msgstr "TIMESTAMP-REAL"
+
+#. 5
+#: ../cli/src/connections.c:81
+msgid "AUTOCONNECT"
+msgstr "AUTOCONNECT"
+
+#. 6
+#: ../cli/src/connections.c:82
+msgid "READONLY"
+msgstr "SKRIVSKYDDAD"
+
+#: ../cli/src/connections.c:158
#, c-format
msgid ""
"Usage: nmcli con { COMMAND | help }\n"
@@ -37,371 +117,618 @@ msgstr ""
" up id <id> | uuid <id> [iface <gränssnitt>] [ap <hwaddr>] [--nowait] [--timeout <tidsgräns>]\n"
" down id <id> | uuid <id>\n"
-#: ../cli/src/connections.c:158
-#| msgid "_VPN Connections"
-msgid "Connections"
-msgstr "Anslutningar"
-
-#: ../cli/src/connections.c:158
-#: ../cli/src/connections.c:160
-#: ../cli/src/connections.c:196
#: ../cli/src/connections.c:198
-#: ../cli/src/connections.c:205
-#: ../cli/src/connections.c:207
-#: ../cli/src/devices.c:298
-#: ../cli/src/devices.c:458
-#: ../cli/src/devices.c:460
-msgid "Type"
-msgstr "Typ"
+#: ../cli/src/connections.c:537
+#, c-format
+msgid "Error: 'con list': %s"
+msgstr "Fel: \"con list\": %s"
+
+#: ../cli/src/connections.c:200
+#: ../cli/src/connections.c:539
+#, c-format
+msgid "Error: 'con list': %s; allowed fields: %s"
+msgstr "Fel: \"con list\": %s; tillåtna fält: %s"
+
+#: ../cli/src/connections.c:208
+#| msgid "Connections"
+msgid "Connection details"
+msgstr "Anslutningsdetaljer"
+
+#: ../cli/src/connections.c:382
+#: ../cli/src/connections.c:602
+#| msgid "System"
+msgid "system"
+msgstr "system"
+
+#: ../cli/src/connections.c:382
+#: ../cli/src/connections.c:602
+msgid "user"
+msgstr "användare"
+
+#: ../cli/src/connections.c:384
+msgid "never"
+msgstr "aldrig"
+
+#. "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
+msgid "yes"
+msgstr "ja"
-#: ../cli/src/connections.c:158
-#: ../cli/src/connections.c:160
-#: ../cli/src/connections.c:196
-#: ../cli/src/connections.c:198
-#: ../cli/src/connections.c:205
-#: ../cli/src/connections.c:207
-#: ../cli/src/connections.c:297
-#: ../cli/src/connections.c:299
-msgid "UUID"
-msgstr "UUID"
+#: ../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
+msgid "no"
+msgstr "nej"
-#: ../cli/src/connections.c:158
-#: ../cli/src/connections.c:160
-#: ../cli/src/connections.c:196
-#: ../cli/src/connections.c:198
-#: ../cli/src/connections.c:205
-#: ../cli/src/connections.c:207
-#: ../cli/src/connections.c:297
-#: ../cli/src/connections.c:299
-msgid "Name"
-msgstr "Namn"
-
-#: ../cli/src/connections.c:163
-#, c-format
-#| msgid "Modify system connections"
-msgid "System connections:\n"
-msgstr "Systemanslutningar:\n"
-
-#: ../cli/src/connections.c:167
-#, c-format
-#| msgid "No network connection"
-msgid "User connections:\n"
-msgstr "Användaranslutningar:\n"
-
-#: ../cli/src/connections.c:178
-#: ../cli/src/connections.c:967
-#: ../cli/src/connections.c:983
-#: ../cli/src/connections.c:992
-#: ../cli/src/connections.c:1003
-#: ../cli/src/connections.c:1085
-#: ../cli/src/devices.c:604
-#: ../cli/src/devices.c:614
-#: ../cli/src/devices.c:699
-#: ../cli/src/devices.c:785
-#: ../cli/src/devices.c:792
+#: ../cli/src/connections.c:458
+#: ../cli/src/connections.c:501
+#| msgid "System connections:\n"
+msgid "System connections"
+msgstr "systemanslutningar"
+
+#: ../cli/src/connections.c:463
+#: ../cli/src/connections.c:514
+msgid "User connections"
+msgstr "Användaranslutningar"
+
+#: ../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
#, c-format
msgid "Error: %s argument is missing."
msgstr "Fel: %s-argument saknas."
-#: ../cli/src/connections.c:189
+#: ../cli/src/connections.c:488
#, c-format
msgid "Error: %s - no such connection."
msgstr "Fel: %s - ingen sådan anslutning."
-#: ../cli/src/connections.c:196
-#| msgid "Modify system connections"
-msgid "System-wide connections"
-msgstr "Systemanslutningar"
-
-#: ../cli/src/connections.c:205
-#| msgid "No network connection"
-msgid "User connections"
-msgstr "Användaranslutningar"
-
-#: ../cli/src/connections.c:212
-#: ../cli/src/connections.c:1016
-#: ../cli/src/connections.c:1103
-#: ../cli/src/devices.c:446
-#: ../cli/src/devices.c:494
-#: ../cli/src/devices.c:628
-#: ../cli/src/devices.c:706
-#: ../cli/src/devices.c:798
+#: ../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
#, c-format
msgid "Unknown parameter: %s\n"
msgstr "Okänd parameter: %s\n"
-#: ../cli/src/connections.c:221
+#: ../cli/src/connections.c:529
#, c-format
msgid "Error: no valid parameter specified."
msgstr "Fel: ingen giltig parameter angiven."
-#. FIXME: Fix the output
-#: ../cli/src/connections.c:268
-#: ../cli/src/devices.c:302
-#: ../cli/src/devices.c:321
-#: ../cli/src/devices.c:353
-#: ../cli/src/devices.c:355
-#: ../cli/src/devices.c:357
-#: ../cli/src/devices.c:359
-#: ../cli/src/devices.c:361
-msgid "yes"
-msgstr "ja"
+#: ../cli/src/connections.c:544
+#: ../cli/src/connections.c:1577
+#: ../cli/src/devices.c:1293
+#: ../cli/src/network-manager.c:274
+#, c-format
+msgid "Error: %s."
+msgstr "Fel: %s."
-#: ../cli/src/connections.c:268
-#: ../cli/src/devices.c:304
-msgid "no"
-msgstr "nej"
+#: ../cli/src/connections.c:650
+#, c-format
+msgid "Error: 'con status': %s"
+msgstr "Fel: \"con status\": %s"
+
+#: ../cli/src/connections.c:652
+#, c-format
+msgid "Error: 'con status': %s; allowed fields: %s"
+msgstr "Fel: \"con status\": %s; tillåtna fält: %s"
-#: ../cli/src/connections.c:297
-#| msgid "Modify system connections"
+#: ../cli/src/connections.c:659
msgid "Active connections"
msgstr "Aktiva anslutningar"
-#: ../cli/src/connections.c:297
-#: ../cli/src/connections.c:299
-#: ../cli/src/devices.c:302
-#: ../cli/src/devices.c:304
-msgid "Default"
-msgstr "Standard"
-
-#: ../cli/src/connections.c:297
-#: ../cli/src/connections.c:299
-msgid "Service"
-msgstr "Tjänst"
-
-#: ../cli/src/connections.c:297
-#: ../cli/src/connections.c:299
-msgid "Devices"
-msgstr "Enheter"
-
-#: ../cli/src/connections.c:659
+#: ../cli/src/connections.c:1027
#, c-format
-#| msgid "VPN connection to '%s'"
msgid "no active connection on device '%s'"
msgstr "ingen aktiv anslutning på enheten \"%s\""
-#: ../cli/src/connections.c:667
+#: ../cli/src/connections.c:1035
#, c-format
msgid "no active connection or device"
msgstr "ingen aktiv anslutning eller enhet"
-#: ../cli/src/connections.c:730
+#: ../cli/src/connections.c:1085
+#, c-format
+msgid "device '%s' not compatible with connection '%s'"
+msgstr "enheten \"%s\" är inte kompatibel med anslutningen \"%s\""
+
+#: ../cli/src/connections.c:1087
+#, c-format
+#| msgid "no active connection on device '%s'"
+msgid "no device found for connection '%s'"
+msgstr "ingen enhet hittades för anslutningen \"%s\""
+
+#: ../cli/src/connections.c:1098
msgid "activating"
msgstr "aktiverar"
-#: ../cli/src/connections.c:732
+#: ../cli/src/connections.c:1100
msgid "activated"
msgstr "aktiverad"
-#: ../cli/src/connections.c:735
-#: ../cli/src/connections.c:758
-#: ../cli/src/connections.c:791
-#: ../cli/src/devices.c:111
-#: ../cli/src/network-manager.c:76
-#: ../cli/src/network-manager.c:98
-#| msgid "(unknown)"
+#: ../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
msgid "unknown"
msgstr "okänt"
-#: ../cli/src/connections.c:744
-#| msgid "VPN connecting to '%s'"
+#: ../cli/src/connections.c:1112
msgid "VPN connecting (prepare)"
msgstr "VPN ansluter (förbereder)"
-#: ../cli/src/connections.c:746
+#: ../cli/src/connections.c:1114
msgid "VPN connecting (need authentication)"
msgstr "VPN ansluter (behöver autentisering)"
-#: ../cli/src/connections.c:748
-#| msgid "_VPN Connections"
+#: ../cli/src/connections.c:1116
msgid "VPN connecting"
msgstr "VPN ansluter"
-#: ../cli/src/connections.c:750
+#: ../cli/src/connections.c:1118
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN ansluter (hämtar IP-konfiguration)"
-#: ../cli/src/connections.c:752
-#| msgid "_VPN Connections"
+#: ../cli/src/connections.c:1120
msgid "VPN connected"
msgstr "VPN ansluten"
-#: ../cli/src/connections.c:754
-#| msgid "VPN Connect Failure"
+#: ../cli/src/connections.c:1122
msgid "VPN connection failed"
msgstr "VPN-anslutning misslyckades"
-#: ../cli/src/connections.c:756
-#| msgid "VPN Connect Failure"
+#: ../cli/src/connections.c:1124
msgid "VPN disconnected"
msgstr "VPN frånkopplad"
-#: ../cli/src/connections.c:767
-#| msgid "(unknown)"
+#: ../cli/src/connections.c:1135
msgid "unknown reason"
msgstr "okänd anledning"
-#: ../cli/src/connections.c:769
-#| msgid "None"
+#: ../cli/src/connections.c:1137
msgid "none"
msgstr "ingen"
-#: ../cli/src/connections.c:771
+#: ../cli/src/connections.c:1139
msgid "the user was disconnected"
msgstr "användaren kopplades från"
-#: ../cli/src/connections.c:773
+#: ../cli/src/connections.c:1141
msgid "the base network connection was interrupted"
msgstr "basnätverksanslutningen avbröts"
-#: ../cli/src/connections.c:775
+#: ../cli/src/connections.c:1143
msgid "the VPN service stopped unexpectedly"
msgstr "VPN-tjänsten stoppades oväntat"
-#: ../cli/src/connections.c:777
+#: ../cli/src/connections.c:1145
msgid "the VPN service returned invalid configuration"
msgstr "VPN-tjänsten returnerade en ogiltig konfiguration"
-#: ../cli/src/connections.c:779
+#: ../cli/src/connections.c:1147
msgid "the connection attempt timed out"
msgstr "anslutningsförsöket översteg tidsgränsen"
-#: ../cli/src/connections.c:781
+#: ../cli/src/connections.c:1149
msgid "the VPN service did not start in time"
msgstr "VPN-tjänsten startade inte i tid"
-#: ../cli/src/connections.c:783
+#: ../cli/src/connections.c:1151
msgid "the VPN service failed to start"
msgstr "VPN-tjänsten misslyckades med att starta"
-#: ../cli/src/connections.c:785
+#: ../cli/src/connections.c:1153
msgid "no valid VPN secrets"
msgstr "inga giltiga VPN-hemligheter"
-#: ../cli/src/connections.c:787
+#: ../cli/src/connections.c:1155
msgid "invalid VPN secrets"
msgstr "ogiltiga VPN-hemligheter"
-#: ../cli/src/connections.c:789
+#: ../cli/src/connections.c:1157
msgid "the connection was removed"
msgstr "anslutningen togs bort"
-#: ../cli/src/connections.c:803
+#: ../cli/src/connections.c:1171
#, c-format
msgid "state: %s\n"
msgstr "tillstånd: %s\n"
-#: ../cli/src/connections.c:806
-#: ../cli/src/connections.c:832
+#: ../cli/src/connections.c:1174
+#: ../cli/src/connections.c:1200
#, c-format
-#| msgid "Connection _Information"
msgid "Connection activated\n"
msgstr "Anslutning aktiverad\n"
-#: ../cli/src/connections.c:809
+#: ../cli/src/connections.c:1177
#, c-format
-#| msgid "Connection to the wired network failed."
msgid "Error: Connection activation failed."
msgstr "Fel: Aktivering av anslutning misslyckades."
-#: ../cli/src/connections.c:828
+#: ../cli/src/connections.c:1196
#, c-format
msgid "state: %s (%d)\n"
msgstr "tillstånd: %s (%d)\n"
-#: ../cli/src/connections.c:838
+#: ../cli/src/connections.c:1206
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "Fel: Aktivering av anslutning misslyckades: %s."
-#: ../cli/src/connections.c:855
-#: ../cli/src/devices.c:551
+#: ../cli/src/connections.c:1223
+#: ../cli/src/devices.c:909
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "Fel: Tidsgränsen %d sekunder gick ut."
-#: ../cli/src/connections.c:898
+#: ../cli/src/connections.c:1266
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "Fel: Aktivering av anslutning misslyckades: %s"
-#: ../cli/src/connections.c:912
+#: ../cli/src/connections.c:1280
#, c-format
msgid "Error: Obtaining active connection for '%s' failed."
msgstr "Fel: Hämtning av aktiv anslutning för \"%s\" misslyckades."
-#: ../cli/src/connections.c:921
+#: ../cli/src/connections.c:1289
#, c-format
-#| msgid "VPN connection to '%s'"
msgid "Active connection state: %s\n"
msgstr "Tillstånd för aktiv anslutning: %s\n"
-#: ../cli/src/connections.c:922
+#: ../cli/src/connections.c:1290
#, c-format
-#| msgid "VPN connection to '%s'"
msgid "Active connection path: %s\n"
msgstr "Sökväg för aktiv anslutning: %s\n"
-#: ../cli/src/connections.c:976
-#: ../cli/src/connections.c:1094
+#: ../cli/src/connections.c:1344
+#: ../cli/src/connections.c:1465
#, c-format
msgid "Error: Unknown connection: %s."
msgstr "Fel: Okänd anslutning: %s."
-#: ../cli/src/connections.c:1011
-#: ../cli/src/devices.c:622
+#: ../cli/src/connections.c:1379
+#: ../cli/src/devices.c:980
#, c-format
msgid "Error: timeout value '%s' is not valid."
msgstr "Fel: värdet \"%s\" för tidsgränsen är inte giltigt."
-#: ../cli/src/connections.c:1024
-#: ../cli/src/connections.c:1111
+#: ../cli/src/connections.c:1392
+#: ../cli/src/connections.c:1482
#, c-format
msgid "Error: id or uuid has to be specified."
msgstr "Fel: id eller uuid måste anges."
-#: ../cli/src/connections.c:1044
+#: ../cli/src/connections.c:1412
#, c-format
msgid "Error: No suitable device found: %s."
msgstr "Fel: Ingen lämplig enhet hittades: %s."
-#: ../cli/src/connections.c:1046
+#: ../cli/src/connections.c:1414
#, c-format
msgid "Error: No suitable device found."
msgstr "Fel: Ingen lämplig enhet hittades."
-#: ../cli/src/connections.c:1138
+#: ../cli/src/connections.c:1509
#, c-format
msgid "Warning: Connection not active\n"
msgstr "Varning: Anslutningen är inte aktiv\n"
-#: ../cli/src/connections.c:1189
+#: ../cli/src/connections.c:1566
#, c-format
msgid "Error: 'con' command '%s' is not valid."
msgstr "Fel: \"con\"-kommandot \"%s\" är inte giltigt."
-#: ../cli/src/connections.c:1216
+#: ../cli/src/connections.c:1602
#, c-format
msgid "Error: could not connect to D-Bus."
msgstr "Fel: kunde inte ansluta till D-Bus."
-#: ../cli/src/connections.c:1223
+#: ../cli/src/connections.c:1609
#, c-format
msgid "Error: Could not get system settings."
msgstr "Fel: Kunde inte få systeminställningar."
-#: ../cli/src/connections.c:1231
+#: ../cli/src/connections.c:1617
#, c-format
msgid "Error: Could not get user settings."
msgstr "Fel: Kunde inte få användarinställningar."
-#: ../cli/src/connections.c:1241
+#: ../cli/src/connections.c:1627
#, c-format
msgid "Error: Can't obtain connections: settings services are not running."
msgstr "Fel: Kan inte få anslutningar: inställningstjänster är inte igång."
+#. 0
+#. 9
+#: ../cli/src/devices.c:61
+#: ../cli/src/devices.c:89
+#: ../cli/src/devices.c:184
+msgid "DEVICE"
+msgstr "ENHET"
+
+#. 1
+#. 4
+#. 0
+#: ../cli/src/devices.c:63
+#: ../cli/src/devices.c:93
+#: ../cli/src/network-manager.c:36
+msgid "STATE"
+msgstr "TILLSTÃ…ND"
+
+#: ../cli/src/devices.c:72
+msgid "GENERAL"
+msgstr "ALLMÄNT"
+
+#. 0
#: ../cli/src/devices.c:73
-#, c-format
+msgid "CAPABILITIES"
+msgstr "FÖRMÅGOR"
+
+#. 1
+#: ../cli/src/devices.c:74
+msgid "WIFI-PROPERTIES"
+msgstr "WIFI-EGENSKAPER"
+
+#. 2
+#: ../cli/src/devices.c:75
+#| msgid "PEAP"
+msgid "AP"
+msgstr "AP"
+
+#. 3
+#: ../cli/src/devices.c:76
+msgid "WIRED-PROPERTIES"
+msgstr "TRÃ…DADE-EGENSKAPER"
+
+#. 4
+#: ../cli/src/devices.c:77
+msgid "IP4-SETTINGS"
+msgstr "IP4-INSTÄLLNINGAR"
+
+#. 5
+#: ../cli/src/devices.c:78
+#| msgid "DNS"
+msgid "IP4-DNS"
+msgstr "IP4-DNS"
+
+#. 6
+#: ../cli/src/devices.c:79
+msgid "IP6-SETTINGS"
+msgstr "IP6-INSTÄLLNINGAR"
+
+#. 7
+#: ../cli/src/devices.c:80
+#| msgid "DNS"
+msgid "IP6-DNS"
+msgstr "IP6-DNS"
+
+#. 2
+#: ../cli/src/devices.c:91
+msgid "DRIVER"
+msgstr "DRIVRUTIN"
+
+#. 3
+#: ../cli/src/devices.c:92
+msgid "HWADDR"
+msgstr "HWADDR"
+
+#. 0
+#: ../cli/src/devices.c:102
+msgid "CARRIER-DETECT"
+msgstr "CARRIER-DETECT"
+
+#. 1
+#: ../cli/src/devices.c:103
+msgid "SPEED"
+msgstr "HASTIGHET"
+
+#. 0
+#: ../cli/src/devices.c:112
+msgid "CARRIER"
+msgstr "BÄRARE"
+
+#. 0
+#: ../cli/src/devices.c:122
+#| msgid " WEP"
+msgid "WEP"
+msgstr "WEP"
+
+#. 1
+#: ../cli/src/devices.c:123
+#| msgid " WPA"
+msgid "WPA"
+msgstr "WPA"
+
+#. 2
+#: ../cli/src/devices.c:124
+#| msgid " WPA2"
+msgid "WPA2"
+msgstr "WPA2"
+
+#. 3
+#: ../cli/src/devices.c:125
+msgid "TKIP"
+msgstr "TKIP"
+
+#. 4
+#: ../cli/src/devices.c:126
+#| msgid "AES-CCMP"
+msgid "CCMP"
+msgstr "CCMP"
+
+#. 0
+#: ../cli/src/devices.c:135
+#: ../cli/src/devices.c:146
+msgid "ADDRESS"
+msgstr "ADRESS"
+
+#. 1
+#: ../cli/src/devices.c:136
+#: ../cli/src/devices.c:147
+msgid "PREFIX"
+msgstr "PREFIX"
+
+#. 2
+#: ../cli/src/devices.c:137
+#: ../cli/src/devices.c:148
+msgid "GATEWAY"
+msgstr "GATEWAY"
+
+#. 0
+#: ../cli/src/devices.c:157
+#: ../cli/src/devices.c:166
+msgid "DNS"
+msgstr "DNS"
+
+#. 0
+#: ../cli/src/devices.c:175
+#| msgid "SSID:"
+msgid "SSID"
+msgstr "SSID"
+
+#. 1
+#: ../cli/src/devices.c:176
+#| msgid "BSSID:"
+msgid "BSSID"
+msgstr "BSSID"
+
+#. 2
+#: ../cli/src/devices.c:177
+msgid "MODE"
+msgstr "LÄGE"
+
+#. 3
+#: ../cli/src/devices.c:178
+msgid "FREQ"
+msgstr "FREK"
+
+#. 4
+#: ../cli/src/devices.c:179
+msgid "RATE"
+msgstr "FREKVENS"
+
+#. 5
+#: ../cli/src/devices.c:180
+msgid "SIGNAL"
+msgstr "SIGNAL"
+
+#. 6
+#: ../cli/src/devices.c:181
+msgid "SECURITY"
+msgstr "SÄKERHET"
+
+#. 7
+#: ../cli/src/devices.c:182
+msgid "WPA-FLAGS"
+msgstr "WPA-FLAGGOR"
+
+#. 8
+#: ../cli/src/devices.c:183
+msgid "RSN-FLAGS"
+msgstr "RSN-FLAGGOR"
+
+#. 10
+#: ../cli/src/devices.c:185
+msgid "ACTIVE"
+msgstr "AKTIV"
+
+#: ../cli/src/devices.c:208
+#, c-format
+#| msgid ""
+#| "Usage: nmcli dev { COMMAND | help }\n"
+#| "\n"
+#| " COMMAND := { status | list | disconnect | wifi }\n"
+#| "\n"
+#| " status\n"
+#| " list [iface <iface>]\n"
+#| " disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
+#| " wifi [list [iface <iface>] | apinfo iface <iface> hwaddr <hwaddr>]\n"
+#| "\n"
msgid ""
"Usage: nmcli dev { COMMAND | help }\n"
"\n"
@@ -410,7 +737,7 @@ msgid ""
" status\n"
" list [iface <iface>]\n"
" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
-" wifi [list [iface <iface>] | apinfo iface <iface> hwaddr <hwaddr>]\n"
+" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
"\n"
msgstr ""
"Användning: nmcli dev { KOMMANDO | help }\n"
@@ -420,371 +747,253 @@ msgstr ""
" status\n"
" list [iface <gränssnitt>]\n"
" disconnect iface <gränssnitt> [--nowait] [--timeout <tidsgräns>]\n"
-" wifi [list [iface <gränssnitt>] | apinfo iface <gränssnitt> hwaddr <hwaddr>]\n"
+" wifi [list [iface <gränssnitt>] [hwaddr <maskinvaruadress>]]\n"
"\n"
-#: ../cli/src/devices.c:93
+#: ../cli/src/devices.c:228
msgid "unmanaged"
msgstr "ohanterad"
-#: ../cli/src/devices.c:95
+#: ../cli/src/devices.c:230
msgid "unavailable"
msgstr "otillgänglig"
-#: ../cli/src/devices.c:97
-#: ../cli/src/network-manager.c:73
-#| msgid "_Disconnect VPN..."
+#: ../cli/src/devices.c:232
+#: ../cli/src/network-manager.c:89
msgid "disconnected"
msgstr "frånkopplad"
-#: ../cli/src/devices.c:99
+#: ../cli/src/devices.c:234
msgid "connecting (prepare)"
msgstr "ansluter (förbereder)"
-#: ../cli/src/devices.c:101
+#: ../cli/src/devices.c:236
msgid "connecting (configuring)"
msgstr "ansluter (konfigurerar)"
-#: ../cli/src/devices.c:103
+#: ../cli/src/devices.c:238
msgid "connecting (need authentication)"
msgstr "ansluter (behöver autentisering)"
-#: ../cli/src/devices.c:105
-#| msgid "Connection _Information"
+#: ../cli/src/devices.c:240
msgid "connecting (getting IP configuration)"
msgstr "ansluter (hämtar IP-konfiguration)"
-#: ../cli/src/devices.c:107
-#: ../cli/src/network-manager.c:71
+#: ../cli/src/devices.c:242
+#: ../cli/src/network-manager.c:87
msgid "connected"
msgstr "ansluten"
-#: ../cli/src/devices.c:109
-#| msgid "Connection _Information"
+#: ../cli/src/devices.c:244
msgid "connection failed"
msgstr "anslutningen misslyckades"
-#: ../cli/src/devices.c:132
-#: ../cli/src/devices.c:876
+#: ../cli/src/devices.c:267
+#: ../cli/src/devices.c:424
msgid "Unknown"
msgstr "Okänt"
-#. print them
-#: ../cli/src/devices.c:164
-#: ../cli/src/devices.c:266
-#: ../cli/src/devices.c:861
-#: ../cli/src/devices.c:879
-#| msgid "(unknown)"
+#: ../cli/src/devices.c:299
msgid "(none)"
msgstr "(ingen)"
-#: ../cli/src/devices.c:209
+#: ../cli/src/devices.c:324
#, c-format
msgid "%s: error converting IP4 address 0x%X"
msgstr "%s: fel vid konvertering av IP4-adress 0x%X"
-#: ../cli/src/devices.c:238
+#: ../cli/src/devices.c:393
#, c-format
-msgid "%s, %s, Freq %d MHz, Rate %d Mb/s, Strength %d"
-msgstr "%s, %s, Frekv %d MHz, Hast %d Mb/s, Styrka %d"
-
-#: ../cli/src/devices.c:239
-msgid "Ad-Hoc"
-msgstr "Ad-Hoc"
-
-#: ../cli/src/devices.c:248
-msgid ", Encrypted: "
-msgstr ", Krypterad: "
-
-#: ../cli/src/devices.c:253
-msgid " WEP"
-msgstr " WEP"
-
-#: ../cli/src/devices.c:255
-msgid " WPA"
-msgstr " WPA"
-
-#: ../cli/src/devices.c:257
-msgid " WPA2"
-msgstr " WPA2"
+msgid "%u MHz"
+msgstr "%u MHz"
-#: ../cli/src/devices.c:260
-msgid " Enterprise"
-msgstr " Enterprise"
+#: ../cli/src/devices.c:394
+#, c-format
+msgid "%u MB/s"
+msgstr "%u MB/s"
-#: ../cli/src/devices.c:294
-#: ../cli/src/devices.c:458
-#: ../cli/src/devices.c:460
-msgid "Device"
-msgstr "Enhet"
+#: ../cli/src/devices.c:403
+#| msgid ", Encrypted: "
+msgid "Encrypted: "
+msgstr "Krypterad: "
-#: ../cli/src/devices.c:299
-msgid "Driver"
-msgstr "Drivrutin"
+#: ../cli/src/devices.c:408
+#| msgid " WEP"
+msgid "WEP "
+msgstr "WEP "
-#: ../cli/src/devices.c:299
-#: ../cli/src/devices.c:567
-msgid "(unknown)"
-msgstr "(okänt)"
+#: ../cli/src/devices.c:410
+#| msgid " WPA"
+msgid "WPA "
+msgstr "WPA "
-#: ../cli/src/devices.c:300
-#: ../cli/src/devices.c:458
-#: ../cli/src/devices.c:460
-msgid "State"
-msgstr "Tillstånd"
+#: ../cli/src/devices.c:412
+#| msgid " WPA2"
+msgid "WPA2 "
+msgstr "WPA2 "
-#: ../cli/src/devices.c:313
-msgid "HW Address"
-msgstr "HÃ¥rdvaruadress"
+#: ../cli/src/devices.c:415
+#| msgid " Enterprise"
+msgid "Enterprise "
+msgstr "Företag"
-#: ../cli/src/devices.c:319
-#, c-format
-msgid ""
-"\n"
-" Capabilities:\n"
-msgstr ""
-"\n"
-" Förmågor:\n"
+#: ../cli/src/devices.c:424
+msgid "Ad-Hoc"
+msgstr "Ad-Hoc"
-#: ../cli/src/devices.c:321
-msgid "Carrier Detect"
-msgstr "Bärardetektering"
+#: ../cli/src/devices.c:424
+msgid "Infrastructure"
+msgstr "Infrastruktur"
-#: ../cli/src/devices.c:336
+#: ../cli/src/devices.c:486
#, c-format
-#| msgid "%d Mb/s"
-msgid "%u Mb/s"
-msgstr "%u Mb/s"
-
-#: ../cli/src/devices.c:337
-msgid "Speed"
-msgstr "Hastighet"
+msgid "Error: 'dev list': %s"
+msgstr "Fel: \"dev list\": %s"
-#: ../cli/src/devices.c:348
+#: ../cli/src/devices.c:488
#, c-format
-msgid ""
-"\n"
-" Wireless Properties\n"
-msgstr ""
-"\n"
-" Trådlösa egenskaper\n"
-
-#: ../cli/src/devices.c:353
-msgid "WEP Encryption"
-msgstr "WEP-kryptering"
+#| msgid "Error: Device '%s' (%s) disconnecting failed: %s"
+msgid "Error: 'dev list': %s; allowed fields: %s"
+msgstr "Fel: \"dev list\": %s; tillåtna fält: %s"
-#: ../cli/src/devices.c:355
-msgid "WPA Encryption"
-msgstr "WPA-kryptering"
+#: ../cli/src/devices.c:497
+#| msgid "Devices"
+msgid "Device details"
+msgstr "Enhetsdetaljer"
-#: ../cli/src/devices.c:357
-msgid "WPA2 Encryption"
-msgstr "WPA2-kryptering"
-
-#: ../cli/src/devices.c:359
-msgid "TKIP cipher"
-msgstr "TKIP-chiffer"
-
-#: ../cli/src/devices.c:361
-msgid "CCMP cipher"
-msgstr "CCMP-chiffer"
-
-#: ../cli/src/devices.c:368
-#, c-format
-msgid ""
-"\n"
-" Wireless Access Points %s\n"
-msgstr ""
-"\n"
-" Trådlösa accesspunkter %s\n"
+#: ../cli/src/devices.c:527
+#: ../cli/src/devices.c:925
+msgid "(unknown)"
+msgstr "(okänt)"
-#: ../cli/src/devices.c:368
-msgid "(* = current AP)"
-msgstr "(* = aktuell AP)"
+#: ../cli/src/devices.c:528
+#| msgid "(unknown)"
+msgid "unknown)"
+msgstr "okänt)"
-#: ../cli/src/devices.c:374
+#: ../cli/src/devices.c:554
#, c-format
-msgid ""
-"\n"
-" Wired Properties\n"
-msgstr ""
-"\n"
-" Trådbundna egenskaper\n"
-
-#: ../cli/src/devices.c:377
-#: ../cli/src/devices.c:379
-msgid "Carrier"
-msgstr "Bärare"
+msgid "%u Mb/s"
+msgstr "%u Mb/s"
-#: ../cli/src/devices.c:377
-#| msgid "None"
+#. Print header
+#. "WIRED-PROPERTIES"
+#: ../cli/src/devices.c:627
msgid "on"
msgstr "på"
-#: ../cli/src/devices.c:379
+#: ../cli/src/devices.c:627
msgid "off"
msgstr "av"
-#: ../cli/src/devices.c:387
+#: ../cli/src/devices.c:808
#, c-format
-msgid ""
-"\n"
-" IPv4 Settings:\n"
-msgstr ""
-"\n"
-" IPv4-inställningar:\n"
-
-#: ../cli/src/devices.c:395
-msgid "Address"
-msgstr "Adress"
-
-#: ../cli/src/devices.c:401
-msgid "Prefix"
-msgstr "Prefix"
+msgid "Error: 'dev status': %s"
+msgstr "Fel: \"dev status\": %s"
-#: ../cli/src/devices.c:405
-msgid "Gateway"
-msgstr "Gateway"
-
-#: ../cli/src/devices.c:416
-msgid "DNS"
-msgstr "DNS"
+#: ../cli/src/devices.c:810
+#, c-format
+msgid "Error: 'dev status': %s; allowed fields: %s"
+msgstr "Fel: \"dev status\": %s; tillåtna fält: %s"
-#: ../cli/src/devices.c:458
+#: ../cli/src/devices.c:817
msgid "Status of devices"
msgstr "Status för enheter"
-#: ../cli/src/devices.c:487
+#: ../cli/src/devices.c:845
#, c-format
msgid "Error: '%s' argument is missing."
msgstr "Fel: \"%s\"-argument saknas."
-#: ../cli/src/devices.c:516
-#: ../cli/src/devices.c:655
-#: ../cli/src/devices.c:729
+#: ../cli/src/devices.c:874
+#: ../cli/src/devices.c:1013
+#: ../cli/src/devices.c:1136
#, c-format
msgid "Error: Device '%s' not found."
msgstr "Fel: Enheten \"%s\" hittades inte."
-#: ../cli/src/devices.c:539
+#: ../cli/src/devices.c:897
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "Lyckades: Enheten \"%s\" kopplades från."
-#: ../cli/src/devices.c:564
+#: ../cli/src/devices.c:922
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "Fel: Frånkoppling av enheten \"%s\" (%s) misslyckades: %s"
-#: ../cli/src/devices.c:572
+#: ../cli/src/devices.c:930
#, c-format
msgid "Device state: %d (%s)\n"
msgstr "Enhetstillstånd: %d (%s)\n"
-#: ../cli/src/devices.c:636
+#: ../cli/src/devices.c:994
#, c-format
msgid "Error: iface has to be specified."
msgstr "Fel: gränssnitt (iface) måste anges."
-#: ../cli/src/devices.c:736
-#: ../cli/src/devices.c:746
-msgid "WiFi scan list"
-msgstr "WiFi-avsökningslista"
-
-#: ../cli/src/devices.c:740
+#: ../cli/src/devices.c:1112
#, c-format
-msgid "Error: Device '%s' is not a WiFi device."
-msgstr "Fel: Enheten \"%s\" är inte en WiFi-enhet."
-
-#: ../cli/src/devices.c:754
-msgid "Device:"
-msgstr "Enhet:"
+#| msgid "Error: 'dev wifi' command '%s' is not valid."
+msgid "Error: 'dev wifi': %s"
+msgstr "Fel: \"dev wifi\": %s"
-#: ../cli/src/devices.c:806
+#: ../cli/src/devices.c:1114
#, c-format
-msgid "Error: hwaddr has to be specified."
-msgstr "Fel: hwaddr måste anges."
+msgid "Error: 'dev wifi': %s; allowed fields: %s"
+msgstr "Fel: \"dev wifi\": %s; tillåtna fält: %s"
+
+#: ../cli/src/devices.c:1121
+msgid "WiFi scan list"
+msgstr "WiFi-avsökningslista"
-#: ../cli/src/devices.c:844
+#: ../cli/src/devices.c:1156
+#: ../cli/src/devices.c:1210
#, c-format
msgid "Error: Access point with hwaddr '%s' not found."
msgstr "Fel: Accesspunkt med hwaddr \"%s\" hittades inte."
-#: ../cli/src/devices.c:862
-#, c-format
-msgid "%u MHz"
-msgstr "%u MHz"
-
-#: ../cli/src/devices.c:863
+#: ../cli/src/devices.c:1173
#, c-format
-#| msgid "%d Mb/s"
-msgid "%u MB/s"
-msgstr "%u MB/s"
-
-#: ../cli/src/devices.c:869
-#: ../cli/src/devices.c:871
-msgid "AP parameters"
-msgstr "AP-parametrar"
-
-#: ../cli/src/devices.c:873
-msgid "SSID:"
-msgstr "SSID:"
-
-#: ../cli/src/devices.c:874
-msgid "BSSID:"
-msgstr "BSSID:"
-
-#: ../cli/src/devices.c:875
-msgid "Frequency:"
-msgstr "Frekvens:"
-
-#: ../cli/src/devices.c:876
-msgid "Mode:"
-msgstr "Läge:"
-
-#: ../cli/src/devices.c:876
-msgid "Ad-hoc"
-msgstr "Ad-hoc"
-
-#: ../cli/src/devices.c:876
-msgid "Infrastructure"
-msgstr "Infrastruktur"
-
-#: ../cli/src/devices.c:877
-msgid "Maximal bitrate:"
-msgstr "Maximal bitfrekvens:"
-
-#: ../cli/src/devices.c:878
-msgid "Strength:"
-msgstr "Styrka:"
-
-#: ../cli/src/devices.c:879
-msgid "Flags:"
-msgstr "Flaggor:"
-
-#: ../cli/src/devices.c:879
-msgid "privacy"
-msgstr "integritet"
-
-#: ../cli/src/devices.c:880
-msgid "WPA flags:"
-msgstr "WPA-flaggor:"
-
-#: ../cli/src/devices.c:881
-msgid "RSN flags:"
-msgstr "RSN-flaggor:"
+msgid "Error: Device '%s' is not a WiFi device."
+msgstr "Fel: Enheten \"%s\" är inte en WiFi-enhet."
-#: ../cli/src/devices.c:907
+#: ../cli/src/devices.c:1237
#, c-format
msgid "Error: 'dev wifi' command '%s' is not valid."
msgstr "Fel: \"dev wifi\"-kommandot \"%s\" är inte giltigt."
-#: ../cli/src/devices.c:943
+#: ../cli/src/devices.c:1284
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "Fel: \"dev\"-kommandot \"%s\" är inte giltigt."
-#: ../cli/src/network-manager.c:46
+#: ../cli/src/network-manager.c:35
+msgid "RUNNING"
+msgstr "KÖR"
+
+#. 1
+#: ../cli/src/network-manager.c:37
+msgid "WIFI-HARDWARE"
+msgstr "WIFI-MASKINVARA"
+
+#. 2
+#: ../cli/src/network-manager.c:38
+msgid "WIFI"
+msgstr "WIFI"
+
+#. 3
+#: ../cli/src/network-manager.c:39
+msgid "WWAN-HARDWARE"
+msgstr "WWAN-MASKINVARA"
+
+#. 4
+#: ../cli/src/network-manager.c:40
+#| msgid "NM WWAN:"
+msgid "WWAN"
+msgstr "WWAN"
+
+#: ../cli/src/network-manager.c:62
#, c-format
msgid ""
"Usage: nmcli nm { COMMAND | help }\n"
@@ -809,99 +1018,114 @@ msgstr ""
" wwan [on|off]\n"
"\n"
-#: ../cli/src/network-manager.c:67
+#: ../cli/src/network-manager.c:83
msgid "asleep"
msgstr "sover"
-#: ../cli/src/network-manager.c:69
-#| msgid "VPN connecting to '%s'"
+#: ../cli/src/network-manager.c:85
msgid "connecting"
msgstr "ansluter"
-#: ../cli/src/network-manager.c:93
-#: ../cli/src/network-manager.c:94
-#: ../cli/src/network-manager.c:95
-#: ../cli/src/network-manager.c:96
+#: ../cli/src/network-manager.c:125
+#, c-format
+msgid "Error: 'nm status': %s"
+msgstr "Fel: \"nm status\": %s"
+
+#: ../cli/src/network-manager.c:127
+#, c-format
+msgid "Error: 'nm status': %s; allowed fields: %s"
+msgstr "Fel: \"nm status\": %s; tillåtna fält: %s"
+
+#: ../cli/src/network-manager.c:134
+msgid "NetworkManager status"
+msgstr "Status för Nätverkshanterare"
+
+#. 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:160
+#: ../cli/src/network-manager.c:211
+#: ../cli/src/network-manager.c:243
msgid "enabled"
msgstr "aktiverad"
-#: ../cli/src/network-manager.c:93
-#: ../cli/src/network-manager.c:94
-#: ../cli/src/network-manager.c:95
-#: ../cli/src/network-manager.c:96
+#: ../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:160
+#: ../cli/src/network-manager.c:211
+#: ../cli/src/network-manager.c:243
msgid "disabled"
msgstr "inaktiverad"
-#: ../cli/src/network-manager.c:102
-#| msgid "NetworkManager Applet"
-msgid "NetworkManager status"
-msgstr "Status för Nätverkshanterare"
-
-#: ../cli/src/network-manager.c:104
-msgid "NM running:"
-msgstr "NM kör:"
-
-#: ../cli/src/network-manager.c:104
+#: ../cli/src/network-manager.c:148
msgid "running"
msgstr "kör"
-#: ../cli/src/network-manager.c:104
+#: ../cli/src/network-manager.c:148
msgid "not running"
msgstr "kör inte"
-#: ../cli/src/network-manager.c:105
-msgid "NM state:"
-msgstr "NM tillstånd:"
-
-#: ../cli/src/network-manager.c:106
-msgid "NM wireless hardware:"
-msgstr "NM trådlös hårdvara:"
-
-#. no argument, show current state
-#: ../cli/src/network-manager.c:107
-#: ../cli/src/network-manager.c:143
-msgid "NM wireless:"
-msgstr "NM trådlös:"
-
-#: ../cli/src/network-manager.c:108
-msgid "NM WWAN hardware:"
-msgstr "NM WWAN hårdvara:"
+#: ../cli/src/network-manager.c:201
+#: ../cli/src/network-manager.c:233
+#, c-format
+#| msgid "Error: timeout value '%s' is not valid."
+msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
+msgstr "Fel: värdet \"%s\" för \"--fields\" är inte giltigt här; tillåtna fält: %s"
-#. no argument, show current state
-#: ../cli/src/network-manager.c:109
-#: ../cli/src/network-manager.c:160
-msgid "NM WWAN:"
-msgstr "NM WWAN:"
+#: ../cli/src/network-manager.c:209
+#| msgid "enabled"
+msgid "WiFi enabled"
+msgstr "WiFi aktiverat"
-#: ../cli/src/network-manager.c:150
+#: ../cli/src/network-manager.c:220
#, c-format
msgid "Error: invalid 'wifi' parameter: '%s'."
msgstr "Fel: ogiltig \"wifi\"-parameter: \"%s\"."
-#: ../cli/src/network-manager.c:167
+#: ../cli/src/network-manager.c:241
+#| msgid "enabled"
+msgid "WWAN enabled"
+msgstr "WWAN aktiverat"
+
+#: ../cli/src/network-manager.c:252
#, c-format
msgid "Error: invalid 'wwan' parameter: '%s'."
msgstr "Fel: ogiltig \"wwan\"-parameter: \"%s\"."
-#: ../cli/src/network-manager.c:178
+#: ../cli/src/network-manager.c:263
#, c-format
msgid "Error: 'nm' command '%s' is not valid."
msgstr "Fel: \"nm\"-kommandot \"%s\" är inte giltigt."
-#: ../cli/src/nmcli.c:65
-#, c-format
+#: ../cli/src/nmcli.c:69
+#, c-format
+#| msgid ""
+#| "Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
+#| "\n"
+#| "OPTIONS\n"
+#| " -t[erse] terse output\n"
+#| " -p[retty] pretty output\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"
"OPTIONS\n"
-" -t[erse] terse output\n"
-" -p[retty] pretty output\n"
-" -v[ersion] show program version\n"
-" -h[elp] print this help\n"
+" -t[erse] terse output\n"
+" -p[retty] pretty output\n"
+" -m[ode] tabular|multiline output mode\n"
+" -f[ields] <field1,field2,...>|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"
@@ -912,10 +1136,13 @@ msgstr ""
"Användning: %s [FLAGGOR] OBJEKT { KOMMANDO | help }\n"
"\n"
"FLAGGOR\n"
-" -t[erse] kort utdata\n"
-" -p[retty] vackert utdata\n"
-" -v[ersion] visa programversion\n"
-" -h[elp] skriv ut denna hjälp\n"
+" -t[erse] kort utdata\n"
+" -p[retty] vackert utdata\n"
+" -m[ode] tabular|multiline utdataläge\n"
+" -f[ields] <field1,field2,...>|all|common ange fält för utdata\n"
+" -e[scape] yes|no escape för kolumnavgränsare i värden\n"
+" -v[ersion] visa programversion\n"
+" -h[elp] skriv ut denna hjälp\n"
"\n"
"OBJEKT\n"
" nm status för Nätverkshanterare\n"
@@ -923,35 +1150,179 @@ msgstr ""
" dev enheter hanterade av Nätverkshanterare\n"
"\n"
-#: ../cli/src/nmcli.c:106
+#: ../cli/src/nmcli.c:113
+#, c-format
+#| msgid "Object '%s' is unknown, try 'nmcli help'."
+msgid "Error: Object '%s' is unknown, try 'nmcli help'."
+msgstr "Fel: Objektet \"%s\" är okänt, prova \"nmcli help\"."
+
+#: ../cli/src/nmcli.c:143
+#, c-format
+msgid "Error: Option '--terse' is specified the second time."
+msgstr "Fel: Flaggan \"--terse\" har angivits en andra gång."
+
+#: ../cli/src/nmcli.c:148
#, c-format
-msgid "Object '%s' is unknown, try 'nmcli help'."
-msgstr "Objektet \"%s\" är okänt, prova \"nmcli help\"."
+msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
+msgstr "Fel: Flaggan \"--terse\" är ömsesidigt uteslutande med \"--pretty\"."
-#: ../cli/src/nmcli.c:139
+#: ../cli/src/nmcli.c:156
+#, c-format
+msgid "Error: Option '--pretty' is specified the second time."
+msgstr "Fel: Flaggan \"--pretty\" har angivits en andra gång."
+
+#: ../cli/src/nmcli.c:161
+#, c-format
+msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
+msgstr "Fel: Flaggan \"--pretty\" är ömsesidigt uteslutande med \"--terse\"."
+
+#: ../cli/src/nmcli.c:171
+#: ../cli/src/nmcli.c:187
+#, c-format
+#| msgid "Error: %s argument is missing."
+msgid "Error: missing argument for '%s' option."
+msgstr "Fel: argument för flaggan \"%s\" saknas."
+
+#: ../cli/src/nmcli.c:180
+#: ../cli/src/nmcli.c:196
+#, c-format
+#| msgid "Error: '%s' argument is missing."
+msgid "Error: '%s' is not valid argument for '%s' option."
+msgstr "Fel: \"%s\" är inte ett giltigt argument för flaggan \"%s\"."
+
+#: ../cli/src/nmcli.c:203
+#, c-format
+#| msgid "Error: '%s' argument is missing."
+msgid "Error: fields for '%s' options are missing."
+msgstr "Fel: fält för \"%s\"-flaggor saknas."
+
+#: ../cli/src/nmcli.c:209
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "nmcli-verktyg, version %s\n"
-#: ../cli/src/nmcli.c:145
+#: ../cli/src/nmcli.c:215
#, c-format
-msgid "Option '%s' is unknown, try 'nmcli -help'."
-msgstr "Flagan \"%s\" är okänd, prova \"nmcli -help\"."
+#| msgid "Option '%s' is unknown, try 'nmcli -help'."
+msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
+msgstr "Fel: Flaggan \"%s\" är okänd, prova \"nmcli -help\"."
-#: ../cli/src/nmcli.c:164
+#: ../cli/src/nmcli.c:234
#, c-format
msgid "Caught signal %d, shutting down..."
msgstr "Fångade signal %d, stänger av..."
-#: ../cli/src/nmcli.c:189
+#: ../cli/src/nmcli.c:259
#, c-format
msgid "Error: Could not connect to NetworkManager."
msgstr "Fel: Kunde inte ansluta till Nätverkshanterare."
-#: ../cli/src/nmcli.c:205
+#: ../cli/src/nmcli.c:275
msgid "Success"
msgstr "Lyckades"
+#: ../cli/src/settings.c:411
+#, c-format
+msgid "%d (hex-ascii-key)"
+msgstr "%d (hex-ascii-nyckel)"
+
+#: ../cli/src/settings.c:413
+#, c-format
+#| msgid "WEP 128-bit Passphrase"
+msgid "%d (104/128-bit passphrase)"
+msgstr "%d (104/128-bitars lösenfras)"
+
+#: ../cli/src/settings.c:416
+#, c-format
+#| msgid "(unknown)"
+msgid "%d (unknown)"
+msgstr "%d (okänt)"
+
+#: ../cli/src/settings.c:442
+#| msgid "(unknown)"
+msgid "0 (unknown)"
+msgstr "0 (okänt)"
+
+#: ../cli/src/settings.c:448
+msgid "any, "
+msgstr "valfri, "
+
+#: ../cli/src/settings.c:450
+msgid "900 MHz, "
+msgstr "900 MHz, "
+
+#: ../cli/src/settings.c:452
+msgid "1800 MHz, "
+msgstr "1800 MHz, "
+
+#: ../cli/src/settings.c:454
+msgid "1900 MHz, "
+msgstr "1900 MHz, "
+
+#: ../cli/src/settings.c:456
+msgid "850 MHz, "
+msgstr "850 MHz, "
+
+#: ../cli/src/settings.c:458
+msgid "WCDMA 3GPP UMTS 2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 2100 MHz, "
+
+#: ../cli/src/settings.c:460
+msgid "WCDMA 3GPP UMTS 1800 MHz, "
+msgstr "WCDMA 3GPP UMTS 1800 MHz, "
+
+#: ../cli/src/settings.c:462
+msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
+
+#: ../cli/src/settings.c:464
+msgid "WCDMA 3GPP UMTS 800 MHz, "
+msgstr "WCDMA 3GPP UMTS 800 MHz, "
+
+#: ../cli/src/settings.c:466
+msgid "WCDMA 3GPP UMTS 850 MHz, "
+msgstr "WCDMA 3GPP UMTS 850 MHz, "
+
+#: ../cli/src/settings.c:468
+msgid "WCDMA 3GPP UMTS 900 MHz, "
+msgstr "WCDMA 3GPP UMTS 900 MHz, "
+
+#: ../cli/src/settings.c:470
+msgid "WCDMA 3GPP UMTS 1700 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700 MHz, "
+
+#: ../cli/src/settings.c:554
+#: ../cli/src/settings.c:721
+msgid "auto"
+msgstr "auto"
+
+#: ../cli/src/settings.c:716
+#: ../cli/src/settings.c:719
+#: ../cli/src/settings.c:720
+#: ../cli/src/utils.c:172
+msgid "not set"
+msgstr "inte inställd"
+
+#: ../cli/src/utils.c:124
+#, c-format
+msgid "field '%s' has to be alone"
+msgstr "fältet \"%s\" måste vara ensamt"
+
+#: ../cli/src/utils.c:127
+#, c-format
+msgid "invalid field '%s'"
+msgstr "ogiltigt fält \"%s\""
+
+#: ../cli/src/utils.c:146
+#, c-format
+msgid "Option '--terse' requires specifying '--fields'"
+msgstr "Flaggan \"--terse\" kräver att \"--fields\" anges"
+
+#: ../cli/src/utils.c:150
+#, c-format
+msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
+msgstr "Flaggan \"--terse\" kräver specifika värden för \"--fields\"-flagga , inte \"%s\""
+
#: ../libnm-util/crypto.c:120
#, c-format
msgid "PEM key file had no end tag '%s'."
@@ -1104,7 +1475,6 @@ msgstr "Misslyckades med att dekryptera den privata nyckeln: %s / %s."
#: ../libnm-util/crypto_gnutls.c:210
#: ../libnm-util/crypto_nss.c:267
#, c-format
-#| msgid "Failed to decrypt the private key: %d."
msgid "Failed to decrypt the private key: unexpected padding length."
msgstr "Misslyckades med att dekryptera privata nyckeln: oväntad utfyllningslängd."
@@ -1122,25 +1492,21 @@ msgstr "Kunde inte allokera minne för kryptering."
#: ../libnm-util/crypto_gnutls.c:294
#, c-format
-#| msgid "Failed to initialize the decryption cipher context: %s / %s."
msgid "Failed to initialize the encryption cipher context: %s / %s."
msgstr "Misslyckades med att initiera chifferkontexten för kryptering: %s / %s."
#: ../libnm-util/crypto_gnutls.c:303
#, c-format
-#| msgid "Failed to set symmetric key for decryption: %s / %s."
msgid "Failed to set symmetric key for encryption: %s / %s."
msgstr "Misslyckades med att ställa in symmetrisk nyckel för kryptering: %s / %s."
#: ../libnm-util/crypto_gnutls.c:313
#, c-format
-#| msgid "Failed to set IV for decryption: %s / %s."
msgid "Failed to set IV for encryption: %s / %s."
msgstr "Misslyckades med att ställa in IV för kryptering: %s / %s."
#: ../libnm-util/crypto_gnutls.c:322
#, c-format
-#| msgid "Failed to decrypt the private key: %s / %s."
msgid "Failed to encrypt the data: %s / %s."
msgstr "Misslyckades med att kryptera datat: %s / %s."
@@ -1211,7 +1577,6 @@ msgstr "Misslyckades med att dekryptera privata nyckeln: %d."
#: ../libnm-util/crypto_nss.c:245
#, c-format
-#| msgid "Failed to decrypt the private key: %d."
msgid "Failed to decrypt the private key: decrypted data too large."
msgstr "Misslyckades med att dekryptera privata nyckeln: dekrypterat data är för stort."
@@ -1222,31 +1587,26 @@ msgstr "Misslyckades med att färdigställa dekryptering av den privata nyckeln:
#: ../libnm-util/crypto_nss.c:364
#, c-format
-#| msgid "Failed to initialize the decryption cipher slot."
msgid "Failed to initialize the encryption cipher slot."
msgstr "Misslyckades med att initiera krypteringschifferplatsen."
#: ../libnm-util/crypto_nss.c:372
#, c-format
-#| msgid "Failed to set symmetric key for decryption."
msgid "Failed to set symmetric key for encryption."
msgstr "Misslyckades med att ställa in symmetrisk nyckel för kryptering."
#: ../libnm-util/crypto_nss.c:380
#, c-format
-#| msgid "Failed to set IV for decryption."
msgid "Failed to set IV for encryption."
msgstr "Misslyckades med att ställa in IV för kryptering."
#: ../libnm-util/crypto_nss.c:388
#, c-format
-#| msgid "Failed to initialize the decryption context."
msgid "Failed to initialize the encryption context."
msgstr "Misslyckades med att initiera krypteringskontexten."
#: ../libnm-util/crypto_nss.c:396
#, c-format
-#| msgid "Failed to decrypt the private key: %d."
msgid "Failed to encrypt: %d."
msgstr "Misslyckades med att kryptera: %d."
@@ -1281,86 +1641,179 @@ msgid "Couldn't verify PKCS#12 file: %d"
msgstr "Kunde inte verifiera PKCS#12-fil: %d"
#: ../libnm-util/crypto_nss.c:557
-#| msgid "Could not decode private key."
msgid "Could not generate random data."
msgstr "Kunde inte generera slumpmässigt data."
-#: ../libnm-util/nm-utils.c:1545
+#: ../libnm-util/nm-utils.c:1975
#, c-format
-#| msgid "Not enough memory to create private key decryption key."
msgid "Not enough memory to make encryption key."
msgstr "Inte tillräckligt mycket minne för att skapa krypteringsnyckel."
-#: ../libnm-util/nm-utils.c:1655
-#| msgid "Not enough memory to store PEM file data."
+#: ../libnm-util/nm-utils.c:2085
msgid "Could not allocate memory for PEM file creation."
msgstr "Kunde inte allokera minne för att skapa PEM-fil."
-#: ../libnm-util/nm-utils.c:1667
+#: ../libnm-util/nm-utils.c:2097
#, c-format
msgid "Could not allocate memory for writing IV to PEM file."
msgstr "Kunde inte allokera minne för skrivning av IV till PEM-fil."
-#: ../libnm-util/nm-utils.c:1679
+#: ../libnm-util/nm-utils.c:2109
#, c-format
msgid "Could not allocate memory for writing encrypted key to PEM file."
msgstr "Kunde inte allokera minne för skrivning av krypterad nyckel till PEM-fil."
-#: ../libnm-util/nm-utils.c:1698
+#: ../libnm-util/nm-utils.c:2128
#, c-format
-#| msgid "Not enough memory to store PEM file data."
msgid "Could not allocate memory for PEM file data."
msgstr "Kunde inte allokera minne för PEM-fildata."
-#: ../src/nm-netlink-monitor.c:194
-#: ../src/nm-netlink-monitor.c:464
-#: ../src/nm-netlink-monitor.c:582
-#: ../src/ip6-manager/nm-netlink-listener.c:352
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
+msgid "Connection sharing via a protected WiFi network"
+msgstr "Anslutningsdelning via ett skyddat trådlöst nätverk"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
+msgid "Connection sharing via an open WiFi network"
+msgstr "Anslutningsdelning via ett öppet trådlöst nätverk"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
+msgid "Modify persistent system hostname"
+msgstr "Ändra bestående värdnamn för systemet"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
+msgid "Modify system connections"
+msgstr "Ändra systemanslutningar"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
+msgid "System policy prevents modification of system settings"
+msgstr "Systemets policy förhindrar ändring av systeminställningar"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
+msgid "System policy prevents modification of the persistent system hostname"
+msgstr "Systemets policy förhindrar ändring av bestående värdnamn för systemet"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
+msgid "System policy prevents sharing connections via a protected WiFi network"
+msgstr "Systemets policy förhindrar delning av anslutningar via ett skyddat trådlöst nätverk"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
+msgid "System policy prevents sharing connections via an open WiFi network"
+msgstr "Systemets policy förhindrar delning av anslutningar via ett öppet trådlöst nätverk"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
+#| msgid "Wired network connection"
+msgid "Allow control of network connections"
+msgstr "Tillåt kontroll av nätverksanslutningar"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
+msgid "Allow use of user-specific connections"
+msgstr "Tillåt användning av användarspecifika anslutningar"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
+msgid "Enable or disable WiFi devices"
+msgstr "Aktivera eller inaktivera WiFi-enheter"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
+msgid "Enable or disable mobile broadband devices"
+msgstr "Aktivera eller inaktivera mobila bredbandsenheter"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+#| msgid "Enable _Networking"
+msgid "Enable or disable system networking"
+msgstr "Aktivera eller inaktivera systemnätverk"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
+msgid "Put NetworkManager to sleep or wake it up (should only be used by system power management)"
+msgstr "Försätt Nätverkshanterare i vänteläge eller återställ efter det (bör endast användas av systemets strömhantering)"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
+#| msgid "System policy prevents modification of system settings"
+msgid "System policy prevents control of network connections"
+msgstr "Systemets policy förhindrar kontroll av nätverksanslutningar"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
+#| msgid "System policy prevents sharing connections via an open WiFi network"
+msgid "System policy prevents enabling or disabling WiFi devices"
+msgstr "Systemets policy förhindrar aktivering eller inaktivering av WiFi-enheter"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
+msgid "System policy prevents enabling or disabling mobile broadband devices"
+msgstr "Systemets policy förhindrar aktivering eller inaktivering av mobila bredbandsenheter"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
+#| msgid "System policy prevents modification of system settings"
+msgid "System policy prevents enabling or disabling system networking"
+msgstr "Systemets policy förhindrar aktivering eller inaktivering av systemnätverk"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
+msgid "System policy prevents putting NetworkManager to sleep or waking it up"
+msgstr "Systemets policy förhindrar att Nätverkshanterare försätts i vänteläge eller återställs efter det"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
+#| msgid "System policy prevents modification of system settings"
+msgid "System policy prevents use of user-specific connections"
+msgstr "Systemets policy förhindrar användning av användarspecifika anslutningar"
+
+#: ../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 "fel vid behandling av netlink-meddelande: %s"
-#: ../src/nm-netlink-monitor.c:260
-#, c-format
-msgid "unable to allocate netlink handle for monitoring link status: %s"
-msgstr "kan inte allokera netlink-handtag för övervakning av länkstatus: %s"
+#: ../src/nm-netlink-monitor.c:214
+msgid "error occurred while waiting for data on socket"
+msgstr "fel inträffade vid väntan på data i uttaget"
-#: ../src/nm-netlink-monitor.c:270
+#: ../src/nm-netlink-monitor.c:254
#, c-format
msgid "unable to connect to netlink for monitoring link status: %s"
msgstr "kan inte ansluta till netlink för övervakning av länkstatus: %s"
-#: ../src/nm-netlink-monitor.c:278
+#: ../src/nm-netlink-monitor.c:265
+#, c-format
+#| msgid "unable to allocate netlink handle: %s"
+msgid "unable to enable netlink handle credential passing: %s"
+msgstr "kunde inte aktivera behörighetshantering för netlink-handtag: %s"
+
+#: ../src/nm-netlink-monitor.c:291
+#: ../src/nm-netlink-monitor.c:353
#, c-format
-msgid "unable to join netlink group for monitoring link status: %s"
-msgstr "kan inte gå med i netlink-grupp för övervakning av länkstatus: %s"
+msgid "unable to allocate netlink handle for monitoring link status: %s"
+msgstr "kan inte allokera netlink-handtag för övervakning av länkstatus: %s"
-#: ../src/nm-netlink-monitor.c:286
+#: ../src/nm-netlink-monitor.c:376
#, c-format
msgid "unable to allocate netlink link cache for monitoring link status: %s"
msgstr "kan inte allokera netlink-länkcache för övervakning av länkstatus: %s"
-#: ../src/nm-netlink-monitor.c:494
-#: ../src/ip6-manager/nm-netlink-listener.c:382
-msgid "error occurred while waiting for data on socket"
-msgstr "fel inträffade vid väntan på data i uttaget"
+#: ../src/nm-netlink-monitor.c:502
+#, c-format
+msgid "unable to join netlink group: %s"
+msgstr "kan inte gå med i netlink-grupp: %s"
-#: ../src/nm-netlink-monitor.c:558
-#: ../src/nm-netlink-monitor.c:571
+#: ../src/nm-netlink-monitor.c:629
+#: ../src/nm-netlink-monitor.c:642
#, c-format
msgid "error updating link cache: %s"
msgstr "fel vid uppdatering av länkcache: %s"
-#: ../src/NetworkManager.c:494
+#: ../src/main.c:502
#, c-format
msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgstr "Ogiltig flagga. Använd --help för att se en lista över giltiga flaggor.\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:300
+#: ../src/main.c:573
+#, c-format
+#| msgid "Invalid option. Please use --help to see a list of valid options.\n"
+msgid "%s. Please use --help to see a list of valid options.\n"
+msgstr "%s. Använd --help för att se en lista över giltiga flaggor.\n"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:324
msgid "# Created by NetworkManager\n"
msgstr "# Skapad av Nätverkshanterare\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:316
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:340
#, c-format
msgid ""
"# Merged from %s\n"
@@ -1369,29 +1822,38 @@ msgstr ""
"# Sammanfogad från %s\n"
"\n"
-#: ../src/ip6-manager/nm-netlink-listener.c:200
+#: ../src/dhcp-manager/nm-dhcp-manager.c:284
+msgid "no usable DHCP client could be found."
+msgstr "ingen användbar DHCP-klient hittades."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+msgid "'dhclient' could be found."
+msgstr "\"dhclient\" kunde inte hittas."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:303
+msgid "'dhcpcd' could be found."
+msgstr "\"dhcpcd\" kunde inte hittas."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:311
#, c-format
-#| msgid "unable to allocate netlink handle for monitoring link status: %s"
-msgid "unable to allocate netlink handle: %s"
-msgstr "kan inte allokera netlink-handtag: %s"
+msgid "unsupported DHCP client '%s'"
+msgstr "DHCP-klienten \"%s\" stöds inte"
-#: ../src/ip6-manager/nm-netlink-listener.c:210
+#: ../src/logging/nm-logging.c:146
#, c-format
-#| msgid "unable to connect to netlink for monitoring link status: %s"
-msgid "unable to connect to netlink: %s"
-msgstr "kan inte ansluta till netlink: %s"
+msgid "Unknown log level '%s'"
+msgstr "Okänd loggnivå \"%s\""
-#: ../src/ip6-manager/nm-netlink-listener.c:307
+#: ../src/logging/nm-logging.c:171
#, c-format
-#| msgid "unable to join netlink group for monitoring link status: %s"
-msgid "unable to join netlink group: %s"
-msgstr "kan inte gå med i netlink-grupp: %s"
+msgid "Unknown log domain '%s'"
+msgstr "Okänd loggdomän \"%s\""
-#: ../src/named-manager/nm-named-manager.c:315
+#: ../src/dns-manager/nm-dns-manager.c:384
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr "OBSERVERA: uppslag via glibc kanske inte har stöd för fler än 3 namnservrar."
-#: ../src/named-manager/nm-named-manager.c:317
+#: ../src/dns-manager/nm-dns-manager.c:386
msgid "The nameservers listed below may not be recognized."
msgstr "Namnservrarna listade nedan kanske inte kommer att kännas igen."
@@ -1400,203 +1862,12 @@ msgstr "Namnservrarna listade nedan kanske inte kommer att kännas igen."
msgid "Auto %s"
msgstr "Automatisk %s"
-#: ../system-settings/plugins/ifcfg-rh/reader.c:3213
+#: ../system-settings/plugins/ifcfg-rh/reader.c:3412
msgid "System"
msgstr "System"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
-msgid "Connection sharing via a protected WiFi network"
-msgstr "Anslutningsdelning via ett skyddat trådlöst nätverk"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
-msgid "Connection sharing via an open WiFi network"
-msgstr "Anslutningsdelning via ett öppet trådlöst nätverk"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
-msgid "Modify persistent system hostname"
-msgstr "Ändra bestående värdnamn för systemet"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
-msgid "Modify system connections"
-msgstr "Ändra systemanslutningar"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
-msgid "System policy prevents modification of system settings"
-msgstr "Systemets policy förhindrar ändring av systeminställningar"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
-msgid "System policy prevents modification of the persistent system hostname"
-msgstr "Systemets policy förhindrar ändring av bestående värdnamn för systemet"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
-msgid "System policy prevents sharing connections via a protected WiFi network"
-msgstr "Systemets policy förhindrar delning av anslutningar via ett skyddat trådlöst nätverk"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
-msgid "System policy prevents sharing connections via an open WiFi network"
-msgstr "Systemets policy förhindrar delning av anslutningar via ett öppet trådlöst nätverk"
-
-#~ msgid "operation took too long"
-#~ msgstr "åtgärden tog för lång tid"
-#~ msgid "received data from wrong type of sender"
-#~ msgstr "tog emot data från fel typ av avsändare"
-#~ msgid "received data from unexpected sender"
-#~ msgstr "tog emot data från oväntad avsändare"
-#~ msgid "too much data was sent over socket and some of it was lost"
-#~ msgstr "för mycket data skickades över uttaget och en del gick förlorat"
-#~ msgid "Passphrase for wireless network %s"
-#~ msgstr "Lösenfras för det trådlösa nätverket %s"
-#~ msgid "Connection to the wireless network '%s' failed."
-#~ msgstr "Anslutning till det trådlösa nätverket \"%s\" misslyckades."
-#~ msgid "Error displaying connection information:"
-#~ msgstr "Fel vid visning av anslutningsinformation:"
-#~ msgid "Could not find some required resources (the glade file)!"
-#~ msgstr "Kunde inte hitta en del nödvändiga resurser (glade-filen)!"
-#~ msgid "Wired Ethernet (%s)"
-#~ msgstr "Trådbundet Ethernet (%s)"
-#~ msgid "Wireless Ethernet (%s)"
-#~ msgstr "Trådlöst Ethernet (%s)"
-#~ msgid ""
-#~ "Copyright © 2004-2006 Red Hat, Inc.\n"
-#~ "Copyright © 2005-2006 Novell, Inc."
-#~ msgstr ""
-#~ "Copyright © 2004-2006 Red Hat, Inc.\n"
-#~ "Copyright © 2005-2006 Novell, Inc."
-#~ msgid ""
-#~ "Notification area applet for managing your network devices and "
-#~ "connections."
-#~ msgstr ""
-#~ "Panelprogram i notifieringsytan för hantering av dina nätverksenheter och "
-#~ "nätverksanslutningar."
-#~ msgid "translator-credits"
-#~ msgstr ""
-#~ "Daniel Nylander\n"
-#~ "Christian Rose\n"
-#~ "\n"
-#~ "Skicka synpunkter på översättningen till\n"
-#~ "tp-sv@listor.tp-sv.se"
-#~ msgid ""
-#~ "Copyright © 2004-2005 Red Hat, Inc.\n"
-#~ "Copyright © 2005-2006 Novell, Inc."
-#~ msgstr ""
-#~ "Copyright © 2004-2005 Red Hat, Inc.\n"
-#~ "Copyright © 2005-2006 Novell, Inc."
-#~ msgid "VPN Login Failure"
-#~ msgstr "VPN-inloggningsfel"
-#~ msgid "Could not start the VPN connection '%s' due to a login failure."
-#~ msgstr ""
-#~ "Kunde inte starta VPN-anslutningen \"%s\" på grund av ett inloggningfel."
-#~ msgid "VPN Start Failure"
-#~ msgstr "VPN-startfel"
-#~ msgid ""
-#~ "Could not start the VPN connection '%s' due to a failure launching the "
-#~ "VPN program."
-#~ msgstr ""
-#~ "Kunde inte starta VPN-anslutningen \"%s\" på grund av ett fel vid start "
-#~ "av VPN-programmet."
-#~ msgid "Could not start the VPN connection '%s' due to a connection error."
-#~ msgstr ""
-#~ "Kunde inte starta VPN-anslutningen \"%s\" på grund av ett anslutningsfel."
-#~ msgid "VPN Configuration Error"
-#~ msgstr "VPN-konfigurationsfel"
-#~ msgid "The VPN connection '%s' was not correctly configured."
-#~ msgstr "VPN-anslutningen \"%s\" konfigurerades inte korrekt."
-#~ msgid ""
-#~ "Could not start the VPN connection '%s' because the VPN server did not "
-#~ "return an adequate network configuration."
-#~ msgstr ""
-#~ "Kunde inte starta VPN-anslutningen \"%s\" eftersom VPN-servern inte "
-#~ "returnerade en lämplig nätverkskonfiguration."
-#~ msgid "VPN Login Message"
-#~ msgstr "VPN-inloggningsmeddelande"
-#~ msgid ""
-#~ "The NetworkManager Applet could not find some required resources (the "
-#~ "glade file was not found)."
-#~ msgstr ""
-#~ "Panelprogrammet för nätverkshantering kunde inte hitta en del nödvändiga "
-#~ "resurser (glade-filen hittades inte)."
-#~ msgid "The network device \"%s (%s)\" does not support wireless scanning."
-#~ msgstr "Nätverksenheten \"%s (%s)\" stöder inte trådlös genomsökning."
-#~ msgid "The network device \"%s (%s)\" does not support link detection."
-#~ msgstr "Nätverksenheten \"%s (%s)\" stöder inte länkdetektering."
-#~ msgid "Preparing device %s for the wired network..."
-#~ msgstr "Förbereder enheten %s för det trådbundna nätverket..."
-#~ msgid "Preparing device %s for the wireless network '%s'..."
-#~ msgstr "Förbereder enheten %s för det trådlösa nätverket \"%s\"..."
-#~ msgid "Configuring device %s for the wired network..."
-#~ msgstr "Konfigurerar enheten %s för det trådbundna nätverket..."
-#~ msgid "Attempting to join the wireless network '%s'..."
-#~ msgstr "Försöker ansluta till det trådlösa nätverket \"%s\"..."
-#~ msgid "Waiting for Network Key for the wireless network '%s'..."
-#~ msgstr "Väntar på nätverksnyckel för det trådlösa nätverket \"%s\"..."
-#~ msgid "Requesting a network address from the wired network..."
-#~ msgstr "Begär en nätverksadress från det trådbundna nätverket..."
-#~ msgid "Requesting a network address from the wireless network '%s'..."
-#~ msgstr "Begär en nätverksadress från det trådlösa nätverket \"%s\"..."
-#~ msgid "Finishing connection to the wired network..."
-#~ msgstr "Slutför anslutning till det trådbundna nätverket..."
-#~ msgid "Finishing connection to the wireless network '%s'..."
-#~ msgstr "Slutför anslutning till det trådlösa nätverket \"%s\"..."
-#~ msgid "NetworkManager is not running"
-#~ msgstr "Nätverkshanteraren är inte igång"
-#~ msgid "Networking disabled"
-#~ msgstr "Nätverk inaktiverat"
-#~ msgid "Wired network connection"
-#~ msgstr "Trådbunden nätverksanslutning"
-#~ msgid "Connected to an Ad-Hoc wireless network"
-#~ msgstr "Ansluten till ett trådlöst ad hoc-nätverk"
-#~ msgid "Wireless network connection to '%s' (%d%%)"
-#~ msgstr "Trådlös nätverksanslutning till \"%s\" (%d%%)"
-#~ msgid "_Connect to Other Wireless Network..."
-#~ msgstr "_Anslut till annat trådlöst nätverk..."
-#~ msgid "Create _New Wireless Network..."
-#~ msgstr "Skapa _nytt trådlöst nätverk..."
-#~ msgid "_Configure VPN..."
-#~ msgstr "_Konfigurera VPN..."
-#~ msgid "_Dial Up Connections"
-#~ msgstr "_Uppringda anslutningar"
-#~ msgid "Connect to %s..."
-#~ msgstr "Anslut till %s..."
-#~ msgid "Disconnect from %s..."
-#~ msgstr "Koppla från %s..."
-#~ msgid "No network devices have been found"
-#~ msgstr "Inga nätverksenheter har hittats"
-#~ msgid "NetworkManager is not running..."
-#~ msgstr "Nätverkshanteraren är inte igång..."
-#~ msgid "Enable _Networking"
-#~ msgstr "Aktivera _nätverk"
-#~ msgid "Enable _Wireless"
-#~ msgstr "Aktivera _trådlöst"
-#~ msgid "_Help"
-#~ msgstr "_Hjälp"
-#~ msgid "_About"
-#~ msgstr "_Om"
-#~ msgid ""
-#~ "The NetworkManager applet could not find some required resources. It "
-#~ "cannot continue.\n"
-#~ msgstr ""
-#~ "Panelprogrammet för nätverkshantering kunde inte hitta en del nödvändiga "
-#~ "resurser. Det kan inte fortsätta.\n"
-#~ msgid "Shared Key"
-#~ msgstr "Delad nyckel"
-#~ msgid "Automatic (Default)"
-#~ msgstr "Automatiskt (standard)"
-#~ msgid "AES-CCMP"
-#~ msgstr "AES-CCMP"
-#~ msgid "TKIP"
-#~ msgstr "TKIP"
-#~ msgid "Dynamic WEP"
-#~ msgstr "Dynamisk WEP"
-#~ msgid "WEP 64/128-bit ASCII"
-#~ msgstr "WEP 64/128-bitars ASCII"
-#~ msgid "WEP 64/128-bit Hex"
-#~ msgstr "WEP 64/128-bitars hexadecimal"
-#~ msgid "WEP 128-bit Passphrase"
-#~ msgstr "WEP 128-bitars lösenfras"
-#~ msgid "PEAP"
-#~ msgstr "PEAP"
-#~ msgid "TLS"
-#~ msgstr "TLS"
-#~ msgid "TTLS"
-#~ msgstr "TTLS"
+#~ msgid "Type"
+#~ msgstr "Typ"
+#~ msgid "Name"
+#~ msgstr "Namn"
diff --git a/po/ta.po b/po/ta.po
new file mode 100644
index 0000000000..8ab5caeb63
--- /dev/null
+++ b/po/ta.po
@@ -0,0 +1,1806 @@
+# translation of NetworkManager.po.master.ta.po to Tamil
+# Tamil translation for NetworkManager.
+# Copyright (C) 2009 NetworkManager's COPYRIGHT HOLDER
+# This file is distributed under the same license as the NetworkManager package.
+#
+# Felix I <ifelix25@gmail.com>, 2009.
+# I. Felix <ifelix@redhat.com>, 2009, 2010.
+# I Felix <ifelix@redhat.com>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: NetworkManager.po.master.ta\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-05-06 14:31+0530\n"
+"PO-Revision-Date: 2010-05-10 13:26+0530\n"
+"Last-Translator: I Felix <ifelix@redhat.com>\n"
+"Language-Team: Tamil <kde-i18n-doc@kde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.0\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\\n"
+"\n"
+
+#: ../cli/src/connections.c:59 ../cli/src/connections.c:74
+#: ../cli/src/devices.c:85 ../cli/src/devices.c:98 ../cli/src/devices.c:108
+#: ../cli/src/devices.c:118 ../cli/src/devices.c:131 ../cli/src/devices.c:142
+#: ../cli/src/devices.c:152
+msgid "NAME"
+msgstr "NAME"
+
+#. 0
+#: ../cli/src/connections.c:60 ../cli/src/connections.c:75
+msgid "UUID"
+msgstr "UUID"
+
+#. 1
+#: ../cli/src/connections.c:61
+msgid "DEVICES"
+msgstr "DEVICES"
+
+#. 2
+#: ../cli/src/connections.c:62 ../cli/src/connections.c:77
+msgid "SCOPE"
+msgstr "SCOPE"
+
+#. 3
+#: ../cli/src/connections.c:63
+msgid "DEFAULT"
+msgstr "DEFAULT"
+
+#. 4
+#: ../cli/src/connections.c:64
+msgid "DBUS-SERVICE"
+msgstr "DBUS-SERVICE"
+
+#. 5
+#: ../cli/src/connections.c:65
+msgid "SPEC-OBJECT"
+msgstr "SPEC-OBJECT"
+
+#. 6
+#: ../cli/src/connections.c:66
+msgid "VPN"
+msgstr "VPN"
+
+#. 1
+#. 0
+#. 1
+#: ../cli/src/connections.c:76 ../cli/src/devices.c:61 ../cli/src/devices.c:87
+msgid "TYPE"
+msgstr "TYPE"
+
+#. 3
+#: ../cli/src/connections.c:78
+msgid "TIMESTAMP"
+msgstr "TIMESTAMP"
+
+#. 4
+#: ../cli/src/connections.c:79
+msgid "TIMESTAMP-REAL"
+msgstr "TIMESTAMP-REAL"
+
+#. 5
+#: ../cli/src/connections.c:80
+msgid "AUTOCONNECT"
+msgstr "AUTOCONNECT"
+
+#. 6
+#: ../cli/src/connections.c:81
+msgid "READONLY"
+msgstr "READONLY"
+
+#: ../cli/src/connections.c:157
+#, c-format
+msgid ""
+"Usage: nmcli con { COMMAND | help }\n"
+" COMMAND := { list | status | up | down }\n"
+"\n"
+" list [id <id> | uuid <id> | system | user]\n"
+" status\n"
+" up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout "
+"<timeout>]\n"
+" down id <id> | uuid <id>\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli con { COMMAND | help }\n"
+" COMMAND := { list | status | up | down }\n"
+"\n"
+" list [id <id> | uuid <id> | system | user]\n"
+" status\n"
+" up id <id> | uuid <id> [iface <iface>] [ap <hwaddr>] [--nowait] [--timeout "
+"<timeout>]\n"
+" down id <id> | uuid <id>\n"
+
+#: ../cli/src/connections.c:197 ../cli/src/connections.c:536
+#, c-format
+msgid "Error: 'con list': %s"
+msgstr "பிழை: 'con list': %s"
+
+#: ../cli/src/connections.c:199 ../cli/src/connections.c:538
+#, c-format
+msgid "Error: 'con list': %s; allowed fields: %s"
+msgstr "Error: 'con list': %s; அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ பà¯à®²à®™à¯à®•à®³à¯: %s"
+
+#: ../cli/src/connections.c:207
+msgid "Connection details"
+msgstr "இணைபà¯à®ªà¯ விவரஙà¯à®•à®³à¯"
+
+#: ../cli/src/connections.c:381 ../cli/src/connections.c:601
+msgid "system"
+msgstr "கணினி"
+
+#: ../cli/src/connections.c:381 ../cli/src/connections.c:601
+msgid "user"
+msgstr "பயனரà¯"
+
+#: ../cli/src/connections.c:383
+msgid "never"
+msgstr "à®’à®°à¯à®ªà¯‹à®¤à¯à®®à¯ இலà¯à®²à¯ˆ"
+
+#. "CAPABILITIES"
+#. Print header
+#. "WIFI-PROPERTIES"
+#: ../cli/src/connections.c:384 ../cli/src/connections.c:385
+#: ../cli/src/connections.c:602 ../cli/src/connections.c:605
+#: ../cli/src/devices.c:388 ../cli/src/devices.c:513 ../cli/src/devices.c:539
+#: ../cli/src/devices.c:540 ../cli/src/devices.c:541 ../cli/src/devices.c:542
+#: ../cli/src/devices.c:543 ../cli/src/settings.c:504
+#: ../cli/src/settings.c:544 ../cli/src/settings.c:643
+#: ../cli/src/settings.c:912 ../cli/src/settings.c:913
+#: ../cli/src/settings.c:915 ../cli/src/settings.c:917
+#: ../cli/src/settings.c:1042 ../cli/src/settings.c:1043
+#: ../cli/src/settings.c:1044 ../cli/src/settings.c:1123
+#: ../cli/src/settings.c:1124 ../cli/src/settings.c:1125
+#: ../cli/src/settings.c:1126 ../cli/src/settings.c:1127
+#: ../cli/src/settings.c:1128 ../cli/src/settings.c:1129
+#: ../cli/src/settings.c:1130 ../cli/src/settings.c:1131
+#: ../cli/src/settings.c:1132 ../cli/src/settings.c:1133
+#: ../cli/src/settings.c:1134 ../cli/src/settings.c:1135
+#: ../cli/src/settings.c:1210
+msgid "yes"
+msgstr "ஆமà¯"
+
+#: ../cli/src/connections.c:384 ../cli/src/connections.c:385
+#: ../cli/src/connections.c:602 ../cli/src/connections.c:605
+#: ../cli/src/devices.c:388 ../cli/src/devices.c:513 ../cli/src/devices.c:539
+#: ../cli/src/devices.c:540 ../cli/src/devices.c:541 ../cli/src/devices.c:542
+#: ../cli/src/devices.c:543 ../cli/src/settings.c:504
+#: ../cli/src/settings.c:506 ../cli/src/settings.c:544
+#: ../cli/src/settings.c:643 ../cli/src/settings.c:912
+#: ../cli/src/settings.c:913 ../cli/src/settings.c:915
+#: ../cli/src/settings.c:917 ../cli/src/settings.c:1042
+#: ../cli/src/settings.c:1043 ../cli/src/settings.c:1044
+#: ../cli/src/settings.c:1123 ../cli/src/settings.c:1124
+#: ../cli/src/settings.c:1125 ../cli/src/settings.c:1126
+#: ../cli/src/settings.c:1127 ../cli/src/settings.c:1128
+#: ../cli/src/settings.c:1129 ../cli/src/settings.c:1130
+#: ../cli/src/settings.c:1131 ../cli/src/settings.c:1132
+#: ../cli/src/settings.c:1133 ../cli/src/settings.c:1134
+#: ../cli/src/settings.c:1135 ../cli/src/settings.c:1210
+msgid "no"
+msgstr "இலà¯à®²à¯ˆ"
+
+#: ../cli/src/connections.c:457 ../cli/src/connections.c:500
+msgid "System connections"
+msgstr "கணினி இணைபà¯à®ªà¯à®•à®³à¯"
+
+#: ../cli/src/connections.c:462 ../cli/src/connections.c:513
+msgid "User connections"
+msgstr "பயனர௠இணைபà¯à®ªà¯à®•à®³à¯"
+
+#: ../cli/src/connections.c:474 ../cli/src/connections.c:1334
+#: ../cli/src/connections.c:1350 ../cli/src/connections.c:1359
+#: ../cli/src/connections.c:1370 ../cli/src/connections.c:1452
+#: ../cli/src/devices.c:864 ../cli/src/devices.c:874 ../cli/src/devices.c:973
+#: ../cli/src/devices.c:980
+#, c-format
+msgid "Error: %s argument is missing."
+msgstr "பிழை: %s விவாதம௠விடà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯."
+
+#: ../cli/src/connections.c:487
+#, c-format
+msgid "Error: %s - no such connection."
+msgstr "பிழை: %s - அத௠போனà¯à®± இணைபà¯à®ªà¯ இலà¯à®²à¯ˆ."
+
+#: ../cli/src/connections.c:519 ../cli/src/connections.c:1383
+#: ../cli/src/connections.c:1470 ../cli/src/devices.c:687
+#: ../cli/src/devices.c:754 ../cli/src/devices.c:888 ../cli/src/devices.c:986
+#, c-format
+msgid "Unknown parameter: %s\n"
+msgstr "தெரியாத அளவà¯à®°à¯: %s\n"
+
+#: ../cli/src/connections.c:528
+#, c-format
+msgid "Error: no valid parameter specified."
+msgstr "பிழை: கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿà¯à®Ÿ சரியான அளவà¯à®°à¯ இலà¯à®²à¯ˆ."
+
+#: ../cli/src/connections.c:543 ../cli/src/connections.c:1572
+#: ../cli/src/devices.c:1192 ../cli/src/network-manager.c:274
+#, c-format
+msgid "Error: %s."
+msgstr "பிழை: %s."
+
+#: ../cli/src/connections.c:649
+#, c-format
+msgid "Error: 'con status': %s"
+msgstr "பிழை: 'con status': %s"
+
+#: ../cli/src/connections.c:651
+#, c-format
+msgid "Error: 'con status': %s; allowed fields: %s"
+msgstr "பிழை: 'con status': %s; அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ பà¯à®²à®™à¯à®•à®³à¯: %s"
+
+#: ../cli/src/connections.c:658
+msgid "Active connections"
+msgstr "இணைபà¯à®ªà¯à®•à®³à¯ˆ செயறà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯"
+
+#: ../cli/src/connections.c:1026
+#, c-format
+msgid "no active connection on device '%s'"
+msgstr "சாதனம௠'%s' இல௠செயலà¯à®ªà®Ÿà¯à®®à¯ இணைபà¯à®ªà¯ இலà¯à®²à¯ˆ"
+
+#: ../cli/src/connections.c:1034
+#, c-format
+msgid "no active connection or device"
+msgstr "செயலà¯à®ªà®Ÿà¯à®®à¯ இணைபà¯à®ªà¯ அலà¯à®²à®¤à¯ சாதனம௠இலà¯à®²à¯ˆ"
+
+#: ../cli/src/connections.c:1084
+#, c-format
+msgid "device '%s' not compatible with connection '%s'"
+msgstr "சாதனம௠'%s' இணைபà¯à®ªà¯ '%s' உடன௠உகநà¯à®¤à®¤à¯ அலà¯à®²"
+
+#: ../cli/src/connections.c:1086
+#, c-format
+msgid "no device found for connection '%s'"
+msgstr "இணைபà¯à®ªà¯ '%s'கà¯à®•à¯ சாதனம௠எதà¯à®µà¯à®®à¯ இலà¯à®²à¯ˆ"
+
+#: ../cli/src/connections.c:1097
+msgid "activating"
+msgstr "செயலà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
+
+#: ../cli/src/connections.c:1099
+msgid "activated"
+msgstr "செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
+
+#: ../cli/src/connections.c:1102 ../cli/src/connections.c:1125
+#: ../cli/src/connections.c:1158 ../cli/src/devices.c:224
+#: ../cli/src/devices.c:514 ../cli/src/network-manager.c:92
+#: ../cli/src/network-manager.c:145 ../cli/src/settings.c:469
+msgid "unknown"
+msgstr "தெரியாத"
+
+#: ../cli/src/connections.c:1111
+msgid "VPN connecting (prepare)"
+msgstr "VPN இணைகà¯à®•à®¿à®±à®¤à¯ (தயாராகà¯)"
+
+#: ../cli/src/connections.c:1113
+msgid "VPN connecting (need authentication)"
+msgstr "VPN இணைகà¯à®•à®¿à®±à®¤à¯ (à®…à®™à¯à®•à¯€à®•à®¾à®°à®®à¯ தேவை)"
+
+#: ../cli/src/connections.c:1115
+msgid "VPN connecting"
+msgstr "VPN இணைகà¯à®•à®¿à®±à®¤à¯"
+
+#: ../cli/src/connections.c:1117
+msgid "VPN connecting (getting IP configuration)"
+msgstr "VPN இணைகà¯à®•à®¿à®±à®¤à¯ (IP கடà¯à®Ÿà®®à¯ˆà®ªà¯à®ªà¯ˆ பெறà¯à®•à®¿à®±à®¤à¯)"
+
+#: ../cli/src/connections.c:1119
+msgid "VPN connected"
+msgstr "VPN இணைகà¯à®•à®¿à®±à®¤à¯"
+
+#: ../cli/src/connections.c:1121
+msgid "VPN connection failed"
+msgstr "VPN ஠இணைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ"
+
+#: ../cli/src/connections.c:1123
+msgid "VPN disconnected"
+msgstr "VPN தà¯à®£à¯à®Ÿà®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
+
+#: ../cli/src/connections.c:1134
+msgid "unknown reason"
+msgstr "தெரியாத காரணமà¯"
+
+#: ../cli/src/connections.c:1136
+msgid "none"
+msgstr "ஒனà¯à®±à¯à®®à®¿à®²à¯à®²à®¾à®¤"
+
+#: ../cli/src/connections.c:1138
+msgid "the user was disconnected"
+msgstr "பயனர௠செயலà¯à®¨à¯€à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¾à®°à¯"
+
+#: ../cli/src/connections.c:1140
+msgid "the base network connection was interrupted"
+msgstr "தளப௠பிணைய இணைபà¯à®ªà®¾à®©à®¤à¯ தடை செயà¯à®¯à®ªà¯à®ªà®Ÿà¯à®Ÿà®¿à®°à¯à®¨à¯à®¤à®¤à¯"
+
+#: ../cli/src/connections.c:1142
+msgid "the VPN service stopped unexpectedly"
+msgstr "எதிரà¯à®ªà®¾à®°à®¾à®®à®²à¯ VPN சேவை நிறà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
+
+#: ../cli/src/connections.c:1144
+msgid "the VPN service returned invalid configuration"
+msgstr "VPN சேவையானத௠தவறான கடà¯à®Ÿà®®à¯ˆà®ªà¯à®ªà®¿à®±à¯à®•à¯ திரà¯à®®à¯à®ªà®¿à®¯à®¤à¯"
+
+#: ../cli/src/connections.c:1146
+msgid "the connection attempt timed out"
+msgstr "இணைபà¯à®ªà¯ à®®à¯à®¯à®±à¯à®šà®¿à®¯à®¿à®©à¯ நேரம௠மà¯à®Ÿà®¿à®¨à¯à®¤à®¤à¯"
+
+#: ../cli/src/connections.c:1148
+msgid "the VPN service did not start in time"
+msgstr "VPN சேவை நேரதà¯à®¤à®¿à®±à¯à®•à¯ தà¯à®µà®™à¯à®•à®µà®¿à®²à¯à®²à¯ˆ"
+
+#: ../cli/src/connections.c:1150
+msgid "the VPN service failed to start"
+msgstr "VPN சேவையை தà¯à®µà®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ"
+
+#: ../cli/src/connections.c:1152
+msgid "no valid VPN secrets"
+msgstr "சரியான VPN இரகசியஙà¯à®•à®³à¯ இலà¯à®²à¯ˆ"
+
+#: ../cli/src/connections.c:1154
+msgid "invalid VPN secrets"
+msgstr "தவறான VPN இரகசியஙà¯à®•à®³à¯"
+
+#: ../cli/src/connections.c:1156
+msgid "the connection was removed"
+msgstr "இணைபà¯à®ªà®¾à®©à®¤à¯ நீகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
+
+#: ../cli/src/connections.c:1170
+#, c-format
+msgid "state: %s\n"
+msgstr "நிலை: %s\n"
+
+#: ../cli/src/connections.c:1173 ../cli/src/connections.c:1199
+#, c-format
+msgid "Connection activated\n"
+msgstr "இணைபà¯à®ªà¯ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯\n"
+
+#: ../cli/src/connections.c:1176
+#, c-format
+msgid "Error: Connection activation failed."
+msgstr "பிழை: இணைபà¯à®ªà¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../cli/src/connections.c:1195
+#, c-format
+msgid "state: %s (%d)\n"
+msgstr "நிலை: %s (%d)\n"
+
+#: ../cli/src/connections.c:1205
+#, c-format
+msgid "Error: Connection activation failed: %s."
+msgstr "பிழை: இணைபà¯à®ªà¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s."
+
+#: ../cli/src/connections.c:1222 ../cli/src/devices.c:811
+#, c-format
+msgid "Error: Timeout %d sec expired."
+msgstr "பிழை: நேரமà¯à®Ÿà®¿à®¨à¯à®¤ %d விநாடி காலாவதியானதà¯."
+
+#: ../cli/src/connections.c:1265
+#, c-format
+msgid "Error: Connection activation failed: %s"
+msgstr "பிழை: இணைபà¯à®ªà¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ:%s"
+
+#: ../cli/src/connections.c:1279
+#, c-format
+msgid "Error: Obtaining active connection for '%s' failed."
+msgstr "Error: Obtaining active connection for '%s' failed."
+
+#: ../cli/src/connections.c:1288
+#, c-format
+msgid "Active connection state: %s\n"
+msgstr "செயலà¯à®ªà®Ÿà¯à®®à¯ இணைபà¯à®ªà®¿à®©à¯ நிலை: %s\n"
+
+#: ../cli/src/connections.c:1289
+#, c-format
+msgid "Active connection path: %s\n"
+msgstr "செயலà¯à®ªà®Ÿà¯à®®à¯ இணைபà¯à®ªà®¿à®©à¯ பாதை: %s\n"
+
+#: ../cli/src/connections.c:1343 ../cli/src/connections.c:1461
+#, c-format
+msgid "Error: Unknown connection: %s."
+msgstr "பிழை: தெரியாத பிழை: %s."
+
+#: ../cli/src/connections.c:1378 ../cli/src/devices.c:882
+#, c-format
+msgid "Error: timeout value '%s' is not valid."
+msgstr "பிழை: நேரமà¯à®Ÿà®¿à®µà¯ மதிபà¯à®ªà¯ '%s' சரியானதலà¯à®²."
+
+#: ../cli/src/connections.c:1391 ../cli/src/connections.c:1478
+#, c-format
+msgid "Error: id or uuid has to be specified."
+msgstr "பிழை: id அலà¯à®²à®¤à¯ uuid கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿ வேணà¯à®Ÿà¯à®®à¯."
+
+#: ../cli/src/connections.c:1411
+#, c-format
+msgid "Error: No suitable device found: %s."
+msgstr "பிழை: தகà¯à®¤à®¿à®¯à®¾à®© சாதனம௠காணபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ: %s."
+
+#: ../cli/src/connections.c:1413
+#, c-format
+msgid "Error: No suitable device found."
+msgstr "பிழை: தகà¯à®¤à®¿à®¯à®¾à®© சாதனம௠காணபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../cli/src/connections.c:1505
+#, c-format
+msgid "Warning: Connection not active\n"
+msgstr "எசà¯à®šà®°à®¿à®•à¯à®•à¯ˆ: இணைபà¯à®ªà¯ செயலà¯à®ªà®¾à®Ÿà¯à®Ÿà®¿à®²à¯ இலà¯à®²à¯ˆ\n"
+
+#: ../cli/src/connections.c:1561
+#, c-format
+msgid "Error: 'con' command '%s' is not valid."
+msgstr "பிழை: 'con' கடà¯à®Ÿà®³à¯ˆ '%s' சரியானதலà¯à®²."
+
+#: ../cli/src/connections.c:1597
+#, c-format
+msgid "Error: could not connect to D-Bus."
+msgstr "பிழை: D-பஸà¯à®¸à¯ˆ இணைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../cli/src/connections.c:1604
+#, c-format
+msgid "Error: Could not get system settings."
+msgstr "பிழை: கணினி அமைவà¯à®•à®³à¯ˆ பெற à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../cli/src/connections.c:1612
+#, c-format
+msgid "Error: Could not get user settings."
+msgstr "பிழை: பயனர௠அமைவà¯à®•à®³à¯ˆ பெற à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../cli/src/connections.c:1622
+#, c-format
+msgid "Error: Can't obtain connections: settings services are not running."
+msgstr "பிழை: இணைபà¯à®ªà¯ˆ பெற à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: அமைவà¯à®•à®³à®¿à®©à¯ சேவைகள௠இயஙà¯à®•à®µà®¿à®²à¯à®²à¯ˆ."
+
+#. 0
+#. 9
+#: ../cli/src/devices.c:60 ../cli/src/devices.c:86 ../cli/src/devices.c:162
+msgid "DEVICE"
+msgstr "DEVICE"
+
+#. 1
+#. 4
+#. 0
+#: ../cli/src/devices.c:62 ../cli/src/devices.c:90
+#: ../cli/src/network-manager.c:36
+msgid "STATE"
+msgstr "STATE"
+
+#: ../cli/src/devices.c:71
+msgid "GENERAL"
+msgstr "GENERAL"
+
+#. 0
+#: ../cli/src/devices.c:72
+msgid "CAPABILITIES"
+msgstr "CAPABILITIES"
+
+#. 1
+#: ../cli/src/devices.c:73
+msgid "WIFI-PROPERTIES"
+msgstr "WIFI-PROPERTIES"
+
+#. 2
+#: ../cli/src/devices.c:74
+msgid "AP"
+msgstr "AP"
+
+#. 3
+#: ../cli/src/devices.c:75
+msgid "WIRED-PROPERTIES"
+msgstr "WIRED-PROPERTIES"
+
+#. 4
+#: ../cli/src/devices.c:76
+msgid "IP4-SETTINGS"
+msgstr "IP4-SETTINGS"
+
+#. 5
+#: ../cli/src/devices.c:77
+msgid "IP4-DNS"
+msgstr "IP4-DNS"
+
+#. 2
+#: ../cli/src/devices.c:88
+msgid "DRIVER"
+msgstr "DRIVER"
+
+#. 3
+#: ../cli/src/devices.c:89
+msgid "HWADDR"
+msgstr "HWADDR"
+
+#. 0
+#: ../cli/src/devices.c:99
+msgid "CARRIER-DETECT"
+msgstr "CARRIER-DETECT"
+
+#. 1
+#: ../cli/src/devices.c:100
+msgid "SPEED"
+msgstr "SPEED"
+
+#. 0
+#: ../cli/src/devices.c:109
+msgid "CARRIER"
+msgstr "CARRIER"
+
+#. 0
+#: ../cli/src/devices.c:119
+msgid "WEP"
+msgstr "WEP"
+
+#. 1
+#: ../cli/src/devices.c:120
+msgid "WPA"
+msgstr "WPA"
+
+#. 2
+#: ../cli/src/devices.c:121
+msgid "WPA2"
+msgstr "WPA2"
+
+#. 3
+#: ../cli/src/devices.c:122
+msgid "TKIP"
+msgstr "TKIP"
+
+#. 4
+#: ../cli/src/devices.c:123
+msgid "CCMP"
+msgstr "CCMP"
+
+#. 0
+#: ../cli/src/devices.c:132
+msgid "ADDRESS"
+msgstr "ADDRESS"
+
+#. 1
+#: ../cli/src/devices.c:133
+msgid "PREFIX"
+msgstr "PREFIX"
+
+#. 2
+#: ../cli/src/devices.c:134
+msgid "GATEWAY"
+msgstr "GATEWAY"
+
+#. 0
+#: ../cli/src/devices.c:143
+msgid "DNS"
+msgstr "DNS"
+
+#. 0
+#: ../cli/src/devices.c:153
+msgid "SSID"
+msgstr "SSID"
+
+#. 1
+#: ../cli/src/devices.c:154
+msgid "BSSID"
+msgstr "BSSID"
+
+#. 2
+#: ../cli/src/devices.c:155
+msgid "MODE"
+msgstr "MODE"
+
+#. 3
+#: ../cli/src/devices.c:156
+msgid "FREQ"
+msgstr "FREQ"
+
+#. 4
+#: ../cli/src/devices.c:157
+msgid "RATE"
+msgstr "RATE"
+
+#. 5
+#: ../cli/src/devices.c:158
+msgid "SIGNAL"
+msgstr "SIGNAL"
+
+#. 6
+#: ../cli/src/devices.c:159
+msgid "SECURITY"
+msgstr "SECURITY"
+
+#. 7
+#: ../cli/src/devices.c:160
+msgid "WPA-FLAGS"
+msgstr "WPA-FLAGS"
+
+#. 8
+#: ../cli/src/devices.c:161
+msgid "RSN-FLAGS"
+msgstr "RSN-FLAGS"
+
+#. 10
+#: ../cli/src/devices.c:163
+msgid "ACTIVE"
+msgstr "ACTIVE"
+
+#: ../cli/src/devices.c:186
+#, c-format
+msgid ""
+"Usage: nmcli dev { COMMAND | help }\n"
+"\n"
+" COMMAND := { status | list | disconnect | wifi }\n"
+"\n"
+" status\n"
+" list [iface <iface>]\n"
+" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
+" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+"\n"
+msgstr ""
+"Usage: nmcli dev { COMMAND | help }\n"
+"\n"
+" COMMAND := { status | list | disconnect | wifi }\n"
+"\n"
+" status\n"
+" list [iface <iface>]\n"
+" disconnect iface <iface> [--nowait] [--timeout <timeout>]\n"
+" wifi [list [iface <iface>] [hwaddr <hwaddr>]]\n"
+"\n"
+
+#: ../cli/src/devices.c:206
+msgid "unmanaged"
+msgstr "பராமரிகà¯à®•à®ªà¯à®ªà®Ÿà®¾à®¤"
+
+#: ../cli/src/devices.c:208
+msgid "unavailable"
+msgstr "கிடைகà¯à®•à®ªà¯à®ªà¯†à®±à®¾à®¤"
+
+#: ../cli/src/devices.c:210 ../cli/src/network-manager.c:89
+msgid "disconnected"
+msgstr "தà¯à®£à¯à®Ÿà®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
+
+#: ../cli/src/devices.c:212
+msgid "connecting (prepare)"
+msgstr "இணைகà¯à®•à®¿à®±à®¤à¯ (தயாராகà¯à®•à¯)"
+
+#: ../cli/src/devices.c:214
+msgid "connecting (configuring)"
+msgstr "இணைகà¯à®•à®¿à®±à®¤à¯ (கடà¯à®Ÿà®®à¯ˆà®•à¯à®•à®¿à®±à®¤à¯)"
+
+#: ../cli/src/devices.c:216
+msgid "connecting (need authentication)"
+msgstr "இணைகà¯à®•à®¿à®±à®¤à¯ (à®…à®™à¯à®•à¯€à®•à®¾à®°à®®à¯ தேவை)"
+
+#: ../cli/src/devices.c:218
+msgid "connecting (getting IP configuration)"
+msgstr "இணைகà¯à®•à®¿à®±à®¤à¯ (IP கடà¯à®Ÿà®®à¯ˆà®ªà¯à®ªà¯ˆ பெறà¯à®•à®¿à®±à®¤à¯)"
+
+#: ../cli/src/devices.c:220 ../cli/src/network-manager.c:87
+msgid "connected"
+msgstr "இணைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
+
+#: ../cli/src/devices.c:222
+msgid "connection failed"
+msgstr "இணைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ"
+
+#: ../cli/src/devices.c:245 ../cli/src/devices.c:380
+msgid "Unknown"
+msgstr "தெரியாத"
+
+#: ../cli/src/devices.c:277
+msgid "(none)"
+msgstr "(ஒனà¯à®±à¯à®®à®¿à®²à¯à®²à®¾à®¤)"
+
+#: ../cli/src/devices.c:302
+#, c-format
+msgid "%s: error converting IP4 address 0x%X"
+msgstr "%s: IP4 à®®à¯à®•à®µà®°à®¿ 0x%X ஠மாறà¯à®±à¯à®µà®¤à®¿à®²à¯ பிழை"
+
+#: ../cli/src/devices.c:349
+#, c-format
+msgid "%u MHz"
+msgstr "%u MHz"
+
+#: ../cli/src/devices.c:350
+#, c-format
+msgid "%u MB/s"
+msgstr "%u MB/s"
+
+#: ../cli/src/devices.c:359
+msgid "Encrypted: "
+msgstr "மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯: "
+
+#: ../cli/src/devices.c:364
+msgid "WEP "
+msgstr "WEP "
+
+#: ../cli/src/devices.c:366
+msgid "WPA "
+msgstr "WPA "
+
+#: ../cli/src/devices.c:368
+msgid "WPA2 "
+msgstr "WPA2 "
+
+#: ../cli/src/devices.c:371
+msgid "Enterprise "
+msgstr "எனà¯à®Ÿà®°à¯à®ªà®¿à®°à¯ˆà®šà®¸à¯"
+
+#: ../cli/src/devices.c:380
+msgid "Ad-Hoc"
+msgstr "Ad-Hoc"
+
+#: ../cli/src/devices.c:380
+msgid "Infrastructure"
+msgstr "அடிதà¯à®¤à®³à®®à¯"
+
+#: ../cli/src/devices.c:442
+#, c-format
+msgid "Error: 'dev list': %s"
+msgstr "பிழை: 'dev list': %s"
+
+#: ../cli/src/devices.c:444
+#, c-format
+msgid "Error: 'dev list': %s; allowed fields: %s"
+msgstr "பிழை: 'dev list': %s; அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ பà¯à®²à®™à¯à®•à®³à¯: %s"
+
+#: ../cli/src/devices.c:453
+msgid "Device details"
+msgstr "சாதன விவரஙà¯à®•à®³à¯"
+
+#: ../cli/src/devices.c:483 ../cli/src/devices.c:827
+msgid "(unknown)"
+msgstr "(தெரியாத)"
+
+#: ../cli/src/devices.c:484
+msgid "unknown)"
+msgstr "தெரியாத)"
+
+#: ../cli/src/devices.c:510
+#, c-format
+msgid "%u Mb/s"
+msgstr "%u Mb/s"
+
+#. Print header
+#. "WIRED-PROPERTIES"
+#: ../cli/src/devices.c:583
+msgid "on"
+msgstr "ஆன௠"
+
+#: ../cli/src/devices.c:583
+msgid "off"
+msgstr "ஆஃபà¯"
+
+#: ../cli/src/devices.c:710
+#, c-format
+msgid "Error: 'dev status': %s"
+msgstr "பிழை: 'dev status': %s"
+
+#: ../cli/src/devices.c:712
+#, c-format
+msgid "Error: 'dev status': %s; allowed fields: %s"
+msgstr "பிழை: 'dev status': %s; அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ பà¯à®²à®™à¯à®•à®³à¯: %s"
+
+#: ../cli/src/devices.c:719
+msgid "Status of devices"
+msgstr "சாதனஙà¯à®•à®³à®¿à®©à¯ நிலை"
+
+#: ../cli/src/devices.c:747
+#, c-format
+msgid "Error: '%s' argument is missing."
+msgstr "பிழை: '%s' விவாதம௠விடà¯à®ªà®Ÿà¯à®Ÿà®¤à¯."
+
+#: ../cli/src/devices.c:776 ../cli/src/devices.c:915 ../cli/src/devices.c:1035
+#, c-format
+msgid "Error: Device '%s' not found."
+msgstr "பிழை: சாதனம௠'%s' காணபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../cli/src/devices.c:799
+#, c-format
+msgid "Success: Device '%s' successfully disconnected."
+msgstr "வெறà¯à®±à®¿: சாதனம௠'%s' வெறà¯à®±à®¿à®•à®°à®®à®¾à®• தà¯à®£à¯à®Ÿà®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯."
+
+#: ../cli/src/devices.c:824
+#, c-format
+msgid "Error: Device '%s' (%s) disconnecting failed: %s"
+msgstr "பிழை: சாதனம௠'%s' (%s) தà¯à®£à¯à®Ÿà®¿à®•à¯à®•à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ: %s"
+
+#: ../cli/src/devices.c:832
+#, c-format
+msgid "Device state: %d (%s)\n"
+msgstr "சாதன நிலை: %d (%s)\n"
+
+#: ../cli/src/devices.c:896
+#, c-format
+msgid "Error: iface has to be specified."
+msgstr "பிழை: iபேஸ௠கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿ வேணà¯à®Ÿà¯à®®à¯."
+
+#: ../cli/src/devices.c:1011
+#, c-format
+msgid "Error: 'dev wifi': %s"
+msgstr "பிழை: 'dev wifi': '%s'"
+
+#: ../cli/src/devices.c:1013
+#, c-format
+msgid "Error: 'dev wifi': %s; allowed fields: %s"
+msgstr "பிழை: 'dev wifi': %s; அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ பà¯à®²à®™à¯à®•à®³à¯: %s"
+
+#: ../cli/src/devices.c:1020
+msgid "WiFi scan list"
+msgstr "WiFi ஸà¯à®•à¯‡à®©à¯ படà¯à®Ÿà®¿à®¯à®²à¯"
+
+#: ../cli/src/devices.c:1055 ../cli/src/devices.c:1109
+#, c-format
+msgid "Error: Access point with hwaddr '%s' not found."
+msgstr "பிழை:hwaddr '%s' உடன௠அணà¯à®•à®²à¯ பà¯à®³à¯à®³à®¿ காணபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../cli/src/devices.c:1072
+#, c-format
+msgid "Error: Device '%s' is not a WiFi device."
+msgstr "பிழை: சாதனம௠'%s' ஒர௠WiFi சாதனம௠இலà¯à®²à¯ˆ."
+
+#: ../cli/src/devices.c:1136
+#, c-format
+msgid "Error: 'dev wifi' command '%s' is not valid."
+msgstr "பிழை: 'dev wifi' கடà¯à®Ÿà®³à¯ˆ '%s' ஆனத௠தவறானதà¯."
+
+#: ../cli/src/devices.c:1183
+#, c-format
+msgid "Error: 'dev' command '%s' is not valid."
+msgstr "பிழை: 'dev' கடà¯à®Ÿà®³à¯ˆ '%s' தவறானதà¯."
+
+#: ../cli/src/network-manager.c:35
+msgid "RUNNING"
+msgstr "RUNNING"
+
+#. 1
+#: ../cli/src/network-manager.c:37
+msgid "WIFI-HARDWARE"
+msgstr "WIFI-HARDWARE"
+
+#. 2
+#: ../cli/src/network-manager.c:38
+msgid "WIFI"
+msgstr "WIFI"
+
+#. 3
+#: ../cli/src/network-manager.c:39
+msgid "WWAN-HARDWARE"
+msgstr "WWAN-HARDWARE"
+
+#. 4
+#: ../cli/src/network-manager.c:40
+msgid "WWAN"
+msgstr "WWAN"
+
+#: ../cli/src/network-manager.c:62
+#, 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"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli nm { COMMAND | help }\n"
+"\n"
+" COMMAND := { status | sleep | wakeup | wifi | wwan }\n"
+"\n"
+" நிலை\n"
+" தூகà¯à®•à®®à¯\n"
+" விழிபà¯à®ªà¯\n"
+" wifi [on|off]\n"
+" wwan [on|off]\n"
+"\n"
+
+#: ../cli/src/network-manager.c:83
+msgid "asleep"
+msgstr "தூஙà¯à®•à®¿à®•à¯ கொணà¯à®Ÿà®¿à®°à¯à®¤à¯à®¤à®²à¯"
+
+#: ../cli/src/network-manager.c:85
+msgid "connecting"
+msgstr "இணைகà¯à®•à®¿à®±à®¤à¯"
+
+#: ../cli/src/network-manager.c:125
+#, c-format
+msgid "Error: 'nm status': %s"
+msgstr "பிழை: 'nm status': %s"
+
+#: ../cli/src/network-manager.c:127
+#, c-format
+msgid "Error: 'nm status': %s; allowed fields: %s"
+msgstr "பிழை: 'nm status': %s; அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ பà¯à®²à®™à¯à®•à®³à¯: %s"
+
+#: ../cli/src/network-manager.c:134
+msgid "NetworkManager status"
+msgstr "பிணைய மேலாளர௠நிலை"
+
+#. 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
+msgid "enabled"
+msgstr "செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
+
+#: ../cli/src/network-manager.c:140 ../cli/src/network-manager.c:141
+#: ../cli/src/network-manager.c:142 ../cli/src/network-manager.c:143
+#: ../cli/src/network-manager.c:211 ../cli/src/network-manager.c:243
+msgid "disabled"
+msgstr "செயலà¯à®¨à¯€à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
+
+#: ../cli/src/network-manager.c:148
+msgid "running"
+msgstr "இயஙà¯à®•à¯à®•à®¿à®±à®¤à¯"
+
+#: ../cli/src/network-manager.c:148
+msgid "not running"
+msgstr "இயஙà¯à®•à®µà®¿à®²à¯à®²à¯ˆ"
+
+#: ../cli/src/network-manager.c:201 ../cli/src/network-manager.c:233
+#, c-format
+msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
+msgstr "பிழை: '--fields' மதிபà¯à®ªà¯ '%s' இஙà¯à®•à¯‡ சரியாக இலà¯à®²à¯ˆ; அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ பà¯à®²à®™à¯à®•à®³à¯: %s"
+
+#: ../cli/src/network-manager.c:209
+msgid "WiFi enabled"
+msgstr "WiFi செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
+
+#: ../cli/src/network-manager.c:220
+#, c-format
+msgid "Error: invalid 'wifi' parameter: '%s'."
+msgstr "பிழை: தவறான 'wifi' அளவà¯à®°à¯: '%s'."
+
+#: ../cli/src/network-manager.c:241
+msgid "WWAN enabled"
+msgstr "WWAN செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
+
+#: ../cli/src/network-manager.c:252
+#, c-format
+msgid "Error: invalid 'wwan' parameter: '%s'."
+msgstr "பிழை: தவறான 'wwan' அளவà¯à®°à¯: '%s'."
+
+#: ../cli/src/network-manager.c:263
+#, c-format
+msgid "Error: 'nm' command '%s' is not valid."
+msgstr "Error: 'nm' கடà¯à®Ÿà®³à¯ˆ '%s' தவனாறதà¯."
+
+#: ../cli/src/nmcli.c:69
+#, 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] <field1,field2,...>|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 ""
+"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] <field1,field2,...>|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"
+
+#: ../cli/src/nmcli.c:113
+#, c-format
+msgid "Error: Object '%s' is unknown, try 'nmcli help'."
+msgstr "பிழை: பொரà¯à®³à¯ '%s' ஆனத௠தெரியாததà¯, 'nmcli உதவியை' à®®à¯à®¯à®±à¯à®šà®¿à®•à¯à®•à®µà¯à®®à¯."
+
+#: ../cli/src/nmcli.c:143
+#, c-format
+msgid "Error: Option '--terse' is specified the second time."
+msgstr "பிழை: விரà¯à®ªà¯à®ªà®®à¯ '--terse' இரணà¯à®Ÿà®¾à®µà®¤à¯ à®®à¯à®±à¯ˆ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯."
+
+#: ../cli/src/nmcli.c:148
+#, c-format
+msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
+msgstr "பிழை: விரà¯à®ªà¯à®ªà®®à¯ '--terse'ஆனத௠'--pretty' உடன௠ஒனà¯à®±à®¾à®• உளà¯à®³à®¤à¯."
+
+#: ../cli/src/nmcli.c:156
+#, c-format
+msgid "Error: Option '--pretty' is specified the second time."
+msgstr "பிழை: விரà¯à®ªà¯à®ªà®®à¯ '--pretty' இரணà¯à®Ÿà®¾à®µà®¤à¯ à®®à¯à®±à¯ˆ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®Ÿà®¤à¯."
+
+#: ../cli/src/nmcli.c:161
+#, c-format
+msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
+msgstr "பிழை: விரà¯à®ªà¯à®ªà®®à¯ '--pretty'ஆனத௠'--terse' உடன௠ஒனà¯à®±à®¾à®• உளà¯à®³à®¤à¯"
+
+#: ../cli/src/nmcli.c:171 ../cli/src/nmcli.c:187
+#, c-format
+msgid "Error: missing argument for '%s' option."
+msgstr "பிழை: '%s' விரà¯à®ªà¯à®ªà®¤à¯à®¤à®¿à®±à¯à®•à¯ விவாதம௠விடà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯."
+
+#: ../cli/src/nmcli.c:180 ../cli/src/nmcli.c:196
+#, c-format
+msgid "Error: '%s' is not valid argument for '%s' option."
+msgstr "பிழை: '%s' ஆனத௠'%s' விரà¯à®ªà¯à®ªà®¤à¯à®¤à®¿à®±à¯à®•à¯ சரியான விவாதம௠அலà¯à®²."
+
+#: ../cli/src/nmcli.c:203
+#, c-format
+msgid "Error: fields for '%s' options are missing."
+msgstr "பிழை: '%s' கà¯à®•à¯ பà¯à®²à®™à¯à®•à®³à¯ விடà¯à®ªà®Ÿà¯à®Ÿà®¤à¯."
+
+#: ../cli/src/nmcli.c:209
+#, c-format
+msgid "nmcli tool, version %s\n"
+msgstr "nmcli கரà¯à®µà®¿, பதிபà¯à®ªà¯ %s\n"
+
+#: ../cli/src/nmcli.c:215
+#, c-format
+msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
+msgstr "பிழை: விரà¯à®ªà¯à®ªà®®à¯ '%s'ஆனத௠தெரியாததà¯, 'nmcli -உதவியை' à®®à¯à®¯à®±à¯à®šà®¿à®•à¯à®•à®µà¯à®®à¯."
+
+#: ../cli/src/nmcli.c:234
+#, c-format
+msgid "Caught signal %d, shutting down..."
+msgstr "%d சிகà¯à®©à®²à¯ கிடைதà¯à®¤à¯à®µà®¿à®Ÿà¯à®Ÿà®¤à¯, பணி நிறà¯à®¤à¯à®¤à¯à®•à®¿à®±à®¤à¯..."
+
+#: ../cli/src/nmcli.c:259
+#, c-format
+msgid "Error: Could not connect to NetworkManager."
+msgstr "பிழை: பிணைய மேலாளரை இணைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../cli/src/nmcli.c:275
+msgid "Success"
+msgstr "வெறà¯à®±à®¿"
+
+#: ../cli/src/settings.c:407
+#, c-format
+msgid "%d (hex-ascii-key)"
+msgstr "%d (hex-ascii-key)"
+
+#: ../cli/src/settings.c:409
+#, c-format
+msgid "%d (104/128-bit passphrase)"
+msgstr "%d (104/128-bit கடவà¯à®šà¯à®šà¯Šà®²à¯)"
+
+#: ../cli/src/settings.c:412
+#, c-format
+msgid "%d (unknown)"
+msgstr "%d (தெரியாத)"
+
+#: ../cli/src/settings.c:438
+msgid "0 (unknown)"
+msgstr "0 (தெரியாத)"
+
+#: ../cli/src/settings.c:444
+msgid "any, "
+msgstr "à®à®¤à®¾à®µà®¤à¯,"
+
+#: ../cli/src/settings.c:446
+msgid "900 MHz, "
+msgstr "900 MHz, "
+
+#: ../cli/src/settings.c:448
+msgid "1800 MHz, "
+msgstr "1800 MHz, "
+
+#: ../cli/src/settings.c:450
+msgid "1900 MHz, "
+msgstr "1900 MHz, "
+
+#: ../cli/src/settings.c:452
+msgid "850 MHz, "
+msgstr "850 MHz, "
+
+#: ../cli/src/settings.c:454
+msgid "WCDMA 3GPP UMTS 2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 2100 MHz, "
+
+#: ../cli/src/settings.c:456
+msgid "WCDMA 3GPP UMTS 1800 MHz, "
+msgstr "WCDMA 3GPP UMTS 1800 MHz, "
+
+#: ../cli/src/settings.c:458
+msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
+
+#: ../cli/src/settings.c:460
+msgid "WCDMA 3GPP UMTS 800 MHz, "
+msgstr "WCDMA 3GPP UMTS 800 MHz, "
+
+#: ../cli/src/settings.c:462
+msgid "WCDMA 3GPP UMTS 850 MHz, "
+msgstr "WCDMA 3GPP UMTS 850 MHz, "
+
+#: ../cli/src/settings.c:464
+msgid "WCDMA 3GPP UMTS 900 MHz, "
+msgstr "WCDMA 3GPP UMTS 900 MHz, "
+
+#: ../cli/src/settings.c:466
+msgid "WCDMA 3GPP UMTS 1700 MHz, "
+msgstr "WCDMA 3GPP UMTS 1700 MHz, "
+
+#: ../cli/src/settings.c:546 ../cli/src/settings.c:708
+msgid "auto"
+msgstr "தானே"
+
+#: ../cli/src/settings.c:704 ../cli/src/settings.c:707 ../cli/src/utils.c:172
+msgid "not set"
+msgstr "அமைகà¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ"
+
+#: ../cli/src/utils.c:124
+#, c-format
+msgid "field '%s' has to be alone"
+msgstr "பà¯à®²à®®à¯ '%s' தனியாக இரà¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯"
+
+#: ../cli/src/utils.c:127
+#, c-format
+msgid "invalid field '%s'"
+msgstr "தவறான பà¯à®²à®®à¯ '%s'"
+
+#: ../cli/src/utils.c:146
+#, c-format
+msgid "Option '--terse' requires specifying '--fields'"
+msgstr "விரà¯à®ªà¯à®ªà®®à¯ '--terse' '--fields'஠கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿ தேவைபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
+
+#: ../cli/src/utils.c:150
+#, c-format
+msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
+msgstr ""
+"விரà¯à®ªà¯à®ªà®®à¯ '--terse'கà¯à®•à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®Ÿ '--fields' விரà¯à®ªà¯à®ª மதிபà¯à®ªà¯à®•à®³à¯ தேவை, '%s' அலà¯à®²"
+
+#: ../libnm-util/crypto.c:120
+#, c-format
+msgid "PEM key file had no end tag '%s'."
+msgstr "PEM விசைக௠கோபà¯à®ªà®¿à®±à¯à®•à¯ à®®à¯à®Ÿà®¿à®µà¯ ஒடà¯à®Ÿà¯'%s' இலà¯à®²à¯ˆ."
+
+#: ../libnm-util/crypto.c:130
+#, c-format
+msgid "Doesn't look like a PEM private key file."
+msgstr "இதைப௠பாரà¯à®ªà¯à®ªà®¤à®±à¯à®•à¯ ஒர௠PEM தனிபà¯à®ªà®Ÿà¯à®Ÿ விசைக௠கோபà¯à®ªà¯ போல௠இலà¯à®²à¯ˆ."
+
+#: ../libnm-util/crypto.c:138
+#, c-format
+msgid "Not enough memory to store PEM file data."
+msgstr "PEM கோபà¯à®ªà¯ தரவை சேமிகà¯à®• போதைய நினைவகம௠இலà¯à®²à¯ˆ."
+
+#: ../libnm-util/crypto.c:154
+#, c-format
+msgid "Malformed PEM file: Proc-Type was not first tag."
+msgstr "à®®à¯à®±à¯ˆà®¯à®±à¯à®± PEM கோபà¯à®ªà¯: Proc-வகையானத௠மà¯à®¤à®²à¯ ஒடà¯à®Ÿà¯ இலà¯à®²à¯ˆ."
+
+#: ../libnm-util/crypto.c:162
+#, c-format
+msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
+msgstr "à®®à¯à®±à¯ˆà®¯à®±à¯à®± PEM கோபà¯à®ªà¯: தெரியாத Proc-வகை ஒடà¯à®Ÿà¯ '%s'."
+
+#: ../libnm-util/crypto.c:172
+#, c-format
+msgid "Malformed PEM file: DEK-Info was not the second tag."
+msgstr "à®®à¯à®±à¯ˆà®¯à®±à¯à®± PEM கோபà¯à®ªà¯: DEK-தகவலானத௠இரணà¯à®Ÿà®¾à®µà®¤à¯ ஒடà¯à®Ÿà®¾à®• இரà¯à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯."
+
+#: ../libnm-util/crypto.c:183
+#, c-format
+msgid "Malformed PEM file: no IV found in DEK-Info tag."
+msgstr "à®®à¯à®±à¯ˆà®¯à®±à¯à®± PEM கோபà¯à®ªà¯: IV ஆனத௠DEK-தகவல௠ஒடà¯à®Ÿà®¿à®²à¯ காணபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../libnm-util/crypto.c:190
+#, c-format
+msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
+msgstr "à®®à¯à®±à¯ˆà®¯à®±à¯à®± PEM கோபà¯à®ªà¯: DEK-தகவல௠ஒடà¯à®Ÿà®¿à®©à¯à®³à¯ IV ன௠தவறான வடிவமà¯."
+
+#: ../libnm-util/crypto.c:203
+#, c-format
+msgid "Malformed PEM file: unknown private key cipher '%s'."
+msgstr "à®®à¯à®±à¯ˆà®¯à®±à¯à®± PEM கோபà¯à®ªà¯: தெரியாத தனிபà¯à®ªà®Ÿà¯à®Ÿ விசை cipher '%s'."
+
+#: ../libnm-util/crypto.c:222
+#, c-format
+msgid "Could not decode private key."
+msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசையை கà¯à®±à®¿à®¯à®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../libnm-util/crypto.c:267
+#, c-format
+msgid "PEM certificate '%s' had no end tag '%s'."
+msgstr "PEM சானà¯à®±à®¿à®¤à®´à®¾à®©à®¤à¯ '%s' à®®à¯à®Ÿà®¿à®µà¯ ஒடà¯à®Ÿà¯ '%s'஠பெறà¯à®±à®¿à®°à¯à®•à¯à®•à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../libnm-util/crypto.c:277
+#, c-format
+msgid "Failed to decode certificate."
+msgstr "சானà¯à®±à®¿à®¤à®´à¯ˆ கà¯à®±à®¿à®¯à®¾à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../libnm-util/crypto.c:286
+#, c-format
+msgid "Not enough memory to store certificate data."
+msgstr "சானà¯à®±à®¿à®¤à®´à¯ தரவை சேமிகà¯à®• போதைய நினைவகம௠இலà¯à®²à¯ˆ."
+
+#: ../libnm-util/crypto.c:294
+#, c-format
+msgid "Not enough memory to store file data."
+msgstr "கோபà¯à®ªà¯ தரவை சேமிகà¯à®• போதைய நினைவகம௠இலà¯à®²à¯ˆ."
+
+#: ../libnm-util/crypto.c:324
+#, c-format
+msgid "IV must be an even number of bytes in length."
+msgstr "IV ஆனத௠நீளதà¯à®¤à®¿à®²à¯ ஒர௠பைடà¯à®Ÿà®¿à®•à®³à®¿à®©à¯ எணà¯à®©à¯ˆà®ªà¯ பெறà¯à®±à¯à®³à¯à®³à®¤à¯."
+
+#: ../libnm-util/crypto.c:333
+#, c-format
+msgid "Not enough memory to store the IV."
+msgstr "IV஠சேமிகà¯à®• போதைய நினைவகம௠இலà¯à®²à¯ˆ."
+
+#: ../libnm-util/crypto.c:344
+#, c-format
+msgid "IV contains non-hexadecimal digits."
+msgstr "IV ஆனதà¯-ஹெகà¯à®¸à®¾ தசம எணà¯à®•à®³à¯ˆ பெறà¯à®±à®¿à®°à¯à®•à¯à®•à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../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
+#, c-format
+msgid "Private key cipher '%s' was unknown."
+msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசை cipher '%s' ஆனத௠தெரியாததà¯."
+
+#: ../libnm-util/crypto.c:391
+#, c-format
+msgid "Not enough memory to decrypt private key."
+msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசையின௠மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à¯ˆ நீகà¯à®• போதை நினைவகம௠இலà¯à®²à¯ˆ."
+
+#: ../libnm-util/crypto.c:511
+#, c-format
+msgid "Unable to determine private key type."
+msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசை வகையை வரையறà¯à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../libnm-util/crypto.c:530
+#, c-format
+msgid "Not enough memory to store decrypted private key."
+msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசையின௠மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à¯ˆ நீகà¯à®•à®¤à¯à®¤à¯ˆ சேமிகà¯à®• போதை நினைவகம௠இலà¯à®²à¯ˆ."
+
+#: ../libnm-util/crypto_gnutls.c:49
+msgid "Failed to initialize the crypto engine."
+msgstr "crypto எனà¯à®œà®¿à®©à¯ˆà®¤à¯ தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../libnm-util/crypto_gnutls.c:93
+#, c-format
+msgid "Failed to initialize the MD5 engine: %s / %s."
+msgstr "MD5 எனà¯à®œà®¿à®©à¯ˆà®¤à¯ தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:156
+#, c-format
+msgid "Invalid IV length (must be at least %zd)."
+msgstr "தவறான IV நீளம௠( %zdவத௠இரà¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯)."
+
+#: ../libnm-util/crypto_gnutls.c:165 ../libnm-util/crypto_nss.c:188
+#, c-format
+msgid "Not enough memory for decrypted key buffer."
+msgstr "மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¨à¯€à®•à¯à®• விசை பஃபà¯à®ªà®°à¯à®•à¯à®•à®¾à®© போதைய நினைவகம௠இலà¯à®²à¯ˆ."
+
+#: ../libnm-util/crypto_gnutls.c:173
+#, c-format
+msgid "Failed to initialize the decryption cipher context: %s / %s."
+msgstr "cipher சேரà¯à®¤à¯à®¤à¯ மறைகà¯à®±à®¿à®®à¯à®±à¯ˆ நீகà¯à®•à®¤à¯à®¤à¯ˆ தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:182
+#, c-format
+msgid "Failed to set symmetric key for decryption: %s / %s."
+msgstr "மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¨à¯€à®•à¯à®•à®¤à¯à®¤à®¿à®±à¯à®•à®¾à®© ஒதà¯à®¤ விசையை அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ.: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:191
+#, c-format
+msgid "Failed to set IV for decryption: %s / %s."
+msgstr "IV கான மறைகà¯à®±à®¿à®®à¯à®±à¯ˆ நீகà¯à®•à®¤à¯à®¤à¯ˆ அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:200
+#, c-format
+msgid "Failed to decrypt the private key: %s / %s."
+msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசைகà¯à®•à¯ மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à¯ˆ நீகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:210 ../libnm-util/crypto_nss.c:267
+#, c-format
+msgid "Failed to decrypt the private key: unexpected padding length."
+msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசைகà¯à®•à¯ மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à¯ˆ நீகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: எதிரà¯à®ªà®¾à®°à®¾à®¤ பாடிங௠நீளமà¯."
+
+#: ../libnm-util/crypto_gnutls.c:221 ../libnm-util/crypto_nss.c:278
+#, c-format
+msgid "Failed to decrypt the private key."
+msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசைகà¯à®•à¯ மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à¯ˆ நீகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../libnm-util/crypto_gnutls.c:286 ../libnm-util/crypto_nss.c:356
+#, c-format
+msgid "Could not allocate memory for encrypting."
+msgstr "மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®•à®¤à¯à®¤à®¿à®±à¯à®•à®¾à®© நினைவகதà¯à®¤à¯ˆ ஒதà¯à®•à¯à®•à®¿à®Ÿ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../libnm-util/crypto_gnutls.c:294
+#, c-format
+msgid "Failed to initialize the encryption cipher context: %s / %s."
+msgstr "cipher சேரà¯à®¤à¯à®¤à¯ மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®•à®¤à¯à®¤à¯ˆ தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:303
+#, c-format
+msgid "Failed to set symmetric key for encryption: %s / %s."
+msgstr "மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®•à®¤à¯à®¤à®¿à®±à¯à®•à®¾à®© ஒதà¯à®¤ விசையை அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ.: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:313
+#, c-format
+msgid "Failed to set IV for encryption: %s / %s."
+msgstr "IV கான மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®•à®¤à¯à®¤à¯ˆ அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:322
+#, c-format
+msgid "Failed to encrypt the data: %s / %s."
+msgstr "தரவை மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s / %s."
+
+#: ../libnm-util/crypto_gnutls.c:362
+#, c-format
+msgid "Error initializing certificate data: %s"
+msgstr "சானà¯à®±à®¿à®¤à®´à¯ தரவை தà¯à®µà®•à¯à®•à¯à®µà®¤à®¿à®²à¯ பிழை: %s"
+
+#: ../libnm-util/crypto_gnutls.c:384
+#, c-format
+msgid "Couldn't decode certificate: %s"
+msgstr "சானà¯à®±à®¿à®¤à®´à¯ˆ கà¯à®±à®¿à®¯à®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+
+#: ../libnm-util/crypto_gnutls.c:408
+#, c-format
+msgid "Couldn't initialize PKCS#12 decoder: %s"
+msgstr "PKCS#12 கà¯à®±à®¿à®¯à®¾à®³à®°à¯ˆ தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+
+#: ../libnm-util/crypto_gnutls.c:421
+#, c-format
+msgid "Couldn't decode PKCS#12 file: %s"
+msgstr "PKCS#12 கோபà¯à®ªà¯ˆ கà¯à®±à®¿à®¯à®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+
+#: ../libnm-util/crypto_gnutls.c:433
+#, c-format
+msgid "Couldn't verify PKCS#12 file: %s"
+msgstr "PKCS#12 கோபà¯à®ªà¯ˆ சரிபாரà¯à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+
+#: ../libnm-util/crypto_nss.c:56
+#, c-format
+msgid "Failed to initialize the crypto engine: %d."
+msgstr "crypto எனà¯à®œà®¿à®©à¯ˆà®¤à¯ தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %d."
+
+#: ../libnm-util/crypto_nss.c:111
+#, c-format
+msgid "Failed to initialize the MD5 context: %d."
+msgstr "MD5 உரையை தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %d."
+
+#: ../libnm-util/crypto_nss.c:179
+#, c-format
+msgid "Invalid IV length (must be at least %d)."
+msgstr "தவறான IV நீளம௠(%dயாவத௠இரà¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯)."
+
+#: ../libnm-util/crypto_nss.c:196
+#, c-format
+msgid "Failed to initialize the decryption cipher slot."
+msgstr "மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à¯ˆ நீகà¯à®• cipher வரிசையை தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../libnm-util/crypto_nss.c:206
+#, c-format
+msgid "Failed to set symmetric key for decryption."
+msgstr "மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¨à¯€à®•à¯à®•à®¤à¯à®¤à®¿à®±à¯à®•à®¾à®© ஒதà¯à®¤ விசையை அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../libnm-util/crypto_nss.c:216
+#, c-format
+msgid "Failed to set IV for decryption."
+msgstr "IV கான மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à¯ˆ அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../libnm-util/crypto_nss.c:224
+#, c-format
+msgid "Failed to initialize the decryption context."
+msgstr "மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¨à¯€à®•à¯à®•à®¤à¯à®¤à¯ˆ சேரà¯à®¤à¯à®¤à¯ தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../libnm-util/crypto_nss.c:237
+#, c-format
+msgid "Failed to decrypt the private key: %d."
+msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசையின௠மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à¯ˆ நீகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %d."
+
+#: ../libnm-util/crypto_nss.c:245
+#, c-format
+msgid "Failed to decrypt the private key: decrypted data too large."
+msgstr ""
+"தனிபà¯à®ªà®Ÿà¯à®Ÿ விசையின௠மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à¯ˆ நீகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: மறைகà¯à®±à®¿à®®à¯à®±à¯ˆ நீகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ தரவ௠மிக "
+"நீளமானதà¯."
+
+#: ../libnm-util/crypto_nss.c:256
+#, c-format
+msgid "Failed to finalize decryption of the private key: %d."
+msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசையின௠மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à¯ˆ à®®à¯à®Ÿà®¿ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %d."
+
+#: ../libnm-util/crypto_nss.c:364
+#, c-format
+msgid "Failed to initialize the encryption cipher slot."
+msgstr "மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®• cipher வரிசையை தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../libnm-util/crypto_nss.c:372
+#, c-format
+msgid "Failed to set symmetric key for encryption."
+msgstr "மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®•à®¤à¯à®¤à®¿à®±à¯à®•à®¾à®© ஒதà¯à®¤ விசையை அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../libnm-util/crypto_nss.c:380
+#, c-format
+msgid "Failed to set IV for encryption."
+msgstr "IV கான மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®•à®¤à¯à®¤à¯ˆ அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../libnm-util/crypto_nss.c:388
+#, c-format
+msgid "Failed to initialize the encryption context."
+msgstr "மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®• சேரà¯à®¤à¯à®¤à¯ தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../libnm-util/crypto_nss.c:396
+#, c-format
+msgid "Failed to encrypt: %d."
+msgstr "மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %d."
+
+#: ../libnm-util/crypto_nss.c:404
+#, c-format
+msgid "Unexpected amount of data after encrypting."
+msgstr "மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®•à®¤à¯à®¤à®¿à®±à¯à®•à¯à®ªà¯ பின௠எதிரà¯à®ªà®¾à®°à®¾à®¤ தரவின௠எணà¯à®£à®¿à®•à¯à®•à¯ˆ."
+
+#: ../libnm-util/crypto_nss.c:447
+#, c-format
+msgid "Couldn't decode certificate: %d"
+msgstr "சானà¯à®±à®¿à®¤à®´à¯ˆ கà¯à®±à®¿à®¯à®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %d"
+
+#: ../libnm-util/crypto_nss.c:482
+#, c-format
+msgid "Couldn't convert password to UCS2: %d"
+msgstr "கடவà¯à®šà¯à®šà¯Šà®²à¯à®²à¯ˆ UCS2கà¯à®•à¯ மாறà¯à®± à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %d"
+
+#: ../libnm-util/crypto_nss.c:510
+#, c-format
+msgid "Couldn't initialize PKCS#12 decoder: %d"
+msgstr "PKCS#12 கà¯à®±à®¿à®¯à®¾à®•à¯à®•à®¤à¯à®¤à¯ˆ தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %d"
+
+#: ../libnm-util/crypto_nss.c:519
+#, c-format
+msgid "Couldn't decode PKCS#12 file: %d"
+msgstr "PKCS#12 கோபà¯à®ªà¯ˆ கà¯à®±à®¿à®¯à®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %d"
+
+#: ../libnm-util/crypto_nss.c:528
+#, c-format
+msgid "Couldn't verify PKCS#12 file: %d"
+msgstr "PKCS#12 கோபà¯à®ªà¯ˆ சரிபாரà¯à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %d"
+
+#: ../libnm-util/crypto_nss.c:557
+msgid "Could not generate random data."
+msgstr "தறà¯à®šà¯†à®¯à®²à®¾à®© தரவை உரà¯à®µà®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../libnm-util/nm-utils.c:1925
+#, c-format
+msgid "Not enough memory to make encryption key."
+msgstr "மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®• விசையை செயà¯à®¯ போதைய நினைவகம௠இலà¯à®²à¯ˆ."
+
+#: ../libnm-util/nm-utils.c:2035
+msgid "Could not allocate memory for PEM file creation."
+msgstr "PEM கோபà¯à®ªà®¿à®±à¯à®•à®¾à®© உரà¯à®µà®¾à®•à¯à®•à®¤à¯à®¤à®¿à®±à¯à®•à¯ போதைய நினைவ ஒதà¯à®•à¯à®•à¯€à®Ÿà¯ இலà¯à®²à¯ˆ."
+
+#: ../libnm-util/nm-utils.c:2047
+#, c-format
+msgid "Could not allocate memory for writing IV to PEM file."
+msgstr "PEM கோபà¯à®ªà®¿à®²à¯ IV஠எழà¯à®¤à¯à®µà®¤à®±à¯à®•à¯ போதைய நினைவக ஒதà¯à®•à¯à®•à¯€à®Ÿà¯ இலà¯à®²à¯ˆ."
+
+#: ../libnm-util/nm-utils.c:2059
+#, c-format
+msgid "Could not allocate memory for writing encrypted key to PEM file."
+msgstr "PEM கோபà¯à®ªà®¿à®±à¯à®•à¯ மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®• விசையை எழà¯à®¤à¯à®µà®¤à®±à¯à®•à®¾à®© போதைய நினைவகதà¯à®¤à¯ˆ ஒதà¯à®•à¯à®•à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../libnm-util/nm-utils.c:2078
+#, c-format
+msgid "Could not allocate memory for PEM file data."
+msgstr "PEM கோபà¯à®ªà¯ தரவிறà¯à®•à®¾à®• போதைய நினைவக ஒதà¯à®•à¯à®•à¯€à®Ÿà¯ இலà¯à®²à¯ˆ."
+
+#: ../src/nm-netlink-monitor.c:100 ../src/nm-netlink-monitor.c:231
+#: ../src/nm-netlink-monitor.c:653
+#, c-format
+msgid "error processing netlink message: %s"
+msgstr "netlink செயà¯à®¤à®¿à®¯à®¿à®©à¯ செயலà¯à®®à¯à®±à¯ˆà®¯à®¿à®²à¯ பிழை: %s"
+
+#: ../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 "இணைபà¯à®ªà¯ நிலையை பாரà¯à®µà¯ˆà®¯à®¿à®Ÿ நெடà¯à®‡à®£à¯ˆà®ªà¯à®ªà¯ˆ இணைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+
+#: ../src/nm-netlink-monitor.c:265
+#, c-format
+msgid "unable to enable netlink handle credential passing: %s"
+msgstr "netlink ஹாணà¯à®Ÿà®¿à®²à¯ நறà¯à®šà®¾à®©à¯à®±à¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+
+#: ../src/nm-netlink-monitor.c:291 ../src/nm-netlink-monitor.c:353
+#, c-format
+msgid "unable to allocate netlink handle for monitoring link status: %s"
+msgstr "இணைபà¯à®ªà¯ நிலைகà¯à®•à®¾à®© netlink ஹாணà¯à®Ÿà®¿à®²à¯ˆ ஒதà¯à®•à¯à®•à®¿à®Ÿ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+
+#: ../src/nm-netlink-monitor.c:376
+#, c-format
+msgid "unable to allocate netlink link cache for monitoring link status: %s"
+msgstr "இணைபà¯à®ªà¯ நிலையை கணà¯à®•à®¾à®©à®¿à®•à¯à®• netlink இணைபà¯à®ªà¯ செகà¯à®•à¯ˆ ஒதà¯à®•à¯à®•à®¿à®Ÿ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+
+#: ../src/nm-netlink-monitor.c:502
+#, c-format
+msgid "unable to join netlink group: %s"
+msgstr "netlink கà¯à®´à¯à®µà¯à®Ÿà®©à¯ சேர à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+
+#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642
+#, c-format
+msgid "error updating link cache: %s"
+msgstr "பிழை மேமà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®®à¯ இணைபà¯à®ªà¯ செகà¯: %s"
+
+#: ../src/main.c:502
+#, c-format
+msgid "Invalid option. Please use --help to see a list of valid options.\n"
+msgstr ""
+"தவறான விரà¯à®ªà¯à®ªà®®à¯. உதவியை --பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿ சரியான விரà¯à®ªà¯à®ªà®™à¯à®•à®³à®¿à®©à¯ படà¯à®Ÿà®¿à®¯à®²à¯ˆà®ªà¯ பாரà¯à®•à¯à®•à®µà¯à®®à¯.\n"
+
+#: ../src/main.c:562
+#, c-format
+msgid "%s. Please use --help to see a list of valid options.\n"
+msgstr "%s. --help஠பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿ சரியான விரà¯à®ªà¯à®ªà®™à¯à®•à®³à®¿à®©à¯ படà¯à®Ÿà®¿à®¯à®²à¯ˆà®ªà¯ பாரà¯à®•à¯à®•à®µà¯à®®à¯.\n"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:325
+msgid "# Created by NetworkManager\n"
+msgstr "# Created by NetworkManager\n"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:341
+#, c-format
+msgid ""
+"# Merged from %s\n"
+"\n"
+msgstr ""
+"# Merged from %s\n"
+"\n"
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:279
+msgid "no usable DHCP client could be found."
+msgstr "பயனà¯à®ªà®Ÿà®•à¯à®•à¯‚டிய DHCP வாடிகà¯à®•à¯ˆà®¯à®¾à®³à®°à¯ காணபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ"
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:288
+msgid "'dhclient' could be found."
+msgstr "'dhclient' காணபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:298
+msgid "'dhcpcd' could be found."
+msgstr "'dhcpcd' காணபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:306
+#, c-format
+msgid "unsupported DHCP client '%s'"
+msgstr "தà¯à®£à¯ˆà®ªà¯à®°à®¿à®¯à®¾à®¤ DHCP வாடிகà¯à®•à¯ˆà®¯à®¾à®³à®°à¯ '%s'"
+
+#: ../src/logging/nm-logging.c:146
+#, c-format
+msgid "Unknown log level '%s'"
+msgstr "தெரியாத பதிவ௠நிலை '%s'"
+
+#: ../src/logging/nm-logging.c:171
+#, c-format
+msgid "Unknown log domain '%s'"
+msgstr "தெரியாத பதிவ௠டொமைன௠'%s'"
+
+#: ../src/dns-manager/nm-dns-manager.c:343
+msgid "NOTE: the libc resolver may not support more than 3 nameservers."
+msgstr "கà¯à®±à®¿à®ªà¯à®ªà¯: இநà¯à®¤ libc மறà¯à®¤à¯€à®°à¯à®µà®¾à®³à®°à¯ 3 பெயரà¯à®šà¯‡à®µà¯ˆà®¯à®°à¯à®•à®³à¯à®•à¯à®•à¯ மேல௠தà¯à®£à¯ˆà®ªà¯à®°à®¿à®¯à®µà®¤à®¿à®²à¯à®²à¯ˆ."
+
+#: ../src/dns-manager/nm-dns-manager.c:345
+msgid "The nameservers listed below may not be recognized."
+msgstr "கீழே படà¯à®Ÿà®¿à®¯à®²à®¿à®Ÿà¯à®Ÿà®ªà¯à®ªà®Ÿà¯à®³à¯à®³ பெயரà¯à®šà¯‡à®µà¯ˆà®¯à®•à®™à¯à®•à®³à¯ கணà¯à®Ÿà¯à®ªà®¿à®Ÿà®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../src/system-settings/nm-default-wired-connection.c:157
+#, c-format
+msgid "Auto %s"
+msgstr "தானியகà¯à®•à®¿ %s"
+
+#: ../system-settings/plugins/ifcfg-rh/reader.c:3256
+msgid "System"
+msgstr "கணினி"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
+msgid "Connection sharing via a protected WiFi network"
+msgstr "ஒர௠பாதà¯à®•à®¾à®•à¯à®•à®ªà¯à®ª WiFi நெடà¯à®µà¯Šà®°à¯à®•à¯à®•à®¿à®©à¯ வழியாக இணைபà¯à®ªà¯ பகிரபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
+msgid "Connection sharing via an open WiFi network"
+msgstr "ஒர௠திறநà¯à®¤ WiFi நெடà¯à®µà¯Šà®°à¯à®•à¯à®•à®¿à®©à¯ வழியாக இணைபà¯à®ªà¯ பகிரபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
+msgid "Modify persistent system hostname"
+msgstr "நிலையான கணினி பà¯à®°à®µà®²à®ªà¯à®ªà¯†à®¯à®°à¯ˆ மாறà¯à®±à®¿à®¯à®®à¯ˆ"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
+msgid "Modify system connections"
+msgstr "கணினி இணைபà¯à®ªà¯à®•à®³à¯ˆ மாறà¯à®±à®¿à®¯à®®à¯ˆà®•à¯à®•à®µà¯à®®à¯"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
+msgid "System policy prevents modification of system settings"
+msgstr "கணினி அமைவà¯à®•à®³à®¿à®©à¯ மாறà¯à®±à®¤à¯à®¤à¯ˆ கணினி பாலிசி தடà¯à®•à¯à®•à®¿à®±à®¤à¯"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
+msgid "System policy prevents modification of the persistent system hostname"
+msgstr "நிலையான கணினி பà¯à®°à®µà®²à®ªà¯†à®¯à®°à¯ மாறà¯à®±à®¿à®¯à®®à¯ˆà®ªà¯à®ªà®¤à¯ˆ கணினி பாலிசி தடà¯à®•à¯à®•à®¿à®±à®¤à¯"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
+msgid "System policy prevents sharing connections via a protected WiFi network"
+msgstr ""
+"பாதà¯à®•à®¾à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ WiFi நெடà¯à®µà¯Šà®°à¯à®•à¯à®•à®¿à®©à¯ வழியாக இணைபà¯à®ªà¯à®•à®³à¯ˆ பகிரà¯à®µà®¤à¯ˆ கணினி பாலிசி தடà¯à®•à¯à®•à®¿à®±à®¤à¯"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
+msgid "System policy prevents sharing connections via an open WiFi network"
+msgstr "திறநà¯à®¤ WiFi நெடà¯à®µà¯Šà®°à¯à®•à¯à®•à®¿à®©à¯ வழியாக இணைபà¯à®ªà¯à®•à®³à¯ˆ பகிரà¯à®µà®¤à¯ˆ கணினி பாலிசி தடà¯à®•à¯à®•à®¿à®±à®¤à¯"
+
+#~ msgid "Type"
+#~ msgstr "வகை"
+
+#~ msgid "Name"
+#~ msgstr "பெயரà¯"
+
+#~ msgid "User connections:\n"
+#~ msgstr "பயனர௠இணைபà¯à®ªà¯à®•à®³à¯:\n"
+
+#~ msgid "System-wide connections"
+#~ msgstr "பரநà¯à®¤ கணினி இணைபà¯à®ªà¯à®•à®³à¯"
+
+#~ msgid "Default"
+#~ msgstr "à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯"
+
+#~ msgid "Service"
+#~ msgstr "சேவை"
+
+#~ msgid "%s, %s, Freq %d MHz, Rate %d Mb/s, Strength %d"
+#~ msgstr "%s, %s, Freq %d MHz, விகிதம௠%d Mb/s, வலிமை %d"
+
+#~ msgid "Device"
+#~ msgstr "சாதனமà¯"
+
+#~ msgid "Driver"
+#~ msgstr "இயகà¯à®•à®¿"
+
+#~ msgid "State"
+#~ msgstr "நிலை"
+
+#~ msgid "HW Address"
+#~ msgstr "HW à®®à¯à®•à®µà®°à®¿"
+
+#~ msgid ""
+#~ "\n"
+#~ " Capabilities:\n"
+#~ msgstr ""
+#~ "\n"
+#~ " ஆறà¯à®±à®²à¯à®•à®³à¯:\n"
+
+#~ msgid "Carrier Detect"
+#~ msgstr "கேரியர௠கணà¯à®Ÿà¯à®ªà®¿à®Ÿà®¿à®ªà¯à®ªà¯"
+
+#~ msgid "Speed"
+#~ msgstr "வேகமà¯"
+
+#~ msgid ""
+#~ "\n"
+#~ " Wireless Properties\n"
+#~ msgstr ""
+#~ "\n"
+#~ " கமà¯à®ªà®¿à®¯à®¿à®²à¯à®²à®¾ தனà¯à®®à¯ˆà®•à®³à¯\n"
+
+#~ msgid "WEP Encryption"
+#~ msgstr "WEP மறைகà¯à®±à®¿à®¯à®¨à®¾à®•à¯à®•à®®à¯"
+
+#~ msgid "WPA Encryption"
+#~ msgstr "WPA மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®•à®®à¯"
+
+#~ msgid "WPA2 Encryption"
+#~ msgstr "WPA2 மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®•à®®à¯"
+
+#~ msgid "TKIP cipher"
+#~ msgstr "TKIP cipher"
+
+#~ msgid "CCMP cipher"
+#~ msgstr "CCMP சிபà¯à®ªà®°à¯"
+
+#~ msgid ""
+#~ "\n"
+#~ " Wireless Access Points %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ " வயரà¯à®²à¯†à®¸à¯ அணà¯à®•à®²à¯ பà¯à®³à¯à®³à®¿ %s\n"
+
+#~ msgid "(* = current AP)"
+#~ msgstr "(* = நடபà¯à®ªà¯ AP)"
+
+#~ msgid ""
+#~ "\n"
+#~ " Wired Properties\n"
+#~ msgstr ""
+#~ "\n"
+#~ " வயரà¯à®Ÿà¯ தனà¯à®®à¯ˆà®•à®³à¯\n"
+
+#~ msgid "Carrier"
+#~ msgstr "கேரியரà¯"
+
+#~ msgid ""
+#~ "\n"
+#~ " IPv4 Settings:\n"
+#~ msgstr ""
+#~ "\n"
+#~ " IPv4 அமைவà¯à®•à®³à¯:\n"
+
+#~ msgid "Address"
+#~ msgstr "à®®à¯à®•à®µà®°à®¿"
+
+#~ msgid "Prefix"
+#~ msgstr "à®®à¯à®©à¯à®ªà¯Šà®°à¯à®¤à¯à®¤à®®à¯"
+
+#~ msgid "Gateway"
+#~ msgstr "நà¯à®´à¯ˆà®µà®¾à®¯à®¿à®²à¯"
+
+#~ msgid "Device:"
+#~ msgstr "சாதனமà¯:"
+
+#~ msgid "Error: hwaddr has to be specified."
+#~ msgstr "பிழை: hwaddr கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿ வேணà¯à®Ÿà¯à®®à¯."
+
+#~ msgid "AP parameters"
+#~ msgstr "AP அளவà¯à®°à¯à®•à¯à®•à®³à¯"
+
+#~ msgid "Frequency:"
+#~ msgstr "அடிகà¯à®•à®Ÿà®¿:"
+
+#~ msgid "Mode:"
+#~ msgstr "à®®à¯à®±à¯ˆà®®à¯ˆ:"
+
+#~ msgid "Ad-hoc"
+#~ msgstr "Ad-hoc"
+
+#~ msgid "Maximal bitrate:"
+#~ msgstr "அதிகபடà¯à®š பிடà¯à®°à¯†à®Ÿà¯:"
+
+#~ msgid "Strength:"
+#~ msgstr "வலிமை:"
+
+#~ msgid "Flags:"
+#~ msgstr "கொடிகளà¯:"
+
+#~ msgid "privacy"
+#~ msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ"
+
+#~ msgid "WPA flags:"
+#~ msgstr "WPA கொடிகளà¯:"
+
+#~ msgid "RSN flags:"
+#~ msgstr "RSN கொடிகளà¯:"
+
+#~ msgid "NM running:"
+#~ msgstr "NM இயஙà¯à®•à¯à®•à®¿à®±à®¤à¯:"
+
+#~ msgid "NM state:"
+#~ msgstr "NM நிலை:"
+
+#~ msgid "NM wireless hardware:"
+#~ msgstr "NM வயரà¯à®²à¯†à®¸à¯ வனà¯à®ªà¯Šà®°à¯à®³à¯:"
+
+#~ msgid "NM wireless:"
+#~ msgstr "NM வயரà¯à®²à¯†à®¸à¯:"
+
+#~ msgid "NM WWAN hardware:"
+#~ msgstr "NM WWAN வனà¯à®ªà¯Šà®°à¯à®³à¯:"
+
+#~ msgid "unable to join netlink group for monitoring link status: %s"
+#~ msgstr "இணைபà¯à®ªà¯ நிலையை கணà¯à®•à®¾à®©à®¿à®•à¯à®• netlink கà¯à®´à¯à®µà®¿à®²à¯ சேர à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+
+#~ msgid "unable to connect to netlink: %s"
+#~ msgstr "netlinkஉடன௠இணைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
diff --git a/po/te.po b/po/te.po
index 54c6fed65e..cf05561417 100644
--- a/po/te.po
+++ b/po/te.po
@@ -7,16 +7,20 @@
msgid ""
msgstr ""
"Project-Id-Version: te\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-06 14:31+0530\n"
-"PO-Revision-Date: 2010-05-06 19:30+0530\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=NetworkManager&component=general\n"
+"POT-Creation-Date: 2010-06-28 08:52+0000\n"
+"PO-Revision-Date: 2010-07-22 17:20+0530\n"
"Last-Translator: Krishna Babu K <kkrothap@redhat.com>\n"
"Language-Team: Telugu <en@li.org>\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\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"\n"
+"\n"
+"\n"
"\n"
"\n"
"\n"
@@ -145,19 +149,19 @@ msgstr "à°Žà°ªà±à°ªà°Ÿà°¿à°•à°¿à°•à°¾à°¦à±"
#: ../cli/src/connections.c:602 ../cli/src/connections.c:605
#: ../cli/src/devices.c:388 ../cli/src/devices.c:513 ../cli/src/devices.c:539
#: ../cli/src/devices.c:540 ../cli/src/devices.c:541 ../cli/src/devices.c:542
-#: ../cli/src/devices.c:543 ../cli/src/settings.c:504
-#: ../cli/src/settings.c:544 ../cli/src/settings.c:643
-#: ../cli/src/settings.c:912 ../cli/src/settings.c:913
-#: ../cli/src/settings.c:915 ../cli/src/settings.c:917
-#: ../cli/src/settings.c:1042 ../cli/src/settings.c:1043
-#: ../cli/src/settings.c:1044 ../cli/src/settings.c:1123
-#: ../cli/src/settings.c:1124 ../cli/src/settings.c:1125
-#: ../cli/src/settings.c:1126 ../cli/src/settings.c:1127
-#: ../cli/src/settings.c:1128 ../cli/src/settings.c:1129
-#: ../cli/src/settings.c:1130 ../cli/src/settings.c:1131
-#: ../cli/src/settings.c:1132 ../cli/src/settings.c:1133
-#: ../cli/src/settings.c:1134 ../cli/src/settings.c:1135
-#: ../cli/src/settings.c:1210
+#: ../cli/src/devices.c:543 ../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
msgid "yes"
msgstr "à°…à°µà±à°¨à±"
@@ -165,19 +169,19 @@ msgstr "à°…à°µà±à°¨à±"
#: ../cli/src/connections.c:602 ../cli/src/connections.c:605
#: ../cli/src/devices.c:388 ../cli/src/devices.c:513 ../cli/src/devices.c:539
#: ../cli/src/devices.c:540 ../cli/src/devices.c:541 ../cli/src/devices.c:542
-#: ../cli/src/devices.c:543 ../cli/src/settings.c:504
-#: ../cli/src/settings.c:506 ../cli/src/settings.c:544
-#: ../cli/src/settings.c:643 ../cli/src/settings.c:912
-#: ../cli/src/settings.c:913 ../cli/src/settings.c:915
-#: ../cli/src/settings.c:917 ../cli/src/settings.c:1042
-#: ../cli/src/settings.c:1043 ../cli/src/settings.c:1044
-#: ../cli/src/settings.c:1123 ../cli/src/settings.c:1124
-#: ../cli/src/settings.c:1125 ../cli/src/settings.c:1126
-#: ../cli/src/settings.c:1127 ../cli/src/settings.c:1128
-#: ../cli/src/settings.c:1129 ../cli/src/settings.c:1130
-#: ../cli/src/settings.c:1131 ../cli/src/settings.c:1132
-#: ../cli/src/settings.c:1133 ../cli/src/settings.c:1134
-#: ../cli/src/settings.c:1135 ../cli/src/settings.c:1210
+#: ../cli/src/devices.c:543 ../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
msgid "no"
msgstr "కాదà±"
@@ -266,7 +270,7 @@ msgstr "à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà°¬à°¡à°¿à°‚ది"
#: ../cli/src/connections.c:1102 ../cli/src/connections.c:1125
#: ../cli/src/connections.c:1158 ../cli/src/devices.c:224
#: ../cli/src/devices.c:514 ../cli/src/network-manager.c:92
-#: ../cli/src/network-manager.c:145 ../cli/src/settings.c:469
+#: ../cli/src/network-manager.c:145 ../cli/src/settings.c:473
msgid "unknown"
msgstr "తెలియని"
@@ -1067,78 +1071,79 @@ msgstr "దోషమà±: నెటà±à°µà°°à±à°•à±à°¨à°¿à°°à±à°µà°¾à°¹à°¿à°•à
msgid "Success"
msgstr "సఫలంమైంది"
-#: ../cli/src/settings.c:407
+#: ../cli/src/settings.c:411
#, c-format
msgid "%d (hex-ascii-key)"
msgstr "%d (hex-ascii-key)"
-#: ../cli/src/settings.c:409
+#: ../cli/src/settings.c:413
#, c-format
msgid "%d (104/128-bit passphrase)"
msgstr "%d (104/128-bit passphrase)"
-#: ../cli/src/settings.c:412
+#: ../cli/src/settings.c:416
#, c-format
msgid "%d (unknown)"
msgstr "%d (తెలియని)"
-#: ../cli/src/settings.c:438
+#: ../cli/src/settings.c:442
msgid "0 (unknown)"
msgstr "0 (తెలియని)"
-#: ../cli/src/settings.c:444
+#: ../cli/src/settings.c:448
msgid "any, "
msgstr "à°à°¦à±ˆà°¨à°¾, "
-#: ../cli/src/settings.c:446
+#: ../cli/src/settings.c:450
msgid "900 MHz, "
msgstr "900 MHz, "
-#: ../cli/src/settings.c:448
+#: ../cli/src/settings.c:452
msgid "1800 MHz, "
msgstr "1800 MHz, "
-#: ../cli/src/settings.c:450
+#: ../cli/src/settings.c:454
msgid "1900 MHz, "
msgstr "1900 MHz, "
-#: ../cli/src/settings.c:452
+#: ../cli/src/settings.c:456
msgid "850 MHz, "
msgstr "850 MHz, "
-#: ../cli/src/settings.c:454
+#: ../cli/src/settings.c:458
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../cli/src/settings.c:456
+#: ../cli/src/settings.c:460
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../cli/src/settings.c:458
+#: ../cli/src/settings.c:462
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../cli/src/settings.c:460
+#: ../cli/src/settings.c:464
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../cli/src/settings.c:462
+#: ../cli/src/settings.c:466
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../cli/src/settings.c:464
+#: ../cli/src/settings.c:468
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../cli/src/settings.c:466
+#: ../cli/src/settings.c:470
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../cli/src/settings.c:546 ../cli/src/settings.c:708
+#: ../cli/src/settings.c:554 ../cli/src/settings.c:721
msgid "auto"
msgstr "à°¸à±à°µà°¯à°‚చాలక"
-#: ../cli/src/settings.c:704 ../cli/src/settings.c:707 ../cli/src/utils.c:172
+#: ../cli/src/settings.c:716 ../cli/src/settings.c:719
+#: ../cli/src/settings.c:720 ../cli/src/utils.c:172
msgid "not set"
msgstr "అమరà±à°š లేదà±"
@@ -1501,6 +1506,91 @@ msgstr "à°Žà°¨à±à°•à±à°°à°¿à°ªà±à°Ÿà± చేసిన కీనౠPEM à°«à±
msgid "Could not allocate memory for PEM file data."
msgstr "PEM ఫైలౠడాటా కొరకౠమెమొరీనౠకేటాయించలేక పోయింది."
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
+msgid "Connection sharing via a protected WiFi network"
+msgstr "à°°à°•à±à°·à°¿à°¤ WiFi నెటà±à°µà°°à±à°•à± à°¦à±à°µà°¾à°°à°¾ à°…à°¨à±à°¸à°‚ధానపౠభాగసà±à°µà°¾à°®à±à°¯à°®à±."
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
+msgid "Connection sharing via an open WiFi network"
+msgstr "ఓపెనౠWiFi నెటà±à°µà°°à±à°•à± à°¦à±à°µà°¾à°°à°¾ à°…à°¨à±à°¸à°‚ధానపౠభాగసà±à°µà°¾à°®à±à°¯à°®à±"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
+msgid "Modify persistent system hostname"
+msgstr "నిరంతర సిసà±à°Ÿà°®à± హోసà±à°Ÿà±à°¨à°¾à°®à°®à± మారà±à°šà±à°®à±"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
+msgid "Modify system connections"
+msgstr "సిసà±à°Ÿà°®à± à°…à°¨à±à°¸à°‚ధానమà±à°²à°¨à± సవరించà±à°®à±"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
+msgid "System policy prevents modification of system settings"
+msgstr "సిసà±à°Ÿà°®à± అమరికలౠసవరించà±à°Ÿà°•à± సిసà±à°Ÿà°®à± పాలసి నిరోధిసà±à°¤à±à°‚ది"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
+msgid "System policy prevents modification of the persistent system hostname"
+msgstr "నిరంతర సిసà±à°Ÿà°®à± హోసà±à°Ÿà±à°¨à°¾à°®à°®à±à°¨à± సవరించà±à°Ÿà°¨à± సిసà±à°Ÿà°®à± విధానమౠనిరోధించà±à°šà±à°¨à±à°¨à°¦à°¿"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
+msgid "System policy prevents sharing connections via a protected WiFi network"
+msgstr "à°°à°•à±à°·à°¿à°¤ WiFi నెటà±à°µà°°à±à°•à± à°¦à±à°µà°¾à°°à°¾ à°…à°¨à±à°¸à°‚ధానమà±à°²à°¨à± భాగసà±à°µà°¾à°®à±à°¯à°ªà°°à°šà±à°Ÿ సిసà±à°Ÿà°®à± విధానమౠనిరోధించà±à°šà±à°¨à±à°¨à°¦à°¿"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
+msgid "System policy prevents sharing connections via an open WiFi network"
+msgstr "ఓపెనౠWiFi నెటà±à°µà°°à±à°•à± à°¦à±à°µà°¾à°°à°¾ à°…à°¨à±à°¸à°‚ధానమà±à°²à°¨à± భాగసà±à°µà°¾à°®à±à°¯à°ªà°°à°šà±à°Ÿ సిసà±à°Ÿà°®à± విధానమౠనిరోధించà±à°šà±à°¨à±à°¨à°¦à°¿"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
+msgid "Allow control of network connections"
+msgstr "నెటà±à°µà°°à±à°•à± à°…à°¨à±à°¸à°‚ధానమà±à°² యొకà±à°• నియంతà±à°°à°£ à°…à°¨à±à°®à°¤à°¿à°‚à°šà±à°®à±"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
+msgid "Allow use of user-specific connections"
+msgstr "వినియోగదారి-à°ªà±à°°à°¤à±à°¯à±‡à°• à°…à°¨à±à°¸à°‚ధానమà±à°² à°µà±à°ªà°¯à±‹à°—à°®à±à°¨à± à°…à°¨à±à°®à°¤à°¿à°‚à°šà±à°®à±"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
+msgid "Enable or disable WiFi devices"
+msgstr "WiFi పరికరమà±à°²à°¨à± చేతనమౠలేదా అచేతనమౠచేయà±à°®à±"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
+msgid "Enable or disable mobile broadband devices"
+msgstr "మొబైలౠబà±à°°à°¾à°¡à±â€Œà°¬à°¾à°‚డౠపరికరమà±à°²à°¨à± చేతనమౠలేదా అచేతనమౠచేయà±à°®à±"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+msgid "Enable or disable system networking"
+msgstr "సిసà±à°Ÿà°®à± నెటà±à°µà°°à±à°•à°¿à°‚à°—à±â€Œà°¨à± చేతనమౠలేదా అచేతనమౠచేయà±à°®à±"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
+msgid ""
+"Put NetworkManager to sleep or wake it up (should only be used by system "
+"power management)"
+msgstr ""
+"నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à±â€Œà°¨à± à°¸à±à°²à±€à°ªà±â€Œà°¨à°•à± లేదా దానిని మెలà±à°•à±Šà°²à±à°ªà±à°Ÿà°•à± à°µà±à°‚à°šà°‚à°¡à°¿ (సిసà±à°Ÿà°®à± పవరౠనిరà±à°µà°¹à°£ చేత మాతà±à°°à°®à±‡ "
+"à°µà±à°ªà°¯à±‹à°—ించబడాలి)"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
+msgid "System policy prevents control of network connections"
+msgstr "నెటà±à°µà°°à±à°•à± à°…à°¨à±à°¸à°‚ధానమà±à°² నియంతà±à°°à°£à°¨à± సిసà±à°Ÿà°®à± విధానమౠనిరోధించà±à°šà±à°¨à±à°¨à°¦à°¿"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
+msgid "System policy prevents enabling or disabling WiFi devices"
+msgstr "WiFi పరికరమà±à°²à°¨à± చేతనమౠచేయà±à°Ÿà°•à± లేదా అచేతనమౠచేయà±à°Ÿà°•à± సిసà±à°Ÿà°®à± విధానమౠనిరోధించà±à°šà±à°¨à±à°¨à°¦à°¿"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
+msgid "System policy prevents enabling or disabling mobile broadband devices"
+msgstr ""
+"మొబైలౠబà±à°°à°¾à°¡à±â€Œà°¬à°¾à°‚డౠపరికరమà±à°²à°¨à± చేతనమà±à°šà±‡à°¯à±à°Ÿà°•à± లేదా అచేతనమà±à°šà±‡à°¯à±à°Ÿà°•à± సిసà±à°Ÿà°®à± విధానమౠనిరోధించà±à°šà±à°¨à±à°¨à°¦à°¿"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
+msgid "System policy prevents enabling or disabling system networking"
+msgstr "సిసà±à°Ÿà°®à± నెటà±à°µà°°à±à°•à°¿à°‚à°—à±â€Œà°¨à± చేతనమౠచేయà±à°Ÿà°•à± లేదా అచేతనమౠచేయà±à°Ÿà°•à± సిసà±à°Ÿà°®à± విధానమౠనిరోధించà±à°šà±à°¨à±à°¨à°¦à°¿"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
+msgid "System policy prevents putting NetworkManager to sleep or waking it up"
+msgstr "నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à±â€Œà°¨à± à°¸à±à°²à±€à°ªà±â€Œà°¨à°•à± లేదా దానిని మెలà±à°•à±Šà°²à±à°ªà±à°Ÿà°•à± à°µà±à°‚à°šà±à°Ÿà°¨à± సిసà±à°Ÿà°®à± విధానమౠనిరోధించà±à°šà±à°¨à±à°¨à°¦à°¿"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
+msgid "System policy prevents use of user-specific connections"
+msgstr "వినియోగదారి-à°ªà±à°°à°¤à±à°¯à±‡à°• à°…à°¨à±à°¸à°‚ధానమà±à°²à°¨à± à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà±à°Ÿà°•à± సిసà±à°Ÿà°®à± విధానమౠనిరోధించà±à°šà±à°¨à±à°¨à°¦à°¿"
+
#: ../src/nm-netlink-monitor.c:100 ../src/nm-netlink-monitor.c:231
#: ../src/nm-netlink-monitor.c:653
#, c-format
@@ -1546,7 +1636,7 @@ msgstr "లింకౠకà±à°¯à°¾à°šà±€à°¨à°¿ నవీకరించà±à°Ÿà
msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgstr "చెలà±à°²à°¨à°¿ à°à°šà±à°šà°¿à°•à°®à±. చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ à°à°šà±à°šà°¿à°•à°®à±à°² జాబితా కొరకౠ--help à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà°‚à°¡à°¿.\n"
-#: ../src/main.c:562
+#: ../src/main.c:568
#, c-format
msgid "%s. Please use --help to see a list of valid options.\n"
msgstr "%s. చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ à°à°šà±à°šà°¿à°•à°®à±à°² జాబితా చూచà±à°Ÿà°•à± దయచేసి --help à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà±à°®à±.\n"
@@ -1591,11 +1681,11 @@ msgstr "తెలియని లాగౠసà±à°¥à°¾à°¯à°¿ '%s'"
msgid "Unknown log domain '%s'"
msgstr "తెలియని లాగౠడొమైనౠ'%s'"
-#: ../src/named-manager/nm-named-manager.c:343
+#: ../src/dns-manager/nm-dns-manager.c:350
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr "గమనిక: libc రిజాలà±à°µà°°à± 3 నామపౠసేవికలకనà±à°¨à°¾ యెకà±à°•à±à°µ వాటికి మదà±à°¦à°¤à°¿à°µà±à°µà°²à±‡à°¦à±."
-#: ../src/named-manager/nm-named-manager.c:345
+#: ../src/dns-manager/nm-dns-manager.c:352
msgid "The nameservers listed below may not be recognized."
msgstr "à°•à±à°°à°¿à°‚దన జాబితాచేసివà±à°¨à±à°¨ నామపà±à°¸à±‡à°µà°¿à°•à°²à± à°—à±à°°à±à°¤à°¿à°‚చబడక పోవచà±à°šà±à°¨à±."
@@ -1604,39 +1694,12 @@ msgstr "à°•à±à°°à°¿à°‚దన జాబితాచేసివà±à°¨à±à°¨ à°¨à
msgid "Auto %s"
msgstr "à°¸à±à°µà°¯à°‚చాలక %s"
-#: ../system-settings/plugins/ifcfg-rh/reader.c:3256
+#: ../system-settings/plugins/ifcfg-rh/reader.c:3275
msgid "System"
msgstr "సిసà±à°Ÿà°®à±"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
-msgid "Connection sharing via a protected WiFi network"
-msgstr "à°°à°•à±à°·à°¿à°¤ WiFi నెటà±à°µà°°à±à°•à± à°¦à±à°µà°¾à°°à°¾ à°…à°¨à±à°¸à°‚ధానపౠభాగసà±à°µà°¾à°®à±à°¯à°®à±."
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
-msgid "Connection sharing via an open WiFi network"
-msgstr "ఓపెనౠWiFi నెటà±à°µà°°à±à°•à± à°¦à±à°µà°¾à°°à°¾ à°…à°¨à±à°¸à°‚ధానపౠభాగసà±à°µà°¾à°®à±à°¯à°®à±"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
-msgid "Modify persistent system hostname"
-msgstr "నిరంతర సిసà±à°Ÿà°®à± హోసà±à°Ÿà±à°¨à°¾à°®à°®à± మారà±à°šà±à°®à±"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
-msgid "Modify system connections"
-msgstr "సిసà±à°Ÿà°®à± à°…à°¨à±à°¸à°‚ధానమà±à°²à°¨à± సవరించà±à°®à±"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
-msgid "System policy prevents modification of system settings"
-msgstr "సిసà±à°Ÿà°®à± అమరికలౠసవరించà±à°Ÿà°•à± సిసà±à°Ÿà°®à± పాలసి నిరోధిసà±à°¤à±à°‚ది"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
-msgid "System policy prevents modification of the persistent system hostname"
-msgstr "నిరంతర సిసà±à°Ÿà°®à± హోసà±à°Ÿà±à°¨à°¾à°®à°®à±à°¨à± సవరించà±à°Ÿà°¨à± సిసà±à°Ÿà°®à± విధానమౠనిరోధించà±à°šà±à°¨à±à°¨à°¦à°¿"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
-msgid "System policy prevents sharing connections via a protected WiFi network"
-msgstr "à°°à°•à±à°·à°¿à°¤ WiFi నెటà±à°µà°°à±à°•à± à°¦à±à°µà°¾à°°à°¾ à°…à°¨à±à°¸à°‚ధానమà±à°²à°¨à± భాగసà±à°µà°¾à°®à±à°¯à°ªà°°à°šà±à°Ÿ సిసà±à°Ÿà°®à± విధానమౠనిరోధించà±à°šà±à°¨à±à°¨à°¦à°¿"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
-msgid "System policy prevents sharing connections via an open WiFi network"
-msgstr "ఓపెనౠWiFi నెటà±à°µà°°à±à°•à± à°¦à±à°µà°¾à°°à°¾ à°…à°¨à±à°¸à°‚ధానమà±à°²à°¨à± భాగసà±à°µà°¾à°®à±à°¯à°ªà°°à°šà±à°Ÿ సిసà±à°Ÿà°®à± విధానమౠనిరోధించà±à°šà±à°¨à±à°¨à°¦à°¿"
+#~ msgid "IP6-SETTINGS"
+#~ msgstr "IP6-SETTINGS"
+#~ msgid "IP6-DNS"
+#~ msgstr "IP6-DNS"
diff --git a/po/vi.po b/po/vi.po
index cca7c1bf66..362d2f7a6b 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -57,11 +57,11 @@ msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgstr ""
"Tùy chá»n không hợp lệ. Hãy sá»­ dụng tùy chá»n trợ giúp « --help » để xem má»™t danh sách các tùy chá»n hợp lệ.\n"
-#: ../src/named-manager/nm-named-manager.c:218
+#: ../src/dns-manager/nm-dns-manager.c:218
msgid "NOTE: the glibc resolver does not support more than 3 nameservers."
msgstr "GHI CHÚ : hàm giải quyết glibc chỉ hỗ trợ đến 3 máy phục vụ tên."
-#: ../src/named-manager/nm-named-manager.c:220
+#: ../src/dns-manager/nm-dns-manager.c:220
msgid "The nameservers listed below may not be recognized."
msgstr "Những máy phục vụ tên được liệt kê dưới đây có lẽ không nhận ra được."
diff --git a/po/zh_CN.po b/po/zh_CN.po
index d1e17ae850..81e2e6b6a2 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -4,92 +4,94 @@
# This file is distributed under the same license as the NetworkManager package.
#
# Funda Wang <fundawang@linux.net.cn>, 2004.
-# Aron Xu <happyaron.xu@gmail.com>, 2009.
# Leah Liu <lliu@redhat.com>, 2010.
+# Aron Xu <happyaron.xu@gmail.com>, 2009, 2010.
+#
msgid ""
msgstr ""
-"Project-Id-Version: zh_CN\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-06 14:31+0530\n"
-"PO-Revision-Date: 2010-05-10 19:25+1000\n"
-"Last-Translator: Leah Liu <lliu@redhat.com>\n"
-"Language-Team: Wei Liu\n"
+"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-08-11 03:24+0000\n"
+"PO-Revision-Date: 2010-08-11 21:16+0800\n"
+"Last-Translator: Aron Xu <happyaron.xu@gmail.com>\n"
+"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: KBabel 1.11.4\n"
-#: ../cli/src/connections.c:59 ../cli/src/connections.c:74
-#: ../cli/src/devices.c:85 ../cli/src/devices.c:98 ../cli/src/devices.c:108
-#: ../cli/src/devices.c:118 ../cli/src/devices.c:131 ../cli/src/devices.c:142
-#: ../cli/src/devices.c:152
+#: ../cli/src/connections.c: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
msgid "NAME"
msgstr "å称"
#. 0
-#: ../cli/src/connections.c:60 ../cli/src/connections.c:75
+#: ../cli/src/connections.c:61 ../cli/src/connections.c:76
msgid "UUID"
msgstr "UUID"
#. 1
-#: ../cli/src/connections.c:61
+#: ../cli/src/connections.c:62
msgid "DEVICES"
msgstr "设备"
#. 2
-#: ../cli/src/connections.c:62 ../cli/src/connections.c:77
+#: ../cli/src/connections.c:63 ../cli/src/connections.c:78
msgid "SCOPE"
msgstr "范围"
#. 3
-#: ../cli/src/connections.c:63
+#: ../cli/src/connections.c:64
msgid "DEFAULT"
msgstr "默认"
#. 4
-#: ../cli/src/connections.c:64
+#: ../cli/src/connections.c:65
msgid "DBUS-SERVICE"
msgstr "DBUS æœåŠ¡"
#. 5
-#: ../cli/src/connections.c:65
+#: ../cli/src/connections.c:66
msgid "SPEC-OBJECT"
msgstr "SPEC 对象"
#. 6
-#: ../cli/src/connections.c:66
+#: ../cli/src/connections.c:67
msgid "VPN"
msgstr "VPN"
#. 1
#. 0
#. 1
-#: ../cli/src/connections.c:76 ../cli/src/devices.c:61 ../cli/src/devices.c:87
+#: ../cli/src/connections.c:77 ../cli/src/devices.c:62 ../cli/src/devices.c:90
msgid "TYPE"
msgstr "类型"
#. 3
-#: ../cli/src/connections.c:78
+#: ../cli/src/connections.c:79
msgid "TIMESTAMP"
msgstr "时间戳"
#. 4
-#: ../cli/src/connections.c:79
+#: ../cli/src/connections.c:80
msgid "TIMESTAMP-REAL"
msgstr "真实时间戳"
#. 5
-#: ../cli/src/connections.c:80
+#: ../cli/src/connections.c:81
msgid "AUTOCONNECT"
msgstr "自动连接"
#. 6
-#: ../cli/src/connections.c:81
+#: ../cli/src/connections.c:82
msgid "READONLY"
msgstr "åªè¯»"
-#: ../cli/src/connections.c:157
+#: ../cli/src/connections.c:158
#, c-format
msgid ""
"Usage: nmcli con { COMMAND | help }\n"
@@ -101,8 +103,8 @@ msgid ""
"<timeout>]\n"
" down id <id> | uuid <id>\n"
msgstr ""
-"用法:nmcli con { COMMAND | help }\n"
-" COMMAND := { list | status | up | down }\n"
+"用法:nmcli con { 命令 | help }\n"
+" 命令 := { list | status | up | down }\n"
"\n"
" list [id <id> | uuid <id> | system | user]\n"
" status\n"
@@ -110,514 +112,524 @@ msgstr ""
"<timeout>]\n"
" down id <id> | uuid <id>\n"
-#: ../cli/src/connections.c:197 ../cli/src/connections.c:536
+#: ../cli/src/connections.c:198 ../cli/src/connections.c:537
#, c-format
msgid "Error: 'con list': %s"
msgstr "错误:'con list': %s"
-#: ../cli/src/connections.c:199 ../cli/src/connections.c:538
+#: ../cli/src/connections.c:200 ../cli/src/connections.c:539
#, c-format
msgid "Error: 'con list': %s; allowed fields: %s"
msgstr "错误:'con list': %sï¼›å…许的字段:%s"
-#: ../cli/src/connections.c:207
+#: ../cli/src/connections.c:208
msgid "Connection details"
msgstr "连接详情"
-#: ../cli/src/connections.c:381 ../cli/src/connections.c:601
+#: ../cli/src/connections.c:382 ../cli/src/connections.c:602
msgid "system"
msgstr "系统"
-#: ../cli/src/connections.c:381 ../cli/src/connections.c:601
+#: ../cli/src/connections.c:382 ../cli/src/connections.c:602
msgid "user"
msgstr "用户"
-#: ../cli/src/connections.c:383
+#: ../cli/src/connections.c:384
msgid "never"
msgstr "从ä¸"
#. "CAPABILITIES"
#. Print header
#. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:384 ../cli/src/connections.c:385
-#: ../cli/src/connections.c:602 ../cli/src/connections.c:605
-#: ../cli/src/devices.c:388 ../cli/src/devices.c:513 ../cli/src/devices.c:539
-#: ../cli/src/devices.c:540 ../cli/src/devices.c:541 ../cli/src/devices.c:542
-#: ../cli/src/devices.c:543 ../cli/src/settings.c:504
-#: ../cli/src/settings.c:544 ../cli/src/settings.c:643
-#: ../cli/src/settings.c:912 ../cli/src/settings.c:913
-#: ../cli/src/settings.c:915 ../cli/src/settings.c:917
-#: ../cli/src/settings.c:1042 ../cli/src/settings.c:1043
-#: ../cli/src/settings.c:1044 ../cli/src/settings.c:1123
-#: ../cli/src/settings.c:1124 ../cli/src/settings.c:1125
-#: ../cli/src/settings.c:1126 ../cli/src/settings.c:1127
-#: ../cli/src/settings.c:1128 ../cli/src/settings.c:1129
-#: ../cli/src/settings.c:1130 ../cli/src/settings.c:1131
-#: ../cli/src/settings.c:1132 ../cli/src/settings.c:1133
-#: ../cli/src/settings.c:1134 ../cli/src/settings.c:1135
-#: ../cli/src/settings.c:1210
+#: ../cli/src/connections.c: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
msgid "yes"
msgstr "是"
-#: ../cli/src/connections.c:384 ../cli/src/connections.c:385
-#: ../cli/src/connections.c:602 ../cli/src/connections.c:605
-#: ../cli/src/devices.c:388 ../cli/src/devices.c:513 ../cli/src/devices.c:539
-#: ../cli/src/devices.c:540 ../cli/src/devices.c:541 ../cli/src/devices.c:542
-#: ../cli/src/devices.c:543 ../cli/src/settings.c:504
-#: ../cli/src/settings.c:506 ../cli/src/settings.c:544
-#: ../cli/src/settings.c:643 ../cli/src/settings.c:912
-#: ../cli/src/settings.c:913 ../cli/src/settings.c:915
-#: ../cli/src/settings.c:917 ../cli/src/settings.c:1042
-#: ../cli/src/settings.c:1043 ../cli/src/settings.c:1044
-#: ../cli/src/settings.c:1123 ../cli/src/settings.c:1124
-#: ../cli/src/settings.c:1125 ../cli/src/settings.c:1126
-#: ../cli/src/settings.c:1127 ../cli/src/settings.c:1128
-#: ../cli/src/settings.c:1129 ../cli/src/settings.c:1130
-#: ../cli/src/settings.c:1131 ../cli/src/settings.c:1132
-#: ../cli/src/settings.c:1133 ../cli/src/settings.c:1134
-#: ../cli/src/settings.c:1135 ../cli/src/settings.c:1210
+#: ../cli/src/connections.c: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
msgid "no"
msgstr "å¦"
-#: ../cli/src/connections.c:457 ../cli/src/connections.c:500
+#: ../cli/src/connections.c:458 ../cli/src/connections.c:501
msgid "System connections"
msgstr "系统连接"
-#: ../cli/src/connections.c:462 ../cli/src/connections.c:513
+#: ../cli/src/connections.c:463 ../cli/src/connections.c:514
msgid "User connections"
msgstr "用户连接"
-#: ../cli/src/connections.c:474 ../cli/src/connections.c:1334
-#: ../cli/src/connections.c:1350 ../cli/src/connections.c:1359
-#: ../cli/src/connections.c:1370 ../cli/src/connections.c:1452
-#: ../cli/src/devices.c:864 ../cli/src/devices.c:874 ../cli/src/devices.c:973
-#: ../cli/src/devices.c:980
+#: ../cli/src/connections.c: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
#, c-format
msgid "Error: %s argument is missing."
msgstr "错误:缺少 %s å‚数。"
-#: ../cli/src/connections.c:487
+#: ../cli/src/connections.c:488
#, c-format
msgid "Error: %s - no such connection."
msgstr "错误:%s - 没有这个连接。"
-#: ../cli/src/connections.c:519 ../cli/src/connections.c:1383
-#: ../cli/src/connections.c:1470 ../cli/src/devices.c:687
-#: ../cli/src/devices.c:754 ../cli/src/devices.c:888 ../cli/src/devices.c:986
+#: ../cli/src/connections.c: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
#, c-format
msgid "Unknown parameter: %s\n"
msgstr "未知å‚数:%s\n"
-#: ../cli/src/connections.c:528
+#: ../cli/src/connections.c:529
#, c-format
msgid "Error: no valid parameter specified."
msgstr "错误:没有指定有效å‚数。"
-#: ../cli/src/connections.c:543 ../cli/src/connections.c:1572
-#: ../cli/src/devices.c:1192 ../cli/src/network-manager.c:274
+#: ../cli/src/connections.c:544 ../cli/src/connections.c:1577
+#: ../cli/src/devices.c:1293 ../cli/src/network-manager.c:274
#, c-format
msgid "Error: %s."
msgstr "错误:%s。"
-#: ../cli/src/connections.c:649
+#: ../cli/src/connections.c:650
#, c-format
msgid "Error: 'con status': %s"
msgstr "错误:'con status': %s"
-#: ../cli/src/connections.c:651
+#: ../cli/src/connections.c:652
#, c-format
msgid "Error: 'con status': %s; allowed fields: %s"
msgstr "错误:'con status': %sï¼›å…许的字段:%s"
-#: ../cli/src/connections.c:658
+#: ../cli/src/connections.c:659
msgid "Active connections"
msgstr "活跃连接"
-#: ../cli/src/connections.c:1026
+#: ../cli/src/connections.c:1027
#, c-format
msgid "no active connection on device '%s'"
msgstr "设备 '%s' 中没有活跃连接"
-#: ../cli/src/connections.c:1034
+#: ../cli/src/connections.c:1035
#, c-format
msgid "no active connection or device"
msgstr "没有活跃连接或者设备"
-#: ../cli/src/connections.c:1084
+#: ../cli/src/connections.c:1085
#, c-format
msgid "device '%s' not compatible with connection '%s'"
msgstr "设备 '%s' ä¸å…¼å®¹è¿žæŽ¥ '%s'"
-#: ../cli/src/connections.c:1086
+#: ../cli/src/connections.c:1087
#, c-format
msgid "no device found for connection '%s'"
msgstr "没有找到å¯ç”¨äºŽè¿žæŽ¥ '%s' 的设备"
-#: ../cli/src/connections.c:1097
+#: ../cli/src/connections.c:1098
msgid "activating"
msgstr "激活中"
-#: ../cli/src/connections.c:1099
+#: ../cli/src/connections.c:1100
msgid "activated"
-msgstr "激活的"
+msgstr "已激活"
-#: ../cli/src/connections.c:1102 ../cli/src/connections.c:1125
-#: ../cli/src/connections.c:1158 ../cli/src/devices.c:224
-#: ../cli/src/devices.c:514 ../cli/src/network-manager.c:92
-#: ../cli/src/network-manager.c:145 ../cli/src/settings.c:469
+#: ../cli/src/connections.c: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
msgid "unknown"
msgstr "未知"
-#: ../cli/src/connections.c:1111
+#: ../cli/src/connections.c:1112
msgid "VPN connecting (prepare)"
-msgstr "VPN 连接(准备)"
+msgstr "VPN 连接(准备)"
-#: ../cli/src/connections.c:1113
+#: ../cli/src/connections.c:1114
msgid "VPN connecting (need authentication)"
-msgstr "VPN 连接中(需è¦éªŒè¯ï¼‰"
+msgstr "VPN 连接中(需è¦éªŒè¯)"
-#: ../cli/src/connections.c:1115
+#: ../cli/src/connections.c:1116
msgid "VPN connecting"
msgstr "VPN 连接中"
-#: ../cli/src/connections.c:1117
+#: ../cli/src/connections.c:1118
msgid "VPN connecting (getting IP configuration)"
-msgstr "VPN è¿žæŽ¥ä¸­ï¼ˆèŽ·å– IP é…置)"
+msgstr "VPN 连接中(èŽ·å– IP é…ç½®)"
-#: ../cli/src/connections.c:1119
+#: ../cli/src/connections.c:1120
msgid "VPN connected"
-msgstr "VNP 连接"
+msgstr "VPN 连接"
-#: ../cli/src/connections.c:1121
+#: ../cli/src/connections.c:1122
msgid "VPN connection failed"
msgstr "VPN 连接失败"
-#: ../cli/src/connections.c:1123
+#: ../cli/src/connections.c:1124
msgid "VPN disconnected"
msgstr "断开 VPN 连接"
-#: ../cli/src/connections.c:1134
+#: ../cli/src/connections.c:1135
msgid "unknown reason"
msgstr "未知原因"
-#: ../cli/src/connections.c:1136
+#: ../cli/src/connections.c:1137
msgid "none"
msgstr "æ— "
-#: ../cli/src/connections.c:1138
+#: ../cli/src/connections.c:1139
msgid "the user was disconnected"
-msgstr "断开连接的用户"
+msgstr "用户已断开连接"
-#: ../cli/src/connections.c:1140
+#: ../cli/src/connections.c:1141
msgid "the base network connection was interrupted"
msgstr "基点网络连接中断"
-#: ../cli/src/connections.c:1142
+#: ../cli/src/connections.c:1143
msgid "the VPN service stopped unexpectedly"
msgstr "VPN æœåŠ¡æ„外åœæ­¢"
-#: ../cli/src/connections.c:1144
+#: ../cli/src/connections.c:1145
msgid "the VPN service returned invalid configuration"
msgstr "VPN æœåŠ¡è¿”回无效é…ç½®"
-#: ../cli/src/connections.c:1146
+#: ../cli/src/connections.c:1147
msgid "the connection attempt timed out"
msgstr "连接å°è¯•è¶…æ—¶"
-#: ../cli/src/connections.c:1148
+#: ../cli/src/connections.c:1149
msgid "the VPN service did not start in time"
msgstr "VPN 连接没有按时å¯åŠ¨"
-#: ../cli/src/connections.c:1150
+#: ../cli/src/connections.c:1151
msgid "the VPN service failed to start"
msgstr "VPN æœåŠ¡å¯åŠ¨å¤±è´¥"
-#: ../cli/src/connections.c:1152
+#: ../cli/src/connections.c:1153
msgid "no valid VPN secrets"
-msgstr "没有有效 VPN secret"
+msgstr "没有有效的 VPN 加密"
-#: ../cli/src/connections.c:1154
+#: ../cli/src/connections.c:1155
msgid "invalid VPN secrets"
-msgstr "无效 VPN secret"
+msgstr "无效 VPN 加密"
-#: ../cli/src/connections.c:1156
+#: ../cli/src/connections.c:1157
msgid "the connection was removed"
msgstr "连接被删除"
-#: ../cli/src/connections.c:1170
+#: ../cli/src/connections.c:1171
#, c-format
msgid "state: %s\n"
msgstr "状æ€ï¼š%s\n"
-#: ../cli/src/connections.c:1173 ../cli/src/connections.c:1199
+#: ../cli/src/connections.c:1174 ../cli/src/connections.c:1200
#, c-format
msgid "Connection activated\n"
-msgstr "连接被激活\n"
+msgstr "连接已激活\n"
-#: ../cli/src/connections.c:1176
+#: ../cli/src/connections.c:1177
#, c-format
msgid "Error: Connection activation failed."
msgstr "错误:激活连接失败。"
-#: ../cli/src/connections.c:1195
+#: ../cli/src/connections.c:1196
#, c-format
msgid "state: %s (%d)\n"
msgstr "状æ€ï¼š%s (%d)\n"
-#: ../cli/src/connections.c:1205
+#: ../cli/src/connections.c:1206
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "错误:激活连接失败:%s。"
-#: ../cli/src/connections.c:1222 ../cli/src/devices.c:811
+#: ../cli/src/connections.c:1223 ../cli/src/devices.c:909
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "错误:超时 %d 秒过期。"
-#: ../cli/src/connections.c:1265
+#: ../cli/src/connections.c:1266
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "错误:激活连接失败:%s"
-#: ../cli/src/connections.c:1279
+#: ../cli/src/connections.c:1280
#, c-format
msgid "Error: Obtaining active connection for '%s' failed."
msgstr "é”™è¯¯ï¼šèŽ·å– '%s' 的活跃连接失败。"
-#: ../cli/src/connections.c:1288
+#: ../cli/src/connections.c:1289
#, c-format
msgid "Active connection state: %s\n"
msgstr "活跃连接状æ€ï¼š%s\n"
-#: ../cli/src/connections.c:1289
+#: ../cli/src/connections.c:1290
#, c-format
msgid "Active connection path: %s\n"
msgstr "活跃连接路径:%s\n"
-#: ../cli/src/connections.c:1343 ../cli/src/connections.c:1461
+#: ../cli/src/connections.c:1344 ../cli/src/connections.c:1465
#, c-format
msgid "Error: Unknown connection: %s."
msgstr "错误:未知连接:%s"
-#: ../cli/src/connections.c:1378 ../cli/src/devices.c:882
+#: ../cli/src/connections.c:1379 ../cli/src/devices.c:980
#, c-format
msgid "Error: timeout value '%s' is not valid."
msgstr "错误:超时值 '%s' 无效。"
-#: ../cli/src/connections.c:1391 ../cli/src/connections.c:1478
+#: ../cli/src/connections.c:1392 ../cli/src/connections.c:1482
#, c-format
msgid "Error: id or uuid has to be specified."
-msgstr "错误:必须指定 id 或者 uuid。"
+msgstr "错误:必须指定 ID 或者 UUID。"
-#: ../cli/src/connections.c:1411
+#: ../cli/src/connections.c:1412
#, c-format
msgid "Error: No suitable device found: %s."
msgstr "错误:没有找到åˆé€‚的设备:%s。"
-#: ../cli/src/connections.c:1413
+#: ../cli/src/connections.c:1414
#, c-format
msgid "Error: No suitable device found."
msgstr "错误:没有找到åˆé€‚的设备。"
-#: ../cli/src/connections.c:1505
+#: ../cli/src/connections.c:1509
#, c-format
msgid "Warning: Connection not active\n"
msgstr "警告:连接没有激活\n"
-#: ../cli/src/connections.c:1561
+#: ../cli/src/connections.c:1566
#, c-format
msgid "Error: 'con' command '%s' is not valid."
msgstr "错误:'con' 命令 '%s' 无效。"
-#: ../cli/src/connections.c:1597
+#: ../cli/src/connections.c:1602
#, c-format
msgid "Error: could not connect to D-Bus."
msgstr "错误:无法连接到 D-Bus。"
-#: ../cli/src/connections.c:1604
+#: ../cli/src/connections.c:1609
#, c-format
msgid "Error: Could not get system settings."
msgstr "错误:无法获得系统设置。"
-#: ../cli/src/connections.c:1612
+#: ../cli/src/connections.c:1617
#, c-format
msgid "Error: Could not get user settings."
msgstr "错误:无法获得用户设置。"
-#: ../cli/src/connections.c:1622
+#: ../cli/src/connections.c:1627
#, c-format
msgid "Error: Can't obtain connections: settings services are not running."
msgstr "错误:无法获得连接:设定æœåŠ¡æ²¡æœ‰è¿è¡Œã€‚"
#. 0
#. 9
-#: ../cli/src/devices.c:60 ../cli/src/devices.c:86 ../cli/src/devices.c:162
+#: ../cli/src/devices.c:61 ../cli/src/devices.c:89 ../cli/src/devices.c:184
msgid "DEVICE"
msgstr "设备"
#. 1
#. 4
#. 0
-#: ../cli/src/devices.c:62 ../cli/src/devices.c:90
+#: ../cli/src/devices.c:63 ../cli/src/devices.c:93
#: ../cli/src/network-manager.c:36
msgid "STATE"
msgstr "状æ€"
-#: ../cli/src/devices.c:71
+#: ../cli/src/devices.c:72
msgid "GENERAL"
msgstr "常规"
#. 0
-#: ../cli/src/devices.c:72
+#: ../cli/src/devices.c:73
msgid "CAPABILITIES"
msgstr "功能"
#. 1
-#: ../cli/src/devices.c:73
+#: ../cli/src/devices.c:74
msgid "WIFI-PROPERTIES"
msgstr "WIFI 属性"
#. 2
-#: ../cli/src/devices.c:74
+#: ../cli/src/devices.c:75
msgid "AP"
msgstr "AP"
#. 3
-#: ../cli/src/devices.c:75
+#: ../cli/src/devices.c:76
msgid "WIRED-PROPERTIES"
msgstr "有线连接属性"
#. 4
-#: ../cli/src/devices.c:76
+#: ../cli/src/devices.c:77
msgid "IP4-SETTINGS"
msgstr "IP4 设置"
#. 5
-#: ../cli/src/devices.c:77
+#: ../cli/src/devices.c:78
msgid "IP4-DNS"
msgstr "IP4-DNS"
+#. 6
+#: ../cli/src/devices.c:79
+msgid "IP6-SETTINGS"
+msgstr "IP6 设置"
+
+#. 7
+#: ../cli/src/devices.c:80
+msgid "IP6-DNS"
+msgstr "IP6-DNS"
+
#. 2
-#: ../cli/src/devices.c:88
+#: ../cli/src/devices.c:91
msgid "DRIVER"
msgstr "驱动程åº"
#. 3
-#: ../cli/src/devices.c:89
+#: ../cli/src/devices.c:92
msgid "HWADDR"
msgstr "硬盘"
#. 0
-#: ../cli/src/devices.c:99
+#: ../cli/src/devices.c:102
msgid "CARRIER-DETECT"
msgstr "容器探测"
#. 1
-#: ../cli/src/devices.c:100
+#: ../cli/src/devices.c:103
msgid "SPEED"
msgstr "速度"
#. 0
-#: ../cli/src/devices.c:109
+#: ../cli/src/devices.c:112
msgid "CARRIER"
msgstr "容器"
#. 0
-#: ../cli/src/devices.c:119
+#: ../cli/src/devices.c:122
msgid "WEP"
msgstr "WEP"
#. 1
-#: ../cli/src/devices.c:120
+#: ../cli/src/devices.c:123
msgid "WPA"
msgstr "WPA"
#. 2
-#: ../cli/src/devices.c:121
+#: ../cli/src/devices.c:124
msgid "WPA2"
msgstr "WPA2"
#. 3
-#: ../cli/src/devices.c:122
+#: ../cli/src/devices.c:125
msgid "TKIP"
msgstr "TKIP"
#. 4
-#: ../cli/src/devices.c:123
+#: ../cli/src/devices.c:126
msgid "CCMP"
msgstr "CCMP"
#. 0
-#: ../cli/src/devices.c:132
+#: ../cli/src/devices.c:135 ../cli/src/devices.c:146
msgid "ADDRESS"
msgstr "地å€"
#. 1
-#: ../cli/src/devices.c:133
+#: ../cli/src/devices.c:136 ../cli/src/devices.c:147
msgid "PREFIX"
msgstr "å‰ç¼€"
#. 2
-#: ../cli/src/devices.c:134
+#: ../cli/src/devices.c:137 ../cli/src/devices.c:148
msgid "GATEWAY"
msgstr "网关"
#. 0
-#: ../cli/src/devices.c:143
+#: ../cli/src/devices.c:157 ../cli/src/devices.c:166
msgid "DNS"
msgstr "DNS"
#. 0
-#: ../cli/src/devices.c:153
+#: ../cli/src/devices.c:175
msgid "SSID"
msgstr "SSID"
#. 1
-#: ../cli/src/devices.c:154
+#: ../cli/src/devices.c:176
msgid "BSSID"
msgstr "BSSID"
#. 2
-#: ../cli/src/devices.c:155
+#: ../cli/src/devices.c:177
msgid "MODE"
msgstr "åž‹å·"
#. 3
-#: ../cli/src/devices.c:156
+#: ../cli/src/devices.c:178
msgid "FREQ"
msgstr "FREQ"
#. 4
-#: ../cli/src/devices.c:157
+#: ../cli/src/devices.c:179
msgid "RATE"
msgstr "频率"
#. 5
-#: ../cli/src/devices.c:158
+#: ../cli/src/devices.c:180
msgid "SIGNAL"
msgstr "ä¿¡å·"
#. 6
-#: ../cli/src/devices.c:159
+#: ../cli/src/devices.c:181
msgid "SECURITY"
msgstr "安全性"
#. 7
-#: ../cli/src/devices.c:160
+#: ../cli/src/devices.c:182
msgid "WPA-FLAGS"
msgstr "WPA-标志"
#. 8
-#: ../cli/src/devices.c:161
+#: ../cli/src/devices.c:183
msgid "RSN-FLAGS"
msgstr "RSN-标志"
#. 10
-#: ../cli/src/devices.c:163
+#: ../cli/src/devices.c:185
msgid "ACTIVE"
msgstr "活跃"
-#: ../cli/src/devices.c:186
+#: ../cli/src/devices.c:208
#, c-format
msgid ""
"Usage: nmcli dev { COMMAND | help }\n"
@@ -640,204 +652,205 @@ msgstr ""
" wifi [list [iface <iface>] | apinfo iface <iface> hwaddr <hwaddr>]\n"
"\n"
-#: ../cli/src/devices.c:206
+#: ../cli/src/devices.c:228
msgid "unmanaged"
-msgstr "未管ç†çš„"
+msgstr "未管ç†"
-#: ../cli/src/devices.c:208
+#: ../cli/src/devices.c:230
msgid "unavailable"
-msgstr "ä¸å¯ç”¨çš„"
+msgstr "ä¸å¯ç”¨"
-#: ../cli/src/devices.c:210 ../cli/src/network-manager.c:89
+#: ../cli/src/devices.c:232 ../cli/src/network-manager.c:89
msgid "disconnected"
-msgstr "断开连接"
+msgstr "已断开"
-#: ../cli/src/devices.c:212
+#: ../cli/src/devices.c:234
msgid "connecting (prepare)"
-msgstr "连接中(准备)"
+msgstr "连接中(准备)"
-#: ../cli/src/devices.c:214
+#: ../cli/src/devices.c:236
msgid "connecting (configuring)"
-msgstr "连接中(é…置中)"
+msgstr "连接中(é…ç½®)"
-#: ../cli/src/devices.c:216
+#: ../cli/src/devices.c:238
msgid "connecting (need authentication)"
-msgstr "连接中(需è¦éªŒè¯ï¼‰"
+msgstr "连接中(需è¦éªŒè¯)"
-#: ../cli/src/devices.c:218
+#: ../cli/src/devices.c:240
msgid "connecting (getting IP configuration)"
-msgstr "连接中(获得 IP é…置)"
+msgstr "连接中(获得 IP é…ç½®)"
-#: ../cli/src/devices.c:220 ../cli/src/network-manager.c:87
+#: ../cli/src/devices.c:242 ../cli/src/network-manager.c:87
msgid "connected"
msgstr "连接的"
-#: ../cli/src/devices.c:222
+#: ../cli/src/devices.c:244
msgid "connection failed"
msgstr "连接失败"
-#: ../cli/src/devices.c:245 ../cli/src/devices.c:380
+#: ../cli/src/devices.c:267 ../cli/src/devices.c:424
msgid "Unknown"
msgstr "未知"
-#: ../cli/src/devices.c:277
+#: ../cli/src/devices.c:299
msgid "(none)"
-msgstr "(无)"
+msgstr "(æ— )"
-#: ../cli/src/devices.c:302
+#: ../cli/src/devices.c:324
#, c-format
msgid "%s: error converting IP4 address 0x%X"
msgstr "%sï¼šè½¬æ¢ IP4 åœ°å€ 0x%X 出错"
-#: ../cli/src/devices.c:349
+#: ../cli/src/devices.c:393
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:350
+#: ../cli/src/devices.c:394
#, c-format
msgid "%u MB/s"
msgstr "%u MB/s"
-#: ../cli/src/devices.c:359
+#: ../cli/src/devices.c:403
msgid "Encrypted: "
-msgstr "加密的:"
+msgstr "加密:"
-#: ../cli/src/devices.c:364
+#: ../cli/src/devices.c:408
msgid "WEP "
msgstr "WEP"
-#: ../cli/src/devices.c:366
+#: ../cli/src/devices.c:410
msgid "WPA "
msgstr "WPA"
-#: ../cli/src/devices.c:368
+#: ../cli/src/devices.c:412
msgid "WPA2 "
msgstr "WPA2"
-#: ../cli/src/devices.c:371
+#: ../cli/src/devices.c:415
msgid "Enterprise "
msgstr "ä¼ä¸šçº§"
-#: ../cli/src/devices.c:380
+#: ../cli/src/devices.c:424
msgid "Ad-Hoc"
msgstr "Ad-Hoc"
-#: ../cli/src/devices.c:380
+#: ../cli/src/devices.c:424
msgid "Infrastructure"
msgstr "基础构架"
-#: ../cli/src/devices.c:442
+#: ../cli/src/devices.c:486
#, c-format
msgid "Error: 'dev list': %s"
msgstr "错误:'dev list': %s"
-#: ../cli/src/devices.c:444
+#: ../cli/src/devices.c:488
#, c-format
msgid "Error: 'dev list': %s; allowed fields: %s"
msgstr "错误:'dev list': %sï¼›å…许的字段:%s"
-#: ../cli/src/devices.c:453
+#: ../cli/src/devices.c:497
msgid "Device details"
msgstr "设备详情"
-#: ../cli/src/devices.c:483 ../cli/src/devices.c:827
+#: ../cli/src/devices.c:527 ../cli/src/devices.c:925
msgid "(unknown)"
-msgstr "(未知)"
+msgstr "(未知)"
-#: ../cli/src/devices.c:484
+#: ../cli/src/devices.c:528
msgid "unknown)"
-msgstr "未知)"
+msgstr "未知)"
-#: ../cli/src/devices.c:510
+#: ../cli/src/devices.c:554
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
#. Print header
#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:583
+#: ../cli/src/devices.c:627
msgid "on"
msgstr "å¼€"
-#: ../cli/src/devices.c:583
+#: ../cli/src/devices.c:627
msgid "off"
msgstr "å…³"
-#: ../cli/src/devices.c:710
+#: ../cli/src/devices.c:808
#, c-format
msgid "Error: 'dev status': %s"
msgstr "错误:'dev status': %s"
-#: ../cli/src/devices.c:712
+#: ../cli/src/devices.c:810
#, c-format
msgid "Error: 'dev status': %s; allowed fields: %s"
msgstr "错误:'dev status': %sï¼›å…许的字段:%s"
-#: ../cli/src/devices.c:719
+#: ../cli/src/devices.c:817
msgid "Status of devices"
msgstr "设备状æ€"
-#: ../cli/src/devices.c:747
+#: ../cli/src/devices.c:845
#, c-format
msgid "Error: '%s' argument is missing."
msgstr "错误:缺少 '%s' å‚数。"
-#: ../cli/src/devices.c:776 ../cli/src/devices.c:915 ../cli/src/devices.c:1035
+#: ../cli/src/devices.c:874 ../cli/src/devices.c:1013
+#: ../cli/src/devices.c:1136
#, c-format
msgid "Error: Device '%s' not found."
msgstr "错误:没有找到设备 '%s'。"
-#: ../cli/src/devices.c:799
+#: ../cli/src/devices.c:897
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "æˆåŠŸï¼šæˆåŠŸæ–­å¼€è®¾å¤‡ '%s'。"
-#: ../cli/src/devices.c:824
+#: ../cli/src/devices.c:922
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
-msgstr "错误:断开设备 '%s'(%s)失败:%s"
+msgstr "错误:断开设备 '%s'(%s)失败:%s"
-#: ../cli/src/devices.c:832
+#: ../cli/src/devices.c:930
#, c-format
msgid "Device state: %d (%s)\n"
msgstr "设备状æ€ï¼š%d (%s)\n"
-#: ../cli/src/devices.c:896
+#: ../cli/src/devices.c:994
#, c-format
msgid "Error: iface has to be specified."
msgstr "错误:没有指定 iface。"
-#: ../cli/src/devices.c:1011
+#: ../cli/src/devices.c:1112
#, c-format
msgid "Error: 'dev wifi': %s"
msgstr "错误:'dev wifi':%s"
-#: ../cli/src/devices.c:1013
+#: ../cli/src/devices.c:1114
#, c-format
msgid "Error: 'dev wifi': %s; allowed fields: %s"
msgstr "错误:'dev wifi': %sï¼›å…许的字段:%s"
-#: ../cli/src/devices.c:1020
+#: ../cli/src/devices.c:1121
msgid "WiFi scan list"
msgstr "WiFi 扫æ列表"
-#: ../cli/src/devices.c:1055 ../cli/src/devices.c:1109
+#: ../cli/src/devices.c:1156 ../cli/src/devices.c:1210
#, c-format
msgid "Error: Access point with hwaddr '%s' not found."
-msgstr "错误:没有找到使用 hwaddr '%s' 的访问点。"
+msgstr "é”™è¯¯ï¼šæ²¡æœ‰æ‰¾åˆ°ä½¿ç”¨ç¡¬ä»¶åœ°å€ '%s' 的访问点。"
-#: ../cli/src/devices.c:1072
+#: ../cli/src/devices.c:1173
#, c-format
msgid "Error: Device '%s' is not a WiFi device."
msgstr "错误:设备 '%s' ä¸æ˜¯ WiFi 设备。"
-#: ../cli/src/devices.c:1136
+#: ../cli/src/devices.c:1237
#, c-format
msgid "Error: 'dev wifi' command '%s' is not valid."
msgstr "错误:'dev wifi' 命令 '%s' 无效。"
-#: ../cli/src/devices.c:1183
+#: ../cli/src/devices.c:1284
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "错误:'dev' 命令 '%s' 无效。"
@@ -893,7 +906,7 @@ msgstr ""
#: ../cli/src/network-manager.c:83
msgid "asleep"
-msgstr "asleep"
+msgstr "ç¡çœ "
#: ../cli/src/network-manager.c:85
msgid "connecting"
@@ -918,13 +931,13 @@ msgstr "网络管ç†å™¨çŠ¶æ€"
#: ../cli/src/network-manager.c:142 ../cli/src/network-manager.c:143
#: ../cli/src/network-manager.c:211 ../cli/src/network-manager.c:243
msgid "enabled"
-msgstr "å¯ç”¨çš„"
+msgstr "å·²å¯ç”¨"
#: ../cli/src/network-manager.c:140 ../cli/src/network-manager.c:141
#: ../cli/src/network-manager.c:142 ../cli/src/network-manager.c:143
#: ../cli/src/network-manager.c:211 ../cli/src/network-manager.c:243
msgid "disabled"
-msgstr "ç¦ç”¨çš„"
+msgstr "å·²ç¦ç”¨"
#: ../cli/src/network-manager.c:148
msgid "running"
@@ -932,7 +945,7 @@ msgstr "è¿è¡Œä¸­"
#: ../cli/src/network-manager.c:148
msgid "not running"
-msgstr "没有è¿è¡Œ"
+msgstr "未è¿è¡Œ"
#: ../cli/src/network-manager.c:201 ../cli/src/network-manager.c:233
#, c-format
@@ -941,7 +954,7 @@ msgstr "错误:'--fields' 值 '%s' 在此无效;å…许的字段:%s"
#: ../cli/src/network-manager.c:209
msgid "WiFi enabled"
-msgstr "å¯ç”¨ WiFi"
+msgstr "å·²å¯ç”¨ WiFi"
#: ../cli/src/network-manager.c:220
#, c-format
@@ -950,7 +963,7 @@ msgstr "错误:无效 'wifi' å‚数:'%s'。"
#: ../cli/src/network-manager.c:241
msgid "WWAN enabled"
-msgstr "å¯ç”¨ WWAN"
+msgstr "å·²å¯ç”¨ WWAN"
#: ../cli/src/network-manager.c:252
#, c-format
@@ -983,18 +996,18 @@ msgid ""
" dev devices managed by NetworkManager\n"
"\n"
msgstr ""
-"用法:%s [OPTIONS] OBJECT { COMMAND | help }\n"
+"用法:%s [选项] 对象 { 命令 | help }\n"
"\n"
-"OPTIONS\n"
-" -t[erse] terse output\n"
-" -p[retty] pretty output\n"
-" -v[ersion] show program version\n"
-" -h[elp] print this help\n"
+"选项\n"
+" -t[erse] 简æ´è¾“出\n"
+" -p[retty] 美观输出\n"
+" -v[ersion] 显示程åºç‰ˆæœ¬\n"
+" -h[elp] 显示此帮助\n"
"\n"
-"OBJECT\n"
-" nm NetworkManager status\n"
-" con NetworkManager connections\n"
-" dev devices managed by NetworkManager\n"
+"对象\n"
+" nm NetworkManager 状æ€\n"
+" con NetworkManager 连接\n"
+" dev NetworkManager 管ç†çš„设备\n"
"\n"
#: ../cli/src/nmcli.c:113
@@ -1005,7 +1018,7 @@ msgstr "错误:对象 '%s' 未知,å°è¯• 'nmcli help'。"
#: ../cli/src/nmcli.c:143
#, c-format
msgid "Error: Option '--terse' is specified the second time."
-msgstr "错误:第二此指定选项 '--terse'。"
+msgstr "错误:第二次指定选项 '--terse'。"
#: ../cli/src/nmcli.c:148
#, c-format
@@ -1050,7 +1063,7 @@ msgstr "错误:选项 '%s' 未知,å°è¯• 'nmcli -help'。"
#: ../cli/src/nmcli.c:234
#, c-format
msgid "Caught signal %d, shutting down..."
-msgstr "æ•èŽ·ä¿¡å· %d,关闭中......"
+msgstr "æ•èŽ·ä¿¡å· %d,关闭..."
#: ../cli/src/nmcli.c:259
#, c-format
@@ -1061,78 +1074,79 @@ msgstr "错误:无法连接到网络管ç†å™¨ã€‚"
msgid "Success"
msgstr "æˆåŠŸ"
-#: ../cli/src/settings.c:407
+#: ../cli/src/settings.c:411
#, c-format
msgid "%d (hex-ascii-key)"
msgstr "%d (hex-ascii-key)"
-#: ../cli/src/settings.c:409
+#: ../cli/src/settings.c:413
#, c-format
msgid "%d (104/128-bit passphrase)"
-msgstr "%d(104/128 ä½å¯†ç çŸ­è¯­ï¼‰"
+msgstr "%d (104/128 ä½å¯†ç çŸ­è¯­)"
-#: ../cli/src/settings.c:412
+#: ../cli/src/settings.c:416
#, c-format
msgid "%d (unknown)"
-msgstr "%d(未知)"
+msgstr "%d (未知)"
-#: ../cli/src/settings.c:438
+#: ../cli/src/settings.c:442
msgid "0 (unknown)"
-msgstr "0(未知)"
+msgstr "0 (未知)"
-#: ../cli/src/settings.c:444
+#: ../cli/src/settings.c:448
msgid "any, "
msgstr "ä»»æ„,"
-#: ../cli/src/settings.c:446
+#: ../cli/src/settings.c:450
msgid "900 MHz, "
msgstr "900 MHz,"
-#: ../cli/src/settings.c:448
+#: ../cli/src/settings.c:452
msgid "1800 MHz, "
msgstr "1800 MHz,"
-#: ../cli/src/settings.c:450
+#: ../cli/src/settings.c:454
msgid "1900 MHz, "
msgstr "1900 MHz,"
-#: ../cli/src/settings.c:452
+#: ../cli/src/settings.c:456
msgid "850 MHz, "
msgstr "850 MHz,"
-#: ../cli/src/settings.c:454
+#: ../cli/src/settings.c:458
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 MHz,"
-#: ../cli/src/settings.c:456
+#: ../cli/src/settings.c:460
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 MHz,"
-#: ../cli/src/settings.c:458
+#: ../cli/src/settings.c:462
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 MHz,"
-#: ../cli/src/settings.c:460
+#: ../cli/src/settings.c:464
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 MHz,"
-#: ../cli/src/settings.c:462
+#: ../cli/src/settings.c:466
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 MHz,"
-#: ../cli/src/settings.c:464
+#: ../cli/src/settings.c:468
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 MHz,"
-#: ../cli/src/settings.c:466
+#: ../cli/src/settings.c:470
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 MHz,"
-#: ../cli/src/settings.c:546 ../cli/src/settings.c:708
+#: ../cli/src/settings.c:554 ../cli/src/settings.c:721
msgid "auto"
msgstr "自动"
-#: ../cli/src/settings.c:704 ../cli/src/settings.c:707 ../cli/src/utils.c:172
+#: ../cli/src/settings.c:716 ../cli/src/settings.c:719
+#: ../cli/src/settings.c:720 ../cli/src/utils.c:172
msgid "not set"
msgstr "未设置"
@@ -1229,7 +1243,7 @@ msgstr "没有足够的空间储存文件数æ®ã€‚"
#: ../libnm-util/crypto.c:324
#, c-format
msgid "IV must be an even number of bytes in length."
-msgstr "IV 长度必须是å¶æ•°å­—节。"
+msgstr "åˆå§‹å‘é‡é•¿åº¦å¿…须是å¶æ•°å­—节。"
#: ../libnm-util/crypto.c:333
#, c-format
@@ -1275,7 +1289,7 @@ msgstr "åˆå§‹åŒ– MD5 引擎失败:%s / %s。"
#: ../libnm-util/crypto_gnutls.c:156
#, c-format
msgid "Invalid IV length (must be at least %zd)."
-msgstr "无效 IV 长度(必须至少为 %zd)。"
+msgstr "无效åˆå§‹å‘é‡é•¿åº¦(至少为为 %zd)。"
#: ../libnm-util/crypto_gnutls.c:165 ../libnm-util/crypto_nss.c:188
#, c-format
@@ -1330,7 +1344,7 @@ msgstr "为加密设置对称密钥失败:%s / %s。"
#: ../libnm-util/crypto_gnutls.c:313
#, c-format
msgid "Failed to set IV for encryption: %s / %s."
-msgstr "为加密设置 IV 失败:%s / %s。"
+msgstr "为加密设置åˆå§‹å‘é‡å¤±è´¥ï¼š%s / %s。"
#: ../libnm-util/crypto_gnutls.c:322
#, c-format
@@ -1375,7 +1389,7 @@ msgstr "åˆå§‹åŒ– MD5 环境失败:%d。"
#: ../libnm-util/crypto_nss.c:179
#, c-format
msgid "Invalid IV length (must be at least %d)."
-msgstr "无效 IV 长度(必须至少 %d)。"
+msgstr "无效的åˆå§‹å‘é‡é•¿åº¦(至少为 %d)。"
#: ../libnm-util/crypto_nss.c:196
#, c-format
@@ -1471,30 +1485,113 @@ msgstr "无法校验 PKCS#12 文件:%d"
msgid "Could not generate random data."
msgstr "无法生æˆéšæœºæ•°æ®ã€‚"
-#: ../libnm-util/nm-utils.c:1925
+#: ../libnm-util/nm-utils.c:1975
#, c-format
msgid "Not enough memory to make encryption key."
msgstr "没有足够的空间生æˆåŠ å¯†å¯†é’¥ã€‚"
-#: ../libnm-util/nm-utils.c:2035
+#: ../libnm-util/nm-utils.c:2085
msgid "Could not allocate memory for PEM file creation."
msgstr "无法为创建 PEM 文件分é…内存。"
-#: ../libnm-util/nm-utils.c:2047
+#: ../libnm-util/nm-utils.c:2097
#, c-format
msgid "Could not allocate memory for writing IV to PEM file."
msgstr "无法为在 PEM 文件中写入 IV 分é…内存。"
-#: ../libnm-util/nm-utils.c:2059
+#: ../libnm-util/nm-utils.c:2109
#, c-format
msgid "Could not allocate memory for writing encrypted key to PEM file."
msgstr "无法为在 PEM 文件中写入加密密钥分é…内存。"
-#: ../libnm-util/nm-utils.c:2078
+#: ../libnm-util/nm-utils.c:2128
#, c-format
msgid "Could not allocate memory for PEM file data."
msgstr "无法为 PEM 文件数æ®åˆ†é…内存。"
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
+msgid "Connection sharing via a protected WiFi network"
+msgstr "通过å—ä¿æŠ¤çš„ WiFi 网络共享连接"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
+msgid "Connection sharing via an open WiFi network"
+msgstr "通过公开 WiFi 网络共享连接"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
+msgid "Modify persistent system hostname"
+msgstr "更改系统固有主机å"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
+msgid "Modify system connections"
+msgstr "更改系统连接"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
+msgid "System policy prevents modification of system settings"
+msgstr "系统策略阻止更改系统设置"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
+msgid "System policy prevents modification of the persistent system hostname"
+msgstr "系统策略阻止更改系统固有主机å"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
+msgid "System policy prevents sharing connections via a protected WiFi network"
+msgstr "系统策略阻止使用å—ä¿æŠ¤çš„ WiFi 网络共享连接"
+
+#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
+msgid "System policy prevents sharing connections via an open WiFi network"
+msgstr "系统策略阻止使用公开 WiFi 网络共享连接"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
+msgid "Allow control of network connections"
+msgstr "å…许控制网络连接"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
+msgid "Allow use of user-specific connections"
+msgstr "å…许用户连接"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
+msgid "Enable or disable WiFi devices"
+msgstr "å¯ç”¨æˆ–ç¦ç”¨ WiFi 设备"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
+msgid "Enable or disable mobile broadband devices"
+msgstr "å¯ç”¨æˆ–ç¦ç”¨ç§»åŠ¨å®½å¸¦è®¾å¤‡"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+msgid "Enable or disable system networking"
+msgstr "å¯ç”¨æˆ–ç¦ç”¨ç³»ç»Ÿç½‘络"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
+msgid ""
+"Put NetworkManager to sleep or wake it up (should only be used by system "
+"power management)"
+msgstr ""
+"挂起或唤醒 NetworkManager (应仅用于系统电æºç®¡ç†)"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
+msgid "System policy prevents control of network connections"
+msgstr "系统策略阻止更改网络连接"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
+msgid "System policy prevents enabling or disabling WiFi devices"
+msgstr "系统策略阻止å¯ç”¨æˆ–ç¦ç”¨ WiFi 设备"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
+msgid "System policy prevents enabling or disabling mobile broadband devices"
+msgstr "系统策略阻止å¯ç”¨æˆ–ç¦ç”¨ç§»åŠ¨å®½å¸¦è®¾å¤‡"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
+msgid "System policy prevents enabling or disabling system networking"
+msgstr "系统策略阻止å¯ç”¨æˆ–ç¦ç”¨ç³»ç»Ÿç½‘络"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
+msgid "System policy prevents putting NetworkManager to sleep or waking it up"
+msgstr "系统策略阻止挂起或唤醒 NetworkManager"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
+msgid "System policy prevents use of user-specific connections"
+msgstr "系统策略阻止使用用户连接"
+
#: ../src/nm-netlink-monitor.c:100 ../src/nm-netlink-monitor.c:231
#: ../src/nm-netlink-monitor.c:653
#, c-format
@@ -1540,16 +1637,16 @@ msgstr "更新链接缓存出错:%s"
msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgstr "无效选项。请使用 --help 查看有效选项列表。\n"
-#: ../src/main.c:562
+#: ../src/main.c:573
#, c-format
msgid "%s. Please use --help to see a list of valid options.\n"
msgstr "%s。请使用 --help 查看有效选项列表。\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:325
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:324
msgid "# Created by NetworkManager\n"
msgstr "# 由 NetworkManger 创建\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:341
+#: ../src/dhcp-manager/nm-dhcp-dhclient.c:340
#, c-format
msgid ""
"# Merged from %s\n"
@@ -1558,19 +1655,19 @@ msgstr ""
"# åˆå¹¶è‡ª %s\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:279
+#: ../src/dhcp-manager/nm-dhcp-manager.c:284
msgid "no usable DHCP client could be found."
msgstr "找到无法使用的 DHCP 客户端。"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:288
+#: ../src/dhcp-manager/nm-dhcp-manager.c:293
msgid "'dhclient' could be found."
msgstr "找到 'dhclient'。"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:298
+#: ../src/dhcp-manager/nm-dhcp-manager.c:303
msgid "'dhcpcd' could be found."
msgstr "找到 'dhcpcd'。"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:306
+#: ../src/dhcp-manager/nm-dhcp-manager.c:311
#, c-format
msgid "unsupported DHCP client '%s'"
msgstr "ä¸æ”¯æŒçš„ DHCP 客户端 '%s'"
@@ -1585,11 +1682,11 @@ msgstr "未知日志等级 '%s'"
msgid "Unknown log domain '%s'"
msgstr "未知日志域 '%s'"
-#: ../src/named-manager/nm-named-manager.c:343
+#: ../src/dns-manager/nm-dns-manager.c:384
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr "注æ„:libc 解æžå™¨å¯èƒ½ä¸æ”¯æŒè¶…过三个åå­—æœåŠ¡å™¨ã€‚"
-#: ../src/named-manager/nm-named-manager.c:345
+#: ../src/dns-manager/nm-dns-manager.c:386
msgid "The nameservers listed below may not be recognized."
msgstr "以下列出的åå­—æœåŠ¡å™¨å¯èƒ½æ— æ³•è¢«è¯†åˆ«ã€‚"
@@ -1598,39 +1695,6 @@ msgstr "以下列出的åå­—æœåŠ¡å™¨å¯èƒ½æ— æ³•è¢«è¯†åˆ«ã€‚"
msgid "Auto %s"
msgstr "自动 %s"
-#: ../system-settings/plugins/ifcfg-rh/reader.c:3256
+#: ../system-settings/plugins/ifcfg-rh/reader.c:3412
msgid "System"
msgstr "系统"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
-msgid "Connection sharing via a protected WiFi network"
-msgstr "通过å—ä¿æŠ¤çš„ WiFi 网络共享连接"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
-msgid "Connection sharing via an open WiFi network"
-msgstr "通过公开 WiFi 网络共享连接"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
-msgid "Modify persistent system hostname"
-msgstr "更改系统固有主机å"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
-msgid "Modify system connections"
-msgstr "更改系统连接"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
-msgid "System policy prevents modification of system settings"
-msgstr "系统策略阻止更改系统设置"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
-msgid "System policy prevents modification of the persistent system hostname"
-msgstr "系统策略阻止更改系统固有主机å"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
-msgid "System policy prevents sharing connections via a protected WiFi network"
-msgstr "系统策略阻止使用å—ä¿æŠ¤çš„ WiFi 网络共享连接"
-
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
-msgid "System policy prevents sharing connections via an open WiFi network"
-msgstr "系统策略组织使用公开 WiFi 网络共享连接"
-
diff --git a/po/zh_HK.po b/po/zh_HK.po
index c56c2781f9..662cabd985 100644
--- a/po/zh_HK.po
+++ b/po/zh_HK.po
@@ -44,11 +44,11 @@ msgstr ""
"# Merged from %s\n"
"\n"
-#: ../src/named-manager/nm-named-manager.c:257
+#: ../src/dns-manager/nm-dns-manager.c:257
msgid "NOTE: the glibc resolver does not support more than 3 nameservers."
msgstr "注æ„:glibc 解æžå™¨ä¸æ”¯æ´ 3 個以上的å稱伺æœå™¨ã€‚"
-#: ../src/named-manager/nm-named-manager.c:259
+#: ../src/dns-manager/nm-dns-manager.c:259
msgid "The nameservers listed below may not be recognized."
msgstr "下é¢åˆ—出的å稱伺æœå™¨å¯èƒ½ä¸æœƒè¢«è¾¨è­˜ã€‚"
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 4357e26699..25e81bbe1b 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -1591,11 +1591,11 @@ msgstr "ä¸æ˜Žæ—¥èªŒå±¤ç´šã€Œ%sã€"
msgid "Unknown log domain '%s'"
msgstr "ä¸æ˜Žæ—¥èªŒç¶²åŸŸã€Œ%sã€"
-#: ../src/named-manager/nm-named-manager.c:343
+#: ../src/dns-manager/nm-dns-manager.c:343
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr "注æ„:libc 解æžå™¨ä¸æ”¯æ´ 3 個以上的å稱伺æœå™¨ã€‚"
-#: ../src/named-manager/nm-named-manager.c:345
+#: ../src/dns-manager/nm-dns-manager.c:345
msgid "The nameservers listed below may not be recognized."
msgstr "下é¢åˆ—出的å稱伺æœå™¨å¯èƒ½ä¸æœƒè¢«è¾¨è­˜ã€‚"
diff --git a/policy/Makefile.am b/policy/Makefile.am
index 409e8edda8..4778ce230a 100644
--- a/policy/Makefile.am
+++ b/policy/Makefile.am
@@ -1,6 +1,9 @@
polkit_policydir = $(datadir)/polkit-1/actions
-dist_polkit_policy_in_files = org.freedesktop.network-manager-settings.system.policy.in
+dist_polkit_policy_in_files = \
+ org.freedesktop.network-manager-settings.system.policy.in \
+ org.freedesktop.NetworkManager.policy.in
+
dist_polkit_policy_DATA = $(dist_polkit_policy_in_files:.policy.in=.policy)
@INTLTOOL_POLICY_RULE@
diff --git a/policy/org.freedesktop.NetworkManager.policy.in b/policy/org.freedesktop.NetworkManager.policy.in
new file mode 100644
index 0000000000..3e7db0588e
--- /dev/null
+++ b/policy/org.freedesktop.NetworkManager.policy.in
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE policyconfig PUBLIC
+ "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
+ "http://www.freedesktop.org/standards/PolicyKit/1.0/policyconfig.dtd">
+
+<policyconfig>
+
+ <vendor>NetworkManager</vendor>
+ <vendor_url>http://www.gnome.org/projects/NetworkManager</vendor_url>
+ <icon_name>nm-icon</icon_name>
+
+ <action id="org.freedesktop.NetworkManager.enable-disable-network">
+ <_description>Enable or disable system networking</_description>
+ <_message>System policy prevents enabling or disabling system networking</_message>
+ <defaults>
+ <allow_inactive>no</allow_inactive>
+ <allow_active>yes</allow_active>
+ </defaults>
+ </action>
+
+ <action id="org.freedesktop.NetworkManager.sleep-wake">
+ <_description>Put NetworkManager to sleep or wake it up (should only be used by system power management)</_description>
+ <_message>System policy prevents putting NetworkManager to sleep or waking it up</_message>
+ <defaults>
+ <allow_inactive>no</allow_inactive>
+ <allow_active>no</allow_active>
+ </defaults>
+ </action>
+
+ <action id="org.freedesktop.NetworkManager.enable-disable-wifi">
+ <_description>Enable or disable WiFi devices</_description>
+ <_message>System policy prevents enabling or disabling WiFi devices</_message>
+ <defaults>
+ <allow_inactive>no</allow_inactive>
+ <allow_active>yes</allow_active>
+ </defaults>
+ </action>
+
+ <action id="org.freedesktop.NetworkManager.enable-disable-wwan">
+ <_description>Enable or disable mobile broadband devices</_description>
+ <_message>System policy prevents enabling or disabling mobile broadband devices</_message>
+ <defaults>
+ <allow_inactive>no</allow_inactive>
+ <allow_active>yes</allow_active>
+ </defaults>
+ </action>
+
+ <action id="org.freedesktop.NetworkManager.use-user-connections">
+ <_description>Allow use of user-specific connections</_description>
+ <_message>System policy prevents use of user-specific connections</_message>
+ <defaults>
+ <allow_inactive>yes</allow_inactive>
+ <allow_active>yes</allow_active>
+ </defaults>
+ </action>
+
+ <action id="org.freedesktop.NetworkManager.network-control">
+ <_description>Allow control of network connections</_description>
+ <_message>System policy prevents control of network connections</_message>
+ <defaults>
+ <allow_inactive>yes</allow_inactive>
+ <allow_active>yes</allow_active>
+ </defaults>
+ </action>
+
+</policyconfig>
+
diff --git a/src/Makefile.am b/src/Makefile.am
index 6bc2a404bb..47d9c6acda 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,6 +1,6 @@
SUBDIRS= \
logging \
- named-manager \
+ dns-manager \
vpn-manager \
dhcp-manager \
ip6-manager \
@@ -19,7 +19,7 @@ INCLUDES = -I${top_srcdir} \
-I${top_srcdir}/include \
-I${top_builddir}/marshallers \
-I${top_srcdir}/src/logging \
- -I${top_srcdir}/src/named-manager \
+ -I${top_srcdir}/src/dns-manager \
-I${top_srcdir}/src/vpn-manager \
-I${top_srcdir}/src/dhcp-manager \
-I${top_srcdir}/src/ip6-manager \
@@ -135,6 +135,8 @@ NetworkManager_SOURCES = \
nm-system.h \
nm-manager.c \
nm-manager.h \
+ nm-manager-auth.c \
+ nm-manager-auth.h \
nm-netlink-monitor.c \
nm-netlink-monitor.h \
nm-activation-request.c \
@@ -150,46 +152,46 @@ NetworkManager_SOURCES = \
nm-rfkill.h
nm-access-point-glue.h: $(top_srcdir)/introspection/nm-access-point.xml
- dbus-binding-tool --prefix=nm_access_point --mode=glib-server --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_access_point --mode=glib-server --output=$@ $<
nm-manager-glue.h: $(top_srcdir)/introspection/nm-manager.xml
- dbus-binding-tool --prefix=nm_manager --mode=glib-server --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_manager --mode=glib-server --output=$@ $<
nm-device-interface-glue.h: $(top_srcdir)/introspection/nm-device.xml
- dbus-binding-tool --prefix=nm_device_interface --mode=glib-server --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_interface --mode=glib-server --output=$@ $<
nm-device-ethernet-glue.h: $(top_srcdir)/introspection/nm-device-ethernet.xml
- dbus-binding-tool --prefix=nm_device_ethernet --mode=glib-server --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_ethernet --mode=glib-server --output=$@ $<
nm-device-wifi-glue.h: $(top_srcdir)/introspection/nm-device-wifi.xml
- dbus-binding-tool --prefix=nm_device_wifi --mode=glib-server --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_wifi --mode=glib-server --output=$@ $<
nm-device-bt-glue.h: $(top_srcdir)/introspection/nm-device-bt.xml
- dbus-binding-tool --prefix=nm_device_bt --mode=glib-server --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_bt --mode=glib-server --output=$@ $<
nm-device-olpc-mesh-glue.h: $(top_srcdir)/introspection/nm-device-olpc-mesh.xml
- dbus-binding-tool --prefix=nm_device_olpc_mesh --mode=glib-server --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_olpc_mesh --mode=glib-server --output=$@ $<
nm-ip4-config-glue.h: $(top_srcdir)/introspection/nm-ip4-config.xml
- dbus-binding-tool --prefix=nm_ip4_config --mode=glib-server --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_ip4_config --mode=glib-server --output=$@ $<
nm-ip6-config-glue.h: $(top_srcdir)/introspection/nm-ip6-config.xml
- dbus-binding-tool --prefix=nm_ip6_config --mode=glib-server --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_ip6_config --mode=glib-server --output=$@ $<
nm-active-connection-glue.h: $(top_srcdir)/introspection/nm-active-connection.xml
- dbus-binding-tool --prefix=nm_active_connection --mode=glib-server --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_active_connection --mode=glib-server --output=$@ $<
nm-dhcp4-config-glue.h: $(top_srcdir)/introspection/nm-dhcp4-config.xml
- dbus-binding-tool --prefix=nm_dhcp4_config --mode=glib-server --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_dhcp4_config --mode=glib-server --output=$@ $<
nm-dhcp6-config-glue.h: $(top_srcdir)/introspection/nm-dhcp6-config.xml
- dbus-binding-tool --prefix=nm_dhcp6_config --mode=glib-server --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_dhcp6_config --mode=glib-server --output=$@ $<
nm-device-cdma-glue.h: $(top_srcdir)/introspection/nm-device-cdma.xml
- dbus-binding-tool --prefix=nm_device_cdma --mode=glib-server --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_cdma --mode=glib-server --output=$@ $<
nm-device-gsm-glue.h: $(top_srcdir)/introspection/nm-device-gsm.xml
- dbus-binding-tool --prefix=nm_device_gsm --mode=glib-server --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_gsm --mode=glib-server --output=$@ $<
BUILT_SOURCES = \
nm-access-point-glue.h \
@@ -214,6 +216,7 @@ NetworkManager_CPPFLAGS = \
$(LIBNL_CFLAGS) \
$(GMODULE_CFLAGS) \
$(WIMAX_CFLAGS) \
+ $(POLKIT_CFLAGS) \
-DG_DISABLE_DEPRECATED \
-DBINDIR=\"$(bindir)\" \
-DSBINDIR=\"$(sbindir)\" \
@@ -228,7 +231,7 @@ NetworkManager_CPPFLAGS = \
NetworkManager_LDADD = \
$(top_builddir)/marshallers/libmarshallers.la \
./logging/libnm-logging.la \
- ./named-manager/libnamed-manager.la \
+ ./dns-manager/libdns-manager.la \
./vpn-manager/libvpn-manager.la \
./dhcp-manager/libdhcp-manager.la \
./ip6-manager/libip6-manager.la \
@@ -246,6 +249,7 @@ NetworkManager_LDADD = \
$(GUDEV_LIBS) \
$(LIBNL_LIBS) \
$(GMODULE_LIBS) \
+ $(POLKIT_LIBS) \
$(LIBM) \
$(LIBDL)
@@ -275,8 +279,10 @@ EXTRA_DIST = \
$(NetworkManager_DATA)
rundir=$(localstatedir)/run/NetworkManager
+statedir=$(localstatedir)/lib/NetworkManager
install-data-hook:
$(mkinstalldirs) -m 0700 $(DESTDIR)$(rundir)
+ $(mkinstalldirs) -m 0700 $(DESTDIR)$(statedir)
CLEANFILES = $(BUILT_SOURCES)
diff --git a/src/NetworkManager.conf b/src/NetworkManager.conf
index 8d08314002..1f1ed49b46 100644
--- a/src/NetworkManager.conf
+++ b/src/NetworkManager.conf
@@ -60,6 +60,18 @@
<deny send_destination="org.freedesktop.NetworkManager"
send_interface="org.freedesktop.NetworkManager"
send_member="SetLogging"/>
+
+ <deny send_destination="org.freedesktop.NetworkManager"
+ send_interface="org.freedesktop.NetworkManager"
+ send_member="Sleep"/>
+
+ <deny send_destination="org.freedesktop.NetworkManager"
+ send_interface="org.freedesktop.NetworkManager"
+ send_member="sleep"/>
+
+ <deny send_destination="org.freedesktop.NetworkManager"
+ send_interface="org.freedesktop.NetworkManager"
+ send_member="wake"/>
</policy>
<policy context="default">
<deny own="org.freedesktop.NetworkManager"/>
@@ -72,6 +84,18 @@
send_interface="org.freedesktop.NetworkManager"
send_member="SetLogging"/>
+ <deny send_destination="org.freedesktop.NetworkManager"
+ send_interface="org.freedesktop.NetworkManager"
+ send_member="Sleep"/>
+
+ <deny send_destination="org.freedesktop.NetworkManager"
+ send_interface="org.freedesktop.NetworkManager"
+ send_member="sleep"/>
+
+ <deny send_destination="org.freedesktop.NetworkManager"
+ send_interface="org.freedesktop.NetworkManager"
+ send_member="wake"/>
+
<!-- The org.freedesktop.NetworkManagerSettings.Connection.Secrets
interface is secured via PolicyKit.
-->
diff --git a/src/NetworkManagerUtils.c b/src/NetworkManagerUtils.c
index 22cf2fa0d8..10240960b0 100644
--- a/src/NetworkManagerUtils.c
+++ b/src/NetworkManagerUtils.c
@@ -25,6 +25,7 @@
#include <stdio.h>
#include <string.h>
#include <unistd.h>
+#include <ctype.h>
#include "NetworkManagerUtils.h"
#include "nm-utils.h"
@@ -487,6 +488,101 @@ nm_match_spec_hwaddr (const GSList *specs, const char *hwaddr)
return FALSE;
}
+#define BUFSIZE 10
+
+static gboolean
+parse_subchannels (const char *subchannels, guint32 *a, guint32 *b, guint32 *c)
+{
+ long unsigned int tmp;
+ char buf[BUFSIZE + 1];
+ const char *p = subchannels;
+ int i = 0;
+ char *pa = NULL, *pb = NULL, *pc = NULL;
+
+ g_return_val_if_fail (subchannels != NULL, FALSE);
+ g_return_val_if_fail (a != NULL, FALSE);
+ g_return_val_if_fail (*a == 0, FALSE);
+ g_return_val_if_fail (b != NULL, FALSE);
+ g_return_val_if_fail (*b == 0, FALSE);
+ g_return_val_if_fail (c != NULL, FALSE);
+ g_return_val_if_fail (*c == 0, FALSE);
+
+ /* sanity check */
+ if (!isxdigit (subchannels[0]))
+ return FALSE;
+
+ /* Get the first channel */
+ while (*p && (*p != ',')) {
+ if (!isxdigit (*p) && (*p != '.'))
+ return FALSE; /* Invalid chars */
+ if (i >= BUFSIZE)
+ return FALSE; /* Too long to be a subchannel */
+ buf[i++] = *p++;
+ }
+ buf[i] = '\0';
+
+ /* and grab each of its elements, there should be 3 */
+ pa = &buf[0];
+ pb = strchr (buf, '.');
+ if (pb)
+ pc = strchr (pb + 1, '.');
+ if (!pa || !pb || !pc)
+ return FALSE;
+
+ /* Split the string */
+ *pb++ = '\0';
+ *pc++ = '\0';
+
+ errno = 0;
+ tmp = strtoul (pa, NULL, 16);
+ if (errno)
+ return FALSE;
+ *a = (guint32) tmp;
+
+ errno = 0;
+ tmp = strtoul (pb, NULL, 16);
+ if (errno)
+ return FALSE;
+ *b = (guint32) tmp;
+
+ errno = 0;
+ tmp = strtoul (pc, NULL, 16);
+ if (errno)
+ return FALSE;
+ *c = (guint32) tmp;
+
+ return TRUE;
+}
+
+#define SUBCHAN_TAG "s390-subchannels:"
+
+gboolean
+nm_match_spec_s390_subchannels (const GSList *specs, const char *subchannels)
+{
+ const GSList *iter;
+ guint32 a = 0, b = 0, c = 0;
+ guint32 spec_a = 0, spec_b = 0, spec_c = 0;
+
+ g_return_val_if_fail (subchannels != NULL, FALSE);
+
+ if (!parse_subchannels (subchannels, &a, &b, &c))
+ return FALSE;
+
+ for (iter = specs; iter; iter = g_slist_next (iter)) {
+ const char *spec = iter->data;
+
+ if (!strncmp (spec, SUBCHAN_TAG, strlen (SUBCHAN_TAG))) {
+ spec += strlen (SUBCHAN_TAG);
+ if (parse_subchannels (spec, &spec_a, &spec_b, &spec_c)) {
+ if (a == spec_a && b == spec_b && c == spec_c)
+ return TRUE;
+ }
+ }
+ }
+
+ return FALSE;
+}
+
/*********************************/
static void
diff --git a/src/NetworkManagerUtils.h b/src/NetworkManagerUtils.h
index e3d1793b4d..72c0e532b8 100644
--- a/src/NetworkManagerUtils.h
+++ b/src/NetworkManagerUtils.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) 2004 - 2008 Red Hat, Inc.
+ * Copyright (C) 2004 - 2010 Red Hat, Inc.
* Copyright (C) 2005 - 2008 Novell, Inc.
*/
@@ -48,6 +48,7 @@ void nm_utils_call_dispatcher (const char *action,
const char *vpn_iface);
gboolean nm_match_spec_hwaddr (const GSList *specs, const char *hwaddr);
+gboolean nm_match_spec_s390_subchannels (const GSList *specs, const char *subchannels);
GHashTable *value_hash_create (void);
diff --git a/src/backends/Makefile.am b/src/backends/Makefile.am
index c3485e5f9b..fbec9aaf87 100644
--- a/src/backends/Makefile.am
+++ b/src/backends/Makefile.am
@@ -3,8 +3,6 @@ INCLUDES = \
-I${top_srcdir}/src/logging \
-I${top_srcdir}/include \
-I${top_srcdir}/src \
- -I${top_srcdir}/src/vpn-manager \
- -I${top_srcdir}/src/named-manager \
-I${top_srcdir}/libnm-util
noinst_LTLIBRARIES = libnmbackend.la
@@ -55,6 +53,14 @@ if TARGET_PARDUS
libnmbackend_la_SOURCES += NetworkManagerPardus.c
endif
+if TARGET_LINEXA
+libnmbackend_la_SOURCES += NetworkManagerLinexa.c
+endif
+
+if TARGET_EXHERBO
+libnmbackend_la_SOURCES += NetworkManagerExherbo.c
+endif
+
libnmbackend_la_LIBADD += \
$(top_builddir)/src/logging/libnm-logging.la \
$(DBUS_LIBS) \
diff --git a/src/backends/NetworkManagerDebian.c b/src/backends/NetworkManagerDebian.c
index ef9475af6d..37eb6457b0 100644
--- a/src/backends/NetworkManagerDebian.c
+++ b/src/backends/NetworkManagerDebian.c
@@ -1,3 +1,4 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/* NetworkManager -- Network link manager
*
* Matthew Garrett <mjg59@srcf.ucam.org>
@@ -44,7 +45,11 @@
*/
void nm_system_enable_loopback (void)
{
- nm_spawn_process ("/sbin/ifup lo");
+ /* ifupdown isn't always installed (bgo #625427) */
+ if (g_file_test ("/sbin/ifup", G_FILE_TEST_EXISTS))
+ nm_spawn_process ("/sbin/ifup lo");
+ else
+ nm_generic_enable_loopback ();
}
/*
diff --git a/src/backends/NetworkManagerExherbo.c b/src/backends/NetworkManagerExherbo.c
new file mode 100644
index 0000000000..d7e24cf603
--- /dev/null
+++ b/src/backends/NetworkManagerExherbo.c
@@ -0,0 +1,64 @@
+/* NetworkManager -- Network link manager
+ *
+ * Dan Williams <dcbw@redhat.com>
+ * Dan Willemsen <dan@willemsen.us>
+ * Robert Paskowitz
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * (C) Copyright 2004 Red Hat, Inc.
+ * (C) Copyright 2004 Dan Willemsen
+ * (C) Copyright 2004 Robert Paskowitz
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "NetworkManagerGeneric.h"
+#include "nm-system.h"
+#include "NetworkManagerUtils.h"
+#include "nm-logging.h"
+
+/*
+ * nm_system_enable_loopback
+ *
+ * Bring up the loopback interface
+ *
+ */
+void nm_system_enable_loopback (void)
+{
+ nm_generic_enable_loopback ();
+}
+
+/*
+ * nm_system_update_dns
+ *
+ * Make glibc/nscd aware of any changes to the resolv.conf file by
+ * restarting nscd. Only restart if already running.
+ *
+ */
+void nm_system_update_dns (void)
+{
+ if (g_file_test ("/usr/sbin/nscd", G_FILE_TEST_IS_EXECUTABLE)) {
+ nm_log_info (LOGD_DNS, "Clearing nscd hosts cache.");
+ nm_spawn_process ("/usr/sbin/nscd -i hosts");
+ }
+}
+
diff --git a/src/backends/NetworkManagerGentoo.c b/src/backends/NetworkManagerGentoo.c
index 8d9e68c59c..2854901a56 100644
--- a/src/backends/NetworkManagerGentoo.c
+++ b/src/backends/NetworkManagerGentoo.c
@@ -30,12 +30,22 @@
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
+#include <gio/gio.h>
#include "NetworkManagerGeneric.h"
#include "nm-system.h"
#include "NetworkManagerUtils.h"
#include "nm-logging.h"
+#define BUFFER_SIZE 512
+
+static void openrc_start_lo_if_necessary()
+{
+ /* No need to run net.lo if it is already running */
+ if (nm_spawn_process ("/etc/init.d/net.lo status") != 0)
+ nm_spawn_process ("/etc/init.d/net.lo start");
+}
+
/*
* nm_system_enable_loopback
*
@@ -44,9 +54,42 @@
*/
void nm_system_enable_loopback (void)
{
- /* No need to run net.lo if it is already running */
- if (nm_spawn_process ("/etc/init.d/net.lo status") != 0)
- nm_spawn_process("/etc/init.d/net.lo start");
+ GFile *file;
+ GFileInputStream *in;
+ gchar buffer[BUFFER_SIZE];
+ gchar *comm, *readed, *tmp;
+ gssize r;
+
+ file = g_file_new_for_path ("/proc/1/comm");
+ in = g_file_read (file, NULL, NULL);
+
+ /* If anything goes wrong trying to open /proc/1/comm,
+ we will assume OpenRC. */
+ if (!in) {
+ openrc_start_lo_if_necessary ();
+ return;
+ }
+
+ comm = g_strdup("");
+ while ((r = g_input_stream_read (G_INPUT_STREAM(in), buffer, BUFFER_SIZE, NULL, NULL)) > 0) {
+ readed = g_strndup (buffer, r);
+ tmp = g_strconcat (comm, readed, NULL);
+ g_free (comm);
+ g_free (readed);
+ comm = tmp;
+ }
+
+ if (g_strstr_len (comm, -1, "systemd")) {
+ /* We use the generic loopback enabler if using systemd. */
+ nm_log_info (LOGD_CORE, "NetworkManager is running with systemd...");
+ nm_generic_enable_loopback ();
+ } else {
+ /* OpenRC otherwise. */
+ nm_log_info (LOGD_CORE, "NetworkManager is running with OpenRC...");
+ openrc_start_lo_if_necessary();
+ }
+
+ g_free (comm);
}
/*
diff --git a/src/backends/NetworkManagerLinexa.c b/src/backends/NetworkManagerLinexa.c
new file mode 100644
index 0000000000..015aa17c68
--- /dev/null
+++ b/src/backends/NetworkManagerLinexa.c
@@ -0,0 +1,66 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * Matthew Garrett <mjg59@srcf.ucam.org>
+ *
+ * Heavily based on NetworkManagerRedhat.c by Dan Williams <dcbw@redhat.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * (C) Copyright 2004 Tom Parker
+ * (C) Copyright 2004 Matthew Garrett
+ * (C) Copyright 2004 Red Hat, Inc.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "NetworkManagerGeneric.h"
+#include "nm-system.h"
+#include "NetworkManagerUtils.h"
+#include "nm-logging.h"
+
+/*
+ * nm_system_enable_loopback
+ *
+ * Bring up the loopback interface
+ *
+ */
+void nm_system_enable_loopback (void)
+{
+ nm_generic_enable_loopback ();
+}
+
+/*
+ * nm_system_update_dns
+ *
+ * Invalidate the nscd host cache, if it exists, since
+ * we changed resolv.conf.
+ *
+ */
+void nm_system_update_dns (void)
+{
+ if (g_file_test ("/usr/sbin/nscd", G_FILE_TEST_IS_EXECUTABLE)) {
+ nm_log_info (LOGD_DNS, "Clearing nscd hosts cache.");
+ nm_spawn_process ("/usr/sbin/nscd -i hosts");
+ }
+}
+
+
diff --git a/src/bluez-manager/nm-bluez-manager.c b/src/bluez-manager/nm-bluez-manager.c
index fe027c4ff5..59849d3bd5 100644
--- a/src/bluez-manager/nm-bluez-manager.c
+++ b/src/bluez-manager/nm-bluez-manager.c
@@ -251,11 +251,13 @@ name_owner_changed_cb (NMDBusManager *dbus_mgr,
gboolean old_owner_good = (old_owner && strlen (old_owner));
gboolean new_owner_good = (new_owner && strlen (new_owner));
- /* Can't handle the signal if its not from the supplicant service */
+ /* Can't handle the signal if its not from the Bluez */
if (strcmp (BLUEZ_SERVICE, name))
return;
- if (old_owner_good && !new_owner_good)
+ if (!old_owner_good && new_owner_good)
+ query_default_adapter (self);
+ else if (old_owner_good && !new_owner_good)
remove_all_devices (self, TRUE);
}
diff --git a/src/dhcp-manager/Makefile.am b/src/dhcp-manager/Makefile.am
index f75e6b3d07..14ddde0bd2 100644
--- a/src/dhcp-manager/Makefile.am
+++ b/src/dhcp-manager/Makefile.am
@@ -1,21 +1,47 @@
+SUBDIRS=. tests
+
INCLUDES = \
-I${top_srcdir} \
-I${top_srcdir}/include \
-I${top_builddir}/marshallers \
-I${top_srcdir}/src/logging \
-I${top_srcdir}/libnm-util \
- -I${top_srcdir}/src \
- -I${top_srcdir}/src/named-manager
+ -I${top_srcdir}/src
+
+noinst_LTLIBRARIES = libdhcp-manager.la libdhcp-dhclient.la
+
+################## dhclient ##################
+
+libdhcp_dhclient_la_SOURCES = \
+ nm-dhcp-dhclient-utils.h \
+ nm-dhcp-dhclient-utils.c \
+ nm-dhcp-dhclient.h \
+ nm-dhcp-dhclient.c
+
+libdhcp_dhclient_la_CPPFLAGS = \
+ $(DBUS_CFLAGS) \
+ $(GLIB_CFLAGS) \
+ -DG_DISABLE_DEPRECATED \
+ -DSYSCONFDIR=\"$(sysconfdir)\" \
+ -DLIBEXECDIR=\"$(libexecdir)\" \
+ -DLOCALSTATEDIR=\"$(localstatedir)\" \
+ -DDHCLIENT_PATH=\"$(DHCLIENT_PATH)\" \
+ -DDHCLIENT_V$(DHCLIENT_VERSION)
+
+libdhcp_dhclient_la_LIBADD = \
+ $(top_builddir)/marshallers/libmarshallers.la \
+ $(top_builddir)/src/logging/libnm-logging.la \
+ $(top_builddir)/libnm-util/libnm-util.la \
+ $(DBUS_LIBS) \
+ $(GLIB_LIBS)
-noinst_LTLIBRARIES = libdhcp-manager.la
+################## main lib ##################
libdhcp_manager_la_SOURCES = \
nm-dhcp-client.c \
nm-dhcp-client.h \
nm-dhcp-manager.c \
nm-dhcp-manager.h \
- nm-dhcp-dhclient.h \
- nm-dhcp-dhclient.c \
nm-dhcp-dhcpcd.h \
nm-dhcp-dhcpcd.c
@@ -23,9 +49,6 @@ libdhcp_manager_la_CPPFLAGS = \
$(DBUS_CFLAGS) \
$(GLIB_CFLAGS) \
-DG_DISABLE_DEPRECATED \
- -DBINDIR=\"$(bindir)\" \
- -DDATADIR=\"$(datadir)\" \
- -DSYSCONFDIR=\"$(sysconfdir)\" \
-DLIBEXECDIR=\"$(libexecdir)\" \
-DLOCALSTATEDIR=\"$(localstatedir)\" \
-DDHCLIENT_PATH=\"$(DHCLIENT_PATH)\" \
@@ -34,6 +57,7 @@ libdhcp_manager_la_CPPFLAGS = \
libdhcp_manager_la_LIBADD = \
$(top_builddir)/marshallers/libmarshallers.la \
$(top_builddir)/src/logging/libnm-logging.la \
+ $(builddir)/libdhcp-dhclient.la \
$(DBUS_LIBS) \
$(GLIB_LIBS)
diff --git a/src/dhcp-manager/nm-dhcp-client.c b/src/dhcp-manager/nm-dhcp-client.c
index 5cebaa84ee..3a8b194081 100644
--- a/src/dhcp-manager/nm-dhcp-client.c
+++ b/src/dhcp-manager/nm-dhcp-client.c
@@ -17,6 +17,8 @@
*
*/
+#include <config.h>
+#include <ctype.h>
#include <glib.h>
#include <string.h>
#include <sys/types.h>
@@ -154,11 +156,15 @@ stop_process (GPid pid, const char *iface)
if (ret == -1) {
/* Child already exited */
- if (errno == ECHILD)
+ if (errno == ECHILD) {
+ /* Was it really our child and it exited? */
+ if (kill (pid, 0) < 0 && errno == ESRCH)
+ break;
+ } else {
+ /* Took too long; shoot it in the head */
+ i = 0;
break;
- /* Took too long; shoot it in the head */
- i = 0;
- break;
+ }
}
g_usleep (G_USEC_PER_SEC / 5);
}
@@ -293,7 +299,8 @@ start_monitor (NMDHCPClient *self)
gboolean
nm_dhcp_client_start_ip4 (NMDHCPClient *self,
NMSettingIP4Config *s_ip4,
- guint8 *dhcp_anycast_addr)
+ guint8 *dhcp_anycast_addr,
+ const char *hostname)
{
NMDHCPClientPrivate *priv;
@@ -308,7 +315,7 @@ nm_dhcp_client_start_ip4 (NMDHCPClient *self,
nm_log_info (LOGD_DHCP, "Activation (%s) Beginning DHCPv4 transaction (timeout in %d seconds)",
priv->iface, priv->timeout);
- priv->pid = NM_DHCP_CLIENT_GET_CLASS (self)->ip4_start (self, s_ip4, dhcp_anycast_addr);
+ priv->pid = NM_DHCP_CLIENT_GET_CLASS (self)->ip4_start (self, s_ip4, dhcp_anycast_addr, hostname);
if (priv->pid)
start_monitor (self);
@@ -319,6 +326,7 @@ gboolean
nm_dhcp_client_start_ip6 (NMDHCPClient *self,
NMSettingIP6Config *s_ip6,
guint8 *dhcp_anycast_addr,
+ const char *hostname,
gboolean info_only)
{
NMDHCPClientPrivate *priv;
@@ -336,7 +344,7 @@ nm_dhcp_client_start_ip6 (NMDHCPClient *self,
nm_log_info (LOGD_DHCP, "Activation (%s) Beginning DHCPv6 transaction (timeout in %d seconds)",
priv->iface, priv->timeout);
- priv->pid = NM_DHCP_CLIENT_GET_CLASS (self)->ip6_start (self, s_ip6, dhcp_anycast_addr, info_only);
+ priv->pid = NM_DHCP_CLIENT_GET_CLASS (self)->ip6_start (self, s_ip6, dhcp_anycast_addr, hostname, info_only);
if (priv->pid > 0)
start_monitor (self);
@@ -644,6 +652,243 @@ nm_dhcp_client_foreach_option (NMDHCPClient *self,
/********************************************/
+static gboolean
+ip4_process_dhcpcd_rfc3442_routes (const char *str,
+ NMIP4Config *ip4_config,
+ guint32 *gwaddr)
+{
+ char **routes, **r;
+ gboolean have_routes = FALSE;
+
+ routes = g_strsplit (str, " ", 0);
+ if (g_strv_length (routes) == 0)
+ goto out;
+
+ if ((g_strv_length (routes) % 2) != 0) {
+ nm_log_warn (LOGD_DHCP4, " classless static routes provided, but invalid");
+ goto out;
+ }
+
+ for (r = routes; *r; r += 2) {
+ char *slash;
+ NMIP4Route *route;
+ int rt_cidr = 32;
+ struct in_addr rt_addr;
+ struct in_addr rt_route;
+
+ slash = strchr(*r, '/');
+ if (slash) {
+ *slash = '\0';
+ errno = 0;
+ rt_cidr = strtol (slash + 1, NULL, 10);
+ if ((errno == EINVAL) || (errno == ERANGE)) {
+ nm_log_warn (LOGD_DHCP4, "DHCP provided invalid classless static route cidr: '%s'", slash + 1);
+ continue;
+ }
+ }
+ if (inet_pton (AF_INET, *r, &rt_addr) <= 0) {
+ nm_log_warn (LOGD_DHCP4, "DHCP provided invalid classless static route address: '%s'", *r);
+ continue;
+ }
+ if (inet_pton (AF_INET, *(r + 1), &rt_route) <= 0) {
+ nm_log_warn (LOGD_DHCP4, "DHCP provided invalid classless static route gateway: '%s'", *(r + 1));
+ continue;
+ }
+
+ have_routes = TRUE;
+ if (rt_cidr == 0 && rt_addr.s_addr == 0) {
+ /* FIXME: how to handle multiple routers? */
+ *gwaddr = rt_route.s_addr;
+ } else {
+ route = nm_ip4_route_new ();
+ nm_ip4_route_set_dest (route, (guint32) rt_addr.s_addr);
+ nm_ip4_route_set_prefix (route, rt_cidr);
+ nm_ip4_route_set_next_hop (route, (guint32) rt_route.s_addr);
+
+ nm_ip4_config_take_route (ip4_config, route);
+ nm_log_info (LOGD_DHCP4, " classless static route %s/%d gw %s", *r, rt_cidr, *(r + 1));
+ }
+ }
+
+out:
+ g_strfreev (routes);
+ return have_routes;
+}
+
+static const char **
+process_dhclient_rfc3442_route (const char **octets, NMIP4Route **out_route)
+{
+ const char **o = octets;
+ int addr_len = 0, i = 0;
+ long int tmp;
+ NMIP4Route *route;
+ char *next_hop;
+ struct in_addr tmp_addr;
+
+ if (!*o)
+ return o; /* no prefix */
+
+ tmp = strtol (*o, NULL, 10);
+ if (tmp < 0 || tmp > 32) /* 32 == max IP4 prefix length */
+ return o;
+
+ route = nm_ip4_route_new ();
+ nm_ip4_route_set_prefix (route, (guint32) tmp);
+ o++;
+
+ if (tmp > 0)
+ addr_len = ((tmp - 1) / 8) + 1;
+
+ /* ensure there's at least the address + next hop left */
+ if (g_strv_length ((char **) o) < addr_len + 4)
+ goto error;
+
+ if (tmp) {
+ const char *addr[4] = { "0", "0", "0", "0" };
+ char *str_addr;
+
+ for (i = 0; i < addr_len; i++)
+ addr[i] = *o++;
+
+ str_addr = g_strjoin (".", addr[0], addr[1], addr[2], addr[3], NULL);
+ if (inet_pton (AF_INET, str_addr, &tmp_addr) <= 0) {
+ g_free (str_addr);
+ goto error;
+ }
+ tmp_addr.s_addr &= nm_utils_ip4_prefix_to_netmask ((guint32) tmp);
+ nm_ip4_route_set_dest (route, tmp_addr.s_addr);
+ }
+
+ /* Handle next hop */
+ next_hop = g_strjoin (".", o[0], o[1], o[2], o[3], NULL);
+ if (inet_pton (AF_INET, next_hop, &tmp_addr) <= 0) {
+ g_free (next_hop);
+ goto error;
+ }
+ nm_ip4_route_set_next_hop (route, tmp_addr.s_addr);
+ g_free (next_hop);
+
+ *out_route = route;
+ return o + 4; /* advance to past the next hop */
+
+error:
+ nm_ip4_route_unref (route);
+ return o;
+}
+
+static gboolean
+ip4_process_dhclient_rfc3442_routes (const char *str,
+ NMIP4Config *ip4_config,
+ guint32 *gwaddr)
+{
+ char **octets, **o;
+ gboolean have_routes = FALSE;
+ NMIP4Route *route = NULL;
+
+ o = octets = g_strsplit_set (str, " .", 0);
+ if (g_strv_length (octets) < 5) {
+ nm_log_warn (LOGD_DHCP4, "ignoring invalid classless static routes '%s'", str);
+ goto out;
+ }
+
+ while (*o) {
+ route = NULL;
+ o = (char **) process_dhclient_rfc3442_route ((const char **) o, &route);
+ if (!route) {
+ nm_log_warn (LOGD_DHCP4, "ignoring invalid classless static routes");
+ break;
+ }
+
+ have_routes = TRUE;
+ if (nm_ip4_route_get_prefix (route) == 0) {
+ /* gateway passed as classless static route */
+ *gwaddr = nm_ip4_route_get_next_hop (route);
+ nm_ip4_route_unref (route);
+ } else {
+ char addr[INET_ADDRSTRLEN + 1];
+ char nh[INET_ADDRSTRLEN + 1];
+ struct in_addr tmp;
+
+ /* normal route */
+ nm_ip4_config_take_route (ip4_config, route);
+
+ tmp.s_addr = nm_ip4_route_get_dest (route);
+ inet_ntop (AF_INET, &tmp, addr, sizeof (addr));
+ tmp.s_addr = nm_ip4_route_get_next_hop (route);
+ inet_ntop (AF_INET, &tmp, nh, sizeof (nh));
+ nm_log_info (LOGD_DHCP4, " classless static route %s/%d gw %s",
+ addr, nm_ip4_route_get_prefix (route), nh);
+ }
+ }
+
+out:
+ g_strfreev (octets);
+ return have_routes;
+}
+
+static gboolean
+ip4_process_classless_routes (GHashTable *options,
+ NMIP4Config *ip4_config,
+ guint32 *gwaddr)
+{
+ const char *str, *p;
+
+ g_return_val_if_fail (options != NULL, FALSE);
+ g_return_val_if_fail (ip4_config != NULL, FALSE);
+
+ *gwaddr = 0;
+
+ /* dhcpd/dhclient in Fedora has support for rfc3442 implemented using a
+ * slightly different format:
+ *
+ * option classless-static-routes = array of (destination-descriptor ip-address);
+ *
+ * which results in:
+ *
+ * 0 192.168.0.113 25.129.210.177.132 192.168.0.113 7.2 10.34.255.6
+ *
+ * dhcpcd supports classless static routes natively and uses this same
+ * option identifier with the following format:
+ *
+ * 192.168.10.0/24 192.168.1.1 10.0.0.0/8 10.17.66.41
+ */
+ str = g_hash_table_lookup (options, "new_classless_static_routes");
+
+ /* dhclient doesn't have actual support for rfc3442 classless static routes
+ * upstream. Thus, people resort to defining the option in dhclient.conf
+ * and using arbitrary formats like so:
+ *
+ * option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;
+ *
+ * See https://lists.isc.org/pipermail/dhcp-users/2008-December/007629.html
+ */
+ if (!str)
+ str = g_hash_table_lookup (options, "new_rfc3442_classless_static_routes");
+
+ /* Microsoft version; same as rfc3442 but with a different option # (249) */
+ if (!str)
+ str = g_hash_table_lookup (options, "new_ms_classless_static_routes");
+
+ if (!str || !strlen (str))
+ return FALSE;
+
+ p = str;
+ while (*p) {
+ if (!isdigit (*p) && (*p != ' ') && (*p != '.') && (*p != '/')) {
+ nm_log_warn (LOGD_DHCP4, "ignoring invalid classless static routes '%s'", str);
+ return FALSE;
+ }
+ p++;
+ };
+
+ if (strchr (str, '/')) {
+ /* dhcpcd format */
+ return ip4_process_dhcpcd_rfc3442_routes (str, ip4_config, gwaddr);
+ }
+
+ return ip4_process_dhclient_rfc3442_routes (str, ip4_config, gwaddr);
+}
+
static void
process_classful_routes (GHashTable *options, NMIP4Config *ip4_config)
{
@@ -744,7 +989,6 @@ ip4_options_to_config (NMDHCPClient *self)
NMIP4Address *addr = NULL;
char *str = NULL;
guint32 gwaddr = 0, prefix = 0;
- gboolean have_classless = FALSE;
g_return_val_if_fail (self != NULL, NULL);
g_return_val_if_fail (NM_IS_DHCP_CLIENT (self), NULL);
@@ -785,17 +1029,8 @@ ip4_options_to_config (NMDHCPClient *self)
/* Routes: if the server returns classless static routes, we MUST ignore
* the 'static_routes' option.
*/
- if (NM_DHCP_CLIENT_GET_CLASS (self)->ip4_process_classless_routes) {
- have_classless = NM_DHCP_CLIENT_GET_CLASS (self)->ip4_process_classless_routes (self,
- priv->options,
- ip4_config,
- &gwaddr);
- }
-
- if (!have_classless) {
- gwaddr = 0; /* Ensure client code doesn't lie */
+ if (!ip4_process_classless_routes (priv->options, ip4_config, &gwaddr))
process_classful_routes (priv->options, ip4_config);
- }
if (gwaddr) {
char buf[INET_ADDRSTRLEN + 1];
@@ -891,6 +1126,27 @@ ip4_options_to_config (NMDHCPClient *self)
nm_ip4_config_set_mtu (ip4_config, int_mtu);
}
+ str = g_hash_table_lookup (priv->options, "new_nis_domain");
+ if (str) {
+ nm_log_info (LOGD_DHCP4, " NIS domain '%s'", str);
+ nm_ip4_config_set_nis_domain (ip4_config, str);
+ }
+
+ str = g_hash_table_lookup (priv->options, "new_nis_servers");
+ if (str) {
+ char **searches = g_strsplit (str, " ", 0);
+ char **s;
+
+ for (s = searches; *s; s++) {
+ if (inet_pton (AF_INET, *s, &tmp_addr) > 0) {
+ nm_ip4_config_add_nis_server (ip4_config, tmp_addr.s_addr);
+ nm_log_info (LOGD_DHCP4, " nis '%s'", *s);
+ } else
+ nm_log_warn (LOGD_DHCP4, "ignoring invalid NIS server '%s'", *s);
+ }
+ g_strfreev (searches);
+ }
+
return ip4_config;
error:
diff --git a/src/dhcp-manager/nm-dhcp-client.h b/src/dhcp-manager/nm-dhcp-client.h
index 92b2b8fe51..f357170b9c 100644
--- a/src/dhcp-manager/nm-dhcp-client.h
+++ b/src/dhcp-manager/nm-dhcp-client.h
@@ -76,22 +76,15 @@ typedef struct {
/* Methods */
- /* Given the options table, extract any classless routes, add them to
- * the IP4 config and return TRUE if any existed. If a gateway was sent
- * as a classless route return that in out_gwaddr.
- */
- gboolean (*ip4_process_classless_routes) (NMDHCPClient *self,
- GHashTable *options,
- NMIP4Config *ip4_config,
- guint32 *out_gwaddr);
-
GPid (*ip4_start) (NMDHCPClient *self,
NMSettingIP4Config *s_ip4,
- guint8 *anycast_addr);
+ guint8 *anycast_addr,
+ const char *hostname);
GPid (*ip6_start) (NMDHCPClient *self,
NMSettingIP6Config *s_ip6,
guint8 *anycast_addr,
+ const char *hostname,
gboolean info_only);
void (*stop) (NMDHCPClient *self);
@@ -114,11 +107,13 @@ const char *nm_dhcp_client_get_uuid (NMDHCPClient *self);
gboolean nm_dhcp_client_start_ip4 (NMDHCPClient *self,
NMSettingIP4Config *s_ip4,
- guint8 *dhcp_anycast_addr);
+ guint8 *dhcp_anycast_addr,
+ const char *hostname);
gboolean nm_dhcp_client_start_ip6 (NMDHCPClient *self,
NMSettingIP6Config *s_ip6,
guint8 *dhcp_anycast_addr,
+ const char *hostname,
gboolean info_only);
void nm_dhcp_client_stop (NMDHCPClient *self);
diff --git a/src/dhcp-manager/nm-dhcp-dhclient-utils.c b/src/dhcp-manager/nm-dhcp-dhclient-utils.c
new file mode 100644
index 0000000000..cc5255ab59
--- /dev/null
+++ b/src/dhcp-manager/nm-dhcp-dhclient-utils.c
@@ -0,0 +1,217 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, 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) 2010 Red Hat, Inc.
+ */
+
+#include <config.h>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "nm-dhcp-dhclient-utils.h"
+
+#define CLIENTID_TAG "send dhcp-client-identifier"
+#define CLIENTID_FORMAT CLIENTID_TAG " \"%s\"; # added by NetworkManager"
+#define CLIENTID_FORMAT_OCTETS CLIENTID_TAG " %s; # added by NetworkManager"
+
+#define HOSTNAME_TAG "send host-name"
+#define HOSTNAME_FORMAT HOSTNAME_TAG " \"%s\"; # added by NetworkManager"
+
+#define ALSOREQ_TAG "also request "
+
+static void
+add_also_request (GPtrArray *array, const char *item)
+{
+ int i;
+
+ for (i = 0; i < array->len; i++) {
+ if (!strcmp (g_ptr_array_index (array, i), item))
+ return;
+ }
+ g_ptr_array_add (array, g_strdup (item));
+}
+
+char *
+nm_dhcp_dhclient_create_config (const char *interface,
+ NMSettingIP4Config *s_ip4,
+ guint8 *anycast_addr,
+ const char *hostname,
+ const char *orig_path,
+ const char *orig_contents)
+{
+ GString *new_contents;
+ GPtrArray *alsoreq;
+ int i;
+
+ new_contents = g_string_new (_("# Created by NetworkManager\n"));
+ alsoreq = g_ptr_array_sized_new (5);
+
+ if (orig_contents) {
+ char **lines, **line;
+ gboolean in_alsoreq = FALSE;
+
+ g_string_append_printf (new_contents, _("# Merged from %s\n\n"), orig_path);
+
+ lines = g_strsplit_set (orig_contents, "\n\r", 0);
+ for (line = lines; lines && *line; line++) {
+ char *p = *line;
+
+ if (!strlen (g_strstrip (p)))
+ continue;
+
+ /* Override config file "dhcp-client-id" and use one from the
+ * connection.
+ */
+ if ( s_ip4
+ && nm_setting_ip4_config_get_dhcp_client_id (s_ip4)
+ && !strncmp (p, CLIENTID_TAG, strlen (CLIENTID_TAG)))
+ continue;
+
+ /* Override config file hostname and use one from the connection */
+ if (hostname && !strncmp (p, HOSTNAME_TAG, strlen (HOSTNAME_TAG)))
+ continue;
+
+ /* Check for "also require" */
+ if (!strncmp (p, ALSOREQ_TAG, strlen (ALSOREQ_TAG))) {
+ in_alsoreq = TRUE;
+ p += strlen (ALSOREQ_TAG);
+ }
+
+ if (in_alsoreq) {
+ char **areq, **aiter;
+
+ /* Grab each 'also require' option and save for later */
+ areq = g_strsplit_set (p, "\t ,", -1);
+ for (aiter = areq; aiter && *aiter; aiter++) {
+ if (!strlen (g_strstrip (*aiter)))
+ continue;
+
+ if (*aiter[0] == ';') {
+ /* all done */
+ in_alsoreq = FALSE;
+ break;
+ }
+
+ if (!isalnum ((*aiter)[0]))
+ continue;
+
+ if ((*aiter)[strlen (*aiter) - 1] == ';') {
+ /* Remove the EOL marker */
+ (*aiter)[strlen (*aiter) - 1] = '\0';
+ in_alsoreq = FALSE;
+ }
+
+ add_also_request (alsoreq, *aiter);
+ }
+
+ if (areq)
+ g_strfreev (areq);
+
+ continue;
+ }
+
+ /* Existing configuration line is OK, add it to new configuration */
+ g_string_append (new_contents, *line);
+ g_string_append_c (new_contents, '\n');
+ }
+
+ if (lines)
+ g_strfreev (lines);
+ } else
+ g_string_append_c (new_contents, '\n');
+
+ /* Add NM options from connection */
+ if (s_ip4) {
+ const char *tmp;
+ gboolean added = FALSE;
+
+ tmp = nm_setting_ip4_config_get_dhcp_client_id (s_ip4);
+ if (tmp) {
+ gboolean is_octets = TRUE;
+ const char *p = tmp;
+
+ while (*p) {
+ if (!isxdigit (*p) && (*p != ':')) {
+ is_octets = FALSE;
+ break;
+ }
+ p++;
+ }
+
+ /* If the client ID is just hex digits and : then don't use quotes,
+ * because dhclient expects either a quoted ASCII string, or a byte
+ * array formated as hex octets separated by :
+ */
+ if (is_octets)
+ g_string_append_printf (new_contents, CLIENTID_FORMAT_OCTETS "\n", tmp);
+ else
+ g_string_append_printf (new_contents, CLIENTID_FORMAT "\n", tmp);
+ added = TRUE;
+ }
+
+ if (hostname) {
+ g_string_append_printf (new_contents, HOSTNAME_FORMAT "\n", hostname);
+ added = TRUE;
+ }
+
+ if (added)
+ g_string_append_c (new_contents, '\n');
+ }
+
+ /* Define options for classless static routes */
+ g_string_append (new_contents,
+ "option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;\n");
+ g_string_append (new_contents,
+ "option ms-classless-static-routes code 249 = array of unsigned integer 8;\n");
+ /* Web Proxy Auto-Discovery option (bgo #368423) */
+ g_string_append (new_contents, "option wpad code 252 = string;\n");
+
+ g_string_append_c (new_contents, '\n');
+
+ /* Everything we want to request from the DHCP server */
+ add_also_request (alsoreq, "rfc3442-classless-static-routes");
+ add_also_request (alsoreq, "ms-classless-static-routes");
+ add_also_request (alsoreq, "wpad");
+ add_also_request (alsoreq, "ntp-servers");
+
+ /* And add it to the dhclient configuration */
+ for (i = 0; i < alsoreq->len; i++) {
+ char *t = g_ptr_array_index (alsoreq, i);
+
+ g_string_append_printf (new_contents, "also request %s;\n", t);
+ g_free (t);
+ }
+ g_ptr_array_free (alsoreq, TRUE);
+
+ g_string_append_c (new_contents, '\n');
+
+ if (anycast_addr) {
+ g_string_append_printf (new_contents, "interface \"%s\" {\n"
+ " initial-interval 1; \n"
+ " anycast-mac ethernet %02x:%02x:%02x:%02x:%02x:%02x;\n"
+ "}\n",
+ interface,
+ anycast_addr[0], anycast_addr[1],
+ anycast_addr[2], anycast_addr[3],
+ anycast_addr[4], anycast_addr[5]);
+ }
+
+ return g_string_free (new_contents, FALSE);
+}
+
diff --git a/src/dhcp-manager/nm-dhcp-dhclient-utils.h b/src/dhcp-manager/nm-dhcp-dhclient-utils.h
new file mode 100644
index 0000000000..77def55182
--- /dev/null
+++ b/src/dhcp-manager/nm-dhcp-dhclient-utils.h
@@ -0,0 +1,35 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, 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) 2010 Red Hat, Inc.
+ */
+
+#ifndef NM_DHCP_DHCLIENT_UTILS_H
+#define NM_DHCP_DHCLIENT_UTILS_H
+
+#include <glib.h>
+#include <glib-object.h>
+
+#include <nm-setting-ip4-config.h>
+
+char *nm_dhcp_dhclient_create_config (const char *interface,
+ NMSettingIP4Config *s_ip4,
+ guint8 *anycast_addr,
+ const char *hostname,
+ const char *orig_path,
+ const char *orig_contents);
+
+#endif /* NM_DHCP_DHCLIENT_UTILS_H */
+
diff --git a/src/dhcp-manager/nm-dhcp-dhclient.c b/src/dhcp-manager/nm-dhcp-dhclient.c
index d7a6e32fb3..f6f2a540dc 100644
--- a/src/dhcp-manager/nm-dhcp-dhclient.c
+++ b/src/dhcp-manager/nm-dhcp-dhclient.c
@@ -39,15 +39,18 @@
#include "nm-dhcp-dhclient.h"
#include "nm-utils.h"
#include "nm-logging.h"
+#include "nm-dhcp-dhclient-utils.h"
G_DEFINE_TYPE (NMDHCPDhclient, nm_dhcp_dhclient, NM_TYPE_DHCP_CLIENT)
#define NM_DHCP_DHCLIENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DHCP_DHCLIENT, NMDHCPDhclientPrivate))
-#if defined(TARGET_DEBIAN)
-#define NM_DHCLIENT_LEASE_DIR LOCALSTATEDIR "/lib/dhcp3"
-#elif defined(TARGET_SUSE) || defined(TARGET_MANDRIVA)
+#if defined(TARGET_DEBIAN) || defined(TARGET_SUSE) || defined(TARGET_MANDRIVA)
+#if defined(DHCLIENT_V3)
+#define NM_DHCLIENT_LEASE_DIR LOCALSTATEDIR "/lib/dhcp3"
+#else
#define NM_DHCLIENT_LEASE_DIR LOCALSTATEDIR "/lib/dhcp"
+#endif
#else
#define NM_DHCLIENT_LEASE_DIR LOCALSTATEDIR "/lib/dhclient"
#endif
@@ -300,121 +303,37 @@ out:
}
-#define DHCP_CLIENT_ID_TAG "send dhcp-client-identifier"
-#define DHCP_CLIENT_ID_FORMAT DHCP_CLIENT_ID_TAG " \"%s\"; # added by NetworkManager"
-#define DHCP_CLIENT_ID_FORMAT_OCTETS DHCP_CLIENT_ID_TAG " %s; # added by NetworkManager"
-
-#define DHCP_HOSTNAME_TAG "send host-name"
-#define DHCP_HOSTNAME_FORMAT DHCP_HOSTNAME_TAG " \"%s\"; # added by NetworkManager"
static gboolean
merge_dhclient_config (const char *iface,
const char *conf_file,
NMSettingIP4Config *s_ip4,
guint8 *anycast_addr,
+ const char *hostname,
const char *orig_path,
GError **error)
{
- GString *new_contents;
- char *orig_contents = NULL;
+ char *orig = NULL, *new;
gboolean success = FALSE;
g_return_val_if_fail (iface != NULL, FALSE);
g_return_val_if_fail (conf_file != NULL, FALSE);
- new_contents = g_string_new (_("# Created by NetworkManager\n"));
-
if (g_file_test (orig_path, G_FILE_TEST_EXISTS)) {
GError *read_error = NULL;
- if (!g_file_get_contents (orig_path, &orig_contents, NULL, &read_error)) {
+ if (!g_file_get_contents (orig_path, &orig, NULL, &read_error)) {
nm_log_warn (LOGD_DHCP, "(%s): error reading dhclient configuration %s: %s",
iface, orig_path, read_error->message);
g_error_free (read_error);
}
}
- /* Add existing options, if any, but ignore stuff NM will replace. */
- if (orig_contents) {
- char **lines = NULL, **line;
-
- g_string_append_printf (new_contents, _("# Merged from %s\n\n"), orig_path);
-
- lines = g_strsplit_set (orig_contents, "\n\r", 0);
- for (line = lines; lines && *line; line++) {
- gboolean ignore = FALSE;
-
- if (!strlen (g_strstrip (*line)))
- continue;
-
- if ( s_ip4
- && nm_setting_ip4_config_get_dhcp_client_id (s_ip4)
- && !strncmp (*line, DHCP_CLIENT_ID_TAG, strlen (DHCP_CLIENT_ID_TAG)))
- ignore = TRUE;
-
- if ( s_ip4
- && nm_setting_ip4_config_get_dhcp_hostname (s_ip4)
- && !strncmp (*line, DHCP_HOSTNAME_TAG, strlen (DHCP_HOSTNAME_TAG)))
- ignore = TRUE;
-
- if (!ignore) {
- g_string_append (new_contents, *line);
- g_string_append_c (new_contents, '\n');
- }
- }
-
- if (lines)
- g_strfreev (lines);
- g_free (orig_contents);
- } else
- g_string_append_c (new_contents, '\n');
-
- /* Add NM options from connection */
- if (s_ip4) {
- const char *tmp;
-
- tmp = nm_setting_ip4_config_get_dhcp_client_id (s_ip4);
- if (tmp) {
- gboolean is_octets = TRUE;
- const char *p = tmp;
-
- while (*p) {
- if (!isxdigit (*p) && (*p != ':')) {
- is_octets = FALSE;
- break;
- }
- p++;
- }
+ new = nm_dhcp_dhclient_create_config (iface, s_ip4, anycast_addr, hostname, orig_path, orig);
+ g_assert (new);
+ success = g_file_set_contents (conf_file, new, -1, error);
+ g_free (new);
- /* If the client ID is just hex digits and : then don't use quotes,
- * becuase dhclient expects either a quoted ASCII string, or a byte
- * array formated as hex octets separated by :
- */
- if (is_octets)
- g_string_append_printf (new_contents, DHCP_CLIENT_ID_FORMAT_OCTETS "\n", tmp);
- else
- g_string_append_printf (new_contents, DHCP_CLIENT_ID_FORMAT "\n", tmp);
- }
-
- tmp = nm_setting_ip4_config_get_dhcp_hostname (s_ip4);
- if (tmp)
- g_string_append_printf (new_contents, DHCP_HOSTNAME_FORMAT "\n", tmp);
- }
-
- if (anycast_addr) {
- g_string_append_printf (new_contents, "interface \"%s\" {\n"
- " initial-interval 1; \n"
- " anycast-mac ethernet %02x:%02x:%02x:%02x:%02x:%02x;\n"
- "}\n",
- iface,
- anycast_addr[0], anycast_addr[1],
- anycast_addr[2], anycast_addr[3],
- anycast_addr[4], anycast_addr[5]);
- }
-
- success = g_file_set_contents (conf_file, new_contents->str, -1, error);
-
- g_string_free (new_contents, TRUE);
return success;
}
@@ -427,7 +346,8 @@ merge_dhclient_config (const char *iface,
static char *
create_dhclient_config (const char *iface,
NMSettingIP4Config *s_ip4,
- guint8 *dhcp_anycast_addr)
+ guint8 *dhcp_anycast_addr,
+ const char *hostname)
{
char *orig = NULL, *tmp, *conf_file = NULL;
GError *error = NULL;
@@ -437,10 +357,12 @@ create_dhclient_config (const char *iface,
#if defined(TARGET_SUSE)
orig = g_strdup (SYSCONFDIR "/dhclient.conf");
-#elif defined(TARGET_DEBIAN)
+#elif defined(TARGET_DEBIAN) || defined(TARGET_GENTOO)
+#if defined(DHCLIENT_V3)
orig = g_strdup (SYSCONFDIR "/dhcp3/dhclient.conf");
-#elif defined(TARGET_GENTOO)
+#else
orig = g_strdup (SYSCONFDIR "/dhcp/dhclient.conf");
+#endif
#else
orig = g_strdup_printf (SYSCONFDIR "/dhclient-%s.conf", iface);
#endif
@@ -450,12 +372,24 @@ create_dhclient_config (const char *iface,
return FALSE;
}
+#if !defined(TARGET_SUSE) && !defined(TARGET_DEBIAN) && !defined(TARGET_GENTOO)
+ /* Try /etc/dhcp/ too (rh #607759) */
+ if (!g_file_test (orig, G_FILE_TEST_EXISTS)) {
+ g_free (orig);
+ orig = g_strdup_printf (SYSCONFDIR "/dhcp/dhclient-%s.conf", iface);
+ if (!orig) {
+ nm_log_warn (LOGD_DHCP, "(%s): not enough memory for dhclient options.", iface);
+ return FALSE;
+ }
+ }
+#endif
+
tmp = g_strdup_printf ("nm-dhclient-%s.conf", iface);
conf_file = g_build_filename ("/var", "run", tmp, NULL);
g_free (tmp);
error = NULL;
- success = merge_dhclient_config (iface, conf_file, s_ip4, dhcp_anycast_addr, orig, &error);
+ success = merge_dhclient_config (iface, conf_file, s_ip4, dhcp_anycast_addr, hostname, orig, &error);
if (!success) {
nm_log_warn (LOGD_DHCP, "(%s): error creating dhclient configuration: %s",
iface, error->message);
@@ -490,7 +424,6 @@ dhclient_start (NMDHCPClient *client,
guint log_domain;
g_return_val_if_fail (priv->pid_file == NULL, -1);
- g_return_val_if_fail (ip_opt != NULL, -1);
iface = nm_dhcp_client_get_iface (client);
uuid = nm_dhcp_client_get_uuid (client);
@@ -498,6 +431,15 @@ dhclient_start (NMDHCPClient *client,
log_domain = ipv6 ? LOGD_DHCP6 : LOGD_DHCP4;
+#if defined(DHCLIENT_V3)
+ if (ipv6) {
+ nm_log_warn (log_domain, "(%s): ISC dhcp3 does not support IPv6", iface);
+ return -1;
+ }
+#else
+ g_return_val_if_fail (ip_opt != NULL, -1);
+#endif
+
priv->pid_file = g_strdup_printf (LOCALSTATEDIR "/run/dhclient%s-%s.pid",
ipv6 ? "6" : "",
iface);
@@ -527,10 +469,11 @@ dhclient_start (NMDHCPClient *client,
g_ptr_array_add (argv, (gpointer) "-d");
+#if !defined(DHCLIENT_V3)
g_ptr_array_add (argv, (gpointer) ip_opt);
-
if (mode_opt)
g_ptr_array_add (argv, (gpointer) mode_opt);
+#endif
g_ptr_array_add (argv, (gpointer) "-sf"); /* Set script file */
g_ptr_array_add (argv, (gpointer) ACTION_SCRIPT_PATH );
@@ -568,14 +511,15 @@ dhclient_start (NMDHCPClient *client,
static GPid
real_ip4_start (NMDHCPClient *client,
NMSettingIP4Config *s_ip4,
- guint8 *dhcp_anycast_addr)
+ guint8 *dhcp_anycast_addr,
+ const char *hostname)
{
NMDHCPDhclientPrivate *priv = NM_DHCP_DHCLIENT_GET_PRIVATE (client);
const char *iface;
iface = nm_dhcp_client_get_iface (client);
- priv->conf_file = create_dhclient_config (iface, s_ip4, dhcp_anycast_addr);
+ priv->conf_file = create_dhclient_config (iface, s_ip4, dhcp_anycast_addr, hostname);
if (!priv->conf_file) {
nm_log_warn (LOGD_DHCP4, "(%s): error creating dhclient configuration file.", iface);
return -1;
@@ -588,6 +532,7 @@ static GPid
real_ip6_start (NMDHCPClient *client,
NMSettingIP6Config *s_ip6,
guint8 *dhcp_anycast_addr,
+ const char *hostname,
gboolean info_only)
{
return dhclient_start (client, "-6", info_only ? "-S" : "-N");
@@ -607,136 +552,6 @@ real_stop (NMDHCPClient *client)
remove (priv->pid_file);
}
-static const char **
-process_rfc3442_route (const char **octets, NMIP4Route **out_route)
-{
- const char **o = octets;
- int addr_len = 0, i = 0;
- long int tmp;
- NMIP4Route *route;
- char *next_hop;
- struct in_addr tmp_addr;
-
- if (!*o)
- return o; /* no prefix */
-
- tmp = strtol (*o, NULL, 10);
- if (tmp < 0 || tmp > 32) /* 32 == max IP4 prefix length */
- return o;
-
- route = nm_ip4_route_new ();
- nm_ip4_route_set_prefix (route, (guint32) tmp);
- o++;
-
- if (tmp > 0)
- addr_len = ((tmp - 1) / 8) + 1;
-
- /* ensure there's at least the address + next hop left */
- if (g_strv_length ((char **) o) < addr_len + 4)
- goto error;
-
- if (tmp) {
- const char *addr[4] = { "0", "0", "0", "0" };
- char *str_addr;
-
- for (i = 0; i < addr_len; i++)
- addr[i] = *o++;
-
- str_addr = g_strjoin (".", addr[0], addr[1], addr[2], addr[3], NULL);
- if (inet_pton (AF_INET, str_addr, &tmp_addr) <= 0) {
- g_free (str_addr);
- goto error;
- }
- tmp_addr.s_addr &= nm_utils_ip4_prefix_to_netmask ((guint32) tmp);
- nm_ip4_route_set_dest (route, tmp_addr.s_addr);
- }
-
- /* Handle next hop */
- next_hop = g_strjoin (".", o[0], o[1], o[2], o[3], NULL);
- if (inet_pton (AF_INET, next_hop, &tmp_addr) <= 0) {
- g_free (next_hop);
- goto error;
- }
- nm_ip4_route_set_next_hop (route, tmp_addr.s_addr);
- g_free (next_hop);
-
- *out_route = route;
- return o + 4; /* advance to past the next hop */
-
-error:
- nm_ip4_route_unref (route);
- return o;
-}
-
-static gboolean
-real_ip4_process_classless_routes (NMDHCPClient *client,
- GHashTable *options,
- NMIP4Config *ip4_config,
- guint32 *gwaddr)
-{
- const char *str;
- char **octets, **o;
- gboolean have_routes = FALSE;
- NMIP4Route *route = NULL;
-
- /* dhclient doesn't have actual support for rfc3442 classless static routes
- * upstream. Thus, people resort to defining the option in dhclient.conf
- * and using arbitrary formats like so:
- *
- * option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;
- *
- * See https://lists.isc.org/pipermail/dhcp-users/2008-December/007629.html
- */
-
- str = g_hash_table_lookup (options, "new_rfc3442_classless_static_routes");
- /* Microsoft version; same as rfc3442 but with a different option # (249) */
- if (!str)
- str = g_hash_table_lookup (options, "new_ms_classless_static_routes");
-
- if (!str || !strlen (str))
- return FALSE;
-
- o = octets = g_strsplit (str, " ", 0);
- if (g_strv_length (octets) < 5) {
- nm_log_warn (LOGD_DHCP4, "ignoring invalid classless static routes '%s'", str);
- goto out;
- }
-
- while (*o) {
- route = NULL;
- o = (char **) process_rfc3442_route ((const char **) o, &route);
- if (!route) {
- nm_log_warn (LOGD_DHCP4, "ignoring invalid classless static routes");
- break;
- }
-
- have_routes = TRUE;
- if (nm_ip4_route_get_prefix (route) == 0) {
- /* gateway passed as classless static route */
- *gwaddr = nm_ip4_route_get_next_hop (route);
- nm_ip4_route_unref (route);
- } else {
- char addr[INET_ADDRSTRLEN + 1];
- char nh[INET_ADDRSTRLEN + 1];
- struct in_addr tmp;
-
- /* normal route */
- nm_ip4_config_take_route (ip4_config, route);
-
- tmp.s_addr = nm_ip4_route_get_dest (route);
- inet_ntop (AF_INET, &tmp, addr, sizeof (addr));
- tmp.s_addr = nm_ip4_route_get_next_hop (route);
- inet_ntop (AF_INET, &tmp, nh, sizeof (nh));
- nm_log_info (LOGD_DHCP4, " classless static route %s/%d gw %s",
- addr, nm_ip4_route_get_prefix (route), nh);
- }
- }
-
-out:
- g_strfreev (octets);
- return have_routes;
-}
-
/***************************************************/
static void
@@ -773,6 +588,5 @@ nm_dhcp_dhclient_class_init (NMDHCPDhclientClass *dhclient_class)
client_class->ip4_start = real_ip4_start;
client_class->ip6_start = real_ip6_start;
client_class->stop = real_stop;
- client_class->ip4_process_classless_routes = real_ip4_process_classless_routes;
}
diff --git a/src/dhcp-manager/nm-dhcp-dhcpcd.c b/src/dhcp-manager/nm-dhcp-dhcpcd.c
index 403431fcb4..4fb703c480 100644
--- a/src/dhcp-manager/nm-dhcp-dhcpcd.c
+++ b/src/dhcp-manager/nm-dhcp-dhcpcd.c
@@ -88,14 +88,15 @@ dhcpcd_child_setup (gpointer user_data G_GNUC_UNUSED)
static GPid
real_ip4_start (NMDHCPClient *client,
NMSettingIP4Config *s_ip4,
- guint8 *dhcp_anycast_addr)
+ guint8 *dhcp_anycast_addr,
+ const char *hostname)
{
NMDHCPDhcpcdPrivate *priv = NM_DHCP_DHCPCD_GET_PRIVATE (client);
GPtrArray *argv = NULL;
GPid pid = -1;
GError *error = NULL;
char *pid_contents = NULL, *binary_name, *cmd_str;
- const char *iface, *uuid, *hostname;
+ const char *iface, *uuid;
g_return_val_if_fail (priv->pid_file == NULL, -1);
@@ -127,10 +128,11 @@ real_ip4_start (NMDHCPClient *client,
g_ptr_array_add (argv, (gpointer) "-L"); /* Disable built-in IPv4LL since we use avahi-autoipd */
+ g_ptr_array_add (argv, (gpointer) "-G"); /* Let NM handle routing */
+
g_ptr_array_add (argv, (gpointer) "-c"); /* Set script file */
g_ptr_array_add (argv, (gpointer) ACTION_SCRIPT_PATH );
- hostname = nm_setting_ip4_config_get_dhcp_hostname (s_ip4);
if (hostname && strlen (hostname)) {
g_ptr_array_add (argv, (gpointer) "-h"); /* Send hostname to DHCP server */
g_ptr_array_add (argv, (gpointer) hostname );
@@ -160,6 +162,7 @@ static GPid
real_ip6_start (NMDHCPClient *client,
NMSettingIP6Config *s_ip6,
guint8 *dhcp_anycast_addr,
+ const char *hostname,
gboolean info_only)
{
nm_log_warn (LOGD_DHCP6, "the dhcpcd backend does not support IPv6.");
@@ -178,83 +181,6 @@ real_stop (NMDHCPClient *client)
remove (priv->pid_file);
}
-static gboolean
-real_ip4_process_classless_routes (NMDHCPClient *client,
- GHashTable *options,
- NMIP4Config *ip4_config,
- guint32 *gwaddr)
-{
- const char *str;
- char **routes, **r;
- gboolean have_routes = FALSE;
-
- /* Classless static routes over-ride any static routes and routers
- * provided. We should also check for MS classless static routes as
- * they implemented the draft RFC using their own code.
- */
- str = g_hash_table_lookup (options, "new_classless_static_routes");
- if (!str)
- str = g_hash_table_lookup (options, "new_ms_classless_static_routes");
-
- if (!str || !strlen (str))
- return FALSE;
-
- routes = g_strsplit (str, " ", 0);
- if (g_strv_length (routes) == 0)
- goto out;
-
- if ((g_strv_length (routes) % 2) != 0) {
- nm_log_warn (LOGD_DHCP4, " classless static routes provided, but invalid");
- goto out;
- }
-
- for (r = routes; *r; r += 2) {
- char *slash;
- NMIP4Route *route;
- int rt_cidr = 32;
- struct in_addr rt_addr;
- struct in_addr rt_route;
-
- slash = strchr(*r, '/');
- if (slash) {
- *slash = '\0';
- errno = 0;
- rt_cidr = strtol (slash + 1, NULL, 10);
- if ((errno == EINVAL) || (errno == ERANGE)) {
- nm_log_warn (LOGD_DHCP4, "DHCP provided invalid classless static route cidr: '%s'", slash + 1);
- continue;
- }
- }
- if (inet_pton (AF_INET, *r, &rt_addr) <= 0) {
- nm_log_warn (LOGD_DHCP4, "DHCP provided invalid classless static route address: '%s'", *r);
- continue;
- }
- if (inet_pton (AF_INET, *(r + 1), &rt_route) <= 0) {
- nm_log_warn (LOGD_DHCP4, "DHCP provided invalid classless static route gateway: '%s'", *(r + 1));
- continue;
- }
-
- have_routes = TRUE;
- if (rt_cidr == 0 && rt_addr.s_addr == 0) {
- /* FIXME: how to handle multiple routers? */
- *gwaddr = rt_addr.s_addr;
- } else {
- route = nm_ip4_route_new ();
- nm_ip4_route_set_dest (route, (guint32) rt_addr.s_addr);
- nm_ip4_route_set_prefix (route, rt_cidr);
- nm_ip4_route_set_next_hop (route, (guint32) rt_route.s_addr);
-
-
- nm_ip4_config_take_route (ip4_config, route);
- nm_log_info (LOGD_DHCP4, " classless static route %s/%d gw %s", *r, rt_cidr, *(r + 1));
- }
- }
-
-out:
- g_strfreev (routes);
- return have_routes;
-}
-
/***************************************************/
static void
@@ -289,6 +215,5 @@ nm_dhcp_dhcpcd_class_init (NMDHCPDhcpcdClass *dhcpcd_class)
client_class->ip4_start = real_ip4_start;
client_class->ip6_start = real_ip6_start;
client_class->stop = real_stop;
- client_class->ip4_process_classless_routes = real_ip4_process_classless_routes;
}
diff --git a/src/dhcp-manager/nm-dhcp-manager.c b/src/dhcp-manager/nm-dhcp-manager.c
index 7b110fb232..a1e3e5e24d 100644
--- a/src/dhcp-manager/nm-dhcp-manager.c
+++ b/src/dhcp-manager/nm-dhcp-manager.c
@@ -265,8 +265,13 @@ get_client_type (const char *client, GError **error)
const char *dhclient_path = NULL;
const char *dhcpcd_path = NULL;
- dhclient_path = nm_dhcp_dhclient_get_path (DHCLIENT_PATH);
- dhcpcd_path = nm_dhcp_dhcpcd_get_path (DHCPCD_PATH);
+ /* If a client was disabled at build-time, its *_PATH define will be
+ * an empty string.
+ */
+ if (DHCLIENT_PATH && strlen (DHCLIENT_PATH))
+ dhclient_path = nm_dhcp_dhclient_get_path (DHCLIENT_PATH);
+ if (DHCPCD_PATH && strlen (DHCPCD_PATH))
+ dhcpcd_path = nm_dhcp_dhcpcd_get_path (DHCPCD_PATH);
if (!client) {
if (dhclient_path)
@@ -407,6 +412,7 @@ client_start (NMDHCPManager *self,
NMSettingIP6Config *s_ip6,
guint32 timeout,
guint8 *dhcp_anycast_addr,
+ const char *hostname,
gboolean info_only)
{
NMDHCPManagerPrivate *priv;
@@ -438,9 +444,9 @@ client_start (NMDHCPManager *self,
add_client (self, client);
if (ipv6)
- success = nm_dhcp_client_start_ip6 (client, s_ip6, dhcp_anycast_addr, info_only);
+ success = nm_dhcp_client_start_ip6 (client, s_ip6, dhcp_anycast_addr, hostname, info_only);
else
- success = nm_dhcp_client_start_ip4 (client, s_ip4, dhcp_anycast_addr);
+ success = nm_dhcp_client_start_ip4 (client, s_ip4, dhcp_anycast_addr, hostname);
if (!success) {
remove_client (self, client);
@@ -462,6 +468,7 @@ nm_dhcp_manager_start_ip4 (NMDHCPManager *self,
{
NMDHCPManagerPrivate *priv;
NMDHCPClient *client = NULL;
+ const char *hostname = NULL;
g_return_val_if_fail (self, NULL);
g_return_val_if_fail (NM_IS_DHCP_MANAGER (self), NULL);
@@ -476,27 +483,26 @@ nm_dhcp_manager_start_ip4 (NMDHCPManager *self,
g_return_val_if_fail (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0, NULL);
}
- if ( nm_setting_ip4_config_get_dhcp_send_hostname (s_ip4)
- && (nm_setting_ip4_config_get_dhcp_hostname (s_ip4) == NULL)
- && priv->hostname_provider != NULL) {
-
- s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_duplicate (NM_SETTING (s_ip4)));
+ /* If we're asked to send the hostname to DHCP server, and the hostname
+ * isn't specified, and a hostname provider is registered: use that
+ */
+ if (nm_setting_ip4_config_get_dhcp_send_hostname (s_ip4)) {
+ hostname = nm_setting_ip4_config_get_dhcp_hostname (s_ip4);
- /* We're asked to send the hostname to DHCP server, the hostname
- * isn't specified, and a hostname provider is registered: use that
+ /* If we're supposed to send the hostname to the DHCP server but
+ * the user didn't specify one, use the persistent hostname.
*/
- g_object_set (G_OBJECT (s_ip4),
- NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME,
- nm_hostname_provider_get_hostname (priv->hostname_provider),
- NULL);
- } else
- g_object_ref (s_ip4);
+ if (!hostname && priv->hostname_provider) {
+ hostname = nm_hostname_provider_get_hostname (priv->hostname_provider);
+ if ( hostname
+ && (!strcmp (hostname, "localhost.localdomain") ||
+ !strcmp (hostname, "localhost6.localdomain6")))
+ hostname = NULL;
+ }
+ }
}
- client = client_start (self, iface, uuid, FALSE, s_ip4, NULL, timeout, dhcp_anycast_addr, FALSE);
-
- if (s_ip4)
- g_object_unref (s_ip4);
+ client = client_start (self, iface, uuid, FALSE, s_ip4, NULL, timeout, dhcp_anycast_addr, hostname, FALSE);
return client;
}
@@ -511,7 +517,7 @@ nm_dhcp_manager_start_ip6 (NMDHCPManager *self,
guint8 *dhcp_anycast_addr,
gboolean info_only)
{
- return client_start (self, iface, uuid, TRUE, NULL, s_ip6, timeout, dhcp_anycast_addr, info_only);
+ return client_start (self, iface, uuid, TRUE, NULL, s_ip6, timeout, dhcp_anycast_addr, NULL, info_only);
}
static void
diff --git a/src/dhcp-manager/tests/Makefile.am b/src/dhcp-manager/tests/Makefile.am
new file mode 100644
index 0000000000..b075fd683a
--- /dev/null
+++ b/src/dhcp-manager/tests/Makefile.am
@@ -0,0 +1,28 @@
+INCLUDES = \
+ -I$(top_srcdir)/include \
+ -I${top_srcdir}/libnm-util \
+ -I$(top_srcdir)/src/dhcp-manager
+
+noinst_PROGRAMS = test-dhcp-dhclient
+
+####### policy /etc/hosts test #######
+
+test_dhcp_dhclient_SOURCES = \
+ test-dhcp-dhclient.c
+
+test_dhcp_dhclient_CPPFLAGS = \
+ $(GLIB_CFLAGS)
+
+test_dhcp_dhclient_LDADD = \
+ -ldl \
+ $(top_builddir)/src/dhcp-manager/libdhcp-dhclient.la \
+ $(top_builddir)/libnm-util/libnm-util.la \
+ $(GLIB_LIBS)
+
+if WITH_TESTS
+
+check-local: test-dhcp-dhclient
+ $(abs_builddir)/test-dhcp-dhclient
+
+endif
+
diff --git a/src/dhcp-manager/tests/test-dhcp-dhclient.c b/src/dhcp-manager/tests/test-dhcp-dhclient.c
new file mode 100644
index 0000000000..c1cd6f80c4
--- /dev/null
+++ b/src/dhcp-manager/tests/test-dhcp-dhclient.c
@@ -0,0 +1,249 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, 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) 2010 Red Hat, Inc.
+ *
+ */
+
+#include <glib.h>
+#include <string.h>
+
+#include "nm-dhcp-dhclient-utils.h"
+#include "nm-utils.h"
+
+#define DEBUG 0
+
+static void
+test_config (const char *orig,
+ const char *expected,
+ const char *hostname,
+ const char *dhcp_client_id,
+ const char *iface,
+ guint8 *anycast_addr)
+{
+ NMSettingIP4Config *s_ip4;
+ char *new;
+
+ s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID, dhcp_client_id, NULL);
+
+ new = nm_dhcp_dhclient_create_config (iface,
+ s_ip4,
+ anycast_addr,
+ hostname,
+ "/path/to/dhclient.conf",
+ orig);
+ g_assert (new != NULL);
+
+#if DEBUG
+ g_message ("\n- NEW ---------------------------------\n"
+ "%s"
+ "+ EXPECTED ++++++++++++++++++++++++++++++\n"
+ "%s"
+ "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
+ new, expected);
+#endif
+ g_assert (strlen (new) == strlen (expected));
+ g_assert (strcmp (new, expected) == 0);
+ g_free (new);
+}
+
+/*******************************************/
+
+static const char *orig_missing_expected = \
+ "# Created by NetworkManager\n"
+ "\n"
+ "option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;\n"
+ "option ms-classless-static-routes code 249 = array of unsigned integer 8;\n"
+ "option wpad code 252 = string;\n"
+ "\n"
+ "also request rfc3442-classless-static-routes;\n"
+ "also request ms-classless-static-routes;\n"
+ "also request wpad;\n"
+ "also request ntp-servers;\n"
+ "\n";
+
+static void
+test_orig_missing (void)
+{
+ test_config (NULL, orig_missing_expected,
+ NULL,
+ NULL,
+ "eth0",
+ NULL);
+}
+
+/*******************************************/
+
+static const char *override_client_id_orig = \
+ "send dhcp-client-identifier 00:30:04:20:7A:08;\n";
+
+static const char *override_client_id_expected = \
+ "# Created by NetworkManager\n"
+ "# Merged from /path/to/dhclient.conf\n"
+ "\n"
+ "send dhcp-client-identifier 11:22:33:44:55:66; # added by NetworkManager\n"
+ "\n"
+ "option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;\n"
+ "option ms-classless-static-routes code 249 = array of unsigned integer 8;\n"
+ "option wpad code 252 = string;\n"
+ "\n"
+ "also request rfc3442-classless-static-routes;\n"
+ "also request ms-classless-static-routes;\n"
+ "also request wpad;\n"
+ "also request ntp-servers;\n"
+ "\n";
+
+static void
+test_override_client_id (void)
+{
+ test_config (override_client_id_orig, override_client_id_expected,
+ NULL,
+ "11:22:33:44:55:66",
+ "eth0",
+ NULL);
+}
+
+/*******************************************/
+
+static const char *override_hostname_orig = \
+ "send host-name \"foobar\";\n";
+
+static const char *override_hostname_expected = \
+ "# Created by NetworkManager\n"
+ "# Merged from /path/to/dhclient.conf\n"
+ "\n"
+ "send host-name \"blahblah\"; # added by NetworkManager\n"
+ "\n"
+ "option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;\n"
+ "option ms-classless-static-routes code 249 = array of unsigned integer 8;\n"
+ "option wpad code 252 = string;\n"
+ "\n"
+ "also request rfc3442-classless-static-routes;\n"
+ "also request ms-classless-static-routes;\n"
+ "also request wpad;\n"
+ "also request ntp-servers;\n"
+ "\n";
+
+static void
+test_override_hostname (void)
+{
+ test_config (override_hostname_orig, override_hostname_expected,
+ "blahblah",
+ NULL,
+ "eth0",
+ NULL);
+}
+
+/*******************************************/
+
+static const char *existing_alsoreq_orig = \
+ "also request something;\n"
+ "also request another-thing;\n"
+ ;
+
+static const char *existing_alsoreq_expected = \
+ "# Created by NetworkManager\n"
+ "# Merged from /path/to/dhclient.conf\n"
+ "\n"
+ "option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;\n"
+ "option ms-classless-static-routes code 249 = array of unsigned integer 8;\n"
+ "option wpad code 252 = string;\n"
+ "\n"
+ "also request something;\n"
+ "also request another-thing;\n"
+ "also request rfc3442-classless-static-routes;\n"
+ "also request ms-classless-static-routes;\n"
+ "also request wpad;\n"
+ "also request ntp-servers;\n"
+ "\n";
+
+static void
+test_existing_alsoreq (void)
+{
+ test_config (existing_alsoreq_orig, existing_alsoreq_expected,
+ NULL,
+ NULL,
+ "eth0",
+ NULL);
+}
+
+/*******************************************/
+
+static const char *existing_multiline_alsoreq_orig = \
+ "also request something another-thing yet-another-thing\n"
+ " foobar baz blah;\n"
+ ;
+
+static const char *existing_multiline_alsoreq_expected = \
+ "# Created by NetworkManager\n"
+ "# Merged from /path/to/dhclient.conf\n"
+ "\n"
+ "option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;\n"
+ "option ms-classless-static-routes code 249 = array of unsigned integer 8;\n"
+ "option wpad code 252 = string;\n"
+ "\n"
+ "also request something;\n"
+ "also request another-thing;\n"
+ "also request yet-another-thing;\n"
+ "also request foobar;\n"
+ "also request baz;\n"
+ "also request blah;\n"
+ "also request rfc3442-classless-static-routes;\n"
+ "also request ms-classless-static-routes;\n"
+ "also request wpad;\n"
+ "also request ntp-servers;\n"
+ "\n";
+
+static void
+test_existing_multiline_alsoreq (void)
+{
+ test_config (existing_multiline_alsoreq_orig, existing_multiline_alsoreq_expected,
+ NULL,
+ NULL,
+ "eth0",
+ NULL);
+}
+
+/*******************************************/
+
+#if GLIB_CHECK_VERSION(2,25,12)
+typedef GTestFixtureFunc TCFunc;
+#else
+typedef void (*TCFunc)(void);
+#endif
+
+#define TESTCASE(t, d) g_test_create_case (#t, 0, d, NULL, (TCFunc) t, NULL)
+
+int main (int argc, char **argv)
+{
+ GTestSuite *suite;
+
+ g_test_init (&argc, &argv, NULL);
+
+ g_type_init ();
+
+ suite = g_test_get_root ();
+
+ g_test_suite_add (suite, TESTCASE (test_orig_missing, NULL));
+ g_test_suite_add (suite, TESTCASE (test_override_client_id, NULL));
+ g_test_suite_add (suite, TESTCASE (test_override_hostname, NULL));
+ g_test_suite_add (suite, TESTCASE (test_existing_alsoreq, NULL));
+ g_test_suite_add (suite, TESTCASE (test_existing_multiline_alsoreq, NULL));
+
+ return g_test_run ();
+}
+
diff --git a/src/dns-manager/Makefile.am b/src/dns-manager/Makefile.am
new file mode 100644
index 0000000000..7b5fc4f847
--- /dev/null
+++ b/src/dns-manager/Makefile.am
@@ -0,0 +1,30 @@
+INCLUDES = \
+ -I${top_srcdir}/src/logging \
+ -I${top_srcdir}/libnm-util \
+ -I${top_srcdir}/src \
+ -I${top_srcdir}/include
+
+noinst_LTLIBRARIES = libdns-manager.la
+
+libdns_manager_la_SOURCES = \
+ nm-dns-manager.h \
+ nm-dns-manager.c \
+ nm-dns-plugin.h \
+ nm-dns-plugin.c \
+ nm-dns-dnsmasq.h \
+ nm-dns-dnsmasq.c \
+ nm-dns-bind.h \
+ nm-dns-bind.c \
+ nm-dns-utils.h \
+ nm-dns-utils.c
+
+libdns_manager_la_CPPFLAGS = \
+ $(DBUS_CFLAGS) \
+ $(GLIB_CFLAGS) \
+ -DLOCALSTATEDIR=\"$(localstatedir)\"
+
+libdns_manager_la_LIBADD = \
+ $(top_builddir)/src/logging/libnm-logging.la \
+ $(DBUS_LIBS) \
+ $(GLIB_LIBS)
+
diff --git a/src/dns-manager/nm-dns-bind.c b/src/dns-manager/nm-dns-bind.c
new file mode 100644
index 0000000000..9e3fc1739e
--- /dev/null
+++ b/src/dns-manager/nm-dns-bind.c
@@ -0,0 +1,528 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * Copyright (C) 2010 Dan Williams <dcbw@redhat.com>
+ *
+ * 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, 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.
+ *
+ */
+
+#include <config.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <arpa/inet.h>
+#include <sys/stat.h>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+
+#include "nm-dns-bind.h"
+#include "nm-logging.h"
+#include "nm-ip4-config.h"
+#include "nm-ip6-config.h"
+
+G_DEFINE_TYPE (NMDnsBind, nm_dns_bind, NM_TYPE_DNS_PLUGIN)
+
+#define NM_DNS_BIND_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DNS_BIND, NMDnsBindPrivate))
+
+#define PIDFILE LOCALSTATEDIR "/run/nm-dns-named.pid"
+#define CONFFILE LOCALSTATEDIR "/run/nm-dns-named.conf"
+
+typedef struct {
+ GPid pid;
+} NMDnsBindPrivate;
+
+/*******************************************/
+
+static inline const char *
+find_bind (void)
+{
+ static const char *paths[] = {
+ "/usr/local/sbin/named",
+ "/usr/sbin/named",
+ "/sbin/named",
+ NULL
+ };
+ const char **binary = paths;
+
+ while (*binary != NULL) {
+ if (g_file_test (*binary, G_FILE_TEST_EXISTS))
+ return *binary;
+ binary++;
+ }
+ return NULL;
+}
+
+static gboolean
+start_bind (NMDnsBind *self)
+{
+ const char *argv[10];
+
+ argv[0] = find_bind ();
+ argv[1] = "-f"; /* don't daemonize; stay in foreground */
+ argv[2] = "-c";
+ argv[3] = CONFFILE;
+ argv[4] = NULL;
+
+ /* And finally spawn bind */
+ return nm_dns_plugin_child_spawn (NM_DNS_PLUGIN (self), argv, PIDFILE, "bin/named");
+}
+
+/*******************************************/
+
+static gboolean
+find_address (GPtrArray *array, const char *addr)
+{
+ int n;
+
+ for (n = 0; n < array->len; n++) {
+ if (g_strcmp0 ((const char*) g_ptr_array_index (array, n), addr) == 0)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void
+add_ip4_nameservers (NMIP4Config *ip4, GPtrArray *array)
+{
+ int i;
+
+ for (i = 0; i < nm_ip4_config_get_num_nameservers (ip4); i++) {
+ char buf[INET_ADDRSTRLEN + 1];
+ struct in_addr addr;
+
+ memset (&buf[0], 0, sizeof (buf));
+ addr.s_addr = nm_ip4_config_get_nameserver (ip4, i);
+ if (inet_ntop (AF_INET, &addr, buf, sizeof (buf))) {
+ if (!find_address (array, buf))
+ g_ptr_array_add (array, g_strdup (buf));
+ }
+ }
+}
+
+static gboolean
+ip6_addr_to_string (const struct in6_addr *addr, char *buf, size_t buflen)
+{
+ /* 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);
+
+ return !!inet_ntop (AF_INET6, addr, buf, buflen);
+}
+
+static void
+add_ip6_nameservers (NMIP6Config *ip6, GPtrArray *array)
+{
+ char buf[INET6_ADDRSTRLEN + 1];
+ int i;
+
+ for (i = 0; i < nm_ip6_config_get_num_nameservers (ip6); i++) {
+ memset (buf, 0, sizeof (buf));
+ if (ip6_addr_to_string (nm_ip6_config_get_nameserver (ip6, i), buf, sizeof (buf))) {
+ if (!find_address (array, buf))
+ g_ptr_array_add (array, g_strdup (buf));
+ }
+ }
+}
+
+typedef struct {
+ guint32 dhash;
+ char *domain;
+ GPtrArray *servers;
+} ZoneInfo;
+
+static ZoneInfo *
+zone_new (const char *domain)
+{
+ ZoneInfo *info;
+
+ g_return_val_if_fail (domain != NULL, NULL);
+
+ info = g_malloc0 (sizeof (ZoneInfo));
+ info->domain = g_strdup (domain);
+ info->dhash = g_str_hash (domain);
+ info->servers = g_ptr_array_sized_new (4);
+ return info;
+}
+
+static void
+zone_add_nameserver (ZoneInfo *info, const char *server)
+{
+ guint32 i;
+
+ g_return_if_fail (info != NULL);
+ g_return_if_fail (server != NULL);
+
+ for (i = 0; i < info->servers->len; i++) {
+ if (g_strcmp0 ((char *) g_ptr_array_index (info->servers, i), server) == 0)
+ return;
+ }
+ g_ptr_array_add (info->servers, g_strdup (server));
+}
+
+static void
+zone_free (ZoneInfo *info)
+{
+ g_return_if_fail (info != NULL);
+
+ g_free (info->domain);
+ g_ptr_array_foreach (info->servers, (GFunc) g_free, NULL);
+ g_ptr_array_free (info->servers, TRUE);
+ memset (info, 0, sizeof (ZoneInfo));
+ g_free (info);
+}
+
+static ZoneInfo *
+find_zone (GPtrArray *zones, const char *domain)
+{
+ guint32 dhash, i;
+
+ g_return_val_if_fail (domain != NULL, FALSE);
+
+ dhash = g_str_hash (domain);
+ for (i = 0; i < zones->len; i++) {
+ ZoneInfo *zone = g_ptr_array_index (zones, i);
+
+ if (zone->dhash == dhash)
+ return zone;
+ }
+ return NULL;
+}
+
+static void
+add_zone (GObject *ip, GPtrArray *zones)
+{
+ guint32 i, j, ns, nd, nn;
+ GPtrArray *to_add;
+ ZoneInfo *z;
+
+ if (NM_IS_IP4_CONFIG (ip)) {
+ ns = nm_ip4_config_get_num_searches (NM_IP4_CONFIG (ip));
+ nd = nm_ip4_config_get_num_domains (NM_IP4_CONFIG (ip));
+ nn = nm_ip4_config_get_num_nameservers (NM_IP4_CONFIG (ip));
+ } else if (NM_IS_IP6_CONFIG (ip)) {
+ ns = nm_ip6_config_get_num_searches (NM_IP6_CONFIG (ip));
+ nd = nm_ip6_config_get_num_domains (NM_IP6_CONFIG (ip));
+ nn = nm_ip6_config_get_num_nameservers (NM_IP6_CONFIG (ip));
+ } else
+ g_assert_not_reached ();
+
+ /* If we don't have any domains or searches, or we don't have any
+ * nameservers, we can't do split DNS for this config.
+ */
+ if ((!nd && !ns) || !nn)
+ return;
+
+ to_add = g_ptr_array_sized_new (MAX (ns, nd));
+
+ /* searches are preferred over domains */
+ for (i = 0; i < ns; i++) {
+ const char *domain = NULL;
+
+ if (NM_IS_IP4_CONFIG (ip))
+ domain = nm_ip4_config_get_search (NM_IP4_CONFIG (ip), i);
+ else if (NM_IS_IP6_CONFIG (ip))
+ domain = nm_ip6_config_get_search (NM_IP6_CONFIG (ip), i);
+
+ z = find_zone (zones, domain);
+ if (!z) {
+ z = zone_new (domain);
+ g_ptr_array_add (zones, z);
+ }
+ g_ptr_array_add (to_add, z);
+ }
+
+ if (ns == 0) {
+ /* If no searches, add any domains */
+ for (i = 0; i < nd; i++) {
+ const char *domain = NULL;
+
+ if (NM_IS_IP4_CONFIG (ip))
+ domain = nm_ip4_config_get_domain (NM_IP4_CONFIG (ip), i);
+ else if (NM_IS_IP6_CONFIG (ip))
+ domain = nm_ip6_config_get_domain (NM_IP6_CONFIG (ip), i);
+
+ z = find_zone (zones, domain);
+ if (!z) {
+ z = zone_new (domain);
+ g_ptr_array_add (zones, z);
+ }
+ g_ptr_array_add (to_add, z);
+ }
+ }
+
+ /* Now add the nameservers to every zone for this config */
+ for (i = 0; i < nn; i++) {
+ char buf[INET6_ADDRSTRLEN + 1];
+ struct in_addr addr4;
+ const struct in6_addr *addr6;
+
+ memset (&buf[0], 0, sizeof (buf));
+
+ if (NM_IS_IP4_CONFIG (ip)) {
+ addr4.s_addr = nm_ip4_config_get_nameserver (NM_IP4_CONFIG (ip), i);
+ if (!inet_ntop (AF_INET, &addr4, buf, sizeof (buf)))
+ continue;
+ } else if (NM_IS_IP6_CONFIG (ip)) {
+ addr6 = nm_ip6_config_get_nameserver (NM_IP6_CONFIG (ip), i);
+ if (!ip6_addr_to_string (addr6, buf, sizeof (buf)))
+ continue;
+ }
+
+ /* Add this nameserver to every zone from this IP config */
+ for (j = 0; j < to_add->len; j++) {
+ z = g_ptr_array_index (to_add, j);
+ zone_add_nameserver (z, buf);
+ }
+ }
+
+ g_ptr_array_free (to_add, TRUE);
+}
+
+static gboolean
+update (NMDnsPlugin *plugin,
+ const GSList *vpn_configs,
+ const GSList *dev_configs,
+ const GSList *other_configs,
+ const char *hostname)
+{
+ NMDnsBind *self = NM_DNS_BIND (plugin);
+ NMDnsBindPrivate *priv = NM_DNS_BIND_GET_PRIVATE (self);
+ GString *conf;
+ GPtrArray *globals, *zones;
+ GSList *iter;
+ GError *error = NULL;
+ int ignored, i, j;
+ gboolean success = FALSE;
+
+ /* Build up the new bind config file */
+ conf = g_string_sized_new (200);
+ globals = g_ptr_array_sized_new (6);
+
+ /* If any of the VPN configs *don't* have domains or searches, then we
+ * dont' have any split DNS configuration for them, and we add them
+ * first in the global nameserver lists. Otherwise we add them later as
+ * split DNS zones.
+ */
+ for (iter = (GSList *) vpn_configs; iter;iter = g_slist_next (iter)) {
+ if (NM_IS_IP4_CONFIG (iter->data)) {
+ NMIP4Config *ip4 = NM_IP4_CONFIG (iter->data);
+
+ if (!nm_ip4_config_get_num_domains (ip4) && !nm_ip4_config_get_num_searches (ip4))
+ add_ip4_nameservers (ip4, globals);
+ } else if (NM_IS_IP6_CONFIG (iter->data)) {
+ NMIP6Config *ip6 = NM_IP6_CONFIG (iter->data);
+
+ if (!nm_ip6_config_get_num_domains (ip6) && !nm_ip6_config_get_num_searches (ip6))
+ add_ip6_nameservers (ip6, globals);
+ }
+ }
+
+ /* Get a list of global upstream servers with dupe checking */
+ for (iter = (GSList *) dev_configs; iter;iter = g_slist_next (iter)) {
+ if (NM_IS_IP4_CONFIG (iter->data))
+ add_ip4_nameservers (NM_IP4_CONFIG (iter->data), globals);
+ else if (NM_IS_IP6_CONFIG (iter->data))
+ add_ip6_nameservers (NM_IP6_CONFIG (iter->data), globals);
+ }
+
+ /* And any other random configs with dupe checking */
+ for (iter = (GSList *) other_configs; iter;iter = g_slist_next (iter)) {
+ if (NM_IS_IP4_CONFIG (iter->data))
+ add_ip4_nameservers (NM_IP4_CONFIG (iter->data), globals);
+ else if (NM_IS_IP6_CONFIG (iter->data))
+ add_ip6_nameservers (NM_IP6_CONFIG (iter->data), globals);
+ }
+
+ g_string_append (conf,
+ "options {\n"
+ " directory \"" LOCALSTATEDIR "/named\";\n"
+ " forward only;\n"
+ " recursion yes;\n"
+ " listen-on-v6 { ::1; };\n"
+ " listen-on { 127.0.0.1; };\n"
+ " forwarders {\n");
+
+ for (i = 0; i < globals->len; i++) {
+ char *ns = g_ptr_array_index (globals, i);
+
+ g_string_append_printf (conf, " %s;\n", ns);
+ g_free (ns);
+ }
+ g_ptr_array_free (globals, TRUE);
+
+ g_string_append (conf,
+ " };\n"
+ "};\n\n");
+
+ /* Build up the list of any split DNS zones, avoiding duplicates */
+ zones = g_ptr_array_sized_new (4);
+ for (iter = (GSList *) vpn_configs; iter;iter = g_slist_next (iter)) {
+ if (NM_IS_IP4_CONFIG (iter->data))
+ add_zone (G_OBJECT (iter->data), zones);
+ else if (NM_IS_IP6_CONFIG (iter->data))
+ add_zone (G_OBJECT (iter->data), zones);
+ }
+
+ /* Add all the zones to the config */
+ for (i = 0; i < zones->len; i++) {
+ ZoneInfo *z = g_ptr_array_index (zones, i);
+
+ g_string_append_printf (conf,
+ "zone \"%s\" IN {\n"
+ " type forward;\n"
+ " forward only;\n"
+ " forwarders {\n",
+ z->domain);
+
+ /* Add each nameserver for this zone */
+ for (j = 0; j < z->servers->len; j++) {
+ g_string_append_printf (conf,
+ " %s;\n",
+ (const char *) g_ptr_array_index (z->servers, j));
+ }
+
+ g_string_append (conf,
+ " };\n"
+ "};\n\n");
+
+ zone_free (z);
+ }
+ g_ptr_array_free (zones, TRUE);
+
+ /* Write out the config file */
+ if (!g_file_set_contents (CONFFILE, conf->str, -1, &error)) {
+ nm_log_warn (LOGD_DNS, "Failed to write named config file %s: (%d) %s",
+ CONFFILE,
+ error ? error->code : -1,
+ error && error->message ? error->message : "(unknown)");
+ g_clear_error (&error);
+ goto out;
+ }
+ ignored = chmod (CONFFILE, 0600);
+
+ nm_log_dbg (LOGD_DNS, "BIND local caching DNS configuration:");
+ nm_log_dbg (LOGD_DNS, "%s", conf->str);
+
+ if (priv->pid) {
+ /* Send it SIGHUP to reload the new configuration */
+ if (kill (priv->pid, SIGHUP) == 0)
+ success = TRUE;
+ else {
+ /* Sigh... some error. Kill it and restart */
+ nm_dns_plugin_child_kill (NM_DNS_PLUGIN (self));
+ priv->pid = 0;
+ }
+ }
+
+ if (!success) {
+ /* Spawn it */
+ priv->pid = start_bind (self);
+ if (priv->pid)
+ success = TRUE;
+ }
+
+out:
+ g_string_free (conf, TRUE);
+ return success;
+}
+
+/****************************************************************/
+
+static void
+child_quit (NMDnsPlugin *plugin, gint status)
+{
+ NMDnsBind *self = NM_DNS_BIND (plugin);
+ gboolean failed = TRUE;
+ int err;
+
+ if (WIFEXITED (status)) {
+ err = WEXITSTATUS (status);
+ if (err) {
+ nm_log_warn (LOGD_DNS, "named exited with error %d", err);
+ } else
+ failed = FALSE;
+ } else if (WIFSTOPPED (status)) {
+ nm_log_warn (LOGD_DNS, "named stopped unexpectedly with signal %d", WSTOPSIG (status));
+ } else if (WIFSIGNALED (status)) {
+ nm_log_warn (LOGD_DNS, "named died with signal %d", WTERMSIG (status));
+ } else {
+ nm_log_warn (LOGD_DNS, "named died from an unknown cause");
+ }
+ unlink (CONFFILE);
+
+ if (failed)
+ g_signal_emit_by_name (self, NM_DNS_PLUGIN_FAILED);
+}
+
+/****************************************************************/
+
+static gboolean
+init (NMDnsPlugin *plugin)
+{
+ return TRUE;
+}
+
+static gboolean
+is_caching (NMDnsPlugin *plugin)
+{
+ return TRUE;
+}
+
+static const char *
+get_name (NMDnsPlugin *plugin)
+{
+ return "bind";
+}
+
+/****************************************************************/
+
+NMDnsBind *
+nm_dns_bind_new (void)
+{
+ return (NMDnsBind *) g_object_new (NM_TYPE_DNS_BIND, NULL);
+}
+
+static void
+nm_dns_bind_init (NMDnsBind *self)
+{
+}
+
+static void
+dispose (GObject *object)
+{
+ unlink (CONFFILE);
+
+ G_OBJECT_CLASS (nm_dns_bind_parent_class)->dispose (object);
+}
+
+static void
+nm_dns_bind_class_init (NMDnsBindClass *dns_class)
+{
+ NMDnsPluginClass *plugin_class = NM_DNS_PLUGIN_CLASS (dns_class);
+ GObjectClass *object_class = G_OBJECT_CLASS (dns_class);
+
+ g_type_class_add_private (dns_class, sizeof (NMDnsBindPrivate));
+
+ object_class->dispose = dispose;
+
+ plugin_class->init = init;
+ plugin_class->child_quit = child_quit;
+ plugin_class->is_caching = is_caching;
+ plugin_class->update = update;
+ plugin_class->get_name = get_name;
+}
+
diff --git a/src/dns-manager/nm-dns-bind.h b/src/dns-manager/nm-dns-bind.h
new file mode 100644
index 0000000000..7127265f18
--- /dev/null
+++ b/src/dns-manager/nm-dns-bind.h
@@ -0,0 +1,47 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, 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) 2010 Red Hat, Inc.
+ */
+
+#ifndef NM_DNS_BIND_H
+#define NM_DNS_BIND_H
+
+#include <glib.h>
+#include <glib-object.h>
+
+#include "nm-dns-plugin.h"
+
+#define NM_TYPE_DNS_BIND (nm_dns_bind_get_type ())
+#define NM_DNS_BIND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DNS_BIND, NMDnsBind))
+#define NM_DNS_BIND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DNS_BIND, NMDnsBindClass))
+#define NM_IS_DNS_BIND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DNS_BIND))
+#define NM_IS_DNS_BIND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NM_TYPE_DNS_BIND))
+#define NM_DNS_BIND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DNS_BIND, NMDnsBindClass))
+
+typedef struct {
+ NMDnsPlugin parent;
+} NMDnsBind;
+
+typedef struct {
+ NMDnsPluginClass parent;
+} NMDnsBindClass;
+
+GType nm_dns_bind_get_type (void);
+
+NMDnsBind *nm_dns_bind_new (void);
+
+#endif /* NM_DNS_BIND_H */
+
diff --git a/src/dns-manager/nm-dns-dnsmasq.c b/src/dns-manager/nm-dns-dnsmasq.c
new file mode 100644
index 0000000000..9cc019780b
--- /dev/null
+++ b/src/dns-manager/nm-dns-dnsmasq.c
@@ -0,0 +1,385 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * Copyright (C) 2010 Dan Williams <dcbw@redhat.com>
+ *
+ * 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, 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.
+ *
+ */
+
+#include <config.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <arpa/inet.h>
+#include <sys/stat.h>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+
+#include "nm-dns-dnsmasq.h"
+#include "nm-logging.h"
+#include "nm-ip4-config.h"
+#include "nm-ip6-config.h"
+#include "nm-dns-utils.h"
+
+G_DEFINE_TYPE (NMDnsDnsmasq, nm_dns_dnsmasq, NM_TYPE_DNS_PLUGIN)
+
+#define NM_DNS_DNSMASQ_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DNS_DNSMASQ, NMDnsDnsmasqPrivate))
+
+#define PIDFILE LOCALSTATEDIR "/run/nm-dns-dnsmasq.pid"
+#define CONFFILE LOCALSTATEDIR "/run/nm-dns-dnsmasq.conf"
+
+typedef struct {
+ guint32 foo;
+} NMDnsDnsmasqPrivate;
+
+/*******************************************/
+
+static inline const char *
+find_dnsmasq (void)
+{
+ static const char *paths[] = {
+ "/usr/local/sbin/dnsmasq",
+ "/usr/sbin/dnsmasq",
+ "/sbin/dnsmasq",
+ NULL
+ };
+ const char **binary = paths;
+
+ while (*binary != NULL) {
+ if (g_file_test (*binary, G_FILE_TEST_EXISTS))
+ return *binary;
+ binary++;
+ }
+ return NULL;
+}
+
+static gboolean
+add_ip4_config (GString *str, NMIP4Config *ip4, gboolean split)
+{
+ char buf[INET_ADDRSTRLEN + 1];
+ struct in_addr addr;
+ int n, i;
+ gboolean added = FALSE;
+
+ if (split) {
+ char **domains, **iter;
+
+ /* FIXME: it appears that dnsmasq can only handle one nameserver
+ * per domain (and the manpage says this too) so only use the first
+ * nameserver here.
+ */
+ addr.s_addr = nm_ip4_config_get_nameserver (ip4, 0);
+ memset (&buf[0], 0, sizeof (buf));
+ if (!inet_ntop (AF_INET, &addr, buf, sizeof (buf)))
+ return FALSE;
+
+ /* searches are preferred over domains */
+ n = nm_ip4_config_get_num_searches (ip4);
+ for (i = 0; i < n; i++) {
+ g_string_append_printf (str, "server=/%s/%s\n",
+ nm_ip4_config_get_search (ip4, i),
+ buf);
+ added = TRUE;
+ }
+
+ if (n == 0) {
+ /* If not searches, use any domains */
+ n = nm_ip4_config_get_num_domains (ip4);
+ for (i = 0; i < n; i++) {
+ g_string_append_printf (str, "server=/%s/%s\n",
+ nm_ip4_config_get_domain (ip4, i),
+ buf);
+ added = TRUE;
+ }
+ }
+
+ /* Ensure reverse-DNS works by directing queries for in-addr.arpa
+ * domains to the split domain's nameserver.
+ */
+ domains = nm_dns_utils_get_ip4_rdns_domains (ip4);
+ if (domains) {
+ for (iter = domains; iter && *iter; iter++)
+ g_string_append_printf (str, "server=/%s/%s\n", *iter, buf);
+ g_strfreev (domains);
+ added = TRUE;
+ }
+ }
+
+ /* If no searches or domains, just add the namservers */
+ if (!added) {
+ n = nm_ip4_config_get_num_nameservers (ip4);
+ for (i = 0; i < n; i++) {
+ memset (&buf[0], 0, sizeof (buf));
+ addr.s_addr = nm_ip4_config_get_nameserver (ip4, i);
+ if (inet_ntop (AF_INET, &addr, buf, sizeof (buf)))
+ g_string_append_printf (str, "server=%s\n", buf);
+ }
+ }
+
+ return TRUE;
+}
+
+static gboolean
+ip6_addr_to_string (const struct in6_addr *addr, char *buf, size_t buflen)
+{
+ memset (buf, 0, buflen);
+
+ /* 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);
+
+ return !!inet_ntop (AF_INET6, addr, buf, buflen);
+}
+
+static gboolean
+add_ip6_config (GString *str, NMIP6Config *ip6, gboolean split)
+{
+ char buf[INET6_ADDRSTRLEN + 1];
+ const struct in6_addr *addr;
+ int n, i;
+ gboolean added = FALSE;
+
+ if (split) {
+ /* FIXME: it appears that dnsmasq can only handle one nameserver
+ * per domain (at the manpage seems to indicate that) so only use
+ * the first nameserver here.
+ */
+ addr = nm_ip6_config_get_nameserver (ip6, 0);
+ if (!ip6_addr_to_string (addr, &buf[0], sizeof (buf)))
+ return FALSE;
+
+ /* searches are preferred over domains */
+ n = nm_ip6_config_get_num_searches (ip6);
+ for (i = 0; i < n; i++) {
+ g_string_append_printf (str, "server=/%s/%s\n",
+ nm_ip6_config_get_search (ip6, i),
+ buf);
+ added = TRUE;
+ }
+
+ if (n == 0) {
+ /* If not searches, use any domains */
+ n = nm_ip6_config_get_num_domains (ip6);
+ for (i = 0; i < n; i++) {
+ g_string_append_printf (str, "server=/%s/%s\n",
+ nm_ip6_config_get_domain (ip6, i),
+ buf);
+ added = TRUE;
+ }
+ }
+ }
+
+ /* If no searches or domains, just add the namservers */
+ if (!added) {
+ 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)))
+ g_string_append_printf (str, "server=%s\n", buf);
+ }
+ }
+
+ return TRUE;
+}
+
+static gboolean
+update (NMDnsPlugin *plugin,
+ const GSList *vpn_configs,
+ const GSList *dev_configs,
+ const GSList *other_configs,
+ const char *hostname)
+{
+ NMDnsDnsmasq *self = NM_DNS_DNSMASQ (plugin);
+ GString *conf;
+ GSList *iter;
+ const char *argv[10];
+ GError *error = NULL;
+ int ignored;
+ GPid pid = 0;
+
+ /* Kill the old dnsmasq; there doesn't appear to be a way to get dnsmasq
+ * to reread the config file using SIGHUP or similar. This is a small race
+ * here when restarting dnsmasq when DNS requests could go to the upstream
+ * servers instead of to dnsmasq.
+ */
+ nm_dns_plugin_child_kill (plugin);
+
+ /* Build up the new dnsmasq config file */
+ conf = g_string_sized_new (150);
+
+ /* Use split DNS for VPN configs */
+ for (iter = (GSList *) vpn_configs; iter; iter = g_slist_next (iter)) {
+ 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);
+ }
+
+ /* Now add interface configs without split DNS */
+ for (iter = (GSList *) dev_configs; iter; iter = g_slist_next (iter)) {
+ 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);
+ }
+
+ /* And any other random configs */
+ for (iter = (GSList *) other_configs; iter; iter = g_slist_next (iter)) {
+ 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);
+ }
+
+ /* Write out the config file */
+ if (!g_file_set_contents (CONFFILE, conf->str, -1, &error)) {
+ nm_log_warn (LOGD_DNS, "Failed to write dnsmasq config file %s: (%d) %s",
+ CONFFILE,
+ error ? error->code : -1,
+ error && error->message ? error->message : "(unknown)");
+ g_clear_error (&error);
+ goto out;
+ }
+ ignored = chmod (CONFFILE, 0600);
+
+ nm_log_dbg (LOGD_DNS, "dnsmasq local caching DNS configuration:");
+ nm_log_dbg (LOGD_DNS, "%s", conf->str);
+
+ argv[0] = find_dnsmasq ();
+ argv[1] = "--no-resolv"; /* Use only commandline */
+ argv[2] = "--keep-in-foreground";
+ argv[3] = "--strict-order";
+ argv[4] = "--bind-interfaces";
+ 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;
+
+ /* And finally spawn dnsmasq */
+ pid = nm_dns_plugin_child_spawn (NM_DNS_PLUGIN (self), argv, PIDFILE, "bin/dnsmasq");
+
+out:
+ g_string_free (conf, TRUE);
+ return pid ? TRUE : FALSE;
+}
+
+/****************************************************************/
+
+static const char *
+dm_exit_code_to_msg (int status)
+{
+ if (status == 1)
+ return "Configuration problem";
+ else if (status == 2)
+ return "Network access problem (address in use; permissions; etc)";
+ else if (status == 3)
+ return "Filesystem problem (missing file/directory; permissions; etc)";
+ else if (status == 4)
+ return "Memory allocation failure";
+ else if (status == 5)
+ return "Other problem";
+ else if (status >= 11)
+ return "Lease-script 'init' process failure";
+ return "Unknown error";
+}
+
+static void
+child_quit (NMDnsPlugin *plugin, gint status)
+{
+ NMDnsDnsmasq *self = NM_DNS_DNSMASQ (plugin);
+ gboolean failed = TRUE;
+ int err;
+
+ if (WIFEXITED (status)) {
+ err = WEXITSTATUS (status);
+ if (err) {
+ nm_log_warn (LOGD_DNS, "dnsmasq exited with error: %s (%d)",
+ dm_exit_code_to_msg (err),
+ err);
+ } else
+ failed = FALSE;
+ } else if (WIFSTOPPED (status)) {
+ nm_log_warn (LOGD_DNS, "dnsmasq stopped unexpectedly with signal %d", WSTOPSIG (status));
+ } else if (WIFSIGNALED (status)) {
+ nm_log_warn (LOGD_DNS, "dnsmasq died with signal %d", WTERMSIG (status));
+ } else {
+ nm_log_warn (LOGD_DNS, "dnsmasq died from an unknown cause");
+ }
+ unlink (CONFFILE);
+
+ if (failed)
+ g_signal_emit_by_name (self, NM_DNS_PLUGIN_FAILED);
+}
+
+/****************************************************************/
+
+static gboolean
+init (NMDnsPlugin *plugin)
+{
+ return TRUE;
+}
+
+static gboolean
+is_caching (NMDnsPlugin *plugin)
+{
+ return TRUE;
+}
+
+static const char *
+get_name (NMDnsPlugin *plugin)
+{
+ return "dnsmasq";
+}
+
+/****************************************************************/
+
+NMDnsDnsmasq *
+nm_dns_dnsmasq_new (void)
+{
+ return (NMDnsDnsmasq *) g_object_new (NM_TYPE_DNS_DNSMASQ, NULL);
+}
+
+static void
+nm_dns_dnsmasq_init (NMDnsDnsmasq *self)
+{
+}
+
+static void
+dispose (GObject *object)
+{
+ unlink (CONFFILE);
+
+ G_OBJECT_CLASS (nm_dns_dnsmasq_parent_class)->dispose (object);
+}
+
+static void
+nm_dns_dnsmasq_class_init (NMDnsDnsmasqClass *dns_class)
+{
+ NMDnsPluginClass *plugin_class = NM_DNS_PLUGIN_CLASS (dns_class);
+ GObjectClass *object_class = G_OBJECT_CLASS (dns_class);
+
+ g_type_class_add_private (dns_class, sizeof (NMDnsDnsmasqPrivate));
+
+ object_class->dispose = dispose;
+
+ plugin_class->init = init;
+ plugin_class->child_quit = child_quit;
+ plugin_class->is_caching = is_caching;
+ plugin_class->update = update;
+ plugin_class->get_name = get_name;
+}
+
diff --git a/src/dns-manager/nm-dns-dnsmasq.h b/src/dns-manager/nm-dns-dnsmasq.h
new file mode 100644
index 0000000000..6491b271ae
--- /dev/null
+++ b/src/dns-manager/nm-dns-dnsmasq.h
@@ -0,0 +1,47 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, 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) 2010 Red Hat, Inc.
+ */
+
+#ifndef NM_DNS_DNSMASQ_H
+#define NM_DNS_DNSMASQ_H
+
+#include <glib.h>
+#include <glib-object.h>
+
+#include "nm-dns-plugin.h"
+
+#define NM_TYPE_DNS_DNSMASQ (nm_dns_dnsmasq_get_type ())
+#define NM_DNS_DNSMASQ(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DNS_DNSMASQ, NMDnsDnsmasq))
+#define NM_DNS_DNSMASQ_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DNS_DNSMASQ, NMDnsDnsmasqClass))
+#define NM_IS_DNS_DNSMASQ(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DNS_DNSMASQ))
+#define NM_IS_DNS_DNSMASQ_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NM_TYPE_DNS_DNSMASQ))
+#define NM_DNS_DNSMASQ_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DNS_DNSMASQ, NMDnsDnsmasqClass))
+
+typedef struct {
+ NMDnsPlugin parent;
+} NMDnsDnsmasq;
+
+typedef struct {
+ NMDnsPluginClass parent;
+} NMDnsDnsmasqClass;
+
+GType nm_dns_dnsmasq_get_type (void);
+
+NMDnsDnsmasq *nm_dns_dnsmasq_new (void);
+
+#endif /* NM_DNS_DNSMASQ_H */
+
diff --git a/src/named-manager/nm-named-manager.c b/src/dns-manager/nm-dns-manager.c
index fc3b6e2c17..b0cdcc267d 100644
--- a/src/named-manager/nm-named-manager.c
+++ b/src/dns-manager/nm-dns-manager.c
@@ -36,13 +36,17 @@
#include <glib/gi18n.h>
-#include "nm-named-manager.h"
+#include "nm-dns-manager.h"
#include "nm-ip4-config.h"
#include "nm-ip6-config.h"
#include "nm-logging.h"
#include "nm-system.h"
#include "NetworkManagerUtils.h"
+#include "nm-dns-plugin.h"
+#include "nm-dns-dnsmasq.h"
+#include "nm-dns-bind.h"
+
#ifdef HAVE_SELINUX
#include <selinux/selinux.h>
#endif
@@ -51,53 +55,44 @@
#define RESOLV_CONF "/etc/resolv.conf"
#endif
-#define ADDR_BUF_LEN 50
-
-G_DEFINE_TYPE(NMNamedManager, nm_named_manager, G_TYPE_OBJECT)
-
-#define NM_NAMED_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
- NM_TYPE_NAMED_MANAGER, \
- NMNamedManagerPrivate))
+G_DEFINE_TYPE(NMDnsManager, nm_dns_manager, G_TYPE_OBJECT)
+#define NM_DNS_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
+ NM_TYPE_DNS_MANAGER, \
+ NMDnsManagerPrivate))
-struct NMNamedManagerPrivate {
+struct NMDnsManagerPrivate {
NMIP4Config *ip4_vpn_config;
NMIP4Config *ip4_device_config;
NMIP6Config *ip6_vpn_config;
NMIP6Config *ip6_device_config;
GSList *configs;
-};
-
-
-NMNamedManager *
-nm_named_manager_get (void)
-{
- static NMNamedManager * singleton = NULL;
-
- if (!singleton)
- singleton = NM_NAMED_MANAGER (g_object_new (NM_TYPE_NAMED_MANAGER, NULL));
- else
- g_object_ref (singleton);
+ char *hostname;
- g_assert (singleton);
- return singleton;
-}
+ /* poor man's hash; we assume that the IP4 config object won't change
+ * after it's given to us, which is (at this time) a fair assumption. So
+ * we track the order of the currently applied IP configs and if they
+ * haven't changed we don't need to rewrite resolv.conf.
+ */
+ #define HLEN 6
+ gpointer hash[HLEN];
+ GSList *plugins;
-GQuark
-nm_named_manager_error_quark (void)
-{
- static GQuark quark = 0;
- if (!quark)
- quark = g_quark_from_static_string ("nm_named_manager_error");
+ /* This is a hack because SUSE's netconfig always wants changes
+ * associated with a network interface, but sometimes a change isn't
+ * associated with a network interface (like hostnames).
+ */
+ char *last_iface;
+};
- return quark;
-}
typedef struct {
GPtrArray *nameservers;
const char *domain;
GPtrArray *searches;
+ const char *nis_domain;
+ GPtrArray *nis_servers;
} NMResolvConfData;
static void
@@ -148,6 +143,23 @@ merge_one_ip4_config (NMResolvConfData *rc, NMIP4Config *src)
num = nm_ip4_config_get_num_searches (src);
for (i = 0; i < num; i++)
add_string_item (rc->searches, nm_ip4_config_get_search (src, i));
+
+ /* NIS stuff */
+ num = nm_ip4_config_get_num_nis_servers (src);
+ for (i = 0; i < num; i++) {
+ struct in_addr addr;
+ char buf[INET_ADDRSTRLEN];
+
+ addr.s_addr = nm_ip4_config_get_nis_server (src, i);
+ if (inet_ntop (AF_INET, &addr, buf, INET_ADDRSTRLEN) > 0)
+ add_string_item (rc->nis_servers, buf);
+ }
+
+ if (nm_ip4_config_get_nis_domain (src)) {
+ /* FIXME: handle multiple domains */
+ if (!rc->nis_domain)
+ rc->nis_domain = nm_ip4_config_get_nis_domain (src);
+ }
}
static void
@@ -239,10 +251,12 @@ static gboolean
dispatch_netconfig (const char *domain,
char **searches,
char **nameservers,
+ const char *nis_domain,
+ char **nis_servers,
const char *iface,
GError **error)
{
- char *str;
+ char *str, *tmp;
GPid pid;
gint fd;
int ret;
@@ -256,7 +270,7 @@ dispatch_netconfig (const char *domain,
// resolv.conf. Assuming netconfig works in the obvious way, then
// there are various failure modes, such as, eg, bringing up a VPN on
// eth0, then bringing up wlan0, then bringing down the VPN. Because
- // NMNamedManager would have claimed that the VPN DNS server was also
+ // NMDnsManager would have claimed that the VPN DNS server was also
// part of the wlan0 config, it will remain in resolv.conf after the
// VPN goes down, even though it is presumably no longer reachable
// at that point.
@@ -266,8 +280,6 @@ dispatch_netconfig (const char *domain,
str = g_strjoinv (" ", searches);
if (domain) {
- char *tmp;
-
tmp = g_strconcat (domain, " ", str, NULL);
g_free (str);
str = tmp;
@@ -283,6 +295,15 @@ dispatch_netconfig (const char *domain,
g_free (str);
}
+ if (nis_domain)
+ write_to_netconfig (fd, "NISDOMAIN", nis_domain);
+
+ if (nis_servers) {
+ str = g_strjoinv (" ", nis_servers);
+ write_to_netconfig (fd, "NISSERVERS", str);
+ g_free (str);
+ }
+
close (fd);
/* Wait until the process exits */
@@ -292,6 +313,10 @@ dispatch_netconfig (const char *domain,
ret = waitpid (pid, NULL, 0);
if (ret < 0 && errno == EINTR)
goto again;
+ else if (ret < 0 && errno == ECHILD) {
+ /* When the netconfig exist, the errno is ECHILD, it should return TRUE */
+ return TRUE;
+ }
return ret > 0;
}
@@ -309,13 +334,14 @@ write_resolv_conf (FILE *f, const char *domain,
char *nameservers_str = NULL;
int i;
gboolean retval = FALSE;
+ GString *str;
if (fprintf (f, "%s","# Generated by NetworkManager\n") < 0) {
g_set_error (error,
- NM_NAMED_MANAGER_ERROR,
- NM_NAMED_MANAGER_ERROR_SYSTEM,
- "Could not write " RESOLV_CONF ": %s\n",
- g_strerror (errno));
+ NM_DNS_MANAGER_ERROR,
+ NM_DNS_MANAGER_ERROR_SYSTEM,
+ "Could not write " RESOLV_CONF ": %s\n",
+ g_strerror (errno));
return FALSE;
}
@@ -330,12 +356,10 @@ write_resolv_conf (FILE *f, const char *domain,
g_free (tmp_str);
}
- if (nameservers) {
- GString *str;
- int num;
+ str = g_string_new ("");
- str = g_string_new ("");
- num = g_strv_length (nameservers);
+ if (nameservers) {
+ int num = g_strv_length (nameservers);
for (i = 0; i < num; i++) {
if (i == 3) {
@@ -350,14 +374,14 @@ write_resolv_conf (FILE *f, const char *domain,
g_string_append (str, nameservers[i]);
g_string_append_c (str, '\n');
}
-
- nameservers_str = g_string_free (str, FALSE);
}
+ nameservers_str = g_string_free (str, FALSE);
+
if (fprintf (f, "%s%s%s",
domain_str ? domain_str : "",
searches_str ? searches_str : "",
- nameservers_str ? nameservers_str : "") != -1)
+ strlen (nameservers_str) ? nameservers_str : "") != -1)
retval = TRUE;
g_free (domain_str);
@@ -387,11 +411,11 @@ dispatch_resolvconf (const char *domain,
nm_log_info (LOGD_DNS, "(%s): writing resolv.conf to %s", iface, RESOLVCONF_PATH);
if ((f = popen (cmd, "w")) == NULL)
g_set_error (error,
- NM_NAMED_MANAGER_ERROR,
- NM_NAMED_MANAGER_ERROR_SYSTEM,
- "Could not write to %s: %s\n",
- RESOLVCONF_PATH,
- g_strerror (errno));
+ NM_DNS_MANAGER_ERROR,
+ NM_DNS_MANAGER_ERROR_SYSTEM,
+ "Could not write to %s: %s\n",
+ RESOLVCONF_PATH,
+ g_strerror (errno));
else {
retval = write_resolv_conf (f, domain, searches, nameservers, error);
retval &= (pclose (f) == 0);
@@ -445,8 +469,8 @@ update_resolv_conf (const char *domain,
old_errno = errno;
if ((f = fopen (RESOLV_CONF, "w")) == NULL) {
g_set_error (error,
- NM_NAMED_MANAGER_ERROR,
- NM_NAMED_MANAGER_ERROR_SYSTEM,
+ NM_DNS_MANAGER_ERROR,
+ NM_DNS_MANAGER_ERROR_SYSTEM,
"Could not open %s: %s\nCould not open %s: %s\n",
tmp_resolv_conf_realpath,
g_strerror (old_errno),
@@ -468,8 +492,8 @@ update_resolv_conf (const char *domain,
* since its error is more important.
*/
g_set_error (error,
- NM_NAMED_MANAGER_ERROR,
- NM_NAMED_MANAGER_ERROR_SYSTEM,
+ NM_DNS_MANAGER_ERROR,
+ NM_DNS_MANAGER_ERROR_SYSTEM,
"Could not close %s: %s\n",
tmp_resolv_conf_realpath,
g_strerror (errno));
@@ -482,8 +506,8 @@ update_resolv_conf (const char *domain,
if (*error == NULL && do_rename) {
if (rename (tmp_resolv_conf_realpath, resolv_conf_realpath) < 0) {
g_set_error (error,
- NM_NAMED_MANAGER_ERROR,
- NM_NAMED_MANAGER_ERROR_SYSTEM,
+ NM_DNS_MANAGER_ERROR,
+ NM_DNS_MANAGER_ERROR_SYSTEM,
"Could not replace " RESOLV_CONF ": %s\n",
g_strerror (errno));
}
@@ -495,26 +519,72 @@ out:
return *error ? FALSE : TRUE;
}
+static void
+compute_hash (NMDnsManager *self, gpointer *hash)
+{
+ NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (self);
+ gpointer check[HLEN];
+ GSList *iter;
+ int i = 0;
+
+ memset (check, 0, sizeof (check));
+
+ if (priv->ip4_vpn_config)
+ check[i++] = priv->ip4_vpn_config;
+ if (priv->ip4_device_config)
+ check[i++] = priv->ip4_device_config;
+
+ if (priv->ip6_vpn_config)
+ check[i++] = priv->ip6_vpn_config;
+ if (priv->ip6_device_config)
+ check[i++] = priv->ip6_device_config;
+
+ /* Add two more "other" configs if any exist */
+ for (iter = priv->configs; iter && i < HLEN; iter = g_slist_next (iter)) {
+ if ( (iter->data != priv->ip4_vpn_config)
+ && (iter->data != priv->ip4_device_config)
+ && (iter->data != priv->ip6_vpn_config)
+ && (iter->data != priv->ip6_device_config))
+ check[i++] = iter->data;
+ }
+ memcpy (hash, check, sizeof (check));
+}
+
static gboolean
-rewrite_resolv_conf (NMNamedManager *mgr, const char *iface, GError **error)
+update_dns (NMDnsManager *self,
+ const char *iface,
+ gboolean no_caching,
+ GError **error)
{
- NMNamedManagerPrivate *priv;
+ NMDnsManagerPrivate *priv;
NMResolvConfData rc;
- GSList *iter;
+ GSList *iter, *vpn_configs = NULL, *dev_configs = NULL, *other_configs = NULL;
const char *domain = NULL;
+ const char *nis_domain = NULL;
char **searches = NULL;
char **nameservers = NULL;
+ char **nis_servers = NULL;
int num, i, len;
- gboolean success = FALSE;
+ gboolean success = FALSE, caching = FALSE;
g_return_val_if_fail (error != NULL, FALSE);
g_return_val_if_fail (*error == NULL, FALSE);
- priv = NM_NAMED_MANAGER_GET_PRIVATE (mgr);
+ priv = NM_DNS_MANAGER_GET_PRIVATE (self);
+
+ if (iface && (iface != priv->last_iface)) {
+ g_free (priv->last_iface);
+ priv->last_iface = g_strdup (iface);
+ }
+
+ /* Update hash with config we're applying */
+ compute_hash (self, priv->hash);
rc.nameservers = g_ptr_array_new ();
rc.domain = NULL;
rc.searches = g_ptr_array_new ();
+ rc.nis_domain = NULL;
+ rc.nis_servers = g_ptr_array_new ();
if (priv->ip4_vpn_config)
merge_one_ip4_config (&rc, priv->ip4_vpn_config);
@@ -545,6 +615,20 @@ rewrite_resolv_conf (NMNamedManager *mgr, const char *iface, GError **error)
g_assert_not_reached ();
}
+ /* Add the current domain name (from the hostname) to the searches list;
+ * see rh #600407. The bug report is that when the hostname is set to
+ * something like 'dcbw.foobar.com' (ie an FQDN) that pinging 'dcbw' doesn't
+ * work because the resolver doesn't have anything to append to 'dcbw' when
+ * looking it up.
+ */
+ if (priv->hostname) {
+ const char *hostsearch = strchr (priv->hostname, '.');
+
+ /* +1 to get rid of the dot */
+ if (hostsearch && strlen (hostsearch + 1))
+ add_string_item (rc.searches, hostsearch + 1);
+ }
+
domain = rc.domain;
/* Per 'man resolv.conf', the search list is limited to 6 domains
@@ -569,13 +653,89 @@ rewrite_resolv_conf (NMNamedManager *mgr, const char *iface, GError **error)
} else
g_ptr_array_free (rc.nameservers, TRUE);
+ if (rc.nis_servers->len) {
+ g_ptr_array_add (rc.nis_servers, NULL);
+ nis_servers = (char **) g_ptr_array_free (rc.nis_servers, FALSE);
+ } else
+ g_ptr_array_free (rc.nis_servers, TRUE);
+
+ nis_domain = rc.nis_domain;
+
+ /* Build up config lists for plugins; we use the raw configs here, not the
+ * merged information that we write to resolv.conf so that the plugins can
+ * still use the domain information in each config to provide split DNS if
+ * they want to.
+ */
+ if (priv->ip4_vpn_config)
+ vpn_configs = g_slist_append (vpn_configs, priv->ip4_vpn_config);
+ if (priv->ip6_vpn_config)
+ vpn_configs = g_slist_append (vpn_configs, priv->ip6_vpn_config);
+ if (priv->ip4_device_config)
+ dev_configs = g_slist_append (dev_configs, priv->ip4_device_config);
+ if (priv->ip6_device_config)
+ dev_configs = g_slist_append (dev_configs, priv->ip6_device_config);
+
+ for (iter = priv->configs; iter; iter = g_slist_next (iter)) {
+ if ( (iter->data != priv->ip4_vpn_config)
+ && (iter->data != priv->ip4_device_config)
+ && (iter->data != priv->ip6_vpn_config)
+ && (iter->data != priv->ip6_device_config))
+ other_configs = g_slist_append (other_configs, iter->data);
+ }
+
+ /* Let any plugins do their thing first */
+ for (iter = priv->plugins; iter; iter = g_slist_next (iter)) {
+ NMDnsPlugin *plugin = NM_DNS_PLUGIN (iter->data);
+ const char *plugin_name = nm_dns_plugin_get_name (plugin);
+
+ if (nm_dns_plugin_is_caching (plugin)) {
+ if (no_caching) {
+ nm_log_dbg (LOGD_DNS, "DNS: plugin %s ignored (caching disabled)",
+ plugin_name);
+ continue;
+ }
+ caching = TRUE;
+ }
+
+ nm_log_dbg (LOGD_DNS, "DNS: updating plugin %s", plugin_name);
+ if (!nm_dns_plugin_update (plugin,
+ vpn_configs,
+ dev_configs,
+ other_configs,
+ priv->hostname)) {
+ 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
+ * caching DNS configuration to resolv.conf.
+ */
+ caching = FALSE;
+ }
+ }
+ g_slist_free (vpn_configs);
+ g_slist_free (dev_configs);
+ g_slist_free (other_configs);
+
+ /* If caching was successful, we only send 127.0.0.1 to /etc/resolv.conf
+ * to ensure that the glibc resolver doesn't try to round-robin nameservers,
+ * but only uses the local caching nameserver.
+ */
+ if (caching) {
+ if (nameservers)
+ g_strfreev (nameservers);
+ nameservers = g_new0 (char*, 2);
+ nameservers[0] = g_strdup ("127.0.0.1");
+ }
+
#ifdef RESOLVCONF_PATH
success = dispatch_resolvconf (domain, searches, nameservers, iface, error);
#endif
#ifdef TARGET_SUSE
- if (success == FALSE)
- success = dispatch_netconfig (domain, searches, nameservers, iface, error);
+ if (success == FALSE) {
+ success = dispatch_netconfig (domain, searches, nameservers,
+ nis_domain, nis_servers,
+ iface, error);
+ }
#endif
if (success == FALSE)
@@ -588,30 +748,69 @@ rewrite_resolv_conf (NMNamedManager *mgr, const char *iface, GError **error)
g_strfreev (searches);
if (nameservers)
g_strfreev (nameservers);
+ if (nis_servers)
+ g_strfreev (nis_servers);
return success;
}
+static void
+plugin_failed (NMDnsPlugin *plugin, gpointer user_data)
+{
+ NMDnsManager *self = NM_DNS_MANAGER (user_data);
+ NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (self);
+ GError *error = NULL;
+
+ /* Errors with non-caching plugins aren't fatal */
+ if (!nm_dns_plugin_is_caching (plugin))
+ return;
+
+ /* Disable caching until the next DNS update */
+ if (!update_dns (self, priv->last_iface, TRUE, &error)) {
+ nm_log_warn (LOGD_DNS, "could not commit DNS changes: (%d) %s",
+ error ? error->code : -1,
+ error && error->message ? error->message : "(unknown)");
+ g_clear_error (&error);
+ }
+}
+
+static gboolean
+config_changed (NMDnsManager *self)
+{
+ NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (self);
+ gpointer check[HLEN];
+
+ /* We only store HLEN configs; so if there are actually more than that,
+ * we have to assume that the config has changed.
+ */
+ if (g_slist_length (priv->configs) > HLEN)
+ return TRUE;
+
+ /* Otherwise return TRUE if the configuration has changed */
+ compute_hash (self, check);
+ return memcmp (check, priv->hash, sizeof (check)) ? TRUE : FALSE;
+}
+
gboolean
-nm_named_manager_add_ip4_config (NMNamedManager *mgr,
- const char *iface,
- NMIP4Config *config,
- NMNamedIPConfigType cfg_type)
+nm_dns_manager_add_ip4_config (NMDnsManager *mgr,
+ const char *iface,
+ NMIP4Config *config,
+ NMDnsIPConfigType cfg_type)
{
- NMNamedManagerPrivate *priv;
+ NMDnsManagerPrivate *priv;
GError *error = NULL;
g_return_val_if_fail (mgr != NULL, FALSE);
g_return_val_if_fail (iface != NULL, FALSE);
g_return_val_if_fail (config != NULL, FALSE);
- priv = NM_NAMED_MANAGER_GET_PRIVATE (mgr);
+ priv = NM_DNS_MANAGER_GET_PRIVATE (mgr);
switch (cfg_type) {
- case NM_NAMED_IP_CONFIG_TYPE_VPN:
+ case NM_DNS_IP_CONFIG_TYPE_VPN:
priv->ip4_vpn_config = config;
break;
- case NM_NAMED_IP_CONFIG_TYPE_BEST_DEVICE:
+ case NM_DNS_IP_CONFIG_TYPE_BEST_DEVICE:
priv->ip4_device_config = config;
break;
default:
@@ -622,27 +821,32 @@ nm_named_manager_add_ip4_config (NMNamedManager *mgr,
if (!g_slist_find (priv->configs, config))
priv->configs = g_slist_append (priv->configs, g_object_ref (config));
- if (!rewrite_resolv_conf (mgr, iface, &error)) {
- nm_log_warn (LOGD_DNS, "could not commit DNS changes: '%s'", error ? error->message : "(none)");
- g_error_free (error);
+ if (!config_changed (mgr))
+ return TRUE;
+
+ if (!update_dns (mgr, iface, FALSE, &error)) {
+ nm_log_warn (LOGD_DNS, "could not commit DNS changes: (%d) %s",
+ error ? error->code : -1,
+ error && error->message ? error->message : "(unknown)");
+ g_clear_error (&error);
}
return TRUE;
}
gboolean
-nm_named_manager_remove_ip4_config (NMNamedManager *mgr,
- const char *iface,
- NMIP4Config *config)
+nm_dns_manager_remove_ip4_config (NMDnsManager *mgr,
+ const char *iface,
+ NMIP4Config *config)
{
- NMNamedManagerPrivate *priv;
+ NMDnsManagerPrivate *priv;
GError *error = NULL;
g_return_val_if_fail (mgr != NULL, FALSE);
g_return_val_if_fail (iface != NULL, FALSE);
g_return_val_if_fail (config != NULL, FALSE);
- priv = NM_NAMED_MANAGER_GET_PRIVATE (mgr);
+ priv = NM_DNS_MANAGER_GET_PRIVATE (mgr);
/* Can't remove it if it wasn't in the list to begin with */
if (!g_slist_find (priv->configs, config))
@@ -657,37 +861,41 @@ nm_named_manager_remove_ip4_config (NMNamedManager *mgr,
g_object_unref (config);
- if (!rewrite_resolv_conf (mgr, iface, &error)) {
- nm_log_warn (LOGD_DNS, "could not commit DNS changes: '%s'", error ? error->message : "(none)");
- if (error)
- g_error_free (error);
+ if (config_changed (mgr))
+ return TRUE;
+
+ if (!update_dns (mgr, iface, FALSE, &error)) {
+ nm_log_warn (LOGD_DNS, "could not commit DNS changes: (%d) %s",
+ error ? error->code : -1,
+ error && error->message ? error->message : "(unknown)");
+ g_clear_error (&error);
}
return TRUE;
}
gboolean
-nm_named_manager_add_ip6_config (NMNamedManager *mgr,
- const char *iface,
- NMIP6Config *config,
- NMNamedIPConfigType cfg_type)
+nm_dns_manager_add_ip6_config (NMDnsManager *mgr,
+ const char *iface,
+ NMIP6Config *config,
+ NMDnsIPConfigType cfg_type)
{
- NMNamedManagerPrivate *priv;
+ NMDnsManagerPrivate *priv;
GError *error = NULL;
g_return_val_if_fail (mgr != NULL, FALSE);
g_return_val_if_fail (iface != NULL, FALSE);
g_return_val_if_fail (config != NULL, FALSE);
- priv = NM_NAMED_MANAGER_GET_PRIVATE (mgr);
+ priv = NM_DNS_MANAGER_GET_PRIVATE (mgr);
switch (cfg_type) {
- case NM_NAMED_IP_CONFIG_TYPE_VPN:
+ case NM_DNS_IP_CONFIG_TYPE_VPN:
/* FIXME: not quite yet... */
- g_return_val_if_fail (cfg_type != NM_NAMED_IP_CONFIG_TYPE_VPN, FALSE);
+ g_return_val_if_fail (cfg_type != NM_DNS_IP_CONFIG_TYPE_VPN, FALSE);
priv->ip6_vpn_config = config;
break;
- case NM_NAMED_IP_CONFIG_TYPE_BEST_DEVICE:
+ case NM_DNS_IP_CONFIG_TYPE_BEST_DEVICE:
priv->ip6_device_config = config;
break;
default:
@@ -698,27 +906,32 @@ nm_named_manager_add_ip6_config (NMNamedManager *mgr,
if (!g_slist_find (priv->configs, config))
priv->configs = g_slist_append (priv->configs, g_object_ref (config));
- if (!rewrite_resolv_conf (mgr, iface, &error)) {
- nm_log_warn (LOGD_DNS, "could not commit DNS changes: '%s'", error ? error->message : "(none)");
- g_error_free (error);
+ if (config_changed (mgr))
+ return TRUE;
+
+ if (!update_dns (mgr, iface, FALSE, &error)) {
+ nm_log_warn (LOGD_DNS, "could not commit DNS changes: (%d) %s",
+ error ? error->code : -1,
+ error && error->message ? error->message : "(unknown)");
+ g_clear_error (&error);
}
return TRUE;
}
gboolean
-nm_named_manager_remove_ip6_config (NMNamedManager *mgr,
- const char *iface,
- NMIP6Config *config)
+nm_dns_manager_remove_ip6_config (NMDnsManager *mgr,
+ const char *iface,
+ NMIP6Config *config)
{
- NMNamedManagerPrivate *priv;
+ NMDnsManagerPrivate *priv;
GError *error = NULL;
g_return_val_if_fail (mgr != NULL, FALSE);
g_return_val_if_fail (iface != NULL, FALSE);
g_return_val_if_fail (config != NULL, FALSE);
- priv = NM_NAMED_MANAGER_GET_PRIVATE (mgr);
+ priv = NM_DNS_MANAGER_GET_PRIVATE (mgr);
/* Can't remove it if it wasn't in the list to begin with */
if (!g_slist_find (priv->configs, config))
@@ -733,39 +946,156 @@ nm_named_manager_remove_ip6_config (NMNamedManager *mgr,
g_object_unref (config);
- if (!rewrite_resolv_conf (mgr, iface, &error)) {
- nm_log_warn (LOGD_DNS, "could not commit DNS changes: '%s'", error ? error->message : "(none)");
- if (error)
- g_error_free (error);
+ if (config_changed (mgr))
+ return TRUE;
+
+ if (!update_dns (mgr, iface, FALSE, &error)) {
+ nm_log_warn (LOGD_DNS, "could not commit DNS changes: (%d) %s",
+ error ? error->code : -1,
+ error && error->message ? error->message : "(unknown)");
+ g_clear_error (&error);
}
return TRUE;
}
+void
+nm_dns_manager_set_hostname (NMDnsManager *mgr,
+ const char *hostname)
+{
+ NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (mgr);
+ GError *error = NULL;
+ const char *filtered = NULL;
+
+ /* Certain hostnames we don't want to include in resolv.conf 'searches' */
+ if ( hostname
+ && strcmp (hostname, "localhost.localdomain")
+ && strcmp (hostname, "localhost6.localdomain6")
+ && !strstr (hostname, ".in-addr.arpa")
+ && strchr (hostname, '.')) {
+ filtered = hostname;
+ }
+
+ if ( (!priv->hostname && !filtered)
+ || (priv->hostname && filtered && !strcmp (priv->hostname, filtered)))
+ return;
+
+ g_free (priv->hostname);
+ priv->hostname = g_strdup (filtered);
+
+ /* Passing the last interface here is completely bogus, but SUSE's netconfig
+ * wants one. But hostname changes are system-wide and *not* tied to a
+ * specific interface, so netconfig can't really handle this. Fake it.
+ */
+ if (!update_dns (mgr, priv->last_iface, FALSE, &error)) {
+ nm_log_warn (LOGD_DNS, "could not commit DNS changes: (%d) %s",
+ error ? error->code : -1,
+ error && error->message ? error->message : "(unknown)");
+ g_clear_error (&error);
+ }
+}
+
+static void
+load_plugins (NMDnsManager *self, const char **plugins)
+{
+ NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (self);
+ NMDnsPlugin *plugin;
+ const char **iter;
+ gboolean have_caching = FALSE;
+
+ if (plugins && *plugins) {
+ /* Create each configured plugin */
+ for (iter = plugins; iter && *iter; iter++) {
+ if (!strcasecmp (*iter, "dnsmasq"))
+ plugin = NM_DNS_PLUGIN (nm_dns_dnsmasq_new ());
+ else if (!strcasecmp (*iter, "bind")) {
+ plugin = NM_DNS_PLUGIN (nm_dns_bind_new ());
+ nm_log_warn (LOGD_DNS, "The BIND plugin is experimental!");
+ } else {
+ nm_log_warn (LOGD_DNS, "Unknown DNS plugin '%s'", *iter);\
+ continue;
+ }
+ g_assert (plugin);
+
+ /* Only one caching DNS plugin is allowed */
+ if (nm_dns_plugin_is_caching (plugin)) {
+ if (have_caching) {
+ nm_log_warn (LOGD_DNS,
+ "Ignoring plugin %s; only one caching DNS "
+ "plugin is allowed.",
+ *iter);
+ g_object_unref (plugin);
+ continue;
+ }
+ have_caching = TRUE;
+ }
+
+ nm_log_info (LOGD_DNS, "DNS: loaded plugin %s", nm_dns_plugin_get_name (plugin));
+ priv->plugins = g_slist_append (priv->plugins, plugin);
+ g_signal_connect (plugin, NM_DNS_PLUGIN_FAILED,
+ G_CALLBACK (plugin_failed),
+ self);
+ }
+ } else {
+ /* Create default plugins */
+ }
+}
+
+/******************************************************************/
+
+NMDnsManager *
+nm_dns_manager_get (const char **plugins)
+{
+ static NMDnsManager * singleton = NULL;
+
+ if (!singleton) {
+ singleton = NM_DNS_MANAGER (g_object_new (NM_TYPE_DNS_MANAGER, NULL));
+ g_assert (singleton);
+ load_plugins (singleton, plugins);
+ } else
+ g_object_ref (singleton);
+
+ return singleton;
+}
+
+GQuark
+nm_dns_manager_error_quark (void)
+{
+ static GQuark quark = 0;
+ if (!quark)
+ quark = g_quark_from_static_string ("nm_dns_manager_error");
+
+ return quark;
+}
static void
-nm_named_manager_init (NMNamedManager *mgr)
+nm_dns_manager_init (NMDnsManager *mgr)
{
}
static void
-nm_named_manager_finalize (GObject *object)
+nm_dns_manager_finalize (GObject *object)
{
- NMNamedManagerPrivate *priv = NM_NAMED_MANAGER_GET_PRIVATE (object);
+ NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (object);
g_slist_foreach (priv->configs, (GFunc) g_object_unref, NULL);
g_slist_free (priv->configs);
+ g_free (priv->hostname);
+ g_free (priv->last_iface);
+
+ g_slist_foreach (priv->plugins, (GFunc) g_object_unref, NULL);
+ g_slist_free (priv->plugins);
- G_OBJECT_CLASS (nm_named_manager_parent_class)->finalize (object);
+ G_OBJECT_CLASS (nm_dns_manager_parent_class)->finalize (object);
}
static void
-nm_named_manager_class_init (NMNamedManagerClass *klass)
+nm_dns_manager_class_init (NMDnsManagerClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- object_class->finalize = nm_named_manager_finalize;
+ object_class->finalize = nm_dns_manager_finalize;
- g_type_class_add_private (object_class, sizeof (NMNamedManagerPrivate));
+ g_type_class_add_private (object_class, sizeof (NMDnsManagerPrivate));
}
diff --git a/src/dns-manager/nm-dns-manager.h b/src/dns-manager/nm-dns-manager.h
new file mode 100644
index 0000000000..eb1c73a7c2
--- /dev/null
+++ b/src/dns-manager/nm-dns-manager.h
@@ -0,0 +1,95 @@
+/* -*- 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) 2004 - 2005 Colin Walters <walters@redhat.com>
+ * Copyright (C) 2004 - 2010 Red Hat, Inc.
+ * Copyright (C) 2005 - 2008 Novell, Inc.
+ * and others
+ */
+
+#ifndef NM_DNS_MANAGER_H
+#define NM_DNS_MANAGER_H
+
+#include "config.h"
+#include <glib-object.h>
+#include <dbus/dbus.h>
+#include "nm-ip4-config.h"
+#include "nm-ip6-config.h"
+
+typedef enum {
+ NM_DNS_MANAGER_ERROR_SYSTEM,
+ NM_DNS_MANAGER_ERROR_INVALID_NAMESERVER,
+ NM_DNS_MANAGER_ERROR_INVALID_HOST,
+ NM_DNS_MANAGER_ERROR_INVALID_ID
+} NMDnsManagerError;
+
+typedef enum {
+ NM_DNS_IP_CONFIG_TYPE_DEFAULT = 0,
+ NM_DNS_IP_CONFIG_TYPE_BEST_DEVICE,
+ NM_DNS_IP_CONFIG_TYPE_VPN
+} NMDnsIPConfigType;
+
+#define NM_DNS_MANAGER_ERROR nm_dns_manager_error_quark ()
+GQuark nm_dns_manager_error_quark (void);
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_DNS_MANAGER (nm_dns_manager_get_type ())
+#define NM_DNS_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), NM_TYPE_DNS_MANAGER, NMDnsManager))
+#define NM_DNS_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), NM_TYPE_DNS_MANAGER, NMDnsManagerClass))
+#define NM_IS_DNS_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), NM_TYPE_DNS_MANAGER))
+#define NM_IS_DNS_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), NM_TYPE_DNS_MANAGER))
+#define NM_DNS_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), NM_TYPE_DNS_MANAGER, NMDnsManagerClass))
+
+typedef struct NMDnsManagerPrivate NMDnsManagerPrivate;
+
+typedef struct {
+ GObject parent;
+} NMDnsManager;
+
+typedef struct {
+ GObjectClass parent;
+} NMDnsManagerClass;
+
+GType nm_dns_manager_get_type (void);
+
+NMDnsManager * nm_dns_manager_get (const char **plugins);
+
+gboolean nm_dns_manager_add_ip4_config (NMDnsManager *mgr,
+ const char *iface,
+ NMIP4Config *config,
+ NMDnsIPConfigType cfg_type);
+
+gboolean nm_dns_manager_remove_ip4_config (NMDnsManager *mgr,
+ const char *iface,
+ NMIP4Config *config);
+
+gboolean nm_dns_manager_add_ip6_config (NMDnsManager *mgr,
+ const char *iface,
+ NMIP6Config *config,
+ NMDnsIPConfigType cfg_type);
+
+gboolean nm_dns_manager_remove_ip6_config (NMDnsManager *mgr,
+ const char *iface,
+ NMIP6Config *config);
+
+void nm_dns_manager_set_hostname (NMDnsManager *mgr,
+ const char *hostname);
+
+G_END_DECLS
+
+#endif /* NM_DNS_MANAGER_H */
diff --git a/src/dns-manager/nm-dns-plugin.c b/src/dns-manager/nm-dns-plugin.c
new file mode 100644
index 0000000000..f7d65a529b
--- /dev/null
+++ b/src/dns-manager/nm-dns-plugin.c
@@ -0,0 +1,319 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, 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) 2010 Red Hat, Inc.
+ *
+ */
+
+#include <config.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <glib.h>
+
+#include "nm-dns-plugin.h"
+#include "nm-logging.h"
+
+typedef struct {
+ gboolean disposed;
+
+ GPid pid;
+ guint32 watch_id;
+ char *progname;
+ char *pidfile;
+} NMDnsPluginPrivate;
+
+#define NM_DNS_PLUGIN_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DNS_PLUGIN, NMDnsPluginPrivate))
+
+G_DEFINE_TYPE_EXTENDED (NMDnsPlugin, nm_dns_plugin, G_TYPE_OBJECT, G_TYPE_FLAG_ABSTRACT, {})
+
+enum {
+ FAILED,
+ CHILD_QUIT,
+ LAST_SIGNAL
+};
+static guint signals[LAST_SIGNAL] = { 0 };
+
+/********************************************/
+
+gboolean
+nm_dns_plugin_update (NMDnsPlugin *self,
+ const GSList *vpn_configs,
+ const GSList *dev_configs,
+ const GSList *other_configs,
+ const char *hostname)
+{
+ g_return_val_if_fail (NM_DNS_PLUGIN_GET_CLASS (self)->update != NULL, FALSE);
+
+ return NM_DNS_PLUGIN_GET_CLASS (self)->update (self,
+ vpn_configs,
+ dev_configs,
+ other_configs,
+ hostname);
+}
+
+static gboolean
+is_caching (NMDnsPlugin *self)
+{
+ return FALSE;
+}
+
+gboolean
+nm_dns_plugin_is_caching (NMDnsPlugin *self)
+{
+ return NM_DNS_PLUGIN_GET_CLASS (self)->is_caching (self);
+}
+
+const char *
+nm_dns_plugin_get_name (NMDnsPlugin *self)
+{
+ g_assert (NM_DNS_PLUGIN_GET_CLASS (self)->get_name);
+ return NM_DNS_PLUGIN_GET_CLASS (self)->get_name (self);
+}
+
+/********************************************/
+
+static void
+kill_existing (const char *progname, const char *pidfile, const char *kill_match)
+{
+ char *contents = NULL;
+ glong pid;
+ char *proc_path = NULL;
+ char *cmdline_contents = NULL;
+
+ if (!g_file_get_contents (pidfile, &contents, NULL, NULL))
+ return;
+
+ pid = strtol (contents, NULL, 10);
+ if (pid < 1 || pid > INT_MAX)
+ goto out;
+
+ proc_path = g_strdup_printf ("/proc/%ld/cmdline", pid);
+ if (!g_file_get_contents (proc_path, &cmdline_contents, NULL, NULL))
+ goto out;
+
+ if (strstr (cmdline_contents, kill_match)) {
+ if (kill (pid, 0) == 0) {
+ nm_log_dbg (LOGD_DNS, "Killing stale %s child process %ld", progname, pid);
+ kill (pid, SIGKILL);
+ }
+ unlink (pidfile);
+ }
+
+out:
+ g_free (cmdline_contents);
+ g_free (proc_path);
+ g_free (contents);
+}
+
+static void
+watch_cb (GPid pid, gint status, gpointer user_data)
+{
+ NMDnsPlugin *self = NM_DNS_PLUGIN (user_data);
+ NMDnsPluginPrivate *priv = NM_DNS_PLUGIN_GET_PRIVATE (self);
+
+ priv->pid = 0;
+ g_free (priv->progname);
+ priv->progname = NULL;
+
+ g_signal_emit (self, signals[CHILD_QUIT], 0, status);
+}
+
+static void
+child_setup (gpointer user_data G_GNUC_UNUSED)
+{
+ /* We are in the child process at this point */
+ pid_t pid = getpid ();
+ setpgid (pid, pid);
+}
+
+GPid
+nm_dns_plugin_child_spawn (NMDnsPlugin *self,
+ const char **argv,
+ const char *pidfile,
+ const char *kill_match)
+{
+ NMDnsPluginPrivate *priv = NM_DNS_PLUGIN_GET_PRIVATE (self);
+ GError *error = NULL;
+ char *cmdline;
+
+ g_return_val_if_fail (argv != NULL, 0);
+ g_return_val_if_fail (argv[0] != NULL, 0);
+
+ g_warn_if_fail (priv->progname == NULL);
+ g_free (priv->progname);
+ priv->progname = g_path_get_basename (argv[0]);
+
+ if (pidfile) {
+ g_return_val_if_fail (kill_match != NULL, 0);
+ kill_existing (priv->progname, pidfile, kill_match);
+
+ g_free (priv->pidfile);
+ priv->pidfile = g_strdup (pidfile);
+ }
+
+ nm_log_info (LOGD_DNS, "DNS: starting %s...", priv->progname);
+ cmdline = g_strjoinv (" ", (char **) argv);
+ nm_log_dbg (LOGD_DNS, "DNS: command line: %s", cmdline);
+ g_free (cmdline);
+
+ priv->pid = 0;
+ if (g_spawn_async (NULL, (char **) argv, NULL,
+ G_SPAWN_DO_NOT_REAP_CHILD,
+ child_setup,
+ NULL, &priv->pid,
+ &error)) {
+ nm_log_dbg (LOGD_DNS, "%s started with pid %d", priv->progname, priv->pid);
+ priv->watch_id = g_child_watch_add (priv->pid, (GChildWatchFunc) watch_cb, self);
+ } else {
+ nm_log_warn (LOGD_DNS, "Failed to spawn %s: (%d) %s",
+ priv->progname, error ? error->code : -1,
+ error && error->message ? error->message : "(unknown)");
+ g_clear_error (&error);
+ }
+
+ return priv->pid;
+}
+
+typedef struct {
+ int pid;
+ char *progname;
+} KillInfo;
+
+static gboolean
+ensure_killed (gpointer data)
+{
+ KillInfo *info = data;
+
+ if (kill (info->pid, 0) == 0)
+ kill (info->pid, SIGKILL);
+
+ /* ensure the child is reaped */
+ nm_log_dbg (LOGD_DNS, "waiting for %s pid %d to exit", info->progname, info->pid);
+ waitpid (info->pid, NULL, 0);
+ nm_log_dbg (LOGD_DNS, "dnsmasq pid %d cleaned up", info->progname, info->pid);
+
+ g_free (info->progname);
+ g_free (info);
+ return FALSE;
+}
+
+gboolean nm_dns_plugin_child_kill (NMDnsPlugin *self)
+{
+ NMDnsPluginPrivate *priv = NM_DNS_PLUGIN_GET_PRIVATE (self);
+
+ if (priv->watch_id) {
+ g_source_remove (priv->watch_id);
+ priv->watch_id = 0;
+ }
+
+ if (priv->pid) {
+ KillInfo *info;
+
+ if (kill (priv->pid, SIGTERM) == 0) {
+ info = g_malloc0 (sizeof (KillInfo));
+ info->pid = priv->pid;
+ info->progname = g_strdup (priv->progname);
+ g_timeout_add_seconds (2, ensure_killed, info);
+ } else {
+ kill (priv->pid, SIGKILL);
+
+ /* ensure the child is reaped */
+ nm_log_dbg (LOGD_DNS, "waiting for %s pid %d to exit", priv->progname, priv->pid);
+ waitpid (priv->pid, NULL, 0);
+ nm_log_dbg (LOGD_DNS, "%s pid %d cleaned up", priv->progname, priv->pid);
+ }
+ priv->pid = 0;
+ g_free (priv->progname);
+ priv->progname = NULL;
+ }
+
+ if (priv->pidfile) {
+ unlink (priv->pidfile);
+ g_free (priv->pidfile);
+ priv->pidfile = NULL;
+ }
+
+ return TRUE;
+}
+
+/********************************************/
+
+static void
+nm_dns_plugin_init (NMDnsPlugin *self)
+{
+}
+
+static void
+dispose (GObject *object)
+{
+ NMDnsPlugin *self = NM_DNS_PLUGIN (object);
+ NMDnsPluginPrivate *priv = NM_DNS_PLUGIN_GET_PRIVATE (self);
+
+ if (!priv->disposed) {
+ priv->disposed = TRUE;
+
+ nm_dns_plugin_child_kill (self);
+ }
+
+ G_OBJECT_CLASS (nm_dns_plugin_parent_class)->dispose (object);
+}
+
+static void
+finalize (GObject *object)
+{
+ NMDnsPlugin *self = NM_DNS_PLUGIN (object);
+ NMDnsPluginPrivate *priv = NM_DNS_PLUGIN_GET_PRIVATE (self);
+
+ g_free (priv->progname);
+ g_free (priv->pidfile);
+
+ G_OBJECT_CLASS (nm_dns_plugin_parent_class)->finalize (object);
+}
+
+static void
+nm_dns_plugin_class_init (NMDnsPluginClass *plugin_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (plugin_class);
+
+ g_type_class_add_private (plugin_class, sizeof (NMDnsPluginPrivate));
+
+ /* virtual methods */
+ object_class->dispose = dispose;
+ object_class->finalize = finalize;
+ plugin_class->is_caching = is_caching;
+
+ /* signals */
+ signals[FAILED] =
+ g_signal_new (NM_DNS_PLUGIN_FAILED,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMDnsPluginClass, failed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ signals[CHILD_QUIT] =
+ g_signal_new (NM_DNS_PLUGIN_CHILD_QUIT,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMDnsPluginClass, child_quit),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__INT,
+ G_TYPE_NONE, 1, G_TYPE_INT);
+}
+
diff --git a/src/dns-manager/nm-dns-plugin.h b/src/dns-manager/nm-dns-plugin.h
new file mode 100644
index 0000000000..d4298b869d
--- /dev/null
+++ b/src/dns-manager/nm-dns-plugin.h
@@ -0,0 +1,112 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, 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) 2010 Red Hat, Inc.
+ */
+
+#ifndef NM_DNS_PLUGIN_H
+#define NM_DNS_PLUGIN_H
+
+#include <glib.h>
+#include <glib-object.h>
+
+#define NM_TYPE_DNS_PLUGIN (nm_dns_plugin_get_type ())
+#define NM_DNS_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DNS_PLUGIN, NMDnsPlugin))
+#define NM_DNS_PLUGIN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DNS_PLUGIN, NMDnsPluginClass))
+#define NM_IS_DNS_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DNS_PLUGIN))
+#define NM_IS_DNS_PLUGIN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NM_TYPE_DNS_PLUGIN))
+#define NM_DNS_PLUGIN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DNS_PLUGIN, NMDnsPluginClass))
+
+#define NM_DNS_PLUGIN_FAILED "failed"
+#define NM_DNS_PLUGIN_CHILD_QUIT "child-quit"
+
+typedef struct {
+ GObject parent;
+} NMDnsPlugin;
+
+typedef struct {
+ GObjectClass parent;
+
+ /* Methods */
+ gboolean (*init) (NMDnsPlugin *self);
+
+ /* Called when DNS information is changed. 'vpn_configs' is a list of
+ * NMIP4Config or NMIP6Config objects from VPN connections, while
+ * 'dev_configs' is a list of NMPI4Config or NMIP6Config objects from
+ * active devices. 'other_configs' represent other IP configuration that
+ * may be in-use. Configs of the same IP version are sorted in priority
+ * order.
+ */
+ gboolean (*update) (NMDnsPlugin *self,
+ const GSList *vpn_configs,
+ const GSList *dev_configs,
+ const GSList *other_configs,
+ const char *hostname);
+
+ /* Subclasses should override and return TRUE if they start a local
+ * caching nameserver that listens on localhost and would block any
+ * other local caching nameserver from operating.
+ */
+ gboolean (*is_caching) (NMDnsPlugin *self);
+
+ /* Subclasses should override this and return their plugin name */
+ const char *(*get_name) (NMDnsPlugin *self);
+
+ /* Signals */
+
+ /* Emitted by the plugin and consumed by NMDnsManager when
+ * some error happens with the nameserver subprocess. Causes NM to fall
+ * back to writing out a non-local-caching resolv.conf until the next
+ * DNS update.
+ */
+ void (*failed) (NMDnsPlugin *self);
+
+ /* Emitted by the plugin base class when the nameserver subprocess
+ * quits. This signal is consumed by the plugin subclasses and not
+ * by NMDnsManager. If the subclass decides the exit status (as returned
+ * by waitpid(2)) is fatal it should then emit the 'failed' signal.
+ */
+ void (*child_quit) (NMDnsPlugin *self, gint status);
+} NMDnsPluginClass;
+
+GType nm_dns_plugin_get_type (void);
+
+gboolean nm_dns_plugin_is_caching (NMDnsPlugin *self);
+
+const char *nm_dns_plugin_get_name (NMDnsPlugin *self);
+
+gboolean nm_dns_plugin_update (NMDnsPlugin *self,
+ const GSList *vpn_configs,
+ const GSList *dev_configs,
+ const GSList *other_configs,
+ const char *hostname);
+
+/* For subclasses/plugins */
+
+/* Spawn a child process and watch for it to quit. 'argv' is the NULL-terminated
+ * argument vector to spawn the child with, where argv[0] is the full path to
+ * the child's executable. If 'pidfile' is given the process owning the PID
+ * contained in 'pidfile' will be killed if its command line matches 'kill_match'
+ * and the pidfile will be deleted.
+ */
+GPid nm_dns_plugin_child_spawn (NMDnsPlugin *self,
+ const char **argv,
+ const char *pidfile,
+ const char *kill_match);
+
+gboolean nm_dns_plugin_child_kill (NMDnsPlugin *self);
+
+#endif /* NM_DNS_PLUGIN_H */
+
diff --git a/src/dns-manager/nm-dns-utils.c b/src/dns-manager/nm-dns-utils.c
new file mode 100644
index 0000000000..615adfd151
--- /dev/null
+++ b/src/dns-manager/nm-dns-utils.c
@@ -0,0 +1,99 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, 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) 2010 Red Hat, Inc.
+ *
+ */
+
+#include <arpa/inet.h>
+#include <string.h>
+
+#include "nm-dns-utils.h"
+#include "nm-utils.h"
+
+static void
+add_ip4_to_rdns_array (guint32 ip, GPtrArray *domains) /* network byte order */
+{
+ guint32 defprefix;
+ guchar *p;
+ char *str = NULL;
+ int i;
+
+ defprefix = nm_utils_ip4_get_default_prefix (ip);
+
+ /* Convert to host byte order, mask the host bits, and convert back */
+ ip = ntohl (ip);
+ ip &= 0xFFFFFFFF << (32 - defprefix);
+ ip = htonl (ip);
+ p = (guchar *) &ip;
+
+ if (defprefix == 8)
+ str = g_strdup_printf ("%u.in-addr.arpa", p[0] & 0xFF);
+ else if (defprefix == 16)
+ str = g_strdup_printf ("%u.%u.in-addr.arpa", p[1] & 0xFF, p[0] & 0xFF);
+ else if (defprefix == 24)
+ str = g_strdup_printf ("%u.%u.%u.in-addr.arpa", p[2] & 0xFF, p[1] & 0xFF, p[0] & 0xFF);
+
+ g_return_if_fail (str != NULL);
+
+ /* Suppress duplicates */
+ for (i = 0; i < domains->len; i++) {
+ if (strcmp (str, g_ptr_array_index (domains, i)) == 0)
+ break;
+ }
+
+ if (i == domains->len)
+ g_ptr_array_add (domains, str);
+ else
+ g_free (str);
+}
+
+char **
+nm_dns_utils_get_ip4_rdns_domains (NMIP4Config *ip4)
+{
+ GPtrArray *domains = NULL;
+ int i;
+
+ g_return_val_if_fail (ip4 != NULL, NULL);
+
+ domains = g_ptr_array_sized_new (5);
+
+ /* To calculate the reverse DNS domains for this IP4 config, we take
+ * all the IP addresses and routes in the config, calculate the network
+ * portion, and convert that to classful, and use the network bits for
+ * the final domain. FIXME: better handle classless routing, which might
+ * require us to add multiple domains for each actual network prefix to
+ * cover all the separate networks in that block.
+ */
+
+ for (i = 0; i < nm_ip4_config_get_num_addresses (ip4); i++) {
+ NMIP4Address *addr = nm_ip4_config_get_address (ip4, i);
+
+ add_ip4_to_rdns_array (nm_ip4_address_get_address (addr), domains);
+ }
+
+ for (i = 0; i < nm_ip4_config_get_num_routes (ip4); i++) {
+ NMIP4Route *route = nm_ip4_config_get_route (ip4, i);
+
+ add_ip4_to_rdns_array (nm_ip4_route_get_dest (route), domains);
+ }
+
+ /* Terminating NULL so we can use g_strfreev() to free it */
+ g_ptr_array_add (domains, NULL);
+
+ /* Free the array and return NULL if the only element was the ending NULL */
+ return (char **) g_ptr_array_free (domains, (domains->len == 1));
+}
+
diff --git a/src/dns-manager/nm-dns-utils.h b/src/dns-manager/nm-dns-utils.h
new file mode 100644
index 0000000000..daa6711cce
--- /dev/null
+++ b/src/dns-manager/nm-dns-utils.h
@@ -0,0 +1,28 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, 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) 2010 Red Hat, Inc.
+ *
+ */
+
+#ifndef NM_DNS_UTILS_H
+#define NM_DNS_UTILS_H
+
+#include "nm-ip4-config.h"
+
+char **nm_dns_utils_get_ip4_rdns_domains (NMIP4Config *ip4);
+
+#endif /* NM_DNS_UTILS_H */
+
diff --git a/src/dnsmasq-manager/nm-dnsmasq-manager.c b/src/dnsmasq-manager/nm-dnsmasq-manager.c
index ea529c77eb..701c078268 100644
--- a/src/dnsmasq-manager/nm-dnsmasq-manager.c
+++ b/src/dnsmasq-manager/nm-dnsmasq-manager.c
@@ -18,6 +18,7 @@
* Copyright (C) 2008 - 2010 Red Hat, Inc.
*/
+#include <config.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
@@ -251,8 +252,9 @@ create_dm_cmd_line (const char *iface,
GString *s;
NMIP4Address *tmp;
struct in_addr addr;
- char buf[INET_ADDRSTRLEN + 1];
+ char buf[INET_ADDRSTRLEN + 15];
char localaddr[INET_ADDRSTRLEN + 1];
+ int i;
dm_binary = nm_find_dnsmasq ();
if (!dm_binary) {
@@ -273,6 +275,21 @@ create_dm_cmd_line (const char *iface,
nm_cmd_line_add_string (cmd, "--log-queries");
}
+ /* dnsmasq may read from it's default config file location, which if that
+ * location is a valid config file, it will combine with the options here
+ * and cause undesirable side-effects. Like sending bogus IP addresses
+ * as the gateway or whatever. So give dnsmasq a bogus config file
+ * location to avoid screwing up the configuration we're passing to it.
+ */
+ memset (buf, 0, sizeof (buf));
+ strcpy (buf, "/tmp/");
+ for (i = 5; i < 15; i++)
+ buf[i] = (char) (g_random_int_range ((guint32) 'a', (guint32) 'z') & 0xFF);
+ strcat (buf, ".conf");
+
+ nm_cmd_line_add_string (cmd, "--conf-file");
+ nm_cmd_line_add_string (cmd, buf);
+
nm_cmd_line_add_string (cmd, "--no-hosts");
nm_cmd_line_add_string (cmd, "--keep-in-foreground");
nm_cmd_line_add_string (cmd, "--bind-interfaces");
@@ -369,7 +386,7 @@ kill_existing_for_iface (const char *iface, const char *pidfile)
goto out;
if (strstr (cmdline_contents, "bin/dnsmasq")) {
- if (kill (pid, 0)) {
+ if (kill (pid, 0) == 0) {
nm_log_dbg (LOGD_SHARING, "Killing stale dnsmasq process %ld", pid);
kill (pid, SIGKILL);
}
diff --git a/src/ip6-manager/Makefile.am b/src/ip6-manager/Makefile.am
index c2f5591429..b56b197e75 100644
--- a/src/ip6-manager/Makefile.am
+++ b/src/ip6-manager/Makefile.am
@@ -4,8 +4,7 @@ INCLUDES = \
-I${top_builddir}/marshallers \
-I${top_srcdir}/libnm-util \
-I${top_srcdir}/src/logging \
- -I${top_srcdir}/src \
- -I${top_srcdir}/src/named-manager
+ -I${top_srcdir}/src
noinst_LTLIBRARIES = libip6-manager.la
diff --git a/src/ip6-manager/nm-ip6-manager.c b/src/ip6-manager/nm-ip6-manager.c
index f6f6127ce7..ea93f02c02 100644
--- a/src/ip6-manager/nm-ip6-manager.c
+++ b/src/ip6-manager/nm-ip6-manager.c
@@ -76,6 +76,11 @@ typedef struct {
time_t expires;
} NMIP6RDNSS;
+typedef struct {
+ char domain[256];
+ time_t expires;
+} NMIP6DNSSL;
+
/******************************************************************/
typedef struct {
@@ -97,6 +102,9 @@ typedef struct {
GArray *rdnss_servers;
guint rdnss_timeout_id;
+ GArray *dnssl_domains;
+ guint dnssl_timeout_id;
+
guint ip6flags_poll_id;
guint32 ra_flags;
@@ -122,6 +130,10 @@ nm_ip6_device_destroy (NMIP6Device *device)
g_array_free (device->rdnss_servers, TRUE);
if (device->rdnss_timeout_id)
g_source_remove (device->rdnss_timeout_id);
+ if (device->dnssl_domains)
+ g_array_free (device->dnssl_domains, TRUE);
+ if (device->dnssl_timeout_id)
+ g_source_remove (device->dnssl_timeout_id);
if (device->ip6flags_poll_id)
g_source_remove (device->ip6flags_poll_id);
@@ -155,6 +167,8 @@ nm_ip6_device_new (NMIP6Manager *manager, int ifindex)
device->rdnss_servers = g_array_new (FALSE, FALSE, sizeof (NMIP6RDNSS));
+ device->dnssl_domains = g_array_new (FALSE, FALSE, sizeof (NMIP6DNSSL));
+
g_hash_table_replace (priv->devices, GINT_TO_POINTER (device->ifindex), device);
/* and the original value of IPv6 enable/disable */
@@ -285,7 +299,7 @@ set_rdnss_timeout (NMIP6Device *device)
nm_log_dbg (LOGD_IP6, "(%s): removing expired RA-provided nameserver %s",
device->iface, buf);
}
- g_array_remove_index_fast (device->rdnss_servers, i--);
+ g_array_remove_index (device->rdnss_servers, i--);
continue;
}
@@ -300,6 +314,61 @@ set_rdnss_timeout (NMIP6Device *device)
}
}
+static void set_dnssl_timeout (NMIP6Device *device);
+
+static gboolean
+dnssl_expired (gpointer user_data)
+{
+ NMIP6Device *device = user_data;
+ CallbackInfo info = { device, IP6_DHCP_OPT_NONE };
+
+ nm_log_dbg (LOGD_IP6, "(%s): IPv6 DNSSL information expired", device->iface);
+
+ set_dnssl_timeout (device);
+ emit_config_changed (&info);
+ return FALSE;
+}
+
+static void
+set_dnssl_timeout (NMIP6Device *device)
+{
+ time_t expires = 0, now = time (NULL);
+ NMIP6DNSSL *dnssl;
+ int i;
+
+ if (device->dnssl_timeout_id) {
+ g_source_remove (device->dnssl_timeout_id);
+ device->dnssl_timeout_id = 0;
+ }
+
+ /* Find the soonest expiration time. */
+ for (i = 0; i < device->dnssl_domains->len; i++) {
+ dnssl = &g_array_index (device->dnssl_domains, NMIP6DNSSL, i);
+ if (dnssl->expires == 0)
+ continue;
+
+ /* If the entry has already expired, remove it; the "+ 1" is
+ * because g_timeout_add_seconds() might fudge the timing a
+ * bit.
+ */
+ if (dnssl->expires <= now + 1) {
+ nm_log_dbg (LOGD_IP6, "(%s): removing expired RA-provided domain %s",
+ device->iface, dnssl->domain);
+ g_array_remove_index (device->dnssl_domains, i--);
+ continue;
+ }
+
+ if (!expires || dnssl->expires < expires)
+ expires = dnssl->expires;
+ }
+
+ if (expires) {
+ device->dnssl_timeout_id = g_timeout_add_seconds (expires - now,
+ dnssl_expired,
+ device);
+ }
+}
+
static CallbackInfo *
callback_info_new (NMIP6Device *device, guint dhcp_opts, gboolean success)
{
@@ -569,13 +638,258 @@ process_prefix (NMIP6Manager *manager, struct nl_msg *msg)
*/
#define ND_OPT_RDNSS 25
+#define ND_OPT_DNSSL 31
+
struct nd_opt_rdnss {
uint8_t nd_opt_rdnss_type;
uint8_t nd_opt_rdnss_len;
uint16_t nd_opt_rdnss_reserved1;
uint32_t nd_opt_rdnss_lifetime;
/* followed by one or more IPv6 addresses */
-};
+} __attribute__ ((packed));
+
+struct nd_opt_dnssl {
+ uint8_t nd_opt_dnssl_type;
+ uint8_t nd_opt_dnssl_len;
+ uint16_t nd_opt_dnssl_reserved1;
+ uint32_t nd_opt_dnssl_lifetime;
+ /* followed by one or more suffixes */
+} __attribute__ ((packed));
+
+static gboolean
+process_nduseropt_rdnss (NMIP6Device *device, struct nd_opt_hdr *opt)
+{
+ size_t opt_len;
+ struct nd_opt_rdnss *rdnss_opt;
+ time_t now = time (NULL);
+ struct in6_addr *addr;
+ GArray *new_servers;
+ NMIP6RDNSS server, *cur_server;
+ gboolean changed = FALSE;
+ guint i;
+
+ opt_len = opt->nd_opt_len;
+
+ if (opt_len < 3 || (opt_len & 1) == 0)
+ return FALSE;
+
+ rdnss_opt = (struct nd_opt_rdnss *) opt;
+
+ new_servers = g_array_new (FALSE, FALSE, sizeof (NMIP6RDNSS));
+
+ /* Pad the DNS server expiry somewhat to give a bit of slack in cases
+ * where one RA gets lost or something (which can happen on unreliable
+ * links like WiFi where certain types of frames are not retransmitted).
+ * Note that 0 has special meaning and is therefore not adjusted.
+ */
+ server.expires = ntohl (rdnss_opt->nd_opt_rdnss_lifetime);
+ if (server.expires > 0)
+ server.expires += now + 10;
+
+ for (addr = (struct in6_addr *) (rdnss_opt + 1); opt_len >= 2; addr++, opt_len -= 2) {
+ char buf[INET6_ADDRSTRLEN + 1];
+
+ if (!inet_ntop (AF_INET6, addr, buf, sizeof (buf)))
+ strcpy(buf, "[invalid]");
+
+ for (i = 0; i < device->rdnss_servers->len; i++) {
+ cur_server = &(g_array_index (device->rdnss_servers, NMIP6RDNSS, i));
+
+ if (!IN6_ARE_ADDR_EQUAL (addr, &cur_server->addr))
+ continue;
+
+ cur_server->expires = server.expires;
+
+ if (server.expires > 0) {
+ nm_log_dbg (LOGD_IP6, "(%s): refreshing RA-provided nameserver %s (expires in %d seconds)",
+ device->iface, buf,
+ server.expires - now);
+ break;
+ }
+
+ nm_log_dbg (LOGD_IP6, "(%s): removing RA-provided nameserver %s on router request",
+ device->iface, buf);
+
+ g_array_remove_index (device->rdnss_servers, i);
+ changed = TRUE;
+ break;
+ }
+
+ if (server.expires == 0)
+ continue;
+ if (i < device->rdnss_servers->len)
+ continue;
+
+ nm_log_dbg (LOGD_IP6, "(%s): found RA-provided nameserver %s (expires in %d seconds)",
+ device->iface, buf, server.expires - now);
+
+ server.addr = *addr;
+ g_array_append_val (new_servers, server);
+ }
+
+ /* New servers must be added in the order they are listed in the
+ * RA option and before any existing servers.
+ *
+ * Note: This is the place to remove servers if we want to cap the
+ * number of resolvers. The RFC states that the one to expire
+ * first of the existing servers should be removed.
+ */
+ if (new_servers->len) {
+ g_array_prepend_vals (device->rdnss_servers,
+ new_servers->data, new_servers->len);
+ changed = TRUE;
+ }
+
+ g_array_free (new_servers, TRUE);
+
+ /* Timeouts may have changed even if IPs didn't */
+ set_rdnss_timeout (device);
+
+ return changed;
+}
+
+static const char *
+parse_dnssl_domain (const unsigned char *buffer, size_t maxlen)
+{
+ static char domain[256];
+ size_t label_len;
+
+ domain[0] = '\0';
+
+ while (maxlen > 0) {
+ label_len = *buffer;
+ buffer++;
+ maxlen--;
+
+ if (label_len == 0)
+ return domain;
+
+ if (label_len > maxlen)
+ return NULL;
+ if ((sizeof (domain) - strlen (domain)) < (label_len + 2))
+ return NULL;
+
+ if (domain[0] != '\0')
+ strcat (domain, ".");
+ strncat (domain, (const char *)buffer, label_len);
+ buffer += label_len;
+ maxlen -= label_len;
+ }
+
+ return NULL;
+}
+
+static gboolean
+process_nduseropt_dnssl (NMIP6Device *device, struct nd_opt_hdr *opt)
+{
+ size_t opt_len;
+ struct nd_opt_dnssl *dnssl_opt;
+ unsigned char *opt_ptr;
+ time_t now = time (NULL);
+ GArray *new_domains;
+ NMIP6DNSSL domain, *cur_domain;
+ gboolean changed;
+ guint i;
+
+ opt_len = opt->nd_opt_len;
+
+ if (opt_len < 2)
+ return FALSE;
+
+ dnssl_opt = (struct nd_opt_dnssl *) opt;
+
+ opt_ptr = (unsigned char *)(dnssl_opt + 1);
+ opt_len = (opt_len - 1) * 8; /* prefer bytes for later handling */
+
+ new_domains = g_array_new (FALSE, FALSE, sizeof (NMIP6DNSSL));
+
+ changed = FALSE;
+
+ /* Pad the DNS server expiry somewhat to give a bit of slack in cases
+ * where one RA gets lost or something (which can happen on unreliable
+ * links like wifi where certain types of frames are not retransmitted).
+ * Note that 0 has special meaning and is therefore not adjusted.
+ */
+ domain.expires = ntohl (dnssl_opt->nd_opt_dnssl_lifetime);
+ if (domain.expires > 0)
+ domain.expires += now + 10;
+
+ while (opt_len) {
+ const char *domain_str;
+
+ domain_str = parse_dnssl_domain (opt_ptr, opt_len);
+ if (domain_str == NULL) {
+ nm_log_dbg (LOGD_IP6, "(%s): invalid DNSSL option, parsing aborted",
+ device->iface);
+ break;
+ }
+
+ /* The DNSSL encoding of domains happen to occupy the same size
+ * as the length of the resulting string, including terminating
+ * null. */
+ opt_ptr += strlen (domain_str) + 1;
+ opt_len -= strlen (domain_str) + 1;
+
+ /* Ignore empty domains. They're probably just padding... */
+ if (domain_str[0] == '\0')
+ continue;
+
+ for (i = 0; i < device->dnssl_domains->len; i++) {
+ cur_domain = &(g_array_index (device->dnssl_domains, NMIP6DNSSL, i));
+
+ if (strcmp (domain_str, cur_domain->domain) != 0)
+ continue;
+
+ cur_domain->expires = domain.expires;
+
+ if (domain.expires > 0) {
+ nm_log_dbg (LOGD_IP6, "(%s): refreshing RA-provided domain %s (expires in %d seconds)",
+ device->iface, domain_str,
+ domain.expires - now);
+ break;
+ }
+
+ nm_log_dbg (LOGD_IP6, "(%s): removing RA-provided domain %s on router request",
+ device->iface, domain_str);
+
+ g_array_remove_index (device->dnssl_domains, i);
+ changed = TRUE;
+ break;
+ }
+
+ if (domain.expires == 0)
+ continue;
+ if (i < device->dnssl_domains->len)
+ continue;
+
+ nm_log_dbg (LOGD_IP6, "(%s): found RA-provided domain %s (expires in %d seconds)",
+ device->iface, domain_str, domain.expires - now);
+
+ g_assert (strlen (domain_str) < sizeof (domain.domain));
+ strcpy (domain.domain, domain_str);
+ g_array_append_val (new_domains, domain);
+ }
+
+ /* New domains must be added in the order they are listed in the
+ * RA option and before any existing domains.
+ *
+ * Note: This is the place to remove domains if we want to cap the
+ * number of domains. The RFC states that the one to expire
+ * first of the existing domains should be removed.
+ */
+ if (new_domains->len) {
+ g_array_prepend_vals (device->dnssl_domains,
+ new_domains->data, new_domains->len);
+ changed = TRUE;
+ }
+
+ g_array_free (new_domains, TRUE);
+
+ /* Timeouts may have changed even if domains didn't */
+ set_dnssl_timeout (device);
+
+ return changed;
+}
static NMIP6Device *
process_nduseropt (NMIP6Manager *manager, struct nl_msg *msg)
@@ -583,13 +897,8 @@ process_nduseropt (NMIP6Manager *manager, struct nl_msg *msg)
NMIP6Device *device;
struct nduseroptmsg *ndmsg;
struct nd_opt_hdr *opt;
- guint opts_len, i;
- time_t now = time (NULL);
- struct nd_opt_rdnss *rdnss_opt;
- struct in6_addr *addr;
- GArray *servers;
- NMIP6RDNSS server, *sa, *sb;
- gboolean changed;
+ guint opts_len;
+ gboolean changed = FALSE;
nm_log_dbg (LOGD_IP6, "processing netlink nduseropt message");
@@ -608,8 +917,6 @@ process_nduseropt (NMIP6Manager *manager, struct nl_msg *msg)
return NULL;
}
- servers = g_array_new (FALSE, FALSE, sizeof (NMIP6RDNSS));
-
opt = (struct nd_opt_hdr *) (ndmsg + 1);
opts_len = ndmsg->nduseropt_opts_len;
@@ -619,66 +926,19 @@ process_nduseropt (NMIP6Manager *manager, struct nl_msg *msg)
if (nd_opt_len == 0 || opts_len < (nd_opt_len << 3))
break;
- if (opt->nd_opt_type != ND_OPT_RDNSS)
- goto next;
-
- if (nd_opt_len < 3 || (nd_opt_len & 1) == 0)
- goto next;
-
- rdnss_opt = (struct nd_opt_rdnss *) opt;
-
- /* Pad the DNS server expiry somewhat to give a bit of slack in cases
- * where one RA gets lost or something (which can happen on unreliable
- * links like wifi where certain types of frames are not retransmitted).
- */
- server.expires = now + ntohl (rdnss_opt->nd_opt_rdnss_lifetime) + 10;
-
- for (addr = (struct in6_addr *) (rdnss_opt + 1); nd_opt_len >= 2; addr++, nd_opt_len -= 2) {
- char buf[INET6_ADDRSTRLEN + 1];
-
- if (inet_ntop (AF_INET6, addr, buf, sizeof (buf))) {
- nm_log_dbg (LOGD_IP6, "(%s): found RA-provided nameserver %s (expires in %d seconds)",
- device->iface, buf,
- ntohl (rdnss_opt->nd_opt_rdnss_lifetime));
- }
-
- server.addr = *addr;
- g_array_append_val (servers, server);
+ switch (opt->nd_opt_type) {
+ case ND_OPT_RDNSS:
+ changed = process_nduseropt_rdnss (device, opt);
+ break;
+ case ND_OPT_DNSSL:
+ changed = process_nduseropt_dnssl (device, opt);
+ break;
}
- next:
opts_len -= opt->nd_opt_len << 3;
opt = (struct nd_opt_hdr *) ((uint8_t *) opt + (opt->nd_opt_len << 3));
}
- /* See if anything (other than expiration time) changed */
- if (servers->len != device->rdnss_servers->len)
- changed = TRUE;
- else {
- for (i = 0; i < servers->len; i++) {
- sa = &(g_array_index (servers, NMIP6RDNSS, i));
- sb = &(g_array_index (device->rdnss_servers, NMIP6RDNSS, i));
- if (IN6_ARE_ADDR_EQUAL (&sa->addr, &sb->addr) == FALSE) {
- changed = TRUE;
- break;
- }
- }
- changed = FALSE;
- }
-
- if (changed) {
- nm_log_dbg (LOGD_IP6, "(%s): RA-provided nameservers changed", device->iface);
- }
-
- /* Always copy in new servers (even if unchanged) to get their updated
- * expiration times.
- */
- g_array_free (device->rdnss_servers, TRUE);
- device->rdnss_servers = servers;
-
- /* Timeouts may have changed even if IPs didn't */
- set_rdnss_timeout (device);
-
if (changed)
return device;
else
@@ -1014,6 +1274,14 @@ nm_ip6_manager_get_ip6_config (NMIP6Manager *manager, int ifindex)
nm_ip6_config_add_nameserver (config, &rdnss[i].addr);
}
+ /* Add DNS domains */
+ if (device->dnssl_domains) {
+ NMIP6DNSSL *dnssl = (NMIP6DNSSL *)(device->dnssl_domains->data);
+
+ for (i = 0; i < device->dnssl_domains->len; i++)
+ nm_ip6_config_add_domain (config, dnssl[i].domain);
+ }
+
return config;
}
diff --git a/src/logging/nm-logging.c b/src/logging/nm-logging.c
index 9d1905da08..5b5622fd70 100644
--- a/src/logging/nm-logging.c
+++ b/src/logging/nm-logging.c
@@ -209,6 +209,12 @@ nm_logging_domains_to_string (void)
return g_string_free (str, FALSE);
}
+gboolean
+nm_logging_level_enabled (guint32 level)
+{
+ return !!(log_level & level);
+}
+
void _nm_log (const char *loc,
const char *func,
guint32 domain,
diff --git a/src/logging/nm-logging.h b/src/logging/nm-logging.h
index 2eedf5ff14..e4abcf75ca 100644
--- a/src/logging/nm-logging.h
+++ b/src/logging/nm-logging.h
@@ -90,6 +90,7 @@ void _nm_log (const char *loc, const char *func,
const char *nm_logging_level_to_string (void);
char *nm_logging_domains_to_string (void);
+gboolean nm_logging_level_enabled (guint32 level);
/* Undefine the nm-utils.h logging stuff to ensure errors */
#undef nm_print_backtrace
diff --git a/src/main.c b/src/main.c
index ff7805636a..1e3db217b1 100644
--- a/src/main.c
+++ b/src/main.c
@@ -19,10 +19,7 @@
* Copyright (C) 2005 - 2008 Novell, Inc.
*/
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
+#include <config.h>
#include <glib.h>
#include <dbus/dbus.h>
#include <dbus/dbus-glib-lowlevel.h>
@@ -44,7 +41,7 @@
#include "nm-manager.h"
#include "nm-policy.h"
#include "nm-system.h"
-#include "nm-named-manager.h"
+#include "nm-dns-manager.h"
#include "nm-dbus-manager.h"
#include "nm-supplicant-manager.h"
#include "nm-dhcp-manager.h"
@@ -52,6 +49,7 @@
#include "nm-netlink-monitor.h"
#include "nm-vpn-manager.h"
#include "nm-logging.h"
+#include "nm-policy-hosts.h"
#if !defined(NM_DIST_VERSION)
# define NM_DIST_VERSION VERSION
@@ -303,11 +301,13 @@ 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) {
@@ -318,19 +318,23 @@ parse_config_file (const char *filename,
g_key_file_set_list_separator (config, ',');
if (!g_key_file_load_from_file (config, filename, G_KEY_FILE_NONE, error))
- return FALSE;
+ goto out;
*plugins = g_key_file_get_value (config, "main", "plugins", error);
if (*error)
- return FALSE;
+ 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 TRUE;
+ return success;
}
static gboolean
@@ -456,11 +460,12 @@ main (int argc, char *argv[])
char *pidfile = NULL, *state_file = NULL, *dhcp = NULL;
char *config = NULL, *plugins = NULL, *conf_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;
NMPolicy *policy = NULL;
NMVPNManager *vpn_manager = NULL;
- NMNamedManager *named_mgr = NULL;
+ NMDnsManager *dns_mgr = NULL;
NMDBusManager *dbus_mgr = NULL;
NMSupplicantManager *sup_mgr = NULL;
NMDHCPManager *dhcp_mgr = NULL;
@@ -529,7 +534,7 @@ main (int argc, char *argv[])
/* Parse the config file */
if (config) {
- if (!parse_config_file (config, &conf_plugins, &dhcp, &cfg_log_level, &cfg_log_domains, &error)) {
+ 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,
@@ -539,10 +544,17 @@ main (int argc, char *argv[])
} else {
gboolean parsed = FALSE;
- /* Try NetworkManager.conf first */
- if (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, &cfg_log_level, &cfg_log_domains, &error);
+ /* 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,
@@ -551,14 +563,14 @@ main (int argc, char *argv[])
g_free (config);
config = NULL;
g_clear_error (&error);
- /* Not a hard failure */
}
}
- /* Try old nm-system-settings.conf next */
- if (!parsed) {
- config = g_strdup (NM_OLD_SYSTEM_CONF_FILE);
- if (!parse_config_file (config, &conf_plugins, &dhcp, &cfg_log_level, &cfg_log_domains, &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,
@@ -566,11 +578,9 @@ main (int argc, char *argv[])
g_free (config);
config = NULL;
g_clear_error (&error);
- /* Not a hard failure */
}
}
}
-
/* Logging setup */
if (!nm_logging_setup (log_level ? log_level : cfg_log_level,
log_domains ? log_domains : cfg_log_domains,
@@ -633,6 +643,17 @@ main (int argc, char *argv[])
g_thread_init (NULL);
dbus_g_thread_init ();
+#ifndef HAVE_DBUS_GLIB_DISABLE_LEGACY_PROP_ACCESS
+#error HAVE_DBUS_GLIB_DISABLE_LEGACY_PROP_ACCESS not defined
+#endif
+
+#if HAVE_DBUS_GLIB_DISABLE_LEGACY_PROP_ACCESS
+ /* Ensure that non-exported properties don't leak out, and that the
+ * introspection 'access' permissions are respected.
+ */
+ dbus_glib_global_set_disable_legacy_property_access ();
+#endif
+
setup_signals ();
nm_logging_start (become_daemon);
@@ -640,6 +661,9 @@ 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);
+
main_loop = g_main_loop_new (NULL, FALSE);
/* Create watch functions that monitor cards for link status. */
@@ -658,9 +682,9 @@ main (int argc, char *argv[])
goto done;
}
- named_mgr = nm_named_manager_get ();
- if (!named_mgr) {
- nm_log_err (LOGD_CORE, "failed to start the named manager.");
+ dns_mgr = nm_dns_manager_get ((const char **) dns);
+ if (!dns_mgr) {
+ nm_log_err (LOGD_CORE, "failed to start the DNS manager.");
goto done;
}
@@ -706,6 +730,9 @@ main (int argc, char *argv[])
goto done;
}
+ /* Clean leftover "# Added by NetworkManager" entries from /etc/hosts */
+ nm_policy_hosts_clean_etc_hosts ();
+
nm_manager_start (manager);
/* Bring up the loopback interface. */
@@ -729,8 +756,8 @@ done:
if (vpn_manager)
g_object_unref (vpn_manager);
- if (named_mgr)
- g_object_unref (named_mgr);
+ if (dns_mgr)
+ g_object_unref (dns_mgr);
if (dhcp_mgr)
g_object_unref (dhcp_mgr);
@@ -752,6 +779,7 @@ done:
g_free (config);
g_free (plugins);
g_free (dhcp);
+ g_strfreev (dns);
g_free (log_level);
g_free (log_domains);
g_free (cfg_log_level);
diff --git a/src/modem-manager/Makefile.am b/src/modem-manager/Makefile.am
index a0f65c1bae..22ed809fe8 100644
--- a/src/modem-manager/Makefile.am
+++ b/src/modem-manager/Makefile.am
@@ -27,7 +27,7 @@ libmodem_manager_la_LIBADD = \
$(DBUS_LIBS)
nm-serial-device-glue.h: $(top_srcdir)/introspection/nm-device-serial.xml
- dbus-binding-tool --prefix=nm_serial_device --mode=glib-server --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_serial_device --mode=glib-server --output=$@ $<
BUILT_SOURCES = \
nm-serial-device-glue.h
diff --git a/src/modem-manager/nm-modem.c b/src/modem-manager/nm-modem.c
index e07b818bbb..b3f7eaa1cb 100644
--- a/src/modem-manager/nm-modem.c
+++ b/src/modem-manager/nm-modem.c
@@ -876,6 +876,12 @@ modem_properties_changed (DBusGProxy *proxy,
priv->mm_enabled = g_value_get_boolean (value);
g_object_notify (G_OBJECT (self), NM_MODEM_ENABLED);
}
+
+ value = g_hash_table_lookup (props, "IpMethod");
+ if (value && G_VALUE_HOLDS_UINT (value)) {
+ priv->ip_method = g_value_get_uint (value);
+ g_object_notify (G_OBJECT (self), NM_MODEM_IP_METHOD);
+ }
}
/*****************************************************************************/
diff --git a/src/named-manager/Makefile.am b/src/named-manager/Makefile.am
deleted file mode 100644
index a33f7d50a9..0000000000
--- a/src/named-manager/Makefile.am
+++ /dev/null
@@ -1,21 +0,0 @@
-INCLUDES = \
- -I${top_srcdir}/src/logging \
- -I${top_srcdir}/libnm-util \
- -I${top_srcdir}/src \
- -I${top_srcdir}/include
-
-noinst_LTLIBRARIES = libnamed-manager.la
-
-libnamed_manager_la_SOURCES = nm-named-manager.h nm-named-manager.c
-
-libnamed_manager_la_CPPFLAGS = \
- $(DBUS_CFLAGS) \
- $(GLIB_CFLAGS) \
- -DNM_PKGDATADIR=\"$(pkgdatadir)\" \
- -DNM_LOCALSTATEDIR=\"$(localstatedir)\"
-
-libnamed_manager_la_LIBADD = \
- $(top_builddir)/src/logging/libnm-logging.la \
- $(DBUS_LIBS) \
- $(GLIB_LIBS)
-
diff --git a/src/named-manager/nm-named-manager.h b/src/named-manager/nm-named-manager.h
deleted file mode 100644
index 47c8e7115d..0000000000
--- a/src/named-manager/nm-named-manager.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/* -*- 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) 2004 - 2005 Colin Walters <walters@redhat.com>
- * Copyright (C) 2004 - 2008 Red Hat, Inc.
- * Copyright (C) 2005 - 2008 Novell, Inc.
- * and others
- */
-
-#ifndef __NM_NAMED_MANAGER_H__
-#define __NM_NAMED_MANAGER_H__
-
-#include "config.h"
-#include <glib-object.h>
-#include <dbus/dbus.h>
-#include "nm-ip4-config.h"
-#include "nm-ip6-config.h"
-
-typedef enum {
- NM_NAMED_MANAGER_ERROR_SYSTEM,
- NM_NAMED_MANAGER_ERROR_INVALID_NAMESERVER,
- NM_NAMED_MANAGER_ERROR_INVALID_HOST,
- NM_NAMED_MANAGER_ERROR_INVALID_ID
-} NMNamedManagerError;
-
-typedef enum {
- NM_NAMED_IP_CONFIG_TYPE_DEFAULT = 0,
- NM_NAMED_IP_CONFIG_TYPE_BEST_DEVICE,
- NM_NAMED_IP_CONFIG_TYPE_VPN
-} NMNamedIPConfigType;
-
-#define NM_NAMED_MANAGER_ERROR nm_named_manager_error_quark ()
-GQuark nm_named_manager_error_quark (void);
-
-G_BEGIN_DECLS
-
-#define NM_TYPE_NAMED_MANAGER (nm_named_manager_get_type ())
-#define NM_NAMED_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), NM_TYPE_NAMED_MANAGER, NMNamedManager))
-#define NM_NAMED_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), NM_TYPE_NAMED_MANAGER, NMNamedManagerClass))
-#define NM_IS_NAMED_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), NM_TYPE_NAMED_MANAGER))
-#define NM_IS_NAMED_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), NM_TYPE_NAMED_MANAGER))
-#define NM_NAMED_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), NM_TYPE_NAMED_MANAGER, NMNamedManagerClass))
-
-typedef struct NMNamedManagerPrivate NMNamedManagerPrivate;
-
-typedef struct {
- GObject parent;
-} NMNamedManager;
-
-typedef struct {
- GObjectClass parent;
-} NMNamedManagerClass;
-
-GType nm_named_manager_get_type (void);
-
-NMNamedManager * nm_named_manager_get (void);
-
-gboolean nm_named_manager_add_ip4_config (NMNamedManager *mgr,
- const char *iface,
- NMIP4Config *config,
- NMNamedIPConfigType cfg_type);
-
-gboolean nm_named_manager_remove_ip4_config (NMNamedManager *mgr,
- const char *iface,
- NMIP4Config *config);
-
-gboolean nm_named_manager_add_ip6_config (NMNamedManager *mgr,
- const char *iface,
- NMIP6Config *config,
- NMNamedIPConfigType cfg_type);
-
-gboolean nm_named_manager_remove_ip6_config (NMNamedManager *mgr,
- const char *iface,
- NMIP6Config *config);
-
-G_END_DECLS
-
-#endif /* __NM_NAMED_MANAGER_H__ */
diff --git a/src/nm-device-ethernet.c b/src/nm-device-ethernet.c
index be6d4e2f3c..00e8a2167a 100644
--- a/src/nm-device-ethernet.c
+++ b/src/nm-device-ethernet.c
@@ -34,6 +34,9 @@
#include <linux/if.h>
#include <errno.h>
+#define G_UDEV_API_IS_SUBJECT_TO_CHANGE
+#include <gudev/gudev.h>
+
#include <netlink/route/addr.h>
#include "nm-glib-compat.h"
@@ -75,37 +78,26 @@ typedef enum
#define NM_ETHERNET_ERROR (nm_ethernet_error_quark ())
#define NM_TYPE_ETHERNET_ERROR (nm_ethernet_error_get_type ())
-typedef struct SupplicantStateTask {
- NMDeviceEthernet *self;
- guint32 new_state;
- guint32 old_state;
- gboolean mgr_task;
- guint source_id;
-} SupplicantStateTask;
-
typedef struct Supplicant {
NMSupplicantManager *mgr;
NMSupplicantInterface *iface;
/* signal handler ids */
- guint mgr_state_id;
guint iface_error_id;
guint iface_state_id;
- guint iface_con_state_id;
/* Timeouts and idles */
guint iface_con_error_cb_id;
guint con_timeout_id;
-
- GSList *iface_tasks;
- GSList *mgr_tasks;
} Supplicant;
typedef struct {
- gboolean disposed;
+ gboolean disposed;
- struct ether_addr hw_addr;
- gboolean carrier;
+ guint8 hw_addr[ETH_ALEN]; /* Currently set MAC address */
+ guint8 perm_hw_addr[ETH_ALEN]; /* Permanent MAC address */
+ guint8 initial_hw_addr[ETH_ALEN]; /* Initial MAC address (as seen when NM starts) */
+ gboolean carrier;
NMNetlinkMonitor * monitor;
gulong link_connected_id;
@@ -115,6 +107,12 @@ typedef struct {
Supplicant supplicant;
guint supplicant_timeout_id;
+ /* s390 */
+ char * subchan1;
+ char * subchan2;
+ char * subchan3;
+ char * subchannels; /* Composite used for checking unmanaged specs */
+
/* PPPoE */
NMPPPManager *ppp_manager;
NMIP4Config *pending_ip4_config;
@@ -131,6 +129,7 @@ static guint signals[LAST_SIGNAL] = { 0 };
enum {
PROP_0,
PROP_HW_ADDRESS,
+ PROP_PERM_HW_ADDRESS,
PROP_SPEED,
PROP_CARRIER,
@@ -289,6 +288,109 @@ carrier_off (NMNetlinkMonitor *monitor,
}
}
+static void
+_update_s390_subchannels (NMDeviceEthernet *self)
+{
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
+ const char *iface;
+ GUdevClient *client;
+ GUdevDevice *dev;
+ GUdevDevice *parent = NULL;
+ const char *parent_path, *item, *driver;
+ const char *subsystems[] = { "net", NULL };
+ GDir *dir;
+ GError *error = NULL;
+
+ iface = nm_device_get_iface (NM_DEVICE (self));
+
+ client = g_udev_client_new (subsystems);
+ if (!client) {
+ nm_log_warn (LOGD_DEVICE | LOGD_HW, "(%s): failed to initialize GUdev client", iface);
+ return;
+ }
+
+ dev = g_udev_client_query_by_subsystem_and_name (client, "net", iface);
+ if (!dev) {
+ nm_log_warn (LOGD_DEVICE | LOGD_HW, "(%s): failed to find device with udev", iface);
+ goto out;
+ }
+
+ /* Try for the "ccwgroup" parent */
+ parent = g_udev_device_get_parent_with_subsystem (dev, "ccwgroup", NULL);
+ if (!parent) {
+ /* FIXME: whatever 'lcs' devices' subsystem is here... */
+ if (!parent) {
+ /* Not an s390 device */
+ goto out;
+ }
+ }
+
+ parent_path = g_udev_device_get_sysfs_path (parent);
+ dir = g_dir_open (parent_path, 0, &error);
+ if (!dir) {
+ nm_log_warn (LOGD_DEVICE | LOGD_HW, "(%s): failed to open directory '%s': %s",
+ iface, parent_path,
+ error && error->message ? error->message : "(unknown)");
+ g_clear_error (&error);
+ goto out;
+ }
+
+ /* FIXME: we probably care about ordering here to ensure that we map
+ * cdev0 -> subchan1, cdev1 -> subchan2, etc.
+ */
+ while ((item = g_dir_read_name (dir))) {
+ char buf[50];
+ char *cdev_path;
+
+ if (strncmp (item, "cdev", 4))
+ continue; /* Not a subchannel link */
+
+ cdev_path = g_strdup_printf ("%s/%s", parent_path, item);
+
+ memset (buf, 0, sizeof (buf));
+ errno = 0;
+ if (readlink (cdev_path, &buf[0], sizeof (buf) - 1) >= 0) {
+ if (!priv->subchan1)
+ priv->subchan1 = g_path_get_basename (buf);
+ else if (!priv->subchan2)
+ priv->subchan2 = g_path_get_basename (buf);
+ else if (!priv->subchan3)
+ priv->subchan3 = g_path_get_basename (buf);
+ } else {
+ nm_log_warn (LOGD_DEVICE | LOGD_HW,
+ "(%s): failed to read cdev link '%s': %s",
+ iface, cdev_path, errno);
+ }
+ g_free (cdev_path);
+ };
+
+ g_dir_close (dir);
+
+ if (priv->subchan3) {
+ priv->subchannels = g_strdup_printf ("%s,%s,%s",
+ priv->subchan1,
+ priv->subchan2,
+ priv->subchan3);
+ } else if (priv->subchan2) {
+ priv->subchannels = g_strdup_printf ("%s,%s",
+ priv->subchan1,
+ priv->subchan2);
+ } else
+ priv->subchannels = g_strdup (priv->subchan1);
+
+ driver = nm_device_get_driver (NM_DEVICE (self));
+ nm_log_info (LOGD_DEVICE | LOGD_HW,
+ "(%s): found s390 '%s' subchannels [%s]",
+ iface, driver ? driver : "(unknown driver)", priv->subchannels);
+
+out:
+ if (parent)
+ g_object_unref (parent);
+ if (dev)
+ g_object_unref (dev);
+ g_object_unref (client);
+}
+
static GObject*
constructor (GType type,
guint n_construct_params,
@@ -312,6 +414,9 @@ constructor (GType type,
nm_device_get_iface (NM_DEVICE (self)),
nm_device_get_ifindex (NM_DEVICE (self)));
+ /* s390 stuff */
+ _update_s390_subchannels (NM_DEVICE_ETHERNET (self));
+
caps = nm_device_get_capabilities (self);
if (caps & NM_DEVICE_CAP_CARRIER_DETECT) {
GError *error = NULL;
@@ -449,10 +554,13 @@ nm_device_ethernet_new (const char *udi,
void
nm_device_ethernet_get_address (NMDeviceEthernet *self, struct ether_addr *addr)
{
+ NMDeviceEthernetPrivate *priv;
+
g_return_if_fail (self != NULL);
g_return_if_fail (addr != NULL);
- memcpy (addr, &(NM_DEVICE_ETHERNET_GET_PRIVATE (self)->hw_addr), sizeof (struct ether_addr));
+ priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
+ memcpy (addr, &priv->hw_addr, sizeof (priv->hw_addr));
}
/* Returns speed in Mb/s */
@@ -496,10 +604,65 @@ out:
}
static void
+_update_hw_addr (NMDeviceEthernet *self, const guint8 *addr)
+{
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
+
+ g_return_if_fail (addr != NULL);
+
+ if (memcmp (&priv->hw_addr, addr, ETH_ALEN)) {
+ memcpy (&priv->hw_addr, addr, ETH_ALEN);
+ g_object_notify (G_OBJECT (self), NM_DEVICE_ETHERNET_HW_ADDRESS);
+ }
+}
+
+static gboolean
+_set_hw_addr (NMDeviceEthernet *self, const guint8 *addr, const char *detail)
+{
+ NMDevice *dev = NM_DEVICE (self);
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
+ const char *iface;
+ char *mac_str = NULL;
+ gboolean success = FALSE;
+
+ g_return_val_if_fail (addr != NULL, FALSE);
+
+ iface = nm_device_get_iface (dev);
+
+ mac_str = g_strdup_printf ("%02X:%02X:%02X:%02X:%02X:%02X",
+ addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
+
+ /* Do nothing if current MAC is same */
+ if (!memcmp (&priv->hw_addr, addr, ETH_ALEN)) {
+ nm_log_dbg (LOGD_DEVICE | LOGD_ETHER, "(%s): no MAC address change needed",
+ iface, detail, mac_str);
+ g_free (mac_str);
+ return TRUE;
+ }
+
+ /* 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);
+ if (success) {
+ /* MAC address succesfully changed; update the current MAC to match */
+ _update_hw_addr (self, addr);
+ nm_log_info (LOGD_DEVICE | LOGD_ETHER, "(%s): %s MAC address to %s",
+ iface, detail, mac_str);
+ } else {
+ nm_log_warn (LOGD_DEVICE | LOGD_ETHER, "(%s): failed to %s MAC address to %s",
+ iface, detail, mac_str);
+ }
+ real_hw_bring_up (dev, NULL);
+ g_free (mac_str);
+
+ return success;
+}
+
+static void
real_update_hw_address (NMDevice *dev)
{
NMDeviceEthernet *self = NM_DEVICE_ETHERNET (dev);
- NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
struct ifreq req;
int fd;
@@ -511,27 +674,91 @@ real_update_hw_address (NMDevice *dev)
memset (&req, 0, sizeof (struct ifreq));
strncpy (req.ifr_name, nm_device_get_iface (dev), IFNAMSIZ);
+
+ errno = 0;
if (ioctl (fd, SIOCGIFHWADDR, &req) < 0) {
nm_log_err (LOGD_HW | LOGD_ETHER,
- "(%s) error getting hardware address: %d",
+ "(%s) failed to read hardware address (error %d)",
nm_device_get_iface (dev), errno);
- goto out;
+ } else
+ _update_hw_addr (self, (const guint8 *) &req.ifr_hwaddr.sa_data);
+
+ close (fd);
+}
+
+static void
+real_update_permanent_hw_address (NMDevice *dev)
+{
+ NMDeviceEthernet *self = NM_DEVICE_ETHERNET (dev);
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
+ struct ifreq req;
+ struct ethtool_perm_addr *epaddr = NULL;
+ int fd, ret;
+
+ fd = socket (PF_INET, SOCK_DGRAM, 0);
+ if (fd < 0) {
+ nm_log_warn (LOGD_HW, "couldn't open control socket.");
+ return;
}
- if (memcmp (&priv->hw_addr, &req.ifr_hwaddr.sa_data, sizeof (struct ether_addr))) {
- memcpy (&priv->hw_addr, &req.ifr_hwaddr.sa_data, sizeof (struct ether_addr));
- g_object_notify (G_OBJECT (dev), NM_DEVICE_ETHERNET_HW_ADDRESS);
+ /* Get permanent MAC address */
+ memset (&req, 0, sizeof (struct ifreq));
+ strncpy (req.ifr_name, nm_device_get_iface (dev), IFNAMSIZ);
+
+ epaddr = g_malloc0 (sizeof (struct ethtool_perm_addr) + ETH_ALEN);
+ epaddr->cmd = ETHTOOL_GPERMADDR;
+ epaddr->size = ETH_ALEN;
+ req.ifr_data = (void *) epaddr;
+
+ errno = 0;
+ ret = ioctl (fd, SIOCETHTOOL, &req);
+ if ((ret < 0) || !nm_ethernet_address_is_valid ((struct ether_addr *) epaddr->data)) {
+ nm_log_err (LOGD_HW | LOGD_ETHER, "(%s): unable to read permanent MAC address (error %d)",
+ nm_device_get_iface (dev), errno);
+ /* Fall back to current address */
+ memcpy (epaddr->data, &priv->hw_addr, ETH_ALEN);
+ }
+
+ if (memcmp (&priv->perm_hw_addr, epaddr->data, ETH_ALEN)) {
+ memcpy (&priv->perm_hw_addr, epaddr->data, ETH_ALEN);
+ g_object_notify (G_OBJECT (dev), NM_DEVICE_ETHERNET_PERMANENT_HW_ADDRESS);
}
-out:
close (fd);
}
+static void
+real_update_initial_hw_address (NMDevice *dev)
+{
+ NMDeviceEthernet *self = NM_DEVICE_ETHERNET (dev);
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
+ char *mac_str = NULL;
+ guint8 *addr = priv->initial_hw_addr;
+ guint8 zero[ETH_ALEN] = {0,0,0,0,0,0};
+
+ /* This sets initial MAC address from current MAC address. It should only
+ * be called from NMDevice constructor() to really get the initial address.
+ */
+ if (!memcmp (&priv->hw_addr, &zero, ETH_ALEN))
+ real_update_hw_address (dev);
+
+ if (memcmp (&priv->initial_hw_addr, &priv->hw_addr, ETH_ALEN))
+ memcpy (&priv->initial_hw_addr, &priv->hw_addr, ETH_ALEN);
+
+ mac_str = g_strdup_printf ("%02X:%02X:%02X:%02X:%02X:%02X",
+ addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
+
+ nm_log_dbg (LOGD_DEVICE | LOGD_ETHER, "(%s): read initial MAC address %s",
+ nm_device_get_iface (dev), mac_str);
+
+ g_free (mac_str);
+}
+
static guint32
real_get_generic_capabilities (NMDevice *dev)
{
- NMDeviceEthernet * self = NM_DEVICE_ETHERNET (dev);
- guint32 caps = NM_DEVICE_CAP_NONE;
+ NMDeviceEthernet *self = NM_DEVICE_ETHERNET (dev);
+ guint32 caps = NM_DEVICE_CAP_NONE;
/* cipsec devices are also explicitly unsupported at this time */
if (strstr (nm_device_get_iface (dev), "cipsec"))
@@ -573,6 +800,39 @@ real_is_available (NMDevice *dev)
return TRUE;
}
+static gboolean
+match_subchans (NMDeviceEthernet *self, NMSettingWired *s_wired, gboolean *try_mac)
+{
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
+ const GPtrArray *subchans;
+ int i;
+
+ *try_mac = TRUE;
+
+ subchans = nm_setting_wired_get_s390_subchannels (s_wired);
+ if (!subchans)
+ return TRUE;
+
+ /* connection requires subchannels but the device has none */
+ if (!priv->subchannels)
+ return FALSE;
+
+ /* Make sure each subchannel in the connection is a subchannel of this device */
+ for (i = 0; i < subchans->len; i++) {
+ const char *candidate = g_ptr_array_index (subchans, i);
+
+ if ( (priv->subchan1 && !strcmp (priv->subchan1, candidate))
+ || (priv->subchan2 && !strcmp (priv->subchan2, candidate))
+ || (priv->subchan3 && !strcmp (priv->subchan3, candidate)))
+ continue;
+
+ return FALSE; /* a subchannel was not found */
+ }
+
+ *try_mac = FALSE;
+ return TRUE;
+}
+
static NMConnection *
real_get_best_auto_connection (NMDevice *dev,
GSList *connections,
@@ -608,9 +868,13 @@ real_get_best_auto_connection (NMDevice *dev,
if (s_wired) {
const GByteArray *mac;
+ gboolean try_mac = TRUE;
+
+ if (!match_subchans (self, s_wired, &try_mac))
+ continue;
mac = nm_setting_wired_get_mac_address (s_wired);
- if (mac && memcmp (mac->data, priv->hw_addr.ether_addr_octet, ETH_ALEN))
+ if (try_mac && mac && memcmp (mac->data, &priv->perm_hw_addr, ETH_ALEN))
continue;
}
@@ -720,30 +984,6 @@ remove_supplicant_timeouts (NMDeviceEthernet *self)
}
static void
-finish_supplicant_task (SupplicantStateTask *task, gboolean remove_source)
-{
- NMDeviceEthernet *self = task->self;
- NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
-
- /* idle/timeout handlers should pass FALSE for remove_source, since they
- * will tell glib to remove their source from the mainloop by returning
- * FALSE when they exit. When called from this NMDevice's dispose handler,
- * remove_source should be TRUE to cancel all outstanding idle/timeout
- * handlers asynchronously.
- */
- if (task->source_id && remove_source)
- g_source_remove (task->source_id);
-
- if (task->mgr_task)
- priv->supplicant.mgr_tasks = g_slist_remove (priv->supplicant.mgr_tasks, task);
- else
- priv->supplicant.iface_tasks = g_slist_remove (priv->supplicant.iface_tasks, task);
-
- memset (task, 0, sizeof (SupplicantStateTask));
- g_slice_free (SupplicantStateTask, task);
-}
-
-static void
remove_supplicant_interface_error_handler (NMDeviceEthernet *self)
{
NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
@@ -767,28 +1007,14 @@ supplicant_interface_release (NMDeviceEthernet *self)
remove_supplicant_timeouts (self);
remove_supplicant_interface_error_handler (self);
- /* Clean up all pending supplicant interface state idle tasks */
- while (priv->supplicant.iface_tasks)
- finish_supplicant_task ((SupplicantStateTask *) priv->supplicant.iface_tasks->data, TRUE);
-
- if (priv->supplicant.iface_con_state_id) {
- g_signal_handler_disconnect (priv->supplicant.iface, priv->supplicant.iface_con_state_id);
- priv->supplicant.iface_con_state_id = 0;
- }
-
if (priv->supplicant.iface_state_id > 0) {
g_signal_handler_disconnect (priv->supplicant.iface, priv->supplicant.iface_state_id);
priv->supplicant.iface_state_id = 0;
}
- if (priv->supplicant.mgr_state_id) {
- g_signal_handler_disconnect (priv->supplicant.mgr, priv->supplicant.mgr_state_id);
- priv->supplicant.mgr_state_id = 0;
- }
-
if (priv->supplicant.iface) {
nm_supplicant_interface_disconnect (priv->supplicant.iface);
- nm_supplicant_manager_release_iface (priv->supplicant.mgr, priv->supplicant.iface);
+ nm_supplicant_manager_iface_release (priv->supplicant.mgr, priv->supplicant.iface);
priv->supplicant.iface = NULL;
}
}
@@ -850,77 +1076,6 @@ time_out:
return FALSE;
}
-static gboolean
-schedule_state_handler (NMDeviceEthernet *self,
- GSourceFunc handler,
- guint32 new_state,
- guint32 old_state,
- gboolean mgr_task)
-{
- NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
- SupplicantStateTask *task;
-
- if (new_state == old_state)
- return TRUE;
-
- task = g_slice_new0 (SupplicantStateTask);
- if (!task) {
- nm_log_err (LOGD_DEVICE, "Not enough memory to process supplicant manager state change.");
- return FALSE;
- }
-
- task->self = self;
- task->new_state = new_state;
- task->old_state = old_state;
- task->mgr_task = mgr_task;
-
- task->source_id = g_idle_add (handler, task);
- if (mgr_task)
- priv->supplicant.mgr_tasks = g_slist_append (priv->supplicant.mgr_tasks, task);
- else
- priv->supplicant.iface_tasks = g_slist_append (priv->supplicant.iface_tasks, task);
- return TRUE;
-}
-
-static gboolean
-supplicant_mgr_state_cb_handler (gpointer user_data)
-{
- SupplicantStateTask *task = (SupplicantStateTask *) user_data;
- NMDevice *device = NM_DEVICE (task->self);
-
- /* If the supplicant went away, release the supplicant interface */
- if (task->new_state == NM_SUPPLICANT_MANAGER_STATE_DOWN) {
- supplicant_interface_release (task->self);
-
- if (nm_device_get_state (device) > NM_DEVICE_STATE_UNAVAILABLE) {
- nm_device_state_changed (device, NM_DEVICE_STATE_UNAVAILABLE,
- NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED);
- }
- }
-
- finish_supplicant_task (task, FALSE);
- return FALSE;
-}
-
-static void
-supplicant_mgr_state_cb (NMSupplicantInterface * iface,
- guint32 new_state,
- guint32 old_state,
- gpointer user_data)
-{
- nm_log_info (LOGD_DEVICE | LOGD_ETHER,
- "(%s): supplicant manager state: %s -> %s",
- nm_device_get_iface (NM_DEVICE (user_data)),
- nm_supplicant_manager_state_to_string (old_state),
- nm_supplicant_manager_state_to_string (new_state));
-
- schedule_state_handler (NM_DEVICE_ETHERNET (user_data),
- supplicant_mgr_state_cb_handler,
- new_state,
- old_state,
- TRUE);
-}
-
static NMSupplicantConfig *
build_supplicant_config (NMDeviceEthernet *self)
{
@@ -947,20 +1102,33 @@ build_supplicant_config (NMDeviceEthernet *self)
return config;
}
-static gboolean
-supplicant_iface_state_cb_handler (gpointer user_data)
+static void
+supplicant_iface_state_cb (NMSupplicantInterface *iface,
+ guint32 new_state,
+ guint32 old_state,
+ gpointer user_data)
{
- SupplicantStateTask *task = (SupplicantStateTask *) user_data;
- NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (task->self);
- NMDevice *device = NM_DEVICE (task->self);
+ NMDeviceEthernet *self = NM_DEVICE_ETHERNET (user_data);
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
+ NMDevice *device = NM_DEVICE (self);
+ NMSupplicantConfig *config;
+ gboolean success = FALSE;
+ NMDeviceState devstate;
- if (task->new_state == NM_SUPPLICANT_INTERFACE_STATE_READY) {
- NMSupplicantConfig *config;
- const char *iface;
- gboolean success = FALSE;
+ if (new_state == old_state)
+ return;
- iface = nm_device_get_iface (device);
- config = build_supplicant_config (task->self);
+ nm_log_info (LOGD_DEVICE | LOGD_ETHER,
+ "(%s): supplicant interface state: %s -> %s",
+ nm_device_get_iface (device),
+ nm_supplicant_interface_state_to_string (old_state),
+ nm_supplicant_interface_state_to_string (new_state));
+
+ devstate = nm_device_get_state (device);
+
+ switch (new_state) {
+ case NM_SUPPLICANT_INTERFACE_STATE_READY:
+ config = build_supplicant_config (self);
if (config) {
success = nm_supplicant_interface_set_config (priv->supplicant.iface, config);
g_object_unref (config);
@@ -969,99 +1137,54 @@ supplicant_iface_state_cb_handler (gpointer user_data)
nm_log_err (LOGD_DEVICE | LOGD_ETHER,
"Activation (%s/wired): couldn't send security "
"configuration to the supplicant.",
- iface);
+ nm_device_get_iface (device));
}
} else {
nm_log_warn (LOGD_DEVICE | LOGD_ETHER,
"Activation (%s/wired): couldn't build security configuration.",
- iface);
+ nm_device_get_iface (device));
}
- if (!success)
- nm_device_state_changed (device, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED);
- } else if (task->new_state == NM_SUPPLICANT_INTERFACE_STATE_DOWN) {
- NMDeviceState state = nm_device_get_state (device);
-
- supplicant_interface_release (task->self);
-
- if (nm_device_is_activating (device) || state == NM_DEVICE_STATE_ACTIVATED)
- nm_device_state_changed (device, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED);
- }
-
- finish_supplicant_task (task, FALSE);
- return FALSE;
-}
-
-static void
-supplicant_iface_state_cb (NMSupplicantInterface * iface,
- guint32 new_state,
- guint32 old_state,
- gpointer user_data)
-{
-
- nm_log_info (LOGD_DEVICE | LOGD_ETHER,
- "(%s): supplicant interface state: %s -> %s",
- nm_device_get_iface (NM_DEVICE (user_data)),
- nm_supplicant_interface_state_to_string (old_state),
- nm_supplicant_interface_state_to_string (new_state));
-
- schedule_state_handler (NM_DEVICE_ETHERNET (user_data),
- supplicant_iface_state_cb_handler,
- new_state,
- old_state,
- FALSE);
-}
-
-static gboolean
-supplicant_iface_connection_state_cb_handler (gpointer user_data)
-{
- SupplicantStateTask *task = (SupplicantStateTask *) user_data;
- NMDevice *dev = NM_DEVICE (task->self);
-
- if (task->new_state == NM_SUPPLICANT_INTERFACE_CON_STATE_COMPLETED) {
- remove_supplicant_interface_error_handler (task->self);
- remove_supplicant_timeouts (task->self);
+ if (!success) {
+ nm_device_state_changed (device,
+ NM_DEVICE_STATE_FAILED,
+ NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED);
+ }
+ break;
+ case NM_SUPPLICANT_INTERFACE_STATE_COMPLETED:
+ remove_supplicant_interface_error_handler (self);
+ remove_supplicant_timeouts (self);
/* If this is the initial association during device activation,
* schedule the next activation stage.
*/
- if (nm_device_get_state (dev) == NM_DEVICE_STATE_CONFIG) {
+ if (devstate == NM_DEVICE_STATE_CONFIG) {
nm_log_info (LOGD_DEVICE | LOGD_ETHER,
"Activation (%s/wired) Stage 2 of 5 (Device Configure) successful.",
- nm_device_get_iface (dev));
- nm_device_activate_schedule_stage3_ip_config_start (dev);
+ nm_device_get_iface (device));
+ nm_device_activate_schedule_stage3_ip_config_start (device);
}
- } else if (task->new_state == NM_SUPPLICANT_INTERFACE_CON_STATE_DISCONNECTED) {
- if (nm_device_get_state (dev) == NM_DEVICE_STATE_ACTIVATED || nm_device_is_activating (dev)) {
- NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (task->self);
-
+ break;
+ case NM_SUPPLICANT_INTERFACE_STATE_DISCONNECTED:
+ if ((devstate == NM_DEVICE_STATE_ACTIVATED) || nm_device_is_activating (device)) {
/* Start the link timeout so we allow some time for reauthentication */
if (!priv->supplicant_timeout_id)
- priv->supplicant_timeout_id = g_timeout_add_seconds (15, link_timeout_cb, dev);
+ priv->supplicant_timeout_id = g_timeout_add_seconds (15, link_timeout_cb, device);
}
- }
-
- finish_supplicant_task (task, FALSE);
- return FALSE;
-}
-
-static void
-supplicant_iface_connection_state_cb (NMSupplicantInterface * iface,
- guint32 new_state,
- guint32 old_state,
- gpointer user_data)
-{
- nm_log_info (LOGD_DEVICE | LOGD_ETHER,
- "(%s) supplicant connection state: %s -> %s",
- nm_device_get_iface (NM_DEVICE (user_data)),
- nm_supplicant_interface_connection_state_to_string (old_state),
- nm_supplicant_interface_connection_state_to_string (new_state));
+ break;
+ case NM_SUPPLICANT_INTERFACE_STATE_DOWN:
+ supplicant_interface_release (self);
+ remove_supplicant_timeouts (self);
- schedule_state_handler (NM_DEVICE_ETHERNET (user_data),
- supplicant_iface_connection_state_cb_handler,
- new_state,
- old_state,
- FALSE);
+ if ((devstate == NM_DEVICE_STATE_ACTIVATED) || nm_device_is_activating (device)) {
+ nm_device_state_changed (device,
+ NM_DEVICE_STATE_FAILED,
+ NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED);
+ }
+ break;
+ default:
+ break;
+ }
}
static gboolean
@@ -1179,38 +1302,26 @@ supplicant_interface_init (NMDeviceEthernet *self)
iface = nm_device_get_iface (NM_DEVICE (self));
/* Create supplicant interface */
- priv->supplicant.iface = nm_supplicant_manager_get_iface (priv->supplicant.mgr, iface, FALSE);
+ priv->supplicant.iface = nm_supplicant_manager_iface_get (priv->supplicant.mgr, iface, FALSE);
if (!priv->supplicant.iface) {
nm_log_err (LOGD_DEVICE | LOGD_ETHER,
"Couldn't initialize supplicant interface for %s.",
iface);
supplicant_interface_release (self);
-
return FALSE;
}
/* Listen for it's state signals */
priv->supplicant.iface_state_id = g_signal_connect (priv->supplicant.iface,
- "state",
- G_CALLBACK (supplicant_iface_state_cb),
- self);
+ "state",
+ G_CALLBACK (supplicant_iface_state_cb),
+ self);
/* Hook up error signal handler to capture association errors */
priv->supplicant.iface_error_id = g_signal_connect (priv->supplicant.iface,
- "connection-error",
- G_CALLBACK (supplicant_iface_connection_error_cb),
- self);
-
- priv->supplicant.iface_con_state_id = g_signal_connect (priv->supplicant.iface,
- "connection-state",
- G_CALLBACK (supplicant_iface_connection_state_cb),
- self);
-
- /* Listen for supplicant manager state changes */
- priv->supplicant.mgr_state_id = g_signal_connect (priv->supplicant.mgr,
- "state",
- G_CALLBACK (supplicant_mgr_state_cb),
- self);
+ "connection-error",
+ G_CALLBACK (supplicant_iface_connection_error_cb),
+ self);
/* Set up a timeout on the connection attempt to fail it after 25 seconds */
priv->supplicant.con_timeout_id = g_timeout_add_seconds (25, supplicant_connection_timeout_cb, self);
@@ -1219,6 +1330,31 @@ supplicant_interface_init (NMDeviceEthernet *self)
}
static NMActStageReturn
+real_act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
+{
+ NMDeviceEthernet *self = NM_DEVICE_ETHERNET (dev);
+ NMActRequest *req;
+ NMSettingWired *s_wired;
+ const GByteArray *cloned_mac;
+ NMActStageReturn ret = NM_ACT_STAGE_RETURN_SUCCESS;
+
+ g_return_val_if_fail (reason != NULL, NM_ACT_STAGE_RETURN_FAILURE);
+
+ req = nm_device_get_act_request (NM_DEVICE (self));
+ g_return_val_if_fail (req != NULL, NM_ACT_STAGE_RETURN_FAILURE);
+
+ s_wired = NM_SETTING_WIRED (device_get_setting (dev, NM_TYPE_SETTING_WIRED));
+ g_assert (s_wired);
+
+ /* Set device MAC address if the connection wants to change it */
+ cloned_mac = nm_setting_wired_get_cloned_mac_address (s_wired);
+ if (cloned_mac && (cloned_mac->len == ETH_ALEN))
+ _set_hw_addr (self, (const guint8 *) cloned_mac->data, "set");
+
+ return ret;
+}
+
+static NMActStageReturn
nm_8021x_stage2_config (NMDeviceEthernet *self, NMDeviceStateReason *reason)
{
NMConnection *connection;
@@ -1446,9 +1582,8 @@ real_act_stage4_get_ip4_config (NMDevice *device,
static void
real_deactivate_quickly (NMDevice *device)
{
- NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (device);
-
- nm_device_set_ip_iface (device, NULL);
+ NMDeviceEthernet *self = NM_DEVICE_ETHERNET (device);
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
if (priv->pending_ip4_config) {
g_object_unref (priv->pending_ip4_config);
@@ -1460,7 +1595,10 @@ real_deactivate_quickly (NMDevice *device)
priv->ppp_manager = NULL;
}
- supplicant_interface_release (NM_DEVICE_ETHERNET (device));
+ supplicant_interface_release (self);
+
+ /* Reset MAC address back to initial address */
+ _set_hw_addr (self, priv->initial_hw_addr, "reset");
}
static gboolean
@@ -1474,6 +1612,8 @@ real_check_connection_compatible (NMDevice *device,
NMSettingWired *s_wired;
const char *connection_type;
gboolean is_pppoe = FALSE;
+ const GByteArray *mac;
+ gboolean try_mac = TRUE;
s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
g_assert (s_con);
@@ -1500,10 +1640,15 @@ real_check_connection_compatible (NMDevice *device,
}
if (s_wired) {
- const GByteArray *mac;
+ if (!match_subchans (self, s_wired, &try_mac)) {
+ g_set_error (error,
+ NM_ETHERNET_ERROR, NM_ETHERNET_ERROR_CONNECTION_INCOMPATIBLE,
+ "The connection's s390 subchannels did not match this device.");
+ return FALSE;
+ }
mac = nm_setting_wired_get_mac_address (s_wired);
- if (mac && memcmp (mac->data, &(priv->hw_addr.ether_addr_octet), ETH_ALEN)) {
+ if (try_mac && mac && memcmp (mac->data, &priv->perm_hw_addr, ETH_ALEN)) {
g_set_error (error,
NM_ETHERNET_ERROR, NM_ETHERNET_ERROR_CONNECTION_INCOMPATIBLE,
"The connection's MAC address did not match this device.");
@@ -1519,37 +1664,39 @@ real_check_connection_compatible (NMDevice *device,
static gboolean
spec_match_list (NMDevice *device, const GSList *specs)
{
- struct ether_addr ether;
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (device);
char *hwaddr;
gboolean matched;
- nm_device_ethernet_get_address (NM_DEVICE_ETHERNET (device), &ether);
- hwaddr = nm_ether_ntop (&ether);
+ hwaddr = nm_ether_ntop ((struct ether_addr *) &priv->perm_hw_addr);
matched = nm_match_spec_hwaddr (specs, hwaddr);
g_free (hwaddr);
+ if (!matched && priv->subchannels)
+ matched = nm_match_spec_s390_subchannels (specs, priv->subchannels);
+
return matched;
}
static gboolean
wired_match_config (NMDevice *self, NMConnection *connection)
{
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
NMSettingWired *s_wired;
- struct ether_addr ether;
const GByteArray *s_ether;
+ gboolean try_mac = TRUE;
s_wired = (NMSettingWired *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED);
if (!s_wired)
return FALSE;
+ if (!match_subchans (NM_DEVICE_ETHERNET (self), s_wired, &try_mac))
+ return FALSE;
+
/* MAC address check */
s_ether = nm_setting_wired_get_mac_address (s_wired);
- if (s_ether) {
- nm_device_ethernet_get_address (NM_DEVICE_ETHERNET (self), &ether);
-
- if (memcmp (s_ether->data, ether.ether_addr_octet, ETH_ALEN))
- return FALSE;
- }
+ if (try_mac && s_ether && memcmp (s_ether->data, priv->perm_hw_addr, ETH_ALEN))
+ return FALSE;
return TRUE;
}
@@ -1734,12 +1881,6 @@ dispose (GObject *object)
priv->disposed = TRUE;
- /* Clean up all pending supplicant tasks */
- while (priv->supplicant.iface_tasks)
- finish_supplicant_task ((SupplicantStateTask *) priv->supplicant.iface_tasks->data, TRUE);
- while (priv->supplicant.mgr_tasks)
- finish_supplicant_task ((SupplicantStateTask *) priv->supplicant.mgr_tasks->data, TRUE);
-
if (priv->link_connected_id) {
g_signal_handler_disconnect (priv->monitor, priv->link_connected_id);
priv->link_connected_id = 0;
@@ -1756,6 +1897,11 @@ dispose (GObject *object)
priv->monitor = NULL;
}
+ g_free (priv->subchan1);
+ g_free (priv->subchan2);
+ g_free (priv->subchan3);
+ g_free (priv->subchannels);
+
G_OBJECT_CLASS (nm_device_ethernet_parent_class)->dispose (object);
}
@@ -1765,12 +1911,13 @@ get_property (GObject *object, guint prop_id,
{
NMDeviceEthernet *self = NM_DEVICE_ETHERNET (object);
NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
- struct ether_addr hw_addr;
switch (prop_id) {
case PROP_HW_ADDRESS:
- nm_device_ethernet_get_address (self, &hw_addr);
- g_value_take_string (value, nm_ether_ntop (&hw_addr));
+ g_value_take_string (value, nm_ether_ntop ((struct ether_addr *) &priv->hw_addr));
+ break;
+ case PROP_PERM_HW_ADDRESS:
+ g_value_take_string (value, nm_ether_ntop ((struct ether_addr *) &priv->perm_hw_addr));
break;
case PROP_SPEED:
g_value_set_uint (value, nm_device_ethernet_get_speed (self));
@@ -1818,11 +1965,14 @@ nm_device_ethernet_class_init (NMDeviceEthernetClass *klass)
parent_class->take_down = real_take_down;
parent_class->can_interrupt_activation = real_can_interrupt_activation;
parent_class->update_hw_address = real_update_hw_address;
+ parent_class->update_permanent_hw_address = real_update_permanent_hw_address;
+ parent_class->update_initial_hw_address = real_update_initial_hw_address;
parent_class->get_best_auto_connection = real_get_best_auto_connection;
parent_class->is_available = real_is_available;
parent_class->connection_secrets_updated = real_connection_secrets_updated;
parent_class->check_connection_compatible = real_check_connection_compatible;
+ parent_class->act_stage1_prepare = real_act_stage1_prepare;
parent_class->act_stage2_config = real_act_stage2_config;
parent_class->act_stage3_ip4_config_start = real_act_stage3_ip4_config_start;
parent_class->act_stage4_get_ip4_config = real_act_stage4_get_ip4_config;
@@ -1834,8 +1984,16 @@ nm_device_ethernet_class_init (NMDeviceEthernetClass *klass)
g_object_class_install_property
(object_class, PROP_HW_ADDRESS,
g_param_spec_string (NM_DEVICE_ETHERNET_HW_ADDRESS,
- "MAC Address",
- "Hardware MAC address",
+ "Active MAC Address",
+ "Currently set hardware MAC address",
+ NULL,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_PERM_HW_ADDRESS,
+ g_param_spec_string (NM_DEVICE_ETHERNET_PERMANENT_HW_ADDRESS,
+ "Permanent MAC Address",
+ "Permanent hardware MAC address",
NULL,
G_PARAM_READABLE));
diff --git a/src/nm-device-ethernet.h b/src/nm-device-ethernet.h
index 7bb3db0086..b9e2afd402 100644
--- a/src/nm-device-ethernet.h
+++ b/src/nm-device-ethernet.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 - 2010 Red Hat, Inc.
* Copyright (C) 2006 - 2008 Novell, Inc.
*/
@@ -37,6 +37,7 @@ G_BEGIN_DECLS
#define NM_DEVICE_ETHERNET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_ETHERNET, NMDeviceEthernetClass))
#define NM_DEVICE_ETHERNET_HW_ADDRESS "hw-address"
+#define NM_DEVICE_ETHERNET_PERMANENT_HW_ADDRESS "perm-hw-address"
#define NM_DEVICE_ETHERNET_SPEED "speed"
#define NM_DEVICE_ETHERNET_CARRIER "carrier"
diff --git a/src/nm-device-interface.c b/src/nm-device-interface.c
index 85f58d5563..eb0e009e20 100644
--- a/src/nm-device-interface.c
+++ b/src/nm-device-interface.c
@@ -19,6 +19,8 @@
* Copyright (C) 2007 - 2010 Red Hat, Inc.
*/
+#include <dbus/dbus-glib.h>
+
#include "nm-marshal.h"
#include "nm-setting-connection.h"
#include "nm-device-interface.h"
@@ -26,8 +28,8 @@
#include "nm-properties-changed-signal.h"
#include "nm-rfkill.h"
-static gboolean impl_device_disconnect (NMDeviceInterface *device,
- GError **error);
+static void impl_device_disconnect (NMDeviceInterface *device,
+ DBusGMethodInvocation *context);
#include "nm-device-interface-glue.h"
@@ -88,7 +90,15 @@ nm_device_interface_init (gpointer g_iface)
"Interface",
"Interface",
NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+ g_object_interface_install_property
+ (g_iface,
+ g_param_spec_string (NM_DEVICE_INTERFACE_IP_IFACE,
+ "IP Interface",
+ "IP Interface",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_interface_install_property
(g_iface,
@@ -170,6 +180,13 @@ nm_device_interface_init (gpointer g_iface)
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_interface_install_property
+ (g_iface, g_param_spec_boolean (NM_DEVICE_INTERFACE_FIRMWARE_MISSING,
+ "FirmwareMissing",
+ "Firmware missing",
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+ g_object_interface_install_property
(g_iface,
g_param_spec_string (NM_DEVICE_INTERFACE_TYPE_DESC,
"Type Description",
@@ -204,6 +221,13 @@ nm_device_interface_init (gpointer g_iface)
G_TYPE_NONE, 3,
G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT);
+ g_signal_new (NM_DEVICE_INTERFACE_DISCONNECT_REQUEST,
+ iface_type,
+ G_SIGNAL_RUN_FIRST,
+ 0, NULL, NULL,
+ g_cclosure_marshal_VOID__POINTER,
+ G_TYPE_NONE, 1, G_TYPE_POINTER);
+
dbus_g_object_type_install_info (iface_type,
&dbus_glib_nm_device_interface_object_info);
@@ -327,11 +351,11 @@ nm_device_interface_disconnect (NMDeviceInterface *device,
return success;
}
-static gboolean
+static void
impl_device_disconnect (NMDeviceInterface *device,
- GError **error)
+ DBusGMethodInvocation *context)
{
- return nm_device_interface_disconnect (device, error);
+ g_signal_emit_by_name (device, NM_DEVICE_INTERFACE_DISCONNECT_REQUEST, context);
}
void
@@ -374,11 +398,13 @@ nm_device_interface_connection_match_config (NMDeviceInterface *device,
}
gboolean
-nm_device_interface_can_assume_connection (NMDeviceInterface *device)
+nm_device_interface_can_assume_connections (NMDeviceInterface *device)
{
g_return_val_if_fail (NM_IS_DEVICE_INTERFACE (device), FALSE);
- return !!NM_DEVICE_INTERFACE_GET_INTERFACE (device)->connection_match_config;
+ if (NM_DEVICE_INTERFACE_GET_INTERFACE (device)->can_assume_connections)
+ return NM_DEVICE_INTERFACE_GET_INTERFACE (device)->can_assume_connections (device);
+ return FALSE;
}
void
diff --git a/src/nm-device-interface.h b/src/nm-device-interface.h
index ec27f6e820..f39e8459db 100644
--- a/src/nm-device-interface.h
+++ b/src/nm-device-interface.h
@@ -16,7 +16,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2008 Red Hat, Inc.
+ * Copyright (C) 2007 - 2010 Red Hat, Inc.
*/
#ifndef NM_DEVICE_INTERFACE_H
@@ -45,27 +45,32 @@ typedef enum
#define NM_DEVICE_INTERFACE_ERROR (nm_device_interface_error_quark ())
#define NM_TYPE_DEVICE_INTERFACE_ERROR (nm_device_interface_error_get_type ())
-#define NM_DEVICE_INTERFACE_UDI "udi"
-#define NM_DEVICE_INTERFACE_IFACE "interface"
-#define NM_DEVICE_INTERFACE_DRIVER "driver"
-#define NM_DEVICE_INTERFACE_CAPABILITIES "capabilities"
-#define NM_DEVICE_INTERFACE_IP4_ADDRESS "ip4-address"
-#define NM_DEVICE_INTERFACE_IP4_CONFIG "ip4-config"
-#define NM_DEVICE_INTERFACE_DHCP4_CONFIG "dhcp4-config"
-#define NM_DEVICE_INTERFACE_IP6_CONFIG "ip6-config"
-#define NM_DEVICE_INTERFACE_DHCP6_CONFIG "dhcp6-config"
-#define NM_DEVICE_INTERFACE_STATE "state"
-#define NM_DEVICE_INTERFACE_DEVICE_TYPE "device-type" /* ugh */
-#define NM_DEVICE_INTERFACE_MANAGED "managed"
-#define NM_DEVICE_INTERFACE_TYPE_DESC "type-desc" /* Internal only */
-#define NM_DEVICE_INTERFACE_RFKILL_TYPE "rfkill-type" /* Internal only */
-#define NM_DEVICE_INTERFACE_IFINDEX "ifindex" /* Internal only */
+#define NM_DEVICE_INTERFACE_DISCONNECT_REQUEST "disconnect-request"
+
+#define NM_DEVICE_INTERFACE_UDI "udi"
+#define NM_DEVICE_INTERFACE_IFACE "interface"
+#define NM_DEVICE_INTERFACE_IP_IFACE "ip-interface"
+#define NM_DEVICE_INTERFACE_DRIVER "driver"
+#define NM_DEVICE_INTERFACE_CAPABILITIES "capabilities"
+#define NM_DEVICE_INTERFACE_IP4_ADDRESS "ip4-address"
+#define NM_DEVICE_INTERFACE_IP4_CONFIG "ip4-config"
+#define NM_DEVICE_INTERFACE_DHCP4_CONFIG "dhcp4-config"
+#define NM_DEVICE_INTERFACE_IP6_CONFIG "ip6-config"
+#define NM_DEVICE_INTERFACE_DHCP6_CONFIG "dhcp6-config"
+#define NM_DEVICE_INTERFACE_STATE "state"
+#define NM_DEVICE_INTERFACE_DEVICE_TYPE "device-type" /* ugh */
+#define NM_DEVICE_INTERFACE_MANAGED "managed"
+#define NM_DEVICE_INTERFACE_FIRMWARE_MISSING "firmware-missing"
+#define NM_DEVICE_INTERFACE_TYPE_DESC "type-desc" /* Internal only */
+#define NM_DEVICE_INTERFACE_RFKILL_TYPE "rfkill-type" /* Internal only */
+#define NM_DEVICE_INTERFACE_IFINDEX "ifindex" /* Internal only */
typedef enum {
NM_DEVICE_INTERFACE_PROP_FIRST = 0x1000,
NM_DEVICE_INTERFACE_PROP_UDI = NM_DEVICE_INTERFACE_PROP_FIRST,
NM_DEVICE_INTERFACE_PROP_IFACE,
+ NM_DEVICE_INTERFACE_PROP_IP_IFACE,
NM_DEVICE_INTERFACE_PROP_DRIVER,
NM_DEVICE_INTERFACE_PROP_CAPABILITIES,
NM_DEVICE_INTERFACE_PROP_IP4_ADDRESS,
@@ -76,6 +81,7 @@ typedef enum {
NM_DEVICE_INTERFACE_PROP_STATE,
NM_DEVICE_INTERFACE_PROP_DEVICE_TYPE,
NM_DEVICE_INTERFACE_PROP_MANAGED,
+ NM_DEVICE_INTERFACE_PROP_FIRMWARE_MISSING,
NM_DEVICE_INTERFACE_PROP_TYPE_DESC,
NM_DEVICE_INTERFACE_PROP_RFKILL_TYPE,
NM_DEVICE_INTERFACE_PROP_IFINDEX,
@@ -103,6 +109,8 @@ struct _NMDeviceInterface {
NMConnection * (*connection_match_config) (NMDeviceInterface *device, const GSList *specs);
+ gboolean (*can_assume_connections) (NMDeviceInterface *device);
+
void (*set_enabled) (NMDeviceInterface *device, gboolean enabled);
gboolean (*get_enabled) (NMDeviceInterface *device);
@@ -139,7 +147,7 @@ gboolean nm_device_interface_spec_match_list (NMDeviceInterface *device,
NMConnection * nm_device_interface_connection_match_config (NMDeviceInterface *device,
const GSList *connections);
-gboolean nm_device_interface_can_assume_connection (NMDeviceInterface *device);
+gboolean nm_device_interface_can_assume_connections (NMDeviceInterface *device);
gboolean nm_device_interface_get_enabled (NMDeviceInterface *device);
diff --git a/src/nm-device-modem.c b/src/nm-device-modem.c
index 3ba26ddcdd..441f92cece 100644
--- a/src/nm-device-modem.c
+++ b/src/nm-device-modem.c
@@ -46,6 +46,7 @@ enum {
enum {
PPP_STATS,
+ ENABLE_CHANGED,
LAST_SIGNAL
};
static guint signals[LAST_SIGNAL] = { 0 };
@@ -158,6 +159,8 @@ modem_enabled_cb (NMModem *modem, GParamSpec *pspec, gpointer user_data)
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (self);
real_set_enabled (NM_DEVICE_INTERFACE (self), nm_modem_get_mm_enabled (priv->modem));
+
+ g_signal_emit (G_OBJECT (self), signals[ENABLE_CHANGED], 0);
}
/*****************************************************************************/
@@ -453,6 +456,15 @@ nm_device_modem_class_init (NMDeviceModemClass *mclass)
G_TYPE_NONE, 2,
G_TYPE_UINT, G_TYPE_UINT);
+ signals[ENABLE_CHANGED] =
+ g_signal_new (NM_DEVICE_MODEM_ENABLE_CHANGED,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (mclass),
nm_modem_get_serial_dbus_info ());
}
diff --git a/src/nm-device-modem.h b/src/nm-device-modem.h
index 40e89d4b7c..c6ef4d2184 100644
--- a/src/nm-device-modem.h
+++ b/src/nm-device-modem.h
@@ -36,6 +36,8 @@
#define NM_DEVICE_MODEM_MODEM "modem"
+#define NM_DEVICE_MODEM_ENABLE_CHANGED "enable-changed"
+
typedef struct {
NMDevice parent;
} NMDeviceModem;
diff --git a/src/nm-device-private.h b/src/nm-device-private.h
index 371f17f10d..f4f968a949 100644
--- a/src/nm-device-private.h
+++ b/src/nm-device-private.h
@@ -42,4 +42,8 @@ void nm_device_handle_autoip4_event (NMDevice *self,
gboolean nm_device_ip_config_should_fail (NMDevice *self, gboolean ip6);
+gboolean nm_device_get_firmware_missing (NMDevice *self);
+
+void nm_device_set_firmware_missing (NMDevice *self, gboolean missing);
+
#endif /* NM_DEVICE_PRIVATE_H */
diff --git a/src/nm-device-wifi.c b/src/nm-device-wifi.c
index 1fa2937253..38631d7552 100644
--- a/src/nm-device-wifi.c
+++ b/src/nm-device-wifi.c
@@ -30,6 +30,9 @@
#include <sys/wait.h>
#include <signal.h>
#include <unistd.h>
+#include <linux/sockios.h>
+#include <linux/ethtool.h>
+#include <sys/ioctl.h>
#include "nm-glib-compat.h"
#include "nm-device.h"
@@ -78,6 +81,7 @@ G_DEFINE_TYPE_EXTENDED (NMDeviceWifi, nm_device_wifi, NM_TYPE_DEVICE, 0,
enum {
PROP_0,
PROP_HW_ADDRESS,
+ PROP_PERM_HW_ADDRESS,
PROP_MODE,
PROP_BITRATE,
PROP_ACTIVE_ACCESS_POINT,
@@ -109,40 +113,26 @@ typedef enum {
#define NM_WIFI_ERROR (nm_wifi_error_quark ())
#define NM_TYPE_WIFI_ERROR (nm_wifi_error_get_type ())
-typedef struct SupplicantStateTask {
- NMDeviceWifi *self;
- guint32 new_state;
- guint32 old_state;
- gboolean mgr_task;
- guint source_id;
-} SupplicantStateTask;
+#define SUP_SIG_ID_LEN 5
typedef struct Supplicant {
NMSupplicantManager *mgr;
NMSupplicantInterface *iface;
- /* signal handler ids */
- guint mgr_state_id;
+ guint sig_ids[SUP_SIG_ID_LEN];
guint iface_error_id;
- guint iface_state_id;
- guint iface_scanned_ap_id;
- guint iface_scan_request_result_id;
- guint iface_scan_results_id;
- guint iface_con_state_id;
- guint iface_notify_scanning_id;
/* Timeouts and idles */
guint iface_con_error_cb_id;
guint con_timeout_id;
-
- GSList *mgr_tasks;
- GSList *iface_tasks;
} Supplicant;
struct _NMDeviceWifiPrivate {
gboolean disposed;
- struct ether_addr hw_addr;
+ guint8 hw_addr[ETH_ALEN]; /* Currently set MAC address */
+ guint8 perm_hw_addr[ETH_ALEN]; /* Permanent MAC address */
+ guint8 initial_hw_addr[ETH_ALEN]; /* Initial MAC address (as seen when NM starts) */
/* Legacy rfkill for ipw2x00; will be fixed with 2.6.33 kernel */
char * ipw_rfkill_path;
@@ -185,40 +175,23 @@ static void schedule_scan (NMDeviceWifi *self, gboolean backoff);
static void cancel_pending_scan (NMDeviceWifi *self);
-static int wireless_qual_to_percent (const struct iw_quality *qual,
- const struct iw_quality *max_qual);
-
static void cleanup_association_attempt (NMDeviceWifi * self,
gboolean disconnect);
static void remove_supplicant_timeouts (NMDeviceWifi *self);
-static void supplicant_iface_state_cb (NMSupplicantInterface * iface,
+static void supplicant_iface_state_cb (NMSupplicantInterface *iface,
guint32 new_state,
guint32 old_state,
- NMDeviceWifi *self);
-
-static void supplicant_iface_connection_state_cb (NMSupplicantInterface * iface,
- guint32 new_state,
- guint32 old_state,
- NMDeviceWifi *self);
+ gpointer user_data);
-static void supplicant_iface_scanned_ap_cb (NMSupplicantInterface * iface,
- GHashTable *properties,
- NMDeviceWifi * self);
+static void supplicant_iface_new_bss_cb (NMSupplicantInterface * iface,
+ GHashTable *properties,
+ NMDeviceWifi * self);
-static void supplicant_iface_scan_request_result_cb (NMSupplicantInterface * iface,
- gboolean success,
- NMDeviceWifi * self);
-
-static void supplicant_iface_scan_results_cb (NMSupplicantInterface * iface,
- guint32 num_bssids,
- NMDeviceWifi * self);
-
-static void supplicant_mgr_state_cb (NMSupplicantInterface * iface,
- guint32 new_state,
- guint32 old_state,
- NMDeviceWifi *self);
+static void supplicant_iface_scan_done_cb (NMSupplicantInterface * iface,
+ gboolean success,
+ NMDeviceWifi * self);
static void supplicant_iface_notify_scanning_cb (NMSupplicantInterface * iface,
GParamSpec * pspec,
@@ -319,6 +292,107 @@ ipw_rfkill_state_work (gpointer user_data)
}
/*
+ * wireless_qual_to_percent
+ *
+ * Convert an iw_quality structure from SIOCGIWSTATS into a magical signal
+ * strength percentage.
+ *
+ */
+static int
+wireless_qual_to_percent (const struct iw_quality *qual,
+ const struct iw_quality *max_qual)
+{
+ int percent = -1;
+ int level_percent = -1;
+
+ g_return_val_if_fail (qual != NULL, -1);
+ g_return_val_if_fail (max_qual != NULL, -1);
+
+ nm_log_dbg (LOGD_WIFI,
+ "QL: qual %d/%u/0x%X, level %d/%u/0x%X, noise %d/%u/0x%X, updated: 0x%X ** MAX: qual %d/%u/0x%X, level %d/%u/0x%X, noise %d/%u/0x%X, updated: 0x%X",
+ (__s8) qual->qual, qual->qual, qual->qual,
+ (__s8) qual->level, qual->level, qual->level,
+ (__s8) qual->noise, qual->noise, qual->noise,
+ qual->updated,
+ (__s8) max_qual->qual, max_qual->qual, max_qual->qual,
+ (__s8) max_qual->level, max_qual->level, max_qual->level,
+ (__s8) max_qual->noise, max_qual->noise, max_qual->noise,
+ max_qual->updated);
+
+ /* Try using the card's idea of the signal quality first as long as it tells us what the max quality is.
+ * Drivers that fill in quality values MUST treat them as percentages, ie the "Link Quality" MUST be
+ * bounded by 0 and max_qual->qual, and MUST change in a linear fashion. Within those bounds, drivers
+ * are free to use whatever they want to calculate "Link Quality".
+ */
+ if ((max_qual->qual != 0) && !(max_qual->updated & IW_QUAL_QUAL_INVALID) && !(qual->updated & IW_QUAL_QUAL_INVALID))
+ percent = (int)(100 * ((double)qual->qual / (double)max_qual->qual));
+
+ /* If the driver doesn't specify a complete and valid quality, we have two options:
+ *
+ * 1) dBm: driver must specify max_qual->level = 0, and have valid values for
+ * qual->level and (qual->noise OR max_qual->noise)
+ * 2) raw RSSI: driver must specify max_qual->level > 0, and have valid values for
+ * qual->level and max_qual->level
+ *
+ * This is the WEXT spec. If this interpretation is wrong, I'll fix it. Otherwise,
+ * If drivers don't conform to it, they are wrong and need to be fixed.
+ */
+
+ if ( (max_qual->level == 0) && !(max_qual->updated & IW_QUAL_LEVEL_INVALID) /* Valid max_qual->level == 0 */
+ && !(qual->updated & IW_QUAL_LEVEL_INVALID) /* Must have valid qual->level */
+ && ( ((max_qual->noise > 0) && !(max_qual->updated & IW_QUAL_NOISE_INVALID)) /* Must have valid max_qual->noise */
+ || ((qual->noise > 0) && !(qual->updated & IW_QUAL_NOISE_INVALID))) /* OR valid qual->noise */
+ ) {
+ /* Absolute power values (dBm) */
+
+ /* Reasonable fallbacks for dumb drivers that don't specify either level. */
+ #define FALLBACK_NOISE_FLOOR_DBM -90
+ #define FALLBACK_SIGNAL_MAX_DBM -20
+ int max_level = FALLBACK_SIGNAL_MAX_DBM;
+ int noise = FALLBACK_NOISE_FLOOR_DBM;
+ int level = qual->level - 0x100;
+
+ level = CLAMP (level, FALLBACK_NOISE_FLOOR_DBM, FALLBACK_SIGNAL_MAX_DBM);
+
+ if ((qual->noise > 0) && !(qual->updated & IW_QUAL_NOISE_INVALID))
+ noise = qual->noise - 0x100;
+ else if ((max_qual->noise > 0) && !(max_qual->updated & IW_QUAL_NOISE_INVALID))
+ noise = max_qual->noise - 0x100;
+ noise = CLAMP (noise, FALLBACK_NOISE_FLOOR_DBM, FALLBACK_SIGNAL_MAX_DBM);
+
+ /* A sort of signal-to-noise ratio calculation */
+ level_percent = (int)(100 - 70 *(
+ ((double)max_level - (double)level) /
+ ((double)max_level - (double)noise)));
+ nm_log_dbg (LOGD_WIFI, "QL1: level_percent is %d. max_level %d, level %d, noise_floor %d.",
+ level_percent, max_level, level, noise);
+ } else if ( (max_qual->level != 0)
+ && !(max_qual->updated & IW_QUAL_LEVEL_INVALID) /* Valid max_qual->level as upper bound */
+ && !(qual->updated & IW_QUAL_LEVEL_INVALID)) {
+ /* Relative power values (RSSI) */
+
+ int level = qual->level;
+
+ /* Signal level is relavtive (0 -> max_qual->level) */
+ level = CLAMP (level, 0, max_qual->level);
+ level_percent = (int)(100 * ((double)level / (double)max_qual->level));
+ nm_log_dbg (LOGD_WIFI, "QL2: level_percent is %d. max_level %d, level %d.",
+ level_percent, max_qual->level, level);
+ } else if (percent == -1) {
+ nm_log_dbg (LOGD_WIFI, "QL: Could not get quality %% value from driver. Driver is probably buggy.");
+ }
+
+ /* If the quality percent was 0 or doesn't exist, then try to use signal levels instead */
+ if ((percent < 1) && (level_percent >= 0))
+ percent = level_percent;
+
+ nm_log_dbg (LOGD_WIFI, "QL: Final quality percent is %d (%d).",
+ percent, CLAMP (percent, 0, 100));
+ return (CLAMP (percent, 0, 100));
+}
+
+
+/*
* nm_device_wifi_update_signal_strength
*
* Update the device's idea of the strength of its connection to the
@@ -619,10 +693,7 @@ constructor (GType type,
/* Connect to the supplicant manager */
priv->supplicant.mgr = nm_supplicant_manager_get ();
- priv->supplicant.mgr_state_id = g_signal_connect (priv->supplicant.mgr,
- "state",
- G_CALLBACK (supplicant_mgr_state_cb),
- self);
+ g_assert (priv->supplicant.mgr);
/* The ipw2x00 drivers don't integrate with the kernel rfkill subsystem until
* 2.6.33. Thus all our nice libgudev magic is useless. So we get to poll.
@@ -651,17 +722,13 @@ static gboolean
supplicant_interface_acquire (NMDeviceWifi *self)
{
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
- guint id, mgr_state;
+ guint id, i = 0;
g_return_val_if_fail (self != NULL, FALSE);
- g_return_val_if_fail (priv->supplicant.mgr != NULL, FALSE);
/* interface already acquired? */
g_return_val_if_fail (priv->supplicant.iface == NULL, TRUE);
- mgr_state = nm_supplicant_manager_get_state (priv->supplicant.mgr);
- g_return_val_if_fail (mgr_state == NM_SUPPLICANT_MANAGER_STATE_IDLE, FALSE);
-
- priv->supplicant.iface = nm_supplicant_manager_get_iface (priv->supplicant.mgr,
+ priv->supplicant.iface = nm_supplicant_manager_iface_get (priv->supplicant.mgr,
nm_device_get_iface (NM_DEVICE (self)),
TRUE);
if (priv->supplicant.iface == NULL) {
@@ -670,70 +737,36 @@ supplicant_interface_acquire (NMDeviceWifi *self)
return FALSE;
}
- id = g_signal_connect (priv->supplicant.iface,
- "state",
- G_CALLBACK (supplicant_iface_state_cb),
- self);
- priv->supplicant.iface_state_id = id;
-
- id = g_signal_connect (priv->supplicant.iface,
- "scanned-ap",
- G_CALLBACK (supplicant_iface_scanned_ap_cb),
- self);
- priv->supplicant.iface_scanned_ap_id = id;
+ memset (priv->supplicant.sig_ids, 0, sizeof (priv->supplicant.sig_ids));
id = g_signal_connect (priv->supplicant.iface,
- "scan-req-result",
- G_CALLBACK (supplicant_iface_scan_request_result_cb),
+ NM_SUPPLICANT_INTERFACE_STATE,
+ G_CALLBACK (supplicant_iface_state_cb),
self);
- priv->supplicant.iface_scan_request_result_id = id;
+ priv->supplicant.sig_ids[i++] = id;
id = g_signal_connect (priv->supplicant.iface,
- "scan-results",
- G_CALLBACK (supplicant_iface_scan_results_cb),
+ NM_SUPPLICANT_INTERFACE_NEW_BSS,
+ G_CALLBACK (supplicant_iface_new_bss_cb),
self);
- priv->supplicant.iface_scan_results_id = id;
+ priv->supplicant.sig_ids[i++] = id;
id = g_signal_connect (priv->supplicant.iface,
- "connection-state",
- G_CALLBACK (supplicant_iface_connection_state_cb),
+ NM_SUPPLICANT_INTERFACE_SCAN_DONE,
+ G_CALLBACK (supplicant_iface_scan_done_cb),
self);
- priv->supplicant.iface_con_state_id = id;
+ priv->supplicant.sig_ids[i++] = id;
id = g_signal_connect (priv->supplicant.iface,
"notify::scanning",
G_CALLBACK (supplicant_iface_notify_scanning_cb),
self);
- priv->supplicant.iface_notify_scanning_id = id;
+ priv->supplicant.sig_ids[i++] = id;
return TRUE;
}
static void
-finish_supplicant_task (SupplicantStateTask *task, gboolean remove_source)
-{
- NMDeviceWifi *self = task->self;
- NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
-
- /* idle/timeout handlers should pass FALSE for remove_source, since they
- * will tell glib to remove their source from the mainloop by returning
- * FALSE when they exit. When called from this NMDevice's dispose handler,
- * remove_source should be TRUE to cancel all outstanding idle/timeout
- * handlers asynchronously.
- */
- if (task->source_id && remove_source)
- g_source_remove (task->source_id);
-
- if (task->mgr_task)
- priv->supplicant.mgr_tasks = g_slist_remove (priv->supplicant.mgr_tasks, task);
- else
- priv->supplicant.iface_tasks = g_slist_remove (priv->supplicant.iface_tasks, task);
-
- memset (task, 0, sizeof (SupplicantStateTask));
- g_slice_free (SupplicantStateTask, task);
-}
-
-static void
remove_supplicant_interface_error_handler (NMDeviceWifi *self)
{
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
@@ -756,6 +789,7 @@ static void
supplicant_interface_release (NMDeviceWifi *self)
{
NMDeviceWifiPrivate *priv;
+ guint i;
g_return_if_fail (self != NULL);
@@ -770,45 +804,18 @@ supplicant_interface_release (NMDeviceWifi *self)
remove_supplicant_interface_error_handler (self);
- /* Clean up all pending supplicant interface state idle tasks */
- while (priv->supplicant.iface_tasks)
- finish_supplicant_task ((SupplicantStateTask *) priv->supplicant.iface_tasks->data, TRUE);
-
- if (priv->supplicant.iface_state_id > 0) {
- g_signal_handler_disconnect (priv->supplicant.iface, priv->supplicant.iface_state_id);
- priv->supplicant.iface_state_id = 0;
- }
-
- if (priv->supplicant.iface_scanned_ap_id > 0) {
- g_signal_handler_disconnect (priv->supplicant.iface, priv->supplicant.iface_scanned_ap_id);
- priv->supplicant.iface_scanned_ap_id = 0;
- }
-
- if (priv->supplicant.iface_scan_request_result_id > 0) {
- g_signal_handler_disconnect (priv->supplicant.iface, priv->supplicant.iface_scan_request_result_id);
- priv->supplicant.iface_scan_request_result_id = 0;
- }
-
- if (priv->supplicant.iface_scan_results_id > 0) {
- g_signal_handler_disconnect (priv->supplicant.iface, priv->supplicant.iface_scan_results_id);
- priv->supplicant.iface_scan_results_id = 0;
- }
-
- if (priv->supplicant.iface_con_state_id > 0) {
- g_signal_handler_disconnect (priv->supplicant.iface, priv->supplicant.iface_con_state_id);
- priv->supplicant.iface_con_state_id = 0;
- }
-
- if (priv->supplicant.iface_notify_scanning_id > 0) {
- g_signal_handler_disconnect (priv->supplicant.iface, priv->supplicant.iface_notify_scanning_id);
- priv->supplicant.iface_notify_scanning_id = 0;
+ /* Clear supplicant interface signal handlers */
+ for (i = 0; i < SUP_SIG_ID_LEN; i++) {
+ if (priv->supplicant.sig_ids[i] > 0)
+ g_signal_handler_disconnect (priv->supplicant.iface, priv->supplicant.sig_ids[i]);
}
+ memset (priv->supplicant.sig_ids, 0, sizeof (priv->supplicant.sig_ids));
if (priv->supplicant.iface) {
/* Tell the supplicant to disconnect from the current AP */
nm_supplicant_interface_disconnect (priv->supplicant.iface);
- nm_supplicant_manager_release_iface (priv->supplicant.mgr, priv->supplicant.iface);
+ nm_supplicant_manager_iface_release (priv->supplicant.mgr, priv->supplicant.iface);
priv->supplicant.iface = NULL;
}
}
@@ -824,6 +831,11 @@ get_active_ap (NMDeviceWifi *self,
const GByteArray *ssid;
GSList *iter;
int i = 0;
+ NMAccessPoint *match_nofreq = NULL;
+ gboolean found_a_band = FALSE;
+ gboolean found_bg_band = FALSE;
+ NM80211Mode devmode;
+ guint32 devfreq;
nm_device_wifi_get_bssid (self, &bssid);
nm_log_dbg (LOGD_WIFI, "(%s): active BSSID: %02x:%02x:%02x:%02x:%02x:%02x",
@@ -842,6 +854,9 @@ get_active_ap (NMDeviceWifi *self,
ssid ? nm_utils_escape_ssid (ssid->data, ssid->len) : "(none)",
ssid ? "'" : "");
+ devmode = nm_device_wifi_get_mode (self);
+ devfreq = nm_device_wifi_get_frequency (self);
+
/* When matching hidden APs, do a second pass that ignores the SSID check,
* because NM might not yet know the SSID of the hidden AP in the scan list
* and therefore it won't get matched the first time around.
@@ -854,8 +869,8 @@ get_active_ap (NMDeviceWifi *self,
NMAccessPoint *ap = NM_AP (iter->data);
const struct ether_addr *ap_bssid = nm_ap_get_address (ap);
const GByteArray *ap_ssid = nm_ap_get_ssid (ap);
- NM80211Mode devmode, apmode;
- guint32 devfreq, apfreq;
+ NM80211Mode apmode;
+ guint32 apfreq;
nm_log_dbg (LOGD_WIFI, " AP: %s%s%s %02x:%02x:%02x:%02x:%02x:%02x",
ap_ssid ? "'" : "",
@@ -880,7 +895,6 @@ get_active_ap (NMDeviceWifi *self,
continue;
}
- devmode = nm_device_wifi_get_mode (self);
apmode = nm_ap_get_mode (ap);
if (devmode != apmode) {
nm_log_dbg (LOGD_WIFI, " mode mismatch (device %d, ap %d)",
@@ -888,11 +902,18 @@ get_active_ap (NMDeviceWifi *self,
continue;
}
- devfreq = nm_device_wifi_get_frequency (self);
apfreq = nm_ap_get_freq (ap);
if (devfreq != apfreq) {
nm_log_dbg (LOGD_WIFI, " frequency mismatch (device %u, ap %u)",
devfreq, apfreq);
+
+ if (match_nofreq == NULL)
+ match_nofreq = ap;
+
+ if (apfreq > 4000)
+ found_a_band = TRUE;
+ else if (apfreq > 2000)
+ found_bg_band = TRUE;
continue;
}
@@ -902,6 +923,32 @@ get_active_ap (NMDeviceWifi *self,
}
}
+ /* Some proprietary drivers (wl.o) report tuned frequency (like when
+ * scanning) instead of the associated AP's frequency. This is a great
+ * example of how WEXT is underspecified. We use frequency to find the
+ * active AP in the scan list because some configurations use the same
+ * SSID/BSSID on the 2GHz and 5GHz bands simultaneously, and we need to
+ * make sure we get the right AP in the right band. This configuration
+ * is uncommon though, and the frequency check penalizes closed drivers we
+ * can't fix. Because we're not total dicks, ignore the frequency condition
+ * if the associated BSSID/SSID exists only in one band since that's most
+ * likely the AP we want.
+ */
+ if (match_nofreq && (found_a_band != found_bg_band)) {
+ const struct ether_addr *ap_bssid = nm_ap_get_address (match_nofreq);
+ const GByteArray *ap_ssid = nm_ap_get_ssid (match_nofreq);
+
+ nm_log_dbg (LOGD_WIFI, " matched %s%s%s %02x:%02x:%02x:%02x:%02x:%02x",
+ ap_ssid ? "'" : "",
+ ap_ssid ? nm_utils_escape_ssid (ap_ssid->data, ap_ssid->len) : "(none)",
+ ap_ssid ? "'" : "",
+ ap_bssid->ether_addr_octet[0], ap_bssid->ether_addr_octet[1],
+ ap_bssid->ether_addr_octet[2], ap_bssid->ether_addr_octet[3],
+ ap_bssid->ether_addr_octet[4], ap_bssid->ether_addr_octet[5]);
+
+ return match_nofreq;
+ }
+
nm_log_dbg (LOGD_WIFI, " No matching AP found.");
return NULL;
}
@@ -966,8 +1013,10 @@ periodic_update (NMDeviceWifi *self)
struct ether_addr bssid = { {0x0, 0x0, 0x0, 0x0, 0x0, 0x0} };
nm_device_wifi_get_bssid (self, &bssid);
- /* 0x02 is the first byte of IBSS BSSIDs */
- if ( (bssid.ether_addr_octet[0] == 0x02)
+ /* 0x02 means "locally administered" and should be OR-ed into
+ * the first byte of IBSS BSSIDs.
+ */
+ if ( (bssid.ether_addr_octet[0] & 0x02)
&& nm_ethernet_address_is_valid (&bssid))
nm_ap_set_address (priv->current_ap, &bssid);
}
@@ -1083,6 +1132,62 @@ real_bring_up (NMDevice *dev)
}
static void
+_update_hw_addr (NMDeviceWifi *self, const guint8 *addr)
+{
+ NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
+
+ g_return_if_fail (addr != NULL);
+
+ if (memcmp (&priv->hw_addr, addr, ETH_ALEN)) {
+ memcpy (&priv->hw_addr, addr, ETH_ALEN);
+ g_object_notify (G_OBJECT (self), NM_DEVICE_WIFI_HW_ADDRESS);
+ }
+}
+
+static gboolean
+_set_hw_addr (NMDeviceWifi *self, const guint8 *addr, const char *detail)
+{
+ NMDevice *dev = NM_DEVICE (self);
+ NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
+ const char *iface;
+ char *mac_str = NULL;
+ gboolean success = FALSE;
+
+ g_return_val_if_fail (addr != NULL, FALSE);
+
+ iface = nm_device_get_iface (dev);
+
+ mac_str = g_strdup_printf ("%02X:%02X:%02X:%02X:%02X:%02X",
+ addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
+
+ /* Do nothing if current MAC is same */
+ if (!memcmp (&priv->hw_addr, addr, ETH_ALEN)) {
+ nm_log_dbg (LOGD_DEVICE | LOGD_ETHER, "(%s): no MAC address change needed",
+ iface, detail, mac_str);
+ g_free (mac_str);
+ return TRUE;
+ }
+
+ /* 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);
+ if (success) {
+ /* MAC address succesfully changed; update the current MAC to match */
+ _update_hw_addr (self, addr);
+ nm_log_info (LOGD_DEVICE | LOGD_ETHER, "(%s): %s MAC address to %s",
+ iface, detail, mac_str);
+ } else {
+ nm_log_warn (LOGD_DEVICE | LOGD_ETHER, "(%s): failed to %s MAC address to %s",
+ iface, detail, mac_str);
+ }
+ real_hw_bring_up (dev, NULL);
+ g_free (mac_str);
+
+ return success;
+}
+
+static void
access_point_removed (NMDeviceWifi *device, NMAccessPoint *ap)
{
g_signal_emit (device, signals[ACCESS_POINT_REMOVED], 0, ap);
@@ -1146,6 +1251,9 @@ real_deactivate_quickly (NMDevice *dev)
priv->ap_list = g_slist_remove (priv->ap_list, orig_ap);
g_object_unref (orig_ap);
}
+
+ /* Reset MAC address back to initial address */
+ _set_hw_addr (self, priv->initial_hw_addr, "reset");
}
static void
@@ -1188,7 +1296,7 @@ real_check_connection_compatible (NMDevice *device,
}
mac = nm_setting_wireless_get_mac_address (s_wireless);
- if (mac && memcmp (mac->data, &(priv->hw_addr.ether_addr_octet), ETH_ALEN)) {
+ if (mac && memcmp (mac->data, &priv->perm_hw_addr, ETH_ALEN)) {
g_set_error (error,
NM_WIFI_ERROR, NM_WIFI_ERROR_CONNECTION_INCOMPATIBLE,
"The connection's MAC address did not match this device.");
@@ -1263,7 +1371,7 @@ real_get_best_auto_connection (NMDevice *dev,
continue;
mac = nm_setting_wireless_get_mac_address (s_wireless);
- if (mac && memcmp (mac->data, priv->hw_addr.ether_addr_octet, ETH_ALEN))
+ if (mac && memcmp (mac->data, &priv->perm_hw_addr, ETH_ALEN))
continue;
/* Use the connection if it's a shared connection */
@@ -1303,7 +1411,7 @@ nm_device_wifi_get_address (NMDeviceWifi *self,
g_return_if_fail (addr != NULL);
priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
- memcpy (addr, &(priv->hw_addr), sizeof (struct ether_addr));
+ memcpy (addr, &priv->hw_addr, sizeof (struct ether_addr));
}
static void
@@ -1481,107 +1589,6 @@ nm_device_wifi_get_frequency (NMDeviceWifi *self)
}
/*
- * wireless_stats_to_percent
- *
- * Convert an iw_stats structure from a scan or the card into
- * a magical signal strength percentage.
- *
- */
-static int
-wireless_qual_to_percent (const struct iw_quality *qual,
- const struct iw_quality *max_qual)
-{
- int percent = -1;
- int level_percent = -1;
-
- g_return_val_if_fail (qual != NULL, -1);
- g_return_val_if_fail (max_qual != NULL, -1);
-
- nm_log_dbg (LOGD_WIFI,
- "QL: qual %d/%u/0x%X, level %d/%u/0x%X, noise %d/%u/0x%X, updated: 0x%X ** MAX: qual %d/%u/0x%X, level %d/%u/0x%X, noise %d/%u/0x%X, updated: 0x%X",
- (__s8) qual->qual, qual->qual, qual->qual,
- (__s8) qual->level, qual->level, qual->level,
- (__s8) qual->noise, qual->noise, qual->noise,
- qual->updated,
- (__s8) max_qual->qual, max_qual->qual, max_qual->qual,
- (__s8) max_qual->level, max_qual->level, max_qual->level,
- (__s8) max_qual->noise, max_qual->noise, max_qual->noise,
- max_qual->updated);
-
- /* Try using the card's idea of the signal quality first as long as it tells us what the max quality is.
- * Drivers that fill in quality values MUST treat them as percentages, ie the "Link Quality" MUST be
- * bounded by 0 and max_qual->qual, and MUST change in a linear fashion. Within those bounds, drivers
- * are free to use whatever they want to calculate "Link Quality".
- */
- if ((max_qual->qual != 0) && !(max_qual->updated & IW_QUAL_QUAL_INVALID) && !(qual->updated & IW_QUAL_QUAL_INVALID))
- percent = (int)(100 * ((double)qual->qual / (double)max_qual->qual));
-
- /* If the driver doesn't specify a complete and valid quality, we have two options:
- *
- * 1) dBm: driver must specify max_qual->level = 0, and have valid values for
- * qual->level and (qual->noise OR max_qual->noise)
- * 2) raw RSSI: driver must specify max_qual->level > 0, and have valid values for
- * qual->level and max_qual->level
- *
- * This is the WEXT spec. If this interpretation is wrong, I'll fix it. Otherwise,
- * If drivers don't conform to it, they are wrong and need to be fixed.
- */
-
- if ( (max_qual->level == 0) && !(max_qual->updated & IW_QUAL_LEVEL_INVALID) /* Valid max_qual->level == 0 */
- && !(qual->updated & IW_QUAL_LEVEL_INVALID) /* Must have valid qual->level */
- && ( ((max_qual->noise > 0) && !(max_qual->updated & IW_QUAL_NOISE_INVALID)) /* Must have valid max_qual->noise */
- || ((qual->noise > 0) && !(qual->updated & IW_QUAL_NOISE_INVALID))) /* OR valid qual->noise */
- ) {
- /* Absolute power values (dBm) */
-
- /* Reasonable fallbacks for dumb drivers that don't specify either level. */
- #define FALLBACK_NOISE_FLOOR_DBM -90
- #define FALLBACK_SIGNAL_MAX_DBM -20
- int max_level = FALLBACK_SIGNAL_MAX_DBM;
- int noise = FALLBACK_NOISE_FLOOR_DBM;
- int level = qual->level - 0x100;
-
- level = CLAMP (level, FALLBACK_NOISE_FLOOR_DBM, FALLBACK_SIGNAL_MAX_DBM);
-
- if ((qual->noise > 0) && !(qual->updated & IW_QUAL_NOISE_INVALID))
- noise = qual->noise - 0x100;
- else if ((max_qual->noise > 0) && !(max_qual->updated & IW_QUAL_NOISE_INVALID))
- noise = max_qual->noise - 0x100;
- noise = CLAMP (noise, FALLBACK_NOISE_FLOOR_DBM, FALLBACK_SIGNAL_MAX_DBM);
-
- /* A sort of signal-to-noise ratio calculation */
- level_percent = (int)(100 - 70 *(
- ((double)max_level - (double)level) /
- ((double)max_level - (double)noise)));
- nm_log_dbg (LOGD_WIFI, "QL1: level_percent is %d. max_level %d, level %d, noise_floor %d.",
- level_percent, max_level, level, noise);
- } else if ( (max_qual->level != 0)
- && !(max_qual->updated & IW_QUAL_LEVEL_INVALID) /* Valid max_qual->level as upper bound */
- && !(qual->updated & IW_QUAL_LEVEL_INVALID)) {
- /* Relative power values (RSSI) */
-
- int level = qual->level;
-
- /* Signal level is relavtive (0 -> max_qual->level) */
- level = CLAMP (level, 0, max_qual->level);
- level_percent = (int)(100 * ((double)level / (double)max_qual->level));
- nm_log_dbg (LOGD_WIFI, "QL2: level_percent is %d. max_level %d, level %d.",
- level_percent, max_qual->level, level);
- } else if (percent == -1) {
- nm_log_dbg (LOGD_WIFI, "QL: Could not get quality %% value from driver. Driver is probably buggy.");
- }
-
- /* If the quality percent was 0 or doesn't exist, then try to use signal levels instead */
- if ((percent < 1) && (level_percent >= 0))
- percent = level_percent;
-
- nm_log_dbg (LOGD_WIFI, "QL: Final quality percent is %d (%d).",
- percent, CLAMP (percent, 0, 100));
- return (CLAMP (percent, 0, 100));
-}
-
-
-/*
* nm_device_wifi_get_ssid
*
* If a device is wireless, return the ssid that it is attempting
@@ -1730,21 +1737,23 @@ scanning_allowed (NMDeviceWifi *self)
}
/* Don't scan if the supplicant is busy */
- sup_state = nm_supplicant_interface_get_connection_state (priv->supplicant.iface);
- if ( sup_state == NM_SUPPLICANT_INTERFACE_CON_STATE_ASSOCIATING
- || sup_state == NM_SUPPLICANT_INTERFACE_CON_STATE_ASSOCIATED
- || sup_state == NM_SUPPLICANT_INTERFACE_CON_STATE_4WAY_HANDSHAKE
- || sup_state == NM_SUPPLICANT_INTERFACE_CON_STATE_GROUP_HANDSHAKE
+ sup_state = nm_supplicant_interface_get_state (priv->supplicant.iface);
+ if ( sup_state == NM_SUPPLICANT_INTERFACE_STATE_ASSOCIATING
+ || sup_state == NM_SUPPLICANT_INTERFACE_STATE_ASSOCIATED
+ || sup_state == NM_SUPPLICANT_INTERFACE_STATE_4WAY_HANDSHAKE
+ || sup_state == NM_SUPPLICANT_INTERFACE_STATE_GROUP_HANDSHAKE
|| nm_supplicant_interface_get_scanning (priv->supplicant.iface))
return FALSE;
- /* Don't scan when a shared connection is active; it makes drivers mad */
req = nm_device_get_act_request (NM_DEVICE (self));
if (req) {
NMConnection *connection;
NMSettingIP4Config *s_ip4;
+ NMSettingWireless *s_wifi;
const char *ip4_method = NULL;
+ const GByteArray *bssid;
+ /* Don't scan when a shared connection is active; it makes drivers mad */
connection = nm_act_request_get_connection (req);
s_ip4 = (NMSettingIP4Config *) nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG);
if (s_ip4)
@@ -1752,6 +1761,16 @@ scanning_allowed (NMDeviceWifi *self)
if (s_ip4 && !strcmp (ip4_method, NM_SETTING_IP4_CONFIG_METHOD_SHARED))
return FALSE;
+
+ /* Don't scan when the connection is locked to a specifc AP, since
+ * intra-ESS roaming (which requires periodic scanning) isn't being
+ * used due to the specific AP lock. (bgo #513820)
+ */
+ s_wifi = (NMSettingWireless *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS);
+ g_assert (s_wifi);
+ bssid = nm_setting_wireless_get_bssid (s_wifi);
+ if (bssid && bssid->len == ETH_ALEN)
+ return FALSE;
}
return TRUE;
@@ -1878,28 +1897,19 @@ cancel_pending_scan (NMDeviceWifi *self)
}
}
-
static void
-supplicant_iface_scan_request_result_cb (NMSupplicantInterface *iface,
- gboolean success,
- NMDeviceWifi *self)
+supplicant_iface_scan_done_cb (NMSupplicantInterface *iface,
+ gboolean success,
+ NMDeviceWifi *self)
{
- nm_log_dbg (LOGD_WIFI_SCAN, "(%s): scan request %s",
+ nm_log_dbg (LOGD_WIFI_SCAN, "(%s): scan %s",
nm_device_get_iface (NM_DEVICE (self)),
success ? "successful" : "failed");
if (check_scanning_allowed (self))
schedule_scan (self, TRUE);
-}
-static void
-supplicant_iface_scan_results_cb (NMSupplicantInterface *iface,
- guint32 num_results,
- NMDeviceWifi *self)
-{
- nm_log_dbg (LOGD_WIFI_SCAN, "(%s): scan results available (%d APs found)",
- nm_device_get_iface (NM_DEVICE (self)),
- num_results);
+#if 0
if (num_results == 0) {
/* ensure that old APs get culled, which otherwise only
* happens when there are actual scan results to process.
@@ -1907,6 +1917,7 @@ supplicant_iface_scan_results_cb (NMSupplicantInterface *iface,
cull_scan_list (self);
nm_device_wifi_ap_list_print (self);
}
+#endif
}
static gboolean
@@ -2126,48 +2137,10 @@ cull_scan_list (NMDeviceWifi *self)
removed, total);
}
-#define SET_QUALITY_MEMBER(qual_item, lc_member, uc_member) \
- if (lc_member != -1) { \
- qual_item.lc_member = lc_member; \
- qual_item.updated |= IW_QUAL_##uc_member##_UPDATED; \
- } else { \
- qual_item.updated |= IW_QUAL_##uc_member##_INVALID; \
- }
-
static void
-set_ap_strength_from_properties (NMDeviceWifi *self,
- NMAccessPoint *ap,
- GHashTable *properties)
-{
- NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
- int qual, level, noise;
- struct iw_quality quality;
- GValue *value;
- gint8 strength;
-
- value = (GValue *) g_hash_table_lookup (properties, "quality");
- qual = value ? g_value_get_int (value) : -1;
-
- value = (GValue *) g_hash_table_lookup (properties, "level");
- level = value ? g_value_get_int (value) : -1;
-
- value = (GValue *) g_hash_table_lookup (properties, "noise");
- noise = value ? g_value_get_int (value) : -1;
-
- /* Calculate and set the AP's signal quality */
- memset (&quality, 0, sizeof (struct iw_quality));
- SET_QUALITY_MEMBER (quality, qual, QUAL);
- SET_QUALITY_MEMBER (quality, level, LEVEL);
- SET_QUALITY_MEMBER (quality, noise, NOISE);
-
- strength = wireless_qual_to_percent (&quality, &priv->max_qual);
- nm_ap_set_strength (ap, strength);
-}
-
-static void
-supplicant_iface_scanned_ap_cb (NMSupplicantInterface *iface,
- GHashTable *properties,
- NMDeviceWifi *self)
+supplicant_iface_new_bss_cb (NMSupplicantInterface *iface,
+ GHashTable *properties,
+ NMDeviceWifi *self)
{
NMDeviceState state;
NMAccessPoint *ap;
@@ -2183,8 +2156,6 @@ supplicant_iface_scanned_ap_cb (NMSupplicantInterface *iface,
ap = nm_ap_new_from_properties (properties);
if (ap) {
- set_ap_strength_from_properties (self, ap, properties);
-
nm_ap_print_self (ap, "AP: ");
/* Add the AP to the device's AP list */
@@ -2322,247 +2293,97 @@ time_out:
return FALSE;
}
-static gboolean
-schedule_state_handler (NMDeviceWifi *self,
- GSourceFunc handler,
- guint32 new_state,
- guint32 old_state,
- gboolean mgr_task)
+static void
+supplicant_iface_state_cb (NMSupplicantInterface *iface,
+ guint32 new_state,
+ guint32 old_state,
+ gpointer user_data)
{
- NMDeviceWifiPrivate *priv;
- SupplicantStateTask *task;
-
- g_return_val_if_fail (self != NULL, FALSE);
- g_return_val_if_fail (handler != NULL, FALSE);
+ NMDeviceWifi *self = NM_DEVICE_WIFI (user_data);
+ NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
+ NMDevice *device = NM_DEVICE (self);
+ NMDeviceState devstate;
+ gboolean scanning;
if (new_state == old_state)
- return TRUE;
-
- priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
-
- task = g_slice_new0 (SupplicantStateTask);
- if (!task) {
- nm_log_err (LOGD_WIFI, "Not enough memory to process supplicant manager state change.");
- return FALSE;
- }
-
- task->self = self;
- task->new_state = new_state;
- task->old_state = old_state;
- task->mgr_task = mgr_task;
-
- task->source_id = g_idle_add (handler, task);
- if (mgr_task)
- priv->supplicant.mgr_tasks = g_slist_append (priv->supplicant.mgr_tasks, task);
- else
- priv->supplicant.iface_tasks = g_slist_append (priv->supplicant.iface_tasks, task);
-
- return TRUE;
-}
-
-static gboolean
-supplicant_iface_state_cb_handler (gpointer user_data)
-{
- SupplicantStateTask *task = (SupplicantStateTask *) user_data;
- NMDeviceWifi *self;
- NMDeviceWifiPrivate *priv;
-
- g_return_val_if_fail (task != NULL, FALSE);
+ return;
- self = task->self;
- priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
+ nm_log_info (LOGD_DEVICE | LOGD_WIFI,
+ "(%s): supplicant interface state: %s -> %s",
+ nm_device_get_iface (device),
+ nm_supplicant_interface_state_to_string (old_state),
+ nm_supplicant_interface_state_to_string (new_state));
- nm_log_info (LOGD_WIFI, "(%s): supplicant interface state: %s -> %s",
- nm_device_get_iface (NM_DEVICE (self)),
- nm_supplicant_interface_state_to_string (task->old_state),
- nm_supplicant_interface_state_to_string (task->new_state));
+ devstate = nm_device_get_state (device);
+ scanning = nm_supplicant_interface_get_scanning (iface);
- if (task->new_state == NM_SUPPLICANT_INTERFACE_STATE_READY) {
+ switch (new_state) {
+ case NM_SUPPLICANT_INTERFACE_STATE_READY:
priv->scan_interval = SCAN_INTERVAL_MIN;
/* If the interface can now be activated because the supplicant is now
* available, transition to DISCONNECTED.
*/
- if ( (nm_device_get_state (NM_DEVICE (self)) == NM_DEVICE_STATE_UNAVAILABLE)
- && nm_device_is_available (NM_DEVICE (self))) {
- nm_device_state_changed (NM_DEVICE (self), NM_DEVICE_STATE_DISCONNECTED,
+ if ((devstate == NM_DEVICE_STATE_UNAVAILABLE) && nm_device_is_available (device)) {
+ nm_device_state_changed (device,
+ NM_DEVICE_STATE_DISCONNECTED,
NM_DEVICE_STATE_REASON_SUPPLICANT_AVAILABLE);
}
- nm_log_dbg (LOGD_WIFI_SCAN, "(%s): supplicant ready, requesting initial scan",
- nm_device_get_iface (NM_DEVICE (self)));
+ nm_log_dbg (LOGD_WIFI_SCAN,
+ "(%s): supplicant ready, requesting initial scan",
+ nm_device_get_iface (device));
/* Request a scan to get latest results */
cancel_pending_scan (self);
request_wireless_scan (self);
- } else if (task->new_state == NM_SUPPLICANT_INTERFACE_STATE_DOWN) {
- cleanup_association_attempt (self, FALSE);
- supplicant_interface_release (self);
- nm_device_state_changed (NM_DEVICE (self), NM_DEVICE_STATE_UNAVAILABLE,
- NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED);
- }
-
- finish_supplicant_task (task, FALSE);
- return FALSE;
-}
-
-
-static void
-supplicant_iface_state_cb (NMSupplicantInterface * iface,
- guint32 new_state,
- guint32 old_state,
- NMDeviceWifi *self)
-{
- g_return_if_fail (self != NULL);
-
- schedule_state_handler (self,
- supplicant_iface_state_cb_handler,
- new_state,
- old_state,
- FALSE);
-}
-
-
-static gboolean
-supplicant_iface_connection_state_cb_handler (gpointer user_data)
-{
- SupplicantStateTask *task = (SupplicantStateTask *) user_data;
- NMDeviceWifi *self = task->self;
- NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
- NMDevice *dev = NM_DEVICE (self);
- gboolean scanning;
-
- if (!nm_device_get_act_request (dev)) {
- /* The device is not activating or already activated; do nothing. */
- goto out;
- }
-
- nm_log_info (LOGD_WIFI, "(%s): supplicant connection state: %s -> %s",
- nm_device_get_iface (dev),
- nm_supplicant_interface_connection_state_to_string (task->old_state),
- nm_supplicant_interface_connection_state_to_string (task->new_state));
-
- scanning = nm_supplicant_interface_get_scanning (priv->supplicant.iface);
-
- if (task->new_state == NM_SUPPLICANT_INTERFACE_CON_STATE_COMPLETED) {
+ break;
+ case NM_SUPPLICANT_INTERFACE_STATE_COMPLETED:
remove_supplicant_interface_error_handler (self);
remove_supplicant_timeouts (self);
/* If this is the initial association during device activation,
* schedule the next activation stage.
*/
- if (nm_device_get_state (dev) == NM_DEVICE_STATE_CONFIG) {
+ if (devstate == NM_DEVICE_STATE_CONFIG) {
NMAccessPoint *ap = nm_device_wifi_get_activation_ap (self);
- const GByteArray * ssid = nm_ap_get_ssid (ap);
+ const GByteArray *ssid = nm_ap_get_ssid (ap);
nm_log_info (LOGD_DEVICE | LOGD_WIFI,
"Activation (%s/wireless) Stage 2 of 5 (Device Configure) "
"successful. Connected to wireless network '%s'.",
- nm_device_get_iface (dev),
+ nm_device_get_iface (device),
ssid ? nm_utils_escape_ssid (ssid->data, ssid->len) : "(none)");
- nm_device_activate_schedule_stage3_ip_config_start (dev);
+ nm_device_activate_schedule_stage3_ip_config_start (device);
}
- } else if (task->new_state == NM_SUPPLICANT_INTERFACE_CON_STATE_DISCONNECTED) {
- if (nm_device_get_state (dev) == NM_DEVICE_STATE_ACTIVATED || nm_device_is_activating (dev)) {
+ break;
+ case NM_SUPPLICANT_INTERFACE_STATE_DISCONNECTED:
+ if ((devstate == NM_DEVICE_STATE_ACTIVATED) || nm_device_is_activating (device)) {
/* Start the link timeout so we allow some time for reauthentication,
* use a longer timeout if we are scanning since some cards take a
* while to scan.
*/
if (!priv->link_timeout_id) {
priv->link_timeout_id = g_timeout_add_seconds (scanning ? 30 : 15,
- link_timeout_cb, self);
- }
- }
- }
-
-out:
- finish_supplicant_task (task, FALSE);
- return FALSE;
-}
-
-
-static void
-supplicant_iface_connection_state_cb (NMSupplicantInterface * iface,
- guint32 new_state,
- guint32 old_state,
- NMDeviceWifi *self)
-{
- g_return_if_fail (self != NULL);
-
- schedule_state_handler (self,
- supplicant_iface_connection_state_cb_handler,
- new_state,
- old_state,
- FALSE);
-}
-
-
-static gboolean
-supplicant_mgr_state_cb_handler (gpointer user_data)
-{
- SupplicantStateTask *task = (SupplicantStateTask *) user_data;
- NMDeviceWifi *self;
- NMDeviceWifiPrivate *priv;
- NMDevice *dev;
- NMDeviceState dev_state;
-
- g_return_val_if_fail (task != NULL, FALSE);
-
- self = task->self;
- priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
- dev = NM_DEVICE (self);
-
- nm_log_info (LOGD_WIFI, "(%s): supplicant manager state: %s -> %s",
- nm_device_get_iface (NM_DEVICE (self)),
- nm_supplicant_manager_state_to_string (task->old_state),
- nm_supplicant_manager_state_to_string (task->new_state));
-
- /* If the supplicant went away, release the supplicant interface */
- if (task->new_state == NM_SUPPLICANT_MANAGER_STATE_DOWN) {
- if (priv->supplicant.iface) {
- cleanup_association_attempt (self, FALSE);
- supplicant_interface_release (self);
- }
-
- if (nm_device_get_state (dev) > NM_DEVICE_STATE_UNAVAILABLE) {
- nm_device_state_changed (dev, NM_DEVICE_STATE_UNAVAILABLE,
- NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED);
- }
- } else if (task->new_state == NM_SUPPLICANT_MANAGER_STATE_IDLE) {
- dev_state = nm_device_get_state (dev);
- if ( priv->enabled
- && !priv->supplicant.iface
- && (dev_state >= NM_DEVICE_STATE_UNAVAILABLE)) {
- /* request a supplicant interface from the supplicant manager */
- supplicant_interface_acquire (self);
-
- /* if wireless is enabled and we have a supplicant interface,
- * we can transition to the DISCONNECTED state.
- */
- if (priv->supplicant.iface) {
- nm_device_state_changed (dev, NM_DEVICE_STATE_DISCONNECTED,
- NM_DEVICE_STATE_REASON_NONE);
+ link_timeout_cb, self);
}
}
+ break;
+ case NM_SUPPLICANT_INTERFACE_STATE_DOWN:
+ cleanup_association_attempt (self, FALSE);
+ supplicant_interface_release (self);
+ nm_device_state_changed (device,
+ NM_DEVICE_STATE_UNAVAILABLE,
+ NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED);
+ break;
+ default:
+ break;
}
- finish_supplicant_task (task, FALSE);
- return FALSE;
-}
-
-static void
-supplicant_mgr_state_cb (NMSupplicantInterface * iface,
- guint32 new_state,
- guint32 old_state,
- NMDeviceWifi *self)
-{
- g_return_if_fail (self != NULL);
-
- schedule_state_handler (self,
- supplicant_mgr_state_cb_handler,
- new_state,
- old_state,
- TRUE);
+ /* Signal scanning state changes */
+ if ( new_state == NM_SUPPLICANT_INTERFACE_STATE_SCANNING
+ || old_state == NM_SUPPLICANT_INTERFACE_STATE_SCANNING)
+ g_object_notify (G_OBJECT (self), "scanning");
}
struct iface_con_error_cb_data {
@@ -2920,7 +2741,6 @@ static void
real_update_hw_address (NMDevice *dev)
{
NMDeviceWifi *self = NM_DEVICE_WIFI (dev);
- NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
struct ifreq req;
int fd;
@@ -2932,21 +2752,84 @@ real_update_hw_address (NMDevice *dev)
memset (&req, 0, sizeof (struct ifreq));
strncpy (req.ifr_name, nm_device_get_iface (dev), IFNAMSIZ);
+ errno = 0;
if (ioctl (fd, SIOCGIFHWADDR, &req) < 0) {
- nm_log_err (LOGD_HW | LOGD_WIFI, "(%s) error getting hardware address: %d",
+ nm_log_err (LOGD_HW | LOGD_WIFI, "(%s): unable to read hardware address (error %d)",
nm_device_get_iface (dev), errno);
- goto out;
+ } else
+ _update_hw_addr (self, (const guint8 *) &req.ifr_hwaddr.sa_data);
+
+ close (fd);
+}
+
+static void
+real_update_permanent_hw_address (NMDevice *dev)
+{
+ NMDeviceWifi *self = NM_DEVICE_WIFI (dev);
+ NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
+ struct ifreq req;
+ struct ethtool_perm_addr *epaddr = NULL;
+ int fd, ret;
+
+ fd = socket (PF_INET, SOCK_DGRAM, 0);
+ if (fd < 0) {
+ nm_log_err (LOGD_HW, "could not open control socket.");
+ return;
}
- if (memcmp (&priv->hw_addr, &req.ifr_hwaddr.sa_data, sizeof (struct ether_addr))) {
- memcpy (&priv->hw_addr, &req.ifr_hwaddr.sa_data, sizeof (struct ether_addr));
- g_object_notify (G_OBJECT (dev), NM_DEVICE_WIFI_HW_ADDRESS);
+ /* Get permanent MAC address */
+ memset (&req, 0, sizeof (struct ifreq));
+ strncpy (req.ifr_name, nm_device_get_iface (dev), IFNAMSIZ);
+
+ epaddr = g_malloc0 (sizeof (struct ethtool_perm_addr) + ETH_ALEN);
+ epaddr->cmd = ETHTOOL_GPERMADDR;
+ epaddr->size = ETH_ALEN;
+ req.ifr_data = (void *) epaddr;
+
+ errno = 0;
+ ret = ioctl (fd, SIOCETHTOOL, &req);
+ if ((ret < 0) || !nm_ethernet_address_is_valid ((struct ether_addr *) epaddr->data)) {
+ nm_log_err (LOGD_HW | LOGD_ETHER, "(%s): unable to read permanent MAC address (error %d)",
+ nm_device_get_iface (dev), errno);
+ /* Fall back to current address */
+ memcpy (epaddr->data, &priv->hw_addr, ETH_ALEN);
}
-out:
+ if (memcmp (&priv->perm_hw_addr, epaddr->data, ETH_ALEN)) {
+ memcpy (&priv->perm_hw_addr, epaddr->data, ETH_ALEN);
+ g_object_notify (G_OBJECT (dev), NM_DEVICE_WIFI_PERMANENT_HW_ADDRESS);
+ }
+
+ g_free (epaddr);
close (fd);
}
+static void
+real_update_initial_hw_address (NMDevice *dev)
+{
+ NMDeviceWifi *self = NM_DEVICE_WIFI (dev);
+ NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
+ char *mac_str = NULL;
+ guint8 *addr = priv->initial_hw_addr;
+ guint8 zero[ETH_ALEN] = {0,0,0,0,0,0};
+
+ /* This sets initial MAC address from current MAC address. It should only
+ * be called from NMDevice constructor() to really get the initial address.
+ */
+ if (!memcmp (&priv->hw_addr, &zero, ETH_ALEN))
+ real_update_hw_address (dev);
+
+ if (memcmp (&priv->initial_hw_addr, &priv->hw_addr, ETH_ALEN))
+ memcpy (&priv->initial_hw_addr, &priv->hw_addr, ETH_ALEN);
+
+ mac_str = g_strdup_printf ("%02X:%02X:%02X:%02X:%02X:%02X",
+ addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
+
+ nm_log_dbg (LOGD_DEVICE | LOGD_ETHER, "(%s): read initial MAC address %s",
+ nm_device_get_iface (dev), mac_str);
+
+ g_free (mac_str);
+}
static NMActStageReturn
real_act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
@@ -2956,8 +2839,24 @@ real_act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
NMAccessPoint *ap = NULL;
NMActRequest *req;
NMConnection *connection;
+ NMSettingWireless *s_wireless;
+ const GByteArray *cloned_mac;
GSList *iter;
+ req = nm_device_get_act_request (NM_DEVICE (self));
+ g_return_val_if_fail (req != NULL, NM_ACT_STAGE_RETURN_FAILURE);
+
+ connection = nm_act_request_get_connection (req);
+ g_return_val_if_fail (connection != NULL, NM_ACT_STAGE_RETURN_FAILURE);
+
+ /* Set spoof MAC to the interface */
+ s_wireless = (NMSettingWireless *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS);
+ g_assert (s_wireless);
+
+ cloned_mac = nm_setting_wireless_get_cloned_mac_address (s_wireless);
+ if (cloned_mac && (cloned_mac->len == ETH_ALEN))
+ _set_hw_addr (self, (const guint8 *) cloned_mac->data, "set");
+
/* If the user is trying to connect to an AP that NM doesn't yet know about
* (hidden network or something), create an fake AP from the security
* settings in the connection to use until the AP is recognized from the
@@ -2967,12 +2866,6 @@ real_act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
if (ap)
goto done;
- req = nm_device_get_act_request (NM_DEVICE (self));
- g_return_val_if_fail (req != NULL, NM_ACT_STAGE_RETURN_FAILURE);
-
- connection = nm_act_request_get_connection (req);
- g_return_val_if_fail (connection != NULL, NM_ACT_STAGE_RETURN_FAILURE);
-
/* Find a compatible AP in the scan list */
for (iter = priv->ap_list; iter; iter = g_slist_next (iter)) {
NMAccessPoint *candidate = NM_AP (iter->data);
@@ -3121,7 +3014,7 @@ real_act_stage2_config (NMDevice *dev, NMDeviceStateReason *reason)
/* Hook up error signal handler to capture association errors */
id = g_signal_connect (priv->supplicant.iface,
- "connection-error",
+ NM_SUPPLICANT_INTERFACE_CONNECTION_ERROR,
G_CALLBACK (supplicant_iface_connection_error_cb),
self);
priv->supplicant.iface_error_id = id;
@@ -3424,12 +3317,11 @@ real_get_type_capabilities (NMDevice *dev)
static gboolean
spec_match_list (NMDevice *device, const GSList *specs)
{
- struct ether_addr ether;
+ NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (device);
char *hwaddr;
gboolean matched;
- nm_device_wifi_get_address (NM_DEVICE_WIFI (device), &ether);
- hwaddr = nm_ether_ntop (&ether);
+ hwaddr = nm_ether_ntop ((struct ether_addr *) &priv->perm_hw_addr);
matched = nm_match_spec_hwaddr (specs, hwaddr);
g_free (hwaddr);
@@ -3477,7 +3369,7 @@ device_state_changed (NMDevice *device,
* acquire a supplicant interface and transition to DISCONNECTED because
* the device is now ready to use.
*/
- if (priv->enabled) {
+ if (priv->enabled && (nm_device_get_firmware_missing (device) == FALSE)) {
gboolean success;
struct iw_range range;
@@ -3570,20 +3462,23 @@ real_set_enabled (NMDeviceInterface *device, gboolean enabled)
nm_log_dbg (LOGD_WIFI, "(%s): enable blocked by failure to bring device up",
nm_device_get_iface (NM_DEVICE (device)));
- /* The device sucks, or HAL was lying to us about the killswitch state */
- priv->enabled = FALSE;
+ if (no_firmware)
+ nm_device_set_firmware_missing (NM_DEVICE (device), TRUE);
+ else {
+ /* The device sucks, or the kernel was lying to us about the killswitch state */
+ priv->enabled = FALSE;
+ }
return;
}
/* Wait for some drivers like ipw3945 to come back to life */
success = wireless_get_range (self, &range, NULL);
- /* iface should be NULL here, but handle it anyway if it's not */
- g_warn_if_fail (priv->supplicant.iface == NULL);
+ /* Re-initialize the supplicant interface and wait for it to be ready */
if (priv->supplicant.iface)
supplicant_interface_release (self);
-
supplicant_interface_acquire (self);
+
nm_log_dbg (LOGD_WIFI, "(%s): enable waiting on supplicant state",
nm_device_get_iface (NM_DEVICE (device)));
} else {
@@ -3645,20 +3540,9 @@ dispose (GObject *object)
priv->periodic_source_id = 0;
}
- /* Clean up all pending supplicant tasks */
- while (priv->supplicant.iface_tasks)
- finish_supplicant_task ((SupplicantStateTask *) priv->supplicant.iface_tasks->data, TRUE);
- while (priv->supplicant.mgr_tasks)
- finish_supplicant_task ((SupplicantStateTask *) priv->supplicant.mgr_tasks->data, TRUE);
-
cleanup_association_attempt (self, TRUE);
supplicant_interface_release (self);
- if (priv->supplicant.mgr_state_id) {
- g_signal_handler_disconnect (priv->supplicant.mgr, priv->supplicant.mgr_state_id);
- priv->supplicant.mgr_state_id = 0;
- }
-
if (priv->supplicant.mgr) {
g_object_unref (priv->supplicant.mgr);
priv->supplicant.mgr = NULL;
@@ -3687,12 +3571,13 @@ get_property (GObject *object, guint prop_id,
{
NMDeviceWifi *device = NM_DEVICE_WIFI (object);
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (device);
- struct ether_addr hw_addr;
switch (prop_id) {
case PROP_HW_ADDRESS:
- nm_device_wifi_get_address (device, &hw_addr);
- g_value_take_string (value, nm_ether_ntop (&hw_addr));
+ g_value_take_string (value, nm_ether_ntop ((struct ether_addr *) &priv->hw_addr));
+ break;
+ case PROP_PERM_HW_ADDRESS:
+ g_value_take_string (value, nm_ether_ntop ((struct ether_addr *) &priv->perm_hw_addr));
break;
case PROP_MODE:
g_value_set_uint (value, nm_device_wifi_get_mode (device));
@@ -3761,6 +3646,8 @@ nm_device_wifi_class_init (NMDeviceWifiClass *klass)
parent_class->bring_up = real_bring_up;
parent_class->take_down = real_take_down;
parent_class->update_hw_address = real_update_hw_address;
+ parent_class->update_permanent_hw_address = real_update_permanent_hw_address;
+ parent_class->update_initial_hw_address = real_update_initial_hw_address;
parent_class->get_best_auto_connection = real_get_best_auto_connection;
parent_class->is_available = real_is_available;
parent_class->connection_secrets_updated = real_connection_secrets_updated;
@@ -3781,8 +3668,15 @@ nm_device_wifi_class_init (NMDeviceWifiClass *klass)
/* Properties */
g_object_class_install_property (object_class, PROP_HW_ADDRESS,
g_param_spec_string (NM_DEVICE_WIFI_HW_ADDRESS,
- "MAC Address",
- "Hardware MAC address",
+ "Active MAC Address",
+ "Currently set hardware MAC address",
+ NULL,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property (object_class, PROP_PERM_HW_ADDRESS,
+ g_param_spec_string (NM_DEVICE_WIFI_PERMANENT_HW_ADDRESS,
+ "Permanent MAC Address",
+ "Permanent hardware MAC address",
NULL,
G_PARAM_READABLE));
diff --git a/src/nm-device-wifi.h b/src/nm-device-wifi.h
index 11ac885735..31ac5ad5b5 100644
--- a/src/nm-device-wifi.h
+++ b/src/nm-device-wifi.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 - 2010 Red Hat, Inc.
* Copyright (C) 2006 - 2008 Novell, Inc.
*/
@@ -43,6 +43,7 @@ G_BEGIN_DECLS
#define NM_DEVICE_WIFI_HW_ADDRESS "hw-address"
+#define NM_DEVICE_WIFI_PERMANENT_HW_ADDRESS "perm-hw-address"
#define NM_DEVICE_WIFI_MODE "mode"
#define NM_DEVICE_WIFI_BITRATE "bitrate"
#define NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT "active-access-point"
@@ -85,18 +86,15 @@ NMDevice *nm_device_wifi_new (const char *udi,
const char *iface,
const char *driver);
-void nm_device_wifi_get_address (NMDeviceWifi *dev,
- struct ether_addr *addr);
+void nm_device_wifi_get_address (NMDeviceWifi *dev, struct ether_addr *addr);
-void nm_device_wifi_get_bssid (NMDeviceWifi *dev,
- struct ether_addr *bssid);
+void nm_device_wifi_get_bssid (NMDeviceWifi *dev, struct ether_addr *bssid);
-const GByteArray * nm_device_wifi_get_ssid (NMDeviceWifi *self);
+const GByteArray * nm_device_wifi_get_ssid (NMDeviceWifi *self);
-gboolean nm_device_wifi_set_mode (NMDeviceWifi *self,
- const NM80211Mode mode);
+gboolean nm_device_wifi_set_mode (NMDeviceWifi *self, const NM80211Mode mode);
-NM80211Mode nm_device_wifi_get_mode (NMDeviceWifi *self);
+NM80211Mode nm_device_wifi_get_mode (NMDeviceWifi *self);
NMAccessPoint * nm_device_wifi_get_activation_ap (NMDeviceWifi *self);
diff --git a/src/nm-device.c b/src/nm-device.c
index 7d9913d478..e8f0b206ca 100644
--- a/src/nm-device.c
+++ b/src/nm-device.c
@@ -19,6 +19,7 @@
* Copyright (C) 2006 - 2008 Novell, Inc.
*/
+#include <config.h>
#include <glib.h>
#include <glib/gi18n.h>
#include <dbus/dbus.h>
@@ -42,7 +43,7 @@
#include "nm-system.h"
#include "nm-dhcp-manager.h"
#include "nm-dbus-manager.h"
-#include "nm-named-manager.h"
+#include "nm-dns-manager.h"
#include "nm-utils.h"
#include "nm-logging.h"
#include "nm-netlink-monitor.h"
@@ -92,6 +93,7 @@ typedef struct {
char * driver;
gboolean managed; /* whether managed by NM or not */
RfKillType rfkill_type;
+ gboolean firmware_missing;
guint32 ip4_address;
@@ -158,6 +160,7 @@ static void nm_device_deactivate (NMDeviceInterface *device, NMDeviceStateReason
static gboolean device_disconnect (NMDeviceInterface *device, GError **error);
static gboolean spec_match_list (NMDeviceInterface *device, const GSList *specs);
static NMConnection *connection_match_config (NMDeviceInterface *device, const GSList *connections);
+static gboolean can_assume_connections (NMDeviceInterface *device);
static void nm_device_activate_schedule_stage5_ip_config_commit (NMDevice *self, int family);
@@ -195,6 +198,7 @@ device_interface_init (NMDeviceInterface *device_interface_class)
device_interface_class->disconnect = device_disconnect;
device_interface_class->spec_match_list = spec_match_list;
device_interface_class->connection_match_config = connection_match_config;
+ device_interface_class->can_assume_connections = can_assume_connections;
}
@@ -282,6 +286,12 @@ constructor (GType type,
if (NM_DEVICE_GET_CLASS (dev)->update_hw_address)
NM_DEVICE_GET_CLASS (dev)->update_hw_address (dev);
+ if (NM_DEVICE_GET_CLASS (dev)->update_permanent_hw_address)
+ NM_DEVICE_GET_CLASS (dev)->update_permanent_hw_address (dev);
+
+ if (NM_DEVICE_GET_CLASS (dev)->update_initial_hw_address)
+ NM_DEVICE_GET_CLASS (dev)->update_initial_hw_address (dev);
+
priv->dhcp_manager = nm_dhcp_manager_get ();
update_accept_ra_save (dev);
@@ -387,11 +397,12 @@ void
nm_device_set_ip_iface (NMDevice *self, const char *iface)
{
NMDevicePrivate *priv;
+ char *old_ip_iface;
g_return_if_fail (NM_IS_DEVICE (self));
priv = NM_DEVICE_GET_PRIVATE (self);
- g_free (priv->ip_iface);
+ old_ip_iface = priv->ip_iface;
priv->ip_ifindex = 0;
priv->ip_iface = g_strdup (iface);
@@ -401,6 +412,11 @@ nm_device_set_ip_iface (NMDevice *self, const char *iface)
nm_log_warn (LOGD_HW, "(%s): failed to look up interface index", iface);
}
}
+
+ /* Emit change notification */
+ if (g_strcmp0 (old_ip_iface, priv->ip_iface))
+ g_object_notify (G_OBJECT (self), NM_DEVICE_INTERFACE_IP_IFACE);
+ g_free (old_ip_iface);
}
@@ -492,6 +508,11 @@ nm_device_get_act_request (NMDevice *self)
gboolean
nm_device_is_available (NMDevice *self)
{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ if (priv->firmware_missing)
+ return FALSE;
+
if (NM_DEVICE_GET_CLASS (self)->is_available)
return NM_DEVICE_GET_CLASS (self)->is_available (self);
return TRUE;
@@ -1013,6 +1034,7 @@ aipd_get_ip4_config (NMDevice *self, NMDeviceStateReason *reason)
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
NMIP4Config *config = NULL;
NMIP4Address *addr;
+ NMIP4Route *route;
g_return_val_if_fail (priv->aipd_addr > 0, NULL);
@@ -1027,6 +1049,14 @@ aipd_get_ip4_config (NMDevice *self, NMDeviceStateReason *reason)
nm_ip4_address_set_prefix (addr, 16);
nm_ip4_config_take_address (config, addr);
+ /* Add a multicast route for link-local connections: destination= 224.0.0.0, netmask=240.0.0.0 */
+ route = nm_ip4_route_new ();
+ nm_ip4_route_set_dest (route, (guint32) htonl (0xE0000000L));
+ nm_ip4_route_set_prefix (route, 4);
+ nm_ip4_route_set_next_hop (route, (guint32) 0);
+ nm_ip4_route_set_metric (route, 0);
+ nm_ip4_config_take_route (config, route);
+
return config;
}
@@ -1213,7 +1243,7 @@ static gboolean
aipd_exec (NMDevice *self, GError **error)
{
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- char *argv[5];
+ char *argv[6], *cmdline;
gboolean success = FALSE;
const char **aipd_binary = NULL;
static const char *aipd_paths[] = {
@@ -1221,6 +1251,7 @@ aipd_exec (NMDevice *self, GError **error)
"/usr/local/sbin/avahi-autoipd",
NULL
};
+ int i = 0;
aipd_cleanup (self);
@@ -1237,11 +1268,17 @@ aipd_exec (NMDevice *self, GError **error)
return FALSE;
}
- argv[0] = (char *) (*aipd_binary);
- argv[1] = "--script";
- argv[2] = LIBEXECDIR "/nm-avahi-autoipd.action";
- argv[3] = (char *) nm_device_get_ip_iface (self);
- argv[4] = NULL;
+ argv[i++] = (char *) (*aipd_binary);
+ argv[i++] = "--script";
+ argv[i++] = LIBEXECDIR "/nm-avahi-autoipd.action";
+ if (nm_logging_level_enabled (LOGL_DEBUG))
+ argv[i++] = "--debug";
+ argv[i++] = (char *) nm_device_get_ip_iface (self);
+ argv[i++] = NULL;
+
+ cmdline = g_strjoinv (" ", argv);
+ nm_log_dbg(LOGD_AUTOIP4, "running: %s", cmdline);
+ g_free (cmdline);
success = g_spawn_async ("/", argv, NULL, G_SPAWN_DO_NOT_REAP_CHILD,
&aipd_child_setup, NULL, &(priv->aipd_pid), error);
@@ -1311,6 +1348,7 @@ handle_dhcp_lease_change (NMDevice *device, gboolean ipv6)
nm_dhcp_client_foreach_option (priv->dhcp6_client,
dhcp6_add_option_cb,
priv->dhcp6_config);
+ nm_utils_call_dispatcher ("dhcp6-change", connection, device, NULL);
} else {
nm_log_warn (LOGD_DHCP6, "(%s): failed to update IPv6 config in response to DHCP event.",
nm_device_get_ip_iface (device));
@@ -1335,6 +1373,7 @@ handle_dhcp_lease_change (NMDevice *device, gboolean ipv6)
nm_dhcp_client_foreach_option (priv->dhcp4_client,
dhcp4_add_option_cb,
priv->dhcp4_config);
+ nm_utils_call_dispatcher ("dhcp4-change", connection, device, NULL);
} else {
nm_log_warn (LOGD_DHCP6, "(%s): failed to update IPv4 config in response to DHCP event.",
nm_device_get_ip_iface (device));
@@ -1415,22 +1454,6 @@ dhcp_state_changed (NMDHCPClient *client,
} else if (nm_device_get_state (device) == NM_DEVICE_STATE_ACTIVATED)
nm_device_state_changed (device, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED);
break;
- case DHC_STOP:
- case DHC_STOP6:
- case DHC_EXPIRE:
- case DHC_EXPIRE6:
- if (dev_state == NM_DEVICE_STATE_ACTIVATED) {
- if (ipv6)
- nm_dhcp6_config_reset (priv->dhcp6_config);
- else
- nm_dhcp4_config_reset (priv->dhcp4_config);
-
- /* dhclient quit and can't get/renew a lease; so kill the connection */
- nm_device_state_changed (device,
- NM_DEVICE_STATE_FAILED,
- NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED);
- }
- break;
default:
break;
}
@@ -1564,6 +1587,8 @@ dhcp6_start (NMDevice *self,
NMSettingConnection *s_con;
const char *uuid;
const char *ip_iface;
+ const struct in6_addr dest = { { { 0xFF,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } };
+ int err;
if (!connection) {
NMActRequest *req;
@@ -1584,6 +1609,18 @@ dhcp6_start (NMDevice *self,
g_object_unref (priv->dhcp6_config);
priv->dhcp6_config = nm_dhcp6_config_new ();
+ /* DHCPv6 communicates with the DHCPv6 server via two multicast addresses,
+ * ff02::1:2 (link-scope) and ff05::1:3 (site-scope). Make sure we have
+ * a multicast route (ff00::/8) for client <-> server communication.
+ */
+ 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) {
+ 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 ());
+ }
+
s_con = (NMSettingConnection *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION);
g_assert (s_con);
uuid = nm_setting_connection_get_uuid (s_con);
@@ -2739,6 +2776,8 @@ nm_device_deactivate_quickly (NMDevice *self)
dnsmasq_cleanup (self);
aipd_cleanup (self);
+ nm_device_set_ip_iface (self, NULL);
+
/* Turn off router advertisements until they are needed */
if (priv->ip6_accept_ra_path)
nm_utils_do_sysctl (priv->ip6_accept_ra_path, "0\n");
@@ -2986,7 +3025,7 @@ nm_device_set_ip4_config (NMDevice *self,
NMIP4Config *old_config = NULL;
gboolean success = TRUE;
NMIP4ConfigCompareFlags diff = NM_IP4_COMPARE_FLAG_ALL;
- NMNamedManager *named_mgr;
+ NMDnsManager *dns_mgr;
g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
g_return_val_if_fail (reason != NULL, FALSE);
@@ -3003,10 +3042,10 @@ nm_device_set_ip4_config (NMDevice *self,
if (diff == NM_IP4_COMPARE_FLAG_NONE)
return TRUE;
- named_mgr = nm_named_manager_get ();
+ dns_mgr = nm_dns_manager_get (NULL);
if (old_config) {
- /* Remove any previous IP4 Config from the named manager */
- nm_named_manager_remove_ip4_config (named_mgr, ip_iface, old_config);
+ /* Remove any previous IP4 Config from the DNS manager */
+ nm_dns_manager_remove_ip4_config (dns_mgr, ip_iface, old_config);
g_object_unref (old_config);
priv->ip4_config = NULL;
}
@@ -3025,13 +3064,13 @@ nm_device_set_ip4_config (NMDevice *self,
if (!nm_ip4_config_get_dbus_path (new_config))
nm_ip4_config_export (new_config);
- /* Add the DNS information to the named manager */
- nm_named_manager_add_ip4_config (named_mgr, ip_iface, new_config, NM_NAMED_IP_CONFIG_TYPE_DEFAULT);
+ /* Add the DNS information to the DNS manager */
+ nm_dns_manager_add_ip4_config (dns_mgr, ip_iface, new_config, NM_DNS_IP_CONFIG_TYPE_DEFAULT);
nm_device_update_ip4_address (self);
}
}
- g_object_unref (named_mgr);
+ g_object_unref (dns_mgr);
g_object_notify (G_OBJECT (self), NM_DEVICE_INTERFACE_IP4_CONFIG);
@@ -3089,7 +3128,7 @@ nm_device_set_ip6_config (NMDevice *self,
NMIP6Config *old_config = NULL;
gboolean success = TRUE;
NMIP6ConfigCompareFlags diff = NM_IP6_COMPARE_FLAG_ALL;
- NMNamedManager *named_mgr;
+ NMDnsManager *dns_mgr;
g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
g_return_val_if_fail (reason != NULL, FALSE);
@@ -3106,10 +3145,10 @@ nm_device_set_ip6_config (NMDevice *self,
if (diff == NM_IP6_COMPARE_FLAG_NONE)
return TRUE;
- named_mgr = nm_named_manager_get ();
+ dns_mgr = nm_dns_manager_get (NULL);
if (old_config) {
- /* Remove any previous IP6 Config from the named manager */
- nm_named_manager_remove_ip6_config (named_mgr, ip_iface, old_config);
+ /* Remove any previous IP6 Config from the DNS manager */
+ nm_dns_manager_remove_ip6_config (dns_mgr, ip_iface, old_config);
g_object_unref (old_config);
priv->ip6_config = NULL;
}
@@ -3128,11 +3167,11 @@ nm_device_set_ip6_config (NMDevice *self,
if (!nm_ip6_config_get_dbus_path (new_config))
nm_ip6_config_export (new_config);
- /* Add the DNS information to the named manager */
- nm_named_manager_add_ip6_config (named_mgr, ip_iface, new_config, NM_NAMED_IP_CONFIG_TYPE_DEFAULT);
+ /* Add the DNS information to the DNS manager */
+ nm_dns_manager_add_ip6_config (dns_mgr, ip_iface, new_config, NM_DNS_IP_CONFIG_TYPE_DEFAULT);
}
}
- g_object_unref (named_mgr);
+ g_object_unref (dns_mgr);
g_object_notify (G_OBJECT (self), NM_DEVICE_INTERFACE_IP6_CONFIG);
@@ -3279,7 +3318,7 @@ dispose (GObject *object)
/* Don't down can-assume-connection capable devices that are activated with
* a connection that can be assumed.
*/
- if ( nm_device_interface_can_assume_connection (NM_DEVICE_INTERFACE (self))
+ if ( nm_device_interface_can_assume_connections (NM_DEVICE_INTERFACE (self))
&& (nm_device_get_state (self) == NM_DEVICE_STATE_ACTIVATED)) {
NMConnection *connection;
NMSettingIP4Config *s_ip4;
@@ -3314,13 +3353,6 @@ dispose (GObject *object)
addrconf6_cleanup (self);
dnsmasq_cleanup (self);
- /* reset the saved RA value */
- if (priv->ip6_accept_ra_path) {
- nm_utils_do_sysctl (priv->ip6_accept_ra_path,
- priv->ip6_accept_ra_save ? "1\n" : "0\n");
- }
- g_free (priv->ip6_accept_ra_path);
-
/* Take the device itself down and clear its IPv4 configuration */
if (priv->managed && take_down) {
NMDeviceStateReason ignored = NM_DEVICE_STATE_REASON_NONE;
@@ -3329,6 +3361,13 @@ dispose (GObject *object)
nm_device_set_ip4_config (self, NULL, FALSE, &ignored);
}
+ /* reset the saved RA value */
+ if (priv->ip6_accept_ra_path) {
+ nm_utils_do_sysctl (priv->ip6_accept_ra_path,
+ priv->ip6_accept_ra_save ? "1\n" : "0\n");
+ }
+ g_free (priv->ip6_accept_ra_path);
+
activation_source_clear (self, TRUE, AF_INET);
activation_source_clear (self, TRUE, AF_INET6);
@@ -3344,7 +3383,8 @@ finalize (GObject *object)
NMDevice *self = NM_DEVICE (object);
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- g_object_unref (priv->dhcp_manager);
+ if (priv->dhcp_manager)
+ g_object_unref (priv->dhcp_manager);
g_free (priv->udi);
g_free (priv->iface);
@@ -3380,6 +3420,8 @@ set_property (GObject *object, guint prop_id,
}
}
break;
+ case NM_DEVICE_INTERFACE_PROP_IP_IFACE:
+ break;
case NM_DEVICE_INTERFACE_PROP_DRIVER:
priv->driver = g_strdup (g_value_get_string (value));
break;
@@ -3392,6 +3434,9 @@ set_property (GObject *object, guint prop_id,
case NM_DEVICE_INTERFACE_PROP_MANAGED:
priv->managed = g_value_get_boolean (value);
break;
+ case NM_DEVICE_INTERFACE_PROP_FIRMWARE_MISSING:
+ priv->firmware_missing = g_value_get_boolean (value);
+ break;
case NM_DEVICE_INTERFACE_PROP_DEVICE_TYPE:
g_return_if_fail (priv->type == NM_DEVICE_TYPE_UNKNOWN);
priv->type = g_value_get_uint (value);
@@ -3426,6 +3471,12 @@ get_property (GObject *object, guint prop_id,
case NM_DEVICE_INTERFACE_PROP_IFACE:
g_value_set_string (value, priv->iface);
break;
+ case NM_DEVICE_INTERFACE_PROP_IP_IFACE:
+ if ((state == NM_DEVICE_STATE_ACTIVATED) || (state == NM_DEVICE_STATE_IP_CONFIG))
+ g_value_set_string (value, nm_device_get_ip_iface (self));
+ else
+ g_value_set_string (value, NULL);
+ break;
case NM_DEVICE_INTERFACE_PROP_IFINDEX:
g_value_set_int (value, priv->ifindex);
break;
@@ -3479,6 +3530,9 @@ get_property (GObject *object, guint prop_id,
case NM_DEVICE_INTERFACE_PROP_MANAGED:
g_value_set_boolean (value, priv->managed);
break;
+ case NM_DEVICE_INTERFACE_PROP_FIRMWARE_MISSING:
+ g_value_set_boolean (value, priv->firmware_missing);
+ break;
case NM_DEVICE_INTERFACE_PROP_TYPE_DESC:
g_value_set_string (value, priv->type_desc);
break;
@@ -3528,6 +3582,10 @@ nm_device_class_init (NMDeviceClass *klass)
NM_DEVICE_INTERFACE_IFACE);
g_object_class_override_property (object_class,
+ NM_DEVICE_INTERFACE_PROP_IP_IFACE,
+ NM_DEVICE_INTERFACE_IP_IFACE);
+
+ g_object_class_override_property (object_class,
NM_DEVICE_INTERFACE_PROP_IFINDEX,
NM_DEVICE_INTERFACE_IFINDEX);
@@ -3572,6 +3630,10 @@ nm_device_class_init (NMDeviceClass *klass)
NM_DEVICE_INTERFACE_MANAGED);
g_object_class_override_property (object_class,
+ NM_DEVICE_INTERFACE_PROP_FIRMWARE_MISSING,
+ NM_DEVICE_INTERFACE_FIRMWARE_MISSING);
+
+ g_object_class_override_property (object_class,
NM_DEVICE_INTERFACE_PROP_TYPE_DESC,
NM_DEVICE_INTERFACE_TYPE_DESC);
@@ -3616,6 +3678,27 @@ unavailable_to_disconnected (gpointer user_data)
}
void
+nm_device_set_firmware_missing (NMDevice *self, gboolean new_missing)
+{
+ NMDevicePrivate *priv;
+
+ g_return_if_fail (self != NULL);
+ g_return_if_fail (NM_IS_DEVICE (self));
+
+ priv = NM_DEVICE_GET_PRIVATE (self);
+ if (priv->firmware_missing != new_missing) {
+ priv->firmware_missing = new_missing;
+ g_object_notify (G_OBJECT (self), NM_DEVICE_INTERFACE_FIRMWARE_MISSING);
+ }
+}
+
+gboolean
+nm_device_get_firmware_missing (NMDevice *self)
+{
+ return NM_DEVICE_GET_PRIVATE (self)->firmware_missing;
+}
+
+void
nm_device_state_changed (NMDevice *device,
NMDeviceState state,
NMDeviceStateReason reason)
@@ -3627,7 +3710,12 @@ nm_device_state_changed (NMDevice *device,
g_return_if_fail (NM_IS_DEVICE (device));
- if (priv->state == state)
+ /* Do nothing if state isn't changing, but as a special case allow
+ * re-setting UNAVAILABLE if the device is missing firmware so that we
+ * can retry device initialization.
+ */
+ if ( (priv->state == state)
+ && !(state == NM_DEVICE_STATE_UNAVAILABLE && priv->firmware_missing))
return;
old_state = priv->state;
@@ -3647,14 +3735,15 @@ nm_device_state_changed (NMDevice *device,
*/
switch (state) {
case NM_DEVICE_STATE_UNMANAGED:
+ nm_device_set_firmware_missing (device, FALSE);
if (old_state > NM_DEVICE_STATE_UNMANAGED)
nm_device_take_down (device, TRUE, reason);
break;
case NM_DEVICE_STATE_UNAVAILABLE:
- if (old_state == NM_DEVICE_STATE_UNMANAGED) {
- if (!nm_device_bring_up (device, TRUE, &no_firmware) && no_firmware) {
- nm_log_warn (LOGD_HW, "%s: firmware may be missing.", nm_device_get_iface (device));
- }
+ if (old_state == NM_DEVICE_STATE_UNMANAGED || priv->firmware_missing) {
+ if (!nm_device_bring_up (device, TRUE, &no_firmware) && no_firmware)
+ nm_log_warn (LOGD_HW, "(%s): firmware may be missing.", nm_device_get_iface (device));
+ nm_device_set_firmware_missing (device, no_firmware ? TRUE : FALSE);
}
/* Ensure the device gets deactivated in response to stuff like
* carrier changes or rfkill. But don't deactivate devices that are
@@ -3682,7 +3771,7 @@ nm_device_state_changed (NMDevice *device,
case NM_DEVICE_STATE_UNAVAILABLE:
/* If the device can activate now (ie, it's got a carrier, the supplicant
* is active, or whatever) schedule a delayed transition to DISCONNECTED
- * to get things rolling. The device can't transition immediately becuase
+ * to get things rolling. The device can't transition immediately because
* we can't change states again from the state handler for a variety of
* reasons.
*/
@@ -3703,7 +3792,7 @@ nm_device_state_changed (NMDevice *device,
case NM_DEVICE_STATE_FAILED:
nm_log_warn (LOGD_DEVICE, "Activation (%s) failed.", nm_device_get_iface (device));
/* Schedule the transition to DISCONNECTED. The device can't transition
- * immediately becuase we can't change states again from the state
+ * immediately because we can't change states again from the state
* handler for a variety of reasons.
*/
priv->failed_to_disconnected_id = g_idle_add (failed_to_disconnected, device);
@@ -3787,6 +3876,14 @@ connection_match_config (NMDeviceInterface *device, const GSList *connections)
return NULL;
}
+static gboolean
+can_assume_connections (NMDeviceInterface *device)
+{
+ g_return_val_if_fail (device != NULL, FALSE);
+
+ return !!NM_DEVICE_GET_CLASS (device)->connection_match_config;
+}
+
void
nm_device_set_dhcp_timeout (NMDevice *device, guint32 timeout)
{
diff --git a/src/nm-device.h b/src/nm-device.h
index 202f392413..db2b1b7db0 100644
--- a/src/nm-device.h
+++ b/src/nm-device.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 - 2010 Red Hat, Inc.
* Copyright (C) 2006 - 2008 Novell, Inc.
*/
@@ -72,6 +72,8 @@ typedef struct {
void (*take_down) (NMDevice *self);
void (* update_hw_address) (NMDevice *self);
+ void (* update_permanent_hw_address) (NMDevice *self);
+ void (* update_initial_hw_address) (NMDevice *self);
guint32 (* get_type_capabilities) (NMDevice *self);
guint32 (* get_generic_capabilities) (NMDevice *self);
diff --git a/src/nm-ip4-config.c b/src/nm-ip4-config.c
index 6dcc2dbcfe..0ae3d1bee4 100644
--- a/src/nm-ip4-config.c
+++ b/src/nm-ip4-config.c
@@ -56,6 +56,9 @@ typedef struct {
GArray *wins;
+ GArray *nis;
+ char * nis_domain;
+
GSList *routes;
gboolean never_default;
@@ -488,6 +491,70 @@ nm_ip4_config_set_never_default (NMIP4Config *config, gboolean never_default)
NM_IP4_CONFIG_GET_PRIVATE (config)->never_default = never_default;
}
+void nm_ip4_config_add_nis_server (NMIP4Config *config, guint32 nis)
+{
+ NMIP4ConfigPrivate *priv;
+ int i;
+
+ g_return_if_fail (NM_IS_IP4_CONFIG (config));
+ g_return_if_fail (nis > 0);
+
+ priv = NM_IP4_CONFIG_GET_PRIVATE (config);
+ for (i = 0; i < priv->nis->len; i++) {
+ guint32 s = g_array_index (priv->nis, guint32, i);
+
+ /* No dupes */
+ g_return_if_fail (nis != s);
+ }
+
+ g_array_append_val (priv->nis, nis);
+}
+
+guint32 nm_ip4_config_get_nis_server (NMIP4Config *config, guint i)
+{
+ g_return_val_if_fail (NM_IS_IP4_CONFIG (config), 0);
+
+ return g_array_index (NM_IP4_CONFIG_GET_PRIVATE (config)->nis, guint32, i);
+}
+
+guint32 nm_ip4_config_get_num_nis_servers (NMIP4Config *config)
+{
+ g_return_val_if_fail (NM_IS_IP4_CONFIG (config), 0);
+
+ return NM_IP4_CONFIG_GET_PRIVATE (config)->nis->len;
+}
+
+void nm_ip4_config_reset_nis_servers (NMIP4Config *config)
+{
+ NMIP4ConfigPrivate *priv;
+
+ g_return_if_fail (NM_IS_IP4_CONFIG (config));
+
+ priv = NM_IP4_CONFIG_GET_PRIVATE (config);
+ if (priv->nis->len)
+ g_array_remove_range (priv->nis, 0, priv->nis->len);
+}
+
+void
+nm_ip4_config_set_nis_domain (NMIP4Config *config, const char *domain)
+{
+ NMIP4ConfigPrivate *priv;
+
+ g_return_if_fail (NM_IS_IP4_CONFIG (config));
+
+ priv = NM_IP4_CONFIG_GET_PRIVATE (config);
+ g_free (priv->nis_domain);
+ priv->nis_domain = g_strdup (domain);
+}
+
+const char *
+nm_ip4_config_get_nis_domain (NMIP4Config *config)
+{
+ g_return_val_if_fail (NM_IS_IP4_CONFIG (config), 0);
+
+ return NM_IP4_CONFIG_GET_PRIVATE (config)->nis_domain;
+}
+
/* libnl convenience/conversion functions */
static int ip4_addr_to_rtnl_local (guint32 ip4_address, struct rtnl_addr *addr)
@@ -700,6 +767,15 @@ nm_ip4_config_diff (NMIP4Config *a, NMIP4Config *b)
|| !addr_array_compare (b_priv->wins, a_priv->wins))
flags |= NM_IP4_COMPARE_FLAG_WINS_SERVERS;
+ if ( (a_priv->nis->len != b_priv->nis->len)
+ || !addr_array_compare (a_priv->nis, b_priv->nis)
+ || !addr_array_compare (b_priv->nis, a_priv->nis))
+ flags |= NM_IP4_COMPARE_FLAG_NIS_SERVERS;
+
+ if ( (a_priv->nis_domain || b_priv->nis_domain)
+ && (g_strcmp0 (a_priv->nis_domain, b_priv->nis_domain) != 0))
+ flags |= NM_IP4_COMPARE_FLAG_NIS_DOMAIN;
+
if ( !route_slist_compare (a_priv->routes, b_priv->routes)
|| !route_slist_compare (b_priv->routes, a_priv->routes))
flags |= NM_IP4_COMPARE_FLAG_ROUTES;
@@ -732,6 +808,7 @@ nm_ip4_config_init (NMIP4Config *config)
priv->wins = g_array_new (FALSE, TRUE, sizeof (guint32));
priv->domains = g_ptr_array_sized_new (3);
priv->searches = g_ptr_array_sized_new (3);
+ priv->nis = g_array_new (FALSE, TRUE, sizeof (guint32));
}
static void
@@ -745,6 +822,8 @@ finalize (GObject *object)
g_array_free (priv->nameservers, TRUE);
g_ptr_array_free (priv->domains, TRUE);
g_ptr_array_free (priv->searches, TRUE);
+ g_array_free (priv->nis, TRUE);
+ g_free (priv->nis_domain);
G_OBJECT_CLASS (nm_ip4_config_parent_class)->finalize (object);
}
diff --git a/src/nm-ip4-config.h b/src/nm-ip4-config.h
index 04999f8779..2d27acff03 100644
--- a/src/nm-ip4-config.h
+++ b/src/nm-ip4-config.h
@@ -99,6 +99,15 @@ void nm_ip4_config_set_mss (NMIP4Config *config, guint32 ms
gboolean nm_ip4_config_get_never_default (NMIP4Config *config);
void nm_ip4_config_set_never_default (NMIP4Config *config, gboolean never_default);
+void nm_ip4_config_add_nis_server (NMIP4Config *config, guint32 nis);
+guint32 nm_ip4_config_get_nis_server (NMIP4Config *config, guint i);
+guint32 nm_ip4_config_get_num_nis_servers (NMIP4Config *config);
+void nm_ip4_config_reset_nis_servers (NMIP4Config *config);
+
+void nm_ip4_config_set_nis_domain (NMIP4Config *config, const char *domain);
+const char * nm_ip4_config_get_nis_domain (NMIP4Config *config);
+
+
/* Flags for nm_ip4_config_to_rtnl_addr() */
#define NM_RTNL_ADDR_NONE 0x0000
#define NM_RTNL_ADDR_ADDR 0x0001
@@ -122,6 +131,8 @@ typedef enum {
NM_IP4_COMPARE_FLAG_MTU = 0x00000040,
NM_IP4_COMPARE_FLAG_MSS = 0x00000080,
NM_IP4_COMPARE_FLAG_WINS_SERVERS= 0x00000100,
+ NM_IP4_COMPARE_FLAG_NIS_SERVERS = 0x00000200,
+ NM_IP4_COMPARE_FLAG_NIS_DOMAIN = 0x00000400,
NM_IP4_COMPARE_FLAG_ALL = 0xFFFFFFFF /* match everything */
} NMIP4ConfigCompareFlags;
diff --git a/src/nm-ip6-config.c b/src/nm-ip6-config.c
index 2fea38f331..4c6c5c6273 100644
--- a/src/nm-ip6-config.c
+++ b/src/nm-ip6-config.c
@@ -655,6 +655,27 @@ finalize (GObject *object)
}
static void
+nameservers_to_gvalue (GArray *array, GValue *value)
+{
+ GPtrArray *dns;
+ guint i = 0;
+
+ dns = g_ptr_array_new ();
+
+ while (array && (i < array->len)) {
+ struct in6_addr *addr;
+ GByteArray *bytearray;
+ addr = &g_array_index (array, struct in6_addr, i++);
+
+ bytearray = g_byte_array_sized_new (16);
+ g_byte_array_append (bytearray, (guint8 *) addr->s6_addr, 16);
+ g_ptr_array_add (dns, bytearray);
+ }
+
+ g_value_take_boxed (value, dns);
+}
+
+static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
@@ -665,7 +686,7 @@ get_property (GObject *object, guint prop_id,
nm_utils_ip6_addresses_to_gvalue (priv->addresses, value);
break;
case PROP_NAMESERVERS:
- g_value_set_boxed (value, priv->nameservers);
+ nameservers_to_gvalue (priv->nameservers, value);
break;
case PROP_DOMAINS:
g_value_set_boxed (value, priv->domains);
diff --git a/src/nm-manager-auth.c b/src/nm-manager-auth.c
new file mode 100644
index 0000000000..44c82c23e6
--- /dev/null
+++ b/src/nm-manager-auth.c
@@ -0,0 +1,424 @@
+/* -*- 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) 2010 Red Hat, Inc.
+ */
+
+#include "nm-manager-auth.h"
+#include "nm-logging.h"
+
+#include <dbus/dbus-glib-lowlevel.h>
+#include <string.h>
+
+struct NMAuthChain {
+ guint32 refcount;
+ PolkitAuthority *authority;
+ GSList *calls;
+ GHashTable *data;
+
+ DBusGMethodInvocation *context;
+ char *owner;
+ GError *error;
+
+ NMAuthChainResultFunc done_func;
+ NMAuthChainCallFunc call_func;
+ gpointer user_data;
+};
+
+typedef struct {
+ NMAuthChain *chain;
+ GCancellable *cancellable;
+ char *permission;
+ gboolean disposed;
+} PolkitCall;
+
+typedef struct {
+ gpointer data;
+ GDestroyNotify destroy;
+} ChainData;
+
+static void
+free_data (gpointer data)
+{
+ ChainData *tmp = data;
+
+ if (tmp->destroy)
+ tmp->destroy (tmp->data);
+ memset (tmp, 0, sizeof (ChainData));
+ g_free (tmp);
+}
+
+static void
+default_call_func (NMAuthChain *chain,
+ const char *permission,
+ GError *error,
+ NMAuthCallResult result,
+ gpointer user_data)
+{
+ if (!error)
+ nm_auth_chain_set_data (chain, permission, GUINT_TO_POINTER (result), NULL);
+}
+
+static NMAuthChain *
+_auth_chain_new (PolkitAuthority *authority,
+ DBusGMethodInvocation *context,
+ DBusGProxy *proxy,
+ DBusMessage *message,
+ NMAuthChainResultFunc done_func,
+ gpointer user_data)
+{
+ NMAuthChain *self;
+
+ g_return_val_if_fail (context || proxy || message, NULL);
+
+ self = g_malloc0 (sizeof (NMAuthChain));
+ self->refcount = 1;
+ self->authority = g_object_ref (authority);
+ self->data = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, free_data);
+ self->done_func = done_func;
+ self->call_func = /* call_func ? call_func : */ default_call_func;
+ self->user_data = user_data;
+ self->context = context;
+
+ if (proxy)
+ self->owner = g_strdup (dbus_g_proxy_get_bus_name (proxy));
+ else if (context)
+ self->owner = dbus_g_method_get_sender (context);
+ else if (message)
+ self->owner = g_strdup (dbus_message_get_sender (message));
+
+ if (!self->owner) {
+ /* Need an owner */
+ g_warn_if_fail (self->owner);
+ nm_auth_chain_unref (self);
+ self = NULL;
+ }
+
+ return self;
+}
+
+NMAuthChain *
+nm_auth_chain_new (PolkitAuthority *authority,
+ DBusGMethodInvocation *context,
+ DBusGProxy *proxy,
+ NMAuthChainResultFunc done_func,
+ gpointer user_data)
+{
+ return _auth_chain_new (authority, context, proxy, NULL, done_func, user_data);
+}
+
+NMAuthChain *
+nm_auth_chain_new_raw_message (PolkitAuthority *authority,
+ DBusMessage *message,
+ NMAuthChainResultFunc done_func,
+ gpointer user_data)
+{
+ return _auth_chain_new (authority, NULL, NULL, message, done_func, user_data);
+}
+
+gpointer
+nm_auth_chain_get_data (NMAuthChain *self, const char *tag)
+{
+ ChainData *tmp;
+
+ g_return_val_if_fail (self != NULL, NULL);
+ g_return_val_if_fail (tag != NULL, NULL);
+
+ tmp = g_hash_table_lookup (self->data, tag);
+ return tmp ? tmp->data : NULL;
+}
+
+void
+nm_auth_chain_set_data (NMAuthChain *self,
+ const char *tag,
+ gpointer data,
+ GDestroyNotify data_destroy)
+{
+ ChainData *tmp;
+
+ g_return_if_fail (self != NULL);
+ g_return_if_fail (tag != NULL);
+
+ if (data == NULL)
+ g_hash_table_remove (self->data, tag);
+ else {
+ tmp = g_malloc0 (sizeof (ChainData));
+ tmp->data = data;
+ tmp->destroy = data_destroy;
+
+ g_hash_table_insert (self->data, g_strdup (tag), tmp);
+ }
+}
+
+static void
+nm_auth_chain_check_done (NMAuthChain *self)
+{
+ g_return_if_fail (self != NULL);
+
+ if (g_slist_length (self->calls) == 0) {
+ /* Ensure we say alive across the callback */
+ self->refcount++;
+ self->done_func (self, self->error, self->context, self->user_data);
+ nm_auth_chain_unref (self);
+ }
+}
+
+static void
+polkit_call_cancel (PolkitCall *call)
+{
+ call->disposed = TRUE;
+ g_cancellable_cancel (call->cancellable);
+}
+
+static void
+polkit_call_free (PolkitCall *call)
+{
+ g_return_if_fail (call != NULL);
+
+ call->disposed = TRUE;
+ g_free (call->permission);
+ call->permission = NULL;
+ call->chain = NULL;
+ g_object_unref (call->cancellable);
+ call->cancellable = NULL;
+ g_free (call);
+}
+
+static void
+pk_call_cb (GObject *object, GAsyncResult *result, gpointer user_data)
+{
+ PolkitCall *call = user_data;
+ NMAuthChain *chain;
+ PolkitAuthorizationResult *pk_result;
+ GError *error = NULL;
+ guint call_result = NM_AUTH_CALL_RESULT_UNKNOWN;
+
+ /* If the call is already disposed do nothing */
+ if (call->disposed) {
+ polkit_call_free (call);
+ return;
+ }
+
+ chain = call->chain;
+ chain->calls = g_slist_remove (chain->calls, call);
+
+ pk_result = polkit_authority_check_authorization_finish (chain->authority,
+ result,
+ &error);
+ if (error) {
+ if (!chain->error)
+ chain->error = g_error_copy (error);
+
+ nm_log_warn (LOGD_CORE, "error requesting auth for %s: (%d) %s",
+ call->permission,
+ error ? error->code : -1,
+ error && error->message ? error->message : "(unknown)");
+ } else {
+ if (polkit_authorization_result_get_is_authorized (pk_result)) {
+ /* Caller has the permission */
+ call_result = NM_AUTH_CALL_RESULT_YES;
+ } else if (polkit_authorization_result_get_is_challenge (pk_result)) {
+ /* Caller could authenticate to get the permission */
+ call_result = NM_AUTH_CALL_RESULT_AUTH;
+ } else
+ call_result = NM_AUTH_CALL_RESULT_NO;
+ }
+
+ chain->call_func (chain, call->permission, error, call_result, chain->user_data);
+ nm_auth_chain_check_done (chain);
+
+ g_clear_error (&error);
+ polkit_call_free (call);
+ if (pk_result)
+ g_object_unref (pk_result);
+}
+
+gboolean
+nm_auth_chain_add_call (NMAuthChain *self,
+ const char *permission,
+ gboolean allow_interaction)
+{
+ PolkitCall *call;
+ PolkitSubject *subject;
+ PolkitCheckAuthorizationFlags flags = POLKIT_CHECK_AUTHORIZATION_FLAGS_NONE;
+
+ g_return_val_if_fail (self != NULL, FALSE);
+ g_return_val_if_fail (self->owner != NULL, FALSE);
+ g_return_val_if_fail (permission != NULL, FALSE);
+
+ subject = polkit_system_bus_name_new (self->owner);
+ if (!subject)
+ return FALSE;
+
+ call = g_malloc0 (sizeof (PolkitCall));
+ call->chain = self;
+ call->permission = g_strdup (permission);
+ call->cancellable = g_cancellable_new ();
+
+ self->calls = g_slist_append (self->calls, call);
+
+ if (allow_interaction)
+ flags = POLKIT_CHECK_AUTHORIZATION_FLAGS_ALLOW_USER_INTERACTION;
+
+ polkit_authority_check_authorization (self->authority,
+ subject,
+ permission,
+ NULL,
+ flags,
+ call->cancellable,
+ pk_call_cb,
+ call);
+ g_object_unref (subject);
+ return TRUE;
+}
+
+void
+nm_auth_chain_unref (NMAuthChain *self)
+{
+ GSList *iter;
+
+ g_return_if_fail (self != NULL);
+
+ self->refcount--;
+ if (self->refcount > 0)
+ return;
+
+ g_object_unref (self->authority);
+ g_free (self->owner);
+
+ for (iter = self->calls; iter; iter = g_slist_next (iter))
+ polkit_call_cancel ((PolkitCall *) iter->data);
+ g_slist_free (self->calls);
+
+ g_clear_error (&self->error);
+ g_hash_table_destroy (self->data);
+
+ memset (self, 0, sizeof (NMAuthChain));
+ g_free (self);
+}
+
+/************ utils **************/
+
+gboolean
+nm_auth_get_caller_uid (DBusGMethodInvocation *context,
+ NMDBusManager *dbus_mgr,
+ gulong *out_uid,
+ const char **out_error_desc)
+{
+ DBusConnection *connection;
+ char *sender = NULL;
+ gboolean success = FALSE;
+ DBusError dbus_error;
+
+ g_return_val_if_fail (context != NULL, FALSE);
+ g_return_val_if_fail (dbus_mgr != NULL, FALSE);
+ g_return_val_if_fail (out_uid != NULL, FALSE);
+
+ *out_uid = G_MAXULONG;
+
+ sender = dbus_g_method_get_sender (context);
+ if (!sender) {
+ if (out_error_desc)
+ *out_error_desc = "Could not determine D-Bus requestor";
+ goto out;
+ }
+
+ connection = nm_dbus_manager_get_dbus_connection (dbus_mgr);
+ if (!connection) {
+ if (out_error_desc)
+ *out_error_desc = "Could not get the D-Bus system bus";
+ goto out;
+ }
+
+ dbus_error_init (&dbus_error);
+ /* FIXME: do this async */
+ *out_uid = dbus_bus_get_unix_user (connection, sender, &dbus_error);
+ if (dbus_error_is_set (&dbus_error)) {
+ if (out_error_desc)
+ *out_error_desc = "Could not determine the user ID of the requestor";
+ dbus_error_free (&dbus_error);
+ *out_uid = G_MAXULONG;
+ } else
+ success = TRUE;
+
+out:
+ g_free (sender);
+ return success;
+}
+
+gboolean
+nm_auth_uid_authorized (gulong uid,
+ NMDBusManager *dbus_mgr,
+ DBusGProxy *user_proxy,
+ const char **out_error_desc)
+{
+ DBusConnection *connection;
+ DBusError dbus_error;
+ char *service_owner = NULL;
+ const char *service_name;
+ gulong service_uid = G_MAXULONG;
+
+ g_return_val_if_fail (dbus_mgr != NULL, FALSE);
+ g_return_val_if_fail (out_error_desc != NULL, FALSE);
+
+ /* Ensure the request to activate the user connection came from the
+ * same session as the user settings service. FIXME: use ConsoleKit
+ * too.
+ */
+
+ if (!user_proxy) {
+ *out_error_desc = "No user settings service available";
+ return FALSE;
+ }
+
+ service_name = dbus_g_proxy_get_bus_name (user_proxy);
+ if (!service_name) {
+ *out_error_desc = "Could not determine user settings service name";
+ return FALSE;
+ }
+
+ connection = nm_dbus_manager_get_dbus_connection (dbus_mgr);
+ if (!connection) {
+ *out_error_desc = "Could not get the D-Bus system bus";
+ return FALSE;
+ }
+
+ service_owner = nm_dbus_manager_get_name_owner (dbus_mgr, service_name, NULL);
+ if (!service_owner) {
+ *out_error_desc = "Could not determine D-Bus owner of the user settings service";
+ return FALSE;
+ }
+
+ dbus_error_init (&dbus_error);
+ service_uid = dbus_bus_get_unix_user (connection, service_owner, &dbus_error);
+ g_free (service_owner);
+
+ if (dbus_error_is_set (&dbus_error)) {
+ dbus_error_free (&dbus_error);
+ *out_error_desc = "Could not determine the Unix UID of the sender of the request";
+ return FALSE;
+ }
+
+ /* And finally, the actual UID check */
+ if (uid != service_uid) {
+ *out_error_desc = "Requestor UID does not match the UID of the user settings service";
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
diff --git a/src/nm-manager-auth.h b/src/nm-manager-auth.h
new file mode 100644
index 0000000000..6682f91ca1
--- /dev/null
+++ b/src/nm-manager-auth.h
@@ -0,0 +1,94 @@
+/* -*- 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) 2010 Red Hat, Inc.
+ */
+
+#ifndef NM_MANAGER_AUTH_H
+#define NM_MANAGER_AUTH_H
+
+#include <polkit/polkit.h>
+#include <glib.h>
+#include <dbus/dbus-glib.h>
+
+#include "nm-dbus-manager.h"
+
+#define NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK "org.freedesktop.NetworkManager.enable-disable-network"
+#define NM_AUTH_PERMISSION_SLEEP_WAKE "org.freedesktop.NetworkManager.sleep-wake"
+#define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI "org.freedesktop.NetworkManager.enable-disable-wifi"
+#define NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN "org.freedesktop.NetworkManager.enable-disable-wwan"
+#define NM_AUTH_PERMISSION_USE_USER_CONNECTIONS "org.freedesktop.NetworkManager.use-user-connections"
+#define NM_AUTH_PERMISSION_NETWORK_CONTROL "org.freedesktop.NetworkManager.network-control"
+
+
+typedef struct NMAuthChain NMAuthChain;
+
+typedef enum {
+ NM_AUTH_CALL_RESULT_UNKNOWN,
+ NM_AUTH_CALL_RESULT_YES,
+ NM_AUTH_CALL_RESULT_AUTH,
+ NM_AUTH_CALL_RESULT_NO,
+} NMAuthCallResult;
+
+typedef void (*NMAuthChainResultFunc) (NMAuthChain *chain,
+ GError *error,
+ DBusGMethodInvocation *context,
+ gpointer user_data);
+
+typedef void (*NMAuthChainCallFunc) (NMAuthChain *chain,
+ const char *permission,
+ GError *error,
+ NMAuthCallResult result,
+ gpointer user_data);
+
+NMAuthChain *nm_auth_chain_new (PolkitAuthority *authority,
+ DBusGMethodInvocation *context,
+ DBusGProxy *proxy,
+ NMAuthChainResultFunc done_func,
+ gpointer user_data);
+
+NMAuthChain *nm_auth_chain_new_raw_message (PolkitAuthority *authority,
+ DBusMessage *message,
+ NMAuthChainResultFunc done_func,
+ gpointer user_data);
+
+gpointer nm_auth_chain_get_data (NMAuthChain *chain, const char *tag);
+
+void nm_auth_chain_set_data (NMAuthChain *chain,
+ const char *tag,
+ gpointer data,
+ GDestroyNotify data_destroy);
+
+gboolean nm_auth_chain_add_call (NMAuthChain *chain,
+ const char *permission,
+ gboolean allow_interaction);
+
+void nm_auth_chain_unref (NMAuthChain *chain);
+
+/* Utils */
+gboolean nm_auth_get_caller_uid (DBusGMethodInvocation *context,
+ NMDBusManager *dbus_mgr,
+ gulong *out_uid,
+ const char **out_error_desc);
+
+gboolean nm_auth_uid_authorized (gulong uid,
+ NMDBusManager *dbus_mgr,
+ DBusGProxy *user_proxy,
+ const char **out_error_desc);
+
+#endif /* NM_MANAGER_AUTH_H */
+
diff --git a/src/nm-manager.c b/src/nm-manager.c
index ee7a536ddc..55e4b45ba8 100644
--- a/src/nm-manager.c
+++ b/src/nm-manager.c
@@ -19,6 +19,8 @@
* Copyright (C) 2007 - 2010 Red Hat, Inc.
*/
+#include <config.h>
+
#include <netinet/ether.h>
#include <string.h>
#include <dbus/dbus-glib-lowlevel.h>
@@ -55,32 +57,35 @@
#include "nm-secrets-provider-interface.h"
#include "nm-settings-interface.h"
#include "nm-settings-system-interface.h"
+#include "nm-manager-auth.h"
#define NM_AUTOIP_DBUS_SERVICE "org.freedesktop.nm_avahi_autoipd"
#define NM_AUTOIP_DBUS_IFACE "org.freedesktop.nm_avahi_autoipd"
-#define NM_MANAGER_STATE "state"
-#define NM_MANAGER_WIRELESS_ENABLED "wireless-enabled"
-#define NM_MANAGER_WIRELESS_HARDWARE_ENABLED "wireless-hardware-enabled"
-#define NM_MANAGER_WWAN_ENABLED "wwan-enabled"
-#define NM_MANAGER_WWAN_HARDWARE_ENABLED "wwan-hardware-enabled"
-#define NM_MANAGER_WIMAX_ENABLED "wimax-enabled"
-#define NM_MANAGER_WIMAX_HARDWARE_ENABLED "wimax-hardware-enabled"
-#define NM_MANAGER_ACTIVE_CONNECTIONS "active-connections"
+#define UPOWER_DBUS_SERVICE "org.freedesktop.UPower"
static gboolean impl_manager_get_devices (NMManager *manager, GPtrArray **devices, GError **err);
static void impl_manager_activate_connection (NMManager *manager,
- const char *service_name,
- const char *connection_path,
- const char *device_path,
- const char *specific_object_path,
- DBusGMethodInvocation *context);
+ const char *service_name,
+ const char *connection_path,
+ const char *device_path,
+ const char *specific_object_path,
+ DBusGMethodInvocation *context);
+
+static void impl_manager_deactivate_connection (NMManager *manager,
+ const char *connection_path,
+ DBusGMethodInvocation *context);
-static gboolean impl_manager_deactivate_connection (NMManager *manager,
- const char *connection_path,
- GError **error);
+static void impl_manager_sleep (NMManager *manager,
+ gboolean do_sleep,
+ DBusGMethodInvocation *context);
-static gboolean impl_manager_sleep (NMManager *manager, gboolean sleep, GError **err);
+static void impl_manager_enable (NMManager *manager,
+ gboolean enable,
+ DBusGMethodInvocation *context);
+
+static void impl_manager_get_permissions (NMManager *manager,
+ DBusGMethodInvocation *context);
static gboolean impl_manager_set_logging (NMManager *manager,
const char *level,
@@ -89,14 +94,12 @@ static gboolean impl_manager_set_logging (NMManager *manager,
/* Legacy 0.6 compatibility interface */
-static gboolean impl_manager_legacy_sleep (NMManager *manager, GError **err);
-static gboolean impl_manager_legacy_wake (NMManager *manager, GError **err);
+static void impl_manager_legacy_sleep (NMManager *manager, DBusGMethodInvocation *context);
+static void impl_manager_legacy_wake (NMManager *manager, DBusGMethodInvocation *context);
static gboolean impl_manager_legacy_state (NMManager *manager, guint32 *state, GError **err);
#include "nm-manager-glue.h"
-static void user_destroy_connections (NMManager *manager);
-
static void connection_added_default_handler (NMManager *manager,
NMConnection *connection,
NMConnectionScope scope);
@@ -141,25 +144,52 @@ static NMDevice *find_device_by_iface (NMManager *self, const gchar *iface);
static GSList * remove_one_device (NMManager *manager,
GSList *list,
NMDevice *device,
- gboolean quitting,
- gboolean force_unmanage);
+ gboolean quitting);
static NMDevice *nm_manager_get_device_by_udi (NMManager *manager, const char *udi);
+/* Fix for polkit 0.97 and later */
+#if !HAVE_POLKIT_AUTHORITY_GET_SYNC
+static inline PolkitAuthority *
+polkit_authority_get_sync (GCancellable *cancellable, GError **error)
+{
+ PolkitAuthority *authority;
+
+ authority = polkit_authority_get ();
+ if (!authority)
+ g_set_error (error, 0, 0, "failed to get the PolicyKit authority");
+ return authority;
+}
+#endif
+
#define SSD_POKE_INTERVAL 120
#define ORIGDEV_TAG "originating-device"
-typedef struct {
+typedef struct PendingActivation PendingActivation;
+typedef void (*PendingActivationFunc) (PendingActivation *pending,
+ GError *error);
+
+struct PendingActivation {
+ NMManager *manager;
+
DBusGMethodInvocation *context;
+ PolkitAuthority *authority;
+ PendingActivationFunc callback;
+ NMAuthChain *chain;
+
+ gboolean have_connection;
+ gboolean authorized;
+
NMConnectionScope scope;
char *connection_path;
char *specific_object_path;
char *device_path;
guint timeout_id;
-} PendingConnectionInfo;
+};
typedef struct {
- gboolean enabled;
+ gboolean user_enabled;
+ gboolean sw_enabled;
gboolean hw_enabled;
RfKillType rtype;
const char *desc;
@@ -182,6 +212,8 @@ typedef struct {
GHashTable *user_connections;
DBusGProxy *user_proxy;
+ NMAuthCallResult user_con_perm;
+ NMAuthCallResult user_net_perm;
GHashTable *system_connections;
NMSysconfigSettings *sys_settings;
@@ -189,10 +221,11 @@ typedef struct {
GSList *secrets_calls;
- PendingConnectionInfo *pending_connection_info;
+ GSList *pending_activations;
RadioState radio_states[RFKILL_TYPE_MAX];
gboolean sleeping;
+ gboolean net_enabled;
NMVPNManager *vpn_manager;
guint vpn_manager_id;
@@ -202,6 +235,18 @@ typedef struct {
guint modem_removed_id;
DBusGProxy *aipd_proxy;
+ DBusGProxy *upower_proxy;
+
+ PolkitAuthority *authority;
+ guint auth_changed_id;
+ GSList *auth_chains;
+
+ /* Firmware dir monitor */
+ GFileMonitor *fw_monitor;
+ guint fw_monitor_id;
+ guint fw_changed_id;
+
+ guint timestamp_update_id;
gboolean disposed;
} NMManagerPrivate;
@@ -222,6 +267,8 @@ enum {
CONNECTION_ADDED,
CONNECTION_UPDATED,
CONNECTION_REMOVED,
+ CHECK_PERMISSIONS,
+ USER_PERMISSIONS_CHANGED,
LAST_SIGNAL
};
@@ -230,7 +277,9 @@ static guint signals[LAST_SIGNAL] = { 0 };
enum {
PROP_0,
+ PROP_VERSION,
PROP_STATE,
+ PROP_NETWORKING_ENABLED,
PROP_WIRELESS_ENABLED,
PROP_WIRELESS_HARDWARE_ENABLED,
PROP_WWAN_ENABLED,
@@ -256,6 +305,7 @@ typedef enum
NM_MANAGER_ERROR_PERMISSION_DENIED,
NM_MANAGER_ERROR_CONNECTION_NOT_ACTIVE,
NM_MANAGER_ERROR_ALREADY_ASLEEP_OR_AWAKE,
+ NM_MANAGER_ERROR_ALREADY_ENABLED_OR_DISABLED,
} NMManagerError;
#define NM_MANAGER_ERROR (nm_manager_error_quark ())
@@ -298,6 +348,8 @@ nm_manager_error_get_type (void)
ENUM_ENTRY (NM_MANAGER_ERROR_CONNECTION_NOT_ACTIVE, "ConnectionNotActive"),
/* The manager is already in the requested sleep state */
ENUM_ENTRY (NM_MANAGER_ERROR_ALREADY_ASLEEP_OR_AWAKE, "AlreadyAsleepOrAwake"),
+ /* The manager is already in the requested enabled/disabled state */
+ ENUM_ENTRY (NM_MANAGER_ERROR_ALREADY_ENABLED_OR_DISABLED, "AlreadyEnabledOrDisabled"),
{ 0, 0, 0 },
};
etype = g_enum_register_static ("NMManagerError", values);
@@ -305,6 +357,16 @@ nm_manager_error_get_type (void)
return etype;
}
+static gboolean
+manager_sleeping (NMManager *self)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+
+ if (priv->sleeping || !priv->net_enabled)
+ return TRUE;
+ return FALSE;
+}
+
static void
vpn_manager_connection_deactivated_cb (NMVPNManager *manager,
NMVPNConnection *vpn,
@@ -334,8 +396,7 @@ modem_added (NMModemManager *modem_manager,
priv->devices = remove_one_device (NM_MANAGER (user_data),
priv->devices,
replace_device,
- FALSE,
- TRUE);
+ FALSE);
}
/* Give Bluetooth DUN devices first chance to claim the modem */
@@ -377,9 +438,9 @@ nm_manager_update_state (NMManager *manager)
priv = NM_MANAGER_GET_PRIVATE (manager);
- if (priv->sleeping) {
+ if (manager_sleeping (manager))
new_state = NM_STATE_ASLEEP;
- } else {
+ else {
GSList *iter;
for (iter = priv->devices; iter; iter = iter->next) {
@@ -406,6 +467,45 @@ nm_manager_update_state (NMManager *manager)
}
static void
+ignore_cb (NMSettingsConnectionInterface *connection, GError *error, gpointer user_data)
+{
+}
+
+static void
+update_active_connection_timestamp (NMManager *manager, NMDevice *device)
+{
+ NMActRequest *req;
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ NMSettingsConnectionInterface *connection_interface;
+ NMManagerPrivate *priv;
+
+ g_return_if_fail (NM_IS_DEVICE (device));
+
+ priv = NM_MANAGER_GET_PRIVATE (manager);
+ req = nm_device_get_act_request (device);
+ if (!req)
+ return;
+
+ connection = nm_act_request_get_connection (req);
+ g_assert (connection);
+
+ if (nm_connection_get_scope (connection) != NM_CONNECTION_SCOPE_SYSTEM)
+ return;
+
+ s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (NM_CONNECTION (connection), NM_TYPE_SETTING_CONNECTION));
+ g_assert (s_con);
+ g_object_set (s_con, NM_SETTING_CONNECTION_TIMESTAMP, (guint64) time (NULL), NULL);
+
+ if (nm_setting_connection_get_read_only (s_con))
+ return;
+
+ connection_interface = nm_settings_interface_get_connection_by_path (NM_SETTINGS_INTERFACE (priv->sys_settings),
+ nm_connection_get_path (connection));
+ nm_settings_connection_interface_update (connection_interface, ignore_cb, NULL);
+}
+
+static void
manager_device_state_changed (NMDevice *device,
NMDeviceState new_state,
NMDeviceState old_state,
@@ -427,6 +527,9 @@ manager_device_state_changed (NMDevice *device,
}
nm_manager_update_state (manager);
+
+ if (new_state == NM_DEVICE_STATE_ACTIVATED)
+ update_active_connection_timestamp (manager, device);
}
/* Removes a device from a device list; returns the start of the new device list */
@@ -434,20 +537,22 @@ static GSList *
remove_one_device (NMManager *manager,
GSList *list,
NMDevice *device,
- gboolean quitting,
- gboolean force_unmanage)
+ gboolean quitting)
{
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
if (nm_device_get_managed (device)) {
- gboolean unmanage = !quitting;
-
- /* Don't unmanage active assume-connection-capable devices at shutdown */
- if ( nm_device_interface_can_assume_connection (NM_DEVICE_INTERFACE (device))
- && nm_device_get_state (device) == NM_DEVICE_STATE_ACTIVATED)
- unmanage = FALSE;
+ /* When quitting, we want to leave up interfaces & connections
+ * that can be taken over again (ie, "assumed") when NM restarts
+ * so that '/etc/init.d/NetworkManager restart' will not distrupt
+ * networking for interfaces that support connection assumption.
+ * All other devices get unmanaged when NM quits so that their
+ * connections get torn down and the interface is deactivated.
+ */
- if (unmanage || force_unmanage)
+ if ( !nm_device_interface_can_assume_connections (NM_DEVICE_INTERFACE (device))
+ || (nm_device_get_state (device) != NM_DEVICE_STATE_ACTIVATED)
+ || !quitting)
nm_device_set_managed (device, FALSE, NM_DEVICE_STATE_REASON_REMOVED);
}
@@ -481,7 +586,7 @@ modem_removed (NMModemManager *modem_manager,
/* Otherwise remove the standalone modem */
found = nm_manager_get_device_by_udi (self, nm_modem_get_path (modem));
if (found)
- priv->devices = remove_one_device (self, priv->devices, found, FALSE, TRUE);
+ priv->devices = remove_one_device (self, priv->devices, found, FALSE);
}
static void
@@ -555,19 +660,237 @@ emit_removed (gpointer key, gpointer value, gpointer user_data)
}
static void
-pending_connection_info_destroy (PendingConnectionInfo *info)
+nm_manager_pending_activation_remove (NMManager *self,
+ PendingActivation *pending)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+
+ priv->pending_activations = g_slist_remove (priv->pending_activations, pending);
+}
+
+static PendingActivation *
+pending_activation_new (NMManager *manager,
+ PolkitAuthority *authority,
+ DBusGMethodInvocation *context,
+ const char *device_path,
+ NMConnectionScope scope,
+ const char *connection_path,
+ const char *specific_object_path,
+ PendingActivationFunc callback)
+{
+ PendingActivation *pending;
+
+ g_return_val_if_fail (manager != NULL, NULL);
+ g_return_val_if_fail (authority != NULL, NULL);
+ g_return_val_if_fail (context != NULL, NULL);
+ g_return_val_if_fail (device_path != NULL, NULL);
+ g_return_val_if_fail (connection_path != NULL, NULL);
+
+ pending = g_slice_new0 (PendingActivation);
+ pending->manager = manager;
+ pending->authority = authority;
+ pending->context = context;
+ pending->callback = callback;
+
+ pending->device_path = g_strdup (device_path);
+ pending->scope = scope;
+ pending->connection_path = g_strdup (connection_path);
+
+ /* "/" is special-cased to NULL to get through D-Bus */
+ if (specific_object_path && strcmp (specific_object_path, "/"))
+ pending->specific_object_path = g_strdup (specific_object_path);
+
+ return pending;
+}
+
+static void
+pending_auth_user_done (NMAuthChain *chain,
+ GError *error,
+ DBusGMethodInvocation *context,
+ gpointer user_data)
+{
+ PendingActivation *pending = user_data;
+ NMAuthCallResult result;
+
+ pending->chain = NULL;
+
+ if (error) {
+ pending->callback (pending, error);
+ goto out;
+ }
+
+ /* Caller has had a chance to obtain authorization, so we only need to
+ * check for 'yes' here.
+ */
+ result = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, NM_AUTH_PERMISSION_USE_USER_CONNECTIONS));
+ if (result != NM_AUTH_CALL_RESULT_YES) {
+ error = g_error_new_literal (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_PERMISSION_DENIED,
+ "Not authorized to use user connections.");
+ pending->callback (pending, error);
+ g_error_free (error);
+ } else
+ pending->callback (pending, NULL);
+
+out:
+ nm_auth_chain_unref (chain);
+}
+
+static void
+pending_auth_net_done (NMAuthChain *chain,
+ GError *error,
+ DBusGMethodInvocation *context,
+ gpointer user_data)
+{
+ PendingActivation *pending = user_data;
+ NMAuthCallResult result;
+
+ pending->chain = NULL;
+
+ if (error) {
+ pending->callback (pending, error);
+ goto out;
+ }
+
+ /* Caller has had a chance to obtain authorization, so we only need to
+ * check for 'yes' here.
+ */
+ result = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, NM_AUTH_PERMISSION_NETWORK_CONTROL));
+ if (result != NM_AUTH_CALL_RESULT_YES) {
+ error = g_error_new_literal (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_PERMISSION_DENIED,
+ "Not authorized to control networking.");
+ pending->callback (pending, error);
+ g_error_free (error);
+ goto out;
+ }
+
+ if (pending->scope == NM_CONNECTION_SCOPE_SYSTEM) {
+ /* System connection and the user is authorized for that if they have
+ * the network-control permission.
+ */
+ pending->callback (pending, NULL);
+ } else {
+ g_assert (pending->scope == NM_CONNECTION_SCOPE_USER);
+
+ /* User connection, check the 'use-user-connections' permission */
+ pending->chain = nm_auth_chain_new (pending->authority,
+ pending->context,
+ NULL,
+ pending_auth_user_done,
+ pending);
+ nm_auth_chain_add_call (pending->chain,
+ NM_AUTH_PERMISSION_USE_USER_CONNECTIONS,
+ TRUE);
+ }
+
+out:
+ nm_auth_chain_unref (chain);
+}
+
+static gboolean
+check_user_authorized (NMDBusManager *dbus_mgr,
+ DBusGProxy *user_proxy,
+ DBusGMethodInvocation *context,
+ NMConnectionScope scope,
+ gulong *out_sender_uid,
+ const char **out_error_desc)
+{
+ g_return_val_if_fail (dbus_mgr != NULL, FALSE);
+ g_return_val_if_fail (context != NULL, FALSE);
+ g_return_val_if_fail (out_sender_uid != NULL, FALSE);
+ g_return_val_if_fail (out_error_desc != NULL, FALSE);
+
+ *out_sender_uid = G_MAXULONG;
+
+ /* Get the UID */
+ if (!nm_auth_get_caller_uid (context, dbus_mgr, out_sender_uid, out_error_desc))
+ return FALSE;
+
+ /* root gets to do anything */
+ if (0 == *out_sender_uid)
+ return TRUE;
+
+ /* Check whether the UID is authorized for user connections */
+ if ( scope == NM_CONNECTION_SCOPE_USER
+ && !nm_auth_uid_authorized (*out_sender_uid,
+ dbus_mgr,
+ user_proxy,
+ out_error_desc))
+ return FALSE;
+
+ return TRUE;
+}
+
+static void
+pending_activation_check_authorized (PendingActivation *pending,
+ NMDBusManager *dbus_mgr,
+ DBusGProxy *user_proxy)
{
- if (!info)
+ const char *error_desc = NULL;
+ gulong sender_uid = G_MAXULONG;
+ GError *error;
+
+ g_return_if_fail (pending != NULL);
+ g_return_if_fail (dbus_mgr != NULL);
+
+ if (!check_user_authorized (dbus_mgr,
+ user_proxy,
+ pending->context,
+ pending->scope,
+ &sender_uid,
+ &error_desc)) {
+ error = g_error_new_literal (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_PERMISSION_DENIED,
+ error_desc);
+ pending->callback (pending, error);
+ g_error_free (error);
return;
+ }
- if (info->timeout_id)
- g_source_remove (info->timeout_id);
+ /* Yay for root */
+ if (0 == sender_uid) {
+ pending->callback (pending, NULL);
+ return;
+ }
- g_free (info->connection_path);
- g_free (info->specific_object_path);
- g_free (info->device_path);
+ /* First check if the user is allowed to use networking at all, giving
+ * the user a chance to authenticate to gain the permission.
+ */
+ pending->chain = nm_auth_chain_new (pending->authority,
+ pending->context,
+ NULL,
+ pending_auth_net_done,
+ pending);
+ g_assert (pending->chain);
+ nm_auth_chain_add_call (pending->chain,
+ NM_AUTH_PERMISSION_NETWORK_CONTROL,
+ TRUE);
+}
+
+static void
+pending_activation_destroy (PendingActivation *pending,
+ GError *error,
+ const char *ac_path)
+{
+ g_return_if_fail (pending != NULL);
+
+ if (pending->timeout_id)
+ g_source_remove (pending->timeout_id);
+ g_free (pending->connection_path);
+ g_free (pending->specific_object_path);
+ g_free (pending->device_path);
+
+ if (error)
+ dbus_g_method_return_error (pending->context, error);
+ else if (ac_path)
+ dbus_g_method_return (pending->context, ac_path);
+
+ if (pending->chain)
+ nm_auth_chain_unref (pending->chain);
- g_slice_free (PendingConnectionInfo, info);
+ memset (pending, 0, sizeof (PendingActivation));
+ g_slice_free (PendingActivation, pending);
}
static GPtrArray *
@@ -627,27 +950,34 @@ remove_connection (NMManager *manager,
/*******************************************************************/
static void
-user_destroy_connections (NMManager *manager)
+user_proxy_cleanup (NMManager *self, gboolean resync_bt)
{
- NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
if (priv->user_connections) {
- g_hash_table_foreach (priv->user_connections, emit_removed, manager);
+ g_hash_table_foreach (priv->user_connections, emit_removed, self);
g_hash_table_remove_all (priv->user_connections);
}
+ priv->user_net_perm = NM_AUTH_CALL_RESULT_UNKNOWN;
+ priv->user_con_perm = NM_AUTH_CALL_RESULT_UNKNOWN;
+
if (priv->user_proxy) {
g_object_unref (priv->user_proxy);
priv->user_proxy = NULL;
}
+
+ if (resync_bt) {
+ /* Resync BT devices since they are generated from connections */
+ bluez_manager_resync_devices (self);
+ }
}
typedef struct GetSettingsInfo {
NMManager *manager;
NMConnection *connection;
DBusGProxy *proxy;
- DBusGProxyCall *call;
- GSList **calls;
+ guint32 *calls;
} GetSettingsInfo;
static void
@@ -659,10 +989,9 @@ free_get_settings_info (gpointer data)
* send out the connections-added signal.
*/
if (info->calls) {
- *(info->calls) = g_slist_remove (*(info->calls), info->call);
- if (g_slist_length (*(info->calls)) == 0) {
- g_slist_free (*(info->calls));
- g_slice_free (GSList, (gpointer) info->calls);
+ (*info->calls)--;
+ if (*info->calls == 0) {
+ g_slice_free (guint32, (gpointer) info->calls);
g_signal_emit (info->manager, signals[CONNECTIONS_ADDED], 0, NM_CONNECTION_SCOPE_USER);
/* Update the Bluetooth connections for all the new connections */
@@ -833,20 +1162,18 @@ user_connection_updated_cb (DBusGProxy *proxy,
}
static void
-user_internal_new_connection_cb (DBusGProxy *proxy,
+user_internal_new_connection_cb (NMManager *manager,
const char *path,
- NMManager *manager,
- GSList **calls)
+ guint32 *counter)
{
- struct GetSettingsInfo *info;
+ GetSettingsInfo *info;
DBusGProxy *con_proxy;
DBusGConnection *g_connection;
- DBusGProxyCall *call;
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
g_connection = nm_dbus_manager_get_connection (priv->dbus_mgr);
con_proxy = dbus_g_proxy_new_for_name (g_connection,
- dbus_g_proxy_get_bus_name (proxy),
+ NM_DBUS_SERVICE_USER_SETTINGS,
path,
NM_DBUS_IFACE_SETTINGS_CONNECTION);
if (!con_proxy) {
@@ -870,16 +1197,16 @@ user_internal_new_connection_cb (DBusGProxy *proxy,
info = g_slice_new0 (GetSettingsInfo);
info->manager = g_object_ref (manager);
- info->calls = calls;
- call = dbus_g_proxy_begin_call (con_proxy, "GetSettings",
- user_connection_get_settings_cb,
- info,
- free_get_settings_info,
- G_TYPE_INVALID);
- info->call = call;
info->proxy = con_proxy;
- if (info->calls)
- *(info->calls) = g_slist_prepend (*(info->calls), call);
+ if (counter) {
+ info->calls = counter;
+ (*info->calls)++;
+ }
+ dbus_g_proxy_begin_call (con_proxy, "GetSettings",
+ user_connection_get_settings_cb,
+ info,
+ free_get_settings_info,
+ G_TYPE_INVALID);
}
static void
@@ -890,7 +1217,7 @@ user_list_connections_cb (DBusGProxy *proxy,
NMManager *manager = NM_MANAGER (user_data);
GError *err = NULL;
GPtrArray *ops;
- GSList **calls = NULL;
+ guint32 *counter = NULL;
int i;
if (!dbus_g_proxy_end_call (proxy, call_id, &err,
@@ -898,72 +1225,172 @@ user_list_connections_cb (DBusGProxy *proxy,
G_TYPE_INVALID)) {
nm_log_warn (LOGD_USER_SET, "couldn't retrieve connections: %s",
err && err->message ? err->message : "(unknown)");
- g_error_free (err);
- goto out;
+ g_clear_error (&err);
+ return;
}
/* Keep track of all calls made here; don't want to emit connection-added for
* each one, but emit connections-added when they are all done.
*/
- calls = g_slice_new0 (GSList *);
-
+ counter = g_slice_new0 (guint32);
for (i = 0; i < ops->len; i++) {
char *op = g_ptr_array_index (ops, i);
- user_internal_new_connection_cb (proxy, op, manager, calls);
+ user_internal_new_connection_cb (manager, op, counter);
g_free (op);
}
-
g_ptr_array_free (ops, TRUE);
+}
-out:
- return;
+static void
+user_proxy_destroyed_cb (DBusGProxy *proxy, NMManager *self)
+{
+ nm_log_dbg (LOGD_USER_SET, "Removing user connections...");
+
+ /* At this point the user proxy is already being disposed */
+ NM_MANAGER_GET_PRIVATE (self)->user_proxy = NULL;
+
+ /* User Settings service disappeared; throw away user connections */
+ user_proxy_cleanup (self, TRUE);
}
static void
user_new_connection_cb (DBusGProxy *proxy, const char *path, gpointer user_data)
{
- user_internal_new_connection_cb (proxy, path, NM_MANAGER (user_data), NULL);
+ user_internal_new_connection_cb (NM_MANAGER (user_data), path, NULL);
+}
+
+static gboolean
+user_settings_authorized (NMManager *self, NMAuthChain *chain)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ NMAuthCallResult old_net_perm = priv->user_net_perm;
+ NMAuthCallResult old_con_perm = priv->user_con_perm;
+
+ /* If the user could potentially get authorization to use networking and/or
+ * to use user connections, the user settings service is authorized.
+ */
+ priv->user_net_perm = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, NM_AUTH_PERMISSION_NETWORK_CONTROL));
+ priv->user_con_perm = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, NM_AUTH_PERMISSION_USE_USER_CONNECTIONS));
+
+ nm_log_dbg (LOGD_USER_SET, "User connections permissions: net %d, con %d",
+ priv->user_net_perm, priv->user_con_perm);
+
+ if (old_net_perm != priv->user_net_perm || old_con_perm != priv->user_con_perm)
+ g_signal_emit (self, signals[USER_PERMISSIONS_CHANGED], 0);
+
+ /* If the user can't control the network they certainly aren't allowed
+ * to provide user connections.
+ */
+ if ( priv->user_net_perm == NM_AUTH_CALL_RESULT_UNKNOWN
+ || priv->user_net_perm == NM_AUTH_CALL_RESULT_NO)
+ return FALSE;
+
+ /* And of course if they aren't allowed to use user connections, they can't
+ * provide them either.
+ */
+ if ( priv->user_con_perm == NM_AUTH_CALL_RESULT_UNKNOWN
+ || priv->user_con_perm == NM_AUTH_CALL_RESULT_NO)
+ return FALSE;
+
+ return TRUE;
}
static void
-user_query_connections (NMManager *manager)
+user_proxy_auth_done (NMAuthChain *chain,
+ GError *error,
+ DBusGMethodInvocation *context,
+ gpointer user_data)
{
- NMManagerPrivate *priv;
- DBusGProxyCall *call;
- DBusGConnection *g_connection;
+ NMManager *self = NM_MANAGER (user_data);
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ gboolean authorized = FALSE;
- g_return_if_fail (NM_IS_MANAGER (manager));
+ priv->auth_chains = g_slist_remove (priv->auth_chains, chain);
- priv = NM_MANAGER_GET_PRIVATE (manager);
- if (!priv->user_proxy) {
- g_connection = nm_dbus_manager_get_connection (priv->dbus_mgr);
- priv->user_proxy = dbus_g_proxy_new_for_name (g_connection,
- NM_DBUS_SERVICE_USER_SETTINGS,
- NM_DBUS_PATH_SETTINGS,
- NM_DBUS_IFACE_SETTINGS);
- if (!priv->user_proxy) {
- nm_log_err (LOGD_USER_SET, "could not init user settings proxy");
- return;
- }
+ if (error) {
+ nm_log_warn (LOGD_USER_SET, "User connections unavailable: (%d) %s",
+ error->code, error->message ? error->message : "(unknown)");
+ } else
+ authorized = user_settings_authorized (self, chain);
- dbus_g_proxy_add_signal (priv->user_proxy,
- "NewConnection",
- DBUS_TYPE_G_OBJECT_PATH,
- G_TYPE_INVALID);
+ if (authorized) {
+ /* If authorized, finish setting up the user settings service proxy */
+ nm_log_dbg (LOGD_USER_SET, "Requesting user connections...");
+
+ authorized = TRUE;
+ dbus_g_proxy_add_signal (priv->user_proxy,
+ "NewConnection",
+ DBUS_TYPE_G_OBJECT_PATH,
+ G_TYPE_INVALID);
dbus_g_proxy_connect_signal (priv->user_proxy, "NewConnection",
- G_CALLBACK (user_new_connection_cb),
- manager,
- NULL);
+ G_CALLBACK (user_new_connection_cb),
+ self,
+ NULL);
+
+ /* Clean up when the user settings proxy goes away */
+ g_signal_connect (priv->user_proxy, "destroy",
+ G_CALLBACK (user_proxy_destroyed_cb),
+ self);
+
+ /* Request user connections */
+ dbus_g_proxy_begin_call (priv->user_proxy, "ListConnections",
+ user_list_connections_cb,
+ self,
+ NULL,
+ G_TYPE_INVALID);
+ } else {
+ /* Otherwise, we ignore the user settings service completely */
+ user_proxy_cleanup (self, TRUE);
+ }
+
+ nm_auth_chain_unref (chain);
+}
+
+static void
+user_proxy_init (NMManager *self)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ DBusGConnection *bus;
+ NMAuthChain *chain;
+ GError *error = NULL;
+
+ g_return_if_fail (self != NULL);
+ g_return_if_fail (priv->user_proxy == NULL);
+
+ /* Don't try to initialize the user settings proxy if the user
+ * settings service doesn't actually exist.
+ */
+ if (!nm_dbus_manager_name_has_owner (priv->dbus_mgr, NM_DBUS_SERVICE_USER_SETTINGS))
+ return;
+
+ bus = nm_dbus_manager_get_connection (priv->dbus_mgr);
+ priv->user_proxy = dbus_g_proxy_new_for_name_owner (bus,
+ NM_DBUS_SERVICE_USER_SETTINGS,
+ NM_DBUS_PATH_SETTINGS,
+ NM_DBUS_IFACE_SETTINGS,
+ &error);
+ if (!priv->user_proxy) {
+ nm_log_err (LOGD_USER_SET, "could not init user settings proxy: (%d) %s",
+ error ? error->code : -1,
+ error && error->message ? error->message : "(unknown)");
+ g_clear_error (&error);
+ return;
}
- /* grab connections */
- call = dbus_g_proxy_begin_call (priv->user_proxy, "ListConnections",
- user_list_connections_cb,
- manager,
- NULL,
- G_TYPE_INVALID);
+ /* Kick off some PolicyKit authorization requests to figure out what
+ * permissions this user settings service has.
+ */
+ chain = nm_auth_chain_new (priv->authority,
+ NULL,
+ priv->user_proxy,
+ user_proxy_auth_done,
+ self);
+ priv->auth_chains = g_slist_prepend (priv->auth_chains, chain);
+
+ nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_USE_USER_CONNECTIONS, FALSE);
+ nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_NETWORK_CONTROL, FALSE);
}
/*******************************************************************/
@@ -1037,6 +1464,7 @@ system_internal_new_connection (NMManager *manager,
path = nm_connection_get_path (NM_CONNECTION (connection));
g_hash_table_insert (priv->system_connections, g_strdup (path),
g_object_ref (connection));
+ g_signal_emit (manager, signals[CONNECTION_ADDED], 0, connection, NM_CONNECTION_SCOPE_SYSTEM);
}
static void
@@ -1145,14 +1573,10 @@ nm_manager_name_owner_changed (NMDBusManager *mgr,
gboolean new_owner_good = (new && (strlen (new) > 0));
if (strcmp (name, NM_DBUS_SERVICE_USER_SETTINGS) == 0) {
- if (!old_owner_good && new_owner_good) {
- /* User Settings service appeared, update stuff */
- user_query_connections (manager);
- } else {
- /* User Settings service disappeared, throw them away (?) */
- user_destroy_connections (manager);
- bluez_manager_resync_devices (manager);
- }
+ if (!old_owner_good && new_owner_good)
+ user_proxy_init (manager);
+ else
+ user_proxy_cleanup (manager, TRUE);
}
}
@@ -1206,50 +1630,40 @@ write_value_to_state_file (const char *filename,
return ret;
}
+static gboolean
+radio_enabled_for_rstate (RadioState *rstate)
+{
+ return rstate->user_enabled && rstate->sw_enabled && rstate->hw_enabled;
+}
+
+static gboolean
+radio_enabled_for_type (NMManager *self, RfKillType rtype)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+
+ return radio_enabled_for_rstate (&priv->radio_states[rtype]);
+}
+
static void
-manager_set_radio_enabled (NMManager *manager,
- RadioState *rstate,
- gboolean enabled)
+manager_update_radio_enabled (NMManager *self, RadioState *rstate)
{
- NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
GSList *iter;
- GError *error = NULL;
/* Do nothing for radio types not yet implemented */
if (!rstate->prop)
return;
- if (rstate->enabled == enabled)
- return;
-
- /* Can't set wireless enabled if it's disabled in hardware */
- if (!rstate->hw_enabled && enabled)
- return;
-
- rstate->enabled = enabled;
-
- g_object_notify (G_OBJECT (manager), rstate->prop);
-
- /* Update enabled key in state file */
- if (priv->state_file) {
- if (!write_value_to_state_file (priv->state_file,
- "main", rstate->key,
- G_TYPE_BOOLEAN, (gpointer) &enabled,
- &error)) {
- nm_log_warn (LOGD_CORE, "writing to state file %s failed: (%d) %s.",
- priv->state_file,
- error ? error->code : -1,
- (error && error->message) ? error->message : "unknown");
- }
- }
+ g_object_notify (G_OBJECT (self), rstate->prop);
/* Don't touch devices if asleep/networking disabled */
- if (priv->sleeping)
+ if (manager_sleeping (self))
return;
/* enable/disable wireless devices as required */
for (iter = priv->devices; iter; iter = iter->next) {
RfKillType devtype = RFKILL_TYPE_UNKNOWN;
+ gboolean enabled = radio_enabled_for_rstate (rstate);
g_object_get (G_OBJECT (iter->data), NM_DEVICE_INTERFACE_RFKILL_TYPE, &devtype, NULL);
if (devtype == rstate->rtype) {
@@ -1372,6 +1786,21 @@ nm_manager_get_modem_enabled_state (NMManager *self)
}
static void
+update_rstate_from_rfkill (RadioState *rstate, RfKillState rfkill)
+{
+ if (rfkill == RFKILL_UNBLOCKED) {
+ rstate->sw_enabled = TRUE;
+ rstate->hw_enabled = TRUE;
+ } else if (rfkill == RFKILL_SOFT_BLOCKED) {
+ rstate->sw_enabled = FALSE;
+ rstate->hw_enabled = TRUE;
+ } else if (rfkill == RFKILL_HARD_BLOCKED) {
+ rstate->sw_enabled = FALSE;
+ rstate->hw_enabled = FALSE;
+ }
+}
+
+static void
manager_rfkill_update_one_type (NMManager *self,
RadioState *rstate,
RfKillType rtype)
@@ -1380,7 +1809,12 @@ manager_rfkill_update_one_type (NMManager *self,
RfKillState udev_state = RFKILL_UNBLOCKED;
RfKillState other_state = RFKILL_UNBLOCKED;
RfKillState composite;
- gboolean new_e = TRUE, new_he = TRUE;
+ gboolean old_enabled, new_enabled, old_rfkilled, new_rfkilled;
+ gboolean old_hwe;
+
+ old_enabled = radio_enabled_for_rstate (rstate);
+ old_rfkilled = rstate->hw_enabled && rstate->sw_enabled;
+ old_hwe = rstate->hw_enabled;
udev_state = nm_udev_manager_get_rfkill_state (priv->udev_mgr, rtype);
@@ -1395,38 +1829,31 @@ manager_rfkill_update_one_type (NMManager *self,
else
composite = RFKILL_UNBLOCKED;
- switch (composite) {
- case RFKILL_UNBLOCKED:
- new_e = TRUE;
- new_he = TRUE;
- break;
- case RFKILL_SOFT_BLOCKED:
- new_e = FALSE;
- new_he = TRUE;
- break;
- case RFKILL_HARD_BLOCKED:
- new_e = FALSE;
- new_he = FALSE;
- break;
- default:
- break;
- }
+ update_rstate_from_rfkill (rstate, composite);
if (rstate->desc) {
- nm_log_dbg (LOGD_RFKILL, "%s hw-enabled %d enabled %d",
- rstate->desc, new_he, new_e);
+ nm_log_dbg (LOGD_RFKILL, "%s hw-enabled %d sw-enabled %d",
+ rstate->desc, rstate->hw_enabled, rstate->sw_enabled);
}
- if (new_he != rstate->hw_enabled) {
+ /* Log new killswitch state */
+ new_rfkilled = rstate->hw_enabled && rstate->sw_enabled;
+ if (old_rfkilled != new_rfkilled) {
nm_log_info (LOGD_RFKILL, "%s now %s by radio killswitch",
rstate->desc,
- (new_e && new_he) ? "enabled" : "disabled");
+ new_rfkilled ? "enabled" : "disabled");
+ }
- rstate->hw_enabled = new_he;
+ /* Send out property changed signal for HW enabled */
+ if (rstate->hw_enabled != old_hwe) {
if (rstate->hw_prop)
g_object_notify (G_OBJECT (self), rstate->hw_prop);
}
- manager_set_radio_enabled (self, rstate, new_e);
+
+ /* And finally update the actual device radio state itself */
+ new_enabled = radio_enabled_for_rstate (rstate);
+ if (new_enabled != old_enabled)
+ manager_update_radio_enabled (self, rstate);
}
static void
@@ -1454,13 +1881,177 @@ manager_ipw_rfkill_state_changed (NMDeviceWifi *device,
}
static void
-manager_modem_enabled_changed (NMModem *device,
- GParamSpec *pspec,
- gpointer user_data)
+manager_modem_enabled_changed (NMModem *device, gpointer user_data)
{
nm_manager_rfkill_update (NM_MANAGER (user_data), RFKILL_TYPE_WWAN);
}
+static GError *
+deactivate_disconnect_check_error (GError *auth_error,
+ NMAuthCallResult result,
+ const char *detail)
+{
+ if (auth_error) {
+ nm_log_dbg (LOGD_CORE, "%s request failed: %s", detail, auth_error->message);
+ return g_error_new (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_PERMISSION_DENIED,
+ "%s request failed: %s",
+ detail, auth_error->message);
+ } else if (result != NM_AUTH_CALL_RESULT_YES) {
+ return g_error_new (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_PERMISSION_DENIED,
+ "Not authorized to %s user connections",
+ detail);
+ }
+ return NULL;
+}
+
+static void
+disconnect_user_auth_done_cb (NMAuthChain *chain,
+ GError *error,
+ DBusGMethodInvocation *context,
+ gpointer user_data)
+{
+ NMManager *self = NM_MANAGER (user_data);
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ GError *ret_error = NULL;
+ NMAuthCallResult result;
+ NMDevice *device;
+
+ priv->auth_chains = g_slist_remove (priv->auth_chains, chain);
+
+ result = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, NM_AUTH_PERMISSION_USE_USER_CONNECTIONS));
+ ret_error = deactivate_disconnect_check_error (error, result, "Disconnect");
+ if (!ret_error) {
+ /* Everything authorized, deactivate the connection */
+ device = nm_auth_chain_get_data (chain, "device");
+ if (nm_device_interface_disconnect (NM_DEVICE_INTERFACE (device), &ret_error))
+ dbus_g_method_return (context);
+ }
+
+ if (ret_error)
+ dbus_g_method_return_error (context, ret_error);
+ g_clear_error (&ret_error);
+
+ nm_auth_chain_unref (chain);
+}
+
+static void
+disconnect_net_auth_done_cb (NMAuthChain *chain,
+ GError *error,
+ DBusGMethodInvocation *context,
+ gpointer user_data)
+{
+ NMManager *self = NM_MANAGER (user_data);
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ GError *ret_error = NULL;
+ NMAuthCallResult result;
+ NMConnectionScope scope;
+ NMDevice *device;
+
+ priv->auth_chains = g_slist_remove (priv->auth_chains, chain);
+
+ result = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, NM_AUTH_PERMISSION_NETWORK_CONTROL));
+ ret_error = deactivate_disconnect_check_error (error, result, "Disconnect");
+ if (ret_error) {
+ dbus_g_method_return_error (context, ret_error);
+ g_error_free (ret_error);
+ goto done;
+ }
+
+ /* If it's a system connection, we're done */
+ device = nm_auth_chain_get_data (chain, "device");
+ scope = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, "scope"));
+ if (scope == NM_CONNECTION_SCOPE_USER) {
+ NMAuthChain *user_chain;
+
+ /* It's a user connection, so we need to ensure the caller is
+ * authorized to manipulate user connections.
+ */
+ user_chain = nm_auth_chain_new (priv->authority, context, NULL, disconnect_user_auth_done_cb, self);
+ g_assert (user_chain);
+ priv->auth_chains = g_slist_append (priv->auth_chains, user_chain);
+
+ nm_auth_chain_set_data (user_chain, "device", g_object_ref (device), g_object_unref);
+ nm_auth_chain_set_data (user_chain, "scope", GUINT_TO_POINTER (scope), NULL);
+ nm_auth_chain_add_call (user_chain, NM_AUTH_PERMISSION_USE_USER_CONNECTIONS, TRUE);
+ } else {
+ if (!nm_device_interface_disconnect (NM_DEVICE_INTERFACE (device), &ret_error)) {
+ dbus_g_method_return_error (context, ret_error);
+ g_clear_error (&ret_error);
+ } else
+ dbus_g_method_return (context);
+ }
+
+done:
+ nm_auth_chain_unref (chain);
+}
+
+static void
+manager_device_disconnect_request (NMDevice *device,
+ DBusGMethodInvocation *context,
+ NMManager *self)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ NMActRequest *req;
+ NMConnection *connection;
+ GError *error = NULL;
+ NMConnectionScope scope;
+ gulong sender_uid = G_MAXULONG;
+ const char *error_desc = NULL;
+
+ req = nm_device_get_act_request (device);
+ if (!req) {
+ error = g_error_new_literal (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_UNKNOWN_CONNECTION,
+ "This device is not active");
+ dbus_g_method_return_error (context, error);
+ g_error_free (error);
+ return;
+ }
+
+ connection = nm_act_request_get_connection (req);
+ g_assert (connection);
+
+ /* Need to check the caller's permissions and stuff before we can
+ * deactivate the connection.
+ */
+ scope = nm_connection_get_scope (connection);
+ if (!check_user_authorized (priv->dbus_mgr,
+ priv->user_proxy,
+ context,
+ scope,
+ &sender_uid,
+ &error_desc)) {
+ error = g_error_new_literal (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_PERMISSION_DENIED,
+ error_desc);
+ dbus_g_method_return_error (context, error);
+ g_error_free (error);
+ return;
+ }
+
+ /* Yay for root */
+ if (0 == sender_uid) {
+ if (!nm_device_interface_disconnect (NM_DEVICE_INTERFACE (device), &error)) {
+ dbus_g_method_return_error (context, error);
+ g_clear_error (&error);
+ } else
+ dbus_g_method_return (context);
+ } else {
+ NMAuthChain *chain;
+
+ /* Otherwise validate the user request */
+ chain = nm_auth_chain_new (priv->authority, context, NULL, disconnect_net_auth_done_cb, self);
+ g_assert (chain);
+ priv->auth_chains = g_slist_append (priv->auth_chains, chain);
+
+ nm_auth_chain_set_data (chain, "device", g_object_ref (device), g_object_unref);
+ nm_auth_chain_set_data (chain, "scope", GUINT_TO_POINTER (scope), NULL);
+ nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_NETWORK_CONTROL, TRUE);
+ }
+}
+
static void
add_device (NMManager *self, NMDevice *device)
{
@@ -1472,7 +2063,7 @@ add_device (NMManager *self, NMDevice *device)
NMConnection *existing = NULL;
GHashTableIter iter;
gpointer value;
- gboolean managed = FALSE;
+ gboolean managed = FALSE, enabled = FALSE;
iface = nm_device_get_ip_iface (device);
g_assert (iface);
@@ -1488,6 +2079,10 @@ add_device (NMManager *self, NMDevice *device)
G_CALLBACK (manager_device_state_changed),
self);
+ g_signal_connect (device, NM_DEVICE_INTERFACE_DISCONNECT_REQUEST,
+ G_CALLBACK (manager_device_disconnect_request),
+ self);
+
if (NM_IS_DEVICE_WIFI (device)) {
/* Attach to the access-point-added signal so that the manager can fill
* non-SSID-broadcasting APs with an SSID.
@@ -1507,14 +2102,15 @@ add_device (NMManager *self, NMDevice *device)
* then set this device's rfkill state based on the global state.
*/
nm_manager_rfkill_update (self, RFKILL_TYPE_WLAN);
- nm_device_interface_set_enabled (NM_DEVICE_INTERFACE (device),
- priv->radio_states[RFKILL_TYPE_WLAN].enabled);
+ enabled = radio_enabled_for_type (self, RFKILL_TYPE_WLAN);
+ nm_device_interface_set_enabled (NM_DEVICE_INTERFACE (device), enabled);
} else if (NM_IS_DEVICE_MODEM (device)) {
- g_signal_connect (device, "notify::" NM_MODEM_ENABLED,
+ g_signal_connect (device, NM_DEVICE_MODEM_ENABLE_CHANGED,
G_CALLBACK (manager_modem_enabled_changed),
self);
nm_manager_rfkill_update (self, RFKILL_TYPE_WWAN);
+ enabled = radio_enabled_for_type (self, RFKILL_TYPE_WWAN);
/* Until we start respecting WWAN rfkill switches the modem itself
* is the source of the enabled/disabled state, so the manager shouldn't
* touch it here.
@@ -1546,7 +2142,7 @@ add_device (NMManager *self, NMDevice *device)
/* Check if we should assume the device's active connection by matching its
* config with an existing system connection.
*/
- if (nm_device_interface_can_assume_connection (NM_DEVICE_INTERFACE (device))) {
+ if (nm_device_interface_can_assume_connections (NM_DEVICE_INTERFACE (device))) {
GSList *connections = NULL;
g_hash_table_iter_init (&iter, priv->system_connections);
@@ -1568,7 +2164,7 @@ add_device (NMManager *self, NMDevice *device)
/* Start the device if it's supposed to be managed */
unmanaged_specs = nm_sysconfig_settings_get_unmanaged_specs (priv->sys_settings);
- if ( !priv->sleeping
+ if ( !manager_sleeping (self)
&& !nm_device_interface_spec_match_list (NM_DEVICE_INTERFACE (device), unmanaged_specs)) {
nm_device_set_managed (device,
TRUE,
@@ -1706,7 +2302,7 @@ bluez_manager_resync_devices (NMManager *self)
priv->devices = keep;
while (g_slist_length (gone))
- gone = remove_one_device (self, gone, NM_DEVICE (gone->data), FALSE, TRUE);
+ gone = remove_one_device (self, gone, NM_DEVICE (gone->data), FALSE);
} else {
g_slist_free (keep);
g_slist_free (gone);
@@ -1775,7 +2371,7 @@ bluez_manager_bdaddr_removed_cb (NMBluezManager *bluez_mgr,
NMDevice *device = NM_DEVICE (iter->data);
if (!strcmp (nm_device_get_udi (device), object_path)) {
- priv->devices = remove_one_device (self, priv->devices, device, FALSE, TRUE);
+ priv->devices = remove_one_device (self, priv->devices, device, FALSE);
break;
}
}
@@ -1819,7 +2415,6 @@ udev_device_added_cb (NMUdevManager *udev_mgr,
gpointer user_data)
{
NMManager *self = NM_MANAGER (user_data);
- NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
GObject *device;
guint32 ifindex;
@@ -1827,7 +2422,7 @@ udev_device_added_cb (NMUdevManager *udev_mgr,
if (find_device_by_ifindex (self, ifindex))
return;
- device = creator_fn (udev_mgr, udev_device, priv->sleeping);
+ device = creator_fn (udev_mgr, udev_device, manager_sleeping (self));
if (device)
add_device (self, NM_DEVICE (device));
}
@@ -1844,8 +2439,16 @@ udev_device_removed_cb (NMUdevManager *manager,
ifindex = g_udev_device_get_property_as_int (udev_device, "IFINDEX");
device = find_device_by_ifindex (self, ifindex);
+ if (!device) {
+ /* On removal we won't always be able to read properties anymore, as
+ * they may have already been removed from sysfs. Instead, we just
+ * have to fall back to the device's interface name.
+ */
+ device = find_device_by_iface (self, g_udev_device_get_name (udev_device));
+ }
+
if (device)
- priv->devices = remove_one_device (self, priv->devices, device, FALSE, TRUE);
+ priv->devices = remove_one_device (self, priv->devices, device, FALSE);
}
static void
@@ -2242,25 +2845,21 @@ internal_activate_device (NMManager *manager,
static gboolean
wait_for_connection_expired (gpointer data)
{
- NMManager *manager = NM_MANAGER (data);
- NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
- PendingConnectionInfo *info = priv->pending_connection_info;
+ PendingActivation *pending = data;
GError *error = NULL;
- g_return_val_if_fail (info != NULL, FALSE);
+ g_return_val_if_fail (pending != NULL, FALSE);
- g_set_error (&error,
- NM_MANAGER_ERROR, NM_MANAGER_ERROR_UNKNOWN_CONNECTION,
- "%s", "Connection was not provided by any settings service");
- nm_log_warn (LOGD_CORE, "connection (%d) %s failed to activate (timeout): (%d) %s",
- info->scope, info->connection_path, error->code, error->message);
- dbus_g_method_return_error (info->context, error);
- g_error_free (error);
+ nm_log_warn (LOGD_CORE, "connection %s (scope %d) failed to activate (timeout)",
+ pending->connection_path, pending->scope);
- info->timeout_id = 0;
- pending_connection_info_destroy (priv->pending_connection_info);
- priv->pending_connection_info = NULL;
+ nm_manager_pending_activation_remove (pending->manager, pending);
+ error = g_error_new_literal (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_UNKNOWN_CONNECTION,
+ "Connection was not provided by any settings service");
+ pending_activation_destroy (pending, error, NULL);
+ g_error_free (error);
return FALSE;
}
@@ -2276,7 +2875,7 @@ nm_manager_activate_connection (NMManager *manager,
NMDevice *device = NULL;
NMSettingConnection *s_con;
NMVPNConnection *vpn_connection;
- const char *path;
+ const char *path = NULL;
g_return_val_if_fail (manager != NULL, NULL);
g_return_val_if_fail (connection != NULL, NULL);
@@ -2333,11 +2932,13 @@ nm_manager_activate_connection (NMManager *manager,
req,
device,
error);
- g_signal_connect (vpn_connection, "manager-get-secrets",
- G_CALLBACK (provider_get_secrets), manager);
- g_signal_connect (vpn_connection, "manager-cancel-secrets",
- G_CALLBACK (provider_cancel_secrets), manager);
- path = nm_vpn_connection_get_active_connection_path (vpn_connection);
+ if (vpn_connection) {
+ g_signal_connect (vpn_connection, "manager-get-secrets",
+ G_CALLBACK (provider_get_secrets), manager);
+ g_signal_connect (vpn_connection, "manager-cancel-secrets",
+ G_CALLBACK (provider_cancel_secrets), manager);
+ path = nm_vpn_connection_get_active_connection_path (vpn_connection);
+ }
g_object_unref (vpn_manager);
} else {
NMDeviceState state;
@@ -2355,7 +2956,7 @@ nm_manager_activate_connection (NMManager *manager,
if (state < NM_DEVICE_STATE_DISCONNECTED) {
g_set_error (error,
NM_MANAGER_ERROR, NM_MANAGER_ERROR_UNMANAGED_DEVICE,
- "%s", "Device not managed by NetworkManager");
+ "%s", "Device not managed by NetworkManager or unavailable");
return NULL;
}
@@ -2371,229 +2972,145 @@ nm_manager_activate_connection (NMManager *manager,
return path;
}
+static PendingActivation *
+nm_manager_pending_activation_find (NMManager *self,
+ const char *path,
+ NMConnectionScope scope)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ GSList *iter;
+
+ for (iter = priv->pending_activations; iter; iter = g_slist_next (iter)) {
+ PendingActivation *pending = iter->data;
+
+ if (!strcmp (pending->connection_path, path) && (pending->scope == scope))
+ return pending;
+ }
+ return NULL;
+}
+
static void
-connection_added_default_handler (NMManager *manager,
- NMConnection *connection,
- NMConnectionScope scope)
+check_pending_ready (NMManager *self, PendingActivation *pending)
{
- NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
- PendingConnectionInfo *info = priv->pending_connection_info;
- const char *path;
+ NMConnection *connection;
+ const char *path = NULL;
GError *error = NULL;
- if (!info)
+ if (!pending->have_connection || !pending->authorized)
return;
- if (scope != info->scope)
- return;
+ /* Ok, we're authorized and the connection is available */
- if (strcmp (info->connection_path, nm_connection_get_path (connection)))
- return;
+ nm_manager_pending_activation_remove (self, pending);
- /* Will destroy below; can't be valid during the initial activation start */
- priv->pending_connection_info = NULL;
+ connection = nm_manager_get_connection_by_object_path (self,
+ pending->scope,
+ pending->connection_path);
+ if (!connection) {
+ error = g_error_new_literal (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_UNKNOWN_CONNECTION,
+ "Connection could not be found.");
+ goto out;
+ }
- path = nm_manager_activate_connection (manager,
+ path = nm_manager_activate_connection (self,
connection,
- info->specific_object_path,
- info->device_path,
+ pending->specific_object_path,
+ pending->device_path,
TRUE,
&error);
- if (path) {
- dbus_g_method_return (info->context, path);
- g_object_notify (G_OBJECT (manager), NM_MANAGER_ACTIVE_CONNECTIONS);
- } else {
- dbus_g_method_return_error (info->context, error);
+ if (!path) {
nm_log_warn (LOGD_CORE, "connection (%d) %s failed to activate: (%d) %s",
- scope, info->connection_path, error->code, error->message);
- g_error_free (error);
- }
+ pending->scope, pending->connection_path, error->code, error->message);
+ } else
+ g_object_notify (G_OBJECT (pending->manager), NM_MANAGER_ACTIVE_CONNECTIONS);
- pending_connection_info_destroy (info);
+out:
+ pending_activation_destroy (pending, error, path);
+ g_clear_error (&error);
}
-static gboolean
-is_user_request_authorized (NMManager *manager,
- DBusGMethodInvocation *context,
- GError **error)
+static void
+connection_added_default_handler (NMManager *self,
+ NMConnection *connection,
+ NMConnectionScope scope)
{
- NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
- DBusConnection *connection;
- char *sender = NULL;
- gulong sender_uid = G_MAXULONG;
- DBusError dbus_error;
- char *service_owner = NULL;
- const char *service_name;
- gulong service_uid = G_MAXULONG;
- gboolean success = FALSE;
-
- /* Ensure the request to activate the user connection came from the
- * same session as the user settings service. FIXME: use ConsoleKit
- * too.
- */
- if (!priv->user_proxy) {
- g_set_error (error, NM_MANAGER_ERROR,
- NM_MANAGER_ERROR_INVALID_SERVICE,
- "%s", "No user settings service available");
- goto out;
- }
-
- sender = dbus_g_method_get_sender (context);
- if (!sender) {
- g_set_error (error, NM_MANAGER_ERROR,
- NM_MANAGER_ERROR_PERMISSION_DENIED,
- "%s", "Could not determine D-Bus requestor");
- goto out;
- }
-
- connection = nm_dbus_manager_get_dbus_connection (priv->dbus_mgr);
- if (!connection) {
- g_set_error (error, NM_MANAGER_ERROR,
- NM_MANAGER_ERROR_PERMISSION_DENIED,
- "%s", "Could not get the D-Bus system bus");
- goto out;
- }
-
- dbus_error_init (&dbus_error);
- /* FIXME: do this async */
- sender_uid = dbus_bus_get_unix_user (connection, sender, &dbus_error);
- if (dbus_error_is_set (&dbus_error)) {
- dbus_error_free (&dbus_error);
- g_set_error (error, NM_MANAGER_ERROR,
- NM_MANAGER_ERROR_PERMISSION_DENIED,
- "%s", "Could not determine the Unix user ID of the requestor");
- goto out;
- }
-
- /* Let root activate anything.
- * FIXME: use a PolicyKit permission instead
- */
- if (0 == sender_uid) {
- success = TRUE;
- goto out;
+ PendingActivation *pending;
+
+ pending = nm_manager_pending_activation_find (self,
+ nm_connection_get_path (connection),
+ scope);
+ if (pending) {
+ pending->have_connection = TRUE;
+ check_pending_ready (self, pending);
}
+}
- service_name = dbus_g_proxy_get_bus_name (priv->user_proxy);
- if (!service_name) {
- g_set_error (error, NM_MANAGER_ERROR,
- NM_MANAGER_ERROR_PERMISSION_DENIED,
- "%s", "Could not determine user settings service name");
- goto out;
- }
+static void
+activation_auth_done (PendingActivation *pending, GError *error)
+{
+ if (error) {
+ nm_manager_pending_activation_remove (pending->manager, pending);
+ pending_activation_destroy (pending, error, NULL);
+ return;
+ } else {
+ pending->authorized = TRUE;
- service_owner = nm_dbus_manager_get_name_owner (priv->dbus_mgr, service_name, NULL);
- if (!service_owner) {
- g_set_error (error, NM_MANAGER_ERROR,
- NM_MANAGER_ERROR_PERMISSION_DENIED,
- "%s", "Could not determine D-Bus owner of the user settings service");
- goto out;
- }
+ /* Now that we're authorized, if the connection hasn't shown up yet,
+ * start a timer and wait for it.
+ */
+ if (!pending->have_connection && !pending->timeout_id)
+ pending->timeout_id = g_timeout_add_seconds (5, wait_for_connection_expired, pending);
- dbus_error_init (&dbus_error);
- /* FIXME: do this async */
- service_uid = dbus_bus_get_unix_user (connection, service_owner, &dbus_error);
- if (dbus_error_is_set (&dbus_error)) {
- dbus_error_free (&dbus_error);
- g_set_error (error, NM_MANAGER_ERROR,
- NM_MANAGER_ERROR_PERMISSION_DENIED,
- "%s", "Could not determine the Unix UID of the sender of the request");
- goto out;
+ check_pending_ready (pending->manager, pending);
}
-
- /* And finally, the actual UID check */
- if (sender_uid != service_uid) {
- g_set_error (error, NM_MANAGER_ERROR,
- NM_MANAGER_ERROR_PERMISSION_DENIED,
- "%s", "Requestor UID does not match the UID of the user settings service");
- goto out;
- }
-
- success = TRUE;
-
-out:
- g_free (sender);
- g_free (service_owner);
- return success;
}
static void
-impl_manager_activate_connection (NMManager *manager,
+impl_manager_activate_connection (NMManager *self,
const char *service_name,
const char *connection_path,
const char *device_path,
const char *specific_object_path,
DBusGMethodInvocation *context)
{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
NMConnectionScope scope = NM_CONNECTION_SCOPE_UNKNOWN;
- NMConnection *connection;
+ PendingActivation *pending;
GError *error = NULL;
- char *real_sop = NULL;
- char *path = NULL;
-
- if (!strcmp (service_name, NM_DBUS_SERVICE_USER_SETTINGS)) {
- if (!is_user_request_authorized (manager, context, &error))
- goto err;
+ if (!strcmp (service_name, NM_DBUS_SERVICE_USER_SETTINGS))
scope = NM_CONNECTION_SCOPE_USER;
- } else if (!strcmp (service_name, NM_DBUS_SERVICE_SYSTEM_SETTINGS))
+ else if (!strcmp (service_name, NM_DBUS_SERVICE_SYSTEM_SETTINGS))
scope = NM_CONNECTION_SCOPE_SYSTEM;
else {
- g_set_error (&error,
- NM_MANAGER_ERROR, NM_MANAGER_ERROR_INVALID_SERVICE,
- "%s", "Invalid settings service name");
- goto err;
- }
-
- /* "/" is special-cased to NULL to get through D-Bus */
- if (specific_object_path && strcmp (specific_object_path, "/"))
- real_sop = g_strdup (specific_object_path);
-
- connection = nm_manager_get_connection_by_object_path (manager, scope, connection_path);
- if (connection) {
- path = (char *) nm_manager_activate_connection (manager,
- connection,
- real_sop,
- device_path,
- TRUE,
- &error);
- if (path) {
- dbus_g_method_return (context, path);
- g_object_notify (G_OBJECT (manager), NM_MANAGER_ACTIVE_CONNECTIONS);
- }
- } else {
- PendingConnectionInfo *info;
- NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
-
- if (priv->pending_connection_info) {
- pending_connection_info_destroy (priv->pending_connection_info);
- priv->pending_connection_info = NULL;
- }
-
- /* Don't have the connection quite yet, probably created by
- * the client on-the-fly. Defer the activation until we have it
- */
-
- info = g_slice_new0 (PendingConnectionInfo);
- info->context = context;
- info->device_path = g_strdup (device_path);
- info->scope = scope;
- info->connection_path = g_strdup (connection_path);
- info->specific_object_path = g_strdup (real_sop);
- info->timeout_id = g_timeout_add_seconds (5, wait_for_connection_expired, manager);
-
- // FIXME: should probably be per-device, not global to the manager
- NM_MANAGER_GET_PRIVATE (manager)->pending_connection_info = info;
- }
-
- err:
- if (error) {
+ error = g_error_new_literal (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_INVALID_SERVICE,
+ "Invalid settings service name");
dbus_g_method_return_error (context, error);
nm_log_warn (LOGD_CORE, "connection (%d) %s failed to activate: (%d) %s",
scope, connection_path, error->code, error->message);
g_error_free (error);
+ return;
}
- g_free (real_sop);
+ /* Need to check the caller's permissions and stuff before we can
+ * activate the connection.
+ */
+ pending = pending_activation_new (self,
+ priv->authority,
+ context,
+ device_path,
+ scope,
+ connection_path,
+ specific_object_path,
+ activation_auth_done);
+ priv->pending_activations = g_slist_prepend (priv->pending_activations, pending);
+
+ if (nm_manager_get_connection_by_object_path (self, scope, connection_path))
+ pending->have_connection = TRUE;
+
+ pending_activation_check_authorized (pending, priv->dbus_mgr, priv->user_proxy);
}
gboolean
@@ -2644,65 +3161,194 @@ done:
return success;
}
-static gboolean
-impl_manager_deactivate_connection (NMManager *manager,
- const char *connection_path,
- GError **error)
+static void
+deactivate_user_auth_done_cb (NMAuthChain *chain,
+ GError *error,
+ DBusGMethodInvocation *context,
+ gpointer user_data)
{
- return nm_manager_deactivate_connection (manager,
- connection_path,
- NM_DEVICE_STATE_REASON_USER_REQUESTED,
- error);
+ NMManager *self = NM_MANAGER (user_data);
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ GError *ret_error = NULL;
+ NMAuthCallResult result;
+
+ priv->auth_chains = g_slist_remove (priv->auth_chains, chain);
+
+ result = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, NM_AUTH_PERMISSION_USE_USER_CONNECTIONS));
+ ret_error = deactivate_disconnect_check_error (error, result, "Deactivate");
+ if (!ret_error) {
+ /* Everything authorized, deactivate the connection */
+ if (nm_manager_deactivate_connection (self,
+ nm_auth_chain_get_data (chain, "path"),
+ NM_DEVICE_STATE_REASON_USER_REQUESTED,
+ &ret_error))
+ dbus_g_method_return (context);
+ }
+
+ if (ret_error)
+ dbus_g_method_return_error (context, ret_error);
+ g_clear_error (&ret_error);
+
+ nm_auth_chain_unref (chain);
}
-static gboolean
-impl_manager_sleep (NMManager *self, gboolean sleep, GError **error)
+static void
+deactivate_net_auth_done_cb (NMAuthChain *chain,
+ GError *error,
+ DBusGMethodInvocation *context,
+ gpointer user_data)
{
- NMManagerPrivate *priv;
- GSList *iter;
+ NMManager *self = NM_MANAGER (user_data);
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ GError *ret_error = NULL;
+ NMAuthCallResult result;
+ const char *active_path;
+ NMConnectionScope scope;
- g_return_val_if_fail (NM_IS_MANAGER (self), FALSE);
+ priv->auth_chains = g_slist_remove (priv->auth_chains, chain);
- priv = NM_MANAGER_GET_PRIVATE (self);
+ result = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, NM_AUTH_PERMISSION_NETWORK_CONTROL));
+ ret_error = deactivate_disconnect_check_error (error, result, "Deactivate");
+ if (ret_error) {
+ dbus_g_method_return_error (context, ret_error);
+ g_error_free (ret_error);
+ goto done;
+ }
- if (priv->sleeping == sleep) {
- g_set_error (error,
- NM_MANAGER_ERROR, NM_MANAGER_ERROR_ALREADY_ASLEEP_OR_AWAKE,
- "Already %s", sleep ? "asleep" : "awake");
- return FALSE;
+ /* If it's a system connection, we're done */
+ active_path = nm_auth_chain_get_data (chain, "path");
+ scope = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, "scope"));
+ if (scope == NM_CONNECTION_SCOPE_USER) {
+ NMAuthChain *user_chain;
+
+ /* It's a user connection, so we need to ensure the caller is
+ * authorized to manipulate user connections.
+ */
+ user_chain = nm_auth_chain_new (priv->authority, context, NULL, deactivate_user_auth_done_cb, self);
+ g_assert (user_chain);
+ priv->auth_chains = g_slist_append (priv->auth_chains, user_chain);
+
+ nm_auth_chain_set_data (user_chain, "path", g_strdup (active_path), g_free);
+ nm_auth_chain_set_data (user_chain, "scope", GUINT_TO_POINTER (scope), NULL);
+ nm_auth_chain_add_call (user_chain, NM_AUTH_PERMISSION_USE_USER_CONNECTIONS, TRUE);
+ } else {
+ if (!nm_manager_deactivate_connection (self,
+ active_path,
+ NM_DEVICE_STATE_REASON_USER_REQUESTED,
+ &ret_error)) {
+ dbus_g_method_return_error (context, ret_error);
+ g_clear_error (&ret_error);
+ } else
+ dbus_g_method_return (context);
}
- priv->sleeping = sleep;
+done:
+ nm_auth_chain_unref (chain);
+}
- /* Update "NetworkingEnabled" key in state file */
- if (priv->state_file) {
- GError *err = NULL;
- gboolean networking_enabled = !sleep;
+static void
+impl_manager_deactivate_connection (NMManager *self,
+ const char *active_path,
+ DBusGMethodInvocation *context)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ NMConnection *connection = NULL;
+ GError *error = NULL;
+ GSList *iter;
+ NMAuthChain *chain;
+ gulong sender_uid = G_MAXULONG;
+ NMConnectionScope scope;
+ const char *error_desc = NULL;
- if (!write_value_to_state_file (priv->state_file,
- "main", "NetworkingEnabled",
- G_TYPE_BOOLEAN, (gpointer) &networking_enabled,
- &err)) {
- nm_log_warn (LOGD_SUSPEND, "writing to state file %s failed: (%d) %s.",
- priv->state_file,
- err ? err->code : -1,
- (err && err->message) ? err->message : "unknown");
+ /* Check for device connections first */
+ for (iter = priv->devices; iter; iter = g_slist_next (iter)) {
+ NMActRequest *req;
+ const char *req_path = NULL;
+
+ req = nm_device_get_act_request (NM_DEVICE (iter->data));
+ if (req)
+ req_path = nm_act_request_get_active_connection_path (req);
+
+ if (req_path && !strcmp (active_path, req_path)) {
+ connection = nm_act_request_get_connection (req);
+ break;
}
+ }
+
+ /* Maybe it's a VPN */
+ if (!connection)
+ connection = nm_vpn_manager_get_connection_for_active (priv->vpn_manager, active_path);
+
+ if (!connection) {
+ error = g_error_new_literal (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_CONNECTION_NOT_ACTIVE,
+ "The connection was not active.");
+ dbus_g_method_return_error (context, error);
+ g_error_free (error);
+ return;
+ }
+ /* Need to check the caller's permissions and stuff before we can
+ * deactivate the connection.
+ */
+ scope = nm_connection_get_scope (connection);
+ if (!check_user_authorized (priv->dbus_mgr,
+ priv->user_proxy,
+ context,
+ scope,
+ &sender_uid,
+ &error_desc)) {
+ error = g_error_new_literal (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_PERMISSION_DENIED,
+ error_desc);
+ dbus_g_method_return_error (context, error);
+ g_error_free (error);
+ return;
}
- if (sleep) {
- nm_log_info (LOGD_SUSPEND, "sleeping...");
+ /* Yay for root */
+ if (0 == sender_uid) {
+ if (!nm_manager_deactivate_connection (self,
+ active_path,
+ NM_DEVICE_STATE_REASON_USER_REQUESTED,
+ &error)) {
+ dbus_g_method_return_error (context, error);
+ g_clear_error (&error);
+ } else
+ dbus_g_method_return (context);
+
+ return;
+ }
+
+ /* Otherwise validate the user request */
+ chain = nm_auth_chain_new (priv->authority, context, NULL, deactivate_net_auth_done_cb, self);
+ g_assert (chain);
+ priv->auth_chains = g_slist_append (priv->auth_chains, chain);
+
+ nm_auth_chain_set_data (chain, "path", g_strdup (active_path), g_free);
+ nm_auth_chain_set_data (chain, "scope", GUINT_TO_POINTER (scope), NULL);
+ nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_NETWORK_CONTROL, TRUE);
+}
+
+static void
+do_sleep_wake (NMManager *self)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ const GSList *unmanaged_specs;
+ GSList *iter;
+
+ if (manager_sleeping (self)) {
+ nm_log_info (LOGD_SUSPEND, "sleeping or disabling...");
/* Just deactivate and down all devices from the device list,
- * we'll remove them in 'wake' for speed's sake.
+ * to keep things fast the device list will get resynced when
+ * the manager wakes up.
*/
for (iter = priv->devices; iter; iter = iter->next)
nm_device_set_managed (NM_DEVICE (iter->data), FALSE, NM_DEVICE_STATE_REASON_SLEEPING);
- } else {
- const GSList *unmanaged_specs;
- nm_log_info (LOGD_SUSPEND, "waking up...");
+ } else {
+ nm_log_info (LOGD_SUSPEND, "waking up and re-enabling...");
unmanaged_specs = nm_sysconfig_settings_get_unmanaged_specs (priv->sys_settings);
@@ -2721,13 +3367,13 @@ impl_manager_sleep (NMManager *self, gboolean sleep, GError **error)
*/
for (i = 0; i < RFKILL_TYPE_MAX; i++) {
RadioState *rstate = &priv->radio_states[i];
- gboolean enabled = (rstate->hw_enabled && rstate->enabled);
+ gboolean enabled = radio_enabled_for_rstate (rstate);
RfKillType devtype = RFKILL_TYPE_UNKNOWN;
if (rstate->desc) {
- nm_log_dbg (LOGD_RFKILL, "%s %s devices (hw_enabled %d, enabled %d)",
+ nm_log_dbg (LOGD_RFKILL, "%s %s devices (hw_enabled %d, sw_enabled %d, user_enabled %d)",
enabled ? "enabling" : "disabling",
- rstate->desc, rstate->hw_enabled, rstate->enabled);
+ rstate->desc, rstate->hw_enabled, rstate->sw_enabled, rstate->user_enabled);
}
g_object_get (G_OBJECT (device), NM_DEVICE_INTERFACE_RFKILL_TYPE, &devtype, NULL);
@@ -2747,23 +3393,438 @@ impl_manager_sleep (NMManager *self, gboolean sleep, GError **error)
}
nm_manager_update_state (self);
+}
- g_object_notify (G_OBJECT (self), NM_MANAGER_SLEEPING);
+static gboolean
+return_no_pk_error (PolkitAuthority *authority,
+ const char *detail,
+ DBusGMethodInvocation *context)
+{
+ GError *error;
+
+ if (!authority) {
+ error = g_error_new (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_PERMISSION_DENIED,
+ "%s request failed: PolicyKit not initialized",
+ detail);
+ dbus_g_method_return_error (context, error);
+ g_error_free (error);
+ return FALSE;
+ }
return TRUE;
}
+static void
+_internal_sleep (NMManager *self, gboolean do_sleep)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+
+ if (priv->sleeping == do_sleep)
+ return;
+
+ nm_log_info (LOGD_SUSPEND, "%s requested (sleeping: %s enabled: %s)",
+ do_sleep ? "sleep" : "wake",
+ priv->sleeping ? "yes" : "no",
+ priv->net_enabled ? "yes" : "no");
+
+ priv->sleeping = do_sleep;
+
+ do_sleep_wake (self);
+
+ g_object_notify (G_OBJECT (self), NM_MANAGER_SLEEPING);
+}
+
+#if 0
+static void
+sleep_auth_done_cb (NMAuthChain *chain,
+ GError *error,
+ DBusGMethodInvocation *context,
+ gpointer user_data)
+{
+ NMManager *self = NM_MANAGER (user_data);
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ GError *ret_error;
+ NMAuthCallResult result;
+ gboolean do_sleep;
+
+ priv->auth_chains = g_slist_remove (priv->auth_chains, chain);
+
+ result = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, NM_AUTH_PERMISSION_SLEEP_WAKE));
+ if (error) {
+ nm_log_dbg (LOGD_SUSPEND, "Sleep/wake request failed: %s", error->message);
+ ret_error = g_error_new (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_PERMISSION_DENIED,
+ "Sleep/wake request failed: %s",
+ error->message);
+ dbus_g_method_return_error (context, ret_error);
+ g_error_free (ret_error);
+ } else if (result != NM_AUTH_CALL_RESULT_YES) {
+ ret_error = g_error_new_literal (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_PERMISSION_DENIED,
+ "Not authorized to sleep/wake");
+ dbus_g_method_return_error (context, ret_error);
+ g_error_free (ret_error);
+ } else {
+ /* Auth success */
+ do_sleep = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, "sleep"));
+ _internal_sleep (self, do_sleep);
+ dbus_g_method_return (context);
+ }
+
+ nm_auth_chain_unref (chain);
+}
+#endif
+
+static void
+impl_manager_sleep (NMManager *self,
+ gboolean do_sleep,
+ DBusGMethodInvocation *context)
+{
+ NMManagerPrivate *priv;
+ GError *error = NULL;
+#if 0
+ NMAuthChain *chain;
+ gulong sender_uid = G_MAXULONG;
+ const char *error_desc = NULL;
+#endif
+
+ g_return_if_fail (NM_IS_MANAGER (self));
+
+ priv = NM_MANAGER_GET_PRIVATE (self);
+
+ if (priv->sleeping == do_sleep) {
+ error = g_error_new (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_ALREADY_ASLEEP_OR_AWAKE,
+ "Already %s", do_sleep ? "asleep" : "awake");
+ dbus_g_method_return_error (context, error);
+ g_error_free (error);
+ return;
+ }
+
+ /* Unconditionally allow the request. Previously it was polkit protected
+ * but unfortunately that doesn't work for short-lived processes like
+ * pm-utils. It uses dbus-send without --print-reply, which quits
+ * immediately after sending the request, and NM is unable to obtain the
+ * sender's UID as dbus-send has already dropped off the bus. Thus NM
+ * fails the request. Instead, don't validate the request, but rely on
+ * D-Bus permissions to restrict the call to root.
+ */
+ _internal_sleep (self, do_sleep);
+ dbus_g_method_return (context);
+ return;
+
+#if 0
+ if (!nm_auth_get_caller_uid (context, priv->dbus_mgr, &sender_uid, &error_desc)) {
+ error = g_error_new_literal (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_PERMISSION_DENIED,
+ error_desc);
+ dbus_g_method_return_error (context, error);
+ g_error_free (error);
+ return;
+ }
+
+ /* Root doesn't need PK authentication */
+ if (0 == sender_uid) {
+ _internal_sleep (self, do_sleep);
+ dbus_g_method_return (context);
+ return;
+ }
+
+ if (!return_no_pk_error (priv->authority, "Sleep/wake", context))
+ return;
+
+ chain = nm_auth_chain_new (priv->authority, context, NULL, sleep_auth_done_cb, self);
+ g_assert (chain);
+ priv->auth_chains = g_slist_append (priv->auth_chains, chain);
+
+ nm_auth_chain_set_data (chain, "sleep", GUINT_TO_POINTER (do_sleep), NULL);
+ nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_SLEEP_WAKE, TRUE);
+#endif
+}
+
+static void
+upower_sleeping_cb (DBusGProxy *proxy, gpointer user_data)
+{
+ nm_log_dbg (LOGD_SUSPEND, "Received UPower sleeping signal");
+ _internal_sleep (NM_MANAGER (user_data), TRUE);
+}
+
+static void
+upower_resuming_cb (DBusGProxy *proxy, gpointer user_data)
+{
+ nm_log_dbg (LOGD_SUSPEND, "Received UPower resuming signal");
+ _internal_sleep (NM_MANAGER (user_data), FALSE);
+}
+
+static void
+_internal_enable (NMManager *self, gboolean enable)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ GError *err = NULL;
+
+ /* Update "NetworkingEnabled" key in state file */
+ if (priv->state_file) {
+ if (!write_value_to_state_file (priv->state_file,
+ "main", "NetworkingEnabled",
+ G_TYPE_BOOLEAN, (gpointer) &enable,
+ &err)) {
+ /* Not a hard error */
+ nm_log_warn (LOGD_SUSPEND, "writing to state file %s failed: (%d) %s.",
+ priv->state_file,
+ err ? err->code : -1,
+ (err && err->message) ? err->message : "unknown");
+ }
+ }
+
+ nm_log_info (LOGD_SUSPEND, "%s requested (sleeping: %s enabled: %s)",
+ enable ? "enable" : "disable",
+ priv->sleeping ? "yes" : "no",
+ priv->net_enabled ? "yes" : "no");
+
+ priv->net_enabled = enable;
+
+ do_sleep_wake (self);
+
+ g_object_notify (G_OBJECT (self), NM_MANAGER_NETWORKING_ENABLED);
+}
+
+static void
+enable_net_done_cb (NMAuthChain *chain,
+ GError *error,
+ DBusGMethodInvocation *context,
+ gpointer user_data)
+{
+ NMManager *self = NM_MANAGER (user_data);
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ GError *ret_error;
+ NMAuthCallResult result;
+ gboolean enable;
+
+ priv->auth_chains = g_slist_remove (priv->auth_chains, chain);
+
+ result = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK));
+ if (error) {
+ nm_log_dbg (LOGD_CORE, "Enable request failed: %s", error->message);
+ ret_error = g_error_new (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_PERMISSION_DENIED,
+ "Enable request failed: %s",
+ error->message);
+ dbus_g_method_return_error (context, ret_error);
+ g_error_free (ret_error);
+ } else if (result != NM_AUTH_CALL_RESULT_YES) {
+ ret_error = g_error_new_literal (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_PERMISSION_DENIED,
+ "Not authorized to enable/disable networking");
+ dbus_g_method_return_error (context, ret_error);
+ g_error_free (ret_error);
+ } else {
+ /* Auth success */
+ enable = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, "enable"));
+ _internal_enable (self, enable);
+ dbus_g_method_return (context);
+ }
+
+ nm_auth_chain_unref (chain);
+}
+
+static void
+impl_manager_enable (NMManager *self,
+ gboolean enable,
+ DBusGMethodInvocation *context)
+{
+ NMManagerPrivate *priv;
+ NMAuthChain *chain;
+ GError *error = NULL;
+ gulong sender_uid = G_MAXULONG;
+ const char *error_desc = NULL;
+
+ g_return_if_fail (NM_IS_MANAGER (self));
+
+ priv = NM_MANAGER_GET_PRIVATE (self);
+
+ if (priv->net_enabled == enable) {
+ error = g_error_new (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_ALREADY_ENABLED_OR_DISABLED,
+ "Already %s", enable ? "enabled" : "disabled");
+ dbus_g_method_return_error (context, error);
+ g_error_free (error);
+ return;
+ }
+
+ if (!nm_auth_get_caller_uid (context, priv->dbus_mgr, &sender_uid, &error_desc)) {
+ error = g_error_new_literal (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_PERMISSION_DENIED,
+ error_desc);
+ dbus_g_method_return_error (context, error);
+ g_error_free (error);
+ return;
+ }
+
+ /* Root doesn't need PK authentication */
+ if (0 == sender_uid) {
+ _internal_enable (self, enable);
+ dbus_g_method_return (context);
+ return;
+ }
+
+ if (!return_no_pk_error (priv->authority, "Enable/disable", context))
+ return;
+
+ chain = nm_auth_chain_new (priv->authority, context, NULL, enable_net_done_cb, self);
+ g_assert (chain);
+ priv->auth_chains = g_slist_append (priv->auth_chains, chain);
+
+ nm_auth_chain_set_data (chain, "enable", GUINT_TO_POINTER (enable), NULL);
+ nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK, TRUE);
+}
+
+/* Permissions */
+
+static void
+user_proxy_permissions_changed_done (NMAuthChain *chain,
+ GError *error,
+ DBusGMethodInvocation *context,
+ gpointer user_data)
+{
+ NMManager *self = NM_MANAGER (user_data);
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ gboolean authorized = FALSE;
+
+ priv->auth_chains = g_slist_remove (priv->auth_chains, chain);
+
+ if (error) {
+ nm_log_warn (LOGD_USER_SET, "User connections unavailable: (%d) %s",
+ error->code, error->message ? error->message : "(unknown)");
+ } else
+ authorized = user_settings_authorized (self, chain);
+
+ if (authorized) {
+ /* User connections are authorized */
+ if (!priv->user_proxy)
+ user_proxy_init (self);
+ } else
+ user_proxy_cleanup (self, TRUE);
+
+ nm_auth_chain_unref (chain);
+}
+
+static void
+pk_authority_changed_cb (GObject *object, gpointer user_data)
+{
+ NMManager *self = NM_MANAGER (user_data);
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ NMAuthChain *chain;
+
+ /* If the user settings service wasn't previously authorized, we wouldn't
+ * care about it. But it might be authorized now, so lets check.
+ */
+ if (!priv->user_proxy)
+ user_proxy_init (self);
+ else {
+ /* Otherwise the user settings permissions could have changed so we
+ * need to recheck them.
+ */
+ chain = nm_auth_chain_new (priv->authority,
+ NULL,
+ priv->user_proxy,
+ user_proxy_permissions_changed_done,
+ self);
+ priv->auth_chains = g_slist_prepend (priv->auth_chains, chain);
+
+ nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_USE_USER_CONNECTIONS, FALSE);
+ nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_NETWORK_CONTROL, FALSE);
+ }
+
+ /* Let clients know they should re-check their authorization */
+ g_signal_emit (NM_MANAGER (user_data), signals[CHECK_PERMISSIONS], 0);
+}
+
+static void
+get_perm_add_result (NMAuthChain *chain, GHashTable *results, const char *permission)
+{
+ NMAuthCallResult result;
+
+ result = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, permission));
+ if (result == NM_AUTH_CALL_RESULT_YES)
+ g_hash_table_insert (results, (char *) permission, "yes");
+ else if (result == NM_AUTH_CALL_RESULT_NO)
+ g_hash_table_insert (results, (char *) permission, "no");
+ else if (result == NM_AUTH_CALL_RESULT_AUTH)
+ g_hash_table_insert (results, (char *) permission, "auth");
+ else {
+ nm_log_dbg (LOGD_CORE, "unknown auth chain result %d", result);
+ }
+}
+
+static void
+get_permissions_done_cb (NMAuthChain *chain,
+ GError *error,
+ DBusGMethodInvocation *context,
+ gpointer user_data)
+{
+ NMManager *self = NM_MANAGER (user_data);
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ GError *ret_error;
+ GHashTable *results;
+
+ priv->auth_chains = g_slist_remove (priv->auth_chains, chain);
+ if (error) {
+ nm_log_dbg (LOGD_CORE, "Permissions request failed: %s", error->message);
+ ret_error = g_error_new (NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_PERMISSION_DENIED,
+ "Permissions request failed: %s",
+ error->message);
+ dbus_g_method_return_error (context, ret_error);
+ g_error_free (ret_error);
+ } else {
+ results = g_hash_table_new (g_str_hash, g_str_equal);
+ get_perm_add_result (chain, results, NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK);
+ get_perm_add_result (chain, results, NM_AUTH_PERMISSION_SLEEP_WAKE);
+ get_perm_add_result (chain, results, NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI);
+ get_perm_add_result (chain, results, NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN);
+ get_perm_add_result (chain, results, NM_AUTH_PERMISSION_USE_USER_CONNECTIONS);
+ get_perm_add_result (chain, results, NM_AUTH_PERMISSION_NETWORK_CONTROL);
+ dbus_g_method_return (context, results);
+ g_hash_table_destroy (results);
+ }
+
+ nm_auth_chain_unref (chain);
+}
+
+static void
+impl_manager_get_permissions (NMManager *self,
+ DBusGMethodInvocation *context)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ NMAuthChain *chain;
+
+ if (!return_no_pk_error (priv->authority, "Permissions", context))
+ return;
+
+ chain = nm_auth_chain_new (priv->authority, context, NULL, get_permissions_done_cb, self);
+ g_assert (chain);
+ priv->auth_chains = g_slist_append (priv->auth_chains, chain);
+
+ nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK, FALSE);
+ nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_SLEEP_WAKE, FALSE);
+ nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI, FALSE);
+ nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN, FALSE);
+ nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_USE_USER_CONNECTIONS, FALSE);
+ nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_NETWORK_CONTROL, FALSE);
+}
+
/* Legacy 0.6 compatibility interface */
-static gboolean
-impl_manager_legacy_sleep (NMManager *manager, GError **error)
+static void
+impl_manager_legacy_sleep (NMManager *manager, DBusGMethodInvocation *context)
{
- return impl_manager_sleep (manager, TRUE, error);
+ return impl_manager_sleep (manager, TRUE, context);
}
-static gboolean
-impl_manager_legacy_wake (NMManager *manager, GError **error)
+static void
+impl_manager_legacy_wake (NMManager *manager, DBusGMethodInvocation *context)
{
- return impl_manager_sleep (manager, FALSE, error);
+ return impl_manager_sleep (manager, FALSE, context);
}
static gboolean
@@ -2796,6 +3857,15 @@ impl_manager_set_logging (NMManager *manager,
/* Connections */
+gboolean
+nm_manager_auto_user_connections_allowed (NMManager *self)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+
+ return priv->user_net_perm == NM_AUTH_CALL_RESULT_YES
+ && priv->user_con_perm == NM_AUTH_CALL_RESULT_YES;
+}
+
static int
connection_sort (gconstpointer pa, gconstpointer pb)
{
@@ -2889,39 +3959,26 @@ nm_manager_start (NMManager *self)
/* Set initial radio enabled/disabled state */
for (i = 0; i < RFKILL_TYPE_MAX; i++) {
RadioState *rstate = &priv->radio_states[i];
- gboolean enabled = TRUE, hw_enabled = TRUE;
+ RfKillState udev_state;
if (!rstate->desc)
continue;
- switch (nm_udev_manager_get_rfkill_state (priv->udev_mgr, i)) {
- case RFKILL_UNBLOCKED:
- enabled = TRUE;
- hw_enabled = TRUE;
- break;
- case RFKILL_SOFT_BLOCKED:
- enabled = FALSE;
- hw_enabled = TRUE;
- break;
- case RFKILL_HARD_BLOCKED:
- enabled = FALSE;
- hw_enabled = FALSE;
- break;
- default:
- break;
- }
+ udev_state = nm_udev_manager_get_rfkill_state (priv->udev_mgr, i);
+ update_rstate_from_rfkill (rstate, udev_state);
- rstate->hw_enabled = hw_enabled;
- nm_log_info (LOGD_RFKILL, "%s %s by radio killswitch; %s by state file",
- rstate->desc,
- (rstate->hw_enabled && enabled) ? "enabled" : "disabled",
- (rstate->enabled) ? "enabled" : "disabled");
- manager_set_radio_enabled (self, rstate, rstate->enabled && enabled);
+ if (rstate->desc) {
+ nm_log_info (LOGD_RFKILL, "%s %s by radio killswitch; %s by state file",
+ rstate->desc,
+ (rstate->hw_enabled && rstate->sw_enabled) ? "enabled" : "disabled",
+ rstate->user_enabled ? "enabled" : "disabled");
+ }
+ manager_update_radio_enabled (self, rstate);
}
- /* Log overall networking status - asleep/running */
+ /* Log overall networking status - enabled/disabled */
nm_log_info (LOGD_CORE, "Networking is %s by state file",
- priv->sleeping ? "disabled" : "enabled");
+ priv->net_enabled ? "enabled" : "disabled");
system_unmanaged_devices_changed_cb (priv->sys_settings, NULL, self);
system_hostname_changed_cb (priv->sys_settings, NULL, self);
@@ -2931,13 +3988,226 @@ nm_manager_start (NMManager *self)
* they will be queried when the user settings service shows up on the
* bus in nm_manager_name_owner_changed().
*/
- if (nm_dbus_manager_name_has_owner (priv->dbus_mgr, NM_DBUS_SERVICE_USER_SETTINGS))
- user_query_connections (self);
+ user_proxy_init (self);
nm_udev_manager_query_devices (priv->udev_mgr);
bluez_manager_resync_devices (self);
}
+static gboolean
+handle_firmware_changed (gpointer user_data)
+{
+ NMManager *self = NM_MANAGER (user_data);
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ GSList *iter;
+
+ priv->fw_changed_id = 0;
+
+ if (manager_sleeping (self))
+ return FALSE;
+
+ /* Try to re-enable devices with missing firmware */
+ for (iter = priv->devices; iter; iter = iter->next) {
+ NMDevice *candidate = NM_DEVICE (iter->data);
+ NMDeviceState state = nm_device_get_state (candidate);
+
+ if ( nm_device_get_firmware_missing (candidate)
+ && (state == NM_DEVICE_STATE_UNAVAILABLE)) {
+ nm_log_info (LOGD_CORE, "(%s): firmware may now be available",
+ nm_device_get_iface (candidate));
+
+ /* Re-set unavailable state to try bringing the device up again */
+ nm_device_state_changed (candidate,
+ NM_DEVICE_STATE_UNAVAILABLE,
+ NM_DEVICE_STATE_REASON_NONE);
+ }
+ }
+
+ return FALSE;
+}
+
+static void
+firmware_dir_changed (GFileMonitor *monitor,
+ GFile *file,
+ GFile *other_file,
+ GFileMonitorEvent event_type,
+ gpointer user_data)
+{
+ NMManager *self = NM_MANAGER (user_data);
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+
+ switch (event_type) {
+ case G_FILE_MONITOR_EVENT_CREATED:
+ case G_FILE_MONITOR_EVENT_CHANGED:
+#if GLIB_CHECK_VERSION(2,23,4)
+ case G_FILE_MONITOR_EVENT_MOVED:
+#endif
+ case G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED:
+ case G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT:
+ if (!priv->fw_changed_id) {
+ priv->fw_changed_id = g_timeout_add_seconds (4, handle_firmware_changed, self);
+ nm_log_info (LOGD_CORE, "kernel firmware directory '%s' changed",
+ KERNEL_FIRMWARE_DIR);
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+#define PERM_DENIED_ERROR "org.freedesktop.NetworkManager.PermissionDenied"
+
+static void
+prop_set_auth_done_cb (NMAuthChain *chain,
+ GError *error,
+ DBusGMethodInvocation *context,
+ gpointer user_data)
+{
+ NMManager *self = NM_MANAGER (user_data);
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ DBusGConnection *bus;
+ DBusConnection *dbus_connection;
+ NMAuthCallResult result;
+ DBusMessage *reply, *request;
+ const char *permission, *prop;
+ gboolean set_enabled = TRUE;
+
+ priv->auth_chains = g_slist_remove (priv->auth_chains, chain);
+
+ request = nm_auth_chain_get_data (chain, "message");
+ permission = nm_auth_chain_get_data (chain, "permission");
+ prop = nm_auth_chain_get_data (chain, "prop");
+ set_enabled = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, "enabled"));
+
+ if (error) {
+ reply = dbus_message_new_error (request, PERM_DENIED_ERROR,
+ "Not authorized to perform this operation");
+ } else {
+ /* Caller has had a chance to obtain authorization, so we only need to
+ * check for 'yes' here.
+ */
+ result = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, permission));
+ if (result != NM_AUTH_CALL_RESULT_YES) {
+ reply = dbus_message_new_error (request, PERM_DENIED_ERROR,
+ "Not authorized to perform this operation");
+ } else {
+ g_object_set (self, prop, set_enabled, NULL);
+ reply = dbus_message_new_method_return (request);
+ }
+ }
+
+ if (reply) {
+ bus = nm_dbus_manager_get_connection (priv->dbus_mgr);
+ g_assert (bus);
+ dbus_connection = dbus_g_connection_get_connection (bus);
+ g_assert (dbus_connection);
+
+ dbus_connection_send (dbus_connection, reply, NULL);
+ dbus_message_unref (reply);
+ }
+ nm_auth_chain_unref (chain);
+}
+
+static DBusHandlerResult
+prop_filter (DBusConnection *connection,
+ DBusMessage *message,
+ void *user_data)
+{
+ NMManager *self = NM_MANAGER (user_data);
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ DBusMessageIter iter;
+ DBusMessageIter sub;
+ const char *propiface = NULL;
+ const char *propname = NULL;
+ const char *sender = NULL;
+ const char *glib_propname = NULL, *permission = NULL;
+ DBusError dbus_error;
+ gulong uid = G_MAXULONG;
+ DBusMessage *reply = NULL;
+ gboolean set_enabled = FALSE;
+ NMAuthChain *chain;
+
+ /* The sole purpose of this function is to validate property accesses
+ * on the NMManager object since dbus-glib doesn't yet give us this
+ * functionality.
+ */
+
+ if (!dbus_message_is_method_call (message, DBUS_INTERFACE_PROPERTIES, "Set"))
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+
+ dbus_message_iter_init (message, &iter);
+
+ /* Get the D-Bus interface of the property to set */
+ if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_STRING)
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ dbus_message_iter_get_basic (&iter, &propiface);
+ if (!propiface || strcmp (propiface, NM_DBUS_INTERFACE))
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ dbus_message_iter_next (&iter);
+
+ /* Get the property name that's going to be set */
+ if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_STRING)
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ dbus_message_iter_get_basic (&iter, &propname);
+ dbus_message_iter_next (&iter);
+
+ if (!strcmp (propname, "WirelessEnabled")) {
+ glib_propname = NM_MANAGER_WIRELESS_ENABLED;
+ permission = NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI;
+ } else if (!strcmp (propname, "WwanEnabled")) {
+ glib_propname = NM_MANAGER_WWAN_ENABLED;
+ permission = NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN;
+ } else
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+
+ /* Get the new value for the property */
+ if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_VARIANT)
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ dbus_message_iter_recurse (&iter, &sub);
+ if (dbus_message_iter_get_arg_type (&sub) != DBUS_TYPE_BOOLEAN)
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ dbus_message_iter_get_basic (&sub, &set_enabled);
+
+ sender = dbus_message_get_sender (message);
+ if (!sender) {
+ reply = dbus_message_new_error (message, PERM_DENIED_ERROR,
+ "Could not determine D-Bus requestor");
+ goto out;
+ }
+
+ dbus_error_init (&dbus_error);
+ uid = dbus_bus_get_unix_user (connection, sender, &dbus_error);
+ if (dbus_error_is_set (&dbus_error)) {
+ reply = dbus_message_new_error (message, PERM_DENIED_ERROR,
+ "Could not determine the user ID of the requestor");
+ dbus_error_free (&dbus_error);
+ goto out;
+ }
+
+ if (uid > 0) {
+ /* Otherwise validate the user request */
+ chain = nm_auth_chain_new_raw_message (priv->authority, message, prop_set_auth_done_cb, self);
+ g_assert (chain);
+ priv->auth_chains = g_slist_append (priv->auth_chains, chain);
+ nm_auth_chain_set_data (chain, "prop", g_strdup (glib_propname), g_free);
+ nm_auth_chain_set_data (chain, "permission", g_strdup (permission), g_free);
+ nm_auth_chain_set_data (chain, "enabled", GUINT_TO_POINTER (set_enabled), NULL);
+ nm_auth_chain_set_data (chain, "message", dbus_message_ref (message), (GDestroyNotify) dbus_message_unref);
+ nm_auth_chain_add_call (chain, permission, TRUE);
+ } else {
+ /* Yay for root */
+ g_object_set (self, glib_propname, set_enabled, NULL);
+ reply = dbus_message_new_method_return (message);
+ }
+
+out:
+ if (reply) {
+ dbus_connection_send (connection, reply, NULL);
+ dbus_message_unref (reply);
+ }
+ return DBUS_HANDLER_RESULT_HANDLED;
+}
+
NMManager *
nm_manager_get (const char *config_file,
const char *plugins,
@@ -2951,6 +4221,7 @@ nm_manager_get (const char *config_file,
static NMManager *singleton = NULL;
NMManagerPrivate *priv;
DBusGConnection *bus;
+ DBusConnection *dbus_connection;
if (singleton)
return g_object_ref (singleton);
@@ -2962,6 +4233,14 @@ nm_manager_get (const char *config_file,
bus = nm_dbus_manager_get_connection (priv->dbus_mgr);
g_assert (bus);
+ dbus_connection = dbus_g_connection_get_connection (bus);
+ g_assert (dbus_connection);
+
+ if (!dbus_connection_add_filter (dbus_connection, prop_filter, singleton, NULL)) {
+ nm_log_err (LOGD_CORE, "failed to register DBus connection filter");
+ g_object_unref (singleton);
+ return NULL;
+ }
priv->sys_settings = nm_sysconfig_settings_new (config_file, plugins, bus, error);
if (!priv->sys_settings) {
@@ -2974,11 +4253,11 @@ nm_manager_get (const char *config_file,
priv->state_file = g_strdup (state_file);
- priv->sleeping = !initial_net_enabled;
+ priv->net_enabled = initial_net_enabled;
- priv->radio_states[RFKILL_TYPE_WLAN].enabled = initial_wifi_enabled;
- priv->radio_states[RFKILL_TYPE_WWAN].enabled = initial_wwan_enabled;
- priv->radio_states[RFKILL_TYPE_WIMAX].enabled = initial_wimax_enabled;
+ priv->radio_states[RFKILL_TYPE_WLAN].user_enabled = initial_wifi_enabled;
+ priv->radio_states[RFKILL_TYPE_WWAN].user_enabled = initial_wwan_enabled;
+ priv->radio_states[RFKILL_TYPE_WIMAX].user_enabled = initial_wimax_enabled;
g_signal_connect (priv->sys_settings, "notify::" NM_SYSCONFIG_SETTINGS_UNMANAGED_SPECS,
G_CALLBACK (system_unmanaged_devices_changed_cb), singleton);
@@ -3030,6 +4309,9 @@ dispose (GObject *object)
{
NMManager *manager = NM_MANAGER (object);
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
+ GSList *iter;
+ DBusGConnection *bus;
+ DBusConnection *dbus_connection;
if (priv->disposed) {
G_OBJECT_CLASS (nm_manager_parent_class)->dispose (object);
@@ -3037,8 +4319,14 @@ dispose (GObject *object)
}
priv->disposed = TRUE;
- pending_connection_info_destroy (priv->pending_connection_info);
- priv->pending_connection_info = NULL;
+ for (iter = priv->pending_activations; iter; iter = g_slist_next (iter))
+ pending_activation_destroy ((PendingActivation *) iter->data, NULL, NULL);
+ g_slist_free (priv->pending_activations);
+ priv->pending_activations = NULL;
+
+ g_slist_foreach (priv->auth_chains, (GFunc) nm_auth_chain_unref, NULL);
+ g_slist_free (priv->auth_chains);
+ g_object_unref (priv->authority);
while (g_slist_length (priv->secrets_calls))
free_get_secrets_info ((GetSecretsInfo *) priv->secrets_calls->data);
@@ -3047,11 +4335,10 @@ dispose (GObject *object)
priv->devices = remove_one_device (manager,
priv->devices,
NM_DEVICE (priv->devices->data),
- TRUE,
- FALSE);
+ TRUE);
}
- user_destroy_connections (manager);
+ user_proxy_cleanup (manager, FALSE);
g_hash_table_destroy (priv->user_connections);
priv->user_connections = NULL;
@@ -3084,14 +4371,80 @@ dispose (GObject *object)
}
g_object_unref (priv->modem_manager);
+ /* Unregister property filter */
+ bus = nm_dbus_manager_get_connection (priv->dbus_mgr);
+ if (bus) {
+ dbus_connection = dbus_g_connection_get_connection (bus);
+ g_assert (dbus_connection);
+ dbus_connection_remove_filter (dbus_connection, prop_filter, manager);
+ }
g_object_unref (priv->dbus_mgr);
+
if (priv->bluez_mgr)
g_object_unref (priv->bluez_mgr);
+ if (priv->aipd_proxy)
+ g_object_unref (priv->aipd_proxy);
+
+ if (priv->upower_proxy)
+ g_object_unref (priv->upower_proxy);
+
+ if (priv->fw_monitor) {
+ if (priv->fw_monitor_id)
+ g_signal_handler_disconnect (priv->fw_monitor, priv->fw_monitor_id);
+
+ if (priv->fw_changed_id)
+ g_source_remove (priv->fw_changed_id);
+
+ g_file_monitor_cancel (priv->fw_monitor);
+ g_object_unref (priv->fw_monitor);
+ }
+
+ if (priv->timestamp_update_id) {
+ g_source_remove (priv->timestamp_update_id);
+ priv->timestamp_update_id = 0;
+ }
+
G_OBJECT_CLASS (nm_manager_parent_class)->dispose (object);
}
static void
+manager_radio_user_toggled (NMManager *self,
+ RadioState *rstate,
+ gboolean enabled)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ GError *error = NULL;
+ gboolean old_enabled, new_enabled;
+
+ if (rstate->desc) {
+ nm_log_dbg (LOGD_RFKILL, "(%s): setting radio %s by user",
+ rstate->desc,
+ enabled ? "enabled" : "disabled");
+ }
+
+ /* Update enabled key in state file */
+ if (priv->state_file) {
+ if (!write_value_to_state_file (priv->state_file,
+ "main", rstate->key,
+ G_TYPE_BOOLEAN, (gpointer) &enabled,
+ &error)) {
+ nm_log_warn (LOGD_CORE, "writing to state file %s failed: (%d) %s.",
+ priv->state_file,
+ error ? error->code : -1,
+ (error && error->message) ? error->message : "unknown");
+ g_clear_error (&error);
+ }
+ }
+
+ old_enabled = radio_enabled_for_rstate (rstate);
+ rstate->user_enabled = enabled;
+ new_enabled = radio_enabled_for_rstate (rstate);
+ if (new_enabled != old_enabled)
+ manager_update_radio_enabled (self, rstate);
+}
+
+static void
set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec)
{
@@ -3099,15 +4452,19 @@ set_property (GObject *object, guint prop_id,
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
switch (prop_id) {
+ case PROP_NETWORKING_ENABLED:
+ /* Construct only for now */
+ priv->net_enabled = g_value_get_boolean (value);
+ break;
case PROP_WIRELESS_ENABLED:
- manager_set_radio_enabled (NM_MANAGER (object),
- &priv->radio_states[RFKILL_TYPE_WLAN],
- g_value_get_boolean (value));
+ manager_radio_user_toggled (NM_MANAGER (object),
+ &priv->radio_states[RFKILL_TYPE_WLAN],
+ g_value_get_boolean (value));
break;
case PROP_WWAN_ENABLED:
- manager_set_radio_enabled (NM_MANAGER (object),
- &priv->radio_states[RFKILL_TYPE_WWAN],
- g_value_get_boolean (value));
+ manager_radio_user_toggled (NM_MANAGER (object),
+ &priv->radio_states[RFKILL_TYPE_WWAN],
+ g_value_get_boolean (value));
break;
case PROP_WIMAX_ENABLED:
manager_set_radio_enabled (NM_MANAGER (object),
@@ -3128,18 +4485,24 @@ get_property (GObject *object, guint prop_id,
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
switch (prop_id) {
+ case PROP_VERSION:
+ g_value_set_string (value, VERSION);
+ break;
case PROP_STATE:
nm_manager_update_state (self);
g_value_set_uint (value, priv->state);
break;
+ case PROP_NETWORKING_ENABLED:
+ g_value_set_boolean (value, priv->net_enabled);
+ break;
case PROP_WIRELESS_ENABLED:
- g_value_set_boolean (value, priv->radio_states[RFKILL_TYPE_WLAN].enabled);
+ g_value_set_boolean (value, radio_enabled_for_type (self, RFKILL_TYPE_WLAN));
break;
case PROP_WIRELESS_HARDWARE_ENABLED:
g_value_set_boolean (value, priv->radio_states[RFKILL_TYPE_WLAN].hw_enabled);
break;
case PROP_WWAN_ENABLED:
- g_value_set_boolean (value, priv->radio_states[RFKILL_TYPE_WWAN].enabled);
+ g_value_set_boolean (value, radio_enabled_for_type (self, RFKILL_TYPE_WWAN));
break;
case PROP_WWAN_HARDWARE_ENABLED:
g_value_set_boolean (value, priv->radio_states[RFKILL_TYPE_WWAN].hw_enabled);
@@ -3165,17 +4528,41 @@ get_property (GObject *object, guint prop_id,
}
}
+static gboolean
+periodic_update_active_connection_timestamps (gpointer user_data)
+{
+ NMManager *manager = NM_MANAGER (user_data);
+ GPtrArray *active;
+ int i;
+
+ active = get_active_connections (manager, NULL);
+
+ for (i = 0; i < active->len; i++) {
+ const char *active_path = g_ptr_array_index (active, i);
+ NMActRequest *req;
+ NMDevice *device = NULL;
+
+ req = nm_manager_get_act_request_by_path (manager, active_path, &device);
+ if (device && nm_device_get_state (device) == NM_DEVICE_STATE_ACTIVATED)
+ update_active_connection_timestamp (manager, device);
+ }
+
+ return TRUE;
+}
+
static void
nm_manager_init (NMManager *manager)
{
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
DBusGConnection *g_connection;
guint id, i;
+ GFile *file;
+ GError *error = NULL;
/* Initialize rfkill structures and states */
memset (priv->radio_states, 0, sizeof (priv->radio_states));
- priv->radio_states[RFKILL_TYPE_WLAN].enabled = TRUE;
+ priv->radio_states[RFKILL_TYPE_WLAN].user_enabled = TRUE;
priv->radio_states[RFKILL_TYPE_WLAN].key = "WirelessEnabled";
priv->radio_states[RFKILL_TYPE_WLAN].prop = NM_MANAGER_WIRELESS_ENABLED;
priv->radio_states[RFKILL_TYPE_WLAN].hw_prop = NM_MANAGER_WIRELESS_HARDWARE_ENABLED;
@@ -3183,7 +4570,7 @@ nm_manager_init (NMManager *manager)
priv->radio_states[RFKILL_TYPE_WLAN].other_enabled_func = nm_manager_get_ipw_rfkill_state;
priv->radio_states[RFKILL_TYPE_WLAN].rtype = RFKILL_TYPE_WLAN;
- priv->radio_states[RFKILL_TYPE_WWAN].enabled = TRUE;
+ priv->radio_states[RFKILL_TYPE_WWAN].user_enabled = TRUE;
priv->radio_states[RFKILL_TYPE_WWAN].key = "WWANEnabled";
priv->radio_states[RFKILL_TYPE_WWAN].prop = NM_MANAGER_WWAN_ENABLED;
priv->radio_states[RFKILL_TYPE_WWAN].hw_prop = NM_MANAGER_WWAN_HARDWARE_ENABLED;
@@ -3191,7 +4578,7 @@ nm_manager_init (NMManager *manager)
priv->radio_states[RFKILL_TYPE_WWAN].other_enabled_func = nm_manager_get_modem_enabled_state;
priv->radio_states[RFKILL_TYPE_WWAN].rtype = RFKILL_TYPE_WWAN;
- priv->radio_states[RFKILL_TYPE_WIMAX].enabled = TRUE;
+ priv->radio_states[RFKILL_TYPE_WIMAX].user_enabled = TRUE;
priv->radio_states[RFKILL_TYPE_WIMAX].key = "WiMAXEnabled";
priv->radio_states[RFKILL_TYPE_WIMAX].prop = NM_MANAGER_WIMAX_ENABLED;
priv->radio_states[RFKILL_TYPE_WIMAX].hw_prop = NM_MANAGER_WIMAX_HARDWARE_ENABLED;
@@ -3252,6 +4639,58 @@ nm_manager_init (NMManager *manager)
NULL);
} else
nm_log_warn (LOGD_AUTOIP4, "could not initialize avahi-autoipd D-Bus proxy");
+
+ /* upower sleep/wake handling */
+ priv->upower_proxy = dbus_g_proxy_new_for_name (g_connection,
+ UPOWER_DBUS_SERVICE,
+ "/org/freedesktop/UPower",
+ "org.freedesktop.UPower");
+ if (priv->upower_proxy) {
+ dbus_g_proxy_add_signal (priv->upower_proxy, "Sleeping", G_TYPE_INVALID);
+ dbus_g_proxy_connect_signal (priv->upower_proxy, "Sleeping",
+ G_CALLBACK (upower_sleeping_cb),
+ manager, NULL);
+
+ dbus_g_proxy_add_signal (priv->upower_proxy, "Resuming", G_TYPE_INVALID);
+ dbus_g_proxy_connect_signal (priv->upower_proxy, "Resuming",
+ G_CALLBACK (upower_resuming_cb),
+ manager, NULL);
+ } else
+ nm_log_warn (LOGD_SUSPEND, "could not initialize UPower D-Bus proxy");
+
+ priv->authority = polkit_authority_get_sync (NULL, &error);
+ if (priv->authority) {
+ priv->auth_changed_id = g_signal_connect (priv->authority,
+ "changed",
+ G_CALLBACK (pk_authority_changed_cb),
+ manager);
+ } else {
+ nm_log_warn (LOGD_CORE, "failed to create PolicyKit authority: (%d) %s",
+ error ? error->code : -1,
+ error && error->message ? error->message : "(unknown)");
+ g_clear_error (&error);
+ }
+
+ /* Monitor the firmware directory */
+ if (strlen (KERNEL_FIRMWARE_DIR)) {
+ file = g_file_new_for_path (KERNEL_FIRMWARE_DIR "/");
+ priv->fw_monitor = g_file_monitor_directory (file, G_FILE_MONITOR_NONE, NULL, NULL);
+ g_object_unref (file);
+ }
+
+ if (priv->fw_monitor) {
+ priv->fw_monitor_id = g_signal_connect (priv->fw_monitor, "changed",
+ G_CALLBACK (firmware_dir_changed),
+ manager);
+ nm_log_info (LOGD_CORE, "monitoring kernel firmware directory '%s'.",
+ KERNEL_FIRMWARE_DIR);
+ } else {
+ nm_log_warn (LOGD_CORE, "failed to monitor kernel firmware directory '%s'.",
+ KERNEL_FIRMWARE_DIR);
+ }
+
+ /* Update timestamps in active connections */
+ priv->timestamp_update_id = g_timeout_add_seconds (300, (GSourceFunc) periodic_update_active_connection_timestamps, manager);
}
static void
@@ -3270,6 +4709,14 @@ nm_manager_class_init (NMManagerClass *manager_class)
/* properties */
g_object_class_install_property
+ (object_class, PROP_VERSION,
+ g_param_spec_string (NM_MANAGER_VERSION,
+ "Version",
+ "NetworkManager version",
+ NULL,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
(object_class, PROP_STATE,
g_param_spec_uint (NM_MANAGER_STATE,
"State",
@@ -3278,6 +4725,14 @@ nm_manager_class_init (NMManagerClass *manager_class)
G_PARAM_READABLE));
g_object_class_install_property
+ (object_class, PROP_NETWORKING_ENABLED,
+ g_param_spec_boolean (NM_MANAGER_NETWORKING_ENABLED,
+ "NetworkingEnabled",
+ "Is networking enabled",
+ TRUE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+ g_object_class_install_property
(object_class, PROP_WIRELESS_ENABLED,
g_param_spec_boolean (NM_MANAGER_WIRELESS_ENABLED,
"WirelessEnabled",
@@ -3342,6 +4797,7 @@ nm_manager_class_init (NMManagerClass *manager_class)
NULL,
G_PARAM_READABLE | NM_PROPERTY_PARAM_NO_EXPORT));
+ /* Sleeping is not exported over D-Bus */
g_object_class_install_property
(object_class, PROP_SLEEPING,
g_param_spec_boolean (NM_MANAGER_SLEEPING,
@@ -3418,6 +4874,22 @@ nm_manager_class_init (NMManagerClass *manager_class)
_nm_marshal_VOID__OBJECT_UINT,
G_TYPE_NONE, 2, G_TYPE_OBJECT, G_TYPE_UINT);
+ signals[CHECK_PERMISSIONS] =
+ g_signal_new ("check-permissions",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ 0, NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ signals[USER_PERMISSIONS_CHANGED] =
+ g_signal_new ("user-permissions-changed",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ 0, NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
/* StateChange is DEPRECATED */
signals[STATE_CHANGE] =
g_signal_new ("state-change",
diff --git a/src/nm-manager.h b/src/nm-manager.h
index bebd9217b7..42472407d1 100644
--- a/src/nm-manager.h
+++ b/src/nm-manager.h
@@ -16,7 +16,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2008 Red Hat, Inc.
+ * Copyright (C) 2007 - 2010 Red Hat, Inc.
*/
#ifndef NM_MANAGER_H
@@ -35,6 +35,17 @@
#define NM_IS_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NM_TYPE_MANAGER))
#define NM_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_MANAGER, NMManagerClass))
+#define NM_MANAGER_VERSION "version"
+#define NM_MANAGER_STATE "state"
+#define NM_MANAGER_NETWORKING_ENABLED "networking-enabled"
+#define NM_MANAGER_WIRELESS_ENABLED "wireless-enabled"
+#define NM_MANAGER_WIRELESS_HARDWARE_ENABLED "wireless-hardware-enabled"
+#define NM_MANAGER_WWAN_ENABLED "wwan-enabled"
+#define NM_MANAGER_WWAN_HARDWARE_ENABLED "wwan-hardware-enabled"
+#define NM_MANAGER_WIMAX_ENABLED "wimax-enabled"
+#define NM_MANAGER_WIMAX_HARDWARE_ENABLED "wimax-hardware-enabled"
+#define NM_MANAGER_ACTIVE_CONNECTIONS "active-connections"
+
/* Not exported */
#define NM_MANAGER_HOSTNAME "hostname"
#define NM_MANAGER_SLEEPING "sleeping"
@@ -104,6 +115,8 @@ NMState nm_manager_get_state (NMManager *manager);
GSList *nm_manager_get_connections (NMManager *manager, NMConnectionScope scope);
+gboolean nm_manager_auto_user_connections_allowed (NMManager *manager);
+
NMConnection * nm_manager_get_connection_by_object_path (NMManager *manager,
NMConnectionScope scope,
const char *path);
diff --git a/src/nm-netlink-monitor.c b/src/nm-netlink-monitor.c
index 10bf239d5d..13b3ab9850 100644
--- a/src/nm-netlink-monitor.c
+++ b/src/nm-netlink-monitor.c
@@ -282,7 +282,7 @@ event_connection_setup (NMNetlinkMonitor *self, GError **error)
g_return_val_if_fail (priv->io_channel == NULL, FALSE);
/* Set up the event listener connection */
- cb = nl_cb_alloc (NL_CB_VERBOSE);
+ cb = nl_cb_alloc (NL_CB_DEFAULT);
priv->nlh_event = nl_handle_alloc_cb (cb);
nl_cb_put (cb);
if (!priv->nlh_event) {
@@ -344,7 +344,7 @@ sync_connection_setup (NMNetlinkMonitor *self, GError **error)
#endif
/* Set up the event listener connection */
- cb = nl_cb_alloc (NL_CB_VERBOSE);
+ cb = nl_cb_alloc (NL_CB_DEFAULT);
priv->nlh_sync = nl_handle_alloc_cb (cb);
nl_cb_put (cb);
if (!priv->nlh_sync) {
diff --git a/src/nm-policy-hostname.c b/src/nm-policy-hostname.c
index a273a9202f..4fe69c5a9b 100644
--- a/src/nm-policy-hostname.c
+++ b/src/nm-policy-hostname.c
@@ -24,12 +24,12 @@
#include <errno.h>
#include <netdb.h>
#include <ctype.h>
+#include <arpa/inet.h>
#include <glib.h>
#include "nm-logging.h"
#include "nm-policy-hostname.h"
-#include "nm-policy-hosts.h"
/************************************************************************/
@@ -40,7 +40,10 @@ struct HostnameThread {
gboolean dead;
int ret;
- guint32 ip4_addr;
+ struct sockaddr_in addr4;
+ struct sockaddr_in6 addr6;
+ struct sockaddr *addr;
+ size_t addr_size;
char hostname[NI_MAXHOST + 1];
HostnameThreadCallback callback;
@@ -53,9 +56,10 @@ hostname_thread_run_cb (gpointer user_data)
HostnameThread *ht = (HostnameThread *) user_data;
const char *hostname = NULL;
- if (strlen (ht->hostname))
+ if (strlen (ht->hostname) && strcmp (ht->hostname, "."))
hostname = ht->hostname;
+ nm_log_dbg (LOGD_DNS, "(%p) calling address reverse-lookup result handler", ht);
(*ht->callback) (ht, ht->ret, hostname, ht->user_data);
return FALSE;
}
@@ -64,9 +68,10 @@ static gpointer
hostname_thread_worker (gpointer data)
{
HostnameThread *ht = (HostnameThread *) data;
- struct sockaddr_in addr;
int i;
+ nm_log_dbg (LOGD_DNS, "(%p) starting address reverse-lookup", ht);
+
g_mutex_lock (ht->lock);
if (ht->dead) {
g_mutex_unlock (ht->lock);
@@ -74,21 +79,22 @@ hostname_thread_worker (gpointer data)
}
g_mutex_unlock (ht->lock);
- addr.sin_family = AF_INET;
- addr.sin_addr.s_addr = ht->ip4_addr;
-
- ht->ret = getnameinfo ((struct sockaddr *) &addr, sizeof (struct sockaddr_in),
- ht->hostname, NI_MAXHOST, NULL, 0,
- NI_NAMEREQD);
+ ht->ret = getnameinfo (ht->addr, ht->addr_size, ht->hostname, NI_MAXHOST, NULL, 0, NI_NAMEREQD);
if (ht->ret == 0) {
+ nm_log_dbg (LOGD_DNS, "(%p) address reverse-lookup returned hostname '%s'",
+ ht, ht->hostname);
for (i = 0; i < strlen (ht->hostname); i++)
ht->hostname[i] = tolower (ht->hostname[i]);
+ } else {
+ nm_log_dbg (LOGD_DNS, "(%p) address reverse-lookup failed: (%d) %s",
+ ht, ht->ret, gai_strerror (ht->ret));
}
/* Don't track the idle handler ID because by the time the g_idle_add()
* returns the ID, the handler may already have run and freed the
* HostnameThread.
*/
+ nm_log_dbg (LOGD_DNS, "(%p) scheduling address reverse-lookup result handler", ht);
g_idle_add (hostname_thread_run_cb, ht);
return (gpointer) TRUE;
}
@@ -98,15 +104,21 @@ hostname_thread_free (HostnameThread *ht)
{
g_return_if_fail (ht != NULL);
+ nm_log_dbg (LOGD_DNS, "(%p) freeing reverse-lookup thread", ht);
+
g_mutex_free (ht->lock);
memset (ht, 0, sizeof (HostnameThread));
g_free (ht);
}
HostnameThread *
-hostname_thread_new (guint32 ip4_addr, HostnameThreadCallback callback, gpointer user_data)
+hostname4_thread_new (guint32 ip4_addr,
+ HostnameThreadCallback callback,
+ gpointer user_data)
{
HostnameThread *ht;
+ struct sockaddr_in addr4;
+ char buf[INET_ADDRSTRLEN + 1];
ht = g_malloc0 (sizeof (HostnameThread));
g_assert (ht);
@@ -114,14 +126,59 @@ hostname_thread_new (guint32 ip4_addr, HostnameThreadCallback callback, gpointer
ht->lock = g_mutex_new ();
ht->callback = callback;
ht->user_data = user_data;
- ht->ip4_addr = ip4_addr;
+
+ ht->addr4.sin_family = AF_INET;
+ ht->addr4.sin_addr.s_addr = ip4_addr;
+ ht->addr = (struct sockaddr *) &ht->addr4;
+ ht->addr_size = sizeof (ht->addr4);
ht->thread = g_thread_create (hostname_thread_worker, ht, FALSE, NULL);
if (!ht->thread) {
hostname_thread_free (ht);
- ht = NULL;
+ return NULL;
}
+ if (!inet_ntop (AF_INET, &addr4.sin_addr, buf, sizeof (buf)))
+ strcpy (buf, "(unknown)");
+
+ nm_log_dbg (LOGD_DNS, "(%p) started IPv4 reverse-lookup thread for address '%s'",
+ ht, buf);
+
+ return ht;
+}
+
+HostnameThread *
+hostname6_thread_new (const struct in6_addr *ip6_addr,
+ HostnameThreadCallback callback,
+ gpointer user_data)
+{
+ HostnameThread *ht;
+ char buf[INET6_ADDRSTRLEN + 1];
+
+ ht = g_malloc0 (sizeof (HostnameThread));
+ g_assert (ht);
+
+ ht->lock = g_mutex_new ();
+ ht->callback = callback;
+ ht->user_data = user_data;
+
+ ht->addr6.sin6_family = AF_INET6;
+ ht->addr6.sin6_addr = *ip6_addr;
+ ht->addr = (struct sockaddr *) &ht->addr6;
+ ht->addr_size = sizeof (ht->addr6);
+
+ ht->thread = g_thread_create (hostname_thread_worker, ht, FALSE, NULL);
+ if (!ht->thread) {
+ hostname_thread_free (ht);
+ return NULL;
+ }
+
+ if (!inet_ntop (AF_INET, ip6_addr, buf, sizeof (buf)))
+ strcpy (buf, "(unknown)");
+
+ nm_log_dbg (LOGD_DNS, "(%p) started IPv6 reverse-lookup thread for address '%s'",
+ ht, buf);
+
return ht;
}
@@ -130,6 +187,8 @@ hostname_thread_kill (HostnameThread *ht)
{
g_return_if_fail (ht != NULL);
+ nm_log_dbg (LOGD_DNS, "(%p) stopping reverse-lookup thread", ht);
+
g_mutex_lock (ht->lock);
ht->dead = TRUE;
g_mutex_unlock (ht->lock);
@@ -145,21 +204,18 @@ hostname_thread_is_dead (HostnameThread *ht)
/************************************************************************/
-#define FALLBACK_HOSTNAME "localhost.localdomain"
+#define FALLBACK_HOSTNAME4 "localhost.localdomain"
gboolean
nm_policy_set_system_hostname (const char *new_hostname, const char *msg)
{
char old_hostname[HOST_NAME_MAX + 1];
- int ret = 0;
const char *name;
- gboolean set_hostname = TRUE, changed = FALSE;
+ int ret;
if (new_hostname)
g_warn_if_fail (strlen (new_hostname));
- name = (new_hostname && strlen (new_hostname)) ? new_hostname : FALLBACK_HOSTNAME;
-
old_hostname[HOST_NAME_MAX] = '\0';
errno = 0;
ret = gethostname (old_hostname, HOST_NAME_MAX);
@@ -169,37 +225,19 @@ nm_policy_set_system_hostname (const char *new_hostname, const char *msg)
} else {
/* Don't set the hostname if it isn't actually changing */
if ( (new_hostname && !strcmp (old_hostname, new_hostname))
- || (!new_hostname && !strcmp (old_hostname, FALLBACK_HOSTNAME)))
- set_hostname = FALSE;
- }
-
- if (set_hostname) {
- nm_log_info (LOGD_DNS, "Setting system hostname to '%s' (%s)", name, msg);
- ret = sethostname (name, strlen (name));
- if (ret != 0) {
- nm_log_warn (LOGD_DNS, "couldn't set the system hostname to '%s': (%d) %s",
- name, errno, strerror (errno));
+ || (!new_hostname && !strcmp (old_hostname, FALLBACK_HOSTNAME4)))
return FALSE;
- }
}
- /* But even if the hostname isn't changing, always try updating /etc/hosts
- * just in case the hostname changed while NM wasn't running; we need to
- * make sure that /etc/hosts has valid mappings for '127.0.0.1' and the
- * current system hostname. If those exist,
- * nm_policy_hosts_update_etc_hosts() will just return and won't touch
- * /etc/hosts at all.
- */
- if (!nm_policy_hosts_update_etc_hosts (name, FALLBACK_HOSTNAME, &changed)) {
- /* error updating /etc/hosts; fallback to localhost.localdomain */
- nm_log_info (LOGD_DNS, "Setting system hostname to '" FALLBACK_HOSTNAME "' (error updating /etc/hosts)");
- ret = sethostname (FALLBACK_HOSTNAME, strlen (FALLBACK_HOSTNAME));
- if (ret != 0) {
- nm_log_warn (LOGD_DNS, "couldn't set the fallback system hostname (%s): (%d) %s",
- FALLBACK_HOSTNAME, errno, strerror (errno));
- }
+ name = (new_hostname && strlen (new_hostname)) ? new_hostname : FALLBACK_HOSTNAME4;
+
+ nm_log_info (LOGD_DNS, "Setting system hostname to '%s' (%s)", name, msg);
+ ret = sethostname (name, strlen (name));
+ if (ret != 0) {
+ nm_log_warn (LOGD_DNS, "couldn't set the system hostname to '%s': (%d) %s",
+ name, errno, strerror (errno));
}
- return changed;
+ return (ret == 0);
}
diff --git a/src/nm-policy-hostname.h b/src/nm-policy-hostname.h
index c59ca41078..e76713f16d 100644
--- a/src/nm-policy-hostname.h
+++ b/src/nm-policy-hostname.h
@@ -34,9 +34,13 @@ typedef void (*HostnameThreadCallback) (HostnameThread *ht,
const char *hostname,
gpointer user_data);
-HostnameThread * hostname_thread_new (guint32 ip4_addr,
- HostnameThreadCallback callback,
- gpointer user_data);
+HostnameThread * hostname4_thread_new (guint32 ip4_addr,
+ HostnameThreadCallback callback,
+ gpointer user_data);
+
+HostnameThread * hostname6_thread_new (const struct in6_addr *ip6_addr,
+ HostnameThreadCallback callback,
+ gpointer user_data);
void hostname_thread_free (HostnameThread *ht);
diff --git a/src/nm-policy-hosts.c b/src/nm-policy-hosts.c
index 7723c99759..8bbd1d3b5f 100644
--- a/src/nm-policy-hosts.c
+++ b/src/nm-policy-hosts.c
@@ -18,218 +18,76 @@
* Copyright (C) 2004 - 2010 Red Hat, Inc.
*/
+#include <config.h>
#include <string.h>
-#include <unistd.h>
-#include <errno.h>
-#include <netdb.h>
-#include <ctype.h>
#include "nm-policy-hosts.h"
#include "nm-logging.h"
-gboolean
-nm_policy_hosts_find_token (const char *line, const char *token)
-{
- const char *start = line, *p = line;
-
- g_return_val_if_fail (line != NULL, FALSE);
- g_return_val_if_fail (token != NULL, FALSE);
- g_return_val_if_fail (strlen (token) > 0, FALSE);
-
- /* Walk through the line to find the next whitespace character */
- while (p <= line + strlen (line)) {
- if (isblank (*p) || (*p == '\0')) {
- /* Token starts with 'start' and ends with 'end' */
- if ((p > start) && *start && (p - start == strlen (token)) && !strncmp (start, token, (p - start)))
- return TRUE; /* found */
-
- /* not found; advance start and continue looking */
- start = p + 1;
- }
- p++;
- }
-
- return FALSE;
-}
-
-static gboolean
-is_local_mapping (const char *str, const char *hostname)
-{
- return ( !strncmp (str, "127.0.0.1", strlen ("127.0.0.1"))
- && nm_policy_hosts_find_token (str, hostname ? hostname : "localhost"));
-}
+#define ADDED_TAG "# Added by NetworkManager"
GString *
-nm_policy_get_etc_hosts (const char **lines,
- gsize existing_len,
- const char *hostname,
- const char *fallback_hostname,
- GError **error)
+nm_policy_get_etc_hosts (const char *contents, gsize contents_len)
{
- GString *contents = NULL;
- const char **line;
- gboolean found_host_nonlocal = FALSE;
- gboolean found_host = FALSE;
- gboolean found_localhost = FALSE;
- gboolean initial_comments = TRUE;
- gboolean added = FALSE;
-
- g_return_val_if_fail (lines != NULL, FALSE);
- g_return_val_if_fail (hostname != NULL, FALSE);
-
- /* /etc/hosts needs at least two things:
- *
- * 1) current hostname mapped to any address
- * 2) 'localhost' mapped to 127.0.0.1
- *
- * If both these conditions exist in /etc/hosts, we don't need to bother
- * updating the file.
- */
-
- /* Look for the two cases from above */
- for (line = lines; lines && *line; line++) {
- if (strlen (*line) && (*line[0] != '#')) {
- if (nm_policy_hosts_find_token (*line, hostname)) {
- if (!is_local_mapping (*line, "localhost")) {
- /* hostname is not on a 127.0.0.1 line or the line does not
- * contain 'localhost'.
- */
- found_host_nonlocal = TRUE;
- }
- found_host = TRUE;
- }
-
- if (is_local_mapping (*line, "localhost")) {
- /* a 127.0.0.1 line containing 'localhost' */
- found_localhost = TRUE;
- }
- }
-
- if (found_localhost && found_host)
- return NULL; /* No update required */
- }
+ char **lines = NULL, **iter;
+ GString *new_contents = NULL;
- contents = g_string_sized_new (existing_len ? existing_len + 100 : 200);
- if (!contents) {
- g_set_error_literal (error, 0, 0, "not enough memory");
+ if (contents_len == 0 || !strstr (contents, ADDED_TAG))
return NULL;
- }
-
- /* Construct the new hosts file; replace any 127.0.0.1 entry that is at the
- * beginning of the file or right after initial comments and contains
- * the string 'localhost'. If there is no 127.0.0.1 entry at the beginning
- * or after initial comments that contains 'localhost', add one there
- * and ignore any other 127.0.0.1 entries that contain 'localhost'.
- */
- for (line = lines, initial_comments = TRUE; lines && *line; line++) {
- gboolean add_line = TRUE;
-
- /* This is the first line after the initial comments */
- if (strlen (*line) && initial_comments && (*line[0] != '#')) {
- initial_comments = FALSE;
-
- /* If some other line contained the hostname but not 'localhost',
- * make a simple localhost mapping and assume the user knows what
- * they are doing with their manual hostname entry. Otherwise if
- * the hostname wasn't found somewhere else, add it to the localhost
- * mapping line to make sure it's mapped to something.
- */
- if (found_host_nonlocal)
- g_string_append (contents, "127.0.0.1");
- else
- g_string_append_printf (contents, "127.0.0.1\t%s", hostname);
- if (strcmp (hostname, fallback_hostname)) {
- g_string_append_printf (contents, "\t%s", fallback_hostname);
- /* Don't add a standalone 'localhost.localdomain' 127 mapping */
- if (is_local_mapping (*line, fallback_hostname))
- add_line = FALSE;
- }
+ new_contents = g_string_sized_new (contents_len);
- g_string_append (contents, "\tlocalhost\n");
- added = TRUE;
-
- /* Don't add the original line if it is a 'localhost' mapping */
- if (is_local_mapping (*line, "localhost"))
- add_line = FALSE;
- }
-
- if (add_line) {
- g_string_append (contents, *line);
- /* Only append the new line if this isn't the last line in the file */
- if (*(line+1))
- g_string_append_c (contents, '\n');
+ /* Remove "# Added ..." lines */
+ lines = g_strsplit_set (contents, "\n\r", -1);
+ for (iter = lines; iter && *iter; iter++) {
+ if (!strstr (*iter, ADDED_TAG)) {
+ g_string_append (new_contents, *iter);
+ g_string_append_c (new_contents, '\n');
}
}
+ g_strfreev (lines);
- /* Hmm, /etc/hosts was empty for some reason */
- if (!added) {
- g_string_append (contents, "# Do not remove the following line, or various programs\n");
- g_string_append (contents, "# that require network functionality will fail.\n");
- g_string_append_printf (contents, "127.0.0.1\t%s\tlocalhost\n", fallback_hostname);
- }
+ /* Remove last blank line at end of file, if one exists; this is
+ * an artifact of how g_strsplit_set() works.
+ */
+ if ( (new_contents->len > 2)
+ && (new_contents->str[new_contents->len - 1] == '\n'))
+ g_string_truncate (new_contents, new_contents->len - 1);
- return contents;
+ return new_contents;
}
-gboolean
-nm_policy_hosts_update_etc_hosts (const char *hostname,
- const char *fallback_hostname,
- gboolean *out_changed)
+/* remove any leftover "# Added by NetworkManager" lines */
+void
+nm_policy_hosts_clean_etc_hosts (void)
{
char *contents = NULL;
- char **lines = NULL;
- GError *error = NULL;
- GString *new_contents = NULL;
gsize contents_len = 0;
- gboolean success = FALSE;
-
- g_return_val_if_fail (hostname != NULL, FALSE);
- g_return_val_if_fail (out_changed != NULL, FALSE);
+ GError *error = NULL;
+ GString *new;
if (!g_file_get_contents (SYSCONFDIR "/hosts", &contents, &contents_len, &error)) {
nm_log_warn (LOGD_DNS, "couldn't read " SYSCONFDIR "/hosts: (%d) %s",
error ? error->code : 0,
(error && error->message) ? error->message : "(unknown)");
g_clear_error (&error);
- return FALSE;
+ return;
}
- /* Get the new /etc/hosts contents */
- lines = g_strsplit_set (contents, "\n\r", 0);
- new_contents = nm_policy_get_etc_hosts ((const char **) lines,
- contents_len,
- hostname,
- fallback_hostname,
- &error);
- g_strfreev (lines);
- g_free (contents);
-
- if (new_contents) {
- nm_log_info (LOGD_DNS, "Updating /etc/hosts with new system hostname");
+ new = nm_policy_get_etc_hosts (contents, contents_len);
+ if (new && new->len) {
+ nm_log_info (LOGD_DNS, "Cleaning leftovers from /etc/hosts");
g_clear_error (&error);
- /* And actually update /etc/hosts */
- if (!g_file_set_contents (SYSCONFDIR "/hosts", new_contents->str, -1, &error)) {
- nm_log_warn (LOGD_DNS, "couldn't update " SYSCONFDIR "/hosts: (%d) %s",
- error ? error->code : 0,
- (error && error->message) ? error->message : "(unknown)");
+ if (!g_file_set_contents (SYSCONFDIR "/hosts", new->str, -1, &error)) {
+ nm_log_dbg (LOGD_DNS, "couldn't update " SYSCONFDIR "/hosts: (%d) %s",
+ error ? error->code : 0,
+ (error && error->message) ? error->message : "(unknown)");
g_clear_error (&error);
- } else {
- success = TRUE;
- *out_changed = TRUE;
}
-
- g_string_free (new_contents, TRUE);
- } else if (!error) {
- /* No change required */
- success = TRUE;
- } else {
- nm_log_warn (LOGD_DNS, "couldn't read " SYSCONFDIR "/hosts: (%d) %s",
- error->code, error->message ? error->message : "(unknown)");
- g_clear_error (&error);
}
- return success;
+ if (new)
+ g_string_free (new, TRUE);
}
diff --git a/src/nm-policy-hosts.h b/src/nm-policy-hosts.h
index 0a77e6678a..9f4bf9a9a9 100644
--- a/src/nm-policy-hosts.h
+++ b/src/nm-policy-hosts.h
@@ -23,18 +23,10 @@
#include <glib.h>
-gboolean nm_policy_hosts_update_etc_hosts (const char *hostname,
- const char *fallback_hostname,
- gboolean *out_changed);
+void nm_policy_hosts_clean_etc_hosts (void);
/* Only for testcases; don't use outside of nm-policy-hosts.c */
-gboolean nm_policy_hosts_find_token (const char *line, const char *token);
-
-GString *nm_policy_get_etc_hosts (const char **lines,
- gsize existing_len,
- const char *hostname,
- const char *fallback_hostname,
- GError **error);
+GString *nm_policy_get_etc_hosts (const char *contents, gsize contents_len);
#endif /* NM_POLICY_HOSTS_H */
diff --git a/src/nm-policy.c b/src/nm-policy.c
index a7bd96f1bb..53557039e5 100644
--- a/src/nm-policy.c
+++ b/src/nm-policy.c
@@ -19,6 +19,7 @@
* Copyright (C) 2007 - 2008 Novell, Inc.
*/
+#include <config.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
@@ -39,9 +40,8 @@
#include "nm-setting-ip4-config.h"
#include "nm-setting-connection.h"
#include "nm-system.h"
-#include "nm-named-manager.h"
+#include "nm-dns-manager.h"
#include "nm-vpn-manager.h"
-#include "nm-policy-hosts.h"
#include "nm-policy-hostname.h"
struct NMPolicy {
@@ -61,9 +61,12 @@ struct NMPolicy {
HostnameThread *lookup;
char *orig_hostname; /* hostname at NM start time */
+ char *cur_hostname; /* hostname we want to assign */
};
#define INVALID_TAG "invalid"
+#define RETRIES_TAG "autoconnect-retries"
+#define RETRIES_DEFAULT 4
static const char *
get_connection_id (NMConnection *connection)
@@ -137,7 +140,8 @@ get_best_ip4_device (NMManager *manager, NMActRequest **out_req)
continue;
/* 'never-default' devices can't ever be the default */
- if (s_ip4 && nm_setting_ip4_config_get_never_default (s_ip4))
+ if ( (s_ip4 && nm_setting_ip4_config_get_never_default (s_ip4))
+ || nm_ip4_config_get_never_default (ip4_config))
continue;
prio = nm_device_get_priority (dev);
@@ -225,9 +229,23 @@ get_best_ip6_device (NMManager *manager, NMActRequest **out_req)
}
static void
-_set_hostname (const char *new_hostname, const char *msg)
+_set_hostname (NMPolicy *policy,
+ gboolean change_hostname,
+ const char *new_hostname,
+ const char *msg)
{
- if (nm_policy_set_system_hostname (new_hostname, msg))
+ if (change_hostname) {
+ NMDnsManager *dns_mgr;
+
+ g_free (policy->cur_hostname);
+ policy->cur_hostname = g_strdup (new_hostname);
+
+ dns_mgr = nm_dns_manager_get (NULL);
+ nm_dns_manager_set_hostname (dns_mgr, policy->cur_hostname);
+ g_object_unref (dns_mgr);
+ }
+
+ if (nm_policy_set_system_hostname (policy->cur_hostname, msg))
nm_utils_call_dispatcher ("hostname", NULL, NULL, NULL);
}
@@ -244,24 +262,23 @@ lookup_callback (HostnameThread *thread,
if (!hostname_thread_is_dead (thread) && (thread == policy->lookup)) {
policy->lookup = NULL;
if (!hostname) {
- /* No valid IP4 config (!!); fall back to localhost.localdomain */
+ /* Fall back to localhost.localdomain */
msg = g_strdup_printf ("address lookup failed: %d", result);
- _set_hostname (NULL, msg);
+ _set_hostname (policy, TRUE, NULL, msg);
g_free (msg);
} else
- _set_hostname (hostname, "from address lookup");
+ _set_hostname (policy, TRUE, hostname, "from address lookup");
}
hostname_thread_free (thread);
}
static void
-update_system_hostname (NMPolicy *policy, NMDevice *best)
+update_system_hostname (NMPolicy *policy, NMDevice *best4, NMDevice *best6)
{
char *configured_hostname = NULL;
- NMActRequest *best_req = NULL;
- NMDHCP4Config *dhcp4_config;
- NMIP4Config *ip4_config;
- NMIP4Address *addr;
+ NMActRequest *best_req4 = NULL;
+ NMActRequest *best_req6 = NULL;
+ const char *dhcp_hostname, *p;
g_return_if_fail (policy != NULL);
@@ -282,39 +299,62 @@ update_system_hostname (NMPolicy *policy, NMDevice *best)
/* Try a persistent hostname first */
g_object_get (G_OBJECT (policy->manager), NM_MANAGER_HOSTNAME, &configured_hostname, NULL);
if (configured_hostname) {
- _set_hostname (configured_hostname, "from system configuration");
+ _set_hostname (policy, TRUE, configured_hostname, "from system configuration");
g_free (configured_hostname);
return;
}
/* Try automatically determined hostname from the best device's IP config */
- if (!best)
- best = get_best_ip4_device (policy->manager, &best_req);
+ if (!best4)
+ best4 = get_best_ip4_device (policy->manager, &best_req4);
+ if (!best6)
+ best6 = get_best_ip6_device (policy->manager, &best_req6);
- if (!best) {
+ if (!best4 && !best6) {
/* No best device; fall back to original hostname or if there wasn't
* one, 'localhost.localdomain'
*/
- _set_hostname (policy->orig_hostname, "no default device");
+ _set_hostname (policy, TRUE, policy->orig_hostname, "no default device");
return;
}
- /* Grab a hostname out of the device's DHCP4 config */
- dhcp4_config = nm_device_get_dhcp4_config (best);
- if (dhcp4_config) {
- const char *dhcp4_hostname, *p;
-
- p = dhcp4_hostname = nm_dhcp4_config_get_option (dhcp4_config, "host_name");
- if (dhcp4_hostname && strlen (dhcp4_hostname)) {
- /* Sanity check */
- while (*p) {
- if (!isblank (*p++)) {
- _set_hostname (dhcp4_hostname, "from DHCP");
- return;
+ if (best4) {
+ NMDHCP4Config *dhcp4_config;
+
+ /* Grab a hostname out of the device's DHCP4 config */
+ dhcp4_config = nm_device_get_dhcp4_config (best4);
+ if (dhcp4_config) {
+ p = dhcp_hostname = nm_dhcp4_config_get_option (dhcp4_config, "host_name");
+ if (dhcp_hostname && strlen (dhcp_hostname)) {
+ /* Sanity check; strip leading spaces */
+ while (*p) {
+ if (!isblank (*p++)) {
+ _set_hostname (policy, TRUE, dhcp_hostname, "from DHCPv4");
+ return;
+ }
}
+ nm_log_warn (LOGD_DNS, "DHCPv4-provided hostname '%s' looks invalid; ignoring it",
+ dhcp_hostname);
+ }
+ }
+ } else if (best6) {
+ NMDHCP6Config *dhcp6_config;
+
+ /* Grab a hostname out of the device's DHCP4 config */
+ dhcp6_config = nm_device_get_dhcp6_config (best6);
+ if (dhcp6_config) {
+ 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) {
+ if (!isblank (*p++)) {
+ _set_hostname (policy, TRUE, dhcp_hostname, "from DHCPv6");
+ return;
+ }
+ }
+ nm_log_warn (LOGD_DNS, "DHCPv6-provided hostname '%s' looks invalid; ignoring it",
+ dhcp_hostname);
}
- nm_log_warn (LOGD_DNS, "DHCP-provided hostname '%s' looks invalid; ignoring it",
- dhcp4_hostname);
}
}
@@ -322,40 +362,64 @@ update_system_hostname (NMPolicy *policy, NMDevice *best)
* when NM started up.
*/
if (policy->orig_hostname) {
- _set_hostname (policy->orig_hostname, "from system startup");
+ _set_hostname (policy, TRUE, policy->orig_hostname, "from system startup");
return;
}
- /* No configured hostname, no automatically determined hostname, and
- * no bootup hostname. Start reverse DNS of the current IP address.
+ /* No configured hostname, no automatically determined hostname, and no
+ * bootup hostname. Start reverse DNS of the current IPv4 or IPv6 address.
*/
- ip4_config = nm_device_get_ip4_config (best);
- if ( !ip4_config
- || (nm_ip4_config_get_num_nameservers (ip4_config) == 0)
- || (nm_ip4_config_get_num_addresses (ip4_config) == 0)) {
- /* No valid IP4 config (!!); fall back to localhost.localdomain */
- _set_hostname (NULL, "no IPv4 config");
- return;
- }
+ if (best4) {
+ NMIP4Config *ip4_config;
+ NMIP4Address *addr4;
- addr = nm_ip4_config_get_address (ip4_config, 0);
- g_assert (addr); /* checked for > 1 address above */
+ ip4_config = nm_device_get_ip4_config (best4);
+ if ( !ip4_config
+ || (nm_ip4_config_get_num_nameservers (ip4_config) == 0)
+ || (nm_ip4_config_get_num_addresses (ip4_config) == 0)) {
+ /* No valid IP4 config (!!); fall back to localhost.localdomain */
+ _set_hostname (policy, TRUE, NULL, "no IPv4 config");
+ return;
+ }
+
+ addr4 = nm_ip4_config_get_address (ip4_config, 0);
+ g_assert (addr4); /* checked for > 1 address above */
+
+ /* Start the hostname lookup thread */
+ policy->lookup = hostname4_thread_new (nm_ip4_address_get_address (addr4), lookup_callback, policy);
+ } else if (best6) {
+ NMIP6Config *ip6_config;
+ NMIP6Address *addr6;
+
+ ip6_config = nm_device_get_ip6_config (best6);
+ if ( !ip6_config
+ || (nm_ip6_config_get_num_nameservers (ip6_config) == 0)
+ || (nm_ip6_config_get_num_addresses (ip6_config) == 0)) {
+ /* No valid IP6 config (!!); fall back to localhost.localdomain */
+ _set_hostname (policy, TRUE, NULL, "no IPv6 config");
+ return;
+ }
+
+ addr6 = nm_ip6_config_get_address (ip6_config, 0);
+ g_assert (addr6); /* checked for > 1 address above */
+
+ /* Start the hostname lookup thread */
+ policy->lookup = hostname6_thread_new (nm_ip6_address_get_address (addr6), lookup_callback, policy);
+ }
- /* Start the hostname lookup thread */
- policy->lookup = hostname_thread_new (nm_ip4_address_get_address (addr), lookup_callback, policy);
if (!policy->lookup) {
/* Fall back to 'localhost.localdomain' */
- _set_hostname (NULL, "error starting hostname thread");
+ _set_hostname (policy, TRUE, NULL, "error starting hostname thread");
}
}
static void
update_ip4_routing_and_dns (NMPolicy *policy, gboolean force_update)
{
- NMNamedIPConfigType dns_type = NM_NAMED_IP_CONFIG_TYPE_BEST_DEVICE;
+ NMDnsIPConfigType dns_type = NM_DNS_IP_CONFIG_TYPE_BEST_DEVICE;
NMDevice *best = NULL;
NMActRequest *best_req = NULL;
- NMNamedManager *named_mgr;
+ NMDnsManager *dns_mgr;
GSList *devices = NULL, *iter, *vpns;
NMIP4Config *ip4_config = NULL;
NMIP4Address *addr;
@@ -382,6 +446,13 @@ update_ip4_routing_and_dns (NMPolicy *policy, gboolean force_update)
/* If it's marked 'never-default', don't make it default */
vpn_connection = nm_vpn_connection_get_connection (candidate);
g_assert (vpn_connection);
+
+ /* Check the active IP4 config from the VPN service daemon */
+ ip4_config = nm_vpn_connection_get_ip4_config (candidate);
+ if (ip4_config && nm_ip4_config_get_never_default (ip4_config))
+ can_default = FALSE;
+
+ /* Check the user's preference from the NMConnection */
s_ip4 = (NMSettingIP4Config *) nm_connection_get_setting (vpn_connection, NM_TYPE_SETTING_IP4_CONFIG);
if (s_ip4 && nm_setting_ip4_config_get_never_default (s_ip4))
can_default = FALSE;
@@ -393,7 +464,6 @@ update_ip4_routing_and_dns (NMPolicy *policy, gboolean force_update)
ip_iface = nm_vpn_connection_get_ip_iface (candidate);
connection = nm_vpn_connection_get_connection (candidate);
- ip4_config = nm_vpn_connection_get_ip4_config (candidate);
addr = nm_ip4_config_get_address (ip4_config, 0);
parent = nm_vpn_connection_get_parent_device (candidate);
@@ -406,7 +476,7 @@ update_ip4_routing_and_dns (NMPolicy *policy, gboolean force_update)
nm_device_get_ip_iface (parent),
nm_ip4_config_get_mss (parent_ip4));
- dns_type = NM_NAMED_IP_CONFIG_TYPE_VPN;
+ dns_type = NM_DNS_IP_CONFIG_TYPE_VPN;
}
g_object_unref (candidate);
}
@@ -422,7 +492,7 @@ update_ip4_routing_and_dns (NMPolicy *policy, gboolean force_update)
nm_system_replace_default_ip4_route (ip_iface, nm_ip4_address_get_gateway (addr), nm_ip4_config_get_mss (ip4_config));
- dns_type = NM_NAMED_IP_CONFIG_TYPE_BEST_DEVICE;
+ dns_type = NM_DNS_IP_CONFIG_TYPE_BEST_DEVICE;
}
if (!ip_iface || !ip4_config) {
@@ -446,9 +516,9 @@ update_ip4_routing_and_dns (NMPolicy *policy, gboolean force_update)
nm_act_request_set_default (req, FALSE);
}
- named_mgr = nm_named_manager_get ();
- nm_named_manager_add_ip4_config (named_mgr, ip_iface, ip4_config, dns_type);
- g_object_unref (named_mgr);
+ dns_mgr = nm_dns_manager_get (NULL);
+ nm_dns_manager_add_ip4_config (dns_mgr, ip_iface, ip4_config, dns_type);
+ g_object_unref (dns_mgr);
/* Now set new default active connection _after_ updating DNS info, so that
* if the connection is shared dnsmasq picks up the right stuff.
@@ -473,10 +543,10 @@ out:
static void
update_ip6_routing_and_dns (NMPolicy *policy, gboolean force_update)
{
- NMNamedIPConfigType dns_type = NM_NAMED_IP_CONFIG_TYPE_BEST_DEVICE;
+ NMDnsIPConfigType dns_type = NM_DNS_IP_CONFIG_TYPE_BEST_DEVICE;
NMDevice *best = NULL;
NMActRequest *best_req = NULL;
- NMNamedManager *named_mgr;
+ NMDnsManager *dns_mgr;
GSList *devices = NULL, *iter;
#if NOT_YET
GSList *vpns;
@@ -531,7 +601,7 @@ update_ip6_routing_and_dns (NMPolicy *policy, gboolean force_update)
nm_device_get_ip_iface (parent),
nm_ip6_config_get_mss (parent_ip4));
- dns_type = NM_NAMED_IP_CONFIG_TYPE_VPN;
+ dns_type = NM_DNS_IP_CONFIG_TYPE_VPN;
}
g_object_unref (candidate);
}
@@ -548,7 +618,7 @@ update_ip6_routing_and_dns (NMPolicy *policy, gboolean force_update)
nm_system_replace_default_ip6_route (ip_iface, nm_ip6_address_get_gateway (addr));
- dns_type = NM_NAMED_IP_CONFIG_TYPE_BEST_DEVICE;
+ dns_type = NM_DNS_IP_CONFIG_TYPE_BEST_DEVICE;
}
if (!ip_iface || !ip6_config) {
@@ -572,9 +642,9 @@ update_ip6_routing_and_dns (NMPolicy *policy, gboolean force_update)
nm_act_request_set_default6 (req, FALSE);
}
- named_mgr = nm_named_manager_get ();
- nm_named_manager_add_ip6_config (named_mgr, ip_iface, ip6_config, dns_type);
- g_object_unref (named_mgr);
+ dns_mgr = nm_dns_manager_get (NULL);
+ nm_dns_manager_add_ip6_config (dns_mgr, ip_iface, ip6_config, dns_type);
+ g_object_unref (dns_mgr);
/* Now set new default active connection _after_ updating DNS info, so that
* if the connection is shared dnsmasq picks up the right stuff.
@@ -603,7 +673,19 @@ update_routing_and_dns (NMPolicy *policy, gboolean force_update)
update_ip6_routing_and_dns (policy, force_update);
/* Update the system hostname */
- update_system_hostname (policy, policy->default_device4);
+ update_system_hostname (policy, policy->default_device4, policy->default_device6);
+}
+
+static void
+set_connection_auto_retries (NMConnection *connection, guint retries)
+{
+ g_object_set_data (G_OBJECT (connection), RETRIES_TAG, GUINT_TO_POINTER (retries));
+}
+
+static guint32
+get_connection_auto_retries (NMConnection *connection)
+{
+ return GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (connection), RETRIES_TAG));
}
typedef struct {
@@ -633,32 +715,40 @@ auto_activate_device (gpointer user_data)
/* System connections first, then user connections */
connections = nm_manager_get_connections (policy->manager, NM_CONNECTION_SCOPE_SYSTEM);
- connections = g_slist_concat (connections, nm_manager_get_connections (policy->manager, NM_CONNECTION_SCOPE_USER));
+ if (nm_manager_auto_user_connections_allowed (policy->manager))
+ connections = g_slist_concat (connections, nm_manager_get_connections (policy->manager, NM_CONNECTION_SCOPE_USER));
- /* Remove connections that are in the invalid list. */
+ /* Remove connections that have INVALID_TAG and shouldn't be retried any more. */
iter = connections;
while (iter) {
NMConnection *iter_connection = NM_CONNECTION (iter->data);
GSList *next = g_slist_next (iter);
if (g_object_get_data (G_OBJECT (iter_connection), INVALID_TAG)) {
- connections = g_slist_remove_link (connections, iter);
- g_object_unref (iter_connection);
- g_slist_free (iter);
+ guint retries = get_connection_auto_retries (iter_connection);
+
+ if (retries == 0) {
+ connections = g_slist_remove_link (connections, iter);
+ g_object_unref (iter_connection);
+ g_slist_free (iter);
+ } else if (retries > 0)
+ set_connection_auto_retries (iter_connection, retries - 1);
+ } else {
+ /* Set the initial # of retries for auto-connection */
+ set_connection_auto_retries (iter_connection, RETRIES_DEFAULT);
}
+
iter = next;
}
best_connection = nm_device_get_best_auto_connection (data->device, connections, &specific_object);
if (best_connection) {
GError *error = NULL;
- const char *device_path;
- device_path = nm_device_get_path (data->device);
if (!nm_manager_activate_connection (policy->manager,
best_connection,
specific_object,
- device_path,
+ nm_device_get_path (data->device),
FALSE,
&error)) {
NMSettingConnection *s_con;
@@ -712,19 +802,20 @@ global_state_changed (NMManager *manager, NMState state, gpointer user_data)
static void
hostname_changed (NMManager *manager, GParamSpec *pspec, gpointer user_data)
{
- update_system_hostname ((NMPolicy *) user_data, NULL);
+ update_system_hostname ((NMPolicy *) user_data, NULL, NULL);
}
static void
sleeping_changed (NMManager *manager, GParamSpec *pspec, gpointer user_data)
{
- gboolean sleeping = FALSE;
+ gboolean sleeping = FALSE, enabled = FALSE;
GSList *connections, *iter;
g_object_get (G_OBJECT (manager), NM_MANAGER_SLEEPING, &sleeping, NULL);
+ g_object_get (G_OBJECT (manager), NM_MANAGER_NETWORKING_ENABLED, &enabled, NULL);
/* Clear the invalid flag on all connections so they'll get retried on wakeup */
- if (sleeping) {
+ if (sleeping || !enabled) {
connections = nm_manager_get_connections (manager, NM_CONNECTION_SCOPE_SYSTEM);
connections = g_slist_concat (connections, nm_manager_get_connections (manager, NM_CONNECTION_SCOPE_USER));
for (iter = connections; iter; iter = g_slist_next (iter))
@@ -792,23 +883,11 @@ device_state_changed (NMDevice *device,
/* Mark the connection invalid if it failed during activation so that
* it doesn't get automatically chosen over and over and over again.
*/
- if (connection) {
- gboolean fail = FALSE;
-
- if (IS_ACTIVATING_STATE (old_state)) {
+ if (connection && IS_ACTIVATING_STATE (old_state)) {
+ g_object_set_data (G_OBJECT (connection), INVALID_TAG, GUINT_TO_POINTER (TRUE));
+ if (get_connection_auto_retries (connection) == 0)
nm_log_info (LOGD_DEVICE, "Marking connection '%s' invalid.", get_connection_id (connection));
- fail = TRUE;
- } else if ( (old_state == NM_DEVICE_STATE_ACTIVATED)
- && (reason == NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED)) {
- nm_log_info (LOGD_DEVICE, "Marking connection '%s' invalid because IP configuration expired.",
- get_connection_id (connection));
- fail = TRUE;
- }
-
- if (fail) {
- g_object_set_data (G_OBJECT (connection), INVALID_TAG, GUINT_TO_POINTER (TRUE));
- nm_connection_clear_secrets (connection);
- }
+ nm_connection_clear_secrets (connection);
}
schedule_activate_check (policy, device, 3);
break;
@@ -817,6 +896,9 @@ device_state_changed (NMDevice *device,
/* Clear the invalid tag on the connection */
g_object_set_data (G_OBJECT (connection), INVALID_TAG, NULL);
+ /* Reset RETRIES_TAG to number from the setting */
+ set_connection_auto_retries (connection, RETRIES_DEFAULT);
+
/* And clear secrets so they will always be requested from the
* settings service when the next connection is made.
*/
@@ -1012,6 +1094,12 @@ connection_removed (NMManager *manager,
g_ptr_array_free (list, TRUE);
}
+static void
+manager_user_permissions_changed (NMManager *manager, NMPolicy *policy)
+{
+ schedule_activate_all (policy);
+}
+
NMPolicy *
nm_policy_new (NMManager *manager, NMVPNManager *vpn_manager)
{
@@ -1055,6 +1143,10 @@ nm_policy_new (NMManager *manager, NMVPNManager *vpn_manager)
G_CALLBACK (sleeping_changed), policy);
policy->signal_ids = g_slist_append (policy->signal_ids, (gpointer) id);
+ id = g_signal_connect (manager, "notify::" NM_MANAGER_NETWORKING_ENABLED,
+ G_CALLBACK (sleeping_changed), policy);
+ policy->signal_ids = g_slist_append (policy->signal_ids, (gpointer) id);
+
id = g_signal_connect (manager, "device-added",
G_CALLBACK (device_added), policy);
policy->signal_ids = g_slist_append (policy->signal_ids, (gpointer) id);
@@ -1083,6 +1175,10 @@ nm_policy_new (NMManager *manager, NMVPNManager *vpn_manager)
G_CALLBACK (connection_removed), policy);
policy->signal_ids = g_slist_append (policy->signal_ids, (gpointer) id);
+ id = g_signal_connect (manager, "user-permissions-changed",
+ G_CALLBACK (manager_user_permissions_changed), policy);
+ policy->signal_ids = g_slist_append (policy->signal_ids, (gpointer) id);
+
return policy;
}
@@ -1112,6 +1208,7 @@ nm_policy_destroy (NMPolicy *policy)
g_signal_handler_disconnect (policy->vpn_manager, policy->vpn_activated_id);
g_signal_handler_disconnect (policy->vpn_manager, policy->vpn_deactivated_id);
+ g_object_unref (policy->vpn_manager);
for (iter = policy->signal_ids; iter; iter = g_slist_next (iter))
g_signal_handler_disconnect (policy->manager, (gulong) iter->data);
@@ -1126,6 +1223,7 @@ nm_policy_destroy (NMPolicy *policy)
g_slist_free (policy->dev_signal_ids);
g_free (policy->orig_hostname);
+ g_free (policy->cur_hostname);
g_object_unref (policy->manager);
g_free (policy);
diff --git a/src/nm-system.c b/src/nm-system.c
index 35aa36a111..7921fec654 100644
--- a/src/nm-system.c
+++ b/src/nm-system.c
@@ -44,7 +44,6 @@
#include "nm-system.h"
#include "nm-device.h"
-#include "nm-named-manager.h"
#include "NetworkManagerUtils.h"
#include "nm-utils.h"
#include "nm-logging.h"
@@ -481,32 +480,34 @@ nm_system_apply_ip4_config (const char *iface,
return TRUE;
}
-static struct rtnl_route *
-nm_system_device_set_ip6_route (const char *iface,
- const struct in6_addr *ip6_dest,
- guint32 ip6_prefix,
- const struct in6_addr *ip6_gateway,
- guint32 metric,
- int mss)
+int
+nm_system_set_ip6_route (int ifindex,
+ const struct in6_addr *ip6_dest,
+ guint32 ip6_prefix,
+ const struct in6_addr *ip6_gateway,
+ guint32 metric,
+ int mss,
+ int protocol,
+ int table,
+ struct rtnl_route **out_route)
{
struct nl_handle *nlh;
struct rtnl_route *route;
struct nl_addr *dest_addr;
struct nl_addr *gw_addr = NULL;
- int err, iface_idx;
+ int err = 0;
- nlh = nm_netlink_get_default_handle ();
- g_return_val_if_fail (nlh != NULL, NULL);
+ g_return_val_if_fail (ifindex >= 0, -1);
- iface_idx = nm_netlink_iface_to_index (iface);
- g_return_val_if_fail (iface_idx >= 0, NULL);
+ nlh = nm_netlink_get_default_handle ();
+ g_return_val_if_fail (nlh != NULL, -1);
- route = create_route (iface_idx, mss);
- g_return_val_if_fail (route != NULL, NULL);
+ route = create_route (ifindex, mss);
+ 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, NULL);
+ 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);
@@ -521,7 +522,7 @@ nm_system_device_set_ip6_route (const char *iface,
} else {
nm_log_warn (LOGD_DEVICE | LOGD_IP6, "Invalid gateway");
rtnl_route_put (route);
- return NULL;
+ return -1;
}
}
@@ -529,13 +530,19 @@ nm_system_device_set_ip6_route (const char *iface,
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) {
/* Gateway might be over a bridge; try adding a route to gateway first */
struct rtnl_route *route2;
- route2 = create_route (iface_idx, mss);
+ route2 = create_route (ifindex, mss);
if (route2) {
/* Add route to gateway over bridge */
rtnl_route_set_dst (route2, gw_addr);
@@ -553,15 +560,12 @@ nm_system_device_set_ip6_route (const char *iface,
if (gw_addr)
nl_addr_put (gw_addr);
- if (err) {
- nm_log_err (LOGD_DEVICE | LOGD_IP6,
- "(%s): failed to set IPv6 route: %s",
- iface, nl_geterror ());
+ if (out_route)
+ *out_route = route;
+ else
rtnl_route_put (route);
- route = NULL;
- }
- return route;
+ return err;
}
static gboolean
@@ -618,24 +622,33 @@ nm_system_apply_ip6_config (const char *iface,
}
if (flags & NM_IP6_COMPARE_FLAG_ROUTES) {
+ int ifindex = nm_netlink_iface_to_index (iface);
+
for (i = 0; i < nm_ip6_config_get_num_routes (config); i++) {
NMIP6Route *route = nm_ip6_config_get_route (config, i);
- struct rtnl_route *tmp;
+ int err;
/* Don't add the route if it doesn't have a gateway and the connection
* is never supposed to be the default connection.
*/
if ( nm_ip6_config_get_never_default (config)
- && IN6_IS_ADDR_UNSPECIFIED(nm_ip6_route_get_dest (route)))
+ && IN6_IS_ADDR_UNSPECIFIED (nm_ip6_route_get_dest (route)))
continue;
- tmp = nm_system_device_set_ip6_route (iface,
- nm_ip6_route_get_dest (route),
- nm_ip6_route_get_prefix (route),
- nm_ip6_route_get_next_hop (route),
- nm_ip6_route_get_metric (route),
- nm_ip6_config_get_mss (config));
- rtnl_route_put (tmp);
+ err = nm_system_set_ip6_route (ifindex,
+ nm_ip6_route_get_dest (route),
+ nm_ip6_route_get_prefix (route),
+ nm_ip6_route_get_next_hop (route),
+ nm_ip6_route_get_metric (route),
+ nm_ip6_config_get_mss (config),
+ RTPROT_UNSPEC,
+ RT_TABLE_UNSPEC,
+ NULL);
+ if (err) {
+ nm_log_err (LOGD_DEVICE | LOGD_IP6,
+ "(%s): failed to set IPv6 route: %s",
+ iface, nl_geterror ());
+ }
}
}
@@ -772,6 +785,48 @@ nm_system_device_set_mtu (const char *iface, guint32 mtu)
return success;
}
+gboolean
+nm_system_device_set_mac (const char *iface, const struct ether_addr *mac)
+{
+ struct rtnl_link *old;
+ struct rtnl_link *new;
+ gboolean success = FALSE;
+ struct nl_handle *nlh;
+ int iface_idx;
+ struct nl_addr *addr = NULL;
+
+ g_return_val_if_fail (iface != NULL, 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);
+ 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);
+ return FALSE;
+ }
+ rtnl_link_set_addr (new, addr);
+ nlh = nm_netlink_get_default_handle ();
+ if (nlh) {
+ rtnl_link_change (nlh, old, new, 0);
+ success = TRUE;
+ }
+ rtnl_link_put (old);
+ }
+
+ rtnl_link_put (new);
+ return success;
+}
+
static struct rtnl_route *
add_ip4_route_to_gateway (const char *iface, guint32 gw, guint32 mss)
{
@@ -1183,6 +1238,45 @@ foreach_route (void (*callback)(struct nl_object *, gpointer),
nl_cache_free (route_cache);
}
+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);
+
+ 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 : "<unknown>"),
+ prefixlen);
+}
typedef struct {
const char *iface;
@@ -1196,6 +1290,10 @@ check_one_route (struct nl_object *object, void *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)
@@ -1217,22 +1315,32 @@ check_one_route (struct nl_object *object, void *user_data)
addr = nl_addr_get_binary_addr (nl);
if (addr) {
- if (IN6_IS_ADDR_LINKLOCAL (addr) || IN6_IS_ADDR_MC_LINKLOCAL (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;
}
}
+ 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");
+
err = rtnl_route_del (nm_netlink_get_default_handle (), route, 0);
- if (err < 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());
+ data->iface, err, nl_geterror ());
}
}
static void flush_routes (int ifindex, const char *iface, int family)
{
RouteCheckData check_data;
+ guint32 log_level = LOGD_IP4 | LOGD_IP6;
+ const char *sf = "UNSPEC";
g_return_if_fail (iface != NULL);
@@ -1244,6 +1352,16 @@ static void flush_routes (int ifindex, const char *iface, int family)
}
}
+ if (family == AF_INET) {
+ log_level = LOGD_IP4;
+ sf = "INET";
+ } else if (family == AF_INET6) {
+ log_level = LOGD_IP6;
+ sf = "INET6";
+ }
+ 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;
diff --git a/src/nm-system.h b/src/nm-system.h
index 2eee01417d..8cb22d747a 100644
--- a/src/nm-system.h
+++ b/src/nm-system.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) 2004 - 2008 Red Hat, Inc.
+ * Copyright (C) 2004 - 2010 Red Hat, Inc.
* Copyright (C) 2005 - 2008 Novell, Inc.
*/
@@ -25,6 +25,8 @@
#include <netlink/route/rtnl.h>
#include <netlink/route/route.h>
+#include <net/ethernet.h>
+
#include <glib.h>
#include "nm-device.h"
#include "nm-ip4-config.h"
@@ -64,6 +66,16 @@ gboolean nm_system_apply_ip4_config (const char *iface,
int priority,
NMIP4ConfigCompareFlags flags);
+int nm_system_set_ip6_route (int ifindex,
+ const struct in6_addr *ip6_dest,
+ guint32 ip6_prefix,
+ const struct in6_addr *ip6_gateway,
+ guint32 metric,
+ int mss,
+ int protocol,
+ int table,
+ struct rtnl_route **out_route);
+
gboolean nm_system_apply_ip6_config (const char *iface,
NMIP6Config *config,
int priority,
@@ -80,5 +92,6 @@ gboolean nm_system_device_is_up (NMDevice *device);
gboolean nm_system_device_is_up_with_iface (const char *iface);
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);
#endif
diff --git a/src/nm-wifi-ap.c b/src/nm-wifi-ap.c
index c7b5d8a51a..4438118729 100644
--- a/src/nm-wifi-ap.c
+++ b/src/nm-wifi-ap.c
@@ -15,13 +15,14 @@
* 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 - 2008 Red Hat, Inc.
+ * Copyright (C) 2004 - 2010 Red Hat, Inc.
* Copyright (C) 2006 - 2008 Novell, Inc.
*/
#include "wireless-helper.h"
#include <string.h>
+#include <stdlib.h>
#include "nm-wifi-ap.h"
#include "NetworkManagerUtils.h"
@@ -153,6 +154,8 @@ set_property (GObject *object, guint prop_id,
case PROP_STRENGTH:
nm_ap_set_strength (ap, g_value_get_char (value));
break;
+ case PROP_HW_ADDRESS:
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -242,7 +245,7 @@ nm_ap_class_init (NMAccessPointClass *ap_class)
NM_802_11_AP_FLAGS_NONE,
NM_802_11_AP_FLAGS_PRIVACY,
NM_802_11_AP_FLAGS_NONE,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property
(object_class, PROP_WPA_FLAGS,
@@ -252,7 +255,7 @@ nm_ap_class_init (NMAccessPointClass *ap_class)
NM_802_11_AP_SEC_NONE,
all_sec_flags,
NM_802_11_AP_SEC_NONE,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property
(object_class, PROP_RSN_FLAGS,
@@ -262,7 +265,7 @@ nm_ap_class_init (NMAccessPointClass *ap_class)
NM_802_11_AP_SEC_NONE,
all_sec_flags,
NM_802_11_AP_SEC_NONE,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property
(object_class, PROP_SSID,
@@ -270,7 +273,7 @@ nm_ap_class_init (NMAccessPointClass *ap_class)
"SSID",
"SSID",
DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property
(object_class, PROP_FREQUENCY,
@@ -278,7 +281,7 @@ nm_ap_class_init (NMAccessPointClass *ap_class)
"Frequency",
"Frequency",
0, 10000, 0,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property
(object_class, PROP_HW_ADDRESS,
@@ -286,7 +289,7 @@ nm_ap_class_init (NMAccessPointClass *ap_class)
"MAC Address",
"Hardware MAC address",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property
(object_class, PROP_MODE,
@@ -294,7 +297,7 @@ nm_ap_class_init (NMAccessPointClass *ap_class)
"Mode",
"Mode",
NM_802_11_MODE_ADHOC, NM_802_11_MODE_INFRA, NM_802_11_MODE_INFRA,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property
(object_class, PROP_MAX_BITRATE,
@@ -302,7 +305,7 @@ nm_ap_class_init (NMAccessPointClass *ap_class)
"Max Bitrate",
"Max Bitrate",
0, G_MAXUINT16, 0,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property
(object_class, PROP_STRENGTH,
@@ -310,7 +313,7 @@ nm_ap_class_init (NMAccessPointClass *ap_class)
"Strength",
"Strength",
G_MININT8, G_MAXINT8, 0,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
/* Signals */
signals[PROPERTIES_CHANGED] =
@@ -367,10 +370,69 @@ NMAccessPoint *nm_ap_new (void)
return (NMAccessPoint *) object;
}
+static guint32
+pair_to_flags (const char *str)
+{
+ g_return_val_if_fail (str != NULL, NM_802_11_AP_SEC_NONE);
+
+ if (strcmp (str, "wep40") == 0)
+ return NM_802_11_AP_SEC_PAIR_WEP40;
+ if (strcmp (str, "wep104") == 0)
+ return NM_802_11_AP_SEC_PAIR_WEP104;
+ if (strcmp (str, "tkip") == 0)
+ return NM_802_11_AP_SEC_PAIR_TKIP;
+ if (strcmp (str, "ccmp") == 0)
+ return NM_802_11_AP_SEC_PAIR_CCMP;
+ return NM_802_11_AP_SEC_NONE;
+}
-#define IEEE80211_CAP_ESS 0x0001
-#define IEEE80211_CAP_IBSS 0x0002
-#define IEEE80211_CAP_PRIVACY 0x0010
+static guint32
+group_to_flags (const char *str)
+{
+ g_return_val_if_fail (str != NULL, NM_802_11_AP_SEC_NONE);
+
+ if (strcmp (str, "wep40") == 0)
+ return NM_802_11_AP_SEC_GROUP_WEP40;
+ if (strcmp (str, "wep104") == 0)
+ return NM_802_11_AP_SEC_GROUP_WEP104;
+ if (strcmp (str, "tkip") == 0)
+ return NM_802_11_AP_SEC_GROUP_TKIP;
+ if (strcmp (str, "ccmp") == 0)
+ return NM_802_11_AP_SEC_GROUP_CCMP;
+ return NM_802_11_AP_SEC_NONE;
+}
+
+static guint32
+security_from_dict (GHashTable *security)
+{
+ GValue *value;
+ guint32 flags = NM_802_11_AP_SEC_NONE;
+ const char **items, **iter;
+
+ value = g_hash_table_lookup (security, "KeyMgmt");
+ if (value) {
+ items = g_value_get_boxed (value);
+ for (iter = items; iter && *iter; iter++) {
+ if (strcmp (*iter, "wpa-psk") == 0)
+ flags |= NM_802_11_AP_SEC_KEY_MGMT_PSK;
+ else if (strcmp (*iter, "wpa-eap") == 0)
+ flags |= NM_802_11_AP_SEC_KEY_MGMT_802_1X;
+ }
+ }
+
+ value = g_hash_table_lookup (security, "Pairwise");
+ if (value) {
+ items = g_value_get_boxed (value);
+ for (iter = items; iter && *iter; iter++)
+ flags |= pair_to_flags (*iter);
+ }
+
+ value = g_hash_table_lookup (security, "Group");
+ if (value)
+ flags |= group_to_flags (g_value_get_string (value));
+
+ return flags;
+}
static void
foreach_property_cb (gpointer key, gpointer value, gpointer user_data)
@@ -381,9 +443,9 @@ foreach_property_cb (gpointer key, gpointer value, gpointer user_data)
if (G_VALUE_HOLDS_BOXED (variant)) {
GArray *array = g_value_get_boxed (variant);
- if (!strcmp (key, "ssid")) {
+ if (!strcmp (key, "SSID")) {
guint32 len = MIN (IW_ESSID_MAX_SIZE, array->len);
- GByteArray * ssid;
+ GByteArray *ssid;
/* Stupid ieee80211 layer uses <hidden> */
if (((len == 8) || (len == 9))
@@ -397,7 +459,7 @@ foreach_property_cb (gpointer key, gpointer value, gpointer user_data)
g_byte_array_append (ssid, (const guint8 *) array->data, len);
nm_ap_set_ssid (ap, ssid);
g_byte_array_free (ssid, TRUE);
- } else if (!strcmp (key, "bssid")) {
+ } else if (!strcmp (key, "BSSID")) {
struct ether_addr addr;
if (array->len != ETH_ALEN)
@@ -405,43 +467,62 @@ foreach_property_cb (gpointer key, gpointer value, gpointer user_data)
memset (&addr, 0, sizeof (struct ether_addr));
memcpy (&addr, array->data, ETH_ALEN);
nm_ap_set_address (ap, &addr);
- } else if (!strcmp (key, "wpaie")) {
- guint8 * ie = (guint8 *) array->data;
+ } else if (!strcmp (key, "Rates")) {
+ guint32 maxrate = 0;
+ int i;
+
+ /* Find the max AP rate */
+ for (i = 0; i < array->len; i++) {
+ guint32 r = g_array_index (array, guint32, i);
+
+ if (r > maxrate) {
+ maxrate = r;
+ nm_ap_set_max_bitrate (ap, r / 1000);
+ }
+ }
+ } else if (!strcmp (key, "WPA")) {
guint32 flags = nm_ap_get_wpa_flags (ap);
- if (array->len <= 0 || array->len > WPA_MAX_IE_LEN)
- return;
- flags = nm_ap_add_security_from_ie (flags, ie, array->len);
+ flags |= security_from_dict (g_value_get_boxed (variant));
nm_ap_set_wpa_flags (ap, flags);
- } else if (!strcmp (key, "rsnie")) {
- guint8 * ie = (guint8 *) array->data;
+ } else if (!strcmp (key, "RSN")) {
guint32 flags = nm_ap_get_rsn_flags (ap);
- if (array->len <= 0 || array->len > WPA_MAX_IE_LEN)
- return;
- flags = nm_ap_add_security_from_ie (flags, ie, array->len);
+ flags |= security_from_dict (g_value_get_boxed (variant));
nm_ap_set_rsn_flags (ap, flags);
}
+ } else if (G_VALUE_HOLDS_UINT (variant)) {
+ guint32 val = g_value_get_uint (variant);
+
+ if (!strcmp (key, "Frequency"))
+ nm_ap_set_freq (ap, val);
} else if (G_VALUE_HOLDS_INT (variant)) {
- gint32 int_val = g_value_get_int (variant);
+ gint val = g_value_get_int (variant);
+
+ if (!strcmp (key, "Signal")) {
+ if (val < 0) {
+ /* Rough conversion: best = -40, worst = -100 */
+ val = abs (CLAMP (val, -100, -40) + 40);
+ val = 100 - (int) ((100.0 * (double) val) / 60.0);
+ } else
+ val /= 100;
- if (!strcmp (key, "frequency")) {
- nm_ap_set_freq (ap, (guint32) int_val);
- } else if (!strcmp (key, "maxrate")) {
- /* Supplicant reports as b/s, we use Kb/s internally */
- nm_ap_set_max_bitrate (ap, int_val / 1000);
+ nm_ap_set_strength (ap, val);
}
- } else if (G_VALUE_HOLDS_UINT (variant)) {
- guint32 val = g_value_get_uint (variant);
+ } else if (G_VALUE_HOLDS_STRING (variant)) {
+ const char *val = g_value_get_string (variant);
- if (!strcmp (key, "capabilities")) {
- if (val & IEEE80211_CAP_ESS) {
+ if (val && !strcmp (key, "Mode")) {
+ if (strcmp (val, "infrastructure") == 0)
nm_ap_set_mode (ap, NM_802_11_MODE_INFRA);
- } else if (val & IEEE80211_CAP_IBSS) {
+ else if (strcmp (val, "ad-hoc") == 0)
nm_ap_set_mode (ap, NM_802_11_MODE_ADHOC);
- }
+ }
+ } else if (G_VALUE_HOLDS_BOOLEAN (variant)) {
+ gboolean val = g_value_get_boolean (variant);
- if (val & IEEE80211_CAP_PRIVACY) {
+ if (strcmp (key, "Privacy") == 0) {
+ if (val) {
guint32 flags = nm_ap_get_flags (ap);
nm_ap_set_flags (ap, flags | NM_802_11_AP_FLAGS_PRIVACY);
}
@@ -449,7 +530,6 @@ foreach_property_cb (gpointer key, gpointer value, gpointer user_data)
}
}
-
NMAccessPoint *
nm_ap_new_from_properties (GHashTable *properties)
{
@@ -604,7 +684,7 @@ nm_ap_new_fake_from_connection (NMConnection *connection)
channel = nm_setting_wireless_get_channel (s_wireless);
if (band && channel) {
- guint32 freq = channel_to_freq (channel, band);
+ guint32 freq = nm_utils_wifi_channel_to_freq (channel, band);
if (freq == 0)
goto error;
@@ -1168,45 +1248,6 @@ void nm_ap_set_user_addresses (NMAccessPoint *ap, GSList *list)
}
-guint32
-nm_ap_add_security_from_ie (guint32 flags,
- const guint8 *wpa_ie,
- guint32 length)
-{
- wpa_ie_data * cap_data;
-
- if (!(cap_data = wpa_parse_wpa_ie (wpa_ie, length)))
- return NM_802_11_AP_SEC_NONE;
-
- /* Pairwise cipher flags */
- if (cap_data->pairwise_cipher & IW_AUTH_CIPHER_WEP40)
- flags |= NM_802_11_AP_SEC_PAIR_WEP40;
- if (cap_data->pairwise_cipher & IW_AUTH_CIPHER_WEP104)
- flags |= NM_802_11_AP_SEC_PAIR_WEP104;
- if (cap_data->pairwise_cipher & IW_AUTH_CIPHER_TKIP)
- flags |= NM_802_11_AP_SEC_PAIR_TKIP;
- if (cap_data->pairwise_cipher & IW_AUTH_CIPHER_CCMP)
- flags |= NM_802_11_AP_SEC_PAIR_CCMP;
-
- /* Group cipher flags */
- if (cap_data->group_cipher & IW_AUTH_CIPHER_WEP40)
- flags |= NM_802_11_AP_SEC_GROUP_WEP40;
- if (cap_data->group_cipher & IW_AUTH_CIPHER_WEP104)
- flags |= NM_802_11_AP_SEC_GROUP_WEP104;
- if (cap_data->group_cipher & IW_AUTH_CIPHER_TKIP)
- flags |= NM_802_11_AP_SEC_GROUP_TKIP;
- if (cap_data->group_cipher & IW_AUTH_CIPHER_CCMP)
- flags |= NM_802_11_AP_SEC_GROUP_CCMP;
-
- if (cap_data->key_mgmt & IW_AUTH_KEY_MGMT_802_1X)
- flags |= NM_802_11_AP_SEC_KEY_MGMT_802_1X;
- if (cap_data->key_mgmt & IW_AUTH_KEY_MGMT_PSK)
- flags |= NM_802_11_AP_SEC_KEY_MGMT_PSK;
-
- g_slice_free (wpa_ie_data, cap_data);
- return flags;
-}
-
gboolean
nm_ap_check_compatible (NMAccessPoint *self,
NMConnection *connection)
@@ -1256,21 +1297,21 @@ nm_ap_check_compatible (NMAccessPoint *self,
channel = nm_setting_wireless_get_channel (s_wireless);
if (channel) {
- guint32 ap_chan = freq_to_channel (priv->freq);
+ guint32 ap_chan = nm_utils_wifi_freq_to_channel (priv->freq);
if (channel != ap_chan)
return FALSE;
}
s_wireless_sec = (NMSettingWirelessSecurity *) nm_connection_get_setting (connection,
- NM_TYPE_SETTING_WIRELESS_SECURITY);
+ NM_TYPE_SETTING_WIRELESS_SECURITY);
return nm_setting_wireless_ap_security_compatible (s_wireless,
- s_wireless_sec,
- nm_ap_get_flags (self),
- nm_ap_get_wpa_flags (self),
- nm_ap_get_rsn_flags (self),
- nm_ap_get_mode (self));
+ s_wireless_sec,
+ nm_ap_get_flags (self),
+ nm_ap_get_wpa_flags (self),
+ nm_ap_get_rsn_flags (self),
+ nm_ap_get_mode (self));
}
static gboolean
@@ -1364,114 +1405,3 @@ nm_ap_match_in_list (NMAccessPoint *find_ap,
return NULL;
}
-
-struct cf_pair {
- guint32 chan;
- guint32 freq;
-};
-
-static struct cf_pair a_table[] = {
- /* A band */
- { 7, 5035 },
- { 8, 5040 },
- { 9, 5045 },
- { 11, 5055 },
- { 12, 5060 },
- { 16, 5080 },
- { 34, 5170 },
- { 36, 5180 },
- { 38, 5190 },
- { 40, 5200 },
- { 42, 5210 },
- { 44, 5220 },
- { 46, 5230 },
- { 48, 5240 },
- { 50, 5250 },
- { 52, 5260 },
- { 56, 5280 },
- { 58, 5290 },
- { 60, 5300 },
- { 64, 5320 },
- { 100, 5500 },
- { 104, 5520 },
- { 108, 5540 },
- { 112, 5560 },
- { 116, 5580 },
- { 120, 5600 },
- { 124, 5620 },
- { 128, 5640 },
- { 132, 5660 },
- { 136, 5680 },
- { 140, 5700 },
- { 149, 5745 },
- { 152, 5760 },
- { 153, 5765 },
- { 157, 5785 },
- { 160, 5800 },
- { 161, 5805 },
- { 165, 5825 },
- { 183, 4915 },
- { 184, 4920 },
- { 185, 4925 },
- { 187, 4935 },
- { 188, 4945 },
- { 192, 4960 },
- { 196, 4980 },
- { 0, -1 }
-};
-
-static struct cf_pair bg_table[] = {
- /* B/G band */
- { 1, 2412 },
- { 2, 2417 },
- { 3, 2422 },
- { 4, 2427 },
- { 5, 2432 },
- { 6, 2437 },
- { 7, 2442 },
- { 8, 2447 },
- { 9, 2452 },
- { 10, 2457 },
- { 11, 2462 },
- { 12, 2467 },
- { 13, 2472 },
- { 14, 2484 },
- { 0, -1 }
-};
-
-guint32
-freq_to_channel (guint32 freq)
-{
- int i = 0;
-
- if (freq > 4900) {
- while (a_table[i].chan && (a_table[i].freq != freq))
- i++;
- return a_table[i].chan;
- } else {
- while (bg_table[i].chan && (bg_table[i].freq != freq))
- i++;
- return bg_table[i].chan;
- }
-
- return 0;
-}
-
-guint32
-channel_to_freq (guint32 channel, const char *band)
-{
- int i = 0;
-
- if (!strcmp (band, "a")) {
- while (a_table[i].chan && (a_table[i].chan != channel))
- i++;
- return a_table[i].freq;
- } else if (!strcmp (band, "bg")) {
- while (bg_table[i].chan && (bg_table[i].chan != channel))
- i++;
- return bg_table[i].freq;
- }
-
- return 0;
-}
-
diff --git a/src/nm-wifi-ap.h b/src/nm-wifi-ap.h
index edc9e56bfb..09c87d970a 100644
--- a/src/nm-wifi-ap.h
+++ b/src/nm-wifi-ap.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) 2004 - 2008 Red Hat, Inc.
+ * Copyright (C) 2004 - 2010 Red Hat, Inc.
* Copyright (C) 2006 - 2008 Novell, Inc.
*/
@@ -110,10 +110,6 @@ void nm_ap_set_user_created (NMAccessPoint *ap, gboolean user_created);
GSList * nm_ap_get_user_addresses (const NMAccessPoint *ap);
void nm_ap_set_user_addresses (NMAccessPoint *ap, GSList *list);
-guint32 nm_ap_add_security_from_ie (guint32 flags,
- const guint8 *wpa_ie,
- guint32 length);
-
gboolean nm_ap_check_compatible (NMAccessPoint *self,
NMConnection *connection);
@@ -123,7 +119,4 @@ NMAccessPoint * nm_ap_match_in_list (NMAccessPoint *find_ap,
void nm_ap_print_self (NMAccessPoint *ap, const char * prefix);
-guint32 freq_to_channel (guint32 freq);
-guint32 channel_to_freq (guint32 channel, const char *band);
-
#endif /* NM_ACCESS_POINT_H */
diff --git a/src/ppp-manager/Makefile.am b/src/ppp-manager/Makefile.am
index 2dc7ad94c6..f213dd2ecf 100644
--- a/src/ppp-manager/Makefile.am
+++ b/src/ppp-manager/Makefile.am
@@ -14,7 +14,7 @@ libppp_manager_la_SOURCES = \
nm-ppp-status.h
nm-ppp-manager-glue.h: $(top_srcdir)/introspection/nm-ppp-manager.xml
- dbus-binding-tool --prefix=nm_ppp_manager --mode=glib-server --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_ppp_manager --mode=glib-server --output=$@ $<
built_sources = nm-ppp-manager-glue.h
diff --git a/src/ppp-manager/nm-ppp-manager.c b/src/ppp-manager/nm-ppp-manager.c
index de905b49db..efa660b03f 100644
--- a/src/ppp-manager/nm-ppp-manager.c
+++ b/src/ppp-manager/nm-ppp-manager.c
@@ -16,9 +16,10 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Copyright (C) 2008 Novell, Inc.
- * Copyright (C) 2008 Red Hat, Inc.
+ * Copyright (C) 2008 - 2010 Red Hat, Inc.
*/
+#include <config.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
@@ -883,7 +884,8 @@ nm_ppp_manager_start (NMPPPManager *manager,
{
NMPPPManagerPrivate *priv;
NMConnection *connection;
- NMSettingPPP *ppp_setting;
+ NMSettingPPP *s_ppp;
+ gboolean s_ppp_created = FALSE;
NMSettingPPPOE *pppoe_setting;
NMCmdLine *ppp_cmd;
char *cmd_str;
@@ -893,26 +895,36 @@ nm_ppp_manager_start (NMPPPManager *manager,
g_return_val_if_fail (NM_IS_PPP_MANAGER (manager), FALSE);
g_return_val_if_fail (NM_IS_ACT_REQUEST (req), FALSE);
+ priv = NM_PPP_MANAGER_GET_PRIVATE (manager);
+
+ priv->pid = 0;
+
/* Make sure /dev/ppp exists (bgo #533064) */
if (stat ("/dev/ppp", &st) || !S_ISCHR (st.st_mode))
ignored = system ("/sbin/modprobe ppp_generic");
connection = nm_act_request_get_connection (req);
- ppp_setting = NM_SETTING_PPP (nm_connection_get_setting (connection, NM_TYPE_SETTING_PPP));
- g_return_val_if_fail (ppp_setting != NULL, FALSE);
+ g_assert (connection);
+
+ s_ppp = (NMSettingPPP *) nm_connection_get_setting (connection, NM_TYPE_SETTING_PPP);
+ if (!s_ppp) {
+ /* If the PPP settings are all default we may not have a PPP setting yet,
+ * so just make a default one here.
+ */
+ s_ppp = NM_SETTING_PPP (nm_setting_ppp_new ());
+ s_ppp_created = TRUE;
+ }
pppoe_setting = (NMSettingPPPOE *) nm_connection_get_setting (connection, NM_TYPE_SETTING_PPPOE);
if (pppoe_setting)
- pppoe_fill_defaults (ppp_setting);
+ pppoe_fill_defaults (s_ppp);
- ppp_cmd = create_pppd_cmd_line (manager, ppp_setting, pppoe_setting, ppp_name, err);
+ ppp_cmd = create_pppd_cmd_line (manager, s_ppp, pppoe_setting, ppp_name, err);
if (!ppp_cmd)
- return FALSE;
+ goto out;
g_ptr_array_add (ppp_cmd->array, NULL);
- priv = NM_PPP_MANAGER_GET_PRIVATE (manager);
-
nm_log_info (LOGD_PPP, "starting PPP connection");
cmd_str = nm_cmd_line_to_str (ppp_cmd);
@@ -934,6 +946,9 @@ nm_ppp_manager_start (NMPPPManager *manager,
priv->act_req = g_object_ref (req);
out:
+ if (s_ppp_created)
+ g_object_unref (s_ppp);
+
if (ppp_cmd)
nm_cmd_line_destroy (ppp_cmd);
diff --git a/src/supplicant-manager/Makefile.am b/src/supplicant-manager/Makefile.am
index e59ae84319..359fc70ae5 100644
--- a/src/supplicant-manager/Makefile.am
+++ b/src/supplicant-manager/Makefile.am
@@ -5,8 +5,7 @@ INCLUDES = \
-I${top_srcdir}/src/logging \
-I${top_srcdir}/include \
-I${top_srcdir}/libnm-util \
- -I${top_builddir}/marshallers \
- -I${top_srcdir}/src/named-manager
+ -I${top_builddir}/marshallers
noinst_LTLIBRARIES = libsupplicant-manager.la
diff --git a/src/supplicant-manager/nm-supplicant-config.c b/src/supplicant-manager/nm-supplicant-config.c
index b516de520b..e33f67abf5 100644
--- a/src/supplicant-manager/nm-supplicant-config.c
+++ b/src/supplicant-manager/nm-supplicant-config.c
@@ -711,6 +711,8 @@ nm_supplicant_config_add_setting_8021x (NMSupplicantConfig *self,
gboolean success, added;
GString *phase1, *phase2;
const GByteArray *array;
+ gboolean peap = FALSE;
+ guint32 i, num_eap;
g_return_val_if_fail (NM_IS_SUPPLICANT_CONFIG (self), FALSE);
g_return_val_if_fail (setting != NULL, FALSE);
@@ -733,6 +735,28 @@ nm_supplicant_config_add_setting_8021x (NMSupplicantConfig *self,
ADD_STRING_LIST_VAL (setting, 802_1x, eap_method, eap_methods, "eap", TRUE, FALSE);
+ /* Check for PEAP + GTC */
+ num_eap = nm_setting_802_1x_get_num_eap_methods (setting);
+ for (i = 0; i < num_eap; i++) {
+ const char *method = nm_setting_802_1x_get_eap_method (setting, i);
+
+ if (method && (strcasecmp (method, "peap") == 0)) {
+ peap = TRUE;
+ break;
+ }
+ }
+
+ /* When using PEAP-GTC, we're likely using Cisco kit, so we want to turn
+ * on PMKSA caching so that roaming between access points actually works
+ * without a full reauth (which requires a new token code). We may want
+ * to extend this to all PEAP phase2 methods at some point.
+ */
+ value = nm_setting_802_1x_get_phase2_auth (setting);
+ if (peap && value && (strcasecmp (value, "gtc") == 0)) {
+ if (!nm_supplicant_config_add_option (self, "proactive_key_caching", "1", -1, FALSE))
+ return FALSE;
+ }
+
/* Drop the fragment size a bit for better compatibility */
if (!nm_supplicant_config_add_option (self, "fragment_size", "1300", -1, FALSE))
return FALSE;
diff --git a/src/supplicant-manager/nm-supplicant-interface.c b/src/supplicant-manager/nm-supplicant-interface.c
index a65a458f5b..93807b9360 100644
--- a/src/supplicant-manager/nm-supplicant-interface.c
+++ b/src/supplicant-manager/nm-supplicant-interface.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) 2006 - 2008 Red Hat, Inc.
+ * Copyright (C) 2006 - 2010 Red Hat, Inc.
* Copyright (C) 2006 - 2008 Novell, Inc.
*/
@@ -34,73 +34,48 @@
#include "nm-glib-compat.h"
#define WPAS_DBUS_IFACE_INTERFACE WPAS_DBUS_INTERFACE ".Interface"
-#define WPAS_DBUS_IFACE_BSSID WPAS_DBUS_INTERFACE ".BSSID"
+#define WPAS_DBUS_IFACE_BSS WPAS_DBUS_INTERFACE ".BSS"
#define WPAS_DBUS_IFACE_NETWORK WPAS_DBUS_INTERFACE ".Network"
#define WPAS_ERROR_INVALID_IFACE WPAS_DBUS_INTERFACE ".InvalidInterface"
-#define WPAS_ERROR_EXISTS_ERROR WPAS_DBUS_INTERFACE ".ExistsError"
-
+#define WPAS_ERROR_EXISTS_ERROR WPAS_DBUS_INTERFACE ".InterfaceExists"
G_DEFINE_TYPE (NMSupplicantInterface, nm_supplicant_interface, G_TYPE_OBJECT)
+static void wpas_iface_properties_changed (DBusGProxy *proxy,
+ GHashTable *props,
+ gpointer user_data);
+
+static void wpas_iface_scan_done (DBusGProxy *proxy,
+ gboolean success,
+ gpointer user_data);
#define NM_SUPPLICANT_INTERFACE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
NM_TYPE_SUPPLICANT_INTERFACE, \
NMSupplicantInterfacePrivate))
-static void nm_supplicant_interface_set_property (GObject * object,
- guint prop_id,
- const GValue * value,
- GParamSpec * pspec);
-
-static void nm_supplicant_interface_get_property (GObject * object,
- guint prop_id,
- GValue * value,
- GParamSpec * pspec);
-
-static void nm_supplicant_interface_start (NMSupplicantInterface *self);
-
-static void nm_supplicant_interface_add_to_supplicant (NMSupplicantInterface *self,
- gboolean get_only);
-
-static void nm_supplicant_interface_smgr_state_changed (NMSupplicantManager *smgr,
- guint32 new_state,
- guint32 old_state,
- gpointer user_data);
-
-static void nm_supplicant_interface_set_state (NMSupplicantInterface *self,
- guint32 new_state);
-
-
/* Signals */
enum {
STATE, /* change in the interface's state */
REMOVED, /* interface was removed by the supplicant */
- SCANNED_AP, /* interface saw a new access point from a scan */
- SCAN_REQ_RESULT, /* result of a wireless scan request */
- SCAN_RESULTS, /* scan results returned from supplicant */
- CONNECTION_STATE, /* link state of the device's connection */
+ NEW_BSS, /* interface saw a new access point from a scan */
+ SCAN_DONE, /* wifi scan is complete */
CONNECTION_ERROR, /* an error occurred during a connection request */
LAST_SIGNAL
};
-static guint nm_supplicant_interface_signals[LAST_SIGNAL] = { 0 };
+static guint signals[LAST_SIGNAL] = { 0 };
/* Properties */
enum {
PROP_0 = 0,
- PROP_SUPPLICANT_MANAGER,
- PROP_DEVICE,
- PROP_STATE,
- PROP_CONNECTION_STATE,
PROP_SCANNING,
LAST_PROP
};
-typedef struct
-{
+typedef struct {
NMSupplicantManager * smgr;
- gulong smgr_state_sig_handler;
+ gulong smgr_avail_id;
NMDBusManager * dbus_mgr;
char * dev;
gboolean is_wireless;
@@ -110,18 +85,19 @@ typedef struct
NMCallStore * assoc_pcalls;
NMCallStore * other_pcalls;
- guint32 con_state;
gboolean scanning;
+ DBusGProxy * wpas_proxy;
DBusGProxy * iface_proxy;
- DBusGProxy * net_proxy;
+ DBusGProxy * props_proxy;
+ char * net_path;
+ guint32 blobs_left;
- guint scan_results_timeout;
guint32 last_scan;
NMSupplicantConfig * cfg;
- gboolean dispose_has_run;
+ gboolean disposed;
} NMSupplicantInterfacePrivate;
static gboolean
@@ -203,827 +179,485 @@ nm_supplicant_info_destroy (gpointer user_data)
}
}
-
-NMSupplicantInterface *
-nm_supplicant_interface_new (NMSupplicantManager * smgr, const char *ifname, gboolean is_wireless)
-{
- NMSupplicantInterface * iface;
-
- g_return_val_if_fail (NM_IS_SUPPLICANT_MANAGER (smgr), NULL);
- g_return_val_if_fail (ifname != NULL, NULL);
-
- iface = g_object_new (NM_TYPE_SUPPLICANT_INTERFACE,
- "supplicant-manager", smgr,
- "device", ifname,
- NULL);
- if (iface) {
- NM_SUPPLICANT_INTERFACE_GET_PRIVATE (iface)->is_wireless = is_wireless;
- nm_supplicant_interface_start (iface);
- }
-
- return iface;
-}
-
static void
-nm_supplicant_interface_init (NMSupplicantInterface * self)
+emit_error_helper (NMSupplicantInterface *self,
+ GError *err)
{
- NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
-
- priv->state = NM_SUPPLICANT_INTERFACE_STATE_INIT;
- priv->con_state = NM_SUPPLICANT_INTERFACE_CON_STATE_DISCONNECTED;
- priv->assoc_pcalls = nm_call_store_new ();
- priv->other_pcalls = nm_call_store_new ();
+ const char *name = NULL;
- priv->dispose_has_run = FALSE;
+ if (err->domain == DBUS_GERROR && err->code == DBUS_GERROR_REMOTE_EXCEPTION)
+ name = dbus_g_error_get_name (err);
- priv->dbus_mgr = nm_dbus_manager_get ();
+ g_signal_emit (self, signals[CONNECTION_ERROR], 0, name, err->message);
}
-
static void
-nm_supplicant_interface_set_property (GObject * object,
- guint prop_id,
- const GValue * value,
- GParamSpec * pspec)
+bssid_properties_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
{
- NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (object);
- gulong id;
-
- switch (prop_id) {
- case PROP_SUPPLICANT_MANAGER:
- priv->smgr = NM_SUPPLICANT_MANAGER (g_value_get_object (value));
- g_object_ref (G_OBJECT (priv->smgr));
-
- id = g_signal_connect (priv->smgr,
- "state",
- G_CALLBACK (nm_supplicant_interface_smgr_state_changed),
- object);
- priv->smgr_state_sig_handler = id;
- break;
- case PROP_DEVICE:
- /* Construct-only */
- priv->dev = g_strdup (g_value_get_string (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
+ NMSupplicantInfo *info = (NMSupplicantInfo *) user_data;
+ GError *error = NULL;
+ GHashTable *props = NULL;
+
+ if (dbus_g_proxy_end_call (proxy, call_id, &error,
+ DBUS_TYPE_G_MAP_OF_VARIANT, &props,
+ G_TYPE_INVALID)) {
+ g_signal_emit (info->interface, signals[NEW_BSS], 0, props);
+ g_hash_table_destroy (props);
+ } else {
+ if (!strstr (error->message, "The BSSID requested was invalid")) {
+ nm_log_warn (LOGD_SUPPLICANT, "Couldn't retrieve BSSID properties: %s.",
+ error->message);
+ }
+ g_error_free (error);
}
}
static void
-nm_supplicant_interface_get_property (GObject * object,
- guint prop_id,
- GValue * value,
- GParamSpec * pspec)
+request_bss_properties (NMSupplicantInterface *self,
+ GPtrArray *paths)
{
- NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (object);
+ NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
+ int i;
- switch (prop_id) {
- case PROP_SUPPLICANT_MANAGER:
- g_value_set_object (value, G_OBJECT (priv->smgr));
- break;
- case PROP_DEVICE:
- g_value_set_string (value, priv->dev);
- break;
- case PROP_STATE:
- g_value_set_uint (value, priv->state);
- break;
- case PROP_CONNECTION_STATE:
- g_value_set_uint (value, priv->con_state);
- break;
- case PROP_SCANNING:
- g_value_set_boolean (value, priv->scanning);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
+ /* Fire off a "properties" call for each returned BSSID */
+ for (i = 0; i < paths->len; i++) {
+ NMSupplicantInfo *info;
+ DBusGProxy *proxy;
+ DBusGProxyCall *call;
+
+ proxy = dbus_g_proxy_new_for_name (nm_dbus_manager_get_connection (priv->dbus_mgr),
+ WPAS_DBUS_SERVICE,
+ g_ptr_array_index (paths, i),
+ DBUS_INTERFACE_PROPERTIES);
+ info = nm_supplicant_info_new (self, proxy, priv->other_pcalls);
+ call = dbus_g_proxy_begin_call (proxy, "GetAll",
+ bssid_properties_cb,
+ info,
+ nm_supplicant_info_destroy,
+ G_TYPE_STRING, WPAS_DBUS_IFACE_BSS,
+ G_TYPE_INVALID);
+ nm_supplicant_info_set_call (info, call);
+ g_object_unref (proxy);
}
}
static void
-try_remove_iface (DBusGConnection *g_connection,
- const char *path)
+wpas_iface_bss_added (DBusGProxy *proxy,
+ const char *object_path,
+ GHashTable *props,
+ gpointer user_data)
{
- DBusGProxy *proxy;
-
- g_return_if_fail (g_connection != NULL);
- g_return_if_fail (path != NULL);
-
- proxy = dbus_g_proxy_new_for_name (g_connection,
- WPAS_DBUS_SERVICE,
- WPAS_DBUS_PATH,
- WPAS_DBUS_INTERFACE);
- if (!proxy)
- return;
-
- dbus_g_proxy_call_no_reply (proxy, "removeInterface",
- DBUS_TYPE_G_OBJECT_PATH, path,
- G_TYPE_INVALID);
- g_object_unref (proxy);
+ g_signal_emit (NM_SUPPLICANT_INTERFACE (user_data), signals[NEW_BSS], 0, props);
}
-static void
-nm_supplicant_interface_dispose (GObject *object)
+static int
+wpas_state_string_to_enum (const char *str_state)
{
- NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (object);
- guint32 sm_state;
-
- if (priv->dispose_has_run) {
- G_OBJECT_CLASS (nm_supplicant_interface_parent_class)->dispose (object);
- return;
- }
-
- priv->dispose_has_run = TRUE;
-
- /* Ask wpa_supplicant to remove this interface */
- sm_state = nm_supplicant_manager_get_state (priv->smgr);
- if (sm_state == NM_SUPPLICANT_MANAGER_STATE_IDLE) {
- if (priv->object_path) {
- try_remove_iface (nm_dbus_manager_get_connection (priv->dbus_mgr),
- priv->object_path);
- }
- }
-
- if (priv->iface_proxy)
- g_object_unref (priv->iface_proxy);
-
- if (priv->net_proxy)
- g_object_unref (priv->net_proxy);
-
- if (priv->scan_results_timeout)
- g_source_remove (priv->scan_results_timeout);
-
- if (priv->smgr) {
- g_signal_handler_disconnect (priv->smgr,
- priv->smgr_state_sig_handler);
- g_object_unref (priv->smgr);
- }
-
- g_free (priv->dev);
-
- /* Cancel pending calls before unrefing the dbus manager */
- cancel_all_callbacks (priv->other_pcalls);
- nm_call_store_destroy (priv->other_pcalls);
-
- cancel_all_callbacks (priv->assoc_pcalls);
- nm_call_store_destroy (priv->assoc_pcalls);
-
- if (priv->dbus_mgr)
- g_object_unref (priv->dbus_mgr);
-
- if (priv->cfg)
- g_object_unref (priv->cfg);
-
- g_free (priv->object_path);
-
- /* Chain up to the parent class */
- G_OBJECT_CLASS (nm_supplicant_interface_parent_class)->dispose (object);
+ if (!strcmp (str_state, "disconnected"))
+ return NM_SUPPLICANT_INTERFACE_STATE_DISCONNECTED;
+ else if (!strcmp (str_state, "inactive"))
+ return NM_SUPPLICANT_INTERFACE_STATE_INACTIVE;
+ else if (!strcmp (str_state, "scanning"))
+ return NM_SUPPLICANT_INTERFACE_STATE_SCANNING;
+ else if (!strcmp (str_state, "associating"))
+ return NM_SUPPLICANT_INTERFACE_STATE_ASSOCIATING;
+ else if (!strcmp (str_state, "associated"))
+ return NM_SUPPLICANT_INTERFACE_STATE_ASSOCIATED;
+ else if (!strcmp (str_state, "4way_handshake"))
+ return NM_SUPPLICANT_INTERFACE_STATE_4WAY_HANDSHAKE;
+ else if (!strcmp (str_state, "group_handshake"))
+ return NM_SUPPLICANT_INTERFACE_STATE_GROUP_HANDSHAKE;
+ else if (!strcmp (str_state, "completed"))
+ return NM_SUPPLICANT_INTERFACE_STATE_COMPLETED;
+
+ return -1;
}
static void
-nm_supplicant_interface_class_init (NMSupplicantInterfaceClass *klass)
+set_state (NMSupplicantInterface *self, guint32 new_state)
{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- g_type_class_add_private (object_class, sizeof (NMSupplicantInterfacePrivate));
+ NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
+ guint32 old_state = priv->state;
- object_class->dispose = nm_supplicant_interface_dispose;
- object_class->set_property = nm_supplicant_interface_set_property;
- object_class->get_property = nm_supplicant_interface_get_property;
+ g_return_if_fail (new_state < NM_SUPPLICANT_INTERFACE_STATE_LAST);
- /* Properties */
- g_object_class_install_property (object_class,
- PROP_SUPPLICANT_MANAGER,
- g_param_spec_object ("supplicant-manager",
- "Supplicant Manager",
- "Supplicant manager to which this interface belongs",
- NM_TYPE_SUPPLICANT_MANAGER,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-
- g_object_class_install_property (object_class,
- PROP_DEVICE,
- g_param_spec_string ("device",
- "Device",
- "Device which this interface represents to the supplicant",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-
- g_object_class_install_property (object_class,
- PROP_STATE,
- g_param_spec_uint ("state",
- "State",
- "State of the supplicant interface; INIT, READY, or DOWN",
- NM_SUPPLICANT_INTERFACE_STATE_INIT,
- NM_SUPPLICANT_INTERFACE_STATE_LAST - 1,
- NM_SUPPLICANT_INTERFACE_STATE_INIT,
- G_PARAM_READABLE));
-
- g_object_class_install_property (object_class,
- PROP_SCANNING,
- g_param_spec_boolean ("scanning",
- "Scanning",
- "Scanning",
- FALSE,
- G_PARAM_READABLE));
+ if (new_state == priv->state)
+ return;
- /* Signals */
- nm_supplicant_interface_signals[STATE] =
- g_signal_new ("state",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (NMSupplicantInterfaceClass, state),
- NULL, NULL,
- _nm_marshal_VOID__UINT_UINT,
- G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT);
+ /* DOWN is a terminal state */
+ g_return_if_fail (priv->state != NM_SUPPLICANT_INTERFACE_STATE_DOWN);
- nm_supplicant_interface_signals[REMOVED] =
- g_signal_new ("removed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (NMSupplicantInterfaceClass, removed),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
+ /* Cannot regress to READY, STARTING, or INIT from higher states */
+ if (priv->state >= NM_SUPPLICANT_INTERFACE_STATE_READY)
+ g_return_if_fail (new_state > NM_SUPPLICANT_INTERFACE_STATE_READY);
- nm_supplicant_interface_signals[SCANNED_AP] =
- g_signal_new ("scanned-ap",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (NMSupplicantInterfaceClass, scanned_ap),
- NULL, NULL,
- g_cclosure_marshal_VOID__POINTER,
- G_TYPE_NONE, 1, G_TYPE_POINTER);
-
- nm_supplicant_interface_signals[SCAN_REQ_RESULT] =
- g_signal_new ("scan-req-result",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (NMSupplicantInterfaceClass, scan_req_result),
- NULL, NULL,
- g_cclosure_marshal_VOID__BOOLEAN,
- G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+ if (new_state == NM_SUPPLICANT_INTERFACE_STATE_DOWN) {
+ /* Cancel all pending calls when going down */
+ cancel_all_callbacks (priv->other_pcalls);
+ cancel_all_callbacks (priv->assoc_pcalls);
- nm_supplicant_interface_signals[SCAN_RESULTS] =
- g_signal_new ("scan-results",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (NMSupplicantInterfaceClass, scan_results),
- NULL, NULL,
- g_cclosure_marshal_VOID__UINT,
- G_TYPE_NONE, 1, G_TYPE_UINT);
+ /* Disconnect supplicant manager state listeners since we're done */
+ if (priv->smgr_avail_id) {
+ g_signal_handler_disconnect (priv->smgr, priv->smgr_avail_id);
+ priv->smgr_avail_id = 0;
+ }
- nm_supplicant_interface_signals[CONNECTION_STATE] =
- g_signal_new ("connection-state",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (NMSupplicantInterfaceClass, connection_state),
- NULL, NULL,
- _nm_marshal_VOID__UINT_UINT,
- G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT);
+ if (priv->iface_proxy) {
+ dbus_g_proxy_disconnect_signal (priv->iface_proxy,
+ "PropertiesChanged",
+ G_CALLBACK (wpas_iface_properties_changed),
+ self);
+ dbus_g_proxy_disconnect_signal (priv->iface_proxy,
+ "ScanDone",
+ G_CALLBACK (wpas_iface_scan_done),
+ self);
+ dbus_g_proxy_disconnect_signal (priv->iface_proxy,
+ "BSSAdded",
+ G_CALLBACK (wpas_iface_bss_added),
+ self);
+ }
+ }
- nm_supplicant_interface_signals[CONNECTION_ERROR] =
- g_signal_new ("connection-error",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (NMSupplicantInterfaceClass, connection_error),
- NULL, NULL,
- _nm_marshal_VOID__STRING_STRING,
- G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_STRING);
+ priv->state = new_state;
+ g_signal_emit (self, signals[STATE], 0, priv->state, old_state);
}
static void
-emit_error_helper (NMSupplicantInterface *self,
- GError *err)
+set_state_from_string (NMSupplicantInterface *self, const char *new_state)
{
- const char *name = NULL;
+ int state;
- if (err->domain == DBUS_GERROR && err->code == DBUS_GERROR_REMOTE_EXCEPTION)
- name = dbus_g_error_get_name (err);
-
- g_signal_emit (self,
- nm_supplicant_interface_signals[CONNECTION_ERROR],
- 0,
- name,
- err->message);
+ state = wpas_state_string_to_enum (new_state);
+ g_warn_if_fail (state > 0);
+ if (state > 0)
+ set_state (self, (guint32) state);
}
static void
-bssid_properties_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
+set_scanning (NMSupplicantInterface *self, gboolean new_scanning)
{
- NMSupplicantInfo *info = (NMSupplicantInfo *) user_data;
- GError *err = NULL;
- GHashTable *hash = NULL;
+ NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
+ GTimeVal cur_time;
- if (!dbus_g_proxy_end_call (proxy, call_id, &err,
- DBUS_TYPE_G_MAP_OF_VARIANT, &hash,
- G_TYPE_INVALID)) {
- if (!strstr (err->message, "The BSSID requested was invalid")) {
- nm_log_warn (LOGD_SUPPLICANT, "Couldn't retrieve BSSID properties: %s.",
- err->message);
+ if (priv->scanning != new_scanning) {
+ priv->scanning = new_scanning;
+
+ /* Cache time of last scan completion */
+ if (priv->scanning == FALSE) {
+ g_get_current_time (&cur_time);
+ priv->last_scan = cur_time.tv_sec;
}
- g_error_free (err);
- } else {
- g_signal_emit (info->interface,
- nm_supplicant_interface_signals[SCANNED_AP],
- 0,
- hash);
- g_hash_table_destroy (hash);
+ g_object_notify (G_OBJECT (self), "scanning");
}
}
-static void
-request_bssid_properties (NMSupplicantInterface * self,
- const char * op)
-{
- NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
- NMSupplicantInfo *info;
- DBusGProxy *proxy;
- DBusGProxyCall *call;
-
- proxy = dbus_g_proxy_new_for_name (nm_dbus_manager_get_connection (priv->dbus_mgr),
- WPAS_DBUS_SERVICE,
- op,
- WPAS_DBUS_IFACE_BSSID);
- info = nm_supplicant_info_new (self, proxy, priv->other_pcalls);
- call = dbus_g_proxy_begin_call (proxy, "properties",
- bssid_properties_cb,
- info,
- nm_supplicant_info_destroy,
- G_TYPE_INVALID);
- nm_supplicant_info_set_call (info, call);
- g_object_unref (proxy);
-}
-
-static void
-scan_results_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
+gboolean
+nm_supplicant_interface_get_scanning (NMSupplicantInterface *self)
{
- GError *err = NULL;
- GPtrArray *array = NULL;
-
- if (!dbus_g_proxy_end_call (proxy, call_id, &err,
- DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH, &array,
- G_TYPE_INVALID)) {
- nm_log_warn (LOGD_SUPPLICANT, "could not get scan results: %s.", err->message);
- g_error_free (err);
- } else {
- int i;
- NMSupplicantInfo *info = (NMSupplicantInfo *) user_data;
-
- /* Notify listeners of the result of the scan */
- g_signal_emit (info->interface,
- nm_supplicant_interface_signals[SCAN_RESULTS],
- 0,
- array->len);
-
- /* Fire off a "properties" call for each returned BSSID */
- for (i = 0; i < array->len; i++) {
- char *op = g_ptr_array_index (array, i);
+ NMSupplicantInterfacePrivate *priv;
- request_bssid_properties (info->interface, op);
- g_free (op);
- }
+ g_return_val_if_fail (self != NULL, FALSE);
- g_ptr_array_free (array, TRUE);
- }
+ priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
+ if (priv->scanning)
+ return TRUE;
+ if (priv->state == NM_SUPPLICANT_INTERFACE_STATE_SCANNING)
+ return TRUE;
+ return FALSE;
}
-static gboolean
-request_scan_results (gpointer user_data)
+static void
+wpas_iface_scan_done (DBusGProxy *proxy,
+ gboolean success,
+ gpointer user_data)
{
NMSupplicantInterface *self = NM_SUPPLICANT_INTERFACE (user_data);
NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
- NMSupplicantInfo *info;
- DBusGProxyCall *call;
GTimeVal cur_time;
- priv->scan_results_timeout = 0;
-
- g_return_val_if_fail (priv->iface_proxy != NULL, FALSE);
-
- info = nm_supplicant_info_new (self, priv->iface_proxy, priv->other_pcalls);
- call = dbus_g_proxy_begin_call (priv->iface_proxy, "scanResults",
- scan_results_cb,
- info,
- nm_supplicant_info_destroy,
- G_TYPE_INVALID);
- nm_supplicant_info_set_call (info, call);
-
+ /* Cache last scan completed time */
g_get_current_time (&cur_time);
priv->last_scan = cur_time.tv_sec;
- return FALSE;
+
+ g_signal_emit (self, signals[SCAN_DONE], 0, success);
}
static void
-wpas_iface_query_scan_results (DBusGProxy *proxy, gpointer user_data)
+wpas_iface_properties_changed (DBusGProxy *proxy,
+ GHashTable *props,
+ gpointer user_data)
{
- NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (user_data);
- GTimeVal cur_time;
+ NMSupplicantInterface *self = NM_SUPPLICANT_INTERFACE (user_data);
+ GValue *value;
- /* Only query scan results if a query is not queued */
- if (priv->scan_results_timeout)
- return;
+ value = g_hash_table_lookup (props, "Scanning");
+ if (value && G_VALUE_HOLDS_BOOLEAN (value))
+ set_scanning (self, g_value_get_boolean (value));
- g_get_current_time (&cur_time);
-
- /* Only fetch scan results every 4s max, but initially do it right away */
- if (priv->last_scan + 4 < cur_time.tv_sec) {
- priv->scan_results_timeout = g_idle_add (request_scan_results,
- user_data);
- } else {
- priv->scan_results_timeout =
- g_timeout_add_seconds ((4 - (cur_time.tv_sec - priv->last_scan)),
- request_scan_results, user_data);
- }
-}
+ value = g_hash_table_lookup (props, "State");
+ if (value && G_VALUE_HOLDS_STRING (value))
+ set_state_from_string (self, g_value_get_string (value));
-static guint32
-wpas_state_string_to_enum (const char * str_state)
-{
- guint32 enum_state = NM_SUPPLICANT_INTERFACE_CON_STATE_DISCONNECTED;
-
- if (!strcmp (str_state, "DISCONNECTED"))
- enum_state = NM_SUPPLICANT_INTERFACE_CON_STATE_DISCONNECTED;
- else if (!strcmp (str_state, "INACTIVE"))
- enum_state = NM_SUPPLICANT_INTERFACE_CON_STATE_INACTIVE;
- else if (!strcmp (str_state, "SCANNING"))
- enum_state = NM_SUPPLICANT_INTERFACE_CON_STATE_SCANNING;
- else if (!strcmp (str_state, "ASSOCIATING"))
- enum_state = NM_SUPPLICANT_INTERFACE_CON_STATE_ASSOCIATING;
- else if (!strcmp (str_state, "ASSOCIATED"))
- enum_state = NM_SUPPLICANT_INTERFACE_CON_STATE_ASSOCIATED;
- else if (!strcmp (str_state, "4WAY_HANDSHAKE"))
- enum_state = NM_SUPPLICANT_INTERFACE_CON_STATE_4WAY_HANDSHAKE;
- else if (!strcmp (str_state, "GROUP_HANDSHAKE"))
- enum_state = NM_SUPPLICANT_INTERFACE_CON_STATE_GROUP_HANDSHAKE;
- else if (!strcmp (str_state, "COMPLETED"))
- enum_state = NM_SUPPLICANT_INTERFACE_CON_STATE_COMPLETED;
-
- return enum_state;
+ value = g_hash_table_lookup (props, "BSSs");
+ if (value && G_VALUE_HOLDS (value, DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH))
+ request_bss_properties (self, g_value_get_boxed (value));
}
static void
-wpas_iface_handle_state_change (DBusGProxy *proxy,
- const char *str_new_state,
- const char *str_old_state,
- gpointer user_data)
+iface_get_props_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
{
- NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (user_data);
- guint32 old_state, enum_new_state;
-
- enum_new_state = wpas_state_string_to_enum (str_new_state);
- old_state = priv->con_state;
- priv->con_state = enum_new_state;
- if (priv->con_state != old_state) {
- g_signal_emit (user_data,
- nm_supplicant_interface_signals[CONNECTION_STATE],
- 0,
- priv->con_state,
- old_state);
- }
-}
-
-
-static void
-iface_state_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
-{
- GError *err = NULL;
- char *state_str = NULL;
-
- if (!dbus_g_proxy_end_call (proxy, call_id, &err,
- G_TYPE_STRING, &state_str,
- G_TYPE_INVALID)) {
- nm_log_warn (LOGD_SUPPLICANT, "could not get interface state: %s.", err->message);
- g_error_free (err);
+ NMSupplicantInfo *info = (NMSupplicantInfo *) user_data;
+ GHashTable *props = NULL;
+ GError *error = NULL;
+
+ if (dbus_g_proxy_end_call (proxy, call_id, &error,
+ DBUS_TYPE_G_MAP_OF_VARIANT, &props,
+ G_TYPE_INVALID)) {
+ wpas_iface_properties_changed (NULL, props, info->interface);
+ g_hash_table_destroy (props);
} else {
- NMSupplicantInfo *info = (NMSupplicantInfo *) user_data;
- NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (info->interface);
-
- priv->con_state = wpas_state_string_to_enum (state_str);
- g_free (state_str);
- nm_supplicant_interface_set_state (info->interface, NM_SUPPLICANT_INTERFACE_STATE_READY);
+ nm_log_warn (LOGD_SUPPLICANT, "could not get interface properties: %s.",
+ error && error->message ? error->message : "(unknown)");
+ g_clear_error (&error);
}
}
static void
-wpas_iface_get_state (NMSupplicantInterface *self)
+wpas_iface_get_props (NMSupplicantInterface *self)
{
NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
NMSupplicantInfo *info;
DBusGProxyCall *call;
- info = nm_supplicant_info_new (self, priv->iface_proxy, priv->other_pcalls);
- call = dbus_g_proxy_begin_call (priv->iface_proxy, "state",
- iface_state_cb,
+ info = nm_supplicant_info_new (self, priv->props_proxy, priv->other_pcalls);
+ call = dbus_g_proxy_begin_call (priv->props_proxy, "GetAll",
+ iface_get_props_cb,
info,
nm_supplicant_info_destroy,
+ G_TYPE_STRING, WPAS_DBUS_IFACE_INTERFACE,
G_TYPE_INVALID);
nm_supplicant_info_set_call (info, call);
}
static void
-iface_scanning_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
+interface_add_done (NMSupplicantInterface *self, char *path)
+{
+ NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
+
+ nm_log_dbg (LOGD_SUPPLICANT, "(%s): interface added to supplicant", priv->dev);
+
+ priv->object_path = path;
+
+ priv->iface_proxy = dbus_g_proxy_new_for_name (nm_dbus_manager_get_connection (priv->dbus_mgr),
+ WPAS_DBUS_SERVICE,
+ path,
+ WPAS_DBUS_IFACE_INTERFACE);
+
+ dbus_g_object_register_marshaller (g_cclosure_marshal_VOID__BOXED,
+ G_TYPE_NONE,
+ DBUS_TYPE_G_MAP_OF_VARIANT,
+ G_TYPE_INVALID);
+ dbus_g_proxy_add_signal (priv->iface_proxy, "PropertiesChanged",
+ DBUS_TYPE_G_MAP_OF_VARIANT, G_TYPE_INVALID);
+ dbus_g_proxy_connect_signal (priv->iface_proxy, "PropertiesChanged",
+ G_CALLBACK (wpas_iface_properties_changed),
+ self, NULL);
+
+ dbus_g_proxy_add_signal (priv->iface_proxy, "ScanDone", G_TYPE_INVALID);
+ dbus_g_proxy_connect_signal (priv->iface_proxy, "ScanDone",
+ G_CALLBACK (wpas_iface_scan_done),
+ self,
+ NULL);
+
+ dbus_g_object_register_marshaller (_nm_marshal_VOID__STRING_BOXED,
+ G_TYPE_NONE,
+ G_TYPE_STRING, DBUS_TYPE_G_MAP_OF_VARIANT,
+ G_TYPE_INVALID);
+ dbus_g_proxy_add_signal (priv->iface_proxy, "BSSAdded", G_TYPE_INVALID);
+ dbus_g_proxy_connect_signal (priv->iface_proxy, "BSSAdded",
+ G_CALLBACK (wpas_iface_bss_added),
+ self,
+ NULL);
+
+ priv->props_proxy = dbus_g_proxy_new_for_name (nm_dbus_manager_get_connection (priv->dbus_mgr),
+ WPAS_DBUS_SERVICE,
+ path,
+ DBUS_INTERFACE_PROPERTIES);
+ /* Get initial properties */
+ wpas_iface_get_props (self);
+
+ set_state (self, NM_SUPPLICANT_INTERFACE_STATE_READY);
+}
+
+static void
+interface_get_cb (DBusGProxy *proxy,
+ DBusGProxyCall *call_id,
+ gpointer user_data)
{
NMSupplicantInfo *info = (NMSupplicantInfo *) user_data;
NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (info->interface);
- gboolean scanning = FALSE;
+ GError *error = NULL;
+ char *path = NULL;
- if (dbus_g_proxy_end_call (proxy, call_id, NULL,
- G_TYPE_BOOLEAN, &scanning,
- G_TYPE_INVALID)) {
- if (scanning != priv->scanning) {
- priv->scanning = scanning;
- g_object_notify (G_OBJECT (info->interface), "scanning");
- }
+ if (dbus_g_proxy_end_call (proxy, call_id, &error,
+ DBUS_TYPE_G_OBJECT_PATH, &path,
+ G_TYPE_INVALID)) {
+ interface_add_done (info->interface, path);
+ } else {
+ nm_log_err (LOGD_SUPPLICANT, "(%s): error getting interface: %s",
+ priv->dev, error->message);
+ g_clear_error (&error);
+ set_state (info->interface, NM_SUPPLICANT_INTERFACE_STATE_DOWN);
}
}
static void
-wpas_iface_get_scanning (NMSupplicantInterface *self)
+interface_get (NMSupplicantInterface *self)
{
NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
NMSupplicantInfo *info;
DBusGProxyCall *call;
- info = nm_supplicant_info_new (self, priv->iface_proxy, priv->other_pcalls);
- call = dbus_g_proxy_begin_call (priv->iface_proxy, "scanning",
- iface_scanning_cb,
+ info = nm_supplicant_info_new (self, priv->wpas_proxy, priv->other_pcalls);
+ call = dbus_g_proxy_begin_call (priv->wpas_proxy, "GetInterface",
+ interface_get_cb,
info,
nm_supplicant_info_destroy,
+ G_TYPE_STRING, priv->dev,
G_TYPE_INVALID);
nm_supplicant_info_set_call (info, call);
}
static void
-wpas_iface_handle_scanning (DBusGProxy *proxy,
- gboolean scanning,
- gpointer user_data)
-{
- NMSupplicantInterface *self = NM_SUPPLICANT_INTERFACE (user_data);
- NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
-
- if (scanning != priv->scanning) {
- priv->scanning = scanning;
- g_object_notify (G_OBJECT (self), "scanning");
- }
-}
-
-gboolean
-nm_supplicant_interface_get_scanning (NMSupplicantInterface *self)
-{
- NMSupplicantInterfacePrivate *priv;
-
- g_return_val_if_fail (self != NULL, FALSE);
-
- priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
- if (priv->scanning)
- return TRUE;
- if (priv->con_state == NM_SUPPLICANT_INTERFACE_CON_STATE_SCANNING)
- return TRUE;
- return FALSE;
-}
-
-static void
-nm_supplicant_interface_add_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
+interface_add_cb (DBusGProxy *proxy,
+ DBusGProxyCall *call_id,
+ gpointer user_data)
{
NMSupplicantInfo *info = (NMSupplicantInfo *) user_data;
NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (info->interface);
- GError *err = NULL;
+ GError *error = NULL;
char *path = NULL;
- if (!dbus_g_proxy_end_call (proxy, call_id, &err,
- DBUS_TYPE_G_OBJECT_PATH, &path,
- G_TYPE_INVALID)) {
-
- if (dbus_g_error_has_name (err, WPAS_ERROR_INVALID_IFACE)) {
- /* Interface not added, try to add it */
- nm_supplicant_interface_add_to_supplicant (info->interface, FALSE);
- } else if (dbus_g_error_has_name (err, WPAS_ERROR_EXISTS_ERROR)) {
- /* Interface already added, just try to get the interface */
- nm_supplicant_interface_add_to_supplicant (info->interface, TRUE);
+ if (dbus_g_proxy_end_call (proxy, call_id, &error,
+ DBUS_TYPE_G_OBJECT_PATH, &path,
+ G_TYPE_INVALID)) {
+ interface_add_done (info->interface, path);
+ } else {
+ if (dbus_g_error_has_name (error, WPAS_ERROR_EXISTS_ERROR)) {
+ /* Interface already added, just get its object path */
+ interface_get (info->interface);
+ } else if ( g_error_matches (error, DBUS_GERROR, DBUS_GERROR_SERVICE_UNKNOWN)
+ || dbus_g_error_has_name (error, DBUS_ERROR_SPAWN_SERVICE_NOT_FOUND)) {
+ /* Supplicant wasn't running and could be launched via service
+ * activation. Wait for it to start by moving back to the INIT
+ * state.
+ */
+ nm_log_dbg (LOGD_SUPPLICANT, "(%s): failed to activate supplicant: %s",
+ priv->dev, error->message);
+ set_state (info->interface, NM_SUPPLICANT_INTERFACE_STATE_INIT);
} else {
- nm_log_err (LOGD_SUPPLICANT, "(%s): error getting interface: %s",
- priv->dev, err->message);
+ nm_log_err (LOGD_SUPPLICANT, "(%s): error adding interface: %s",
+ priv->dev, error->message);
+ set_state (info->interface, NM_SUPPLICANT_INTERFACE_STATE_DOWN);
}
-
- g_error_free (err);
- } else {
- nm_log_dbg (LOGD_SUPPLICANT, "(%s): interface added to supplicant", priv->dev);
-
- priv->object_path = path;
-
- priv->iface_proxy = dbus_g_proxy_new_for_name (nm_dbus_manager_get_connection (priv->dbus_mgr),
- WPAS_DBUS_SERVICE,
- path,
- WPAS_DBUS_IFACE_INTERFACE);
-
- dbus_g_proxy_add_signal (priv->iface_proxy, "ScanResultsAvailable", G_TYPE_INVALID);
-
- dbus_g_object_register_marshaller (_nm_marshal_VOID__STRING_STRING,
- G_TYPE_NONE,
- G_TYPE_STRING, G_TYPE_STRING,
- G_TYPE_INVALID);
-
- dbus_g_proxy_add_signal (priv->iface_proxy, "StateChange", G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-
- dbus_g_proxy_connect_signal (priv->iface_proxy, "ScanResultsAvailable",
- G_CALLBACK (wpas_iface_query_scan_results),
- info->interface,
- NULL);
-
- dbus_g_proxy_connect_signal (priv->iface_proxy, "StateChange",
- G_CALLBACK (wpas_iface_handle_state_change),
- info->interface,
- NULL);
-
- dbus_g_proxy_add_signal (priv->iface_proxy, "Scanning", G_TYPE_BOOLEAN, G_TYPE_INVALID);
-
- dbus_g_proxy_connect_signal (priv->iface_proxy, "Scanning",
- G_CALLBACK (wpas_iface_handle_scanning),
- info->interface,
- NULL);
-
- /* Interface added to the supplicant; get its initial state. */
- wpas_iface_get_state (info->interface);
- wpas_iface_get_scanning (info->interface);
+ g_clear_error (&error);
}
}
static void
-nm_supplicant_interface_add_to_supplicant (NMSupplicantInterface * self,
- gboolean get_only)
+interface_add (NMSupplicantInterface *self, gboolean is_wireless)
{
NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
- NMSupplicantInfo *info;
- DBusGProxy *proxy;
DBusGProxyCall *call;
-
- proxy = dbus_g_proxy_new_for_name (nm_dbus_manager_get_connection (priv->dbus_mgr),
- WPAS_DBUS_SERVICE,
- WPAS_DBUS_PATH,
- WPAS_DBUS_INTERFACE);
- info = nm_supplicant_info_new (self, proxy, priv->other_pcalls);
-
- if (get_only) {
- call = dbus_g_proxy_begin_call (proxy, "getInterface",
- nm_supplicant_interface_add_cb,
- info,
- nm_supplicant_info_destroy,
- G_TYPE_STRING, priv->dev,
- G_TYPE_INVALID);
- } else {
- GHashTable *hash = g_hash_table_new (g_str_hash, g_str_equal);
- GValue *driver;
-
- driver = g_new0 (GValue, 1);
- g_value_init (driver, G_TYPE_STRING);
- g_value_set_string (driver, priv->is_wireless ? "wext" : "wired");
- g_hash_table_insert (hash, "driver", driver);
-
- call = dbus_g_proxy_begin_call (proxy, "addInterface",
- nm_supplicant_interface_add_cb,
- info,
- nm_supplicant_info_destroy,
- G_TYPE_STRING, priv->dev,
- DBUS_TYPE_G_MAP_OF_VARIANT, hash,
- G_TYPE_INVALID);
-
- g_value_unset (driver);
- g_free (driver);
- g_hash_table_destroy (hash);
- }
-
- g_object_unref (proxy);
-
- nm_supplicant_info_set_call (info, call);
-}
-
-static void
-nm_supplicant_interface_start (NMSupplicantInterface * self)
-{
- NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
- guint32 state;
+ NMSupplicantInfo *info;
+ GHashTable *hash;
+ GValue *driver, *ifname;
/* Can only start the interface from INIT state */
g_return_if_fail (priv->state == NM_SUPPLICANT_INTERFACE_STATE_INIT);
nm_log_dbg (LOGD_SUPPLICANT, "(%s): adding interface to supplicant", priv->dev);
- state = nm_supplicant_manager_get_state (priv->smgr);
- if (state == NM_SUPPLICANT_MANAGER_STATE_IDLE) {
- nm_supplicant_interface_set_state (self, NM_SUPPLICANT_INTERFACE_STATE_STARTING);
- nm_supplicant_interface_add_to_supplicant (self, FALSE);
- } else if (state == NM_SUPPLICANT_MANAGER_STATE_DOWN) {
- /* Don't do anything; wait for signal from supplicant manager
- * that its state has changed.
- */
- } else
- nm_log_warn (LOGD_SUPPLICANT, "Unknown supplicant manager state!");
-}
+ /* Move to starting to prevent double-calls of interface_add() */
+ set_state (self, NM_SUPPLICANT_INTERFACE_STATE_STARTING);
-static void
-nm_supplicant_interface_handle_supplicant_manager_idle_state (NMSupplicantInterface * self)
-{
- switch (NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self)->state) {
- case NM_SUPPLICANT_INTERFACE_STATE_INIT:
- /* Move to STARTING state when supplicant is ready */
- nm_supplicant_interface_start (self);
- break;
- case NM_SUPPLICANT_INTERFACE_STATE_STARTING:
- /* Don't do anything here, though we should never hit this */
- break;
- case NM_SUPPLICANT_INTERFACE_STATE_READY:
- /* Don't do anything here, though we should never hit this */
- break;
- case NM_SUPPLICANT_INTERFACE_STATE_DOWN:
- /* Don't do anything here; interface can't get out of DOWN state */
- break;
- default:
- nm_log_warn (LOGD_SUPPLICANT, "Unknown supplicant interface state!");
- break;
- }
-}
+ /* Try to add the interface to the supplicant. If the supplicant isn't
+ * running, this will start it via D-Bus activation and return the response
+ * when the supplicant has started.
+ */
+ info = nm_supplicant_info_new (self, priv->wpas_proxy, priv->other_pcalls);
-static void
-nm_supplicant_interface_set_state (NMSupplicantInterface * self,
- guint32 new_state)
-{
- NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
- guint32 old_state;
+ hash = g_hash_table_new (g_str_hash, g_str_equal);
- g_return_if_fail (new_state < NM_SUPPLICANT_INTERFACE_STATE_LAST);
+ driver = g_new0 (GValue, 1);
+ g_value_init (driver, G_TYPE_STRING);
+ g_value_set_string (driver, is_wireless ? "nl80211,wext" : "wired");
+ g_hash_table_insert (hash, "Driver", driver);
- if (new_state == priv->state)
- return;
+ ifname = g_new0 (GValue, 1);
+ g_value_init (ifname, G_TYPE_STRING);
+ g_value_set_string (ifname, priv->dev);
+ g_hash_table_insert (hash, "Ifname", ifname);
- old_state = priv->state;
- if (new_state == NM_SUPPLICANT_INTERFACE_STATE_DOWN) {
- /* If the interface is transitioning to DOWN and there's are
- * in-progress pending calls, cancel them.
- */
- cancel_all_callbacks (priv->other_pcalls);
- cancel_all_callbacks (priv->assoc_pcalls);
- }
+ call = dbus_g_proxy_begin_call (priv->wpas_proxy, "CreateInterface",
+ interface_add_cb,
+ info,
+ nm_supplicant_info_destroy,
+ DBUS_TYPE_G_MAP_OF_VARIANT, hash,
+ G_TYPE_INVALID);
- priv->state = new_state;
- g_signal_emit (self,
- nm_supplicant_interface_signals[STATE],
- 0,
- priv->state,
- old_state);
+ g_hash_table_destroy (hash);
+ g_value_unset (driver);
+ g_free (driver);
+ g_value_unset (ifname);
+ g_free (ifname);
+
+ nm_supplicant_info_set_call (info, call);
}
static void
-nm_supplicant_interface_smgr_state_changed (NMSupplicantManager * smgr,
- guint32 new_state,
- guint32 old_state,
- gpointer user_data)
+smgr_avail_cb (NMSupplicantManager *smgr,
+ GParamSpec *pspec,
+ gpointer user_data)
{
- NMSupplicantInterface * self = NM_SUPPLICANT_INTERFACE (user_data);
+ NMSupplicantInterface *self = NM_SUPPLICANT_INTERFACE (user_data);
+ NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (user_data);
- switch (new_state) {
- case NM_SUPPLICANT_MANAGER_STATE_DOWN:
- /* The supplicant went away, likely the connection to it is also
- * gone. Therefore, this interface must move to the DOWN state
- * and be disposed of.
- */
- nm_supplicant_interface_set_state (self, NM_SUPPLICANT_INTERFACE_STATE_DOWN);
- break;
- case NM_SUPPLICANT_MANAGER_STATE_IDLE:
- /* Handle the supplicant now being available. */
- nm_supplicant_interface_handle_supplicant_manager_idle_state (self);
- break;
- default:
- nm_log_warn (LOGD_SUPPLICANT, "Unknown supplicant manager state!");
- break;
+ if (nm_supplicant_manager_available (smgr)) {
+ /* This can happen if the supplicant couldn't be activated but
+ * for some reason was started after the activation failure.
+ */
+ if (priv->state == NM_SUPPLICANT_INTERFACE_STATE_INIT)
+ interface_add (self, priv->is_wireless);
+ } else {
+ /* The supplicant stopped; so we must tear down the interface */
+ set_state (self, NM_SUPPLICANT_INTERFACE_STATE_DOWN);
}
}
-
static void
remove_network_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
{
- GError *err = NULL;
- guint tmp;
+ GError *error = NULL;
- if (!dbus_g_proxy_end_call (proxy, call_id, &err, G_TYPE_UINT, &tmp, G_TYPE_INVALID)) {
+ if (!dbus_g_proxy_end_call (proxy, call_id, &error, G_TYPE_INVALID)) {
nm_log_dbg (LOGD_SUPPLICANT, "Couldn't remove network from supplicant interface: %s.",
- err->message);
- g_error_free (err);
+ error && error->message ? error->message : "(unknown)");
+ g_clear_error (&error);
}
}
static void
disconnect_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
{
- GError *err = NULL;
- guint tmp;
+ GError *error = NULL;
- if (!dbus_g_proxy_end_call (proxy, call_id, &err, G_TYPE_UINT, &tmp, G_TYPE_INVALID)) {
+ if (!dbus_g_proxy_end_call (proxy, call_id, &error, G_TYPE_INVALID)) {
nm_log_warn (LOGD_SUPPLICANT, "Couldn't disconnect supplicant interface: %s.",
- err->message);
- g_error_free (err);
+ error && error->message ? error->message : "(unknown)");
+ g_clear_error (&error);
}
}
@@ -1045,32 +679,26 @@ nm_supplicant_interface_disconnect (NMSupplicantInterface * self)
if (!priv->iface_proxy)
return;
- /* Don't try to disconnect if the supplicant interface is already
- * disconnected.
- */
- if (priv->con_state == NM_SUPPLICANT_INTERFACE_CON_STATE_DISCONNECTED
- || priv->con_state == NM_SUPPLICANT_INTERFACE_CON_STATE_INACTIVE) {
- if (priv->net_proxy) {
- g_object_unref (priv->net_proxy);
- priv->net_proxy = NULL;
- }
-
+ /* Don't try to disconnect if the supplicant interface is already disconnected */
+ if ( priv->state == NM_SUPPLICANT_INTERFACE_STATE_DISCONNECTED
+ || priv->state == NM_SUPPLICANT_INTERFACE_STATE_INACTIVE) {
+ g_free (priv->net_path);
+ priv->net_path = NULL;
return;
}
/* Remove any network that was added by NetworkManager */
- if (priv->net_proxy) {
- dbus_g_proxy_begin_call (priv->iface_proxy, "removeNetwork",
+ if (priv->net_path) {
+ dbus_g_proxy_begin_call (priv->iface_proxy, "RemoveNetwork",
remove_network_cb,
NULL, NULL,
- DBUS_TYPE_G_OBJECT_PATH, dbus_g_proxy_get_path (priv->net_proxy),
+ DBUS_TYPE_G_OBJECT_PATH, priv->net_path,
G_TYPE_INVALID);
-
- g_object_unref (priv->net_proxy);
- priv->net_proxy = NULL;
+ g_free (priv->net_path);
+ priv->net_path = NULL;
}
- dbus_g_proxy_begin_call (priv->iface_proxy, "disconnect",
+ dbus_g_proxy_begin_call (priv->iface_proxy, "Disconnect",
disconnect_cb,
NULL, NULL,
G_TYPE_INVALID);
@@ -1081,9 +709,8 @@ select_network_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_dat
{
NMSupplicantInfo *info = (NMSupplicantInfo *) user_data;
GError *err = NULL;
- guint tmp;
- if (!dbus_g_proxy_end_call (proxy, call_id, &err, G_TYPE_UINT, &tmp, G_TYPE_INVALID)) {
+ if (!dbus_g_proxy_end_call (proxy, call_id, &err, G_TYPE_INVALID)) {
nm_log_warn (LOGD_SUPPLICANT, "Couldn't select network config: %s.", err->message);
emit_error_helper (info->interface, err);
g_error_free (err);
@@ -1091,163 +718,86 @@ select_network_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_dat
}
static void
-set_network_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
-{
- NMSupplicantInfo *info = (NMSupplicantInfo *) user_data;
- NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (info->interface);
- GError *err = NULL;
- guint tmp;
-
- if (!dbus_g_proxy_end_call (proxy, call_id, &err, G_TYPE_UINT, &tmp, G_TYPE_INVALID)) {
- nm_log_warn (LOGD_SUPPLICANT, "Couldn't set network config: %s.", err->message);
- emit_error_helper (info->interface, err);
- g_error_free (err);
- } else {
- DBusGProxyCall *call;
-
- info = nm_supplicant_info_new (info->interface, priv->iface_proxy, priv->assoc_pcalls);
- call = dbus_g_proxy_begin_call (priv->iface_proxy, "selectNetwork",
- select_network_cb,
- info,
- nm_supplicant_info_destroy,
- DBUS_TYPE_G_OBJECT_PATH, dbus_g_proxy_get_path (proxy),
- G_TYPE_INVALID);
- nm_supplicant_info_set_call (info, call);
- }
-}
-
-static void
-call_set_network (NMSupplicantInfo *info)
+call_select_network (NMSupplicantInterface *self)
{
- NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (info->interface);
- GHashTable *config_hash;
+ NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
DBusGProxyCall *call;
+ NMSupplicantInfo *info;
- config_hash = nm_supplicant_config_get_hash (priv->cfg);
- call = dbus_g_proxy_begin_call (priv->net_proxy, "set",
- set_network_cb,
+ /* We only select the network after all blobs (if any) have been set */
+ if (priv->blobs_left > 0)
+ return;
+
+ info = nm_supplicant_info_new (self, priv->iface_proxy, priv->assoc_pcalls);
+ call = dbus_g_proxy_begin_call (priv->iface_proxy, "SelectNetwork",
+ select_network_cb,
info,
nm_supplicant_info_destroy,
- DBUS_TYPE_G_MAP_OF_VARIANT, config_hash,
+ DBUS_TYPE_G_OBJECT_PATH, priv->net_path,
G_TYPE_INVALID);
nm_supplicant_info_set_call (info, call);
- g_hash_table_destroy (config_hash);
}
static void
-set_blobs_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
+add_blob_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
{
NMSupplicantInfo *info = (NMSupplicantInfo *) user_data;
NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (info->interface);
GError *err = NULL;
guint tmp;
+ priv->blobs_left--;
+
if (!dbus_g_proxy_end_call (proxy, call_id, &err, G_TYPE_UINT, &tmp, G_TYPE_INVALID)) {
nm_log_warn (LOGD_SUPPLICANT, "Couldn't set network certificates: %s.", err->message);
emit_error_helper (info->interface, err);
g_error_free (err);
- } else {
- info = nm_supplicant_info_new (info->interface, priv->iface_proxy, priv->assoc_pcalls);
- call_set_network (info);
- }
-}
-
-static GValue *
-byte_array_to_gvalue (const GByteArray *array)
-{
- GValue *val;
-
- val = g_slice_new0 (GValue);
- g_value_init (val, DBUS_TYPE_G_UCHAR_ARRAY);
- g_value_set_boxed (val, array);
-
- return val;
-}
-
-static void
-blob_free (GValue *val)
-{
- g_value_unset (val);
- g_slice_free (GValue, val);
-}
-
-static void
-convert_blob (const char *key, const GByteArray *value, GHashTable *hash)
-{
- GValue *val;
-
- val = byte_array_to_gvalue (value);
- g_hash_table_insert (hash, g_strdup (key), val);
-}
-
-static void
-call_set_blobs (NMSupplicantInfo *info, GHashTable *orig_blobs)
-{
- NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (info->interface);
- DBusGProxyCall *call;
- GHashTable *blobs;
-
- blobs = g_hash_table_new_full (g_str_hash, g_str_equal,
- (GDestroyNotify) g_free,
- (GDestroyNotify) blob_free);
- if (!blobs) {
- const char *msg = "Not enough memory to create blob table.";
-
- nm_log_warn (LOGD_SUPPLICANT, "%s", msg);
- g_signal_emit (info->interface,
- nm_supplicant_interface_signals[CONNECTION_ERROR],
- 0, "SendBlobError", msg);
- return;
- }
-
- g_hash_table_foreach (orig_blobs, (GHFunc) convert_blob, blobs);
-
- call = dbus_g_proxy_begin_call (priv->iface_proxy, "setBlobs",
- set_blobs_cb,
- info,
- nm_supplicant_info_destroy,
- DBUS_TYPE_G_MAP_OF_VARIANT, blobs,
- G_TYPE_INVALID);
- nm_supplicant_info_set_call (info, call);
- g_hash_table_destroy (blobs);
+ } else
+ call_select_network (info->interface);
}
static void
add_network_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
{
NMSupplicantInfo *info = (NMSupplicantInfo *) user_data;
+ NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (info->interface);
GError *err = NULL;
- char *path = NULL;
+ GHashTable *blobs;
+ GHashTableIter iter;
+ gpointer name, data;
+ DBusGProxyCall *call;
+ NMSupplicantInfo *blob_info;
+
+ g_free (priv->net_path);
+ priv->net_path = NULL;
if (!dbus_g_proxy_end_call (proxy, call_id, &err,
- DBUS_TYPE_G_OBJECT_PATH, &path,
+ DBUS_TYPE_G_OBJECT_PATH, &priv->net_path,
G_TYPE_INVALID)) {
nm_log_warn (LOGD_SUPPLICANT, "Couldn't add a network to the supplicant interface: %s.",
err->message);
emit_error_helper (info->interface, err);
g_error_free (err);
- } else {
- NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (info->interface);
- GHashTable *blobs;
-
- priv->net_proxy = dbus_g_proxy_new_for_name (nm_dbus_manager_get_connection (priv->dbus_mgr),
- WPAS_DBUS_SERVICE,
- path,
- WPAS_DBUS_IFACE_NETWORK);
- g_free (path);
-
- info = nm_supplicant_info_new (info->interface,
- priv->net_proxy,
- priv->assoc_pcalls);
- /* Send any blobs first; if there aren't any jump to sending the
- * config settings.
- */
- blobs = nm_supplicant_config_get_blobs (priv->cfg);
- if (g_hash_table_size (blobs) > 0)
- call_set_blobs (info, blobs);
- else
- call_set_network (info);
+ return;
+ }
+
+ /* Send blobs first; otherwise jump to sending the config settings */
+ blobs = nm_supplicant_config_get_blobs (priv->cfg);
+ priv->blobs_left = g_hash_table_size (blobs);
+ g_hash_table_iter_init (&iter, blobs);
+ while (g_hash_table_iter_next (&iter, &name, &data)) {
+ blob_info = nm_supplicant_info_new (info->interface, priv->iface_proxy, priv->assoc_pcalls);
+ call = dbus_g_proxy_begin_call (priv->iface_proxy, "AddBlob",
+ add_blob_cb,
+ blob_info,
+ nm_supplicant_info_destroy,
+ DBUS_TYPE_STRING, name,
+ DBUS_TYPE_G_UCHAR_ARRAY, blobs,
+ G_TYPE_INVALID);
+ nm_supplicant_info_set_call (blob_info, call);
}
+
+ call_select_network (info->interface);
}
static void
@@ -1256,10 +806,10 @@ set_ap_scan_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
NMSupplicantInfo *info = (NMSupplicantInfo *) user_data;
NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (info->interface);
GError *err = NULL;
- guint32 tmp;
DBusGProxyCall *call;
+ GHashTable *config_hash;
- if (!dbus_g_proxy_end_call (proxy, call_id, &err, G_TYPE_UINT, &tmp, G_TYPE_INVALID)) {
+ if (!dbus_g_proxy_end_call (proxy, call_id, &err, G_TYPE_INVALID)) {
nm_log_warn (LOGD_SUPPLICANT, "Couldn't send AP scan mode to the supplicant interface: %s.",
err->message);
emit_error_helper (info->interface, err);
@@ -1270,12 +820,15 @@ set_ap_scan_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
nm_log_info (LOGD_SUPPLICANT, "Config: set interface ap_scan to %d",
nm_supplicant_config_get_ap_scan (priv->cfg));
- info = nm_supplicant_info_new (info->interface, proxy, info->store);
- call = dbus_g_proxy_begin_call (proxy, "addNetwork",
+ info = nm_supplicant_info_new (info->interface, priv->iface_proxy, info->store);
+ config_hash = nm_supplicant_config_get_hash (priv->cfg);
+ call = dbus_g_proxy_begin_call (priv->iface_proxy, "AddNetwork",
add_network_cb,
info,
nm_supplicant_info_destroy,
+ DBUS_TYPE_G_MAP_OF_VARIANT, config_hash,
G_TYPE_INVALID);
+ g_hash_table_destroy (config_hash);
nm_supplicant_info_set_call (info, call);
}
@@ -1286,7 +839,7 @@ nm_supplicant_interface_set_config (NMSupplicantInterface * self,
NMSupplicantInterfacePrivate *priv;
NMSupplicantInfo *info;
DBusGProxyCall *call;
- guint32 ap_scan;
+ GValue value = { 0, };
g_return_val_if_fail (NM_IS_SUPPLICANT_INTERFACE (self), FALSE);
@@ -1303,46 +856,54 @@ nm_supplicant_interface_set_config (NMSupplicantInterface * self,
g_object_ref (priv->cfg);
- info = nm_supplicant_info_new (self, priv->iface_proxy, priv->other_pcalls);
- ap_scan = nm_supplicant_config_get_ap_scan (priv->cfg);
- call = dbus_g_proxy_begin_call (priv->iface_proxy, "setAPScan",
+ g_value_init (&value, G_TYPE_UINT);
+ g_value_set_uint (&value, nm_supplicant_config_get_ap_scan (priv->cfg));
+
+ info = nm_supplicant_info_new (self, priv->props_proxy, priv->other_pcalls);
+ call = dbus_g_proxy_begin_call (priv->props_proxy, "Set",
set_ap_scan_cb,
info,
nm_supplicant_info_destroy,
- G_TYPE_UINT, ap_scan,
+ G_TYPE_STRING, WPAS_DBUS_IFACE_INTERFACE,
+ G_TYPE_STRING, "ApScan",
+ G_TYPE_VALUE, &value,
G_TYPE_INVALID);
nm_supplicant_info_set_call (info, call);
+ g_value_unset (&value);
return call != NULL;
}
-const char *
-nm_supplicant_interface_get_device (NMSupplicantInterface * self)
-{
- g_return_val_if_fail (NM_IS_SUPPLICANT_INTERFACE (self), NULL);
-
- return NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self)->dev;
-}
-
static void
scan_request_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
{
NMSupplicantInfo *info = (NMSupplicantInfo *) user_data;
GError *err = NULL;
- guint32 success = 0;
- if (!dbus_g_proxy_end_call (proxy, call_id, &err,
- G_TYPE_UINT, &success,
- G_TYPE_INVALID)) {
+ if (!dbus_g_proxy_end_call (proxy, call_id, &err, G_TYPE_INVALID)) {
nm_log_warn (LOGD_SUPPLICANT, "Could not get scan request result: %s", err->message);
- g_error_free (err);
}
+ g_signal_emit (info->interface, signals[SCAN_DONE], 0, err ? FALSE : TRUE);
+ g_clear_error (&err);
+}
+
+static void
+destroy_gvalue (gpointer data)
+{
+ GValue *value = (GValue *) data;
- /* Notify listeners of the result of the scan */
- g_signal_emit (info->interface,
- nm_supplicant_interface_signals[SCAN_REQ_RESULT],
- 0,
- success ? TRUE : FALSE);
+ g_value_unset (value);
+ g_slice_free (GValue, value);
+}
+
+static GValue *
+string_to_gvalue (const char *str)
+{
+ GValue *val = g_slice_new0 (GValue);
+
+ g_value_init (val, G_TYPE_STRING);
+ g_value_set_string (val, str);
+ return val;
}
gboolean
@@ -1351,17 +912,24 @@ nm_supplicant_interface_request_scan (NMSupplicantInterface * self)
NMSupplicantInterfacePrivate *priv;
NMSupplicantInfo *info;
DBusGProxyCall *call;
+ GHashTable *hash;
g_return_val_if_fail (NM_IS_SUPPLICANT_INTERFACE (self), FALSE);
priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
+ /* Scan parameters */
+ hash = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, destroy_gvalue);
+ g_hash_table_insert (hash, "Type", string_to_gvalue ("active"));
+
info = nm_supplicant_info_new (self, priv->iface_proxy, priv->other_pcalls);
- call = dbus_g_proxy_begin_call (priv->iface_proxy, "scan",
+ call = dbus_g_proxy_begin_call (priv->iface_proxy, "Scan",
scan_request_cb,
info,
nm_supplicant_info_destroy,
+ DBUS_TYPE_G_MAP_OF_VARIANT, hash,
G_TYPE_INVALID);
+ g_hash_table_destroy (hash);
nm_supplicant_info_set_call (info, call);
return call != NULL;
@@ -1375,14 +943,6 @@ nm_supplicant_interface_get_state (NMSupplicantInterface * self)
return NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self)->state;
}
-guint32
-nm_supplicant_interface_get_connection_state (NMSupplicantInterface * self)
-{
- g_return_val_if_fail (NM_IS_SUPPLICANT_INTERFACE (self), NM_SUPPLICANT_INTERFACE_CON_STATE_DISCONNECTED);
-
- return NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self)->con_state;
-}
-
const char *
nm_supplicant_interface_state_to_string (guint32 state)
{
@@ -1393,6 +953,22 @@ nm_supplicant_interface_state_to_string (guint32 state)
return "starting";
case NM_SUPPLICANT_INTERFACE_STATE_READY:
return "ready";
+ case NM_SUPPLICANT_INTERFACE_STATE_DISCONNECTED:
+ return "disconnected";
+ case NM_SUPPLICANT_INTERFACE_STATE_INACTIVE:
+ return "inactive";
+ case NM_SUPPLICANT_INTERFACE_STATE_SCANNING:
+ return "scanning";
+ case NM_SUPPLICANT_INTERFACE_STATE_ASSOCIATING:
+ return "associating";
+ case NM_SUPPLICANT_INTERFACE_STATE_ASSOCIATED:
+ return "associated";
+ case NM_SUPPLICANT_INTERFACE_STATE_4WAY_HANDSHAKE:
+ return "4-way handshake";
+ case NM_SUPPLICANT_INTERFACE_STATE_GROUP_HANDSHAKE:
+ return "group handshake";
+ case NM_SUPPLICANT_INTERFACE_STATE_COMPLETED:
+ return "completed";
case NM_SUPPLICANT_INTERFACE_STATE_DOWN:
return "down";
default:
@@ -1402,28 +978,227 @@ nm_supplicant_interface_state_to_string (guint32 state)
}
const char *
-nm_supplicant_interface_connection_state_to_string (guint32 state)
+nm_supplicant_interface_get_device (NMSupplicantInterface * self)
{
- switch (state) {
- case NM_SUPPLICANT_INTERFACE_CON_STATE_DISCONNECTED:
- return "disconnected";
- case NM_SUPPLICANT_INTERFACE_CON_STATE_INACTIVE:
- return "inactive";
- case NM_SUPPLICANT_INTERFACE_CON_STATE_SCANNING:
- return "scanning";
- case NM_SUPPLICANT_INTERFACE_CON_STATE_ASSOCIATING:
- return "associating";
- case NM_SUPPLICANT_INTERFACE_CON_STATE_ASSOCIATED:
- return "associated";
- case NM_SUPPLICANT_INTERFACE_CON_STATE_4WAY_HANDSHAKE:
- return "4-way handshake";
- case NM_SUPPLICANT_INTERFACE_CON_STATE_GROUP_HANDSHAKE:
- return "group handshake";
- case NM_SUPPLICANT_INTERFACE_CON_STATE_COMPLETED:
- return "completed";
+ g_return_val_if_fail (self != NULL, NULL);
+ g_return_val_if_fail (NM_IS_SUPPLICANT_INTERFACE (self), NULL);
+
+ return NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self)->dev;
+}
+
+const char *
+nm_supplicant_interface_get_object_path (NMSupplicantInterface *self)
+{
+ g_return_val_if_fail (self != NULL, NULL);
+ g_return_val_if_fail (NM_IS_SUPPLICANT_INTERFACE (self), NULL);
+
+ return NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self)->object_path;
+}
+
+const char *
+nm_supplicant_interface_get_ifname (NMSupplicantInterface *self)
+{
+ g_return_val_if_fail (self != NULL, FALSE);
+ g_return_val_if_fail (NM_IS_SUPPLICANT_INTERFACE (self), FALSE);
+
+ return NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self)->dev;
+}
+
+/*******************************************************************/
+
+NMSupplicantInterface *
+nm_supplicant_interface_new (NMSupplicantManager *smgr,
+ const char *ifname,
+ gboolean is_wireless,
+ gboolean start_now)
+{
+ NMSupplicantInterface *self;
+ NMSupplicantInterfacePrivate *priv;
+ guint id;
+
+ g_return_val_if_fail (NM_IS_SUPPLICANT_MANAGER (smgr), NULL);
+ g_return_val_if_fail (ifname != NULL, NULL);
+
+ self = g_object_new (NM_TYPE_SUPPLICANT_INTERFACE, NULL);
+ if (self) {
+ priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
+
+ priv->smgr = g_object_ref (smgr);
+ id = g_signal_connect (priv->smgr,
+ "notify::" NM_SUPPLICANT_MANAGER_AVAILABLE,
+ G_CALLBACK (smgr_avail_cb),
+ self);
+ priv->smgr_avail_id = id;
+
+ priv->dev = g_strdup (ifname);
+ priv->is_wireless = is_wireless;
+
+ if (start_now)
+ interface_add (self, priv->is_wireless);
+ }
+
+ return self;
+}
+
+static void
+nm_supplicant_interface_init (NMSupplicantInterface * self)
+{
+ NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
+ DBusGConnection *bus;
+
+ priv->state = NM_SUPPLICANT_INTERFACE_STATE_INIT;
+ priv->assoc_pcalls = nm_call_store_new ();
+ priv->other_pcalls = nm_call_store_new ();
+ priv->dbus_mgr = nm_dbus_manager_get ();
+
+ bus = nm_dbus_manager_get_connection (priv->dbus_mgr);
+ priv->wpas_proxy = dbus_g_proxy_new_for_name (bus,
+ WPAS_DBUS_SERVICE,
+ WPAS_DBUS_PATH,
+ WPAS_DBUS_INTERFACE);
+}
+
+static void
+set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ switch (prop_id) {
default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
- return "unknown";
+}
+
+static void
+get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ switch (prop_id) {
+ case PROP_SCANNING:
+ g_value_set_boolean (value, NM_SUPPLICANT_INTERFACE_GET_PRIVATE (object)->scanning);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+dispose (GObject *object)
+{
+ NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (object);
+
+ if (priv->disposed) {
+ G_OBJECT_CLASS (nm_supplicant_interface_parent_class)->dispose (object);
+ return;
+ }
+ priv->disposed = TRUE;
+
+ /* Cancel pending calls before unrefing the dbus manager */
+ cancel_all_callbacks (priv->other_pcalls);
+ nm_call_store_destroy (priv->other_pcalls);
+
+ cancel_all_callbacks (priv->assoc_pcalls);
+ nm_call_store_destroy (priv->assoc_pcalls);
+
+ if (priv->props_proxy)
+ g_object_unref (priv->props_proxy);
+
+ if (priv->iface_proxy)
+ g_object_unref (priv->iface_proxy);
+
+ g_free (priv->net_path);
+
+ if (priv->wpas_proxy)
+ g_object_unref (priv->wpas_proxy);
+
+ if (priv->smgr) {
+ if (priv->smgr_avail_id)
+ g_signal_handler_disconnect (priv->smgr, priv->smgr_avail_id);
+ g_object_unref (priv->smgr);
+ }
+
+ g_free (priv->dev);
+
+ if (priv->dbus_mgr)
+ g_object_unref (priv->dbus_mgr);
+
+ if (priv->cfg)
+ g_object_unref (priv->cfg);
+
+ g_free (priv->object_path);
+
+ /* Chain up to the parent class */
+ G_OBJECT_CLASS (nm_supplicant_interface_parent_class)->dispose (object);
+}
+
+static void
+nm_supplicant_interface_class_init (NMSupplicantInterfaceClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ g_type_class_add_private (object_class, sizeof (NMSupplicantInterfacePrivate));
+
+ object_class->dispose = dispose;
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+
+ /* Properties */
+ g_object_class_install_property (object_class, PROP_SCANNING,
+ g_param_spec_boolean ("scanning",
+ "Scanning",
+ "Scanning",
+ FALSE,
+ G_PARAM_READABLE));
+
+ /* Signals */
+ signals[STATE] =
+ g_signal_new (NM_SUPPLICANT_INTERFACE_STATE,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (NMSupplicantInterfaceClass, state),
+ NULL, NULL,
+ _nm_marshal_VOID__UINT_UINT,
+ G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT);
+
+ signals[REMOVED] =
+ g_signal_new (NM_SUPPLICANT_INTERFACE_REMOVED,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (NMSupplicantInterfaceClass, removed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ signals[NEW_BSS] =
+ g_signal_new (NM_SUPPLICANT_INTERFACE_NEW_BSS,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (NMSupplicantInterfaceClass, new_bss),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__POINTER,
+ G_TYPE_NONE, 1, G_TYPE_POINTER);
+
+ signals[SCAN_DONE] =
+ g_signal_new (NM_SUPPLICANT_INTERFACE_SCAN_DONE,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (NMSupplicantInterfaceClass, scan_done),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__BOOLEAN,
+ G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+
+ signals[CONNECTION_ERROR] =
+ g_signal_new (NM_SUPPLICANT_INTERFACE_CONNECTION_ERROR,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (NMSupplicantInterfaceClass, connection_error),
+ NULL, NULL,
+ _nm_marshal_VOID__STRING_STRING,
+ G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_STRING);
}
diff --git a/src/supplicant-manager/nm-supplicant-interface.h b/src/supplicant-manager/nm-supplicant-interface.h
index bee5436f5a..44c92f19c6 100644
--- a/src/supplicant-manager/nm-supplicant-interface.h
+++ b/src/supplicant-manager/nm-supplicant-interface.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) 2006 - 2008 Red Hat, Inc.
+ * Copyright (C) 2006 - 2010 Red Hat, Inc.
* Copyright (C) 2007 - 2008 Novell, Inc.
*/
@@ -26,47 +26,26 @@
#include <dbus/dbus.h>
#include "nm-supplicant-types.h"
-G_BEGIN_DECLS
-
/*
* Supplicant interface states
- * The states are linear, ie INIT -> READY -> DOWN and state may only be
- * changed in one direction. If an interface reaches the DOWN state, it
- * cannot be re-initialized; it must be torn down and a new one created.
- *
- * INIT: interface has been created, but cannot be used yet; it is waiting
- * for pending requests of the supplicant to complete.
- * READY: interface is ready for use
- * DOWN: interface has been removed or has otherwise been made invalid; it
- * must be torn down.
- *
- * Note: LAST is an invalid state and only used for boundary checking.
+ * A mix of wpa_supplicant interface states and internal states.
*/
enum {
NM_SUPPLICANT_INTERFACE_STATE_INIT = 0,
NM_SUPPLICANT_INTERFACE_STATE_STARTING,
NM_SUPPLICANT_INTERFACE_STATE_READY,
+ NM_SUPPLICANT_INTERFACE_STATE_DISCONNECTED,
+ NM_SUPPLICANT_INTERFACE_STATE_INACTIVE,
+ NM_SUPPLICANT_INTERFACE_STATE_SCANNING,
+ NM_SUPPLICANT_INTERFACE_STATE_ASSOCIATING,
+ NM_SUPPLICANT_INTERFACE_STATE_ASSOCIATED,
+ NM_SUPPLICANT_INTERFACE_STATE_4WAY_HANDSHAKE,
+ NM_SUPPLICANT_INTERFACE_STATE_GROUP_HANDSHAKE,
+ NM_SUPPLICANT_INTERFACE_STATE_COMPLETED,
NM_SUPPLICANT_INTERFACE_STATE_DOWN,
NM_SUPPLICANT_INTERFACE_STATE_LAST
};
-
-/*
- * Supplicant interface connection states
- * The wpa_supplicant state for the connection.
- */
-enum {
- NM_SUPPLICANT_INTERFACE_CON_STATE_DISCONNECTED = 0,
- NM_SUPPLICANT_INTERFACE_CON_STATE_INACTIVE,
- NM_SUPPLICANT_INTERFACE_CON_STATE_SCANNING,
- NM_SUPPLICANT_INTERFACE_CON_STATE_ASSOCIATING,
- NM_SUPPLICANT_INTERFACE_CON_STATE_ASSOCIATED,
- NM_SUPPLICANT_INTERFACE_CON_STATE_4WAY_HANDSHAKE,
- NM_SUPPLICANT_INTERFACE_CON_STATE_GROUP_HANDSHAKE,
- NM_SUPPLICANT_INTERFACE_CON_STATE_COMPLETED,
- NM_SUPPLICANT_INTERFACE_CON_STATE_LAST
-};
-
#define NM_TYPE_SUPPLICANT_INTERFACE (nm_supplicant_interface_get_type ())
#define NM_SUPPLICANT_INTERFACE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SUPPLICANT_INTERFACE, NMSupplicantInterface))
#define NM_SUPPLICANT_INTERFACE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SUPPLICANT_INTERFACE, NMSupplicantInterfaceClass))
@@ -74,6 +53,12 @@ enum {
#define NM_IS_SUPPLICANT_INTERFACE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SUPPLICANT_INTERFACE))
#define NM_SUPPLICANT_INTERFACE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SUPPLICANT_INTERFACE, NMSupplicantInterfaceClass))
+#define NM_SUPPLICANT_INTERFACE_STATE "state"
+#define NM_SUPPLICANT_INTERFACE_REMOVED "removed"
+#define NM_SUPPLICANT_INTERFACE_NEW_BSS "new-bss"
+#define NM_SUPPLICANT_INTERFACE_SCAN_DONE "scan-done"
+#define NM_SUPPLICANT_INTERFACE_CONNECTION_ERROR "connection-error"
+
struct _NMSupplicantInterface {
GObject parent;
};
@@ -91,23 +76,14 @@ typedef struct {
/* interface was removed by the supplicant */
void (*removed) (NMSupplicantInterface * iface);
- /* interface saw a new access point from a scan */
- void (*scanned_ap) (NMSupplicantInterface * iface,
- DBusMessage * message);
+ /* interface saw a new BSS */
+ void (*new_bss) (NMSupplicantInterface *iface,
+ GHashTable *props);
- /* result of a wireless scan request */
- void (*scan_req_result) (NMSupplicantInterface * iface,
+ /* wireless scan is done */
+ void (*scan_done) (NMSupplicantInterface *iface,
gboolean success);
- /* scan results returned from supplicant */
- void (*scan_results) (NMSupplicantInterface * iface,
- guint num_bssids);
-
- /* link state of the device's connection */
- void (*connection_state) (NMSupplicantInterface * iface,
- guint32 new_state,
- guint32 old_state);
-
/* an error occurred during a connection request */
void (*connection_error) (NMSupplicantInterface * iface,
const char * name,
@@ -119,7 +95,8 @@ GType nm_supplicant_interface_get_type (void);
NMSupplicantInterface * nm_supplicant_interface_new (NMSupplicantManager * smgr,
const char *ifname,
- gboolean is_wireless);
+ gboolean is_wireless,
+ gboolean start_now);
gboolean nm_supplicant_interface_set_config (NMSupplicantInterface * iface,
NMSupplicantConfig * cfg);
@@ -128,18 +105,16 @@ void nm_supplicant_interface_disconnect (NMSupplicantInterface * iface);
const char * nm_supplicant_interface_get_device (NMSupplicantInterface * iface);
+const char *nm_supplicant_interface_get_object_path (NMSupplicantInterface * iface);
+
gboolean nm_supplicant_interface_request_scan (NMSupplicantInterface * self);
guint32 nm_supplicant_interface_get_state (NMSupplicantInterface * self);
-guint32 nm_supplicant_interface_get_connection_state (NMSupplicantInterface * self);
-
const char *nm_supplicant_interface_state_to_string (guint32 state);
-const char *nm_supplicant_interface_connection_state_to_string (guint32 state);
-
gboolean nm_supplicant_interface_get_scanning (NMSupplicantInterface *self);
-G_END_DECLS
+const char *nm_supplicant_interface_get_ifname (NMSupplicantInterface *self);
#endif /* NM_SUPPLICANT_INTERFACE_H */
diff --git a/src/supplicant-manager/nm-supplicant-manager.c b/src/supplicant-manager/nm-supplicant-manager.c
index a2cf58eb8f..19ee5730f9 100644
--- a/src/supplicant-manager/nm-supplicant-manager.c
+++ b/src/supplicant-manager/nm-supplicant-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) 2006 - 2008 Red Hat, Inc.
+ * Copyright (C) 2006 - 2010 Red Hat, Inc.
* Copyright (C) 2007 - 2008 Novell, Inc.
*/
@@ -26,19 +26,7 @@
#include "nm-supplicant-manager.h"
#include "nm-supplicant-interface.h"
#include "nm-dbus-manager.h"
-#include "nm-marshal.h"
#include "nm-logging.h"
-#include "nm-glib-compat.h"
-
-#define SUPPLICANT_POKE_INTERVAL 120
-
-typedef struct {
- NMDBusManager * dbus_mgr;
- guint32 state;
- GSList * ifaces;
- gboolean dispose_has_run;
- guint poke_id;
-} NMSupplicantManagerPrivate;
#define NM_SUPPLICANT_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
NM_TYPE_SUPPLICANT_MANAGER, \
@@ -46,298 +34,283 @@ typedef struct {
G_DEFINE_TYPE (NMSupplicantManager, nm_supplicant_manager, G_TYPE_OBJECT)
+/* Properties */
+enum {
+ PROP_0 = 0,
+ PROP_AVAILABLE,
+ LAST_PROP
+};
-static void nm_supplicant_manager_name_owner_changed (NMDBusManager *dbus_mgr,
- const char *name,
- const char *old,
- const char *new,
- gpointer user_data);
+typedef struct {
+ NMDBusManager * dbus_mgr;
+ guint name_owner_id;
+ DBusGProxy * proxy;
+ gboolean running;
+ GHashTable * ifaces;
+ guint die_count_reset_id;
+ guint die_count;
+ gboolean disposed;
+} NMSupplicantManagerPrivate;
-static void nm_supplicant_manager_set_state (NMSupplicantManager * self,
- guint32 new_state);
+/********************************************************************/
-static gboolean nm_supplicant_manager_startup (NMSupplicantManager * self);
+static inline gboolean
+die_count_exceeded (guint32 count)
+{
+ return count > 2;
+}
+NMSupplicantInterface *
+nm_supplicant_manager_iface_get (NMSupplicantManager * self,
+ const char *ifname,
+ gboolean is_wireless)
+{
+ NMSupplicantManagerPrivate *priv;
+ NMSupplicantInterface *iface = NULL;
+ gboolean start_now;
-/* Signals */
-enum {
- STATE, /* change in the manager's state */
- LAST_SIGNAL
-};
-static guint nm_supplicant_manager_signals[LAST_SIGNAL] = { 0 };
+ g_return_val_if_fail (NM_IS_SUPPLICANT_MANAGER (self), NULL);
+ g_return_val_if_fail (ifname != NULL, NULL);
+ priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (self);
-NMSupplicantManager *
-nm_supplicant_manager_get (void)
-{
- static NMSupplicantManager * singleton = NULL;
+ iface = g_hash_table_lookup (priv->ifaces, ifname);
+ if (!iface) {
+ /* If we're making the supplicant take a time out for a bit, don't
+ * let the supplicant interface start immediately, just let it hang
+ * around in INIT state until we're ready to talk to the supplicant
+ * again.
+ */
+ start_now = !die_count_exceeded (priv->die_count);
- if (!singleton) {
- singleton = NM_SUPPLICANT_MANAGER (g_object_new (NM_TYPE_SUPPLICANT_MANAGER, NULL));
+ nm_log_dbg (LOGD_SUPPLICANT, "(%s): creating new supplicant interface", ifname);
+ iface = nm_supplicant_interface_new (self, ifname, is_wireless, start_now);
+ if (iface)
+ g_hash_table_insert (priv->ifaces, g_strdup (ifname), iface);
} else {
- g_object_ref (singleton);
+ nm_log_dbg (LOGD_SUPPLICANT, "(%s): returning existing supplicant interface", ifname);
}
- g_assert (singleton);
- return singleton;
+ return iface;
}
-static gboolean
-poke_supplicant_cb (gpointer user_data)
+void
+nm_supplicant_manager_iface_release (NMSupplicantManager *self,
+ NMSupplicantInterface *iface)
{
- NMSupplicantManager *self = NM_SUPPLICANT_MANAGER (user_data);
- NMSupplicantManagerPrivate *priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (self);
- DBusGConnection *g_connection;
- DBusGProxy *proxy;
- const char *tmp = "ignoreme";
-
- g_connection = nm_dbus_manager_get_connection (priv->dbus_mgr);
- proxy = dbus_g_proxy_new_for_name (g_connection,
- WPAS_DBUS_SERVICE,
- WPAS_DBUS_PATH,
- WPAS_DBUS_INTERFACE);
- if (!proxy) {
- nm_log_warn (LOGD_SUPPLICANT, "Error: could not init wpa_supplicant proxy");
- goto out;
- }
+ NMSupplicantManagerPrivate *priv;
+ const char *ifname, *op;
- nm_log_info (LOGD_SUPPLICANT, "Trying to start the supplicant...");
- dbus_g_proxy_call_no_reply (proxy, "getInterface", G_TYPE_STRING, tmp, G_TYPE_INVALID);
- g_object_unref (proxy);
+ g_return_if_fail (NM_IS_SUPPLICANT_MANAGER (self));
+ g_return_if_fail (NM_IS_SUPPLICANT_INTERFACE (iface));
-out:
- /* Reschedule the poke */
- priv->poke_id = g_timeout_add_seconds (SUPPLICANT_POKE_INTERVAL,
- poke_supplicant_cb,
- (gpointer) self);
+ ifname = nm_supplicant_interface_get_ifname (iface);
+ g_assert (ifname);
- return FALSE;
-}
+ priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (self);
-static void
-nm_supplicant_manager_init (NMSupplicantManager * self)
-{
- NMSupplicantManagerPrivate *priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (self);
- gboolean running;
+ g_return_if_fail (g_hash_table_lookup (priv->ifaces, ifname) == iface);
- priv->dispose_has_run = FALSE;
- priv->state = NM_SUPPLICANT_MANAGER_STATE_DOWN;
- priv->dbus_mgr = nm_dbus_manager_get ();
- priv->poke_id = 0;
+ /* Ask wpa_supplicant to remove this interface */
+ op = nm_supplicant_interface_get_object_path (iface);
+ if (priv->running && priv->proxy && op) {
+ dbus_g_proxy_call_no_reply (priv->proxy, "RemoveInterface",
+ DBUS_TYPE_G_OBJECT_PATH, op,
+ G_TYPE_INVALID);
+ }
- running = nm_supplicant_manager_startup (self);
+ g_hash_table_remove (priv->ifaces, ifname);
+}
- g_signal_connect (priv->dbus_mgr,
- "name-owner-changed",
- G_CALLBACK (nm_supplicant_manager_name_owner_changed),
- self);
+gboolean
+nm_supplicant_manager_available (NMSupplicantManager *self)
+{
+ g_return_val_if_fail (self != NULL, FALSE);
+ g_return_val_if_fail (NM_IS_SUPPLICANT_MANAGER (self), FALSE);
- if (!running) {
- /* Try to activate the supplicant */
- priv->poke_id = g_idle_add (poke_supplicant_cb, (gpointer) self);
- }
+ if (die_count_exceeded (NM_SUPPLICANT_MANAGER_GET_PRIVATE (self)->die_count))
+ return FALSE;
+ return NM_SUPPLICANT_MANAGER_GET_PRIVATE (self)->running;
}
static void
-nm_supplicant_manager_dispose (GObject *object)
+set_running (NMSupplicantManager *self, gboolean now_running)
{
- NMSupplicantManagerPrivate *priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (object);
-
- if (priv->dispose_has_run) {
- G_OBJECT_CLASS (nm_supplicant_manager_parent_class)->dispose (object);
- return;
- }
-
- priv->dispose_has_run = TRUE;
-
- if (priv->poke_id) {
- g_source_remove (priv->poke_id);
- priv->poke_id = 0;
- }
-
- if (priv->dbus_mgr) {
- g_object_unref (G_OBJECT (priv->dbus_mgr));
- priv->dbus_mgr = NULL;
- }
+ NMSupplicantManagerPrivate *priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (self);
+ gboolean old_available = nm_supplicant_manager_available (self);
- /* Chain up to the parent class */
- G_OBJECT_CLASS (nm_supplicant_manager_parent_class)->dispose (object);
+ priv->running = now_running;
+ if (old_available != nm_supplicant_manager_available (self))
+ g_object_notify (G_OBJECT (self), NM_SUPPLICANT_MANAGER_AVAILABLE);
}
static void
-nm_supplicant_manager_class_init (NMSupplicantManagerClass *klass)
+set_die_count (NMSupplicantManager *self, guint new_die_count)
{
- GObjectClass * object_class = G_OBJECT_CLASS (klass);
+ NMSupplicantManagerPrivate *priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (self);
+ gboolean old_available = nm_supplicant_manager_available (self);
- g_type_class_add_private (object_class, sizeof (NMSupplicantManagerPrivate));
+ priv->die_count = new_die_count;
+ if (old_available != nm_supplicant_manager_available (self))
+ g_object_notify (G_OBJECT (self), NM_SUPPLICANT_MANAGER_AVAILABLE);
+}
- object_class->dispose = nm_supplicant_manager_dispose;
-
- /* Signals */
- nm_supplicant_manager_signals[STATE] =
- g_signal_new ("state",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (NMSupplicantManagerClass, state),
- NULL, NULL,
- _nm_marshal_VOID__UINT_UINT,
- G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT);
+static gboolean
+wpas_die_count_reset_cb (gpointer user_data)
+{
+ NMSupplicantManager *self = NM_SUPPLICANT_MANAGER (user_data);
+ NMSupplicantManagerPrivate *priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (self);
+
+ /* Reset the die count back to zero, which allows use of the supplicant again */
+ priv->die_count_reset_id = 0;
+ set_die_count (self, 0);
+ nm_log_info (LOGD_SUPPLICANT, "wpa_supplicant die count reset");
+ return FALSE;
}
static void
-nm_supplicant_manager_name_owner_changed (NMDBusManager *dbus_mgr,
- const char *name,
- const char *old_owner,
- const char *new_owner,
- gpointer user_data)
+name_owner_changed (NMDBusManager *dbus_mgr,
+ const char *name,
+ const char *old_owner,
+ const char *new_owner,
+ gpointer user_data)
{
- NMSupplicantManager * self = (NMSupplicantManager *) user_data;
+ NMSupplicantManager *self = NM_SUPPLICANT_MANAGER (user_data);
NMSupplicantManagerPrivate *priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (self);
gboolean old_owner_good = (old_owner && strlen (old_owner));
gboolean new_owner_good = (new_owner && strlen (new_owner));
- /* Can't handle the signal if its not from the supplicant service */
+ /* We only care about the supplicant here */
if (strcmp (WPAS_DBUS_SERVICE, name) != 0)
return;
if (!old_owner_good && new_owner_good) {
- gboolean running;
-
- running = nm_supplicant_manager_startup (self);
-
- if (running && priv->poke_id) {
- g_source_remove (priv->poke_id);
- priv->poke_id = 0;
- }
+ nm_log_info (LOGD_SUPPLICANT, "wpa_supplicant started");
+ set_running (self, TRUE);
} else if (old_owner_good && !new_owner_good) {
- nm_supplicant_manager_set_state (self, NM_SUPPLICANT_MANAGER_STATE_DOWN);
+ nm_log_info (LOGD_SUPPLICANT, "wpa_supplicant stopped");
- if (priv->poke_id)
- g_source_remove (priv->poke_id);
-
- /* Poke the supplicant so that it gets activated by dbus system bus
- * activation.
+ /* Reschedule the die count reset timeout. Every time the supplicant
+ * dies we wait 10 seconds before resetting the counter. If the
+ * supplicant died more than twice before the timer is reset, then
+ * we don't try to talk to the supplicant for a while.
*/
- priv->poke_id = g_idle_add (poke_supplicant_cb, (gpointer) self);
+ if (priv->die_count_reset_id)
+ g_source_remove (priv->die_count_reset_id);
+ priv->die_count_reset_id = g_timeout_add_seconds (10, wpas_die_count_reset_cb, self);
+ set_die_count (self, priv->die_count + 1);
+
+ if (die_count_exceeded (priv->die_count)) {
+ nm_log_info (LOGD_SUPPLICANT,
+ "wpa_supplicant die count %d; ignoring for 10 seconds",
+ priv->die_count);
+ }
+
+ set_running (self, FALSE);
}
}
+/*******************************************************************/
-guint32
-nm_supplicant_manager_get_state (NMSupplicantManager * self)
+NMSupplicantManager *
+nm_supplicant_manager_get (void)
{
- g_return_val_if_fail (NM_IS_SUPPLICANT_MANAGER (self), FALSE);
+ static NMSupplicantManager *singleton = NULL;
- return NM_SUPPLICANT_MANAGER_GET_PRIVATE (self)->state;
+ if (!singleton)
+ singleton = NM_SUPPLICANT_MANAGER (g_object_new (NM_TYPE_SUPPLICANT_MANAGER, NULL));
+ else
+ g_object_ref (singleton);
+
+ g_assert (singleton);
+ return singleton;
}
static void
-nm_supplicant_manager_set_state (NMSupplicantManager * self, guint32 new_state)
+nm_supplicant_manager_init (NMSupplicantManager * self)
{
NMSupplicantManagerPrivate *priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (self);
- guint32 old_state;
-
- if (new_state == priv->state)
- return;
+ DBusGConnection *bus;
- old_state = priv->state;
- priv->state = new_state;
- g_signal_emit (self,
- nm_supplicant_manager_signals[STATE],
- 0,
- priv->state,
- old_state);
+ priv->dbus_mgr = nm_dbus_manager_get ();
+ priv->name_owner_id = g_signal_connect (priv->dbus_mgr,
+ "name-owner-changed",
+ G_CALLBACK (name_owner_changed),
+ self);
+ priv->running = nm_dbus_manager_name_has_owner (priv->dbus_mgr, WPAS_DBUS_SERVICE);
+
+ bus = nm_dbus_manager_get_connection (priv->dbus_mgr);
+ priv->proxy = dbus_g_proxy_new_for_name (bus,
+ WPAS_DBUS_SERVICE,
+ WPAS_DBUS_PATH,
+ WPAS_DBUS_INTERFACE);
+
+ priv->ifaces = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
}
-static gboolean
-nm_supplicant_manager_startup (NMSupplicantManager * self)
+static void
+set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
{
- gboolean running;
-
- /* FIXME: convert to pending call */
- running = nm_dbus_manager_name_has_owner (NM_SUPPLICANT_MANAGER_GET_PRIVATE (self)->dbus_mgr,
- WPAS_DBUS_SERVICE);
- if (running)
- nm_supplicant_manager_set_state (self, NM_SUPPLICANT_MANAGER_STATE_IDLE);
-
- return running;
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
-NMSupplicantInterface *
-nm_supplicant_manager_get_iface (NMSupplicantManager * self,
- const char *ifname,
- gboolean is_wireless)
+static void
+get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
{
- NMSupplicantManagerPrivate *priv;
- NMSupplicantInterface * iface = NULL;
- GSList * elt;
+ switch (prop_id) {
+ case PROP_AVAILABLE:
+ g_value_set_boolean (value, nm_supplicant_manager_available (NM_SUPPLICANT_MANAGER (object)));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
- g_return_val_if_fail (NM_IS_SUPPLICANT_MANAGER (self), NULL);
- g_return_val_if_fail (ifname != NULL, NULL);
+static void
+dispose (GObject *object)
+{
+ NMSupplicantManagerPrivate *priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (object);
- priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (self);
+ if (priv->disposed)
+ goto out;
+ priv->disposed = TRUE;
- /* Ensure we don't already have this interface */
- for (elt = priv->ifaces; elt; elt = g_slist_next (elt)) {
- NMSupplicantInterface * if_tmp = (NMSupplicantInterface *) elt->data;
+ if (priv->die_count_reset_id)
+ g_source_remove (priv->die_count_reset_id);
- if (!strcmp (ifname, nm_supplicant_interface_get_device (if_tmp))) {
- iface = if_tmp;
- break;
- }
+ if (priv->dbus_mgr) {
+ if (priv->name_owner_id)
+ g_signal_handler_disconnect (priv->dbus_mgr, priv->name_owner_id);
+ g_object_unref (G_OBJECT (priv->dbus_mgr));
}
- if (!iface) {
- nm_log_dbg (LOGD_SUPPLICANT, "(%s): creating new supplicant interface", ifname);
- iface = nm_supplicant_interface_new (self, ifname, is_wireless);
- if (iface)
- priv->ifaces = g_slist_append (priv->ifaces, iface);
- } else {
- nm_log_dbg (LOGD_SUPPLICANT, "(%s): returning existing supplicant interface", ifname);
- }
+ g_hash_table_destroy (priv->ifaces);
- return iface;
+ if (priv->proxy)
+ g_object_unref (priv->proxy);
+
+out:
+ /* Chain up to the parent class */
+ G_OBJECT_CLASS (nm_supplicant_manager_parent_class)->dispose (object);
}
-void
-nm_supplicant_manager_release_iface (NMSupplicantManager * self,
- NMSupplicantInterface * iface)
+static void
+nm_supplicant_manager_class_init (NMSupplicantManagerClass *klass)
{
- NMSupplicantManagerPrivate *priv;
- GSList * elt;
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
- g_return_if_fail (NM_IS_SUPPLICANT_MANAGER (self));
- g_return_if_fail (NM_IS_SUPPLICANT_INTERFACE (iface));
-
- priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (self);
+ g_type_class_add_private (object_class, sizeof (NMSupplicantManagerPrivate));
- for (elt = priv->ifaces; elt; elt = g_slist_next (elt)) {
- NMSupplicantInterface * if_tmp = (NMSupplicantInterface *) elt->data;
-
- if (if_tmp == iface) {
- /* Remove the iface from the supplicant manager's list and
- * dereference to match additional reference in get_iface.
- */
- priv->ifaces = g_slist_remove_link (priv->ifaces, elt);
- g_slist_free_1 (elt);
- g_object_unref (iface);
- break;
- }
- }
-}
+ object_class->get_property = get_property;
+ object_class->set_property = set_property;
+ object_class->dispose = dispose;
-const char *
-nm_supplicant_manager_state_to_string (guint32 state)
-{
- switch (state) {
- case NM_SUPPLICANT_MANAGER_STATE_DOWN:
- return "down";
- case NM_SUPPLICANT_MANAGER_STATE_IDLE:
- return "idle";
- default:
- break;
- }
- return "unknown";
+ g_object_class_install_property (object_class, PROP_AVAILABLE,
+ g_param_spec_boolean (NM_SUPPLICANT_MANAGER_AVAILABLE,
+ "Available",
+ "Available",
+ FALSE,
+ G_PARAM_READABLE));
}
-
diff --git a/src/supplicant-manager/nm-supplicant-manager.h b/src/supplicant-manager/nm-supplicant-manager.h
index fef2a77444..9e2f3b21b1 100644
--- a/src/supplicant-manager/nm-supplicant-manager.h
+++ b/src/supplicant-manager/nm-supplicant-manager.h
@@ -26,30 +26,13 @@
#include "nm-supplicant-types.h"
#include "nm-device.h"
-#define WPAS_DBUS_SERVICE "fi.epitest.hostap.WPASupplicant"
-#define WPAS_DBUS_PATH "/fi/epitest/hostap/WPASupplicant"
-#define WPAS_DBUS_INTERFACE "fi.epitest.hostap.WPASupplicant"
+#define WPAS_DBUS_SERVICE "fi.w1.wpa_supplicant1"
+#define WPAS_DBUS_PATH "/fi/w1/wpa_supplicant1"
+#define WPAS_DBUS_INTERFACE "fi.w1.wpa_supplicant1"
G_BEGIN_DECLS
-/*
- * Supplicant manager states
- * Either state may transition to the other state at any time.
- *
- * DOWN: supplicant manager has been created, but cannot be used; the supplicant
- * is either not running or has not yet been fully initialized.
- * IDLE: supplicant manager is ready for use
- *
- * Note: LAST is an invalid state and only used for boundary checking.
- */
-enum {
- NM_SUPPLICANT_MANAGER_STATE_DOWN = 0,
- NM_SUPPLICANT_MANAGER_STATE_IDLE,
- NM_SUPPLICANT_MANAGER_STATE_LAST
-};
-
-
#define NM_TYPE_SUPPLICANT_MANAGER (nm_supplicant_manager_get_type ())
#define NM_SUPPLICANT_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SUPPLICANT_MANAGER, NMSupplicantManager))
#define NM_SUPPLICANT_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SUPPLICANT_MANAGER, NMSupplicantManagerClass))
@@ -57,6 +40,8 @@ enum {
#define NM_IS_SUPPLICANT_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SUPPLICANT_MANAGER))
#define NM_SUPPLICANT_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SUPPLICANT_MANAGER, NMSupplicantManagerClass))
+#define NM_SUPPLICANT_MANAGER_AVAILABLE "available"
+
struct _NMSupplicantManager
{
GObject parent;
@@ -65,24 +50,19 @@ struct _NMSupplicantManager
typedef struct
{
GObjectClass parent;
-
- /* class members */
- void (* state) (NMSupplicantManager * mgr, guint32 new_state, guint32 old_state);
} NMSupplicantManagerClass;
GType nm_supplicant_manager_get_type (void);
-NMSupplicantManager * nm_supplicant_manager_get (void);
-
-guint32 nm_supplicant_manager_get_state (NMSupplicantManager * mgr);
+NMSupplicantManager *nm_supplicant_manager_get (void);
-NMSupplicantInterface * nm_supplicant_manager_get_iface (NMSupplicantManager * mgr,
- const char *ifname,
- gboolean is_wireless);
+NMSupplicantInterface *nm_supplicant_manager_iface_get (NMSupplicantManager *mgr,
+ const char *ifname,
+ gboolean is_wireless);
-void nm_supplicant_manager_release_iface (NMSupplicantManager * mgr,
- NMSupplicantInterface * iface);
+void nm_supplicant_manager_iface_release (NMSupplicantManager *mgr,
+ NMSupplicantInterface *iface);
-const char *nm_supplicant_manager_state_to_string (guint32 state);
+gboolean nm_supplicant_manager_available (NMSupplicantManager *mgr);
#endif /* NM_SUPPLICANT_MANAGER_H */
diff --git a/src/supplicant-manager/nm-supplicant-settings-verify.c b/src/supplicant-manager/nm-supplicant-settings-verify.c
index 283346559b..c65af4dee5 100644
--- a/src/supplicant-manager/nm-supplicant-settings-verify.c
+++ b/src/supplicant-manager/nm-supplicant-settings-verify.c
@@ -123,6 +123,7 @@ static const struct Opt opt_table[] = {
{ "engine_id", TYPE_BYTES, 0, 0, FALSE, NULL },
{ "key_id", TYPE_BYTES, 0, 0, FALSE, NULL },
{ "fragment_size", TYPE_INT, 1, 2000, FALSE, NULL },
+ { "proactive_key_caching", TYPE_INT, 0, 1, FALSE, NULL },
};
diff --git a/src/system-settings/Makefile.am b/src/system-settings/Makefile.am
index 3b616b9084..0b92228f57 100644
--- a/src/system-settings/Makefile.am
+++ b/src/system-settings/Makefile.am
@@ -54,7 +54,7 @@ libsystem_settings_la_LIBADD = \
libsystem_settings_la_LDFLAGS = -rdynamic
nm-settings-system-glue.h: $(top_srcdir)/introspection/nm-settings-system.xml
- dbus-binding-tool --prefix=nm_settings_system --mode=glib-server --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_settings_system --mode=glib-server --output=$@ $<
CLEANFILES = \
$(BUILT_SOURCES)
diff --git a/src/system-settings/nm-default-wired-connection.c b/src/system-settings/nm-default-wired-connection.c
index 54e00d6273..0d19dea014 100644
--- a/src/system-settings/nm-default-wired-connection.c
+++ b/src/system-settings/nm-default-wired-connection.c
@@ -163,6 +163,7 @@ constructor (GType type,
NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
NM_SETTING_CONNECTION_UUID, uuid,
NM_SETTING_CONNECTION_READ_ONLY, priv->read_only,
+ NM_SETTING_CONNECTION_TIMESTAMP, (guint64) time (NULL),
NULL);
g_free (id);
diff --git a/src/system-settings/nm-polkit-helpers.h b/src/system-settings/nm-polkit-helpers.h
index c26fcc2c9b..a37c2eebaa 100644
--- a/src/system-settings/nm-polkit-helpers.h
+++ b/src/system-settings/nm-polkit-helpers.h
@@ -16,12 +16,13 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* (C) Copyright 2008 Novell, Inc.
- * (C) Copyright 2008 Red Hat, Inc.
+ * (C) Copyright 2008 - 2010 Red Hat, Inc.
*/
#ifndef NM_POLKIT_HELPERS_H
#define NM_POLKIT_HELPERS_H
+#include <config.h>
#include <polkit/polkit.h>
#define NM_SYSCONFIG_POLICY_ACTION_CONNECTION_MODIFY "org.freedesktop.network-manager-settings.system.modify"
@@ -29,4 +30,18 @@
#define NM_SYSCONFIG_POLICY_ACTION_WIFI_SHARE_OPEN "org.freedesktop.network-manager-settings.system.wifi.share.open"
#define NM_SYSCONFIG_POLICY_ACTION_HOSTNAME_MODIFY "org.freedesktop.network-manager-settings.system.hostname.modify"
+/* Fix for polkit 0.97 and later */
+#if !HAVE_POLKIT_AUTHORITY_GET_SYNC
+static inline PolkitAuthority *
+polkit_authority_get_sync (GCancellable *cancellable, GError **error)
+{
+ PolkitAuthority *authority;
+
+ authority = polkit_authority_get ();
+ if (!authority)
+ g_set_error (error, 0, 0, "failed to get the PolicyKit authority");
+ return authority;
+}
+#endif
+
#endif /* NM_POLKIT_HELPERS_H */
diff --git a/src/system-settings/nm-sysconfig-connection.c b/src/system-settings/nm-sysconfig-connection.c
index 09cec4000f..73906d20a7 100644
--- a/src/system-settings/nm-sysconfig-connection.c
+++ b/src/system-settings/nm-sysconfig-connection.c
@@ -16,7 +16,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* (C) Copyright 2008 Novell, Inc.
- * (C) Copyright 2008 - 2009 Red Hat, Inc.
+ * (C) Copyright 2008 - 2010 Red Hat, Inc.
*/
#include <NetworkManager.h>
@@ -209,7 +209,7 @@ get_secrets (NMSettingsConnectionInterface *connection,
setting = nm_connection_get_setting_by_name (priv->secrets, setting_name);
if (!setting) {
error = g_error_new (NM_SETTINGS_INTERFACE_ERROR,
- NM_SETTINGS_INTERFACE_ERROR_INVALID_CONNECTION,
+ NM_SETTINGS_INTERFACE_ERROR_INVALID_SETTING,
"%s.%d - Connection didn't have requested setting '%s'.",
__FILE__, __LINE__, setting_name);
(*callback) (connection, NULL, error, user_data);
@@ -612,10 +612,14 @@ static void
nm_sysconfig_connection_init (NMSysconfigConnection *self)
{
NMSysconfigConnectionPrivate *priv = NM_SYSCONFIG_CONNECTION_GET_PRIVATE (self);
+ GError *error = NULL;
- priv->authority = polkit_authority_get ();
+ priv->authority = polkit_authority_get_sync (NULL, NULL);
if (!priv->authority) {
- nm_log_err (LOGD_SYS_SET, "%s: error creating PolicyKit authority");
+ nm_log_warn (LOGD_SYS_SET, "failed to create PolicyKit authority: (%d) %s",
+ error ? error->code : -1,
+ error && error->message ? error->message : "(unknown)");
+ g_clear_error (&error);
}
}
diff --git a/src/system-settings/nm-sysconfig-settings.c b/src/system-settings/nm-sysconfig-settings.c
index 4bcfb04bc7..d929813f1b 100644
--- a/src/system-settings/nm-sysconfig-settings.c
+++ b/src/system-settings/nm-sysconfig-settings.c
@@ -259,6 +259,7 @@ get_plugin (NMSysconfigSettings *self, guint32 capability)
return NULL;
}
+/* Returns an allocated string which the caller owns and must eventually free */
char *
nm_sysconfig_settings_get_hostname (NMSysconfigSettings *self)
{
@@ -281,7 +282,7 @@ nm_sysconfig_settings_get_hostname (NMSysconfigSettings *self)
}
}
- return hostname;
+ return NULL;
}
static void
@@ -414,7 +415,7 @@ load_plugins (NMSysconfigSettings *self, const char *plugins, GError **error)
for (iter = plist; *iter; iter++) {
GModule *plugin;
char *full_name, *path;
- const char *pname = *iter;
+ const char *pname = g_strstrip (*iter);
GObject *obj;
GObject * (*factory_func) (void);
@@ -1077,6 +1078,11 @@ is_mac_auto_wired_blacklisted (NMSysconfigSettings *self, const GByteArray *mac)
for (iter = list; iter && *iter; iter++) {
struct ether_addr *candidate;
+ if (strcmp(g_strstrip(*iter), "*") == 0) {
+ found = TRUE;
+ break;
+ }
+
candidate = ether_aton (*iter);
if (candidate && !memcmp (mac->data, candidate->ether_addr_octet, ETH_ALEN)) {
found = TRUE;
@@ -1136,13 +1142,19 @@ default_wired_deleted (NMDefaultWiredConnection *wired,
g_key_file_load_from_file (config, priv->config_file, G_KEY_FILE_KEEP_COMMENTS, NULL);
list = g_key_file_get_string_list (config, "main", CONFIG_KEY_NO_AUTO_DEFAULT, &len, NULL);
- /* Traverse entire list to get count of # items */
for (iter = list; iter && *iter; iter++) {
struct ether_addr *candidate;
+ if (strcmp(g_strstrip(*iter), "*") == 0) {
+ found = TRUE;
+ break;
+ }
+
candidate = ether_aton (*iter);
- if (candidate && !memcmp (mac->data, candidate->ether_addr_octet, ETH_ALEN))
+ if (candidate && !memcmp (mac->data, candidate->ether_addr_octet, ETH_ALEN)) {
found = TRUE;
+ break;
+ }
}
/* Add this device's MAC to the list */
@@ -1505,16 +1517,21 @@ static void
nm_sysconfig_settings_init (NMSysconfigSettings *self)
{
NMSysconfigSettingsPrivate *priv = NM_SYSCONFIG_SETTINGS_GET_PRIVATE (self);
+ GError *error = NULL;
priv->connections = g_hash_table_new_full (g_direct_hash, g_direct_equal, g_object_unref, NULL);
- priv->authority = polkit_authority_get ();
+ priv->authority = polkit_authority_get_sync (NULL, &error);
if (priv->authority) {
priv->auth_changed_id = g_signal_connect (priv->authority,
"changed",
G_CALLBACK (pk_authority_changed_cb),
self);
- } else
- nm_log_warn (LOGD_SYS_SET, "failed to create PolicyKit authority.");
+ } else {
+ nm_log_warn (LOGD_SYS_SET, "failed to create PolicyKit authority: (%d) %s",
+ error ? error->code : -1,
+ error && error->message ? error->message : "(unknown)");
+ g_clear_error (&error);
+ }
}
diff --git a/src/system-settings/nm-system-config-interface.h b/src/system-settings/nm-system-config-interface.h
index c5bbaaa917..3daceb89bd 100644
--- a/src/system-settings/nm-system-config-interface.h
+++ b/src/system-settings/nm-system-config-interface.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) 2007 - 2008 Red Hat, Inc.
+ * Copyright (C) 2007 - 2010 Red Hat, Inc.
* Copyright (C) 2008 Novell, Inc.
*/
@@ -107,6 +107,12 @@ struct _NMSystemConfigInterface {
*
* Method: mac Data: device MAC address formatted with leading zeros and
* lowercase letters, like 00:0a:0b:0c:0d:0e
+ *
+ * Method: s390-subchannels Data: string of 2 or 3 s390 subchannels
+ * separated by commas (,) that identify the
+ * device, like "0.0.09a0,0.0.09a1,0.0.09a2".
+ * The string may contain only the following
+ * characters: [a-fA-F0-9,.]
*/
GSList * (*get_unmanaged_specs) (NMSystemConfigInterface *config);
diff --git a/src/tests/test-dhcp-options.c b/src/tests/test-dhcp-options.c
index dd1f914959..aa85f87e70 100644
--- a/src/tests/test-dhcp-options.c
+++ b/src/tests/test-dhcp-options.c
@@ -250,300 +250,406 @@ test_wins_options (const char *client)
g_hash_table_destroy (options);
}
-static Option classless_routes_options[] = {
- /* For dhclient */
- { "new_rfc3442_classless_static_routes", "24 192 168 10 192 168 1 1 8 10 10 17 66 41" },
- /* For dhcpcd */
- { "new_classless_static_routes", "192.168.10.0/24 192.168.1.1 10.0.0.0/8 10.17.66.41" },
- { NULL, NULL }
-};
+static void
+ip4_test_route (const char *test,
+ NMIP4Config *ip4_config,
+ guint route_num,
+ const char *expected_dest,
+ const char *expected_gw,
+ guint expected_prefix)
+{
+ NMIP4Route *route;
+ struct in_addr tmp;
+
+ route = nm_ip4_config_get_route (ip4_config, route_num);
+ ASSERT (inet_pton (AF_INET, expected_dest, &tmp) > 0,
+ test, "couldn't convert expected route destination #1");
+ ASSERT (nm_ip4_route_get_dest (route) == tmp.s_addr,
+ test, "unexpected route %d destination", route_num + 1);
+
+ ASSERT (inet_pton (AF_INET, expected_gw, &tmp) > 0,
+ test, "couldn't convert expected route next hop %d",
+ route_num + 1);
+ ASSERT (nm_ip4_route_get_next_hop (route) == tmp.s_addr,
+ test, "unexpected route %d next hop", route_num + 1);
+
+ ASSERT (nm_ip4_route_get_prefix (route) == expected_prefix,
+ test, "unexpected route %d prefix", route_num + 1);
+ ASSERT (nm_ip4_route_get_metric (route) == 0,
+ test, "unexpected route %d metric", route_num + 1);
+}
static void
-test_classless_static_routes (const char *client)
+ip4_test_gateway (const char *test,
+ NMIP4Config *ip4_config,
+ const char *expected_gw)
+{
+ NMIP4Address *addr;
+ struct in_addr tmp;
+
+ ASSERT (nm_ip4_config_get_num_addresses (ip4_config) == 1,
+ test, "unexpected number of IP addresses");
+ addr = nm_ip4_config_get_address (ip4_config, 0);
+ ASSERT (inet_pton (AF_INET, expected_gw, &tmp) > 0,
+ test, "couldn't convert expected IP gateway");
+ ASSERT (nm_ip4_address_get_gateway (addr) == tmp.s_addr,
+ test, "unexpected IP gateway");
+}
+
+static void
+test_classless_static_routes_1 (const char *client)
{
GHashTable *options;
NMIP4Config *ip4_config;
- NMIP4Route *route;
- struct in_addr tmp;
const char *expected_route1_dest = "192.168.10.0";
const char *expected_route1_gw = "192.168.1.1";
const char *expected_route2_dest = "10.0.0.0";
const char *expected_route2_gw = "10.17.66.41";
+ static Option data[] = {
+ /* dhclient custom format */
+ { "new_rfc3442_classless_static_routes", "24 192 168 10 192 168 1 1 8 10 10 17 66 41" },
+ { NULL, NULL }
+ };
options = fill_table (generic_options, NULL);
- options = fill_table (classless_routes_options, options);
+ options = fill_table (data, options);
ip4_config = nm_dhcp_manager_test_ip4_options_to_config (client, "eth0", options, "rebind");
ASSERT (ip4_config != NULL,
- "dhcp-rfc3442", "failed to parse DHCP4 options");
+ "dhcp-classless-1", "failed to parse DHCP4 options");
/* IP4 routes */
ASSERT (nm_ip4_config_get_num_routes (ip4_config) == 2,
- "dhcp-rfc3442", "unexpected number of IP routes");
+ "dhcp-classless-1", "unexpected number of IP routes");
+ ip4_test_route ("dhcp-classless-1", ip4_config, 0,
+ expected_route1_dest, expected_route1_gw, 24);
+ ip4_test_route ("dhcp-classless-1", ip4_config, 1,
+ expected_route2_dest, expected_route2_gw, 8);
- /* Route #1 */
- route = nm_ip4_config_get_route (ip4_config, 0);
- ASSERT (inet_pton (AF_INET, expected_route1_dest, &tmp) > 0,
- "dhcp-rfc3442", "couldn't convert expected route destination #1");
- ASSERT (nm_ip4_route_get_dest (route) == tmp.s_addr,
- "dhcp-rfc3442", "unexpected route #1 destination");
-
- ASSERT (inet_pton (AF_INET, expected_route1_gw, &tmp) > 0,
- "dhcp-rfc3442", "couldn't convert expected route next hop #1");
- ASSERT (nm_ip4_route_get_next_hop (route) == tmp.s_addr,
- "dhcp-rfc3442", "unexpected route #1 next hop");
+ g_hash_table_destroy (options);
+}
- ASSERT (nm_ip4_route_get_prefix (route) == 24,
- "dhcp-rfc3442", "unexpected route #1 prefix");
- ASSERT (nm_ip4_route_get_metric (route) == 0,
- "dhcp-rfc3442", "unexpected route #1 metric");
+static void
+test_classless_static_routes_2 (const char *client)
+{
+ GHashTable *options;
+ NMIP4Config *ip4_config;
+ const char *expected_route1_dest = "192.168.10.0";
+ const char *expected_route1_gw = "192.168.1.1";
+ const char *expected_route2_dest = "10.0.0.0";
+ const char *expected_route2_gw = "10.17.66.41";
+ static Option data[] = {
+ /* dhcpcd format */
+ { "new_classless_static_routes", "192.168.10.0/24 192.168.1.1 10.0.0.0/8 10.17.66.41" },
+ { NULL, NULL }
+ };
- /* Route #2 */
- route = nm_ip4_config_get_route (ip4_config, 1);
- ASSERT (inet_pton (AF_INET, expected_route2_dest, &tmp) > 0,
- "dhcp-rfc3442", "couldn't convert expected route destination #2");
- ASSERT (nm_ip4_route_get_dest (route) == tmp.s_addr,
- "dhcp-rfc3442", "unexpected route #2 destination");
+ options = fill_table (generic_options, NULL);
+ options = fill_table (data, options);
- ASSERT (inet_pton (AF_INET, expected_route2_gw, &tmp) > 0,
- "dhcp-rfc3442", "couldn't convert expected route next hop #2");
- ASSERT (nm_ip4_route_get_next_hop (route) == tmp.s_addr,
- "dhcp-rfc3442", "unexpected route #2 next hop");
+ ip4_config = nm_dhcp_manager_test_ip4_options_to_config (client, "eth0", options, "rebind");
+ ASSERT (ip4_config != NULL,
+ "dhcp-classless-2", "failed to parse DHCP4 options");
- ASSERT (nm_ip4_route_get_prefix (route) == 8,
- "dhcp-rfc3442", "unexpected route #2 prefix");
- ASSERT (nm_ip4_route_get_metric (route) == 0,
- "dhcp-rfc3442", "unexpected route #2 metric");
+ /* IP4 routes */
+ ASSERT (nm_ip4_config_get_num_routes (ip4_config) == 2,
+ "dhcp-classless-2", "unexpected number of IP routes");
+ ip4_test_route ("dhcp-classless-2", ip4_config, 0,
+ expected_route1_dest, expected_route1_gw, 24);
+ ip4_test_route ("dhcp-classless-2", ip4_config, 1,
+ expected_route2_dest, expected_route2_gw, 8);
g_hash_table_destroy (options);
}
-static Option invalid_classless_routes1[] = {
- /* For dhclient */
- { "new_rfc3442_classless_static_routes", "24 192 168 10 192 168 1 1 45 10 17 66 41" },
- /* For dhcpcd */
- { "new_classless_static_routes", "192.168.10.0/24 192.168.1.1 10.0.adfadf/44 10.17.66.41" },
- { NULL, NULL }
-};
+static void
+test_fedora_dhclient_classless_static_routes (const char *client)
+{
+ GHashTable *options;
+ NMIP4Config *ip4_config;
+ const char *expected_route1_dest = "129.210.177.128";
+ const char *expected_route1_gw = "192.168.0.113";
+ const char *expected_route2_dest = "2.0.0.0";
+ const char *expected_route2_gw = "10.34.255.6";
+ const char *expected_gateway = "192.168.0.113";
+ static Option data[] = {
+ /* Fedora dhclient format */
+ { "new_classless_static_routes", "0 192.168.0.113 25.129.210.177.132 192.168.0.113 7.2 10.34.255.6" },
+ { NULL, NULL }
+ };
+
+ options = fill_table (generic_options, NULL);
+ options = fill_table (data, options);
+
+ ip4_config = nm_dhcp_manager_test_ip4_options_to_config (client, "eth0", options, "rebind");
+ ASSERT (ip4_config != NULL,
+ "dhcp-fedora-dhclient-classless", "failed to parse DHCP4 options");
+
+ /* IP4 routes */
+ ASSERT (nm_ip4_config_get_num_routes (ip4_config) == 2,
+ "dhcp-fedora-dhclient-classless", "unexpected number of IP routes");
+ ip4_test_route ("dhcp-fedora-dhclient-classless", ip4_config, 0,
+ expected_route1_dest, expected_route1_gw, 25);
+ ip4_test_route ("dhcp-fedora-dhclient-classless", ip4_config, 1,
+ expected_route2_dest, expected_route2_gw, 7);
+
+ /* Gateway */
+ ip4_test_gateway ("dhcp-fedora-dhclient-classless", ip4_config, expected_gateway);
+
+ g_hash_table_destroy (options);
+}
static void
-test_invalid_classless_routes1 (const char *client)
+test_dhclient_invalid_classless_routes_1 (const char *client)
{
GHashTable *options;
NMIP4Config *ip4_config;
- NMIP4Route *route;
- struct in_addr tmp;
const char *expected_route1_dest = "192.168.10.0";
const char *expected_route1_gw = "192.168.1.1";
+ static Option data[] = {
+ /* dhclient format */
+ { "new_rfc3442_classless_static_routes", "24 192 168 10 192 168 1 1 45 10 17 66 41" },
+ { NULL, NULL }
+ };
options = fill_table (generic_options, NULL);
- options = fill_table (invalid_classless_routes1, options);
+ options = fill_table (data, options);
ip4_config = nm_dhcp_manager_test_ip4_options_to_config (client, "eth0", options, "rebind");
ASSERT (ip4_config != NULL,
- "dhcp-rfc3442-invalid-1", "failed to parse DHCP4 options");
+ "dhcp-dhclient-classless-invalid-1", "failed to parse DHCP4 options");
/* IP4 routes */
ASSERT (nm_ip4_config_get_num_routes (ip4_config) == 1,
- "dhcp-rfc3442-invalid-1", "unexpected number of IP routes");
+ "dhcp-dhclient-classless-invalid-1", "unexpected number of IP routes");
- /* Route #1 */
- route = nm_ip4_config_get_route (ip4_config, 0);
- ASSERT (inet_pton (AF_INET, expected_route1_dest, &tmp) > 0,
- "dhcp-rfc3442-invalid-1", "couldn't convert expected route destination #1");
- ASSERT (nm_ip4_route_get_dest (route) == tmp.s_addr,
- "dhcp-rfc3442-invalid-1", "unexpected route #1 destination");
+ ip4_test_route ("dhcp-dhclient-classless-invalid-1", ip4_config, 0,
+ expected_route1_dest, expected_route1_gw, 24);
- ASSERT (inet_pton (AF_INET, expected_route1_gw, &tmp) > 0,
- "dhcp-rfc3442-invalid-1", "couldn't convert expected route next hop #1");
- ASSERT (nm_ip4_route_get_next_hop (route) == tmp.s_addr,
- "dhcp-rfc3442-invalid-1", "unexpected route #1 next hop");
+ g_hash_table_destroy (options);
+}
- ASSERT (nm_ip4_route_get_prefix (route) == 24,
- "dhcp-rfc3442-invalid-1", "unexpected route #1 prefix");
- ASSERT (nm_ip4_route_get_metric (route) == 0,
- "dhcp-rfc3442-invalid-1", "unexpected route #1 metric");
+static void
+test_dhcpcd_invalid_classless_routes_1 (const char *client)
+{
+ GHashTable *options;
+ NMIP4Config *ip4_config;
+ const char *expected_route1_dest = "10.1.1.5";
+ const char *expected_route1_gw = "10.1.1.1";
+ const char *expected_route2_dest = "100.99.88.56";
+ const char *expected_route2_gw = "10.1.1.1";
+ static Option data[] = {
+ /* dhcpcd format */
+ { "new_classless_static_routes", "192.168.10.0/24 192.168.1.1 10.0.adfadf/44 10.17.66.41" },
+ { NULL, NULL }
+ };
+
+ options = fill_table (generic_options, NULL);
+ options = fill_table (data, options);
+
+ ip4_config = nm_dhcp_manager_test_ip4_options_to_config (client, "eth0", options, "rebind");
+ ASSERT (ip4_config != NULL,
+ "dhcp-dhcpcd-classless-invalid-1", "failed to parse DHCP4 options");
+
+ /* Test falling back to old-style static routes if the classless static
+ * routes are invalid.
+ */
+ ASSERT (nm_ip4_config_get_num_routes (ip4_config) == 2,
+ "dhcp-dhcpcdp-classless-invalid-1", "unexpected number of routes");
+ ip4_test_route ("dhcp-dhcpcdp-classless-invalid-1", ip4_config, 0,
+ expected_route1_dest, expected_route1_gw, 32);
+ ip4_test_route ("dhcp-dhcpcdp-classless-invalid-1", ip4_config, 1,
+ expected_route2_dest, expected_route2_gw, 32);
g_hash_table_destroy (options);
}
-static Option invalid_classless_routes2[] = {
- /* For dhclient */
- { "new_rfc3442_classless_static_routes", "45 10 17 66 41 24 192 168 10 192 168 1 1" },
- /* For dhcpcd */
- { "new_classless_static_routes", "10.0.adfadf/44 10.17.66.41 192.168.10.0/24 192.168.1.1" },
- { NULL, NULL }
-};
-
static void
-test_invalid_classless_routes2 (const char *client)
+test_dhclient_invalid_classless_routes_2 (const char *client)
{
GHashTable *options;
NMIP4Config *ip4_config;
- NMIP4Route *route;
- struct in_addr tmp;
const char *expected_route1_dest = "10.1.1.5";
const char *expected_route1_gw = "10.1.1.1";
const char *expected_route2_dest = "100.99.88.56";
const char *expected_route2_gw = "10.1.1.1";
+ static Option data[] = {
+ { "new_rfc3442_classless_static_routes", "45 10 17 66 41 24 192 168 10 192 168 1 1" },
+ { NULL, NULL }
+ };
options = fill_table (generic_options, NULL);
- options = fill_table (invalid_classless_routes2, options);
+ options = fill_table (data, options);
ip4_config = nm_dhcp_manager_test_ip4_options_to_config (client, "eth0", options, "rebind");
ASSERT (ip4_config != NULL,
- "dhcp-rfc3442-invalid-2", "failed to parse DHCP4 options");
+ "dhcp-dhclient-classless-invalid-2", "failed to parse DHCP4 options");
/* Test falling back to old-style static routes if the classless static
* routes are invalid.
*/
-
- /* Routes */
ASSERT (nm_ip4_config_get_num_routes (ip4_config) == 2,
- "dhcp-rfc3442-invalid-2", "unexpected number of routes");
+ "dhcp-dhclient-classless-invalid-2", "unexpected number of routes");
+ ip4_test_route ("dhcp-dhclient-classless-invalid-2", ip4_config, 0,
+ expected_route1_dest, expected_route1_gw, 32);
+ ip4_test_route ("dhcp-dhclient-classless-invalid-2", ip4_config, 1,
+ expected_route2_dest, expected_route2_gw, 32);
- /* Route #1 */
- route = nm_ip4_config_get_route (ip4_config, 0);
- ASSERT (inet_pton (AF_INET, expected_route1_dest, &tmp) > 0,
- "dhcp-rfc3442-invalid-2", "couldn't convert expected route destination #1");
- ASSERT (nm_ip4_route_get_dest (route) == tmp.s_addr,
- "dhcp-rfc3442-invalid-2", "unexpected route #1 destination");
+ g_hash_table_destroy (options);
+}
- ASSERT (inet_pton (AF_INET, expected_route1_gw, &tmp) > 0,
- "dhcp-rfc3442-invalid-2", "couldn't convert expected route next hop #1");
- ASSERT (nm_ip4_route_get_next_hop (route) == tmp.s_addr,
- "dhcp-rfc3442-invalid-2", "unexpected route #1 next hop");
+static void
+test_dhcpcd_invalid_classless_routes_2 (const char *client)
+{
+ GHashTable *options;
+ NMIP4Config *ip4_config;
+ const char *expected_route1_dest = "10.1.1.5";
+ const char *expected_route1_gw = "10.1.1.1";
+ const char *expected_route2_dest = "100.99.88.56";
+ const char *expected_route2_gw = "10.1.1.1";
+ static Option data[] = {
+ { "new_classless_static_routes", "10.0.adfadf/44 10.17.66.41 192.168.10.0/24 192.168.1.1" },
+ { NULL, NULL }
+ };
- ASSERT (nm_ip4_route_get_prefix (route) == 32,
- "dhcp-rfc3442-invalid-2", "unexpected route #1 prefix");
- ASSERT (nm_ip4_route_get_metric (route) == 0,
- "dhcp-rfc3442-invalid-2", "unexpected route #1 metric");
+ options = fill_table (generic_options, NULL);
+ options = fill_table (data, options);
- /* Route #2 */
- route = nm_ip4_config_get_route (ip4_config, 1);
- ASSERT (inet_pton (AF_INET, expected_route2_dest, &tmp) > 0,
- "dhcp-rfc3442-invalid-2", "couldn't convert expected route destination #2");
- ASSERT (nm_ip4_route_get_dest (route) == tmp.s_addr,
- "dhcp-rfc3442-invalid-2", "unexpected route #2 destination");
+ ip4_config = nm_dhcp_manager_test_ip4_options_to_config (client, "eth0", options, "rebind");
+ ASSERT (ip4_config != NULL,
+ "dhcp-dhcpcd-classless-invalid-2", "failed to parse DHCP4 options");
- ASSERT (inet_pton (AF_INET, expected_route2_gw, &tmp) > 0,
- "dhcp-rfc3442-invalid-2", "couldn't convert expected route next hop #2");
- ASSERT (nm_ip4_route_get_next_hop (route) == tmp.s_addr,
- "dhcp-rfc3442-invalid-2", "unexpected route #2 next hop");
+ /* Test falling back to old-style static routes if the classless static
+ * routes are invalid.
+ */
- ASSERT (nm_ip4_route_get_prefix (route) == 32,
- "dhcp-rfc3442-invalid-2", "unexpected route #2 prefix");
- ASSERT (nm_ip4_route_get_metric (route) == 0,
- "dhcp-rfc3442-invalid-2", "unexpected route #2 metric");
+ /* Routes */
+ ASSERT (nm_ip4_config_get_num_routes (ip4_config) == 2,
+ "dhcp-dhcpcd-classless-invalid-2", "unexpected number of routes");
+ ip4_test_route ("dhcp-dhcpcd-classless-invalid-2", ip4_config, 0,
+ expected_route1_dest, expected_route1_gw, 32);
+ ip4_test_route ("dhcp-dhcpcd-classless-invalid-2", ip4_config, 1,
+ expected_route2_dest, expected_route2_gw, 32);
g_hash_table_destroy (options);
}
-static Option invalid_classless_routes3[] = {
- /* For dhclient */
- { "new_rfc3442_classless_static_routes", "24 192 168 10 192 168 1 1 32 128 10 17 66 41" },
- /* For dhcpcd */
- { "new_classless_static_routes", "192.168.10.0/24 192.168.1.1 128/32 10.17.66.41" },
- { NULL, NULL }
-};
-
static void
-test_invalid_classless_routes3 (const char *client)
+test_dhclient_invalid_classless_routes_3 (const char *client)
{
GHashTable *options;
NMIP4Config *ip4_config;
- NMIP4Route *route;
- struct in_addr tmp;
const char *expected_route1_dest = "192.168.10.0";
const char *expected_route1_gw = "192.168.1.1";
+ static Option data[] = {
+ { "new_rfc3442_classless_static_routes", "24 192 168 10 192 168 1 1 32 128 10 17 66 41" },
+ { NULL, NULL }
+ };
options = fill_table (generic_options, NULL);
- options = fill_table (invalid_classless_routes3, options);
+ options = fill_table (data, options);
ip4_config = nm_dhcp_manager_test_ip4_options_to_config (client, "eth0", options, "rebind");
ASSERT (ip4_config != NULL,
- "dhcp-rfc3442-invalid-3", "failed to parse DHCP4 options");
+ "dhcp-dhclient-classless-invalid-3", "failed to parse DHCP4 options");
/* IP4 routes */
ASSERT (nm_ip4_config_get_num_routes (ip4_config) == 1,
- "dhcp-rfc3442-invalid-3", "unexpected number of IP routes");
+ "dhcp-dhclient-classless-invalid-3", "unexpected number of IP routes");
+ ip4_test_route ("dhcp-dhclient-classless-invalid-3", ip4_config, 0,
+ expected_route1_dest, expected_route1_gw, 24);
- /* Route #1 */
- route = nm_ip4_config_get_route (ip4_config, 0);
- ASSERT (inet_pton (AF_INET, expected_route1_dest, &tmp) > 0,
- "dhcp-rfc3442-invalid-3", "couldn't convert expected route destination #1");
- ASSERT (nm_ip4_route_get_dest (route) == tmp.s_addr,
- "dhcp-rfc3442-invalid-3", "unexpected route #1 destination");
+ g_hash_table_destroy (options);
+}
- ASSERT (inet_pton (AF_INET, expected_route1_gw, &tmp) > 0,
- "dhcp-rfc3442-invalid-3", "couldn't convert expected route next hop #1");
- ASSERT (nm_ip4_route_get_next_hop (route) == tmp.s_addr,
- "dhcp-rfc3442-invalid-3", "unexpected route #1 next hop");
+static void
+test_dhcpcd_invalid_classless_routes_3 (const char *client)
+{
+ GHashTable *options;
+ NMIP4Config *ip4_config;
+ const char *expected_route1_dest = "192.168.10.0";
+ const char *expected_route1_gw = "192.168.1.1";
+ static Option data[] = {
+ { "new_classless_static_routes", "192.168.10.0/24 192.168.1.1 128/32 10.17.66.41" },
+ { NULL, NULL }
+ };
- ASSERT (nm_ip4_route_get_prefix (route) == 24,
- "dhcp-rfc3442-invalid-3", "unexpected route #1 prefix");
- ASSERT (nm_ip4_route_get_metric (route) == 0,
- "dhcp-rfc3442-invalid-3", "unexpected route #1 metric");
+ options = fill_table (generic_options, NULL);
+ options = fill_table (data, options);
+
+ ip4_config = nm_dhcp_manager_test_ip4_options_to_config (client, "eth0", options, "rebind");
+ ASSERT (ip4_config != NULL,
+ "dhcp-dhcpcd-classless-invalid-3", "failed to parse DHCP4 options");
+
+ /* IP4 routes */
+ ASSERT (nm_ip4_config_get_num_routes (ip4_config) == 1,
+ "dhcp-dhcpcd-classless-invalid-3", "unexpected number of IP routes");
+ ip4_test_route ("dhcp-dhcpcd-classless-invalid-3", ip4_config, 0,
+ expected_route1_dest, expected_route1_gw, 24);
g_hash_table_destroy (options);
}
-static Option gw_in_classless_routes[] = {
- /* For dhclient */
- { "new_rfc3442_classless_static_routes", "24 192 168 10 192 168 1 1 0 192 2 3 4" },
- /* For dhcpcd */
- { "new_classless_static_routes", "192.168.10.0/24 192.168.1.1 0.0.0.0/0 192.2.3.4" },
- { NULL, NULL }
-};
-
static void
-test_gateway_in_classless_routes (const char *client)
+test_dhclient_gw_in_classless_routes (const char *client)
{
GHashTable *options;
NMIP4Config *ip4_config;
- NMIP4Address *addr;
- NMIP4Route *route;
- struct in_addr tmp;
const char *expected_route1_dest = "192.168.10.0";
const char *expected_route1_gw = "192.168.1.1";
const char *expected_gateway = "192.2.3.4";
+ static Option data[] = {
+ { "new_rfc3442_classless_static_routes", "24 192 168 10 192 168 1 1 0 192 2 3 4" },
+ { NULL, NULL }
+ };
options = fill_table (generic_options, NULL);
- options = fill_table (gw_in_classless_routes, options);
+ options = fill_table (data, options);
ip4_config = nm_dhcp_manager_test_ip4_options_to_config (client, "eth0", options, "rebind");
ASSERT (ip4_config != NULL,
- "dhcp-rfc3442-gateway", "failed to parse DHCP4 options");
+ "dhcp-dhclient-classless-gateway", "failed to parse DHCP4 options");
/* IP4 routes */
ASSERT (nm_ip4_config_get_num_routes (ip4_config) == 1,
- "dhcp-rfc3442-gateway", "unexpected number of IP routes");
+ "dhcp-dhclient-classless-gateway", "unexpected number of IP routes");
+ ip4_test_route ("dhcp-dhclient-classless-gateway", ip4_config, 0,
+ expected_route1_dest, expected_route1_gw, 24);
- /* Route #1 */
- route = nm_ip4_config_get_route (ip4_config, 0);
- ASSERT (inet_pton (AF_INET, expected_route1_dest, &tmp) > 0,
- "dhcp-rfc3442-gateway", "couldn't convert expected route destination #1");
- ASSERT (nm_ip4_route_get_dest (route) == tmp.s_addr,
- "dhcp-rfc3442-gateway", "unexpected route #1 destination");
+ /* Gateway */
+ ip4_test_gateway ("dhcp-dhclient-classless-gateway", ip4_config, expected_gateway);
- ASSERT (inet_pton (AF_INET, expected_route1_gw, &tmp) > 0,
- "dhcp-rfc3442-gateway", "couldn't convert expected route next hop #1");
- ASSERT (nm_ip4_route_get_next_hop (route) == tmp.s_addr,
- "dhcp-rfc3442-gateway", "unexpected route #1 next hop");
+ g_hash_table_destroy (options);
+}
- ASSERT (nm_ip4_route_get_prefix (route) == 24,
- "dhcp-rfc3442-gateway", "unexpected route #1 prefix");
- ASSERT (nm_ip4_route_get_metric (route) == 0,
- "dhcp-rfc3442-gateway", "unexpected route #1 metric");
+static void
+test_dhcpcd_gw_in_classless_routes (const char *client)
+{
+ GHashTable *options;
+ NMIP4Config *ip4_config;
+ const char *expected_route1_dest = "192.168.10.0";
+ const char *expected_route1_gw = "192.168.1.1";
+ const char *expected_gateway = "192.2.3.4";
+ static Option data[] = {
+ { "new_classless_static_routes", "192.168.10.0/24 192.168.1.1 0.0.0.0/0 192.2.3.4" },
+ { NULL, NULL }
+ };
- /* Address */
- ASSERT (nm_ip4_config_get_num_addresses (ip4_config) == 1,
- "dhcp-rfc3442-gateway", "unexpected number of IP addresses");
- addr = nm_ip4_config_get_address (ip4_config, 0);
- ASSERT (inet_pton (AF_INET, expected_gateway, &tmp) > 0,
- "dhcp-rfc3442-gateway", "couldn't convert expected IP gateway");
- ASSERT (nm_ip4_address_get_gateway (addr) == tmp.s_addr,
- "dhcp-rfc3442-gateway", "unexpected IP gateway");
+ options = fill_table (generic_options, NULL);
+ options = fill_table (data, options);
+
+ ip4_config = nm_dhcp_manager_test_ip4_options_to_config (client, "eth0", options, "rebind");
+ ASSERT (ip4_config != NULL,
+ "dhcp-dhcpcd-classless-gateway", "failed to parse DHCP4 options");
+
+ /* IP4 routes */
+ ASSERT (nm_ip4_config_get_num_routes (ip4_config) == 1,
+ "dhcp-dhcpcd-classless-gateway", "unexpected number of IP routes");
+ ip4_test_route ("dhcp-dhcpcd-classless-gateway", ip4_config, 0,
+ expected_route1_dest, expected_route1_gw, 24);
+
+ /* Gateway */
+ ip4_test_gateway ("dhcp-dhcpcd-classless-gateway", ip4_config, expected_gateway);
g_hash_table_destroy (options);
}
@@ -694,11 +800,17 @@ int main (int argc, char **argv)
test_generic_options (client);
test_wins_options (client);
- test_classless_static_routes (client);
- test_invalid_classless_routes1 (client);
- test_invalid_classless_routes2 (client);
- test_invalid_classless_routes3 (client);
- test_gateway_in_classless_routes (client);
+ test_classless_static_routes_1 (client);
+ test_classless_static_routes_2 (client);
+ test_fedora_dhclient_classless_static_routes (client);
+ test_dhclient_invalid_classless_routes_1 (client);
+ test_dhcpcd_invalid_classless_routes_1 (client);
+ test_dhclient_invalid_classless_routes_2 (client);
+ test_dhcpcd_invalid_classless_routes_2 (client);
+ test_dhclient_invalid_classless_routes_3 (client);
+ test_dhcpcd_invalid_classless_routes_3 (client);
+ test_dhclient_gw_in_classless_routes (client);
+ test_dhcpcd_gw_in_classless_routes (client);
test_escaped_domain_searches (client);
test_invalid_escaped_domain_searches (client);
test_ip4_missing_prefix (client, "192.168.1.10", 24);
diff --git a/src/tests/test-policy-hosts.c b/src/tests/test-policy-hosts.c
index e14f15e5f2..62862e756f 100644
--- a/src/tests/test-policy-hosts.c
+++ b/src/tests/test-policy-hosts.c
@@ -23,46 +23,38 @@
#include "nm-policy-hosts.h"
-#define FALLBACK_HOSTNAME "localhost.localdomain"
+#define DEBUG 1
static void
-test_generic (const char *before,
- const char *after,
- const char *hostname,
- gboolean expect_error)
+test_generic (const char *before, const char *after)
{
- char **lines;
GString *newc;
- GError *error = NULL;
/* Get the new /etc/hosts contents */
- lines = g_strsplit_set (before, "\n\r", 0);
- newc = nm_policy_get_etc_hosts ((const char **) lines,
- strlen (before),
- hostname,
- FALLBACK_HOSTNAME,
- &error);
- g_strfreev (lines);
+ newc = nm_policy_get_etc_hosts (before, strlen (before));
- if (expect_error) {
- g_assert (newc == NULL);
- g_assert (error != NULL);
- g_clear_error (&error);
- } else if (after == NULL) {
+ if (after == NULL) {
/* No change to /etc/hosts required */
+#if DEBUG
+ if (newc != NULL) {
+ g_message ("\n- NEW ---------------------------------\n"
+ "%s"
+ "+ EXPECTED NONE +++++++++++++++++++++++++\n",
+ newc->str);
+ }
+#endif
g_assert (newc == NULL);
- g_assert (error == NULL);
} else {
g_assert (newc != NULL);
- g_assert (error == NULL);
-#if 0
- g_message ("\n--------------------------------------\n"
+#if DEBUG
+ g_message ("\n- NEW ---------------------------------\n"
+ "%s"
+ "+ EXPECTED ++++++++++++++++++++++++++++++\n"
"%s"
- "--------------------------------------",
- newc->str);
+ "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
+ newc->str, after);
#endif
- g_assert (strlen (newc->str) == strlen (after));
g_assert (strcmp (newc->str, after) == 0);
g_string_free (newc, TRUE);
}
@@ -80,7 +72,7 @@ static const char *generic_before = \
static void
test_hosts_generic (void)
{
- test_generic (generic_before, NULL, "localhost.localdomain", FALSE);
+ test_generic (generic_before, NULL);
}
/*******************************************/
@@ -93,277 +85,76 @@ static const char *generic_no_boilerplate_before = \
static void
test_hosts_generic_no_boilerplate (void)
{
- test_generic (generic_no_boilerplate_before, NULL, "localhost.localdomain", FALSE);
-}
-
-/*******************************************/
-
-static const char *generic_no_boilerplate_no_lh_before = \
- "127.0.0.1 localhost.localdomain\n"
- "::1 localhost6.localdomain6 localhost6\n"
- "127.0.0.1 lcmd.us.intellitxt.com\n";
-
-static const char *generic_no_boilerplate_no_lh_after = \
- "127.0.0.1 localhost\n"
- "127.0.0.1 localhost.localdomain\n"
- "::1 localhost6.localdomain6 localhost6\n"
- "127.0.0.1 lcmd.us.intellitxt.com\n";
-
-static void
-test_hosts_generic_no_boilerplate_no_lh (void)
-{
- test_generic (generic_no_boilerplate_no_lh_before,
- generic_no_boilerplate_no_lh_after,
- "localhost.localdomain",
- FALSE);
-}
-
-/*******************************************/
-
-
-static const char *generic_no_boilerplate_no_lh_no_host_before = \
- "127.0.0.1 localhost.localdomain\n"
- "::1 localhost6.localdomain6 localhost6\n"
- "127.0.0.1 lcmd.us.intellitxt.com\n";
-
-static const char *generic_no_boilerplate_no_lh_no_host_after = \
- "127.0.0.1 comet localhost.localdomain localhost\n"
- "::1 localhost6.localdomain6 localhost6\n"
- "127.0.0.1 lcmd.us.intellitxt.com\n";
-
-static void
-test_hosts_generic_no_boilerplate_no_lh_no_host (void)
-{
- test_generic (generic_no_boilerplate_no_lh_no_host_before,
- generic_no_boilerplate_no_lh_no_host_after,
- "comet",
- FALSE);
-}
-
-/*******************************************/
-static const char *named_generic_before = \
- "# Do not remove the following line, or various programs\n"
- "# that require network functionality will fail.\n"
- "127.0.0.1 playboy localhost\n"
- "::1 localhost6.localdomain6 localhost6\n"
- "127.0.0.1 lcmd.us.intellitxt.com\n";
-
-static void
-test_hosts_named_generic (void)
-{
- test_generic (named_generic_before, NULL, "playboy", FALSE);
-}
-
-/*******************************************/
-
-static const char *named_non127_before = \
- "# Do not remove the following line, or various programs\n"
- "# that require network functionality will fail.\n"
- "127.0.0.1 localhost.localdomain localhost\n"
- "::1 localhost6.localdomain6 localhost6\n"
- "127.0.0.1 lcmd.us.intellitxt.com\n"
- "192.168.1.2 tomcat\n";
-
-static void
-test_hosts_named_non127 (void)
-{
- test_generic (named_non127_before, NULL, "tomcat", FALSE);
-}
-
-/*******************************************/
-
-static const char *named2_non127_before = \
- "# Do not remove the following line, or various programs\n"
- "# that require network functionality will fail.\n"
- "127.0.0.1 localhost.localdomain localhost\n"
- "::1 localhost6.localdomain6 localhost6\n"
- "127.0.0.1 lcmd.us.intellitxt.com\n"
- "192.168.1.2 tomcat\n"
- "127.0.0.1 lcmd.us.intellitxt.com\n"
- "127.0.0.1 srx.main.ebayrtm.com\n"
- "127.0.0.1 cdn5.tribalfusion.com\n";
-
-static void
-test_hosts_named2_non127 (void)
-{
- test_generic (named2_non127_before, NULL, "tomcat", FALSE);
+ test_generic (generic_no_boilerplate_before, NULL);
}
/*******************************************/
-static const char *named_no_lh_before = \
- "# Do not remove the following line, or various programs\n"
- "# that require network functionality will fail.\n"
- "127.0.0.1 localhost.localdomain\n"
- "::1 localhost6.localdomain6 localhost6\n"
- "127.0.0.1 lcmd.us.intellitxt.com\n"
- "192.168.1.2 tomcat\n";
-
-static const char *named_no_lh_after = \
+static const char *leftover_before = \
"# Do not remove the following line, or various programs\n"
"# that require network functionality will fail.\n"
+ "192.168.1.2 comet # Added by NetworkManager\n"
"127.0.0.1 localhost.localdomain localhost\n"
- "::1 localhost6.localdomain6 localhost6\n"
- "127.0.0.1 lcmd.us.intellitxt.com\n"
- "192.168.1.2 tomcat\n";
-
-static void
-test_hosts_named_no_localhost (void)
-{
- test_generic (named_no_lh_before, named_no_lh_after, "tomcat", FALSE);
-}
-
-/*******************************************/
-
-static const char *no_lh_before = \
- "# Do not remove the following line, or various programs\n"
- "# that require network functionality will fail.\n"
- "127.0.0.1 tomcat\n"
- "::1 localhost6.localdomain6 localhost6\n"
+ "::1 localhost6.localdomain6 localhost6\n"
+ "192.168.1.3 comet\n"
+ "3001:abba::3234 comet\n"
+ "\n"
"127.0.0.1 lcmd.us.intellitxt.com\n";
-static const char *no_lh_after = \
+static const char *leftover_after = \
"# Do not remove the following line, or various programs\n"
"# that require network functionality will fail.\n"
"127.0.0.1 localhost.localdomain localhost\n"
- "127.0.0.1 tomcat\n"
- "::1 localhost6.localdomain6 localhost6\n"
+ "::1 localhost6.localdomain6 localhost6\n"
+ "192.168.1.3 comet\n"
+ "3001:abba::3234 comet\n"
+ "\n"
"127.0.0.1 lcmd.us.intellitxt.com\n";
static void
-test_hosts_no_localhost (void)
+test_hosts_leftover (void)
{
- test_generic (no_lh_before, no_lh_after, "tomcat", FALSE);
+ test_generic (leftover_before, leftover_after);
}
/*******************************************/
-static const char *named_last_before = \
+static const char *leftover_double_newline_before = \
"# Do not remove the following line, or various programs\n"
"# that require network functionality will fail.\n"
- "127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 sparcbook.ausil.us\n"
- "::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 sparcbook.ausil.us\n";
-
-static void
-test_hosts_named_last (void)
-{
- test_generic (named_last_before, NULL, "sparcbook.ausil.us", FALSE);
-}
-
-/*******************************************/
-
-static const char *no_host_before = \
- "# Do not remove the following line, or various programs\n"
- "# that require network functionality will fail.\n"
- "::1 localhost6.localdomain6 localhost6\n"
- "\n"
- "127.0.0.1 lcmd.us.intellitxt.com\n"
- "127.0.0.1 srx.main.ebayrtm.com\n"
- "127.0.0.1 cdn5.tribalfusion.com\n"
- "127.0.0.1 a.tribalfusion.com\n";
-
-static const char *no_host_after = \
- "# Do not remove the following line, or various programs\n"
- "# that require network functionality will fail.\n"
- "127.0.0.1 comet localhost.localdomain localhost\n"
- "::1 localhost6.localdomain6 localhost6\n"
+ "192.168.1.2 comet # Added by NetworkManager\n"
+ "127.0.0.1 localhost.localdomain localhost\n"
+ "::1 localhost6.localdomain6 localhost6\n"
+ "192.168.1.3 comet\n"
+ "3001:abba::3234 comet\n"
"\n"
"127.0.0.1 lcmd.us.intellitxt.com\n"
- "127.0.0.1 srx.main.ebayrtm.com\n"
- "127.0.0.1 cdn5.tribalfusion.com\n"
- "127.0.0.1 a.tribalfusion.com\n";
-
-static void
-test_hosts_no_host (void)
-{
- test_generic (no_host_before, no_host_after, "comet", FALSE);
-}
-
-/*******************************************/
+ "\n";
-static const char *long_before = \
+static const char *leftover_double_newline_after = \
"# Do not remove the following line, or various programs\n"
"# that require network functionality will fail.\n"
- "127.0.0.1 localhost.localdomain localhost comet\n"
- "::1 localhost6.localdomain6 localhost6\n"
+ "127.0.0.1 localhost.localdomain localhost\n"
+ "::1 localhost6.localdomain6 localhost6\n"
+ "192.168.1.3 comet\n"
+ "3001:abba::3234 comet\n"
"\n"
"127.0.0.1 lcmd.us.intellitxt.com\n"
- "127.0.0.1 adserver.adtech.de\n"
- "127.0.0.1 a.as-us.falkag.net\n"
- "127.0.0.1 a.as-eu.falkag.net\n"
- "127.0.0.1 ads.doubleclick.com\n"
- "\n"
- "# random comment\n"
- "127.0.0.1 m1.2mdn.net\n"
- "127.0.0.1 ds.serving-sys.com\n"
- "127.0.0.1 pagead2.googlesyndication.com\n"
- "127.0.0.1 ad.doubleclick.com\n"
- "127.0.0.1 ad.doubleclick.net\n"
- "127.0.0.1 oascentral.movietickets.com\n"
- "127.0.0.1 view.atdmt.com\n"
- "127.0.0.1 ads.chumcity.com\n"
- "127.0.0.1 ads.as4x.tmcs.net\n"
- "127.0.0.1 n4403ad.doubleclick.net\n"
- "127.0.0.1 www.assoc-amazon.com\n"
- "127.0.0.1 s25.sitemeter.com\n"
- "127.0.0.1 adlog.com.com\n"
- "127.0.0.1 ahs.laptopmag.com\n"
- "127.0.0.1 altfarm.mediaplex.com\n"
- "127.0.0.1 ads.addynamix.com\n"
- "127.0.0.1 srx.main.ebayrtm.com\n"
- "127.0.0.1 cdn5.tribalfusion.com\n"
- "127.0.0.1 a.tribalfusion.com\n";
-
+ "\n";
static void
-test_hosts_long (void)
+test_hosts_leftover_double_newline (void)
{
- test_generic (long_before, NULL, "comet", FALSE);
+ test_generic (leftover_double_newline_before, leftover_double_newline_after);
}
/*******************************************/
-typedef struct {
- const char *line;
- const char *token;
- gboolean expected;
-} Foo;
-
-static Foo foo[] = {
- /* Using \t here to easily differentiate tabs vs. spaces for testing */
- { "127.0.0.1\tfoobar\tblah", "blah", TRUE },
- { "", "blah", FALSE },
- { "1.1.1.1\tbork\tfoo", "blah", FALSE },
- { "127.0.0.1 foobar\tblah", "blah", TRUE },
- { "127.0.0.1 foobar blah", "blah", TRUE },
- { "127.0.0.1 localhost", "localhost.localdomain", FALSE },
- { "192.168.1.1 blah borkbork", "blah", TRUE },
- { "192.168.1.1 foobar\tblah borkbork", "blah", TRUE },
- { "192.168.1.1\tfoobar\tblah\tborkbork", "blah", TRUE },
- { "192.168.1.1 \tfoobar \tblah \tborkbork\t ", "blah", TRUE },
- { "\t\t\t\t \t\t\tasdfadf a\t\t\t\t\t \t\t\t\t\t ", "blah", FALSE },
- { NULL, NULL, FALSE }
-};
-
-static void
-test_find_token (void)
-{
- Foo *iter = &foo[0];
-
- while (iter->line) {
- gboolean found;
-
- found = nm_policy_hosts_find_token (iter->line, iter->token);
- if (found != iter->expected) {
- g_warning ("find-token: unexpected token result %d for '%s' <= '%s' (expected %d)",
- found, iter->line, iter->token, iter->expected);
- }
- g_assert (found == iter->expected);
- iter++;
- }
-}
-
+#if GLIB_CHECK_VERSION(2,25,12)
+typedef GTestFixtureFunc TCFunc;
+#else
typedef void (*TCFunc)(void);
+#endif
#define TESTCASE(t, d) g_test_create_case (#t, 0, d, NULL, (TCFunc) t, NULL)
@@ -375,19 +166,10 @@ int main (int argc, char **argv)
suite = g_test_get_root ();
- g_test_suite_add (suite, TESTCASE (test_find_token, NULL));
g_test_suite_add (suite, TESTCASE (test_hosts_generic, NULL));
g_test_suite_add (suite, TESTCASE (test_hosts_generic_no_boilerplate, NULL));
- g_test_suite_add (suite, TESTCASE (test_hosts_generic_no_boilerplate_no_lh, NULL));
- g_test_suite_add (suite, TESTCASE (test_hosts_generic_no_boilerplate_no_lh_no_host, NULL));
- g_test_suite_add (suite, TESTCASE (test_hosts_named_generic, NULL));
- g_test_suite_add (suite, TESTCASE (test_hosts_named_non127, NULL));
- g_test_suite_add (suite, TESTCASE (test_hosts_named2_non127, NULL));
- g_test_suite_add (suite, TESTCASE (test_hosts_named_no_localhost, NULL));
- g_test_suite_add (suite, TESTCASE (test_hosts_no_localhost, NULL));
- g_test_suite_add (suite, TESTCASE (test_hosts_named_last, NULL));
- g_test_suite_add (suite, TESTCASE (test_hosts_no_host, NULL));
- g_test_suite_add (suite, TESTCASE (test_hosts_long, NULL));
+ g_test_suite_add (suite, TESTCASE (test_hosts_leftover, NULL));
+ g_test_suite_add (suite, TESTCASE (test_hosts_leftover_double_newline, NULL));
return g_test_run ();
}
diff --git a/src/vpn-manager/Makefile.am b/src/vpn-manager/Makefile.am
index 56e4a4ced3..b0692d70c3 100644
--- a/src/vpn-manager/Makefile.am
+++ b/src/vpn-manager/Makefile.am
@@ -5,7 +5,7 @@ INCLUDES = \
-I${top_srcdir}/src/logging \
-I${top_srcdir}/src \
-I${top_builddir}/marshallers \
- -I${top_srcdir}/src/named-manager \
+ -I${top_srcdir}/src/dns-manager \
-DVPN_NAME_FILES_DIR=\""$(sysconfdir)/NetworkManager/VPN"\"
@@ -32,10 +32,10 @@ libvpn_manager_la_LIBADD = \
$(GLIB_LIBS)
nm-vpn-connection-glue.h: $(top_srcdir)/introspection/nm-vpn-connection.xml
- dbus-binding-tool --prefix=nm_vpn_connection --mode=glib-server --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_vpn_connection --mode=glib-server --output=$@ $<
nm-vpn-plugin-bindings.h: $(top_srcdir)/introspection/nm-vpn-plugin.xml
- dbus-binding-tool --prefix=nm_vpn_plugin --mode=glib-client --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_vpn_plugin --mode=glib-client --output=$@ $<
BUILT_SOURCES = \
diff --git a/src/vpn-manager/nm-vpn-connection.c b/src/vpn-manager/nm-vpn-connection.c
index eee181ef01..cf844992c0 100644
--- a/src/vpn-manager/nm-vpn-connection.c
+++ b/src/vpn-manager/nm-vpn-connection.c
@@ -44,7 +44,7 @@
#include "nm-properties-changed-signal.h"
#include "nm-dbus-glib-types.h"
#include "NetworkManagerUtils.h"
-#include "nm-named-manager.h"
+#include "nm-dns-manager.h"
#include "nm-netlink-monitor.h"
#include "nm-glib-compat.h"
@@ -119,6 +119,7 @@ nm_vpn_connection_set_vpn_state (NMVPNConnection *connection,
NMVPNConnectionPrivate *priv;
NMActiveConnectionState new_ac_state;
NMVPNConnectionState old_vpn_state;
+ char *ip_iface;
g_return_if_fail (NM_IS_VPN_CONNECTION (connection));
@@ -130,6 +131,11 @@ nm_vpn_connection_set_vpn_state (NMVPNConnection *connection,
old_vpn_state = priv->vpn_state;
priv->vpn_state = vpn_state;
+ /* Save ip_iface since when the VPN goes down it may get freed
+ * before we're done with it.
+ */
+ ip_iface = g_strdup (priv->ip_iface);
+
/* Set the NMActiveConnection state based on VPN state */
switch (vpn_state) {
case NM_VPN_CONNECTION_STATE_PREPARE:
@@ -166,7 +172,7 @@ nm_vpn_connection_set_vpn_state (NMVPNConnection *connection,
nm_utils_call_dispatcher ("vpn-up",
priv->connection,
priv->parent_dev,
- priv->ip_iface);
+ ip_iface);
break;
case NM_VPN_CONNECTION_STATE_FAILED:
case NM_VPN_CONNECTION_STATE_DISCONNECTED:
@@ -174,13 +180,14 @@ nm_vpn_connection_set_vpn_state (NMVPNConnection *connection,
nm_utils_call_dispatcher ("vpn-down",
priv->connection,
priv->parent_dev,
- priv->ip_iface);
+ ip_iface);
}
break;
default:
break;
}
+ g_free (ip_iface);
g_object_unref (connection);
}
@@ -375,6 +382,9 @@ print_vpn_config (NMIP4Config *config,
ip_address_to_string (nm_ip4_route_get_next_hop (route)));
}
+ nm_log_info (LOGD_VPN, "Forbid Default Route: %s",
+ nm_ip4_config_get_never_default (config) ? "yes" : "no");
+
num = nm_ip4_config_get_num_nameservers (config);
for (i = 0; i < num; i++) {
nm_log_info (LOGD_VPN, "Internal IP4 DNS: %s",
@@ -520,6 +530,10 @@ nm_vpn_connection_ip4_config_get (DBusGProxy *proxy,
g_slist_free (routes);
}
+ val = (GValue *) g_hash_table_lookup (config_hash, NM_VPN_PLUGIN_IP4_CONFIG_NEVER_DEFAULT);
+ if (val && G_VALUE_HOLDS_BOOLEAN (val))
+ nm_ip4_config_set_never_default (config, g_value_get_boolean (val));
+
print_vpn_config (config, priv->ip4_internal_gw, priv->ip_iface, priv->banner);
/* Merge in user overrides from the NMConnection's IPv4 setting */
@@ -529,15 +543,15 @@ nm_vpn_connection_ip4_config_get (DBusGProxy *proxy,
nm_system_device_set_up_down_with_iface (priv->ip_iface, TRUE, NULL);
if (nm_system_apply_ip4_config (priv->ip_iface, config, 0, NM_IP4_COMPARE_FLAG_ALL)) {
- NMNamedManager *named_mgr;
+ NMDnsManager *dns_mgr;
/* Add any explicit route to the VPN gateway through the parent device */
priv->gw_route = nm_system_add_ip4_vpn_gateway_route (priv->parent_dev, config);
/* Add the VPN to DNS */
- named_mgr = nm_named_manager_get ();
- nm_named_manager_add_ip4_config (named_mgr, priv->ip_iface, config, NM_NAMED_IP_CONFIG_TYPE_VPN);
- g_object_unref (named_mgr);
+ dns_mgr = nm_dns_manager_get (NULL);
+ nm_dns_manager_add_ip4_config (dns_mgr, priv->ip_iface, config, NM_DNS_IP_CONFIG_TYPE_VPN);
+ g_object_unref (dns_mgr);
priv->ip4_config = config;
@@ -885,12 +899,12 @@ vpn_cleanup (NMVPNConnection *connection)
if (priv->ip4_config) {
NMIP4Config *parent_config;
- NMNamedManager *named_mgr;
+ NMDnsManager *dns_mgr;
/* Remove attributes of the VPN's IP4 Config */
- named_mgr = nm_named_manager_get ();
- nm_named_manager_remove_ip4_config (named_mgr, priv->ip_iface, priv->ip4_config);
- g_object_unref (named_mgr);
+ dns_mgr = nm_dns_manager_get (NULL);
+ nm_dns_manager_remove_ip4_config (dns_mgr, priv->ip_iface, priv->ip4_config);
+ g_object_unref (dns_mgr);
/* Remove any previously added VPN gateway host route */
if (priv->gw_route)
diff --git a/src/vpn-manager/nm-vpn-manager.c b/src/vpn-manager/nm-vpn-manager.c
index 221a8b548c..4b58be0d48 100644
--- a/src/vpn-manager/nm-vpn-manager.c
+++ b/src/vpn-manager/nm-vpn-manager.c
@@ -15,11 +15,12 @@
* 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 - 2010 Red Hat, Inc.
* Copyright (C) 2006 - 2008 Novell, Inc.
*/
#include <string.h>
+#include <gio/gio.h>
#include "nm-vpn-manager.h"
#include "nm-vpn-service.h"
@@ -28,13 +29,18 @@
#include "nm-dbus-manager.h"
#include "NetworkManagerVPN.h"
#include "nm-marshal.h"
+#include "nm-logging.h"
G_DEFINE_TYPE (NMVPNManager, nm_vpn_manager, G_TYPE_OBJECT)
#define NM_VPN_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_VPN_MANAGER, NMVPNManagerPrivate))
typedef struct {
- GSList *services;
+ gboolean disposed;
+
+ GHashTable *services;
+ GFileMonitor *monitor;
+ guint monitor_id;
} NMVPNManagerPrivate;
enum {
@@ -81,53 +87,42 @@ nm_vpn_manager_error_get_type (void)
}
-
static NMVPNService *
-nm_vpn_manager_get_service (NMVPNManager *manager, const char *service_name)
+get_service_by_namefile (NMVPNManager *self, const char *namefile)
{
- GSList *iter;
+ NMVPNManagerPrivate *priv = NM_VPN_MANAGER_GET_PRIVATE (self);
+ GHashTableIter iter;
+ gpointer data;
- for (iter = NM_VPN_MANAGER_GET_PRIVATE (manager)->services; iter; iter = iter->next) {
- NMVPNService *service = NM_VPN_SERVICE (iter->data);
+ g_return_val_if_fail (namefile, NULL);
+ g_return_val_if_fail (g_path_is_absolute (namefile), NULL);
- if (!strcmp (service_name, nm_vpn_service_get_name (service)))
- return g_object_ref (service);
- }
+ g_hash_table_iter_init (&iter, priv->services);
+ while (g_hash_table_iter_next (&iter, NULL, &data)) {
+ NMVPNService *candidate = NM_VPN_SERVICE (data);
+ const char *service_namefile;
+ service_namefile = nm_vpn_service_get_name_file (candidate);
+ if (!strcmp (namefile, service_namefile))
+ return candidate;
+ }
return NULL;
}
-static void
-remove_service (gpointer data, GObject *service)
-{
- NMVPNManagerPrivate *priv = NM_VPN_MANAGER_GET_PRIVATE (data);
-
- priv->services = g_slist_remove (priv->services, service);
-}
-
-static void
-nm_vpn_manager_add_service (NMVPNManager *manager, NMVPNService *service)
-{
- NMVPNManagerPrivate *priv = NM_VPN_MANAGER_GET_PRIVATE (manager);
-
- priv->services = g_slist_prepend (priv->services, service);
- g_object_weak_ref (G_OBJECT (service), remove_service, manager);
-}
-
static NMVPNConnection *
-find_active_vpn_connection_by_connection (NMVPNManager *manager, NMConnection *connection)
+find_active_vpn_connection_by_connection (NMVPNManager *self, NMConnection *connection)
{
- NMVPNManagerPrivate *priv;
- GSList *iter;
+ NMVPNManagerPrivate *priv = NM_VPN_MANAGER_GET_PRIVATE (self);
+ GHashTableIter iter;
+ gpointer data;
+ GSList *connections, *elt;
- g_return_val_if_fail (NM_IS_VPN_MANAGER (manager), NULL);
+ g_return_val_if_fail (connection, NULL);
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
- priv = NM_VPN_MANAGER_GET_PRIVATE (manager);
- for (iter = priv->services; iter; iter = g_slist_next (iter)) {
- GSList *connections, *elt;
-
- connections = nm_vpn_service_get_active_connections (NM_VPN_SERVICE (iter->data));
+ g_hash_table_iter_init (&iter, priv->services);
+ while (g_hash_table_iter_next (&iter, NULL, &data)) {
+ connections = nm_vpn_service_get_active_connections (NM_VPN_SERVICE (data));
for (elt = connections; elt; elt = g_slist_next (elt)) {
NMVPNConnection *vpn = NM_VPN_CONNECTION (elt->data);
@@ -169,7 +164,7 @@ nm_vpn_manager_activate_connection (NMVPNManager *manager,
NMSettingVPN *vpn_setting;
NMVPNService *service;
NMVPNConnection *vpn = NULL;
- const char *service_type;
+ const char *service_name;
g_return_val_if_fail (NM_IS_VPN_MANAGER (manager), NULL);
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
@@ -199,78 +194,78 @@ nm_vpn_manager_activate_connection (NMVPNManager *manager,
vpn = NULL;
}
- service_type = nm_setting_vpn_get_service_type (vpn_setting);
- service = nm_vpn_manager_get_service (manager, service_type);
+ service_name = nm_setting_vpn_get_service_type (vpn_setting);
+ g_assert (service_name);
+ service = g_hash_table_lookup (NM_VPN_MANAGER_GET_PRIVATE (manager)->services, service_name);
if (!service) {
- service = nm_vpn_service_new (service_type);
- if (service)
- nm_vpn_manager_add_service (manager, service);
- }
-
- if (service) {
- vpn = nm_vpn_service_activate (service, connection, act_request, device, error);
- if (vpn) {
- g_signal_connect (vpn, "vpn-state-changed",
- G_CALLBACK (connection_vpn_state_changed),
- manager);
- }
- } else {
g_set_error (error,
NM_VPN_MANAGER_ERROR, NM_VPN_MANAGER_ERROR_SERVICE_INVALID,
- "%s", "The VPN service was invalid.");
+ "The VPN service '%s' was not installed.",
+ service_name);
+ return NULL;
+ }
+
+ vpn = nm_vpn_service_activate (service, connection, act_request, device, error);
+ if (vpn) {
+ g_signal_connect (vpn, "vpn-state-changed",
+ G_CALLBACK (connection_vpn_state_changed),
+ manager);
}
return vpn;
}
gboolean
-nm_vpn_manager_deactivate_connection (NMVPNManager *manager,
+nm_vpn_manager_deactivate_connection (NMVPNManager *self,
const char *path,
NMVPNConnectionStateReason reason)
{
NMVPNManagerPrivate *priv;
- GSList *iter;
- gboolean found = FALSE;
+ GHashTableIter iter;
+ gpointer data;
+ GSList *active, *elt;
- g_return_val_if_fail (NM_IS_VPN_MANAGER (manager), FALSE);
+ g_return_val_if_fail (self, FALSE);
+ g_return_val_if_fail (NM_IS_VPN_MANAGER (self), FALSE);
g_return_val_if_fail (path != NULL, FALSE);
- priv = NM_VPN_MANAGER_GET_PRIVATE (manager);
- for (iter = priv->services; iter; iter = g_slist_next (iter)) {
- GSList *connections, *elt;
-
- connections = nm_vpn_service_get_active_connections (NM_VPN_SERVICE (iter->data));
- for (elt = connections; elt; elt = g_slist_next (elt)) {
+ priv = NM_VPN_MANAGER_GET_PRIVATE (self);
+ g_hash_table_iter_init (&iter, priv->services);
+ while (g_hash_table_iter_next (&iter, NULL, &data)) {
+ active = nm_vpn_service_get_active_connections (NM_VPN_SERVICE (data));
+ for (elt = active; elt; elt = g_slist_next (elt)) {
NMVPNConnection *vpn = NM_VPN_CONNECTION (elt->data);
const char *vpn_path;
vpn_path = nm_vpn_connection_get_active_connection_path (vpn);
if (!strcmp (path, vpn_path)) {
nm_vpn_connection_disconnect (vpn, reason);
- found = TRUE;
+ return TRUE;
}
}
}
- return found ? TRUE : FALSE;
+ return FALSE;
}
void
-nm_vpn_manager_add_active_connections (NMVPNManager *manager,
+nm_vpn_manager_add_active_connections (NMVPNManager *self,
NMConnection *filter,
GPtrArray *array)
{
NMVPNManagerPrivate *priv;
- GSList *iter;
+ GHashTableIter iter;
+ gpointer data;
+ GSList *active, *elt;
- g_return_if_fail (NM_IS_VPN_MANAGER (manager));
+ g_return_if_fail (self);
+ g_return_if_fail (NM_IS_VPN_MANAGER (self));
g_return_if_fail (array != NULL);
- priv = NM_VPN_MANAGER_GET_PRIVATE (manager);
- for (iter = priv->services; iter; iter = g_slist_next (iter)) {
- GSList *active, *elt;
-
- active = nm_vpn_service_get_active_connections (NM_VPN_SERVICE (iter->data));
+ priv = NM_VPN_MANAGER_GET_PRIVATE (self);
+ g_hash_table_iter_init (&iter, priv->services);
+ while (g_hash_table_iter_next (&iter, NULL, &data)) {
+ active = nm_vpn_service_get_active_connections (NM_VPN_SERVICE (data));
for (elt = active; elt; elt = g_slist_next (elt)) {
NMVPNConnection *vpn = NM_VPN_CONNECTION (elt->data);
const char *path;
@@ -284,26 +279,155 @@ nm_vpn_manager_add_active_connections (NMVPNManager *manager,
}
GSList *
-nm_vpn_manager_get_active_connections (NMVPNManager *manager)
+nm_vpn_manager_get_active_connections (NMVPNManager *self)
{
NMVPNManagerPrivate *priv;
- GSList *iter;
- GSList *list = NULL;
+ GHashTableIter iter;
+ gpointer data;
+ GSList *list = NULL, *active, *elt;
+
+ g_return_val_if_fail (self, NULL);
+ g_return_val_if_fail (NM_IS_VPN_MANAGER (self), NULL);
+
+ priv = NM_VPN_MANAGER_GET_PRIVATE (self);
+ g_hash_table_iter_init (&iter, priv->services);
+ while (g_hash_table_iter_next (&iter, NULL, &data)) {
+ active = nm_vpn_service_get_active_connections (NM_VPN_SERVICE (data));
+ for (elt = active; elt; elt = g_slist_next (elt))
+ list = g_slist_append (list, g_object_ref (G_OBJECT (elt->data)));
+ }
+ return list;
+}
+
+NMConnection *
+nm_vpn_manager_get_connection_for_active (NMVPNManager *manager,
+ const char *active_path)
+{
+ NMVPNManagerPrivate *priv;
+ GHashTableIter iter;
+ gpointer data;
+ GSList *active, *elt;
g_return_val_if_fail (NM_IS_VPN_MANAGER (manager), NULL);
priv = NM_VPN_MANAGER_GET_PRIVATE (manager);
- for (iter = priv->services; iter; iter = g_slist_next (iter)) {
- GSList *active, *elt;
+ g_hash_table_iter_init (&iter, priv->services);
+ while (g_hash_table_iter_next (&iter, NULL, &data)) {
+ active = nm_vpn_service_get_active_connections (NM_VPN_SERVICE (data));
+ for (elt = active; elt; elt = g_slist_next (elt)) {
+ NMVPNConnection *vpn = NM_VPN_CONNECTION (elt->data);
+ const char *ac_path;
- active = nm_vpn_service_get_active_connections (NM_VPN_SERVICE (iter->data));
- for (elt = active; elt; elt = g_slist_next (elt))
- list = g_slist_append (list, g_object_ref (NM_VPN_CONNECTION (elt->data)));
+ 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 list;
+ return NULL;
}
+static char *
+service_name_from_file (const char *path)
+{
+ GKeyFile *kf = NULL;
+ char *service_name = NULL;
+
+ g_return_val_if_fail (g_path_is_absolute (path), NULL);
+
+ if (!g_str_has_suffix (path, ".name"))
+ return NULL;
+
+ kf = g_key_file_new ();
+ if (g_key_file_load_from_file (kf, path, G_KEY_FILE_NONE, NULL))
+ service_name = g_key_file_get_string (kf, VPN_CONNECTION_GROUP, "service", NULL);
+
+ g_key_file_free (kf);
+ return service_name;
+}
+
+static void
+try_add_service (NMVPNManager *self, const char *namefile)
+{
+ NMVPNManagerPrivate *priv = NM_VPN_MANAGER_GET_PRIVATE (self);
+ NMVPNService *service = NULL;
+ GError *error = NULL;
+ const char *service_name;
+ char *tmp;
+
+ g_return_if_fail (g_path_is_absolute (namefile));
+
+ /* Make sure we don't add dupes */
+ tmp = service_name_from_file (namefile);
+ if (tmp)
+ service = g_hash_table_lookup (priv->services, tmp);
+ g_free (tmp);
+ if (service)
+ return;
+
+ /* New service, add it */
+ service = nm_vpn_service_new (namefile, &error);
+ if (!service) {
+ nm_log_warn (LOGD_VPN, "failed to load VPN service file %s: (%d) %s",
+ error ? error->code : -1,
+ error && error->message ? error->message : "(unknown)");
+ g_clear_error (&error);
+ return;
+ }
+
+ service_name = nm_vpn_service_get_dbus_service (service);
+ g_hash_table_insert (priv->services, (char *) service_name, service);
+ nm_log_info (LOGD_VPN, "VPN: loaded %s", service_name, service);
+}
+
+static void
+vpn_dir_changed (GFileMonitor *monitor,
+ GFile *file,
+ GFile *other_file,
+ GFileMonitorEvent event_type,
+ gpointer user_data)
+{
+ NMVPNManager *self = NM_VPN_MANAGER (user_data);
+ NMVPNManagerPrivate *priv = NM_VPN_MANAGER_GET_PRIVATE (self);
+ NMVPNService *service;
+ char *path;
+
+ path = g_file_get_path (file);
+ if (!g_str_has_suffix (path, ".name")) {
+ g_free (path);
+ return;
+ }
+
+ switch (event_type) {
+ case G_FILE_MONITOR_EVENT_DELETED:
+ nm_log_dbg (LOGD_VPN, "service file %s deleted", path);
+
+ service = get_service_by_namefile (self, path);
+ if (service) {
+ const char *service_name = nm_vpn_service_get_dbus_service (service);
+
+ /* Stop active VPN connections and destroy the service */
+ nm_vpn_service_connections_stop (service, TRUE,
+ NM_VPN_CONNECTION_STATE_REASON_SERVICE_STOPPED);
+ nm_log_info (LOGD_VPN, "VPN: unloaded %s", service_name, service);
+ g_hash_table_remove (priv->services, service_name);
+ }
+ break;
+ case G_FILE_MONITOR_EVENT_CREATED:
+ case G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT:
+ nm_log_dbg (LOGD_VPN, "service file %s created or modified", path);
+ try_add_service (self, path);
+ break;
+ default:
+ nm_log_dbg (LOGD_VPN, "service file %s change event %d", path, event_type);
+ break;
+ }
+
+ g_free (path);
+}
+
+/******************************************************************************/
+
NMVPNManager *
nm_vpn_manager_get (void)
{
@@ -318,21 +442,61 @@ nm_vpn_manager_get (void)
return singleton;
}
-/******************************************************************************/
-
static void
-nm_vpn_manager_init (NMVPNManager *manager)
+nm_vpn_manager_init (NMVPNManager *self)
{
+ NMVPNManagerPrivate *priv = NM_VPN_MANAGER_GET_PRIVATE (self);
+ GFile *file;
+ GDir *dir;
+ const char *fn;
+ char *path;
+
+ priv->services = g_hash_table_new_full (g_str_hash, g_str_equal,
+ NULL, g_object_unref);
+
+ /* Watch the VPN directory for changes */
+ file = g_file_new_for_path (VPN_NAME_FILES_DIR "/");
+ priv->monitor = g_file_monitor_directory (file, G_FILE_MONITOR_NONE, NULL, NULL);
+ g_object_unref (file);
+ if (priv->monitor) {
+ priv->monitor_id = g_signal_connect (priv->monitor, "changed",
+ G_CALLBACK (vpn_dir_changed), self);
+ }
+
+ /* Load VPN service files */
+ dir = g_dir_open (VPN_NAME_FILES_DIR, 0, NULL);
+ if (dir) {
+ while ((fn = g_dir_read_name (dir))) {
+ /* only parse filenames that end with .name */
+ if (g_str_has_suffix (fn, ".name")) {
+ path = g_build_filename (VPN_NAME_FILES_DIR, fn, NULL);
+ try_add_service (self, path);
+ g_free (path);
+ }
+ }
+ g_dir_close (dir);
+ }
}
static void
-finalize (GObject *object)
+dispose (GObject *object)
{
NMVPNManagerPrivate *priv = NM_VPN_MANAGER_GET_PRIVATE (object);
- g_slist_foreach (priv->services, (GFunc) g_object_unref, NULL);
+ if (!priv->disposed) {
+ priv->disposed = TRUE;
+
+ if (priv->monitor) {
+ if (priv->monitor_id)
+ g_signal_handler_disconnect (priv->monitor, priv->monitor_id);
+ g_file_monitor_cancel (priv->monitor);
+ g_object_unref (priv->monitor);
+ }
+
+ g_hash_table_destroy (priv->services);
+ }
- G_OBJECT_CLASS (nm_vpn_manager_parent_class)->finalize (object);
+ G_OBJECT_CLASS (nm_vpn_manager_parent_class)->dispose (object);
}
static void
@@ -343,7 +507,7 @@ nm_vpn_manager_class_init (NMVPNManagerClass *manager_class)
g_type_class_add_private (manager_class, sizeof (NMVPNManagerPrivate));
/* virtual methods */
- object_class->finalize = finalize;
+ object_class->dispose = dispose;
/* signals */
signals[CONNECTION_ACTIVATED] =
diff --git a/src/vpn-manager/nm-vpn-manager.h b/src/vpn-manager/nm-vpn-manager.h
index d07aa25099..f14844a9d4 100644
--- a/src/vpn-manager/nm-vpn-manager.h
+++ b/src/vpn-manager/nm-vpn-manager.h
@@ -83,4 +83,7 @@ void nm_vpn_manager_add_active_connections (NMVPNManager *manager,
GSList *nm_vpn_manager_get_active_connections (NMVPNManager *manager);
+NMConnection *nm_vpn_manager_get_connection_for_active (NMVPNManager *manager,
+ const char *active_path);
+
#endif /* NM_VPN_VPN_MANAGER_H */
diff --git a/src/vpn-manager/nm-vpn-service.c b/src/vpn-manager/nm-vpn-service.c
index bdbb3774a0..3d44d9004b 100644
--- a/src/vpn-manager/nm-vpn-service.c
+++ b/src/vpn-manager/nm-vpn-service.c
@@ -15,10 +15,11 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2005 - 2008 Red Hat, Inc.
+ * Copyright (C) 2005 - 2010 Red Hat, Inc.
* Copyright (C) 2005 - 2008 Novell, Inc.
*/
+#include <config.h>
#include <glib.h>
#include <string.h>
#include <dbus/dbus.h>
@@ -36,125 +37,94 @@
G_DEFINE_TYPE (NMVPNService, nm_vpn_service, G_TYPE_OBJECT)
typedef struct {
+ gboolean disposed;
+
NMDBusManager *dbus_mgr;
char *name;
char *dbus_service;
char *program;
+ char *namefile;
GPid pid;
GSList *connections;
- guint service_start_timeout;
- guint service_child_watch;
+ guint start_timeout;
+ guint quit_timeout;
+ guint child_watch;
gulong name_owner_id;
} NMVPNServicePrivate;
#define NM_VPN_SERVICE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_VPN_SERVICE, NMVPNServicePrivate))
-#define VPN_CONNECTION_GROUP "VPN Connection"
-
-static GKeyFile *
-find_service_file (const char *name)
-{
- GDir *dir;
- const char *fn;
- GKeyFile *key_file = NULL;
-
- dir = g_dir_open (VPN_NAME_FILES_DIR, 0, NULL);
- if (!dir)
- return NULL;
-
- while ((fn = g_dir_read_name (dir))) {
- char *path;
- gboolean found = FALSE;
-
- /* only parse filenames that end with .name */
- if (!g_str_has_suffix (fn, ".name"))
- continue;
-
- key_file = g_key_file_new ();
- path = g_build_filename (VPN_NAME_FILES_DIR, fn, NULL);
-
- if (g_key_file_load_from_file (key_file, path, G_KEY_FILE_NONE, NULL)) {
- gchar *val;
-
- val = g_key_file_get_string (key_file, VPN_CONNECTION_GROUP, "service", NULL);
- if (val) {
- if (!strcmp (val, name))
- found = TRUE;
- g_free (val);
- }
- }
-
- g_free (path);
-
- if (found)
- break;
-
- g_key_file_free (key_file);
- key_file = NULL;
- }
-
- g_dir_close (dir);
-
- return key_file;
-}
-
NMVPNService *
-nm_vpn_service_new (const char *name)
+nm_vpn_service_new (const char *namefile, GError **error)
{
- GKeyFile *key_file;
- NMVPNService *service = NULL;
- NMVPNServicePrivate *priv;
- char *dbus_service = NULL;
- char *program = NULL;
- gboolean success = FALSE;
+ NMVPNService *self = NULL;
+ GKeyFile *kf;
+ char *dbus_service = NULL, *program = NULL, *name = NULL;
- g_return_val_if_fail (name != NULL, NULL);
+ g_return_val_if_fail (namefile != NULL, NULL);
+ g_return_val_if_fail (g_path_is_absolute (namefile), NULL);
- key_file = find_service_file (name);
- if (!key_file)
+ kf = g_key_file_new ();
+ if (!g_key_file_load_from_file (kf, namefile, G_KEY_FILE_NONE, error)) {
+ g_key_file_free (kf);
return NULL;
+ }
- dbus_service = g_key_file_get_string (key_file, VPN_CONNECTION_GROUP, "service", NULL);
- if (!dbus_service)
+ dbus_service = g_key_file_get_string (kf, VPN_CONNECTION_GROUP, "service", NULL);
+ if (!dbus_service) {
+ g_set_error (error, 0, 0, "VPN service file %s had no 'service' key", namefile);
goto out;
+ }
- program = g_key_file_get_string (key_file, VPN_CONNECTION_GROUP, "program", NULL);
- if (!program)
+ program = g_key_file_get_string (kf, VPN_CONNECTION_GROUP, "program", NULL);
+ if (!program) {
+ g_set_error (error, 0, 0, "VPN service file %s had no 'program' key", namefile);
goto out;
+ }
- service = (NMVPNService *) g_object_new (NM_TYPE_VPN_SERVICE, NULL);
- if (!service)
+ name = g_key_file_get_string (kf, VPN_CONNECTION_GROUP, "name", NULL);
+ if (!name) {
+ g_set_error (error, 0, 0, "VPN service file %s had no 'name' key", namefile);
goto out;
+ }
- priv = NM_VPN_SERVICE_GET_PRIVATE (service);
-
- priv->name = g_strdup (name);
- priv->dbus_service = dbus_service;
- priv->program = program;
+ self = (NMVPNService *) g_object_new (NM_TYPE_VPN_SERVICE, NULL);
+ if (!self) {
+ g_set_error (error, 0, 0, "out of memory creating VPN service object");
+ goto out;
+ }
- success = TRUE;
+ NM_VPN_SERVICE_GET_PRIVATE (self)->name = g_strdup (name);
+ NM_VPN_SERVICE_GET_PRIVATE (self)->dbus_service = g_strdup (dbus_service);
+ NM_VPN_SERVICE_GET_PRIVATE (self)->program = g_strdup (program);
+ NM_VPN_SERVICE_GET_PRIVATE (self)->namefile = g_strdup (namefile);
out:
- g_key_file_free (key_file);
+ g_key_file_free (kf);
+ g_free (dbus_service);
+ g_free (program);
+ g_free (name);
+ return self;
+}
- if (!success) {
- g_free (dbus_service);
- g_free (program);
- }
+const char *
+nm_vpn_service_get_dbus_service (NMVPNService *service)
+{
+ g_return_val_if_fail (NM_IS_VPN_SERVICE (service), NULL);
- return service;
+ return NM_VPN_SERVICE_GET_PRIVATE (service)->dbus_service;
}
const char *
-nm_vpn_service_get_name (NMVPNService *service)
+nm_vpn_service_get_name_file (NMVPNService *service)
{
g_return_val_if_fail (NM_IS_VPN_SERVICE (service), NULL);
- return NM_VPN_SERVICE_GET_PRIVATE (service)->name;
+ return NM_VPN_SERVICE_GET_PRIVATE (service)->namefile;
}
-static void
+void
nm_vpn_service_connections_stop (NMVPNService *service,
gboolean fail,
NMVPNConnectionStateReason reason)
@@ -175,6 +145,17 @@ nm_vpn_service_connections_stop (NMVPNService *service,
g_slist_free (copy);
}
+static void
+clear_quit_timeout (NMVPNService *self)
+{
+ NMVPNServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (self);
+
+ if (priv->quit_timeout) {
+ g_source_remove (priv->quit_timeout);
+ priv->quit_timeout = 0;
+ }
+}
+
/*
* nm_vpn_service_child_setup
*
@@ -200,21 +181,22 @@ vpn_service_watch_cb (GPid pid, gint status, gpointer user_data)
if (err != 0) {
nm_log_warn (LOGD_VPN, "VPN service '%s' exited with error: %d",
- nm_vpn_service_get_name (service), WSTOPSIG (status));
+ priv->name, WSTOPSIG (status));
}
} else if (WIFSTOPPED (status)) {
nm_log_warn (LOGD_VPN, "VPN service '%s' stopped unexpectedly with signal %d",
- nm_vpn_service_get_name (service), WSTOPSIG (status));
+ priv->name, WSTOPSIG (status));
} else if (WIFSIGNALED (status)) {
nm_log_warn (LOGD_VPN, "VPN service '%s' died with signal %d",
- nm_vpn_service_get_name (service), WTERMSIG (status));
+ priv->name, WTERMSIG (status));
} else {
nm_log_warn (LOGD_VPN, "VPN service '%s' died from an unknown cause",
- nm_vpn_service_get_name (service));
+ priv->name);
}
priv->pid = 0;
- priv->service_child_watch = 0;
+ priv->child_watch = 0;
+ clear_quit_timeout (service);
nm_vpn_service_connections_stop (service, TRUE, NM_VPN_CONNECTION_STATE_REASON_SERVICE_STOPPED);
}
@@ -222,14 +204,12 @@ vpn_service_watch_cb (GPid pid, gint status, gpointer user_data)
static gboolean
nm_vpn_service_timeout (gpointer data)
{
- NMVPNService *service = NM_VPN_SERVICE (data);
-
- nm_log_warn (LOGD_VPN, "VPN service '%s' did not start in time, cancelling connections",
- nm_vpn_service_get_name (service));
-
- NM_VPN_SERVICE_GET_PRIVATE (service)->service_start_timeout = 0;
- nm_vpn_service_connections_stop (service, TRUE, NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_TIMEOUT);
+ NMVPNService *self = NM_VPN_SERVICE (data);
+ NMVPNServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (self);
+ nm_log_warn (LOGD_VPN, "VPN service '%s' start timed out", priv->name);
+ priv->start_timeout = 0;
+ nm_vpn_service_connections_stop (self, TRUE, NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_TIMEOUT);
return FALSE;
}
@@ -253,13 +233,15 @@ nm_vpn_service_daemon_exec (NMVPNService *service, GError **error)
&spawn_error);
if (success) {
nm_log_info (LOGD_VPN, "VPN service '%s' started (%s), PID %d",
- nm_vpn_service_get_name (service), priv->dbus_service, priv->pid);
+ priv->name, priv->dbus_service, priv->pid);
- priv->service_child_watch = g_child_watch_add (priv->pid, vpn_service_watch_cb, service);
- priv->service_start_timeout = g_timeout_add_seconds (5, nm_vpn_service_timeout, service);
+ priv->child_watch = g_child_watch_add (priv->pid, vpn_service_watch_cb, service);
+ priv->start_timeout = g_timeout_add_seconds (5, nm_vpn_service_timeout, service);
} else {
nm_log_warn (LOGD_VPN, "VPN service '%s': could not launch the VPN service. error: (%d) %s.",
- nm_vpn_service_get_name (service), spawn_error->code, spawn_error->message);
+ priv->name,
+ spawn_error ? spawn_error->code : -1,
+ spawn_error && spawn_error->message ? spawn_error->message : "(unknown)");
g_set_error (error,
NM_VPN_MANAGER_ERROR, NM_VPN_MANAGER_ERROR_SERVICE_START_FAILED,
@@ -274,9 +256,40 @@ nm_vpn_service_daemon_exec (NMVPNService *service, GError **error)
}
static gboolean
-destroy_service (gpointer data)
+ensure_killed (gpointer data)
+{
+ int pid = GPOINTER_TO_INT (data);
+
+ if (kill (pid, 0) == 0)
+ kill (pid, SIGKILL);
+
+ /* ensure the child is reaped */
+ nm_log_dbg (LOGD_VPN, "waiting for VPN service pid %d to exit", pid);
+ waitpid (pid, NULL, 0);
+ nm_log_dbg (LOGD_VPN, "VPN service pid %d cleaned up", pid);
+
+ return FALSE;
+}
+
+static gboolean
+service_quit (gpointer user_data)
{
- g_object_unref (data);
+ NMVPNServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (user_data);
+
+ if (priv->pid) {
+ if (kill (priv->pid, SIGTERM) == 0)
+ g_timeout_add_seconds (2, ensure_killed, GINT_TO_POINTER (priv->pid));
+ else {
+ kill (priv->pid, SIGKILL);
+
+ /* ensure the child is reaped */
+ nm_log_dbg (LOGD_VPN, "waiting for VPN service pid %d to exit", priv->pid);
+ waitpid (priv->pid, NULL, 0);
+ nm_log_dbg (LOGD_VPN, "VPN service pid %d cleaned up", priv->pid);
+ }
+ priv->pid = 0;
+ }
+ priv->quit_timeout = 0;
return FALSE;
}
@@ -297,8 +310,9 @@ connection_vpn_state_changed (NMVPNConnection *connection,
g_object_unref (connection);
if (priv->connections == NULL) {
- /* schedule a timeout (10 seconds) to destroy the service */
- g_timeout_add_seconds (10, destroy_service, user_data);
+ /* Tell the service to quit in a few seconds */
+ if (!priv->quit_timeout)
+ priv->quit_timeout = g_timeout_add_seconds (5, service_quit, user_data);
}
break;
default:
@@ -325,6 +339,8 @@ nm_vpn_service_activate (NMVPNService *service,
priv = NM_VPN_SERVICE_GET_PRIVATE (service);
+ clear_quit_timeout (service);
+
vpn = nm_vpn_connection_new (connection, act_request, device);
g_signal_connect (vpn, "vpn-state-changed",
G_CALLBACK (connection_vpn_state_changed),
@@ -335,9 +351,8 @@ nm_vpn_service_activate (NMVPNService *service,
if (nm_dbus_manager_name_has_owner (priv->dbus_mgr, priv->dbus_service)) {
// FIXME: fill in error when errors happen
nm_vpn_connection_activate (vpn);
- } else if (priv->service_start_timeout == 0) {
- nm_log_info (LOGD_VPN, "Starting VPN service '%s'...",
- nm_vpn_service_get_name (service));
+ } else if (priv->start_timeout == 0) {
+ nm_log_info (LOGD_VPN, "Starting VPN service '%s'...", priv->name);
if (!nm_vpn_service_daemon_exec (service, error))
vpn = NULL;
}
@@ -364,14 +379,15 @@ nm_vpn_service_name_owner_changed (NMDBusManager *mgr,
NMVPNServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (service);
gboolean old_owner_good;
gboolean new_owner_good;
+ GSList *iter;
if (strcmp (name, priv->dbus_service))
return;
/* Service changed, no need to wait for the timeout any longer */
- if (priv->service_start_timeout) {
- g_source_remove (priv->service_start_timeout);
- priv->service_start_timeout = 0;
+ if (priv->start_timeout) {
+ g_source_remove (priv->start_timeout);
+ priv->start_timeout = 0;
}
old_owner_good = (old && (strlen (old) > 0));
@@ -379,18 +395,14 @@ nm_vpn_service_name_owner_changed (NMDBusManager *mgr,
if (!old_owner_good && new_owner_good) {
/* service just appeared */
- GSList *iter;
-
- nm_log_info (LOGD_VPN, "VPN service '%s' appeared, activating connections",
- nm_vpn_service_get_name (service));
+ nm_log_info (LOGD_VPN, "VPN service '%s' appeared; activating connections", priv->name);
+ clear_quit_timeout (service);
for (iter = priv->connections; iter; iter = iter->next)
nm_vpn_connection_activate (NM_VPN_CONNECTION (iter->data));
-
} else if (old_owner_good && !new_owner_good) {
/* service went away */
- nm_log_info (LOGD_VPN, "VPN service '%s' disappeared, cancelling connections",
- nm_vpn_service_get_name (service));
+ nm_log_info (LOGD_VPN, "VPN service '%s' disappeared", priv->name);
nm_vpn_service_connections_stop (service, TRUE, NM_VPN_CONNECTION_STATE_REASON_SERVICE_STOPPED);
}
}
@@ -398,40 +410,28 @@ nm_vpn_service_name_owner_changed (NMDBusManager *mgr,
/******************************************************************************/
static void
-nm_vpn_service_init (NMVPNService *service)
+nm_vpn_service_init (NMVPNService *self)
{
- NMVPNServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (service);
+ NMVPNServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (self);
priv->dbus_mgr = nm_dbus_manager_get ();
-
priv->name_owner_id = g_signal_connect (priv->dbus_mgr, "name-owner-changed",
- G_CALLBACK (nm_vpn_service_name_owner_changed),
- service);
-}
-
-static gboolean
-ensure_killed (gpointer data)
-{
- int pid = GPOINTER_TO_INT (data);
-
- if (kill (pid, 0) == 0)
- kill (pid, SIGKILL);
-
- /* ensure the child is reaped */
- nm_log_dbg (LOGD_VPN, "waiting for VPN service pid %d to exit", pid);
- waitpid (pid, NULL, 0);
- nm_log_dbg (LOGD_VPN, "VPN service pid %d cleaned up", pid);
-
- return FALSE;
+ G_CALLBACK (nm_vpn_service_name_owner_changed),
+ self);
}
static void
-finalize (GObject *object)
+dispose (GObject *object)
{
- NMVPNServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (object);
+ NMVPNService *self = NM_VPN_SERVICE (object);
+ NMVPNServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (self);
- if (priv->service_start_timeout)
- g_source_remove (priv->service_start_timeout);
+ if (priv->disposed)
+ goto out;
+ priv->disposed = TRUE;
+
+ if (priv->start_timeout)
+ g_source_remove (priv->start_timeout);
nm_vpn_service_connections_stop (NM_VPN_SERVICE (object),
FALSE,
@@ -439,31 +439,21 @@ finalize (GObject *object)
g_signal_handler_disconnect (priv->dbus_mgr, priv->name_owner_id);
- if (priv->service_child_watch)
- g_source_remove (priv->service_child_watch);
+ if (priv->child_watch)
+ g_source_remove (priv->child_watch);
- if (priv->pid) {
- if (kill (priv->pid, SIGTERM) == 0)
- g_timeout_add_seconds (2, ensure_killed, GINT_TO_POINTER (priv->pid));
- else {
- kill (priv->pid, SIGKILL);
-
- /* ensure the child is reaped */
- nm_log_dbg (LOGD_VPN, "waiting for VPN service pid %d to exit", priv->pid);
- waitpid (priv->pid, NULL, 0);
- nm_log_dbg (LOGD_VPN, "VPN service pid %d cleaned up", priv->pid);
- }
-
- priv->pid = 0;
- }
+ clear_quit_timeout (self);
+ service_quit (self);
g_object_unref (priv->dbus_mgr);
g_free (priv->name);
g_free (priv->dbus_service);
g_free (priv->program);
+ g_free (priv->namefile);
- G_OBJECT_CLASS (nm_vpn_service_parent_class)->finalize (object);
+out:
+ G_OBJECT_CLASS (nm_vpn_service_parent_class)->dispose (object);
}
static void
@@ -474,5 +464,5 @@ nm_vpn_service_class_init (NMVPNServiceClass *service_class)
g_type_class_add_private (service_class, sizeof (NMVPNServicePrivate));
/* virtual methods */
- object_class->finalize = finalize;
+ object_class->dispose = dispose;
}
diff --git a/src/vpn-manager/nm-vpn-service.h b/src/vpn-manager/nm-vpn-service.h
index 9c5e0eefc9..c7c1b0366a 100644
--- a/src/vpn-manager/nm-vpn-service.h
+++ b/src/vpn-manager/nm-vpn-service.h
@@ -35,6 +35,8 @@
#define NM_IS_VPN_SERVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NM_TYPE_VPN_SERVICE))
#define NM_VPN_SERVICE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_VPN_SERVICE, NMVPNServiceClass))
+#define VPN_CONNECTION_GROUP "VPN Connection"
+
typedef struct {
GObject parent;
} NMVPNService;
@@ -45,9 +47,13 @@ typedef struct {
GType nm_vpn_service_get_type (void);
-NMVPNService * nm_vpn_service_new (const char *service_name);
+NMVPNService * nm_vpn_service_new (const char *namefile, GError **error);
+
+/* Returns the VPN service's D-Bus service name */
+const char *nm_vpn_service_get_dbus_service (NMVPNService *service);
-const char * nm_vpn_service_get_name (NMVPNService *service);
+/* Returns the path of the VPN service's .name file */
+const char *nm_vpn_service_get_name_file (NMVPNService *service);
NMVPNConnection * nm_vpn_service_activate (NMVPNService *service,
NMConnection *connection,
@@ -57,4 +63,8 @@ NMVPNConnection * nm_vpn_service_activate (NMVPNService *service,
GSList * nm_vpn_service_get_active_connections (NMVPNService *service);
+void nm_vpn_service_connections_stop (NMVPNService *service,
+ gboolean fail,
+ NMVPNConnectionStateReason reason);
+
#endif /* NM_VPN_VPN_SERVICE_H */
diff --git a/system-settings/plugins/Makefile.am b/system-settings/plugins/Makefile.am
index 94f75600d1..5df57d5ea7 100644
--- a/system-settings/plugins/Makefile.am
+++ b/system-settings/plugins/Makefile.am
@@ -15,3 +15,7 @@ endif
if TARGET_DEBIAN
SUBDIRS+=ifupdown
endif
+
+if TARGET_GENTOO
+SUBDIRS+=ifnet
+endif
diff --git a/system-settings/plugins/ifcfg-rh/Makefile.am b/system-settings/plugins/ifcfg-rh/Makefile.am
index 3f0bf222fd..54d686bb48 100644
--- a/system-settings/plugins/ifcfg-rh/Makefile.am
+++ b/system-settings/plugins/ifcfg-rh/Makefile.am
@@ -1,7 +1,7 @@
SUBDIRS=. tests
nm-ifcfg-rh-glue.h: nm-ifcfg-rh.xml
- dbus-binding-tool --prefix=nm_ifcfg_rh --mode=glib-server --output=$@ $<
+ $(AM_V_GEN) dbus-binding-tool --prefix=nm_ifcfg_rh --mode=glib-server --output=$@ $<
BUILT_SOURCES = \
nm-ifcfg-rh-glue.h
diff --git a/system-settings/plugins/ifcfg-rh/common.h b/system-settings/plugins/ifcfg-rh/common.h
index f5ab1c896d..095e20e927 100644
--- a/system-settings/plugins/ifcfg-rh/common.h
+++ b/system-settings/plugins/ifcfg-rh/common.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.
*
- * (C) Copyright 2008 - 2009 Red Hat, Inc.
+ * (C) Copyright 2008 - 2010 Red Hat, Inc.
*/
#ifndef __COMMON_H__
@@ -33,15 +33,19 @@
#define ORIG_TAG ".orig"
#define REJ_TAG ".rej"
#define RPMNEW_TAG ".rpmnew"
+#define AUGNEW_TAG ".augnew"
+#define AUGTMP_TAG ".augtmp"
#define IFCFG_DIR SYSCONFDIR"/sysconfig/network-scripts"
#define IFCFG_PLUGIN_NAME "ifcfg-rh"
-#define IFCFG_PLUGIN_INFO "(c) 2007 - 2008 Red Hat, Inc. To report bugs please use the NetworkManager mailing list."
+#define IFCFG_PLUGIN_INFO "(c) 2007 - 2010 Red Hat, Inc. To report bugs please use the NetworkManager mailing list."
#define TYPE_ETHERNET "Ethernet"
#define TYPE_WIRELESS "Wireless"
+#define TYPE_BRIDGE "Bridge"
+#define IFCFG_PLUGIN_ERROR (ifcfg_plugin_error_quark ())
GQuark ifcfg_plugin_error_quark (void);
diff --git a/system-settings/plugins/ifcfg-rh/nm-ifcfg-connection.c b/system-settings/plugins/ifcfg-rh/nm-ifcfg-connection.c
index b54bc8af21..52ce6e152d 100644
--- a/system-settings/plugins/ifcfg-rh/nm-ifcfg-connection.c
+++ b/system-settings/plugins/ifcfg-rh/nm-ifcfg-connection.c
@@ -178,6 +178,25 @@ update (NMSettingsConnectionInterface *connection,
{
NMIfcfgConnectionPrivate *priv = NM_IFCFG_CONNECTION_GET_PRIVATE (connection);
GError *error = NULL;
+ NMConnection *reread;
+ char *unmanaged = NULL, *keyfile = NULL, *routefile = NULL, *route6file = NULL;
+
+ /* To ensure we don't rewrite files that are only changed from other
+ * processes on-disk, read the existing connection back in and only rewrite
+ * it if it's really changed.
+ */
+ reread = connection_from_file (priv->filename, NULL, NULL, NULL,
+ &unmanaged, &keyfile, &routefile, &route6file,
+ NULL, NULL);
+ g_free (unmanaged);
+ g_free (keyfile);
+ g_free (routefile);
+ g_free (route6file);
+
+ if (reread && nm_connection_compare (NM_CONNECTION (connection),
+ reread,
+ NM_SETTING_COMPARE_FLAG_EXACT))
+ goto out;
if (!writer_update_connection (NM_CONNECTION (connection),
IFCFG_DIR,
@@ -189,6 +208,9 @@ update (NMSettingsConnectionInterface *connection,
return FALSE;
}
+out:
+ if (reread)
+ g_object_unref (reread);
return parent_settings_connection_iface->update (connection, callback, user_data);
}
diff --git a/system-settings/plugins/ifcfg-rh/plugin.c b/system-settings/plugins/ifcfg-rh/plugin.c
index 47ce0075f8..8dce0334a5 100644
--- a/system-settings/plugins/ifcfg-rh/plugin.c
+++ b/system-settings/plugins/ifcfg-rh/plugin.c
@@ -146,8 +146,7 @@ read_one_connection (SCPluginIfcfg *plugin, const char *filename)
if (nm_ifcfg_connection_get_unmanaged_spec (connection)) {
PLUGIN_PRINT (IFCFG_PLUGIN_NAME, "Ignoring connection '%s' and its "
- "device because NM_CONTROLLED was false.", cid);
- g_signal_emit_by_name (plugin, NM_SYSTEM_CONFIG_INTERFACE_UNMANAGED_SPECS_CHANGED);
+ "device due to NM_CONTROLLED/BRIDGE/VLAN.", cid);
} else {
/* Wait for the connection to become unmanaged once it knows the
* UDI of it's device, if/when the device gets plugged in.
@@ -164,7 +163,7 @@ read_one_connection (SCPluginIfcfg *plugin, const char *filename)
PLUGIN_PRINT (IFCFG_PLUGIN_NAME, " error: %s",
(error && error->message) ? error->message : "(unknown)");
}
- g_error_free (error);
+ g_clear_error (&error);
}
return connection;
@@ -218,8 +217,6 @@ connection_changed_handler (SCPluginIfcfg *plugin,
g_return_if_fail (do_remove != NULL);
g_return_if_fail (do_new != NULL);
- PLUGIN_PRINT (IFCFG_PLUGIN_NAME, "updating %s", path);
-
new = (NMIfcfgConnection *) nm_ifcfg_connection_new (path, &error, &ignore_error);
if (!new) {
/* errors reading connection; remove it */
@@ -234,8 +231,19 @@ connection_changed_handler (SCPluginIfcfg *plugin,
return;
}
+
/* Successfully read connection changes */
+ /* When the connections are the same, nothing is done */
+ if (nm_connection_compare (NM_CONNECTION (connection),
+ NM_CONNECTION (new),
+ NM_SETTING_COMPARE_FLAG_EXACT)) {
+ g_object_unref (new);
+ return;
+ }
+
+ PLUGIN_PRINT (IFCFG_PLUGIN_NAME, "updating %s", path);
+
old_unmanaged = nm_ifcfg_connection_get_unmanaged_spec (NM_IFCFG_CONNECTION (connection));
new_unmanaged = nm_ifcfg_connection_get_unmanaged_spec (NM_IFCFG_CONNECTION (new));
@@ -305,7 +313,9 @@ handle_connection_remove_or_new (SCPluginIfcfg *plugin,
if (do_new) {
connection = read_one_connection (plugin, path);
if (connection) {
- if (!nm_ifcfg_connection_get_unmanaged_spec (connection))
+ if (nm_ifcfg_connection_get_unmanaged_spec (connection))
+ g_signal_emit_by_name (plugin, NM_SYSTEM_CONFIG_INTERFACE_UNMANAGED_SPECS_CHANGED);
+ else
g_signal_emit_by_name (plugin, NM_SYSTEM_CONFIG_INTERFACE_CONNECTION_ADDED, connection);
}
}
@@ -334,25 +344,25 @@ dir_changed (GFileMonitor *monitor,
g_free (path);
connection = g_hash_table_lookup (priv->connections, name);
- if (!connection) {
- do_new = TRUE;
- } else {
- switch (event_type) {
- case G_FILE_MONITOR_EVENT_DELETED:
- PLUGIN_PRINT (IFCFG_PLUGIN_NAME, "removed %s.", name);
- do_remove = TRUE;
- break;
- case G_FILE_MONITOR_EVENT_CREATED:
- case G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT:
- /* Update */
+ switch (event_type) {
+ case G_FILE_MONITOR_EVENT_DELETED:
+ PLUGIN_PRINT (IFCFG_PLUGIN_NAME, "removed %s.", name);
+ if (connection)
+ handle_connection_remove_or_new (plugin, name, connection, TRUE, FALSE);
+ break;
+ case G_FILE_MONITOR_EVENT_CREATED:
+ case G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT:
+ /* Update */
+ if (!connection)
+ do_new = TRUE;
+ else
connection_changed_handler (plugin, name, connection, &do_remove, &do_new);
- break;
- default:
- break;
- }
- }
- handle_connection_remove_or_new (plugin, name, connection, do_remove, do_new);
+ handle_connection_remove_or_new (plugin, name, connection, do_remove, do_new);
+ break;
+ default:
+ break;
+ }
g_free (name);
}
@@ -544,7 +554,7 @@ impl_ifcfgrh_get_ifcfg_details (SCPluginIfcfg *plugin,
}
connection = g_hash_table_lookup (priv->connections, in_ifcfg);
- if (!connection) {
+ if (!connection || nm_ifcfg_connection_get_unmanaged_spec (connection)) {
g_set_error (error,
NM_SETTINGS_INTERFACE_ERROR,
NM_SETTINGS_INTERFACE_ERROR_INVALID_CONNECTION,
diff --git a/system-settings/plugins/ifcfg-rh/reader.c b/system-settings/plugins/ifcfg-rh/reader.c
index 28244206a9..b4ee1307b9 100644
--- a/system-settings/plugins/ifcfg-rh/reader.c
+++ b/system-settings/plugins/ifcfg-rh/reader.c
@@ -18,6 +18,7 @@
* Copyright (C) 2008 - 2010 Red Hat, Inc.
*/
+#include <config.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
@@ -185,7 +186,7 @@ make_connection_setting (const char *file,
}
static gboolean
-read_mac_address (shvarFile *ifcfg, GByteArray **array, GError **error)
+read_mac_address (shvarFile *ifcfg, const char *key, GByteArray **array, GError **error)
{
char *value = NULL;
struct ether_addr *mac;
@@ -196,7 +197,7 @@ read_mac_address (shvarFile *ifcfg, GByteArray **array, GError **error)
g_return_val_if_fail (error != NULL, FALSE);
g_return_val_if_fail (*error == NULL, FALSE);
- value = svGetValue (ifcfg, "HWADDR", FALSE);
+ value = svGetValue (ifcfg, key, FALSE);
if (!value || !strlen (value)) {
g_free (value);
return TRUE;
@@ -205,8 +206,8 @@ read_mac_address (shvarFile *ifcfg, GByteArray **array, GError **error)
mac = ether_aton (value);
if (!mac) {
g_free (value);
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
- "The MAC address '%s' was invalid.", value);
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ "%s: the MAC address '%s' was invalid.", key, value);
return FALSE;
}
@@ -282,23 +283,23 @@ fill_ip4_setting_from_ibft (shvarFile *ifcfg,
return FALSE;
if (!WIFEXITED (status)) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"%s exited abnormally.", iscsiadm_path);
goto done;
}
if (WEXITSTATUS (status) != 0) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"%s exited with error %d. Message: '%s'",
iscsiadm_path, WEXITSTATUS (status), err ? err : "(none)");
goto done;
}
- if (!read_mac_address (ifcfg, &ifcfg_mac, error))
+ if (!read_mac_address (ifcfg, "HWADDR", &ifcfg_mac, error))
goto done;
/* Ensure we got a MAC */
if (!ifcfg_mac) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Missing device MAC address (no HWADDR tag present).");
goto done;
}
@@ -488,7 +489,7 @@ read_ip4_address (shvarFile *ifcfg,
*out_addr = ip4_addr.s_addr;
success = TRUE;
} else {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Invalid %s IP4 address '%s'", tag, value);
}
g_free (value);
@@ -514,7 +515,7 @@ parse_ip6_address (const char *value,
*out_addr = ip6_addr;
success = TRUE;
} else {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Invalid IP6 address '%s'", value);
}
return success;
@@ -588,7 +589,7 @@ read_full_ip4_address (shvarFile *ifcfg,
errno = 0;
prefix = strtol (value, NULL, 10);
if (errno || prefix <= 0 || prefix > 32) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Invalid IP4 prefix '%s'", value);
g_free (value);
goto error;
@@ -619,7 +620,7 @@ read_full_ip4_address (shvarFile *ifcfg,
/* Validate the prefix */
if (nm_ip4_address_get_prefix (addr) > 32) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Missing or invalid IP4 prefix '%d'",
nm_ip4_address_get_prefix (addr));
goto error;
@@ -682,12 +683,7 @@ read_one_ip4_route (shvarFile *ifcfg,
/* Next hop */
if (!read_ip4_address (ifcfg, gw_tag, &tmp, error))
goto out;
- if (!tmp) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
- "Missing or invalid IP4 gateway address '%d'",
- tmp);
- goto out;
- }
+ /* No need to check tmp, because we don't make distinction between missing GATEWAY IP and 0.0.0.0 */
nm_ip4_route_set_next_hop (route, tmp);
/* Prefix */
@@ -698,7 +694,7 @@ read_one_ip4_route (shvarFile *ifcfg,
/* Validate the prefix */
if ( !nm_ip4_route_get_prefix (route)
|| nm_ip4_route_get_prefix (route) > 32) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Missing or invalid IP4 prefix '%d'",
nm_ip4_route_get_prefix (route));
goto out;
@@ -712,7 +708,7 @@ read_one_ip4_route (shvarFile *ifcfg,
errno = 0;
metric = strtol (value, NULL, 10);
if (errno || metric < 0) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Invalid IP4 route metric '%s'", value);
g_free (value);
goto out;
@@ -796,7 +792,7 @@ read_route_file_legacy (const char *filename, NMSettingIP4Config *s_ip4, GError
g_regex_match (regex_to2, *iter, 0, &match_info);
if (!g_match_info_matches (match_info)) {
g_match_info_free (match_info);
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Missing IP4 route destination address in record: '%s'", *iter);
goto error;
}
@@ -806,7 +802,7 @@ read_route_file_legacy (const char *filename, NMSettingIP4Config *s_ip4, GError
if (!strcmp (dest, "default"))
strcpy (dest, "0.0.0.0");
if (inet_pton (AF_INET, dest, &ip4_addr) != 1) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Invalid IP4 route destination address '%s'", dest);
g_free (dest);
goto error;
@@ -821,7 +817,7 @@ read_route_file_legacy (const char *filename, NMSettingIP4Config *s_ip4, GError
errno = 0;
prefix_int = strtol (prefix, NULL, 10);
if (errno || prefix_int < 0 || prefix_int > 32) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Invalid IP4 route destination prefix '%s'", prefix);
g_free (prefix);
goto error;
@@ -835,14 +831,14 @@ read_route_file_legacy (const char *filename, NMSettingIP4Config *s_ip4, GError
g_regex_match (regex_via, *iter, 0, &match_info);
if (!g_match_info_matches (match_info)) {
g_match_info_free (match_info);
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Missing IP4 route gateway address in record: '%s'", *iter);
goto error;
}
next_hop = g_match_info_fetch (match_info, 1);
g_match_info_free (match_info);
if (inet_pton (AF_INET, next_hop, &ip4_addr) != 1) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Invalid IP4 route gateway address '%s'", next_hop);
g_free (next_hop);
goto error;
@@ -859,7 +855,7 @@ read_route_file_legacy (const char *filename, NMSettingIP4Config *s_ip4, GError
metric_int = strtol (metric, NULL, 10);
if (errno || metric_int < 0) {
g_match_info_free (match_info);
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Invalid IP4 route metric '%s'", metric);
g_free (metric);
goto error;
@@ -905,7 +901,7 @@ parse_full_ip6_address (const char *addr_str, GError **error)
/* Split the adddress and prefix */
list = g_strsplit_set (addr_str, "/", 2);
if (g_strv_length (list) < 1) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Invalid IP6 address '%s'", addr_str);
goto error;
}
@@ -929,7 +925,7 @@ parse_full_ip6_address (const char *addr_str, GError **error)
errno = 0;
prefix = strtol (prefix_tag, NULL, 10);
if (errno || prefix <= 0 || prefix > 128) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Invalid IP6 prefix '%s'", prefix_tag);
goto error;
}
@@ -1018,7 +1014,7 @@ read_route6_file (const char *filename, NMSettingIP6Config *s_ip6, GError **erro
g_regex_match (regex_to2, *iter, 0, &match_info);
if (!g_match_info_matches (match_info)) {
g_match_info_free (match_info);
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Missing IP6 route destination address in record: '%s'", *iter);
goto error;
}
@@ -1028,7 +1024,7 @@ read_route6_file (const char *filename, NMSettingIP6Config *s_ip6, GError **erro
if (!strcmp (dest, "default"))
strcpy (dest, "::");
if (inet_pton (AF_INET6, dest, &ip6_addr) != 1) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Invalid IP6 route destination address '%s'", dest);
g_free (dest);
goto error;
@@ -1043,7 +1039,7 @@ read_route6_file (const char *filename, NMSettingIP6Config *s_ip6, GError **erro
errno = 0;
prefix_int = strtol (prefix, NULL, 10);
if (errno || prefix_int < 0 || prefix_int > 128) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Invalid IP6 route destination prefix '%s'", prefix);
g_free (prefix);
goto error;
@@ -1057,14 +1053,14 @@ read_route6_file (const char *filename, NMSettingIP6Config *s_ip6, GError **erro
g_regex_match (regex_via, *iter, 0, &match_info);
if (!g_match_info_matches (match_info)) {
g_match_info_free (match_info);
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Missing IP6 route gateway address in record: '%s'", *iter);
goto error;
}
next_hop = g_match_info_fetch (match_info, 1);
g_match_info_free (match_info);
if (inet_pton (AF_INET6, next_hop, &ip6_addr) != 1) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Invalid IP6 route gateway address '%s'", next_hop);
g_free (next_hop);
goto error;
@@ -1081,7 +1077,7 @@ read_route6_file (const char *filename, NMSettingIP6Config *s_ip6, GError **erro
metric_int = strtol (metric, NULL, 10);
if (errno || metric_int < 0 || metric_int > G_MAXUINT32) {
g_match_info_free (match_info);
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Invalid IP6 route metric '%s'", metric);
g_free (metric);
goto error;
@@ -1129,7 +1125,7 @@ make_ip4_setting (shvarFile *ifcfg,
s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
if (!s_ip4) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Could not allocate IP4 setting");
return NULL;
}
@@ -1190,7 +1186,7 @@ make_ip4_setting (shvarFile *ifcfg,
} else if (!g_ascii_strcasecmp (value, "none") || !g_ascii_strcasecmp (value, "static")) {
/* Static IP */
} else if (strlen (value)) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Unknown BOOTPROTO '%s'", value);
g_free (value);
goto done;
@@ -1317,7 +1313,7 @@ make_ip4_setting (shvarFile *ifcfg,
/* Static routes - route-<name> file */
route_path = utils_get_route_path (ifcfg->fileName);
if (!route_path) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Could not get route file path for '%s'", ifcfg->fileName);
goto done;
}
@@ -1397,7 +1393,7 @@ make_ip6_setting (shvarFile *ifcfg,
s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
if (!s_ip6) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Could not allocate IP6 setting");
return NULL;
}
@@ -1562,7 +1558,7 @@ make_ip6_setting (shvarFile *ifcfg,
/* Read static routes from route6-<interface> file */
route6_path = utils_get_route6_path (ifcfg->fileName);
if (!route6_path) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Could not get route6 file path for '%s'", ifcfg->fileName);
goto error;
}
@@ -1618,28 +1614,34 @@ add_one_wep_key (shvarFile *ifcfg,
while (*p) {
if (!g_ascii_isxdigit (*p)) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Invalid hexadecimal WEP key.");
goto out;
}
p++;
}
key = g_strdup (value);
- } else if ( strncmp (value, "s:", 2)
+ } else if ( !strncmp (value, "s:", 2)
&& (strlen (value) == 7 || strlen (value) == 15)) {
- /* ASCII passphrase */
+ /* ASCII key */
char *p = value + 2;
while (*p) {
if (!isascii ((int) (*p))) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
- "Invalid ASCII WEP passphrase.");
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ "Invalid ASCII WEP key.");
goto out;
}
p++;
}
- key = utils_bin2hexstr (value, strlen (value), strlen (value) * 2);
+ /* Remove 's:' prefix.
+ * Don't convert to hex string. wpa_supplicant takes 'wep_key0' option over D-Bus as byte array
+ * and converts it to hex string itself. Even though we convert hex string keys into a bin string
+ * before passing to wpa_supplicant, this prevents two unnecessary conversions. And mainly,
+ * ASCII WEP key doesn't change to HEX WEP key in UI, which could confuse users.
+ */
+ key = g_strdup (value + 2);
}
}
@@ -1647,7 +1649,7 @@ add_one_wep_key (shvarFile *ifcfg,
nm_setting_wireless_security_set_wep_key (s_wsec, key_idx, key);
success = TRUE;
} else
- g_set_error (error, ifcfg_plugin_error_quark (), 0, "Invalid WEP key length.");
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0, "Invalid WEP key length.");
out:
g_free (value);
@@ -1707,7 +1709,7 @@ make_wep_setting (shvarFile *ifcfg,
default_key_idx--; /* convert to [0...3] */
g_object_set (s_wireless_sec, NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX, default_key_idx, NULL);
} else {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Invalid default WEP key '%s'", value);
g_free (value);
goto error;
@@ -1732,15 +1734,15 @@ make_wep_setting (shvarFile *ifcfg,
/* If there's a default key, ensure that key exists */
if ((default_key_idx == 1) && !nm_setting_wireless_security_get_wep_key (s_wireless_sec, 1)) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Default WEP key index was 2, but no valid KEY2 exists.");
goto error;
} else if ((default_key_idx == 2) && !nm_setting_wireless_security_get_wep_key (s_wireless_sec, 2)) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Default WEP key index was 3, but no valid KEY3 exists.");
goto error;
} else if ((default_key_idx == 3) && !nm_setting_wireless_security_get_wep_key (s_wireless_sec, 3)) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Default WEP key index was 4, but no valid KEY4 exists.");
goto error;
}
@@ -1757,7 +1759,7 @@ make_wep_setting (shvarFile *ifcfg,
} else if (!strcmp (lcase, "restricted")) {
g_object_set (s_wireless_sec, NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "shared", NULL);
} else {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Invalid WEP authentication algorithm '%s'",
lcase);
g_free (lcase);
@@ -1775,7 +1777,7 @@ make_wep_setting (shvarFile *ifcfg,
auth_alg = nm_setting_wireless_security_get_auth_alg (s_wireless_sec);
if (auth_alg && !strcmp (auth_alg, "shared")) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"WEP Shared Key authentication is invalid for "
"unencrypted connections.");
goto error;
@@ -1871,7 +1873,7 @@ parse_wpa_psk (shvarFile *ifcfg,
char *psk = NULL, *p, *hashed = NULL;
gboolean quoted = FALSE;
- /* Passphrase must be between 10 and 66 characters in length becuase WPA
+ /* Passphrase must be between 10 and 66 characters in length because WPA
* hex keys are exactly 64 characters (no quoting), and WPA passphrases
* are between 8 and 63 characters (inclusive), plus optional quoting if
* the passphrase contains spaces.
@@ -1889,7 +1891,7 @@ parse_wpa_psk (shvarFile *ifcfg,
psk = svGetValue (ifcfg, "WPA_PSK", TRUE);
if (!psk) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Missing WPA_PSK for WPA-PSK key management");
return NULL;
}
@@ -1903,7 +1905,7 @@ parse_wpa_psk (shvarFile *ifcfg,
/* Verify the hex PSK; 64 digits */
while (*p) {
if (!isxdigit (*p++)) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Invalid WPA_PSK (contains non-hexadecimal characters)");
goto out;
}
@@ -1924,7 +1926,7 @@ parse_wpa_psk (shvarFile *ifcfg,
/* Length check */
if (strlen (p) < 8 || strlen (p) > 63) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Invalid WPA_PSK (passphrases must be between "
"8 and 63 characters long (inclusive))");
goto out;
@@ -1934,7 +1936,7 @@ parse_wpa_psk (shvarFile *ifcfg,
}
if (!hashed) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Invalid WPA_PSK (doesn't look like a passphrase or hex key)");
goto out;
}
@@ -1980,7 +1982,7 @@ eap_simple_reader (const char *eap_method,
value = svGetValue (ifcfg, "IEEE_8021X_IDENTITY", FALSE);
if (!value) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Missing IEEE_8021X_IDENTITY for EAP method '%s'.",
eap_method);
return FALSE;
@@ -1995,7 +1997,7 @@ eap_simple_reader (const char *eap_method,
}
if (!value) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Missing IEEE_8021X_PASSWORD for EAP method '%s'.",
eap_method);
return FALSE;
@@ -2048,7 +2050,7 @@ eap_tls_reader (const char *eap_method,
value = svGetValue (ifcfg, "IEEE_8021X_IDENTITY", FALSE);
if (!value) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Missing IEEE_8021X_IDENTITY for EAP method '%s'.",
eap_method);
return FALSE;
@@ -2095,7 +2097,7 @@ eap_tls_reader (const char *eap_method,
}
if (!privkey_password) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Missing %s for EAP method '%s'.",
phase2 ? "IEEE_8021X_INNER_PRIVATE_KEY_PASSWORD" : "IEEE_8021X_PRIVATE_KEY_PASSWORD",
eap_method);
@@ -2107,7 +2109,7 @@ eap_tls_reader (const char *eap_method,
phase2 ? "IEEE_8021X_INNER_PRIVATE_KEY" : "IEEE_8021X_PRIVATE_KEY",
FALSE);
if (!privkey) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Missing %s for EAP method '%s'.",
phase2 ? "IEEE_8021X_INNER_PRIVATE_KEY" : "IEEE_8021X_PRIVATE_KEY",
eap_method);
@@ -2145,7 +2147,7 @@ eap_tls_reader (const char *eap_method,
phase2 ? "IEEE_8021X_INNER_CLIENT_CERT" : "IEEE_8021X_CLIENT_CERT",
FALSE);
if (!client_cert) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Missing %s for EAP method '%s'.",
phase2 ? "IEEE_8021X_INNER_CLIENT_CERT" : "IEEE_8021X_CLIENT_CERT",
eap_method);
@@ -2221,7 +2223,7 @@ eap_peap_reader (const char *eap_method,
else if (!strcmp (peapver, "1"))
g_object_set (s_8021x, NM_SETTING_802_1X_PHASE1_PEAPVER, "1", NULL);
else {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Unknown IEEE_8021X_PEAP_VERSION value '%s'",
peapver);
goto done;
@@ -2233,7 +2235,7 @@ eap_peap_reader (const char *eap_method,
inner_auth = svGetValue (ifcfg, "IEEE_8021X_INNER_AUTH_METHODS", FALSE);
if (!inner_auth) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Missing IEEE_8021X_INNER_AUTH_METHODS.");
goto done;
}
@@ -2253,7 +2255,7 @@ eap_peap_reader (const char *eap_method,
if (!eap_tls_reader (*iter, ifcfg, keys, s_8021x, TRUE, error))
goto done;
} else {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Unknown IEEE_8021X_INNER_AUTH_METHOD '%s'.",
*iter);
goto done;
@@ -2266,7 +2268,7 @@ eap_peap_reader (const char *eap_method,
}
if (!nm_setting_802_1x_get_phase2_auth (s_8021x)) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"No valid IEEE_8021X_INNER_AUTH_METHODS found.");
goto done;
}
@@ -2321,7 +2323,7 @@ eap_ttls_reader (const char *eap_method,
tmp = svGetValue (ifcfg, "IEEE_8021X_INNER_AUTH_METHODS", FALSE);
if (!tmp) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Missing IEEE_8021X_INNER_AUTH_METHODS.");
goto done;
}
@@ -2351,7 +2353,7 @@ eap_ttls_reader (const char *eap_method,
goto done;
g_object_set (s_8021x, NM_SETTING_802_1X_PHASE2_AUTHEAP, (*iter + strlen ("eap-")), NULL);
} else {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Unknown IEEE_8021X_INNER_AUTH_METHOD '%s'.",
*iter);
goto done;
@@ -2385,7 +2387,7 @@ fill_8021x (shvarFile *ifcfg,
value = svGetValue (ifcfg, "IEEE_8021X_EAP_METHODS", FALSE);
if (!value) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Missing IEEE_8021X_EAP_METHODS for key management '%s'",
key_mgmt);
return NULL;
@@ -2443,7 +2445,7 @@ fill_8021x (shvarFile *ifcfg,
g_strfreev (list);
if (nm_setting_802_1x_get_num_eap_methods (s_8021x) == 0) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"No valid EAP methods found in IEEE_8021X_EAP_METHODS.");
goto error;
}
@@ -2521,7 +2523,7 @@ make_wpa_setting (shvarFile *ifcfg,
} else if (!strcmp (value, "WPA-EAP") || !strcmp (value, "IEEE8021X")) {
/* Adhoc mode is mutually exclusive with any 802.1x-based authentication */
if (adhoc) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Ad-Hoc mode cannot be used with KEY_MGMT type '%s'", value);
goto error;
}
@@ -2534,7 +2536,7 @@ make_wpa_setting (shvarFile *ifcfg,
g_object_set (wsec, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, lower, NULL);
g_free (lower);
} else {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Unknown wireless KEY_MGMT type '%s'", value);
goto error;
}
@@ -2586,7 +2588,7 @@ make_leap_setting (shvarFile *ifcfg,
value = svGetValue (ifcfg, "IEEE_8021X_IDENTITY", FALSE);
if (!value || !strlen (value)) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Missing LEAP identity");
goto error;
}
@@ -2652,7 +2654,7 @@ make_wireless_setting (shvarFile *ifcfg,
s_wireless = NM_SETTING_WIRELESS (nm_setting_wireless_new ());
- if (read_mac_address (ifcfg, &array, error)) {
+ if (read_mac_address (ifcfg, "HWADDR", &array, error)) {
if (array) {
g_object_set (s_wireless, NM_SETTING_WIRELESS_MAC_ADDRESS, array, NULL);
@@ -2675,6 +2677,14 @@ make_wireless_setting (shvarFile *ifcfg,
return NULL;
}
+ array = NULL;
+ if (read_mac_address (ifcfg, "MACADDR", &array, error)) {
+ if (array) {
+ g_object_set (s_wireless, NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, array, NULL);
+ g_byte_array_free (array, TRUE);
+ }
+ }
+
value = svGetValue (ifcfg, "ESSID", TRUE);
if (value) {
gsize ssid_len = 0, value_len = strlen (value);
@@ -2693,7 +2703,7 @@ make_wireless_setting (shvarFile *ifcfg,
} else if ((value_len > 2) && (strncmp (value, "0x", 2) == 0)) {
/* Hex representation */
if (value_len % 2) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Invalid SSID '%s' size (looks like hex but length not multiple of 2)",
value);
g_free (value);
@@ -2703,7 +2713,7 @@ make_wireless_setting (shvarFile *ifcfg,
p = value + 2;
while (*p) {
if (!isxdigit (*p)) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Invalid SSID '%s' character (looks like hex SSID but '%c' isn't a hex digit)",
value, *p);
g_free (value);
@@ -2719,7 +2729,7 @@ make_wireless_setting (shvarFile *ifcfg,
}
if (ssid_len > 32 || ssid_len == 0) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Invalid SSID '%s' (size %zu not between 1 and 32 inclusive)",
value, ssid_len);
g_free (value);
@@ -2734,7 +2744,7 @@ make_wireless_setting (shvarFile *ifcfg,
} else {
/* Only fail on lack of SSID if device is managed */
if (nm_controlled) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0, "Missing SSID");
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0, "Missing SSID");
goto error;
}
}
@@ -2755,7 +2765,7 @@ make_wireless_setting (shvarFile *ifcfg,
} else if (!strcmp (lcase, "managed") || !strcmp (lcase, "auto")) {
mode = "infrastructure";
} else {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Invalid mode '%s' (not 'Ad-Hoc', 'Managed', or 'Auto')",
lcase);
g_free (lcase);
@@ -2773,7 +2783,7 @@ make_wireless_setting (shvarFile *ifcfg,
eth = ether_aton (value);
if (!eth) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Invalid BSSID '%s'", value);
goto error;
}
@@ -2791,7 +2801,7 @@ make_wireless_setting (shvarFile *ifcfg,
errno = 0;
chan = strtol (value, NULL, 10);
if (errno || chan <= 0 || chan > 196) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Invalid wireless channel '%s'", value);
g_free (value);
goto error;
@@ -2810,7 +2820,7 @@ make_wireless_setting (shvarFile *ifcfg,
errno = 0;
mtu = strtol (value, NULL, 10);
if (errno || mtu < 0 || mtu > 50000) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Invalid wireless MTU '%s'", value);
g_free (value);
goto error;
@@ -2851,7 +2861,7 @@ wireless_connection_from_ifcfg (const char *file,
connection = nm_connection_new ();
if (!connection) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Failed to allocate new connection for %s.", file);
return NULL;
}
@@ -2897,7 +2907,7 @@ wireless_connection_from_ifcfg (const char *file,
printable_ssid);
g_free (printable_ssid);
if (!con_setting) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Failed to create connection setting.");
g_object_unref (connection);
return NULL;
@@ -2927,6 +2937,7 @@ make_wired_setting (shvarFile *ifcfg,
char *value = NULL;
int mtu;
GByteArray *mac = NULL;
+ char *nettype;
s_wired = NM_SETTING_WIRED (nm_setting_wired_new ());
@@ -2942,7 +2953,7 @@ make_wired_setting (shvarFile *ifcfg,
g_free (value);
}
- if (read_mac_address (ifcfg, &mac, error)) {
+ if (read_mac_address (ifcfg, "HWADDR", &mac, error)) {
if (mac) {
g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac, NULL);
@@ -2954,15 +2965,106 @@ make_wired_setting (shvarFile *ifcfg,
}
g_byte_array_free (mac, TRUE);
- } else if (!nm_controlled) {
- /* If NM_CONTROLLED=no but there wasn't a MAC address, notify
- * the user that the device cannot be unmanaged.
- */
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: NM_CONTROLLED was false but HWADDR was missing; device will be managed");
}
} else {
g_object_unref (s_wired);
- s_wired = NULL;
+ return NULL;
+ }
+
+ value = svGetValue (ifcfg, "SUBCHANNELS", FALSE);
+ if (value) {
+ const char *p = value;
+ gboolean success = TRUE;
+ char **chans = NULL;
+
+ /* basic sanity checks */
+ while (*p) {
+ if (!isxdigit (*p) && (*p != ',') && (*p != '.')) {
+ PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: invalid SUBCHANNELS '%s'", value);
+ success = FALSE;
+ break;
+ }
+ p++;
+ }
+
+ if (success) {
+ guint32 num_chans;
+
+ chans = g_strsplit_set (value, ",", 0);
+ num_chans = g_strv_length (chans);
+ if (num_chans < 2 || num_chans > 3) {
+ PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: invalid SUBCHANNELS '%s' (%d channels, 2 or 3 expected)",
+ value, g_strv_length (chans));
+ } else {
+ GPtrArray *array = g_ptr_array_sized_new (num_chans);
+
+ g_ptr_array_add (array, chans[0]);
+ g_ptr_array_add (array, chans[1]);
+ if (num_chans == 3)
+ g_ptr_array_add (array, chans[2]);
+
+ g_object_set (s_wired, NM_SETTING_WIRED_S390_SUBCHANNELS, array, NULL);
+ g_ptr_array_free (array, TRUE);
+
+ /* set the unmanaged spec too */
+ if (!nm_controlled && !*unmanaged)
+ *unmanaged = g_strdup_printf ("s390-subchannels:%s", value);
+ }
+ g_strfreev (chans);
+ }
+ g_free (value);
+ }
+
+ value = svGetValue (ifcfg, "PORTNAME", FALSE);
+ if (value && strlen (value)) {
+ nm_setting_wired_add_s390_option (s_wired, "portname", value);
+ }
+ g_free (value);
+
+ nettype = svGetValue (ifcfg, "NETTYPE", FALSE);
+ if (nettype && strlen (nettype)) {
+ if (!strcmp (nettype, "qeth") || !strcmp (nettype, "lcs") || !strcmp (nettype, "ctc"))
+ g_object_set (s_wired, NM_SETTING_WIRED_S390_NETTYPE, nettype, NULL);
+ else
+ PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: unknown s390 NETTYPE '%s'", nettype);
+ }
+
+ value = svGetValue (ifcfg, "OPTIONS", FALSE);
+ if (value && strlen (value)) {
+ char **options, **iter;
+
+ iter = options = g_strsplit_set (value, " ", 0);
+ while (iter && *iter) {
+ char *equals = strchr (*iter, '=');
+ gboolean valid = FALSE;
+
+ if (equals) {
+ *equals = '\0';
+ valid = nm_setting_wired_add_s390_option (s_wired, *iter, equals + 1);
+ }
+ if (!valid)
+ PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: invalid s390 OPTION '%s'", *iter);
+ iter++;
+ }
+ g_strfreev (options);
+ }
+ g_free (value);
+
+ g_free (nettype);
+
+ if (!nm_controlled && !*unmanaged) {
+ /* If NM_CONTROLLED=no but there wasn't a MAC address or z/VM
+ * subchannels, notify the user that the device cannot be unmanaged.
+ */
+ PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: NM_CONTROLLED was false but HWADDR or SUBCHANNELS was missing; device will be managed");
+ }
+
+ mac = NULL;
+ if (read_mac_address (ifcfg, "MACADDR", &mac, error)) {
+ if (mac) {
+ g_object_set (s_wired, NM_SETTING_WIRED_CLONED_MAC_ADDRESS, mac, NULL);
+ g_byte_array_free (mac, TRUE);
+ }
}
value = svGetValue (ifcfg, "KEY_MGMT", FALSE);
@@ -2972,7 +3074,7 @@ make_wired_setting (shvarFile *ifcfg,
if (!*s_8021x)
goto error;
} else {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Unknown wired KEY_MGMT type '%s'", value);
goto error;
}
@@ -3004,14 +3106,14 @@ wired_connection_from_ifcfg (const char *file,
connection = nm_connection_new ();
if (!connection) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Failed to allocate new connection for %s.", file);
return NULL;
}
con_setting = make_connection_setting (file, ifcfg, NM_SETTING_WIRED_SETTING_NAME, NULL);
if (!con_setting) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Failed to create connection setting.");
g_object_unref (connection);
return NULL;
@@ -3077,6 +3179,12 @@ is_wireless_device (const char *iface)
return is_wireless;
}
+enum {
+ IGNORE_REASON_NONE = 0x00,
+ IGNORE_REASON_BRIDGE = 0x01,
+ IGNORE_REASON_VLAN = 0x02,
+};
+
NMConnection *
connection_from_file (const char *filename,
const char *network_file, /* for unit tests only */
@@ -3086,16 +3194,18 @@ connection_from_file (const char *filename,
char **keyfile,
char **routefile,
char **route6file,
- GError **error,
+ GError **out_error,
gboolean *ignore_error)
{
NMConnection *connection = NULL;
shvarFile *parsed;
- char *type, *nmc = NULL, *bootproto;
+ char *type, *nmc = NULL, *bootproto, *tmp;
NMSetting *s_ip4, *s_ip6;
const char *ifcfg_name = NULL;
gboolean nm_controlled = TRUE;
gboolean ip6_used = FALSE;
+ GError *error = NULL;
+ guint32 ignore_reason = IGNORE_REASON_NONE;
g_return_val_if_fail (filename != NULL, NULL);
g_return_val_if_fail (unmanaged != NULL, NULL);
@@ -3116,14 +3226,14 @@ connection_from_file (const char *filename,
ifcfg_name = utils_get_ifcfg_name (filename, TRUE);
if (!ifcfg_name) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (out_error, IFCFG_PLUGIN_ERROR, 0,
"Ignoring connection '%s' because it's not an ifcfg file.", filename);
return NULL;
}
parsed = svNewFile (filename);
if (!parsed) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (out_error, IFCFG_PLUGIN_ERROR, 0,
"Couldn't parse file '%s'", filename);
return NULL;
}
@@ -3137,14 +3247,15 @@ connection_from_file (const char *filename,
*/
device = svGetValue (parsed, "DEVICE", FALSE);
if (!device) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (&error, IFCFG_PLUGIN_ERROR, 0,
"File '%s' had neither TYPE nor DEVICE keys.", filename);
goto done;
}
if (!strcmp (device, "lo")) {
- *ignore_error = TRUE;
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ if (ignore_error)
+ *ignore_error = TRUE;
+ g_set_error (&error, IFCFG_PLUGIN_ERROR, 0,
"Ignoring loopback device config.");
g_free (device);
goto done;
@@ -3179,12 +3290,33 @@ connection_from_file (const char *filename,
g_free (lower);
}
+ /* Ignore BRIDGE= and VLAN= connections for now too (rh #619863) */
+ tmp = svGetValue (parsed, "BRIDGE", FALSE);
+ if (tmp) {
+ g_free (tmp);
+ nm_controlled = FALSE;
+ ignore_reason = IGNORE_REASON_BRIDGE;
+ }
+
+ if (nm_controlled) {
+ tmp = svGetValue (parsed, "VLAN", FALSE);
+ if (tmp) {
+ g_free (tmp);
+ nm_controlled = FALSE;
+ ignore_reason = IGNORE_REASON_VLAN;
+ }
+ }
+
+ /* Construct the connection */
if (!strcasecmp (type, TYPE_ETHERNET))
- connection = wired_connection_from_ifcfg (filename, parsed, nm_controlled, unmanaged, error);
+ connection = wired_connection_from_ifcfg (filename, parsed, nm_controlled, unmanaged, &error);
else if (!strcasecmp (type, TYPE_WIRELESS))
- connection = wireless_connection_from_ifcfg (filename, parsed, nm_controlled, unmanaged, error);
- else {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ connection = wireless_connection_from_ifcfg (filename, parsed, nm_controlled, unmanaged, &error);
+ else if (!strcasecmp (type, TYPE_BRIDGE)) {
+ g_set_error (&error, IFCFG_PLUGIN_ERROR, 0,
+ "Bridge connections are not yet supported");
+ } else {
+ g_set_error (&error, IFCFG_PLUGIN_ERROR, 0,
"Unknown connection type '%s'", type);
}
@@ -3195,12 +3327,28 @@ connection_from_file (const char *filename,
g_free (type);
- /* Don't bother reading the connection fully if it's unmanaged */
- if (!connection || *unmanaged)
+ /* Don't bother reading the connection fully if it's unmanaged or ignored */
+ if (!connection || *unmanaged || ignore_reason) {
+ if (connection && !*unmanaged) {
+ /* However,BRIDGE and VLAN connections that don't have HWADDR won't
+ * be unmanaged because the unmanaged state is keyed off HWADDR.
+ * They willl still be tagged 'ignore' from code that checks BRIDGE
+ * and VLAN above. Since they aren't marked unmanaged, kill them
+ * completely.
+ */
+ if (ignore_reason) {
+ g_object_unref (connection);
+ connection = NULL;
+ g_set_error (&error, IFCFG_PLUGIN_ERROR, 0,
+ "%s connections are not yet supported",
+ ignore_reason == IGNORE_REASON_BRIDGE ? "Bridge" : "VLAN");
+ }
+ }
goto done;
+ }
- s_ip6 = make_ip6_setting (parsed, network_file, iscsiadm_path, error);
- if (*error) {
+ s_ip6 = make_ip6_setting (parsed, network_file, iscsiadm_path, &error);
+ if (error) {
g_object_unref (connection);
connection = NULL;
goto done;
@@ -3213,8 +3361,8 @@ connection_from_file (const char *filename,
ip6_used = TRUE;
}
- s_ip4 = make_ip4_setting (parsed, network_file, iscsiadm_path, ip6_used, error);
- if (*error) {
+ s_ip4 = make_ip4_setting (parsed, network_file, iscsiadm_path, ip6_used, &error);
+ if (error) {
g_object_unref (connection);
connection = NULL;
goto done;
@@ -3236,7 +3384,7 @@ connection_from_file (const char *filename,
g_object_set (G_OBJECT (s_con), NM_SETTING_CONNECTION_READ_ONLY, TRUE, NULL);
}
- if (!nm_connection_verify (connection, error)) {
+ if (!nm_connection_verify (connection, &error)) {
g_object_unref (connection);
connection = NULL;
}
@@ -3247,6 +3395,10 @@ connection_from_file (const char *filename,
done:
svCloseFile (parsed);
+ if (error && out_error)
+ *out_error = error;
+ else
+ g_clear_error (&error);
return connection;
}
diff --git a/system-settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am b/system-settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am
index 66435acbcb..28cfb98f3f 100644
--- a/system-settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am
+++ b/system-settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am
@@ -4,6 +4,7 @@ EXTRA_DIST = \
ifcfg-test-wired-static \
ifcfg-test-wired-static-bootproto \
ifcfg-test-wired-dhcp \
+ ifcfg-test-wired-dhcp6-only \
ifcfg-test-wired-global-gateway \
network-test-wired-global-gateway \
ifcfg-test-wired-never-default \
@@ -60,7 +61,15 @@ EXTRA_DIST = \
ifcfg-test-wired-static-no-prefix-24 \
ifcfg-test-wired-ipv6-only \
ifcfg-test-wifi-wep-passphrase \
- keys-test-wifi-wep-passphrase
+ keys-test-wifi-wep-passphrase \
+ ifcfg-test-wifi-wep-40-ascii \
+ keys-test-wifi-wep-40-ascii \
+ ifcfg-test-wifi-wep-104-ascii \
+ keys-test-wifi-wep-104-ascii \
+ ifcfg-test-wired-qeth-static \
+ ifcfg-test-bridge-main \
+ ifcfg-test-bridge-component \
+ ifcfg-test-vlan-interface
check-local:
@for f in $(EXTRA_DIST); do \
diff --git a/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bridge-component b/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bridge-component
new file mode 100644
index 0000000000..f586637ec3
--- /dev/null
+++ b/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bridge-component
@@ -0,0 +1,5 @@
+DEVICE=eth0
+HWADDR=00:22:15:59:62:97
+ONBOOT=no
+BRIDGE=br0
+
diff --git a/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bridge-main b/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bridge-main
new file mode 100644
index 0000000000..c5caf3fc9b
--- /dev/null
+++ b/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bridge-main
@@ -0,0 +1,7 @@
+DEVICE=br0
+ONBOOT=no
+TYPE=Bridge
+BOOTPROTO=dhcp
+STP=on
+DELAY=0
+
diff --git a/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-vlan-interface b/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-vlan-interface
new file mode 100644
index 0000000000..6c841855ed
--- /dev/null
+++ b/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-vlan-interface
@@ -0,0 +1,7 @@
+DEVICE=eth1.43
+VLAN=yes
+ONBOOT=yes
+BOOTPROTO=none
+IPADDR=192.168.43.149
+NETMASK=255.255.255.0
+
diff --git a/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-wep-104-ascii b/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-wep-104-ascii
new file mode 100644
index 0000000000..250efa134c
--- /dev/null
+++ b/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-wep-104-ascii
@@ -0,0 +1,14 @@
+TYPE=Wireless
+DEVICE=eth2
+HWADDR=00:16:41:11:22:33
+NM_CONTROLLED=yes
+BOOTPROTO=dhcp
+ESSID=blahblah
+CHANNEL=1
+MODE=Managed
+RATE=auto
+ONBOOT=yes
+USERCTL=yes
+PEERDNS=yes
+IPV6INIT=no
+SECURITYMODE=open
diff --git a/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-wep-40-ascii b/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-wep-40-ascii
new file mode 100644
index 0000000000..250efa134c
--- /dev/null
+++ b/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-wep-40-ascii
@@ -0,0 +1,14 @@
+TYPE=Wireless
+DEVICE=eth2
+HWADDR=00:16:41:11:22:33
+NM_CONTROLLED=yes
+BOOTPROTO=dhcp
+ESSID=blahblah
+CHANNEL=1
+MODE=Managed
+RATE=auto
+ONBOOT=yes
+USERCTL=yes
+PEERDNS=yes
+IPV6INIT=no
+SECURITYMODE=open
diff --git a/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-dhcp6-only b/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-dhcp6-only
new file mode 100644
index 0000000000..de03e04480
--- /dev/null
+++ b/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-dhcp6-only
@@ -0,0 +1,11 @@
+DEVICE="eth0"
+ONBOOT=no
+TYPE=Ethernet
+DEFROUTE=yes
+PEERDNS=yes
+PEERROUTES=yes
+IPV6INIT=yes
+IPV6_AUTOCONF=no
+DHCPV6C=yes
+HWADDR=00:13:20:F5:F5:E4
+
diff --git a/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-qeth-static b/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-qeth-static
new file mode 100644
index 0000000000..4719de2175
--- /dev/null
+++ b/system-settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-qeth-static
@@ -0,0 +1,13 @@
+# IBM QETH
+DEVICE=eth1
+BOOTPROTO=static
+IPADDR=192.168.70.87
+NETMASK=255.255.255.0
+ONBOOT=yes
+NETTYPE=qeth
+SUBCHANNELS=0.0.0600,0.0.0601,0.0.0602
+TYPE=Ethernet
+PORTNAME=OSAPORT
+OPTIONS='layer2=1 portno=0'
+MACADDR=02:00:00:23:65:1a
+
diff --git a/system-settings/plugins/ifcfg-rh/tests/network-scripts/keys-test-wifi-wep-104-ascii b/system-settings/plugins/ifcfg-rh/tests/network-scripts/keys-test-wifi-wep-104-ascii
new file mode 100644
index 0000000000..f5d532b283
--- /dev/null
+++ b/system-settings/plugins/ifcfg-rh/tests/network-scripts/keys-test-wifi-wep-104-ascii
@@ -0,0 +1 @@
+KEY1=s:LoremIpsumSit
diff --git a/system-settings/plugins/ifcfg-rh/tests/network-scripts/keys-test-wifi-wep-40-ascii b/system-settings/plugins/ifcfg-rh/tests/network-scripts/keys-test-wifi-wep-40-ascii
new file mode 100644
index 0000000000..b0d1470827
--- /dev/null
+++ b/system-settings/plugins/ifcfg-rh/tests/network-scripts/keys-test-wifi-wep-40-ascii
@@ -0,0 +1 @@
+KEY1=s:Lorem
diff --git a/system-settings/plugins/ifcfg-rh/tests/test-ifcfg-rh-utils.c b/system-settings/plugins/ifcfg-rh/tests/test-ifcfg-rh-utils.c
index cf2a7c03de..a6c54fd3d8 100644
--- a/system-settings/plugins/ifcfg-rh/tests/test-ifcfg-rh-utils.c
+++ b/system-settings/plugins/ifcfg-rh/tests/test-ifcfg-rh-utils.c
@@ -153,6 +153,8 @@ int main (int argc, char **argv)
test_ignored ("ignored-orig", "ifcfg-FooBar" ORIG_TAG, TRUE);
test_ignored ("ignored-rej", "ifcfg-FooBar" REJ_TAG, TRUE);
test_ignored ("ignored-rpmnew", "ifcfg-FooBar" RPMNEW_TAG, TRUE);
+ test_ignored ("ignored-augnew", "ifcfg-FooBar" AUGNEW_TAG, TRUE);
+ test_ignored ("ignored-augtmp", "ifcfg-FooBar" AUGTMP_TAG, TRUE);
base = g_path_get_basename (argv[0]);
fprintf (stdout, "%s: SUCCESS\n", base);
diff --git a/system-settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c b/system-settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
index 35cea36cf5..1945fb99cd 100644
--- a/system-settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
+++ b/system-settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
@@ -29,8 +29,6 @@
#include <sys/types.h>
#include <sys/stat.h>
-#include <dbus/dbus-glib.h>
-
#include <nm-utils.h>
#include <nm-setting-connection.h>
#include <nm-setting-wired.h>
@@ -2319,6 +2317,111 @@ test_read_wired_ipv6_only (void)
g_object_unref (connection);
}
+#define TEST_IFCFG_WIRED_DHCP6_ONLY TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-dhcp6-only"
+
+static void
+test_read_wired_dhcp6_only (void)
+{
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ NMSettingWired *s_wired;
+ NMSettingIP4Config *s_ip4;
+ NMSettingIP6Config *s_ip6;
+ char *unmanaged = NULL;
+ char *keyfile = NULL;
+ char *routefile = NULL;
+ char *route6file = NULL;
+ gboolean ignore_error = FALSE;
+ GError *error = NULL;
+ const char *tmp;
+ const char *expected_id = "System test-wired-dhcp6-only";
+ const char *method;
+
+ connection = connection_from_file (TEST_IFCFG_WIRED_DHCP6_ONLY,
+ NULL,
+ TYPE_ETHERNET,
+ NULL,
+ &unmanaged,
+ &keyfile,
+ &routefile,
+ &route6file,
+ &error,
+ &ignore_error);
+ ASSERT (connection != NULL,
+ "wired-dhcp6-only-read", "failed to read %s: %s", TEST_IFCFG_WIRED_DHCP6_ONLY, error->message);
+
+ ASSERT (nm_connection_verify (connection, &error),
+ "wired-dhcp6-only-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_DHCP6_ONLY, error->message);
+
+ ASSERT (unmanaged == FALSE,
+ "wired-dhcp6-only-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_DHCP6_ONLY);
+
+ /* ===== CONNECTION SETTING ===== */
+
+ s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
+ ASSERT (s_con != NULL,
+ "wired-dhcp6-only-verify-connection", "failed to verify %s: missing %s setting",
+ TEST_IFCFG_WIRED_DHCP6_ONLY,
+ NM_SETTING_CONNECTION_SETTING_NAME);
+
+ /* ID */
+ tmp = nm_setting_connection_get_id (s_con);
+ ASSERT (tmp != NULL,
+ "wired-dhcp6-only-verify-connection", "failed to verify %s: missing %s / %s key",
+ TEST_IFCFG_WIRED_DHCP6_ONLY,
+ NM_SETTING_CONNECTION_SETTING_NAME,
+ NM_SETTING_CONNECTION_ID);
+ ASSERT (strcmp (tmp, expected_id) == 0,
+ "wired-dhcp6-only-verify-connection", "failed to verify %s: unexpected %s / %s key value",
+ TEST_IFCFG_WIRED_DHCP6_ONLY,
+ NM_SETTING_CONNECTION_SETTING_NAME,
+ NM_SETTING_CONNECTION_ID);
+
+ /* ===== WIRED SETTING ===== */
+
+ s_wired = NM_SETTING_WIRED (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED));
+ ASSERT (s_wired != NULL,
+ "wired-dhcp6-only-verify-wired", "failed to verify %s: missing %s setting",
+ TEST_IFCFG_WIRED_DHCP6_ONLY,
+ NM_SETTING_WIRED_SETTING_NAME);
+
+ /* ===== IPv4 SETTING ===== */
+
+ s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
+ ASSERT (s_ip4 != NULL,
+ "wired-dhcp6-only-verify-ip4", "failed to verify %s: missing %s setting",
+ TEST_IFCFG_WIRED_DHCP6_ONLY,
+ NM_SETTING_IP4_CONFIG_SETTING_NAME);
+
+ method = nm_setting_ip4_config_get_method (s_ip4);
+ ASSERT (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED) == 0,
+ "wired-dhcp6-only-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
+ TEST_IFCFG_WIRED_DHCP6_ONLY,
+ NM_SETTING_IP4_CONFIG_SETTING_NAME,
+ NM_SETTING_IP4_CONFIG_METHOD);
+
+ /* ===== IPv6 SETTING ===== */
+
+ s_ip6 = NM_SETTING_IP6_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP6_CONFIG));
+ ASSERT (s_ip6 != NULL,
+ "wired-dhcp6-only-verify-ip6", "failed to verify %s: missing %s setting",
+ TEST_IFCFG_WIRED_DHCP6_ONLY,
+ NM_SETTING_IP6_CONFIG_SETTING_NAME);
+
+ /* Method */
+ tmp = nm_setting_ip6_config_get_method (s_ip6);
+ ASSERT (strcmp (tmp, NM_SETTING_IP6_CONFIG_METHOD_DHCP) == 0,
+ "wired-dhcp6-only-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
+ TEST_IFCFG_WIRED_DHCP6_ONLY,
+ NM_SETTING_IP6_CONFIG_SETTING_NAME,
+ NM_SETTING_IP6_CONFIG_METHOD);
+
+ g_free (keyfile);
+ g_free (routefile);
+ g_free (route6file);
+ g_object_unref (connection);
+}
+
#define TEST_IFCFG_ONBOOT_NO TEST_IFCFG_DIR"/network-scripts/ifcfg-test-onboot-no"
static void
@@ -3680,6 +3783,272 @@ test_read_wifi_wep_passphrase (void)
g_object_unref (connection);
}
+#define TEST_IFCFG_WIFI_WEP_40_ASCII TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wep-40-ascii"
+
+static void
+test_read_wifi_wep_40_ascii (void)
+{
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ NMSettingWireless *s_wireless;
+ NMSettingWirelessSecurity *s_wsec;
+ char *unmanaged = NULL;
+ char *keyfile = NULL;
+ char *routefile = NULL;
+ char *route6file = NULL;
+ gboolean ignore_error = FALSE;
+ GError *error = NULL;
+ const char *tmp;
+ const char *expected_wep_key0 = "Lorem";
+ NMWepKeyType key_type;
+
+ connection = connection_from_file (TEST_IFCFG_WIFI_WEP_40_ASCII,
+ NULL,
+ TYPE_WIRELESS,
+ NULL,
+ &unmanaged,
+ &keyfile,
+ &routefile,
+ &route6file,
+ &error,
+ &ignore_error);
+ ASSERT (connection != NULL,
+ "wifi-wep-40-ascii-read", "failed to read %s: %s", TEST_IFCFG_WIFI_WEP_40_ASCII, error->message);
+
+ ASSERT (nm_connection_verify (connection, &error),
+ "wifi-wep-40-ascii-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_WEP_40_ASCII, error->message);
+
+ /* ===== CONNECTION SETTING ===== */
+
+ s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
+ ASSERT (s_con != NULL,
+ "wifi-wep-40-ascii-verify-connection", "failed to verify %s: missing %s setting",
+ TEST_IFCFG_WIFI_WEP_40_ASCII,
+ NM_SETTING_CONNECTION_SETTING_NAME);
+
+ /* ===== WIRELESS SETTING ===== */
+
+ s_wireless = NM_SETTING_WIRELESS (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS));
+ ASSERT (s_wireless != NULL,
+ "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: missing %s setting",
+ TEST_IFCFG_WIFI_WEP_40_ASCII,
+ NM_SETTING_WIRELESS_SETTING_NAME);
+
+ /* Security */
+ tmp = nm_setting_wireless_get_security (s_wireless);
+ ASSERT (tmp != NULL,
+ "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: missing %s / %s key",
+ TEST_IFCFG_WIFI_WEP_40_ASCII,
+ NM_SETTING_WIRELESS_SETTING_NAME,
+ NM_SETTING_WIRELESS_SEC);
+ ASSERT (strcmp (tmp, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME) == 0,
+ "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
+ TEST_IFCFG_WIFI_WEP_40_ASCII,
+ NM_SETTING_WIRELESS_SETTING_NAME,
+ NM_SETTING_WIRELESS_SEC);
+
+ /* ===== WIRELESS SECURITY SETTING ===== */
+
+ s_wsec = NM_SETTING_WIRELESS_SECURITY (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY));
+ ASSERT (s_wsec != NULL,
+ "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: missing %s setting",
+ TEST_IFCFG_WIFI_WEP_40_ASCII,
+ NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
+
+ /* Key management */
+ ASSERT (strcmp (nm_setting_wireless_security_get_key_mgmt (s_wsec), "none") == 0,
+ "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: missing %s / %s key",
+ TEST_IFCFG_WIFI_WEP_40_ASCII,
+ NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
+
+ /* WEP key index */
+ ASSERT (nm_setting_wireless_security_get_wep_tx_keyidx (s_wsec) == 0,
+ "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
+ TEST_IFCFG_WIFI_WEP_40_ASCII,
+ NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX);
+
+ /* WEP key type */
+ key_type = nm_setting_wireless_security_get_wep_key_type (s_wsec);
+ ASSERT (key_type == NM_WEP_KEY_TYPE_UNKNOWN || key_type == NM_WEP_KEY_TYPE_KEY,
+ "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: unexpected WEP key type %d",
+ TEST_IFCFG_WIFI_WEP_40_ASCII,
+ key_type);
+
+ /* WEP key index 0 */
+ tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 0);
+ ASSERT (tmp != NULL,
+ "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: missing %s / %s key",
+ TEST_IFCFG_WIFI_WEP_40_ASCII,
+ NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
+ ASSERT (strcmp (tmp, expected_wep_key0) == 0,
+ "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
+ TEST_IFCFG_WIFI_WEP_40_ASCII,
+ NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
+
+ /* WEP key index 1 */
+ tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 1);
+ ASSERT (tmp == NULL,
+ "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key",
+ TEST_IFCFG_WIFI_WEP_40_ASCII,
+ NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY1);
+
+ /* WEP key index 2 */
+ tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 2);
+ ASSERT (tmp == NULL,
+ "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key",
+ TEST_IFCFG_WIFI_WEP_40_ASCII,
+ NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY2);
+
+ /* WEP key index 3 */
+ tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 3);
+ ASSERT (tmp == NULL,
+ "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key",
+ TEST_IFCFG_WIFI_WEP_40_ASCII,
+ NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY3);
+
+ g_object_unref (connection);
+}
+
+#define TEST_IFCFG_WIFI_WEP_104_ASCII TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wep-104-ascii"
+
+static void
+test_read_wifi_wep_104_ascii (void)
+{
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ NMSettingWireless *s_wireless;
+ NMSettingWirelessSecurity *s_wsec;
+ char *unmanaged = NULL;
+ char *keyfile = NULL;
+ char *routefile = NULL;
+ char *route6file = NULL;
+ gboolean ignore_error = FALSE;
+ GError *error = NULL;
+ const char *tmp;
+ const char *expected_wep_key0 = "LoremIpsumSit";
+ NMWepKeyType key_type;
+
+ connection = connection_from_file (TEST_IFCFG_WIFI_WEP_104_ASCII,
+ NULL,
+ TYPE_WIRELESS,
+ NULL,
+ &unmanaged,
+ &keyfile,
+ &routefile,
+ &route6file,
+ &error,
+ &ignore_error);
+ ASSERT (connection != NULL,
+ "wifi-wep-104-ascii-read", "failed to read %s: %s", TEST_IFCFG_WIFI_WEP_104_ASCII, error->message);
+
+ ASSERT (nm_connection_verify (connection, &error),
+ "wifi-wep-104-ascii-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_WEP_104_ASCII, error->message);
+
+ /* ===== CONNECTION SETTING ===== */
+
+ s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
+ ASSERT (s_con != NULL,
+ "wifi-wep-104-ascii-verify-connection", "failed to verify %s: missing %s setting",
+ TEST_IFCFG_WIFI_WEP_104_ASCII,
+ NM_SETTING_CONNECTION_SETTING_NAME);
+
+ /* ===== WIRELESS SETTING ===== */
+
+ s_wireless = NM_SETTING_WIRELESS (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS));
+ ASSERT (s_wireless != NULL,
+ "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: missing %s setting",
+ TEST_IFCFG_WIFI_WEP_104_ASCII,
+ NM_SETTING_WIRELESS_SETTING_NAME);
+
+ /* Security */
+ tmp = nm_setting_wireless_get_security (s_wireless);
+ ASSERT (tmp != NULL,
+ "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: missing %s / %s key",
+ TEST_IFCFG_WIFI_WEP_104_ASCII,
+ NM_SETTING_WIRELESS_SETTING_NAME,
+ NM_SETTING_WIRELESS_SEC);
+ ASSERT (strcmp (tmp, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME) == 0,
+ "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
+ TEST_IFCFG_WIFI_WEP_104_ASCII,
+ NM_SETTING_WIRELESS_SETTING_NAME,
+ NM_SETTING_WIRELESS_SEC);
+
+ /* ===== WIRELESS SECURITY SETTING ===== */
+
+ s_wsec = NM_SETTING_WIRELESS_SECURITY (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY));
+ ASSERT (s_wsec != NULL,
+ "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: missing %s setting",
+ TEST_IFCFG_WIFI_WEP_104_ASCII,
+ NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
+
+ /* Key management */
+ ASSERT (strcmp (nm_setting_wireless_security_get_key_mgmt (s_wsec), "none") == 0,
+ "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: missing %s / %s key",
+ TEST_IFCFG_WIFI_WEP_104_ASCII,
+ NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
+
+ /* WEP key index */
+ ASSERT (nm_setting_wireless_security_get_wep_tx_keyidx (s_wsec) == 0,
+ "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
+ TEST_IFCFG_WIFI_WEP_104_ASCII,
+ NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX);
+
+ /* WEP key type */
+ key_type = nm_setting_wireless_security_get_wep_key_type (s_wsec);
+ ASSERT (key_type == NM_WEP_KEY_TYPE_UNKNOWN || key_type == NM_WEP_KEY_TYPE_KEY,
+ "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: unexpected WEP key type %d",
+ TEST_IFCFG_WIFI_WEP_104_ASCII,
+ key_type);
+
+ /* WEP key index 0 */
+ tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 0);
+ ASSERT (tmp != NULL,
+ "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: missing %s / %s key",
+ TEST_IFCFG_WIFI_WEP_104_ASCII,
+ NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
+ ASSERT (strcmp (tmp, expected_wep_key0) == 0,
+ "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
+ TEST_IFCFG_WIFI_WEP_104_ASCII,
+ NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
+
+ /* WEP key index 1 */
+ tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 1);
+ ASSERT (tmp == NULL,
+ "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key",
+ TEST_IFCFG_WIFI_WEP_104_ASCII,
+ NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY1);
+
+ /* WEP key index 2 */
+ tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 2);
+ ASSERT (tmp == NULL,
+ "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key",
+ TEST_IFCFG_WIFI_WEP_104_ASCII,
+ NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY2);
+
+ /* WEP key index 3 */
+ tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 3);
+ ASSERT (tmp == NULL,
+ "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key",
+ TEST_IFCFG_WIFI_WEP_104_ASCII,
+ NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY3);
+
+ g_object_unref (connection);
+}
+
#define TEST_IFCFG_WIFI_LEAP TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-leap"
static void
@@ -5080,6 +5449,178 @@ test_read_wifi_wep_eap_ttls_chap (void)
g_object_unref (connection);
}
+#define TEST_IFCFG_WIRED_QETH_STATIC TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-qeth-static"
+
+static void
+test_read_wired_qeth_static (void)
+{
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ NMSettingWired *s_wired;
+ NMSettingIP4Config *s_ip4;
+ char *unmanaged = NULL;
+ char *keyfile = NULL;
+ char *routefile = NULL;
+ char *route6file = NULL;
+ gboolean ignore_error = FALSE;
+ GError *error = NULL;
+ const char *tmp;
+ const char *expected_id = "System test-wired-qeth-static";
+ const GByteArray *array;
+ const char *expected_channel0 = "0.0.0600";
+ const char *expected_channel1 = "0.0.0601";
+ const char *expected_channel2 = "0.0.0602";
+ const GPtrArray *subchannels;
+
+ connection = connection_from_file (TEST_IFCFG_WIRED_QETH_STATIC,
+ NULL,
+ TYPE_ETHERNET,
+ NULL,
+ &unmanaged,
+ &keyfile,
+ &routefile,
+ &route6file,
+ &error,
+ &ignore_error);
+ ASSERT (connection != NULL,
+ "wired-qeth-static-read", "failed to read %s: %s", TEST_IFCFG_WIRED_QETH_STATIC, error->message);
+
+ ASSERT (nm_connection_verify (connection, &error),
+ "wired-qeth-static-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_QETH_STATIC, error->message);
+
+ ASSERT (unmanaged == FALSE,
+ "wired-qeth-static-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_QETH_STATIC);
+
+ /* ===== CONNECTION SETTING ===== */
+
+ s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
+ ASSERT (s_con != NULL,
+ "wired-qeth-static-verify-connection", "failed to verify %s: missing %s setting",
+ TEST_IFCFG_WIRED_QETH_STATIC,
+ NM_SETTING_CONNECTION_SETTING_NAME);
+
+ /* ID */
+ tmp = nm_setting_connection_get_id (s_con);
+ ASSERT (tmp != NULL,
+ "wired-qeth-static-verify-connection", "failed to verify %s: missing %s / %s key",
+ TEST_IFCFG_WIRED_QETH_STATIC,
+ NM_SETTING_CONNECTION_SETTING_NAME,
+ NM_SETTING_CONNECTION_ID);
+ ASSERT (strcmp (tmp, expected_id) == 0,
+ "wired-qeth-static-verify-connection", "failed to verify %s: unexpected %s / %s key value",
+ TEST_IFCFG_WIRED_QETH_STATIC,
+ NM_SETTING_CONNECTION_SETTING_NAME,
+ NM_SETTING_CONNECTION_ID);
+
+ /* ===== WIRED SETTING ===== */
+
+ s_wired = NM_SETTING_WIRED (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED));
+ ASSERT (s_wired != NULL,
+ "wired-qeth-static-verify-wired", "failed to verify %s: missing %s setting",
+ TEST_IFCFG_WIRED_QETH_STATIC,
+ NM_SETTING_WIRED_SETTING_NAME);
+
+ /* MAC address */
+ array = nm_setting_wired_get_mac_address (s_wired);
+ ASSERT (array == NULL,
+ "wired-qeth-static-verify-wired", "failed to verify %s: unexpected %s / %s key",
+ TEST_IFCFG_WIRED_QETH_STATIC,
+ NM_SETTING_WIRED_SETTING_NAME,
+ NM_SETTING_WIRED_MAC_ADDRESS);
+
+ /* Subchannels */
+ subchannels = nm_setting_wired_get_s390_subchannels (s_wired);
+ ASSERT (subchannels != NULL,
+ "wired-qeth-static-verify-wired", "failed to verify %s: missing %s / %s key",
+ TEST_IFCFG_WIRED_QETH_STATIC,
+ NM_SETTING_WIRED_SETTING_NAME,
+ NM_SETTING_WIRED_S390_SUBCHANNELS);
+ ASSERT (subchannels->len == 3,
+ "wired-qeth-static-verify-wired", "failed to verify %s: invalid %s / %s key (not 3 elements)",
+ TEST_IFCFG_WIRED_QETH_STATIC,
+ NM_SETTING_WIRED_SETTING_NAME,
+ NM_SETTING_WIRED_S390_SUBCHANNELS);
+
+ tmp = (const char *) g_ptr_array_index (subchannels, 0);
+ ASSERT (strcmp (tmp, expected_channel0) == 0,
+ "wired-qeth-static-verify-wired", "failed to verify %s: unexpected subchannel #0",
+ TEST_IFCFG_WIRED_QETH_STATIC);
+
+ tmp = (const char *) g_ptr_array_index (subchannels, 1);
+ ASSERT (strcmp (tmp, expected_channel1) == 0,
+ "wired-qeth-static-verify-wired", "failed to verify %s: unexpected subchannel #1",
+ TEST_IFCFG_WIRED_QETH_STATIC);
+
+ tmp = (const char *) g_ptr_array_index (subchannels, 2);
+ ASSERT (strcmp (tmp, expected_channel2) == 0,
+ "wired-qeth-static-verify-wired", "failed to verify %s: unexpected subchannel #2",
+ TEST_IFCFG_WIRED_QETH_STATIC);
+
+ /* Nettype */
+ tmp = nm_setting_wired_get_s390_nettype (s_wired);
+ ASSERT (tmp != NULL,
+ "wired-qeth-static-verify-wired", "failed to verify %s: missing %s / %s key",
+ TEST_IFCFG_WIRED_QETH_STATIC,
+ NM_SETTING_WIRED_SETTING_NAME,
+ NM_SETTING_WIRED_S390_NETTYPE);
+ ASSERT (strcmp (tmp, "qeth") == 0,
+ "wired-qeth-static-verify-wired", "failed to verify %s: unexpected %s / %s key value",
+ TEST_IFCFG_WIRED_QETH_STATIC,
+ NM_SETTING_WIRED_SETTING_NAME,
+ NM_SETTING_WIRED_S390_NETTYPE);
+
+ /* port name */
+ tmp = nm_setting_wired_get_s390_option_by_key (s_wired, "portname");
+ ASSERT (tmp != NULL,
+ "wired-qeth-static-verify-wired", "failed to verify %s: missing %s s390 option 'portname'",
+ TEST_IFCFG_WIRED_QETH_STATIC,
+ NM_SETTING_WIRED_SETTING_NAME);
+ ASSERT (strcmp (tmp, "OSAPORT") == 0,
+ "wired-qeth-static-verify-wired", "failed to verify %s: unexpected %s s390 option 'portname' value",
+ TEST_IFCFG_WIRED_QETH_STATIC,
+ NM_SETTING_WIRED_SETTING_NAME);
+
+ /* port number */
+ tmp = nm_setting_wired_get_s390_option_by_key (s_wired, "portno");
+ ASSERT (tmp != NULL,
+ "wired-qeth-static-verify-wired", "failed to verify %s: missing %s s390 option 'portno'",
+ TEST_IFCFG_WIRED_QETH_STATIC,
+ NM_SETTING_WIRED_SETTING_NAME);
+ ASSERT (strcmp (tmp, "0") == 0,
+ "wired-qeth-static-verify-wired", "failed to verify %s: unexpected %s s390 option 'portno' value",
+ TEST_IFCFG_WIRED_QETH_STATIC,
+ NM_SETTING_WIRED_SETTING_NAME);
+
+ /* layer */
+ tmp = nm_setting_wired_get_s390_option_by_key (s_wired, "layer2");
+ ASSERT (tmp != NULL,
+ "wired-qeth-static-verify-wired", "failed to verify %s: missing %s s390 option 'layer2'",
+ TEST_IFCFG_WIRED_QETH_STATIC,
+ NM_SETTING_WIRED_SETTING_NAME);
+ ASSERT (strcmp (tmp, "1") == 0,
+ "wired-qeth-static-verify-wired", "failed to verify %s: unexpected %s s390 option 'layer2' value",
+ TEST_IFCFG_WIRED_QETH_STATIC,
+ NM_SETTING_WIRED_SETTING_NAME);
+
+ /* ===== IPv4 SETTING ===== */
+
+ s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
+ ASSERT (s_ip4 != NULL,
+ "wired-qeth-static-verify-ip4", "failed to verify %s: missing %s setting",
+ TEST_IFCFG_WIRED_QETH_STATIC,
+ NM_SETTING_IP4_CONFIG_SETTING_NAME);
+
+ /* Method */
+ tmp = nm_setting_ip4_config_get_method (s_ip4);
+ ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) == 0,
+ "wired-qeth-static-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
+ TEST_IFCFG_WIRED_QETH_STATIC,
+ NM_SETTING_IP4_CONFIG_SETTING_NAME,
+ NM_SETTING_IP4_CONFIG_METHOD);
+
+ g_object_unref (connection);
+}
+
static void
test_write_wired_static (void)
{
@@ -6063,6 +6604,8 @@ test_write_wifi_open (void)
guint32 channel = 9, mtu = 1345;
GByteArray *mac;
const unsigned char mac_data[] = { 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff };
+ shvarFile *ifcfg;
+ char *tmp;
connection = nm_connection_new ();
ASSERT (connection != NULL,
@@ -6157,6 +6700,22 @@ test_write_wifi_open (void)
&route6file,
&error,
&ignore_error);
+
+ /* Now make sure that the ESSID item isn't double-quoted (rh #606518) */
+ ifcfg = svNewFile (testfile);
+ ASSERT (ifcfg != NULL,
+ "wifi-open-write-reread", "failed to load %s as shvarfile", testfile);
+
+ tmp = svGetValue (ifcfg, "ESSID", TRUE);
+ ASSERT (tmp != NULL,
+ "wifi-open-write-reread", "failed to read ESSID key from %s", testfile);
+
+ g_message ("%s", tmp);
+ ASSERT (strncmp (tmp, "\"\"", 2) != 0,
+ "wifi-open-write-reread", "unexpected ESSID double-quote in %s", testfile);
+
+ svCloseFile (ifcfg);
+
unlink (testfile);
ASSERT (reread != NULL,
@@ -6752,6 +7311,308 @@ test_write_wifi_wep_passphrase (void)
}
static void
+test_write_wifi_wep_40_ascii (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;
+ const unsigned char ssid_data[] = "blahblah40";
+ struct stat statbuf;
+
+ connection = nm_connection_new ();
+ ASSERT (connection != NULL,
+ "wifi-wep-40-ascii-write", "failed to allocate new connection");
+
+ /* Connection setting */
+ s_con = (NMSettingConnection *) nm_setting_connection_new ();
+ ASSERT (s_con != NULL,
+ "wifi-wep-40-ascii-write", "failed to allocate new %s setting",
+ NM_SETTING_CONNECTION_SETTING_NAME);
+ nm_connection_add_setting (connection, NM_SETTING (s_con));
+
+ uuid = nm_utils_uuid_generate ();
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_ID, "Test Write Wifi WEP 40 ASCII",
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
+ NULL);
+ g_free (uuid);
+
+ /* Wifi setting */
+ s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
+ ASSERT (s_wifi != NULL,
+ "wifi-wep-40-ascii-write", "failed to allocate new %s setting",
+ NM_SETTING_WIRELESS_SETTING_NAME);
+ 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 ();
+ ASSERT (s_wsec != NULL,
+ "wifi-wep-40-ascii-write", "failed to allocate new %s setting",
+ NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
+ nm_connection_add_setting (connection, NM_SETTING (s_wsec));
+
+ g_object_set (s_wsec,
+ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "none",
+ NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX, 2,
+ NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "shared",
+ NULL);
+ nm_setting_wireless_security_set_wep_key (s_wsec, 0, "lorem");
+ nm_setting_wireless_security_set_wep_key (s_wsec, 1, "ipsum");
+ nm_setting_wireless_security_set_wep_key (s_wsec, 2, "dolor");
+ nm_setting_wireless_security_set_wep_key (s_wsec, 3, "donec");
+
+ /* IP4 setting */
+ s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ ASSERT (s_ip4 != NULL,
+ "wifi-wep-40-ascii-write", "failed to allocate new %s setting",
+ NM_SETTING_IP4_CONFIG_SETTING_NAME);
+ 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 ();
+ ASSERT (s_ip6 != NULL,
+ "wifi-wep-40-ascii-write", "failed to allocate new %s setting",
+ NM_SETTING_IP6_CONFIG_SETTING_NAME);
+ nm_connection_add_setting (connection, NM_SETTING (s_ip6));
+
+ g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL);
+
+ ASSERT (nm_connection_verify (connection, &error) == TRUE,
+ "wifi-wep-40-ascii-write", "failed to verify connection: %s",
+ (error && error->message) ? error->message : "(unknown)");
+
+ /* Save the ifcfg */
+ success = writer_new_connection (connection,
+ TEST_SCRATCH_DIR "/network-scripts/",
+ &testfile,
+ &error);
+ ASSERT (success == TRUE,
+ "wifi-wep-40-ascii-write", "failed to write connection to disk: %s",
+ (error && error->message) ? error->message : "(unknown)");
+
+ ASSERT (testfile != NULL,
+ "wifi-wep-40-ascii-write", "didn't get ifcfg file path back after writing connection");
+
+ /* re-read the connection for comparison */
+ reread = connection_from_file (testfile,
+ NULL,
+ TYPE_WIRELESS,
+ NULL,
+ &unmanaged,
+ &keyfile,
+ &routefile,
+ &route6file,
+ &error,
+ &ignore_error);
+ unlink (testfile);
+
+ ASSERT (keyfile != NULL,
+ "wifi-wep-40-ascii-write-reread", "expected keyfile for '%s'", testfile);
+
+ ASSERT (stat (keyfile, &statbuf) == 0,
+ "wifi-wep-40-ascii-write-reread", "couldn't stat() '%s'", keyfile);
+ ASSERT (S_ISREG (statbuf.st_mode),
+ "wifi-wep-40-ascii-write-reread", "keyfile '%s' wasn't a normal file", keyfile);
+ ASSERT ((statbuf.st_mode & 0077) == 0,
+ "wifi-wep-40-ascii-write-reread", "keyfile '%s' wasn't readable only by its owner", keyfile);
+
+ unlink (keyfile);
+
+ ASSERT (reread != NULL,
+ "wifi-wep-40-ascii-write-reread", "failed to read %s: %s", testfile, error->message);
+
+ ASSERT (nm_connection_verify (reread, &error),
+ "wifi-wep-40-ascii-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
+
+ ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
+ "wifi-wep-40-ascii-write", "written and re-read connection weren't the same.");
+
+ g_free (testfile);
+ g_object_unref (connection);
+ g_object_unref (reread);
+}
+
+static void
+test_write_wifi_wep_104_ascii (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;
+ const unsigned char ssid_data[] = "blahblah104";
+ struct stat statbuf;
+
+ connection = nm_connection_new ();
+ ASSERT (connection != NULL,
+ "wifi-wep-104-ascii-write", "failed to allocate new connection");
+
+ /* Connection setting */
+ s_con = (NMSettingConnection *) nm_setting_connection_new ();
+ ASSERT (s_con != NULL,
+ "wifi-wep-104-ascii-write", "failed to allocate new %s setting",
+ NM_SETTING_CONNECTION_SETTING_NAME);
+ nm_connection_add_setting (connection, NM_SETTING (s_con));
+
+ uuid = nm_utils_uuid_generate ();
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_ID, "Test Write Wifi WEP 104 ASCII",
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
+ NULL);
+ g_free (uuid);
+
+ /* Wifi setting */
+ s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
+ ASSERT (s_wifi != NULL,
+ "wifi-wep-104-ascii-write", "failed to allocate new %s setting",
+ NM_SETTING_WIRELESS_SETTING_NAME);
+ 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 ();
+ ASSERT (s_wsec != NULL,
+ "wifi-wep-104-ascii-write", "failed to allocate new %s setting",
+ NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
+ nm_connection_add_setting (connection, NM_SETTING (s_wsec));
+
+ g_object_set (s_wsec,
+ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "none",
+ NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX, 0,
+ NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "open",
+ NULL);
+ nm_setting_wireless_security_set_wep_key (s_wsec, 0, "LoremIpsumSit");
+ nm_setting_wireless_security_set_wep_key (s_wsec, 1, "AlfaBetaGamma");
+ nm_setting_wireless_security_set_wep_key (s_wsec, 2, "WEP-104 ASCII");
+ nm_setting_wireless_security_set_wep_key (s_wsec, 3, "thisismyascii");
+
+ /* IP4 setting */
+ s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ ASSERT (s_ip4 != NULL,
+ "wifi-wep-104-ascii-write", "failed to allocate new %s setting",
+ NM_SETTING_IP4_CONFIG_SETTING_NAME);
+ 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 ();
+ ASSERT (s_ip6 != NULL,
+ "wifi-wep-104-ascii-write", "failed to allocate new %s setting",
+ NM_SETTING_IP6_CONFIG_SETTING_NAME);
+ nm_connection_add_setting (connection, NM_SETTING (s_ip6));
+
+ g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL);
+
+ ASSERT (nm_connection_verify (connection, &error) == TRUE,
+ "wifi-wep-104-ascii-write", "failed to verify connection: %s",
+ (error && error->message) ? error->message : "(unknown)");
+
+ /* Save the ifcfg */
+ success = writer_new_connection (connection,
+ TEST_SCRATCH_DIR "/network-scripts/",
+ &testfile,
+ &error);
+ ASSERT (success == TRUE,
+ "wifi-wep-104-ascii-write", "failed to write connection to disk: %s",
+ (error && error->message) ? error->message : "(unknown)");
+
+ ASSERT (testfile != NULL,
+ "wifi-wep-104-ascii-write", "didn't get ifcfg file path back after writing connection");
+
+ /* re-read the connection for comparison */
+ reread = connection_from_file (testfile,
+ NULL,
+ TYPE_WIRELESS,
+ NULL,
+ &unmanaged,
+ &keyfile,
+ &routefile,
+ &route6file,
+ &error,
+ &ignore_error);
+ unlink (testfile);
+
+ ASSERT (keyfile != NULL,
+ "wifi-wep-104-ascii-write-reread", "expected keyfile for '%s'", testfile);
+
+ ASSERT (stat (keyfile, &statbuf) == 0,
+ "wifi-wep-104-ascii-write-reread", "couldn't stat() '%s'", keyfile);
+ ASSERT (S_ISREG (statbuf.st_mode),
+ "wifi-wep-104-ascii-write-reread", "keyfile '%s' wasn't a normal file", keyfile);
+ ASSERT ((statbuf.st_mode & 0077) == 0,
+ "wifi-wep-104-ascii-write-reread", "keyfile '%s' wasn't readable only by its owner", keyfile);
+
+ unlink (keyfile);
+
+ ASSERT (reread != NULL,
+ "wifi-wep-104-ascii-write-reread", "failed to read %s: %s", testfile, error->message);
+
+ ASSERT (nm_connection_verify (reread, &error),
+ "wifi-wep-104-ascii-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
+
+ ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
+ "wifi-wep-104-ascii-write", "written and re-read connection weren't the same.");
+
+ g_free (testfile);
+ g_object_unref (connection);
+ g_object_unref (reread);
+}
+
+static void
test_write_wifi_leap (void)
{
NMConnection *connection;
@@ -8129,6 +8990,140 @@ test_read_ibft_malformed (const char *name, const char *iscsiadm_path)
}
static void
+test_write_wired_qeth_dhcp (void)
+{
+ NMConnection *connection;
+ NMConnection *reread;
+ NMSettingConnection *s_con;
+ NMSettingWired *s_wired;
+ NMSettingIP4Config *s_ip4;
+ NMSettingIP6Config *s_ip6;
+ char *uuid;
+ GPtrArray *subchans;
+ gboolean success;
+ GError *error = NULL;
+ char *testfile = NULL;
+ char *unmanaged = NULL;
+ char *keyfile = NULL;
+ char *routefile = NULL;
+ char *route6file = NULL;
+ gboolean ignore_error = FALSE;
+
+ connection = nm_connection_new ();
+ ASSERT (connection != NULL,
+ "wired-qeth-dhcp-write", "failed to allocate new connection");
+
+ /* Connection setting */
+ s_con = (NMSettingConnection *) nm_setting_connection_new ();
+ ASSERT (s_con != NULL,
+ "wired-qeth-dhcp-write", "failed to allocate new %s setting",
+ NM_SETTING_CONNECTION_SETTING_NAME);
+ nm_connection_add_setting (connection, NM_SETTING (s_con));
+
+ uuid = nm_utils_uuid_generate ();
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_ID, "Test Write Wired qeth Static",
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
+ NULL);
+ g_free (uuid);
+
+ /* Wired setting */
+ s_wired = (NMSettingWired *) nm_setting_wired_new ();
+ ASSERT (s_wired != NULL,
+ "wired-qeth-dhcp-write", "failed to allocate new %s setting",
+ NM_SETTING_WIRED_SETTING_NAME);
+ nm_connection_add_setting (connection, NM_SETTING (s_wired));
+
+ subchans = g_ptr_array_sized_new (3);
+ g_ptr_array_add (subchans, "0.0.600");
+ g_ptr_array_add (subchans, "0.0.601");
+ g_ptr_array_add (subchans, "0.0.602");
+ g_object_set (s_wired,
+ NM_SETTING_WIRED_S390_SUBCHANNELS, subchans,
+ NM_SETTING_WIRED_S390_NETTYPE, "qeth",
+ NULL);
+ g_ptr_array_free (subchans, TRUE);
+
+ nm_setting_wired_add_s390_option (s_wired, "portname", "FOOBAR");
+ nm_setting_wired_add_s390_option (s_wired, "portno", "1");
+ nm_setting_wired_add_s390_option (s_wired, "layer2", "0");
+ nm_setting_wired_add_s390_option (s_wired, "protocol", "blahbalh");
+
+ /* IP4 setting */
+ s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ ASSERT (s_ip4 != NULL,
+ "wired-qeth-dhcp-write", "failed to allocate new %s setting",
+ NM_SETTING_IP4_CONFIG_SETTING_NAME);
+ 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 ();
+ ASSERT (s_ip6 != NULL,
+ "wired-qeth-dhcp-write", "failed to allocate new %s setting",
+ NM_SETTING_IP6_CONFIG_SETTING_NAME);
+ nm_connection_add_setting (connection, NM_SETTING (s_ip6));
+
+ g_object_set (s_ip6,
+ NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NULL);
+
+ /* Verify */
+ ASSERT (nm_connection_verify (connection, &error) == TRUE,
+ "wired-qeth-dhcp-write", "failed to verify connection: %s",
+ (error && error->message) ? error->message : "(unknown)");
+
+ /* Save the ifcfg */
+ success = writer_new_connection (connection,
+ TEST_SCRATCH_DIR "/network-scripts/",
+ &testfile,
+ &error);
+ ASSERT (success == TRUE,
+ "wired-qeth-dhcp-write", "failed to write connection to disk: %s",
+ (error && error->message) ? error->message : "(unknown)");
+
+ ASSERT (testfile != NULL,
+ "wired-qeth-dhcp-write", "didn't get ifcfg file path back after writing connection");
+
+ /* re-read the connection for comparison */
+ reread = connection_from_file (testfile,
+ NULL,
+ TYPE_ETHERNET,
+ NULL,
+ &unmanaged,
+ &keyfile,
+ &routefile,
+ &route6file,
+ &error,
+ &ignore_error);
+ unlink (testfile);
+
+ ASSERT (reread != NULL,
+ "wired-qeth-dhcp-write-reread", "failed to read %s: %s", testfile, error->message);
+
+ ASSERT (nm_connection_verify (reread, &error),
+ "wired-qeth-dhcp-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
+
+ ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
+ "wired-qeth-dhcp-write", "written and re-read connection weren't the same.");
+
+ if (route6file)
+ unlink (route6file);
+
+ g_free (testfile);
+ g_free (keyfile);
+ g_free (routefile);
+ g_free (route6file);
+ g_object_unref (connection);
+ g_object_unref (reread);
+}
+
+static void
test_write_wired_pppoe (void)
{
NMConnection *connection;
@@ -8390,6 +9385,96 @@ test_write_mobile_broadband (gboolean gsm)
g_object_unref (connection);
}
+#define TEST_IFCFG_BRIDGE_MAIN TEST_IFCFG_DIR"/network-scripts/ifcfg-test-bridge-main"
+
+static void
+test_read_bridge_main (void)
+{
+ NMConnection *connection;
+ char *unmanaged = NULL;
+ char *keyfile = NULL;
+ char *routefile = NULL;
+ char *route6file = NULL;
+ gboolean ignore_error = FALSE;
+ GError *error = NULL;
+
+ connection = connection_from_file (TEST_IFCFG_BRIDGE_MAIN,
+ NULL,
+ TYPE_ETHERNET,
+ NULL,
+ &unmanaged,
+ &keyfile,
+ &routefile,
+ &route6file,
+ &error,
+ &ignore_error);
+ ASSERT (connection == NULL,
+ "bridge-main-read", "unexpected success reading %s", TEST_IFCFG_BRIDGE_MAIN);
+}
+
+#define TEST_IFCFG_BRIDGE_COMPONENT TEST_IFCFG_DIR"/network-scripts/ifcfg-test-bridge-component"
+
+static void
+test_read_bridge_component (void)
+{
+ NMConnection *connection;
+ char *unmanaged = NULL;
+ char *keyfile = NULL;
+ char *routefile = NULL;
+ char *route6file = NULL;
+ gboolean ignore_error = FALSE;
+ GError *error = NULL;
+
+ connection = connection_from_file (TEST_IFCFG_BRIDGE_COMPONENT,
+ NULL,
+ TYPE_ETHERNET,
+ NULL,
+ &unmanaged,
+ &keyfile,
+ &routefile,
+ &route6file,
+ &error,
+ &ignore_error);
+ ASSERT (connection != NULL,
+ "bridge-component-read", "unexpected failure reading %s", TEST_IFCFG_BRIDGE_COMPONENT);
+
+ ASSERT (unmanaged != NULL,
+ "bridge-component-read", "missing unmanaged spec from %s", TEST_IFCFG_BRIDGE_COMPONENT);
+
+ ASSERT (g_strcmp0 (unmanaged, "mac:00:22:15:59:62:97") == 0,
+ "bridge-component-read", "unexpected unmanaged spec from %s", TEST_IFCFG_BRIDGE_COMPONENT);
+
+ g_object_unref (connection);
+ g_free (unmanaged);
+}
+
+#define TEST_IFCFG_VLAN_INTERFACE TEST_IFCFG_DIR"/network-scripts/ifcfg-test-vlan-interface"
+
+static void
+test_read_vlan_interface (void)
+{
+ NMConnection *connection;
+ char *unmanaged = NULL;
+ char *keyfile = NULL;
+ char *routefile = NULL;
+ char *route6file = NULL;
+ gboolean ignore_error = FALSE;
+ GError *error = NULL;
+
+ connection = connection_from_file (TEST_IFCFG_VLAN_INTERFACE,
+ NULL,
+ TYPE_ETHERNET,
+ NULL,
+ &unmanaged,
+ &keyfile,
+ &routefile,
+ &route6file,
+ &error,
+ &ignore_error);
+ ASSERT (connection == NULL,
+ "vlan-interface-read", "unexpected success reading %s", TEST_IFCFG_VLAN_INTERFACE);
+}
+
#define TEST_IFCFG_WIFI_OPEN_SSID_BAD_HEX TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-open-ssid-bad-hex"
#define TEST_IFCFG_WIFI_OPEN_SSID_LONG_QUOTED TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-open-ssid-long-quoted"
#define TEST_IFCFG_WIFI_OPEN_SSID_LONG_HEX TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-open-ssid-long-hex"
@@ -8403,11 +9488,9 @@ test_write_mobile_broadband (gboolean gsm)
int main (int argc, char **argv)
{
GError *error = NULL;
- DBusGConnection *bus;
char *base;
g_type_init ();
- bus = dbus_g_bus_get (DBUS_BUS_SESSION, NULL);
if (!nm_utils_init (&error))
FAIL ("nm-utils-init", "failed to initialize libnm-util: %s", error->message);
@@ -8429,6 +9512,7 @@ int main (int argc, char **argv)
test_read_wired_static_routes_legacy ();
test_read_wired_ipv6_manual ();
test_read_wired_ipv6_only ();
+ test_read_wired_dhcp6_only ();
test_read_onboot_no ();
test_read_wired_8021x_peap_mschapv2 ();
test_read_wifi_open ();
@@ -8441,6 +9525,8 @@ int main (int argc, char **argv)
test_read_wifi_wep ();
test_read_wifi_wep_adhoc ();
test_read_wifi_wep_passphrase ();
+ test_read_wifi_wep_40_ascii ();
+ test_read_wifi_wep_104_ascii ();
test_read_wifi_leap ();
test_read_wifi_wpa_psk ();
test_read_wifi_wpa_psk_unquoted ();
@@ -8450,6 +9536,7 @@ int main (int argc, char **argv)
test_read_wifi_wpa_eap_tls ();
test_read_wifi_wpa_eap_ttls_tls ();
test_read_wifi_wep_eap_ttls_chap ();
+ test_read_wired_qeth_static ();
test_write_wired_static ();
test_write_wired_static_ip6_only ();
@@ -8462,6 +9549,8 @@ int main (int argc, char **argv)
test_write_wifi_wep ();
test_write_wifi_wep_adhoc ();
test_write_wifi_wep_passphrase ();
+ test_write_wifi_wep_40_ascii ();
+ test_write_wifi_wep_104_ascii ();
test_write_wifi_leap ();
test_write_wifi_wpa_psk ("Test Write Wifi WPA PSK",
"wifi-wpa-psk-write",
@@ -8497,6 +9586,7 @@ int main (int argc, char **argv)
test_write_wifi_wpa_eap_tls ();
test_write_wifi_wpa_eap_ttls_tls ();
test_write_wifi_wpa_eap_ttls_mschapv2 ();
+ test_write_wired_qeth_dhcp ();
/* iSCSI / ibft */
test_read_ibft_dhcp ();
@@ -8513,6 +9603,9 @@ int main (int argc, char **argv)
test_write_vpn ();
test_write_mobile_broadband (TRUE);
test_write_mobile_broadband (FALSE);
+ test_read_bridge_main ();
+ test_read_bridge_component ();
+ test_read_vlan_interface ();
base = g_path_get_basename (argv[0]);
fprintf (stdout, "%s: SUCCESS\n", base);
diff --git a/system-settings/plugins/ifcfg-rh/utils.c b/system-settings/plugins/ifcfg-rh/utils.c
index 211458bec8..92a0b802f0 100644
--- a/system-settings/plugins/ifcfg-rh/utils.c
+++ b/system-settings/plugins/ifcfg-rh/utils.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.
*
- * (C) Copyright 2008 - 2009 Red Hat, Inc.
+ * (C) Copyright 2008 - 2010 Red Hat, Inc.
*/
#include <glib.h>
@@ -115,6 +115,27 @@ utils_hexstr2bin (const char *hex, size_t len)
/* End from hostap */
+/*
+ * Check ';[a-fA-F0-9]{8}' file suffix used for temporary files by rpm when
+ * installing packages.
+ *
+ * Implementation taken from upstart.
+ */
+static gboolean
+check_rpm_temp_suffix (const char *path)
+{
+ const char *ptr;
+
+ g_return_val_if_fail (path != NULL, FALSE);
+
+ /* Matches *;[a-fA-F0-9]{8}; used by rpm */
+ ptr = strrchr (path, ';');
+ if (ptr && (strspn (ptr + 1, "abcdefABCDEF0123456789") == 8)
+ && (! ptr[9]))
+ return TRUE;
+ return FALSE;
+}
+
static gboolean
check_suffix (const char *base, const char *tag)
{
@@ -160,7 +181,10 @@ utils_should_ignore_file (const char *filename, gboolean only_ifcfg)
&& !check_suffix (base, TILDE_TAG)
&& !check_suffix (base, ORIG_TAG)
&& !check_suffix (base, REJ_TAG)
- && !check_suffix (base, RPMNEW_TAG))
+ && !check_suffix (base, RPMNEW_TAG)
+ && !check_suffix (base, AUGNEW_TAG)
+ && !check_suffix (base, AUGTMP_TAG)
+ && !check_rpm_temp_suffix (base))
ignore = FALSE;
g_free (base);
diff --git a/system-settings/plugins/ifcfg-rh/writer.c b/system-settings/plugins/ifcfg-rh/writer.c
index 30ef6e3941..cf1e2663a5 100644
--- a/system-settings/plugins/ifcfg-rh/writer.c
+++ b/system-settings/plugins/ifcfg-rh/writer.c
@@ -90,7 +90,7 @@ write_secret_file (const char *path,
tmppath = g_malloc0 (strlen (path) + 10);
if (!tmppath) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Could not allocate memory for temporary file for '%s'",
path);
return FALSE;
@@ -102,7 +102,7 @@ write_secret_file (const char *path,
errno = 0;
fd = mkstemp (tmppath);
if (fd < 0) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Could not create temporary file for '%s': %d",
path, errno);
goto out;
@@ -113,7 +113,7 @@ write_secret_file (const char *path,
if (fchmod (fd, S_IRUSR | S_IWUSR)) {
close (fd);
unlink (tmppath);
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Could not set permissions for temporary file '%s': %d",
path, errno);
goto out;
@@ -124,7 +124,7 @@ write_secret_file (const char *path,
if (written != len) {
close (fd);
unlink (tmppath);
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Could not write temporary file for '%s': %d",
path, errno);
goto out;
@@ -135,7 +135,7 @@ write_secret_file (const char *path,
errno = 0;
if (rename (tmppath, path)) {
unlink (tmppath);
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Could not rename temporary file to '%s': %d",
path, errno);
goto out;
@@ -302,7 +302,7 @@ write_object (NMSetting8021x *s_8021x,
new_file = utils_cert_path (ifcfg->fileName, objtype->suffix);
if (!new_file) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Could not create file path for %s / %s",
NM_SETTING_802_1X_SETTING_NAME, objtype->setting_key);
return FALSE;
@@ -317,7 +317,7 @@ write_object (NMSetting8021x *s_8021x,
svSetValue (ifcfg, objtype->ifcfg_key, new_file, FALSE);
return TRUE;
} else {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Could not write certificate/key for %s / %s: %s",
NM_SETTING_802_1X_SETTING_NAME, objtype->setting_key,
(write_error && write_error->message) ? write_error->message : "(unknown)");
@@ -535,7 +535,7 @@ write_wireless_security_setting (NMConnection *connection,
s_wsec = (NMSettingWirelessSecurity *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
if (!s_wsec) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Missing '%s' setting", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
return FALSE;
}
@@ -605,6 +605,8 @@ write_wireless_security_setting (NMConnection *connection,
key = nm_setting_wireless_security_get_wep_key (s_wsec, i);
if (key) {
+ char *ascii_key = NULL;
+
/* Passphrase needs a different ifcfg key since with WEP, there
* are some passphrases that are indistinguishable from WEP hex
* keys.
@@ -612,11 +614,19 @@ write_wireless_security_setting (NMConnection *connection,
key_type = nm_setting_wireless_security_get_wep_key_type (s_wsec);
if (key_type == NM_WEP_KEY_TYPE_PASSPHRASE)
tmp = g_strdup_printf ("KEY_PASSPHRASE%d", i + 1);
- else
+ else {
tmp = g_strdup_printf ("KEY%d", i + 1);
+ /* Add 's:' prefix for ASCII keys */
+ if (strlen (key) == 5 || strlen (key) == 13) {
+ ascii_key = g_strdup_printf ("s:%s", key);
+ key = ascii_key;
+ }
+ }
+
set_secret (ifcfg, tmp, key, FALSE);
g_free (tmp);
+ g_free (ascii_key);
}
}
}
@@ -694,7 +704,7 @@ write_wireless_setting (NMConnection *connection,
{
NMSettingWireless *s_wireless;
char *tmp, *tmp2;
- const GByteArray *ssid, *mac, *bssid;
+ const GByteArray *ssid, *device_mac, *cloned_mac, *bssid;
const char *mode;
char buf[33];
guint32 mtu, chan, i;
@@ -702,21 +712,31 @@ write_wireless_setting (NMConnection *connection,
s_wireless = (NMSettingWireless *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS);
if (!s_wireless) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Missing '%s' setting", NM_SETTING_WIRELESS_SETTING_NAME);
return FALSE;
}
svSetValue (ifcfg, "HWADDR", NULL, FALSE);
- mac = nm_setting_wireless_get_mac_address (s_wireless);
- if (mac) {
+ device_mac = nm_setting_wireless_get_mac_address (s_wireless);
+ if (device_mac) {
tmp = 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]);
+ device_mac->data[0], device_mac->data[1], device_mac->data[2],
+ device_mac->data[3], device_mac->data[4], device_mac->data[5]);
svSetValue (ifcfg, "HWADDR", tmp, FALSE);
g_free (tmp);
}
+ svSetValue (ifcfg, "MACADDR", NULL, FALSE);
+ cloned_mac = nm_setting_wireless_get_cloned_mac_address (s_wireless);
+ if (cloned_mac) {
+ tmp = g_strdup_printf ("%02X:%02X:%02X:%02X:%02X:%02X",
+ cloned_mac->data[0], cloned_mac->data[1], cloned_mac->data[2],
+ cloned_mac->data[3], cloned_mac->data[4], cloned_mac->data[5]);
+ svSetValue (ifcfg, "MACADDR", tmp, FALSE);
+ g_free (tmp);
+ }
+
svSetValue (ifcfg, "MTU", NULL, FALSE);
mtu = nm_setting_wireless_get_mtu (s_wireless);
if (mtu) {
@@ -727,12 +747,12 @@ write_wireless_setting (NMConnection *connection,
ssid = nm_setting_wireless_get_ssid (s_wireless);
if (!ssid) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Missing SSID in '%s' setting", NM_SETTING_WIRELESS_SETTING_NAME);
return FALSE;
}
if (!ssid->len || ssid->len > 32) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Invalid SSID in '%s' setting", NM_SETTING_WIRELESS_SETTING_NAME);
return FALSE;
}
@@ -758,13 +778,20 @@ write_wireless_setting (NMConnection *connection,
svSetValue (ifcfg, "ESSID", str->str, TRUE);
g_string_free (str, TRUE);
} else {
- /* Printable SSIDs get quoted */
+ /* Printable SSIDs always get quoted */
memset (buf, 0, sizeof (buf));
memcpy (buf, ssid->data, ssid->len);
- tmp2 = svEscape (buf);
- tmp = g_strdup_printf ("\"%s\"", tmp2);
- svSetValue (ifcfg, "ESSID", tmp, TRUE);
- g_free (tmp2);
+ tmp = svEscape (buf);
+
+ /* svEscape will usually quote the string, but just for consistency,
+ * if svEscape doesn't quote the ESSID, we quote it ourselves.
+ */
+ if (tmp[0] != '"' && tmp[strlen (tmp) - 1] != '"') {
+ tmp2 = g_strdup_printf ("\"%s\"", tmp);
+ svSetValue (ifcfg, "ESSID", tmp2, TRUE);
+ g_free (tmp2);
+ } else
+ svSetValue (ifcfg, "ESSID", tmp, TRUE);
g_free (tmp);
}
@@ -775,7 +802,7 @@ write_wireless_setting (NMConnection *connection,
svSetValue (ifcfg, "MODE", "Ad-Hoc", FALSE);
adhoc = TRUE;
} else {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Invalid mode '%s' in '%s' setting",
mode, NM_SETTING_WIRELESS_SETTING_NAME);
return FALSE;
@@ -813,26 +840,39 @@ static gboolean
write_wired_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
{
NMSettingWired *s_wired;
- const GByteArray *mac;
+ const GByteArray *device_mac, *cloned_mac;
char *tmp;
- guint32 mtu;
+ const char *nettype, *portname, *s390_key, *s390_val;
+ guint32 mtu, num_opts, i;
+ const GPtrArray *s390_subchannels;
+ GString *str;
s_wired = (NMSettingWired *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED);
if (!s_wired) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Missing '%s' setting", NM_SETTING_WIRED_SETTING_NAME);
return FALSE;
}
- mac = nm_setting_wired_get_mac_address (s_wired);
- if (mac) {
+ svSetValue (ifcfg, "HWADDR", NULL, FALSE);
+ device_mac = nm_setting_wired_get_mac_address (s_wired);
+ if (device_mac) {
tmp = 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]);
+ device_mac->data[0], device_mac->data[1], device_mac->data[2],
+ device_mac->data[3], device_mac->data[4], device_mac->data[5]);
svSetValue (ifcfg, "HWADDR", tmp, FALSE);
g_free (tmp);
}
+ cloned_mac = nm_setting_wired_get_cloned_mac_address (s_wired);
+ if (cloned_mac) {
+ tmp = g_strdup_printf ("%02X:%02X:%02X:%02X:%02X:%02X",
+ cloned_mac->data[0], cloned_mac->data[1], cloned_mac->data[2],
+ cloned_mac->data[3], cloned_mac->data[4], cloned_mac->data[5]);
+ svSetValue (ifcfg, "MACADDR", tmp, FALSE);
+ g_free (tmp);
+ }
+
svSetValue (ifcfg, "MTU", NULL, FALSE);
mtu = nm_setting_wired_get_mtu (s_wired);
if (mtu) {
@@ -841,6 +881,53 @@ write_wired_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
g_free (tmp);
}
+ svSetValue (ifcfg, "SUBCHANNELS", NULL, FALSE);
+ s390_subchannels = nm_setting_wired_get_s390_subchannels (s_wired);
+ if (s390_subchannels) {
+ if (s390_subchannels->len == 2) {
+ tmp = g_strdup_printf ("%s,%s",
+ (const char *) g_ptr_array_index (s390_subchannels, 0),
+ (const char *) g_ptr_array_index (s390_subchannels, 1));
+ } else if (s390_subchannels->len == 3) {
+ tmp = g_strdup_printf ("%s,%s,%s",
+ (const char *) g_ptr_array_index (s390_subchannels, 0),
+ (const char *) g_ptr_array_index (s390_subchannels, 1),
+ (const char *) g_ptr_array_index (s390_subchannels, 2));
+ }
+ svSetValue (ifcfg, "SUBCHANNELS", tmp, FALSE);
+ g_free (tmp);
+ }
+
+ svSetValue (ifcfg, "NETTYPE", NULL, FALSE);
+ nettype = nm_setting_wired_get_s390_nettype (s_wired);
+ if (nettype)
+ svSetValue (ifcfg, "NETTYPE", nettype, FALSE);
+
+ svSetValue (ifcfg, "PORTNAME", NULL, FALSE);
+ portname = nm_setting_wired_get_s390_option_by_key (s_wired, "portname");
+ if (portname)
+ svSetValue (ifcfg, "PORTNAME", portname, FALSE);
+
+ svSetValue (ifcfg, "OPTIONS", NULL, FALSE);
+ num_opts = nm_setting_wired_get_num_s390_options (s_wired);
+ if (s390_subchannels && num_opts) {
+ str = g_string_sized_new (30);
+ for (i = 0; i < num_opts; i++) {
+ nm_setting_wired_get_s390_option (s_wired, i, &s390_key, &s390_val);
+
+ /* portname is handled separately */
+ if (!strcmp (s390_key, "portname"))
+ continue;
+
+ if (str->len)
+ g_string_append_c (str, ' ');
+ g_string_append_printf (str, "%s=%s", s390_key, s390_val);
+ }
+ if (str->len)
+ svSetValue (ifcfg, "OPTIONS", str->str, FALSE);
+ g_string_free (str, TRUE);
+ }
+
svSetValue (ifcfg, "TYPE", TYPE_ETHERNET, FALSE);
return TRUE;
@@ -911,7 +998,7 @@ write_route_file_legacy (const char *filename, NMSettingIP4Config *s_ip4, GError
g_strfreev (route_items);
if (!g_file_set_contents (filename, route_contents, -1, NULL)) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Writing route file '%s' failed", filename);
goto error;
}
@@ -934,6 +1021,7 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
guint32 i, num;
GString *searches;
gboolean success = FALSE;
+ gboolean fake_ip4 = FALSE;
const char *method = NULL;
s_ip4 = (NMSettingIP4Config *) nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG);
@@ -971,15 +1059,19 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
return TRUE;
}
- value = nm_setting_ip4_config_get_method (s_ip4);
- g_assert (value);
- if (!strcmp (value, NM_SETTING_IP4_CONFIG_METHOD_AUTO))
+ /* Temporarily create fake IP4 setting if missing; method set to DHCP above */
+ if (!s_ip4) {
+ s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ fake_ip4 = TRUE;
+ }
+
+ if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_AUTO))
svSetValue (ifcfg, "BOOTPROTO", "dhcp", FALSE);
- else if (!strcmp (value, NM_SETTING_IP4_CONFIG_METHOD_MANUAL))
+ else if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_MANUAL))
svSetValue (ifcfg, "BOOTPROTO", "none", FALSE);
- else if (!strcmp (value, NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL))
+ else if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL))
svSetValue (ifcfg, "BOOTPROTO", "autoip", FALSE);
- else if (!strcmp (value, NM_SETTING_IP4_CONFIG_METHOD_SHARED))
+ else if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_SHARED))
svSetValue (ifcfg, "BOOTPROTO", "shared", FALSE);
num = nm_setting_ip4_config_get_num_addresses (s_ip4);
@@ -1069,7 +1161,7 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
svSetValue (ifcfg, "PEERROUTES", NULL, FALSE);
svSetValue (ifcfg, "DHCP_HOSTNAME", NULL, FALSE);
svSetValue (ifcfg, "DHCP_CLIENT_ID", NULL, FALSE);
- if (!strcmp (value, NM_SETTING_IP4_CONFIG_METHOD_AUTO)) {
+ if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_AUTO)) {
svSetValue (ifcfg, "PEERDNS",
nm_setting_ip4_config_get_ignore_auto_dns (s_ip4) ? "no" : "yes",
FALSE);
@@ -1094,7 +1186,7 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
/* Static routes - route-<name> file */
route_path = utils_get_route_path (ifcfg->fileName);
if (!route_path) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Could not get route file path for '%s'", ifcfg->fileName);
goto out;
}
@@ -1105,7 +1197,7 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
g_free (route_path);
routefile = utils_get_route_ifcfg (ifcfg->fileName, TRUE);
if (!routefile) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Could not create route file '%s'", routefile->fileName);
goto out;
}
@@ -1161,7 +1253,7 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
g_free (metric_key);
}
if (svWriteFile (routefile, 0644)) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Could not update route file '%s'", routefile->fileName);
svCloseFile (routefile);
goto out;
@@ -1177,6 +1269,9 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
success = TRUE;
out:
+ if (fake_ip4)
+ g_object_unref (s_ip4);
+
return success;
}
@@ -1227,7 +1322,7 @@ write_route6_file (const char *filename, NMSettingIP6Config *s_ip6, GError **err
g_strfreev (route_items);
if (!g_file_set_contents (filename, route_contents, -1, NULL)) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Writing route6 file '%s' failed", filename);
goto error;
}
@@ -1256,7 +1351,7 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
s_ip6 = (NMSettingIP6Config *) nm_connection_get_setting (connection, NM_TYPE_SETTING_IP6_CONFIG);
if (!s_ip6) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Missing '%s' setting", NM_SETTING_IP6_CONFIG_SETTING_NAME);
return FALSE;
}
@@ -1384,7 +1479,7 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
/* Static routes go to route6-<dev> file */
route6_path = utils_get_route6_path (ifcfg->fileName);
if (!route6_path) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Could not get route6 file path for '%s'", ifcfg->fileName);
goto error;
}
@@ -1438,7 +1533,7 @@ write_connection (NMConnection *connection,
s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
if (!s_con) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Missing '%s' setting", NM_SETTING_CONNECTION_SETTING_NAME);
return FALSE;
}
@@ -1457,14 +1552,14 @@ write_connection (NMConnection *connection,
}
if (!ifcfg) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Failed to open/create ifcfg file '%s'", ifcfg_name);
goto out;
}
type = nm_setting_connection_get_connection_type (s_con);
if (!type) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Missing connection type!");
goto out;
}
@@ -1472,7 +1567,7 @@ write_connection (NMConnection *connection,
if (!strcmp (type, NM_SETTING_WIRED_SETTING_NAME)) {
// FIXME: can't write PPPoE at this time
if (nm_connection_get_setting (connection, NM_TYPE_SETTING_PPPOE)) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Can't write connection type '%s'",
NM_SETTING_PPPOE_SETTING_NAME);
goto out;
@@ -1485,7 +1580,7 @@ write_connection (NMConnection *connection,
if (!write_wireless_setting (connection, ifcfg, &no_8021x, error))
goto out;
} else {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Can't write connection type '%s'", type);
goto out;
}
@@ -1507,7 +1602,7 @@ write_connection (NMConnection *connection,
write_connection_setting (s_con, ifcfg);
if (svWriteFile (ifcfg, 0644)) {
- g_set_error (error, ifcfg_plugin_error_quark (), 0,
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
"Can't write connection '%s'", ifcfg->fileName);
goto out;
}
diff --git a/system-settings/plugins/ifnet/Makefile.am b/system-settings/plugins/ifnet/Makefile.am
new file mode 100644
index 0000000000..f63f8ca710
--- /dev/null
+++ b/system-settings/plugins/ifnet/Makefile.am
@@ -0,0 +1,61 @@
+SUBDIRS = . tests
+INCLUDES = \
+ -I$(top_srcdir)/src/system-settings \
+ -I$(top_srcdir)/include \
+ -I$(top_srcdir)/libnm-glib \
+ -I$(top_srcdir)/libnm-util
+
+pkglib_LTLIBRARIES = libnm-settings-plugin-ifnet.la
+
+noinst_LTLIBRARIES = lib-ifnet-io.la
+
+libnm_settings_plugin_ifnet_la_SOURCES = \
+ nm-ifnet-connection.c \
+ nm-ifnet-connection.h \
+ plugin.c \
+ plugin.h
+
+libnm_settings_plugin_ifnet_la_CPPFLAGS = \
+ $(GLIB_CFLAGS) \
+ $(GMODULE_CFLAGS) \
+ $(DBUS_CFLAGS) \
+ $(GUDEV_CFLAGS) \
+ -DG_DISABLE_DEPRECATED \
+ -DSYSCONFDIR=\"$(sysconfdir)\"\
+ -g
+
+
+libnm_settings_plugin_ifnet_la_LDFLAGS = -module -avoid-version
+libnm_settings_plugin_ifnet_la_LIBADD = \
+ $(top_builddir)/libnm-util/libnm-util.la \
+ $(top_builddir)/libnm-glib/libnm-glib.la \
+ lib-ifnet-io.la\
+ $(GLIB_LIBS) \
+ $(GMODULE_LIBS) \
+ $(GUDEV_LIBS) \
+ $(GIO_LIBS)
+
+lib_ifnet_io_la_SOURCES = \
+ net_parser.c\
+ net_parser.h\
+ connection_parser.c \
+ connection_parser.h \
+ net_utils.h\
+ net_utils.c\
+ wpa_parser.h\
+ wpa_parser.c
+
+lib_ifnet_io_la_CPPFLAGS = \
+ $(GLIB_CFLAGS) \
+ $(DBUS_CFLAGS) \
+ -DG_DISABLE_DEPRECATED \
+ -DSYSCONFDIR=\"$(sysconfdir)\" \
+ -DSBINDIR=\"$(sbindir)\"\
+ -g
+
+lib_ifnet_io_la_LIBADD = \
+ $(top_builddir)/libnm-util/libnm-util.la \
+ $(GLIB_LIBS)\
+ $(GIO_LIBS)
+
+
diff --git a/system-settings/plugins/ifnet/connection_parser.c b/system-settings/plugins/ifnet/connection_parser.c
new file mode 100644
index 0000000000..f9fae51f35
--- /dev/null
+++ b/system-settings/plugins/ifnet/connection_parser.c
@@ -0,0 +1,2997 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * Mu Qiao <qiaomuf@gmail.com>
+ *
+ * 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) 1999-2010 Gentoo Foundation, Inc.
+ */
+
+#include <string.h>
+#include <arpa/inet.h>
+#include <stdlib.h>
+#include <netinet/ether.h>
+#include <errno.h>
+#include <ctype.h>
+#include <glib/gi18n.h>
+
+#include <nm-setting-connection.h>
+#include <nm-setting-ip4-config.h>
+#include <nm-setting-ip6-config.h>
+#include <nm-setting-ppp.h>
+#include <nm-setting-pppoe.h>
+#include <nm-setting-wired.h>
+#include <nm-setting-wireless.h>
+#include <nm-setting-8021x.h>
+#include <nm-system-config-interface.h>
+#include <nm-utils.h>
+
+#include "net_utils.h"
+#include "wpa_parser.h"
+#include "connection_parser.h"
+#include "nm-ifnet-connection.h"
+
+static const char *
+get_prefix (void)
+{
+ return _("System");
+}
+
+static void
+update_connection_id (NMConnection * connection, gchar * conn_name)
+{
+ gchar *idstr = NULL;
+ gchar *uuid_base = NULL;
+ gchar *uuid = NULL;
+ NMSettingConnection *setting;
+
+ idstr = g_strdup_printf ("%s (%s)", get_prefix (), conn_name);
+ uuid_base = idstr;
+ uuid = nm_utils_uuid_generate_from_string (uuid_base);
+ setting =
+ (NMSettingConnection *) nm_connection_get_setting (connection,
+ NM_TYPE_SETTING_CONNECTION);
+ g_object_set (setting, NM_SETTING_CONNECTION_ID, idstr,
+ NM_SETTING_CONNECTION_UUID, uuid, NULL);
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME,
+ "update_connection_setting_from_config_block: name:%s, id:%s, uuid: %s",
+ conn_name, idstr, uuid);
+
+ g_free (uuid);
+ g_free (idstr);
+}
+
+static gboolean
+eap_simple_reader (const char *eap_method,
+ gchar * ssid,
+ NMSetting8021x * s_8021x, gboolean phase2, GError ** error);
+static gboolean eap_tls_reader (const char *eap_method,
+ gchar * ssid,
+ NMSetting8021x * s_8021x,
+ gboolean phase2, GError ** error);
+
+static gboolean eap_peap_reader (const char *eap_method,
+ gchar * ssid,
+ NMSetting8021x * s_8021x,
+ gboolean phase2, GError ** error);
+
+static gboolean eap_ttls_reader (const char *eap_method,
+ gchar * ssid,
+ NMSetting8021x * s_8021x,
+ gboolean phase2, GError ** error);
+
+typedef struct {
+ const char *method;
+ gboolean (*reader) (const char *eap_method, gchar * ssid,
+ NMSetting8021x * s_8021x,
+ gboolean phase2, GError ** error);
+ gboolean wifi_phase2_only;
+} EAPReader;
+
+static EAPReader eap_readers[] = {
+ {"md5", eap_simple_reader, TRUE},
+ {"pap", eap_simple_reader, TRUE},
+ {"chap", eap_simple_reader, TRUE},
+ {"mschap", eap_simple_reader, TRUE},
+ {"mschapv2", eap_simple_reader, TRUE},
+ {"leap", eap_simple_reader, TRUE},
+ {"tls", eap_tls_reader, FALSE},
+ {"peap", eap_peap_reader, FALSE},
+ {"ttls", eap_ttls_reader, FALSE},
+ {NULL, NULL}
+};
+
+/* reading identity and password */
+static gboolean
+eap_simple_reader (const char *eap_method,
+ gchar * ssid,
+ NMSetting8021x * s_8021x, gboolean phase2, GError ** error)
+{
+ char *value;
+
+ /* identity */
+ value = wpa_get_value (ssid, "identity");
+ if (!value) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Missing IEEE_8021X_IDENTITY for EAP method '%s'.",
+ eap_method);
+ return FALSE;
+ }
+ g_object_set (s_8021x, NM_SETTING_802_1X_IDENTITY, value, NULL);
+
+ /* password */
+ value = wpa_get_value (ssid, "password");
+ if (!value) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Missing IEEE_8021X_PASSWORD for EAP method '%s'.",
+ eap_method);
+ return FALSE;
+ }
+
+ g_object_set (s_8021x, NM_SETTING_802_1X_PASSWORD, value, NULL);
+
+ return TRUE;
+}
+
+static gboolean
+eap_tls_reader (const char *eap_method,
+ gchar * ssid,
+ NMSetting8021x * s_8021x, gboolean phase2, GError ** error)
+{
+ char *value;
+ char *ca_cert = NULL;
+ char *client_cert = NULL;
+ char *privkey = NULL;
+ char *privkey_password = NULL;
+ gboolean success = FALSE;
+ NMSetting8021xCKFormat privkey_format =
+ NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
+
+ /* identity */
+ value = wpa_get_value (ssid, "identity");
+ if (!value) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Missing IEEE_8021X_IDENTITY for EAP method '%s'.",
+ eap_method);
+ return FALSE;
+ }
+ g_object_set (s_8021x, NM_SETTING_802_1X_IDENTITY, value, NULL);
+
+ /* ca cert */
+ ca_cert = wpa_get_value (ssid, phase2 ? "ca_cert2" : "ca_cert");
+ if (ca_cert) {
+ if (phase2) {
+ if (!nm_setting_802_1x_set_phase2_ca_cert (s_8021x,
+ ca_cert,
+ NM_SETTING_802_1X_CK_SCHEME_PATH,
+ NULL, error))
+ goto done;
+ } else {
+ if (!nm_setting_802_1x_set_ca_cert (s_8021x,
+ ca_cert,
+ NM_SETTING_802_1X_CK_SCHEME_PATH,
+ NULL, error))
+ goto done;
+ }
+ } else {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ " warning: missing %s for EAP"
+ " method '%s'; this is insecure!",
+ phase2 ? "IEEE_8021X_INNER_CA_CERT" :
+ "IEEE_8021X_CA_CERT", eap_method);
+ }
+
+ /* Private key password */
+ privkey_password = wpa_get_value (ssid,
+ phase2 ? "private_key_passwd2" :
+ "private_key_passwd");
+
+ if (!privkey_password) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Missing %s for EAP method '%s'.",
+ phase2 ? "IEEE_8021X_INNER_PRIVATE_KEY_PASSWORD" :
+ "IEEE_8021X_PRIVATE_KEY_PASSWORD", eap_method);
+ goto done;
+ }
+
+ /* The private key itself */
+ privkey = wpa_get_value (ssid, phase2 ? "private_key2" : "private_key");
+ if (!privkey) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Missing %s for EAP method '%s'.",
+ phase2 ? "IEEE_8021X_INNER_PRIVATE_KEY" :
+ "IEEE_8021X_PRIVATE_KEY", eap_method);
+ goto done;
+ }
+
+ if (phase2) {
+ if (!nm_setting_802_1x_set_phase2_private_key (s_8021x,
+ privkey,
+ privkey_password,
+ NM_SETTING_802_1X_CK_SCHEME_PATH,
+ &privkey_format,
+ error))
+ goto done;
+ } else {
+ if (!nm_setting_802_1x_set_private_key (s_8021x,
+ privkey,
+ privkey_password,
+ NM_SETTING_802_1X_CK_SCHEME_PATH,
+ &privkey_format, error))
+ goto done;
+ }
+
+ /* Only set the client certificate if the private key is not PKCS#12 format,
+ * as NM (due to supplicant restrictions) requires. If the key was PKCS#12,
+ * then nm_setting_802_1x_set_private_key() already set the client certificate
+ * to the same value as the private key.
+ */
+ if (privkey_format == NM_SETTING_802_1X_CK_FORMAT_RAW_KEY
+ || privkey_format == NM_SETTING_802_1X_CK_FORMAT_X509) {
+ client_cert = wpa_get_value (ssid,
+ phase2 ? "client_cert2" :
+ "client_cert");
+ if (!client_cert) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Missing %s for EAP method '%s'.",
+ phase2 ? "IEEE_8021X_INNER_CLIENT_CERT" :
+ "IEEE_8021X_CLIENT_CERT", eap_method);
+ goto done;
+ }
+
+ if (phase2) {
+ if (!nm_setting_802_1x_set_phase2_client_cert (s_8021x,
+ client_cert,
+ NM_SETTING_802_1X_CK_SCHEME_PATH,
+ NULL,
+ error))
+ goto done;
+ } else {
+ if (!nm_setting_802_1x_set_client_cert (s_8021x,
+ client_cert,
+ NM_SETTING_802_1X_CK_SCHEME_PATH,
+ NULL, error))
+ goto done;
+ }
+ }
+
+ success = TRUE;
+
+ done:
+ return success;
+}
+
+static gboolean
+eap_peap_reader (const char *eap_method,
+ gchar * ssid,
+ NMSetting8021x * s_8021x, gboolean phase2, GError ** error)
+{
+ char *ca_cert = NULL;
+ char *inner_auth = NULL;
+ char *peapver = NULL;
+ char *lower;
+ char **list = NULL, **iter;
+ gboolean success = FALSE;
+
+ ca_cert = wpa_get_value (ssid, "ca_cert");
+ if (ca_cert) {
+ if (!nm_setting_802_1x_set_ca_cert (s_8021x,
+ ca_cert,
+ NM_SETTING_802_1X_CK_SCHEME_PATH,
+ NULL, error))
+ goto done;
+ } else {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME, " warning: missing "
+ "IEEE_8021X_CA_CERT for EAP method '%s'; this is"
+ " insecure!", eap_method);
+ }
+
+ peapver = wpa_get_value (ssid, "phase1");
+ /* peap version, default is automatic */
+ if (peapver && strstr (peapver, "peapver")) {
+ if (strstr (peapver, "peapver=0"))
+ g_object_set (s_8021x, NM_SETTING_802_1X_PHASE1_PEAPVER,
+ "0", NULL);
+ else if (strstr (peapver, "peapver=1"))
+ g_object_set (s_8021x, NM_SETTING_802_1X_PHASE1_PEAPVER,
+ "1", NULL);
+ else {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Unknown IEEE_8021X_PEAP_VERSION value '%s'",
+ peapver);
+ goto done;
+ }
+ }
+
+ /* peaplabel */
+ if (peapver && strstr (peapver, "peaplabel=1"))
+ g_object_set (s_8021x, NM_SETTING_802_1X_PHASE1_PEAPLABEL, "1",
+ NULL);
+
+ inner_auth = wpa_get_value (ssid, "phase2");
+ if (!inner_auth) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Missing IEEE_8021X_INNER_AUTH_METHODS.");
+ goto done;
+ }
+ /* Handle options for the inner auth method */
+ list = g_strsplit (inner_auth, " ", 0);
+ for (iter = list; iter && *iter; iter++) {
+ gchar *pos = NULL;
+
+ if (!strlen (*iter))
+ continue;
+
+ if (!(pos = strstr (*iter, "MSCHAPV2"))
+ || !(pos = strstr (*iter, "MD5"))
+ || !(pos = strstr (*iter, "GTC"))) {
+ if (!eap_simple_reader
+ (pos, ssid, s_8021x, TRUE, error))
+ goto done;
+ } else if (!(pos = strstr (*iter, "TLS"))) {
+ if (!eap_tls_reader (pos, ssid, s_8021x, TRUE, error))
+ goto done;
+ } else {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Unknown IEEE_8021X_INNER_AUTH_METHOD '%s'.",
+ *iter);
+ goto done;
+ }
+
+ pos = strchr (*iter, '=');
+ pos++;
+ lower = g_ascii_strdown (pos, -1);
+ g_object_set (s_8021x, NM_SETTING_802_1X_PHASE2_AUTH, lower,
+ NULL);
+ g_free (lower);
+ break;
+ }
+
+ if (!nm_setting_802_1x_get_phase2_auth (s_8021x)) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "No valid IEEE_8021X_INNER_AUTH_METHODS found.");
+ goto done;
+ }
+
+ success = TRUE;
+
+ done:
+ if (list)
+ g_strfreev (list);
+ return success;
+}
+
+static gboolean
+eap_ttls_reader (const char *eap_method,
+ gchar * ssid,
+ NMSetting8021x * s_8021x, gboolean phase2, GError ** error)
+{
+ gboolean success = FALSE;
+ char *anon_ident = NULL;
+ char *ca_cert = NULL;
+ char *tmp;
+ char **list = NULL, **iter;
+ char *inner_auth = NULL;
+
+ /* ca cert */
+ ca_cert = wpa_get_value (ssid, "ca_cert");
+ if (ca_cert) {
+ if (!nm_setting_802_1x_set_ca_cert (s_8021x,
+ ca_cert,
+ NM_SETTING_802_1X_CK_SCHEME_PATH,
+ NULL, error))
+ goto done;
+ } else {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME, " warning: missing "
+ "IEEE_8021X_CA_CERT for EAP method '%s'; this is"
+ " insecure!", eap_method);
+ }
+
+ /* anonymous indentity for tls */
+ anon_ident = wpa_get_value (ssid, "anonymous_identity");
+ if (anon_ident && strlen (anon_ident))
+ g_object_set (s_8021x, NM_SETTING_802_1X_ANONYMOUS_IDENTITY,
+ anon_ident, NULL);
+
+ tmp = wpa_get_value (ssid, "phase2");
+ if (!tmp) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Missing IEEE_8021X_INNER_AUTH_METHODS.");
+ goto done;
+ }
+
+ /* Handle options for the inner auth method */
+ inner_auth = g_ascii_strdown (tmp, -1);
+ list = g_strsplit (inner_auth, " ", 0);
+ for (iter = list; iter && *iter; iter++) {
+ gchar *pos = NULL;
+
+ if (!strlen (*iter))
+ continue;
+ if ((pos = strstr (*iter, "mschapv2")) != NULL
+ || (pos = strstr (*iter, "mschap")) != NULL
+ || (pos = strstr (*iter, "pap")) != NULL
+ || (pos = strstr (*iter, "chap")) != NULL) {
+ if (!eap_simple_reader
+ (pos, ssid, s_8021x, TRUE, error))
+ goto done;
+ g_object_set (s_8021x, NM_SETTING_802_1X_PHASE2_AUTH,
+ pos, NULL);
+ } else if ((pos = strstr (*iter, "tls")) != NULL) {
+ if (!eap_tls_reader (pos, ssid, s_8021x, TRUE, error))
+ goto done;
+ g_object_set (s_8021x, NM_SETTING_802_1X_PHASE2_AUTHEAP,
+ "tls", NULL);
+ } else if ((pos = strstr (*iter, "mschapv2")) != NULL
+ || (pos = strstr (*iter, "md5")) != NULL) {
+ if (!eap_simple_reader
+ (pos, ssid, s_8021x, TRUE, error)) {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME, "SIMPLE ERROR");
+ goto done;
+ }
+ g_object_set (s_8021x, NM_SETTING_802_1X_PHASE2_AUTHEAP,
+ pos, NULL);
+ } else {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Unknown IEEE_8021X_INNER_AUTH_METHOD '%s'.",
+ *iter);
+ goto done;
+ }
+ break;
+ }
+
+ success = TRUE;
+ done:
+ if (list)
+ g_strfreev (list);
+ if (inner_auth)
+ g_free (inner_auth);
+ return success;
+}
+
+/* type is already decided by net_parser, this function is just used to
+ * doing tansformation*/
+static const gchar *
+guess_connection_type (gchar * conn_name)
+{
+ const gchar *type = ifnet_get_data (conn_name, "type");
+ const gchar *name = conn_name;
+ const gchar *ret_type = NULL;
+
+ if (name && !strcmp ("ppp", type))
+ ret_type = NM_SETTING_PPPOE_SETTING_NAME;
+
+ if (name && !strcmp ("wireless", type))
+ ret_type = NM_SETTING_WIRELESS_SETTING_NAME;
+
+ if (!ret_type)
+ ret_type = NM_SETTING_WIRED_SETTING_NAME;
+
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME,
+ "guessed connection type (%s) = %s", name, ret_type);
+ return ret_type;
+}
+
+/* Reading mac address for setting connection option.
+ * Unmanaged device mac address is required by NetworkManager*/
+static gboolean
+read_mac_address (gchar * conn_name, GByteArray ** array, GError ** error)
+{
+ gchar *value = ifnet_get_data (conn_name, "mac");
+ struct ether_addr *mac;
+
+ if (!value || !strlen (value)) {
+ return TRUE;
+ }
+
+ mac = ether_aton (value);
+ if (!mac) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "The MAC address '%s' was invalid.", value);
+ return FALSE;
+ }
+
+ *array = g_byte_array_sized_new (ETH_ALEN);
+ g_byte_array_append (*array, (guint8 *) mac->ether_addr_octet,
+ ETH_ALEN);
+ return TRUE;
+}
+
+static void
+make_wired_connection_setting (NMConnection * connection, gchar * conn_name,
+ GError ** error)
+{
+ GByteArray *mac = NULL;
+ NMSettingWired *s_wired = NULL;
+ gchar *value = NULL;
+
+ s_wired = NM_SETTING_WIRED (nm_setting_wired_new ());
+
+ /* mtu_xxx */
+ value = ifnet_get_data (conn_name, "mtu");
+ if (value) {
+ long int mtu;
+
+ errno = 0;
+ mtu = strtol (value, NULL, 10);
+ if (errno || mtu < 0 || mtu > 65535) {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ " warning: invalid MTU '%s' for %s",
+ value, conn_name);
+ } else
+ g_object_set (s_wired, NM_SETTING_WIRED_MTU,
+ (guint32) mtu, NULL);
+ }
+
+ if (read_mac_address (conn_name, &mac, error)) {
+ if (mac) {
+ g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS,
+ mac, NULL);
+ g_byte_array_free (mac, TRUE);
+ }
+ } else {
+ g_object_unref (s_wired);
+ s_wired = NULL;
+ }
+ if (s_wired)
+ nm_connection_add_setting (connection, NM_SETTING (s_wired));
+}
+
+/* add NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME,
+ * NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID in future*/
+static void
+make_ip4_setting (NMConnection * connection, gchar * conn_name, GError ** error)
+{
+
+ NMSettingIP4Config *ip4_setting =
+ NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ());
+ gchar *value;
+ gboolean is_static_block = is_static_ip4 (conn_name);
+ ip_block *iblock = NULL;
+
+ /* set dhcp options (dhcp_xxx) */
+ value = ifnet_get_data (conn_name, "dhcp");
+ g_object_set (ip4_setting, NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS, value
+ && strstr (value, "nodns") ? TRUE : FALSE,
+ NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES, value
+ && strstr (value, "nogateway") ? TRUE : FALSE, NULL);
+
+ if (!is_static_block) {
+ g_object_set (ip4_setting,
+ NM_SETTING_IP4_CONFIG_METHOD,
+ NM_SETTING_IP4_CONFIG_METHOD_AUTO,
+ NM_SETTING_IP4_CONFIG_NEVER_DEFAULT, FALSE, NULL);
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Using DHCP for %s",
+ conn_name);
+ } else {
+ iblock = convert_ip4_config_block (conn_name);
+ if (!iblock) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Ifnet plugin: can't aquire ip configuration for %s",
+ conn_name);
+ g_object_unref (ip4_setting);
+ return;
+ }
+ /************** add all ip settings to the connection**********/
+ while (iblock) {
+ ip_block *current_iblock;
+ NMIP4Address *ip4_addr = nm_ip4_address_new ();
+
+ nm_ip4_address_set_address (ip4_addr, iblock->ip);
+ nm_ip4_address_set_prefix (ip4_addr,
+ nm_utils_ip4_netmask_to_prefix
+ (iblock->netmask));
+ /* currently all the IPs has the same gateway */
+ nm_ip4_address_set_gateway (ip4_addr, iblock->gateway);
+ if (iblock->gateway)
+ g_object_set (ip4_setting,
+ NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES,
+ TRUE, NULL);
+ if (nm_setting_ip4_config_add_address
+ (ip4_setting, ip4_addr)) {
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME,
+ "new address: %d", iblock->ip);
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME,
+ "ipv4 addresses count: %d",
+ nm_setting_ip4_config_get_num_addresses
+ (ip4_setting));
+ } else {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ "ignoring duplicate IP4 address");
+ }
+ nm_ip4_address_unref (ip4_addr);
+ current_iblock = iblock;
+ iblock = iblock->next;
+ destroy_ip_block (current_iblock);
+
+ }
+ g_object_set (ip4_setting,
+ NM_SETTING_IP4_CONFIG_METHOD,
+ NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
+ NM_SETTING_IP4_CONFIG_NEVER_DEFAULT,
+ !has_default_ip4_route (conn_name), NULL);
+ }
+
+ /* add dhcp hostname and client id */
+ if (!is_static_block) {
+ gchar *dhcp_hostname, *client_id;
+
+ get_dhcp_hostname_and_client_id (&dhcp_hostname, &client_id);
+ if (dhcp_hostname) {
+ g_object_set (ip4_setting,
+ NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME,
+ dhcp_hostname, NULL);
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "DHCP hostname: %s",
+ dhcp_hostname);
+ g_free (dhcp_hostname);
+ }
+ if (client_id) {
+ g_object_set (ip4_setting,
+ NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID,
+ client_id, NULL);
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "DHCP client id: %s",
+ client_id);
+ g_free (client_id);
+ }
+ }
+
+ /* add all IPv4 dns servers, IPv6 servers will be ignored */
+ set_ip4_dns_servers (ip4_setting, conn_name);
+
+ /* DNS searches */
+ value = (gchar *) ifnet_get_data (conn_name, "dns_search");
+ if (value) {
+ char **searches = NULL;
+
+ strip_string (value, '"');
+
+ searches = g_strsplit (value, " ", 0);
+ if (searches) {
+ char **item;
+
+ for (item = searches; *item; item++) {
+ if (strlen (*item)) {
+ if (!nm_setting_ip4_config_add_dns_search (ip4_setting, *item))
+ PLUGIN_WARN
+ (IFNET_PLUGIN_NAME,
+ " warning: duplicate DNS domain '%s'",
+ *item);
+ }
+ }
+ g_strfreev (searches);
+ }
+ }
+
+ /* static routes */
+ iblock = convert_ip4_routes_block (conn_name);
+ while (iblock) {
+ ip_block *current_iblock = iblock;
+ gchar *metric_str;
+ long int metric;
+ NMIP4Route *route = nm_ip4_route_new ();
+
+ nm_ip4_route_set_dest (route, iblock->ip);
+ nm_ip4_route_set_next_hop (route, iblock->gateway);
+ nm_ip4_route_set_prefix (route,
+ nm_utils_ip4_netmask_to_prefix
+ (iblock->netmask));
+ if ((metric_str = ifnet_get_data (conn_name, "metric")) != NULL) {
+ metric = strtol (metric_str, NULL, 10);
+ nm_ip4_route_set_metric (route, (guint32) metric);
+ } else {
+ metric_str = ifnet_get_global_data ("metric");
+ if (metric_str) {
+ metric = strtol (metric_str, NULL, 10);
+ nm_ip4_route_set_metric (route,
+ (guint32) metric);
+ g_free (metric_str);
+ }
+ }
+
+ if (!nm_setting_ip4_config_add_route (ip4_setting, route))
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ "warning: duplicate IP4 route");
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME,
+ "new IP4 route:%d\n", iblock->ip);
+
+ nm_ip4_route_unref (route);
+
+ current_iblock = iblock;
+ iblock = iblock->next;
+ destroy_ip_block (current_iblock);
+ }
+
+ /* Finally add setting to connection */
+ nm_connection_add_setting (connection, NM_SETTING (ip4_setting));
+}
+
+static void
+make_ip6_setting (NMConnection * connection, gchar * conn_name, GError ** error)
+{
+ NMSettingIP6Config *s_ip6 = NULL;
+ gboolean is_static_block = is_static_ip6 (conn_name);
+
+ // used to disable IPv6
+ gboolean ipv6_enabled = FALSE;
+ gchar *method = NM_SETTING_IP6_CONFIG_METHOD_MANUAL;
+ gchar *value;
+ ip6_block *iblock;
+ gboolean never_default = !has_default_ip6_route (conn_name);
+
+ s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ if (!s_ip6) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Could not allocate IP6 setting");
+ return;
+ }
+
+ value = ifnet_get_data (conn_name, "enable_ipv6");
+ if (value && is_true (value))
+ ipv6_enabled = TRUE;
+
+ //FIXME Handle other methods that NM supports in future
+ // Currently only Manual and DHCP are supported
+ if (!ipv6_enabled) {
+ g_object_set (s_ip6,
+ NM_SETTING_IP6_CONFIG_METHOD,
+ NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL);
+ goto done;
+ } else if (!is_static_block) {
+ // config_eth* contains "dhcp6"
+ method = NM_SETTING_IP6_CONFIG_METHOD_AUTO;
+ never_default = FALSE;
+ }
+ // else if (!has_ip6_address(conn_name))
+ // doesn't have "dhcp6" && doesn't have any ipv6 address
+ // method = NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL;
+ else
+ // doesn't have "dhcp6" && has at least one ipv6 address
+ method = NM_SETTING_IP6_CONFIG_METHOD_MANUAL;
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "IPv6 for %s enabled, using %s",
+ conn_name, method);
+
+ g_object_set (s_ip6,
+ NM_SETTING_IP6_CONFIG_METHOD, method,
+ NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS, FALSE,
+ NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES, FALSE,
+ NM_SETTING_IP6_CONFIG_NEVER_DEFAULT, never_default, NULL);
+
+ /* Make manual settings */
+ if (!strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_MANUAL)) {
+ ip6_block *current_iblock;
+
+ iblock = convert_ip6_config_block (conn_name);
+ if (!iblock) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Ifnet plugin: can't aquire ip6 configuration for %s",
+ conn_name);
+ goto error;
+ }
+ /* add all IPv6 addresses */
+ while (iblock) {
+ NMIP6Address *ip6_addr = nm_ip6_address_new ();
+
+ nm_ip6_address_set_address (ip6_addr, iblock->ip);
+ nm_ip6_address_set_prefix (ip6_addr, iblock->prefix);
+ if (nm_setting_ip6_config_add_address (s_ip6, ip6_addr)) {
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME,
+ "ipv6 addresses count: %d",
+ nm_setting_ip6_config_get_num_addresses
+ (s_ip6));
+ } else {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ "ignoring duplicate IP4 address");
+ }
+ nm_ip6_address_unref (ip6_addr);
+ current_iblock = iblock;
+ iblock = iblock->next;
+ destroy_ip6_block (current_iblock);
+ }
+
+ } else if (!strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_AUTO)) {
+ /* - autoconf or DHCPv6 stuff goes here */
+ }
+ // DNS Servers, set NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS TRUE here
+ set_ip6_dns_servers (s_ip6, conn_name);
+
+ /* DNS searches ('DOMAIN' key) are read by make_ip4_setting() and included in NMSettingIP4Config */
+
+ // Add routes
+ iblock = convert_ip6_routes_block (conn_name);
+ if (iblock)
+ g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES,
+ TRUE, NULL);
+ /* Add all IPv6 routes */
+ while (iblock) {
+ ip6_block *current_iblock = iblock;
+ gchar *metric_str;
+ long int metric = 1;
+ NMIP6Route *route = nm_ip6_route_new ();
+
+ nm_ip6_route_set_dest (route, iblock->ip);
+ nm_ip6_route_set_next_hop (route, iblock->next_hop);
+ nm_ip6_route_set_prefix (route, iblock->prefix);
+ /* metric is not per routes configuration right now
+ * global metric is also supported (metric="x") */
+ if ((metric_str = ifnet_get_data (conn_name, "metric")) != NULL) {
+ metric = strtol (metric_str, NULL, 10);
+ nm_ip6_route_set_metric (route, (guint32) metric);
+ } else {
+ metric_str = ifnet_get_global_data ("metric");
+ if (metric_str) {
+ metric = strtol (metric_str, NULL, 10);
+ nm_ip6_route_set_metric (route,
+ (guint32) metric);
+ g_free (metric_str);
+ } else
+ nm_ip6_route_set_metric (route, (guint32) 1);
+ }
+
+ if (!nm_setting_ip6_config_add_route (s_ip6, route))
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ " warning: duplicate IP6 route");
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, " info: new IP6 route");
+ nm_ip6_route_unref (route);
+
+ current_iblock = iblock;
+ iblock = iblock->next;
+ destroy_ip6_block (current_iblock);
+ }
+
+ done:
+ nm_connection_add_setting (connection, NM_SETTING (s_ip6));
+ return;
+
+ error:
+ g_object_unref (s_ip6);
+ PLUGIN_WARN (IFNET_PLUGIN_NAME, " warning: Ignore IPv6 for %s",
+ conn_name);
+ return;
+}
+
+static NMSetting *
+make_wireless_connection_setting (gchar * conn_name,
+ NMSetting8021x ** s_8021x, GError ** error)
+{
+ GByteArray *array, *mac = NULL;
+ NMSettingWireless *wireless_setting = NULL;
+ gboolean adhoc = FALSE;
+ gchar *value;
+ gchar *type;
+
+ /* PPP over WIFI is not supported */
+ g_return_val_if_fail (conn_name != NULL
+ && strcmp (ifnet_get_data (conn_name, "type"),
+ "ppp") != 0, NULL);
+ type = ifnet_get_data (conn_name, "type");
+ if (strcmp (type, "ppp") == 0) {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ "PPP over WIFI is not supported yet");
+ return NULL;
+ }
+
+ wireless_setting = NM_SETTING_WIRELESS (nm_setting_wireless_new ());
+ if (read_mac_address (conn_name, &mac, error)) {
+ if (mac) {
+ g_object_set (wireless_setting,
+ NM_SETTING_WIRELESS_MAC_ADDRESS, mac,
+ NULL);
+ g_byte_array_free (mac, TRUE);
+
+ }
+ } else {
+ g_object_unref (wireless_setting);
+ return NULL;
+ }
+
+ /* handle ssid (hex and ascii) */
+ if (conn_name) {
+ gsize ssid_len = 0, value_len = strlen (conn_name);
+ char *p = conn_name, *tmp;
+ char buf[33];
+
+ ssid_len = value_len;
+ if ((value_len > 2) && (g_str_has_prefix (conn_name, "0x"))) {
+ /* Hex representation */
+ if (value_len % 2) {
+ g_set_error (error, ifnet_plugin_error_quark (),
+ 0,
+ "Invalid SSID '%s' size (looks like hex but length not multiple of 2)",
+ conn_name);
+ goto error;
+ }
+ // ignore "0x"
+ p = conn_name + 2;
+ if (!is_hex (p)) {
+ g_set_error (error,
+ ifnet_plugin_error_quark (),
+ 0,
+ "Invalid SSID '%s' character (looks like hex SSID but '%c' isn't a hex digit)",
+ conn_name, *p);
+ goto error;
+
+ }
+ tmp = utils_hexstr2bin (conn_name + 2, value_len - 2);
+ ssid_len = (value_len - 2) / 2;
+ memcpy (buf, tmp, ssid_len);
+ g_free (tmp);
+ p = &buf[0];
+ }
+
+ if (ssid_len > 32 || ssid_len == 0) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Invalid SSID '%s' (size %zu not between 1 and 32 inclusive)",
+ conn_name, ssid_len);
+ goto error;
+ }
+ array = g_byte_array_sized_new (ssid_len);
+ g_byte_array_append (array, (const guint8 *) p, ssid_len);
+ g_object_set (wireless_setting, NM_SETTING_WIRELESS_SSID, array,
+ NULL);
+ g_byte_array_free (array, TRUE);
+ } else {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Missing SSID");
+ goto error;
+ }
+
+ /* mode=0: infrastructure
+ * mode=1: adhoc */
+ value = wpa_get_value (conn_name, "mode");
+ if (value)
+ adhoc = strcmp (value, "1") == 0 ? TRUE : FALSE;
+
+ if (exist_ssid (conn_name)) {
+ const char *mode = adhoc ? "adhoc" : "infrastructure";
+
+ g_object_set (wireless_setting, NM_SETTING_WIRELESS_MODE, mode,
+ NULL);
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Using mode: %s", mode);
+ }
+
+ /* BSSID setting */
+ value = wpa_get_value (conn_name, "bssid");
+ if (value) {
+ struct ether_addr *eth;
+ GByteArray *bssid;
+
+ eth = ether_aton (value);
+ if (!eth) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Invalid BSSID '%s'", value);
+ goto error;
+ }
+
+ bssid = g_byte_array_sized_new (ETH_ALEN);
+ g_byte_array_append (bssid, eth->ether_addr_octet, ETH_ALEN);
+ g_object_set (wireless_setting, NM_SETTING_WIRELESS_BSSID,
+ bssid, NULL);
+ g_byte_array_free (bssid, TRUE);
+
+ }
+
+ /* mtu_ssid="xx" */
+ value = ifnet_get_data (conn_name, "mtu");
+ if (value) {
+ long int mtu;
+
+ errno = 0;
+ mtu = strtol (value, NULL, 10);
+ if (errno || mtu < 0 || mtu > 50000) {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ " warning: invalid MTU '%s' for %s",
+ value, conn_name);
+ } else
+ g_object_set (wireless_setting, NM_SETTING_WIRELESS_MTU,
+ (guint32) mtu, NULL);
+
+ }
+
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "wireless_setting added for %s",
+ conn_name);
+ return NM_SETTING (wireless_setting);
+ error:
+ if (wireless_setting)
+ g_object_unref (wireless_setting);
+ return NULL;
+
+}
+
+static NMSettingWirelessSecurity *
+make_leap_setting (gchar * ssid, GError ** error)
+{
+ NMSettingWirelessSecurity *wsec;
+ char *value;
+
+ wsec =
+ NM_SETTING_WIRELESS_SECURITY (nm_setting_wireless_security_new ());
+
+ value = wpa_get_value (ssid, "key_mgmt");
+ if (!value || strcmp (value, "IEEE8021X"))
+ goto error; /* Not LEAP */
+
+ value = wpa_get_value (ssid, "eap");
+ if (!value || strcasecmp (value, "LEAP"))
+ goto error; /* Not LEAP */
+
+ value = wpa_get_value (ssid, "password");
+ if (value && strlen (value))
+ g_object_set (wsec, NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD,
+ value, NULL);
+
+ value = wpa_get_value (ssid, "identity");
+ if (!value || !strlen (value)) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Missing LEAP identity");
+ goto error;
+ }
+ g_object_set (wsec, NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME, value,
+ NULL);
+
+ g_object_set (wsec,
+ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "ieee8021x",
+ NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "leap", NULL);
+
+ return wsec;
+ error:
+ if (wsec)
+ g_object_unref (wsec);
+ return NULL;
+}
+
+static gboolean
+add_one_wep_key (gchar * ssid, gchar * key, int key_idx,
+ NMSettingWirelessSecurity * s_wsec, GError ** error)
+{
+ gchar *value;
+ gboolean success = FALSE;
+
+ g_return_val_if_fail (ssid != NULL, FALSE);
+ g_return_val_if_fail (key != NULL, FALSE);
+ g_return_val_if_fail (key_idx >= 0 && key_idx <= 3, FALSE);
+ g_return_val_if_fail (s_wsec != NULL, FALSE);
+ value = wpa_get_value (ssid, key);
+ if (!value)
+ return TRUE;
+ key = NULL;
+ /* Validate keys */
+ if (strlen (value) == 10 || strlen (value) == 26) {
+ /* Hexadecimal WEP key */
+ char *p = value;
+
+ if (!is_hex (p)) {
+ g_set_error (error, ifnet_plugin_error_quark (),
+ 0, "Invalid hexadecimal WEP key.");
+ goto out;
+ }
+ key = g_strdup (value);
+ } else if (value[0] == '"'
+ && (strlen (value) == 7 || strlen (value) == 15)) {
+ /* ASCII passphrase */
+ char *tmp = g_strdup (value);
+ char *p = strip_string (tmp, '"');
+
+ if (!is_ascii (p)) {
+ g_set_error (error, ifnet_plugin_error_quark (),
+ 0, "Invalid ASCII WEP passphrase.");
+ g_free (tmp);
+ goto out;
+
+ }
+
+ key = utils_bin2hexstr (tmp, strlen (tmp), strlen (tmp) * 2);
+ g_free (tmp);
+ } else {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Invalid WEP key length. Key: %s", value);
+ goto out;
+ }
+
+ if (key) {
+ nm_setting_wireless_security_set_wep_key (s_wsec, key_idx, key);
+ g_free (key);
+ success = TRUE;
+ }
+
+ out:
+ return success;
+
+}
+
+static gboolean
+add_wep_keys (gchar * ssid, NMSettingWirelessSecurity * s_wsec, GError ** error)
+{
+ if (!add_one_wep_key (ssid, "wep_key0", 0, s_wsec, error))
+ return FALSE;
+ if (!add_one_wep_key (ssid, "wep_key1", 1, s_wsec, error))
+ return FALSE;
+ if (!add_one_wep_key (ssid, "wep_key2", 2, s_wsec, error))
+ return FALSE;
+ if (!add_one_wep_key (ssid, "wep_key3", 3, s_wsec, error))
+ return FALSE;
+ return TRUE;
+
+}
+
+static NMSettingWirelessSecurity *
+make_wep_setting (gchar * ssid, GError ** error)
+{
+ gchar *auth_alg;
+ int default_key_idx = 0;
+ gchar *value;
+ NMSettingWirelessSecurity *s_wireless_sec;
+
+ s_wireless_sec =
+ NM_SETTING_WIRELESS_SECURITY (nm_setting_wireless_security_new ());
+ g_object_set (s_wireless_sec, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT,
+ "none", NULL);
+
+ /* default key index */
+ value = wpa_get_value (ssid, "wep_tx_keyidx");
+ if (value) {
+ default_key_idx = atoi (value);
+ if (default_key_idx >= 0 && default_key_idx <= 3) {
+ g_object_set (s_wireless_sec,
+ NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX,
+ default_key_idx, NULL);
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME,
+ "Default key index: %d", default_key_idx);
+ } else {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Invalid default WEP key '%s'", value);
+ goto error;
+ }
+ }
+
+ if (!add_wep_keys (ssid, s_wireless_sec, error))
+ goto error;
+
+ /* If there's a default key, ensure that key exists */
+ if ((default_key_idx == 1)
+ && !nm_setting_wireless_security_get_wep_key (s_wireless_sec, 1)) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Default WEP key index was 2, but no valid KEY2 exists.");
+ goto error;
+ } else if ((default_key_idx == 2)
+ && !nm_setting_wireless_security_get_wep_key (s_wireless_sec,
+ 2)) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Default WEP key index was 3, but no valid KEY3 exists.");
+ goto error;
+ } else if ((default_key_idx == 3)
+ && !nm_setting_wireless_security_get_wep_key (s_wireless_sec,
+ 3)) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Default WEP key index was 4, but no valid KEY4 exists.");
+ goto error;
+ }
+
+ /* authentication algorithms */
+ auth_alg = wpa_get_value (ssid, "auth_alg");
+ if (auth_alg) {
+ if (strcmp (auth_alg, "OPEN") == 0) {
+ g_object_set (s_wireless_sec,
+ NM_SETTING_WIRELESS_SECURITY_AUTH_ALG,
+ "open", NULL);
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME,
+ "WEP: Use open system authentication");
+ } else if (strcmp (auth_alg, "SHARED") == 0) {
+ g_object_set (s_wireless_sec,
+ NM_SETTING_WIRELESS_SECURITY_AUTH_ALG,
+ "shared", NULL);
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME,
+ "WEP: Use shared system authentication");
+ } else {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Invalid WEP authentication algorithm '%s'",
+ auth_alg);
+ goto error;
+ }
+
+ }
+
+ if (!nm_setting_wireless_security_get_wep_key (s_wireless_sec, 0)
+ && !nm_setting_wireless_security_get_wep_key (s_wireless_sec, 1)
+ && !nm_setting_wireless_security_get_wep_key (s_wireless_sec, 2)
+ && !nm_setting_wireless_security_get_wep_key (s_wireless_sec, 3)
+ && !nm_setting_wireless_security_get_wep_tx_keyidx (s_wireless_sec)) {
+ if (auth_alg && !strcmp (auth_alg, "shared")) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "WEP Shared Key authentication is invalid for "
+ "unencrypted connections.");
+ goto error;
+ }
+ /* Unencrypted */
+ g_object_unref (s_wireless_sec);
+ s_wireless_sec = NULL;
+ }
+ return s_wireless_sec;
+
+ error:
+ if (s_wireless_sec)
+ g_object_unref (s_wireless_sec);
+ return NULL;
+}
+
+static char *
+parse_wpa_psk (gchar * psk, GError ** error)
+{
+ gchar *p, *hashed = NULL;
+ gboolean quoted = FALSE;
+
+ if (!psk) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Missing WPA_PSK for WPA-PSK key management");
+ return NULL;
+ }
+
+ /* Passphrase must be between 10 and 66 characters in length becuase WPA
+ * hex keys are exactly 64 characters (no quoting), and WPA passphrases
+ * are between 8 and 63 characters (inclusive), plus optional quoting if
+ * the passphrase contains spaces.
+ */
+
+ p = psk;
+ if (p[0] == '"' && psk[strlen (psk) - 1] == '"')
+ quoted = TRUE;
+ if (!quoted && (strlen (psk) == 64)) {
+ /* Verify the hex PSK; 64 digits */
+ if (!is_hex (p)) {
+ g_set_error (error, ifnet_plugin_error_quark (),
+ 0,
+ "Invalid WPA_PSK (contains non-hexadecimal characters)");
+ goto out;
+ }
+ hashed = g_strdup (psk);
+ } else {
+ strip_string (p, '"');
+
+ /* Length check */
+ if (strlen (p) < 8 || strlen (p) > 63) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Invalid WPA_PSK (passphrases must be between "
+ "8 and 63 characters long (inclusive))");
+ goto out;
+ }
+
+ hashed = g_strdup (p);
+ }
+
+ if (!hashed) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Invalid WPA_PSK (doesn't look like a passphrase or hex key)");
+ goto out;
+ }
+
+ out:
+ return hashed;
+}
+
+static gboolean
+fill_wpa_ciphers (gchar * ssid,
+ NMSettingWirelessSecurity * wsec,
+ gboolean group, gboolean adhoc)
+{
+ char *value = NULL, *p;
+ char **list = NULL, **iter;
+ int i = 0;
+
+ p = value = wpa_get_value (ssid, group ? "group" : "pairwise");
+ if (!value)
+ return TRUE;
+
+ list = g_strsplit_set (p, " ", 0);
+ for (iter = list; iter && *iter; iter++, i++) {
+ /* Ad-Hoc configurations cannot have pairwise ciphers, and can only
+ * have one group cipher. Ignore any additional group ciphers and
+ * any pairwise ciphers specified.
+ */
+ if (adhoc) {
+ if (group && (i > 0)) {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ " warning: ignoring group cipher '%s' (only one group cipher allowed in Ad-Hoc mode)",
+ *iter);
+ continue;
+ } else if (!group) {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ " warning: ignoring pairwise cipher '%s' (pairwise not used in Ad-Hoc mode)",
+ *iter);
+ continue;
+ }
+ }
+
+ if (!strcmp (*iter, "CCMP")) {
+ if (group)
+ nm_setting_wireless_security_add_group (wsec,
+ "ccmp");
+ else
+ nm_setting_wireless_security_add_pairwise (wsec,
+ "ccmp");
+ } else if (!strcmp (*iter, "TKIP")) {
+ if (group)
+ nm_setting_wireless_security_add_group (wsec,
+ "tkip");
+ else
+ nm_setting_wireless_security_add_pairwise (wsec,
+ "tkip");
+ } else if (group && !strcmp (*iter, "WEP104"))
+ nm_setting_wireless_security_add_group (wsec, "wep104");
+ else if (group && !strcmp (*iter, "WEP40"))
+ nm_setting_wireless_security_add_group (wsec, "wep40");
+ else {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ " warning: ignoring invalid %s cipher '%s'",
+ group ? "CIPHER_GROUP" : "CIPHER_PAIRWISE",
+ *iter);
+ }
+ }
+
+ if (list)
+ g_strfreev (list);
+ return TRUE;
+}
+
+static NMSetting8021x *
+fill_8021x (gchar * ssid, gchar * key_mgmt, gboolean wifi, GError ** error)
+{
+ NMSetting8021x *s_8021x;
+ char *value;
+ char **list, **iter;
+
+ value = wpa_get_value (ssid, "eap");
+ if (!value) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Missing IEEE_8021X_EAP_METHODS for key management '%s'",
+ key_mgmt);
+ return NULL;
+ }
+
+ list = g_strsplit (value, " ", 0);
+
+ s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
+ /* Validate and handle each EAP method */
+ for (iter = list; iter && *iter; iter++) {
+ EAPReader *eap = &eap_readers[0];
+ gboolean found = FALSE;
+ char *lower = NULL;
+
+ lower = g_ascii_strdown (*iter, -1);
+ while (eap->method && !found) {
+ if (strcmp (eap->method, lower))
+ goto next;
+
+ /* Some EAP methods don't provide keying material, thus they
+ * cannot be used with WiFi unless they are an inner method
+ * used with TTLS or PEAP or whatever.
+ */
+ if (wifi && eap->wifi_phase2_only) {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ " warning: ignored invalid "
+ "IEEE_8021X_EAP_METHOD '%s'; not allowed for wifi.",
+ lower);
+ goto next;
+ }
+
+ /* Parse EAP method specific options */
+ if (!(*eap->reader)
+ (lower, ssid, s_8021x, FALSE, error)) {
+ g_free (lower);
+ goto error;
+ }
+ nm_setting_802_1x_add_eap_method (s_8021x, lower);
+ found = TRUE;
+
+ next:
+ eap++;
+ }
+
+ if (!found) {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ " warning: ignored unknown"
+ "IEEE_8021X_EAP_METHOD '%s'.", lower);
+ }
+ g_free (lower);
+ }
+ g_strfreev (list);
+
+ if (nm_setting_802_1x_get_num_eap_methods (s_8021x) == 0) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "No valid EAP methods found in IEEE_8021X_EAP_METHODS.");
+ goto error;
+ }
+
+ return s_8021x;
+
+ error:
+ g_object_unref (s_8021x);
+ return NULL;
+}
+
+static NMSettingWirelessSecurity *
+make_wpa_setting (gchar * ssid, NMSetting8021x ** s_8021x, GError ** error)
+{
+ NMSettingWirelessSecurity *wsec;
+ char *value, *lower;
+ gboolean adhoc = FALSE;
+
+ if (!exist_ssid (ssid)) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "No security info found for ssid: %s", ssid);
+ return NULL;
+ }
+
+ wsec =
+ NM_SETTING_WIRELESS_SECURITY (nm_setting_wireless_security_new ());
+
+ /* mode=1: adhoc
+ * mode=0: infrastructure */
+ value = wpa_get_value (ssid, "mode");
+ if (value)
+ adhoc = strcmp (value, "1") == 0 ? TRUE : FALSE;
+
+ value = wpa_get_value (ssid, "key_mgmt");
+ /* Not WPA or Dynamic WEP */
+ if (!value)
+ goto error;
+ if (strcmp (value, "WPA-PSK") && strcmp (value, "WPA-EAP"))
+ goto error;
+ /* Pairwise and Group ciphers */
+ fill_wpa_ciphers (ssid, wsec, FALSE, adhoc);
+ fill_wpa_ciphers (ssid, wsec, TRUE, adhoc);
+
+ /* WPA and/or RSN */
+ if (adhoc) {
+ /* Ad-Hoc mode only supports WPA proto for now */
+ nm_setting_wireless_security_add_proto (wsec, "wpa");
+ } else {
+ nm_setting_wireless_security_add_proto (wsec, "wpa");
+ nm_setting_wireless_security_add_proto (wsec, "rsn");
+
+ }
+
+ if (!strcmp (value, "WPA-PSK")) {
+ gchar *psk = parse_wpa_psk (wpa_get_value (ssid, "psk"), error);
+
+ if (!psk)
+ goto error;
+ g_object_set (wsec, NM_SETTING_WIRELESS_SECURITY_PSK, psk,
+ NULL);
+ g_free (psk);
+
+ if (adhoc)
+ g_object_set (wsec,
+ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT,
+ "wpa-none", NULL);
+ else
+ g_object_set (wsec,
+ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT,
+ "wpa-psk", NULL);
+ } else if (!strcmp (value, "WPA-EAP") || !strcmp (value, "IEEE8021X")) {
+ if (adhoc) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Ad-Hoc mode cannot be used with KEY_MGMT type '%s'",
+ value);
+ goto error;
+ }
+ *s_8021x = fill_8021x (ssid, value, TRUE, error);
+ if (!*s_8021x)
+ goto error;
+
+ lower = g_ascii_strdown (value, -1);
+ g_object_set (wsec, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT,
+ lower, NULL);
+ g_free (lower);
+ } else {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Unknown wireless KEY_MGMT type '%s'", value);
+ goto error;
+ }
+ return wsec;
+ error:
+ if (wsec)
+ g_object_unref (wsec);
+ return NULL;
+}
+
+static NMSettingWirelessSecurity *
+make_wireless_security_setting (gchar *
+ conn_name,
+ NMSetting8021x ** s_8021x, GError ** error)
+{
+ NMSettingWirelessSecurity *wsec = NULL;
+ gchar *ssid;
+ gboolean adhoc = FALSE;
+ gchar *value;
+
+ g_return_val_if_fail (conn_name != NULL
+ && strcmp (ifnet_get_data (conn_name, "type"),
+ "ppp") != 0, NULL);
+ if (!wpa_get_value (conn_name, "ssid"))
+ return NULL;
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME,
+ "updating wireless security settings (%s).", conn_name);
+
+ ssid = conn_name;
+ value = wpa_get_value (ssid, "mode");
+ if (value)
+ adhoc = strcmp (value, "1") == 0 ? TRUE : FALSE;
+
+ if (!adhoc) {
+ wsec = make_leap_setting (ssid, error);
+ if (error && *error)
+ goto error;
+ }
+ if (!wsec) {
+ wsec = make_wpa_setting (ssid, s_8021x, error);
+ if (error && *error)
+ goto error;
+ }
+ if (!wsec) {
+ wsec = make_wep_setting (ssid, error);
+ if (error && *error)
+ goto error;
+ }
+
+ if (!wsec) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Can't handle security information for ssid: %s",
+ conn_name);
+ }
+
+ return wsec;
+ error:
+ return NULL;
+}
+
+/* Currently only support username and password */
+static void
+make_pppoe_connection_setting (NMConnection * connection,
+ gchar * conn_name, GError ** error)
+{
+ NMSettingPPPOE *s_pppoe;
+ NMSettingPPP *s_ppp;
+ gchar *value;
+
+ s_pppoe = NM_SETTING_PPPOE (nm_setting_pppoe_new ());
+
+ /* username */
+ value = ifnet_get_data (conn_name, "username");
+ if (!value) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "ppp requires at lease a username");
+ return;
+ }
+ g_object_set (s_pppoe, NM_SETTING_PPPOE_USERNAME, value, NULL);
+
+ /* password */
+ value = ifnet_get_data (conn_name, "password");
+ if (!value) {
+ value = "";
+ }
+
+ g_object_set (s_pppoe, NM_SETTING_PPPOE_PASSWORD, value, NULL);
+ nm_connection_add_setting (connection, NM_SETTING (s_pppoe));
+
+ /* PPP setting */
+ s_ppp = (NMSettingPPP *) nm_setting_ppp_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_ppp));
+}
+
+NMConnection *
+ifnet_update_connection_from_config_block (gchar * conn_name, GError ** error)
+{
+ const gchar *type = NULL;
+ NMConnection *connection = NULL;
+ NMSettingConnection *setting = NULL;
+ NMSetting8021x *s_8021x = NULL;
+ NMSettingWirelessSecurity *wsec = NULL;
+ gboolean auto_conn = TRUE;
+ gchar *value = NULL;
+ gboolean success = FALSE;
+
+ connection = nm_connection_new ();
+ if (!connection)
+ return NULL;
+ setting =
+ (NMSettingConnection *) nm_connection_get_setting (connection,
+ NM_TYPE_SETTING_CONNECTION);
+ if (!setting) {
+ setting = NM_SETTING_CONNECTION (nm_setting_connection_new ());
+ g_assert (setting);
+ nm_connection_add_setting (connection, NM_SETTING (setting));
+ }
+
+ type = guess_connection_type (conn_name);
+ value = ifnet_get_data (conn_name, "auto");
+ if (value && !strcmp (value, "false"))
+ auto_conn = FALSE;
+ update_connection_id (connection, conn_name);
+ g_object_set (setting, NM_SETTING_CONNECTION_TYPE, type,
+ NM_SETTING_CONNECTION_READ_ONLY, FALSE,
+ NM_SETTING_CONNECTION_AUTOCONNECT, auto_conn, NULL);
+
+ if (!strcmp (NM_SETTING_WIRED_SETTING_NAME, type)
+ || !strcmp (NM_SETTING_PPPOE_SETTING_NAME, type)) {
+ /* wired setting */
+ make_wired_connection_setting (connection, conn_name, error);
+ if (error && *error) {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ "Found error: %s", (*error)->message);
+ goto error;
+ }
+ /* pppoe setting */
+ if (!strcmp (NM_SETTING_PPPOE_SETTING_NAME, type))
+ make_pppoe_connection_setting (connection, conn_name,
+ error);
+ if (error && *error) {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ "Found error: %s", (*error)->message);
+ goto error;
+ }
+ } else if (!strcmp (NM_SETTING_WIRELESS_SETTING_NAME, type)) {
+ /* wireless setting */
+ NMSetting *wireless_setting =
+ make_wireless_connection_setting (conn_name,
+ &s_8021x,
+ error);
+
+ if (!wireless_setting) {
+ goto error;
+ }
+ nm_connection_add_setting (connection, wireless_setting);
+
+ if (error && *error) {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ "Found error: %s", (*error)->message);
+ goto error;
+ }
+
+ /* wireless security setting */
+ wsec =
+ make_wireless_security_setting (conn_name, &s_8021x, error);
+ if (wsec) {
+ nm_connection_add_setting (connection,
+ NM_SETTING (wsec));
+ if (s_8021x)
+ nm_connection_add_setting (connection,
+ NM_SETTING
+ (s_8021x));
+ g_object_set (wireless_setting, NM_SETTING_WIRELESS_SEC,
+ NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NULL);
+ }
+
+ if (error && *error) {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ "Found error: %s", (*error)->message);
+ goto error;
+ }
+
+ } else
+ goto error;
+
+ /* IPv4 setting */
+ make_ip4_setting (connection, conn_name, error);
+ if (error && *error)
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ "Found error: %s", (*error)->message);
+
+ /* IPv6 setting */
+ make_ip6_setting (connection, conn_name, error);
+ if (error && *error)
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ "Found error: %s", (*error)->message);
+
+ success = nm_connection_verify (connection, error);
+ if (error && *error)
+ 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;
+}
+
+typedef NMSetting8021xCKScheme (*SchemeFunc) (NMSetting8021x * setting);
+typedef const char *(*PathFunc) (NMSetting8021x * setting);
+typedef const GByteArray *(*BlobFunc) (NMSetting8021x * setting);
+
+typedef struct ObjectType {
+ const char *setting_key;
+ SchemeFunc scheme_func;
+ PathFunc path_func;
+ BlobFunc blob_func;
+ const char *conn_name_key;
+ const char *suffix;
+} ObjectType;
+
+static const ObjectType ca_type = {
+ NM_SETTING_802_1X_CA_CERT,
+ nm_setting_802_1x_get_ca_cert_scheme,
+ nm_setting_802_1x_get_ca_cert_path,
+ nm_setting_802_1x_get_ca_cert_blob,
+ "ca_cert",
+ "ca-cert.der"
+};
+
+static const ObjectType phase2_ca_type = {
+ NM_SETTING_802_1X_PHASE2_CA_CERT,
+ nm_setting_802_1x_get_phase2_ca_cert_scheme,
+ nm_setting_802_1x_get_phase2_ca_cert_path,
+ nm_setting_802_1x_get_phase2_ca_cert_blob,
+ "ca_cert2",
+ "inner-ca-cert.der"
+};
+
+static const ObjectType client_type = {
+ NM_SETTING_802_1X_CLIENT_CERT,
+ nm_setting_802_1x_get_client_cert_scheme,
+ nm_setting_802_1x_get_client_cert_path,
+ nm_setting_802_1x_get_client_cert_blob,
+ "client_cert",
+ "client-cert.der"
+};
+
+static const ObjectType phase2_client_type = {
+ NM_SETTING_802_1X_PHASE2_CLIENT_CERT,
+ nm_setting_802_1x_get_phase2_client_cert_scheme,
+ nm_setting_802_1x_get_phase2_client_cert_path,
+ nm_setting_802_1x_get_phase2_client_cert_blob,
+ "client_cert2",
+ "inner-client-cert.der"
+};
+
+static const ObjectType pk_type = {
+ NM_SETTING_802_1X_PRIVATE_KEY,
+ nm_setting_802_1x_get_private_key_scheme,
+ nm_setting_802_1x_get_private_key_path,
+ nm_setting_802_1x_get_private_key_blob,
+ "private_key",
+ "private-key.pem"
+};
+
+static const ObjectType phase2_pk_type = {
+ NM_SETTING_802_1X_PHASE2_PRIVATE_KEY,
+ nm_setting_802_1x_get_phase2_private_key_scheme,
+ nm_setting_802_1x_get_phase2_private_key_path,
+ nm_setting_802_1x_get_phase2_private_key_blob,
+ "private_key2",
+ "inner-private-key.pem"
+};
+
+static const ObjectType p12_type = {
+ NM_SETTING_802_1X_PRIVATE_KEY,
+ nm_setting_802_1x_get_private_key_scheme,
+ nm_setting_802_1x_get_private_key_path,
+ nm_setting_802_1x_get_private_key_blob,
+ "private_key",
+ "private-key.p12"
+};
+
+static const ObjectType phase2_p12_type = {
+ NM_SETTING_802_1X_PHASE2_PRIVATE_KEY,
+ nm_setting_802_1x_get_phase2_private_key_scheme,
+ nm_setting_802_1x_get_phase2_private_key_path,
+ nm_setting_802_1x_get_phase2_private_key_blob,
+ "private_key2",
+ "inner-private-key.p12"
+};
+
+static gboolean
+write_object (NMSetting8021x * s_8021x,
+ gchar * conn_name,
+ const GByteArray * override_data,
+ const ObjectType * objtype, GError ** error)
+{
+ NMSetting8021xCKScheme scheme;
+ const char *path = NULL;
+ const GByteArray *blob = NULL;
+
+ g_return_val_if_fail (conn_name != NULL, FALSE);
+ g_return_val_if_fail (objtype != NULL, FALSE);
+ if (override_data)
+ /* if given explicit data to save, always use that instead of asking
+ * the setting what to do.
+ */
+ blob = override_data;
+ else {
+ scheme = (*(objtype->scheme_func)) (s_8021x);
+ switch (scheme) {
+ case NM_SETTING_802_1X_CK_SCHEME_BLOB:
+ blob = (*(objtype->blob_func)) (s_8021x);
+ break;
+ case NM_SETTING_802_1X_CK_SCHEME_PATH:
+ path = (*(objtype->path_func)) (s_8021x);
+ break;
+ default:
+ break;
+ }
+ }
+
+ /* If the object path was specified, prefer that over any raw cert data that
+ * may have been sent.
+ */
+ if (path) {
+ wpa_set_data (conn_name, (gchar *) objtype->conn_name_key,
+ (gchar *) path);
+ return TRUE;
+ }
+
+ /* does not support writing encryption data now */
+ if (blob) {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ " warning: Currently we do not support certs writing.");
+ }
+
+ return TRUE;
+}
+
+static gboolean
+write_8021x_certs (NMSetting8021x * s_8021x,
+ gboolean phase2, gchar * conn_name, GError ** error)
+{
+ char *password = NULL;
+ const ObjectType *otype = NULL;
+ gboolean is_pkcs12 = FALSE, success = FALSE;
+ const GByteArray *blob = NULL;
+ GByteArray *enc_key = NULL;
+ gchar *generated_pw = NULL;
+
+ /* CA certificate */
+ if (phase2)
+ otype = &phase2_ca_type;
+ else
+ otype = &ca_type;
+
+ if (!write_object (s_8021x, conn_name, NULL, otype, error))
+ return FALSE;
+
+ /* Private key */
+ if (phase2) {
+ if (nm_setting_802_1x_get_phase2_private_key_scheme (s_8021x) !=
+ NM_SETTING_802_1X_CK_SCHEME_UNKNOWN) {
+ if (nm_setting_802_1x_get_phase2_private_key_format
+ (s_8021x) == NM_SETTING_802_1X_CK_FORMAT_PKCS12)
+ is_pkcs12 = TRUE;
+ }
+ password = (char *)
+ nm_setting_802_1x_get_phase2_private_key_password (s_8021x);
+ } else {
+ if (nm_setting_802_1x_get_private_key_scheme (s_8021x) !=
+ NM_SETTING_802_1X_CK_SCHEME_UNKNOWN) {
+ if (nm_setting_802_1x_get_private_key_format (s_8021x)
+ == NM_SETTING_802_1X_CK_FORMAT_PKCS12)
+ is_pkcs12 = TRUE;
+ }
+ password = (char *)
+ nm_setting_802_1x_get_private_key_password (s_8021x);
+ }
+
+ if (is_pkcs12)
+ otype = phase2 ? &phase2_p12_type : &p12_type;
+ else
+ otype = phase2 ? &phase2_pk_type : &pk_type;
+
+ if ((*(otype->scheme_func)) (s_8021x) ==
+ NM_SETTING_802_1X_CK_SCHEME_BLOB)
+ blob = (*(otype->blob_func)) (s_8021x);
+
+ /* Only do the private key re-encrypt dance if we got the raw key data, which
+ * by definition will be unencrypted. If we're given a direct path to the
+ * private key file, it'll be encrypted, so we don't need to re-encrypt.
+ */
+ if (blob && !is_pkcs12) {
+ /* Encrypt the unencrypted private key with the fake password */
+ enc_key =
+ nm_utils_rsa_key_encrypt (blob, password, &generated_pw,
+ error);
+ if (!enc_key)
+ goto out;
+
+ if (generated_pw)
+ password = generated_pw;
+ }
+
+ /* Save the private key */
+ if (!write_object
+ (s_8021x, conn_name, enc_key ? enc_key : blob, otype, error))
+ goto out;
+
+ if (phase2)
+ wpa_set_data (conn_name, "private_key_passwd2", password);
+ else
+ wpa_set_data (conn_name, "private_key_passwd", password);
+
+ /* Client certificate */
+ if (is_pkcs12) {
+ wpa_set_data (conn_name,
+ phase2 ? "client_cert2" : "client_cert", NULL);
+ } else {
+ if (phase2)
+ otype = &phase2_client_type;
+ else
+ otype = &client_type;
+
+ /* Save the client certificate */
+ if (!write_object (s_8021x, conn_name, NULL, otype, error))
+ goto out;
+ }
+
+ success = TRUE;
+ out:
+ if (generated_pw) {
+ memset (generated_pw, 0, strlen (generated_pw));
+ g_free (generated_pw);
+ }
+ if (enc_key) {
+ memset (enc_key->data, 0, enc_key->len);
+ g_byte_array_free (enc_key, TRUE);
+ }
+ return success;
+}
+
+static gboolean
+write_8021x_setting (NMConnection * connection,
+ gchar * conn_name, gboolean wired, GError ** error)
+{
+ NMSetting8021x *s_8021x;
+ const char *value;
+ char *tmp = NULL;
+ gboolean success = FALSE;
+ GString *phase2_auth;
+ GString *phase1;
+
+ s_8021x =
+ (NMSetting8021x *) nm_connection_get_setting (connection,
+ NM_TYPE_SETTING_802_1X);
+
+ if (!s_8021x) {
+ return TRUE;
+ }
+
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Adding 8021x setting for %s",
+ conn_name);
+
+ /* If wired, write KEY_MGMT */
+ if (wired)
+ wpa_set_data (conn_name, "key_mgmt", "IEEE8021X");
+
+ /* EAP method */
+ if (nm_setting_802_1x_get_num_eap_methods (s_8021x)) {
+ value = nm_setting_802_1x_get_eap_method (s_8021x, 0);
+ if (value)
+ tmp = g_ascii_strup (value, -1);
+ }
+ wpa_set_data (conn_name, "eap", tmp ? tmp : NULL);
+ g_free (tmp);
+
+ wpa_set_data (conn_name, "identity",
+ (gchar *) nm_setting_802_1x_get_identity (s_8021x));
+
+ wpa_set_data (conn_name, "anonymous_identity", (gchar *)
+ nm_setting_802_1x_get_anonymous_identity (s_8021x));
+
+ wpa_set_data (conn_name, "password",
+ (gchar *) nm_setting_802_1x_get_password (s_8021x));
+
+ phase1 = g_string_new (NULL);
+
+ /* PEAP version */
+ wpa_set_data (conn_name, "phase1", NULL);
+ value = nm_setting_802_1x_get_phase1_peapver (s_8021x);
+ if (value && (!strcmp (value, "0") || !strcmp (value, "1")))
+ g_string_append_printf (phase1, "peapver=%s ", value);
+
+ /* PEAP label */
+ value = nm_setting_802_1x_get_phase1_peaplabel (s_8021x);
+ if (value && !strcmp (value, "1"))
+ g_string_append_printf (phase1, "peaplabel=%s ", value);
+ if (phase1->len) {
+ tmp = g_strstrip (g_strdup (phase1->str));
+ wpa_set_data (conn_name, "phase1", tmp);
+ g_free (tmp);
+ }
+
+ /* Phase2 auth methods */
+ wpa_set_data (conn_name, "phase2", NULL);
+ phase2_auth = g_string_new (NULL);
+
+ value = nm_setting_802_1x_get_phase2_auth (s_8021x);
+ if (value) {
+ tmp = g_ascii_strup (value, -1);
+ g_string_append_printf (phase2_auth, "auth=%s ", tmp);
+ g_free (tmp);
+ }
+
+ /* Phase2 auth heap */
+ value = nm_setting_802_1x_get_phase2_autheap (s_8021x);
+ if (value) {
+ tmp = g_ascii_strup (value, -1);
+ g_string_append_printf (phase2_auth, "autheap=%s ", tmp);
+ g_free (tmp);
+ }
+ tmp = g_strstrip (g_strdup (phase2_auth->str));
+ wpa_set_data (conn_name, "phase2", phase2_auth->len ? tmp : NULL);
+ g_free (tmp);
+
+ g_string_free (phase2_auth, TRUE);
+ g_string_free (phase1, TRUE);
+
+ success = write_8021x_certs (s_8021x, FALSE, conn_name, error);
+ if (success) {
+ /* phase2/inner certs */
+ success = write_8021x_certs (s_8021x, TRUE, conn_name, error);
+ }
+
+ return success;
+}
+
+static gboolean
+write_wireless_security_setting (NMConnection * connection,
+ gchar * conn_name,
+ gboolean adhoc,
+ gboolean * no_8021x, GError ** error)
+{
+ NMSettingWirelessSecurity *s_wsec;
+ const char *key_mgmt, *auth_alg, *key, *cipher, *psk;
+ gboolean wep = FALSE, wpa = FALSE;
+ char *tmp;
+ guint32 i, num;
+ GString *str;
+
+ s_wsec =
+ (NMSettingWirelessSecurity *) nm_connection_get_setting (connection,
+ NM_TYPE_SETTING_WIRELESS_SECURITY);
+ if (!s_wsec) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Missing '%s' setting",
+ NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
+ return FALSE;
+ }
+
+ key_mgmt = nm_setting_wireless_security_get_key_mgmt (s_wsec);
+ g_assert (key_mgmt);
+
+ auth_alg = nm_setting_wireless_security_get_auth_alg (s_wsec);
+
+ if (!strcmp (key_mgmt, "none")) {
+ wpa_set_data (conn_name, "key_mgmt", "NONE");
+ wep = TRUE;
+ *no_8021x = TRUE;
+ } else if (!strcmp (key_mgmt, "wpa-none")
+ || !strcmp (key_mgmt, "wpa-psk")) {
+ wpa_set_data (conn_name, "key_mgmt", "WPA-PSK");
+ wpa = TRUE;
+ *no_8021x = TRUE;
+ } else if (!strcmp (key_mgmt, "ieee8021x")) {
+ wpa_set_data (conn_name, "key_mgmt", "IEEE8021X");
+ } else if (!strcmp (key_mgmt, "wpa-eap")) {
+ wpa_set_data (conn_name, "key_mgmt", "WPA-EAP");
+ wpa = TRUE;
+ }
+
+ if (auth_alg) {
+ if (!strcmp (auth_alg, "shared"))
+ wpa_set_data (conn_name, "auth_alg", "SHARED");
+ else if (!strcmp (auth_alg, "open"))
+ wpa_set_data (conn_name, "auth_alg", "OPEN");
+ else if (!strcmp (auth_alg, "leap")) {
+ wpa_set_data (conn_name, "auth_alg", "LEAP");
+ wpa_set_data (conn_name, "eap", "LEAP");
+ wpa_set_data (conn_name, "identity", (gchar *)
+ nm_setting_wireless_security_get_leap_username
+ (s_wsec));
+ wpa_set_data (conn_name, "password", (gchar *)
+ nm_setting_wireless_security_get_leap_password
+ (s_wsec));
+ *no_8021x = TRUE;
+ }
+ } else
+ wpa_set_data (conn_name, "auth_alg", NULL);
+
+ /* Default WEP TX key index */
+ wpa_set_data (conn_name, "wep_tx_keyidx", NULL);
+ if (wep) {
+ tmp =
+ g_strdup_printf ("%d",
+ nm_setting_wireless_security_get_wep_tx_keyidx
+ (s_wsec));
+ wpa_set_data (conn_name, "wep_tx_keyidx", tmp);
+ g_free (tmp);
+ }
+
+ /* WEP keys */
+ for (i = 0; i < 4; i++) {
+ int length;
+
+ key = nm_setting_wireless_security_get_wep_key (s_wsec, i);
+ if (!key)
+ continue;
+ tmp = g_strdup_printf ("wep_key%d", i);
+ length = strlen (key);
+ if (length == 10 || length == 26 || length == 58)
+ wpa_set_data (conn_name, tmp, (gchar *) key);
+ else {
+ gchar *tmp_key = g_strdup_printf ("\"%s\"", key);
+
+ wpa_set_data (conn_name, tmp, tmp_key);
+ g_free (tmp_key);
+ }
+ g_free (tmp);
+ }
+
+ /* WPA Pairwise ciphers */
+ wpa_set_data (conn_name, "pairwise", NULL);
+ str = g_string_new (NULL);
+ num = nm_setting_wireless_security_get_num_pairwise (s_wsec);
+ for (i = 0; i < num; i++) {
+ if (i > 0)
+ g_string_append_c (str, ' ');
+ cipher = nm_setting_wireless_security_get_pairwise (s_wsec, i);
+ tmp = g_ascii_strup (cipher, -1);
+ g_string_append (str, tmp);
+ g_free (tmp);
+ }
+ if (strlen (str->str))
+ wpa_set_data (conn_name, "pairwise", str->str);
+ g_string_free (str, TRUE);
+
+ /* WPA Group ciphers */
+ wpa_set_data (conn_name, "group", NULL);
+ str = g_string_new (NULL);
+ num = nm_setting_wireless_security_get_num_groups (s_wsec);
+ for (i = 0; i < num; i++) {
+ if (i > 0)
+ g_string_append_c (str, ' ');
+ cipher = nm_setting_wireless_security_get_group (s_wsec, i);
+ tmp = g_ascii_strup (cipher, -1);
+ g_string_append (str, tmp);
+ g_free (tmp);
+ }
+ if (strlen (str->str))
+ wpa_set_data (conn_name, "group", str->str);
+ g_string_free (str, TRUE);
+
+ /* WPA Passphrase */
+ if (wpa) {
+ GString *quoted = NULL;
+
+ psk = nm_setting_wireless_security_get_psk (s_wsec);
+ if (psk && (strlen (psk) != 64)) {
+ quoted = g_string_sized_new (strlen (psk) + 2);
+ g_string_append_c (quoted, '"');
+ g_string_append (quoted, psk);
+ g_string_append_c (quoted, '"');
+ }
+ wpa_set_data (conn_name, "psk",
+ quoted ? quoted->str : (gchar *) psk);
+ if (quoted)
+ g_string_free (quoted, TRUE);
+ } else
+ wpa_set_data (conn_name, "psk", NULL);
+
+ return TRUE;
+}
+
+/* remove old ssid and add new one*/
+static void
+update_wireless_ssid (NMConnection * connection, gchar * conn_name,
+ gchar * ssid, gboolean hex)
+{
+ ifnet_delete_network (conn_name);
+ ifnet_add_connection (ssid, "wireless");
+
+ wpa_delete_security (conn_name);
+ wpa_add_security (ssid);
+}
+
+static gboolean
+write_wireless_setting (NMConnection * connection,
+ gchar ** conn_name_ptr, gboolean * no_8021x,
+ GError ** error)
+{
+ NMSettingWireless *s_wireless;
+ const GByteArray *ssid, *mac, *bssid;
+ const char *mode;
+ char buf[33];
+ guint32 mtu, i;
+ gboolean adhoc = FALSE, hex_ssid = FALSE;
+ gchar *ssid_str, *tmp;
+ gchar *conn_name = *conn_name_ptr;
+
+ s_wireless =
+ (NMSettingWireless *) nm_connection_get_setting (connection,
+ NM_TYPE_SETTING_WIRELESS);
+ if (!s_wireless) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Missing '%s' setting",
+ NM_SETTING_WIRELESS_SETTING_NAME);
+ return FALSE;
+ }
+
+ ssid = nm_setting_wireless_get_ssid (s_wireless);
+ if (!ssid) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Missing SSID in '%s' setting",
+ NM_SETTING_WIRELESS_SETTING_NAME);
+ return FALSE;
+ }
+ if (!ssid->len || ssid->len > 32) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Invalid SSID in '%s' setting",
+ NM_SETTING_WIRELESS_SETTING_NAME);
+ return FALSE;
+ }
+
+ /* If the SSID contains any non-printable characters, we need to use the
+ * hex notation of the SSID instead.
+ */
+ for (i = 0; i < ssid->len; i++) {
+ if (!isprint (ssid->data[i])) {
+ hex_ssid = TRUE;
+ break;
+ }
+ }
+
+ if (hex_ssid) {
+ GString *str;
+
+ /* Hex SSIDs don't get quoted */
+ str = g_string_sized_new (ssid->len * 2 + 3);
+ g_string_append (str, "0x");
+ for (i = 0; i < ssid->len; i++)
+ g_string_append_printf (str, "%02X", ssid->data[i]);
+ update_wireless_ssid (connection, conn_name, str->str,
+ hex_ssid);
+ ssid_str = g_strdup (str->str);
+ g_string_free (str, TRUE);
+ } else {
+ /* Printable SSIDs get quoted */
+ memset (buf, 0, sizeof (buf));
+ memcpy (buf, ssid->data, ssid->len);
+ g_strstrip (buf);
+ update_wireless_ssid (connection, conn_name, buf, hex_ssid);
+ ssid_str = g_strdup (buf);
+ }
+
+ ifnet_set_data (ssid_str, "mac", NULL);
+ mac = nm_setting_wireless_get_mac_address (s_wireless);
+ if (mac) {
+ tmp = 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]);
+ ifnet_set_data (ssid_str, "mac", tmp);
+ g_free (tmp);
+ }
+
+ ifnet_set_data (ssid_str, "mtu", NULL);
+ mtu = nm_setting_wireless_get_mtu (s_wireless);
+ if (mtu) {
+ tmp = g_strdup_printf ("%u", mtu);
+ ifnet_set_data (ssid_str, "mtu", tmp);
+ g_free (tmp);
+ }
+
+ ifnet_set_data (ssid_str, "mode", NULL);
+ mode = nm_setting_wireless_get_mode (s_wireless);
+ if (!mode || !strcmp (mode, "infrastructure")) {
+ wpa_set_data (ssid_str, "mode", "0");
+ } else if (!strcmp (mode, "adhoc")) {
+ wpa_set_data (ssid_str, "mode", "1");
+ adhoc = TRUE;
+ } else {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ "Invalid mode '%s' in '%s' setting",
+ mode, NM_SETTING_WIRELESS_SETTING_NAME);
+ return FALSE;
+ }
+
+ wpa_set_data (ssid_str, "bssid", NULL);
+ bssid = nm_setting_wireless_get_bssid (s_wireless);
+ if (bssid) {
+ tmp = g_strdup_printf ("%02X:%02X:%02X:%02X:%02X:%02X",
+ bssid->data[0], bssid->data[1],
+ bssid->data[2], bssid->data[3],
+ bssid->data[4], bssid->data[5]);
+ wpa_set_data (ssid_str, "bssid", tmp);
+ g_free (tmp);
+ }
+
+ if (nm_setting_wireless_get_security (s_wireless)) {
+ if (!write_wireless_security_setting
+ (connection, ssid_str, adhoc, no_8021x, error))
+ return FALSE;
+ } else
+ wpa_delete_security (ssid_str);
+ *conn_name_ptr = ifnet_get_data (ssid_str, "name");
+ g_free (ssid_str);
+ return TRUE;
+}
+
+static gboolean
+write_wired_setting (NMConnection * connection, gchar * conn_name,
+ GError ** error)
+{
+ NMSettingWired *s_wired;
+ const GByteArray *mac;
+ char *tmp;
+ guint32 mtu;
+
+ s_wired =
+ (NMSettingWired *) nm_connection_get_setting (connection,
+ NM_TYPE_SETTING_WIRED);
+ if (!s_wired) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Missing '%s' setting",
+ NM_SETTING_WIRED_SETTING_NAME);
+ return FALSE;
+ }
+
+ ifnet_set_data (conn_name, "mac", NULL);
+ mac = nm_setting_wired_get_mac_address (s_wired);
+ if (mac) {
+ tmp = 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]);
+ ifnet_set_data (conn_name, "mac", tmp);
+ g_free (tmp);
+ }
+
+ ifnet_set_data (conn_name, "mtu", NULL);
+ mtu = nm_setting_wired_get_mtu (s_wired);
+ if (mtu) {
+ tmp = g_strdup_printf ("%u", mtu);
+ ifnet_set_data (conn_name, "mtu", tmp);
+ g_free (tmp);
+ }
+ //FIXME may add connection type in future
+ //ifnet_set_data (conn_name, "TYPE", TYPE_ETHERNET);
+
+ return TRUE;
+}
+
+static void
+write_connection_setting (NMSettingConnection * s_con, gchar * conn_name)
+{
+ ifnet_set_data (conn_name, "auto",
+ nm_setting_connection_get_autoconnect (s_con) ? "true" :
+ "false");
+}
+
+static gboolean
+write_ip4_setting (NMConnection * connection, gchar * conn_name,
+ GError ** error)
+{
+ NMSettingIP4Config *s_ip4;
+ const char *value;
+ char *tmp;
+ guint32 i, num;
+ GString *searches;
+ GString *ips;
+ GString *routes;
+ GString *dns;
+ gboolean has_def_route = FALSE;
+ gboolean success = FALSE;
+
+ s_ip4 =
+ (NMSettingIP4Config *) nm_connection_get_setting (connection,
+ NM_TYPE_SETTING_IP4_CONFIG);
+ if (!s_ip4) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Missing '%s' setting",
+ NM_SETTING_IP4_CONFIG_SETTING_NAME);
+ return FALSE;
+ }
+ routes = g_string_new (NULL);
+
+ value = nm_setting_ip4_config_get_method (s_ip4);
+ g_assert (value);
+ if (!strcmp (value, NM_SETTING_IP4_CONFIG_METHOD_MANUAL)) {
+
+ num = nm_setting_ip4_config_get_num_addresses (s_ip4);
+ ips = g_string_new (NULL);
+ /* IPv4 addresses */
+ for (i = 0; i < num; i++) {
+ char buf[INET_ADDRSTRLEN + 1];
+ NMIP4Address *addr;
+ guint32 ip;
+
+ addr = nm_setting_ip4_config_get_address (s_ip4, i);
+
+ memset (buf, 0, sizeof (buf));
+ ip = nm_ip4_address_get_address (addr);
+ inet_ntop (AF_INET, (const void *) &ip, &buf[0],
+ sizeof (buf));
+ g_string_append_printf (ips, "\"%s", &buf[0]);
+
+ tmp =
+ g_strdup_printf ("%u",
+ nm_ip4_address_get_prefix (addr));
+ g_string_append_printf (ips, "/%s\" ", tmp);
+ g_free (tmp);
+
+ /* only the first gateway will be written */
+ if (!has_def_route && nm_ip4_address_get_gateway (addr)) {
+ memset (buf, 0, sizeof (buf));
+ ip = nm_ip4_address_get_gateway (addr);
+ inet_ntop (AF_INET, (const void *) &ip, &buf[0],
+ sizeof (buf));
+ g_string_append_printf (routes,
+ "\"default via %s\" ",
+ &buf[0]);
+ has_def_route = TRUE;
+ }
+ }
+ ifnet_set_data (conn_name, "config", ips->str);
+ g_string_free (ips, TRUE);
+ } else
+ ifnet_set_data (conn_name, "config", "dhcp");
+
+ /* DNS Servers */
+ ifnet_set_data (conn_name, "dns_servers", NULL);
+ num = nm_setting_ip4_config_get_num_dns (s_ip4);
+ if (num > 0) {
+ dns = g_string_new (NULL);
+ for (i = 0; i < num; i++) {
+ char buf[INET_ADDRSTRLEN + 1];
+ guint32 ip;
+
+ ip = nm_setting_ip4_config_get_dns (s_ip4, i);
+
+ memset (buf, 0, sizeof (buf));
+ inet_ntop (AF_INET, (const void *) &ip, &buf[0],
+ sizeof (buf));
+ g_string_append_printf (dns, " %s", buf);
+ }
+ ifnet_set_data (conn_name, "dns_servers", dns->str);
+ g_string_free (dns, TRUE);
+ } else
+ ifnet_set_data (conn_name, "dns_servers", NULL);
+
+ /* DNS Searches */
+ num = nm_setting_ip4_config_get_num_dns_searches (s_ip4);
+ if (num > 0) {
+ searches = g_string_new (NULL);
+ for (i = 0; i < num; i++) {
+ if (i > 0)
+ g_string_append_c (searches, ' ');
+ g_string_append (searches,
+ nm_setting_ip4_config_get_dns_search
+ (s_ip4, i));
+ }
+ ifnet_set_data (conn_name, "dns_search", searches->str);
+ g_string_free (searches, TRUE);
+ } else
+ ifnet_set_data (conn_name, "dns_search", NULL);
+ /* FIXME Will be implemented when configuration supports it
+ if (!strcmp(value, NM_SETTING_IP4_CONFIG_METHOD_AUTO)) {
+ value = nm_setting_ip4_config_get_dhcp_hostname(s_ip4);
+ if (value)
+ ifnet_set_data(conn_name, "DHCP_HOSTNAME", value,
+ FALSE);
+
+ value = nm_setting_ip4_config_get_dhcp_client_id(s_ip4);
+ if (value)
+ ifnet_set_data(conn_name, "DHCP_CLIENT_ID", value,
+ FALSE);
+ }
+ */
+
+ /* Static routes */
+ num = nm_setting_ip4_config_get_num_routes (s_ip4);
+ if (num > 0) {
+ for (i = 0; i < num; i++) {
+ char buf[INET_ADDRSTRLEN + 1];
+ NMIP4Route *route;
+ guint32 ip;
+
+ route = nm_setting_ip4_config_get_route (s_ip4, i);
+
+ memset (buf, 0, sizeof (buf));
+ ip = nm_ip4_route_get_dest (route);
+ inet_ntop (AF_INET, (const void *) &ip, &buf[0],
+ sizeof (buf));
+ g_string_append_printf (routes, "\"%s", buf);
+
+ tmp =
+ g_strdup_printf ("%u",
+ nm_ip4_route_get_prefix (route));
+ g_string_append_printf (routes, "/%s via ", tmp);
+ g_free (tmp);
+
+ memset (buf, 0, sizeof (buf));
+ ip = nm_ip4_route_get_next_hop (route);
+ inet_ntop (AF_INET, (const void *) &ip, &buf[0],
+ sizeof (buf));
+ g_string_append_printf (routes, "%s\" ", buf);
+ }
+ }
+ if (routes->len > 0)
+ ifnet_set_data (conn_name, "routes", routes->str);
+ else
+ ifnet_set_data (conn_name, "routes", NULL);
+ g_string_free (routes, TRUE);
+
+ success = TRUE;
+
+ return success;
+}
+
+static gboolean
+write_route6_file (NMSettingIP6Config * s_ip6, gchar * conn_name,
+ GError ** error)
+{
+ char dest[INET6_ADDRSTRLEN + 1];
+ char next_hop[INET6_ADDRSTRLEN + 1];
+ NMIP6Route *route;
+ const struct in6_addr *ip;
+ guint32 prefix;
+ guint32 i, num;
+ GString *routes_string;
+ gchar *old_routes;
+
+ g_return_val_if_fail (s_ip6 != NULL, FALSE);
+ num = nm_setting_ip6_config_get_num_routes (s_ip6);
+ if (num == 0) {
+ return TRUE;
+ }
+
+ old_routes = ifnet_get_data (conn_name, "routes");
+ routes_string = g_string_new (old_routes);
+ if (old_routes)
+ g_string_append (routes_string, "\" ");
+ for (i = 0; i < num; i++) {
+ route = nm_setting_ip6_config_get_route (s_ip6, i);
+
+ memset (dest, 0, sizeof (dest));
+ ip = nm_ip6_route_get_dest (route);
+ inet_ntop (AF_INET6, (const void *) ip, &dest[0],
+ sizeof (dest));
+
+ prefix = nm_ip6_route_get_prefix (route);
+
+ memset (next_hop, 0, sizeof (next_hop));
+ ip = nm_ip6_route_get_next_hop (route);
+ inet_ntop (AF_INET6, (const void *) ip, &next_hop[0],
+ sizeof (next_hop));
+
+ g_string_append_printf (routes_string, "\"%s/%u via %s\" ",
+ dest, prefix, next_hop);
+ }
+ if (num > 0)
+ ifnet_set_data (conn_name, "routes", routes_string->str);
+ g_string_free (routes_string, TRUE);
+
+ return TRUE;
+}
+
+static gboolean
+write_ip6_setting (NMConnection * connection, gchar * conn_name,
+ GError ** error)
+{
+ NMSettingIP6Config *s_ip6;
+ const char *value;
+ char *prefix;
+ guint32 i, num;
+ GString *searches;
+ char buf[INET6_ADDRSTRLEN + 1];
+ NMIP6Address *addr;
+ const struct in6_addr *ip;
+
+ s_ip6 =
+ (NMSettingIP6Config *) nm_connection_get_setting (connection,
+ NM_TYPE_SETTING_IP6_CONFIG);
+ if (!s_ip6) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Missing '%s' setting",
+ NM_SETTING_IP6_CONFIG_SETTING_NAME);
+ return FALSE;
+ }
+
+ value = nm_setting_ip6_config_get_method (s_ip6);
+ g_assert (value);
+ if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_IGNORE)) {
+ ifnet_set_data (conn_name, "enable_ipv6", "false");
+ return TRUE;
+ } else if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_MANUAL)) {
+ /* nothing to do now */
+ } else {
+ // if (!strcmp(value, NM_SETTING_IP6_CONFIG_METHOD_AUTO)) {
+ gchar *config = ifnet_get_data (conn_name, "config");
+ gchar *tmp;
+
+ if (!config)
+ tmp = g_strdup_printf ("dhcp6");
+ else
+ tmp = g_strdup_printf ("%s\" \"dhcp6\"", config);
+ ifnet_set_data (conn_name, "config", tmp);
+ g_free (tmp);
+ }
+ /* else if (!strcmp(value, NM_SETTING_IP6_CONFIG_METHOD_MANUAL)) {
+ } else if (!strcmp(value, NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL)) {
+ } else if (!strcmp(value, NM_SETTING_IP6_CONFIG_METHOD_SHARED)) {
+ } */
+
+ /* Remember to set IPv6 enabled */
+ ifnet_set_data (conn_name, "enable_ipv6", "true");
+
+ if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_MANUAL)) {
+ gchar *config = ifnet_get_data (conn_name, "config");
+ gchar *tmp;
+ GString *ip_str;
+
+ if (!config)
+ config = "";
+ num = nm_setting_ip6_config_get_num_addresses (s_ip6);
+
+ /* IPv6 addresses */
+ ip_str = g_string_new (NULL);
+ for (i = 0; i < num; i++) {
+ addr = nm_setting_ip6_config_get_address (s_ip6, i);
+ ip = nm_ip6_address_get_address (addr);
+ prefix =
+ g_strdup_printf ("%u",
+ nm_ip6_address_get_prefix (addr));
+ memset (buf, 0, sizeof (buf));
+ inet_ntop (AF_INET6, (const void *) ip, buf,
+ sizeof (buf));
+ g_string_append_printf (ip_str, "\"%s/", buf);
+ g_string_append_printf (ip_str, "%s\" ", prefix);
+ g_free (prefix);
+ }
+ tmp = g_strdup_printf ("%s\" %s", config, ip_str->str);
+ ifnet_set_data (conn_name, "config", tmp);
+ g_free (tmp);
+ g_string_free (ip_str, TRUE);
+ }
+
+ /* DNS Servers */
+ num = nm_setting_ip6_config_get_num_dns (s_ip6);
+ if (num > 0) {
+ gchar *dns_servers = ifnet_get_data (conn_name, "dns_servers");
+ gchar *tmp;
+ GString *dns_string = g_string_new (NULL);
+
+ if (!dns_servers)
+ dns_servers = "";
+ for (i = 0; i < num; i++) {
+ ip = nm_setting_ip6_config_get_dns (s_ip6, i);
+
+ memset (buf, 0, sizeof (buf));
+ inet_ntop (AF_INET6, (const void *) ip, buf,
+ sizeof (buf));
+ if (!strstr (dns_servers, buf))
+ g_string_append_printf (dns_string, "%s ", buf);
+ }
+ tmp = g_strdup_printf ("%s %s", dns_servers, dns_string->str);
+ ifnet_set_data (conn_name, "dns_servers", tmp);
+ g_free (tmp);
+ g_string_free (dns_string, TRUE);
+
+ } else
+ /* DNS Searches */
+ num = nm_setting_ip6_config_get_num_dns_searches (s_ip6);
+ if (num > 0) {
+ char *ip4_domains;
+
+ ip4_domains = ifnet_get_data (conn_name, "dns_search");
+ if (!ip4_domains)
+ ip4_domains = "";
+ searches = g_string_new (ip4_domains);
+ for (i = 0; i < num; i++) {
+ const gchar *search = NULL;
+
+ search =
+ nm_setting_ip6_config_get_dns_search (s_ip6, i);
+ if (search && !strstr (searches->str, search)) {
+ if (searches->len > 0)
+ g_string_append_c (searches, ' ');
+ g_string_append (searches, search);
+ }
+ }
+ ifnet_set_data (conn_name, "dns_search", searches->str);
+ g_string_free (searches, TRUE);
+ }
+
+ write_route6_file (s_ip6, conn_name, error);
+ if (error && *error)
+ return FALSE;
+ return TRUE;
+}
+
+static gboolean
+write_pppoe_setting (gchar * conn_name, NMSettingPPPOE * s_pppoe)
+{
+ const gchar *value;
+
+ value = nm_setting_pppoe_get_username (s_pppoe);
+ if (!value) {
+ return FALSE;
+ }
+ ifnet_set_data (conn_name, "username", (gchar *) value);
+
+ value = nm_setting_pppoe_get_password (s_pppoe);
+ /* password could be NULL here */
+ if (value) {
+ ifnet_set_data (conn_name, "password", (gchar *) value);
+ }
+ return TRUE;
+}
+
+gboolean
+ifnet_update_parsers_by_connection (NMConnection * connection,
+ gchar * conn_name,
+ gchar ** nm_conn_name,
+ gchar * config_file,
+ gchar * wpa_file, GError ** error)
+{
+ NMSettingConnection *s_con;
+ NMSettingIP6Config *s_ip6;
+ gboolean success = FALSE;
+ const char *type;
+ gboolean no_8021x = FALSE;
+ gboolean wired = FALSE, pppoe = TRUE;
+
+ s_con =
+ NM_SETTING_CONNECTION (nm_connection_get_setting
+ (connection, NM_TYPE_SETTING_CONNECTION));
+ if (!s_con) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Missing '%s' setting",
+ NM_SETTING_CONNECTION_SETTING_NAME);
+ return FALSE;
+ }
+
+ type = nm_setting_connection_get_connection_type (s_con);
+ if (!type) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Missing connection type!");
+ goto out;
+ }
+
+ if (!strcmp (type, NM_SETTING_WIRED_SETTING_NAME)) {
+ /* Writing wired setting */
+ if (!write_wired_setting (connection, conn_name, error))
+ goto out;
+ wired = TRUE;
+ no_8021x = TRUE;
+ } else if (!strcmp (type, NM_SETTING_WIRELESS_SETTING_NAME)) {
+ /* Writing wireless setting */
+ if (!write_wireless_setting
+ (connection, &conn_name, &no_8021x, error))
+ goto out;
+ } else if (!strcmp (type, NM_SETTING_PPPOE_SETTING_NAME)) {
+ /* Writing pppoe setting */
+ if (!
+ (write_pppoe_setting
+ (conn_name,
+ NM_SETTING_PPPOE (nm_connection_get_setting
+ (connection, NM_TYPE_SETTING_PPPOE)))))
+ goto out;
+ pppoe = TRUE;
+ wired = TRUE;
+ no_8021x = TRUE;
+ } else {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Can't write connection type '%s'", type);
+ goto out;
+ }
+
+ //FIXME wired connection doesn't support 8021x now
+ if (!no_8021x) {
+ if (!write_8021x_setting (connection, conn_name, wired, error))
+ goto out;
+ }
+
+ /* IPv4 Setting */
+ if (!write_ip4_setting (connection, conn_name, error))
+ goto out;
+
+ s_ip6 =
+ (NMSettingIP6Config *) nm_connection_get_setting (connection,
+ NM_TYPE_SETTING_IP6_CONFIG);
+ if (s_ip6) {
+ /* IPv6 Setting */
+ if (!write_ip6_setting (connection, conn_name, error))
+ goto out;
+ }
+
+ /* Connection Setting */
+ write_connection_setting (s_con, conn_name);
+
+ /* connection id will be displayed in nm-applet */
+ update_connection_id (connection, conn_name);
+
+ if (nm_conn_name)
+ *nm_conn_name = g_strdup (conn_name);
+ success = ifnet_flush_to_file (config_file);
+ if (success)
+ wpa_flush_to_file (wpa_file);
+
+ out:
+ return success;
+}
+
+gboolean
+ifnet_delete_connection_in_parsers (gchar * conn_name,
+ gchar * config_file, gchar * wpa_file)
+{
+ gboolean result = FALSE;
+
+ ifnet_delete_network (conn_name);
+ result = ifnet_flush_to_file (config_file);
+ if (result) {
+ /* connection may not have security information
+ * so simply ignore the return value*/
+ wpa_delete_security (conn_name);
+ wpa_flush_to_file (wpa_file);
+ }
+
+ return result;
+}
+
+/* get the available wired name(eth*). */
+static gchar *
+get_wired_name ()
+{
+ int i = 0;
+
+ for (; i < 256; i++) {
+ gchar *conn_name = g_strdup_printf ("eth%d", i);
+
+ if (!ifnet_has_connection (conn_name)) {
+ return conn_name;
+ } else
+ g_free (conn_name);
+ }
+ return NULL;
+}
+
+/* get the available pppoe name(ppp*). */
+static gchar *
+get_ppp_name ()
+{
+ int i = 0;
+
+ for (; i < 256; i++) {
+ gchar *conn_name = g_strdup_printf ("ppp%d", i);
+
+ if (!ifnet_has_connection (conn_name)) {
+ return conn_name;
+ } else
+ g_free (conn_name);
+ }
+ return NULL;
+}
+
+/* get wireless ssid */
+static gchar *
+get_wireless_name (NMConnection * connection)
+{
+ NMSettingWireless *s_wireless;
+ const GByteArray *ssid;
+ gboolean hex_ssid = FALSE;
+ gchar *result = NULL;
+ char buf[33];
+ int i = 0;
+
+ s_wireless =
+ (NMSettingWireless *) nm_connection_get_setting (connection,
+ NM_TYPE_SETTING_WIRELESS);
+ if (!s_wireless)
+ return NULL;
+
+ ssid = nm_setting_wireless_get_ssid (s_wireless);
+ if (!ssid->len || ssid->len > 32) {
+ return NULL;
+ }
+
+ for (i = 0; i < ssid->len; i++) {
+ if (!isprint (ssid->data[i])) {
+ hex_ssid = TRUE;
+ break;
+ }
+ }
+
+ if (hex_ssid) {
+ GString *str;
+
+ str = g_string_sized_new (ssid->len * 2 + 3);
+ g_string_append (str, "0x");
+ for (i = 0; i < ssid->len; i++)
+ g_string_append_printf (str, "%02X", ssid->data[i]);
+ result = g_strdup (str->str);
+ g_string_free (str, TRUE);
+ } else {
+ memset (buf, 0, sizeof (buf));
+ memcpy (buf, ssid->data, ssid->len);
+ result = g_strdup_printf ("%s", buf);
+ g_strstrip (result);
+ }
+
+ return result;
+}
+
+gboolean
+ifnet_add_new_connection (NMConnection * connection,
+ gchar * config_file, gchar * wpa_file,
+ GError ** error)
+{
+ NMSettingConnection *s_con;
+ gboolean success = FALSE;
+ const char *type;
+ gchar *new_type, *new_name = NULL;
+
+ s_con =
+ NM_SETTING_CONNECTION (nm_connection_get_setting
+ (connection, NM_TYPE_SETTING_CONNECTION));
+ if (!s_con) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Missing '%s' setting",
+ NM_SETTING_CONNECTION_SETTING_NAME);
+ return FALSE;
+ }
+
+ type = nm_setting_connection_get_connection_type (s_con);
+ if (!type) {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Missing connection type!");
+ goto out;
+ }
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Adding %s connection", type);
+
+ /* get name and type
+ * Wireless type: wireless
+ * Wired type: wired
+ * PPPoE type: ppp*/
+ if (!strcmp (type, NM_SETTING_WIRED_SETTING_NAME)) {
+ new_name = get_wired_name ();
+ if (!new_name)
+ goto out;
+ new_type = "wired";
+ } else if (!strcmp (type, NM_SETTING_WIRELESS_SETTING_NAME)) {
+ new_name = get_wireless_name (connection);
+ new_type = "wireless";
+ } else if (!strcmp (type, NM_SETTING_PPPOE_SETTING_NAME)) {
+ new_name = get_ppp_name ();
+ if (!new_name)
+ goto out;
+ new_type = "ppp";
+ } else {
+ g_set_error (error, ifnet_plugin_error_quark (), 0,
+ "Can't write connection type '%s'", type);
+ goto out;
+ }
+
+ if (ifnet_add_connection (new_name, new_type))
+ success =
+ ifnet_update_parsers_by_connection (connection, new_name,
+ NULL, config_file,
+ wpa_file, error);
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Added new connection: %s, result: %s",
+ new_name, success ? "success" : "fail");
+
+ out:
+ if (new_name)
+ g_free (new_name);
+ return success;
+}
diff --git a/system-settings/plugins/ifnet/connection_parser.h b/system-settings/plugins/ifnet/connection_parser.h
new file mode 100644
index 0000000000..b006954cc8
--- /dev/null
+++ b/system-settings/plugins/ifnet/connection_parser.h
@@ -0,0 +1,43 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * Mu Qiao <qiaomuf@gmail.com>
+ *
+ * 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) 1999-2010 Gentoo Foundation, Inc.
+ */
+
+#ifndef _CONNECTION_PARSER_H
+#define _CONNECTION_PARSER_H
+#include <nm-connection.h>
+#include "net_parser.h"
+
+NMConnection *ifnet_update_connection_from_config_block (gchar * conn_name,
+ GError ** error);
+
+/* nm_conn_name is used to update nm_ifnet_connection's priv data */
+gboolean ifnet_update_parsers_by_connection (NMConnection * connection,
+ gchar * conn_name,
+ gchar ** nm_conn_name,
+ gchar * config_file,
+ gchar * wpa_file, GError ** error);
+
+gboolean ifnet_delete_connection_in_parsers (gchar * conn_name,
+ gchar * config_file,
+ gchar * wpa_file);
+gboolean ifnet_add_new_connection (NMConnection * connection,
+ gchar * config_file, gchar * wpa_file,
+ GError ** error);
+#endif
diff --git a/system-settings/plugins/ifnet/net_parser.c b/system-settings/plugins/ifnet/net_parser.c
new file mode 100644
index 0000000000..b4a381dee8
--- /dev/null
+++ b/system-settings/plugins/ifnet/net_parser.c
@@ -0,0 +1,635 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * Mu Qiao <qiaomuf@gmail.com>
+ *
+ * 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) 1999-2010 Gentoo Foundation, Inc.
+ */
+
+#include <string.h>
+#include <nm-system-config-interface.h>
+#include <stdio.h>
+#include "net_parser.h"
+#include "net_utils.h"
+
+/* Save all the connection information */
+static GHashTable *conn_table;
+
+/* Save global settings which are used for writing*/
+static GHashTable *global_settings_table;
+
+/* Save functions */
+static GList *functions_list;
+
+/* Used to decide whether to write changes to file*/
+static gboolean net_parser_data_changed = FALSE;
+
+static GHashTable *
+add_new_connection_config (const gchar * type, const gchar * name)
+{
+ GHashTable *new_conn;
+ gchar *new_name;
+
+ if (!name)
+ return NULL;
+
+ /* Return existing connection */
+ if ((new_conn = g_hash_table_lookup (conn_table, name)) != NULL)
+ return new_conn;
+ new_conn = g_hash_table_new (g_str_hash, g_str_equal);
+ new_name = g_strdup (name);
+ g_hash_table_insert (new_conn, g_strdup ("name"), new_name);
+ g_hash_table_insert (new_conn, g_strdup ("type"), g_strdup (type));
+ g_hash_table_insert (conn_table, new_name, new_conn);
+ return new_conn;
+}
+
+gboolean
+ifnet_add_connection (gchar * name, gchar * type)
+{
+ if (add_new_connection_config (type, name)) {
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Adding network for %s", name);
+ net_parser_data_changed = TRUE;
+ return TRUE;
+ } else
+ return FALSE;
+}
+
+gboolean
+ifnet_has_connection (gchar * conn_name)
+{
+ return g_hash_table_lookup (conn_table, conn_name) != NULL;
+}
+
+static GHashTable *
+get_connection_config (gchar * name)
+{
+ return g_hash_table_lookup (conn_table, name);
+}
+
+/* Ignored name won't be treated as wireless ssid */
+static gchar *ignore_name[] = {
+ "vlan", "bond", "atm", "ath", "ippp", "vpn", "tap", "tun", "1",
+ "br", "nas", "6to4", "timeout", "kvm", "force", NULL
+};
+
+static gboolean
+ignore_connection_name (gchar * name)
+{
+ gboolean result = FALSE;
+ guint i = 0;
+
+ /* check ignore_name list */
+ while (ignore_name[i] != NULL) {
+ if (g_ascii_strncasecmp
+ (name, ignore_name[i], strlen (ignore_name[i])) == 0) {
+ return TRUE;
+ }
+ i++;
+ }
+ /* Ignore mac address based configuration */
+ if (strlen (name) == 12 && is_hex (name))
+ result = TRUE;
+ return result;
+
+}
+
+static gboolean
+is_global_setting (char *key)
+{
+ static gchar *global_settings[] = { "wpa_supplicant_", NULL };
+ int i;
+
+ for (i = 0; global_settings[i] != NULL; i++) {
+ if (strstr (key, global_settings[i]))
+ return 1;
+ }
+ return 0;
+}
+
+/* Parse a complete line */
+/* Connection type is determined here */
+static void
+init_block_by_line (gchar * buf)
+{
+ gchar **key_value;
+ gchar *pos;
+ gchar *data;
+ gchar *tmp;
+ GHashTable *conn;
+
+ key_value = g_strsplit (buf, "=", 2);
+ if (g_strv_length (key_value) != 2) {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME, "Can't handle this line: %s\n",
+ buf);
+ g_strfreev (key_value);
+ return;
+ }
+ pos = g_strrstr (key_value[0], "_");
+ if (pos == NULL || is_global_setting (key_value[0])) {
+ /* global data */
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "global:%s-%s\n", key_value[0],
+ key_value[1]);
+ g_hash_table_insert (global_settings_table,
+ g_strdup (key_value[0]),
+ g_strdup (key_value[1]));
+ g_strfreev (key_value);
+ return;
+ }
+ *pos++ = '\0';
+ if ((conn = get_connection_config (pos)) == NULL) {
+ if (g_ascii_strncasecmp (pos, "eth", 3) == 0
+ && strlen (pos) == 4)
+ /* wired connection */
+ conn = add_new_connection_config ("wired", pos);
+ else if (g_ascii_strncasecmp (pos, "ppp", 3) == 0
+ && strlen (pos) == 4)
+ /* pppoe connection */
+ conn = add_new_connection_config ("ppp", pos);
+ else if (ignore_connection_name (pos)) {
+ /* ignored connection */
+ conn = add_new_connection_config ("ignore", pos);
+ } else
+ /* wireless connection */
+ conn = add_new_connection_config ("wireless", pos);
+ }
+ data = g_strdup (key_value[1]);
+ tmp = strip_string (data, '(');
+ tmp = strip_string (tmp, ')');
+ strip_string (tmp, '"');
+ strip_string (tmp, '\'');
+ if (conn)
+ g_hash_table_insert (conn, g_strdup (key_value[0]),
+ g_strdup (tmp));
+ g_free (data);
+ g_strfreev (key_value);
+}
+
+static void
+destroy_connection_config (GHashTable * conn)
+{
+ gpointer key, value;
+ GHashTableIter iter;
+
+ g_hash_table_iter_init (&iter, conn);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ g_free (key);
+ g_free (value);
+ }
+
+ g_hash_table_destroy (conn);
+}
+
+// read settings from /etc/NetworkManager/nm-system-settings.conf
+gchar *
+ifnet_get_global_setting (gchar * group, gchar * key)
+{
+ GError *error = NULL;
+ GKeyFile *keyfile = g_key_file_new ();
+ gchar *result = NULL;
+
+ if (!g_key_file_load_from_file (keyfile,
+ IFNET_SYSTEM_SETTINGS_KEY_FILE,
+ G_KEY_FILE_NONE, &error)) {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ "loading system config file (%s) caused error: (%d) %s",
+ IFNET_SYSTEM_SETTINGS_KEY_FILE,
+ error ? error->code : -1, error
+ && error->message ? error->message : "(unknown)");
+ } else {
+ result = g_key_file_get_string (keyfile, group, key, &error);
+ }
+ g_key_file_free (keyfile);
+ return result;
+}
+
+static void
+strip_function (GIOChannel * channel, gchar * line)
+{
+
+ int counter = 0;
+ gchar *p, *tmp;
+ gboolean begin = FALSE;
+ GString *function_str = g_string_new (line);
+
+ g_string_append (function_str, "\n");
+ while (1) {
+ p = line;
+ while (*p != '\0') {
+ if (*p == '{') {
+ counter++;
+ begin = TRUE;
+ } else if (*p == '}')
+ counter--;
+ p++;
+ }
+ if (begin && counter == 0) {
+ g_free (line);
+ goto done;
+ }
+ while (1) {
+ g_free (line);
+ if (g_io_channel_read_line
+ (channel, &line, NULL, NULL,
+ NULL) == G_IO_STATUS_EOF)
+ goto done;
+ g_string_append (function_str, line);
+ tmp = g_strdup (line);
+ g_strstrip (tmp);
+ if (tmp[0] != '#' && tmp[0] != '\0') {
+ g_free (tmp);
+ break;
+ } else
+ g_free (tmp);
+ }
+ }
+ done:
+ functions_list =
+ g_list_append (functions_list, g_strdup (function_str->str));
+ g_string_free (function_str, TRUE);
+}
+
+static gboolean
+is_function (gchar * line)
+{
+ static gchar *func_names[] =
+ { "preup", "predown", "postup", "postdown", "failup", "faildown",
+ NULL,
+ };
+ int i;
+
+ for (i = 0; func_names[i]; i++) {
+ if (g_str_has_prefix (line, func_names[i])) {
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME,
+ "Ignoring function: %s", func_names[i]);
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+gboolean
+ifnet_init (gchar * config_file)
+{
+ GIOChannel *channel = NULL;
+ gchar *line;
+
+ /* Handle multiple lines with brackets */
+ gboolean complete = TRUE;
+
+ /* line buffer */
+ GString *buf;
+
+ net_parser_data_changed = FALSE;
+
+ conn_table = g_hash_table_new (g_str_hash, g_str_equal);
+ global_settings_table = g_hash_table_new (g_str_hash, g_str_equal);
+ functions_list = NULL;
+
+ if (g_file_test (config_file, G_FILE_TEST_IS_REGULAR))
+ channel = g_io_channel_new_file (config_file, "r", NULL);
+ if (channel == NULL) {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ "Error: Can't open %s\n", config_file);
+ return FALSE;
+ }
+
+ buf = g_string_new (NULL);
+ while (g_io_channel_read_line
+ (channel, &line, NULL, NULL, NULL) != G_IO_STATUS_EOF) {
+ g_strstrip (line);
+ /* convert multiple lines to a complete line and
+ * pass it to init_block_by_line() */
+ if (is_function (line)) {
+ strip_function (channel, line);
+ continue;
+ }
+ if (line[0] != '#' && line[0] != '\0') {
+ gchar *pos = NULL;
+
+ if (!complete) {
+ complete =
+ g_strrstr (line,
+ ")") == NULL ? FALSE : TRUE;
+ if ((pos = strchr (line, '#')) != NULL)
+ *pos = '\0';
+ g_strstrip (line);
+ if (line[0] != '\0') {
+ g_string_append_printf (buf,
+ " %s", line);
+ }
+ g_free (line);
+ if (!complete)
+ continue;
+ } else {
+ complete =
+ (g_strrstr (line, "(") != NULL
+ && g_strrstr (line, ")") != NULL)
+ || g_strrstr (line, "(") == NULL;
+ if ((pos = strchr (line, '#')) != NULL)
+ *pos = '\0';
+ g_strstrip (line);
+ if (line[0] != '\0')
+ g_string_append (buf, line);
+ g_free (line);
+ if (!complete)
+ continue;
+ }
+ init_block_by_line (buf->str);
+ g_string_free (buf, TRUE);
+ buf = g_string_new (NULL);
+ } else
+ /* Blank line or comment line */
+ g_free (line);
+ }
+
+ g_string_free (buf, TRUE);
+ g_io_channel_shutdown (channel, FALSE, NULL);
+ g_io_channel_unref (channel);
+ return TRUE;
+}
+
+gchar *
+ifnet_get_data (gchar * conn_name, const gchar * key)
+{
+ GHashTable *conn = g_hash_table_lookup (conn_table, conn_name);
+
+ if (conn)
+ return g_hash_table_lookup (conn, key);
+ return NULL;
+}
+
+void
+ifnet_set_data (gchar * conn_name, gchar * key, gchar * value)
+{
+ gpointer orin_key = NULL, orin_value = NULL;
+ GHashTable *conn = g_hash_table_lookup (conn_table, conn_name);
+
+ if (!conn) {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ "%s does not exsit!", conn_name);
+ return;
+ }
+ /* Remove existing key value pair */
+ if (g_hash_table_lookup_extended (conn, key, &orin_key, &orin_value)) {
+ g_hash_table_remove (conn, orin_key);
+ g_free (orin_key);
+ g_free (orin_value);
+ }
+ if (value)
+ g_hash_table_insert (conn, g_strdup (key),
+ strip_string (g_strdup (value), '"'));
+ net_parser_data_changed = TRUE;
+}
+
+// Remember to free return value
+gchar *
+ifnet_get_global_data (const gchar * key)
+{
+ gchar *result = g_hash_table_lookup (global_settings_table, key);
+
+ if (result)
+ result = g_strdup (result);
+ else
+ return NULL;
+ strip_string (result, '"');
+ return result;
+}
+
+// Return names of legal connections
+GList *
+ifnet_get_connection_names ()
+{
+ GList *names = g_hash_table_get_keys (conn_table);
+ GList *result = NULL;
+
+ while (names) {
+ if (!ignore_connection_name (names->data))
+ result = g_list_append (result, names->data);
+ names = names->next;
+ }
+ return result;
+}
+
+/* format IP and route for writing */
+static void
+format_ips (gchar * value, gchar ** out_line, gchar * key, gchar * name)
+{
+ gchar **ipset;
+ guint length, i;
+ GString *formated_string = g_string_new (NULL);
+
+ strip_string (value, '"');
+ ipset = g_strsplit (value, "\" \"", 0);
+ length = g_strv_length (ipset);
+
+ //only one line
+ if (length < 2) {
+ *out_line =
+ g_strdup_printf ("%s_%s=( \"%s\" )\n", key, name, value);
+ goto done;
+ }
+ // Multiple lines
+ g_string_append_printf (formated_string, "%s_%s=(\n", key, name);
+ for (i = 0; i < length; i++)
+ g_string_append_printf (formated_string,
+ "\t\"%s\"\n", ipset[i]);
+ g_string_append (formated_string, ")\n");
+ *out_line = g_strdup (formated_string->str);
+ done:
+ g_string_free (formated_string, TRUE);
+ g_strfreev (ipset);
+}
+
+gboolean
+ifnet_flush_to_file (gchar * config_file)
+{
+ GIOChannel *channel;
+ GError **error = NULL;
+ gpointer key, value, name, network;
+ GHashTableIter iter, iter_network;
+ GList *list_iter;
+ gchar *out_line;
+ gsize bytes_written;
+ gboolean result = FALSE;
+
+ if (!net_parser_data_changed)
+ return FALSE;
+ if (!conn_table || !global_settings_table)
+ return FALSE;
+
+ channel = g_io_channel_new_file (config_file, "w", NULL);
+ if (!channel) {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ "Can't open file %s for writing", config_file);
+ return FALSE;
+ }
+ g_hash_table_iter_init (&iter, global_settings_table);
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Writing to %s", config_file);
+ g_io_channel_write_chars (channel,
+ "#Generated by NetworkManager\n"
+ "###### Global Configuration ######\n",
+ -1, &bytes_written, error);
+ /* Writing global data */
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ out_line =
+ g_strdup_printf ("%s=%s\n", (gchar *) key, (gchar *) value);
+ g_io_channel_write_chars (channel, out_line, -1,
+ &bytes_written, error);
+ if (bytes_written == 0 || (error && *error))
+ break;
+ g_free (out_line);
+ }
+ if (error && *error) {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ "Found error: %s", (*error)->message);
+ goto done;
+ }
+
+ /* Writing connection data */
+ g_io_channel_write_chars (channel,
+ "\n###### Connection Configuration ######\n",
+ -1, &bytes_written, error);
+ g_hash_table_iter_init (&iter, conn_table);
+ while (g_hash_table_iter_next (&iter, &name, &network)) {
+ g_hash_table_iter_init (&iter_network, (GHashTable *) network);
+ g_io_channel_write_chars (channel,
+ "#----------------------------------\n",
+ -1, &bytes_written, error);
+
+ while (g_hash_table_iter_next (&iter_network, &key, &value)) {
+ if (!g_str_has_prefix ((gchar *) key, "name")
+ && !g_str_has_prefix ((gchar *) key, "type")) {
+ /* These keys contain brackets */
+ if (strcmp
+ ((gchar *) key,
+ "config") == 0
+ || strcmp ((gchar *) key,
+ "routes") == 0
+ || strcmp ((gchar *) key,
+ "pppd") == 0
+ || strcmp ((gchar *) key, "chat") == 0)
+ format_ips (value, &out_line, (gchar *)
+ key, (gchar *)
+ name);
+ else
+ out_line =
+ g_strdup_printf
+ ("%s_%s=\"%s\"\n",
+ (gchar *) key,
+ (gchar *) name, (gchar *) value);
+ g_io_channel_write_chars
+ (channel, out_line, -1,
+ &bytes_written, error);
+ if (bytes_written == 0 || (error && *error))
+ break;
+ g_free (out_line);
+ }
+ }
+ }
+ if (error && *error) {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ "Found error: %s", (*error)->message);
+ goto done;
+ }
+
+ /* Writing reserved functions */
+ if (functions_list) {
+ g_io_channel_write_chars (channel,
+ "\n###### Reserved Functions ######\n",
+ -1, &bytes_written, error);
+ /* Writing functions */
+ for (list_iter = functions_list; list_iter;
+ list_iter = g_list_next (list_iter)) {
+ out_line =
+ g_strdup_printf ("%s\n", (gchar *) list_iter->data);
+ g_io_channel_write_chars (channel, out_line, -1,
+ &bytes_written, error);
+ if (bytes_written == 0 || (error && *error))
+ break;
+ g_free (out_line);
+ }
+ if (error && *error) {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ "Found error: %s", (*error)->message);
+ goto done;
+ }
+ }
+
+ g_io_channel_flush (channel, error);
+ if (error && *error) {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ "Found error: %s", (*error)->message);
+ goto done;
+ }
+ result = TRUE;
+ net_parser_data_changed = FALSE;
+ done:
+ g_io_channel_shutdown (channel, FALSE, NULL);
+ g_io_channel_unref (channel);
+ return result;
+}
+
+gboolean
+ifnet_delete_network (gchar * conn_name)
+{
+ GHashTable *network = NULL;
+
+ g_return_val_if_fail (conn_table != NULL && conn_name != NULL, FALSE);
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Deleting network for %s", conn_name);
+ network = g_hash_table_lookup (conn_table, conn_name);
+ if (!network)
+ return FALSE;
+ g_hash_table_remove (conn_table, conn_name);
+ destroy_connection_config (network);
+ net_parser_data_changed = TRUE;
+ return TRUE;
+}
+
+void
+ifnet_destroy (void)
+{
+ GHashTableIter iter;
+ gpointer key;
+ gpointer value;
+ GList *list_iter;
+
+ /* Destroy connection setting */
+ if (conn_table) {
+ g_hash_table_iter_init (&iter, conn_table);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ destroy_connection_config ((GHashTable *)
+ value);
+ }
+ g_hash_table_destroy (conn_table);
+ conn_table = NULL;
+ }
+
+ /* Destroy global data */
+ if (global_settings_table) {
+ g_hash_table_iter_init (&iter, global_settings_table);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ g_free (key);
+ g_free (value);
+ }
+ g_hash_table_destroy (global_settings_table);
+ global_settings_table = NULL;
+ }
+ for (list_iter = functions_list; list_iter;
+ list_iter = g_list_next (list_iter))
+ g_free (list_iter->data);
+ g_list_free (functions_list);
+}
diff --git a/system-settings/plugins/ifnet/net_parser.h b/system-settings/plugins/ifnet/net_parser.h
new file mode 100644
index 0000000000..73a44c857d
--- /dev/null
+++ b/system-settings/plugins/ifnet/net_parser.h
@@ -0,0 +1,46 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * Mu Qiao <qiaomuf@gmail.com>
+ *
+ * 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) 1999-2010 Gentoo Foundation, Inc.
+ */
+
+#ifndef _NET_PARSER_H
+#define _NET_PARSER_H
+
+#include <glib.h>
+
+#define CONF_NET_FILE "/etc/conf.d/net"
+#define IFNET_SYSTEM_SETTINGS_KEY_FILE "/etc/NetworkManager/nm-system-settings.conf"
+#define IFNET_KEY_FILE_GROUP "ifnet"
+
+gboolean ifnet_init (gchar * config_file);
+void ifnet_destroy (void);
+
+/* Reader functions */
+GList *ifnet_get_connection_names (void);
+gchar *ifnet_get_data (gchar * conn_name, const gchar * key);
+gchar *ifnet_get_global_data (const gchar * key);
+gchar *ifnet_get_global_setting (gchar * group, gchar * key);
+gboolean ifnet_has_connection (gchar * conn_name);
+
+/* Writer functions */
+gboolean ifnet_flush_to_file (gchar * config_file);
+void ifnet_set_data (gchar * conn_name, gchar * key, gchar * value);
+gboolean ifnet_add_connection (gchar * name, gchar * type);
+gboolean ifnet_delete_network (gchar * conn_name);
+#endif
diff --git a/system-settings/plugins/ifnet/net_utils.c b/system-settings/plugins/ifnet/net_utils.c
new file mode 100644
index 0000000000..8a541979d8
--- /dev/null
+++ b/system-settings/plugins/ifnet/net_utils.c
@@ -0,0 +1,932 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * Mu Qiao <qiaomuf@gmail.com>
+ *
+ * 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) 1999-2010 Gentoo Foundation, Inc.
+ */
+
+#include <config.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <nm-utils.h>
+#include <nm-system-config-interface.h>
+#include "net_utils.h"
+#include "wpa_parser.h"
+#include "net_parser.h"
+
+/* emit heading and tailing blank space, tab, character t */
+gchar *
+strip_string (gchar * str, gchar t)
+{
+ gchar *ret = str;
+ gint length = 0;
+ guint i = 0;
+
+ while (ret[i] != '\0'
+ && (ret[i] == '\t' || ret[i] == ' ' || ret[i] == t)) {
+ length++;
+ i++;
+ }
+ i = 0;
+ while (ret[i + length] != '\0') {
+ ret[i] = ret[i + length];
+ i++;
+ }
+ ret[i] = '\0';
+ length = strlen (ret);
+ while ((length - 1) >= 0
+ && (ret[length - 1] == ' ' || ret[length - 1] == '\n'
+ || ret[length - 1] == '\t' || ret[length - 1] == t))
+ length--;
+ ret[length] = '\0';
+ return ret;
+}
+
+gboolean
+is_hex (gchar * value)
+{
+ gchar *p;
+
+ if (!value)
+ return FALSE;
+ p = value;
+ while (*p) {
+ if (!isxdigit (*p)) {
+ return FALSE;
+ }
+ p++;
+ }
+ return TRUE;
+}
+
+gboolean
+is_ascii (gchar * value)
+{
+ gchar *p;
+
+ p = value;
+ while (*p) {
+ if (!isascii (*p)) {
+ return FALSE;
+ }
+ p++;
+ }
+ return TRUE;
+
+}
+
+gboolean
+is_true (char *str)
+{
+ if (!g_ascii_strcasecmp (str, "yes")
+ || !g_ascii_strcasecmp (str, "true"))
+ return TRUE;
+ return FALSE;
+}
+
+static int
+hex2num (char c)
+{
+ if (c >= '0' && c <= '9')
+ return c - '0';
+ if (c >= 'a' && c <= 'f')
+ return c - 'a' + 10;
+ if (c >= 'A' && c <= 'F')
+ return c - 'A' + 10;
+ return -1;
+}
+
+static int
+hex2byte (const char *hex)
+{
+ int a, b;
+
+ a = hex2num (*hex++);
+ if (a < 0)
+ return -1;
+ b = hex2num (*hex++);
+ if (b < 0)
+ return -1;
+ return (a << 4) | b;
+}
+
+/* free return value by caller */
+gchar *
+utils_hexstr2bin (const gchar * hex, size_t len)
+{
+ size_t i;
+ int a;
+ const gchar *ipos = hex;
+ gchar *buf = NULL;
+ gchar *opos;
+
+ /* Length must be a multiple of 2 */
+ if ((len % 2) != 0)
+ return NULL;
+
+ opos = buf = g_malloc0 ((len / 2) + 1);
+ for (i = 0; i < len; i += 2) {
+ a = hex2byte (ipos);
+ if (a < 0) {
+ g_free (buf);
+ return NULL;
+ }
+ *opos++ = a;
+ ipos += 2;
+ }
+ return buf;
+}
+
+/* free return value by caller */
+gchar *
+utils_bin2hexstr (const gchar * bytes, int len, int final_len)
+{
+ static gchar hex_digits[] = "0123456789abcdef";
+ gchar *result;
+ int i;
+ gsize buflen = (len * 2) + 1;
+
+ g_return_val_if_fail (bytes != NULL, NULL);
+ g_return_val_if_fail (len > 0, NULL);
+ g_return_val_if_fail (len < 4096, NULL); /* Arbitrary limit */
+ if (final_len > -1)
+ g_return_val_if_fail (final_len < buflen, NULL);
+
+ result = g_malloc0 (buflen);
+ for (i = 0; i < len; i++) {
+ result[2 * i] = hex_digits[(bytes[i] >> 4) & 0xf];
+ result[2 * i + 1] = hex_digits[bytes[i] & 0xf];
+ }
+ /* Cut converted key off at the correct length for this cipher type */
+ if (final_len > -1)
+ result[final_len] = '\0';
+ else
+ result[buflen - 1] = '\0';
+
+ return result;
+}
+
+GQuark
+ifnet_plugin_error_quark (void)
+{
+ static GQuark error_quark = 0;
+
+ if (G_UNLIKELY (error_quark == 0))
+ error_quark =
+ g_quark_from_static_string ("ifnet-plugin-error-quark");
+ return error_quark;
+}
+
+gboolean
+reload_parsers ()
+{
+ ifnet_destroy ();
+ wpa_parser_destroy ();
+ if (!ifnet_init (CONF_NET_FILE))
+ return FALSE;
+ wpa_parser_init (WPA_SUPPLICANT_CONF);
+ return TRUE;
+}
+
+gchar *
+read_hostname (gchar * path)
+{
+ gchar *contents = NULL, *result = NULL, *tmp;
+ gchar **all_lines = NULL;
+ guint line_num, i;
+
+ if (!g_file_get_contents (path, &contents, NULL, NULL))
+ return NULL;
+ all_lines = g_strsplit (contents, "\n", 0);
+ line_num = g_strv_length (all_lines);
+ for (i = 0; i < line_num; i++) {
+ g_strstrip (all_lines[i]);
+ if (all_lines[i][0] == '#' || all_lines[i][0] == '\0')
+ continue;
+ if (g_str_has_prefix (all_lines[i], "hostname")) {
+ tmp = strstr (all_lines[i], "=");
+ tmp++;
+ tmp = strip_string (tmp, '"');
+ result = g_strdup (tmp);
+ break;
+ }
+
+ }
+ g_strfreev (all_lines);
+ g_free (contents);
+ return result;
+}
+
+gboolean
+write_hostname (const gchar * hostname, gchar * path)
+{
+ gchar *contents = g_strdup_printf ("#Generated by NetworkManager\n"
+ "hostname=\"%s\"\n", hostname);
+ gboolean result = g_file_set_contents (path, contents, -1, NULL);
+
+ g_free (contents);
+ return result;
+}
+
+gboolean
+is_static_ip4 (gchar * conn_name)
+{
+ gchar *data = ifnet_get_data (conn_name, "config");
+ gchar *dhcp6;
+
+ if (!data)
+ return FALSE;
+ dhcp6 = strstr (data, "dhcp6");
+ if (dhcp6) {
+ gchar *dhcp4;
+
+ if (strstr (data, "dhcp "))
+ return FALSE;
+ dhcp4 = strstr (data, "dhcp");
+ if (!dhcp4)
+ return TRUE;
+ if (dhcp4[4] == '\0')
+ return FALSE;
+ return TRUE;
+ }
+ return strstr (data, "dhcp") == NULL ? TRUE : FALSE;
+}
+
+gboolean
+is_static_ip6 (gchar * conn_name)
+{
+ gchar *data = ifnet_get_data (conn_name, "config");
+
+ if (!data)
+ return TRUE;
+ return strstr (data, "dhcp6") == NULL ? TRUE : FALSE;
+}
+
+gboolean
+is_ip4_address (gchar * in_address)
+{
+ gchar *pattern =
+ "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.((\\{\\d{1,3}\\.\\.\\d{1,3}\\})|\\d{1,3})$";
+ gchar *address = g_strdup (in_address);
+ gboolean result = FALSE;
+ gchar *tmp;
+ GRegex *regex = g_regex_new (pattern, 0, 0, NULL);
+ GMatchInfo *match_info;
+
+ if (!address)
+ goto done;
+ g_strstrip (address);
+ if ((tmp = strstr (address, "/")) != NULL)
+ *tmp = '\0';
+ if ((tmp = strstr (address, " ")) != NULL)
+ *tmp = '\0';
+ g_regex_match (regex, address, 0, &match_info);
+ result = g_match_info_matches (match_info);
+ done:
+ if (match_info)
+ g_match_info_free (match_info);
+ g_regex_unref (regex);
+ g_free (address);
+ return result;
+}
+
+gboolean
+is_ip6_address (gchar * in_address)
+{
+ struct in6_addr tmp_ip6_addr;
+ gchar *tmp;
+ gchar *address = g_strdup (in_address);
+ gboolean result = FALSE;
+
+ if (!address) {
+ g_free (address);
+ return FALSE;
+ }
+ g_strstrip (address);
+ if ((tmp = strchr (address, '/')) != NULL)
+ *tmp = '\0';
+ if (inet_pton (AF_INET6, address, &tmp_ip6_addr))
+ result = TRUE;
+ g_free (address);
+ return result;
+
+}
+
+gboolean
+has_ip6_address (gchar * conn_name)
+{
+ gchar **ipset;
+ guint length;
+ guint i;
+
+ g_return_val_if_fail (conn_name != NULL, FALSE);
+ ipset = g_strsplit (ifnet_get_data (conn_name, "config"), "\" \"", 0);
+ length = g_strv_length (ipset);
+ for (i = 0; i < length; i++) {
+ if (!is_ip6_address (ipset[i]))
+ continue;
+ else {
+ g_strfreev (ipset);
+ return TRUE;
+ }
+
+ }
+ g_strfreev (ipset);
+ return FALSE;
+}
+
+gboolean
+has_default_route (gchar * conn_name, gboolean (*check_fn) (gchar *))
+{
+ gchar *routes = NULL, *tmp, *end;
+
+ g_return_val_if_fail (conn_name != NULL, FALSE);
+ tmp = ifnet_get_data (conn_name, "routes");
+ if (!tmp)
+ return FALSE;
+ routes = g_strdup (tmp);
+ tmp = strstr (routes, "default via ");
+ if (!tmp) {
+ goto error;
+ }
+ tmp += strlen ("default via ");
+ g_strstrip (tmp);
+ if ((end = strstr (tmp, "\"")) != NULL)
+ *end = '\0';
+ if (check_fn (tmp)) {
+ g_free (routes);
+ return TRUE;
+ }
+ error:
+ g_free (routes);
+ return FALSE;
+}
+
+static ip_block *
+create_ip4_block (gchar * ip)
+{
+ ip_block *iblock = g_slice_new0 (ip_block);
+ struct in_addr tmp_ip4_addr;
+ int i;
+ guint length;
+ gchar **ip_mask;
+
+ /* prefix format */
+ if (strstr (ip, "/")) {
+ gchar *prefix;
+
+ ip_mask = g_strsplit (ip, "/", 0);
+ length = g_strv_length (ip_mask);
+ if (!inet_pton (AF_INET, ip_mask[0], &tmp_ip4_addr))
+ goto error;
+ iblock->ip = tmp_ip4_addr.s_addr;
+ prefix = ip_mask[1];
+ i = 0;
+ while (i < length && isdigit (prefix[i]))
+ i++;
+ prefix[i] = '\0';
+ iblock->netmask = nm_utils_ip4_prefix_to_netmask ((guint32)
+ atoi (ip_mask
+ [1]));
+ } else if (strstr (ip, "netmask")) {
+ ip_mask = g_strsplit (ip, " ", 0);
+ length = g_strv_length (ip_mask);
+ if (!inet_pton (AF_INET, ip_mask[0], &tmp_ip4_addr))
+ goto error;
+ iblock->ip = tmp_ip4_addr.s_addr;
+ i = 0;
+ while (i < length && !strstr (ip_mask[++i], "netmask")) ;
+ while (i < length && ip_mask[++i][0] == '\0') ;
+ if (i >= length)
+ goto error;
+ if (!inet_pton (AF_INET, ip_mask[i], &tmp_ip4_addr))
+ goto error;
+ iblock->netmask = tmp_ip4_addr.s_addr;
+ } else {
+ g_slice_free (ip_block, iblock);
+ if (!is_ip6_address (ip) && !strstr (ip, "dhcp"))
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ "Can't handle ipv4 address: %s, missing netmask or prefix",
+ ip);
+ return NULL;
+ }
+ g_strfreev (ip_mask);
+ return iblock;
+ error:
+ if (!is_ip6_address (ip))
+ PLUGIN_WARN (IFNET_PLUGIN_NAME, "Can't handle IPv4 address: %s",
+ ip);
+ g_strfreev (ip_mask);
+ g_slice_free (ip_block, iblock);
+ return NULL;
+}
+
+static ip6_block *
+create_ip6_block (gchar * ip)
+{
+ ip6_block *iblock = g_slice_new0 (ip6_block);
+ gchar *dup_ip = g_strdup (ip);
+ struct in6_addr *tmp_ip6_addr = g_slice_new0 (struct in6_addr);
+ gchar *prefix = NULL;
+
+ if ((prefix = strstr (dup_ip, "/")) != NULL) {
+ *prefix = '\0';
+ prefix++;
+ }
+ if (!inet_pton (AF_INET6, dup_ip, tmp_ip6_addr)) {
+ goto error;
+ }
+ iblock->ip = tmp_ip6_addr;
+ if (prefix) {
+ errno = 0;
+ iblock->prefix = strtol (prefix, NULL, 10);
+ if (errno || iblock->prefix <= 0 || iblock->prefix > 128) {
+ goto error;
+ }
+ } else
+ iblock->prefix = 64;
+ g_free (dup_ip);
+ return iblock;
+ error:
+ if (!is_ip4_address (ip))
+ PLUGIN_WARN (IFNET_PLUGIN_NAME, "Can't handle IPv6 address: %s",
+ ip);
+ g_slice_free (ip6_block, iblock);
+ g_slice_free (struct in6_addr, tmp_ip6_addr);
+
+ g_free (dup_ip);
+ return NULL;
+}
+
+static guint32
+get_ip4_gateway (gchar * gateway)
+{
+ gchar *tmp, *split;
+ struct in_addr tmp_ip4_addr;
+
+ if (!gateway)
+ return 0;
+ tmp = strstr (gateway, "via ");
+ tmp = g_strdup (tmp + strlen ("via "));
+ strip_string (tmp, ' ');
+ strip_string (tmp, '"');
+ if ((split = strstr (tmp, "\"")) != NULL)
+ *split = '\0';
+ if (!inet_pton (AF_INET, tmp, &tmp_ip4_addr))
+ goto error;
+ g_free (tmp);
+ return tmp_ip4_addr.s_addr;
+ error:
+ if (!is_ip6_address (tmp))
+ PLUGIN_WARN (IFNET_PLUGIN_NAME, "Can't handle IPv4 gateway: %s",
+ tmp);
+ g_free (tmp);
+ return 0;
+}
+
+static struct in6_addr *
+get_ip6_next_hop (gchar * next_hop)
+{
+ gchar *tmp;
+ struct in6_addr *tmp_ip6_addr = g_slice_new0 (struct in6_addr);
+
+ if (!next_hop)
+ return 0;
+ tmp = strstr (next_hop, "via ");
+ tmp = g_strdup (tmp + strlen ("via "));
+ strip_string (tmp, ' ');
+ strip_string (tmp, '"');
+ g_strstrip (tmp);
+ if (!inet_pton (AF_INET6, tmp, tmp_ip6_addr))
+ goto error;
+ g_free (tmp);
+ return tmp_ip6_addr;
+ error:
+ if (!is_ip4_address (tmp))
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ "Can't handle IPv6 next_hop: %s", tmp);
+ g_free (tmp);
+ g_slice_free (struct in6_addr, tmp_ip6_addr);
+
+ return NULL;
+}
+
+ip_block *
+convert_ip4_config_block (gchar * conn_name)
+{
+ gchar **ipset;
+ guint length;
+ guint i;
+ gchar *ip;
+ guint32 def_gateway;
+ gchar *routes;
+ gchar *pos;
+ ip_block *start = NULL, *current = NULL, *iblock = NULL;
+ gchar *pattern =
+ "((\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.)\\{(\\d{1,3})\\.\\.(\\d{1,3})\\}(/\\d{1,2}))";
+ GRegex *regex = g_regex_new (pattern, 0, 0, NULL);
+
+ g_return_val_if_fail (conn_name != NULL, NULL);
+ ipset = g_strsplit (ifnet_get_data (conn_name, "config"), "\" \"", 0);
+ length = g_strv_length (ipset);
+ routes = ifnet_get_data (conn_name, "routes");
+ if (routes)
+ def_gateway = get_ip4_gateway (strstr (routes, "default"));
+ else
+ def_gateway = 0;
+ for (i = 0; i < length; i++) {
+ ip = ipset[i];
+ ip = strip_string (ip, '"');
+ //Handle ip like 192.168.4.{1..3}
+ if ((pos = strchr (ip, '{')) != NULL) {
+ gchar *ip_start, *ip_prefix;
+ gchar *begin_str, *end_str;
+ int begin, end, j;
+ GMatchInfo *match_info;
+
+ g_regex_match (regex, ip, 0, &match_info);
+ if (!g_match_info_matches (match_info)) {
+ g_match_info_free (match_info);
+ continue;
+ }
+ begin_str = g_match_info_fetch (match_info, 3);
+ end_str = g_match_info_fetch (match_info, 4);
+ begin = atoi (begin_str);
+ end = atoi (end_str);
+ ip_start = g_match_info_fetch (match_info, 2);
+ ip_prefix = g_match_info_fetch (match_info, 5);
+ if (end < begin || begin < 1 || end > 254) {
+ g_match_info_free (match_info);
+ continue;
+ }
+
+ for (j = begin; j <= end; j++) {
+ char suf[4];
+ gchar *newip;
+
+ sprintf (suf, "%d", j);
+ newip =
+ g_strconcat (ip_start, suf, ip_prefix,
+ NULL);
+ iblock = create_ip4_block (newip);
+ if (iblock == NULL) {
+ g_free (newip);
+ continue;
+ }
+ if (!iblock->gateway && def_gateway != 0)
+ iblock->gateway = def_gateway;
+ if (start == NULL)
+ start = current = iblock;
+ else {
+ current->next = iblock;
+ current = iblock;
+ }
+ g_free (newip);
+ }
+ g_free (begin_str);
+ g_free (end_str);
+ g_free (ip_start);
+ g_free (ip_prefix);
+ g_match_info_free (match_info);
+ } else {
+ iblock = create_ip4_block (ip);
+ if (iblock == NULL)
+ continue;
+ if (!iblock->gateway && def_gateway != 0)
+ iblock->gateway = def_gateway;
+ if (start == NULL)
+ start = current = iblock;
+ else {
+ current->next = iblock;
+ current = iblock;
+ }
+ }
+ }
+ g_strfreev (ipset);
+ g_regex_unref (regex);
+ return start;
+}
+
+ip6_block *
+convert_ip6_config_block (gchar * conn_name)
+{
+ gchar **ipset;
+ guint length;
+ guint i;
+ gchar *ip;
+ ip6_block *start = NULL, *current = NULL, *iblock = NULL;
+
+ g_return_val_if_fail (conn_name != NULL, NULL);
+ ipset = g_strsplit (ifnet_get_data (conn_name, "config"), "\" \"", 0);
+ length = g_strv_length (ipset);
+ for (i = 0; i < length; i++) {
+ ip = ipset[i];
+ ip = strip_string (ip, '"');
+ iblock = create_ip6_block (ip);
+ if (iblock == NULL)
+ continue;
+ if (start == NULL)
+ start = current = iblock;
+ else {
+ current->next = iblock;
+ current = iblock;
+ }
+ }
+ g_strfreev (ipset);
+ return start;
+}
+
+ip_block *
+convert_ip4_routes_block (gchar * conn_name)
+{
+ gchar **ipset;
+ guint length;
+ guint i;
+ gchar *ip;
+ gchar *routes;
+ ip_block *start = NULL, *current = NULL, *iblock = NULL;
+
+ g_return_val_if_fail (conn_name != NULL, NULL);
+ routes = ifnet_get_data (conn_name, "routes");
+ if (!routes)
+ return NULL;
+ ipset = g_strsplit (routes, "\" \"", 0);
+ length = g_strv_length (ipset);
+ for (i = 0; i < length; i++) {
+ ip = ipset[i];
+ if (strstr (ip, "default via ") || strstr (ip, "::")
+ || !strstr (ip, "via"))
+ continue;
+ ip = strip_string (ip, '"');
+ iblock = create_ip4_block (ip);
+ if (iblock == NULL)
+ continue;
+ iblock->gateway = get_ip4_gateway (ip);
+ if (start == NULL)
+ start = current = iblock;
+ else {
+ current->next = iblock;
+ current = iblock;
+ }
+ }
+ g_strfreev (ipset);
+ return start;
+}
+
+ip6_block *
+convert_ip6_routes_block (gchar * conn_name)
+{
+ gchar **ipset;
+ guint length;
+ guint i;
+ gchar *ip, *tmp_addr;
+ gchar *routes;
+ ip6_block *start = NULL, *current = NULL, *iblock = NULL;
+ struct in6_addr *tmp_ip6_addr;
+
+ g_return_val_if_fail (conn_name != NULL, NULL);
+ routes = ifnet_get_data (conn_name, "routes");
+ if (!routes)
+ return NULL;
+ ipset = g_strsplit (routes, "\" \"", 0);
+ length = g_strv_length (ipset);
+ for (i = 0; i < length; i++) {
+ ip = ipset[i];
+ ip = strip_string (ip, '"');
+ if (ip[0] == '\0')
+ continue;
+ printf ("ip:%s\n", ip);
+ if ((tmp_addr = strstr (ip, "default via ")) != NULL) {
+ tmp_addr += strlen ("default via ");
+ if (!is_ip6_address (tmp_addr))
+ continue;
+ else {
+ tmp_ip6_addr = g_slice_new0 (struct in6_addr);
+
+ if (inet_pton (AF_INET6, "::", tmp_ip6_addr)) {
+ iblock = g_slice_new0 (ip6_block);
+ iblock->ip = tmp_ip6_addr;
+ iblock->prefix = 128;
+ } else {
+ g_slice_free (struct in6_addr,
+ tmp_ip6_addr);
+ continue;
+ }
+ }
+ } else
+ iblock = create_ip6_block (ip);
+ if (iblock == NULL)
+ continue;
+ iblock->next_hop = get_ip6_next_hop (ip);
+ if (iblock->next_hop == NULL) {
+ destroy_ip6_block (iblock);
+ continue;
+ }
+ if (start == NULL)
+ start = current = iblock;
+ else {
+ current->next = iblock;
+ current = iblock;
+ }
+ }
+ g_strfreev (ipset);
+ return start;
+}
+
+void
+destroy_ip_block (ip_block * iblock)
+{
+ g_slice_free (ip_block, iblock);
+}
+
+void
+destroy_ip6_block (ip6_block * iblock)
+{
+ g_slice_free (struct in6_addr, iblock->ip);
+ g_slice_free (struct in6_addr, iblock->next_hop);
+
+ g_slice_free (ip6_block, iblock);
+}
+
+void
+set_ip4_dns_servers (NMSettingIP4Config * s_ip4, gchar * conn_name)
+{
+ gchar *dns_servers = ifnet_get_data (conn_name, "dns_servers");
+ gchar **server_list;
+ guint length, i;
+ struct in_addr tmp_ip4_addr;
+ guint32 new_dns;
+
+ if (!dns_servers)
+ return;
+ strip_string (dns_servers, '"');
+ server_list = g_strsplit (dns_servers, " ", 0);
+ length = g_strv_length (server_list);
+ if (length)
+ g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS,
+ TRUE, NULL);
+ for (i = 0; i < length; i++) {
+ g_strstrip (server_list[i]);
+ if (server_list[i][0] == '\0')
+ continue;
+ if (!inet_pton (AF_INET, server_list[i], &tmp_ip4_addr)) {
+ if (!is_ip6_address (server_list[i]))
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ "ignored dns: %s\n",
+ server_list[i]);
+ continue;
+ }
+ new_dns = tmp_ip4_addr.s_addr;
+ if (new_dns && !nm_setting_ip4_config_add_dns (s_ip4, new_dns))
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ "warning: duplicate DNS server %s",
+ server_list[i]);
+ }
+ g_strfreev (server_list);
+}
+
+void
+set_ip6_dns_servers (NMSettingIP6Config * s_ip6, gchar * conn_name)
+{
+ gchar *dns_servers = ifnet_get_data (conn_name, "dns_servers");
+ gchar **server_list;
+ guint length, i;
+ struct in6_addr tmp_ip6_addr;
+
+ if (!dns_servers)
+ return;
+ strip_string (dns_servers, '"');
+ server_list = g_strsplit (dns_servers, " ", 0);
+ length = g_strv_length (server_list);
+ if (length)
+ g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS,
+ TRUE, NULL);
+ for (i = 0; i < length; i++) {
+ g_strstrip (server_list[i]);
+ if (server_list[i][0] == '\0')
+ continue;
+ if (!inet_pton (AF_INET6, server_list[i], &tmp_ip6_addr)) {
+ if (is_ip6_address (server_list[i]))
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ "ignored dns: %s\n",
+ server_list[i]);
+ continue;
+ }
+ if (!IN6_IS_ADDR_UNSPECIFIED (&tmp_ip6_addr)
+ && !nm_setting_ip6_config_add_dns (s_ip6, &tmp_ip6_addr))
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ "warning: duplicate DNS server %s",
+ server_list[i]);
+ }
+ g_strfreev (server_list);
+}
+
+gboolean
+is_managed (gchar * conn_name)
+{
+ gchar *config;
+
+ g_return_val_if_fail (conn_name != NULL, FALSE);
+ config = (gchar *) ifnet_get_data (conn_name, "managed");
+ if (!config)
+ return TRUE;
+ if (strcmp (config, "false") == 0)
+ return FALSE;
+ return TRUE;
+}
+
+void
+get_dhcp_hostname_and_client_id (char **hostname, char **client_id)
+{
+ gchar *dhcp_client = ifnet_get_global_setting ("main", "dhcp");
+ const gchar *dhcpcd_conf = "/etc/dhcpcd.conf";
+ const gchar *dhclient_conf = "/etc/dhcp/dhclient.conf";
+ gchar *line = NULL, *tmp = NULL, *contents = NULL;
+ gchar **all_lines;
+ guint line_num, i;
+
+ *hostname = NULL;
+ *client_id = NULL;
+ if (dhcp_client) {
+ if (!strcmp (dhcp_client, "dhclient"))
+ g_file_get_contents (dhclient_conf, &contents, NULL,
+ NULL);
+ else if (!strcmp (dhcp_client, "dhcpcd"))
+ g_file_get_contents (dhcpcd_conf, &contents, NULL,
+ NULL);
+ } else {
+ if (g_file_test (dhclient_conf, G_FILE_TEST_IS_REGULAR))
+ g_file_get_contents (dhclient_conf, &contents, NULL,
+ NULL);
+ else if (g_file_test (dhcpcd_conf, G_FILE_TEST_IS_REGULAR))
+ g_file_get_contents (dhcpcd_conf, &contents, NULL,
+ NULL);
+ }
+ if (!contents)
+ return;
+ all_lines = g_strsplit (contents, "\n", 0);
+ line_num = g_strv_length (all_lines);
+ for (i = 0; i < line_num; i++) {
+ line = all_lines[i];
+ // dhcpcd.conf
+ g_strstrip (line);
+ if (g_str_has_prefix (line, "hostname")) {
+ tmp = line + strlen ("hostname");
+ g_strstrip (tmp);
+ if (tmp[0] != '\0')
+ *hostname = g_strdup (tmp);
+ else
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME,
+ "dhcpcd hostname not defined, ignoring");
+ } else if (g_str_has_prefix (line, "clientid")) {
+ tmp = line + strlen ("clientid");
+ g_strstrip (tmp);
+ if (tmp[0] != '\0')
+ *client_id = g_strdup (tmp);
+ else
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME,
+ "dhcpcd clientid not defined, ignoring");
+ }
+ // dhclient.conf
+ else if ((tmp = strstr (line, "send host-name")) != NULL) {
+ tmp += strlen ("send host-name");
+ g_strstrip (tmp);
+ strip_string (tmp, '"');
+ strip_string (tmp, ';');
+ if (tmp[0] != '\0')
+ *hostname = g_strdup (tmp);
+ else
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME,
+ "dhclient hostname not defined, ignoring");
+ } else if ((tmp = strstr (line, "send dhcp-client-identifier"))
+ != NULL) {
+ tmp += strlen ("send dhcp-client-identifier");
+ g_strstrip (tmp);
+ strip_string (tmp, ';');
+ if (tmp[0] != '\0')
+ *client_id = g_strdup (tmp);
+ else
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME,
+ "dhclient clientid not defined, ignoring");
+ }
+ }
+ g_strfreev (all_lines);
+ g_free (contents);
+}
diff --git a/system-settings/plugins/ifnet/net_utils.h b/system-settings/plugins/ifnet/net_utils.h
new file mode 100644
index 0000000000..ba7af39c27
--- /dev/null
+++ b/system-settings/plugins/ifnet/net_utils.h
@@ -0,0 +1,80 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * Mu Qiao <qiaomuf@gmail.com>
+ *
+ * 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) 1999-2010 Gentoo Foundation, Inc.
+ */
+
+#ifndef _IFNET_UTILS_H
+#define _IFNET_UTILS_H
+#define IFNET_PLUGIN_NAME "SCPlugin-Ifnet"
+#include <glib.h>
+#include <arpa/inet.h>
+#include <nm-setting-ip6-config.h>
+#include <nm-setting-ip4-config.h>
+#include "net_parser.h"
+#define has_default_ip4_route(conn_name) has_default_route((conn_name),&is_ip4_address)
+#define has_default_ip6_route(conn_name) has_default_route((conn_name),&is_ip6_address)
+
+typedef struct _ip_block {
+ guint32 ip;
+ guint32 netmask;
+ guint32 gateway;
+ struct _ip_block *next;
+} ip_block;
+
+typedef struct _ip6_block {
+ struct in6_addr *ip;
+ long int prefix;
+ struct in6_addr *next_hop;
+ struct _ip6_block *next;
+} ip6_block;
+
+gchar *read_hostname (gchar * path);
+gboolean write_hostname (const gchar * hostname, gchar * path);
+gboolean is_static_ip4 (gchar * conn_name);
+gboolean is_static_ip6 (gchar * conn_name);
+gboolean is_ip4_address (gchar * in_address);
+gboolean is_ip6_address (gchar * in_address);
+gboolean has_ip6_address (gchar * conn_name);
+gboolean has_default_route (gchar * conn_name, gboolean (*check_fn) (gchar *));
+gboolean reload_parsers (void);
+
+ip_block *convert_ip4_config_block (gchar * conn_name);
+ip6_block *convert_ip6_config_block (gchar * conn_name);
+ip_block *convert_ip4_routes_block (gchar * conn_name);
+ip6_block *convert_ip6_routes_block (gchar * conn_name);
+void destroy_ip_block (ip_block * iblock);
+void destroy_ip6_block (ip6_block * iblock);
+
+void set_ip4_dns_servers (NMSettingIP4Config * s_ip4, gchar * conn_name);
+void set_ip6_dns_servers (NMSettingIP6Config * s_ip6, gchar * conn_name);
+
+gchar *strip_string (gchar * str, gchar t);
+gboolean is_managed (gchar * conn_name);
+
+GQuark ifnet_plugin_error_quark (void);
+gchar *utils_hexstr2bin (const gchar * hex, size_t len);
+gchar *utils_bin2hexstr (const gchar * bytes, int len, int final_len);
+
+gboolean is_hex (gchar * value);
+gboolean is_ascii (gchar * value);
+gboolean is_true (gchar * str);
+
+void get_dhcp_hostname_and_client_id (char **hostname, char **client_id);
+
+#endif
diff --git a/system-settings/plugins/ifnet/nm-ifnet-connection.c b/system-settings/plugins/ifnet/nm-ifnet-connection.c
new file mode 100644
index 0000000000..e47495cfbe
--- /dev/null
+++ b/system-settings/plugins/ifnet/nm-ifnet-connection.c
@@ -0,0 +1,251 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * Mu Qiao <qiaomuf@gmail.com>
+ *
+ * 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) 1999-2010 Gentoo Foundation, Inc.
+ */
+
+#include <string.h>
+#include <glib/gstdio.h>
+#include <NetworkManager.h>
+#include <nm-utils.h>
+#include <nm-setting-wireless-security.h>
+#include <nm-sysconfig-connection.h>
+#include <nm-system-config-interface.h>
+#include <nm-system-config-error.h>
+#include "nm-ifnet-connection.h"
+#include "connection_parser.h"
+#include "net_parser.h"
+#include "net_utils.h"
+#include "wpa_parser.h"
+#include "plugin.h"
+
+static NMSettingsConnectionInterface *parent_settings_connection_iface;
+
+static void settings_connection_interface_init (NMSettingsConnectionInterface *
+ klass);
+
+G_DEFINE_TYPE_EXTENDED (NMIfnetConnection, nm_ifnet_connection,
+ NM_TYPE_SYSCONFIG_CONNECTION, 0,
+ G_IMPLEMENT_INTERFACE
+ (NM_TYPE_SETTINGS_CONNECTION_INTERFACE,
+ settings_connection_interface_init))
+// G_DEFINE_TYPE(NMIfnetConnection, nm_ifnet_connection,
+// NM_TYPE_SYSCONFIG_CONNECTION)
+#define NM_IFNET_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_IFNET_CONNECTION, NMIfnetConnectionPrivate))
+enum {
+ PROP_ZERO,
+ PROP_CONN_NAME,
+ _PROP_END,
+};
+
+enum {
+ IFNET_SETUP_MONITORS,
+ IFNET_CANCEL_MONITORS,
+ IFNET_LAST_SIGNAL
+};
+
+static guint signals[IFNET_LAST_SIGNAL] = { 0 };
+
+typedef struct {
+ gchar *conn_name;
+ NMSystemConfigInterface *config;
+} NMIfnetConnectionPrivate;
+
+NMIfnetConnection *
+nm_ifnet_connection_new (gchar * conn_name)
+{
+ NMConnection *tmp;
+ GObject *object;
+ GError **error = NULL;
+
+ g_return_val_if_fail (conn_name != NULL, NULL);
+ tmp = ifnet_update_connection_from_config_block (conn_name, error);
+ if (!tmp)
+ return NULL;
+ object = (GObject *) g_object_new (NM_TYPE_IFNET_CONNECTION,
+ NM_IFNET_CONNECTION_CONN_NAME,
+ conn_name, NULL);
+ if (!object) {
+ g_object_unref (tmp);
+ return NULL;
+ }
+ nm_sysconfig_connection_update (NM_SYSCONFIG_CONNECTION (object), tmp,
+ FALSE, NULL);
+ g_object_unref (tmp);
+ return NM_IFNET_CONNECTION (object);
+}
+
+static void
+nm_ifnet_connection_init (NMIfnetConnection * connection)
+{
+}
+
+static gboolean
+update (NMSettingsConnectionInterface * connection,
+ NMSettingsConnectionInterfaceUpdateFunc callback, gpointer user_data)
+{
+ GError *error = NULL;
+ gchar *new_conn_name = NULL;
+ gboolean result;
+ NMIfnetConnectionPrivate *priv =
+ NM_IFNET_CONNECTION_GET_PRIVATE (connection);
+ g_signal_emit (connection, signals[IFNET_CANCEL_MONITORS], 0);
+ if (!ifnet_update_parsers_by_connection
+ (NM_CONNECTION (connection), priv->conn_name, &new_conn_name,
+ CONF_NET_FILE, WPA_SUPPLICANT_CONF, &error)) {
+ if (new_conn_name)
+ g_free (new_conn_name);
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Failed to update %s",
+ priv->conn_name);
+ reload_parsers ();
+ callback (connection, error, user_data);
+ g_error_free (error);
+ g_signal_emit (connection, signals[IFNET_SETUP_MONITORS], 0);
+ return FALSE;
+ }
+
+ g_free (priv->conn_name);
+ priv->conn_name = new_conn_name;
+ result =
+ parent_settings_connection_iface->update (connection, callback,
+ user_data);
+ if (result)
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Successfully updated %s",
+ priv->conn_name);
+ g_signal_emit (connection, signals[IFNET_SETUP_MONITORS], 0);
+ return result;
+}
+
+static gboolean
+do_delete (NMSettingsConnectionInterface * connection,
+ NMSettingsConnectionInterfaceDeleteFunc callback, gpointer user_data)
+{
+ GError *error = NULL;
+ gboolean result;
+ NMIfnetConnectionPrivate *priv =
+ NM_IFNET_CONNECTION_GET_PRIVATE (connection);
+ g_signal_emit (connection, signals[IFNET_CANCEL_MONITORS], 0);
+ if (!ifnet_delete_connection_in_parsers
+ (priv->conn_name, CONF_NET_FILE, WPA_SUPPLICANT_CONF)) {
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Failed to delete %s",
+ priv->conn_name);
+ reload_parsers ();
+ callback (connection, error, user_data);
+ g_error_free (error);
+ g_signal_emit (connection, signals[IFNET_SETUP_MONITORS], 0);
+ return FALSE;
+ }
+ result =
+ parent_settings_connection_iface->delete (connection, callback,
+ user_data);
+ if (result)
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Successfully deleted %s",
+ priv->conn_name);
+ g_signal_emit (connection, signals[IFNET_SETUP_MONITORS], 0);
+ return result;
+}
+
+static void
+settings_connection_interface_init (NMSettingsConnectionInterface * iface)
+{
+ parent_settings_connection_iface = g_type_interface_peek_parent (iface);
+ iface->update = update;
+ iface->delete = do_delete;
+}
+
+static void
+set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec)
+{
+ NMIfnetConnectionPrivate *priv =
+ NM_IFNET_CONNECTION_GET_PRIVATE (object);
+ g_return_if_fail (priv);
+
+ switch (prop_id) {
+ case PROP_CONN_NAME:
+ if (priv->conn_name)
+ g_free (priv->conn_name);
+ priv->conn_name = g_strdup (g_value_get_pointer (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec)
+{
+ NMIfnetConnectionPrivate *priv =
+ NM_IFNET_CONNECTION_GET_PRIVATE (object);
+ g_return_if_fail (priv);
+
+ switch (prop_id) {
+ case PROP_CONN_NAME:
+ g_value_set_pointer (value, priv->conn_name);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+finalize (GObject * object)
+{
+ NMIfnetConnectionPrivate *priv =
+ NM_IFNET_CONNECTION_GET_PRIVATE (object);
+ g_return_if_fail (priv);
+
+ if (priv->conn_name)
+ g_free (priv->conn_name);
+ G_OBJECT_CLASS (nm_ifnet_connection_parent_class)->finalize (object);
+}
+
+static void
+nm_ifnet_connection_class_init (NMIfnetConnectionClass * ifnet_connection_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (ifnet_connection_class);
+
+ g_type_class_add_private (ifnet_connection_class,
+ sizeof (NMIfnetConnectionPrivate));
+
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+ object_class->finalize = finalize;
+
+ /* Properties */
+ g_object_class_install_property
+ (object_class, PROP_CONN_NAME,
+ g_param_spec_pointer (NM_IFNET_CONNECTION_CONN_NAME,
+ "config_block",
+ "",
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ signals[IFNET_SETUP_MONITORS] =
+ g_signal_new ("ifnet_setup_monitors",
+ G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_LAST,
+ 0, NULL, NULL, g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+ signals[IFNET_CANCEL_MONITORS] =
+ g_signal_new ("ifnet_cancel_monitors",
+ G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_LAST,
+ 0, NULL, NULL, g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+}
diff --git a/system-settings/plugins/ifnet/nm-ifnet-connection.h b/system-settings/plugins/ifnet/nm-ifnet-connection.h
new file mode 100644
index 0000000000..8b3d495f0b
--- /dev/null
+++ b/system-settings/plugins/ifnet/nm-ifnet-connection.h
@@ -0,0 +1,49 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * Mu Qiao <qiaomuf@gmail.com>
+ *
+ * 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) 1999-2010 Gentoo Foundation, Inc.
+ */
+
+#ifndef NM_IFNET_CONNECTION_H
+#define NM_IFNET_CONNECTION_H
+
+#include <nm-sysconfig-connection.h>
+#include "net_parser.h"
+
+G_BEGIN_DECLS
+#define NM_TYPE_IFNET_CONNECTION (nm_ifnet_connection_get_type ())
+#define NM_IFNET_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_IFNET_CONNECTION, NMIfnetConnection))
+#define NM_IFNET_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_IFNET_CONNECTION, NMIfnetConnectionClass))
+#define NM_IS_IFNET_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_IFNET_CONNECTION))
+#define NM_IS_IFNET_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NM_TYPE_IFNET_CONNECTION))
+#define NM_IFNET_CONNECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_IFNET_CONNECTION, NMIfnetConnectionClass))
+#define NM_IFNET_CONNECTION_CONN_NAME "connection_name"
+ typedef struct {
+ NMSysconfigConnection parent;
+} NMIfnetConnection;
+
+typedef struct {
+ NMSysconfigConnectionClass parent;
+} NMIfnetConnectionClass;
+
+GType nm_ifnet_connection_get_type (void);
+
+NMIfnetConnection *nm_ifnet_connection_new (gchar * conn_name);
+
+G_END_DECLS
+#endif /* NM_IFNET_CONNECTION_H */
diff --git a/system-settings/plugins/ifnet/plugin.c b/system-settings/plugins/ifnet/plugin.c
new file mode 100644
index 0000000000..51d560246d
--- /dev/null
+++ b/system-settings/plugins/ifnet/plugin.c
@@ -0,0 +1,585 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager system settings service (ifnet)
+ *
+ * Mu Qiao <qiaomuf@gmail.com>
+ *
+ * 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) 1999-2010 Gentoo Foundation, Inc.
+ */
+
+#include <string.h>
+
+#include <gmodule.h>
+#include <glib.h>
+#include <gio/gio.h>
+
+#include <nm-utils.h>
+#include <nm-setting-connection.h>
+
+#include "NetworkManager.h"
+#include "nm-system-config-interface.h"
+#include "nm-ifnet-connection.h"
+
+#include "plugin.h"
+#include "net_utils.h"
+#include "net_parser.h"
+#include "wpa_parser.h"
+#include "connection_parser.h"
+
+#define IFNET_PLUGIN_NAME_PRINT "ifnet"
+#define IFNET_PLUGIN_INFO "(C) 1999-2010 Gentoo Foundation, Inc. To report bugs please use bugs.gentoo.org with [networkmanager] or [dagger] prefix."
+#define IFNET_SYSTEM_HOSTNAME_FILE "/etc/conf.d/hostname"
+#define IFNET_MANAGE_WELL_KNOWN_DEFAULT TRUE
+#define IFNET_KEY_FILE_KEY_MANAGED "managed"
+
+typedef struct {
+ GHashTable *config_connections;
+ gchar *hostname;
+ gboolean unmanaged_well_known;
+
+ GFileMonitor *hostname_monitor;
+ GFileMonitor *net_monitor;
+ GFileMonitor *wpa_monitor;
+
+} SCPluginIfnetPrivate;
+
+typedef void (*FileChangedFn) (gpointer user_data);
+
+typedef struct {
+ FileChangedFn callback;
+ gpointer user_data;
+} FileMonitorInfo;
+
+static void system_config_interface_init (NMSystemConfigInterface *
+ system_config_interface_class);
+
+static void
+ reload_connections (gpointer config);
+
+G_DEFINE_TYPE_EXTENDED (SCPluginIfnet, sc_plugin_ifnet, G_TYPE_OBJECT, 0,
+ G_IMPLEMENT_INTERFACE (NM_TYPE_SYSTEM_CONFIG_INTERFACE,
+ system_config_interface_init))
+#define SC_PLUGIN_IFNET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), SC_TYPE_PLUGIN_IFNET, SCPluginIfnetPrivate))
+/*
+static void
+ignore_cb(NMSettingsConnectionInterface * connection,
+ GError * error, gpointer user_data)
+{
+}
+*/
+static const char *
+get_hostname (NMSystemConfigInterface * config)
+{
+ return SC_PLUGIN_IFNET_GET_PRIVATE (config)->hostname;
+}
+
+static void
+update_system_hostname (gpointer config)
+{
+ SCPluginIfnetPrivate *priv = SC_PLUGIN_IFNET_GET_PRIVATE (config);
+
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Updating hostname");
+
+ if (priv->hostname)
+ g_free (priv->hostname);
+ priv->hostname = read_hostname (IFNET_SYSTEM_HOSTNAME_FILE);
+
+ g_object_notify (G_OBJECT (config),
+ NM_SYSTEM_CONFIG_INTERFACE_HOSTNAME);
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Hostname updated to: %s",
+ priv->hostname);
+}
+
+static void
+write_system_hostname (NMSystemConfigInterface * config,
+ const gchar * newhostname)
+{
+ SCPluginIfnetPrivate *priv = SC_PLUGIN_IFNET_GET_PRIVATE (config);
+
+ g_return_if_fail (newhostname);
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Write system hostname: %s",
+ newhostname);
+ if (write_hostname (newhostname, IFNET_SYSTEM_HOSTNAME_FILE)) {
+ if (priv->hostname)
+ g_free (priv->hostname);
+ priv->hostname = g_strdup (newhostname);
+ g_object_notify (G_OBJECT (config),
+ NM_SYSTEM_CONFIG_INTERFACE_HOSTNAME);
+ } else
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ "Write system hostname: %s failed", newhostname);
+}
+
+static gboolean
+is_managed_plugin ()
+{
+ gchar *result = NULL;
+
+ result =
+ ifnet_get_global_setting (IFNET_KEY_FILE_GROUP,
+ IFNET_KEY_FILE_KEY_MANAGED);
+ if (result) {
+ if (is_true (result)) {
+ g_free (result);
+ return TRUE;
+ } else {
+ g_free (result);
+ return FALSE;
+ }
+ }
+ return IFNET_MANAGE_WELL_KNOWN_DEFAULT;
+}
+
+static void
+file_changed (GFileMonitor * monitor,
+ GFile * file,
+ GFile * other_file,
+ GFileMonitorEvent event_type, gpointer user_data)
+{
+ FileMonitorInfo *info;
+
+ switch (event_type) {
+ case G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT:
+ info = (FileMonitorInfo *) user_data;
+ info->callback (info->user_data);
+ break;
+ default:
+ break;
+ }
+}
+
+static GFileMonitor *
+monitor_file_changes (const char *filename,
+ FileChangedFn callback, gpointer user_data)
+{
+ GFile *file;
+ GFileMonitor *monitor;
+ FileMonitorInfo *info;
+ GError **error = NULL;
+
+ if (!g_file_test (filename, G_FILE_TEST_IS_REGULAR))
+ return NULL;
+ file = g_file_new_for_path (filename);
+ monitor = g_file_monitor_file (file, G_FILE_MONITOR_NONE, NULL, error);
+ g_object_unref (file);
+
+ if (monitor) {
+ info = g_new0 (FileMonitorInfo, 1);
+ info->callback = callback;
+ info->user_data = user_data;
+ g_object_weak_ref (G_OBJECT (monitor), (GWeakNotify) g_free,
+ info);
+ g_signal_connect (monitor, "changed", G_CALLBACK (file_changed),
+ info);
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Monitoring %s", filename);
+
+ } else
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ "Monitoring %s failed, error: %s", filename,
+ error == NULL ? "nothing" : (*error)->message);
+
+ return monitor;
+}
+
+static void
+update_old_connection (gchar * conn_name,
+ NMIfnetConnection * old_conn,
+ NMIfnetConnection * new_conn,
+ SCPluginIfnetPrivate * priv)
+{
+ GError **error = NULL;
+
+ if (!nm_sysconfig_connection_update (NM_SYSCONFIG_CONNECTION (old_conn),
+ NM_CONNECTION (new_conn), TRUE,
+ error)) {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME, "error updating: %s",
+ (error
+ && (*error)) ? (*error)->message : "(unknown)");
+ } else
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Connection %s updated",
+ conn_name);
+ g_object_unref (new_conn);
+}
+
+static void
+setup_monitors (NMIfnetConnection * connection, gpointer user_data)
+{
+ SCPluginIfnet *self = SC_PLUGIN_IFNET (user_data);
+ SCPluginIfnetPrivate *priv = SC_PLUGIN_IFNET_GET_PRIVATE (self);
+
+ priv->hostname_monitor =
+ monitor_file_changes (IFNET_SYSTEM_HOSTNAME_FILE,
+ update_system_hostname, user_data);
+ priv->net_monitor =
+ monitor_file_changes (CONF_NET_FILE, reload_connections, user_data);
+ priv->wpa_monitor =
+ monitor_file_changes (WPA_SUPPLICANT_CONF, reload_connections,
+ user_data);
+}
+
+static void
+cancel_monitors (NMIfnetConnection * connection, gpointer user_data)
+{
+ SCPluginIfnet *self = SC_PLUGIN_IFNET (user_data);
+ SCPluginIfnetPrivate *priv = SC_PLUGIN_IFNET_GET_PRIVATE (self);
+
+ if (priv->hostname_monitor) {
+ g_file_monitor_cancel (priv->hostname_monitor);
+ g_object_unref (priv->hostname_monitor);
+ }
+ if (priv->net_monitor) {
+ g_file_monitor_cancel (priv->net_monitor);
+ g_object_unref (priv->net_monitor);
+ }
+ if (priv->wpa_monitor) {
+ g_file_monitor_cancel (priv->wpa_monitor);
+ g_object_unref (priv->wpa_monitor);
+ }
+}
+
+static void
+reload_connections (gpointer config)
+{
+ SCPluginIfnet *self = SC_PLUGIN_IFNET (config);
+ SCPluginIfnetPrivate *priv = SC_PLUGIN_IFNET_GET_PRIVATE (self);
+ GList *conn_names = NULL, *n_iter = NULL;
+
+ /* save names for removing unused connections */
+ GHashTable *new_conn_names = NULL;
+ GHashTableIter iter;
+ gpointer key;
+ gpointer value;
+
+ if (priv->unmanaged_well_known)
+ return;
+
+ if (!reload_parsers ())
+ return;
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Loading connections");
+ conn_names = ifnet_get_connection_names ();
+ new_conn_names =
+ g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+ for (n_iter = conn_names; n_iter; n_iter = g_list_next (n_iter)) {
+ NMIfnetConnection *exported;
+ NMIfnetConnection *old;
+ gchar *conn_name = g_strdup (n_iter->data);
+
+ /* add the new connection */
+ exported = nm_ifnet_connection_new (conn_name);
+ if (!exported) {
+ g_free (conn_name);
+ continue;
+ }
+ g_signal_connect (G_OBJECT (exported), "ifnet_setup_monitors",
+ G_CALLBACK (setup_monitors), config);
+ g_signal_connect (G_OBJECT (exported), "ifnet_cancel_monitors",
+ G_CALLBACK (cancel_monitors), config);
+ old = g_hash_table_lookup (priv->config_connections, conn_name);
+ if (old && exported) {
+ gchar *auto_refresh =
+ ifnet_get_global_setting (IFNET_KEY_FILE_GROUP,
+ "auto_refresh");
+
+ if (auto_refresh && is_true (auto_refresh)) {
+ if (!nm_connection_compare (NM_CONNECTION (old),
+ NM_CONNECTION
+ (exported),
+ NM_SETTING_COMPARE_FLAG_EXACT))
+ {
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME,
+ "Auto refreshing %s",
+ conn_name);
+ g_signal_emit_by_name (old,
+ NM_SETTINGS_CONNECTION_INTERFACE_REMOVED);
+ g_hash_table_remove
+ (priv->config_connections,
+ conn_name);
+ g_hash_table_insert
+ (priv->config_connections,
+ g_strdup (conn_name), exported);
+ if (is_managed (conn_name))
+ g_signal_emit_by_name (self,
+ NM_SYSTEM_CONFIG_INTERFACE_CONNECTION_ADDED,
+ exported);
+ }
+ } else
+ update_old_connection (conn_name, old,
+ exported, priv);
+ g_signal_emit_by_name (self,
+ NM_SYSTEM_CONFIG_INTERFACE_UNMANAGED_SPECS_CHANGED);
+ } else if (exported) {
+ g_hash_table_insert (priv->config_connections,
+ g_strdup (conn_name), exported);
+ if (is_managed (conn_name))
+ g_signal_emit_by_name (self,
+ NM_SYSTEM_CONFIG_INTERFACE_CONNECTION_ADDED,
+ exported);
+ }
+ g_hash_table_insert (new_conn_names, conn_name, conn_name);
+ }
+ /* remove unused connections */
+ g_hash_table_iter_init (&iter, priv->config_connections);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ if (!g_hash_table_lookup (new_conn_names, key)) {
+ g_signal_emit_by_name (value,
+ NM_SETTINGS_CONNECTION_INTERFACE_REMOVED);
+ g_hash_table_remove (priv->config_connections, key);
+ }
+ }
+ g_hash_table_remove_all (new_conn_names);
+ g_hash_table_destroy (new_conn_names);
+ g_list_free (conn_names);
+}
+
+static gboolean
+add_connection (NMSystemConfigInterface * config,
+ NMConnection * connection, GError ** error)
+{
+ gboolean result;
+
+ result = ifnet_add_new_connection (connection, CONF_NET_FILE,
+ WPA_SUPPLICANT_CONF, error);
+ reload_connections (config);
+ return result;
+}
+
+static void
+check_unmanaged (gpointer key, gpointer data, gpointer user_data)
+{
+ GSList **list = (GSList **) user_data;
+ gchar *conn_name = (gchar *) key;
+ const char *unmanaged_spec;
+ GSList *iter;
+
+ if (is_managed (conn_name))
+ return;
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Checking unmanaged: %s", conn_name);
+ unmanaged_spec = ifnet_get_data (conn_name, "mac");
+ if (!unmanaged_spec)
+ return;
+
+ /* Just return if the unmanaged spec is already in the list */
+ for (iter = *list; iter; iter = g_slist_next (iter)) {
+ if (!strcmp ((char *) iter->data, unmanaged_spec))
+ return;
+ }
+
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Add unmanaged: %s", unmanaged_spec);
+ *list =
+ g_slist_prepend (*list, g_strdup_printf ("mac:%s", unmanaged_spec));
+}
+
+static GSList *
+get_unmanaged_specs (NMSystemConfigInterface * config)
+{
+ SCPluginIfnetPrivate *priv = SC_PLUGIN_IFNET_GET_PRIVATE (config);
+ GSList *list = NULL;
+
+ g_return_val_if_fail (priv->config_connections != NULL, NULL);
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "getting unmanaged specs...");
+ g_hash_table_foreach (priv->config_connections, check_unmanaged, &list);
+ return list;
+}
+
+static void
+SCPluginIfnet_init (NMSystemConfigInterface * config)
+{
+ SCPluginIfnet *self = SC_PLUGIN_IFNET (config);
+ SCPluginIfnetPrivate *priv = SC_PLUGIN_IFNET_GET_PRIVATE (self);
+
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Initializing!");
+ if (!priv->config_connections)
+ priv->config_connections =
+ g_hash_table_new_full (g_str_hash, g_str_equal, g_free,
+ g_object_unref);
+ priv->unmanaged_well_known = !is_managed_plugin ();
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "management mode: %s",
+ priv->unmanaged_well_known ? "unmanaged" : "managed");
+ // GFileMonitor setup
+ setup_monitors (NULL, config);
+ reload_connections (config);
+ /* Now if we're running in managed mode, let NM know there are new connections */
+ if (!priv->unmanaged_well_known) {
+ GHashTableIter iter;
+ gpointer key;
+ gpointer value;
+
+ g_hash_table_iter_init (&iter, priv->config_connections);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ if (is_managed ((gchar *) key))
+ g_signal_emit_by_name
+ (self,
+ NM_SYSTEM_CONFIG_INTERFACE_CONNECTION_ADDED,
+ NM_EXPORTED_CONNECTION (value));
+ }
+ }
+ /* Read hostname */
+ update_system_hostname (self);
+
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Initialzation complete!");
+}
+
+static GSList *
+SCPluginIfnet_get_connections (NMSystemConfigInterface * config)
+{
+ SCPluginIfnetPrivate *priv = SC_PLUGIN_IFNET_GET_PRIVATE (config);
+ GSList *connections = NULL;
+ GHashTableIter iter;
+ gpointer key, value;
+
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "(%d) ... get_connections.",
+ GPOINTER_TO_UINT (config));
+ if (priv->unmanaged_well_known) {
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME,
+ "(%d) ... get_connections (managed=false): return empty list.",
+ GPOINTER_TO_UINT (config));
+ return NULL;
+ }
+
+ g_hash_table_iter_init (&iter, priv->config_connections);
+ while (g_hash_table_iter_next (&iter, &key, &value))
+ if (is_managed ((gchar *) key))
+ connections = g_slist_prepend (connections, value);
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "(%d) connections count: %d",
+ GPOINTER_TO_UINT (config), g_slist_length (connections));
+ return connections;
+}
+
+static void
+system_config_interface_init (NMSystemConfigInterface *
+ system_config_interface_class)
+{
+ system_config_interface_class->init = SCPluginIfnet_init;
+ system_config_interface_class->get_connections =
+ SCPluginIfnet_get_connections;
+ system_config_interface_class->get_unmanaged_specs =
+ get_unmanaged_specs;
+ system_config_interface_class->add_connection = add_connection;
+}
+
+static void
+sc_plugin_ifnet_init (SCPluginIfnet * plugin)
+{
+}
+
+static void
+get_property (GObject * object, guint prop_id, GValue * value,
+ GParamSpec * pspec)
+{
+ NMSystemConfigInterface *self = NM_SYSTEM_CONFIG_INTERFACE (object);
+
+ switch (prop_id) {
+ case NM_SYSTEM_CONFIG_INTERFACE_PROP_NAME:
+ g_value_set_string (value, IFNET_PLUGIN_NAME_PRINT);
+ break;
+ case NM_SYSTEM_CONFIG_INTERFACE_PROP_INFO:
+ g_value_set_string (value, IFNET_PLUGIN_INFO);
+ break;
+ case NM_SYSTEM_CONFIG_INTERFACE_PROP_CAPABILITIES:
+ g_value_set_uint (value,
+ NM_SYSTEM_CONFIG_INTERFACE_CAP_MODIFY_CONNECTIONS
+ |
+ NM_SYSTEM_CONFIG_INTERFACE_CAP_MODIFY_HOSTNAME);
+ break;
+ case NM_SYSTEM_CONFIG_INTERFACE_PROP_HOSTNAME:
+ g_value_set_string (value, get_hostname (self));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+set_property (GObject * object, guint prop_id, const GValue * value,
+ GParamSpec * pspec)
+{
+ switch (prop_id) {
+ case NM_SYSTEM_CONFIG_INTERFACE_PROP_HOSTNAME:{
+ const gchar *hostname = g_value_get_string (value);
+
+ if (hostname && strlen (hostname) < 1)
+ hostname = NULL;
+ write_system_hostname (NM_SYSTEM_CONFIG_INTERFACE
+ (object), hostname);
+ break;
+ }
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+dispose (GObject * object)
+{
+ SCPluginIfnet *plugin = SC_PLUGIN_IFNET (object);
+ SCPluginIfnetPrivate *priv = SC_PLUGIN_IFNET_GET_PRIVATE (plugin);
+
+ cancel_monitors (NULL, object);
+ if (priv->config_connections) {
+ g_hash_table_remove_all (priv->config_connections);
+ g_hash_table_destroy (priv->config_connections);
+ }
+
+ if (priv->hostname)
+ g_free (priv->hostname);
+ ifnet_destroy ();
+ wpa_parser_destroy ();
+ G_OBJECT_CLASS (sc_plugin_ifnet_parent_class)->dispose (object);
+}
+
+static void
+sc_plugin_ifnet_class_init (SCPluginIfnetClass * req_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (req_class);
+
+ g_type_class_add_private (req_class, sizeof (SCPluginIfnetPrivate));
+
+ object_class->dispose = dispose;
+ object_class->get_property = get_property;
+ object_class->set_property = set_property;
+
+ g_object_class_override_property (object_class,
+ NM_SYSTEM_CONFIG_INTERFACE_PROP_NAME,
+ NM_SYSTEM_CONFIG_INTERFACE_NAME);
+
+ g_object_class_override_property (object_class,
+ NM_SYSTEM_CONFIG_INTERFACE_PROP_INFO,
+ NM_SYSTEM_CONFIG_INTERFACE_INFO);
+
+ g_object_class_override_property (object_class,
+ NM_SYSTEM_CONFIG_INTERFACE_PROP_CAPABILITIES,
+ NM_SYSTEM_CONFIG_INTERFACE_CAPABILITIES);
+
+ g_object_class_override_property (object_class,
+ NM_SYSTEM_CONFIG_INTERFACE_PROP_HOSTNAME,
+ NM_SYSTEM_CONFIG_INTERFACE_HOSTNAME);
+}
+
+G_MODULE_EXPORT GObject *
+nm_system_config_factory (void)
+{
+ static SCPluginIfnet *singleton = NULL;
+
+ if (!singleton)
+ singleton
+ =
+ SC_PLUGIN_IFNET (g_object_new (SC_TYPE_PLUGIN_IFNET, NULL));
+ else
+ g_object_ref (singleton);
+ return G_OBJECT (singleton);
+}
diff --git a/system-settings/plugins/ifnet/plugin.h b/system-settings/plugins/ifnet/plugin.h
new file mode 100644
index 0000000000..83099b63a0
--- /dev/null
+++ b/system-settings/plugins/ifnet/plugin.h
@@ -0,0 +1,47 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager system settings service (ifnet)
+ *
+ * Mu Qiao <qiaomuf@gmail.com>
+ *
+ * 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) 1999-2010 Gentoo Foundation, Inc.
+ */
+
+#ifndef _PLUGIN_H_
+#define _PLUGIN_H_
+
+#include <glib-object.h>
+
+#define SC_TYPE_PLUGIN_IFNET (sc_plugin_ifnet_get_type ())
+#define SC_PLUGIN_IFNET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SC_TYPE_PLUGIN_IFNET, SCPluginIfnet))
+#define SC_PLUGIN_IFNET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SC_TYPE_PLUGIN_IFNET, SCPluginIfnetClass))
+#define SC_IS_PLUGIN_IFNET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SC_TYPE_PLUGIN_IFNET))
+#define SC_IS_PLUGIN_IFNET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), SC_TYPE_PLUGIN_IFNET))
+#define SC_PLUGIN_IFNET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SC_TYPE_PLUGIN_IFNET, SCPluginIfnetClass))
+
+typedef struct _SCPluginIfnet SCPluginIfnet;
+typedef struct _SCPluginIfnetClass SCPluginIfnetClass;
+
+struct _SCPluginIfnet {
+ GObject parent;
+};
+
+struct _SCPluginIfnetClass {
+ GObjectClass parent;
+};
+
+GType sc_plugin_ifnet_get_type (void);
+#endif
diff --git a/system-settings/plugins/ifnet/tests/Makefile.am b/system-settings/plugins/ifnet/tests/Makefile.am
new file mode 100644
index 0000000000..ead3f1fc4f
--- /dev/null
+++ b/system-settings/plugins/ifnet/tests/Makefile.am
@@ -0,0 +1,14 @@
+INCLUDES=-I$(top_srcdir)/system-settings/plugins/ifnet\
+ -I$(top_srcdir)/libnm-glib \
+ -I$(top_srcdir)/libnm-util \
+ -I$(top_srcdir)/include \
+ -I$(top_srcdir)/src/system-settings
+TESTS = check_ifnet
+check_PROGRAMS = check_ifnet
+check_ifnet_SOURCES = test_all.c
+check_ifnet_LDFLAGS = -g
+check_ifnet_CPPFLAGS = $(CHECK_CFLAGS) $(GLIB_CFLAGS) -g
+check_ifnet_LDADD = $(top_srcdir)/libnm-util/libnm-util.la\
+ $(top_srcdir)/system-settings/plugins/ifnet/lib-ifnet-io.la\
+ $(CHECK_LIBS)\
+ $(GLIB_LIBS)
diff --git a/system-settings/plugins/ifnet/tests/hostname b/system-settings/plugins/ifnet/tests/hostname
new file mode 100644
index 0000000000..25c761655a
--- /dev/null
+++ b/system-settings/plugins/ifnet/tests/hostname
@@ -0,0 +1,2 @@
+#Generated by NetworkManager
+hostname="gentoo"
diff --git a/system-settings/plugins/ifnet/tests/net b/system-settings/plugins/ifnet/tests/net
new file mode 100644
index 0000000000..e755000238
--- /dev/null
+++ b/system-settings/plugins/ifnet/tests/net
@@ -0,0 +1,147 @@
+# This blank configuration will automatically use DHCP for any net.*
+# scripts in /etc/init.d. To create a more complete configuration,
+# please review /etc/conf.d/net.example and save your configuration
+# in /etc/conf.d/net (this file :]!).
+
+config_eth0=(
+"202.117.16.121 netmask 255.255.255.0 brd 202.117.16.255"
+"192.168.4.121/24"
+"dhcp6"
+)
+routes_eth0=( "default via 202.117.16.1"
+ "192.168.4.0/24 via 192.168.4.1")
+dns_servers_eth0="202.117.0.20 202.117.0.21"
+dns_search_eth0="p12.edu.cn p13.edu.cn"
+
+config_eth1=(
+ "dhcp"
+)
+enable_ipv6_eth1="true"
+routes_eth1=( "default via 202.117.16.1" )
+dns_servers_eth1="202.117.0.20 202.117.0.21"
+config_eth2=(
+"202.117.16.1211 netmask 255.255.255.0 brd 202.117.16.255"
+"192.168.4.121/24"
+"4321:0:1:2:3:4:567:89ab/64"
+)
+routes_eth2=("default via 4321:0:1:2:3:4:567:89ab")
+enable_ipv6_eth2="true"
+config_eth3=("nufjlsjlll")
+managed_eth4=("false")
+routes_eth4=("default via 4321:0:1:2:3:4:567:89ab")
+config_eth5=("dhcp")
+config_eth6=("192.168.4.{1..101}/24")
+
+config_eth7=( "dhcp" )
+auto_eth7="true"
+
+
+config_myxjtu2=("202.117.16.121/24 brd 202.117.16.255")
+routes_myxjtu2=("default via 202.117.16.1")
+dns_servers_myxjtu2="202.117.0.20 202.117.0.21"
+#key_myxjtu2="[1] s:xjtud key [1] enc restricted"
+#key_eth6="[1] aaaa-4444-3d [2] s:xjtudlc key [1] enc open"
+
+
+username_ppp0='user'
+password_ppp0='password'
+
+config_qiaomuf=("dhcp")
+
+config_1xtest=("dhcp")
+
+config_0xab3ace=("dhcp")
+
+modules=( "iproute2" )
+ config_kvm0=( "null" )
+ config_kvm1=( "null" )
+
+ tuntap_kvm0="tap"
+ tuntap_kvm1="tap"
+ tunctl_kvm0="-u user"
+ tunctl_kvm1="-u user"
+
+bridge_br0="eth0 kvm0 kvm1"
+config_br0=( "192.168.1.10/24" )
+ brctl_br0=( "setfd 0")
+ dhcp_eth1="nosendhost nontp -I"
+
+predown() {
+ # The default in the script is to test for NFS root and disallow
+ # downing interfaces in that case. Note that if you specify a
+ # predown() function you will override that logic. Here it is, in
+ # case you still want it...
+ if is_net_fs /; then
+ eerror "root filesystem is network mounted -- can't stop ${IFACE}"
+ return 1
+ fi
+
+ # Remember to return 0 on success
+ return 0
+}
+
+postup() {
+ # This function could be used, for example, to register with a
+ # dynamic DNS service. Another possibility would be to
+ # send/receive mail once the interface is brought up.
+
+ # Here is an example that allows the use of iproute rules
+ # which have been configured using the rules_eth0 variable.
+ #rules_eth0=" \
+ # 'from 24.80.102.112/32 to 192.168.1.0/24 table localnet priority 100' \
+ # 'from 216.113.223.51/32 to 192.168.1.0/24 table localnet priority 100' \
+ #"
+ eval set -- \$rules_${IFVAR}
+ if [ $# != 0 ]; then
+ einfo "Adding IP policy routing rules"
+ eindent
+ # Ensure that the kernel supports policy routing
+ if ! ip rule list | grep -q "^"; then
+ eerror "You need to enable IP Policy Routing (CONFIG_IP_MULTIPLE_TABLES)"
+ eerror "in your kernel to use ip rules"
+ else
+ for x; do
+ ebegin "${x}"
+ ip rule add ${x}
+ eend $?
+ done
+ fi
+ eoutdent
+ # Flush the cache
+ ip route flush cache dev "${IFACE}"
+ fi
+
+}
+
+postdown() {
+ # Enable Wake-On-LAN for every interface except for lo
+ # Probably a good idea to set ifdown="no" in /etc/conf.d/net
+ # as well ;)
+ [ "${IFACE}" != "lo" ] && ethtool -s "${IFACE}" wol g
+
+ Automatically erase any ip rules created in the example postup above
+ if interface_exists "${IFACE}"; then
+ # Remove any rules for this interface
+ local rule
+ ip rule list | grep " iif ${IFACE}[ ]*" | {
+ while read rule; do
+ rule="${rule#*:}"
+ ip rule del ${rule}
+ done
+ }
+ # Flush the route cache
+ ip route flush cache dev "${IFACE}"
+ fi
+
+ # Return 0 always
+ return 0
+}
+
+failup() {
+ # This function is mostly here for completeness... I haven't
+ # thought of anything nifty to do with it yet ;-)
+}
+
+faildown()
+{}
+
diff --git a/system-settings/plugins/ifnet/tests/net.all b/system-settings/plugins/ifnet/tests/net.all
new file mode 100644
index 0000000000..a30a1b95e6
--- /dev/null
+++ b/system-settings/plugins/ifnet/tests/net.all
@@ -0,0 +1,864 @@
+##############################################################################
+# QUICK-START
+#
+# The quickest start is if you want to use DHCP.
+# In that case, everything should work out of the box, no configuration
+# necessary, though the startup script will warn you that you haven't
+# specified anything.
+
+# WARNING :- some examples have a mixture of IPv4 (ie 192.168.0.1) and IPv6
+# (ie 4321:0:1:2:3:4:567:89ab) internet addresses. They only work if you have
+# the relevant kernel option enabled. So if you don't have an IPv6 enabled
+# kernel then remove the IPv6 address from your config.
+
+# If you want to use a static address or use DHCP explicitly, jump
+# down to the section labelled INTERFACE HANDLERS.
+#
+# If you want to do anything more fancy, you should take the time to
+# read through the rest of this file.
+
+##############################################################################
+# MODULES
+#
+# We now support modular networking scripts which means we can easily
+# add support for new interface types and modules while keeping
+# compatability with existing ones.
+#
+# Modules load by default if the package they need is installed. If
+# you specify a module here that doesn't have it's package installed
+# then you get an error stating which package you need to install.
+# Ideally, you only use the modules setting when you have two or more
+# packages installed that supply the same service.
+#
+# In other words, you probably should DO NOTHING HERE...
+
+# Prefer ifconfig over iproute2
+modules=( "ifconfig" )
+
+# You can also specify other modules for an interface
+# In this case we prefer udhcpc over dhcpcd
+modules_eth0=( "udhcpc" )
+
+# You can also specify which modules not to use - for example you may be
+# using a supplicant or linux-wlan-ng to control wireless configuration but
+# you still want to configure network settings per ESSID associated with.
+modules=( "!iwconfig" "!wpa_supplicant" )
+# IMPORTANT: If you need the above, please disable modules in that order
+
+
+##############################################################################
+# INTERFACE HANDLERS
+#
+# We provide two interface handlers presently: ifconfig and iproute2.
+# You need one of these to do any kind of network configuration.
+# For ifconfig support, emerge sys-apps/net-tools
+# For iproute2 support, emerge sys-apps/iproute2
+
+# If you don't specify an interface then we prefer iproute2 if it's installed
+# To prefer ifconfig over iproute2
+modules=( "ifconfig" )
+
+# For a static configuration, use something like this
+# (They all do exactly the same thing btw)
+config_eth0=( "192.168.0.2/24" )
+config_eth0=( "192.168.0.2 netmask 255.255.255.0" )
+
+# We can also specify a broadcast
+config_eth0=( "192.168.0.2/24 brd 192.168.0.255" )
+config_eth0=( "192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255" )
+
+# If you need more than one address, you can use something like this
+# NOTE: ifconfig creates an aliased device for each extra IPv4 address
+# (eth0:1, eth0:2, etc)
+# iproute2 does not do this as there is no need to
+config_eth0=(
+ "192.168.0.2/24"
+ "192.168.0.3/24"
+ "192.168.0.4/24"
+)
+# Or you can use sequence expressions
+config_eth0=( "192.168.0.{2..4}/24" )
+# which does the same as above. Be careful though as if you use this and
+# fallbacks, you have to ensure that both end up with the same number of
+# values otherwise your fallback won't work correctly.
+
+# You can also use IPv6 addresses
+# (you should always specify a prefix length with IPv6 here)
+config_eth0=(
+ "192.168.0.2/24"
+ "4321:0:1:2:3:4:567:89ab/64"
+ "4321:0:1:2:3:4:567:89ac/64"
+)
+
+# If you wish to keep existing addresses + routing and the interface is up,
+# you can specify a noop (no operation). If the interface is down or there
+# are no addresses assigned, then we move onto the next step (default dhcp)
+# This is useful when configuring your interface with a kernel command line
+# or similar
+config_eth0=( "noop" "192.168.0.2/24" )
+
+# If you don't want ANY address (only useful when calling for advanced stuff)
+config_eth0=( "null" )
+
+# Here's how to do routing if you need it
+routes_eth0=(
+ "default via 192.168.0.1" # IPv4 default route
+ "10.0.0.0/8 via 192.168.0.1" # IPv4 subnet route
+ "::/0" # IPv6 unicast
+)
+
+# If a specified module fails (like dhcp - see below), you can specify a
+# fallback like so
+fallback_eth0=( "192.168.0.2 netmask 255.255.255.0" )
+fallback_route_eth0=( "default via 192.168.0.1" )
+
+# NOTE: fallback entry must match the entry location in config_eth0
+# As such you can only have one fallback route.
+
+# Some users may need to alter the MTU - here's how
+mtu_eth0="1500"
+
+# Each module described below can set a default base metric, lower is
+# preferred over higher. This is so we can prefer a wired route over a
+# wireless route automaticaly. You can override this by setting
+metric_eth0="100"
+# or on a global basis
+metric="100"
+# The only downside of the global setting is that you have to ensure that
+# there are no conflicting routes yourself. For users with large routing
+# tables you may have to set a global metric as the due to a simple read of
+# the routing table taking over a minute at a time.
+
+##############################################################################
+# OPTIONAL MODULES
+
+# INTERFACE RENAMING
+# There is no consistent device renaming scheme for Linux.
+# The preferred way of naming devices is via the kernel module directly or
+# by using udev (http://www.reactivated.net/udevrules.php)
+
+# If you are unable to write udev rules, then we do provide a way of renaming
+# the interface based on it's MAC address, but it is not optimal.
+# Here is how to rename an interface whose MAC address is 00:11:22:33:44:55
+# to foo1
+rename_001122334455="foo1"
+
+# You can also do this based on current device name - although this is not
+# recommended. Here we rename eth1 to foo2.
+rename_eth1="foo2"
+
+#-----------------------------------------------------------------------------
+# WIRELESS (802.11 support)
+# Wireless can be provided by iwconfig or wpa_supplicant
+
+# iwconfig
+# emerge net-wireless/wireless-tools
+# Wireless options are held in /etc/conf.d/wireless - but could be here too
+# Consult the sample file /etc/conf.d/wireless.example for instructions
+# iwconfig is the default
+
+# wpa_supplicant
+# emerge net-wireless/wpa-supplicant
+# Wireless options are held in /etc/wpa_supplicant.conf
+# Consult the sample file /etc/wpa_supplicant.conf.example for instructions
+# To choose wpa_supplicant over iwconfig
+modules=( "wpa_supplicant" )
+# To configure wpa_supplicant
+wpa_supplicant_eth0="-Dwext" # For generic wireless
+wpa_supplicant_ath0="-Dmadwifi" # For Atheros based cards
+# Consult wpa_supplicant for more drivers
+# By default don't wait for wpa_suppliant to associate and authenticate.
+# If you would like to, so can specify how long in seconds
+associate_timeout_eth0=60
+# A value of 0 means wait forever.
+
+# GENERIC WIRELESS OPTIONS
+# PLEASE READ THE INSTRUCTIONS IN /etc/conf.d/wireless.example FOR
+# HOW TO USE THIS ESSID VARIABLE
+# You can also override any settings found here per ESSID - which is very
+# handy if you use different networks a lot
+config_ESSID=( "dhcp" )
+dhcpcd_ESSID="-t 5"
+
+# Setting name/domain server causes /etc/resolv.conf to be overwritten
+# Note that if DHCP is used, and you want this to take precedence then
+ set dhcp_ESSID="nodns"
+dns_servers_ESSID=( "192.168.0.1" "192.168.0.2" )
+dns_domain_ESSID="some.domain"
+dns_search_ESSID="search.this.domain search.that.domain"
+# Please check the man page for resolv.conf for more information
+# as domain and search are mutually exclusive.
+
+# You can also override any settings found here per MAC address of the AP
+# in case you use Access Points with the same ESSID but need different
+# networking configs. Below is an example - of course you use the same
+# method with other variables
+mac_config_001122334455=( "dhcp" )
+mac_dhcpcd_001122334455="-t 10"
+mac_dns_servers_001122334455=( "192.168.0.1" "192.168.0.2" )
+
+# When an interface has been associated with an Access Point, a global
+# variable called ESSID is set to the Access Point's ESSID for use in the
+# pre/post user functions below (although it's not available in preup as you
+# won't have associated then)
+
+# If you're using anything else to configure wireless on your interface AND
+# you have installed any of the above packages, you need to disable them
+modules=( "!iwconfig" "!wpa_supplicant" )
+
+#-----------------------------------------------------------------------------
+# DHCP
+# DHCP can be provided by dhclient, dhcpcd, pump or udhcpc.
+#
+# dhclient: emerge net-misc/dhcp
+# dhcpcd: emerge net-misc/dhcpcd
+# pump: emerge net-misc/pump
+# udhcpc: emerge net-misc/udhcp
+
+# If you have more than one DHCP client installed, you need to specify which
+# one to use - otherwise we default to dhcpcd if available.
+modules=( "dhclient" ) # to select dhclient over dhcpcd
+#
+# Notes:
+# - All clients send the current hostname to the DHCP server by default
+# - dhcpcd does not daemonize when the lease time is infinite
+# - udhcp-0.9.3-r3 and earlier do not support getting NTP servers
+# - pump does not support getting NIS servers
+# - DHCP tends to erase any existing device information - so add
+# static addresses after dhcp if you need them
+# - dhclient and udhcpc can set other resolv.conf options such as "option"
+# and "sortlist"- see the System module for more details
+
+# Regardless of which DHCP client you prefer, you configure them the
+# same way using one of following depending on which interface modules
+# you're using.
+config_eth0=( "dhcp" )
+
+# For passing custom options to dhcpcd use something like the following. This
+# example reduces the timeout for retrieving an address from 60 seconds (the
+# default) to 10 seconds.
+dhcpcd_eth0="-t 10"
+
+# dhclient, udhcpc and pump don't have many runtime options
+# You can pass options to them in a similar manner to dhcpcd though
+dhclient_eth0="..."
+udhcpc_eth0="..."
+pump_eth0="..."
+
+# GENERIC DHCP OPTIONS
+# Set generic DHCP options like so
+dhcp_eth0="release nodns nontp nonis nogateway nosendhost"
+
+# This tells the dhcp client to release it's lease when it stops, not to
+# overwrite dns, ntp and nis settings, not to set a default route and not to
+# send the current hostname to the dhcp server and when it starts.
+# You can use any combination of the above options - the default is not to
+# use any of them.
+
+#-----------------------------------------------------------------------------
+# For APIPA support, emerge net-misc/iputils or net-analyzer/arping
+
+# APIPA is a module that tries to find a free address in the range
+# 169.254.0.0-169.254.255.255 by arping a random address in that range on the
+# interface. If no reply is found then we assign that address to the interface
+
+# This is only useful for LANs where there is no DHCP server and you don't
+# connect directly to the internet.
+config_eth0=( "dhcp" )
+fallback_eth0=( "apipa" )
+
+#-----------------------------------------------------------------------------
+# ARPING Gateway configuration
+# and
+# Automatic Private IP Addressing (APIPA)
+# For arpingnet / apipa support, emerge net-misc/iputils or net-analyzer/arping
+#
+# This is a module that tries to find a gateway IP. If it exists then we use
+# that gateways configuration for our own. For the configuration variables
+# simply ensure that each octet is zero padded and the dots are removed.
+# Below is an example.
+#
+gateways_eth0="192.168.0.1 10.0.0.1"
+config_192168000001=( "192.168.0.2/24" )
+routes_192168000001=( "default via 192.168.0.1" )
+dns_servers_192168000001=( "192.168.0.1" )
+config_010000000001=( "10.0.0.254/8" )
+routes_010000000001=( "default via 10.0.0.1" )
+dns_servers_010000000001=( "10.0.0.1" )
+
+# We can also specify a specific MAC address for each gateway if different
+# networks have the same gateway.
+gateways_eth0="192.168.0.1,00:11:22:AA:BB:CC 10.0.0.1,33:44:55:DD:EE:FF"
+config_192168000001_001122AABBCC=( "192.168.0.2/24" )
+routes_192168000001_001122AABBCC=( "default via 192.168.0.1" )
+dns_servers_192168000001_001122AABBCC=( "192.168.0.1" )
+config_010000000001_334455DDEEFF=( "10.0.0.254/8" )
+routes_010000000001_334455DDEEFF=( "default via 10.0.0.1" )
+dns_servers_010000000001_334455DDEEFF=( "10.0.0.1" )
+
+# If we don't find any gateways (or there are none configured) then we try and
+# use APIPA to find a free address in the range 169.254.0.0-169.254.255.255
+# by arping a random address in that range on the interface. If no reply is
+# found then we assign that address to the interface.
+
+# This is only useful for LANs where there is no DHCP server.
+config_eth0=( "arping" )
+
+# or if no DHCP server can be found
+config_eth0=( "dhcp" )
+fallback_eth0=( "arping" )
+
+# NOTE: We default to sleeping for 1 second the first time we attempt an
+# arping to give the interface time to settle on the LAN. This appears to
+# be a good default for most instances, but if not you can alter it here.
+arping_sleep=5
+arping_sleep_lan=7
+
+# NOTE: We default to waiting 3 seconds to get an arping response. You can
+# change the default wait like so.
+arping_wait=3
+arping_wait_lan=2
+
+#-----------------------------------------------------------------------------
+# VLAN (802.1q support)
+# For VLAN support, emerge net-misc/vconfig
+
+# Specify the VLAN numbers for the interface like so
+# Please ensure your VLAN IDs are NOT zero-padded
+vlans_eth0="1 2"
+
+# You may not want to assign an IP the the physical interface, but we still
+# need it up.
+config_eth0=( "null" )
+
+# You can also configure the VLAN - see for vconfig man page for more details
+vconfig_eth0=( "set_name_type VLAN_PLUS_VID_NO_PAD" )
+vconfig_vlan1=( "set_flag 1" "set_egress_map 2 6" )
+config_vlan1=( "172.16.3.1 netmask 255.255.254.0" )
+config_vlan2=( "172.16.2.1 netmask 255.255.254.0" )
+
+# NOTE: Vlans can be configured with a . in their interface names
+# When configuring vlans with this name type, you need to replace . with a _
+config_eth0.1=( "dhcp" ) - does not work
+config_eth0_1=( "dhcp" ) - does work
+
+# NOTE: Vlans are controlled by their physical interface and not per vlan
+# This means you do not need to create init scripts in /etc/init.d for each
+# vlan, you must need to create one for the physical interface.
+# If you wish to control the configuration of each vlan through a separate
+# script, or wish to rename the vlan interface to something that vconfig
+# cannot then you need to do this.
+vlan_start_eth0="no"
+
+# If you do the above then you may want to depend on eth0 like so
+ RC_NEED_vlan1="net.eth0"
+# NOTE: depend functions only work in /etc/conf.d/net
+# and not in profile configs such as /etc/conf.d/net.foo
+
+#-----------------------------------------------------------------------------
+# Bonding
+# For link bonding/trunking emerge net-misc/ifenslave
+
+# To bond interfaces together
+slaves_bond0="eth0 eth1 eth2"
+config_bond0=( "null" ) # You may not want to assign an IP the the bond
+
+# If any of the slaves require extra configuration - for example wireless or
+# ppp devices - we need to depend function on the bonded interfaces
+RC_NEED_bond0="net.eth0 net.eth1"
+
+
+#-----------------------------------------------------------------------------
+# Classical IP over ATM
+# For CLIP support emerge net-dialup/linux-atm
+
+# Ensure that you have /etc/atmsigd.conf setup correctly
+# Now setup each clip interface like so
+clip_atm0=( "peer_ip [if.]vpi.vci [opts]" ... )
+# where "peer_ip" is the IP address of a PVC peer (in case of an ATM connection
+# with your ISP, your only peer is usually the ISP gateway closest to you),
+# "if" is the number of the ATM interface which will carry the PVC, "vpi.vci"
+# is the ATM VC address, and "opts" may optionally specify VC parameters like
+# qos, pcr, and the like (see "atmarp -s" for further reference). Please also
+# note quoting: it is meant to distinguish the VCs you want to create. You may,
+# in example, create an atm0 interface to more peers, like this:
+clip_atm0=( "1.1.1.254 0.8.35" "1.1.1.253 1.8.35" )
+
+# By default, the PVC will use the LLC/SNAP encapsulation. If you rather need a
+# null encapsulation (aka "VC mode"), please add the keyword "null" to opts.
+
+
+#-----------------------------------------------------------------------------
+# PPP
+# For PPP support, emerge net-dialup/ppp
+# PPP is used for most dialup connections, including ADSL.
+# The older ADSL module is documented below, but you are encouraged to try
+# this module first.
+#
+# You need to create the PPP net script yourself. Make it like so
+#ln -s net.lo /etc/init.d/net.ppp0
+#
+# We have to instruct ppp0 to actually use ppp
+config_ppp0=( "ppp" )
+#
+# Each PPP interface requires an interface to use as a "Link"
+link_ppp0="/dev/ttyS0" # Most PPP links will use a serial port
+link_ppp0="eth0" # PPPoE requires an ethernet interface
+link_ppp0="[itf.]vpi.vci" # PPPoA requires the ATM VC's address
+link_ppp0="/dev/null" # ISDN links should have this
+link_ppp0="pty 'your_link_command'" # PPP links over ssh, rsh, etc
+#
+# Here you should specify what pppd plugins you want to use
+# Available plugins are: pppoe, pppoa, capi, dhcpc, minconn, radius,
+# radattr, radrealms and winbind
+plugins_ppp0=(
+ "pppoe" # Required plugin for PPPoE
+ "pppoa vc-encaps" # Required plugin for PPPoA with an option
+ "capi" # Required plugin for ISDN
+)
+#
+# PPP requires at least a username. You can optionally set a password here too
+# If you don't, then it will use the password specified in /etc/ppp/*-secrets
+# against the specified username
+username_ppp0='user'
+password_ppp0='password'
+# NOTE: You can set a blank password like so
+password_ppp0=
+#
+# The PPP daemon has many options you can specify - although there are many
+# and may seem daunting, it is recommended that you read the pppd man page
+# before enabling any of them
+pppd_ppp0=(
+ "maxfail 0" # WARNING: It's not recommended you use this
+ # if you don't specify maxfail then we assume 0
+ "updetach" # If not set, "/etc/init.d/net.ppp0 start" will return
+ # immediately, without waiting the link to come up
+ # for the first time.
+ # Do not use it for dial-on-demand links!
+ "debug" # Enables syslog debugging
+ "noauth" # Do not require the peer to authenticate itself
+ "defaultroute" # Make this PPP interface the default route
+ "usepeerdns" # Use the DNS settings provided by PPP
+
+# On demand options
+ "demand" # Enable dial on demand
+ "idle 30" # Link goes down after 30 seconds of inactivity
+ "10.112.112.112:10.112.112.113" # Phony IP addresses
+ "ipcp-accept-remote" # Accept the peers idea of remote address
+ "ipcp-accept-local" # Accept the peers idea of local address
+ "holdoff 3" # Wait 3 seconds after link dies before re-starting
+
+# Dead peer detection
+ "lcp-echo-interval 15" # Send a LCP echo every 15 seconds
+ "lcp-echo-failure 3" # Make peer dead after 3 consective
+ # echo-requests
+
+# Compression options - use these to completely disable compression
+# noaccomp noccp nobsdcomp nodeflate nopcomp novj novjccomp
+
+# Dial-up settings
+ "lock" # Lock serial port
+ "115200" # Set the serial port baud rate
+ "modem crtscts" # Enable hardware flow control
+ "192.168.0.1:192.168.0.2" # Local and remote IP addresses
+)
+#
+# Dial-up PPP users need to specify at least one telephone number
+phone_number_ppp0=( "12345689" ) # Maximum 2 phone numbers are supported
+# They will also need a chat script - here's a good one
+chat_ppp0=(
+# 'ABORT' 'BUSY'
+# 'ABORT' 'ERROR'
+# 'ABORT' 'NO ANSWER'
+# 'ABORT' 'NO CARRIER'
+# 'ABORT' 'NO DIALTONE'
+# 'ABORT' 'Invalid Login'
+# 'ABORT' 'Login incorrect'
+# 'TIMEOUT' '5'
+# '' 'ATZ'
+# 'OK' 'AT' # Put your modem initialization string here
+# 'OK' 'ATDT\T'
+# 'TIMEOUT' '60'
+# 'CONNECT' ''
+# 'TIMEOUT' '5'
+# '~--' ''
+)
+
+# If the link require extra configuration - for example wireless or
+# RFC 268 bridge - we need to depend on the bridge so they get
+# configured correctly.
+RC_NEED_ppp0="net.nas0"
+
+#WARNING: if MTU of the PPP interface is less than 1500 and you use this
+#machine as a router, you should add the following rule to your firewall
+#
+#iptables -I FORWARD 1 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
+
+#-----------------------------------------------------------------------------
+# ADSL
+# For ADSL support, emerge net-dialup/rp-pppoe
+# WARNING: This ADSL module is being deprecated in favour of the PPP module
+# above.
+# You should make the following settings and also put your
+# username/password information in /etc/ppp/pap-secrets
+
+# Configure the interface to use ADSL
+config_eth0=( "adsl" )
+
+# You probably won't need to edit /etc/ppp/pppoe.conf if you set this
+adsl_user_eth0="my-adsl-username"
+
+#-----------------------------------------------------------------------------
+# ISDN
+# For ISDN support, emerge net-dialup/isdn4k-utils
+# You should make the following settings and also put your
+# username/password information in /etc/ppp/pap-secrets
+
+# Configure the interface to use ISDN
+config_ippp0=( "dhcp" )
+# It's important to specify dhcp if you need it!
+config_ippp0=( "192.168.0.1/24" )
+# Otherwise, you can use a static IP
+
+# NOTE: The interface name must be either ippp or isdn followed by a number
+
+# You may need this option to set the default route
+ipppd_eth0="defaultroute"
+
+#-----------------------------------------------------------------------------
+# MAC changer
+# To set a specific MAC address
+mac_eth0="00:11:22:33:44:55"
+
+# For changing MAC addresses using the below, emerge net-analyzer/macchanger
+# - to randomize the last 3 bytes only
+mac_eth0="random-ending"
+# - to randomize between the same physical type of connection (e.g. fibre,
+# copper, wireless) , all vendors
+mac_eth0="random-samekind"
+# - to randomize between any physical type of connection (e.g. fibre, copper,
+# wireless) , all vendors
+mac_eth0="random-anykind"
+# - full randomization - WARNING: some MAC addresses generated by this may NOT
+# act as expected
+mac_eth0="random-full"
+# custom - passes all parameters directly to net-analyzer/macchanger
+mac_eth0="some custom set of parameters"
+
+# You can also set other options based on the MAC address of your network card
+# Handy if you use different docking stations with laptops
+config_001122334455=( "dhcp" )
+
+#-----------------------------------------------------------------------------
+# TUN/TAP
+# For TUN/TAP support emerge net-misc/openvpn or sys-apps/usermode-utilities
+#
+# You must specify if we're a tun or tap device. Then you can give it any
+# name you like - such as vpn
+tuntap_vpn="tun"
+config_vpn=( "192.168.0.1/24")
+
+# Or stick wit the generic names - like tap0
+tuntap_tap0="tap"
+config_tap0=( "192.168.0.1/24")
+
+# For passing custom options to tunctl use something like the following. This
+# example sets the owner to adm
+tunctl_tun1="-u adm"
+# When using openvpn, there are no options
+
+#-----------------------------------------------------------------------------
+# Bridging (802.1d)
+# For bridging support emerge net-misc/bridge-utils
+
+# To add ports to bridge br0
+bridge_br0="eth0 eth1"
+# or dynamically add them when the interface comes up
+bridge_add_eth0="br0"
+bridge_add_eth1="br0"
+
+# You need to configure the ports to null values so dhcp does not get started
+config_eth0=( "null" )
+config_eth1=( "null" )
+
+# Finally give the bridge an address - dhcp or a static IP
+config_br0=( "dhcp" ) # may not work when adding ports dynamically
+config_br0=( "192.168.0.1/24" )
+
+# If any of the ports require extra configuration - for example wireless or
+# ppp devices - we need to depend on them like so.
+RC_NEED_br0="net.eth0 net.eth1"
+
+# Below is an example of configuring the bridge
+# Consult "man brctl" for more details
+brctl_br0=( "setfd 0" "sethello 0" "stp off" )
+
+#-----------------------------------------------------------------------------
+# RFC 2684 Bridge Support
+# For RFC 2684 bridge support emerge net-misc/br2684ctl
+
+# Interface names have to be of the form nas0, nas1, nas2, etc.
+# You have to specify a VPI and VCI for the interface like so
+br2684ctl_nas0="-a 0.38" # UK VPI and VCI
+
+# You may want to configure the encapsulation method as well by adding the -e
+# option to the command above (may need to be before the -a command)
+# -e 0 # LLC (default)
+# -e 1 # VC mux
+
+# Then you can configure the interface as normal
+config_nas0=( "192.168.0.1/24" )
+
+#-----------------------------------------------------------------------------
+# Tunnelling
+# WARNING: For tunnelling it is highly recommended that you
+# emerge sys-apps/iproute2
+#
+# For GRE tunnels
+iptunnel_vpn0="mode gre remote 207.170.82.1 key 0xffffffff ttl 255"
+
+# For IPIP tunnels
+iptunnel_vpn0="mode ipip remote 207.170.82.2 ttl 255"
+
+# To configure the interface
+config_vpn0=( "192.168.0.2 pointopoint 192.168.1.2" ) # ifconfig style
+config_vpn0=( "192.168.0.2 peer 192.168.1.1" ) # iproute2 style
+
+# 6to4 Tunnels allow IPv6 to work over IPv4 addresses, provided you
+# have a non-private address configured on an interface.
+ link_6to4="eth0" # Interface to base it's addresses on
+ config_6to4=( "ip6to4" )
+# You may want to depend on eth0 like so
+RC_NEED_6to4="net.eth0"
+# To ensure that eth0 is configured before 6to4. Of course, the tunnel could be
+# any name and this also works for any configured interface.
+# NOTE: If you're not using iproute2 then your 6to4 tunnel has to be called
+# sit0 - otherwise use a different name like 6to4 in the example above.
+
+
+#-----------------------------------------------------------------------------
+# System
+# For configuring system specifics such as domain, dns, ntp and nis servers
+# It's rare that you would need todo this, but you can anyway.
+# This is most benefit to wireless users who don't use DHCP so they can change
+# their configs based on ESSID. See wireless.example for more details
+
+# To use dns settings such as these, dns_servers_eth0 must be set!
+# If you omit the _eth0 suffix, then it applies to all interfaces unless
+# overridden by the interface suffix.
+dns_domain_eth0="your.domain"
+dns_servers_eth0="192.168.0.2 192.168.0.3"
+dns_search_eth0="this.domain that.domain"
+dns_options_eth0=( "timeout 1" "rotate" )
+dns_sortlist_eth0="130.155.160.0/255.255.240.0 130.155.0.0"
+# See the man page for resolv.conf for details about the options and sortlist
+# directives
+
+ntp_servers_eth0="192.168.0.2 192.168.0.3"
+
+nis_domain_eth0="domain"
+nis_servers_eth0="192.168.0.2 192.168.0.3"
+
+# NOTE: Setting any of these will stamp on the files in question. So if you
+# don't specify dns_servers but you do specify dns_domain then no nameservers
+# will be listed in /etc/resolv.conf even if there were any there to start
+# with.
+# If this is an issue for you then maybe you should look into a resolv.conf
+# manager like resolvconf-gentoo to manage this file for you. All packages
+# that baselayout supports use resolvconf-gentoo if installed.
+
+#-----------------------------------------------------------------------------
+# Cable in/out detection
+# Sometimes the cable is in, others it's out. Obviously you don't want to
+# restart net.eth0 every time when you plug it in either.
+#
+# netplug is a package that detects this and requires no extra configuration
+# on your part.
+# emerge sys-apps/netplug
+# or
+# emerge sys-apps/ifplugd
+# and you're done :)
+
+# By default we don't wait for netplug/ifplugd to configure the interface.
+# If you would like it to wait so that other services now that network is up
+# then you can specify a timeout here.
+plug_timeout="10"
+# A value of 0 means wait forever.
+
+# If you don't want to use netplug on a specific interface but you have it
+# installed, you can disable it for that interface via the modules statement
+modules_eth0=( "!netplug" )
+# You can do the same for ifplugd
+#
+# You can disable them both with the generic plug
+modules_eth0=( "!plug" )
+
+# To use specific ifplugd options, fex specifying wireless mode
+ifplugd_eth0="--api-mode=wlan"
+# man ifplugd for more options
+
+##############################################################################
+# ADVANCED CONFIGURATION
+#
+# Four functions can be defined which will be called surrounding the
+# start/stop operations. The functions are called with the interface
+# name first so that one function can control multiple adapters. An extra two
+# functions can be defined when an interface fails to start or stop.
+#
+# The return values for the preup and predown functions should be 0
+# (success) to indicate that configuration or deconfiguration of the
+# interface can continue. If preup returns a non-zero value, then
+# interface configuration will be aborted. If predown returns a
+# non-zero value, then the interface will not be allowed to continue
+# deconfiguration.
+#
+# The return values for the postup, postdown, failup and faildown functions are
+# ignored since there's nothing to do if they indicate failure.
+#
+# ${IFACE} is set to the interface being brought up/down
+# ${IFVAR} is ${IFACE} converted to variable name bash allows
+
+#preup() {
+# # Test for link on the interface prior to bringing it up. This
+# # only works on some network adapters and requires the mii-diag
+# # package to be installed.
+# if mii-tool "${IFACE}" 2> /dev/null | grep -q 'no link'; then
+# ewarn "No link on ${IFACE}, aborting configuration"
+# return 1
+# fi
+#
+# # Test for link on the interface prior to bringing it up. This
+# # only works on some network adapters and requires the ethtool
+# # package to be installed.
+# if ethtool "${IFACE}" | grep -q 'Link detected: no'; then
+# ewarn "No link on ${IFACE}, aborting configuration"
+# return 1
+# fi
+#
+#
+# # Remember to return 0 on success
+# return 0
+#}
+
+#predown() {
+# # The default in the script is to test for NFS root and disallow
+# # downing interfaces in that case. Note that if you specify a
+# # predown() function you will override that logic. Here it is, in
+# # case you still want it...
+# if is_net_fs /; then
+# eerror "root filesystem is network mounted -- can't stop ${IFACE}"
+# return 1
+# fi
+#
+# # Remember to return 0 on success
+# return 0
+#}
+
+#postup() {
+# # This function could be used, for example, to register with a
+# # dynamic DNS service. Another possibility would be to
+# # send/receive mail once the interface is brought up.
+
+# # Here is an example that allows the use of iproute rules
+# # which have been configured using the rules_eth0 variable.
+# #rules_eth0=(
+# # "from 24.80.102.112/32 to 192.168.1.0/24 table localnet priority 100"
+# # "from 216.113.223.51/32 to 192.168.1.0/24 table localnet priority 100"
+# #)
+# local x="rules_${IFVAR}[@]"
+# local -a rules=( "${!x}" )
+# if [[ -n ${rules} ]] ; then
+# einfo "Adding IP policy routing rules"
+# eindent
+# # Ensure that the kernel supports policy routing
+# if ! ip rule list | grep -q "^" ; then
+# eerror "You need to enable IP Policy Routing (CONFIG_IP_MULTIPLE_TABLES)"
+# eerror "in your kernel to use ip rules"
+# else
+# for x in "${rules[@]}" ; do
+# ebegin "${x}"
+# ip rule add ${x} dev "${IFACE}"
+# eend $?
+# done
+# fi
+# eoutdent
+# # Flush the cache
+# ip route flush cache dev "${IFACE}"
+# fi
+
+#}
+
+#postdown() {
+# # Enable Wake-On-LAN for every interface except for lo
+# # Probably a good idea to set RC_DOWN_INTERFACE="no" in /etc/conf.d/rc
+# # as well ;)
+# [[ ${IFACE} != "lo" ]] && ethtool -s "${IFACE}" wol g
+
+# Automatically erase any ip rules created in the example postup above
+# if interface_exists "${IFACE}" ; then
+# # Remove any rules for this interface
+# local rule
+# ip rule list | grep " iif ${IFACE}[ ]*" | {
+# while read rule ; do
+# rule="${rule#*:}"
+# ip rule del ${rule}
+# done
+# }
+# # Flush the route cache
+# ip route flush cache dev "${IFACE}"
+# fi
+
+# # Return 0 always
+# return 0
+#}
+
+#failup() {
+# # This function is mostly here for completeness... I haven't
+# # thought of anything nifty to do with it yet ;-)
+#}
+
+#faildown() {
+# # This function is mostly here for completeness... I haven't
+# # thought of anything nifty to do with it yet ;-)
+#}
+
+##############################################################################
+# FORCING MODULES
+# The Big Fat Warning :- If you use module forcing do not complain to us or
+# file bugs about it not working!
+#
+# Loading modules is a slow affair - we have to check each one for the following
+# 1) Code sanity
+# 2) Has the required package been emerged?
+# 3) Has it modified anything?
+# 4) Have all the dependant modules been loaded?
+
+# Then we have to strip out the conflicting modules based on user preference
+# and default configuration and sort them into the correct order.
+# Finally we check the end result for dependencies.
+
+# This, of course, takes valuable CPU time so we provide module forcing as a
+# means to speed things up. We still do *some* checking but not much.
+
+# It is essential that you force modules in the correct order and supply all
+# the modules you need. You must always supply an interface module - we
+# supply ifconfig or iproute2.
+
+# The Big Fat Warning :- If you use module forcing do not complain to us or
+# file bugs about it not working!
+
+# Now that we've warned you twice, here's how to do it
+modules_force=( "ifconfig" )
+modules_force=( "iproute2" "dhcpcd" )
+
+# We can also apply this to a specific interface
+modules_force_eth1=( "iproute2" )
+
+# The below will not work
+modules_force=( "dhcpcd" )
+# No interface (ifconfig/iproute2)
+modules_force=( "ifconfig" "essidnet" "iwconfig" )
+# Although it will not crash, essidnet will not work as it has to come after
+# iwconfig
+modules_force=( "iproute2" "ifconfig" )
+# The interface will be setup twice which will cause problems
diff --git a/system-settings/plugins/ifnet/tests/nm-system-settings.conf b/system-settings/plugins/ifnet/tests/nm-system-settings.conf
new file mode 100644
index 0000000000..39bc87b8be
--- /dev/null
+++ b/system-settings/plugins/ifnet/tests/nm-system-settings.conf
@@ -0,0 +1,5 @@
+[main]
+plugins=ifnet,keyfile
+
+[ifnet]
+managed=false
diff --git a/system-settings/plugins/ifnet/tests/test_all.c b/system-settings/plugins/ifnet/tests/test_all.c
new file mode 100644
index 0000000000..ba98397616
--- /dev/null
+++ b/system-settings/plugins/ifnet/tests/test_all.c
@@ -0,0 +1,379 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager system settings service (ifnet)
+ *
+ * Mu Qiao <qiaomuf@gmail.com>
+ *
+ * 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) 1999-2010 Gentoo Foundation, Inc.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <glib.h>
+#include <arpa/inet.h>
+#include <stdlib.h>
+#include <nm-utils.h>
+
+#include "net_parser.h"
+#include "nm-test-helpers.h"
+#include "net_utils.h"
+#include "wpa_parser.h"
+#include "connection_parser.h"
+
+static void
+test_getdata ()
+{
+ ASSERT (ifnet_get_data ("eth1", "config")
+ && strcmp (ifnet_get_data ("eth1", "config"), "dhcp") == 0,
+ "get data", "config_eth1 is not correct");
+ ASSERT (ifnet_get_data ("ppp0", "username")
+ && strcmp (ifnet_get_data ("ppp0", "username"), "user") == 0,
+ "get data", "config_ppp0 username is not correctly read");
+ ASSERT (ifnet_get_data ("ppp0", "password")
+ && strcmp (ifnet_get_data ("ppp0", "password"),
+ "password") == 0, "get data",
+ "config_ppp0 password is not correctly read");
+}
+
+static void
+test_read_hostname ()
+{
+ gchar *hostname = read_hostname ("hostname");
+
+ ASSERT (hostname != NULL, "get hostname", "hostname is NULL");
+ ASSERT (strcmp ("gentoo", hostname) == 0,
+ "get hostname",
+ "hostname is not correctly read, read:%s, expected: gentoo",
+ hostname);
+}
+
+static void
+test_write_hostname ()
+{
+ gchar *hostname = read_hostname ("hostname");
+
+ write_hostname ("gentoo-nm", "hostname");
+ ASSERT (strcmp (read_hostname ("hostname"), "gentoo-nm") == 0,
+ "write hostname", "write hostname error");
+ write_hostname (hostname, "hostname");
+}
+
+static void
+test_is_static ()
+{
+ ASSERT (is_static_ip4 ("eth1") == FALSE, "is static",
+ "a dhcp interface is recognized as static");
+ ASSERT (is_static_ip4 ("eth0") == TRUE, "is static",
+ "a static interface is recognized as dhcp");
+ ASSERT (!is_static_ip6 ("eth0") == TRUE, "is static",
+ "a static interface is recognized as dhcp");
+}
+
+static void
+test_has_default_route ()
+{
+ ASSERT (has_default_ip4_route ("eth0"), "has default route",
+ "eth0 should have a default ipv4 route");
+ ASSERT (has_default_ip6_route ("eth4"), "has default route",
+ "eth4 should have a default ipv6 route");
+
+ ASSERT (!has_default_ip4_route ("eth5")
+ && !has_default_ip6_route ("eth5"), "has default route",
+ "eth5 shouldn't have a default route");
+}
+
+static void
+test_has_ip6_address ()
+{
+ ASSERT (has_ip6_address ("eth2"), "has ip6 address",
+ "eth2 should have a ipv6 address");
+ ASSERT (!has_ip6_address ("eth0"), "has ip6 address",
+ "eth0 shouldn't have a ipv6 address")
+
+}
+
+static void
+test_is_ip4_address ()
+{
+ gchar *address1 = "192.168.4.232/24";
+ gchar *address2 = "192.168.100.{1..254}/24";
+ gchar *address3 = "192.168.4.2555/24";
+
+ ASSERT (is_ip4_address (address1), "is ip4 address",
+ "%s should be a valid address", address1);
+ ASSERT (is_ip4_address (address2), "is ip4 address",
+ "%s should be a valid address", address2);
+ ASSERT (!is_ip4_address (address3), "is ip4 address",
+ "%s should be an invalid address", address3);
+}
+
+static void
+test_is_ip6_address ()
+{
+ gchar *address1 = "4321:0:1:2:3:4:567:89ac/24";
+
+ ASSERT (is_ip6_address (address1), "is ip6 address",
+ "%s should be a valid address", address1);
+}
+
+static void
+check_ip_block (ip_block * iblock, gchar * ip, gchar * netmask, gchar * gateway)
+{
+ char *str;
+ struct in_addr tmp_ip4_addr;
+
+ str = malloc (INET_ADDRSTRLEN);
+ tmp_ip4_addr.s_addr = iblock->ip;
+ inet_ntop (AF_INET, &tmp_ip4_addr, str, INET_ADDRSTRLEN);
+ ASSERT (strcmp (ip, str) == 0, "check ip", "ip expected:%s, find:%s",
+ ip, str);
+ tmp_ip4_addr.s_addr = iblock->netmask;
+ inet_ntop (AF_INET, &tmp_ip4_addr, str, INET_ADDRSTRLEN);
+ ASSERT (strcmp (netmask, str) == 0, "check netmask",
+ "netmask expected:%s, find:%s", netmask, str);
+ tmp_ip4_addr.s_addr = iblock->gateway;
+ inet_ntop (AF_INET, &tmp_ip4_addr, str, INET_ADDRSTRLEN);
+ ASSERT (strcmp (gateway, str) == 0, "check gateway",
+ "gateway expected:%s, find:%s", gateway, str);
+ free (str);
+}
+
+static void
+test_convert_ipv4_config_block ()
+{
+ ip_block *iblock = convert_ip4_config_block ("eth0");
+ ip_block *tmp = iblock;
+
+ ASSERT (iblock != NULL, "convert ipv4 block",
+ "block eth0 should not be NULL");
+ check_ip_block (iblock, "202.117.16.121", "255.255.255.0",
+ "202.117.16.1");
+ iblock = iblock->next;
+ destroy_ip_block (tmp);
+ ASSERT (iblock != NULL, "convert ipv4 block",
+ "block eth0 should have a second IP address");
+ check_ip_block (iblock, "192.168.4.121", "255.255.255.0",
+ "202.117.16.1");
+ destroy_ip_block (iblock);
+ iblock = convert_ip4_config_block ("eth2");
+ ASSERT (iblock != NULL
+ && iblock->next == NULL, "convert error IPv4 address",
+ "should only get one address");
+ check_ip_block (iblock, "192.168.4.121", "255.255.255.0", "0.0.0.0");
+ destroy_ip_block (iblock);
+ iblock = convert_ip4_config_block ("eth3");
+ ASSERT (iblock == NULL, "convert config_block",
+ "convert error configuration");
+ destroy_ip_block (iblock);
+ iblock = convert_ip4_config_block ("eth6");
+ ASSERT (iblock != NULL, "convert config_block",
+ "convert error configuration");
+ destroy_ip_block (iblock);
+
+}
+
+static void
+test_convert_ipv4_routes_block ()
+{
+ ip_block *iblock = convert_ip4_routes_block ("eth0");
+ ip_block *tmp = iblock;
+
+ ASSERT (iblock != NULL, "convert ip4 routes", "should get one route");
+ check_ip_block (iblock, "192.168.4.0", "255.255.255.0", "192.168.4.1");
+ iblock = iblock->next;
+ destroy_ip_block (tmp);
+ ASSERT (iblock == NULL, "convert ip4 routes",
+ "should only get one route");
+}
+
+static void
+test_wpa_parser ()
+{
+ gchar *value;
+
+ ASSERT (exist_ssid ("example"), "get wsec",
+ "ssid myxjtu2 is not found");
+ ASSERT (exist_ssid ("static-wep-test"), "exist_ssid",
+ "ssid static-wep-test is not found");
+ value = wpa_get_value ("static-wep-test", "key_mgmt");
+ ASSERT (value && strcmp (value, "NONE") == 0, "get wpa data",
+ "key_mgmt of static-wep-test should be NONE, find %s", value);
+ value = wpa_get_value ("static-wep-test", "wep_key0");
+ ASSERT (value && strcmp (value, "\"abcde\"") == 0, "get wpa data",
+ "wep_key0 of static-wep-test should be abcde, find %s", value);
+ ASSERT (exist_ssid ("leap-example"), "get wsec",
+ "ssid leap-example is not found");
+}
+
+static void
+test_strip_string ()
+{
+ gchar *str = "( \"default via 202.117.16.1\" )";
+ gchar *result = g_strdup (str);
+ gchar *result_b = result;
+
+ result = strip_string (result, '(');
+ result = strip_string (result, ')');
+ result = strip_string (result, '"');
+ ASSERT (strcmp (result, "default via 202.117.16.1") == 0,
+ "strip_string", "string isn't stripped, result is: %s", result);
+ g_free (result_b);
+}
+
+static void
+test_is_unmanaged ()
+{
+ ASSERT (is_managed ("eth0"), "test_is_unmanaged",
+ "eth0 should be managed");
+ ASSERT (!is_managed ("eth4"), "test_is_unmanaged",
+ "eth4 should be unmanaged");
+}
+
+static void
+test_new_connection ()
+{
+ GError **error = NULL;
+ NMConnection *connection;
+
+ connection = ifnet_update_connection_from_config_block ("eth2", error);
+ ASSERT (connection != NULL, "new connection",
+ "new connection failed: %s",
+ error == NULL ? "None" : (*error)->message);
+ g_object_unref (connection);
+ connection =
+ ifnet_update_connection_from_config_block ("qiaomuf", error);
+ ASSERT (connection != NULL, "new connection",
+ "new connection failed: %s", error
+ && (*error) ? (*error)->message : "NONE");
+ g_object_unref (connection);
+ connection =
+ ifnet_update_connection_from_config_block ("myxjtu2", error);
+ ASSERT (connection != NULL, "new connection",
+ "new connection failed: %s", error
+ && (*error) ? (*error)->message : "NONE");
+ g_object_unref (connection);
+
+}
+
+static void
+test_update_connection ()
+{
+ GError **error = NULL;
+ NMConnection *connection;
+
+ connection = ifnet_update_connection_from_config_block ("eth0", error);
+ ASSERT (connection != NULL, "get connection",
+ "get connection failed: %s",
+ error == NULL ? "None" : (*error)->message);
+ ASSERT (ifnet_update_parsers_by_connection
+ (connection, "eth0", NULL, "net.generate",
+ "wpa_supplicant.conf.generate", error), "update connection",
+ "update connection failed %s", "eth0");
+ connection =
+ ifnet_update_connection_from_config_block ("0xab3ace", error);
+ ASSERT (connection != NULL, "get connection",
+ "get connection failed: %s",
+ error == NULL ? "None" : (*error)->message);
+ ASSERT (ifnet_update_parsers_by_connection
+ (connection, "0xab3ace", NULL, "net.generate",
+ "wpa_supplicant.conf.generate", error), "update connection",
+ "update connection failed %s", "0xab3ace");
+}
+
+static void
+test_add_connection ()
+{
+ GError **error = NULL;
+ NMConnection *connection;
+
+ connection = ifnet_update_connection_from_config_block ("eth0", error);
+ ASSERT (ifnet_add_new_connection
+ (connection, "net.generate", "wpa_supplicant.conf.generate",
+ error), "add connection", "add connection failed: %s", "eth0");
+ connection =
+ ifnet_update_connection_from_config_block ("myxjtu2", error);
+ ASSERT (ifnet_add_new_connection
+ (connection, "net.generate", "wpa_supplicant.conf.generate",
+ error), "add connection", "add connection failed: %s",
+ "myxjtu2");
+}
+
+static void
+test_delete_connection ()
+{
+ GError **error = NULL;
+ NMConnection *connection;
+
+ connection = ifnet_update_connection_from_config_block ("eth7", error);
+ ASSERT (connection != NULL, "get connection",
+ "get connection failed: %s",
+ error == NULL ? "None" : (*error)->message);
+ ASSERT (ifnet_delete_connection_in_parsers
+ ("eth7", "net.generate", "wpa_supplicant.conf.generate"),
+ "delete connection", "delete connection failed: %s", "eth7");
+ connection =
+ ifnet_update_connection_from_config_block ("qiaomuf", error);
+ ASSERT (connection != NULL, "get connection",
+ "get connection failed: %s",
+ error == NULL ? "None" : (*error)->message);
+ ASSERT (ifnet_delete_connection_in_parsers
+ ("qiaomuf", "net.generate", "wpa_supplicant.conf.generate"),
+ "delete connection", "delete connection failed: %s", "qiaomuf");
+}
+
+static void
+run_all (gboolean run)
+{
+ if (run) {
+ test_strip_string ();
+ test_is_static ();
+ test_has_ip6_address ();
+ test_has_default_route ();
+ test_getdata ();
+ test_read_hostname ();
+ test_write_hostname ();
+ test_is_ip4_address ();
+ test_is_ip6_address ();
+ test_convert_ipv4_config_block ();
+ test_convert_ipv4_routes_block ();
+ test_is_unmanaged ();
+ test_wpa_parser ();
+ test_convert_ipv4_routes_block ();
+ test_new_connection ();
+ test_update_connection ();
+ test_add_connection ();
+ test_delete_connection ();
+ }
+}
+
+int
+main (void)
+{
+// g_mem_set_vtable(glib_mem_profiler_table);
+// g_atexit(g_mem_profile);
+ g_type_init ();
+ ifnet_destroy ();
+ wpa_parser_destroy ();
+ ifnet_init ("net");
+ wpa_parser_init ("wpa_supplicant.conf");
+ printf("Initialization complete\n");
+
+ run_all (TRUE);
+
+ ifnet_destroy ();
+ wpa_parser_destroy ();
+ return 0;
+}
diff --git a/system-settings/plugins/ifnet/tests/wpa_supplicant.conf b/system-settings/plugins/ifnet/tests/wpa_supplicant.conf
new file mode 100644
index 0000000000..7763d2155f
--- /dev/null
+++ b/system-settings/plugins/ifnet/tests/wpa_supplicant.conf
@@ -0,0 +1,876 @@
+##### Example wpa_supplicant configuration file ###############################
+#
+# This file describes configuration file format and lists all available option.
+# Please also take a look at simpler configuration examples in 'examples'
+# subdirectory.
+#
+# Empty lines and lines starting with # are ignored
+
+# NOTE! This file may contain password information and should probably be made
+# readable only by root user on multiuser systems.
+
+# Note: All file paths in this configuration file should use full (absolute,
+# not relative to working directory) path in order to allow working directory
+# to be changed. This can happen if wpa_supplicant is run in the background.
+
+# Whether to allow wpa_supplicant to update (overwrite) configuration
+#
+# This option can be used to allow wpa_supplicant to overwrite configuration
+# file whenever configuration is changed (e.g., new network block is added with
+# wpa_cli or wpa_gui, or a password is changed). This is required for
+# wpa_cli/wpa_gui to be able to store the configuration changes permanently.
+# Please note that overwriting configuration file will remove the comments from
+# it.
+#update_config=1
+
+# global configuration (shared by all network blocks)
+#
+# Parameters for the control interface. If this is specified, wpa_supplicant
+# will open a control interface that is available for external programs to
+# manage wpa_supplicant. The meaning of this string depends on which control
+# interface mechanism is used. For all cases, the existance of this parameter
+# in configuration is used to determine whether the control interface is
+# enabled.
+#
+# For UNIX domain sockets (default on Linux and BSD): This is a directory that
+# will be created for UNIX domain sockets for listening to requests from
+# external programs (CLI/GUI, etc.) for status information and configuration.
+# The socket file will be named based on the interface name, so multiple
+# wpa_supplicant processes can be run at the same time if more than one
+# interface is used.
+# /var/run/wpa_supplicant is the recommended directory for sockets and by
+# default, wpa_cli will use it when trying to connect with wpa_supplicant.
+#
+# Access control for the control interface can be configured by setting the
+# directory to allow only members of a group to use sockets. This way, it is
+# possible to run wpa_supplicant as root (since it needs to change network
+# configuration and open raw sockets) and still allow GUI/CLI components to be
+# run as non-root users. However, since the control interface can be used to
+# change the network configuration, this access needs to be protected in many
+# cases. By default, wpa_supplicant is configured to use gid 0 (root). If you
+# want to allow non-root users to use the control interface, add a new group
+# and change this value to match with that group. Add users that should have
+# control interface access to this group. If this variable is commented out or
+# not included in the configuration file, group will not be changed from the
+# value it got by default when the directory or socket was created.
+#
+# When configuring both the directory and group, use following format:
+# DIR=/var/run/wpa_supplicant GROUP=wheel
+# DIR=/var/run/wpa_supplicant GROUP=0
+# (group can be either group name or gid)
+#
+# For UDP connections (default on Windows): The value will be ignored. This
+# variable is just used to select that the control interface is to be created.
+# The value can be set to, e.g., udp (ctrl_interface=udp)
+#
+# For Windows Named Pipe: This value can be used to set the security descriptor
+# for controlling access to the control interface. Security descriptor can be
+# set using Security Descriptor String Format (see http://msdn.microsoft.com/
+# library/default.asp?url=/library/en-us/secauthz/security/
+# security_descriptor_string_format.asp). The descriptor string needs to be
+# prefixed with SDDL=. For example, ctrl_interface=SDDL=D: would set an empty
+# DACL (which will reject all connections). See README-Windows.txt for more
+# information about SDDL string format.
+#
+ctrl_interface=/var/run/wpa_supplicant
+
+# IEEE 802.1X/EAPOL version
+# wpa_supplicant is implemented based on IEEE Std 802.1X-2004 which defines
+# EAPOL version 2. However, there are many APs that do not handle the new
+# version number correctly (they seem to drop the frames completely). In order
+# to make wpa_supplicant interoperate with these APs, the version number is set
+# to 1 by default. This configuration value can be used to set it to the new
+# version (2).
+eapol_version=1
+
+# AP scanning/selection
+# By default, wpa_supplicant requests driver to perform AP scanning and then
+# uses the scan results to select a suitable AP. Another alternative is to
+# allow the driver to take care of AP scanning and selection and use
+# wpa_supplicant just to process EAPOL frames based on IEEE 802.11 association
+# information from the driver.
+# 1: wpa_supplicant initiates scanning and AP selection
+# 0: driver takes care of scanning, AP selection, and IEEE 802.11 association
+# parameters (e.g., WPA IE generation); this mode can also be used with
+# non-WPA drivers when using IEEE 802.1X mode; do not try to associate with
+# APs (i.e., external program needs to control association). This mode must
+# also be used when using wired Ethernet drivers.
+# 2: like 0, but associate with APs using security policy and SSID (but not
+# BSSID); this can be used, e.g., with ndiswrapper and NDIS drivers to
+# enable operation with hidden SSIDs and optimized roaming; in this mode,
+# the network blocks in the configuration file are tried one by one until
+# the driver reports successful association; each network block should have
+# explicit security policy (i.e., only one option in the lists) for
+# key_mgmt, pairwise, group, proto variables
+ap_scan=1
+
+# EAP fast re-authentication
+# By default, fast re-authentication is enabled for all EAP methods that
+# support it. This variable can be used to disable fast re-authentication.
+# Normally, there is no need to disable this.
+fast_reauth=1
+
+# OpenSSL Engine support
+# These options can be used to load OpenSSL engines.
+# The two engines that are supported currently are shown below:
+# They are both from the opensc project (http://www.opensc.org/)
+# By default no engines are loaded.
+# make the opensc engine available
+#opensc_engine_path=/usr/lib64/engine_opensc.so
+# make the pkcs11 engine available
+#pkcs11_engine_path=/usr/lib64/engine_pkcs11.so
+# configure the path to the pkcs11 module required by the pkcs11 engine
+#pkcs11_module_path=/usr/lib64/opensc-pkcs11.so
+
+# Dynamic EAP methods
+# If EAP methods were built dynamically as shared object files, they need to be
+# loaded here before being used in the network blocks. By default, EAP methods
+# are included statically in the build, so these lines are not needed
+#load_dynamic_eap=/usr/lib/wpa_supplicant/eap_tls.so
+#load_dynamic_eap=/usr/lib/wpa_supplicant/eap_md5.so
+
+# Driver interface parameters
+# This field can be used to configure arbitrary driver interace parameters. The
+# format is specific to the selected driver interface. This field is not used
+# in most cases.
+#driver_param="field=value"
+
+# Country code
+# The ISO/IEC alpha2 country code for the country in which this device is
+# currently operating.
+#country=US
+
+# Maximum lifetime for PMKSA in seconds; default 43200
+#dot11RSNAConfigPMKLifetime=43200
+# Threshold for reauthentication (percentage of PMK lifetime); default 70
+#dot11RSNAConfigPMKReauthThreshold=70
+# Timeout for security association negotiation in seconds; default 60
+#dot11RSNAConfigSATimeout=60
+
+# Wi-Fi Protected Setup (WPS) parameters
+
+# Universally Unique IDentifier (UUID; see RFC 4122) of the device
+# If not configured, UUID will be generated based on the local MAC address.
+#uuid=12345678-9abc-def0-1234-56789abcdef0
+
+# Device Name
+# User-friendly description of device; up to 32 octets encoded in UTF-8
+#device_name=Wireless Client
+
+# Manufacturer
+# The manufacturer of the device (up to 64 ASCII characters)
+#manufacturer=Company
+
+# Model Name
+# Model of the device (up to 32 ASCII characters)
+#model_name=cmodel
+
+# Model Number
+# Additional device description (up to 32 ASCII characters)
+#model_number=123
+
+# Serial Number
+# Serial number of the device (up to 32 characters)
+#serial_number=12345
+
+# Primary Device Type
+# Used format: <categ>-<OUI>-<subcateg>
+# categ = Category as an integer value
+# OUI = OUI and type octet as a 4-octet hex-encoded value; 0050F204 for
+# default WPS OUI
+# subcateg = OUI-specific Sub Category as an integer value
+# Examples:
+# 1-0050F204-1 (Computer / PC)
+# 1-0050F204-2 (Computer / Server)
+# 5-0050F204-1 (Storage / NAS)
+# 6-0050F204-1 (Network Infrastructure / AP)
+#device_type=1-0050F204-1
+
+# OS Version
+# 4-octet operating system version number (hex string)
+#os_version=01020300
+
+# Credential processing
+# 0 = process received credentials internally (default)
+# 1 = do not process received credentials; just pass them over ctrl_iface to
+# external program(s)
+# 2 = process received credentials internally and pass them over ctrl_iface
+# to external program(s)
+#wps_cred_processing=0
+
+# network block
+#
+# Each network (usually AP's sharing the same SSID) is configured as a separate
+# block in this configuration file. The network blocks are in preference order
+# (the first match is used).
+#
+# network block fields:
+#
+# disabled:
+# 0 = this network can be used (default)
+# 1 = this network block is disabled (can be enabled through ctrl_iface,
+# e.g., with wpa_cli or wpa_gui)
+#
+# id_str: Network identifier string for external scripts. This value is passed
+# to external action script through wpa_cli as WPA_ID_STR environment
+# variable to make it easier to do network specific configuration.
+#
+# ssid: SSID (mandatory); either as an ASCII string with double quotation or
+# as hex string; network name
+#
+# scan_ssid:
+# 0 = do not scan this SSID with specific Probe Request frames (default)
+# 1 = scan with SSID-specific Probe Request frames (this can be used to
+# find APs that do not accept broadcast SSID or use multiple SSIDs;
+# this will add latency to scanning, so enable this only when needed)
+#
+# bssid: BSSID (optional); if set, this network block is used only when
+# associating with the AP using the configured BSSID
+#
+# priority: priority group (integer)
+# By default, all networks will get same priority group (0). If some of the
+# networks are more desirable, this field can be used to change the order in
+# which wpa_supplicant goes through the networks when selecting a BSS. The
+# priority groups will be iterated in decreasing priority (i.e., the larger the
+# priority value, the sooner the network is matched against the scan results).
+# Within each priority group, networks will be selected based on security
+# policy, signal strength, etc.
+# Please note that AP scanning with scan_ssid=1 and ap_scan=2 mode are not
+# using this priority to select the order for scanning. Instead, they try the
+# networks in the order that used in the configuration file.
+#
+# mode: IEEE 802.11 operation mode
+# 0 = infrastructure (Managed) mode, i.e., associate with an AP (default)
+# 1 = IBSS (ad-hoc, peer-to-peer)
+# Note: IBSS can only be used with key_mgmt NONE (plaintext and static WEP)
+# and key_mgmt=WPA-NONE (fixed group key TKIP/CCMP). In addition, ap_scan has
+# to be set to 2 for IBSS. WPA-None requires following network block options:
+# proto=WPA, key_mgmt=WPA-NONE, pairwise=NONE, group=TKIP (or CCMP, but not
+# both), and psk must also be set.
+#
+# frequency: Channel frequency in megahertz (MHz) for IBSS, e.g.,
+# 2412 = IEEE 802.11b/g channel 1. This value is used to configure the initial
+# channel for IBSS (adhoc) networks. It is ignored in the infrastructure mode.
+# In addition, this value is only used by the station that creates the IBSS. If
+# an IBSS network with the configured SSID is already present, the frequency of
+# the network will be used instead of this configured value.
+#
+# proto: list of accepted protocols
+# WPA = WPA/IEEE 802.11i/D3.0
+# RSN = WPA2/IEEE 802.11i (also WPA2 can be used as an alias for RSN)
+# If not set, this defaults to: WPA RSN
+#
+# key_mgmt: list of accepted authenticated key management protocols
+# WPA-PSK = WPA pre-shared key (this requires 'psk' field)
+# WPA-EAP = WPA using EAP authentication
+# IEEE8021X = IEEE 802.1X using EAP authentication and (optionally) dynamically
+# generated WEP keys
+# NONE = WPA is not used; plaintext or static WEP could be used
+# WPA-PSK-SHA256 = Like WPA-PSK but using stronger SHA256-based algorithms
+# WPA-EAP-SHA256 = Like WPA-EAP but using stronger SHA256-based algorithms
+# If not set, this defaults to: WPA-PSK WPA-EAP
+#
+# auth_alg: list of allowed IEEE 802.11 authentication algorithms
+# OPEN = Open System authentication (required for WPA/WPA2)
+# SHARED = Shared Key authentication (requires static WEP keys)
+# LEAP = LEAP/Network EAP (only used with LEAP)
+# If not set, automatic selection is used (Open System with LEAP enabled if
+# LEAP is allowed as one of the EAP methods).
+#
+# pairwise: list of accepted pairwise (unicast) ciphers for WPA
+# CCMP = AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0]
+# TKIP = Temporal Key Integrity Protocol [IEEE 802.11i/D7.0]
+# NONE = Use only Group Keys (deprecated, should not be included if APs support
+# pairwise keys)
+# If not set, this defaults to: CCMP TKIP
+#
+# group: list of accepted group (broadcast/multicast) ciphers for WPA
+# CCMP = AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0]
+# TKIP = Temporal Key Integrity Protocol [IEEE 802.11i/D7.0]
+# WEP104 = WEP (Wired Equivalent Privacy) with 104-bit key
+# WEP40 = WEP (Wired Equivalent Privacy) with 40-bit key [IEEE 802.11]
+# If not set, this defaults to: CCMP TKIP WEP104 WEP40
+#
+# psk: WPA preshared key; 256-bit pre-shared key
+# The key used in WPA-PSK mode can be entered either as 64 hex-digits, i.e.,
+# 32 bytes or as an ASCII passphrase (in which case, the real PSK will be
+# generated using the passphrase and SSID). ASCII passphrase must be between
+# 8 and 63 characters (inclusive).
+# This field is not needed, if WPA-EAP is used.
+# Note: Separate tool, wpa_passphrase, can be used to generate 256-bit keys
+# from ASCII passphrase. This process uses lot of CPU and wpa_supplicant
+# startup and reconfiguration time can be optimized by generating the PSK only
+# only when the passphrase or SSID has actually changed.
+#
+# eapol_flags: IEEE 802.1X/EAPOL options (bit field)
+# Dynamic WEP key required for non-WPA mode
+# bit0 (1): require dynamically generated unicast WEP key
+# bit1 (2): require dynamically generated broadcast WEP key
+# (3 = require both keys; default)
+# Note: When using wired authentication, eapol_flags must be set to 0 for the
+# authentication to be completed successfully.
+#
+# mixed_cell: This option can be used to configure whether so called mixed
+# cells, i.e., networks that use both plaintext and encryption in the same
+# SSID, are allowed when selecting a BSS form scan results.
+# 0 = disabled (default)
+# 1 = enabled
+#
+# proactive_key_caching:
+# Enable/disable opportunistic PMKSA caching for WPA2.
+# 0 = disabled (default)
+# 1 = enabled
+#
+# wep_key0..3: Static WEP key (ASCII in double quotation, e.g. "abcde" or
+# hex without quotation, e.g., 0102030405)
+# wep_tx_keyidx: Default WEP key index (TX) (0..3)
+#
+# peerkey: Whether PeerKey negotiation for direct links (IEEE 802.11e DLS) is
+# allowed. This is only used with RSN/WPA2.
+# 0 = disabled (default)
+# 1 = enabled
+#peerkey=1
+#
+# wpa_ptk_rekey: Maximum lifetime for PTK in seconds. This can be used to
+# enforce rekeying of PTK to mitigate some attacks against TKIP deficiencies.
+#
+# Following fields are only used with internal EAP implementation.
+# eap: space-separated list of accepted EAP methods
+# MD5 = EAP-MD5 (unsecure and does not generate keying material ->
+# cannot be used with WPA; to be used as a Phase 2 method
+# with EAP-PEAP or EAP-TTLS)
+# MSCHAPV2 = EAP-MSCHAPv2 (cannot be used separately with WPA; to be used
+# as a Phase 2 method with EAP-PEAP or EAP-TTLS)
+# OTP = EAP-OTP (cannot be used separately with WPA; to be used
+# as a Phase 2 method with EAP-PEAP or EAP-TTLS)
+# GTC = EAP-GTC (cannot be used separately with WPA; to be used
+# as a Phase 2 method with EAP-PEAP or EAP-TTLS)
+# TLS = EAP-TLS (client and server certificate)
+# PEAP = EAP-PEAP (with tunnelled EAP authentication)
+# TTLS = EAP-TTLS (with tunnelled EAP or PAP/CHAP/MSCHAP/MSCHAPV2
+# authentication)
+# If not set, all compiled in methods are allowed.
+#
+# identity: Identity string for EAP
+# This field is also used to configure user NAI for
+# EAP-PSK/PAX/SAKE/GPSK.
+# anonymous_identity: Anonymous identity string for EAP (to be used as the
+# unencrypted identity with EAP types that support different tunnelled
+# identity, e.g., EAP-TTLS)
+# password: Password string for EAP. This field can include either the
+# plaintext password (using ASCII or hex string) or a NtPasswordHash
+# (16-byte MD4 hash of password) in hash:<32 hex digits> format.
+# NtPasswordHash can only be used when the password is for MSCHAPv2 or
+# MSCHAP (EAP-MSCHAPv2, EAP-TTLS/MSCHAPv2, EAP-TTLS/MSCHAP, LEAP).
+# EAP-PSK (128-bit PSK), EAP-PAX (128-bit PSK), and EAP-SAKE (256-bit
+# PSK) is also configured using this field. For EAP-GPSK, this is a
+# variable length PSK.
+# ca_cert: File path to CA certificate file (PEM/DER). This file can have one
+# or more trusted CA certificates. If ca_cert and ca_path are not
+# included, server certificate will not be verified. This is insecure and
+# a trusted CA certificate should always be configured when using
+# EAP-TLS/TTLS/PEAP. Full path should be used since working directory may
+# change when wpa_supplicant is run in the background.
+# On Windows, trusted CA certificates can be loaded from the system
+# certificate store by setting this to cert_store://<name>, e.g.,
+# ca_cert="cert_store://CA" or ca_cert="cert_store://ROOT".
+# Note that when running wpa_supplicant as an application, the user
+# certificate store (My user account) is used, whereas computer store
+# (Computer account) is used when running wpasvc as a service.
+# ca_path: Directory path for CA certificate files (PEM). This path may
+# contain multiple CA certificates in OpenSSL format. Common use for this
+# is to point to system trusted CA list which is often installed into
+# directory like /etc/ssl/certs. If configured, these certificates are
+# added to the list of trusted CAs. ca_cert may also be included in that
+# case, but it is not required.
+# client_cert: File path to client certificate file (PEM/DER)
+# Full path should be used since working directory may change when
+# wpa_supplicant is run in the background.
+# Alternatively, a named configuration blob can be used by setting this
+# to blob://<blob name>.
+# private_key: File path to client private key file (PEM/DER/PFX)
+# When PKCS#12/PFX file (.p12/.pfx) is used, client_cert should be
+# commented out. Both the private key and certificate will be read from
+# the PKCS#12 file in this case. Full path should be used since working
+# directory may change when wpa_supplicant is run in the background.
+# Windows certificate store can be used by leaving client_cert out and
+# configuring private_key in one of the following formats:
+# cert://substring_to_match
+# hash://certificate_thumbprint_in_hex
+# for example: private_key="hash://63093aa9c47f56ae88334c7b65a4"
+# Note that when running wpa_supplicant as an application, the user
+# certificate store (My user account) is used, whereas computer store
+# (Computer account) is used when running wpasvc as a service.
+# Alternatively, a named configuration blob can be used by setting this
+# to blob://<blob name>.
+# private_key_passwd: Password for private key file (if left out, this will be
+# asked through control interface)
+# dh_file: File path to DH/DSA parameters file (in PEM format)
+# This is an optional configuration file for setting parameters for an
+# ephemeral DH key exchange. In most cases, the default RSA
+# authentication does not use this configuration. However, it is possible
+# setup RSA to use ephemeral DH key exchange. In addition, ciphers with
+# DSA keys always use ephemeral DH keys. This can be used to achieve
+# forward secrecy. If the file is in DSA parameters format, it will be
+# automatically converted into DH params.
+# subject_match: Substring to be matched against the subject of the
+# authentication server certificate. If this string is set, the server
+# sertificate is only accepted if it contains this string in the subject.
+# The subject string is in following format:
+# /C=US/ST=CA/L=San Francisco/CN=Test AS/emailAddress=as@example.com
+# altsubject_match: Semicolon separated string of entries to be matched against
+# the alternative subject name of the authentication server certificate.
+# If this string is set, the server sertificate is only accepted if it
+# contains one of the entries in an alternative subject name extension.
+# altSubjectName string is in following format: TYPE:VALUE
+# Example: EMAIL:server@example.com
+# Example: DNS:server.example.com;DNS:server2.example.com
+# Following types are supported: EMAIL, DNS, URI
+# phase1: Phase1 (outer authentication, i.e., TLS tunnel) parameters
+# (string with field-value pairs, e.g., "peapver=0" or
+# "peapver=1 peaplabel=1")
+# 'peapver' can be used to force which PEAP version (0 or 1) is used.
+# 'peaplabel=1' can be used to force new label, "client PEAP encryption",
+# to be used during key derivation when PEAPv1 or newer. Most existing
+# PEAPv1 implementation seem to be using the old label, "client EAP
+# encryption", and wpa_supplicant is now using that as the default value.
+# Some servers, e.g., Radiator, may require peaplabel=1 configuration to
+# interoperate with PEAPv1; see eap_testing.txt for more details.
+# 'peap_outer_success=0' can be used to terminate PEAP authentication on
+# tunneled EAP-Success. This is required with some RADIUS servers that
+# implement draft-josefsson-pppext-eap-tls-eap-05.txt (e.g.,
+# Lucent NavisRadius v4.4.0 with PEAP in "IETF Draft 5" mode)
+# include_tls_length=1 can be used to force wpa_supplicant to include
+# TLS Message Length field in all TLS messages even if they are not
+# fragmented.
+# sim_min_num_chal=3 can be used to configure EAP-SIM to require three
+# challenges (by default, it accepts 2 or 3)
+# result_ind=1 can be used to enable EAP-SIM and EAP-AKA to use
+# protected result indication.
+# 'crypto_binding' option can be used to control PEAPv0 cryptobinding
+# behavior:
+# * 0 = do not use cryptobinding (default)
+# * 1 = use cryptobinding if server supports it
+# * 2 = require cryptobinding
+# EAP-WSC (WPS) uses following options: pin=<Device Password> or
+# pbc=1.
+# phase2: Phase2 (inner authentication with TLS tunnel) parameters
+# (string with field-value pairs, e.g., "auth=MSCHAPV2" for EAP-PEAP or
+# "autheap=MSCHAPV2 autheap=MD5" for EAP-TTLS)
+# Following certificate/private key fields are used in inner Phase2
+# authentication when using EAP-TTLS or EAP-PEAP.
+# ca_cert2: File path to CA certificate file. This file can have one or more
+# trusted CA certificates. If ca_cert2 and ca_path2 are not included,
+# server certificate will not be verified. This is insecure and a trusted
+# CA certificate should always be configured.
+# ca_path2: Directory path for CA certificate files (PEM)
+# client_cert2: File path to client certificate file
+# private_key2: File path to client private key file
+# private_key2_passwd: Password for private key file
+# dh_file2: File path to DH/DSA parameters file (in PEM format)
+# subject_match2: Substring to be matched against the subject of the
+# authentication server certificate.
+# altsubject_match2: Substring to be matched against the alternative subject
+# name of the authentication server certificate.
+#
+# fragment_size: Maximum EAP fragment size in bytes (default 1398).
+# This value limits the fragment size for EAP methods that support
+# fragmentation (e.g., EAP-TLS and EAP-PEAP). This value should be set
+# small enough to make the EAP messages fit in MTU of the network
+# interface used for EAPOL. The default value is suitable for most
+# cases.
+#
+# EAP-FAST variables:
+# pac_file: File path for the PAC entries. wpa_supplicant will need to be able
+# to create this file and write updates to it when PAC is being
+# provisioned or refreshed. Full path to the file should be used since
+# working directory may change when wpa_supplicant is run in the
+# background. Alternatively, a named configuration blob can be used by
+# setting this to blob://<blob name>
+# phase1: fast_provisioning option can be used to enable in-line provisioning
+# of EAP-FAST credentials (PAC):
+# 0 = disabled,
+# 1 = allow unauthenticated provisioning,
+# 2 = allow authenticated provisioning,
+# 3 = allow both unauthenticated and authenticated provisioning
+# fast_max_pac_list_len=<num> option can be used to set the maximum
+# number of PAC entries to store in a PAC list (default: 10)
+# fast_pac_format=binary option can be used to select binary format for
+# storing PAC entries in order to save some space (the default
+# text format uses about 2.5 times the size of minimal binary
+# format)
+#
+# wpa_supplicant supports number of "EAP workarounds" to work around
+# interoperability issues with incorrectly behaving authentication servers.
+# These are enabled by default because some of the issues are present in large
+# number of authentication servers. Strict EAP conformance mode can be
+# configured by disabling workarounds with eap_workaround=0.
+
+# Example blocks:
+
+# Simple case: WPA-PSK, PSK as an ASCII passphrase, allow all valid ciphers
+network={
+ ssid="simple"
+ psk="very secret passphrase"
+ priority=5
+}
+
+# Same as previous, but request SSID-specific scanning (for APs that reject
+# broadcast SSID)
+network={
+ ssid="second ssid"
+ scan_ssid=1
+ psk="very secret passphrase"
+ priority=2
+}
+
+# Only WPA-PSK is used. Any valid cipher combination is accepted.
+network={
+ ssid="example"
+ proto=WPA
+ key_mgmt=WPA-PSK
+ pairwise=CCMP TKIP
+ group=CCMP TKIP WEP104 WEP40
+ psk=06b4be19da289f475aa46a33cb793029d4ab3db7a23ee92382eb0106c72ac7bb
+ priority=2
+}
+
+# WPA-Personal(PSK) with TKIP and enforcement for frequent PTK rekeying
+network={
+ ssid="example"
+ proto=WPA
+ key_mgmt=WPA-PSK
+ pairwise=TKIP
+ group=TKIP
+ psk="not so secure passphrase"
+ wpa_ptk_rekey=600
+}
+
+# Only WPA-EAP is used. Both CCMP and TKIP is accepted. An AP that used WEP104
+# or WEP40 as the group cipher will not be accepted.
+network={
+ ssid="example"
+ proto=RSN
+ key_mgmt=WPA-EAP
+ pairwise=CCMP TKIP
+ group=CCMP TKIP
+ eap=TLS
+ identity="user@example.com"
+ ca_cert="/etc/cert/ca.pem"
+ client_cert="/etc/cert/user.pem"
+ private_key="/etc/cert/user.prv"
+ private_key_passwd="password"
+ priority=1
+}
+
+# EAP-PEAP/MSCHAPv2 configuration for RADIUS servers that use the new peaplabel
+# (e.g., Radiator)
+network={
+ ssid="example"
+ key_mgmt=WPA-EAP
+ eap=PEAP
+ identity="user@example.com"
+ password="foobar"
+ ca_cert="/etc/cert/ca.pem"
+ phase1="peaplabel=1"
+ phase2="auth=MSCHAPV2"
+ priority=10
+}
+
+# EAP-TTLS/EAP-MD5-Challenge configuration with anonymous identity for the
+# unencrypted use. Real identity is sent only within an encrypted TLS tunnel.
+network={
+ ssid="example"
+ key_mgmt=WPA-EAP
+ eap=TTLS
+ identity="user@example.com"
+ anonymous_identity="anonymous@example.com"
+ password="foobar"
+ ca_cert="/etc/cert/ca.pem"
+ priority=2
+}
+
+# EAP-TTLS/MSCHAPv2 configuration with anonymous identity for the unencrypted
+# use. Real identity is sent only within an encrypted TLS tunnel.
+network={
+ ssid="example"
+ key_mgmt=WPA-EAP
+ eap=TTLS
+ identity="user@example.com"
+ anonymous_identity="anonymous@example.com"
+ password="foobar"
+ ca_cert="/etc/cert/ca.pem"
+ phase2="auth=MSCHAPV2"
+}
+
+# WPA-EAP, EAP-TTLS with different CA certificate used for outer and inner
+# authentication.
+network={
+ ssid="example"
+ key_mgmt=WPA-EAP
+ eap=TTLS
+ # Phase1 / outer authentication
+ anonymous_identity="anonymous@example.com"
+ ca_cert="/etc/cert/ca.pem"
+ # Phase 2 / inner authentication
+ phase2="autheap=TLS"
+ ca_cert2="/etc/cert/ca2.pem"
+ client_cert2="/etc/cer/user.pem"
+ private_key2="/etc/cer/user.prv"
+ private_key2_passwd="password"
+ priority=2
+}
+
+# Both WPA-PSK and WPA-EAP is accepted. Only CCMP is accepted as pairwise and
+# group cipher.
+network={
+ ssid="example"
+ bssid=00:11:22:33:44:55
+ proto=WPA RSN
+ key_mgmt=WPA-PSK WPA-EAP
+ pairwise=CCMP
+ group=CCMP
+ psk=06b4be19da289f475aa46a33cb793029d4ab3db7a23ee92382eb0106c72ac7bb
+}
+
+# Special characters in SSID, so use hex string. Default to WPA-PSK, WPA-EAP
+# and all valid ciphers.
+network={
+ ssid=00010203
+ psk=000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+}
+
+
+# EAP-SIM with a GSM SIM or USIM
+network={
+ ssid="eap-sim-test"
+ key_mgmt=WPA-EAP
+ eap=SIM
+ pin="1234"
+ pcsc=""
+}
+
+
+# EAP-PSK
+network={
+ ssid="eap-psk-test"
+ key_mgmt=WPA-EAP
+ eap=PSK
+ anonymous_identity="eap_psk_user"
+ password=06b4be19da289f475aa46a33cb793029
+ identity="eap_psk_user@example.com"
+}
+
+
+# IEEE 802.1X/EAPOL with dynamically generated WEP keys (i.e., no WPA) using
+# EAP-TLS for authentication and key generation; require both unicast and
+# broadcast WEP keys.
+network={
+ ssid="1xtest"
+ key_mgmt=IEEE8021X
+ eap=TLS
+ identity="user@example.com"
+ ca_cert="/etc/cert/ca.pem"
+ client_cert="/etc/cert/user.pem"
+ private_key="/etc/cert/user.prv"
+ private_key_passwd="password"
+ eapol_flags=3
+}
+
+
+# LEAP with dynamic WEP keys
+network={
+ ssid="leap-example"
+ key_mgmt=IEEE8021X
+ eap=LEAP
+ identity="user"
+ password="foobar"
+}
+
+# EAP-IKEv2 using shared secrets for both server and peer authentication
+network={
+ ssid="ikev2-example"
+ key_mgmt=WPA-EAP
+ eap=IKEV2
+ identity="user"
+ password="foobar"
+}
+
+# EAP-FAST with WPA (WPA or WPA2)
+network={
+ ssid="eap-fast-test"
+ key_mgmt=WPA-EAP
+ eap=FAST
+ anonymous_identity="FAST-000102030405"
+ identity="username"
+ password="password"
+ phase1="fast_provisioning=1"
+ pac_file="/etc/wpa_supplicant.eap-fast-pac"
+}
+
+network={
+ ssid="eap-fast-test"
+ key_mgmt=WPA-EAP
+ eap=FAST
+ anonymous_identity="FAST-000102030405"
+ identity="username"
+ password="password"
+ phase1="fast_provisioning=1"
+ pac_file="blob://eap-fast-pac"
+}
+
+# Plaintext connection (no WPA, no IEEE 802.1X)
+network={
+ ssid="plaintext-test"
+ key_mgmt=NONE
+}
+
+
+# Shared WEP key connection (no WPA, no IEEE 802.1X)
+network={
+ ssid="static-wep-test"
+ key_mgmt=NONE
+ wep_key0="abcde"
+ wep_key1=0102030405
+ wep_key2="1234567890123"
+ wep_tx_keyidx=0
+ priority=5
+}
+
+
+# Shared WEP key connection (no WPA, no IEEE 802.1X) using Shared Key
+# IEEE 802.11 authentication
+network={
+ ssid="static-wep-test2"
+ key_mgmt=NONE
+ wep_key0="abcde"
+ wep_key1=0102030405
+ wep_key2="1234567890123"
+ wep_tx_keyidx=0
+ priority=5
+ auth_alg=SHARED
+}
+
+
+# IBSS/ad-hoc network with WPA-None/TKIP.
+network={
+ ssid="test adhoc"
+ mode=1
+ frequency=2412
+ proto=WPA
+ key_mgmt=WPA-NONE
+ pairwise=NONE
+ group=TKIP
+ psk="secret passphrase"
+}
+
+
+# Catch all example that allows more or less all configuration modes
+network={
+ ssid="example"
+ scan_ssid=1
+ key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE
+ pairwise=CCMP TKIP
+ group=CCMP TKIP WEP104 WEP40
+ psk="very secret passphrase"
+ eap=TTLS PEAP TLS
+ identity="user@example.com"
+ password="foobar"
+ ca_cert="/etc/cert/ca.pem"
+ client_cert="/etc/cert/user.pem"
+ private_key="/etc/cert/user.prv"
+ private_key_passwd="password"
+ phase1="peaplabel=0"
+}
+
+# Example of EAP-TLS with smartcard (openssl engine)
+network={
+ ssid="example"
+ key_mgmt=WPA-EAP
+ eap=TLS
+ proto=RSN
+ pairwise=CCMP TKIP
+ group=CCMP TKIP
+ identity="user@example.com"
+ ca_cert="/etc/cert/ca.pem"
+ client_cert="/etc/cert/user.pem"
+
+ engine=1
+
+ # The engine configured here must be available. Look at
+ # OpenSSL engine support in the global section.
+ # The key available through the engine must be the private key
+ # matching the client certificate configured above.
+
+ # use the opensc engine
+ #engine_id="opensc"
+ #key_id="45"
+
+ # use the pkcs11 engine
+ engine_id="pkcs11"
+ key_id="id_45"
+
+ # Optional PIN configuration; this can be left out and PIN will be
+ # asked through the control interface
+ pin="1234"
+}
+
+# Example configuration showing how to use an inlined blob as a CA certificate
+# data instead of using external file
+network={
+ ssid="example"
+ key_mgmt=WPA-EAP
+ eap=TTLS
+ identity="user@example.com"
+ anonymous_identity="anonymous@example.com"
+ password="foobar"
+ ca_cert="blob://exampleblob"
+ priority=20
+}
+
+blob-base64-exampleblob={
+SGVsbG8gV29ybGQhCg==
+}
+
+
+# Wildcard match for SSID (plaintext APs only). This example select any
+# open AP regardless of its SSID.
+network={
+ key_mgmt=NONE
+}
+network={
+ ssid="qiaomuf"
+ key_mgmt=WPA-EAP
+ eap=TLS
+ identity="user@example.com"
+ ca_cert="/home/gentoo/temp/ca.pem"
+ client_cert="/home/gentoo/temp/client.pem"
+ private_key="/home/gentoo/temp/client.p12"
+ private_key_passwd="whatever"
+# phase2="auth=MSCHAPV2"
+ priority=10
+}
+network={
+ ssid="myxjtu2"
+ scan_ssid=1
+ key_mgmt=WPA-PSK
+ psk="xjtudlc3731"
+ disabled=0
+ key_mgmt=NONE
+ wep_key0="12345"
+ wep_key1=1234567890
+ wep_key2="zxcvb"
+ wep_tx_keyidx=1
+ auth_alg=OPEN
+ mode=1
+}
+network={
+ ssid=ab3ace
+ key_mgmt=WPA-EAP
+ eap=TTLS
+ identity="user@example.com"
+ anonymous_identity="anonymous@example.com"
+ password="foobar"
+ ca_cert="blob://exampleblob"
+ priority=20
+}
diff --git a/system-settings/plugins/ifnet/wpa_parser.c b/system-settings/plugins/ifnet/wpa_parser.c
new file mode 100644
index 0000000000..5e94108e98
--- /dev/null
+++ b/system-settings/plugins/ifnet/wpa_parser.c
@@ -0,0 +1,558 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * Mu Qiao <qiaomuf@gmail.com>
+ *
+ * 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) 1999-2010 Gentoo Foundation, Inc.
+ */
+
+#include <string.h>
+#include <stdlib.h>
+#include <nm-system-config-interface.h>
+#include "wpa_parser.h"
+#include "net_parser.h"
+#include "net_utils.h"
+
+/* Security information */
+static GHashTable *wsec_table = NULL;
+
+/* Global information used for writing */
+static GHashTable *wsec_global_table = NULL;
+
+static gboolean wpa_parser_data_changed = FALSE;
+
+static long
+wpa_get_long (GHashTable * table, gchar * key)
+{
+ return atol (g_hash_table_lookup (table, key));
+}
+
+static void
+destroy_security (GHashTable * network)
+{
+ gpointer key, value;
+ GHashTableIter iter;
+
+ g_return_if_fail (network);
+ g_hash_table_iter_init (&iter, network);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ g_free (key);
+ g_free (value);
+ }
+
+ g_hash_table_destroy (network);
+}
+
+static GHashTable *
+add_security (GHashTable * security)
+{
+ GHashTable *oldsecurity;
+ gchar *ssid = g_hash_table_lookup (security, "ssid"), *ssid_key;
+ gchar *value;
+ gboolean is_hex_ssid;
+
+ /* Every security information should have a ssid */
+ if (!ssid) {
+ destroy_security (security);
+ return NULL;
+ }
+
+ /* Hex format begins with " */
+ is_hex_ssid = (ssid[0] != '"');
+ if ((value = g_hash_table_lookup (security, "disabled")) != NULL) {
+ if (strcmp (value, "1") == 0)
+ return NULL;
+ }
+
+ /* Default priority is 1 */
+ if (g_hash_table_lookup (security, "priority") == NULL)
+ g_hash_table_insert (security, g_strdup ("priority"),
+ g_strdup ("1"));
+
+ oldsecurity = g_hash_table_lookup (wsec_table, ssid);
+ /* Security with lower priority will be ignored */
+ if (oldsecurity != NULL) {
+ if (wpa_get_long (oldsecurity, "priority") >=
+ wpa_get_long (security, "priority")) {
+ destroy_security (security);
+ return NULL;
+ } else {
+ g_hash_table_remove (wsec_table, ssid);
+ destroy_security (oldsecurity);
+ }
+ }
+
+ /* format ssid */
+ ssid_key =
+ is_hex_ssid ? g_strdup_printf ("0x%s",
+ ssid) :
+ strip_string (g_strdup (ssid), '"');
+ g_hash_table_insert (wsec_table, ssid_key, security);
+ return security;
+}
+
+static void
+add_key_value (GHashTable * network, gchar * line)
+{
+ gchar **key_value;
+
+ if (g_str_has_prefix (line, "network={"))
+ line += 9;
+ strip_string (line, '{');
+ strip_string (line, '}');
+ if (line[0] == '\0')
+ return;
+ key_value = g_strsplit (line, "=", 2);
+ if (g_strv_length (key_value) != 2) {
+ g_strfreev (key_value);
+ return;
+ }
+ g_strstrip (key_value[0]);
+ g_strstrip (key_value[1]);
+
+ /* Reserve quotes for psk, wep_key, ssid
+ * Quotes will determine whether they are hex format */
+ if (strcmp (key_value[0], "psk") != 0
+ && !g_str_has_prefix (key_value[0], "wep_key")
+ && strcmp (key_value[0], "ssid") != 0)
+ strip_string (key_value[1], '"');
+ g_hash_table_insert (network, g_strdup (key_value[0]),
+ g_strdup (key_value[1]));
+ g_strfreev (key_value);
+}
+
+static void
+add_one_wep_key (GHashTable * table, int key_num, gchar * one_wep_key)
+{
+ if (one_wep_key[0] == 's') {
+ //asc key
+ g_hash_table_insert (table,
+ g_strdup_printf ("wep_key%d", key_num - 1),
+ g_strdup_printf ("\"%s\"",
+ one_wep_key + 2));
+ } else {
+ gchar buf[30];
+ int i = 0, j = 0;
+
+ //hex key
+ while (one_wep_key[i] != '\0') {
+ if (one_wep_key[i] != '-')
+ buf[j++] = one_wep_key[i];
+ i++;
+ }
+ buf[j] = '\0';
+ g_hash_table_insert (table,
+ g_strdup_printf ("wep_key%d", key_num - 1),
+ g_strdup (buf));
+
+ }
+}
+
+/* Reading wep security information from /etc/conf.d/net.
+ * This should not be used in futre, use wpa_supplicant instead. */
+static void
+add_keys_from_net ()
+{
+ GList *names = ifnet_get_connection_names ();
+ GList *iter = names;
+ gchar *wep_keys = "(\\[([1-4])\\]\\s+(s:\\w{5}|s:\\w{13}|"
+ "([\\da-fA-F]{4}\\-){2}[\\da-fA-F]{2}|"
+ "([\\da-fA-F]{4}\\-){6}[\\da-fA-F]{2})\\s+)";
+ gchar *key_method =
+ "\\s+key\\s+\\[([1-4])\\]\\s+enc\\s+(open|restricted)";
+ GRegex *regex_keys = g_regex_new (wep_keys, 0, 0, NULL);
+ GRegex *regex_method = g_regex_new (key_method, 0, 0, NULL);
+ GMatchInfo *keys_info;
+ GMatchInfo *method_info;
+
+ while (iter) {
+ gchar *conn_name = iter->data;
+ GHashTable *table;
+ gchar *key_str;
+
+ if ((key_str = ifnet_get_data (conn_name, "key")) == NULL) {
+ iter = g_list_next (iter);
+ continue;
+ }
+
+ wpa_add_security (conn_name);
+ table = _get_hash_table (conn_name);
+ /* Give lowest priority */
+ wpa_set_data (conn_name, "priority", "0");
+ g_regex_match (regex_keys, key_str, 0, &keys_info);
+ /* add wep keys */
+ while (g_match_info_matches (keys_info)) {
+ gchar *key_num = g_match_info_fetch (keys_info, 2);
+ gchar *one_wep_key = g_match_info_fetch (keys_info, 3);
+
+ add_one_wep_key (table, atoi (key_num), one_wep_key);
+ g_free (key_num);
+ g_free (one_wep_key);
+ g_match_info_next (keys_info, NULL);
+ }
+ g_match_info_free (keys_info);
+
+ g_regex_match (regex_method, key_str, 0, &method_info);
+ /* set default key index and auth alg */
+ if (g_match_info_matches (method_info)) {
+ gchar *default_idx =
+ g_match_info_fetch (method_info, 1);
+ gchar *method = g_match_info_fetch (method_info, 2);
+
+ default_idx[0]--;
+ g_hash_table_insert (table, g_strdup ("wep_tx_keyidx"),
+ default_idx);
+ g_hash_table_insert (table, g_strdup ("auth_alg"),
+ g_ascii_strup (method, -1));
+ }
+ g_match_info_free (method_info);
+ add_security (table);
+ iter = g_list_next (iter);
+ }
+ g_list_free (names);
+ g_regex_unref (regex_keys);
+ g_regex_unref (regex_method);
+}
+
+static void
+add_global_data (gchar * line)
+{
+ gchar **key_value;
+
+ g_strstrip (line);
+ key_value = g_strsplit (line, "=", 2);
+ if (g_strv_length (key_value) != 2) {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME, "Can't handle this line: %s\n",
+ line);
+ g_strfreev (key_value);
+ return;
+ }
+ g_hash_table_insert (wsec_global_table,
+ g_strdup (g_strstrip (key_value[0])),
+ g_strdup (g_strstrip (key_value[1])));
+ g_strfreev (key_value);
+}
+
+void
+wpa_parser_init (gchar * wpa_supplicant_conf)
+{
+ GIOChannel *channel = NULL;
+ gchar *line;
+ gboolean complete = FALSE;
+
+ wpa_parser_data_changed = FALSE;
+ wsec_table = g_hash_table_new (g_str_hash, g_str_equal);
+ wsec_global_table = g_hash_table_new (g_str_hash, g_str_equal);
+
+ if (g_file_test (wpa_supplicant_conf, G_FILE_TEST_IS_REGULAR))
+ channel =
+ g_io_channel_new_file (wpa_supplicant_conf, "r", NULL);
+ if (channel == NULL) {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ "Can't open %s for wireless security",
+ wpa_supplicant_conf);
+ return;
+ }
+
+ while (g_io_channel_read_line (channel, &line, NULL, NULL, NULL)
+ != G_IO_STATUS_EOF) {
+ g_strstrip (line);
+ if (line[0] != '#' && line[0] != '\0') {
+ if (strstr (line, "network={") == NULL) {
+ add_global_data (line);
+ g_free (line);
+ continue;
+ } else {
+ GHashTable *network =
+ g_hash_table_new (g_str_hash, g_str_equal);
+ gchar *tmp;
+
+ do {
+ if (line[0] == '#' || line[0] == '\0') {
+ g_free (line);
+ continue;
+ }
+ /* ignore inline comments */
+ if ((tmp = strchr (line, '#')) != NULL)
+ *tmp = '\0';
+ if (strstr (line, "}") != NULL)
+ complete = TRUE;
+ add_key_value (network, line);
+ g_free (line);
+ } while (complete == FALSE
+ &&
+ g_io_channel_read_line
+ (channel, &line, NULL,
+ NULL, NULL) != G_IO_STATUS_EOF);
+ add_security (network);
+ //EOF in inner loop
+ if (complete == FALSE) {
+ g_free (line);
+ break;
+ }
+ complete = FALSE;
+ }
+ } else
+ g_free (line);
+ }
+
+ g_io_channel_shutdown (channel, FALSE, NULL);
+ g_io_channel_unref (channel);
+
+ add_keys_from_net ();
+}
+
+gchar *
+wpa_get_value (gchar * ssid, gchar * key)
+{
+ GHashTable *target = g_hash_table_lookup (wsec_table, ssid);
+
+ if (target)
+ return g_hash_table_lookup (target, key);
+ return NULL;
+}
+
+gboolean
+exist_ssid (gchar * ssid)
+{
+ return g_hash_table_lookup (wsec_table, ssid) != NULL;
+}
+
+GHashTable *
+_get_hash_table (gchar * ssid)
+{
+ return g_hash_table_lookup (wsec_table, ssid);
+}
+
+static gchar *quoted_keys[] =
+ { "identity", "cert", "private", "phase", "password", NULL };
+
+/* tell whether the key needs quotes when writing is performed */
+static gboolean
+need_quote (gchar * key)
+{
+ int i = 0;
+
+ while (quoted_keys[i] != NULL) {
+ if (strstr (key, quoted_keys[i]))
+ return TRUE;
+ i++;
+ }
+ return FALSE;
+}
+
+gboolean
+wpa_flush_to_file (gchar * config_file)
+{
+ GIOChannel *channel;
+ GError **error = NULL;
+ gpointer key, value, ssid, security;
+ GHashTableIter iter, iter_security;
+ gchar *out_line;
+ gsize bytes_written;
+ gboolean result = FALSE;
+
+ if (!wpa_parser_data_changed)
+ return FALSE;
+ if (!wsec_table || !wsec_global_table)
+ return FALSE;
+
+ channel = g_io_channel_new_file (config_file, "w", NULL);
+ if (!channel) {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ "Can't open file %s for writing", config_file);
+ return FALSE;
+ }
+ g_hash_table_iter_init (&iter, wsec_global_table);
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Writing to %s", config_file);
+ g_io_channel_write_chars (channel,
+ "#Generated by NetworkManager\n"
+ "###### Global Configuration ######\n",
+ -1, &bytes_written, error);
+
+ /* Writing global information */
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ out_line =
+ g_strdup_printf ("%s=%s\n", (gchar *) key, (gchar *) value);
+ g_io_channel_write_chars (channel, out_line, -1, &bytes_written,
+ error);
+ if (bytes_written == 0 || (error && *error))
+ break;
+ g_free (out_line);
+ }
+ if (error && *error) {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME, "Found error: %s",
+ (*error)->message);
+ goto done;
+ }
+ g_io_channel_write_chars (channel,
+ "\n###### Security Configuration ######\n",
+ -1, &bytes_written, error);
+
+ g_hash_table_iter_init (&iter, wsec_table);
+ /* Writing security */
+ while (g_hash_table_iter_next (&iter, &ssid, &security)) {
+ g_hash_table_iter_init (&iter_security,
+ (GHashTable *) security);
+ g_io_channel_write_chars (channel, "network={\n", -1,
+ &bytes_written, error);
+ while (g_hash_table_iter_next (&iter_security, &key, &value)) {
+ out_line =
+ g_strdup_printf (need_quote ((gchar *) key) ?
+ "\t%s=\"%s\"\n" : "\t%s=%s\n",
+ (gchar *) key, (gchar *) value);
+ g_io_channel_write_chars (channel, out_line, -1,
+ &bytes_written, error);
+ if (bytes_written == 0 || (error && *error))
+ break;
+ g_free (out_line);
+ }
+ g_io_channel_write_chars (channel,
+ "}\n\n", -1, &bytes_written, error);
+
+ }
+ if (error && *error) {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME, "Found error: %s",
+ (*error)->message);
+ goto done;
+ }
+ g_io_channel_flush (channel, error);
+
+ if (error && *error) {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME, "Found error: %s",
+ (*error)->message);
+ goto done;
+ }
+ wpa_parser_data_changed = FALSE;
+ result = TRUE;
+ done:
+ g_io_channel_shutdown (channel, FALSE, NULL);
+ g_io_channel_unref (channel);
+ return result;
+}
+
+/* If value is NULL, this method will delete old key value pair */
+void
+wpa_set_data (gchar * ssid, gchar * key, gchar * value)
+{
+ gpointer orig_key = NULL, orig_value = NULL;
+ GHashTable *security = g_hash_table_lookup (wsec_table, ssid);
+
+ g_return_if_fail (security != NULL);
+
+ /* Remove old key value pairs */
+ if (g_hash_table_lookup_extended
+ (security, key, &orig_key, &orig_value)) {
+ g_hash_table_remove (security, orig_key);
+ g_free (orig_key);
+ g_free (orig_value);
+ }
+
+ /* Add new key value */
+ if (value) {
+ gchar *new_value = g_strdup (value);
+
+ if (strcmp (key, "ssid") != 0 && strcmp (key, "psk") != 0
+ && !g_str_has_prefix (key, "wep_key"))
+ strip_string (new_value, '"');
+ g_hash_table_insert (security, g_strdup (key), new_value);
+ }
+ wpa_parser_data_changed = TRUE;
+}
+
+gboolean
+wpa_has_security (gchar * ssid)
+{
+ return g_hash_table_lookup (wsec_table, ssid) != NULL;
+}
+
+gboolean
+wpa_add_security (gchar * ssid)
+{
+ if (wpa_has_security (ssid))
+ return FALSE;
+ else {
+ GHashTable *security =
+ g_hash_table_new (g_str_hash, g_str_equal);
+ gchar *ssid_i;
+
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Adding security for %s",
+ ssid);
+ if (g_str_has_prefix (ssid, "0x")) {
+ /* hex ssid */
+ ssid_i = g_strdup (ssid + 2);
+ } else {
+ /* ascii ssid requires quotes */
+ ssid_i = g_strdup_printf ("\"%s\"", ssid);
+ }
+ g_hash_table_insert (security, strdup ("ssid"), ssid_i);
+ g_hash_table_insert (security, strdup ("priority"),
+ strdup ("1"));
+ g_hash_table_insert (wsec_table, g_strdup (ssid), security);
+ wpa_parser_data_changed = TRUE;
+ return TRUE;
+ }
+}
+
+gboolean
+wpa_delete_security (gchar * ssid)
+{
+ gpointer orig_key, orig_value;
+
+ g_return_val_if_fail (wsec_table != NULL && ssid != NULL, FALSE);
+ PLUGIN_PRINT (IFNET_PLUGIN_NAME, "Deleting security for %s", ssid);
+ if (!g_hash_table_lookup_extended
+ (wsec_table, ssid, &orig_key, &orig_value))
+ return FALSE;
+ g_hash_table_remove (wsec_table, orig_key);
+ g_free (orig_key);
+ destroy_security ((GHashTable *) orig_value);
+ wpa_parser_data_changed = TRUE;
+ return TRUE;
+
+}
+
+void
+wpa_parser_destroy (void)
+{
+ GHashTableIter iter;
+ gpointer key;
+ gpointer value;
+
+ /* Destroy security */
+ if (wsec_table) {
+ g_hash_table_iter_init (&iter, wsec_table);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ destroy_security ((GHashTable *) value);
+ g_free (key);
+ }
+
+ g_hash_table_destroy (wsec_table);
+ wsec_table = NULL;
+ }
+
+ /* Destroy global data */
+ if (wsec_global_table) {
+ g_hash_table_iter_init (&iter, wsec_global_table);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ g_free (key);
+ g_free (value);
+ }
+
+ g_hash_table_destroy (wsec_global_table);
+ wsec_global_table = NULL;
+ }
+}
diff --git a/system-settings/plugins/ifnet/wpa_parser.h b/system-settings/plugins/ifnet/wpa_parser.h
new file mode 100644
index 0000000000..55b0ec0c60
--- /dev/null
+++ b/system-settings/plugins/ifnet/wpa_parser.h
@@ -0,0 +1,40 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * Mu Qiao <qiaomuf@gmail.com>
+ *
+ * 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) 1999-2010 Gentoo Foundation, Inc.
+ */
+
+#ifndef _WPA_PARSER_H
+#define _WPA_PARSER_H
+#define WPA_SUPPLICANT_CONF "/etc/wpa_supplicant/wpa_supplicant.conf"
+#include <glib.h>
+void wpa_parser_init (gchar * wpa_supplicant_conf);
+void wpa_parser_destroy (void);
+
+/* reader functions */
+gchar *wpa_get_value (gchar * ssid, gchar * key);
+gboolean exist_ssid (gchar * ssid);
+GHashTable *_get_hash_table (gchar * ssid);
+gboolean wpa_has_security (gchar * ssid);
+
+/* writer functions */
+gboolean wpa_flush_to_file (gchar * config_file);
+void wpa_set_data (gchar * ssid, gchar * key, gchar * value);
+gboolean wpa_add_security (gchar * ssid);
+gboolean wpa_delete_security (gchar * ssid);
+#endif
diff --git a/system-settings/plugins/ifupdown/Makefile.am b/system-settings/plugins/ifupdown/Makefile.am
index ec50311554..652e545fce 100644
--- a/system-settings/plugins/ifupdown/Makefile.am
+++ b/system-settings/plugins/ifupdown/Makefile.am
@@ -1,3 +1,4 @@
+SUBDIRS=. tests
INCLUDES = \
-I$(top_srcdir)/src/system-settings \
@@ -5,15 +6,30 @@ INCLUDES = \
-I$(top_srcdir)/libnm-glib \
-I$(top_srcdir)/libnm-util
-pkglib_LTLIBRARIES = libnm-settings-plugin-ifupdown.la
+noinst_LTLIBRARIES = libifupdown-io.la
-libnm_settings_plugin_ifupdown_la_SOURCES = \
+libifupdown_io_la_SOURCES = \
interface_parser.c \
interface_parser.h \
+ parser.c \
+ parser.h
+
+libifupdown_io_la_CPPFLAGS = \
+ $(GLIB_CFLAGS) \
+ $(DBUS_CFLAGS) \
+ -DG_DISABLE_DEPRECATED \
+ -DSYSCONFDIR=\"$(sysconfdir)\"
+
+libifupdown_io_la_LIBADD = \
+ $(top_builddir)/libnm-util/libnm-util.la \
+ $(GLIB_LIBS) \
+ $(GMODULE_LIBS)
+
+pkglib_LTLIBRARIES = libnm-settings-plugin-ifupdown.la
+
+libnm_settings_plugin_ifupdown_la_SOURCES = \
nm-ifupdown-connection.c \
nm-ifupdown-connection.h \
- parser.c \
- parser.h \
plugin.c \
plugin.h
@@ -28,6 +44,7 @@ libnm_settings_plugin_ifupdown_la_CPPFLAGS = \
libnm_settings_plugin_ifupdown_la_LDFLAGS = -module -avoid-version
libnm_settings_plugin_ifupdown_la_LIBADD = \
$(top_builddir)/libnm-util/libnm-util.la \
+ libifupdown-io.la \
$(GLIB_LIBS) \
$(GMODULE_LIBS) \
$(GUDEV_LIBS)
diff --git a/system-settings/plugins/ifupdown/interface_parser.c b/system-settings/plugins/ifupdown/interface_parser.c
index f28cf7cab1..4635db2ca1 100644
--- a/system-settings/plugins/ifupdown/interface_parser.c
+++ b/system-settings/plugins/ifupdown/interface_parser.c
@@ -73,85 +73,147 @@ void add_data(const char *key,const char *data)
//printf("added data '%s' with key '%s'\n",data,key);
}
-#define SPACE_OR_TAB(string,ret) {ret = strchr(string,' ');ret=(ret == NULL?strchr(string,'\t'):ret);}
+// join values in src with spaces into dst; dst needs to be large enough
+static char *join_values_with_spaces(char *dst, char **src)
+{
+ if (dst != NULL) {
+ *dst = '\0';
+ if (src != NULL && *src != NULL) {
+ strcat(dst, *src);
+
+ for (src++; *src != NULL; src++) {
+ strcat(dst, " ");
+ strcat(dst, *src);
+ }
+ }
+ }
+ return(dst);
+}
-void ifparser_init(void)
+void ifparser_init (const char *eni_file, int quiet)
{
- FILE *inp = fopen(ENI_INTERFACES_FILE, "r");
- int ret = 0;
- char *line;
- char *space;
- char rline[255];
+ FILE *inp = fopen (eni_file, "r");
+ char line[255];
+ int skip_to_block = 1;
+ int skip_long_line = 0;
+ int offs = 0;
- if (inp == NULL)
- {
- nm_warning ("Error: Can't open %s\n", ENI_INTERFACES_FILE);
+ if (inp == NULL) {
+ if (!quiet)
+ g_warning ("Error: Can't open %s\n", eni_file);
return;
}
+
first = last = NULL;
- while(1)
+ while (!feof(inp))
{
- line = space = NULL;
- ret = fscanf(inp,"%255[^\n]\n",rline);
- if (ret == EOF)
+ char *token[128]; // 255 chars can only be split into 127 tokens
+ char value[255]; // large enough to join previously split tokens
+ char *safeptr;
+ int toknum;
+ int len = 0;
+
+ char *ptr = fgets(line+offs, 255-offs, inp);
+ if (ptr == NULL)
break;
- // If the line did not match, skip it
- if (ret == 0) {
- char *ignored;
- ignored = fgets(rline, 255, inp);
+ len = strlen(line);
+ // skip over-long lines
+ if (!feof(inp) && len > 0 && line[len-1] != '\n') {
+ if (!skip_long_line) {
+ if (!quiet)
+ g_message ("Error: Skipping over-long-line '%s...'\n", line);
+ }
+ skip_long_line = 1;
+ continue;
+ }
+
+ // trailing '\n' found: remove it & reset offset to 0
+ if (len > 0 && line[len-1] == '\n') {
+ line[--len] = '\0';
+ offs = 0;
+ }
+
+ // if we're in long_line_skip mode, terminate it for real next line
+ if (skip_long_line) {
+ if (len == 0 || line[len-1] != '\\')
+ skip_long_line = 0;
continue;
}
- line = rline;
- while(line[0] == ' ')
- line++;
- if (line[0]=='#' || line[0]=='\0')
+ // unwrap wrapped lines
+ if (len > 0 && line[len-1] == '\\') {
+ offs = len - 1;
continue;
+ }
- SPACE_OR_TAB(line,space)
- if (space == NULL)
- {
- nm_warning ("Error: Can't parse interface line '%s'\n",line);
- continue;
+ //printf(">>%s<<\n", line);
+
+#define SPACES " \t"
+ // tokenize input;
+ for (toknum = 0, token[toknum] = strtok_r(line, SPACES, &safeptr);
+ token[toknum] != NULL;
+ toknum++, token[toknum] = strtok_r(NULL, SPACES, &safeptr))
+ ;
+
+ // ignore comments and empty lines
+ if (toknum == 0 || *token[0]=='#')
+ continue;
+
+ if (toknum < 2) {
+ if (!quiet) {
+ g_message ("Error: Can't parse interface line '%s'\n",
+ join_values_with_spaces(value, token));
}
- space[0] = '\0';
+ skip_to_block = 1;
+ continue;
+ }
// There are four different stanzas:
// iface, mapping, auto and allow-*. Create a block for each of them.
- if (strcmp(line,"iface")==0)
- {
- char *space2 = strchr(space+1,' ');
- if (space2 == NULL)
- {
- nm_warning ("Error: Can't parse iface line '%s'\n",space+1);
+
+ // iface stanza takes at least 3 parameters
+ if (strcmp(token[0], "iface") == 0) {
+ if (toknum < 4) {
+ if (!quiet) {
+ g_message ("Error: Can't parse iface line '%s'\n",
+ join_values_with_spaces(value, token));
+ }
continue;
}
- space2[0]='\0';
- add_block(line,space+1);
-
- if (space2[1]!='\0')
- {
- space = strchr(space2+1,' ');
- if (space == NULL)
- {
- nm_warning ("Error: Can't parse data '%s'\n",space2+1);
- continue;
+ add_block(token[0], token[1]);
+ skip_to_block = 0;
+ add_data(token[2], join_values_with_spaces(value, token + 3));
+ }
+ // auto and allow-auto stanzas are equivalent,
+ // both can take multiple interfaces as parameters: add one block for each
+ else if (strcmp(token[0], "auto") == 0 ||
+ strcmp(token[0], "allow-auto") == 0) {
+ int i;
+ for (i = 1; i < toknum; i++)
+ add_block("auto", token[i]);
+ skip_to_block = 0;
+ }
+ else if (strcmp(token[0], "mapping") == 0) {
+ add_block(token[0], join_values_with_spaces(value, token + 1));
+ skip_to_block = 0;
+ }
+ // allow-* can take multiple interfaces as parameters: add one block for each
+ else if (strncmp(token[0],"allow-",6) == 0) {
+ int i;
+ for (i = 1; i < toknum; i++)
+ add_block(token[0], token[i]);
+ skip_to_block = 0;
+ }
+ else {
+ if (skip_to_block) {
+ if (!quiet) {
+ g_message ("Error: ignoring out-of-block data '%s'\n",
+ join_values_with_spaces(value, token));
}
- space[0] = '\0';
- add_data(space2+1,space+1);
- }
+ } else
+ add_data(token[0], join_values_with_spaces(value, token + 1));
}
- else if (strcmp(line,"auto")==0)
- add_block(line,space+1);
- else if (strcmp(line,"mapping")==0)
- add_block(line,space+1);
- else if (strncmp(line,"allow-",6)==0)
- add_block(line,space+1);
- else
- add_data(line,space+1);
-
- //printf("line: '%s' ret=%d\n",rline,ret);
}
fclose(inp);
}
@@ -190,6 +252,18 @@ if_block *ifparser_getfirst(void)
return first;
}
+int ifparser_get_num_blocks(void)
+{
+ int i = 0;
+ if_block *iter = first;
+
+ while (iter) {
+ i++;
+ iter = iter->next;
+ }
+ return i;
+}
+
if_block *ifparser_getif(const char* iface)
{
if_block *curr = first;
@@ -213,3 +287,15 @@ const char *ifparser_getkey(if_block* iface, const char *key)
}
return NULL;
}
+
+int ifparser_get_num_info(if_block* iface)
+{
+ int i = 0;
+ if_data *iter = iface->info;
+
+ while (iter) {
+ i++;
+ iter = iter->next;
+ }
+ return i;
+}
diff --git a/system-settings/plugins/ifupdown/interface_parser.h b/system-settings/plugins/ifupdown/interface_parser.h
index 52b98d04c4..ea991c32d1 100644
--- a/system-settings/plugins/ifupdown/interface_parser.h
+++ b/system-settings/plugins/ifupdown/interface_parser.h
@@ -26,8 +26,6 @@
#include "config.h"
-#define ENI_INTERFACES_FILE "/etc/network/interfaces"
-
typedef struct _if_data
{
char *key;
@@ -43,12 +41,14 @@ typedef struct _if_block
struct _if_block *next;
} if_block;
-void ifparser_init(void);
+void ifparser_init(const char *eni_file, int quiet);
void ifparser_destroy(void);
if_block *ifparser_getif(const char* iface);
if_block *ifparser_getfirst(void);
const char *ifparser_getkey(if_block* iface, const char *key);
+int ifparser_get_num_blocks(void);
+int ifparser_get_num_info(if_block* iface);
void add_block(const char *type, const char* name);
void add_data(const char *key,const char *data);
diff --git a/system-settings/plugins/ifupdown/nm-ifupdown-connection.h b/system-settings/plugins/ifupdown/nm-ifupdown-connection.h
index 4eb20e5032..2aa74df6b7 100644
--- a/system-settings/plugins/ifupdown/nm-ifupdown-connection.h
+++ b/system-settings/plugins/ifupdown/nm-ifupdown-connection.h
@@ -39,11 +39,11 @@ G_BEGIN_DECLS
#define NM_IFUPDOWN_CONNECTION_IFBLOCK "ifblock"
typedef struct {
- NMExportedConnection parent;
+ NMSysconfigConnection parent;
} NMIfupdownConnection;
typedef struct {
- NMExportedConnectionClass parent;
+ NMSysconfigConnectionClass parent;
} NMIfupdownConnectionClass;
GType nm_ifupdown_connection_get_type (void);
diff --git a/system-settings/plugins/ifupdown/plugin.c b/system-settings/plugins/ifupdown/plugin.c
index e2358b9f51..8cfbedcd64 100644
--- a/system-settings/plugins/ifupdown/plugin.c
+++ b/system-settings/plugins/ifupdown/plugin.c
@@ -55,6 +55,8 @@
#define G_UDEV_API_IS_SUBJECT_TO_CHANGE
#include <gudev/gudev.h>
+#define ENI_INTERFACES_FILE "/etc/network/interfaces"
+
#define IFUPDOWN_PLUGIN_NAME "ifupdown"
#define IFUPDOWN_PLUGIN_INFO "(C) 2008 Canonical Ltd. To report bugs please use the NetworkManager mailing list."
#define IFUPDOWN_SYSTEM_HOSTNAME_FILE "/etc/hostname"
@@ -355,17 +357,60 @@ SCPluginIfupdown_init (NMSystemConfigInterface *config)
update_system_hostname (inotify_helper, NULL, NULL, config);
/* Read in all the interfaces */
- ifparser_init ();
+ ifparser_init (ENI_INTERFACES_FILE, 0);
block = ifparser_getfirst ();
while (block) {
if(!strcmp ("auto", block->type) || !strcmp ("allow-hotplug", block->type))
g_hash_table_insert (auto_ifaces, block->name, GUINT_TO_POINTER (1));
- else if (!strcmp ("iface", block->type) && strcmp ("lo", block->name)) {
+ else if (!strcmp ("iface", block->type)) {
NMIfupdownConnection *exported;
+ /* Bridge configuration */
+ if(!strncmp ("br", block->name, 2)) {
+ /* Try to find bridge ports */
+ const char *ports = ifparser_getkey (block, "bridge_ports");
+ if (ports) {
+ int i;
+ int state = 0;
+ char **port_ifaces;
+
+ PLUGIN_PRINT("SCPlugin-Ifupdown", "found bridge ports %s for %s", ports, block->name);
+
+ port_ifaces = g_strsplit_set (ports, " \t", -1);
+ for (i = 0; i < g_strv_length (port_ifaces); i++) {
+ char *token = port_ifaces[i];
+ /* Skip crazy stuff like regex or all */
+ if (!strcmp ("all", token)) {
+ continue;
+ }
+ /* Small SM to skip everything inside regex */
+ if (!strcmp ("regex", token)) {
+ state++;
+ continue;
+ }
+ if (!strcmp ("noregex", token)) {
+ state--;
+ continue;
+ }
+ if (state == 0 && strlen (token) > 0) {
+ PLUGIN_PRINT("SCPlugin-Ifupdown", "adding bridge port %s to well_known_interfaces", token);
+ g_hash_table_insert (priv->well_known_interfaces, g_strdup (token), "known");
+ }
+ }
+ g_strfreev (port_ifaces);
+ }
+ goto next;
+ }
+
+ /* Skip loopback configuration */
+ if(!strcmp ("lo", block->name)) {
+ goto next;
+ }
+
/* Remove any connection for this block that was previously found */
exported = g_hash_table_lookup (priv->iface_connections, block->name);
if (exported) {
+ PLUGIN_PRINT("SCPlugin-Ifupdown", "deleting %s from iface_connections", block->name);
nm_settings_connection_interface_delete (NM_SETTINGS_CONNECTION_INTERFACE (exported),
ignore_cb,
NULL);
@@ -375,12 +420,16 @@ SCPluginIfupdown_init (NMSystemConfigInterface *config)
/* add the new connection */
exported = nm_ifupdown_connection_new (block);
if (exported) {
+ PLUGIN_PRINT("SCPlugin-Ifupdown", "adding %s to iface_connections", block->name);
g_hash_table_insert (priv->iface_connections, block->name, exported);
- g_hash_table_insert (priv->well_known_interfaces, block->name, "known");
}
+ PLUGIN_PRINT("SCPlugin-Ifupdown", "adding iface %s to well_known_interfaces", block->name);
+ g_hash_table_insert (priv->well_known_interfaces, block->name, "known");
} else if (!strcmp ("mapping", block->type)) {
g_hash_table_insert (priv->well_known_interfaces, block->name, "known");
+ PLUGIN_PRINT("SCPlugin-Ifupdown", "adding mapping %s to well_known_interfaces", block->name);
}
+ next:
block = block->next;
}
@@ -563,6 +612,12 @@ update_system_hostname(NMInotifyHelper *inotify_helper,
priv->hostname = g_strstrip(hostname_file);
+ /* We shouldn't return a zero-length hostname, but NULL */
+ if (priv->hostname && !strlen (priv->hostname)) {
+ g_free (priv->hostname);
+ priv->hostname = NULL;
+ }
+
g_object_notify (G_OBJECT (config), NM_SYSTEM_CONFIG_INTERFACE_HOSTNAME);
}
diff --git a/system-settings/plugins/ifupdown/tests/Makefile.am b/system-settings/plugins/ifupdown/tests/Makefile.am
new file mode 100644
index 0000000000..b5dbd13d63
--- /dev/null
+++ b/system-settings/plugins/ifupdown/tests/Makefile.am
@@ -0,0 +1,32 @@
+INCLUDES = \
+ -I$(top_srcdir)/include \
+ -I$(top_srcdir)/libnm-util \
+ -I$(top_srcdir)/libnm-glib \
+ -I$(top_srcdir)/system-settings/plugins/ifupdown
+
+noinst_PROGRAMS = test-ifupdown
+
+test_ifupdown_SOURCES = \
+ test-ifupdown.c
+
+test_ifupdown_CPPFLAGS = \
+ $(GLIB_CFLAGS) \
+ $(DBUS_CFLAGS) \
+ -DTEST_ENI_DIR=\"$(abs_srcdir)\"
+
+test_ifupdown_LDADD = \
+ $(top_builddir)/libnm-glib/libnm-glib.la \
+ $(top_builddir)/libnm-util/libnm-util.la \
+ $(top_builddir)/system-settings/plugins/ifupdown/libifupdown-io.la \
+ $(DBUS_LIBS)
+
+if WITH_TESTS
+
+check-local: test-ifupdown
+ $(abs_builddir)/test-ifupdown
+
+endif
+
+EXTRA_DIST = \
+ test1 test2 test3 test4 test5 test6 test7 test8 test9 test11 test12 \
+ test13 test14 test15 test16
diff --git a/system-settings/plugins/ifupdown/tests/test-ifupdown.c b/system-settings/plugins/ifupdown/tests/test-ifupdown.c
new file mode 100644
index 0000000000..1646536452
--- /dev/null
+++ b/system-settings/plugins/ifupdown/tests/test-ifupdown.c
@@ -0,0 +1,496 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, 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) 2010 Red Hat, Inc.
+ *
+ */
+
+#include <glib.h>
+#include <string.h>
+
+#include "interface_parser.h"
+#include "parser.h"
+
+typedef struct {
+ char *key;
+ char *data;
+} ExpectedKey;
+
+typedef struct {
+ char *type;
+ char *name;
+ GSList *keys;
+} ExpectedBlock;
+
+typedef struct {
+ GSList *blocks;
+} Expected;
+
+static ExpectedKey *
+expected_key_new (const char *key, const char *data)
+{
+ ExpectedKey *k;
+
+ k = g_malloc0 (sizeof (ExpectedKey));
+ g_assert (k);
+ k->key = g_strdup (key);
+ g_assert (k->key);
+ k->data = g_strdup (data);
+ g_assert (k->data);
+ return k;
+}
+
+static void
+expected_key_free (ExpectedKey *k)
+{
+ g_assert (k);
+ g_free (k->key);
+ g_free (k->data);
+ memset (k, 0, sizeof (ExpectedKey));
+ g_free (k);
+}
+
+static ExpectedBlock *
+expected_block_new (const char *type, const char *name)
+{
+ ExpectedBlock *b;
+
+ g_assert (type);
+ g_assert (name);
+ b = g_malloc0 (sizeof (ExpectedBlock));
+ g_assert (b);
+ b->type = g_strdup (type);
+ b->name = g_strdup (name);
+ return b;
+}
+
+static void
+expected_block_free (ExpectedBlock *b)
+{
+ g_assert (b);
+ g_slist_foreach (b->keys, (GFunc) expected_key_free, NULL);
+ g_slist_free (b->keys);
+ g_free (b->type);
+ g_free (b->name);
+ memset (b, 0, sizeof (ExpectedBlock));
+ g_free (b);
+}
+
+static void
+expected_block_add_key (ExpectedBlock *b, ExpectedKey *k)
+{
+ g_assert (b);
+ g_assert (k);
+ b->keys = g_slist_append (b->keys, k);
+}
+
+static Expected *
+expected_new (void)
+{
+ Expected *e;
+
+ e = g_malloc0 (sizeof (Expected));
+ g_assert (e);
+ return e;
+}
+
+static void
+expected_add_block (Expected *e, ExpectedBlock *b)
+{
+ g_assert (e);
+ g_assert (b);
+ e->blocks = g_slist_append (e->blocks, b);
+}
+
+static void
+expected_free (Expected *e)
+{
+ g_assert (e);
+ g_slist_foreach (e->blocks, (GFunc) expected_block_free, NULL);
+ g_slist_free (e->blocks);
+ memset (e, 0, sizeof (Expected));
+ g_free (e);
+}
+
+static void
+compare_expected_to_ifparser (Expected *e)
+{
+ if_block *n;
+ GSList *biter, *kiter;
+
+ g_assert_cmpint (g_slist_length (e->blocks), ==, ifparser_get_num_blocks ());
+
+ for (n = ifparser_getfirst (), biter = e->blocks;
+ n && biter;
+ n = n->next, biter = g_slist_next (biter)) {
+ if_data *m;
+ ExpectedBlock *b = biter->data;
+
+ g_assert (b->type && n->type);
+ g_assert_cmpstr (b->type, ==, n->type);
+ g_assert (b->name && n->name);
+ g_assert_cmpstr (b->name, ==, n->name);
+
+ g_assert_cmpint (g_slist_length (b->keys), ==, ifparser_get_num_info (n));
+
+ for (m = n->info, kiter = b->keys;
+ m && kiter;
+ m = m->next, kiter = g_slist_next (kiter)) {
+ ExpectedKey *k = kiter->data;
+
+ g_assert (k->key && m->key);
+ g_assert_cmpstr (k->key, ==, m->key);
+ g_assert (k->data && m->data);
+ g_assert_cmpstr (k->data, ==, m->data);
+ }
+ }
+}
+
+static void
+dump_blocks (void)
+{
+ if_block *n;
+
+ g_message ("\n***************************************************");
+ for (n = ifparser_getfirst (); n != NULL; n = n->next) {
+ if_data *m;
+
+ // each block start with its type & name
+ // (single quotes used to show typ & name baoundaries)
+ g_print("'%s' '%s'\n", n->type, n->name);
+
+ // each key-value pair within a block is indented & separated by a tab
+ // (single quotes used to show typ & name baoundaries)
+ for (m = n->info; m != NULL; m = m->next)
+ g_print("\t'%s'\t'%s'\n", m->key, m->data);
+
+ // blocks are separated by an empty line
+ g_print("\n");
+ }
+ g_message ("##################################################\n");
+}
+
+static void
+init_ifparser_with_file (const char *path, const char *file)
+{
+ char *tmp;
+
+ tmp = g_strdup_printf ("%s/%s", path, file);
+ ifparser_init (tmp, 1);
+ g_free (tmp);
+}
+
+static void
+test1_ignore_line_before_first_block (const char *path)
+{
+ Expected *e;
+ ExpectedBlock *b;
+
+ e = expected_new ();
+ b = expected_block_new ("auto", "eth0");
+ expected_add_block (e, b);
+ b = expected_block_new ("iface", "eth0");
+ expected_add_block (e, b);
+ expected_block_add_key (b, expected_key_new ("inet", "dhcp"));
+
+ init_ifparser_with_file (path, "test1");
+ compare_expected_to_ifparser (e);
+
+ ifparser_destroy ();
+ expected_free (e);
+}
+
+static void
+test2_wrapped_line (const char *path)
+{
+ Expected *e;
+ ExpectedBlock *b;
+
+ e = expected_new ();
+ b = expected_block_new ("auto", "lo");
+ expected_add_block (e, b);
+
+ init_ifparser_with_file (path, "test2");
+ compare_expected_to_ifparser (e);
+
+ ifparser_destroy ();
+ expected_free (e);
+}
+
+static void
+test3_wrapped_multiline_multiarg (const char *path)
+{
+ Expected *e;
+ ExpectedBlock *b;
+
+ e = expected_new ();
+ b = expected_block_new ("allow-hotplug", "eth0");
+ expected_add_block (e, b);
+ b = expected_block_new ("allow-hotplug", "wlan0");
+ expected_add_block (e, b);
+ b = expected_block_new ("allow-hotplug", "bnep0");
+ expected_add_block (e, b);
+
+ init_ifparser_with_file (path, "test3");
+ compare_expected_to_ifparser (e);
+
+ ifparser_destroy ();
+ expected_free (e);
+}
+
+static void
+test4_allow_auto_is_auto (const char *path)
+{
+ Expected *e;
+ ExpectedBlock *b;
+
+ e = expected_new ();
+ b = expected_block_new ("auto", "eth0");
+ expected_add_block (e, b);
+
+ init_ifparser_with_file (path, "test4");
+ compare_expected_to_ifparser (e);
+
+ ifparser_destroy ();
+ expected_free (e);
+}
+
+static void
+test5_allow_auto_multiarg (const char *path)
+{
+ Expected *e;
+ ExpectedBlock *b;
+
+ e = expected_new ();
+ b = expected_block_new ("allow-hotplug", "eth0");
+ expected_add_block (e, b);
+ b = expected_block_new ("allow-hotplug", "wlan0");
+ expected_add_block (e, b);
+
+ init_ifparser_with_file (path, "test5");
+ compare_expected_to_ifparser (e);
+
+ ifparser_destroy ();
+ expected_free (e);
+}
+
+static void
+test6_mixed_whitespace (const char *path)
+{
+ Expected *e;
+ ExpectedBlock *b;
+
+ e = expected_new ();
+ b = expected_block_new ("iface", "lo");
+ expected_block_add_key (b, expected_key_new ("inet", "loopback"));
+ expected_add_block (e, b);
+
+ init_ifparser_with_file (path, "test6");
+ compare_expected_to_ifparser (e);
+
+ ifparser_destroy ();
+ expected_free (e);
+}
+
+static void
+test7_long_line (const char *path)
+{
+ init_ifparser_with_file (path, "test7");
+ g_assert_cmpint (ifparser_get_num_blocks (), ==, 0);
+ ifparser_destroy ();
+}
+
+static void
+test8_long_line_wrapped (const char *path)
+{
+ init_ifparser_with_file (path, "test8");
+ g_assert_cmpint (ifparser_get_num_blocks (), ==, 0);
+ ifparser_destroy ();
+}
+
+static void
+test9_wrapped_lines_in_block (const char *path)
+{
+ Expected *e;
+ ExpectedBlock *b;
+
+ e = expected_new ();
+ b = expected_block_new ("iface", "eth0");
+ expected_add_block (e, b);
+ expected_block_add_key (b, expected_key_new ("inet", "static"));
+ expected_block_add_key (b, expected_key_new ("address", "10.250.2.3"));
+ expected_block_add_key (b, expected_key_new ("netmask", "255.255.255.192"));
+ expected_block_add_key (b, expected_key_new ("broadcast", "10.250.2.63"));
+ expected_block_add_key (b, expected_key_new ("gateway", "10.250.2.50"));
+
+ init_ifparser_with_file (path, "test9");
+ compare_expected_to_ifparser (e);
+
+ ifparser_destroy ();
+ expected_free (e);
+}
+
+static void
+test11_complex_wrap (const char *path)
+{
+ Expected *e;
+ ExpectedBlock *b;
+
+ e = expected_new ();
+ b = expected_block_new ("iface", "pppoe");
+ expected_add_block (e, b);
+ expected_block_add_key (b, expected_key_new ("inet", "manual"));
+ expected_block_add_key (b, expected_key_new ("pre-up", "/sbin/ifconfig eth0 up"));
+
+ init_ifparser_with_file (path, "test11");
+ compare_expected_to_ifparser (e);
+
+ ifparser_destroy ();
+ expected_free (e);
+}
+
+static void
+test12_complex_wrap_split_word (const char *path)
+{
+ Expected *e;
+ ExpectedBlock *b;
+
+ e = expected_new ();
+ b = expected_block_new ("iface", "pppoe");
+ expected_add_block (e, b);
+ expected_block_add_key (b, expected_key_new ("inet", "manual"));
+ expected_block_add_key (b, expected_key_new ("up", "ifup ppp0=dsl"));
+
+ init_ifparser_with_file (path, "test12");
+ compare_expected_to_ifparser (e);
+
+ ifparser_destroy ();
+ expected_free (e);
+}
+
+static void
+test13_more_mixed_whitespace (const char *path)
+{
+ Expected *e;
+ ExpectedBlock *b;
+
+ e = expected_new ();
+ b = expected_block_new ("iface", "dsl");
+ expected_block_add_key (b, expected_key_new ("inet", "ppp"));
+ expected_add_block (e, b);
+
+ init_ifparser_with_file (path, "test13");
+ compare_expected_to_ifparser (e);
+
+ ifparser_destroy ();
+ expected_free (e);
+}
+
+static void
+test14_mixed_whitespace_block_start (const char *path)
+{
+ Expected *e;
+ ExpectedBlock *b;
+
+ e = expected_new ();
+ b = expected_block_new ("iface", "wlan0");
+ expected_block_add_key (b, expected_key_new ("inet", "manual"));
+ expected_add_block (e, b);
+ b = expected_block_new ("iface", "wlan-adpm");
+ expected_block_add_key (b, expected_key_new ("inet", "dhcp"));
+ expected_add_block (e, b);
+ b = expected_block_new ("iface", "wlan-default");
+ expected_block_add_key (b, expected_key_new ("inet", "dhcp"));
+ expected_add_block (e, b);
+
+ init_ifparser_with_file (path, "test14");
+ compare_expected_to_ifparser (e);
+
+ ifparser_destroy ();
+ expected_free (e);
+}
+
+static void
+test15_trailing_space (const char *path)
+{
+ Expected *e;
+ ExpectedBlock *b;
+
+ e = expected_new ();
+ b = expected_block_new ("iface", "bnep0");
+ expected_block_add_key (b, expected_key_new ("inet", "static"));
+ expected_add_block (e, b);
+
+ init_ifparser_with_file (path, "test15");
+ compare_expected_to_ifparser (e);
+
+ ifparser_destroy ();
+ expected_free (e);
+}
+
+static void
+test16_missing_newline (const char *path)
+{
+ Expected *e;
+
+ e = expected_new ();
+ expected_add_block (e, expected_block_new ("mapping", "eth0"));
+
+ init_ifparser_with_file (path, "test16");
+ compare_expected_to_ifparser (e);
+
+ ifparser_destroy ();
+ expected_free (e);
+}
+
+#if GLIB_CHECK_VERSION(2,25,12)
+typedef GTestFixtureFunc TCFunc;
+#else
+typedef void (*TCFunc)(void);
+#endif
+
+#define TESTCASE(t, d) g_test_create_case (#t, 0, d, NULL, (TCFunc) t, NULL)
+
+int main (int argc, char **argv)
+{
+ GTestSuite *suite;
+
+ g_test_init (&argc, &argv, NULL);
+
+ suite = g_test_get_root ();
+
+ if (0)
+ dump_blocks ();
+
+ g_test_suite_add (suite, TESTCASE (test1_ignore_line_before_first_block, TEST_ENI_DIR));
+ g_test_suite_add (suite, TESTCASE (test2_wrapped_line, TEST_ENI_DIR));
+ g_test_suite_add (suite, TESTCASE (test3_wrapped_multiline_multiarg, TEST_ENI_DIR));
+ g_test_suite_add (suite, TESTCASE (test4_allow_auto_is_auto, TEST_ENI_DIR));
+ g_test_suite_add (suite, TESTCASE (test5_allow_auto_multiarg, TEST_ENI_DIR));
+ g_test_suite_add (suite, TESTCASE (test6_mixed_whitespace, TEST_ENI_DIR));
+ g_test_suite_add (suite, TESTCASE (test7_long_line, TEST_ENI_DIR));
+ g_test_suite_add (suite, TESTCASE (test8_long_line_wrapped, TEST_ENI_DIR));
+ g_test_suite_add (suite, TESTCASE (test9_wrapped_lines_in_block, TEST_ENI_DIR));
+ g_test_suite_add (suite, TESTCASE (test11_complex_wrap, TEST_ENI_DIR));
+ g_test_suite_add (suite, TESTCASE (test12_complex_wrap_split_word, TEST_ENI_DIR));
+ g_test_suite_add (suite, TESTCASE (test13_more_mixed_whitespace, TEST_ENI_DIR));
+ g_test_suite_add (suite, TESTCASE (test14_mixed_whitespace_block_start, TEST_ENI_DIR));
+ g_test_suite_add (suite, TESTCASE (test15_trailing_space, TEST_ENI_DIR));
+ g_test_suite_add (suite, TESTCASE (test16_missing_newline, TEST_ENI_DIR));
+
+ return g_test_run ();
+}
+
diff --git a/system-settings/plugins/ifupdown/tests/test1 b/system-settings/plugins/ifupdown/tests/test1
new file mode 100644
index 0000000000..74c23b457d
--- /dev/null
+++ b/system-settings/plugins/ifupdown/tests/test1
@@ -0,0 +1,6 @@
+# case 1: line before 1st block (must be ignored)
+address 10.250.2.3
+
+auto eth0
+iface eth0 inet dhcp
+
diff --git a/system-settings/plugins/ifupdown/tests/test11 b/system-settings/plugins/ifupdown/tests/test11
new file mode 100644
index 0000000000..89561dd7df
--- /dev/null
+++ b/system-settings/plugins/ifupdown/tests/test11
@@ -0,0 +1,5 @@
+iface pppoe inet manual
+# case 11: wrapped line (without leading space on the wrapped part, wrap within a multi-word value)
+ pre-up /sbin/ifconfig \
+eth0 up
+
diff --git a/system-settings/plugins/ifupdown/tests/test12 b/system-settings/plugins/ifupdown/tests/test12
new file mode 100644
index 0000000000..6096842e1e
--- /dev/null
+++ b/system-settings/plugins/ifupdown/tests/test12
@@ -0,0 +1,5 @@
+iface pppoe inet manual
+# case 12: wrapped line, splitting a word (must be joined again)
+ up ifup ppp0\
+=dsl
+
diff --git a/system-settings/plugins/ifupdown/tests/test13 b/system-settings/plugins/ifupdown/tests/test13
new file mode 100644
index 0000000000..c001f7ef1b
--- /dev/null
+++ b/system-settings/plugins/ifupdown/tests/test13
@@ -0,0 +1,3 @@
+# case 13: variations of tabs & spaces
+iface dsl inet ppp
+
diff --git a/system-settings/plugins/ifupdown/tests/test14 b/system-settings/plugins/ifupdown/tests/test14
new file mode 100644
index 0000000000..4a153ab3b5
--- /dev/null
+++ b/system-settings/plugins/ifupdown/tests/test14
@@ -0,0 +1,5 @@
+# case 14: variations of tabs and spaces (all must be recognized as lines starting an iface block)
+iface wlan0 inet manual
+ iface wlan-adpm inet dhcp
+iface wlan-default inet dhcp
+
diff --git a/system-settings/plugins/ifupdown/tests/test15 b/system-settings/plugins/ifupdown/tests/test15
new file mode 100644
index 0000000000..c3ceca2409
--- /dev/null
+++ b/system-settings/plugins/ifupdown/tests/test15
@@ -0,0 +1,3 @@
+# case 15: trailing space (must be ignored)
+iface bnep0 inet static
+
diff --git a/system-settings/plugins/ifupdown/tests/test16 b/system-settings/plugins/ifupdown/tests/test16
new file mode 100644
index 0000000000..f4f74fb5a1
--- /dev/null
+++ b/system-settings/plugins/ifupdown/tests/test16
@@ -0,0 +1,2 @@
+# case 16: last line that is not followed by LF (added with 'echo -n "mapping eth0" >> /e/n/i')
+mapping eth0 \ No newline at end of file
diff --git a/system-settings/plugins/ifupdown/tests/test2 b/system-settings/plugins/ifupdown/tests/test2
new file mode 100644
index 0000000000..7462b35268
--- /dev/null
+++ b/system-settings/plugins/ifupdown/tests/test2
@@ -0,0 +1,4 @@
+# case 2: wrapped line
+auto \
+lo
+
diff --git a/system-settings/plugins/ifupdown/tests/test3 b/system-settings/plugins/ifupdown/tests/test3
new file mode 100644
index 0000000000..f6293bbdc6
--- /dev/null
+++ b/system-settings/plugins/ifupdown/tests/test3
@@ -0,0 +1,5 @@
+# case 3: line wrapped over multiple lines & multi-argument allow-*
+allow-hotplug eth0 \
+ wlan0 \
+ bnep0
+
diff --git a/system-settings/plugins/ifupdown/tests/test4 b/system-settings/plugins/ifupdown/tests/test4
new file mode 100644
index 0000000000..46a40bc9c2
--- /dev/null
+++ b/system-settings/plugins/ifupdown/tests/test4
@@ -0,0 +1,3 @@
+# case 4: 'allow-auto' is synonymous to 'auto'
+allow-auto eth0
+
diff --git a/system-settings/plugins/ifupdown/tests/test5 b/system-settings/plugins/ifupdown/tests/test5
new file mode 100644
index 0000000000..b69fc42bd0
--- /dev/null
+++ b/system-settings/plugins/ifupdown/tests/test5
@@ -0,0 +1,3 @@
+# case 5: multi-argument allow-* (even worse: trailing space)
+allow-hotplug eth0 wlan0
+
diff --git a/system-settings/plugins/ifupdown/tests/test6 b/system-settings/plugins/ifupdown/tests/test6
new file mode 100644
index 0000000000..50ac69bd98
--- /dev/null
+++ b/system-settings/plugins/ifupdown/tests/test6
@@ -0,0 +1,3 @@
+# case 6: mix between tabs and spaces
+ iface lo inet loopback
+
diff --git a/system-settings/plugins/ifupdown/tests/test7 b/system-settings/plugins/ifupdown/tests/test7
new file mode 100644
index 0000000000..03cb131a98
--- /dev/null
+++ b/system-settings/plugins/ifupdown/tests/test7
@@ -0,0 +1,3 @@
+# case 7: over-long line (must be ignored completely)
+123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789
+
diff --git a/system-settings/plugins/ifupdown/tests/test8 b/system-settings/plugins/ifupdown/tests/test8
new file mode 100644
index 0000000000..311f7e15a4
--- /dev/null
+++ b/system-settings/plugins/ifupdown/tests/test8
@@ -0,0 +1,5 @@
+# case 8: over-long line that wraps to consecutive lines (must be ignored completely)
+123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 \
+allow-test eth0 \
+eth0
+
diff --git a/system-settings/plugins/ifupdown/tests/test9 b/system-settings/plugins/ifupdown/tests/test9
new file mode 100644
index 0000000000..7d94563af9
--- /dev/null
+++ b/system-settings/plugins/ifupdown/tests/test9
@@ -0,0 +1,10 @@
+iface eth0 inet static
+# case 9: wrapped lines inside a block (to be on the safe side)
+ address \
+ 10.250.2.3
+ netmask \
+ 255.255.255.192
+
+ broadcast 10.250.2.63
+ gateway 10.250.2.50
+
diff --git a/system-settings/plugins/keyfile/Makefile.am b/system-settings/plugins/keyfile/Makefile.am
index ca4d3cd3f3..128775ee97 100644
--- a/system-settings/plugins/keyfile/Makefile.am
+++ b/system-settings/plugins/keyfile/Makefile.am
@@ -1,40 +1,58 @@
-SUBDIRS=io tests
+SUBDIRS=. tests
INCLUDES = \
-I$(top_srcdir)/src/system-settings \
-I$(top_srcdir)/include \
-I$(top_srcdir)/libnm-util \
- -I$(top_srcdir)/libnm-glib \
- -I$(top_srcdir)/system-settings/plugins/keyfile/io
+ -I$(top_srcdir)/libnm-glib
pkglib_LTLIBRARIES = libnm-settings-plugin-keyfile.la
+noinst_LTLIBRARIES = libkeyfile-io.la
+
+libkeyfile_io_la_SOURCES = \
+ reader.c \
+ reader.h \
+ writer.c \
+ writer.h \
+ errors.c \
+ utils.c \
+ utils.h \
+ common.h
+
+libkeyfile_io_la_CPPFLAGS = \
+ $(GLIB_CFLAGS) \
+ $(DBUS_CFLAGS) \
+ -DSYSCONFDIR=\"$(sysconfdir)\" \
+ -DG_DISABLE_DEPRECATED
+
+libkeyfile_io_la_LIBADD = $(GLIB_LIBS)
+
libnm_settings_plugin_keyfile_la_SOURCES = \
nm-keyfile-connection.c \
nm-keyfile-connection.h \
plugin.c \
plugin.h
-keyfiledir=$(sysconfdir)/NetworkManager/system-connections
-
libnm_settings_plugin_keyfile_la_CPPFLAGS = \
$(GLIB_CFLAGS) \
$(GMODULE_CFLAGS) \
$(DBUS_CFLAGS) \
-DSYSCONFDIR=\"$(sysconfdir)\" \
- -DG_DISABLE_DEPRECATED \
- -DKEYFILE_DIR=\""$(keyfiledir)"\"
+ -DG_DISABLE_DEPRECATED
libnm_settings_plugin_keyfile_la_LDFLAGS = -module -avoid-version
libnm_settings_plugin_keyfile_la_LIBADD = \
$(top_builddir)/libnm-util/libnm-util.la \
$(top_builddir)/libnm-glib/libnm-glib.la \
- $(top_builddir)/system-settings/plugins/keyfile/io/libkeyfile-io.la \
+ libkeyfile-io.la \
$(GLIB_LIBS) \
$(GMODULE_LIBS) \
$(DBUS_LIBS) \
$(GIO_LIBS)
+keyfiledir=$(sysconfdir)/NetworkManager/system-connections
+
install-data-hook:
$(mkinstalldirs) -m 0755 $(DESTDIR)$(keyfiledir)
diff --git a/system-settings/plugins/keyfile/common.h b/system-settings/plugins/keyfile/common.h
new file mode 100644
index 0000000000..6c8f9cebb8
--- /dev/null
+++ b/system-settings/plugins/keyfile/common.h
@@ -0,0 +1,40 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager system settings service
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * (C) Copyright 2008 - 2010 Red Hat, Inc.
+ */
+
+#ifndef __COMMON_H__
+#define __COMMON_H__
+
+#include <glib.h>
+
+#define SWP_TAG ".swp"
+#define SWPX_TAG ".swpx"
+
+#define KEYFILE_PLUGIN_NAME "keyfile"
+#define KEYFILE_PLUGIN_INFO "(c) 2007 - 2010 Red Hat, Inc. To report bugs please use the NetworkManager mailing list."
+
+#define KEYFILE_DIR SYSCONFDIR "/NetworkManager/system-connections"
+
+#define VPN_SECRETS_GROUP "vpn-secrets"
+
+#define KEYFILE_PLUGIN_ERROR (keyfile_plugin_error_quark ())
+GQuark keyfile_plugin_error_quark (void);
+
+#endif /* __COMMON_H__ */
+
diff --git a/system-settings/plugins/keyfile/errors.c b/system-settings/plugins/keyfile/errors.c
new file mode 100644
index 0000000000..e2e97690f1
--- /dev/null
+++ b/system-settings/plugins/keyfile/errors.c
@@ -0,0 +1,35 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager system settings service
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * (C) Copyright 2008 - 2010 Red Hat, Inc.
+ */
+
+#include <glib.h>
+#include "common.h"
+
+GQuark
+keyfile_plugin_error_quark (void)
+{
+ static GQuark error_quark = 0;
+
+ if (G_UNLIKELY (error_quark == 0))
+ error_quark = g_quark_from_static_string ("keyfile-plugin-error-quark");
+
+ return error_quark;
+}
+
+
diff --git a/system-settings/plugins/keyfile/io/Makefile.am b/system-settings/plugins/keyfile/io/Makefile.am
deleted file mode 100644
index 9333c50976..0000000000
--- a/system-settings/plugins/keyfile/io/Makefile.am
+++ /dev/null
@@ -1,20 +0,0 @@
-INCLUDES = \
- -I$(top_srcdir)/system-settings/src \
- -I$(top_srcdir)/include \
- -I$(top_srcdir)/libnm-util \
- -I$(top_srcdir)/libnm-glib
-
-noinst_LTLIBRARIES = libkeyfile-io.la
-
-libkeyfile_io_la_SOURCES = \
- reader.h \
- reader.c \
- writer.h \
- writer.c
-
-libkeyfile_io_la_CPPFLAGS = \
- $(GLIB_CFLAGS) \
- $(DBUS_CFLAGS)
-
-libkeyfile_io_la_LIBADD = $(GLIB_LIBS)
-
diff --git a/system-settings/plugins/keyfile/nm-keyfile-connection.c b/system-settings/plugins/keyfile/nm-keyfile-connection.c
index ed56d69d2e..3c27a54c79 100644
--- a/system-settings/plugins/keyfile/nm-keyfile-connection.c
+++ b/system-settings/plugins/keyfile/nm-keyfile-connection.c
@@ -16,7 +16,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Copyright (C) 2008 Novell, Inc.
- * Copyright (C) 2008 Red Hat, Inc.
+ * Copyright (C) 2008 - 2010 Red Hat, Inc.
*/
#include <string.h>
@@ -26,10 +26,12 @@
#include <nm-utils.h>
#include <nm-settings-connection-interface.h>
+#include "nm-system-config-interface.h"
#include "nm-dbus-glib-types.h"
#include "nm-keyfile-connection.h"
#include "reader.h"
#include "writer.h"
+#include "common.h"
static NMSettingsConnectionInterface *parent_settings_connection_iface;
@@ -53,13 +55,55 @@ enum {
};
NMKeyfileConnection *
-nm_keyfile_connection_new (const char *filename)
+nm_keyfile_connection_new (const char *filename, GError **error)
{
+ GObject *object;
+ NMKeyfileConnectionPrivate *priv;
+ NMSettingConnection *s_con;
+ NMConnection *tmp;
+
g_return_val_if_fail (filename != NULL, NULL);
- return (NMKeyfileConnection *) g_object_new (NM_TYPE_KEYFILE_CONNECTION,
- NM_KEYFILE_CONNECTION_FILENAME, filename,
- NULL);
+ tmp = connection_from_file (filename, error);
+ if (!tmp)
+ return NULL;
+
+ object = (GObject *) g_object_new (NM_TYPE_KEYFILE_CONNECTION,
+ NM_KEYFILE_CONNECTION_FILENAME, filename,
+ NULL);
+ if (!object) {
+ g_object_unref (tmp);
+ return NULL;
+ }
+
+ priv = NM_KEYFILE_CONNECTION_GET_PRIVATE (object);
+ g_assert (priv->filename);
+
+ /* Update our settings with what was read from the file */
+ nm_sysconfig_connection_update (NM_SYSCONFIG_CONNECTION (object), tmp, FALSE, NULL);
+ g_object_unref (tmp);
+
+ /* if for some reason the connection didn't have a UUID, add one */
+ s_con = (NMSettingConnection *) nm_connection_get_setting (NM_CONNECTION (object), NM_TYPE_SETTING_CONNECTION);
+ if (s_con && !nm_setting_connection_get_uuid (s_con)) {
+ GError *write_error = NULL;
+ char *uuid;
+
+ uuid = nm_utils_uuid_generate ();
+ g_object_set (s_con, NM_SETTING_CONNECTION_UUID, uuid, NULL);
+ g_free (uuid);
+
+ if (!write_connection (NM_CONNECTION (object), KEYFILE_DIR, 0, 0, NULL, &write_error)) {
+ PLUGIN_WARN (KEYFILE_PLUGIN_NAME,
+ "Couldn't update connection %s with a UUID: (%d) %s",
+ nm_setting_connection_get_id (s_con),
+ write_error ? write_error->code : -1,
+ (write_error && write_error->message) ? write_error->message : "(unknown)");
+ g_propagate_error (error, write_error);
+ }
+ }
+
+ return NM_KEYFILE_CONNECTION (object);
}
const char *
@@ -78,22 +122,21 @@ update (NMSettingsConnectionInterface *connection,
NMKeyfileConnectionPrivate *priv = NM_KEYFILE_CONNECTION_GET_PRIVATE (connection);
char *filename = NULL;
GError *error = NULL;
- gboolean success;
- success = write_connection (NM_CONNECTION (connection), KEYFILE_DIR, 0, 0, &filename, &error);
- if (success && filename && strcmp (priv->filename, filename)) {
+ if (!write_connection (NM_CONNECTION (connection), KEYFILE_DIR, 0, 0, &filename, &error)) {
+ callback (connection, error, user_data);
+ g_clear_error (&error);
+ return FALSE;
+ }
+
+ if (g_strcmp0 (priv->filename, filename)) {
/* Update the filename if it changed */
g_free (priv->filename);
priv->filename = filename;
- success = parent_settings_connection_iface->update (connection, callback, user_data);
- } else {
- callback (connection, error, user_data);
- if (error)
- g_error_free (error);
+ } else
g_free (filename);
- }
- return success;
+ return parent_settings_connection_iface->update (connection, callback, user_data);
}
static gboolean
@@ -123,56 +166,6 @@ nm_keyfile_connection_init (NMKeyfileConnection *connection)
{
}
-static GObject *
-constructor (GType type,
- guint n_construct_params,
- GObjectConstructParam *construct_params)
-{
- GObject *object;
- NMKeyfileConnectionPrivate *priv;
- NMSettingConnection *s_con;
- NMConnection *tmp;
-
- object = G_OBJECT_CLASS (nm_keyfile_connection_parent_class)->constructor (type, n_construct_params, construct_params);
-
- if (!object)
- return NULL;
-
- priv = NM_KEYFILE_CONNECTION_GET_PRIVATE (object);
-
- g_assert (priv->filename);
-
- tmp = connection_from_file (priv->filename);
- if (!tmp) {
- g_object_unref (object);
- return NULL;
- }
-
- nm_sysconfig_connection_update (NM_SYSCONFIG_CONNECTION (object), tmp, FALSE, NULL);
- g_object_unref (tmp);
-
- /* if for some reason the connection didn't have a UUID, add one */
- s_con = (NMSettingConnection *) nm_connection_get_setting (NM_CONNECTION (object), NM_TYPE_SETTING_CONNECTION);
- if (s_con && !nm_setting_connection_get_uuid (s_con)) {
- GError *error = NULL;
- char *uuid;
-
- uuid = nm_utils_uuid_generate ();
- g_object_set (s_con, NM_SETTING_CONNECTION_UUID, uuid, NULL);
- g_free (uuid);
-
- if (!write_connection (NM_CONNECTION (object), KEYFILE_DIR, 0, 0, NULL, &error)) {
- g_warning ("Couldn't update connection %s with a UUID: (%d) %s",
- nm_setting_connection_get_id (s_con),
- error ? error->code : 0,
- (error && error->message) ? error->message : "unknown");
- g_error_free (error);
- }
- }
-
- return object;
-}
-
static void
finalize (GObject *object)
{
@@ -226,7 +219,6 @@ nm_keyfile_connection_class_init (NMKeyfileConnectionClass *keyfile_connection_c
g_type_class_add_private (keyfile_connection_class, sizeof (NMKeyfileConnectionPrivate));
/* Virtual methods */
- object_class->constructor = constructor;
object_class->set_property = set_property;
object_class->get_property = get_property;
object_class->finalize = finalize;
diff --git a/system-settings/plugins/keyfile/nm-keyfile-connection.h b/system-settings/plugins/keyfile/nm-keyfile-connection.h
index 3b4e050c2f..68e795a6ce 100644
--- a/system-settings/plugins/keyfile/nm-keyfile-connection.h
+++ b/system-settings/plugins/keyfile/nm-keyfile-connection.h
@@ -45,7 +45,7 @@ typedef struct {
GType nm_keyfile_connection_get_type (void);
-NMKeyfileConnection *nm_keyfile_connection_new (const char *filename);
+NMKeyfileConnection *nm_keyfile_connection_new (const char *filename, GError **error);
const char *nm_keyfile_connection_get_filename (NMKeyfileConnection *self);
diff --git a/system-settings/plugins/keyfile/plugin.c b/system-settings/plugins/keyfile/plugin.c
index 36f47ccdc5..da6456d983 100644
--- a/system-settings/plugins/keyfile/plugin.c
+++ b/system-settings/plugins/keyfile/plugin.c
@@ -16,13 +16,14 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Copyright (C) 2008 Novell, Inc.
- * Copyright (C) 2008 Red Hat, Inc.
+ * Copyright (C) 2008 - 2010 Red Hat, Inc.
*/
#include <config.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/types.h>
+#include <netinet/ether.h>
#include <string.h>
#include <gmodule.h>
@@ -38,9 +39,8 @@
#include "nm-system-config-interface.h"
#include "nm-keyfile-connection.h"
#include "writer.h"
-
-#define KEYFILE_PLUGIN_NAME "keyfile"
-#define KEYFILE_PLUGIN_INFO "(c) 2007 - 2008 Red Hat, Inc. To report bugs please use the NetworkManager mailing list."
+#include "common.h"
+#include "utils.h"
#define CONF_FILE SYSCONFDIR "/NetworkManager/NetworkManager.conf"
#define OLD_CONF_FILE SYSCONFDIR "/NetworkManager/nm-system-settings.conf"
@@ -74,31 +74,52 @@ read_connections (NMSystemConfigInterface *config)
{
SCPluginKeyfilePrivate *priv = SC_PLUGIN_KEYFILE_GET_PRIVATE (config);
GDir *dir;
- GError *err = NULL;
+ GError *error = NULL;
+ const char *item;
+
+ dir = g_dir_open (KEYFILE_DIR, 0, &error);
+ if (!dir) {
+ PLUGIN_WARN (KEYFILE_PLUGIN_NAME, "Cannot read directory '%s': (%d) %s",
+ KEYFILE_DIR,
+ error ? error->code : -1,
+ error && error->message ? error->message : "(unknown)");
+ g_clear_error (&error);
+ return;
+ }
- dir = g_dir_open (KEYFILE_DIR, 0, &err);
- if (dir) {
- const char *item;
+ while ((item = g_dir_read_name (dir))) {
+ NMKeyfileConnection *connection;
+ char *full_path;
- while ((item = g_dir_read_name (dir))) {
- NMKeyfileConnection *connection;
- char *full_path;
+ if (utils_should_ignore_file (item))
+ continue;
- full_path = g_build_filename (KEYFILE_DIR, item, NULL);
- connection = nm_keyfile_connection_new (full_path);
- if (connection) {
- g_hash_table_insert (priv->hash,
- (gpointer) nm_keyfile_connection_get_filename (connection),
- connection);
- }
- g_free (full_path);
- }
+ full_path = g_build_filename (KEYFILE_DIR, item, NULL);
+ PLUGIN_PRINT (KEYFILE_PLUGIN_NAME, "parsing %s ... ", item);
+ connection = nm_keyfile_connection_new (full_path, &error);
+ if (connection) {
+ NMSettingConnection *s_con;
+ const char *cid;
- g_dir_close (dir);
- } else {
- g_warning ("Can not read directory '%s': %s", KEYFILE_DIR, err->message);
- g_error_free (err);
+ s_con = (NMSettingConnection *) nm_connection_get_setting (NM_CONNECTION (connection), NM_TYPE_SETTING_CONNECTION);
+ g_assert (s_con);
+
+ cid = nm_setting_connection_get_id (s_con);
+ g_assert (cid);
+
+ g_hash_table_insert (priv->hash,
+ (gpointer) nm_keyfile_connection_get_filename (connection),
+ connection);
+
+ PLUGIN_PRINT (KEYFILE_PLUGIN_NAME, " read connection '%s'", cid);
+ } else {
+ PLUGIN_PRINT (KEYFILE_PLUGIN_NAME, " error: %s",
+ (error && error->message) ? error->message : "(unknown)");
+ g_clear_error (&error);
+ }
+ g_free (full_path);
}
+ g_dir_close (dir);
}
typedef struct {
@@ -148,28 +169,46 @@ update_connection_settings (NMKeyfileConnection *orig,
/* Monitoring */
static void
+remove_connection (SCPluginKeyfile *self,
+ NMKeyfileConnection *connection,
+ const char *name)
+{
+ g_return_if_fail (connection != NULL);
+ g_return_if_fail (name != NULL);
+
+ /* Removing from the hash table should drop the last reference */
+ g_object_ref (connection);
+ g_hash_table_remove (SC_PLUGIN_KEYFILE_GET_PRIVATE (self)->hash, name);
+ g_signal_emit_by_name (connection, "removed");
+ g_object_unref (connection);
+}
+
+static void
dir_changed (GFileMonitor *monitor,
- GFile *file,
- GFile *other_file,
- GFileMonitorEvent event_type,
- gpointer user_data)
+ GFile *file,
+ GFile *other_file,
+ GFileMonitorEvent event_type,
+ gpointer user_data)
{
NMSystemConfigInterface *config = NM_SYSTEM_CONFIG_INTERFACE (user_data);
SCPluginKeyfilePrivate *priv = SC_PLUGIN_KEYFILE_GET_PRIVATE (config);
char *name;
NMKeyfileConnection *connection;
+ GError *error = NULL;
name = g_file_get_path (file);
+ if (utils_should_ignore_file (name)) {
+ g_free (name);
+ return;
+ }
+
connection = g_hash_table_lookup (priv->hash, name);
switch (event_type) {
case G_FILE_MONITOR_EVENT_DELETED:
if (connection) {
- /* Removing from the hash table should drop the last reference */
- g_object_ref (connection);
- g_hash_table_remove (priv->hash, name);
- g_signal_emit_by_name (connection, "removed");
- g_object_unref (connection);
+ PLUGIN_PRINT (KEYFILE_PLUGIN_NAME, "removed %s.", name);
+ remove_connection (SC_PLUGIN_KEYFILE (config), connection, name);
}
break;
case G_FILE_MONITOR_EVENT_CREATED:
@@ -178,14 +217,27 @@ dir_changed (GFileMonitor *monitor,
/* Update */
NMKeyfileConnection *tmp;
- tmp = (NMKeyfileConnection *) nm_keyfile_connection_new (name);
+ tmp = nm_keyfile_connection_new (name, &error);
if (tmp) {
- update_connection_settings (connection, tmp);
+ if (!nm_connection_compare (NM_CONNECTION (connection),
+ NM_CONNECTION (tmp),
+ NM_SETTING_COMPARE_FLAG_EXACT)) {
+ PLUGIN_PRINT (KEYFILE_PLUGIN_NAME, "updating %s", name);
+ update_connection_settings (connection, tmp);
+ }
g_object_unref (tmp);
+ } else {
+ /* Error; remove the connection */
+ PLUGIN_PRINT (KEYFILE_PLUGIN_NAME, " error: %s",
+ (error && error->message) ? error->message : "(unknown)");
+ g_clear_error (&error);
+ remove_connection (SC_PLUGIN_KEYFILE (config), connection, name);
}
} else {
+ PLUGIN_PRINT (KEYFILE_PLUGIN_NAME, "updating %s", name);
+
/* New */
- connection = nm_keyfile_connection_new (name);
+ connection = nm_keyfile_connection_new (name, &error);
if (connection) {
NMSettingConnection *s_con;
const char *connection_uuid;
@@ -234,6 +286,10 @@ dir_changed (GFileMonitor *monitor,
connection);
g_signal_emit_by_name (config, NM_SYSTEM_CONFIG_INTERFACE_CONNECTION_ADDED, connection);
}
+ } else {
+ PLUGIN_PRINT (KEYFILE_PLUGIN_NAME, " error: %s",
+ (error && error->message) ? error->message : "(unknown)");
+ g_clear_error (&error);
}
}
break;
@@ -363,8 +419,23 @@ get_unmanaged_specs (NMSystemConfigInterface *config)
udis = g_strsplit (str, ";", -1);
g_free (str);
- for (i = 0; udis[i] != NULL; i++)
- specs = g_slist_append (specs, udis[i]);
+ for (i = 0; udis[i] != NULL; i++) {
+ /* Verify unmanaged specification and add it to the list */
+ if (strlen (udis[i]) > 4 && !strncmp (udis[i], "mac:", 4) && ether_aton (udis[i] + 4)) {
+ char *p = udis[i];
+
+ /* To accept uppercase MACs in configuration file, we have to convert values to lowercase here.
+ * Unmanaged MACs in specs are always in lowercase. */
+ while (*p) {
+ *p = g_ascii_tolower (*p);
+ p++;
+ }
+ specs = g_slist_append (specs, udis[i]);
+ } else {
+ g_warning ("Error in file '%s': invalid unmanaged-devices entry: '%s'", priv->conf_file, udis[i]);
+ g_free (udis[i]);
+ }
+ }
g_free (udis); /* Yes, g_free, not g_strfreev because we need the strings in the list */
}
diff --git a/system-settings/plugins/keyfile/io/reader.c b/system-settings/plugins/keyfile/reader.c
index a71c05c577..841315d9c6 100644
--- a/system-settings/plugins/keyfile/io/reader.c
+++ b/system-settings/plugins/keyfile/reader.c
@@ -32,12 +32,19 @@
#include <nm-setting-connection.h>
#include <nm-setting-wired.h>
#include <nm-setting-wireless.h>
+#include <nm-setting-bluetooth.h>
+#include <nm-setting-serial.h>
+#include <nm-setting-gsm.h>
+#include <nm-setting-cdma.h>
+#include <nm-setting-ppp.h>
#include <arpa/inet.h>
#include <netinet/ether.h>
#include <string.h>
+#include <ctype.h>
#include "nm-dbus-glib-types.h"
#include "reader.h"
+#include "common.h"
static gboolean
read_array_of_uint (GKeyFile *file,
@@ -725,6 +732,68 @@ read_hash_of_string (GKeyFile *file, NMSetting *setting, const char *key)
g_strfreev (keys);
}
+static void
+ssid_parser (NMSetting *setting, const char *key, GKeyFile *keyfile)
+{
+ const char *setting_name = nm_setting_get_name (setting);
+ GByteArray *array = NULL;
+ char *p, *tmp_string;
+ gint *tmp_list;
+ gsize length;
+ int i;
+
+ /* New format: just a string. We try parsing the new format if there are
+ * no ';' in the string or it's not just numbers.
+ */
+ p = tmp_string = g_key_file_get_string (keyfile, setting_name, key, NULL);
+ if (tmp_string) {
+ gboolean new_format = FALSE;
+
+ if (strchr (p, ';') == NULL)
+ new_format = TRUE;
+ else {
+ new_format = TRUE;
+ while (p && *p) {
+ if (!isdigit (*p++)) {
+ new_format = FALSE;
+ break;
+ }
+ }
+ }
+
+ if (new_format) {
+ array = g_byte_array_sized_new (strlen (tmp_string));
+ g_byte_array_append (array, (guint8 *) tmp_string, strlen (tmp_string));
+ goto done;
+ }
+ }
+ g_free (tmp_string);
+
+ /* Old format; list of ints */
+ tmp_list = g_key_file_get_integer_list (keyfile, setting_name, key, &length, NULL);
+ array = g_byte_array_sized_new (length);
+ for (i = 0; i < length; i++) {
+ int val = tmp_list[i];
+ unsigned char v = (unsigned char) (val & 0xFF);
+
+ if (val < 0 || val > 255) {
+ g_warning ("%s: %s / %s ignoring invalid byte element '%d' (not "
+ " between 0 and 255 inclusive)", __func__, setting_name,
+ key, val);
+ } else
+ g_byte_array_append (array, (const unsigned char *) &v, sizeof (v));
+ }
+ g_free (tmp_list);
+
+done:
+ if (array->len)
+ g_object_set (setting, key, array, NULL);
+ else {
+ g_warning ("%s: ignoring invalid SSID for %s / %s",
+ __func__, setting_name, key);
+ }
+ g_byte_array_free (array, TRUE);
+}
typedef struct {
const char *setting_name;
@@ -733,7 +802,7 @@ typedef struct {
void (*parser) (NMSetting *setting, const char *key, GKeyFile *keyfile);
} KeyParser;
-/* A table of keys that require further parsing/conversion becuase they are
+/* A table of keys that require further parsing/conversion because they are
* stored in a format that can't be automatically read using the key's type.
* i.e. IPv4 addresses, which are stored in NetworkManager as guint32, but are
* stored in keyfiles as strings, eg "10.1.1.2" or IPv6 addresses stored
@@ -768,14 +837,30 @@ static KeyParser key_parsers[] = {
NM_SETTING_WIRED_MAC_ADDRESS,
TRUE,
mac_address_parser },
+ { NM_SETTING_WIRED_SETTING_NAME,
+ NM_SETTING_WIRED_CLONED_MAC_ADDRESS,
+ TRUE,
+ mac_address_parser },
{ NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_MAC_ADDRESS,
TRUE,
mac_address_parser },
{ NM_SETTING_WIRELESS_SETTING_NAME,
+ NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS,
+ TRUE,
+ mac_address_parser },
+ { NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_BSSID,
TRUE,
mac_address_parser },
+ { NM_SETTING_BLUETOOTH_SETTING_NAME,
+ NM_SETTING_BLUETOOTH_BDADDR,
+ TRUE,
+ mac_address_parser },
+ { NM_SETTING_WIRELESS_SETTING_NAME,
+ NM_SETTING_WIRELESS_SSID,
+ TRUE,
+ ssid_parser },
{ NULL, NULL, FALSE }
};
@@ -969,65 +1054,120 @@ read_vpn_secrets (GKeyFile *file, NMSettingVPN *s_vpn)
}
NMConnection *
-connection_from_file (const char *filename)
+connection_from_file (const char *filename, GError **error)
{
GKeyFile *key_file;
struct stat statbuf;
gboolean bad_owner, bad_permissions;
NMConnection *connection = NULL;
- GError *err = NULL;
+ NMSettingConnection *s_con;
+ NMSettingBluetooth *s_bt;
+ NMSetting *setting;
+ gchar **groups;
+ gsize length;
+ int i;
+ gboolean vpn_secrets = FALSE;
+ const char *ctype, *tmp;
+ GError *verify_error = NULL;
- if (stat (filename, &statbuf) != 0 || !S_ISREG (statbuf.st_mode))
+ if (stat (filename, &statbuf) != 0 || !S_ISREG (statbuf.st_mode)) {
+ g_set_error_literal (error, KEYFILE_PLUGIN_ERROR, 0,
+ "File did not exist or was not a regular file");
return NULL;
+ }
bad_owner = getuid () != statbuf.st_uid;
bad_permissions = statbuf.st_mode & 0077;
if (bad_owner || bad_permissions) {
- g_warning ("Ignoring insecure configuration file '%s'", filename);
+ g_set_error (error, KEYFILE_PLUGIN_ERROR, 0,
+ "File permissions (%o) or owner (%d) were insecure",
+ statbuf.st_mode, statbuf.st_uid);
return NULL;
}
key_file = g_key_file_new ();
- if (g_key_file_load_from_file (key_file, filename, G_KEY_FILE_NONE, &err)) {
- gchar **groups;
- gsize length;
- int i;
- gboolean vpn_secrets = FALSE;
+ if (!g_key_file_load_from_file (key_file, filename, G_KEY_FILE_NONE, error))
+ goto out;
- connection = nm_connection_new ();
+ connection = nm_connection_new ();
- groups = g_key_file_get_groups (key_file, &length);
- for (i = 0; i < length; i++) {
- NMSetting *setting;
+ groups = g_key_file_get_groups (key_file, &length);
+ for (i = 0; i < length; i++) {
+ /* Only read out secrets when needed */
+ if (!strcmp (groups[i], VPN_SECRETS_GROUP)) {
+ vpn_secrets = TRUE;
+ continue;
+ }
- /* Only read out secrets when needed */
- if (!strcmp (groups[i], VPN_SECRETS_GROUP)) {
- vpn_secrets = TRUE;
- continue;
- }
+ setting = read_setting (key_file, groups[i]);
+ if (setting)
+ nm_connection_add_setting (connection, setting);
+ }
- setting = read_setting (key_file, groups[i]);
- if (setting)
- nm_connection_add_setting (connection, setting);
- }
+ /* Make sure that we have the base device type setting even if
+ * the keyfile didn't include it, which can happen when the base
+ * device type setting is all default values (like ethernet).
+ */
+ s_con = (NMSettingConnection *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION);
+ if (s_con) {
+ ctype = nm_setting_connection_get_connection_type (s_con);
+ setting = nm_connection_get_setting_by_name (connection, ctype);
+ if (ctype) {
+ gboolean add_serial = FALSE;
+ NMSetting *new_setting = NULL;
+
+ if (!setting && !strcmp (ctype, NM_SETTING_WIRED_SETTING_NAME))
+ new_setting = nm_setting_wired_new ();
+ else if (!strcmp (ctype, NM_SETTING_BLUETOOTH_SETTING_NAME)) {
+ s_bt = (NMSettingBluetooth *) nm_connection_get_setting (connection, NM_TYPE_SETTING_BLUETOOTH);
+ if (s_bt) {
+ tmp = nm_setting_bluetooth_get_connection_type (s_bt);
+ if (tmp && !strcmp (tmp, NM_SETTING_BLUETOOTH_TYPE_DUN))
+ add_serial = TRUE;
+ }
+ } else if (!strcmp (ctype, NM_SETTING_GSM_SETTING_NAME))
+ add_serial = TRUE;
+ else if (!strcmp (ctype, NM_SETTING_CDMA_SETTING_NAME))
+ add_serial = TRUE;
- /* Handle vpn secrets after the 'vpn' setting was read */
- if (vpn_secrets) {
- NMSettingVPN *s_vpn;
+ /* Bluetooth DUN, GSM, and CDMA connections require a serial setting */
+ if (add_serial && !nm_connection_get_setting (connection, NM_TYPE_SETTING_SERIAL))
+ new_setting = nm_setting_serial_new ();
- s_vpn = (NMSettingVPN *) nm_connection_get_setting (connection, NM_TYPE_SETTING_VPN);
- if (s_vpn)
- read_vpn_secrets (key_file, s_vpn);
+ if (new_setting)
+ nm_connection_add_setting (connection, new_setting);
}
+ }
- g_strfreev (groups);
- } else {
- g_warning ("Error parsing file '%s': %s", filename, err->message);
- g_error_free (err);
+ /* Serial connections require a PPP setting too */
+ if (nm_connection_get_setting (connection, NM_TYPE_SETTING_SERIAL)) {
+ if (!nm_connection_get_setting (connection, NM_TYPE_SETTING_PPP))
+ nm_connection_add_setting (connection, nm_setting_ppp_new ());
}
- g_key_file_free (key_file);
+ /* Handle vpn secrets after the 'vpn' setting was read */
+ if (vpn_secrets) {
+ NMSettingVPN *s_vpn;
+
+ s_vpn = (NMSettingVPN *) nm_connection_get_setting (connection, NM_TYPE_SETTING_VPN);
+ if (s_vpn)
+ read_vpn_secrets (key_file, s_vpn);
+ }
+ g_strfreev (groups);
+
+ /* Verify the connection */
+ if (!nm_connection_verify (connection, &verify_error)) {
+ g_set_error (error, KEYFILE_PLUGIN_ERROR, 0,
+ "invalid or missing connection property '%s'",
+ (verify_error && verify_error->message) ? verify_error->message : "(unknown)");
+ g_clear_error (&verify_error);
+ g_object_unref (connection);
+ connection = NULL;
+ }
+
+out:
+ g_key_file_free (key_file);
return connection;
}
diff --git a/system-settings/plugins/keyfile/io/reader.h b/system-settings/plugins/keyfile/reader.h
index beac866a25..3572715495 100644
--- a/system-settings/plugins/keyfile/io/reader.h
+++ b/system-settings/plugins/keyfile/reader.h
@@ -22,11 +22,9 @@
#ifndef _KEYFILE_PLUGIN_READER_H
#define _KEYFILE_PLUGIN_READER_H
-#define VPN_SECRETS_GROUP "vpn-secrets"
-
#include <glib.h>
#include <nm-connection.h>
-NMConnection *connection_from_file (const char *filename);
+NMConnection *connection_from_file (const char *filename, GError **error);
#endif /* _KEYFILE_PLUGIN_READER_H */
diff --git a/system-settings/plugins/keyfile/tests/Makefile.am b/system-settings/plugins/keyfile/tests/Makefile.am
index a0af14b269..af76667867 100644
--- a/system-settings/plugins/keyfile/tests/Makefile.am
+++ b/system-settings/plugins/keyfile/tests/Makefile.am
@@ -4,7 +4,7 @@ INCLUDES = \
-I$(top_srcdir)/include \
-I$(top_srcdir)/libnm-util \
-I$(top_srcdir)/libnm-glib \
- -I$(top_srcdir)/system-settings/plugins/keyfile/io
+ -I$(top_srcdir)/system-settings/plugins/keyfile
noinst_PROGRAMS = test-keyfile
@@ -18,7 +18,7 @@ test_keyfile_CPPFLAGS = \
-DTEST_SCRATCH_DIR=\"$(abs_builddir)/keyfiles\"
test_keyfile_LDADD = \
- $(top_builddir)/system-settings/plugins/keyfile/io/libkeyfile-io.la \
+ $(top_builddir)/system-settings/plugins/keyfile/libkeyfile-io.la \
$(top_builddir)/libnm-glib/libnm-glib.la \
$(top_builddir)/libnm-util/libnm-util.la \
$(DBUS_LIBS)
diff --git a/system-settings/plugins/keyfile/tests/keyfiles/ATT_Data_Connect_BT b/system-settings/plugins/keyfile/tests/keyfiles/ATT_Data_Connect_BT
new file mode 100644
index 0000000000..cc8a9ee390
--- /dev/null
+++ b/system-settings/plugins/keyfile/tests/keyfiles/ATT_Data_Connect_BT
@@ -0,0 +1,23 @@
+
+[connection]
+id=AT&T Data Connect BT
+uuid=089130ab-ce28-46e4-ad77-d44869b03d19
+type=bluetooth
+autoconnect=false
+
+[ipv4]
+method=auto
+
+[gsm]
+number=*99#
+username=ISP@CINGULARGPRS.COM
+password=CINGULAR1
+apn=ISP.CINGULAR
+
+[serial]
+baud=115200
+
+[bluetooth]
+bdaddr=00:11:22:33:44:55
+type=dun
+
diff --git a/system-settings/plugins/keyfile/tests/keyfiles/ATT_Data_Connect_Plain b/system-settings/plugins/keyfile/tests/keyfiles/ATT_Data_Connect_Plain
new file mode 100644
index 0000000000..236cca0edf
--- /dev/null
+++ b/system-settings/plugins/keyfile/tests/keyfiles/ATT_Data_Connect_Plain
@@ -0,0 +1,20 @@
+
+[connection]
+id=AT&T Data Connect
+uuid=15d742f1-2b5a-421e-9f27-fcb1fc26d72c
+type=gsm
+autoconnect=false
+
+[ipv4]
+method=auto
+
+[gsm]
+number=*99#
+username=ISP@CINGULARGPRS.COM
+password=CINGULAR1
+apn=ISP.CINGULAR
+network-id=24005
+pin=2345
+
+[serial]
+baud=115200
diff --git a/system-settings/plugins/keyfile/tests/keyfiles/Makefile.am b/system-settings/plugins/keyfile/tests/keyfiles/Makefile.am
index bf5a5ab060..d6ee018340 100644
--- a/system-settings/plugins/keyfile/tests/keyfiles/Makefile.am
+++ b/system-settings/plugins/keyfile/tests/keyfiles/Makefile.am
@@ -3,7 +3,10 @@ EXTRA_DIST = \
Test_GSM_Connection \
Test_Wireless_Connection \
Test_Wired_Connection_MAC_Case \
- Test_Wired_Connection_IP6
+ Test_Wired_Connection_IP6 \
+ ATT_Data_Connect_BT \
+ ATT_Data_Connect_Plain \
+ Test_String_SSID
check-local:
@for f in $(EXTRA_DIST); do \
diff --git a/system-settings/plugins/keyfile/tests/keyfiles/Test_String_SSID b/system-settings/plugins/keyfile/tests/keyfiles/Test_String_SSID
new file mode 100644
index 0000000000..4a3b56d24f
--- /dev/null
+++ b/system-settings/plugins/keyfile/tests/keyfiles/Test_String_SSID
@@ -0,0 +1,11 @@
+[connection]
+id=Test
+uuid=2f962388-e5f3-45af-a62c-ac220b8f7baa
+type=802-11-wireless
+
+[802-11-wireless]
+ssid=blah blah ssid 1234
+
+[ipv4]
+method=auto
+
diff --git a/system-settings/plugins/keyfile/tests/test-keyfile.c b/system-settings/plugins/keyfile/tests/test-keyfile.c
index aae823642b..05131c8fe8 100644
--- a/system-settings/plugins/keyfile/tests/test-keyfile.c
+++ b/system-settings/plugins/keyfile/tests/test-keyfile.c
@@ -27,14 +27,16 @@
#include <arpa/inet.h>
#include <sys/socket.h>
-#include <dbus/dbus-glib.h>
-
#include <nm-utils.h>
#include <nm-setting-connection.h>
#include <nm-setting-wired.h>
#include <nm-setting-wireless.h>
#include <nm-setting-ip4-config.h>
#include <nm-setting-ip6-config.h>
+#include <nm-setting-bluetooth.h>
+#include <nm-setting-serial.h>
+#include <nm-setting-ppp.h>
+#include <nm-setting-gsm.h>
#include "nm-test-helpers.h"
@@ -81,7 +83,7 @@ test_read_valid_wired_connection (void)
NMIP6Address *ip6_addr;
NMIP6Route *ip6_route;
- connection = connection_from_file (TEST_WIRED_FILE);
+ connection = connection_from_file (TEST_WIRED_FILE, NULL);
ASSERT (connection != NULL,
"connection-read", "failed to read %s", TEST_WIRED_FILE);
@@ -583,7 +585,7 @@ test_write_wired_connection (void)
const char *address2_gw = "1.2.1.1";
const char *route1 = "10.10.10.2";
const char *route1_nh = "10.10.10.1";
- const char *route2 = "0.0.0.0";
+ const char *route2 = "1.1.1.1";
const char *route2_nh = "1.2.1.1";
const char *dns6_1 = "1::cafe";
const char *dns6_2 = "2::cafe";
@@ -591,7 +593,7 @@ test_write_wired_connection (void)
const char *address6_2 = "dcba::beef";
const char *route6_1 = "1:2:3:4:5:6:7:8";
const char *route6_1_nh = "8:7:6:5:4:3:2:1";
- const char *route6_2 = "::";
+ const char *route6_2 = "2001::1000";
const char *route6_2_nh = "2001::1111";
guint64 timestamp = 0x12345678L;
@@ -700,7 +702,7 @@ test_write_wired_connection (void)
"connection-write", "didn't get keyfile name back after writing connection");
/* Read the connection back in and compare it to the one we just wrote out */
- reread = connection_from_file (testfile);
+ reread = connection_from_file (testfile, NULL);
ASSERT (reread != NULL, "connection-write", "failed to re-read test connection");
ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
@@ -733,7 +735,7 @@ test_read_ip6_wired_connection (void)
const char *expected6_gw1 = "abcd:1234:ffff::cdd1";
NMIP6Address *ip6_addr;
- connection = connection_from_file (TEST_WIRED_IP6_FILE);
+ connection = connection_from_file (TEST_WIRED_IP6_FILE, NULL);
ASSERT (connection != NULL,
"connection-read", "failed to read %s", TEST_WIRED_IP6_FILE);
@@ -960,7 +962,7 @@ test_write_ip6_wired_connection (void)
"connection-write", "didn't get keyfile name back after writing connection");
/* Read the connection back in and compare it to the one we just wrote out */
- reread = connection_from_file (testfile);
+ reread = connection_from_file (testfile, NULL);
ASSERT (reread != NULL, "connection-write", "failed to re-read test connection");
ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
@@ -989,7 +991,7 @@ test_read_wired_mac_case (void)
const char *expected_id = "Test Wired Connection MAC Case";
const char *expected_uuid = "4e80a56d-c99f-4aad-a6dd-b449bc398c57";
- connection = connection_from_file (TEST_WIRED_MAC_CASE_FILE);
+ connection = connection_from_file (TEST_WIRED_MAC_CASE_FILE, NULL);
ASSERT (connection != NULL,
"connection-read", "failed to read %s", TEST_WIRED_MAC_CASE_FILE);
@@ -1075,7 +1077,7 @@ test_read_valid_wireless_connection (void)
const guint64 expected_timestamp = 1226604314;
guint64 timestamp;
- connection = connection_from_file (TEST_WIRELESS_FILE);
+ connection = connection_from_file (TEST_WIRELESS_FILE, NULL);
ASSERT (connection != NULL,
"connection-read", "failed to read %s", TEST_WIRELESS_FILE);
@@ -1278,7 +1280,697 @@ test_write_wireless_connection (void)
"connection-write", "didn't get keyfile name back after writing connection");
/* Read the connection back in and compare it to the one we just wrote out */
- reread = connection_from_file (testfile);
+ reread = connection_from_file (testfile, NULL);
+ ASSERT (reread != NULL, "connection-write", "failed to re-read test connection");
+
+ ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
+ "connection-write", "written and re-read connection weren't the same");
+
+ g_clear_error (&error);
+ unlink (testfile);
+ g_free (testfile);
+
+ g_object_unref (reread);
+ g_object_unref (connection);
+}
+
+#define TEST_STRING_SSID_FILE TEST_KEYFILES_DIR"/Test_String_SSID"
+
+static void
+test_read_string_ssid (void)
+{
+ NMConnection *connection;
+ NMSettingWireless *s_wireless;
+ GError *error = NULL;
+ const GByteArray *array;
+ const char *expected_ssid = "blah blah ssid 1234";
+
+ connection = connection_from_file (TEST_STRING_SSID_FILE, NULL);
+ ASSERT (connection != NULL,
+ "connection-read", "failed to read %s", TEST_STRING_SSID_FILE);
+
+ ASSERT (nm_connection_verify (connection, &error),
+ "connection-verify", "failed to verify %s: %s", TEST_STRING_SSID_FILE, error->message);
+
+ /* ===== WIRELESS SETTING ===== */
+
+ s_wireless = NM_SETTING_WIRELESS (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS));
+ ASSERT (s_wireless != NULL,
+ "connection-verify-wireless", "failed to verify %s: missing %s setting",
+ TEST_STRING_SSID_FILE,
+ NM_SETTING_WIRELESS_SETTING_NAME);
+
+ /* SSID */
+ array = nm_setting_wireless_get_ssid (s_wireless);
+ ASSERT (array != NULL,
+ "connection-verify-wireless", "failed to verify %s: missing %s / %s key",
+ TEST_STRING_SSID_FILE,
+ NM_SETTING_WIRELESS_SETTING_NAME,
+ NM_SETTING_WIRELESS_SSID);
+ ASSERT (memcmp (array->data, expected_ssid, sizeof (expected_ssid)) == 0,
+ "connection-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
+ TEST_STRING_SSID_FILE,
+ NM_SETTING_WIRELESS_SETTING_NAME,
+ NM_SETTING_WIRELESS_SSID);
+
+ g_object_unref (connection);
+}
+
+static void
+test_write_string_ssid (void)
+{
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ NMSettingWireless *s_wireless;
+ NMSettingIP4Config *s_ip4;
+ char *uuid, *testfile = NULL, *tmp;
+ GByteArray *ssid;
+ unsigned char tmpssid[] = { 65, 49, 50, 51, 32, 46, 92, 46, 36, 37, 126, 93 };
+ gboolean success;
+ NMConnection *reread;
+ GError *error = NULL;
+ pid_t owner_grp;
+ uid_t owner_uid;
+ GKeyFile *keyfile;
+
+ connection = nm_connection_new ();
+ ASSERT (connection != NULL,
+ "connection-write", "failed to allocate new connection");
+
+ /* Connection setting */
+
+ s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ());
+ ASSERT (s_con != NULL,
+ "connection-write", "failed to allocate new %s setting",
+ NM_SETTING_CONNECTION_SETTING_NAME);
+ nm_connection_add_setting (connection, NM_SETTING (s_con));
+
+ uuid = nm_utils_uuid_generate ();
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_ID, "String SSID Test",
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
+ NULL);
+ g_free (uuid);
+
+ /* Wireless setting */
+
+ s_wireless = NM_SETTING_WIRELESS (nm_setting_wireless_new ());
+ ASSERT (s_wireless != NULL,
+ "connection-write", "failed to allocate new %s setting",
+ NM_SETTING_WIRELESS_SETTING_NAME);
+ nm_connection_add_setting (connection, NM_SETTING (s_wireless));
+
+ ssid = g_byte_array_sized_new (sizeof (tmpssid));
+ g_byte_array_append (ssid, &tmpssid[0], sizeof (tmpssid));
+ g_object_set (s_wireless, 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 ());
+ ASSERT (s_ip4 != NULL,
+ "connection-write", "failed to allocate new %s setting",
+ NM_SETTING_IP4_CONFIG_SETTING_NAME);
+ 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 = write_connection (connection, TEST_SCRATCH_DIR, owner_uid, owner_grp, &testfile, &error);
+ ASSERT (success == TRUE,
+ "connection-write", "failed to allocate write keyfile: %s",
+ error ? error->message : "(none)");
+
+ ASSERT (testfile != NULL,
+ "connection-write", "didn't get keyfile name back after writing connection");
+
+ /* Ensure the SSID was written out as a string */
+ keyfile = g_key_file_new ();
+ ASSERT (g_key_file_load_from_file (keyfile, testfile, 0, NULL) == TRUE,
+ "string-ssid-verify", "failed to load keyfile to verify");
+ tmp = g_key_file_get_string (keyfile, NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_SSID, NULL);
+ ASSERT (tmp, "string-ssid-verify", "failed to load 'ssid' key from file");
+ ASSERT (strlen (tmp) == sizeof (tmpssid),
+ "string-ssid-verify", "reread SSID and expected were different sizes");
+ ASSERT (memcmp (tmp, tmpssid, sizeof (tmpssid)) == 0,
+ "string-ssid-verify", "reread SSID and expected were different");
+ g_free (tmp);
+ g_key_file_free (keyfile);
+
+ /* Read the connection back in and compare it to the one we just wrote out */
+ reread = connection_from_file (testfile, NULL);
+ ASSERT (reread != NULL, "connection-write", "failed to re-read test connection");
+
+ ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
+ "connection-write", "written and re-read connection weren't the same");
+
+ 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
+test_read_bt_dun_connection (void)
+{
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ NMSettingBluetooth *s_bluetooth;
+ NMSettingSerial *s_serial;
+ NMSettingPPP *s_ppp;
+ NMSettingGsm *s_gsm;
+ GError *error = NULL;
+ const GByteArray *array;
+ char expected_bdaddr[ETH_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55 };
+ const char *tmp;
+ const char *expected_id = "AT&T Data Connect BT";
+ const char *expected_uuid = "089130ab-ce28-46e4-ad77-d44869b03d19";
+ const char *expected_apn = "ISP.CINGULAR";
+ const char *expected_username = "ISP@CINGULARGPRS.COM";
+ const char *expected_password = "CINGULAR1";
+
+ connection = connection_from_file (TEST_BT_DUN_FILE, NULL);
+ ASSERT (connection != NULL,
+ "connection-read", "failed to read %s", TEST_BT_DUN_FILE);
+
+ ASSERT (nm_connection_verify (connection, &error),
+ "connection-verify", "failed to verify %s: %s", TEST_BT_DUN_FILE, error->message);
+
+ /* ===== CONNECTION SETTING ===== */
+
+ s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
+ ASSERT (s_con != NULL,
+ "connection-verify-connection", "failed to verify %s: missing %s setting",
+ TEST_BT_DUN_FILE,
+ NM_SETTING_CONNECTION_SETTING_NAME);
+
+ /* ID */
+ tmp = nm_setting_connection_get_id (s_con);
+ ASSERT (tmp != NULL,
+ "connection-verify-connection", "failed to verify %s: missing %s / %s key",
+ TEST_BT_DUN_FILE,
+ NM_SETTING_CONNECTION_SETTING_NAME,
+ NM_SETTING_CONNECTION_ID);
+ ASSERT (strcmp (tmp, expected_id) == 0,
+ "connection-verify-connection", "failed to verify %s: unexpected %s / %s key value",
+ TEST_BT_DUN_FILE,
+ NM_SETTING_CONNECTION_SETTING_NAME,
+ NM_SETTING_CONNECTION_ID);
+
+ /* UUID */
+ tmp = nm_setting_connection_get_uuid (s_con);
+ ASSERT (tmp != NULL,
+ "connection-verify-connection", "failed to verify %s: missing %s / %s key",
+ TEST_WIRELESS_FILE,
+ NM_SETTING_CONNECTION_SETTING_NAME,
+ NM_SETTING_CONNECTION_UUID);
+ ASSERT (strcmp (tmp, expected_uuid) == 0,
+ "connection-verify-connection", "failed to verify %s: unexpected %s / %s key value",
+ TEST_WIRELESS_FILE,
+ NM_SETTING_CONNECTION_SETTING_NAME,
+ NM_SETTING_CONNECTION_UUID);
+
+ /* ===== BLUETOOTH SETTING ===== */
+
+ s_bluetooth = NM_SETTING_BLUETOOTH (nm_connection_get_setting (connection, NM_TYPE_SETTING_BLUETOOTH));
+ ASSERT (s_bluetooth != NULL,
+ "connection-verify-bt", "failed to verify %s: missing %s setting",
+ TEST_WIRELESS_FILE,
+ NM_SETTING_WIRED_SETTING_NAME);
+
+ /* BDADDR */
+ array = nm_setting_bluetooth_get_bdaddr (s_bluetooth);
+ ASSERT (array != NULL,
+ "connection-verify-bt", "failed to verify %s: missing %s / %s key",
+ TEST_BT_DUN_FILE,
+ NM_SETTING_BLUETOOTH_SETTING_NAME,
+ NM_SETTING_BLUETOOTH_BDADDR);
+ ASSERT (array->len == ETH_ALEN,
+ "connection-verify-bt", "failed to verify %s: unexpected %s / %s key value length",
+ TEST_BT_DUN_FILE,
+ NM_SETTING_BLUETOOTH_SETTING_NAME,
+ NM_SETTING_BLUETOOTH_BDADDR);
+ ASSERT (memcmp (array->data, &expected_bdaddr[0], sizeof (expected_bdaddr)) == 0,
+ "connection-verify-bt", "failed to verify %s: unexpected %s / %s key value",
+ TEST_BT_DUN_FILE,
+ NM_SETTING_BLUETOOTH_SETTING_NAME,
+ NM_SETTING_BLUETOOTH_BDADDR);
+
+ /* Type */
+ tmp = nm_setting_bluetooth_get_connection_type (s_bluetooth);
+ ASSERT (tmp != NULL,
+ "connection-verify-bt", "failed to verify %s: missing %s / %s key",
+ TEST_BT_DUN_FILE,
+ NM_SETTING_BLUETOOTH_SETTING_NAME,
+ NM_SETTING_BLUETOOTH_TYPE);
+ ASSERT (strcmp (tmp, NM_SETTING_BLUETOOTH_TYPE_DUN) == 0,
+ "connection-verify-bt", "failed to verify %s: unexpected %s / %s key value",
+ TEST_BT_DUN_FILE,
+ NM_SETTING_BLUETOOTH_SETTING_NAME,
+ NM_SETTING_BLUETOOTH_TYPE);
+
+ /* ===== GSM SETTING ===== */
+
+ s_gsm = NM_SETTING_GSM (nm_connection_get_setting (connection, NM_TYPE_SETTING_GSM));
+ ASSERT (s_gsm != NULL,
+ "connection-verify-gsm", "failed to verify %s: missing %s setting",
+ TEST_BT_DUN_FILE,
+ NM_SETTING_GSM_SETTING_NAME);
+
+ /* APN */
+ tmp = nm_setting_gsm_get_apn (s_gsm);
+ ASSERT (tmp != NULL,
+ "connection-verify-gsm", "failed to verify %s: missing %s / %s key",
+ TEST_BT_DUN_FILE,
+ NM_SETTING_GSM_SETTING_NAME,
+ NM_SETTING_GSM_APN);
+ ASSERT (strcmp (tmp, expected_apn) == 0,
+ "connection-verify-bt", "failed to verify %s: unexpected %s / %s key value",
+ TEST_BT_DUN_FILE,
+ NM_SETTING_GSM_SETTING_NAME,
+ NM_SETTING_GSM_APN);
+
+ /* Username */
+ tmp = nm_setting_gsm_get_username (s_gsm);
+ ASSERT (tmp != NULL,
+ "connection-verify-gsm", "failed to verify %s: missing %s / %s key",
+ TEST_BT_DUN_FILE,
+ NM_SETTING_GSM_SETTING_NAME,
+ NM_SETTING_GSM_USERNAME);
+ ASSERT (strcmp (tmp, expected_username) == 0,
+ "connection-verify-bt", "failed to verify %s: unexpected %s / %s key value",
+ TEST_BT_DUN_FILE,
+ NM_SETTING_GSM_SETTING_NAME,
+ NM_SETTING_GSM_USERNAME);
+
+ /* Password */
+ tmp = nm_setting_gsm_get_password (s_gsm);
+ ASSERT (tmp != NULL,
+ "connection-verify-gsm", "failed to verify %s: missing %s / %s key",
+ TEST_BT_DUN_FILE,
+ NM_SETTING_GSM_SETTING_NAME,
+ NM_SETTING_GSM_PASSWORD);
+ ASSERT (strcmp (tmp, expected_password) == 0,
+ "connection-verify-bt", "failed to verify %s: unexpected %s / %s key value",
+ TEST_BT_DUN_FILE,
+ NM_SETTING_GSM_SETTING_NAME,
+ NM_SETTING_GSM_PASSWORD);
+
+ /* ===== SERIAL SETTING ===== */
+
+ s_serial = NM_SETTING_SERIAL (nm_connection_get_setting (connection, NM_TYPE_SETTING_SERIAL));
+ ASSERT (s_serial != NULL,
+ "connection-verify-serial", "failed to verify %s: missing %s setting",
+ TEST_BT_DUN_FILE,
+ NM_SETTING_SERIAL_SETTING_NAME);
+
+ /* ===== PPP SETTING ===== */
+
+ s_ppp = NM_SETTING_PPP (nm_connection_get_setting (connection, NM_TYPE_SETTING_PPP));
+ ASSERT (s_ppp != NULL,
+ "connection-verify-ppp", "failed to verify %s: missing %s setting",
+ TEST_BT_DUN_FILE,
+ NM_SETTING_PPP_SETTING_NAME);
+
+ g_object_unref (connection);
+}
+
+static void
+test_write_bt_dun_connection (void)
+{
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ NMSettingBluetooth *s_bt;
+ NMSettingIP4Config *s_ip4;
+ NMSettingGsm *s_gsm;
+ char *uuid;
+ GByteArray *bdaddr;
+ unsigned char tmpbdaddr[] = { 0xaa, 0xb9, 0xa1, 0x74, 0x55, 0x44 };
+ gboolean success;
+ NMConnection *reread;
+ char *testfile = NULL;
+ GError *error = NULL;
+ pid_t owner_grp;
+ uid_t owner_uid;
+ guint64 timestamp = 0x12344433L;
+
+ connection = nm_connection_new ();
+ ASSERT (connection != NULL,
+ "connection-write", "failed to allocate new connection");
+
+ /* Connection setting */
+
+ s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ());
+ ASSERT (s_con != NULL,
+ "connection-write", "failed to allocate new %s setting",
+ NM_SETTING_CONNECTION_SETTING_NAME);
+ nm_connection_add_setting (connection, NM_SETTING (s_con));
+
+ uuid = nm_utils_uuid_generate ();
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_ID, "T-Mobile Funkadelic",
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_AUTOCONNECT, FALSE,
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_BLUETOOTH_SETTING_NAME,
+ NM_SETTING_CONNECTION_TIMESTAMP, timestamp,
+ NULL);
+ g_free (uuid);
+
+ /* Bluetooth setting */
+
+ s_bt = NM_SETTING_BLUETOOTH (nm_setting_bluetooth_new ());
+ ASSERT (s_bt != NULL,
+ "connection-write", "failed to allocate new %s setting",
+ NM_SETTING_BLUETOOTH_SETTING_NAME);
+ nm_connection_add_setting (connection, NM_SETTING (s_bt));
+
+ bdaddr = g_byte_array_sized_new (ETH_ALEN);
+ g_byte_array_append (bdaddr, &tmpbdaddr[0], sizeof (tmpbdaddr));
+
+ g_object_set (s_bt,
+ NM_SETTING_BLUETOOTH_BDADDR, bdaddr,
+ NM_SETTING_BLUETOOTH_TYPE, NM_SETTING_BLUETOOTH_TYPE_DUN,
+ NULL);
+
+ g_byte_array_free (bdaddr, TRUE);
+
+ /* IP4 setting */
+
+ s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ());
+ ASSERT (s_ip4 != NULL,
+ "connection-write", "failed to allocate new %s setting",
+ NM_SETTING_IP4_CONFIG_SETTING_NAME);
+ 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);
+
+ /* GSM setting */
+ s_gsm = NM_SETTING_GSM (nm_setting_gsm_new ());
+ ASSERT (s_gsm != NULL,
+ "connection-write", "failed to allocate new %s setting",
+ NM_SETTING_GSM_SETTING_NAME);
+ nm_connection_add_setting (connection, NM_SETTING (s_gsm));
+
+ g_object_set (s_gsm,
+ NM_SETTING_GSM_APN, "internet2.voicestream.com",
+ NM_SETTING_GSM_USERNAME, "george.clinton",
+ NM_SETTING_GSM_PASSWORD, "parliament",
+ NM_SETTING_GSM_NUMBER, "*99#",
+ NULL);
+
+ /* Serial setting */
+ nm_connection_add_setting (connection, nm_setting_serial_new ());
+
+ /* PPP setting */
+ nm_connection_add_setting (connection, nm_setting_ppp_new ());
+
+
+ /* Write out the connection */
+ owner_uid = geteuid ();
+ owner_grp = getegid ();
+ success = write_connection (connection, TEST_SCRATCH_DIR, owner_uid, owner_grp, &testfile, &error);
+ ASSERT (success == TRUE,
+ "connection-write", "failed to allocate write keyfile: %s",
+ error ? error->message : "(none)");
+
+ ASSERT (testfile != NULL,
+ "connection-write", "didn't get keyfile name back after writing connection");
+
+ /* Read the connection back in and compare it to the one we just wrote out */
+ reread = connection_from_file (testfile, NULL);
+ ASSERT (reread != NULL, "connection-write", "failed to re-read test connection");
+
+ ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
+ "connection-write", "written and re-read connection weren't the same");
+
+ g_clear_error (&error);
+ unlink (testfile);
+ g_free (testfile);
+
+ g_object_unref (reread);
+ g_object_unref (connection);
+}
+
+#define TEST_GSM_FILE TEST_KEYFILES_DIR"/ATT_Data_Connect_Plain"
+
+static void
+test_read_gsm_connection (void)
+{
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ NMSettingSerial *s_serial;
+ NMSettingPPP *s_ppp;
+ NMSettingGsm *s_gsm;
+ NMSetting *s_bluetooth;
+ GError *error = NULL;
+ const char *tmp;
+ const char *expected_id = "AT&T Data Connect";
+ const char *expected_apn = "ISP.CINGULAR";
+ const char *expected_username = "ISP@CINGULARGPRS.COM";
+ const char *expected_password = "CINGULAR1";
+ const char *expected_network_id = "24005";
+ const char *expected_pin = "2345";
+
+ connection = connection_from_file (TEST_GSM_FILE, NULL);
+ ASSERT (connection != NULL,
+ "connection-read", "failed to read %s", TEST_GSM_FILE);
+
+ ASSERT (nm_connection_verify (connection, &error),
+ "connection-verify", "failed to verify %s: %s", TEST_GSM_FILE, error->message);
+
+ /* ===== CONNECTION SETTING ===== */
+
+ s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
+ ASSERT (s_con != NULL,
+ "connection-verify-connection", "failed to verify %s: missing %s setting",
+ TEST_GSM_FILE,
+ NM_SETTING_CONNECTION_SETTING_NAME);
+
+ /* ID */
+ tmp = nm_setting_connection_get_id (s_con);
+ ASSERT (tmp != NULL,
+ "connection-verify-connection", "failed to verify %s: missing %s / %s key",
+ TEST_GSM_FILE,
+ NM_SETTING_CONNECTION_SETTING_NAME,
+ NM_SETTING_CONNECTION_ID);
+ ASSERT (strcmp (tmp, expected_id) == 0,
+ "connection-verify-connection", "failed to verify %s: unexpected %s / %s key value",
+ TEST_GSM_FILE,
+ NM_SETTING_CONNECTION_SETTING_NAME,
+ NM_SETTING_CONNECTION_ID);
+
+ tmp = nm_setting_connection_get_connection_type (s_con);
+ ASSERT (tmp != NULL,
+ "connection-verify-connection", "failed to verify %s: missing %s / %s key",
+ TEST_GSM_FILE,
+ NM_SETTING_CONNECTION_SETTING_NAME,
+ NM_SETTING_CONNECTION_ID);
+ ASSERT (strcmp (tmp, NM_SETTING_GSM_SETTING_NAME) == 0,
+ "connection-verify-connection", "failed to verify %s: unexpected %s / %s key value",
+ TEST_GSM_FILE,
+ NM_SETTING_CONNECTION_SETTING_NAME,
+ NM_SETTING_CONNECTION_TYPE);
+
+ /* ===== BLUETOOTH SETTING ===== */
+
+ /* Plain GSM, so no BT setting expected */
+ s_bluetooth = nm_connection_get_setting (connection, NM_TYPE_SETTING_BLUETOOTH);
+ ASSERT (s_bluetooth == NULL,
+ "connection-verify-bt", "unexpected %s setting",
+ TEST_GSM_FILE,
+ NM_SETTING_BLUETOOTH_SETTING_NAME);
+
+ /* ===== GSM SETTING ===== */
+
+ s_gsm = NM_SETTING_GSM (nm_connection_get_setting (connection, NM_TYPE_SETTING_GSM));
+ ASSERT (s_gsm != NULL,
+ "connection-verify-gsm", "failed to verify %s: missing %s setting",
+ TEST_GSM_FILE,
+ NM_SETTING_GSM_SETTING_NAME);
+
+ /* APN */
+ tmp = nm_setting_gsm_get_apn (s_gsm);
+ ASSERT (tmp != NULL,
+ "connection-verify-gsm", "failed to verify %s: missing %s / %s key",
+ TEST_GSM_FILE,
+ NM_SETTING_GSM_SETTING_NAME,
+ NM_SETTING_GSM_APN);
+ ASSERT (strcmp (tmp, expected_apn) == 0,
+ "connection-verify-gsm", "failed to verify %s: unexpected %s / %s key value",
+ TEST_GSM_FILE,
+ NM_SETTING_GSM_SETTING_NAME,
+ NM_SETTING_GSM_APN);
+
+ /* Username */
+ tmp = nm_setting_gsm_get_username (s_gsm);
+ ASSERT (tmp != NULL,
+ "connection-verify-gsm", "failed to verify %s: missing %s / %s key",
+ TEST_GSM_FILE,
+ NM_SETTING_GSM_SETTING_NAME,
+ NM_SETTING_GSM_USERNAME);
+ ASSERT (strcmp (tmp, expected_username) == 0,
+ "connection-verify-gsm", "failed to verify %s: unexpected %s / %s key value",
+ TEST_GSM_FILE,
+ NM_SETTING_GSM_SETTING_NAME,
+ NM_SETTING_GSM_USERNAME);
+
+ /* Password */
+ tmp = nm_setting_gsm_get_password (s_gsm);
+ ASSERT (tmp != NULL,
+ "connection-verify-gsm", "failed to verify %s: missing %s / %s key",
+ TEST_GSM_FILE,
+ NM_SETTING_GSM_SETTING_NAME,
+ NM_SETTING_GSM_PASSWORD);
+ ASSERT (strcmp (tmp, expected_password) == 0,
+ "connection-verify-gsm", "failed to verify %s: unexpected %s / %s key value",
+ TEST_GSM_FILE,
+ NM_SETTING_GSM_SETTING_NAME,
+ NM_SETTING_GSM_PASSWORD);
+
+ /* Network ID */
+ tmp = nm_setting_gsm_get_network_id (s_gsm);
+ ASSERT (tmp != NULL,
+ "connection-verify-gsm", "failed to verify %s: missing %s / %s key",
+ TEST_GSM_FILE,
+ NM_SETTING_GSM_SETTING_NAME,
+ NM_SETTING_GSM_NETWORK_ID);
+ ASSERT (strcmp (tmp, expected_network_id) == 0,
+ "connection-verify-gsm", "failed to verify %s: unexpected %s / %s key value",
+ TEST_GSM_FILE,
+ NM_SETTING_GSM_SETTING_NAME,
+ NM_SETTING_GSM_NETWORK_ID);
+
+ /* PIN */
+ tmp = nm_setting_gsm_get_pin (s_gsm);
+ ASSERT (tmp != NULL,
+ "connection-verify-gsm", "failed to verify %s: missing %s / %s key",
+ TEST_GSM_FILE,
+ NM_SETTING_GSM_SETTING_NAME,
+ NM_SETTING_GSM_PIN);
+ ASSERT (strcmp (tmp, expected_pin) == 0,
+ "connection-verify-gsm", "failed to verify %s: unexpected %s / %s key value",
+ TEST_GSM_FILE,
+ NM_SETTING_GSM_SETTING_NAME,
+ NM_SETTING_GSM_PIN);
+
+ /* ===== SERIAL SETTING ===== */
+
+ s_serial = NM_SETTING_SERIAL (nm_connection_get_setting (connection, NM_TYPE_SETTING_SERIAL));
+ ASSERT (s_serial != NULL,
+ "connection-verify-serial", "failed to verify %s: missing %s setting",
+ TEST_GSM_FILE,
+ NM_SETTING_SERIAL_SETTING_NAME);
+
+ /* ===== PPP SETTING ===== */
+
+ s_ppp = NM_SETTING_PPP (nm_connection_get_setting (connection, NM_TYPE_SETTING_PPP));
+ ASSERT (s_ppp != NULL,
+ "connection-verify-ppp", "failed to verify %s: missing %s setting",
+ TEST_GSM_FILE,
+ NM_SETTING_PPP_SETTING_NAME);
+
+ g_object_unref (connection);
+}
+
+static void
+test_write_gsm_connection (void)
+{
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ NMSettingIP4Config *s_ip4;
+ NMSettingGsm *s_gsm;
+ char *uuid;
+ gboolean success;
+ NMConnection *reread;
+ char *testfile = NULL;
+ GError *error = NULL;
+ pid_t owner_grp;
+ uid_t owner_uid;
+ guint64 timestamp = 0x12344433L;
+
+ connection = nm_connection_new ();
+ ASSERT (connection != NULL,
+ "connection-write", "failed to allocate new connection");
+
+ /* Connection setting */
+
+ s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ());
+ ASSERT (s_con != NULL,
+ "connection-write", "failed to allocate new %s setting",
+ NM_SETTING_CONNECTION_SETTING_NAME);
+ nm_connection_add_setting (connection, NM_SETTING (s_con));
+
+ uuid = nm_utils_uuid_generate ();
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_ID, "T-Mobile Funkadelic 2",
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_AUTOCONNECT, FALSE,
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_GSM_SETTING_NAME,
+ NM_SETTING_CONNECTION_TIMESTAMP, timestamp,
+ NULL);
+ g_free (uuid);
+
+ /* IP4 setting */
+
+ s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ());
+ ASSERT (s_ip4 != NULL,
+ "connection-write", "failed to allocate new %s setting",
+ NM_SETTING_IP4_CONFIG_SETTING_NAME);
+ 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);
+
+ /* GSM setting */
+ s_gsm = NM_SETTING_GSM (nm_setting_gsm_new ());
+ ASSERT (s_gsm != NULL,
+ "connection-write", "failed to allocate new %s setting",
+ NM_SETTING_GSM_SETTING_NAME);
+ nm_connection_add_setting (connection, NM_SETTING (s_gsm));
+
+ g_object_set (s_gsm,
+ NM_SETTING_GSM_APN, "internet2.voicestream.com",
+ NM_SETTING_GSM_USERNAME, "george.clinton.again",
+ NM_SETTING_GSM_PASSWORD, "parliament2",
+ NM_SETTING_GSM_NUMBER, "*99#",
+ NM_SETTING_GSM_PIN, "123456",
+ NM_SETTING_GSM_NETWORK_ID, "254098",
+ NM_SETTING_GSM_HOME_ONLY, TRUE,
+ NM_SETTING_GSM_NETWORK_TYPE, NM_SETTING_GSM_NETWORK_TYPE_PREFER_UMTS_HSPA,
+ NULL);
+
+ /* Serial setting */
+ nm_connection_add_setting (connection, nm_setting_serial_new ());
+
+ /* PPP setting */
+ nm_connection_add_setting (connection, nm_setting_ppp_new ());
+
+
+ /* Write out the connection */
+ owner_uid = geteuid ();
+ owner_grp = getegid ();
+ success = write_connection (connection, TEST_SCRATCH_DIR, owner_uid, owner_grp, &testfile, &error);
+ ASSERT (success == TRUE,
+ "connection-write", "failed to allocate write keyfile: %s",
+ error ? error->message : "(none)");
+
+ ASSERT (testfile != NULL,
+ "connection-write", "didn't get keyfile name back after writing connection");
+
+ /* Read the connection back in and compare it to the one we just wrote out */
+ reread = connection_from_file (testfile, NULL);
ASSERT (reread != NULL, "connection-write", "failed to re-read test connection");
ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
@@ -1295,11 +1987,9 @@ test_write_wireless_connection (void)
int main (int argc, char **argv)
{
GError *error = NULL;
- DBusGConnection *bus;
char *base;
g_type_init ();
- bus = dbus_g_bus_get (DBUS_BUS_SESSION, NULL);
if (!nm_utils_init (&error))
FAIL ("nm-utils-init", "failed to initialize libnm-util: %s", error->message);
@@ -1316,10 +2006,18 @@ int main (int argc, char **argv)
test_read_valid_wireless_connection ();
test_write_wireless_connection ();
+ test_read_string_ssid ();
+ test_write_string_ssid ();
+
+ test_read_bt_dun_connection ();
+ test_write_bt_dun_connection ();
+
+ test_read_gsm_connection ();
+ test_write_gsm_connection ();
+
base = g_path_get_basename (argv[0]);
fprintf (stdout, "%s: SUCCESS\n", base);
g_free (base);
- dbus_g_connection_unref (bus);
return 0;
}
diff --git a/system-settings/plugins/keyfile/utils.c b/system-settings/plugins/keyfile/utils.c
new file mode 100644
index 0000000000..de64f7913b
--- /dev/null
+++ b/system-settings/plugins/keyfile/utils.c
@@ -0,0 +1,97 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager system settings service
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * (C) Copyright 2010 Red Hat, Inc.
+ */
+
+#include <glib.h>
+#include <stdlib.h>
+#include <string.h>
+#include "utils.h"
+
+
+static const char temp_letters[] =
+"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+
+/*
+ * Check '.[a-zA-Z0-9]{6}' file suffix used for temporary files by g_file_set_contents() (mkstemp()).
+ */
+static gboolean
+check_mkstemp_suffix (const char *path)
+{
+ const char *ptr;
+
+ g_return_val_if_fail (path != NULL, FALSE);
+
+ /* Matches *.[a-zA-Z0-9]{6} suffix of mkstemp()'s temporary files */
+ ptr = strrchr (path, '.');
+ if (ptr && (strspn (ptr + 1, temp_letters) == 6) && (! ptr[7]))
+ return TRUE;
+ return FALSE;
+}
+
+static gboolean
+check_prefix (const char *base, const char *tag)
+{
+ int len, tag_len;
+
+ g_return_val_if_fail (base != NULL, TRUE);
+ g_return_val_if_fail (tag != NULL, TRUE);
+
+ len = strlen (base);
+ tag_len = strlen (tag);
+ if ((len > tag_len) && !strncasecmp (base, tag, tag_len))
+ return TRUE;
+ return FALSE;
+}
+
+static gboolean
+check_suffix (const char *base, const char *tag)
+{
+ int len, tag_len;
+
+ g_return_val_if_fail (base != NULL, TRUE);
+ g_return_val_if_fail (tag != NULL, TRUE);
+
+ len = strlen (base);
+ tag_len = strlen (tag);
+ if ((len > tag_len) && !strcasecmp (base + len - tag_len, tag))
+ return TRUE;
+ return FALSE;
+}
+
+gboolean
+utils_should_ignore_file (const char *filename)
+{
+ char *base;
+ gboolean ignore = FALSE;
+
+ g_return_val_if_fail (filename != NULL, TRUE);
+
+ base = g_path_get_basename (filename);
+ g_return_val_if_fail (base != NULL, TRUE);
+
+ /* Ignore files with certain patterns */
+ if ( (check_prefix (base, ".") && check_suffix (base, SWP_TAG)) /* vim temporary files: .filename.swp */
+ || (check_prefix (base, ".") && check_suffix (base, SWPX_TAG)) /* vim temporary files: .filename.swpx */
+ || check_mkstemp_suffix (base)) /* temporary files created by mkstemp() */
+ ignore = TRUE;
+
+ g_free (base);
+ return ignore;
+}
+
diff --git a/system-settings/plugins/keyfile/utils.h b/system-settings/plugins/keyfile/utils.h
new file mode 100644
index 0000000000..3c1a6104bd
--- /dev/null
+++ b/system-settings/plugins/keyfile/utils.h
@@ -0,0 +1,30 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager system settings service
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * (C) Copyright 2010 Red Hat, Inc.
+ */
+
+#ifndef _UTILS_H_
+#define _UTILS_H_
+
+#include <glib.h>
+#include "common.h"
+
+gboolean utils_should_ignore_file (const char *filename);
+
+#endif /* _UTILS_H_ */
+
diff --git a/system-settings/plugins/keyfile/io/writer.c b/system-settings/plugins/keyfile/writer.c
index 355d624c19..ffac35cff5 100644
--- a/system-settings/plugins/keyfile/io/writer.c
+++ b/system-settings/plugins/keyfile/writer.c
@@ -31,15 +31,16 @@
#include <nm-setting-wired.h>
#include <nm-setting-wireless.h>
#include <nm-setting-ip4-config.h>
+#include <nm-setting-bluetooth.h>
#include <nm-utils.h>
#include <string.h>
#include <arpa/inet.h>
#include <netinet/ether.h>
-#include <nm-settings-interface.h>
+#include <ctype.h>
#include "nm-dbus-glib-types.h"
#include "writer.h"
-#include "reader.h"
+#include "common.h"
static gboolean
write_array_of_uint (GKeyFile *file,
@@ -453,13 +454,56 @@ write_hash_of_string (GKeyFile *file,
g_hash_table_foreach (hash, write_hash_of_string_helper, &info);
}
+static void
+ssid_writer (GKeyFile *file,
+ NMSetting *setting,
+ const char *key,
+ const GValue *value)
+{
+ GByteArray *array;
+ const char *setting_name = nm_setting_get_name (setting);
+ gboolean new_format = TRUE;
+ int i, *tmp_array;
+ char *ssid;
+
+ g_return_if_fail (G_VALUE_HOLDS (value, DBUS_TYPE_G_UCHAR_ARRAY));
+
+ array = (GByteArray *) g_value_get_boxed (value);
+ if (!array || !array->len)
+ return;
+
+ /* Check whether each byte is printable. If not, we have to use an
+ * integer list, otherwise we can just use a string.
+ */
+ for (i = 0; i < array->len; i++) {
+ char c = array->data[i] & 0xFF;
+ if (!isprint (c)) {
+ new_format = FALSE;
+ break;
+ }
+ }
+
+ if (new_format) {
+ ssid = g_malloc0 (array->len + 1);
+ memcpy (ssid, array->data, array->len);
+ g_key_file_set_string (file, setting_name, key, ssid);
+ g_free (ssid);
+ } else {
+ tmp_array = g_new (gint, array->len);
+ for (i = 0; i < array->len; i++)
+ tmp_array[i] = (int) array->data[i];
+ g_key_file_set_integer_list (file, setting_name, key, tmp_array, array->len);
+ g_free (tmp_array);
+ }
+}
+
typedef struct {
const char *setting_name;
const char *key;
void (*writer) (GKeyFile *keyfile, NMSetting *setting, const char *key, const GValue *value);
} KeyWriter;
-/* A table of keys that require further parsing/conversion becuase they are
+/* A table of keys that require further parsing/conversion because they are
* stored in a format that can't be automatically read using the key's type.
* i.e. IPv4 addresses, which are stored in NetworkManager as guint32, but are
* stored in keyfiles as strings, eg "10.1.1.2" or IPv6 addresses stored
@@ -487,12 +531,24 @@ static KeyWriter key_writers[] = {
{ NM_SETTING_WIRED_SETTING_NAME,
NM_SETTING_WIRED_MAC_ADDRESS,
mac_address_writer },
+ { NM_SETTING_WIRED_SETTING_NAME,
+ NM_SETTING_WIRED_CLONED_MAC_ADDRESS,
+ mac_address_writer },
{ NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_MAC_ADDRESS,
mac_address_writer },
{ NM_SETTING_WIRELESS_SETTING_NAME,
+ NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS,
+ mac_address_writer },
+ { NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_BSSID,
mac_address_writer },
+ { NM_SETTING_BLUETOOTH_SETTING_NAME,
+ NM_SETTING_BLUETOOTH_BDADDR,
+ mac_address_writer },
+ { NM_SETTING_WIRELESS_SETTING_NAME,
+ NM_SETTING_WIRELESS_SSID,
+ ssid_writer },
{ NULL, NULL, NULL }
};
@@ -505,10 +561,9 @@ write_setting_value (NMSetting *setting,
{
GKeyFile *file = (GKeyFile *) user_data;
const char *setting_name;
- GType type;
+ GType type = G_VALUE_TYPE (value);
KeyWriter *writer = &key_writers[0];
-
- type = G_VALUE_TYPE (value);
+ GParamSpec *pspec;
/* Setting name gets picked up from the keyfile's section name instead */
if (!strcmp (key, NM_SETTING_NAME))
@@ -521,6 +576,15 @@ write_setting_value (NMSetting *setting,
setting_name = nm_setting_get_name (setting);
+ /* If the value is the default value, remove the item from the keyfile */
+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (setting), key);
+ if (pspec) {
+ if (g_param_value_defaults (pspec, (GValue *) value)) {
+ g_key_file_remove_key (file, setting_name, key, NULL);
+ return;
+ }
+ }
+
/* Look through the list of handlers for non-standard format key values */
while (writer->setting_name) {
if (!strcmp (writer->setting_name, setting_name) && !strcmp (writer->key, key)) {
@@ -649,18 +713,14 @@ write_connection (NMConnection *connection,
g_file_set_contents (path, data, len, error);
if (chown (path, owner_uid, owner_grp) < 0) {
- g_set_error (error,
- NM_SETTINGS_INTERFACE_ERROR,
- NM_SETTINGS_INTERFACE_ERROR_INTERNAL_ERROR,
+ g_set_error (error, KEYFILE_PLUGIN_ERROR, 0,
"%s.%d: error chowning '%s': %d", __FILE__, __LINE__,
path, errno);
unlink (path);
} else {
err = chmod (path, S_IRUSR | S_IWUSR);
if (err) {
- g_set_error (error,
- NM_SETTINGS_INTERFACE_ERROR,
- NM_SETTINGS_INTERFACE_ERROR_INTERNAL_ERROR,
+ g_set_error (error, KEYFILE_PLUGIN_ERROR, 0,
"%s.%d: error setting permissions on '%s': %d", __FILE__,
__LINE__, path, errno);
unlink (path);
diff --git a/system-settings/plugins/keyfile/io/writer.h b/system-settings/plugins/keyfile/writer.h
index fa04deef98..fa04deef98 100644
--- a/system-settings/plugins/keyfile/io/writer.h
+++ b/system-settings/plugins/keyfile/writer.h
diff --git a/test/Makefile.am b/test/Makefile.am
index 8e235e4322..7bdaf0db96 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -10,9 +10,9 @@ AM_CPPFLAGS = \
-DNM_RUN_DIR=\"$(rundir)\" \
-DDATADIR=\"$(datadir)\"
-bin_PROGRAMS = nm-tool
+bin_PROGRAMS = nm-tool nm-online
-noinst_PROGRAMS = nm-online libnm-glib-test
+noinst_PROGRAMS = libnm-glib-test
nm_tool_SOURCES = nm-tool.c
nm_tool_LDADD = \
diff --git a/test/NMLoadModules b/test/NMLoadModules
deleted file mode 100755
index 0dc6a486cc..0000000000
--- a/test/NMLoadModules
+++ /dev/null
@@ -1,61 +0,0 @@
-#! /bin/bash
-# Load kernel modules for all network devices
-
-CWD=`pwd`
-cd /etc/sysconfig/network-scripts
-
-# find all the interfaces besides loopback.
-# ignore aliases, alternative configurations, and editor backup files
-interfaces=`ls ifcfg* | LANG=C egrep -v '(ifcfg-lo|:|rpmsave|rpmorig|rpmnew)' | \
- LANG=C egrep -v '(~|\.bak)$' | \
- LANG=C egrep 'ifcfg-[A-Za-z0-9\._-]+$' | \
- sed 's/^ifcfg-//g' |
- sed 's/[0-9]/ &/' | LANG=C sort -k 1,1 -k 2n | sed 's/ //'`
-
-# bring up all other interfaces configured to come up at boot time
-for i in $interfaces; do
- eval $(LANG=C fgrep "DEVICE=" ifcfg-$i)
- eval $(LANG=C fgrep "TYPE=" ifcfg-$i)
- eval $(LANG=C fgrep "SLAVE=" ifcfg-$i)
- eval $(LANG=C fgrep "BRIDGE=" ifcfg-$i)
-
- if [ -z "$DEVICE" ] ; then DEVICE="$i"; fi
-
- if [ "${DEVICE##cipcb}" != "$DEVICE" ] ; then
- unset DEVICE TYPE SLAVE BRIDGE
- continue
- fi
-
- if [ "$TYPE" = "xDSL" ]; then
- unset DEVICE TYPE SLAVE BRIDGE
- continue
- fi
-
- if [ -n "$BRIDGE" ]; then
- unset DEVICE TYPE SLAVE BRIDGE
- continue
- fi
-
- if [ "${DEVICE%%.*}" != "$DEVICE" ] ; then
- unset DEVICE TYPE SLAVE BRIDGE
- continue
- fi
-
- if [ "$SLAVE" = "yes" ]; then
- unset DEVICE TYPE SLAVE BRIDGE
- continue
- fi
- unset DEVICE TYPE SLAVE BRIDGE
-
- # Load the module
- LC_ALL= LANG= /sbin/ip -o link | grep -q $i
- if [ "$?" = "1" ]; then
- alias=`modprobe -c | awk "/^(alias|install)[[:space:]]+$i[[:space:]]/ { print \\$3 }"`
- if [ -n "$alias" -a "$alias" != "off" -a "$alias" != "/bin/true" ]; then
- modprobe $alias > /dev/null 2>&1
- fi
- fi
- continue
-done
-
-exit 0
diff --git a/test/nm-online.c b/test/nm-online.c
index 3827c74690..27bf1789fb 100644
--- a/test/nm-online.c
+++ b/test/nm-online.c
@@ -153,7 +153,7 @@ int main (int argc, char *argv[])
g_option_context_free (opt_ctx);
if (!success) {
- g_error ("Invalid option. Please use --help to see a list of valid options.");
+ g_warning ("Invalid option. Please use --help to see a list of valid options.");
return 2;
}
@@ -162,7 +162,7 @@ int main (int argc, char *argv[])
else
timeout.value = 30;
if (timeout.value < 0 || timeout.value > 3600) {
- g_error ("Invalid option. Please use --help to see a list of valid options.");
+ g_warning ("Invalid option. Please use --help to see a list of valid options.");
return 2;
}
diff --git a/test/nm-tool.c b/test/nm-tool.c
index dc4efb8c9d..54b7fcbbe9 100644
--- a/test/nm-tool.c
+++ b/test/nm-tool.c
@@ -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 2005 - 2009 Red Hat, Inc.
+ * (C) Copyright 2005 - 2010 Red Hat, Inc.
* (C) Copyright 2007 Novell, Inc.
*/
@@ -41,6 +41,7 @@
#include <nm-wimax-device.h>
#include <nm-utils.h>
#include <nm-setting-ip4-config.h>
+#include <nm-setting-ip6-config.h>
#include <nm-vpn-connection.h>
#include <nm-setting-connection.h>
@@ -251,6 +252,28 @@ ip4_address_as_string (guint32 ip)
}
}
+static gchar *
+ip6_address_as_string (const struct in6_addr *ip)
+{
+ char buf[INET6_ADDRSTRLEN];
+
+ memset (&buf, '\0', sizeof (buf));
+
+ if (inet_ntop (AF_INET6, ip, buf, INET6_ADDRSTRLEN)) {
+ return g_strdup (buf);
+ } else {
+ int j;
+ GString *ip6_str = g_string_new (NULL);
+ g_string_append_printf (ip6_str, "%02X", ip->s6_addr[0]);
+ for (j = 1; j < 16; j++)
+ g_string_append_printf (ip6_str, " %02X", ip->s6_addr[j]);
+ nm_warning ("%s: error converting IP6 address %s",
+ __func__, ip6_str->str);
+ g_string_free (ip6_str, TRUE);
+ return NULL;
+ }
+}
+
static const char *
get_dev_state_string (NMDeviceState state)
{
@@ -459,38 +482,69 @@ detail_device (gpointer data, gpointer user_data)
/* IP Setup info */
if (state == NM_DEVICE_STATE_ACTIVATED) {
- NMIP4Config *cfg = nm_device_get_ip4_config (device);
+ NMIP4Config *cfg4 = nm_device_get_ip4_config (device);
+ NMIP6Config *cfg6 = nm_device_get_ip6_config (device);
GSList *iter;
- printf ("\n IPv4 Settings:\n");
+ if (cfg4) {
+ printf ("\n IPv4 Settings:\n");
- for (iter = (GSList *) nm_ip4_config_get_addresses (cfg); iter; iter = g_slist_next (iter)) {
- NMIP4Address *addr = (NMIP4Address *) iter->data;
- guint32 prefix = nm_ip4_address_get_prefix (addr);
- char *tmp2;
+ for (iter = (GSList *) nm_ip4_config_get_addresses (cfg4); iter; iter = g_slist_next (iter)) {
+ NMIP4Address *addr = (NMIP4Address *) iter->data;
+ guint32 prefix = nm_ip4_address_get_prefix (addr);
+ char *tmp2;
- tmp = ip4_address_as_string (nm_ip4_address_get_address (addr));
- print_string (" Address", tmp);
- g_free (tmp);
+ tmp = ip4_address_as_string (nm_ip4_address_get_address (addr));
+ print_string (" Address", tmp);
+ g_free (tmp);
- tmp2 = ip4_address_as_string (nm_utils_ip4_prefix_to_netmask (prefix));
- tmp = g_strdup_printf ("%d (%s)", prefix, tmp2);
- g_free (tmp2);
- print_string (" Prefix", tmp);
- g_free (tmp);
+ tmp2 = ip4_address_as_string (nm_utils_ip4_prefix_to_netmask (prefix));
+ tmp = g_strdup_printf ("%d (%s)", prefix, tmp2);
+ g_free (tmp2);
+ print_string (" Prefix", tmp);
+ g_free (tmp);
- tmp = ip4_address_as_string (nm_ip4_address_get_gateway (addr));
- print_string (" Gateway", tmp);
- g_free (tmp);
- printf ("\n");
+ tmp = ip4_address_as_string (nm_ip4_address_get_gateway (addr));
+ print_string (" Gateway", tmp);
+ g_free (tmp);
+ printf ("\n");
+ }
+
+ array = nm_ip4_config_get_nameservers (cfg4);
+ if (array) {
+ int i;
+
+ for (i = 0; i < array->len; i++) {
+ tmp = ip4_address_as_string (g_array_index (array, guint32, i));
+ print_string (" DNS", tmp);
+ g_free (tmp);
+ }
+ }
}
- array = nm_ip4_config_get_nameservers (cfg);
- if (array) {
- int i;
+ if (cfg6) {
+ printf ("\n IPv6 Settings:\n");
+
+ for (iter = (GSList *) nm_ip6_config_get_addresses (cfg6); iter; iter = g_slist_next (iter)) {
+ NMIP6Address *addr = (NMIP6Address *) iter->data;
+ guint32 prefix = nm_ip6_address_get_prefix (addr);
+
+ tmp = ip6_address_as_string (nm_ip6_address_get_address (addr));
+ print_string (" Address", tmp);
+ g_free (tmp);
- for (i = 0; i < array->len; i++) {
- tmp = ip4_address_as_string (g_array_index (array, guint32, i));
+ tmp = g_strdup_printf ("%d", prefix);
+ print_string (" Prefix", tmp);
+ g_free (tmp);
+
+ tmp = ip6_address_as_string (nm_ip6_address_get_gateway (addr));
+ print_string (" Gateway", tmp);
+ g_free (tmp);
+ printf ("\n");
+ }
+
+ for (iter = (GSList *) nm_ip6_config_get_nameservers (cfg6); iter; iter = g_slist_next (iter)) {
+ tmp = ip6_address_as_string (iter->data);
print_string (" DNS", tmp);
g_free (tmp);
}
@@ -541,7 +595,7 @@ detail_vpn (gpointer data, gpointer user_data)
g_return_if_fail (connection != NULL);
s_con = (NMSettingConnection *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION);
- g_return_if_fail (connection != NULL);
+ g_return_if_fail (s_con != NULL);
print_header ("VPN", NULL, nm_setting_connection_get_id (s_con));
@@ -649,8 +703,7 @@ get_connections_for_service (DBusGConnection *bus,
G_TYPE_INVALID,
DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH, &paths,
G_TYPE_INVALID)) {
- g_warning ("error: failed to read connections from %s:\n %s",
- service, error ? error->message : "(unknown)");
+ /* No connections or settings service may not be running */
g_clear_error (&error);
goto out;
}