summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2017-02-16 15:33:14 +0100
committerLubomir Rintel <lkundrak@v3.sk>2017-02-17 14:24:34 +0100
commit7a21ae3e7785e8c763316b6d2c5a1f96bb7abc50 (patch)
tree7802dd18440f5c074d147221a6b30c94ea1cc4b4
parent199524e426d78265e28e5193e87accfab1b7676d (diff)
downloadNetworkManager-7a21ae3e7785e8c763316b6d2c5a1f96bb7abc50.tar.gz
keyfile: reuse NMSetting8021xSchemeVtable in NMKeyfileWriteTypeDataCert
-rw-r--r--libnm-core/nm-keyfile-internal.h13
-rw-r--r--libnm-core/nm-keyfile-writer.c22
-rw-r--r--src/settings/plugins/keyfile/nms-keyfile-writer.c22
3 files changed, 22 insertions, 35 deletions
diff --git a/libnm-core/nm-keyfile-internal.h b/libnm-core/nm-keyfile-internal.h
index 30c6c200d6..ded86bfc16 100644
--- a/libnm-core/nm-keyfile-internal.h
+++ b/libnm-core/nm-keyfile-internal.h
@@ -27,6 +27,8 @@
#include "nm-connection.h"
#include "nm-setting-8021x.h"
+#include "nm-core-internal.h"
+
/*****************************************************************************/
#define NM_KEYFILE_CERT_SCHEME_PREFIX_PATH "file://"
@@ -138,17 +140,8 @@ typedef gboolean (*NMKeyfileWriteHandler) (NMConnection *connection,
* type %NM_KEYFILE_WRITE_TYPE_CERT.
*/
typedef struct {
+ const NMSetting8021xSchemeVtable *vtable;
NMSetting8021x *setting;
- const char *property_name;
-
- /* The following functions are helpers that simplify the implementation
- * of the handler. */
- 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);
} NMKeyfileWriteTypeDataCert;
diff --git a/libnm-core/nm-keyfile-writer.c b/libnm-core/nm-keyfile-writer.c
index 83ec8fa672..21aeca2fa8 100644
--- a/libnm-core/nm-keyfile-writer.c
+++ b/libnm-core/nm-keyfile-writer.c
@@ -383,13 +383,13 @@ cert_writer_default (NMConnection *connection,
const char *setting_name = nm_setting_get_name (NM_SETTING (cert_data->setting));
NMSetting8021xCKScheme scheme;
- scheme = cert_data->scheme_func (cert_data->setting);
+ scheme = cert_data->vtable->scheme_func (cert_data->setting);
if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH) {
const char *path;
char *path_free = NULL, *tmp;
gs_free char *base_dir = NULL;
- path = cert_data->path_func (cert_data->setting);
+ path = cert_data->vtable->path_func (cert_data->setting);
g_assert (path);
/* If the path is relative, make it an absolute path.
@@ -413,7 +413,7 @@ cert_writer_default (NMConnection *connection,
/* Path contains at least a '/', hence it cannot be recognized as the old
* binary format consisting of a list of integers. */
- nm_keyfile_plugin_kf_set_string (file, setting_name, cert_data->property_name, path);
+ nm_keyfile_plugin_kf_set_string (file, setting_name, cert_data->vtable->setting_key, path);
g_free (tmp);
g_free (path_free);
} else if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) {
@@ -422,19 +422,19 @@ cert_writer_default (NMConnection *connection,
gsize blob_len;
char *blob_base64, *val;
- blob = cert_data->blob_func (cert_data->setting);
+ blob = cert_data->vtable->blob_func (cert_data->setting);
g_assert (blob);
blob_data = g_bytes_get_data (blob, &blob_len);
blob_base64 = g_base64_encode (blob_data, blob_len);
val = g_strconcat (NM_KEYFILE_CERT_SCHEME_PREFIX_BLOB, blob_base64, NULL);
- nm_keyfile_plugin_kf_set_string (file, setting_name, cert_data->property_name, val);
+ nm_keyfile_plugin_kf_set_string (file, setting_name, cert_data->vtable->setting_key, val);
g_free (val);
g_free (blob_base64);
} else if (scheme == NM_SETTING_802_1X_CK_SCHEME_PKCS11) {
- nm_keyfile_plugin_kf_set_string (file, setting_name, cert_data->property_name,
- cert_data->uri_func (cert_data->setting));
+ nm_keyfile_plugin_kf_set_string (file, setting_name, cert_data->vtable->setting_key,
+ cert_data->vtable->uri_func (cert_data->setting));
} else {
/* scheme_func() returns UNKNOWN in all other cases. The only valid case
* where a scheme is allowed to be UNKNOWN, is unsetting the value. In this
@@ -466,13 +466,7 @@ cert_writer (KeyfileWriterInfo *info,
g_return_if_reached ();
type_data.setting = NM_SETTING_802_1X (setting);
- type_data.property_name = key;
- 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;
- type_data.blob_func = objtype->blob_func;
- type_data.uri_func = objtype->uri_func;
+ type_data.vtable = objtype;
if (info->handler) {
if (info->handler (info->connection,
diff --git a/src/settings/plugins/keyfile/nms-keyfile-writer.c b/src/settings/plugins/keyfile/nms-keyfile-writer.c
index 95897db38a..50b4113649 100644
--- a/src/settings/plugins/keyfile/nms-keyfile-writer.c
+++ b/src/settings/plugins/keyfile/nms-keyfile-writer.c
@@ -51,12 +51,12 @@ cert_writer (NMConnection *connection,
NMSetting8021xCKFormat format;
const char *path = NULL, *ext = "pem";
- scheme = cert_data->scheme_func (cert_data->setting);
+ scheme = cert_data->vtable->scheme_func (cert_data->setting);
if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH) {
char *tmp = NULL;
const char *accepted_path = NULL;
- path = cert_data->path_func (cert_data->setting);
+ path = cert_data->vtable->path_func (cert_data->setting);
g_assert (path);
if (g_str_has_prefix (path, info->keyfile_dir)) {
@@ -92,11 +92,11 @@ cert_writer (NMConnection *connection,
if (!accepted_path)
accepted_path = tmp = g_strconcat (NM_KEYFILE_CERT_SCHEME_PREFIX_PATH, path, NULL);
- nm_keyfile_plugin_kf_set_string (file, setting_name, cert_data->property_name, accepted_path);
+ nm_keyfile_plugin_kf_set_string (file, setting_name, cert_data->vtable->setting_key, accepted_path);
g_free (tmp);
} else if (scheme == NM_SETTING_802_1X_CK_SCHEME_PKCS11) {
- nm_keyfile_plugin_kf_set_string (file, setting_name, cert_data->property_name,
- cert_data->uri_func (cert_data->setting));
+ nm_keyfile_plugin_kf_set_string (file, setting_name, cert_data->vtable->setting_key,
+ cert_data->vtable->uri_func (cert_data->setting));
} else if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) {
GBytes *blob;
const guint8 *blob_data;
@@ -105,13 +105,13 @@ cert_writer (NMConnection *connection,
GError *local = NULL;
char *new_path;
- blob = cert_data->blob_func (cert_data->setting);
+ blob = cert_data->vtable->blob_func (cert_data->setting);
g_assert (blob);
blob_data = g_bytes_get_data (blob, &blob_len);
- if (cert_data->format_func) {
+ if (cert_data->vtable->format_func) {
/* Get the extension for a private key */
- format = cert_data->format_func (cert_data->setting);
+ format = cert_data->vtable->format_func (cert_data->setting);
if (format == NM_SETTING_802_1X_CK_FORMAT_PKCS12)
ext = "p12";
} else {
@@ -124,17 +124,17 @@ cert_writer (NMConnection *connection,
* from now on instead of pushing around the certificate data.
*/
new_path = g_strdup_printf ("%s/%s-%s.%s", info->keyfile_dir, nm_connection_get_uuid (connection),
- cert_data->suffix, ext);
+ cert_data->vtable->keyfile_suffix, ext);
success = nm_utils_file_set_contents (new_path, (const gchar *) blob_data,
blob_len, 0600, &local);
if (success) {
/* Write the path value to the keyfile.
* We know, that basename(new_path) starts with a UUID, hence no conflict with "data:;base64," */
- nm_keyfile_plugin_kf_set_string (file, setting_name, cert_data->property_name, strrchr (new_path, '/') + 1);
+ nm_keyfile_plugin_kf_set_string (file, setting_name, cert_data->vtable->setting_key, strrchr (new_path, '/') + 1);
} else {
nm_log_warn (LOGD_SETTINGS, "keyfile: %s.%s: failed to write certificate to file %s: %s",
- setting_name, cert_data->property_name, new_path, local->message);
+ setting_name, cert_data->vtable->setting_key, new_path, local->message);
g_error_free (local);
}
g_free (new_path);