]> granicus.if.org Git - neomutt/commitdiff
check retval of mutt_account_get{user,pass,login}()
authorRichard Russon <rich@flatcap.org>
Mon, 13 Nov 2017 12:58:07 +0000 (12:58 +0000)
committerRichard Russon <rich@flatcap.org>
Wed, 15 Nov 2017 15:12:11 +0000 (15:12 +0000)
Functions `mutt_account_getuser()`, `mutt_account_getpass()` and
`mutt_account_getlogin()` all return int, so check accordingly.

Also, make sure we log if any calls fail.

14 files changed:
conn/sasl.c
conn/ssl.c
conn/ssl_gnutls.c
imap/auth_anon.c
imap/auth_cram.c
imap/auth_gss.c
imap/auth_login.c
imap/auth_plain.c
imap/auth_sasl.c
mutt_account.c
mutt_account.h
nntp.c
pop_auth.c
smtp.c

index 2d161c764d9d818796351c2763e9fdce551c2ce7..eef0afdf1ab64b60fbfab75687de38d40df7872c 100644 (file)
@@ -244,13 +244,13 @@ static int mutt_sasl_cb_authname(void *context, int id, const char **result, uns
 
   if (id == SASL_CB_AUTHNAME)
   {
-    if (mutt_account_getlogin(account))
+    if (mutt_account_getlogin(account) < 0)
       return SASL_FAIL;
     *result = account->login;
   }
   else
   {
-    if (mutt_account_getuser(account))
+    if (mutt_account_getuser(account) < 0)
       return SASL_FAIL;
     *result = account->user;
   }
@@ -280,7 +280,7 @@ static int mutt_sasl_cb_pass(sasl_conn_t *conn, void *context, int id, sasl_secr
   mutt_debug(2, "mutt_sasl_cb_pass: getting password for %s@%s:%u\n",
              account->login, account->host, account->port);
 
-  if (mutt_account_getpass(account))
+  if (mutt_account_getpass(account) < 0)
     return SASL_FAIL;
 
   len = strlen(account->pass);
index 2a1bbc625b196f4e40a4fb0a1f15976ea6df7780..cbeacd493380e652e2c53b7f2234ea82639e4c6a 100644 (file)
@@ -360,13 +360,13 @@ static int ssl_passwd_cb(char *buf, int size, int rwflag, void *userdata)
 {
   struct Account *account = (struct Account *) userdata;
 
-  if (mutt_account_getuser(account))
+  if (mutt_account_getuser(account) < 0)
     return 0;
 
   mutt_debug(2, "ssl_passwd_cb: getting password for %s@%s:%u\n", account->user,
              account->host, account->port);
 
-  if (mutt_account_getpass(account))
+  if (mutt_account_getpass(account) < 0)
     return 0;
 
   return snprintf(buf, size, "%s", account->pass);
@@ -710,7 +710,8 @@ static void ssl_get_client_cert(struct SslSockData *ssldata, struct Connection *
     SSL_CTX_use_PrivateKey_file(ssldata->ctx, SslClientCert, SSL_FILETYPE_PEM);
 
     /* if we are using a client cert, SASL may expect an external auth name */
-    mutt_account_getuser(&conn->account);
+    if (mutt_account_getuser(&conn->account) < 0)
+      mutt_debug(1, "Couldn't get user info\n");
   }
 }
 
index a5f2ce831e7ce412a092c0aea6525baaa3e442e1..872de9949061b857c1edd47e2c6bc729b6834454 100644 (file)
@@ -1013,7 +1013,8 @@ static void tls_get_client_cert(struct Connection *conn)
     *cnend = '\0';
 
   /* if we are using a client cert, SASL may expect an external auth name */
-  mutt_account_getuser(&conn->account);
+  if (mutt_account_getuser(&conn->account) < 0)
+    mutt_debug(1, "Couldn't get user info\n");
 
 err_dn:
   FREE(&dn);
index de33b7f668effc2e4946d6dd3b105192a20b8316..af67e46d35577c7343d4464a2c97c651f6acf730 100644 (file)
@@ -56,7 +56,7 @@ enum ImapAuthRes imap_auth_anon(struct ImapData *idata, const char *method)
   if (!mutt_bit_isset(idata->capabilities, AUTH_ANON))
     return IMAP_AUTH_UNAVAIL;
 
-  if (mutt_account_getuser(&idata->conn->account))
+  if (mutt_account_getuser(&idata->conn->account) < 0)
     return IMAP_AUTH_FAILURE;
 
   if (idata->conn->account.user[0] != '\0')
index 8dc3af5c016cb16dd5af056f91afe3dab9e379be..14f5c8e52862cef58aaa500dc8d7a08d097bc848 100644 (file)
@@ -117,9 +117,9 @@ enum ImapAuthRes imap_auth_cram_md5(struct ImapData *idata, const char *method)
   mutt_message(_("Authenticating (CRAM-MD5)..."));
 
   /* get auth info */
-  if (mutt_account_getlogin(&idata->conn->account))
+  if (mutt_account_getlogin(&idata->conn->account) < 0)
     return IMAP_AUTH_FAILURE;
-  if (mutt_account_getpass(&idata->conn->account))
+  if (mutt_account_getpass(&idata->conn->account) < 0)
     return IMAP_AUTH_FAILURE;
 
   imap_cmd_start(idata, "AUTHENTICATE CRAM-MD5");
index 2b1fff683e74cf9fcccdded84d80c2ffd8b6a26d..bac5629a97b3dc302e60896e60878445399dbe09 100644 (file)
@@ -118,7 +118,7 @@ enum ImapAuthRes imap_auth_gss(struct ImapData *idata, const char *method)
   if (!mutt_bit_isset(idata->capabilities, AGSSAPI))
     return IMAP_AUTH_UNAVAIL;
 
-  if (mutt_account_getuser(&idata->conn->account))
+  if (mutt_account_getuser(&idata->conn->account) < 0)
     return IMAP_AUTH_FAILURE;
 
   /* get an IMAP service ticket for the server */
index 952e3a0b218b00c8281eddd1708cfc80d2650508..65cadab5aa2216e9d1b362ce1b429caa49585324 100644 (file)
@@ -61,9 +61,9 @@ enum ImapAuthRes imap_auth_login(struct ImapData *idata, const char *method)
     return IMAP_AUTH_UNAVAIL;
   }
 
-  if (mutt_account_getuser(&idata->conn->account))
+  if (mutt_account_getuser(&idata->conn->account) < 0)
     return IMAP_AUTH_FAILURE;
-  if (mutt_account_getpass(&idata->conn->account))
+  if (mutt_account_getpass(&idata->conn->account) < 0)
     return IMAP_AUTH_FAILURE;
 
   mutt_message(_("Logging in..."));
index 60a378840dc4e15a5645605e0cf139db522d5e1a..a56e543378a6acdbdfa4ce778b9fc7dfb3e5d3f2 100644 (file)
@@ -53,9 +53,9 @@ enum ImapAuthRes imap_auth_plain(struct ImapData *idata, const char *method)
   enum ImapAuthRes res = IMAP_AUTH_SUCCESS;
   char buf[STRING];
 
-  if (mutt_account_getuser(&idata->conn->account))
+  if (mutt_account_getuser(&idata->conn->account) < 0)
     return IMAP_AUTH_FAILURE;
-  if (mutt_account_getpass(&idata->conn->account))
+  if (mutt_account_getpass(&idata->conn->account) < 0)
     return IMAP_AUTH_FAILURE;
 
   mutt_message(_("Logging in..."));
index 84e02ca63d975e5774048dc13171d7b853bb49c9..ee76d73b7330b5655c7f5f08acd4254a22b43d4c 100644 (file)
@@ -82,7 +82,7 @@ enum ImapAuthRes imap_auth_sasl(struct ImapData *idata, const char *method)
      * 2. attempt sasl_client_start with only "AUTH=ANONYMOUS" capability
      * 3. if sasl_client_start fails, fall through... */
 
-    if (mutt_account_getuser(&idata->conn->account))
+    if (mutt_account_getuser(&idata->conn->account) < 0)
       return IMAP_AUTH_FAILURE;
 
     if (mutt_bit_isset(idata->capabilities, AUTH_ANON) &&
index db532b3ebe295428e98662bab2984e4b8c20f928..f2a0d1c9b32ffc71dd640aa2304fc2be215e3ce5 100644 (file)
 #include "url.h"
 
 /**
- * mutt_account_match - compare account info (host/port/user)
+ * mutt_account_match - Compare account info (host/port/user)
+ * @param a1 First Account
+ * @param a2 Second Account
+ * @retval 0 Accounts match
  */
 int mutt_account_match(const struct Account *a1, const struct Account *a2)
 {
@@ -78,7 +81,11 @@ int mutt_account_match(const struct Account *a1, const struct Account *a2)
 }
 
 /**
- * mutt_account_fromurl - fill account with information from url
+ * mutt_account_fromurl - Fill Account with information from url
+ * @param account Account to fill
+ * @param url     Url to parse
+ * @retval  0 Success
+ * @retval -1 Error
  */
 int mutt_account_fromurl(struct Account *account, struct Url *url)
 {
@@ -108,7 +115,9 @@ int mutt_account_fromurl(struct Account *account, struct Url *url)
 }
 
 /**
- * mutt_account_tourl - fill URL with info from account
+ * mutt_account_tourl - Fill URL with info from account
+ * @param account Source Account
+ * @param url     Url to fill
  *
  * The URL information 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
@@ -172,7 +181,10 @@ void mutt_account_tourl(struct Account *account, struct Url *url)
 }
 
 /**
- * mutt_account_getuser - retrieve username into Account, if necessary
+ * mutt_account_getuser - Retrieve username into Account, if necessary
+ * @param account Account to fill
+ * @retval  0 Success
+ * @retval -1 Failure
  */
 int mutt_account_getuser(struct Account *account)
 {
@@ -210,6 +222,12 @@ int mutt_account_getuser(struct Account *account)
   return 0;
 }
 
+/**
+ * mutt_account_getlogin - Retrieve login info into Account, if necessary
+ * @param account Account to fill
+ * @retval  0 Success
+ * @retval -1 Failure
+ */
 int mutt_account_getlogin(struct Account *account)
 {
   /* already set */
@@ -228,17 +246,26 @@ int mutt_account_getlogin(struct Account *account)
 
   if (!(account->flags & MUTT_ACCT_LOGIN))
   {
-    mutt_account_getuser(account);
-    strfcpy(account->login, account->user, sizeof(account->login));
+    if (mutt_account_getuser(account) == 0)
+    {
+      strfcpy(account->login, account->user, sizeof(account->login));
+      account->flags |= MUTT_ACCT_LOGIN;
+    }
+    else
+    {
+      mutt_debug(1, "Couldn't get user info\n");
+      return -1;
+    }
   }
 
-  account->flags |= MUTT_ACCT_LOGIN;
-
   return 0;
 }
 
 /**
- * mutt_account_getpass - fetch password into Account, if necessary
+ * mutt_account_getpass - Fetch password into Account, if necessary
+ * @param account Account to fill
+ * @retval  0 Success
+ * @retval -1 Failure
  */
 int mutt_account_getpass(struct Account *account)
 {
@@ -279,6 +306,10 @@ int mutt_account_getpass(struct Account *account)
   return 0;
 }
 
+/**
+ * mutt_account_unsetpass - Unset Account's password
+ * @param account Account to modify
+ */
 void mutt_account_unsetpass(struct Account *account)
 {
   account->flags &= ~MUTT_ACCT_PASS;
index c3637138d592f3591a4f1925b52971c26304b7aa..8bb64bfd62d4e067328e0d33899ad1731b0d54a3 100644 (file)
@@ -42,11 +42,11 @@ enum AccountType
 };
 
 /* account flags */
-#define MUTT_ACCT_PORT (1 << 0)
-#define MUTT_ACCT_USER (1 << 1)
+#define MUTT_ACCT_PORT  (1 << 0)
+#define MUTT_ACCT_USER  (1 << 1)
 #define MUTT_ACCT_LOGIN (1 << 2)
-#define MUTT_ACCT_PASS (1 << 3)
-#define MUTT_ACCT_SSL (1 << 4)
+#define MUTT_ACCT_PASS  (1 << 3)
+#define MUTT_ACCT_SSL   (1 << 4)
 
 int mutt_account_match(const struct Account *a1, const struct Account *m2);
 int mutt_account_fromurl(struct Account *account, struct Url *url);
diff --git a/nntp.c b/nntp.c
index 25f2045452942e5a845ebaa352eead3df4fe4213..8648ec5f7c65aaa8fbd4becc528c1f7c8fe8d60a 100644 (file)
--- a/nntp.c
+++ b/nntp.c
@@ -313,8 +313,8 @@ static int nntp_auth(struct NntpServer *nserv)
   while (true)
   {
     /* get login and password */
-    if (mutt_account_getuser(&conn->account) || !conn->account.user[0] ||
-        mutt_account_getpass(&conn->account) || !conn->account.pass[0])
+    if ((mutt_account_getuser(&conn->account) < 0) || (conn->account.user[0] == '\0') ||
+        (mutt_account_getpass(&conn->account) < 0) || (conn->account.pass[0] == '\0'))
       break;
 
     /* get list of authenticators */
index c3e5bcf9ff6d7146dfc1637f1dbc7a2a2a89fe0b..42478d07525c13c8908c31d65ab73c62493af1c5 100644 (file)
@@ -343,8 +343,8 @@ int pop_authenticate(struct PopData *pop_data)
   int attempts = 0;
   int ret = POP_A_UNAVAIL;
 
-  if (mutt_account_getuser(acct) || !acct->user[0] ||
-      mutt_account_getpass(acct) || !acct->pass[0])
+  if ((mutt_account_getuser(acct) < 0) || (acct->user[0] == '\0') ||
+      (mutt_account_getpass(acct) < 0) || (acct->pass[0] == '\0'))
     return -3;
 
   if (PopAuthenticators && *PopAuthenticators)
diff --git a/smtp.c b/smtp.c
index 7aa9afb00b8a3eb7efe2cf217a58430547b896dd..d308b3940f56377f1ebb81c12bdd8da097c67261 100644 (file)
--- a/smtp.c
+++ b/smtp.c
@@ -535,7 +535,8 @@ static int smtp_auth_plain(struct Connection *conn)
     if (mutt_strncasecmp(method, "plain", 5) == 0)
     {
       /* Get username and password. Bail out of any cannot be retrieved. */
-      if (mutt_account_getuser(&conn->account) || mutt_account_getpass(&conn->account))
+      if ((mutt_account_getuser(&conn->account) < 0) ||
+          (mutt_account_getpass(&conn->account) < 0))
       {
         goto error;
       }