2019-09-10 11:19:01 +02:00
|
|
|
// SPDX-License-Identifier: LGPL-2.1+
|
2014-07-24 08:53:33 -04:00
|
|
|
/*
|
2019-10-01 09:20:35 +02:00
|
|
|
* Copyright (C) 2007 - 2013 Red Hat, Inc.
|
|
|
|
|
* Copyright (C) 2007 - 2008 Novell, Inc.
|
2014-07-24 08:53:33 -04:00
|
|
|
*/
|
|
|
|
|
|
2015-07-17 14:38:54 +02:00
|
|
|
#include "nm-default.h"
|
2016-02-19 14:57:48 +01:00
|
|
|
|
2014-07-24 08:53:33 -04:00
|
|
|
#include "nm-setting-8021x.h"
|
2016-02-12 14:44:52 +01:00
|
|
|
|
2019-04-15 08:16:00 +02:00
|
|
|
#include "nm-glib-aux/nm-secret-utils.h"
|
2014-07-24 08:53:33 -04:00
|
|
|
#include "nm-utils.h"
|
2018-08-29 18:58:14 +02:00
|
|
|
#include "nm-crypto.h"
|
2014-07-24 08:53:33 -04:00
|
|
|
#include "nm-utils-private.h"
|
|
|
|
|
#include "nm-setting-private.h"
|
2014-06-26 16:47:46 -04:00
|
|
|
#include "nm-core-enum-types.h"
|
2014-07-24 08:53:33 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* SECTION:nm-setting-8021x
|
|
|
|
|
* @short_description: Describes 802.1x-authenticated connection properties
|
|
|
|
|
*
|
|
|
|
|
* The #NMSetting8021x object is a #NMSetting subclass that describes
|
|
|
|
|
* properties necessary for connection to 802.1x-authenticated networks, such as
|
|
|
|
|
* WPA and WPA2 Enterprise Wi-Fi networks and wired 802.1x networks. 802.1x
|
|
|
|
|
* connections typically use certificates and/or EAP authentication methods to
|
|
|
|
|
* securely verify, identify, and authenticate the client to the network itself,
|
|
|
|
|
* instead of simply relying on a widely shared static key.
|
|
|
|
|
*
|
|
|
|
|
* It's a good idea to read up on wpa_supplicant configuration before using this
|
|
|
|
|
* setting extensively, since most of the options here correspond closely with
|
|
|
|
|
* the relevant wpa_supplicant configuration options.
|
|
|
|
|
*
|
|
|
|
|
* Furthermore, to get a good idea of 802.1x, EAP, TLS, TTLS, etc and their
|
|
|
|
|
* applications to Wi-Fi and wired networks, you'll want to get copies of the
|
|
|
|
|
* following books.
|
|
|
|
|
*
|
|
|
|
|
* 802.11 Wireless Networks: The Definitive Guide, Second Edition
|
|
|
|
|
* Author: Matthew Gast
|
|
|
|
|
* ISBN: 978-0596100520
|
|
|
|
|
*
|
|
|
|
|
* Cisco Wireless LAN Security
|
|
|
|
|
* Authors: Krishna Sankar, Sri Sundaralingam, Darrin Miller, and Andrew Balinsky
|
|
|
|
|
* ISBN: 978-1587051548
|
|
|
|
|
**/
|
|
|
|
|
|
2018-08-30 17:35:05 +02:00
|
|
|
/*****************************************************************************/
|
|
|
|
|
|
|
|
|
|
static NMSetting8021xCKFormat
|
|
|
|
|
_crypto_format_to_ck (NMCryptoFileFormat format)
|
|
|
|
|
{
|
|
|
|
|
G_STATIC_ASSERT ( (NM_SETTING_802_1X_CK_FORMAT_UNKNOWN == (NMSetting8021xCKFormat) NM_CRYPTO_FILE_FORMAT_UNKNOWN) );
|
|
|
|
|
G_STATIC_ASSERT ( (NM_SETTING_802_1X_CK_FORMAT_X509 == (NMSetting8021xCKFormat) NM_CRYPTO_FILE_FORMAT_X509) );
|
|
|
|
|
G_STATIC_ASSERT ( (NM_SETTING_802_1X_CK_FORMAT_RAW_KEY == (NMSetting8021xCKFormat) NM_CRYPTO_FILE_FORMAT_RAW_KEY) );
|
|
|
|
|
G_STATIC_ASSERT ( (NM_SETTING_802_1X_CK_FORMAT_PKCS12 == (NMSetting8021xCKFormat) NM_CRYPTO_FILE_FORMAT_PKCS12) );
|
|
|
|
|
|
|
|
|
|
nm_assert (NM_IN_SET (format, NM_CRYPTO_FILE_FORMAT_UNKNOWN,
|
|
|
|
|
NM_CRYPTO_FILE_FORMAT_X509,
|
|
|
|
|
NM_CRYPTO_FILE_FORMAT_RAW_KEY,
|
|
|
|
|
NM_CRYPTO_FILE_FORMAT_PKCS12));
|
|
|
|
|
return (NMSetting8021xCKFormat) format;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
|
2018-08-31 20:13:39 +02:00
|
|
|
typedef void (*EAPMethodNeedSecretsFunc) (NMSetting8021x *self,
|
|
|
|
|
GPtrArray *secrets,
|
|
|
|
|
gboolean phase2);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
2018-08-31 20:13:39 +02:00
|
|
|
typedef gboolean (*EAPMethodValidateFunc)(NMSetting8021x *self,
|
|
|
|
|
gboolean phase2,
|
|
|
|
|
GError **error);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
|
|
|
|
typedef struct {
|
2018-08-31 20:13:39 +02:00
|
|
|
const char *method;
|
|
|
|
|
EAPMethodNeedSecretsFunc ns_func;
|
|
|
|
|
EAPMethodValidateFunc v_func;
|
|
|
|
|
} EAPMethodsTable;
|
|
|
|
|
|
2019-05-16 13:43:07 +02:00
|
|
|
static const EAPMethodsTable eap_methods_table[];
|
2018-08-31 20:13:39 +02:00
|
|
|
|
|
|
|
|
/*****************************************************************************/
|
2014-07-24 08:53:33 -04:00
|
|
|
|
2018-08-31 20:08:48 +02:00
|
|
|
NM_GOBJECT_PROPERTIES_DEFINE (NMSetting8021x,
|
2014-07-24 08:53:33 -04:00
|
|
|
PROP_EAP,
|
|
|
|
|
PROP_IDENTITY,
|
|
|
|
|
PROP_ANONYMOUS_IDENTITY,
|
|
|
|
|
PROP_PAC_FILE,
|
|
|
|
|
PROP_CA_CERT,
|
2017-02-01 12:53:34 +00:00
|
|
|
PROP_CA_CERT_PASSWORD,
|
|
|
|
|
PROP_CA_CERT_PASSWORD_FLAGS,
|
2014-07-24 08:53:33 -04:00
|
|
|
PROP_CA_PATH,
|
|
|
|
|
PROP_SUBJECT_MATCH,
|
|
|
|
|
PROP_ALTSUBJECT_MATCHES,
|
2016-03-03 22:42:35 +01:00
|
|
|
PROP_DOMAIN_SUFFIX_MATCH,
|
2020-03-23 18:22:21 +01:00
|
|
|
PROP_DOMAIN_MATCH,
|
2014-07-24 08:53:33 -04:00
|
|
|
PROP_CLIENT_CERT,
|
2017-02-01 12:53:34 +00:00
|
|
|
PROP_CLIENT_CERT_PASSWORD,
|
|
|
|
|
PROP_CLIENT_CERT_PASSWORD_FLAGS,
|
2014-07-24 08:53:33 -04:00
|
|
|
PROP_PHASE1_PEAPVER,
|
|
|
|
|
PROP_PHASE1_PEAPLABEL,
|
|
|
|
|
PROP_PHASE1_FAST_PROVISIONING,
|
2017-02-08 22:02:19 +07:00
|
|
|
PROP_PHASE1_AUTH_FLAGS,
|
2014-07-24 08:53:33 -04:00
|
|
|
PROP_PHASE2_AUTH,
|
|
|
|
|
PROP_PHASE2_AUTHEAP,
|
|
|
|
|
PROP_PHASE2_CA_CERT,
|
2017-02-01 12:53:34 +00:00
|
|
|
PROP_PHASE2_CA_CERT_PASSWORD,
|
|
|
|
|
PROP_PHASE2_CA_CERT_PASSWORD_FLAGS,
|
2014-07-24 08:53:33 -04:00
|
|
|
PROP_PHASE2_CA_PATH,
|
|
|
|
|
PROP_PHASE2_SUBJECT_MATCH,
|
|
|
|
|
PROP_PHASE2_ALTSUBJECT_MATCHES,
|
2016-03-03 22:42:35 +01:00
|
|
|
PROP_PHASE2_DOMAIN_SUFFIX_MATCH,
|
2020-03-23 18:22:21 +01:00
|
|
|
PROP_PHASE2_DOMAIN_MATCH,
|
2014-07-24 08:53:33 -04:00
|
|
|
PROP_PHASE2_CLIENT_CERT,
|
2017-02-01 12:53:34 +00:00
|
|
|
PROP_PHASE2_CLIENT_CERT_PASSWORD,
|
|
|
|
|
PROP_PHASE2_CLIENT_CERT_PASSWORD_FLAGS,
|
2014-07-24 08:53:33 -04:00
|
|
|
PROP_PASSWORD,
|
|
|
|
|
PROP_PASSWORD_FLAGS,
|
|
|
|
|
PROP_PASSWORD_RAW,
|
|
|
|
|
PROP_PASSWORD_RAW_FLAGS,
|
|
|
|
|
PROP_PRIVATE_KEY,
|
|
|
|
|
PROP_PRIVATE_KEY_PASSWORD,
|
|
|
|
|
PROP_PRIVATE_KEY_PASSWORD_FLAGS,
|
|
|
|
|
PROP_PHASE2_PRIVATE_KEY,
|
|
|
|
|
PROP_PHASE2_PRIVATE_KEY_PASSWORD,
|
|
|
|
|
PROP_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS,
|
|
|
|
|
PROP_PIN,
|
|
|
|
|
PROP_PIN_FLAGS,
|
|
|
|
|
PROP_SYSTEM_CA_CERTS,
|
2019-07-11 15:52:03 +02:00
|
|
|
PROP_OPTIONAL,
|
2017-01-19 17:25:19 +01:00
|
|
|
PROP_AUTH_TIMEOUT,
|
2018-08-31 20:08:48 +02:00
|
|
|
);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
2018-08-31 20:13:39 +02:00
|
|
|
typedef struct {
|
|
|
|
|
GSList *eap; /* GSList of strings */
|
|
|
|
|
char *identity;
|
|
|
|
|
char *anonymous_identity;
|
|
|
|
|
char *pac_file;
|
|
|
|
|
GBytes *ca_cert;
|
|
|
|
|
char *ca_cert_password;
|
|
|
|
|
char *ca_path;
|
|
|
|
|
char *subject_match;
|
|
|
|
|
GSList *altsubject_matches;
|
|
|
|
|
char *domain_suffix_match;
|
2020-03-23 18:22:21 +01:00
|
|
|
char *domain_match;
|
2018-08-31 20:13:39 +02:00
|
|
|
GBytes *client_cert;
|
|
|
|
|
char *client_cert_password;
|
|
|
|
|
char *phase1_peapver;
|
|
|
|
|
char *phase1_peaplabel;
|
|
|
|
|
char *phase1_fast_provisioning;
|
|
|
|
|
char *phase2_auth;
|
|
|
|
|
char *phase2_autheap;
|
|
|
|
|
GBytes *phase2_ca_cert;
|
|
|
|
|
char *phase2_ca_cert_password;
|
|
|
|
|
char *phase2_ca_path;
|
|
|
|
|
char *phase2_subject_match;
|
|
|
|
|
GSList *phase2_altsubject_matches;
|
|
|
|
|
char *phase2_domain_suffix_match;
|
2020-03-23 18:22:21 +01:00
|
|
|
char *phase2_domain_match;
|
2018-08-31 20:13:39 +02:00
|
|
|
GBytes *phase2_client_cert;
|
|
|
|
|
char *phase2_client_cert_password;
|
|
|
|
|
char *password;
|
|
|
|
|
GBytes *password_raw;
|
|
|
|
|
char *pin;
|
|
|
|
|
GBytes *private_key;
|
|
|
|
|
char *private_key_password;
|
|
|
|
|
GBytes *phase2_private_key;
|
|
|
|
|
char *phase2_private_key_password;
|
|
|
|
|
int auth_timeout;
|
2019-12-12 11:51:21 +01:00
|
|
|
NMSetting8021xAuthFlags phase1_auth_flags;
|
|
|
|
|
NMSettingSecretFlags ca_cert_password_flags;
|
|
|
|
|
NMSettingSecretFlags client_cert_password_flags;
|
|
|
|
|
NMSettingSecretFlags phase2_ca_cert_password_flags;
|
|
|
|
|
NMSettingSecretFlags phase2_client_cert_password_flags;
|
|
|
|
|
NMSettingSecretFlags password_flags;
|
|
|
|
|
NMSettingSecretFlags password_raw_flags;
|
|
|
|
|
NMSettingSecretFlags pin_flags;
|
|
|
|
|
NMSettingSecretFlags private_key_password_flags;
|
|
|
|
|
NMSettingSecretFlags phase2_private_key_password_flags;
|
|
|
|
|
bool optional:1;
|
|
|
|
|
bool system_ca_certs:1;
|
2018-08-31 20:13:39 +02:00
|
|
|
} NMSetting8021xPrivate;
|
|
|
|
|
|
|
|
|
|
G_DEFINE_TYPE (NMSetting8021x, nm_setting_802_1x, NM_TYPE_SETTING)
|
|
|
|
|
|
|
|
|
|
#define NM_SETTING_802_1X_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_802_1X, NMSetting8021xPrivate))
|
|
|
|
|
|
2018-08-31 20:08:48 +02:00
|
|
|
/*****************************************************************************/
|
2014-07-24 08:53:33 -04:00
|
|
|
|
|
|
|
|
/**
|
2018-08-31 20:13:39 +02:00
|
|
|
* nm_setting_802_1x_check_cert_scheme:
|
|
|
|
|
* @pdata: (allow-none): the data pointer
|
|
|
|
|
* @length: the length of the data
|
2019-03-06 20:04:50 +01:00
|
|
|
* @error: (allow-none) (out): validation reason
|
2014-07-24 08:53:33 -04:00
|
|
|
*
|
2018-08-31 20:13:39 +02:00
|
|
|
* Determines and verifies the blob type.
|
|
|
|
|
* When setting certificate properties of NMSetting8021x
|
|
|
|
|
* the blob must be not UNKNOWN (or NULL).
|
2014-07-24 08:53:33 -04:00
|
|
|
*
|
2018-08-31 20:13:39 +02:00
|
|
|
* Returns: the scheme of the blob or %NM_SETTING_802_1X_CK_SCHEME_UNKNOWN.
|
|
|
|
|
* For NULL it also returns NM_SETTING_802_1X_CK_SCHEME_UNKNOWN.
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.2
|
2014-07-24 08:53:33 -04:00
|
|
|
**/
|
2018-08-31 20:13:39 +02:00
|
|
|
NMSetting8021xCKScheme
|
|
|
|
|
nm_setting_802_1x_check_cert_scheme (gconstpointer pdata, gsize length, GError **error)
|
2014-07-24 08:53:33 -04:00
|
|
|
{
|
2018-08-31 20:13:39 +02:00
|
|
|
const char *data = pdata;
|
|
|
|
|
NMSetting8021xCKScheme scheme;
|
|
|
|
|
gsize prefix_length;
|
|
|
|
|
|
|
|
|
|
g_return_val_if_fail (!length || data, NM_SETTING_802_1X_CK_SCHEME_UNKNOWN);
|
|
|
|
|
|
|
|
|
|
if (!length || !data) {
|
|
|
|
|
g_set_error_literal (error,
|
|
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
|
|
|
|
_("binary data missing"));
|
|
|
|
|
return NM_SETTING_802_1X_CK_SCHEME_UNKNOWN;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ( length >= NM_STRLEN (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH)
|
|
|
|
|
&& !memcmp (data, NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH, NM_STRLEN (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH))) {
|
|
|
|
|
scheme = NM_SETTING_802_1X_CK_SCHEME_PATH;
|
|
|
|
|
prefix_length = NM_STRLEN (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH);
|
|
|
|
|
} else if ( length >= NM_STRLEN (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PKCS11)
|
|
|
|
|
&& !memcmp (data, NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PKCS11, NM_STRLEN (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PKCS11))) {
|
|
|
|
|
scheme = NM_SETTING_802_1X_CK_SCHEME_PKCS11;
|
|
|
|
|
prefix_length = NM_STRLEN (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PKCS11);
|
|
|
|
|
} else {
|
|
|
|
|
scheme = NM_SETTING_802_1X_CK_SCHEME_BLOB;
|
|
|
|
|
prefix_length = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (scheme != NM_SETTING_802_1X_CK_SCHEME_BLOB) {
|
|
|
|
|
/* An actual URI must be NUL terminated, contain at least
|
|
|
|
|
* one non-NUL character, and contain only one trailing NUL
|
2018-09-15 07:20:54 -04:00
|
|
|
* character.
|
2018-08-31 20:13:39 +02:00
|
|
|
* And ensure it's UTF-8 valid too so we can pass it through
|
|
|
|
|
* D-Bus and stuff like that. */
|
|
|
|
|
|
|
|
|
|
if (data[length - 1] != '\0') {
|
|
|
|
|
g_set_error_literal (error,
|
|
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
|
|
|
|
_("URI not NUL terminated"));
|
|
|
|
|
return NM_SETTING_802_1X_CK_SCHEME_UNKNOWN;
|
|
|
|
|
}
|
|
|
|
|
length--;
|
|
|
|
|
|
|
|
|
|
if (length <= prefix_length) {
|
|
|
|
|
g_set_error_literal (error,
|
|
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
|
|
|
|
_("URI is empty"));
|
|
|
|
|
return NM_SETTING_802_1X_CK_SCHEME_UNKNOWN;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!g_utf8_validate (data + prefix_length, length - prefix_length, NULL)) {
|
|
|
|
|
g_set_error_literal (error,
|
|
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
|
|
|
|
_("URI is not valid UTF-8"));
|
|
|
|
|
return NM_SETTING_802_1X_CK_SCHEME_UNKNOWN;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return scheme;
|
|
|
|
|
}
|
|
|
|
|
|
ifcfg-rh: don't use 802-1x certifcate setter functions
The certificate setter function like nm_setting_802_1x_set_ca_cert()
actually load the file from disk, and validate whether it is a valid
certificate. That is very wrong to do.
For one, the certificates are external files, which are not embedded
into the NMConnection. That means, strongly validating the files while
loading the ifcfg files, is wrong because:
- if validation fails, loading the file fails in its entirety with
a warning in the log. That is not helpful to the user, who now
can no longer use nmcli to fix the path of the certificate (because
the profile failed to load in the first place).
- even if the certificate is valid at load-time, there is no guarantee
that it is valid later on, when we actually try to use the file. What
good does such a validation do? nm_setting_802_1x_set_ca_cert() might
make sense during nmcli_connection_modify(). At the moment when we
create or update the profile, we do want to validate the input and
be helpful to the user. Validating the file later on, when reloading
the profile from disk seems undesirable.
- note how keyfile also does not perform such validations (for good
reasons, I presume).
Also, there is so much wrong with how ifcfg reader handles EAP files.
There is a lot of duplication, and trying to be too smart. I find it
wrong how the "eap_readers" are nested. E.g. both eap_peap_reader() and
"tls" method call to eap_tls_reader(), making it look like that
NMSetting8021x can handle multiple EAP profiles separately. But it cannot. The
802-1x profile is a flat set of properties like ca-cert and others. All
EAP methods share these properties, so having this complex parsing
is not only complicated, but also wrong. The reader should simply parse
the shell variables, and let NMSetting8021x::verify() handle validation
of the settings. Anyway, the patch does not address that.
Also, the setting of the likes of NM_SETTING_802_1X_CLIENT_CERT_PASSWORD was
awkwardly only done when
privkey_format != NM_SETTING_802_1X_CK_FORMAT_PKCS12
&& scheme == NM_SETTING_802_1X_CK_SCHEME_PKCS11
It is too smart. Just read it from file, if it contains invalid data, let
verify() reject it. That is only partly addressed.
Also note, how writer never actually writes the likes of
IEEE_8021X_CLIENT_CERT_PASSWORD. That is another bug and not fixed
either.
2018-09-03 12:24:27 +02:00
|
|
|
NMSetting8021xCKScheme
|
|
|
|
|
_nm_setting_802_1x_cert_get_scheme (GBytes *bytes, GError **error)
|
2018-08-31 20:13:39 +02:00
|
|
|
{
|
|
|
|
|
const char *data;
|
|
|
|
|
gsize length;
|
|
|
|
|
|
|
|
|
|
if (!bytes) {
|
|
|
|
|
g_set_error_literal (error,
|
|
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
|
|
|
|
_("data missing"));
|
|
|
|
|
return NM_SETTING_802_1X_CK_SCHEME_UNKNOWN;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
data = g_bytes_get_data (bytes, &length);
|
|
|
|
|
return nm_setting_802_1x_check_cert_scheme (data, length, error);
|
|
|
|
|
}
|
|
|
|
|
|
libnm/802-1x: refactor setting certificate from path
NMSetting8021x has various utility functions to set
the certificate:
- nm_setting_802_1x_set_ca_cert()
- nm_setting_802_1x_set_client_cert()
- nm_setting_802_1x_set_private_key()
- nm_setting_802_1x_set_phase2_ca_cert()
- nm_setting_802_1x_set_phase2_client_cert()
- nm_setting_802_1x_set_phase2_private_key()
They support:
- accepting a plain PKCS11 URI, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_PKCS11.
- accepting a filename, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_BLOB or
NM_SETTING_802_1X_CK_SCHEME_PATH.
In the latter case, the function tries to load the file and verify it.
In case of the private-key setters, this also involves accepting a
password. Depending on whether the scheme is BLOB or PATH, the function
will either set the certificate to a PATH blob, or take the blob that
was read from file.
The functions seem misdesigned to me, because their behavior is
rather obscure. E.g. they behave fundamentally different, depending
on whether scheme is PKCS11 or BLOB/PATH.
Anyway, improve them:
- refactor the common code into a function _cert_impl_set(). Previously,
their non-trivial implementations were copy+pasted several times,
now they all use the same implementation.
- if the function is going to fail, don't touch the setting. Previously,
the functions would first clear the certificate before trying to
validate the input. It's more logical, that if a functions is going
to fail to check for failure first and don't modify the settings.
- not every blob can be represented. For example, if we have a blob
which starts with "file://", then there is no way to set it, simply
because we don't support a prefix for blobs (like "data:;base64,").
This means, if we try to set the certificate to a particular binary,
we must check that the binary is interpreted with the expected scheme.
Add this check.
2018-09-01 18:08:33 +02:00
|
|
|
static gboolean
|
|
|
|
|
_cert_verify_scheme (NMSetting8021xCKScheme scheme,
|
|
|
|
|
GBytes *bytes,
|
|
|
|
|
GError **error)
|
|
|
|
|
{
|
|
|
|
|
GError *local = NULL;
|
|
|
|
|
NMSetting8021xCKScheme scheme_detected;
|
|
|
|
|
|
|
|
|
|
nm_assert (bytes);
|
|
|
|
|
|
ifcfg-rh: don't use 802-1x certifcate setter functions
The certificate setter function like nm_setting_802_1x_set_ca_cert()
actually load the file from disk, and validate whether it is a valid
certificate. That is very wrong to do.
For one, the certificates are external files, which are not embedded
into the NMConnection. That means, strongly validating the files while
loading the ifcfg files, is wrong because:
- if validation fails, loading the file fails in its entirety with
a warning in the log. That is not helpful to the user, who now
can no longer use nmcli to fix the path of the certificate (because
the profile failed to load in the first place).
- even if the certificate is valid at load-time, there is no guarantee
that it is valid later on, when we actually try to use the file. What
good does such a validation do? nm_setting_802_1x_set_ca_cert() might
make sense during nmcli_connection_modify(). At the moment when we
create or update the profile, we do want to validate the input and
be helpful to the user. Validating the file later on, when reloading
the profile from disk seems undesirable.
- note how keyfile also does not perform such validations (for good
reasons, I presume).
Also, there is so much wrong with how ifcfg reader handles EAP files.
There is a lot of duplication, and trying to be too smart. I find it
wrong how the "eap_readers" are nested. E.g. both eap_peap_reader() and
"tls" method call to eap_tls_reader(), making it look like that
NMSetting8021x can handle multiple EAP profiles separately. But it cannot. The
802-1x profile is a flat set of properties like ca-cert and others. All
EAP methods share these properties, so having this complex parsing
is not only complicated, but also wrong. The reader should simply parse
the shell variables, and let NMSetting8021x::verify() handle validation
of the settings. Anyway, the patch does not address that.
Also, the setting of the likes of NM_SETTING_802_1X_CLIENT_CERT_PASSWORD was
awkwardly only done when
privkey_format != NM_SETTING_802_1X_CK_FORMAT_PKCS12
&& scheme == NM_SETTING_802_1X_CK_SCHEME_PKCS11
It is too smart. Just read it from file, if it contains invalid data, let
verify() reject it. That is only partly addressed.
Also note, how writer never actually writes the likes of
IEEE_8021X_CLIENT_CERT_PASSWORD. That is another bug and not fixed
either.
2018-09-03 12:24:27 +02:00
|
|
|
scheme_detected = _nm_setting_802_1x_cert_get_scheme (bytes, &local);
|
libnm/802-1x: refactor setting certificate from path
NMSetting8021x has various utility functions to set
the certificate:
- nm_setting_802_1x_set_ca_cert()
- nm_setting_802_1x_set_client_cert()
- nm_setting_802_1x_set_private_key()
- nm_setting_802_1x_set_phase2_ca_cert()
- nm_setting_802_1x_set_phase2_client_cert()
- nm_setting_802_1x_set_phase2_private_key()
They support:
- accepting a plain PKCS11 URI, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_PKCS11.
- accepting a filename, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_BLOB or
NM_SETTING_802_1X_CK_SCHEME_PATH.
In the latter case, the function tries to load the file and verify it.
In case of the private-key setters, this also involves accepting a
password. Depending on whether the scheme is BLOB or PATH, the function
will either set the certificate to a PATH blob, or take the blob that
was read from file.
The functions seem misdesigned to me, because their behavior is
rather obscure. E.g. they behave fundamentally different, depending
on whether scheme is PKCS11 or BLOB/PATH.
Anyway, improve them:
- refactor the common code into a function _cert_impl_set(). Previously,
their non-trivial implementations were copy+pasted several times,
now they all use the same implementation.
- if the function is going to fail, don't touch the setting. Previously,
the functions would first clear the certificate before trying to
validate the input. It's more logical, that if a functions is going
to fail to check for failure first and don't modify the settings.
- not every blob can be represented. For example, if we have a blob
which starts with "file://", then there is no way to set it, simply
because we don't support a prefix for blobs (like "data:;base64,").
This means, if we try to set the certificate to a particular binary,
we must check that the binary is interpreted with the expected scheme.
Add this check.
2018-09-01 18:08:33 +02:00
|
|
|
if (scheme_detected == NM_SETTING_802_1X_CK_SCHEME_UNKNOWN) {
|
|
|
|
|
g_set_error (error,
|
|
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
|
|
|
|
_("certificate is invalid: %s"), local->message);
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (scheme_detected != scheme) {
|
|
|
|
|
g_set_error (error,
|
|
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
|
|
|
|
_("certificate detected as invalid scheme"));
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
ifcfg-rh: don't use 802-1x certifcate setter functions
The certificate setter function like nm_setting_802_1x_set_ca_cert()
actually load the file from disk, and validate whether it is a valid
certificate. That is very wrong to do.
For one, the certificates are external files, which are not embedded
into the NMConnection. That means, strongly validating the files while
loading the ifcfg files, is wrong because:
- if validation fails, loading the file fails in its entirety with
a warning in the log. That is not helpful to the user, who now
can no longer use nmcli to fix the path of the certificate (because
the profile failed to load in the first place).
- even if the certificate is valid at load-time, there is no guarantee
that it is valid later on, when we actually try to use the file. What
good does such a validation do? nm_setting_802_1x_set_ca_cert() might
make sense during nmcli_connection_modify(). At the moment when we
create or update the profile, we do want to validate the input and
be helpful to the user. Validating the file later on, when reloading
the profile from disk seems undesirable.
- note how keyfile also does not perform such validations (for good
reasons, I presume).
Also, there is so much wrong with how ifcfg reader handles EAP files.
There is a lot of duplication, and trying to be too smart. I find it
wrong how the "eap_readers" are nested. E.g. both eap_peap_reader() and
"tls" method call to eap_tls_reader(), making it look like that
NMSetting8021x can handle multiple EAP profiles separately. But it cannot. The
802-1x profile is a flat set of properties like ca-cert and others. All
EAP methods share these properties, so having this complex parsing
is not only complicated, but also wrong. The reader should simply parse
the shell variables, and let NMSetting8021x::verify() handle validation
of the settings. Anyway, the patch does not address that.
Also, the setting of the likes of NM_SETTING_802_1X_CLIENT_CERT_PASSWORD was
awkwardly only done when
privkey_format != NM_SETTING_802_1X_CK_FORMAT_PKCS12
&& scheme == NM_SETTING_802_1X_CK_SCHEME_PKCS11
It is too smart. Just read it from file, if it contains invalid data, let
verify() reject it. That is only partly addressed.
Also note, how writer never actually writes the likes of
IEEE_8021X_CLIENT_CERT_PASSWORD. That is another bug and not fixed
either.
2018-09-03 12:24:27 +02:00
|
|
|
GBytes *
|
|
|
|
|
_nm_setting_802_1x_cert_value_to_bytes (NMSetting8021xCKScheme scheme,
|
|
|
|
|
const guint8 *val_bin,
|
|
|
|
|
gssize val_len,
|
|
|
|
|
GError **error)
|
libnm/802-1x: refactor setting certificate from path
NMSetting8021x has various utility functions to set
the certificate:
- nm_setting_802_1x_set_ca_cert()
- nm_setting_802_1x_set_client_cert()
- nm_setting_802_1x_set_private_key()
- nm_setting_802_1x_set_phase2_ca_cert()
- nm_setting_802_1x_set_phase2_client_cert()
- nm_setting_802_1x_set_phase2_private_key()
They support:
- accepting a plain PKCS11 URI, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_PKCS11.
- accepting a filename, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_BLOB or
NM_SETTING_802_1X_CK_SCHEME_PATH.
In the latter case, the function tries to load the file and verify it.
In case of the private-key setters, this also involves accepting a
password. Depending on whether the scheme is BLOB or PATH, the function
will either set the certificate to a PATH blob, or take the blob that
was read from file.
The functions seem misdesigned to me, because their behavior is
rather obscure. E.g. they behave fundamentally different, depending
on whether scheme is PKCS11 or BLOB/PATH.
Anyway, improve them:
- refactor the common code into a function _cert_impl_set(). Previously,
their non-trivial implementations were copy+pasted several times,
now they all use the same implementation.
- if the function is going to fail, don't touch the setting. Previously,
the functions would first clear the certificate before trying to
validate the input. It's more logical, that if a functions is going
to fail to check for failure first and don't modify the settings.
- not every blob can be represented. For example, if we have a blob
which starts with "file://", then there is no way to set it, simply
because we don't support a prefix for blobs (like "data:;base64,").
This means, if we try to set the certificate to a particular binary,
we must check that the binary is interpreted with the expected scheme.
Add this check.
2018-09-01 18:08:33 +02:00
|
|
|
{
|
|
|
|
|
gs_unref_bytes GBytes *bytes = NULL;
|
|
|
|
|
guint8 *mem;
|
|
|
|
|
gsize total_len;
|
|
|
|
|
|
|
|
|
|
nm_assert (val_bin);
|
|
|
|
|
|
|
|
|
|
switch (scheme) {
|
|
|
|
|
case NM_SETTING_802_1X_CK_SCHEME_PKCS11:
|
|
|
|
|
if (val_len < 0)
|
|
|
|
|
val_len = strlen ((char *) val_bin) + 1;
|
|
|
|
|
|
|
|
|
|
bytes = g_bytes_new (val_bin, val_len);
|
|
|
|
|
break;
|
|
|
|
|
case NM_SETTING_802_1X_CK_SCHEME_PATH:
|
|
|
|
|
if (val_len < 0)
|
|
|
|
|
val_len = strlen ((char *) val_bin) + 1;
|
|
|
|
|
|
|
|
|
|
total_len = NM_STRLEN (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH) + ((gsize) val_len);
|
|
|
|
|
|
|
|
|
|
mem = g_new (guint8, total_len);
|
|
|
|
|
memcpy (mem, NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH, NM_STRLEN (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH));
|
|
|
|
|
memcpy (&mem[NM_STRLEN (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH)], val_bin, val_len);
|
|
|
|
|
bytes = g_bytes_new_take (mem, total_len);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
g_return_val_if_reached (NULL);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!_cert_verify_scheme (scheme, bytes, error))
|
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
|
|
return g_steal_pointer (&bytes);
|
|
|
|
|
}
|
|
|
|
|
|
2018-09-03 16:33:28 +02:00
|
|
|
static const char *
|
|
|
|
|
_cert_get_path (GBytes *bytes)
|
|
|
|
|
{
|
|
|
|
|
const guint8 *bin;
|
|
|
|
|
|
|
|
|
|
nm_assert (bytes);
|
|
|
|
|
nm_assert (g_bytes_get_size (bytes) >= NM_STRLEN (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH));
|
|
|
|
|
|
|
|
|
|
bin = g_bytes_get_data (bytes, NULL);
|
|
|
|
|
|
|
|
|
|
nm_assert (bin);
|
|
|
|
|
nm_assert (bin[g_bytes_get_size (bytes) - 1] == '\0');
|
|
|
|
|
nm_assert (g_str_has_prefix ((const char *) bin, NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH));
|
|
|
|
|
|
|
|
|
|
return (const char *) &bin[NM_STRLEN (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH)];
|
|
|
|
|
}
|
|
|
|
|
|
2018-08-31 21:04:17 +02:00
|
|
|
#define _cert_assert_scheme(cert, check_scheme, ret_val) \
|
|
|
|
|
G_STMT_START { \
|
|
|
|
|
NMSetting8021xCKScheme scheme; \
|
|
|
|
|
\
|
ifcfg-rh: don't use 802-1x certifcate setter functions
The certificate setter function like nm_setting_802_1x_set_ca_cert()
actually load the file from disk, and validate whether it is a valid
certificate. That is very wrong to do.
For one, the certificates are external files, which are not embedded
into the NMConnection. That means, strongly validating the files while
loading the ifcfg files, is wrong because:
- if validation fails, loading the file fails in its entirety with
a warning in the log. That is not helpful to the user, who now
can no longer use nmcli to fix the path of the certificate (because
the profile failed to load in the first place).
- even if the certificate is valid at load-time, there is no guarantee
that it is valid later on, when we actually try to use the file. What
good does such a validation do? nm_setting_802_1x_set_ca_cert() might
make sense during nmcli_connection_modify(). At the moment when we
create or update the profile, we do want to validate the input and
be helpful to the user. Validating the file later on, when reloading
the profile from disk seems undesirable.
- note how keyfile also does not perform such validations (for good
reasons, I presume).
Also, there is so much wrong with how ifcfg reader handles EAP files.
There is a lot of duplication, and trying to be too smart. I find it
wrong how the "eap_readers" are nested. E.g. both eap_peap_reader() and
"tls" method call to eap_tls_reader(), making it look like that
NMSetting8021x can handle multiple EAP profiles separately. But it cannot. The
802-1x profile is a flat set of properties like ca-cert and others. All
EAP methods share these properties, so having this complex parsing
is not only complicated, but also wrong. The reader should simply parse
the shell variables, and let NMSetting8021x::verify() handle validation
of the settings. Anyway, the patch does not address that.
Also, the setting of the likes of NM_SETTING_802_1X_CLIENT_CERT_PASSWORD was
awkwardly only done when
privkey_format != NM_SETTING_802_1X_CK_FORMAT_PKCS12
&& scheme == NM_SETTING_802_1X_CK_SCHEME_PKCS11
It is too smart. Just read it from file, if it contains invalid data, let
verify() reject it. That is only partly addressed.
Also note, how writer never actually writes the likes of
IEEE_8021X_CLIENT_CERT_PASSWORD. That is another bug and not fixed
either.
2018-09-03 12:24:27 +02:00
|
|
|
scheme = _nm_setting_802_1x_cert_get_scheme ((cert), NULL); \
|
2018-08-31 21:04:17 +02:00
|
|
|
if (scheme != check_scheme) { \
|
|
|
|
|
g_return_val_if_fail (scheme == check_scheme, ret_val); \
|
|
|
|
|
return ret_val; \
|
|
|
|
|
} \
|
|
|
|
|
} G_STMT_END
|
|
|
|
|
|
|
|
|
|
#define _cert_impl_get_scheme(setting, cert_field) \
|
|
|
|
|
G_STMT_START { \
|
|
|
|
|
NMSetting8021x *const _setting = (setting); \
|
|
|
|
|
GBytes *_cert; \
|
|
|
|
|
\
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (_setting), NM_SETTING_802_1X_CK_SCHEME_UNKNOWN); \
|
|
|
|
|
\
|
|
|
|
|
_cert = NM_SETTING_802_1X_GET_PRIVATE (_setting)->cert_field; \
|
|
|
|
|
\
|
ifcfg-rh: don't use 802-1x certifcate setter functions
The certificate setter function like nm_setting_802_1x_set_ca_cert()
actually load the file from disk, and validate whether it is a valid
certificate. That is very wrong to do.
For one, the certificates are external files, which are not embedded
into the NMConnection. That means, strongly validating the files while
loading the ifcfg files, is wrong because:
- if validation fails, loading the file fails in its entirety with
a warning in the log. That is not helpful to the user, who now
can no longer use nmcli to fix the path of the certificate (because
the profile failed to load in the first place).
- even if the certificate is valid at load-time, there is no guarantee
that it is valid later on, when we actually try to use the file. What
good does such a validation do? nm_setting_802_1x_set_ca_cert() might
make sense during nmcli_connection_modify(). At the moment when we
create or update the profile, we do want to validate the input and
be helpful to the user. Validating the file later on, when reloading
the profile from disk seems undesirable.
- note how keyfile also does not perform such validations (for good
reasons, I presume).
Also, there is so much wrong with how ifcfg reader handles EAP files.
There is a lot of duplication, and trying to be too smart. I find it
wrong how the "eap_readers" are nested. E.g. both eap_peap_reader() and
"tls" method call to eap_tls_reader(), making it look like that
NMSetting8021x can handle multiple EAP profiles separately. But it cannot. The
802-1x profile is a flat set of properties like ca-cert and others. All
EAP methods share these properties, so having this complex parsing
is not only complicated, but also wrong. The reader should simply parse
the shell variables, and let NMSetting8021x::verify() handle validation
of the settings. Anyway, the patch does not address that.
Also, the setting of the likes of NM_SETTING_802_1X_CLIENT_CERT_PASSWORD was
awkwardly only done when
privkey_format != NM_SETTING_802_1X_CK_FORMAT_PKCS12
&& scheme == NM_SETTING_802_1X_CK_SCHEME_PKCS11
It is too smart. Just read it from file, if it contains invalid data, let
verify() reject it. That is only partly addressed.
Also note, how writer never actually writes the likes of
IEEE_8021X_CLIENT_CERT_PASSWORD. That is another bug and not fixed
either.
2018-09-03 12:24:27 +02:00
|
|
|
return _nm_setting_802_1x_cert_get_scheme (_cert, NULL); \
|
2018-08-31 21:04:17 +02:00
|
|
|
} G_STMT_END
|
|
|
|
|
|
|
|
|
|
#define _cert_impl_get_blob(setting, cert_field) \
|
|
|
|
|
G_STMT_START { \
|
|
|
|
|
NMSetting8021x *const _setting = (setting); \
|
|
|
|
|
GBytes *_cert; \
|
|
|
|
|
\
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (_setting), NULL); \
|
|
|
|
|
\
|
|
|
|
|
_cert = NM_SETTING_802_1X_GET_PRIVATE (_setting)->cert_field; \
|
|
|
|
|
\
|
|
|
|
|
_cert_assert_scheme (_cert, NM_SETTING_802_1X_CK_SCHEME_BLOB, NULL); \
|
|
|
|
|
\
|
|
|
|
|
return _cert; \
|
|
|
|
|
} G_STMT_END
|
|
|
|
|
|
|
|
|
|
#define _cert_impl_get_path(setting, cert_field) \
|
|
|
|
|
G_STMT_START { \
|
|
|
|
|
NMSetting8021x *const _setting = (setting); \
|
|
|
|
|
GBytes *_cert; \
|
|
|
|
|
\
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (_setting), NULL); \
|
|
|
|
|
\
|
|
|
|
|
_cert = NM_SETTING_802_1X_GET_PRIVATE (_setting)->cert_field; \
|
|
|
|
|
\
|
|
|
|
|
_cert_assert_scheme (_cert, NM_SETTING_802_1X_CK_SCHEME_PATH, NULL); \
|
|
|
|
|
\
|
2018-09-03 16:33:28 +02:00
|
|
|
return _cert_get_path (_cert); \
|
2018-08-31 21:04:17 +02:00
|
|
|
} G_STMT_END
|
|
|
|
|
|
|
|
|
|
#define _cert_impl_get_uri(setting, cert_field) \
|
|
|
|
|
G_STMT_START { \
|
|
|
|
|
NMSetting8021x *const _setting = (setting); \
|
|
|
|
|
GBytes *_cert; \
|
|
|
|
|
\
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (_setting), NULL); \
|
|
|
|
|
\
|
|
|
|
|
_cert = NM_SETTING_802_1X_GET_PRIVATE (_setting)->cert_field; \
|
|
|
|
|
\
|
|
|
|
|
_cert_assert_scheme (_cert, NM_SETTING_802_1X_CK_SCHEME_PKCS11, NULL); \
|
|
|
|
|
\
|
|
|
|
|
return g_bytes_get_data (_cert, NULL); \
|
|
|
|
|
} G_STMT_END
|
|
|
|
|
|
libnm/802-1x: refactor setting certificate from path
NMSetting8021x has various utility functions to set
the certificate:
- nm_setting_802_1x_set_ca_cert()
- nm_setting_802_1x_set_client_cert()
- nm_setting_802_1x_set_private_key()
- nm_setting_802_1x_set_phase2_ca_cert()
- nm_setting_802_1x_set_phase2_client_cert()
- nm_setting_802_1x_set_phase2_private_key()
They support:
- accepting a plain PKCS11 URI, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_PKCS11.
- accepting a filename, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_BLOB or
NM_SETTING_802_1X_CK_SCHEME_PATH.
In the latter case, the function tries to load the file and verify it.
In case of the private-key setters, this also involves accepting a
password. Depending on whether the scheme is BLOB or PATH, the function
will either set the certificate to a PATH blob, or take the blob that
was read from file.
The functions seem misdesigned to me, because their behavior is
rather obscure. E.g. they behave fundamentally different, depending
on whether scheme is PKCS11 or BLOB/PATH.
Anyway, improve them:
- refactor the common code into a function _cert_impl_set(). Previously,
their non-trivial implementations were copy+pasted several times,
now they all use the same implementation.
- if the function is going to fail, don't touch the setting. Previously,
the functions would first clear the certificate before trying to
validate the input. It's more logical, that if a functions is going
to fail to check for failure first and don't modify the settings.
- not every blob can be represented. For example, if we have a blob
which starts with "file://", then there is no way to set it, simply
because we don't support a prefix for blobs (like "data:;base64,").
This means, if we try to set the certificate to a particular binary,
we must check that the binary is interpreted with the expected scheme.
Add this check.
2018-09-01 18:08:33 +02:00
|
|
|
static gboolean
|
|
|
|
|
_cert_impl_set (NMSetting8021x *setting,
|
|
|
|
|
_PropertyEnums property,
|
|
|
|
|
const char *value,
|
|
|
|
|
const char *password,
|
|
|
|
|
NMSetting8021xCKScheme scheme,
|
|
|
|
|
NMSetting8021xCKFormat *out_format,
|
|
|
|
|
GError **error)
|
2018-08-31 20:13:39 +02:00
|
|
|
{
|
libnm/802-1x: refactor setting certificate from path
NMSetting8021x has various utility functions to set
the certificate:
- nm_setting_802_1x_set_ca_cert()
- nm_setting_802_1x_set_client_cert()
- nm_setting_802_1x_set_private_key()
- nm_setting_802_1x_set_phase2_ca_cert()
- nm_setting_802_1x_set_phase2_client_cert()
- nm_setting_802_1x_set_phase2_private_key()
They support:
- accepting a plain PKCS11 URI, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_PKCS11.
- accepting a filename, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_BLOB or
NM_SETTING_802_1X_CK_SCHEME_PATH.
In the latter case, the function tries to load the file and verify it.
In case of the private-key setters, this also involves accepting a
password. Depending on whether the scheme is BLOB or PATH, the function
will either set the certificate to a PATH blob, or take the blob that
was read from file.
The functions seem misdesigned to me, because their behavior is
rather obscure. E.g. they behave fundamentally different, depending
on whether scheme is PKCS11 or BLOB/PATH.
Anyway, improve them:
- refactor the common code into a function _cert_impl_set(). Previously,
their non-trivial implementations were copy+pasted several times,
now they all use the same implementation.
- if the function is going to fail, don't touch the setting. Previously,
the functions would first clear the certificate before trying to
validate the input. It's more logical, that if a functions is going
to fail to check for failure first and don't modify the settings.
- not every blob can be represented. For example, if we have a blob
which starts with "file://", then there is no way to set it, simply
because we don't support a prefix for blobs (like "data:;base64,").
This means, if we try to set the certificate to a particular binary,
we must check that the binary is interpreted with the expected scheme.
Add this check.
2018-09-01 18:08:33 +02:00
|
|
|
NMSetting8021xPrivate *priv;
|
2018-08-31 20:13:39 +02:00
|
|
|
NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN;
|
|
|
|
|
gs_unref_bytes GBytes *cert = NULL;
|
libnm/802-1x: refactor setting certificate from path
NMSetting8021x has various utility functions to set
the certificate:
- nm_setting_802_1x_set_ca_cert()
- nm_setting_802_1x_set_client_cert()
- nm_setting_802_1x_set_private_key()
- nm_setting_802_1x_set_phase2_ca_cert()
- nm_setting_802_1x_set_phase2_client_cert()
- nm_setting_802_1x_set_phase2_private_key()
They support:
- accepting a plain PKCS11 URI, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_PKCS11.
- accepting a filename, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_BLOB or
NM_SETTING_802_1X_CK_SCHEME_PATH.
In the latter case, the function tries to load the file and verify it.
In case of the private-key setters, this also involves accepting a
password. Depending on whether the scheme is BLOB or PATH, the function
will either set the certificate to a PATH blob, or take the blob that
was read from file.
The functions seem misdesigned to me, because their behavior is
rather obscure. E.g. they behave fundamentally different, depending
on whether scheme is PKCS11 or BLOB/PATH.
Anyway, improve them:
- refactor the common code into a function _cert_impl_set(). Previously,
their non-trivial implementations were copy+pasted several times,
now they all use the same implementation.
- if the function is going to fail, don't touch the setting. Previously,
the functions would first clear the certificate before trying to
validate the input. It's more logical, that if a functions is going
to fail to check for failure first and don't modify the settings.
- not every blob can be represented. For example, if we have a blob
which starts with "file://", then there is no way to set it, simply
because we don't support a prefix for blobs (like "data:;base64,").
This means, if we try to set the certificate to a particular binary,
we must check that the binary is interpreted with the expected scheme.
Add this check.
2018-09-01 18:08:33 +02:00
|
|
|
GBytes **p_cert = NULL;
|
|
|
|
|
GBytes **p_client_cert = NULL;
|
|
|
|
|
char **p_password = NULL;
|
|
|
|
|
_PropertyEnums notify_cert = property;
|
|
|
|
|
_PropertyEnums notify_password = PROP_0;
|
|
|
|
|
_PropertyEnums notify_client_cert = PROP_0;
|
2018-08-31 20:13:39 +02:00
|
|
|
|
libnm/802-1x: refactor setting certificate from path
NMSetting8021x has various utility functions to set
the certificate:
- nm_setting_802_1x_set_ca_cert()
- nm_setting_802_1x_set_client_cert()
- nm_setting_802_1x_set_private_key()
- nm_setting_802_1x_set_phase2_ca_cert()
- nm_setting_802_1x_set_phase2_client_cert()
- nm_setting_802_1x_set_phase2_private_key()
They support:
- accepting a plain PKCS11 URI, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_PKCS11.
- accepting a filename, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_BLOB or
NM_SETTING_802_1X_CK_SCHEME_PATH.
In the latter case, the function tries to load the file and verify it.
In case of the private-key setters, this also involves accepting a
password. Depending on whether the scheme is BLOB or PATH, the function
will either set the certificate to a PATH blob, or take the blob that
was read from file.
The functions seem misdesigned to me, because their behavior is
rather obscure. E.g. they behave fundamentally different, depending
on whether scheme is PKCS11 or BLOB/PATH.
Anyway, improve them:
- refactor the common code into a function _cert_impl_set(). Previously,
their non-trivial implementations were copy+pasted several times,
now they all use the same implementation.
- if the function is going to fail, don't touch the setting. Previously,
the functions would first clear the certificate before trying to
validate the input. It's more logical, that if a functions is going
to fail to check for failure first and don't modify the settings.
- not every blob can be represented. For example, if we have a blob
which starts with "file://", then there is no way to set it, simply
because we don't support a prefix for blobs (like "data:;base64,").
This means, if we try to set the certificate to a particular binary,
we must check that the binary is interpreted with the expected scheme.
Add this check.
2018-09-01 18:08:33 +02:00
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), FALSE);
|
|
|
|
|
g_return_val_if_fail (!error || !*error, FALSE);
|
|
|
|
|
if (value) {
|
|
|
|
|
g_return_val_if_fail (g_utf8_validate (value, -1, NULL), FALSE);
|
|
|
|
|
g_return_val_if_fail (NM_IN_SET (scheme, NM_SETTING_802_1X_CK_SCHEME_BLOB,
|
|
|
|
|
NM_SETTING_802_1X_CK_SCHEME_PATH,
|
|
|
|
|
NM_SETTING_802_1X_CK_SCHEME_PKCS11), FALSE);
|
2018-08-31 20:13:39 +02:00
|
|
|
}
|
|
|
|
|
|
libnm/802-1x: refactor setting certificate from path
NMSetting8021x has various utility functions to set
the certificate:
- nm_setting_802_1x_set_ca_cert()
- nm_setting_802_1x_set_client_cert()
- nm_setting_802_1x_set_private_key()
- nm_setting_802_1x_set_phase2_ca_cert()
- nm_setting_802_1x_set_phase2_client_cert()
- nm_setting_802_1x_set_phase2_private_key()
They support:
- accepting a plain PKCS11 URI, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_PKCS11.
- accepting a filename, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_BLOB or
NM_SETTING_802_1X_CK_SCHEME_PATH.
In the latter case, the function tries to load the file and verify it.
In case of the private-key setters, this also involves accepting a
password. Depending on whether the scheme is BLOB or PATH, the function
will either set the certificate to a PATH blob, or take the blob that
was read from file.
The functions seem misdesigned to me, because their behavior is
rather obscure. E.g. they behave fundamentally different, depending
on whether scheme is PKCS11 or BLOB/PATH.
Anyway, improve them:
- refactor the common code into a function _cert_impl_set(). Previously,
their non-trivial implementations were copy+pasted several times,
now they all use the same implementation.
- if the function is going to fail, don't touch the setting. Previously,
the functions would first clear the certificate before trying to
validate the input. It's more logical, that if a functions is going
to fail to check for failure first and don't modify the settings.
- not every blob can be represented. For example, if we have a blob
which starts with "file://", then there is no way to set it, simply
because we don't support a prefix for blobs (like "data:;base64,").
This means, if we try to set the certificate to a particular binary,
we must check that the binary is interpreted with the expected scheme.
Add this check.
2018-09-01 18:08:33 +02:00
|
|
|
if (!value) {
|
|
|
|
|
/* coerce password to %NULL. It should be already. */
|
|
|
|
|
password = NULL;
|
2018-08-31 20:13:39 +02:00
|
|
|
}
|
|
|
|
|
|
libnm/802-1x: refactor setting certificate from path
NMSetting8021x has various utility functions to set
the certificate:
- nm_setting_802_1x_set_ca_cert()
- nm_setting_802_1x_set_client_cert()
- nm_setting_802_1x_set_private_key()
- nm_setting_802_1x_set_phase2_ca_cert()
- nm_setting_802_1x_set_phase2_client_cert()
- nm_setting_802_1x_set_phase2_private_key()
They support:
- accepting a plain PKCS11 URI, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_PKCS11.
- accepting a filename, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_BLOB or
NM_SETTING_802_1X_CK_SCHEME_PATH.
In the latter case, the function tries to load the file and verify it.
In case of the private-key setters, this also involves accepting a
password. Depending on whether the scheme is BLOB or PATH, the function
will either set the certificate to a PATH blob, or take the blob that
was read from file.
The functions seem misdesigned to me, because their behavior is
rather obscure. E.g. they behave fundamentally different, depending
on whether scheme is PKCS11 or BLOB/PATH.
Anyway, improve them:
- refactor the common code into a function _cert_impl_set(). Previously,
their non-trivial implementations were copy+pasted several times,
now they all use the same implementation.
- if the function is going to fail, don't touch the setting. Previously,
the functions would first clear the certificate before trying to
validate the input. It's more logical, that if a functions is going
to fail to check for failure first and don't modify the settings.
- not every blob can be represented. For example, if we have a blob
which starts with "file://", then there is no way to set it, simply
because we don't support a prefix for blobs (like "data:;base64,").
This means, if we try to set the certificate to a particular binary,
we must check that the binary is interpreted with the expected scheme.
Add this check.
2018-09-01 18:08:33 +02:00
|
|
|
priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
|
2018-08-31 20:13:39 +02:00
|
|
|
|
libnm/802-1x: refactor setting certificate from path
NMSetting8021x has various utility functions to set
the certificate:
- nm_setting_802_1x_set_ca_cert()
- nm_setting_802_1x_set_client_cert()
- nm_setting_802_1x_set_private_key()
- nm_setting_802_1x_set_phase2_ca_cert()
- nm_setting_802_1x_set_phase2_client_cert()
- nm_setting_802_1x_set_phase2_private_key()
They support:
- accepting a plain PKCS11 URI, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_PKCS11.
- accepting a filename, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_BLOB or
NM_SETTING_802_1X_CK_SCHEME_PATH.
In the latter case, the function tries to load the file and verify it.
In case of the private-key setters, this also involves accepting a
password. Depending on whether the scheme is BLOB or PATH, the function
will either set the certificate to a PATH blob, or take the blob that
was read from file.
The functions seem misdesigned to me, because their behavior is
rather obscure. E.g. they behave fundamentally different, depending
on whether scheme is PKCS11 or BLOB/PATH.
Anyway, improve them:
- refactor the common code into a function _cert_impl_set(). Previously,
their non-trivial implementations were copy+pasted several times,
now they all use the same implementation.
- if the function is going to fail, don't touch the setting. Previously,
the functions would first clear the certificate before trying to
validate the input. It's more logical, that if a functions is going
to fail to check for failure first and don't modify the settings.
- not every blob can be represented. For example, if we have a blob
which starts with "file://", then there is no way to set it, simply
because we don't support a prefix for blobs (like "data:;base64,").
This means, if we try to set the certificate to a particular binary,
we must check that the binary is interpreted with the expected scheme.
Add this check.
2018-09-01 18:08:33 +02:00
|
|
|
if (!value) {
|
|
|
|
|
/* pass. */
|
|
|
|
|
} else if (scheme == NM_SETTING_802_1X_CK_SCHEME_PKCS11) {
|
ifcfg-rh: don't use 802-1x certifcate setter functions
The certificate setter function like nm_setting_802_1x_set_ca_cert()
actually load the file from disk, and validate whether it is a valid
certificate. That is very wrong to do.
For one, the certificates are external files, which are not embedded
into the NMConnection. That means, strongly validating the files while
loading the ifcfg files, is wrong because:
- if validation fails, loading the file fails in its entirety with
a warning in the log. That is not helpful to the user, who now
can no longer use nmcli to fix the path of the certificate (because
the profile failed to load in the first place).
- even if the certificate is valid at load-time, there is no guarantee
that it is valid later on, when we actually try to use the file. What
good does such a validation do? nm_setting_802_1x_set_ca_cert() might
make sense during nmcli_connection_modify(). At the moment when we
create or update the profile, we do want to validate the input and
be helpful to the user. Validating the file later on, when reloading
the profile from disk seems undesirable.
- note how keyfile also does not perform such validations (for good
reasons, I presume).
Also, there is so much wrong with how ifcfg reader handles EAP files.
There is a lot of duplication, and trying to be too smart. I find it
wrong how the "eap_readers" are nested. E.g. both eap_peap_reader() and
"tls" method call to eap_tls_reader(), making it look like that
NMSetting8021x can handle multiple EAP profiles separately. But it cannot. The
802-1x profile is a flat set of properties like ca-cert and others. All
EAP methods share these properties, so having this complex parsing
is not only complicated, but also wrong. The reader should simply parse
the shell variables, and let NMSetting8021x::verify() handle validation
of the settings. Anyway, the patch does not address that.
Also, the setting of the likes of NM_SETTING_802_1X_CLIENT_CERT_PASSWORD was
awkwardly only done when
privkey_format != NM_SETTING_802_1X_CK_FORMAT_PKCS12
&& scheme == NM_SETTING_802_1X_CK_SCHEME_PKCS11
It is too smart. Just read it from file, if it contains invalid data, let
verify() reject it. That is only partly addressed.
Also note, how writer never actually writes the likes of
IEEE_8021X_CLIENT_CERT_PASSWORD. That is another bug and not fixed
either.
2018-09-03 12:24:27 +02:00
|
|
|
cert = _nm_setting_802_1x_cert_value_to_bytes (scheme, (guint8 *) value, -1, error);
|
libnm/802-1x: refactor setting certificate from path
NMSetting8021x has various utility functions to set
the certificate:
- nm_setting_802_1x_set_ca_cert()
- nm_setting_802_1x_set_client_cert()
- nm_setting_802_1x_set_private_key()
- nm_setting_802_1x_set_phase2_ca_cert()
- nm_setting_802_1x_set_phase2_client_cert()
- nm_setting_802_1x_set_phase2_private_key()
They support:
- accepting a plain PKCS11 URI, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_PKCS11.
- accepting a filename, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_BLOB or
NM_SETTING_802_1X_CK_SCHEME_PATH.
In the latter case, the function tries to load the file and verify it.
In case of the private-key setters, this also involves accepting a
password. Depending on whether the scheme is BLOB or PATH, the function
will either set the certificate to a PATH blob, or take the blob that
was read from file.
The functions seem misdesigned to me, because their behavior is
rather obscure. E.g. they behave fundamentally different, depending
on whether scheme is PKCS11 or BLOB/PATH.
Anyway, improve them:
- refactor the common code into a function _cert_impl_set(). Previously,
their non-trivial implementations were copy+pasted several times,
now they all use the same implementation.
- if the function is going to fail, don't touch the setting. Previously,
the functions would first clear the certificate before trying to
validate the input. It's more logical, that if a functions is going
to fail to check for failure first and don't modify the settings.
- not every blob can be represented. For example, if we have a blob
which starts with "file://", then there is no way to set it, simply
because we don't support a prefix for blobs (like "data:;base64,").
This means, if we try to set the certificate to a particular binary,
we must check that the binary is interpreted with the expected scheme.
Add this check.
2018-09-01 18:08:33 +02:00
|
|
|
if (!cert)
|
|
|
|
|
goto err;
|
|
|
|
|
} else {
|
|
|
|
|
gs_unref_bytes GBytes *file = NULL;
|
|
|
|
|
|
|
|
|
|
if (NM_IN_SET (property, PROP_PRIVATE_KEY,
|
|
|
|
|
PROP_PHASE2_PRIVATE_KEY)) {
|
|
|
|
|
file = nm_crypto_read_file (value, error);
|
|
|
|
|
if (!file)
|
|
|
|
|
goto err;
|
|
|
|
|
format = nm_crypto_verify_private_key_data (g_bytes_get_data (file, NULL),
|
|
|
|
|
g_bytes_get_size (file),
|
|
|
|
|
password,
|
|
|
|
|
NULL,
|
|
|
|
|
error);
|
|
|
|
|
if (format == NM_CRYPTO_FILE_FORMAT_UNKNOWN)
|
|
|
|
|
goto err;
|
|
|
|
|
} else {
|
|
|
|
|
if (!nm_crypto_load_and_verify_certificate (value, &format, &file, error))
|
|
|
|
|
goto err;
|
|
|
|
|
}
|
2018-08-31 20:13:39 +02:00
|
|
|
|
libnm/802-1x: refactor setting certificate from path
NMSetting8021x has various utility functions to set
the certificate:
- nm_setting_802_1x_set_ca_cert()
- nm_setting_802_1x_set_client_cert()
- nm_setting_802_1x_set_private_key()
- nm_setting_802_1x_set_phase2_ca_cert()
- nm_setting_802_1x_set_phase2_client_cert()
- nm_setting_802_1x_set_phase2_private_key()
They support:
- accepting a plain PKCS11 URI, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_PKCS11.
- accepting a filename, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_BLOB or
NM_SETTING_802_1X_CK_SCHEME_PATH.
In the latter case, the function tries to load the file and verify it.
In case of the private-key setters, this also involves accepting a
password. Depending on whether the scheme is BLOB or PATH, the function
will either set the certificate to a PATH blob, or take the blob that
was read from file.
The functions seem misdesigned to me, because their behavior is
rather obscure. E.g. they behave fundamentally different, depending
on whether scheme is PKCS11 or BLOB/PATH.
Anyway, improve them:
- refactor the common code into a function _cert_impl_set(). Previously,
their non-trivial implementations were copy+pasted several times,
now they all use the same implementation.
- if the function is going to fail, don't touch the setting. Previously,
the functions would first clear the certificate before trying to
validate the input. It's more logical, that if a functions is going
to fail to check for failure first and don't modify the settings.
- not every blob can be represented. For example, if we have a blob
which starts with "file://", then there is no way to set it, simply
because we don't support a prefix for blobs (like "data:;base64,").
This means, if we try to set the certificate to a particular binary,
we must check that the binary is interpreted with the expected scheme.
Add this check.
2018-09-01 18:08:33 +02:00
|
|
|
nm_assert (format != NM_CRYPTO_FILE_FORMAT_UNKNOWN);
|
|
|
|
|
nm_assert (file);
|
2018-08-31 20:13:39 +02:00
|
|
|
|
libnm/802-1x: refactor setting certificate from path
NMSetting8021x has various utility functions to set
the certificate:
- nm_setting_802_1x_set_ca_cert()
- nm_setting_802_1x_set_client_cert()
- nm_setting_802_1x_set_private_key()
- nm_setting_802_1x_set_phase2_ca_cert()
- nm_setting_802_1x_set_phase2_client_cert()
- nm_setting_802_1x_set_phase2_private_key()
They support:
- accepting a plain PKCS11 URI, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_PKCS11.
- accepting a filename, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_BLOB or
NM_SETTING_802_1X_CK_SCHEME_PATH.
In the latter case, the function tries to load the file and verify it.
In case of the private-key setters, this also involves accepting a
password. Depending on whether the scheme is BLOB or PATH, the function
will either set the certificate to a PATH blob, or take the blob that
was read from file.
The functions seem misdesigned to me, because their behavior is
rather obscure. E.g. they behave fundamentally different, depending
on whether scheme is PKCS11 or BLOB/PATH.
Anyway, improve them:
- refactor the common code into a function _cert_impl_set(). Previously,
their non-trivial implementations were copy+pasted several times,
now they all use the same implementation.
- if the function is going to fail, don't touch the setting. Previously,
the functions would first clear the certificate before trying to
validate the input. It's more logical, that if a functions is going
to fail to check for failure first and don't modify the settings.
- not every blob can be represented. For example, if we have a blob
which starts with "file://", then there is no way to set it, simply
because we don't support a prefix for blobs (like "data:;base64,").
This means, if we try to set the certificate to a particular binary,
we must check that the binary is interpreted with the expected scheme.
Add this check.
2018-09-01 18:08:33 +02:00
|
|
|
if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) {
|
|
|
|
|
cert = g_steal_pointer (&file);
|
|
|
|
|
if (!_cert_verify_scheme (scheme, cert, error))
|
|
|
|
|
goto err;
|
|
|
|
|
} else {
|
ifcfg-rh: don't use 802-1x certifcate setter functions
The certificate setter function like nm_setting_802_1x_set_ca_cert()
actually load the file from disk, and validate whether it is a valid
certificate. That is very wrong to do.
For one, the certificates are external files, which are not embedded
into the NMConnection. That means, strongly validating the files while
loading the ifcfg files, is wrong because:
- if validation fails, loading the file fails in its entirety with
a warning in the log. That is not helpful to the user, who now
can no longer use nmcli to fix the path of the certificate (because
the profile failed to load in the first place).
- even if the certificate is valid at load-time, there is no guarantee
that it is valid later on, when we actually try to use the file. What
good does such a validation do? nm_setting_802_1x_set_ca_cert() might
make sense during nmcli_connection_modify(). At the moment when we
create or update the profile, we do want to validate the input and
be helpful to the user. Validating the file later on, when reloading
the profile from disk seems undesirable.
- note how keyfile also does not perform such validations (for good
reasons, I presume).
Also, there is so much wrong with how ifcfg reader handles EAP files.
There is a lot of duplication, and trying to be too smart. I find it
wrong how the "eap_readers" are nested. E.g. both eap_peap_reader() and
"tls" method call to eap_tls_reader(), making it look like that
NMSetting8021x can handle multiple EAP profiles separately. But it cannot. The
802-1x profile is a flat set of properties like ca-cert and others. All
EAP methods share these properties, so having this complex parsing
is not only complicated, but also wrong. The reader should simply parse
the shell variables, and let NMSetting8021x::verify() handle validation
of the settings. Anyway, the patch does not address that.
Also, the setting of the likes of NM_SETTING_802_1X_CLIENT_CERT_PASSWORD was
awkwardly only done when
privkey_format != NM_SETTING_802_1X_CK_FORMAT_PKCS12
&& scheme == NM_SETTING_802_1X_CK_SCHEME_PKCS11
It is too smart. Just read it from file, if it contains invalid data, let
verify() reject it. That is only partly addressed.
Also note, how writer never actually writes the likes of
IEEE_8021X_CLIENT_CERT_PASSWORD. That is another bug and not fixed
either.
2018-09-03 12:24:27 +02:00
|
|
|
cert = _nm_setting_802_1x_cert_value_to_bytes (scheme, (guint8 *) value, -1, error);
|
libnm/802-1x: refactor setting certificate from path
NMSetting8021x has various utility functions to set
the certificate:
- nm_setting_802_1x_set_ca_cert()
- nm_setting_802_1x_set_client_cert()
- nm_setting_802_1x_set_private_key()
- nm_setting_802_1x_set_phase2_ca_cert()
- nm_setting_802_1x_set_phase2_client_cert()
- nm_setting_802_1x_set_phase2_private_key()
They support:
- accepting a plain PKCS11 URI, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_PKCS11.
- accepting a filename, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_BLOB or
NM_SETTING_802_1X_CK_SCHEME_PATH.
In the latter case, the function tries to load the file and verify it.
In case of the private-key setters, this also involves accepting a
password. Depending on whether the scheme is BLOB or PATH, the function
will either set the certificate to a PATH blob, or take the blob that
was read from file.
The functions seem misdesigned to me, because their behavior is
rather obscure. E.g. they behave fundamentally different, depending
on whether scheme is PKCS11 or BLOB/PATH.
Anyway, improve them:
- refactor the common code into a function _cert_impl_set(). Previously,
their non-trivial implementations were copy+pasted several times,
now they all use the same implementation.
- if the function is going to fail, don't touch the setting. Previously,
the functions would first clear the certificate before trying to
validate the input. It's more logical, that if a functions is going
to fail to check for failure first and don't modify the settings.
- not every blob can be represented. For example, if we have a blob
which starts with "file://", then there is no way to set it, simply
because we don't support a prefix for blobs (like "data:;base64,").
This means, if we try to set the certificate to a particular binary,
we must check that the binary is interpreted with the expected scheme.
Add this check.
2018-09-01 18:08:33 +02:00
|
|
|
if (!cert)
|
|
|
|
|
goto err;
|
|
|
|
|
}
|
|
|
|
|
}
|
2018-08-31 20:13:39 +02:00
|
|
|
|
libnm/802-1x: refactor setting certificate from path
NMSetting8021x has various utility functions to set
the certificate:
- nm_setting_802_1x_set_ca_cert()
- nm_setting_802_1x_set_client_cert()
- nm_setting_802_1x_set_private_key()
- nm_setting_802_1x_set_phase2_ca_cert()
- nm_setting_802_1x_set_phase2_client_cert()
- nm_setting_802_1x_set_phase2_private_key()
They support:
- accepting a plain PKCS11 URI, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_PKCS11.
- accepting a filename, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_BLOB or
NM_SETTING_802_1X_CK_SCHEME_PATH.
In the latter case, the function tries to load the file and verify it.
In case of the private-key setters, this also involves accepting a
password. Depending on whether the scheme is BLOB or PATH, the function
will either set the certificate to a PATH blob, or take the blob that
was read from file.
The functions seem misdesigned to me, because their behavior is
rather obscure. E.g. they behave fundamentally different, depending
on whether scheme is PKCS11 or BLOB/PATH.
Anyway, improve them:
- refactor the common code into a function _cert_impl_set(). Previously,
their non-trivial implementations were copy+pasted several times,
now they all use the same implementation.
- if the function is going to fail, don't touch the setting. Previously,
the functions would first clear the certificate before trying to
validate the input. It's more logical, that if a functions is going
to fail to check for failure first and don't modify the settings.
- not every blob can be represented. For example, if we have a blob
which starts with "file://", then there is no way to set it, simply
because we don't support a prefix for blobs (like "data:;base64,").
This means, if we try to set the certificate to a particular binary,
we must check that the binary is interpreted with the expected scheme.
Add this check.
2018-09-01 18:08:33 +02:00
|
|
|
switch (property) {
|
|
|
|
|
case PROP_CA_CERT:
|
|
|
|
|
case PROP_PHASE2_CA_CERT:
|
|
|
|
|
if ( value
|
|
|
|
|
&& scheme != NM_SETTING_802_1X_CK_SCHEME_PKCS11
|
|
|
|
|
&& format != NM_CRYPTO_FILE_FORMAT_X509) {
|
|
|
|
|
/* wpa_supplicant can only use raw x509 CA certs */
|
|
|
|
|
g_set_error_literal (error,
|
|
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
|
|
|
|
_("CA certificate must be in X.509 format"));
|
|
|
|
|
goto err;
|
|
|
|
|
}
|
|
|
|
|
p_cert = (property == PROP_CA_CERT)
|
|
|
|
|
? &priv->ca_cert
|
|
|
|
|
: &priv->phase2_ca_cert;
|
|
|
|
|
break;
|
|
|
|
|
case PROP_CLIENT_CERT:
|
|
|
|
|
case PROP_PHASE2_CLIENT_CERT:
|
|
|
|
|
if ( value
|
|
|
|
|
&& scheme != NM_SETTING_802_1X_CK_SCHEME_PKCS11
|
|
|
|
|
&& !NM_IN_SET (format, NM_CRYPTO_FILE_FORMAT_X509,
|
|
|
|
|
NM_CRYPTO_FILE_FORMAT_PKCS12)) {
|
|
|
|
|
g_set_error_literal (error,
|
|
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
|
|
|
|
_("invalid certificate format"));
|
|
|
|
|
goto err;
|
|
|
|
|
}
|
|
|
|
|
p_cert = (property == PROP_CLIENT_CERT)
|
|
|
|
|
? &priv->client_cert
|
|
|
|
|
: &priv->phase2_client_cert;
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PRIVATE_KEY:
|
|
|
|
|
p_cert = &priv->private_key;
|
|
|
|
|
p_password = &priv->private_key_password;
|
|
|
|
|
p_client_cert = &priv->client_cert;
|
|
|
|
|
notify_password = PROP_PRIVATE_KEY_PASSWORD;
|
|
|
|
|
notify_client_cert = PROP_CLIENT_CERT;
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PHASE2_PRIVATE_KEY:
|
|
|
|
|
p_cert = &priv->phase2_private_key;
|
|
|
|
|
p_password = &priv->phase2_private_key_password;
|
|
|
|
|
p_client_cert = &priv->phase2_client_cert;
|
|
|
|
|
notify_password = PROP_PHASE2_PRIVATE_KEY_PASSWORD;
|
|
|
|
|
notify_client_cert = PROP_PHASE2_CLIENT_CERT;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
nm_assert_not_reached ();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* As required by NM and wpa_supplicant, set the client-cert
|
|
|
|
|
* property to the same PKCS#12 data.
|
|
|
|
|
*/
|
|
|
|
|
if ( cert
|
|
|
|
|
&& p_client_cert
|
|
|
|
|
&& format == NM_CRYPTO_FILE_FORMAT_PKCS12
|
|
|
|
|
&& !nm_gbytes_equal0 (cert, *p_client_cert)) {
|
|
|
|
|
g_bytes_unref (*p_client_cert);
|
|
|
|
|
*p_client_cert = g_bytes_ref (cert);
|
|
|
|
|
} else
|
|
|
|
|
notify_client_cert = PROP_0;
|
|
|
|
|
|
|
|
|
|
if ( p_cert
|
|
|
|
|
&& !nm_gbytes_equal0 (cert, *p_cert)) {
|
|
|
|
|
g_bytes_unref (*p_cert);
|
|
|
|
|
*p_cert = g_steal_pointer (&cert);
|
|
|
|
|
} else
|
|
|
|
|
notify_cert = PROP_0;
|
|
|
|
|
|
|
|
|
|
if ( p_password
|
|
|
|
|
&& !nm_streq0 (password, *p_password)) {
|
|
|
|
|
nm_free_secret (*p_password);
|
|
|
|
|
*p_password = g_strdup (password);
|
|
|
|
|
} else
|
|
|
|
|
notify_password = PROP_0;
|
|
|
|
|
|
|
|
|
|
nm_gobject_notify_together (setting, notify_cert,
|
|
|
|
|
notify_password,
|
|
|
|
|
notify_client_cert);
|
|
|
|
|
|
|
|
|
|
NM_SET_OUT (out_format, _crypto_format_to_ck (format));
|
|
|
|
|
return TRUE;
|
|
|
|
|
|
|
|
|
|
err:
|
|
|
|
|
g_prefix_error (error,
|
|
|
|
|
"%s.%s: ",
|
|
|
|
|
NM_SETTING_802_1X_SETTING_NAME,
|
|
|
|
|
obj_properties[property]->name);
|
|
|
|
|
NM_SET_OUT (out_format, NM_SETTING_802_1X_CK_FORMAT_UNKNOWN);
|
|
|
|
|
return FALSE;
|
2018-08-31 20:13:39 +02:00
|
|
|
}
|
|
|
|
|
|
2018-09-03 16:33:28 +02:00
|
|
|
static NMSetting8021xCKFormat
|
|
|
|
|
_cert_impl_get_key_format_from_bytes (GBytes *private_key)
|
|
|
|
|
{
|
|
|
|
|
const char *path;
|
|
|
|
|
GError *error = NULL;
|
|
|
|
|
|
|
|
|
|
if (!private_key)
|
|
|
|
|
return NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
|
|
|
|
|
|
ifcfg-rh: don't use 802-1x certifcate setter functions
The certificate setter function like nm_setting_802_1x_set_ca_cert()
actually load the file from disk, and validate whether it is a valid
certificate. That is very wrong to do.
For one, the certificates are external files, which are not embedded
into the NMConnection. That means, strongly validating the files while
loading the ifcfg files, is wrong because:
- if validation fails, loading the file fails in its entirety with
a warning in the log. That is not helpful to the user, who now
can no longer use nmcli to fix the path of the certificate (because
the profile failed to load in the first place).
- even if the certificate is valid at load-time, there is no guarantee
that it is valid later on, when we actually try to use the file. What
good does such a validation do? nm_setting_802_1x_set_ca_cert() might
make sense during nmcli_connection_modify(). At the moment when we
create or update the profile, we do want to validate the input and
be helpful to the user. Validating the file later on, when reloading
the profile from disk seems undesirable.
- note how keyfile also does not perform such validations (for good
reasons, I presume).
Also, there is so much wrong with how ifcfg reader handles EAP files.
There is a lot of duplication, and trying to be too smart. I find it
wrong how the "eap_readers" are nested. E.g. both eap_peap_reader() and
"tls" method call to eap_tls_reader(), making it look like that
NMSetting8021x can handle multiple EAP profiles separately. But it cannot. The
802-1x profile is a flat set of properties like ca-cert and others. All
EAP methods share these properties, so having this complex parsing
is not only complicated, but also wrong. The reader should simply parse
the shell variables, and let NMSetting8021x::verify() handle validation
of the settings. Anyway, the patch does not address that.
Also, the setting of the likes of NM_SETTING_802_1X_CLIENT_CERT_PASSWORD was
awkwardly only done when
privkey_format != NM_SETTING_802_1X_CK_FORMAT_PKCS12
&& scheme == NM_SETTING_802_1X_CK_SCHEME_PKCS11
It is too smart. Just read it from file, if it contains invalid data, let
verify() reject it. That is only partly addressed.
Also note, how writer never actually writes the likes of
IEEE_8021X_CLIENT_CERT_PASSWORD. That is another bug and not fixed
either.
2018-09-03 12:24:27 +02:00
|
|
|
switch (_nm_setting_802_1x_cert_get_scheme (private_key, NULL)) {
|
2018-09-03 16:33:28 +02:00
|
|
|
case NM_SETTING_802_1X_CK_SCHEME_BLOB:
|
|
|
|
|
if (nm_crypto_is_pkcs12_data (g_bytes_get_data (private_key, NULL),
|
|
|
|
|
g_bytes_get_size (private_key),
|
|
|
|
|
NULL))
|
|
|
|
|
return NM_SETTING_802_1X_CK_FORMAT_PKCS12;
|
|
|
|
|
return NM_SETTING_802_1X_CK_FORMAT_RAW_KEY;
|
|
|
|
|
case NM_SETTING_802_1X_CK_SCHEME_PATH:
|
|
|
|
|
path = _cert_get_path (private_key);
|
|
|
|
|
if (nm_crypto_is_pkcs12_file (path, &error))
|
|
|
|
|
return NM_SETTING_802_1X_CK_FORMAT_PKCS12;
|
|
|
|
|
if (error && error->domain == G_FILE_ERROR) {
|
|
|
|
|
g_error_free (error);
|
|
|
|
|
return NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
|
|
|
|
|
}
|
|
|
|
|
g_error_free (error);
|
|
|
|
|
return NM_SETTING_802_1X_CK_FORMAT_RAW_KEY;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
|
|
|
|
|
}
|
|
|
|
|
#define _cert_impl_get_key_format(setting, private_key_field) \
|
|
|
|
|
({ \
|
|
|
|
|
NMSetting8021x *_setting = (setting); \
|
|
|
|
|
NMSetting8021xPrivate *_priv; \
|
|
|
|
|
\
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (_setting), NM_SETTING_802_1X_CK_FORMAT_UNKNOWN); \
|
|
|
|
|
\
|
|
|
|
|
_priv = NM_SETTING_802_1X_GET_PRIVATE (_setting); \
|
|
|
|
|
_cert_impl_get_key_format_from_bytes (_priv->private_key_field); \
|
|
|
|
|
})
|
|
|
|
|
|
2018-08-31 20:13:39 +02:00
|
|
|
static gboolean
|
2018-08-31 21:53:35 +02:00
|
|
|
_cert_verify_property (GBytes *bytes,
|
|
|
|
|
const char *prop_name,
|
|
|
|
|
const char *password,
|
|
|
|
|
const char *password_prop_name,
|
|
|
|
|
GError **error)
|
2018-08-31 20:13:39 +02:00
|
|
|
{
|
|
|
|
|
GError *local = NULL;
|
|
|
|
|
NMSetting8021xCKScheme scheme;
|
|
|
|
|
|
2018-08-31 21:04:17 +02:00
|
|
|
if (!bytes)
|
2018-08-31 20:13:39 +02:00
|
|
|
return TRUE;
|
|
|
|
|
|
ifcfg-rh: don't use 802-1x certifcate setter functions
The certificate setter function like nm_setting_802_1x_set_ca_cert()
actually load the file from disk, and validate whether it is a valid
certificate. That is very wrong to do.
For one, the certificates are external files, which are not embedded
into the NMConnection. That means, strongly validating the files while
loading the ifcfg files, is wrong because:
- if validation fails, loading the file fails in its entirety with
a warning in the log. That is not helpful to the user, who now
can no longer use nmcli to fix the path of the certificate (because
the profile failed to load in the first place).
- even if the certificate is valid at load-time, there is no guarantee
that it is valid later on, when we actually try to use the file. What
good does such a validation do? nm_setting_802_1x_set_ca_cert() might
make sense during nmcli_connection_modify(). At the moment when we
create or update the profile, we do want to validate the input and
be helpful to the user. Validating the file later on, when reloading
the profile from disk seems undesirable.
- note how keyfile also does not perform such validations (for good
reasons, I presume).
Also, there is so much wrong with how ifcfg reader handles EAP files.
There is a lot of duplication, and trying to be too smart. I find it
wrong how the "eap_readers" are nested. E.g. both eap_peap_reader() and
"tls" method call to eap_tls_reader(), making it look like that
NMSetting8021x can handle multiple EAP profiles separately. But it cannot. The
802-1x profile is a flat set of properties like ca-cert and others. All
EAP methods share these properties, so having this complex parsing
is not only complicated, but also wrong. The reader should simply parse
the shell variables, and let NMSetting8021x::verify() handle validation
of the settings. Anyway, the patch does not address that.
Also, the setting of the likes of NM_SETTING_802_1X_CLIENT_CERT_PASSWORD was
awkwardly only done when
privkey_format != NM_SETTING_802_1X_CK_FORMAT_PKCS12
&& scheme == NM_SETTING_802_1X_CK_SCHEME_PKCS11
It is too smart. Just read it from file, if it contains invalid data, let
verify() reject it. That is only partly addressed.
Also note, how writer never actually writes the likes of
IEEE_8021X_CLIENT_CERT_PASSWORD. That is another bug and not fixed
either.
2018-09-03 12:24:27 +02:00
|
|
|
scheme = _nm_setting_802_1x_cert_get_scheme (bytes, &local);
|
2018-08-31 20:13:39 +02:00
|
|
|
if (scheme == NM_SETTING_802_1X_CK_SCHEME_UNKNOWN) {
|
|
|
|
|
g_set_error (error,
|
|
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
|
|
|
|
_("certificate is invalid: %s"), local->message);
|
|
|
|
|
g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, prop_name);
|
|
|
|
|
g_error_free (local);
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (password && (scheme != NM_SETTING_802_1X_CK_SCHEME_PKCS11)) {
|
|
|
|
|
g_set_error (error,
|
|
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
|
|
|
|
_("password is not supported when certificate is not on a PKCS#11 token"));
|
|
|
|
|
g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, password_prop_name);
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return TRUE;
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
2017-02-16 12:20:51 +01:00
|
|
|
/*****************************************************************************/
|
|
|
|
|
|
2014-07-24 08:53:33 -04:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_num_eap_methods:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns the number of eap methods allowed for use when connecting to the
|
|
|
|
|
* network. Generally only one EAP method is used. Use the functions
|
|
|
|
|
* nm_setting_802_1x_get_eap_method(), nm_setting_802_1x_add_eap_method(),
|
|
|
|
|
* and nm_setting_802_1x_remove_eap_method() for adding, removing, and retrieving
|
|
|
|
|
* allowed EAP methods.
|
|
|
|
|
*
|
|
|
|
|
* Returns: the number of allowed EAP methods
|
|
|
|
|
**/
|
|
|
|
|
guint32
|
|
|
|
|
nm_setting_802_1x_get_num_eap_methods (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), 0);
|
|
|
|
|
|
|
|
|
|
return g_slist_length (NM_SETTING_802_1X_GET_PRIVATE (setting)->eap);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_eap_method:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
* @i: the index of the EAP method name to return
|
|
|
|
|
*
|
|
|
|
|
* Returns the name of the allowed EAP method at index @i.
|
|
|
|
|
*
|
|
|
|
|
* Returns: the name of the allowed EAP method at index @i
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_eap_method (NMSetting8021x *setting, guint32 i)
|
|
|
|
|
{
|
|
|
|
|
NMSetting8021xPrivate *priv;
|
|
|
|
|
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
|
|
|
|
|
|
|
|
|
|
priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
|
|
|
|
|
g_return_val_if_fail (i <= g_slist_length (priv->eap), NULL);
|
|
|
|
|
|
|
|
|
|
return (const char *) g_slist_nth_data (priv->eap, i);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_add_eap_method:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
* @eap: the name of the EAP method to allow for this connection
|
|
|
|
|
*
|
|
|
|
|
* Adds an allowed EAP method. The setting is not valid until at least one
|
|
|
|
|
* EAP method has been added. See #NMSetting8021x:eap property for a list of
|
|
|
|
|
* allowed EAP methods.
|
|
|
|
|
*
|
|
|
|
|
* Returns: %TRUE if the EAP method was successfully added, %FALSE if it was
|
|
|
|
|
* not a valid method or if it was already allowed.
|
|
|
|
|
**/
|
|
|
|
|
gboolean
|
|
|
|
|
nm_setting_802_1x_add_eap_method (NMSetting8021x *setting, const char *eap)
|
|
|
|
|
{
|
|
|
|
|
NMSetting8021xPrivate *priv;
|
|
|
|
|
GSList *iter;
|
|
|
|
|
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), FALSE);
|
|
|
|
|
g_return_val_if_fail (eap != NULL, FALSE);
|
|
|
|
|
|
|
|
|
|
priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
|
|
|
|
|
for (iter = priv->eap; iter; iter = g_slist_next (iter)) {
|
|
|
|
|
if (!strcmp (eap, (char *) iter->data))
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
priv->eap = g_slist_append (priv->eap, g_ascii_strdown (eap, -1));
|
2018-08-31 20:08:48 +02:00
|
|
|
_notify (setting, PROP_EAP);
|
2014-07-24 08:53:33 -04:00
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_remove_eap_method:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
* @i: the index of the EAP method to remove
|
|
|
|
|
*
|
|
|
|
|
* Removes the allowed EAP method at the specified index.
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
nm_setting_802_1x_remove_eap_method (NMSetting8021x *setting, guint32 i)
|
|
|
|
|
{
|
|
|
|
|
NMSetting8021xPrivate *priv;
|
|
|
|
|
GSList *elt;
|
|
|
|
|
|
|
|
|
|
g_return_if_fail (NM_IS_SETTING_802_1X (setting));
|
|
|
|
|
|
|
|
|
|
priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
|
|
|
|
|
elt = g_slist_nth (priv->eap, i);
|
|
|
|
|
g_return_if_fail (elt != NULL);
|
|
|
|
|
|
|
|
|
|
g_free (elt->data);
|
|
|
|
|
priv->eap = g_slist_delete_link (priv->eap, elt);
|
2018-08-31 20:08:48 +02:00
|
|
|
_notify (setting, PROP_EAP);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_remove_eap_method_by_value:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
* @eap: the name of the EAP method to remove
|
|
|
|
|
*
|
|
|
|
|
* Removes the allowed EAP method @method.
|
|
|
|
|
*
|
|
|
|
|
* Returns: %TRUE if the EAP method was founs and removed, %FALSE if it was not.
|
|
|
|
|
**/
|
|
|
|
|
gboolean
|
|
|
|
|
nm_setting_802_1x_remove_eap_method_by_value (NMSetting8021x *setting,
|
|
|
|
|
const char *eap)
|
|
|
|
|
{
|
|
|
|
|
NMSetting8021xPrivate *priv;
|
|
|
|
|
GSList *iter;
|
|
|
|
|
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), FALSE);
|
|
|
|
|
g_return_val_if_fail (eap != NULL, FALSE);
|
|
|
|
|
|
|
|
|
|
priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
|
|
|
|
|
for (iter = priv->eap; iter; iter = g_slist_next (iter)) {
|
|
|
|
|
if (!strcmp (eap, (char *) iter->data)) {
|
|
|
|
|
priv->eap = g_slist_delete_link (priv->eap, iter);
|
2018-08-31 20:08:48 +02:00
|
|
|
_notify (setting, PROP_EAP);
|
2014-07-24 08:53:33 -04:00
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_clear_eap_methods:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Clears all allowed EAP methods.
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
nm_setting_802_1x_clear_eap_methods (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
NMSetting8021xPrivate *priv;
|
|
|
|
|
|
|
|
|
|
g_return_if_fail (NM_IS_SETTING_802_1X (setting));
|
|
|
|
|
|
|
|
|
|
priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
|
|
|
|
|
g_slist_free_full (priv->eap, g_free);
|
|
|
|
|
priv->eap = NULL;
|
2018-08-31 20:13:39 +02:00
|
|
|
_notify (setting, PROP_EAP);
|
|
|
|
|
}
|
libnm: combine get_cert_scheme() and verify_cert() and ensure valid paths for NMSetting8021x
get_cert_scheme() would return PATH scheme for binary data that
later will be rejected by verify_cert(). Even worse, get_cert_scheme()
would not check whether the path is NUL terminated, hence the following
can crash for an invalid connection:
if (nm_setting_802_1x_get_ca_cert_scheme (s_8021x) == NM_SETTING_802_1X_CK_SCHEME_PATH)
g_print ("path: %s", nm_setting_802_1x_get_ca_cert_path (s_8021x))
Combine the two functions so that already get_cert_scheme() does
the same validation as verify_cert().
Also change behavior and be more strict about invalid paths:
- Now, the value is considered a PATH candidate if it starts with "file://",
(sans NUL character).
A change is that before, the "file://" (without NUL) would have
been treated as BLOB, now it is an invalid PATH (UNKNOWN).
- If the binary starts with "file://" it is considered as PATH but it
is only valid, if all the fllowing is true:
(a) the last character must be NUL.
(b) there is no other intermediate NUL character.
Before, an intermediate NUL character would have been accepted
and the remainder would be ignored.
(c) there is at least one non-NUL character after "file://".
(d) the string must be fully valid utf8.
The conditions (b) and (c) are new and some invalid(?) paths
might no longer validate.
Checking (d) moved from verify_cert() to get_cert_scheme().
As set_cert_prop_helper() already called verify_cert(), this
causes no additional change beyond (b).
2015-02-23 15:34:24 +01:00
|
|
|
|
2018-08-31 20:13:39 +02:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_identity:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns the identifier used by some EAP methods (like TLS) to
|
|
|
|
|
* authenticate the user. Often this is a username or login name.
|
|
|
|
|
*
|
|
|
|
|
* Returns: the user identifier
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_identity (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
|
libnm: combine get_cert_scheme() and verify_cert() and ensure valid paths for NMSetting8021x
get_cert_scheme() would return PATH scheme for binary data that
later will be rejected by verify_cert(). Even worse, get_cert_scheme()
would not check whether the path is NUL terminated, hence the following
can crash for an invalid connection:
if (nm_setting_802_1x_get_ca_cert_scheme (s_8021x) == NM_SETTING_802_1X_CK_SCHEME_PATH)
g_print ("path: %s", nm_setting_802_1x_get_ca_cert_path (s_8021x))
Combine the two functions so that already get_cert_scheme() does
the same validation as verify_cert().
Also change behavior and be more strict about invalid paths:
- Now, the value is considered a PATH candidate if it starts with "file://",
(sans NUL character).
A change is that before, the "file://" (without NUL) would have
been treated as BLOB, now it is an invalid PATH (UNKNOWN).
- If the binary starts with "file://" it is considered as PATH but it
is only valid, if all the fllowing is true:
(a) the last character must be NUL.
(b) there is no other intermediate NUL character.
Before, an intermediate NUL character would have been accepted
and the remainder would be ignored.
(c) there is at least one non-NUL character after "file://".
(d) the string must be fully valid utf8.
The conditions (b) and (c) are new and some invalid(?) paths
might no longer validate.
Checking (d) moved from verify_cert() to get_cert_scheme().
As set_cert_prop_helper() already called verify_cert(), this
causes no additional change beyond (b).
2015-02-23 15:34:24 +01:00
|
|
|
|
2018-08-31 20:13:39 +02:00
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->identity;
|
|
|
|
|
}
|
2014-07-24 08:53:33 -04:00
|
|
|
|
2018-08-31 20:13:39 +02:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_anonymous_identity:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns the anonymous identifier used by some EAP methods (like TTLS) to
|
|
|
|
|
* authenticate the user in the outer unencrypted "phase 1" authentication. The
|
|
|
|
|
* inner "phase 2" authentication will use the #NMSetting8021x:identity in
|
|
|
|
|
* a secure form, if applicable for that EAP method.
|
|
|
|
|
*
|
|
|
|
|
* Returns: the anonymous identifier
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_anonymous_identity (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->anonymous_identity;
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
2018-08-31 20:13:39 +02:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_pac_file:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns the file containing PAC credentials used by EAP-FAST method.
|
|
|
|
|
*
|
|
|
|
|
* Returns: the PAC file
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_pac_file (NMSetting8021x *setting)
|
2015-02-26 01:48:50 +01:00
|
|
|
{
|
2018-08-31 20:13:39 +02:00
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
|
2018-08-30 10:13:40 +02:00
|
|
|
|
2018-08-31 20:13:39 +02:00
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->pac_file;
|
|
|
|
|
}
|
2018-08-30 10:13:40 +02:00
|
|
|
|
2018-08-31 20:13:39 +02:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_ca_path:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns the path of the CA certificate directory if previously set. Systems
|
|
|
|
|
* will often have a directory that contains multiple individual CA certificates
|
|
|
|
|
* which the supplicant can then add to the verification chain. This may be
|
|
|
|
|
* used in addition to the #NMSetting8021x:ca-cert property to add more CA
|
|
|
|
|
* certificates for verifying the network to client.
|
|
|
|
|
*
|
|
|
|
|
* Returns: the CA certificate directory path
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_ca_path (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
|
2015-02-26 01:48:50 +01:00
|
|
|
|
2018-08-31 20:13:39 +02:00
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->ca_path;
|
|
|
|
|
}
|
2015-02-26 01:48:50 +01:00
|
|
|
|
2018-08-31 20:13:39 +02:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_system_ca_certs:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Sets the #NMSetting8021x:system-ca-certs property. The
|
|
|
|
|
* #NMSetting8021x:ca-path and #NMSetting8021x:phase2-ca-path
|
|
|
|
|
* properties are ignored if the #NMSetting8021x:system-ca-certs property is
|
|
|
|
|
* %TRUE, in which case a system-wide CA certificate directory specified at
|
|
|
|
|
* compile time (using the --system-ca-path configure option) is used in place
|
|
|
|
|
* of these properties.
|
|
|
|
|
*
|
|
|
|
|
* Returns: %TRUE if a system CA certificate path should be used, %FALSE if not
|
|
|
|
|
**/
|
|
|
|
|
gboolean
|
|
|
|
|
nm_setting_802_1x_get_system_ca_certs (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), FALSE);
|
2015-02-26 01:48:50 +01:00
|
|
|
|
2018-08-31 20:13:39 +02:00
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->system_ca_certs;
|
2015-02-26 01:48:50 +01:00
|
|
|
}
|
|
|
|
|
|
2014-07-24 08:53:33 -04:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_ca_cert_scheme:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns the scheme used to store the CA certificate. If the returned scheme
|
|
|
|
|
* is %NM_SETTING_802_1X_CK_SCHEME_BLOB, use nm_setting_802_1x_get_ca_cert_blob();
|
2016-12-19 12:47:15 +01:00
|
|
|
* if %NM_SETTING_802_1X_CK_SCHEME_PATH, use nm_setting_802_1x_get_ca_cert_path();
|
|
|
|
|
* if %NM_SETTING_802_1X_CK_SCHEME_PKCS11, use nm_setting_802_1x_get_ca_cert_uri().
|
2014-07-24 08:53:33 -04:00
|
|
|
*
|
|
|
|
|
* Returns: scheme used to store the CA certificate (blob or path)
|
|
|
|
|
**/
|
|
|
|
|
NMSetting8021xCKScheme
|
|
|
|
|
nm_setting_802_1x_get_ca_cert_scheme (NMSetting8021x *setting)
|
|
|
|
|
{
|
2018-08-31 21:04:17 +02:00
|
|
|
_cert_impl_get_scheme (setting, ca_cert);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_ca_cert_blob:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns the CA certificate blob if the CA certificate is stored using the
|
|
|
|
|
* %NM_SETTING_802_1X_CK_SCHEME_BLOB scheme. Not all EAP methods use a
|
|
|
|
|
* CA certificate (LEAP for example), and those that can take advantage of the
|
|
|
|
|
* CA certificate allow it to be unset. Note that lack of a CA certificate
|
|
|
|
|
* reduces security by allowing man-in-the-middle attacks, because the identity
|
|
|
|
|
* of the network cannot be confirmed by the client.
|
|
|
|
|
*
|
2014-11-13 14:14:11 -05:00
|
|
|
* Returns: (transfer none): the CA certificate data
|
2014-07-24 08:53:33 -04:00
|
|
|
**/
|
2014-06-26 10:42:11 -04:00
|
|
|
GBytes *
|
2014-07-24 08:53:33 -04:00
|
|
|
nm_setting_802_1x_get_ca_cert_blob (NMSetting8021x *setting)
|
|
|
|
|
{
|
2018-08-31 21:04:17 +02:00
|
|
|
_cert_impl_get_blob (setting, ca_cert);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_ca_cert_path:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns the CA certificate path if the CA certificate is stored using the
|
|
|
|
|
* %NM_SETTING_802_1X_CK_SCHEME_PATH scheme. Not all EAP methods use a
|
|
|
|
|
* CA certificate (LEAP for example), and those that can take advantage of the
|
|
|
|
|
* CA certificate allow it to be unset. Note that lack of a CA certificate
|
|
|
|
|
* reduces security by allowing man-in-the-middle attacks, because the identity
|
|
|
|
|
* of the network cannot be confirmed by the client.
|
|
|
|
|
*
|
|
|
|
|
* Returns: path to the CA certificate file
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_ca_cert_path (NMSetting8021x *setting)
|
|
|
|
|
{
|
2018-08-31 21:04:17 +02:00
|
|
|
_cert_impl_get_path (setting, ca_cert);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
2016-12-19 12:47:15 +01:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_ca_cert_uri:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns the CA certificate URI analogously to
|
|
|
|
|
* nm_setting_802_1x_get_ca_cert_blob() and
|
|
|
|
|
* nm_setting_802_1x_get_ca_cert_path().
|
|
|
|
|
*
|
2020-07-01 17:20:40 -04:00
|
|
|
* Currently, it's limited to PKCS#11 URIs ('pkcs11' scheme as defined by RFC
|
2016-12-19 12:47:15 +01:00
|
|
|
* 7512), but may be extended to other schemes in future (such as 'file' URIs
|
|
|
|
|
* for local files and 'data' URIs for inline certificate data).
|
|
|
|
|
*
|
|
|
|
|
* Returns: the URI string
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.6
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_ca_cert_uri (NMSetting8021x *setting)
|
|
|
|
|
{
|
2018-08-31 21:04:17 +02:00
|
|
|
_cert_impl_get_uri (setting, ca_cert);
|
2016-12-19 12:47:15 +01:00
|
|
|
}
|
|
|
|
|
|
2014-07-24 08:53:33 -04:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_set_ca_cert:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
2017-01-06 16:00:11 +01:00
|
|
|
* @value: when @scheme is set to either %NM_SETTING_802_1X_CK_SCHEME_PATH
|
2014-07-24 08:53:33 -04:00
|
|
|
* or %NM_SETTING_802_1X_CK_SCHEME_BLOB, pass the path of the CA certificate
|
|
|
|
|
* file (PEM or DER format). The path must be UTF-8 encoded; use
|
|
|
|
|
* g_filename_to_utf8() to convert if needed. Passing %NULL with any @scheme
|
|
|
|
|
* clears the CA certificate.
|
|
|
|
|
* @scheme: desired storage scheme for the certificate
|
|
|
|
|
* @out_format: on successful return, the type of the certificate added
|
|
|
|
|
* @error: on unsuccessful return, an error
|
|
|
|
|
*
|
|
|
|
|
* Reads a certificate from disk and sets the #NMSetting8021x:ca-cert property
|
|
|
|
|
* with the raw certificate data if using the %NM_SETTING_802_1X_CK_SCHEME_BLOB
|
|
|
|
|
* scheme, or with the path to the certificate file if using the
|
|
|
|
|
* %NM_SETTING_802_1X_CK_SCHEME_PATH scheme.
|
|
|
|
|
*
|
|
|
|
|
* Returns: %TRUE if the operation succeeded, %FALSE if it was unsuccessful
|
|
|
|
|
**/
|
|
|
|
|
gboolean
|
|
|
|
|
nm_setting_802_1x_set_ca_cert (NMSetting8021x *setting,
|
2016-12-22 17:02:20 +00:00
|
|
|
const char *value,
|
2014-07-24 08:53:33 -04:00
|
|
|
NMSetting8021xCKScheme scheme,
|
|
|
|
|
NMSetting8021xCKFormat *out_format,
|
|
|
|
|
GError **error)
|
|
|
|
|
{
|
libnm/802-1x: refactor setting certificate from path
NMSetting8021x has various utility functions to set
the certificate:
- nm_setting_802_1x_set_ca_cert()
- nm_setting_802_1x_set_client_cert()
- nm_setting_802_1x_set_private_key()
- nm_setting_802_1x_set_phase2_ca_cert()
- nm_setting_802_1x_set_phase2_client_cert()
- nm_setting_802_1x_set_phase2_private_key()
They support:
- accepting a plain PKCS11 URI, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_PKCS11.
- accepting a filename, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_BLOB or
NM_SETTING_802_1X_CK_SCHEME_PATH.
In the latter case, the function tries to load the file and verify it.
In case of the private-key setters, this also involves accepting a
password. Depending on whether the scheme is BLOB or PATH, the function
will either set the certificate to a PATH blob, or take the blob that
was read from file.
The functions seem misdesigned to me, because their behavior is
rather obscure. E.g. they behave fundamentally different, depending
on whether scheme is PKCS11 or BLOB/PATH.
Anyway, improve them:
- refactor the common code into a function _cert_impl_set(). Previously,
their non-trivial implementations were copy+pasted several times,
now they all use the same implementation.
- if the function is going to fail, don't touch the setting. Previously,
the functions would first clear the certificate before trying to
validate the input. It's more logical, that if a functions is going
to fail to check for failure first and don't modify the settings.
- not every blob can be represented. For example, if we have a blob
which starts with "file://", then there is no way to set it, simply
because we don't support a prefix for blobs (like "data:;base64,").
This means, if we try to set the certificate to a particular binary,
we must check that the binary is interpreted with the expected scheme.
Add this check.
2018-09-01 18:08:33 +02:00
|
|
|
return _cert_impl_set (setting, PROP_CA_CERT, value, NULL, scheme, out_format, error);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
2017-02-01 12:53:34 +00:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_ca_cert_password:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns: the password used to access the CA certificate stored in
|
|
|
|
|
* #NMSetting8021x:ca-cert property. Only makes sense if the certificate
|
|
|
|
|
* is stored on a PKCS#<!-- -->11 token that requires a login.
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.8
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_ca_cert_password (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->ca_cert_password;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_ca_cert_password_flags:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns: the #NMSettingSecretFlags pertaining to the
|
|
|
|
|
* #NMSetting8021x:ca-cert-password
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.8
|
|
|
|
|
**/
|
|
|
|
|
NMSettingSecretFlags
|
|
|
|
|
nm_setting_802_1x_get_ca_cert_password_flags (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NM_SETTING_SECRET_FLAG_NONE);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->ca_cert_password_flags;
|
|
|
|
|
}
|
|
|
|
|
|
2014-07-24 08:53:33 -04:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_subject_match:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns: the #NMSetting8021x:subject-match property. This is the
|
|
|
|
|
* substring to be matched against the subject of the authentication
|
|
|
|
|
* server certificate, or %NULL no subject verification is to be
|
|
|
|
|
* performed.
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_subject_match (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->subject_match;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_num_altsubject_matches:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns the number of entries in the
|
|
|
|
|
* #NMSetting8021x:altsubject-matches property of this setting.
|
|
|
|
|
*
|
|
|
|
|
* Returns: the number of altsubject-matches entries.
|
|
|
|
|
**/
|
|
|
|
|
guint32
|
|
|
|
|
nm_setting_802_1x_get_num_altsubject_matches (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), 0);
|
|
|
|
|
|
|
|
|
|
return g_slist_length (NM_SETTING_802_1X_GET_PRIVATE (setting)->altsubject_matches);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_altsubject_match:
|
|
|
|
|
* @setting: the #NMSettingConnection
|
|
|
|
|
* @i: the zero-based index of the array of altSubjectName matches
|
|
|
|
|
*
|
|
|
|
|
* Returns the altSubjectName match at index @i.
|
|
|
|
|
*
|
|
|
|
|
* Returns: the altSubjectName match at index @i
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_altsubject_match (NMSetting8021x *setting, guint32 i)
|
|
|
|
|
{
|
|
|
|
|
NMSetting8021xPrivate *priv;
|
|
|
|
|
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
|
|
|
|
|
|
|
|
|
|
priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
|
|
|
|
|
g_return_val_if_fail (i <= g_slist_length (priv->altsubject_matches), NULL);
|
|
|
|
|
|
|
|
|
|
return (const char *) g_slist_nth_data (priv->altsubject_matches, i);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_add_altsubject_match:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
* @altsubject_match: the altSubjectName to allow for this connection
|
|
|
|
|
*
|
|
|
|
|
* Adds an allowed alternate subject name match. Until at least one
|
|
|
|
|
* match is added, the altSubjectName of the remote authentication
|
|
|
|
|
* server is not verified.
|
|
|
|
|
*
|
|
|
|
|
* Returns: %TRUE if the alternative subject name match was
|
|
|
|
|
* successfully added, %FALSE if it was already allowed.
|
|
|
|
|
**/
|
|
|
|
|
gboolean
|
|
|
|
|
nm_setting_802_1x_add_altsubject_match (NMSetting8021x *setting,
|
|
|
|
|
const char *altsubject_match)
|
|
|
|
|
{
|
|
|
|
|
NMSetting8021xPrivate *priv;
|
|
|
|
|
GSList *iter;
|
|
|
|
|
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), FALSE);
|
|
|
|
|
g_return_val_if_fail (altsubject_match != NULL, FALSE);
|
|
|
|
|
|
|
|
|
|
priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
|
|
|
|
|
for (iter = priv->altsubject_matches; iter; iter = g_slist_next (iter)) {
|
|
|
|
|
if (!strcmp (altsubject_match, (char *) iter->data))
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
priv->altsubject_matches = g_slist_append (priv->altsubject_matches,
|
|
|
|
|
g_strdup (altsubject_match));
|
2018-08-31 20:08:48 +02:00
|
|
|
_notify (setting, PROP_ALTSUBJECT_MATCHES);
|
2014-07-24 08:53:33 -04:00
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_remove_altsubject_match:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
* @i: the index of the altSubjectName match to remove
|
|
|
|
|
*
|
|
|
|
|
* Removes the allowed altSubjectName at the specified index.
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
nm_setting_802_1x_remove_altsubject_match (NMSetting8021x *setting, guint32 i)
|
|
|
|
|
{
|
|
|
|
|
NMSetting8021xPrivate *priv;
|
|
|
|
|
GSList *elt;
|
|
|
|
|
|
|
|
|
|
g_return_if_fail (NM_IS_SETTING_802_1X (setting));
|
|
|
|
|
|
|
|
|
|
priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
|
|
|
|
|
elt = g_slist_nth (priv->altsubject_matches, i);
|
|
|
|
|
g_return_if_fail (elt != NULL);
|
|
|
|
|
|
|
|
|
|
g_free (elt->data);
|
|
|
|
|
priv->altsubject_matches = g_slist_delete_link (priv->altsubject_matches, elt);
|
2018-08-31 20:08:48 +02:00
|
|
|
_notify (setting, PROP_ALTSUBJECT_MATCHES);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_remove_altsubject_match_by_value:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
* @altsubject_match: the altSubjectName to remove
|
|
|
|
|
*
|
|
|
|
|
* Removes the allowed altSubjectName @altsubject_match.
|
|
|
|
|
*
|
|
|
|
|
* Returns: %TRUE if the alternative subject name match was found and removed,
|
|
|
|
|
* %FALSE if it was not.
|
|
|
|
|
**/
|
|
|
|
|
gboolean
|
|
|
|
|
nm_setting_802_1x_remove_altsubject_match_by_value (NMSetting8021x *setting,
|
|
|
|
|
const char *altsubject_match)
|
|
|
|
|
{
|
|
|
|
|
NMSetting8021xPrivate *priv;
|
|
|
|
|
GSList *iter;
|
|
|
|
|
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), FALSE);
|
|
|
|
|
g_return_val_if_fail (altsubject_match != NULL, FALSE);
|
|
|
|
|
|
|
|
|
|
priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
|
|
|
|
|
for (iter = priv->altsubject_matches; iter; iter = g_slist_next (iter)) {
|
|
|
|
|
if (!strcmp (altsubject_match, (char *) iter->data)) {
|
|
|
|
|
priv->altsubject_matches = g_slist_delete_link (priv->altsubject_matches, iter);
|
2018-08-31 20:08:48 +02:00
|
|
|
_notify (setting, PROP_ALTSUBJECT_MATCHES);
|
2014-07-24 08:53:33 -04:00
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_clear_altsubject_matches:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Clears all altSubjectName matches.
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
nm_setting_802_1x_clear_altsubject_matches (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
NMSetting8021xPrivate *priv;
|
|
|
|
|
|
|
|
|
|
g_return_if_fail (NM_IS_SETTING_802_1X (setting));
|
|
|
|
|
|
|
|
|
|
priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
|
|
|
|
|
g_slist_free_full (priv->altsubject_matches, g_free);
|
|
|
|
|
priv->altsubject_matches = NULL;
|
2018-08-31 20:08:48 +02:00
|
|
|
_notify (setting, PROP_ALTSUBJECT_MATCHES);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
2016-03-03 22:42:35 +01:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_domain_suffix_match:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns: the #NMSetting8021x:domain-suffix-match property.
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.2
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_domain_suffix_match (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->domain_suffix_match;
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-23 18:22:21 +01:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_domain_match:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns: the #NMSetting8021x:domain-match property.
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.24
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_domain_match (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->domain_match;
|
|
|
|
|
}
|
|
|
|
|
|
2014-07-24 08:53:33 -04:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_client_cert_scheme:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns the scheme used to store the client certificate. If the returned scheme
|
|
|
|
|
* is %NM_SETTING_802_1X_CK_SCHEME_BLOB, use nm_setting_802_1x_get_client_cert_blob();
|
2016-12-19 12:47:15 +01:00
|
|
|
* if %NM_SETTING_802_1X_CK_SCHEME_PATH, use nm_setting_802_1x_get_client_cert_path();
|
|
|
|
|
* if %NM_SETTING_802_1X_CK_SCHEME_PKCS11, use nm_setting_802_1x_get_client_cert_uri().
|
2014-07-24 08:53:33 -04:00
|
|
|
*
|
|
|
|
|
* Returns: scheme used to store the client certificate (blob or path)
|
|
|
|
|
**/
|
|
|
|
|
NMSetting8021xCKScheme
|
|
|
|
|
nm_setting_802_1x_get_client_cert_scheme (NMSetting8021x *setting)
|
|
|
|
|
{
|
2018-08-31 21:04:17 +02:00
|
|
|
_cert_impl_get_scheme (setting, client_cert);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_client_cert_blob:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Client certificates are used to identify the connecting client to the network
|
|
|
|
|
* when EAP-TLS is used as either the "phase 1" or "phase 2" 802.1x
|
|
|
|
|
* authentication method.
|
|
|
|
|
*
|
2014-11-13 14:14:11 -05:00
|
|
|
* Returns: (transfer none): the client certificate data
|
2014-07-24 08:53:33 -04:00
|
|
|
**/
|
2014-06-26 10:42:11 -04:00
|
|
|
GBytes *
|
2014-07-24 08:53:33 -04:00
|
|
|
nm_setting_802_1x_get_client_cert_blob (NMSetting8021x *setting)
|
|
|
|
|
{
|
2018-08-31 21:04:17 +02:00
|
|
|
_cert_impl_get_blob (setting, client_cert);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_client_cert_path:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Client certificates are used to identify the connecting client to the network
|
|
|
|
|
* when EAP-TLS is used as either the "phase 1" or "phase 2" 802.1x
|
|
|
|
|
* authentication method.
|
|
|
|
|
*
|
|
|
|
|
* Returns: path to the client certificate file
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_client_cert_path (NMSetting8021x *setting)
|
|
|
|
|
{
|
2018-08-31 21:04:17 +02:00
|
|
|
_cert_impl_get_path (setting, client_cert);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
2016-12-19 12:47:15 +01:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_client_cert_uri:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns the client certificate URI analogously to
|
|
|
|
|
* nm_setting_802_1x_get_client_cert_blob() and
|
|
|
|
|
* nm_setting_802_1x_get_client_cert_path().
|
|
|
|
|
*
|
2020-07-01 17:20:40 -04:00
|
|
|
* Currently, it's limited to PKCS#11 URIs ('pkcs11' scheme as defined by RFC
|
2016-12-19 12:47:15 +01:00
|
|
|
* 7512), but may be extended to other schemes in future (such as 'file' URIs
|
|
|
|
|
* for local files and 'data' URIs for inline certificate data).
|
|
|
|
|
*
|
|
|
|
|
* Returns: the URI string
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.6
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_client_cert_uri (NMSetting8021x *setting)
|
|
|
|
|
{
|
2018-08-31 21:04:17 +02:00
|
|
|
_cert_impl_get_uri (setting, client_cert);
|
2016-12-19 12:47:15 +01:00
|
|
|
}
|
|
|
|
|
|
2014-07-24 08:53:33 -04:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_set_client_cert:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
2017-01-06 16:00:11 +01:00
|
|
|
* @value: when @scheme is set to either %NM_SETTING_802_1X_CK_SCHEME_PATH
|
2014-07-24 08:53:33 -04:00
|
|
|
* or %NM_SETTING_802_1X_CK_SCHEME_BLOB, pass the path of the client
|
2014-11-07 12:38:17 -05:00
|
|
|
* certificate file (PEM, DER, or PKCS#<!-- -->12 format). The path must be UTF-8
|
2014-07-24 08:53:33 -04:00
|
|
|
* encoded; use g_filename_to_utf8() to convert if needed. Passing %NULL with
|
|
|
|
|
* any @scheme clears the client certificate.
|
|
|
|
|
* @scheme: desired storage scheme for the certificate
|
|
|
|
|
* @out_format: on successful return, the type of the certificate added
|
|
|
|
|
* @error: on unsuccessful return, an error
|
|
|
|
|
*
|
|
|
|
|
* Reads a certificate from disk and sets the #NMSetting8021x:client-cert
|
|
|
|
|
* property with the raw certificate data if using the
|
|
|
|
|
* %NM_SETTING_802_1X_CK_SCHEME_BLOB scheme, or with the path to the certificate
|
|
|
|
|
* file if using the %NM_SETTING_802_1X_CK_SCHEME_PATH scheme.
|
|
|
|
|
*
|
|
|
|
|
* Client certificates are used to identify the connecting client to the network
|
|
|
|
|
* when EAP-TLS is used as either the "phase 1" or "phase 2" 802.1x
|
|
|
|
|
* authentication method.
|
|
|
|
|
*
|
|
|
|
|
* Returns: %TRUE if the operation succeeded, %FALSE if it was unsuccessful
|
|
|
|
|
**/
|
|
|
|
|
gboolean
|
|
|
|
|
nm_setting_802_1x_set_client_cert (NMSetting8021x *setting,
|
2017-01-06 16:00:11 +01:00
|
|
|
const char *value,
|
2014-07-24 08:53:33 -04:00
|
|
|
NMSetting8021xCKScheme scheme,
|
|
|
|
|
NMSetting8021xCKFormat *out_format,
|
|
|
|
|
GError **error)
|
|
|
|
|
{
|
libnm/802-1x: refactor setting certificate from path
NMSetting8021x has various utility functions to set
the certificate:
- nm_setting_802_1x_set_ca_cert()
- nm_setting_802_1x_set_client_cert()
- nm_setting_802_1x_set_private_key()
- nm_setting_802_1x_set_phase2_ca_cert()
- nm_setting_802_1x_set_phase2_client_cert()
- nm_setting_802_1x_set_phase2_private_key()
They support:
- accepting a plain PKCS11 URI, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_PKCS11.
- accepting a filename, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_BLOB or
NM_SETTING_802_1X_CK_SCHEME_PATH.
In the latter case, the function tries to load the file and verify it.
In case of the private-key setters, this also involves accepting a
password. Depending on whether the scheme is BLOB or PATH, the function
will either set the certificate to a PATH blob, or take the blob that
was read from file.
The functions seem misdesigned to me, because their behavior is
rather obscure. E.g. they behave fundamentally different, depending
on whether scheme is PKCS11 or BLOB/PATH.
Anyway, improve them:
- refactor the common code into a function _cert_impl_set(). Previously,
their non-trivial implementations were copy+pasted several times,
now they all use the same implementation.
- if the function is going to fail, don't touch the setting. Previously,
the functions would first clear the certificate before trying to
validate the input. It's more logical, that if a functions is going
to fail to check for failure first and don't modify the settings.
- not every blob can be represented. For example, if we have a blob
which starts with "file://", then there is no way to set it, simply
because we don't support a prefix for blobs (like "data:;base64,").
This means, if we try to set the certificate to a particular binary,
we must check that the binary is interpreted with the expected scheme.
Add this check.
2018-09-01 18:08:33 +02:00
|
|
|
return _cert_impl_set (setting, PROP_CLIENT_CERT, value, NULL, scheme, out_format, error);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
2017-02-01 12:53:34 +00:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_client_cert_password:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns: the password used to access the client certificate stored in
|
|
|
|
|
* #NMSetting8021x:client-cert property. Only makes sense if the certificate
|
|
|
|
|
* is stored on a PKCS#<!-- -->11 token that requires a login.
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.8
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_client_cert_password (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->client_cert_password;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_client_cert_password_flags:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns: the #NMSettingSecretFlags pertaining to the
|
|
|
|
|
* #NMSetting8021x:client-cert-password
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.8
|
|
|
|
|
**/
|
|
|
|
|
NMSettingSecretFlags
|
|
|
|
|
nm_setting_802_1x_get_client_cert_password_flags (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NM_SETTING_SECRET_FLAG_NONE);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->client_cert_password_flags;
|
|
|
|
|
}
|
|
|
|
|
|
2014-07-24 08:53:33 -04:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_phase1_peapver:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns: the "phase 1" PEAP version to be used when authenticating with
|
|
|
|
|
* EAP-PEAP as contained in the #NMSetting8021x:phase1-peapver property. Valid
|
|
|
|
|
* values are %NULL (unset), "0" (PEAP version 0), and "1" (PEAP version 1).
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_phase1_peapver (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->phase1_peapver;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_phase1_peaplabel:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns: whether the "phase 1" PEAP label is new-style or old-style, to be
|
|
|
|
|
* used when authenticating with EAP-PEAP, as contained in the
|
|
|
|
|
* #NMSetting8021x:phase1-peaplabel property. Valid values are %NULL (unset),
|
|
|
|
|
* "0" (use old-style label), and "1" (use new-style label). See the
|
|
|
|
|
* wpa_supplicant documentation for more details.
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_phase1_peaplabel (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->phase1_peaplabel;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_phase1_fast_provisioning:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns: whether "phase 1" PEAP fast provisioning should be used, as specified
|
|
|
|
|
* by the #NMSetting8021x:phase1-fast-provisioning property. See the
|
|
|
|
|
* wpa_supplicant documentation for more details.
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_phase1_fast_provisioning (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->phase1_fast_provisioning;
|
|
|
|
|
}
|
|
|
|
|
|
2017-02-08 22:02:19 +07:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_phase1_auth_flags:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns: the authentication flags for "phase 1".
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.8
|
|
|
|
|
*/
|
|
|
|
|
NMSetting8021xAuthFlags
|
|
|
|
|
nm_setting_802_1x_get_phase1_auth_flags (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), 0);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->phase1_auth_flags;
|
|
|
|
|
}
|
|
|
|
|
|
2014-07-24 08:53:33 -04:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_phase2_auth:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns: the "phase 2" non-EAP (ex MD5) allowed authentication method as
|
|
|
|
|
* specified by the #NMSetting8021x:phase2-auth property.
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_phase2_auth (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_auth;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_phase2_autheap:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns: the "phase 2" EAP-based (ex TLS) allowed authentication method as
|
|
|
|
|
* specified by the #NMSetting8021x:phase2-autheap property.
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_phase2_autheap (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_autheap;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_phase2_ca_path:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns the path of the "phase 2" CA certificate directory if previously set.
|
|
|
|
|
* Systems will often have a directory that contains multiple individual CA
|
|
|
|
|
* certificates which the supplicant can then add to the verification chain.
|
|
|
|
|
* This may be used in addition to the #NMSetting8021x:phase2-ca-cert property
|
|
|
|
|
* to add more CA certificates for verifying the network to client.
|
|
|
|
|
*
|
|
|
|
|
* Returns: the "phase 2" CA certificate directory path
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_phase2_ca_path (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_ca_path;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_phase2_ca_cert_scheme:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns the scheme used to store the "phase 2" CA certificate. If the
|
|
|
|
|
* returned scheme is %NM_SETTING_802_1X_CK_SCHEME_BLOB, use
|
|
|
|
|
* nm_setting_802_1x_get_ca_cert_blob(); if %NM_SETTING_802_1X_CK_SCHEME_PATH,
|
2016-12-19 12:47:15 +01:00
|
|
|
* use nm_setting_802_1x_get_ca_cert_path(); if %NM_SETTING_802_1X_CK_SCHEME_PKCS11,
|
|
|
|
|
* use nm_setting_802_1x_get_ca_cert_uri().
|
2014-07-24 08:53:33 -04:00
|
|
|
*
|
|
|
|
|
* Returns: scheme used to store the "phase 2" CA certificate (blob or path)
|
|
|
|
|
**/
|
|
|
|
|
NMSetting8021xCKScheme
|
|
|
|
|
nm_setting_802_1x_get_phase2_ca_cert_scheme (NMSetting8021x *setting)
|
|
|
|
|
{
|
2018-08-31 21:04:17 +02:00
|
|
|
_cert_impl_get_scheme (setting, phase2_ca_cert);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_phase2_ca_cert_blob:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns the "phase 2" CA certificate blob if the CA certificate is stored
|
|
|
|
|
* using the %NM_SETTING_802_1X_CK_SCHEME_BLOB scheme. Not all EAP methods use
|
|
|
|
|
* a CA certificate (LEAP for example), and those that can take advantage of the
|
|
|
|
|
* CA certificate allow it to be unset. Note that lack of a CA certificate
|
|
|
|
|
* reduces security by allowing man-in-the-middle attacks, because the identity
|
|
|
|
|
* of the network cannot be confirmed by the client.
|
|
|
|
|
*
|
2014-11-13 14:14:11 -05:00
|
|
|
* Returns: (transfer none): the "phase 2" CA certificate data
|
2014-07-24 08:53:33 -04:00
|
|
|
**/
|
2014-06-26 10:42:11 -04:00
|
|
|
GBytes *
|
2014-07-24 08:53:33 -04:00
|
|
|
nm_setting_802_1x_get_phase2_ca_cert_blob (NMSetting8021x *setting)
|
|
|
|
|
{
|
2018-08-31 21:04:17 +02:00
|
|
|
_cert_impl_get_blob (setting, phase2_ca_cert);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_phase2_ca_cert_path:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns the "phase 2" CA certificate path if the CA certificate is stored
|
|
|
|
|
* using the %NM_SETTING_802_1X_CK_SCHEME_PATH scheme. Not all EAP methods use
|
|
|
|
|
* a CA certificate (LEAP for example), and those that can take advantage of the
|
|
|
|
|
* CA certificate allow it to be unset. Note that lack of a CA certificate
|
|
|
|
|
* reduces security by allowing man-in-the-middle attacks, because the identity
|
|
|
|
|
* of the network cannot be confirmed by the client.
|
|
|
|
|
*
|
|
|
|
|
* Returns: path to the "phase 2" CA certificate file
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_phase2_ca_cert_path (NMSetting8021x *setting)
|
|
|
|
|
{
|
2018-08-31 21:04:17 +02:00
|
|
|
_cert_impl_get_path (setting, phase2_ca_cert);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
2016-12-19 12:47:15 +01:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_phase2_ca_cert_uri:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns the "phase 2" CA certificate URI analogously to
|
|
|
|
|
* nm_setting_802_1x_get_phase2_ca_cert_blob() and
|
|
|
|
|
* nm_setting_802_1x_get_phase2_ca_cert_path().
|
|
|
|
|
*
|
2020-07-01 17:20:40 -04:00
|
|
|
* Currently, it's limited to PKCS#11 URIs ('pkcs11' scheme as defined by RFC
|
2016-12-19 12:47:15 +01:00
|
|
|
* 7512), but may be extended to other schemes in future (such as 'file' URIs
|
|
|
|
|
* for local files and 'data' URIs for inline certificate data).
|
|
|
|
|
*
|
|
|
|
|
* Returns: the URI string
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.6
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_phase2_ca_cert_uri (NMSetting8021x *setting)
|
|
|
|
|
{
|
2018-08-31 21:04:17 +02:00
|
|
|
_cert_impl_get_uri (setting, phase2_ca_cert);
|
2016-12-19 12:47:15 +01:00
|
|
|
}
|
|
|
|
|
|
2014-07-24 08:53:33 -04:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_set_phase2_ca_cert:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
2017-01-06 16:00:11 +01:00
|
|
|
* @value: when @scheme is set to either %NM_SETTING_802_1X_CK_SCHEME_PATH
|
2014-07-24 08:53:33 -04:00
|
|
|
* or %NM_SETTING_802_1X_CK_SCHEME_BLOB, pass the path of the "phase2" CA
|
|
|
|
|
* certificate file (PEM or DER format). The path must be UTF-8 encoded; use
|
|
|
|
|
* g_filename_to_utf8() to convert if needed. Passing %NULL with any @scheme
|
|
|
|
|
* clears the "phase2" CA certificate.
|
|
|
|
|
* @scheme: desired storage scheme for the certificate
|
|
|
|
|
* @out_format: on successful return, the type of the certificate added
|
|
|
|
|
* @error: on unsuccessful return, an error
|
|
|
|
|
*
|
|
|
|
|
* Reads a certificate from disk and sets the #NMSetting8021x:phase2-ca-cert
|
|
|
|
|
* property with the raw certificate data if using the
|
|
|
|
|
* %NM_SETTING_802_1X_CK_SCHEME_BLOB scheme, or with the path to the certificate
|
|
|
|
|
* file if using the %NM_SETTING_802_1X_CK_SCHEME_PATH scheme.
|
|
|
|
|
*
|
|
|
|
|
* Returns: %TRUE if the operation succeeded, %FALSE if it was unsuccessful
|
|
|
|
|
**/
|
|
|
|
|
gboolean
|
|
|
|
|
nm_setting_802_1x_set_phase2_ca_cert (NMSetting8021x *setting,
|
2017-01-06 16:00:11 +01:00
|
|
|
const char *value,
|
2014-07-24 08:53:33 -04:00
|
|
|
NMSetting8021xCKScheme scheme,
|
|
|
|
|
NMSetting8021xCKFormat *out_format,
|
|
|
|
|
GError **error)
|
|
|
|
|
{
|
libnm/802-1x: refactor setting certificate from path
NMSetting8021x has various utility functions to set
the certificate:
- nm_setting_802_1x_set_ca_cert()
- nm_setting_802_1x_set_client_cert()
- nm_setting_802_1x_set_private_key()
- nm_setting_802_1x_set_phase2_ca_cert()
- nm_setting_802_1x_set_phase2_client_cert()
- nm_setting_802_1x_set_phase2_private_key()
They support:
- accepting a plain PKCS11 URI, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_PKCS11.
- accepting a filename, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_BLOB or
NM_SETTING_802_1X_CK_SCHEME_PATH.
In the latter case, the function tries to load the file and verify it.
In case of the private-key setters, this also involves accepting a
password. Depending on whether the scheme is BLOB or PATH, the function
will either set the certificate to a PATH blob, or take the blob that
was read from file.
The functions seem misdesigned to me, because their behavior is
rather obscure. E.g. they behave fundamentally different, depending
on whether scheme is PKCS11 or BLOB/PATH.
Anyway, improve them:
- refactor the common code into a function _cert_impl_set(). Previously,
their non-trivial implementations were copy+pasted several times,
now they all use the same implementation.
- if the function is going to fail, don't touch the setting. Previously,
the functions would first clear the certificate before trying to
validate the input. It's more logical, that if a functions is going
to fail to check for failure first and don't modify the settings.
- not every blob can be represented. For example, if we have a blob
which starts with "file://", then there is no way to set it, simply
because we don't support a prefix for blobs (like "data:;base64,").
This means, if we try to set the certificate to a particular binary,
we must check that the binary is interpreted with the expected scheme.
Add this check.
2018-09-01 18:08:33 +02:00
|
|
|
return _cert_impl_set (setting, PROP_PHASE2_CA_CERT, value, NULL, scheme, out_format, error);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
2017-02-01 12:53:34 +00:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_phase2_ca_cert_password:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns: the password used to access the "phase2" CA certificate stored in
|
|
|
|
|
* #NMSetting8021x:phase2-ca-cert property. Only makes sense if the certificate
|
|
|
|
|
* is stored on a PKCS#<!-- -->11 token that requires a login.
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.8
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_phase2_ca_cert_password (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_ca_cert_password;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_phase2_ca_cert_password_flags:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns: the #NMSettingSecretFlags pertaining to the
|
|
|
|
|
* #NMSetting8021x:phase2-private-key-password
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.8
|
|
|
|
|
**/
|
|
|
|
|
NMSettingSecretFlags
|
|
|
|
|
nm_setting_802_1x_get_phase2_ca_cert_password_flags (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NM_SETTING_SECRET_FLAG_NONE);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_ca_cert_password_flags;
|
|
|
|
|
}
|
|
|
|
|
|
2014-07-24 08:53:33 -04:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_phase2_subject_match:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns: the #NMSetting8021x:phase2-subject-match property. This is
|
|
|
|
|
* the substring to be matched against the subject of the "phase 2"
|
|
|
|
|
* authentication server certificate, or %NULL no subject verification
|
|
|
|
|
* is to be performed.
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_phase2_subject_match (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_subject_match;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_num_phase2_altsubject_matches:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns the number of entries in the
|
|
|
|
|
* #NMSetting8021x:phase2-altsubject-matches property of this setting.
|
|
|
|
|
*
|
|
|
|
|
* Returns: the number of phase2-altsubject-matches entries.
|
|
|
|
|
**/
|
|
|
|
|
guint32
|
|
|
|
|
nm_setting_802_1x_get_num_phase2_altsubject_matches (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), 0);
|
|
|
|
|
|
|
|
|
|
return g_slist_length (NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_altsubject_matches);
|
|
|
|
|
}
|
|
|
|
|
|
2016-03-03 22:42:35 +01:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_phase2_domain_suffix_match:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns: the #NMSetting8021x:phase2-domain-suffix-match property.
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.2
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_phase2_domain_suffix_match (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_domain_suffix_match;
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-23 18:22:21 +01:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_phase2_domain_match:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns: the #NMSetting8021x:phase2-domain-match property.
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.24
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_phase2_domain_match (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_domain_match;
|
|
|
|
|
}
|
|
|
|
|
|
2014-07-24 08:53:33 -04:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_phase2_altsubject_match:
|
|
|
|
|
* @setting: the #NMSettingConnection
|
|
|
|
|
* @i: the zero-based index of the array of "phase 2" altSubjectName matches
|
|
|
|
|
*
|
|
|
|
|
* Returns the "phase 2" altSubjectName match at index @i.
|
|
|
|
|
*
|
|
|
|
|
* Returns: the "phase 2" altSubjectName match at index @i
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_phase2_altsubject_match (NMSetting8021x *setting, guint32 i)
|
|
|
|
|
{
|
|
|
|
|
NMSetting8021xPrivate *priv;
|
|
|
|
|
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
|
|
|
|
|
|
|
|
|
|
priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
|
|
|
|
|
g_return_val_if_fail (i <= g_slist_length (priv->phase2_altsubject_matches), NULL);
|
|
|
|
|
|
|
|
|
|
return (const char *) g_slist_nth_data (priv->phase2_altsubject_matches, i);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_add_phase2_altsubject_match:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
* @phase2_altsubject_match: the "phase 2" altSubjectName to allow for this
|
|
|
|
|
* connection
|
|
|
|
|
*
|
|
|
|
|
* Adds an allowed alternate subject name match for "phase 2". Until
|
|
|
|
|
* at least one match is added, the altSubjectName of the "phase 2"
|
|
|
|
|
* remote authentication server is not verified.
|
|
|
|
|
*
|
|
|
|
|
* Returns: %TRUE if the "phase 2" alternative subject name match was
|
|
|
|
|
* successfully added, %FALSE if it was already allowed.
|
|
|
|
|
**/
|
|
|
|
|
gboolean
|
|
|
|
|
nm_setting_802_1x_add_phase2_altsubject_match (NMSetting8021x *setting,
|
|
|
|
|
const char *phase2_altsubject_match)
|
|
|
|
|
{
|
|
|
|
|
NMSetting8021xPrivate *priv;
|
|
|
|
|
GSList *iter;
|
|
|
|
|
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), FALSE);
|
|
|
|
|
g_return_val_if_fail (phase2_altsubject_match != NULL, FALSE);
|
|
|
|
|
|
|
|
|
|
priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
|
|
|
|
|
for (iter = priv->phase2_altsubject_matches; iter; iter = g_slist_next (iter)) {
|
|
|
|
|
if (!strcmp (phase2_altsubject_match, (char *) iter->data))
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
priv->phase2_altsubject_matches = g_slist_append (priv->phase2_altsubject_matches,
|
|
|
|
|
g_strdup (phase2_altsubject_match));
|
2018-08-31 20:08:48 +02:00
|
|
|
_notify (setting, PROP_PHASE2_ALTSUBJECT_MATCHES);
|
2014-07-24 08:53:33 -04:00
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_remove_phase2_altsubject_match:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
* @i: the index of the "phase 2" altSubjectName match to remove
|
|
|
|
|
*
|
|
|
|
|
* Removes the allowed "phase 2" altSubjectName at the specified index.
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
nm_setting_802_1x_remove_phase2_altsubject_match (NMSetting8021x *setting, guint32 i)
|
|
|
|
|
{
|
|
|
|
|
NMSetting8021xPrivate *priv;
|
|
|
|
|
GSList *elt;
|
|
|
|
|
|
|
|
|
|
g_return_if_fail (NM_IS_SETTING_802_1X (setting));
|
|
|
|
|
|
|
|
|
|
priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
|
|
|
|
|
elt = g_slist_nth (priv->phase2_altsubject_matches, i);
|
|
|
|
|
g_return_if_fail (elt != NULL);
|
|
|
|
|
|
|
|
|
|
g_free (elt->data);
|
|
|
|
|
priv->phase2_altsubject_matches = g_slist_delete_link (priv->phase2_altsubject_matches, elt);
|
2018-08-31 20:08:48 +02:00
|
|
|
_notify (setting, PROP_PHASE2_ALTSUBJECT_MATCHES);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_remove_phase2_altsubject_match_by_value:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
* @phase2_altsubject_match: the "phase 2" altSubjectName to remove
|
|
|
|
|
*
|
|
|
|
|
* Removes the allowed "phase 2" altSubjectName @phase2_altsubject_match.
|
|
|
|
|
*
|
|
|
|
|
* Returns: %TRUE if the alternative subject name match for "phase 2" was found and removed,
|
|
|
|
|
* %FALSE if it was not.
|
|
|
|
|
**/
|
|
|
|
|
gboolean
|
|
|
|
|
nm_setting_802_1x_remove_phase2_altsubject_match_by_value (NMSetting8021x *setting,
|
|
|
|
|
const char *phase2_altsubject_match)
|
|
|
|
|
{
|
|
|
|
|
NMSetting8021xPrivate *priv;
|
|
|
|
|
GSList *iter;
|
|
|
|
|
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), FALSE);
|
|
|
|
|
g_return_val_if_fail (phase2_altsubject_match != NULL, FALSE);
|
|
|
|
|
|
|
|
|
|
priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
|
|
|
|
|
for (iter = priv->phase2_altsubject_matches; iter; iter = g_slist_next (iter)) {
|
|
|
|
|
if (!strcmp (phase2_altsubject_match, (char *) iter->data)) {
|
|
|
|
|
priv->phase2_altsubject_matches = g_slist_delete_link (priv->phase2_altsubject_matches, iter);
|
2018-08-31 20:08:48 +02:00
|
|
|
_notify (setting, PROP_PHASE2_ALTSUBJECT_MATCHES);
|
2014-07-24 08:53:33 -04:00
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_clear_phase2_altsubject_matches:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Clears all "phase 2" altSubjectName matches.
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
nm_setting_802_1x_clear_phase2_altsubject_matches (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
NMSetting8021xPrivate *priv;
|
|
|
|
|
|
|
|
|
|
g_return_if_fail (NM_IS_SETTING_802_1X (setting));
|
|
|
|
|
|
|
|
|
|
priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
|
|
|
|
|
g_slist_free_full (priv->phase2_altsubject_matches, g_free);
|
|
|
|
|
priv->phase2_altsubject_matches = NULL;
|
2018-08-31 20:08:48 +02:00
|
|
|
_notify (setting, PROP_PHASE2_ALTSUBJECT_MATCHES);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_phase2_client_cert_scheme:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns the scheme used to store the "phase 2" client certificate. If the
|
|
|
|
|
* returned scheme is %NM_SETTING_802_1X_CK_SCHEME_BLOB, use
|
|
|
|
|
* nm_setting_802_1x_get_client_cert_blob(); if
|
|
|
|
|
* %NM_SETTING_802_1X_CK_SCHEME_PATH, use
|
2016-12-19 12:47:15 +01:00
|
|
|
* nm_setting_802_1x_get_client_cert_path(); if
|
|
|
|
|
* %NM_SETTING_802_1X_CK_SCHEME_PKCS11, use
|
|
|
|
|
* nm_setting_802_1x_get_client_cert_uri().
|
2014-07-24 08:53:33 -04:00
|
|
|
*
|
|
|
|
|
* Returns: scheme used to store the "phase 2" client certificate (blob or path)
|
|
|
|
|
**/
|
|
|
|
|
NMSetting8021xCKScheme
|
|
|
|
|
nm_setting_802_1x_get_phase2_client_cert_scheme (NMSetting8021x *setting)
|
|
|
|
|
{
|
2018-08-31 21:04:17 +02:00
|
|
|
_cert_impl_get_scheme (setting, phase2_client_cert);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_phase2_client_cert_blob:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Client certificates are used to identify the connecting client to the network
|
|
|
|
|
* when EAP-TLS is used as either the "phase 1" or "phase 2" 802.1x
|
|
|
|
|
* authentication method.
|
|
|
|
|
*
|
2014-11-13 14:14:11 -05:00
|
|
|
* Returns: (transfer none): the "phase 2" client certificate data
|
2014-07-24 08:53:33 -04:00
|
|
|
**/
|
2014-06-26 10:42:11 -04:00
|
|
|
GBytes *
|
2014-07-24 08:53:33 -04:00
|
|
|
nm_setting_802_1x_get_phase2_client_cert_blob (NMSetting8021x *setting)
|
|
|
|
|
{
|
2018-08-31 21:04:17 +02:00
|
|
|
_cert_impl_get_blob (setting, phase2_client_cert);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_phase2_client_cert_path:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Client certificates are used to identify the connecting client to the network
|
|
|
|
|
* when EAP-TLS is used as either the "phase 1" or "phase 2" 802.1x
|
|
|
|
|
* authentication method.
|
|
|
|
|
*
|
|
|
|
|
* Returns: path to the "phase 2" client certificate file
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_phase2_client_cert_path (NMSetting8021x *setting)
|
|
|
|
|
{
|
2018-08-31 21:04:17 +02:00
|
|
|
_cert_impl_get_path (setting, phase2_client_cert);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
2016-12-19 12:47:15 +01:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_phase2_client_cert_uri:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns the "phase 2" client certificate URI analogously to
|
|
|
|
|
* nm_setting_802_1x_get_phase2_ca_cert_blob() and
|
|
|
|
|
* nm_setting_802_1x_get_phase2_ca_cert_path().
|
|
|
|
|
*
|
2020-07-01 17:20:40 -04:00
|
|
|
* Currently, it's limited to PKCS#11 URIs ('pkcs11' scheme as defined by RFC
|
2016-12-19 12:47:15 +01:00
|
|
|
* 7512), but may be extended to other schemes in future (such as 'file' URIs
|
|
|
|
|
* for local files and 'data' URIs for inline certificate data).
|
|
|
|
|
*
|
|
|
|
|
* Returns: the URI string
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.6
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_phase2_client_cert_uri (NMSetting8021x *setting)
|
|
|
|
|
{
|
2018-08-31 21:04:17 +02:00
|
|
|
_cert_impl_get_uri (setting, phase2_client_cert);
|
2016-12-19 12:47:15 +01:00
|
|
|
}
|
|
|
|
|
|
2014-07-24 08:53:33 -04:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_set_phase2_client_cert:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
2017-01-06 16:00:11 +01:00
|
|
|
* @value: when @scheme is set to either %NM_SETTING_802_1X_CK_SCHEME_PATH
|
2014-07-24 08:53:33 -04:00
|
|
|
* or %NM_SETTING_802_1X_CK_SCHEME_BLOB, pass the path of the "phase2" client
|
2014-11-07 12:38:17 -05:00
|
|
|
* certificate file (PEM, DER, or PKCS#<!-- -->12 format). The path must be UTF-8
|
2014-07-24 08:53:33 -04:00
|
|
|
* encoded; use g_filename_to_utf8() to convert if needed. Passing %NULL with
|
|
|
|
|
* any @scheme clears the "phase2" client certificate.
|
|
|
|
|
* @scheme: desired storage scheme for the certificate
|
|
|
|
|
* @out_format: on successful return, the type of the certificate added
|
|
|
|
|
* @error: on unsuccessful return, an error
|
|
|
|
|
*
|
|
|
|
|
* Reads a certificate from disk and sets the #NMSetting8021x:phase2-client-cert
|
|
|
|
|
* property with the raw certificate data if using the
|
|
|
|
|
* %NM_SETTING_802_1X_CK_SCHEME_BLOB scheme, or with the path to the certificate
|
|
|
|
|
* file if using the %NM_SETTING_802_1X_CK_SCHEME_PATH scheme.
|
|
|
|
|
*
|
|
|
|
|
* Client certificates are used to identify the connecting client to the network
|
|
|
|
|
* when EAP-TLS is used as either the "phase 1" or "phase 2" 802.1x
|
|
|
|
|
* authentication method.
|
|
|
|
|
*
|
|
|
|
|
* Returns: %TRUE if the operation succeeded, %FALSE if it was unsuccessful
|
|
|
|
|
**/
|
|
|
|
|
gboolean
|
|
|
|
|
nm_setting_802_1x_set_phase2_client_cert (NMSetting8021x *setting,
|
2017-01-06 16:00:11 +01:00
|
|
|
const char *value,
|
2014-07-24 08:53:33 -04:00
|
|
|
NMSetting8021xCKScheme scheme,
|
|
|
|
|
NMSetting8021xCKFormat *out_format,
|
|
|
|
|
GError **error)
|
|
|
|
|
{
|
libnm/802-1x: refactor setting certificate from path
NMSetting8021x has various utility functions to set
the certificate:
- nm_setting_802_1x_set_ca_cert()
- nm_setting_802_1x_set_client_cert()
- nm_setting_802_1x_set_private_key()
- nm_setting_802_1x_set_phase2_ca_cert()
- nm_setting_802_1x_set_phase2_client_cert()
- nm_setting_802_1x_set_phase2_private_key()
They support:
- accepting a plain PKCS11 URI, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_PKCS11.
- accepting a filename, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_BLOB or
NM_SETTING_802_1X_CK_SCHEME_PATH.
In the latter case, the function tries to load the file and verify it.
In case of the private-key setters, this also involves accepting a
password. Depending on whether the scheme is BLOB or PATH, the function
will either set the certificate to a PATH blob, or take the blob that
was read from file.
The functions seem misdesigned to me, because their behavior is
rather obscure. E.g. they behave fundamentally different, depending
on whether scheme is PKCS11 or BLOB/PATH.
Anyway, improve them:
- refactor the common code into a function _cert_impl_set(). Previously,
their non-trivial implementations were copy+pasted several times,
now they all use the same implementation.
- if the function is going to fail, don't touch the setting. Previously,
the functions would first clear the certificate before trying to
validate the input. It's more logical, that if a functions is going
to fail to check for failure first and don't modify the settings.
- not every blob can be represented. For example, if we have a blob
which starts with "file://", then there is no way to set it, simply
because we don't support a prefix for blobs (like "data:;base64,").
This means, if we try to set the certificate to a particular binary,
we must check that the binary is interpreted with the expected scheme.
Add this check.
2018-09-01 18:08:33 +02:00
|
|
|
return _cert_impl_set (setting, PROP_PHASE2_CLIENT_CERT, value, NULL, scheme, out_format, error);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
2017-02-01 12:53:34 +00:00
|
|
|
/**
|
2017-02-22 13:57:29 +01:00
|
|
|
* nm_setting_802_1x_get_phase2_client_cert_password:
|
2017-02-01 12:53:34 +00:00
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns: the password used to access the "phase2" client certificate stored in
|
|
|
|
|
* #NMSetting8021x:phase2-client-cert property. Only makes sense if the certificate
|
|
|
|
|
* is stored on a PKCS#<!-- -->11 token that requires a login.
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.8
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_phase2_client_cert_password (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_client_cert_password;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_phase2_client_cert_password_flags:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns: the #NMSettingSecretFlags pertaining to the
|
|
|
|
|
* #NMSetting8021x:phase2-client-cert-password
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.8
|
|
|
|
|
**/
|
|
|
|
|
NMSettingSecretFlags
|
|
|
|
|
nm_setting_802_1x_get_phase2_client_cert_password_flags (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NM_SETTING_SECRET_FLAG_NONE);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_client_cert_password_flags;
|
|
|
|
|
}
|
|
|
|
|
|
2014-07-24 08:53:33 -04:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_password:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns: the password used by the authentication method, if any, as specified
|
|
|
|
|
* by the #NMSetting8021x:password property
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_password (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->password;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_password_flags:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns: the #NMSettingSecretFlags pertaining to the #NMSetting8021x:password
|
|
|
|
|
**/
|
|
|
|
|
NMSettingSecretFlags
|
|
|
|
|
nm_setting_802_1x_get_password_flags (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NM_SETTING_SECRET_FLAG_NONE);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->password_flags;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_password_raw:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
2014-11-13 14:14:11 -05:00
|
|
|
* Returns: (transfer none): the password used by the authentication method as a
|
2014-07-24 08:53:33 -04:00
|
|
|
* UTF-8-encoded array of bytes, as specified by the
|
|
|
|
|
* #NMSetting8021x:password-raw property
|
|
|
|
|
**/
|
2014-06-26 10:42:11 -04:00
|
|
|
GBytes *
|
2014-07-24 08:53:33 -04:00
|
|
|
nm_setting_802_1x_get_password_raw (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->password_raw;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_password_raw_flags:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns: the #NMSettingSecretFlags pertaining to the
|
|
|
|
|
* #NMSetting8021x:password-raw
|
|
|
|
|
**/
|
|
|
|
|
NMSettingSecretFlags
|
|
|
|
|
nm_setting_802_1x_get_password_raw_flags (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NM_SETTING_SECRET_FLAG_NONE);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->password_raw_flags;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_pin:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns: the PIN used by the authentication method, if any, as specified
|
|
|
|
|
* by the #NMSetting8021x:pin property
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_pin (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->pin;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_pin_flags:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns: the #NMSettingSecretFlags pertaining to the
|
|
|
|
|
* #NMSetting8021x:pin
|
|
|
|
|
**/
|
|
|
|
|
NMSettingSecretFlags
|
|
|
|
|
nm_setting_802_1x_get_pin_flags (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NM_SETTING_SECRET_FLAG_NONE);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->pin_flags;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_private_key_scheme:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns the scheme used to store the private key. If the returned scheme is
|
|
|
|
|
* %NM_SETTING_802_1X_CK_SCHEME_BLOB, use
|
|
|
|
|
* nm_setting_802_1x_get_client_cert_blob(); if
|
|
|
|
|
* %NM_SETTING_802_1X_CK_SCHEME_PATH, use
|
2016-12-19 12:47:15 +01:00
|
|
|
* nm_setting_802_1x_get_client_cert_path(); if
|
|
|
|
|
* %NM_SETTING_802_1X_CK_SCHEME_PKCS11, use
|
|
|
|
|
* nm_setting_802_1x_get_client_cert_uri().
|
2014-07-24 08:53:33 -04:00
|
|
|
*
|
|
|
|
|
* Returns: scheme used to store the private key (blob or path)
|
|
|
|
|
**/
|
|
|
|
|
NMSetting8021xCKScheme
|
|
|
|
|
nm_setting_802_1x_get_private_key_scheme (NMSetting8021x *setting)
|
|
|
|
|
{
|
2018-08-31 21:04:17 +02:00
|
|
|
_cert_impl_get_scheme (setting, private_key);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_private_key_blob:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Private keys are used to authenticate the connecting client to the network
|
|
|
|
|
* when EAP-TLS is used as either the "phase 1" or "phase 2" 802.1x
|
|
|
|
|
* authentication method.
|
|
|
|
|
*
|
|
|
|
|
* WARNING: the private key property is not a "secret" property, and thus
|
|
|
|
|
* unencrypted private key data may be readable by unprivileged users. Private
|
|
|
|
|
* keys should always be encrypted with a private key password.
|
|
|
|
|
*
|
2014-11-13 14:14:11 -05:00
|
|
|
* Returns: (transfer none): the private key data
|
2014-07-24 08:53:33 -04:00
|
|
|
**/
|
2014-06-26 10:42:11 -04:00
|
|
|
GBytes *
|
2014-07-24 08:53:33 -04:00
|
|
|
nm_setting_802_1x_get_private_key_blob (NMSetting8021x *setting)
|
|
|
|
|
{
|
2018-08-31 21:04:17 +02:00
|
|
|
_cert_impl_get_blob (setting, private_key);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_private_key_path:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Private keys are used to authenticate the connecting client to the network
|
|
|
|
|
* when EAP-TLS is used as either the "phase 1" or "phase 2" 802.1x
|
|
|
|
|
* authentication method.
|
|
|
|
|
*
|
|
|
|
|
* Returns: path to the private key file
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_private_key_path (NMSetting8021x *setting)
|
|
|
|
|
{
|
2018-08-31 21:04:17 +02:00
|
|
|
_cert_impl_get_path (setting, private_key);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
2016-12-19 12:47:15 +01:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_private_key_uri:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns the private key URI analogously to
|
|
|
|
|
* nm_setting_802_1x_get_private_key_blob() and
|
|
|
|
|
* nm_setting_802_1x_get_private_key_path().
|
|
|
|
|
*
|
2020-07-01 17:20:40 -04:00
|
|
|
* Currently, it's limited to PKCS#11 URIs ('pkcs11' scheme as defined by RFC
|
2016-12-19 12:47:15 +01:00
|
|
|
* 7512), but may be extended to other schemes in future (such as 'file' URIs
|
|
|
|
|
* for local files and 'data' URIs for inline certificate data).
|
|
|
|
|
*
|
|
|
|
|
* Returns: the URI string
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.6
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_private_key_uri (NMSetting8021x *setting)
|
|
|
|
|
{
|
2018-08-31 21:04:17 +02:00
|
|
|
_cert_impl_get_uri (setting, private_key);
|
2016-12-19 12:47:15 +01:00
|
|
|
}
|
|
|
|
|
|
2014-07-24 08:53:33 -04:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_set_private_key:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
2017-01-06 16:00:11 +01:00
|
|
|
* @value: when @scheme is set to either %NM_SETTING_802_1X_CK_SCHEME_PATH or
|
2014-07-24 08:53:33 -04:00
|
|
|
* %NM_SETTING_802_1X_CK_SCHEME_BLOB, pass the path of the private key file
|
2014-11-07 12:38:17 -05:00
|
|
|
* (PEM, DER, or PKCS#<!-- -->12 format). The path must be UTF-8 encoded; use
|
2014-07-24 08:53:33 -04:00
|
|
|
* g_filename_to_utf8() to convert if needed. Passing %NULL with any @scheme
|
|
|
|
|
* clears the private key.
|
|
|
|
|
* @password: password used to decrypt the private key, or %NULL if the password
|
|
|
|
|
* is unknown. If the password is given but fails to decrypt the private key,
|
|
|
|
|
* an error is returned.
|
|
|
|
|
* @scheme: desired storage scheme for the private key
|
|
|
|
|
* @out_format: on successful return, the type of the private key added
|
|
|
|
|
* @error: on unsuccessful return, an error
|
|
|
|
|
*
|
|
|
|
|
* Private keys are used to authenticate the connecting client to the network
|
|
|
|
|
* when EAP-TLS is used as either the "phase 1" or "phase 2" 802.1x
|
|
|
|
|
* authentication method.
|
|
|
|
|
*
|
|
|
|
|
* This function reads a private key from disk and sets the
|
|
|
|
|
* #NMSetting8021x:private-key property with the private key file data if using
|
|
|
|
|
* the %NM_SETTING_802_1X_CK_SCHEME_BLOB scheme, or with the path to the private
|
|
|
|
|
* key file if using the %NM_SETTING_802_1X_CK_SCHEME_PATH scheme.
|
|
|
|
|
*
|
|
|
|
|
* If @password is given, this function attempts to decrypt the private key to
|
|
|
|
|
* verify that @password is correct, and if it is, updates the
|
|
|
|
|
* #NMSetting8021x:private-key-password property with the given @password. If
|
|
|
|
|
* the decryption is unsuccessful, %FALSE is returned, @error is set, and no
|
|
|
|
|
* internal data is changed. If no @password is given, the private key is
|
|
|
|
|
* assumed to be valid, no decryption is performed, and the password may be set
|
|
|
|
|
* at a later time.
|
|
|
|
|
*
|
|
|
|
|
* WARNING: the private key property is not a "secret" property, and thus
|
|
|
|
|
* unencrypted private key data using the BLOB scheme may be readable by
|
|
|
|
|
* unprivileged users. Private keys should always be encrypted with a private
|
|
|
|
|
* key password to prevent unauthorized access to unencrypted private key data.
|
|
|
|
|
*
|
|
|
|
|
* Returns: %TRUE if the operation succeeded, %FALSE if it was unsuccessful
|
|
|
|
|
**/
|
|
|
|
|
gboolean
|
|
|
|
|
nm_setting_802_1x_set_private_key (NMSetting8021x *setting,
|
2016-12-22 17:02:20 +00:00
|
|
|
const char *value,
|
2014-07-24 08:53:33 -04:00
|
|
|
const char *password,
|
|
|
|
|
NMSetting8021xCKScheme scheme,
|
|
|
|
|
NMSetting8021xCKFormat *out_format,
|
|
|
|
|
GError **error)
|
|
|
|
|
{
|
libnm/802-1x: refactor setting certificate from path
NMSetting8021x has various utility functions to set
the certificate:
- nm_setting_802_1x_set_ca_cert()
- nm_setting_802_1x_set_client_cert()
- nm_setting_802_1x_set_private_key()
- nm_setting_802_1x_set_phase2_ca_cert()
- nm_setting_802_1x_set_phase2_client_cert()
- nm_setting_802_1x_set_phase2_private_key()
They support:
- accepting a plain PKCS11 URI, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_PKCS11.
- accepting a filename, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_BLOB or
NM_SETTING_802_1X_CK_SCHEME_PATH.
In the latter case, the function tries to load the file and verify it.
In case of the private-key setters, this also involves accepting a
password. Depending on whether the scheme is BLOB or PATH, the function
will either set the certificate to a PATH blob, or take the blob that
was read from file.
The functions seem misdesigned to me, because their behavior is
rather obscure. E.g. they behave fundamentally different, depending
on whether scheme is PKCS11 or BLOB/PATH.
Anyway, improve them:
- refactor the common code into a function _cert_impl_set(). Previously,
their non-trivial implementations were copy+pasted several times,
now they all use the same implementation.
- if the function is going to fail, don't touch the setting. Previously,
the functions would first clear the certificate before trying to
validate the input. It's more logical, that if a functions is going
to fail to check for failure first and don't modify the settings.
- not every blob can be represented. For example, if we have a blob
which starts with "file://", then there is no way to set it, simply
because we don't support a prefix for blobs (like "data:;base64,").
This means, if we try to set the certificate to a particular binary,
we must check that the binary is interpreted with the expected scheme.
Add this check.
2018-09-01 18:08:33 +02:00
|
|
|
return _cert_impl_set (setting, PROP_PRIVATE_KEY, value, password, scheme, out_format, error);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_private_key_password:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns: the private key password used to decrypt the private key if
|
|
|
|
|
* previously set with nm_setting_802_1x_set_private_key(), or the
|
|
|
|
|
* #NMSetting8021x:private-key-password property.
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_private_key_password (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->private_key_password;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_private_key_password_flags:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns: the #NMSettingSecretFlags pertaining to the
|
|
|
|
|
* #NMSetting8021x:private-key-password
|
|
|
|
|
**/
|
|
|
|
|
NMSettingSecretFlags
|
|
|
|
|
nm_setting_802_1x_get_private_key_password_flags (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NM_SETTING_SECRET_FLAG_NONE);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->private_key_password_flags;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_private_key_format:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns: the data format of the private key data stored in the
|
|
|
|
|
* #NMSetting8021x:private-key property
|
|
|
|
|
**/
|
|
|
|
|
NMSetting8021xCKFormat
|
|
|
|
|
nm_setting_802_1x_get_private_key_format (NMSetting8021x *setting)
|
|
|
|
|
{
|
2018-09-03 16:33:28 +02:00
|
|
|
return _cert_impl_get_key_format (setting, private_key);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_phase2_private_key_password:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns: the private key password used to decrypt the private key if
|
|
|
|
|
* previously set with nm_setting_802_1x_set_phase2_private_key() or the
|
|
|
|
|
* #NMSetting8021x:phase2-private-key-password property.
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_phase2_private_key_password (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_private_key_password;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_phase2_private_key_password_flags:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns: the #NMSettingSecretFlags pertaining to the
|
|
|
|
|
* #NMSetting8021x:phase2-private-key-password
|
|
|
|
|
**/
|
|
|
|
|
NMSettingSecretFlags
|
|
|
|
|
nm_setting_802_1x_get_phase2_private_key_password_flags (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NM_SETTING_SECRET_FLAG_NONE);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_private_key_password_flags;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_phase2_private_key_scheme:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns the scheme used to store the "phase 2" private key. If the returned
|
|
|
|
|
* scheme is %NM_SETTING_802_1X_CK_SCHEME_BLOB, use
|
|
|
|
|
* nm_setting_802_1x_get_client_cert_blob(); if
|
|
|
|
|
* %NM_SETTING_802_1X_CK_SCHEME_PATH, use
|
2016-12-19 12:47:15 +01:00
|
|
|
* nm_setting_802_1x_get_client_cert_path(); if
|
|
|
|
|
* %NM_SETTING_802_1X_CK_SCHEME_PKCS11, use
|
|
|
|
|
* nm_setting_802_1x_get_client_cert_uri().
|
2014-07-24 08:53:33 -04:00
|
|
|
*
|
|
|
|
|
* Returns: scheme used to store the "phase 2" private key (blob or path)
|
|
|
|
|
**/
|
|
|
|
|
NMSetting8021xCKScheme
|
|
|
|
|
nm_setting_802_1x_get_phase2_private_key_scheme (NMSetting8021x *setting)
|
|
|
|
|
{
|
2018-08-31 21:04:17 +02:00
|
|
|
_cert_impl_get_scheme (setting, phase2_private_key);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_phase2_private_key_blob:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Private keys are used to authenticate the connecting client to the network
|
|
|
|
|
* when EAP-TLS is used as either the "phase 1" or "phase 2" 802.1x
|
|
|
|
|
* authentication method.
|
|
|
|
|
*
|
|
|
|
|
* WARNING: the phase2 private key property is not a "secret" property, and thus
|
|
|
|
|
* unencrypted private key data may be readable by unprivileged users. Private
|
|
|
|
|
* keys should always be encrypted with a private key password.
|
|
|
|
|
*
|
2014-11-13 14:14:11 -05:00
|
|
|
* Returns: (transfer none): the "phase 2" private key data
|
2014-07-24 08:53:33 -04:00
|
|
|
**/
|
2014-06-26 10:42:11 -04:00
|
|
|
GBytes *
|
2014-07-24 08:53:33 -04:00
|
|
|
nm_setting_802_1x_get_phase2_private_key_blob (NMSetting8021x *setting)
|
|
|
|
|
{
|
2018-08-31 21:04:17 +02:00
|
|
|
_cert_impl_get_blob (setting, phase2_private_key);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_phase2_private_key_path:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Private keys are used to authenticate the connecting client to the network
|
|
|
|
|
* when EAP-TLS is used as either the "phase 1" or "phase 2" 802.1x
|
|
|
|
|
* authentication method.
|
|
|
|
|
*
|
|
|
|
|
* Returns: path to the "phase 2" private key file
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_phase2_private_key_path (NMSetting8021x *setting)
|
|
|
|
|
{
|
2018-08-31 21:04:17 +02:00
|
|
|
_cert_impl_get_path (setting, phase2_private_key);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
2016-12-19 12:47:15 +01:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_phase2_private_key_uri:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns the "phase 2" private key URI analogously to
|
|
|
|
|
* nm_setting_802_1x_get_phase2_private_key_blob() and
|
|
|
|
|
* nm_setting_802_1x_get_phase2_private_key_path().
|
|
|
|
|
*
|
2020-07-01 17:20:40 -04:00
|
|
|
* Currently, it's limited to PKCS#11 URIs ('pkcs11' scheme as defined by RFC
|
2016-12-19 12:47:15 +01:00
|
|
|
* 7512), but may be extended to other schemes in future (such as 'file' URIs
|
|
|
|
|
* for local files and 'data' URIs for inline certificate data).
|
|
|
|
|
*
|
|
|
|
|
* Returns: the URI string
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.6
|
|
|
|
|
**/
|
|
|
|
|
const char *
|
|
|
|
|
nm_setting_802_1x_get_phase2_private_key_uri (NMSetting8021x *setting)
|
|
|
|
|
{
|
2018-08-31 21:04:17 +02:00
|
|
|
_cert_impl_get_uri (setting, phase2_private_key);
|
2016-12-19 12:47:15 +01:00
|
|
|
}
|
|
|
|
|
|
2014-07-24 08:53:33 -04:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_set_phase2_private_key:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
2017-01-06 16:00:11 +01:00
|
|
|
* @value: when @scheme is set to either %NM_SETTING_802_1X_CK_SCHEME_PATH or
|
2014-07-24 08:53:33 -04:00
|
|
|
* %NM_SETTING_802_1X_CK_SCHEME_BLOB, pass the path of the "phase2" private
|
2014-11-07 12:38:17 -05:00
|
|
|
* key file (PEM, DER, or PKCS#<!-- -->12 format). The path must be UTF-8 encoded;
|
2014-07-24 08:53:33 -04:00
|
|
|
* use g_filename_to_utf8() to convert if needed. Passing %NULL with any
|
|
|
|
|
* @scheme clears the private key.
|
|
|
|
|
* @password: password used to decrypt the private key, or %NULL if the password
|
|
|
|
|
* is unknown. If the password is given but fails to decrypt the private key,
|
|
|
|
|
* an error is returned.
|
|
|
|
|
* @scheme: desired storage scheme for the private key
|
|
|
|
|
* @out_format: on successful return, the type of the private key added
|
|
|
|
|
* @error: on unsuccessful return, an error
|
|
|
|
|
*
|
|
|
|
|
* Private keys are used to authenticate the connecting client to the network
|
|
|
|
|
* when EAP-TLS is used as either the "phase 1" or "phase 2" 802.1x
|
|
|
|
|
* authentication method.
|
|
|
|
|
*
|
|
|
|
|
* This function reads a private key from disk and sets the
|
|
|
|
|
* #NMSetting8021x:phase2-private-key property with the private key file data if
|
|
|
|
|
* using the %NM_SETTING_802_1X_CK_SCHEME_BLOB scheme, or with the path to the
|
|
|
|
|
* private key file if using the %NM_SETTING_802_1X_CK_SCHEME_PATH scheme.
|
|
|
|
|
*
|
|
|
|
|
* If @password is given, this function attempts to decrypt the private key to
|
|
|
|
|
* verify that @password is correct, and if it is, updates the
|
|
|
|
|
* #NMSetting8021x:phase2-private-key-password property with the given
|
|
|
|
|
* @password. If the decryption is unsuccessful, %FALSE is returned, @error is
|
|
|
|
|
* set, and no internal data is changed. If no @password is given, the private
|
|
|
|
|
* key is assumed to be valid, no decryption is performed, and the password may
|
|
|
|
|
* be set at a later time.
|
|
|
|
|
*
|
|
|
|
|
* WARNING: the "phase2" private key property is not a "secret" property, and
|
|
|
|
|
* thus unencrypted private key data using the BLOB scheme may be readable by
|
|
|
|
|
* unprivileged users. Private keys should always be encrypted with a private
|
|
|
|
|
* key password to prevent unauthorized access to unencrypted private key data.
|
|
|
|
|
*
|
|
|
|
|
* Returns: %TRUE if the operation succeeded, %FALSE if it was unsuccessful
|
|
|
|
|
**/
|
|
|
|
|
gboolean
|
|
|
|
|
nm_setting_802_1x_set_phase2_private_key (NMSetting8021x *setting,
|
2017-01-06 16:00:11 +01:00
|
|
|
const char *value,
|
2014-07-24 08:53:33 -04:00
|
|
|
const char *password,
|
|
|
|
|
NMSetting8021xCKScheme scheme,
|
|
|
|
|
NMSetting8021xCKFormat *out_format,
|
|
|
|
|
GError **error)
|
|
|
|
|
{
|
libnm/802-1x: refactor setting certificate from path
NMSetting8021x has various utility functions to set
the certificate:
- nm_setting_802_1x_set_ca_cert()
- nm_setting_802_1x_set_client_cert()
- nm_setting_802_1x_set_private_key()
- nm_setting_802_1x_set_phase2_ca_cert()
- nm_setting_802_1x_set_phase2_client_cert()
- nm_setting_802_1x_set_phase2_private_key()
They support:
- accepting a plain PKCS11 URI, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_PKCS11.
- accepting a filename, with scheme set to
NM_SETTING_802_1X_CK_SCHEME_BLOB or
NM_SETTING_802_1X_CK_SCHEME_PATH.
In the latter case, the function tries to load the file and verify it.
In case of the private-key setters, this also involves accepting a
password. Depending on whether the scheme is BLOB or PATH, the function
will either set the certificate to a PATH blob, or take the blob that
was read from file.
The functions seem misdesigned to me, because their behavior is
rather obscure. E.g. they behave fundamentally different, depending
on whether scheme is PKCS11 or BLOB/PATH.
Anyway, improve them:
- refactor the common code into a function _cert_impl_set(). Previously,
their non-trivial implementations were copy+pasted several times,
now they all use the same implementation.
- if the function is going to fail, don't touch the setting. Previously,
the functions would first clear the certificate before trying to
validate the input. It's more logical, that if a functions is going
to fail to check for failure first and don't modify the settings.
- not every blob can be represented. For example, if we have a blob
which starts with "file://", then there is no way to set it, simply
because we don't support a prefix for blobs (like "data:;base64,").
This means, if we try to set the certificate to a particular binary,
we must check that the binary is interpreted with the expected scheme.
Add this check.
2018-09-01 18:08:33 +02:00
|
|
|
return _cert_impl_set (setting, PROP_PHASE2_PRIVATE_KEY, value, password, scheme, out_format, error);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_phase2_private_key_format:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns: the data format of the "phase 2" private key data stored in the
|
|
|
|
|
* #NMSetting8021x:phase2-private-key property
|
|
|
|
|
**/
|
|
|
|
|
NMSetting8021xCKFormat
|
|
|
|
|
nm_setting_802_1x_get_phase2_private_key_format (NMSetting8021x *setting)
|
|
|
|
|
{
|
2018-09-03 16:33:28 +02:00
|
|
|
return _cert_impl_get_key_format (setting, phase2_private_key);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
2017-01-19 17:25:19 +01:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_auth_timeout:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns the value contained in the #NMSetting8021x:auth-timeout property.
|
|
|
|
|
*
|
|
|
|
|
* Returns: the configured authentication timeout in seconds. Zero means the
|
|
|
|
|
* global default value.
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.8
|
|
|
|
|
**/
|
all: don't use gchar/gshort/gint/glong but C types
We commonly don't use the glib typedefs for char/short/int/long,
but their C types directly.
$ git grep '\<g\(char\|short\|int\|long\|float\|double\)\>' | wc -l
587
$ git grep '\<\(char\|short\|int\|long\|float\|double\)\>' | wc -l
21114
One could argue that using the glib typedefs is preferable in
public API (of our glib based libnm library) or where it clearly
is related to glib, like during
g_object_set (obj, PROPERTY, (gint) value, NULL);
However, that argument does not seem strong, because in practice we don't
follow that argument today, and seldomly use the glib typedefs.
Also, the style guide for this would be hard to formalize, because
"using them where clearly related to a glib" is a very loose suggestion.
Also note that glib typedefs will always just be typedefs of the
underlying C types. There is no danger of glib changing the meaning
of these typedefs (because that would be a major API break of glib).
A simple style guide is instead: don't use these typedefs.
No manual actions, I only ran the bash script:
FILES=($(git ls-files '*.[hc]'))
sed -i \
-e 's/\<g\(char\|short\|int\|long\|float\|double\)\>\( [^ ]\)/\1\2/g' \
-e 's/\<g\(char\|short\|int\|long\|float\|double\)\> /\1 /g' \
-e 's/\<g\(char\|short\|int\|long\|float\|double\)\>/\1/g' \
"${FILES[@]}"
2018-07-11 07:40:19 +02:00
|
|
|
int
|
2017-01-19 17:25:19 +01:00
|
|
|
nm_setting_802_1x_get_auth_timeout (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), 0);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->auth_timeout;
|
|
|
|
|
}
|
|
|
|
|
|
2019-07-11 15:52:03 +02:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_get_optional:
|
|
|
|
|
* @setting: the #NMSetting8021x
|
|
|
|
|
*
|
|
|
|
|
* Returns the value contained in the #NMSetting8021x:optional property.
|
|
|
|
|
*
|
|
|
|
|
* Returns: %TRUE if the activation should proceed even when the 802.1X
|
|
|
|
|
* authentication fails; %FALSE otherwise
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.22
|
|
|
|
|
**/
|
|
|
|
|
gboolean
|
|
|
|
|
nm_setting_802_1x_get_optional (NMSetting8021x *setting)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), FALSE);
|
|
|
|
|
|
|
|
|
|
return NM_SETTING_802_1X_GET_PRIVATE (setting)->optional;
|
|
|
|
|
}
|
|
|
|
|
|
2018-08-31 20:13:39 +02:00
|
|
|
/*****************************************************************************/
|
|
|
|
|
|
2014-07-24 08:53:33 -04:00
|
|
|
static void
|
|
|
|
|
need_secrets_password (NMSetting8021x *self,
|
|
|
|
|
GPtrArray *secrets,
|
|
|
|
|
gboolean phase2)
|
|
|
|
|
{
|
|
|
|
|
NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE (self);
|
|
|
|
|
|
|
|
|
|
if ( (!priv->password || !strlen (priv->password))
|
2014-06-26 10:42:11 -04:00
|
|
|
&& (!priv->password_raw || !g_bytes_get_size (priv->password_raw))) {
|
2014-07-24 08:53:33 -04:00
|
|
|
g_ptr_array_add (secrets, NM_SETTING_802_1X_PASSWORD);
|
|
|
|
|
g_ptr_array_add (secrets, NM_SETTING_802_1X_PASSWORD_RAW);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
need_secrets_sim (NMSetting8021x *self,
|
|
|
|
|
GPtrArray *secrets,
|
|
|
|
|
gboolean phase2)
|
|
|
|
|
{
|
|
|
|
|
NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE (self);
|
|
|
|
|
|
|
|
|
|
if (!priv->pin || !strlen (priv->pin))
|
|
|
|
|
g_ptr_array_add (secrets, NM_SETTING_802_1X_PIN);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static gboolean
|
2014-06-26 10:42:11 -04:00
|
|
|
need_private_key_password (GBytes *blob,
|
2017-06-27 10:11:36 +02:00
|
|
|
NMSetting8021xCKScheme scheme,
|
2014-07-24 08:53:33 -04:00
|
|
|
const char *path,
|
2017-02-09 16:14:40 +00:00
|
|
|
const char *password,
|
|
|
|
|
NMSettingSecretFlags flags)
|
2014-07-24 08:53:33 -04:00
|
|
|
{
|
|
|
|
|
NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN;
|
|
|
|
|
|
2017-06-27 10:11:36 +02:00
|
|
|
if (flags & NM_SETTING_SECRET_FLAG_NOT_REQUIRED)
|
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
|
|
if ( scheme == NM_SETTING_802_1X_CK_SCHEME_PKCS11
|
|
|
|
|
&& flags == NM_SETTING_SECRET_FLAG_NONE)
|
2017-02-09 16:14:40 +00:00
|
|
|
return FALSE;
|
|
|
|
|
|
2014-07-24 08:53:33 -04:00
|
|
|
/* Private key password is required */
|
|
|
|
|
if (password) {
|
|
|
|
|
if (path)
|
2018-08-29 21:01:48 +02:00
|
|
|
format = nm_crypto_verify_private_key (path, password, NULL, NULL);
|
2014-07-24 08:53:33 -04:00
|
|
|
else if (blob)
|
2018-08-29 21:01:48 +02:00
|
|
|
format = nm_crypto_verify_private_key_data (g_bytes_get_data (blob, NULL),
|
|
|
|
|
g_bytes_get_size (blob),
|
|
|
|
|
password, NULL, NULL);
|
2014-07-24 08:53:33 -04:00
|
|
|
else
|
2017-02-09 16:14:40 +00:00
|
|
|
return FALSE;
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (format == NM_CRYPTO_FILE_FORMAT_UNKNOWN);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
need_secrets_tls (NMSetting8021x *self,
|
|
|
|
|
GPtrArray *secrets,
|
|
|
|
|
gboolean phase2)
|
|
|
|
|
{
|
|
|
|
|
NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE (self);
|
|
|
|
|
NMSetting8021xCKScheme scheme;
|
2014-06-26 10:42:11 -04:00
|
|
|
GBytes *blob = NULL;
|
2014-07-24 08:53:33 -04:00
|
|
|
const char *path = NULL;
|
|
|
|
|
|
|
|
|
|
if (phase2) {
|
|
|
|
|
scheme = nm_setting_802_1x_get_phase2_private_key_scheme (self);
|
|
|
|
|
if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
|
|
|
|
|
path = nm_setting_802_1x_get_phase2_private_key_path (self);
|
|
|
|
|
else if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB)
|
|
|
|
|
blob = nm_setting_802_1x_get_phase2_private_key_blob (self);
|
2017-02-09 16:14:40 +00:00
|
|
|
else if (scheme != NM_SETTING_802_1X_CK_SCHEME_PKCS11)
|
2014-07-24 08:53:33 -04:00
|
|
|
g_warning ("%s: unknown phase2 private key scheme %d", __func__, scheme);
|
|
|
|
|
|
2017-06-27 10:11:36 +02:00
|
|
|
if (need_private_key_password (blob, scheme, path,
|
2017-02-09 16:14:40 +00:00
|
|
|
priv->phase2_private_key_password,
|
|
|
|
|
priv->phase2_private_key_password_flags))
|
2014-07-24 08:53:33 -04:00
|
|
|
g_ptr_array_add (secrets, NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD);
|
2017-02-09 16:14:40 +00:00
|
|
|
|
|
|
|
|
scheme = nm_setting_802_1x_get_phase2_ca_cert_scheme (self);
|
|
|
|
|
if ( scheme == NM_SETTING_802_1X_CK_SCHEME_PKCS11
|
2017-04-07 18:02:13 +02:00
|
|
|
&& !( priv->phase2_ca_cert_password_flags == NM_SETTING_SECRET_FLAG_NONE
|
|
|
|
|
|| priv->phase2_ca_cert_password_flags & NM_SETTING_SECRET_FLAG_NOT_REQUIRED)
|
2017-02-09 16:14:40 +00:00
|
|
|
&& !priv->phase2_ca_cert_password)
|
|
|
|
|
g_ptr_array_add (secrets, NM_SETTING_802_1X_PHASE2_CA_CERT_PASSWORD);
|
|
|
|
|
|
|
|
|
|
scheme = nm_setting_802_1x_get_phase2_client_cert_scheme (self);
|
|
|
|
|
if ( scheme == NM_SETTING_802_1X_CK_SCHEME_PKCS11
|
2017-04-07 18:02:13 +02:00
|
|
|
&& !( priv->phase2_client_cert_password_flags & NM_SETTING_SECRET_FLAG_NOT_REQUIRED
|
|
|
|
|
|| priv->phase2_client_cert_password_flags == NM_SETTING_SECRET_FLAG_NONE)
|
2017-02-09 16:14:40 +00:00
|
|
|
&& !priv->phase2_client_cert_password)
|
|
|
|
|
g_ptr_array_add (secrets, NM_SETTING_802_1X_PHASE2_CLIENT_CERT_PASSWORD);
|
2014-07-24 08:53:33 -04:00
|
|
|
} else {
|
|
|
|
|
scheme = nm_setting_802_1x_get_private_key_scheme (self);
|
|
|
|
|
if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
|
|
|
|
|
path = nm_setting_802_1x_get_private_key_path (self);
|
|
|
|
|
else if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB)
|
|
|
|
|
blob = nm_setting_802_1x_get_private_key_blob (self);
|
2017-02-09 16:14:40 +00:00
|
|
|
else if (scheme != NM_SETTING_802_1X_CK_SCHEME_PKCS11)
|
2014-07-24 08:53:33 -04:00
|
|
|
g_warning ("%s: unknown private key scheme %d", __func__, scheme);
|
|
|
|
|
|
2017-06-27 10:11:36 +02:00
|
|
|
if (need_private_key_password (blob, scheme, path,
|
2017-02-09 16:14:40 +00:00
|
|
|
priv->private_key_password,
|
|
|
|
|
priv->private_key_password_flags))
|
2014-07-24 08:53:33 -04:00
|
|
|
g_ptr_array_add (secrets, NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD);
|
2017-02-09 16:14:40 +00:00
|
|
|
|
|
|
|
|
scheme = nm_setting_802_1x_get_ca_cert_scheme (self);
|
|
|
|
|
if ( scheme == NM_SETTING_802_1X_CK_SCHEME_PKCS11
|
2017-04-07 18:02:13 +02:00
|
|
|
&& !( priv->ca_cert_password_flags & NM_SETTING_SECRET_FLAG_NOT_REQUIRED
|
|
|
|
|
|| priv->ca_cert_password_flags == NM_SETTING_SECRET_FLAG_NONE)
|
2017-02-09 16:14:40 +00:00
|
|
|
&& !priv->ca_cert_password)
|
|
|
|
|
g_ptr_array_add (secrets, NM_SETTING_802_1X_CA_CERT_PASSWORD);
|
|
|
|
|
|
|
|
|
|
scheme = nm_setting_802_1x_get_client_cert_scheme (self);
|
|
|
|
|
if ( scheme == NM_SETTING_802_1X_CK_SCHEME_PKCS11
|
2017-04-07 18:02:13 +02:00
|
|
|
&& !( priv->client_cert_password_flags == NM_SETTING_SECRET_FLAG_NONE
|
|
|
|
|
|| priv->client_cert_password_flags & NM_SETTING_SECRET_FLAG_NOT_REQUIRED)
|
2017-02-09 16:14:40 +00:00
|
|
|
&& !priv->client_cert_password)
|
|
|
|
|
g_ptr_array_add (secrets, NM_SETTING_802_1X_CLIENT_CERT_PASSWORD);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static gboolean
|
|
|
|
|
verify_tls (NMSetting8021x *self, gboolean phase2, GError **error)
|
|
|
|
|
{
|
|
|
|
|
NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE (self);
|
|
|
|
|
|
|
|
|
|
if (phase2) {
|
|
|
|
|
if (!priv->phase2_client_cert) {
|
|
|
|
|
g_set_error_literal (error,
|
libnm-core: merge NMSetting*Error into NMConnectionError
Each setting type was defining its own error type, but most of them
had exactly the same three errors ("unknown", "missing property", and
"invalid property"), and none of the other values was of much use
programmatically anyway.
So, this commit merges NMSettingError, NMSettingAdslError, etc, all
into NMConnectionError. (The reason for merging into NMConnectionError
rather than NMSettingError is that we also already have
"NMSettingsError", for errors related to the settings service, so
"NMConnectionError" is a less-confusable name for settings/connection
errors than "NMSettingError".)
Also, make sure that all of the affected error messages are localized,
and (where appropriate) prefix them with the relevant property name.
Renamed error codes:
NM_SETTING_ERROR_PROPERTY_NOT_FOUND -> NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND
NM_SETTING_ERROR_PROPERTY_NOT_SECRET -> NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET
Remapped error codes:
NM_SETTING_*_ERROR_MISSING_PROPERTY -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_*_ERROR_INVALID_PROPERTY -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_INVALID_SETTING
NM_SETTING_BOND_ERROR_INVALID_OPTION -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BOND_ERROR_MISSING_OPTION -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_CONNECTION_ERROR_SLAVE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_VLAN_ERROR_INVALID_PARENT -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND -> NM_CONNECTION_ERROR_MISSING_PROPERTY
Dropped error codes (were previously defined but unused):
NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED
NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED
NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING
NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING
NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING
2014-10-20 13:52:23 -04:00
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_MISSING_PROPERTY,
|
2014-07-24 08:53:33 -04:00
|
|
|
_("property is missing"));
|
|
|
|
|
g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE2_CLIENT_CERT);
|
|
|
|
|
return FALSE;
|
2014-06-26 10:42:11 -04:00
|
|
|
} else if (!g_bytes_get_size (priv->phase2_client_cert)) {
|
2014-07-24 08:53:33 -04:00
|
|
|
g_set_error_literal (error,
|
libnm-core: merge NMSetting*Error into NMConnectionError
Each setting type was defining its own error type, but most of them
had exactly the same three errors ("unknown", "missing property", and
"invalid property"), and none of the other values was of much use
programmatically anyway.
So, this commit merges NMSettingError, NMSettingAdslError, etc, all
into NMConnectionError. (The reason for merging into NMConnectionError
rather than NMSettingError is that we also already have
"NMSettingsError", for errors related to the settings service, so
"NMConnectionError" is a less-confusable name for settings/connection
errors than "NMSettingError".)
Also, make sure that all of the affected error messages are localized,
and (where appropriate) prefix them with the relevant property name.
Renamed error codes:
NM_SETTING_ERROR_PROPERTY_NOT_FOUND -> NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND
NM_SETTING_ERROR_PROPERTY_NOT_SECRET -> NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET
Remapped error codes:
NM_SETTING_*_ERROR_MISSING_PROPERTY -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_*_ERROR_INVALID_PROPERTY -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_INVALID_SETTING
NM_SETTING_BOND_ERROR_INVALID_OPTION -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BOND_ERROR_MISSING_OPTION -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_CONNECTION_ERROR_SLAVE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_VLAN_ERROR_INVALID_PARENT -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND -> NM_CONNECTION_ERROR_MISSING_PROPERTY
Dropped error codes (were previously defined but unused):
NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED
NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED
NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING
NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING
NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING
2014-10-20 13:52:23 -04:00
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
2014-07-24 08:53:33 -04:00
|
|
|
_("property is empty"));
|
|
|
|
|
g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE2_CLIENT_CERT);
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Private key is required for TLS */
|
|
|
|
|
if (!priv->phase2_private_key) {
|
|
|
|
|
g_set_error_literal (error,
|
libnm-core: merge NMSetting*Error into NMConnectionError
Each setting type was defining its own error type, but most of them
had exactly the same three errors ("unknown", "missing property", and
"invalid property"), and none of the other values was of much use
programmatically anyway.
So, this commit merges NMSettingError, NMSettingAdslError, etc, all
into NMConnectionError. (The reason for merging into NMConnectionError
rather than NMSettingError is that we also already have
"NMSettingsError", for errors related to the settings service, so
"NMConnectionError" is a less-confusable name for settings/connection
errors than "NMSettingError".)
Also, make sure that all of the affected error messages are localized,
and (where appropriate) prefix them with the relevant property name.
Renamed error codes:
NM_SETTING_ERROR_PROPERTY_NOT_FOUND -> NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND
NM_SETTING_ERROR_PROPERTY_NOT_SECRET -> NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET
Remapped error codes:
NM_SETTING_*_ERROR_MISSING_PROPERTY -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_*_ERROR_INVALID_PROPERTY -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_INVALID_SETTING
NM_SETTING_BOND_ERROR_INVALID_OPTION -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BOND_ERROR_MISSING_OPTION -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_CONNECTION_ERROR_SLAVE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_VLAN_ERROR_INVALID_PARENT -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND -> NM_CONNECTION_ERROR_MISSING_PROPERTY
Dropped error codes (were previously defined but unused):
NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED
NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED
NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING
NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING
NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING
2014-10-20 13:52:23 -04:00
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_MISSING_PROPERTY,
|
2014-07-24 08:53:33 -04:00
|
|
|
_("property is missing"));
|
|
|
|
|
g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE2_PRIVATE_KEY);
|
|
|
|
|
return FALSE;
|
2014-06-26 10:42:11 -04:00
|
|
|
} else if (!g_bytes_get_size (priv->phase2_private_key)) {
|
2014-07-24 08:53:33 -04:00
|
|
|
g_set_error_literal (error,
|
libnm-core: merge NMSetting*Error into NMConnectionError
Each setting type was defining its own error type, but most of them
had exactly the same three errors ("unknown", "missing property", and
"invalid property"), and none of the other values was of much use
programmatically anyway.
So, this commit merges NMSettingError, NMSettingAdslError, etc, all
into NMConnectionError. (The reason for merging into NMConnectionError
rather than NMSettingError is that we also already have
"NMSettingsError", for errors related to the settings service, so
"NMConnectionError" is a less-confusable name for settings/connection
errors than "NMSettingError".)
Also, make sure that all of the affected error messages are localized,
and (where appropriate) prefix them with the relevant property name.
Renamed error codes:
NM_SETTING_ERROR_PROPERTY_NOT_FOUND -> NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND
NM_SETTING_ERROR_PROPERTY_NOT_SECRET -> NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET
Remapped error codes:
NM_SETTING_*_ERROR_MISSING_PROPERTY -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_*_ERROR_INVALID_PROPERTY -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_INVALID_SETTING
NM_SETTING_BOND_ERROR_INVALID_OPTION -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BOND_ERROR_MISSING_OPTION -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_CONNECTION_ERROR_SLAVE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_VLAN_ERROR_INVALID_PARENT -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND -> NM_CONNECTION_ERROR_MISSING_PROPERTY
Dropped error codes (were previously defined but unused):
NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED
NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED
NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING
NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING
NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING
2014-10-20 13:52:23 -04:00
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
2014-07-24 08:53:33 -04:00
|
|
|
_("property is empty"));
|
|
|
|
|
g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE2_PRIVATE_KEY);
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* If the private key is PKCS#12, check that it matches the client cert */
|
2018-08-29 21:01:48 +02:00
|
|
|
if (nm_crypto_is_pkcs12_data (g_bytes_get_data (priv->phase2_private_key, NULL),
|
|
|
|
|
g_bytes_get_size (priv->phase2_private_key),
|
|
|
|
|
NULL)) {
|
2014-06-26 10:42:11 -04:00
|
|
|
if (!g_bytes_equal (priv->phase2_private_key, priv->phase2_client_cert)) {
|
2014-07-24 08:53:33 -04:00
|
|
|
g_set_error (error,
|
libnm-core: merge NMSetting*Error into NMConnectionError
Each setting type was defining its own error type, but most of them
had exactly the same three errors ("unknown", "missing property", and
"invalid property"), and none of the other values was of much use
programmatically anyway.
So, this commit merges NMSettingError, NMSettingAdslError, etc, all
into NMConnectionError. (The reason for merging into NMConnectionError
rather than NMSettingError is that we also already have
"NMSettingsError", for errors related to the settings service, so
"NMConnectionError" is a less-confusable name for settings/connection
errors than "NMSettingError".)
Also, make sure that all of the affected error messages are localized,
and (where appropriate) prefix them with the relevant property name.
Renamed error codes:
NM_SETTING_ERROR_PROPERTY_NOT_FOUND -> NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND
NM_SETTING_ERROR_PROPERTY_NOT_SECRET -> NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET
Remapped error codes:
NM_SETTING_*_ERROR_MISSING_PROPERTY -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_*_ERROR_INVALID_PROPERTY -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_INVALID_SETTING
NM_SETTING_BOND_ERROR_INVALID_OPTION -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BOND_ERROR_MISSING_OPTION -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_CONNECTION_ERROR_SLAVE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_VLAN_ERROR_INVALID_PARENT -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND -> NM_CONNECTION_ERROR_MISSING_PROPERTY
Dropped error codes (were previously defined but unused):
NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED
NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED
NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING
NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING
NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING
2014-10-20 13:52:23 -04:00
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
2014-07-24 08:53:33 -04:00
|
|
|
_("has to match '%s' property for PKCS#12"),
|
|
|
|
|
NM_SETTING_802_1X_PHASE2_PRIVATE_KEY);
|
|
|
|
|
g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE2_CLIENT_CERT);
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if (!priv->client_cert) {
|
|
|
|
|
g_set_error_literal (error,
|
libnm-core: merge NMSetting*Error into NMConnectionError
Each setting type was defining its own error type, but most of them
had exactly the same three errors ("unknown", "missing property", and
"invalid property"), and none of the other values was of much use
programmatically anyway.
So, this commit merges NMSettingError, NMSettingAdslError, etc, all
into NMConnectionError. (The reason for merging into NMConnectionError
rather than NMSettingError is that we also already have
"NMSettingsError", for errors related to the settings service, so
"NMConnectionError" is a less-confusable name for settings/connection
errors than "NMSettingError".)
Also, make sure that all of the affected error messages are localized,
and (where appropriate) prefix them with the relevant property name.
Renamed error codes:
NM_SETTING_ERROR_PROPERTY_NOT_FOUND -> NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND
NM_SETTING_ERROR_PROPERTY_NOT_SECRET -> NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET
Remapped error codes:
NM_SETTING_*_ERROR_MISSING_PROPERTY -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_*_ERROR_INVALID_PROPERTY -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_INVALID_SETTING
NM_SETTING_BOND_ERROR_INVALID_OPTION -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BOND_ERROR_MISSING_OPTION -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_CONNECTION_ERROR_SLAVE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_VLAN_ERROR_INVALID_PARENT -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND -> NM_CONNECTION_ERROR_MISSING_PROPERTY
Dropped error codes (were previously defined but unused):
NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED
NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED
NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING
NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING
NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING
2014-10-20 13:52:23 -04:00
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_MISSING_PROPERTY,
|
2014-07-24 08:53:33 -04:00
|
|
|
_("property is missing"));
|
|
|
|
|
g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_CLIENT_CERT);
|
|
|
|
|
return FALSE;
|
2014-06-26 10:42:11 -04:00
|
|
|
} else if (!g_bytes_get_size (priv->client_cert)) {
|
2014-07-24 08:53:33 -04:00
|
|
|
g_set_error_literal (error,
|
libnm-core: merge NMSetting*Error into NMConnectionError
Each setting type was defining its own error type, but most of them
had exactly the same three errors ("unknown", "missing property", and
"invalid property"), and none of the other values was of much use
programmatically anyway.
So, this commit merges NMSettingError, NMSettingAdslError, etc, all
into NMConnectionError. (The reason for merging into NMConnectionError
rather than NMSettingError is that we also already have
"NMSettingsError", for errors related to the settings service, so
"NMConnectionError" is a less-confusable name for settings/connection
errors than "NMSettingError".)
Also, make sure that all of the affected error messages are localized,
and (where appropriate) prefix them with the relevant property name.
Renamed error codes:
NM_SETTING_ERROR_PROPERTY_NOT_FOUND -> NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND
NM_SETTING_ERROR_PROPERTY_NOT_SECRET -> NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET
Remapped error codes:
NM_SETTING_*_ERROR_MISSING_PROPERTY -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_*_ERROR_INVALID_PROPERTY -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_INVALID_SETTING
NM_SETTING_BOND_ERROR_INVALID_OPTION -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BOND_ERROR_MISSING_OPTION -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_CONNECTION_ERROR_SLAVE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_VLAN_ERROR_INVALID_PARENT -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND -> NM_CONNECTION_ERROR_MISSING_PROPERTY
Dropped error codes (were previously defined but unused):
NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED
NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED
NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING
NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING
NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING
2014-10-20 13:52:23 -04:00
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
2014-07-24 08:53:33 -04:00
|
|
|
_("property is empty"));
|
|
|
|
|
g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_CLIENT_CERT);
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Private key is required for TLS */
|
|
|
|
|
if (!priv->private_key) {
|
|
|
|
|
g_set_error_literal (error,
|
libnm-core: merge NMSetting*Error into NMConnectionError
Each setting type was defining its own error type, but most of them
had exactly the same three errors ("unknown", "missing property", and
"invalid property"), and none of the other values was of much use
programmatically anyway.
So, this commit merges NMSettingError, NMSettingAdslError, etc, all
into NMConnectionError. (The reason for merging into NMConnectionError
rather than NMSettingError is that we also already have
"NMSettingsError", for errors related to the settings service, so
"NMConnectionError" is a less-confusable name for settings/connection
errors than "NMSettingError".)
Also, make sure that all of the affected error messages are localized,
and (where appropriate) prefix them with the relevant property name.
Renamed error codes:
NM_SETTING_ERROR_PROPERTY_NOT_FOUND -> NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND
NM_SETTING_ERROR_PROPERTY_NOT_SECRET -> NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET
Remapped error codes:
NM_SETTING_*_ERROR_MISSING_PROPERTY -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_*_ERROR_INVALID_PROPERTY -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_INVALID_SETTING
NM_SETTING_BOND_ERROR_INVALID_OPTION -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BOND_ERROR_MISSING_OPTION -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_CONNECTION_ERROR_SLAVE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_VLAN_ERROR_INVALID_PARENT -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND -> NM_CONNECTION_ERROR_MISSING_PROPERTY
Dropped error codes (were previously defined but unused):
NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED
NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED
NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING
NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING
NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING
2014-10-20 13:52:23 -04:00
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_MISSING_PROPERTY,
|
2014-07-24 08:53:33 -04:00
|
|
|
_("property is missing"));
|
|
|
|
|
g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PRIVATE_KEY);
|
|
|
|
|
return FALSE;
|
2014-06-26 10:42:11 -04:00
|
|
|
} else if (!g_bytes_get_size (priv->private_key)) {
|
2014-07-24 08:53:33 -04:00
|
|
|
g_set_error_literal (error,
|
libnm-core: merge NMSetting*Error into NMConnectionError
Each setting type was defining its own error type, but most of them
had exactly the same three errors ("unknown", "missing property", and
"invalid property"), and none of the other values was of much use
programmatically anyway.
So, this commit merges NMSettingError, NMSettingAdslError, etc, all
into NMConnectionError. (The reason for merging into NMConnectionError
rather than NMSettingError is that we also already have
"NMSettingsError", for errors related to the settings service, so
"NMConnectionError" is a less-confusable name for settings/connection
errors than "NMSettingError".)
Also, make sure that all of the affected error messages are localized,
and (where appropriate) prefix them with the relevant property name.
Renamed error codes:
NM_SETTING_ERROR_PROPERTY_NOT_FOUND -> NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND
NM_SETTING_ERROR_PROPERTY_NOT_SECRET -> NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET
Remapped error codes:
NM_SETTING_*_ERROR_MISSING_PROPERTY -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_*_ERROR_INVALID_PROPERTY -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_INVALID_SETTING
NM_SETTING_BOND_ERROR_INVALID_OPTION -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BOND_ERROR_MISSING_OPTION -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_CONNECTION_ERROR_SLAVE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_VLAN_ERROR_INVALID_PARENT -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND -> NM_CONNECTION_ERROR_MISSING_PROPERTY
Dropped error codes (were previously defined but unused):
NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED
NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED
NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING
NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING
NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING
2014-10-20 13:52:23 -04:00
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
2014-07-24 08:53:33 -04:00
|
|
|
_("property is empty"));
|
|
|
|
|
g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PRIVATE_KEY);
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* If the private key is PKCS#12, check that it matches the client cert */
|
2018-08-29 21:01:48 +02:00
|
|
|
if (nm_crypto_is_pkcs12_data (g_bytes_get_data (priv->private_key, NULL),
|
|
|
|
|
g_bytes_get_size (priv->private_key),
|
|
|
|
|
NULL)) {
|
2014-06-26 10:42:11 -04:00
|
|
|
if (!g_bytes_equal (priv->private_key, priv->client_cert)) {
|
2014-07-24 08:53:33 -04:00
|
|
|
g_set_error (error,
|
libnm-core: merge NMSetting*Error into NMConnectionError
Each setting type was defining its own error type, but most of them
had exactly the same three errors ("unknown", "missing property", and
"invalid property"), and none of the other values was of much use
programmatically anyway.
So, this commit merges NMSettingError, NMSettingAdslError, etc, all
into NMConnectionError. (The reason for merging into NMConnectionError
rather than NMSettingError is that we also already have
"NMSettingsError", for errors related to the settings service, so
"NMConnectionError" is a less-confusable name for settings/connection
errors than "NMSettingError".)
Also, make sure that all of the affected error messages are localized,
and (where appropriate) prefix them with the relevant property name.
Renamed error codes:
NM_SETTING_ERROR_PROPERTY_NOT_FOUND -> NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND
NM_SETTING_ERROR_PROPERTY_NOT_SECRET -> NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET
Remapped error codes:
NM_SETTING_*_ERROR_MISSING_PROPERTY -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_*_ERROR_INVALID_PROPERTY -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_INVALID_SETTING
NM_SETTING_BOND_ERROR_INVALID_OPTION -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BOND_ERROR_MISSING_OPTION -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_CONNECTION_ERROR_SLAVE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_VLAN_ERROR_INVALID_PARENT -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND -> NM_CONNECTION_ERROR_MISSING_PROPERTY
Dropped error codes (were previously defined but unused):
NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED
NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED
NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING
NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING
NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING
2014-10-20 13:52:23 -04:00
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
2014-07-24 08:53:33 -04:00
|
|
|
_("has to match '%s' property for PKCS#12"),
|
|
|
|
|
NM_SETTING_802_1X_PRIVATE_KEY);
|
|
|
|
|
g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_CLIENT_CERT);
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static gboolean
|
|
|
|
|
verify_ttls (NMSetting8021x *self, gboolean phase2, GError **error)
|
|
|
|
|
{
|
|
|
|
|
NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE (self);
|
|
|
|
|
|
|
|
|
|
if ( (!priv->identity || !strlen (priv->identity))
|
|
|
|
|
&& (!priv->anonymous_identity || !strlen (priv->anonymous_identity))) {
|
|
|
|
|
if (!priv->identity) {
|
|
|
|
|
g_set_error_literal (error,
|
libnm-core: merge NMSetting*Error into NMConnectionError
Each setting type was defining its own error type, but most of them
had exactly the same three errors ("unknown", "missing property", and
"invalid property"), and none of the other values was of much use
programmatically anyway.
So, this commit merges NMSettingError, NMSettingAdslError, etc, all
into NMConnectionError. (The reason for merging into NMConnectionError
rather than NMSettingError is that we also already have
"NMSettingsError", for errors related to the settings service, so
"NMConnectionError" is a less-confusable name for settings/connection
errors than "NMSettingError".)
Also, make sure that all of the affected error messages are localized,
and (where appropriate) prefix them with the relevant property name.
Renamed error codes:
NM_SETTING_ERROR_PROPERTY_NOT_FOUND -> NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND
NM_SETTING_ERROR_PROPERTY_NOT_SECRET -> NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET
Remapped error codes:
NM_SETTING_*_ERROR_MISSING_PROPERTY -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_*_ERROR_INVALID_PROPERTY -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_INVALID_SETTING
NM_SETTING_BOND_ERROR_INVALID_OPTION -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BOND_ERROR_MISSING_OPTION -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_CONNECTION_ERROR_SLAVE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_VLAN_ERROR_INVALID_PARENT -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND -> NM_CONNECTION_ERROR_MISSING_PROPERTY
Dropped error codes (were previously defined but unused):
NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED
NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED
NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING
NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING
NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING
2014-10-20 13:52:23 -04:00
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_MISSING_PROPERTY,
|
2014-07-24 08:53:33 -04:00
|
|
|
_("property is missing"));
|
|
|
|
|
g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_IDENTITY);
|
|
|
|
|
} else if (!strlen (priv->identity)) {
|
|
|
|
|
g_set_error_literal (error,
|
libnm-core: merge NMSetting*Error into NMConnectionError
Each setting type was defining its own error type, but most of them
had exactly the same three errors ("unknown", "missing property", and
"invalid property"), and none of the other values was of much use
programmatically anyway.
So, this commit merges NMSettingError, NMSettingAdslError, etc, all
into NMConnectionError. (The reason for merging into NMConnectionError
rather than NMSettingError is that we also already have
"NMSettingsError", for errors related to the settings service, so
"NMConnectionError" is a less-confusable name for settings/connection
errors than "NMSettingError".)
Also, make sure that all of the affected error messages are localized,
and (where appropriate) prefix them with the relevant property name.
Renamed error codes:
NM_SETTING_ERROR_PROPERTY_NOT_FOUND -> NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND
NM_SETTING_ERROR_PROPERTY_NOT_SECRET -> NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET
Remapped error codes:
NM_SETTING_*_ERROR_MISSING_PROPERTY -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_*_ERROR_INVALID_PROPERTY -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_INVALID_SETTING
NM_SETTING_BOND_ERROR_INVALID_OPTION -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BOND_ERROR_MISSING_OPTION -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_CONNECTION_ERROR_SLAVE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_VLAN_ERROR_INVALID_PARENT -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND -> NM_CONNECTION_ERROR_MISSING_PROPERTY
Dropped error codes (were previously defined but unused):
NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED
NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED
NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING
NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING
NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING
2014-10-20 13:52:23 -04:00
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
2014-07-24 08:53:33 -04:00
|
|
|
_("property is empty"));
|
|
|
|
|
g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_IDENTITY);
|
|
|
|
|
} else if (!priv->anonymous_identity) {
|
|
|
|
|
g_set_error_literal (error,
|
libnm-core: merge NMSetting*Error into NMConnectionError
Each setting type was defining its own error type, but most of them
had exactly the same three errors ("unknown", "missing property", and
"invalid property"), and none of the other values was of much use
programmatically anyway.
So, this commit merges NMSettingError, NMSettingAdslError, etc, all
into NMConnectionError. (The reason for merging into NMConnectionError
rather than NMSettingError is that we also already have
"NMSettingsError", for errors related to the settings service, so
"NMConnectionError" is a less-confusable name for settings/connection
errors than "NMSettingError".)
Also, make sure that all of the affected error messages are localized,
and (where appropriate) prefix them with the relevant property name.
Renamed error codes:
NM_SETTING_ERROR_PROPERTY_NOT_FOUND -> NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND
NM_SETTING_ERROR_PROPERTY_NOT_SECRET -> NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET
Remapped error codes:
NM_SETTING_*_ERROR_MISSING_PROPERTY -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_*_ERROR_INVALID_PROPERTY -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_INVALID_SETTING
NM_SETTING_BOND_ERROR_INVALID_OPTION -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BOND_ERROR_MISSING_OPTION -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_CONNECTION_ERROR_SLAVE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_VLAN_ERROR_INVALID_PARENT -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND -> NM_CONNECTION_ERROR_MISSING_PROPERTY
Dropped error codes (were previously defined but unused):
NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED
NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED
NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING
NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING
NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING
2014-10-20 13:52:23 -04:00
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_MISSING_PROPERTY,
|
2014-07-24 08:53:33 -04:00
|
|
|
_("property is missing"));
|
|
|
|
|
g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_ANONYMOUS_IDENTITY);
|
|
|
|
|
} else {
|
|
|
|
|
g_set_error_literal (error,
|
libnm-core: merge NMSetting*Error into NMConnectionError
Each setting type was defining its own error type, but most of them
had exactly the same three errors ("unknown", "missing property", and
"invalid property"), and none of the other values was of much use
programmatically anyway.
So, this commit merges NMSettingError, NMSettingAdslError, etc, all
into NMConnectionError. (The reason for merging into NMConnectionError
rather than NMSettingError is that we also already have
"NMSettingsError", for errors related to the settings service, so
"NMConnectionError" is a less-confusable name for settings/connection
errors than "NMSettingError".)
Also, make sure that all of the affected error messages are localized,
and (where appropriate) prefix them with the relevant property name.
Renamed error codes:
NM_SETTING_ERROR_PROPERTY_NOT_FOUND -> NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND
NM_SETTING_ERROR_PROPERTY_NOT_SECRET -> NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET
Remapped error codes:
NM_SETTING_*_ERROR_MISSING_PROPERTY -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_*_ERROR_INVALID_PROPERTY -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_INVALID_SETTING
NM_SETTING_BOND_ERROR_INVALID_OPTION -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BOND_ERROR_MISSING_OPTION -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_CONNECTION_ERROR_SLAVE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_VLAN_ERROR_INVALID_PARENT -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND -> NM_CONNECTION_ERROR_MISSING_PROPERTY
Dropped error codes (were previously defined but unused):
NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED
NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED
NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING
NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING
NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING
2014-10-20 13:52:23 -04:00
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
2014-07-24 08:53:33 -04:00
|
|
|
_("property is empty"));
|
|
|
|
|
g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_ANONYMOUS_IDENTITY);
|
|
|
|
|
}
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ( (!priv->phase2_auth || !strlen (priv->phase2_auth))
|
|
|
|
|
&& (!priv->phase2_autheap || !strlen (priv->phase2_autheap))) {
|
|
|
|
|
if (!priv->phase2_auth) {
|
|
|
|
|
g_set_error_literal (error,
|
libnm-core: merge NMSetting*Error into NMConnectionError
Each setting type was defining its own error type, but most of them
had exactly the same three errors ("unknown", "missing property", and
"invalid property"), and none of the other values was of much use
programmatically anyway.
So, this commit merges NMSettingError, NMSettingAdslError, etc, all
into NMConnectionError. (The reason for merging into NMConnectionError
rather than NMSettingError is that we also already have
"NMSettingsError", for errors related to the settings service, so
"NMConnectionError" is a less-confusable name for settings/connection
errors than "NMSettingError".)
Also, make sure that all of the affected error messages are localized,
and (where appropriate) prefix them with the relevant property name.
Renamed error codes:
NM_SETTING_ERROR_PROPERTY_NOT_FOUND -> NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND
NM_SETTING_ERROR_PROPERTY_NOT_SECRET -> NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET
Remapped error codes:
NM_SETTING_*_ERROR_MISSING_PROPERTY -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_*_ERROR_INVALID_PROPERTY -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_INVALID_SETTING
NM_SETTING_BOND_ERROR_INVALID_OPTION -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BOND_ERROR_MISSING_OPTION -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_CONNECTION_ERROR_SLAVE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_VLAN_ERROR_INVALID_PARENT -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND -> NM_CONNECTION_ERROR_MISSING_PROPERTY
Dropped error codes (were previously defined but unused):
NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED
NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED
NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING
NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING
NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING
2014-10-20 13:52:23 -04:00
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_MISSING_PROPERTY,
|
2014-07-24 08:53:33 -04:00
|
|
|
_("property is missing"));
|
|
|
|
|
g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE2_AUTH);
|
|
|
|
|
} else if (!strlen (priv->phase2_auth)) {
|
|
|
|
|
g_set_error_literal (error,
|
libnm-core: merge NMSetting*Error into NMConnectionError
Each setting type was defining its own error type, but most of them
had exactly the same three errors ("unknown", "missing property", and
"invalid property"), and none of the other values was of much use
programmatically anyway.
So, this commit merges NMSettingError, NMSettingAdslError, etc, all
into NMConnectionError. (The reason for merging into NMConnectionError
rather than NMSettingError is that we also already have
"NMSettingsError", for errors related to the settings service, so
"NMConnectionError" is a less-confusable name for settings/connection
errors than "NMSettingError".)
Also, make sure that all of the affected error messages are localized,
and (where appropriate) prefix them with the relevant property name.
Renamed error codes:
NM_SETTING_ERROR_PROPERTY_NOT_FOUND -> NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND
NM_SETTING_ERROR_PROPERTY_NOT_SECRET -> NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET
Remapped error codes:
NM_SETTING_*_ERROR_MISSING_PROPERTY -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_*_ERROR_INVALID_PROPERTY -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_INVALID_SETTING
NM_SETTING_BOND_ERROR_INVALID_OPTION -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BOND_ERROR_MISSING_OPTION -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_CONNECTION_ERROR_SLAVE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_VLAN_ERROR_INVALID_PARENT -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND -> NM_CONNECTION_ERROR_MISSING_PROPERTY
Dropped error codes (were previously defined but unused):
NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED
NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED
NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING
NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING
NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING
2014-10-20 13:52:23 -04:00
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
2014-07-24 08:53:33 -04:00
|
|
|
_("property is empty"));
|
|
|
|
|
g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE2_AUTH);
|
|
|
|
|
} else if (!priv->phase2_autheap) {
|
|
|
|
|
g_set_error_literal (error,
|
libnm-core: merge NMSetting*Error into NMConnectionError
Each setting type was defining its own error type, but most of them
had exactly the same three errors ("unknown", "missing property", and
"invalid property"), and none of the other values was of much use
programmatically anyway.
So, this commit merges NMSettingError, NMSettingAdslError, etc, all
into NMConnectionError. (The reason for merging into NMConnectionError
rather than NMSettingError is that we also already have
"NMSettingsError", for errors related to the settings service, so
"NMConnectionError" is a less-confusable name for settings/connection
errors than "NMSettingError".)
Also, make sure that all of the affected error messages are localized,
and (where appropriate) prefix them with the relevant property name.
Renamed error codes:
NM_SETTING_ERROR_PROPERTY_NOT_FOUND -> NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND
NM_SETTING_ERROR_PROPERTY_NOT_SECRET -> NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET
Remapped error codes:
NM_SETTING_*_ERROR_MISSING_PROPERTY -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_*_ERROR_INVALID_PROPERTY -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_INVALID_SETTING
NM_SETTING_BOND_ERROR_INVALID_OPTION -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BOND_ERROR_MISSING_OPTION -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_CONNECTION_ERROR_SLAVE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_VLAN_ERROR_INVALID_PARENT -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND -> NM_CONNECTION_ERROR_MISSING_PROPERTY
Dropped error codes (were previously defined but unused):
NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED
NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED
NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING
NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING
NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING
2014-10-20 13:52:23 -04:00
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_MISSING_PROPERTY,
|
2014-07-24 08:53:33 -04:00
|
|
|
_("property is missing"));
|
|
|
|
|
g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE2_AUTHEAP);
|
|
|
|
|
} else {
|
|
|
|
|
g_set_error_literal (error,
|
libnm-core: merge NMSetting*Error into NMConnectionError
Each setting type was defining its own error type, but most of them
had exactly the same three errors ("unknown", "missing property", and
"invalid property"), and none of the other values was of much use
programmatically anyway.
So, this commit merges NMSettingError, NMSettingAdslError, etc, all
into NMConnectionError. (The reason for merging into NMConnectionError
rather than NMSettingError is that we also already have
"NMSettingsError", for errors related to the settings service, so
"NMConnectionError" is a less-confusable name for settings/connection
errors than "NMSettingError".)
Also, make sure that all of the affected error messages are localized,
and (where appropriate) prefix them with the relevant property name.
Renamed error codes:
NM_SETTING_ERROR_PROPERTY_NOT_FOUND -> NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND
NM_SETTING_ERROR_PROPERTY_NOT_SECRET -> NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET
Remapped error codes:
NM_SETTING_*_ERROR_MISSING_PROPERTY -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_*_ERROR_INVALID_PROPERTY -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_INVALID_SETTING
NM_SETTING_BOND_ERROR_INVALID_OPTION -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BOND_ERROR_MISSING_OPTION -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_CONNECTION_ERROR_SLAVE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_VLAN_ERROR_INVALID_PARENT -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND -> NM_CONNECTION_ERROR_MISSING_PROPERTY
Dropped error codes (were previously defined but unused):
NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED
NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED
NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING
NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING
NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING
2014-10-20 13:52:23 -04:00
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
2014-07-24 08:53:33 -04:00
|
|
|
_("property is empty"));
|
|
|
|
|
g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE2_AUTHEAP);
|
|
|
|
|
}
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static gboolean
|
|
|
|
|
verify_identity (NMSetting8021x *self, gboolean phase2, GError **error)
|
|
|
|
|
{
|
|
|
|
|
NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE (self);
|
|
|
|
|
|
|
|
|
|
if (!priv->identity) {
|
|
|
|
|
g_set_error_literal (error,
|
libnm-core: merge NMSetting*Error into NMConnectionError
Each setting type was defining its own error type, but most of them
had exactly the same three errors ("unknown", "missing property", and
"invalid property"), and none of the other values was of much use
programmatically anyway.
So, this commit merges NMSettingError, NMSettingAdslError, etc, all
into NMConnectionError. (The reason for merging into NMConnectionError
rather than NMSettingError is that we also already have
"NMSettingsError", for errors related to the settings service, so
"NMConnectionError" is a less-confusable name for settings/connection
errors than "NMSettingError".)
Also, make sure that all of the affected error messages are localized,
and (where appropriate) prefix them with the relevant property name.
Renamed error codes:
NM_SETTING_ERROR_PROPERTY_NOT_FOUND -> NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND
NM_SETTING_ERROR_PROPERTY_NOT_SECRET -> NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET
Remapped error codes:
NM_SETTING_*_ERROR_MISSING_PROPERTY -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_*_ERROR_INVALID_PROPERTY -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_INVALID_SETTING
NM_SETTING_BOND_ERROR_INVALID_OPTION -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BOND_ERROR_MISSING_OPTION -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_CONNECTION_ERROR_SLAVE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_VLAN_ERROR_INVALID_PARENT -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND -> NM_CONNECTION_ERROR_MISSING_PROPERTY
Dropped error codes (were previously defined but unused):
NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED
NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED
NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING
NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING
NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING
2014-10-20 13:52:23 -04:00
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_MISSING_PROPERTY,
|
2014-07-24 08:53:33 -04:00
|
|
|
_("property is missing"));
|
|
|
|
|
g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_IDENTITY);
|
|
|
|
|
return FALSE;
|
|
|
|
|
} else if (!strlen (priv->identity)) {
|
|
|
|
|
g_set_error_literal (error,
|
libnm-core: merge NMSetting*Error into NMConnectionError
Each setting type was defining its own error type, but most of them
had exactly the same three errors ("unknown", "missing property", and
"invalid property"), and none of the other values was of much use
programmatically anyway.
So, this commit merges NMSettingError, NMSettingAdslError, etc, all
into NMConnectionError. (The reason for merging into NMConnectionError
rather than NMSettingError is that we also already have
"NMSettingsError", for errors related to the settings service, so
"NMConnectionError" is a less-confusable name for settings/connection
errors than "NMSettingError".)
Also, make sure that all of the affected error messages are localized,
and (where appropriate) prefix them with the relevant property name.
Renamed error codes:
NM_SETTING_ERROR_PROPERTY_NOT_FOUND -> NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND
NM_SETTING_ERROR_PROPERTY_NOT_SECRET -> NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET
Remapped error codes:
NM_SETTING_*_ERROR_MISSING_PROPERTY -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_*_ERROR_INVALID_PROPERTY -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_INVALID_SETTING
NM_SETTING_BOND_ERROR_INVALID_OPTION -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BOND_ERROR_MISSING_OPTION -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_CONNECTION_ERROR_SLAVE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_VLAN_ERROR_INVALID_PARENT -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND -> NM_CONNECTION_ERROR_MISSING_PROPERTY
Dropped error codes (were previously defined but unused):
NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED
NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED
NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING
NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING
NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING
2014-10-20 13:52:23 -04:00
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
2014-07-24 08:53:33 -04:00
|
|
|
_("property is empty"));
|
2018-08-31 20:13:39 +02:00
|
|
|
g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_IDENTITY);
|
|
|
|
|
return FALSE;
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
2018-08-31 20:13:39 +02:00
|
|
|
return TRUE;
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
2018-08-31 20:13:39 +02:00
|
|
|
static void
|
|
|
|
|
need_secrets_phase2 (NMSetting8021x *self,
|
|
|
|
|
GPtrArray *secrets,
|
|
|
|
|
gboolean phase2)
|
2014-07-24 08:53:33 -04:00
|
|
|
{
|
2018-08-31 20:13:39 +02:00
|
|
|
NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE (self);
|
|
|
|
|
char *method = NULL;
|
|
|
|
|
int i;
|
2014-06-26 10:42:11 -04:00
|
|
|
|
2018-08-31 20:13:39 +02:00
|
|
|
g_return_if_fail (phase2 == FALSE);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
2018-08-31 20:13:39 +02:00
|
|
|
/* Check phase2_auth and phase2_autheap */
|
|
|
|
|
method = priv->phase2_auth;
|
|
|
|
|
if (!method && priv->phase2_autheap)
|
|
|
|
|
method = priv->phase2_autheap;
|
2017-02-01 12:53:34 +00:00
|
|
|
|
2018-08-31 20:13:39 +02:00
|
|
|
if (!method) {
|
|
|
|
|
g_warning ("Couldn't find EAP method.");
|
|
|
|
|
g_assert_not_reached();
|
|
|
|
|
return;
|
2017-02-01 12:53:34 +00:00
|
|
|
}
|
|
|
|
|
|
2018-08-31 20:13:39 +02:00
|
|
|
/* Ask the configured phase2 method if it needs secrets */
|
|
|
|
|
for (i = 0; eap_methods_table[i].method; i++) {
|
|
|
|
|
if (eap_methods_table[i].ns_func == NULL)
|
|
|
|
|
continue;
|
|
|
|
|
if (!strcmp (eap_methods_table[i].method, method)) {
|
|
|
|
|
(*eap_methods_table[i].ns_func) (self, secrets, TRUE);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
2019-05-16 13:43:07 +02:00
|
|
|
static const EAPMethodsTable eap_methods_table[] = {
|
2018-08-31 20:13:39 +02:00
|
|
|
{ "leap", need_secrets_password, verify_identity },
|
|
|
|
|
{ "pwd", need_secrets_password, verify_identity },
|
|
|
|
|
{ "md5", need_secrets_password, verify_identity },
|
|
|
|
|
{ "pap", need_secrets_password, verify_identity },
|
|
|
|
|
{ "chap", need_secrets_password, verify_identity },
|
|
|
|
|
{ "mschap", need_secrets_password, verify_identity },
|
|
|
|
|
{ "mschapv2", need_secrets_password, verify_identity },
|
|
|
|
|
{ "fast", need_secrets_password, verify_identity },
|
|
|
|
|
{ "tls", need_secrets_tls, verify_tls },
|
|
|
|
|
{ "peap", need_secrets_phase2, verify_ttls },
|
|
|
|
|
{ "ttls", need_secrets_phase2, verify_ttls },
|
|
|
|
|
{ "sim", need_secrets_sim, NULL },
|
|
|
|
|
{ "gtc", need_secrets_password, verify_identity },
|
|
|
|
|
{ "otp", NULL, NULL }, // FIXME: implement
|
2018-06-11 18:14:41 +02:00
|
|
|
{ "external", NULL, NULL },
|
2018-08-31 20:13:39 +02:00
|
|
|
{ NULL, NULL, NULL }
|
|
|
|
|
};
|
|
|
|
|
|
2014-07-24 08:53:33 -04:00
|
|
|
static gboolean
|
2014-10-21 22:30:31 -04:00
|
|
|
verify (NMSetting *setting, NMConnection *connection, GError **error)
|
2014-07-24 08:53:33 -04:00
|
|
|
{
|
|
|
|
|
NMSetting8021x *self = NM_SETTING_802_1X (setting);
|
|
|
|
|
NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE (self);
|
2018-06-11 18:14:41 +02:00
|
|
|
const char *valid_eap[] = { "leap", "md5", "tls", "peap", "ttls", "sim", "fast", "pwd", "external", NULL };
|
2014-07-24 08:53:33 -04:00
|
|
|
GSList *iter;
|
|
|
|
|
|
|
|
|
|
if (error)
|
|
|
|
|
g_return_val_if_fail (*error == NULL, FALSE);
|
|
|
|
|
|
2019-07-11 15:52:03 +02:00
|
|
|
if ( connection
|
|
|
|
|
&& priv->optional
|
|
|
|
|
&& !nm_streq0 (nm_connection_get_connection_type (connection), NM_SETTING_WIRED_SETTING_NAME)) {
|
|
|
|
|
g_set_error_literal (error,
|
|
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
|
|
|
|
_("can be enabled only on Ethernet connections"));
|
|
|
|
|
g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_OPTIONAL);
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
2014-07-24 08:53:33 -04:00
|
|
|
if (!priv->eap) {
|
|
|
|
|
g_set_error_literal (error,
|
libnm-core: merge NMSetting*Error into NMConnectionError
Each setting type was defining its own error type, but most of them
had exactly the same three errors ("unknown", "missing property", and
"invalid property"), and none of the other values was of much use
programmatically anyway.
So, this commit merges NMSettingError, NMSettingAdslError, etc, all
into NMConnectionError. (The reason for merging into NMConnectionError
rather than NMSettingError is that we also already have
"NMSettingsError", for errors related to the settings service, so
"NMConnectionError" is a less-confusable name for settings/connection
errors than "NMSettingError".)
Also, make sure that all of the affected error messages are localized,
and (where appropriate) prefix them with the relevant property name.
Renamed error codes:
NM_SETTING_ERROR_PROPERTY_NOT_FOUND -> NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND
NM_SETTING_ERROR_PROPERTY_NOT_SECRET -> NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET
Remapped error codes:
NM_SETTING_*_ERROR_MISSING_PROPERTY -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_*_ERROR_INVALID_PROPERTY -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_INVALID_SETTING
NM_SETTING_BOND_ERROR_INVALID_OPTION -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BOND_ERROR_MISSING_OPTION -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_CONNECTION_ERROR_SLAVE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_VLAN_ERROR_INVALID_PARENT -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND -> NM_CONNECTION_ERROR_MISSING_PROPERTY
Dropped error codes (were previously defined but unused):
NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED
NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED
NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING
NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING
NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING
2014-10-20 13:52:23 -04:00
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_MISSING_PROPERTY,
|
2014-07-24 08:53:33 -04:00
|
|
|
_("property is missing"));
|
|
|
|
|
g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_EAP);
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!_nm_utils_string_slist_validate (priv->eap, valid_eap)) {
|
|
|
|
|
g_set_error_literal (error,
|
libnm-core: merge NMSetting*Error into NMConnectionError
Each setting type was defining its own error type, but most of them
had exactly the same three errors ("unknown", "missing property", and
"invalid property"), and none of the other values was of much use
programmatically anyway.
So, this commit merges NMSettingError, NMSettingAdslError, etc, all
into NMConnectionError. (The reason for merging into NMConnectionError
rather than NMSettingError is that we also already have
"NMSettingsError", for errors related to the settings service, so
"NMConnectionError" is a less-confusable name for settings/connection
errors than "NMSettingError".)
Also, make sure that all of the affected error messages are localized,
and (where appropriate) prefix them with the relevant property name.
Renamed error codes:
NM_SETTING_ERROR_PROPERTY_NOT_FOUND -> NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND
NM_SETTING_ERROR_PROPERTY_NOT_SECRET -> NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET
Remapped error codes:
NM_SETTING_*_ERROR_MISSING_PROPERTY -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_*_ERROR_INVALID_PROPERTY -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_INVALID_SETTING
NM_SETTING_BOND_ERROR_INVALID_OPTION -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BOND_ERROR_MISSING_OPTION -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_CONNECTION_ERROR_SLAVE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_VLAN_ERROR_INVALID_PARENT -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND -> NM_CONNECTION_ERROR_MISSING_PROPERTY
Dropped error codes (were previously defined but unused):
NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED
NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED
NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING
NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING
NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING
2014-10-20 13:52:23 -04:00
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
2014-07-24 08:53:33 -04:00
|
|
|
_("property is invalid"));
|
|
|
|
|
g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_EAP);
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Ask each configured EAP method if its valid */
|
|
|
|
|
for (iter = priv->eap; iter; iter = g_slist_next (iter)) {
|
|
|
|
|
const char *method = (const char *) iter->data;
|
|
|
|
|
int i;
|
|
|
|
|
|
|
|
|
|
for (i = 0; eap_methods_table[i].method; i++) {
|
|
|
|
|
if (eap_methods_table[i].v_func == NULL)
|
|
|
|
|
continue;
|
|
|
|
|
if (!strcmp (eap_methods_table[i].method, method)) {
|
|
|
|
|
if (!(*eap_methods_table[i].v_func) (self, FALSE, error))
|
|
|
|
|
return FALSE;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2018-08-31 21:53:35 +02:00
|
|
|
if (!NM_IN_STRSET (priv->phase1_peapver, NULL,
|
|
|
|
|
"0",
|
|
|
|
|
"1")) {
|
2014-07-24 08:53:33 -04:00
|
|
|
g_set_error (error,
|
libnm-core: merge NMSetting*Error into NMConnectionError
Each setting type was defining its own error type, but most of them
had exactly the same three errors ("unknown", "missing property", and
"invalid property"), and none of the other values was of much use
programmatically anyway.
So, this commit merges NMSettingError, NMSettingAdslError, etc, all
into NMConnectionError. (The reason for merging into NMConnectionError
rather than NMSettingError is that we also already have
"NMSettingsError", for errors related to the settings service, so
"NMConnectionError" is a less-confusable name for settings/connection
errors than "NMSettingError".)
Also, make sure that all of the affected error messages are localized,
and (where appropriate) prefix them with the relevant property name.
Renamed error codes:
NM_SETTING_ERROR_PROPERTY_NOT_FOUND -> NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND
NM_SETTING_ERROR_PROPERTY_NOT_SECRET -> NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET
Remapped error codes:
NM_SETTING_*_ERROR_MISSING_PROPERTY -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_*_ERROR_INVALID_PROPERTY -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_INVALID_SETTING
NM_SETTING_BOND_ERROR_INVALID_OPTION -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BOND_ERROR_MISSING_OPTION -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_CONNECTION_ERROR_SLAVE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_VLAN_ERROR_INVALID_PARENT -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND -> NM_CONNECTION_ERROR_MISSING_PROPERTY
Dropped error codes (were previously defined but unused):
NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED
NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED
NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING
NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING
NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING
2014-10-20 13:52:23 -04:00
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
2014-07-24 08:53:33 -04:00
|
|
|
_("'%s' is not a valid value for the property"),
|
|
|
|
|
priv->phase1_peapver);
|
|
|
|
|
g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE1_PEAPVER);
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
2018-08-31 21:53:35 +02:00
|
|
|
if (!NM_IN_STRSET (priv->phase1_peaplabel, NULL,
|
|
|
|
|
"0",
|
|
|
|
|
"1")) {
|
2014-07-24 08:53:33 -04:00
|
|
|
g_set_error (error,
|
libnm-core: merge NMSetting*Error into NMConnectionError
Each setting type was defining its own error type, but most of them
had exactly the same three errors ("unknown", "missing property", and
"invalid property"), and none of the other values was of much use
programmatically anyway.
So, this commit merges NMSettingError, NMSettingAdslError, etc, all
into NMConnectionError. (The reason for merging into NMConnectionError
rather than NMSettingError is that we also already have
"NMSettingsError", for errors related to the settings service, so
"NMConnectionError" is a less-confusable name for settings/connection
errors than "NMSettingError".)
Also, make sure that all of the affected error messages are localized,
and (where appropriate) prefix them with the relevant property name.
Renamed error codes:
NM_SETTING_ERROR_PROPERTY_NOT_FOUND -> NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND
NM_SETTING_ERROR_PROPERTY_NOT_SECRET -> NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET
Remapped error codes:
NM_SETTING_*_ERROR_MISSING_PROPERTY -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_*_ERROR_INVALID_PROPERTY -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_INVALID_SETTING
NM_SETTING_BOND_ERROR_INVALID_OPTION -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BOND_ERROR_MISSING_OPTION -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_CONNECTION_ERROR_SLAVE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_VLAN_ERROR_INVALID_PARENT -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND -> NM_CONNECTION_ERROR_MISSING_PROPERTY
Dropped error codes (were previously defined but unused):
NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED
NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED
NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING
NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING
NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING
2014-10-20 13:52:23 -04:00
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
2014-07-24 08:53:33 -04:00
|
|
|
_("'%s' is not a valid value for the property"),
|
|
|
|
|
priv->phase1_peaplabel);
|
|
|
|
|
g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE1_PEAPLABEL);
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
2018-08-31 21:53:35 +02:00
|
|
|
if (!NM_IN_STRSET (priv->phase1_fast_provisioning, NULL,
|
|
|
|
|
"0",
|
|
|
|
|
"1",
|
|
|
|
|
"2",
|
|
|
|
|
"3")) {
|
2014-07-24 08:53:33 -04:00
|
|
|
g_set_error (error,
|
libnm-core: merge NMSetting*Error into NMConnectionError
Each setting type was defining its own error type, but most of them
had exactly the same three errors ("unknown", "missing property", and
"invalid property"), and none of the other values was of much use
programmatically anyway.
So, this commit merges NMSettingError, NMSettingAdslError, etc, all
into NMConnectionError. (The reason for merging into NMConnectionError
rather than NMSettingError is that we also already have
"NMSettingsError", for errors related to the settings service, so
"NMConnectionError" is a less-confusable name for settings/connection
errors than "NMSettingError".)
Also, make sure that all of the affected error messages are localized,
and (where appropriate) prefix them with the relevant property name.
Renamed error codes:
NM_SETTING_ERROR_PROPERTY_NOT_FOUND -> NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND
NM_SETTING_ERROR_PROPERTY_NOT_SECRET -> NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET
Remapped error codes:
NM_SETTING_*_ERROR_MISSING_PROPERTY -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_*_ERROR_INVALID_PROPERTY -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_INVALID_SETTING
NM_SETTING_BOND_ERROR_INVALID_OPTION -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BOND_ERROR_MISSING_OPTION -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_CONNECTION_ERROR_SLAVE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_VLAN_ERROR_INVALID_PARENT -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND -> NM_CONNECTION_ERROR_MISSING_PROPERTY
Dropped error codes (were previously defined but unused):
NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED
NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED
NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING
NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING
NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING
2014-10-20 13:52:23 -04:00
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
2014-07-24 08:53:33 -04:00
|
|
|
_("'%s' is not a valid value for the property"),
|
|
|
|
|
priv->phase1_fast_provisioning);
|
|
|
|
|
g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING);
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
libnm/wifi: rework NMSetting8021xAuthFlags to explicitly disable TLS version
The wpa_supplicant API supports to enable/disable each TLS version
individually, or leave it at the default. Currently, the default
means to enable a TLS version, thus, the only meaningful option
for the momemnt means to explicitly disable it.
In the future, supplicant may disable options by default, and
the inverse option can become interesting to configure
"tls_disable_tlsv1_0=0". When that happens, we can solve it by
adding another flag NM_SETTING_802_1X_AUTH_FLAGS_TLS_1_0_ENABLE.
Change the previous behavior of the NMSetting8021xAuthFlags.
Previously, when not specifying TLS_DISABLE_DEFAULT, all
options were unspecified. On the other hand, when specifying
a single TLS disable flag, all versions were explicitly enabled
or disabled.
Instead, change the meaning of the disable flags. When present,
it explicitly disables an option. But it does not explicitly enable
it.
2017-02-17 15:19:42 +01:00
|
|
|
if (NM_FLAGS_ANY (priv->phase1_auth_flags, ~NM_SETTING_802_1X_AUTH_FLAGS_ALL)) {
|
2017-02-08 22:02:19 +07:00
|
|
|
g_set_error_literal (error,
|
|
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
libnm/wifi: rework NMSetting8021xAuthFlags to explicitly disable TLS version
The wpa_supplicant API supports to enable/disable each TLS version
individually, or leave it at the default. Currently, the default
means to enable a TLS version, thus, the only meaningful option
for the momemnt means to explicitly disable it.
In the future, supplicant may disable options by default, and
the inverse option can become interesting to configure
"tls_disable_tlsv1_0=0". When that happens, we can solve it by
adding another flag NM_SETTING_802_1X_AUTH_FLAGS_TLS_1_0_ENABLE.
Change the previous behavior of the NMSetting8021xAuthFlags.
Previously, when not specifying TLS_DISABLE_DEFAULT, all
options were unspecified. On the other hand, when specifying
a single TLS disable flag, all versions were explicitly enabled
or disabled.
Instead, change the meaning of the disable flags. When present,
it explicitly disables an option. But it does not explicitly enable
it.
2017-02-17 15:19:42 +01:00
|
|
|
_("invalid auth flags"));
|
2017-02-08 22:02:19 +07:00
|
|
|
g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE1_AUTH_FLAGS);
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
2018-08-31 21:53:35 +02:00
|
|
|
if (!NM_IN_STRSET (priv->phase2_auth, NULL,
|
|
|
|
|
"pap",
|
|
|
|
|
"chap",
|
|
|
|
|
"mschap",
|
|
|
|
|
"mschapv2",
|
|
|
|
|
"gtc",
|
|
|
|
|
"otp",
|
|
|
|
|
"md5",
|
|
|
|
|
"tls")) {
|
2014-07-24 08:53:33 -04:00
|
|
|
g_set_error (error,
|
libnm-core: merge NMSetting*Error into NMConnectionError
Each setting type was defining its own error type, but most of them
had exactly the same three errors ("unknown", "missing property", and
"invalid property"), and none of the other values was of much use
programmatically anyway.
So, this commit merges NMSettingError, NMSettingAdslError, etc, all
into NMConnectionError. (The reason for merging into NMConnectionError
rather than NMSettingError is that we also already have
"NMSettingsError", for errors related to the settings service, so
"NMConnectionError" is a less-confusable name for settings/connection
errors than "NMSettingError".)
Also, make sure that all of the affected error messages are localized,
and (where appropriate) prefix them with the relevant property name.
Renamed error codes:
NM_SETTING_ERROR_PROPERTY_NOT_FOUND -> NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND
NM_SETTING_ERROR_PROPERTY_NOT_SECRET -> NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET
Remapped error codes:
NM_SETTING_*_ERROR_MISSING_PROPERTY -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_*_ERROR_INVALID_PROPERTY -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_INVALID_SETTING
NM_SETTING_BOND_ERROR_INVALID_OPTION -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BOND_ERROR_MISSING_OPTION -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_CONNECTION_ERROR_SLAVE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_VLAN_ERROR_INVALID_PARENT -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND -> NM_CONNECTION_ERROR_MISSING_PROPERTY
Dropped error codes (were previously defined but unused):
NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED
NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED
NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING
NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING
NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING
2014-10-20 13:52:23 -04:00
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
2014-07-24 08:53:33 -04:00
|
|
|
_("'%s' is not a valid value for the property"),
|
|
|
|
|
priv->phase2_auth);
|
|
|
|
|
g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE2_AUTH);
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
2018-08-31 21:53:35 +02:00
|
|
|
if (!NM_IN_STRSET (priv->phase2_autheap, NULL,
|
|
|
|
|
"md5",
|
|
|
|
|
"mschapv2",
|
|
|
|
|
"otp",
|
|
|
|
|
"gtc",
|
|
|
|
|
"tls")) {
|
2014-07-24 08:53:33 -04:00
|
|
|
g_set_error (error,
|
libnm-core: merge NMSetting*Error into NMConnectionError
Each setting type was defining its own error type, but most of them
had exactly the same three errors ("unknown", "missing property", and
"invalid property"), and none of the other values was of much use
programmatically anyway.
So, this commit merges NMSettingError, NMSettingAdslError, etc, all
into NMConnectionError. (The reason for merging into NMConnectionError
rather than NMSettingError is that we also already have
"NMSettingsError", for errors related to the settings service, so
"NMConnectionError" is a less-confusable name for settings/connection
errors than "NMSettingError".)
Also, make sure that all of the affected error messages are localized,
and (where appropriate) prefix them with the relevant property name.
Renamed error codes:
NM_SETTING_ERROR_PROPERTY_NOT_FOUND -> NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND
NM_SETTING_ERROR_PROPERTY_NOT_SECRET -> NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET
Remapped error codes:
NM_SETTING_*_ERROR_MISSING_PROPERTY -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_*_ERROR_INVALID_PROPERTY -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_INVALID_SETTING
NM_SETTING_BOND_ERROR_INVALID_OPTION -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BOND_ERROR_MISSING_OPTION -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_CONNECTION_ERROR_SLAVE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_VLAN_ERROR_INVALID_PARENT -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND -> NM_CONNECTION_ERROR_MISSING_PROPERTY
Dropped error codes (were previously defined but unused):
NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED
NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED
NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING
NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING
NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING
2014-10-20 13:52:23 -04:00
|
|
|
NM_CONNECTION_ERROR,
|
|
|
|
|
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
2014-07-24 08:53:33 -04:00
|
|
|
_("'%s' is not a valid value for the property"),
|
|
|
|
|
priv->phase2_autheap);
|
|
|
|
|
g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, NM_SETTING_802_1X_PHASE2_AUTHEAP);
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
2018-08-31 21:53:35 +02:00
|
|
|
if (!_cert_verify_property (priv->ca_cert,
|
|
|
|
|
NM_SETTING_802_1X_CA_CERT,
|
|
|
|
|
priv->ca_cert_password,
|
|
|
|
|
NM_SETTING_802_1X_CA_CERT_PASSWORD,
|
|
|
|
|
error))
|
2014-07-24 08:53:33 -04:00
|
|
|
return FALSE;
|
2018-08-31 21:53:35 +02:00
|
|
|
if (!_cert_verify_property (priv->phase2_ca_cert,
|
|
|
|
|
NM_SETTING_802_1X_PHASE2_CA_CERT,
|
|
|
|
|
priv->phase2_ca_cert_password,
|
|
|
|
|
NM_SETTING_802_1X_PHASE2_CA_CERT_PASSWORD,
|
|
|
|
|
error))
|
2014-07-24 08:53:33 -04:00
|
|
|
return FALSE;
|
|
|
|
|
|
2018-08-31 21:53:35 +02:00
|
|
|
if (!_cert_verify_property (priv->client_cert,
|
|
|
|
|
NM_SETTING_802_1X_CLIENT_CERT,
|
|
|
|
|
priv->client_cert_password,
|
|
|
|
|
NM_SETTING_802_1X_CLIENT_CERT_PASSWORD,
|
|
|
|
|
error))
|
2014-07-24 08:53:33 -04:00
|
|
|
return FALSE;
|
2018-08-31 21:53:35 +02:00
|
|
|
if (!_cert_verify_property (priv->phase2_client_cert,
|
|
|
|
|
NM_SETTING_802_1X_PHASE2_CLIENT_CERT,
|
|
|
|
|
priv->phase2_client_cert_password,
|
|
|
|
|
NM_SETTING_802_1X_PHASE2_CLIENT_CERT_PASSWORD,
|
|
|
|
|
error))
|
2014-07-24 08:53:33 -04:00
|
|
|
return FALSE;
|
|
|
|
|
|
2018-08-31 21:53:35 +02:00
|
|
|
if (!_cert_verify_property (priv->private_key,
|
|
|
|
|
NM_SETTING_802_1X_PRIVATE_KEY,
|
|
|
|
|
NULL,
|
|
|
|
|
NULL,
|
|
|
|
|
error))
|
2014-07-24 08:53:33 -04:00
|
|
|
return FALSE;
|
2018-08-31 21:53:35 +02:00
|
|
|
if (!_cert_verify_property (priv->phase2_private_key,
|
|
|
|
|
NM_SETTING_802_1X_PHASE2_PRIVATE_KEY,
|
|
|
|
|
NULL,
|
|
|
|
|
NULL,
|
|
|
|
|
error))
|
2014-07-24 08:53:33 -04:00
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
2018-08-31 20:13:39 +02:00
|
|
|
/*****************************************************************************/
|
2014-07-24 08:53:33 -04:00
|
|
|
|
2018-08-31 20:13:39 +02:00
|
|
|
static GPtrArray *
|
|
|
|
|
need_secrets (NMSetting *setting)
|
2014-07-24 08:53:33 -04:00
|
|
|
{
|
2018-08-31 20:13:39 +02:00
|
|
|
NMSetting8021x *self = NM_SETTING_802_1X (setting);
|
2014-07-24 08:53:33 -04:00
|
|
|
NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE (self);
|
2018-08-31 20:13:39 +02:00
|
|
|
GSList *iter;
|
|
|
|
|
GPtrArray *secrets;
|
|
|
|
|
gboolean eap_method_found = FALSE;
|
2014-07-24 08:53:33 -04:00
|
|
|
|
2018-08-31 20:13:39 +02:00
|
|
|
secrets = g_ptr_array_sized_new (4);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
2018-08-31 20:13:39 +02:00
|
|
|
/* Ask each configured EAP method if it needs secrets */
|
|
|
|
|
for (iter = priv->eap; iter && !eap_method_found; iter = g_slist_next (iter)) {
|
|
|
|
|
const char *method = (const char *) iter->data;
|
|
|
|
|
int i;
|
2014-07-24 08:53:33 -04:00
|
|
|
|
2018-08-31 20:13:39 +02:00
|
|
|
for (i = 0; eap_methods_table[i].method; i++) {
|
|
|
|
|
if (eap_methods_table[i].ns_func == NULL)
|
|
|
|
|
continue;
|
|
|
|
|
if (!strcmp (eap_methods_table[i].method, method)) {
|
|
|
|
|
(*eap_methods_table[i].ns_func) (self, secrets, FALSE);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
2018-08-31 20:13:39 +02:00
|
|
|
/* Only break out of the outer loop if this EAP method
|
|
|
|
|
* needed secrets.
|
|
|
|
|
*/
|
|
|
|
|
if (secrets->len > 0)
|
|
|
|
|
eap_method_found = TRUE;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2014-07-24 08:53:33 -04:00
|
|
|
|
2018-08-31 20:13:39 +02:00
|
|
|
if (secrets->len == 0) {
|
|
|
|
|
g_ptr_array_free (secrets, TRUE);
|
2018-08-31 21:53:35 +02:00
|
|
|
return NULL;
|
2018-08-31 20:13:39 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return secrets;
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
2018-08-31 20:13:39 +02:00
|
|
|
/*****************************************************************************/
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
get_property (GObject *object, guint prop_id,
|
|
|
|
|
GValue *value, GParamSpec *pspec)
|
|
|
|
|
{
|
|
|
|
|
NMSetting8021x *setting = NM_SETTING_802_1X (object);
|
|
|
|
|
NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
|
|
|
|
|
|
|
|
|
|
switch (prop_id) {
|
|
|
|
|
case PROP_EAP:
|
|
|
|
|
g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->eap, TRUE));
|
|
|
|
|
break;
|
|
|
|
|
case PROP_IDENTITY:
|
|
|
|
|
g_value_set_string (value, priv->identity);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_ANONYMOUS_IDENTITY:
|
|
|
|
|
g_value_set_string (value, priv->anonymous_identity);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PAC_FILE:
|
|
|
|
|
g_value_set_string (value, priv->pac_file);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_CA_CERT:
|
|
|
|
|
g_value_set_boxed (value, priv->ca_cert);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_CA_CERT_PASSWORD:
|
|
|
|
|
g_value_set_string (value, priv->ca_cert_password);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_CA_CERT_PASSWORD_FLAGS:
|
|
|
|
|
g_value_set_flags (value, priv->ca_cert_password_flags);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_CA_PATH:
|
|
|
|
|
g_value_set_string (value, priv->ca_path);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_SUBJECT_MATCH:
|
|
|
|
|
g_value_set_string (value, priv->subject_match);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_ALTSUBJECT_MATCHES:
|
|
|
|
|
g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->altsubject_matches, TRUE));
|
|
|
|
|
break;
|
|
|
|
|
case PROP_DOMAIN_SUFFIX_MATCH:
|
|
|
|
|
g_value_set_string (value, priv->domain_suffix_match);
|
|
|
|
|
break;
|
2020-03-23 18:22:21 +01:00
|
|
|
case PROP_DOMAIN_MATCH:
|
|
|
|
|
g_value_set_string (value, priv->domain_match);
|
|
|
|
|
break;
|
2018-08-31 20:13:39 +02:00
|
|
|
case PROP_CLIENT_CERT:
|
|
|
|
|
g_value_set_boxed (value, priv->client_cert);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_CLIENT_CERT_PASSWORD:
|
|
|
|
|
g_value_set_string (value, priv->client_cert_password);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_CLIENT_CERT_PASSWORD_FLAGS:
|
|
|
|
|
g_value_set_flags (value, priv->client_cert_password_flags);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PHASE1_PEAPVER:
|
|
|
|
|
g_value_set_string (value, priv->phase1_peapver);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PHASE1_PEAPLABEL:
|
|
|
|
|
g_value_set_string (value, priv->phase1_peaplabel);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PHASE1_FAST_PROVISIONING:
|
|
|
|
|
g_value_set_string (value, priv->phase1_fast_provisioning);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PHASE1_AUTH_FLAGS:
|
|
|
|
|
g_value_set_uint (value, priv->phase1_auth_flags);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PHASE2_AUTH:
|
|
|
|
|
g_value_set_string (value, priv->phase2_auth);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PHASE2_AUTHEAP:
|
|
|
|
|
g_value_set_string (value, priv->phase2_autheap);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PHASE2_CA_CERT:
|
|
|
|
|
g_value_set_boxed (value, priv->phase2_ca_cert);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PHASE2_CA_CERT_PASSWORD:
|
|
|
|
|
g_value_set_string (value, priv->phase2_ca_cert_password);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PHASE2_CA_CERT_PASSWORD_FLAGS:
|
|
|
|
|
g_value_set_flags (value, priv->phase2_ca_cert_password_flags);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PHASE2_CA_PATH:
|
|
|
|
|
g_value_set_string (value, priv->phase2_ca_path);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PHASE2_SUBJECT_MATCH:
|
|
|
|
|
g_value_set_string (value, priv->phase2_subject_match);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PHASE2_ALTSUBJECT_MATCHES:
|
|
|
|
|
g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->phase2_altsubject_matches, TRUE));
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PHASE2_DOMAIN_SUFFIX_MATCH:
|
|
|
|
|
g_value_set_string (value, priv->phase2_domain_suffix_match);
|
|
|
|
|
break;
|
2020-03-23 18:22:21 +01:00
|
|
|
case PROP_PHASE2_DOMAIN_MATCH:
|
|
|
|
|
g_value_set_string (value, priv->phase2_domain_match);
|
|
|
|
|
break;
|
2018-08-31 20:13:39 +02:00
|
|
|
case PROP_PHASE2_CLIENT_CERT:
|
|
|
|
|
g_value_set_boxed (value, priv->phase2_client_cert);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PHASE2_CLIENT_CERT_PASSWORD:
|
|
|
|
|
g_value_set_string (value, priv->phase2_client_cert_password);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PHASE2_CLIENT_CERT_PASSWORD_FLAGS:
|
|
|
|
|
g_value_set_flags (value, priv->phase2_client_cert_password_flags);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PASSWORD:
|
|
|
|
|
g_value_set_string (value, priv->password);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PASSWORD_FLAGS:
|
|
|
|
|
g_value_set_flags (value, priv->password_flags);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PASSWORD_RAW:
|
|
|
|
|
g_value_set_boxed (value, priv->password_raw);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PASSWORD_RAW_FLAGS:
|
|
|
|
|
g_value_set_flags (value, priv->password_raw_flags);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PRIVATE_KEY:
|
|
|
|
|
g_value_set_boxed (value, priv->private_key);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PRIVATE_KEY_PASSWORD:
|
|
|
|
|
g_value_set_string (value, priv->private_key_password);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PRIVATE_KEY_PASSWORD_FLAGS:
|
|
|
|
|
g_value_set_flags (value, priv->private_key_password_flags);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PHASE2_PRIVATE_KEY:
|
|
|
|
|
g_value_set_boxed (value, priv->phase2_private_key);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PHASE2_PRIVATE_KEY_PASSWORD:
|
|
|
|
|
g_value_set_string (value, priv->phase2_private_key_password);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS:
|
|
|
|
|
g_value_set_flags (value, priv->phase2_private_key_password_flags);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PIN:
|
|
|
|
|
g_value_set_string (value, priv->pin);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PIN_FLAGS:
|
|
|
|
|
g_value_set_flags (value, priv->pin_flags);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_SYSTEM_CA_CERTS:
|
|
|
|
|
g_value_set_boolean (value, priv->system_ca_certs);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_AUTH_TIMEOUT:
|
|
|
|
|
g_value_set_int (value, priv->auth_timeout);
|
|
|
|
|
break;
|
2019-07-11 15:52:03 +02:00
|
|
|
case PROP_OPTIONAL:
|
|
|
|
|
g_value_set_boolean (value, priv->optional);
|
|
|
|
|
break;
|
2018-08-31 20:13:39 +02:00
|
|
|
default:
|
|
|
|
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
|
|
|
break;
|
|
|
|
|
}
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
set_property (GObject *object, guint prop_id,
|
|
|
|
|
const GValue *value, GParamSpec *pspec)
|
|
|
|
|
{
|
|
|
|
|
NMSetting8021x *setting = NM_SETTING_802_1X (object);
|
|
|
|
|
NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
|
|
|
|
|
|
|
|
|
|
switch (prop_id) {
|
|
|
|
|
case PROP_EAP:
|
|
|
|
|
g_slist_free_full (priv->eap, g_free);
|
2015-07-01 14:08:51 +02:00
|
|
|
priv->eap = _nm_utils_strv_to_slist (g_value_get_boxed (value), TRUE);
|
2014-07-24 08:53:33 -04:00
|
|
|
break;
|
|
|
|
|
case PROP_IDENTITY:
|
|
|
|
|
g_free (priv->identity);
|
|
|
|
|
priv->identity = g_value_dup_string (value);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_ANONYMOUS_IDENTITY:
|
|
|
|
|
g_free (priv->anonymous_identity);
|
|
|
|
|
priv->anonymous_identity = g_value_dup_string (value);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PAC_FILE:
|
|
|
|
|
g_free (priv->pac_file);
|
|
|
|
|
priv->pac_file = g_value_dup_string (value);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_CA_CERT:
|
2018-08-31 20:41:50 +02:00
|
|
|
g_bytes_unref (priv->ca_cert);
|
2018-08-31 21:04:17 +02:00
|
|
|
priv->ca_cert = g_value_dup_boxed (value);
|
2014-07-24 08:53:33 -04:00
|
|
|
break;
|
2017-02-01 12:53:34 +00:00
|
|
|
case PROP_CA_CERT_PASSWORD:
|
|
|
|
|
g_free (priv->ca_cert_password);
|
|
|
|
|
priv->ca_cert_password = g_value_dup_string (value);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_CA_CERT_PASSWORD_FLAGS:
|
|
|
|
|
priv->ca_cert_password_flags = g_value_get_flags (value);
|
|
|
|
|
break;
|
2014-07-24 08:53:33 -04:00
|
|
|
case PROP_CA_PATH:
|
|
|
|
|
g_free (priv->ca_path);
|
|
|
|
|
priv->ca_path = g_value_dup_string (value);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_SUBJECT_MATCH:
|
|
|
|
|
g_free (priv->subject_match);
|
2016-09-02 15:06:24 +02:00
|
|
|
priv->subject_match = nm_strdup_not_empty (g_value_get_string (value));
|
2014-07-24 08:53:33 -04:00
|
|
|
break;
|
|
|
|
|
case PROP_ALTSUBJECT_MATCHES:
|
|
|
|
|
g_slist_free_full (priv->altsubject_matches, g_free);
|
2015-07-01 14:08:51 +02:00
|
|
|
priv->altsubject_matches = _nm_utils_strv_to_slist (g_value_get_boxed (value), TRUE);
|
2014-07-24 08:53:33 -04:00
|
|
|
break;
|
2016-03-03 22:42:35 +01:00
|
|
|
case PROP_DOMAIN_SUFFIX_MATCH:
|
|
|
|
|
g_free (priv->domain_suffix_match);
|
2016-09-02 15:06:24 +02:00
|
|
|
priv->domain_suffix_match = nm_strdup_not_empty (g_value_get_string (value));
|
2016-03-03 22:42:35 +01:00
|
|
|
break;
|
2020-03-23 18:22:21 +01:00
|
|
|
case PROP_DOMAIN_MATCH:
|
|
|
|
|
g_free (priv->domain_match);
|
|
|
|
|
priv->domain_match = nm_strdup_not_empty (g_value_get_string (value));
|
|
|
|
|
break;
|
2014-07-24 08:53:33 -04:00
|
|
|
case PROP_CLIENT_CERT:
|
2018-08-31 20:41:50 +02:00
|
|
|
g_bytes_unref (priv->client_cert);
|
2018-08-31 21:04:17 +02:00
|
|
|
priv->client_cert = g_value_dup_boxed (value);
|
2014-07-24 08:53:33 -04:00
|
|
|
break;
|
2017-02-01 12:53:34 +00:00
|
|
|
case PROP_CLIENT_CERT_PASSWORD:
|
|
|
|
|
g_free (priv->client_cert_password);
|
|
|
|
|
priv->client_cert_password = g_value_dup_string (value);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_CLIENT_CERT_PASSWORD_FLAGS:
|
|
|
|
|
priv->client_cert_password_flags = g_value_get_flags (value);
|
|
|
|
|
break;
|
2014-07-24 08:53:33 -04:00
|
|
|
case PROP_PHASE1_PEAPVER:
|
|
|
|
|
g_free (priv->phase1_peapver);
|
|
|
|
|
priv->phase1_peapver = g_value_dup_string (value);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PHASE1_PEAPLABEL:
|
|
|
|
|
g_free (priv->phase1_peaplabel);
|
|
|
|
|
priv->phase1_peaplabel = g_value_dup_string (value);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PHASE1_FAST_PROVISIONING:
|
|
|
|
|
g_free (priv->phase1_fast_provisioning);
|
|
|
|
|
priv->phase1_fast_provisioning = g_value_dup_string (value);
|
|
|
|
|
break;
|
2017-02-08 22:02:19 +07:00
|
|
|
case PROP_PHASE1_AUTH_FLAGS:
|
|
|
|
|
priv->phase1_auth_flags = g_value_get_uint (value);
|
|
|
|
|
break;
|
2014-07-24 08:53:33 -04:00
|
|
|
case PROP_PHASE2_AUTH:
|
|
|
|
|
g_free (priv->phase2_auth);
|
|
|
|
|
priv->phase2_auth = g_value_dup_string (value);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PHASE2_AUTHEAP:
|
|
|
|
|
g_free (priv->phase2_autheap);
|
|
|
|
|
priv->phase2_autheap = g_value_dup_string (value);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PHASE2_CA_CERT:
|
2018-08-31 20:41:50 +02:00
|
|
|
g_bytes_unref (priv->phase2_ca_cert);
|
2018-08-31 21:04:17 +02:00
|
|
|
priv->phase2_ca_cert = g_value_dup_boxed (value);
|
2014-07-24 08:53:33 -04:00
|
|
|
break;
|
2017-02-01 12:53:34 +00:00
|
|
|
case PROP_PHASE2_CA_CERT_PASSWORD:
|
|
|
|
|
g_free (priv->phase2_ca_cert_password);
|
|
|
|
|
priv->phase2_ca_cert_password = g_value_dup_string (value);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PHASE2_CA_CERT_PASSWORD_FLAGS:
|
|
|
|
|
priv->phase2_ca_cert_password_flags = g_value_get_flags (value);
|
|
|
|
|
break;
|
2014-07-24 08:53:33 -04:00
|
|
|
case PROP_PHASE2_CA_PATH:
|
|
|
|
|
g_free (priv->phase2_ca_path);
|
|
|
|
|
priv->phase2_ca_path = g_value_dup_string (value);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PHASE2_SUBJECT_MATCH:
|
|
|
|
|
g_free (priv->phase2_subject_match);
|
2016-09-02 15:06:24 +02:00
|
|
|
priv->phase2_subject_match = nm_strdup_not_empty (g_value_get_string (value));
|
2014-07-24 08:53:33 -04:00
|
|
|
break;
|
|
|
|
|
case PROP_PHASE2_ALTSUBJECT_MATCHES:
|
|
|
|
|
g_slist_free_full (priv->phase2_altsubject_matches, g_free);
|
2015-07-01 14:08:51 +02:00
|
|
|
priv->phase2_altsubject_matches = _nm_utils_strv_to_slist (g_value_get_boxed (value), TRUE);
|
2014-07-24 08:53:33 -04:00
|
|
|
break;
|
2016-03-03 22:42:35 +01:00
|
|
|
case PROP_PHASE2_DOMAIN_SUFFIX_MATCH:
|
|
|
|
|
g_free (priv->phase2_domain_suffix_match);
|
2016-09-02 15:06:24 +02:00
|
|
|
priv->phase2_domain_suffix_match = nm_strdup_not_empty (g_value_get_string (value));
|
2016-03-03 22:42:35 +01:00
|
|
|
break;
|
2020-03-23 18:22:21 +01:00
|
|
|
case PROP_PHASE2_DOMAIN_MATCH:
|
|
|
|
|
g_free (priv->phase2_domain_match);
|
|
|
|
|
priv->phase2_domain_match = nm_strdup_not_empty (g_value_get_string (value));
|
|
|
|
|
break;
|
2014-07-24 08:53:33 -04:00
|
|
|
case PROP_PHASE2_CLIENT_CERT:
|
2018-08-31 20:41:50 +02:00
|
|
|
g_bytes_unref (priv->phase2_client_cert);
|
2018-08-31 21:04:17 +02:00
|
|
|
priv->phase2_client_cert = g_value_dup_boxed (value);
|
2014-07-24 08:53:33 -04:00
|
|
|
break;
|
2017-02-01 12:53:34 +00:00
|
|
|
case PROP_PHASE2_CLIENT_CERT_PASSWORD:
|
|
|
|
|
g_free (priv->phase2_client_cert_password);
|
|
|
|
|
priv->phase2_client_cert_password = g_value_dup_string (value);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PHASE2_CLIENT_CERT_PASSWORD_FLAGS:
|
|
|
|
|
priv->phase2_client_cert_password_flags = g_value_get_flags (value);
|
|
|
|
|
break;
|
2014-07-24 08:53:33 -04:00
|
|
|
case PROP_PASSWORD:
|
|
|
|
|
g_free (priv->password);
|
|
|
|
|
priv->password = g_value_dup_string (value);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PASSWORD_FLAGS:
|
2014-06-26 16:47:46 -04:00
|
|
|
priv->password_flags = g_value_get_flags (value);
|
2014-07-24 08:53:33 -04:00
|
|
|
break;
|
|
|
|
|
case PROP_PASSWORD_RAW:
|
2018-08-31 20:41:50 +02:00
|
|
|
g_bytes_unref (priv->password_raw);
|
2014-07-24 08:53:33 -04:00
|
|
|
priv->password_raw = g_value_dup_boxed (value);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PASSWORD_RAW_FLAGS:
|
2014-06-26 16:47:46 -04:00
|
|
|
priv->password_raw_flags = g_value_get_flags (value);
|
2014-07-24 08:53:33 -04:00
|
|
|
break;
|
|
|
|
|
case PROP_PRIVATE_KEY:
|
2018-08-31 20:41:50 +02:00
|
|
|
g_bytes_unref (priv->private_key);
|
2018-08-31 21:04:17 +02:00
|
|
|
priv->private_key = g_value_dup_boxed (value);
|
2014-07-24 08:53:33 -04:00
|
|
|
break;
|
|
|
|
|
case PROP_PRIVATE_KEY_PASSWORD:
|
2018-08-30 17:21:26 +02:00
|
|
|
nm_free_secret (priv->private_key_password);
|
2014-07-24 08:53:33 -04:00
|
|
|
priv->private_key_password = g_value_dup_string (value);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PRIVATE_KEY_PASSWORD_FLAGS:
|
2014-06-26 16:47:46 -04:00
|
|
|
priv->private_key_password_flags = g_value_get_flags (value);
|
2014-07-24 08:53:33 -04:00
|
|
|
break;
|
|
|
|
|
case PROP_PHASE2_PRIVATE_KEY:
|
2018-08-31 20:41:50 +02:00
|
|
|
g_bytes_unref (priv->phase2_private_key);
|
2018-08-31 21:04:17 +02:00
|
|
|
priv->phase2_private_key = g_value_dup_boxed (value);
|
2014-07-24 08:53:33 -04:00
|
|
|
break;
|
|
|
|
|
case PROP_PHASE2_PRIVATE_KEY_PASSWORD:
|
2018-08-30 17:21:26 +02:00
|
|
|
nm_free_secret (priv->phase2_private_key_password);
|
2014-07-24 08:53:33 -04:00
|
|
|
priv->phase2_private_key_password = g_value_dup_string (value);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS:
|
2014-06-26 16:47:46 -04:00
|
|
|
priv->phase2_private_key_password_flags = g_value_get_flags (value);
|
2014-07-24 08:53:33 -04:00
|
|
|
break;
|
|
|
|
|
case PROP_PIN:
|
|
|
|
|
g_free (priv->pin);
|
|
|
|
|
priv->pin = g_value_dup_string (value);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PIN_FLAGS:
|
2014-06-26 16:47:46 -04:00
|
|
|
priv->pin_flags = g_value_get_flags (value);
|
2014-07-24 08:53:33 -04:00
|
|
|
break;
|
|
|
|
|
case PROP_SYSTEM_CA_CERTS:
|
|
|
|
|
priv->system_ca_certs = g_value_get_boolean (value);
|
|
|
|
|
break;
|
2017-01-19 17:25:19 +01:00
|
|
|
case PROP_AUTH_TIMEOUT:
|
|
|
|
|
priv->auth_timeout = g_value_get_int (value);
|
|
|
|
|
break;
|
2019-07-11 15:52:03 +02:00
|
|
|
case PROP_OPTIONAL:
|
|
|
|
|
priv->optional = g_value_get_boolean (value);
|
|
|
|
|
break;
|
2014-07-24 08:53:33 -04:00
|
|
|
default:
|
|
|
|
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2018-08-31 20:13:39 +02:00
|
|
|
/*****************************************************************************/
|
|
|
|
|
|
2014-07-24 08:53:33 -04:00
|
|
|
static void
|
2018-08-31 20:13:39 +02:00
|
|
|
nm_setting_802_1x_init (NMSetting8021x *setting)
|
2014-07-24 08:53:33 -04:00
|
|
|
{
|
2018-08-31 20:13:39 +02:00
|
|
|
}
|
2014-07-24 08:53:33 -04:00
|
|
|
|
2018-08-31 20:13:39 +02:00
|
|
|
/**
|
|
|
|
|
* nm_setting_802_1x_new:
|
|
|
|
|
*
|
|
|
|
|
* Creates a new #NMSetting8021x object with default values.
|
|
|
|
|
*
|
|
|
|
|
* Returns: the new empty #NMSetting8021x object
|
|
|
|
|
**/
|
|
|
|
|
NMSetting *
|
|
|
|
|
nm_setting_802_1x_new (void)
|
|
|
|
|
{
|
|
|
|
|
return (NMSetting *) g_object_new (NM_TYPE_SETTING_802_1X, NULL);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
finalize (GObject *object)
|
|
|
|
|
{
|
|
|
|
|
NMSetting8021x *self = NM_SETTING_802_1X (object);
|
|
|
|
|
NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE (self);
|
|
|
|
|
|
|
|
|
|
g_free (priv->identity);
|
|
|
|
|
g_free (priv->anonymous_identity);
|
|
|
|
|
g_free (priv->ca_path);
|
|
|
|
|
g_free (priv->subject_match);
|
|
|
|
|
g_free (priv->domain_suffix_match);
|
|
|
|
|
g_free (priv->phase1_peapver);
|
|
|
|
|
g_free (priv->phase1_peaplabel);
|
|
|
|
|
g_free (priv->phase1_fast_provisioning);
|
|
|
|
|
g_free (priv->phase2_auth);
|
|
|
|
|
g_free (priv->phase2_autheap);
|
|
|
|
|
g_free (priv->phase2_ca_path);
|
|
|
|
|
g_free (priv->phase2_subject_match);
|
|
|
|
|
g_free (priv->phase2_domain_suffix_match);
|
|
|
|
|
g_free (priv->password);
|
2018-08-31 20:41:50 +02:00
|
|
|
g_bytes_unref (priv->password_raw);
|
2018-08-31 20:13:39 +02:00
|
|
|
g_free (priv->pin);
|
|
|
|
|
|
|
|
|
|
g_slist_free_full (priv->eap, g_free);
|
|
|
|
|
g_slist_free_full (priv->altsubject_matches, g_free);
|
|
|
|
|
g_slist_free_full (priv->phase2_altsubject_matches, g_free);
|
|
|
|
|
|
2018-08-31 20:41:50 +02:00
|
|
|
g_bytes_unref (priv->ca_cert);
|
2018-08-31 20:13:39 +02:00
|
|
|
g_free (priv->ca_cert_password);
|
2018-08-31 20:41:50 +02:00
|
|
|
g_bytes_unref (priv->client_cert);
|
2018-08-31 20:13:39 +02:00
|
|
|
g_free (priv->client_cert_password);
|
2018-08-31 20:41:50 +02:00
|
|
|
g_bytes_unref (priv->private_key);
|
2018-08-31 20:13:39 +02:00
|
|
|
nm_free_secret (priv->private_key_password);
|
2018-08-31 20:41:50 +02:00
|
|
|
g_bytes_unref (priv->phase2_ca_cert);
|
2018-08-31 20:13:39 +02:00
|
|
|
g_free (priv->phase2_ca_cert_password);
|
2018-08-31 20:41:50 +02:00
|
|
|
g_bytes_unref (priv->phase2_client_cert);
|
2018-08-31 20:13:39 +02:00
|
|
|
g_free (priv->phase2_client_cert_password);
|
2018-08-31 20:41:50 +02:00
|
|
|
g_bytes_unref (priv->phase2_private_key);
|
2018-08-31 20:13:39 +02:00
|
|
|
nm_free_secret (priv->phase2_private_key_password);
|
|
|
|
|
|
|
|
|
|
G_OBJECT_CLASS (nm_setting_802_1x_parent_class)->finalize (object);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
libnm/trivial: cleanup variable names in settings' class-init functions
- Don't use @parent_class name. This local variable (and @object_class) is
the class instance up-cast to the pointer types of the parents. The point
here is not that it is the direct parent. The point is, that it's the
NMSettingClass type.
Also, it can only be used inconsistently, in face of NMSettingIP4Config,
who's parent type is NMSettingIPConfig. Clearly, inside
nm-setting-ip4-config.c we wouldn't want to use the "parent_class"
name. Consistently rename @parent_class to @setting_class.
- Also rename the pointer to the own class to @klass. "setting_class" is also the
wrong name for that, because the right name would be something like
"setting_6lowpan_class".
However, "klass" is preferred over the latter, because we commonly create new
GObject implementations by copying an existing one. Generic names like "klass"
and "self" inside a type implementation make that simpler.
- drop useless comments like
/* virtual functions */
/* Properties */
It's better to logically and visually structure the code, and avoid trival
remarks about that. They only end up being used inconsistently. If you
even need a stronger visual separator, then an 80 char /****/ line
should be preferred.
2018-07-28 10:43:21 +02:00
|
|
|
nm_setting_802_1x_class_init (NMSetting8021xClass *klass)
|
2014-07-24 08:53:33 -04:00
|
|
|
{
|
libnm/trivial: cleanup variable names in settings' class-init functions
- Don't use @parent_class name. This local variable (and @object_class) is
the class instance up-cast to the pointer types of the parents. The point
here is not that it is the direct parent. The point is, that it's the
NMSettingClass type.
Also, it can only be used inconsistently, in face of NMSettingIP4Config,
who's parent type is NMSettingIPConfig. Clearly, inside
nm-setting-ip4-config.c we wouldn't want to use the "parent_class"
name. Consistently rename @parent_class to @setting_class.
- Also rename the pointer to the own class to @klass. "setting_class" is also the
wrong name for that, because the right name would be something like
"setting_6lowpan_class".
However, "klass" is preferred over the latter, because we commonly create new
GObject implementations by copying an existing one. Generic names like "klass"
and "self" inside a type implementation make that simpler.
- drop useless comments like
/* virtual functions */
/* Properties */
It's better to logically and visually structure the code, and avoid trival
remarks about that. They only end up being used inconsistently. If you
even need a stronger visual separator, then an 80 char /****/ line
should be preferred.
2018-07-28 10:43:21 +02:00
|
|
|
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
|
|
|
|
NMSettingClass *setting_class = NM_SETTING_CLASS (klass);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
libnm/trivial: cleanup variable names in settings' class-init functions
- Don't use @parent_class name. This local variable (and @object_class) is
the class instance up-cast to the pointer types of the parents. The point
here is not that it is the direct parent. The point is, that it's the
NMSettingClass type.
Also, it can only be used inconsistently, in face of NMSettingIP4Config,
who's parent type is NMSettingIPConfig. Clearly, inside
nm-setting-ip4-config.c we wouldn't want to use the "parent_class"
name. Consistently rename @parent_class to @setting_class.
- Also rename the pointer to the own class to @klass. "setting_class" is also the
wrong name for that, because the right name would be something like
"setting_6lowpan_class".
However, "klass" is preferred over the latter, because we commonly create new
GObject implementations by copying an existing one. Generic names like "klass"
and "self" inside a type implementation make that simpler.
- drop useless comments like
/* virtual functions */
/* Properties */
It's better to logically and visually structure the code, and avoid trival
remarks about that. They only end up being used inconsistently. If you
even need a stronger visual separator, then an 80 char /****/ line
should be preferred.
2018-07-28 10:43:21 +02:00
|
|
|
g_type_class_add_private (klass, sizeof (NMSetting8021xPrivate));
|
2014-07-24 08:53:33 -04:00
|
|
|
|
|
|
|
|
object_class->get_property = get_property;
|
2019-01-11 08:32:54 +01:00
|
|
|
object_class->set_property = set_property;
|
2014-07-24 08:53:33 -04:00
|
|
|
object_class->finalize = finalize;
|
|
|
|
|
|
libnm/trivial: cleanup variable names in settings' class-init functions
- Don't use @parent_class name. This local variable (and @object_class) is
the class instance up-cast to the pointer types of the parents. The point
here is not that it is the direct parent. The point is, that it's the
NMSettingClass type.
Also, it can only be used inconsistently, in face of NMSettingIP4Config,
who's parent type is NMSettingIPConfig. Clearly, inside
nm-setting-ip4-config.c we wouldn't want to use the "parent_class"
name. Consistently rename @parent_class to @setting_class.
- Also rename the pointer to the own class to @klass. "setting_class" is also the
wrong name for that, because the right name would be something like
"setting_6lowpan_class".
However, "klass" is preferred over the latter, because we commonly create new
GObject implementations by copying an existing one. Generic names like "klass"
and "self" inside a type implementation make that simpler.
- drop useless comments like
/* virtual functions */
/* Properties */
It's better to logically and visually structure the code, and avoid trival
remarks about that. They only end up being used inconsistently. If you
even need a stronger visual separator, then an 80 char /****/ line
should be preferred.
2018-07-28 10:43:21 +02:00
|
|
|
setting_class->verify = verify;
|
|
|
|
|
setting_class->need_secrets = need_secrets;
|
2014-07-24 08:53:33 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:eap:
|
|
|
|
|
*
|
|
|
|
|
* The allowed EAP method to be used when authenticating to the network with
|
|
|
|
|
* 802.1x. Valid methods are: "leap", "md5", "tls", "peap", "ttls", "pwd",
|
|
|
|
|
* and "fast". Each method requires different configuration using the
|
|
|
|
|
* properties of this setting; refer to wpa_supplicant documentation for the
|
|
|
|
|
* allowed combinations.
|
|
|
|
|
**/
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: eap
|
|
|
|
|
* variable: IEEE_8021X_EAP_METHODS(+)
|
|
|
|
|
* values: "LEAP", "PWD", "TLS", "PEAP", "TTLS", "FAST"
|
|
|
|
|
* description: EAP method for 802.1X authentication.
|
|
|
|
|
* example: IEEE_8021X_EAP_METHODS=PEAP
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_EAP] =
|
|
|
|
|
g_param_spec_boxed (NM_SETTING_802_1X_EAP, "", "",
|
|
|
|
|
G_TYPE_STRV,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:identity:
|
|
|
|
|
*
|
|
|
|
|
* Identity string for EAP authentication methods. Often the user's user or
|
|
|
|
|
* login name.
|
|
|
|
|
**/
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: identity
|
|
|
|
|
* variable: IEEE_8021X_IDENTITY(+)
|
|
|
|
|
* description: Identity for EAP authentication methods.
|
|
|
|
|
* example: IEEE_8021X_IDENTITY=itsme
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_IDENTITY] =
|
|
|
|
|
g_param_spec_string (NM_SETTING_802_1X_IDENTITY, "", "",
|
|
|
|
|
NULL,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:anonymous-identity:
|
|
|
|
|
*
|
|
|
|
|
* Anonymous identity string for EAP authentication methods. Used as the
|
|
|
|
|
* unencrypted identity with EAP types that support different tunneled
|
|
|
|
|
* identity like EAP-TTLS.
|
|
|
|
|
**/
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: anonymous-identity
|
|
|
|
|
* variable: IEEE_8021X_ANON_IDENTITY(+)
|
|
|
|
|
* description: Anonymous identity for EAP authentication methods.
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_ANONYMOUS_IDENTITY] =
|
|
|
|
|
g_param_spec_string (NM_SETTING_802_1X_ANONYMOUS_IDENTITY, "", "",
|
|
|
|
|
NULL,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:pac-file:
|
|
|
|
|
*
|
|
|
|
|
* UTF-8 encoded file path containing PAC for EAP-FAST.
|
|
|
|
|
**/
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: pac-file
|
|
|
|
|
* variable: IEEE_8021X_PAC_FILE(+)
|
|
|
|
|
* description: File with PAC (Protected Access Credential) for EAP-FAST.
|
|
|
|
|
* example: IEEE_8021X_PAC_FILE=/home/joe/my-fast.pac
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_PAC_FILE] =
|
|
|
|
|
g_param_spec_string (NM_SETTING_802_1X_PAC_FILE, "", "",
|
|
|
|
|
NULL,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:ca-cert:
|
|
|
|
|
*
|
|
|
|
|
* Contains the CA certificate if used by the EAP method specified in the
|
|
|
|
|
* #NMSetting8021x:eap property.
|
|
|
|
|
*
|
2020-05-26 17:28:32 +02:00
|
|
|
* Certificate data is specified using a "scheme"; three are currently
|
|
|
|
|
* supported: blob, path and pkcs#11 URL. When using the blob scheme this property
|
|
|
|
|
* should be set to the certificate's DER encoded data. When using the path
|
|
|
|
|
* scheme, this property should be set to the full UTF-8 encoded path of the
|
|
|
|
|
* certificate, prefixed with the string "file://" and ending with a terminating
|
|
|
|
|
* NUL byte.
|
|
|
|
|
* This property can be unset even if the EAP method supports CA certificates,
|
2014-07-24 08:53:33 -04:00
|
|
|
* but this allows man-in-the-middle attacks and is NOT recommended.
|
|
|
|
|
*
|
2020-05-26 17:28:32 +02:00
|
|
|
* Note that enabling NMSetting8021x:system-ca-certs will override this
|
|
|
|
|
* setting to use the built-in path, if the built-in path is not a directory.
|
|
|
|
|
*
|
2014-07-24 08:53:33 -04:00
|
|
|
* Setting this property directly is discouraged; use the
|
|
|
|
|
* nm_setting_802_1x_set_ca_cert() function instead.
|
|
|
|
|
**/
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: ca-cert
|
|
|
|
|
* variable: IEEE_8021X_CA_CERT(+)
|
|
|
|
|
* description: CA certificate for EAP.
|
|
|
|
|
* example: IEEE_8021X_CA_CERT=/home/joe/cacert.crt
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_CA_CERT] =
|
|
|
|
|
g_param_spec_boxed (NM_SETTING_802_1X_CA_CERT, "", "",
|
|
|
|
|
G_TYPE_BYTES,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
2017-02-01 12:53:34 +00:00
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:ca-cert-password:
|
|
|
|
|
*
|
|
|
|
|
* The password used to access the CA certificate stored in
|
|
|
|
|
* #NMSetting8021x:ca-cert property. Only makes sense if the certificate
|
|
|
|
|
* is stored on a PKCS#<!-- -->11 token that requires a login.
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.8
|
|
|
|
|
**/
|
|
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_CA_CERT_PASSWORD] =
|
|
|
|
|
g_param_spec_string (NM_SETTING_802_1X_CA_CERT_PASSWORD, "", "",
|
|
|
|
|
NULL,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
NM_SETTING_PARAM_SECRET |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2017-02-01 12:53:34 +00:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:ca-cert-password-flags:
|
|
|
|
|
*
|
|
|
|
|
* Flags indicating how to handle the #NMSetting8021x:ca-cert-password property.
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.8
|
|
|
|
|
**/
|
|
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_CA_CERT_PASSWORD_FLAGS] =
|
|
|
|
|
g_param_spec_flags (NM_SETTING_802_1X_CA_CERT_PASSWORD_FLAGS, "", "",
|
|
|
|
|
NM_TYPE_SETTING_SECRET_FLAGS,
|
|
|
|
|
NM_SETTING_SECRET_FLAG_NONE,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2017-02-01 12:53:34 +00:00
|
|
|
|
2014-07-24 08:53:33 -04:00
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:ca-path:
|
|
|
|
|
*
|
|
|
|
|
* UTF-8 encoded path to a directory containing PEM or DER formatted
|
|
|
|
|
* certificates to be added to the verification chain in addition to the
|
|
|
|
|
* certificate specified in the #NMSetting8021x:ca-cert property.
|
2020-05-26 17:28:32 +02:00
|
|
|
*
|
|
|
|
|
* If NMSetting8021x:system-ca-certs is enabled and the built-in CA
|
|
|
|
|
* path is an existing directory, then this setting is ignored.
|
2014-07-24 08:53:33 -04:00
|
|
|
**/
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: ca-path
|
2020-05-26 17:28:32 +02:00
|
|
|
* variable: IEEE_8021X_CA_PATH(+)
|
|
|
|
|
* description: The search path for the certificate.
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_CA_PATH] =
|
|
|
|
|
g_param_spec_string (NM_SETTING_802_1X_CA_PATH, "", "",
|
|
|
|
|
NULL,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:subject-match:
|
|
|
|
|
*
|
|
|
|
|
* Substring to be matched against the subject of the certificate presented
|
|
|
|
|
* by the authentication server. When unset, no verification of the
|
2016-03-03 22:42:35 +01:00
|
|
|
* authentication server certificate's subject is performed. This property
|
|
|
|
|
* provides little security, if any, and its use is deprecated in favor of
|
|
|
|
|
* NMSetting8021x:domain-suffix-match.
|
2014-07-24 08:53:33 -04:00
|
|
|
**/
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: subject-match
|
|
|
|
|
* variable: IEEE_8021X_SUBJECT_MATCH(+)
|
|
|
|
|
* description: Substring to match subject of server certificate against.
|
|
|
|
|
* example: IEEE_8021X_SUBJECT_MATCH="Red Hat"
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_SUBJECT_MATCH] =
|
|
|
|
|
g_param_spec_string (NM_SETTING_802_1X_SUBJECT_MATCH, "", "",
|
|
|
|
|
NULL,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:altsubject-matches:
|
|
|
|
|
*
|
|
|
|
|
* List of strings to be matched against the altSubjectName of the
|
|
|
|
|
* certificate presented by the authentication server. If the list is empty,
|
|
|
|
|
* no verification of the server certificate's altSubjectName is performed.
|
|
|
|
|
**/
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
/* ---ifcfg-rh---
|
2015-01-29 07:00:58 -05:00
|
|
|
* property: altsubject-matches
|
|
|
|
|
* variable: IEEE_8021X_ALTSUBJECT_MATCHES(+)
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
* description: List of strings to be matched against the altSubjectName.
|
|
|
|
|
* example: IEEE_8021X_ALTSUBJECT_MATCHES="s1.domain.cc"
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_ALTSUBJECT_MATCHES] =
|
|
|
|
|
g_param_spec_boxed (NM_SETTING_802_1X_ALTSUBJECT_MATCHES, "", "",
|
|
|
|
|
G_TYPE_STRV,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
2016-03-03 22:42:35 +01:00
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:domain-suffix-match:
|
|
|
|
|
*
|
|
|
|
|
* Constraint for server domain name. If set, this FQDN is used as a suffix
|
|
|
|
|
* match requirement for dNSName element(s) of the certificate presented by
|
|
|
|
|
* the authentication server. If a matching dNSName is found, this
|
|
|
|
|
* constraint is met. If no dNSName values are present, this constraint is
|
|
|
|
|
* matched against SubjectName CN using same suffix match comparison.
|
2020-03-23 18:22:21 +01:00
|
|
|
* Since version 1.24, multiple valid FQDNs can be passed as a ";" delimited
|
|
|
|
|
* list.
|
2016-03-03 22:42:35 +01:00
|
|
|
*
|
|
|
|
|
* Since: 1.2
|
|
|
|
|
**/
|
2016-03-04 10:39:26 +01:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: domain-suffix-match
|
|
|
|
|
* description: Suffix to match domain of server certificate against.
|
|
|
|
|
* variable: IEEE_8021X_DOMAIN_SUFFIX_MATCH(+)
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_DOMAIN_SUFFIX_MATCH] =
|
|
|
|
|
g_param_spec_string (NM_SETTING_802_1X_DOMAIN_SUFFIX_MATCH, "", "",
|
|
|
|
|
NULL,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2016-03-03 22:42:35 +01:00
|
|
|
|
2020-03-23 18:22:21 +01:00
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:domain-match:
|
|
|
|
|
*
|
|
|
|
|
* Constraint for server domain name. If set, this list of FQDNs is used as
|
|
|
|
|
* a match requirement for dNSName element(s) of the certificate presented
|
|
|
|
|
* by the authentication server. If a matching dNSName is found, this
|
|
|
|
|
* constraint is met. If no dNSName values are present, this constraint is
|
|
|
|
|
* matched against SubjectName CN using the same comparison.
|
|
|
|
|
* Multiple valid FQDNs can be passed as a ";" delimited list.
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.24
|
|
|
|
|
**/
|
|
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: domain-match
|
|
|
|
|
* description: Value to match domain of server certificate against.
|
|
|
|
|
* variable: IEEE_8021X_DOMAIN_MATCH(+)
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
|
|
|
|
obj_properties[PROP_DOMAIN_MATCH] =
|
|
|
|
|
g_param_spec_string (NM_SETTING_802_1X_DOMAIN_MATCH, "", "",
|
|
|
|
|
NULL,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
|
|
|
|
|
2014-07-24 08:53:33 -04:00
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:client-cert:
|
|
|
|
|
*
|
|
|
|
|
* Contains the client certificate if used by the EAP method specified in
|
|
|
|
|
* the #NMSetting8021x:eap property.
|
|
|
|
|
*
|
|
|
|
|
* Certificate data is specified using a "scheme"; two are currently
|
|
|
|
|
* supported: blob and path. When using the blob scheme (which is backwards
|
|
|
|
|
* compatible with NM 0.7.x) this property should be set to the
|
|
|
|
|
* certificate's DER encoded data. When using the path scheme, this property
|
|
|
|
|
* should be set to the full UTF-8 encoded path of the certificate, prefixed
|
|
|
|
|
* with the string "file://" and ending with a terminating NUL byte.
|
|
|
|
|
*
|
|
|
|
|
* Setting this property directly is discouraged; use the
|
|
|
|
|
* nm_setting_802_1x_set_client_cert() function instead.
|
|
|
|
|
**/
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: client-cert
|
|
|
|
|
* variable: IEEE_8021X_CLIENT_CERT(+)
|
|
|
|
|
* description: Client certificate for EAP.
|
|
|
|
|
* example: IEEE_8021X_CLIENT_CERT=/home/joe/mycert.crt
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_CLIENT_CERT] =
|
|
|
|
|
g_param_spec_boxed (NM_SETTING_802_1X_CLIENT_CERT, "", "",
|
|
|
|
|
G_TYPE_BYTES,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
2017-02-01 12:53:34 +00:00
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:client-cert-password:
|
|
|
|
|
*
|
|
|
|
|
* The password used to access the client certificate stored in
|
|
|
|
|
* #NMSetting8021x:client-cert property. Only makes sense if the certificate
|
|
|
|
|
* is stored on a PKCS#<!-- -->11 token that requires a login.
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.8
|
|
|
|
|
**/
|
|
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_CLIENT_CERT_PASSWORD] =
|
|
|
|
|
g_param_spec_string (NM_SETTING_802_1X_CLIENT_CERT_PASSWORD, "", "",
|
|
|
|
|
NULL,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
NM_SETTING_PARAM_SECRET |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2017-02-01 12:53:34 +00:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:client-cert-password-flags:
|
|
|
|
|
*
|
|
|
|
|
* Flags indicating how to handle the #NMSetting8021x:client-cert-password property.
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.8
|
|
|
|
|
**/
|
|
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_CLIENT_CERT_PASSWORD_FLAGS] =
|
|
|
|
|
g_param_spec_flags (NM_SETTING_802_1X_CLIENT_CERT_PASSWORD_FLAGS, "", "",
|
|
|
|
|
NM_TYPE_SETTING_SECRET_FLAGS,
|
|
|
|
|
NM_SETTING_SECRET_FLAG_NONE,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2017-02-01 12:53:34 +00:00
|
|
|
|
2014-07-24 08:53:33 -04:00
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:phase1-peapver:
|
|
|
|
|
*
|
|
|
|
|
* Forces which PEAP version is used when PEAP is set as the EAP method in
|
|
|
|
|
* the #NMSetting8021x:eap property. When unset, the version reported by
|
|
|
|
|
* the server will be used. Sometimes when using older RADIUS servers, it
|
|
|
|
|
* is necessary to force the client to use a particular PEAP version. To do
|
|
|
|
|
* so, this property may be set to "0" or "1" to force that specific PEAP
|
|
|
|
|
* version.
|
|
|
|
|
**/
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: phase1-peapver
|
|
|
|
|
* variable: IEEE_8021X_PEAP_VERSION(+)
|
|
|
|
|
* values: 0, 1
|
|
|
|
|
* description: Use to force a specific PEAP version.
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_PHASE1_PEAPVER] =
|
|
|
|
|
g_param_spec_string (NM_SETTING_802_1X_PHASE1_PEAPVER, "", "",
|
|
|
|
|
NULL,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:phase1-peaplabel:
|
|
|
|
|
*
|
|
|
|
|
* Forces use of the new PEAP label during key derivation. Some RADIUS
|
|
|
|
|
* servers may require forcing the new PEAP label to interoperate with
|
|
|
|
|
* PEAPv1. Set to "1" to force use of the new PEAP label. See the
|
|
|
|
|
* wpa_supplicant documentation for more details.
|
|
|
|
|
**/
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: phase1-peaplabel
|
|
|
|
|
* variable: IEEE_8021X_PEAP_FORCE_NEW_LABEL(+)
|
|
|
|
|
* values: yes, no
|
|
|
|
|
* default: no
|
|
|
|
|
* description: Use to force the new PEAP label during key derivation.
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_PHASE1_PEAPLABEL] =
|
|
|
|
|
g_param_spec_string (NM_SETTING_802_1X_PHASE1_PEAPLABEL, "", "",
|
|
|
|
|
NULL,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:phase1-fast-provisioning:
|
|
|
|
|
*
|
|
|
|
|
* Enables or disables in-line provisioning of EAP-FAST credentials when
|
|
|
|
|
* FAST is specified as the EAP method in the #NMSetting8021x:eap property.
|
|
|
|
|
* Recognized values are "0" (disabled), "1" (allow unauthenticated
|
|
|
|
|
* provisioning), "2" (allow authenticated provisioning), and "3" (allow
|
|
|
|
|
* both authenticated and unauthenticated provisioning). See the
|
|
|
|
|
* wpa_supplicant documentation for more details.
|
|
|
|
|
**/
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: phase1-fast-provisioning
|
|
|
|
|
* variable: IEEE_8021X_FAST_PROVISIONING(+)
|
|
|
|
|
* values: space-separated list of these values [allow-auth, allow-unauth]
|
|
|
|
|
* description: Enable in-line provisioning of EAP-FAST credentials.
|
|
|
|
|
* example: IEEE_8021X_FAST_PROVISIONING="allow-auth allow-unauth"
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_PHASE1_FAST_PROVISIONING] =
|
|
|
|
|
g_param_spec_string (NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING, "", "",
|
|
|
|
|
NULL,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
2017-02-08 22:02:19 +07:00
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:phase1-auth-flags:
|
|
|
|
|
*
|
|
|
|
|
* Specifies authentication flags to use in "phase 1" outer
|
|
|
|
|
* authentication using #NMSetting8021xAuthFlags options.
|
2017-05-28 17:34:31 +03:00
|
|
|
* The individual TLS versions can be explicitly disabled. If a certain
|
libnm/wifi: rework NMSetting8021xAuthFlags to explicitly disable TLS version
The wpa_supplicant API supports to enable/disable each TLS version
individually, or leave it at the default. Currently, the default
means to enable a TLS version, thus, the only meaningful option
for the momemnt means to explicitly disable it.
In the future, supplicant may disable options by default, and
the inverse option can become interesting to configure
"tls_disable_tlsv1_0=0". When that happens, we can solve it by
adding another flag NM_SETTING_802_1X_AUTH_FLAGS_TLS_1_0_ENABLE.
Change the previous behavior of the NMSetting8021xAuthFlags.
Previously, when not specifying TLS_DISABLE_DEFAULT, all
options were unspecified. On the other hand, when specifying
a single TLS disable flag, all versions were explicitly enabled
or disabled.
Instead, change the meaning of the disable flags. When present,
it explicitly disables an option. But it does not explicitly enable
it.
2017-02-17 15:19:42 +01:00
|
|
|
* TLS disable flag is not set, it is up to the supplicant to allow
|
|
|
|
|
* or forbid it. The TLS options map to tls_disable_tlsv1_x settings.
|
|
|
|
|
* See the wpa_supplicant documentation for more details.
|
2017-02-08 22:02:19 +07:00
|
|
|
*
|
|
|
|
|
* Since: 1.8
|
|
|
|
|
*/
|
2017-02-17 22:57:32 +01:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: phase1-auth-flags
|
|
|
|
|
* variable: IEEE_8021X_PHASE1_AUTH_FLAGS(+)
|
|
|
|
|
* values: space-separated list of authentication flags names
|
|
|
|
|
* description: Authentication flags for the supplicant
|
|
|
|
|
* example: IEEE_8021X_PHASE1_AUTH_FLAGS="tls-1-0-disable tls-1-1-disable"
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_PHASE1_AUTH_FLAGS] =
|
|
|
|
|
g_param_spec_uint (NM_SETTING_802_1X_PHASE1_AUTH_FLAGS, "", "",
|
|
|
|
|
0, G_MAXUINT32, NM_SETTING_802_1X_AUTH_FLAGS_NONE,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2017-02-08 22:02:19 +07:00
|
|
|
|
2014-07-24 08:53:33 -04:00
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:phase2-auth:
|
|
|
|
|
*
|
2019-07-11 19:40:18 +02:00
|
|
|
* Specifies the allowed "phase 2" inner non-EAP authentication method when
|
2014-07-24 08:53:33 -04:00
|
|
|
* an EAP method that uses an inner TLS tunnel is specified in the
|
|
|
|
|
* #NMSetting8021x:eap property. Recognized non-EAP "phase 2" methods are
|
|
|
|
|
* "pap", "chap", "mschap", "mschapv2", "gtc", "otp", "md5", and "tls".
|
|
|
|
|
* Each "phase 2" inner method requires specific parameters for successful
|
|
|
|
|
* authentication; see the wpa_supplicant documentation for more details.
|
|
|
|
|
**/
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: phase2-auth
|
|
|
|
|
* variable: IEEE_8021X_INNER_AUTH_METHODS(+)
|
|
|
|
|
* values: "PAP", "CHAP", "MSCHAP", "MSCHAPV2", "GTC", "OTP", "MD5" and "TLS"
|
|
|
|
|
* description: Inner non-EAP authentication methods. IEEE_8021X_INNER_AUTH_METHODS
|
|
|
|
|
* can contain values both for 'phase2-auth' and 'phase2-autheap' properties.
|
|
|
|
|
* example: IEEE_8021X_INNER_AUTH_METHODS=PAP
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_PHASE2_AUTH] =
|
|
|
|
|
g_param_spec_string (NM_SETTING_802_1X_PHASE2_AUTH, "", "",
|
|
|
|
|
NULL,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:phase2-autheap:
|
|
|
|
|
*
|
2019-07-11 19:40:18 +02:00
|
|
|
* Specifies the allowed "phase 2" inner EAP-based authentication method
|
2014-07-24 08:53:33 -04:00
|
|
|
* when an EAP method that uses an inner TLS tunnel is specified in the
|
|
|
|
|
* #NMSetting8021x:eap property. Recognized EAP-based "phase 2" methods are
|
|
|
|
|
* "md5", "mschapv2", "otp", "gtc", and "tls". Each "phase 2" inner method
|
|
|
|
|
* requires specific parameters for successful authentication; see the
|
|
|
|
|
* wpa_supplicant documentation for more details.
|
|
|
|
|
**/
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: phase2-autheap
|
|
|
|
|
* variable: IEEE_8021X_INNER_AUTH_METHODS(+)
|
|
|
|
|
* values: "EAP-MD5", "EAP-MSCHAPV2", "EAP-GTC", "EAP-OTP" and "EAP-TLS"
|
|
|
|
|
* description: Inner EAP-based authentication methods. Note that
|
|
|
|
|
* IEEE_8021X_INNER_AUTH_METHODS is also used for 'phase2-auth' values.
|
|
|
|
|
* example: IEEE_8021X_INNER_AUTH_METHODS="MSCHAPV2 EAP-TLS"
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_PHASE2_AUTHEAP] =
|
|
|
|
|
g_param_spec_string (NM_SETTING_802_1X_PHASE2_AUTHEAP, "", "",
|
|
|
|
|
NULL,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:phase2-ca-cert:
|
|
|
|
|
*
|
|
|
|
|
* Contains the "phase 2" CA certificate if used by the EAP method specified
|
|
|
|
|
* in the #NMSetting8021x:phase2-auth or #NMSetting8021x:phase2-autheap
|
|
|
|
|
* properties.
|
|
|
|
|
*
|
2020-05-26 17:28:32 +02:00
|
|
|
* Certificate data is specified using a "scheme"; three are currently
|
|
|
|
|
* supported: blob, path and pkcs#11 URL. When using the blob scheme this property
|
|
|
|
|
* should be set to the certificate's DER encoded data. When using the path
|
|
|
|
|
* scheme, this property should be set to the full UTF-8 encoded path of the
|
|
|
|
|
* certificate, prefixed with the string "file://" and ending with a terminating
|
|
|
|
|
* NUL byte.
|
|
|
|
|
* This property can be unset even if the EAP method supports CA certificates,
|
2014-07-24 08:53:33 -04:00
|
|
|
* but this allows man-in-the-middle attacks and is NOT recommended.
|
|
|
|
|
*
|
2020-05-26 17:28:32 +02:00
|
|
|
* Note that enabling NMSetting8021x:system-ca-certs will override this
|
|
|
|
|
* setting to use the built-in path, if the built-in path is not a directory.
|
|
|
|
|
*
|
2014-07-24 08:53:33 -04:00
|
|
|
* Setting this property directly is discouraged; use the
|
|
|
|
|
* nm_setting_802_1x_set_phase2_ca_cert() function instead.
|
|
|
|
|
**/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_PHASE2_CA_CERT] =
|
|
|
|
|
g_param_spec_boxed (NM_SETTING_802_1X_PHASE2_CA_CERT, "", "",
|
|
|
|
|
G_TYPE_BYTES,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
2017-02-01 12:53:34 +00:00
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:phase2-ca-cert-password:
|
|
|
|
|
*
|
|
|
|
|
* The password used to access the "phase2" CA certificate stored in
|
|
|
|
|
* #NMSetting8021x:phase2-ca-cert property. Only makes sense if the certificate
|
|
|
|
|
* is stored on a PKCS#<!-- -->11 token that requires a login.
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.8
|
|
|
|
|
**/
|
|
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_PHASE2_CA_CERT_PASSWORD] =
|
|
|
|
|
g_param_spec_string (NM_SETTING_802_1X_PHASE2_CA_CERT_PASSWORD, "", "",
|
|
|
|
|
NULL,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
NM_SETTING_PARAM_SECRET |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2017-02-01 12:53:34 +00:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:phase2-ca-cert-password-flags:
|
|
|
|
|
*
|
|
|
|
|
* Flags indicating how to handle the #NMSetting8021x:phase2-ca-cert-password property.
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.8
|
|
|
|
|
**/
|
|
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_PHASE2_CA_CERT_PASSWORD_FLAGS] =
|
|
|
|
|
g_param_spec_flags (NM_SETTING_802_1X_PHASE2_CA_CERT_PASSWORD_FLAGS, "", "",
|
|
|
|
|
NM_TYPE_SETTING_SECRET_FLAGS,
|
|
|
|
|
NM_SETTING_SECRET_FLAG_NONE,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2017-02-01 12:53:34 +00:00
|
|
|
|
2014-07-24 08:53:33 -04:00
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:phase2-ca-path:
|
|
|
|
|
*
|
|
|
|
|
* UTF-8 encoded path to a directory containing PEM or DER formatted
|
|
|
|
|
* certificates to be added to the verification chain in addition to the
|
|
|
|
|
* certificate specified in the #NMSetting8021x:phase2-ca-cert property.
|
2020-05-26 17:28:32 +02:00
|
|
|
*
|
|
|
|
|
* If NMSetting8021x:system-ca-certs is enabled and the built-in CA
|
|
|
|
|
* path is an existing directory, then this setting is ignored.
|
2014-07-24 08:53:33 -04:00
|
|
|
**/
|
2020-05-26 17:28:32 +02:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: phase2-ca-path
|
|
|
|
|
* variable: IEEE_8021X_PHASE2_CA_PATH(+)
|
|
|
|
|
* description: The search path for the certificate.
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_PHASE2_CA_PATH] =
|
|
|
|
|
g_param_spec_string (NM_SETTING_802_1X_PHASE2_CA_PATH, "", "",
|
|
|
|
|
NULL,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:phase2-subject-match:
|
|
|
|
|
*
|
|
|
|
|
* Substring to be matched against the subject of the certificate presented
|
|
|
|
|
* by the authentication server during the inner "phase 2"
|
|
|
|
|
* authentication. When unset, no verification of the authentication server
|
2016-03-03 22:42:35 +01:00
|
|
|
* certificate's subject is performed. This property provides little security,
|
|
|
|
|
* if any, and its use is deprecated in favor of
|
|
|
|
|
* NMSetting8021x:phase2-domain-suffix-match.
|
2014-07-24 08:53:33 -04:00
|
|
|
**/
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: phase2-subject-match
|
|
|
|
|
* variable: IEEE_8021X_PHASE2_SUBJECT_MATCH(+)
|
|
|
|
|
* description: Substring to match subject of server certificate against.
|
|
|
|
|
* example: IEEE_8021X_PHASE2_SUBJECT_MATCH="Red Hat"
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_PHASE2_SUBJECT_MATCH] =
|
|
|
|
|
g_param_spec_string (NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH, "", "",
|
|
|
|
|
NULL,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:phase2-altsubject-matches:
|
|
|
|
|
*
|
|
|
|
|
* List of strings to be matched against the altSubjectName of the
|
|
|
|
|
* certificate presented by the authentication server during the inner
|
|
|
|
|
* "phase 2" authentication. If the list is empty, no verification of the
|
|
|
|
|
* server certificate's altSubjectName is performed.
|
|
|
|
|
**/
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: phase2-altsubject-matches
|
|
|
|
|
* variable: IEEE_8021X_PHASE2_ALTSUBJECT_MATCHES(+)
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_PHASE2_ALTSUBJECT_MATCHES] =
|
|
|
|
|
g_param_spec_boxed (NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES, "", "",
|
|
|
|
|
G_TYPE_STRV,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
2016-03-03 22:42:35 +01:00
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:phase2-domain-suffix-match:
|
|
|
|
|
*
|
|
|
|
|
* Constraint for server domain name. If set, this FQDN is used as a suffix
|
|
|
|
|
* match requirement for dNSName element(s) of the certificate presented by
|
|
|
|
|
* the authentication server during the inner "phase 2" authentication. If
|
|
|
|
|
* a matching dNSName is found, this constraint is met. If no dNSName
|
|
|
|
|
* values are present, this constraint is matched against SubjectName CN
|
|
|
|
|
* using same suffix match comparison.
|
2020-03-23 18:22:21 +01:00
|
|
|
* Since version 1.24, multiple valid FQDNs can be passed as a ";" delimited
|
|
|
|
|
* list.
|
2016-03-03 22:42:35 +01:00
|
|
|
*
|
|
|
|
|
* Since: 1.2
|
|
|
|
|
**/
|
2016-03-04 10:39:26 +01:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: phase2-domain-suffix-match
|
|
|
|
|
* description: Suffix to match domain of server certificate for phase 2 against.
|
|
|
|
|
* variable: IEEE_8021X_PHASE2_DOMAIN_SUFFIX_MATCH(+)
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_PHASE2_DOMAIN_SUFFIX_MATCH] =
|
|
|
|
|
g_param_spec_string (NM_SETTING_802_1X_PHASE2_DOMAIN_SUFFIX_MATCH, "", "",
|
|
|
|
|
NULL,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2016-03-03 22:42:35 +01:00
|
|
|
|
2020-03-23 18:22:21 +01:00
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:phase2-domain-match:
|
|
|
|
|
*
|
|
|
|
|
* Constraint for server domain name. If set, this list of FQDNs is used as
|
|
|
|
|
* a match requirement for dNSName element(s) of the certificate presented
|
|
|
|
|
* by the authentication server during the inner "phase 2" authentication.
|
|
|
|
|
* If a matching dNSName is found, this constraint is met. If no dNSName
|
|
|
|
|
* values are present, this constraint is matched against SubjectName CN
|
|
|
|
|
* using the same comparison.
|
|
|
|
|
* Multiple valid FQDNs can be passed as a ";" delimited list.
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.24
|
|
|
|
|
**/
|
|
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: phase2-domain-match
|
|
|
|
|
* description: Value to match domain of server certificate for phase 2 against.
|
|
|
|
|
* variable: IEEE_8021X_PHASE2_DOMAIN_MATCH(+)
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
|
|
|
|
obj_properties[PROP_PHASE2_DOMAIN_MATCH] =
|
|
|
|
|
g_param_spec_string (NM_SETTING_802_1X_PHASE2_DOMAIN_MATCH, "", "",
|
|
|
|
|
NULL,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
|
|
|
|
|
2014-07-24 08:53:33 -04:00
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:phase2-client-cert:
|
|
|
|
|
*
|
|
|
|
|
* Contains the "phase 2" client certificate if used by the EAP method
|
|
|
|
|
* specified in the #NMSetting8021x:phase2-auth or
|
|
|
|
|
* #NMSetting8021x:phase2-autheap properties.
|
|
|
|
|
*
|
|
|
|
|
* Certificate data is specified using a "scheme"; two are currently
|
|
|
|
|
* supported: blob and path. When using the blob scheme (which is backwards
|
|
|
|
|
* compatible with NM 0.7.x) this property should be set to the
|
|
|
|
|
* certificate's DER encoded data. When using the path scheme, this property
|
|
|
|
|
* should be set to the full UTF-8 encoded path of the certificate, prefixed
|
|
|
|
|
* with the string "file://" and ending with a terminating NUL byte. This
|
|
|
|
|
* property can be unset even if the EAP method supports CA certificates,
|
|
|
|
|
* but this allows man-in-the-middle attacks and is NOT recommended.
|
|
|
|
|
*
|
|
|
|
|
* Setting this property directly is discouraged; use the
|
|
|
|
|
* nm_setting_802_1x_set_phase2_client_cert() function instead.
|
|
|
|
|
**/
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: phase2-client-cert
|
|
|
|
|
* variable: IEEE_8021X_INNER_CLIENT_CERT(+)
|
|
|
|
|
* description: Client certificate for inner EAP method.
|
|
|
|
|
* example: IEEE_8021X_INNER_CLIENT_CERT=/home/joe/mycert.crt
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_PHASE2_CLIENT_CERT] =
|
|
|
|
|
g_param_spec_boxed (NM_SETTING_802_1X_PHASE2_CLIENT_CERT, "", "",
|
|
|
|
|
G_TYPE_BYTES,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
2017-02-01 12:53:34 +00:00
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:phase2-client-cert-password:
|
|
|
|
|
*
|
|
|
|
|
* The password used to access the "phase2" client certificate stored in
|
|
|
|
|
* #NMSetting8021x:phase2-client-cert property. Only makes sense if the certificate
|
|
|
|
|
* is stored on a PKCS#<!-- -->11 token that requires a login.
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.8
|
|
|
|
|
**/
|
|
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_PHASE2_CLIENT_CERT_PASSWORD] =
|
|
|
|
|
g_param_spec_string (NM_SETTING_802_1X_PHASE2_CLIENT_CERT_PASSWORD, "", "",
|
|
|
|
|
NULL,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
NM_SETTING_PARAM_SECRET |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2017-02-01 12:53:34 +00:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:phase2-client-cert-password-flags:
|
|
|
|
|
*
|
|
|
|
|
* Flags indicating how to handle the #NMSetting8021x:phase2-client-cert-password property.
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.8
|
|
|
|
|
**/
|
|
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_PHASE2_CLIENT_CERT_PASSWORD_FLAGS] =
|
|
|
|
|
g_param_spec_flags (NM_SETTING_802_1X_PHASE2_CLIENT_CERT_PASSWORD_FLAGS, "", "",
|
|
|
|
|
NM_TYPE_SETTING_SECRET_FLAGS,
|
|
|
|
|
NM_SETTING_SECRET_FLAG_NONE,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2017-02-01 12:53:34 +00:00
|
|
|
|
2014-07-24 08:53:33 -04:00
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:password:
|
|
|
|
|
*
|
|
|
|
|
* UTF-8 encoded password used for EAP authentication methods. If both the
|
|
|
|
|
* #NMSetting8021x:password property and the #NMSetting8021x:password-raw
|
|
|
|
|
* property are specified, #NMSetting8021x:password is preferred.
|
|
|
|
|
**/
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: password
|
|
|
|
|
* variable: IEEE_8021X_PASSWORD(+)
|
|
|
|
|
* description: UTF-8 encoded password used for EAP. It can also go to "key-"
|
|
|
|
|
* lookaside file, or it can be owned by a secret agent.
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_PASSWORD] =
|
|
|
|
|
g_param_spec_string (NM_SETTING_802_1X_PASSWORD, "", "",
|
|
|
|
|
NULL,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
NM_SETTING_PARAM_SECRET |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:password-flags:
|
|
|
|
|
*
|
|
|
|
|
* Flags indicating how to handle the #NMSetting8021x:password property.
|
|
|
|
|
**/
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: password-flags
|
|
|
|
|
* variable: IEEE_8021X_PASSWORD_FLAGS(+)
|
2014-11-16 16:46:12 -05:00
|
|
|
* format: NMSettingSecretFlags
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
* description: Password flags for IEEE_8021X_PASSWORD password.
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_PASSWORD_FLAGS] =
|
|
|
|
|
g_param_spec_flags (NM_SETTING_802_1X_PASSWORD_FLAGS, "", "",
|
|
|
|
|
NM_TYPE_SETTING_SECRET_FLAGS,
|
|
|
|
|
NM_SETTING_SECRET_FLAG_NONE,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:password-raw:
|
|
|
|
|
*
|
|
|
|
|
* Password used for EAP authentication methods, given as a byte array to
|
|
|
|
|
* allow passwords in other encodings than UTF-8 to be used. If both the
|
|
|
|
|
* #NMSetting8021x:password property and the #NMSetting8021x:password-raw
|
|
|
|
|
* property are specified, #NMSetting8021x:password is preferred.
|
|
|
|
|
**/
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: password-raw
|
2017-10-31 08:43:59 +01:00
|
|
|
* variable: IEEE_8021X_PASSWORD_RAW(+)
|
|
|
|
|
* description: password used for EAP, encoded as a hexadecimal string. It
|
|
|
|
|
* can also go to "key-" lookaside file.
|
|
|
|
|
* example: IEEE_8021X_PASSWORD_RAW=041c8320083aa4bf
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_PASSWORD_RAW] =
|
|
|
|
|
g_param_spec_boxed (NM_SETTING_802_1X_PASSWORD_RAW, "", "",
|
|
|
|
|
G_TYPE_BYTES,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
NM_SETTING_PARAM_SECRET |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:password-raw-flags:
|
|
|
|
|
*
|
|
|
|
|
* Flags indicating how to handle the #NMSetting8021x:password-raw property.
|
|
|
|
|
**/
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: password-raw-flags
|
2020-05-27 11:43:02 +02:00
|
|
|
* variable: IEEE_8021X_PASSWORD_RAW_FLAGS(+)
|
|
|
|
|
* description: The secret flags for password-raw.
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_PASSWORD_RAW_FLAGS] =
|
|
|
|
|
g_param_spec_flags (NM_SETTING_802_1X_PASSWORD_RAW_FLAGS, "", "",
|
|
|
|
|
NM_TYPE_SETTING_SECRET_FLAGS,
|
|
|
|
|
NM_SETTING_SECRET_FLAG_NONE,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:private-key:
|
|
|
|
|
*
|
|
|
|
|
* Contains the private key when the #NMSetting8021x:eap property is set to
|
|
|
|
|
* "tls".
|
|
|
|
|
*
|
|
|
|
|
* Key data is specified using a "scheme"; two are currently supported: blob
|
|
|
|
|
* and path. When using the blob scheme and private keys, this property
|
|
|
|
|
* should be set to the key's encrypted PEM encoded data. When using private
|
|
|
|
|
* keys with the path scheme, this property should be set to the full UTF-8
|
|
|
|
|
* encoded path of the key, prefixed with the string "file://" and ending
|
2014-11-07 12:38:17 -05:00
|
|
|
* with a terminating NUL byte. When using PKCS#<!-- -->12 format private
|
|
|
|
|
* keys and the blob scheme, this property should be set to the
|
|
|
|
|
* PKCS#<!-- -->12 data and the #NMSetting8021x:private-key-password
|
|
|
|
|
* property must be set to password used to decrypt the PKCS#<!-- -->12
|
|
|
|
|
* certificate and key. When using PKCS#<!-- -->12 files and the path
|
|
|
|
|
* scheme, this property should be set to the full UTF-8 encoded path of the
|
2017-03-17 15:57:50 +02:00
|
|
|
* key, prefixed with the string "file://" and ending with a terminating
|
2014-11-07 12:38:17 -05:00
|
|
|
* NUL byte, and as with the blob scheme the "private-key-password" property
|
|
|
|
|
* must be set to the password used to decode the PKCS#<!-- -->12 private
|
|
|
|
|
* key and certificate.
|
2014-07-24 08:53:33 -04:00
|
|
|
*
|
|
|
|
|
* Setting this property directly is discouraged; use the
|
|
|
|
|
* nm_setting_802_1x_set_private_key() function instead.
|
|
|
|
|
*
|
|
|
|
|
* WARNING: #NMSetting8021x:private-key is not a "secret" property, and thus
|
|
|
|
|
* unencrypted private key data using the BLOB scheme may be readable by
|
|
|
|
|
* unprivileged users. Private keys should always be encrypted with a
|
|
|
|
|
* private key password to prevent unauthorized access to unencrypted
|
|
|
|
|
* private key data.
|
|
|
|
|
**/
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: private-key
|
|
|
|
|
* variable: IEEE_8021X_PRIVATE_KEY(+)
|
|
|
|
|
* description: Private key for EAP-TLS.
|
|
|
|
|
* example: IEEE_8021X_PRIVATE_KEY=/home/joe/mykey.p12
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_PRIVATE_KEY] =
|
|
|
|
|
g_param_spec_boxed (NM_SETTING_802_1X_PRIVATE_KEY, "", "",
|
|
|
|
|
G_TYPE_BYTES,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:private-key-password:
|
|
|
|
|
*
|
|
|
|
|
* The password used to decrypt the private key specified in the
|
|
|
|
|
* #NMSetting8021x:private-key property when the private key either uses the
|
2014-11-07 12:38:17 -05:00
|
|
|
* path scheme, or if the private key is a PKCS#<!-- -->12 format key. Setting this
|
2014-07-24 08:53:33 -04:00
|
|
|
* property directly is not generally necessary except when returning
|
|
|
|
|
* secrets to NetworkManager; it is generally set automatically when setting
|
|
|
|
|
* the private key by the nm_setting_802_1x_set_private_key() function.
|
|
|
|
|
**/
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: private-key-password
|
|
|
|
|
* variable: IEEE_8021X_PRIVATE_KEY_PASSWORD(+)
|
|
|
|
|
* description: Password for IEEE_8021X_PRIVATE_KEY. It can also go to "key-"
|
|
|
|
|
* lookaside file, or it can be owned by a secret agent.
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_PRIVATE_KEY_PASSWORD] =
|
|
|
|
|
g_param_spec_string (NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD, "", "",
|
|
|
|
|
NULL,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
NM_SETTING_PARAM_SECRET |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:private-key-password-flags:
|
|
|
|
|
*
|
|
|
|
|
* Flags indicating how to handle the #NMSetting8021x:private-key-password
|
|
|
|
|
* property.
|
|
|
|
|
**/
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: private-key-password-flags
|
|
|
|
|
* variable: IEEE_8021X_PRIVATE_KEY_PASSWORD_FLAGS(+)
|
2014-11-16 16:46:12 -05:00
|
|
|
* format: NMSettingSecretFlags
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
* description: Password flags for IEEE_8021X_PRIVATE_KEY_PASSWORD password.
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_PRIVATE_KEY_PASSWORD_FLAGS] =
|
|
|
|
|
g_param_spec_flags (NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS, "", "",
|
|
|
|
|
NM_TYPE_SETTING_SECRET_FLAGS,
|
|
|
|
|
NM_SETTING_SECRET_FLAG_NONE,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:phase2-private-key:
|
|
|
|
|
*
|
|
|
|
|
* Contains the "phase 2" inner private key when the
|
|
|
|
|
* #NMSetting8021x:phase2-auth or #NMSetting8021x:phase2-autheap property is
|
|
|
|
|
* set to "tls".
|
|
|
|
|
*
|
|
|
|
|
* Key data is specified using a "scheme"; two are currently supported: blob
|
|
|
|
|
* and path. When using the blob scheme and private keys, this property
|
|
|
|
|
* should be set to the key's encrypted PEM encoded data. When using private
|
|
|
|
|
* keys with the path scheme, this property should be set to the full UTF-8
|
|
|
|
|
* encoded path of the key, prefixed with the string "file://" and ending
|
2014-11-07 12:38:17 -05:00
|
|
|
* with a terminating NUL byte. When using PKCS#<!-- -->12 format private
|
|
|
|
|
* keys and the blob scheme, this property should be set to the
|
|
|
|
|
* PKCS#<!-- -->12 data and the #NMSetting8021x:phase2-private-key-password
|
|
|
|
|
* property must be set to password used to decrypt the PKCS#<!-- -->12
|
|
|
|
|
* certificate and key. When using PKCS#<!-- -->12 files and the path
|
|
|
|
|
* scheme, this property should be set to the full UTF-8 encoded path of the
|
2017-03-17 15:57:50 +02:00
|
|
|
* key, prefixed with the string "file://" and ending with a terminating
|
2014-11-07 12:38:17 -05:00
|
|
|
* NUL byte, and as with the blob scheme the
|
|
|
|
|
* #NMSetting8021x:phase2-private-key-password property must be set to the
|
|
|
|
|
* password used to decode the PKCS#<!-- -->12 private key and certificate.
|
2014-07-24 08:53:33 -04:00
|
|
|
*
|
|
|
|
|
* Setting this property directly is discouraged; use the
|
|
|
|
|
* nm_setting_802_1x_set_phase2_private_key() function instead.
|
|
|
|
|
**/
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: phase2-private-key
|
|
|
|
|
* variable: IEEE_8021X_INNER_PRIVATE_KEY(+)
|
|
|
|
|
* description: Private key for inner authentication method for EAP-TLS.
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_PHASE2_PRIVATE_KEY] =
|
|
|
|
|
g_param_spec_boxed (NM_SETTING_802_1X_PHASE2_PRIVATE_KEY, "", "",
|
|
|
|
|
G_TYPE_BYTES,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:phase2-private-key-password:
|
|
|
|
|
*
|
|
|
|
|
* The password used to decrypt the "phase 2" private key specified in the
|
|
|
|
|
* #NMSetting8021x:phase2-private-key property when the private key either
|
2014-11-07 12:38:17 -05:00
|
|
|
* uses the path scheme, or is a PKCS#<!-- -->12 format key. Setting this
|
|
|
|
|
* property directly is not generally necessary except when returning
|
|
|
|
|
* secrets to NetworkManager; it is generally set automatically when setting
|
|
|
|
|
* the private key by the nm_setting_802_1x_set_phase2_private_key()
|
|
|
|
|
* function.
|
2014-07-24 08:53:33 -04:00
|
|
|
**/
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: phase2-private-key-password
|
|
|
|
|
* variable: IEEE_8021X_INNER_PRIVATE_KEY_PASSWORD(+)
|
|
|
|
|
* description: Password for IEEE_8021X_INNER_PRIVATE_KEY. It can also go to "key-"
|
|
|
|
|
* lookaside file, or it can be owned by a secret agent.
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_PHASE2_PRIVATE_KEY_PASSWORD] =
|
|
|
|
|
g_param_spec_string (NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD, "", "",
|
|
|
|
|
NULL,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
NM_SETTING_PARAM_SECRET |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:phase2-private-key-password-flags:
|
|
|
|
|
*
|
|
|
|
|
* Flags indicating how to handle the
|
|
|
|
|
* #NMSetting8021x:phase2-private-key-password property.
|
|
|
|
|
**/
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: phase2-private-key-password-flags
|
|
|
|
|
* variable: IEEE_8021X_INNER_PRIVATE_KEY_PASSWORD_FLAGS(+)
|
2014-11-16 16:46:12 -05:00
|
|
|
* format: NMSettingSecretFlags
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
* description: Password flags for IEEE_8021X_INNER_PRIVATE_KEY_PASSWORD password.
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS] =
|
|
|
|
|
g_param_spec_flags (NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS, "", "",
|
|
|
|
|
NM_TYPE_SETTING_SECRET_FLAGS,
|
|
|
|
|
NM_SETTING_SECRET_FLAG_NONE,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:pin:
|
|
|
|
|
*
|
|
|
|
|
* PIN used for EAP authentication methods.
|
|
|
|
|
**/
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: pin
|
2020-05-27 12:14:26 +02:00
|
|
|
* variable: IEEE_8021X_PIN(+)
|
|
|
|
|
* description: The pin secret used for EAP authentication methods.
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_PIN] =
|
|
|
|
|
g_param_spec_string (NM_SETTING_802_1X_PIN, "", "",
|
|
|
|
|
NULL,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
NM_SETTING_PARAM_SECRET |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:pin-flags:
|
|
|
|
|
*
|
|
|
|
|
* Flags indicating how to handle the #NMSetting8021x:pin property.
|
|
|
|
|
**/
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: pin-flags
|
2020-05-27 12:14:26 +02:00
|
|
|
* variable: IEEE_8021X_PIN_FLAGS(+)
|
|
|
|
|
* description: The secret flags for the pin property.
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_PIN_FLAGS] =
|
|
|
|
|
g_param_spec_flags (NM_SETTING_802_1X_PIN_FLAGS, "", "",
|
|
|
|
|
NM_TYPE_SETTING_SECRET_FLAGS,
|
|
|
|
|
NM_SETTING_SECRET_FLAG_NONE,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2014-07-24 08:53:33 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:system-ca-certs:
|
|
|
|
|
*
|
|
|
|
|
* When %TRUE, overrides the #NMSetting8021x:ca-path and
|
|
|
|
|
* #NMSetting8021x:phase2-ca-path properties using the system CA directory
|
|
|
|
|
* specified at configure time with the --system-ca-path switch. The
|
|
|
|
|
* certificates in this directory are added to the verification chain in
|
|
|
|
|
* addition to any certificates specified by the #NMSetting8021x:ca-cert and
|
2015-07-01 14:11:12 +02:00
|
|
|
* #NMSetting8021x:phase2-ca-cert properties. If the path provided with
|
|
|
|
|
* --system-ca-path is rather a file name (bundle of trusted CA certificates),
|
|
|
|
|
* it overrides #NMSetting8021x:ca-cert and #NMSetting8021x:phase2-ca-cert
|
|
|
|
|
* properties instead (sets ca_cert/ca_cert2 options for wpa_supplicant).
|
2014-07-24 08:53:33 -04:00
|
|
|
**/
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: system-ca-certs
|
2020-05-27 11:59:19 +02:00
|
|
|
* variable: IEEE_8021X_SYSTEM_CA_CERTS(+)
|
|
|
|
|
* description: a boolean value.
|
libnm, libnm-util: move settings doc generation to libnm-core
Move the settings/plugins doc generation from libnm-util to
libnm-core, since libnm-util isn't being updated for all new
properties.
With this commit, the keyfile and ifcfg-rh documentation is basically
unchanged, except that deprecated properties are now gone, and new
properties have been added, and the sections are in a different order.
(generate-plugin-docs.pl just outputs the settings in Makefile order,
and they were unsorted in libnm-util, but are sorted in libnm-core).
The settings documentation used for nm-settings.5, the D-Bus API docs,
and the nmcli help is changed a bit more at this point, and mostly for
the worse, since the libnm-core setting properties don't match up with
the D-Bus API as well as the libnm-util ones do. To be fixed...
(I also removed the "plugins docs" line in each plugin docs comment
block while moving them, since those blocks will be used for more than
just plugins soon, and it's sort of obvious anyway.)
2014-10-28 09:58:25 -04:00
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_SYSTEM_CA_CERTS] =
|
|
|
|
|
g_param_spec_boolean (NM_SETTING_802_1X_SYSTEM_CA_CERTS, "", "",
|
|
|
|
|
FALSE,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
2017-01-19 17:25:19 +01:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:auth-timeout:
|
|
|
|
|
*
|
|
|
|
|
* A timeout for the authentication. Zero means the global default; if the
|
|
|
|
|
* global default is not set, the authentication timeout is 25 seconds.
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.8
|
|
|
|
|
**/
|
2017-01-19 17:25:26 +01:00
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: auth-timeout
|
|
|
|
|
* variable: IEEE_8021X_AUTH_TIMEOUT(+)
|
|
|
|
|
* default: 0
|
|
|
|
|
* description: Timeout in seconds for the 802.1X authentication. Zero means the global default or 25.
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
2018-08-31 20:08:48 +02:00
|
|
|
obj_properties[PROP_AUTH_TIMEOUT] =
|
|
|
|
|
g_param_spec_int (NM_SETTING_802_1X_AUTH_TIMEOUT, "", "",
|
|
|
|
|
0, G_MAXINT32, 0,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
NM_SETTING_PARAM_FUZZY_IGNORE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
|
|
|
|
|
2019-07-11 15:52:03 +02:00
|
|
|
/**
|
|
|
|
|
* NMSetting8021x:optional:
|
|
|
|
|
*
|
|
|
|
|
* Whether the 802.1X authentication is optional. If %TRUE, the activation
|
|
|
|
|
* will continue even after a timeout or an authentication failure. Setting
|
|
|
|
|
* the property to %TRUE is currently allowed only for Ethernet connections.
|
|
|
|
|
* If set to %FALSE, the activation can continue only after a successful
|
|
|
|
|
* authentication.
|
|
|
|
|
*
|
|
|
|
|
* Since: 1.22
|
|
|
|
|
**/
|
|
|
|
|
/* ---ifcfg-rh---
|
|
|
|
|
* property: optional
|
|
|
|
|
* variable: IEEE_8021X_OPTIONAL(+)
|
|
|
|
|
* default=no
|
|
|
|
|
* description: whether the 802.1X authentication is optional
|
|
|
|
|
* ---end---
|
|
|
|
|
*/
|
|
|
|
|
obj_properties[PROP_OPTIONAL] =
|
|
|
|
|
g_param_spec_boolean (NM_SETTING_802_1X_OPTIONAL, "", "",
|
|
|
|
|
FALSE,
|
|
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_STATIC_STRINGS);
|
|
|
|
|
|
2018-08-31 20:08:48 +02:00
|
|
|
g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
|
libnm: rework setting metadata for property handling
NMSetting internally already tracked a list of all proper GObject properties
and D-Bus-only properties.
Rework the tracking of the list, so that:
- instead of attaching the data to the GType of the setting via
g_type_set_qdata(), it is tracked in a static array indexed by
NMMetaSettingType. This allows to find the setting-data by simple
pointer arithmetic, instead of taking a look and iterating (like
g_type_set_qdata() does).
Note, that this is still thread safe, because the static table entry is
initialized in the class-init function with _nm_setting_class_commit().
And it only accessed by following a NMSettingClass instance, thus
the class constructor already ran (maybe not for all setting classes,
but for the particular one that we look up).
I think this makes initialization of the metadata simpler to
understand.
Previously, in a first phase each class would attach the metadata
to the GType as setting_property_overrides_quark(). Then during
nm_setting_class_ensure_properties() it would merge them and
set as setting_properties_quark(). Now, during the first phase,
we only incrementally build a properties_override GArray, which
we finally hand over during nm_setting_class_commit().
- sort the property infos by name and do binary search.
Also expose this meta data types as internal API in nm-setting-private.h.
While not accessed yet, it can prove beneficial, to have direct (internal)
access to these structures.
Also, rename NMSettingProperty to NMSettInfoProperty to use a distinct
naming scheme. We already have 40+ subclasses of NMSetting that are called
NMSetting*. Likewise, NMMetaSetting* is heavily used already. So, choose a
new, distinct name.
2018-07-28 15:26:03 +02:00
|
|
|
|
|
|
|
|
_nm_setting_class_commit (setting_class, NM_META_SETTING_TYPE_802_1X);
|
2014-07-24 08:53:33 -04:00
|
|
|
}
|