diff options
Diffstat (limited to 'userspace/ebtables2/extensions/ebt_nat.c')
-rw-r--r-- | userspace/ebtables2/extensions/ebt_nat.c | 48 |
1 files changed, 28 insertions, 20 deletions
diff --git a/userspace/ebtables2/extensions/ebt_nat.c b/userspace/ebtables2/extensions/ebt_nat.c index f2e79ca..5906ac4 100644 --- a/userspace/ebtables2/extensions/ebt_nat.c +++ b/userspace/ebtables2/extensions/ebt_nat.c @@ -1,3 +1,11 @@ +/* ebt_nat + * + * Authors: + * Bart De Schuymer <bdschuym@pandora.be> + * + * June, 2002 + */ + #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -73,17 +81,16 @@ static int parse_s(int c, char **argv, int argc, switch (c) { case NAT_S: - ebt_check_option(flags, OPT_SNAT); + ebt_check_option2(flags, OPT_SNAT); to_source_supplied = 1; if (!(addr = ether_aton(optarg))) - ebt_print_error("Problem with specified --to-source " - "mac"); + ebt_print_error2("Problem with specified --to-source mac"); memcpy(natinfo->mac, addr, ETH_ALEN); break; case NAT_S_TARGET: - ebt_check_option(flags, OPT_SNAT_TARGET); + ebt_check_option2(flags, OPT_SNAT_TARGET); if (FILL_TARGET(optarg, natinfo->target)) - ebt_print_error("Illegal --snat-target target"); + ebt_print_error2("Illegal --snat-target target"); break; default: return 0; @@ -102,17 +109,16 @@ static int parse_d(int c, char **argv, int argc, switch (c) { case NAT_D: - ebt_check_option(flags, OPT_DNAT); + ebt_check_option2(flags, OPT_DNAT); to_dest_supplied = 1; if (!(addr = ether_aton(optarg))) - ebt_print_error("Problem with specified " - "--to-destination mac"); + ebt_print_error2("Problem with specified --to-destination mac"); memcpy(natinfo->mac, addr, ETH_ALEN); break; case NAT_D_TARGET: - ebt_check_option(flags, OPT_DNAT_TARGET); + ebt_check_option2(flags, OPT_DNAT_TARGET); if (FILL_TARGET(optarg, natinfo->target)) - ebt_print_error("Illegal --dnat-target target"); + ebt_print_error2("Illegal --dnat-target target"); break; default: return 0; @@ -126,13 +132,14 @@ static void final_check_s(const struct ebt_u_entry *entry, { struct ebt_nat_info *natinfo = (struct ebt_nat_info *)target->data; - if (BASE_CHAIN && natinfo->target == EBT_RETURN) - ebt_print_error("--snat-target RETURN not allowed on base " - "chain"); + if (BASE_CHAIN && natinfo->target == EBT_RETURN) { + ebt_print_error("--snat-target RETURN not allowed on base chain"); + return; + } CLEAR_BASE_CHAIN_BIT; - if ((hookmask & ~(1 << NF_BR_POST_ROUTING)) || strcmp(name, "nat")) + if ((hookmask & ~(1 << NF_BR_POST_ROUTING)) || strcmp(name, "nat")) { ebt_print_error("Wrong chain for snat"); - if (time == 0 && to_source_supplied == 0) + } else if (time == 0 && to_source_supplied == 0) ebt_print_error("No snat address supplied"); } @@ -142,15 +149,16 @@ static void final_check_d(const struct ebt_u_entry *entry, { struct ebt_nat_info *natinfo = (struct ebt_nat_info *)target->data; - if (BASE_CHAIN && natinfo->target == EBT_RETURN) - ebt_print_error("--dnat-target RETURN not allowed on base " - "chain"); + if (BASE_CHAIN && natinfo->target == EBT_RETURN) { + ebt_print_error("--dnat-target RETURN not allowed on base chain"); + return; + } CLEAR_BASE_CHAIN_BIT; if (((hookmask & ~((1 << NF_BR_PRE_ROUTING) | (1 << NF_BR_LOCAL_OUT))) || strcmp(name, "nat")) && - ((hookmask & ~(1 << NF_BR_BROUTING)) || strcmp(name, "broute"))) + ((hookmask & ~(1 << NF_BR_BROUTING)) || strcmp(name, "broute"))) { ebt_print_error("Wrong chain for dnat"); - if (time == 0 && to_dest_supplied == 0) + } if (time == 0 && to_dest_supplied == 0) ebt_print_error("No dnat address supplied"); } |