Don't erroneously reject some option names in --dhcp-match

This commit is contained in:
Simon Kelley
2013-02-28 15:17:58 +00:00
parent ab6ede7e04
commit c7961075c4
3 changed files with 11 additions and 10 deletions

View File

@@ -46,6 +46,9 @@ version 2.66
Add --ipset option. Thanks to Jason A. Donenfeld for the Add --ipset option. Thanks to Jason A. Donenfeld for the
patch. patch.
Don't erroneously reject some option names in --dhcp-match
options. Thnaks to Benedikt Hochstrasser for the bug report.
version 2.65 version 2.65
Fix regression which broke forwarding of queries sent via Fix regression which broke forwarding of queries sent via

View File

@@ -518,8 +518,7 @@ u16 lookup_dhcp_opt(int prot, char *name)
t = opttab; t = opttab;
for (i = 0; t[i].name; i++) for (i = 0; t[i].name; i++)
if (!(t[i].size & OT_INTERNAL) && if (strcasecmp(t[i].name, name) == 0)
strcasecmp(t[i].name, name) == 0)
return t[i].val; return t[i].val;
return 0; return 0;
@@ -539,12 +538,7 @@ u16 lookup_dhcp_len(int prot, u16 val)
for (i = 0; t[i].name; i++) for (i = 0; t[i].name; i++)
if (val == t[i].val) if (val == t[i].val)
{
if (t[i].size & OT_INTERNAL)
return 0;
return t[i].size & ~OT_DEC; return t[i].size & ~OT_DEC;
}
return 0; return 0;
} }

View File

@@ -768,6 +768,8 @@ static int parse_dhcp_opt(char *errstr, char *arg, int flags)
new->opt = lookup_dhcp_opt(AF_INET, arg+7); new->opt = lookup_dhcp_opt(AF_INET, arg+7);
opt_len = lookup_dhcp_len(AF_INET, new->opt); opt_len = lookup_dhcp_len(AF_INET, new->opt);
/* option:<optname> must follow tag and vendor string. */ /* option:<optname> must follow tag and vendor string. */
if ((opt_len & OT_INTERNAL) && flags != DHOPT_MATCH)
new->opt = 0;
break; break;
} }
#ifdef HAVE_DHCP6 #ifdef HAVE_DHCP6
@@ -786,6 +788,8 @@ static int parse_dhcp_opt(char *errstr, char *arg, int flags)
{ {
new->opt = lookup_dhcp_opt(AF_INET6, arg+8); new->opt = lookup_dhcp_opt(AF_INET6, arg+8);
opt_len = lookup_dhcp_len(AF_INET6, new->opt); opt_len = lookup_dhcp_len(AF_INET6, new->opt);
if ((opt_len & OT_INTERNAL) && flags != DHOPT_MATCH)
new->opt = 0;
} }
/* option6:<opt>|<optname> must follow tag and vendor string. */ /* option6:<opt>|<optname> must follow tag and vendor string. */
is6 = 1; is6 = 1;