diff options
author | Thomas Haller <thaller@redhat.com> | 2017-02-16 12:20:51 +0100 |
---|---|---|
committer | Lubomir Rintel <lkundrak@v3.sk> | 2017-02-17 14:24:34 +0100 |
commit | 1c6b67b0cb551192e6ccd149bcb3d804148b7390 (patch) | |
tree | 505314929d566025b707795acb4488d2822c3d2d | |
parent | 57e379320ecb960b478aece5e2d6e6603bbd1ca3 (diff) | |
download | NetworkManager-1c6b67b0cb551192e6ccd149bcb3d804148b7390.tar.gz |
libnm-core: add and use internal struct NMSetting8021xSchemeVtable in keyfile
-rw-r--r-- | libnm-core/nm-core-internal.h | 27 | ||||
-rw-r--r-- | libnm-core/nm-keyfile-writer.c | 72 | ||||
-rw-r--r-- | libnm-core/nm-setting-8021x.c | 68 |
3 files changed, 100 insertions, 67 deletions
diff --git a/libnm-core/nm-core-internal.h b/libnm-core/nm-core-internal.h index cf085bb2b7..a0d517a597 100644 --- a/libnm-core/nm-core-internal.h +++ b/libnm-core/nm-core-internal.h @@ -342,4 +342,31 @@ gboolean _nm_utils_inet6_is_token (const struct in6_addr *in6addr); gboolean _nm_utils_team_config_equal (const char *conf1, const char *conf2, gboolean port); +/*****************************************************************************/ + +typedef struct { + const char *setting_key; + NMSetting8021xCKScheme (*scheme_func) (NMSetting8021x *setting); + NMSetting8021xCKFormat (*format_func) (NMSetting8021x *setting); + const char * (*path_func) (NMSetting8021x *setting); + GBytes * (*blob_func) (NMSetting8021x *setting); + const char * (*uri_func) (NMSetting8021x *setting); + const char *keyfile_suffix; +} NMSetting8021xSchemeVtable; + +enum { + NM_SETTING_802_1X_SCHEME_TYPE_CA_CERT, + NM_SETTING_802_1X_SCHEME_TYPE_PHASE2_CA_CERT, + NM_SETTING_802_1X_SCHEME_TYPE_CLIENT_CERT, + NM_SETTING_802_1X_SCHEME_TYPE_PHASE2_CLIENT_CERT, + NM_SETTING_802_1X_SCHEME_TYPE_PRIVATE_KEY, + NM_SETTING_802_1X_SCHEME_TYPE_PHASE2_PRIVATE_KEY, + + NM_SETTING_802_1X_SCHEME_TYPE_UNKNOWN, +}; + +extern const NMSetting8021xSchemeVtable nm_setting_8021x_scheme_vtable[NM_SETTING_802_1X_SCHEME_TYPE_UNKNOWN + 1]; + +/*****************************************************************************/ + #endif diff --git a/libnm-core/nm-keyfile-writer.c b/libnm-core/nm-keyfile-writer.c index 3a7007d954..83ec8fa672 100644 --- a/libnm-core/nm-keyfile-writer.c +++ b/libnm-core/nm-keyfile-writer.c @@ -373,68 +373,6 @@ password_raw_writer (KeyfileWriterInfo *info, nm_keyfile_plugin_kf_set_integer_list_uint8 (info->keyfile, setting_name, key, data, len); } -typedef struct ObjectType { - const char *key; - const char *suffix; - NMSetting8021xCKScheme (*scheme_func) (NMSetting8021x *setting); - NMSetting8021xCKFormat (*format_func) (NMSetting8021x *setting); - const char * (*path_func) (NMSetting8021x *setting); - GBytes * (*blob_func) (NMSetting8021x *setting); - const char * (*uri_func) (NMSetting8021x *setting); -} ObjectType; - -static const ObjectType objtypes[10] = { - { NM_SETTING_802_1X_CA_CERT, - "ca-cert", - nm_setting_802_1x_get_ca_cert_scheme, - NULL, - nm_setting_802_1x_get_ca_cert_path, - nm_setting_802_1x_get_ca_cert_blob, - nm_setting_802_1x_get_ca_cert_uri }, - - { NM_SETTING_802_1X_PHASE2_CA_CERT, - "inner-ca-cert", - nm_setting_802_1x_get_phase2_ca_cert_scheme, - NULL, - nm_setting_802_1x_get_phase2_ca_cert_path, - nm_setting_802_1x_get_phase2_ca_cert_blob, - nm_setting_802_1x_get_phase2_ca_cert_uri }, - - { NM_SETTING_802_1X_CLIENT_CERT, - "client-cert", - nm_setting_802_1x_get_client_cert_scheme, - NULL, - nm_setting_802_1x_get_client_cert_path, - nm_setting_802_1x_get_client_cert_blob, - nm_setting_802_1x_get_client_cert_uri }, - - { NM_SETTING_802_1X_PHASE2_CLIENT_CERT, - "inner-client-cert", - nm_setting_802_1x_get_phase2_client_cert_scheme, - NULL, - nm_setting_802_1x_get_phase2_client_cert_path, - nm_setting_802_1x_get_phase2_client_cert_blob, - nm_setting_802_1x_get_phase2_client_cert_uri }, - - { NM_SETTING_802_1X_PRIVATE_KEY, - "private-key", - nm_setting_802_1x_get_private_key_scheme, - nm_setting_802_1x_get_private_key_format, - nm_setting_802_1x_get_private_key_path, - nm_setting_802_1x_get_private_key_blob, - nm_setting_802_1x_get_private_key_uri }, - - { NM_SETTING_802_1X_PHASE2_PRIVATE_KEY, - "inner-private-key", - nm_setting_802_1x_get_phase2_private_key_scheme, - nm_setting_802_1x_get_phase2_private_key_format, - nm_setting_802_1x_get_phase2_private_key_path, - nm_setting_802_1x_get_phase2_private_key_blob, - nm_setting_802_1x_get_phase2_private_key_uri }, - - { NULL }, -}; - /*****************************************************************************/ static void @@ -514,13 +452,13 @@ cert_writer (KeyfileWriterInfo *info, const char *key, const GValue *value) { - const ObjectType *objtype = NULL; + const NMSetting8021xSchemeVtable *objtype = NULL; guint i; NMKeyfileWriteTypeDataCert type_data = { 0 }; - for (i = 0; i < G_N_ELEMENTS (objtypes) && objtypes[i].key; i++) { - if (g_strcmp0 (objtypes[i].key, key) == 0) { - objtype = &objtypes[i]; + for (i = 0; nm_setting_8021x_scheme_vtable[i].setting_key; i++) { + if (g_strcmp0 (nm_setting_8021x_scheme_vtable[i].setting_key, key) == 0) { + objtype = &nm_setting_8021x_scheme_vtable[i]; break; } } @@ -529,7 +467,7 @@ cert_writer (KeyfileWriterInfo *info, type_data.setting = NM_SETTING_802_1X (setting); type_data.property_name = key; - type_data.suffix = objtype->suffix; + type_data.suffix = objtype->keyfile_suffix; type_data.scheme_func = objtype->scheme_func; type_data.format_func = objtype->format_func; type_data.path_func = objtype->path_func; diff --git a/libnm-core/nm-setting-8021x.c b/libnm-core/nm-setting-8021x.c index 1e28ddfa90..353a7ce7c5 100644 --- a/libnm-core/nm-setting-8021x.c +++ b/libnm-core/nm-setting-8021x.c @@ -177,6 +177,74 @@ nm_setting_802_1x_new (void) return (NMSetting *) g_object_new (NM_TYPE_SETTING_802_1X, NULL); } +/*****************************************************************************/ + +const NMSetting8021xSchemeVtable nm_setting_8021x_scheme_vtable[] = { + [NM_SETTING_802_1X_SCHEME_TYPE_CA_CERT] = { + .setting_key = NM_SETTING_802_1X_CA_CERT, + .scheme_func = nm_setting_802_1x_get_ca_cert_scheme, + .format_func = NULL, + .path_func = nm_setting_802_1x_get_ca_cert_path, + .blob_func = nm_setting_802_1x_get_ca_cert_blob, + .uri_func = nm_setting_802_1x_get_ca_cert_uri, + .keyfile_suffix = "ca-cert", + }, + + [NM_SETTING_802_1X_SCHEME_TYPE_PHASE2_CA_CERT] = { + .setting_key = NM_SETTING_802_1X_PHASE2_CA_CERT, + .scheme_func = nm_setting_802_1x_get_phase2_ca_cert_scheme, + .format_func = NULL, + .path_func = nm_setting_802_1x_get_phase2_ca_cert_path, + .blob_func = nm_setting_802_1x_get_phase2_ca_cert_blob, + .uri_func = nm_setting_802_1x_get_phase2_ca_cert_uri, + .keyfile_suffix = "inner-ca-cert", + }, + + [NM_SETTING_802_1X_SCHEME_TYPE_CLIENT_CERT] = { + .setting_key = NM_SETTING_802_1X_CLIENT_CERT, + .scheme_func = nm_setting_802_1x_get_client_cert_scheme, + .format_func = NULL, + .path_func = nm_setting_802_1x_get_client_cert_path, + .blob_func = nm_setting_802_1x_get_client_cert_blob, + .uri_func = nm_setting_802_1x_get_client_cert_uri, + .keyfile_suffix = "client-cert", + }, + + [NM_SETTING_802_1X_SCHEME_TYPE_PHASE2_CLIENT_CERT] = { + .setting_key = NM_SETTING_802_1X_PHASE2_CLIENT_CERT, + .scheme_func = nm_setting_802_1x_get_phase2_client_cert_scheme, + .format_func = NULL, + .path_func = nm_setting_802_1x_get_phase2_client_cert_path, + .blob_func = nm_setting_802_1x_get_phase2_client_cert_blob, + .uri_func = nm_setting_802_1x_get_phase2_client_cert_uri, + .keyfile_suffix = "inner-client-cert", + }, + + [NM_SETTING_802_1X_SCHEME_TYPE_PRIVATE_KEY] = { + .setting_key = NM_SETTING_802_1X_PRIVATE_KEY, + .scheme_func = nm_setting_802_1x_get_private_key_scheme, + .format_func = nm_setting_802_1x_get_private_key_format, + .path_func = nm_setting_802_1x_get_private_key_path, + .blob_func = nm_setting_802_1x_get_private_key_blob, + .uri_func = nm_setting_802_1x_get_private_key_uri, + .keyfile_suffix = "private-key", + }, + + [NM_SETTING_802_1X_SCHEME_TYPE_PHASE2_PRIVATE_KEY] = { + .setting_key = NM_SETTING_802_1X_PHASE2_PRIVATE_KEY, + .scheme_func = nm_setting_802_1x_get_phase2_private_key_scheme, + .format_func = nm_setting_802_1x_get_phase2_private_key_format, + .path_func = nm_setting_802_1x_get_phase2_private_key_path, + .blob_func = nm_setting_802_1x_get_phase2_private_key_blob, + .uri_func = nm_setting_802_1x_get_phase2_private_key_uri, + .keyfile_suffix = "inner-private-key", + }, + + [NM_SETTING_802_1X_SCHEME_TYPE_UNKNOWN] = { NULL }, +}; + +/*****************************************************************************/ + /** * nm_setting_802_1x_get_num_eap_methods: * @setting: the #NMSetting8021x |