summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2017-02-16 12:20:51 +0100
committerLubomir Rintel <lkundrak@v3.sk>2017-02-17 14:24:34 +0100
commit1c6b67b0cb551192e6ccd149bcb3d804148b7390 (patch)
tree505314929d566025b707795acb4488d2822c3d2d
parent57e379320ecb960b478aece5e2d6e6603bbd1ca3 (diff)
downloadNetworkManager-1c6b67b0cb551192e6ccd149bcb3d804148b7390.tar.gz
libnm-core: add and use internal struct NMSetting8021xSchemeVtable in keyfile
-rw-r--r--libnm-core/nm-core-internal.h27
-rw-r--r--libnm-core/nm-keyfile-writer.c72
-rw-r--r--libnm-core/nm-setting-8021x.c68
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