Refactor popen()/pclose() logic in ifupdown calls

Currently no code checks the return code of ifupdown at runlevel
changes, but for future reference this code has been refactored
to match the changes made in cbdb949 to fix issue #400.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
Joachim Wiberg
2024-03-30 12:38:50 +01:00
parent 7701718d7b
commit c32b5a749a
+10 -9
View File
@@ -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 ...",