diff options
Diffstat (limited to 'mailutils')
-rw-r--r-- | mailutils/mail.c | 21 | ||||
-rw-r--r-- | mailutils/popmaildir.c | 6 | ||||
-rw-r--r-- | mailutils/reformime.c | 6 | ||||
-rw-r--r-- | mailutils/sendmail.c | 17 |
4 files changed, 22 insertions, 28 deletions
diff --git a/mailutils/mail.c b/mailutils/mail.c index a7e43c0d1..eceb89071 100644 --- a/mailutils/mail.c +++ b/mailutils/mail.c | |||
@@ -6,23 +6,15 @@ | |||
6 | * | 6 | * |
7 | * Licensed under GPLv2, see file LICENSE in this source tree. | 7 | * Licensed under GPLv2, see file LICENSE in this source tree. |
8 | */ | 8 | */ |
9 | #include <sys/prctl.h> | ||
9 | #include "libbb.h" | 10 | #include "libbb.h" |
10 | #include "mail.h" | 11 | #include "mail.h" |
11 | 12 | ||
12 | static void kill_helper(void) | ||
13 | { | ||
14 | if (G.helper_pid > 0) { | ||
15 | kill(G.helper_pid, SIGTERM); | ||
16 | G.helper_pid = 0; | ||
17 | } | ||
18 | } | ||
19 | |||
20 | // generic signal handler | 13 | // generic signal handler |
21 | static void signal_handler(int signo) | 14 | static void signal_handler(int signo) |
22 | { | 15 | { |
23 | #define err signo | 16 | #define err signo |
24 | if (SIGALRM == signo) { | 17 | if (SIGALRM == signo) { |
25 | kill_helper(); | ||
26 | bb_error_msg_and_die("timed out"); | 18 | bb_error_msg_and_die("timed out"); |
27 | } | 19 | } |
28 | 20 | ||
@@ -66,16 +58,15 @@ void FAST_FUNC launch_helper(const char **argv) | |||
66 | // child stdout [1] -> parent stdin [0] | 58 | // child stdout [1] -> parent stdin [0] |
67 | 59 | ||
68 | if (!G.helper_pid) { | 60 | if (!G.helper_pid) { |
69 | // child: try to execute connection helper | 61 | // child |
62 | // if parent dies, get SIGTERM | ||
63 | prctl(PR_SET_PDEATHSIG, SIGTERM, 0, 0, 0); | ||
64 | // try to execute connection helper | ||
70 | // NB: SIGCHLD & SIGALRM revert to SIG_DFL on exec | 65 | // NB: SIGCHLD & SIGALRM revert to SIG_DFL on exec |
71 | BB_EXECVP_or_die((char**)argv); | 66 | BB_EXECVP_or_die((char**)argv); |
72 | } | 67 | } |
73 | 68 | ||
74 | // parent | 69 | // parent goes on |
75 | // check whether child is alive | ||
76 | //redundant:signal_handler(SIGCHLD); | ||
77 | // child seems OK -> parent goes on | ||
78 | atexit(kill_helper); | ||
79 | } | 70 | } |
80 | 71 | ||
81 | char* FAST_FUNC send_mail_command(const char *fmt, const char *param) | 72 | char* FAST_FUNC send_mail_command(const char *fmt, const char *param) |
diff --git a/mailutils/popmaildir.c b/mailutils/popmaildir.c index 1695a9bb8..5756eaa76 100644 --- a/mailutils/popmaildir.c +++ b/mailutils/popmaildir.c | |||
@@ -125,9 +125,9 @@ int popmaildir_main(int argc UNUSED_PARAM, char **argv) | |||
125 | INIT_G(); | 125 | INIT_G(); |
126 | 126 | ||
127 | // parse options | 127 | // parse options |
128 | opt_complementary = "-1:dd"; | 128 | opts = getopt32(argv, "^" |
129 | opts = getopt32(argv, | 129 | "bdmVcasTkt:+" "R:+Z:L:+H:+" IF_FEATURE_POPMAILDIR_DELIVERY("M:F:") |
130 | "bdmVcasTkt:+" "R:+Z:L:+H:+" IF_FEATURE_POPMAILDIR_DELIVERY("M:F:"), | 130 | "\0" "-1:dd", |
131 | &timeout, NULL, NULL, NULL, &opt_nlines | 131 | &timeout, NULL, NULL, NULL, &opt_nlines |
132 | IF_FEATURE_POPMAILDIR_DELIVERY(, &delivery, &delivery) // we treat -M and -F the same | 132 | IF_FEATURE_POPMAILDIR_DELIVERY(, &delivery, &delivery) // we treat -M and -F the same |
133 | ); | 133 | ); |
diff --git a/mailutils/reformime.c b/mailutils/reformime.c index 6a0254803..321729e0a 100644 --- a/mailutils/reformime.c +++ b/mailutils/reformime.c | |||
@@ -280,9 +280,9 @@ int reformime_main(int argc UNUSED_PARAM, char **argv) | |||
280 | 280 | ||
281 | // parse options | 281 | // parse options |
282 | // N.B. only -x and -X are supported so far | 282 | // N.B. only -x and -X are supported so far |
283 | opt_complementary = "x--X:X--x"; | 283 | opts = getopt32(argv, "^" |
284 | opts = getopt32(argv, | 284 | "x:X" IF_FEATURE_REFORMIME_COMPAT("deis:r:c:m:*h:o:O:") |
285 | "x:X" IF_FEATURE_REFORMIME_COMPAT("deis:r:c:m:*h:o:O:"), | 285 | "\0" "x--X:X--x", |
286 | &opt_prefix | 286 | &opt_prefix |
287 | IF_FEATURE_REFORMIME_COMPAT(, NULL, NULL, &G.opt_charset, NULL, NULL, NULL, NULL) | 287 | IF_FEATURE_REFORMIME_COMPAT(, NULL, NULL, &G.opt_charset, NULL, NULL, NULL, NULL) |
288 | ); | 288 | ); |
diff --git a/mailutils/sendmail.c b/mailutils/sendmail.c index 346de2712..f440e6319 100644 --- a/mailutils/sendmail.c +++ b/mailutils/sendmail.c | |||
@@ -166,9 +166,8 @@ static char *angle_address(char *str) | |||
166 | { | 166 | { |
167 | char *s, *e; | 167 | char *s, *e; |
168 | 168 | ||
169 | trim(str); | 169 | e = trim(str); |
170 | e = last_char_is(str, '>'); | 170 | if (e != str && e[-1] == '>') { |
171 | if (e) { | ||
172 | s = strrchr(str, '<'); | 171 | s = strrchr(str, '<'); |
173 | if (s) { | 172 | if (s) { |
174 | *e = '\0'; | 173 | *e = '\0'; |
@@ -257,13 +256,17 @@ int sendmail_main(int argc UNUSED_PARAM, char **argv) | |||
257 | G.fp0 = xfdopen_for_read(3); | 256 | G.fp0 = xfdopen_for_read(3); |
258 | 257 | ||
259 | // parse options | 258 | // parse options |
260 | // -v is a counter, -H and -S are mutually exclusive, -a is a list | ||
261 | opt_complementary = "vv:H--S:S--H"; | ||
262 | // N.B. since -H and -S are mutually exclusive they do not interfere in opt_connect | 259 | // N.B. since -H and -S are mutually exclusive they do not interfere in opt_connect |
263 | // -a is for ssmtp (http://downloads.openwrt.org/people/nico/man/man8/ssmtp.8.html) compatibility, | 260 | // -a is for ssmtp (http://downloads.openwrt.org/people/nico/man/man8/ssmtp.8.html) compatibility, |
264 | // it is still under development. | 261 | // it is still under development. |
265 | opts = getopt32(argv, "tf:o:iw:+H:S:a:*:v", &opt_from, NULL, | 262 | opts = getopt32(argv, "^" |
266 | &timeout, &opt_connect, &opt_connect, &list, &verbose); | 263 | "tf:o:iw:+H:S:a:*:v" |
264 | "\0" | ||
265 | // -v is a counter, -H and -S are mutually exclusive, -a is a list | ||
266 | "vv:H--S:S--H", | ||
267 | &opt_from, NULL, | ||
268 | &timeout, &opt_connect, &opt_connect, &list, &verbose | ||
269 | ); | ||
267 | //argc -= optind; | 270 | //argc -= optind; |
268 | argv += optind; | 271 | argv += optind; |
269 | 272 | ||