Blame src/db_sql.c

Packit 762fc5
/* aide, Advanced Intrusion Detection Environment
Packit 762fc5
 *
Packit 762fc5
 * Copyright (C) 2000-2002,2004-2006,2011 Rami Lehti, Pablo Virolainen,
Packit 762fc5
 * Richard van den Berg, Hannes von Haugwitz
Packit 762fc5
 * $Header$
Packit 762fc5
 *
Packit 762fc5
 * This program is free software; you can redistribute it and/or
Packit 762fc5
 * modify it under the terms of the GNU General Public License as
Packit 762fc5
 * published by the Free Software Foundation; either version 2 of the
Packit 762fc5
 * License, or (at your option) any later version.
Packit 762fc5
 *
Packit 762fc5
 * This program is distributed in the hope that it will be useful, but
Packit 762fc5
 * WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 762fc5
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Packit 762fc5
 * General Public License for more details.
Packit 762fc5
 *
Packit 762fc5
 * You should have received a copy of the GNU General Public License
Packit 762fc5
 * along with this program; if not, write to the Free Software
Packit 762fc5
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
Packit 762fc5
 */
Packit 762fc5
Packit 762fc5
#include "aide.h"
Packit 762fc5
/*for locale support*/
Packit 762fc5
#include "locale-aide.h"
Packit 762fc5
/*for locale support*/
Packit 762fc5
Packit 762fc5
#ifdef WITH_PSQL
Packit 762fc5
 
