Commit c7961075 authored by Simon Kelley's avatar Simon Kelley

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

parent ab6ede7e
...@@ -46,6 +46,9 @@ version 2.66 ...@@ -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
......
...@@ -518,8 +518,7 @@ u16 lookup_dhcp_opt(int prot, char *name) ...@@ -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,14 +538,9 @@ u16 lookup_dhcp_len(int prot, u16 val) ...@@ -539,14 +538,9 @@ 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)
{ return t[i].size & ~OT_DEC;
if (t[i].size & OT_INTERNAL)
return 0; return 0;
return t[i].size & ~OT_DEC;
}
return 0;
} }
char *option_string(int prot, unsigned int opt, unsigned char *val, int opt_len, char *buf, int buf_len) char *option_string(int prot, unsigned int opt, unsigned char *val, int opt_len, char *buf, int buf_len)
......
...@@ -768,6 +768,8 @@ static int parse_dhcp_opt(char *errstr, char *arg, int flags) ...@@ -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) ...@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment