/* * (C) 2012 by Pablo Neira Ayuso * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published * by the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This code has been sponsored by Vyatta Inc. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "nfct.h" static int nfct_cmd_version(int argc, char *argv[]); static int nfct_cmd_help(int argc, char *argv[]); static void usage(char *argv[]) { fprintf(stderr, "Usage: %s subsystem command [parameters]...\n", argv[0]); } void nfct_perror(const char *msg) { if (errno == 0) { fprintf(stderr, "nfct v%s: %s\n", VERSION, msg); } else { fprintf(stderr, "nfct v%s: %s: %s\n", VERSION, msg, strerror(errno)); } } int main(int argc, char *argv[]) { int subsys = NFCT_SUBSYS_NONE, ret = 0; if (argc < 2) { usage(argv); exit(EXIT_FAILURE); } if (strncmp(argv[1], "timeout", strlen(argv[1])) == 0) { subsys = NFCT_SUBSYS_TIMEOUT; } else if (strncmp(argv[1], "version", strlen(argv[1])) == 0) subsys = NFCT_SUBSYS_VERSION; else if (strncmp(argv[1], "help", strlen(argv[1])) == 0) subsys = NFCT_SUBSYS_HELP; else { fprintf(stderr, "nfct v%s: Unknown subsystem: %s\n", VERSION, argv[1]); usage(argv); exit(EXIT_FAILURE); } switch(subsys) { case NFCT_SUBSYS_TIMEOUT: ret = nfct_cmd_timeout_parse_params(argc, argv); break; case NFCT_SUBSYS_VERSION: ret = nfct_cmd_version(argc, argv); break; case NFCT_SUBSYS_HELP: ret = nfct_cmd_help(argc, argv); break; } return ret < 0 ? EXIT_FAILURE : EXIT_SUCCESS; } static const char version_msg[] = "nfct v%s: utility for the Netfilter's Connection Tracking System\n" "Copyright (C) 2012 Pablo Neira Ayuso \n" "This program comes with ABSOLUTELY NO WARRANTY.\n" "This is free software, and you are welcome to redistribute it under " "certain \nconditions; see LICENSE file distributed in this package " "for details.\n"; static int nfct_cmd_version(int argc, char *argv[]) { printf(version_msg, VERSION); return 0; } static const char help_msg[] = "nfct v%s: utility for the Netfilter's Connection Tracking System\n" "Usage: %s command [parameters]...\n\n" "Subsystem:\n" " timeout\t\tAllows definition of fine-grain timeout policies\n" " version\t\tDisplay version and disclaimer\n" " help\t\t\tDisplay this help message\n" "Commands:\n" " list [reset]\t\tList the accounting object table (and reset)\n" " add object-name\tAdd new accounting object to table\n" " delete object-name\tDelete existing accounting object\n" " get object-name\tGet existing accounting object\n" " flush\t\t\tFlush accounting object table\n"; static int nfct_cmd_help(int argc, char *argv[]) { printf(help_msg, VERSION, argv[0]); return 0; }