@@ -21,21 +21,22 @@ int run(char *cmd[])
2121 _exit (execvp (cmd [0 ], cmd ));
2222 }
2323
24- if (waitpid (pid , & rc , 0 ))
24+ if (waitpid (pid , & rc , 0 ) != pid )
2525 return -1 ;
2626
27- return WEXITSTATUS ( rc ) ;
27+ return rc ;
2828}
2929
3030void cb (int signo )
3131{
32- warnx ("got signal %d, calling nft flush ruleset and exit. " , signo );
32+ warnx ("got signal %d, calling nft flush ruleset and exit" , signo );
3333}
3434
3535int main (int argc , char * argv [])
3636{
3737 char * load [] = { "nft" , "-f" , NULL , NULL };
3838 char * flush [] = { "nft" , "flush" , "ruleset" , NULL };
39+ int rc ;
3940
4041 if (argc < 2 || access (argv [1 ], F_OK ))
4142 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[])
4647 signal (SIGHUP , cb );
4748
4849 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" );
5062 pause ();
5163 run (flush );
5264
0 commit comments