summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2019-03-19 09:40:22 +0100
committerThomas Haller <thaller@redhat.com>2019-03-25 09:12:32 +0100
commitdf0d5f8dee529b8be669bf786d5ade773a1264d1 (patch)
treea0c2a5e7fdc7c3a0d7bdbafc0fc14a28eea567e8
parentb83c88783ebf285086960faae693763749254643 (diff)
cli: add property type for 802-1x certificate properties (pt1)
-rw-r--r--clients/common/nm-meta-setting-desc.c52
-rw-r--r--clients/common/nm-meta-setting-desc.h3
2 files changed, 45 insertions, 10 deletions
diff --git a/clients/common/nm-meta-setting-desc.c b/clients/common/nm-meta-setting-desc.c
index ead543b27..f2c287b06 100644
--- a/clients/common/nm-meta-setting-desc.c
+++ b/clients/common/nm-meta-setting-desc.c
@@ -2048,22 +2048,25 @@ done:
/*****************************************************************************/
static gconstpointer
-_get_fcn_802_1x_ca_cert (ARGS_GET_FCN)
+_get_fcn_cert_8021x (ARGS_GET_FCN)
{
NMSetting8021x *s_8021X = NM_SETTING_802_1X (setting);
+ const NMSetting8021xSchemeVtable *vtable;
char *ca_cert_str = NULL;
RETURN_UNSUPPORTED_GET_TYPE ();
- switch (nm_setting_802_1x_get_ca_cert_scheme (s_8021X)) {
+ vtable = &nm_setting_8021x_scheme_vtable[property_info->property_typ_data->subtype.cert_8021x.scheme_type];
+
+ switch (vtable->scheme_func (s_8021X)) {
case NM_SETTING_802_1X_CK_SCHEME_BLOB:
- ca_cert_str = bytes_to_string (nm_setting_802_1x_get_ca_cert_blob (s_8021X));
+ ca_cert_str = bytes_to_string (vtable->blob_func (s_8021X));
break;
case NM_SETTING_802_1X_CK_SCHEME_PATH:
- ca_cert_str = g_strdup (nm_setting_802_1x_get_ca_cert_path (s_8021X));
+ ca_cert_str = g_strdup (vtable->path_func (s_8021X));
break;
case NM_SETTING_802_1X_CK_SCHEME_PKCS11:
- ca_cert_str = g_strdup (nm_setting_802_1x_get_ca_cert_uri (s_8021X));
+ ca_cert_str = g_strdup (vtable->uri_func (s_8021X));
break;
case NM_SETTING_802_1X_CK_SCHEME_UNKNOWN:
break;
@@ -2073,6 +2076,32 @@ _get_fcn_802_1x_ca_cert (ARGS_GET_FCN)
RETURN_STR_TO_FREE (ca_cert_str);
}
+static gboolean
+_set_fcn_cert_8021x (ARGS_SET_FCN)
+{
+ gs_free char *value_to_free = NULL;
+ NMSetting8021xCKScheme scheme = NM_SETTING_802_1X_CK_SCHEME_PATH;
+ const NMSetting8021xSchemeVtable *vtable;
+
+ if (_SET_FCN_DO_RESET_DEFAULT (value))
+ return _gobject_property_reset_default (setting, property_info->property_name);
+
+ value = nm_strstrip_avoid_copy (value, &value_to_free);
+
+ if (strncmp (value, NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PKCS11, NM_STRLEN (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PKCS11)) == 0)
+ scheme = NM_SETTING_802_1X_CK_SCHEME_PKCS11;
+ else if (strncmp (value, NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH, NM_STRLEN (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH)) == 0)
+ value += NM_STRLEN (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH);
+
+ vtable = &nm_setting_8021x_scheme_vtable[property_info->property_typ_data->subtype.cert_8021x.scheme_type];
+
+ return vtable->set_cert_func (NM_SETTING_802_1X (setting),
+ value,
+ scheme,
+ NULL,
+ error);
+}
+
static gconstpointer
_get_fcn_802_1x_client_cert (ARGS_GET_FCN)
{
@@ -2280,8 +2309,6 @@ _get_fcn_802_1x_phase2_private_key (ARGS_GET_FCN)
return set_func (NM_SETTING_802_1X (setting), path, password, scheme, NULL, error); \
}
-DEFINE_SETTER_CERT (_set_fcn_802_1x_ca_cert, nm_setting_802_1x_set_ca_cert)
-
DEFINE_SETTER_CERT (_set_fcn_802_1x_client_cert, nm_setting_802_1x_set_client_cert)
DEFINE_SETTER_CERT (_set_fcn_802_1x_phase2_ca_cert, nm_setting_802_1x_set_phase2_ca_cert)
@@ -4651,6 +4678,11 @@ static const NMMetaPropertyType _pt_dcb = {
.set_fcn = _set_fcn_dcb,
};
+static const NMMetaPropertyType _pt_cert_8021x = {
+ .get_fcn = _get_fcn_cert_8021x,
+ .set_fcn = _set_fcn_cert_8021x,
+};
+
static const NMMetaPropertyType _pt_ethtool = {
.get_fcn = _get_fcn_ethtool,
.set_fcn = _set_fcn_ethtool,
@@ -4782,9 +4814,9 @@ static const NMMetaPropertyInfo *const property_infos_802_1X[] = {
" [file://]<file path>\n"
"Note that nmcli does not support specifying certificates as raw blob data.\n"
"Example: /home/cimrman/cacert.crt\n"),
- .property_type = DEFINE_PROPERTY_TYPE (
- .get_fcn = _get_fcn_802_1x_ca_cert,
- .set_fcn = _set_fcn_802_1x_ca_cert,
+ .property_type = &_pt_cert_8021x,
+ .property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (cert_8021x,
+ .scheme_type = NM_SETTING_802_1X_SCHEME_TYPE_CA_CERT,
),
),
PROPERTY_INFO_WITH_DESC (NM_SETTING_802_1X_CA_CERT_PASSWORD,
diff --git a/clients/common/nm-meta-setting-desc.h b/clients/common/nm-meta-setting-desc.h
index 7d7359d29..e4a4e9e1e 100644
--- a/clients/common/nm-meta-setting-desc.h
+++ b/clients/common/nm-meta-setting-desc.h
@@ -291,6 +291,9 @@ struct _NMMetaPropertyTypData {
guint32 (*get_fcn) (NMSetting *setting);
} mtu;
struct {
+ NMSetting8021xSchemeType scheme_type;
+ } cert_8021x;
+ struct {
NMMetaPropertyTypeMacMode mode;
} mac;
struct {