diff --git a/common/parse.c b/common/parse.c index 38dea858..e0535935 100644 --- a/common/parse.c +++ b/common/parse.c @@ -22,7 +22,7 @@ #ifndef lint static char copyright[] = -"$Id: parse.c,v 1.61 2000/02/01 03:19:39 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium. All rights reserved.\n"; +"$Id: parse.c,v 1.62 2000/02/02 17:10:38 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium. All rights reserved.\n"; #endif /* not lint */ #include "dhcpd.h" @@ -1451,6 +1451,17 @@ int parse_executable_statement (result, cfile, lose, case_context) break; default: + if (config_universe && is_identifier (token)) { + option = ((struct option *) + hash_lookup (config_universe -> hash, + (const unsigned char *)val, 0)); + if (option) { + token = next_token (&val, cfile); + return parse_option_statement + (result, cfile, 1, option, + supersede_option_statement); + } + } *lose = 0; return 0; } diff --git a/common/tables.c b/common/tables.c index e70bf087..965ebb76 100644 --- a/common/tables.c +++ b/common/tables.c @@ -22,7 +22,7 @@ #ifndef lint static char copyright[] = -"$Id: tables.c,v 1.35 2000/01/26 14:55:34 mellon Exp $ Copyright (c) 1995, 1996, 1998, 1999 The Internet Software Consortium. All rights reserved.\n"; +"$Id: tables.c,v 1.36 2000/02/02 17:10:39 mellon Exp $ Copyright (c) 1995, 1996, 1998, 1999 The Internet Software Consortium. All rights reserved.\n"; #endif /* not lint */ #include "dhcpd.h" @@ -829,6 +829,12 @@ struct hash_table universe_hash; struct universe **universes; int universe_count, universe_max; +/* Universe containing names of configuration options, which, rather than + writing "option universe-name.option-name ...;", can be set by writing + "option-name ...;". */ + +struct universe *config_universe; + void initialize_common_option_spaces() { int i; diff --git a/includes/dhcpd.h b/includes/dhcpd.h index f105e90f..56575281 100644 --- a/includes/dhcpd.h +++ b/includes/dhcpd.h @@ -1422,6 +1422,7 @@ int universe_count, universe_max; struct universe **universes; extern struct hash_table universe_hash; void initialize_common_option_spaces PROTO ((void)); +struct universe *config_universe; /* stables.c */ #if defined (FAILOVER_PROTOCOL) diff --git a/server/confpars.c b/server/confpars.c index 0bd2effb..cc530640 100644 --- a/server/confpars.c +++ b/server/confpars.c @@ -22,7 +22,7 @@ #ifndef lint static char copyright[] = -"$Id: confpars.c,v 1.100 2000/02/01 03:19:56 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium. All rights reserved.\n"; +"$Id: confpars.c,v 1.101 2000/02/02 17:10:43 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium. All rights reserved.\n"; #endif /* not lint */ #include "dhcpd.h" @@ -491,39 +491,19 @@ int parse_statement (cfile, group, type, host_decl, declaration) default: et = (struct executable_statement *)0; - if (is_identifier (token)) { - option = ((struct option *) - hash_lookup (server_universe.hash, - (const unsigned char *)val, 0)); - if (option) { - token = next_token (&val, cfile); - if (!parse_option_statement - (&et, cfile, 1, option, - supersede_option_statement)) - return declaration; - } - } - - if (!et) { - lose = 0; - if (!parse_executable_statement (&et, cfile, &lose, - context_any)) { - if (!lose) { - if (declaration) + lose = 0; + if (!parse_executable_statement (&et, cfile, &lose, + context_any)) { + if (!lose) { + if (declaration) parse_warn (cfile, "expecting a declaration"); - else + else parse_warn (cfile, "expecting a parameter %s", "or declaration"); - skip_to_semi (cfile); - } - return declaration; + skip_to_semi (cfile); } - } - if (!et) { - parse_warn (cfile, "expecting a %sdeclaration", - declaration ? "" : "parameter or "); return declaration; } insert_statement: diff --git a/server/stables.c b/server/stables.c index b429892e..42f3f27d 100644 --- a/server/stables.c +++ b/server/stables.c @@ -22,7 +22,7 @@ #ifndef lint static char copyright[] = -"$Id: stables.c,v 1.5 2000/01/25 01:45:00 mellon Exp $ Copyright (c) 1995, 1996, 1998, 1999 The Internet Software Consortium. All rights reserved.\n"; +"$Id: stables.c,v 1.6 2000/02/02 17:10:43 mellon Exp $ Copyright (c) 1995, 1996, 1998, 1999 The Internet Software Consortium. All rights reserved.\n"; #endif /* not lint */ #include "dhcpd.h" @@ -733,4 +733,7 @@ void initialize_server_option_spaces() add_hash (&universe_hash, (const unsigned char *)server_universe.name, 0, (unsigned char *)&server_universe); + + /* Make the server universe the configuration option universe. */ + config_universe = &server_universe; }