From b650d1d181a2993108d669beb22b035043c08398 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 6 Dec 2019 11:53:44 +0100 Subject: [PATCH 01/25] core: also check "org.freedesktop.NetworkManager.wifi.scan" permissions --- src/nm-manager.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/nm-manager.c b/src/nm-manager.c index f4cbc6ec2e..22d5a88a86 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -6245,6 +6245,7 @@ get_permissions_done_cb (NMAuthChain *chain, get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_CHECKPOINT_ROLLBACK); get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_ENABLE_DISABLE_STATISTICS); get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_ENABLE_DISABLE_CONNECTIVITY_CHECK); + get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_WIFI_SCAN); g_dbus_method_invocation_return_value (context, g_variant_new ("(a{ss})", &results)); @@ -6289,6 +6290,7 @@ impl_manager_get_permissions (NMDBusObject *obj, nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_CHECKPOINT_ROLLBACK, FALSE); nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_ENABLE_DISABLE_STATISTICS, FALSE); nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_ENABLE_DISABLE_CONNECTIVITY_CHECK, FALSE); + nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_WIFI_SCAN, FALSE); } static void From 50a12ce2d57b7bcd7f7c8a5bb9ad0f4b77a3ec71 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Thu, 5 Dec 2019 13:54:27 +0100 Subject: [PATCH 02/25] core: also return unknown permission check result MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit For example with mount -o remount,rw,hidepid=1 /proc/ all permission checks will fail with an error. Internally, we map the failure to NM_AUTH_CALL_RESULT_UNKNOWN. [1575645672.5958] auth: call[1069]: CheckAuthorization(org.freedesktop.NetworkManager.enable-disable-connectivity-check), subject=unix-process[pid=468316, uid=1000, start=1912881] [1575645672.6295] auth: call[1069]: completed: failed: GDBus.Error:org.gtk.GDBus.UnmappedGError.Quark._g_2dfile_2derror_2dquark.Code4: Failed to open file “/proc/468316/status”: No such file or directory [1575645672.6296] manager: unknown auth chain result 0 First of all, we should not log a debug message about that (we already log the result of permission checks separately). Also, we should include the unknown result in the response. The permission was checked, and omitting it from GetPermissions() result seems wrong (even if we failed to get the result). Note that "unknown" is now a new possible return value on D-Bus. But see how nm_permission_result_to_client() would map such a value to "unknown" as well. So, it's probably a fine extension of the D-Bus API. Note that NMClient API is currently quite limited. The user won't know whether permissions were received (and if they were received, they could not distinguish between UNKNOWN and absent). Hence, returning all permissions as unknown (or not at all) causes `nmcli general permissions` to hang. The solution here is to improve NMClient API to allow the user to know when the permissions are received. But this patch doesn't fix the hanging of nmcli nor the limitation of NMClient's API. --- clients/cli/general.c | 5 ++++- src/nm-manager.c | 7 ++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/clients/cli/general.c b/clients/cli/general.c index 123cc5b4fc..8d9e1b3929 100644 --- a/clients/cli/general.c +++ b/clients/cli/general.c @@ -582,7 +582,10 @@ got_permissions (NmCli *nmc) NMClientPermission perm; /* The server returns all the permissions at once, so if at least one is there - * we already received the reply. */ + * we already received the reply. + * + * FIXME: this is wrong, because all permissions could be unknown. We should instead + * have a signal in NMClient to indicate when permissions are received. */ for (perm = NM_CLIENT_PERMISSION_NONE + 1; perm <= NM_CLIENT_PERMISSION_LAST; perm++) { if (nm_client_get_permission_result (nmc->client, perm) != NM_CLIENT_PERMISSION_RESULT_UNKNOWN) return TRUE; diff --git a/src/nm-manager.c b/src/nm-manager.c index 22d5a88a86..8540a88f43 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -6210,9 +6210,10 @@ get_perm_add_result (NMManager *self, NMAuthChain *chain, GVariantBuilder *resul g_variant_builder_add (results, "{ss}", permission, "no"); else if (result == NM_AUTH_CALL_RESULT_AUTH) g_variant_builder_add (results, "{ss}", permission, "auth"); - else { - _LOGD (LOGD_CORE, "unknown auth chain result %d", result); - } + else if (result == NM_AUTH_CALL_RESULT_UNKNOWN) + g_variant_builder_add (results, "{ss}", permission, "unknown"); + else + nm_assert_not_reached (); } static void From 5ad095374f04d2ffd34eceec099126ffa41e2173 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Thu, 5 Dec 2019 13:57:49 +0100 Subject: [PATCH 03/25] libnm: move NMClientPermission/NMClientPermissionResult enums from libnm to libnm-core We will also use the enum from core. --- libnm-core/nm-dbus-interface.h | 81 ++++++++++++++++++++++++++++++++++ libnm/nm-client.h | 81 ---------------------------------- 2 files changed, 81 insertions(+), 81 deletions(-) diff --git a/libnm-core/nm-dbus-interface.h b/libnm-core/nm-dbus-interface.h index 6f7bf4c95f..3e4c1b616c 100644 --- a/libnm-core/nm-dbus-interface.h +++ b/libnm-core/nm-dbus-interface.h @@ -1177,4 +1177,85 @@ typedef enum { /*< flags >*/ NM_DEVICE_INTERFACE_FLAG_CARRIER = 0x10000, } NMDeviceInterfaceFlags; +/** + * NMClientPermission: + * @NM_CLIENT_PERMISSION_NONE: unknown or no permission + * @NM_CLIENT_PERMISSION_ENABLE_DISABLE_NETWORK: controls whether networking + * can be globally enabled or disabled + * @NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIFI: controls whether Wi-Fi can be + * globally enabled or disabled + * @NM_CLIENT_PERMISSION_ENABLE_DISABLE_WWAN: controls whether WWAN (3G) can be + * globally enabled or disabled + * @NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIMAX: controls whether WiMAX can be + * globally enabled or disabled + * @NM_CLIENT_PERMISSION_SLEEP_WAKE: controls whether the client can ask + * NetworkManager to sleep and wake + * @NM_CLIENT_PERMISSION_NETWORK_CONTROL: controls whether networking connections + * can be started, stopped, and changed + * @NM_CLIENT_PERMISSION_WIFI_SHARE_PROTECTED: controls whether a password + * protected Wi-Fi hotspot can be created + * @NM_CLIENT_PERMISSION_WIFI_SHARE_OPEN: controls whether an open Wi-Fi hotspot + * can be created + * @NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM: controls whether connections + * that are available to all users can be modified + * @NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN: controls whether connections + * owned by the current user can be modified + * @NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME: controls whether the + * persistent hostname can be changed + * @NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS: modify persistent global + * DNS configuration + * @NM_CLIENT_PERMISSION_RELOAD: controls access to Reload. + * @NM_CLIENT_PERMISSION_CHECKPOINT_ROLLBACK: permission to create checkpoints. + * @NM_CLIENT_PERMISSION_ENABLE_DISABLE_STATISTICS: controls whether device + * statistics can be globally enabled or disabled + * @NM_CLIENT_PERMISSION_ENABLE_DISABLE_CONNECTIVITY_CHECK: controls whether + * connectivity check can be enabled or disabled + * @NM_CLIENT_PERMISSION_WIFI_SCAN: controls whether wifi scans can be performed + * @NM_CLIENT_PERMISSION_LAST: a reserved boundary value + * + * #NMClientPermission values indicate various permissions that NetworkManager + * clients can obtain to perform certain tasks on behalf of the current user. + **/ +typedef enum { + NM_CLIENT_PERMISSION_NONE = 0, + NM_CLIENT_PERMISSION_ENABLE_DISABLE_NETWORK = 1, + NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIFI = 2, + NM_CLIENT_PERMISSION_ENABLE_DISABLE_WWAN = 3, + NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIMAX = 4, + NM_CLIENT_PERMISSION_SLEEP_WAKE = 5, + NM_CLIENT_PERMISSION_NETWORK_CONTROL = 6, + NM_CLIENT_PERMISSION_WIFI_SHARE_PROTECTED = 7, + NM_CLIENT_PERMISSION_WIFI_SHARE_OPEN = 8, + NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM = 9, + NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN = 10, + NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME = 11, + NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS = 12, + NM_CLIENT_PERMISSION_RELOAD = 13, + NM_CLIENT_PERMISSION_CHECKPOINT_ROLLBACK = 14, + NM_CLIENT_PERMISSION_ENABLE_DISABLE_STATISTICS = 15, + NM_CLIENT_PERMISSION_ENABLE_DISABLE_CONNECTIVITY_CHECK = 16, + NM_CLIENT_PERMISSION_WIFI_SCAN = 17, + + NM_CLIENT_PERMISSION_LAST = 17, +} NMClientPermission; + +/** + * NMClientPermissionResult: + * @NM_CLIENT_PERMISSION_RESULT_UNKNOWN: unknown or no authorization + * @NM_CLIENT_PERMISSION_RESULT_YES: the permission is available + * @NM_CLIENT_PERMISSION_RESULT_AUTH: authorization is necessary before the + * permission is available + * @NM_CLIENT_PERMISSION_RESULT_NO: permission to perform the operation is + * denied by system policy + * + * #NMClientPermissionResult values indicate what authorizations and permissions + * the user requires to obtain a given #NMClientPermission + **/ +typedef enum { + NM_CLIENT_PERMISSION_RESULT_UNKNOWN = 0, + NM_CLIENT_PERMISSION_RESULT_YES, + NM_CLIENT_PERMISSION_RESULT_AUTH, + NM_CLIENT_PERMISSION_RESULT_NO +} NMClientPermissionResult; + #endif /* __NM_DBUS_INTERFACE_H__ */ diff --git a/libnm/nm-client.h b/libnm/nm-client.h index ad17bf3892..6bff58684e 100644 --- a/libnm/nm-client.h +++ b/libnm/nm-client.h @@ -74,87 +74,6 @@ _NM_DEPRECATED_SYNC_WRITABLE_PROPERTY #define NM_CLIENT_ACTIVE_CONNECTION_ADDED "active-connection-added" #define NM_CLIENT_ACTIVE_CONNECTION_REMOVED "active-connection-removed" -/** - * NMClientPermission: - * @NM_CLIENT_PERMISSION_NONE: unknown or no permission - * @NM_CLIENT_PERMISSION_ENABLE_DISABLE_NETWORK: controls whether networking - * can be globally enabled or disabled - * @NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIFI: controls whether Wi-Fi can be - * globally enabled or disabled - * @NM_CLIENT_PERMISSION_ENABLE_DISABLE_WWAN: controls whether WWAN (3G) can be - * globally enabled or disabled - * @NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIMAX: controls whether WiMAX can be - * globally enabled or disabled - * @NM_CLIENT_PERMISSION_SLEEP_WAKE: controls whether the client can ask - * NetworkManager to sleep and wake - * @NM_CLIENT_PERMISSION_NETWORK_CONTROL: controls whether networking connections - * can be started, stopped, and changed - * @NM_CLIENT_PERMISSION_WIFI_SHARE_PROTECTED: controls whether a password - * protected Wi-Fi hotspot can be created - * @NM_CLIENT_PERMISSION_WIFI_SHARE_OPEN: controls whether an open Wi-Fi hotspot - * can be created - * @NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM: controls whether connections - * that are available to all users can be modified - * @NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN: controls whether connections - * owned by the current user can be modified - * @NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME: controls whether the - * persistent hostname can be changed - * @NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS: modify persistent global - * DNS configuration - * @NM_CLIENT_PERMISSION_RELOAD: controls access to Reload. - * @NM_CLIENT_PERMISSION_CHECKPOINT_ROLLBACK: permission to create checkpoints. - * @NM_CLIENT_PERMISSION_ENABLE_DISABLE_STATISTICS: controls whether device - * statistics can be globally enabled or disabled - * @NM_CLIENT_PERMISSION_ENABLE_DISABLE_CONNECTIVITY_CHECK: controls whether - * connectivity check can be enabled or disabled - * @NM_CLIENT_PERMISSION_WIFI_SCAN: controls whether wifi scans can be performed - * @NM_CLIENT_PERMISSION_LAST: a reserved boundary value - * - * #NMClientPermission values indicate various permissions that NetworkManager - * clients can obtain to perform certain tasks on behalf of the current user. - **/ -typedef enum { - NM_CLIENT_PERMISSION_NONE = 0, - NM_CLIENT_PERMISSION_ENABLE_DISABLE_NETWORK = 1, - NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIFI = 2, - NM_CLIENT_PERMISSION_ENABLE_DISABLE_WWAN = 3, - NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIMAX = 4, - NM_CLIENT_PERMISSION_SLEEP_WAKE = 5, - NM_CLIENT_PERMISSION_NETWORK_CONTROL = 6, - NM_CLIENT_PERMISSION_WIFI_SHARE_PROTECTED = 7, - NM_CLIENT_PERMISSION_WIFI_SHARE_OPEN = 8, - NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM = 9, - NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN = 10, - NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME = 11, - NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS = 12, - NM_CLIENT_PERMISSION_RELOAD = 13, - NM_CLIENT_PERMISSION_CHECKPOINT_ROLLBACK = 14, - NM_CLIENT_PERMISSION_ENABLE_DISABLE_STATISTICS = 15, - NM_CLIENT_PERMISSION_ENABLE_DISABLE_CONNECTIVITY_CHECK = 16, - NM_CLIENT_PERMISSION_WIFI_SCAN = 17, - - NM_CLIENT_PERMISSION_LAST = 17, -} NMClientPermission; - -/** - * NMClientPermissionResult: - * @NM_CLIENT_PERMISSION_RESULT_UNKNOWN: unknown or no authorization - * @NM_CLIENT_PERMISSION_RESULT_YES: the permission is available - * @NM_CLIENT_PERMISSION_RESULT_AUTH: authorization is necessary before the - * permission is available - * @NM_CLIENT_PERMISSION_RESULT_NO: permission to perform the operation is - * denied by system policy - * - * #NMClientPermissionResult values indicate what authorizations and permissions - * the user requires to obtain a given #NMClientPermission - **/ -typedef enum { - NM_CLIENT_PERMISSION_RESULT_UNKNOWN = 0, - NM_CLIENT_PERMISSION_RESULT_YES, - NM_CLIENT_PERMISSION_RESULT_AUTH, - NM_CLIENT_PERMISSION_RESULT_NO -} NMClientPermissionResult; - /** * NMClientError: * @NM_CLIENT_ERROR_FAILED: unknown or unclassified error From 09e17888f7f032810dbe21bbeab0fa38c7d0d72f Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Thu, 5 Dec 2019 14:16:48 +0100 Subject: [PATCH 04/25] libnm: add mapping functions between string and NMClientPermission enum --- libnm/tests/test-libnm.c | 45 ++++++++++ .../nm-libnm-core-utils.c | 90 +++++++++++++++++++ .../nm-libnm-core-utils.h | 8 ++ 3 files changed, 143 insertions(+) diff --git a/libnm/tests/test-libnm.c b/libnm/tests/test-libnm.c index 345fbb07b8..90d0cf0d3f 100644 --- a/libnm/tests/test-libnm.c +++ b/libnm/tests/test-libnm.c @@ -22,6 +22,7 @@ #include "nm-libnm-utils.h" #include "nm-object.h" #include "nm-vpn-service-plugin.h" +#include "nm-libnm-core-intern/nm-libnm-core-utils.h" #include "nm-utils/nm-test-utils.h" @@ -3064,6 +3065,49 @@ test_dbus_meta_types (void) g_assert (meta_iface->get_type_fcn() == d->gtype); } } + +/*****************************************************************************/ + +static void +test_nm_auth_permissions (void) +{ + int i, j; + + G_STATIC_ASSERT (G_N_ELEMENTS (nm_auth_permission_names_by_idx) == NM_CLIENT_PERMISSION_LAST); + G_STATIC_ASSERT (G_N_ELEMENTS (nm_auth_permission_sorted) == NM_CLIENT_PERMISSION_LAST); + + for (i = 0; i < NM_CLIENT_PERMISSION_LAST; i++) { + g_assert (nm_auth_permission_names_by_idx[i]); + g_assert (NM_STR_HAS_PREFIX (nm_auth_permission_names_by_idx[i], "org.freedesktop.NetworkManager.")); + g_assert_cmpint (nm_auth_permission_sorted[i], >, 0); + g_assert_cmpint (nm_auth_permission_sorted[i], <=, NM_CLIENT_PERMISSION_LAST); + for (j = i + 1; j < NM_CLIENT_PERMISSION_LAST; j++) { + g_assert_cmpint (nm_auth_permission_sorted[i], !=, nm_auth_permission_sorted[j]); + g_assert_cmpstr (nm_auth_permission_names_by_idx[i], !=, nm_auth_permission_names_by_idx[j]); + } + } + for (i = 1; i < NM_CLIENT_PERMISSION_LAST; i++) { + NMClientPermission a = nm_auth_permission_sorted[i - 1]; + NMClientPermission b = nm_auth_permission_sorted[i]; + const char *s_a = nm_auth_permission_names_by_idx[a - 1]; + const char *s_b = nm_auth_permission_names_by_idx[b - 1]; + + g_assert_cmpstr (s_a, <, s_b); + g_assert (a != b); + g_assert (s_a != s_b); + } + for (i = 1; i <= NM_CLIENT_PERMISSION_LAST; i++) { + const char *s = nm_auth_permission_to_string (i); + + g_assert_cmpstr (s, ==, nm_auth_permission_names_by_idx[i - 1]); + g_assert (s == nm_auth_permission_names_by_idx[i - 1]); + g_assert_cmpint (nm_auth_permission_from_string (s), ==, i); + } + return; + for (i = 0; i < NM_CLIENT_PERMISSION_LAST; i++) + g_assert_cmpint (nm_auth_permission_from_string (nm_auth_permission_names_by_idx[i]), ==, i + 1); +} + /*****************************************************************************/ NMTST_DEFINE (); @@ -3078,6 +3122,7 @@ int main (int argc, char **argv) g_test_add_func ("/libnm/general/test_types", test_types); g_test_add_func ("/libnm/general/test_nml_dbus_meta", test_nml_dbus_meta); g_test_add_func ("/libnm/general/test_dbus_meta_types", test_dbus_meta_types); + g_test_add_func ("/libnm/general/test_nm_auth_permissions", test_nm_auth_permissions); return g_test_run (); } diff --git a/shared/nm-libnm-core-intern/nm-libnm-core-utils.c b/shared/nm-libnm-core-intern/nm-libnm-core-utils.c index 9bf0b1202e..366d812a31 100644 --- a/shared/nm-libnm-core-intern/nm-libnm-core-utils.c +++ b/shared/nm-libnm-core-intern/nm-libnm-core-utils.c @@ -4,6 +4,8 @@ #include "nm-libnm-core-utils.h" +#include "nm-common-macros.h" + /*****************************************************************************/ gboolean @@ -59,3 +61,91 @@ nm_utils_vlan_priority_map_parse_str (NMVlanPriorityMap map_type, NM_SET_OUT (out_has_wildcard_to, v2 < 0); return TRUE; } + +/*****************************************************************************/ + +const char *const nm_auth_permission_names_by_idx[NM_CLIENT_PERMISSION_LAST] = { + [NM_CLIENT_PERMISSION_CHECKPOINT_ROLLBACK - 1] = NM_AUTH_PERMISSION_CHECKPOINT_ROLLBACK, + [NM_CLIENT_PERMISSION_ENABLE_DISABLE_CONNECTIVITY_CHECK - 1] = NM_AUTH_PERMISSION_ENABLE_DISABLE_CONNECTIVITY_CHECK, + [NM_CLIENT_PERMISSION_ENABLE_DISABLE_NETWORK - 1] = NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK, + [NM_CLIENT_PERMISSION_ENABLE_DISABLE_STATISTICS - 1] = NM_AUTH_PERMISSION_ENABLE_DISABLE_STATISTICS, + [NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIFI - 1] = NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI, + [NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIMAX - 1] = NM_AUTH_PERMISSION_ENABLE_DISABLE_WIMAX, + [NM_CLIENT_PERMISSION_ENABLE_DISABLE_WWAN - 1] = NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN, + [NM_CLIENT_PERMISSION_NETWORK_CONTROL - 1] = NM_AUTH_PERMISSION_NETWORK_CONTROL, + [NM_CLIENT_PERMISSION_RELOAD - 1] = NM_AUTH_PERMISSION_RELOAD, + [NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS - 1] = NM_AUTH_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS, + [NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME - 1] = NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME, + [NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN - 1] = NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN, + [NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM - 1] = NM_AUTH_PERMISSION_SETTINGS_MODIFY_SYSTEM, + [NM_CLIENT_PERMISSION_SLEEP_WAKE - 1] = NM_AUTH_PERMISSION_SLEEP_WAKE, + [NM_CLIENT_PERMISSION_WIFI_SCAN - 1] = NM_AUTH_PERMISSION_WIFI_SCAN, + [NM_CLIENT_PERMISSION_WIFI_SHARE_OPEN - 1] = NM_AUTH_PERMISSION_WIFI_SHARE_OPEN, + [NM_CLIENT_PERMISSION_WIFI_SHARE_PROTECTED - 1] = NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED, +}; + +const NMClientPermission nm_auth_permission_sorted[NM_CLIENT_PERMISSION_LAST] = { + NM_CLIENT_PERMISSION_CHECKPOINT_ROLLBACK, + NM_CLIENT_PERMISSION_ENABLE_DISABLE_CONNECTIVITY_CHECK, + NM_CLIENT_PERMISSION_ENABLE_DISABLE_NETWORK, + NM_CLIENT_PERMISSION_ENABLE_DISABLE_STATISTICS, + NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIFI, + NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIMAX, + NM_CLIENT_PERMISSION_ENABLE_DISABLE_WWAN, + NM_CLIENT_PERMISSION_NETWORK_CONTROL, + NM_CLIENT_PERMISSION_RELOAD, + NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS, + NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME, + NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN, + NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM, + NM_CLIENT_PERMISSION_SLEEP_WAKE, + NM_CLIENT_PERMISSION_WIFI_SCAN, + NM_CLIENT_PERMISSION_WIFI_SHARE_OPEN, + NM_CLIENT_PERMISSION_WIFI_SHARE_PROTECTED, +}; + +const char * +nm_auth_permission_to_string (NMClientPermission permission) +{ + if (permission < 1) + return NULL; + if (permission > NM_CLIENT_PERMISSION_LAST) + return NULL; + return nm_auth_permission_names_by_idx[permission - 1]; +} + +#define AUTH_PERMISSION_PREFIX "org.freedesktop.NetworkManager." + +static int +_nm_auth_permission_from_string_cmp (gconstpointer a, gconstpointer b, gpointer user_data) +{ + const NMClientPermission *const p = a; + const char *const needle = b; + const char *ss = nm_auth_permission_names_by_idx[*p - 1]; + + nm_assert (NM_STR_HAS_PREFIX (ss, AUTH_PERMISSION_PREFIX)); + nm_assert (ss[NM_STRLEN (AUTH_PERMISSION_PREFIX)] != '\0'); + + return strcmp (&ss[NM_STRLEN (AUTH_PERMISSION_PREFIX)], needle); +} + +NMClientPermission +nm_auth_permission_from_string (const char *str) +{ + gssize idx; + + if (!str) + return NM_CLIENT_PERMISSION_NONE; + + if (!NM_STR_HAS_PREFIX (str, AUTH_PERMISSION_PREFIX)) + return NM_CLIENT_PERMISSION_NONE; + idx = nm_utils_array_find_binary_search (nm_auth_permission_sorted, + sizeof (nm_auth_permission_sorted[0]), + G_N_ELEMENTS (nm_auth_permission_sorted), + &str[NM_STRLEN (AUTH_PERMISSION_PREFIX)], + _nm_auth_permission_from_string_cmp, + NULL); + if (idx < 0) + return NM_CLIENT_PERMISSION_NONE; + return nm_auth_permission_sorted[idx]; +} diff --git a/shared/nm-libnm-core-intern/nm-libnm-core-utils.h b/shared/nm-libnm-core-intern/nm-libnm-core-utils.h index 42e9fc6491..3e15394ea9 100644 --- a/shared/nm-libnm-core-intern/nm-libnm-core-utils.h +++ b/shared/nm-libnm-core-intern/nm-libnm-core-utils.h @@ -95,4 +95,12 @@ nm_setting_ip_config_get_addr_family (NMSettingIPConfig *s_ip) * depends on other factors. */ #define NM_INFINIBAND_MAX_MTU ((guint) 65520) +/*****************************************************************************/ + +extern const char *const nm_auth_permission_names_by_idx[NM_CLIENT_PERMISSION_LAST]; +extern const NMClientPermission nm_auth_permission_sorted[NM_CLIENT_PERMISSION_LAST]; + +const char *nm_auth_permission_to_string (NMClientPermission permission); +NMClientPermission nm_auth_permission_from_string (const char *str); + #endif /* __NM_LIBNM_SHARED_UTILS_H__ */ From bfdd352a616471532b96c2e03554ebaf5125998e Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Mon, 9 Dec 2019 08:02:01 +0100 Subject: [PATCH 05/25] libnm,cli: cleanup mapping between NMClientPermission and strings --- clients/cli/general.c | 40 ++----------------------- libnm/nm-client.c | 2 +- libnm/nm-libnm-utils.c | 66 ------------------------------------------ libnm/nm-libnm-utils.h | 2 -- 4 files changed, 3 insertions(+), 107 deletions(-) diff --git a/clients/cli/general.c b/clients/cli/general.c index 8d9e1b3929..8bf8ea2a13 100644 --- a/clients/cli/general.c +++ b/clients/cli/general.c @@ -77,44 +77,8 @@ connectivity_to_color (NMConnectivityState connectivity) static const char * permission_to_string (NMClientPermission perm) { - switch (perm) { - case NM_CLIENT_PERMISSION_ENABLE_DISABLE_NETWORK: - return NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK; - case NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIFI: - return NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI; - case NM_CLIENT_PERMISSION_ENABLE_DISABLE_WWAN: - return NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN; - case NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIMAX: - return NM_AUTH_PERMISSION_ENABLE_DISABLE_WIMAX; - case NM_CLIENT_PERMISSION_SLEEP_WAKE: - return NM_AUTH_PERMISSION_SLEEP_WAKE; - case NM_CLIENT_PERMISSION_NETWORK_CONTROL: - return NM_AUTH_PERMISSION_NETWORK_CONTROL; - case NM_CLIENT_PERMISSION_WIFI_SHARE_PROTECTED: - return NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED; - case NM_CLIENT_PERMISSION_WIFI_SHARE_OPEN: - return NM_AUTH_PERMISSION_WIFI_SHARE_OPEN; - case NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM: - return NM_AUTH_PERMISSION_SETTINGS_MODIFY_SYSTEM; - case NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN: - return NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN; - case NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME: - return NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME; - case NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS: - return NM_AUTH_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS; - case NM_CLIENT_PERMISSION_RELOAD: - return NM_AUTH_PERMISSION_RELOAD; - case NM_CLIENT_PERMISSION_CHECKPOINT_ROLLBACK: - return NM_AUTH_PERMISSION_CHECKPOINT_ROLLBACK; - case NM_CLIENT_PERMISSION_ENABLE_DISABLE_STATISTICS: - return NM_AUTH_PERMISSION_ENABLE_DISABLE_STATISTICS; - case NM_CLIENT_PERMISSION_ENABLE_DISABLE_CONNECTIVITY_CHECK: - return NM_AUTH_PERMISSION_ENABLE_DISABLE_CONNECTIVITY_CHECK; - case NM_CLIENT_PERMISSION_WIFI_SCAN: - return NM_AUTH_PERMISSION_WIFI_SCAN; - default: - return _("unknown"); - } + return nm_auth_permission_to_string (perm) + ?: _("unknown"); } NM_UTILS_LOOKUP_STR_DEFINE_STATIC (permission_result_to_string, NMClientPermissionResult, diff --git a/libnm/nm-client.c b/libnm/nm-client.c index 1a1ed25694..f81cbb0695 100644 --- a/libnm/nm-client.c +++ b/libnm/nm-client.c @@ -3375,7 +3375,7 @@ _dbus_check_permissions_start_cb (GObject *source, GAsyncResult *result, gpointe NMClientPermission perm; NMClientPermissionResult perm_result; - perm = nm_permission_to_client (pkey); + perm = nm_auth_permission_from_string (pkey); if (perm == NM_CLIENT_PERMISSION_NONE) continue; diff --git a/libnm/nm-libnm-utils.c b/libnm/nm-libnm-utils.c index 73de75e36b..7fd6eafb07 100644 --- a/libnm/nm-libnm-utils.c +++ b/libnm/nm-libnm-utils.c @@ -663,72 +663,6 @@ nm_utils_fixup_product_string (const char *desc) /*****************************************************************************/ -NMClientPermission -nm_permission_to_client (const char *nm) -{ - static const struct { - const char *name; - NMClientPermission perm; - } list[] = { - { NM_AUTH_PERMISSION_CHECKPOINT_ROLLBACK, NM_CLIENT_PERMISSION_CHECKPOINT_ROLLBACK }, - { NM_AUTH_PERMISSION_ENABLE_DISABLE_CONNECTIVITY_CHECK, NM_CLIENT_PERMISSION_ENABLE_DISABLE_CONNECTIVITY_CHECK }, - { NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK, NM_CLIENT_PERMISSION_ENABLE_DISABLE_NETWORK }, - { NM_AUTH_PERMISSION_ENABLE_DISABLE_STATISTICS, NM_CLIENT_PERMISSION_ENABLE_DISABLE_STATISTICS }, - { NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI, NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIFI }, - { NM_AUTH_PERMISSION_ENABLE_DISABLE_WIMAX, NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIMAX }, - { NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN, NM_CLIENT_PERMISSION_ENABLE_DISABLE_WWAN }, - { NM_AUTH_PERMISSION_NETWORK_CONTROL, NM_CLIENT_PERMISSION_NETWORK_CONTROL }, - { NM_AUTH_PERMISSION_RELOAD, NM_CLIENT_PERMISSION_RELOAD }, - { NM_AUTH_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS, NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS }, - { NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME, NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME }, - { NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN, NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN }, - { NM_AUTH_PERMISSION_SETTINGS_MODIFY_SYSTEM, NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM }, - { NM_AUTH_PERMISSION_SLEEP_WAKE, NM_CLIENT_PERMISSION_SLEEP_WAKE }, - { NM_AUTH_PERMISSION_WIFI_SCAN, NM_CLIENT_PERMISSION_WIFI_SCAN }, - { NM_AUTH_PERMISSION_WIFI_SHARE_OPEN, NM_CLIENT_PERMISSION_WIFI_SHARE_OPEN }, - { NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED, NM_CLIENT_PERMISSION_WIFI_SHARE_PROTECTED }, - }; - gssize idx; - -#if NM_MORE_ASSERTS > 10 - { - static gboolean checked = FALSE; - int i, j; - - if (!checked) { - checked = TRUE; - - for (i = 0; i < G_N_ELEMENTS (list); i++) { - - nm_assert (list[i].perm != NM_CLIENT_PERMISSION_NONE); - nm_assert (list[i].name && list[i].name[0]); - if (i > 0) { - if (strcmp (list[i - 1].name, list[i].name) >= 0) { - g_error ("list is not sorted by name: #%d (%s) should be after #%d (%s)", - i - 1, list[i - 1].name, i, list[i].name); - } - } - for (j = i + 1; j < G_N_ELEMENTS (list); j++) { - nm_assert (list[i].perm != list[j].perm); - } - } - } - } -#endif - - if (nm) { - idx = nm_utils_array_find_binary_search (list, - sizeof (list[0]), - G_N_ELEMENTS (list), - &nm, - nm_strcmp_p_with_data, - NULL); - if (idx >= 0) - return list[idx].perm; - } - return NM_CLIENT_PERMISSION_NONE; -} - NMClientPermissionResult nm_permission_result_to_client (const char *nm) { diff --git a/libnm/nm-libnm-utils.h b/libnm/nm-libnm-utils.h index 98739db47c..5ab10fcfeb 100644 --- a/libnm/nm-libnm-utils.h +++ b/libnm/nm-libnm-utils.h @@ -29,8 +29,6 @@ gboolean nm_utils_g_param_spec_is_default (const GParamSpec *pspec); /*****************************************************************************/ -NMClientPermission nm_permission_to_client (const char *nm); - NMClientPermissionResult nm_permission_result_to_client (const char *nm); /*****************************************************************************/ From b7462b1910b5b3debbeb208f82de3d4d3f92f224 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Thu, 5 Dec 2019 15:08:17 +0100 Subject: [PATCH 06/25] libnm,shared: move nm_permission_result_to_client() to shared's nm_client_permission_result_from_string() --- libnm/nm-client.c | 2 +- libnm/nm-libnm-utils.c | 16 ---------------- libnm/nm-libnm-utils.h | 4 ---- .../nm-libnm-core-intern/nm-libnm-core-utils.c | 16 ++++++++++++++++ .../nm-libnm-core-intern/nm-libnm-core-utils.h | 4 ++++ 5 files changed, 21 insertions(+), 21 deletions(-) diff --git a/libnm/nm-client.c b/libnm/nm-client.c index f81cbb0695..42cba4095d 100644 --- a/libnm/nm-client.c +++ b/libnm/nm-client.c @@ -3379,7 +3379,7 @@ _dbus_check_permissions_start_cb (GObject *source, GAsyncResult *result, gpointe if (perm == NM_CLIENT_PERMISSION_NONE) continue; - perm_result = nm_permission_result_to_client (pvalue); + perm_result = nm_client_permission_result_from_string (pvalue); g_hash_table_insert (priv->permissions, GUINT_TO_POINTER (perm), diff --git a/libnm/nm-libnm-utils.c b/libnm/nm-libnm-utils.c index 7fd6eafb07..662bc33fa5 100644 --- a/libnm/nm-libnm-utils.c +++ b/libnm/nm-libnm-utils.c @@ -663,22 +663,6 @@ nm_utils_fixup_product_string (const char *desc) /*****************************************************************************/ -NMClientPermissionResult -nm_permission_result_to_client (const char *nm) -{ - if (!nm) - return NM_CLIENT_PERMISSION_RESULT_UNKNOWN; - if (nm_streq (nm, "yes")) - return NM_CLIENT_PERMISSION_RESULT_YES; - if (nm_streq (nm, "no")) - return NM_CLIENT_PERMISSION_RESULT_NO; - if (nm_streq (nm, "auth")) - return NM_CLIENT_PERMISSION_RESULT_AUTH; - return NM_CLIENT_PERMISSION_RESULT_UNKNOWN; -} - -/*****************************************************************************/ - const NMLDBusMetaIface *const _nml_dbus_meta_ifaces[] = { &_nml_dbus_meta_iface_nm, &_nml_dbus_meta_iface_nm_accesspoint, diff --git a/libnm/nm-libnm-utils.h b/libnm/nm-libnm-utils.h index 5ab10fcfeb..304c35f4be 100644 --- a/libnm/nm-libnm-utils.h +++ b/libnm/nm-libnm-utils.h @@ -29,10 +29,6 @@ gboolean nm_utils_g_param_spec_is_default (const GParamSpec *pspec); /*****************************************************************************/ -NMClientPermissionResult nm_permission_result_to_client (const char *nm); - -/*****************************************************************************/ - typedef enum { _NML_DBUS_LOG_LEVEL_INITIALIZED = 0x01, diff --git a/shared/nm-libnm-core-intern/nm-libnm-core-utils.c b/shared/nm-libnm-core-intern/nm-libnm-core-utils.c index 366d812a31..087524bdd4 100644 --- a/shared/nm-libnm-core-intern/nm-libnm-core-utils.c +++ b/shared/nm-libnm-core-intern/nm-libnm-core-utils.c @@ -149,3 +149,19 @@ nm_auth_permission_from_string (const char *str) return NM_CLIENT_PERMISSION_NONE; return nm_auth_permission_sorted[idx]; } + +/*****************************************************************************/ + +NMClientPermissionResult +nm_client_permission_result_from_string (const char *nm) +{ + if (!nm) + return NM_CLIENT_PERMISSION_RESULT_UNKNOWN; + if (nm_streq (nm, "yes")) + return NM_CLIENT_PERMISSION_RESULT_YES; + if (nm_streq (nm, "no")) + return NM_CLIENT_PERMISSION_RESULT_NO; + if (nm_streq (nm, "auth")) + return NM_CLIENT_PERMISSION_RESULT_AUTH; + return NM_CLIENT_PERMISSION_RESULT_UNKNOWN; +} diff --git a/shared/nm-libnm-core-intern/nm-libnm-core-utils.h b/shared/nm-libnm-core-intern/nm-libnm-core-utils.h index 3e15394ea9..398c493d9d 100644 --- a/shared/nm-libnm-core-intern/nm-libnm-core-utils.h +++ b/shared/nm-libnm-core-intern/nm-libnm-core-utils.h @@ -103,4 +103,8 @@ extern const NMClientPermission nm_auth_permission_sorted[NM_CLIENT_PERMISSION_L const char *nm_auth_permission_to_string (NMClientPermission permission); NMClientPermission nm_auth_permission_from_string (const char *str); +/*****************************************************************************/ + +NMClientPermissionResult nm_client_permission_result_from_string (const char *nm); + #endif /* __NM_LIBNM_SHARED_UTILS_H__ */ From dab61a919b1d3dd7366cc68f3d96bb0621a0a495 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Thu, 5 Dec 2019 15:16:20 +0100 Subject: [PATCH 07/25] shared: add nm_client_permission_result_to_string() helper --- shared/nm-libnm-core-intern/nm-libnm-core-utils.c | 13 +++++++++++++ shared/nm-libnm-core-intern/nm-libnm-core-utils.h | 1 + 2 files changed, 14 insertions(+) diff --git a/shared/nm-libnm-core-intern/nm-libnm-core-utils.c b/shared/nm-libnm-core-intern/nm-libnm-core-utils.c index 087524bdd4..df2f2e7769 100644 --- a/shared/nm-libnm-core-intern/nm-libnm-core-utils.c +++ b/shared/nm-libnm-core-intern/nm-libnm-core-utils.c @@ -165,3 +165,16 @@ nm_client_permission_result_from_string (const char *nm) return NM_CLIENT_PERMISSION_RESULT_AUTH; return NM_CLIENT_PERMISSION_RESULT_UNKNOWN; } + +const char * +nm_client_permission_result_to_string (NMClientPermissionResult permission) +{ + switch (permission) { + case NM_CLIENT_PERMISSION_RESULT_YES: return "yes"; + case NM_CLIENT_PERMISSION_RESULT_NO: return "no"; + case NM_CLIENT_PERMISSION_RESULT_AUTH: return "auth"; + case NM_CLIENT_PERMISSION_RESULT_UNKNOWN: return "unknown"; + } + nm_assert_not_reached (); + return NULL; +} diff --git a/shared/nm-libnm-core-intern/nm-libnm-core-utils.h b/shared/nm-libnm-core-intern/nm-libnm-core-utils.h index 398c493d9d..65a6e74ef0 100644 --- a/shared/nm-libnm-core-intern/nm-libnm-core-utils.h +++ b/shared/nm-libnm-core-intern/nm-libnm-core-utils.h @@ -106,5 +106,6 @@ NMClientPermission nm_auth_permission_from_string (const char *str); /*****************************************************************************/ NMClientPermissionResult nm_client_permission_result_from_string (const char *nm); +const char *nm_client_permission_result_to_string (NMClientPermissionResult permission); #endif /* __NM_LIBNM_SHARED_UTILS_H__ */ From 466a4c45625a3726e45e219f5f9185a7dc0a3111 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Thu, 5 Dec 2019 14:55:28 +0100 Subject: [PATCH 08/25] core: don't duplicate list of known permissions in impl_manager_get_permissions() Reuse the list of all permissions and don't duplicate it. Also, now the result of GetPermissions() on D-Bus contains the permissions sorted by name. We get it almost for free, and it's a nice property. --- src/nm-manager.c | 77 +++++++++++++++--------------------------------- 1 file changed, 24 insertions(+), 53 deletions(-) diff --git a/src/nm-manager.c b/src/nm-manager.c index 8540a88f43..0adde3fc39 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -6198,31 +6198,13 @@ done: /* Permissions */ -static void -get_perm_add_result (NMManager *self, NMAuthChain *chain, GVariantBuilder *results, const char *permission) -{ - NMAuthCallResult result; - - result = nm_auth_chain_get_result (chain, permission); - if (result == NM_AUTH_CALL_RESULT_YES) - g_variant_builder_add (results, "{ss}", permission, "yes"); - else if (result == NM_AUTH_CALL_RESULT_NO) - g_variant_builder_add (results, "{ss}", permission, "no"); - else if (result == NM_AUTH_CALL_RESULT_AUTH) - g_variant_builder_add (results, "{ss}", permission, "auth"); - else if (result == NM_AUTH_CALL_RESULT_UNKNOWN) - g_variant_builder_add (results, "{ss}", permission, "unknown"); - else - nm_assert_not_reached (); -} - static void get_permissions_done_cb (NMAuthChain *chain, GDBusMethodInvocation *context, gpointer user_data) { - NMManager *self = NM_MANAGER (user_data); GVariantBuilder results; + int i; nm_assert (G_IS_DBUS_METHOD_INVOCATION (context)); @@ -6230,23 +6212,22 @@ get_permissions_done_cb (NMAuthChain *chain, g_variant_builder_init (&results, G_VARIANT_TYPE ("a{ss}")); - get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK); - get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_SLEEP_WAKE); - get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI); - get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN); - get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_ENABLE_DISABLE_WIMAX); - get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_NETWORK_CONTROL); - get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED); - get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_WIFI_SHARE_OPEN); - get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_SETTINGS_MODIFY_SYSTEM); - get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN); - get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME); - get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS); - get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_RELOAD); - get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_CHECKPOINT_ROLLBACK); - get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_ENABLE_DISABLE_STATISTICS); - get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_ENABLE_DISABLE_CONNECTIVITY_CHECK); - get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_WIFI_SCAN); + for (i = 0; i < (int) G_N_ELEMENTS (nm_auth_permission_sorted); i++) { + const char *permission = nm_auth_permission_names_by_idx[nm_auth_permission_sorted[i] - 1]; + NMAuthCallResult result; + + result = nm_auth_chain_get_result (chain, permission); + if (result == NM_AUTH_CALL_RESULT_YES) + g_variant_builder_add (&results, "{ss}", permission, "yes"); + else if (result == NM_AUTH_CALL_RESULT_NO) + g_variant_builder_add (&results, "{ss}", permission, "no"); + else if (result == NM_AUTH_CALL_RESULT_AUTH) + g_variant_builder_add (&results, "{ss}", permission, "auth"); + else if (result == NM_AUTH_CALL_RESULT_UNKNOWN) + g_variant_builder_add (&results, "{ss}", permission, "unknown"); + else + nm_assert_not_reached (); + } g_dbus_method_invocation_return_value (context, g_variant_new ("(a{ss})", &results)); @@ -6264,6 +6245,7 @@ impl_manager_get_permissions (NMDBusObject *obj, NMManager *self = NM_MANAGER (obj); NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self); NMAuthChain *chain; + int i; chain = nm_auth_chain_new_context (invocation, get_permissions_done_cb, self); if (!chain) { @@ -6275,23 +6257,12 @@ impl_manager_get_permissions (NMDBusObject *obj, } c_list_link_tail (&priv->auth_lst_head, nm_auth_chain_parent_lst_list (chain)); - nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK, FALSE); - nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_SLEEP_WAKE, FALSE); - nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI, FALSE); - nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN, FALSE); - nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_ENABLE_DISABLE_WIMAX, FALSE); - nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_NETWORK_CONTROL, FALSE); - nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED, FALSE); - nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_WIFI_SHARE_OPEN, FALSE); - nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_SETTINGS_MODIFY_SYSTEM, FALSE); - nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN, FALSE); - nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME, FALSE); - nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS, FALSE); - nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_RELOAD, FALSE); - nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_CHECKPOINT_ROLLBACK, FALSE); - nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_ENABLE_DISABLE_STATISTICS, FALSE); - nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_ENABLE_DISABLE_CONNECTIVITY_CHECK, FALSE); - nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_WIFI_SCAN, FALSE); + + for (i = 0; i < (int) G_N_ELEMENTS (nm_auth_permission_sorted); i++) { + const char *permission = nm_auth_permission_names_by_idx[nm_auth_permission_sorted[i] - 1]; + + nm_auth_chain_add_call_unsafe (chain, permission, FALSE); + } } static void From 33754752ea88f4717037801ee38652b392294efa Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Thu, 5 Dec 2019 15:20:18 +0100 Subject: [PATCH 09/25] core: use nm_client_permission_result_to_string() to map permission result In NetworkManager we have NMAuthCallResult, which is really a duplicate of NMClientPermissionResult. Maybe NMAuthCallResult should be entirely replaced by NMClientPermissionResult. But the name NMClientPermissionResult is a bit awkward. But then the duplication is even more awkward... fixing this is left for another day. --- src/nm-auth-manager.h | 14 ++++++++++---- src/nm-manager.c | 13 +++---------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/nm-auth-manager.h b/src/nm-auth-manager.h index 083f98aaaa..3e3124cacb 100644 --- a/src/nm-auth-manager.h +++ b/src/nm-auth-manager.h @@ -11,12 +11,18 @@ /*****************************************************************************/ typedef enum { - NM_AUTH_CALL_RESULT_UNKNOWN, - NM_AUTH_CALL_RESULT_YES, - NM_AUTH_CALL_RESULT_AUTH, - NM_AUTH_CALL_RESULT_NO, + NM_AUTH_CALL_RESULT_UNKNOWN = NM_CLIENT_PERMISSION_RESULT_UNKNOWN, + NM_AUTH_CALL_RESULT_YES = NM_CLIENT_PERMISSION_RESULT_YES, + NM_AUTH_CALL_RESULT_AUTH = NM_CLIENT_PERMISSION_RESULT_AUTH, + NM_AUTH_CALL_RESULT_NO = NM_CLIENT_PERMISSION_RESULT_NO, } NMAuthCallResult; +static inline NMClientPermissionResult +nm_auth_call_result_to_client (NMAuthCallResult result) +{ + return (NMClientPermissionResult) result; +} + static inline NMAuthCallResult nm_auth_call_result_eval (gboolean is_authorized, gboolean is_challenge, diff --git a/src/nm-manager.c b/src/nm-manager.c index 0adde3fc39..808c6538cf 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -6215,18 +6215,11 @@ get_permissions_done_cb (NMAuthChain *chain, for (i = 0; i < (int) G_N_ELEMENTS (nm_auth_permission_sorted); i++) { const char *permission = nm_auth_permission_names_by_idx[nm_auth_permission_sorted[i] - 1]; NMAuthCallResult result; + const char *result_str; result = nm_auth_chain_get_result (chain, permission); - if (result == NM_AUTH_CALL_RESULT_YES) - g_variant_builder_add (&results, "{ss}", permission, "yes"); - else if (result == NM_AUTH_CALL_RESULT_NO) - g_variant_builder_add (&results, "{ss}", permission, "no"); - else if (result == NM_AUTH_CALL_RESULT_AUTH) - g_variant_builder_add (&results, "{ss}", permission, "auth"); - else if (result == NM_AUTH_CALL_RESULT_UNKNOWN) - g_variant_builder_add (&results, "{ss}", permission, "unknown"); - else - nm_assert_not_reached (); + result_str = nm_client_permission_result_to_string (nm_auth_call_result_to_client (result)); + g_variant_builder_add (&results, "{ss}", permission, result_str); } g_dbus_method_invocation_return_value (context, From 89d55ad6e167ab89df98d2705605bc17a6ce13aa Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 6 Dec 2019 11:29:38 +0100 Subject: [PATCH 10/25] cli: sort permission in output of `nmcli general permissions` --- clients/cli/general.c | 11 +- .../test_001.expected | 1456 ++++++++--------- 2 files changed, 733 insertions(+), 734 deletions(-) diff --git a/clients/cli/general.c b/clients/cli/general.c index 8bf8ea2a13..da8437f0ed 100644 --- a/clients/cli/general.c +++ b/clients/cli/general.c @@ -510,18 +510,17 @@ print_permissions (void *user_data) NmCli *nmc = user_data; gs_free_error GError *error = NULL; const char *fields_str = NULL; - NMClientPermission perm; - guint i; - gpointer permissions[NM_CLIENT_PERMISSION_LAST + 1]; + gpointer permissions[G_N_ELEMENTS (nm_auth_permission_sorted) + 1]; + int i; if (!nmc->required_fields || strcasecmp (nmc->required_fields, "common") == 0) { } else if (strcasecmp (nmc->required_fields, "all") == 0) { } else fields_str = nmc->required_fields; - for (i = 0, perm = NM_CLIENT_PERMISSION_NONE + 1; perm <= NM_CLIENT_PERMISSION_LAST; perm++) - permissions[i++] = GINT_TO_POINTER (perm); - permissions[i++] = NULL; + for (i = 0; i < (int) G_N_ELEMENTS (nm_auth_permission_sorted); i++) + permissions[i] = GINT_TO_POINTER (nm_auth_permission_sorted[i]); + permissions[i] = NULL; nm_cli_spawn_pager (nmc); diff --git a/clients/tests/test-client.check-on-disk/test_001.expected b/clients/tests/test-client.check-on-disk/test_001.expected index a7439bf183..25d4437bff 100644 --- a/clients/tests/test-client.check-on-disk/test_001.expected +++ b/clients/tests/test-client.check-on-disk/test_001.expected @@ -100,23 +100,23 @@ returncode: 0 stdout: 1350 bytes >>> PERMISSION VALUE -org.freedesktop.NetworkManager.enable-disable-network yes -org.freedesktop.NetworkManager.enable-disable-wifi yes -org.freedesktop.NetworkManager.enable-disable-wwan yes -org.freedesktop.NetworkManager.enable-disable-wimax yes -org.freedesktop.NetworkManager.sleep-wake no -org.freedesktop.NetworkManager.network-control yes -org.freedesktop.NetworkManager.wifi.share.protected yes -org.freedesktop.NetworkManager.wifi.share.open yes -org.freedesktop.NetworkManager.settings.modify.system yes -org.freedesktop.NetworkManager.settings.modify.own yes -org.freedesktop.NetworkManager.settings.modify.hostname yes -org.freedesktop.NetworkManager.settings.modify.global-dns no -org.freedesktop.NetworkManager.reload no org.freedesktop.NetworkManager.checkpoint-rollback unknown -org.freedesktop.NetworkManager.enable-disable-statistics unknown org.freedesktop.NetworkManager.enable-disable-connectivity-check unknown +org.freedesktop.NetworkManager.enable-disable-network yes +org.freedesktop.NetworkManager.enable-disable-statistics unknown +org.freedesktop.NetworkManager.enable-disable-wifi yes +org.freedesktop.NetworkManager.enable-disable-wimax yes +org.freedesktop.NetworkManager.enable-disable-wwan yes +org.freedesktop.NetworkManager.network-control yes +org.freedesktop.NetworkManager.reload no +org.freedesktop.NetworkManager.settings.modify.global-dns no +org.freedesktop.NetworkManager.settings.modify.hostname yes +org.freedesktop.NetworkManager.settings.modify.own yes +org.freedesktop.NetworkManager.settings.modify.system yes +org.freedesktop.NetworkManager.sleep-wake no org.freedesktop.NetworkManager.wifi.scan unknown +org.freedesktop.NetworkManager.wifi.share.open yes +org.freedesktop.NetworkManager.wifi.share.protected yes <<< size: 1513 @@ -127,23 +127,23 @@ returncode: 0 stdout: 1368 bytes >>> PERMISSION VALUE -org.freedesktop.NetworkManager.enable-disable-network tak -org.freedesktop.NetworkManager.enable-disable-wifi tak -org.freedesktop.NetworkManager.enable-disable-wwan tak -org.freedesktop.NetworkManager.enable-disable-wimax tak -org.freedesktop.NetworkManager.sleep-wake nie -org.freedesktop.NetworkManager.network-control tak -org.freedesktop.NetworkManager.wifi.share.protected tak -org.freedesktop.NetworkManager.wifi.share.open tak -org.freedesktop.NetworkManager.settings.modify.system tak -org.freedesktop.NetworkManager.settings.modify.own tak -org.freedesktop.NetworkManager.settings.modify.hostname tak -org.freedesktop.NetworkManager.settings.modify.global-dns nie -org.freedesktop.NetworkManager.reload nie org.freedesktop.NetworkManager.checkpoint-rollback nieznane -org.freedesktop.NetworkManager.enable-disable-statistics nieznane org.freedesktop.NetworkManager.enable-disable-connectivity-check nieznane +org.freedesktop.NetworkManager.enable-disable-network tak +org.freedesktop.NetworkManager.enable-disable-statistics nieznane +org.freedesktop.NetworkManager.enable-disable-wifi tak +org.freedesktop.NetworkManager.enable-disable-wimax tak +org.freedesktop.NetworkManager.enable-disable-wwan tak +org.freedesktop.NetworkManager.network-control tak +org.freedesktop.NetworkManager.reload nie +org.freedesktop.NetworkManager.settings.modify.global-dns nie +org.freedesktop.NetworkManager.settings.modify.hostname tak +org.freedesktop.NetworkManager.settings.modify.own tak +org.freedesktop.NetworkManager.settings.modify.system tak +org.freedesktop.NetworkManager.sleep-wake nie org.freedesktop.NetworkManager.wifi.scan nieznane +org.freedesktop.NetworkManager.wifi.share.open tak +org.freedesktop.NetworkManager.wifi.share.protected tak <<< size: 1614 @@ -154,23 +154,23 @@ returncode: 0 stdout: 1467 bytes >>> PERMISSION VALUE -org.freedesktop.NetworkManager.enable-disable-network yes -org.freedesktop.NetworkManager.enable-disable-wifi yes -org.freedesktop.NetworkManager.enable-disable-wwan yes -org.freedesktop.NetworkManager.enable-disable-wimax yes -org.freedesktop.NetworkManager.sleep-wake no -org.freedesktop.NetworkManager.network-control yes -org.freedesktop.NetworkManager.wifi.share.protected yes -org.freedesktop.NetworkManager.wifi.share.open yes -org.freedesktop.NetworkManager.settings.modify.system yes -org.freedesktop.NetworkManager.settings.modify.own yes -org.freedesktop.NetworkManager.settings.modify.hostname yes -org.freedesktop.NetworkManager.settings.modify.global-dns no -org.freedesktop.NetworkManager.reload no org.freedesktop.NetworkManager.checkpoint-rollback unknown -org.freedesktop.NetworkManager.enable-disable-statistics unknown org.freedesktop.NetworkManager.enable-disable-connectivity-check unknown +org.freedesktop.NetworkManager.enable-disable-network yes +org.freedesktop.NetworkManager.enable-disable-statistics unknown +org.freedesktop.NetworkManager.enable-disable-wifi yes +org.freedesktop.NetworkManager.enable-disable-wimax yes +org.freedesktop.NetworkManager.enable-disable-wwan yes +org.freedesktop.NetworkManager.network-control yes +org.freedesktop.NetworkManager.reload no +org.freedesktop.NetworkManager.settings.modify.global-dns no +org.freedesktop.NetworkManager.settings.modify.hostname yes +org.freedesktop.NetworkManager.settings.modify.own yes +org.freedesktop.NetworkManager.settings.modify.system yes +org.freedesktop.NetworkManager.sleep-wake no org.freedesktop.NetworkManager.wifi.scan unknown +org.freedesktop.NetworkManager.wifi.share.open yes +org.freedesktop.NetworkManager.wifi.share.protected yes <<< size: 1642 @@ -181,23 +181,23 @@ returncode: 0 stdout: 1485 bytes >>> PERMISSION VALUE -org.freedesktop.NetworkManager.enable-disable-network tak -org.freedesktop.NetworkManager.enable-disable-wifi tak -org.freedesktop.NetworkManager.enable-disable-wwan tak -org.freedesktop.NetworkManager.enable-disable-wimax tak -org.freedesktop.NetworkManager.sleep-wake nie -org.freedesktop.NetworkManager.network-control tak -org.freedesktop.NetworkManager.wifi.share.protected tak -org.freedesktop.NetworkManager.wifi.share.open tak -org.freedesktop.NetworkManager.settings.modify.system tak -org.freedesktop.NetworkManager.settings.modify.own tak -org.freedesktop.NetworkManager.settings.modify.hostname tak -org.freedesktop.NetworkManager.settings.modify.global-dns nie -org.freedesktop.NetworkManager.reload nie org.freedesktop.NetworkManager.checkpoint-rollback nieznane -org.freedesktop.NetworkManager.enable-disable-statistics nieznane org.freedesktop.NetworkManager.enable-disable-connectivity-check nieznane +org.freedesktop.NetworkManager.enable-disable-network tak +org.freedesktop.NetworkManager.enable-disable-statistics nieznane +org.freedesktop.NetworkManager.enable-disable-wifi tak +org.freedesktop.NetworkManager.enable-disable-wimax tak +org.freedesktop.NetworkManager.enable-disable-wwan tak +org.freedesktop.NetworkManager.network-control tak +org.freedesktop.NetworkManager.reload nie +org.freedesktop.NetworkManager.settings.modify.global-dns nie +org.freedesktop.NetworkManager.settings.modify.hostname tak +org.freedesktop.NetworkManager.settings.modify.own tak +org.freedesktop.NetworkManager.settings.modify.system tak +org.freedesktop.NetworkManager.sleep-wake nie org.freedesktop.NetworkManager.wifi.scan nieznane +org.freedesktop.NetworkManager.wifi.share.open tak +org.freedesktop.NetworkManager.wifi.share.protected tak <<< size: 1691 @@ -212,23 +212,23 @@ stdout: 1547 bytes ============================== PERMISSION VALUE --------------------------------------------------------------------------------------------------------- -org.freedesktop.NetworkManager.enable-disable-network yes -org.freedesktop.NetworkManager.enable-disable-wifi yes -org.freedesktop.NetworkManager.enable-disable-wwan yes -org.freedesktop.NetworkManager.enable-disable-wimax yes -org.freedesktop.NetworkManager.sleep-wake no -org.freedesktop.NetworkManager.network-control yes -org.freedesktop.NetworkManager.wifi.share.protected yes -org.freedesktop.NetworkManager.wifi.share.open yes -org.freedesktop.NetworkManager.settings.modify.system yes -org.freedesktop.NetworkManager.settings.modify.own yes -org.freedesktop.NetworkManager.settings.modify.hostname yes -org.freedesktop.NetworkManager.settings.modify.global-dns no -org.freedesktop.NetworkManager.reload no org.freedesktop.NetworkManager.checkpoint-rollback unknown -org.freedesktop.NetworkManager.enable-disable-statistics unknown org.freedesktop.NetworkManager.enable-disable-connectivity-check unknown +org.freedesktop.NetworkManager.enable-disable-network yes +org.freedesktop.NetworkManager.enable-disable-statistics unknown +org.freedesktop.NetworkManager.enable-disable-wifi yes +org.freedesktop.NetworkManager.enable-disable-wimax yes +org.freedesktop.NetworkManager.enable-disable-wwan yes +org.freedesktop.NetworkManager.network-control yes +org.freedesktop.NetworkManager.reload no +org.freedesktop.NetworkManager.settings.modify.global-dns no +org.freedesktop.NetworkManager.settings.modify.hostname yes +org.freedesktop.NetworkManager.settings.modify.own yes +org.freedesktop.NetworkManager.settings.modify.system yes +org.freedesktop.NetworkManager.sleep-wake no org.freedesktop.NetworkManager.wifi.scan unknown +org.freedesktop.NetworkManager.wifi.share.open yes +org.freedesktop.NetworkManager.wifi.share.protected yes <<< size: 1749 @@ -243,23 +243,23 @@ stdout: 1595 bytes ===================================== PERMISSION VALUE ----------------------------------------------------------------------------------------------------------------- -org.freedesktop.NetworkManager.enable-disable-network tak -org.freedesktop.NetworkManager.enable-disable-wifi tak -org.freedesktop.NetworkManager.enable-disable-wwan tak -org.freedesktop.NetworkManager.enable-disable-wimax tak -org.freedesktop.NetworkManager.sleep-wake nie -org.freedesktop.NetworkManager.network-control tak -org.freedesktop.NetworkManager.wifi.share.protected tak -org.freedesktop.NetworkManager.wifi.share.open tak -org.freedesktop.NetworkManager.settings.modify.system tak -org.freedesktop.NetworkManager.settings.modify.own tak -org.freedesktop.NetworkManager.settings.modify.hostname tak -org.freedesktop.NetworkManager.settings.modify.global-dns nie -org.freedesktop.NetworkManager.reload nie org.freedesktop.NetworkManager.checkpoint-rollback nieznane -org.freedesktop.NetworkManager.enable-disable-statistics nieznane org.freedesktop.NetworkManager.enable-disable-connectivity-check nieznane +org.freedesktop.NetworkManager.enable-disable-network tak +org.freedesktop.NetworkManager.enable-disable-statistics nieznane +org.freedesktop.NetworkManager.enable-disable-wifi tak +org.freedesktop.NetworkManager.enable-disable-wimax tak +org.freedesktop.NetworkManager.enable-disable-wwan tak +org.freedesktop.NetworkManager.network-control tak +org.freedesktop.NetworkManager.reload nie +org.freedesktop.NetworkManager.settings.modify.global-dns nie +org.freedesktop.NetworkManager.settings.modify.hostname tak +org.freedesktop.NetworkManager.settings.modify.own tak +org.freedesktop.NetworkManager.settings.modify.system tak +org.freedesktop.NetworkManager.sleep-wake nie org.freedesktop.NetworkManager.wifi.scan nieznane +org.freedesktop.NetworkManager.wifi.share.open tak +org.freedesktop.NetworkManager.wifi.share.protected tak <<< size: 1820 @@ -274,23 +274,23 @@ stdout: 1664 bytes ============================== PERMISSION VALUE --------------------------------------------------------------------------------------------------------- -org.freedesktop.NetworkManager.enable-disable-network yes -org.freedesktop.NetworkManager.enable-disable-wifi yes -org.freedesktop.NetworkManager.enable-disable-wwan yes -org.freedesktop.NetworkManager.enable-disable-wimax yes -org.freedesktop.NetworkManager.sleep-wake no -org.freedesktop.NetworkManager.network-control yes -org.freedesktop.NetworkManager.wifi.share.protected yes -org.freedesktop.NetworkManager.wifi.share.open yes -org.freedesktop.NetworkManager.settings.modify.system yes -org.freedesktop.NetworkManager.settings.modify.own yes -org.freedesktop.NetworkManager.settings.modify.hostname yes -org.freedesktop.NetworkManager.settings.modify.global-dns no -org.freedesktop.NetworkManager.reload no org.freedesktop.NetworkManager.checkpoint-rollback unknown -org.freedesktop.NetworkManager.enable-disable-statistics unknown org.freedesktop.NetworkManager.enable-disable-connectivity-check unknown +org.freedesktop.NetworkManager.enable-disable-network yes +org.freedesktop.NetworkManager.enable-disable-statistics unknown +org.freedesktop.NetworkManager.enable-disable-wifi yes +org.freedesktop.NetworkManager.enable-disable-wimax yes +org.freedesktop.NetworkManager.enable-disable-wwan yes +org.freedesktop.NetworkManager.network-control yes +org.freedesktop.NetworkManager.reload no +org.freedesktop.NetworkManager.settings.modify.global-dns no +org.freedesktop.NetworkManager.settings.modify.hostname yes +org.freedesktop.NetworkManager.settings.modify.own yes +org.freedesktop.NetworkManager.settings.modify.system yes +org.freedesktop.NetworkManager.sleep-wake no org.freedesktop.NetworkManager.wifi.scan unknown +org.freedesktop.NetworkManager.wifi.share.open yes +org.freedesktop.NetworkManager.wifi.share.protected yes <<< size: 1878 @@ -305,23 +305,23 @@ stdout: 1712 bytes ===================================== PERMISSION VALUE ----------------------------------------------------------------------------------------------------------------- -org.freedesktop.NetworkManager.enable-disable-network tak -org.freedesktop.NetworkManager.enable-disable-wifi tak -org.freedesktop.NetworkManager.enable-disable-wwan tak -org.freedesktop.NetworkManager.enable-disable-wimax tak -org.freedesktop.NetworkManager.sleep-wake nie -org.freedesktop.NetworkManager.network-control tak -org.freedesktop.NetworkManager.wifi.share.protected tak -org.freedesktop.NetworkManager.wifi.share.open tak -org.freedesktop.NetworkManager.settings.modify.system tak -org.freedesktop.NetworkManager.settings.modify.own tak -org.freedesktop.NetworkManager.settings.modify.hostname tak -org.freedesktop.NetworkManager.settings.modify.global-dns nie -org.freedesktop.NetworkManager.reload nie org.freedesktop.NetworkManager.checkpoint-rollback nieznane -org.freedesktop.NetworkManager.enable-disable-statistics nieznane org.freedesktop.NetworkManager.enable-disable-connectivity-check nieznane +org.freedesktop.NetworkManager.enable-disable-network tak +org.freedesktop.NetworkManager.enable-disable-statistics nieznane +org.freedesktop.NetworkManager.enable-disable-wifi tak +org.freedesktop.NetworkManager.enable-disable-wimax tak +org.freedesktop.NetworkManager.enable-disable-wwan tak +org.freedesktop.NetworkManager.network-control tak +org.freedesktop.NetworkManager.reload nie +org.freedesktop.NetworkManager.settings.modify.global-dns nie +org.freedesktop.NetworkManager.settings.modify.hostname tak +org.freedesktop.NetworkManager.settings.modify.own tak +org.freedesktop.NetworkManager.settings.modify.system tak +org.freedesktop.NetworkManager.sleep-wake nie org.freedesktop.NetworkManager.wifi.scan nieznane +org.freedesktop.NetworkManager.wifi.share.open tak +org.freedesktop.NetworkManager.wifi.share.protected tak <<< size: 1090 @@ -331,23 +331,23 @@ lang: C returncode: 0 stdout: 948 bytes >>> -org.freedesktop.NetworkManager.enable-disable-network:yes -org.freedesktop.NetworkManager.enable-disable-wifi:yes -org.freedesktop.NetworkManager.enable-disable-wwan:yes -org.freedesktop.NetworkManager.enable-disable-wimax:yes -org.freedesktop.NetworkManager.sleep-wake:no -org.freedesktop.NetworkManager.network-control:yes -org.freedesktop.NetworkManager.wifi.share.protected:yes -org.freedesktop.NetworkManager.wifi.share.open:yes -org.freedesktop.NetworkManager.settings.modify.system:yes -org.freedesktop.NetworkManager.settings.modify.own:yes -org.freedesktop.NetworkManager.settings.modify.hostname:yes -org.freedesktop.NetworkManager.settings.modify.global-dns:no -org.freedesktop.NetworkManager.reload:no org.freedesktop.NetworkManager.checkpoint-rollback:unknown -org.freedesktop.NetworkManager.enable-disable-statistics:unknown org.freedesktop.NetworkManager.enable-disable-connectivity-check:unknown +org.freedesktop.NetworkManager.enable-disable-network:yes +org.freedesktop.NetworkManager.enable-disable-statistics:unknown +org.freedesktop.NetworkManager.enable-disable-wifi:yes +org.freedesktop.NetworkManager.enable-disable-wimax:yes +org.freedesktop.NetworkManager.enable-disable-wwan:yes +org.freedesktop.NetworkManager.network-control:yes +org.freedesktop.NetworkManager.reload:no +org.freedesktop.NetworkManager.settings.modify.global-dns:no +org.freedesktop.NetworkManager.settings.modify.hostname:yes +org.freedesktop.NetworkManager.settings.modify.own:yes +org.freedesktop.NetworkManager.settings.modify.system:yes +org.freedesktop.NetworkManager.sleep-wake:no org.freedesktop.NetworkManager.wifi.scan:unknown +org.freedesktop.NetworkManager.wifi.share.open:yes +org.freedesktop.NetworkManager.wifi.share.protected:yes <<< size: 1100 @@ -357,23 +357,23 @@ lang: pl_PL.UTF-8 returncode: 0 stdout: 948 bytes >>> -org.freedesktop.NetworkManager.enable-disable-network:yes -org.freedesktop.NetworkManager.enable-disable-wifi:yes -org.freedesktop.NetworkManager.enable-disable-wwan:yes -org.freedesktop.NetworkManager.enable-disable-wimax:yes -org.freedesktop.NetworkManager.sleep-wake:no -org.freedesktop.NetworkManager.network-control:yes -org.freedesktop.NetworkManager.wifi.share.protected:yes -org.freedesktop.NetworkManager.wifi.share.open:yes -org.freedesktop.NetworkManager.settings.modify.system:yes -org.freedesktop.NetworkManager.settings.modify.own:yes -org.freedesktop.NetworkManager.settings.modify.hostname:yes -org.freedesktop.NetworkManager.settings.modify.global-dns:no -org.freedesktop.NetworkManager.reload:no org.freedesktop.NetworkManager.checkpoint-rollback:unknown -org.freedesktop.NetworkManager.enable-disable-statistics:unknown org.freedesktop.NetworkManager.enable-disable-connectivity-check:unknown +org.freedesktop.NetworkManager.enable-disable-network:yes +org.freedesktop.NetworkManager.enable-disable-statistics:unknown +org.freedesktop.NetworkManager.enable-disable-wifi:yes +org.freedesktop.NetworkManager.enable-disable-wimax:yes +org.freedesktop.NetworkManager.enable-disable-wwan:yes +org.freedesktop.NetworkManager.network-control:yes +org.freedesktop.NetworkManager.reload:no +org.freedesktop.NetworkManager.settings.modify.global-dns:no +org.freedesktop.NetworkManager.settings.modify.hostname:yes +org.freedesktop.NetworkManager.settings.modify.own:yes +org.freedesktop.NetworkManager.settings.modify.system:yes +org.freedesktop.NetworkManager.sleep-wake:no org.freedesktop.NetworkManager.wifi.scan:unknown +org.freedesktop.NetworkManager.wifi.share.open:yes +org.freedesktop.NetworkManager.wifi.share.protected:yes <<< size: 1220 @@ -383,23 +383,23 @@ lang: C returncode: 0 stdout: 1065 bytes >>> -org.freedesktop.NetworkManager.enable-disable-network:yes -org.freedesktop.NetworkManager.enable-disable-wifi:yes -org.freedesktop.NetworkManager.enable-disable-wwan:yes -org.freedesktop.NetworkManager.enable-disable-wimax:yes -org.freedesktop.NetworkManager.sleep-wake:no -org.freedesktop.NetworkManager.network-control:yes -org.freedesktop.NetworkManager.wifi.share.protected:yes -org.freedesktop.NetworkManager.wifi.share.open:yes -org.freedesktop.NetworkManager.settings.modify.system:yes -org.freedesktop.NetworkManager.settings.modify.own:yes -org.freedesktop.NetworkManager.settings.modify.hostname:yes -org.freedesktop.NetworkManager.settings.modify.global-dns:no -org.freedesktop.NetworkManager.reload:no org.freedesktop.NetworkManager.checkpoint-rollback:unknown -org.freedesktop.NetworkManager.enable-disable-statistics:unknown org.freedesktop.NetworkManager.enable-disable-connectivity-check:unknown +org.freedesktop.NetworkManager.enable-disable-network:yes +org.freedesktop.NetworkManager.enable-disable-statistics:unknown +org.freedesktop.NetworkManager.enable-disable-wifi:yes +org.freedesktop.NetworkManager.enable-disable-wimax:yes +org.freedesktop.NetworkManager.enable-disable-wwan:yes +org.freedesktop.NetworkManager.network-control:yes +org.freedesktop.NetworkManager.reload:no +org.freedesktop.NetworkManager.settings.modify.global-dns:no +org.freedesktop.NetworkManager.settings.modify.hostname:yes +org.freedesktop.NetworkManager.settings.modify.own:yes +org.freedesktop.NetworkManager.settings.modify.system:yes +org.freedesktop.NetworkManager.sleep-wake:no org.freedesktop.NetworkManager.wifi.scan:unknown +org.freedesktop.NetworkManager.wifi.share.open:yes +org.freedesktop.NetworkManager.wifi.share.protected:yes <<< size: 1230 @@ -409,23 +409,23 @@ lang: pl_PL.UTF-8 returncode: 0 stdout: 1065 bytes >>> -org.freedesktop.NetworkManager.enable-disable-network:yes -org.freedesktop.NetworkManager.enable-disable-wifi:yes -org.freedesktop.NetworkManager.enable-disable-wwan:yes -org.freedesktop.NetworkManager.enable-disable-wimax:yes -org.freedesktop.NetworkManager.sleep-wake:no -org.freedesktop.NetworkManager.network-control:yes -org.freedesktop.NetworkManager.wifi.share.protected:yes -org.freedesktop.NetworkManager.wifi.share.open:yes -org.freedesktop.NetworkManager.settings.modify.system:yes -org.freedesktop.NetworkManager.settings.modify.own:yes -org.freedesktop.NetworkManager.settings.modify.hostname:yes -org.freedesktop.NetworkManager.settings.modify.global-dns:no -org.freedesktop.NetworkManager.reload:no org.freedesktop.NetworkManager.checkpoint-rollback:unknown -org.freedesktop.NetworkManager.enable-disable-statistics:unknown org.freedesktop.NetworkManager.enable-disable-connectivity-check:unknown +org.freedesktop.NetworkManager.enable-disable-network:yes +org.freedesktop.NetworkManager.enable-disable-statistics:unknown +org.freedesktop.NetworkManager.enable-disable-wifi:yes +org.freedesktop.NetworkManager.enable-disable-wimax:yes +org.freedesktop.NetworkManager.enable-disable-wwan:yes +org.freedesktop.NetworkManager.network-control:yes +org.freedesktop.NetworkManager.reload:no +org.freedesktop.NetworkManager.settings.modify.global-dns:no +org.freedesktop.NetworkManager.settings.modify.hostname:yes +org.freedesktop.NetworkManager.settings.modify.own:yes +org.freedesktop.NetworkManager.settings.modify.system:yes +org.freedesktop.NetworkManager.sleep-wake:no org.freedesktop.NetworkManager.wifi.scan:unknown +org.freedesktop.NetworkManager.wifi.share.open:yes +org.freedesktop.NetworkManager.wifi.share.protected:yes <<< size: 1500 @@ -436,23 +436,23 @@ returncode: 0 stdout: 1350 bytes >>> PERMISSION VALUE -org.freedesktop.NetworkManager.enable-disable-network yes -org.freedesktop.NetworkManager.enable-disable-wifi yes -org.freedesktop.NetworkManager.enable-disable-wwan yes -org.freedesktop.NetworkManager.enable-disable-wimax yes -org.freedesktop.NetworkManager.sleep-wake no -org.freedesktop.NetworkManager.network-control yes -org.freedesktop.NetworkManager.wifi.share.protected yes -org.freedesktop.NetworkManager.wifi.share.open yes -org.freedesktop.NetworkManager.settings.modify.system yes -org.freedesktop.NetworkManager.settings.modify.own yes -org.freedesktop.NetworkManager.settings.modify.hostname yes -org.freedesktop.NetworkManager.settings.modify.global-dns no -org.freedesktop.NetworkManager.reload no org.freedesktop.NetworkManager.checkpoint-rollback unknown -org.freedesktop.NetworkManager.enable-disable-statistics unknown org.freedesktop.NetworkManager.enable-disable-connectivity-check unknown +org.freedesktop.NetworkManager.enable-disable-network yes +org.freedesktop.NetworkManager.enable-disable-statistics unknown +org.freedesktop.NetworkManager.enable-disable-wifi yes +org.freedesktop.NetworkManager.enable-disable-wimax yes +org.freedesktop.NetworkManager.enable-disable-wwan yes +org.freedesktop.NetworkManager.network-control yes +org.freedesktop.NetworkManager.reload no +org.freedesktop.NetworkManager.settings.modify.global-dns no +org.freedesktop.NetworkManager.settings.modify.hostname yes +org.freedesktop.NetworkManager.settings.modify.own yes +org.freedesktop.NetworkManager.settings.modify.system yes +org.freedesktop.NetworkManager.sleep-wake no org.freedesktop.NetworkManager.wifi.scan unknown +org.freedesktop.NetworkManager.wifi.share.open yes +org.freedesktop.NetworkManager.wifi.share.protected yes <<< size: 1528 @@ -463,23 +463,23 @@ returncode: 0 stdout: 1368 bytes >>> PERMISSION VALUE -org.freedesktop.NetworkManager.enable-disable-network tak -org.freedesktop.NetworkManager.enable-disable-wifi tak -org.freedesktop.NetworkManager.enable-disable-wwan tak -org.freedesktop.NetworkManager.enable-disable-wimax tak -org.freedesktop.NetworkManager.sleep-wake nie -org.freedesktop.NetworkManager.network-control tak -org.freedesktop.NetworkManager.wifi.share.protected tak -org.freedesktop.NetworkManager.wifi.share.open tak -org.freedesktop.NetworkManager.settings.modify.system tak -org.freedesktop.NetworkManager.settings.modify.own tak -org.freedesktop.NetworkManager.settings.modify.hostname tak -org.freedesktop.NetworkManager.settings.modify.global-dns nie -org.freedesktop.NetworkManager.reload nie org.freedesktop.NetworkManager.checkpoint-rollback nieznane -org.freedesktop.NetworkManager.enable-disable-statistics nieznane org.freedesktop.NetworkManager.enable-disable-connectivity-check nieznane +org.freedesktop.NetworkManager.enable-disable-network tak +org.freedesktop.NetworkManager.enable-disable-statistics nieznane +org.freedesktop.NetworkManager.enable-disable-wifi tak +org.freedesktop.NetworkManager.enable-disable-wimax tak +org.freedesktop.NetworkManager.enable-disable-wwan tak +org.freedesktop.NetworkManager.network-control tak +org.freedesktop.NetworkManager.reload nie +org.freedesktop.NetworkManager.settings.modify.global-dns nie +org.freedesktop.NetworkManager.settings.modify.hostname tak +org.freedesktop.NetworkManager.settings.modify.own tak +org.freedesktop.NetworkManager.settings.modify.system tak +org.freedesktop.NetworkManager.sleep-wake nie org.freedesktop.NetworkManager.wifi.scan nieznane +org.freedesktop.NetworkManager.wifi.share.open tak +org.freedesktop.NetworkManager.wifi.share.protected tak <<< size: 1629 @@ -490,23 +490,23 @@ returncode: 0 stdout: 1467 bytes >>> PERMISSION VALUE -org.freedesktop.NetworkManager.enable-disable-network yes -org.freedesktop.NetworkManager.enable-disable-wifi yes -org.freedesktop.NetworkManager.enable-disable-wwan yes -org.freedesktop.NetworkManager.enable-disable-wimax yes -org.freedesktop.NetworkManager.sleep-wake no -org.freedesktop.NetworkManager.network-control yes -org.freedesktop.NetworkManager.wifi.share.protected yes -org.freedesktop.NetworkManager.wifi.share.open yes -org.freedesktop.NetworkManager.settings.modify.system yes -org.freedesktop.NetworkManager.settings.modify.own yes -org.freedesktop.NetworkManager.settings.modify.hostname yes -org.freedesktop.NetworkManager.settings.modify.global-dns no -org.freedesktop.NetworkManager.reload no org.freedesktop.NetworkManager.checkpoint-rollback unknown -org.freedesktop.NetworkManager.enable-disable-statistics unknown org.freedesktop.NetworkManager.enable-disable-connectivity-check unknown +org.freedesktop.NetworkManager.enable-disable-network yes +org.freedesktop.NetworkManager.enable-disable-statistics unknown +org.freedesktop.NetworkManager.enable-disable-wifi yes +org.freedesktop.NetworkManager.enable-disable-wimax yes +org.freedesktop.NetworkManager.enable-disable-wwan yes +org.freedesktop.NetworkManager.network-control yes +org.freedesktop.NetworkManager.reload no +org.freedesktop.NetworkManager.settings.modify.global-dns no +org.freedesktop.NetworkManager.settings.modify.hostname yes +org.freedesktop.NetworkManager.settings.modify.own yes +org.freedesktop.NetworkManager.settings.modify.system yes +org.freedesktop.NetworkManager.sleep-wake no org.freedesktop.NetworkManager.wifi.scan unknown +org.freedesktop.NetworkManager.wifi.share.open yes +org.freedesktop.NetworkManager.wifi.share.protected yes <<< size: 1657 @@ -517,23 +517,23 @@ returncode: 0 stdout: 1485 bytes >>> PERMISSION VALUE -org.freedesktop.NetworkManager.enable-disable-network tak -org.freedesktop.NetworkManager.enable-disable-wifi tak -org.freedesktop.NetworkManager.enable-disable-wwan tak -org.freedesktop.NetworkManager.enable-disable-wimax tak -org.freedesktop.NetworkManager.sleep-wake nie -org.freedesktop.NetworkManager.network-control tak -org.freedesktop.NetworkManager.wifi.share.protected tak -org.freedesktop.NetworkManager.wifi.share.open tak -org.freedesktop.NetworkManager.settings.modify.system tak -org.freedesktop.NetworkManager.settings.modify.own tak -org.freedesktop.NetworkManager.settings.modify.hostname tak -org.freedesktop.NetworkManager.settings.modify.global-dns nie -org.freedesktop.NetworkManager.reload nie org.freedesktop.NetworkManager.checkpoint-rollback nieznane -org.freedesktop.NetworkManager.enable-disable-statistics nieznane org.freedesktop.NetworkManager.enable-disable-connectivity-check nieznane +org.freedesktop.NetworkManager.enable-disable-network tak +org.freedesktop.NetworkManager.enable-disable-statistics nieznane +org.freedesktop.NetworkManager.enable-disable-wifi tak +org.freedesktop.NetworkManager.enable-disable-wimax tak +org.freedesktop.NetworkManager.enable-disable-wwan tak +org.freedesktop.NetworkManager.network-control tak +org.freedesktop.NetworkManager.reload nie +org.freedesktop.NetworkManager.settings.modify.global-dns nie +org.freedesktop.NetworkManager.settings.modify.hostname tak +org.freedesktop.NetworkManager.settings.modify.own tak +org.freedesktop.NetworkManager.settings.modify.system tak +org.freedesktop.NetworkManager.sleep-wake nie org.freedesktop.NetworkManager.wifi.scan nieznane +org.freedesktop.NetworkManager.wifi.share.open tak +org.freedesktop.NetworkManager.wifi.share.protected tak <<< size: 1706 @@ -548,23 +548,23 @@ stdout: 1547 bytes ============================== PERMISSION VALUE --------------------------------------------------------------------------------------------------------- -org.freedesktop.NetworkManager.enable-disable-network yes -org.freedesktop.NetworkManager.enable-disable-wifi yes -org.freedesktop.NetworkManager.enable-disable-wwan yes -org.freedesktop.NetworkManager.enable-disable-wimax yes -org.freedesktop.NetworkManager.sleep-wake no -org.freedesktop.NetworkManager.network-control yes -org.freedesktop.NetworkManager.wifi.share.protected yes -org.freedesktop.NetworkManager.wifi.share.open yes -org.freedesktop.NetworkManager.settings.modify.system yes -org.freedesktop.NetworkManager.settings.modify.own yes -org.freedesktop.NetworkManager.settings.modify.hostname yes -org.freedesktop.NetworkManager.settings.modify.global-dns no -org.freedesktop.NetworkManager.reload no org.freedesktop.NetworkManager.checkpoint-rollback unknown -org.freedesktop.NetworkManager.enable-disable-statistics unknown org.freedesktop.NetworkManager.enable-disable-connectivity-check unknown +org.freedesktop.NetworkManager.enable-disable-network yes +org.freedesktop.NetworkManager.enable-disable-statistics unknown +org.freedesktop.NetworkManager.enable-disable-wifi yes +org.freedesktop.NetworkManager.enable-disable-wimax yes +org.freedesktop.NetworkManager.enable-disable-wwan yes +org.freedesktop.NetworkManager.network-control yes +org.freedesktop.NetworkManager.reload no +org.freedesktop.NetworkManager.settings.modify.global-dns no +org.freedesktop.NetworkManager.settings.modify.hostname yes +org.freedesktop.NetworkManager.settings.modify.own yes +org.freedesktop.NetworkManager.settings.modify.system yes +org.freedesktop.NetworkManager.sleep-wake no org.freedesktop.NetworkManager.wifi.scan unknown +org.freedesktop.NetworkManager.wifi.share.open yes +org.freedesktop.NetworkManager.wifi.share.protected yes <<< size: 1764 @@ -579,23 +579,23 @@ stdout: 1595 bytes ===================================== PERMISSION VALUE ----------------------------------------------------------------------------------------------------------------- -org.freedesktop.NetworkManager.enable-disable-network tak -org.freedesktop.NetworkManager.enable-disable-wifi tak -org.freedesktop.NetworkManager.enable-disable-wwan tak -org.freedesktop.NetworkManager.enable-disable-wimax tak -org.freedesktop.NetworkManager.sleep-wake nie -org.freedesktop.NetworkManager.network-control tak -org.freedesktop.NetworkManager.wifi.share.protected tak -org.freedesktop.NetworkManager.wifi.share.open tak -org.freedesktop.NetworkManager.settings.modify.system tak -org.freedesktop.NetworkManager.settings.modify.own tak -org.freedesktop.NetworkManager.settings.modify.hostname tak -org.freedesktop.NetworkManager.settings.modify.global-dns nie -org.freedesktop.NetworkManager.reload nie org.freedesktop.NetworkManager.checkpoint-rollback nieznane -org.freedesktop.NetworkManager.enable-disable-statistics nieznane org.freedesktop.NetworkManager.enable-disable-connectivity-check nieznane +org.freedesktop.NetworkManager.enable-disable-network tak +org.freedesktop.NetworkManager.enable-disable-statistics nieznane +org.freedesktop.NetworkManager.enable-disable-wifi tak +org.freedesktop.NetworkManager.enable-disable-wimax tak +org.freedesktop.NetworkManager.enable-disable-wwan tak +org.freedesktop.NetworkManager.network-control tak +org.freedesktop.NetworkManager.reload nie +org.freedesktop.NetworkManager.settings.modify.global-dns nie +org.freedesktop.NetworkManager.settings.modify.hostname tak +org.freedesktop.NetworkManager.settings.modify.own tak +org.freedesktop.NetworkManager.settings.modify.system tak +org.freedesktop.NetworkManager.sleep-wake nie org.freedesktop.NetworkManager.wifi.scan nieznane +org.freedesktop.NetworkManager.wifi.share.open tak +org.freedesktop.NetworkManager.wifi.share.protected tak <<< size: 1835 @@ -610,23 +610,23 @@ stdout: 1664 bytes ============================== PERMISSION VALUE --------------------------------------------------------------------------------------------------------- -org.freedesktop.NetworkManager.enable-disable-network yes -org.freedesktop.NetworkManager.enable-disable-wifi yes -org.freedesktop.NetworkManager.enable-disable-wwan yes -org.freedesktop.NetworkManager.enable-disable-wimax yes -org.freedesktop.NetworkManager.sleep-wake no -org.freedesktop.NetworkManager.network-control yes -org.freedesktop.NetworkManager.wifi.share.protected yes -org.freedesktop.NetworkManager.wifi.share.open yes -org.freedesktop.NetworkManager.settings.modify.system yes -org.freedesktop.NetworkManager.settings.modify.own yes -org.freedesktop.NetworkManager.settings.modify.hostname yes -org.freedesktop.NetworkManager.settings.modify.global-dns no -org.freedesktop.NetworkManager.reload no org.freedesktop.NetworkManager.checkpoint-rollback unknown -org.freedesktop.NetworkManager.enable-disable-statistics unknown org.freedesktop.NetworkManager.enable-disable-connectivity-check unknown +org.freedesktop.NetworkManager.enable-disable-network yes +org.freedesktop.NetworkManager.enable-disable-statistics unknown +org.freedesktop.NetworkManager.enable-disable-wifi yes +org.freedesktop.NetworkManager.enable-disable-wimax yes +org.freedesktop.NetworkManager.enable-disable-wwan yes +org.freedesktop.NetworkManager.network-control yes +org.freedesktop.NetworkManager.reload no +org.freedesktop.NetworkManager.settings.modify.global-dns no +org.freedesktop.NetworkManager.settings.modify.hostname yes +org.freedesktop.NetworkManager.settings.modify.own yes +org.freedesktop.NetworkManager.settings.modify.system yes +org.freedesktop.NetworkManager.sleep-wake no org.freedesktop.NetworkManager.wifi.scan unknown +org.freedesktop.NetworkManager.wifi.share.open yes +org.freedesktop.NetworkManager.wifi.share.protected yes <<< size: 1893 @@ -641,23 +641,23 @@ stdout: 1712 bytes ===================================== PERMISSION VALUE ----------------------------------------------------------------------------------------------------------------- -org.freedesktop.NetworkManager.enable-disable-network tak -org.freedesktop.NetworkManager.enable-disable-wifi tak -org.freedesktop.NetworkManager.enable-disable-wwan tak -org.freedesktop.NetworkManager.enable-disable-wimax tak -org.freedesktop.NetworkManager.sleep-wake nie -org.freedesktop.NetworkManager.network-control tak -org.freedesktop.NetworkManager.wifi.share.protected tak -org.freedesktop.NetworkManager.wifi.share.open tak -org.freedesktop.NetworkManager.settings.modify.system tak -org.freedesktop.NetworkManager.settings.modify.own tak -org.freedesktop.NetworkManager.settings.modify.hostname tak -org.freedesktop.NetworkManager.settings.modify.global-dns nie -org.freedesktop.NetworkManager.reload nie org.freedesktop.NetworkManager.checkpoint-rollback nieznane -org.freedesktop.NetworkManager.enable-disable-statistics nieznane org.freedesktop.NetworkManager.enable-disable-connectivity-check nieznane +org.freedesktop.NetworkManager.enable-disable-network tak +org.freedesktop.NetworkManager.enable-disable-statistics nieznane +org.freedesktop.NetworkManager.enable-disable-wifi tak +org.freedesktop.NetworkManager.enable-disable-wimax tak +org.freedesktop.NetworkManager.enable-disable-wwan tak +org.freedesktop.NetworkManager.network-control tak +org.freedesktop.NetworkManager.reload nie +org.freedesktop.NetworkManager.settings.modify.global-dns nie +org.freedesktop.NetworkManager.settings.modify.hostname tak +org.freedesktop.NetworkManager.settings.modify.own tak +org.freedesktop.NetworkManager.settings.modify.system tak +org.freedesktop.NetworkManager.sleep-wake nie org.freedesktop.NetworkManager.wifi.scan nieznane +org.freedesktop.NetworkManager.wifi.share.open tak +org.freedesktop.NetworkManager.wifi.share.protected tak <<< size: 1105 @@ -667,23 +667,23 @@ lang: C returncode: 0 stdout: 948 bytes >>> -org.freedesktop.NetworkManager.enable-disable-network:yes -org.freedesktop.NetworkManager.enable-disable-wifi:yes -org.freedesktop.NetworkManager.enable-disable-wwan:yes -org.freedesktop.NetworkManager.enable-disable-wimax:yes -org.freedesktop.NetworkManager.sleep-wake:no -org.freedesktop.NetworkManager.network-control:yes -org.freedesktop.NetworkManager.wifi.share.protected:yes -org.freedesktop.NetworkManager.wifi.share.open:yes -org.freedesktop.NetworkManager.settings.modify.system:yes -org.freedesktop.NetworkManager.settings.modify.own:yes -org.freedesktop.NetworkManager.settings.modify.hostname:yes -org.freedesktop.NetworkManager.settings.modify.global-dns:no -org.freedesktop.NetworkManager.reload:no org.freedesktop.NetworkManager.checkpoint-rollback:unknown -org.freedesktop.NetworkManager.enable-disable-statistics:unknown org.freedesktop.NetworkManager.enable-disable-connectivity-check:unknown +org.freedesktop.NetworkManager.enable-disable-network:yes +org.freedesktop.NetworkManager.enable-disable-statistics:unknown +org.freedesktop.NetworkManager.enable-disable-wifi:yes +org.freedesktop.NetworkManager.enable-disable-wimax:yes +org.freedesktop.NetworkManager.enable-disable-wwan:yes +org.freedesktop.NetworkManager.network-control:yes +org.freedesktop.NetworkManager.reload:no +org.freedesktop.NetworkManager.settings.modify.global-dns:no +org.freedesktop.NetworkManager.settings.modify.hostname:yes +org.freedesktop.NetworkManager.settings.modify.own:yes +org.freedesktop.NetworkManager.settings.modify.system:yes +org.freedesktop.NetworkManager.sleep-wake:no org.freedesktop.NetworkManager.wifi.scan:unknown +org.freedesktop.NetworkManager.wifi.share.open:yes +org.freedesktop.NetworkManager.wifi.share.protected:yes <<< size: 1115 @@ -693,23 +693,23 @@ lang: pl_PL.UTF-8 returncode: 0 stdout: 948 bytes >>> -org.freedesktop.NetworkManager.enable-disable-network:yes -org.freedesktop.NetworkManager.enable-disable-wifi:yes -org.freedesktop.NetworkManager.enable-disable-wwan:yes -org.freedesktop.NetworkManager.enable-disable-wimax:yes -org.freedesktop.NetworkManager.sleep-wake:no -org.freedesktop.NetworkManager.network-control:yes -org.freedesktop.NetworkManager.wifi.share.protected:yes -org.freedesktop.NetworkManager.wifi.share.open:yes -org.freedesktop.NetworkManager.settings.modify.system:yes -org.freedesktop.NetworkManager.settings.modify.own:yes -org.freedesktop.NetworkManager.settings.modify.hostname:yes -org.freedesktop.NetworkManager.settings.modify.global-dns:no -org.freedesktop.NetworkManager.reload:no org.freedesktop.NetworkManager.checkpoint-rollback:unknown -org.freedesktop.NetworkManager.enable-disable-statistics:unknown org.freedesktop.NetworkManager.enable-disable-connectivity-check:unknown +org.freedesktop.NetworkManager.enable-disable-network:yes +org.freedesktop.NetworkManager.enable-disable-statistics:unknown +org.freedesktop.NetworkManager.enable-disable-wifi:yes +org.freedesktop.NetworkManager.enable-disable-wimax:yes +org.freedesktop.NetworkManager.enable-disable-wwan:yes +org.freedesktop.NetworkManager.network-control:yes +org.freedesktop.NetworkManager.reload:no +org.freedesktop.NetworkManager.settings.modify.global-dns:no +org.freedesktop.NetworkManager.settings.modify.hostname:yes +org.freedesktop.NetworkManager.settings.modify.own:yes +org.freedesktop.NetworkManager.settings.modify.system:yes +org.freedesktop.NetworkManager.sleep-wake:no org.freedesktop.NetworkManager.wifi.scan:unknown +org.freedesktop.NetworkManager.wifi.share.open:yes +org.freedesktop.NetworkManager.wifi.share.protected:yes <<< size: 1235 @@ -719,23 +719,23 @@ lang: C returncode: 0 stdout: 1065 bytes >>> -org.freedesktop.NetworkManager.enable-disable-network:yes -org.freedesktop.NetworkManager.enable-disable-wifi:yes -org.freedesktop.NetworkManager.enable-disable-wwan:yes -org.freedesktop.NetworkManager.enable-disable-wimax:yes -org.freedesktop.NetworkManager.sleep-wake:no -org.freedesktop.NetworkManager.network-control:yes -org.freedesktop.NetworkManager.wifi.share.protected:yes -org.freedesktop.NetworkManager.wifi.share.open:yes -org.freedesktop.NetworkManager.settings.modify.system:yes -org.freedesktop.NetworkManager.settings.modify.own:yes -org.freedesktop.NetworkManager.settings.modify.hostname:yes -org.freedesktop.NetworkManager.settings.modify.global-dns:no -org.freedesktop.NetworkManager.reload:no org.freedesktop.NetworkManager.checkpoint-rollback:unknown -org.freedesktop.NetworkManager.enable-disable-statistics:unknown org.freedesktop.NetworkManager.enable-disable-connectivity-check:unknown +org.freedesktop.NetworkManager.enable-disable-network:yes +org.freedesktop.NetworkManager.enable-disable-statistics:unknown +org.freedesktop.NetworkManager.enable-disable-wifi:yes +org.freedesktop.NetworkManager.enable-disable-wimax:yes +org.freedesktop.NetworkManager.enable-disable-wwan:yes +org.freedesktop.NetworkManager.network-control:yes +org.freedesktop.NetworkManager.reload:no +org.freedesktop.NetworkManager.settings.modify.global-dns:no +org.freedesktop.NetworkManager.settings.modify.hostname:yes +org.freedesktop.NetworkManager.settings.modify.own:yes +org.freedesktop.NetworkManager.settings.modify.system:yes +org.freedesktop.NetworkManager.sleep-wake:no org.freedesktop.NetworkManager.wifi.scan:unknown +org.freedesktop.NetworkManager.wifi.share.open:yes +org.freedesktop.NetworkManager.wifi.share.protected:yes <<< size: 1245 @@ -745,23 +745,23 @@ lang: pl_PL.UTF-8 returncode: 0 stdout: 1065 bytes >>> -org.freedesktop.NetworkManager.enable-disable-network:yes -org.freedesktop.NetworkManager.enable-disable-wifi:yes -org.freedesktop.NetworkManager.enable-disable-wwan:yes -org.freedesktop.NetworkManager.enable-disable-wimax:yes -org.freedesktop.NetworkManager.sleep-wake:no -org.freedesktop.NetworkManager.network-control:yes -org.freedesktop.NetworkManager.wifi.share.protected:yes -org.freedesktop.NetworkManager.wifi.share.open:yes -org.freedesktop.NetworkManager.settings.modify.system:yes -org.freedesktop.NetworkManager.settings.modify.own:yes -org.freedesktop.NetworkManager.settings.modify.hostname:yes -org.freedesktop.NetworkManager.settings.modify.global-dns:no -org.freedesktop.NetworkManager.reload:no org.freedesktop.NetworkManager.checkpoint-rollback:unknown -org.freedesktop.NetworkManager.enable-disable-statistics:unknown org.freedesktop.NetworkManager.enable-disable-connectivity-check:unknown +org.freedesktop.NetworkManager.enable-disable-network:yes +org.freedesktop.NetworkManager.enable-disable-statistics:unknown +org.freedesktop.NetworkManager.enable-disable-wifi:yes +org.freedesktop.NetworkManager.enable-disable-wimax:yes +org.freedesktop.NetworkManager.enable-disable-wwan:yes +org.freedesktop.NetworkManager.network-control:yes +org.freedesktop.NetworkManager.reload:no +org.freedesktop.NetworkManager.settings.modify.global-dns:no +org.freedesktop.NetworkManager.settings.modify.hostname:yes +org.freedesktop.NetworkManager.settings.modify.own:yes +org.freedesktop.NetworkManager.settings.modify.system:yes +org.freedesktop.NetworkManager.sleep-wake:no org.freedesktop.NetworkManager.wifi.scan:unknown +org.freedesktop.NetworkManager.wifi.share.open:yes +org.freedesktop.NetworkManager.wifi.share.protected:yes <<< size: 2460 @@ -771,40 +771,40 @@ lang: C returncode: 0 stdout: 2308 bytes >>> -PERMISSION: org.freedesktop.NetworkManager.enable-disable-network -VALUE: yes -PERMISSION: org.freedesktop.NetworkManager.enable-disable-wifi -VALUE: yes -PERMISSION: org.freedesktop.NetworkManager.enable-disable-wwan -VALUE: yes -PERMISSION: org.freedesktop.NetworkManager.enable-disable-wimax -VALUE: yes -PERMISSION: org.freedesktop.NetworkManager.sleep-wake -VALUE: no -PERMISSION: org.freedesktop.NetworkManager.network-control -VALUE: yes -PERMISSION: org.freedesktop.NetworkManager.wifi.share.protected -VALUE: yes -PERMISSION: org.freedesktop.NetworkManager.wifi.share.open -VALUE: yes -PERMISSION: org.freedesktop.NetworkManager.settings.modify.system -VALUE: yes -PERMISSION: org.freedesktop.NetworkManager.settings.modify.own -VALUE: yes -PERMISSION: org.freedesktop.NetworkManager.settings.modify.hostname -VALUE: yes -PERMISSION: org.freedesktop.NetworkManager.settings.modify.global-dns -VALUE: no -PERMISSION: org.freedesktop.NetworkManager.reload -VALUE: no PERMISSION: org.freedesktop.NetworkManager.checkpoint-rollback VALUE: unknown -PERMISSION: org.freedesktop.NetworkManager.enable-disable-statistics -VALUE: unknown PERMISSION: org.freedesktop.NetworkManager.enable-disable-connectivity-check VALUE: unknown +PERMISSION: org.freedesktop.NetworkManager.enable-disable-network +VALUE: yes +PERMISSION: org.freedesktop.NetworkManager.enable-disable-statistics +VALUE: unknown +PERMISSION: org.freedesktop.NetworkManager.enable-disable-wifi +VALUE: yes +PERMISSION: org.freedesktop.NetworkManager.enable-disable-wimax +VALUE: yes +PERMISSION: org.freedesktop.NetworkManager.enable-disable-wwan +VALUE: yes +PERMISSION: org.freedesktop.NetworkManager.network-control +VALUE: yes +PERMISSION: org.freedesktop.NetworkManager.reload +VALUE: no +PERMISSION: org.freedesktop.NetworkManager.settings.modify.global-dns +VALUE: no +PERMISSION: org.freedesktop.NetworkManager.settings.modify.hostname +VALUE: yes +PERMISSION: org.freedesktop.NetworkManager.settings.modify.own +VALUE: yes +PERMISSION: org.freedesktop.NetworkManager.settings.modify.system +VALUE: yes +PERMISSION: org.freedesktop.NetworkManager.sleep-wake +VALUE: no PERMISSION: org.freedesktop.NetworkManager.wifi.scan VALUE: unknown +PERMISSION: org.freedesktop.NetworkManager.wifi.share.open +VALUE: yes +PERMISSION: org.freedesktop.NetworkManager.wifi.share.protected +VALUE: yes <<< size: 2477 @@ -814,40 +814,40 @@ lang: pl_PL.UTF-8 returncode: 0 stdout: 2315 bytes >>> -PERMISSION: org.freedesktop.NetworkManager.enable-disable-network -VALUE: tak -PERMISSION: org.freedesktop.NetworkManager.enable-disable-wifi -VALUE: tak -PERMISSION: org.freedesktop.NetworkManager.enable-disable-wwan -VALUE: tak -PERMISSION: org.freedesktop.NetworkManager.enable-disable-wimax -VALUE: tak -PERMISSION: org.freedesktop.NetworkManager.sleep-wake -VALUE: nie -PERMISSION: org.freedesktop.NetworkManager.network-control -VALUE: tak -PERMISSION: org.freedesktop.NetworkManager.wifi.share.protected -VALUE: tak -PERMISSION: org.freedesktop.NetworkManager.wifi.share.open -VALUE: tak -PERMISSION: org.freedesktop.NetworkManager.settings.modify.system -VALUE: tak -PERMISSION: org.freedesktop.NetworkManager.settings.modify.own -VALUE: tak -PERMISSION: org.freedesktop.NetworkManager.settings.modify.hostname -VALUE: tak -PERMISSION: org.freedesktop.NetworkManager.settings.modify.global-dns -VALUE: nie -PERMISSION: org.freedesktop.NetworkManager.reload -VALUE: nie PERMISSION: org.freedesktop.NetworkManager.checkpoint-rollback VALUE: nieznane -PERMISSION: org.freedesktop.NetworkManager.enable-disable-statistics -VALUE: nieznane PERMISSION: org.freedesktop.NetworkManager.enable-disable-connectivity-check VALUE: nieznane +PERMISSION: org.freedesktop.NetworkManager.enable-disable-network +VALUE: tak +PERMISSION: org.freedesktop.NetworkManager.enable-disable-statistics +VALUE: nieznane +PERMISSION: org.freedesktop.NetworkManager.enable-disable-wifi +VALUE: tak +PERMISSION: org.freedesktop.NetworkManager.enable-disable-wimax +VALUE: tak +PERMISSION: org.freedesktop.NetworkManager.enable-disable-wwan +VALUE: tak +PERMISSION: org.freedesktop.NetworkManager.network-control +VALUE: tak +PERMISSION: org.freedesktop.NetworkManager.reload +VALUE: nie +PERMISSION: org.freedesktop.NetworkManager.settings.modify.global-dns +VALUE: nie +PERMISSION: org.freedesktop.NetworkManager.settings.modify.hostname +VALUE: tak +PERMISSION: org.freedesktop.NetworkManager.settings.modify.own +VALUE: tak +PERMISSION: org.freedesktop.NetworkManager.settings.modify.system +VALUE: tak +PERMISSION: org.freedesktop.NetworkManager.sleep-wake +VALUE: nie PERMISSION: org.freedesktop.NetworkManager.wifi.scan VALUE: nieznane +PERMISSION: org.freedesktop.NetworkManager.wifi.share.open +VALUE: tak +PERMISSION: org.freedesktop.NetworkManager.wifi.share.protected +VALUE: tak <<< size: 2589 @@ -857,40 +857,40 @@ lang: C returncode: 0 stdout: 2425 bytes >>> -PERMISSION: org.freedesktop.NetworkManager.enable-disable-network -VALUE: yes -PERMISSION: org.freedesktop.NetworkManager.enable-disable-wifi -VALUE: yes -PERMISSION: org.freedesktop.NetworkManager.enable-disable-wwan -VALUE: yes -PERMISSION: org.freedesktop.NetworkManager.enable-disable-wimax -VALUE: yes -PERMISSION: org.freedesktop.NetworkManager.sleep-wake -VALUE: no -PERMISSION: org.freedesktop.NetworkManager.network-control -VALUE: yes -PERMISSION: org.freedesktop.NetworkManager.wifi.share.protected -VALUE: yes -PERMISSION: org.freedesktop.NetworkManager.wifi.share.open -VALUE: yes -PERMISSION: org.freedesktop.NetworkManager.settings.modify.system -VALUE: yes -PERMISSION: org.freedesktop.NetworkManager.settings.modify.own -VALUE: yes -PERMISSION: org.freedesktop.NetworkManager.settings.modify.hostname -VALUE: yes -PERMISSION: org.freedesktop.NetworkManager.settings.modify.global-dns -VALUE: no -PERMISSION: org.freedesktop.NetworkManager.reload -VALUE: no PERMISSION: org.freedesktop.NetworkManager.checkpoint-rollback VALUE: unknown -PERMISSION: org.freedesktop.NetworkManager.enable-disable-statistics -VALUE: unknown PERMISSION: org.freedesktop.NetworkManager.enable-disable-connectivity-check VALUE: unknown +PERMISSION: org.freedesktop.NetworkManager.enable-disable-network +VALUE: yes +PERMISSION: org.freedesktop.NetworkManager.enable-disable-statistics +VALUE: unknown +PERMISSION: org.freedesktop.NetworkManager.enable-disable-wifi +VALUE: yes +PERMISSION: org.freedesktop.NetworkManager.enable-disable-wimax +VALUE: yes +PERMISSION: org.freedesktop.NetworkManager.enable-disable-wwan +VALUE: yes +PERMISSION: org.freedesktop.NetworkManager.network-control +VALUE: yes +PERMISSION: org.freedesktop.NetworkManager.reload +VALUE: no +PERMISSION: org.freedesktop.NetworkManager.settings.modify.global-dns +VALUE: no +PERMISSION: org.freedesktop.NetworkManager.settings.modify.hostname +VALUE: yes +PERMISSION: org.freedesktop.NetworkManager.settings.modify.own +VALUE: yes +PERMISSION: org.freedesktop.NetworkManager.settings.modify.system +VALUE: yes +PERMISSION: org.freedesktop.NetworkManager.sleep-wake +VALUE: no PERMISSION: org.freedesktop.NetworkManager.wifi.scan VALUE: unknown +PERMISSION: org.freedesktop.NetworkManager.wifi.share.open +VALUE: yes +PERMISSION: org.freedesktop.NetworkManager.wifi.share.protected +VALUE: yes <<< size: 2606 @@ -900,40 +900,40 @@ lang: pl_PL.UTF-8 returncode: 0 stdout: 2432 bytes >>> -PERMISSION: org.freedesktop.NetworkManager.enable-disable-network -VALUE: tak -PERMISSION: org.freedesktop.NetworkManager.enable-disable-wifi -VALUE: tak -PERMISSION: org.freedesktop.NetworkManager.enable-disable-wwan -VALUE: tak -PERMISSION: org.freedesktop.NetworkManager.enable-disable-wimax -VALUE: tak -PERMISSION: org.freedesktop.NetworkManager.sleep-wake -VALUE: nie -PERMISSION: org.freedesktop.NetworkManager.network-control -VALUE: tak -PERMISSION: org.freedesktop.NetworkManager.wifi.share.protected -VALUE: tak -PERMISSION: org.freedesktop.NetworkManager.wifi.share.open -VALUE: tak -PERMISSION: org.freedesktop.NetworkManager.settings.modify.system -VALUE: tak -PERMISSION: org.freedesktop.NetworkManager.settings.modify.own -VALUE: tak -PERMISSION: org.freedesktop.NetworkManager.settings.modify.hostname -VALUE: tak -PERMISSION: org.freedesktop.NetworkManager.settings.modify.global-dns -VALUE: nie -PERMISSION: org.freedesktop.NetworkManager.reload -VALUE: nie PERMISSION: org.freedesktop.NetworkManager.checkpoint-rollback VALUE: nieznane -PERMISSION: org.freedesktop.NetworkManager.enable-disable-statistics -VALUE: nieznane PERMISSION: org.freedesktop.NetworkManager.enable-disable-connectivity-check VALUE: nieznane +PERMISSION: org.freedesktop.NetworkManager.enable-disable-network +VALUE: tak +PERMISSION: org.freedesktop.NetworkManager.enable-disable-statistics +VALUE: nieznane +PERMISSION: org.freedesktop.NetworkManager.enable-disable-wifi +VALUE: tak +PERMISSION: org.freedesktop.NetworkManager.enable-disable-wimax +VALUE: tak +PERMISSION: org.freedesktop.NetworkManager.enable-disable-wwan +VALUE: tak +PERMISSION: org.freedesktop.NetworkManager.network-control +VALUE: tak +PERMISSION: org.freedesktop.NetworkManager.reload +VALUE: nie +PERMISSION: org.freedesktop.NetworkManager.settings.modify.global-dns +VALUE: nie +PERMISSION: org.freedesktop.NetworkManager.settings.modify.hostname +VALUE: tak +PERMISSION: org.freedesktop.NetworkManager.settings.modify.own +VALUE: tak +PERMISSION: org.freedesktop.NetworkManager.settings.modify.system +VALUE: tak +PERMISSION: org.freedesktop.NetworkManager.sleep-wake +VALUE: nie PERMISSION: org.freedesktop.NetworkManager.wifi.scan VALUE: nieznane +PERMISSION: org.freedesktop.NetworkManager.wifi.share.open +VALUE: tak +PERMISSION: org.freedesktop.NetworkManager.wifi.share.protected +VALUE: tak <<< size: 4042 @@ -946,57 +946,57 @@ stdout: 3881 bytes =============================================================================== NetworkManager permissions =============================================================================== -PERMISSION: org.freedesktop.NetworkManager.enable-disable-network -VALUE: yes -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.enable-disable-wifi -VALUE: yes -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.enable-disable-wwan -VALUE: yes -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.enable-disable-wimax -VALUE: yes -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.sleep-wake -VALUE: no -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.network-control -VALUE: yes -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.wifi.share.protected -VALUE: yes -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.wifi.share.open -VALUE: yes -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.settings.modify.system -VALUE: yes -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.settings.modify.own -VALUE: yes -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.settings.modify.hostname -VALUE: yes -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.settings.modify.global-dns -VALUE: no -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.reload -VALUE: no -------------------------------------------------------------------------------- PERMISSION: org.freedesktop.NetworkManager.checkpoint-rollback VALUE: unknown ------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.enable-disable-statistics -VALUE: unknown -------------------------------------------------------------------------------- PERMISSION: org.freedesktop.NetworkManager.enable-disable-connectivity-check VALUE: unknown ------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.enable-disable-network +VALUE: yes +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.enable-disable-statistics +VALUE: unknown +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.enable-disable-wifi +VALUE: yes +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.enable-disable-wimax +VALUE: yes +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.enable-disable-wwan +VALUE: yes +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.network-control +VALUE: yes +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.reload +VALUE: no +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.settings.modify.global-dns +VALUE: no +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.settings.modify.hostname +VALUE: yes +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.settings.modify.own +VALUE: yes +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.settings.modify.system +VALUE: yes +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.sleep-wake +VALUE: no +------------------------------------------------------------------------------- PERMISSION: org.freedesktop.NetworkManager.wifi.scan VALUE: unknown ------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.wifi.share.open +VALUE: yes +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.wifi.share.protected +VALUE: yes +------------------------------------------------------------------------------- <<< size: 4064 @@ -1009,57 +1009,57 @@ stdout: 3893 bytes =============================================================================== Uprawnienia usługi NetworkManager =============================================================================== -PERMISSION: org.freedesktop.NetworkManager.enable-disable-network -VALUE: tak -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.enable-disable-wifi -VALUE: tak -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.enable-disable-wwan -VALUE: tak -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.enable-disable-wimax -VALUE: tak -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.sleep-wake -VALUE: nie -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.network-control -VALUE: tak -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.wifi.share.protected -VALUE: tak -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.wifi.share.open -VALUE: tak -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.settings.modify.system -VALUE: tak -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.settings.modify.own -VALUE: tak -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.settings.modify.hostname -VALUE: tak -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.settings.modify.global-dns -VALUE: nie -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.reload -VALUE: nie -------------------------------------------------------------------------------- PERMISSION: org.freedesktop.NetworkManager.checkpoint-rollback VALUE: nieznane ------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.enable-disable-statistics -VALUE: nieznane -------------------------------------------------------------------------------- PERMISSION: org.freedesktop.NetworkManager.enable-disable-connectivity-check VALUE: nieznane ------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.enable-disable-network +VALUE: tak +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.enable-disable-statistics +VALUE: nieznane +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.enable-disable-wifi +VALUE: tak +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.enable-disable-wimax +VALUE: tak +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.enable-disable-wwan +VALUE: tak +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.network-control +VALUE: tak +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.reload +VALUE: nie +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.settings.modify.global-dns +VALUE: nie +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.settings.modify.hostname +VALUE: tak +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.settings.modify.own +VALUE: tak +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.settings.modify.system +VALUE: tak +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.sleep-wake +VALUE: nie +------------------------------------------------------------------------------- PERMISSION: org.freedesktop.NetworkManager.wifi.scan VALUE: nieznane ------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.wifi.share.open +VALUE: tak +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.wifi.share.protected +VALUE: tak +------------------------------------------------------------------------------- <<< size: 4171 @@ -1072,57 +1072,57 @@ stdout: 3998 bytes =============================================================================== NetworkManager permissions =============================================================================== -PERMISSION: org.freedesktop.NetworkManager.enable-disable-network -VALUE: yes -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.enable-disable-wifi -VALUE: yes -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.enable-disable-wwan -VALUE: yes -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.enable-disable-wimax -VALUE: yes -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.sleep-wake -VALUE: no -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.network-control -VALUE: yes -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.wifi.share.protected -VALUE: yes -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.wifi.share.open -VALUE: yes -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.settings.modify.system -VALUE: yes -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.settings.modify.own -VALUE: yes -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.settings.modify.hostname -VALUE: yes -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.settings.modify.global-dns -VALUE: no -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.reload -VALUE: no -------------------------------------------------------------------------------- PERMISSION: org.freedesktop.NetworkManager.checkpoint-rollback VALUE: unknown ------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.enable-disable-statistics -VALUE: unknown -------------------------------------------------------------------------------- PERMISSION: org.freedesktop.NetworkManager.enable-disable-connectivity-check VALUE: unknown ------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.enable-disable-network +VALUE: yes +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.enable-disable-statistics +VALUE: unknown +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.enable-disable-wifi +VALUE: yes +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.enable-disable-wimax +VALUE: yes +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.enable-disable-wwan +VALUE: yes +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.network-control +VALUE: yes +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.reload +VALUE: no +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.settings.modify.global-dns +VALUE: no +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.settings.modify.hostname +VALUE: yes +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.settings.modify.own +VALUE: yes +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.settings.modify.system +VALUE: yes +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.sleep-wake +VALUE: no +------------------------------------------------------------------------------- PERMISSION: org.freedesktop.NetworkManager.wifi.scan VALUE: unknown ------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.wifi.share.open +VALUE: yes +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.wifi.share.protected +VALUE: yes +------------------------------------------------------------------------------- <<< size: 4193 @@ -1135,57 +1135,57 @@ stdout: 4010 bytes =============================================================================== Uprawnienia usługi NetworkManager =============================================================================== -PERMISSION: org.freedesktop.NetworkManager.enable-disable-network -VALUE: tak -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.enable-disable-wifi -VALUE: tak -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.enable-disable-wwan -VALUE: tak -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.enable-disable-wimax -VALUE: tak -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.sleep-wake -VALUE: nie -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.network-control -VALUE: tak -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.wifi.share.protected -VALUE: tak -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.wifi.share.open -VALUE: tak -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.settings.modify.system -VALUE: tak -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.settings.modify.own -VALUE: tak -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.settings.modify.hostname -VALUE: tak -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.settings.modify.global-dns -VALUE: nie -------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.reload -VALUE: nie -------------------------------------------------------------------------------- PERMISSION: org.freedesktop.NetworkManager.checkpoint-rollback VALUE: nieznane ------------------------------------------------------------------------------- -PERMISSION: org.freedesktop.NetworkManager.enable-disable-statistics -VALUE: nieznane -------------------------------------------------------------------------------- PERMISSION: org.freedesktop.NetworkManager.enable-disable-connectivity-check VALUE: nieznane ------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.enable-disable-network +VALUE: tak +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.enable-disable-statistics +VALUE: nieznane +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.enable-disable-wifi +VALUE: tak +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.enable-disable-wimax +VALUE: tak +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.enable-disable-wwan +VALUE: tak +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.network-control +VALUE: tak +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.reload +VALUE: nie +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.settings.modify.global-dns +VALUE: nie +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.settings.modify.hostname +VALUE: tak +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.settings.modify.own +VALUE: tak +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.settings.modify.system +VALUE: tak +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.sleep-wake +VALUE: nie +------------------------------------------------------------------------------- PERMISSION: org.freedesktop.NetworkManager.wifi.scan VALUE: nieznane ------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.wifi.share.open +VALUE: tak +------------------------------------------------------------------------------- +PERMISSION: org.freedesktop.NetworkManager.wifi.share.protected +VALUE: tak +------------------------------------------------------------------------------- <<< size: 1397 @@ -1195,40 +1195,40 @@ lang: C returncode: 0 stdout: 1237 bytes >>> -PERMISSION:org.freedesktop.NetworkManager.enable-disable-network -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.enable-disable-wifi -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.enable-disable-wwan -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.enable-disable-wimax -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.sleep-wake -VALUE:no -PERMISSION:org.freedesktop.NetworkManager.network-control -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.wifi.share.protected -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.wifi.share.open -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.settings.modify.system -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.settings.modify.own -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.settings.modify.hostname -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.settings.modify.global-dns -VALUE:no -PERMISSION:org.freedesktop.NetworkManager.reload -VALUE:no PERMISSION:org.freedesktop.NetworkManager.checkpoint-rollback VALUE:unknown -PERMISSION:org.freedesktop.NetworkManager.enable-disable-statistics -VALUE:unknown PERMISSION:org.freedesktop.NetworkManager.enable-disable-connectivity-check VALUE:unknown +PERMISSION:org.freedesktop.NetworkManager.enable-disable-network +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.enable-disable-statistics +VALUE:unknown +PERMISSION:org.freedesktop.NetworkManager.enable-disable-wifi +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.enable-disable-wimax +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.enable-disable-wwan +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.network-control +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.reload +VALUE:no +PERMISSION:org.freedesktop.NetworkManager.settings.modify.global-dns +VALUE:no +PERMISSION:org.freedesktop.NetworkManager.settings.modify.hostname +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.settings.modify.own +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.settings.modify.system +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.sleep-wake +VALUE:no PERMISSION:org.freedesktop.NetworkManager.wifi.scan VALUE:unknown +PERMISSION:org.freedesktop.NetworkManager.wifi.share.open +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.wifi.share.protected +VALUE:yes <<< size: 1407 @@ -1238,40 +1238,40 @@ lang: pl_PL.UTF-8 returncode: 0 stdout: 1237 bytes >>> -PERMISSION:org.freedesktop.NetworkManager.enable-disable-network -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.enable-disable-wifi -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.enable-disable-wwan -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.enable-disable-wimax -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.sleep-wake -VALUE:no -PERMISSION:org.freedesktop.NetworkManager.network-control -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.wifi.share.protected -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.wifi.share.open -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.settings.modify.system -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.settings.modify.own -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.settings.modify.hostname -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.settings.modify.global-dns -VALUE:no -PERMISSION:org.freedesktop.NetworkManager.reload -VALUE:no PERMISSION:org.freedesktop.NetworkManager.checkpoint-rollback VALUE:unknown -PERMISSION:org.freedesktop.NetworkManager.enable-disable-statistics -VALUE:unknown PERMISSION:org.freedesktop.NetworkManager.enable-disable-connectivity-check VALUE:unknown +PERMISSION:org.freedesktop.NetworkManager.enable-disable-network +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.enable-disable-statistics +VALUE:unknown +PERMISSION:org.freedesktop.NetworkManager.enable-disable-wifi +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.enable-disable-wimax +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.enable-disable-wwan +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.network-control +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.reload +VALUE:no +PERMISSION:org.freedesktop.NetworkManager.settings.modify.global-dns +VALUE:no +PERMISSION:org.freedesktop.NetworkManager.settings.modify.hostname +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.settings.modify.own +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.settings.modify.system +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.sleep-wake +VALUE:no PERMISSION:org.freedesktop.NetworkManager.wifi.scan VALUE:unknown +PERMISSION:org.freedesktop.NetworkManager.wifi.share.open +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.wifi.share.protected +VALUE:yes <<< size: 1526 @@ -1281,40 +1281,40 @@ lang: C returncode: 0 stdout: 1354 bytes >>> -PERMISSION:org.freedesktop.NetworkManager.enable-disable-network -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.enable-disable-wifi -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.enable-disable-wwan -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.enable-disable-wimax -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.sleep-wake -VALUE:no -PERMISSION:org.freedesktop.NetworkManager.network-control -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.wifi.share.protected -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.wifi.share.open -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.settings.modify.system -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.settings.modify.own -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.settings.modify.hostname -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.settings.modify.global-dns -VALUE:no -PERMISSION:org.freedesktop.NetworkManager.reload -VALUE:no PERMISSION:org.freedesktop.NetworkManager.checkpoint-rollback VALUE:unknown -PERMISSION:org.freedesktop.NetworkManager.enable-disable-statistics -VALUE:unknown PERMISSION:org.freedesktop.NetworkManager.enable-disable-connectivity-check VALUE:unknown +PERMISSION:org.freedesktop.NetworkManager.enable-disable-network +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.enable-disable-statistics +VALUE:unknown +PERMISSION:org.freedesktop.NetworkManager.enable-disable-wifi +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.enable-disable-wimax +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.enable-disable-wwan +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.network-control +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.reload +VALUE:no +PERMISSION:org.freedesktop.NetworkManager.settings.modify.global-dns +VALUE:no +PERMISSION:org.freedesktop.NetworkManager.settings.modify.hostname +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.settings.modify.own +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.settings.modify.system +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.sleep-wake +VALUE:no PERMISSION:org.freedesktop.NetworkManager.wifi.scan VALUE:unknown +PERMISSION:org.freedesktop.NetworkManager.wifi.share.open +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.wifi.share.protected +VALUE:yes <<< size: 1536 @@ -1324,39 +1324,39 @@ lang: pl_PL.UTF-8 returncode: 0 stdout: 1354 bytes >>> -PERMISSION:org.freedesktop.NetworkManager.enable-disable-network -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.enable-disable-wifi -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.enable-disable-wwan -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.enable-disable-wimax -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.sleep-wake -VALUE:no -PERMISSION:org.freedesktop.NetworkManager.network-control -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.wifi.share.protected -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.wifi.share.open -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.settings.modify.system -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.settings.modify.own -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.settings.modify.hostname -VALUE:yes -PERMISSION:org.freedesktop.NetworkManager.settings.modify.global-dns -VALUE:no -PERMISSION:org.freedesktop.NetworkManager.reload -VALUE:no PERMISSION:org.freedesktop.NetworkManager.checkpoint-rollback VALUE:unknown -PERMISSION:org.freedesktop.NetworkManager.enable-disable-statistics -VALUE:unknown PERMISSION:org.freedesktop.NetworkManager.enable-disable-connectivity-check VALUE:unknown +PERMISSION:org.freedesktop.NetworkManager.enable-disable-network +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.enable-disable-statistics +VALUE:unknown +PERMISSION:org.freedesktop.NetworkManager.enable-disable-wifi +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.enable-disable-wimax +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.enable-disable-wwan +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.network-control +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.reload +VALUE:no +PERMISSION:org.freedesktop.NetworkManager.settings.modify.global-dns +VALUE:no +PERMISSION:org.freedesktop.NetworkManager.settings.modify.hostname +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.settings.modify.own +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.settings.modify.system +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.sleep-wake +VALUE:no PERMISSION:org.freedesktop.NetworkManager.wifi.scan VALUE:unknown +PERMISSION:org.freedesktop.NetworkManager.wifi.share.open +VALUE:yes +PERMISSION:org.freedesktop.NetworkManager.wifi.share.protected +VALUE:yes <<< From 51bc2c02242ead7659c417cfa2336a231ac4ea24 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 6 Dec 2019 11:48:04 +0100 Subject: [PATCH 11/25] libnm: track permissions in NMClient as an array of well known permissions On D-Bus, the permission names are just the PolicyKit action names, like "org.freedesktop.NetworkManager.wifi.scan". But NMClient already ignores all strings that it doesn't know at compile time and only keeps track of well known permission. And neither does the API nm_client_get_permissions_result() allow to expose permissions unknown to libnm. Maybe the API of NMClient should be more generic and allow exposing any permissions announced by NetworkManager. As it is however, it's not necessary to track the permissions in a hash table. An array with fixed indices is sufficient. --- libnm/nm-client.c | 80 ++++++++++++++++++++++++----------------------- 1 file changed, 41 insertions(+), 39 deletions(-) diff --git a/libnm/nm-client.c b/libnm/nm-client.c index 42cba4095d..b10456e274 100644 --- a/libnm/nm-client.c +++ b/libnm/nm-client.c @@ -278,7 +278,7 @@ typedef struct { NMLDBusObject *dbobj_settings; NMLDBusObject *dbobj_dns_manager; - GHashTable *permissions; + guint8 *permissions; GCancellable *permissions_cancellable; char *name_owner; @@ -3311,27 +3311,35 @@ _dbus_nm_vpn_connection_state_changed_cb (GDBusConnection *connection, static void _emit_permissions_changed (NMClient *self, - GHashTable *permissions, - gboolean force_unknown) + const guint8 *old_permissions, + const guint8 *permissions) { - GHashTableIter iter; - gpointer key; - gpointer value; + int i; - if (!permissions) - return; if (self->obj_base.is_disposing) return; - g_hash_table_iter_init (&iter, permissions); - while (g_hash_table_iter_next (&iter, &key, &value)) { + if (old_permissions == permissions) + return; + + for (i = 0; i < (int) G_N_ELEMENTS (nm_auth_permission_sorted); i++) { + NMClientPermission perm = nm_auth_permission_sorted[i]; + NMClientPermissionResult perm_result = NM_CLIENT_PERMISSION_RESULT_UNKNOWN; + NMClientPermissionResult perm_result_old = NM_CLIENT_PERMISSION_RESULT_UNKNOWN; + + if (permissions) + perm_result = permissions[perm - 1]; + if (old_permissions) + perm_result_old = old_permissions[perm - 1]; + + if (perm_result == perm_result_old) + continue; + g_signal_emit (self, signals[PERMISSION_CHANGED], 0, - GPOINTER_TO_UINT (key), - force_unknown - ? (guint) NM_CLIENT_PERMISSION_NONE - : GPOINTER_TO_UINT (value)); + (guint) perm, + (guint) perm_result); } } @@ -3344,10 +3352,11 @@ _dbus_check_permissions_start_cb (GObject *source, GAsyncResult *result, gpointe NMClientPrivate *priv; gs_unref_variant GVariant *ret = NULL; nm_auto_free_variant_iter GVariantIter *v_permissions = NULL; - gs_unref_hashtable GHashTable *old_permissions = NULL; + gs_free guint8 *old_permissions = NULL; gs_free_error GError *error = NULL; const char *pkey; const char *pvalue; + int i; ret = g_dbus_connection_call_finish (G_DBUS_CONNECTION (source), result, &error); if ( !ret @@ -3366,9 +3375,10 @@ _dbus_check_permissions_start_cb (GObject *source, GAsyncResult *result, gpointe NML_NMCLIENT_LOG_T (self, "GetPermissions call finished with success"); - /* get list of old permissions for change notification */ old_permissions = g_steal_pointer (&priv->permissions); - priv->permissions = g_hash_table_new (nm_direct_hash, NULL); + priv->permissions = g_new (guint8, G_N_ELEMENTS (nm_auth_permission_sorted)); + for (i = 0; i < (int) G_N_ELEMENTS (nm_auth_permission_sorted); i++) + priv->permissions[i] = NM_CLIENT_PERMISSION_NONE; g_variant_get (ret, "(a{ss})", &v_permissions); while (g_variant_iter_next (v_permissions, "{&s&s}", &pkey, &pvalue)) { @@ -3380,19 +3390,11 @@ _dbus_check_permissions_start_cb (GObject *source, GAsyncResult *result, gpointe continue; perm_result = nm_client_permission_result_from_string (pvalue); - - g_hash_table_insert (priv->permissions, - GUINT_TO_POINTER (perm), - GUINT_TO_POINTER (perm_result)); - if (old_permissions) { - g_hash_table_remove (old_permissions, - GUINT_TO_POINTER (perm)); - } + priv->permissions[perm - 1] = perm_result; } dbus_context = nm_g_main_context_push_thread_default_if_necessary (priv->main_context); - _emit_permissions_changed (self, priv->permissions, FALSE); - _emit_permissions_changed (self, old_permissions, TRUE); + _emit_permissions_changed (self, old_permissions, priv->permissions); } static void @@ -4271,18 +4273,18 @@ NMClientPermissionResult nm_client_get_permission_result (NMClient *client, NMClientPermission permission) { NMClientPrivate *priv; - gpointer result; + NMClientPermissionResult result = NM_CLIENT_PERMISSION_RESULT_UNKNOWN; g_return_val_if_fail (NM_IS_CLIENT (client), NM_CLIENT_PERMISSION_RESULT_UNKNOWN); - priv = NM_CLIENT_GET_PRIVATE (client); - if ( !priv->permissions - || !g_hash_table_lookup_extended (priv->permissions, - GUINT_TO_POINTER (permission), - NULL, - &result)) - return NM_CLIENT_PERMISSION_RESULT_UNKNOWN; - return GPOINTER_TO_UINT (result); + if ( permission > NM_CLIENT_PERMISSION_NONE + && permission <= NM_CLIENT_PERMISSION_LAST) { + priv = NM_CLIENT_GET_PRIVATE (client); + if (priv->permissions) + result = priv->permissions[permission - 1]; + } + + return result; } /** @@ -6553,9 +6555,9 @@ _init_release_all (NMClient *self) &priv->dbsid_nm_check_permissions); if (priv->permissions) { - gs_unref_hashtable GHashTable *old_permissions = g_steal_pointer (&priv->permissions); + gs_free guint8 *old_permissions = g_steal_pointer (&priv->permissions); - _emit_permissions_changed (self, old_permissions, TRUE); + _emit_permissions_changed (self, old_permissions, NULL); } nm_assert (c_list_is_empty (&priv->obj_changed_lst_head)); @@ -7372,7 +7374,7 @@ dispose (GObject *object) nm_clear_pointer (&priv->dbus_context, g_main_context_unref); nm_clear_pointer (&priv->main_context, g_main_context_unref); - nm_clear_pointer (&priv->permissions, g_hash_table_unref); + nm_clear_g_free (&priv->permissions); g_clear_object (&priv->dbus_connection); From f7aeda03901dbda40697f588b4a6129160c5dc1e Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Thu, 5 Dec 2019 18:17:43 +0100 Subject: [PATCH 12/25] libnm: add NMClient:instance-flags property Add a flags property to control behavior of NMClient. Possible future use cases: - currently it would always automatically fetch permissions. Often that is not used and the user could opt out of it. - currently, using sync init creates an internal GMainContext. This has an overhead and may be undesirable. We could implement another "sync" initialization that would merely iterate the callers mainloop until the initialization completes. A flag would allow to opt in. - currently, NMClient always fetches all connection settings automatically. Via a flag the user could opt out of that. Instead NMClient could provide an API so the user can request settings as they are needed. --- libnm/libnm.ver | 6 ++++ libnm/nm-client.c | 62 ++++++++++++++++++++++++++++++++++++++++++ libnm/nm-client.h | 15 ++++++++++ libnm/nm-libnm-utils.h | 2 ++ 4 files changed, 85 insertions(+) diff --git a/libnm/libnm.ver b/libnm/libnm.ver index fb5a4f64df..ffd6e3dbd5 100644 --- a/libnm/libnm.ver +++ b/libnm/libnm.ver @@ -1652,3 +1652,9 @@ global: nm_setting_gsm_get_auto_config; nm_setting_ip_config_get_dhcp_hostname_flags; } libnm_1_20_0; + +libnm_1_24_0 { +global: + nm_client_get_instance_flags; + nm_client_instance_flags_get_type; +} libnm_1_22_0; diff --git a/libnm/nm-client.c b/libnm/nm-client.c index b10456e274..6b2844a0d7 100644 --- a/libnm/nm-client.c +++ b/libnm/nm-client.c @@ -195,6 +195,7 @@ NM_GOBJECT_PROPERTIES_DEFINE (NMClient, PROP_DBUS_CONNECTION, PROP_DBUS_NAME_OWNER, PROP_VERSION, + PROP_INSTANCE_FLAGS, PROP_STATE, PROP_STARTUP, PROP_NM_RUNNING, @@ -290,6 +291,10 @@ typedef struct { guint dbsid_nm_vpn_connection_state_changed; guint dbsid_nm_check_permissions; + NMClientInstanceFlags instance_flags:3; + + bool instance_flags_constructed:1; + bool udev_inited:1; bool notify_event_lst_changed:1; bool check_dbobj_visible_all:1; @@ -3750,6 +3755,22 @@ _request_wait_finish (NMClient *client, /*****************************************************************************/ +/** + * nm_client_get_instance_flags: + * @self: the #NMClient instance. + * + * Returns: the #NMClientInstanceFlags flags. + * + * Since: 1.24 + */ +NMClientInstanceFlags +nm_client_get_instance_flags (NMClient *self) +{ + g_return_val_if_fail (NM_IS_CLIENT (self), NM_CLIENT_INSTANCE_FLAGS_NONE); + + return NM_CLIENT_GET_PRIVATE (self)->instance_flags; +} + /** * nm_client_get_dbus_connection: * @client: a #NMClient @@ -6929,6 +6950,9 @@ get_property (GObject *object, guint prop_id, NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (object); switch (prop_id) { + case PROP_INSTANCE_FLAGS: + g_value_set_uint (value, priv->instance_flags); + break; case PROP_DBUS_CONNECTION: g_value_set_object (value, priv->dbus_connection); break; @@ -7041,8 +7065,27 @@ set_property (GObject *object, guint prop_id, NMClient *self = NM_CLIENT (object); NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (self); gboolean b; + guint v_uint; switch (prop_id) { + + case PROP_INSTANCE_FLAGS: + /* construct */ + + v_uint = g_value_get_uint (value); + g_return_if_fail (!NM_FLAGS_ANY (v_uint, ~((guint) NM_CLIENT_INSTANCE_FLAGS_ALL))); + v_uint &= ((guint) NM_CLIENT_INSTANCE_FLAGS_ALL); + + if (!priv->instance_flags_constructed) { + priv->instance_flags_constructed = TRUE; + priv->instance_flags = v_uint; + nm_assert ((guint) priv->instance_flags == v_uint); + } else { + /* Later, we may want to implement setting some flags not only at construct time. + * For now, that is not implemented and resetting flags afterwards has no effect. */ + } + break; + case PROP_DBUS_CONNECTION: /* construct-only */ priv->dbus_connection = g_value_dup_object (value); @@ -7475,6 +7518,25 @@ nm_client_class_init (NMClientClass *client_class) G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); + /** + * NMClient:instance-flags: + * + * #NMClientInstanceFlags for the instance. These affect behavior of #NMClient. + * This is a construct property and you may only set the flags during + * construction. + * + * Since: 1.24 + */ + obj_properties[PROP_INSTANCE_FLAGS] = + g_param_spec_uint (NM_CLIENT_INSTANCE_FLAGS, "", "", + 0, + G_MAXUINT32, + 0, + G_PARAM_READABLE | + G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT | + G_PARAM_STATIC_STRINGS); + /** * NMClient:dbus-name-owner: * diff --git a/libnm/nm-client.h b/libnm/nm-client.h index 6bff58684e..4dc1a16791 100644 --- a/libnm/nm-client.h +++ b/libnm/nm-client.h @@ -15,6 +15,16 @@ G_BEGIN_DECLS +/** + * NMClientInstanceFlags: + * @NM_CLIENT_INSTANCE_FLAGS_NONE: special value to indicate no flags. + * + * Since: 1.24 + */ +typedef enum { /*< flags >*/ + NM_CLIENT_INSTANCE_FLAGS_NONE = 0, +} NMClientInstanceFlags; + #define NM_TYPE_CLIENT (nm_client_get_type ()) #define NM_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_CLIENT, NMClient)) #define NM_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_CLIENT, NMClientClass)) @@ -28,6 +38,7 @@ G_BEGIN_DECLS #define NM_CLIENT_NM_RUNNING "nm-running" #define NM_CLIENT_DBUS_CONNECTION "dbus-connection" #define NM_CLIENT_DBUS_NAME_OWNER "dbus-name-owner" +#define NM_CLIENT_INSTANCE_FLAGS "instance-flags" _NM_DEPRECATED_SYNC_WRITABLE_PROPERTY #define NM_CLIENT_NETWORKING_ENABLED "networking-enabled" @@ -133,6 +144,10 @@ void nm_client_new_async (GCancellable *cancellable, NMClient *nm_client_new_finish (GAsyncResult *result, GError **error); + +NM_AVAILABLE_IN_1_24 +NMClientInstanceFlags nm_client_get_instance_flags (NMClient *self); + NM_AVAILABLE_IN_1_22 GDBusConnection *nm_client_get_dbus_connection (NMClient *client); diff --git a/libnm/nm-libnm-utils.h b/libnm/nm-libnm-utils.h index 304c35f4be..5dea53c682 100644 --- a/libnm/nm-libnm-utils.h +++ b/libnm/nm-libnm-utils.h @@ -166,6 +166,8 @@ typedef enum { /*****************************************************************************/ +#define NM_CLIENT_INSTANCE_FLAGS_ALL ((NMClientInstanceFlags) 0x0) + typedef struct { GType (*get_o_type_fcn) (void); From a33ed5ad820242adcfa87d30f2a7dd540f1d32e8 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Thu, 5 Dec 2019 15:53:51 +0100 Subject: [PATCH 13/25] libnm: allow to enable/disable fetching of permissions in NMClient Currently, NMClient by default always fetches the permissions ("GetPermissions()") and refreshes them on "CheckPermissions" signal. Fetching permissions is relatively expensive, while they are not used most of the time. Allow the user to opt out of this. For that, have a NMClientInstanceFlags to enable/disable automatic fetching. Also add a "permissions-state" property that allows the user to understand whether the cached permissions are up to date or not. This is a bit an awkward API for handling this. E.g. you cannot explicitly request permissions, you can just enable/disable fetching permissions. And then you can watch the permission-state to know whether you are ready. It's done this way because it fits the previous model and extends the API with a (relative) small amount of new functions and properties. --- libnm/libnm.ver | 1 + libnm/nm-client.c | 146 ++++++++++++++++++++++++++++++++++------- libnm/nm-client.h | 13 +++- libnm/nm-libnm-utils.h | 2 +- 4 files changed, 138 insertions(+), 24 deletions(-) diff --git a/libnm/libnm.ver b/libnm/libnm.ver index ffd6e3dbd5..d2af078d8d 100644 --- a/libnm/libnm.ver +++ b/libnm/libnm.ver @@ -1656,5 +1656,6 @@ global: libnm_1_24_0 { global: nm_client_get_instance_flags; + nm_client_get_permissions_state; nm_client_instance_flags_get_type; } libnm_1_22_0; diff --git a/libnm/nm-client.c b/libnm/nm-client.c index 6b2844a0d7..4dd0c222e1 100644 --- a/libnm/nm-client.c +++ b/libnm/nm-client.c @@ -223,6 +223,7 @@ NM_GOBJECT_PROPERTIES_DEFINE (NMClient, PROP_DNS_RC_MANAGER, PROP_DNS_CONFIGURATION, PROP_CHECKPOINTS, + PROP_PERMISSIONS_STATE, ); enum { @@ -293,6 +294,8 @@ typedef struct { NMClientInstanceFlags instance_flags:3; + NMTernary permissions_state:3; + bool instance_flags_constructed:1; bool udev_inited:1; @@ -3373,18 +3376,17 @@ _dbus_check_permissions_start_cb (GObject *source, GAsyncResult *result, gpointe g_clear_object (&priv->permissions_cancellable); + old_permissions = g_steal_pointer (&priv->permissions); + if (!ret) { + /* when the call completes, we always pretend success. Even a failure means + * that we fetched the permissions, however they are all unknown. */ NML_NMCLIENT_LOG_T (self, "GetPermissions call failed: %s", error->message); - return; + goto out; } NML_NMCLIENT_LOG_T (self, "GetPermissions call finished with success"); - old_permissions = g_steal_pointer (&priv->permissions); - priv->permissions = g_new (guint8, G_N_ELEMENTS (nm_auth_permission_sorted)); - for (i = 0; i < (int) G_N_ELEMENTS (nm_auth_permission_sorted); i++) - priv->permissions[i] = NM_CLIENT_PERMISSION_NONE; - g_variant_get (ret, "(a{ss})", &v_permissions); while (g_variant_iter_next (v_permissions, "{&s&s}", &pkey, &pvalue)) { NMClientPermission perm; @@ -3395,34 +3397,52 @@ _dbus_check_permissions_start_cb (GObject *source, GAsyncResult *result, gpointe continue; perm_result = nm_client_permission_result_from_string (pvalue); + + if (!priv->permissions) { + if (perm_result == NM_CLIENT_PERMISSION_RESULT_UNKNOWN) + continue; + priv->permissions = g_new (guint8, G_N_ELEMENTS (nm_auth_permission_sorted)); + for (i = 0; i < (int) G_N_ELEMENTS (nm_auth_permission_sorted); i++) + priv->permissions[i] = NM_CLIENT_PERMISSION_RESULT_UNKNOWN; + } priv->permissions[perm - 1] = perm_result; } +out: + priv->permissions_state = NM_TERNARY_TRUE; + dbus_context = nm_g_main_context_push_thread_default_if_necessary (priv->main_context); _emit_permissions_changed (self, old_permissions, priv->permissions); + _notify (self, PROP_PERMISSIONS_STATE); } static void _dbus_check_permissions_start (NMClient *self) { NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (self); + gboolean fetch; + + fetch = !NM_FLAGS_HAS ((NMClientInstanceFlags) priv->instance_flags, + NM_CLIENT_INSTANCE_FLAGS_NO_AUTO_FETCH_PERMISSIONS); nm_clear_g_cancellable (&priv->permissions_cancellable); - priv->permissions_cancellable = g_cancellable_new (); - NML_NMCLIENT_LOG_T (self, "GetPermissions() call started..."); + if (fetch) { + NML_NMCLIENT_LOG_T (self, "GetPermissions() call started..."); - _nm_client_dbus_call_simple (self, - priv->permissions_cancellable, - NM_DBUS_PATH, - NM_DBUS_INTERFACE, - "GetPermissions", - g_variant_new ("()"), - G_VARIANT_TYPE ("(a{ss})"), - G_DBUS_CALL_FLAGS_NONE, - NM_DBUS_DEFAULT_TIMEOUT_MSEC, - _dbus_check_permissions_start_cb, - self); + priv->permissions_cancellable = g_cancellable_new (); + _nm_client_dbus_call_simple (self, + priv->permissions_cancellable, + NM_DBUS_PATH, + NM_DBUS_INTERFACE, + "GetPermissions", + g_variant_new ("()"), + G_VARIANT_TYPE ("(a{ss})"), + G_DBUS_CALL_FLAGS_NONE, + NM_DBUS_DEFAULT_TIMEOUT_MSEC, + _dbus_check_permissions_start_cb, + self); + } } static void @@ -3435,6 +3455,7 @@ _dbus_nm_check_permissions_cb (GDBusConnection *connection, gpointer user_data) { NMClient *self = user_data; + NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (self); if (!g_variant_is_of_type (parameters, G_VARIANT_TYPE ("()"))) { NML_NMCLIENT_LOG_E (self, "ignore CheckPermissions signal with unexpected signature %s", @@ -3443,6 +3464,10 @@ _dbus_nm_check_permissions_cb (GDBusConnection *connection, } _dbus_check_permissions_start (self); + + if (priv->permissions_state == NM_TERNARY_TRUE) + priv->permissions_state = NM_TERNARY_FALSE; + _notify (self, PROP_PERMISSIONS_STATE); } /*****************************************************************************/ @@ -4308,6 +4333,27 @@ nm_client_get_permission_result (NMClient *client, NMClientPermission permission return result; } +/** + * nm_client_get_permissions_state: + * @self: the #NMClient instance + * + * Returns: the state of the cached permissions. %NM_TERNARY_DEFAULT + * means that no permissions result was yet received. All permissions + * are unknown. %NM_TERNARY_TRUE means that the permissions got received + * and are cached. %%NM_TERNARY_FALSE means that permissions are cached, + * but they are invalided as as "CheckPermissions" signal was received + * in the meantime. + * + * Since: 1.24 + */ +NMTernary +nm_client_get_permissions_state (NMClient *self) +{ + g_return_val_if_fail (NM_IS_CLIENT (self), NM_TERNARY_DEFAULT); + + return NM_CLIENT_GET_PRIVATE (self)->permissions_state; +} + /** * nm_client_get_connectivity: * @client: an #NMClient @@ -6556,6 +6602,7 @@ _init_release_all (NMClient *self) CList **dbus_objects_lst_heads; NMLDBusObject *dbobj; int i; + gboolean permissions_state_changed = FALSE; NML_NMCLIENT_LOG_D (self, "release all"); @@ -6575,12 +6622,20 @@ _init_release_all (NMClient *self) nm_clear_g_dbus_connection_signal (priv->dbus_connection, &priv->dbsid_nm_check_permissions); + if (priv->permissions_state != NM_TERNARY_DEFAULT) { + priv->permissions_state = NM_TERNARY_DEFAULT; + permissions_state_changed = TRUE; + } + if (priv->permissions) { gs_free guint8 *old_permissions = g_steal_pointer (&priv->permissions); _emit_permissions_changed (self, old_permissions, NULL); } + if (permissions_state_changed) + _notify (self, PROP_PERMISSIONS_STATE); + nm_assert (c_list_is_empty (&priv->obj_changed_lst_head)); dbus_objects_lst_heads = ((CList *[]) { @@ -7027,6 +7082,9 @@ get_property (GObject *object, guint prop_id, case PROP_CHECKPOINTS: g_value_take_boxed (value, _nm_utils_copy_object_array (nm_client_get_checkpoints (self))); break; + case PROP_PERMISSIONS_STATE: + g_value_set_enum (value, priv->permissions_state); + break; /* Settings properties. */ case PROP_CONNECTIONS: @@ -7081,8 +7139,19 @@ set_property (GObject *object, guint prop_id, priv->instance_flags = v_uint; nm_assert ((guint) priv->instance_flags == v_uint); } else { - /* Later, we may want to implement setting some flags not only at construct time. - * For now, that is not implemented and resetting flags afterwards has no effect. */ + NMClientInstanceFlags flags = v_uint; + + /* After object construction, we only allow to toggle certain flags and + * ignore all other flags. */ + + if ((priv->instance_flags ^ flags) & NM_CLIENT_INSTANCE_FLAGS_NO_AUTO_FETCH_PERMISSIONS) { + if (NM_FLAGS_HAS (flags, NM_CLIENT_INSTANCE_FLAGS_NO_AUTO_FETCH_PERMISSIONS)) + priv->instance_flags |= NM_CLIENT_INSTANCE_FLAGS_NO_AUTO_FETCH_PERMISSIONS; + else + priv->instance_flags &= ~NM_CLIENT_INSTANCE_FLAGS_NO_AUTO_FETCH_PERMISSIONS; + if (priv->dbsid_nm_check_permissions != 0) + _dbus_check_permissions_start (self); + } } break; @@ -7268,6 +7337,8 @@ nm_client_init (NMClient *self) { NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (self); + priv->permissions_state = NM_TERNARY_DEFAULT; + priv->context_busy_watcher = g_object_new (G_TYPE_OBJECT, NULL); c_list_init (&self->obj_base.queue_notify_lst); @@ -7522,9 +7593,14 @@ nm_client_class_init (NMClientClass *client_class) * NMClient:instance-flags: * * #NMClientInstanceFlags for the instance. These affect behavior of #NMClient. - * This is a construct property and you may only set the flags during + * This is a construct property and you may only set most flags only during * construction. * + * The flag %NM_CLIENT_INSTANCE_FLAGS_NO_AUTO_FETCH_PERMISSIONS can be toggled any time, + * even after constructing the instance. Note that you may want to watch NMClient:permissions-state + * property to know whether permissions are ready. Note that permissions are only fetched + * when NMClient has a D-Bus name owner. + * * Since: 1.24 */ obj_properties[PROP_INSTANCE_FLAGS] = @@ -7896,6 +7972,32 @@ nm_client_class_init (NMClientClass *client_class) G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + /** + * NMClient:permissions-state: + * + * The state of the cached permissions. The value %NM_TERNARY_DEFAULT + * means that no permissions are yet received (or not yet requested). + * %NM_TERNARY_TRUE means that permissions are received, cached and up + * to date. %NM_TERNARY_FALSE means that permissions were received and are + * cached, but in the meantime a "CheckPermissions" signal was received + * that invalidated the cached permissions. + * Note that NMClient will always emit a notify::permissions-state signal + * when a "CheckPermissions" signal got received or after new permissions + * got received (that is regardless whether the value of the permission state + * actually changed). With this you can watch the permissions-state property + * to know whether the permissions are ready. Note that while NMClient has + * no D-Bus name owner, no permissions are fetched (and this property won't + * change). + * + * Since: 1.24 + */ + obj_properties[PROP_PERMISSIONS_STATE] = + g_param_spec_enum (NM_CLIENT_PERMISSIONS_STATE, "", "", + NM_TYPE_TERNARY, + NM_TERNARY_DEFAULT, + G_PARAM_READABLE | + G_PARAM_STATIC_STRINGS); + _nml_dbus_meta_class_init_with_properties (object_class, &_nml_dbus_meta_iface_nm, &_nml_dbus_meta_iface_nm_settings, &_nml_dbus_meta_iface_nm_dnsmanager); diff --git a/libnm/nm-client.h b/libnm/nm-client.h index 4dc1a16791..37bac38b8b 100644 --- a/libnm/nm-client.h +++ b/libnm/nm-client.h @@ -18,11 +18,18 @@ G_BEGIN_DECLS /** * NMClientInstanceFlags: * @NM_CLIENT_INSTANCE_FLAGS_NONE: special value to indicate no flags. + * @NM_CLIENT_INSTANCE_FLAGS_NO_AUTO_FETCH_PERMISSIONS: by default, NMClient + * will fetch the permissions via "GetPermissions" and refetch them when + * "CheckPermissions" signal gets received. By setting this flag, this behavior + * can be disabled. You can toggle this flag to enable and disable automatic + * fetching of the permissions. Watch also nm_client_get_permissions_state() + * to know whether the permissions are up to date. * * Since: 1.24 */ typedef enum { /*< flags >*/ - NM_CLIENT_INSTANCE_FLAGS_NONE = 0, + NM_CLIENT_INSTANCE_FLAGS_NONE = 0, + NM_CLIENT_INSTANCE_FLAGS_NO_AUTO_FETCH_PERMISSIONS = 1, } NMClientInstanceFlags; #define NM_TYPE_CLIENT (nm_client_get_type ()) @@ -74,6 +81,7 @@ _NM_DEPRECATED_SYNC_WRITABLE_PROPERTY #define NM_CLIENT_DNS_RC_MANAGER "dns-rc-manager" #define NM_CLIENT_DNS_CONFIGURATION "dns-configuration" #define NM_CLIENT_CHECKPOINTS "checkpoints" +#define NM_CLIENT_PERMISSIONS_STATE "permissions-state" #define NM_CLIENT_DEVICE_ADDED "device-added" #define NM_CLIENT_DEVICE_REMOVED "device-removed" @@ -228,6 +236,9 @@ gboolean nm_client_set_logging (NMClient *client, NMClientPermissionResult nm_client_get_permission_result (NMClient *client, NMClientPermission permission); +NM_AVAILABLE_IN_1_24 +NMTernary nm_client_get_permissions_state (NMClient *self); + NMConnectivityState nm_client_get_connectivity (NMClient *client); _NM_DEPRECATED_SYNC_METHOD diff --git a/libnm/nm-libnm-utils.h b/libnm/nm-libnm-utils.h index 5dea53c682..7f984de2a5 100644 --- a/libnm/nm-libnm-utils.h +++ b/libnm/nm-libnm-utils.h @@ -166,7 +166,7 @@ typedef enum { /*****************************************************************************/ -#define NM_CLIENT_INSTANCE_FLAGS_ALL ((NMClientInstanceFlags) 0x0) +#define NM_CLIENT_INSTANCE_FLAGS_ALL ((NMClientInstanceFlags) 0x1) typedef struct { GType (*get_o_type_fcn) (void); From 44c5331e29d86808b9f8d9e210689183d89401bd Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 6 Dec 2019 13:31:56 +0100 Subject: [PATCH 14/25] shared: move "shared/nm-utils/tests/test-shared-general" to "shared/nm-glib-aux/tests" "shared/nm-utils" got long renamed and split into separate parts. The remaining tests are really to test nm-std-aux and nm-glib-aux (no libnm dependencies). Move the tests to the appropriate place. --- .gitignore | 3 ++- Makefile.am | 10 +++++----- shared/meson.build | 2 +- shared/{nm-utils => nm-glib-aux}/tests/meson.build | 2 +- .../tests/test-shared-general.c | 0 5 files changed, 9 insertions(+), 8 deletions(-) rename shared/{nm-utils => nm-glib-aux}/tests/meson.build (92%) rename shared/{nm-utils => nm-glib-aux}/tests/test-shared-general.c (100%) diff --git a/.gitignore b/.gitignore index 7ef42f5c4b..8b8b7fad51 100644 --- a/.gitignore +++ b/.gitignore @@ -128,7 +128,7 @@ test-*.trs /examples/C/qt/monitor-nm-running /examples/C/qt/monitor-nm-running.moc -/shared/nm-utils/tests/test-shared-general +/shared/nm-glib-aux/tests/test-shared-general /shared/nm-version-macros.h /introspection/org.freedesktop.NetworkManager*.[ch] @@ -325,6 +325,7 @@ test-*.trs /libnm/tests/test-general /policy/org.freedesktop.NetworkManager.policy /policy/org.freedesktop.NetworkManager.policy.in +/shared/nm-utils/tests/test-shared-general /src/devices/tests/test-arping /src/devices/wifi/tests/test-general /src/devices/wifi/tests/test-wifi-ap-utils diff --git a/Makefile.am b/Makefile.am index ecacf568e6..451f36e553 100644 --- a/Makefile.am +++ b/Makefile.am @@ -526,14 +526,14 @@ $(shared_nm_libnm_core_aux_libnm_libnm_core_aux_la_OBJECTS): $(libnm_core_lib_h_ ############################################################################### EXTRA_DIST += \ - shared/nm-utils/tests/meson.build \ + shared/nm-glib-aux/tests/meson.build \ $(NULL) ############################################################################### -check_programs += shared/nm-utils/tests/test-shared-general +check_programs += shared/nm-glib-aux/tests/test-shared-general -shared_nm_utils_tests_test_shared_general_CPPFLAGS = \ +shared_nm_glib_aux_tests_test_shared_general_CPPFLAGS = \ $(dflt_cppflags) \ -I$(srcdir)/shared \ -DNETWORKMANAGER_COMPILATION_TEST \ @@ -543,12 +543,12 @@ shared_nm_utils_tests_test_shared_general_CPPFLAGS = \ $(SANITIZER_LIB_CFLAGS) \ $(NULL) -shared_nm_utils_tests_test_shared_general_LDFLAGS = \ +shared_nm_glib_aux_tests_test_shared_general_LDFLAGS = \ $(CODE_COVERAGE_LDFLAGS) \ $(SANITIZER_EXEC_LDFLAGS) \ $(NULL) -shared_nm_utils_tests_test_shared_general_LDADD = \ +shared_nm_glib_aux_tests_test_shared_general_LDADD = \ shared/nm-glib-aux/libnm-glib-aux.la \ shared/systemd/libnm-systemd-logging-stub.la \ shared/nm-std-aux/libnm-std-aux.la \ diff --git a/shared/meson.build b/shared/meson.build index 5f96d49dc6..88b2de8f09 100644 --- a/shared/meson.build +++ b/shared/meson.build @@ -256,5 +256,5 @@ libnm_systemd_logging_stub = static_library( ) if enable_tests - subdir('nm-utils/tests') + subdir('nm-glib-aux/tests') endif diff --git a/shared/nm-utils/tests/meson.build b/shared/nm-glib-aux/tests/meson.build similarity index 92% rename from shared/nm-utils/tests/meson.build rename to shared/nm-glib-aux/tests/meson.build index 1ee5efff95..37c5c1b44d 100644 --- a/shared/nm-utils/tests/meson.build +++ b/shared/nm-glib-aux/tests/meson.build @@ -14,7 +14,7 @@ exe = executable( ) test( - 'shared/nm-utils/' + test_unit, + 'shared/nm-glib-aux/' + test_unit, test_script, args: test_args + [exe.full_path()], timeout: default_test_timeout, diff --git a/shared/nm-utils/tests/test-shared-general.c b/shared/nm-glib-aux/tests/test-shared-general.c similarity index 100% rename from shared/nm-utils/tests/test-shared-general.c rename to shared/nm-glib-aux/tests/test-shared-general.c From 3843e0c87d1351f8fb2ecfb37a7a33172988aa04 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 6 Dec 2019 13:40:39 +0100 Subject: [PATCH 15/25] shared: add "shared/nm-libnm-aux" static library We have "shared/nm-libnm-core-aux", which is shared code that can be used by anybody (including libnm-core, src, libnm and clients). We have "clients/common", which are helper function for clients. But that implies that the code is inside "clients". I think it would be useful to have auxiliary code that extends libnm, but is not only usable by code in "clients". In other words, "shared/nm-libnm-aux" is a better place than "clients/common", and I think most of the functionality form "clients/common" should move there. --- Makefile.am | 37 ++++++++++++++++++++++++++++++ libnm/meson.build | 18 +++++++++++++++ shared/meson.build | 11 +++++---- shared/nm-libnm-aux/nm-libnm-aux.c | 5 ++++ shared/nm-libnm-aux/nm-libnm-aux.h | 6 +++++ 5 files changed, 72 insertions(+), 5 deletions(-) create mode 100644 shared/nm-libnm-aux/nm-libnm-aux.c create mode 100644 shared/nm-libnm-aux/nm-libnm-aux.h diff --git a/Makefile.am b/Makefile.am index 451f36e553..748c0c9ef2 100644 --- a/Makefile.am +++ b/Makefile.am @@ -525,6 +525,43 @@ $(shared_nm_libnm_core_aux_libnm_libnm_core_aux_la_OBJECTS): $(libnm_core_lib_h_ ############################################################################### +noinst_LTLIBRARIES += shared/nm-libnm-aux/libnm-libnm-aux.la + +shared_nm_libnm_aux_libnm_libnm_aux_la_CPPFLAGS = \ + $(dflt_cppflags) \ + -I$(srcdir)/shared \ + -I$(builddir)/shared \ + -I$(srcdir)/libnm-core \ + -I$(builddir)/libnm-core \ + -I$(srcdir)/libnm \ + -I$(builddir)/libnm \ + $(CODE_COVERAGE_CFLAGS) \ + $(GLIB_CFLAGS) \ + $(SANITIZER_LIB_CFLAGS) \ + -DG_LOG_DOMAIN=\""libnmc"\" \ + -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_CLIENT \ + $(NULL) + +shared_nm_libnm_aux_libnm_libnm_aux_la_SOURCES = \ + shared/nm-libnm-aux/nm-libnm-aux.c \ + shared/nm-libnm-aux/nm-libnm-aux.h \ + $(NULL) + +shared_nm_libnm_aux_libnm_libnm_aux_la_LDFLAGS = \ + $(CODE_COVERAGE_LDFLAGS) \ + $(SANITIZER_LIB_LDFLAGS) \ + $(NULL) + +shared_nm_libnm_aux_libnm_libnm_aux_la_LIBADD = \ + $(GLIB_LIBS) \ + libnm/libnm.la \ + $(NULL) + +$(shared_nm_libnm_aux_libnm_libnm_aux_la_OBJECTS): $(libnm_core_lib_h_pub_mkenums) +$(shared_nm_libnm_aux_libnm_libnm_aux_la_OBJECTS): $(libnm_lib_h_pub_mkenums) + +############################################################################### + EXTRA_DIST += \ shared/nm-glib-aux/tests/meson.build \ $(NULL) diff --git a/libnm/meson.build b/libnm/meson.build index 51ca46d2bc..7680b9ebe0 100644 --- a/libnm/meson.build +++ b/libnm/meson.build @@ -278,3 +278,21 @@ endif if enable_tests subdir('tests') endif + +libnm_libnm_aux = static_library( + 'nm-libnm-aux', + sources: nm_libnm_aux_source, + c_args: [ + '-DG_LOG_DOMAIN="@0@"'.format('libnmc'), + '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_CLIENT', + ], + dependencies: [ + libnm_core_nm_default_dep, + libnm_dep, + ], +) + +libnm_libnm_aux_dep = declare_dependency( + include_directories: [shared_inc], + link_with: [libnm_libnm_aux], +) diff --git a/shared/meson.build b/shared/meson.build index 88b2de8f09..d6ba659bbd 100644 --- a/shared/meson.build +++ b/shared/meson.build @@ -111,6 +111,8 @@ nm_libnm_core_aux_source = files('nm-libnm-core-aux/nm-libnm-core-aux.c') nm_libnm_core_utils_source = files('nm-libnm-core-intern/nm-libnm-core-utils.c') +nm_libnm_aux_source = files('nm-libnm-aux/nm-libnm-aux.c') + nm_meta_setting_source = files('nm-meta-setting.c') nm_test_utils_impl_source = files('nm-test-utils-impl.c') @@ -168,15 +170,14 @@ libnm_utils_base_dep = declare_dependency( link_with: libnm_utils_base, ) -deps = [ - glib_nm_default_dep, - libudev_dep, -] libnm_udev_aux = static_library( 'nm-udev-aux', sources: 'nm-udev-aux/nm-udev-utils.c', - dependencies: deps, + dependencies: [ + glib_nm_default_dep, + libudev_dep, + ], c_args: c_flags, ) diff --git a/shared/nm-libnm-aux/nm-libnm-aux.c b/shared/nm-libnm-aux/nm-libnm-aux.c new file mode 100644 index 0000000000..2a6b6b22e2 --- /dev/null +++ b/shared/nm-libnm-aux/nm-libnm-aux.c @@ -0,0 +1,5 @@ +// SPDX-License-Identifier: LGPL-2.1+ + +#include "nm-default.h" + +#include "nm-libnm-aux.h" diff --git a/shared/nm-libnm-aux/nm-libnm-aux.h b/shared/nm-libnm-aux/nm-libnm-aux.h new file mode 100644 index 0000000000..66bf05b69b --- /dev/null +++ b/shared/nm-libnm-aux/nm-libnm-aux.h @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: LGPL-2.1+ + +#ifndef __NM_LIBNM_AUX_H__ +#define __NM_LIBNM_AUX_H__ + +#endif /* __NM_LIBNM_AUX_H__ */ From 9e10b4f699dbaa47b5773244157a3c9be1aa4eb4 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 6 Dec 2019 13:18:59 +0100 Subject: [PATCH 16/25] shared: add nmc_client_new_waitsync() and nmc_client_new_async*() helpers Benefits: - nmc_client_new_async*() allows to set properties on the NMClient instance before calling g_async_initable_init_async(). It also allows to subscribe to any signals (like NM_CLIENT_DEVICE_ADDED) before actually iterating the GMainContext. This is a sensible and supported thing to do! - nmc_client_new_waitsync() iterates the GMainContext until the (async) initialization is complete. That is different from synchronous nm_client_new(), which does not iterate the caller's GMainContext, and hence needs an internal context to ensure the order of events is honored. - nmc_client_new_waitsync() always returns the NMClient instance, even if initialization fails. That is useful if you need the nm_client_get_context_busy_watcher() instance to ensure all pending messages are completed. --- shared/nm-libnm-aux/nm-libnm-aux.c | 116 +++++++++++++++++++++++++++++ shared/nm-libnm-aux/nm-libnm-aux.h | 18 +++++ 2 files changed, 134 insertions(+) diff --git a/shared/nm-libnm-aux/nm-libnm-aux.c b/shared/nm-libnm-aux/nm-libnm-aux.c index 2a6b6b22e2..83b6f71b6b 100644 --- a/shared/nm-libnm-aux/nm-libnm-aux.c +++ b/shared/nm-libnm-aux/nm-libnm-aux.c @@ -3,3 +3,119 @@ #include "nm-default.h" #include "nm-libnm-aux.h" + +/*****************************************************************************/ + +NMClient * +nmc_client_new_async_valist (GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data, + const char *first_property_name, + va_list ap) +{ + NMClient *nmc; + + nmc = NM_CLIENT (g_object_new_valist (NM_TYPE_CLIENT, first_property_name, ap)); + g_async_initable_init_async (G_ASYNC_INITABLE (nmc), + G_PRIORITY_DEFAULT, + cancellable, + callback, + user_data); + return nmc; +} + +NMClient * +nmc_client_new_async (GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data, + const char *first_property_name, + ...) +{ + NMClient *nmc; + va_list ap; + + va_start (ap, first_property_name); + nmc = nmc_client_new_async_valist (cancellable, + callback, + user_data, + first_property_name, + ap); + va_end (ap); + return nmc; +} + +/*****************************************************************************/ + +typedef struct { + GMainLoop *main_loop; + NMClient *nmc; + GError *error; +} ClientCreateData; + +static void +_nmc_client_new_waitsync_cb (GObject *source_object, + GAsyncResult *result, + gpointer user_data) +{ + ClientCreateData *data = user_data; + + g_async_initable_init_finish (G_ASYNC_INITABLE (source_object), + result, + &data->error); + g_main_loop_quit (data->main_loop); +} + +/** + * nmc_client_new: + * @cancellable: the cancellable to abort the creation. + * @out_nmc: (out): (transfer full): if give, transfers a reference + * to the NMClient instance. Note that this never fails to create + * the NMClient GObject, but depending on the return value, + * the instance was successfully initialized or not. + * @error: the error if creation fails. + * @first_property_name: the name of the first property + * @...: the value of the first property, followed optionally by more + * name/value pairs, followed by %NULL + * + * Returns: %TRUE, if the client was successfully initalized. + * + * This uses nm_client_new_async() to create a NMClient instance, + * but it iterates the current GMainContext until the client is + * ready. As such, it waits for the client creation to complete + * (like sync nm_client_new()) but it iterates the caller's GMainContext + * (unlike sync nm_client_new()). This is often preferable, because + * sync nm_client_new() needs to create an additional internal GMainContext + * that it can iterate instead. That has a performance overhead that + * is often unnecessary. + */ +gboolean +nmc_client_new_waitsync (GCancellable *cancellable, + NMClient **out_nmc, + GError **error, + const char *first_property_name, + ...) +{ + gs_unref_object NMClient *nmc = NULL; + nm_auto_unref_gmainloop GMainLoop *main_loop = g_main_loop_new (g_main_context_get_thread_default (), FALSE); + ClientCreateData data = { + .main_loop = main_loop, + }; + va_list ap; + + va_start (ap, first_property_name); + nmc = nmc_client_new_async_valist (cancellable, + _nmc_client_new_waitsync_cb, + &data, + first_property_name, + ap); + va_end (ap); + + g_main_loop_run (main_loop); + + NM_SET_OUT (out_nmc, g_steal_pointer (&nmc)); + if (data.error) { + g_propagate_error (error, data.error); + return FALSE; + } + return TRUE; +} diff --git a/shared/nm-libnm-aux/nm-libnm-aux.h b/shared/nm-libnm-aux/nm-libnm-aux.h index 66bf05b69b..a0aff19f28 100644 --- a/shared/nm-libnm-aux/nm-libnm-aux.h +++ b/shared/nm-libnm-aux/nm-libnm-aux.h @@ -3,4 +3,22 @@ #ifndef __NM_LIBNM_AUX_H__ #define __NM_LIBNM_AUX_H__ +NMClient *nmc_client_new_async_valist (GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data, + const char *first_property_name, + va_list ap); + +NMClient *nmc_client_new_async (GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data, + const char *first_property_name, + ...); + +gboolean nmc_client_new_waitsync (GCancellable *cancellable, + NMClient **out_nmc, + GError **error, + const char *first_property_name, + ...); + #endif /* __NM_LIBNM_AUX_H__ */ From 5859e9a53d8f2170ed468ea0d77020c5849c0f8c Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 6 Dec 2019 13:02:31 +0100 Subject: [PATCH 17/25] tui: create NMClient instance via async init Using sync init (nm_client_new()) has an overhead as it requires an internal GMainContext to ensure preserving the order of D-Bus messages. Let's avoid that by using the async init. Note that the difference here is that we will iterate the caller's GMainContext while creating the instance. But that is no problem for nmtui at that point. --- Makefile.am | 1 + clients/tui/meson.build | 1 + clients/tui/nmtui.c | 8 ++++++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Makefile.am b/Makefile.am index 748c0c9ef2..6c29e44ff2 100644 --- a/Makefile.am +++ b/Makefile.am @@ -4640,6 +4640,7 @@ clients_tui_nmtui_LDADD = \ clients/tui/newt/libnmt-newt.a \ clients/common/libnmc.la \ clients/common/libnmc-base.la \ + shared/nm-libnm-aux/libnm-libnm-aux.la \ shared/nm-libnm-core-aux/libnm-libnm-core-aux.la \ shared/nm-libnm-core-intern/libnm-libnm-core-intern.la \ shared/nm-glib-aux/libnm-glib-aux.la \ diff --git a/clients/tui/meson.build b/clients/tui/meson.build index 8948d6ff35..db6bd429fd 100644 --- a/clients/tui/meson.build +++ b/clients/tui/meson.build @@ -51,6 +51,7 @@ deps = [ libnmc_base_dep, libnmc_dep, libnmt_newt_dep, + libnm_libnm_aux_dep, ] executable( diff --git a/clients/tui/nmtui.c b/clients/tui/nmtui.c index e9d2ab506b..dcd8973772 100644 --- a/clients/tui/nmtui.c +++ b/clients/tui/nmtui.c @@ -18,6 +18,8 @@ #include #include +#include "nm-libnm-aux/nm-libnm-aux.h" + #include "nmt-newt.h" #include "nm-editor-bindings.h" @@ -231,8 +233,10 @@ main (int argc, char **argv) nm_editor_bindings_init (); - nm_client = nm_client_new (NULL, &error); - if (!nm_client) { + if (!nmc_client_new_waitsync (NULL, + &nm_client, + &error, + NULL)) { g_printerr (_("Could not contact NetworkManager: %s.\n"), error->message); g_error_free (error); exit (1); From b6c83d18e439d5221e75d99f1b6f3b77d00d2ff1 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 6 Dec 2019 15:59:27 +0100 Subject: [PATCH 18/25] tui: don't fetch permissions for NMClient in nmtui nmtui doesn't care about the permissions. Don't fetch them. --- clients/tui/nmtui.c | 1 + 1 file changed, 1 insertion(+) diff --git a/clients/tui/nmtui.c b/clients/tui/nmtui.c index dcd8973772..a6ea6f7f52 100644 --- a/clients/tui/nmtui.c +++ b/clients/tui/nmtui.c @@ -236,6 +236,7 @@ main (int argc, char **argv) if (!nmc_client_new_waitsync (NULL, &nm_client, &error, + NM_CLIENT_INSTANCE_FLAGS, (guint) NM_CLIENT_INSTANCE_FLAGS_NO_AUTO_FETCH_PERMISSIONS, NULL)) { g_printerr (_("Could not contact NetworkManager: %s.\n"), error->message); g_error_free (error); From c5c7fffda839a9aa0a013a482d55d2386814b120 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 6 Dec 2019 13:52:29 +0100 Subject: [PATCH 19/25] cloud-setup: reuse nmc_client_new_waitsync() to create NMClient instance --- Makefile.am | 1 + clients/cloud-setup/main.c | 75 +++++++++------------------------ clients/cloud-setup/meson.build | 13 +++--- 3 files changed, 27 insertions(+), 62 deletions(-) diff --git a/Makefile.am b/Makefile.am index 6c29e44ff2..4f690a5c0e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -4707,6 +4707,7 @@ clients_cloud_setup_nm_cloud_setup_LDFLAGS = \ $(NULL) clients_cloud_setup_nm_cloud_setup_LDADD = \ + shared/nm-libnm-aux/libnm-libnm-aux.la \ shared/nm-libnm-core-aux/libnm-libnm-core-aux.la \ shared/nm-libnm-core-intern/libnm-libnm-core-intern.la \ shared/nm-glib-aux/libnm-glib-aux.la \ diff --git a/clients/cloud-setup/main.c b/clients/cloud-setup/main.c index 8250945c47..2ba10285b6 100644 --- a/clients/cloud-setup/main.c +++ b/clients/cloud-setup/main.c @@ -2,8 +2,9 @@ #include "nm-default.h" -#include "nm-cloud-setup-utils.h" +#include "nm-libnm-aux/nm-libnm-aux.h" +#include "nm-cloud-setup-utils.h" #include "nmcs-provider-ec2.h" #include "nm-libnm-core-intern/nm-libnm-core-utils.h" @@ -122,58 +123,6 @@ out: /*****************************************************************************/ -typedef struct { - GMainLoop *main_loop; - NMClient *nmc; -} ClientCreateData; - -static void -_nmc_create_cb (GObject *source_object, - GAsyncResult *result, - gpointer user_data) -{ - gs_unref_object NMClient *nmc = NULL; - ClientCreateData *data = user_data; - gs_free_error GError *error = NULL; - - nmc = nm_client_new_finish (result, &error); - if (!nmc) { - if (!nm_utils_error_is_cancelled (error, FALSE)) - _LOGI ("failure to talk to NetworkManager: %s", error->message); - goto out; - } - - if (!nm_client_get_nm_running (nmc)) { - _LOGI ("NetworkManager is not running"); - goto out; - } - - _LOGD ("NetworkManager is running"); - nmcs_wait_for_objects_register (nmc); - nmcs_wait_for_objects_register (nm_client_get_context_busy_watcher (nmc)); - - data->nmc = g_steal_pointer (&nmc); -out: - g_main_loop_quit (data->main_loop); -} - -static NMClient * -_nmc_create (GCancellable *sigterm_cancellable) -{ - nm_auto_unref_gmainloop GMainLoop *main_loop = g_main_loop_new (NULL, FALSE); - ClientCreateData data = { - .main_loop = main_loop, - }; - - nm_client_new_async (sigterm_cancellable, _nmc_create_cb, &data); - - g_main_loop_run (main_loop); - - return data.nmc; -} - -/*****************************************************************************/ - static char ** _nmc_get_hwaddrs (NMClient *nmc) { @@ -593,6 +542,7 @@ main (int argc, const char *const*argv) gs_unref_object NMCSProvider *provider = NULL; gs_unref_object NMClient *nmc = NULL; gs_unref_hashtable GHashTable *config_dict = NULL; + gs_free_error GError *error = NULL; _nm_logging_enabled_init (g_getenv (NMCS_ENV_VARIABLE ("NM_CLOUD_SETUP_LOG"))); @@ -616,9 +566,24 @@ main (int argc, const char *const*argv) if (!provider) goto done; - nmc = _nmc_create (sigterm_cancellable); - if (!nmc) + nmc_client_new_waitsync (sigterm_cancellable, + &nmc, + &error, + NULL); + + nmcs_wait_for_objects_register (nmc); + nmcs_wait_for_objects_register (nm_client_get_context_busy_watcher (nmc)); + + if (error) { + if (!nm_utils_error_is_cancelled (error, FALSE)) + _LOGI ("failure to talk to NetworkManager: %s", error->message); goto done; + } + + if (!nm_client_get_nm_running (nmc)) { + _LOGI ("NetworkManager is not running"); + goto done; + } config_dict = _get_config (sigterm_cancellable, provider, nmc); if (!config_dict) diff --git a/clients/cloud-setup/meson.build b/clients/cloud-setup/meson.build index e9cd970a36..b0a6191c46 100644 --- a/clients/cloud-setup/meson.build +++ b/clients/cloud-setup/meson.build @@ -29,16 +29,15 @@ sources = files( 'nmcs-provider.c', ) -deps = [ - libnmc_base_dep, - libnmc_dep, - libcurl_dep, -] - executable( name, sources, - dependencies: deps, + dependencies: [ + libnmc_base_dep, + libnmc_dep, + libcurl_dep, + libnm_libnm_aux_dep, + ], c_args: clients_c_flags + ['-DG_LOG_DOMAIN="@0@"'.format(name)], link_with: libnm_systemd_logging_stub, From b78e5cf45c38604f247c6787071f4bf6a2d2f73d Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 6 Dec 2019 16:00:40 +0100 Subject: [PATCH 20/25] cloud-setup: don't fetch permissions for NMClient in nm-cloud-setup nm-cloud-setup doesn't care about the permissions. Don't fetch them. --- clients/cloud-setup/main.c | 1 + 1 file changed, 1 insertion(+) diff --git a/clients/cloud-setup/main.c b/clients/cloud-setup/main.c index 2ba10285b6..743f931c0f 100644 --- a/clients/cloud-setup/main.c +++ b/clients/cloud-setup/main.c @@ -569,6 +569,7 @@ main (int argc, const char *const*argv) nmc_client_new_waitsync (sigterm_cancellable, &nmc, &error, + NM_CLIENT_INSTANCE_FLAGS, (guint) NM_CLIENT_INSTANCE_FLAGS_NO_AUTO_FETCH_PERMISSIONS, NULL); nmcs_wait_for_objects_register (nmc); From 0b5e72b90d99e6af567e5ca3fa7801882194df8f Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 6 Dec 2019 17:09:18 +0100 Subject: [PATCH 21/25] nm-online: use nmc_client_new_async() instead of nm_client_new_async() This will allow us to set construct parameters to the instance, like NM_CLIENT_INSTANCE_FLAGS. --- Makefile.am | 1 + clients/meson.build | 11 +++++------ clients/nm-online.c | 19 +++++++++++++------ 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/Makefile.am b/Makefile.am index 4f690a5c0e..fb9a3dd2e6 100644 --- a/Makefile.am +++ b/Makefile.am @@ -4216,6 +4216,7 @@ clients_nm_online_LDFLAGS = \ -Wl,--version-script="$(srcdir)/linker-script-binary.ver" clients_nm_online_LDADD = \ + shared/nm-libnm-aux/libnm-libnm-aux.la \ libnm/libnm.la \ $(GLIB_LIBS) diff --git a/clients/meson.build b/clients/meson.build index 69e0bfef2b..8b2fa4421b 100644 --- a/clients/meson.build +++ b/clients/meson.build @@ -2,15 +2,14 @@ clients_c_flags = ['-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_C name = 'nm-online' -deps = [ - libnm_dep, - libnm_nm_default_dep, -] - executable( name, name + '.c', - dependencies: deps, + dependencies: [ + libnm_dep, + libnm_nm_default_dep, + libnm_libnm_aux_dep, + ], c_args: clients_c_flags + ['-DG_LOG_DOMAIN="@0@"'.format(name)], link_args: ldflags_linker_script_binary, link_depends: linker_script_binary, diff --git a/clients/nm-online.c b/clients/nm-online.c index de9c3794f0..014be11165 100644 --- a/clients/nm-online.c +++ b/clients/nm-online.c @@ -23,6 +23,8 @@ #include #include +#include "nm-libnm-aux/nm-libnm-aux.h" + #define PROGRESS_STEPS 15 #define EXIT_NONE -1 @@ -198,13 +200,16 @@ got_client (GObject *source_object, GAsyncResult *res, gpointer user_data) { OnlineData *data = user_data; gs_free_error GError *error = NULL; - NMClient *client; + + nm_assert (NM_IS_CLIENT (source_object)); + nm_assert (NM_CLIENT (source_object) == data->client); nm_clear_g_source (&data->client_new_timeout_id); g_clear_object (&data->client_new_cancellable); - client = nm_client_new_finish (res, &error); - if (!client) { + if (!g_async_initable_init_finish (G_ASYNC_INITABLE (source_object), + res, + &error)) { if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) return; data->quiet = TRUE; @@ -214,8 +219,6 @@ got_client (GObject *source_object, GAsyncResult *res, gpointer user_data) return; } - data->client = client; - if (quit_if_connected (data)) return; @@ -285,7 +288,11 @@ main (int argc, char *argv[]) data.client_new_cancellable = g_cancellable_new (); data.client_new_timeout_id = g_timeout_add_seconds (30, got_client_timeout, &data); - nm_client_new_async (data.client_new_cancellable, got_client, &data); + + data.client = nmc_client_new_async (data.client_new_cancellable, + got_client, + &data, + NULL); g_main_loop_run (data.loop); From 00461632015714f87b9c6ea2524b823875bcca1b Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 6 Dec 2019 17:16:38 +0100 Subject: [PATCH 22/25] nm-online: don't fetch permissions for NMClient in nm-online nm-online doesn't care about the permissions. Don't fetch them. --- clients/nm-online.c | 1 + 1 file changed, 1 insertion(+) diff --git a/clients/nm-online.c b/clients/nm-online.c index 014be11165..9ea57641cb 100644 --- a/clients/nm-online.c +++ b/clients/nm-online.c @@ -292,6 +292,7 @@ main (int argc, char *argv[]) data.client = nmc_client_new_async (data.client_new_cancellable, got_client, &data, + NM_CLIENT_INSTANCE_FLAGS, (guint) NM_CLIENT_INSTANCE_FLAGS_NO_AUTO_FETCH_PERMISSIONS, NULL); g_main_loop_run (data.loop); From 3035837aa8abee4eaab4fd5c2a9bbd076db41cfe Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 6 Dec 2019 17:09:18 +0100 Subject: [PATCH 23/25] cli: use nmc_client_new_async() instead of nm_client_new_async() This will allow us to set construct parameters to the instance, like NM_CLIENT_INSTANCE_FLAGS. --- Makefile.am | 1 + clients/cli/common.c | 16 +++++++++++++--- clients/cli/meson.build | 2 +- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/Makefile.am b/Makefile.am index fb9a3dd2e6..8b75426009 100644 --- a/Makefile.am +++ b/Makefile.am @@ -4439,6 +4439,7 @@ clients_cli_nmcli_LDADD = \ shared/nm-glib-aux/libnm-glib-aux.la \ shared/nm-std-aux/libnm-std-aux.la \ shared/libcsiphash.la \ + shared/nm-libnm-aux/libnm-libnm-aux.la \ libnm/libnm.la \ $(GLIB_LIBS) \ $(READLINE_LIBS) diff --git a/clients/cli/common.c b/clients/cli/common.c index 04ccf8dc1f..88be4376ef 100644 --- a/clients/cli/common.c +++ b/clients/cli/common.c @@ -13,6 +13,8 @@ #include #include +#include "nm-libnm-aux/nm-libnm-aux.h" + #include "nm-vpn-helpers.h" #include "nm-client-utils.h" @@ -1216,17 +1218,22 @@ got_client (GObject *source_object, GAsyncResult *res, gpointer user_data) CmdCall *call = user_data; NmCli *nmc; + nm_assert (NM_IS_CLIENT (source_object)); + task = g_steal_pointer (&call->task); nmc = g_task_get_task_data (task); nmc->should_wait--; - nmc->client = nm_client_new_finish (res, &error); - if (!nmc->client) { + if (!g_async_initable_init_finish (G_ASYNC_INITABLE (source_object), + res, + &error)) { + g_object_unref (source_object); g_task_return_new_error (task, NMCLI_ERROR, NMC_RESULT_ERROR_UNKNOWN, _("Error: Could not create NMClient object: %s."), error->message); } else { + nmc->client = NM_CLIENT (source_object); call_cmd (nmc, g_steal_pointer (&task), call->cmd, call->argc, call->argv); } @@ -1259,7 +1266,10 @@ call_cmd (NmCli *nmc, GTask *task, const NMCCommand *cmd, int argc, char **argv) call->argc = argc; call->argv = argv; call->task = task; - nm_client_new_async (NULL, got_client, call); + nmc_client_new_async (NULL, + got_client, + call, + NULL); } } diff --git a/clients/cli/meson.build b/clients/cli/meson.build index 562020630d..1c8148920c 100644 --- a/clients/cli/meson.build +++ b/clients/cli/meson.build @@ -22,11 +22,11 @@ deps = [ libnmc_base_dep, libnmc_dep, readline_dep, + libnm_libnm_aux_dep, ] if enable_polkit_agent sources += nm_polkit_listener - deps += polkit_agent_dep endif From 030e1472f4235ec253735336a743826b8540be19 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 6 Dec 2019 17:38:26 +0100 Subject: [PATCH 24/25] cli: don't fetch permissions for NMClient in nmcli unless required This avoids unnecessarily fetching permissions, which are not needed most of the time. During `nmcli general permissions` we require to fetch the permissions. This is now solved better, because previously the code waited for any permissions to be not UNKNOWN. That was a hack, because there are cases where all permissions would be UNKNOWN (hidepid mount option) and nmcli would hang. There is a downside too: for `nmcli general permissions` we now first need to wait for NMClient to initialize, before starting to fetch permissions. Previously, we would call GetPermissions() in parallel with initializing NMClient. It now takes longer. That should be fixed be refactoring the code in nmcli to not wait for NMClient to be fully initialized, before requesting the permissions. --- clients/cli/common.c | 1 + clients/cli/general.c | 92 ++++++++++++++++++++++++------------------- 2 files changed, 53 insertions(+), 40 deletions(-) diff --git a/clients/cli/common.c b/clients/cli/common.c index 88be4376ef..b5e684cecb 100644 --- a/clients/cli/common.c +++ b/clients/cli/common.c @@ -1269,6 +1269,7 @@ call_cmd (NmCli *nmc, GTask *task, const NMCCommand *cmd, int argc, char **argv) nmc_client_new_async (NULL, got_client, call, + NM_CLIENT_INSTANCE_FLAGS, (guint) NM_CLIENT_INSTANCE_FLAGS_NO_AUTO_FETCH_PERMISSIONS, NULL); } } diff --git a/clients/cli/general.c b/clients/cli/general.c index da8437f0ed..ccda0d52e3 100644 --- a/clients/cli/general.c +++ b/clients/cli/general.c @@ -22,6 +22,12 @@ /*****************************************************************************/ +static void permission_changed (GObject *gobject, + GParamSpec *pspec, + NmCli *nmc); + +/*****************************************************************************/ + NM_UTILS_LOOKUP_STR_DEFINE_STATIC (nm_state_to_string, NMState, NM_UTILS_LOOKUP_DEFAULT (N_("unknown")), NM_UTILS_LOOKUP_ITEM (NM_STATE_ASLEEP, N_("asleep")), @@ -498,21 +504,46 @@ timeout_cb (gpointer user_data) { NmCli *nmc = (NmCli *) user_data; + g_signal_handlers_disconnect_by_func (nmc->client, + G_CALLBACK (permission_changed), + nmc); + g_string_printf (nmc->return_text, _("Error: Timeout %d sec expired."), nmc->timeout); nmc->return_value = NMC_RESULT_ERROR_TIMEOUT_EXPIRED; quit (); return FALSE; } -static int +static void print_permissions (void *user_data) { NmCli *nmc = user_data; gs_free_error GError *error = NULL; const char *fields_str = NULL; gpointer permissions[G_N_ELEMENTS (nm_auth_permission_sorted) + 1]; + gboolean is_running; int i; + is_running = nm_client_get_nm_running (nmc->client); + + if ( is_running + && nm_client_get_permissions_state (nmc->client) != NM_TERNARY_TRUE) { + /* wait longer. Permissions are not up to date. */ + return; + } + + g_signal_handlers_disconnect_by_func (nmc->client, + G_CALLBACK (permission_changed), + nmc); + + if (!is_running) { + /* NetworkManager quit while we were waiting. */ + g_string_printf (nmc->return_text, _("NetworkManager is not running.")); + nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING; + quit (); + return; + } + if (!nmc->required_fields || strcasecmp (nmc->required_fields, "common") == 0) { } else if (strcasecmp (nmc->required_fields, "all") == 0) { } else @@ -536,62 +567,43 @@ print_permissions (void *user_data) } quit (); - return G_SOURCE_REMOVE; -} - -static gboolean -got_permissions (NmCli *nmc) -{ - NMClientPermission perm; - - /* The server returns all the permissions at once, so if at least one is there - * we already received the reply. - * - * FIXME: this is wrong, because all permissions could be unknown. We should instead - * have a signal in NMClient to indicate when permissions are received. */ - for (perm = NM_CLIENT_PERMISSION_NONE + 1; perm <= NM_CLIENT_PERMISSION_LAST; perm++) { - if (nm_client_get_permission_result (nmc->client, perm) != NM_CLIENT_PERMISSION_RESULT_UNKNOWN) - return TRUE; - } - - return FALSE; } static void -permission_changed (NMClient *client, - NMClientPermission permission, - NMClientPermissionResult result, +permission_changed (GObject *gobject, + GParamSpec *pspec, NmCli *nmc) { - if (got_permissions (nmc)) { - /* Defer the printing, so that we have a chance to process the other - * permission-changed signals. */ - g_signal_handlers_disconnect_by_func (nmc->client, - G_CALLBACK (permission_changed), - nmc); - g_idle_remove_by_data (nmc); - g_idle_add (print_permissions, nmc); - } + if (NM_IN_STRSET (pspec->name, NM_CLIENT_NM_RUNNING, + NM_CLIENT_PERMISSIONS_STATE)) + print_permissions (nmc); } static gboolean show_nm_permissions (NmCli *nmc) { - /* The permissions are available now, just print them. */ - if (got_permissions (nmc)) { - print_permissions (nmc); - return TRUE; - } + NMClientInstanceFlags instance_flags; - /* The client didn't get the permissions reply yet. Subscribe to changes. */ - g_signal_connect (nmc->client, NM_CLIENT_PERMISSION_CHANGED, - G_CALLBACK (permission_changed), nmc); + instance_flags = nm_client_get_instance_flags (nmc->client); + instance_flags &= ~NM_CLIENT_INSTANCE_FLAGS_NO_AUTO_FETCH_PERMISSIONS; + + g_object_set (nmc->client, + NM_CLIENT_INSTANCE_FLAGS, (guint) instance_flags, + NULL); + + g_signal_connect (nmc->client, + "notify", + G_CALLBACK (permission_changed), + nmc); if (nmc->timeout == -1) nmc->timeout = 10; g_timeout_add_seconds (nmc->timeout, timeout_cb, nmc); nmc->should_wait++; + + print_permissions (nmc); + return TRUE; } From cb755afa2409611e4691609743d4ee8841b75bc5 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 6 Dec 2019 18:57:28 +0100 Subject: [PATCH 25/25] clients: in debug builds randomly use sync init of NMClient for testing This affects nmtui and nm-cloud-setup, which use nmc_client_new_waitsync(). --- shared/nm-libnm-aux/nm-libnm-aux.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/shared/nm-libnm-aux/nm-libnm-aux.c b/shared/nm-libnm-aux/nm-libnm-aux.c index 83b6f71b6b..169416b9c4 100644 --- a/shared/nm-libnm-aux/nm-libnm-aux.c +++ b/shared/nm-libnm-aux/nm-libnm-aux.c @@ -102,6 +102,31 @@ nmc_client_new_waitsync (GCancellable *cancellable, }; va_list ap; +#if NM_MORE_ASSERTS > 10 + /* The sync initialization of NMClient is generally a bad idea, because it + * brings the overhead of an additional GMainContext. Anyway, since our own + * code no longer uses that, we hardly test those code paths. But they should + * work just the same. Randomly use instead the sync initialization in a debug + * build... */ + if ((g_random_int () % 2) == 0) { + gboolean success; + + va_start (ap, first_property_name); + nmc = NM_CLIENT (g_object_new_valist (NM_TYPE_CLIENT, first_property_name, ap)); + va_end (ap); + + /* iterate the context at least once, just so that the behavior from POV of the + * caller is roughly the same. */ + g_main_context_iteration (nm_client_get_main_context (nmc), FALSE); + + success = g_initable_init (G_INITABLE (nmc), + cancellable, + error); + NM_SET_OUT (out_nmc, g_steal_pointer (&nmc)); + return success; + } +#endif + va_start (ap, first_property_name); nmc = nmc_client_new_async_valist (cancellable, _nmc_client_new_waitsync_cb,