settings: merge branch 'th/settings-plugins-cleanup-bgo772561'

https://bugzilla.gnome.org/show_bug.cgi?id=772561
This commit is contained in:
Thomas Haller 2016-10-11 11:37:53 +02:00
commit 85fe39e549
58 changed files with 932 additions and 868 deletions

2
.gitignore vendored
View file

@ -252,7 +252,6 @@ test-*.trs
/src/settings/plugins/ibft/tests/test-ibft
/src/settings/plugins/ifcfg-rh/nmdbus-ifcfg-rh.[ch]
/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh
/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh-utils
/src/settings/plugins/ifnet/tests/test-ifnet
/src/settings/plugins/ifupdown/tests/test-ifupdown
/src/settings/plugins/keyfile/tests/test-keyfile
@ -281,4 +280,5 @@ test-*.trs
/initscript/Slackware/rc.networkmanager
/initscript/*/[Nn]etwork[Mm]anager
/src/devices/wifi/tests/test-wifi-ap-utils
/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh-utils
/src/settings/plugins/ifnet/tests/check_ifnet

View file

@ -172,5 +172,5 @@ src/nm-config.c
src/nm-iface-helper.c
src/nm-logging.c
src/nm-manager.c
src/settings/plugins/ibft/plugin.c
src/settings/plugins/ifcfg-rh/reader.c
src/settings/plugins/ibft/nms-ibft-plugin.c
src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c

View file

@ -615,6 +615,20 @@ nm_decode_version (guint version, guint *major, guint *minor, guint *micro) {
}
/*****************************************************************************/
/* taken from systemd's DECIMAL_STR_MAX()
*
* Returns the number of chars needed to format variables of the
* specified type as a decimal string. Adds in extra space for a
* negative '-' prefix (hence works correctly on signed
* types). Includes space for the trailing NUL. */
#define NM_DECIMAL_STR_MAX(type) \
(2+(sizeof(type) <= 1 ? 3 : \
sizeof(type) <= 2 ? 5 : \
sizeof(type) <= 4 ? 10 : \
sizeof(type) <= 8 ? 20 : sizeof(int[-2*(sizeof(type) > 8)])))
/*****************************************************************************/
/* if @str is NULL, return "(null)". Otherwise, allocate a buffer using
* alloca() of size @bufsize and fill it with @str. @str will be quoted with
* single quote, and in case @str is too long, the final quote will be '^'. */
@ -646,23 +660,27 @@ nm_decode_version (guint version, guint *major, guint *minor, guint *micro) {
#define nm_sprintf_buf(buf, format, ...) ({ \
char * _buf = (buf); \
int _buf_len; \
\
/* some static assert trying to ensure that the buffer is statically allocated.
* It disallows a buffer size of sizeof(gpointer) to catch that. */ \
G_STATIC_ASSERT (G_N_ELEMENTS (buf) == sizeof (buf) && sizeof (buf) != sizeof (char *)); \
g_snprintf (_buf, sizeof (buf), \
""format"", ##__VA_ARGS__); \
_buf_len = g_snprintf (_buf, sizeof (buf), \
""format"", ##__VA_ARGS__); \
nm_assert (_buf_len < sizeof (buf)); \
_buf; \
})
#define nm_sprintf_bufa(n_elements, format, ...) \
({ \
char *_buf; \
int _buf_len; \
\
G_STATIC_ASSERT (sizeof (char[MAX ((n_elements), 1)]) == (n_elements)); \
_buf = g_alloca (n_elements); \
g_snprintf (_buf, n_elements, \
""format"", ##__VA_ARGS__); \
_buf_len = g_snprintf (_buf, (n_elements), \
""format"", ##__VA_ARGS__); \
nm_assert (_buf_len < (n_elements)); \
_buf; \
})

View file

@ -4,11 +4,7 @@ SUBDIRS = . tests
pkglib_LTLIBRARIES = libnm-settings-plugin-ibft.la
noinst_LTLIBRARIES = libibft-io.la
libibft_io_la_SOURCES = \
reader.c \
reader.h
noinst_LTLIBRARIES = libnms-ibft-core.la
AM_CPPFLAGS = \
-I$(top_srcdir)/src/ \
@ -24,14 +20,26 @@ AM_CPPFLAGS = \
-DSYSCONFDIR=\"$(sysconfdir)\" \
-DSBINDIR=\"$(sbindir)\"
libnm_settings_plugin_ibft_la_SOURCES = \
plugin.c \
plugin.h \
nm-ibft-connection.c \
nm-ibft-connection.h
###############################################################################
libnm_settings_plugin_ibft_la_LDFLAGS = -module -avoid-version
libnm_settings_plugin_ibft_la_LIBADD = libibft-io.la
libnms_ibft_core_la_SOURCES = \
nms-ibft-reader.c \
nms-ibft-reader.h
###############################################################################
libnm_settings_plugin_ibft_la_SOURCES = \
nms-ibft-plugin.c \
nms-ibft-plugin.h \
nms-ibft-connection.c \
nms-ibft-connection.h
libnm_settings_plugin_ibft_la_LDFLAGS = \
-module -avoid-version
libnm_settings_plugin_ibft_la_LIBADD = \
libnms-ibft-core.la
###############################################################################
CLEANFILES = $(BUILT_SOURCES)

View file

@ -1,41 +0,0 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/* NetworkManager system settings service
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Copyright 2014 Red Hat, Inc.
*/
#ifndef NM_IBFT_CONNECTION_H
#define NM_IBFT_CONNECTION_H
#include <nm-settings-connection.h>
#define NM_TYPE_IBFT_CONNECTION (nm_ibft_connection_get_type ())
#define NM_IBFT_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_IBFT_CONNECTION, NMIbftConnection))
#define NM_IBFT_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_IBFT_CONNECTION, NMIbftConnectionClass))
#define NM_IS_IBFT_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_IBFT_CONNECTION))
#define NM_IS_IBFT_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_IBFT_CONNECTION))
#define NM_IBFT_CONNECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_IBFT_CONNECTION, NMIbftConnectionClass))
typedef struct _NMIbftConnection NMIbftConnection;
typedef struct _NMIbftConnectionClass NMIbftConnectionClass;
GType nm_ibft_connection_get_type (void);
NMIbftConnection *nm_ibft_connection_new (const GPtrArray *block,
GError **error);
#endif /* NM_IBFT_CONNECTION_H */

View file

@ -20,45 +20,45 @@
#include "nm-default.h"
#include "nm-ibft-connection.h"
#include "nms-ibft-connection.h"
#include <string.h>
#include <net/ethernet.h>
#include <netinet/ether.h>
#include <glib/gstdio.h>
#include "reader.h"
#include "nms-ibft-reader.h"
/*****************************************************************************/
struct _NMIbftConnection {
struct _NMSIbftConnection {
NMSettingsConnection parent;
};
struct _NMIbftConnectionClass {
struct _NMSIbftConnectionClass {
NMSettingsConnectionClass parent;
};
G_DEFINE_TYPE (NMIbftConnection, nm_ibft_connection, NM_TYPE_SETTINGS_CONNECTION)
G_DEFINE_TYPE (NMSIbftConnection, nms_ibft_connection, NM_TYPE_SETTINGS_CONNECTION)
/*****************************************************************************/
static void
nm_ibft_connection_init (NMIbftConnection *connection)
nms_ibft_connection_init (NMSIbftConnection *connection)
{
}
NMIbftConnection *
nm_ibft_connection_new (const GPtrArray *block, GError **error)
NMSIbftConnection *
nms_ibft_connection_new (const GPtrArray *block, GError **error)
{
NMConnection *source;
GObject *object;
source = connection_from_block (block, error);
source = nms_ibft_reader_get_connection_from_block (block, error);
if (!source)
return NULL;
object = g_object_new (NM_TYPE_IBFT_CONNECTION, NULL);
object = g_object_new (NMS_TYPE_IBFT_CONNECTION, NULL);
/* Update settings with what was read from iscsiadm */
if (!nm_settings_connection_replace_settings (NM_SETTINGS_CONNECTION (object),
source,
@ -67,11 +67,11 @@ nm_ibft_connection_new (const GPtrArray *block, GError **error)
error))
g_clear_object (&object);
return (NMIbftConnection *) object;
return (NMSIbftConnection *) object;
}
static void
nm_ibft_connection_class_init (NMIbftConnectionClass *ibft_connection_class)
nms_ibft_connection_class_init (NMSIbftConnectionClass *ibft_connection_class)
{
}

View file

@ -0,0 +1,41 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/* NetworkManager system settings service
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Copyright 2014 Red Hat, Inc.
*/
#ifndef __NMS_IBFT_CONNECTION_H__
#define __NMS_IBFT_CONNECTION_H__
#include <nm-settings-connection.h>
#define NMS_TYPE_IBFT_CONNECTION (nms_ibft_connection_get_type ())
#define NMS_IBFT_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMS_TYPE_IBFT_CONNECTION, NMSIbftConnection))
#define NMS_IBFT_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMS_TYPE_IBFT_CONNECTION, NMSIbftConnectionClass))
#define NMS_IS_IBFT_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMS_TYPE_IBFT_CONNECTION))
#define NMS_IS_IBFT_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMS_TYPE_IBFT_CONNECTION))
#define NMS_IBFT_CONNECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMS_TYPE_IBFT_CONNECTION, NMSIbftConnectionClass))
typedef struct _NMSIbftConnection NMSIbftConnection;
typedef struct _NMSIbftConnectionClass NMSIbftConnectionClass;
GType nms_ibft_connection_get_type (void);
NMSIbftConnection *nms_ibft_connection_new (const GPtrArray *block,
GError **error);
#endif /* __NMS_IBFT_CONNECTION_H__ */

View file

@ -20,7 +20,7 @@
#include "nm-default.h"
#include "plugin.h"
#include "nms-ibft-plugin.h"
#include <string.h>
#include <unistd.h>
@ -31,57 +31,57 @@
#include "nm-settings-plugin.h"
#include "NetworkManagerUtils.h"
#include "reader.h"
#include "nm-ibft-connection.h"
#include "nms-ibft-reader.h"
#include "nms-ibft-connection.h"
/*****************************************************************************/
typedef struct {
GHashTable *connections; /* uuid::connection */
gboolean initialized;
} SettingsPluginIbftPrivate;
} NMSIbftPluginPrivate;
struct _SettingsPluginIbft {
struct _NMSIbftPlugin {
GObject parent;
SettingsPluginIbftPrivate _priv;
NMSIbftPluginPrivate _priv;
};
struct _SettingsPluginIbftClass {
struct _NMSIbftPluginClass {
GObjectClass parent;
};
static void settings_plugin_interface_init (NMSettingsPluginInterface *plugin_iface);
G_DEFINE_TYPE_EXTENDED (SettingsPluginIbft, settings_plugin_ibft, G_TYPE_OBJECT, 0,
G_DEFINE_TYPE_EXTENDED (NMSIbftPlugin, nms_ibft_plugin, G_TYPE_OBJECT, 0,
G_IMPLEMENT_INTERFACE (NM_TYPE_SETTINGS_PLUGIN,
settings_plugin_interface_init))
#define SETTINGS_PLUGIN_IBFT_GET_PRIVATE(self) _NM_GET_PRIVATE (self, SettingsPluginIbft, SETTINGS_IS_PLUGIN_IBFT)
#define NMS_IBFT_PLUGIN_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMSIbftPlugin, NMS_IS_IBFT_PLUGIN)
/*****************************************************************************/
static SettingsPluginIbft *settings_plugin_ibft_get (void);
static NMSIbftPlugin *nms_ibft_plugin_get (void);
NM_DEFINE_SINGLETON_GETTER (SettingsPluginIbft, settings_plugin_ibft_get, SETTINGS_TYPE_PLUGIN_IBFT);
NM_DEFINE_SINGLETON_GETTER (NMSIbftPlugin, nms_ibft_plugin_get, NMS_TYPE_IBFT_PLUGIN);
/*****************************************************************************/
static void
read_connections (SettingsPluginIbft *self)
read_connections (NMSIbftPlugin *self)
{
SettingsPluginIbftPrivate *priv = SETTINGS_PLUGIN_IBFT_GET_PRIVATE (self);
NMSIbftPluginPrivate *priv = NMS_IBFT_PLUGIN_GET_PRIVATE (self);
GSList *blocks = NULL, *iter;
GError *error = NULL;
NMIbftConnection *connection;
NMSIbftConnection *connection;
if (!read_ibft_blocks ("/sbin/iscsiadm", &blocks, &error)) {
if (!nms_ibft_reader_load_blocks ("/sbin/iscsiadm", &blocks, &error)) {
nm_log_dbg (LOGD_SETTINGS, "ibft: failed to read iscsiadm records: %s", error->message);
g_error_free (error);
return;
}
for (iter = blocks; iter; iter = iter->next) {
connection = nm_ibft_connection_new (iter->data, &error);
connection = nms_ibft_connection_new (iter->data, &error);
if (connection) {
nm_log_info (LOGD_SETTINGS, "ibft: read connection '%s'",
nm_connection_get_id (NM_CONNECTION (connection)));
@ -100,11 +100,11 @@ read_connections (SettingsPluginIbft *self)
static GSList *
get_connections (NMSettingsPlugin *config)
{
SettingsPluginIbft *self = SETTINGS_PLUGIN_IBFT (config);
SettingsPluginIbftPrivate *priv = SETTINGS_PLUGIN_IBFT_GET_PRIVATE (self);
NMSIbftPlugin *self = NMS_IBFT_PLUGIN (config);
NMSIbftPluginPrivate *priv = NMS_IBFT_PLUGIN_GET_PRIVATE (self);
GSList *list = NULL;
GHashTableIter iter;
NMIbftConnection *connection;
NMSIbftConnection *connection;
if (!priv->initialized) {
read_connections (self);
@ -148,9 +148,9 @@ init (NMSettingsPlugin *config)
}
static void
settings_plugin_ibft_init (SettingsPluginIbft *self)
nms_ibft_plugin_init (NMSIbftPlugin *self)
{
SettingsPluginIbftPrivate *priv = SETTINGS_PLUGIN_IBFT_GET_PRIVATE (self);
NMSIbftPluginPrivate *priv = NMS_IBFT_PLUGIN_GET_PRIVATE (self);
priv->connections = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
}
@ -158,19 +158,19 @@ settings_plugin_ibft_init (SettingsPluginIbft *self)
static void
dispose (GObject *object)
{
SettingsPluginIbft *self = SETTINGS_PLUGIN_IBFT (object);
SettingsPluginIbftPrivate *priv = SETTINGS_PLUGIN_IBFT_GET_PRIVATE (self);
NMSIbftPlugin *self = NMS_IBFT_PLUGIN (object);
NMSIbftPluginPrivate *priv = NMS_IBFT_PLUGIN_GET_PRIVATE (self);
if (priv->connections) {
g_hash_table_destroy (priv->connections);
priv->connections = NULL;
}
G_OBJECT_CLASS (settings_plugin_ibft_parent_class)->dispose (object);
G_OBJECT_CLASS (nms_ibft_plugin_parent_class)->dispose (object);
}
static void
settings_plugin_ibft_class_init (SettingsPluginIbftClass *req_class)
nms_ibft_plugin_class_init (NMSIbftPluginClass *req_class)
{
GObjectClass *object_class = G_OBJECT_CLASS (req_class);
@ -202,5 +202,5 @@ settings_plugin_interface_init (NMSettingsPluginInterface *plugin_iface)
G_MODULE_EXPORT GObject *
nm_settings_plugin_factory (void)
{
return g_object_ref (settings_plugin_ibft_get ());
return g_object_ref (nms_ibft_plugin_get ());
}

View file

@ -0,0 +1,36 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/* NetworkManager system settings service
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Copyright 2014 Red Hat, Inc.
*/
#ifndef __NMS_IBFT_PLUGIN_H__
#define __NMS_IBFT_PLUGIN_H__
#define NMS_TYPE_IBFT_PLUGIN (nms_ibft_plugin_get_type ())
#define NMS_IBFT_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMS_TYPE_IBFT_PLUGIN, NMSIbftPlugin))
#define NMS_IBFT_PLUGIN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMS_TYPE_IBFT_PLUGIN, NMSIbftPluginClass))
#define NMS_IS_IBFT_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMS_TYPE_IBFT_PLUGIN))
#define NMS_IS_IBFT_PLUGIN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMS_TYPE_IBFT_PLUGIN))
#define NMS_IBFT_PLUGIN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMS_TYPE_IBFT_PLUGIN, NMSIbftPluginClass))
typedef struct _NMSIbftPlugin NMSIbftPlugin;
typedef struct _NMSIbftPluginClass NMSIbftPluginClass;
GType nms_ibft_plugin_get_type (void);
#endif /* __NMS_IBFT_PLUGIN_H__ */

View file

@ -20,6 +20,8 @@
#include "nm-default.h"
#include "nms-ibft-reader.h"
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
@ -35,7 +37,7 @@
#include "nm-platform.h"
#include "NetworkManagerUtils.h"
#include "reader.h"
/*****************************************************************************/
#define PARSE_WARNING(msg...) nm_log_warn (LOGD_SETTINGS, " " msg)
@ -75,7 +77,7 @@ remove_most_whitespace (const char *src)
#define TAG_END "# END RECORD"
/**
* read_ibft_blocks:
* nms_ibft_reader_load_blocks:
* @iscsiadm_path: path to iscsiadm program
* @out_blocks: on return if successful, a #GSList of #GPtrArray, or %NULL on
* failure
@ -88,9 +90,9 @@ remove_most_whitespace (const char *src)
* Returns: %TRUE on success, %FALSE on errors
*/
gboolean
read_ibft_blocks (const char *iscsiadm_path,
GSList **out_blocks,
GError **error)
nms_ibft_reader_load_blocks (const char *iscsiadm_path,
GSList **out_blocks,
GError **error)
{
const char *argv[4] = { iscsiadm_path, "-m", "fw", NULL };
const char *envp[1] = { NULL };
@ -205,20 +207,20 @@ match_iscsiadm_tag (const char *line, const char *tag)
}
/**
* parse_ibft_config:
* @data: an array of iscsiadm interface block lines
* nms_ibft_reader_parse_block:
* @block: an array of iscsiadm interface block lines
* @error: return location for errors
* @...: pairs of key (const char *) : location (const char **) indicating the
* key to look for and the location to store the retrieved value in
*
* Parses an iscsiadm interface block into variables requested by the caller.
* Callers should verify the returned data is complete and valid. Returned
* strings are owned by @data and should not be used after @data is freed.
* strings are owned by @block and should not be used after @block is freed.
*
* Returns: %TRUE if at least , %FALSE on failure
*/
gboolean
parse_ibft_config (const GPtrArray *data, GError **error, ...)
nms_ibft_reader_parse_block (const GPtrArray *block, GError **error, ...)
{
gboolean success = FALSE;
const char **out_value, *p;
@ -226,16 +228,16 @@ parse_ibft_config (const GPtrArray *data, GError **error, ...)
const char *key;
guint i;
g_return_val_if_fail (data != NULL, FALSE);
g_return_val_if_fail (data->len > 0, FALSE);
g_return_val_if_fail (block != NULL, FALSE);
g_return_val_if_fail (block->len > 0, FALSE);
/* Find requested keys and populate return values */
va_start (ap, error);
while ((key = va_arg (ap, const char *))) {
out_value = va_arg (ap, const char **);
*out_value = NULL;
for (i = 0; i < data->len; i++) {
p = match_iscsiadm_tag (g_ptr_array_index (data, i), key);
for (i = 0; i < block->len; i++) {
p = match_iscsiadm_tag (g_ptr_array_index (block, i), key);
if (p) {
*out_value = p;
success = TRUE;
@ -270,14 +272,14 @@ ip4_setting_add_from_block (const GPtrArray *block,
g_assert (block);
if (!parse_ibft_config (block, error,
ISCSI_BOOTPROTO_TAG, &s_method,
ISCSI_IPADDR_TAG, &s_ipaddr,
ISCSI_SUBNET_TAG, &s_netmask,
ISCSI_GATEWAY_TAG, &s_gateway,
ISCSI_DNS1_TAG, &s_dns1,
ISCSI_DNS2_TAG, &s_dns2,
NULL))
if (!nms_ibft_reader_parse_block (block, error,
ISCSI_BOOTPROTO_TAG, &s_method,
ISCSI_IPADDR_TAG, &s_ipaddr,
ISCSI_SUBNET_TAG, &s_netmask,
ISCSI_GATEWAY_TAG, &s_gateway,
ISCSI_DNS1_TAG, &s_dns1,
ISCSI_DNS2_TAG, &s_dns2,
NULL))
goto error;
if (!s_method) {
@ -376,11 +378,11 @@ connection_setting_add (const GPtrArray *block,
char *id, *uuid;
const char *s_hwaddr = NULL, *s_ip4addr = NULL, *s_vlanid;
if (!parse_ibft_config (block, error,
ISCSI_VLAN_ID_TAG, &s_vlanid,
ISCSI_HWADDR_TAG, &s_hwaddr,
ISCSI_IPADDR_TAG, &s_ip4addr,
NULL))
if (!nms_ibft_reader_parse_block (block, error,
ISCSI_VLAN_ID_TAG, &s_vlanid,
ISCSI_HWADDR_TAG, &s_hwaddr,
ISCSI_IPADDR_TAG, &s_ip4addr,
NULL))
return FALSE;
if (!s_hwaddr) {
g_set_error_literal (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
@ -421,7 +423,7 @@ is_ibft_vlan_device (const GPtrArray *block)
{
char *s_vlan_id = NULL;
if (parse_ibft_config (block, NULL, ISCSI_VLAN_ID_TAG, &s_vlan_id, NULL)) {
if (nms_ibft_reader_parse_block (block, NULL, ISCSI_VLAN_ID_TAG, &s_vlan_id, NULL)) {
g_assert (s_vlan_id);
/* VLAN 0 is normally a valid VLAN ID, but in the iBFT case it
@ -449,7 +451,7 @@ vlan_setting_add_from_block (const GPtrArray *block,
/* This won't fail since this function shouldn't be called unless the
* iBFT VLAN ID exists and is > 0.
*/
success = parse_ibft_config (block, NULL, ISCSI_VLAN_ID_TAG, &vlan_id_str, NULL);
success = nms_ibft_reader_parse_block (block, NULL, ISCSI_VLAN_ID_TAG, &vlan_id_str, NULL);
g_assert (success);
g_assert (vlan_id_str);
@ -479,7 +481,7 @@ wired_setting_add_from_block (const GPtrArray *block,
g_assert (block);
g_assert (connection);
if (!parse_ibft_config (block, NULL, ISCSI_HWADDR_TAG, &hwaddr, NULL)) {
if (!nms_ibft_reader_parse_block (block, NULL, ISCSI_HWADDR_TAG, &hwaddr, NULL)) {
g_set_error_literal (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"iBFT: malformed iscsiadm record: missing " ISCSI_HWADDR_TAG);
return FALSE;
@ -500,7 +502,7 @@ wired_setting_add_from_block (const GPtrArray *block,
}
NMConnection *
connection_from_block (const GPtrArray *block, GError **error)
nms_ibft_reader_get_connection_from_block (const GPtrArray *block, GError **error)
{
NMConnection *connection = NULL;
gboolean is_vlan = FALSE;
@ -508,7 +510,7 @@ connection_from_block (const GPtrArray *block, GError **error)
g_assert (block);
if (!parse_ibft_config (block, error, ISCSI_IFACE_TAG, &iface, NULL)) {
if (!nms_ibft_reader_parse_block (block, error, ISCSI_IFACE_TAG, &iface, NULL)) {
g_set_error_literal (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"iBFT: malformed iscsiadm record: missing " ISCSI_IFACE_TAG);
return NULL;

View file

@ -18,18 +18,17 @@
* Copyright 2014 Red Hat, Inc.
*/
#ifndef __READER_H__
#define __READER_H__
#ifndef __NMS_IBFT_READER_H__
#define __NMS_IBFT_READER_H__
#include <nm-connection.h>
gboolean read_ibft_blocks (const char *iscsiadm_path,
GSList **out_blocks,
GError **error);
gboolean nms_ibft_reader_load_blocks (const char *iscsiadm_path,
GSList **out_blocks,
GError **error);
NMConnection *connection_from_block (const GPtrArray *block, GError **error);
NMConnection *nms_ibft_reader_get_connection_from_block (const GPtrArray *block, GError **error);
/* For testcases */
gboolean parse_ibft_config (const GPtrArray *data, GError **error, ...) G_GNUC_NULL_TERMINATED;
gboolean nms_ibft_reader_parse_block (const GPtrArray *block, GError **error, ...) G_GNUC_NULL_TERMINATED;
#endif /* __READER_H__ */
#endif /* __NMS_IBFT_READER_H__ */

View file

@ -1,37 +0,0 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/* NetworkManager system settings service
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Copyright 2014 Red Hat, Inc.
*/
#ifndef _PLUGIN_H_
#define _PLUGIN_H_
#define SETTINGS_TYPE_PLUGIN_IBFT (settings_plugin_ibft_get_type ())
#define SETTINGS_PLUGIN_IBFT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SETTINGS_TYPE_PLUGIN_IBFT, SettingsPluginIbft))
#define SETTINGS_PLUGIN_IBFT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SETTINGS_TYPE_PLUGIN_IBFT, SettingsPluginIbftClass))
#define SETTINGS_IS_PLUGIN_IBFT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SETTINGS_TYPE_PLUGIN_IBFT))
#define SETTINGS_IS_PLUGIN_IBFT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SETTINGS_TYPE_PLUGIN_IBFT))
#define SETTINGS_PLUGIN_IBFT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SETTINGS_TYPE_PLUGIN_IBFT, SettingsPluginIbftClass))
typedef struct _SettingsPluginIbft SettingsPluginIbft;
typedef struct _SettingsPluginIbftClass SettingsPluginIbftClass;
GType settings_plugin_ibft_get_type (void);
#endif /* _PLUGIN_H_ */

View file

@ -27,10 +27,10 @@ AM_LDFLAGS = \
noinst_PROGRAMS = test-ibft
test_ibft_SOURCES = \
test-ibft.c \
../reader.c
test-ibft.c
test_ibft_LDADD = \
$(top_builddir)/src/settings/plugins/ibft/libnms-ibft-core.la \
$(top_builddir)/src/libNetworkManager.la
@VALGRIND_RULES@

View file

@ -32,7 +32,7 @@
#include "nm-core-internal.h"
#include "NetworkManagerUtils.h"
#include "reader.h"
#include "nms-ibft-reader.h"
#include "nm-test-utils-core.h"
@ -44,7 +44,7 @@ read_block (const char *iscsiadm_path, const char *expected_mac)
GError *error = NULL;
gboolean success;
success = read_ibft_blocks (iscsiadm_path, &blocks, &error);
success = nms_ibft_reader_load_blocks (iscsiadm_path, &blocks, &error);
g_assert_no_error (error);
g_assert (success);
g_assert (blocks);
@ -52,7 +52,7 @@ read_block (const char *iscsiadm_path, const char *expected_mac)
for (iter = blocks; iter; iter = iter->next) {
const char *s_hwaddr = NULL;
if (!parse_ibft_config (iter->data, NULL, "iface.hwaddress", &s_hwaddr, NULL))
if (!nms_ibft_reader_parse_block (iter->data, NULL, "iface.hwaddress", &s_hwaddr, NULL))
continue;
g_assert (s_hwaddr);
if (nm_utils_hwaddr_matches (s_hwaddr, -1, expected_mac, -1)) {
@ -80,7 +80,7 @@ test_read_ibft_dhcp (void)
block = read_block (TEST_IBFT_DIR "/iscsiadm-test-dhcp", expected_mac_address);
connection = connection_from_block (block, &error);
connection = nms_ibft_reader_get_connection_from_block (block, &error);
g_assert_no_error (error);
nmtst_assert_connection_verifies_without_normalization (connection);
@ -127,7 +127,7 @@ test_read_ibft_static (void)
block = read_block (TEST_IBFT_DIR "/iscsiadm-test-static", expected_mac_address);
connection = connection_from_block (block, &error);
connection = nms_ibft_reader_get_connection_from_block (block, &error);
g_assert_no_error (error);
nmtst_assert_connection_verifies_without_normalization (connection);
@ -183,7 +183,7 @@ test_read_ibft_malformed (gconstpointer user_data)
g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE, "*malformed iscsiadm record*");
success = read_ibft_blocks (iscsiadm_path, &blocks, &error);
success = nms_ibft_reader_load_blocks (iscsiadm_path, &blocks, &error);
g_assert_no_error (error);
g_assert (success);
g_assert (blocks == NULL);
@ -204,7 +204,7 @@ test_read_ibft_bad_address (gconstpointer user_data)
block = read_block (iscsiadm_path, expected_mac_address);
connection = connection_from_block (block, &error);
connection = nms_ibft_reader_get_connection_from_block (block, &error);
g_assert_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION);
g_assert (strstr (error->message, "iBFT: malformed iscsiadm record: invalid"));
g_clear_error (&error);
@ -229,7 +229,7 @@ test_read_ibft_vlan (void)
block = read_block (TEST_IBFT_DIR "/iscsiadm-test-vlan", expected_mac_address);
connection = connection_from_block (block, &error);
connection = nms_ibft_reader_get_connection_from_block (block, &error);
g_assert_no_error (error);
nmtst_assert_connection_verifies_without_normalization (connection);

View file

@ -2,9 +2,35 @@ SUBDIRS = . tests
@GNOME_CODE_COVERAGE_RULES@
# See note about gdbus-codegen in introspection/Makefile.am
pkglib_LTLIBRARIES = \
libnm-settings-plugin-ifcfg-rh.la
noinst_LTLIBRARIES = libnmdbus-ifcfg-rh.la
noinst_LTLIBRARIES = \
libnmdbus-ifcfg-rh.la \
libnms-ifcfg-rh-core.la
BUILT_SOURCES = \
nmdbus-ifcfg-rh.h \
nmdbus-ifcfg-rh.c
###############################################################################
AM_CPPFLAGS = \
-I$(top_srcdir)/src/ \
-I$(top_srcdir)/src/platform \
-I$(top_srcdir)/src/settings \
-I$(top_srcdir)/shared \
-I$(top_builddir)/shared \
-I$(top_srcdir)/libnm-core \
-I$(top_builddir)/libnm-core \
-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
$(GLIB_CFLAGS) \
$(NSS_CFLAGS) \
-DG_LOG_DOMAIN=\""NetworkManager"\" \
-DSYSCONFDIR=\"$(sysconfdir)\" \
-DSBINDIR=\"$(sbindir)\"
###############################################################################
nodist_libnmdbus_ifcfg_rh_la_SOURCES = \
nmdbus-ifcfg-rh.c \
@ -22,46 +48,35 @@ nmdbus-ifcfg-rh.h: nm-ifcfg-rh.xml
nmdbus-ifcfg-rh.c: nmdbus-ifcfg-rh.h
@true
BUILT_SOURCES = nmdbus-ifcfg-rh.h nmdbus-ifcfg-rh.c
###############################################################################
pkglib_LTLIBRARIES = libnm-settings-plugin-ifcfg-rh.la
noinst_LTLIBRARIES += libifcfg-rh-io.la
libifcfg_rh_io_la_SOURCES = \
libnms_ifcfg_rh_core_la_SOURCES = \
nms-ifcfg-rh-common.h \
shvar.c \
shvar.h \
reader.c \
reader.h \
writer.c \
writer.h \
common.h \
utils.c \
utils.h
nms-ifcfg-rh-utils.c \
nms-ifcfg-rh-utils.h \
nms-ifcfg-rh-reader.c \
nms-ifcfg-rh-reader.h \
nms-ifcfg-rh-writer.c \
nms-ifcfg-rh-writer.h
AM_CPPFLAGS = \
-I$(top_srcdir)/src/ \
-I$(top_srcdir)/src/platform \
-I$(top_srcdir)/src/settings \
-I$(top_srcdir)/shared \
-I$(top_builddir)/shared \
-I$(top_srcdir)/libnm-core \
-I$(top_builddir)/libnm-core \
-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_INSIDE_DAEMON \
$(GLIB_CFLAGS) \
$(NSS_CFLAGS) \
-DG_LOG_DOMAIN=\""NetworkManager"\" \
-DSYSCONFDIR=\"$(sysconfdir)\" \
-DSBINDIR=\"$(sbindir)\"
###############################################################################
libnm_settings_plugin_ifcfg_rh_la_SOURCES = \
plugin.c \
plugin.h \
nm-ifcfg-connection.c \
nm-ifcfg-connection.h
libnm_settings_plugin_ifcfg_rh_la_SOURCES =
nms-ifcfg-rh-connection.c \
nms-ifcfg-rh-connection.h \
nms-ifcfg-rh-plugin.c \
nms-ifcfg-rh-plugin.h
libnm_settings_plugin_ifcfg_rh_la_LDFLAGS = -module -avoid-version
libnm_settings_plugin_ifcfg_rh_la_LIBADD = libifcfg-rh-io.la libnmdbus-ifcfg-rh.la
libnm_settings_plugin_ifcfg_rh_la_LDFLAGS = \
-module -avoid-version
libnm_settings_plugin_ifcfg_rh_la_LIBADD = \
libnms-ifcfg-rh-core.la \
libnmdbus-ifcfg-rh.la
###############################################################################
dbusservicedir = $(DBUS_SYS_DIR)
dbusservice_DATA = nm-ifcfg-rh.conf

View file

@ -20,7 +20,7 @@
#include "nm-default.h"
#include "nm-ifcfg-connection.h"
#include "nms-ifcfg-rh-connection.h"
#include <string.h>
#include <sys/inotify.h>
@ -36,13 +36,13 @@
#include "nm-setting-wireless-security.h"
#include "nm-setting-8021x.h"
#include "nm-platform.h"
#include "common.h"
#include "nm-config.h"
#include "reader.h"
#include "writer.h"
#include "nm-inotify-helper.h"
#include "utils.h"
#include "nm-config.h"
#include "nms-ifcfg-rh-common.h"
#include "nms-ifcfg-rh-reader.h"
#include "nms-ifcfg-rh-writer.h"
#include "nms-ifcfg-rh-utils.h"
/*****************************************************************************/

View file

@ -23,7 +23,7 @@
#include "nm-default.h"
#include "plugin.h"
#include "nms-ifcfg-rh-plugin.h"
#include <string.h>
#include <unistd.h>
@ -39,12 +39,12 @@
#include "NetworkManagerUtils.h"
#include "nm-exported-object.h"
#include "nm-ifcfg-connection.h"
#include "nms-ifcfg-rh-connection.h"
#include "nms-ifcfg-rh-common.h"
#include "nms-ifcfg-rh-reader.h"
#include "nms-ifcfg-rh-writer.h"
#include "nms-ifcfg-rh-utils.h"
#include "shvar.h"
#include "common.h"
#include "reader.h"
#include "writer.h"
#include "utils.h"
#include "nmdbus-ifcfg-rh.h"

View file

@ -20,7 +20,7 @@
#include "nm-default.h"
#include "reader.h"
#include "nms-ifcfg-rh-reader.h"
#include <stdlib.h>
#include <string.h>
@ -56,9 +56,9 @@
#include "nm-platform.h"
#include "NetworkManagerUtils.h"
#include "common.h"
#include "nms-ifcfg-rh-common.h"
#include "nms-ifcfg-rh-utils.h"
#include "shvar.h"
#include "utils.h"
/*****************************************************************************/
@ -145,7 +145,7 @@ make_connection_setting (const char *file,
uuid = svGetValue (ifcfg, "UUID", FALSE);
if (!uuid || !strlen (uuid)) {
g_free (uuid);
uuid = nm_utils_uuid_generate_from_string (ifcfg->fileName, -1, NM_UTILS_UUID_TYPE_LEGACY, NULL);
uuid = nm_utils_uuid_generate_from_string (svFileGetName (ifcfg), -1, NM_UTILS_UUID_TYPE_LEGACY, NULL);
}
stable_id = svGetValue (ifcfg, "STABLE_ID", FALSE);
@ -1130,7 +1130,7 @@ make_ip4_setting (shvarFile *ifcfg,
goto done;
if (gateway && nm_setting_ip_config_get_num_addresses (s_ip4) == 0) {
gs_free char *f = g_path_get_basename (ifcfg->fileName);
gs_free char *f = g_path_get_basename (svFileGetName (ifcfg));
PARSE_WARNING ("ignoring GATEWAY (/etc/sysconfig/network) for %s "
"because the connection has no static addresses", f);
g_clear_pointer (&gateway, g_free);
@ -1204,13 +1204,13 @@ make_ip4_setting (shvarFile *ifcfg,
NULL);
/* Static routes - route-<name> file */
route_path = utils_get_route_path (ifcfg->fileName);
route_path = utils_get_route_path (svFileGetName (ifcfg));
if (utils_has_complex_routes (route_path)) {
PARSE_WARNING ("'rule-' or 'rule6-' file is present; you will need to use a dispatcher script to apply these routes");
} else if (utils_has_route_file_new_syntax (route_path)) {
/* Parse route file in new syntax */
route_ifcfg = utils_get_route_ifcfg (ifcfg->fileName, FALSE);
route_ifcfg = utils_get_route_ifcfg (svFileGetName (ifcfg), FALSE);
if (route_ifcfg) {
for (i = 0; i < 256; i++) {
NMIPRoute *route = NULL;
@ -1626,9 +1626,9 @@ make_ip6_setting (shvarFile *ifcfg,
/* DNS searches ('DOMAIN' key) are read by make_ip4_setting() and included in NMSettingIPConfig */
if (!utils_has_complex_routes (ifcfg->fileName)) {
if (!utils_has_complex_routes (svFileGetName (ifcfg))) {
/* Read static routes from route6-<interface> file */
route6_path = utils_get_route6_path (ifcfg->fileName);
route6_path = utils_get_route6_path (svFileGetName (ifcfg));
if (!read_route6_file (route6_path, s_ip6, error))
goto error;
@ -2596,7 +2596,7 @@ eap_tls_reader (const char *eap_method,
ca_cert = svGetValue (ifcfg, ca_cert_key, FALSE);
if (ca_cert) {
real_path = get_full_file_path (ifcfg->fileName, ca_cert);
real_path = get_full_file_path (svFileGetName (ifcfg), ca_cert);
if (phase2) {
if (!nm_setting_802_1x_set_phase2_ca_cert (s_8021x,
real_path,
@ -2651,7 +2651,7 @@ eap_tls_reader (const char *eap_method,
goto done;
}
real_path = get_full_file_path (ifcfg->fileName, privkey);
real_path = get_full_file_path (svFileGetName (ifcfg), privkey);
if (phase2) {
if (!nm_setting_802_1x_set_phase2_private_key (s_8021x,
real_path,
@ -2688,7 +2688,7 @@ eap_tls_reader (const char *eap_method,
goto done;
}
real_path = get_full_file_path (ifcfg->fileName, client_cert);
real_path = get_full_file_path (svFileGetName (ifcfg), client_cert);
if (phase2) {
if (!nm_setting_802_1x_set_phase2_client_cert (s_8021x,
real_path,
@ -2738,7 +2738,7 @@ eap_peap_reader (const char *eap_method,
ca_cert = svGetValue (ifcfg, "IEEE_8021X_CA_CERT", FALSE);
if (ca_cert) {
real_cert_path = get_full_file_path (ifcfg->fileName, ca_cert);
real_cert_path = get_full_file_path (svFileGetName (ifcfg), ca_cert);
if (!nm_setting_802_1x_set_ca_cert (s_8021x,
real_cert_path,
NM_SETTING_802_1X_CK_SCHEME_PATH,
@ -2842,7 +2842,7 @@ eap_ttls_reader (const char *eap_method,
ca_cert = svGetValue (ifcfg, "IEEE_8021X_CA_CERT", FALSE);
if (ca_cert) {
real_cert_path = get_full_file_path (ifcfg->fileName, ca_cert);
real_cert_path = get_full_file_path (svFileGetName (ifcfg), ca_cert);
if (!nm_setting_802_1x_set_ca_cert (s_8021x,
real_cert_path,
NM_SETTING_802_1X_CK_SCHEME_PATH,
@ -2933,7 +2933,7 @@ eap_fast_reader (const char *eap_method,
pac_file = svGetValue (ifcfg, "IEEE_8021X_PAC_FILE", FALSE);
if (pac_file) {
real_pac_path = get_full_file_path (ifcfg->fileName, pac_file);
real_pac_path = get_full_file_path (svFileGetName (ifcfg), pac_file);
g_object_set (s_8021x, NM_SETTING_802_1X_PAC_FILE, real_pac_path, NULL);
}
@ -4971,7 +4971,7 @@ uuid_from_file (const char *filename)
uuid = svGetValue (ifcfg, "UUID", FALSE);
if (!uuid || !strlen (uuid)) {
g_free (uuid);
uuid = nm_utils_uuid_generate_from_string (ifcfg->fileName, -1, NM_UTILS_UUID_TYPE_LEGACY, NULL);
uuid = nm_utils_uuid_generate_from_string (svFileGetName (ifcfg), -1, NM_UTILS_UUID_TYPE_LEGACY, NULL);
}
svCloseFile (ifcfg);

View file

@ -20,7 +20,7 @@
#include "nm-default.h"
#include "utils.h"
#include "nms-ifcfg-rh-utils.h"
#include <stdlib.h>
#include <string.h>
@ -28,7 +28,7 @@
#include "nm-core-internal.h"
#include "NetworkManagerUtils.h"
#include "common.h"
#include "nms-ifcfg-rh-common.h"
/*
* utils_single_quote_string

View file

@ -20,7 +20,7 @@
#include "nm-default.h"
#include "writer.h"
#include "nms-ifcfg-rh-writer.h"
#include <string.h>
#include <sys/types.h>
@ -47,10 +47,10 @@
#include "nm-core-internal.h"
#include "NetworkManagerUtils.h"
#include "common.h"
#include "nms-ifcfg-rh-common.h"
#include "nms-ifcfg-rh-reader.h"
#include "nms-ifcfg-rh-utils.h"
#include "shvar.h"
#include "reader.h"
#include "utils.h"
/*****************************************************************************/
@ -77,7 +77,7 @@ save_secret_flags (shvarFile *ifcfg,
g_return_if_fail (key != NULL);
if (flags == NM_SETTING_SECRET_FLAG_NONE) {
svSetValue (ifcfg, key, NULL, FALSE);
svUnsetValue (ifcfg, key);
return;
}
@ -114,27 +114,26 @@ set_secret (shvarFile *ifcfg,
GError *error = NULL;
/* Clear the secret from the ifcfg and the associated "keys" file */
svSetValue (ifcfg, key, NULL, FALSE);
svUnsetValue (ifcfg, key);
/* Save secret flags */
save_secret_flags (ifcfg, flags_key, flags);
keyfile = utils_get_keys_ifcfg (ifcfg->fileName, TRUE);
keyfile = utils_get_keys_ifcfg (svFileGetName (ifcfg), TRUE);
if (!keyfile) {
_LOGW ("could not create ifcfg file for '%s'", ifcfg->fileName);
_LOGW ("could not create ifcfg file for '%s'", svFileGetName (ifcfg));
goto error;
}
/* Clear the secret from the associated "keys" file */
svSetValue (keyfile, key, NULL, FALSE);
/* Only write the secret if it's system owned and supposed to be saved */
if (flags == NM_SETTING_SECRET_FLAG_NONE)
svSetValue (keyfile, key, value, verbatim);
else
svUnsetValue (keyfile, key);
if (!svWriteFile (keyfile, 0600, &error)) {
_LOGW ("could not update ifcfg file '%s': %s",
keyfile->fileName, error->message);
svFileGetName (keyfile), error->message);
g_clear_error (&error);
svCloseFile (keyfile);
goto error;
@ -322,12 +321,12 @@ write_object (NMSetting8021x *s_8021x,
* /etc/sysconfig/network-scripts/ca-cert-Test_Write_Wifi_WPA_EAP-TLS.der
* will be deleted, but /etc/pki/tls/cert.pem will not.
*/
standard_file = utils_cert_path (ifcfg->fileName, objtype->suffix);
standard_file = utils_cert_path (svFileGetName (ifcfg), objtype->suffix);
if (g_file_test (standard_file, G_FILE_TEST_EXISTS))
ignored = unlink (standard_file);
g_free (standard_file);
svSetValue (ifcfg, objtype->ifcfg_key, NULL, FALSE);
svUnsetValue (ifcfg, objtype->ifcfg_key);
return TRUE;
}
@ -345,7 +344,7 @@ write_object (NMSetting8021x *s_8021x,
char *new_file;
GError *write_error = NULL;
new_file = utils_cert_path (ifcfg->fileName, objtype->suffix);
new_file = utils_cert_path (svFileGetName (ifcfg), objtype->suffix);
if (!new_file) {
g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Could not create file path for %s / %s",
@ -471,7 +470,7 @@ write_8021x_setting (NMConnection *connection,
if (!s_8021x) {
/* If wired, clear KEY_MGMT */
if (wired)
svSetValue (ifcfg, "KEY_MGMT", NULL, FALSE);
svUnsetValue (ifcfg, "KEY_MGMT");
return TRUE;
}
@ -485,7 +484,7 @@ write_8021x_setting (NMConnection *connection,
if (value)
tmp = g_ascii_strup (value, -1);
}
svSetValue (ifcfg, "IEEE_8021X_EAP_METHODS", tmp ? tmp : NULL, FALSE);
svSetValue (ifcfg, "IEEE_8021X_EAP_METHODS", tmp, FALSE);
g_free (tmp);
svSetValue (ifcfg, "IEEE_8021X_IDENTITY",
@ -505,25 +504,25 @@ write_8021x_setting (NMConnection *connection,
/* PEAP version */
value = nm_setting_802_1x_get_phase1_peapver (s_8021x);
svSetValue (ifcfg, "IEEE_8021X_PEAP_VERSION", NULL, FALSE);
svUnsetValue (ifcfg, "IEEE_8021X_PEAP_VERSION");
if (value && (!strcmp (value, "0") || !strcmp (value, "1")))
svSetValue (ifcfg, "IEEE_8021X_PEAP_VERSION", value, FALSE);
/* Force new PEAP label */
value = nm_setting_802_1x_get_phase1_peaplabel (s_8021x);
svSetValue (ifcfg, "IEEE_8021X_PEAP_FORCE_NEW_LABEL", NULL, FALSE);
svUnsetValue (ifcfg, "IEEE_8021X_PEAP_FORCE_NEW_LABEL");
if (value && !strcmp (value, "1"))
svSetValue (ifcfg, "IEEE_8021X_PEAP_FORCE_NEW_LABEL", "yes", FALSE);
/* PAC file */
value = nm_setting_802_1x_get_pac_file (s_8021x);
svSetValue (ifcfg, "IEEE_8021X_PAC_FILE", NULL, FALSE);
svUnsetValue (ifcfg, "IEEE_8021X_PAC_FILE");
if (value)
svSetValue (ifcfg, "IEEE_8021X_PAC_FILE", value, FALSE);
/* FAST PAC provisioning */
value = nm_setting_802_1x_get_phase1_fast_provisioning (s_8021x);
svSetValue (ifcfg, "IEEE_8021X_FAST_PROVISIONING", NULL, FALSE);
svUnsetValue (ifcfg, "IEEE_8021X_FAST_PROVISIONING");
if (value) {
if (strcmp (value, "1") == 0)
svSetValue (ifcfg, "IEEE_8021X_FAST_PROVISIONING", "allow-unauth", FALSE);
@ -534,7 +533,7 @@ write_8021x_setting (NMConnection *connection,
}
/* Phase2 auth methods */
svSetValue (ifcfg, "IEEE_8021X_INNER_AUTH_METHODS", NULL, FALSE);
svUnsetValue (ifcfg, "IEEE_8021X_INNER_AUTH_METHODS");
phase2_auth = g_string_new (NULL);
value = nm_setting_802_1x_get_phase2_auth (s_8021x);
@ -568,7 +567,7 @@ write_8021x_setting (NMConnection *connection,
nm_setting_802_1x_get_phase2_subject_match (s_8021x),
FALSE);
svSetValue (ifcfg, "IEEE_8021X_ALTSUBJECT_MATCHES", NULL, FALSE);
svUnsetValue (ifcfg, "IEEE_8021X_ALTSUBJECT_MATCHES");
str = g_string_new (NULL);
num = nm_setting_802_1x_get_num_altsubject_matches (s_8021x);
for (i = 0; i < num; i++) {
@ -581,7 +580,7 @@ write_8021x_setting (NMConnection *connection,
svSetValue (ifcfg, "IEEE_8021X_ALTSUBJECT_MATCHES", str->str, FALSE);
g_string_free (str, TRUE);
svSetValue (ifcfg, "IEEE_8021X_PHASE2_ALTSUBJECT_MATCHES", NULL, FALSE);
svUnsetValue (ifcfg, "IEEE_8021X_PHASE2_ALTSUBJECT_MATCHES");
str = g_string_new (NULL);
num = nm_setting_802_1x_get_num_phase2_altsubject_matches (s_8021x);
for (i = 0; i < num; i++) {
@ -636,10 +635,10 @@ write_wireless_security_setting (NMConnection *connection,
auth_alg = nm_setting_wireless_security_get_auth_alg (s_wsec);
svSetValue (ifcfg, "DEFAULTKEY", NULL, FALSE);
svUnsetValue (ifcfg, "DEFAULTKEY");
if (!strcmp (key_mgmt, "none")) {
svSetValue (ifcfg, "KEY_MGMT", NULL, FALSE);
svUnsetValue (ifcfg, "KEY_MGMT");
wep = TRUE;
*no_8021x = TRUE;
} else if (!strcmp (key_mgmt, "wpa-none") || !strcmp (key_mgmt, "wpa-psk")) {
@ -654,7 +653,7 @@ write_wireless_security_setting (NMConnection *connection,
wpa = TRUE;
}
svSetValue (ifcfg, "SECURITYMODE", NULL, FALSE);
svUnsetValue (ifcfg, "SECURITYMODE");
if (auth_alg) {
if (!strcmp (auth_alg, "shared"))
svSetValue (ifcfg, "SECURITYMODE", "restricted", FALSE);
@ -746,8 +745,8 @@ write_wireless_security_setting (NMConnection *connection,
}
/* WPA protos */
svSetValue (ifcfg, "WPA_ALLOW_WPA", NULL, FALSE);
svSetValue (ifcfg, "WPA_ALLOW_WPA2", NULL, FALSE);
svUnsetValue (ifcfg, "WPA_ALLOW_WPA");
svUnsetValue (ifcfg, "WPA_ALLOW_WPA2");
num = nm_setting_wireless_security_get_num_protos (s_wsec);
for (i = 0; i < num; i++) {
proto = nm_setting_wireless_security_get_proto (s_wsec, i);
@ -758,7 +757,7 @@ write_wireless_security_setting (NMConnection *connection,
}
/* WPA Pairwise ciphers */
svSetValue (ifcfg, "CIPHER_PAIRWISE", NULL, FALSE);
svUnsetValue (ifcfg, "CIPHER_PAIRWISE");
str = g_string_new (NULL);
num = nm_setting_wireless_security_get_num_pairwise (s_wsec);
for (i = 0; i < num; i++) {
@ -780,7 +779,7 @@ write_wireless_security_setting (NMConnection *connection,
g_string_free (str, TRUE);
/* WPA Group ciphers */
svSetValue (ifcfg, "CIPHER_GROUP", NULL, FALSE);
svUnsetValue (ifcfg, "CIPHER_GROUP");
str = g_string_new (NULL);
num = nm_setting_wireless_security_get_num_groups (s_wsec);
for (i = 0; i < num; i++) {
@ -858,7 +857,7 @@ write_wireless_setting (NMConnection *connection,
nm_setting_wireless_get_generate_mac_address_mask (s_wireless),
FALSE);
svSetValue (ifcfg, "HWADDR_BLACKLIST", NULL, FALSE);
svUnsetValue (ifcfg, "HWADDR_BLACKLIST");
macaddr_blacklist = nm_setting_wireless_get_mac_address_blacklist (s_wireless);
if (macaddr_blacklist[0]) {
char *blacklist_str;
@ -868,7 +867,7 @@ write_wireless_setting (NMConnection *connection,
g_free (blacklist_str);
}
svSetValue (ifcfg, "MTU", NULL, FALSE);
svUnsetValue (ifcfg, "MTU");
mtu = nm_setting_wireless_get_mtu (s_wireless);
if (mtu) {
tmp = g_strdup_printf ("%u", mtu);
@ -944,8 +943,8 @@ write_wireless_setting (NMConnection *connection,
return FALSE;
}
svSetValue (ifcfg, "CHANNEL", NULL, FALSE);
svSetValue (ifcfg, "BAND", NULL, FALSE);
svUnsetValue (ifcfg, "CHANNEL");
svUnsetValue (ifcfg, "BAND");
chan = nm_setting_wireless_get_channel (s_wireless);
if (chan) {
tmp = g_strdup_printf ("%u", chan);
@ -963,8 +962,8 @@ write_wireless_setting (NMConnection *connection,
* otherwise there's no way to detect WEP vs. open when WEP keys aren't
* saved.
*/
svSetValue (ifcfg, "DEFAULTKEY", NULL, FALSE);
svSetValue (ifcfg, "SECURITYMODE", NULL, FALSE);
svUnsetValue (ifcfg, "DEFAULTKEY");
svUnsetValue (ifcfg, "SECURITYMODE");
if (nm_connection_get_setting_wireless_security (connection)) {
if (!write_wireless_security_setting (connection, ifcfg, adhoc, no_8021x, error))
@ -973,10 +972,10 @@ write_wireless_setting (NMConnection *connection,
char *keys_path;
/* Clear out wifi security keys */
svSetValue (ifcfg, "KEY_MGMT", NULL, FALSE);
svSetValue (ifcfg, "IEEE_8021X_IDENTITY", NULL, FALSE);
svUnsetValue (ifcfg, "KEY_MGMT");
svUnsetValue (ifcfg, "IEEE_8021X_IDENTITY");
set_secret (ifcfg, "IEEE_8021X_PASSWORD", NULL, "IEEE_8021X_PASSWORD_FLAGS", NM_SETTING_SECRET_FLAG_NONE, FALSE);
svSetValue (ifcfg, "SECURITYMODE", NULL, FALSE);
svUnsetValue (ifcfg, "SECURITYMODE");
/* Clear existing keys */
set_secret (ifcfg, "KEY", NULL, "WEP_KEY_FLAGS", NM_SETTING_SECRET_FLAG_NONE, FALSE);
@ -990,15 +989,15 @@ write_wireless_setting (NMConnection *connection,
g_free (tmp);
}
svSetValue (ifcfg, "DEFAULTKEY", NULL, FALSE);
svSetValue (ifcfg, "WPA_ALLOW_WPA", NULL, FALSE);
svSetValue (ifcfg, "WPA_ALLOW_WPA2", NULL, FALSE);
svSetValue (ifcfg, "CIPHER_PAIRWISE", NULL, FALSE);
svSetValue (ifcfg, "CIPHER_GROUP", NULL, FALSE);
svUnsetValue (ifcfg, "DEFAULTKEY");
svUnsetValue (ifcfg, "WPA_ALLOW_WPA");
svUnsetValue (ifcfg, "WPA_ALLOW_WPA2");
svUnsetValue (ifcfg, "CIPHER_PAIRWISE");
svUnsetValue (ifcfg, "CIPHER_GROUP");
set_secret (ifcfg, "WPA_PSK", NULL, "WPA_PSK_FLAGS", NM_SETTING_SECRET_FLAG_NONE, FALSE);
/* Kill any old keys file */
keys_path = utils_get_keys_path (ifcfg->fileName);
keys_path = utils_get_keys_path (svFileGetName (ifcfg));
(void) unlink (keys_path);
g_free (keys_path);
}
@ -1017,11 +1016,11 @@ write_wireless_setting (NMConnection *connection,
break;
default:
case NM_SETTING_WIRELESS_POWERSAVE_DEFAULT:
svSetValue (ifcfg, "POWERSAVE", NULL, TRUE);
svUnsetValue (ifcfg, "POWERSAVE");
break;
}
svSetValue (ifcfg, "MAC_ADDRESS_RANDOMIZATION", NULL, TRUE);
svUnsetValue (ifcfg, "MAC_ADDRESS_RANDOMIZATION");
switch (nm_setting_wireless_get_mac_address_randomization (s_wireless)) {
case NM_SETTING_MAC_RANDOMIZATION_DEFAULT:
svSetValue (ifcfg, "MAC_ADDRESS_RANDOMIZATION", "default", TRUE);
@ -1059,7 +1058,7 @@ write_infiniband_setting (NMConnection *connection, shvarFile *ifcfg, GError **e
mac = nm_setting_infiniband_get_mac_address (s_infiniband);
svSetValue (ifcfg, "HWADDR", mac, FALSE);
svSetValue (ifcfg, "MTU", NULL, FALSE);
svUnsetValue (ifcfg, "MTU");
mtu = nm_setting_infiniband_get_mtu (s_infiniband);
if (mtu) {
tmp = g_strdup_printf ("%u", mtu);
@ -1120,7 +1119,7 @@ write_wired_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
nm_setting_wired_get_generate_mac_address_mask (s_wired),
FALSE);
svSetValue (ifcfg, "HWADDR_BLACKLIST", NULL, FALSE);
svUnsetValue (ifcfg, "HWADDR_BLACKLIST");
macaddr_blacklist = nm_setting_wired_get_mac_address_blacklist (s_wired);
if (macaddr_blacklist[0]) {
char *blacklist_str;
@ -1130,7 +1129,7 @@ write_wired_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
g_free (blacklist_str);
}
svSetValue (ifcfg, "MTU", NULL, FALSE);
svUnsetValue (ifcfg, "MTU");
mtu = nm_setting_wired_get_mtu (s_wired);
if (mtu) {
tmp = g_strdup_printf ("%u", mtu);
@ -1138,7 +1137,7 @@ write_wired_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
g_free (tmp);
}
svSetValue (ifcfg, "SUBCHANNELS", NULL, FALSE);
svUnsetValue (ifcfg, "SUBCHANNELS");
s390_subchannels = nm_setting_wired_get_s390_subchannels (s_wired);
if (s390_subchannels) {
int len = g_strv_length ((char **)s390_subchannels);
@ -1154,22 +1153,22 @@ write_wired_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
g_free (tmp);
}
svSetValue (ifcfg, "NETTYPE", NULL, FALSE);
svUnsetValue (ifcfg, "NETTYPE");
nettype = nm_setting_wired_get_s390_nettype (s_wired);
if (nettype)
svSetValue (ifcfg, "NETTYPE", nettype, FALSE);
svSetValue (ifcfg, "PORTNAME", NULL, FALSE);
svUnsetValue (ifcfg, "PORTNAME");
portname = nm_setting_wired_get_s390_option_by_key (s_wired, "portname");
if (portname)
svSetValue (ifcfg, "PORTNAME", portname, FALSE);
svSetValue (ifcfg, "CTCPROT", NULL, FALSE);
svUnsetValue (ifcfg, "CTCPROT");
ctcprot = nm_setting_wired_get_s390_option_by_key (s_wired, "ctcprot");
if (ctcprot)
svSetValue (ifcfg, "CTCPROT", ctcprot, FALSE);
svSetValue (ifcfg, "OPTIONS", NULL, FALSE);
svUnsetValue (ifcfg, "OPTIONS");
num_opts = nm_setting_wired_get_num_s390_options (s_wired);
if (s390_subchannels && num_opts) {
str = g_string_sized_new (30);
@ -1194,7 +1193,7 @@ write_wired_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
if (wol == NM_SETTING_WIRED_WAKE_ON_LAN_IGNORE)
svSetValueFull (ifcfg, "ETHTOOL_OPTS", "", FALSE);
else if (wol == NM_SETTING_WIRED_WAKE_ON_LAN_DEFAULT)
svSetValue (ifcfg, "ETHTOOL_OPTS", NULL, FALSE);
svUnsetValue (ifcfg, "ETHTOOL_OPTS");
else {
str = g_string_sized_new (30);
g_string_append (str, "wol ");
@ -1279,7 +1278,7 @@ write_wired_for_virtual (NMConnection *connection, shvarFile *ifcfg)
svSetValue (ifcfg, "MTU", tmp, FALSE);
g_free (tmp);
} else
svSetValue (ifcfg, "MTU", NULL, FALSE);
svUnsetValue (ifcfg, "MTU");
}
return has_wired;
}
@ -1344,9 +1343,9 @@ write_vlan_setting (NMConnection *connection, shvarFile *ifcfg, gboolean *wired,
svSetValue (ifcfg, "VLAN_EGRESS_PRIORITY_MAP", tmp, FALSE);
g_free (tmp);
svSetValue (ifcfg, "HWADDR", NULL, FALSE);
svSetValue (ifcfg, "MACADDR", NULL, FALSE);
svSetValue (ifcfg, "MTU", NULL, FALSE);
svUnsetValue (ifcfg, "HWADDR");
svUnsetValue (ifcfg, "MACADDR");
svUnsetValue (ifcfg, "MTU");
*wired = write_wired_for_virtual (connection, ifcfg);
@ -1375,7 +1374,7 @@ write_bonding_setting (NMConnection *connection, shvarFile *ifcfg, gboolean *wir
}
svSetValue (ifcfg, "DEVICE", iface, FALSE);
svSetValue (ifcfg, "BONDING_OPTS", NULL, FALSE);
svUnsetValue (ifcfg, "BONDING_OPTS");
num_opts = nm_setting_bond_get_num_options (s_bond);
if (num_opts > 0) {
@ -1497,9 +1496,9 @@ write_bridge_setting (NMConnection *connection, shvarFile *ifcfg, GError **error
}
svSetValue (ifcfg, "DEVICE", iface, FALSE);
svSetValue (ifcfg, "BRIDGING_OPTS", NULL, FALSE);
svUnsetValue (ifcfg, "BRIDGING_OPTS");
svSetValue (ifcfg, "STP", "no", FALSE);
svSetValue (ifcfg, "DELAY", NULL, FALSE);
svUnsetValue (ifcfg, "DELAY");
mac = nm_setting_bridge_get_mac_address (s_bridge);
svSetValue (ifcfg, "MACADDR", mac, FALSE);
@ -1568,7 +1567,7 @@ write_bridge_port_setting (NMConnection *connection, shvarFile *ifcfg, GError **
if (!s_port)
return TRUE;
svSetValue (ifcfg, "BRIDGING_OPTS", NULL, FALSE);
svUnsetValue (ifcfg, "BRIDGING_OPTS");
/* Bridge options */
opts = g_string_sized_new (32);
@ -1616,19 +1615,16 @@ write_team_port_setting (NMConnection *connection, shvarFile *ifcfg, GError **er
static void
write_dcb_flags (shvarFile *ifcfg, const char *tag, NMSettingDcbFlags flags)
{
char *prop;
char prop[NM_STRLEN ("DCB_xxxxxxxxxxxxxxxxxxxxxxx_yyyyyyyyyyyyyyyyyyyy")];
prop = g_strdup_printf ("DCB_%s_ENABLE", tag);
nm_sprintf_buf (prop, "DCB_%s_ENABLE", tag);
svSetValue (ifcfg, prop, (flags & NM_SETTING_DCB_FLAG_ENABLE) ? "yes" : NULL, FALSE);
g_free (prop);
prop = g_strdup_printf ("DCB_%s_ADVERTISE", tag);
nm_sprintf_buf (prop, "DCB_%s_ADVERTISE", tag);
svSetValue (ifcfg, prop, (flags & NM_SETTING_DCB_FLAG_ADVERTISE) ? "yes" : NULL, FALSE);
g_free (prop);
prop = g_strdup_printf ("DCB_%s_WILLING", tag);
nm_sprintf_buf (prop, "DCB_%s_WILLING", tag);
svSetValue (ifcfg, prop, (flags & NM_SETTING_DCB_FLAG_WILLING) ? "yes" : NULL, FALSE);
g_free (prop);
}
static void
@ -1637,16 +1633,15 @@ write_dcb_app (shvarFile *ifcfg,
NMSettingDcbFlags flags,
gint priority)
{
char *prop, *tmp = NULL;
char prop[NM_STRLEN ("DCB_xxxxxxxxxxxxxxxxxxxxxxx_yyyyyyyyyyyyyyyyyyyy")];
write_dcb_flags (ifcfg, tag, flags);
nm_sprintf_buf (prop, "DCB_%s_PRIORITY", tag);
if ((flags & NM_SETTING_DCB_FLAG_ENABLE) && (priority >= 0))
tmp = g_strdup_printf ("%d", priority);
prop = g_strdup_printf ("DCB_%s_PRIORITY", tag);
svSetValue (ifcfg, prop, tmp, FALSE);
g_free (prop);
g_free (tmp);
svSetValueInt64 (ifcfg, prop, priority);
else
svUnsetValue (ifcfg, prop);
}
typedef gboolean (*DcbGetBoolFunc) (NMSettingDcb *, guint);
@ -1662,7 +1657,7 @@ write_dcb_bool_array (shvarFile *ifcfg,
guint i;
if (!(flags & NM_SETTING_DCB_FLAG_ENABLE)) {
svSetValue (ifcfg, key, NULL, FALSE);
svUnsetValue (ifcfg, key);
return;
}
@ -1685,7 +1680,7 @@ write_dcb_uint_array (shvarFile *ifcfg,
guint i, num;
if (!(flags & NM_SETTING_DCB_FLAG_ENABLE)) {
svSetValue (ifcfg, key, NULL, FALSE);
svUnsetValue (ifcfg, key);
return;
}
@ -1713,7 +1708,7 @@ write_dcb_percent_array (shvarFile *ifcfg,
guint i;
if (!(flags & NM_SETTING_DCB_FLAG_ENABLE)) {
svSetValue (ifcfg, key, NULL, FALSE);
svUnsetValue (ifcfg, key);
return;
}
@ -1763,7 +1758,7 @@ write_dcb_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
const char **iter;
for (iter = clear_keys; *iter; iter++)
svSetValue (ifcfg, *iter, NULL, FALSE);
svUnsetValue (ifcfg, *iter);
return TRUE;
}
@ -1775,7 +1770,7 @@ write_dcb_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
if (nm_setting_dcb_get_app_fcoe_flags (s_dcb) & NM_SETTING_DCB_FLAG_ENABLE)
svSetValue (ifcfg, KEY_DCB_APP_FCOE_MODE, nm_setting_dcb_get_app_fcoe_mode (s_dcb), FALSE);
else
svSetValue (ifcfg, KEY_DCB_APP_FCOE_MODE, NULL, FALSE);
svUnsetValue (ifcfg, KEY_DCB_APP_FCOE_MODE);
write_dcb_app (ifcfg, "APP_ISCSI",
nm_setting_dcb_get_app_iscsi_flags (s_dcb),
@ -1828,7 +1823,7 @@ write_connection_setting (NMSettingConnection *s_con, shvarFile *ifcfg)
g_free (tmp);
/* Only save the value for master connections */
svSetValue (ifcfg, "AUTOCONNECT_SLAVES", NULL, FALSE);
svUnsetValue (ifcfg, "AUTOCONNECT_SLAVES");
type = nm_setting_connection_get_connection_type (s_con);
if ( !g_strcmp0 (type, NM_SETTING_BOND_SETTING_NAME)
|| !g_strcmp0 (type, NM_SETTING_TEAM_SETTING_NAME)
@ -1854,7 +1849,7 @@ write_connection_setting (NMSettingConnection *s_con, shvarFile *ifcfg)
svSetValue (ifcfg, "LLDP", tmp, FALSE);
/* Permissions */
svSetValue (ifcfg, "USERS", NULL, FALSE);
svUnsetValue (ifcfg, "USERS");
n = nm_setting_connection_get_num_permissions (s_con);
if (n > 0) {
str = g_string_sized_new (n * 20);
@ -1886,7 +1881,7 @@ write_connection_setting (NMSettingConnection *s_con, shvarFile *ifcfg)
v_bridge = master;
else if (nm_setting_connection_is_slave_type (s_con, NM_SETTING_TEAM_SETTING_NAME)) {
v_team_master = master;
svSetValue (ifcfg, "TYPE", NULL, FALSE);
svUnsetValue (ifcfg, "TYPE");
}
}
@ -1900,10 +1895,10 @@ write_connection_setting (NMSettingConnection *s_con, shvarFile *ifcfg)
else if (master && nm_setting_connection_is_slave_type (s_con, NM_SETTING_TEAM_SETTING_NAME))
svSetValue (ifcfg, "DEVICETYPE", TYPE_TEAM_PORT, FALSE);
else
svSetValue (ifcfg, "DEVICETYPE", NULL, FALSE);
svUnsetValue (ifcfg, "DEVICETYPE");
/* secondary connection UUIDs */
svSetValue (ifcfg, "SECONDARY_UUIDS", NULL, FALSE);
svUnsetValue (ifcfg, "SECONDARY_UUIDS");
n = nm_setting_connection_get_num_secondaries (s_con);
if (n > 0) {
str = g_string_sized_new (n * 37);
@ -1924,7 +1919,7 @@ write_connection_setting (NMSettingConnection *s_con, shvarFile *ifcfg)
g_string_free (str, TRUE);
}
svSetValue (ifcfg, "GATEWAY_PING_TIMEOUT", NULL, FALSE);
svUnsetValue (ifcfg, "GATEWAY_PING_TIMEOUT");
if (nm_setting_connection_get_gateway_ping_timeout (s_con)) {
tmp = g_strdup_printf ("%" G_GUINT32_FORMAT, nm_setting_connection_get_gateway_ping_timeout (s_con));
svSetValue (ifcfg, "GATEWAY_PING_TIMEOUT", tmp, FALSE);
@ -1939,7 +1934,7 @@ write_connection_setting (NMSettingConnection *s_con, shvarFile *ifcfg)
svSetValue (ifcfg, "CONNECTION_METERED", "no", FALSE);
break;
default:
svSetValue (ifcfg, "CONNECTION_METERED", NULL, FALSE);
svUnsetValue (ifcfg, "CONNECTION_METERED");
}
}
@ -2010,9 +2005,9 @@ write_proxy_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
if (!s_proxy)
return TRUE;
svSetValue (ifcfg, "BROWSER_ONLY", NULL, FALSE);
svSetValue (ifcfg, "PAC_URL", NULL, FALSE);
svSetValue (ifcfg, "PAC_SCRIPT", NULL, FALSE);
svUnsetValue (ifcfg, "BROWSER_ONLY");
svUnsetValue (ifcfg, "PAC_URL");
svUnsetValue (ifcfg, "PAC_SCRIPT");
method = nm_setting_proxy_get_method (s_proxy);
switch (method) {
@ -2063,17 +2058,17 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
*
* Some IPv4 setting related options are not cleared,
* for no strong reason. */
svSetValue (ifcfg, "BOOTPROTO", NULL, FALSE);
svUnsetValue (ifcfg, "BOOTPROTO");
svSetValue (ifcfg, "IPADDR", NULL, FALSE);
svSetValue (ifcfg, "PREFIX", NULL, FALSE);
svSetValue (ifcfg, "NETMASK", NULL, FALSE);
svSetValue (ifcfg, "GATEWAY", NULL, FALSE);
svUnsetValue (ifcfg, "IPADDR");
svUnsetValue (ifcfg, "PREFIX");
svUnsetValue (ifcfg, "NETMASK");
svUnsetValue (ifcfg, "GATEWAY");
svSetValue (ifcfg, "IPADDR0", NULL, FALSE);
svSetValue (ifcfg, "PREFIX0", NULL, FALSE);
svSetValue (ifcfg, "NETMASK0", NULL, FALSE);
svSetValue (ifcfg, "GATEWAY0", NULL, FALSE);
svUnsetValue (ifcfg, "IPADDR0");
svUnsetValue (ifcfg, "PREFIX0");
svUnsetValue (ifcfg, "NETMASK0");
svUnsetValue (ifcfg, "GATEWAY0");
return TRUE;
}
@ -2087,7 +2082,7 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
int result;
/* IPv4 disabled, clear IPv4 related parameters */
svSetValue (ifcfg, "BOOTPROTO", NULL, FALSE);
svUnsetValue (ifcfg, "BOOTPROTO");
for (j = -1; j < 256; j++) {
if (j == -1) {
addr_key = g_strdup ("IPADDR");
@ -2101,10 +2096,10 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
gw_key = g_strdup_printf ("GATEWAY%d", j);
}
svSetValue (ifcfg, addr_key, NULL, FALSE);
svSetValue (ifcfg, prefix_key, NULL, FALSE);
svSetValue (ifcfg, netmask_key, NULL, FALSE);
svSetValue (ifcfg, gw_key, NULL, FALSE);
svUnsetValue (ifcfg, addr_key);
svUnsetValue (ifcfg, prefix_key);
svUnsetValue (ifcfg, netmask_key);
svUnsetValue (ifcfg, gw_key);
g_free (addr_key);
g_free (prefix_key);
@ -2112,7 +2107,7 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
g_free (gw_key);
}
route_path = utils_get_route_path (ifcfg->fileName);
route_path = utils_get_route_path (svFileGetName (ifcfg));
result = unlink (route_path);
g_free (route_path);
return TRUE;
@ -2128,15 +2123,15 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
svSetValue (ifcfg, "BOOTPROTO", "shared", FALSE);
/* Clear out un-numbered IP address fields */
svSetValue (ifcfg, "IPADDR", NULL, FALSE);
svSetValue (ifcfg, "PREFIX", NULL, FALSE);
svSetValue (ifcfg, "NETMASK", NULL, FALSE);
svSetValue (ifcfg, "GATEWAY", NULL, FALSE);
svUnsetValue (ifcfg, "IPADDR");
svUnsetValue (ifcfg, "PREFIX");
svUnsetValue (ifcfg, "NETMASK");
svUnsetValue (ifcfg, "GATEWAY");
/* Clear out zero-indexed IP address fields */
svSetValue (ifcfg, "IPADDR0", NULL, FALSE);
svSetValue (ifcfg, "PREFIX0", NULL, FALSE);
svSetValue (ifcfg, "NETMASK0", NULL, FALSE);
svSetValue (ifcfg, "GATEWAY0", NULL, FALSE);
svUnsetValue (ifcfg, "IPADDR0");
svUnsetValue (ifcfg, "PREFIX0");
svUnsetValue (ifcfg, "NETMASK0");
svUnsetValue (ifcfg, "GATEWAY0");
/* Write out IPADDR<n>, PREFIX<n>, GATEWAY<n> for current IP addresses
* without labels. Unset obsolete NETMASK<n>.
@ -2178,8 +2173,8 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
svSetValue (ifcfg, prefix_key, tmp, FALSE);
g_free (tmp);
svSetValue (ifcfg, netmask_key, NULL, FALSE);
svSetValue (ifcfg, gw_key, NULL, FALSE);
svUnsetValue (ifcfg, netmask_key);
svUnsetValue (ifcfg, gw_key);
g_free (addr_key);
g_free (prefix_key);
@ -2195,10 +2190,10 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
netmask_key = g_strdup_printf ("NETMASK%d", n);
gw_key = g_strdup_printf ("GATEWAY%d", n);
svSetValue (ifcfg, addr_key, NULL, FALSE);
svSetValue (ifcfg, prefix_key, NULL, FALSE);
svSetValue (ifcfg, netmask_key, NULL, FALSE);
svSetValue (ifcfg, gw_key, NULL, FALSE);
svUnsetValue (ifcfg, addr_key);
svUnsetValue (ifcfg, prefix_key);
svUnsetValue (ifcfg, netmask_key);
svUnsetValue (ifcfg, gw_key);
g_free (addr_key);
g_free (prefix_key);
@ -2215,7 +2210,7 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
addr_key = g_strdup_printf ("DNS%d", i + 1);
if (i >= num)
svSetValue (ifcfg, addr_key, NULL, FALSE);
svUnsetValue (ifcfg, addr_key);
else {
dns = nm_setting_ip_config_get_dns (s_ip4, i);
svSetValue (ifcfg, addr_key, dns, FALSE);
@ -2234,16 +2229,16 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
svSetValue (ifcfg, "DOMAIN", searches->str, FALSE);
g_string_free (searches, TRUE);
} else
svSetValue (ifcfg, "DOMAIN", NULL, FALSE);
svUnsetValue (ifcfg, "DOMAIN");
/* DEFROUTE; remember that it has the opposite meaning from never-default */
svSetValue (ifcfg, "DEFROUTE",
nm_setting_ip_config_get_never_default (s_ip4) ? "no" : "yes",
FALSE);
svSetValue (ifcfg, "PEERDNS", NULL, FALSE);
svSetValue (ifcfg, "PEERROUTES", NULL, FALSE);
svSetValue (ifcfg, "DHCP_CLIENT_ID", NULL, FALSE);
svUnsetValue (ifcfg, "PEERDNS");
svUnsetValue (ifcfg, "PEERROUTES");
svUnsetValue (ifcfg, "DHCP_CLIENT_ID");
if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_AUTO)) {
svSetValue (ifcfg, "PEERDNS",
nm_setting_ip_config_get_ignore_auto_dns (s_ip4) ? "no" : "yes",
@ -2288,17 +2283,17 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
g_free (tmp);
/* Static routes - route-<name> file */
route_path = utils_get_route_path (ifcfg->fileName);
route_path = utils_get_route_path (svFileGetName (ifcfg));
if (!route_path) {
g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Could not get route file path for '%s'", ifcfg->fileName);
"Could not get route file path for '%s'", svFileGetName (ifcfg));
return FALSE;
}
if (utils_has_route_file_new_syntax (route_path)) {
shvarFile *routefile;
routefile = utils_get_route_ifcfg (ifcfg->fileName, TRUE);
routefile = utils_get_route_ifcfg (svFileGetName (ifcfg), TRUE);
if (!routefile) {
g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Could not create route file '%s'", route_path);
@ -2320,10 +2315,10 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
metric_key = g_strdup_printf ("METRIC%d", i);
if (i >= num) {
svSetValue (routefile, addr_key, NULL, FALSE);
svSetValue (routefile, netmask_key, NULL, FALSE);
svSetValue (routefile, gw_key, NULL, FALSE);
svSetValue (routefile, metric_key, NULL, FALSE);
svUnsetValue (routefile, addr_key);
svUnsetValue (routefile, netmask_key);
svUnsetValue (routefile, gw_key);
svUnsetValue (routefile, metric_key);
} else {
route = nm_setting_ip_config_get_route (s_ip4, i);
@ -2339,7 +2334,7 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
memset (buf, 0, sizeof (buf));
metric = nm_ip_route_get_metric (route);
if (metric == -1)
svSetValue (routefile, metric_key, NULL, FALSE);
svUnsetValue (routefile, metric_key);
else {
tmp = g_strdup_printf ("%u", (guint32) metric);
svSetValue (routefile, metric_key, tmp, FALSE);
@ -2366,7 +2361,7 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
timeout = nm_setting_ip_config_get_dad_timeout (s_ip4);
if (timeout < 0)
svSetValue (ifcfg, "ARPING_WAIT", NULL, FALSE);
svUnsetValue (ifcfg, "ARPING_WAIT");
else if (timeout == 0)
svSetValue (ifcfg, "ARPING_WAIT", "0", FALSE);
else {
@ -2378,7 +2373,7 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
if (priority)
svSetValueInt64 (ifcfg, "IPV4_DNS_PRIORITY", priority);
else
svSetValue (ifcfg, "IPV4_DNS_PRIORITY", NULL, FALSE);
svUnsetValue (ifcfg, "IPV4_DNS_PRIORITY");
return TRUE;
}
@ -2547,15 +2542,15 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
*
* Some IPv6 setting related options are not cleared,
* for no strong reason. */
svSetValue (ifcfg, "IPV6INIT", NULL, FALSE);
svSetValue (ifcfg, "IPV6_AUTOCONF", NULL, FALSE);
svSetValue (ifcfg, "DHCPV6C", NULL, FALSE);
svSetValue (ifcfg, "IPV6_DEFROUTE", NULL, FALSE);
svSetValue (ifcfg, "IPV6_PEERDNS", NULL, FALSE);
svSetValue (ifcfg, "IPV6_PEERROUTES", NULL, FALSE);
svSetValue (ifcfg, "IPV6_FAILURE_FATAL", NULL, FALSE);
svSetValue (ifcfg, "IPV6_ROUTE_METRIC", NULL, FALSE);
svSetValue (ifcfg, "IPV6_ADDR_GEN_MODE", NULL, FALSE);
svUnsetValue (ifcfg, "IPV6INIT");
svUnsetValue (ifcfg, "IPV6_AUTOCONF");
svUnsetValue (ifcfg, "DHCPV6C");
svUnsetValue (ifcfg, "IPV6_DEFROUTE");
svUnsetValue (ifcfg, "IPV6_PEERDNS");
svUnsetValue (ifcfg, "IPV6_PEERROUTES");
svUnsetValue (ifcfg, "IPV6_FAILURE_FATAL");
svUnsetValue (ifcfg, "IPV6_ROUTE_METRIC");
svUnsetValue (ifcfg, "IPV6_ADDR_GEN_MODE");
return TRUE;
}
@ -2563,12 +2558,12 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
g_assert (value);
if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_IGNORE)) {
svSetValue (ifcfg, "IPV6INIT", "no", FALSE);
svSetValue (ifcfg, "DHCPV6C", NULL, FALSE);
svUnsetValue (ifcfg, "DHCPV6C");
return TRUE;
} else if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_AUTO)) {
svSetValue (ifcfg, "IPV6INIT", "yes", FALSE);
svSetValue (ifcfg, "IPV6_AUTOCONF", "yes", FALSE);
svSetValue (ifcfg, "DHCPV6C", NULL, FALSE);
svUnsetValue (ifcfg, "DHCPV6C");
} else if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_DHCP)) {
const char *hostname;
svSetValue (ifcfg, "IPV6INIT", "yes", FALSE);
@ -2580,14 +2575,14 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
} else if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_MANUAL)) {
svSetValue (ifcfg, "IPV6INIT", "yes", FALSE);
svSetValue (ifcfg, "IPV6_AUTOCONF", "no", FALSE);
svSetValue (ifcfg, "DHCPV6C", NULL, FALSE);
svUnsetValue (ifcfg, "DHCPV6C");
} else if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL)) {
svSetValue (ifcfg, "IPV6INIT", "yes", FALSE);
svSetValue (ifcfg, "IPV6_AUTOCONF", "no", FALSE);
svSetValue (ifcfg, "DHCPV6C", NULL, FALSE);
svUnsetValue (ifcfg, "DHCPV6C");
} else if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_SHARED)) {
svSetValue (ifcfg, "IPV6INIT", "yes", FALSE);
svSetValue (ifcfg, "DHCPV6C", NULL, FALSE);
svUnsetValue (ifcfg, "DHCPV6C");
/* TODO */
}
@ -2623,7 +2618,7 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
addr_key = g_strdup_printf ("DNS%d", i + num4 + 1);
if (i >= num)
svSetValue (ifcfg, addr_key, NULL, FALSE);
svUnsetValue (ifcfg, addr_key);
else {
dns = nm_setting_ip_config_get_dns (s_ip6, i);
svSetValue (ifcfg, addr_key, dns, FALSE);
@ -2654,8 +2649,8 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
else
svSetValue (ifcfg, "IPV6_DEFROUTE", "yes", FALSE);
svSetValue (ifcfg, "IPV6_PEERDNS", NULL, FALSE);
svSetValue (ifcfg, "IPV6_PEERROUTES", NULL, FALSE);
svUnsetValue (ifcfg, "IPV6_PEERDNS");
svUnsetValue (ifcfg, "IPV6_PEERROUTES");
if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_AUTO)) {
svSetValue (ifcfg, "IPV6_PEERDNS",
nm_setting_ip_config_get_ignore_auto_dns (s_ip6) ? "no" : "yes",
@ -2676,8 +2671,8 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
g_free (tmp);
/* IPv6 Privacy Extensions */
svSetValue (ifcfg, "IPV6_PRIVACY", NULL, FALSE);
svSetValue (ifcfg, "IPV6_PRIVACY_PREFER_PUBLIC_IP", NULL, FALSE);
svUnsetValue (ifcfg, "IPV6_PRIVACY");
svUnsetValue (ifcfg, "IPV6_PRIVACY_PREFER_PUBLIC_IP");
switch (nm_setting_ip6_config_get_ip6_privacy (NM_SETTING_IP6_CONFIG (s_ip6))){
case NM_SETTING_IP6_CONFIG_PRIVACY_DISABLED:
svSetValue (ifcfg, "IPV6_PRIVACY", "no", FALSE);
@ -2701,7 +2696,7 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
svSetValue (ifcfg, "IPV6_ADDR_GEN_MODE", tmp, FALSE);
g_free (tmp);
} else {
svSetValue (ifcfg, "IPV6_ADDR_GEN_MODE", NULL, FALSE);
svUnsetValue (ifcfg, "IPV6_ADDR_GEN_MODE");
}
/* IPv6 tokenized interface identifier */
@ -2712,13 +2707,13 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
if (priority)
svSetValueInt64 (ifcfg, "IPV6_DNS_PRIORITY", priority);
else
svSetValue (ifcfg, "IPV6_DNS_PRIORITY", NULL, FALSE);
svUnsetValue (ifcfg, "IPV6_DNS_PRIORITY");
/* Static routes go to route6-<dev> file */
route6_path = utils_get_route6_path (ifcfg->fileName);
route6_path = utils_get_route6_path (svFileGetName (ifcfg));
if (!route6_path) {
g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Could not get route6 file path for '%s'", ifcfg->fileName);
"Could not get route6 file path for '%s'", svFileGetName (ifcfg));
goto error;
}
write_route6_file (route6_path, s_ip6, error);
@ -2753,7 +2748,7 @@ write_res_options (NMConnection *connection, shvarFile *ifcfg, GError **error)
if (!s_ip4) {
/* slave-type: clear res-options */
svSetValue (ifcfg, "RES_OPTIONS", NULL, FALSE);
svUnsetValue (ifcfg, "RES_OPTIONS");
return TRUE;
}
@ -2786,7 +2781,7 @@ write_res_options (NMConnection *connection, shvarFile *ifcfg, GError **error)
svSetValueFull (ifcfg, "RES_OPTIONS", value->str, FALSE);
g_string_free (value, TRUE);
} else
svSetValue (ifcfg, "RES_OPTIONS", NULL, FALSE);
svUnsetValue (ifcfg, "RES_OPTIONS");
return TRUE;
}
@ -2935,8 +2930,8 @@ write_connection (NMConnection *connection,
if (!write_proxy_setting (connection, ifcfg, error))
goto out;
svSetValue (ifcfg, "DHCP_HOSTNAME", NULL, FALSE);
svSetValue (ifcfg, "DHCP_FQDN", NULL, FALSE);
svUnsetValue (ifcfg, "DHCP_HOSTNAME");
svUnsetValue (ifcfg, "DHCP_FQDN");
if (!write_ip4_setting (connection, ifcfg, error))
goto out;

View file

@ -38,6 +38,175 @@
#include "nm-core-internal.h"
/*****************************************************************************/
struct _shvarFile {
char *fileName; /* read-only */
int fd; /* read-only */
GList *lineList; /* read-only */
GList *current; /* set implicitly or explicitly, points to element of lineList */
gboolean modified; /* ignore */
};
/*****************************************************************************/
/**
* svParseBoolean:
* @value: the input string
* @fallback: the fallback value
*
* Parses a string and returns the boolean value it contains or,
* in case no valid value is found, the fallback value. Valid values
* are: "yes", "true", "t", "y", "1" and "no", "false", "f", "n", "0".
*
* Returns: the parsed boolean value or @fallback.
*/
gint
svParseBoolean (const char *value, gint fallback)
{
if (!value)
return fallback;
if ( !g_ascii_strcasecmp ("yes", value)
|| !g_ascii_strcasecmp ("true", value)
|| !g_ascii_strcasecmp ("t", value)
|| !g_ascii_strcasecmp ("y", value)
|| !g_ascii_strcasecmp ("1", value))
return TRUE;
else if ( !g_ascii_strcasecmp ("no", value)
|| !g_ascii_strcasecmp ("false", value)
|| !g_ascii_strcasecmp ("f", value)
|| !g_ascii_strcasecmp ("n", value)
|| !g_ascii_strcasecmp ("0", value))
return FALSE;
return fallback;
}
/*****************************************************************************/
/* create a new string with all necessary characters escaped.
* caller must free returned string
*/
static const char escapees[] = "\"'\\$~`"; /* must be escaped */
static const char spaces[] = " \t|&;()<>"; /* only require "" */
static const char newlines[] = "\n\r"; /* will be removed */
const char *
svEscape (const char *s, char **to_free)
{
char *new;
int i, j, mangle = 0, space = 0, newline = 0;
int newlen, slen;
slen = strlen (s);
for (i = 0; i < slen; i++) {
if (strchr (escapees, s[i]))
mangle++;
if (strchr (spaces, s[i]))
space++;
if (strchr (newlines, s[i]))
newline++;
}
if (!mangle && !space && !newline) {
*to_free = NULL;
return s;
}
newlen = slen + mangle - newline + 3; /* 3 is extra ""\0 */
new = g_malloc (newlen);
j = 0;
new[j++] = '"';
for (i = 0; i < slen; i++) {
if (strchr (newlines, s[i]))
continue;
if (strchr (escapees, s[i])) {
new[j++] = '\\';
}
new[j++] = s[i];
}
new[j++] = '"';
new[j++] = '\0';
g_assert (j == slen + mangle - newline + 3);
*to_free = new;
return new;
}
/* remove escaped characters in place */
void
svUnescape (char *s)
{
size_t len, idx_rd = 0, idx_wr = 0;
char c;
len = strlen (s);
if (len < 2) {
if (s[0] == '\\')
s[0] = '\0';
return;
}
if ((s[0] == '"' || s[0] == '\'') && s[0] == s[len-1]) {
if (len == 2) {
s[0] = '\0';
return;
}
if (len == 3) {
if (s[1] == '\\') {
s[0] = '\0';
} else {
s[0] = s[1];
s[1] = '\0';
}
return;
}
s[--len] = '\0';
idx_rd = 1;
} else {
/* seek for the first escape... */
char *p = strchr (s, '\\');
if (!p)
return;
if (p[1] == '\0') {
p[0] = '\0';
return;
}
idx_wr = idx_rd = (p - s);
}
/* idx_rd points to the first escape. Walk the string and shift the
* characters from idx_rd to idx_wr.
*/
while ((c = s[idx_rd++])) {
if (c == '\\') {
if (s[idx_rd] == '\0') {
s[idx_wr] = '\0';
return;
}
s[idx_wr++] = s[idx_rd++];
continue;
}
s[idx_wr++] = c;
}
s[idx_wr] = '\0';
}
/*****************************************************************************/
const char *
svFileGetName (const shvarFile *s)
{
nm_assert (s);
return s->fileName;
}
/*****************************************************************************/
/* Open the file <name>, returning a shvarFile on success and NULL on failure.
* Add a wrinkle to let the caller specify whether or not to create the file
* (actually, return a structure anyway) if it doesn't exist.
@ -136,114 +305,45 @@ svCreateFile (const char *name)
return svOpenFileInternal (name, TRUE, NULL);
}
/* remove escaped characters in place */
void
svUnescape (char *s)
/*****************************************************************************/
static const char *
find_line (shvarFile *s, const char *key)
{
size_t len, idx_rd = 0, idx_wr = 0;
char c;
const char *line;
gsize len;
len = strlen (s);
if (len < 2) {
if (s[0] == '\\')
s[0] = '\0';
return;
len = strlen (key);
for (s->current = s->lineList; s->current; s->current = s->current->next) {
line = s->current->data;
if (!strncmp (key, line, len) && line[len] == '=')
return line + len + 1;
}
if ((s[0] == '"' || s[0] == '\'') && s[0] == s[len-1]) {
if (len == 2) {
s[0] = '\0';
return;
}
if (len == 3) {
if (s[1] == '\\') {
s[0] = '\0';
} else {
s[0] = s[1];
s[1] = '\0';
}
return;
}
s[--len] = '\0';
idx_rd = 1;
} else {
/* seek for the first escape... */
char *p = strchr (s, '\\');
if (!p)
return;
if (p[1] == '\0') {
p[0] = '\0';
return;
}
idx_wr = idx_rd = (p - s);
}
/* idx_rd points to the first escape. Walk the string and shift the
* characters from idx_rd to idx_wr.
*/
while ((c = s[idx_rd++])) {
if (c == '\\') {
if (s[idx_rd] == '\0') {
s[idx_wr] = '\0';
return;
}
s[idx_wr++] = s[idx_rd++];
continue;
}
s[idx_wr++] = c;
}
s[idx_wr] = '\0';
return NULL;
}
/* create a new string with all necessary characters escaped.
* caller must free returned string
*/
static const char escapees[] = "\"'\\$~`"; /* must be escaped */
static const char spaces[] = " \t|&;()<>"; /* only require "" */
static const char newlines[] = "\n\r"; /* will be removed */
const char *
svEscape (const char *s, char **to_free)
/* svGetValueFull() is identical to svGetValue() except that
* svGetValue() will never return an empty value (but %NULL instead).
* svGetValueFull() will return empty values if that is the value for the @key. */
char *
svGetValueFull (shvarFile *s, const char *key, gboolean verbatim)
{
char *new;
int i, j, mangle = 0, space = 0, newline = 0;
int newlen, slen;
const char *line_val;
char *value;
slen = strlen (s);
g_return_val_if_fail (s != NULL, NULL);
g_return_val_if_fail (key != NULL, NULL);
for (i = 0; i < slen; i++) {
if (strchr (escapees, s[i]))
mangle++;
if (strchr (spaces, s[i]))
space++;
if (strchr (newlines, s[i]))
newline++;
}
if (!mangle && !space && !newline) {
*to_free = NULL;
return s;
}
line_val = find_line (s, key);
if (!line_val)
return NULL;
newlen = slen + mangle - newline + 3; /* 3 is extra ""\0 */
new = g_malloc (newlen);
j = 0;
new[j++] = '"';
for (i = 0; i < slen; i++) {
if (strchr (newlines, s[i]))
continue;
if (strchr (escapees, s[i])) {
new[j++] = '\\';
}
new[j++] = s[i];
}
new[j++] = '"';
new[j++] = '\0';
g_assert (j == slen + mangle - newline + 3);
*to_free = new;
return new;
value = g_strchomp (g_strdup (line_val));
if (!verbatim)
svUnescape (value);
return value;
}
/* Get the value associated with the key, and leave the current pointer
@ -263,68 +363,6 @@ svGetValue (shvarFile *s, const char *key, gboolean verbatim)
return value;
}
/* svGetValueFull() is identical to svGetValue() except that
* svGetValue() will never return an empty value (but %NULL instead).
* svGetValueFull() will return empty values if that is the value for the @key. */
char *
svGetValueFull (shvarFile *s, const char *key, gboolean verbatim)
{
char *value = NULL;
char *line;
guint len;
g_return_val_if_fail (s != NULL, NULL);
g_return_val_if_fail (key != NULL, NULL);
len = strlen (key);
for (s->current = s->lineList; s->current; s->current = s->current->next) {
line = s->current->data;
if (!strncmp (key, line, len) && line[len] == '=') {
/* Strip trailing spaces before unescaping to preserve spaces quoted whitespace */
value = g_strchomp (g_strdup (line + len + 1));
if (!verbatim)
svUnescape (value);
break;
}
}
return value;
}
/**
* svParseBoolean:
* @value: the input string
* @fallback: the fallback value
*
* Parses a string and returns the boolean value it contains or,
* in case no valid value is found, the fallback value. Valid values
* are: "yes", "true", "t", "y", "1" and "no", "false", "f", "n", "0".
*
* Returns: the parsed boolean value or @fallback.
*/
gint
svParseBoolean (const char *value, gint fallback)
{
if (!value)
return fallback;
if ( !g_ascii_strcasecmp ("yes", value)
|| !g_ascii_strcasecmp ("true", value)
|| !g_ascii_strcasecmp ("t", value)
|| !g_ascii_strcasecmp ("y", value)
|| !g_ascii_strcasecmp ("1", value))
return TRUE;
else if ( !g_ascii_strcasecmp ("no", value)
|| !g_ascii_strcasecmp ("false", value)
|| !g_ascii_strcasecmp ("f", value)
|| !g_ascii_strcasecmp ("n", value)
|| !g_ascii_strcasecmp ("0", value))
return FALSE;
return fallback;
}
/* svGetValueBoolean:
* @s: fhe file
* @key: the name of the key to read
@ -375,16 +413,7 @@ svGetValueInt64 (shvarFile *s, const char *key, guint base, gint64 min, gint64 m
return result;
}
/* Set the variable <key> equal to the value <value>.
* If <key> does not exist, and the <current> pointer is set, append
* the key=value pair after that line. Otherwise, append the pair
* to the bottom of the file.
*/
void
svSetValue (shvarFile *s, const char *key, const char *value, gboolean verbatim)
{
svSetValueFull (s, key, value && value[0] ? value : NULL, verbatim);
}
/*****************************************************************************/
/* Same as svSetValue() but it preserves empty @value -- contrary to
* svSetValue() for which "" effectively means to remove the value. */
@ -404,11 +433,10 @@ svSetValueFull (shvarFile *s, const char *key, const char *value, gboolean verba
newval = value;
else
newval = svEscape (value, &newval_free);
oldval = svGetValueFull (s, key, FALSE);
if (!newval) {
/* delete value */
if (oldval) {
if (find_line (s, key)) {
/* delete line */
s->lineList = g_list_remove_link (s->lineList, s->current);
g_free (s->current->data);
@ -418,6 +446,8 @@ svSetValueFull (shvarFile *s, const char *key, const char *value, gboolean verba
return;
}
oldval = svGetValueFull (s, key, FALSE);
keyValue = g_strdup_printf ("%s=%s", key, newval);
if (!oldval) {
/* append line */
@ -438,15 +468,35 @@ svSetValueFull (shvarFile *s, const char *key, const char *value, gboolean verba
g_free (keyValue);
}
/* Set the variable <key> equal to the value <value>.
* If <key> does not exist, and the <current> pointer is set, append
* the key=value pair after that line. Otherwise, append the pair
* to the bottom of the file.
*/
void
svSetValue (shvarFile *s, const char *key, const char *value, gboolean verbatim)
{
svSetValueFull (s, key, value && value[0] ? value : NULL, verbatim);
}
void
svSetValueInt64 (shvarFile *s, const char *key, gint64 value)
{
gs_free char *v = NULL;
char buf[NM_DECIMAL_STR_MAX (value)];
v = g_strdup_printf ("%"G_GINT64_FORMAT, value);
svSetValueFull (s, key, v, TRUE);
svSetValueFull (s, key,
nm_sprintf_buf (buf, "%"G_GINT64_FORMAT, value),
TRUE);
}
void
svUnsetValue (shvarFile *s, const char *key)
{
svSetValueFull (s, key, NULL, FALSE);
}
/*****************************************************************************/
/* Write the current contents iff modified. Returns FALSE on error
* and TRUE on success. Do not write if no values have been modified.
* The mode argument is only used if creating the file, not if

View file

@ -32,14 +32,8 @@
#define _SHVAR_H
typedef struct _shvarFile shvarFile;
struct _shvarFile {
char *fileName; /* read-only */
int fd; /* read-only */
GList *lineList; /* read-only */
GList *current; /* set implicitly or explicitly, points to element of lineList */
gboolean modified; /* ignore */
};
const char *svFileGetName (const shvarFile *s);
/* Create the file <name>, return a shvarFile (never fails) */
shvarFile *svCreateFile (const char *name);
@ -73,6 +67,7 @@ void svSetValue (shvarFile *s, const char *key, const char *value, gboolean verb
void svSetValueFull (shvarFile *s, const char *key, const char *value, gboolean verbatim);
void svSetValueInt64 (shvarFile *s, const char *key, gint64 value);
void svUnsetValue (shvarFile *s, const char *key);
/* Write the current contents iff modified. Returns FALSE on error
* and TRUE on success. Do not write if no values have been modified.

View file

@ -28,31 +28,19 @@ AM_LDFLAGS = \
$(GLIB_LIBS) \
$(CODE_COVERAGE_LDFLAGS)
noinst_PROGRAMS = test-ifcfg-rh test-ifcfg-rh-utils
noinst_PROGRAMS = test-ifcfg-rh
test_ifcfg_rh_SOURCES = \
test-ifcfg-rh.c \
../reader.c \
../shvar.c \
../utils.c \
../writer.c
test-ifcfg-rh.c
test_ifcfg_rh_LDADD = \
$(top_builddir)/src/libNetworkManager.la
test_ifcfg_rh_utils_SOURCES = \
test-ifcfg-rh-utils.c \
../utils.c \
../shvar.c
test_ifcfg_rh_utils_LDADD = \
$(top_builddir)/src/settings/plugins/ifcfg-rh/libnms-ifcfg-rh-core.la \
$(top_builddir)/src/libNetworkManager.la
@VALGRIND_RULES@
TESTS = test-ifcfg-rh-utils test-ifcfg-rh
TESTS = test-ifcfg-rh
check-local:
$(call check_so_symbols,$(builddir)/../.libs/libnm-settings-plugin-ifcfg-rh.so)
endif

View file

@ -1,155 +0,0 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/* NetworkManager system settings service - keyfile plugin
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Copyright (C) 2008 - 2011 Red Hat, Inc.
*/
#include "nm-default.h"
#include <stdio.h>
#include <stdarg.h>
#include <unistd.h>
#include <string.h>
#include "common.h"
#include "utils.h"
#include "nm-test-utils-core.h"
static void
test_get_ifcfg_name (const char *desc,
const char *path,
gboolean only_ifcfg,
const char *expected)
{
const char *result;
result = utils_get_ifcfg_name (path, only_ifcfg);
g_assert_cmpstr (result, ==, expected);
}
static void
test_get_ifcfg_path (const char *desc,
const char *path,
const char *expected)
{
char *result;
result = utils_get_ifcfg_path (path);
g_assert_cmpstr (result, ==, expected);
g_free (result);
}
static void
test_get_keys_path (const char *desc,
const char *path,
const char *expected)
{
char *result;
result = utils_get_keys_path (path);
g_assert_cmpstr (result, ==, expected);
g_free (result);
}
static void
test_get_route_path (const char *desc,
const char *path,
const char *expected)
{
char *result;
result = utils_get_route_path (path);
g_assert_cmpstr (result, ==, expected);
g_free (result);
}
static void
test_ignored (const char *desc, const char *path, gboolean expected_ignored)
{
gboolean result;
result = utils_should_ignore_file (path, FALSE);
g_assert (result == expected_ignored);
}
static void
test_name (void)
{
test_get_ifcfg_name ("get-ifcfg-name-bad", "/foo/bar/adfasdfadf", FALSE, NULL);
test_get_ifcfg_name ("get-ifcfg-name-good", "/foo/bar/ifcfg-FooBar", FALSE, "FooBar");
test_get_ifcfg_name ("get-ifcfg-name-keys", "/foo/bar/keys-BlahLbah", FALSE, "BlahLbah");
test_get_ifcfg_name ("get-ifcfg-name-route", "/foo/bar/route-Lalalala", FALSE, "Lalalala");
test_get_ifcfg_name ("get-ifcfg-name-only-ifcfg-route", "/foo/bar/route-Lalalala", TRUE, NULL);
test_get_ifcfg_name ("get-ifcfg-name-only-ifcfg-keys", "/foo/bar/keys-Lalalala", TRUE, NULL);
test_get_ifcfg_name ("get-ifcfg-name-no-path-ifcfg", "ifcfg-Lalalala", FALSE, "Lalalala");
test_get_ifcfg_name ("get-ifcfg-name-no-path-keys", "keys-Lalalala", FALSE, "Lalalala");
test_get_ifcfg_name ("get-ifcfg-name-no-path-route", "route-Lalalala", FALSE, "Lalalala");
test_get_ifcfg_name ("get-ifcfg-name-bad2-ifcfg", "/foo/bar/asdfasifcfg-Foobar", FALSE, NULL);
test_get_ifcfg_name ("get-ifcfg-name-bad2-keys", "/foo/bar/asdfaskeys-Foobar", FALSE, NULL);
test_get_ifcfg_name ("get-ifcfg-name-bad2-route", "/foo/bar/asdfasroute-Foobar", FALSE, NULL);
}
static void
test_path (void)
{
test_get_ifcfg_path ("ifcfg-path-bad", "/foo/bar/adfasdfasdf", NULL);
test_get_ifcfg_path ("ifcfg-path-from-keys-no-path", "keys-BlahBlah", "ifcfg-BlahBlah");
test_get_ifcfg_path ("ifcfg-path-from-keys", "/foo/bar/keys-BlahBlah", "/foo/bar/ifcfg-BlahBlah");
test_get_ifcfg_path ("ifcfg-path-from-route", "/foo/bar/route-BlahBlah", "/foo/bar/ifcfg-BlahBlah");
test_get_keys_path ("keys-path-bad", "/foo/bar/asdfasdfasdfasdf", NULL);
test_get_keys_path ("keys-path-from-ifcfg-no-path", "ifcfg-FooBar", "keys-FooBar");
test_get_keys_path ("keys-path-from-ifcfg", "/foo/bar/ifcfg-FooBar", "/foo/bar/keys-FooBar");
test_get_keys_path ("keys-path-from-route", "/foo/bar/route-FooBar", "/foo/bar/keys-FooBar");
test_get_route_path ("route-path-bad", "/foo/bar/asdfasdfasdfasdf", NULL);
test_get_route_path ("route-path-from-ifcfg-no-path", "ifcfg-FooBar", "route-FooBar");
test_get_route_path ("route-path-from-ifcfg", "/foo/bar/ifcfg-FooBar", "/foo/bar/route-FooBar");
test_get_route_path ("route-path-from-keys", "/foo/bar/keys-FooBar", "/foo/bar/route-FooBar");
}
static void
test_ignore (void)
{
test_ignored ("ignored-ifcfg", "ifcfg-FooBar", FALSE);
test_ignored ("ignored-keys", "keys-FooBar", FALSE);
test_ignored ("ignored-route", "route-FooBar", FALSE);
test_ignored ("ignored-bak", "ifcfg-FooBar" BAK_TAG, TRUE);
test_ignored ("ignored-tilde", "ifcfg-FooBar" TILDE_TAG, TRUE);
test_ignored ("ignored-orig", "ifcfg-FooBar" ORIG_TAG, TRUE);
test_ignored ("ignored-rej", "ifcfg-FooBar" REJ_TAG, TRUE);
test_ignored ("ignored-rpmnew", "ifcfg-FooBar" RPMNEW_TAG, TRUE);
test_ignored ("ignored-augnew", "ifcfg-FooBar" AUGNEW_TAG, TRUE);
test_ignored ("ignored-augtmp", "ifcfg-FooBar" AUGTMP_TAG, TRUE);
}
NMTST_DEFINE ();
int main (int argc, char **argv)
{
nmtst_init_assert_logging (&argc, &argv, "INFO", "DEFAULT");
/* The tests */
g_test_add_func ("/settings/plugins/ifcfg-rh/name", test_name);
g_test_add_func ("/settings/plugins/ifcfg-rh/path", test_path);
g_test_add_func ("/settings/plugins/ifcfg-rh/ignore", test_ignore);
return g_test_run ();
}

View file

@ -50,10 +50,10 @@
#include "NetworkManagerUtils.h"
#include "common.h"
#include "reader.h"
#include "writer.h"
#include "utils.h"
#include "nms-ifcfg-rh-common.h"
#include "nms-ifcfg-rh-reader.h"
#include "nms-ifcfg-rh-writer.h"
#include "nms-ifcfg-rh-utils.h"
#include "nm-test-utils-core.h"
@ -8850,6 +8850,120 @@ test_sit_read_ignore (void)
/*****************************************************************************/
static void
do_test_utils_name (const char *desc,
const char *path,
gboolean only_ifcfg,
const char *expected)
{
const char *result;
result = utils_get_ifcfg_name (path, only_ifcfg);
g_assert_cmpstr (result, ==, expected);
}
static void
test_utils_name (void)
{
do_test_utils_name ("get-ifcfg-name-bad", "/foo/bar/adfasdfadf", FALSE, NULL);
do_test_utils_name ("get-ifcfg-name-good", "/foo/bar/ifcfg-FooBar", FALSE, "FooBar");
do_test_utils_name ("get-ifcfg-name-keys", "/foo/bar/keys-BlahLbah", FALSE, "BlahLbah");
do_test_utils_name ("get-ifcfg-name-route", "/foo/bar/route-Lalalala", FALSE, "Lalalala");
do_test_utils_name ("get-ifcfg-name-only-ifcfg-route", "/foo/bar/route-Lalalala", TRUE, NULL);
do_test_utils_name ("get-ifcfg-name-only-ifcfg-keys", "/foo/bar/keys-Lalalala", TRUE, NULL);
do_test_utils_name ("get-ifcfg-name-no-path-ifcfg", "ifcfg-Lalalala", FALSE, "Lalalala");
do_test_utils_name ("get-ifcfg-name-no-path-keys", "keys-Lalalala", FALSE, "Lalalala");
do_test_utils_name ("get-ifcfg-name-no-path-route", "route-Lalalala", FALSE, "Lalalala");
do_test_utils_name ("get-ifcfg-name-bad2-ifcfg", "/foo/bar/asdfasifcfg-Foobar", FALSE, NULL);
do_test_utils_name ("get-ifcfg-name-bad2-keys", "/foo/bar/asdfaskeys-Foobar", FALSE, NULL);
do_test_utils_name ("get-ifcfg-name-bad2-route", "/foo/bar/asdfasroute-Foobar", FALSE, NULL);
}
/*****************************************************************************/
static void
do_test_utils_path_ifcfg (const char *desc,
const char *path,
const char *expected)
{
char *result;
result = utils_get_ifcfg_path (path);
g_assert_cmpstr (result, ==, expected);
g_free (result);
}
static void
do_test_utils_path_keys (const char *desc,
const char *path,
const char *expected)
{
char *result;
result = utils_get_keys_path (path);
g_assert_cmpstr (result, ==, expected);
g_free (result);
}
static void
do_test_utils_path_route (const char *desc,
const char *path,
const char *expected)
{
char *result;
result = utils_get_route_path (path);
g_assert_cmpstr (result, ==, expected);
g_free (result);
}
static void
test_utils_path (void)
{
do_test_utils_path_ifcfg ("ifcfg-path-bad", "/foo/bar/adfasdfasdf", NULL);
do_test_utils_path_ifcfg ("ifcfg-path-from-keys-no-path", "keys-BlahBlah", "ifcfg-BlahBlah");
do_test_utils_path_ifcfg ("ifcfg-path-from-keys", "/foo/bar/keys-BlahBlah", "/foo/bar/ifcfg-BlahBlah");
do_test_utils_path_ifcfg ("ifcfg-path-from-route", "/foo/bar/route-BlahBlah", "/foo/bar/ifcfg-BlahBlah");
do_test_utils_path_keys ("keys-path-bad", "/foo/bar/asdfasdfasdfasdf", NULL);
do_test_utils_path_keys ("keys-path-from-ifcfg-no-path", "ifcfg-FooBar", "keys-FooBar");
do_test_utils_path_keys ("keys-path-from-ifcfg", "/foo/bar/ifcfg-FooBar", "/foo/bar/keys-FooBar");
do_test_utils_path_keys ("keys-path-from-route", "/foo/bar/route-FooBar", "/foo/bar/keys-FooBar");
do_test_utils_path_route ("route-path-bad", "/foo/bar/asdfasdfasdfasdf", NULL);
do_test_utils_path_route ("route-path-from-ifcfg-no-path", "ifcfg-FooBar", "route-FooBar");
do_test_utils_path_route ("route-path-from-ifcfg", "/foo/bar/ifcfg-FooBar", "/foo/bar/route-FooBar");
do_test_utils_path_route ("route-path-from-keys", "/foo/bar/keys-FooBar", "/foo/bar/route-FooBar");
}
/*****************************************************************************/
static void
do_test_utils_ignored (const char *desc, const char *path, gboolean expected_ignored)
{
gboolean result;
result = utils_should_ignore_file (path, FALSE);
g_assert (result == expected_ignored);
}
static void
test_utils_ignore (void)
{
do_test_utils_ignored ("ignored-ifcfg", "ifcfg-FooBar", FALSE);
do_test_utils_ignored ("ignored-keys", "keys-FooBar", FALSE);
do_test_utils_ignored ("ignored-route", "route-FooBar", FALSE);
do_test_utils_ignored ("ignored-bak", "ifcfg-FooBar" BAK_TAG, TRUE);
do_test_utils_ignored ("ignored-tilde", "ifcfg-FooBar" TILDE_TAG, TRUE);
do_test_utils_ignored ("ignored-orig", "ifcfg-FooBar" ORIG_TAG, TRUE);
do_test_utils_ignored ("ignored-rej", "ifcfg-FooBar" REJ_TAG, TRUE);
do_test_utils_ignored ("ignored-rpmnew", "ifcfg-FooBar" RPMNEW_TAG, TRUE);
do_test_utils_ignored ("ignored-augnew", "ifcfg-FooBar" AUGNEW_TAG, TRUE);
do_test_utils_ignored ("ignored-augtmp", "ifcfg-FooBar" AUGTMP_TAG, TRUE);
}
/*****************************************************************************/
#define TPATH "/settings/plugins/ifcfg-rh/"
@ -9098,6 +9212,9 @@ int main (int argc, char **argv)
g_test_add_data_func (TPATH "wwan/write-gsm", GUINT_TO_POINTER (TRUE), test_write_mobile_broadband);
g_test_add_data_func (TPATH "wwan/write-cdma", GUINT_TO_POINTER (FALSE), test_write_mobile_broadband);
g_test_add_func (TPATH "utils/name", test_utils_name);
g_test_add_func (TPATH "utils/path", test_utils_path);
g_test_add_func (TPATH "utils/ignore", test_utils_ignore);
return g_test_run ();
}

View file

@ -16,26 +16,34 @@ AM_CPPFLAGS = \
-DSYSCONFDIR=\"$(sysconfdir)\"
-DSBINDIR=\"$(sbindir)\"
pkglib_LTLIBRARIES = libnm-settings-plugin-ifnet.la
pkglib_LTLIBRARIES = \
libnm-settings-plugin-ifnet.la
noinst_LTLIBRARIES = lib-ifnet-io.la
noinst_LTLIBRARIES = \
libnms-ifnet-core.la
###############################################################################
libnms_ifnet_core_la_SOURCES = \
nms-ifnet-net-parser.c\
nms-ifnet-net-parser.h\
nms-ifnet-connection-parser.c \
nms-ifnet-connection-parser.h \
nms-ifnet-net-utils.h\
nms-ifnet-net-utils.c\
nms-ifnet-wpa-parser.h\
nms-ifnet-wpa-parser.c
###############################################################################
libnm_settings_plugin_ifnet_la_SOURCES = \
nm-ifnet-connection.c \
nm-ifnet-connection.h \
plugin.c \
plugin.h
nms-ifnet-connection.c \
nms-ifnet-connection.h \
nms-ifnet-plugin.c \
nms-ifnet-plugin.h
libnm_settings_plugin_ifnet_la_LDFLAGS = -module -avoid-version
libnm_settings_plugin_ifnet_la_LDFLAGS = \
-module -avoid-version
libnm_settings_plugin_ifnet_la_LIBADD = lib-ifnet-io.la
lib_ifnet_io_la_SOURCES = \
net_parser.c\
net_parser.h\
connection_parser.c \
connection_parser.h \
net_utils.h\
net_utils.c\
wpa_parser.h\
wpa_parser.c
libnm_settings_plugin_ifnet_la_LIBADD = \
libnms-ifnet-core.la

View file

@ -21,6 +21,8 @@
#include "nm-default.h"
#include "nms-ifnet-connection-parser.h"
#include <string.h>
#include <arpa/inet.h>
#include <stdlib.h>
@ -30,10 +32,9 @@
#include "nm-core-internal.h"
#include "NetworkManagerUtils.h"
#include "net_utils.h"
#include "wpa_parser.h"
#include "connection_parser.h"
#include "nm-ifnet-connection.h"
#include "nms-ifnet-net-utils.h"
#include "nms-ifnet-wpa-parser.h"
#include "nms-ifnet-connection.h"
static char *
connection_id_from_ifnet_name (const char *conn_name)

View file

@ -21,8 +21,10 @@
#ifndef _CONNECTION_PARSER_H
#define _CONNECTION_PARSER_H
#include <nm-connection.h>
#include "net_parser.h"
#include "nms-ifnet-net-parser.h"
gboolean ifnet_can_write_connection (NMConnection *connection, GError **error);

View file

@ -21,7 +21,7 @@
#include "nm-default.h"
#include "nm-ifnet-connection.h"
#include "nms-ifnet-connection.h"
#include <string.h>
#include <glib/gstdio.h>
@ -32,11 +32,11 @@
#include "nm-settings-connection.h"
#include "nm-settings-plugin.h"
#include "connection_parser.h"
#include "net_parser.h"
#include "net_utils.h"
#include "wpa_parser.h"
#include "plugin.h"
#include "nms-ifnet-connection-parser.h"
#include "nms-ifnet-net-parser.h"
#include "nms-ifnet-net-utils.h"
#include "nms-ifnet-wpa-parser.h"
#include "nms-ifnet-plugin.h"
/*****************************************************************************/

View file

@ -23,7 +23,8 @@
#define __NETWORKMANAGER_IFNET_CONNECTION_H__
#include <nm-settings-connection.h>
#include "net_parser.h"
#include "nms-ifnet-net-parser.h"
#define NM_TYPE_IFNET_CONNECTION (nm_ifnet_connection_get_type ())
#define NM_IFNET_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_IFNET_CONNECTION, NMIfnetConnection))

View file

@ -21,18 +21,18 @@
#include "nm-default.h"
#include "nms-ifnet-net-parser.h"
#include <string.h>
#include <stdio.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include "nm-settings-plugin.h"
#include "plugin.h"
#include "nm-platform.h"
#include "net_parser.h"
#include "net_utils.h"
#include "nms-ifnet-plugin.h"
#include "nms-ifnet-net-utils.h"
/* Save all the connection information */
static GHashTable *conn_table;

View file

@ -21,6 +21,8 @@
#include "nm-default.h"
#include "nms-ifnet-net-utils.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
@ -30,9 +32,9 @@
#include "NetworkManagerUtils.h"
#include "nm-settings-plugin.h"
#include "nm-config.h"
#include "net_utils.h"
#include "wpa_parser.h"
#include "net_parser.h"
#include "nms-ifnet-wpa-parser.h"
#include "nms-ifnet-net-parser.h"
/* emit heading and tailing blank space, tab, character t */
gchar *

View file

@ -28,7 +28,8 @@
#include <nm-setting-ip6-config.h>
#include <nm-setting-ip4-config.h>
#include "net_parser.h"
#include "nms-ifnet-net-parser.h"
#define has_default_ip4_route(conn_name) has_default_route((conn_name), &is_ip4_address)
#define has_default_ip6_route(conn_name) has_default_route((conn_name), &is_ip6_address)

View file

@ -22,7 +22,7 @@
#include "nm-default.h"
#include "plugin.h"
#include "nms-ifnet-plugin.h"
#include <string.h>
#include <gmodule.h>
@ -34,11 +34,11 @@
#include "nm-config.h"
#include "NetworkManagerUtils.h"
#include "nm-ifnet-connection.h"
#include "net_utils.h"
#include "net_parser.h"
#include "wpa_parser.h"
#include "connection_parser.h"
#include "nms-ifnet-connection.h"
#include "nms-ifnet-net-utils.h"
#include "nms-ifnet-net-parser.h"
#include "nms-ifnet-wpa-parser.h"
#include "nms-ifnet-connection-parser.h"
#define IFNET_PLUGIN_NAME_PRINT "ifnet"
#define IFNET_PLUGIN_INFO "(C) 1999-2010 Gentoo Foundation, Inc. To report bugs please use bugs.gentoo.org with [networkmanager] or [qiaomuf] prefix."

View file

@ -21,13 +21,15 @@
#include "nm-default.h"
#include "nms-ifnet-wpa-parser.h"
#include <string.h>
#include <stdlib.h>
#include "nm-settings-plugin.h"
#include "wpa_parser.h"
#include "net_parser.h"
#include "net_utils.h"
#include "nms-ifnet-net-parser.h"
#include "nms-ifnet-net-utils.h"
/* Security information */
static GHashTable *wsec_table = NULL;

View file

@ -24,17 +24,17 @@ AM_CPPFLAGS= \
-DSYSCONFDIR=\"nonexistent\"
noinst_PROGRAMS = test-ifnet
test_ifnet_SOURCES = \
test-ifnet.c \
../connection_parser.c \
../net_parser.c \
../net_utils.c \
../wpa_parser.c
test-ifnet.c
test_ifnet_LDFLAGS = \
$(GLIB_LDFLAGS)
$(CODE_COVERAGE_LDFLAGS)
test_ifnet_LDADD = $(top_builddir)/src/libNetworkManager.la
test_ifnet_LDADD = \
$(top_builddir)/src/settings/plugins/ifnet/libnms-ifnet-core.la \
$(top_builddir)/src/libNetworkManager.la
@VALGRIND_RULES@
TESTS = test-ifnet

View file

@ -30,13 +30,13 @@
#include "nm-utils.h"
#include "nm-config.h"
#include "nm-linux-platform.h"
#include "net_parser.h"
#include "net_utils.h"
#include "wpa_parser.h"
#include "connection_parser.h"
#include "nm-config.h"
#include "nms-ifnet-net-parser.h"
#include "nms-ifnet-net-utils.h"
#include "nms-ifnet-wpa-parser.h"
#include "nms-ifnet-connection-parser.h"
#include "nm-test-utils-core.h"

View file

@ -15,22 +15,31 @@ AM_CPPFLAGS = \
$(GUDEV_CFLAGS) \
-DSYSCONFDIR=\"$(sysconfdir)\"
noinst_LTLIBRARIES = libifupdown-io.la
pkglib_LTLIBRARIES = \
libnm-settings-plugin-ifupdown.la
libifupdown_io_la_SOURCES = \
interface_parser.c \
interface_parser.h \
parser.c \
parser.h
noinst_LTLIBRARIES = \
libnms-ifupdown-core.la
pkglib_LTLIBRARIES = libnm-settings-plugin-ifupdown.la
###############################################################################
libnms_ifupdown_core_la_SOURCES = \
nms-ifupdown-interface-parser.c \
nms-ifupdown-interface-parser.h \
nms-ifupdown-parser.c \
nms-ifupdown-parser.h
###############################################################################
libnm_settings_plugin_ifupdown_la_SOURCES = \
nm-ifupdown-connection.c \
nm-ifupdown-connection.h \
plugin.c \
plugin.h
nms-ifupdown-connection.c \
nms-ifupdown-connection.h \
nms-ifupdown-plugin.c \
nms-ifupdown-plugin.h
libnm_settings_plugin_ifupdown_la_LDFLAGS = -module -avoid-version
libnm_settings_plugin_ifupdown_la_LIBADD = libifupdown-io.la
libnm_settings_plugin_ifupdown_la_LDFLAGS = \
-module -avoid-version
libnm_settings_plugin_ifupdown_la_LIBADD = \
libnms-ifupdown-core.la

View file

@ -22,7 +22,7 @@
#include "nm-default.h"
#include "nm-ifupdown-connection.h"
#include "nms-ifupdown-connection.h"
#include <string.h>
#include <glib/gstdio.h>
@ -32,7 +32,8 @@
#include "nm-setting-wireless-security.h"
#include "nm-settings-connection.h"
#include "nm-settings-plugin.h"
#include "parser.h"
#include "nms-ifupdown-parser.h"
/*****************************************************************************/

View file

@ -26,7 +26,7 @@
#include <nm-settings-connection.h>
#include "interface_parser.h"
#include "nms-ifupdown-interface-parser.h"
#define NM_TYPE_IFUPDOWN_CONNECTION (nm_ifupdown_connection_get_type ())
#define NM_IFUPDOWN_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_IFUPDOWN_CONNECTION, NMIfupdownConnection))

View file

@ -22,7 +22,7 @@
#include "nm-default.h"
#include "interface_parser.h"
#include "nms-ifupdown-interface-parser.h"
#include <stdio.h>
#include <stdlib.h>

View file

@ -23,6 +23,8 @@
#include "nm-default.h"
#include "nms-ifupdown-parser.h"
#include <string.h>
#include <arpa/inet.h>
#include <stdlib.h>
@ -32,14 +34,10 @@
#include "nm-core-internal.h"
#include "nm-settings-plugin.h"
#include "parser.h"
#include "plugin.h"
#include "nms-ifupdown-plugin.h"
#include "nms-ifupdown-parser.h"
#define WPA_PMK_LEN 32
#include "parser.h"
static const gchar*
_ifupdownplugin_guess_connection_type (if_block *block)
{

View file

@ -25,7 +25,8 @@
#define __PARSER_H__
#include <nm-connection.h>
#include "interface_parser.h"
#include "nms-ifupdown-interface-parser.h"
gboolean
ifupdown_update_connection_from_if_block (NMConnection *connection,

View file

@ -24,7 +24,7 @@
#include "nm-default.h"
#include "plugin.h"
#include "nms-ifupdown-plugin.h"
#include <string.h>
#include <arpa/inet.h>
@ -43,9 +43,9 @@
#include "NetworkManagerUtils.h"
#include "nm-config.h"
#include "interface_parser.h"
#include "nm-ifupdown-connection.h"
#include "parser.h"
#include "nms-ifupdown-interface-parser.h"
#include "nms-ifupdown-connection.h"
#include "nms-ifupdown-parser.h"
#define ENI_INTERFACES_FILE "/etc/network/interfaces"

View file

@ -18,11 +18,14 @@ AM_CPPFLAGS = \
noinst_PROGRAMS = test-ifupdown
test_ifupdown_SOURCES = \
test-ifupdown.c \
../interface_parser.c \
../parser.c
test-ifupdown.c
test_ifupdown_LDFLAGS = \
$(GLIB_LDFLAGS)
$(CODE_COVERAGE_LDFLAGS)
test_ifupdown_LDADD = \
$(top_builddir)/src/settings/plugins/ifupdown/libnms-ifupdown-core.la \
$(top_builddir)/src/libNetworkManager.la
@VALGRIND_RULES@

View file

@ -23,8 +23,9 @@
#include <string.h>
#include "nm-core-internal.h"
#include "interface_parser.h"
#include "parser.h"
#include "nms-ifupdown-interface-parser.h"
#include "nms-ifupdown-parser.h"
#include "nm-test-utils-core.h"

View file

@ -20,14 +20,17 @@ AM_CPPFLAGS = \
-DTEST_SCRATCH_DIR=\"$(abs_builddir)/keyfiles\" \
-DNMCONFDIR=\"nonexistent\"
AM_LDFLAGS = \
$(GLIB_LIBS) \
$(CODE_COVERAGE_LDFLAGS)
noinst_PROGRAMS = test-keyfile
test_keyfile_SOURCES = \
test-keyfile.c
test_keyfile_LDADD = \
$(top_builddir)/src/libNetworkManager.la \
$(CODE_COVERAGE_LDFLAGS)
$(top_builddir)/src/libNetworkManager.la
@VALGRIND_RULES@
TESTS = test-keyfile