diff options
author | Thomas Haller <thaller@redhat.com> | 2019-03-19 09:40:22 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2019-03-25 09:12:32 +0100 |
commit | df0d5f8dee529b8be669bf786d5ade773a1264d1 (patch) | |
tree | a0c2a5e7fdc7c3a0d7bdbafc0fc14a28eea567e8 | |
parent | b83c88783ebf285086960faae693763749254643 (diff) |
cli: add property type for 802-1x certificate properties (pt1)
-rw-r--r-- | clients/common/nm-meta-setting-desc.c | 52 | ||||
-rw-r--r-- | clients/common/nm-meta-setting-desc.h | 3 |
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 { |