gnome-keyring r1120 - in trunk: . library ui
- From: nnielsen svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-keyring r1120 - in trunk: . library ui
- Date: Thu, 13 Mar 2008 21:18:18 +0000 (GMT)
Author: nnielsen
Date: Thu Mar 13 21:18:17 2008
New Revision: 1120
URL: http://svn.gnome.org/viewvc/gnome-keyring?rev=1120&view=rev
Log:
* library/gnome-keyring.c:
* ui/gkr-ask-request.c: Avoid usage of the 'environ' global
variable and use g_list_env() instead. Fixes bug #522027
Modified:
trunk/ChangeLog
trunk/library/gnome-keyring.c
trunk/ui/gkr-ask-request.c
Modified: trunk/library/gnome-keyring.c
==============================================================================
--- trunk/library/gnome-keyring.c (original)
+++ trunk/library/gnome-keyring.c Thu Mar 13 21:18:17 2008
@@ -1784,12 +1784,27 @@
{
GkrBuffer send, receive;
GnomeKeyringResult res;
- gchar **daemonenv, **e;
+ gchar **envp, **e, *name;
gchar **parts;
+ gboolean ret;
gkr_buffer_init_full (&send, 128, NORMAL_ALLOCATOR);
- if (!gkr_proto_encode_prepare_environment (&send, (const gchar**)environ)) {
+ /* Get all the environment names */
+ envp = g_listenv ();
+ g_return_val_if_fail (envp, GNOME_KEYRING_RESULT_BAD_ARGUMENTS);
+
+ /* Transform them into NAME=VALUE pairs */
+ for (e = envp; *e; ++e) {
+ name = *e;
+ *e = g_strdup_printf ("%s=%s", name, g_getenv (name));
+ g_free (name);
+ }
+
+ ret = gkr_proto_encode_prepare_environment (&send, (const gchar**)envp);
+ g_strfreev (envp);
+
+ if (!ret) {
gkr_buffer_uninit (&send);
return GNOME_KEYRING_RESULT_BAD_ARGUMENTS;
}
@@ -1802,22 +1817,23 @@
return res;
}
- if (!gkr_proto_decode_prepare_environment_reply (&receive, &res, &daemonenv)) {
+ if (!gkr_proto_decode_prepare_environment_reply (&receive, &res, &envp)) {
gkr_buffer_uninit (&receive);
return GNOME_KEYRING_RESULT_IO_ERROR;
}
gkr_buffer_uninit (&receive);
if (res == GNOME_KEYRING_RESULT_OK) {
- for (e = daemonenv; *e; ++e) {
+ g_return_val_if_fail (envp, GNOME_KEYRING_RESULT_IO_ERROR);
+ for (e = envp; *e; ++e) {
parts = g_strsplit (*e, "=", 2);
if (parts && parts[0] && parts[1])
g_setenv (parts[0], parts[1], TRUE);
g_strfreev (parts);
-}
+ }
}
- g_strfreev (daemonenv);
+ g_strfreev (envp);
return res;
}
Modified: trunk/ui/gkr-ask-request.c
==============================================================================
--- trunk/ui/gkr-ask-request.c (original)
+++ trunk/ui/gkr-ask-request.c Thu Mar 13 21:18:17 2008
@@ -539,30 +539,38 @@
launch_ask_helper (GkrAskRequest *ask)
{
GkrAskRequestPrivate *pv = GKR_ASK_REQUEST_GET_PRIVATE (ask);
- char **envp;
+ gchar **names, **envp;
int i, n;
GError *error = NULL;
+ gboolean ret;
+
char *argv[] = {
LIBEXECDIR "/gnome-keyring-ask",
NULL,
};
/* Calculate us some environment */
- i = 0;
- while (environ[i])
+ names = g_listenv ();
+ g_return_val_if_fail (names, FALSE);
+ i = 0;
+ while (names[i])
++i;
n = i;
/* Any environment we have */
envp = g_new (char*, n + 2);
for (i = 0; i < n; i++)
- envp[i] = g_strdup (environ[i]);
+ envp[i] = g_strdup_printf ("%s=%s", names[i], g_getenv (names[i]));
envp[i++] = NULL;
+ g_strfreev (names);
gkr_buffer_resize (&pv->buffer, 0);
- if (!g_spawn_async_with_pipes (NULL, argv, envp, 0, NULL, NULL, &pv->ask_pid,
- &pv->in_fd, &pv->out_fd, NULL, &error)) {
+ ret = g_spawn_async_with_pipes (NULL, argv, envp, 0, NULL, NULL, &pv->ask_pid,
+ &pv->in_fd, &pv->out_fd, NULL, &error);
+ g_strfreev (envp);
+
+ if (!ret) {
g_warning ("couldn't spawn gnome-keyring-ask tool: %s",
error && error->message ? error->message : "unknown error");
pv->out_fd = -1;
@@ -570,7 +578,6 @@
return FALSE;
}
- g_strfreev (envp);
return TRUE;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]