📄 db_file.c
字号:
mhash(*md,NULL,0); dig=(byte*) malloc(sizeof(byte)*mhash_get_block_size(conf->dbhmactype)); mhash_deinit(*md,(void*)dig); digstr=encode_base64(dig,mhash_get_block_size(conf->dbhmactype)); if(strncmp(digstr,*oldmdstr,strlen(digstr))!=0){ error(0,_("Db checksum mismatch for db:%i\n"),db); abort(); } }else { error(0,"@@end_db found without @@begin_db in db:%i\n",db); abort(); } } token=db_scan(); if(token!=TNEWLINE){ error(0,_("Corrupt db. Checksum garbled\n")); abort(); } break; } case TEOF : { if(gotend_db){ return NULL; } /* This can be the first token on a line */ if(i>0){ error(0,"Not enough parameters in db:%i\n",*db_lineno); }; for(a=0;a<i;a++){ free(s[(*db_order)[a]]); } free(s); return NULL; break; } case TERROR : { error(0,"There was an error in the database file on line:%i.\n",*db_lineno); break; } default : { error(0,"Not implemented in db_readline_file %i\n\"%s\"",r,dbtext); free(s); s=NULL; i=*db_osize; break; } } } /* * If we don't get newline after reading all sells we print an error */ a=db_scan(); if (a!=TNEWLINE&&a!=TEOF) { error(0,"Newline expected in database. Readin until end of line\n"); do { error(0,"Skipped value %s\n",dbtext); /* * Null statement */ a=db_scan(); }while(a!=TNEWLINE&&a!=TEOF); } return s; }int db_writechar(char* s,FILE* file,int i){ char* r=NULL; int retval=0; if(i) { dofprintf(" "); } if(s==NULL){ retval=dofprintf("0"); return retval; } if(s[0]=='\0'){ retval=dofprintf("0-"); return retval; } if(s[0]=='0'){ retval=dofprintf("00"); if(retval<0){ return retval; } s++; } if (!i && s[0]=='#') { dofprintf("# "); r=CLEANDUP(s+1); } else { r=CLEANDUP(s); } retval=dofprintf("%s",r); free(r); return retval;}int db_writeint(long i,FILE* file,int a){ if(a) { dofprintf(" "); } return dofprintf("%li",i); }int db_write_byte_base64(byte*data,size_t len,FILE* file,int i,int th, int attr ){ char* tmpstr=NULL; int retval=0; if (data!=NULL&&th&attr) { tmpstr=encode_base64(data,len); } else { tmpstr=NULL; } if(i){ dofprintf(" "); } if(tmpstr){ retval=dofprintf(tmpstr); free(tmpstr); return retval; }else { return dofprintf("0"); } return 0;}int db_write_time_base64(time_t i,FILE* file,int a){ static char* ptr=NULL; char* tmpstr=NULL; int retval=0; if(a){ dofprintf(" "); } if(i==0){ retval=dofprintf("0"); return retval; } ptr=(char*)malloc(sizeof(char)*TIMEBUFSIZE); if (ptr==NULL) { error(0,"\nCannot allocate memory..\n"); abort(); } memset((void*)ptr,0,sizeof(char)*TIMEBUFSIZE); sprintf(ptr,"%li",i); tmpstr=encode_base64(ptr,strlen(ptr)); retval=dofprintf(tmpstr); free(tmpstr); free(ptr); return retval;}int db_writeoct(long i, FILE* file,int a){ if(a) { dofprintf(" "); } return dofprintf("%lo",i); }int db_writespec_file(db_config* conf){ 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); retval=dofprintf("@@begin_db\n"); if(retval==0){ return RETFAIL; }#ifdef WITH_MHASH /* From hereon everything must MD'd before write to db */ if((key=get_db_key())!=NULL){ keylen=get_db_key_len(); conf->do_dbnewmd=1; if( (conf->dbnewmd= mhash_hmac_init(conf->dbhmactype, key, keylen, mhash_get_hash_pblock(conf->dbhmactype)))== MHASH_FAILED){ error(0, "mhash_hmac_init() failed for db write. Aborting\n"); abort(); } } #endif retval=dofprintf( "# This file was generated by Aide, version %s\n" "# Time of generation was %.4u-%.2u-%.2u %.2u:%.2u:%.2u\n", AIDEVERSION, st->tm_year+1900, st->tm_mon+1, st->tm_mday, st->tm_hour, st->tm_min, st->tm_sec ); if(retval==0){ return RETFAIL; } if(conf->config_version){ retval=dofprintf( "# The config version used to generate this file was:\n" "# %s\n", conf->config_version); if(retval==0){ return RETFAIL; } } retval=dofprintf("@@db_spec "); if(retval==0){ return RETFAIL; } for(i=0;i<conf->db_out_size;i++){ for(j=0;j<db_unknown;j++){ if(db_value[j]==conf->db_out_order[i]){ retval=dofprintf("%s ",db_names[j]); if(retval==0){ return RETFAIL; } break; } } } retval=dofprintf("\n"); if(retval==0){ return RETFAIL; } return RETOK;}#ifdef WITH_SUN_ACLint db_writeacl(acl_type* acl,FILE* file,int a){ int i; if(a) { dofprintf(" "); } if (acl==NULL) { dofprintf("0"); } else { dofprintf("%i",acl->entries); for (i=0;i<acl->entries;i++) { dofprintf(",%i,%i,%i", acl->acl[i].a_type, acl->acl[i].a_id, acl->acl[i].a_perm); } } return RETOK;}#endifint db_writeline_file(db_line* line,db_config* conf){ int i; for(i=0;i<conf->db_out_size;i++){ switch (conf->db_out_order[i]) { case db_filename : { db_writechar(line->filename,conf->db_out,i); break; } case db_linkname : { db_writechar(line->linkname,conf->db_out,i); break; } case db_bcount : { db_writeint(line->bcount,conf->db_out,i); break; } case db_mtime : { db_write_time_base64(line->mtime,conf->db_out,i); break; } case db_atime : { db_write_time_base64(line->atime,conf->db_out,i); break; } case db_ctime : { db_write_time_base64(line->ctime,conf->db_out,i); break; } case db_inode : { db_writeint(line->inode,conf->db_out,i); break; } case db_lnkcount : { db_writeint(line->nlink,conf->db_out,i); break; } case db_uid : { db_writeint(line->uid,conf->db_out,i); break; } case db_gid : { db_writeint(line->gid,conf->db_out,i); break; } case db_size : { db_writeint(line->size,conf->db_out,i); break; } case db_md5 : { db_write_byte_base64(line->md5, HASH_MD5_LEN, conf->db_out,i, DB_MD5,line->attr); break; } case db_sha1 : { db_write_byte_base64(line->sha1, HASH_SHA1_LEN, conf->db_out,i, DB_SHA1,line->attr); break; } case db_rmd160 : { db_write_byte_base64(line->rmd160, HASH_RMD160_LEN, conf->db_out,i, DB_RMD160,line->attr); break; } case db_tiger : { db_write_byte_base64(line->tiger, HASH_TIGER_LEN, conf->db_out,i, DB_TIGER,line->attr); break; } case db_perm : { db_writeoct(line->perm,conf->db_out,i); break; } case db_crc32 : { db_write_byte_base64(line->crc32, HASH_CRC32_LEN, conf->db_out,i, DB_CRC32,line->attr); break; } case db_crc32b : { db_write_byte_base64(line->crc32b, HASH_CRC32B_LEN, conf->db_out,i, DB_CRC32B,line->attr); break; } case db_haval : { db_write_byte_base64(line->haval, HASH_HAVAL256_LEN, conf->db_out,i, DB_HAVAL,line->attr); break; } case db_gost : { db_write_byte_base64(line->gost , HASH_GOST_LEN, conf->db_out,i, DB_GOST,line->attr); break; } case db_attr : { db_writeint(line->attr, conf->db_out,i); break; }#ifdef WITH_ACL case db_acl : { db_writeacl(line->acl,conf->db_out,i); break; }#endif case db_checkmask : { db_writeoct(line->attr,conf->db_out,i); break; } default : { error(0,"Not implemented in db_writeline_file %i\n", conf->db_out_order[i]); return RETFAIL; } } } dofprintf("\n"); /* Can't use fflush because of zlib.*/ dofflush(); return RETOK;}int db_close_file(db_config* conf){ #ifdef WITH_MHASH byte* dig=NULL; char* digstr=NULL; if(conf->db_out#ifdef WITH_ZLIB || conf->db_gzout#endif ){ /* Let's write @@end_db <checksum> */ if (conf->dbnewmd!=NULL) { mhash(conf->dbnewmd, NULL ,0); dig=(byte*)malloc(sizeof(byte)*mhash_get_block_size(conf->dbhmactype)); mhash_deinit(conf->dbnewmd,(void*)dig); digstr=encode_base64(dig,mhash_get_block_size(conf->dbhmactype)); conf->do_dbnewmd=0; dofprintf("@@end_db %s\n",digstr); free(dig); free(digstr); } else { dofprintf("@@end_db\n"); } }#endif#ifndef WITH_ZLIB if(fclose(conf->db_out)){ error(0,"Unable to close database:%s\n",strerror(errno)); return RETFAIL; }#else if(conf->gzip_dbout){ if(gzclose(conf->db_gzout)){ error(0,"Unable to close gzdatabase:%s\n",strerror(errno)); return RETFAIL; } }else { if(fclose(conf->db_out)){ error(0,"Unable to close database:%s\n",strerror(errno)); return RETFAIL; } }#endif return RETOK;}/*const char* aide_key_11=CONFHMACKEY_11;*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -