libnm: add define for cert scheme prefix file:// for NMSetting8021x
This commit is contained in:
@@ -29,6 +29,7 @@
|
||||
#include "common.h"
|
||||
#include "settings.h"
|
||||
#include "nm-glib-compat.h"
|
||||
#include "nm-utils-internal.h"
|
||||
|
||||
/* Forward declarations */
|
||||
static char *wep_key_type_to_string (NMWepKeyType type);
|
||||
@@ -2691,13 +2692,12 @@ nmc_property_connection_describe_secondaries (NMSetting *setting, const char *pr
|
||||
static gboolean \
|
||||
def_func (NMSetting *setting, const char *prop, const char *val, GError **error) \
|
||||
{ \
|
||||
const char *SCHEME_PATH = "file://"; \
|
||||
char *val_strip = g_strstrip (g_strdup (val)); \
|
||||
char *p = val_strip; \
|
||||
gboolean success; \
|
||||
\
|
||||
if (strncmp (val_strip, SCHEME_PATH, strlen (SCHEME_PATH)) == 0) \
|
||||
p += strlen (SCHEME_PATH); \
|
||||
if (strncmp (val_strip, NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH, STRLEN (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH)) == 0) \
|
||||
p += STRLEN (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH); \
|
||||
\
|
||||
success = set_func (NM_SETTING_802_1X (setting), \
|
||||
p, \
|
||||
@@ -2713,14 +2713,13 @@ nmc_property_connection_describe_secondaries (NMSetting *setting, const char *pr
|
||||
def_func (NMSetting *setting, const char *prop, const char *val, GError **error) \
|
||||
{ \
|
||||
char **strv = NULL; \
|
||||
const char *SCHEME_PATH = "file://"; \
|
||||
char *val_strip = g_strstrip (g_strdup (val)); \
|
||||
char *p = val_strip; \
|
||||
const char *path, *password; \
|
||||
gboolean success; \
|
||||
\
|
||||
if (strncmp (val_strip, SCHEME_PATH, strlen (SCHEME_PATH)) == 0) \
|
||||
p += strlen (SCHEME_PATH); \
|
||||
if (strncmp (val_strip, NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH, STRLEN (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH)) == 0) \
|
||||
p += STRLEN (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH); \
|
||||
\
|
||||
strv = nmc_strsplit_set (p, " \t,", 2); \
|
||||
path = strv[0]; \
|
||||
|
@@ -31,6 +31,9 @@
|
||||
|
||||
/*********************************************************/
|
||||
|
||||
#define NM_KEYFILE_CERT_SCHEME_PREFIX_BLOB "data:;base64,"
|
||||
#define NM_KEYFILE_CERT_SCHEME_PREFIX_PATH "file://"
|
||||
|
||||
typedef enum {
|
||||
NM_KEYFILE_READ_TYPE_WARN = 1,
|
||||
} NMKeyfileReadType;
|
||||
|
@@ -823,8 +823,6 @@ get_cert_path (const char *base_dir, const guint8 *cert_path, gsize cert_path_le
|
||||
return tmp;
|
||||
}
|
||||
|
||||
#define SCHEME_PATH "file://"
|
||||
|
||||
static const char *certext[] = { ".pem", ".cert", ".crt", ".cer", ".p12", ".der", ".key" };
|
||||
|
||||
static gboolean
|
||||
@@ -848,8 +846,8 @@ handle_as_scheme (GBytes *bytes, NMSetting *setting, const char *key)
|
||||
data = g_bytes_get_data (bytes, &data_len);
|
||||
|
||||
/* It's the PATH scheme, can just set plain data */
|
||||
if ( (data_len > strlen (SCHEME_PATH))
|
||||
&& g_str_has_prefix ((const char *) data, SCHEME_PATH)
|
||||
if ( (data_len > strlen (NM_KEYFILE_CERT_SCHEME_PREFIX_PATH))
|
||||
&& g_str_has_prefix ((const char *) data, NM_KEYFILE_CERT_SCHEME_PREFIX_PATH)
|
||||
&& (data[data_len - 1] == '\0')) {
|
||||
g_object_set (setting, key, bytes, NULL);
|
||||
return TRUE;
|
||||
@@ -899,8 +897,8 @@ handle_as_path (KeyfileReaderInfo *info,
|
||||
GBytes *val;
|
||||
|
||||
/* Construct the proper value as required for the PATH scheme */
|
||||
tmp = g_byte_array_sized_new (strlen (SCHEME_PATH) + strlen (path) + 1);
|
||||
g_byte_array_append (tmp, (const guint8 *) SCHEME_PATH, strlen (SCHEME_PATH));
|
||||
tmp = g_byte_array_sized_new (strlen (NM_KEYFILE_CERT_SCHEME_PREFIX_PATH) + strlen (path) + 1);
|
||||
g_byte_array_append (tmp, (const guint8 *) NM_KEYFILE_CERT_SCHEME_PREFIX_PATH, strlen (NM_KEYFILE_CERT_SCHEME_PREFIX_PATH));
|
||||
g_byte_array_append (tmp, (const guint8 *) path, strlen (path));
|
||||
g_byte_array_append (tmp, (const guint8 *) "\0", 1);
|
||||
val = g_byte_array_free_to_bytes (tmp);
|
||||
|
@@ -62,8 +62,6 @@
|
||||
* ISBN: 978-1587051548
|
||||
**/
|
||||
|
||||
#define SCHEME_PATH "file://"
|
||||
|
||||
G_DEFINE_TYPE_WITH_CODE (NMSetting8021x, nm_setting_802_1x, NM_TYPE_SETTING,
|
||||
_nm_register_setting (802_1X, 2))
|
||||
NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_802_1X)
|
||||
@@ -450,8 +448,8 @@ nm_setting_802_1x_check_cert_scheme (gconstpointer pdata, gsize length, GError *
|
||||
}
|
||||
|
||||
/* interpret the blob as PATH if it starts with "file://". */
|
||||
if ( length >= STRLEN (SCHEME_PATH)
|
||||
&& !memcmp (data, SCHEME_PATH, STRLEN (SCHEME_PATH))) {
|
||||
if ( length >= STRLEN (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH)
|
||||
&& !memcmp (data, NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH, STRLEN (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH))) {
|
||||
/* But it must also be NUL terminated, contain at least
|
||||
* one non-NUL character, and contain only one trailing NUL
|
||||
* chracter.
|
||||
@@ -467,7 +465,7 @@ nm_setting_802_1x_check_cert_scheme (gconstpointer pdata, gsize length, GError *
|
||||
}
|
||||
length--;
|
||||
|
||||
if (length <= STRLEN (SCHEME_PATH)) {
|
||||
if (length <= STRLEN (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH)) {
|
||||
g_set_error_literal (error,
|
||||
NM_CONNECTION_ERROR,
|
||||
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
||||
@@ -475,7 +473,7 @@ nm_setting_802_1x_check_cert_scheme (gconstpointer pdata, gsize length, GError *
|
||||
return NM_SETTING_802_1X_CK_SCHEME_UNKNOWN;
|
||||
}
|
||||
|
||||
if (!g_utf8_validate (data + STRLEN (SCHEME_PATH), length - STRLEN (SCHEME_PATH), NULL)) {
|
||||
if (!g_utf8_validate (data + STRLEN (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH), length - STRLEN (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH), NULL)) {
|
||||
g_set_error_literal (error,
|
||||
NM_CONNECTION_ERROR,
|
||||
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
||||
@@ -587,7 +585,7 @@ nm_setting_802_1x_get_ca_cert_path (NMSetting8021x *setting)
|
||||
g_return_val_if_fail (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH, NULL);
|
||||
|
||||
data = g_bytes_get_data (NM_SETTING_802_1X_GET_PRIVATE (setting)->ca_cert, NULL);
|
||||
return (const char *)data + strlen (SCHEME_PATH);
|
||||
return (const char *)data + strlen (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH);
|
||||
}
|
||||
|
||||
static GBytes *
|
||||
@@ -601,8 +599,8 @@ path_to_scheme_value (const char *path)
|
||||
len = strlen (path);
|
||||
|
||||
/* Add the path scheme tag to the front, then the filename */
|
||||
array = g_byte_array_sized_new (len + strlen (SCHEME_PATH) + 1);
|
||||
g_byte_array_append (array, (const guint8 *) SCHEME_PATH, strlen (SCHEME_PATH));
|
||||
array = g_byte_array_sized_new (len + strlen (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH) + 1);
|
||||
g_byte_array_append (array, (const guint8 *) NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH, strlen (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH));
|
||||
g_byte_array_append (array, (const guint8 *) path, len);
|
||||
g_byte_array_append (array, (const guint8 *) "\0", 1);
|
||||
|
||||
@@ -916,7 +914,7 @@ nm_setting_802_1x_get_client_cert_path (NMSetting8021x *setting)
|
||||
g_return_val_if_fail (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH, NULL);
|
||||
|
||||
data = g_bytes_get_data (NM_SETTING_802_1X_GET_PRIVATE (setting)->client_cert, NULL);
|
||||
return (const char *)data + strlen (SCHEME_PATH);
|
||||
return (const char *)data + strlen (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1185,7 +1183,7 @@ nm_setting_802_1x_get_phase2_ca_cert_path (NMSetting8021x *setting)
|
||||
g_return_val_if_fail (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH, NULL);
|
||||
|
||||
data = g_bytes_get_data (NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_ca_cert, NULL);
|
||||
return (const char *)data + strlen (SCHEME_PATH);
|
||||
return (const char *)data + strlen (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1499,7 +1497,7 @@ nm_setting_802_1x_get_phase2_client_cert_path (NMSetting8021x *setting)
|
||||
g_return_val_if_fail (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH, NULL);
|
||||
|
||||
data = g_bytes_get_data (NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_client_cert, NULL);
|
||||
return (const char *)data + strlen (SCHEME_PATH);
|
||||
return (const char *)data + strlen (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1758,7 +1756,7 @@ nm_setting_802_1x_get_private_key_path (NMSetting8021x *setting)
|
||||
g_return_val_if_fail (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH, NULL);
|
||||
|
||||
data = g_bytes_get_data (NM_SETTING_802_1X_GET_PRIVATE (setting)->private_key, NULL);
|
||||
return (const char *)data + strlen (SCHEME_PATH);
|
||||
return (const char *)data + strlen (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -2096,7 +2094,7 @@ nm_setting_802_1x_get_phase2_private_key_path (NMSetting8021x *setting)
|
||||
g_return_val_if_fail (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH, NULL);
|
||||
|
||||
data = g_bytes_get_data (NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_private_key, NULL);
|
||||
return (const char *)data + strlen (SCHEME_PATH);
|
||||
return (const char *)data + strlen (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -31,6 +31,8 @@
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH "file://"
|
||||
|
||||
/**
|
||||
* NMSetting8021xCKFormat:
|
||||
* @NM_SETTING_802_1X_CK_FORMAT_UNKNOWN: unknown file format
|
||||
|
@@ -57,15 +57,13 @@ compare_blob_data (const char *test,
|
||||
g_free (contents);
|
||||
}
|
||||
|
||||
#define SCHEME_PATH "file://"
|
||||
|
||||
static void
|
||||
check_scheme_path (GBytes *value, const char *path)
|
||||
{
|
||||
const guint8 *p = g_bytes_get_data (value, NULL);
|
||||
|
||||
g_assert (memcmp (p, SCHEME_PATH, strlen (SCHEME_PATH)) == 0);
|
||||
p += strlen (SCHEME_PATH);
|
||||
g_assert (memcmp (p, NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH, strlen (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH)) == 0);
|
||||
p += strlen (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH);
|
||||
g_assert (memcmp (p, path, strlen (path)) == 0);
|
||||
p += strlen (path);
|
||||
g_assert (*p == '\0');
|
||||
|
Reference in New Issue
Block a user