summaryrefslogtreecommitdiffstats
path: root/userspace
diff options
context:
space:
mode:
Diffstat (limited to 'userspace')
-rw-r--r--userspace/ebtables2/extensions/ebt_ip.c13
-rw-r--r--userspace/ebtables2/extensions/ebt_vlan.c1
2 files changed, 10 insertions, 4 deletions
diff --git a/userspace/ebtables2/extensions/ebt_ip.c b/userspace/ebtables2/extensions/ebt_ip.c
index 7a054ce..9ad272b 100644
--- a/userspace/ebtables2/extensions/ebt_ip.c
+++ b/userspace/ebtables2/extensions/ebt_ip.c
@@ -57,6 +57,8 @@ static struct option opts[] =
{ 0 }
};
+struct protoent *p_ent;
+
// put the ip string into 4 bytes
static int undot_ip(char *ip, unsigned char *ip2)
{
@@ -313,9 +315,14 @@ static int parse(int c, char **argv, int argc, const struct ebt_u_entry *entry,
ipinfo->invflags |= EBT_IP_PROTO;
if (optind > argc)
print_error("Missing IP protocol argument");
- i = strtol(argv[optind - 1], &end, 10);
- if (i < 0 || i > 255 || *end != '\0')
- print_error("Problem with specified IP protocol");
+ (unsigned char) i = strtoul(argv[optind - 1], &end, 10);
+ if ((i > 0xFF) || (*end != '\0')) {
+ p_ent = getprotobyname(argv[optind - 1]);
+ if (p_ent == NULL)
+ print_error("Unknown Internet protocol %s ",
+ argv[optind - 1]);
+ i = p_ent->p_proto;
+ }
ipinfo->protocol = i;
ipinfo->bitmask |= EBT_IP_PROTO;
break;
diff --git a/userspace/ebtables2/extensions/ebt_vlan.c b/userspace/ebtables2/extensions/ebt_vlan.c
index 2c3fa13..84722ea 100644
--- a/userspace/ebtables2/extensions/ebt_vlan.c
+++ b/userspace/ebtables2/extensions/ebt_vlan.c
@@ -231,7 +231,6 @@ print(const struct ebt_u_entry *entry, const struct ebt_entry_match *match)
struct ebt_vlan_info *vlaninfo =
(struct ebt_vlan_info *) match->data;
- char ethertype_name[21];
/*
* Print VLAN ID if they are specified
*/