X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=account.c;h=7c8fa3c109b8e01e76f91a39b96516d9dd29f5ef;hp=5b775311a39d7f86566fe54d28badd0c0a8dbcf5;hb=b0811fbd6a0e218c9c310a6ef4170e81540e6c22;hpb=f404a0ca916be07049af51a3022baaaaab94def6 diff --git a/account.c b/account.c index 5b77531..7c8fa3c 100644 --- a/account.c +++ b/account.c @@ -1,20 +1,11 @@ /* - * Copyright (C) 2000-3 Brendan Cully - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. - */ + * Copyright notice from original mutt: + * Copyright (C) 2000-5 Brendan Cully + * + * This file is part of mutt-ng, see http://www.muttng.org/. + * It's licensed under the GNU General Public License, + * please see the file GPL in the top level source directory. + */ /* remote host account manipulation (POP/IMAP) */ @@ -23,13 +14,20 @@ #endif #include "mutt.h" +#include "enter.h" +#include "ascii.h" #include "account.h" #include "url.h" -/* mutt_account_match: compare account info (host/port/user) */ -int mutt_account_match (const ACCOUNT* a1, const ACCOUNT* a2) +#include "lib/mem.h" +#include "lib/intl.h" +#include "lib/str.h" + +/* mutt_account_match: compare account info (host/port/user/login) */ +int mutt_account_match (const ACCOUNT * a1, const ACCOUNT * a2) { const char* user = NONULL (Username); + const char* login = NONULL (Username); if (a1->type != a2->type) return 0; @@ -39,32 +37,36 @@ int mutt_account_match (const ACCOUNT* a1, const ACCOUNT* a2) return 0; #ifdef USE_IMAP - if (a1->type == M_ACCT_TYPE_IMAP && ImapUser) - user = ImapUser; + if (a1->type == M_ACCT_TYPE_IMAP) { + if (ImapUser) + user = ImapUser; + if (ImapLogin) + login = ImapLogin; + } #endif #ifdef USE_POP if (a1->type == M_ACCT_TYPE_POP && PopUser) user = PopUser; #endif - + #ifdef USE_NNTP if (a1->type == M_ACCT_TYPE_NNTP && NntpUser) user = NntpUser; #endif if (a1->flags & a2->flags & M_ACCT_USER) - return (!strcmp (a1->user, a2->user)); + return (!str_cmp (a1->user, a2->user)); if (a1->flags & M_ACCT_USER) - return (!strcmp (a1->user, user)); + return (!str_cmp (a1->user, user)); if (a2->flags & M_ACCT_USER) - return (!strcmp (a2->user, user)); + return (!str_cmp (a2->user, user)); return 1; } /* mutt_account_fromurl: fill account with information from url. */ -int mutt_account_fromurl (ACCOUNT* account, ciss_url_t* url) +int mutt_account_fromurl (ACCOUNT * account, ciss_url_t * url) { /* must be present */ if (url->host) @@ -72,18 +74,15 @@ int mutt_account_fromurl (ACCOUNT* account, ciss_url_t* url) else return -1; - if (url->user) - { + if (url->user) { strfcpy (account->user, url->user, sizeof (account->user)); account->flags |= M_ACCT_USER; } - if (url->pass) - { + if (url->pass) { strfcpy (account->pass, url->pass, sizeof (account->pass)); account->flags |= M_ACCT_PASS; } - if (url->port) - { + if (url->port) { account->port = url->port; account->flags |= M_ACCT_PORT; } @@ -95,7 +94,7 @@ int mutt_account_fromurl (ACCOUNT* account, ciss_url_t* url) * is a set of pointers into account - don't free or edit account until * you've finished with url (make a copy of account if you need it for * a while). */ -void mutt_account_tourl (ACCOUNT* account, ciss_url_t* url) +void mutt_account_tourl (ACCOUNT * account, ciss_url_t * url) { url->scheme = U_UNKNOWN; url->user = NULL; @@ -103,8 +102,7 @@ void mutt_account_tourl (ACCOUNT* account, ciss_url_t* url) url->port = 0; #ifdef USE_IMAP - if (account->type == M_ACCT_TYPE_IMAP) - { + if (account->type == M_ACCT_TYPE_IMAP) { if (account->flags & M_ACCT_SSL) url->scheme = U_IMAPS; else @@ -113,8 +111,7 @@ void mutt_account_tourl (ACCOUNT* account, ciss_url_t* url) #endif #ifdef USE_POP - if (account->type == M_ACCT_TYPE_POP) - { + if (account->type == M_ACCT_TYPE_POP) { if (account->flags & M_ACCT_SSL) url->scheme = U_POPS; else @@ -123,8 +120,7 @@ void mutt_account_tourl (ACCOUNT* account, ciss_url_t* url) #endif #ifdef USE_NNTP - if (account->type == M_ACCT_TYPE_NNTP) - { + if (account->type == M_ACCT_TYPE_NNTP) { if (account->flags & M_ACCT_SSL) url->scheme = U_NNTPS; else @@ -141,8 +137,8 @@ void mutt_account_tourl (ACCOUNT* account, ciss_url_t* url) url->pass = account->pass; } -/* mutt_account_getuser: retrieve username into ACCOUNT, if neccessary */ -int mutt_account_getuser (ACCOUNT* account) +/* mutt_account_getuser: retrieve username into ACCOUNT, if necessary */ +int mutt_account_getuser (ACCOUNT * account) { char prompt[SHORT_STRING]; @@ -162,11 +158,11 @@ int mutt_account_getuser (ACCOUNT* account) strfcpy (account->user, NntpUser, sizeof (account->user)); #endif /* prompt (defaults to unix username), copy into account->user */ - else - { + else { snprintf (prompt, sizeof (prompt), _("Username at %s: "), account->host); strfcpy (account->user, NONULL (Username), sizeof (account->user)); - if (mutt_get_field (prompt, account->user, sizeof (account->user), 0)) + if (mutt_get_field_unbuffered (prompt, account->user, + sizeof (account->user), 0)) return -1; } @@ -175,8 +171,33 @@ int mutt_account_getuser (ACCOUNT* account) return 0; } +int mutt_account_getlogin (ACCOUNT* account) +{ + /* already set */ + if (account->flags & M_ACCT_LOGIN) + return 0; +#ifdef USE_IMAP + else if (account->type == M_ACCT_TYPE_IMAP) + { + if (ImapLogin) { + strfcpy (account->login, ImapLogin, sizeof (account->login)); + account->flags |= M_ACCT_LOGIN; + } + } +#endif + + if (!(account->flags & M_ACCT_LOGIN)) { + mutt_account_getuser (account); + strfcpy (account->login, account->user, sizeof (account->login)); + } + + account->flags |= M_ACCT_LOGIN; + + return 0; +} + /* mutt_account_getpass: fetch password into ACCOUNT, if neccessary */ -int mutt_account_getpass (ACCOUNT* account) +int mutt_account_getpass (ACCOUNT * account) { char prompt[SHORT_STRING]; @@ -194,12 +215,13 @@ int mutt_account_getpass (ACCOUNT* account) else if ((account->type == M_ACCT_TYPE_NNTP) && NntpPass) strfcpy (account->pass, NntpPass, sizeof (account->pass)); #endif - else - { + else { snprintf (prompt, sizeof (prompt), _("Password for %s@%s: "), - account->user, account->host); + account->flags & M_ACCT_LOGIN ? account->login : account->user, + account->host); account->pass[0] = '\0'; - if (mutt_get_password (prompt, account->pass, sizeof (account->pass))) + if (mutt_get_field_unbuffered (prompt, account->pass, + sizeof (account->pass), M_PASS)) return -1; } @@ -208,7 +230,7 @@ int mutt_account_getpass (ACCOUNT* account) return 0; } -void mutt_account_unsetpass (ACCOUNT* account) +void mutt_account_unsetpass (ACCOUNT * account) { account->flags &= !M_ACCT_PASS; }