]> granicus.if.org Git - neomutt/commitdiff
tidy upstream changes
authorRichard Russon <rich@flatcap.org>
Mon, 3 Sep 2018 13:58:34 +0000 (14:58 +0100)
committerRichard Russon <rich@flatcap.org>
Mon, 3 Sep 2018 15:28:51 +0000 (16:28 +0100)
imap/auth_oauth.c
mutt_account.c
mutt_account.h
pop/pop.c
pop/pop.h
pop/pop_auth.c
smtp.c

index dde34ae88ed28a8d22a3d6183db13b52f2f63556..2d5861d5b2daca3feca876713c17512135d01e5c 100644 (file)
@@ -1,23 +1,31 @@
-/*
+/**
+ * @file
+ * IMAP OAUTH authentication method
+ *
+ * @authors
  * Copyright (C) 1999-2001,2005 Brendan Cully <brendan@kublai.com>
  * Copyright (C) 2018 Brandon Long <blong@fiction.net>
- * 
- *     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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ * @copyright
+ * 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, see <http://www.gnu.org/licenses/>.
  */
 
-/* IMAP login/authentication code */
+/**
+ * @page imap_auth_oauth IMAP OAUTH authentication method
+ *
+ * IMAP OAUTH authentication method
+ */
 
 #include "config.h"
 #include "imap_private.h"
 #include "mutt_socket.h"
 #include "muttlib.h"
 
-/* imap_auth_oauth: AUTH=OAUTHBEARER support. See RFC 7628 */
+/**
+ * imap_auth_oauth - Authenticate an IMAP connection using OAUTHBEARER
+ * @param idata  Server data
+ * @param method Name of this authentication method (UNUSED)
+ * @retval num Result, e.g. #IMAP_AUTH_SUCCESS
+ */
 enum ImapAuthRes imap_auth_oauth(struct ImapData *idata, const char *method)
 {
   char *ibuf = NULL;
@@ -41,13 +54,15 @@ enum ImapAuthRes imap_auth_oauth(struct ImapData *idata, const char *method)
   /* For now, we only support SASL_IR also and over TLS */
   if (!mutt_bit_isset(idata->capabilities, AUTH_OAUTHBEARER) ||
       !mutt_bit_isset(idata->capabilities, SASL_IR) || !idata->conn->ssf)
+  {
     return IMAP_AUTH_UNAVAIL;
+  }
 
   mutt_message(_("Authenticating (OAUTHBEARER)..."));
 
   /* We get the access token from the imap_oauth_refresh_command */
   oauthbearer = mutt_account_getoauthbearer(&idata->conn->account);
-  if (oauthbearer == NULL)
+  if (!oauthbearer)
     return IMAP_AUTH_FAILURE;
 
   ilen = mutt_str_strlen(oauthbearer) + 30;
@@ -78,6 +93,5 @@ enum ImapAuthRes imap_auth_oauth(struct ImapData *idata, const char *method)
   }
 
   mutt_error(_("OAUTHBEARER authentication failed."));
-  mutt_sleep(2);
   return IMAP_AUTH_FAILURE;
 }
index aa5b43636601f34f9ac8c1ea4f02564ed1933184..bd7b7d51c4d99767ec0756480eee00ee961eb5ab 100644 (file)
 
 /* These Config Variables are only used in mutt_account.c */
 char *ImapLogin; ///< Config: (imap) Login name for the IMAP server (defaults to ImapUser)
-char *ImapOauthRefreshCmd;
+char *ImapOauthRefreshCmd; ///< Config: (imap) External command to generate OAUTH refresh token
 char *ImapPass; ///< Config: (imap) Password for the IMAP server
 char *NntpPass; ///< Config: (nntp) Password for the news server
 char *NntpUser; ///< Config: (nntp) Username for the news server
+char *PopOauthRefreshCmd; ///< Config: (pop) External command to generate OAUTH refresh token
 char *PopPass;  ///< Config: (pop) Password of the POP server
 char *PopUser;  ///< Config: (pop) Username of the POP server
+char *SmtpOauthRefreshCmd; ///< Config: (smtp) External command to generate OAUTH refresh token
 char *SmtpPass; ///< Config: (smtp) Password for the SMTP server
-char *SmtpOauthRefreshCmd;
 
 /**
  * mutt_account_match - Compare account info (host/port/user)
@@ -335,11 +336,16 @@ void mutt_account_unsetpass(struct Account *account)
   account->flags &= ~MUTT_ACCT_PASS;
 }
 
-/* mutt_account_getoauthbearer: call external command to generate the
- * oauth refresh token for this ACCOUNT, then create and encode the
- * OAUTHBEARER token based on RFC 7628.  Returns NULL on failure.
- * Resulting token is dynamically allocated and should be FREE'd by the
- * caller.
+/**
+ * mutt_account_getoauthbearer - Get an OAUTHBEARER token
+ * @param account Account to use
+ * @retval ptr  OAuth token
+ * @retval NULL Error
+ *
+ * Run an external command to generate the oauth refresh token for an account,
+ * then create and encode the OAUTHBEARER token based on RFC7628.
+ *
+ * @note Caller should free the token
  */
 char *mutt_account_getoauthbearer(struct Account *account)
 {
@@ -370,35 +376,33 @@ char *mutt_account_getoauthbearer(struct Account *account)
     cmd = SmtpOauthRefreshCmd;
 #endif
 
-  if (cmd == NULL)
+  if (!cmd)
   {
     mutt_error(
         _("mutt_account_getoauthbearer: No OAUTH refresh command defined"));
     return NULL;
   }
 
-  if ((pid = mutt_create_filter(cmd, NULL, &fp, NULL)) < 0)
+  pid = mutt_create_filter(cmd, NULL, &fp, NULL);
+  if (pid < 0)
   {
     mutt_perror(
         _("mutt_account_getoauthbearer: Unable to run refresh command"));
     return NULL;
   }
 
-  /* read line */
   token = mutt_file_read_line(NULL, &token_size, fp, NULL, 0);
   mutt_file_fclose(&fp);
   mutt_wait_filter(pid);
 
-  if (token == NULL || *token == '\0')
+  if (!token || *token == '\0')
   {
     mutt_error(_("mutt_account_getoauthbearer: Command returned empty string"));
     FREE(&token);
     return NULL;
   }
 
-  /* Determine the length of the keyed message digest, add 50 for
-   * overhead.
-   */
+  /* Determine the length of the keyed message digest, add 50 for overhead. */
   oalen = strlen(account->login) + strlen(account->host) + strlen(token) + 50;
   oauthbearer = mutt_mem_malloc(oalen);
 
index 492f2a14a76e6287f6f43fb547dd2b59e5cf1f61..d88d14116411575a577e90ac3e7a66bf4165a282 100644 (file)
@@ -34,10 +34,11 @@ extern char *ImapOauthRefreshCmd;
 extern char *ImapPass;
 extern char *NntpPass;
 extern char *NntpUser;
+extern char *PopOauthRefreshCmd;
 extern char *PopPass;
 extern char *PopUser;
-extern char *SmtpPass;
 extern char *SmtpOauthRefreshCmd;
+extern char *SmtpPass;
 
 /**
  * enum AccountType - account types
index 185711f9aaf1ed33bcec30bbaebf9c0435d2c8af..e204720f683632191cbfd55bd8dc11bd84b0427e 100644 (file)
--- a/pop/pop.c
+++ b/pop/pop.c
@@ -67,7 +67,6 @@ struct BodyCache;
 short PopCheckinterval; ///< Config: (pop) Interval between checks for new mail
 unsigned char PopDelete; ///< Config: (pop) After downloading POP messages, delete them on the server
 char *PopHost; ///< Config: (pop) Url of the POP server
-char *PopOauthRefreshCmd;
 bool PopLast; ///< Config: (pop) Use the 'LAST' command to fetch new mail
 
 #ifdef USE_HCACHE
index 41163f9b1019559aa6fbff58968e139f49320317..35d6a86eb92fe42afe8504bc9e7f9fb02b9fefb6 100644 (file)
--- a/pop/pop.h
+++ b/pop/pop.h
@@ -42,7 +42,6 @@
 extern short         PopCheckinterval;
 extern unsigned char PopDelete;
 extern char *        PopHost;
-extern char *PopOauthRefreshCmd;
 extern bool          PopLast;
 
 /* These Config Variables are only used in pop/pop_auth.c */
index 56e88ca3efcba7ab0d1c28bea530ba3ce7d20056..568f5c6944b6b9af05e5995e8ea96366d9f27002 100644 (file)
@@ -335,7 +335,12 @@ static enum PopAuthRes pop_auth_user(struct PopData *pop_data, const char *metho
   return POP_A_FAILURE;
 }
 
-/* OAUTHBEARER authenticator */
+/**
+ * pop_auth_oauth - Authenticate a POP connection using OAUTHBEARER
+ * @param pop_data POP Server data
+ * @param method Name of this authentication method (UNUSED)
+ * @retval num Result, e.g. #POP_A_SUCCESS
+ */
 static enum PopAuthRes pop_auth_oauth(struct PopData *pop_data, const char *method)
 {
   char *oauthbearer = NULL;
@@ -348,7 +353,7 @@ static enum PopAuthRes pop_auth_oauth(struct PopData *pop_data, const char *meth
   mutt_message(_("Authenticating (OAUTHBEARER)..."));
 
   oauthbearer = mutt_account_getoauthbearer(&pop_data->conn->account);
-  if (oauthbearer == NULL)
+  if (!oauthbearer)
     return POP_A_FAILURE;
 
   auth_cmd_len = strlen(oauthbearer) + 30;
@@ -359,7 +364,7 @@ static enum PopAuthRes pop_auth_oauth(struct PopData *pop_data, const char *meth
   ret = pop_query_d(pop_data, auth_cmd, strlen(auth_cmd),
 #ifdef DEBUG
                     /* don't print the bearer token unless we're at the ungodly debugging level */
-                    DebugLevel < MUTT_SOCK_LOG_FULL ? "AUTH OAUTHBEARER *\r\n" :
+                    (DebugLevel < MUTT_SOCK_LOG_FULL) ? "AUTH OAUTHBEARER *\r\n" :
 #endif
                                                       NULL);
   FREE(&auth_cmd);
@@ -373,8 +378,7 @@ static enum PopAuthRes pop_auth_oauth(struct PopData *pop_data, const char *meth
   }
 
   /* The error response was a SASL continuation, so "continue" it.
-   * See RFC 7628 3.2.3
-   */
+   * See RFC7628 3.2.3 */
   mutt_socket_send(pop_data->conn, "\001");
 
   err = pop_data->err_msg;
diff --git a/smtp.c b/smtp.c
index 3308924519490882444b57742d8c7e9e81d49c26..1b7b7158958e18b521b71c84f92e5954da822014 100644 (file)
--- a/smtp.c
+++ b/smtp.c
@@ -503,26 +503,25 @@ fail:
 }
 #endif
 
-/* smtp_auth_oauth: AUTH=OAUTHBEARER support. See RFC 7628 */
+/**
+ * smtp_auth_oauth - Authenticate an SMTP connection using OAUTHBEARER
+ * @param conn Connection info
+ * @retval num Result, e.g. #SMTP_AUTH_SUCCESS
+ */
 static int smtp_auth_oauth(struct Connection *conn)
 {
-  char *ibuf = NULL;
-  char *oauthbearer = NULL;
-  int ilen;
-  int rc;
-
   mutt_message(_("Authenticating (OAUTHBEARER)..."));
 
   /* We get the access token from the smtp_oauth_refresh_command */
-  oauthbearer = mutt_account_getoauthbearer(&conn->account);
-  if (oauthbearer == NULL)
+  char *oauthbearer = mutt_account_getoauthbearer(&conn->account);
+  if (!oauthbearer)
     return SMTP_AUTH_FAIL;
 
-  ilen = strlen(oauthbearer) + 30;
-  ibuf = mutt_mem_malloc(ilen);
+  size_t ilen = strlen(oauthbearer) + 30;
+  char *ibuf = mutt_mem_malloc(ilen);
   snprintf(ibuf, ilen, "AUTH OAUTHBEARER %s\r\n", oauthbearer);
 
-  rc = mutt_socket_send(conn, ibuf);
+  int rc = mutt_socket_send(conn, ibuf);
   FREE(&oauthbearer);
   FREE(&ibuf);
 
@@ -560,7 +559,7 @@ static int smtp_auth(struct Connection *conn)
 
       mutt_debug(2, "Trying method %s\n", method);
 
-      if (!strcmp(method, "oauthbearer"))
+      if (strcmp(method, "oauthbearer") == 0)
       {
         r = smtp_auth_oauth(conn);
       }