static int brlog_parse(int c, char **argv, int invert, unsigned int *flags, const void *entry, struct xt_entry_target **target) { struct ebt_log_info *loginfo = (struct ebt_log_info *)(*target)->data; long int i; char *end; switch (c) { case LOG_PREFIX: if (invert) xtables_error(PARAMETER_PROBLEM, "Unexpected `!` after --log-prefix"); if (strlen(optarg) > sizeof(loginfo->prefix) - 1) xtables_error(PARAMETER_PROBLEM, "Prefix too long"); if (strchr(optarg, '\"')) xtables_error(PARAMETER_PROBLEM, "Use of \\\" is not allowed" " in the prefix"); strcpy((char *)loginfo->prefix, (char *)optarg); break; case LOG_LEVEL: i = strtol(optarg, &end, 16); if (*end != '\0' || i < 0 || i > 7) loginfo->loglevel = name_to_loglevel(optarg); else loginfo->loglevel = i; if (loginfo->loglevel == 9) xtables_error(PARAMETER_PROBLEM, "Problem with the log-level"); break; case LOG_IP: loginfo->bitmask |= log_chk_inv(invert, EBT_LOG_IP, "-ip"); break; case LOG_ARP: loginfo->bitmask |= log_chk_inv(invert, EBT_LOG_ARP, "-arp"); break; case LOG_LOG: loginfo->bitmask |= log_chk_inv(invert, 0, ""); break; case LOG_IP6: loginfo->bitmask |= log_chk_inv(invert, EBT_LOG_IP6, "-ip6"); break; default: return 0; } *flags |= loginfo->bitmask; return 1; }
static int parse(int c, char **argv, int argc, const struct ebt_u_entry *entry, unsigned int *flags, struct ebt_entry_watcher **watcher) { struct ebt_log_info *loginfo = (struct ebt_log_info *)(*watcher)->data; long int i; char *end; switch (c) { case LOG_PREFIX: check_option(flags, OPT_PREFIX); if (strlen(optarg) > sizeof(loginfo->prefix) - 1) print_error("Prefix too long"); strcpy(loginfo->prefix, optarg); break; case LOG_LEVEL: check_option(flags, OPT_LEVEL); i = strtol(optarg, &end, 16); if (*end != '\0' || i < 0 || i > 7) loginfo->loglevel = name_to_loglevel(optarg); else loginfo->loglevel = i; if (loginfo->loglevel == 9) print_error("Problem with the log-level"); break; case LOG_IP: check_option(flags, OPT_IP); loginfo->bitmask |= EBT_LOG_IP; break; case LOG_ARP: check_option(flags, OPT_ARP); loginfo->bitmask |= EBT_LOG_ARP; break; case LOG_LOG: check_option(flags, OPT_LOG); break; default: return 0; } return 1; }
static int parse(int c, char **argv, int argc, const struct ebt_u_entry *entry, unsigned int *flags, struct ebt_entry_watcher **watcher) { struct ebt_log_info *loginfo = (struct ebt_log_info *)(*watcher)->data; long int i; char *end; switch (c) { case LOG_PREFIX: ebt_check_option2(flags, OPT_PREFIX); if (ebt_check_inverse(optarg)) ebt_print_error2("Unexpected `!' after --log-prefix"); if (strlen(optarg) > sizeof(loginfo->prefix) - 1) ebt_print_error2("Prefix too long"); if (strchr(optarg, '\"')) ebt_print_error2("Use of \\\" is not allowed in the prefix"); strcpy((char *)loginfo->prefix, (char *)optarg); break; case LOG_LEVEL: ebt_check_option2(flags, OPT_LEVEL); i = strtol(optarg, &end, 16); if (*end != '\0' || i < 0 || i > 7) loginfo->loglevel = name_to_loglevel(optarg); else loginfo->loglevel = i; if (loginfo->loglevel == 9) ebt_print_error2("Problem with the log-level"); break; case LOG_IP: ebt_check_option2(flags, OPT_IP); if (ebt_check_inverse(optarg)) ebt_print_error2("Unexpected `!' after --log-ip"); loginfo->bitmask |= EBT_LOG_IP; break; case LOG_ARP: ebt_check_option2(flags, OPT_ARP); if (ebt_check_inverse(optarg)) ebt_print_error2("Unexpected `!' after --log-arp"); loginfo->bitmask |= EBT_LOG_ARP; break; case LOG_LOG: ebt_check_option2(flags, OPT_LOG); if (ebt_check_inverse(optarg)) ebt_print_error2("Unexpected `!' after --log"); break; case LOG_IP6: ebt_check_option2(flags, OPT_IP6); if (ebt_check_inverse(optarg)) ebt_print_error2("Unexpected `!' after --log-ip6"); loginfo->bitmask |= EBT_LOG_IP6; break; default: return 0; } return 1; }