Blame src/db.c

Packit Service 5e8d2a
/* aide, Advanced Intrusion Detection Environment
Packit Service 5e8d2a
 *
Packit Service 5e8d2a
 * Copyright (C) 1999-2006,2010,2011,2013 Rami Lehti, Pablo Virolainen,
Packit Service 5e8d2a
 * Richard van den Berg, Hannes von Haugwitz
Packit Service 5e8d2a
 * $Header$
Packit Service 5e8d2a
 *
Packit Service 5e8d2a
 * This program is free software; you can redistribute it and/or
Packit Service 5e8d2a
 * modify it under the terms of the GNU General Public License as
Packit Service 5e8d2a
 * published by the Free Software Foundation; either version 2 of the
Packit Service 5e8d2a
 * License, or (at your option) any later version.
Packit Service 5e8d2a
 *
Packit Service 5e8d2a
 * This program is distributed in the hope that it will be useful, but
Packit Service 5e8d2a
 * WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 5e8d2a
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Packit Service 5e8d2a
 * General Public License for more details.
Packit Service 5e8d2a
 *
Packit Service 5e8d2a
 * You should have received a copy of the GNU General Public License
Packit Service 5e8d2a
 * along with this program; if not, write to the Free Software
Packit Service 5e8d2a
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
Packit Service 5e8d2a
 */
Packit Service 5e8d2a
 
Packit Service 5e8d2a
#include "aide.h"
Packit Service 5e8d2a
#include <stdio.h>
Packit Service 5e8d2a
#include <stdlib.h>
Packit Service 5e8d2a
#include <errno.h>
Packit Service 5e8d2a
#include "db.h"
Packit Service 5e8d2a
#include "db_file.h"
Packit Service 5e8d2a
#include "db_disk.h"
Packit Service 5e8d2a
#include "md.h"
Packit Service 5e8d2a
Packit Service 5e8d2a
#ifdef WITH_PSQL
Packit Service 5e8d2a
#include "db_sql.h"
Packit Service 5e8d2a
#endif
Packit Service 5e8d2a
Packit Service 5e8d2a
#include "db_config.h"
Packit Service 5e8d2a
#include "report.h"
Packit Service 5e8d2a
#include "be.h"
Packit Service 5e8d2a
Packit Service 5e8d2a
#ifdef WITH_MHASH
Packit Service 5e8d2a
#include <mhash.h>
Packit Service 5e8d2a
#endif
Packit Service 5e8d2a
Packit Service 5e8d2a
#include "base64.h"
Packit Service 5e8d2a
#include "util.h"
Packit Service 5e8d2a
/*for locale support*/
Packit Service 5e8d2a
#include "locale-aide.h"
Packit Service 5e8d2a
/*for locale support*/
Packit Service 5e8d2a
Packit Service 5e8d2a
db_line* db_char2line(char** ss,int db);
Packit Service 5e8d2a
long readint(char* s,char* err);
Packit Service 5e8d2a
AIDE_OFF_TYPE readlong(char* s,char* err);
Packit Service 5e8d2a
long readoct(char* s,char* err);
Packit Service 5e8d2a
time_t base64totime_t(char*);
Packit Service 5e8d2a
Packit Service 5e8d2a
const char* db_names[db_unknown+1] = {
Packit Service 5e8d2a
   "name",
Packit Service 5e8d2a
   "lname",
Packit Service 5e8d2a
   "perm",
Packit Service 5e8d2a
   "uid",
Packit Service 5e8d2a
   "gid",
Packit Service 5e8d2a
   "size",
Packit Service 5e8d2a
   "atime",
Packit Service 5e8d2a
   "ctime",
Packit Service 5e8d2a
   "mtime",
Packit Service 5e8d2a
   "inode",
Packit Service 5e8d2a
   "bcount",
Packit Service 5e8d2a
   "lcount",
Packit Service 5e8d2a
   "md5",
Packit Service 5e8d2a
   "sha1",
Packit Service 5e8d2a
   "rmd160",
Packit Service 5e8d2a
   "tiger",
Packit Service 5e8d2a
   "crc32",
Packit Service 5e8d2a
   "haval",
Packit Service 5e8d2a
   "gost",
Packit Service 5e8d2a
   "crc32b",
Packit Service 5e8d2a
   "attr",
Packit Service 5e8d2a
   "acl",
Packit Service 5e8d2a
   "bsize",
Packit Service 5e8d2a
   "rdev",
Packit Service 5e8d2a
   "dev",
Packit Service 5e8d2a
   "checkmask",
Packit Service 5e8d2a
   "allownewfiles",
Packit Service 5e8d2a
   "allowrmfiles",
Packit Service 5e8d2a
   "sha256",
Packit Service 5e8d2a
   "sha512",
Packit Service 5e8d2a
   "whirlpool",
Packit Service 5e8d2a
   "selinux",
Packit Service 5e8d2a
   "xattrs",
Packit Service 5e8d2a
   "e2fsattrs",
Packit Service 5e8d2a
   "unknown"} ;
