Page MenuHomeFreeBSD

D23888.id68981.diff
No OneTemporary

D23888.id68981.diff

Index: sbin/ipfw/tables.c
===================================================================
--- sbin/ipfw/tables.c
+++ sbin/ipfw/tables.c
@@ -1168,7 +1168,7 @@
static void
tentry_fill_key_type(char *arg, ipfw_obj_tentry *tentry, uint8_t type,
- uint8_t tflags)
+ uint8_t tflags, uint32_t vmask)
{
char *p, *pp;
int mask, af;
@@ -1211,12 +1211,28 @@
af = AF_INET6;
} else {
/* Assume FQDN */
- if (lookup_host(arg, (struct in_addr *)paddr) != 0)
- errx(EX_NOHOST, "hostname ``%s'' unknown", arg);
+ if (vmask & IPFW_VTYPE_NH4) {
+ if (lookup_host(arg, (struct in_addr *)paddr) != 0)
+ errx(EX_NOHOST, "hostname ``%s'' unknown", arg);
- masklen = 32;
- type = IPFW_TABLE_ADDR;
- af = AF_INET;
+ masklen = 32;
+ type = IPFW_TABLE_ADDR;
+ af = AF_INET;
+ } else if (vmask & IPFW_VTYPE_NH6) {
+ struct addrinfo hints, *res;
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = AF_INET6;
+
+ if (getaddrinfo(arg, NULL, &hints, &res) != 0)
+ errx(EX_NOHOST, "hostname ``%s'' unknown", arg);
+
+ *paddr = ((struct sockaddr_in6 *) res->ai_addr)->sin6_addr;
+ freeaddrinfo(res);
+
+ masklen = 128;
+ type = IPFW_TABLE_ADDR;
+ af = AF_INET6;
+ }
}
break;
case IPFW_TABLE_INTERFACE:
@@ -1472,7 +1488,7 @@
vmask = IPFW_VTYPE_LEGACY;
}
- tentry_fill_key_type(key, tent, type, tflags);
+ tentry_fill_key_type(key, tent, type, tflags, vmask);
*ptype = type;
*pvmask = vmask;
@@ -1610,18 +1626,17 @@
}
break;
case IPFW_VTYPE_NH6:
- if (strchr(n, ':') != NULL) {
- memset(&hints, 0, sizeof(hints));
- hints.ai_family = AF_INET6;
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = AF_INET6;
+ if (strchr(n, ':') != NULL)
hints.ai_flags = AI_NUMERICHOST;
- if (getaddrinfo(n, NULL, &hints, &res) == 0) {
- v->nh6 = ((struct sockaddr_in6 *)
- res->ai_addr)->sin6_addr;
- v->zoneid = ((struct sockaddr_in6 *)
- res->ai_addr)->sin6_scope_id;
- freeaddrinfo(res);
- break;
- }
+ if (getaddrinfo(n, NULL, &hints, &res) == 0) {
+ v->nh6 = ((struct sockaddr_in6 *)
+ res->ai_addr)->sin6_addr;
+ v->zoneid = ((struct sockaddr_in6 *)
+ res->ai_addr)->sin6_scope_id;
+ freeaddrinfo(res);
+ break;
}
etype = "ipv6";
break;

File Metadata

Mime Type
text/plain
Expires
Wed, Nov 19, 11:53 PM (12 h, 4 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25691743
Default Alt Text
D23888.id68981.diff (2 KB)

Event Timeline