From 36795744b71c154afe9514b8913f7a6c387e3062 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Gonz=C3=A1lez?= Date: Mon, 27 Sep 2010 14:51:59 -0500 Subject: [PATCH 01/40] po: update Spanish translation (bgo #630562) --- po/es.po | 175 +++++++++++++++++++++++++------------------------------ 1 file changed, 81 insertions(+), 94 deletions(-) diff --git a/po/es.po b/po/es.po index d002f77513..74746f4a46 100644 --- a/po/es.po +++ b/po/es.po @@ -1,5 +1,5 @@ # translation of es.po to Spanish -# translation of NetworkManager.HEAD.po to +# 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. @@ -12,11 +12,11 @@ # msgid "" msgstr "" -"Project-Id-Version: es\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-09-17 15:25+0000\n" -"PO-Revision-Date: 2010-09-18 11:01+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 \n" "Language-Team: Español \n" "MIME-Version: 1.0\n" @@ -94,7 +94,12 @@ msgstr "AUTOCONECTAR" msgid "READONLY" msgstr "SÓLOLECTURA" -#: ../cli/src/connections.c:158 +#. 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" @@ -115,37 +120,37 @@ msgstr "" "]\n" " down id | uuid \n" -#: ../cli/src/connections.c:198 ../cli/src/connections.c:537 +#: ../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:200 ../cli/src/connections.c:539 +#: ../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:208 +#: ../cli/src/connections.c:209 msgid "Connection details" msgstr "Detalles de conexiones" -#: ../cli/src/connections.c:382 ../cli/src/connections.c:602 +#: ../cli/src/connections.c:384 ../cli/src/connections.c:605 msgid "system" msgstr "sistema" -#: ../cli/src/connections.c:382 ../cli/src/connections.c:602 +#: ../cli/src/connections.c:384 ../cli/src/connections.c:605 msgid "user" msgstr "usuario" -#: ../cli/src/connections.c:384 +#: ../cli/src/connections.c:386 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/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 @@ -164,8 +169,8 @@ msgstr "nunca" msgid "yes" msgstr "sí" -#: ../cli/src/connections.c:385 ../cli/src/connections.c:386 -#: ../cli/src/connections.c:603 ../cli/src/connections.c:606 +#: ../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 @@ -184,272 +189,272 @@ msgstr "sí" msgid "no" msgstr "no" -#: ../cli/src/connections.c:458 ../cli/src/connections.c:501 +#: ../cli/src/connections.c:461 ../cli/src/connections.c:504 msgid "System connections" msgstr "Conexiones de sistema" -#: ../cli/src/connections.c:463 ../cli/src/connections.c:514 +#: ../cli/src/connections.c:466 ../cli/src/connections.c:517 msgid "User connections" msgstr "Conexiones de 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/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:488 +#: ../cli/src/connections.c:491 #, c-format msgid "Error: %s - no such connection." msgstr "Error: %s - no hay tal conexión." -#: ../cli/src/connections.c:520 ../cli/src/connections.c:1384 -#: ../cli/src/connections.c:1474 ../cli/src/devices.c:785 +#: ../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:529 +#: ../cli/src/connections.c:532 #, c-format msgid "Error: no valid parameter specified." msgstr "Error: no se especificó un parámetro válido." -#: ../cli/src/connections.c:544 ../cli/src/connections.c:1577 +#: ../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:650 +#: ../cli/src/connections.c:653 #, c-format msgid "Error: 'con status': %s" msgstr "Error: «con status»: %s" -#: ../cli/src/connections.c:652 +#: ../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:659 +#: ../cli/src/connections.c:662 msgid "Active connections" msgstr "Conexiones activas" -#: ../cli/src/connections.c:1027 +#: ../cli/src/connections.c:1030 #, c-format msgid "no active connection on device '%s'" msgstr "conexión no activa en el dispositivo «%s»" -#: ../cli/src/connections.c:1035 +#: ../cli/src/connections.c:1038 #, c-format msgid "no active connection or device" msgstr "conexión o dispositivo no activo" -#: ../cli/src/connections.c:1085 +#: ../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:1087 +#: ../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:1098 +#: ../cli/src/connections.c:1101 msgid "activating" msgstr "activando" -#: ../cli/src/connections.c:1100 +#: ../cli/src/connections.c:1103 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/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:1112 +#: ../cli/src/connections.c:1115 msgid "VPN connecting (prepare)" msgstr "Conectando VPN (preparar)" -#: ../cli/src/connections.c:1114 +#: ../cli/src/connections.c:1117 msgid "VPN connecting (need authentication)" msgstr "Conectando VPN (necesita autenticación)" -#: ../cli/src/connections.c:1116 +#: ../cli/src/connections.c:1119 msgid "VPN connecting" msgstr "Conectando VPN" -#: ../cli/src/connections.c:1118 +#: ../cli/src/connections.c:1121 msgid "VPN connecting (getting IP configuration)" msgstr "Conectando VPN (obteniendo configuración IP)" -#: ../cli/src/connections.c:1120 +#: ../cli/src/connections.c:1123 msgid "VPN connected" msgstr "VPN conectada" -#: ../cli/src/connections.c:1122 +#: ../cli/src/connections.c:1125 msgid "VPN connection failed" msgstr "Falló la conexión VPN" -#: ../cli/src/connections.c:1124 +#: ../cli/src/connections.c:1127 msgid "VPN disconnected" msgstr "VPN desconectada" -#: ../cli/src/connections.c:1135 +#: ../cli/src/connections.c:1138 msgid "unknown reason" msgstr "razón desconocida" -#: ../cli/src/connections.c:1137 +#: ../cli/src/connections.c:1140 msgid "none" msgstr "ninguna" -#: ../cli/src/connections.c:1139 +#: ../cli/src/connections.c:1142 msgid "the user was disconnected" msgstr "el usuario estaba desconectado" -#: ../cli/src/connections.c:1141 +#: ../cli/src/connections.c:1144 msgid "the base network connection was interrupted" msgstr "se interrumpió la conexión de red de base" -#: ../cli/src/connections.c:1143 +#: ../cli/src/connections.c:1146 msgid "the VPN service stopped unexpectedly" msgstr "el servicio VPN se detuvo inesperadamente" -#: ../cli/src/connections.c:1145 +#: ../cli/src/connections.c:1148 msgid "the VPN service returned invalid configuration" msgstr "el servicio VPN retornó una configuración no válida" -#: ../cli/src/connections.c:1147 +#: ../cli/src/connections.c:1150 msgid "the connection attempt timed out" msgstr "se agotaron los intentos de conexión" -#: ../cli/src/connections.c:1149 +#: ../cli/src/connections.c:1152 msgid "the VPN service did not start in time" msgstr "el servicio VPN no inició a tiempo" -#: ../cli/src/connections.c:1151 +#: ../cli/src/connections.c:1154 msgid "the VPN service failed to start" msgstr "el servicio VPN falló en el inicio" -#: ../cli/src/connections.c:1153 +#: ../cli/src/connections.c:1156 msgid "no valid VPN secrets" msgstr "secretos VPN inválidos" -#: ../cli/src/connections.c:1155 +#: ../cli/src/connections.c:1158 msgid "invalid VPN secrets" msgstr "secretos VPN válidos" -#: ../cli/src/connections.c:1157 +#: ../cli/src/connections.c:1160 msgid "the connection was removed" msgstr "se eliminó la conexión" -#: ../cli/src/connections.c:1171 +#: ../cli/src/connections.c:1174 #, c-format msgid "state: %s\n" msgstr "estado: %s\n" -#: ../cli/src/connections.c:1174 ../cli/src/connections.c:1200 +#: ../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:1177 +#: ../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:1196 +#: ../cli/src/connections.c:1199 #, c-format msgid "state: %s (%d)\n" msgstr "estado: %s (%d)\n" -#: ../cli/src/connections.c:1206 +#: ../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:1223 ../cli/src/devices.c:909 +#: ../cli/src/connections.c:1226 ../cli/src/devices.c:909 #, c-format msgid "Error: Timeout %d sec expired." msgstr "Error: expiró la pausa de %d segundos." -#: ../cli/src/connections.c:1266 +#: ../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:1280 +#: ../cli/src/connections.c:1283 #, c-format msgid "Error: Obtaining active connection for '%s' failed." msgstr "Error: falló la obtención de conexión activa para «%s»." -#: ../cli/src/connections.c:1289 +#: ../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:1290 +#: ../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:1344 ../cli/src/connections.c:1465 +#: ../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:1379 ../cli/src/devices.c:980 +#: ../cli/src/connections.c:1382 ../cli/src/devices.c:980 #, c-format msgid "Error: timeout value '%s' is not valid." msgstr "Error: valor de pausa «%s» inválido." -#: ../cli/src/connections.c:1392 ../cli/src/connections.c:1482 +#: ../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 un id o uuid." -#: ../cli/src/connections.c:1412 +#: ../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:1414 +#: ../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:1509 +#: ../cli/src/connections.c:1512 #, c-format msgid "Warning: Connection not active\n" msgstr "Advertencia: conexión inactiva\n" -#: ../cli/src/connections.c:1566 +#: ../cli/src/connections.c:1569 #, c-format msgid "Error: 'con' command '%s' is not valid." msgstr "Error: comando «con» «%s» no es válido." -#: ../cli/src/connections.c:1602 +#: ../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:1609 +#: ../cli/src/connections.c:1612 #, c-format msgid "Error: Could not get system settings." msgstr "Error: no se pudo obtener configuración de sistema." -#: ../cli/src/connections.c:1617 +#: ../cli/src/connections.c:1620 #, c-format msgid "Error: Could not get user settings." msgstr "Error: No se pudo obtener configuración de usuario." -#: ../cli/src/connections.c:1627 +#: ../cli/src/connections.c:1630 #, c-format msgid "Error: Can't obtain connections: settings services are not running." msgstr "" @@ -891,17 +896,6 @@ 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" @@ -973,19 +967,16 @@ msgstr "no ejecutando" #: ../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 "Error: no se pudo conectar con el bus del sistema: %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 "Error: no se pudo crear un objeto proxy en D-Bus." #: ../cli/src/network-manager.c:192 #, c-format -#| msgid "Error: 'con list': %s" msgid "Error in sleep: %s" msgstr "Error al dormir: %s" @@ -996,25 +987,21 @@ 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:245 -#| msgid "WiFi enabled" msgid "Networking enabled" msgstr "Red activada" #: ../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 "Error: parámetro «enable» inválido: «%s»; use «true» o «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 "Error: NetworkManager no exporta el estado para dormir." #: ../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 "Error: parámetro «wifi» inválido: «%s»." From f62666dbff3dea6b1008b1fcd6ed66e7f981566e Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Mon, 27 Sep 2010 16:29:56 -0500 Subject: [PATCH 02/40] cli: don't crash if for some reason HW addresses aren't available (bgo #630534) --- cli/src/connections.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/cli/src/connections.c b/cli/src/connections.c index 5099b502d9..e0b94ceb8c 100644 --- a/cli/src/connections.c +++ b/cli/src/connections.c @@ -717,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_permanent_hw_address (device); - device_mac = ether_aton (device_mac_str); + 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; @@ -766,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_permanent_hw_address (device); - device_mac = ether_aton (device_mac_str); + 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; From 44cfbf201f90459b3f4098413a87e3280d770477 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Tue, 28 Sep 2010 14:18:34 -0500 Subject: [PATCH 03/40] wifi: allow proactive_key_caching through the supplicant settings filter (rh #615032) (rh #636877) This makes 596cf1a232d33c0dbeee61d8e927d7a09f40159f actually work. --- src/supplicant-manager/nm-supplicant-settings-verify.c | 1 + 1 file changed, 1 insertion(+) 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 }, }; From e650b2f23db19cfe8d111cf0376e16a1f881a13b Mon Sep 17 00:00:00 2001 From: Damyan Ivanov Date: Wed, 29 Sep 2010 19:10:04 -0500 Subject: [PATCH 04/40] po: update Bulgarian translation (bgo #630950) --- po/bg.po | 2161 ++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 1847 insertions(+), 314 deletions(-) diff --git a/po/bg.po b/po/bg.po index 7c8ad028e8..5a1e7c1c08 100644 --- a/po/bg.po +++ b/po/bg.po @@ -2,68 +2,1837 @@ # Copyright (C) 2005, 2007, 2008 Free Software Foundation, Inc. # This file is distributed under the same license as the NetworkManager package. # Alexander Shopov , 2005, 2007, 2008. +# Damyan Ivanov , 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 \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 \n" "Language-Team: Bulgarian \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 "" +"Usage: nmcli con { COMMAND | help }\n" +" COMMAND := { list | status | up | down }\n" +"\n" +" list [id | uuid | system | user]\n" +" status\n" +" up id | uuid [iface ] [ap ] [--nowait] [--timeout " +"]\n" +" down id | uuid \n" +msgstr "" +"Употреба: 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" + +#: ../cli/src/connections.c:199 ../cli/src/connections.c:540 +#, c-format +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 "" +"Указването на идентификатор или универсален идентификатор (uuid) е " +"задължително." + +#: ../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 "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 ]\n" +" disconnect iface [--nowait] [--timeout ]\n" +" wifi [list [iface ] [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 "" +"Употреба: 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" + +#: ../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 "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 "" +"Недопустим аргумент на „enable“ – „%s“. Използвайте „true“ или „false“." + +#: ../cli/src/network-manager.c:265 +#, c-format +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“ не е правилен параметър за „sleep“. Използвайте „true“ или „false“." + +#: ../cli/src/network-manager.c:294 +msgid "WiFi enabled" +msgstr "Безжичната мрежа е включена" + +#: ../cli/src/network-manager.c:305 +#, c-format +msgid "Error: invalid 'wifi' parameter: '%s'." +msgstr "„%s“ не е правилен параметър за „wifi“." + +#: ../cli/src/network-manager.c:326 +msgid "WWAN enabled" +msgstr "Мобилната мрежа е включена" + +#: ../cli/src/network-manager.c:337 +#, c-format +msgid "Error: invalid 'wwan' parameter: '%s'." +msgstr "„%s“ не е правилен параметър за „wwan“." + +#: ../cli/src/network-manager.c:348 +#, c-format +msgid "Error: 'nm' command '%s' is not valid." +msgstr "„%s“ не е правилна команда за „nm“." + +#: ../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] |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] <поле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" + +#: ../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 "Грешка при свързване с 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: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-Type“." + +#: ../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:172 +#, c-format +msgid "Malformed PEM file: DEK-Info was not the second tag." +msgstr "Неправилен сертификат във формат PEM – вторият етикет не е „DEK-Info“." + +#: ../libnm-util/crypto.c:183 +#, c-format +msgid "Malformed PEM file: no IV found in DEK-Info tag." +msgstr "" +"Неправилен сертификат във формат PEM – в етикета „DEK-Info“ липсва начален " +"вектор." + +#: ../libnm-util/crypto.c:190 +#, c-format +msgid "Malformed PEM file: invalid format of IV in DEK-Info tag." +msgstr "" +"Неправилен сертификат във формат PEM – неправилен начален вектор в етикета " +"„DEK-Info“." + +#: ../libnm-util/crypto.c:203 +#, c-format +msgid "Malformed PEM file: unknown private key cipher '%s'." +msgstr "" +"Неправилен сертификат във формат PEM – непознат шифър „%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 "Крайният етикет „%2$s“ липсва в сертификата във формат PEM — „%1$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 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 "Началният вектор трябва да е с размер четен брой байта." + +#: ../libnm-util/crypto.c:333 +#, c-format +msgid "Not enough memory to store the IV." +msgstr "Няма достатъчно памет за съхраняване на началния вектор." + +#: ../libnm-util/crypto.c:344 +#, c-format +msgid "IV contains non-hexadecimal digits." +msgstr "Началният вектор съдържа низ, който не е шестнайсетично число." + +#: ../libnm-util/crypto.c:382 ../libnm-util/crypto_gnutls.c:148 +#: ../libnm-util/crypto_gnutls.c:266 ../libnm-util/crypto_nss.c:171 +#: ../libnm-util/crypto_nss.c:336 +#, c-format +msgid "Private key cipher '%s' was unknown." +msgstr "Шифърът за частен ключ „%s“ е непознат." + +#: ../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 "Failed to decrypt the private key: %d." +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 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." + +#: ../libnm-util/crypto_gnutls.c:156 +#, c-format +msgid "Invalid IV length (must be at least %zd)." +msgstr "Неправилен начален вектор (трябва да е поне %zd)." + +#: ../libnm-util/crypto_gnutls.c:165 ../libnm-util/crypto_nss.c:188 +#, 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: %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" + +#: ../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 certificate: %s" +msgid "Couldn't decode PKCS#12 file: %s" +msgstr "Грешка при декодиране на файла 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 "Грешка при проверка на файла 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." + +#: ../libnm-util/crypto_nss.c:179 +#, c-format +msgid "Invalid IV length (must be at least %d)." +msgstr "Неправилна дължина на началния вектор (трябва да е поне %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 "Грешка при задаване на началния вектор за разшифроване." + +#: ../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: %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: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: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: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" +msgstr "грешка при обработката на съобщение от мрежовия слой – %s" -#: ../src/nm-netlink-monitor.c:250 -#, c-format -msgid "unable to allocate netlink handle for monitoring link status: %s" -msgstr "" -"не може да се зададе модул в мрежовия слой за наблюдение на състоянието на " -"връзката — %s" - -#: ../src/nm-netlink-monitor.c:260 -#, c-format -msgid "unable to connect to netlink for monitoring link status: %s" -msgstr "" -"не може да се осъществи връзка с мрежовия слой за наблюдение на състоянието " -"на връзката — %s" - -#: ../src/nm-netlink-monitor.c:268 -#, c-format -msgid "unable to join netlink group for monitoring link status: %s" -msgstr "" -"не може да се осъществи присъединяване към групата на мрежовия слой за " -"наблюдение на състоянието на връзката — %s" - -#: ../src/nm-netlink-monitor.c:276 -#, c-format -msgid "unable to allocate netlink link cache for monitoring link status: %s" -msgstr "" -"не може да се зададе временна памет в мрежовия слой за наблюдение на " -"състоянието на връзката — %s" - -#: ../src/nm-netlink-monitor.c:494 -#, c-format +#: ../src/nm-netlink-monitor.c:214 msgid "error occurred while waiting for data on socket" msgstr "грешка при изчакване за данни през гнездо" -#: ../src/NetworkManager.c:250 +#: ../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/dhcp-manager/nm-dhcp-dhclient.c:87 +#: ../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:93 +#: ../src/dhcp-manager/nm-dhcp-dhclient.c:344 #, c-format msgid "" "# Merged from %s\n" @@ -72,204 +1841,52 @@ msgstr "" "# Слят от %s\n" "\n" -#: ../src/dns-manager/nm-dns-manager.c:117 -msgid "NOTE: the glibc resolver does not support more than 3 nameservers." -msgstr "БЕЛЕЖКА: стандартно glibc поддържа максимум 3 сървъра за имена." +#: ../src/dhcp-manager/nm-dhcp-manager.c:284 +msgid "no usable DHCP client could be found." +msgstr "не е намерен подходящ клиент за DHCP." -#: ../src/dns-manager/nm-dns-manager.c:119 +#: ../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 "Сървърите за имена отдолу могат да не бъдат разпознати." +msgstr "Долните сървъри за имена може да не бъдат разпознати." -#: ../system-settings/src/main.c:365 +#: ../src/system-settings/nm-default-wired-connection.c:157 #, c-format msgid "Auto %s" msgstr "Автоматично %s" -#: ../libnm-util/crypto.c:125 -#, c-format -msgid "PEM key file had no end tag '%s'." -msgstr "Крайният етикет „%s“ липсва в сертификат във формат PEM." - -#: ../libnm-util/crypto.c:135 -#, c-format -msgid "Doesn't look like a PEM private key file." -msgstr "Това не изглежда да е сертификат във формат PEM с частен ключ." - -#: ../libnm-util/crypto.c:143 -#, c-format -msgid "Not enough memory to store PEM file data." -msgstr "" -"Няма достатъчно памет за запазването на данните от сертификата във формат " -"PEM." - -#: ../libnm-util/crypto.c:159 -#, c-format -msgid "Malformed PEM file: Proc-Type was not first tag." -msgstr "" -"Неправилен сертификат във формат PEM: първият етикет не беше „Proc-Type“." - -#: ../libnm-util/crypto.c:167 -#, c-format -msgid "Malformed PEM file: unknown Proc-Type tag '%s'." -msgstr "" -"Неправилен сертификат във формат PEM: непознат етикет „Proc-Type“ — „%s“." - -#: ../libnm-util/crypto.c:177 -#, c-format -msgid "Malformed PEM file: DEK-Info was not the second tag." -msgstr "" -"Неправилен сертификат във формат PEM: вторият етикет не беше „DEK-Info“." - -#: ../libnm-util/crypto.c:188 -#, c-format -msgid "Malformed PEM file: no IV found in DEK-Info tag." -msgstr "" -"Неправилен сертификат във формат PEM: липсва първоначален вектор в етикета " -"„DEK-Info“." - -#: ../libnm-util/crypto.c:195 -#, c-format -msgid "Malformed PEM file: invalid format of IV in DEK-Info tag." -msgstr "" -"Неправилен сертификат във формат PEM: неправилен първоначален вектор в " -"етикета „DEK-Info“." - -#: ../libnm-util/crypto.c:208 -#, c-format -msgid "Malformed PEM file: unknown private key cipher '%s'." -msgstr "" -"Неправилен сертификат във формат PEM: непознат шифър за частен ключ „%s“." - -#: ../libnm-util/crypto.c:227 -#, c-format -msgid "Could not decode private key." -msgstr "Частният ключ не може да бъде декодиран." - -#: ../libnm-util/crypto.c:271 -#, c-format -msgid "PEM certificate '%s' had no end tag '%s'." -msgstr "Крайният етикет „1$%s“ липсва в сертификата във формат PEM — „2$%s“." - -#: ../libnm-util/crypto.c:281 -#, c-format -msgid "Failed to decode certificate." -msgstr "Сертификатът не може да бъде декодиран." - -#: ../libnm-util/crypto.c:290 ../libnm-util/crypto.c:298 -#, c-format -msgid "Not enough memory to store certificate data." -msgstr "Няма памет за запазването на данните от сертификат." - -#: ../libnm-util/crypto.c:328 -#, c-format -msgid "IV must be an even number of bytes in length." -msgstr "Началният вектор трябва да е четен брой байта на дължина." - -#: ../libnm-util/crypto.c:337 -#, c-format -msgid "Not enough memory to store the IV." -msgstr "Няма достатъчно памет за запазването на началния вектор." - -#: ../libnm-util/crypto.c:348 -#, 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 -#, c-format -msgid "Private key cipher '%s' was unknown." -msgstr "Шифърът за частен ключ „%s“ е непознат." - -#: ../libnm-util/crypto.c:395 -#, c-format -msgid "Not enough memory to create private key decryption key." -msgstr "Няма достатъчно памет за създаването на частен ключ за дешифриране." - -#: ../libnm-util/crypto.c:513 -#, c-format -msgid "Not enough memory to store decrypted private key." -msgstr "Няма достатъчно памет за запазването на частен ключ за дешифриране." - -#: ../libnm-util/crypto_gnutls.c:73 -#, c-format -msgid "Failed to initialize the MD5 engine: %s / %s." -msgstr "Модулът за MD5 не може да бъде инициализиран: %s / %s." - -#: ../libnm-util/crypto_gnutls.c:135 ../libnm-util/crypto_nss.c:145 -#, c-format -msgid "Not enough memory for decrypted key buffer." -msgstr "Няма достатъчно памет за буфера за дешифриране." - -#: ../libnm-util/crypto_gnutls.c:143 -#, c-format -msgid "Failed to initialize the decryption cipher context: %s / %s." -msgstr "Контекстът за дешифриране не може да бъде инициализиран: %s / %s." - -#: ../libnm-util/crypto_gnutls.c:152 -#, c-format -msgid "Failed to set symmetric key for decryption: %s / %s." -msgstr "Симетричният ключ за дешифриране не може да бъде зададен: %s / %s." - -#: ../libnm-util/crypto_gnutls.c:161 -#, c-format -msgid "Failed to set IV for decryption: %s / %s." -msgstr "Началният вектор за дешифриране не може да бъде зададен: %s / %s." - -#: ../libnm-util/crypto_gnutls.c:170 -#, c-format -msgid "Failed to decrypt the private key: %s / %s." -msgstr "Частният ключ не може да бъде дешифриран: %s / %s." - -#: ../libnm-util/crypto_gnutls.c:208 -#, c-format -msgid "Error initializing certificate data: %s" -msgstr "Грешка при инициализиране на данните от сертификата: %s" - -#: ../libnm-util/crypto_gnutls.c:220 -#, c-format -msgid "Couldn't decode certificate: %s" -msgstr "Сертификатът не може да бъде декодиран: %s" - -#: ../libnm-util/crypto_nss.c:78 -#, c-format -msgid "Failed to initialize the MD5 context: %d." -msgstr "Контекстът за MD5 не може да бъде инициализиран: %d." - -#: ../libnm-util/crypto_nss.c:153 -#, c-format -msgid "Failed to initialize the decryption cipher slot." -msgstr "Буферът за шифъра за дешифриране не може да бъде инициализиран." - -#: ../libnm-util/crypto_nss.c:163 -#, c-format -msgid "Failed to set symmetric key for decryption." -msgstr "Симетричният ключ за дешифриране не може да бъде зададен." - -#: ../libnm-util/crypto_nss.c:173 -#, c-format -msgid "Failed to set IV for decryption." -msgstr "Началният вектор за дешифриране не може да бъде зададен." - -#: ../libnm-util/crypto_nss.c:181 -#, c-format -msgid "Failed to initialize the decryption context." -msgstr "Контекстът за дешифриране не може да бъде инициализиран." - -#: ../libnm-util/crypto_nss.c:194 -#, c-format -msgid "Failed to decrypt the private key: %d." -msgstr "Частният ключ не може да бъде дешифриран: %d." - -#: ../libnm-util/crypto_nss.c:206 -#, c-format -msgid "Failed to finalize decryption of the private key: %d." -msgstr "Дешифрирането на частния ключ не може да приключи: %d." - -#: ../libnm-util/crypto_nss.c:250 -#, c-format -msgid "Couldn't decode certificate: %d" -msgstr "Сертификатът не може да бъде дешифриран: %d" +#: ../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" From 088454fcab2a37b9c27d7bae0af2ebc1466d701f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20Klime=C5=A1?= Date: Thu, 30 Sep 2010 15:13:39 +0200 Subject: [PATCH 05/40] ifcfg-rh: fix assertion failure when IP4 setting is missing while writing connection --- system-settings/plugins/ifcfg-rh/writer.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/system-settings/plugins/ifcfg-rh/writer.c b/system-settings/plugins/ifcfg-rh/writer.c index 75fbca69e8..cf1e2663a5 100644 --- a/system-settings/plugins/ifcfg-rh/writer.c +++ b/system-settings/plugins/ifcfg-rh/writer.c @@ -1021,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); @@ -1058,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); @@ -1156,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); @@ -1264,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; } From 9ee41307fc356e915be7a6dc4aea19034f0735a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20Klime=C5=A1?= Date: Thu, 30 Sep 2010 21:09:01 +0200 Subject: [PATCH 06/40] examples: add example for adding a connection in C (using glib) --- configure.ac | 1 + examples/C/Makefile.am | 2 + examples/C/add-connection-glib.c | 112 +++++++++++++++++++++++++++++++ examples/Makefile.am | 4 +- 4 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 examples/C/Makefile.am create mode 100644 examples/C/add-connection-glib.c diff --git a/configure.ac b/configure.ac index db28815783..568359706f 100644 --- a/configure.ac +++ b/configure.ac @@ -560,6 +560,7 @@ docs/libnm-util/Makefile NetworkManager.pc examples/Makefile examples/python/Makefile +examples/C/Makefile ]) AC_OUTPUT diff --git a/examples/C/Makefile.am b/examples/C/Makefile.am new file mode 100644 index 0000000000..68c0697b0b --- /dev/null +++ b/examples/C/Makefile.am @@ -0,0 +1,2 @@ +EXTRA_DIST = \ + add-connection-glib.c diff --git a/examples/C/add-connection-glib.c b/examples/C/add-connection-glib.c new file mode 100644 index 0000000000..0e8dc18036 --- /dev/null +++ b/examples/C/add-connection-glib.c @@ -0,0 +1,112 @@ +/* + * 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 +#include + +#include +#include +#include +#include +#include +#include + +#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)) + +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/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 From 43b55f719fe3c9e06cf7f86065b71cb6fccac279 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Mon, 4 Oct 2010 19:37:17 -0500 Subject: [PATCH 07/40] supplicant: simplify supplicant interface object Move GObject stuff to the bottom to reduce prototype abuse and remove unneeded prefixes from stuff that's private to the class itself. We also don't need the 'supplicant-manager' or 'device' properties since they weren't used anywhere. --- .../nm-supplicant-interface.c | 568 ++++++++---------- 1 file changed, 245 insertions(+), 323 deletions(-) diff --git a/src/supplicant-manager/nm-supplicant-interface.c b/src/supplicant-manager/nm-supplicant-interface.c index a65a458f5b..c04dc5e1cf 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. */ @@ -47,26 +47,11 @@ G_DEFINE_TYPE (NMSupplicantInterface, nm_supplicant_interface, G_TYPE_OBJECT) 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); @@ -82,14 +67,12 @@ enum { 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, @@ -121,7 +104,7 @@ typedef struct NMSupplicantConfig * cfg; - gboolean dispose_has_run; + gboolean disposed; } NMSupplicantInterfacePrivate; static gboolean @@ -203,103 +186,6 @@ 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) -{ - 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 (); - - priv->dispose_has_run = FALSE; - - priv->dbus_mgr = nm_dbus_manager_get (); -} - - -static void -nm_supplicant_interface_set_property (GObject * object, - guint prop_id, - const GValue * value, - GParamSpec * pspec) -{ - 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; - } -} - -static void -nm_supplicant_interface_get_property (GObject * object, - guint prop_id, - GValue * value, - GParamSpec * pspec) -{ - NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (object); - - 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; - } -} - static void try_remove_iface (DBusGConnection *g_connection, const char *path) @@ -322,175 +208,6 @@ try_remove_iface (DBusGConnection *g_connection, g_object_unref (proxy); } -static void -nm_supplicant_interface_dispose (GObject *object) -{ - 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); -} - -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 = nm_supplicant_interface_dispose; - object_class->set_property = nm_supplicant_interface_set_property; - object_class->get_property = nm_supplicant_interface_get_property; - - /* 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)); - - /* 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); - - 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); - - 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); - - 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); - - 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); - - 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); -} - static void emit_error_helper (NMSupplicantInterface *self, GError *err) @@ -500,11 +217,7 @@ emit_error_helper (NMSupplicantInterface *self, 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); + g_signal_emit (self, signals[CONNECTION_ERROR], 0, name, err->message); } static void @@ -523,11 +236,7 @@ bssid_properties_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_ } g_error_free (err); } else { - g_signal_emit (info->interface, - nm_supplicant_interface_signals[SCANNED_AP], - 0, - hash); - + g_signal_emit (info->interface, signals[SCANNED_AP], 0, hash); g_hash_table_destroy (hash); } } @@ -571,10 +280,7 @@ scan_results_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data) 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); + g_signal_emit (info->interface, signals[SCAN_RESULTS], 0, array->len); /* Fire off a "properties" call for each returned BSSID */ for (i = 0; i < array->len; i++) { @@ -674,13 +380,8 @@ wpas_iface_handle_state_change (DBusGProxy *proxy, 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); - } + if (priv->con_state != old_state) + g_signal_emit (user_data, signals[CONNECTION_STATE], 0, priv->con_state, old_state); } @@ -967,18 +668,14 @@ nm_supplicant_interface_set_state (NMSupplicantInterface * self, } priv->state = new_state; - g_signal_emit (self, - nm_supplicant_interface_signals[STATE], - 0, - priv->state, - old_state); + g_signal_emit (self, signals[STATE], 0, priv->state, old_state); } static void -nm_supplicant_interface_smgr_state_changed (NMSupplicantManager * smgr, - guint32 new_state, - guint32 old_state, - gpointer user_data) +smgr_state_changed (NMSupplicantManager *smgr, + guint32 new_state, + guint32 old_state, + gpointer user_data) { NMSupplicantInterface * self = NM_SUPPLICANT_INTERFACE (user_data); @@ -1194,9 +891,7 @@ call_set_blobs (NMSupplicantInfo *info, GHashTable *orig_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); + g_signal_emit (info->interface, signals[CONNECTION_ERROR], 0, "SendBlobError", msg); return; } @@ -1339,10 +1034,7 @@ scan_request_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_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_signal_emit (info->interface, signals[SCAN_REQ_RESULT], 0, !!success); } gboolean @@ -1427,3 +1119,233 @@ nm_supplicant_interface_connection_state_to_string (guint32 state) return "unknown"; } +/*******************************************************************/ + +NMSupplicantInterface * +nm_supplicant_interface_new (NMSupplicantManager *smgr, + const char *ifname, + gboolean is_wireless) +{ + 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, + "state", + G_CALLBACK (smgr_state_changed), + self); + priv->smgr_state_sig_handler = id; + + priv->dev = g_strdup (ifname); + priv->is_wireless = is_wireless; + nm_supplicant_interface_start (self); + } + + return self; +} + +static void +nm_supplicant_interface_init (NMSupplicantInterface * self) +{ + 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 (); + priv->dbus_mgr = nm_dbus_manager_get (); +} + +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; + } +} + +static void +get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + switch (prop_id) { + case PROP_STATE: + g_value_set_uint (value, NM_SUPPLICANT_INTERFACE_GET_PRIVATE (object)->state); + break; + case PROP_CONNECTION_STATE: + g_value_set_uint (value, NM_SUPPLICANT_INTERFACE_GET_PRIVATE (object)->con_state); + break; + 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); + guint32 sm_state; + + if (priv->disposed) { + G_OBJECT_CLASS (nm_supplicant_interface_parent_class)->dispose (object); + return; + } + priv->disposed = 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); +} + +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_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)); + + /* Signals */ + 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); + + 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); + + 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); + + 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); + + 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); + + 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); + + 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); +} + From 0e61ddcd27b3fc89d7660c1d22f0ca4a638b00eb Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Mon, 4 Oct 2010 19:42:25 -0500 Subject: [PATCH 08/40] supplicant: use a GHashTable instead of a GSList for tracking interfaces It's just less code. Yay. --- .../nm-supplicant-interface.c | 8 ++++ .../nm-supplicant-interface.h | 4 +- .../nm-supplicant-manager.c | 46 ++++++------------- 3 files changed, 25 insertions(+), 33 deletions(-) diff --git a/src/supplicant-manager/nm-supplicant-interface.c b/src/supplicant-manager/nm-supplicant-interface.c index c04dc5e1cf..3c3fe52f84 100644 --- a/src/supplicant-manager/nm-supplicant-interface.c +++ b/src/supplicant-manager/nm-supplicant-interface.c @@ -1119,6 +1119,14 @@ nm_supplicant_interface_connection_state_to_string (guint32 state) return "unknown"; } +const char * +nm_supplicant_interface_get_ifname (NMSupplicantInterface *self) +{ + g_return_val_if_fail (self != NULL, FALSE); + + return NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self)->dev; +} + /*******************************************************************/ NMSupplicantInterface * diff --git a/src/supplicant-manager/nm-supplicant-interface.h b/src/supplicant-manager/nm-supplicant-interface.h index bee5436f5a..3e56f4efaf 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. */ @@ -140,6 +140,8 @@ const char *nm_supplicant_interface_connection_state_to_string (guint32 state); gboolean nm_supplicant_interface_get_scanning (NMSupplicantInterface *self); +const char *nm_supplicant_interface_get_ifname (NMSupplicantInterface *self); + G_END_DECLS #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..1077da8d7f 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. */ @@ -35,7 +35,7 @@ typedef struct { NMDBusManager * dbus_mgr; guint32 state; - GSList * ifaces; + GHashTable * ifaces; gboolean dispose_has_run; guint poke_id; } NMSupplicantManagerPrivate; @@ -125,6 +125,8 @@ nm_supplicant_manager_init (NMSupplicantManager * self) priv->dbus_mgr = nm_dbus_manager_get (); priv->poke_id = 0; + priv->ifaces = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref); + running = nm_supplicant_manager_startup (self); g_signal_connect (priv->dbus_mgr, @@ -265,33 +267,23 @@ nm_supplicant_manager_startup (NMSupplicantManager * self) NMSupplicantInterface * nm_supplicant_manager_get_iface (NMSupplicantManager * self, - const char *ifname, - gboolean is_wireless) + const char *ifname, + gboolean is_wireless) { NMSupplicantManagerPrivate *priv; NMSupplicantInterface * iface = NULL; - GSList * elt; 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); - /* 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 (!strcmp (ifname, nm_supplicant_interface_get_device (if_tmp))) { - iface = if_tmp; - break; - } - } - + iface = g_hash_table_lookup (priv->ifaces, ifname); 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); + g_hash_table_insert (priv->ifaces, g_strdup (ifname), iface); } else { nm_log_dbg (LOGD_SUPPLICANT, "(%s): returning existing supplicant interface", ifname); } @@ -300,30 +292,20 @@ nm_supplicant_manager_get_iface (NMSupplicantManager * self, } void -nm_supplicant_manager_release_iface (NMSupplicantManager * self, - NMSupplicantInterface * iface) +nm_supplicant_manager_release_iface (NMSupplicantManager *self, + NMSupplicantInterface *iface) { NMSupplicantManagerPrivate *priv; - GSList * elt; + const char *ifname; 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); - 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; - } - } + ifname = nm_supplicant_interface_get_ifname (iface); + g_assert (ifname); + g_hash_table_remove (priv->ifaces, ifname); } const char * From edd2369eb86bec16a35f64f4ebde3d2d5d45d6d9 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Mon, 4 Oct 2010 23:25:18 -0500 Subject: [PATCH 09/40] supplicant: reorganize supplicant manager class Gets rid of prototypes and simplifies the code a bit. --- .../nm-supplicant-manager.c | 289 ++++++++---------- 1 file changed, 134 insertions(+), 155 deletions(-) diff --git a/src/supplicant-manager/nm-supplicant-manager.c b/src/supplicant-manager/nm-supplicant-manager.c index 1077da8d7f..56a5e58d63 100644 --- a/src/supplicant-manager/nm-supplicant-manager.c +++ b/src/supplicant-manager/nm-supplicant-manager.c @@ -36,8 +36,8 @@ typedef struct { NMDBusManager * dbus_mgr; guint32 state; GHashTable * ifaces; - gboolean dispose_has_run; - guint poke_id; + gboolean disposed; + guint poke_id; } NMSupplicantManagerPrivate; #define NM_SUPPLICANT_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \ @@ -46,41 +46,14 @@ typedef struct { G_DEFINE_TYPE (NMSupplicantManager, nm_supplicant_manager, G_TYPE_OBJECT) - -static void nm_supplicant_manager_name_owner_changed (NMDBusManager *dbus_mgr, - const char *name, - const char *old, - const char *new, - gpointer user_data); - -static void nm_supplicant_manager_set_state (NMSupplicantManager * self, - guint32 new_state); - -static gboolean nm_supplicant_manager_startup (NMSupplicantManager * self); - - /* Signals */ enum { STATE, /* change in the manager's state */ LAST_SIGNAL }; -static guint nm_supplicant_manager_signals[LAST_SIGNAL] = { 0 }; +static guint signals[LAST_SIGNAL] = { 0 }; - -NMSupplicantManager * -nm_supplicant_manager_get (void) -{ - static NMSupplicantManager * singleton = NULL; - - 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 gboolean poke_supplicant_cb (gpointer user_data) @@ -114,117 +87,6 @@ out: return FALSE; } -static void -nm_supplicant_manager_init (NMSupplicantManager * self) -{ - NMSupplicantManagerPrivate *priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (self); - gboolean running; - - priv->dispose_has_run = FALSE; - priv->state = NM_SUPPLICANT_MANAGER_STATE_DOWN; - priv->dbus_mgr = nm_dbus_manager_get (); - priv->poke_id = 0; - - priv->ifaces = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref); - - running = nm_supplicant_manager_startup (self); - - g_signal_connect (priv->dbus_mgr, - "name-owner-changed", - G_CALLBACK (nm_supplicant_manager_name_owner_changed), - self); - - if (!running) { - /* Try to activate the supplicant */ - priv->poke_id = g_idle_add (poke_supplicant_cb, (gpointer) self); - } -} - -static void -nm_supplicant_manager_dispose (GObject *object) -{ - 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; - } - - /* Chain up to the parent class */ - G_OBJECT_CLASS (nm_supplicant_manager_parent_class)->dispose (object); -} - -static void -nm_supplicant_manager_class_init (NMSupplicantManagerClass *klass) -{ - GObjectClass * object_class = G_OBJECT_CLASS (klass); - - g_type_class_add_private (object_class, sizeof (NMSupplicantManagerPrivate)); - - 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 void -nm_supplicant_manager_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; - 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 */ - 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; - } - } else if (old_owner_good && !new_owner_good) { - nm_supplicant_manager_set_state (self, NM_SUPPLICANT_MANAGER_STATE_DOWN); - - if (priv->poke_id) - g_source_remove (priv->poke_id); - - /* Poke the supplicant so that it gets activated by dbus system bus - * activation. - */ - priv->poke_id = g_idle_add (poke_supplicant_cb, (gpointer) self); - } -} - - guint32 nm_supplicant_manager_get_state (NMSupplicantManager * self) { @@ -234,25 +96,20 @@ nm_supplicant_manager_get_state (NMSupplicantManager * self) } static void -nm_supplicant_manager_set_state (NMSupplicantManager * self, guint32 new_state) +set_state (NMSupplicantManager *self, guint32 new_state) { NMSupplicantManagerPrivate *priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (self); guint32 old_state; - if (new_state == priv->state) - return; - - old_state = priv->state; - priv->state = new_state; - g_signal_emit (self, - nm_supplicant_manager_signals[STATE], - 0, - priv->state, - old_state); + if (new_state != priv->state) { + old_state = priv->state; + priv->state = new_state; + g_signal_emit (self, signals[STATE], 0, priv->state, old_state); + } } static gboolean -nm_supplicant_manager_startup (NMSupplicantManager * self) +startup (NMSupplicantManager * self) { gboolean running; @@ -260,7 +117,7 @@ nm_supplicant_manager_startup (NMSupplicantManager * self) 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); + set_state (self, NM_SUPPLICANT_MANAGER_STATE_IDLE); return running; } @@ -322,4 +179,126 @@ nm_supplicant_manager_state_to_string (guint32 state) return "unknown"; } +static void +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; + 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 */ + if (strcmp (WPAS_DBUS_SERVICE, name) != 0) + return; + + if (!old_owner_good && new_owner_good) { + gboolean running; + + running = startup (self); + + if (running && priv->poke_id) { + g_source_remove (priv->poke_id); + priv->poke_id = 0; + } + } else if (old_owner_good && !new_owner_good) { + set_state (self, NM_SUPPLICANT_MANAGER_STATE_DOWN); + + if (priv->poke_id) + g_source_remove (priv->poke_id); + + /* Poke the supplicant so that it gets activated by dbus system bus + * activation. + */ + priv->poke_id = g_idle_add (poke_supplicant_cb, (gpointer) self); + } +} + +/*******************************************************************/ + +NMSupplicantManager * +nm_supplicant_manager_get (void) +{ + static NMSupplicantManager *singleton = NULL; + + 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_init (NMSupplicantManager * self) +{ + NMSupplicantManagerPrivate *priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (self); + gboolean running; + + priv->state = NM_SUPPLICANT_MANAGER_STATE_DOWN; + priv->dbus_mgr = nm_dbus_manager_get (); + priv->poke_id = 0; + + priv->ifaces = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref); + + running = startup (self); + + g_signal_connect (priv->dbus_mgr, + "name-owner-changed", + G_CALLBACK (name_owner_changed), + self); + + if (!running) { + /* Try to activate the supplicant */ + priv->poke_id = g_idle_add (poke_supplicant_cb, (gpointer) self); + } +} + +static void +dispose (GObject *object) +{ + NMSupplicantManagerPrivate *priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (object); + + if (priv->disposed) { + G_OBJECT_CLASS (nm_supplicant_manager_parent_class)->dispose (object); + return; + } + priv->disposed = 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; + } + + /* Chain up to the parent class */ + G_OBJECT_CLASS (nm_supplicant_manager_parent_class)->dispose (object); +} + +static void +nm_supplicant_manager_class_init (NMSupplicantManagerClass *klass) +{ + GObjectClass * object_class = G_OBJECT_CLASS (klass); + + g_type_class_add_private (object_class, sizeof (NMSupplicantManagerPrivate)); + + object_class->dispose = dispose; + + /* Signals */ + 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); +} From aadc6d6a7e72fca2ea4a9095a9e0616156b5675b Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Tue, 5 Oct 2010 14:17:40 -0500 Subject: [PATCH 10/40] Revert "supplicant: reorganize supplicant manager class" This reverts commit edd2369eb86bec16a35f64f4ebde3d2d5d45d6d9. --- .../nm-supplicant-manager.c | 289 ++++++++++-------- 1 file changed, 155 insertions(+), 134 deletions(-) diff --git a/src/supplicant-manager/nm-supplicant-manager.c b/src/supplicant-manager/nm-supplicant-manager.c index 56a5e58d63..1077da8d7f 100644 --- a/src/supplicant-manager/nm-supplicant-manager.c +++ b/src/supplicant-manager/nm-supplicant-manager.c @@ -36,8 +36,8 @@ typedef struct { NMDBusManager * dbus_mgr; guint32 state; GHashTable * ifaces; - gboolean disposed; - guint poke_id; + gboolean dispose_has_run; + guint poke_id; } NMSupplicantManagerPrivate; #define NM_SUPPLICANT_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \ @@ -46,14 +46,41 @@ typedef struct { G_DEFINE_TYPE (NMSupplicantManager, nm_supplicant_manager, G_TYPE_OBJECT) + +static void nm_supplicant_manager_name_owner_changed (NMDBusManager *dbus_mgr, + const char *name, + const char *old, + const char *new, + gpointer user_data); + +static void nm_supplicant_manager_set_state (NMSupplicantManager * self, + guint32 new_state); + +static gboolean nm_supplicant_manager_startup (NMSupplicantManager * self); + + /* Signals */ enum { STATE, /* change in the manager's state */ LAST_SIGNAL }; -static guint signals[LAST_SIGNAL] = { 0 }; +static guint nm_supplicant_manager_signals[LAST_SIGNAL] = { 0 }; -/********************************************************************/ + +NMSupplicantManager * +nm_supplicant_manager_get (void) +{ + static NMSupplicantManager * singleton = NULL; + + 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 gboolean poke_supplicant_cb (gpointer user_data) @@ -87,6 +114,117 @@ out: return FALSE; } +static void +nm_supplicant_manager_init (NMSupplicantManager * self) +{ + NMSupplicantManagerPrivate *priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (self); + gboolean running; + + priv->dispose_has_run = FALSE; + priv->state = NM_SUPPLICANT_MANAGER_STATE_DOWN; + priv->dbus_mgr = nm_dbus_manager_get (); + priv->poke_id = 0; + + priv->ifaces = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref); + + running = nm_supplicant_manager_startup (self); + + g_signal_connect (priv->dbus_mgr, + "name-owner-changed", + G_CALLBACK (nm_supplicant_manager_name_owner_changed), + self); + + if (!running) { + /* Try to activate the supplicant */ + priv->poke_id = g_idle_add (poke_supplicant_cb, (gpointer) self); + } +} + +static void +nm_supplicant_manager_dispose (GObject *object) +{ + 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; + } + + /* Chain up to the parent class */ + G_OBJECT_CLASS (nm_supplicant_manager_parent_class)->dispose (object); +} + +static void +nm_supplicant_manager_class_init (NMSupplicantManagerClass *klass) +{ + GObjectClass * object_class = G_OBJECT_CLASS (klass); + + g_type_class_add_private (object_class, sizeof (NMSupplicantManagerPrivate)); + + 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 void +nm_supplicant_manager_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; + 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 */ + 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; + } + } else if (old_owner_good && !new_owner_good) { + nm_supplicant_manager_set_state (self, NM_SUPPLICANT_MANAGER_STATE_DOWN); + + if (priv->poke_id) + g_source_remove (priv->poke_id); + + /* Poke the supplicant so that it gets activated by dbus system bus + * activation. + */ + priv->poke_id = g_idle_add (poke_supplicant_cb, (gpointer) self); + } +} + + guint32 nm_supplicant_manager_get_state (NMSupplicantManager * self) { @@ -96,20 +234,25 @@ nm_supplicant_manager_get_state (NMSupplicantManager * self) } static void -set_state (NMSupplicantManager *self, guint32 new_state) +nm_supplicant_manager_set_state (NMSupplicantManager * self, guint32 new_state) { NMSupplicantManagerPrivate *priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (self); guint32 old_state; - if (new_state != priv->state) { - old_state = priv->state; - priv->state = new_state; - g_signal_emit (self, signals[STATE], 0, priv->state, old_state); - } + if (new_state == priv->state) + return; + + old_state = priv->state; + priv->state = new_state; + g_signal_emit (self, + nm_supplicant_manager_signals[STATE], + 0, + priv->state, + old_state); } static gboolean -startup (NMSupplicantManager * self) +nm_supplicant_manager_startup (NMSupplicantManager * self) { gboolean running; @@ -117,7 +260,7 @@ startup (NMSupplicantManager * self) running = nm_dbus_manager_name_has_owner (NM_SUPPLICANT_MANAGER_GET_PRIVATE (self)->dbus_mgr, WPAS_DBUS_SERVICE); if (running) - set_state (self, NM_SUPPLICANT_MANAGER_STATE_IDLE); + nm_supplicant_manager_set_state (self, NM_SUPPLICANT_MANAGER_STATE_IDLE); return running; } @@ -179,126 +322,4 @@ nm_supplicant_manager_state_to_string (guint32 state) return "unknown"; } -static void -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; - 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 */ - if (strcmp (WPAS_DBUS_SERVICE, name) != 0) - return; - - if (!old_owner_good && new_owner_good) { - gboolean running; - - running = startup (self); - - if (running && priv->poke_id) { - g_source_remove (priv->poke_id); - priv->poke_id = 0; - } - } else if (old_owner_good && !new_owner_good) { - set_state (self, NM_SUPPLICANT_MANAGER_STATE_DOWN); - - if (priv->poke_id) - g_source_remove (priv->poke_id); - - /* Poke the supplicant so that it gets activated by dbus system bus - * activation. - */ - priv->poke_id = g_idle_add (poke_supplicant_cb, (gpointer) self); - } -} - -/*******************************************************************/ - -NMSupplicantManager * -nm_supplicant_manager_get (void) -{ - static NMSupplicantManager *singleton = NULL; - - 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_init (NMSupplicantManager * self) -{ - NMSupplicantManagerPrivate *priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (self); - gboolean running; - - priv->state = NM_SUPPLICANT_MANAGER_STATE_DOWN; - priv->dbus_mgr = nm_dbus_manager_get (); - priv->poke_id = 0; - - priv->ifaces = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref); - - running = startup (self); - - g_signal_connect (priv->dbus_mgr, - "name-owner-changed", - G_CALLBACK (name_owner_changed), - self); - - if (!running) { - /* Try to activate the supplicant */ - priv->poke_id = g_idle_add (poke_supplicant_cb, (gpointer) self); - } -} - -static void -dispose (GObject *object) -{ - NMSupplicantManagerPrivate *priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (object); - - if (priv->disposed) { - G_OBJECT_CLASS (nm_supplicant_manager_parent_class)->dispose (object); - return; - } - priv->disposed = 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; - } - - /* Chain up to the parent class */ - G_OBJECT_CLASS (nm_supplicant_manager_parent_class)->dispose (object); -} - -static void -nm_supplicant_manager_class_init (NMSupplicantManagerClass *klass) -{ - GObjectClass * object_class = G_OBJECT_CLASS (klass); - - g_type_class_add_private (object_class, sizeof (NMSupplicantManagerPrivate)); - - object_class->dispose = dispose; - - /* Signals */ - 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); -} From 8738aad6f248405aaf7d567a5c07c2176b243810 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Tue, 5 Oct 2010 14:17:48 -0500 Subject: [PATCH 11/40] Revert "supplicant: use a GHashTable instead of a GSList for tracking interfaces" This reverts commit 0e61ddcd27b3fc89d7660c1d22f0ca4a638b00eb. --- .../nm-supplicant-interface.c | 8 ---- .../nm-supplicant-interface.h | 4 +- .../nm-supplicant-manager.c | 46 +++++++++++++------ 3 files changed, 33 insertions(+), 25 deletions(-) diff --git a/src/supplicant-manager/nm-supplicant-interface.c b/src/supplicant-manager/nm-supplicant-interface.c index 3c3fe52f84..c04dc5e1cf 100644 --- a/src/supplicant-manager/nm-supplicant-interface.c +++ b/src/supplicant-manager/nm-supplicant-interface.c @@ -1119,14 +1119,6 @@ nm_supplicant_interface_connection_state_to_string (guint32 state) return "unknown"; } -const char * -nm_supplicant_interface_get_ifname (NMSupplicantInterface *self) -{ - g_return_val_if_fail (self != NULL, FALSE); - - return NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self)->dev; -} - /*******************************************************************/ NMSupplicantInterface * diff --git a/src/supplicant-manager/nm-supplicant-interface.h b/src/supplicant-manager/nm-supplicant-interface.h index 3e56f4efaf..bee5436f5a 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 - 2010 Red Hat, Inc. + * Copyright (C) 2006 - 2008 Red Hat, Inc. * Copyright (C) 2007 - 2008 Novell, Inc. */ @@ -140,8 +140,6 @@ const char *nm_supplicant_interface_connection_state_to_string (guint32 state); gboolean nm_supplicant_interface_get_scanning (NMSupplicantInterface *self); -const char *nm_supplicant_interface_get_ifname (NMSupplicantInterface *self); - G_END_DECLS #endif /* NM_SUPPLICANT_INTERFACE_H */ diff --git a/src/supplicant-manager/nm-supplicant-manager.c b/src/supplicant-manager/nm-supplicant-manager.c index 1077da8d7f..a2cf58eb8f 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 - 2010 Red Hat, Inc. + * Copyright (C) 2006 - 2008 Red Hat, Inc. * Copyright (C) 2007 - 2008 Novell, Inc. */ @@ -35,7 +35,7 @@ typedef struct { NMDBusManager * dbus_mgr; guint32 state; - GHashTable * ifaces; + GSList * ifaces; gboolean dispose_has_run; guint poke_id; } NMSupplicantManagerPrivate; @@ -125,8 +125,6 @@ nm_supplicant_manager_init (NMSupplicantManager * self) priv->dbus_mgr = nm_dbus_manager_get (); priv->poke_id = 0; - priv->ifaces = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref); - running = nm_supplicant_manager_startup (self); g_signal_connect (priv->dbus_mgr, @@ -267,23 +265,33 @@ nm_supplicant_manager_startup (NMSupplicantManager * self) NMSupplicantInterface * nm_supplicant_manager_get_iface (NMSupplicantManager * self, - const char *ifname, - gboolean is_wireless) + const char *ifname, + gboolean is_wireless) { NMSupplicantManagerPrivate *priv; NMSupplicantInterface * iface = NULL; + GSList * elt; 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); - iface = g_hash_table_lookup (priv->ifaces, ifname); + /* 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 (!strcmp (ifname, nm_supplicant_interface_get_device (if_tmp))) { + iface = if_tmp; + break; + } + } + if (!iface) { nm_log_dbg (LOGD_SUPPLICANT, "(%s): creating new supplicant interface", ifname); iface = nm_supplicant_interface_new (self, ifname, is_wireless); if (iface) - g_hash_table_insert (priv->ifaces, g_strdup (ifname), iface); + priv->ifaces = g_slist_append (priv->ifaces, iface); } else { nm_log_dbg (LOGD_SUPPLICANT, "(%s): returning existing supplicant interface", ifname); } @@ -292,20 +300,30 @@ nm_supplicant_manager_get_iface (NMSupplicantManager * self, } void -nm_supplicant_manager_release_iface (NMSupplicantManager *self, - NMSupplicantInterface *iface) +nm_supplicant_manager_release_iface (NMSupplicantManager * self, + NMSupplicantInterface * iface) { NMSupplicantManagerPrivate *priv; - const char *ifname; + GSList * elt; 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); - ifname = nm_supplicant_interface_get_ifname (iface); - g_assert (ifname); - g_hash_table_remove (priv->ifaces, ifname); + 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; + } + } } const char * From 410c3543841ab9563c40ab03cc2ffba647cdcea9 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Tue, 5 Oct 2010 14:17:53 -0500 Subject: [PATCH 12/40] Revert "supplicant: simplify supplicant interface object" This reverts commit 43b55f719fe3c9e06cf7f86065b71cb6fccac279. --- .../nm-supplicant-interface.c | 568 ++++++++++-------- 1 file changed, 323 insertions(+), 245 deletions(-) diff --git a/src/supplicant-manager/nm-supplicant-interface.c b/src/supplicant-manager/nm-supplicant-interface.c index c04dc5e1cf..a65a458f5b 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 - 2010 Red Hat, Inc. + * Copyright (C) 2006 - 2008 Red Hat, Inc. * Copyright (C) 2006 - 2008 Novell, Inc. */ @@ -47,11 +47,26 @@ G_DEFINE_TYPE (NMSupplicantInterface, nm_supplicant_interface, G_TYPE_OBJECT) 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); @@ -67,12 +82,14 @@ enum { CONNECTION_ERROR, /* an error occurred during a connection request */ LAST_SIGNAL }; -static guint signals[LAST_SIGNAL] = { 0 }; +static guint nm_supplicant_interface_signals[LAST_SIGNAL] = { 0 }; /* Properties */ enum { PROP_0 = 0, + PROP_SUPPLICANT_MANAGER, + PROP_DEVICE, PROP_STATE, PROP_CONNECTION_STATE, PROP_SCANNING, @@ -104,7 +121,7 @@ typedef struct NMSupplicantConfig * cfg; - gboolean disposed; + gboolean dispose_has_run; } NMSupplicantInterfacePrivate; static gboolean @@ -186,6 +203,103 @@ 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) +{ + 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 (); + + priv->dispose_has_run = FALSE; + + priv->dbus_mgr = nm_dbus_manager_get (); +} + + +static void +nm_supplicant_interface_set_property (GObject * object, + guint prop_id, + const GValue * value, + GParamSpec * pspec) +{ + 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; + } +} + +static void +nm_supplicant_interface_get_property (GObject * object, + guint prop_id, + GValue * value, + GParamSpec * pspec) +{ + NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (object); + + 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; + } +} + static void try_remove_iface (DBusGConnection *g_connection, const char *path) @@ -208,6 +322,175 @@ try_remove_iface (DBusGConnection *g_connection, g_object_unref (proxy); } +static void +nm_supplicant_interface_dispose (GObject *object) +{ + 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); +} + +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 = nm_supplicant_interface_dispose; + object_class->set_property = nm_supplicant_interface_set_property; + object_class->get_property = nm_supplicant_interface_get_property; + + /* 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)); + + /* 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); + + 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); + + 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); + + 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); + + 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); + + 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); +} + static void emit_error_helper (NMSupplicantInterface *self, GError *err) @@ -217,7 +500,11 @@ emit_error_helper (NMSupplicantInterface *self, if (err->domain == DBUS_GERROR && err->code == DBUS_GERROR_REMOTE_EXCEPTION) name = dbus_g_error_get_name (err); - g_signal_emit (self, signals[CONNECTION_ERROR], 0, name, err->message); + g_signal_emit (self, + nm_supplicant_interface_signals[CONNECTION_ERROR], + 0, + name, + err->message); } static void @@ -236,7 +523,11 @@ bssid_properties_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_ } g_error_free (err); } else { - g_signal_emit (info->interface, signals[SCANNED_AP], 0, hash); + g_signal_emit (info->interface, + nm_supplicant_interface_signals[SCANNED_AP], + 0, + hash); + g_hash_table_destroy (hash); } } @@ -280,7 +571,10 @@ scan_results_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data) NMSupplicantInfo *info = (NMSupplicantInfo *) user_data; /* Notify listeners of the result of the scan */ - g_signal_emit (info->interface, signals[SCAN_RESULTS], 0, array->len); + 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++) { @@ -380,8 +674,13 @@ wpas_iface_handle_state_change (DBusGProxy *proxy, 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, signals[CONNECTION_STATE], 0, priv->con_state, old_state); + if (priv->con_state != old_state) { + g_signal_emit (user_data, + nm_supplicant_interface_signals[CONNECTION_STATE], + 0, + priv->con_state, + old_state); + } } @@ -668,14 +967,18 @@ nm_supplicant_interface_set_state (NMSupplicantInterface * self, } priv->state = new_state; - g_signal_emit (self, signals[STATE], 0, priv->state, old_state); + g_signal_emit (self, + nm_supplicant_interface_signals[STATE], + 0, + priv->state, + old_state); } static void -smgr_state_changed (NMSupplicantManager *smgr, - guint32 new_state, - guint32 old_state, - gpointer user_data) +nm_supplicant_interface_smgr_state_changed (NMSupplicantManager * smgr, + guint32 new_state, + guint32 old_state, + gpointer user_data) { NMSupplicantInterface * self = NM_SUPPLICANT_INTERFACE (user_data); @@ -891,7 +1194,9 @@ call_set_blobs (NMSupplicantInfo *info, GHashTable *orig_blobs) const char *msg = "Not enough memory to create blob table."; nm_log_warn (LOGD_SUPPLICANT, "%s", msg); - g_signal_emit (info->interface, signals[CONNECTION_ERROR], 0, "SendBlobError", msg); + g_signal_emit (info->interface, + nm_supplicant_interface_signals[CONNECTION_ERROR], + 0, "SendBlobError", msg); return; } @@ -1034,7 +1339,10 @@ scan_request_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data) } /* Notify listeners of the result of the scan */ - g_signal_emit (info->interface, signals[SCAN_REQ_RESULT], 0, !!success); + g_signal_emit (info->interface, + nm_supplicant_interface_signals[SCAN_REQ_RESULT], + 0, + success ? TRUE : FALSE); } gboolean @@ -1119,233 +1427,3 @@ nm_supplicant_interface_connection_state_to_string (guint32 state) return "unknown"; } -/*******************************************************************/ - -NMSupplicantInterface * -nm_supplicant_interface_new (NMSupplicantManager *smgr, - const char *ifname, - gboolean is_wireless) -{ - 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, - "state", - G_CALLBACK (smgr_state_changed), - self); - priv->smgr_state_sig_handler = id; - - priv->dev = g_strdup (ifname); - priv->is_wireless = is_wireless; - nm_supplicant_interface_start (self); - } - - return self; -} - -static void -nm_supplicant_interface_init (NMSupplicantInterface * self) -{ - 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 (); - priv->dbus_mgr = nm_dbus_manager_get (); -} - -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; - } -} - -static void -get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - switch (prop_id) { - case PROP_STATE: - g_value_set_uint (value, NM_SUPPLICANT_INTERFACE_GET_PRIVATE (object)->state); - break; - case PROP_CONNECTION_STATE: - g_value_set_uint (value, NM_SUPPLICANT_INTERFACE_GET_PRIVATE (object)->con_state); - break; - 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); - guint32 sm_state; - - if (priv->disposed) { - G_OBJECT_CLASS (nm_supplicant_interface_parent_class)->dispose (object); - return; - } - priv->disposed = 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); -} - -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_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)); - - /* Signals */ - 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); - - 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); - - 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); - - 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); - - 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); - - 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); - - 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); -} - From 71c4e2338bfa6f27d51fbb5e54276c5b8afe2455 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Tue, 5 Oct 2010 14:19:43 -0500 Subject: [PATCH 13/40] supplicant: simplify supplicant interface object Move GObject stuff to the bottom to reduce prototype abuse and remove unneeded prefixes from stuff that's private to the class itself. We also don't need the 'supplicant-manager' or 'device' properties since they weren't used anywhere. --- .../nm-supplicant-interface.c | 568 ++++++++---------- 1 file changed, 245 insertions(+), 323 deletions(-) diff --git a/src/supplicant-manager/nm-supplicant-interface.c b/src/supplicant-manager/nm-supplicant-interface.c index a65a458f5b..c04dc5e1cf 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. */ @@ -47,26 +47,11 @@ G_DEFINE_TYPE (NMSupplicantInterface, nm_supplicant_interface, G_TYPE_OBJECT) 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); @@ -82,14 +67,12 @@ enum { 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, @@ -121,7 +104,7 @@ typedef struct NMSupplicantConfig * cfg; - gboolean dispose_has_run; + gboolean disposed; } NMSupplicantInterfacePrivate; static gboolean @@ -203,103 +186,6 @@ 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) -{ - 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 (); - - priv->dispose_has_run = FALSE; - - priv->dbus_mgr = nm_dbus_manager_get (); -} - - -static void -nm_supplicant_interface_set_property (GObject * object, - guint prop_id, - const GValue * value, - GParamSpec * pspec) -{ - 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; - } -} - -static void -nm_supplicant_interface_get_property (GObject * object, - guint prop_id, - GValue * value, - GParamSpec * pspec) -{ - NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (object); - - 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; - } -} - static void try_remove_iface (DBusGConnection *g_connection, const char *path) @@ -322,175 +208,6 @@ try_remove_iface (DBusGConnection *g_connection, g_object_unref (proxy); } -static void -nm_supplicant_interface_dispose (GObject *object) -{ - 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); -} - -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 = nm_supplicant_interface_dispose; - object_class->set_property = nm_supplicant_interface_set_property; - object_class->get_property = nm_supplicant_interface_get_property; - - /* 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)); - - /* 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); - - 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); - - 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); - - 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); - - 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); - - 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); -} - static void emit_error_helper (NMSupplicantInterface *self, GError *err) @@ -500,11 +217,7 @@ emit_error_helper (NMSupplicantInterface *self, 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); + g_signal_emit (self, signals[CONNECTION_ERROR], 0, name, err->message); } static void @@ -523,11 +236,7 @@ bssid_properties_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_ } g_error_free (err); } else { - g_signal_emit (info->interface, - nm_supplicant_interface_signals[SCANNED_AP], - 0, - hash); - + g_signal_emit (info->interface, signals[SCANNED_AP], 0, hash); g_hash_table_destroy (hash); } } @@ -571,10 +280,7 @@ scan_results_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data) 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); + g_signal_emit (info->interface, signals[SCAN_RESULTS], 0, array->len); /* Fire off a "properties" call for each returned BSSID */ for (i = 0; i < array->len; i++) { @@ -674,13 +380,8 @@ wpas_iface_handle_state_change (DBusGProxy *proxy, 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); - } + if (priv->con_state != old_state) + g_signal_emit (user_data, signals[CONNECTION_STATE], 0, priv->con_state, old_state); } @@ -967,18 +668,14 @@ nm_supplicant_interface_set_state (NMSupplicantInterface * self, } priv->state = new_state; - g_signal_emit (self, - nm_supplicant_interface_signals[STATE], - 0, - priv->state, - old_state); + g_signal_emit (self, signals[STATE], 0, priv->state, old_state); } static void -nm_supplicant_interface_smgr_state_changed (NMSupplicantManager * smgr, - guint32 new_state, - guint32 old_state, - gpointer user_data) +smgr_state_changed (NMSupplicantManager *smgr, + guint32 new_state, + guint32 old_state, + gpointer user_data) { NMSupplicantInterface * self = NM_SUPPLICANT_INTERFACE (user_data); @@ -1194,9 +891,7 @@ call_set_blobs (NMSupplicantInfo *info, GHashTable *orig_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); + g_signal_emit (info->interface, signals[CONNECTION_ERROR], 0, "SendBlobError", msg); return; } @@ -1339,10 +1034,7 @@ scan_request_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_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_signal_emit (info->interface, signals[SCAN_REQ_RESULT], 0, !!success); } gboolean @@ -1427,3 +1119,233 @@ nm_supplicant_interface_connection_state_to_string (guint32 state) return "unknown"; } +/*******************************************************************/ + +NMSupplicantInterface * +nm_supplicant_interface_new (NMSupplicantManager *smgr, + const char *ifname, + gboolean is_wireless) +{ + 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, + "state", + G_CALLBACK (smgr_state_changed), + self); + priv->smgr_state_sig_handler = id; + + priv->dev = g_strdup (ifname); + priv->is_wireless = is_wireless; + nm_supplicant_interface_start (self); + } + + return self; +} + +static void +nm_supplicant_interface_init (NMSupplicantInterface * self) +{ + 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 (); + priv->dbus_mgr = nm_dbus_manager_get (); +} + +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; + } +} + +static void +get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + switch (prop_id) { + case PROP_STATE: + g_value_set_uint (value, NM_SUPPLICANT_INTERFACE_GET_PRIVATE (object)->state); + break; + case PROP_CONNECTION_STATE: + g_value_set_uint (value, NM_SUPPLICANT_INTERFACE_GET_PRIVATE (object)->con_state); + break; + 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); + guint32 sm_state; + + if (priv->disposed) { + G_OBJECT_CLASS (nm_supplicant_interface_parent_class)->dispose (object); + return; + } + priv->disposed = 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); +} + +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_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)); + + /* Signals */ + 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); + + 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); + + 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); + + 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); + + 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); + + 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); + + 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); +} + From 262db04e2015bd3911f1d9649ea49549f3f50dff Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Tue, 5 Oct 2010 14:19:56 -0500 Subject: [PATCH 14/40] supplicant: use a GHashTable instead of a GSList for tracking interfaces It's just less code. Yay. --- .../nm-supplicant-interface.c | 8 ++++ .../nm-supplicant-interface.h | 4 +- .../nm-supplicant-manager.c | 46 ++++++------------- 3 files changed, 25 insertions(+), 33 deletions(-) diff --git a/src/supplicant-manager/nm-supplicant-interface.c b/src/supplicant-manager/nm-supplicant-interface.c index c04dc5e1cf..3c3fe52f84 100644 --- a/src/supplicant-manager/nm-supplicant-interface.c +++ b/src/supplicant-manager/nm-supplicant-interface.c @@ -1119,6 +1119,14 @@ nm_supplicant_interface_connection_state_to_string (guint32 state) return "unknown"; } +const char * +nm_supplicant_interface_get_ifname (NMSupplicantInterface *self) +{ + g_return_val_if_fail (self != NULL, FALSE); + + return NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self)->dev; +} + /*******************************************************************/ NMSupplicantInterface * diff --git a/src/supplicant-manager/nm-supplicant-interface.h b/src/supplicant-manager/nm-supplicant-interface.h index bee5436f5a..3e56f4efaf 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. */ @@ -140,6 +140,8 @@ const char *nm_supplicant_interface_connection_state_to_string (guint32 state); gboolean nm_supplicant_interface_get_scanning (NMSupplicantInterface *self); +const char *nm_supplicant_interface_get_ifname (NMSupplicantInterface *self); + G_END_DECLS #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..1077da8d7f 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. */ @@ -35,7 +35,7 @@ typedef struct { NMDBusManager * dbus_mgr; guint32 state; - GSList * ifaces; + GHashTable * ifaces; gboolean dispose_has_run; guint poke_id; } NMSupplicantManagerPrivate; @@ -125,6 +125,8 @@ nm_supplicant_manager_init (NMSupplicantManager * self) priv->dbus_mgr = nm_dbus_manager_get (); priv->poke_id = 0; + priv->ifaces = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref); + running = nm_supplicant_manager_startup (self); g_signal_connect (priv->dbus_mgr, @@ -265,33 +267,23 @@ nm_supplicant_manager_startup (NMSupplicantManager * self) NMSupplicantInterface * nm_supplicant_manager_get_iface (NMSupplicantManager * self, - const char *ifname, - gboolean is_wireless) + const char *ifname, + gboolean is_wireless) { NMSupplicantManagerPrivate *priv; NMSupplicantInterface * iface = NULL; - GSList * elt; 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); - /* 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 (!strcmp (ifname, nm_supplicant_interface_get_device (if_tmp))) { - iface = if_tmp; - break; - } - } - + iface = g_hash_table_lookup (priv->ifaces, ifname); 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); + g_hash_table_insert (priv->ifaces, g_strdup (ifname), iface); } else { nm_log_dbg (LOGD_SUPPLICANT, "(%s): returning existing supplicant interface", ifname); } @@ -300,30 +292,20 @@ nm_supplicant_manager_get_iface (NMSupplicantManager * self, } void -nm_supplicant_manager_release_iface (NMSupplicantManager * self, - NMSupplicantInterface * iface) +nm_supplicant_manager_release_iface (NMSupplicantManager *self, + NMSupplicantInterface *iface) { NMSupplicantManagerPrivate *priv; - GSList * elt; + const char *ifname; 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); - 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; - } - } + ifname = nm_supplicant_interface_get_ifname (iface); + g_assert (ifname); + g_hash_table_remove (priv->ifaces, ifname); } const char * From 4d63f084031bfe88887b6d655ecad2b81a135005 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Tue, 5 Oct 2010 14:20:23 -0500 Subject: [PATCH 15/40] supplicant: reorganize supplicant manager class Gets rid of prototypes and simplifies the code a bit. --- .../nm-supplicant-manager.c | 289 ++++++++---------- 1 file changed, 134 insertions(+), 155 deletions(-) diff --git a/src/supplicant-manager/nm-supplicant-manager.c b/src/supplicant-manager/nm-supplicant-manager.c index 1077da8d7f..56a5e58d63 100644 --- a/src/supplicant-manager/nm-supplicant-manager.c +++ b/src/supplicant-manager/nm-supplicant-manager.c @@ -36,8 +36,8 @@ typedef struct { NMDBusManager * dbus_mgr; guint32 state; GHashTable * ifaces; - gboolean dispose_has_run; - guint poke_id; + gboolean disposed; + guint poke_id; } NMSupplicantManagerPrivate; #define NM_SUPPLICANT_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \ @@ -46,41 +46,14 @@ typedef struct { G_DEFINE_TYPE (NMSupplicantManager, nm_supplicant_manager, G_TYPE_OBJECT) - -static void nm_supplicant_manager_name_owner_changed (NMDBusManager *dbus_mgr, - const char *name, - const char *old, - const char *new, - gpointer user_data); - -static void nm_supplicant_manager_set_state (NMSupplicantManager * self, - guint32 new_state); - -static gboolean nm_supplicant_manager_startup (NMSupplicantManager * self); - - /* Signals */ enum { STATE, /* change in the manager's state */ LAST_SIGNAL }; -static guint nm_supplicant_manager_signals[LAST_SIGNAL] = { 0 }; +static guint signals[LAST_SIGNAL] = { 0 }; - -NMSupplicantManager * -nm_supplicant_manager_get (void) -{ - static NMSupplicantManager * singleton = NULL; - - 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 gboolean poke_supplicant_cb (gpointer user_data) @@ -114,117 +87,6 @@ out: return FALSE; } -static void -nm_supplicant_manager_init (NMSupplicantManager * self) -{ - NMSupplicantManagerPrivate *priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (self); - gboolean running; - - priv->dispose_has_run = FALSE; - priv->state = NM_SUPPLICANT_MANAGER_STATE_DOWN; - priv->dbus_mgr = nm_dbus_manager_get (); - priv->poke_id = 0; - - priv->ifaces = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref); - - running = nm_supplicant_manager_startup (self); - - g_signal_connect (priv->dbus_mgr, - "name-owner-changed", - G_CALLBACK (nm_supplicant_manager_name_owner_changed), - self); - - if (!running) { - /* Try to activate the supplicant */ - priv->poke_id = g_idle_add (poke_supplicant_cb, (gpointer) self); - } -} - -static void -nm_supplicant_manager_dispose (GObject *object) -{ - 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; - } - - /* Chain up to the parent class */ - G_OBJECT_CLASS (nm_supplicant_manager_parent_class)->dispose (object); -} - -static void -nm_supplicant_manager_class_init (NMSupplicantManagerClass *klass) -{ - GObjectClass * object_class = G_OBJECT_CLASS (klass); - - g_type_class_add_private (object_class, sizeof (NMSupplicantManagerPrivate)); - - 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 void -nm_supplicant_manager_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; - 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 */ - 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; - } - } else if (old_owner_good && !new_owner_good) { - nm_supplicant_manager_set_state (self, NM_SUPPLICANT_MANAGER_STATE_DOWN); - - if (priv->poke_id) - g_source_remove (priv->poke_id); - - /* Poke the supplicant so that it gets activated by dbus system bus - * activation. - */ - priv->poke_id = g_idle_add (poke_supplicant_cb, (gpointer) self); - } -} - - guint32 nm_supplicant_manager_get_state (NMSupplicantManager * self) { @@ -234,25 +96,20 @@ nm_supplicant_manager_get_state (NMSupplicantManager * self) } static void -nm_supplicant_manager_set_state (NMSupplicantManager * self, guint32 new_state) +set_state (NMSupplicantManager *self, guint32 new_state) { NMSupplicantManagerPrivate *priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (self); guint32 old_state; - if (new_state == priv->state) - return; - - old_state = priv->state; - priv->state = new_state; - g_signal_emit (self, - nm_supplicant_manager_signals[STATE], - 0, - priv->state, - old_state); + if (new_state != priv->state) { + old_state = priv->state; + priv->state = new_state; + g_signal_emit (self, signals[STATE], 0, priv->state, old_state); + } } static gboolean -nm_supplicant_manager_startup (NMSupplicantManager * self) +startup (NMSupplicantManager * self) { gboolean running; @@ -260,7 +117,7 @@ nm_supplicant_manager_startup (NMSupplicantManager * self) 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); + set_state (self, NM_SUPPLICANT_MANAGER_STATE_IDLE); return running; } @@ -322,4 +179,126 @@ nm_supplicant_manager_state_to_string (guint32 state) return "unknown"; } +static void +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; + 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 */ + if (strcmp (WPAS_DBUS_SERVICE, name) != 0) + return; + + if (!old_owner_good && new_owner_good) { + gboolean running; + + running = startup (self); + + if (running && priv->poke_id) { + g_source_remove (priv->poke_id); + priv->poke_id = 0; + } + } else if (old_owner_good && !new_owner_good) { + set_state (self, NM_SUPPLICANT_MANAGER_STATE_DOWN); + + if (priv->poke_id) + g_source_remove (priv->poke_id); + + /* Poke the supplicant so that it gets activated by dbus system bus + * activation. + */ + priv->poke_id = g_idle_add (poke_supplicant_cb, (gpointer) self); + } +} + +/*******************************************************************/ + +NMSupplicantManager * +nm_supplicant_manager_get (void) +{ + static NMSupplicantManager *singleton = NULL; + + 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_init (NMSupplicantManager * self) +{ + NMSupplicantManagerPrivate *priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (self); + gboolean running; + + priv->state = NM_SUPPLICANT_MANAGER_STATE_DOWN; + priv->dbus_mgr = nm_dbus_manager_get (); + priv->poke_id = 0; + + priv->ifaces = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref); + + running = startup (self); + + g_signal_connect (priv->dbus_mgr, + "name-owner-changed", + G_CALLBACK (name_owner_changed), + self); + + if (!running) { + /* Try to activate the supplicant */ + priv->poke_id = g_idle_add (poke_supplicant_cb, (gpointer) self); + } +} + +static void +dispose (GObject *object) +{ + NMSupplicantManagerPrivate *priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (object); + + if (priv->disposed) { + G_OBJECT_CLASS (nm_supplicant_manager_parent_class)->dispose (object); + return; + } + priv->disposed = 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; + } + + /* Chain up to the parent class */ + G_OBJECT_CLASS (nm_supplicant_manager_parent_class)->dispose (object); +} + +static void +nm_supplicant_manager_class_init (NMSupplicantManagerClass *klass) +{ + GObjectClass * object_class = G_OBJECT_CLASS (klass); + + g_type_class_add_private (object_class, sizeof (NMSupplicantManagerPrivate)); + + object_class->dispose = dispose; + + /* Signals */ + 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); +} From f3a1366b55f5367c87afb95a2208cbb40729f5bf Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Wed, 6 Oct 2010 11:05:21 -0500 Subject: [PATCH 16/40] supplicant: collapse supplicant interface states We only really need one state for the supplicant interface which simplifies handling in the Wifi and Wired device classes quite a bit. It also simplifies the supplicant interface class too. One behavioral change in the device classes is not running the supplicant interface state changes from an idle; we'll have to see if that causes problems. ISTR long ago that processing the state change signals directly caused some issues, but we've significantly reworked somethings since then so we may be able to get away with this now. --- src/nm-device-ethernet.c | 298 ++-------- src/nm-device-wifi.c | 354 ++--------- .../nm-supplicant-interface.c | 562 ++++++++---------- .../nm-supplicant-interface.h | 53 +- .../nm-supplicant-manager.c | 232 +++----- .../nm-supplicant-manager.h | 38 +- 6 files changed, 470 insertions(+), 1067 deletions(-) diff --git a/src/nm-device-ethernet.c b/src/nm-device-ethernet.c index 08bbc50112..13139542fa 100644 --- a/src/nm-device-ethernet.c +++ b/src/nm-device-ethernet.c @@ -78,30 +78,17 @@ 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 { @@ -996,30 +983,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) { @@ -1044,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; } } @@ -1127,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) { @@ -1224,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); @@ -1246,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); } + break; + case NM_SUPPLICANT_INTERFACE_STATE_DOWN: + supplicant_interface_release (self); + remove_supplicant_timeouts (self); + + 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; } - - 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)); - - schedule_state_handler (NM_DEVICE_ETHERNET (user_data), - supplicant_iface_connection_state_cb_handler, - new_state, - old_state, - FALSE); } static gboolean @@ -1456,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); @@ -2047,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; diff --git a/src/nm-device-wifi.c b/src/nm-device-wifi.c index b09d112547..44d5a12754 100644 --- a/src/nm-device-wifi.c +++ b/src/nm-device-wifi.c @@ -113,34 +113,21 @@ 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; - typedef struct Supplicant { NMSupplicantManager *mgr; NMSupplicantInterface *iface; /* signal handler ids */ - guint mgr_state_id; 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 { @@ -199,15 +186,10 @@ static void cleanup_association_attempt (NMDeviceWifi * self, 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, @@ -221,11 +203,6 @@ 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_notify_scanning_cb (NMSupplicantInterface * iface, GParamSpec * pspec, NMDeviceWifi * self); @@ -625,10 +602,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. @@ -657,17 +631,13 @@ static gboolean supplicant_interface_acquire (NMDeviceWifi *self) { NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self); - guint id, mgr_state; + guint id; 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) { @@ -700,12 +670,6 @@ supplicant_interface_acquire (NMDeviceWifi *self) self); priv->supplicant.iface_scan_results_id = id; - id = g_signal_connect (priv->supplicant.iface, - "connection-state", - G_CALLBACK (supplicant_iface_connection_state_cb), - self); - priv->supplicant.iface_con_state_id = id; - id = g_signal_connect (priv->supplicant.iface, "notify::scanning", G_CALLBACK (supplicant_iface_notify_scanning_cb), @@ -715,30 +679,6 @@ supplicant_interface_acquire (NMDeviceWifi *self) 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) { @@ -776,10 +716,6 @@ 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; @@ -800,11 +736,6 @@ supplicant_interface_release (NMDeviceWifi *self) 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; @@ -814,7 +745,7 @@ supplicant_interface_release (NMDeviceWifi *self) /* 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; } } @@ -1837,11 +1768,11 @@ 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; @@ -2441,253 +2372,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; + return; - 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)); - task = g_slice_new0 (SupplicantStateTask); - if (!task) { - nm_log_err (LOGD_WIFI, "Not enough memory to process supplicant manager state change."); - return FALSE; - } + devstate = nm_device_get_state (device); + scanning = nm_supplicant_interface_get_scanning (iface); - 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); - - self = task->self; - priv = NM_DEVICE_WIFI_GET_PRIVATE (self); - - 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)); - - 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); + 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; } -out: /* Signal scanning state changes */ - if ( task->new_state == NM_SUPPLICANT_INTERFACE_CON_STATE_SCANNING - || task->old_state == NM_SUPPLICANT_INTERFACE_CON_STATE_SCANNING) + if ( new_state == NM_SUPPLICANT_INTERFACE_STATE_SCANNING + || old_state == NM_SUPPLICANT_INTERFACE_STATE_SCANNING) g_object_notify (G_OBJECT (self), "scanning"); - - 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) - && (nm_device_get_firmware_missing (NM_DEVICE (self)) == FALSE)) { - /* 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); - } - } - } - - 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); } struct iface_con_error_cb_data { @@ -3845,20 +3620,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; diff --git a/src/supplicant-manager/nm-supplicant-interface.c b/src/supplicant-manager/nm-supplicant-interface.c index 3c3fe52f84..20cce6de5c 100644 --- a/src/supplicant-manager/nm-supplicant-interface.c +++ b/src/supplicant-manager/nm-supplicant-interface.c @@ -47,15 +47,6 @@ G_DEFINE_TYPE (NMSupplicantInterface, nm_supplicant_interface, G_TYPE_OBJECT) NM_TYPE_SUPPLICANT_INTERFACE, \ NMSupplicantInterfacePrivate)) -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_set_state (NMSupplicantInterface *self, - guint32 new_state); - - /* Signals */ enum { STATE, /* change in the interface's state */ @@ -63,7 +54,6 @@ enum { 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 */ CONNECTION_ERROR, /* an error occurred during a connection request */ LAST_SIGNAL }; @@ -74,16 +64,14 @@ static guint signals[LAST_SIGNAL] = { 0 }; enum { PROP_0 = 0, PROP_STATE, - PROP_CONNECTION_STATE, PROP_SCANNING, LAST_PROP }; -typedef struct -{ +typedef struct { NMSupplicantManager * smgr; - gulong smgr_state_sig_handler; + gulong smgr_running_id; NMDBusManager * dbus_mgr; char * dev; gboolean is_wireless; @@ -93,9 +81,9 @@ typedef struct NMCallStore * assoc_pcalls; NMCallStore * other_pcalls; - guint32 con_state; gboolean scanning; + DBusGProxy * wpas_proxy; DBusGProxy * iface_proxy; DBusGProxy * net_proxy; @@ -186,28 +174,6 @@ nm_supplicant_info_destroy (gpointer user_data) } } -static void -try_remove_iface (DBusGConnection *g_connection, - const char *path) -{ - 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); -} - static void emit_error_helper (NMSupplicantInterface *self, GError *err) @@ -344,50 +310,80 @@ wpas_iface_query_scan_results (DBusGProxy *proxy, gpointer user_data) } static guint32 -wpas_state_string_to_enum (const char * str_state) +wpas_state_string_to_enum (const char *str_state) { - guint32 enum_state = NM_SUPPLICANT_INTERFACE_CON_STATE_DISCONNECTED; + guint32 enum_state = NM_SUPPLICANT_INTERFACE_STATE_DISCONNECTED; if (!strcmp (str_state, "DISCONNECTED")) - enum_state = NM_SUPPLICANT_INTERFACE_CON_STATE_DISCONNECTED; + enum_state = NM_SUPPLICANT_INTERFACE_STATE_DISCONNECTED; else if (!strcmp (str_state, "INACTIVE")) - enum_state = NM_SUPPLICANT_INTERFACE_CON_STATE_INACTIVE; + enum_state = NM_SUPPLICANT_INTERFACE_STATE_INACTIVE; else if (!strcmp (str_state, "SCANNING")) - enum_state = NM_SUPPLICANT_INTERFACE_CON_STATE_SCANNING; + enum_state = NM_SUPPLICANT_INTERFACE_STATE_SCANNING; else if (!strcmp (str_state, "ASSOCIATING")) - enum_state = NM_SUPPLICANT_INTERFACE_CON_STATE_ASSOCIATING; + enum_state = NM_SUPPLICANT_INTERFACE_STATE_ASSOCIATING; else if (!strcmp (str_state, "ASSOCIATED")) - enum_state = NM_SUPPLICANT_INTERFACE_CON_STATE_ASSOCIATED; + enum_state = NM_SUPPLICANT_INTERFACE_STATE_ASSOCIATED; else if (!strcmp (str_state, "4WAY_HANDSHAKE")) - enum_state = NM_SUPPLICANT_INTERFACE_CON_STATE_4WAY_HANDSHAKE; + enum_state = NM_SUPPLICANT_INTERFACE_STATE_4WAY_HANDSHAKE; else if (!strcmp (str_state, "GROUP_HANDSHAKE")) - enum_state = NM_SUPPLICANT_INTERFACE_CON_STATE_GROUP_HANDSHAKE; + enum_state = NM_SUPPLICANT_INTERFACE_STATE_GROUP_HANDSHAKE; else if (!strcmp (str_state, "COMPLETED")) - enum_state = NM_SUPPLICANT_INTERFACE_CON_STATE_COMPLETED; + enum_state = NM_SUPPLICANT_INTERFACE_STATE_COMPLETED; return enum_state; } +static void +set_state (NMSupplicantInterface *self, guint32 new_state) +{ + NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self); + guint32 old_state = priv->state; + + g_return_if_fail (new_state < NM_SUPPLICANT_INTERFACE_STATE_LAST); + + if (new_state == priv->state) + return; + + /* DOWN is a terminal state */ + g_return_if_fail (priv->state != NM_SUPPLICANT_INTERFACE_STATE_DOWN); + + /* Cannot regress to READY or INIT from higher states */ + if (priv->state <= NM_SUPPLICANT_INTERFACE_STATE_READY) + g_return_if_fail (new_state > priv->state); + + 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); + + /* Disconnect supplicant manager state listeners since we're done */ + if (priv->smgr_running_id) { + g_signal_handler_disconnect (priv->smgr, priv->smgr_running_id); + priv->smgr_running_id = 0; + } + } + + priv->state = new_state; + g_signal_emit (self, signals[STATE], 0, priv->state, old_state); +} + +/* Supplicant state signal handler */ static void wpas_iface_handle_state_change (DBusGProxy *proxy, const char *str_new_state, const char *str_old_state, 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, signals[CONNECTION_STATE], 0, priv->con_state, old_state); + set_state (NM_SUPPLICANT_INTERFACE (user_data), + wpas_state_string_to_enum (str_new_state)); } - +/* Explicit state request reply handler */ static void iface_state_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data) { + NMSupplicantInfo *info = (NMSupplicantInfo *) user_data; GError *err = NULL; char *state_str = NULL; @@ -397,12 +393,8 @@ iface_state_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data) nm_log_warn (LOGD_SUPPLICANT, "could not get interface state: %s.", err->message); g_error_free (err); } 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); + set_state (info->interface, wpas_state_string_to_enum (state_str)); g_free (state_str); - nm_supplicant_interface_set_state (info->interface, NM_SUPPLICANT_INTERFACE_STATE_READY); } } @@ -479,225 +471,181 @@ nm_supplicant_interface_get_scanning (NMSupplicantInterface *self) priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self); if (priv->scanning) return TRUE; - if (priv->con_state == NM_SUPPLICANT_INTERFACE_CON_STATE_SCANNING) + if (priv->state == NM_SUPPLICANT_INTERFACE_STATE_SCANNING) return TRUE; return FALSE; } static void -nm_supplicant_interface_add_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 (_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, "StateChange", + G_CALLBACK (wpas_iface_handle_state_change), + self, + NULL); + + dbus_g_proxy_add_signal (priv->iface_proxy, "ScanResultsAvailable", G_TYPE_INVALID); + dbus_g_proxy_connect_signal (priv->iface_proxy, "ScanResultsAvailable", + G_CALLBACK (wpas_iface_query_scan_results), + self, + 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), + self, + NULL); + + /* Interface added to the supplicant; get its initial state. */ + wpas_iface_get_state (self); + wpas_iface_get_scanning (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); - 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); - } else { - nm_log_err (LOGD_SUPPLICANT, "(%s): error getting interface: %s", - priv->dev, err->message); - } - - g_error_free (err); + 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_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); + nm_log_err (LOGD_SUPPLICANT, "(%s): error adding interface: %s", + priv->dev, error->message); + g_clear_error (&error); } } static void -nm_supplicant_interface_add_to_supplicant (NMSupplicantInterface * self, - gboolean get_only) +interface_get (NMSupplicantInterface *self) { 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); - + 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 -nm_supplicant_interface_start (NMSupplicantInterface * self) +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 *error = NULL; + char *path = NULL; + + 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 { + nm_log_err (LOGD_SUPPLICANT, "(%s): error adding interface: %s", + priv->dev, error->message); + } + g_clear_error (&error); + } +} + +static void +interface_add (NMSupplicantInterface * self, gboolean is_wireless) { NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self); - guint32 state; + DBusGProxyCall *call; + NMSupplicantInfo *info; + GHashTable *hash; + GValue *driver; /* 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. + /* 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); + + driver = g_new0 (GValue, 1); + g_value_init (driver, G_TYPE_STRING); + g_value_set_string (driver, is_wireless ? "wext" : "wired"); + + hash = g_hash_table_new (g_str_hash, g_str_equal); + g_hash_table_insert (hash, "driver", driver); + + call = dbus_g_proxy_begin_call (priv->wpas_proxy, "addInterface", + interface_add_cb, + info, + nm_supplicant_info_destroy, + G_TYPE_STRING, priv->dev, + DBUS_TYPE_G_MAP_OF_VARIANT, hash, + G_TYPE_INVALID); + + g_hash_table_destroy (hash); + g_value_unset (driver); + g_free (driver); + + nm_supplicant_info_set_call (info, call); +} + +static void +smgr_running_cb (NMSupplicantManager *smgr, + GParamSpec *pspec, + gpointer user_data) +{ + NMSupplicantInterface *self = NM_SUPPLICANT_INTERFACE (user_data); + NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (user_data); + + if (nm_supplicant_manager_running (smgr)) { + /* This can happen if the supplicant couldn't be activated but + * for some reason was started after the activation failure. */ - } else - nm_log_warn (LOGD_SUPPLICANT, "Unknown supplicant manager state!"); -} - -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; + 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 -nm_supplicant_interface_set_state (NMSupplicantInterface * self, - guint32 new_state) -{ - NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self); - guint32 old_state; - - g_return_if_fail (new_state < NM_SUPPLICANT_INTERFACE_STATE_LAST); - - if (new_state == priv->state) - return; - - 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); - } - - priv->state = new_state; - g_signal_emit (self, signals[STATE], 0, priv->state, old_state); -} - -static void -smgr_state_changed (NMSupplicantManager *smgr, - guint32 new_state, - guint32 old_state, - gpointer user_data) -{ - NMSupplicantInterface * self = NM_SUPPLICANT_INTERFACE (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; - } -} - - static void remove_network_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data) { @@ -742,16 +690,13 @@ nm_supplicant_interface_disconnect (NMSupplicantInterface * self) if (!priv->iface_proxy) return; - /* Don't try to disconnect if the supplicant interface is already - * disconnected. - */ - if (priv->con_state == NM_SUPPLICANT_INTERFACE_CON_STATE_DISCONNECTED - || priv->con_state == NM_SUPPLICANT_INTERFACE_CON_STATE_INACTIVE) { + /* 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) { if (priv->net_proxy) { g_object_unref (priv->net_proxy); priv->net_proxy = NULL; } - return; } @@ -1011,14 +956,6 @@ nm_supplicant_interface_set_config (NMSupplicantInterface * self, 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) { @@ -1067,24 +1004,30 @@ 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) { switch (state) { case NM_SUPPLICANT_INTERFACE_STATE_INIT: return "init"; - case NM_SUPPLICANT_INTERFACE_STATE_STARTING: - 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: @@ -1094,35 +1037,28 @@ 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"; - default: - break; - } - return "unknown"; + 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; } @@ -1147,14 +1083,15 @@ nm_supplicant_interface_new (NMSupplicantManager *smgr, priv->smgr = g_object_ref (smgr); id = g_signal_connect (priv->smgr, - "state", - G_CALLBACK (smgr_state_changed), + "notify::" NM_SUPPLICANT_MANAGER_RUNNING, + G_CALLBACK (smgr_running_cb), self); - priv->smgr_state_sig_handler = id; + priv->smgr_running_id = id; priv->dev = g_strdup (ifname); priv->is_wireless = is_wireless; - nm_supplicant_interface_start (self); + + interface_add (self, priv->is_wireless); } return self; @@ -1164,12 +1101,18 @@ 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->con_state = NM_SUPPLICANT_INTERFACE_CON_STATE_DISCONNECTED; 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 @@ -1195,9 +1138,6 @@ get_property (GObject *object, case PROP_STATE: g_value_set_uint (value, NM_SUPPLICANT_INTERFACE_GET_PRIVATE (object)->state); break; - case PROP_CONNECTION_STATE: - g_value_set_uint (value, NM_SUPPLICANT_INTERFACE_GET_PRIVATE (object)->con_state); - break; case PROP_SCANNING: g_value_set_boolean (value, NM_SUPPLICANT_INTERFACE_GET_PRIVATE (object)->scanning); break; @@ -1211,7 +1151,6 @@ static void dispose (GObject *object) { NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (object); - guint32 sm_state; if (priv->disposed) { G_OBJECT_CLASS (nm_supplicant_interface_parent_class)->dispose (object); @@ -1219,27 +1158,21 @@ dispose (GObject *object) } priv->disposed = 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->wpas_proxy) + g_object_unref (priv->wpas_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); + if (priv->smgr_running_id) + g_signal_handler_disconnect (priv->smgr, priv->smgr_running_id); g_object_unref (priv->smgr); } @@ -1338,15 +1271,6 @@ nm_supplicant_interface_class_init (NMSupplicantInterfaceClass *klass) g_cclosure_marshal_VOID__UINT, G_TYPE_NONE, 1, G_TYPE_UINT); - 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); - signals[CONNECTION_ERROR] = g_signal_new ("connection-error", G_OBJECT_CLASS_TYPE (object_class), diff --git a/src/supplicant-manager/nm-supplicant-interface.h b/src/supplicant-manager/nm-supplicant-interface.h index 3e56f4efaf..d6e4a55969 100644 --- a/src/supplicant-manager/nm-supplicant-interface.h +++ b/src/supplicant-manager/nm-supplicant-interface.h @@ -26,47 +26,25 @@ #include #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)) @@ -103,11 +81,6 @@ typedef struct { 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, @@ -128,20 +101,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); const char *nm_supplicant_interface_get_ifname (NMSupplicantInterface *self); -G_END_DECLS - #endif /* NM_SUPPLICANT_INTERFACE_H */ diff --git a/src/supplicant-manager/nm-supplicant-manager.c b/src/supplicant-manager/nm-supplicant-manager.c index 56a5e58d63..c139ec6fef 100644 --- a/src/supplicant-manager/nm-supplicant-manager.c +++ b/src/supplicant-manager/nm-supplicant-manager.c @@ -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; - GHashTable * ifaces; - gboolean disposed; - guint poke_id; -} NMSupplicantManagerPrivate; #define NM_SUPPLICANT_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \ NM_TYPE_SUPPLICANT_MANAGER, \ @@ -46,84 +34,26 @@ typedef struct { G_DEFINE_TYPE (NMSupplicantManager, nm_supplicant_manager, G_TYPE_OBJECT) -/* Signals */ +/* Properties */ enum { - STATE, /* change in the manager's state */ - LAST_SIGNAL + PROP_0 = 0, + PROP_RUNNING, + LAST_PROP }; -static guint signals[LAST_SIGNAL] = { 0 }; + +typedef struct { + NMDBusManager * dbus_mgr; + guint name_owner_id; + DBusGProxy * proxy; + gboolean running; + GHashTable * ifaces; + gboolean disposed; +} NMSupplicantManagerPrivate; /********************************************************************/ -static gboolean -poke_supplicant_cb (gpointer user_data) -{ - 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; - } - - 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); - -out: - /* Reschedule the poke */ - priv->poke_id = g_timeout_add_seconds (SUPPLICANT_POKE_INTERVAL, - poke_supplicant_cb, - (gpointer) self); - - return FALSE; -} - -guint32 -nm_supplicant_manager_get_state (NMSupplicantManager * self) -{ - g_return_val_if_fail (NM_IS_SUPPLICANT_MANAGER (self), FALSE); - - return NM_SUPPLICANT_MANAGER_GET_PRIVATE (self)->state; -} - -static void -set_state (NMSupplicantManager *self, guint32 new_state) -{ - NMSupplicantManagerPrivate *priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (self); - guint32 old_state; - - if (new_state != priv->state) { - old_state = priv->state; - priv->state = new_state; - g_signal_emit (self, signals[STATE], 0, priv->state, old_state); - } -} - -static gboolean -startup (NMSupplicantManager * self) -{ - 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) - set_state (self, NM_SUPPLICANT_MANAGER_STATE_IDLE); - - return running; -} - NMSupplicantInterface * -nm_supplicant_manager_get_iface (NMSupplicantManager * self, +nm_supplicant_manager_iface_get (NMSupplicantManager * self, const char *ifname, gboolean is_wireless) { @@ -149,34 +79,37 @@ nm_supplicant_manager_get_iface (NMSupplicantManager * self, } void -nm_supplicant_manager_release_iface (NMSupplicantManager *self, +nm_supplicant_manager_iface_release (NMSupplicantManager *self, NMSupplicantInterface *iface) { NMSupplicantManagerPrivate *priv; - const char *ifname; + const char *ifname, *op; 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); + /* 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); + } + ifname = nm_supplicant_interface_get_ifname (iface); g_assert (ifname); g_hash_table_remove (priv->ifaces, ifname); } -const char * -nm_supplicant_manager_state_to_string (guint32 state) +gboolean +nm_supplicant_manager_running (NMSupplicantManager *self) { - switch (state) { - case NM_SUPPLICANT_MANAGER_STATE_DOWN: - return "down"; - case NM_SUPPLICANT_MANAGER_STATE_IDLE: - return "idle"; - default: - break; - } - return "unknown"; + g_return_val_if_fail (self != NULL, FALSE); + g_return_val_if_fail (NM_IS_SUPPLICANT_MANAGER (self), FALSE); + + return NM_SUPPLICANT_MANAGER_GET_PRIVATE (self)->running; } static void @@ -186,34 +119,23 @@ name_owner_changed (NMDBusManager *dbus_mgr, 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 = 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"); + priv->running = TRUE; + g_object_notify (G_OBJECT (self), NM_SUPPLICANT_MANAGER_RUNNING); } else if (old_owner_good && !new_owner_good) { - set_state (self, NM_SUPPLICANT_MANAGER_STATE_DOWN); - - if (priv->poke_id) - g_source_remove (priv->poke_id); - - /* Poke the supplicant so that it gets activated by dbus system bus - * activation. - */ - priv->poke_id = g_idle_add (poke_supplicant_cb, (gpointer) self); + nm_log_info (LOGD_SUPPLICANT, "wpa_supplicant stopped"); + priv->running = FALSE; + g_object_notify (G_OBJECT (self), NM_SUPPLICANT_MANAGER_RUNNING); } } @@ -237,24 +159,40 @@ static void nm_supplicant_manager_init (NMSupplicantManager * self) { NMSupplicantManagerPrivate *priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (self); - gboolean running; + DBusGConnection *bus; - priv->state = NM_SUPPLICANT_MANAGER_STATE_DOWN; priv->dbus_mgr = nm_dbus_manager_get (); - priv->poke_id = 0; + 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); +} - running = startup (self); +static void +set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) +{ + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); +} - g_signal_connect (priv->dbus_mgr, - "name-owner-changed", - G_CALLBACK (name_owner_changed), - self); - - if (!running) { - /* Try to activate the supplicant */ - priv->poke_id = g_idle_add (poke_supplicant_cb, (gpointer) self); +static void +get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) +{ + switch (prop_id) { + case PROP_RUNNING: + g_value_set_boolean (value, NM_SUPPLICANT_MANAGER_GET_PRIVATE (object)->running); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; } } @@ -263,22 +201,22 @@ dispose (GObject *object) { NMSupplicantManagerPrivate *priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (object); - if (priv->disposed) { - G_OBJECT_CLASS (nm_supplicant_manager_parent_class)->dispose (object); - return; - } + if (priv->disposed) + goto out; priv->disposed = TRUE; - if (priv->poke_id) { - g_source_remove (priv->poke_id); - priv->poke_id = 0; - } - 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)); - priv->dbus_mgr = NULL; } + g_hash_table_destroy (priv->ifaces); + + 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); } @@ -286,19 +224,19 @@ dispose (GObject *object) static void nm_supplicant_manager_class_init (NMSupplicantManagerClass *klass) { - GObjectClass * object_class = G_OBJECT_CLASS (klass); + GObjectClass *object_class = G_OBJECT_CLASS (klass); g_type_class_add_private (object_class, sizeof (NMSupplicantManagerPrivate)); + object_class->get_property = get_property; + object_class->set_property = set_property; object_class->dispose = dispose; - /* Signals */ - 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); + g_object_class_install_property (object_class, PROP_RUNNING, + g_param_spec_boolean (NM_SUPPLICANT_MANAGER_RUNNING, + "Running", + "Running", + FALSE, + G_PARAM_READABLE)); } diff --git a/src/supplicant-manager/nm-supplicant-manager.h b/src/supplicant-manager/nm-supplicant-manager.h index fef2a77444..ca3b643f57 100644 --- a/src/supplicant-manager/nm-supplicant-manager.h +++ b/src/supplicant-manager/nm-supplicant-manager.h @@ -33,23 +33,6 @@ 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_RUNNING "running" + 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); +NMSupplicantManager *nm_supplicant_manager_get (void); -guint32 nm_supplicant_manager_get_state (NMSupplicantManager * mgr); +NMSupplicantInterface *nm_supplicant_manager_iface_get (NMSupplicantManager *mgr, + const char *ifname, + gboolean is_wireless); -NMSupplicantInterface * nm_supplicant_manager_get_iface (NMSupplicantManager * mgr, - const char *ifname, - gboolean is_wireless); +void nm_supplicant_manager_iface_release (NMSupplicantManager *mgr, + NMSupplicantInterface *iface); -void nm_supplicant_manager_release_iface (NMSupplicantManager * mgr, - NMSupplicantInterface * iface); - -const char *nm_supplicant_manager_state_to_string (guint32 state); +gboolean nm_supplicant_manager_running (NMSupplicantManager *mgr); #endif /* NM_SUPPLICANT_MANAGER_H */ From 516ea8bf12a60db58ce7fe20bfae9b5b70af4172 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Wed, 6 Oct 2010 15:43:41 -0500 Subject: [PATCH 17/40] wifi: simplify supplicant interface signal handling --- src/nm-device-wifi.c | 52 +++++++++++++++----------------------------- 1 file changed, 17 insertions(+), 35 deletions(-) diff --git a/src/nm-device-wifi.c b/src/nm-device-wifi.c index 44d5a12754..49529708b2 100644 --- a/src/nm-device-wifi.c +++ b/src/nm-device-wifi.c @@ -113,17 +113,14 @@ typedef enum { #define NM_WIFI_ERROR (nm_wifi_error_quark ()) #define NM_TYPE_WIFI_ERROR (nm_wifi_error_get_type ()) +#define SUP_SIG_ID_LEN 5 + typedef struct Supplicant { NMSupplicantManager *mgr; NMSupplicantInterface *iface; - /* signal handler ids */ + 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_notify_scanning_id; /* Timeouts and idles */ guint iface_con_error_cb_id; @@ -631,7 +628,7 @@ static gboolean supplicant_interface_acquire (NMDeviceWifi *self) { NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self); - guint id; + guint id, i = 0; g_return_val_if_fail (self != NULL, FALSE); /* interface already acquired? */ @@ -646,35 +643,37 @@ supplicant_interface_acquire (NMDeviceWifi *self) return FALSE; } + memset (priv->supplicant.sig_ids, 0, sizeof (priv->supplicant.sig_ids)); + id = g_signal_connect (priv->supplicant.iface, "state", G_CALLBACK (supplicant_iface_state_cb), self); - priv->supplicant.iface_state_id = id; + priv->supplicant.sig_ids[i++] = 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; + priv->supplicant.sig_ids[i++] = id; id = g_signal_connect (priv->supplicant.iface, "scan-req-result", G_CALLBACK (supplicant_iface_scan_request_result_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), self); - priv->supplicant.iface_scan_results_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; } @@ -702,6 +701,7 @@ static void supplicant_interface_release (NMDeviceWifi *self) { NMDeviceWifiPrivate *priv; + guint i; g_return_if_fail (self != NULL); @@ -716,30 +716,12 @@ supplicant_interface_release (NMDeviceWifi *self) remove_supplicant_interface_error_handler (self); - 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_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 */ From d18911aabdb945e33ad193e422fda86c9a63b89a Mon Sep 17 00:00:00 2001 From: Brett Witherspoon Date: Wed, 6 Oct 2010 15:47:32 -0500 Subject: [PATCH 18/40] doc: don't install docs when docs are disabled (bgo #631133) --- docs/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 From 66ef151da184290ea24b8d51b313b2a4f567f528 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Dr=C4=85g?= Date: Wed, 6 Oct 2010 15:49:16 -0500 Subject: [PATCH 19/40] po: update Polish translation (bgo #631153) --- po/pl.po | 1873 +++++++++++++++++++++++++++++------------------------- 1 file changed, 1024 insertions(+), 849 deletions(-) diff --git a/po/pl.po b/po/pl.po index cfa994a294..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 \n" -"Language-Team: Polish \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 \n" +"Language-Team: Polish \n" +"Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2\n" +"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 | uuid | system | user]\n" " status\n" -" up id | uuid [iface ] [ap ] [--nowait] [--timeout ]\n" +" up id | uuid [iface ] [ap ] [--nowait] [--timeout " +"]\n" " down id | uuid \n" msgstr "" "Użycie: nmcli con { POLECENIE | help }\n" @@ -36,418 +113,528 @@ msgstr "" "\n" " list [id | uuid | system | user]\n" " status\n" -" up id | uuid [iface ] [ap ] [--nowait] [--timeout ]\n" +" up id | uuid [iface ] [ap ] [--" +"nowait] [--timeout ]\n" " down id | uuid \n" - -#: ../cli/src/connections.c: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 +#: ../cli/src/connections.c:199 ../cli/src/connections.c:540 #, c-format -msgid "System connections:\n" -msgstr "Połączenia systemowe:\n" +msgid "Error: 'con list': %s" +msgstr "Błąd: \"con list\": %s" - -#: ../cli/src/connections.c:167 +#: ../cli/src/connections.c:201 ../cli/src/connections.c:542 #, c-format -msgid "User connections:\n" -msgstr "Połączenia użytkownika:\n" +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: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: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: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: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: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: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:268 -#: ../cli/src/devices.c:304 -msgid "no" -msgstr "nie" - - -#: ../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:730 +#: ../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: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 ]\n" " disconnect iface [--nowait] [--timeout ]\n" -" wifi [list [iface ] | apinfo iface hwaddr ]\n" +" wifi [list [iface ] [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 ]\n" " disconnect iface [--nowait] [--timeout ]\n" -" wifi [list [iface ] | apinfo iface hwaddr ]\n" +" wifi [list [iface ] [hwaddr ]]\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 -#, 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" - - -#: ../cli/src/devices.c:255 -msgid " WPA" -msgstr " WPA" - - -#: ../cli/src/devices.c:257 -msgid " WPA2" -msgstr " WPA2" - - -#: ../cli/src/devices.c:260 -msgid " Enterprise" -msgstr " Enterprise" - - -#: ../cli/src/devices.c:294 -#: ../cli/src/devices.c:458 -#: ../cli/src/devices.c:460 -msgid "Device" -msgstr "Urządzenie" - - -#: ../cli/src/devices.c:299 -msgid "Driver" -msgstr "Sterownik" - - -#: ../cli/src/devices.c:299 -#: ../cli/src/devices.c:567 -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 -#, 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 -msgid "on" -msgstr "włączone" - - -#: ../cli/src/devices.c:379 -msgid "off" -msgstr "wyłączone" - - -#: ../cli/src/devices.c:387 -#, 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" - - -#: ../cli/src/devices.c:458 -msgid "Status of devices" -msgstr "Stan urządzenia" - - -#: ../cli/src/devices.c:487 -#, 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 -#, c-format -msgid "Error: Device '%s' not found." -msgstr "Błąd: nie odnaleziono urządzenia \"%s\"." - - -#: ../cli/src/devices.c:539 -#, c-format -msgid "Success: Device '%s' successfully disconnected." -msgstr "Powodzenie: urządzenie \"%s\" zostało rozłączone." - - -#: ../cli/src/devices.c:564 -#, 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 -#, c-format -msgid "Device state: %d (%s)\n" -msgstr "Stan urządzenia: %d (%s)\n" - - -#: ../cli/src/devices.c:636 -#, 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 -#, 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:" - - -#: ../cli/src/devices.c:806 -#, c-format -msgid "Error: hwaddr has to be specified." -msgstr "Błąd: należy podać adres sprzętowy." - - -#: ../cli/src/devices.c:844 -#, 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:393 #, c-format msgid "%u MHz" msgstr "%u MHz" - -#: ../cli/src/devices.c:863 +#: ../cli/src/devices.c:394 #, c-format msgid "%u MB/s" msgstr "%u MB/s" +#: ../cli/src/devices.c:403 +msgid "Encrypted: " +msgstr "Zaszyfrowane: " -#: ../cli/src/devices.c:869 -#: ../cli/src/devices.c:871 -msgid "AP parameters" -msgstr "Parametry punkty dostępowego" +#: ../cli/src/devices.c:408 +msgid "WEP " +msgstr "WEP " +#: ../cli/src/devices.c:410 +msgid "WPA " +msgstr "WPA " -#: ../cli/src/devices.c:873 -msgid "SSID:" -msgstr "SSID:" +#: ../cli/src/devices.c:412 +msgid "WPA2 " +msgstr "WPA2 " +#: ../cli/src/devices.c:415 +msgid "Enterprise " +msgstr "Enterprise " -#: ../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" +#: ../cli/src/devices.c:424 +msgid "Ad-Hoc" msgstr "Ad-hoc" - -#: ../cli/src/devices.c:876 +#: ../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:877 -msgid "Maximal bitrate:" -msgstr "Maksymalna prędkość:" +#: ../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:878 -msgid "Strength:" -msgstr "Siła sygnału:" +#: ../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:879 -msgid "Flags:" -msgstr "Flagi:" +#: ../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 "włączone" -#: ../cli/src/devices.c:879 -msgid "privacy" -msgstr "prywatne" +#: ../cli/src/devices.c:627 +msgid "off" +msgstr "wyłączone" +#: ../cli/src/devices.c:808 +#, c-format +msgid "Error: 'dev status': %s" +msgstr "Błąd: \"dev status\": %s" -#: ../cli/src/devices.c:880 -msgid "WPA flags:" -msgstr "Flagi WPA:" +#: ../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:817 +msgid "Status of devices" +msgstr "Stan urządzenia" -#: ../cli/src/devices.c:881 -msgid "RSN flags:" -msgstr "Flagi RSN:" +#: ../cli/src/devices.c:845 +#, c-format +msgid "Error: '%s' argument is missing." +msgstr "Błąd: brak parametru \"%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 "Błąd: nie odnaleziono urządzenia \"%s\"." -#: ../cli/src/devices.c:907 +#: ../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: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:930 +#, c-format +msgid "Device state: %d (%s)\n" +msgstr "Stan urządzenia: %d (%s)\n" + +#: ../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:1112 +#, c-format +msgid "Error: 'dev wifi': %s" +msgstr "Błąd: \"dev wifi\": %s" + +#: ../cli/src/devices.c:1114 +#, c-format +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: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:1173 +#, 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: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" -#: ../cli/src/network-manager.c:46 +#. 1 +#: ../cli/src/network-manager.c:37 +msgid "NET-ENABLED" +msgstr "SIEĆ-WŁĄCZONA" + +#. 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: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: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: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: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" -#: ../cli/src/network-manager.c:106 -msgid "NM wireless hardware:" -msgstr "Adres sprzętowy 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" -#. 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: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." -#: ../cli/src/network-manager.c:108 -msgid "NM WWAN hardware:" -msgstr "WWAM sprzętu 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" -#. 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: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] |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] |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:106 +#: ../cli/src/nmcli.c:113 #, c-format -msgid "Object '%s' is unknown, try 'nmcli help'." -msgstr "Obiekt \"%s\" jest nieznany. Można spróbować polecenie \"nmcli help\"." +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:143 +#, c-format +msgid "Error: Option '--terse' is specified the second time." +msgstr "Błąd: opcja \"--terse\" został podana po raz drugi." -#: ../cli/src/nmcli.c:139 +#: ../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:156 +#, c-format +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:209 #, c-format msgid "nmcli tool, version %s\n" msgstr "narzędzie nmcli, wersja %s\n" - -#: ../cli/src/nmcli.c:145 +#: ../cli/src/nmcli.c:215 #, c-format -msgid "Option '%s' is unknown, try 'nmcli -help'." -msgstr "Opcja \"%s\" jest nieznana. Można spróbować polecenie \"nmcli help\"." +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,152 +1543,46 @@ 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" - - -#: ../src/nm-netlink-monitor.c:260 -#, 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:270 -#, c-format -msgid "unable to connect to netlink for monitoring link status: %s" -msgstr "nie można połączyć się z netlink dla monitorowania stanu połączenia: %s" - - -#: ../src/nm-netlink-monitor.c:278 -#, 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" - - -#: ../src/nm-netlink-monitor.c:286 -#, 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" - - -#: ../src/nm-netlink-monitor.c:558 -#: ../src/nm-netlink-monitor.c:571 -#, c-format -msgid "error updating link cache: %s" -msgstr "błąd podczas aktualizowania pamięci podręcznej połączenia: %s" - - -#: ../src/NetworkManager.c:494 -#, c-format -msgid "Invalid option. Please use --help to see a list of valid options.\n" -msgstr "Nieprawidłowa opcja. Parametr --help wyświetli listę prawidłowych opcji.\n" - - -#: ../src/dhcp-manager/nm-dhcp-dhclient.c:300 -msgid "# Created by NetworkManager\n" -msgstr "# Utworzony przez program NetworkManager\n" - -#: ../src/dhcp-manager/nm-dhcp-dhclient.c:316 -#, c-format -msgid "" -"# Merged from %s\n" -"\n" -msgstr "" -"# Scalony od %s\n" -"\n" - - -#: ../src/ip6-manager/nm-netlink-listener.c:200 -#, c-format -msgid "unable to allocate netlink handle: %s" -msgstr "nie można przydzielić uchwytu netlink: %s" - -#: ../src/ip6-manager/nm-netlink-listener.c:210 -#, c-format -msgid "unable to connect to netlink: %s" -msgstr "nie można połączyć się z netlink: %s" - -#: ../src/ip6-manager/nm-netlink-listener.c:307 -#, c-format -msgid "unable to join netlink group: %s" -msgstr "nie można dołączyć do grupy netlink: %s" - -#: ../src/dns-manager/nm-dns-manager.c:315 -msgid "NOTE: the libc resolver may not support more than 3 nameservers." -msgstr "UWAGA: obsługa nazw libc nie obsługuje więcej niż 3 serwery nazw." - -#: ../src/dns-manager/nm-dns-manager.c:317 -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 -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" @@ -1604,13 +1605,187 @@ 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" +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" +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" +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:100 ../src/nm-netlink-monitor.c:231 +#: ../src/nm-netlink-monitor.c:653 +#, c-format +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: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" + +#: ../src/nm-netlink-monitor.c:265 +#, c-format +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: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: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: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/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" + +#: ../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:328 +msgid "# Created by NetworkManager\n" +msgstr "# Utworzony przez program NetworkManager\n" + +#: ../src/dhcp-manager/nm-dhcp-dhclient.c:344 +#, c-format +msgid "" +"# Merged from %s\n" +"\n" +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/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 "unsupported DHCP client '%s'" +msgstr "nieobsługiwany klient DHCP \"%s\"" + +#: ../src/logging/nm-logging.c:146 +#, c-format +msgid "Unknown log level '%s'" +msgstr "Nieznany poziom dziennika \"%s\"" + +#: ../src/logging/nm-logging.c:171 +#, c-format +msgid "Unknown log domain '%s'" +msgstr "Nieznana domena dziennika \"%s\"" + +#: ../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/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:3412 +#: ../system-settings/plugins/ifnet/connection_parser.c:49 +msgid "System" +msgstr "Systemowe" From c35a763c17004f406e76de77e344d8f505fe45b9 Mon Sep 17 00:00:00 2001 From: Gabor Kelemen Date: Wed, 6 Oct 2010 15:51:27 -0500 Subject: [PATCH 20/40] po: update Hungarian translation (bgo #631186) --- po/hu.po | 1543 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 1421 insertions(+), 122 deletions(-) diff --git a/po/hu.po b/po/hu.po index f71625495e..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 \n" "Language-Team: Hungarian \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 | uuid | system | user]\n" +" status\n" +" up id | uuid [iface ] [ap ] [--nowait] [--timeout " +"]\n" +" down id | uuid \n" +msgstr "" +"Használat: nmcli con { PARANCS | help }\n" +" PARANCS := { list | status | up | down }\n" +"\n" +" list [id | uuid | system | user]\n" +" status\n" +" up id | uuid [iface ] [ap ] [--" +"nowait] [--timeout ]\n" +" down id | uuid \n" + +#: ../cli/src/connections.c: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 ]\n" +" disconnect iface [--nowait] [--timeout ]\n" +" wifi [list [iface ] [hwaddr ]]\n" +"\n" +msgstr "" +"Használat: nmcli dev { PARANCS | help }\n" +"\n" +" PARANCS := { 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 "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] |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] |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,193 +1484,98 @@ 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 -#, 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:270 -#, 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 -#, c-format -msgid "unable to join netlink group for monitoring link status: %s" -msgstr "" -"nem lehet csatlakozni a netlink csoporthoz a kapcsolat állapotának " -"megfigyelése érdekében: %s" - -#: ../src/nm-netlink-monitor.c:286 -#, 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:558 -#, 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 -#, 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 -msgid "# Created by NetworkManager\n" -msgstr "# Készítette a NetworkManager\n" - -#: ../src/dhcp-manager/nm-dhcp-dhclient.c:310 -#, c-format -msgid "" -"# Merged from %s\n" -"\n" -msgstr "" -"# Összefésülve ebből: %s\n" -"\n" - -#: ../src/ip6-manager/nm-netlink-listener.c:200 -#, c-format -msgid "unable to allocate netlink handle: %s" -msgstr "nem lehet netlink kezelőt lefoglalni: %s" - -#: ../src/ip6-manager/nm-netlink-listener.c:210 -#, c-format -msgid "unable to connect to netlink: %s" -msgstr "nem lehet kapcsolódni a netlinkhez: %s" - -#: ../src/ip6-manager/nm-netlink-listener.c:307 -#, c-format -msgid "unable to join netlink group: %s" -msgstr "nem lehet csatlakozni a netlink csoporthoz: %s" - -#: ../src/dns-manager/nm-dns-manager.c:315 -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/dns-manager/nm-dns-manager.c:317 -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 -#, c-format -msgid "Auto %s" -msgstr "Automatikus %s" - -#: ../system-settings/plugins/ifcfg-rh/reader.c:2406 -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" @@ -491,3 +1614,179 @@ 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: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: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:265 +#, c-format +msgid "unable to enable netlink handle credential passing: %s" +msgstr "" +"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: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:502 +#, c-format +msgid "unable to join netlink group: %s" +msgstr "nem lehet csatlakozni a netlink csoporthoz: %s" + +#: ../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/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/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 Hálózatkezelő\n" + +#: ../src/dhcp-manager/nm-dhcp-dhclient.c:344 +#, c-format +msgid "" +"# Merged from %s\n" +"\n" +msgstr "" +"# Összefésülve ebből: %s\n" +"\n" + +#: ../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 "unsupported DHCP client '%s'" +msgstr "nem támogatott DHCP-kliens („%s”)" + +#: ../src/logging/nm-logging.c:146 +#, c-format +msgid "Unknown log level '%s'" +msgstr "Ismeretlen naplózási szint: „%s”" + +#: ../src/logging/nm-logging.c:171 +#, c-format +msgid "Unknown log domain '%s'" +msgstr "Ismeretlen naplózási tartomány: „%s”" + +#: ../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/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:157 +#, c-format +msgid "Auto %s" +msgstr "Automatikus %s" + +#: ../system-settings/plugins/ifcfg-rh/reader.c:3412 +#: ../system-settings/plugins/ifnet/connection_parser.c:49 +msgid "System" +msgstr "Rendszer" + From 61e86600d5ed2d5e3721074ec68e289c93fe67cc Mon Sep 17 00:00:00 2001 From: Martin Pitt Date: Wed, 6 Oct 2010 17:12:10 -0500 Subject: [PATCH 21/40] dhcp: fix uninitialized variable usage with dhcp3 --- src/dhcp-manager/nm-dhcp-dhclient.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/dhcp-manager/nm-dhcp-dhclient.c b/src/dhcp-manager/nm-dhcp-dhclient.c index 2f25fca98b..091ae2f989 100644 --- a/src/dhcp-manager/nm-dhcp-dhclient.c +++ b/src/dhcp-manager/nm-dhcp-dhclient.c @@ -512,6 +512,8 @@ dhclient_start (NMDHCPClient *client, uuid = nm_dhcp_client_get_uuid (client); ipv6 = nm_dhcp_client_get_ipv6 (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); @@ -521,8 +523,6 @@ dhclient_start (NMDHCPClient *client, g_return_val_if_fail (ip_opt != NULL, -1); #endif - log_domain = ipv6 ? LOGD_DHCP6 : LOGD_DHCP4; - priv->pid_file = g_strdup_printf (LOCALSTATEDIR "/run/dhclient%s-%s.pid", ipv6 ? "6" : "", iface); From febb3d2cb460e28b42fc3abeeaaa5b9fc94fde81 Mon Sep 17 00:00:00 2001 From: Martin Pitt Date: Wed, 6 Oct 2010 17:14:54 -0500 Subject: [PATCH 22/40] system-settings: add timestamp to default auto wired connections (bgo #583756) --- src/system-settings/nm-default-wired-connection.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/system-settings/nm-default-wired-connection.c b/src/system-settings/nm-default-wired-connection.c index 54e00d6273..1cda3d9e23 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, time (NULL), NULL); g_free (id); From 82dd97c4b73ace6067fbe3fa92a3c7eb5a95e89b Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Thu, 7 Oct 2010 00:29:44 -0500 Subject: [PATCH 23/40] policy: ensure stale IP mappings are not left in /etc/hosts (bgo #629020) (rh #630146) NM-added mappings for active IP addresses were not getting properly removed when the address disappeared of NM quit, because the bits of code that determine whether or not /etc/hosts should change were not taking the disappearance of the IP address into account, and were leaving the file unchanged. To fix that, if there is no default IP address, but there are NM-added IP address entries in /etc/hosts, make sure we update /etc/hosts and remove them. --- src/nm-policy-hosts.c | 43 +++++++++++++++++++++++++++++++++++++++++++ src/nm-policy.c | 9 +++++++++ 2 files changed, 52 insertions(+) diff --git a/src/nm-policy-hosts.c b/src/nm-policy-hosts.c index 0403b03725..1b57d4275f 100644 --- a/src/nm-policy-hosts.c +++ b/src/nm-policy-hosts.c @@ -63,6 +63,21 @@ is_local_mapping (const char *str, gboolean ip6, const char *hostname) && nm_policy_hosts_find_token (str, hostname ? hostname : fallback)); } +static gboolean +is_ip4_addr (const char *str) +{ + struct in_addr found; + char buf[INET_ADDRSTRLEN + 2]; + const char *p = str; + guint32 i = 0; + + memset (buf, 0, sizeof (buf)); + while (*p && !isblank (*p) && (i < sizeof (buf))) + buf[i++] = *p++; + + return inet_pton (AF_INET, buf, &found) == 1 ? TRUE : FALSE; +} + static gboolean ip4_addr_matches (const char *str, const char *ip4_addr) { @@ -85,6 +100,21 @@ ip4_addr_matches (const char *str, const char *ip4_addr) return memcmp (&found, &given, sizeof (found)) == 0; } +static gboolean +is_ip6_addr (const char *str) +{ + struct in6_addr found; + char buf[INET6_ADDRSTRLEN + 2]; + const char *p = str; + guint32 i = 0; + + memset (buf, 0, sizeof (buf)); + while (*p && !isblank (*p) && (i < sizeof (buf))) + buf[i++] = *p++; + + return inet_pton (AF_INET6, buf, &found) == 1 ? TRUE : FALSE; +} + static gboolean ip6_addr_matches (const char *str, const char *ip6_addr) { @@ -176,7 +206,14 @@ nm_policy_get_etc_hosts (const char **lines, found_user_host4 = TRUE; host4_before = TRUE; /* Ignore if user added mapping manually */ } + } else if (!ip4_addr && strstr (*line, ADDED_TAG)) { + /* If this is a stale NM-added IPv4 entry we need to remove it, + * so make sure we update /etc/hosts. + */ + if (is_ip4_addr (*line)) + found_host4 = FALSE; } + if (ip6_addr && ip6_addr_matches (*line, ip6_addr)) { found_host6 = TRUE; if (strstr (*line, ADDED_TAG)) { @@ -186,6 +223,12 @@ nm_policy_get_etc_hosts (const char **lines, found_user_host6 = TRUE; host6_before = TRUE; /* Ignore if user added mapping manually */ } + } else if (!ip6_addr && strstr (*line, ADDED_TAG)) { + /* If this is a stale NM-added IPv6 entry we need to remove it, + * so make sure we update /etc/hosts. + */ + if (is_ip6_addr (*line)) + found_host6 = FALSE; } } diff --git a/src/nm-policy.c b/src/nm-policy.c index 3ab4db550c..7382ece145 100644 --- a/src/nm-policy.c +++ b/src/nm-policy.c @@ -1234,6 +1234,15 @@ nm_policy_destroy (NMPolicy *policy) } g_slist_free (policy->dev_signal_ids); + /* Rewrite /etc/hosts on exit to ensure we don't leave stale IP addresses + * lying around. FIXME: this will take out a valid IP address of an + * ethernet device we're leaving active (ie, a connection we can "assume" + * when NM starts again). + */ + policy->default_device4 = NULL; + policy->default_device6 = NULL; + update_system_hostname (policy, NULL, NULL); + g_free (policy->orig_hostname); g_free (policy->cur_hostname); From aeeac548a85c020d3b239824632924f533a2f63c Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Thu, 7 Oct 2010 12:04:41 -0500 Subject: [PATCH 24/40] dns: fix use-after-free in plugin error path --- src/dns-manager/nm-dns-manager.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dns-manager/nm-dns-manager.c b/src/dns-manager/nm-dns-manager.c index 71adbc5263..7a6fbbc9d9 100644 --- a/src/dns-manager/nm-dns-manager.c +++ b/src/dns-manager/nm-dns-manager.c @@ -572,7 +572,7 @@ update_dns (NMDnsManager *self, priv = NM_DNS_MANAGER_GET_PRIVATE (self); - if (iface) { + if (iface && (iface != priv->last_iface)) { g_free (priv->last_iface); priv->last_iface = g_strdup (iface); } From 03517015cc2030cc2bbaaa0b39621e7976a26187 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Thu, 7 Oct 2010 12:09:17 -0500 Subject: [PATCH 25/40] core: check address family, not route family --- src/nm-system.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/nm-system.c b/src/nm-system.c index 0911b82182..7921fec654 100644 --- a/src/nm-system.c +++ b/src/nm-system.c @@ -1254,11 +1254,11 @@ dump_route (struct rtnl_route *route) memset (buf4, 0, sizeof (buf4)); nl = rtnl_route_get_dst (route); if (nl) { - if (rtnl_route_get_family (route) == AF_INET) { + 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 (rtnl_route_get_family (route) == AF_INET6) { + } 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)); From 8502f0c874e5bab3c111f6c5f6185b3fe2b92784 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Thu, 7 Oct 2010 13:52:51 -0500 Subject: [PATCH 26/40] core: fix use-after-free getting user connections G_SLICE debugging uncovered a use-after-free when freeing the batched user connection settings callback list. We don't actually care about the DBusPendingCalls anyway, so just make the list a counter and simplify the code in the process. --- src/nm-manager.c | 55 ++++++++++++++++++++---------------------------- 1 file changed, 23 insertions(+), 32 deletions(-) diff --git a/src/nm-manager.c b/src/nm-manager.c index 591c073125..758a0826bd 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -930,8 +930,7 @@ typedef struct GetSettingsInfo { NMManager *manager; NMConnection *connection; DBusGProxy *proxy; - DBusGProxyCall *call; - GSList **calls; + guint32 *calls; } GetSettingsInfo; static void @@ -943,10 +942,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 */ @@ -1117,20 +1115,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) { @@ -1154,16 +1150,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 @@ -1174,7 +1170,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, @@ -1182,26 +1178,21 @@ 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 @@ -1219,7 +1210,7 @@ user_proxy_destroyed_cb (DBusGProxy *proxy, NMManager *self) 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 From 35b1ed9082eebbcebee1b09792f9e5652f1005d3 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Thu, 7 Oct 2010 14:06:50 -0500 Subject: [PATCH 27/40] dns: actually kill stale dnsmasq process Interpret the return value of kill(2) correctly... --- src/dns-manager/nm-dns-plugin.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dns-manager/nm-dns-plugin.c b/src/dns-manager/nm-dns-plugin.c index d47640b1c3..5766a90d43 100644 --- a/src/dns-manager/nm-dns-plugin.c +++ b/src/dns-manager/nm-dns-plugin.c @@ -106,7 +106,7 @@ kill_existing (const char *progname, const char *pidfile, const char *kill_match goto out; if (strstr (cmdline_contents, kill_match)) { - if (kill (pid, 0)) { + if (kill (pid, 0) == 0) { nm_log_dbg (LOGD_DNS, "Killing stale %s child process %ld", progname, pid); kill (pid, SIGKILL); } From 4a7c77ac9589a6786d7b5318fbaf8696e74436b0 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Thu, 7 Oct 2010 14:07:34 -0500 Subject: [PATCH 28/40] dnsmasq: actually kill stale dnsmasq process Interpret the return value of kill(2) correctly... --- src/dnsmasq-manager/nm-dnsmasq-manager.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dnsmasq-manager/nm-dnsmasq-manager.c b/src/dnsmasq-manager/nm-dnsmasq-manager.c index e6c67a1e31..1dc42fc65d 100644 --- a/src/dnsmasq-manager/nm-dnsmasq-manager.c +++ b/src/dnsmasq-manager/nm-dnsmasq-manager.c @@ -385,7 +385,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); } From ee9ce6027b3fc0cb4aa14442ef8b628b80b726eb Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Thu, 7 Oct 2010 18:08:52 -0500 Subject: [PATCH 29/40] policy: preserve custom hostnames on local-mapping lines (rh #627269) Try to preserve custom hostnames (ie, anything not a localhost* variant, the current hostname, or the previous hostname) when rewriting the 127.0.0.1/::1 localhost mapping lines. --- src/nm-policy-hostname.c | 7 +- src/nm-policy-hosts.c | 157 +++++++++++++++++++++++++++------- src/nm-policy-hosts.h | 2 + src/tests/test-policy-hosts.c | 140 ++++++++++++++++++++++++++---- 4 files changed, 256 insertions(+), 50 deletions(-) diff --git a/src/nm-policy-hostname.c b/src/nm-policy-hostname.c index 0a49f9e2ea..42a2e0f9a4 100644 --- a/src/nm-policy-hostname.c +++ b/src/nm-policy-hostname.c @@ -217,7 +217,7 @@ nm_policy_set_system_hostname (const char *new_hostname, char old_hostname[HOST_NAME_MAX + 1]; int ret = 0; const char *name; - gboolean set_hostname = TRUE, changed = FALSE; + gboolean set_hostname = TRUE, changed = FALSE, old_valid = TRUE; if (new_hostname) g_warn_if_fail (strlen (new_hostname)); @@ -230,11 +230,15 @@ nm_policy_set_system_hostname (const char *new_hostname, if (ret != 0) { nm_log_warn (LOGD_DNS, "couldn't get the system hostname: (%d) %s", errno, strerror (errno)); + old_valid = FALSE; } 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_HOSTNAME4))) set_hostname = FALSE; + + if (old_hostname[0] == '\0') + old_valid = FALSE; } if (set_hostname) { @@ -255,6 +259,7 @@ nm_policy_set_system_hostname (const char *new_hostname, * /etc/hosts at all. */ if (!nm_policy_hosts_update_etc_hosts (name, + old_valid ? old_hostname : NULL, FALLBACK_HOSTNAME4, FALLBACK_HOSTNAME6, ip4_addr, diff --git a/src/nm-policy-hosts.c b/src/nm-policy-hosts.c index 1b57d4275f..ddc828d522 100644 --- a/src/nm-policy-hosts.c +++ b/src/nm-policy-hosts.c @@ -28,6 +28,9 @@ #include "nm-policy-hosts.h" #include "nm-logging.h" +#define IP4_LH "127.0.0.1" +#define IP6_LH "::1" + gboolean nm_policy_hosts_find_token (const char *line, const char *token) { @@ -56,7 +59,7 @@ nm_policy_hosts_find_token (const char *line, const char *token) static gboolean is_local_mapping (const char *str, gboolean ip6, const char *hostname) { - const char *addr = ip6 ? "::1" : "127.0.0.1"; + const char *addr = ip6 ? IP6_LH : IP4_LH; const char *fallback = ip6 ? "localhost6" : "localhost"; return ( !strncmp (str, addr, strlen (addr)) @@ -137,12 +140,71 @@ ip6_addr_matches (const char *str, const char *ip6_addr) return memcmp (&found, &given, sizeof (found)) == 0; } +static char * +get_custom_hostnames (const char *line, + const char *hostname, + const char *old_hostname) +{ + char **items = NULL, **iter; + guint start = 0; + GString *str = NULL; + char *custom = NULL; + + g_return_val_if_fail (line != NULL, NULL); + + if (!strncmp (line, IP4_LH, strlen (IP4_LH))) + start = strlen (IP4_LH); + else if (!strncmp (line, IP6_LH, strlen (IP6_LH))) + start = strlen (IP6_LH); + + g_return_val_if_fail (start > 0, NULL); + + /* Split the line into tokens */ + items = g_strsplit_set (line + start, " \t", -1); + if (!items) + return NULL; + + str = g_string_sized_new (50); + /* Ignore current & old hostnames, and localhost-anything */ + for (iter = items; iter && *iter; iter++) { + if (*iter[0] == '\0') + continue; + if (hostname && !strcmp (*iter, hostname)) + continue; + if (old_hostname && !strcmp (*iter, old_hostname)) + continue; + if (!strcmp (*iter, "localhost")) + continue; + if (!strcmp (*iter, "localhost6")) + continue; + if (!strcmp (*iter, "localhost.localdomain")) + continue; + if (!strcmp (*iter, "localhost4.localdomain4")) + continue; + if (!strcmp (*iter, "localhost6.localdomain6")) + continue; + + /* Found a custom hostname */ + g_string_append_c (str, '\t'); + g_string_append (str, *iter); + } + + if (str->len) + custom = g_string_free (str, FALSE); + else + g_string_free (str, TRUE); + + g_strfreev (items); + return custom; +} + #define ADDED_TAG "# Added by NetworkManager" GString * nm_policy_get_etc_hosts (const char **lines, gsize existing_len, const char *hostname, + const char *old_hostname, const char *fallback_hostname4, const char *fallback_hostname6, const char *ip4_addr, @@ -163,7 +225,10 @@ nm_policy_get_etc_hosts (const char **lines, gboolean hostname6_is_fallback; gboolean host4_before = FALSE; gboolean host6_before = FALSE; + gboolean no_stale = TRUE; char *short_hostname = NULL; + char *custom4 = NULL; + char *custom6 = NULL; g_return_val_if_fail (lines != NULL, FALSE); g_return_val_if_fail (hostname != NULL, FALSE); @@ -181,21 +246,20 @@ nm_policy_get_etc_hosts (const char **lines, * If all these things exist we don't need to bother updating the file. */ - if (!ip4_addr) { - found_host4 = TRUE; + if (!ip4_addr) host4_before = TRUE; - } - if (!ip6_addr) { - found_host6 = TRUE; + if (!ip6_addr) host6_before = TRUE; - } /* Look for the four cases from above */ for (line = lines; lines && *line; line++) { - if (!strlen (*line) || (*line[0] == '#')) + gboolean found_hostname = FALSE; + + if ((*line[0] == '\0') || (*line[0] == '#')) continue; - if (nm_policy_hosts_find_token (*line, hostname)) { + found_hostname = nm_policy_hosts_find_token (*line, hostname); + if (found_hostname) { /* Found the current hostname on this line */ if (ip4_addr && ip4_addr_matches (*line, ip4_addr)) { found_host4 = TRUE; @@ -211,7 +275,7 @@ nm_policy_get_etc_hosts (const char **lines, * so make sure we update /etc/hosts. */ if (is_ip4_addr (*line)) - found_host4 = FALSE; + no_stale = FALSE; } if (ip6_addr && ip6_addr_matches (*line, ip6_addr)) { @@ -228,26 +292,54 @@ nm_policy_get_etc_hosts (const char **lines, * so make sure we update /etc/hosts. */ if (is_ip6_addr (*line)) - found_host6 = FALSE; + no_stale = FALSE; } } if (is_local_mapping (*line, FALSE, "localhost")) { /* a 127.0.0.1 line containing 'localhost' */ found_localhost4 = TRUE; + custom4 = get_custom_hostnames (*line, hostname, old_hostname); + if (!ip4_addr) { + /* If there's no IP-specific mapping for the current hostname + * but that hostname is present on in the local mapping line, + * we've found our IPv4 hostname mapping. If the hostname is + * the fallback *IPv6* hostname it's not going to show up in + * the IPv4 local mapping though, so fake it. + */ + if (hostname6_is_fallback || found_hostname) + found_host4 = TRUE; + } } else if (is_local_mapping (*line, TRUE, "localhost6")) { /* a ::1 line containing 'localhost6' */ found_localhost6 = TRUE; + custom6 = get_custom_hostnames (*line, hostname, old_hostname); + if (!ip6_addr) { + /* If there's no IP-specific mapping for the current hostname + * but that hostname is present on in the local mapping line, + * we've found our IPv6 hostname mapping. If the hostname is + * the fallback *IPv4* hostname it's not going to show up in + * the IPv6 local mapping though, so fake it. + */ + if (hostname4_is_fallback || found_hostname) + found_host6 = TRUE; + } } - if (found_localhost4 && found_host4 && found_localhost6 && found_host6 && host4_before && host6_before) - return NULL; /* No update required */ + if ( found_localhost4 + && found_host4 + && found_localhost6 + && found_host6 + && host4_before + && host6_before + && no_stale) + goto out; /* No update required */ } contents = g_string_sized_new (existing_len ? existing_len + 100 : 200); if (!contents) { g_set_error_literal (error, 0, 0, "not enough memory"); - return NULL; + goto out; } /* Find the short hostname, like 'foo' from 'foo.bar.baz'; we want to @@ -277,8 +369,6 @@ nm_policy_get_etc_hosts (const char **lines, * 'localhost6'. */ 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; @@ -311,7 +401,10 @@ nm_policy_get_etc_hosts (const char **lines, if (short_hostname) g_string_append_printf (contents, "\t%s", short_hostname); } - g_string_append_printf (contents, "\t%s\tlocalhost\n", fallback_hostname4); + g_string_append_printf (contents, "\t%s\tlocalhost", fallback_hostname4); + if (custom4) + g_string_append (contents, custom4); + g_string_append_c (contents, '\n'); /* IPv6 localhost line */ g_string_append (contents, "::1"); @@ -320,26 +413,23 @@ nm_policy_get_etc_hosts (const char **lines, if (short_hostname) g_string_append_printf (contents, "\t%s", short_hostname); } - g_string_append_printf (contents, "\t%s\tlocalhost6\n", fallback_hostname6); + g_string_append_printf (contents, "\t%s\tlocalhost6", fallback_hostname6); + if (custom6) + g_string_append (contents, custom6); + g_string_append_c (contents, '\n'); added = TRUE; } /* Don't add the original line if it is a localhost mapping */ - if (is_local_mapping (*line, FALSE, "localhost")) - add_line = FALSE; - else if (is_local_mapping (*line, FALSE, fallback_hostname4)) - add_line = FALSE; - else if (is_local_mapping (*line, FALSE, hostname)) - add_line = FALSE; - else if (is_local_mapping (*line, TRUE, "localhost6")) - add_line = FALSE; - else if (is_local_mapping (*line, TRUE, fallback_hostname6)) - add_line = FALSE; - else if (is_local_mapping (*line, TRUE, hostname)) - add_line = FALSE; + if ( !is_local_mapping (*line, FALSE, "localhost") + && !is_local_mapping (*line, FALSE, fallback_hostname4) + && !is_local_mapping (*line, FALSE, hostname) + && !is_local_mapping (*line, TRUE, "localhost6") + && !is_local_mapping (*line, TRUE, fallback_hostname6) + && !is_local_mapping (*line, TRUE, hostname) + && !strstr (*line, ADDED_TAG)) { - if (add_line && !strstr (*line, ADDED_TAG)) { g_string_append (contents, *line); /* Only append the new line if this isn't the last line in the file */ if (*(line+1)) @@ -370,12 +460,16 @@ nm_policy_get_etc_hosts (const char **lines, g_string_append_printf (contents, "::1\t%s\tlocalhost6\n", fallback_hostname6); } +out: + g_free (custom4); + g_free (custom6); g_free (short_hostname); return contents; } gboolean nm_policy_hosts_update_etc_hosts (const char *hostname, + const char *old_hostname, const char *fallback_hostname4, const char *fallback_hostname6, const char *ip4_addr, @@ -405,6 +499,7 @@ nm_policy_hosts_update_etc_hosts (const char *hostname, new_contents = nm_policy_get_etc_hosts ((const char **) lines, contents_len, hostname, + old_hostname, fallback_hostname4, fallback_hostname6, ip4_addr, diff --git a/src/nm-policy-hosts.h b/src/nm-policy-hosts.h index 76288bf56b..ebaaf0fd41 100644 --- a/src/nm-policy-hosts.h +++ b/src/nm-policy-hosts.h @@ -24,6 +24,7 @@ #include gboolean nm_policy_hosts_update_etc_hosts (const char *hostname, + const char *old_hostname, const char *fallback_hostname4, const char *fallback_hostname6, const char *ip4_addr, @@ -36,6 +37,7 @@ 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 *old_hostname, const char *fallback_hostname4, const char *fallback_hostname6, const char *ip4_addr, diff --git a/src/tests/test-policy-hosts.c b/src/tests/test-policy-hosts.c index e6775f35e8..3c27af2c2f 100644 --- a/src/tests/test-policy-hosts.c +++ b/src/tests/test-policy-hosts.c @@ -26,6 +26,8 @@ #define FALLBACK_HOSTNAME4 "localhost.localdomain" #define FALLBACK_HOSTNAME6 "localhost6.localdomain6" +#define DEBUG 0 + static void test_generic (const char *before, const char *after, @@ -43,6 +45,7 @@ test_generic (const char *before, newc = nm_policy_get_etc_hosts ((const char **) lines, strlen (before), hostname, + NULL, FALLBACK_HOSTNAME4, FALLBACK_HOSTNAME6, ip4_addr, @@ -56,11 +59,11 @@ test_generic (const char *before, g_clear_error (&error); } else if (after == NULL) { /* No change to /etc/hosts required */ -#if 0 +#if DEBUG if (newc != NULL) { g_message ("\n- NEW ---------------------------------\n" "%s" - "- EXPECTED NONE -------------------------\n", + "+ EXPECTED NONE +++++++++++++++++++++++++\n", newc->str); } #endif @@ -70,10 +73,10 @@ test_generic (const char *before, g_assert (newc != NULL); g_assert (error == NULL); -#if 0 +#if DEBUG g_message ("\n- NEW ---------------------------------\n" "%s" - "- EXPECTED ------------------------------\n" + "+ EXPECTED ++++++++++++++++++++++++++++++\n" "%s" "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", newc->str, after); @@ -167,10 +170,17 @@ static const char *named_generic_before = \ "::1 localhost6.localdomain6 localhost6\n" "127.0.0.1 lcmd.us.intellitxt.com\n"; +static const char *named_generic_after = \ + "# Do not remove the following line, or various programs\n" + "# that require network functionality will fail.\n" + "127.0.0.1 playboy localhost.localdomain localhost\n" + "::1 playboy 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", NULL, NULL, FALSE); + test_generic (named_generic_before, named_generic_after, "playboy", NULL, NULL, FALSE); } /*******************************************/ @@ -609,24 +619,114 @@ static const char *long_before = \ "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"; + "127.0.0.1 ads.chumcity.com\n"; +static const char *long_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 comet localhost6.localdomain6 localhost6\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"; static void test_hosts_long (void) { - test_generic (long_before, NULL, "comet", NULL, NULL, FALSE); + test_generic (long_before, long_after, "comet", NULL, NULL, FALSE); +} + +/*******************************************/ + +static const char *custom4_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 pintglass\n" + "::1 localhost6.localdomain6 localhost6\n"; + +static const char *custom4_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 pintglass\n" + "::1 comet localhost6.localdomain6 localhost6\n"; + +static void +test_hosts_custom4 (void) +{ + test_generic (custom4_before, custom4_after, "comet", NULL, NULL, FALSE); +} + +/*******************************************/ + +static const char *custom6_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 pintglass\n"; + +static const char *custom6_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 comet localhost6.localdomain6 localhost6 pintglass\n"; + +static void +test_hosts_custom6 (void) +{ + test_generic (custom6_before, custom6_after, "comet", NULL, NULL, FALSE); +} + +/*******************************************/ + +static const char *custom46_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 shotglass\n" + "::1 localhost6.localdomain6 localhost6 pintglass\n"; + +static const char *custom46_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 shotglass\n" + "::1 comet localhost6.localdomain6 localhost6 pintglass\n"; + +static void +test_hosts_custom46 (void) +{ + test_generic (custom46_before, custom46_after, "comet", NULL, NULL, FALSE); +} + +/*******************************************/ + +static const char *custom46_mixed_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 shotglass\n" + "::1 localhost6.localdomain6 localhost6 pintglass\n"; + +static const char *custom46_mixed_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 shotglass\n" + "::1 comet localhost6.localdomain6 localhost6 pintglass\n"; + +static void +test_hosts_custom46_mixed (void) +{ + test_generic (custom46_mixed_before, custom46_mixed_after, "comet", NULL, NULL, FALSE); } /*******************************************/ @@ -712,6 +812,10 @@ int main (int argc, char **argv) g_test_suite_add (suite, TESTCASE (test_hosts_no_host4, NULL)); g_test_suite_add (suite, TESTCASE (test_hosts_no_host6, NULL)); g_test_suite_add (suite, TESTCASE (test_hosts_long, NULL)); + g_test_suite_add (suite, TESTCASE (test_hosts_custom4, NULL)); + g_test_suite_add (suite, TESTCASE (test_hosts_custom6, NULL)); + g_test_suite_add (suite, TESTCASE (test_hosts_custom46, NULL)); + g_test_suite_add (suite, TESTCASE (test_hosts_custom46_mixed, NULL)); return g_test_run (); } From ad3cb6d8328f49bd1c7a21f344a26f12db4abd36 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Thu, 7 Oct 2010 18:14:29 -0500 Subject: [PATCH 30/40] policy: add testcases for removing stale hosts mappings (bgo #629020) (rh #630146) --- src/tests/test-policy-hosts.c | 67 +++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/src/tests/test-policy-hosts.c b/src/tests/test-policy-hosts.c index 3c27af2c2f..8865c4264e 100644 --- a/src/tests/test-policy-hosts.c +++ b/src/tests/test-policy-hosts.c @@ -731,6 +731,70 @@ test_hosts_custom46_mixed (void) /*******************************************/ +static const char *stale4_removed_before = \ + "# Do not remove the following line, or various programs\n" + "# that require network functionality will fail.\n" + "1.2.3.4 comet # Added by NetworkManager\n" + "127.0.0.1 localhost.localdomain localhost\n" + "::1 comet localhost6.localdomain6 localhost6\n"; + +static const char *stale4_removed_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 comet localhost6.localdomain6 localhost6\n"; + +static void +test_hosts_stale4_removed (void) +{ + test_generic (stale4_removed_before, stale4_removed_after, "comet", NULL, NULL, FALSE); +} + +/*******************************************/ + +static const char *stale6_removed_before = \ + "# Do not remove the following line, or various programs\n" + "# that require network functionality will fail.\n" + "3001:abba::3234 comet # Added by NetworkManager\n" + "127.0.0.1 comet localhost.localdomain localhost\n" + "::1 localhost6.localdomain6 localhost6\n"; + +static const char *stale6_removed_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 comet localhost6.localdomain6 localhost6\n"; + +static void +test_hosts_stale6_removed (void) +{ + test_generic (stale6_removed_before, stale6_removed_after, "comet", NULL, NULL, FALSE); +} + +/*******************************************/ + +static const char *stale46_removed_before = \ + "# Do not remove the following line, or various programs\n" + "# that require network functionality will fail.\n" + "1.2.3.4 comet # Added by NetworkManager\n" + "3001:abba::3234 comet # Added by NetworkManager\n" + "127.0.0.1 localhost.localdomain localhost\n" + "::1 localhost6.localdomain6 localhost6\n"; + +static const char *stale46_removed_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 comet localhost6.localdomain6 localhost6\n"; + +static void +test_hosts_stale46_removed (void) +{ + test_generic (stale46_removed_before, stale46_removed_after, "comet", NULL, NULL, FALSE); +} + +/*******************************************/ + typedef struct { const char *line; const char *token; @@ -816,6 +880,9 @@ int main (int argc, char **argv) g_test_suite_add (suite, TESTCASE (test_hosts_custom6, NULL)); g_test_suite_add (suite, TESTCASE (test_hosts_custom46, NULL)); g_test_suite_add (suite, TESTCASE (test_hosts_custom46_mixed, NULL)); + g_test_suite_add (suite, TESTCASE (test_hosts_stale4_removed, NULL)); + g_test_suite_add (suite, TESTCASE (test_hosts_stale6_removed, NULL)); + g_test_suite_add (suite, TESTCASE (test_hosts_stale46_removed, NULL)); return g_test_run (); } From bbf3f12d7b2c79c49d87d41e6cf7b65ac7782071 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Thu, 7 Oct 2010 18:24:59 -0500 Subject: [PATCH 31/40] policy: prevent hostname duplication in /etc/hosts --- src/nm-policy-hosts.c | 48 ++++++++++++++++++++++++------------------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/src/nm-policy-hosts.c b/src/nm-policy-hosts.c index ddc828d522..a6bb083f24 100644 --- a/src/nm-policy-hosts.c +++ b/src/nm-policy-hosts.c @@ -143,7 +143,9 @@ ip6_addr_matches (const char *str, const char *ip6_addr) static char * get_custom_hostnames (const char *line, const char *hostname, - const char *old_hostname) + const char *old_hostname, + const char *short_hostname, + const char *fallback_hostname) { char **items = NULL, **iter; guint start = 0; @@ -173,6 +175,10 @@ get_custom_hostnames (const char *line, continue; if (old_hostname && !strcmp (*iter, old_hostname)) continue; + if (short_hostname && !strcmp (*iter, short_hostname)) + continue; + if (fallback_hostname && !strcmp (*iter, fallback_hostname)) + continue; if (!strcmp (*iter, "localhost")) continue; if (!strcmp (*iter, "localhost6")) @@ -236,6 +242,24 @@ nm_policy_get_etc_hosts (const char **lines, hostname4_is_fallback = !strcmp (hostname, fallback_hostname4); hostname6_is_fallback = !strcmp (hostname, fallback_hostname6); + /* Find the short hostname, like 'foo' from 'foo.bar.baz'; we want to + * make sure that the entries we add for this host also include the short + * hostname too so that if the resolver does not answer queries for the + * machine's actual hostname/domain, that stuff like 'ping foo' still works. + */ + if (!hostname4_is_fallback || !hostname6_is_fallback) { + char *dot; + + short_hostname = g_strdup (hostname); + dot = strchr (short_hostname, '.'); + if (dot && *(dot+1)) + *dot = '\0'; + else { + g_free (short_hostname); + short_hostname = NULL; + } + } + /* We need the following in /etc/hosts: * * 1) current hostname mapped to current IPv4 addresses if IPv4 is active @@ -299,7 +323,7 @@ nm_policy_get_etc_hosts (const char **lines, if (is_local_mapping (*line, FALSE, "localhost")) { /* a 127.0.0.1 line containing 'localhost' */ found_localhost4 = TRUE; - custom4 = get_custom_hostnames (*line, hostname, old_hostname); + custom4 = get_custom_hostnames (*line, hostname, old_hostname, short_hostname, fallback_hostname4); if (!ip4_addr) { /* If there's no IP-specific mapping for the current hostname * but that hostname is present on in the local mapping line, @@ -313,7 +337,7 @@ nm_policy_get_etc_hosts (const char **lines, } else if (is_local_mapping (*line, TRUE, "localhost6")) { /* a ::1 line containing 'localhost6' */ found_localhost6 = TRUE; - custom6 = get_custom_hostnames (*line, hostname, old_hostname); + custom6 = get_custom_hostnames (*line, hostname, old_hostname, short_hostname, fallback_hostname6); if (!ip6_addr) { /* If there's no IP-specific mapping for the current hostname * but that hostname is present on in the local mapping line, @@ -342,24 +366,6 @@ nm_policy_get_etc_hosts (const char **lines, goto out; } - /* Find the short hostname, like 'foo' from 'foo.bar.baz'; we want to - * make sure that the entries we add for this host also include the short - * hostname too so that if the resolver does not answer queries for the - * machine's actual hostname/domain, that stuff like 'ping foo' still works. - */ - if (!hostname4_is_fallback || !hostname6_is_fallback) { - char *dot; - - short_hostname = g_strdup (hostname); - dot = strchr (short_hostname, '.'); - if (dot && *(dot+1)) - *dot = '\0'; - else { - g_free (short_hostname); - short_hostname = NULL; - } - } - /* Construct the new hosts file; replace any 127.0.0.1/::1 entry that is * at the beginning of the file or right after initial comments and contains * the string 'localhost' (for IPv4) or 'localhost6' (for IPv6). If there From 9ee77769afbd2cb6f9d461095ce0de31f4c68dac Mon Sep 17 00:00:00 2001 From: cee1 Date: Fri, 8 Oct 2010 16:43:16 -0500 Subject: [PATCH 32/40] trivial: add missing includes --- libnm-util/crypto.c | 1 + libnm-util/nm-setting-wireless.c | 1 + 2 files changed, 2 insertions(+) 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 #include +#include #include #include #include diff --git a/libnm-util/nm-setting-wireless.c b/libnm-util/nm-setting-wireless.c index 99af8f2a34..ec7d53ad77 100644 --- a/libnm-util/nm-setting-wireless.c +++ b/libnm-util/nm-setting-wireless.c @@ -24,6 +24,7 @@ */ #include +#include #include #include From be97e7f10498d49b7632cbcdfa866bcdf47e174e Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Fri, 8 Oct 2010 22:45:35 -0500 Subject: [PATCH 33/40] build: include for kill(2), isblank(3), and isascii(3) config.h defines _GNU_SOURCE, which in turn defines the bits necessary for kill, isblank, and isascii. So wherever we use those, we need to make sure config.h is included. --- libnm-util/nm-setting-wireless-security.c | 3 ++- src/dhcp-manager/nm-dhcp-client.c | 1 + src/dns-manager/nm-dns-bind.c | 1 + src/dns-manager/nm-dns-dnsmasq.c | 1 + src/dns-manager/nm-dns-plugin.c | 1 + src/dnsmasq-manager/nm-dnsmasq-manager.c | 1 + src/nm-device.c | 1 + src/nm-policy-hosts.c | 1 + src/nm-policy.c | 1 + src/ppp-manager/nm-ppp-manager.c | 1 + src/vpn-manager/nm-vpn-service.c | 1 + system-settings/plugins/ifcfg-rh/reader.c | 1 + system-settings/plugins/ifnet/net_utils.c | 1 + 13 files changed, 14 insertions(+), 1 deletion(-) 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 #include #include #include diff --git a/src/dhcp-manager/nm-dhcp-client.c b/src/dhcp-manager/nm-dhcp-client.c index 1d50d4221b..28b2c78fe2 100644 --- a/src/dhcp-manager/nm-dhcp-client.c +++ b/src/dhcp-manager/nm-dhcp-client.c @@ -17,6 +17,7 @@ * */ +#include #include #include #include diff --git a/src/dns-manager/nm-dns-bind.c b/src/dns-manager/nm-dns-bind.c index 2e1ec67dec..9e3fc1739e 100644 --- a/src/dns-manager/nm-dns-bind.c +++ b/src/dns-manager/nm-dns-bind.c @@ -18,6 +18,7 @@ * */ +#include #include #include #include diff --git a/src/dns-manager/nm-dns-dnsmasq.c b/src/dns-manager/nm-dns-dnsmasq.c index 254e2ffbb6..41c8e2a642 100644 --- a/src/dns-manager/nm-dns-dnsmasq.c +++ b/src/dns-manager/nm-dns-dnsmasq.c @@ -18,6 +18,7 @@ * */ +#include #include #include #include diff --git a/src/dns-manager/nm-dns-plugin.c b/src/dns-manager/nm-dns-plugin.c index 5766a90d43..f7d65a529b 100644 --- a/src/dns-manager/nm-dns-plugin.c +++ b/src/dns-manager/nm-dns-plugin.c @@ -17,6 +17,7 @@ * */ +#include #include #include #include diff --git a/src/dnsmasq-manager/nm-dnsmasq-manager.c b/src/dnsmasq-manager/nm-dnsmasq-manager.c index 1dc42fc65d..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 #include #include #include diff --git a/src/nm-device.c b/src/nm-device.c index 6b12471adc..e8f0b206ca 100644 --- a/src/nm-device.c +++ b/src/nm-device.c @@ -19,6 +19,7 @@ * Copyright (C) 2006 - 2008 Novell, Inc. */ +#include #include #include #include diff --git a/src/nm-policy-hosts.c b/src/nm-policy-hosts.c index a6bb083f24..7f9cff8074 100644 --- a/src/nm-policy-hosts.c +++ b/src/nm-policy-hosts.c @@ -18,6 +18,7 @@ * Copyright (C) 2004 - 2010 Red Hat, Inc. */ +#include #include #include #include diff --git a/src/nm-policy.c b/src/nm-policy.c index 7382ece145..e8a18d0262 100644 --- a/src/nm-policy.c +++ b/src/nm-policy.c @@ -19,6 +19,7 @@ * Copyright (C) 2007 - 2008 Novell, Inc. */ +#include #include #include #include diff --git a/src/ppp-manager/nm-ppp-manager.c b/src/ppp-manager/nm-ppp-manager.c index 148ad2cf63..efa660b03f 100644 --- a/src/ppp-manager/nm-ppp-manager.c +++ b/src/ppp-manager/nm-ppp-manager.c @@ -19,6 +19,7 @@ * Copyright (C) 2008 - 2010 Red Hat, Inc. */ +#include #include #include #include diff --git a/src/vpn-manager/nm-vpn-service.c b/src/vpn-manager/nm-vpn-service.c index 37bd75d4eb..3d44d9004b 100644 --- a/src/vpn-manager/nm-vpn-service.c +++ b/src/vpn-manager/nm-vpn-service.c @@ -19,6 +19,7 @@ * Copyright (C) 2005 - 2008 Novell, Inc. */ +#include #include #include #include diff --git a/system-settings/plugins/ifcfg-rh/reader.c b/system-settings/plugins/ifcfg-rh/reader.c index 9aefa9c5e5..f25acc892d 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 #include #include #include diff --git a/system-settings/plugins/ifnet/net_utils.c b/system-settings/plugins/ifnet/net_utils.c index 8f1b81b0b3..8a541979d8 100644 --- a/system-settings/plugins/ifnet/net_utils.c +++ b/system-settings/plugins/ifnet/net_utils.c @@ -19,6 +19,7 @@ * Copyright (C) 1999-2010 Gentoo Foundation, Inc. */ +#include #include #include #include From d40c81b06a1f947b1b9a2d727683a31bfb10bebc Mon Sep 17 00:00:00 2001 From: Alex Vogt Date: Fri, 8 Oct 2010 23:03:10 -0500 Subject: [PATCH 34/40] linexa: add basic Linexa support --- configure.ac | 12 +++++- initscript/Makefile.am | 3 ++ initscript/linexa/Makefile.am | 6 +++ initscript/linexa/networkmanager.in | 59 ++++++++++++++++++++++++++ src/backends/Makefile.am | 4 ++ src/backends/NetworkManagerLinexa.c | 66 +++++++++++++++++++++++++++++ 6 files changed, 148 insertions(+), 2 deletions(-) create mode 100644 initscript/linexa/Makefile.am create mode 100644 initscript/linexa/networkmanager.in create mode 100644 src/backends/NetworkManagerLinexa.c diff --git a/configure.ac b/configure.ac index 568359706f..e66a1f4903 100644 --- a/configure.ac +++ b/configure.ac @@ -84,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 or linexa])) 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") @@ -96,6 +96,7 @@ 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") if test "z$with_distro" = "z"; then with_distro=`lsb_release -is` fi @@ -107,7 +108,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) ;; *) echo "Your distribution (${with_distro}) is not yet supported! (patches welcome)" exit 1 @@ -165,6 +166,11 @@ 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 + dnl dnl Distribution version string dnl @@ -543,6 +549,8 @@ 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 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/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 +# [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/src/backends/Makefile.am b/src/backends/Makefile.am index b35fafd72a..036dc6de38 100644 --- a/src/backends/Makefile.am +++ b/src/backends/Makefile.am @@ -53,6 +53,10 @@ if TARGET_PARDUS libnmbackend_la_SOURCES += NetworkManagerPardus.c endif +if TARGET_LINEXA +libnmbackend_la_SOURCES += NetworkManagerLinexa.c +endif + libnmbackend_la_LIBADD += \ $(top_builddir)/src/logging/libnm-logging.la \ $(DBUS_LIBS) \ 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 + * + * Heavily based on NetworkManagerRedhat.c by Dan Williams + * + * 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 +#endif + +#include +#include +#include + +#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"); + } +} + + From 5858c6103e2d79e864f3cbb43601ec3dff7c0a74 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Mon, 11 Oct 2010 20:27:51 -0500 Subject: [PATCH 35/40] supplicant: make sure we remove the right interface It shouldn't ever happen that two interface objects for the same network interface are active at the same time, but make sure we yell if it does. --- src/supplicant-manager/nm-supplicant-manager.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/supplicant-manager/nm-supplicant-manager.c b/src/supplicant-manager/nm-supplicant-manager.c index c139ec6fef..35fbdb340d 100644 --- a/src/supplicant-manager/nm-supplicant-manager.c +++ b/src/supplicant-manager/nm-supplicant-manager.c @@ -88,8 +88,13 @@ nm_supplicant_manager_iface_release (NMSupplicantManager *self, g_return_if_fail (NM_IS_SUPPLICANT_MANAGER (self)); g_return_if_fail (NM_IS_SUPPLICANT_INTERFACE (iface)); + ifname = nm_supplicant_interface_get_ifname (iface); + g_assert (ifname); + priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (self); + g_return_if_fail (g_hash_table_lookup (priv->ifaces, ifname) == iface); + /* Ask wpa_supplicant to remove this interface */ op = nm_supplicant_interface_get_object_path (iface); if (priv->running && priv->proxy && op) { @@ -98,8 +103,6 @@ nm_supplicant_manager_iface_release (NMSupplicantManager *self, G_TYPE_INVALID); } - ifname = nm_supplicant_interface_get_ifname (iface); - g_assert (ifname); g_hash_table_remove (priv->ifaces, ifname); } From 48e37de3a4de76a4146d4a716c315031de658e4a Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Mon, 11 Oct 2010 20:30:40 -0500 Subject: [PATCH 36/40] supplicant: prevent a race condition due to D-Bus activation interface_add() could get called from two places: by the wifi/eth device class when activating (which if the supplicant isn't yet running will D-Bus activate it) and from the NameOwnerChanged handler for the wpa_supplicant dbus service smgr_running_cb(). So if the supplicant wasn't running, nm_supplicant_interface_new() would call interface_add() to bring the supplicant to life via activation, then go on and create priv->iface_proxy. When the supplicant appeared and D-Bus sent the NameOwnerChanged, smgr_running_cb() would also call interface_add(), creating a second priv->iface_proxy. The first one got lost and lived after its parent NMSupplicantInterface was killed, and could still respond to signals over the bus. Prevent that by adding another state, STARTING, that indicates that we've already started talking to the supplicant. Also be extra paranoid about disconnecting signal handlers on the proxy. --- .../nm-supplicant-interface.c | 51 +++++++++++++++---- .../nm-supplicant-interface.h | 1 + 2 files changed, 42 insertions(+), 10 deletions(-) diff --git a/src/supplicant-manager/nm-supplicant-interface.c b/src/supplicant-manager/nm-supplicant-interface.c index 20cce6de5c..415c46d6a3 100644 --- a/src/supplicant-manager/nm-supplicant-interface.c +++ b/src/supplicant-manager/nm-supplicant-interface.c @@ -40,8 +40,17 @@ #define WPAS_ERROR_EXISTS_ERROR WPAS_DBUS_INTERFACE ".ExistsError" -G_DEFINE_TYPE (NMSupplicantInterface, nm_supplicant_interface, G_TYPE_OBJECT) +static void wpas_iface_handle_state_change (DBusGProxy *proxy, + const char *str_new_state, + const char *str_old_state, + gpointer user_data); +static void wpas_iface_handle_scanning (DBusGProxy *proxy, + gboolean scanning, + gpointer user_data); + + +G_DEFINE_TYPE (NMSupplicantInterface, nm_supplicant_interface, G_TYPE_OBJECT) #define NM_SUPPLICANT_INTERFACE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \ NM_TYPE_SUPPLICANT_INTERFACE, \ @@ -362,6 +371,23 @@ set_state (NMSupplicantInterface *self, guint32 new_state) g_signal_handler_disconnect (priv->smgr, priv->smgr_running_id); priv->smgr_running_id = 0; } + + if (priv->iface_proxy) { + dbus_g_proxy_disconnect_signal (priv->iface_proxy, + "StateChange", + G_CALLBACK (wpas_iface_handle_state_change), + self); + + dbus_g_proxy_disconnect_signal (priv->iface_proxy, + "ScanResultsAvailable", + G_CALLBACK (wpas_iface_query_scan_results), + self); + + dbus_g_proxy_disconnect_signal (priv->iface_proxy, + "Scanning", + G_CALLBACK (wpas_iface_handle_scanning), + self); + } } priv->state = new_state; @@ -584,7 +610,7 @@ interface_add_cb (DBusGProxy *proxy, } static void -interface_add (NMSupplicantInterface * self, gboolean is_wireless) +interface_add (NMSupplicantInterface *self, gboolean is_wireless) { NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self); DBusGProxyCall *call; @@ -597,6 +623,9 @@ interface_add (NMSupplicantInterface * self, gboolean is_wireless) nm_log_dbg (LOGD_SUPPLICANT, "(%s): adding interface to supplicant", priv->dev); + /* Move to starting to prevent double-calls of interface_add() */ + set_state (self, NM_SUPPLICANT_INTERFACE_STATE_STARTING); + /* 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. @@ -1010,6 +1039,8 @@ nm_supplicant_interface_state_to_string (guint32 state) switch (state) { case NM_SUPPLICANT_INTERFACE_STATE_INIT: return "init"; + case NM_SUPPLICANT_INTERFACE_STATE_STARTING: + return "starting"; case NM_SUPPLICANT_INTERFACE_STATE_READY: return "ready"; case NM_SUPPLICANT_INTERFACE_STATE_DISCONNECTED: @@ -1158,6 +1189,13 @@ dispose (GObject *object) } 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->iface_proxy) g_object_unref (priv->iface_proxy); @@ -1178,13 +1216,6 @@ dispose (GObject *object) 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); @@ -1212,7 +1243,7 @@ nm_supplicant_interface_class_init (NMSupplicantInterfaceClass *klass) g_object_class_install_property (object_class, PROP_STATE, g_param_spec_uint ("state", "State", - "State of the supplicant interface; INIT, READY, or DOWN", + "State of the supplicant interface", NM_SUPPLICANT_INTERFACE_STATE_INIT, NM_SUPPLICANT_INTERFACE_STATE_LAST - 1, NM_SUPPLICANT_INTERFACE_STATE_INIT, diff --git a/src/supplicant-manager/nm-supplicant-interface.h b/src/supplicant-manager/nm-supplicant-interface.h index d6e4a55969..8c51caa1d9 100644 --- a/src/supplicant-manager/nm-supplicant-interface.h +++ b/src/supplicant-manager/nm-supplicant-interface.h @@ -32,6 +32,7 @@ */ 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, From 39e111e5ebbd3f70c41e8d901bab4a68ca171788 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Mon, 11 Oct 2010 20:35:54 -0500 Subject: [PATCH 37/40] supplicant: ignore unknown wpa_supplicant states Don't treat them as DISCONNECTED. --- .../nm-supplicant-interface.c | 36 +++++++++++-------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/src/supplicant-manager/nm-supplicant-interface.c b/src/supplicant-manager/nm-supplicant-interface.c index 415c46d6a3..91da8c6a14 100644 --- a/src/supplicant-manager/nm-supplicant-interface.c +++ b/src/supplicant-manager/nm-supplicant-interface.c @@ -318,29 +318,27 @@ wpas_iface_query_scan_results (DBusGProxy *proxy, gpointer user_data) } } -static guint32 +static int wpas_state_string_to_enum (const char *str_state) { - guint32 enum_state = NM_SUPPLICANT_INTERFACE_STATE_DISCONNECTED; - if (!strcmp (str_state, "DISCONNECTED")) - enum_state = NM_SUPPLICANT_INTERFACE_STATE_DISCONNECTED; + return NM_SUPPLICANT_INTERFACE_STATE_DISCONNECTED; else if (!strcmp (str_state, "INACTIVE")) - enum_state = NM_SUPPLICANT_INTERFACE_STATE_INACTIVE; + return NM_SUPPLICANT_INTERFACE_STATE_INACTIVE; else if (!strcmp (str_state, "SCANNING")) - enum_state = NM_SUPPLICANT_INTERFACE_STATE_SCANNING; + return NM_SUPPLICANT_INTERFACE_STATE_SCANNING; else if (!strcmp (str_state, "ASSOCIATING")) - enum_state = NM_SUPPLICANT_INTERFACE_STATE_ASSOCIATING; + return NM_SUPPLICANT_INTERFACE_STATE_ASSOCIATING; else if (!strcmp (str_state, "ASSOCIATED")) - enum_state = NM_SUPPLICANT_INTERFACE_STATE_ASSOCIATED; + return NM_SUPPLICANT_INTERFACE_STATE_ASSOCIATED; else if (!strcmp (str_state, "4WAY_HANDSHAKE")) - enum_state = NM_SUPPLICANT_INTERFACE_STATE_4WAY_HANDSHAKE; + return NM_SUPPLICANT_INTERFACE_STATE_4WAY_HANDSHAKE; else if (!strcmp (str_state, "GROUP_HANDSHAKE")) - enum_state = NM_SUPPLICANT_INTERFACE_STATE_GROUP_HANDSHAKE; + return NM_SUPPLICANT_INTERFACE_STATE_GROUP_HANDSHAKE; else if (!strcmp (str_state, "COMPLETED")) - enum_state = NM_SUPPLICANT_INTERFACE_STATE_COMPLETED; + return NM_SUPPLICANT_INTERFACE_STATE_COMPLETED; - return enum_state; + return -1; } static void @@ -401,8 +399,11 @@ wpas_iface_handle_state_change (DBusGProxy *proxy, const char *str_old_state, gpointer user_data) { - set_state (NM_SUPPLICANT_INTERFACE (user_data), - wpas_state_string_to_enum (str_new_state)); + int enum_state = wpas_state_string_to_enum (str_new_state); + + g_return_if_fail (enum_state > 0); + + set_state (NM_SUPPLICANT_INTERFACE (user_data), (guint32) enum_state); } /* Explicit state request reply handler */ @@ -412,6 +413,7 @@ iface_state_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data) NMSupplicantInfo *info = (NMSupplicantInfo *) user_data; GError *err = NULL; char *state_str = NULL; + int enum_state; if (!dbus_g_proxy_end_call (proxy, call_id, &err, G_TYPE_STRING, &state_str, @@ -419,7 +421,11 @@ iface_state_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data) nm_log_warn (LOGD_SUPPLICANT, "could not get interface state: %s.", err->message); g_error_free (err); } else { - set_state (info->interface, wpas_state_string_to_enum (state_str)); + enum_state = wpas_state_string_to_enum (state_str); + g_warn_if_fail (enum_state > 0); + + if (enum_state > 0) + set_state (info->interface, (guint32) enum_state); g_free (state_str); } } From f532f41c022857768464e335865863c39caf5c7c Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Tue, 12 Oct 2010 14:18:42 -0500 Subject: [PATCH 38/40] supplicant: ratelimit supplicant activation If the supplicant dies a number of times within a short period of time, make it go sit in the corner for a bit instead of continuously trying to start it and have it die again. Instead of just exposing a "running" value, instead make a meta "available" value that's a combination of whether the supplicant is actually running plus whether we want to talk to it right now or not. --- .../nm-supplicant-interface.c | 32 +++--- .../nm-supplicant-interface.h | 3 +- .../nm-supplicant-manager.c | 99 ++++++++++++++++--- .../nm-supplicant-manager.h | 4 +- 4 files changed, 106 insertions(+), 32 deletions(-) diff --git a/src/supplicant-manager/nm-supplicant-interface.c b/src/supplicant-manager/nm-supplicant-interface.c index 91da8c6a14..bad8f26634 100644 --- a/src/supplicant-manager/nm-supplicant-interface.c +++ b/src/supplicant-manager/nm-supplicant-interface.c @@ -80,7 +80,7 @@ enum { typedef struct { NMSupplicantManager * smgr; - gulong smgr_running_id; + gulong smgr_avail_id; NMDBusManager * dbus_mgr; char * dev; gboolean is_wireless; @@ -365,9 +365,9 @@ set_state (NMSupplicantInterface *self, guint32 new_state) cancel_all_callbacks (priv->assoc_pcalls); /* Disconnect supplicant manager state listeners since we're done */ - if (priv->smgr_running_id) { - g_signal_handler_disconnect (priv->smgr, priv->smgr_running_id); - priv->smgr_running_id = 0; + if (priv->smgr_avail_id) { + g_signal_handler_disconnect (priv->smgr, priv->smgr_avail_id); + priv->smgr_avail_id = 0; } if (priv->iface_proxy) { @@ -662,14 +662,14 @@ interface_add (NMSupplicantInterface *self, gboolean is_wireless) } static void -smgr_running_cb (NMSupplicantManager *smgr, - GParamSpec *pspec, - gpointer user_data) +smgr_avail_cb (NMSupplicantManager *smgr, + GParamSpec *pspec, + gpointer user_data) { NMSupplicantInterface *self = NM_SUPPLICANT_INTERFACE (user_data); NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (user_data); - if (nm_supplicant_manager_running (smgr)) { + 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. */ @@ -1105,7 +1105,8 @@ nm_supplicant_interface_get_ifname (NMSupplicantInterface *self) NMSupplicantInterface * nm_supplicant_interface_new (NMSupplicantManager *smgr, const char *ifname, - gboolean is_wireless) + gboolean is_wireless, + gboolean start_now) { NMSupplicantInterface *self; NMSupplicantInterfacePrivate *priv; @@ -1120,15 +1121,16 @@ nm_supplicant_interface_new (NMSupplicantManager *smgr, priv->smgr = g_object_ref (smgr); id = g_signal_connect (priv->smgr, - "notify::" NM_SUPPLICANT_MANAGER_RUNNING, - G_CALLBACK (smgr_running_cb), + "notify::" NM_SUPPLICANT_MANAGER_AVAILABLE, + G_CALLBACK (smgr_avail_cb), self); - priv->smgr_running_id = id; + priv->smgr_avail_id = id; priv->dev = g_strdup (ifname); priv->is_wireless = is_wireless; - interface_add (self, priv->is_wireless); + if (start_now) + interface_add (self, priv->is_wireless); } return self; @@ -1215,8 +1217,8 @@ dispose (GObject *object) g_source_remove (priv->scan_results_timeout); if (priv->smgr) { - if (priv->smgr_running_id) - g_signal_handler_disconnect (priv->smgr, priv->smgr_running_id); + if (priv->smgr_avail_id) + g_signal_handler_disconnect (priv->smgr, priv->smgr_avail_id); g_object_unref (priv->smgr); } diff --git a/src/supplicant-manager/nm-supplicant-interface.h b/src/supplicant-manager/nm-supplicant-interface.h index 8c51caa1d9..9471bd771b 100644 --- a/src/supplicant-manager/nm-supplicant-interface.h +++ b/src/supplicant-manager/nm-supplicant-interface.h @@ -93,7 +93,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); diff --git a/src/supplicant-manager/nm-supplicant-manager.c b/src/supplicant-manager/nm-supplicant-manager.c index 35fbdb340d..35ef749cb6 100644 --- a/src/supplicant-manager/nm-supplicant-manager.c +++ b/src/supplicant-manager/nm-supplicant-manager.c @@ -37,7 +37,7 @@ G_DEFINE_TYPE (NMSupplicantManager, nm_supplicant_manager, G_TYPE_OBJECT) /* Properties */ enum { PROP_0 = 0, - PROP_RUNNING, + PROP_AVAILABLE, LAST_PROP }; @@ -47,18 +47,27 @@ typedef struct { DBusGProxy * proxy; gboolean running; GHashTable * ifaces; + guint die_count_reset_id; + guint die_count; gboolean disposed; } NMSupplicantManagerPrivate; /********************************************************************/ +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; + NMSupplicantInterface *iface = NULL; + gboolean start_now; g_return_val_if_fail (NM_IS_SUPPLICANT_MANAGER (self), NULL); g_return_val_if_fail (ifname != NULL, NULL); @@ -67,8 +76,15 @@ nm_supplicant_manager_iface_get (NMSupplicantManager * self, 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); + nm_log_dbg (LOGD_SUPPLICANT, "(%s): creating new supplicant interface", ifname); - iface = nm_supplicant_interface_new (self, ifname, is_wireless); + iface = nm_supplicant_interface_new (self, ifname, is_wireless, start_now); if (iface) g_hash_table_insert (priv->ifaces, g_strdup (ifname), iface); } else { @@ -107,14 +123,51 @@ nm_supplicant_manager_iface_release (NMSupplicantManager *self, } gboolean -nm_supplicant_manager_running (NMSupplicantManager *self) +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 (die_count_exceeded (NM_SUPPLICANT_MANAGER_GET_PRIVATE (self)->die_count)) + return FALSE; return NM_SUPPLICANT_MANAGER_GET_PRIVATE (self)->running; } +static void +set_running (NMSupplicantManager *self, gboolean now_running) +{ + NMSupplicantManagerPrivate *priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (self); + gboolean old_available = nm_supplicant_manager_available (self); + + priv->running = now_running; + if (old_available != nm_supplicant_manager_available (self)) + g_object_notify (G_OBJECT (self), NM_SUPPLICANT_MANAGER_AVAILABLE); +} + +static void +set_die_count (NMSupplicantManager *self, guint new_die_count) +{ + NMSupplicantManagerPrivate *priv = NM_SUPPLICANT_MANAGER_GET_PRIVATE (self); + gboolean old_available = nm_supplicant_manager_available (self); + + priv->die_count = new_die_count; + if (old_available != nm_supplicant_manager_available (self)) + g_object_notify (G_OBJECT (self), NM_SUPPLICANT_MANAGER_AVAILABLE); +} + +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 name_owner_changed (NMDBusManager *dbus_mgr, const char *name, @@ -133,12 +186,27 @@ name_owner_changed (NMDBusManager *dbus_mgr, if (!old_owner_good && new_owner_good) { nm_log_info (LOGD_SUPPLICANT, "wpa_supplicant started"); - priv->running = TRUE; - g_object_notify (G_OBJECT (self), NM_SUPPLICANT_MANAGER_RUNNING); + set_running (self, TRUE); } else if (old_owner_good && !new_owner_good) { nm_log_info (LOGD_SUPPLICANT, "wpa_supplicant stopped"); - priv->running = FALSE; - g_object_notify (G_OBJECT (self), NM_SUPPLICANT_MANAGER_RUNNING); + + /* 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. + */ + 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); } } @@ -190,8 +258,8 @@ static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { switch (prop_id) { - case PROP_RUNNING: - g_value_set_boolean (value, NM_SUPPLICANT_MANAGER_GET_PRIVATE (object)->running); + 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); @@ -208,6 +276,9 @@ dispose (GObject *object) goto out; priv->disposed = TRUE; + if (priv->die_count_reset_id) + g_source_remove (priv->die_count_reset_id); + if (priv->dbus_mgr) { if (priv->name_owner_id) g_signal_handler_disconnect (priv->dbus_mgr, priv->name_owner_id); @@ -235,10 +306,10 @@ nm_supplicant_manager_class_init (NMSupplicantManagerClass *klass) object_class->set_property = set_property; object_class->dispose = dispose; - g_object_class_install_property (object_class, PROP_RUNNING, - g_param_spec_boolean (NM_SUPPLICANT_MANAGER_RUNNING, - "Running", - "Running", + 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 ca3b643f57..e9c31a997b 100644 --- a/src/supplicant-manager/nm-supplicant-manager.h +++ b/src/supplicant-manager/nm-supplicant-manager.h @@ -40,7 +40,7 @@ G_BEGIN_DECLS #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_RUNNING "running" +#define NM_SUPPLICANT_MANAGER_AVAILABLE "available" struct _NMSupplicantManager { @@ -63,6 +63,6 @@ NMSupplicantInterface *nm_supplicant_manager_iface_get (NMSupplicantManager *mgr void nm_supplicant_manager_iface_release (NMSupplicantManager *mgr, NMSupplicantInterface *iface); -gboolean nm_supplicant_manager_running (NMSupplicantManager *mgr); +gboolean nm_supplicant_manager_available (NMSupplicantManager *mgr); #endif /* NM_SUPPLICANT_MANAGER_H */ From 9f2b48ef084f8f5b361bb16146b27b92c18607d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20Klime=C5=A1?= Date: Fri, 15 Oct 2010 09:41:34 +0200 Subject: [PATCH 39/40] libnm-glib: call D-Bus with a timeout when Set()ting properties The caller needs to be authenticated, so wait a bit to be sure it didn't quit too quickly. --- libnm-glib/Makefile.am | 2 +- libnm-glib/nm-object.c | 17 +++++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/libnm-glib/Makefile.am b/libnm-glib/Makefile.am index 008cc6df16..ec21a328e9 100644 --- a/libnm-glib/Makefile.am +++ b/libnm-glib/Makefile.am @@ -132,7 +132,7 @@ libnm_glib_la_LIBADD = \ $(GUDEV_LIBS) libnm_glib_la_LDFLAGS = -Wl,--version-script=$(srcdir)/libnm-glib.ver \ - -version-info "6:1:4" + -version-info "6:2:4" noinst_PROGRAMS = libnm-glib-test diff --git a/libnm-glib/nm-object.c b/libnm-glib/nm-object.c index 72ea05005e..85cb6b78ab 100644 --- a/libnm-glib/nm-object.c +++ b/libnm-glib/nm-object.c @@ -527,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 * From 8310593ce48a85aa82d4a2adf805662f2b019ef5 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Fri, 15 Oct 2010 10:28:38 -0500 Subject: [PATCH 40/40] core: ignore authorization for sleep/wake requests (but restrict to root) (rh #638640) Everyone uses pm-utils still for sleep/wake support, and that's traditionally how NM was put to sleep and woken up. But pm-utils uses dbus-send without --print-reply so dbus-send quits immediately after sending the message. That doesn't give NM enough time to get the senders UID and thus validate the request, so the request gets denied, and sometimes NM stays asleep after the machine is woken up. Instead, don't get the sender's UID and try to authorize it, but just let the request go through. Rely on D-Bus permissions to make sure that only root can call sleep/wake methods. --- src/NetworkManager.conf | 24 ++++++++++++++++++++++++ src/nm-manager.c | 20 +++++++++++++++++++- 2 files changed, 43 insertions(+), 1 deletion(-) 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 @@ + + + + + + @@ -72,6 +84,18 @@ send_interface="org.freedesktop.NetworkManager" send_member="SetLogging"/> + + + + + + diff --git a/src/nm-manager.c b/src/nm-manager.c index 758a0826bd..4a3e4997d9 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -3369,6 +3369,7 @@ _internal_sleep (NMManager *self, gboolean do_sleep) g_object_notify (G_OBJECT (self), NM_MANAGER_SLEEPING); } +#if 0 static void sleep_auth_done_cb (NMAuthChain *chain, GError *error, @@ -3407,6 +3408,7 @@ sleep_auth_done_cb (NMAuthChain *chain, nm_auth_chain_unref (chain); } +#endif static void impl_manager_sleep (NMManager *self, @@ -3414,10 +3416,12 @@ impl_manager_sleep (NMManager *self, DBusGMethodInvocation *context) { NMManagerPrivate *priv; - NMAuthChain *chain; 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)); @@ -3432,6 +3436,19 @@ impl_manager_sleep (NMManager *self, 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, @@ -3457,6 +3474,7 @@ impl_manager_sleep (NMManager *self, 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