Unix Technical Forum

SEO

vBulletin Search Engine Optimization


Go Back   Unix Technical Forum > Unix Operating Systems > OpenBSD > mailing.openbsd.tech

Register FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 02-18-2008, 08:32 AM
Theo de Raadt
 
Posts: n/a
Default dhcpd/dhclient code simplification

I would like to hear test reports for this from as many people as
possible. I not only made the keyword lookup table driven, but
I removed grammer components from each that only the other uses.

Please reply just to me. Thanks.


Index: sbin/dhclient/clparse.c
================================================== =================
RCS file: /cvs/src/sbin/dhclient/clparse.c,v
retrieving revision 1.26
diff -u -r1.26 clparse.c
--- sbin/dhclient/clparse.c 2 Aug 2005 02:34:03 -0000 1.26
+++ sbin/dhclient/clparse.c 17 Apr 2006 23:03:40 -0000
@@ -123,7 +123,7 @@
token = next_token(&val, cfile);
if (token == EOF)
break;
- if (token != LEASE) {
+ if (token != TOK_LEASE) {
warning("Corrupt lease file - possible data loss!");
skip_to_semi(cfile);
break;
@@ -161,75 +161,75 @@
int token, code;

switch (next_token(&val, cfile)) {
- case SEND:
+ case TOK_SEND:
parse_option_decl(cfile, &config->send_options[0]);
return;
- case DEFAULT:
+ case TOK_DEFAULT:
code = parse_option_decl(cfile, &config->defaults[0]);
if (code != -1)
config->default_actions[code] = ACTION_DEFAULT;
return;
- case SUPERSEDE:
+ case TOK_SUPERSEDE:
code = parse_option_decl(cfile, &config->defaults[0]);
if (code != -1)
config->default_actions[code] = ACTION_SUPERSEDE;
return;
- case APPEND:
+ case TOK_APPEND:
code = parse_option_decl(cfile, &config->defaults[0]);
if (code != -1)
config->default_actions[code] = ACTION_APPEND;
return;
- case PREPEND:
+ case TOK_PREPEND:
code = parse_option_decl(cfile, &config->defaults[0]);
if (code != -1)
config->default_actions[code] = ACTION_PREPEND;
return;
- case MEDIA:
+ case TOK_MEDIA:
parse_string_list(cfile, &config->media, 1);
return;
- case HARDWARE:
+ case TOK_HARDWARE:
parse_hardware_param(cfile, &ifi->hw_address);
return;
- case REQUEST:
+ case TOK_REQUEST:
config->requested_option_count =
parse_option_list(cfile, config->requested_options);
return;
- case REQUIRE:
+ case TOK_REQUIRE:
memset(config->required_options, 0,
sizeof(config->required_options));
parse_option_list(cfile, config->required_options);
return;
- case TIMEOUT:
+ case TOK_TIMEOUT:
parse_lease_time(cfile, &config->timeout);
return;
- case RETRY:
+ case TOK_RETRY:
parse_lease_time(cfile, &config->retry_interval);
return;
- case SELECT_TIMEOUT:
+ case TOK_SELECT_TIMEOUT:
parse_lease_time(cfile, &config->select_interval);
return;
- case REBOOT:
+ case TOK_REBOOT:
parse_lease_time(cfile, &config->reboot_timeout);
return;
- case BACKOFF_CUTOFF:
+ case TOK_BACKOFF_CUTOFF:
parse_lease_time(cfile, &config->backoff_cutoff);
return;
- case INITIAL_INTERVAL:
+ case TOK_INITIAL_INTERVAL:
parse_lease_time(cfile, &config->initial_interval);
return;
- case SCRIPT:
+ case TOK_SCRIPT:
config->script_name = parse_string(cfile);
return;
- case INTERFACE:
+ case TOK_INTERFACE:
parse_interface_declaration(cfile);
return;
- case LEASE:
+ case TOK_LEASE:
parse_client_lease_statement(cfile, 1);
return;
- case ALIAS:
+ case TOK_ALIAS:
parse_client_lease_statement(cfile, 2);
return;
- case REJECT:
+ case TOK_REJECT:
parse_reject_statement(cfile);
return;
default:
@@ -238,7 +238,7 @@
break;
}
token = next_token(&val, cfile);
- if (token != SEMI) {
+ if (token != ';') {
parse_warn("semicolon expected.");
skip_to_semi(cfile);
}
@@ -252,11 +252,11 @@
int len;

token = peek_token(&val, cfile);
- if (token == NUMBER_OR_NAME || token == NUMBER) {
+ if (token == TOK_NUMBER_OR_NAME || token == TOK_NUMBER) {
len = 0;
do {
token = next_token(&val, cfile);
- if (token != NUMBER && token != NUMBER_OR_NAME) {
+ if (token != TOK_NUMBER && token != TOK_NUMBER_OR_NAME) {
parse_warn("expecting hexadecimal constant.");
skip_to_semi(cfile);
return (0);
@@ -268,11 +268,11 @@
return (0);
}
token = peek_token(&val, cfile);
- if (token == COLON)
+ if (token == ':')
token = next_token(&val, cfile);
- } while (token == COLON);
+ } while (token == ':');
val = (char *)buf;
- } else if (token == STRING) {
+ } else if (token == TOK_STRING) {
token = next_token(&val, cfile);
len = strlen(val);
if (len + 1 > max) {
@@ -324,8 +324,8 @@
return (0);
}
token = next_token(&val, cfile);
- } while (token == COMMA);
- if (token != SEMI) {
+ } while (token == ',');
+ if (token != ';') {
parse_warn("expecting semicolon.");
skip_to_semi(cfile);
return (0);
@@ -344,7 +344,7 @@
int token;

token = next_token(&val, cfile);
- if (token != STRING) {
+ if (token != TOK_STRING) {
parse_warn("expecting interface name (in quotes).");
skip_to_semi(cfile);
return;
@@ -356,7 +356,7 @@
}

token = next_token(&val, cfile);
- if (token != LBRACE) {
+ if (token != '{') {
parse_warn("expecting left brace.");
skip_to_semi(cfile);
return;
@@ -368,7 +368,7 @@
parse_warn("unterminated interface declaration.");
return;
}
- if (token == RBRACE)
+ if (token == '}')
break;
parse_client_statement(cfile);
} while (1);
@@ -393,7 +393,7 @@
char *val;

token = next_token(&val, cfile);
- if (token != LBRACE) {
+ if (token != '{') {
parse_warn("expecting left brace.");
skip_to_semi(cfile);
return;
@@ -411,7 +411,7 @@
parse_warn("unterminated lease declaration.");
return;
}
- if (token == RBRACE)
+ if (token == '}')
break;
parse_client_lease_declaration(cfile, lease, &ip);
} while (1);
@@ -513,12 +513,12 @@
int token;

switch (next_token(&val, cfile)) {
- case BOOTP:
+ case TOK_BOOTP:
lease->is_bootp = 1;
break;
- case INTERFACE:
+ case TOK_INTERFACE:
token = next_token(&val, cfile);
- if (token != STRING) {
+ if (token != TOK_STRING) {
parse_warn("expecting interface name (in quotes).");
skip_to_semi(cfile);
break;
@@ -531,29 +531,29 @@
}
*ipp = ifi;
break;
- case FIXED_ADDR:
+ case TOK_FIXED_ADDR:
if (!parse_ip_addr(cfile, &lease->address))
return;
break;
- case MEDIUM:
+ case TOK_MEDIUM:
parse_string_list(cfile, &lease->medium, 0);
return;
- case FILENAME:
+ case TOK_FILENAME:
lease->filename = parse_string(cfile);
return;
- case SERVER_NAME:
+ case TOK_SERVER_NAME:
lease->server_name = parse_string(cfile);
return;
- case RENEW:
+ case TOK_RENEW:
lease->renewal = parse_date(cfile);
return;
- case REBIND:
+ case TOK_REBIND:
lease->rebind = parse_date(cfile);
return;
- case EXPIRE:
+ case TOK_EXPIRE:
lease->expiry = parse_date(cfile);
return;
- case OPTION:
+ case TOK_OPTION:
parse_option_decl(cfile, lease->options);
return;
default:
@@ -562,7 +562,7 @@
break;
}
token = next_token(&val, cfile);
- if (token != SEMI) {
+ if (token != ';') {
parse_warn("expecting semicolon.");
skip_to_semi(cfile);
}
@@ -585,7 +585,7 @@
token = next_token(&val, cfile);
if (!is_identifier(token)) {
parse_warn("expecting identifier after option keyword.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return (-1);
}
@@ -615,7 +615,7 @@
break;
case 't': /* Text string... */
token = next_token(&val, cfile);
- if (token != STRING) {
+ if (token != TOK_STRING) {
parse_warn("expecting string.");
skip_to_semi(cfile);
return (-1);
@@ -649,10 +649,10 @@
case 'L': /* Unsigned 32-bit integer... */
case 'l': /* Signed 32-bit integer... */
token = next_token(&val, cfile);
- if (token != NUMBER) {
+ if (token != TOK_NUMBER) {
need_number:
parse_warn("expecting number.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return (-1);
}
@@ -663,7 +663,7 @@
case 's': /* Signed 16-bit integer. */
case 'S': /* Unsigned 16-bit integer. */
token = next_token(&val, cfile);
- if (token != NUMBER)
+ if (token != TOK_NUMBER)
goto need_number;
convert_num(buf, val, 0, 16);
len = 2;
@@ -672,7 +672,7 @@
case 'b': /* Signed 8-bit integer. */
case 'B': /* Unsigned 8-bit integer. */
token = next_token(&val, cfile);
- if (token != NUMBER)
+ if (token != TOK_NUMBER)
goto need_number;
convert_num(buf, val, 0, 8);
len = 1;
@@ -683,7 +683,7 @@
if (!is_identifier(token)) {
parse_warn("expecting identifier.");
bad_flag:
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return (-1);
}
@@ -708,9 +708,9 @@
}
}
token = next_token(&val, cfile);
- } while (*fmt == 'A' && token == COMMA);
+ } while (*fmt == 'A' && token == ',');

- if (token != SEMI) {
+ if (token != ';') {
parse_warn("semicolon expected.");
skip_to_semi(cfile);
return (-1);
@@ -740,7 +740,7 @@

do {
token = next_token(&val, cfile);
- if (token != STRING) {
+ if (token != TOK_STRING) {
parse_warn("Expecting media options.");
skip_to_semi(cfile);
return;
@@ -760,9 +760,9 @@
cur = tmp;

token = next_token(&val, cfile);
- } while (multiple && token == COMMA);
+ } while (multiple && token == ',');

- if (token != SEMI) {
+ if (token != ';') {
parse_warn("expecting semicolon.");
skip_to_semi(cfile);
}
@@ -793,9 +793,9 @@
config->reject_list = list;

token = next_token(&val, cfile);
- } while (token == COMMA);
+ } while (token == ',');

- if (token != SEMI) {
+ if (token != ';') {
parse_warn("expecting semicolon.");
skip_to_semi(cfile);
}
Index: sbin/dhclient/conflex.c
================================================== =================
RCS file: /cvs/src/sbin/dhclient/conflex.c,v
retrieving revision 1.10
diff -u -r1.10 conflex.c
--- sbin/dhclient/conflex.c 2 Aug 2005 18:26:49 -0000 1.10
+++ sbin/dhclient/conflex.c 17 Apr 2006 23:10:01 -0000
@@ -250,13 +250,13 @@
}
tokbuf[i] = 0;
tval = tokbuf;
- return (STRING);
+ return (TOK_STRING);
}

static int
read_number(int c, FILE *cfile)
{
- int seenx = 0, i = 0, token = NUMBER;
+ int seenx = 0, i = 0, token = TOK_NUMBER;

tokbuf[i++] = c;
for (; i < sizeof(tokbuf); i++) {
@@ -284,7 +284,7 @@
read_num_or_name(int c, FILE *cfile)
{
int i = 0;
- int rv = NUMBER_OR_NAME;
+ int rv = TOK_NUMBER_OR_NAME;

tokbuf[i++] = c;
for (; i < sizeof(tokbuf); i++) {
@@ -295,7 +295,7 @@
break;
}
if (!isxdigit(c))
- rv = NAME;
+ rv = TOK_NAME;
tokbuf[i] = c;
}
if (i == sizeof(tokbuf)) {
@@ -308,218 +308,59 @@
return (intern(tval, rv));
}

+static const struct keywords {
+ const char *k_name;
+ int k_val;
+} keywords[] = {
+ { "alias", TOK_ALIAS },
+ { "append", TOK_APPEND },
+ { "backoff-cutoff", TOK_BACKOFF_CUTOFF },
+ { "bootp", TOK_BOOTP },
+ { "default", TOK_DEFAULT },
+ { "deny", TOK_DENY },
+ { "ethernet", TOK_ETHERNET },
+ { "expire", TOK_EXPIRE },
+ { "fddi", TOK_FDDI },
+ { "filename", TOK_FILENAME },
+ { "fixed-address", TOK_FIXED_ADDR },
+ { "hardware", TOK_HARDWARE },
+ { "initial-interval", TOK_INITIAL_INTERVAL },
+ { "interface", TOK_INTERFACE },
+ { "lease", TOK_LEASE },
+ { "media", TOK_MEDIA },
+ { "medium", TOK_MEDIUM },
+ { "option", TOK_OPTION },
+ { "prepend", TOK_PREPEND },
+ { "rebind", TOK_REBIND },
+ { "reboot", TOK_REBOOT },
+ { "reject", TOK_REJECT },
+ { "renew", TOK_RENEW },
+ { "request", TOK_REQUEST },
+ { "require", TOK_REQUIRE },
+ { "retry", TOK_RETRY },
+ { "script", TOK_SCRIPT },
+ { "select-timeout", TOK_SELECT_TIMEOUT },
+ { "send", TOK_SEND },
+ { "server-name", TOK_SERVER_NAME },
+ { "supersede", TOK_SUPERSEDE },
+ { "timeout", TOK_TIMEOUT },
+ { "token-ring", TOK_TOKEN_RING }
+};
+
+int
+kw_cmp(const void *k, const void *e)
+{
+ return (strcasecmp(k, ((const struct keywords *)e)->k_name));
+}
+
static int
intern(char *atom, int dfv)
{
- if (!isascii(atom[0]))
- return (dfv);
+ const struct keywords *p;

- switch (tolower(atom[0])) {
- case 'a':
- if (!strcasecmp(atom + 1, "lways-reply-rfc1048"))
- return (ALWAYS_REPLY_RFC1048);
- if (!strcasecmp(atom + 1, "ppend"))
- return (APPEND);
- if (!strcasecmp(atom + 1, "llow"))
- return (ALLOW);
- if (!strcasecmp(atom + 1, "lias"))
- return (ALIAS);
- if (!strcasecmp(atom + 1, "bandoned"))
- return (ABANDONED);
- if (!strcasecmp(atom + 1, "uthoritative"))
- return (AUTHORITATIVE);
- break;
- case 'b':
- if (!strcasecmp(atom + 1, "ackoff-cutoff"))
- return (BACKOFF_CUTOFF);
- if (!strcasecmp(atom + 1, "ootp"))
- return (BOOTP);
- if (!strcasecmp(atom + 1, "ooting"))
- return (BOOTING);
- if (!strcasecmp(atom + 1, "oot-unknown-clients"))
- return (BOOT_UNKNOWN_CLIENTS);
- break;
- case 'c':
- if (!strcasecmp(atom + 1, "lass"))
- return (CLASS);
- if (!strcasecmp(atom + 1, "iaddr"))
- return (CIADDR);
- if (!strcasecmp(atom + 1, "lient-identifier"))
- return (CLIENT_IDENTIFIER);
- if (!strcasecmp(atom + 1, "lient-hostname"))
- return (CLIENT_HOSTNAME);
- break;
- case 'd':
- if (!strcasecmp(atom + 1, "omain"))
- return (DOMAIN);
- if (!strcasecmp(atom + 1, "eny"))
- return (DENY);
- if (!strncasecmp(atom + 1, "efault", 6)) {
- if (!atom[7])
- return (DEFAULT);
- if (!strcasecmp(atom + 7, "-lease-time"))
- return (DEFAULT_LEASE_TIME);
- break;
- }
- if (!strncasecmp(atom + 1, "ynamic-bootp", 12)) {
- if (!atom[13])
- return (DYNAMIC_BOOTP);
- if (!strcasecmp(atom + 13, "-lease-cutoff"))
- return (DYNAMIC_BOOTP_LEASE_CUTOFF);
- if (!strcasecmp(atom + 13, "-lease-length"))
- return (DYNAMIC_BOOTP_LEASE_LENGTH);
- break;
- }
- break;
- case 'e':
- if (!strcasecmp(atom + 1, "thernet"))
- return (ETHERNET);
- if (!strcasecmp(atom + 1, "nds"))
- return (ENDS);
- if (!strcasecmp(atom + 1, "xpire"))
- return (EXPIRE);
- break;
- case 'f':
- if (!strcasecmp(atom + 1, "ilename"))
- return (FILENAME);
- if (!strcasecmp(atom + 1, "ixed-address"))
- return (FIXED_ADDR);
- if (!strcasecmp(atom + 1, "ddi"))
- return (FDDI);
- break;
- case 'g':
- if (!strcasecmp(atom + 1, "iaddr"))
- return (GIADDR);
- if (!strcasecmp(atom + 1, "roup"))
- return (GROUP);
- if (!strcasecmp(atom + 1, "et-lease-hostnames"))
- return (GET_LEASE_HOSTNAMES);
- break;
- case 'h':
- if (!strcasecmp(atom + 1, "ost"))
- return (HOST);
- if (!strcasecmp(atom + 1, "ardware"))
- return (HARDWARE);
- if (!strcasecmp(atom + 1, "ostname"))
- return (HOSTNAME);
- break;
- case 'i':
- if (!strcasecmp(atom + 1, "nitial-interval"))
- return (INITIAL_INTERVAL);
- if (!strcasecmp(atom + 1, "nterface"))
- return (INTERFACE);
- break;
- case 'l':
- if (!strcasecmp(atom + 1, "ease"))
- return (LEASE);
- break;
- case 'm':
- if (!strcasecmp(atom + 1, "ax-lease-time"))
- return (MAX_LEASE_TIME);
- if (!strncasecmp(atom + 1, "edi", 3)) {
- if (!strcasecmp(atom + 4, "a"))
- return (MEDIA);
- if (!strcasecmp(atom + 4, "um"))
- return (MEDIUM);
- break;
- }
- break;
- case 'n':
- if (!strcasecmp(atom + 1, "ameserver"))
- return (NAMESERVER);
- if (!strcasecmp(atom + 1, "etmask"))
- return (NETMASK);
- if (!strcasecmp(atom + 1, "ext-server"))
- return (NEXT_SERVER);
- if (!strcasecmp(atom + 1, "ot"))
- return (TOKEN_NOT);
- break;
- case 'o':
- if (!strcasecmp(atom + 1, "ption"))
- return (OPTION);
- if (!strcasecmp(atom + 1, "ne-lease-per-client"))
- return (ONE_LEASE_PER_CLIENT);
- break;
- case 'p':
- if (!strcasecmp(atom + 1, "repend"))
- return (PREPEND);
- if (!strcasecmp(atom + 1, "acket"))
- return (PACKET);
- break;
- case 'r':
- if (!strcasecmp(atom + 1, "ange"))
- return (RANGE);
- if (!strcasecmp(atom + 1, "equest"))
- return (REQUEST);
- if (!strcasecmp(atom + 1, "equire"))
- return (REQUIRE);
- if (!strcasecmp(atom + 1, "etry"))
- return (RETRY);
- if (!strcasecmp(atom + 1, "enew"))
- return (RENEW);
- if (!strcasecmp(atom + 1, "ebind"))
- return (REBIND);
- if (!strcasecmp(atom + 1, "eboot"))
- return (REBOOT);
- if (!strcasecmp(atom + 1, "eject"))
- return (REJECT);
- break;
- case 's':
- if (!strcasecmp(atom + 1, "earch"))
- return (SEARCH);
- if (!strcasecmp(atom + 1, "tarts"))
- return (STARTS);
- if (!strcasecmp(atom + 1, "iaddr"))
- return (SIADDR);
- if (!strcasecmp(atom + 1, "ubnet"))
- return (SUBNET);
- if (!strcasecmp(atom + 1, "hared-network"))
- return (SHARED_NETWORK);
- if (!strcasecmp(atom + 1, "erver-name"))
- return (SERVER_NAME);
- if (!strcasecmp(atom + 1, "erver-identifier"))
- return (SERVER_IDENTIFIER);
- if (!strcasecmp(atom + 1, "elect-timeout"))
- return (SELECT_TIMEOUT);
- if (!strcasecmp(atom + 1, "end"))
- return (SEND);
- if (!strcasecmp(atom + 1, "cript"))
- return (SCRIPT);
- if (!strcasecmp(atom + 1, "upersede"))
- return (SUPERSEDE);
- break;
- case 't':
- if (!strcasecmp(atom + 1, "imestamp"))
- return (TIMESTAMP);
- if (!strcasecmp(atom + 1, "imeout"))
- return (TIMEOUT);
- if (!strcasecmp(atom + 1, "oken-ring"))
- return (TOKEN_RING);
- break;
- case 'u':
- if (!strncasecmp(atom + 1, "se", 2)) {
- if (!strcasecmp(atom + 3, "r-class"))
- return (USER_CLASS);
- if (!strcasecmp(atom + 3, "-host-decl-names"))
- return (USE_HOST_DECL_NAMES);
- if (!strcasecmp(atom + 3,
- "-lease-addr-for-default-route"))
- return (USE_LEASE_ADDR_FOR_DEFAULT_ROUTE);
- break;
- }
- if (!strcasecmp(atom + 1, "id"))
- return (UID);
- if (!strcasecmp(atom + 1, "nknown-clients"))
- return (UNKNOWN_CLIENTS);
- break;
- case 'v':
- if (!strcasecmp(atom + 1, "endor-class"))
- return (VENDOR_CLASS);
- break;
- case 'y':
- if (!strcasecmp(atom + 1, "iaddr"))
- return (YIADDR);
- break;
- }
+ p = bsearch(atom, keywords, sizeof(keywords)/sizeof(keywords[0]),
+ sizeof(keywords[0]), kw_cmp);
+ if (p)
+ return (p->k_val);
return (dfv);
}
Index: sbin/dhclient/dhctoken.h
================================================== =================
RCS file: /cvs/src/sbin/dhclient/dhctoken.h,v
retrieving revision 1.2
diff -u -r1.2 dhctoken.h
--- sbin/dhclient/dhctoken.h 4 Feb 2004 12:16:56 -0000 1.2
+++ sbin/dhclient/dhctoken.h 17 Apr 2006 23:12:26 -0000
@@ -40,97 +40,46 @@
* Enterprises, see ``http://www.vix.com''.
*/

-#define SEMI ';'
-#define DOT '.'
-#define COLON ':'
-#define COMMA ','
-#define SLASH '/'
-#define LBRACE '{'
-#define RBRACE '}'
+#define TOK_FIRST_TOKEN TOK_HARDWARE
+#define TOK_HARDWARE 257
+#define TOK_FILENAME 258
+#define TOK_FIXED_ADDR 259
+#define TOK_OPTION 260
+#define TOK_ETHERNET 261
+#define TOK_STRING 262
+#define TOK_NUMBER 263
+#define TOK_NUMBER_OR_NAME 264
+#define TOK_NAME 265
+#define TOK_LEASE 266
+#define TOK_SERVER_NAME 267
+#define TOK_TOKEN_RING 268
+#define TOK_SEND 269
+#define TOK_REQUEST 270
+#define TOK_REQUIRE 271
+#define TOK_TIMEOUT 272
+#define TOK_RETRY 273
+#define TOK_SELECT_TIMEOUT 274
+#define TOK_SCRIPT 275
+#define TOK_INTERFACE 276
+#define TOK_RENEW 277
+#define TOK_REBIND 278
+#define TOK_EXPIRE 279
+#define TOK_BOOTP 280
+#define TOK_DENY 281
+#define TOK_DEFAULT 282
+#define TOK_MEDIA 283
+#define TOK_MEDIUM 284
+#define TOK_ALIAS 285
+#define TOK_REBOOT 286
+#define TOK_BACKOFF_CUTOFF 287
+#define TOK_INITIAL_INTERVAL 288
+#define TOK_SUPERSEDE 289
+#define TOK_APPEND 290
+#define TOK_PREPEND 291
+#define TOK_REJECT 292
+#define TOK_FDDI 293

-#define FIRST_TOKEN HOST
-#define HOST 256
-#define HARDWARE 257
-#define FILENAME 258
-#define FIXED_ADDR 259
-#define OPTION 260
-#define ETHERNET 261
-#define STRING 262
-#define NUMBER 263
-#define NUMBER_OR_NAME 264
-#define NAME 265
-#define TIMESTAMP 266
-#define STARTS 267
-#define ENDS 268
-#define UID 269
-#define CLASS 270
-#define LEASE 271
-#define RANGE 272
-#define PACKET 273
-#define CIADDR 274
-#define YIADDR 275
-#define SIADDR 276
-#define GIADDR 277
-#define SUBNET 278
-#define NETMASK 279
-#define DEFAULT_LEASE_TIME 280
-#define MAX_LEASE_TIME 281
-#define VENDOR_CLASS 282
-#define USER_CLASS 283
-#define SHARED_NETWORK 284
-#define SERVER_NAME 285
-#define DYNAMIC_BOOTP 286
-#define SERVER_IDENTIFIER 287
-#define DYNAMIC_BOOTP_LEASE_CUTOFF 288
-#define DYNAMIC_BOOTP_LEASE_LENGTH 289
-#define BOOT_UNKNOWN_CLIENTS 290
-#define NEXT_SERVER 291
-#define TOKEN_RING 292
-#define GROUP 293
-#define ONE_LEASE_PER_CLIENT 294
-#define GET_LEASE_HOSTNAMES 295
-#define USE_HOST_DECL_NAMES 296
-#define SEND 297
-#define CLIENT_IDENTIFIER 298
-#define REQUEST 299
-#define REQUIRE 300
-#define TIMEOUT 301
-#define RETRY 302
-#define SELECT_TIMEOUT 303
-#define SCRIPT 304
-#define INTERFACE 305
-#define RENEW 306
-#define REBIND 307
-#define EXPIRE 308
-#define UNKNOWN_CLIENTS 309
-#define ALLOW 310
-#define BOOTP 311
-#define DENY 312
-#define BOOTING 313
-#define DEFAULT 314
-#define MEDIA 315
-#define MEDIUM 316
-#define ALIAS 317
-#define REBOOT 318
-#define ABANDONED 319
-#define BACKOFF_CUTOFF 320
-#define INITIAL_INTERVAL 321
-#define NAMESERVER 322
-#define DOMAIN 323
-#define SEARCH 324
-#define SUPERSEDE 325
-#define APPEND 326
-#define PREPEND 327
-#define HOSTNAME 328
-#define CLIENT_HOSTNAME 329
-#define REJECT 330
-#define FDDI 331
-#define USE_LEASE_ADDR_FOR_DEFAULT_ROUTE 332
-#define AUTHORITATIVE 333
-#define TOKEN_NOT 334
-#define ALWAYS_REPLY_RFC1048 335
-
-#define is_identifier(x) ((x) >= FIRST_TOKEN && \
- (x) != STRING && \
- (x) != NUMBER && \
+#define is_identifier(x) ((x) >= TOK_FIRST_TOKEN && \
+ (x) != TOK_STRING && \
+ (x) != TOK_NUMBER && \
(x) != EOF)
Index: sbin/dhclient/parse.c
================================================== =================
RCS file: /cvs/src/sbin/dhclient/parse.c,v
retrieving revision 1.13
diff -u -r1.13 parse.c
--- sbin/dhclient/parse.c 17 Jul 2005 19:33:55 -0000 1.13
+++ sbin/dhclient/parse.c 17 Apr 2006 23:03:06 -0000
@@ -65,16 +65,16 @@

do {
token = peek_token(&val, cfile);
- if (token == RBRACE) {
+ if (token == '}') {
if (brace_count) {
token = next_token(&val, cfile);
if (!--brace_count)
return;
} else
return;
- } else if (token == LBRACE) {
+ } else if (token == '{') {
brace_count++;
- } else if (token == SEMI && !brace_count) {
+ } else if (token == ';' && !brace_count) {
token = next_token(&val, cfile);
return;
} else if (token == '\n') {
@@ -98,7 +98,7 @@
char *val;

token = next_token(&val, cfile);
- if (token != SEMI) {
+ if (token != ';') {
parse_warn("semicolon expected.");
skip_to_semi(cfile);
return (0);
@@ -116,7 +116,7 @@
int token;

token = next_token(&val, cfile);
- if (token != STRING) {
+ if (token != TOK_STRING) {
parse_warn("filename must be a string");
skip_to_semi(cfile);
return (NULL);
@@ -135,7 +135,7 @@
parse_ip_addr(FILE *cfile, struct iaddr *addr)
{
addr->len = 4;
- return (parse_numeric_aggregate(cfile, addr->iabuf, addr->len, DOT,
+ return (parse_numeric_aggregate(cfile, addr->iabuf, addr->len, '.',
10));
}

@@ -151,15 +151,15 @@

token = next_token(&val, cfile);
switch (token) {
- case ETHERNET:
+ case TOK_ETHERNET:
hardware->htype = HTYPE_ETHER;
hardware->hlen = 6;
break;
- case TOKEN_RING:
+ case TOK_TOKEN_RING:
hardware->htype = HTYPE_IEEE802;
hardware->hlen = 6;
break;
- case FDDI:
+ case TOK_FDDI:
hardware->htype = HTYPE_FDDI;
hardware->hlen = 6;
break;
@@ -170,11 +170,11 @@
}

if (parse_numeric_aggregate(cfile, hardware->haddr, hardware->hlen,
- COLON, 16) == 0)
+ ':', 16) == 0)
return;

token = next_token(&val, cfile);
- if (token != SEMI) {
+ if (token != ';') {
parse_warn("expecting semicolon.");
skip_to_semi(cfile);
}
@@ -190,7 +190,7 @@
int token;

token = next_token(&val, cfile);
- if (token != NUMBER) {
+ if (token != TOK_NUMBER) {
parse_warn("Expecting numeric lease time");
skip_to_semi(cfile);
return;
@@ -222,7 +222,7 @@

token = next_token(&val, cfile);

- if (token == NUMBER || (base == 16 && token == NUMBER_OR_NAME))
+ if (token == TOK_NUMBER || (base == 16 && token == TOK_NUMBER_OR_NAME))
/* XXX Need to check if conversion was successful. */
convert_num(buf, val, base, 8);
else
@@ -357,9 +357,9 @@

/* Day of week... */
token = next_token(&val, cfile);
- if (token != NUMBER) {
+ if (token != TOK_NUMBER) {
parse_warn("numeric day of week expected.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return (0);
}
@@ -367,9 +367,9 @@

/* Year... */
token = next_token(&val, cfile);
- if (token != NUMBER) {
+ if (token != TOK_NUMBER) {
parse_warn("numeric year expected.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return (0);
}
@@ -379,18 +379,18 @@

/* Slash separating year from month... */
token = next_token(&val, cfile);
- if (token != SLASH) {
+ if (token != '/') {
parse_warn("expected slash separating year from month.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return (0);
}

/* Month... */
token = next_token(&val, cfile);
- if (token != NUMBER) {
+ if (token != TOK_NUMBER) {
parse_warn("numeric month expected.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return (0);
}
@@ -398,18 +398,18 @@

/* Slash separating month from day... */
token = next_token(&val, cfile);
- if (token != SLASH) {
+ if (token != '/') {
parse_warn("expected slash separating month from day.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return (0);
}

/* Month... */
token = next_token(&val, cfile);
- if (token != NUMBER) {
+ if (token != TOK_NUMBER) {
parse_warn("numeric day of month expected.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return (0);
}
@@ -417,9 +417,9 @@

/* Hour... */
token = next_token(&val, cfile);
- if (token != NUMBER) {
+ if (token != TOK_NUMBER) {
parse_warn("numeric hour expected.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return (0);
}
@@ -427,18 +427,18 @@

/* Colon separating hour from minute... */
token = next_token(&val, cfile);
- if (token != COLON) {
+ if (token != ':') {
parse_warn("expected colon separating hour from minute.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return (0);
}

/* Minute... */
token = next_token(&val, cfile);
- if (token != NUMBER) {
+ if (token != TOK_NUMBER) {
parse_warn("numeric minute expected.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return (0);
}
@@ -446,18 +446,18 @@

/* Colon separating minute from second... */
token = next_token(&val, cfile);
- if (token != COLON) {
+ if (token != ':') {
parse_warn("expected colon separating hour from minute.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return (0);
}

/* Minute... */
token = next_token(&val, cfile);
- if (token != NUMBER) {
+ if (token != TOK_NUMBER) {
parse_warn("numeric minute expected.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return (0);
}
@@ -469,7 +469,7 @@

/* Make sure the date ends in a semicolon... */
token = next_token(&val, cfile);
- if (token != SEMI) {
+ if (token != ';') {
parse_warn("semicolon expected.");
skip_to_semi(cfile);
return (0);
Index: usr.sbin/dhcpd/conflex.c
================================================== =================
RCS file: /cvs/src/usr.sbin/dhcpd/conflex.c,v
retrieving revision 1.6
diff -u -r1.6 conflex.c
--- usr.sbin/dhcpd/conflex.c 25 Nov 2005 16:24:12 -0000 1.6
+++ usr.sbin/dhcpd/conflex.c 17 Apr 2006 23:40:10 -0000
@@ -251,13 +251,13 @@
}
tokbuf[i] = 0;
tval = tokbuf;
- return (STRING);
+ return (TOK_STRING);
}

static int
read_number(int c, FILE *cfile)
{
- int seenx = 0, i = 0, token = NUMBER;
+ int seenx = 0, i = 0, token = TOK_NUMBER;

tokbuf[i++] = c;
for (; i < sizeof(tokbuf); i++) {
@@ -285,7 +285,7 @@
read_num_or_name(int c, FILE *cfile)
{
int i = 0;
- int rv = NUMBER_OR_NAME;
+ int rv = TOK_NUMBER_OR_NAME;

tokbuf[i++] = c;
for (; i < sizeof(tokbuf); i++) {
@@ -296,7 +296,7 @@
break;
}
if (!isxdigit(c))
- rv = NAME;
+ rv = TOK_NAME;
tokbuf[i] = c;
}
if (i == sizeof(tokbuf)) {
@@ -309,218 +309,72 @@
return (intern(tval, rv));
}

+static const struct keywords {
+ const char *k_name;
+ int k_val;
+} keywords[] = {
+ { "abandoned", TOK_ABANDONED },
+ { "allow", TOK_ALLOW },
+ { "always-reply-rfc1048", TOK_ALWAYS_REPLY_RFC1048 },
+ { "authoritative", TOK_AUTHORITATIVE },
+ { "booting", TOK_BOOTING },
+ { "bootp", TOK_BOOTP },
+ { "class", TOK_CLASS },
+ { "client-hostname", TOK_CLIENT_HOSTNAME },
+ { "default-lease-time", TOK_DEFAULT_LEASE_TIME },
+ { "deny", TOK_DENY },
+ { "domain", TOK_DOMAIN },
+ { "dynamic-bootp", TOK_DYNAMIC_BOOTP },
+ { "dynamic-bootp-lease-cutoff", TOK_DYNAMIC_BOOTP_LEASE_CUTOFF },
+ { "dynamic-bootp-lease-length", TOK_DYNAMIC_BOOTP_LEASE_LENGTH },
+ { "ends", TOK_ENDS },
+ { "ethernet", TOK_ETHERNET },
+ { "fddi", TOK_FDDI },
+ { "filename", TOK_FILENAME },
+ { "fixed-address", TOK_FIXED_ADDR },
+ { "get-lease-hostnames", TOK_GET_LEASE_HOSTNAMES },
+ { "group", TOK_GROUP },
+ { "hardware", TOK_HARDWARE },
+ { "host", TOK_HOST },
+ { "hostname", TOK_HOSTNAME },
+ { "lease", TOK_LEASE },
+ { "max-lease-time", TOK_MAX_LEASE_TIME },
+ { "netmask", TOK_NETMASK },
+ { "next-server", TOK_NEXT_SERVER },
+ { "not", TOK_TOKEN_NOT },
+ { "one-lease-per-client", TOK_ONE_LEASE_PER_CLIENT },
+ { "option", TOK_OPTION },
+ { "range", TOK_RANGE },
+ { "server-identifier", TOK_SERVER_IDENTIFIER },
+ { "server-name", TOK_SERVER_NAME },
+ { "shared-network", TOK_SHARED_NETWORK },
+ { "starts", TOK_STARTS },
+ { "subnet", TOK_SUBNET },
+ { "timeout", TOK_TIMEOUT },
+ { "timestamp", TOK_TIMESTAMP },
+ { "token-ring", TOK_TOKEN_RING },
+ { "uid", TOK_UID },
+ { "unknown-clients", TOK_UNKNOWN_CLIENTS },
+ { "user-class", TOK_USER_CLASS },
+ { "use-host-decl-names", TOK_USE_HOST_DECL_NAMES },
+ { "use-lease-addr-for-default-route", TOK_USE_LEASE_ADDR_FOR_DEFAULT_ROUTE },
+ { "vendor-class", TOK_VENDOR_CLASS }
+};
+
+int
+kw_cmp(const void *k, const void *e)
+{
+ return (strcasecmp(k, ((const struct keywords *)e)->k_name));
+}
+
static int
intern(char *atom, int dfv)
{
- if (!isascii(atom[0]))
- return (dfv);
+ const struct keywords *p;

- switch (tolower(atom[0])) {
- case 'a':
- if (!strcasecmp(atom + 1, "lways-reply-rfc1048"))
- return (ALWAYS_REPLY_RFC1048);
- if (!strcasecmp(atom + 1, "ppend"))
- return (APPEND);
- if (!strcasecmp(atom + 1, "llow"))
- return (ALLOW);
- if (!strcasecmp(atom + 1, "lias"))
- return (ALIAS);
- if (!strcasecmp(atom + 1, "bandoned"))
- return (ABANDONED);
- if (!strcasecmp(atom + 1, "uthoritative"))
- return (AUTHORITATIVE);
- break;
- case 'b':
- if (!strcasecmp(atom + 1, "ackoff-cutoff"))
- return (BACKOFF_CUTOFF);
- if (!strcasecmp(atom + 1, "ootp"))
- return (BOOTP);
- if (!strcasecmp(atom + 1, "ooting"))
- return (BOOTING);
- if (!strcasecmp(atom + 1, "oot-unknown-clients"))
- return (BOOT_UNKNOWN_CLIENTS);
- break;
- case 'c':
- if (!strcasecmp(atom + 1, "lass"))
- return (CLASS);
- if (!strcasecmp(atom + 1, "iaddr"))
- return (CIADDR);
- if (!strcasecmp(atom + 1, "lient-identifier"))
- return (CLIENT_IDENTIFIER);
- if (!strcasecmp(atom + 1, "lient-hostname"))
- return (CLIENT_HOSTNAME);
- break;
- case 'd':
- if (!strcasecmp(atom + 1, "omain"))
- return (DOMAIN);
- if (!strcasecmp(atom + 1, "eny"))
- return (DENY);
- if (!strncasecmp(atom + 1, "efault", 6)) {
- if (!atom[7])
- return (DEFAULT);
- if (!strcasecmp(atom + 7, "-lease-time"))
- return (DEFAULT_LEASE_TIME);
- break;
- }
- if (!strncasecmp(atom + 1, "ynamic-bootp", 12)) {
- if (!atom[13])
- return (DYNAMIC_BOOTP);
- if (!strcasecmp(atom + 13, "-lease-cutoff"))
- return (DYNAMIC_BOOTP_LEASE_CUTOFF);
- if (!strcasecmp(atom + 13, "-lease-length"))
- return (DYNAMIC_BOOTP_LEASE_LENGTH);
- break;
- }
- break;
- case 'e':
- if (!strcasecmp(atom + 1, "thernet"))
- return (ETHERNET);
- if (!strcasecmp(atom + 1, "nds"))
- return (ENDS);
- if (!strcasecmp(atom + 1, "xpire"))
- return (EXPIRE);
- break;
- case 'f':
- if (!strcasecmp(atom + 1, "ilename"))
- return (FILENAME);
- if (!strcasecmp(atom + 1, "ixed-address"))
- return (FIXED_ADDR);
- if (!strcasecmp(atom + 1, "ddi"))
- return (FDDI);
- break;
- case 'g':
- if (!strcasecmp(atom + 1, "iaddr"))
- return (GIADDR);
- if (!strcasecmp(atom + 1, "roup"))
- return (GROUP);
- if (!strcasecmp(atom + 1, "et-lease-hostnames"))
- return (GET_LEASE_HOSTNAMES);
- break;
- case 'h':
- if (!strcasecmp(atom + 1, "ost"))
- return (HOST);
- if (!strcasecmp(atom + 1, "ardware"))
- return (HARDWARE);
- if (!strcasecmp(atom + 1, "ostname"))
- return (HOSTNAME);
- break;
- case 'i':
- if (!strcasecmp(atom + 1, "nitial-interval"))
- return (INITIAL_INTERVAL);
- if (!strcasecmp(atom + 1, "nterface"))
- return (INTERFACE);
- break;
- case 'l':
- if (!strcasecmp(atom + 1, "ease"))
- return (LEASE);
- break;
- case 'm':
- if (!strcasecmp(atom + 1, "ax-lease-time"))
- return (MAX_LEASE_TIME);
- if (!strncasecmp(atom + 1, "edi", 3)) {
- if (!strcasecmp(atom + 4, "a"))
- return (MEDIA);
- if (!strcasecmp(atom + 4, "um"))
- return (MEDIUM);
- break;
- }
- break;
- case 'n':
- if (!strcasecmp(atom + 1, "ameserver"))
- return (NAMESERVER);
- if (!strcasecmp(atom + 1, "etmask"))
- return (NETMASK);
- if (!strcasecmp(atom + 1, "ext-server"))
- return (NEXT_SERVER);
- if (!strcasecmp(atom + 1, "ot"))
- return (TOKEN_NOT);
- break;
- case 'o':
- if (!strcasecmp(atom + 1, "ption"))
- return (OPTION);
- if (!strcasecmp(atom + 1, "ne-lease-per-client"))
- return (ONE_LEASE_PER_CLIENT);
- break;
- case 'p':
- if (!strcasecmp(atom + 1, "repend"))
- return (PREPEND);
- if (!strcasecmp(atom + 1, "acket"))
- return (PACKET);
- break;
- case 'r':
- if (!strcasecmp(atom + 1, "ange"))
- return (RANGE);
- if (!strcasecmp(atom + 1, "equest"))
- return (REQUEST);
- if (!strcasecmp(atom + 1, "equire"))
- return (REQUIRE);
- if (!strcasecmp(atom + 1, "etry"))
- return (RETRY);
- if (!strcasecmp(atom + 1, "enew"))
- return (RENEW);
- if (!strcasecmp(atom + 1, "ebind"))
- return (REBIND);
- if (!strcasecmp(atom + 1, "eboot"))
- return (REBOOT);
- if (!strcasecmp(atom + 1, "eject"))
- return (REJECT);
- break;
- case 's':
- if (!strcasecmp(atom + 1, "earch"))
- return (SEARCH);
- if (!strcasecmp(atom + 1, "tarts"))
- return (STARTS);
- if (!strcasecmp(atom + 1, "iaddr"))
- return (SIADDR);
- if (!strcasecmp(atom + 1, "ubnet"))
- return (SUBNET);
- if (!strcasecmp(atom + 1, "hared-network"))
- return (SHARED_NETWORK);
- if (!strcasecmp(atom + 1, "erver-name"))
- return (SERVER_NAME);
- if (!strcasecmp(atom + 1, "erver-identifier"))
- return (SERVER_IDENTIFIER);
- if (!strcasecmp(atom + 1, "elect-timeout"))
- return (SELECT_TIMEOUT);
- if (!strcasecmp(atom + 1, "end"))
- return (SEND);
- if (!strcasecmp(atom + 1, "cript"))
- return (SCRIPT);
- if (!strcasecmp(atom + 1, "upersede"))
- return (SUPERSEDE);
- break;
- case 't':
- if (!strcasecmp(atom + 1, "imestamp"))
- return (TIMESTAMP);
- if (!strcasecmp(atom + 1, "imeout"))
- return (TIMEOUT);
- if (!strcasecmp(atom + 1, "oken-ring"))
- return (TOKEN_RING);
- break;
- case 'u':
- if (!strncasecmp(atom + 1, "se", 2)) {
- if (!strcasecmp(atom + 3, "r-class"))
- return (USER_CLASS);
- if (!strcasecmp(atom + 3, "-host-decl-names"))
- return (USE_HOST_DECL_NAMES);
- if (!strcasecmp(atom + 3,
- "-lease-addr-for-default-route"))
- return (USE_LEASE_ADDR_FOR_DEFAULT_ROUTE);
- break;
- }
- if (!strcasecmp(atom + 1, "id"))
- return (UID);
- if (!strcasecmp(atom + 1, "nknown-clients"))
- return (UNKNOWN_CLIENTS);
- break;
- case 'v':
- if (!strcasecmp(atom + 1, "endor-class"))
- return (VENDOR_CLASS);
- break;
- case 'y':
- if (!strcasecmp(atom + 1, "iaddr"))
- return (YIADDR);
- break;
- }
+ p = bsearch(atom, keywords, sizeof(keywords)/sizeof(keywords[0]),
+ sizeof(keywords[0]), kw_cmp);
+ if (p)
+ return (p->k_val);
return (dfv);
}
Index: usr.sbin/dhcpd/confpars.c
================================================== =================
RCS file: /cvs/src/usr.sbin/dhcpd/confpars.c,v
retrieving revision 1.13
diff -u -r1.13 confpars.c
--- usr.sbin/dhcpd/confpars.c 13 Mar 2006 19:57:42 -0000 1.13
+++ usr.sbin/dhcpd/confpars.c 17 Apr 2006 23:23:54 -0000
@@ -120,7 +120,7 @@
token = next_token(&val, cfile);
if (token == EOF)
break;
- if (token != LEASE) {
+ if (token != TOK_LEASE) {
warning("Corrupt lease file - possible data loss!");
skip_to_semi(cfile);
} else {
@@ -182,7 +182,7 @@
struct hardware hardware;

switch (next_token(&val, cfile)) {
- case HOST:
+ case TOK_HOST:
if (type != HOST_DECL)
parse_host_declaration(cfile, group);
else {
@@ -191,7 +191,7 @@
}
return 1;

- case GROUP:
+ case TOK_GROUP:
if (type != HOST_DECL)
parse_group_declaration(cfile, group);
else {
@@ -200,10 +200,10 @@
}
return 1;

- case TIMESTAMP:
+ case TOK_TIMESTAMP:
break;

- case SHARED_NETWORK:
+ case TOK_SHARED_NETWORK:
if (type == SHARED_NET_DECL ||
type == HOST_DECL ||
type == SUBNET_DECL) {
@@ -216,7 +216,7 @@
parse_shared_net_declaration(cfile, group);
return 1;

- case SUBNET:
+ case TOK_SUBNET:
if (type == HOST_DECL || type == SUBNET_DECL) {
parse_warn("subnet declarations not allowed here.");
skip_to_semi(cfile);
@@ -262,67 +262,67 @@
}
return 1;

- case VENDOR_CLASS:
+ case TOK_VENDOR_CLASS:
parse_class_declaration(cfile, group, 0);
return 1;

- case USER_CLASS:
+ case TOK_USER_CLASS:
parse_class_declaration(cfile, group, 1);
return 1;

- case DEFAULT_LEASE_TIME:
+ case TOK_DEFAULT_LEASE_TIME:
parse_lease_time(cfile, &group->default_lease_time);
break;

- case MAX_LEASE_TIME:
+ case TOK_MAX_LEASE_TIME:
parse_lease_time(cfile, &group->max_lease_time);
break;

- case DYNAMIC_BOOTP_LEASE_CUTOFF:
+ case TOK_DYNAMIC_BOOTP_LEASE_CUTOFF:
group->bootp_lease_cutoff = parse_date(cfile);
break;

- case DYNAMIC_BOOTP_LEASE_LENGTH:
+ case TOK_DYNAMIC_BOOTP_LEASE_LENGTH:
parse_lease_time(cfile, &group->bootp_lease_length);
break;

- case BOOT_UNKNOWN_CLIENTS:
+ case TOK_BOOT_UNKNOWN_CLIENTS:
if (type == HOST_DECL)
parse_warn("boot-unknown-clients not allowed here.");
group->boot_unknown_clients = parse_boolean(cfile);
break;

- case ONE_LEASE_PER_CLIENT:
+ case TOK_ONE_LEASE_PER_CLIENT:
if (type == HOST_DECL)
parse_warn("one-lease-per-client not allowed here.");
group->one_lease_per_client = parse_boolean(cfile);
break;

- case GET_LEASE_HOSTNAMES:
+ case TOK_GET_LEASE_HOSTNAMES:
if (type == HOST_DECL)
parse_warn("get-lease-hostnames not allowed here.");
group->get_lease_hostnames = parse_boolean(cfile);
break;

- case ALWAYS_REPLY_RFC1048:
+ case TOK_ALWAYS_REPLY_RFC1048:
group->always_reply_rfc1048 = parse_boolean(cfile);
break;

- case USE_HOST_DECL_NAMES:
+ case TOK_USE_HOST_DECL_NAMES:
if (type == HOST_DECL)
parse_warn("use-host-decl-names not allowed here.");
group->use_host_decl_names = parse_boolean(cfile);
break;

- case USE_LEASE_ADDR_FOR_DEFAULT_ROUTE:
+ case TOK_USE_LEASE_ADDR_FOR_DEFAULT_ROUTE:
group->use_lease_addr_for_default_route =
parse_boolean(cfile);
break;

- case TOKEN_NOT:
+ case TOK_TOKEN_NOT:
token = next_token(&val, cfile);
switch (token) {
- case AUTHORITATIVE:
+ case TOK_AUTHORITATIVE:
if (type == HOST_DECL)
parse_warn("authority makes no sense here.");
group->authoritative = 0;
@@ -335,14 +335,14 @@
}
break;

- case AUTHORITATIVE:
+ case TOK_AUTHORITATIVE:
if (type == HOST_DECL)
parse_warn("authority makes no sense here.");
group->authoritative = 1;
parse_semi(cfile);
break;

- case NEXT_SERVER:
+ case TOK_NEXT_SERVER:
tree = parse_ip_addr_or_hostname(cfile, 0);
if (!tree)
break;
@@ -355,11 +355,11 @@
parse_semi(cfile);
break;

- case OPTION:
+ case TOK_OPTION:
parse_option_param(cfile, group);
break;

- case SERVER_IDENTIFIER:
+ case TOK_SERVER_IDENTIFIER:
tree = parse_ip_addr_or_hostname(cfile, 0);
if (!tree)
return declaration;
@@ -367,15 +367,15 @@
token = next_token(&val, cfile);
break;

- case FILENAME:
+ case TOK_FILENAME:
group->filename = parse_string(cfile);
break;

- case SERVER_NAME:
+ case TOK_SERVER_NAME:
group->server_name = parse_string(cfile);
break;

- case HARDWARE:
+ case TOK_HARDWARE:
parse_hardware_param(cfile, &hardware);
if (host_decl)
host_decl->interface = hardware;
@@ -384,7 +384,7 @@
"not allowed here.");
break;

- case FIXED_ADDR:
+ case TOK_FIXED_ADDR:
cache = parse_fixed_addr_param(cfile);
if (host_decl)
host_decl->fixed_addr = cache;
@@ -393,7 +393,7 @@
"allowed here.");
break;

- case RANGE:
+ case TOK_RANGE:
if (type != SUBNET_DECL || !group->subnet) {
parse_warn("range declaration not allowed here.");
skip_to_semi(cfile);
@@ -402,11 +402,11 @@
parse_address_range(cfile, group->subnet);
return declaration;

- case ALLOW:
+ case TOK_ALLOW:
parse_allow_deny(cfile, group, 1);
break;

- case DENY:
+ case TOK_DENY:
parse_allow_deny(cfile, group, 0);
break;

@@ -442,19 +442,19 @@

token = next_token(&val, cfile);
switch (token) {
- case BOOTP:
+ case TOK_BOOTP:
group->allow_bootp = flag;
break;

- case BOOTING:
+ case TOK_BOOTING:
group->allow_booting = flag;
break;

- case DYNAMIC_BOOTP:
+ case TOK_DYNAMIC_BOOTP:
group->dynamic_bootp = flag;
break;

- case UNKNOWN_CLIENTS:
+ case TOK_UNKNOWN_CLIENTS:
group->boot_unknown_clients = flag;
break;

@@ -498,7 +498,7 @@
char *val;

token = next_token(&val, cfile);
- if (token != LBRACE) {
+ if (token != '{') {
parse_warn("expecting left brace.");
skip_to_semi(cfile);
return 0;
@@ -507,7 +507,7 @@
}


-/* host-declaration :== hostname RBRACE parameters declarations LBRACE */
+/* host-declaration :== hostname '{' parameters declarations '}' */

void parse_host_declaration(cfile, group)
FILE *cfile;
@@ -535,7 +535,7 @@

do {
token = peek_token(&val, cfile);
- if (token == RBRACE) {
+ if (token == '}') {
token = next_token(&val, cfile);
break;
}
@@ -568,7 +568,7 @@
enter_host(host);
}

-/* class-declaration :== STRING LBRACE parameters declarations RBRACE
+/* class-declaration :== STRING '{' parameters declarations '}'
*/

void parse_class_declaration(cfile, group, type)
@@ -582,7 +582,7 @@
int declaration = 0;

token = next_token(&val, cfile);
- if (token != STRING) {
+ if (token != TOK_STRING) {
parse_warn("Expecting class name");
skip_to_semi(cfile);
return;
@@ -598,7 +598,7 @@

do {
token = peek_token(&val, cfile);
- if (token == RBRACE) {
+ if (token == '}') {
token = next_token(&val, cfile);
break;
} else if (token == EOF) {
@@ -638,7 +638,7 @@

/* Get the name of the shared network... */
token = peek_token(&val, cfile);
- if (token == STRING) {
+ if (token == TOK_STRING) {
token = next_token(&val, cfile);

if (val[0] == 0) {
@@ -661,7 +661,7 @@

do {
token = peek_token(&val, cfile);
- if (token == RBRACE) {
+ if (token == '}') {
token = next_token(&val, cfile);
if (!share->subnets) {
parse_warn("empty shared-network decl");
@@ -703,21 +703,21 @@
subnet->group->subnet = subnet;

/* Get the network number... */
- if (!parse_numeric_aggregate(cfile, addr, &len, DOT, 10, 8))
+ if (!parse_numeric_aggregate(cfile, addr, &len, '.', 10, 8))
return;
memcpy(iaddr.iabuf, addr, len);
iaddr.len = len;
subnet->net = iaddr;

token = next_token(&val, cfile);
- if (token != NETMASK) {
+ if (token != TOK_NETMASK) {
parse_warn("Expecting netmask");
skip_to_semi(cfile);
return;
}

/* Get the netmask... */
- if (!parse_numeric_aggregate(cfile, addr, &len, DOT, 10, 8))
+ if (!parse_numeric_aggregate(cfile, addr, &len, '.', 10, 8))
return;
memcpy(iaddr.iabuf, addr, len);
iaddr.len = len;
@@ -730,7 +730,7 @@

do {
token = peek_token(&val, cfile);
- if (token == RBRACE) {
+ if (token == '}') {
token = next_token(&val, cfile);
break;
} else if (token == EOF) {
@@ -787,7 +787,7 @@

do {
token = peek_token(&val, cfile);
- if (token == RBRACE) {
+ if (token == '}') {
token = next_token(&val, cfile);
break;
} else if (token == EOF) {
@@ -833,16 +833,16 @@
rv = tree_const(h->h_addr_list[0], h->h_length);
if (!uniform)
rv = tree_limit(rv, 4);
- } else if (token == NUMBER) {
- if (!parse_numeric_aggregate(cfile, addr, &len, DOT, 10, 8))
+ } else if (token == TOK_NUMBER) {
+ if (!parse_numeric_aggregate(cfile, addr, &len, '.', 10, 8))
return NULL;
rv = tree_const(addr, len);
} else {
- if (token != RBRACE && token != LBRACE)
+ if (token != '{' && token != '}')
token = next_token(&val, cfile);
parse_warn("%s (%d): expecting IP address or hostname",
val, token);
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return NULL;
}
@@ -870,9 +870,9 @@
else
tree = tmp;
token = peek_token(&val, cfile);
- if (token == COMMA)
+ if (token == ',')
token = next_token(&val, cfile);
- } while (token == COMMA);
+ } while (token == ',');

if (!parse_semi(cfile))
return NULL;
@@ -903,7 +903,7 @@
token = next_token(&val, cfile);
if (!is_identifier(token)) {
parse_warn("expecting identifier after option keyword.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return;
}
@@ -912,7 +912,7 @@
error("no memory for vendor token.");
strlcpy(vendor, val, strlen(val) + 1);
token = peek_token(&val, cfile);
- if (token == DOT) {
+ if (token == '.') {
/* Go ahead and take the DOT token... */
token = next_token(&val, cfile);

@@ -920,7 +920,7 @@
token = next_token(&val, cfile);
if (!is_identifier(token)) {
parse_warn("expecting identifier after '.'");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return;
}
@@ -974,16 +974,16 @@
switch (*fmt) {
case 'X':
token = peek_token(&val, cfile);
- if (token == NUMBER_OR_NAME ||
- token == NUMBER) {
+ if (token == TOK_NUMBER_OR_NAME ||
+ token == TOK_NUMBER) {
do {
token = next_token
(&val, cfile);
- if (token != NUMBER &&
- token != NUMBER_OR_NAME) {
+ if (token != TOK_NUMBER &&
+ token != TOK_NUMBER_OR_NAME) {
parse_warn("expecting "
"number.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(
cfile);
return;
@@ -992,11 +992,11 @@
tree = tree_concat(tree,
tree_const(buf, 1));
token = peek_token(&val, cfile);
- if (token == COLON)
+ if (token == ':')
token = next_token(&val,
cfile);
- } while (token == COLON);
- } else if (token == STRING) {
+ } while (token == ':');
+ } else if (token == TOK_STRING) {
token = next_token(&val, cfile);
tree = tree_concat(tree,
tree_const((unsigned char *)val,
@@ -1011,10 +1011,10 @@

case 't': /* Text string... */
token = next_token(&val, cfile);
- if (token != STRING
+ if (token != TOK_STRING
&& !is_identifier(token)) {
parse_warn("expecting string.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return;
}
@@ -1033,9 +1033,9 @@
case 'L': /* Unsigned 32-bit integer... */
case 'l': /* Signed 32-bit integer... */
token = next_token(&val, cfile);
- if (token != NUMBER) {
+ if (token != TOK_NUMBER) {
parse_warn("expecting number.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return;
}
@@ -1045,9 +1045,9 @@
case 's': /* Signed 16-bit integer. */
case 'S': /* Unsigned 16-bit integer. */
token = next_token(&val, cfile);
- if (token != NUMBER) {
+ if (token != TOK_NUMBER) {
parse_warn("expecting number.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return;
}
@@ -1057,9 +1057,9 @@
case 'b': /* Signed 8-bit integer. */
case 'B': /* Unsigned 8-bit integer. */
token = next_token(&val, cfile);
- if (token != NUMBER) {
+ if (token != TOK_NUMBER) {
parse_warn("expecting number.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return;
}
@@ -1070,7 +1070,7 @@
token = next_token(&val, cfile);
if (!is_identifier(token)) {
parse_warn("expecting identifier.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return;
}
@@ -1082,7 +1082,7 @@
buf[0] = 0;
else {
parse_warn("expecting boolean.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return;
}
@@ -1097,7 +1097,7 @@
}
if (*fmt == 'A') {
token = peek_token(&val, cfile);
- if (token == COMMA) {
+ if (token == ',') {
token = next_token(&val, cfile);
continue;
}
@@ -1106,7 +1106,7 @@
} while (*fmt == 'A');

token = next_token(&val, cfile);
- if (token != SEMI) {
+ if (token != ';') {
parse_warn("semicolon expected.");
skip_to_semi(cfile);
return;
@@ -1146,7 +1146,7 @@
memset(&lease, 0, sizeof lease);

/* Get the address for which the lease has been issued. */
- if (!parse_numeric_aggregate(cfile, addr, &len, DOT, 10, 8))
+ if (!parse_numeric_aggregate(cfile, addr, &len, '.', 10, 8))
return NULL;
memcpy(lease.ip_addr.iabuf, addr, len);
lease.ip_addr.len = len;
@@ -1156,7 +1156,7 @@

do {
token = next_token(&val, cfile);
- if (token == RBRACE)
+ if (token == '}')
break;
else if (token == EOF) {
parse_warn("unexpected end of file");
@@ -1165,21 +1165,21 @@
strlcpy(tbuf, val, sizeof tbuf);

/* Parse any of the times associated with the lease. */
- if (token == STARTS || token == ENDS || token == TIMESTAMP) {
+ if (token == TOK_STARTS || token == TOK_ENDS || token == TOK_TIMESTAMP) {
time_t t;
t = parse_date(cfile);
switch (token) {
- case STARTS:
+ case TOK_STARTS:
seenbit = 1;
lease.starts = t;
break;

- case ENDS:
+ case TOK_ENDS:
seenbit = 2;
lease.ends = t;
break;

- case TIMESTAMP:
+ case TOK_TIMESTAMP:
seenbit = 4;
lease.timestamp = t;
break;
@@ -1192,10 +1192,10 @@
} else {
switch (token) {
/* Colon-separated hexadecimal octets... */
- case UID:
+ case TOK_UID:
seenbit = 8;
token = peek_token(&val, cfile);
- if (token == STRING) {
+ if (token == TOK_STRING) {
token = next_token(&val, cfile);
lease.uid_len = strlen(val);
lease.uid = (unsigned char *)
@@ -1226,37 +1226,37 @@
error("No memory for lease uid");
break;

- case CLASS:
+ case TOK_CLASS:
seenbit = 32;
token = next_token(&val, cfile);
if (!is_identifier(token)) {
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return NULL;
}
/* for now, we aren't using this. */
break;

- case HARDWARE:
+ case TOK_HARDWARE:
seenbit = 64;
parse_hardware_param(cfile,
&lease.hardware_addr);
break;

- case DYNAMIC_BOOTP:
+ case TOK_DYNAMIC_BOOTP:
seenbit = 128;
lease.flags |= BOOTP_LEASE;
break;

- case ABANDONED:
+ case TOK_ABANDONED:
seenbit = 256;
lease.flags |= ABANDONED_LEASE;
break;

- case HOSTNAME:
+ case TOK_HOSTNAME:
seenbit = 512;
token = peek_token(&val, cfile);
- if (token == STRING)
+ if (token == TOK_STRING)
lease.hostname = parse_string(cfile);
else
lease.hostname =
@@ -1267,10 +1267,10 @@
}
break;

- case CLIENT_HOSTNAME:
+ case TOK_CLIENT_HOSTNAME:
seenbit = 1024;
token = peek_token(&val, cfile);
- if (token == STRING)
+ if (token == TOK_STRING)
lease.client_hostname =
parse_string(cfile);
else
@@ -1284,9 +1284,9 @@
return NULL;
}

- if (token != HARDWARE && token != STRING) {
+ if (token != TOK_HARDWARE && token != TOK_STRING) {
token = next_token(&val, cfile);
- if (token != SEMI) {
+ if (token != ';') {
parse_warn("semicolon expected.");
skip_to_semi(cfile);
return NULL;
@@ -1315,31 +1315,31 @@
int len = sizeof addr, token, dynamic = 0;
char *val;

- if ((token = peek_token(&val, cfile)) == DYNAMIC_BOOTP) {
+ if ((token = peek_token(&val, cfile)) == TOK_DYNAMIC_BOOTP) {
token = next_token(&val, cfile);
subnet->group->dynamic_bootp = dynamic = 1;
}

/* Get the bottom address in the range... */
- if (!parse_numeric_aggregate(cfile, addr, &len, DOT, 10, 8))
+ if (!parse_numeric_aggregate(cfile, addr, &len, '.', 10, 8))
return;
memcpy(low.iabuf, addr, len);
low.len = len;

/* Only one address? */
token = peek_token(&val, cfile);
- if (token == SEMI)
+ if (token == ';')
high = low;
else {
/* Get the top address in the range... */
- if (!parse_numeric_aggregate(cfile, addr, &len, DOT, 10, 8))
+ if (!parse_numeric_aggregate(cfile, addr, &len, '.', 10, 8))
return;
memcpy(high.iabuf, addr, len);
high.len = len;
}

token = next_token(&val, cfile);
- if (token != SEMI) {
+ if (token != ';') {
parse_warn("semicolon expected.");
skip_to_semi(cfile);
return;
Index: usr.sbin/dhcpd/dhctoken.h
================================================== =================
RCS file: /cvs/src/usr.sbin/dhcpd/dhctoken.h,v
retrieving revision 1.2
diff -u -r1.2 dhctoken.h
--- usr.sbin/dhcpd/dhctoken.h 14 Apr 2004 01:09:52 -0000 1.2
+++ usr.sbin/dhcpd/dhctoken.h 17 Apr 2006 23:41:44 -0000
@@ -40,97 +40,61 @@
* Enterprises, see ``http://www.vix.com''.
*/

-#define SEMI ';'
-#define DOT '.'
-#define COLON ':'
-#define COMMA ','
-#define SLASH '/'
-#define LBRACE '{'
-#define RBRACE '}'
+#define TOK_FIRST_TOKEN TOK_HOST
+#define TOK_HOST 256
+#define TOK_HARDWARE 257
+#define TOK_FILENAME 258
+#define TOK_FIXED_ADDR 259
+#define TOK_OPTION 260
+#define TOK_ETHERNET 261
+#define TOK_STRING 262
+#define TOK_NUMBER 263
+#define TOK_NUMBER_OR_NAME 264
+#define TOK_NAME 265
+#define TOK_TIMESTAMP 266
+#define TOK_STARTS 267
+#define TOK_ENDS 268
+#define TOK_UID 269
+#define TOK_CLASS 270
+#define TOK_LEASE 271
+#define TOK_RANGE 272
+#define TOK_SUBNET 278
+#define TOK_NETMASK 279
+#define TOK_DEFAULT_LEASE_TIME 280
+#define TOK_MAX_LEASE_TIME 281
+#define TOK_VENDOR_CLASS 282
+#define TOK_USER_CLASS 283
+#define TOK_SHARED_NETWORK 284
+#define TOK_SERVER_NAME 285
+#define TOK_DYNAMIC_BOOTP 286
+#define TOK_SERVER_IDENTIFIER 287
+#define TOK_DYNAMIC_BOOTP_LEASE_CUTOFF 288
+#define TOK_DYNAMIC_BOOTP_LEASE_LENGTH 289
+#define TOK_BOOT_UNKNOWN_CLIENTS 290
+#define TOK_NEXT_SERVER 291
+#define TOK_TOKEN_RING 292
+#define TOK_GROUP 293
+#define TOK_ONE_LEASE_PER_CLIENT 294
+#define TOK_GET_LEASE_HOSTNAMES 295
+#define TOK_USE_HOST_DECL_NAMES 296
+#define TOK_SEND 297
+#define TOK_TIMEOUT 301
+#define TOK_UNKNOWN_CLIENTS 309
+#define TOK_ALLOW 310
+#define TOK_BOOTP 311
+#define TOK_DENY 312
+#define TOK_BOOTING 313
+#define TOK_ABANDONED 319
+#define TOK_DOMAIN 323
+#define TOK_HOSTNAME 328
+#define TOK_CLIENT_HOSTNAME 329
+#define TOK_FDDI 331
+#define TOK_USE_LEASE_ADDR_FOR_DEFAULT_ROUTE 332
+#define TOK_AUTHORITATIVE 333
+#define TOK_TOKEN_NOT 334
+#define TOK_ALWAYS_REPLY_RFC1048 335

-#define FIRST_TOKEN HOST
-#define HOST 256
-#define HARDWARE 257
-#define FILENAME 258
-#define FIXED_ADDR 259
-#define OPTION 260
-#define ETHERNET 261
-#define STRING 262
-#define NUMBER 263
-#define NUMBER_OR_NAME 264
-#define NAME 265
-#define TIMESTAMP 266
-#define STARTS 267
-#define ENDS 268
-#define UID 269
-#define CLASS 270
-#define LEASE 271
-#define RANGE 272
-#define PACKET 273
-#define CIADDR 274
-#define YIADDR 275
-#define SIADDR 276
-#define GIADDR 277
-#define SUBNET 278
-#define NETMASK 279
-#define DEFAULT_LEASE_TIME 280
-#define MAX_LEASE_TIME 281
-#define VENDOR_CLASS 282
-#define USER_CLASS 283
-#define SHARED_NETWORK 284
-#define SERVER_NAME 285
-#define DYNAMIC_BOOTP 286
-#define SERVER_IDENTIFIER 287
-#define DYNAMIC_BOOTP_LEASE_CUTOFF 288
-#define DYNAMIC_BOOTP_LEASE_LENGTH 289
-#define BOOT_UNKNOWN_CLIENTS 290
-#define NEXT_SERVER 291
-#define TOKEN_RING 292
-#define GROUP 293
-#define ONE_LEASE_PER_CLIENT 294
-#define GET_LEASE_HOSTNAMES 295
-#define USE_HOST_DECL_NAMES 296
-#define SEND 297
-#define CLIENT_IDENTIFIER 298
-#define REQUEST 299
-#define REQUIRE 300
-#define TIMEOUT 301
-#define RETRY 302
-#define SELECT_TIMEOUT 303
-#define SCRIPT 304
-#define INTERFACE 305
-#define RENEW 306
-#define REBIND 307
-#define EXPIRE 308
-#define UNKNOWN_CLIENTS 309
-#define ALLOW 310
-#define BOOTP 311
-#define DENY 312
-#define BOOTING 313
-#define DEFAULT 314
-#define MEDIA 315
-#define MEDIUM 316
-#define ALIAS 317
-#define REBOOT 318
-#define ABANDONED 319
-#define BACKOFF_CUTOFF 320
-#define INITIAL_INTERVAL 321
-#define NAMESERVER 322
-#define DOMAIN 323
-#define SEARCH 324
-#define SUPERSEDE 325
-#define APPEND 326
-#define PREPEND 327
-#define HOSTNAME 328
-#define CLIENT_HOSTNAME 329
-#define REJECT 330
-#define FDDI 331
-#define USE_LEASE_ADDR_FOR_DEFAULT_ROUTE 332
-#define AUTHORITATIVE 333
-#define TOKEN_NOT 334
-#define ALWAYS_REPLY_RFC1048 335
-
-#define is_identifier(x) ((x) >= FIRST_TOKEN && \
- (x) != STRING && \
- (x) != NUMBER && \
+#define is_identifier(x) ((x) >= TOK_FIRST_TOKEN && \
+ (x) != TOK_STRING && \
+ (x) != TOK_NUMBER && \
(x) != EOF)
Index: usr.sbin/dhcpd/parse.c
================================================== =================
RCS file: /cvs/src/usr.sbin/dhcpd/parse.c,v
retrieving revision 1.7
diff -u -r1.7 parse.c
--- usr.sbin/dhcpd/parse.c 16 Sep 2004 18:35:43 -0000 1.7
+++ usr.sbin/dhcpd/parse.c 17 Apr 2006 23:26:52 -0000
@@ -67,16 +67,16 @@

do {
token = peek_token(&val, cfile);
- if (token == RBRACE) {
+ if (token == '}') {
if (brace_count) {
token = next_token(&val, cfile);
if (!--brace_count)
return;
} else
return;
- } else if (token == LBRACE) {
+ } else if (token == '{') {
brace_count++;
- } else if (token == SEMI && !brace_count) {
+ } else if (token == ';' && !brace_count) {
token = next_token(&val, cfile);
return;
} else if (token == '\n') {
@@ -100,7 +100,7 @@
char *val;

token = next_token(&val, cfile);
- if (token != SEMI) {
+ if (token != ';') {
parse_warn("semicolon expected.");
skip_to_semi(cfile);
return (0);
@@ -118,7 +118,7 @@
int token;

token = next_token(&val, cfile);
- if (token != STRING) {
+ if (token != TOK_STRING) {
parse_warn("filename must be a string");
skip_to_semi(cfile);
return (NULL);
@@ -147,7 +147,7 @@
do {
/* Read a token, which should be an identifier. */
token = next_token(&val, cfile);
- if (!is_identifier(token) && token != NUMBER) {
+ if (!is_identifier(token) && token != TOK_NUMBER) {
parse_warn("expecting an identifier in hostname");
skip_to_semi(cfile);
return (NULL);
@@ -163,9 +163,9 @@
* we're done.
*/
token = peek_token(&val, cfile);
- if (token == DOT)
+ if (token == '.')
token = next_token(&val, cfile);
- } while (token == DOT);
+ } while (token == '.');

/* Assemble the hostname together into a string. */
if (!(s = malloc(len)))
@@ -201,13 +201,13 @@

token = next_token(&val, cfile);
switch (token) {
- case ETHERNET:
+ case TOK_ETHERNET:
hardware->htype = HTYPE_ETHER;
break;
- case TOKEN_RING:
+ case TOK_TOKEN_RING:
hardware->htype = HTYPE_IEEE802;
break;
- case FDDI:
+ case TOK_FDDI:
hardware->htype = HTYPE_FDDI;
break;
default:
@@ -226,7 +226,7 @@
* on such clients. Yuck.
*/
hlen = 0;
- t = parse_numeric_aggregate(cfile, NULL, &hlen, COLON, 16, 8);
+ t = parse_numeric_aggregate(cfile, NULL, &hlen, ':', 16, 8);
if (!t)
return;
if (hlen > sizeof(hardware->haddr)) {
@@ -242,7 +242,7 @@
}

token = next_token(&val, cfile);
- if (token != SEMI) {
+ if (token != ';') {
parse_warn("expecting semicolon.");
skip_to_semi(cfile);
}
@@ -258,7 +258,7 @@
int token;

token = next_token(&val, cfile);
- if (token != NUMBER) {
+ if (token != TOK_NUMBER) {
parse_warn("Expecting numeric lease time");
skip_to_semi(cfile);
return;
@@ -300,10 +300,10 @@
if (token != separator) {
if (!*max)
break;
- if (token != RBRACE && token != LBRACE)
+ if (token != '{' && token != '}')
token = next_token(&val, cfile);
parse_warn("too few numbers.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return (NULL);
}
@@ -316,8 +316,8 @@
break;
}
/* Allow NUMBER_OR_NAME if base is 16. */
- if (token != NUMBER &&
- (base != 16 || token != NUMBER_OR_NAME)) {
+ if (token != TOK_NUMBER &&
+ (base != 16 || token != TOK_NUMBER_OR_NAME)) {
parse_warn("expecting numeric value.");
skip_to_semi(cfile);
return (NULL);
@@ -476,9 +476,9 @@

/* Day of week... */
token = next_token(&val, cfile);
- if (token != NUMBER) {
+ if (token != TOK_NUMBER) {
parse_warn("numeric day of week expected.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return (NULL);
}
@@ -486,9 +486,9 @@

/* Year... */
token = next_token(&val, cfile);
- if (token != NUMBER) {
+ if (token != TOK_NUMBER) {
parse_warn("numeric year expected.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return (NULL);
}
@@ -498,17 +498,17 @@

/* Slash separating year from month... */
token = next_token(&val, cfile);
- if (token != SLASH) {
+ if (token != '/') {
parse_warn("expected slash separating year from month.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return (NULL);
}
/* Month... */
token = next_token(&val, cfile);
- if (token != NUMBER) {
+ if (token != TOK_NUMBER) {
parse_warn("numeric month expected.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return (NULL);
}
@@ -516,17 +516,17 @@

/* Slash separating month from day... */
token = next_token(&val, cfile);
- if (token != SLASH) {
+ if (token != '/') {
parse_warn("expected slash separating month from day.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return (NULL);
}
/* Month... */
token = next_token(&val, cfile);
- if (token != NUMBER) {
+ if (token != TOK_NUMBER) {
parse_warn("numeric day of month expected.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return (NULL);
}
@@ -534,9 +534,9 @@

/* Hour... */
token = next_token(&val, cfile);
- if (token != NUMBER) {
+ if (token != TOK_NUMBER) {
parse_warn("numeric hour expected.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return (NULL);
}
@@ -544,17 +544,17 @@

/* Colon separating hour from minute... */
token = next_token(&val, cfile);
- if (token != COLON) {
+ if (token != ':') {
parse_warn("expected colon separating hour from minute.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return (NULL);
}
/* Minute... */
token = next_token(&val, cfile);
- if (token != NUMBER) {
+ if (token != TOK_NUMBER) {
parse_warn("numeric minute expected.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return (NULL);
}
@@ -562,17 +562,17 @@

/* Colon separating minute from second... */
token = next_token(&val, cfile);
- if (token != COLON) {
+ if (token != ':') {
parse_warn("expected colon separating hour from minute.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return (NULL);
}
/* Minute... */
token = next_token(&val, cfile);
- if (token != NUMBER) {
+ if (token != TOK_NUMBER) {
parse_warn("numeric minute expected.");
- if (token != SEMI)
+ if (token != ';')
skip_to_semi(cfile);
return (NULL);
}
@@ -584,7 +584,7 @@

/* Make sure the date ends in a semicolon... */
token = next_token(&val, cfile);
- if (token != SEMI) {
+ if (token != ';') {
parse_warn("semicolon expected.");
skip_to_semi(cfile);
return (NULL);

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump


All times are GMT. The time now is 12:30 PM.


Powered by vBulletin® Version 3.6.5
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.2.0
UnixAdminTalk.com

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95