aboutsummaryrefslogtreecommitdiff
path: root/libsylph
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
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')
-rw-r--r--libsylph/account.c7
-rw-r--r--libsylph/imap.c18
-rw-r--r--libsylph/prefs_account.c4
3 files changed, 22 insertions, 7 deletions
diff --git a/libsylph/account.c b/libsylph/account.c
index f9997ced..514825dd 100644
--- a/libsylph/account.c
+++ b/libsylph/account.c
@@ -1,6 +1,6 @@
/*
* LibSylph -- E-Mail client library
- * Copyright (C) 1999-2005 Hiroyuki Yamamoto
+ * Copyright (C) 1999-2006 Hiroyuki Yamamoto
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -431,10 +431,11 @@ void account_destroy(PrefsAccount *ac_prefs)
folder_unref_account_all(ac_prefs);
- prefs_account_free(ac_prefs);
account_list = g_list_remove(account_list, ac_prefs);
+ if (cur_account == ac_prefs)
+ cur_account = NULL;
+ prefs_account_free(ac_prefs);
- if (cur_account == ac_prefs) cur_account = NULL;
if (!cur_account && account_list) {
cur_account = account_get_default();
if (!cur_account) {
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;
diff --git a/libsylph/prefs_account.c b/libsylph/prefs_account.c
index a6c229dd..20f07eb3 100644
--- a/libsylph/prefs_account.c
+++ b/libsylph/prefs_account.c
@@ -237,6 +237,10 @@ void prefs_account_free(PrefsAccount *ac_prefs)
tmp_ac_prefs = *ac_prefs;
prefs_free(param);
+
+ if (ac_prefs->tmp_pass)
+ g_free(ac_prefs->tmp_pass);
+ g_free(ac_prefs);
}
static gint prefs_account_get_new_id(void)