diff --git a/src/helpers.c b/src/helpers.c index af13a39b..8768de81 100644 --- a/src/helpers.c +++ b/src/helpers.c @@ -522,9 +522,10 @@ void networking(int updown) pid = fork(); if (pid == 0) { - int rc = EX_OSERR; const char *cmd; + char buf[256]; FILE *pp; + int rc; setsid(); sig_unblock(); @@ -539,16 +540,16 @@ void networking(int updown) cmd = "ifdown -a -f 2>&1"; pp = popen(cmd, "r"); - if (pp) { - char buf[256]; + if (!pp) + _exit(EX_OSERR); - while (fgets(buf, sizeof(buf), pp)) - logit(LOG_NOTICE, "network: %s", chomp(buf)); + while (fgets(buf, sizeof(buf), pp)) + logit(LOG_NOTICE, "network: %s", chomp(buf)); - rc = pclose(pp); - } - - _exit(rc); + rc = pclose(pp); + if (rc == -1) + _exit(EX_OSERR); + _exit(WEXITSTATUS(rc)); } cgroup_service("network", pid, NULL); print(pid > 0 ? 0 : 1, "%s network interfaces ...",