mirror of
https://gitlab.isc.org/isc-projects/dhcp
synced 2025-08-31 14:25:41 +00:00
fix dhcp6.status-code success parsing
This commit is contained in:
3
RELNOTES
3
RELNOTES
@@ -82,6 +82,9 @@ suggested fixes to <dhcp-users@isc.org>.
|
||||
- A bug was fixed in the dhclient-script for BSDs to correctly carry error
|
||||
codes through some conditions.
|
||||
|
||||
- The parsing of some options in the dhclient lease file, in particular
|
||||
the success DHCPv6 status-code, was fixed.
|
||||
|
||||
Changes since 4.0.0b2
|
||||
|
||||
- Clarified error message when lease limit exceeded
|
||||
|
@@ -59,6 +59,7 @@ struct enumeration *find_enumeration (const char *name, int length)
|
||||
|
||||
struct enumeration_value *find_enumeration_value (const char *name,
|
||||
int length,
|
||||
unsigned *widthp,
|
||||
const char *value)
|
||||
{
|
||||
struct enumeration *e;
|
||||
@@ -66,6 +67,8 @@ struct enumeration_value *find_enumeration_value (const char *name,
|
||||
|
||||
e = find_enumeration (name, length);
|
||||
if (e) {
|
||||
if (widthp != NULL)
|
||||
*widthp = e->width;
|
||||
for (i = 0; e -> values [i].name; i++) {
|
||||
if (!strcmp (value, e -> values [i].name))
|
||||
return &e -> values [i];
|
||||
@@ -5103,12 +5106,12 @@ int parse_option_token (rv, cfile, fmt, expr, uniform, lookups)
|
||||
"identifier expected");
|
||||
goto foo;
|
||||
}
|
||||
e = find_enumeration_value (f, (*fmt) - f, val);
|
||||
e = find_enumeration_value (f, (*fmt) - f, &len, val);
|
||||
if (!e) {
|
||||
parse_warn (cfile, "unknown value");
|
||||
goto foo;
|
||||
}
|
||||
if (!make_const_data (&t, &e -> value, 1, 0, 1, MDL))
|
||||
if (!make_const_data (&t, &e -> value, len, 0, 1, MDL))
|
||||
return 0;
|
||||
break;
|
||||
|
||||
@@ -5284,6 +5287,12 @@ int parse_option_decl (oc, cfile)
|
||||
break;
|
||||
|
||||
case 't': /* Text string... */
|
||||
token = peek_token (&val,
|
||||
&len, cfile);
|
||||
if (token == SEMI && fmt[1] == 'o') {
|
||||
fmt++;
|
||||
break;
|
||||
}
|
||||
token = next_token (&val,
|
||||
&len, cfile);
|
||||
if (token != STRING) {
|
||||
@@ -5335,7 +5344,7 @@ int parse_option_decl (oc, cfile)
|
||||
break;
|
||||
|
||||
case 'N':
|
||||
f = fmt;
|
||||
f = fmt + 1;
|
||||
fmt = strchr (fmt, '.');
|
||||
if (!fmt) {
|
||||
parse_warn (cfile,
|
||||
@@ -5350,13 +5359,13 @@ int parse_option_decl (oc, cfile)
|
||||
"identifier expected");
|
||||
goto parse_exit;
|
||||
}
|
||||
e = find_enumeration_value (f, fmt - f, val);
|
||||
e = find_enumeration_value (f, fmt - f,
|
||||
&len, val);
|
||||
if (!e) {
|
||||
parse_warn (cfile,
|
||||
"unknown value");
|
||||
goto parse_exit;
|
||||
}
|
||||
len = 1;
|
||||
dp = &e -> value;
|
||||
goto alloc;
|
||||
|
||||
|
@@ -335,7 +335,7 @@ static struct option dhcpv6_options[] = {
|
||||
&dhcpv6_universe, 11, 1 },
|
||||
#endif
|
||||
{ "unicast", "6", &dhcpv6_universe, 12, 1 },
|
||||
{ "status-code", "Nstatus-codes.t", &dhcpv6_universe, 13, 1 },
|
||||
{ "status-code", "Nstatus-codes.to", &dhcpv6_universe, 13, 1 },
|
||||
{ "rapid-commit", "", &dhcpv6_universe, 14, 1 },
|
||||
#if 0
|
||||
/* XXX: user-class contents are of the form "StA" where the
|
||||
|
@@ -1681,6 +1681,7 @@ int ddns_removals(struct lease *, struct iaaddr *);
|
||||
void add_enumeration (struct enumeration *);
|
||||
struct enumeration *find_enumeration (const char *, int);
|
||||
struct enumeration_value *find_enumeration_value (const char *, int,
|
||||
unsigned *,
|
||||
const char *);
|
||||
void skip_to_semi PROTO ((struct parse *));
|
||||
void skip_to_rbrace PROTO ((struct parse *, int));
|
||||
|
Reference in New Issue
Block a user