From b19d239323dd9f732b24ad6c95101cf7a51c4b20 Mon Sep 17 00:00:00 2001 From: Phil Sutter Date: Tue, 17 Sep 2019 17:53:31 +0200 Subject: xtables_error() does not return It's a define which resolves into a callback which in turn is declared with noreturn attribute. It will never return, therefore drop all explicit exit() calls or other dead code immediately following it. Signed-off-by: Phil Sutter Acked-by: Florian Westphal --- iptables/iptables-restore.c | 18 ++++++------------ iptables/iptables-xml.c | 22 +++++++--------------- iptables/nft.c | 8 ++------ iptables/xshared.c | 1 - iptables/xtables-restore.c | 13 ++++--------- 5 files changed, 19 insertions(+), 43 deletions(-) diff --git a/iptables/iptables-restore.c b/iptables/iptables-restore.c index 430be18b..6bc182bf 100644 --- a/iptables/iptables-restore.c +++ b/iptables/iptables-restore.c @@ -82,11 +82,10 @@ create_handle(struct iptables_restore_cb *cb, const char *tablename) handle = cb->ops->init(tablename); } - if (!handle) { + if (!handle) xtables_error(PARAMETER_PROBLEM, "%s: unable to initialize " "table '%s'\n", xt_params->program_name, tablename); - exit(1); - } + return handle; } @@ -207,12 +206,11 @@ ip46tables_restore_main(struct iptables_restore_cb *cb, int argc, char *argv[]) table = strtok(buffer+1, " \t\n"); DEBUGP("line %u, table '%s'\n", line, table); - if (!table) { + if (!table) xtables_error(PARAMETER_PROBLEM, "%s: line %u table name invalid\n", xt_params->program_name, line); - exit(1); - } + strncpy(curtable, table, XT_TABLE_MAXNAMELEN); curtable[XT_TABLE_MAXNAMELEN] = '\0'; @@ -248,12 +246,10 @@ ip46tables_restore_main(struct iptables_restore_cb *cb, int argc, char *argv[]) chain = strtok(buffer+1, " \t\n"); DEBUGP("line %u, chain '%s'\n", line, chain); - if (!chain) { + if (!chain) xtables_error(PARAMETER_PROBLEM, "%s: line %u chain name invalid\n", xt_params->program_name, line); - exit(1); - } if (strlen(chain) >= XT_EXTENSION_MAXNAMELEN) xtables_error(PARAMETER_PROBLEM, @@ -281,12 +277,10 @@ ip46tables_restore_main(struct iptables_restore_cb *cb, int argc, char *argv[]) policy = strtok(NULL, " \t\n"); DEBUGP("line %u, policy '%s'\n", line, policy); - if (!policy) { + if (!policy) xtables_error(PARAMETER_PROBLEM, "%s: line %u policy invalid\n", xt_params->program_name, line); - exit(1); - } if (strcmp(policy, "-") != 0) { struct xt_counters count = {}; diff --git a/iptables/iptables-xml.c b/iptables/iptables-xml.c index 9d9ce6d4..36ad7845 100644 --- a/iptables/iptables-xml.c +++ b/iptables/iptables-xml.c @@ -208,12 +208,11 @@ needChain(char *chain) static void saveChain(char *chain, char *policy, struct xt_counters *ctr) { - if (nextChain >= maxChains) { + if (nextChain >= maxChains) xtables_error(PARAMETER_PROBLEM, "%s: line %u chain name invalid\n", prog_name, line); - exit(1); - }; + chains[nextChain].chain = strdup(chain); chains[nextChain].policy = strdup(policy); chains[nextChain].count = *ctr; @@ -606,12 +605,11 @@ iptables_xml_main(int argc, char *argv[]) table = strtok(buffer + 1, " \t\n"); DEBUGP("line %u, table '%s'\n", line, table); - if (!table) { + if (!table) xtables_error(PARAMETER_PROBLEM, "%s: line %u table name invalid\n", prog_name, line); - exit(1); - } + openTable(table); ret = 1; @@ -623,23 +621,19 @@ iptables_xml_main(int argc, char *argv[]) chain = strtok(buffer + 1, " \t\n"); DEBUGP("line %u, chain '%s'\n", line, chain); - if (!chain) { + if (!chain) xtables_error(PARAMETER_PROBLEM, "%s: line %u chain name invalid\n", prog_name, line); - exit(1); - } DEBUGP("Creating new chain '%s'\n", chain); policy = strtok(NULL, " \t\n"); DEBUGP("line %u, policy '%s'\n", line, policy); - if (!policy) { + if (!policy) xtables_error(PARAMETER_PROBLEM, "%s: line %u policy invalid\n", prog_name, line); - exit(1); - } ctrs = strtok(NULL, " \t\n"); parse_counters(ctrs, &count); @@ -735,13 +729,11 @@ iptables_xml_main(int argc, char *argv[]) param_buffer[1] != '-' && strchr(param_buffer, 't')) || (!strncmp(param_buffer, "--t", 3) && - !strncmp(param_buffer, "--table", strlen(param_buffer)))) { + !strncmp(param_buffer, "--table", strlen(param_buffer)))) xtables_error(PARAMETER_PROBLEM, "Line %u seems to have a " "-t table option.\n", line); - exit(1); - } add_argv(param_buffer, quoted); if (newargc >= 2 diff --git a/iptables/nft.c b/iptables/nft.c index 8047a51f..90bb0c63 100644 --- a/iptables/nft.c +++ b/iptables/nft.c @@ -2517,10 +2517,8 @@ int nft_rule_list(struct nft_handle *h, const char *chain, const char *table, ops = nft_family_ops_lookup(h->family); - if (!nft_is_table_compatible(h, table)) { + if (!nft_is_table_compatible(h, table)) xtables_error(OTHER_PROBLEM, "table `%s' is incompatible, use 'nft' tool.\n", table); - return 0; - } list = nft_chain_list_get(h, table); if (!list) @@ -2620,10 +2618,8 @@ int nft_rule_list_save(struct nft_handle *h, const char *chain, nft_xt_builtin_init(h, table); - if (!nft_is_table_compatible(h, table)) { + if (!nft_is_table_compatible(h, table)) xtables_error(OTHER_PROBLEM, "table `%s' is incompatible, use 'nft' tool.\n", table); - return 0; - } list = nft_chain_list_get(h, table); if (!list) diff --git a/iptables/xshared.c b/iptables/xshared.c index 36a2ec5f..5e6cd4ae 100644 --- a/iptables/xshared.c +++ b/iptables/xshared.c @@ -181,7 +181,6 @@ int command_default(struct iptables_command_state *cs, xtables_error(PARAMETER_PROBLEM, "unknown option " "\"%s\"", cs->argv[optind-1]); xtables_error(PARAMETER_PROBLEM, "Unknown arg \"%s\"", optarg); - return 0; } static mainfunc_t subcmd_get(const char *cmd, const struct subcommand *cb) diff --git a/iptables/xtables-restore.c b/iptables/xtables-restore.c index f930f5ba..27e65b97 100644 --- a/iptables/xtables-restore.c +++ b/iptables/xtables-restore.c @@ -131,12 +131,11 @@ void xtables_restore_parse(struct nft_handle *h, table = strtok(buffer+1, " \t\n"); DEBUGP("line %u, table '%s'\n", line, table); - if (!table) { + if (!table) xtables_error(PARAMETER_PROBLEM, "%s: line %u table name invalid\n", xt_params->program_name, line); - exit(1); - } + curtable = nft_table_builtin_find(h, table); if (!curtable) xtables_error(PARAMETER_PROBLEM, @@ -168,12 +167,10 @@ void xtables_restore_parse(struct nft_handle *h, chain = strtok(buffer+1, " \t\n"); DEBUGP("line %u, chain '%s'\n", line, chain); - if (!chain) { + if (!chain) xtables_error(PARAMETER_PROBLEM, "%s: line %u chain name invalid\n", xt_params->program_name, line); - exit(1); - } if (strlen(chain) >= XT_EXTENSION_MAXNAMELEN) xtables_error(PARAMETER_PROBLEM, @@ -183,12 +180,10 @@ void xtables_restore_parse(struct nft_handle *h, policy = strtok(NULL, " \t\n"); DEBUGP("line %u, policy '%s'\n", line, policy); - if (!policy) { + if (!policy) xtables_error(PARAMETER_PROBLEM, "%s: line %u policy invalid\n", xt_params->program_name, line); - exit(1); - } if (nft_chain_builtin_find(curtable, chain)) { if (counters) { -- cgit v1.2.3