Packit Service 5e8d2a
Packit Service 5e8d2a
const int db_value[db_unknown+1] = {
Packit Service 5e8d2a
   db_filename,         /* "name",   */
Packit Service 5e8d2a
   db_linkname,         /* "lname",   */
Packit Service 5e8d2a
   db_perm,             /* "perm",    */
Packit Service 5e8d2a
   db_uid,              /* "uid",     */
Packit Service 5e8d2a
   db_gid,              /* "gid",     */
Packit Service 5e8d2a
   db_size,             /* "size",    */
Packit Service 5e8d2a
   db_atime,            /* "atime",   */
Packit Service 5e8d2a
   db_ctime,            /* "ctime",   */
Packit Service 5e8d2a
   db_mtime,            /* "mtime",   */
Packit Service 5e8d2a
   db_inode,            /* "inode",   */
Packit Service 5e8d2a
   db_bcount,           /* "bcount",  */
Packit Service 5e8d2a
   db_lnkcount,         /* "lcount",  */
Packit Service 5e8d2a
   db_md5,              /* "md5",     */
Packit Service 5e8d2a
   db_sha1,             /* "sha1",    */
Packit Service 5e8d2a
   db_rmd160,           /* "rmd160",  */
Packit Service 5e8d2a
   db_tiger,            /* "tiger",   */
Packit Service 5e8d2a
   db_crc32,            /* "crc32",   */
Packit Service 5e8d2a
   db_haval,            /* "haval",   */
Packit Service 5e8d2a
   db_gost,             /* "gost",    */
Packit Service 5e8d2a
   db_crc32b,           /* "crc32b",  */
Packit Service 5e8d2a
   db_attr,             /* attributes */
Packit Service 5e8d2a
   db_acl,              /* "acl"      */
Packit Service 5e8d2a
   db_bsize,            /* "bsize"    */
Packit Service 5e8d2a
   db_rdev,             /* "rdev"     */
Packit Service 5e8d2a
   db_dev,              /* "dev"      */
Packit Service 5e8d2a
   db_checkmask,        /* "checkmask" */
Packit Service 5e8d2a
   db_allownewfile,     /* "allownewfile" */
Packit Service 5e8d2a
   db_allowrmfile,      /* "allowrmfile" */
Packit Service 5e8d2a
   db_sha256,           /* "sha256",  */
Packit Service 5e8d2a
   db_sha512,           /* "sha512",  */
Packit Service 5e8d2a
   db_whirlpool,        /* "whirlpool", */
Packit Service 5e8d2a
   db_selinux,          /* "selinux", */
Packit Service 5e8d2a
   db_xattrs,           /* "xattrs",  */
Packit Service 5e8d2a
   db_e2fsattrs,        /* "e2fsattrs",  */
Packit Service 5e8d2a
   db_unknown };        /* "unknown"  */
Packit Service 5e8d2a
Packit Service 5e8d2a
const char* db_namealias[db_alias_size] = {
Packit Service 5e8d2a
  "count" } ;
Packit Service 5e8d2a
Packit Service 5e8d2a
const int db_aliasvalue[db_alias_size] = {
Packit Service 5e8d2a
  db_lnkcount } ;       /* "count",  */
