*** evolution-2.24.2/mail/mail-config.c 2008-11-20 05:07:24.000000000 +0100 --- evolution-2.24.2.neu/mail/mail-config.c 2008-12-16 13:29:17.000000000 +0100 *************** *** 778,830 **** return (EAccount *) e_account_list_find (config->accounts, E_ACCOUNT_FIND_UID, uid); } EAccount * mail_config_get_account_by_source_url (const char *source_url) { EAccount *account = NULL; EIterator *iter; g_return_val_if_fail (source_url != NULL, NULL); iter = e_list_get_iterator ((EList *) config->accounts); ! while (e_iterator_is_valid (iter)) { ! CamelURL *url; ! gchar *string; account = (EAccount *) e_iterator_get (iter); e_iterator_next (iter); ! if (account->source == NULL) ! continue; ! ! else if (account->source->url == NULL) ! continue; ! ! else if (*account->source->url == '\0') continue; ! url = camel_url_new (account->source->url, NULL); ! if (url == NULL) continue; ! /* Simplify the account URL for comparison. */ ! string = camel_url_to_string (url, CAMEL_URL_HIDE_ALL); ! if (string == NULL || strcmp (string, source_url) != 0) account = NULL; /* not a match */ ! camel_url_free (url); ! g_free (string); ! ! if (account != NULL) { ! g_object_unref (iter); ! return account; ! } } g_object_unref (iter); ! return NULL; } EAccount * --- 778,844 ---- return (EAccount *) e_account_list_find (config->accounts, E_ACCOUNT_FIND_UID, uid); } + static gboolean + mail_config_account_url_equal (const CamelURL *u1, + const CamelURL *u2) + { + /* For the purpose of matching a URL to an EAccount, only compare + * the protocol, user, host and port and disregard the rest. */ + + if (g_strcmp0 (u1->protocol, u2->protocol) != 0) + return FALSE; + + if (g_strcmp0 (u1->user, u2->user) != 0) + return FALSE; + + if (g_strcmp0 (u1->host, u2->host) != 0) + return FALSE; + + return (u1->port == u2->port); + } + EAccount * mail_config_get_account_by_source_url (const char *source_url) { EAccount *account = NULL; EIterator *iter; + CamelURL *url; g_return_val_if_fail (source_url != NULL, NULL); + url = camel_url_new (source_url, NULL); + g_return_val_if_fail (url != NULL, NULL); + iter = e_list_get_iterator ((EList *) config->accounts); ! while (account == NULL && e_iterator_is_valid (iter)) { ! CamelURL *account_url; account = (EAccount *) e_iterator_get (iter); e_iterator_next (iter); ! if ( !account || (account->source == NULL) || ! (account->source->url == NULL) || (*account->source->url == '\0')) { ! account = NULL; continue; + } ! account_url = camel_url_new (account->source->url, NULL); ! if (account_url == NULL) { ! account = NULL; continue; + } ! if (!mail_config_account_url_equal (url, account_url)) account = NULL; /* not a match */ ! camel_url_free (account_url); } g_object_unref (iter); + camel_url_free (url); ! return account; } EAccount * *************** *** 832,879 **** { EAccount *account = NULL; EIterator *iter; g_return_val_if_fail (transport_url != NULL, NULL); iter = e_list_get_iterator ((EList *) config->accounts); ! while (e_iterator_is_valid (iter)) { ! CamelURL *url; ! gchar *string; account = (EAccount *) e_iterator_get (iter); e_iterator_next (iter); ! if (account->transport == NULL) ! continue; ! ! else if (account->transport->url == NULL) ! continue; ! ! else if (*account->transport->url == '\0') ! continue; ! url = camel_url_new (account->transport->url, NULL); ! if (url == NULL) continue; ! /* Simplify the account URL for comparison. */ ! string = camel_url_to_string (url, CAMEL_URL_HIDE_ALL); ! if (string == NULL || strcmp (string, transport_url) != 0) account = NULL; /* not a match */ ! camel_url_free (url); ! g_free (string); ! ! if (account != NULL) { ! g_object_unref (iter); ! return account; ! } } g_object_unref (iter); ! return NULL; } int --- 846,888 ---- { EAccount *account = NULL; EIterator *iter; + CamelURL *url; g_return_val_if_fail (transport_url != NULL, NULL); + url = camel_url_new (transport_url, NULL); + g_return_val_if_fail (url != NULL, NULL); + iter = e_list_get_iterator ((EList *) config->accounts); ! while (account == NULL && e_iterator_is_valid (iter)) { ! CamelURL *account_url; account = (EAccount *) e_iterator_get (iter); e_iterator_next (iter); ! if ( !account || (account->transport == NULL) || ! (account->transport->url == NULL) || (*account->transport->url == '\0')) { ! account = NULL; ! continue; ! } ! account_url = camel_url_new (account->transport->url, NULL); ! if (account_url == NULL) { ! account = NULL; continue; + } ! if (!mail_config_account_url_equal (url, account_url)) account = NULL; /* not a match */ ! camel_url_free (account_url); } g_object_unref (iter); + camel_url_free (url); ! return account; } int