Пример #1
0
static gboolean get_secrets(const char *vpn_name,
                            const char *vpn_uuid,
                            gboolean need_password,
                            gboolean retry,
                            gboolean allow_interaction,
                            gboolean external_ui_mode,
                            const char *in_pass,
                            NMSettingSecretFlags pw_flags,
                            char **out_password) {
    VpnPasswordDialog *dialog;
    char *prompt, *password = NULL;
    gboolean success = FALSE, need_secret = FALSE;

    g_return_val_if_fail(vpn_name != NULL, FALSE);
    g_return_val_if_fail(vpn_uuid != NULL, FALSE);
    g_return_val_if_fail(out_password != NULL, FALSE);
    if (need_password) {
        if (!(pw_flags & NM_SETTING_SECRET_FLAG_NOT_SAVED)) {
            if (in_pass)
                #if defined(HAVE_LIBSECRET)
                password = g_strdup(in_pass);
                #else
                password = gnome_keyring_memory_strdup(in_pass);
                #endif
            else
                password = keyring_lookup_secret(vpn_uuid,
                                                 NM_IPOP_KEY_XMPP_PASSWORD);
        }
        if (!password && !(pw_flags & NM_SETTING_SECRET_FLAG_NOT_REQUIRED))
            need_secret = TRUE;
    }
Пример #2
0
static char * keyring_lookup_secret (const char *uuid,
                                     const char *secret_name) {
    #if defined(HAVE_LIBSECRET)
    GHashTable *attrs;
    GList *list;
    #else
    GList *found_list = NULL;
	GnomeKeyringResult ret;
	GnomeKeyringFound *found;
    #endif
	char *secret = NULL;

    #if defined(HAVE_LIBSECRET)
    attrs = secret_attributes_build(&network_manager_secret_schema,
                                    KEYRING_UUID_TAG, uuid,
                                    KEYRING_SN_TAG, NM_SETTING_VPN_SETTING_NAME,
                                    KEYRING_SK_TAG, secret_name,
                                    NULL);

    list = secret_service_search_sync(NULL, &network_manager_secret_schema, attrs,
            SECRET_SEARCH_ALL | SECRET_SEARCH_UNLOCK | SECRET_SEARCH_LOAD_SECRETS,
            NULL, NULL);
    if (list && list->data) {
        SecretItem *item = list->data;
        SecretValue *value = secret_item_get_secret(item);

        if (value) {
            secret = g_strdup(secret_value_get(value, NULL));
            secret_value_unref(value);
        }
    }

    g_list_free_full(list, g_object_unref);
    g_hash_table_unref(attrs);
    #else
    ret = gnome_keyring_find_itemsv_sync(GNOME_KEYRING_ITEM_GENERIC_SECRET,
                                         &found_list,
                                         KEYRING_UUID_TAG,
                                         GNOME_KEYRING_ATTRIBUTE_TYPE_STRING,
                                         uuid,
                                         KEYRING_SN_TAG,
                                         GNOME_KEYRING_ATTRIBUTE_TYPE_STRING,
                                         NM_SETTING_VPN_SETTING_NAME,
                                         KEYRING_SK_TAG,
                                         GNOME_KEYRING_ATTRIBUTE_TYPE_STRING,
                                         secret_name,
                                         NULL);
	if (ret == GNOME_KEYRING_RESULT_OK && found_list) {
        found = g_list_nth_data(found_list, 0);
        secret = gnome_keyring_memory_strdup(found->secret);
	}

    gnome_keyring_found_list_free(found_list);
    #endif

	return secret;
}
Пример #3
0
static GtkWidget *
fill_password (GladeXML *xml,
               const char *widget_name,
               NMConnection *connection,
               const char *password_type)
{
    GtkWidget *widget = NULL;
    gchar *password = NULL;

    widget = glade_xml_get_widget (xml, widget_name);
    g_assert (widget);

    if (!connection)
        return widget;

    password = NULL;

    if (nm_connection_get_scope (connection) == NM_CONNECTION_SCOPE_SYSTEM) {
        NMSettingVPN *s_vpn;

        s_vpn = (NMSettingVPN *) nm_connection_get_setting (connection, NM_TYPE_SETTING_VPN);
        if (s_vpn) {
            const gchar *tmp = NULL;

            tmp = nm_setting_vpn_get_secret (s_vpn, password_type);
            if (tmp)
                password = gnome_keyring_memory_strdup (tmp);
        }
    } else {
        NMSettingConnection *s_con = NULL;
        gboolean unused;
        const char *uuid;

        s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
        uuid = nm_setting_connection_get_uuid (s_con);
        password = keyring_helpers_lookup_secret (uuid,
                   password_type,
                   &unused);
    }

    if (password) {
        gtk_entry_set_text (GTK_ENTRY (widget), password);
        gnome_keyring_memory_free (password);
    }

    return widget;
}