[evolution-data-server] Camel: Use thread-safe accessors for string settings.
- From: Matthew Barnes <mbarnes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server] Camel: Use thread-safe accessors for string settings.
- Date: Tue, 3 Jan 2012 19:29:05 +0000 (UTC)
commit 3c3d776c4f8a346d1c5debc89da53eb366a06e73
Author: Matthew Barnes <mbarnes redhat com>
Date: Tue Jan 3 09:25:27 2012 -0500
Camel: Use thread-safe accessors for string settings.
camel/camel-network-service.c | 6 +-
camel/camel-sasl-cram-md5.c | 6 +-
camel/camel-sasl-digest-md5.c | 27 +++--
camel/camel-sasl-gssapi.c | 34 ++++---
camel/camel-sasl-login.c | 14 ++-
camel/camel-sasl-ntlm.c | 31 ++++--
camel/camel-sasl-plain.c | 6 +-
camel/camel-service.c | 16 ++-
camel/providers/imap/camel-imap-command.c | 15 ++-
camel/providers/imap/camel-imap-folder.c | 58 ++++++----
camel/providers/imap/camel-imap-store.c | 157 ++++++++++++++++++---------
camel/providers/imapx/camel-imapx-server.c | 99 ++++++++++++------
camel/providers/imapx/camel-imapx-store.c | 24 +++--
camel/providers/local/camel-local-store.c | 110 ++++++++++++-------
camel/providers/local/camel-maildir-store.c | 116 ++++++++++++--------
camel/providers/local/camel-mbox-store.c | 35 +++----
camel/providers/local/camel-mh-store.c | 87 +++++++++-------
camel/providers/local/camel-spool-store.c | 71 ++++++++-----
camel/providers/nntp/camel-nntp-store.c | 39 +++++---
camel/providers/nntp/camel-nntp-summary.c | 12 ++-
camel/providers/pop3/camel-pop3-store.c | 130 ++++++++++++++--------
camel/providers/smtp/camel-smtp-transport.c | 89 ++++++++++------
22 files changed, 739 insertions(+), 443 deletions(-)
---
diff --git a/camel/camel-network-service.c b/camel/camel-network-service.c
index 687a387..b600c3f 100644
--- a/camel/camel-network-service.c
+++ b/camel/camel-network-service.c
@@ -45,11 +45,11 @@ network_service_connect_sync (CamelNetworkService *service,
CamelSession *session;
CamelStream *stream;
const gchar *service_name;
- const gchar *host;
guint16 default_port;
guint16 port;
gchar *socks_host;
gint socks_port;
+ gchar *host;
gint status;
session = camel_service_get_session (CAMEL_SERVICE (service));
@@ -58,7 +58,7 @@ network_service_connect_sync (CamelNetworkService *service,
network_settings = CAMEL_NETWORK_SETTINGS (settings);
method = camel_network_settings_get_security_method (network_settings);
- host = camel_network_settings_get_host (network_settings);
+ host = camel_network_settings_dup_host (network_settings);
port = camel_network_settings_get_port (network_settings);
service_name = camel_network_service_get_service_name (service, method);
@@ -114,6 +114,8 @@ network_service_connect_sync (CamelNetworkService *service,
stream = NULL;
}
+ g_free (host);
+
return stream;
}
diff --git a/camel/camel-sasl-cram-md5.c b/camel/camel-sasl-cram-md5.c
index 0b171e1..505f83f 100644
--- a/camel/camel-sasl-cram-md5.c
+++ b/camel/camel-sasl-cram-md5.c
@@ -67,11 +67,11 @@ sasl_cram_md5_challenge_sync (CamelSasl *sasl,
guint8 *digest;
gsize length;
const gchar *hex;
- const gchar *user;
const gchar *password;
GByteArray *ret = NULL;
guchar ipad[64];
guchar opad[64];
+ gchar *user;
gint i, pw_len;
/* Need to wait for the server */
@@ -84,7 +84,7 @@ sasl_cram_md5_challenge_sync (CamelSasl *sasl,
g_return_val_if_fail (CAMEL_IS_NETWORK_SETTINGS (settings), NULL);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- user = camel_network_settings_get_user (network_settings);
+ user = camel_network_settings_dup_user (network_settings);
g_return_val_if_fail (user != NULL, NULL);
password = camel_service_get_password (service);
@@ -137,6 +137,8 @@ sasl_cram_md5_challenge_sync (CamelSasl *sasl,
camel_sasl_set_authenticated (sasl, TRUE);
+ g_free (user);
+
return ret;
}
diff --git a/camel/camel-sasl-digest-md5.c b/camel/camel-sasl-digest-md5.c
index 3f01046..f36306b 100644
--- a/camel/camel-sasl-digest-md5.c
+++ b/camel/camel-sasl-digest-md5.c
@@ -813,8 +813,8 @@ sasl_digest_md5_challenge_sync (CamelSasl *sasl,
struct addrinfo *ai, hints;
const gchar *service_name;
const gchar *password;
- const gchar *host;
- const gchar *user;
+ gchar *host;
+ gchar *user;
/* Need to wait for the server */
if (!token)
@@ -827,12 +827,12 @@ sasl_digest_md5_challenge_sync (CamelSasl *sasl,
g_return_val_if_fail (CAMEL_IS_NETWORK_SETTINGS (settings), NULL);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- host = camel_network_settings_get_host (network_settings);
- user = camel_network_settings_get_user (network_settings);
+ host = camel_network_settings_dup_host (network_settings);
+ user = camel_network_settings_dup_user (network_settings);
g_return_val_if_fail (user != NULL, NULL);
if (host == NULL)
- host = "localhost";
+ host = g_strdup ("localhost");
password = camel_service_get_password (service);
g_return_val_if_fail (password != NULL, NULL);
@@ -844,7 +844,7 @@ sasl_digest_md5_challenge_sync (CamelSasl *sasl,
error, CAMEL_SERVICE_ERROR,
CAMEL_SERVICE_ERROR_CANT_AUTHENTICATE,
_("Server challenge too long (>2048 octets)"));
- return NULL;
+ goto exit;
}
tokens = g_strndup ((gchar *) token->data, token->len);
@@ -855,7 +855,7 @@ sasl_digest_md5_challenge_sync (CamelSasl *sasl,
error, CAMEL_SERVICE_ERROR,
CAMEL_SERVICE_ERROR_CANT_AUTHENTICATE,
_("Server challenge invalid\n"));
- return NULL;
+ goto exit;
}
if (priv->challenge->qop == QOP_INVALID) {
@@ -864,7 +864,7 @@ sasl_digest_md5_challenge_sync (CamelSasl *sasl,
CAMEL_SERVICE_ERROR_CANT_AUTHENTICATE,
_("Server challenge contained invalid "
"\"Quality of Protection\" token"));
- return NULL;
+ goto exit;
}
memset (&hints, 0, sizeof (hints));
@@ -897,7 +897,7 @@ sasl_digest_md5_challenge_sync (CamelSasl *sasl,
CAMEL_SERVICE_ERROR_CANT_AUTHENTICATE,
_("Server response did not contain "
"authorization data"));
- return NULL;
+ goto exit;
}
rspauth = g_new0 (struct _param, 1);
@@ -918,7 +918,7 @@ sasl_digest_md5_challenge_sync (CamelSasl *sasl,
CAMEL_SERVICE_ERROR_CANT_AUTHENTICATE,
_("Server response contained incomplete "
"authorization data"));
- return NULL;
+ goto exit;
}
compute_response (priv->response, password, FALSE, out);
@@ -931,8 +931,7 @@ sasl_digest_md5_challenge_sync (CamelSasl *sasl,
CAMEL_SERVICE_ERROR_CANT_AUTHENTICATE,
_("Server response does not match"));
camel_sasl_set_authenticated (sasl, TRUE);
-
- return NULL;
+ goto exit;
}
g_free (rspauth->name);
@@ -948,6 +947,10 @@ sasl_digest_md5_challenge_sync (CamelSasl *sasl,
priv->state++;
+exit:
+ g_free (host);
+ g_free (user);
+
return ret;
}
diff --git a/camel/camel-sasl-gssapi.c b/camel/camel-sasl-gssapi.c
index 72d6665..7f03b9c 100644
--- a/camel/camel-sasl-gssapi.c
+++ b/camel/camel-sasl-gssapi.c
@@ -280,8 +280,8 @@ sasl_gssapi_challenge_sync (CamelSasl *sasl,
gchar *str;
struct addrinfo *ai, hints;
const gchar *service_name;
- const gchar *host;
- const gchar *user;
+ gchar *host;
+ gchar *user;
priv = CAMEL_SASL_GSSAPI (sasl)->priv;
@@ -292,12 +292,12 @@ sasl_gssapi_challenge_sync (CamelSasl *sasl,
g_return_val_if_fail (CAMEL_IS_NETWORK_SETTINGS (settings), NULL);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- host = camel_network_settings_get_host (network_settings);
- user = camel_network_settings_get_user (network_settings);
+ host = camel_network_settings_dup_host (network_settings);
+ user = camel_network_settings_dup_user (network_settings);
g_return_val_if_fail (user != NULL, NULL);
if (host == NULL)
- host = "localhost";
+ host = g_strdup ("localhost");
switch (priv->state) {
case GSSAPI_STATE_INIT:
@@ -306,7 +306,7 @@ sasl_gssapi_challenge_sync (CamelSasl *sasl,
ai = camel_getaddrinfo (
host, NULL, &hints, cancellable, error);
if (ai == NULL)
- return NULL;
+ goto exit;
str = g_strdup_printf("%s %s", service_name, ai->ai_canonname);
camel_freeaddrinfo (ai);
@@ -318,7 +318,7 @@ sasl_gssapi_challenge_sync (CamelSasl *sasl,
if (major != GSS_S_COMPLETE) {
gssapi_set_exception (major, minor, error);
- return NULL;
+ goto exit;
}
input_token = GSS_C_NO_BUFFER;
@@ -331,7 +331,7 @@ sasl_gssapi_challenge_sync (CamelSasl *sasl,
error, CAMEL_SERVICE_ERROR,
CAMEL_SERVICE_ERROR_CANT_AUTHENTICATE,
_("Bad authentication response from server."));
- return NULL;
+ goto exit;
}
inbuf.value = token->data;
@@ -360,7 +360,7 @@ sasl_gssapi_challenge_sync (CamelSasl *sasl,
goto challenge;
gssapi_set_exception (major, minor, error);
- return NULL;
+ goto exit;
}
challenge = g_byte_array_new ();
@@ -375,7 +375,7 @@ sasl_gssapi_challenge_sync (CamelSasl *sasl,
error, CAMEL_SERVICE_ERROR,
CAMEL_SERVICE_ERROR_CANT_AUTHENTICATE,
_("Bad authentication response from server."));
- return NULL;
+ goto exit;
}
inbuf.value = token->data;
@@ -384,7 +384,7 @@ sasl_gssapi_challenge_sync (CamelSasl *sasl,
major = gss_unwrap (&minor, priv->ctx, &inbuf, &outbuf, &conf_state, &qop);
if (major != GSS_S_COMPLETE) {
gssapi_set_exception (major, minor, error);
- return NULL;
+ goto exit;
}
if (outbuf.length < 4) {
@@ -395,7 +395,7 @@ sasl_gssapi_challenge_sync (CamelSasl *sasl,
#ifndef HAVE_HEIMDAL_KRB5
gss_release_buffer (&minor, &outbuf);
#endif
- return NULL;
+ goto exit;
}
/* check that our desired security layer is supported */
@@ -407,7 +407,7 @@ sasl_gssapi_challenge_sync (CamelSasl *sasl,
#ifndef HAVE_HEIMDAL_KRB5
gss_release_buffer (&minor, &outbuf);
#endif
- return NULL;
+ goto exit;
}
inbuf.length = 4 + strlen (user);
@@ -424,7 +424,7 @@ sasl_gssapi_challenge_sync (CamelSasl *sasl,
if (major != GSS_S_COMPLETE) {
gssapi_set_exception (major, minor, error);
g_free (str);
- return NULL;
+ goto exit;
}
g_free (str);
@@ -440,9 +440,13 @@ sasl_gssapi_challenge_sync (CamelSasl *sasl,
camel_sasl_set_authenticated (sasl, TRUE);
break;
default:
- return NULL;
+ break;
}
+exit:
+ g_free (host);
+ g_free (user);
+
return challenge;
}
diff --git a/camel/camel-sasl-login.c b/camel/camel-sasl-login.c
index dc3889a..6d30340 100644
--- a/camel/camel-sasl-login.c
+++ b/camel/camel-sasl-login.c
@@ -65,7 +65,11 @@ sasl_login_challenge_sync (CamelSasl *sasl,
CamelService *service;
GByteArray *buf = NULL;
const gchar *password;
- const gchar *user;
+ gchar *user;
+
+ /* Need to wait for the server */
+ if (token == NULL)
+ return NULL;
priv = CAMEL_SASL_LOGIN (sasl)->priv;
@@ -75,16 +79,12 @@ sasl_login_challenge_sync (CamelSasl *sasl,
g_return_val_if_fail (CAMEL_IS_NETWORK_SETTINGS (settings), NULL);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- user = camel_network_settings_get_user (network_settings);
+ user = camel_network_settings_dup_user (network_settings);
g_return_val_if_fail (user != NULL, NULL);
password = camel_service_get_password (service);
g_return_val_if_fail (password != NULL, NULL);
- /* Need to wait for the server */
- if (!token)
- return NULL;
-
switch (priv->state) {
case LOGIN_USER:
buf = g_byte_array_new ();
@@ -105,6 +105,8 @@ sasl_login_challenge_sync (CamelSasl *sasl,
priv->state++;
+ g_free (user);
+
return buf;
}
diff --git a/camel/camel-sasl-ntlm.c b/camel/camel-sasl-ntlm.c
index 092ebde..36b6784 100644
--- a/camel/camel-sasl-ntlm.c
+++ b/camel/camel-sasl-ntlm.c
@@ -693,8 +693,9 @@ sasl_ntlm_challenge_sync (CamelSasl *sasl,
guchar nonce[8], hash[21], lm_resp[24], nt_resp[24];
GString *domain = NULL;
const gchar *password;
- const gchar *user;
+ const gchar *real_user;
const gchar *cp;
+ gchar *user = NULL;
service = camel_sasl_get_service (sasl);
@@ -702,7 +703,7 @@ sasl_ntlm_challenge_sync (CamelSasl *sasl,
g_return_val_if_fail (CAMEL_IS_NETWORK_SETTINGS (settings), NULL);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- user = camel_network_settings_get_user (network_settings);
+ user = camel_network_settings_dup_user (network_settings);
g_return_val_if_fail (user != NULL, NULL);
password = camel_service_get_password (service);
@@ -726,7 +727,7 @@ sasl_ntlm_challenge_sync (CamelSasl *sasl,
g_free (priv->type1_msg);
priv->type1_msg = NULL;
}
- return ret;
+ goto exit;
} else {
gchar *type2;
gchar *string;
@@ -749,13 +750,15 @@ sasl_ntlm_challenge_sync (CamelSasl *sasl,
g_free (string);
g_free (type2);
}
+
/* On failure, we just return an empty string. Setting the
* GError would cause the providers to abort the whole
* connection, and we want them to ask the user for a password
* and continue. */
g_object_unref (priv->helper_stream);
priv->helper_stream = NULL;
- return ret;
+
+ goto exit;
}
#endif
@@ -809,8 +812,9 @@ sasl_ntlm_challenge_sync (CamelSasl *sasl,
cp = strchr (user, '\\');
if (cp != NULL) {
domain = g_string_new_len (user, cp - user);
- user = cp + 1;
- }
+ real_user = cp + 1;
+ } else
+ real_user = user;
/* Otherwise, fall back to the domain of the server, if possible */
if (domain == NULL)
@@ -832,7 +836,7 @@ sasl_ntlm_challenge_sync (CamelSasl *sasl,
ntlm_set_string (ret, NTLM_RESPONSE_DOMAIN_OFFSET,
domain->str, domain->len);
ntlm_set_string (ret, NTLM_RESPONSE_USER_OFFSET,
- user, strlen (user));
+ real_user, strlen (real_user));
ntlm_set_string (ret, NTLM_RESPONSE_HOST_OFFSET,
"UNKNOWN", sizeof ("UNKNOWN") - 1);
ntlm_set_string (ret, NTLM_RESPONSE_LM_RESP_OFFSET,
@@ -853,6 +857,8 @@ fail:
sizeof (NTLM_REQUEST) - 1);
exit:
+ g_free (user);
+
return ret;
}
@@ -868,8 +874,8 @@ sasl_ntlm_try_empty_password_sync (CamelSasl *sasl,
CamelService *service;
CamelSaslNTLM *ntlm = CAMEL_SASL_NTLM (sasl);
CamelSaslNTLMPrivate *priv = ntlm->priv;
- const gchar *user;
const gchar *cp;
+ gchar *user;
gchar buf[1024];
gsize s;
gchar *command;
@@ -884,7 +890,7 @@ sasl_ntlm_try_empty_password_sync (CamelSasl *sasl,
g_return_val_if_fail (CAMEL_IS_NETWORK_SETTINGS (settings), FALSE);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- user = camel_network_settings_get_user (network_settings);
+ user = camel_network_settings_dup_user (network_settings);
g_return_val_if_fail (user != NULL, FALSE);
cp = strchr (user, '\\');
@@ -900,22 +906,29 @@ sasl_ntlm_try_empty_password_sync (CamelSasl *sasl,
"--use-cached-creds --username '%s'",
NTLM_AUTH_HELPER, user);
}
+
ret = camel_stream_process_connect (
CAMEL_STREAM_PROCESS (stream), command, NULL, error);
+
g_free (command);
+ g_free (user);
+
if (ret) {
g_object_unref (stream);
return FALSE;
}
+
if (camel_stream_write_string (stream, "YR\n", cancellable, error) < 0) {
g_object_unref (stream);
return FALSE;
}
+
s = camel_stream_read (stream, buf, sizeof (buf), cancellable, NULL);
if (s < 4) {
g_object_unref (stream);
return FALSE;
}
+
if (buf[0] != 'Y' || buf[1] != 'R' || buf[2] != ' ' || buf[s - 1] != '\n') {
g_object_unref (stream);
return FALSE;
diff --git a/camel/camel-sasl-plain.c b/camel/camel-sasl-plain.c
index d80682c..740629b 100644
--- a/camel/camel-sasl-plain.c
+++ b/camel/camel-sasl-plain.c
@@ -59,7 +59,7 @@ sasl_plain_challenge_sync (CamelSasl *sasl,
CamelService *service;
GByteArray *buf = NULL;
const gchar *password;
- const gchar *user;
+ gchar *user;
service = camel_sasl_get_service (sasl);
@@ -67,7 +67,7 @@ sasl_plain_challenge_sync (CamelSasl *sasl,
g_return_val_if_fail (CAMEL_IS_NETWORK_SETTINGS (settings), NULL);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- user = camel_network_settings_get_user (network_settings);
+ user = camel_network_settings_dup_user (network_settings);
g_return_val_if_fail (user != NULL, NULL);
password = camel_service_get_password (service);
@@ -82,6 +82,8 @@ sasl_plain_challenge_sync (CamelSasl *sasl,
camel_sasl_set_authenticated (sasl, TRUE);
+ g_free (user);
+
return buf;
}
diff --git a/camel/camel-service.c b/camel/camel-service.c
index 61d9929..b5e7090 100644
--- a/camel/camel-service.c
+++ b/camel/camel-service.c
@@ -746,9 +746,9 @@ camel_service_new_camel_url (CamelService *service)
CamelURL *url;
CamelProvider *provider;
CamelSettings *settings;
- const gchar *host = NULL;
- const gchar *user = NULL;
- const gchar *path = NULL;
+ gchar *host = NULL;
+ gchar *user = NULL;
+ gchar *path = NULL;
guint16 port = 0;
g_return_val_if_fail (CAMEL_IS_SERVICE (service), NULL);
@@ -765,16 +765,16 @@ camel_service_new_camel_url (CamelService *service)
CamelNetworkSettings *network_settings;
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- host = camel_network_settings_get_host (network_settings);
+ host = camel_network_settings_dup_host (network_settings);
port = camel_network_settings_get_port (network_settings);
- user = camel_network_settings_get_user (network_settings);
+ user = camel_network_settings_dup_user (network_settings);
}
if (CAMEL_IS_LOCAL_SETTINGS (settings)) {
CamelLocalSettings *local_settings;
local_settings = CAMEL_LOCAL_SETTINGS (settings);
- path = camel_local_settings_get_path (local_settings);
+ path = camel_local_settings_dup_path (local_settings);
}
camel_url_set_protocol (url, provider->protocol);
@@ -783,6 +783,10 @@ camel_service_new_camel_url (CamelService *service)
camel_url_set_user (url, user);
camel_url_set_path (url, path);
+ g_free (host);
+ g_free (user);
+ g_free (path);
+
return url;
}
diff --git a/camel/providers/imap/camel-imap-command.c b/camel/providers/imap/camel-imap-command.c
index f57547a..eb5f7d6 100644
--- a/camel/providers/imap/camel-imap-command.c
+++ b/camel/providers/imap/camel-imap-command.c
@@ -346,21 +346,22 @@ camel_imap_command_response (CamelImapStore *store,
CamelService *service;
CamelSession *session;
CamelImapResponseType type;
- const gchar *host;
- const gchar *user;
gchar *respbuf;
+ gchar *host;
+ gchar *user;
service = CAMEL_SERVICE (store);
session = camel_service_get_session (service);
settings = camel_service_get_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- host = camel_network_settings_get_host (network_settings);
- user = camel_network_settings_get_user (network_settings);
+ host = camel_network_settings_dup_host (network_settings);
+ user = camel_network_settings_dup_user (network_settings);
if (camel_imap_store_readline (store, &respbuf, cancellable, error) < 0) {
g_static_rec_mutex_unlock (&store->command_and_response_lock);
- return CAMEL_IMAP_RESPONSE_ERROR;
+ type = CAMEL_IMAP_RESPONSE_ERROR;
+ goto exit;
}
switch (*respbuf) {
@@ -439,6 +440,10 @@ camel_imap_command_response (CamelImapStore *store,
type == CAMEL_IMAP_RESPONSE_TAGGED)
g_static_rec_mutex_unlock (&store->command_and_response_lock);
+exit:
+ g_free (host);
+ g_free (user);
+
return type;
}
diff --git a/camel/providers/imap/camel-imap-folder.c b/camel/providers/imap/camel-imap-folder.c
index 05fa87c..6464872 100644
--- a/camel/providers/imap/camel-imap-folder.c
+++ b/camel/providers/imap/camel-imap-folder.c
@@ -448,29 +448,29 @@ camel_imap_folder_new (CamelStore *parent,
} else {
CamelService *service;
CamelSettings *settings;
- const gchar *junk_path;
- const gchar *trash_path;
gboolean filter_junk;
gboolean filter_junk_inbox;
gboolean folder_is_junk;
gboolean folder_is_trash;
+ gchar *junk_path;
+ gchar *trash_path;
service = CAMEL_SERVICE (parent);
settings = camel_service_get_settings (service);
- junk_path = camel_imap_settings_get_real_junk_path (
+ junk_path = camel_imap_settings_dup_real_junk_path (
CAMEL_IMAP_SETTINGS (settings));
/* So we can safely compare strings. */
if (junk_path == NULL)
- junk_path = "";
+ junk_path = g_strdup ("");
- trash_path = camel_imap_settings_get_real_trash_path (
+ trash_path = camel_imap_settings_dup_real_trash_path (
CAMEL_IMAP_SETTINGS (settings));
/* So we can safely compare strings. */
if (trash_path == NULL)
- trash_path = "";
+ trash_path = g_strdup ("");
filter_junk = camel_imap_settings_get_filter_junk (
CAMEL_IMAP_SETTINGS (settings));
@@ -493,6 +493,9 @@ camel_imap_folder_new (CamelStore *parent,
if (folder_is_junk)
folder->folder_flags |= CAMEL_FOLDER_IS_JUNK;
+
+ g_free (junk_path);
+ g_free (trash_path);
}
imap_folder->search = camel_imap_search_new (folder_dir);
@@ -1502,7 +1505,8 @@ is_google_account (CamelStore *store)
CamelNetworkSettings *network_settings;
CamelSettings *settings;
CamelService *service;
- const gchar *host;
+ gboolean is_google;
+ gchar *host;
g_return_val_if_fail (store != NULL, FALSE);
g_return_val_if_fail (CAMEL_IS_STORE (store), FALSE);
@@ -1511,11 +1515,16 @@ is_google_account (CamelStore *store)
settings = camel_service_get_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- host = camel_network_settings_get_host (network_settings);
+ host = camel_network_settings_dup_host (network_settings);
- return host != NULL && (
+ is_google =
+ (host != NULL) && (
host_ends_with (host, "gmail.com") ||
host_ends_with (host, "googlemail.com"));
+
+ g_free (host);
+
+ return is_google;
}
static void
@@ -1558,7 +1567,7 @@ imap_synchronize_sync (CamelFolder *folder,
gboolean success, is_gmail;
CamelFolder *real_junk = NULL;
CamelFolder *real_trash = NULL;
- const gchar *folder_path;
+ gchar *folder_path;
GError *local_error = NULL;
GPtrArray *matches, *summary, *deleted_uids = NULL, *junked_uids = NULL;
@@ -1594,7 +1603,7 @@ imap_synchronize_sync (CamelFolder *folder,
max = summary->len;
/* deleted_uids is NULL when not using real trash */
- folder_path = camel_imap_settings_get_real_trash_path (
+ folder_path = camel_imap_settings_dup_real_trash_path (
CAMEL_IMAP_SETTINGS (settings));
if (folder_path != NULL) {
if ((folder->folder_flags & CAMEL_FOLDER_IS_TRASH) != 0) {
@@ -1611,12 +1620,13 @@ imap_synchronize_sync (CamelFolder *folder,
}
}
}
+ g_free (folder_path);
if (real_trash)
deleted_uids = g_ptr_array_new ();
/* junked_uids is NULL when not using real junk */
- folder_path = camel_imap_settings_get_real_junk_path (
+ folder_path = camel_imap_settings_dup_real_junk_path (
CAMEL_IMAP_SETTINGS (settings));
if (folder_path != NULL) {
if ((folder->folder_flags & CAMEL_FOLDER_IS_JUNK) != 0) {
@@ -1634,6 +1644,7 @@ imap_synchronize_sync (CamelFolder *folder,
}
}
}
+ g_free (folder_path);
if (real_junk)
junked_uids = g_ptr_array_new ();
@@ -2776,12 +2787,13 @@ do_copy (CamelFolder *source,
CamelStore *parent_store;
CamelImapStore *store;
CamelImapResponse *response;
- const gchar *trash_path;
const gchar *full_name;
+ gchar *trash_path;
gchar *uidset;
gint uid = 0, last = 0, i;
GError *local_error = NULL;
gboolean mark_moved;
+ gboolean success = TRUE;
parent_store = camel_folder_get_parent_store (source);
store = CAMEL_IMAP_STORE (parent_store);
@@ -2789,7 +2801,7 @@ do_copy (CamelFolder *source,
service = CAMEL_SERVICE (parent_store);
settings = camel_service_get_settings (service);
- trash_path = camel_imap_settings_get_real_trash_path (
+ trash_path = camel_imap_settings_dup_real_trash_path (
CAMEL_IMAP_SETTINGS (settings));
mark_moved = is_google_account (parent_store) && trash_path != NULL;
@@ -2841,18 +2853,18 @@ do_copy (CamelFolder *source,
if (local_error != NULL) {
g_propagate_error (error, local_error);
- return FALSE;
- }
+ success = FALSE;
/* There is a real trash folder set, which is not on a google account
* and copied messages should be deleted, thus do not move them into
* a trash folder, but just expunge them, because the copy part of
- * the operation was successful.
- */
- if (trash_path && !mark_moved && delete_originals)
+ * the operation was successful. */
+ } else if (trash_path && !mark_moved && delete_originals)
camel_imap_expunge_uids_only (source, uids, cancellable, NULL);
- return TRUE;
+ g_free (trash_path);
+
+ return success;
}
static gboolean
@@ -3900,7 +3912,7 @@ imap_update_summary (CamelFolder *folder,
CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
GPtrArray *fetch_data = NULL, *messages = NULL, *needheaders;
CamelFetchHeadersType fetch_headers;
- const gchar * const *extra_headers;
+ gchar **extra_headers;
guint32 flags, uidval;
gint i, seq, first, size, got;
CamelImapResponseType type;
@@ -3919,7 +3931,7 @@ imap_update_summary (CamelFolder *folder,
fetch_headers = camel_imap_settings_get_fetch_headers (
CAMEL_IMAP_SETTINGS (settings));
- extra_headers = camel_imap_settings_get_fetch_headers_extra (
+ extra_headers = camel_imap_settings_dup_fetch_headers_extra (
CAMEL_IMAP_SETTINGS (settings));
if (store->server_level >= IMAP_LEVEL_IMAP4REV1) {
@@ -3951,6 +3963,8 @@ imap_update_summary (CamelFolder *folder,
} else
header_spec = g_string_new ("0");
+ g_strfreev (extra_headers);
+
d(printf("Header is : %s", header_spec->str));
/* Figure out if any of the new messages are already cached (which
diff --git a/camel/providers/imap/camel-imap-store.c b/camel/providers/imap/camel-imap-store.c
index 3e9b456..3320243 100644
--- a/camel/providers/imap/camel-imap-store.c
+++ b/camel/providers/imap/camel-imap-store.c
@@ -140,8 +140,8 @@ imap_store_update_store_flags (CamelStore *store)
CamelService *service;
CamelSettings *settings;
CamelImapSettings *imap_settings;
- const gchar *real_path;
gboolean use_real_path;
+ gchar *real_path;
/* XXX This only responds to the service's entire settings object
* being replaced, not when individual settings change. When
@@ -152,7 +152,7 @@ imap_store_update_store_flags (CamelStore *store)
settings = camel_service_get_settings (service);
imap_settings = CAMEL_IMAP_SETTINGS (settings);
- real_path = camel_imap_settings_get_real_junk_path (imap_settings);
+ real_path = camel_imap_settings_dup_real_junk_path (imap_settings);
use_real_path = camel_imap_settings_get_use_real_junk_path (imap_settings);
if (use_real_path && real_path != NULL) {
@@ -163,13 +163,17 @@ imap_store_update_store_flags (CamelStore *store)
store->flags |= CAMEL_STORE_VJUNK;
}
- real_path = camel_imap_settings_get_real_trash_path (imap_settings);
+ g_free (real_path);
+
+ real_path = camel_imap_settings_dup_real_trash_path (imap_settings);
use_real_path = camel_imap_settings_get_use_real_trash_path (imap_settings);
if (use_real_path && real_path != NULL)
store->flags &= ~CAMEL_STORE_VTRASH;
else
store->flags |= CAMEL_STORE_VTRASH;
+
+ g_free (real_path);
}
static void
@@ -286,7 +290,8 @@ connect_to_server (CamelService *service,
CamelNetworkSecurityMethod method;
gboolean force_imap4 = FALSE;
gboolean clean_quit = TRUE;
- const gchar *host;
+ gboolean success = TRUE;
+ gchar *host;
gchar *buf;
tcp_stream = camel_network_service_connect_sync (
@@ -298,7 +303,7 @@ connect_to_server (CamelService *service,
settings = camel_service_get_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- host = camel_network_settings_get_host (network_settings);
+ host = camel_network_settings_dup_host (network_settings);
method = camel_network_settings_get_security_method (network_settings);
store->ostream = tcp_stream;
@@ -331,8 +336,9 @@ connect_to_server (CamelService *service,
}
store->connected = FALSE;
+ success = FALSE;
- return FALSE;
+ goto exit;
}
if (!strncmp(buf, "* PREAUTH", 9))
@@ -381,7 +387,9 @@ connect_to_server (CamelService *service,
}
store->connected = FALSE;
- return FALSE;
+ success = FALSE;
+
+ goto exit;
}
if (force_imap4) {
@@ -390,7 +398,7 @@ connect_to_server (CamelService *service,
}
if (method != CAMEL_NETWORK_SECURITY_METHOD_STARTTLS_ON_STANDARD_PORT)
- return TRUE; /* we're done */
+ goto exit; /* we're done */
/* as soon as we send a STARTTLS command, all hope is lost of a clean QUIT if problems arise */
clean_quit = FALSE;
@@ -407,9 +415,14 @@ connect_to_server (CamelService *service,
response = camel_imap_command (store, NULL, cancellable, error, "STARTTLS");
if (!response) {
g_object_unref (store->istream);
+ store->istream = NULL;
+
g_object_unref (store->ostream);
- store->istream = store->ostream = NULL;
- return FALSE;
+ store->ostream = NULL;
+
+ success = FALSE;
+
+ goto exit;
}
camel_imap_response_free_without_processing (store, response);
@@ -438,8 +451,9 @@ connect_to_server (CamelService *service,
}
store->connected = FALSE;
+ success = FALSE;
- return FALSE;
+ goto exit;
}
if (store->capabilities & IMAP_CAPABILITY_LOGINDISABLED ) {
@@ -451,7 +465,7 @@ connect_to_server (CamelService *service,
goto exception;
}
- return TRUE;
+ goto exit;
exception:
@@ -474,7 +488,12 @@ exception:
store->connected = FALSE;
- return FALSE;
+ success = FALSE;
+
+exit:
+ g_free (host);
+
+ return success;
}
#ifndef G_OS_WIN32
@@ -499,8 +518,8 @@ connect_to_server_process (CamelService *service,
gchar *full_cmd;
gchar *child_env[7];
const gchar *password;
- const gchar *host;
- const gchar *user;
+ gchar *host;
+ gchar *user;
guint16 port;
memset (&url, 0, sizeof (CamelURL));
@@ -510,9 +529,9 @@ connect_to_server_process (CamelService *service,
settings = camel_service_get_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- host = camel_network_settings_get_host (network_settings);
+ host = camel_network_settings_dup_host (network_settings);
port = camel_network_settings_get_port (network_settings);
- user = camel_network_settings_get_user (network_settings);
+ user = camel_network_settings_dup_user (network_settings);
camel_url_set_protocol (&url, provider->protocol);
camel_url_set_host (&url, host);
@@ -580,6 +599,9 @@ connect_to_server_process (CamelService *service,
g_free (cmd_copy);
+ g_free (host);
+ g_free (user);
+
cmd_stream = camel_stream_process_new ();
ret = camel_stream_process_connect (
@@ -651,23 +673,30 @@ connect_to_server_wrapper (CamelService *service,
GCancellable *cancellable,
GError **error)
{
-#ifndef G_OS_WIN32
CamelSettings *settings;
- const gchar *shell_command;
+ gchar *shell_command;
gboolean use_shell_command;
+ gboolean success;
settings = camel_service_get_settings (service);
- shell_command = camel_imap_settings_get_shell_command (
+ shell_command = camel_imap_settings_dup_shell_command (
CAMEL_IMAP_SETTINGS (settings));
use_shell_command = camel_imap_settings_get_use_shell_command (
CAMEL_IMAP_SETTINGS (settings));
+#ifndef G_OS_WIN32
if (use_shell_command && shell_command != NULL)
- return connect_to_server_process (
+ success = connect_to_server_process (
service, shell_command, cancellable, error);
+ else
+ success = connect_to_server (service, cancellable, error);
+#else
+ success = connect_to_server (service, cancellable, error);
#endif
- return connect_to_server (service, cancellable, error);
+ g_free (shell_command);
+
+ return success;
}
static gboolean
@@ -679,21 +708,22 @@ imap_auth_loop (CamelService *service,
CamelNetworkSettings *network_settings;
CamelSettings *settings;
CamelSession *session;
- const gchar *mechanism;
- const gchar *host;
+ gchar *mechanism;
+ gchar *host;
+ gboolean success = TRUE;
session = camel_service_get_session (service);
settings = camel_service_get_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- host = camel_network_settings_get_host (network_settings);
- mechanism = camel_network_settings_get_auth_mechanism (network_settings);
+ host = camel_network_settings_dup_host (network_settings);
+ mechanism = camel_network_settings_dup_auth_mechanism (network_settings);
if (store->preauthed) {
if (camel_verbose_debug)
fprintf(stderr, "Server %s has preauthenticated us.\n",
host);
- return TRUE;
+ goto exit;
}
if (mechanism != NULL) {
@@ -703,12 +733,19 @@ imap_auth_loop (CamelService *service,
CAMEL_SERVICE_ERROR_CANT_AUTHENTICATE,
_("IMAP server %s does not support %s "
"authentication"), host, mechanism);
- return FALSE;
+ success = FALSE;
+ goto exit;
}
}
- return camel_session_authenticate_sync (
+ success = camel_session_authenticate_sync (
session, service, mechanism, cancellable, error);
+
+exit:
+ g_free (host);
+ g_free (mechanism);
+
+ return success;
}
static gboolean
@@ -757,21 +794,27 @@ imap_store_get_name (CamelService *service,
{
CamelNetworkSettings *network_settings;
CamelSettings *settings;
- const gchar *host;
- const gchar *user;
+ gchar *host;
+ gchar *user;
+ gchar *name;
settings = camel_service_get_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- host = camel_network_settings_get_host (network_settings);
- user = camel_network_settings_get_user (network_settings);
+ host = camel_network_settings_dup_host (network_settings);
+ user = camel_network_settings_dup_user (network_settings);
if (brief)
- return g_strdup_printf (
+ name = g_strdup_printf (
_("IMAP server %s"), host);
else
- return g_strdup_printf (
+ name = g_strdup_printf (
_("IMAP service for %s on %s"), user, host);
+
+ g_free (host);
+ g_free (user);
+
+ return name;
}
static gboolean
@@ -1053,13 +1096,13 @@ imap_store_authenticate_sync (CamelService *service,
CamelNetworkSettings *network_settings;
CamelSettings *settings;
const gchar *password;
- const gchar *user;
+ gchar *user;
password = camel_service_get_password (service);
settings = camel_service_get_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- user = camel_network_settings_get_user (network_settings);
+ user = camel_network_settings_dup_user (network_settings);
if (user == NULL) {
g_set_error_literal (
@@ -1074,6 +1117,7 @@ imap_store_authenticate_sync (CamelService *service,
error, CAMEL_SERVICE_ERROR,
CAMEL_SERVICE_ERROR_CANT_AUTHENTICATE,
_("Authentication password not available"));
+ g_free (user);
return CAMEL_AUTHENTICATION_ERROR;
}
@@ -1084,6 +1128,8 @@ imap_store_authenticate_sync (CamelService *service,
if (response != NULL)
camel_imap_response_free (store, response);
+ g_free (user);
+
goto exit;
}
@@ -1732,14 +1778,14 @@ imap_store_get_trash_folder_sync (CamelStore *store,
CamelService *service;
CamelSettings *settings;
CamelFolder *folder = NULL;
- const gchar *trash_path;
const gchar *user_cache_dir;
+ gchar *trash_path;
service = CAMEL_SERVICE (store);
settings = camel_service_get_settings (service);
user_cache_dir = camel_service_get_user_cache_dir (service);
- trash_path = camel_imap_settings_get_real_trash_path (
+ trash_path = camel_imap_settings_dup_real_trash_path (
CAMEL_IMAP_SETTINGS (settings));
if (trash_path != NULL) {
folder = camel_store_get_folder_sync (
@@ -1748,6 +1794,7 @@ imap_store_get_trash_folder_sync (CamelStore *store,
camel_imap_settings_set_real_trash_path (
CAMEL_IMAP_SETTINGS (settings), NULL);
}
+ g_free (trash_path);
if (folder)
return folder;
@@ -1779,14 +1826,14 @@ imap_store_get_junk_folder_sync (CamelStore *store,
CamelService *service;
CamelSettings *settings;
CamelFolder *folder = NULL;
- const gchar *junk_path;
const gchar *user_cache_dir;
+ gchar *junk_path;
service = CAMEL_SERVICE (store);
settings = camel_service_get_settings (service);
user_cache_dir = camel_service_get_user_cache_dir (service);
- junk_path = camel_imap_settings_get_real_junk_path (
+ junk_path = camel_imap_settings_dup_real_junk_path (
CAMEL_IMAP_SETTINGS (settings));
if (junk_path != NULL) {
folder = camel_store_get_folder_sync (
@@ -1795,6 +1842,7 @@ imap_store_get_junk_folder_sync (CamelStore *store,
camel_imap_settings_set_real_junk_path (
CAMEL_IMAP_SETTINGS (settings), NULL);
}
+ g_free (junk_path);
if (folder)
return folder;
@@ -2915,16 +2963,15 @@ refresh_refresh (CamelSession *session,
{
CamelService *service;
CamelSettings *settings;
- const gchar *namespace;
+ gchar *namespace;
service = CAMEL_SERVICE (store);
settings = camel_service_get_settings (service);
- namespace = camel_imap_settings_get_namespace (
+ namespace = camel_imap_settings_dup_namespace (
CAMEL_IMAP_SETTINGS (settings));
- camel_service_lock (
- CAMEL_SERVICE (store), CAMEL_SERVICE_REC_CONNECT_LOCK);
+ camel_service_lock (service, CAMEL_SERVICE_REC_CONNECT_LOCK);
if (!camel_imap_store_connected (store, error))
goto done;
@@ -2943,8 +2990,9 @@ refresh_refresh (CamelSession *session,
camel_store_summary_save (CAMEL_STORE_SUMMARY (store->summary));
done:
- camel_service_unlock (
- CAMEL_SERVICE (store), CAMEL_SERVICE_REC_CONNECT_LOCK);
+ camel_service_unlock (service, CAMEL_SERVICE_REC_CONNECT_LOCK);
+
+ g_free (namespace);
}
static CamelFolderInfo *
@@ -3065,8 +3113,8 @@ get_folder_info_offline (CamelStore *store,
gint i;
CamelImapStoreNamespace *main_ns, *ns;
gboolean use_subscriptions;
- const gchar *junk_path;
- const gchar *trash_path;
+ gchar *junk_path;
+ gchar *trash_path;
if (camel_debug("imap:folder_info"))
printf("get folder info offline\n");
@@ -3077,19 +3125,19 @@ get_folder_info_offline (CamelStore *store,
use_subscriptions = camel_imap_settings_get_use_subscriptions (
CAMEL_IMAP_SETTINGS (settings));
- junk_path = camel_imap_settings_get_real_junk_path (
+ junk_path = camel_imap_settings_dup_real_junk_path (
CAMEL_IMAP_SETTINGS (settings));
/* So we can safely compare strings. */
if (junk_path == NULL)
- junk_path = "";
+ junk_path = g_strdup ("");
- trash_path = camel_imap_settings_get_real_trash_path (
+ trash_path = camel_imap_settings_dup_real_trash_path (
CAMEL_IMAP_SETTINGS (settings));
/* So we can safely compare strings. */
if (trash_path == NULL)
- trash_path = "";
+ trash_path = g_strdup ("");
/* FIXME: obey other flags */
@@ -3189,6 +3237,9 @@ get_folder_info_offline (CamelStore *store,
g_ptr_array_free (folders, TRUE);
g_free (name);
+ g_free (junk_path);
+ g_free (trash_path);
+
return fi;
}
diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c
index 9561729..0781b64 100644
--- a/camel/providers/imapx/camel-imapx-server.c
+++ b/camel/providers/imapx/camel-imapx-server.c
@@ -3004,8 +3004,8 @@ connect_to_server_process (CamelIMAPXServer *is,
gchar *full_cmd;
gchar *child_env[7];
const gchar *password;
- const gchar *host;
- const gchar *user;
+ gchar *host;
+ gchar *user;
guint16 port;
memset (&url, 0, sizeof (CamelURL));
@@ -3017,9 +3017,9 @@ connect_to_server_process (CamelIMAPXServer *is,
g_return_val_if_fail (password != NULL, FALSE);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- host = camel_network_settings_get_host (network_settings);
+ host = camel_network_settings_dup_host (network_settings);
port = camel_network_settings_get_port (network_settings);
- user = camel_network_settings_get_user (network_settings);
+ user = camel_network_settings_dup_user (network_settings);
/* Put full details in the environment, in case the connection
* program needs them */
@@ -3086,6 +3086,9 @@ connect_to_server_process (CamelIMAPXServer *is,
g_free (cmd_copy);
+ g_free (host);
+ g_free (user);
+
cmd_stream = camel_stream_process_new ();
ret = camel_stream_process_connect (
@@ -3126,19 +3129,20 @@ imapx_connect_to_server (CamelIMAPXServer *is,
guchar *token;
gint tok;
CamelIMAPXCommand *ic;
- const gchar *host;
+ gboolean success = TRUE;
+ gchar *host;
GError *local_error = NULL;
#ifndef G_OS_WIN32
gboolean use_shell_command;
- const gchar *command = NULL;
+ gchar *shell_command = NULL;
#endif
service = CAMEL_SERVICE (is->store);
settings = camel_service_get_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- host = camel_network_settings_get_host (network_settings);
+ host = camel_network_settings_dup_host (network_settings);
method = camel_network_settings_get_security_method (network_settings);
#ifndef G_OS_WIN32
@@ -3146,22 +3150,31 @@ imapx_connect_to_server (CamelIMAPXServer *is,
CAMEL_IMAPX_SETTINGS (settings));
if (use_shell_command)
- command = camel_imapx_settings_get_shell_command (
+ shell_command = camel_imapx_settings_dup_shell_command (
CAMEL_IMAPX_SETTINGS (settings));
- if (command != NULL) {
- if (!connect_to_server_process (is, command, &local_error))
- goto exit;
- else
+ if (shell_command != NULL) {
+ gboolean success;
+
+ success = connect_to_server_process (
+ is, shell_command, &local_error);
+
+ g_free (shell_command);
+
+ if (success)
goto connected;
+ else
+ goto exit;
}
#endif
tcp_stream = camel_network_service_connect_sync (
CAMEL_NETWORK_SERVICE (is->store), cancellable, error);
- if (tcp_stream == NULL)
- return FALSE;
+ if (tcp_stream == NULL) {
+ success = FALSE;
+ goto exit;
+ }
is->stream = (CamelIMAPXStream *) camel_imapx_stream_new (tcp_stream);
g_object_unref (tcp_stream);
@@ -3185,20 +3198,25 @@ imapx_connect_to_server (CamelIMAPXServer *is,
error, G_IO_ERROR,
G_IO_ERROR_CANCELLED,
"Connection to server cancelled\n");
- return FALSE;
+ success = FALSE;
+ goto exit;
}
tok = camel_imapx_stream_token (is->stream, &token, &len, cancellable, error);
- if (tok < 0)
- return FALSE;
+ if (tok < 0) {
+ success = FALSE;
+ goto exit;
+ }
if (tok == '*') {
imapx_untagged (is, cancellable, error);
break;
}
camel_imapx_stream_ungettoken (is->stream, tok, token, len);
- if (camel_imapx_stream_text (is->stream, &token, cancellable, error))
- return FALSE;
+ if (camel_imapx_stream_text (is->stream, &token, cancellable, error)) {
+ success = FALSE;
+ goto exit;
+ }
e(is->tagprefix, "Got unexpected line before greeting: '%s'\n", token);
g_free (token);
}
@@ -3221,7 +3239,9 @@ imapx_connect_to_server (CamelIMAPXServer *is,
}
imapx_command_unref (ic);
- return FALSE;
+ success = FALSE;
+
+ goto exit;
}
imapx_command_unref (ic);
}
@@ -3307,10 +3327,12 @@ exit:
is->cinfo = NULL;
}
- return FALSE;
+ success = FALSE;
}
- return TRUE;
+ g_free (host);
+
+ return success;
}
CamelAuthenticationResult
@@ -3325,8 +3347,8 @@ camel_imapx_server_authenticate (CamelIMAPXServer *is,
CamelIMAPXCommand *ic;
CamelService *service;
CamelSasl *sasl = NULL;
- const gchar *host;
- const gchar *user;
+ gchar *host;
+ gchar *user;
g_return_val_if_fail (
CAMEL_IS_IMAPX_SERVER (is),
@@ -3336,8 +3358,8 @@ camel_imapx_server_authenticate (CamelIMAPXServer *is,
settings = camel_service_get_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- host = camel_network_settings_get_host (network_settings);
- user = camel_network_settings_get_user (network_settings);
+ host = camel_network_settings_dup_host (network_settings);
+ user = camel_network_settings_dup_user (network_settings);
if (mechanism != NULL) {
if (!g_hash_table_lookup (is->cinfo->auth_types, mechanism)) {
@@ -3346,7 +3368,8 @@ camel_imapx_server_authenticate (CamelIMAPXServer *is,
CAMEL_SERVICE_ERROR_CANT_AUTHENTICATE,
_("IMAP server %s does not support %s "
"authentication"), host, mechanism);
- return CAMEL_AUTHENTICATION_ERROR;
+ result = CAMEL_AUTHENTICATION_ERROR;
+ goto exit;
}
sasl = camel_sasl_new ("imap", mechanism, service);
@@ -3356,7 +3379,8 @@ camel_imapx_server_authenticate (CamelIMAPXServer *is,
CAMEL_SERVICE_ERROR_CANT_AUTHENTICATE,
_("No support for %s authentication"),
mechanism);
- return CAMEL_AUTHENTICATION_ERROR;
+ result = CAMEL_AUTHENTICATION_ERROR;
+ goto exit;
}
}
@@ -3374,7 +3398,8 @@ camel_imapx_server_authenticate (CamelIMAPXServer *is,
error, CAMEL_SERVICE_ERROR,
CAMEL_SERVICE_ERROR_CANT_AUTHENTICATE,
_("Cannot authenticate without a username"));
- return CAMEL_AUTHENTICATION_ERROR;
+ result = CAMEL_AUTHENTICATION_ERROR;
+ goto exit;
}
if (password == NULL) {
@@ -3382,7 +3407,8 @@ camel_imapx_server_authenticate (CamelIMAPXServer *is,
error, CAMEL_SERVICE_ERROR,
CAMEL_SERVICE_ERROR_CANT_AUTHENTICATE,
_("Authentication password not available"));
- return CAMEL_AUTHENTICATION_ERROR;
+ result = CAMEL_AUTHENTICATION_ERROR;
+ goto exit;
}
ic = imapx_command_new (
@@ -3422,6 +3448,10 @@ camel_imapx_server_authenticate (CamelIMAPXServer *is,
if (sasl != NULL)
g_object_unref (sasl);
+exit:
+ g_free (host);
+ g_free (user);
+
return result;
}
@@ -3434,7 +3464,7 @@ imapx_reconnect (CamelIMAPXServer *is,
CamelService *service;
CamelSession *session;
CamelSettings *settings;
- const gchar *mechanism;
+ gchar *mechanism;
gboolean use_idle;
gboolean use_qresync;
@@ -3442,7 +3472,7 @@ imapx_reconnect (CamelIMAPXServer *is,
session = camel_service_get_session (service);
settings = camel_service_get_settings (service);
- mechanism = camel_network_settings_get_auth_mechanism (
+ mechanism = camel_network_settings_dup_auth_mechanism (
CAMEL_NETWORK_SETTINGS (settings));
use_idle = camel_imapx_settings_get_use_idle (
@@ -3535,6 +3565,9 @@ imapx_reconnect (CamelIMAPXServer *is,
}
is->state = IMAPX_INITIALISED;
+
+ g_free (mechanism);
+
return TRUE;
exception:
@@ -3546,6 +3579,8 @@ exception:
is->cinfo = NULL;
}
+ g_free (mechanism);
+
return FALSE;
}
diff --git a/camel/providers/imapx/camel-imapx-store.c b/camel/providers/imapx/camel-imapx-store.c
index c8cb019..1cc4b1f 100644
--- a/camel/providers/imapx/camel-imapx-store.c
+++ b/camel/providers/imapx/camel-imapx-store.c
@@ -140,21 +140,27 @@ imapx_get_name (CamelService *service,
{
CamelNetworkSettings *network_settings;
CamelSettings *settings;
- const gchar *host;
- const gchar *user;
+ gchar *host;
+ gchar *user;
+ gchar *name;
settings = camel_service_get_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- host = camel_network_settings_get_host (network_settings);
- user = camel_network_settings_get_user (network_settings);
+ host = camel_network_settings_dup_host (network_settings);
+ user = camel_network_settings_dup_user (network_settings);
if (brief)
- return g_strdup_printf (
+ name = g_strdup_printf (
_("IMAP server %s"), host);
else
- return g_strdup_printf (
+ name = g_strdup_printf (
_("IMAP service for %s on %s"), user, host);
+
+ g_free (host);
+ g_free (user);
+
+ return name;
}
CamelIMAPXServer *
@@ -692,10 +698,10 @@ get_folder_info_offline (CamelStore *store,
/* get starting point */
if (top[0] == 0) {
- const gchar *namespace = NULL;
+ gchar *namespace = NULL;
if (use_namespace)
- namespace = camel_imapx_settings_get_namespace (
+ namespace = camel_imapx_settings_dup_namespace (
CAMEL_IMAPX_SETTINGS (settings));
if (namespace != NULL) {
@@ -703,6 +709,8 @@ get_folder_info_offline (CamelStore *store,
top = imapx_store->summary->namespaces->personal->path;
} else
name = g_strdup("");
+
+ g_free (namespace);
} else {
name = camel_imapx_store_summary_full_from_path (imapx_store->summary, top);
if (name == NULL)
diff --git a/camel/providers/local/camel-local-store.c b/camel/providers/local/camel-local-store.c
index 5abea16..f12560c 100644
--- a/camel/providers/local/camel-local-store.c
+++ b/camel/providers/local/camel-local-store.c
@@ -164,17 +164,22 @@ local_store_get_name (CamelService *service,
{
CamelLocalSettings *local_settings;
CamelSettings *settings;
- const gchar *path;
+ gchar *path;
+ gchar *name;
settings = camel_service_get_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
- path = camel_local_settings_get_path (local_settings);
+ path = camel_local_settings_dup_path (local_settings);
if (brief)
- return g_strdup (path);
+ name = g_strdup (path);
else
- return g_strdup_printf (_("Local mail file %s"), path);
+ name = g_strdup_printf (_("Local mail file %s"), path);
+
+ g_free (path);
+
+ return name;
}
static gboolean
@@ -196,21 +201,22 @@ local_store_get_folder_sync (CamelStore *store,
CamelLocalSettings *local_settings;
CamelSettings *settings;
CamelService *service;
- const gchar *path;
+ CamelFolder *folder = NULL;
struct stat st;
+ gchar *path;
service = CAMEL_SERVICE (store);
settings= camel_service_get_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
- path = camel_local_settings_get_path (local_settings);
+ path = camel_local_settings_dup_path (local_settings);
if (!g_path_is_absolute (path)) {
g_set_error (
error, CAMEL_STORE_ERROR,
CAMEL_STORE_ERROR_NO_FOLDER,
_("Store root %s is not an absolute path"), path);
- return NULL;
+ goto exit;
}
if (g_stat (path, &st) == 0) {
@@ -221,7 +227,8 @@ local_store_get_folder_sync (CamelStore *store,
_("Store root %s is not a regular directory"), path);
return NULL;
}
- return (CamelFolder *) 0xdeadbeef;
+ folder = (CamelFolder *) 0xdeadbeef;
+ goto exit;
}
if (errno != ENOENT
@@ -231,7 +238,7 @@ local_store_get_folder_sync (CamelStore *store,
g_io_error_from_errno (errno),
_("Cannot get folder: %s: %s"),
path, g_strerror (errno));
- return NULL;
+ goto exit;
}
/* need to create the dir heirarchy */
@@ -241,10 +248,15 @@ local_store_get_folder_sync (CamelStore *store,
g_io_error_from_errno (errno),
_("Cannot get folder: %s: %s"),
path, g_strerror (errno));
- return NULL;
+ goto exit;
}
- return (CamelFolder *) 0xdeadbeef;
+ folder = (CamelFolder *) 0xdeadbeef;
+
+exit:
+ g_free (path);
+
+ return folder;
}
static CamelFolderInfo *
@@ -344,15 +356,15 @@ local_store_create_folder_sync (CamelStore *store,
CamelService *service;
CamelFolder *folder;
CamelFolderInfo *info = NULL;
- const gchar *path;
- gchar *name;
+ gchar *name = NULL;
+ gchar *path;
struct stat st;
service = CAMEL_SERVICE (store);
settings = camel_service_get_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
- path = camel_local_settings_get_path (local_settings);
+ path = camel_local_settings_dup_path (local_settings);
/* This is a pretty hacky version of create folder, but should basically work */
@@ -361,7 +373,7 @@ local_store_create_folder_sync (CamelStore *store,
error, CAMEL_STORE_ERROR,
CAMEL_STORE_ERROR_NO_FOLDER,
_("Store root %s is not an absolute path"), path);
- return NULL;
+ goto exit;
}
if (parent_name)
@@ -375,8 +387,7 @@ local_store_create_folder_sync (CamelStore *store,
g_io_error_from_errno (errno),
_("Cannot get folder: %s: %s"),
name, g_strerror (errno));
- g_free (name);
- return NULL;
+ goto exit;
}
g_free (name);
@@ -394,7 +405,9 @@ local_store_create_folder_sync (CamelStore *store,
store, name, 0, cancellable, error);
}
+exit:
g_free (name);
+ g_free (path);
return info;
}
@@ -411,32 +424,33 @@ local_store_delete_folder_sync (CamelStore *store,
CamelService *service;
CamelFolderInfo *fi;
CamelFolder *lf;
- const gchar *path;
+ gchar *str = NULL;
gchar *name;
- gchar *str;
+ gchar *path;
+ gboolean success = TRUE;
service = CAMEL_SERVICE (store);
settings = camel_service_get_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
- path = camel_local_settings_get_path (local_settings);
+ path = camel_local_settings_dup_path (local_settings);
/* remove metadata only */
name = g_build_filename (path, folder_name, NULL);
- str = g_strdup_printf("%s.ibex", name);
+ str = g_strdup_printf ("%s.ibex", name);
if (camel_text_index_remove (str) == -1 && errno != ENOENT && errno != ENOTDIR) {
g_set_error (
error, G_IO_ERROR,
g_io_error_from_errno (errno),
_("Could not delete folder index file '%s': %s"),
str, g_strerror (errno));
- g_free (str);
- g_free (name);
- return FALSE;
+ success = FALSE;
+ goto exit;
}
- g_free (str);
+ g_free (str);
str = NULL;
+
if ((lf = camel_store_get_folder_sync (store, folder_name, 0, cancellable, NULL))) {
CamelObject *object = CAMEL_OBJECT (lf);
const gchar *state_filename;
@@ -458,14 +472,10 @@ local_store_delete_folder_sync (CamelStore *store,
g_io_error_from_errno (errno),
_("Could not delete folder meta file '%s': %s"),
str, g_strerror (errno));
- g_free (name);
- g_free (str);
- return FALSE;
+ success = FALSE;
+ goto exit;
}
- g_free (str);
- g_free (name);
-
fi = camel_folder_info_new ();
fi->full_name = g_strdup (folder_name);
fi->display_name = g_path_get_basename (folder_name);
@@ -474,7 +484,12 @@ local_store_delete_folder_sync (CamelStore *store,
camel_store_folder_deleted (store, fi);
camel_folder_info_free (fi);
- return TRUE;
+exit:
+ g_free (name);
+ g_free (path);
+ g_free (str);
+
+ return success;
}
/* default implementation, rename all */
@@ -489,17 +504,18 @@ local_store_rename_folder_sync (CamelStore *store,
CamelLocalSettings *local_settings;
CamelSettings *settings;
CamelService *service;
- const gchar *path;
gchar *old_basename;
gchar *new_basename;
gchar *newibex;
gchar *oldibex;
+ gchar *path;
+ gboolean success = TRUE;
service = CAMEL_SERVICE (store);
settings = camel_service_get_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
- path = camel_local_settings_get_path (local_settings);
+ path = camel_local_settings_dup_path (local_settings);
old_basename = g_strdup_printf ("%s.ibex", old);
new_basename = g_strdup_printf ("%s.ibex", new);
@@ -542,7 +558,7 @@ local_store_rename_folder_sync (CamelStore *store,
if (folder)
g_object_unref (folder);
- return TRUE;
+ goto exit;
/* The (f)utility of this recovery effort is quesitonable */
@@ -571,7 +587,12 @@ ibex_failed:
if (folder)
g_object_unref (folder);
- return FALSE;
+ success = FALSE;
+
+exit:
+ g_free (path);
+
+ return success;
}
static gchar *
@@ -581,15 +602,20 @@ local_store_get_full_path (CamelLocalStore *ls,
CamelLocalSettings *local_settings;
CamelSettings *settings;
CamelService *service;
- const gchar *path;
+ gchar *filename;
+ gchar *path;
service = CAMEL_SERVICE (ls);
settings = camel_service_get_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
- path = camel_local_settings_get_path (local_settings);
+ path = camel_local_settings_dup_path (local_settings);
+
+ filename = g_build_filename (path, full_name, NULL);
- return g_build_filename (path, full_name, NULL);
+ g_free (path);
+
+ return filename;
}
static gchar *
@@ -600,20 +626,22 @@ local_store_get_meta_path (CamelLocalStore *ls,
CamelLocalSettings *local_settings;
CamelSettings *settings;
CamelService *service;
- const gchar *path;
gchar *basename;
gchar *filename;
+ gchar *path;
service = CAMEL_SERVICE (ls);
settings = camel_service_get_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
- path = camel_local_settings_get_path (local_settings);
+ path = camel_local_settings_dup_path (local_settings);
basename = g_strconcat (full_name, ext, NULL);
filename = g_build_filename (path, basename, NULL);
g_free (basename);
+ g_free (path);
+
return filename;
}
diff --git a/camel/providers/local/camel-maildir-store.c b/camel/providers/local/camel-maildir-store.c
index 03b0925..097a185 100644
--- a/camel/providers/local/camel-maildir-store.c
+++ b/camel/providers/local/camel-maildir-store.c
@@ -82,8 +82,8 @@ maildir_store_create_folder_sync (CamelStore *store,
CamelService *service;
CamelFolder *folder;
CamelFolderInfo *info = NULL;
- const gchar *path;
- gchar *name;
+ gchar *name = NULL;
+ gchar *path;
struct stat st;
/* This is a pretty hacky version of create folder, but should basically work */
@@ -92,23 +92,24 @@ maildir_store_create_folder_sync (CamelStore *store,
settings = camel_service_get_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
- path = camel_local_settings_get_path (local_settings);
+ path = camel_local_settings_dup_path (local_settings);
if (!g_path_is_absolute (path)) {
g_set_error (
error, CAMEL_STORE_ERROR,
CAMEL_STORE_ERROR_NO_FOLDER,
_("Store root %s is not an absolute path"), path);
- return NULL;
+ goto exit;
}
if (g_strstr_len (folder_name, -1, ".")) {
g_set_error (
error, CAMEL_STORE_ERROR,
CAMEL_STORE_ERROR_NO_FOLDER,
- _("Cannot create folder: %s : Folder name cannot contain a dot"), folder_name);
- return NULL;
-
+ _("Cannot create folder: %s: "
+ "Folder name cannot contain a dot"),
+ folder_name);
+ goto exit;
}
if (!g_ascii_strcasecmp (folder_name, "Inbox")) {
@@ -116,7 +117,7 @@ maildir_store_create_folder_sync (CamelStore *store,
error, CAMEL_STORE_ERROR,
CAMEL_STORE_ERROR_NO_FOLDER,
_("Folder %s already exists"), folder_name);
- return NULL;
+ goto exit;
}
if (parent_name && *parent_name) {
@@ -132,25 +133,28 @@ maildir_store_create_folder_sync (CamelStore *store,
g_io_error_from_errno (errno),
_("Cannot get folder: %s: %s"),
name, g_strerror (errno));
- g_free (name);
- return NULL;
+ goto exit;
}
g_free (name);
+ name = NULL;
if (parent_name && *parent_name)
name = g_strdup_printf("%s/%s", parent_name, folder_name);
else
name = g_strdup_printf("%s", folder_name);
- folder = maildir_store_get_folder_sync (store, name, CAMEL_STORE_FOLDER_CREATE, cancellable, error);
+ folder = maildir_store_get_folder_sync (
+ store, name, CAMEL_STORE_FOLDER_CREATE, cancellable, error);
if (folder) {
g_object_unref (folder);
info = CAMEL_STORE_GET_CLASS (store)->get_folder_info_sync (
store, name, 0, cancellable, error);
}
+exit:
g_free (name);
+ g_free (path);
return info;
}
@@ -166,8 +170,8 @@ maildir_store_get_folder_sync (CamelStore *store,
CamelLocalSettings *local_settings;
CamelSettings *settings;
CamelService *service;
- const gchar *path;
gchar *name, *tmp, *cur, *new, *dir_name;
+ gchar *path;
struct stat st;
CamelFolder *folder = NULL;
@@ -175,25 +179,27 @@ maildir_store_get_folder_sync (CamelStore *store,
settings = camel_service_get_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
- path = camel_local_settings_get_path (local_settings);
+ path = camel_local_settings_dup_path (local_settings);
folder_name = md_canon_name (folder_name);
dir_name = maildir_full_name_to_dir_name (folder_name);
+ /* maildir++ directory names start with a '.' */
+ name = g_build_filename (path, dir_name, NULL);
+
+ g_free (dir_name);
+ g_free (path);
+
/* Chain up to parent's get_folder() method. */
store_class = CAMEL_STORE_CLASS (camel_maildir_store_parent_class);
if (!store_class->get_folder_sync (store, dir_name, flags, cancellable, error)) {
- g_free (dir_name);
+ g_free (name);
return NULL;
}
- /* maildir++ directory names start with a '.' */
- name = g_build_filename (path, dir_name, NULL);
- g_free (dir_name);
-
- tmp = g_strdup_printf("%s/tmp", name);
- cur = g_strdup_printf("%s/cur", name);
- new = g_strdup_printf("%s/new", name);
+ tmp = g_strdup_printf ("%s/tmp", name);
+ cur = g_strdup_printf ("%s/cur", name);
+ new = g_strdup_printf ("%s/new", name);
if (!g_ascii_strcasecmp (folder_name, "Inbox")) {
/* special case "." (aka inbox), may need to be created */
@@ -282,17 +288,11 @@ maildir_store_delete_folder_sync (CamelStore *store,
CamelLocalSettings *local_settings;
CamelSettings *settings;
CamelService *service;
- const gchar *path;
gchar *name, *tmp, *cur, *new, *dir_name;
+ gchar *path;
struct stat st;
gboolean success = TRUE;
- service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
-
- local_settings = CAMEL_LOCAL_SETTINGS (settings);
- path = camel_local_settings_get_path (local_settings);
-
if (g_ascii_strcasecmp (folder_name, "Inbox") == 0) {
g_set_error (
error, CAMEL_STORE_ERROR,
@@ -302,14 +302,22 @@ maildir_store_delete_folder_sync (CamelStore *store,
return FALSE;
}
+ service = CAMEL_SERVICE (store);
+ settings = camel_service_get_settings (service);
+
+ local_settings = CAMEL_LOCAL_SETTINGS (settings);
+ path = camel_local_settings_dup_path (local_settings);
+
/* maildir++ directory names start with a '.' */
dir_name = maildir_full_name_to_dir_name (folder_name);
name = g_build_filename (path, dir_name, NULL);
g_free (dir_name);
- tmp = g_strdup_printf("%s/tmp", name);
- cur = g_strdup_printf("%s/cur", name);
- new = g_strdup_printf("%s/new", name);
+ g_free (path);
+
+ tmp = g_strdup_printf ("%s/tmp", name);
+ cur = g_strdup_printf ("%s/cur", name);
+ new = g_strdup_printf ("%s/new", name);
if (g_stat (name, &st) == -1 || !S_ISDIR (st.st_mode)
|| g_stat (tmp, &st) == -1 || !S_ISDIR (st.st_mode)
@@ -399,13 +407,13 @@ fill_fi (CamelStore *store,
CamelService *service;
gchar *folderpath, *dir_name;
CamelFolderSummary *s;
- const gchar *root;
+ gchar *root;
service = CAMEL_SERVICE (store);
settings = camel_service_get_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
- root = camel_local_settings_get_path (local_settings);
+ root = camel_local_settings_dup_path (local_settings);
/* This should be fast enough not to have to test for INFO_FAST */
dir_name = maildir_full_name_to_dir_name (fi->full_name);
@@ -415,6 +423,8 @@ fill_fi (CamelStore *store,
else
folderpath = g_build_filename (root, dir_name, NULL);
+ g_free (root);
+
s = (CamelFolderSummary *) camel_maildir_summary_new (NULL, folderpath, NULL);
if (camel_folder_summary_header_load_from_db (s, store, fi->full_name, NULL)) {
fi->unread = camel_folder_summary_get_unread_count (s);
@@ -443,14 +453,14 @@ scan_fi (CamelStore *store,
CamelService *service;
CamelFolderInfo *fi;
gchar *tmp, *cur, *new, *dir_name;
- const gchar *path;
+ gchar *path;
struct stat st;
service = CAMEL_SERVICE (store);
settings = camel_service_get_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
- path = camel_local_settings_get_path (local_settings);
+ path = camel_local_settings_dup_path (local_settings);
g_return_val_if_fail (path != NULL, NULL);
fi = camel_folder_info_new ();
@@ -483,6 +493,8 @@ scan_fi (CamelStore *store,
fill_fi (store, fi, flags, cancellable);
+ g_free (path);
+
return fi;
}
@@ -531,18 +543,18 @@ scan_dirs (CamelStore *store,
CamelLocalSettings *local_settings;
CamelSettings *settings;
CamelService *service;
- const gchar *path;
GPtrArray *folders;
gint res = -1;
DIR *dir;
struct dirent *d;
gchar *meta_path = NULL;
+ gchar *path;
service = CAMEL_SERVICE (store);
settings = camel_service_get_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
- path = camel_local_settings_get_path (local_settings);
+ path = camel_local_settings_dup_path (local_settings);
g_return_val_if_fail (path != NULL, -1);
folders = g_ptr_array_new ();
@@ -556,7 +568,7 @@ scan_dirs (CamelStore *store,
g_io_error_from_errno (errno),
_("Could not scan folder '%s': %s"),
path, g_strerror (errno));
- goto fail;
+ goto exit;
}
meta_path = maildir_get_meta_path ((CamelLocalStore *) store, ".", "maildir++");
@@ -628,9 +640,11 @@ scan_dirs (CamelStore *store,
} else
res = -1;
-fail:
+exit:
g_ptr_array_free (folders, TRUE);
+ g_free (path);
+
return res;
}
@@ -826,20 +840,22 @@ maildir_get_full_path (CamelLocalStore *ls,
CamelLocalSettings *local_settings;
CamelSettings *settings;
CamelService *service;
- const gchar *path;
gchar *filename;
gchar *dir_name;
+ gchar *path;
service = CAMEL_SERVICE (ls);
settings = camel_service_get_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
- path = camel_local_settings_get_path (local_settings);
+ path = camel_local_settings_dup_path (local_settings);
dir_name = maildir_full_name_to_dir_name (full_name);
filename = g_build_filename (path, dir_name, NULL);
g_free (dir_name);
+ g_free (path);
+
return filename;
}
@@ -851,16 +867,16 @@ maildir_get_meta_path (CamelLocalStore *ls,
CamelLocalSettings *local_settings;
CamelSettings *settings;
CamelService *service;
- const gchar *path;
gchar *filename;
gchar *dir_name;
+ gchar *path;
gchar *tmp;
service = CAMEL_SERVICE (ls);
settings = camel_service_get_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
- path = camel_local_settings_get_path (local_settings);
+ path = camel_local_settings_dup_path (local_settings);
dir_name = maildir_full_name_to_dir_name (full_name);
tmp = g_build_filename (path, dir_name, NULL);
@@ -868,6 +884,8 @@ maildir_get_meta_path (CamelLocalStore *ls,
g_free (tmp);
g_free (dir_name);
+ g_free (path);
+
return filename;
}
@@ -912,7 +930,7 @@ scan_old_dir_info (CamelStore *store,
CamelService *service;
CamelDList queue = CAMEL_DLIST_INITIALISER (queue);
struct _scan_node *sn;
- const gchar *path;
+ gchar *path;
gchar *tmp;
GHashTable *visited;
struct stat st;
@@ -922,7 +940,7 @@ scan_old_dir_info (CamelStore *store,
settings = camel_service_get_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
- path = camel_local_settings_get_path (local_settings);
+ path = camel_local_settings_dup_path (local_settings);
visited = g_hash_table_new (scan_hash, scan_equal);
@@ -954,8 +972,7 @@ scan_old_dir_info (CamelStore *store,
g_io_error_from_errno (errno),
_("Could not scan folder '%s': %s"),
path, g_strerror (errno));
-
- goto fail;
+ goto exit;
}
while ((d = readdir (dir))) {
@@ -1008,10 +1025,13 @@ scan_old_dir_info (CamelStore *store,
}
res = 0;
-fail:
+
+exit:
g_hash_table_foreach (visited, scan_free, NULL);
g_hash_table_destroy (visited);
+ g_free (path);
+
return res;
}
diff --git a/camel/providers/local/camel-mbox-store.c b/camel/providers/local/camel-mbox-store.c
index 7d5c2d3..1004cc8 100644
--- a/camel/providers/local/camel-mbox-store.c
+++ b/camel/providers/local/camel-mbox-store.c
@@ -527,8 +527,10 @@ mbox_store_create_folder_sync (CamelStore *store,
CamelFolderInfo *info = NULL;
CamelSettings *settings;
CamelService *service;
- const gchar *root_path;
- gchar *path, *name, *dir;
+ gchar *root_path = NULL;
+ gchar *name = NULL;
+ gchar *path = NULL;
+ gchar *dir;
CamelFolder *folder;
struct stat st;
@@ -536,7 +538,7 @@ mbox_store_create_folder_sync (CamelStore *store,
settings = camel_service_get_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
- root_path = camel_local_settings_get_path (local_settings);
+ root_path = camel_local_settings_dup_path (local_settings);
local_store = CAMEL_LOCAL_STORE (store);
@@ -546,14 +548,14 @@ mbox_store_create_folder_sync (CamelStore *store,
CAMEL_STORE_ERROR_NO_FOLDER,
_("Store root %s is not an absolute path"),
root_path);
- return NULL;
+ goto exit;
}
if (folder_name[0] == '.' || ignore_file (folder_name, TRUE)) {
g_set_error (
error, CAMEL_ERROR, CAMEL_ERROR_GENERIC,
_("Cannot create a folder by this name."));
- return NULL;
+ goto exit;
}
if (parent_name && *parent_name)
@@ -570,12 +572,8 @@ mbox_store_create_folder_sync (CamelStore *store,
g_io_error_from_errno (errno),
_("Cannot create directory '%s': %s."),
dir, g_strerror (errno));
-
- g_free (path);
- g_free (name);
g_free (dir);
-
- return NULL;
+ goto exit;
}
g_free (dir);
@@ -587,15 +585,9 @@ mbox_store_create_folder_sync (CamelStore *store,
_("Cannot create folder: %s: %s"),
path, errno ? g_strerror (errno) :
_("Folder already exists"));
-
- g_free (path);
- g_free (name);
-
- return NULL;
+ goto exit;
}
- g_free (path);
-
folder = CAMEL_STORE_GET_CLASS (store)->get_folder_sync (
store, name, CAMEL_STORE_FOLDER_CREATE, cancellable, error);
if (folder) {
@@ -604,7 +596,10 @@ mbox_store_create_folder_sync (CamelStore *store,
store, name, 0, cancellable, error);
}
+exit:
+ g_free (root_path);
g_free (name);
+ g_free (path);
return info;
}
@@ -904,15 +899,15 @@ mbox_store_get_full_path (CamelLocalStore *ls,
CamelSettings *settings;
CamelService *service;
const gchar *inptr = full_name;
- const gchar *root_path;
gint subdirs = 0;
+ gchar *root_path;
gchar *path, *p;
service = CAMEL_SERVICE (ls);
settings = camel_service_get_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
- root_path = camel_local_settings_get_path (local_settings);
+ root_path = camel_local_settings_dup_path (local_settings);
g_return_val_if_fail (root_path != NULL, NULL);
while (*inptr != '\0') {
@@ -924,6 +919,8 @@ mbox_store_get_full_path (CamelLocalStore *ls,
path = g_malloc (strlen (root_path) + (inptr - full_name) + (4 * subdirs) + 1);
p = g_stpcpy (path, root_path);
+ g_free (root_path);
+
inptr = full_name;
while (*inptr != '\0') {
while (!G_IS_DIR_SEPARATOR (*inptr) && *inptr != '\0')
diff --git a/camel/providers/local/camel-mh-store.c b/camel/providers/local/camel-mh-store.c
index a6d773d..acdb963 100644
--- a/camel/providers/local/camel-mh-store.c
+++ b/camel/providers/local/camel-mh-store.c
@@ -204,21 +204,22 @@ fill_fi (CamelStore *store,
CamelLocalSettings *local_settings;
CamelSettings *settings;
CamelService *service;
- gchar *folderpath;
CamelFolderSummary *s;
- const gchar *path;
+ gchar *folderpath;
+ gchar *path;
service = CAMEL_SERVICE (store);
settings = camel_service_get_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
- path = camel_local_settings_get_path (local_settings);
+ path = camel_local_settings_dup_path (local_settings);
/* This should be fast enough not to have to test for INFO_FAST */
- /* We could: if we have no folder, and FAST isn't specified, perform a full
- * scan of all messages for their status flags. But its probably not worth
- * it as we need to read the top of every file, i.e. very very slow */
+ /* We could: if we have no folder, and FAST isn't specified,
+ * perform a full scan of all messages for their status flags.
+ * But its probably not worth it as we need to read the top of
+ * every file, i.e. very very slow */
folderpath = g_strdup_printf ("%s/%s", path, fi->full_name);
s = (CamelFolderSummary *) camel_mh_summary_new (
@@ -230,6 +231,8 @@ fill_fi (CamelStore *store,
}
g_object_unref (s);
g_free (folderpath);
+
+ g_free (path);
}
if (camel_local_store_is_main_store (local_store) && fi->full_name
@@ -482,26 +485,27 @@ mh_store_get_folder_sync (CamelStore *store,
CamelLocalSettings *local_settings;
CamelSettings *settings;
CamelService *service;
+ CamelFolder *folder = NULL;
gboolean use_dot_folders;
- const gchar *path;
- gchar *name;
struct stat st;
+ gchar *name;
+ gchar *path;
+
+ /* Chain up to parent's get_folder() method. */
+ store_class = CAMEL_STORE_CLASS (camel_mh_store_parent_class);
+ if (store_class->get_folder_sync (
+ store, folder_name, flags, cancellable, error) == NULL)
+ return NULL;
service = CAMEL_SERVICE (store);
settings = camel_service_get_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
- path = camel_local_settings_get_path (local_settings);
+ path = camel_local_settings_dup_path (local_settings);
use_dot_folders = camel_mh_settings_get_use_dot_folders (
CAMEL_MH_SETTINGS (settings));
- /* Chain up to parent's get_folder() method. */
- store_class = CAMEL_STORE_CLASS (camel_mh_store_parent_class);
- if (store_class->get_folder_sync (
- store, folder_name, flags, cancellable, error) == NULL)
- return NULL;
-
name = g_build_filename (path, folder_name, NULL);
if (g_stat (name, &st) == -1) {
@@ -511,9 +515,9 @@ mh_store_get_folder_sync (CamelStore *store,
g_io_error_from_errno (errno),
_("Cannot get folder '%s': %s"),
folder_name, g_strerror (errno));
- g_free (name);
- return NULL;
+ goto exit;
}
+
if ((flags & CAMEL_STORE_FOLDER_CREATE) == 0) {
g_set_error (
error, CAMEL_STORE_ERROR,
@@ -521,8 +525,7 @@ mh_store_get_folder_sync (CamelStore *store,
_("Cannot get folder '%s': "
"folder does not exist."),
folder_name);
- g_free (name);
- return NULL;
+ goto exit;
}
if (g_mkdir (name, 0777) != 0) {
@@ -531,8 +534,7 @@ mh_store_get_folder_sync (CamelStore *store,
g_io_error_from_errno (errno),
_("Could not create folder '%s': %s"),
folder_name, g_strerror (errno));
- g_free (name);
- return NULL;
+ goto exit;
}
/* add to .folders if we are supposed to */
@@ -548,22 +550,24 @@ mh_store_get_folder_sync (CamelStore *store,
CAMEL_STORE_ERROR_NO_FOLDER,
_("Cannot get folder '%s': not a directory."),
folder_name);
- g_free (name);
- return NULL;
+ goto exit;
} else if (flags & CAMEL_STORE_FOLDER_EXCL) {
g_set_error (
error, CAMEL_ERROR, CAMEL_ERROR_GENERIC,
_("Cannot create folder '%s': folder exists."),
folder_name);
- g_free (name);
- return NULL;
+ goto exit;
}
+ folder = camel_mh_folder_new (
+ store, folder_name, flags, cancellable, error);
+
+exit:
g_free (name);
+ g_free (path);
- return camel_mh_folder_new (
- store, folder_name, flags, cancellable, error);
+ return folder;
}
static CamelFolderInfo *
@@ -578,13 +582,13 @@ mh_store_get_folder_info_sync (CamelStore *store,
CamelSettings *settings;
CamelFolderInfo *fi = NULL;
gboolean use_dot_folders;
- const gchar *path;
+ gchar *path;
service = CAMEL_SERVICE (store);
settings = camel_service_get_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
- path = camel_local_settings_get_path (local_settings);
+ path = camel_local_settings_dup_path (local_settings);
use_dot_folders = camel_mh_settings_get_use_dot_folders (
CAMEL_MH_SETTINGS (settings));
@@ -620,6 +624,8 @@ mh_store_get_folder_info_sync (CamelStore *store,
g_hash_table_destroy (visited);
}
+ g_free (path);
+
return fi;
}
@@ -643,14 +649,14 @@ mh_store_delete_folder_sync (CamelStore *store,
CamelSettings *settings;
CamelService *service;
gboolean use_dot_folders;
- const gchar *path;
gchar *name;
+ gchar *path;
service = CAMEL_SERVICE (store);
settings = camel_service_get_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
- path = camel_local_settings_get_path (local_settings);
+ path = camel_local_settings_dup_path (local_settings);
use_dot_folders = camel_mh_settings_get_use_dot_folders (
CAMEL_MH_SETTINGS (settings));
@@ -664,6 +670,7 @@ mh_store_delete_folder_sync (CamelStore *store,
_("Could not delete folder '%s': %s"),
folder_name, g_strerror (errno));
g_free (name);
+ g_free (path);
return FALSE;
}
g_free (name);
@@ -674,6 +681,8 @@ mh_store_delete_folder_sync (CamelStore *store,
path, UPDATE_REMOVE, folder_name,
NULL, cancellable);
+ g_free (path);
+
/* Chain up to parent's delete_folder() method. */
store_class = CAMEL_STORE_CLASS (camel_mh_store_parent_class);
return store_class->delete_folder_sync (
@@ -692,30 +701,32 @@ mh_store_rename_folder_sync (CamelStore *store,
CamelSettings *settings;
CamelService *service;
gboolean use_dot_folders;
- const gchar *path;
+ gboolean success;
+ gchar *path;
service = CAMEL_SERVICE (store);
settings = camel_service_get_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
- path = camel_local_settings_get_path (local_settings);
+ path = camel_local_settings_dup_path (local_settings);
use_dot_folders = camel_mh_settings_get_use_dot_folders (
CAMEL_MH_SETTINGS (settings));
/* Chain up to parent's rename_folder() method. */
store_class = CAMEL_STORE_CLASS (camel_mh_store_parent_class);
- if (!store_class->rename_folder_sync (
- store, old, new, cancellable, error))
- return FALSE;
+ success = store_class->rename_folder_sync (
+ store, old, new, cancellable, error);
- if (use_dot_folders) {
+ if (success && use_dot_folders) {
/* yeah this is messy, but so is mh! */
folders_update (
path, UPDATE_RENAME, old, new, cancellable);
}
- return TRUE;
+ g_free (path);
+
+ return success;
}
static void
diff --git a/camel/providers/local/camel-spool-store.c b/camel/providers/local/camel-spool-store.c
index d016059..38fcf3e 100644
--- a/camel/providers/local/camel-spool-store.c
+++ b/camel/providers/local/camel-spool-store.c
@@ -67,14 +67,15 @@ spool_store_get_type (CamelSpoolStore *spool_store,
CamelLocalSettings *local_settings;
CamelSettings *settings;
CamelService *service;
- const gchar *path;
+ camel_spool_store_t type;
struct stat st;
+ gchar *path;
service = CAMEL_SERVICE (spool_store);
settings = camel_service_get_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
- path = camel_local_settings_get_path (local_settings);
+ path = camel_local_settings_dup_path (local_settings);
/* Check the path for validity while we have the opportunity. */
@@ -84,30 +85,34 @@ spool_store_get_type (CamelSpoolStore *spool_store,
CAMEL_STORE_ERROR_NO_FOLDER,
_("Store root %s is not an absolute path"),
(path != NULL) ? path : "(null)");
- return CAMEL_SPOOL_STORE_INVALID;
- }
+ type = CAMEL_SPOOL_STORE_INVALID;
- if (g_stat (path, &st) == -1) {
+ } else if (g_stat (path, &st) == -1) {
g_set_error (
error, G_IO_ERROR,
g_io_error_from_errno (errno),
_("Spool '%s' cannot be opened: %s"),
path, g_strerror (errno));
- return CAMEL_SPOOL_STORE_INVALID;
- }
+ type = CAMEL_SPOOL_STORE_INVALID;
- if (S_ISREG (st.st_mode))
- return CAMEL_SPOOL_STORE_MBOX;
+ } else if (S_ISREG (st.st_mode)) {
+ type = CAMEL_SPOOL_STORE_MBOX;
- if (S_ISDIR (st.st_mode))
- return CAMEL_SPOOL_STORE_ELM;
+ } else if (S_ISDIR (st.st_mode)) {
+ type = CAMEL_SPOOL_STORE_ELM;
- g_set_error (
- error, CAMEL_STORE_ERROR,
- CAMEL_STORE_ERROR_NO_FOLDER,
- _("Spool '%s' is not a regular file or directory"), path);
+ } else {
+ g_set_error (
+ error, CAMEL_STORE_ERROR,
+ CAMEL_STORE_ERROR_NO_FOLDER,
+ _("Spool '%s' is not a regular file or directory"),
+ path);
+ type = CAMEL_SPOOL_STORE_INVALID;
+ }
- return CAMEL_SPOOL_STORE_INVALID;
+ g_free (path);
+
+ return type;
}
/* partially copied from mbox */
@@ -338,17 +343,19 @@ get_folder_info_elm (CamelStore *store,
CamelService *service;
CamelFolderInfo *fi = NULL;
GHashTable *visited;
- const gchar *path;
-
- visited = g_hash_table_new (inode_hash, inode_equal);
+ gchar *path;
service = CAMEL_SERVICE (store);
settings = camel_service_get_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
- path = camel_local_settings_get_path (local_settings);
+ path = camel_local_settings_dup_path (local_settings);
+
+ visited = g_hash_table_new (inode_hash, inode_equal);
- if (scan_dir (store, visited, path, top, flags, NULL, &fi, cancellable, error) == -1 && fi != NULL) {
+ if (scan_dir (
+ store, visited, path, top, flags,
+ NULL, &fi, cancellable, error) == -1 && fi != NULL) {
camel_store_free_folder_info_full (store, fi);
fi = NULL;
}
@@ -356,6 +363,8 @@ get_folder_info_elm (CamelStore *store,
g_hash_table_foreach (visited, inode_free, NULL);
g_hash_table_destroy (visited);
+ g_free (path);
+
return fi;
}
@@ -389,17 +398,17 @@ spool_store_get_name (CamelService *service,
CamelLocalSettings *local_settings;
CamelSpoolStore *spool_store;
CamelSettings *settings;
- const gchar *path;
gchar *name;
+ gchar *path;
spool_store = CAMEL_SPOOL_STORE (service);
settings = camel_service_get_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
- path = camel_local_settings_get_path (local_settings);
+ path = camel_local_settings_dup_path (local_settings);
if (brief)
- return g_strdup (path);
+ return path;
switch (spool_store_get_type (spool_store, NULL)) {
case CAMEL_SPOOL_STORE_MBOX:
@@ -415,6 +424,8 @@ spool_store_get_name (CamelService *service,
break;
}
+ g_free (path);
+
return name;
}
@@ -443,8 +454,8 @@ spool_store_get_folder_sync (CamelStore *store,
CamelFolder *folder = NULL;
camel_spool_store_t type;
struct stat st;
- const gchar *path;
gchar *name;
+ gchar *path;
d(printf("opening folder %s on path %s\n", folder_name, path));
@@ -458,7 +469,7 @@ spool_store_get_folder_sync (CamelStore *store,
settings = camel_service_get_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
- path = camel_local_settings_get_path (local_settings);
+ path = camel_local_settings_dup_path (local_settings);
/* we only support an 'INBOX' in mbox mode */
if (type == CAMEL_SPOOL_STORE_MBOX) {
@@ -512,6 +523,8 @@ spool_store_get_folder_sync (CamelStore *store,
g_free (name);
}
+ g_free (path);
+
return folder;
}
@@ -613,14 +626,14 @@ spool_store_get_full_path (CamelLocalStore *local_store,
CamelSpoolStore *spool_store;
CamelSettings *settings;
CamelService *service;
- const gchar *path;
gchar *full_path;
+ gchar *path;
service = CAMEL_SERVICE (local_store);
settings = camel_service_get_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
- path = camel_local_settings_get_path (local_settings);
+ path = camel_local_settings_dup_path (local_settings);
spool_store = CAMEL_SPOOL_STORE (local_store);
@@ -638,6 +651,8 @@ spool_store_get_full_path (CamelLocalStore *local_store,
break;
}
+ g_free (path);
+
return full_path;
}
diff --git a/camel/providers/nntp/camel-nntp-store.c b/camel/providers/nntp/camel-nntp-store.c
index 1bd0280..77773a8 100644
--- a/camel/providers/nntp/camel-nntp-store.c
+++ b/camel/providers/nntp/camel-nntp-store.c
@@ -253,20 +253,20 @@ connect_to_server (CamelService *service,
CamelSession *session;
CamelStream *tcp_stream;
const gchar *user_cache_dir;
- const gchar *host;
- const gchar *user;
gboolean retval = FALSE;
guchar *buf;
guint len;
+ gchar *host;
gchar *path;
+ gchar *user;
session = camel_service_get_session (service);
settings = camel_service_get_settings (service);
user_cache_dir = camel_service_get_user_cache_dir (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- host = camel_network_settings_get_host (network_settings);
- user = camel_network_settings_get_user (network_settings);
+ host = camel_network_settings_dup_host (network_settings);
+ user = camel_network_settings_dup_user (network_settings);
camel_service_lock (service, CAMEL_SERVICE_REC_CONNECT_LOCK);
@@ -331,8 +331,12 @@ connect_to_server (CamelService *service,
g_free (store->current_folder);
store->current_folder = NULL;
- fail:
+fail:
camel_service_unlock (service, CAMEL_SERVICE_REC_CONNECT_LOCK);
+
+ g_free (host);
+ g_free (user);
+
return retval;
}
@@ -451,18 +455,22 @@ nntp_store_get_name (CamelService *service,
{
CamelNetworkSettings *network_settings;
CamelSettings *settings;
- const gchar *host;
+ gchar *host;
+ gchar *name;
settings = camel_service_get_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- host = camel_network_settings_get_host (network_settings);
+ host = camel_network_settings_dup_host (network_settings);
if (brief)
- return g_strdup_printf ("%s", host);
+ name = g_strdup_printf ("%s", host);
else
- return g_strdup_printf (_("USENET News via %s"), host);
+ name = g_strdup_printf (_("USENET News via %s"), host);
+ g_free (host);
+
+ return name;
}
extern CamelServiceAuthType camel_nntp_password_authtype;
@@ -478,8 +486,8 @@ nntp_store_authenticate_sync (CamelService *service,
CamelNNTPStore *store;
CamelAuthenticationResult result;
const gchar *password;
- const gchar *user;
gchar *line = NULL;
+ gchar *user;
gint status;
store = CAMEL_NNTP_STORE (service);
@@ -488,14 +496,15 @@ nntp_store_authenticate_sync (CamelService *service,
settings = camel_service_get_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- user = camel_network_settings_get_user (network_settings);
+ user = camel_network_settings_dup_user (network_settings);
if (user == NULL) {
g_set_error_literal (
error, CAMEL_SERVICE_ERROR,
CAMEL_SERVICE_ERROR_CANT_AUTHENTICATE,
_("Cannot authenticate without a username"));
- return CAMEL_AUTHENTICATION_ERROR;
+ result = CAMEL_AUTHENTICATION_ERROR;
+ goto exit;
}
if (password == NULL) {
@@ -503,7 +512,8 @@ nntp_store_authenticate_sync (CamelService *service,
error, CAMEL_SERVICE_ERROR,
CAMEL_SERVICE_ERROR_CANT_AUTHENTICATE,
_("Authentication password not available"));
- return CAMEL_AUTHENTICATION_ERROR;
+ result = CAMEL_AUTHENTICATION_ERROR;
+ goto exit;
}
/* XXX Currently only authinfo user/pass is supported. */
@@ -529,6 +539,9 @@ nntp_store_authenticate_sync (CamelService *service,
break;
}
+exit:
+ g_free (user);
+
return result;
}
diff --git a/camel/providers/nntp/camel-nntp-summary.c b/camel/providers/nntp/camel-nntp-summary.c
index 4d0754b..f2997d8 100644
--- a/camel/providers/nntp/camel-nntp-summary.c
+++ b/camel/providers/nntp/camel-nntp-summary.c
@@ -173,8 +173,8 @@ add_range_xover (CamelNNTPSummary *cns,
CamelFolderSummary *s;
CamelMessageInfoBase *mi;
struct _camel_header_raw *headers = NULL;
- const gchar *host;
gchar *line, *tab;
+ gchar *host;
guint len;
gint ret;
guint n, count, total, size;
@@ -186,11 +186,13 @@ add_range_xover (CamelNNTPSummary *cns,
settings = camel_service_get_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- host = camel_network_settings_get_host (network_settings);
+ host = camel_network_settings_dup_host (network_settings);
camel_operation_push_message (
cancellable, _("%s: Scanning new messages"), host);
+ g_free (host);
+
if ((store->capabilities & NNTP_CAPABILITY_OVER) != 0)
ret = camel_nntp_raw_command_auth (store, cancellable, error, &line, "over %r", low, high);
else
@@ -296,7 +298,7 @@ add_range_head (CamelNNTPSummary *cns,
guint i, n, count, total;
CamelMessageInfo *mi;
CamelMimeParser *mp;
- const gchar *host;
+ gchar *host;
s = (CamelFolderSummary *) cns;
@@ -306,11 +308,13 @@ add_range_head (CamelNNTPSummary *cns,
settings = camel_service_get_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- host = camel_network_settings_get_host (network_settings);
+ host = camel_network_settings_dup_host (network_settings);
camel_operation_push_message (
cancellable, _("%s: Scanning new messages"), host);
+ g_free (host);
+
count = 0;
total = high - low + 1;
for (i = low; i < high + 1; i++) {
diff --git a/camel/providers/pop3/camel-pop3-store.c b/camel/providers/pop3/camel-pop3-store.c
index 8618b11..9ae93fd 100644
--- a/camel/providers/pop3/camel-pop3-store.c
+++ b/camel/providers/pop3/camel-pop3-store.c
@@ -98,7 +98,8 @@ connect_to_server (CamelService *service,
CamelStream *tcp_stream;
CamelPOP3Command *pc;
gboolean disable_extensions;
- const gchar *host;
+ gboolean success = TRUE;
+ gchar *host;
guint32 flags = 0;
gint clean_quit = TRUE;
gint ret;
@@ -106,19 +107,22 @@ connect_to_server (CamelService *service,
settings = camel_service_get_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- host = camel_network_settings_get_host (network_settings);
+ host = camel_network_settings_dup_host (network_settings);
tcp_stream = camel_network_service_connect_sync (
CAMEL_NETWORK_SERVICE (service), cancellable, error);
- if (tcp_stream == NULL)
- return FALSE;
+ if (tcp_stream == NULL) {
+ success = FALSE;
+ goto exit;
+ }
/* parent class connect initialization */
if (CAMEL_SERVICE_CLASS (camel_pop3_store_parent_class)->
connect_sync (service, cancellable, error) == FALSE) {
g_object_unref (tcp_stream);
- return FALSE;
+ success = FALSE;
+ goto exit;
}
disable_extensions = camel_pop3_settings_get_disable_extensions (
@@ -133,14 +137,15 @@ connect_to_server (CamelService *service,
_("Failed to read a valid greeting from POP server %s"),
host);
g_object_unref (tcp_stream);
- return FALSE;
+ success = FALSE;
+ goto exit;
}
g_object_get (settings, "security-method", &method, NULL);
if (method != CAMEL_NETWORK_SECURITY_METHOD_STARTTLS_ON_STANDARD_PORT) {
g_object_unref (tcp_stream);
- return TRUE;
+ goto exit;
}
/* as soon as we send a STLS command, all hope is lost of a clean QUIT if problems arise */
@@ -192,9 +197,9 @@ connect_to_server (CamelService *service,
* command, the client MUST discard prior CAPA responses */
camel_pop3_engine_reget_capabilities (store->engine, cancellable);
- return TRUE;
+ goto exit;
- stls_exception:
+stls_exception:
if (clean_quit) {
/* try to disconnect cleanly */
pc = camel_pop3_engine_command_new (store->engine, 0, NULL, NULL, cancellable, NULL, "QUIT\r\n");
@@ -207,7 +212,12 @@ connect_to_server (CamelService *service,
g_object_unref (tcp_stream);
store->engine = NULL;
- return FALSE;
+ success = FALSE;
+
+exit:
+ g_free (host);
+
+ return success;
}
static CamelAuthenticationResult
@@ -222,9 +232,9 @@ try_sasl (CamelPOP3Store *store,
CamelSettings *settings;
CamelService *service;
guchar *line, *resp;
- const gchar *host;
- CamelSasl *sasl;
+ CamelSasl *sasl = NULL;
gchar *string;
+ gchar *host;
guint len;
gint ret;
@@ -232,7 +242,7 @@ try_sasl (CamelPOP3Store *store,
settings = camel_service_get_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- host = camel_network_settings_get_host (network_settings);
+ host = camel_network_settings_dup_host (network_settings);
sasl = camel_sasl_new ("pop", mechanism, service);
if (sasl == NULL) {
@@ -240,7 +250,8 @@ try_sasl (CamelPOP3Store *store,
error, CAMEL_SERVICE_ERROR,
CAMEL_SERVICE_ERROR_URL_INVALID,
_("No support for %s authentication"), mechanism);
- return CAMEL_AUTHENTICATION_ERROR;
+ result = CAMEL_AUTHENTICATION_ERROR;
+ goto exit;
}
string = g_strdup_printf ("AUTH %s\r\n", mechanism);
@@ -280,7 +291,7 @@ try_sasl (CamelPOP3Store *store,
_("Cannot login to POP server %s: "
"SASL Protocol error"), host);
result = CAMEL_AUTHENTICATION_ERROR;
- goto done;
+ goto exit;
}
string = g_strdup_printf ("%s\r\n", resp);
@@ -295,15 +306,18 @@ try_sasl (CamelPOP3Store *store,
}
- goto done;
+ goto exit;
ioerror:
g_prefix_error (
error, _("Failed to authenticate on POP server %s: "), host);
result = CAMEL_AUTHENTICATION_ERROR;
-done:
- g_object_unref (sasl);
+exit:
+ if (sasl != NULL)
+ g_object_unref (sasl);
+
+ g_free (host);
return result;
}
@@ -333,21 +347,27 @@ pop3_store_get_name (CamelService *service,
{
CamelNetworkSettings *network_settings;
CamelSettings *settings;
- const gchar *host;
- const gchar *user;
+ gchar *host;
+ gchar *user;
+ gchar *name;
settings = camel_service_get_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- host = camel_network_settings_get_host (network_settings);
- user = camel_network_settings_get_user (network_settings);
+ host = camel_network_settings_dup_host (network_settings);
+ user = camel_network_settings_dup_user (network_settings);
if (brief)
- return g_strdup_printf (
+ name = g_strdup_printf (
_("POP3 server %s"), host);
else
- return g_strdup_printf (
+ name = g_strdup_printf (
_("POP3 server for %s on %s"), user, host);
+
+ g_free (host);
+ g_free (user);
+
+ return name;
}
static gboolean
@@ -358,25 +378,26 @@ pop3_store_connect_sync (CamelService *service,
CamelPOP3Store *store = (CamelPOP3Store *) service;
CamelSettings *settings;
CamelSession *session;
- const gchar *mechanism;
const gchar *user_data_dir;
- gboolean success;
+ gboolean success = TRUE;
+ gchar *mechanism;
session = camel_service_get_session (service);
settings = camel_service_get_settings (service);
user_data_dir = camel_service_get_user_data_dir (service);
+ mechanism = camel_network_settings_dup_auth_mechanism (
+ CAMEL_NETWORK_SETTINGS (settings));
+
if (!camel_session_get_online (session)) {
g_set_error (
error, CAMEL_SERVICE_ERROR,
CAMEL_SERVICE_ERROR_UNAVAILABLE,
_("You must be working online to complete this operation"));
- return FALSE;
+ success = FALSE;
+ goto exit;
}
- mechanism = camel_network_settings_get_auth_mechanism (
- CAMEL_NETWORK_SETTINGS (settings));
-
if (store->cache == NULL) {
store->cache = camel_data_cache_new (user_data_dir, error);
if (store->cache) {
@@ -387,15 +408,17 @@ pop3_store_connect_sync (CamelService *service,
}
}
- if (!connect_to_server (service, cancellable, error))
- return FALSE;
+ success = connect_to_server (service, cancellable, error);
+
+ if (!success)
+ goto exit;
success = camel_session_authenticate_sync (
session, service, mechanism, cancellable, error);
if (!success) {
camel_service_disconnect_sync (service, TRUE, NULL);
- return FALSE;
+ goto exit;
}
/* Now that we are in the TRANSACTION state,
@@ -403,7 +426,10 @@ pop3_store_connect_sync (CamelService *service,
store->engine->state = CAMEL_POP3_ENGINE_TRANSACTION;
camel_pop3_engine_reget_capabilities (store->engine, cancellable);
- return TRUE;
+exit:
+ g_free (mechanism);
+
+ return success;
}
static gboolean
@@ -449,16 +475,16 @@ pop3_store_authenticate_sync (CamelService *service,
CamelPOP3Command *pcu = NULL;
CamelPOP3Command *pcp = NULL;
const gchar *password;
- const gchar *host;
- const gchar *user;
+ gchar *host;
+ gchar *user;
gint status;
password = camel_service_get_password (service);
settings = camel_service_get_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- host = camel_network_settings_get_host (network_settings);
- user = camel_network_settings_get_user (network_settings);
+ host = camel_network_settings_dup_host (network_settings);
+ user = camel_network_settings_dup_user (network_settings);
if (mechanism == NULL) {
if (password == NULL) {
@@ -466,7 +492,8 @@ pop3_store_authenticate_sync (CamelService *service,
error, CAMEL_SERVICE_ERROR,
CAMEL_SERVICE_ERROR_CANT_AUTHENTICATE,
_("Authentication password not available"));
- return CAMEL_AUTHENTICATION_ERROR;
+ result = CAMEL_AUTHENTICATION_ERROR;
+ goto exit;
}
/* pop engine will take care of pipelining ability */
@@ -485,7 +512,8 @@ pop3_store_authenticate_sync (CamelService *service,
error, CAMEL_SERVICE_ERROR,
CAMEL_SERVICE_ERROR_CANT_AUTHENTICATE,
_("Authentication password not available"));
- return CAMEL_AUTHENTICATION_ERROR;
+ result = CAMEL_AUTHENTICATION_ERROR;
+ goto exit;
}
d = store->engine->apop;
@@ -502,7 +530,8 @@ pop3_store_authenticate_sync (CamelService *service,
"attack suspected. Please contact your admin."),
host);
- return CAMEL_AUTHENTICATION_ERROR;
+ result = CAMEL_AUTHENTICATION_ERROR;
+ goto exit;
}
d++;
}
@@ -525,10 +554,12 @@ pop3_store_authenticate_sync (CamelService *service,
while (link != NULL) {
CamelServiceAuthType *auth = link->data;
- if (g_strcmp0 (auth->authproto, mechanism) == 0)
- return try_sasl (
+ if (g_strcmp0 (auth->authproto, mechanism) == 0) {
+ result = try_sasl (
store, mechanism,
cancellable, error);
+ goto exit;
+ }
link = g_list_next (link);
}
@@ -536,7 +567,8 @@ pop3_store_authenticate_sync (CamelService *service,
error, CAMEL_SERVICE_ERROR,
CAMEL_SERVICE_ERROR_CANT_AUTHENTICATE,
_("No support for %s authentication"), mechanism);
- return CAMEL_AUTHENTICATION_ERROR;
+ result = CAMEL_AUTHENTICATION_ERROR;
+ goto exit;
}
while ((status = camel_pop3_engine_iterate (store->engine, pcp, cancellable, error)) > 0)
@@ -576,6 +608,10 @@ pop3_store_authenticate_sync (CamelService *service,
if (pcu != NULL)
camel_pop3_engine_command_free (store->engine, pcu);
+exit:
+ g_free (host);
+ g_free (user);
+
return result;
}
@@ -589,7 +625,7 @@ pop3_store_query_auth_types_sync (CamelService *service,
CamelNetworkSettings *network_settings;
CamelSettings *settings;
GList *types = NULL;
- const gchar *host;
+ gchar *host;
GError *local_error = NULL;
/* Chain up to parent's query_auth_types() method. */
@@ -605,7 +641,7 @@ pop3_store_query_auth_types_sync (CamelService *service,
settings = camel_service_get_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- host = camel_network_settings_get_host (network_settings);
+ host = camel_network_settings_dup_host (network_settings);
if (connect_to_server (service, cancellable, NULL)) {
types = g_list_concat (types, g_list_copy (store->engine->auth));
@@ -617,6 +653,8 @@ pop3_store_query_auth_types_sync (CamelService *service,
_("Could not connect to POP server %s"), host);
}
+ g_free (host);
+
return types;
}
diff --git a/camel/providers/smtp/camel-smtp-transport.c b/camel/providers/smtp/camel-smtp-transport.c
index a838d46..d4a00b5 100644
--- a/camel/providers/smtp/camel-smtp-transport.c
+++ b/camel/providers/smtp/camel-smtp-transport.c
@@ -105,8 +105,9 @@ connect_to_server (CamelService *service,
CamelNetworkSecurityMethod method;
CamelSettings *settings;
CamelStream *tcp_stream;
- const gchar *host;
gchar *respbuf = NULL;
+ gboolean success = TRUE;
+ gchar *host;
if (!CAMEL_SERVICE_CLASS (camel_smtp_transport_parent_class)->
connect_sync (service, cancellable, error))
@@ -119,14 +120,16 @@ connect_to_server (CamelService *service,
settings = camel_service_get_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- host = camel_network_settings_get_host (network_settings);
+ host = camel_network_settings_dup_host (network_settings);
method = camel_network_settings_get_security_method (network_settings);
tcp_stream = camel_network_service_connect_sync (
CAMEL_NETWORK_SERVICE (service), cancellable, error);
- if (tcp_stream == NULL)
- return FALSE;
+ if (tcp_stream == NULL) {
+ success = FALSE;
+ goto exit;
+ }
transport->connected = TRUE;
@@ -146,14 +149,16 @@ connect_to_server (CamelService *service,
if (respbuf == NULL) {
g_prefix_error (error, _("Welcome response error: "));
transport->connected = FALSE;
- return FALSE;
+ success = FALSE;
+ goto exit;
}
if (strncmp (respbuf, "220", 3)) {
smtp_set_error (
transport, respbuf, cancellable, error);
g_prefix_error (error, _("Welcome response error: "));
g_free (respbuf);
- return FALSE;
+ success = FALSE;
+ goto exit;
}
} while (*(respbuf+3) == '-'); /* if we got "220-" then loop again */
g_free (respbuf);
@@ -161,8 +166,10 @@ connect_to_server (CamelService *service,
/* Try sending EHLO */
transport->flags |= CAMEL_SMTP_TRANSPORT_IS_ESMTP;
if (!smtp_helo (transport, cancellable, error)) {
- if (!transport->connected)
- return FALSE;
+ if (!transport->connected) {
+ success = FALSE;
+ goto exit;
+ }
/* Fall back to HELO */
g_clear_error (error);
@@ -171,8 +178,8 @@ connect_to_server (CamelService *service,
if (!smtp_helo (transport, cancellable, error)) {
camel_service_disconnect_sync (
(CamelService *) transport, TRUE, NULL);
-
- return FALSE;
+ success = FALSE;
+ goto exit;
}
}
@@ -180,7 +187,7 @@ connect_to_server (CamelService *service,
g_clear_error (error);
if (method != CAMEL_NETWORK_SECURITY_METHOD_STARTTLS_ON_STANDARD_PORT)
- return TRUE; /* we're done */
+ goto exit; /* we're done */
if (!(transport->flags & CAMEL_SMTP_TRANSPORT_STARTTLS)) {
g_set_error (
@@ -235,22 +242,27 @@ connect_to_server (CamelService *service,
if (!smtp_helo (transport, cancellable, error)) {
camel_service_disconnect_sync (
(CamelService *) transport, TRUE, NULL);
-
- return FALSE;
+ success = FALSE;
}
- return TRUE;
+ goto exit;
- exception_cleanup:
+exception_cleanup:
g_object_unref (transport->istream);
transport->istream = NULL;
+
g_object_unref (transport->ostream);
transport->ostream = NULL;
transport->connected = FALSE;
- return FALSE;
+ success = FALSE;
+
+exit:
+ g_free (host);
+
+ return success;
}
static void
@@ -267,19 +279,24 @@ smtp_transport_get_name (CamelService *service,
{
CamelNetworkSettings *network_settings;
CamelSettings *settings;
- const gchar *host;
+ gchar *host;
+ gchar *name;
settings = camel_service_get_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- host = camel_network_settings_get_host (network_settings);
+ host = camel_network_settings_dup_host (network_settings);
if (brief)
- return g_strdup_printf (
+ name = g_strdup_printf (
_("SMTP server %s"), host);
else
- return g_strdup_printf (
+ name = g_strdup_printf (
_("SMTP mail delivery via %s"), host);
+
+ g_free (host);
+
+ return name;
}
static gboolean
@@ -290,37 +307,41 @@ smtp_transport_connect_sync (CamelService *service,
CamelSmtpTransport *transport = CAMEL_SMTP_TRANSPORT (service);
CamelNetworkSettings *network_settings;
CamelSettings *settings;
- const gchar *host;
- const gchar *mechanism;
+ gchar *host;
+ gchar *mechanism;
gboolean auth_required;
gboolean success = TRUE;
settings = camel_service_get_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- host = camel_network_settings_get_host (network_settings);
- mechanism = camel_network_settings_get_auth_mechanism (network_settings);
+ host = camel_network_settings_dup_host (network_settings);
+ mechanism = camel_network_settings_dup_auth_mechanism (network_settings);
/* We (probably) need to check popb4smtp before we connect ... */
if (g_strcmp0 (mechanism, "POPB4SMTP") == 0) {
- gint truth;
GByteArray *chal;
CamelSasl *sasl;
sasl = camel_sasl_new ("smtp", "POPB4SMTP", service);
chal = camel_sasl_challenge_sync (sasl, NULL, cancellable, error);
- truth = camel_sasl_get_authenticated (sasl);
- if (chal)
+ if (chal != NULL)
g_byte_array_free (chal, TRUE);
- g_object_unref (sasl);
- if (!truth)
- return FALSE;
+ if (camel_sasl_get_authenticated (sasl))
+ success = connect_to_server (
+ service, cancellable, error);
+ else
+ success = FALSE;
+
+ g_object_unref (sasl);
- return connect_to_server (service, cancellable, error);
+ goto exit;
}
- if (!connect_to_server (service, cancellable, error))
+ success = connect_to_server (service, cancellable, error);
+
+ if (!success)
return FALSE;
/* check to see if AUTH is required, if so...then AUTH ourselves */
@@ -352,6 +373,10 @@ smtp_transport_connect_sync (CamelService *service,
camel_service_disconnect_sync (service, TRUE, NULL);
}
+exit:
+ g_free (host);
+ g_free (mechanism);
+
return success;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]