]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
libnftables: Unexport enum nftables_exit_codes
authorPhil Sutter <phil@nwl.cc>
Mon, 13 Nov 2017 14:08:16 +0000 (15:08 +0100)
committerPablo Neira Ayuso <pablo@netfilter.org>
Thu, 16 Nov 2017 13:35:35 +0000 (14:35 +0100)
Apart from SUCCESS/FAILURE, these codes were not used by library
functions simply because NOMEM and NONL conditions lead to calling
exit() instead of propagating the error condition back up the call
stack.

Instead, make nft_run_cmd_from_*() return either 0 or -1 on error.
Usually errno will then contain more details about what happened and/or
there are messages in erec.

Calls to exit()/return in main() are adjusted to stay compatible.

Signed-off-by: Phil Sutter <phil@nwl.cc>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
include/nftables.h
include/nftables/nftables.h
src/libnftables.c
src/main.c

index d69079fe03e3a4eadd03e297e3861df7fdf67f2d..3bfa33e5cb336751663fda080d42247dd1058735 100644 (file)
@@ -35,6 +35,13 @@ struct nft_ctx {
        uint32_t                flags;
 };
 
+enum nftables_exit_codes {
+       NFT_EXIT_SUCCESS        = 0,
+       NFT_EXIT_FAILURE        = 1,
+       NFT_EXIT_NOMEM          = 2,
+       NFT_EXIT_NONL           = 3,
+};
+
 struct input_descriptor;
 struct location {
        const struct input_descriptor           *indesc;
index 4211be76e6e4004eb3dc3a9d8582cd600b618f46..8e59f2b2a59ab95e40add077aa317ec1590733ad 100644 (file)
@@ -38,16 +38,6 @@ enum nft_numeric_level {
  */
 #define NFT_CTX_DEFAULT                0
 
-/**
- * Exit codes returned by nft_run_cmd_from_*()
- */
-enum nftables_exit_codes {
-       NFT_EXIT_SUCCESS        = 0,
-       NFT_EXIT_FAILURE        = 1,
-       NFT_EXIT_NOMEM          = 2,
-       NFT_EXIT_NONL           = 3,
-};
-
 struct nft_ctx *nft_ctx_new(uint32_t flags);
 void nft_ctx_free(struct nft_ctx *ctx);
 
index dc6a5fdf3264032af9172a93181a9982faf64c0f..e8fa6742f7d174ff2f3a2ed5d693b07f36f4aa7b 100644 (file)
@@ -272,7 +272,7 @@ static const struct input_descriptor indesc_cmdline = {
 
 int nft_run_cmd_from_buffer(struct nft_ctx *nft, char *buf, size_t buflen)
 {
-       int rc = NFT_EXIT_SUCCESS;
+       int rc = 0;
        struct parser_state state;
        LIST_HEAD(msgs);
        void *scanner;
@@ -284,7 +284,7 @@ int nft_run_cmd_from_buffer(struct nft_ctx *nft, char *buf, size_t buflen)
        scanner_push_buffer(scanner, &indesc_cmdline, buf);
 
        if (nft_run(nft, nft->nf_sock, scanner, &state, &msgs) != 0)
-               rc = NFT_EXIT_FAILURE;
+               rc = -1;
 
        fp = nft_ctx_set_output(nft, stderr);
        erec_print_list(&nft->output, &msgs, nft->debug_mask);
@@ -306,18 +306,18 @@ int nft_run_cmd_from_filename(struct nft_ctx *nft, const char *filename)
        rc = cache_update(nft->nf_sock, &nft->cache, CMD_INVALID, &msgs,
                          nft->debug_mask, &nft->output);
        if (rc < 0)
-               return NFT_EXIT_FAILURE;
+               return -1;
 
        parser_init(nft->nf_sock, &nft->cache, &state,
                    &msgs, nft->debug_mask, &nft->output);
        scanner = scanner_init(&state);
        if (scanner_read_file(scanner, filename, &internal_location) < 0) {
-               rc = NFT_EXIT_FAILURE;
+               rc = -1;
                goto err;
        }
 
        if (nft_run(nft, nft->nf_sock, scanner, &state, &msgs) != 0)
-               rc = NFT_EXIT_FAILURE;
+               rc = -1;
 err:
        fp = nft_ctx_set_output(nft, stderr);
        erec_print_list(&nft->output, &msgs, nft->debug_mask);
index 529bedffc2e3b9d1771ef16b5e08e77876442f8b..ff7878c94ccb323074e172c999ea645f061869fc 100644 (file)
@@ -183,11 +183,11 @@ int main(int argc, char * const *argv)
                switch (val) {
                case OPT_HELP:
                        show_help(argv[0]);
-                       exit(NFT_EXIT_SUCCESS);
+                       exit(EXIT_SUCCESS);
                case OPT_VERSION:
                        printf("%s v%s (%s)\n",
                               PACKAGE_NAME, PACKAGE_VERSION, RELEASE_NAME);
-                       exit(NFT_EXIT_SUCCESS);
+                       exit(EXIT_SUCCESS);
                case OPT_CHECK:
                        nft_ctx_set_dry_run(nft, true);
                        break;
@@ -202,7 +202,7 @@ int main(int argc, char * const *argv)
                                fprintf(stderr,
                                        "Failed to add include path '%s'\n",
                                        optarg);
-                               exit(NFT_EXIT_FAILURE);
+                               exit(EXIT_FAILURE);
                        }
                        break;
                case OPT_NUMERIC:
@@ -211,7 +211,7 @@ int main(int argc, char * const *argv)
                                fprintf(stderr, "Too many numeric options "
                                                "used, max. %u\n",
                                        NFT_NUMERIC_ALL);
-                               exit(NFT_EXIT_FAILURE);
+                               exit(EXIT_FAILURE);
                        }
                        nft_ctx_output_set_numeric(nft, numeric + 1);
                        break;
@@ -241,7 +241,7 @@ int main(int argc, char * const *argv)
                                if (i == array_size(debug_param)) {
                                        fprintf(stderr, "invalid debug parameter `%s'\n",
                                                optarg);
-                                       exit(NFT_EXIT_FAILURE);
+                                       exit(EXIT_FAILURE);
                                }
 
                                if (end == NULL)
@@ -257,7 +257,7 @@ int main(int argc, char * const *argv)
                        nft_ctx_output_set_echo(nft, true);
                        break;
                case OPT_INVALID:
-                       exit(NFT_EXIT_FAILURE);
+                       exit(EXIT_FAILURE);
                }
        }
 
@@ -272,19 +272,19 @@ int main(int argc, char * const *argv)
                                strcat(buf, " ");
                }
                strcat(buf, "\n");
-               rc = nft_run_cmd_from_buffer(nft, buf, len + 2);
+               rc = !!nft_run_cmd_from_buffer(nft, buf, len + 2);
        } else if (filename != NULL) {
-               rc = nft_run_cmd_from_filename(nft, filename);
+               rc = !!nft_run_cmd_from_filename(nft, filename);
        } else if (interactive) {
                if (cli_init(nft) < 0) {
                        fprintf(stderr, "%s: interactive CLI not supported in this build\n",
                                argv[0]);
-                       exit(NFT_EXIT_FAILURE);
+                       exit(EXIT_FAILURE);
                }
-               return 0;
+               return EXIT_SUCCESS;
        } else {
                fprintf(stderr, "%s: no command specified\n", argv[0]);
-               exit(NFT_EXIT_FAILURE);
+               exit(EXIT_FAILURE);
        }
 
        xfree(buf);