diff options
author | David Hankins <dhankins@isc.org> | 2009-06-17 21:44:51 +0000 |
---|---|---|
committer | David Hankins <dhankins@isc.org> | 2009-06-17 21:44:51 +0000 |
commit | d548d43d2b7fd8ea9ee6c07fc6b05a3112fff59f (patch) | |
tree | d18b7d1598157d96ad77a62c68dfb4027b0831fb | |
parent | 773c3b32750be67dcf08dc0e4c119506f0454c60 (diff) | |
download | isc-dhcp-d548d43d2b7fd8ea9ee6c07fc6b05a3112fff59f.tar.gz |
- A bug was fixed that caused the 'conflict-done' state to fail to be parsed
in failover state records. [ISC-Bugs #19739]
-rw-r--r-- | RELNOTES | 3 | ||||
-rw-r--r-- | common/conflex.c | 95 | ||||
-rw-r--r-- | includes/dhctoken.h | 3 | ||||
-rw-r--r-- | server/confpars.c | 4 |
4 files changed, 68 insertions, 37 deletions
@@ -59,6 +59,9 @@ suggested fixes to <dhcp-users@isc.org>. failover connect yet (e.g.: connection refused, asynch socket connect() timeouts). +- A bug was fixed that caused the 'conflict-done' state to fail to be parsed + in failover state records. + Changes since 4.0.1 - Remove infinite loop in token_print_indent_concat(). diff --git a/common/conflex.c b/common/conflex.c index 35e5b533..ed837b01 100644 --- a/common/conflex.c +++ b/common/conflex.c @@ -769,46 +769,69 @@ intern(char *atom, enum dhcp_token dfv) { return BOUND; break; case 'c': - if (!strcasecmp (atom + 1, "ase")) + if (!strcasecmp(atom + 1, "ase")) return CASE; - if (!strcasecmp (atom + 1, "ommit")) - return COMMIT; - if (!strcasecmp (atom + 1, "ode")) - return CODE; - if (!strcasecmp (atom + 1, "onfig-option")) - return CONFIG_OPTION; - if (!strcasecmp (atom + 1, "heck")) + if (!strcasecmp(atom + 1, "heck")) return CHECK; - if (!strcasecmp (atom + 1, "lass")) - return CLASS; - if (!strcasecmp (atom + 1, "lose")) - return TOKEN_CLOSE; - if (!strcasecmp(atom + 1, "ompressed")) - return COMPRESSED; - if (!strcasecmp (atom + 1, "reate")) - return TOKEN_CREATE; - if (!strcasecmp (atom + 1, "iaddr")) + if (!strcasecmp(atom + 1, "iaddr")) return CIADDR; - if (!strncasecmp (atom + 1, "lient", 5)) { - if (!strcasecmp (atom + 6, "-identifier")) - return CLIENT_IDENTIFIER; - if (!strcasecmp (atom + 6, "-hostname")) - return CLIENT_HOSTNAME; - if (!strcasecmp (atom + 6, "-state")) - return CLIENT_STATE; - if (!strcasecmp (atom + 6, "-updates")) - return CLIENT_UPDATES; - if (!strcasecmp (atom + 6, "s")) - return CLIENTS; + if (isascii(atom[1]) && + tolower((unsigned char)atom[1]) == 'l') { + if (!strcasecmp(atom + 2, "ass")) + return CLASS; + if (!strncasecmp(atom + 2, "ient", 4)) { + if (!strcasecmp(atom + 6, "s")) + return CLIENTS; + if (atom[7] == '-') { + if (!strcasecmp(atom + 7, "hostname")) + return CLIENT_HOSTNAME; + if (!strcasecmp(atom + 7, "identifier")) + return CLIENT_IDENTIFIER; + if (!strcasecmp(atom + 7, "state")) + return CLIENT_STATE; + if (!strcasecmp(atom + 7, "updates")) + return CLIENT_UPDATES; + break; + } + break; + } + if (!strcasecmp(atom + 2, "ose")) + return TOKEN_CLOSE; + if (!strcasecmp(atom + 2, "tt")) + return CLTT; + break; } - if (!strcasecmp (atom + 1, "oncat")) - return CONCAT; - if (!strcasecmp (atom + 1, "onnect")) - return CONNECT; - if (!strcasecmp (atom + 1, "ommunications-interrupted")) - return COMMUNICATIONS_INTERRUPTED; - if (!strcasecmp (atom + 1, "ltt")) - return CLTT; + if (isascii(atom[1]) && + tolower((unsigned char)atom[1]) == 'o') { + if (!strcasecmp(atom + 2, "de")) + return CODE; + if (isascii(atom[2]) && + tolower((unsigned char)atom[2]) == 'm') { + if (!strcasecmp(atom + 3, "mit")) + return COMMIT; + if (!strcasecmp(atom + 3, + "munications-interrupted")) + return COMMUNICATIONS_INTERRUPTED; + if (!strcasecmp(atom + 3, "pressed")) + return COMPRESSED; + break; + } + if (isascii(atom[2]) && + tolower((unsigned char)atom[2]) == 'n') { + if (!strcasecmp(atom + 3, "cat")) + return CONCAT; + if (!strcasecmp(atom + 3, "fig-option")) + return CONFIG_OPTION; + if (!strcasecmp(atom + 3, "flict-done")) + return CONFLICT_DONE; + if (!strcasecmp(atom + 3, "nect")) + return CONNECT; + break; + } + break; + } + if (!strcasecmp(atom + 1, "reate")) + return TOKEN_CREATE; break; case 'd': if (!strcasecmp(atom + 1, "b-time-format")) diff --git a/includes/dhctoken.h b/includes/dhctoken.h index 2e5f243d..21b9d031 100644 --- a/includes/dhctoken.h +++ b/includes/dhctoken.h @@ -345,7 +345,8 @@ enum dhcp_token { RANGE6 = 648, WHITESPACE = 649, TOKEN_ALSO = 650, - AFTER = 651 + AFTER = 651, + CONFLICT_DONE = 660 }; #define is_identifier(x) ((x) >= FIRST_TOKEN && \ diff --git a/server/confpars.c b/server/confpars.c index a1c4bf0f..583a4c28 100644 --- a/server/confpars.c +++ b/server/confpars.c @@ -1276,6 +1276,10 @@ void parse_failover_state (cfile, state, stos) state_in = communications_interrupted; break; + case CONFLICT_DONE: + state_in = conflict_done; + break; + case RESOLUTION_INTERRUPTED: state_in = resolution_interrupted; break; |