Packit 762fc5
#include <stdio.h>
Packit 762fc5
#include <stdlib.h>
Packit 762fc5
#include <errno.h>
Packit 762fc5
#include <string.h>
Packit 762fc5
#include <gcrypt.h>
Packit 762fc5
#include "base64.h"
Packit 762fc5
#include "db.h"
Packit 762fc5
Packit 762fc5
#include "db_sql.h"
Packit 762fc5
#include "db_config.h"
Packit 762fc5
#include "libpq-fe.h"
Packit 762fc5
#include "report.h"
Packit 762fc5
Packit 762fc5
#ifdef WITH_MHASH
Packit 762fc5
#include <mhash.h>
Packit 762fc5
#endif
Packit 762fc5
Packit 762fc5
char* db_get_sql(db_line*,db_config*);
Packit 762fc5
Packit 762fc5
int _db_check_result(PGconn *conn, PGresult *res, char *query) 
Packit 762fc5
{
Packit 762fc5
  int status = 0;
Packit 762fc5
  int ret = RETOK;
Packit 762fc5
Packit 762fc5
Packit 762fc5
  if (!res || ( (PQresultStatus(res) != PGRES_COMMAND_OK) &&
Packit 762fc5
                (PQresultStatus(res) != PGRES_TUPLES_OK) )){
Packit 762fc5
    ret = RETFAIL;
Packit 762fc5
    if (res!=NULL) {
Packit 762fc5
        error(0,"Sql error %s while doing %s\n", PQerrorMessage(conn), query);
Packit 762fc5
    } else {
Packit 762fc5
        error(0,"Sql error while doing %s.\n",query);
Packit 762fc5
    }
Packit 762fc5
  } else {
Packit 762fc5
    error(255,"Sql went ok.\n");
Packit 762fc5
    status = 1;
Packit 762fc5
  }
Packit 762fc5
 
Packit 762fc5
  return status;
Packit 762fc5
}
Packit 762fc5
Packit 762fc5
int db_writespec_sql(db_config* conf){
Packit 762fc5
  PGresult *res;
Packit 762fc5
  int i;
Packit 762fc5
  int table_exists;
Packit 762fc5
  char* s;
Packit 762fc5
  int ret = RETOK;
Packit 762fc5
Packit 762fc5
  s = (char*) malloc(sizeof(char)*1024); /* Hope 1023 bytes is
Packit 762fc5
					    enough for string...
Packit 762fc5
					    390 + length of table
Packit 762fc5
					    name should be enough.
Packit 762fc5
					 */
Packit 762fc5
  /* We have to ensure that the database table not exist */
Packit 762fc5
Packit 762fc5
  /* check if the table exists already */
Packit 762fc5
  sprintf(s, "SELECT * FROM pg_class WHERE relname = '%s'", 
Packit 762fc5
             ((psql_data*)conf->db_out)->table);
Packit 762fc5
  res = PQexec(((psql_data*)conf->db_out)->conn, s);
Packit 762fc5
  if ( _db_check_result(((psql_data*)conf->db_out)->conn, res, s) == 0 ) {
Packit 762fc5
    ret = RETFAIL;
Packit 762fc5
  }
Packit 762fc5
  table_exists = PQntuples(res) == 1 ? 1 : 0;
Packit 762fc5
  PQclear(res);
Packit 762fc5
Packit 762fc5
  *s = '\0';  /* reset query string */
Packit 762fc5
Packit 762fc5
  if (table_exists == 0) {
Packit 762fc5
    /* we need to create the table */
Packit 762fc5
    
Packit 762fc5
    s = strcat(s, "CREATE TABLE ");
Packit 762fc5
Packit 762fc5
    s = strcat(s, ((psql_data*)conf->db_out)->table);
Packit 762fc5
    s = strcat(s, "(");
Packit 762fc5
  
Packit 762fc5
    for (i=0;i<conf->db_out_size;i++) {
Packit 762fc5
      if (i!=0) {
Packit 762fc5
        s = strcat(s, ",");
Packit 762fc5
      }
Packit 762fc5
      s = strcat(s, db_names[conf->db_out_order[i]]);
Packit 762fc5
      s = strcat(s, " ");
Packit 762fc5
      s = strcat(s, db_sql_types[conf->db_out_order[i]]);
Packit 762fc5
    }
Packit 762fc5
    s = strcat(s,");");
Packit 762fc5
Packit 762fc5
    error(255,"SQL:%s\n",s);
Packit 762fc5
    
Packit 762fc5
    res = PQexec(((psql_data*)conf->db_out)->conn,s);
Packit 762fc5
Packit 762fc5
    if (_db_check_result(((psql_data*)conf->db_out)->conn, res, s) == 0) {
Packit 762fc5
      ret = RETFAIL;
Packit 762fc5
    }
Packit 762fc5
  
Packit 762fc5
    PQclear(res);  
Packit 762fc5
  }
Packit 762fc5
Packit 762fc5
  free(s); /* Just say no to memoryleaks. */
Packit 762fc5
  
Packit 762fc5
  return ret;
Packit 762fc5
  
Packit 762fc5
  /* FIXME!! No error checkin may be broken. Fix malloc also */ 
Packit 762fc5
}
Packit 762fc5
Packit 762fc5
int db_writeline_sql(db_line* line,db_config* conf){
Packit 762fc5
Packit 762fc5
  PGresult *res;
Packit 762fc5
  int i;
Packit 762fc5
  int ret=RETOK;
Packit 762fc5
  char* s=db_get_sql(line,conf) ;
Packit 762fc5
  
Packit 762fc5
  if (s==NULL) {
Packit 762fc5
    return RETFAIL;
Packit 762fc5
  }
Packit 762fc5
  
Packit 762fc5
  error(255,"SQL:%s",s);
Packit 762fc5
  
Packit 762fc5
  res = PQexec(((psql_data*)conf->db_out)->conn,s);
Packit 762fc5
  if ( _db_check_result(((psql_data*)conf->db_out)->conn, res, s) == 0 ) {
Packit 762fc5
    ret = RETFAIL;
Packit 762fc5
  }
Packit 762fc5
  PQclear(res);
Packit 762fc5
  
Packit 762fc5
  free(s);
Packit 762fc5
  
Packit 762fc5
  return ret;
Packit 762fc5
}
Packit 762fc5
Packit 762fc5
void db_readline_sql_int(int* d,int db,int i, db_config* conf) 
Packit 762fc5
{
Packit 762fc5
  FILE** db_filep=NULL;
Packit 762fc5
Packit 762fc5
  switch (db) {
Packit 762fc5
  case DB_OLD: {
Packit 762fc5
    db_filep=&(conf->db_in);
Packit 762fc5
    break;
Packit 762fc5
  }
Packit 762fc5
  case DB_NEW: {
Packit 762fc5
    db_filep=&(conf->db_new);
Packit 762fc5
    break;
Packit 762fc5
  }
Packit 762fc5
  }
Packit 762fc5
Packit 762fc5
  if (((psql_data*)(*db_filep))->des[i]!=-1) {
Packit 762fc5
    *d=(int)PQgetvalue(((psql_data*)(*db_filep))->res, 
Packit 762fc5
		       ((psql_data*)(*db_filep))->curread,
Packit 762fc5
		       ((psql_data*)(*db_filep))->des[i]);
Packit 762fc5
  } else {
Packit 762fc5
    *d=0;
Packit 762fc5
  }
Packit 762fc5
  error(254,"sql_readline_sql_int %s got %i\n",db_names[i],*d);
Packit 762fc5
Packit 762fc5
}
Packit 762fc5
Packit 762fc5
void db_readline_sql_char(void** d,int db,const int i, db_config* conf) 
Packit 762fc5
{
Packit 762fc5
  
Packit 762fc5
  volatile int cr,des;
Packit 762fc5
  psql_data* data;
Packit 762fc5
  FILE** db_filep=NULL;
Packit 762fc5
Packit 762fc5
  switch (db) {
Packit 762fc5
  case DB_OLD: {
Packit 762fc5
    db_filep=&(conf->db_in);
Packit 762fc5
    break;
Packit 762fc5
  }
Packit 762fc5
  case DB_NEW: {
Packit 762fc5
    db_filep=&(conf->db_new);
Packit 762fc5
    break;
Packit 762fc5
  }
Packit 762fc5
  }
Packit 762fc5
Packit 762fc5
  data=((psql_data*)(*db_filep));
Packit 762fc5
  
Packit 762fc5
  cr=data->curread;
Packit 762fc5
  des=data->des[i];
Packit 762fc5
  if (des!=-1) {
Packit 762fc5
    volatile char* s=NULL;
Packit 762fc5
    
Packit 762fc5
    s = (char*)PQgetvalue(data->res,cr,des);
Packit 762fc5
    if (s!=NULL) {
Packit 762fc5
      *d=(void*)strdup((char*)s);
Packit 762fc5
    } else {
Packit 762fc5
      *d=NULL;
Packit 762fc5
    }
Packit 762fc5
    error(254,"sql_readline_sql_char %i,%i %s got %s\n",cr,des,db_names[i],*d);
Packit 762fc5
  } else {
Packit 762fc5
    *d=NULL;
Packit 762fc5
    error(254,"sql_readline_sql_char %i,%i %s got NULL\n",cr,des,db_names[i]);
Packit 762fc5
  }
Packit 762fc5
  
Packit 762fc5
}
Packit 762fc5
Packit 762fc5
void db_readline_sql_byte(void** d,int db,int i, db_config* conf) {
Packit 762fc5
  
Packit 762fc5
  db_readline_sql_char(d,db,i, conf);
Packit 762fc5
  
Packit 762fc5
  if (*d!=NULL) {
Packit 762fc5
    *((byte*)d)=base64tobyte(*d,strlen(*d));
Packit 762fc5
  }
Packit 762fc5
  
Packit 762fc5
}
Packit 762fc5
Packit 762fc5
void db_readline_sql_time(void** d,int db,int i, db_config* conf) {
Packit 762fc5
  
Packit 762fc5
  db_readline_sql_char(d,db,i, conf);
Packit 762fc5
  
Packit 762fc5
  if (*d!=NULL) {
Packit 762fc5
    *((time_t*)d)=base64totime_t(*d);
Packit 762fc5
  }
Packit 762fc5
  
Packit 762fc5
}
Packit 762fc5
Packit 762fc5
db_line* db_readline_sql(int db, db_config* conf) {
Packit 762fc5
  
Packit 762fc5
  volatile db_line* rline;
Packit 762fc5
  int i;
Packit 762fc5
  url_t* db_url=NULL;
Packit 762fc5
  FILE** db_filep=NULL;
Packit 762fc5
  int* db_osize=0;
Packit 762fc5
  DB_FIELD** db_order=NULL;
Packit 762fc5
Packit 762fc5
  switch (db) {
Packit 762fc5
  case DB_OLD: {
Packit 762fc5
    db_url=conf->db_in_url;
Packit 762fc5
    db_filep=&(conf->db_in);
Packit 762fc5
    db_osize=&(conf->db_in_size);
Packit 762fc5
    db_order=&(conf->db_in_order);
Packit 762fc5
    break;
Packit 762fc5
  }
Packit 762fc5
  case DB_NEW: {
Packit 762fc5
    db_url=conf->db_new_url;
Packit 762fc5
    db_filep=&(conf->db_new);
Packit 762fc5
    db_osize=&(conf->db_new_size);
Packit 762fc5
    db_order=&(conf->db_new_order);
Packit 762fc5
    break;
Packit 762fc5
  }
Packit 762fc5
  }
Packit 762fc5
Packit 762fc5
  
Packit 762fc5
  if (((psql_data*)(*db_filep))->curread>=
Packit 762fc5
      ((psql_data*)(*db_filep))->maxread) {
Packit 762fc5
    error(255,"Everything read from SQL\n");
Packit 762fc5
    return NULL;
Packit 762fc5
  }
Packit 762fc5
  rline=(db_line*)malloc(1*sizeof(db_line));
Packit 762fc5
  
Packit 762fc5
  db_readline_sql_byte((void*)&(rline->md5),db,(int)db_md5, conf);
Packit 762fc5
  db_readline_sql_byte((void*)&(rline->sha1),db,db_sha1, conf);
Packit 762fc5
  db_readline_sql_byte((void*)&(rline->rmd160),db,db_rmd160, conf);
Packit 762fc5
  db_readline_sql_byte((void*)&(rline->tiger),db,db_tiger, conf);
Packit 762fc5
#ifdef WITH_MHASH
Packit 762fc5
  db_readline_sql_byte((void*)&(rline->crc32),db,db_crc32, conf);
Packit 762fc5
  db_readline_sql_byte((void*)&(rline->haval),db,db_haval, conf);
Packit 762fc5
  db_readline_sql_byte((void*)&(rline->gost),db,db_gost, conf);
Packit 762fc5
#endif
Packit 762fc5
  db_readline_sql_char((void*)&(rline->fullpath),db,db_filename, conf);
Packit 762fc5
  rline->filename=rline->fullpath;
Packit 762fc5
  db_readline_sql_char((void*)&(rline->linkname),db,db_linkname, conf);
Packit 762fc5
  
Packit 762fc5
  db_readline_sql_int((void*)&(rline->perm),db,db_perm, conf);
Packit 762fc5
  db_readline_sql_int((void*)&(rline->uid),db,db_uid, conf);
Packit 762fc5
  db_readline_sql_int((void*)&(rline->gid),db,db_gid, conf);
Packit 762fc5
  db_readline_sql_int((void*)&(rline->inode),db,db_inode, conf);
Packit 762fc5
  db_readline_sql_int((void*)&(rline->nlink),db,db_lnkcount, conf);
Packit 762fc5
  
Packit 762fc5
  db_readline_sql_int((void*)&(rline->size),db,*db_osize, conf);
Packit 762fc5
  db_readline_sql_int((void*)&(rline->bcount),db,db_bcount, conf);
Packit 762fc5
  db_readline_sql_int((void*)&(rline->attr),db,db_attr, conf);
Packit 762fc5
  
Packit 762fc5
  db_readline_sql_time((void*)&(rline->atime),db,db_atime, conf);
Packit 762fc5
  db_readline_sql_time((void*)&(rline->ctime),db,db_ctime, conf);
Packit 762fc5
  db_readline_sql_time((void*)&(rline->mtime),db,db_mtime, conf);
Packit 762fc5
#ifdef WITH_ACL
Packit 762fc5
  rline->acl=NULL;
Packit 762fc5
#endif
Packit 762fc5
  ((psql_data*)(*db_filep))->curread++;
Packit 762fc5
  
Packit 762fc5
  error(255,"filename %s\n",rline->filename);
Packit 762fc5
  
Packit 762fc5
  return rline;
Packit 762fc5
}
Packit 762fc5
Packit 762fc5
Packit 762fc5
void sql_writeint(int data,char *s,int i){
Packit 762fc5
  char t[10];
Packit 762fc5
  t[0]=0;
Packit 762fc5
  if (i!=0) {
Packit 762fc5
    s = strcat(s,",");
Packit 762fc5
  }
Packit 762fc5
  sprintf(t,"%i",data);
Packit 762fc5
  
Packit 762fc5
  strcat(s,t);
Packit 762fc5
  
Packit 762fc5
}
Packit 762fc5
Packit 762fc5
void sql_writeoct(int data,char *s,int i){
Packit 762fc5
  char t[10];
Packit 762fc5
  t[0]=0;
Packit 762fc5
  if (i!=0) {
Packit 762fc5
    s = strcat(s,",");
Packit 762fc5
  }
Packit 762fc5
  sprintf(t,"%lo",data);
Packit 762fc5
  
Packit 762fc5
  strcat(s,t);
Packit 762fc5
  
Packit 762fc5
}
Packit 762fc5
Packit 762fc5
void sql_write_time_base64(time_t data,char* s,int i){
Packit 762fc5
  static char* ptr=NULL;
Packit 762fc5
  char* tmpstr=NULL;
Packit 762fc5
  int retval=0;
Packit 762fc5
  
Packit 762fc5
  if(i!=0){
Packit 762fc5
    strcat(s,",");
Packit 762fc5
  }
Packit 762fc5
  
Packit 762fc5
  if(data==0){
Packit 762fc5
    strcat(s,"''");
Packit 762fc5
    return;
Packit 762fc5
  }
Packit 762fc5
Packit 762fc5
Packit 762fc5
  ptr=(char*)malloc(sizeof(char)*TIMEBUFSIZE);
Packit 762fc5
  if (ptr==NULL) {
Packit 762fc5
    error(0,"\nCannot allocate memory..\n");
Packit 762fc5
    abort();
Packit 762fc5
  }
Packit 762fc5
  
Packit 762fc5
  memset((void*)ptr,0,sizeof(char)*TIMEBUFSIZE);
Packit 762fc5
Packit 762fc5
  sprintf(ptr,"%li",data);
Packit 762fc5
Packit 762fc5
Packit 762fc5
  tmpstr=encode_base64(ptr,strlen(ptr));
Packit 762fc5
  strcat(s,"'");
Packit 762fc5
  strcat(s,tmpstr);
Packit 762fc5
  strcat(s,"'");
Packit 762fc5
Packit 762fc5
  free(tmpstr);
Packit 762fc5
  free(ptr);
Packit 762fc5
  
Packit 762fc5
  return;
Packit 762fc5
  
Packit 762fc5
}
Packit 762fc5
Packit 762fc5
void sql_write_byte_base64(byte*data,size_t len,char* s,int i )
Packit 762fc5
{
Packit 762fc5
  char* tmpstr=NULL;
Packit 762fc5
  int retval=0;
Packit 762fc5
  
Packit 762fc5
  tmpstr=encode_base64(data,len);
Packit 762fc5
  if(i){
Packit 762fc5
    strcat(s,",");
Packit 762fc5
  }
Packit 762fc5
  
Packit 762fc5
  strcat(s,"'");
Packit 762fc5
  
Packit 762fc5
  if(tmpstr){
Packit 762fc5
    strcat(s,tmpstr);
Packit 762fc5
    free(tmpstr);
Packit 762fc5
  }else {
Packit 762fc5
    /* Do nothing.. */
Packit 762fc5
  }
Packit 762fc5
  
Packit 762fc5
  strcat(s,"'");
Packit 762fc5
  return;
Packit 762fc5
}
Packit 762fc5
Packit 762fc5
Packit 762fc5
char* db_get_sql(db_line* line,db_config* conf){
Packit 762fc5
  
Packit 762fc5
  int i;
Packit 762fc5
  char* s=(char*) malloc(sizeof(char)*10240); /* FIXME .. */
Packit 762fc5
Packit 762fc5
  if (s==NULL) {
Packit 762fc5
    error(0,"\nCannot allocate memory..\n");
Packit 762fc5
    abort();
Packit 762fc5
  }
Packit 762fc5
  
Packit 762fc5
  s[0]=0;
Packit 762fc5
Packit 762fc5
  /* Insertion was hardcoded into aide-table, now we will use the
Packit 762fc5
     provided name from the configfile */
Packit 762fc5
  
Packit 762fc5
  s = strcat(s,"INSERT INTO ");
Packit 762fc5
  s = strcat(s, ((psql_data*)conf->db_out)->table);
Packit 762fc5
  s = strcat(s," values(");
Packit 762fc5
  
Packit 762fc5
  for(i=0;i<conf->db_out_size;i++){
Packit 762fc5
    switch (conf->db_out_order[i]) {
Packit 762fc5
    case db_filename : {
Packit 762fc5
      char* tmp;
Packit 762fc5
      if ( i!=0 ) {
Packit 762fc5
	s = strcat(s,",");
Packit 762fc5
      }
Packit 762fc5
      strcat(s,"'");
Packit 762fc5
      tmp=encode_string(line->filename);
Packit 762fc5
      s = strcat(s,tmp);
Packit 762fc5
      free(tmp);
Packit 762fc5
      strcat(s,"'");
Packit 762fc5
      break;
Packit 762fc5
    }
Packit 762fc5
    case db_linkname : {
Packit 762fc5
      if ( i!=0 ) {
Packit 762fc5
	s = strcat(s,",");
Packit 762fc5
      }
Packit 762fc5
      strcat(s,"'");
Packit 762fc5
      if (line->linkname != NULL) {
Packit 762fc5
	char* tmp;
Packit 762fc5
	tmp=encode_string(line->linkname);
Packit 762fc5
	s = strcat(s,tmp);
Packit 762fc5
	free(tmp);
Packit 762fc5
      }
Packit 762fc5
      strcat(s,"'");
Packit 762fc5
      break;
Packit 762fc5
    }  
Packit 762fc5
    case db_attr : {
Packit 762fc5
      sql_writeint(line->attr,s,i);
Packit 762fc5
      break;
Packit 762fc5
    }
Packit 762fc5
    case db_bcount : {
Packit 762fc5
      sql_writeint(line->bcount,s,i);
Packit 762fc5
      break;
Packit 762fc5
    }
Packit 762fc5
    
Packit 762fc5
    case db_mtime : {
Packit 762fc5
      sql_write_time_base64(line->mtime,s,i);
Packit 762fc5
      break;
Packit 762fc5
    }
Packit 762fc5
    case db_atime : {
Packit 762fc5
      sql_write_time_base64(line->atime,s,i);
Packit 762fc5
      break;
Packit 762fc5
    }
Packit 762fc5
    case db_ctime : {
Packit 762fc5
      sql_write_time_base64(line->ctime,s,i);
Packit 762fc5
      break;
Packit 762fc5
    }
Packit 762fc5
    case db_inode : {
Packit 762fc5
      sql_writeint(line->inode,s,i);
Packit 762fc5
      break;
Packit 762fc5
    }
Packit 762fc5
    case db_lnkcount : {
Packit 762fc5
      sql_writeint(line->nlink,s,i);
Packit 762fc5
      break;
Packit 762fc5
    }
Packit 762fc5
    case db_uid : {
Packit 762fc5
      sql_writeint(line->uid,s,i);
Packit 762fc5
      break;
Packit 762fc5
    }
Packit 762fc5
    case db_gid : {
Packit 762fc5
      sql_writeint(line->gid,s,i);
Packit 762fc5
      break;
Packit 762fc5
    }
Packit 762fc5
    case db_size : {
Packit 762fc5
      sql_writeint(line->size,s,i);
Packit 762fc5
      break;
Packit 762fc5
    }
Packit 762fc5
    case db_md5 : {
Packit 762fc5
      sql_write_byte_base64(line->md5,
Packit 762fc5
			   gcry_md_get_algo_dlen(GCRY_MD_MD5),s,i);
Packit 762fc5
      break;
Packit 762fc5
    }
Packit 762fc5
    case db_sha1 : {
Packit 762fc5
      sql_write_byte_base64(line->sha1,
Packit 762fc5
			   gcry_md_get_algo_dlen(GCRY_MD_SHA1),s,i);
Packit 762fc5
      break;
Packit 762fc5
    }
Packit 762fc5
    case db_rmd160 : {
Packit 762fc5
      sql_write_byte_base64(line->rmd160,
Packit 762fc5
			   gcry_md_get_algo_dlen(GCRY_MD_RMD160),
Packit 762fc5
			   s,i);
Packit 762fc5
      break;
Packit 762fc5
    }
Packit 762fc5
    case db_tiger : {
Packit 762fc5
      sql_write_byte_base64(line->tiger,
Packit 762fc5
			   gcry_md_get_algo_dlen(GCRY_MD_TIGER),
Packit 762fc5
			   s,i);
Packit 762fc5
      break;
Packit 762fc5
    }
Packit 762fc5
    case db_perm : {
Packit 762fc5
      sql_writeoct(line->perm,s,i);
Packit 762fc5
      break;
Packit 762fc5
    }
Packit 762fc5
#ifdef WITH_MHASH
Packit 762fc5
    case db_crc32 : {
Packit 762fc5
      sql_write_byte_base64(line->crc32,
Packit 762fc5
			   mhash_get_block_size(MHASH_CRC32),
Packit 762fc5
			   s,i);
Packit 762fc5
      break;
Packit 762fc5
    }
Packit 762fc5
    case db_crc32b : {
Packit 762fc5
      sql_write_byte_base64(line->crc32b,
Packit 762fc5
			   mhash_get_block_size(MHASH_CRC32B),
Packit 762fc5
			   s,i);
Packit 762fc5
      break;
Packit 762fc5
    }
Packit 762fc5
    case db_haval : {
Packit 762fc5
      sql_write_byte_base64(line->haval,
Packit 762fc5
			   mhash_get_block_size(MHASH_HAVAL256),
Packit 762fc5
			   s,i);
Packit 762fc5
      break;
Packit 762fc5
    }
Packit 762fc5
    case db_gost : {
Packit 762fc5
      sql_write_byte_base64(line->gost ,
Packit 762fc5
			   mhash_get_block_size(MHASH_GOST),
Packit 762fc5
			   s,i);
Packit 762fc5
      break;
Packit 762fc5
    }
Packit 762fc5
#endif
Packit 762fc5
    case db_acl : {
Packit 762fc5
      error(0,"TODO db_acl write to db_sql.c");
Packit 762fc5
      /* TODO */
Packit 762fc5
      break;
Packit 762fc5
    }
Packit 762fc5
    case db_xattrs : {
Packit 762fc5
      error(0,"TODO db_xattrs write to db_sql.c");
Packit 762fc5
      /* TODO */
Packit 762fc5
      break;
Packit 762fc5
    }
Packit 762fc5
    case db_checkmask : {
Packit 762fc5
      sql_writeoct(line->attr,s,i);
Packit 762fc5
      break;
Packit 762fc5
    }
Packit 762fc5
    default : {
Packit 762fc5
      error(0,"Not implemented in sql_writeline_file %i\n",
Packit 762fc5
	    conf->db_out_order[i]);
Packit 762fc5
      return NULL;
Packit 762fc5
    }
Packit 762fc5
    
Packit 762fc5
    }
Packit 762fc5
    
Packit 762fc5
  }
Packit 762fc5
Packit 762fc5
  strcat(s,");");
Packit 762fc5
Packit 762fc5
  return s;
Packit 762fc5
}
Packit 762fc5
Packit 762fc5
int db_close_sql(void* db){
Packit 762fc5
  
Packit 762fc5
  PQexec(((psql_data*)db)->conn,"commit");
Packit 762fc5
  
Packit 762fc5
  PQfinish(((psql_data*)db)->conn);
Packit 762fc5
Packit 762fc5
  return RETOK;
Packit 762fc5
  
Packit 762fc5
}
Packit 762fc5
Packit 762fc5
#endif