Rocco Rutte:
[apps/madmutt.git] / pop / pop_auth.c
index 2583e18..194f33b 100644 (file)
 #include "md5.h"
 #include "pop.h"
 
+#include "lib/mem.h"
+#include "lib/intl.h"
+#include "lib/debug.h"
+
 #include <string.h>
 #include <unistd.h>
 
@@ -51,9 +55,7 @@ static pop_auth_res_t pop_auth_sasl (POP_DATA * pop_data, const char *method)
   unsigned char client_start;
 
   if (mutt_sasl_client_new (pop_data->conn, &saslconn) < 0) {
-    dprint (1,
-            (debugfile,
-             "pop_auth_sasl: Error allocating SASL connection.\n"));
+    debug_print (1, ("Error allocating SASL connection.\n"));
     return POP_A_FAILURE;
   }
 
@@ -74,9 +76,7 @@ static pop_auth_res_t pop_auth_sasl (POP_DATA * pop_data, const char *method)
   }
 
   if (rc != SASL_OK && rc != SASL_CONTINUE) {
-    dprint (1,
-            (debugfile,
-             "pop_auth_sasl: Failure starting authentication exchange. No shared mechanisms?\n"));
+    debug_print (1, ("Failure starting authentication exchange. No shared mechanisms?\n"));
 
     /* SASL doesn't support suggested mechanisms, so fall back */
     return POP_A_UNAVAIL;
@@ -103,17 +103,15 @@ static pop_auth_res_t pop_auth_sasl (POP_DATA * pop_data, const char *method)
       break;
 
 #ifdef USE_SASL2
-    if (!mutt_strncmp (inbuf, "+ ", 2)
+    if (!str_ncmp (inbuf, "+ ", 2)
         && sasl_decode64 (inbuf, strlen (inbuf), buf, LONG_STRING - 1,
                           &len) != SASL_OK)
 #else
-    if (!mutt_strncmp (inbuf, "+ ", 2)
+    if (!str_ncmp (inbuf, "+ ", 2)
         && sasl_decode64 (inbuf, strlen (inbuf), buf, &len) != SASL_OK)
 #endif
     {
-      dprint (1,
-              (debugfile,
-               "pop_auth_sasl: error base64-decoding server response.\n"));
+      debug_print (1, ("error base64-decoding server response.\n"));
       goto bail;
     }
 
@@ -133,9 +131,7 @@ static pop_auth_res_t pop_auth_sasl (POP_DATA * pop_data, const char *method)
     /* send out response, or line break if none needed */
     if (pc) {
       if (sasl_encode64 (pc, olen, buf, sizeof (buf), &olen) != SASL_OK) {
-        dprint (1,
-                (debugfile,
-                 "pop_auth_sasl: error base64-encoding client response.\n"));
+        debug_print (1, ("error base64-encoding client response.\n"));
         goto bail;
       }
 
@@ -150,7 +146,7 @@ static pop_auth_res_t pop_auth_sasl (POP_DATA * pop_data, const char *method)
   if (rc != SASL_OK)
     goto bail;
 
-  if (!mutt_strncmp (inbuf, "+OK", 3)) {
+  if (!str_ncmp (inbuf, "+OK", 3)) {
     mutt_sasl_setup_conn (pop_data->conn, saslconn);
     return POP_A_SUCCESS;
   }
@@ -159,9 +155,9 @@ bail:
   sasl_dispose (&saslconn);
 
   /* terminate SASL sessoin if the last responce is not +OK nor -ERR */
-  if (!mutt_strncmp (inbuf, "+ ", 2)) {
+  if (!str_ncmp (inbuf, "+ ", 2)) {
     snprintf (buf, sizeof (buf), "*\r\n");
-    if (pop_query (pop_data, buf, sizeof (buf)) == -1)
+    if (pop_query (pop_data, buf, sizeof (buf)) == PQ_NOT_CONNECTED)
       return POP_A_SOCKET;
   }
 
@@ -182,7 +178,7 @@ void pop_apop_timestamp (POP_DATA * pop_data, char *buf)
 
   if ((p1 = strchr (buf, '<')) && (p2 = strchr (p1, '>'))) {
     p2[1] = '\0';
-    pop_data->timestamp = safe_strdup (p1);
+    pop_data->timestamp = str_dup (p1);
   }
 }
 
@@ -216,9 +212,9 @@ static pop_auth_res_t pop_auth_apop (POP_DATA * pop_data, const char *method)
             hash);
 
   switch (pop_query (pop_data, buf, sizeof (buf))) {
-  case 0:
+  case PQ_OK:
     return POP_A_SUCCESS;
-  case -1:
+  case PQ_NOT_CONNECTED:
     return POP_A_SOCKET;
   }
 
@@ -233,9 +229,9 @@ static pop_auth_res_t pop_auth_apop (POP_DATA * pop_data, const char *method)
 static pop_auth_res_t pop_auth_user (POP_DATA * pop_data, const char *method)
 {
   char buf[LONG_STRING];
-  int ret;
+  pop_query_status ret;
 
-  if (!pop_data->cmd_user)
+  if (pop_data->cmd_user == CMD_NOT_AVAILABLE)
     return POP_A_UNAVAIL;
 
   mutt_message _("Logging in...");
@@ -243,36 +239,36 @@ static pop_auth_res_t pop_auth_user (POP_DATA * pop_data, const char *method)
   snprintf (buf, sizeof (buf), "USER %s\r\n", pop_data->conn->account.user);
   ret = pop_query (pop_data, buf, sizeof (buf));
 
-  if (pop_data->cmd_user == 2) {
-    if (ret == 0) {
-      pop_data->cmd_user = 1;
+  if (pop_data->cmd_user == CMD_UNKNOWN) {
+    if (ret == PQ_OK) {
+      pop_data->cmd_user = CMD_AVAILABLE;
 
-      dprint (1, (debugfile, "pop_auth_user: set USER capability\n"));
+      debug_print (1, ("set USER capability\n"));
     }
 
-    if (ret == -2) {
-      pop_data->cmd_user = 0;
+    if (ret == PQ_ERR) {
+      pop_data->cmd_user = CMD_NOT_AVAILABLE;
 
-      dprint (1, (debugfile, "pop_auth_user: unset USER capability\n"));
+      debug_print (1, ("unset USER capability\n"));
       snprintf (pop_data->err_msg, sizeof (pop_data->err_msg),
                 _("Command USER is not supported by server."));
     }
   }
 
-  if (ret == 0) {
+  if (ret == PQ_OK) {
     snprintf (buf, sizeof (buf), "PASS %s\r\n", pop_data->conn->account.pass);
     ret = pop_query_d (pop_data, buf, sizeof (buf),
 #ifdef DEBUG
-                       /* don't print the password unless we're at the ungodly debugging level */
-                       debuglevel < M_SOCK_LOG_FULL ? "PASS *\r\n" :
+    /* don't print the password unless we're at the ungodly debugging level */
+    DebugLevel < M_SOCK_LOG_FULL ? "PASS *\r\n" :
 #endif
-                       NULL);
+    NULL);
   }
 
   switch (ret) {
-  case 0:
+  case PQ_OK:
     return POP_A_SUCCESS;
-  case -1:
+  case PQ_NOT_CONNECTED:
     return POP_A_SOCKET;
   }
 
@@ -298,7 +294,7 @@ static pop_auth_t pop_authenticators[] = {
  * -2 - login failed,
  * -3 - authentication canceled.
 */
-int pop_authenticate (POP_DATA * pop_data)
+pop_query_status pop_authenticate (POP_DATA * pop_data)
 {
   ACCOUNT *acct = &pop_data->conn->account;
   pop_auth_t *authenticator;
@@ -310,18 +306,18 @@ int pop_authenticate (POP_DATA * pop_data)
 
   if (mutt_account_getuser (acct) || !acct->user[0] ||
       mutt_account_getpass (acct) || !acct->pass[0])
-    return -3;
+    return PFD_FUNCT_ERROR;
 
   if (PopAuthenticators && *PopAuthenticators) {
     /* Try user-specified list of authentication methods */
-    methods = safe_strdup (PopAuthenticators);
+    methods = str_dup (PopAuthenticators);
     method = methods;
 
     while (method) {
       comma = strchr (method, ':');
       if (comma)
         *comma++ = '\0';
-      dprint (2, (debugfile, "pop_authenticate: Trying method %s\n", method));
+      debug_print (2, ("Trying method %s\n", method));
       authenticator = pop_authenticators;
 
       while (authenticator->authenticate) {
@@ -330,12 +326,12 @@ int pop_authenticate (POP_DATA * pop_data)
           ret = authenticator->authenticate (pop_data, method);
           if (ret == POP_A_SOCKET)
             switch (pop_connect (pop_data)) {
-            case 0:
+            case PQ_OK:
               {
                 ret = authenticator->authenticate (pop_data, method);
                 break;
               }
-            case -2:
+            case PQ_ERR:
               ret = POP_A_FAILURE;
             }
 
@@ -357,21 +353,20 @@ int pop_authenticate (POP_DATA * pop_data)
   }
   else {
     /* Fall back to default: any authenticator */
-    dprint (2,
-            (debugfile, "pop_authenticate: Using any available method.\n"));
+    debug_print (2, ("Using any available method.\n"));
     authenticator = pop_authenticators;
 
     while (authenticator->authenticate) {
       ret = authenticator->authenticate (pop_data, authenticator->method);
       if (ret == POP_A_SOCKET)
         switch (pop_connect (pop_data)) {
-        case 0:
+        case PQ_OK:
           {
             ret =
               authenticator->authenticate (pop_data, authenticator->method);
             break;
           }
-        case -2:
+        case PQ_ERR:
           ret = POP_A_FAILURE;
         }
 
@@ -387,13 +382,13 @@ int pop_authenticate (POP_DATA * pop_data)
 
   switch (ret) {
   case POP_A_SUCCESS:
-    return 0;
+    return PQ_OK;
   case POP_A_SOCKET:
-    return -1;
+    return PQ_NOT_CONNECTED;
   case POP_A_UNAVAIL:
     if (!attempts)
       mutt_error (_("No authenticators available"));
   }
 
-  return -2;
+  return PQ_ERR;
 }