- Update to 1.11.4
- Remove patch for RH bug #202309 (fixed upstream). - Remove patch for GNOME bug #312854 (fixed upstream). - Remove patch for GNOME bug #447414 (fixed upstream).
This commit is contained in:
parent
1b27cacacc
commit
3be76c61a2
@ -1 +1 @@
|
||||
evolution-data-server-1.11.3.tar.bz2
|
||||
evolution-data-server-1.11.4.tar.bz2
|
||||
|
@ -1,20 +0,0 @@
|
||||
--- evolution-data-server-1.11.3/camel/providers/imap/camel-imap-folder.c.camel-imap-folder 2007-05-10 05:26:55.000000000 -0400
|
||||
+++ evolution-data-server-1.11.3/camel/providers/imap/camel-imap-folder.c 2007-06-15 12:19:22.000000000 -0400
|
||||
@@ -656,7 +656,7 @@ imap_rescan (CamelFolder *folder, int ex
|
||||
uid = g_datalist_get_data (&data, "UID");
|
||||
flags = GPOINTER_TO_UINT (g_datalist_get_data (&data, "FLAGS"));
|
||||
|
||||
- if (!uid || !seq || seq > summary_len) {
|
||||
+ if (!uid || !seq || seq > summary_len || seq < 0) {
|
||||
g_datalist_clear (&data);
|
||||
continue;
|
||||
}
|
||||
@@ -2790,7 +2790,7 @@ parse_fetch_response (CamelImapFolder *i
|
||||
|
||||
if (*response != '*' || *(response + 1) != ' ')
|
||||
return NULL;
|
||||
- seq = strtol (response + 2, &response, 10);
|
||||
+ seq = strtoul (response + 2, &response, 10);
|
||||
if (seq == 0)
|
||||
return NULL;
|
||||
if (g_ascii_strncasecmp (response, " FETCH (", 8) != 0)
|
@ -1,11 +0,0 @@
|
||||
--- evolution-data-server-1.11.3/servers/exchange/storage/exchange-hierarchy-webdav.c.exchange-hierarchy-webdav 2007-04-18 06:10:13.000000000 -0400
|
||||
+++ evolution-data-server-1.11.3/servers/exchange/storage/exchange-hierarchy-webdav.c 2007-06-14 14:49:33.000000000 -0400
|
||||
@@ -419,7 +419,7 @@ xfer_folder (ExchangeHierarchy *hier, EF
|
||||
exchange_hierarchy_removed_folder (hier, source);
|
||||
exchange_hierarchy_new_folder (hier, dest);
|
||||
scan_subtree (hier, dest, mode);
|
||||
- physical_uri = (char *) e_folder_get_physical_uri (source);
|
||||
+ physical_uri = g_strdup (e_folder_get_physical_uri (source));
|
||||
g_object_unref (dest);
|
||||
ret_code = EXCHANGE_ACCOUNT_FOLDER_OK;
|
||||
|
@ -1,32 +0,0 @@
|
||||
--- evolution-data-server-1.8.0/camel/camel-object.c.fix-camel-malloc 2006-09-26 16:26:00.000000000 -0400
|
||||
+++ evolution-data-server-1.8.0/camel/camel-object.c 2006-09-26 16:35:32.000000000 -0400
|
||||
@@ -455,9 +455,13 @@
|
||||
/* maybe it was just version 0 afterall */
|
||||
return 0;
|
||||
}
|
||||
+
|
||||
+ count = MIN(count, CAMEL_ARGV_MAX);
|
||||
|
||||
/* we batch up the properties and set them in one go */
|
||||
- if (!(argv = g_try_malloc ((gulong)(sizeof (*argv) + (count - CAMEL_ARGV_MAX) * sizeof (argv->argv[0])))))
|
||||
+ argv = g_try_malloc(sizeof(CamelArgV) -
|
||||
+ ((CAMEL_ARGV_MAX - count) * sizeof(CamelArg)));
|
||||
+ if (argv == NULL)
|
||||
return -1;
|
||||
|
||||
argv->argc = 0;
|
||||
@@ -536,9 +540,12 @@
|
||||
we also need an argv to store the results - bit messy */
|
||||
|
||||
count = g_slist_length(props);
|
||||
+ count = MIN(count, CAMEL_ARGV_MAX);
|
||||
|
||||
- arggetv = g_malloc0(sizeof(*arggetv) + (count - CAMEL_ARGV_MAX) * sizeof(arggetv->argv[0]));
|
||||
- argv = g_malloc0(sizeof(*argv) + (count - CAMEL_ARGV_MAX) * sizeof(argv->argv[0]));
|
||||
+ arggetv = g_malloc0(sizeof(CamelArgGetV) -
|
||||
+ ((CAMEL_ARGV_MAX - count) * sizeof(CamelArgGet)));
|
||||
+ argv = g_malloc0(sizeof(CamelArgV) -
|
||||
+ ((CAMEL_ARGV_MAX - count) * sizeof(CamelArg)));
|
||||
l = props;
|
||||
i = 0;
|
||||
while (l) {
|
@ -1,5 +1,5 @@
|
||||
--- evolution-data-server-1.11.2/libedataserverui/e-passwords.h.e-passwords 2007-04-18 06:10:16.000000000 -0400
|
||||
+++ evolution-data-server-1.11.2/libedataserverui/e-passwords.h 2007-05-31 22:51:17.000000000 -0400
|
||||
--- evolution-data-server-1.11.4/libedataserverui/e-passwords.h.e-passwords 2007-04-18 06:10:16.000000000 -0400
|
||||
+++ evolution-data-server-1.11.4/libedataserverui/e-passwords.h 2007-06-18 16:19:44.000000000 -0400
|
||||
@@ -28,45 +28,65 @@
|
||||
|
||||
G_BEGIN_DECLS
|
||||
@ -97,8 +97,8 @@
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
--- evolution-data-server-1.11.2/libedataserverui/e-passwords.c.e-passwords 2007-04-18 06:10:16.000000000 -0400
|
||||
+++ evolution-data-server-1.11.2/libedataserverui/e-passwords.c 2007-05-31 23:55:51.000000000 -0400
|
||||
--- evolution-data-server-1.11.4/libedataserverui/e-passwords.c.e-passwords 2007-06-17 23:25:35.000000000 -0400
|
||||
+++ evolution-data-server-1.11.4/libedataserverui/e-passwords.c 2007-06-18 16:26:02.000000000 -0400
|
||||
@@ -23,18 +23,29 @@
|
||||
*/
|
||||
|
||||
@ -269,16 +269,17 @@
|
||||
+ * fully migrate to GNOME Keyring or whatever software supercedes it.
|
||||
+ * Evolution is one of the few remaining GNOME-2 applications that
|
||||
+ * still uses the deprecated ~/.gnome2-private directory. */
|
||||
+
|
||||
+ return g_build_filename (g_get_home_dir (),
|
||||
+ ".gnome2_private", "Evolution", NULL);
|
||||
+}
|
||||
|
||||
- /* As soon as a password window is up we stop; it will
|
||||
- re-invoke us when it has been closed down */
|
||||
- LOCK();
|
||||
- while (password_dialog == NULL && (msg = (EPassMsg *)e_dlist_remhead(&request_list))) {
|
||||
- UNLOCK();
|
||||
+ return g_build_filename (g_get_home_dir (),
|
||||
+ ".gnome2_private", "Evolution", NULL);
|
||||
+}
|
||||
|
||||
- msg->dispatch(msg);
|
||||
+static gchar *
|
||||
+ep_key_file_get_group (const gchar *component)
|
||||
+{
|
||||
@ -295,8 +296,7 @@
|
||||
+ * continue to do the same for backward-compatibility. */
|
||||
+
|
||||
+ gchar *normalized_key, *cp;
|
||||
|
||||
- msg->dispatch(msg);
|
||||
+
|
||||
+ normalized_key = g_strdup (key);
|
||||
+ for (cp = normalized_key; *cp != '\0'; cp++)
|
||||
+ if (*cp == '/' || *cp == '=')
|
||||
@ -310,10 +310,10 @@
|
||||
+{
|
||||
+ gchar *filename;
|
||||
+ GError *error = NULL;
|
||||
+
|
||||
+ filename = ep_key_file_get_filename ();
|
||||
|
||||
- LOCK();
|
||||
+ filename = ep_key_file_get_filename ();
|
||||
+
|
||||
+ if (!g_file_test (filename, G_FILE_TEST_EXISTS))
|
||||
+ goto exit;
|
||||
+
|
||||
@ -379,17 +379,11 @@
|
||||
+
|
||||
+ gchar *password;
|
||||
+ gsize length;
|
||||
|
||||
- e_passwords_init();
|
||||
+
|
||||
+ password = (gchar *) g_base64_decode (encoded_password, &length);
|
||||
+ password = g_realloc (password, length + 1);
|
||||
+ password[length] = '\0';
|
||||
|
||||
- msg = g_malloc0(sizeof(*msg));
|
||||
- msg->dispatch = dispatch;
|
||||
- msg->msg.reply_port = e_msgport_new();
|
||||
-#ifdef ENABLE_THREADS
|
||||
- msg->ismain = pthread_equal(pthread_self(), main_thread);
|
||||
+
|
||||
+ return password;
|
||||
+}
|
||||
+
|
||||
@ -403,9 +397,15 @@
|
||||
+
|
||||
+ password_cache = g_hash_table_new_full (
|
||||
+ g_str_hash, g_str_equal, g_free, g_free);
|
||||
+
|
||||
|
||||
- e_passwords_init();
|
||||
+ express_queue = g_async_queue_new ();
|
||||
+
|
||||
|
||||
- msg = g_malloc0(sizeof(*msg));
|
||||
- msg->dispatch = dispatch;
|
||||
- msg->msg.reply_port = e_msgport_new();
|
||||
-#ifdef ENABLE_THREADS
|
||||
- msg->ismain = pthread_equal(pthread_self(), main_thread);
|
||||
+#ifdef WITH_GNOME_KEYRING
|
||||
+ if (!gnome_keyring_is_available ()) {
|
||||
+ key_file = g_key_file_new ();
|
||||
@ -486,7 +486,8 @@
|
||||
static void
|
||||
-ep_msg_send(EPassMsg *msg)
|
||||
+ep_msg_free (EPassMsg *msg)
|
||||
+{
|
||||
{
|
||||
- int needidle = 0;
|
||||
+ e_flag_free (msg->done);
|
||||
+ g_slice_free (EPassMsg, msg);
|
||||
+}
|
||||
@ -515,18 +516,17 @@
|
||||
+ e_flag_free (data->done);
|
||||
+ g_slice_free (EPassDialogData, data);
|
||||
+}
|
||||
+
|
||||
+static gboolean
|
||||
+ep_dialog_run (EPassMsg *msg)
|
||||
{
|
||||
- int needidle = 0;
|
||||
+ /* This function must run in the main thread. */
|
||||
|
||||
- LOCK();
|
||||
- e_dlist_addtail(&request_list, (EDListNode *)&msg->msg);
|
||||
- if (!idle_id) {
|
||||
- if (!msg->ismain)
|
||||
- idle_id = g_idle_add(ep_idle_dispatch, NULL);
|
||||
+static gboolean
|
||||
+ep_dialog_run (EPassMsg *msg)
|
||||
+{
|
||||
+ /* This function must run in the main thread. */
|
||||
+
|
||||
+ EPassDialogData *data = msg->data;
|
||||
+ GtkBox *box;
|
||||
+ GtkWidget *dialog;
|
||||
@ -651,15 +651,15 @@
|
||||
+ep_clear_passwords_keyfile (EPassMsg *msg)
|
||||
{
|
||||
- char *path;
|
||||
-
|
||||
- path = g_strdup_printf ("/Evolution/Passwords-%s", msg->component);
|
||||
+ gchar *group;
|
||||
+ GError *error = NULL;
|
||||
|
||||
- path = g_strdup_printf ("/Evolution/Passwords-%s", msg->component);
|
||||
+ group = ep_key_file_get_group (msg->component);
|
||||
|
||||
- gnome_config_private_clean_section (path);
|
||||
- gnome_config_private_sync_file ("/Evolution");
|
||||
-
|
||||
+ group = ep_key_file_get_group (msg->component);
|
||||
|
||||
- g_free (path);
|
||||
+ g_key_file_remove_group (key_file, group, &error);
|
||||
+ if (error == NULL)
|
||||
@ -835,11 +835,16 @@
|
||||
- gpointer okey, value;
|
||||
- char *path, *pass64;
|
||||
- int len, state, save;
|
||||
-
|
||||
+ gchar *group, *key, *password;
|
||||
|
||||
- if (g_hash_table_lookup_extended (passwords, msg->key, &okey, &value)) {
|
||||
- /* add it to the on-disk cache of passwords */
|
||||
- path = password_path (msg->component, okey);
|
||||
+ gchar *group, *key, *password;
|
||||
+ password = g_hash_table_lookup (password_cache, msg->key);
|
||||
+ if (password == NULL) {
|
||||
+ g_warning ("Password for key \"%s\" not found", msg->key);
|
||||
+ return;
|
||||
+ }
|
||||
|
||||
- len = strlen (value);
|
||||
- pass64 = g_malloc0 ((len + 2) * 4 / 3 + 1);
|
||||
@ -849,20 +854,14 @@
|
||||
- gnome_config_private_set_string (path, pass64);
|
||||
- g_free (path);
|
||||
- g_free (pass64);
|
||||
+ password = g_hash_table_lookup (password_cache, msg->key);
|
||||
+ if (password == NULL) {
|
||||
+ g_warning ("Password for key \"%s\" not found", msg->key);
|
||||
+ return;
|
||||
+ }
|
||||
+ group = ep_key_file_get_group (msg->component);
|
||||
+ key = ep_key_file_normalize_key (msg->key);
|
||||
+ password = ep_password_encode (password);
|
||||
|
||||
- /* now remove it from our session hash */
|
||||
- g_hash_table_remove (passwords, msg->key);
|
||||
- g_free (okey);
|
||||
- g_free (value);
|
||||
+ group = ep_key_file_get_group (msg->component);
|
||||
+ key = ep_key_file_normalize_key (msg->key);
|
||||
+ password = ep_password_encode (password);
|
||||
+
|
||||
+ g_hash_table_remove (password_cache, msg->key);
|
||||
+ g_key_file_set_string (key_file, group, key, password);
|
||||
+ ep_key_file_save ();
|
||||
@ -898,7 +897,7 @@
|
||||
EUri *uri = e_uri_new (msg->key);
|
||||
|
||||
if (!strcmp (uri->protocol, "ldap") && !uri->user) {
|
||||
@@ -486,27 +703,17 @@ ep_forget_password_keyring (EPassMsg *ms
|
||||
@@ -486,12 +703,7 @@ ep_forget_password_keyring (EPassMsg *ms
|
||||
uri->user = keycopy;
|
||||
}
|
||||
|
||||
@ -910,32 +909,16 @@
|
||||
- }
|
||||
+ g_hash_table_remove (password_cache, msg->key);
|
||||
|
||||
if (!uri->host && !uri->user) {
|
||||
if (!uri->host && !uri->user)
|
||||
/* No need to remove from keyring for pass phrases */
|
||||
- if (!msg->noreply)
|
||||
- e_msgport_reply(&msg->msg);
|
||||
return;
|
||||
}
|
||||
|
||||
result = gnome_keyring_get_default_keyring_sync (&default_keyring);
|
||||
if (!default_keyring) {
|
||||
- if (gnome_keyring_create_sync ("default", NULL) != GNOME_KEYRING_RESULT_OK) {
|
||||
- if (!msg->noreply)
|
||||
- e_msgport_reply(&msg->msg);
|
||||
- return;
|
||||
- }
|
||||
+ if (gnome_keyring_create_sync ("default", NULL) != GNOME_KEYRING_RESULT_OK)
|
||||
+ return;
|
||||
default_keyring = g_strdup ("default");
|
||||
}
|
||||
|
||||
@@ -567,35 +774,44 @@ ep_forget_password_keyring (EPassMsg *ms
|
||||
}
|
||||
|
||||
@@ -563,36 +775,45 @@ ep_forget_password_keyring (EPassMsg *ms
|
||||
g_free (default_keyring);
|
||||
-
|
||||
|
||||
exit:
|
||||
- if (!msg->noreply)
|
||||
- e_msgport_reply(&msg->msg);
|
||||
-
|
||||
e_uri_free(uri);
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -947,17 +930,17 @@
|
||||
- char *path;
|
||||
+ gchar *group, *key;
|
||||
+ GError *error = NULL;
|
||||
+
|
||||
+ g_hash_table_remove (password_cache, msg->key);
|
||||
+
|
||||
+ group = ep_key_file_get_group (msg->component);
|
||||
+ key = ep_key_file_normalize_key (msg->key);
|
||||
|
||||
- if (g_hash_table_lookup_extended (passwords, msg->key, &okey, &value)) {
|
||||
- g_hash_table_remove (passwords, msg->key);
|
||||
- memset (value, 0, strlen (value));
|
||||
- g_free (okey);
|
||||
- g_free (value);
|
||||
+ g_hash_table_remove (password_cache, msg->key);
|
||||
+
|
||||
+ group = ep_key_file_get_group (msg->component);
|
||||
+ key = ep_key_file_normalize_key (msg->key);
|
||||
+
|
||||
+ g_key_file_remove_key (key_file, group, key, &error);
|
||||
+ if (error == NULL)
|
||||
+ ep_key_file_save ();
|
||||
@ -993,7 +976,7 @@
|
||||
|
||||
#ifdef WITH_GNOME_KEYRING
|
||||
static void
|
||||
@@ -605,11 +821,11 @@ ep_get_password_keyring (EPassMsg *msg)
|
||||
@@ -602,11 +823,11 @@ ep_get_password_keyring (EPassMsg *msg)
|
||||
GnomeKeyringAttributeList *attributes;
|
||||
GnomeKeyringAttribute attribute;
|
||||
GnomeKeyringResult result;
|
||||
@ -1008,9 +991,9 @@
|
||||
} else {
|
||||
EUri *uri = e_uri_new (msg->key);
|
||||
|
||||
@@ -683,284 +899,154 @@ ep_get_password_keyring (EPassMsg *msg)
|
||||
}
|
||||
@@ -681,284 +902,154 @@ ep_get_password_keyring (EPassMsg *msg)
|
||||
|
||||
e_uri_free (uri);
|
||||
}
|
||||
-
|
||||
- if (!msg->noreply)
|
||||
@ -1030,7 +1013,20 @@
|
||||
- passwd = g_hash_table_lookup (passwords, msg->key);
|
||||
- if (passwd) {
|
||||
- msg->password = g_strdup(passwd);
|
||||
- } else {
|
||||
+ password = g_hash_table_lookup (password_cache, msg->key);
|
||||
+ if (password != NULL) {
|
||||
+ msg->password = g_strdup (password);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ group = ep_key_file_get_group (msg->component);
|
||||
+ key = ep_key_file_normalize_key (msg->key);
|
||||
+
|
||||
+ password = g_key_file_get_string (key_file, group, key, &error);
|
||||
+ if (password != NULL) {
|
||||
+ msg->password = ep_password_decode (password);
|
||||
+ g_free (password);
|
||||
} else {
|
||||
- /* not part of the session hash, look it up in the on disk db */
|
||||
- path = password_path (msg->component, msg->key);
|
||||
- encoded = gnome_config_private_get_string_with_default (path, NULL);
|
||||
@ -1039,49 +1035,47 @@
|
||||
- msg->password = decode_base64 (encoded);
|
||||
- g_free (encoded);
|
||||
- }
|
||||
+ password = g_hash_table_lookup (password_cache, msg->key);
|
||||
+ if (password != NULL) {
|
||||
+ msg->password = g_strdup (password);
|
||||
+ return;
|
||||
}
|
||||
|
||||
- if (!msg->noreply)
|
||||
- e_msgport_reply(&msg->msg);
|
||||
-}
|
||||
+ group = ep_key_file_get_group (msg->component);
|
||||
+ key = ep_key_file_normalize_key (msg->key);
|
||||
|
||||
-static void
|
||||
-ep_add_password (EPassMsg *msg)
|
||||
-{
|
||||
- gpointer okey, value;
|
||||
-
|
||||
- if (g_hash_table_lookup_extended (passwords, msg->key, &okey, &value)) {
|
||||
- g_hash_table_remove (passwords, msg->key);
|
||||
- g_free (okey);
|
||||
- g_free (value);
|
||||
+ password = g_key_file_get_string (key_file, group, key, &error);
|
||||
+ if (password != NULL) {
|
||||
+ msg->password = ep_password_decode (password);
|
||||
+ g_free (password);
|
||||
+ } else {
|
||||
+ g_warning ("%s", error->message);
|
||||
+ g_error_free (error);
|
||||
}
|
||||
|
||||
- g_hash_table_insert (passwords, g_strdup (msg->key), g_strdup (msg->oldpass));
|
||||
-
|
||||
- if (!msg->noreply)
|
||||
- e_msgport_reply(&msg->msg);
|
||||
+ g_free (group);
|
||||
+ g_free (key);
|
||||
}
|
||||
|
||||
static void
|
||||
-ep_add_password (EPassMsg *msg)
|
||||
+ep_get_password (EPassMsg *msg)
|
||||
{
|
||||
- gpointer okey, value;
|
||||
-
|
||||
- if (g_hash_table_lookup_extended (passwords, msg->key, &okey, &value)) {
|
||||
- g_hash_table_remove (passwords, msg->key);
|
||||
- g_free (okey);
|
||||
- g_free (value);
|
||||
- }
|
||||
-
|
||||
- g_hash_table_insert (passwords, g_strdup (msg->key), g_strdup (msg->oldpass));
|
||||
-
|
||||
- if (!msg->noreply)
|
||||
- e_msgport_reply(&msg->msg);
|
||||
+#ifdef WITH_GNOME_KEYRING
|
||||
+ if (gnome_keyring_is_available ())
|
||||
+ ep_get_password_keyring (msg);
|
||||
+ else
|
||||
+ ep_get_password_keyfile (msg);
|
||||
+#else
|
||||
+ ep_get_password_keyfile (msg);
|
||||
+#endif
|
||||
}
|
||||
|
||||
-static void ep_ask_password(EPassMsg *msg);
|
||||
-
|
||||
static void
|
||||
-pass_response(GtkDialog *dialog, int response, void *data)
|
||||
+ep_get_password (EPassMsg *msg)
|
||||
+ep_add_password (EPassMsg *msg)
|
||||
{
|
||||
- EPassMsg *msg = data;
|
||||
- int type = msg->flags & E_PASSWORDS_REMEMBER_MASK;
|
||||
@ -1090,41 +1084,60 @@
|
||||
-
|
||||
- if (response == GTK_RESPONSE_OK) {
|
||||
- msg->password = g_strdup(gtk_entry_get_text((GtkEntry *)msg->entry));
|
||||
-
|
||||
+ gchar *key = g_strdup (msg->key);
|
||||
+ gchar *password = g_strdup (msg->password);
|
||||
|
||||
- if (type != E_PASSWORDS_REMEMBER_NEVER) {
|
||||
- int noreply = msg->noreply;
|
||||
-
|
||||
+ g_hash_table_insert (password_cache, key, password);
|
||||
+}
|
||||
|
||||
- *msg->remember = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (msg->check));
|
||||
-
|
||||
+static void
|
||||
+ep_ask_password (EPassMsg *msg)
|
||||
+{
|
||||
+ EPassDialogData *data = msg->data;
|
||||
+ gchar *password;
|
||||
+ gint remember;
|
||||
|
||||
- msg->noreply = 1;
|
||||
-
|
||||
+ /* Open the express queue for this key. This allows us to catch
|
||||
+ * incoming operations on this key while waiting for the user to
|
||||
+ * provide a password. Once we have the password, immediately
|
||||
+ * process any messages in the express queue. */
|
||||
+ g_async_queue_lock (express_queue);
|
||||
+ express_key = msg->key;
|
||||
+ g_async_queue_unlock (express_queue);
|
||||
|
||||
- if (*msg->remember || type == E_PASSWORDS_REMEMBER_FOREVER) {
|
||||
- msg->oldpass = msg->password;
|
||||
- ep_add_password(msg);
|
||||
- }
|
||||
#ifdef WITH_GNOME_KEYRING
|
||||
-#ifdef WITH_GNOME_KEYRING
|
||||
- if (*msg->remember && type == E_PASSWORDS_REMEMBER_FOREVER) {
|
||||
- if (gnome_keyring_is_available())
|
||||
- ep_remember_password_keyring(msg);
|
||||
- else
|
||||
- ep_remember_password_file(msg);
|
||||
- }
|
||||
+ if (gnome_keyring_is_available ())
|
||||
+ ep_get_password_keyring (msg);
|
||||
+ else
|
||||
+ ep_get_password_keyfile (msg);
|
||||
#else
|
||||
-#else
|
||||
- if (*msg->remember && type == E_PASSWORDS_REMEMBER_FOREVER)
|
||||
- ep_remember_password_file(msg);
|
||||
-#endif
|
||||
-
|
||||
+ if (data->flags & E_PASSWORDS_REPROMPT)
|
||||
+ ep_get_password (msg);
|
||||
|
||||
- msg->noreply = noreply;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
+ /* Run the password dialog in the main thread. */
|
||||
+ g_idle_add ((GSourceFunc) ep_dialog_run, msg);
|
||||
|
||||
- gtk_widget_destroy((GtkWidget *)dialog);
|
||||
- password_dialog = NULL;
|
||||
-
|
||||
+ /* Wait for the user to respond. */
|
||||
+ e_flag_wait (data->done);
|
||||
|
||||
- /* ok, here things get interesting, we suck up any pending
|
||||
- * operations on this specific password, and return the same
|
||||
- * result or ignore other operations */
|
||||
@ -1137,8 +1150,7 @@
|
||||
- if ((mw->dispatch == (gnome_keyring_is_available() ? ep_forget_password_keyring : ep_forget_password_file)
|
||||
-#else
|
||||
- if ((mw->dispatch == ep_forget_password_file
|
||||
+ ep_get_password_keyfile (msg);
|
||||
#endif
|
||||
-#endif
|
||||
-#ifdef WITH_GNOME_KEYRING
|
||||
- || mw->dispatch == (gnome_keyring_is_available() ? ep_get_password_keyring : ep_get_password_file)
|
||||
-#else
|
||||
@ -1153,51 +1165,6 @@
|
||||
- }
|
||||
- mw = mn;
|
||||
- mn = (EPassMsg *)mn->msg.ln.next;
|
||||
- }
|
||||
- UNLOCK();
|
||||
+}
|
||||
|
||||
- if (!msg->noreply)
|
||||
- e_msgport_reply(&msg->msg);
|
||||
+static void
|
||||
+ep_add_password (EPassMsg *msg)
|
||||
+{
|
||||
+ gchar *key = g_strdup (msg->key);
|
||||
+ gchar *password = g_strdup (msg->password);
|
||||
|
||||
- ep_idle_dispatch(NULL);
|
||||
+ g_hash_table_insert (password_cache, key, password);
|
||||
}
|
||||
|
||||
static void
|
||||
-ep_ask_password(EPassMsg *msg)
|
||||
+ep_ask_password (EPassMsg *msg)
|
||||
{
|
||||
- GtkWidget *vbox;
|
||||
- int type = msg->flags & E_PASSWORDS_REMEMBER_MASK;
|
||||
- guint noreply = msg->noreply;
|
||||
- AtkObject *a11y;
|
||||
+ EPassDialogData *data = msg->data;
|
||||
+ gchar *password;
|
||||
+ gint remember;
|
||||
+
|
||||
+ /* Open the express queue for this key. This allows us to catch
|
||||
+ * incoming operations on this key while waiting for the user to
|
||||
+ * provide a password. Once we have the password, immediately
|
||||
+ * process any messages in the express queue. */
|
||||
+ g_async_queue_lock (express_queue);
|
||||
+ express_key = msg->key;
|
||||
+ g_async_queue_unlock (express_queue);
|
||||
+
|
||||
+ if (data->flags & E_PASSWORDS_REPROMPT)
|
||||
+ ep_get_password (msg);
|
||||
+
|
||||
+ /* Run the password dialog in the main thread. */
|
||||
+ g_idle_add ((GSourceFunc) ep_dialog_run, msg);
|
||||
+
|
||||
+ /* Wait for the user to respond. */
|
||||
+ e_flag_wait (data->done);
|
||||
+
|
||||
+ /* If the user cancelled the dialog then we need to dispatch
|
||||
+ * any messages that we trapped in the express queue. */
|
||||
+ if (data->response != GTK_RESPONSE_OK) {
|
||||
@ -1207,10 +1174,27 @@
|
||||
+ ep_msg_dispatch (msg);
|
||||
+ g_async_queue_unlock (express_queue);
|
||||
+ return;
|
||||
+ }
|
||||
}
|
||||
- UNLOCK();
|
||||
-
|
||||
- if (!msg->noreply)
|
||||
- e_msgport_reply(&msg->msg);
|
||||
|
||||
- ep_idle_dispatch(NULL);
|
||||
-}
|
||||
-
|
||||
-static void
|
||||
-ep_ask_password(EPassMsg *msg)
|
||||
-{
|
||||
- GtkWidget *vbox;
|
||||
- int type = msg->flags & E_PASSWORDS_REMEMBER_MASK;
|
||||
- guint noreply = msg->noreply;
|
||||
- AtkObject *a11y;
|
||||
+ remember = data->flags & E_PASSWORDS_REMEMBER_MASK;
|
||||
|
||||
- msg->noreply = 1;
|
||||
+ remember = data->flags & E_PASSWORDS_REMEMBER_MASK;
|
||||
+ if (remember == E_PASSWORDS_REMEMBER_NEVER)
|
||||
+ goto cleanup;
|
||||
|
||||
- /*password_dialog = (GtkDialog *)e_error_new(msg->parent, "mail:ask-session-password", msg->prompt, NULL);*/
|
||||
- password_dialog = (GtkDialog *)gtk_message_dialog_new (msg->parent,
|
||||
@ -1219,26 +1203,25 @@
|
||||
- GTK_BUTTONS_OK_CANCEL,
|
||||
- "%s", msg->prompt);
|
||||
- gtk_window_set_title(GTK_WINDOW(password_dialog), msg->title);
|
||||
+ if (remember == E_PASSWORDS_REMEMBER_NEVER)
|
||||
+ goto cleanup;
|
||||
+ if (data->remember || remember == E_PASSWORDS_REMEMBER_FOREVER)
|
||||
+ ep_add_password (msg);
|
||||
|
||||
- gtk_widget_ensure_style (GTK_WIDGET (password_dialog));
|
||||
- gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (password_dialog)->vbox), 0);
|
||||
- gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (password_dialog)->action_area), 12);
|
||||
+ if (data->remember || remember == E_PASSWORDS_REMEMBER_FOREVER)
|
||||
+ ep_add_password (msg);
|
||||
|
||||
- gtk_dialog_set_default_response(password_dialog, GTK_RESPONSE_OK);
|
||||
+ if (data->remember && remember == E_PASSWORDS_REMEMBER_FOREVER)
|
||||
+ ep_remember_password (msg);
|
||||
|
||||
- gtk_dialog_set_default_response(password_dialog, GTK_RESPONSE_OK);
|
||||
+cleanup:
|
||||
|
||||
- vbox = gtk_vbox_new (FALSE, 12);
|
||||
- gtk_widget_show (vbox);
|
||||
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (password_dialog)->vbox), vbox, TRUE, FALSE, 0);
|
||||
- gtk_container_set_border_width((GtkContainer *)vbox, 12);
|
||||
-
|
||||
- msg->entry = gtk_entry_new ();
|
||||
+cleanup:
|
||||
+ password = g_strdup (msg->password);
|
||||
|
||||
- a11y = gtk_widget_get_accessible (msg->entry);
|
||||
- atk_object_set_description (a11y, msg->prompt);
|
||||
@ -1262,8 +1245,14 @@
|
||||
- g_free (msg->password);
|
||||
- msg->password = NULL;
|
||||
- }
|
||||
- }
|
||||
+ password = g_strdup (msg->password);
|
||||
+ /* Close the express queue and process any messages there. */
|
||||
+ g_async_queue_lock (express_queue);
|
||||
+ express_key = NULL;
|
||||
+ while ((msg = g_async_queue_try_pop_unlocked (express_queue))) {
|
||||
+ msg->password = g_strdup (password);
|
||||
+ e_flag_set (msg->done);
|
||||
}
|
||||
+ g_async_queue_unlock (express_queue);
|
||||
|
||||
- /* static password, shouldn't be remembered between sessions,
|
||||
- but will be remembered within the session beyond our control */
|
||||
@ -1283,17 +1272,10 @@
|
||||
- if ((msg->flags & E_PASSWORDS_DISABLE_REMEMBER))
|
||||
- gtk_widget_set_sensitive(msg->check, FALSE);
|
||||
- gtk_widget_show (msg->check);
|
||||
+ /* Close the express queue and process any messages there. */
|
||||
+ g_async_queue_lock (express_queue);
|
||||
+ express_key = NULL;
|
||||
+ while ((msg = g_async_queue_try_pop_unlocked (express_queue))) {
|
||||
+ msg->password = g_strdup (password);
|
||||
+ e_flag_set (msg->done);
|
||||
}
|
||||
- }
|
||||
-
|
||||
- msg->noreply = noreply;
|
||||
+ g_async_queue_unlock (express_queue);
|
||||
|
||||
-
|
||||
- g_signal_connect(password_dialog, "response", G_CALLBACK (pass_response), msg);
|
||||
- gtk_widget_show((GtkWidget *)password_dialog);
|
||||
+ g_free (password);
|
||||
@ -1383,7 +1365,7 @@
|
||||
*
|
||||
* Set the offline-state of the application. This is a work-around
|
||||
* for having the backends fully offline aware, and returns a
|
||||
@@ -972,10 +1055,11 @@ e_passwords_shutdown (void)
|
||||
@@ -967,10 +1058,11 @@ e_passwords_shutdown (void)
|
||||
* FIXME: This is not a permanent api, review post 2.0.
|
||||
**/
|
||||
void
|
||||
@ -1398,7 +1380,7 @@
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -986,150 +1070,137 @@ e_passwords_set_online(int state)
|
||||
@@ -981,151 +1073,138 @@ e_passwords_set_online(int state)
|
||||
void
|
||||
e_passwords_forget_passwords (void)
|
||||
{
|
||||
@ -1603,7 +1585,8 @@
|
||||
+ * @key: key to store the password under, or NULL
|
||||
* @prompt: prompt string
|
||||
* @type: whether or not to offer to remember the password,
|
||||
@@ -1146,241 +1217,44 @@ e_passwords_add_password (const char *ke
|
||||
* and for how long.
|
||||
@@ -1140,241 +1219,44 @@ e_passwords_add_password (const char *ke
|
||||
* return value is non-%NULL and @remember_type is not
|
||||
* E_PASSWORDS_DO_NOT_REMEMBER.
|
||||
**/
|
||||
@ -1873,8 +1856,8 @@
|
||||
- return (char *)plain;
|
||||
+ return password;
|
||||
}
|
||||
--- evolution-data-server-1.11.2/libedataserver/e-msgport.h.e-passwords 2007-04-18 06:10:18.000000000 -0400
|
||||
+++ evolution-data-server-1.11.2/libedataserver/e-msgport.h 2007-05-31 22:51:17.000000000 -0400
|
||||
--- evolution-data-server-1.11.4/libedataserver/e-msgport.h.e-passwords 2007-04-18 06:10:18.000000000 -0400
|
||||
+++ evolution-data-server-1.11.4/libedataserver/e-msgport.h 2007-06-18 16:19:44.000000000 -0400
|
||||
@@ -54,7 +54,7 @@ typedef struct _EMsgPort EMsgPort;
|
||||
|
||||
/* header for any message */
|
||||
|
@ -25,8 +25,8 @@
|
||||
### Abstract ###
|
||||
|
||||
Name: evolution-data-server
|
||||
Version: 1.11.3
|
||||
Release: 3%{?dist}
|
||||
Version: 1.11.4
|
||||
Release: 1%{?dist}
|
||||
License: LGPL
|
||||
Group: System Environment/Libraries
|
||||
Summary: Backend data server for Evolution
|
||||
@ -45,9 +45,6 @@ Patch11: evolution-data-server-1.8.0-no-gnome-common.patch
|
||||
# RH bug #202309
|
||||
Patch12: evolution-data-server-1.7.91-maybe-fix-crash.patch
|
||||
|
||||
# RH bug #203915
|
||||
Patch13: evolution-data-server-1.8.0-fix-camel-malloc.patch
|
||||
|
||||
# GNOME bug #363695
|
||||
Patch14: evolution-data-server-1.9.1-kill-ememory.patch
|
||||
|
||||
@ -66,12 +63,6 @@ Patch19: evolution-data-server-1.10.1-camel-folder-summary-crash.patch
|
||||
# RH bug #215634
|
||||
Patch20: evolution-data-server-1.10.1-camel-certdb-nss-cert-get.patch
|
||||
|
||||
# GNOME bug #312584
|
||||
Patch21: evolution-data-server-1.11.3-exchange-hierarchy-webdav.patch
|
||||
|
||||
# GNOME bug #447414
|
||||
Patch22: evolution-data-server-1.11.3-camel-imap-folder.patch
|
||||
|
||||
### Dependencies ###
|
||||
|
||||
Requires: GConf2
|
||||
@ -154,15 +145,12 @@ evolution-data-server.
|
||||
%patch10 -p1 -b .ldaphack
|
||||
%patch11 -p1 -b .no-gnome-common
|
||||
%patch12 -p1 -b .maybe-fix-crash
|
||||
%patch13 -p1 -b .fix-camel-malloc
|
||||
%patch14 -p1 -b .kill-ememory
|
||||
%patch15 -p1 -b .e-flag
|
||||
%patch16 -p1 -b .e-passwords
|
||||
%patch18 -p1 -b .code-cleanup
|
||||
%patch19 -p1 -b .camel-folder-symmary-crash
|
||||
%patch20 -p1 -b .camel-certdb-nss-cert-get
|
||||
%patch21 -p1 -b .exchange-hierarchy-webdav
|
||||
%patch22 -p1 -b .camel-imap-folder
|
||||
|
||||
mkdir -p krb5-fakeprefix/include
|
||||
mkdir -p krb5-fakeprefix/lib
|
||||
@ -387,6 +375,12 @@ rm -rf $RPM_BUILD_ROOT
|
||||
%{_libdir}/pkgconfig/libexchange-storage-%{eds_api_version}.pc
|
||||
|
||||
%changelog
|
||||
* Mon Jun 18 2007 Matthew Barnes <mbarnes@redhat.com> - 1.11.4-1.fc8
|
||||
- Update to 1.11.4
|
||||
- Remove patch for RH bug #202309 (fixed upstream).
|
||||
- Remove patch for GNOME bug #312854 (fixed upstream).
|
||||
- Remove patch for GNOME bug #447414 (fixed upstream).
|
||||
|
||||
* Fri Jun 15 2007 Matthew Barnes <mbarnes@redhat.com> - 1.11.3-3.fc8
|
||||
- Add patch for GNOME bug #224277 (Camel IMAP security flaw).
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user