mirror of https://github.com/GNOME/gimp.git
check for gnome-keyring.
2005-10-27 Michael Natterer <mitch@gimp.org> * configure.in: check for gnome-keyring. * plug-ins/uri/uri-backend.h * plug-ins/uri/uri-backend-wget.c * plug-ins/uri/uri-backend-gnomevfs.c: added "plugin_name", boolean "run" and "run_mode" parameters to uri_backend_init(). * plug-ins/uri/uri-backend-gnomevfs.c (uri_backend_init): initialize the gnome authentication manager only when called interactively from "run". Also call gimp_ui_init() when using the auth manager, since recent versions seem to require an already initialized GTK+. When running noninteractively and gnome-keyring is available, implement the needed GnomeVFS authentication callbacks ourselves and ask gnome-keyring directly. * plug-ins/uri/uri.c: pass the additional parameters to uri_backend_init().
This commit is contained in:
parent
bb067d21da
commit
2084dc2cf6
24
ChangeLog
24
ChangeLog
|
@ -1,3 +1,23 @@
|
|||
2005-10-27 Michael Natterer <mitch@gimp.org>
|
||||
|
||||
* configure.in: check for gnome-keyring.
|
||||
|
||||
* plug-ins/uri/uri-backend.h
|
||||
* plug-ins/uri/uri-backend-wget.c
|
||||
* plug-ins/uri/uri-backend-gnomevfs.c: added "plugin_name",
|
||||
boolean "run" and "run_mode" parameters to uri_backend_init().
|
||||
|
||||
* plug-ins/uri/uri-backend-gnomevfs.c (uri_backend_init):
|
||||
initialize the gnome authentication manager only when called
|
||||
interactively from "run". Also call gimp_ui_init() when using the
|
||||
auth manager, since recent versions seem to require an already
|
||||
initialized GTK+. When running noninteractively and gnome-keyring
|
||||
is available, implement the needed GnomeVFS authentication
|
||||
callbacks ourselves and ask gnome-keyring directly.
|
||||
|
||||
* plug-ins/uri/uri.c: pass the additional parameters to
|
||||
uri_backend_init().
|
||||
|
||||
2005-10-26 Carol Spears <carol@gimp.org>
|
||||
|
||||
* app/actions/image-actions.c: added colors-info-menu and
|
||||
|
@ -59,7 +79,7 @@
|
|||
the new menu.
|
||||
|
||||
* app/widgets/gimpbrusheditor.[ch]: use the menu. Added menu_factory
|
||||
paramater to the contstructor.
|
||||
parameter to the contstructor.
|
||||
|
||||
* app/dialogs/dialogs-constructors.c: changed accordingly.
|
||||
|
||||
|
@ -3703,7 +3723,7 @@
|
|||
by always asuming that the destination has alpha.
|
||||
Fixes bug #312392.
|
||||
|
||||
(extract_from_region): removed has_alpha paramater. pass
|
||||
(extract_from_region): removed has_alpha parameter. pass
|
||||
src->bytes and dest->bytes to above functions.
|
||||
|
||||
* app/core/gimpselection.c (gimp_selection_extract): changed
|
||||
|
|
18
configure.in
18
configure.in
|
@ -57,6 +57,7 @@ m4_define([pygtk_required_version], [1.99.15])
|
|||
m4_define([poppler_required_version], [0.3.1])
|
||||
m4_define([gnome_vfs_required_version], [2.10.0])
|
||||
m4_define([gnomeui_required_version], [2.10.0])
|
||||
m4_define([gnome_keyring_required_version], [0.4.5])
|
||||
m4_define([gnome_print_required_version], [2.10.0])
|
||||
|
||||
|
||||
|
@ -1219,9 +1220,9 @@ if test "x$have_poppler" = xyes; then
|
|||
fi
|
||||
|
||||
|
||||
#################################################
|
||||
# Check for gnome-vfs (and optionally libgnomeui)
|
||||
#################################################
|
||||
###################################################################
|
||||
# Check for gnome-vfs (and optionally libgnomeui and gnome-keyring)
|
||||
###################################################################
|
||||
|
||||
uri_modules="gnome-vfs-2.0 >= gnome_vfs_required_version"
|
||||
|
||||
|
@ -1232,6 +1233,13 @@ else
|
|||
AC_MSG_WARN([*** URI plug-in will be built without libgnomeui support (libgnomeui-2.0 not found) ***])
|
||||
fi
|
||||
|
||||
if $PKG_CONFIG --atleast-version=gnome_keyring_required_version gnome-keyring-1; then
|
||||
have_gnome_keyring=yes
|
||||
uri_modules="$uri_modules gnome-keyring-1"
|
||||
else
|
||||
AC_MSG_WARN([*** URI plug-in will be built without gnome-keyring support (gnome-keyring-1 not found) ***])
|
||||
fi
|
||||
|
||||
PKG_CHECK_MODULES(URI, $uri_modules,
|
||||
have_gnomevfs=yes,
|
||||
AC_MSG_WARN([*** URI plug-in will be built without gnome-vfs support (gnome-vfs-2.0 not found) ***]))
|
||||
|
@ -1242,6 +1250,10 @@ if test "x$have_gnomeui" = xyes; then
|
|||
AC_DEFINE(HAVE_GNOMEUI, 1, [Define to 1 if libgnomeui is available])
|
||||
fi
|
||||
|
||||
if test "x$have_gnome_keyring" = xyes; then
|
||||
AC_DEFINE(HAVE_GNOME_KEYRING, 1, [Define to 1 if gnome-keyring is available])
|
||||
fi
|
||||
|
||||
|
||||
#######################
|
||||
# Check for gnome-print
|
||||
|
|
|
@ -23,8 +23,12 @@
|
|||
#ifdef HAVE_GNOMEUI
|
||||
#include <libgnomeui/gnome-authentication-manager.h>
|
||||
#endif
|
||||
#ifdef HAVE_GNOME_KEYRING
|
||||
#include <gnome-keyring.h>
|
||||
#endif
|
||||
|
||||
#include <libgimp/gimp.h>
|
||||
#include <libgimp/gimpui.h>
|
||||
|
||||
#include "libgimp/stdplugins-intl.h"
|
||||
|
||||
|
@ -41,6 +45,21 @@ static gboolean copy_uri (const gchar *src_uri,
|
|||
const gchar *copied_format_str,
|
||||
GError **error);
|
||||
|
||||
#ifdef HAVE_GNOME_KEYRING
|
||||
static void vfs_async_fill_authentication_callback (gconstpointer in,
|
||||
size_t in_size,
|
||||
gpointer out,
|
||||
size_t out_size,
|
||||
gpointer user_data,
|
||||
GnomeVFSModuleCallbackResponse response,
|
||||
gpointer response_data);
|
||||
static void vfs_fill_authentication_callback (gconstpointer in,
|
||||
size_t in_size,
|
||||
gpointer out,
|
||||
size_t out_size,
|
||||
gpointer user_data);
|
||||
#endif /* HAVE_GNOME_KEYRING */
|
||||
|
||||
|
||||
/* private variables */
|
||||
|
||||
|
@ -50,7 +69,10 @@ static gchar *supported_protocols = NULL;
|
|||
/* public functions */
|
||||
|
||||
gboolean
|
||||
uri_backend_init (GError **error)
|
||||
uri_backend_init (const gchar *plugin_name,
|
||||
gboolean run,
|
||||
GimpRunMode run_mode,
|
||||
GError **error)
|
||||
{
|
||||
if (! gnome_vfs_init ())
|
||||
{
|
||||
|
@ -59,8 +81,31 @@ uri_backend_init (GError **error)
|
|||
}
|
||||
|
||||
#ifdef HAVE_GNOMEUI
|
||||
if (run)
|
||||
{
|
||||
if (run_mode == GIMP_RUN_INTERACTIVE)
|
||||
{
|
||||
gimp_ui_init (plugin_name, FALSE);
|
||||
gnome_authentication_manager_init ();
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef HAVE_GNOME_KEYRING
|
||||
gnome_vfs_async_module_callback_set_default
|
||||
(GNOME_VFS_MODULE_CALLBACK_FILL_AUTHENTICATION,
|
||||
vfs_async_fill_authentication_callback,
|
||||
GINT_TO_POINTER (0),
|
||||
NULL);
|
||||
|
||||
gnome_vfs_module_callback_set_default
|
||||
(GNOME_VFS_MODULE_CALLBACK_FILL_AUTHENTICATION,
|
||||
vfs_fill_authentication_callback,
|
||||
GINT_TO_POINTER (0),
|
||||
NULL);
|
||||
#endif /* HAVE_GNOME_KEYRING */
|
||||
}
|
||||
}
|
||||
#endif /* HAVE_GNOMEUI */
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -127,6 +172,7 @@ uri_backend_save_image (const gchar *uri,
|
|||
return success;
|
||||
}
|
||||
|
||||
|
||||
/* private functions */
|
||||
|
||||
static gchar *
|
||||
|
@ -313,3 +359,134 @@ copy_uri (const gchar *src_uri,
|
|||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
#ifdef HAVE_GNOME_KEYRING
|
||||
|
||||
typedef struct
|
||||
{
|
||||
const GnomeVFSModuleCallbackFillAuthenticationIn *in_args;
|
||||
GnomeVFSModuleCallbackFillAuthenticationOut *out_args;
|
||||
|
||||
GnomeVFSModuleCallbackResponse response;
|
||||
gpointer response_data;
|
||||
} FillCallbackInfo;
|
||||
|
||||
static void
|
||||
fill_auth_callback (GnomeKeyringResult result,
|
||||
GList *list,
|
||||
gpointer data)
|
||||
{
|
||||
FillCallbackInfo *info = data;
|
||||
GnomeKeyringNetworkPasswordData *pwd_data;;
|
||||
|
||||
if (result != GNOME_KEYRING_RESULT_OK || list == NULL)
|
||||
{
|
||||
info->out_args->valid = FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* We use the first result, which is the least specific match */
|
||||
pwd_data = list->data;
|
||||
|
||||
info->out_args->valid = TRUE;
|
||||
info->out_args->username = g_strdup (pwd_data->user);
|
||||
info->out_args->domain = g_strdup (pwd_data->domain);
|
||||
info->out_args->password = g_strdup (pwd_data->password);
|
||||
}
|
||||
|
||||
info->response (info->response_data);
|
||||
}
|
||||
|
||||
static void /* GnomeVFSAsyncModuleCallback */
|
||||
vfs_async_fill_authentication_callback (gconstpointer in,
|
||||
size_t in_size,
|
||||
gpointer out,
|
||||
size_t out_size,
|
||||
gpointer user_data,
|
||||
GnomeVFSModuleCallbackResponse response,
|
||||
gpointer response_data)
|
||||
{
|
||||
GnomeVFSModuleCallbackFillAuthenticationIn *in_real;
|
||||
GnomeVFSModuleCallbackFillAuthenticationOut *out_real;
|
||||
gpointer request;
|
||||
FillCallbackInfo *info;
|
||||
|
||||
g_return_if_fail
|
||||
(sizeof (GnomeVFSModuleCallbackFillAuthenticationIn) == in_size &&
|
||||
sizeof (GnomeVFSModuleCallbackFillAuthenticationOut) == out_size);
|
||||
|
||||
g_return_if_fail (in != NULL);
|
||||
g_return_if_fail (out != NULL);
|
||||
|
||||
in_real = (GnomeVFSModuleCallbackFillAuthenticationIn *)in;
|
||||
out_real = (GnomeVFSModuleCallbackFillAuthenticationOut *)out;
|
||||
|
||||
info = g_new (FillCallbackInfo, 1);
|
||||
|
||||
info->in_args = in_real;
|
||||
info->out_args = out_real;
|
||||
info->response = response;
|
||||
info->response_data = response_data;
|
||||
|
||||
request = gnome_keyring_find_network_password (in_real->username,
|
||||
in_real->domain,
|
||||
in_real->server,
|
||||
in_real->object,
|
||||
in_real->protocol,
|
||||
in_real->authtype,
|
||||
in_real->port,
|
||||
fill_auth_callback,
|
||||
info, g_free);
|
||||
}
|
||||
|
||||
static void /* GnomeVFSModuleCallback */
|
||||
vfs_fill_authentication_callback (gconstpointer in,
|
||||
size_t in_size,
|
||||
gpointer out,
|
||||
size_t out_size,
|
||||
gpointer user_data)
|
||||
{
|
||||
GnomeVFSModuleCallbackFillAuthenticationIn *in_real;
|
||||
GnomeVFSModuleCallbackFillAuthenticationOut *out_real;
|
||||
GnomeKeyringNetworkPasswordData *pwd_data;
|
||||
GList *list;
|
||||
GnomeKeyringResult result;
|
||||
|
||||
g_return_if_fail
|
||||
(sizeof (GnomeVFSModuleCallbackFillAuthenticationIn) == in_size &&
|
||||
sizeof (GnomeVFSModuleCallbackFillAuthenticationOut) == out_size);
|
||||
|
||||
g_return_if_fail (in != NULL);
|
||||
g_return_if_fail (out != NULL);
|
||||
|
||||
in_real = (GnomeVFSModuleCallbackFillAuthenticationIn *)in;
|
||||
out_real = (GnomeVFSModuleCallbackFillAuthenticationOut *)out;
|
||||
|
||||
result = gnome_keyring_find_network_password_sync (in_real->username,
|
||||
in_real->domain,
|
||||
in_real->server,
|
||||
in_real->object,
|
||||
in_real->protocol,
|
||||
in_real->authtype,
|
||||
in_real->port,
|
||||
&list);
|
||||
|
||||
if (result != GNOME_KEYRING_RESULT_OK || list == NULL)
|
||||
{
|
||||
out_real->valid = FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* We use the first result, which is the least specific match */
|
||||
pwd_data = list->data;
|
||||
|
||||
out_real->valid = TRUE;
|
||||
out_real->username = g_strdup (pwd_data->user);
|
||||
out_real->domain = g_strdup (pwd_data->domain);
|
||||
out_real->password = g_strdup (pwd_data->password);
|
||||
|
||||
gnome_keyring_network_password_list_free (list);
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* HAVE_GNOME_KEYRING */
|
||||
|
|
|
@ -42,7 +42,10 @@
|
|||
|
||||
|
||||
gboolean
|
||||
uri_backend_init (GError **error)
|
||||
uri_backend_init (const gchar *plugin_name,
|
||||
gboolean run,
|
||||
GimpRunMode run_mode,
|
||||
GError **error)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -20,7 +20,10 @@
|
|||
#define __URI_BACKEND_H__
|
||||
|
||||
|
||||
gboolean uri_backend_init (GError **error);
|
||||
gboolean uri_backend_init (const gchar *plugin_name,
|
||||
gboolean run,
|
||||
GimpRunMode run_mode,
|
||||
GError **error);
|
||||
void uri_backend_shutdown (void);
|
||||
|
||||
const gchar * uri_backend_get_load_protocols (void);
|
||||
|
|
|
@ -40,6 +40,7 @@
|
|||
|
||||
#define LOAD_PROC "file-uri-load"
|
||||
#define SAVE_PROC "file-uri-save"
|
||||
#define PLUG_IN_BINARY "uri"
|
||||
|
||||
|
||||
static void query (void);
|
||||
|
@ -97,7 +98,7 @@ query (void)
|
|||
|
||||
GError *error = NULL;
|
||||
|
||||
if (! uri_backend_init (&error))
|
||||
if (! uri_backend_init (PLUG_IN_BINARY, FALSE, 0, &error))
|
||||
{
|
||||
g_message (error->message);
|
||||
g_clear_error (&error);
|
||||
|
@ -170,7 +171,7 @@ run (const gchar *name,
|
|||
values[0].type = GIMP_PDB_STATUS;
|
||||
values[0].data.d_status = status;
|
||||
|
||||
if (! uri_backend_init (&error))
|
||||
if (! uri_backend_init (PLUG_IN_BINARY, TRUE, run_mode, &error))
|
||||
{
|
||||
g_message (error->message);
|
||||
g_clear_error (&error);
|
||||
|
@ -196,7 +197,7 @@ run (const gchar *name,
|
|||
status = save_image (param[3].data.d_string,
|
||||
param[1].data.d_int32,
|
||||
param[2].data.d_int32,
|
||||
param[0].data.d_int32);
|
||||
run_mode);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue