|
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
|