mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-05-06 05:38:15 +02:00
libnm-core: make nm_setting_verify() take an NMConnection
nm_setting_verify() took a GSList of other NMSettings, but really it would just be simpler all around to pass the NMConnection instead... This means that several formerly NMSetting-branded functions that operated on lists-of-settings now get replaced with NMConnection-branded functions instead.
This commit is contained in:
parent
b108790833
commit
9e5c7d915b
33 changed files with 216 additions and 246 deletions
|
|
@ -45,6 +45,7 @@ libnm_core_headers = \
|
||||||
|
|
||||||
libnm_core_private_headers = \
|
libnm_core_private_headers = \
|
||||||
$(core)/crypto.h \
|
$(core)/crypto.h \
|
||||||
|
$(core)/nm-connection-private.h \
|
||||||
$(core)/nm-core-internal.h \
|
$(core)/nm-core-internal.h \
|
||||||
$(core)/nm-property-compare.h \
|
$(core)/nm-property-compare.h \
|
||||||
$(core)/nm-setting-private.h \
|
$(core)/nm-setting-private.h \
|
||||||
|
|
|
||||||
35
libnm-core/nm-connection-private.h
Normal file
35
libnm-core/nm-connection-private.h
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
|
||||||
|
/*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library 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
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; 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_CONNECTION_PRIVATE_H__
|
||||||
|
#define __NM_CONNECTION_PRIVATE_H__
|
||||||
|
|
||||||
|
#include "nm-setting.h"
|
||||||
|
#include "nm-connection.h"
|
||||||
|
|
||||||
|
NMSetting *_nm_connection_find_base_type_setting (NMConnection *connection);
|
||||||
|
|
||||||
|
const char *_nm_connection_detect_slave_type (NMConnection *connection,
|
||||||
|
NMSetting **out_s_port);
|
||||||
|
|
||||||
|
gboolean _nm_connection_verify_required_interface_name (NMConnection *connection,
|
||||||
|
GError **error);
|
||||||
|
|
||||||
|
#endif /* __NM_CONNECTION_PRIVATE_H__ */
|
||||||
|
|
@ -24,6 +24,7 @@
|
||||||
#include <glib/gi18n.h>
|
#include <glib/gi18n.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "nm-connection.h"
|
#include "nm-connection.h"
|
||||||
|
#include "nm-connection-private.h"
|
||||||
#include "nm-utils.h"
|
#include "nm-utils.h"
|
||||||
#include "nm-setting-private.h"
|
#include "nm-setting-private.h"
|
||||||
#include "nm-core-internal.h"
|
#include "nm-core-internal.h"
|
||||||
|
|
@ -500,13 +501,35 @@ nm_connection_diff (NMConnection *a,
|
||||||
return *out_settings ? FALSE : TRUE;
|
return *out_settings ? FALSE : TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NMSetting *
|
||||||
|
_nm_connection_find_base_type_setting (NMConnection *connection)
|
||||||
|
{
|
||||||
|
NMConnectionPrivate *priv = NM_CONNECTION_GET_PRIVATE (connection);
|
||||||
|
GHashTableIter iter;
|
||||||
|
NMSetting *setting = NULL, *s_iter;
|
||||||
|
|
||||||
|
g_hash_table_iter_init (&iter, priv->settings);
|
||||||
|
while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &s_iter)) {
|
||||||
|
if (!_nm_setting_is_base_type (s_iter))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (setting) {
|
||||||
|
/* FIXME: currently, if there is more than one matching base type,
|
||||||
|
* we cannot detect the base setting.
|
||||||
|
* See: https://bugzilla.gnome.org/show_bug.cgi?id=696936#c8 */
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
setting = s_iter;
|
||||||
|
}
|
||||||
|
return setting;
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
_normalize_connection_type (NMConnection *self)
|
_normalize_connection_type (NMConnection *self)
|
||||||
{
|
{
|
||||||
NMSettingConnection *s_con = nm_connection_get_setting_connection (self);
|
NMSettingConnection *s_con = nm_connection_get_setting_connection (self);
|
||||||
NMSetting *s_base = NULL;
|
NMSetting *s_base = NULL;
|
||||||
const char *type;
|
const char *type;
|
||||||
GSList *all_settings;
|
|
||||||
|
|
||||||
type = nm_setting_connection_get_connection_type (s_con);
|
type = nm_setting_connection_get_connection_type (s_con);
|
||||||
|
|
||||||
|
|
@ -521,26 +544,57 @@ _normalize_connection_type (NMConnection *self)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
all_settings = _nm_utils_hash_values_to_slist (NM_CONNECTION_GET_PRIVATE (self)->settings);
|
s_base = _nm_connection_find_base_type_setting (self);
|
||||||
|
|
||||||
s_base = _nm_setting_find_in_list_base_type (all_settings);
|
|
||||||
g_return_val_if_fail (s_base, FALSE);
|
g_return_val_if_fail (s_base, FALSE);
|
||||||
|
|
||||||
type = nm_setting_get_name (s_base);
|
type = nm_setting_get_name (s_base);
|
||||||
g_object_set (s_con, NM_SETTING_CONNECTION_TYPE, type, NULL);
|
g_object_set (s_con, NM_SETTING_CONNECTION_TYPE, type, NULL);
|
||||||
g_slist_free (all_settings);
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *
|
||||||
|
_nm_connection_detect_slave_type (NMConnection *connection, NMSetting **out_s_port)
|
||||||
|
{
|
||||||
|
NMConnectionPrivate *priv = NM_CONNECTION_GET_PRIVATE (connection);
|
||||||
|
GHashTableIter iter;
|
||||||
|
const char *slave_type = NULL;
|
||||||
|
NMSetting *s_port = NULL, *s_iter;
|
||||||
|
|
||||||
|
g_hash_table_iter_init (&iter, priv->settings);
|
||||||
|
while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &s_iter)) {
|
||||||
|
const char *name = nm_setting_get_name (s_iter);
|
||||||
|
const char *i_slave_type = NULL;
|
||||||
|
|
||||||
|
if (!strcmp (name, NM_SETTING_BRIDGE_PORT_SETTING_NAME))
|
||||||
|
i_slave_type = NM_SETTING_BRIDGE_SETTING_NAME;
|
||||||
|
else if (!strcmp (name, NM_SETTING_TEAM_PORT_SETTING_NAME))
|
||||||
|
i_slave_type = NM_SETTING_TEAM_SETTING_NAME;
|
||||||
|
else
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (slave_type) {
|
||||||
|
/* there are more then one matching port types, cannot detect the slave type. */
|
||||||
|
slave_type = NULL;
|
||||||
|
s_port = NULL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
slave_type = i_slave_type;
|
||||||
|
s_port = s_iter;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (out_s_port)
|
||||||
|
*out_s_port = s_port;
|
||||||
|
return slave_type;
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
_normalize_connection_slave_type (NMConnection *self)
|
_normalize_connection_slave_type (NMConnection *self)
|
||||||
{
|
{
|
||||||
NMSettingConnection *s_con = nm_connection_get_setting_connection (self);
|
NMSettingConnection *s_con = nm_connection_get_setting_connection (self);
|
||||||
const char *slave_type, *port_type;
|
const char *slave_type, *port_type;
|
||||||
GSList *all_settings;
|
|
||||||
|
|
||||||
if (!s_con)
|
if (!s_con)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
@ -563,14 +617,10 @@ _normalize_connection_slave_type (NMConnection *self)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
all_settings = _nm_utils_hash_values_to_slist (NM_CONNECTION_GET_PRIVATE (self)->settings);
|
if ((slave_type = _nm_connection_detect_slave_type (self, NULL))) {
|
||||||
|
|
||||||
if ((slave_type = _nm_setting_slave_type_detect_from_settings (all_settings, NULL))) {
|
|
||||||
g_object_set (s_con, NM_SETTING_CONNECTION_SLAVE_TYPE, slave_type, NULL);
|
g_object_set (s_con, NM_SETTING_CONNECTION_SLAVE_TYPE, slave_type, NULL);
|
||||||
g_slist_free (all_settings);
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
g_slist_free (all_settings);
|
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
@ -721,8 +771,7 @@ _nm_connection_verify (NMConnection *connection, GError **error)
|
||||||
/* Order NMSettingConnection so that it will be verified first.
|
/* Order NMSettingConnection so that it will be verified first.
|
||||||
* The reason is, that errors in this setting might be more fundamental
|
* The reason is, that errors in this setting might be more fundamental
|
||||||
* and should be checked and reported with higher priority.
|
* and should be checked and reported with higher priority.
|
||||||
* Another reason is, that some settings look especially at the
|
*/
|
||||||
* NMSettingConnection, so they find it first in the all_settings list. */
|
|
||||||
if (value == s_con)
|
if (value == s_con)
|
||||||
all_settings = g_slist_append (all_settings, value);
|
all_settings = g_slist_append (all_settings, value);
|
||||||
else
|
else
|
||||||
|
|
@ -742,7 +791,7 @@ _nm_connection_verify (NMConnection *connection, GError **error)
|
||||||
* @NM_SETTING_VERIFY_NORMALIZABLE, so, if we encounter such an error type,
|
* @NM_SETTING_VERIFY_NORMALIZABLE, so, if we encounter such an error type,
|
||||||
* we remember it instead (to return it as output).
|
* we remember it instead (to return it as output).
|
||||||
**/
|
**/
|
||||||
verify_result = _nm_setting_verify (NM_SETTING (setting_i->data), all_settings, &verify_error);
|
verify_result = _nm_setting_verify (NM_SETTING (setting_i->data), connection, &verify_error);
|
||||||
if (verify_result == NM_SETTING_VERIFY_NORMALIZABLE ||
|
if (verify_result == NM_SETTING_VERIFY_NORMALIZABLE ||
|
||||||
verify_result == NM_SETTING_VERIFY_NORMALIZABLE_ERROR) {
|
verify_result == NM_SETTING_VERIFY_NORMALIZABLE_ERROR) {
|
||||||
if ( verify_result == NM_SETTING_VERIFY_NORMALIZABLE_ERROR
|
if ( verify_result == NM_SETTING_VERIFY_NORMALIZABLE_ERROR
|
||||||
|
|
@ -1334,6 +1383,24 @@ nm_connection_get_interface_name (NMConnection *connection)
|
||||||
return s_con ? nm_setting_connection_get_interface_name (s_con) : NULL;
|
return s_con ? nm_setting_connection_get_interface_name (s_con) : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
_nm_connection_verify_required_interface_name (NMConnection *connection,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
const char *interface_name;
|
||||||
|
|
||||||
|
interface_name = nm_connection_get_interface_name (connection);
|
||||||
|
if (interface_name)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
g_set_error_literal (error,
|
||||||
|
NM_CONNECTION_ERROR,
|
||||||
|
NM_CONNECTION_ERROR_MISSING_PROPERTY,
|
||||||
|
_("property is missing"));
|
||||||
|
g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_INTERFACE_NAME);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* nm_connection_get_uuid:
|
* nm_connection_get_uuid:
|
||||||
* @connection: the #NMConnection
|
* @connection: the #NMConnection
|
||||||
|
|
|
||||||
|
|
@ -2601,7 +2601,7 @@ verify_cert (GBytes *bytes, const char *prop_name, GError **error)
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
verify (NMSetting *setting, GSList *all_settings, GError **error)
|
verify (NMSetting *setting, NMConnection *connection, GError **error)
|
||||||
{
|
{
|
||||||
NMSetting8021x *self = NM_SETTING_802_1X (setting);
|
NMSetting8021x *self = NM_SETTING_802_1X (setting);
|
||||||
NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE (self);
|
NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE (self);
|
||||||
|
|
|
||||||
|
|
@ -177,7 +177,7 @@ nm_setting_adsl_get_vci (NMSettingAdsl *setting)
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
verify (NMSetting *setting, GSList *all_settings, GError **error)
|
verify (NMSetting *setting, NMConnection *connection, GError **error)
|
||||||
{
|
{
|
||||||
NMSettingAdslPrivate *priv = NM_SETTING_ADSL_GET_PRIVATE (setting);
|
NMSettingAdslPrivate *priv = NM_SETTING_ADSL_GET_PRIVATE (setting);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -107,7 +107,7 @@ nm_setting_bluetooth_get_bdaddr (NMSettingBluetooth *setting)
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
verify (NMSetting *setting, GSList *all_settings, GError **error)
|
verify (NMSetting *setting, NMConnection *connection, GError **error)
|
||||||
{
|
{
|
||||||
NMSettingBluetoothPrivate *priv = NM_SETTING_BLUETOOTH_GET_PRIVATE (setting);
|
NMSettingBluetoothPrivate *priv = NM_SETTING_BLUETOOTH_GET_PRIVATE (setting);
|
||||||
|
|
||||||
|
|
@ -148,12 +148,12 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make sure the corresponding 'type' setting is present */
|
/* Make sure the corresponding 'type' setting is present */
|
||||||
if ( all_settings
|
if ( connection
|
||||||
&& !strcmp (priv->type, NM_SETTING_BLUETOOTH_TYPE_DUN)) {
|
&& !strcmp (priv->type, NM_SETTING_BLUETOOTH_TYPE_DUN)) {
|
||||||
gboolean gsm = FALSE, cdma = FALSE;
|
gboolean gsm = FALSE, cdma = FALSE;
|
||||||
|
|
||||||
gsm = !!nm_setting_find_in_list (all_settings, NM_SETTING_GSM_SETTING_NAME);
|
gsm = !!nm_connection_get_setting_gsm (connection);
|
||||||
cdma = !!nm_setting_find_in_list (all_settings, NM_SETTING_CDMA_SETTING_NAME);
|
cdma = !!nm_connection_get_setting_cdma (connection);
|
||||||
|
|
||||||
if (!gsm && !cdma) {
|
if (!gsm && !cdma) {
|
||||||
/* We can't return MISSING_SETTING here, because we don't know
|
/* We can't return MISSING_SETTING here, because we don't know
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@
|
||||||
#include "nm-setting-bond.h"
|
#include "nm-setting-bond.h"
|
||||||
#include "nm-utils.h"
|
#include "nm-utils.h"
|
||||||
#include "nm-utils-private.h"
|
#include "nm-utils-private.h"
|
||||||
#include "nm-setting-private.h"
|
#include "nm-connection-private.h"
|
||||||
#include "nm-setting-infiniband.h"
|
#include "nm-setting-infiniband.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -432,7 +432,7 @@ nm_setting_bond_get_option_default (NMSettingBond *setting, const char *name)
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
verify (NMSetting *setting, GSList *all_settings, GError **error)
|
verify (NMSetting *setting, NMConnection *connection, GError **error)
|
||||||
{
|
{
|
||||||
NMSettingBondPrivate *priv = NM_SETTING_BOND_GET_PRIVATE (setting);
|
NMSettingBondPrivate *priv = NM_SETTING_BOND_GET_PRIVATE (setting);
|
||||||
GHashTableIter iter;
|
GHashTableIter iter;
|
||||||
|
|
@ -539,7 +539,7 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nm_setting_find_in_list (all_settings, NM_SETTING_INFINIBAND_SETTING_NAME)) {
|
if (nm_connection_get_setting_infiniband (connection)) {
|
||||||
if (strcmp (value, "active-backup") != 0) {
|
if (strcmp (value, "active-backup") != 0) {
|
||||||
g_set_error (error,
|
g_set_error (error,
|
||||||
NM_CONNECTION_ERROR,
|
NM_CONNECTION_ERROR,
|
||||||
|
|
@ -642,7 +642,7 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _nm_setting_verify_required_virtual_interface_name (all_settings, error);
|
return _nm_connection_verify_required_interface_name (connection, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@
|
||||||
#include "nm-setting-bridge-port.h"
|
#include "nm-setting-bridge-port.h"
|
||||||
#include "nm-utils.h"
|
#include "nm-utils.h"
|
||||||
#include "nm-utils-private.h"
|
#include "nm-utils-private.h"
|
||||||
#include "nm-setting-private.h"
|
#include "nm-connection-private.h"
|
||||||
#include "nm-setting-connection.h"
|
#include "nm-setting-connection.h"
|
||||||
#include "nm-setting-bridge.h"
|
#include "nm-setting-bridge.h"
|
||||||
|
|
||||||
|
|
@ -112,7 +112,7 @@ nm_setting_bridge_port_get_hairpin_mode (NMSettingBridgePort *setting)
|
||||||
#define BR_MAX_PATH_COST 65535
|
#define BR_MAX_PATH_COST 65535
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
verify (NMSetting *setting, GSList *all_settings, GError **error)
|
verify (NMSetting *setting, NMConnection *connection, GError **error)
|
||||||
{
|
{
|
||||||
NMSettingBridgePortPrivate *priv = NM_SETTING_BRIDGE_PORT_GET_PRIVATE (setting);
|
NMSettingBridgePortPrivate *priv = NM_SETTING_BRIDGE_PORT_GET_PRIVATE (setting);
|
||||||
|
|
||||||
|
|
@ -141,15 +141,19 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (all_settings) {
|
if (connection) {
|
||||||
NMSettingConnection *s_con;
|
NMSettingConnection *s_con;
|
||||||
const char *slave_type;
|
const char *slave_type;
|
||||||
|
|
||||||
s_con = NM_SETTING_CONNECTION (_nm_setting_find_in_list_required (all_settings,
|
s_con = nm_connection_get_setting_connection (connection);
|
||||||
NM_SETTING_CONNECTION_SETTING_NAME,
|
if (!s_con) {
|
||||||
error));
|
g_set_error (error,
|
||||||
if (!s_con)
|
NM_CONNECTION_ERROR,
|
||||||
return FALSE;
|
NM_CONNECTION_ERROR_MISSING_SETTING,
|
||||||
|
_("missing setting"));
|
||||||
|
g_prefix_error (error, "%s: ", NM_SETTING_CONNECTION_SETTING_NAME);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
slave_type = nm_setting_connection_get_slave_type (s_con);
|
slave_type = nm_setting_connection_get_slave_type (s_con);
|
||||||
if ( slave_type
|
if ( slave_type
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@
|
||||||
#include <glib/gi18n.h>
|
#include <glib/gi18n.h>
|
||||||
|
|
||||||
#include "nm-setting-bridge.h"
|
#include "nm-setting-bridge.h"
|
||||||
#include "nm-setting-private.h"
|
#include "nm-connection-private.h"
|
||||||
#include "nm-utils.h"
|
#include "nm-utils.h"
|
||||||
#include "nm-utils-private.h"
|
#include "nm-utils-private.h"
|
||||||
|
|
||||||
|
|
@ -210,7 +210,7 @@ check_range (guint32 val,
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
verify (NMSetting *setting, GSList *all_settings, GError **error)
|
verify (NMSetting *setting, NMConnection *connection, GError **error)
|
||||||
{
|
{
|
||||||
NMSettingBridgePrivate *priv = NM_SETTING_BRIDGE_GET_PRIVATE (setting);
|
NMSettingBridgePrivate *priv = NM_SETTING_BRIDGE_GET_PRIVATE (setting);
|
||||||
|
|
||||||
|
|
@ -251,7 +251,7 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
|
||||||
error))
|
error))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
return _nm_setting_verify_required_virtual_interface_name (all_settings, error);
|
return _nm_connection_verify_required_interface_name (connection, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
||||||
|
|
@ -129,7 +129,7 @@ nm_setting_cdma_get_password_flags (NMSettingCdma *setting)
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
verify (NMSetting *setting, GSList *all_settings, GError **error)
|
verify (NMSetting *setting, NMConnection *connection, GError **error)
|
||||||
{
|
{
|
||||||
NMSettingCdmaPrivate *priv = NM_SETTING_CDMA_GET_PRIVATE (setting);
|
NMSettingCdmaPrivate *priv = NM_SETTING_CDMA_GET_PRIVATE (setting);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@
|
||||||
#include "nm-utils.h"
|
#include "nm-utils.h"
|
||||||
#include "nm-utils-private.h"
|
#include "nm-utils-private.h"
|
||||||
#include "nm-setting-connection.h"
|
#include "nm-setting-connection.h"
|
||||||
#include "nm-setting-private.h"
|
#include "nm-connection-private.h"
|
||||||
#include "nm-setting-bond.h"
|
#include "nm-setting-bond.h"
|
||||||
#include "nm-setting-bridge.h"
|
#include "nm-setting-bridge.h"
|
||||||
#include "nm-setting-team.h"
|
#include "nm-setting-team.h"
|
||||||
|
|
@ -748,7 +748,7 @@ _set_error_missing_base_setting (GError **error, const char *type)
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
verify (NMSetting *setting, GSList *all_settings, GError **error)
|
verify (NMSetting *setting, NMConnection *connection, GError **error)
|
||||||
{
|
{
|
||||||
NMSettingConnectionPrivate *priv = NM_SETTING_CONNECTION_GET_PRIVATE (setting);
|
NMSettingConnectionPrivate *priv = NM_SETTING_CONNECTION_GET_PRIVATE (setting);
|
||||||
gboolean is_slave;
|
gboolean is_slave;
|
||||||
|
|
@ -805,7 +805,7 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!priv->type) {
|
if (!priv->type) {
|
||||||
if (!(normerr_base_type = _nm_setting_find_in_list_base_type (all_settings))) {
|
if (!connection || !(normerr_base_type = _nm_connection_find_base_type_setting (connection))) {
|
||||||
g_set_error_literal (error,
|
g_set_error_literal (error,
|
||||||
NM_CONNECTION_ERROR,
|
NM_CONNECTION_ERROR,
|
||||||
NM_CONNECTION_ERROR_MISSING_PROPERTY,
|
NM_CONNECTION_ERROR_MISSING_PROPERTY,
|
||||||
|
|
@ -837,18 +837,18 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make sure the corresponding 'type' item is present */
|
/* Make sure the corresponding 'type' item is present */
|
||||||
if ( all_settings
|
if ( connection
|
||||||
&& !nm_setting_find_in_list (all_settings, priv->type)) {
|
&& !nm_connection_get_setting_by_name (connection, priv->type)) {
|
||||||
NMSetting *s_base;
|
NMSetting *s_base;
|
||||||
GSList *all_settings2;
|
NMConnection *connection2;
|
||||||
|
|
||||||
s_base = g_object_new (base_type, NULL);
|
s_base = g_object_new (base_type, NULL);
|
||||||
all_settings2 = g_slist_prepend (all_settings, s_base);
|
connection2 = nm_simple_connection_new_clone (connection);
|
||||||
|
nm_connection_add_setting (connection2, s_base);
|
||||||
|
|
||||||
normerr_base_setting = nm_setting_verify (s_base, all_settings2, NULL);
|
normerr_base_setting = nm_setting_verify (s_base, connection2, NULL);
|
||||||
|
|
||||||
g_slist_free_1 (all_settings2);
|
g_object_unref (connection2);
|
||||||
g_object_unref (s_base);
|
|
||||||
|
|
||||||
if (!normerr_base_setting) {
|
if (!normerr_base_setting) {
|
||||||
_set_error_missing_base_setting (error, priv->type);
|
_set_error_missing_base_setting (error, priv->type);
|
||||||
|
|
@ -880,16 +880,16 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
if ( slave_setting_type
|
if ( slave_setting_type
|
||||||
&& all_settings /* only check for an existing slave-setting when having @all_settings */
|
&& connection
|
||||||
&& !nm_setting_find_in_list (all_settings, slave_setting_type))
|
&& !nm_connection_get_setting_by_name (connection, slave_setting_type))
|
||||||
normerr_slave_setting_type = slave_setting_type;
|
normerr_slave_setting_type = slave_setting_type;
|
||||||
} else {
|
} else {
|
||||||
if (priv->master) {
|
if (priv->master) {
|
||||||
const char *slave_type;
|
const char *slave_type;
|
||||||
NMSetting *s_port;
|
NMSetting *s_port;
|
||||||
|
|
||||||
if ( all_settings
|
if ( connection
|
||||||
&& (slave_type = _nm_setting_slave_type_detect_from_settings (all_settings, &s_port))) {
|
&& (slave_type = _nm_connection_detect_slave_type (connection, &s_port))) {
|
||||||
normerr_missing_slave_type = slave_type;
|
normerr_missing_slave_type = slave_type;
|
||||||
normerr_missing_slave_type_port = nm_setting_get_name (s_port);
|
normerr_missing_slave_type_port = nm_setting_get_name (s_port);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -619,7 +619,7 @@ check_priority (gint val,
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
verify (NMSetting *setting, GSList *all_settings, GError **error)
|
verify (NMSetting *setting, NMConnection *connection, GError **error)
|
||||||
{
|
{
|
||||||
NMSettingDcbPrivate *priv = NM_SETTING_DCB_GET_PRIVATE (setting);
|
NMSettingDcbPrivate *priv = NM_SETTING_DCB_GET_PRIVATE (setting);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -213,7 +213,7 @@ nm_setting_gsm_get_home_only (NMSettingGsm *setting)
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
verify (NMSetting *setting, GSList *all_settings, GError **error)
|
verify (NMSetting *setting, NMConnection *connection, GError **error)
|
||||||
{
|
{
|
||||||
NMSettingGsmPrivate *priv = NM_SETTING_GSM_GET_PRIVATE (setting);
|
NMSettingGsmPrivate *priv = NM_SETTING_GSM_GET_PRIVATE (setting);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -178,7 +178,7 @@ nm_setting_infiniband_get_virtual_interface_name (NMSettingInfiniband *setting)
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
verify (NMSetting *setting, GSList *all_settings, GError **error)
|
verify (NMSetting *setting, NMConnection *connection, GError **error)
|
||||||
{
|
{
|
||||||
NMSettingConnection *s_con;
|
NMSettingConnection *s_con;
|
||||||
NMSettingInfinibandPrivate *priv = NM_SETTING_INFINIBAND_GET_PRIVATE (setting);
|
NMSettingInfinibandPrivate *priv = NM_SETTING_INFINIBAND_GET_PRIVATE (setting);
|
||||||
|
|
@ -237,7 +237,7 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
s_con = NM_SETTING_CONNECTION (nm_setting_find_in_list (all_settings, NM_SETTING_CONNECTION_SETTING_NAME));
|
s_con = nm_connection_get_setting_connection (connection);
|
||||||
if (s_con) {
|
if (s_con) {
|
||||||
const char *interface_name = nm_setting_connection_get_interface_name (s_con);
|
const char *interface_name = nm_setting_connection_get_interface_name (s_con);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -868,7 +868,7 @@ verify_label (const char *label)
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
verify (NMSetting *setting, GSList *all_settings, GError **error)
|
verify (NMSetting *setting, NMConnection *connection, GError **error)
|
||||||
{
|
{
|
||||||
NMSettingIP4ConfigPrivate *priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting);
|
NMSettingIP4ConfigPrivate *priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting);
|
||||||
GSList *iter, *l_iter;
|
GSList *iter, *l_iter;
|
||||||
|
|
|
||||||
|
|
@ -786,7 +786,7 @@ nm_setting_ip6_config_get_ip6_privacy (NMSettingIP6Config *setting)
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
verify (NMSetting *setting, GSList *all_settings, GError **error)
|
verify (NMSetting *setting, NMConnection *connection, GError **error)
|
||||||
{
|
{
|
||||||
NMSettingIP6ConfigPrivate *priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting);
|
NMSettingIP6ConfigPrivate *priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting);
|
||||||
GSList *iter;
|
GSList *iter;
|
||||||
|
|
|
||||||
|
|
@ -94,7 +94,7 @@ nm_setting_olpc_mesh_get_dhcp_anycast_address (NMSettingOlpcMesh *setting)
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
verify (NMSetting *setting, GSList *all_settings, GError **error)
|
verify (NMSetting *setting, NMConnection *connection, GError **error)
|
||||||
{
|
{
|
||||||
NMSettingOlpcMeshPrivate *priv = NM_SETTING_OLPC_MESH_GET_PRIVATE (setting);
|
NMSettingOlpcMeshPrivate *priv = NM_SETTING_OLPC_MESH_GET_PRIVATE (setting);
|
||||||
gsize length;
|
gsize length;
|
||||||
|
|
|
||||||
|
|
@ -352,7 +352,7 @@ nm_setting_ppp_get_lcp_echo_interval (NMSettingPpp *setting)
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
verify (NMSetting *setting, GSList *all_settings, GError **error)
|
verify (NMSetting *setting, NMConnection *connection, GError **error)
|
||||||
{
|
{
|
||||||
NMSettingPppPrivate *priv = NM_SETTING_PPP_GET_PRIVATE (setting);
|
NMSettingPppPrivate *priv = NM_SETTING_PPP_GET_PRIVATE (setting);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -130,7 +130,7 @@ nm_setting_pppoe_get_password_flags (NMSettingPppoe *setting)
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
verify (NMSetting *setting, GSList *all_settings, GError **error)
|
verify (NMSetting *setting, NMConnection *connection, GError **error)
|
||||||
{
|
{
|
||||||
NMSettingPppoePrivate *priv = NM_SETTING_PPPOE_GET_PRIVATE (setting);
|
NMSettingPppoePrivate *priv = NM_SETTING_PPPOE_GET_PRIVATE (setting);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -91,26 +91,15 @@ gboolean _nm_setting_clear_secrets_with_flags (NMSetting *setting,
|
||||||
static void __attribute__((constructor)) register_setting (void) \
|
static void __attribute__((constructor)) register_setting (void) \
|
||||||
{ g_type_init (); g_type_ensure (x); }
|
{ g_type_init (); g_type_ensure (x); }
|
||||||
|
|
||||||
NMSetting *nm_setting_find_in_list (GSList *settings_list, const char *setting_name);
|
|
||||||
|
|
||||||
NMSetting * _nm_setting_find_in_list_required (GSList *all_settings,
|
|
||||||
const char *setting_name,
|
|
||||||
GError **error);
|
|
||||||
|
|
||||||
NMSettingVerifyResult _nm_setting_verify_required_virtual_interface_name (GSList *all_settings,
|
|
||||||
GError **error);
|
|
||||||
|
|
||||||
GVariant *_nm_setting_get_deprecated_virtual_interface_name (NMSetting *setting,
|
GVariant *_nm_setting_get_deprecated_virtual_interface_name (NMSetting *setting,
|
||||||
NMConnection *connection,
|
NMConnection *connection,
|
||||||
const char *property);
|
const char *property);
|
||||||
|
|
||||||
NMSettingVerifyResult _nm_setting_verify (NMSetting *setting,
|
NMSettingVerifyResult _nm_setting_verify (NMSetting *setting,
|
||||||
GSList *all_settings,
|
NMConnection *connection,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
NMSetting *_nm_setting_find_in_list_base_type (GSList *all_settings);
|
|
||||||
gboolean _nm_setting_slave_type_is_valid (const char *slave_type, const char **out_port_type);
|
gboolean _nm_setting_slave_type_is_valid (const char *slave_type, const char **out_port_type);
|
||||||
const char * _nm_setting_slave_type_detect_from_settings (GSList *all_settings, NMSetting **out_s_port);
|
|
||||||
|
|
||||||
GVariant *_nm_setting_to_dbus (NMSetting *setting,
|
GVariant *_nm_setting_to_dbus (NMSetting *setting,
|
||||||
NMConnection *connection,
|
NMConnection *connection,
|
||||||
|
|
|
||||||
|
|
@ -146,7 +146,7 @@ nm_setting_serial_get_send_delay (NMSettingSerial *setting)
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
verify (NMSetting *setting, GSList *all_settings, GError **error)
|
verify (NMSetting *setting, NMConnection *connection, GError **error)
|
||||||
{
|
{
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@
|
||||||
#include "nm-setting-team-port.h"
|
#include "nm-setting-team-port.h"
|
||||||
#include "nm-utils.h"
|
#include "nm-utils.h"
|
||||||
#include "nm-utils-private.h"
|
#include "nm-utils-private.h"
|
||||||
#include "nm-setting-private.h"
|
#include "nm-connection-private.h"
|
||||||
#include "nm-setting-connection.h"
|
#include "nm-setting-connection.h"
|
||||||
#include "nm-setting-team.h"
|
#include "nm-setting-team.h"
|
||||||
|
|
||||||
|
|
@ -82,17 +82,21 @@ nm_setting_team_port_get_config (NMSettingTeamPort *setting)
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
verify (NMSetting *setting, GSList *all_settings, GError **error)
|
verify (NMSetting *setting, NMConnection *connection, GError **error)
|
||||||
{
|
{
|
||||||
if (all_settings) {
|
if (connection) {
|
||||||
NMSettingConnection *s_con;
|
NMSettingConnection *s_con;
|
||||||
const char *slave_type;
|
const char *slave_type;
|
||||||
|
|
||||||
s_con = NM_SETTING_CONNECTION (_nm_setting_find_in_list_required (all_settings,
|
s_con = nm_connection_get_setting_connection (connection);
|
||||||
NM_SETTING_CONNECTION_SETTING_NAME,
|
if (!s_con) {
|
||||||
error));
|
g_set_error (error,
|
||||||
if (!s_con)
|
NM_CONNECTION_ERROR,
|
||||||
|
NM_CONNECTION_ERROR_MISSING_SETTING,
|
||||||
|
_("missing setting"));
|
||||||
|
g_prefix_error (error, "%s: ", NM_SETTING_CONNECTION_SETTING_NAME);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
slave_type = nm_setting_connection_get_slave_type (s_con);
|
slave_type = nm_setting_connection_get_slave_type (s_con);
|
||||||
if ( slave_type
|
if ( slave_type
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@
|
||||||
#include "nm-setting-team.h"
|
#include "nm-setting-team.h"
|
||||||
#include "nm-utils.h"
|
#include "nm-utils.h"
|
||||||
#include "nm-utils-private.h"
|
#include "nm-utils-private.h"
|
||||||
#include "nm-setting-private.h"
|
#include "nm-connection-private.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SECTION:nm-setting-team
|
* SECTION:nm-setting-team
|
||||||
|
|
@ -79,9 +79,9 @@ nm_setting_team_get_config (NMSettingTeam *setting)
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
verify (NMSetting *setting, GSList *all_settings, GError **error)
|
verify (NMSetting *setting, NMConnection *connection, GError **error)
|
||||||
{
|
{
|
||||||
return _nm_setting_verify_required_virtual_interface_name (all_settings, error);
|
return _nm_connection_verify_required_interface_name (connection, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@
|
||||||
#include "nm-setting-connection.h"
|
#include "nm-setting-connection.h"
|
||||||
#include "nm-setting-private.h"
|
#include "nm-setting-private.h"
|
||||||
#include "nm-setting-wired.h"
|
#include "nm-setting-wired.h"
|
||||||
|
#include "nm-connection-private.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SECTION:nm-setting-vlan
|
* SECTION:nm-setting-vlan
|
||||||
|
|
@ -479,18 +480,18 @@ nm_setting_vlan_init (NMSettingVlan *setting)
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
verify (NMSetting *setting, GSList *all_settings, GError **error)
|
verify (NMSetting *setting, NMConnection *connection, GError **error)
|
||||||
{
|
{
|
||||||
NMSettingVlanPrivate *priv = NM_SETTING_VLAN_GET_PRIVATE (setting);
|
NMSettingVlanPrivate *priv = NM_SETTING_VLAN_GET_PRIVATE (setting);
|
||||||
NMSettingConnection *s_con = NULL;
|
NMSettingConnection *s_con;
|
||||||
NMSettingWired *s_wired = NULL;
|
NMSettingWired *s_wired;
|
||||||
GSList *iter;
|
|
||||||
|
|
||||||
for (iter = all_settings; iter; iter = iter->next) {
|
if (connection) {
|
||||||
if (NM_IS_SETTING_CONNECTION (iter->data))
|
s_con = nm_connection_get_setting_connection (connection);
|
||||||
s_con = iter->data;
|
s_wired = nm_connection_get_setting_wired (connection);
|
||||||
else if (NM_IS_SETTING_WIRED (iter->data))
|
} else {
|
||||||
s_wired = iter->data;
|
s_con = NULL;
|
||||||
|
s_wired = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (priv->parent) {
|
if (priv->parent) {
|
||||||
|
|
@ -529,7 +530,7 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
|
||||||
/* If parent is NULL, the parent must be specified via
|
/* If parent is NULL, the parent must be specified via
|
||||||
* NMSettingWired:mac-address.
|
* NMSettingWired:mac-address.
|
||||||
*/
|
*/
|
||||||
if ( all_settings
|
if ( connection
|
||||||
&& (!s_wired || !nm_setting_wired_get_mac_address (s_wired))) {
|
&& (!s_wired || !nm_setting_wired_get_mac_address (s_wired))) {
|
||||||
g_set_error (error,
|
g_set_error (error,
|
||||||
NM_CONNECTION_ERROR,
|
NM_CONNECTION_ERROR,
|
||||||
|
|
|
||||||
|
|
@ -367,7 +367,7 @@ nm_setting_vpn_foreach_secret (NMSettingVpn *setting,
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
verify (NMSetting *setting, GSList *all_settings, GError **error)
|
verify (NMSetting *setting, NMConnection *connection, GError **error)
|
||||||
{
|
{
|
||||||
NMSettingVpnPrivate *priv = NM_SETTING_VPN_GET_PRIVATE (setting);
|
NMSettingVpnPrivate *priv = NM_SETTING_VPN_GET_PRIVATE (setting);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -104,7 +104,7 @@ nm_setting_wimax_get_mac_address (NMSettingWimax *setting)
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
verify (NMSetting *setting, GSList *all_settings, GError **error)
|
verify (NMSetting *setting, NMConnection *connection, GError **error)
|
||||||
{
|
{
|
||||||
NMSettingWimaxPrivate *priv = NM_SETTING_WIMAX_GET_PRIVATE (setting);
|
NMSettingWimaxPrivate *priv = NM_SETTING_WIMAX_GET_PRIVATE (setting);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -555,7 +555,7 @@ nm_setting_wired_get_valid_s390_options (NMSettingWired *setting)
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
verify (NMSetting *setting, GSList *all_settings, GError **error)
|
verify (NMSetting *setting, NMConnection *connection, GError **error)
|
||||||
{
|
{
|
||||||
NMSettingWiredPrivate *priv = NM_SETTING_WIRED_GET_PRIVATE (setting);
|
NMSettingWiredPrivate *priv = NM_SETTING_WIRED_GET_PRIVATE (setting);
|
||||||
const char *valid_ports[] = { "tp", "aui", "bnc", "mii", NULL };
|
const char *valid_ports[] = { "tp", "aui", "bnc", "mii", NULL };
|
||||||
|
|
|
||||||
|
|
@ -844,7 +844,7 @@ no_secrets:
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
verify (NMSetting *setting, GSList *all_settings, GError **error)
|
verify (NMSetting *setting, NMConnection *connection, GError **error)
|
||||||
{
|
{
|
||||||
NMSettingWirelessSecurity *self = NM_SETTING_WIRELESS_SECURITY (setting);
|
NMSettingWirelessSecurity *self = NM_SETTING_WIRELESS_SECURITY (setting);
|
||||||
NMSettingWirelessSecurityPrivate *priv = NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (self);
|
NMSettingWirelessSecurityPrivate *priv = NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (self);
|
||||||
|
|
@ -904,7 +904,7 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
|
||||||
if ( (strcmp (priv->key_mgmt, "ieee8021x") == 0)
|
if ( (strcmp (priv->key_mgmt, "ieee8021x") == 0)
|
||||||
|| (strcmp (priv->key_mgmt, "wpa-eap") == 0)) {
|
|| (strcmp (priv->key_mgmt, "wpa-eap") == 0)) {
|
||||||
/* Need an 802.1x setting too */
|
/* Need an 802.1x setting too */
|
||||||
if (!nm_setting_find_in_list (all_settings, NM_SETTING_802_1X_SETTING_NAME)) {
|
if (connection && !nm_connection_get_setting_802_1x (connection)) {
|
||||||
g_set_error (error,
|
g_set_error (error,
|
||||||
NM_CONNECTION_ERROR,
|
NM_CONNECTION_ERROR,
|
||||||
NM_CONNECTION_ERROR_MISSING_SETTING,
|
NM_CONNECTION_ERROR_MISSING_SETTING,
|
||||||
|
|
|
||||||
|
|
@ -676,7 +676,7 @@ nm_setting_wireless_get_seen_bssid (NMSettingWireless *setting,
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
verify (NMSetting *setting, GSList *all_settings, GError **error)
|
verify (NMSetting *setting, NMConnection *connection, GError **error)
|
||||||
{
|
{
|
||||||
NMSettingWirelessPrivate *priv = NM_SETTING_WIRELESS_GET_PRIVATE (setting);
|
NMSettingWirelessPrivate *priv = NM_SETTING_WIRELESS_GET_PRIVATE (setting);
|
||||||
const char *valid_modes[] = { NM_SETTING_WIRELESS_MODE_INFRA, NM_SETTING_WIRELESS_MODE_ADHOC, NM_SETTING_WIRELESS_MODE_AP, NULL };
|
const char *valid_modes[] = { NM_SETTING_WIRELESS_MODE_INFRA, NM_SETTING_WIRELESS_MODE_ADHOC, NM_SETTING_WIRELESS_MODE_AP, NULL };
|
||||||
|
|
|
||||||
|
|
@ -283,64 +283,6 @@ _nm_setting_slave_type_is_valid (const char *slave_type, const char **out_port_t
|
||||||
return found;
|
return found;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
NMSetting *
|
|
||||||
_nm_setting_find_in_list_base_type (GSList *all_settings)
|
|
||||||
{
|
|
||||||
GSList *iter;
|
|
||||||
NMSetting *setting = NULL;
|
|
||||||
|
|
||||||
for (iter = all_settings; iter; iter = iter->next) {
|
|
||||||
NMSetting *s_iter = NM_SETTING (iter->data);
|
|
||||||
|
|
||||||
if (!_nm_setting_is_base_type (s_iter))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (setting) {
|
|
||||||
/* FIXME: currently, if there is more than one matching base type,
|
|
||||||
* we cannot detect the base setting.
|
|
||||||
* See: https://bugzilla.gnome.org/show_bug.cgi?id=696936#c8 */
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
setting = s_iter;
|
|
||||||
}
|
|
||||||
return setting;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *
|
|
||||||
_nm_setting_slave_type_detect_from_settings (GSList *all_settings, NMSetting **out_s_port)
|
|
||||||
{
|
|
||||||
GSList *iter;
|
|
||||||
const char *slave_type = NULL;
|
|
||||||
NMSetting *s_port = NULL;
|
|
||||||
|
|
||||||
for (iter = all_settings; iter; iter = iter->next) {
|
|
||||||
NMSetting *s_iter = NM_SETTING (iter->data);
|
|
||||||
const char *name = nm_setting_get_name (s_iter);
|
|
||||||
const char *i_slave_type = NULL;
|
|
||||||
|
|
||||||
if (!strcmp (name, NM_SETTING_BRIDGE_PORT_SETTING_NAME))
|
|
||||||
i_slave_type = NM_SETTING_BRIDGE_SETTING_NAME;
|
|
||||||
else if (!strcmp (name, NM_SETTING_TEAM_PORT_SETTING_NAME))
|
|
||||||
i_slave_type = NM_SETTING_TEAM_SETTING_NAME;
|
|
||||||
else
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (slave_type) {
|
|
||||||
/* there are more then one matching port types, cannot detect the slave type. */
|
|
||||||
slave_type = NULL;
|
|
||||||
s_port = NULL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
slave_type = i_slave_type;
|
|
||||||
s_port = s_iter;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (out_s_port)
|
|
||||||
*out_s_port = s_port;
|
|
||||||
return slave_type;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*************************************************************/
|
/*************************************************************/
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
@ -900,28 +842,6 @@ nm_setting_duplicate (NMSetting *setting)
|
||||||
return NM_SETTING (dup);
|
return NM_SETTING (dup);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gint
|
|
||||||
find_setting_by_name (gconstpointer a, gconstpointer b)
|
|
||||||
{
|
|
||||||
NMSetting *setting = NM_SETTING (a);
|
|
||||||
const char *str = (const char *) b;
|
|
||||||
|
|
||||||
return strcmp (nm_setting_get_name (setting), str);
|
|
||||||
}
|
|
||||||
|
|
||||||
NMSetting *
|
|
||||||
nm_setting_find_in_list (GSList *settings_list,
|
|
||||||
const char *setting_name)
|
|
||||||
{
|
|
||||||
GSList *found;
|
|
||||||
|
|
||||||
found = g_slist_find_custom (settings_list, setting_name, find_setting_by_name);
|
|
||||||
if (found)
|
|
||||||
return found->data;
|
|
||||||
else
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* nm_setting_get_name:
|
* nm_setting_get_name:
|
||||||
* @setting: the #NMSetting
|
* @setting: the #NMSetting
|
||||||
|
|
@ -945,21 +865,21 @@ nm_setting_get_name (NMSetting *setting)
|
||||||
/**
|
/**
|
||||||
* nm_setting_verify:
|
* nm_setting_verify:
|
||||||
* @setting: the #NMSetting to verify
|
* @setting: the #NMSetting to verify
|
||||||
* @all_settings: (element-type NMSetting): a #GSList of all settings
|
* @connection: (allow-none): the #NMConnection that @setting came from, or
|
||||||
* in the connection from which @setting came
|
* %NULL if @setting is being verified in isolation.
|
||||||
* @error: location to store error, or %NULL
|
* @error: location to store error, or %NULL
|
||||||
*
|
*
|
||||||
* Validates the setting. Each setting's properties have allowed values, and
|
* Validates the setting. Each setting's properties have allowed values, and
|
||||||
* some are dependent on other values (hence the need for @all_settings). The
|
* some are dependent on other values (hence the need for @connection). The
|
||||||
* returned #GError contains information about which property of the setting
|
* returned #GError contains information about which property of the setting
|
||||||
* failed validation, and in what way that property failed validation.
|
* failed validation, and in what way that property failed validation.
|
||||||
*
|
*
|
||||||
* Returns: %TRUE if the setting is valid, %FALSE if it is not
|
* Returns: %TRUE if the setting is valid, %FALSE if it is not
|
||||||
**/
|
**/
|
||||||
gboolean
|
gboolean
|
||||||
nm_setting_verify (NMSetting *setting, GSList *all_settings, GError **error)
|
nm_setting_verify (NMSetting *setting, NMConnection *connection, GError **error)
|
||||||
{
|
{
|
||||||
NMSettingVerifyResult result = _nm_setting_verify (setting, all_settings, error);
|
NMSettingVerifyResult result = _nm_setting_verify (setting, connection, error);
|
||||||
|
|
||||||
if (result == NM_SETTING_VERIFY_NORMALIZABLE)
|
if (result == NM_SETTING_VERIFY_NORMALIZABLE)
|
||||||
g_clear_error (error);
|
g_clear_error (error);
|
||||||
|
|
@ -968,13 +888,14 @@ nm_setting_verify (NMSetting *setting, GSList *all_settings, GError **error)
|
||||||
}
|
}
|
||||||
|
|
||||||
NMSettingVerifyResult
|
NMSettingVerifyResult
|
||||||
_nm_setting_verify (NMSetting *setting, GSList *all_settings, GError **error)
|
_nm_setting_verify (NMSetting *setting, NMConnection *connection, GError **error)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (NM_IS_SETTING (setting), NM_SETTING_VERIFY_ERROR);
|
g_return_val_if_fail (NM_IS_SETTING (setting), NM_SETTING_VERIFY_ERROR);
|
||||||
|
g_return_val_if_fail (!connection || NM_IS_CONNECTION (connection), NM_SETTING_VERIFY_ERROR);
|
||||||
g_return_val_if_fail (!error || *error == NULL, NM_SETTING_VERIFY_ERROR);
|
g_return_val_if_fail (!error || *error == NULL, NM_SETTING_VERIFY_ERROR);
|
||||||
|
|
||||||
if (NM_SETTING_GET_CLASS (setting)->verify)
|
if (NM_SETTING_GET_CLASS (setting)->verify)
|
||||||
return NM_SETTING_GET_CLASS (setting)->verify (setting, all_settings, error);
|
return NM_SETTING_GET_CLASS (setting)->verify (setting, connection, error);
|
||||||
|
|
||||||
return NM_SETTING_VERIFY_SUCCESS;
|
return NM_SETTING_VERIFY_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
@ -1734,49 +1655,6 @@ nm_setting_to_string (NMSetting *setting)
|
||||||
return g_string_free (string, FALSE);
|
return g_string_free (string, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
NMSetting *
|
|
||||||
_nm_setting_find_in_list_required (GSList *all_settings,
|
|
||||||
const char *setting_name,
|
|
||||||
GError **error)
|
|
||||||
{
|
|
||||||
NMSetting *setting;
|
|
||||||
|
|
||||||
g_return_val_if_fail (!error || !*error, NULL);
|
|
||||||
g_return_val_if_fail (all_settings, NULL);
|
|
||||||
g_return_val_if_fail (setting_name, NULL);
|
|
||||||
|
|
||||||
setting = nm_setting_find_in_list (all_settings, setting_name);
|
|
||||||
if (!setting) {
|
|
||||||
g_set_error_literal (error,
|
|
||||||
NM_CONNECTION_ERROR,
|
|
||||||
NM_CONNECTION_ERROR_MISSING_SETTING,
|
|
||||||
_("missing setting"));
|
|
||||||
g_prefix_error (error, "%s: ", setting_name);
|
|
||||||
}
|
|
||||||
return setting;
|
|
||||||
}
|
|
||||||
|
|
||||||
NMSettingVerifyResult
|
|
||||||
_nm_setting_verify_required_virtual_interface_name (GSList *all_settings,
|
|
||||||
GError **error)
|
|
||||||
{
|
|
||||||
NMSettingConnection *s_con;
|
|
||||||
const char *interface_name;
|
|
||||||
|
|
||||||
s_con = NM_SETTING_CONNECTION (nm_setting_find_in_list (all_settings, NM_SETTING_CONNECTION_SETTING_NAME));
|
|
||||||
interface_name = s_con ? nm_setting_connection_get_interface_name (s_con) : NULL;
|
|
||||||
if (!interface_name) {
|
|
||||||
g_set_error_literal (error,
|
|
||||||
NM_CONNECTION_ERROR,
|
|
||||||
NM_CONNECTION_ERROR_MISSING_PROPERTY,
|
|
||||||
_("property is missing"));
|
|
||||||
g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_INTERFACE_NAME);
|
|
||||||
return NM_SETTING_VERIFY_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NM_SETTING_VERIFY_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
GVariant *
|
GVariant *
|
||||||
_nm_setting_get_deprecated_virtual_interface_name (NMSetting *setting,
|
_nm_setting_get_deprecated_virtual_interface_name (NMSetting *setting,
|
||||||
NMConnection *connection,
|
NMConnection *connection,
|
||||||
|
|
|
||||||
|
|
@ -158,9 +158,9 @@ typedef struct {
|
||||||
GObjectClass parent;
|
GObjectClass parent;
|
||||||
|
|
||||||
/* Virtual functions */
|
/* Virtual functions */
|
||||||
gint (*verify) (NMSetting *setting,
|
gint (*verify) (NMSetting *setting,
|
||||||
GSList *all_settings,
|
NMConnection *connection,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
GPtrArray *(*need_secrets) (NMSetting *setting);
|
GPtrArray *(*need_secrets) (NMSetting *setting);
|
||||||
|
|
||||||
|
|
@ -220,9 +220,9 @@ NMSetting *nm_setting_duplicate (NMSetting *setting);
|
||||||
|
|
||||||
const char *nm_setting_get_name (NMSetting *setting);
|
const char *nm_setting_get_name (NMSetting *setting);
|
||||||
|
|
||||||
gboolean nm_setting_verify (NMSetting *setting,
|
gboolean nm_setting_verify (NMSetting *setting,
|
||||||
GSList *all_settings,
|
NMConnection *connection,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
gboolean nm_setting_compare (NMSetting *a,
|
gboolean nm_setting_compare (NMSetting *a,
|
||||||
NMSetting *b,
|
NMSetting *b,
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@
|
||||||
#include <nm-glib-compat.h>
|
#include <nm-glib-compat.h>
|
||||||
#include "nm-setting-dcb.h"
|
#include "nm-setting-dcb.h"
|
||||||
#include "nm-connection.h"
|
#include "nm-connection.h"
|
||||||
|
#include "nm-errors.h"
|
||||||
|
|
||||||
#define DCB_FLAGS_ALL (NM_SETTING_DCB_FLAG_ENABLE | \
|
#define DCB_FLAGS_ALL (NM_SETTING_DCB_FLAG_ENABLE | \
|
||||||
NM_SETTING_DCB_FLAG_ADVERTISE | \
|
NM_SETTING_DCB_FLAG_ADVERTISE | \
|
||||||
|
|
|
||||||
|
|
@ -1013,17 +1013,7 @@ complete_connection (NMDevice *device,
|
||||||
* if the network isn't broadcasting the SSID for example.
|
* if the network isn't broadcasting the SSID for example.
|
||||||
*/
|
*/
|
||||||
if (!ap) {
|
if (!ap) {
|
||||||
GSList *settings = NULL;
|
if (!nm_setting_verify (NM_SETTING (s_wifi), connection, error))
|
||||||
gboolean valid;
|
|
||||||
|
|
||||||
settings = g_slist_prepend (settings, s_wifi);
|
|
||||||
if (s_wsec)
|
|
||||||
settings = g_slist_prepend (settings, s_wsec);
|
|
||||||
if (s_8021x)
|
|
||||||
settings = g_slist_prepend (settings, s_8021x);
|
|
||||||
valid = nm_setting_verify (NM_SETTING (s_wifi), settings, error);
|
|
||||||
g_slist_free (settings);
|
|
||||||
if (!valid)
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
hidden = TRUE;
|
hidden = TRUE;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue