settings: merge branch 'th/various-settings-cleanup'

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/172
This commit is contained in:
Thomas Haller 2019-06-13 16:11:15 +02:00
commit a646be6509
18 changed files with 957 additions and 789 deletions

View file

@ -1689,6 +1689,97 @@ nm_connection_normalize (NMConnection *connection,
return TRUE;
}
gboolean
_nm_connection_ensure_normalized (NMConnection *connection,
gboolean allow_modify,
const char *enforce_uuid,
NMConnection **out_connection_clone,
GError **error)
{
gs_unref_object NMConnection *connection_clone = NULL;
gs_free_error GError *local = NULL;
NMSettingVerifyResult vresult;
nm_assert (NM_IS_CONNECTION (connection));
nm_assert (out_connection_clone && !*out_connection_clone);
nm_assert (!enforce_uuid || nm_utils_is_uuid (enforce_uuid));
vresult = _nm_connection_verify (connection, &local);
if (vresult != NM_SETTING_VERIFY_SUCCESS) {
if (!NM_IN_SET (vresult, NM_SETTING_VERIFY_NORMALIZABLE,
NM_SETTING_VERIFY_NORMALIZABLE_ERROR)) {
g_propagate_error (error, g_steal_pointer (&local));
return FALSE;
}
if (!allow_modify) {
connection_clone = nm_simple_connection_new_clone (connection);
connection = connection_clone;
}
if (!nm_connection_normalize (connection, NULL, NULL, error)) {
nm_assert_not_reached ();
return FALSE;
}
}
if (enforce_uuid) {
if (!nm_streq (enforce_uuid, nm_connection_get_uuid (connection))) {
NMSettingConnection *s_con;
if ( !allow_modify
&& !connection_clone) {
connection_clone = nm_simple_connection_new_clone (connection);
connection = connection_clone;
}
s_con = nm_connection_get_setting_connection (connection);
g_object_set (s_con,
NM_SETTING_CONNECTION_UUID,
enforce_uuid,
NULL);
}
}
if (connection_clone)
*out_connection_clone = g_steal_pointer (&connection_clone);
return TRUE;
}
/*****************************************************************************/
#if NM_MORE_ASSERTS
static void
_nmtst_connection_unchanging_changed_cb (NMConnection *connection, gpointer user_data)
{
nm_assert_not_reached ();
}
static void
_nmtst_connection_unchanging_secrets_updated_cb (NMConnection *connection, const char *setting_name, gpointer user_data)
{
nm_assert_not_reached ();
}
void
nmtst_connection_assert_unchanging (NMConnection *connection)
{
nm_assert (NM_IS_CONNECTION (connection));
g_signal_connect (connection,
NM_CONNECTION_CHANGED,
G_CALLBACK (_nmtst_connection_unchanging_changed_cb),
NULL);
g_signal_connect (connection,
NM_CONNECTION_SECRETS_CLEARED,
G_CALLBACK (_nmtst_connection_unchanging_changed_cb),
NULL);
g_signal_connect (connection,
NM_CONNECTION_SECRETS_UPDATED,
G_CALLBACK (_nmtst_connection_unchanging_secrets_updated_cb),
NULL);
}
#endif
/*****************************************************************************/
/**
* nm_connection_update_secrets:
* @connection: the #NMConnection
@ -3158,13 +3249,13 @@ nm_connection_default_init (NMConnectionInterface *iface)
*/
signals[SECRETS_UPDATED] =
g_signal_new (NM_CONNECTION_SECRETS_UPDATED,
NM_TYPE_CONNECTION,
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMConnectionInterface, secrets_updated),
NULL, NULL,
g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE, 1,
G_TYPE_STRING);
NM_TYPE_CONNECTION,
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMConnectionInterface, secrets_updated),
NULL, NULL,
g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE, 1,
G_TYPE_STRING);
/**
* NMConnection::secrets-cleared:
@ -3175,12 +3266,12 @@ nm_connection_default_init (NMConnectionInterface *iface)
*/
signals[SECRETS_CLEARED] =
g_signal_new (NM_CONNECTION_SECRETS_CLEARED,
NM_TYPE_CONNECTION,
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMConnectionInterface, secrets_cleared),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
NM_TYPE_CONNECTION,
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMConnectionInterface, secrets_cleared),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
/**
* NMConnection::changed:
@ -3192,10 +3283,10 @@ nm_connection_default_init (NMConnectionInterface *iface)
*/
signals[CHANGED] =
g_signal_new (NM_CONNECTION_CHANGED,
NM_TYPE_CONNECTION,
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMConnectionInterface, changed),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
NM_TYPE_CONNECTION,
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMConnectionInterface, changed),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
}

View file

@ -201,8 +201,23 @@ typedef enum {
NMSettingVerifyResult _nm_connection_verify (NMConnection *connection, GError **error);
gboolean _nm_connection_ensure_normalized (NMConnection *connection,
gboolean allow_modify,
const char *enforce_uuid,
NMConnection **out_connection_clone,
GError **error);
gboolean _nm_connection_remove_setting (NMConnection *connection, GType setting_type);
#if NM_MORE_ASSERTS
void nmtst_connection_assert_unchanging (NMConnection *connection);
#else
static inline void
nmtst_connection_assert_unchanging (NMConnection *connection)
{
}
#endif
NMConnection *_nm_simple_connection_new_from_dbus (GVariant *dict,
NMSettingParseFlags parse_flags,
GError **error);
@ -276,10 +291,10 @@ GPtrArray *_nm_utils_copy_object_array (const GPtrArray *array);
gssize _nm_utils_ptrarray_find_first (gconstpointer *list, gssize len, gconstpointer needle);
GSList * _nm_utils_strv_to_slist (char **strv, gboolean deep_copy);
char ** _nm_utils_slist_to_strv (GSList *slist, gboolean deep_copy);
char ** _nm_utils_slist_to_strv (const GSList *slist, gboolean deep_copy);
GPtrArray * _nm_utils_strv_to_ptrarray (char **strv);
char ** _nm_utils_ptrarray_to_strv (GPtrArray *ptrarray);
char ** _nm_utils_ptrarray_to_strv (const GPtrArray *ptrarray);
gboolean _nm_utils_check_file (const char *filename,
gint64 check_owner,
@ -815,4 +830,6 @@ void _nm_bridge_vlan_str_append_rest (const NMBridgeVlan *vlan,
GString *string,
gboolean leading_space);
gboolean nm_utils_connection_is_adhoc_wpa (NMConnection *connection);
#endif

View file

@ -363,6 +363,53 @@ read_field (char **current, const char **out_err_str, const char *characters, co
}
}
/*****************************************************************************/
#define NM_DBUS_SERVICE_OPENCONNECT "org.freedesktop.NetworkManager.openconnect"
#define NM_OPENCONNECT_KEY_GATEWAY "gateway"
#define NM_OPENCONNECT_KEY_COOKIE "cookie"
#define NM_OPENCONNECT_KEY_GWCERT "gwcert"
#define NM_OPENCONNECT_KEY_XMLCONFIG "xmlconfig"
#define NM_OPENCONNECT_KEY_LASTHOST "lasthost"
#define NM_OPENCONNECT_KEY_AUTOCONNECT "autoconnect"
#define NM_OPENCONNECT_KEY_CERTSIGS "certsigs"
static void
openconnect_fix_secret_flags (NMSetting *setting)
{
NMSettingVpn *s_vpn;
NMSettingSecretFlags flags;
/* Huge hack. There were some openconnect changes that needed to happen
* pretty late, too late to get into distros. Migration has already
* happened for many people, and their secret flags are wrong. But we
* don't want to requrie re-migration, so we have to fix it up here. Ugh.
*/
if (!NM_IS_SETTING_VPN (setting))
return;
s_vpn = NM_SETTING_VPN (setting);
if (!nm_streq0 (nm_setting_vpn_get_service_type (s_vpn), NM_DBUS_SERVICE_OPENCONNECT))
return;
/* These are different for every login session, and should not be stored */
flags = NM_SETTING_SECRET_FLAG_NOT_SAVED;
nm_setting_set_secret_flags (NM_SETTING (s_vpn), NM_OPENCONNECT_KEY_GATEWAY, flags, NULL);
nm_setting_set_secret_flags (NM_SETTING (s_vpn), NM_OPENCONNECT_KEY_COOKIE, flags, NULL);
nm_setting_set_secret_flags (NM_SETTING (s_vpn), NM_OPENCONNECT_KEY_GWCERT, flags, NULL);
/* These are purely internal data for the auth-dialog, and should be stored */
flags = 0;
nm_setting_set_secret_flags (NM_SETTING (s_vpn), NM_OPENCONNECT_KEY_XMLCONFIG, flags, NULL);
nm_setting_set_secret_flags (NM_SETTING (s_vpn), NM_OPENCONNECT_KEY_LASTHOST, flags, NULL);
nm_setting_set_secret_flags (NM_SETTING (s_vpn), NM_OPENCONNECT_KEY_AUTOCONNECT, flags, NULL);
nm_setting_set_secret_flags (NM_SETTING (s_vpn), NM_OPENCONNECT_KEY_CERTSIGS, flags, NULL);
}
/*****************************************************************************/
#define IP_ADDRESS_CHARS "0123456789abcdefABCDEF:.%"
#define DIGITS "0123456789"
#define DELIMITERS "/;,"
@ -1024,6 +1071,7 @@ read_hash_of_string (GKeyFile *file, NMSetting *setting, const char *key)
nm_setting_bond_add_option (NM_SETTING_BOND (setting), name, value);
}
}
openconnect_fix_secret_flags (setting);
return;
}

View file

@ -955,43 +955,51 @@ _nm_utils_bytes_from_dbus (GVariant *dbus_value,
g_value_take_boxed (prop_value, bytes);
}
/*****************************************************************************/
GSList *
_nm_utils_strv_to_slist (char **strv, gboolean deep_copy)
{
int i;
GSList *list = NULL;
gsize i;
if (strv) {
if (deep_copy) {
for (i = 0; strv[i]; i++)
list = g_slist_prepend (list, g_strdup (strv[i]));
} else {
for (i = 0; strv[i]; i++)
list = g_slist_prepend (list, strv[i]);
}
if (!strv)
return NULL;
if (deep_copy) {
for (i = 0; strv[i]; i++)
list = g_slist_prepend (list, g_strdup (strv[i]));
} else {
for (i = 0; strv[i]; i++)
list = g_slist_prepend (list, strv[i]);
}
return g_slist_reverse (list);
}
char **
_nm_utils_slist_to_strv (GSList *slist, gboolean deep_copy)
_nm_utils_slist_to_strv (const GSList *slist, gboolean deep_copy)
{
GSList *iter;
const GSList *iter;
char **strv;
int len, i;
guint len, i;
len = g_slist_length (slist);
if (!len)
if (!slist)
return NULL;
len = g_slist_length ((GSList *) slist);
strv = g_new (char *, len + 1);
if (deep_copy) {
for (i = 0, iter = slist; iter; iter = iter->next, i++)
for (i = 0, iter = slist; iter; iter = iter->next, i++) {
nm_assert (iter->data);
strv[i] = g_strdup (iter->data);
}
} else {
for (i = 0, iter = slist; iter; iter = iter->next, i++)
for (i = 0, iter = slist; iter; iter = iter->next, i++) {
nm_assert (iter->data);
strv[i] = iter->data;
}
}
strv[i] = NULL;
@ -1002,9 +1010,11 @@ GPtrArray *
_nm_utils_strv_to_ptrarray (char **strv)
{
GPtrArray *ptrarray;
int i;
gsize i, l;
ptrarray = g_ptr_array_new_with_free_func (g_free);
l = NM_PTRARRAY_LEN (strv);
ptrarray = g_ptr_array_new_full (l, g_free);
if (strv) {
for (i = 0; strv[i]; i++)
@ -1015,10 +1025,10 @@ _nm_utils_strv_to_ptrarray (char **strv)
}
char **
_nm_utils_ptrarray_to_strv (GPtrArray *ptrarray)
_nm_utils_ptrarray_to_strv (const GPtrArray *ptrarray)
{
char **strv;
int i;
guint i;
if (!ptrarray)
return g_new0 (char *, 1);
@ -1032,6 +1042,8 @@ _nm_utils_ptrarray_to_strv (GPtrArray *ptrarray)
return strv;
}
/*****************************************************************************/
static gboolean
device_supports_ap_ciphers (guint32 dev_caps,
guint32 ap_flags,
@ -4713,11 +4725,14 @@ nm_utils_iface_valid_name (const char *name)
/**
* nm_utils_is_uuid:
* @str: a string that might be a UUID
* @str: (allow-none): a string that might be a UUID
*
* Checks if @str is a UUID
*
* Returns: %TRUE if @str is a UUID, %FALSE if not
*
* In older versions, nm_utils_is_uuid() did not accept %NULL as @str
* argument. Don't pass %NULL if you run against older versions of libnm.
*/
gboolean
nm_utils_is_uuid (const char *str)
@ -4725,7 +4740,8 @@ nm_utils_is_uuid (const char *str)
const char *p = str;
int num_dashes = 0;
g_return_val_if_fail (str, FALSE);
if (!p)
return FALSE;
while (*p) {
if (*p == '-')
@ -6033,3 +6049,30 @@ _nm_utils_bridge_vlan_verify_list (GPtrArray *vlans,
return TRUE;
}
gboolean
nm_utils_connection_is_adhoc_wpa (NMConnection *connection)
{
NMSettingWireless *s_wifi;
NMSettingWirelessSecurity *s_wsec;
const char *key_mgmt;
const char *mode;
s_wifi = nm_connection_get_setting_wireless (connection);
if (!s_wifi)
return FALSE;
mode = nm_setting_wireless_get_mode (s_wifi);
if (!nm_streq0 (mode, NM_SETTING_WIRELESS_MODE_ADHOC))
return FALSE;
s_wsec = nm_connection_get_setting_wireless_security (connection);
if (!s_wsec)
return FALSE;
key_mgmt = nm_setting_wireless_security_get_key_mgmt (s_wsec);
if (!nm_streq0 (key_mgmt, "wpa-none"))
return FALSE;
return TRUE;
}

View file

@ -32,6 +32,8 @@
_what && c_list_contains (list, &_what->member); \
})
/*****************************************************************************/
typedef struct {
CList lst;
void *data;
@ -47,21 +49,22 @@ nm_c_list_elem_new_stale (void *data)
return elem;
}
static inline void *
nm_c_list_elem_get (CList *lst)
static inline gboolean
nm_c_list_elem_free_full (NMCListElem *elem, GDestroyNotify free_fcn)
{
if (!lst)
return NULL;
return c_list_entry (lst, NMCListElem, lst)->data;
if (!elem)
return FALSE;
c_list_unlink_stale (&elem->lst);
if (free_fcn)
free_fcn (elem->data);
g_slice_free (NMCListElem, elem);
return TRUE;
}
static inline void
static inline gboolean
nm_c_list_elem_free (NMCListElem *elem)
{
if (elem) {
c_list_unlink_stale (&elem->lst);
g_slice_free (NMCListElem, elem);
}
return nm_c_list_elem_free_full (elem, NULL);
}
static inline void
@ -69,12 +72,31 @@ nm_c_list_elem_free_all (CList *head, GDestroyNotify free_fcn)
{
NMCListElem *elem;
while ((elem = c_list_first_entry (head, NMCListElem, lst))) {
if (free_fcn)
free_fcn (elem->data);
c_list_unlink_stale (&elem->lst);
g_slice_free (NMCListElem, elem);
while ((elem = c_list_first_entry (head, NMCListElem, lst)))
nm_c_list_elem_free_full (elem, free_fcn);
}
/**
* nm_c_list_elem_find_first:
* @head: the @CList head of a list containing #NMCListElem elements.
* Note that the head is not itself part of the list.
* @needle: the needle pointer.
*
* Iterates the list and returns the first #NMCListElem with the matching @needle,
* using pointer equality.
*
* Returns: the found list element or %NULL if not found.
*/
static inline NMCListElem *
nm_c_list_elem_find_first (CList *head, gconstpointer needle)
{
NMCListElem *elem;
c_list_for_each_entry (elem, head, lst) {
if (elem->data == needle)
return elem;
}
return NULL;
}
/*****************************************************************************/

View file

@ -1249,6 +1249,14 @@ nm_g_variant_ref (GVariant *v)
return v;
}
static inline GVariant *
nm_g_variant_ref_sink (GVariant *v)
{
if (v)
g_variant_ref_sink (v);
return v;
}
static inline void
nm_g_variant_unref (GVariant *v)
{

View file

@ -2683,6 +2683,34 @@ _nm_utils_strv_cmp_n (const char *const*strv1,
/*****************************************************************************/
/**
* nm_utils_g_slist_find_str:
* @list: the #GSList with NUL terminated strings to search
* @needle: the needle string to look for.
*
* Search the list for @needle and return the first found match
* (or %NULL if not found). Uses strcmp() for finding the first matching
* element.
*
* Returns: the #GSList element with @needle as string value or
* %NULL if not found.
*/
GSList *
nm_utils_g_slist_find_str (const GSList *list,
const char *needle)
{
nm_assert (needle);
for (; list; list = list->next) {
nm_assert (list->data);
if (nm_streq (list->data, needle))
return (GSList *) list;
}
return NULL;
}
/*****************************************************************************/
gpointer
_nm_utils_user_data_pack (int nargs, gconstpointer *args)
{

View file

@ -978,6 +978,11 @@ nm_utils_strv_make_deep_copied_nonnull (const char **strv)
/*****************************************************************************/
GSList *nm_utils_g_slist_find_str (const GSList *list,
const char *needle);
/*****************************************************************************/
gssize nm_utils_ptrarray_find_binary_search (gconstpointer *list,
gsize len,
gconstpointer needle,

View file

@ -30,6 +30,9 @@
/*****************************************************************************/
struct NMAuthChain {
CList parent_lst;
CList data_lst_head;
CList auth_call_lst_head;
@ -46,6 +49,8 @@ struct NMAuthChain {
bool is_finishing:1;
};
G_STATIC_ASSERT (G_STRUCT_OFFSET (NMAuthChain, parent_lst) == 0);
typedef struct {
CList auth_call_lst;
NMAuthChain *chain;
@ -435,6 +440,7 @@ nm_auth_chain_new_subject (NMAuthSubject *subject,
.user_data = user_data,
.context = nm_g_object_ref (context),
.subject = g_object_ref (subject),
.parent_lst = C_LIST_INIT (self->parent_lst),
.data_lst_head = C_LIST_INIT (self->data_lst_head),
.auth_call_lst_head = C_LIST_INIT (self->auth_call_lst_head),
};
@ -479,6 +485,8 @@ _auth_chain_destroy (NMAuthChain *self)
AuthCall *call;
ChainData *chain_data;
c_list_unlink (&self->parent_lst);
nm_clear_g_object (&self->subject);
nm_clear_g_object (&self->context);

View file

@ -24,6 +24,8 @@
#include "nm-auth-manager.h"
/*****************************************************************************/
typedef struct NMAuthChain NMAuthChain;
typedef void (*NMAuthChainResultFunc) (NMAuthChain *chain,
@ -65,6 +67,25 @@ void nm_auth_chain_destroy (NMAuthChain *chain);
NMAuthSubject *nm_auth_chain_get_subject (NMAuthChain *self);
/*****************************************************************************/
struct CList;
static inline NMAuthChain *
nm_auth_chain_parent_lst_entry (struct CList *parent_lst_self)
{
return (NMAuthChain *) ((void *) parent_lst_self);
}
static inline struct CList *
nm_auth_chain_parent_lst_list (NMAuthChain *self)
{
return (struct CList *) ((void *) self);
}
/*****************************************************************************/
/* Caller must free returned error description */
gboolean nm_auth_is_subject_in_acl (NMConnection *connection,
NMAuthSubject *subect,

View file

@ -185,7 +185,8 @@ typedef struct {
GHashTable *device_route_metrics;
GSList *auth_chains;
CList auth_lst_head;
GHashTable *sleep_devices;
/* Firmware dir monitor */
@ -1142,7 +1143,7 @@ _reload_auth_cb (NMAuthChain *chain,
nm_assert (G_IS_DBUS_METHOD_INVOCATION (context));
priv->auth_chains = g_slist_remove (priv->auth_chains, chain);
c_list_unlink (nm_auth_chain_parent_lst_list (chain));
flags = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, "flags"));
subject = nm_auth_chain_get_subject (chain);
@ -1212,7 +1213,7 @@ impl_manager_reload (NMDBusObject *obj,
return;
}
priv->auth_chains = g_slist_append (priv->auth_chains, chain);
c_list_link_tail (&priv->auth_lst_head, nm_auth_chain_parent_lst_list (chain));
nm_auth_chain_set_data (chain, "flags", GUINT_TO_POINTER (flags), NULL);
nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_RELOAD, TRUE);
}
@ -2330,7 +2331,6 @@ device_auth_done_cb (NMAuthChain *chain,
gpointer user_data)
{
NMManager *self = NM_MANAGER (user_data);
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
gs_free_error GError *error = NULL;
NMAuthCallResult result;
NMDevice *device;
@ -2340,7 +2340,7 @@ device_auth_done_cb (NMAuthChain *chain,
nm_assert (G_IS_DBUS_METHOD_INVOCATION (context));
priv->auth_chains = g_slist_remove (priv->auth_chains, chain);
c_list_unlink (nm_auth_chain_parent_lst_list (chain));
permission = nm_auth_chain_get_data (chain, "perm");
nm_assert (permission);
@ -2414,7 +2414,7 @@ device_auth_request_cb (NMDevice *device,
permission_dup = g_strdup (permission);
priv->auth_chains = g_slist_append (priv->auth_chains, chain);
c_list_link_tail (&priv->auth_lst_head, nm_auth_chain_parent_lst_list (chain));
nm_auth_chain_set_data (chain, "device", g_object_ref (device), g_object_unref);
nm_auth_chain_set_data (chain, "callback", callback, NULL);
nm_auth_chain_set_data (chain, "user-data", user_data, NULL);
@ -5608,7 +5608,6 @@ deactivate_net_auth_done_cb (NMAuthChain *chain,
gpointer user_data)
{
NMManager *self = NM_MANAGER (user_data);
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
GError *error = NULL;
NMAuthCallResult result;
NMActiveConnection *active;
@ -5616,7 +5615,7 @@ deactivate_net_auth_done_cb (NMAuthChain *chain,
nm_assert (G_IS_DBUS_METHOD_INVOCATION (context));
priv->auth_chains = g_slist_remove (priv->auth_chains, chain);
c_list_unlink (nm_auth_chain_parent_lst_list (chain));
path = nm_auth_chain_get_data (chain, "path");
result = nm_auth_chain_get_result (chain, NM_AUTH_PERMISSION_NETWORK_CONTROL);
@ -5711,7 +5710,7 @@ impl_manager_deactivate_connection (NMDBusObject *obj,
goto done;
}
priv->auth_chains = g_slist_append (priv->auth_chains, chain);
c_list_link_tail (&priv->auth_lst_head, nm_auth_chain_parent_lst_list (chain));
nm_auth_chain_set_data (chain, "path", g_strdup (active_path), g_free);
nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_NETWORK_CONTROL, TRUE);
@ -6032,14 +6031,13 @@ enable_net_done_cb (NMAuthChain *chain,
gpointer user_data)
{
NMManager *self = NM_MANAGER (user_data);
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
NMAuthCallResult result;
gboolean enable;
NMAuthSubject *subject;
nm_assert (G_IS_DBUS_METHOD_INVOCATION (context));
priv->auth_chains = g_slist_remove (priv->auth_chains, chain);
c_list_unlink (nm_auth_chain_parent_lst_list (chain));
enable = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, "enable"));
subject = nm_auth_chain_get_subject (chain);
@ -6094,7 +6092,7 @@ impl_manager_enable (NMDBusObject *obj,
goto done;
}
priv->auth_chains = g_slist_append (priv->auth_chains, chain);
c_list_link_tail (&priv->auth_lst_head, nm_auth_chain_parent_lst_list (chain));
nm_auth_chain_set_data (chain, "enable", GUINT_TO_POINTER (enable), NULL);
nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK, TRUE);
@ -6128,12 +6126,11 @@ get_permissions_done_cb (NMAuthChain *chain,
gpointer user_data)
{
NMManager *self = NM_MANAGER (user_data);
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
GVariantBuilder results;
nm_assert (G_IS_DBUS_METHOD_INVOCATION (context));
priv->auth_chains = g_slist_remove (priv->auth_chains, chain);
c_list_unlink (nm_auth_chain_parent_lst_list (chain));
g_variant_builder_init (&results, G_VARIANT_TYPE ("a{ss}"));
@ -6180,7 +6177,7 @@ impl_manager_get_permissions (NMDBusObject *obj,
return;
}
priv->auth_chains = g_slist_append (priv->auth_chains, chain);
c_list_link_tail (&priv->auth_lst_head, nm_auth_chain_parent_lst_list (chain));
nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK, FALSE);
nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_SLEEP_WAKE, FALSE);
nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI, FALSE);
@ -6331,7 +6328,7 @@ check_connectivity_auth_done_cb (NMAuthChain *chain,
ConnectivityCheckData *data;
NMDevice *device;
priv->auth_chains = g_slist_remove (priv->auth_chains, chain);
c_list_unlink (nm_auth_chain_parent_lst_list (chain));
result = nm_auth_chain_get_result (chain, NM_AUTH_PERMISSION_NETWORK_CONTROL);
@ -6397,7 +6394,7 @@ impl_manager_check_connectivity (NMDBusObject *obj,
return;
}
priv->auth_chains = g_slist_append (priv->auth_chains, chain);
c_list_link_tail (&priv->auth_lst_head, nm_auth_chain_parent_lst_list (chain));
nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_NETWORK_CONTROL, TRUE);
}
@ -6767,7 +6764,7 @@ _dbus_set_property_auth_cb (NMAuthChain *chain,
g_slice_free (DBusSetPropertyHandle, handle_data);
priv->auth_chains = g_slist_remove (priv->auth_chains, chain);
c_list_unlink (nm_auth_chain_parent_lst_list (chain));
result = nm_auth_chain_get_result (chain, property_info->writable.permission);
if (result != NM_AUTH_CALL_RESULT_YES) {
@ -6847,7 +6844,7 @@ nm_manager_dbus_set_property_handle (NMDBusObject *obj,
handle_data->export_version_id = nm_dbus_object_get_export_version_id (obj);
chain = nm_auth_chain_new_subject (subject, invocation, _dbus_set_property_auth_cb, handle_data);
priv->auth_chains = g_slist_append (priv->auth_chains, chain);
c_list_link_tail (&priv->auth_lst_head, nm_auth_chain_parent_lst_list (chain));
nm_auth_chain_add_call_unsafe (chain, property_info->writable.permission, TRUE);
return;
@ -6881,8 +6878,9 @@ checkpoint_auth_done_cb (NMAuthChain *chain,
gpointer user_data)
{
NMManager *self = NM_MANAGER (user_data);
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
char *op, *checkpoint_path = NULL, **devices;
char *op;
char *checkpoint_path = NULL;
char **devices;
NMCheckpoint *checkpoint;
NMAuthCallResult result;
guint32 timeout, flags;
@ -6892,7 +6890,7 @@ checkpoint_auth_done_cb (NMAuthChain *chain,
guint32 add_timeout;
op = nm_auth_chain_get_data (chain, "audit-op");
priv->auth_chains = g_slist_remove (priv->auth_chains, chain);
c_list_unlink (nm_auth_chain_parent_lst_list (chain));
result = nm_auth_chain_get_result (chain, NM_AUTH_PERMISSION_CHECKPOINT_ROLLBACK);
if (NM_IN_STRSET (op, NM_AUDIT_OP_CHECKPOINT_DESTROY,
@ -6971,7 +6969,7 @@ impl_manager_checkpoint_create (NMDBusObject *obj,
g_variant_get (parameters, "(^aouu)", &devices, &rollback_timeout, &flags);
priv->auth_chains = g_slist_append (priv->auth_chains, chain);
c_list_link_tail (&priv->auth_lst_head, nm_auth_chain_parent_lst_list (chain));
nm_auth_chain_set_data (chain, "audit-op", NM_AUDIT_OP_CHECKPOINT_CREATE, NULL);
nm_auth_chain_set_data (chain, "devices", devices, (GDestroyNotify) g_strfreev);
nm_auth_chain_set_data (chain, "flags", GUINT_TO_POINTER (flags), NULL);
@ -7004,7 +7002,7 @@ impl_manager_checkpoint_destroy (NMDBusObject *obj,
g_variant_get (parameters, "(&o)", &checkpoint_path);
priv->auth_chains = g_slist_append (priv->auth_chains, chain);
c_list_link_tail (&priv->auth_lst_head, nm_auth_chain_parent_lst_list (chain));
nm_auth_chain_set_data (chain, "audit-op", NM_AUDIT_OP_CHECKPOINT_DESTROY, NULL);
nm_auth_chain_set_data (chain, "checkpoint_path", g_strdup (checkpoint_path), g_free);
nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_CHECKPOINT_ROLLBACK, TRUE);
@ -7035,7 +7033,7 @@ impl_manager_checkpoint_rollback (NMDBusObject *obj,
g_variant_get (parameters, "(&o)", &checkpoint_path);
priv->auth_chains = g_slist_append (priv->auth_chains, chain);
c_list_link_tail (&priv->auth_lst_head, nm_auth_chain_parent_lst_list (chain));
nm_auth_chain_set_data (chain, "audit-op", NM_AUDIT_OP_CHECKPOINT_ROLLBACK, NULL);
nm_auth_chain_set_data (chain, "checkpoint_path", g_strdup (checkpoint_path), g_free);
nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_CHECKPOINT_ROLLBACK, TRUE);
@ -7067,7 +7065,7 @@ impl_manager_checkpoint_adjust_rollback_timeout (NMDBusObject *obj,
g_variant_get (parameters, "(&ou)", &checkpoint_path, &add_timeout);
priv->auth_chains = g_slist_append (priv->auth_chains, chain);
c_list_link_tail (&priv->auth_lst_head, nm_auth_chain_parent_lst_list (chain));
nm_auth_chain_set_data (chain, "audit-op", NM_AUDIT_OP_CHECKPOINT_ADJUST_ROLLBACK_TIMEOUT, NULL);
nm_auth_chain_set_data (chain, "checkpoint_path", g_strdup (checkpoint_path), g_free);
nm_auth_chain_set_data (chain, "add_timeout", GUINT_TO_POINTER (add_timeout), NULL);
@ -7358,6 +7356,7 @@ nm_manager_init (NMManager *self)
guint i;
GFile *file;
c_list_init (&priv->auth_lst_head);
c_list_init (&priv->link_cb_lst);
c_list_init (&priv->devices_lst_head);
c_list_init (&priv->active_connections_lst_head);
@ -7606,24 +7605,23 @@ dispose (GObject *object)
{
NMManager *self = NM_MANAGER (object);
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
CList *iter, *iter_safe;
NMActiveConnection *ac, *ac_safe;
CList *iter;
nm_assert (c_list_is_empty (&priv->async_op_lst_head));
g_signal_handlers_disconnect_by_func (priv->platform,
G_CALLBACK (platform_link_cb),
self);
c_list_for_each_safe (iter, iter_safe, &priv->link_cb_lst) {
while ((iter = c_list_first (&priv->link_cb_lst))) {
PlatformLinkCbData *data = c_list_entry (iter, PlatformLinkCbData, lst);
g_source_remove (data->idle_id);
c_list_unlink_stale (iter);
c_list_unlink_stale (&data->lst);
g_slice_free (PlatformLinkCbData, data);
}
g_slist_free_full (priv->auth_chains, (GDestroyNotify) nm_auth_chain_destroy);
priv->auth_chains = NULL;
while ((iter = c_list_first (&priv->auth_lst_head)))
nm_auth_chain_destroy (nm_auth_chain_parent_lst_entry (iter));
nm_clear_g_source (&priv->devices_inited_id);
@ -7647,8 +7645,9 @@ dispose (GObject *object)
nm_clear_g_source (&priv->ac_cleanup_id);
c_list_for_each_entry_safe (ac, ac_safe, &priv->active_connections_lst_head, active_connections_lst)
active_connection_remove (self, ac);
while ((iter = c_list_first (&priv->active_connections_lst_head)))
active_connection_remove (self, c_list_entry (iter, NMActiveConnection, active_connections_lst));
nm_assert (c_list_is_empty (&priv->active_connections_lst_head));
g_clear_object (&priv->primary_connection);
g_clear_object (&priv->activating_connection);

View file

@ -755,13 +755,6 @@ _get_secrets_info_free (NMSettingsConnectionCallId *call_id)
g_slice_free (NMSettingsConnectionCallId, call_id);
}
static gboolean
supports_secrets (NMSettingsConnection *self, const char *setting_name)
{
/* All secrets supported */
return TRUE;
}
typedef struct {
NMSettingSecretFlags required;
NMSettingSecretFlags forbidden;
@ -2998,8 +2991,6 @@ nm_settings_connection_class_init (NMSettingsConnectionClass *klass)
object_class->get_property = get_property;
object_class->set_property = set_property;
klass->supports_secrets = supports_secrets;
obj_properties[PROP_UNSAVED] =
g_param_spec_boolean (NM_SETTINGS_CONNECTION_UNSAVED, "", "",
FALSE,

View file

@ -131,9 +131,6 @@ struct _NMSettingsConnectionClass {
gboolean (*delete) (NMSettingsConnection *self,
GError **error);
gboolean (*supports_secrets) (NMSettingsConnection *self,
const char *setting_name);
};
GType nm_settings_connection_get_type (void);

View file

@ -40,15 +40,6 @@ G_DEFINE_TYPE (NMSettingsPlugin, nm_settings_plugin, G_TYPE_OBJECT)
/*****************************************************************************/
void
nm_settings_plugin_initialize (NMSettingsPlugin *self)
{
g_return_if_fail (NM_IS_SETTINGS_PLUGIN (self));
if (NM_SETTINGS_PLUGIN_GET_CLASS (self)->initialize)
NM_SETTINGS_PLUGIN_GET_CLASS (self)->initialize (self);
}
GSList *
nm_settings_plugin_get_connections (NMSettingsPlugin *self)
{

View file

@ -41,9 +41,6 @@ typedef struct {
typedef struct {
GObjectClass parent;
/* Called when the plugin is loaded to initialize it */
void (*initialize) (NMSettingsPlugin *plugin);
/* Returns a GSList of NMSettingsConnection objects that represent
* connections the plugin knows about. The returned list is freed by the
* system settings service.
@ -104,8 +101,6 @@ typedef NMSettingsPlugin *(*NMSettingsPluginFactoryFunc) (void);
/* Plugin's factory function that returns a #NMSettingsPlugin */
NMSettingsPlugin *nm_settings_plugin_factory (void);
void nm_settings_plugin_initialize (NMSettingsPlugin *config);
GSList *nm_settings_plugin_get_connections (NMSettingsPlugin *plugin);
gboolean nm_settings_plugin_load_connection (NMSettingsPlugin *plugin,

File diff suppressed because it is too large Load diff

View file

@ -57,16 +57,6 @@ G_DEFINE_TYPE (NMIfupdownConnection, nm_ifupdown_connection, NM_TYPE_SETTINGS_CO
/*****************************************************************************/
static gboolean
supports_secrets (NMSettingsConnection *connection, const char *setting_name)
{
_LOGI ("supports_secrets() for setting_name: '%s'", setting_name);
return (strcmp (setting_name, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME) == 0);
}
/*****************************************************************************/
static void
nm_ifupdown_connection_init (NMIfupdownConnection *connection)
{
@ -98,8 +88,4 @@ nm_ifupdown_connection_new (if_block *block)
static void
nm_ifupdown_connection_class_init (NMIfupdownConnectionClass *ifupdown_connection_class)
{
NMSettingsConnectionClass *connection_class = NM_SETTINGS_CONNECTION_CLASS (ifupdown_connection_class);
connection_class->supports_secrets = supports_secrets;
}

View file

@ -55,7 +55,9 @@ typedef struct {
*/
GHashTable *eni_ifaces;
bool ifupdown_managed;
bool ifupdown_managed:1;
bool initialized:1;
} SettingsPluginIfupdownPrivate;
struct _SettingsPluginIfupdown {
@ -88,6 +90,10 @@ NM_DEFINE_SINGLETON_GETTER (SettingsPluginIfupdown, settings_plugin_ifupdown_get
/*****************************************************************************/
static void initialize (SettingsPluginIfupdown *self);
/*****************************************************************************/
/* Returns the plugins currently known list of connections. The returned
* list is freed by the system settings service.
*/
@ -100,6 +106,9 @@ get_connections (NMSettingsPlugin *plugin)
GHashTableIter iter;
void *value;
if (G_UNLIKELY (!priv->initialized))
initialize (self);
if (!priv->ifupdown_managed) {
_LOGD ("get_connections: not connections due to managed=false");
return NULL;
@ -129,6 +138,9 @@ get_unmanaged_specs (NMSettingsPlugin *plugin)
GHashTableIter iter;
const char *iface;
if (G_UNLIKELY (!priv->initialized))
initialize (self);
if (priv->ifupdown_managed)
return NULL;
@ -144,9 +156,8 @@ get_unmanaged_specs (NMSettingsPlugin *plugin)
/*****************************************************************************/
static void
initialize (NMSettingsPlugin *plugin)
initialize (SettingsPluginIfupdown *self)
{
SettingsPluginIfupdown *self = SETTINGS_PLUGIN_IFUPDOWN (plugin);
SettingsPluginIfupdownPrivate *priv = SETTINGS_PLUGIN_IFUPDOWN_GET_PRIVATE (self);
gs_unref_hashtable GHashTable *auto_ifaces = NULL;
nm_auto_ifparser if_parser *parser = NULL;
@ -155,6 +166,9 @@ initialize (NMSettingsPlugin *plugin)
const char *block_name;
NMIfupdownConnection *conn;
nm_assert (!priv->initialized);
priv->initialized = TRUE;
parser = ifparser_parse (ENI_INTERFACES_FILE, 0);
c_list_for_each_entry (block, &parser->block_lst_head, block_lst) {
@ -316,7 +330,6 @@ settings_plugin_ifupdown_class_init (SettingsPluginIfupdownClass *klass)
object_class->dispose = dispose;
plugin_class->initialize = initialize;
plugin_class->get_connections = get_connections;
plugin_class->get_unmanaged_specs = get_unmanaged_specs;
}