⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 db_file.c

📁 This piece of software was written as a replacement and extension for Tripwire. Tripwire is an exce
💻 C
📖 第 1 页 / 共 2 页
字号:
	  	  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 + -