Пример #1
0
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;
}
Пример #3
0
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;
}