aboutsummaryrefslogtreecommitdiff
path: root/mailutils
diff options
context:
space:
mode:
Diffstat (limited to 'mailutils')
-rw-r--r--mailutils/mail.c21
-rw-r--r--mailutils/popmaildir.c6
-rw-r--r--mailutils/reformime.c6
-rw-r--r--mailutils/sendmail.c17
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
12static 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
21static void signal_handler(int signo) 14static 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
81char* FAST_FUNC send_mail_command(const char *fmt, const char *param) 72char* 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