@@ -21,21 +21,22 @@ int run(char *cmd[])
21
21
_exit (execvp (cmd [0 ], cmd ));
22
22
}
23
23
24
- if (waitpid (pid , & rc , 0 ))
24
+ if (waitpid (pid , & rc , 0 ) != pid )
25
25
return -1 ;
26
26
27
- return WEXITSTATUS ( rc ) ;
27
+ return rc ;
28
28
}
29
29
30
30
void cb (int signo )
31
31
{
32
- warnx ("got signal %d, calling nft flush ruleset and exit. " , signo );
32
+ warnx ("got signal %d, calling nft flush ruleset and exit" , signo );
33
33
}
34
34
35
35
int main (int argc , char * argv [])
36
36
{
37
37
char * load [] = { "nft" , "-f" , NULL , NULL };
38
38
char * flush [] = { "nft" , "flush" , "ruleset" , NULL };
39
+ int rc ;
39
40
40
41
if (argc < 2 || access (argv [1 ], F_OK ))
41
42
errx (1 , "Missing nft.conf argument.\nUsage:\n\t%s /path/to/nftables.conf" , argv [0 ]);
@@ -46,7 +47,18 @@ int main(int argc, char *argv[])
46
47
signal (SIGHUP , cb );
47
48
48
49
load [2 ] = argv [1 ];
49
- run (load );
50
+ rc = run (load );
51
+ if (rc == -1 ) {
52
+ err (1 , "Internal error while waiting for ruleset to load" );
53
+ } else if (WIFEXITED (rc )) {
54
+ rc = WEXITSTATUS (rc );
55
+ if (rc )
56
+ errx (rc , "Failed to load ruleset, exited with status %d" , rc );
57
+ } else if (WIFSIGNALED (rc )) {
58
+ errx (rc , "Failed to load ruleset, terminated on signal %d" , WTERMSIG (rc ));
59
+ }
60
+
61
+ warnx ("Ruleset active" );
50
62
pause ();
51
63
run (flush );
52
64
0 commit comments