[Dhcp-agent-commits] CVS: dhcp-agent dhcp-files.h,NONE,1.1 configure.in,1.12,1.13 dhcp-agent.h,1.40,
Status: Alpha
Brought to you by:
actmodern
From: Thamer Al-H. <act...@us...> - 2002-05-29 03:12:57
|
Update of /cvsroot/dhcp-agent/dhcp-agent In directory usw-pr-cvs1:/tmp/cvs-serv25690 Modified Files: configure.in dhcp-agent.h dhcp-client-cache.c dhcp-client-conf.c dhcp-client.c dhcp-convert.c dhcp-files.c dhcp-globconf.c dhcp-sysconf.c dhcp-util.c Added Files: dhcp-files.h Log Message: added new varfile handling routines with line no errors on parse warnings/errrors. --- NEW FILE: dhcp-files.h --- #ifndef DHCP_FILE #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); extern void move_file(char *fname, char *dest); extern void delete_file(char *fname); extern void make_file_public_read(char *fname); extern void create_pid_file(char *name); extern void delete_pid_file(char *name); extern int get_pid_file(char *name, pid_t *pid); #endif /* DHCP_FILE */ Index: configure.in =================================================================== RCS file: /cvsroot/dhcp-agent/dhcp-agent/configure.in,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** configure.in 25 May 2002 20:55:36 -0000 1.12 --- configure.in 29 May 2002 03:12:54 -0000 1.13 *************** *** 26,30 **** AC_HEADER_STDC ! dnl check for inttypes.h AC_CHECK_HEADERS(inttypes.h signal.h varargs.h stdarg.h sys/utsname.h getopt.h) --- 26,30 ---- AC_HEADER_STDC ! dnl check for inttypes.h signal.h varargs.h stdarg.h sys/utsname.h getopt.h AC_CHECK_HEADERS(inttypes.h signal.h varargs.h stdarg.h sys/utsname.h getopt.h) Index: dhcp-agent.h =================================================================== RCS file: /cvsroot/dhcp-agent/dhcp-agent/dhcp-agent.h,v retrieving revision 1.40 retrieving revision 1.41 diff -C2 -d -r1.40 -r1.41 *** dhcp-agent.h 25 May 2002 20:55:36 -0000 1.40 --- dhcp-agent.h 29 May 2002 03:12:54 -0000 1.41 *************** *** 884,903 **** extern int client_setup(dhcp_client_control_t *dc); - /* file routines. */ - - extern int file_parse_string(int type); - extern int file_get_var_string(FILE *fp); - 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 *file_get_var_name(void); - extern char *file_get_var_val(void); - extern int file_exists(char *fname); - extern void move_file(char *fname, char *dest); - extern void delete_file(char *fname); - extern void make_file_public_read(char *fname); - extern void create_pid_file(char *name); - extern void delete_pid_file(char *name); - extern int get_pid_file(char *name, pid_t *pid); - /* System configuration routines. */ --- 884,887 ---- Index: dhcp-client-cache.c =================================================================== RCS file: /cvsroot/dhcp-agent/dhcp-agent/dhcp-client-cache.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** dhcp-client-cache.c 8 Feb 2002 01:37:29 -0000 1.6 --- dhcp-client-cache.c 29 May 2002 03:12:54 -0000 1.7 *************** *** 25,28 **** --- 25,29 ---- #include <dhcp-agent.h> + #include <dhcp-files.h> /* constructor. */ *************** *** 70,82 **** /* read next cache entry from file. */ ! static cache_entry_t *read_next_cache_var(FILE *fp) { cache_entry_t *cache_entry; ! if(file_get_var_string(fp)) return NULL; ! if(file_parse_string(PARSE_DOUBLE_STRINGS)) ! fatal_error("corrupt cache! try removing it and restarting it."); /* as long as file_parse_string didn't return an error we're --- 71,83 ---- /* read next cache entry from file. */ ! static cache_entry_t *read_next_cache_var(varfile_t *varfile) { 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 *************** *** 84,88 **** * file_get_var_val() */ ! cache_entry = make_cache_entry(file_get_var_name(), file_get_var_val()); return cache_entry; --- 85,89 ---- * file_get_var_val() */ ! cache_entry = make_cache_entry(varfile_get_name(varfile), varfile_get_val(varfile)); return cache_entry; *************** *** 92,108 **** static int load_client_cache_proc(client_cache_t *cc, char *filename) { ! FILE *fp; cache_entry_t *cache_entry; ! fp = file_open_or_create_safe(filename, "r"); ! if(fp == NULL) return -1; /* Read up any vars. */ ! while((cache_entry = read_next_cache_var(fp)) != NULL) cc->vars = add_to_list(cc->vars, cache_entry); ! fclose(fp); return 0; --- 93,109 ---- static int load_client_cache_proc(client_cache_t *cc, char *filename) { ! varfile_t *varfile; cache_entry_t *cache_entry; ! varfile = varfile_open(filename); ! if(varfile == NULL) return -1; /* Read up any vars. */ ! while((cache_entry = read_next_cache_var(varfile)) != NULL) cc->vars = add_to_list(cc->vars, cache_entry); ! destroy_varfile(varfile); return 0; Index: dhcp-client-conf.c =================================================================== RCS file: /cvsroot/dhcp-agent/dhcp-agent/dhcp-client-conf.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** dhcp-client-conf.c 25 May 2002 15:18:01 -0000 1.6 --- dhcp-client-conf.c 29 May 2002 03:12:54 -0000 1.7 *************** *** 24,27 **** --- 24,28 ---- #include <dhcp-agent.h> + #include <dhcp-files.h> /* Basic network configuration. *************** *** 71,75 **** FILE *fp; ! fp = file_open_or_create_safe(fname, "w"); if(fp == NULL) --- 72,76 ---- FILE *fp; ! fp = file_open_or_create_safe(fname, "a+"); if(fp == NULL) *************** *** 103,121 **** static int client_conf_load_options(client_conf_t *cc, char *fname) { ! FILE *fp; int i; ! fp = file_open_or_create_safe(fname, "r"); ! if(fp == NULL) return -1; ! while(!file_get_var_string(fp)) { ! if(file_parse_string(PARSE_SINGLE_STRING)) { ! fclose(fp); return -1; } for(i = 0;i < MAX_OPTIONS_HANDLED;i++) { --- 104,124 ---- static int client_conf_load_options(client_conf_t *cc, char *fname) { ! varfile_t *varfile; 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++) { *************** *** 124,136 **** if(string_matches(dhcp_options_strings[i], ! file_get_var_name())) { cc->options[i] = 1; break; } } } ! fclose(fp); return 0; } --- 127,144 ---- 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; } Index: dhcp-client.c =================================================================== RCS file: /cvsroot/dhcp-agent/dhcp-agent/dhcp-client.c,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** dhcp-client.c 25 May 2002 14:02:30 -0000 1.19 --- dhcp-client.c 29 May 2002 03:12:54 -0000 1.20 *************** *** 25,32 **** #include <dhcp-agent.h> #include <dhcp-globconf.h> int interactive = 1; /* by default we begin interactive (messages on stdout/stderr). */ ! char *binname = "dhcpclient"; /* we need a name. */ ! char *work_dir = CLIENT_WORK_DIR; /* our default working directory */ /* read up on our global conf. */ --- 25,32 ---- #include <dhcp-agent.h> #include <dhcp-globconf.h> + #include <dhcp-files.h> int interactive = 1; /* by default we begin interactive (messages on stdout/stderr). */ ! char *binname = "dhcpclient"; /* we need a name. */char *work_dir = CLIENT_WORK_DIR; /* our default working directory */ /* read up on our global conf. */ Index: dhcp-convert.c =================================================================== RCS file: /cvsroot/dhcp-agent/dhcp-agent/dhcp-convert.c,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** dhcp-convert.c 25 May 2002 20:55:36 -0000 1.10 --- dhcp-convert.c 29 May 2002 03:12:54 -0000 1.11 *************** *** 471,475 **** { char *string; - unsigned char *tmp; if(size > data_len) --- 471,474 ---- Index: dhcp-files.c =================================================================== RCS file: /cvsroot/dhcp-agent/dhcp-agent/dhcp-files.c,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** dhcp-files.c 25 May 2002 20:55:36 -0000 1.8 --- dhcp-files.c 29 May 2002 03:12:54 -0000 1.9 *************** *** 25,42 **** #include <dhcp-agent.h> ! #include <dhcp-file.h> ! static char *line_buff = NULL; ! static char *var_name = NULL; ! static char *var_val = NULL; ! char *file_get_var_name(void) { ! return var_name; } ! char *file_get_var_val(void) { ! return var_val; } --- 25,43 ---- #include <dhcp-agent.h> ! #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; } *************** *** 74,85 **** } ! int file_parse_string(int type) { char *s; switch(type) { case PARSE_DOUBLE_STRINGS: ! s = strchr(line_buff, '='); if(s == NULL) return -1; --- 75,118 ---- } ! 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; *************** *** 89,99 **** if(*s == '\0' || *s == '\n' || *s == '\r') return -1; ! var_name = line_buff; ! var_val = s; ! trim_string(var_name); ! trim_string(var_val); ! if(!isascii(*var_name) || !isascii(*var_val)) return -1; --- 122,132 ---- 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; *************** *** 101,110 **** case PARSE_SINGLE_STRING: ! trim_string(line_buff); ! var_name = line_buff; ! if(!isascii(*var_name)) return -1; break; --- 134,145 ---- 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; *************** *** 130,149 **** */ ! int file_get_var_string(FILE *fp) { ! long begin_line_seek, end_line_seek; int c; unsigned char have_line = 0; size_t string_size; ! begin_line_seek = ftell(fp); ! if(line_buff != NULL) { /* free up old string. */ ! xfree(line_buff); ! line_buff = NULL; } ! while((c = fgetc(fp)) != EOF) { if(c == '\n') { have_line = 1; --- 165,184 ---- */ ! 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; *************** *** 155,159 **** return 1; ! end_line_seek = ftell(fp); /* Our buffer needs to be as big as the line plus --- 190,194 ---- return 1; ! end_line_seek = ftell(varfile->fp); /* Our buffer needs to be as big as the line plus *************** *** 161,177 **** string_size = (end_line_seek - begin_line_seek); ! line_buff = xmalloc(string_size + 1); /* seek back. */ ! fseek(fp, begin_line_seek, SEEK_SET); /* all done. read up! */ ! if(fread(line_buff, sizeof(char), string_size, fp) != string_size) return 1; ! else { ! line_buff[string_size] = 0; ! return 0; ! } } --- 196,213 ---- 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; ! } Index: dhcp-globconf.c =================================================================== RCS file: /cvsroot/dhcp-agent/dhcp-agent/dhcp-globconf.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** dhcp-globconf.c 25 May 2002 15:18:01 -0000 1.1 --- dhcp-globconf.c 29 May 2002 03:12:54 -0000 1.2 *************** *** 30,33 **** --- 30,34 ---- #include <dhcp-agent.h> #include <dhcp-globconf.h> + #include <dhcp-files.h> /* change this before... */ *************** *** 86,91 **** int init_glob_conf(unsigned char *filename) { ! FILE *fp; int i; /* we're ok. all config options are in directories only --- 87,93 ---- int init_glob_conf(unsigned char *filename) { ! varfile_t *varfile; int i; + unsigned char match; /* we're ok. all config options are in directories only *************** *** 98,119 **** } ! fp = file_open_or_create_safe(filename, "r"); ! if(fp == NULL) fatal_error("glob-conf: could not open configuration file: %s: %s", filename, strerror(errno)); ! while(!file_get_var_string(fp)) { ! if(file_parse_string(PARSE_DOUBLE_STRINGS)) { ! fclose(fp); /* fixme: add parse error. */ return -1; } for(i = 0;i < GLOBAL_OPTIONS_LEN;i++) { ! if(string_matches(global_config_options[i].name, file_get_var_name())) { /* we have a match. */ ! global_config_options[i].val = global_config_options[i].convert_option_to_internal(file_get_var_val()); if(global_config_options[i].val == NULL) ! fatal_error("glob-conf: unable to convert value for option %s -- munged variable?"); break; --- 100,124 ---- } ! 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; ! 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; *************** *** 121,127 **** } } ! fclose(fp); /* one more pass to convert defaults if needed. --- 126,136 ---- } + 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. Index: dhcp-sysconf.c =================================================================== RCS file: /cvsroot/dhcp-agent/dhcp-agent/dhcp-sysconf.c,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** dhcp-sysconf.c 19 May 2002 23:07:53 -0000 1.11 --- dhcp-sysconf.c 29 May 2002 03:12:54 -0000 1.12 *************** *** 26,29 **** --- 26,30 ---- #include <dhcp-agent.h> + #include <dhcp-files.h> /* Only use handlers here which can be done in any order. Index: dhcp-util.c =================================================================== RCS file: /cvsroot/dhcp-agent/dhcp-agent/dhcp-util.c,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** dhcp-util.c 25 May 2002 14:02:30 -0000 1.13 --- dhcp-util.c 29 May 2002 03:12:54 -0000 1.14 *************** *** 28,32 **** static char msgbuff[MSG_BUFFER_SIZE]; ! static int verbosity_level = NORMAL_VERBOSITY_LEVEL; /* set the verbosity level. */ --- 28,32 ---- static char msgbuff[MSG_BUFFER_SIZE]; ! static int verbosity_level = WARNING_VERBOSITY_LEVEL; /* set the verbosity level. */ *************** *** 94,98 **** va_list ap; ! if(verbosity_level < ERROR_VERBOSITY_LEVEL) return; --- 94,98 ---- va_list ap; ! if(!(verbosity_level >= NORMAL_VERBOSITY_LEVEL)) return; *************** *** 115,119 **** va_list ap; ! if(verbosity_level < WARNING_VERBOSITY_LEVEL) return; --- 115,119 ---- va_list ap; ! if(!(verbosity_level >= WARNING_VERBOSITY_LEVEL)) return; *************** *** 136,140 **** va_list ap; ! if(verbosity_level < DEBUG_VERBOSITY_LEVEL) return; --- 136,140 ---- va_list ap; ! if(!(verbosity_level >= DEBUG_VERBOSITY_LEVEL)) return; |