Packit Service 5e8d2a
Packit Service 5e8d2a
static struct md_container *init_db_attrs(URL_TYPE type) {
Packit Service 5e8d2a
    struct md_container *mdc = NULL;
Packit Service 5e8d2a
    if (conf->db_attrs) {
Packit Service 5e8d2a
        switch (type) {
Packit Service 5e8d2a
            case url_stdout:
Packit Service 5e8d2a
            case url_stderr:
Packit Service 5e8d2a
            case url_fd:
Packit Service 5e8d2a
            case url_file:
Packit Service 5e8d2a
            #ifdef WITH_CURL
Packit Service 5e8d2a
            case url_http:
Packit Service 5e8d2a
            case url_https:
Packit Service 5e8d2a
            case url_ftp:
Packit Service 5e8d2a
            #endif /* WITH CURL */
Packit Service 5e8d2a
                mdc = malloc(sizeof(struct md_container)); /* freed in close_db_attrs */
Packit Service 5e8d2a
                mdc->todo_attr = conf->db_attrs;
Packit Service 5e8d2a
                init_md(mdc);
Packit Service 5e8d2a
                break;
Packit Service 5e8d2a
            #ifdef WITH_PSQL
Packit Service 5e8d2a
            case url_sql:
Packit Service 5e8d2a
                break;
Packit Service 5e8d2a
            #endif /* WITH_PSQL */
Packit Service 5e8d2a
            default :
Packit Service 5e8d2a
                error(200,_("init_db_attrs(): Unknown url type.\n"));
Packit Service 5e8d2a
        }
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    return mdc;
Packit Service 5e8d2a
}
Packit Service 5e8d2a
Packit Service 5e8d2a
static db_line *close_db_attrs (struct md_container *mdc, char *url_value) {
Packit Service 5e8d2a
    db_line *line = NULL;
Packit Service 5e8d2a
    if (mdc != NULL) {
Packit Service 5e8d2a
        close_md(mdc);
Packit Service 5e8d2a
        line = malloc(sizeof(struct db_line));
Packit Service 5e8d2a
        line->filename = url_value;
Packit Service 5e8d2a
        line->perm = 0;
Packit Service 5e8d2a
        line->attr = conf->db_attrs;
Packit Service 5e8d2a
        md2line(mdc, line);
Packit Service 5e8d2a
        free(mdc);
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    return line;
Packit Service 5e8d2a
}
Packit Service 5e8d2a
Packit Service 5e8d2a
int db_init(int db)
Packit Service 5e8d2a
{
Packit Service 5e8d2a
  void* rv=NULL;
Packit Service 5e8d2a
  
Packit Service 5e8d2a
  error(200,"db_init %i\n",db);
Packit Service 5e8d2a
  
Packit Service 5e8d2a
  switch(db) {
Packit Service 5e8d2a
Packit Service 5e8d2a
  case DB_DISK: {
Packit Service 5e8d2a
    /*
Packit Service 5e8d2a
      Should we actually do something here?
Packit Service 5e8d2a
     */
Packit Service 5e8d2a
    return db_disk_init();
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
Packit Service 5e8d2a
Packit Service 5e8d2a
  case DB_OLD: {
Packit Service 5e8d2a
    conf->mdc_in = init_db_attrs((conf->db_in_url)->type);
Packit Service 5e8d2a
    rv=be_init(1,conf->db_in_url,0);
Packit Service 5e8d2a
    if(rv==NULL) {
Packit Service 5e8d2a
      error(200,_("db_in is null\n"));      
Packit Service 5e8d2a
      return RETFAIL;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    conf->db_in=rv;
Packit Service 5e8d2a
    error(200,_("db_in is nonnull\n"));
Packit Service 5e8d2a
    return RETOK;
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
  case DB_WRITE: {    
Packit Service 5e8d2a
#ifdef WITH_ZLIB
Packit Service 5e8d2a
    conf->mdc_out = init_db_attrs((conf->db_out_url)->type);
Packit Service 5e8d2a
    if(conf->gzip_dbout){
Packit Service 5e8d2a
       rv=be_init(0,conf->db_out_url,conf->gzip_dbout);
Packit Service 5e8d2a
       conf->db_gzout=rv;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    else{
Packit Service 5e8d2a
#endif
Packit Service 5e8d2a
      rv=be_init(0,conf->db_out_url,0);
Packit Service 5e8d2a
      conf->db_out=rv;
Packit Service 5e8d2a
#ifdef WITH_ZLIB
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
#endif
Packit Service 5e8d2a
    
Packit Service 5e8d2a
    if(rv==NULL){
Packit Service 5e8d2a
      error(200,_("db_out is null\n"));
Packit Service 5e8d2a
      return RETFAIL;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    error(200,_("db_out is nonnull %s\n"),conf->db_out_url->value);
Packit Service 5e8d2a
    return RETOK;
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
  case DB_NEW: {
Packit Service 5e8d2a
    conf->mdc_out = init_db_attrs((conf->db_new_url)->type);
Packit Service 5e8d2a
    rv=be_init(1,conf->db_new_url,0);
Packit Service 5e8d2a
    if(rv==NULL) {
Packit Service 5e8d2a
      error(200,_("db_new is null\n"));      
Packit Service 5e8d2a
      return RETFAIL;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    conf->db_new=rv;
Packit Service 5e8d2a
    error(200,_("db_new is nonnull\n"));
Packit Service 5e8d2a
    return RETOK;
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
  return RETFAIL;
Packit Service 5e8d2a
}
Packit Service 5e8d2a
Packit Service 5e8d2a
db_line* db_readline(int db){
Packit Service 5e8d2a
  db_line* s=NULL;
Packit Service 5e8d2a
  int i=0;
Packit Service 5e8d2a
  url_t* db_url=NULL;
Packit Service 5e8d2a
  FILE** db_filep=NULL;
Packit Service 5e8d2a
  int* db_osize=0;
Packit Service 5e8d2a
  DB_FIELD** db_order=NULL;
Packit Service 5e8d2a
Packit Service 5e8d2a
  switch (db) {
Packit Service 5e8d2a
  case DB_DISK: {
Packit Service 5e8d2a
    /*
Packit Service 5e8d2a
      Nothing else to be done?
Packit Service 5e8d2a
     */
Packit Service 5e8d2a
    s=db_readline_disk();
Packit Service 5e8d2a
    return s;
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
  
Packit Service 5e8d2a
  case DB_OLD: {
Packit Service 5e8d2a
    db_url=conf->db_in_url;
Packit Service 5e8d2a
    db_filep=&(conf->db_in);
Packit Service 5e8d2a
    db_osize=&(conf->db_in_size);
Packit Service 5e8d2a
    db_order=&(conf->db_in_order);
Packit Service 5e8d2a
    break;
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
  case DB_NEW: {
Packit Service 5e8d2a
    db_url=conf->db_new_url;
Packit Service 5e8d2a
    db_filep=&(conf->db_new);
Packit Service 5e8d2a
    db_osize=&(conf->db_new_size);
Packit Service 5e8d2a
    db_order=&(conf->db_new_order);
Packit Service 5e8d2a
    break;
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
Packit Service 5e8d2a
  switch (db_url->type) {
Packit Service 5e8d2a
#ifdef WITH_CURL
Packit Service 5e8d2a
  case url_http:
Packit Service 5e8d2a
  case url_https:
Packit Service 5e8d2a
  case url_ftp:
Packit Service 5e8d2a
#endif /* WITH CURL */
Packit Service 5e8d2a
  case url_stdin:
Packit Service 5e8d2a
  case url_fd:
Packit Service 5e8d2a
  case url_file: {
Packit Service 5e8d2a
    /* Should set errno */
Packit Service 5e8d2a
    /* Please FIXME */
Packit Service 5e8d2a
    if ((*db_filep)!=NULL) {
Packit Service 5e8d2a
      char** ss=db_readline_file(db);
Packit Service 5e8d2a
      if (ss!=NULL){
Packit Service 5e8d2a
	s=db_char2line(ss,db);
Packit Service 5e8d2a
Packit Service 5e8d2a
	for(i=0;i<*db_osize;i++){
Packit Service 5e8d2a
	  if((*db_order)[i]!=db_unknown && 
Packit Service 5e8d2a
	     ss[(*db_order)[i]]!=NULL){
Packit Service 5e8d2a
	    free(ss[(*db_order)[i]]);
Packit Service 5e8d2a
	    ss[(*db_order)[i]]=NULL;
Packit Service 5e8d2a
	  }
Packit Service 5e8d2a
	}
Packit Service 5e8d2a
	free(ss);
Packit Service 5e8d2a
	
Packit Service 5e8d2a
      }
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    
Packit Service 5e8d2a
    break;
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
Packit Service 5e8d2a
Packit Service 5e8d2a
#ifdef WITH_PSQL
Packit Service 5e8d2a
  case url_sql: {
Packit Service 5e8d2a
    error(255,"db_sql readline...");
Packit Service 5e8d2a
    s=db_readline_sql(db, conf);
Packit Service 5e8d2a
    
Packit Service 5e8d2a
    break;
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
#endif
Packit Service 5e8d2a
  default : {
Packit Service 5e8d2a
    error(0,_("db_readline():Url-type backend not implemented\n"));
Packit Service 5e8d2a
    return NULL;
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
  
Packit Service 5e8d2a
  return s;
Packit Service 5e8d2a
  
Packit Service 5e8d2a
}
Packit Service 5e8d2a
Packit Service 5e8d2a
byte* base64tobyte(char* src,int len,size_t *ret_len)
Packit Service 5e8d2a
{
Packit Service 5e8d2a
  if(strcmp(src,"0")!=0){
Packit Service 5e8d2a
    return decode_base64(src,len,ret_len);
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
  return NULL;
Packit Service 5e8d2a
}
Packit Service 5e8d2a
Packit Service 5e8d2a
static char *db_readchar(char *s)
Packit Service 5e8d2a
{
Packit Service 5e8d2a
  if (s == NULL)
Packit Service 5e8d2a
    return (NULL);
Packit Service 5e8d2a
  
Packit Service 5e8d2a
  if (s[0] == '0')
Packit Service 5e8d2a
  {
Packit Service 5e8d2a
    if (s[1] == '\0')
Packit Service 5e8d2a
      return (NULL);
Packit Service 5e8d2a
    
Packit Service 5e8d2a
    if (s[1] == '-')
Packit Service 5e8d2a
      return (strdup(""));
Packit Service 5e8d2a
Packit Service 5e8d2a
    if (s[1] == '0')
Packit Service 5e8d2a
    {
Packit Service 5e8d2a
      memmove(s, s+1, strlen(s+1)+1);
Packit Service 5e8d2a
      // Hope this removes core
Packit Service 5e8d2a
      // dumping in some environments. Has something to do with
Packit Service 5e8d2a
      // memory (de)allocation.
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
Packit Service 5e8d2a
  decode_string(s);
Packit Service 5e8d2a
Packit Service 5e8d2a
  return strdup(s);
Packit Service 5e8d2a
}
Packit Service 5e8d2a
Packit Service 5e8d2a
#define WARN_ONCE(x) case db_ ## x : {                                  \
Packit Service 5e8d2a
      static int warn_once_ ## x = 0;                                   \
Packit Service 5e8d2a
      if (! warn_once_ ## x )                                           \
Packit Service 5e8d2a
        error(0,_("Hash %s uses MHASH, which is not enabled.\n"),       \
Packit Service 5e8d2a
              #x );                                                     \
Packit Service 5e8d2a
      warn_once_ ## x = 1;                                              \
Packit Service 5e8d2a
    } break
Packit Service 5e8d2a
Packit Service 5e8d2a
db_line* db_char2line(char** ss,int db){
Packit Service 5e8d2a
Packit Service 5e8d2a
  int i;
Packit Service 5e8d2a
  db_line* line=(db_line*)malloc(sizeof(db_line)*1);
Packit Service 5e8d2a
  int* db_osize=0;
Packit Service 5e8d2a
  DB_FIELD** db_order=NULL;
Packit Service 5e8d2a
Packit Service 5e8d2a
  switch (db) {
Packit Service 5e8d2a
  case DB_OLD: {
Packit Service 5e8d2a
    db_osize=&(conf->db_in_size);
Packit Service 5e8d2a
    db_order=&(conf->db_in_order);
Packit Service 5e8d2a
    break;
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
  case DB_NEW: {
Packit Service 5e8d2a
    db_osize=&(conf->db_new_size);
Packit Service 5e8d2a
    db_order=&(conf->db_new_order);
Packit Service 5e8d2a
    break;
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
Packit Service 5e8d2a
Packit Service 5e8d2a
  line->md5=NULL;
Packit Service 5e8d2a
  line->sha1=NULL;
Packit Service 5e8d2a
  line->rmd160=NULL;
Packit Service 5e8d2a
  line->tiger=NULL;
Packit Service 5e8d2a
Packit Service 5e8d2a
  line->crc32=NULL; /* MHASH stuff.. */
Packit Service 5e8d2a
  line->crc32b=NULL;
Packit Service 5e8d2a
  line->haval=NULL;
Packit Service 5e8d2a
  line->gost=NULL;
Packit Service 5e8d2a
  line->whirlpool=NULL;
Packit Service 5e8d2a
  
Packit Service 5e8d2a
  line->sha256=NULL;
Packit Service 5e8d2a
  line->sha512=NULL;
Packit Service 5e8d2a
  line->perm=0;
Packit Service 5e8d2a
  line->uid=0;
Packit Service 5e8d2a
  line->gid=0;
Packit Service 5e8d2a
  line->atime=0;
Packit Service 5e8d2a
  line->ctime=0;
Packit Service 5e8d2a
  line->mtime=0;
Packit Service 5e8d2a
  line->inode=0;
Packit Service 5e8d2a
  line->nlink=0;
Packit Service 5e8d2a
  line->bcount=0;
Packit Service 5e8d2a
  line->size=0;
Packit Service 5e8d2a
  line->filename=NULL;
Packit Service 5e8d2a
  line->fullpath=NULL;
Packit Service 5e8d2a
  line->linkname=NULL;
Packit Service 5e8d2a
  line->acl=NULL;
Packit Service 5e8d2a
  line->xattrs=NULL;
Packit Service 5e8d2a
  line->e2fsattrs=0;
Packit Service 5e8d2a
  line->cntx=NULL;
Packit Service 5e8d2a
  
Packit Service 5e8d2a
  line->attr=conf->attr; /* attributes from @@dbspec */
Packit Service 5e8d2a
Packit Service 5e8d2a
  for(i=0;i<*db_osize;i++){
Packit Service 5e8d2a
    switch ((*db_order)[i]) {
Packit Service 5e8d2a
    case db_filename : {
Packit Service 5e8d2a
      if(ss[(*db_order)[i]]!=NULL){
Packit Service 5e8d2a
	decode_string(ss[(*db_order)[i]]);
Packit Service 5e8d2a
	line->fullpath=strdup(ss[(*db_order)[i]]);
Packit Service 5e8d2a
	line->filename=line->fullpath;
Packit Service 5e8d2a
      } else {
Packit Service 5e8d2a
	error(0,"db_char2line():Error while reading database\n");
Packit Service 5e8d2a
	exit(EXIT_FAILURE);
Packit Service 5e8d2a
      }
Packit Service 5e8d2a
      break;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    case db_linkname : {
Packit Service 5e8d2a
      line->linkname = db_readchar(ss[(*db_order)[i]]);
Packit Service 5e8d2a
      break;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    case db_mtime : {
Packit Service 5e8d2a
      line->mtime=base64totime_t(ss[(*db_order)[i]]);
Packit Service 5e8d2a
      break;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    case db_bcount : {
Packit Service 5e8d2a
      line->bcount=readint(ss[(*db_order)[i]],"bcount");
Packit Service 5e8d2a
      break;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    case db_atime : {
Packit Service 5e8d2a
      line->atime=base64totime_t(ss[(*db_order)[i]]);
Packit Service 5e8d2a
      break;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    case db_ctime : {
Packit Service 5e8d2a
      line->ctime=base64totime_t(ss[(*db_order)[i]]);
Packit Service 5e8d2a
      break;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    case db_inode : {
Packit Service 5e8d2a
      line->inode=readint(ss[(*db_order)[i]],"inode");
Packit Service 5e8d2a
      break;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
Packit Service 5e8d2a
    case db_uid : {
Packit Service 5e8d2a
      line->uid=readint(ss[(*db_order)[i]],"uid");
Packit Service 5e8d2a
      break;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    case db_gid : {
Packit Service 5e8d2a
      line->gid=readint(ss[(*db_order)[i]],"gid");
Packit Service 5e8d2a
      break;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    case db_size : {
Packit Service 5e8d2a
      line->size=readlong(ss[(*db_order)[i]],"size");
Packit Service 5e8d2a
      break;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    case db_md5 : {
Packit Service 5e8d2a
      line->md5=base64tobyte(ss[(*db_order)[i]],
Packit Service 5e8d2a
			     strlen(ss[(*db_order)[i]]), NULL);
Packit Service 5e8d2a
      break;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    case db_sha1 : {
Packit Service 5e8d2a
      line->sha1=base64tobyte(ss[(*db_order)[i]],
Packit Service 5e8d2a
			      strlen(ss[(*db_order)[i]]), NULL);
Packit Service 5e8d2a
      break;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    case db_rmd160 : {
Packit Service 5e8d2a
      line->rmd160=base64tobyte(ss[(*db_order)[i]],
Packit Service 5e8d2a
				strlen(ss[(*db_order)[i]]), NULL);
Packit Service 5e8d2a
      break;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    case db_tiger : {
Packit Service 5e8d2a
      line->tiger=base64tobyte(ss[(*db_order)[i]],
Packit Service 5e8d2a
			       strlen(ss[(*db_order)[i]]), NULL);
Packit Service 5e8d2a
      break;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    case db_crc32 : {
Packit Service 5e8d2a
      line->crc32=base64tobyte(ss[(*db_order)[i]],
Packit Service 5e8d2a
			       strlen(ss[(*db_order)[i]]), NULL);
Packit Service 5e8d2a
      break;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    case db_haval : {
Packit Service 5e8d2a
      line->haval=base64tobyte(ss[(*db_order)[i]],
Packit Service 5e8d2a
			       strlen(ss[(*db_order)[i]]), NULL);
Packit Service 5e8d2a
      break;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
#ifdef WITH_MHASH
Packit Service 5e8d2a
    case db_gost : {
Packit Service 5e8d2a
      line->gost=base64tobyte(ss[(*db_order)[i]],
Packit Service 5e8d2a
			       strlen(ss[(*db_order)[i]]), NULL);
Packit Service 5e8d2a
      break;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    case db_crc32b : {
Packit Service 5e8d2a
      line->crc32b=base64tobyte(ss[(*db_order)[i]],
Packit Service 5e8d2a
			       strlen(ss[(*db_order)[i]]), NULL);
Packit Service 5e8d2a
      break;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    case db_whirlpool : {
Packit Service 5e8d2a
      line->whirlpool=base64tobyte(ss[(*db_order)[i]],
Packit Service 5e8d2a
                                   strlen(ss[(*db_order)[i]]), NULL);
Packit Service 5e8d2a
      break;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
#else
Packit Service 5e8d2a
      WARN_ONCE(gost);
Packit Service 5e8d2a
      WARN_ONCE(crc32b);
Packit Service 5e8d2a
      WARN_ONCE(whirlpool);
Packit Service 5e8d2a
#endif
Packit Service 5e8d2a
    case db_sha256 : {
Packit Service 5e8d2a
      line->sha256=base64tobyte(ss[(*db_order)[i]],
Packit Service 5e8d2a
                                strlen(ss[(*db_order)[i]]), NULL);
Packit Service 5e8d2a
      break;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    case db_sha512 : {
Packit Service 5e8d2a
      line->sha512=base64tobyte(ss[(*db_order)[i]],
Packit Service 5e8d2a
                                strlen(ss[(*db_order)[i]]), NULL);
Packit Service 5e8d2a
      break;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
#ifdef WITH_SUN_ACL
Packit Service 5e8d2a
    case db_acl : {
Packit Service 5e8d2a
      char* endp,*pos;
Packit Service 5e8d2a
      int entries,lc;
Packit Service 5e8d2a
      line->acl=NULL;
Packit Service 5e8d2a
      
Packit Service 5e8d2a
      entries=strtol(ss[(*db_order)[i]],&endp,10);
Packit Service 5e8d2a
      if (endp==ss[(*db_order)[i]]) {
Packit Service 5e8d2a
 	/* Something went wrong */
Packit Service 5e8d2a
	break;
Packit Service 5e8d2a
      }
Packit Service 5e8d2a
      pos=endp+1; /* Warning! if acl in database is corrupted then
Packit Service 5e8d2a
		     this will break down. */
Packit Service 5e8d2a
      
Packit Service 5e8d2a
      line->acl=malloc(sizeof(acl_type));
Packit Service 5e8d2a
      line->acl->entries=entries;
Packit Service 5e8d2a
      line->acl->acl=malloc(sizeof(aclent_t)*entries);
Packit Service 5e8d2a
      for (lc=0;lc
Packit Service 5e8d2a
	line->acl->acl[lc].a_type=strtol(pos,&endp,10);
Packit Service 5e8d2a
	pos=endp+1;
Packit Service 5e8d2a
	line->acl->acl[lc].a_id=strtol(pos,&endp,10);
Packit Service 5e8d2a
	pos=endp+1;
Packit Service 5e8d2a
	line->acl->acl[lc].a_perm=strtol(pos,&endp,10);
Packit Service 5e8d2a
	pos=endp+1;
Packit Service 5e8d2a
      }
Packit Service 5e8d2a
      break;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
#endif
Packit Service 5e8d2a
#ifdef WITH_POSIX_ACL
Packit Service 5e8d2a
    case db_acl : {
Packit Service 5e8d2a
      char *tval = NULL;
Packit Service 5e8d2a
      
Packit Service 5e8d2a
      tval = strtok(ss[(*db_order)[i]], ",");
Packit Service 5e8d2a
Packit Service 5e8d2a
      line->acl = NULL;
Packit Service 5e8d2a
Packit Service 5e8d2a
      if (tval[0] == '0')
Packit Service 5e8d2a
        line->acl = NULL;
Packit Service 5e8d2a
      else if (!strcmp(tval, "POSIX"))
Packit Service 5e8d2a
      {
Packit Service 5e8d2a
        line->acl = malloc(sizeof(acl_type));        
Packit Service 5e8d2a
        line->acl->acl_a = NULL;
Packit Service 5e8d2a
        line->acl->acl_d = NULL;
Packit Service 5e8d2a
        
Packit Service 5e8d2a
        tval = strtok(NULL, ",");
Packit Service 5e8d2a
        line->acl->acl_a = (char *)base64tobyte(tval, strlen(tval), NULL);
Packit Service 5e8d2a
        tval = strtok(NULL, ",");
Packit Service 5e8d2a
        line->acl->acl_d = (char *)base64tobyte(tval, strlen(tval), NULL);
Packit Service 5e8d2a
      }
Packit Service 5e8d2a
      /* else, it's broken... */
Packit Service 5e8d2a
      break;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
#endif
Packit Service 5e8d2a
      case db_xattrs : {
Packit Service 5e8d2a
        size_t num = 0;
Packit Service 5e8d2a
        char *tval = NULL;
Packit Service 5e8d2a
        
Packit Service 5e8d2a
        tval = strtok(ss[(*db_order)[i]], ",");
Packit Service 5e8d2a
        num = readlong(tval, "xattrs");
Packit Service 5e8d2a
        if (num)
Packit Service 5e8d2a
        {
Packit Service 5e8d2a
          line->xattrs = malloc(sizeof(xattrs_type));
Packit Service 5e8d2a
          line->xattrs->ents = calloc(sizeof(xattr_node), num);
Packit Service 5e8d2a
          line->xattrs->sz  = num;
Packit Service 5e8d2a
          line->xattrs->num = num;
Packit Service 5e8d2a
          num = 0;
Packit Service 5e8d2a
          while (num < line->xattrs->num)
Packit Service 5e8d2a
          {
Packit Service 5e8d2a
            byte  *val = NULL;
Packit Service 5e8d2a
            size_t vsz = 0;
Packit Service 5e8d2a
            
Packit Service 5e8d2a
            tval = strtok(NULL, ",");
Packit Service 5e8d2a
            line->xattrs->ents[num].key = db_readchar(strdup(tval));
Packit Service 5e8d2a
            tval = strtok(NULL, ",");
Packit Service 5e8d2a
            val = base64tobyte(tval, strlen(tval), &vsz;;
Packit Service 5e8d2a
            line->xattrs->ents[num].val = val;
Packit Service 5e8d2a
            line->xattrs->ents[num].vsz = vsz;
Packit Service 5e8d2a
Packit Service 5e8d2a
            ++num;
Packit Service 5e8d2a
          }
Packit Service 5e8d2a
        }
Packit Service 5e8d2a
        break;
Packit Service 5e8d2a
      }
Packit Service 5e8d2a
Packit Service 5e8d2a
      case db_selinux : {
Packit Service 5e8d2a
        byte  *val = NULL;
Packit Service 5e8d2a
        
Packit Service 5e8d2a
        val = base64tobyte(ss[(*db_order)[i]], strlen(ss[(*db_order)[i]]),NULL);
Packit Service 5e8d2a
        line->cntx = (char *)val;
Packit Service 5e8d2a
        break;
Packit Service 5e8d2a
      }
Packit Service 5e8d2a
      
Packit Service 5e8d2a
    case db_perm : {
Packit Service 5e8d2a
      line->perm=readoct(ss[(*db_order)[i]],"permissions");
Packit Service 5e8d2a
      break;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    
Packit Service 5e8d2a
    case db_lnkcount : {
Packit Service 5e8d2a
      line->nlink=readint(ss[(*db_order)[i]],"nlink");
Packit Service 5e8d2a
      break;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
Packit Service 5e8d2a
    case db_attr : {
Packit Service 5e8d2a
      line->attr=readlong(ss[(*db_order)[i]],"attr");
Packit Service 5e8d2a
      break;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    
Packit Service 5e8d2a
    case db_e2fsattrs : {
Packit Service 5e8d2a
      line->e2fsattrs=readlong(ss[(*db_order)[i]],"e2fsattrs");
Packit Service 5e8d2a
      break;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
Packit Service 5e8d2a
    case db_unknown : {
Packit Service 5e8d2a
      /* Unknown fields are ignored. */
Packit Service 5e8d2a
      break;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    
Packit Service 5e8d2a
    default : {
Packit Service 5e8d2a
      error(0,_("Not implemented in db_char2line %i \n"),(*db_order)[i]);
Packit Service 5e8d2a
      return NULL;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
Packit Service 5e8d2a
  return line;
Packit Service 5e8d2a
}
Packit Service 5e8d2a
Packit Service 5e8d2a
time_t base64totime_t(char* s){
Packit Service 5e8d2a
  
Packit Service 5e8d2a
  byte* b=decode_base64(s,strlen(s),NULL);
Packit Service 5e8d2a
  char* endp;
Packit Service 5e8d2a
  
Packit Service 5e8d2a
  if (b==NULL||strcmp(s,"0")==0) {
Packit Service 5e8d2a
    
Packit Service 5e8d2a
    /* Should we print error here? */
Packit Service 5e8d2a
    free(b);
Packit Service 5e8d2a
    
Packit Service 5e8d2a
    return 0;
Packit Service 5e8d2a
  } else {
Packit Service 5e8d2a
    time_t t = strtol((char *)b,&endp,10);
Packit Service 5e8d2a
    
Packit Service 5e8d2a
    if (endp[0]!='\0') {
Packit Service 5e8d2a
      error(0,"Error converting base64\n");
Packit Service 5e8d2a
      free(b);
Packit Service 5e8d2a
      return 0;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    free(b);
Packit Service 5e8d2a
    return t;
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
  
Packit Service 5e8d2a
  
Packit Service 5e8d2a
}
Packit Service 5e8d2a
Packit Service 5e8d2a
long readint(char* s,char* err){
Packit Service 5e8d2a
  long i;
Packit Service 5e8d2a
  char* e;
Packit Service 5e8d2a
  i=strtol(s,&e,10);
Packit Service 5e8d2a
  if (e[0]!='\0') {
Packit Service 5e8d2a
    error(0,_("Could not read %s from database"),err);
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
  return i;
Packit Service 5e8d2a
}
Packit Service 5e8d2a
Packit Service 5e8d2a
AIDE_OFF_TYPE readlong(char* s,char* err){
Packit Service 5e8d2a
  AIDE_OFF_TYPE i;
Packit Service 5e8d2a
  char* e;
Packit Service 5e8d2a
  i=AIDE_STRTOLL_FUNC(s,&e,10);
Packit Service 5e8d2a
  if (e[0]!='\0') {
Packit Service 5e8d2a
    error(0,_("Could not read %s from database"),err);
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
  return i;
Packit Service 5e8d2a
}
Packit Service 5e8d2a
Packit Service 5e8d2a
long readoct(char* s,char* err){
Packit Service 5e8d2a
  long i;
Packit Service 5e8d2a
  char* e;
Packit Service 5e8d2a
  i=strtol(s,&e,8);
Packit Service 5e8d2a
  if (e[0]!='\0') {
Packit Service 5e8d2a
    error(0,_("Could not read %s from database. String %s \n"),err,s);
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
  return i;
Packit Service 5e8d2a
}
Packit Service 5e8d2a
Packit Service 5e8d2a
Packit Service 5e8d2a
int db_writespec(db_config* dbconf)
Packit Service 5e8d2a
{
Packit Service 5e8d2a
  switch (dbconf->db_out_url->type) {
Packit Service 5e8d2a
  case url_stdout:
Packit Service 5e8d2a
  case url_stderr:
Packit Service 5e8d2a
  case url_fd:
Packit Service 5e8d2a
  case url_file: {
Packit Service 5e8d2a
    if(
Packit Service 5e8d2a
#ifdef WITH_ZLIB
Packit Service 5e8d2a
       (dbconf->gzip_dbout && dbconf->db_gzout) ||
Packit Service 5e8d2a
#endif
Packit Service 5e8d2a
       (dbconf->db_out!=NULL)){
Packit Service 5e8d2a
      if(db_writespec_file(dbconf)==RETOK){
Packit Service 5e8d2a
	return RETOK;
Packit Service 5e8d2a
      }
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    break;
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
#ifdef WITH_CURL
Packit Service 5e8d2a
  case url_http:
Packit Service 5e8d2a
  case url_https:
Packit Service 5e8d2a
  case url_ftp:
Packit Service 5e8d2a
    {
Packit Service 5e8d2a
      
Packit Service 5e8d2a
      break;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
#endif /* WITH CURL */
Packit Service 5e8d2a
#ifdef WITH_PSQL
Packit Service 5e8d2a
  case url_sql: {
Packit Service 5e8d2a
    if(dbconf->db_out!=NULL){
Packit Service 5e8d2a
      if(db_writespec_sql(dbconf)==RETOK){
Packit Service 5e8d2a
	return RETOK;
Packit Service 5e8d2a
      }
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    break;
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
#endif
Packit Service 5e8d2a
  default:{
Packit Service 5e8d2a
    error(0,_("Unknown output in db out.\n"));    
Packit Service 5e8d2a
    return RETFAIL;
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
  return RETFAIL;
Packit Service 5e8d2a
}
Packit Service 5e8d2a
Packit Service 5e8d2a
int db_writeline(db_line* line,db_config* dbconf){
Packit Service 5e8d2a
Packit Service 5e8d2a
  if (line==NULL||dbconf==NULL) return RETOK;
Packit Service 5e8d2a
  
Packit Service 5e8d2a
  switch (dbconf->db_out_url->type) {
Packit Service 5e8d2a
#ifdef WITH_CURL
Packit Service 5e8d2a
  case url_http:
Packit Service 5e8d2a
  case url_https:
Packit Service 5e8d2a
  case url_ftp:
Packit Service 5e8d2a
#endif /* WITH CURL */
Packit Service 5e8d2a
  case url_stdout:
Packit Service 5e8d2a
  case url_stderr:
Packit Service 5e8d2a
  case url_fd:
Packit Service 5e8d2a
  case url_file: {
Packit Service 5e8d2a
    if (
Packit Service 5e8d2a
#ifdef WITH_ZLIB
Packit Service 5e8d2a
       (dbconf->gzip_dbout && dbconf->db_gzout) ||
Packit Service 5e8d2a
#endif
Packit Service 5e8d2a
       (dbconf->db_out!=NULL)) {
Packit Service 5e8d2a
      if (db_writeline_file(line,dbconf,dbconf->db_out_url)==RETOK) {
Packit Service 5e8d2a
	return RETOK;
Packit Service 5e8d2a
      }
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    return RETFAIL;
Packit Service 5e8d2a
    break;
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
#ifdef WITH_PSQL
Packit Service 5e8d2a
  case url_sql: {
Packit Service 5e8d2a
    if (dbconf->db_out!=NULL) {
Packit Service 5e8d2a
      if (db_writeline_sql(line,dbconf)==RETOK) {
Packit Service 5e8d2a
	return RETOK;
Packit Service 5e8d2a
      }
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    return RETFAIL;
Packit Service 5e8d2a
    break;
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
#endif
Packit Service 5e8d2a
  default : {
Packit Service 5e8d2a
    error(0,_("Unknown output in db out.\n"));    
Packit Service 5e8d2a
    return RETFAIL;
Packit Service 5e8d2a
  } 
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
  return RETFAIL;
Packit Service 5e8d2a
}
Packit Service 5e8d2a
Packit Service 5e8d2a
void db_close() {
Packit Service 5e8d2a
  switch (conf->db_out_url->type) {
Packit Service 5e8d2a
  case url_stdout:
Packit Service 5e8d2a
  case url_stderr:
Packit Service 5e8d2a
  case url_fd:
Packit Service 5e8d2a
  case url_file: {
Packit Service 5e8d2a
    if (
Packit Service 5e8d2a
#ifdef WITH_ZLIB
Packit Service 5e8d2a
       (conf->gzip_dbout && conf->db_gzout) ||
Packit Service 5e8d2a
#endif
Packit Service 5e8d2a
       (conf->db_out!=NULL)) {
Packit Service 5e8d2a
        db_close_file(conf);
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    break;
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
#ifdef WITH_CURL
Packit Service 5e8d2a
  case url_http:
Packit Service 5e8d2a
  case url_https:
Packit Service 5e8d2a
  case url_ftp:
Packit Service 5e8d2a
    {
Packit Service 5e8d2a
        if (conf->db_out!=NULL) {
Packit Service 5e8d2a
            url_fclose(conf->db_out);
Packit Service 5e8d2a
        }
Packit Service 5e8d2a
      break;
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
#endif /* WITH CURL */
Packit Service 5e8d2a
#ifdef WITH_PSQL
Packit Service 5e8d2a
  case url_sql: {
Packit Service 5e8d2a
    if (conf->db_out!=NULL) {
Packit Service 5e8d2a
      db_close_sql(conf->db_out);
Packit Service 5e8d2a
    }
Packit Service 5e8d2a
    break;
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
#endif
Packit Service 5e8d2a
  default : {
Packit Service 5e8d2a
    error(0,_("db_close():Unknown output in db out.\n"));    
Packit Service 5e8d2a
  } 
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
  conf->line_db_in = close_db_attrs(conf->mdc_in, (conf->db_in_url)->value);
Packit Service 5e8d2a
  conf->line_db_out = close_db_attrs(conf->mdc_out, (conf->action&DO_DIFF
Packit Service 5e8d2a
          ? conf->db_new_url : conf->db_out_url)->value);
Packit Service 5e8d2a
}
Packit Service 5e8d2a
Packit Service 5e8d2a
void free_db_line(db_line* dl)
Packit Service 5e8d2a
{
Packit Service 5e8d2a
  if (dl==NULL) {
Packit Service 5e8d2a
    return;
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
  
Packit Service 5e8d2a
#define checked_free(x) do { free(x); x=NULL; } while (0)
Packit Service 5e8d2a
Packit Service 5e8d2a
  checked_free(dl->md5);
Packit Service 5e8d2a
  checked_free(dl->sha1);
Packit Service 5e8d2a
  checked_free(dl->rmd160);
Packit Service 5e8d2a
  checked_free(dl->tiger);
Packit Service 5e8d2a
  dl->filename=NULL;
Packit Service 5e8d2a
  checked_free(dl->fullpath);
Packit Service 5e8d2a
  checked_free(dl->linkname);
Packit Service 5e8d2a
  
Packit Service 5e8d2a
#ifdef WITH_MHASH
Packit Service 5e8d2a
  checked_free(dl->crc32);
Packit Service 5e8d2a
  checked_free(dl->crc32b);
Packit Service 5e8d2a
  checked_free(dl->gost);
Packit Service 5e8d2a
  checked_free(dl->haval);
Packit Service 5e8d2a
#endif
Packit Service 5e8d2a
  
Packit Service 5e8d2a
  checked_free(dl->sha256);
Packit Service 5e8d2a
  checked_free(dl->sha512);
Packit Service 5e8d2a
  checked_free(dl->whirlpool);
Packit Service 5e8d2a
Packit Service 5e8d2a
  if (dl->acl)
Packit Service 5e8d2a
  {
Packit Service 5e8d2a
#ifdef WITH_ACL
Packit Service 5e8d2a
    free(dl->acl->acl_a);
Packit Service 5e8d2a
    free(dl->acl->acl_d);
Packit Service 5e8d2a
#endif
Packit Service 5e8d2a
  }
Packit Service 5e8d2a
  checked_free(dl->acl);
Packit Service 5e8d2a
  
Packit Service 5e8d2a
  if (dl->xattrs)
Packit Service 5e8d2a
    free(dl->xattrs->ents);
Packit Service 5e8d2a
  checked_free(dl->xattrs);
Packit Service 5e8d2a
  checked_free(dl->cntx);
Packit Service 5e8d2a
}
Packit Service 5e8d2a
const char* aide_key_5=CONFHMACKEY_05;
Packit Service 5e8d2a
const char* db_key_5=DBHMACKEY_05;