mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-02-05 17:00:29 +01:00
libnm: move nm_permission_to_client()/nm_permission_result_to_client() to nm-libnm-utils.c
It's nicely trivial and independent. Move it to a separate place, to avoid cluttering the more complicated code and to make it testable. Also, use binary search to find the value by string.
This commit is contained in:
parent
83d7599acc
commit
2e91add7e4
3 changed files with 90 additions and 53 deletions
|
|
@ -9,6 +9,7 @@
|
|||
#include "nm-libnm-utils.h"
|
||||
|
||||
#include "nm-glib-aux/nm-time-utils.h"
|
||||
#include "nm-libnm-core-intern/nm-common-macros.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
|
|
@ -658,3 +659,85 @@ nm_utils_fixup_product_string (const char *desc)
|
|||
|
||||
return desc_full;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
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)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
|
||||
#include "nm-types.h"
|
||||
#include "nm-glib-aux/nm-ref-string.h"
|
||||
#include "nm-client.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
|
|
@ -17,6 +18,12 @@
|
|||
|
||||
/*****************************************************************************/
|
||||
|
||||
NMClientPermission nm_permission_to_client (const char *nm);
|
||||
|
||||
NMClientPermissionResult nm_permission_result_to_client (const char *nm);
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
typedef enum {
|
||||
_NML_DBUS_LOG_LEVEL_INITIALIZED = 0x01,
|
||||
|
||||
|
|
|
|||
|
|
@ -254,59 +254,6 @@ object_creation_failed (NMObject *object, const char *failed_path)
|
|||
}
|
||||
}
|
||||
|
||||
static NMClientPermission
|
||||
nm_permission_to_client (const char *nm)
|
||||
{
|
||||
if (!strcmp (nm, NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK))
|
||||
return NM_CLIENT_PERMISSION_ENABLE_DISABLE_NETWORK;
|
||||
else if (!strcmp (nm, NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI))
|
||||
return NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIFI;
|
||||
else if (!strcmp (nm, NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN))
|
||||
return NM_CLIENT_PERMISSION_ENABLE_DISABLE_WWAN;
|
||||
else if (!strcmp (nm, NM_AUTH_PERMISSION_ENABLE_DISABLE_WIMAX))
|
||||
return NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIMAX;
|
||||
else if (!strcmp (nm, NM_AUTH_PERMISSION_SLEEP_WAKE))
|
||||
return NM_CLIENT_PERMISSION_SLEEP_WAKE;
|
||||
else if (!strcmp (nm, NM_AUTH_PERMISSION_NETWORK_CONTROL))
|
||||
return NM_CLIENT_PERMISSION_NETWORK_CONTROL;
|
||||
else if (!strcmp (nm, NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED))
|
||||
return NM_CLIENT_PERMISSION_WIFI_SHARE_PROTECTED;
|
||||
else if (!strcmp (nm, NM_AUTH_PERMISSION_WIFI_SHARE_OPEN))
|
||||
return NM_CLIENT_PERMISSION_WIFI_SHARE_OPEN;
|
||||
else if (!strcmp (nm, NM_AUTH_PERMISSION_SETTINGS_MODIFY_SYSTEM))
|
||||
return NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM;
|
||||
else if (!strcmp (nm, NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN))
|
||||
return NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN;
|
||||
else if (!strcmp (nm, NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME))
|
||||
return NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME;
|
||||
else if (!strcmp (nm, NM_AUTH_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS))
|
||||
return NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS;
|
||||
else if (!strcmp (nm, NM_AUTH_PERMISSION_RELOAD))
|
||||
return NM_CLIENT_PERMISSION_RELOAD;
|
||||
else if (!strcmp (nm, NM_AUTH_PERMISSION_CHECKPOINT_ROLLBACK))
|
||||
return NM_CLIENT_PERMISSION_CHECKPOINT_ROLLBACK;
|
||||
else if (!strcmp (nm, NM_AUTH_PERMISSION_ENABLE_DISABLE_STATISTICS))
|
||||
return NM_CLIENT_PERMISSION_ENABLE_DISABLE_STATISTICS;
|
||||
else if (!strcmp (nm, NM_AUTH_PERMISSION_ENABLE_DISABLE_CONNECTIVITY_CHECK))
|
||||
return NM_CLIENT_PERMISSION_ENABLE_DISABLE_CONNECTIVITY_CHECK;
|
||||
else if (!strcmp (nm, NM_AUTH_PERMISSION_WIFI_SCAN))
|
||||
return NM_CLIENT_PERMISSION_WIFI_SCAN;
|
||||
|
||||
return NM_CLIENT_PERMISSION_NONE;
|
||||
}
|
||||
|
||||
static NMClientPermissionResult
|
||||
nm_permission_result_to_client (const char *nm)
|
||||
{
|
||||
if (!strcmp (nm, "yes"))
|
||||
return NM_CLIENT_PERMISSION_RESULT_YES;
|
||||
else if (!strcmp (nm, "no"))
|
||||
return NM_CLIENT_PERMISSION_RESULT_NO;
|
||||
else if (!strcmp (nm, "auth"))
|
||||
return NM_CLIENT_PERMISSION_RESULT_AUTH;
|
||||
return NM_CLIENT_PERMISSION_RESULT_UNKNOWN;
|
||||
}
|
||||
|
||||
static void
|
||||
update_permissions (NMManager *self, GVariant *permissions)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue