From 3d0d729ea9c15ff5396bf379a5a03d2f0be9db1f Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Fri, 16 Jan 2004 01:41:28 +0000 Subject: [PATCH] Improve IMAP error handling to print the command which caused the error; if the command is a LOGIN command, mask out the username and password. --- debian/patches/30-async-imap.dpatch | 51 ++++++++++++++++++----------- 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/debian/patches/30-async-imap.dpatch b/debian/patches/30-async-imap.dpatch index 9d9431f..12fcd10 100755 --- a/debian/patches/30-async-imap.dpatch +++ b/debian/patches/30-async-imap.dpatch @@ -26,8 +26,8 @@ exit 0 @DPATCH@ diff -urNad /usr/projects/isync/SF-cvs/isync/src/imap.c isync/src/imap.c ---- /usr/projects/isync/SF-cvs/isync/src/imap.c 2004-01-14 18:31:49.000000000 -0500 -+++ isync/src/imap.c 2004-01-14 18:39:18.000000000 -0500 +--- /usr/projects/isync/SF-cvs/isync/src/imap.c 2004-01-15 14:24:40.000000000 -0500 ++++ isync/src/imap.c 2004-01-15 20:36:15.000000000 -0500 @@ -3,6 +3,7 @@ * isync - IMAP4 to maildir mailbox synchronizer * Copyright (C) 2000-2002 Michael R. Elkins @@ -133,12 +133,20 @@ diff -urNad /usr/projects/isync/SF-cvs/isync/src/imap.c isync/src/imap.c return 0; } -@@ -415,39 +458,114 @@ +@@ -415,39 +458,121 @@ } } -static int -imap_exec (imap_t * imap, const char *fmt, ...) ++static void print_imap_command(const char *cmd, FILE *f) ++{ ++ if (strncmp(cmd, "LOGIN", 5)) ++ fputs(cmd, f); ++ else ++ fputs("LOGIN USERNAME PASSWORD", f); ++} ++ +static struct imap_cmd *issue_imap_cmd(imap_t *imap, + const char *fmt, ...) { @@ -177,10 +185,9 @@ diff -urNad /usr/projects/isync/SF-cvs/isync/src/imap.c isync/src/imap.c - printf (">>> %s", buf); + if (num_in_progress) + printf("(%d in progress) ", num_in_progress); -+ if (strncmp(tmp, "LOGIN", 5)) -+ printf (">>> %s", buf); -+ else -+ printf (">>> LOGIN USERNAME PASSWORD\n"); ++ printf(">>> %d ", cmd->tag); ++ print_imap_command(tmp, stdout); ++ fputc('\n', stdout); fflush (stdout); } n = socket_write (imap->sock, buf, strlen (buf)); @@ -190,7 +197,7 @@ diff -urNad /usr/projects/isync/SF-cvs/isync/src/imap.c isync/src/imap.c - return -1; + free(cmd); + return NULL; -+ } + } + cmd->next = in_progress; + in_progress = cmd; + num_in_progress++; @@ -202,7 +209,7 @@ diff -urNad /usr/projects/isync/SF-cvs/isync/src/imap.c isync/src/imap.c + printf("(Socket input pending)\n"); + get_cmd_result(imap); + } - } ++ } + return cmd; +} + @@ -260,7 +267,7 @@ diff -urNad /usr/projects/isync/SF-cvs/isync/src/imap.c isync/src/imap.c arg = next_arg (&cmd); if (*arg == '*') -@@ -456,7 +574,7 @@ +@@ -456,7 +581,7 @@ if (!arg) { fprintf (stderr, "IMAP error: unable to parse untagged response\n"); @@ -269,7 +276,7 @@ diff -urNad /usr/projects/isync/SF-cvs/isync/src/imap.c isync/src/imap.c } if (!strcmp ("NAMESPACE", arg)) -@@ -528,23 +646,14 @@ +@@ -528,23 +653,14 @@ imap->recent = atoi (arg); else if (!strcmp ("FETCH", arg1)) { @@ -296,7 +303,7 @@ diff -urNad /usr/projects/isync/SF-cvs/isync/src/imap.c isync/src/imap.c } } #if HAVE_LIBSSL -@@ -555,7 +664,7 @@ +@@ -555,7 +671,7 @@ if (!imap->cram) { fprintf (stderr, "IMAP error, not doing CRAM-MD5 authentication\n"); @@ -305,7 +312,7 @@ diff -urNad /usr/projects/isync/SF-cvs/isync/src/imap.c isync/src/imap.c } resp = cram (cmd, imap->box->user, imap->box->pass); -@@ -568,34 +677,88 @@ +@@ -568,34 +684,94 @@ if (n <= 0) { socket_perror ("write", imap->sock, n); @@ -344,8 +351,14 @@ diff -urNad /usr/projects/isync/SF-cvs/isync/src/imap.c isync/src/imap.c + } + arg = next_arg (&cmd); + if (strncmp("OK", arg, 2)) { -+ fprintf(stderr, "tag %u returned error: %s\n", -+ tag, arg); ++ if (cmdp->cmd) { ++ fputc('\'', stderr); ++ print_imap_command(cmdp->cmd, stderr); ++ fputc('\'', stderr); ++ } else ++ fprintf(stderr, "tag %u", tag); ++ fprintf(stderr, " returned an error (%s): %s\n", ++ arg, cmd ? cmd : ""); + cmdp->response = -1; + } + parse_response_code (imap, cmd); @@ -408,7 +421,7 @@ diff -urNad /usr/projects/isync/SF-cvs/isync/src/imap.c isync/src/imap.c #ifdef HAVE_LIBSSL static int start_tls (imap_t *imap, config_t * cfg) -@@ -1039,6 +1202,7 @@ +@@ -1039,6 +1215,7 @@ size_t n; char buf[1024]; @@ -416,7 +429,7 @@ diff -urNad /usr/projects/isync/SF-cvs/isync/src/imap.c isync/src/imap.c send_server (imap->sock, "UID FETCH %d BODY.PEEK[]", uid); for (;;) -@@ -1160,7 +1324,9 @@ +@@ -1160,7 +1337,9 @@ (buf[0] != 0) ? " " : "", Flags[i]); } @@ -427,7 +440,7 @@ diff -urNad /usr/projects/isync/SF-cvs/isync/src/imap.c isync/src/imap.c } int -@@ -1249,6 +1415,7 @@ +@@ -1249,6 +1428,7 @@ strcat (flagstr,") "); } @@ -435,7 +448,7 @@ diff -urNad /usr/projects/isync/SF-cvs/isync/src/imap.c isync/src/imap.c send_server (imap->sock, "APPEND %s%s %s{%d}", imap->prefix, imap->box->box, flagstr, len + extra); -@@ -1341,6 +1508,7 @@ +@@ -1341,6 +1521,7 @@ } /* didn't receive an APPENDUID */