summaryrefslogtreecommitdiff
path: root/libnm-core/nm-keyfile/nm-keyfile-internal.h
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2020-06-09 17:20:40 +0200
committerThomas Haller <thaller@redhat.com>2020-06-11 10:53:50 +0200
commitb760dee8c86ce0ab61ef3c1cda2cdb32e0519f85 (patch)
treee46f1ca994458af32ef076c74488285c094ac820 /libnm-core/nm-keyfile/nm-keyfile-internal.h
parent98f3d68cbea3367c00e5d5dc00fabd7ad024edf7 (diff)
downloadNetworkManager-b760dee8c86ce0ab61ef3c1cda2cdb32e0519f85.tar.gz
all: move "shared/nm-keyfile" to "libnm-core/nm-keyfile"
Originally, these files were part of libnm-core and linked together. However, that is a licensing violation, because the code is GPL-2.0+ licensed, while libnm-core also gets linked with libnm (it must thus be LGPL-2.1+). The original intent behind moving the code to "shared/" was to avoid the licensing issue, but also to prepare when we would add a separate, GPL licensed libnm-keyfile. However, currently we hope to be able to relicense the code, so that it actually could be exposed as part of libnm. This is work in progress at ([1]). [1] https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/ ## 517 Anyway, the current directory layout is problematic. libnm-keyfile depends on libnm-core, while libnm-core depends on code under shared. That means, there is a circular dependency and meson's subdir() does not work well. Move the code.
Diffstat (limited to 'libnm-core/nm-keyfile/nm-keyfile-internal.h')
-rw-r--r--libnm-core/nm-keyfile/nm-keyfile-internal.h212
1 files changed, 212 insertions, 0 deletions
diff --git a/libnm-core/nm-keyfile/nm-keyfile-internal.h b/libnm-core/nm-keyfile/nm-keyfile-internal.h
new file mode 100644
index 0000000000..b6ac71d65c
--- /dev/null
+++ b/libnm-core/nm-keyfile/nm-keyfile-internal.h
@@ -0,0 +1,212 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2008 Novell, Inc.
+ * Copyright (C) 2015 Red Hat, Inc.
+ */
+
+#ifndef __NM_KEYFILE_INTERNAL_H__
+#define __NM_KEYFILE_INTERNAL_H__
+
+#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_INTERNAL)
+#error Cannot use this header.
+#endif
+
+#include <sys/types.h>
+
+#include "nm-connection.h"
+#include "nm-setting-8021x.h"
+
+#include "nm-core-internal.h"
+#include "nm-meta-setting.h"
+
+/*****************************************************************************/
+
+#define NM_KEYFILE_CERT_SCHEME_PREFIX_PATH "file://"
+#define NM_KEYFILE_CERT_SCHEME_PREFIX_PKCS11 "pkcs11:"
+#define NM_KEYFILE_CERT_SCHEME_PREFIX_BLOB "data:;base64,"
+
+char *nm_keyfile_detect_unqualified_path_scheme (const char *base_dir,
+ gconstpointer pdata,
+ gsize data_len,
+ gboolean consider_exists,
+ gboolean *out_exists);
+
+typedef enum { /*< flags >*/
+ NM_KEYFILE_HANDLER_FLAGS_NONE = 0,
+} NMKeyfileHandlerFlags;
+
+typedef enum {
+ NM_KEYFILE_HANDLER_TYPE_WARN = 1,
+ NM_KEYFILE_HANDLER_TYPE_WRITE_CERT = 2,
+} NMKeyfileHandlerType;
+
+typedef struct _NMKeyfileHandlerData NMKeyfileHandlerData;
+
+/**
+ * NMKeyfileReadHandler:
+ *
+ * Hook to nm_keyfile_read(). The user might fail the reading by setting
+ * @error.
+ *
+ * Returns: should return TRUE, if the reading was handled. Otherwise,
+ * a default action will be performed that depends on the @handler_type.
+ * For %NM_KEYFILE_HANDLER_TYPE_WARN handler_type, the default action is doing nothing.
+ */
+typedef gboolean (*NMKeyfileReadHandler) (GKeyFile *keyfile,
+ NMConnection *connection,
+ NMKeyfileHandlerType handler_type,
+ NMKeyfileHandlerData *handler_data,
+ void *user_data);
+
+typedef enum {
+ NM_KEYFILE_WARN_SEVERITY_DEBUG = 1000,
+ NM_KEYFILE_WARN_SEVERITY_INFO = 2000,
+ NM_KEYFILE_WARN_SEVERITY_INFO_MISSING_FILE = 2901,
+ NM_KEYFILE_WARN_SEVERITY_WARN = 3000,
+} NMKeyfileWarnSeverity;
+
+NMConnection *nm_keyfile_read (GKeyFile *keyfile,
+ const char *base_dir,
+ NMKeyfileHandlerFlags handler_flags,
+ NMKeyfileReadHandler handler,
+ void *user_data,
+ GError **error);
+
+gboolean nm_keyfile_read_ensure_id (NMConnection *connection,
+ const char *fallback_id);
+
+gboolean nm_keyfile_read_ensure_uuid (NMConnection *connection,
+ const char *fallback_uuid_seed);
+
+/*****************************************************************************/
+
+/**
+ * NMKeyfileWriteHandler:
+ *
+ * This is a hook to tweak the serialization.
+ *
+ * Handler for certain properties or events that are not entirely contained
+ * within the keyfile or that might be serialized differently. The @handler_type and
+ * @handler_data arguments tell which kind of argument we have at hand.
+ *
+ * Currently only the handler_type %NM_KEYFILE_HANDLER_TYPE_WRITE_CERT is supported, which provides
+ * @handler_data as %NMKeyfileHandlerDataWriteCert. However, this handler should be generic enough
+ * to support other types as well.
+ *
+ * This don't have to be only "properties". For example, nm_keyfile_read() uses
+ * a similar handler to push warnings to the caller.
+ *
+ * If the handler raises an error, it should set the @error value. This causes
+ * the an overall failure.
+ *
+ * Returns: whether the issue was handled. If the type was unhandled,
+ * a default action will be performed. This might be raise an error,
+ * do some fallback parsing, or do nothing.
+ */
+typedef gboolean (*NMKeyfileWriteHandler) (NMConnection *connection,
+ GKeyFile *keyfile,
+ NMKeyfileHandlerType handler_type,
+ NMKeyfileHandlerData *handler_data,
+ void *user_data);
+
+GKeyFile *nm_keyfile_write (NMConnection *connection,
+ NMKeyfileHandlerFlags handler_flags,
+ NMKeyfileWriteHandler handler,
+ void *user_data,
+ GError **error);
+
+/*****************************************************************************/
+
+/**
+ * NMKeyfileHandlerDataWarn:
+ *
+ * this struct is passed as @handler_data for the @NMKeyfileReadHandler of
+ * handler_type %NM_KEYFILE_HANDLER_TYPE_WARN.
+ */
+typedef struct {
+ NMKeyfileWarnSeverity severity;
+ char *message;
+ const char *fmt;
+ va_list ap;
+} NMKeyfileHandlerDataWarn;
+
+/**
+ * NMKeyfileHandlerDataWriteCert:
+ *
+ * this struct is passed as @handler_data for the @NMKeyfileWriteHandler of
+ * handler_type %NM_KEYFILE_HANDLER_TYPE_WRITE_CERT.
+ */
+typedef struct {
+ const NMSetting8021xSchemeVtable *vtable;
+} NMKeyfileHandlerDataWriteCert;
+
+struct _NMKeyfileHandlerData {
+ NMKeyfileHandlerType type;
+
+ GError **p_error;
+
+ const char *kf_group_name;
+ const char *kf_key;
+
+ NMSetting *cur_setting;
+ const char *cur_property;
+
+ union {
+ NMKeyfileHandlerDataWarn warn;
+ NMKeyfileHandlerDataWriteCert write_cert;
+ };
+};
+
+/*****************************************************************************/
+
+void nm_keyfile_handler_data_fail_with_error (NMKeyfileHandlerData *handler_data,
+ GError *src);
+
+void nm_keyfile_handler_data_get_context (const NMKeyfileHandlerData *handler_data,
+ const char **out_kf_group_name,
+ const char **out_kf_key_name,
+ NMSetting **out_cur_setting,
+ const char **out_cur_property_name);
+
+void nm_keyfile_handler_data_warn_get (const NMKeyfileHandlerData *handler_data,
+ const char **out_message,
+ NMKeyfileWarnSeverity *out_severity);
+
+const char *_nm_keyfile_handler_data_warn_get_message (const NMKeyfileHandlerData *handler_data);
+
+/*****************************************************************************/
+
+char *nm_keyfile_plugin_kf_get_string (GKeyFile *kf, const char *group, const char *key, GError **error);
+void nm_keyfile_plugin_kf_set_string (GKeyFile *kf, const char *group, const char *key, const char *value);
+
+int nm_key_file_get_boolean (GKeyFile *kf, const char *group, const char *key, int default_value);
+
+void _nm_keyfile_copy (GKeyFile *dst, GKeyFile *src);
+gboolean _nm_keyfile_a_contains_all_in_b (GKeyFile *kf_a, GKeyFile *kf_b);
+gboolean _nm_keyfile_equals (GKeyFile *kf_a, GKeyFile *kf_b, gboolean consider_order);
+gboolean _nm_keyfile_has_values (GKeyFile *keyfile);
+
+/*****************************************************************************/
+
+#define NM_KEYFILE_GROUP_NMMETA ".nmmeta"
+#define NM_KEYFILE_KEY_NMMETA_NM_GENERATED "nm-generated"
+#define NM_KEYFILE_KEY_NMMETA_VOLATILE "volatile"
+#define NM_KEYFILE_KEY_NMMETA_EXTERNAL "external"
+#define NM_KEYFILE_KEY_NMMETA_SHADOWED_STORAGE "shadowed-storage"
+#define NM_KEYFILE_KEY_NMMETA_SHADOWED_OWNED "shadowed-owned"
+
+#define NM_KEYFILE_PATH_NAME_LIB NMLIBDIR "/system-connections"
+#define NM_KEYFILE_PATH_NAME_ETC_DEFAULT NMCONFDIR "/system-connections"
+#define NM_KEYFILE_PATH_NAME_RUN NMRUNDIR "/system-connections"
+
+#define NM_KEYFILE_PATH_SUFFIX_NMCONNECTION ".nmconnection"
+
+#define NM_KEYFILE_PATH_SUFFIX_NMMETA ".nmmeta"
+
+#define NM_KEYFILE_PATH_NMMETA_SYMLINK_NULL "/dev/null"
+
+gboolean nm_keyfile_utils_ignore_filename (const char *filename, gboolean require_extension);
+
+char *nm_keyfile_utils_create_filename (const char *filename, gboolean with_extension);
+
+#endif /* __NM_KEYFILE_INTERNAL_H__ */