Permalink
Browse files

Report non-zero exit status of tunnel command. Closes: #1749.

--HG--
branch : HEAD
  • Loading branch information...
1 parent 34fdf09 commit 997591c8c21282f2d88f785ff7d2ed8d3131fd68 @bcully bcully committed Aug 6, 2005
Showing with 93 additions and 84 deletions.
  1. +0 −3 imap/imap.c
  2. +76 −0 lib.c
  3. +5 −0 lib.h
  4. +0 −4 mutt.h
  5. +10 −2 mutt_tunnel.c
  6. +2 −75 sendlib.c
View
@@ -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;
View
@@ -40,8 +40,70 @@
#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;
+}
View
@@ -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
View
@@ -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;
View
@@ -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;
View
@@ -62,64 +62,6 @@
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)
{

0 comments on commit 997591c

Please sign in to comment.