[Dhcp-agent-commits] dhcp-agent Makefile.am,1.19,1.20 Makefile.in,1.19,1.20 dhcp-agent.h,1.57,1.58 d
Status: Alpha
Brought to you by:
actmodern
From: <act...@us...> - 2002-06-17 02:26:44
|
Update of /cvsroot/dhcp-agent/dhcp-agent In directory usw-pr-cvs1:/tmp/cvs-serv5321 Modified Files: Makefile.am Makefile.in dhcp-agent.h dhcp-cache-entry.c dhcp-client-cache.c dhcp-client-conf.c dhcp-client.c dhcp-files.c dhcp-files.h dhcp-globconf.c dhcpclient.1 Log Message: integrated new parser into main code Index: Makefile.am =================================================================== RCS file: /cvsroot/dhcp-agent/dhcp-agent/Makefile.am,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** Makefile.am 15 Jun 2002 14:59:20 -0000 1.19 --- Makefile.am 17 Jun 2002 02:26:38 -0000 1.20 *************** *** 5,9 **** DEFS = @DEFS@ ! bin_PROGRAMS = dhcpsniff dhcpclient #dhcptest dhcpsniff_SOURCES = dhcp-sniff.c dhcp-print.c dhcp-util.c \ --- 5,9 ---- DEFS = @DEFS@ ! bin_PROGRAMS = dhcpsniff dhcpclient dhcpsniff_SOURCES = dhcp-sniff.c dhcp-print.c dhcp-util.c \ *************** *** 21,25 **** dhcp-client-states.c dhcp-options-strings.c dhcp-convert.c \ dhcp-sysconf.c dhcp-rtt.c dhcp-packet-build.c dhcp-icmp-discovery.c \ ! dhcp-arp-discovery.c dhcp-route.c dhcp-globconf.c dhcp-stringbuffer.c #dhcptest_SOURCES = dhcp-test.c dhcp-util.c \ --- 21,26 ---- dhcp-client-states.c dhcp-options-strings.c dhcp-convert.c \ dhcp-sysconf.c dhcp-rtt.c dhcp-packet-build.c dhcp-icmp-discovery.c \ ! dhcp-arp-discovery.c dhcp-route.c dhcp-globconf.c dhcp-stringbuffer.c \ ! dhcp-parser.c dhcp-varfile.c #dhcptest_SOURCES = dhcp-test.c dhcp-util.c \ *************** *** 30,34 **** #dhcp-client-states.c dhcp-options-strings.c dhcp-convert.c \ #dhcp-sysconf.c dhcp-rtt.c dhcp-packet-build.c dhcp-icmp-discovery.c \ ! #dhcp-arp-discovery.c dhcp-route.c dhcp-globconf.c dhcp-stringbuffer.c #dhcptest_LDADD = @PCAP_LIB@ @DNET_LIB@ --- 31,36 ---- #dhcp-client-states.c dhcp-options-strings.c dhcp-convert.c \ #dhcp-sysconf.c dhcp-rtt.c dhcp-packet-build.c dhcp-icmp-discovery.c \ ! #dhcp-arp-discovery.c dhcp-route.c dhcp-globconf.c dhcp-stringbuffer.c \ ! #dhcp-parser.c dhcp-varfile.c #dhcptest_LDADD = @PCAP_LIB@ @DNET_LIB@ Index: Makefile.in =================================================================== RCS file: /cvsroot/dhcp-agent/dhcp-agent/Makefile.in,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** Makefile.in 15 Jun 2002 14:59:20 -0000 1.19 --- Makefile.in 17 Jun 2002 02:26:38 -0000 1.20 *************** *** 75,79 **** DEFS = @DEFS@ ! bin_PROGRAMS = dhcpsniff dhcpclient #dhcptest dhcpsniff_SOURCES = dhcp-sniff.c dhcp-print.c dhcp-util.c dhcp-align.c dhcp-net.c dhcp-list.c dhcp-com.c dhcp-eth.c dhcp-ip.c dhcp-udp.c dhcp-arp.c dhcp-icmp.c dhcp-log.c @DHCP_SNPRINTF@ dhcp-sniffer-ohandlers.c dhcp-rtt.c dhcp-interface.c --- 75,79 ---- DEFS = @DEFS@ ! bin_PROGRAMS = dhcpsniff dhcpclient dhcpsniff_SOURCES = dhcp-sniff.c dhcp-print.c dhcp-util.c dhcp-align.c dhcp-net.c dhcp-list.c dhcp-com.c dhcp-eth.c dhcp-ip.c dhcp-udp.c dhcp-arp.c dhcp-icmp.c dhcp-log.c @DHCP_SNPRINTF@ dhcp-sniffer-ohandlers.c dhcp-rtt.c dhcp-interface.c *************** *** 82,86 **** dhcpsniff_LDADD = @PCAP_LIB@ @DNET_LIB@ ! dhcpclient_SOURCES = dhcp-client.c dhcp-util.c dhcp-align.c dhcp-net.c dhcp-list.c dhcp-com.c dhcp-eth.c dhcp-ip.c dhcp-udp.c dhcp-arp.c dhcp-icmp.c dhcp-log.c dhcp-daemon.c dhcp-client-cache.c dhcp-cache-entry.c dhcp-client-control.c dhcp-interface.c dhcp-client-conf.c @DHCP_SNPRINTF@ dhcp-files.c dhcp-client-states.c dhcp-options-strings.c dhcp-convert.c dhcp-sysconf.c dhcp-rtt.c dhcp-packet-build.c dhcp-icmp-discovery.c dhcp-arp-discovery.c dhcp-route.c dhcp-globconf.c dhcp-stringbuffer.c --- 82,86 ---- dhcpsniff_LDADD = @PCAP_LIB@ @DNET_LIB@ ! dhcpclient_SOURCES = dhcp-client.c dhcp-util.c dhcp-align.c dhcp-net.c dhcp-list.c dhcp-com.c dhcp-eth.c dhcp-ip.c dhcp-udp.c dhcp-arp.c dhcp-icmp.c dhcp-log.c dhcp-daemon.c dhcp-client-cache.c dhcp-cache-entry.c dhcp-client-control.c dhcp-interface.c dhcp-client-conf.c @DHCP_SNPRINTF@ dhcp-files.c dhcp-client-states.c dhcp-options-strings.c dhcp-convert.c dhcp-sysconf.c dhcp-rtt.c dhcp-packet-build.c dhcp-icmp-discovery.c dhcp-arp-discovery.c dhcp-route.c dhcp-globconf.c dhcp-stringbuffer.c dhcp-parser.c dhcp-varfile.c *************** *** 92,96 **** #dhcp-client-states.c dhcp-options-strings.c dhcp-convert.c \ #dhcp-sysconf.c dhcp-rtt.c dhcp-packet-build.c dhcp-icmp-discovery.c \ ! #dhcp-arp-discovery.c dhcp-route.c dhcp-globconf.c dhcp-stringbuffer.c #dhcptest_LDADD = @PCAP_LIB@ @DNET_LIB@ --- 92,97 ---- #dhcp-client-states.c dhcp-options-strings.c dhcp-convert.c \ #dhcp-sysconf.c dhcp-rtt.c dhcp-packet-build.c dhcp-icmp-discovery.c \ ! #dhcp-arp-discovery.c dhcp-route.c dhcp-globconf.c dhcp-stringbuffer.c \ ! #dhcp-parser.c dhcp-varfile.c #dhcptest_LDADD = @PCAP_LIB@ @DNET_LIB@ *************** *** 126,130 **** dhcp-options-strings.o dhcp-convert.o dhcp-sysconf.o dhcp-rtt.o \ dhcp-packet-build.o dhcp-icmp-discovery.o dhcp-arp-discovery.o \ ! dhcp-route.o dhcp-globconf.o dhcp-stringbuffer.o dhcpclient_DEPENDENCIES = dhcpclient_LDFLAGS = --- 127,132 ---- dhcp-options-strings.o dhcp-convert.o dhcp-sysconf.o dhcp-rtt.o \ dhcp-packet-build.o dhcp-icmp-discovery.o dhcp-arp-discovery.o \ ! dhcp-route.o dhcp-globconf.o dhcp-stringbuffer.o dhcp-parser.o \ ! dhcp-varfile.o dhcpclient_DEPENDENCIES = dhcpclient_LDFLAGS = *************** *** 156,163 **** .deps/dhcp-list.P .deps/dhcp-log.P .deps/dhcp-net.P \ .deps/dhcp-options-strings.P .deps/dhcp-packet-build.P \ ! .deps/dhcp-print.P .deps/dhcp-route.P .deps/dhcp-rtt.P \ ! .deps/dhcp-sniff.P .deps/dhcp-sniffer-ohandlers.P \ .deps/dhcp-stringbuffer.P .deps/dhcp-sysconf.P .deps/dhcp-udp.P \ ! .deps/dhcp-util.P SOURCES = $(dhcpsniff_SOURCES) $(dhcpclient_SOURCES) OBJECTS = $(dhcpsniff_OBJECTS) $(dhcpclient_OBJECTS) --- 158,165 ---- .deps/dhcp-list.P .deps/dhcp-log.P .deps/dhcp-net.P \ .deps/dhcp-options-strings.P .deps/dhcp-packet-build.P \ ! .deps/dhcp-parser.P .deps/dhcp-print.P .deps/dhcp-route.P \ ! .deps/dhcp-rtt.P .deps/dhcp-sniff.P .deps/dhcp-sniffer-ohandlers.P \ .deps/dhcp-stringbuffer.P .deps/dhcp-sysconf.P .deps/dhcp-udp.P \ ! .deps/dhcp-util.P .deps/dhcp-varfile.P SOURCES = $(dhcpsniff_SOURCES) $(dhcpclient_SOURCES) OBJECTS = $(dhcpsniff_OBJECTS) $(dhcpclient_OBJECTS) Index: dhcp-agent.h =================================================================== RCS file: /cvsroot/dhcp-agent/dhcp-agent/dhcp-agent.h,v retrieving revision 1.57 retrieving revision 1.58 diff -C2 -d -r1.57 -r1.58 *** dhcp-agent.h 15 Jun 2002 18:23:28 -0000 1.57 --- dhcp-agent.h 17 Jun 2002 02:26:39 -0000 1.58 *************** *** 488,492 **** /* cache object manipulation. */ ! extern cache_entry_t *make_cache_entry(char *name, char *value); extern void destroy_cache_entry(cache_entry_t *cache); extern void cache_entry_purge_list(list_t *cache_list); --- 488,492 ---- /* cache object manipulation. */ ! extern cache_entry_t *make_cache_entry(const char *name, const char *value); extern void destroy_cache_entry(cache_entry_t *cache); extern void cache_entry_purge_list(list_t *cache_list); Index: dhcp-cache-entry.c =================================================================== RCS file: /cvsroot/dhcp-agent/dhcp-agent/dhcp-cache-entry.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** dhcp-cache-entry.c 6 Jun 2002 23:59:00 -0000 1.6 --- dhcp-cache-entry.c 17 Jun 2002 02:26:39 -0000 1.7 *************** *** 31,35 **** /* constructors. */ ! cache_entry_t *make_cache_entry(char *name, char *value) { cache_entry_t *cache; --- 31,35 ---- /* constructors. */ ! cache_entry_t *make_cache_entry(const char *name, const char *value) { cache_entry_t *cache; Index: dhcp-client-cache.c =================================================================== RCS file: /cvsroot/dhcp-agent/dhcp-agent/dhcp-client-cache.c,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** dhcp-client-cache.c 11 Jun 2002 03:06:39 -0000 1.10 --- dhcp-client-cache.c 17 Jun 2002 02:26:39 -0000 1.11 *************** *** 27,30 **** --- 27,33 ---- #include <dhcp-util.h> #include <dhcp-files.h> + #include <dhcp-stringbuffer.h> + #include <dhcp-parser.h> + #include <dhcp-varfile.h> #include <dhcp-convert.h> *************** *** 76,93 **** { cache_entry_t *cache_entry; ! ! if(file_get_var_string(varfile)) ! return NULL; ! if(file_parse_string(varfile, PARSE_DOUBLE_STRINGS)) ! fatal_error("corrupt cache try removing it and restarting it: error line: %d", varfile_get_lineno(varfile)); ! /* as long as file_parse_string didn't return an error we're ! * guaranteed proper strings with file_get_var_name(), ! * file_get_var_val() */ ! cache_entry = make_cache_entry(varfile_get_name(varfile), varfile_get_val(varfile)); ! return cache_entry; } --- 79,104 ---- { cache_entry_t *cache_entry; ! int retval; ! retval = varfile_get_next_var(varfile); ! switch(retval) { ! case VARFILE_PARSE_ERROR: ! fatal_error("client-cache: parse error in cache: %s : line %d", ! varfile_get_filename(varfile), varfile_get_lineno(varfile)); ! case VARFILE_EOF: ! return NULL; + case VARFILE_SUCCESS: + cache_entry = make_cache_entry(varfile_get_name(varfile), varfile_get_val(varfile)); + return cache_entry; + + default: + fatal_error("client-cache: read_next_cache_var: internal error -- please report this."); + } + + /* we never get here. */ + return NULL; } *************** *** 98,102 **** cache_entry_t *cache_entry; ! varfile = varfile_open(filename); if(varfile == NULL) return -1; --- 109,113 ---- cache_entry_t *cache_entry; ! varfile = create_varfile(filename, VARFILE_VARVAL_MODE); if(varfile == NULL) return -1; *************** *** 270,274 **** } ! fprintf(fp, "%s=%s\n", name, val); xfree(val); } --- 281,285 ---- } ! fprintf(fp, "\"%s\"=%s\n", name, val); xfree(val); } Index: dhcp-client-conf.c =================================================================== RCS file: /cvsroot/dhcp-agent/dhcp-agent/dhcp-client-conf.c,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** dhcp-client-conf.c 6 Jun 2002 23:59:00 -0000 1.8 --- dhcp-client-conf.c 17 Jun 2002 02:26:39 -0000 1.9 *************** *** 26,29 **** --- 26,32 ---- #include <dhcp-util.h> #include <dhcp-files.h> + #include <dhcp-stringbuffer.h> + #include <dhcp-parser.h> + #include <dhcp-varfile.h> /* Basic network configuration. *************** *** 108,146 **** int i; unsigned char match; ! varfile = varfile_open(fname); if(varfile == NULL) return -1; ! while(!file_get_var_string(varfile)) { ! if(file_parse_string(varfile, PARSE_SINGLE_STRING)) { ! destroy_varfile(varfile); ! return -1; ! } ! match = 0; ! for(i = 0;i < MAX_OPTIONS_HANDLED;i++) { ! /* as long as no error was returned from file_parse_string ! * we can just do a file_get_var_name() safely. */ ! if(string_matches(dhcp_options_strings[i], ! varfile_get_name(varfile))) { ! cc->options[i] = 1; ! match = 1; ! break; ! } ! } if(match != 1) warn_message("encountered illegal DHCP option in %s: %s : %d", fname, varfile_get_name(varfile), varfile_get_lineno(varfile)); } - - destroy_varfile(varfile); - return 0; } --- 111,160 ---- int i; unsigned char match; + int retval; ! varfile = create_varfile(fname, VARFILE_VARNAMES_MODE); if(varfile == NULL) return -1; ! while(1) { ! retval = varfile_get_next_var(varfile); ! switch(retval) { ! case VARFILE_SUCCESS: ! match = 0; ! for(i = 0;i < MAX_OPTIONS_HANDLED;i++) { ! /* as long as no error was returned from file_parse_string ! * we can just do a file_get_var_name() safely. */ ! ! if(string_matches(dhcp_options_strings[i], ! varfile_get_name(varfile))) { ! cc->options[i] = 1; ! match = 1; ! break; ! } ! ! } if(match != 1) warn_message("encountered illegal DHCP option in %s: %s : %d", fname, varfile_get_name(varfile), varfile_get_lineno(varfile)); + break; + + case VARFILE_EOF: + destroy_varfile(varfile); + return 0; + + case VARFILE_PARSE_ERROR: + fatal_error("client-conf: parse error in opts file: %s : %d", + varfile_get_filename(varfile), varfile_get_lineno(varfile)); + default: + fatal_error("client-conf: load_options: internal error -- please report this."); + } } } Index: dhcp-client.c =================================================================== RCS file: /cvsroot/dhcp-agent/dhcp-agent/dhcp-client.c,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -d -r1.28 -r1.29 *** dhcp-client.c 15 Jun 2002 18:23:28 -0000 1.28 --- dhcp-client.c 17 Jun 2002 02:26:39 -0000 1.29 *************** *** 410,420 **** fflush(stdout); fflush(stderr); ! /* Go in background now before main loop. */ if(want_background) { /* are we interactive? if so stay in foreground. * ... otherwise ... */ ! destroy_dhcp_client_control(dc); ! interactive = 0; go_background(work_dir); --- 410,420 ---- fflush(stdout); fflush(stderr); ! /* Go in background now before main loop. */ if(want_background) { /* are we interactive? if so stay in foreground. * ... otherwise ... */ ! destroy_dhcp_client_control(dc); ! interactive = 0; go_background(work_dir); Index: dhcp-files.c =================================================================== RCS file: /cvsroot/dhcp-agent/dhcp-agent/dhcp-files.c,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** dhcp-files.c 6 Jun 2002 23:59:00 -0000 1.10 --- dhcp-files.c 17 Jun 2002 02:26:39 -0000 1.11 *************** *** 28,46 **** #include <dhcp-files.h> - char *varfile_get_name(varfile_t *varfile) - { - return varfile->var_name; - } - - char *varfile_get_val(varfile_t *varfile) - { - return varfile->var_val; - } - - int varfile_get_lineno(varfile_t *varfile) - { - return varfile->line_no; - } - static FILE *file_open_proc(const char *filename, char *cmode, int flags, mode_t mode) { --- 28,31 ---- *************** *** 66,69 **** --- 51,55 ---- /* Assumes we're opening a directory only writable by us . */ + /* create file or open it if it exists. */ FILE *file_open_or_create_safe(const char *filename, char *mode) { *************** *** 71,74 **** --- 57,61 ---- } + /* create file or open if it exists, and always truncate. */ FILE *file_create_and_truncate_safe(const char *filename, char *mode) { *************** *** 76,216 **** } ! varfile_t *varfile_open(const char *filename) ! { ! varfile_t *varfile; ! ! varfile = xmalloc(sizeof(varfile_t)); ! varfile->fp = file_open_or_create_safe(filename, "r"); ! if(varfile->fp == NULL) { ! xfree(varfile); ! return NULL; ! } ! ! varfile->var_name = NULL; ! varfile->var_val = NULL; ! varfile->line_buff = NULL; ! varfile->line_no = 0; ! ! return varfile; ! } ! ! void destroy_varfile(varfile_t *varfile) ! { ! fclose(varfile->fp); /* close file */ ! if(varfile->line_buff != NULL) ! xfree(varfile->line_buff); /* free line buffer. */ ! xfree(varfile); /* free struct. */ ! ! return; ! } ! ! int file_parse_string(varfile_t *varfile, int type) ! { ! char *s; ! ! if(varfile->line_buff == NULL) ! return -1; ! ! switch(type) { ! ! case PARSE_DOUBLE_STRINGS: ! s = strchr(varfile->line_buff, '='); ! if(s == NULL) ! return -1; ! ! *s = '\0'; ! s++; ! if(*s == '\0' || *s == '\n' || *s == '\r') ! return -1; ! varfile->var_name = varfile->line_buff; ! varfile->var_val = s; ! ! trim_string(varfile->var_name); ! trim_string(varfile->var_val); ! ! if(!isascii(*varfile->var_name) || !isascii(*varfile->var_val)) ! return -1; ! ! break; ! ! case PARSE_SINGLE_STRING: ! trim_string(varfile->line_buff); ! varfile->var_name = varfile->line_buff; ! ! if(!isascii(*varfile->var_name)) ! return -1; ! ! trim_string(varfile->var_name); ! ! break; ! ! default: ! break; ! } ! ! return 0; ! } ! ! /* Get the next string from the file. ! * In order to do this for variable length strings which may be ! * very long or very short we do a walk ahead till we find the ! * newline character and then read everything up to it. ! * We need to do this to support options which are larger ! * than 255 octets which we may receive. ! * ! * Should we worry about size limits? No. An IP packet cannot be ! * bigger than 65535 bytes, and we're most likely receiving a ! * little under 600 bytes from the UDP packet. We can handle both ! * such sizes reasonably well. ! * ! */ ! ! int file_get_var_string(varfile_t *varfile) ! { ! off_t begin_line_seek, end_line_seek; ! int c; ! unsigned char have_line = 0; ! size_t string_size; ! ! begin_line_seek = ftell(varfile->fp); ! ! if(varfile->line_buff != NULL) { ! /* free up old string. */ ! xfree(varfile->line_buff); ! varfile->line_buff = NULL; ! } ! ! while((c = fgetc(varfile->fp)) != EOF) { ! if(c == '\n') { ! have_line = 1; ! break; ! } ! } ! ! if(!have_line) ! return 1; ! ! end_line_seek = ftell(varfile->fp); ! ! /* Our buffer needs to be as big as the line plus ! * one for the null termination. */ ! ! string_size = (end_line_seek - begin_line_seek); ! varfile->line_buff = xmalloc(string_size + 1); ! ! /* seek back. */ ! fseek(varfile->fp, begin_line_seek, SEEK_SET); ! ! ! /* all done. read up! */ ! if(fread(varfile->line_buff, sizeof(char), string_size, varfile->fp) != string_size) ! return 1; ! ! /* null terminate. */ ! varfile->line_buff[string_size] = 0; ! return 0; ! ! } ! void delete_file(char *fname) { --- 63,67 ---- } ! /* delete a file. */ void delete_file(char *fname) { *************** *** 218,221 **** --- 69,73 ---- } + /* move a file. */ void move_file(char *fname, char *dest) { *************** *** 230,237 **** --- 82,92 ---- } + /* check if a file exists. -- achtung: watch out for race + * conditions */ int file_exists(char *fname) { FILE *fp; + /* use stdio. fixme: should we stat()?*/ fp = fopen(fname, "r"); if(fp != NULL) { *************** *** 242,245 **** --- 97,101 ---- } + /* change mode on a file so its publicaly readable. */ void make_file_public_read(char *fname) { *************** *** 247,250 **** --- 103,107 ---- } + /* grab our pid file. <name>.pid */ static char *get_pid_file_name(char *name) { *************** *** 252,255 **** --- 109,113 ---- } + /* create a pid file <name>.pid */ void create_pid_file(char *name) { *************** *** 269,272 **** --- 127,131 ---- } + /* delete a pid file <name>.pid */ void delete_pid_file(char *name) { Index: dhcp-files.h =================================================================== RCS file: /cvsroot/dhcp-agent/dhcp-agent/dhcp-files.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** dhcp-files.h 30 May 2002 06:44:05 -0000 1.2 --- dhcp-files.h 17 Jun 2002 02:26:39 -0000 1.3 *************** *** 27,53 **** #define DHCP_FILE - typedef struct { - FILE *fp; /* file pointer. */ - char *var_name; - char *var_val; - char *line_buff; - int line_no; - } varfile_t; - - - /* file routines. */ - - extern varfile_t *varfile_open(const char *filename); - extern void destroy_varfile(varfile_t *varfile); - - extern int file_parse_string(varfile_t *varfile, int type); - extern int file_get_var_string(varfile_t *varfile); - extern FILE *file_open_or_create_safe(const char *filename, char *mode); extern FILE *file_create_and_truncate_safe(const char *filename, char *mode); - - extern char *varfile_get_name(varfile_t *varfile); - extern char *varfile_get_val(varfile_t *varfile); - extern int varfile_get_lineno(varfile_t *varfile); extern int file_exists(char *fname); --- 27,32 ---- Index: dhcp-globconf.c =================================================================== RCS file: /cvsroot/dhcp-agent/dhcp-agent/dhcp-globconf.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** dhcp-globconf.c 15 Jun 2002 18:23:28 -0000 1.6 --- dhcp-globconf.c 17 Jun 2002 02:26:39 -0000 1.7 *************** *** 33,36 **** --- 33,39 ---- #include <dhcp-files.h> #include <dhcp-convert.h> + #include <dhcp-stringbuffer.h> + #include <dhcp-parser.h> + #include <dhcp-varfile.h> /* change this before... */ *************** *** 100,103 **** --- 103,107 ---- int i; unsigned char match; + int retval; /* we're ok. all config options are in directories only *************** *** 110,160 **** } ! varfile = varfile_open(filename); if(varfile == NULL) fatal_error("glob-conf: could not open configuration file: %s: %s", filename, strerror(errno)); ! while(!file_get_var_string(varfile)) { ! if(file_parse_string(varfile, PARSE_DOUBLE_STRINGS)) { ! destroy_varfile(varfile); /* fixme: add parse error. */ ! return -1; ! } - match = 0; - for(i = 0;i < GLOBAL_OPTIONS_LEN;i++) { ! if(string_matches(global_config_options[i].name, varfile_get_name(varfile))) { ! /* we have a match. */ ! match = 1; ! /* skip options which have been set, since some of these may be set ! on the command line. */ ! if(global_config_options[i].val != NULL) ! break; ! global_config_options[i].val = global_config_options[i].convert_option_to_internal(varfile_get_val(varfile)); ! if(global_config_options[i].val == NULL) ! fatal_error("glob-conf: unable to convert value for option %s : line no: %d -- munged variable?", ! varfile_get_name(varfile), varfile_get_lineno(varfile)); ! break; ! } ! } ! if(match != 1) ! warn_message("glob-conf: unable to lookup variable name %s: line no: %d -- skipping", ! varfile_get_name(varfile), varfile_get_lineno(varfile)); ! } ! destroy_varfile(varfile); ! /* one more pass to convert defaults if needed. ! * a user could always truncate the file we dumped. */ ! glob_conf_set_defaults(); - return 0; } --- 114,174 ---- } ! varfile = create_varfile(filename, VARFILE_VARVAL_MODE); if(varfile == NULL) fatal_error("glob-conf: could not open configuration file: %s: %s", filename, strerror(errno)); ! while(1) { ! retval = varfile_get_next_var(varfile); ! switch(retval) { ! case VARFILE_SUCCESS: ! match = 0; ! for(i = 0;i < GLOBAL_OPTIONS_LEN;i++) { ! if(string_matches(global_config_options[i].name, varfile_get_name(varfile))) { ! /* we have a match. */ ! match = 1; ! /* skip options which have been set, since some of these may be set ! on the command line. */ ! if(global_config_options[i].val != NULL) ! break; ! global_config_options[i].val = ! global_config_options[i].convert_option_to_internal(varfile_get_val(varfile)); ! if(global_config_options[i].val == NULL) ! fatal_error("glob-conf: unable to convert value for option %s : line no: %d -- munged variable?", ! varfile_get_name(varfile), varfile_get_lineno(varfile)); ! break; ! } ! } ! ! if(match != 1) ! warn_message("glob-conf: unable to lookup variable name %s: line no: %d -- skipping", ! varfile_get_name(varfile), varfile_get_lineno(varfile)); ! break; ! ! case VARFILE_PARSE_ERROR: ! fatal_error("glob-conf: parse error in %s: line %d", ! varfile_get_filename(varfile), varfile_get_lineno(varfile)); ! case VARFILE_EOF: ! destroy_varfile(varfile); ! /* one more pass to convert defaults if needed. ! * a user could always truncate the file we dumped. */ ! glob_conf_set_defaults(); ! return 0; ! default: ! fatal_error("glob-conf: internal error -- please report this bug."); ! } ! } } Index: dhcpclient.1 =================================================================== RCS file: /cvsroot/dhcp-agent/dhcp-agent/dhcpclient.1,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** dhcpclient.1 16 Jun 2002 19:55:47 -0000 1.11 --- dhcpclient.1 17 Jun 2002 02:26:39 -0000 1.12 *************** *** 108,112 **** .Xr pcap 3 .Sh AUTHORS ! .An Thamer Al-Harbash .Aq tm...@wh... .An Brian J. Kifiak --- 108,112 ---- .Xr pcap 3 .Sh AUTHORS ! .An Thamer Al-Harbash .Aq tm...@wh... .An Brian J. Kifiak |