blob: c9befccca94dbb4f2869efd52238b6be750f986b [file] [log] [blame]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <getopt.h>
#include "../include/ebtables_u.h"
#include <linux/netfilter/xt_AUDIT.h>
#define AUDIT_TYPE '1'
static struct option opts[] =
{
{ "audit-type" , required_argument, 0, AUDIT_TYPE },
{ 0 }
};
static void print_help()
{
printf(
"AUDIT target options:\n"
" --audit-type TYPE : Set action type to record.\n");
}
static void init(struct ebt_entry_target *target)
{
struct xt_AUDIT_info *info = (struct xt_AUDIT_info *) target->data;
info->type = 0;
}
static int parse(int c, char **argv, int argc,
const struct ebt_u_entry *entry, unsigned int *flags,
struct ebt_entry_target **target)
{
struct xt_AUDIT_info *info = (struct xt_AUDIT_info *) (*target)->data;
switch (c) {
case AUDIT_TYPE:
ebt_check_option2(flags, AUDIT_TYPE);
if (!strcasecmp(optarg, "accept"))
info->type = XT_AUDIT_TYPE_ACCEPT;
else if (!strcasecmp(optarg, "drop"))
info->type = XT_AUDIT_TYPE_DROP;
else if (!strcasecmp(optarg, "reject"))
info->type = XT_AUDIT_TYPE_REJECT;
else
ebt_print_error2("Bad action type value `%s'", optarg);
break;
default:
return 0;
}
return 1;
}
static void final_check(const struct ebt_u_entry *entry,
const struct ebt_entry_target *target, const char *name,
unsigned int hookmask, unsigned int time)
{
}
static void print(const struct ebt_u_entry *entry,
const struct ebt_entry_target *target)
{
const struct xt_AUDIT_info *info =
(const struct xt_AUDIT_info *) target->data;
printf("--audit-type ");
switch(info->type) {
case XT_AUDIT_TYPE_ACCEPT:
printf("accept");
break;
case XT_AUDIT_TYPE_DROP:
printf("drop");
break;
case XT_AUDIT_TYPE_REJECT:
printf("reject");
break;
}
}
static int compare(const struct ebt_entry_target *t1,
const struct ebt_entry_target *t2)
{
const struct xt_AUDIT_info *info1 =
(const struct xt_AUDIT_info *) t1->data;
const struct xt_AUDIT_info *info2 =
(const struct xt_AUDIT_info *) t2->data;
return info1->type == info2->type;
}
static struct ebt_u_target AUDIT_target =
{
.name = "AUDIT",
.size = sizeof(struct xt_AUDIT_info),
.help = print_help,
.init = init,
.parse = parse,
.final_check = final_check,
.print = print,
.compare = compare,
.extra_ops = opts,
};
static void _INIT(void)
{
ebt_register_target(&AUDIT_target);
}