diff -up ./include/be.h.coverity ./include/be.h --- ./include/be.h.coverity 2016-07-25 22:56:55.000000000 +0200 +++ ./include/be.h 2018-10-10 19:27:18.680632681 +0200 @@ -22,6 +22,6 @@ #define _BE_H_INCLUDED #include "db_config.h" -FILE* be_init(int inout,url_t* u,int iszipped); +void* be_init(int inout,url_t* u,int iszipped); #endif /* _BE_H_INCLUDED */ diff -up ./include/db_config.h.coverity ./include/db_config.h --- ./include/db_config.h.coverity 2018-10-10 19:27:18.672632611 +0200 +++ ./include/db_config.h 2018-10-10 19:27:18.681632689 +0200 @@ -376,7 +376,7 @@ typedef struct db_config { #endif url_t* initial_report_url; - FILE* initial_report_fd; + void* initial_report_fd; /* report_url is a list of url_t*s */ list* report_url; diff -up ./src/aide.c.coverity ./src/aide.c --- ./src/aide.c.coverity 2018-10-10 19:27:18.678632663 +0200 +++ ./src/aide.c 2018-10-10 19:27:18.681632689 +0200 @@ -278,7 +278,7 @@ static void setdefaults_before_config() error(0,_("Couldn't get hostname")); free(s); } else { - s=(char*)realloc((void*)s,strlen(s)+1); + // s=(char*)realloc((void*)s,strlen(s)+1); do_define("HOSTNAME",s); } @@ -506,8 +506,6 @@ static void setdefaults_after_config() int main(int argc,char**argv) { int errorno=0; - byte* dig=NULL; - char* digstr=NULL; #ifdef USE_LOCALE setlocale(LC_ALL,""); @@ -544,6 +542,10 @@ int main(int argc,char**argv) } errorno=commandconf('C',conf->config_file); + if (errorno==RETFAIL){ + error(0,_("Configuration error\n")); + exit(INVALID_CONFIGURELINE_ERROR); + } errorno=commandconf('D',""); if (errorno==RETFAIL){ @@ -594,6 +596,9 @@ int main(int argc,char**argv) } } #ifdef WITH_MHASH + byte* dig=NULL; + char* digstr=NULL; + if(conf->config_check&&FORCECONFIGMD){ error(0,"Can't give config checksum when compiled with --enable-forced_configmd\n"); exit(INVALID_ARGUMENT_ERROR); diff -up ./src/base64.c.coverity ./src/base64.c --- ./src/base64.c.coverity 2016-07-25 22:56:55.000000000 +0200 +++ ./src/base64.c 2018-10-10 19:27:18.681632689 +0200 @@ -209,6 +209,7 @@ byte* decode_base64(char* src,size_t ssi case FAIL: error(3, "decode_base64: Illegal character: %c\n", *inb); error(230, "decode_base64: Illegal line:\n%s\n", src); + free(outbuf); return NULL; break; case SKIP: @@ -260,7 +261,7 @@ size_t length_base64(char* src,size_t ss int l; int left; size_t pos; - unsigned long triple; + //unsigned long triple; error(235, "decode base64\n"); /* Exit on empty input */ @@ -273,7 +274,7 @@ size_t length_base64(char* src,size_t ss inb = src; l = 0; - triple = 0; + //triple = 0; pos=0; left = ssize; /* @@ -293,7 +294,7 @@ size_t length_base64(char* src,size_t ss case SKIP: break; default: - triple = triple<<6 | (0x3f & i); + //triple = triple<<6 | (0x3f & i); l++; break; } @@ -302,10 +303,10 @@ size_t length_base64(char* src,size_t ss switch(l) { case 2: - triple = triple>>4; + //triple = triple>>4; break; case 3: - triple = triple>>2; + //triple = triple>>2; break; default: break; @@ -314,7 +315,7 @@ size_t length_base64(char* src,size_t ss { pos++; } - triple = 0; + //triple = 0; l = 0; } inb++; diff -up ./src/be.c.coverity ./src/be.c --- ./src/be.c.coverity 2016-07-25 22:56:55.000000000 +0200 +++ ./src/be.c 2018-10-10 19:27:18.681632689 +0200 @@ -117,9 +117,9 @@ static char* get_first_value(char** in){ #endif -FILE* be_init(int inout,url_t* u,int iszipped) +void* be_init(int inout,url_t* u,int iszipped) { - FILE* fh=NULL; + void* fh=NULL; long a=0; char* err=NULL; int fd; diff -up ./src/commandconf.c.coverity ./src/commandconf.c --- ./src/commandconf.c.coverity 2016-07-25 22:56:55.000000000 +0200 +++ ./src/commandconf.c 2018-10-10 19:27:18.682632698 +0200 @@ -106,7 +106,7 @@ int commandconf(const char mode,const ch rv=0; } else { - rv=access(config,R_OK); + if (config != NULL) rv=access(config,R_OK); if(rv==-1){ error(0,_("Cannot access config file: %s: %s\n"),config,strerror(errno)); } @@ -166,14 +166,11 @@ int commandconf(const char mode,const ch int conf_input_wrapper(char* buf, int max_size, FILE* in) { int retval=0; - int c=0; - char* tmp=NULL; - void* key=NULL; - int keylen=0; /* FIXME Add support for gzipped config. :) */ #ifdef WITH_MHASH /* Read a character at a time until we are doing md */ + int c=0; if(conf->do_configmd){ retval=fread(buf,1,max_size,in); }else { @@ -185,6 +182,9 @@ int conf_input_wrapper(char* buf, int ma #endif #ifdef WITH_MHASH + char* tmp=NULL; + void* key=NULL; + int keylen=0; if(conf->do_configmd||conf->config_check){ if(((conf->do_configmd==1)&&conf->config_check)||!conf->confmd){ if(conf->do_configmd==1){ @@ -276,6 +276,9 @@ int db_input_wrapper(char* buf, int max_ #endif break; } + default: { + return 0; + } } #ifdef WITH_CURL @@ -651,7 +654,6 @@ int handle_endif(int doit,int allow_else case 0 : { conferror("@@endif or @@else expected"); return -1; - count=0; } default : { @@ -816,6 +818,7 @@ void do_dbdef(int dbtype,char* val) if(u==NULL||u->type==url_unknown||u->type==url_stdout ||u->type==url_stderr) { error(0,_("Unsupported input URL-type:%s\n"),val); + free(u); } else { *conf_db_url=u; @@ -825,6 +828,7 @@ void do_dbdef(int dbtype,char* val) case DB_WRITE: { if(u==NULL||u->type==url_unknown||u->type==url_stdin){ error(0,_("Unsupported output URL-type:%s\n"),val); + free(u); } else{ conf->db_out_url=u; @@ -848,6 +852,7 @@ void do_dbindef(char* val) if(u==NULL||u->type==url_unknown||u->type==url_stdout ||u->type==url_stderr) { error(0,_("Unsupported input URL-type:%s\n"),val); + free(u); } else { conf->db_in_url=u; @@ -869,6 +874,7 @@ void do_dboutdef(char* val) * both input and output urls */ if(u==NULL||u->type==url_unknown||u->type==url_stdin){ error(0,_("Unsupported output URL-type:%s\n"),val); + free(u); } else{ conf->db_out_url=u; @@ -894,7 +900,8 @@ void do_repurldef(char* val) } else { error_init(u,0); } - + + free(u); } void do_verbdef(char* val) @@ -984,7 +991,7 @@ void do_report_ignore_e2fsattrs(char* va break; } } - *val++; + (*val)++; } } #endif diff -up ./src/compare_db.c.coverity ./src/compare_db.c --- ./src/compare_db.c.coverity 2018-10-10 19:27:18.673632619 +0200 +++ ./src/compare_db.c 2018-10-10 19:27:18.682632698 +0200 @@ -312,7 +312,7 @@ static int acl2array(acl_type* acl, char if (conf->syslog_format) { *values = malloc(2 * sizeof(char*)); - char *A, *D = ""; + char *A= "", *D = ""; if (acl->acl_a) { A = acl->acl_a; } if (acl->acl_d) { D = acl->acl_d; } diff -up ./src/conf_lex.l.coverity ./src/conf_lex.l --- ./src/conf_lex.l.coverity 2018-10-10 19:27:18.673632619 +0200 +++ ./src/conf_lex.l 2018-10-10 19:27:18.682632698 +0200 @@ -133,7 +133,7 @@ int var_in_conflval=0; [\ \t]*\n { conf_lineno++; return (TNEWLINE); - BEGIN 0; +// BEGIN 0; } \+ { diff -up ./src/db.c.coverity ./src/db.c --- ./src/db.c.coverity 2016-07-25 22:56:55.000000000 +0200 +++ ./src/db.c 2018-10-10 19:27:18.683632707 +0200 @@ -27,6 +27,7 @@ #include "db_file.h" #include "db_disk.h" #include "md.h" +#include "fopen.h" #ifdef WITH_PSQL #include "db_sql.h" @@ -269,6 +270,9 @@ db_line* db_readline(int db){ db_order=&(conf->db_new_order); break; } + default: { + return NULL; + } } switch (db_url->type) { @@ -368,7 +372,7 @@ db_line* db_char2line(char** ss,int db){ int i; db_line* line=(db_line*)malloc(sizeof(db_line)*1); - int* db_osize=0; + int* db_osize=NULL; DB_FIELD** db_order=NULL; switch (db) { @@ -382,6 +386,10 @@ db_line* db_char2line(char** ss,int db){ db_order=&(conf->db_new_order); break; } + default: { + free(line); + return NULL; + } } @@ -601,7 +609,9 @@ db_line* db_char2line(char** ss,int db){ size_t vsz = 0; tval = strtok(NULL, ","); - line->xattrs->ents[num].key = db_readchar(strdup(tval)); + char * tmp = strdup(tval); + line->xattrs->ents[num].key = db_readchar(tmp); + free(tmp); tval = strtok(NULL, ","); val = base64tobyte(tval, strlen(tval), &vsz); line->xattrs->ents[num].val = val; @@ -648,6 +658,8 @@ db_line* db_char2line(char** ss,int db){ default : { error(0,_("Not implemented in db_char2line %i \n"),(*db_order)[i]); + free_db_line(line); + free(line); return NULL; } @@ -826,7 +838,7 @@ void db_close() { case url_ftp: { if (conf->db_out!=NULL) { - url_fclose(conf->db_out); + url_fclose((URL_FILE*)conf->db_out); } break; } diff -up ./src/db_disk.c.coverity ./src/db_disk.c --- ./src/db_disk.c.coverity 2016-07-25 22:56:55.000000000 +0200 +++ ./src/db_disk.c 2018-10-10 19:28:00.108995089 +0200 @@ -79,9 +79,15 @@ static DIR *open_dir(char* path) { static void next_in_dir (void) { + #ifdef HAVE_READDIR_R - if (dirh != NULL) + if (dirh != NULL) { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" rdres = AIDE_READDIR_R_FUNC (dirh, entp, resp); +#pragma GCC diagnostic pop + } + #else #ifdef HAVE_READDIR if (dirh != NULL) { diff -up ./src/db_file.c.coverity ./src/db_file.c --- ./src/db_file.c.coverity 2016-07-25 22:56:55.000000000 +0200 +++ ./src/db_file.c 2018-10-10 19:27:18.683632707 +0200 @@ -171,7 +171,7 @@ int dofprintf( const char* s,...) int db_file_read_spec(int db){ int i=0; - int* db_osize=0; + int* db_osize=NULL; DB_FIELD** db_order=NULL; switch (db) { @@ -187,6 +187,9 @@ int db_file_read_spec(int db){ db_lineno=&db_new_lineno; break; } + default: { + return RETFAIL; + } } *db_order=(DB_FIELD*) malloc(1*sizeof(DB_FIELD)); @@ -198,13 +201,10 @@ int db_file_read_spec(int db){ int l; - /* Yes... we do not check if realloc returns nonnull */ - - *db_order=(DB_FIELD*) - realloc((void*)*db_order, + void * tmp = realloc((void*)*db_order, ((*db_osize)+1)*sizeof(DB_FIELD)); - - if(*db_order==NULL){ + if (tmp != NULL) *db_order=(DB_FIELD*) tmp; + else { return RETFAIL; } @@ -291,8 +291,8 @@ char** db_readline_file(int db){ int* domd=NULL; #ifdef WITH_MHASH MHASH* md=NULL; -#endif char** oldmdstr=NULL; +#endif int* db_osize=0; DB_FIELD** db_order=NULL; FILE** db_filep=NULL; @@ -302,9 +302,9 @@ char** db_readline_file(int db){ case DB_OLD: { #ifdef WITH_MHASH md=&(conf->dboldmd); + oldmdstr=&(conf->old_dboldmdstr); #endif domd=&(conf->do_dboldmd); - oldmdstr=&(conf->old_dboldmdstr); db_osize=&(conf->db_in_size); db_order=&(conf->db_in_order); @@ -316,9 +316,9 @@ char** db_readline_file(int db){ case DB_NEW: { #ifdef WITH_MHASH md=&(conf->dbnewmd); + oldmdstr=&(conf->old_dbnewmdstr); #endif domd=&(conf->do_dbnewmd); - oldmdstr=&(conf->old_dbnewmdstr); db_osize=&(conf->db_new_size); db_order=&(conf->db_new_order); @@ -328,7 +328,9 @@ char** db_readline_file(int db){ break; } } - + + if (db_osize == NULL) return NULL; + if (*db_osize==0) { db_buff(db,*db_filep); @@ -737,8 +739,6 @@ int db_writespec_file(db_config* dbconf) int i=0; int j=0; int retval=1; - void*key=NULL; - int keylen=0; struct tm* st; time_t tim=time(&tim); st=localtime(&tim); @@ -750,6 +750,8 @@ int db_writespec_file(db_config* dbconf) #ifdef WITH_MHASH /* From hereon everything must MD'd before write to db */ + void*key=NULL; + int keylen=0; if((key=get_db_key())!=NULL){ keylen=get_db_key_len(); dbconf->do_dbnewmd=1; diff -up ./src/do_md.c.coverity ./src/do_md.c --- ./src/do_md.c.coverity 2016-07-25 22:56:55.000000000 +0200 +++ ./src/do_md.c 2018-10-10 19:27:18.683632707 +0200 @@ -202,7 +202,6 @@ void calc_md(struct AIDE_STAT_TYPE* old_ and we don't read from a pipe :) */ struct AIDE_STAT_TYPE fs; - int sres=0; int stat_diff,filedes; #ifdef WITH_PRELINK pid_t pid; @@ -237,7 +236,7 @@ void calc_md(struct AIDE_STAT_TYPE* old_ return; } - sres=AIDE_FSTAT_FUNC(filedes,&fs); + AIDE_FSTAT_FUNC(filedes,&fs); if(!(line->attr&DB_RDEV)) fs.st_rdev=0; @@ -331,7 +330,7 @@ void calc_md(struct AIDE_STAT_TYPE* old_ } #endif #endif /* not HAVE_MMAP */ - buf=malloc(READ_BLOCK_SIZE); +// buf=malloc(READ_BLOCK_SIZE); #if READ_BLOCK_SIZE>SSIZE_MAX #error "READ_BLOCK_SIZE" is too large. Max value is SSIZE_MAX, and current is READ_BLOCK_SIZE #endif diff -up ./src/gen_list.c.coverity ./src/gen_list.c --- ./src/gen_list.c.coverity 2016-07-25 22:56:55.000000000 +0200 +++ ./src/gen_list.c 2018-10-10 19:27:18.684632716 +0200 @@ -843,15 +843,15 @@ static void add_file_to_tree(seltree* tr DB_ATTR_TYPE localignorelist=0; DB_ATTR_TYPE ignored_added_attrs, ignored_removed_attrs, ignored_changed_attrs; + if(file==NULL){ + error(0, "add_file_to_tree was called with NULL db_line\n"); + } + node=get_seltree_node(tree,file->filename); if(!node){ node=new_seltree_node(tree,file->filename,0,NULL); } - - if(file==NULL){ - error(0, "add_file_to_tree was called with NULL db_line\n"); - } /* add note to this node which db has modified it */ node->checked|=db; diff -up ./src/md.c.coverity ./src/md.c --- ./src/md.c.coverity 2018-10-10 19:27:18.679632672 +0200 +++ ./src/md.c 2018-10-10 19:27:18.684632716 +0200 @@ -36,8 +36,8 @@ */ DB_ATTR_TYPE hash_gcrypt2attr(int i) { - DB_ATTR_TYPE r=0; #ifdef WITH_GCRYPT + DB_ATTR_TYPE r=0; switch (i) { case GCRY_MD_MD5: { r=DB_MD5; @@ -74,13 +74,15 @@ DB_ATTR_TYPE hash_gcrypt2attr(int i) { default: break; } -#endif return r; +#else /* !WITH_GCRYPT */ + return 0; +#endif } const char * hash_gcrypt2str(int i) { - char * r = "?"; #ifdef WITH_GCRYPT + char * r = "?"; switch (i) { case GCRY_MD_MD5: { r = "MD5"; @@ -117,13 +119,17 @@ const char * hash_gcrypt2str(int i) { default: break; } -#endif return r; +#else /* !WITH_GCRYPT */ + return "?"; +#endif } +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" DB_ATTR_TYPE hash_mhash2attr(int i) { - DB_ATTR_TYPE r=0; #ifdef WITH_MHASH + DB_ATTR_TYPE r=0; switch (i) { case MHASH_CRC32: { r=DB_CRC32; @@ -198,10 +204,15 @@ DB_ATTR_TYPE hash_mhash2attr(int i) { default: break; } -#endif + return r; +#else /*!WITH_MHASH */ + return 0; +#endif } +#pragma GCC diagnostic pop + /* Initialise md_container according it's todo_attr field */ @@ -317,7 +328,6 @@ int init_md(struct md_container* md) { */ int update_md(struct md_container* md,void* data,ssize_t size) { - int i; error(255,"update_md called\n"); @@ -328,6 +338,7 @@ int update_md(struct md_container* md,vo #endif #ifdef WITH_MHASH + int i; for(i=0;i<=HASH_MHASH_COUNT;i++) { if (md->mhash_mdh[i]!=MHASH_FAILED) { @@ -348,7 +359,6 @@ int update_md(struct md_container* md,vo */ int close_md(struct md_container* md) { - int i; #ifdef _PARAMETER_CHECK_ if (md==NULL) { return RETFAIL; @@ -356,6 +366,7 @@ int close_md(struct md_container* md) { #endif error(255,"close_md called \n"); #ifdef WITH_MHASH + int i; for(i=0;i<=HASH_MHASH_COUNT;i++) { if (md->mhash_mdh[i]!=MHASH_FAILED) { mhash (md->mhash_mdh[i], NULL, 0); diff -up ./src/util.c.coverity ./src/util.c --- ./src/util.c.coverity 2018-10-10 19:27:18.670632593 +0200 +++ ./src/util.c 2018-10-10 19:27:18.684632716 +0200 @@ -105,13 +105,15 @@ url_t* parse_url(char* val) for(i=0;r[0]!='/'&&r[0]!='\0';r++,i++); if(r[0]=='\0'){ error(0,"Invalid file-URL,no path after hostname: file:%s\n",t); + free(hostname); return NULL; } u->value=strdup(r); r[0]='\0'; if(gethostname(hostname,MAXHOSTNAMELEN)==-1){ - strncpy(hostname,"localhost", 10); + strncpy(hostname,"localhost", 10); } + if( (strcmp(t,"localhost")==0)||(strcmp(t,hostname)==0)){ free(hostname); break; @@ -120,7 +122,7 @@ url_t* parse_url(char* val) free(hostname); return NULL; } - free(hostname); + break; } u->value=strdup(r);