mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager
synced 2024-07-22 02:35:25 +00:00
libnm-util: handle get_secret_flags/set_secret_flags for WirelessSecurity setting
Becuase there's only one 'flags' property for WEP keys (because it's pretty dumb to have different flags for all 4 WEP keys) we need to do some tap dancing with the secret name, so that requests for "wep-keyX" look up the "wep-key-flags" property.
This commit is contained in:
parent
d95280756f
commit
93cbc77154
|
@ -295,6 +295,7 @@ update_one_secret (NMSetting *setting, const char *key, GValue *value, GError **
|
|||
static gboolean
|
||||
get_secret_flags (NMSetting *setting,
|
||||
const char *secret_name,
|
||||
gboolean verify_secret,
|
||||
NMSettingSecretFlags *out_flags,
|
||||
GError **error)
|
||||
{
|
||||
|
@ -331,6 +332,7 @@ get_secret_flags (NMSetting *setting,
|
|||
static gboolean
|
||||
set_secret_flags (NMSetting *setting,
|
||||
const char *secret_name,
|
||||
gboolean verify_secret,
|
||||
NMSettingSecretFlags flags,
|
||||
GError **error)
|
||||
{
|
||||
|
|
|
@ -828,6 +828,58 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
get_secret_flags (NMSetting *setting,
|
||||
const char *secret_name,
|
||||
gboolean verify_secret,
|
||||
NMSettingSecretFlags *out_flags,
|
||||
GError **error)
|
||||
{
|
||||
NMSettingClass *setting_class;
|
||||
gboolean verify_override = verify_secret;
|
||||
|
||||
/* There's only one 'flags' property for WEP keys, so alias all the WEP key
|
||||
* property names to that flags property.
|
||||
*/
|
||||
if ( !g_strcmp0 (secret_name, NM_SETTING_WIRELESS_SECURITY_WEP_KEY0)
|
||||
|| !g_strcmp0 (secret_name, NM_SETTING_WIRELESS_SECURITY_WEP_KEY1)
|
||||
|| !g_strcmp0 (secret_name, NM_SETTING_WIRELESS_SECURITY_WEP_KEY2)
|
||||
|| !g_strcmp0 (secret_name, NM_SETTING_WIRELESS_SECURITY_WEP_KEY3)) {
|
||||
secret_name = "wep-key";
|
||||
verify_override = FALSE; /* Already know it's a secret */
|
||||
}
|
||||
|
||||
/* Chain up to superclass with modified key name */
|
||||
setting_class = NM_SETTING_CLASS (nm_setting_wireless_security_parent_class);
|
||||
return setting_class->get_secret_flags (setting, secret_name, verify_override, out_flags, error);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
set_secret_flags (NMSetting *setting,
|
||||
const char *secret_name,
|
||||
gboolean verify_secret,
|
||||
NMSettingSecretFlags flags,
|
||||
GError **error)
|
||||
{
|
||||
NMSettingClass *setting_class;
|
||||
gboolean verify_override = verify_secret;
|
||||
|
||||
/* There's only one 'flags' property for WEP keys, so alias all the WEP key
|
||||
* property names to that flags property.
|
||||
*/
|
||||
if ( !g_strcmp0 (secret_name, NM_SETTING_WIRELESS_SECURITY_WEP_KEY0)
|
||||
|| !g_strcmp0 (secret_name, NM_SETTING_WIRELESS_SECURITY_WEP_KEY1)
|
||||
|| !g_strcmp0 (secret_name, NM_SETTING_WIRELESS_SECURITY_WEP_KEY2)
|
||||
|| !g_strcmp0 (secret_name, NM_SETTING_WIRELESS_SECURITY_WEP_KEY3)) {
|
||||
secret_name = "wep-key";
|
||||
verify_override = FALSE; /* Already know it's a secret */
|
||||
}
|
||||
|
||||
/* Chain up to superclass with modified key name */
|
||||
setting_class = NM_SETTING_CLASS (nm_setting_wireless_security_parent_class);
|
||||
return setting_class->set_secret_flags (setting, secret_name, verify_override, flags, error);
|
||||
}
|
||||
|
||||
static void
|
||||
nm_setting_wireless_security_init (NMSettingWirelessSecurity *setting)
|
||||
{
|
||||
|
@ -1013,8 +1065,10 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
|
|||
object_class->get_property = get_property;
|
||||
object_class->finalize = finalize;
|
||||
|
||||
parent_class->verify = verify;
|
||||
parent_class->need_secrets = need_secrets;
|
||||
parent_class->verify = verify;
|
||||
parent_class->need_secrets = need_secrets;
|
||||
parent_class->get_secret_flags = get_secret_flags;
|
||||
parent_class->set_secret_flags = set_secret_flags;
|
||||
|
||||
/* Properties */
|
||||
/**
|
||||
|
|
|
@ -598,13 +598,15 @@ is_secret_prop (NMSetting *setting, const char *secret_name, GError **error)
|
|||
static gboolean
|
||||
get_secret_flags (NMSetting *setting,
|
||||
const char *secret_name,
|
||||
gboolean verify_secret,
|
||||
NMSettingSecretFlags *out_flags,
|
||||
GError **error)
|
||||
{
|
||||
char *flags_prop;
|
||||
NMSettingSecretFlags flags = NM_SETTING_SECRET_FLAG_SYSTEM_OWNED;
|
||||
|
||||
g_return_val_if_fail (is_secret_prop (setting, secret_name, error), FALSE);
|
||||
if (verify_secret)
|
||||
g_return_val_if_fail (is_secret_prop (setting, secret_name, error), FALSE);
|
||||
|
||||
flags_prop = g_strdup_printf ("%s-flags", secret_name);
|
||||
g_object_get (G_OBJECT (setting), flags_prop, &flags, NULL);
|
||||
|
@ -638,18 +640,20 @@ nm_setting_get_secret_flags (NMSetting *setting,
|
|||
g_return_val_if_fail (NM_IS_SETTING (setting), FALSE);
|
||||
g_return_val_if_fail (secret_name != NULL, FALSE);
|
||||
|
||||
return NM_SETTING_GET_CLASS (setting)->get_secret_flags (setting, secret_name, out_flags, error);
|
||||
return NM_SETTING_GET_CLASS (setting)->get_secret_flags (setting, secret_name, TRUE, out_flags, error);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
set_secret_flags (NMSetting *setting,
|
||||
const char *secret_name,
|
||||
gboolean verify_secret,
|
||||
NMSettingSecretFlags flags,
|
||||
GError **error)
|
||||
{
|
||||
char *flags_prop;
|
||||
|
||||
g_return_val_if_fail (is_secret_prop (setting, secret_name, error), FALSE);
|
||||
if (verify_secret)
|
||||
g_return_val_if_fail (is_secret_prop (setting, secret_name, error), FALSE);
|
||||
|
||||
flags_prop = g_strdup_printf ("%s-flags", secret_name);
|
||||
g_object_set (G_OBJECT (setting), flags_prop, flags, NULL);
|
||||
|
@ -681,7 +685,7 @@ nm_setting_set_secret_flags (NMSetting *setting,
|
|||
g_return_val_if_fail (secret_name != NULL, FALSE);
|
||||
g_return_val_if_fail (flags & NM_SETTING_SECRET_FLAGS_ALL, FALSE);
|
||||
|
||||
return NM_SETTING_GET_CLASS (setting)->set_secret_flags (setting, secret_name, flags, error);
|
||||
return NM_SETTING_GET_CLASS (setting)->set_secret_flags (setting, secret_name, TRUE, flags, error);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -133,11 +133,13 @@ typedef struct {
|
|||
|
||||
gboolean (*get_secret_flags) (NMSetting *setting,
|
||||
const char *secret_name,
|
||||
gboolean verify_secret,
|
||||
NMSettingSecretFlags *out_flags,
|
||||
GError **error);
|
||||
|
||||
gboolean (*set_secret_flags) (NMSetting *setting,
|
||||
const char *secret_name,
|
||||
gboolean verify_secret,
|
||||
NMSettingSecretFlags flags,
|
||||
GError **error);
|
||||
|
||||
|
|
Loading…
Reference in a new issue