/* Function which parses command options; returns true if it ate an option */ static int parse(int c, char **argv, int invert, unsigned int *flags, const void *entry, struct xt_entry_match **match) { struct xt_layer7_info *layer7info = (struct xt_layer7_info *)(*match)->data; switch (c) { case 'p': parse_layer7_protocol(argv[optind-1], layer7info); if (invert) layer7info->invert = true; *flags = 1; break; case 'd': if(strlen(argv[optind-1]) >= MAX_FN_LEN) xtables_error(PARAMETER_PROBLEM, "directory name too long\n"); strncpy(l7dir, argv[optind-1], MAX_FN_LEN); *flags = 1; break; default: return 0; } return 1; }
/* Function which parses command options; returns true if it ate an option */ static int parse(int c, char **argv, int invert, unsigned int *flags, const struct ipt_entry *entry, unsigned int *nfcache, struct ipt_entry_match **match) { struct ipt_layer7_info *layer7info = (struct ipt_layer7_info *)(*match)->data; switch (c) { case '1': check_inverse(optarg, &invert, &optind, 0); parse_layer7_protocol(argv[optind-1], layer7info); if (invert) layer7info->invert = 1; *flags = 1; break; case '2': /* not going to use this, but maybe we need to strip a ! anyway (?) */ check_inverse(optarg, &invert, &optind, 0); if(strlen(argv[optind-1]) >= MAX_FN_LEN) exit_error(PARAMETER_PROBLEM, "directory name too long\n"); strncpy(l7dir, argv[optind-1], MAX_FN_LEN); *flags = 1; break; default: return 0; } return 1; }