#include #include #include #include "config-parser.h" #define DEBUG 0 char config_file[255][MAX_CONFIG_LINES]; int config_linenr[MAX_CONFIG_LINES]; int line_count = 0; int max_config_line; char configline[255] = ""; int esac_line; int delete_list[MAX_SCHEMES][2]; int delete_list_count = 0; int parse_configfile(char* cfgname) { FILE *inputfile; memset(schemelist, 0, sizeof(schemelist)); memset(config_file, 0, sizeof(config_file)); memset(config_linenr, 0, sizeof(config_linenr)); inputfile=fopen(cfgname, "r"); if (!inputfile) { fprintf(stderr, "Could not open input file %s\n", cfgname); return(0); } line_count = 0; while (fgets(config_file[line_count], 255, inputfile)) { config_linenr[line_count]=line_count+1; line_count++; } rewind(inputfile); wl_set_inputfile(inputfile); parse_input(); if (DEBUG) printf("Found %i schemes...\n", schemecount); return(schemecount); } void config_insert_line(Scheme_t *Schemes, int scount, int linenr) { int count; int valcount; for (count=0; count=linenr) && (Schemes[count].lines[valcount]!=LINE_NEW)) Schemes[count].lines[valcount]++; if (Schemes[count].scheme_start) Schemes[count].scheme_start++; if (Schemes[count].scheme_end>=linenr) Schemes[count].scheme_end++; if (Schemes[count].parent_scheme_end>=linenr) Schemes[count].parent_scheme_end++; } for (count=0; count=linenr) config_linenr[count]++; for (count=0; count=linenr) delete_list[count][0]++; if(delete_list[count][1]>=linenr) delete_list[count][1]++; } max_config_line++; } char *get_config_line(Scheme_t *Schemes, int scount, int linenr) { int count; int valcount; int found_configline = FALSE; strcpy(configline, ""); for (count=0; count=delete_list[count][0]) && (linenr<=delete_list[count][1])) return(TRUE); return(FALSE); } int write_back_configfile(char* cfgname, Scheme_t *Schemes, int scount) { FILE *outputfile; int count; int valcount; int max_confset_line; max_config_line=config_linenr[line_count-1]; outputfile=fopen(cfgname, "w"); if (!outputfile) { fprintf(stderr, "Could not open output file %s\n", cfgname); return(0); } for (count=0; count=L_Encryption) && (valcount<=L_ActiveKey)) { if ((Schemes[count].lines[L_Encryption]==LINE_NEW) || (Schemes[count].lines[L_EncMode]==LINE_NEW) || (Schemes[count].lines[L_KeyFormat]==LINE_NEW) || (Schemes[count].lines[L_key1]==LINE_NEW) || (Schemes[count].lines[L_key2]==LINE_NEW) || (Schemes[count].lines[L_key3]==LINE_NEW) || (Schemes[count].lines[L_key4]==LINE_NEW) || (Schemes[count].lines[L_ActiveKey]==LINE_NEW)) { max_confset_line++; config_insert_line(Schemes, scount, max_confset_line); Schemes[count].lines[L_Encryption]=max_confset_line; Schemes[count].lines[L_EncMode]=max_confset_line; Schemes[count].lines[L_KeyFormat]=max_confset_line; Schemes[count].lines[L_key1]=max_confset_line; Schemes[count].lines[L_key2]=max_confset_line; Schemes[count].lines[L_key3]=max_confset_line; Schemes[count].lines[L_key4]=max_confset_line; Schemes[count].lines[L_ActiveKey]=max_confset_line; } } else if(Schemes[count].lines[valcount] == LINE_NEW) { max_confset_line++; config_insert_line(Schemes, scount, max_confset_line); Schemes[count].lines[valcount] = max_confset_line; } max_confset_line++; config_insert_line(Schemes, scount, max_confset_line); strcpy(config_file[line_count], "\t;;\n\n"); config_linenr[line_count]=max_confset_line; line_count++; } else { for (valcount=0; valcount=L_Encryption) && (valcount<=L_ActiveKey)) { if ((Schemes[count].lines[L_Encryption]==LINE_NEW) || (Schemes[count].lines[L_EncMode]==LINE_NEW) || (Schemes[count].lines[L_KeyFormat]==LINE_NEW) || (Schemes[count].lines[L_key1]==LINE_NEW) || (Schemes[count].lines[L_key2]==LINE_NEW) || (Schemes[count].lines[L_key3]==LINE_NEW) || (Schemes[count].lines[L_key4]==LINE_NEW) || (Schemes[count].lines[L_ActiveKey]==LINE_NEW)) { max_confset_line++; config_insert_line(Schemes, scount, max_confset_line); Schemes[count].lines[L_Encryption]=max_confset_line; Schemes[count].lines[L_EncMode]=max_confset_line; Schemes[count].lines[L_KeyFormat]=max_confset_line; Schemes[count].lines[L_key1]=max_confset_line; Schemes[count].lines[L_key2]=max_confset_line; Schemes[count].lines[L_key3]=max_confset_line; Schemes[count].lines[L_key4]=max_confset_line; Schemes[count].lines[L_ActiveKey]=max_confset_line; } } else if (Schemes[count].lines[valcount]==LINE_NEW) { max_confset_line++; config_insert_line(Schemes, scount, max_confset_line); Schemes[count].lines[valcount]=max_confset_line; } } } } for (count=0; count