mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2025-12-29 19:40:12 +01:00
settings: merge branch 'th/various-settings-cleanup'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/172
This commit is contained in:
commit
a646be6509
18 changed files with 957 additions and 789 deletions
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue