X-Git-Url: http://ftp.carnet.hr/carnet-debian/scm?p=ossec-hids.git;a=blobdiff_plain;f=src%2Fanalysisd%2Flists_make.c;fp=src%2Fanalysisd%2Flists_make.c;h=3448916cf9b744b068745f569d233d5ca5dc0eb2;hp=0000000000000000000000000000000000000000;hb=a62b46c229549212d536867b7e5e24d7576ebe8b;hpb=d623b82886b9b5fbba3fa27c3bfac51f3f8af108 diff --git a/src/analysisd/lists_make.c b/src/analysisd/lists_make.c new file mode 100644 index 0000000..3448916 --- /dev/null +++ b/src/analysisd/lists_make.c @@ -0,0 +1,98 @@ +/* @(#) $Id$ */ + +/* Copyright (C) 2009 Trend Micro Inc. + * All right reserved. + * + * This program is a free software; you can redistribute it + * and/or modify it under the terms of the GNU General Public + * License (version 3) as published by the FSF - Free Software + * Foundation + */ + +#include "shared.h" +#include "rules.h" +#include "cdb/cdb.h" +#include "cdb/cdb_make.h" +#include +#include +#include +#include +#include "lists_make.h" + +void Lists_OP_MakeAll(int force) +{ + ListNode *lnode = OS_GetFirstList(); + while(lnode) + { + Lists_OP_MakeCDB(lnode->txt_filename, + lnode->cdb_filename, + force); + lnode = lnode->next; + } +} + +void Lists_OP_MakeCDB(char *txt_filename, char *cdb_filename, int force) +{ + /* + struct stat cdb_stat; + struct stat txt_stat; + */ + struct cdb_make cdbm; + FILE *tmp_fd; + FILE *txt_fd; + char *tmp_str; + char *key, *val; + char str[OS_MAXSTR+1]; + + str[OS_MAXSTR]= '\0'; + char tmp_filename[OS_MAXSTR]; + tmp_filename[OS_MAXSTR - 2] = '\0'; + snprintf(tmp_filename, OS_MAXSTR - 2, "%s.tmp", txt_filename); + + /* + if((stat(txt_filename, &txt_stat)) == -1) + debug1("%s: stat of file %s failed", ARGV0, txt_filename); + if((stat(cdb_filename, &cdb_stat)) == -1) + debug1("%s: stat of file %s failed", ARGV0, cdb_filename); + */ + if(File_DateofChange(txt_filename) > File_DateofChange(cdb_filename) || + force) + { + printf(" * File %s need to be updated\n", cdb_filename); + tmp_fd = fopen(tmp_filename, "w+"); + cdb_make_start(&cdbm, tmp_fd); + if(!(txt_fd = fopen(txt_filename, "r"))) + { + merror(FOPEN_ERROR, ARGV0, txt_filename); + return; + } + while((fgets(str, OS_MAXSTR-1,txt_fd)) != NULL) + { + /* Removing new lines or carriage returns. */ + tmp_str = strchr(str, '\r'); + if(tmp_str) + *tmp_str = '\0'; + tmp_str = strchr(str, '\n'); + if(tmp_str) + *tmp_str = '\0'; + if((val = strchr(str, ':'))) + { + *val = '\0'; + val++; + } + else + { + continue; + } + key = str; + cdb_make_add(&cdbm, key, strlen(key), val, strlen(val)); + if(force) print_out(" * adding - key: %s value: %s",key,val); + } + cdb_make_finish(&cdbm); + rename(tmp_filename,cdb_filename); + } + else + { + printf(" * File %s does not need to be compiled\n", cdb_filename); + } +}