From: Brendan Cully Date: Sat, 6 Aug 2005 22:20:55 +0000 (+0000) Subject: Report non-zero exit status of tunnel command. Closes: #1749. X-Git-Tag: mutt-1-5-10-rel~47 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f0a92e971bd71c4ea8e68858b85b775a3c780bfb;p=mutt Report non-zero exit status of tunnel command. Closes: #1749. --- diff --git a/imap/imap.c b/imap/imap.c index 7ad1e380..62ec16fe 100644 --- a/imap/imap.c +++ b/imap/imap.c @@ -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 c0147c35..6df0f220 100644 --- a/lib.c +++ b/lib.c @@ -40,8 +40,70 @@ #include #include +#ifdef HAVE_SYSEXITS_H +#include +#else /* Make sure EX_OK is defined */ +#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 f5fb94e9..164014f4 100644 --- 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 0c251967..10653aba 100644 --- 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; diff --git a/mutt_tunnel.c b/mutt_tunnel.c index fc2b2e10..b1f0bf40 100644 --- a/mutt_tunnel.c +++ b/mutt_tunnel.c @@ -1,6 +1,6 @@ /* * Copyright (C) 2000 Manoj Kasichainula - * Copyright (C) 2001 Brendan Cully + * Copyright (C) 2001,2005 Brendan Cully * * 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; diff --git a/sendlib.c b/sendlib.c index 1185dafc..50209a5b 100644 --- a/sendlib.c +++ b/sendlib.c @@ -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) {