aboutsummaryrefslogtreecommitdiff
path: root/libsylph/imap.c
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2006-01-24 07:45:31 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2006-01-24 07:45:31 +0000
commit08d493a056aa2bc326f8d1f5f3c0dfa61511ceb1 (patch)
treec0b7903822b5246303bf974a64adfec9b34b2e85 /libsylph/imap.c
parentf41de13c3162472bba4fe9f3ac233f52f9827af1 (diff)
save temporary IMAP4 password. Don't try to connect to IMAP4 server when closing folder.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@921 ee746299-78ed-0310-b773-934348b2243d
Diffstat (limited to 'libsylph/imap.c')
-rw-r--r--libsylph/imap.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/libsylph/imap.c b/libsylph/imap.c
index ac0cd1b2..ceffb2c0 100644
--- a/libsylph/imap.c
+++ b/libsylph/imap.c
@@ -588,7 +588,7 @@ static gint imap_session_connect(IMAPSession *session)
{
SockInfo *sock;
PrefsAccount *account;
- gchar *pass;
+ const gchar *pass;
g_return_val_if_fail(session != NULL, IMAP_ERROR);
@@ -598,15 +598,18 @@ static gint imap_session_connect(IMAPSession *session)
SESSION(session)->server, SESSION(session)->port);
pass = account->passwd;
+ if (!pass)
+ pass = account->tmp_pass;
if (!pass) {
gchar *tmp_pass;
+
tmp_pass = input_query_password(account->recv_server,
account->userid);
if (!tmp_pass)
return IMAP_ERROR;
- Xstrdup_a(pass, tmp_pass,
- {g_free(tmp_pass); return IMAP_ERROR;});
- g_free(tmp_pass);
+
+ account->tmp_pass = tmp_pass;
+ pass = account->tmp_pass;
}
#if USE_SSL
@@ -650,6 +653,10 @@ static gint imap_session_connect(IMAPSession *session)
if (!session->authenticated &&
imap_auth(session, account->userid, pass, account->imap_auth_type)
!= IMAP_SUCCESS) {
+ if (account->tmp_pass) {
+ g_free(account->tmp_pass);
+ account->tmp_pass = NULL;
+ }
imap_cmd_logout(session);
return IMAP_AUTHFAIL;
}
@@ -1599,6 +1606,9 @@ static gint imap_close(Folder *folder, FolderItem *item)
if (!item->path) return 0;
+ if (!REMOTE_FOLDER(folder)->session)
+ return 0;
+
session = imap_session_get(folder);
if (!session) return -1;