]> granicus.if.org Git - neomutt/commitdiff
Report non-zero exit status of tunnel command. Closes: #1749.
authorBrendan Cully <brendan@kublai.com>
Sat, 6 Aug 2005 22:20:55 +0000 (22:20 +0000)
committerBrendan Cully <brendan@kublai.com>
Sat, 6 Aug 2005 22:20:55 +0000 (22:20 +0000)
imap/imap.c
lib.c
lib.h
mutt.h
mutt_tunnel.c
sendlib.c

index 7ad1e380319cc91ed3437be2d6abfd16a022d5b6..62ec16fe679e4322b4044e85d91060f718d12c09 100644 (file)
@@ -425,9 +425,6 @@ int imap_open_connection (IMAP_DATA* idata)
   idata->state = IMAP_CONNECTED;
 
   if (imap_cmd_step (idata) != IMAP_CMD_CONTINUE) {
-    mutt_error (_("Unexpected response received from server: %s"), idata->cmd.buf);
-    mutt_sleep (1);
-
     mutt_socket_close (idata->conn);
     idata->state = IMAP_DISCONNECTED;
     return -1;
diff --git a/lib.c b/lib.c
index c0147c35799a6ef0973be711544602bf7ee15b75..6df0f220899343e810df8abd405b90f36ef1b3de 100644 (file)
--- a/lib.c
+++ b/lib.c
 #include <fcntl.h>
 #include <pwd.h>
 
+#ifdef HAVE_SYSEXITS_H
+#include <sysexits.h>
+#else /* Make sure EX_OK is defined <philiph@pobox.com> */
+#define EX_OK 0
+#endif
+
 #include "lib.h"
 
+static struct sysexits
+{
+  int v;
+  const char *str;
+} 
+sysexits_h[] = 
+{
+#ifdef EX_USAGE
+  { 0xff & EX_USAGE, "Bad usage." },
+#endif
+#ifdef EX_DATAERR
+  { 0xff & EX_DATAERR, "Data format error." },
+#endif
+#ifdef EX_NOINPUT
+  { 0xff & EX_NOINPUT, "Cannot open input." },
+#endif
+#ifdef EX_NOUSER
+  { 0xff & EX_NOUSER, "User unknown." },
+#endif
+#ifdef EX_NOHOST
+  { 0xff & EX_NOHOST, "Host unknown." },
+#endif
+#ifdef EX_UNAVAILABLE
+  { 0xff & EX_UNAVAILABLE, "Service unavailable." },
+#endif
+#ifdef EX_SOFTWARE
+  { 0xff & EX_SOFTWARE, "Internal error." },
+#endif
+#ifdef EX_OSERR
+  { 0xff & EX_OSERR, "Operating system error." },
+#endif
+#ifdef EX_OSFILE
+  { 0xff & EX_OSFILE, "System file missing." },
+#endif
+#ifdef EX_CANTCREAT
+  { 0xff & EX_CANTCREAT, "Can't create output." },
+#endif
+#ifdef EX_IOERR
+  { 0xff & EX_IOERR, "I/O error." },
+#endif
+#ifdef EX_TEMPFAIL
+  { 0xff & EX_TEMPFAIL, "Deferred." },
+#endif
+#ifdef EX_PROTOCOL
+  { 0xff & EX_PROTOCOL, "Remote protocol error." },
+#endif
+#ifdef EX_NOPERM
+  { 0xff & EX_NOPERM, "Insufficient permission." },
+#endif
+#ifdef EX_CONFIG
+  { 0xff & EX_NOPERM, "Local configuration error." },
+#endif
+  { S_ERR, "Exec error." },
+  { -1, NULL}
+};
+
 void mutt_nocurses_error (const char *fmt, ...)
 {
   va_list ap;
@@ -718,3 +780,17 @@ const char *mutt_basename (const char *f)
   else
     return f;
 }
+
+const char *
+mutt_strsysexit(int e)
+{
+  int i;
+  
+  for(i = 0; sysexits_h[i].str; i++)
+  {
+    if(e == sysexits_h[i].v)
+      break;
+  }
+  
+  return sysexits_h[i].str;
+}
diff --git a/lib.h b/lib.h
index f5fb94e9820184ffb66a08b66bb733cb668c3c2c..164014f4e9150ec6cc5c5bc5841b77e7b1e577a9 100644 (file)
--- a/lib.h
+++ b/lib.h
@@ -103,6 +103,10 @@ extern void (*mutt_error) (const char *, ...);
 # endif
 void mutt_exit (int);
 
+/* Exit values used in send_msg() */
+#define S_ERR 127
+#define S_BKG 126
+
 /* The actual library functions. */
 
 FILE *safe_fopen (const char *, const char *);
@@ -147,4 +151,5 @@ void mutt_unlink (const char *);
 void safe_free (void *);
 void safe_realloc (void *, size_t);
 
+const char *mutt_strsysexit(int e);
 #endif
diff --git a/mutt.h b/mutt.h
index 0c251967abc043256e1d6706202c3f9195ef1594..10653aba19c093742ac56c9d00c31d99ea81565c 100644 (file)
--- a/mutt.h
+++ b/mutt.h
@@ -519,10 +519,6 @@ enum
 #define toggle_option(x) mutt_bit_toggle(Options,x)
 #define option(x) mutt_bit_isset(Options,x)
 
-/* Exit values used in send_msg() */
-#define S_ERR 127
-#define S_BKG 126
-
 typedef struct list_t
 {
   char *data;
index fc2b2e1064c630612d300f3b4342060b3143aeff..b1f0bf40bbf3ed0e029716e80f24cb342a05f5ab 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2000 Manoj Kasichainula <manoj@io.com>
- * Copyright (C) 2001 Brendan Cully <brendan@kublai.com>
+ * Copyright (C) 2001,2005 Brendan Cully <brendan@kublai.com>
  *
  *     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
@@ -127,10 +127,18 @@ static int tunnel_socket_open (CONNECTION *conn)
 static int tunnel_socket_close (CONNECTION* conn)
 {
   TUNNEL_DATA* tunnel = (TUNNEL_DATA*) conn->sockdata;
+  int status;
 
   close (tunnel->readfd);
   close (tunnel->writefd);
-  waitpid (tunnel->pid, NULL, 0);
+  waitpid (tunnel->pid, &status, 0);
+  if (!WIFEXITED(status) || WEXITSTATUS(status))
+  {
+    mutt_error(_("Tunnel to %s returned error %d (%s)"), conn->account.host,
+               WEXITSTATUS(status),
+               NONULL(mutt_strsysexit(WEXITSTATUS(status))));
+    mutt_sleep (2);
+  }
   FREE (&conn->sockdata);
 
   return 0;
index 1185dafcd3205c08896541a4d005690284469632..50209a5b2bdd3da920fef194567fc2cd699a2b8d 100644 (file)
--- a/sendlib.c
+++ b/sendlib.c
 
 extern char RFC822Specials[];
 
-static struct sysexits
-{
-  int v;
-  const char *str;
-} 
-sysexits_h[] = 
-{
-#ifdef EX_USAGE
-  { 0xff & EX_USAGE, "Bad usage." },
-#endif
-#ifdef EX_DATAERR
-  { 0xff & EX_DATAERR, "Data format error." },
-#endif
-#ifdef EX_NOINPUT
-  { 0xff & EX_NOINPUT, "Cannot open input." },
-#endif
-#ifdef EX_NOUSER
-  { 0xff & EX_NOUSER, "User unknown." },
-#endif
-#ifdef EX_NOHOST
-  { 0xff & EX_NOHOST, "Host unknown." },
-#endif
-#ifdef EX_UNAVAILABLE
-  { 0xff & EX_UNAVAILABLE, "Service unavailable." },
-#endif
-#ifdef EX_SOFTWARE
-  { 0xff & EX_SOFTWARE, "Internal error." },
-#endif
-#ifdef EX_OSERR
-  { 0xff & EX_OSERR, "Operating system error." },
-#endif
-#ifdef EX_OSFILE
-  { 0xff & EX_OSFILE, "System file missing." },
-#endif
-#ifdef EX_CANTCREAT
-  { 0xff & EX_CANTCREAT, "Can't create output." },
-#endif
-#ifdef EX_IOERR
-  { 0xff & EX_IOERR, "I/O error." },
-#endif
-#ifdef EX_TEMPFAIL
-  { 0xff & EX_TEMPFAIL, "Deferred." },
-#endif
-#ifdef EX_PROTOCOL
-  { 0xff & EX_PROTOCOL, "Remote protocol error." },
-#endif
-#ifdef EX_NOPERM
-  { 0xff & EX_NOPERM, "Insufficient permission." },
-#endif
-#ifdef EX_CONFIG
-  { 0xff & EX_NOPERM, "Local configuration error." },
-#endif
-  { S_ERR, "Exec error." },
-  { -1, NULL}
-};
-
-    
-
 #define DISPOSITION(X) X==DISPATTACH?"attachment":"inline"
 
 const char MimeSpecials[] = "@.,;:<>[]\\\"()?/= \t";
@@ -1973,21 +1915,6 @@ add_option (char **args, size_t *argslen, size_t *argsmax, char *s)
   return (args);
 }
 
-static const char *
-strsysexit(int e)
-{
-  int i;
-  
-  for(i = 0; sysexits_h[i].str; i++)
-  {
-    if(e == sysexits_h[i].v)
-      break;
-  }
-  
-  return sysexits_h[i].str;
-}
-
-
 int
 mutt_invoke_sendmail (ADDRESS *from,   /* the sender */
                 ADDRESS *to, ADDRESS *cc, ADDRESS *bcc, /* recips */
@@ -2054,9 +1981,9 @@ mutt_invoke_sendmail (ADDRESS *from,      /* the sender */
   {
     if (i != S_BKG)
     {
-      const char *e = strsysexit (i);
+      const char *e = mutt_strsysexit (i);
 
-      e = strsysexit (i);
+      e = mutt_strsysexit (i);
       mutt_error (_("Error sending message, child exited %d (%s)."), i, NONULL (e));
       if (childout)
       {