]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
dhcpcd: allow sigpipe in scripts.
authorRoy Marples <roy@marples.name>
Fri, 15 May 2020 14:56:47 +0000 (15:56 +0100)
committerRoy Marples <roy@marples.name>
Fri, 15 May 2020 14:56:47 +0000 (15:56 +0100)
src/dhcpcd.c
src/dhcpcd.h
src/script.c

index e9a3877b8990f42a43eb01f41c5a6af7be784868..3f5c35d5cf6eb26845b27c68b04ebb8e6eb9b620 100644 (file)
@@ -85,6 +85,11 @@ const int dhcpcd_signals[] = {
        SIGUSR2,
 };
 const size_t dhcpcd_signals_len = __arraycount(dhcpcd_signals);
+
+const int dhcpcd_signals_ignore[] = {
+       SIGPIPE,
+};
+const size_t dhcpcd_signals_ignore_len = __arraycount(dhcpcd_signals_ignore);
 #endif
 
 #define IF_UPANDRUNNING(a) \
@@ -1784,6 +1789,7 @@ main(int argc, char **argv)
 #ifdef USE_SIGNALS
        int sig = 0;
        const char *siga = NULL;
+       size_t si;
 #endif
 
        /* Test for --help and --version */
@@ -2040,8 +2046,8 @@ printpidfile:
        }
 
 #ifdef USE_SIGNALS
-       /* Ignore SIGPIPE, prefer EPIPE. */
-       signal(SIGPIPE, SIG_IGN);
+       for (si = 0; si < dhcpcd_signals_ignore_len; si++)
+               signal(dhcpcd_signals_ignore[i], SIG_IGN);
 
        /* Save signal mask, block and redirect signals to our handler */
        if (eloop_signal_set_cb(ctx.eloop,
index e0044c2276e7e3d24d02d8f94e345e97ba90452a..5d896738559726e1fbfa3ecdc4f4a37d0fa057ae 100644 (file)
@@ -248,6 +248,8 @@ struct dhcpcd_ctx {
 #ifdef USE_SIGNALS
 extern const int dhcpcd_signals[];
 extern const size_t dhcpcd_signals_len;
+extern const int dhcpcd_signals_ignore[];
+extern const size_t dhcpcd_signals_ignore_len;
 #endif
 
 int dhcpcd_ifafwaiting(const struct interface *);
index 186b6e05d435ae37131884545e6466ad96ea3d18..56f6cad3b89045b4c425f02d8546ce812b3612e0 100644 (file)
@@ -108,6 +108,8 @@ script_exec(char *const *argv, char *const *env)
        posix_spawnattr_setsigmask(&attr, &defsigs);
        for (i = 0; i < dhcpcd_signals_len; i++)
                sigaddset(&defsigs, dhcpcd_signals[i]);
+       for (i = 0; i < dhcpcd_signals_ignore_len; i++)
+               sigaddset(&defsigs, dhcpcd_signals_ignore[i]);
        posix_spawnattr_setsigdefault(&attr, &defsigs);
 #endif
        errno = 0;