|
Packit Service |
5e8d2a |
/* aide, Advanced Intrusion Detection Environment
|
|
Packit Service |
5e8d2a |
*
|
|
Packit Service |
5e8d2a |
* Copyright (C) 1999-2007,2010-2013,2016 Rami Lehti, Pablo Virolainen, Mike
|
|
Packit Service |
5e8d2a |
* Markley, 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 <string.h>
|
|
Packit Service |
5e8d2a |
#include <sys/types.h>
|
|
Packit Service |
5e8d2a |
#include <unistd.h>
|
|
Packit Service |
5e8d2a |
#include <stdlib.h>
|
|
Packit Service |
5e8d2a |
#include <time.h>
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
#include <errno.h>
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
#include "types.h"
|
|
Packit Service |
5e8d2a |
#include "base64.h"
|
|
Packit Service |
5e8d2a |
#include "db_file.h"
|
|
Packit Service |
5e8d2a |
#include "gen_list.h"
|
|
Packit Service |
5e8d2a |
#include "conf_yacc.h"
|
|
Packit Service |
5e8d2a |
#include "util.h"
|
|
Packit Service |
5e8d2a |
#include "commandconf.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 |
#ifdef WITH_MHASH
|
|
Packit Service |
5e8d2a |
#include <mhash.h>
|
|
Packit Service |
5e8d2a |
#endif
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
#ifdef WITH_ZLIB
|
|
Packit Service |
5e8d2a |
#include <zlib.h>
|
|
Packit Service |
5e8d2a |
#endif
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
#define BUFSIZE 16384
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
#include "md.h"
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
#ifdef WITH_ZLIB
|
|
Packit Service |
5e8d2a |
#define ZBUFSIZE 16384
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
static int dofprintf( const char* s,...)
|
|
Packit Service |
5e8d2a |
#ifdef __GNUC__
|
|
Packit Service |
5e8d2a |
__attribute__ ((format (printf, 1, 2)));
|
|
Packit Service |
5e8d2a |
#else
|
|
Packit Service |
5e8d2a |
;
|
|
Packit Service |
5e8d2a |
#endif
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
/* FIXME get rid of this */
|
|
Packit Service |
5e8d2a |
void handle_gzipped_input(int out,gzFile* gzp){
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
int nread=0;
|
|
Packit Service |
5e8d2a |
int err=0;
|
|
Packit Service |
5e8d2a |
int* buf=malloc(ZBUFSIZE);
|
|
Packit Service |
5e8d2a |
buf[0]='\0';
|
|
Packit Service |
5e8d2a |
error(200,"handle_gzipped_input(),%d\n",out);
|
|
Packit Service |
5e8d2a |
while(!gzeof(*gzp)){
|
|
Packit Service |
5e8d2a |
if((nread=gzread(*gzp,buf,ZBUFSIZE))<0){
|
|
Packit Service |
5e8d2a |
error(0,_("gzread() failed: gzerr=%s!\n"),gzerror(*gzp,&err));
|
|
Packit Service |
5e8d2a |
exit(1);
|
|
Packit Service |
5e8d2a |
} else {
|
|
Packit Service |
5e8d2a |
int tmp = 0;
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
/* gzread returns 0 even if uncompressed bytes were read */
|
|
Packit Service |
5e8d2a |
if(nread==0){
|
|
Packit Service |
5e8d2a |
tmp = strlen((char*)buf);
|
|
Packit Service |
5e8d2a |
} else {
|
|
Packit Service |
5e8d2a |
tmp = nread;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
if (write(out, buf,nread) != tmp)
|
|
Packit Service |
5e8d2a |
{
|
|
Packit Service |
5e8d2a |
error(0,_("write() failed: %s\n"), strerror(errno));
|
|
Packit Service |
5e8d2a |
exit(1);
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
error(240,"nread=%d,strlen(buf)=%lu,errno=%s,gzerr=%s\n",
|
|
Packit Service |
5e8d2a |
nread,(unsigned long)strlen((char*)buf),strerror(errno),
|
|
Packit Service |
5e8d2a |
gzerror(*gzp,&err));
|
|
Packit Service |
5e8d2a |
buf[0]='\0';
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
close(out);
|
|
Packit Service |
5e8d2a |
error(240,"handle_gzipped_input() exiting\n");
|
|
Packit Service |
5e8d2a |
exit(0);
|
|
Packit Service |
5e8d2a |
/* NOT REACHED */
|
|
Packit Service |
5e8d2a |
return;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
#endif
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
int dofflush(void)
|
|
Packit Service |
5e8d2a |
{
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
int retval;
|
|
Packit Service |
5e8d2a |
#ifdef WITH_ZLIB
|
|
Packit Service |
5e8d2a |
if(conf->gzip_dbout){
|
|
Packit Service |
5e8d2a |
/* Should not flush using gzip, it degrades compression */
|
|
Packit Service |
5e8d2a |
retval=Z_OK;
|
|
Packit Service |
5e8d2a |
}else {
|
|
Packit Service |
5e8d2a |
#endif
|
|
Packit Service |
5e8d2a |
retval=fflush(conf->db_out);
|
|
Packit Service |
5e8d2a |
#ifdef WITH_ZLIB
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
#endif
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
return retval;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
int dofprintf( const char* s,...)
|
|
Packit Service |
5e8d2a |
{
|
|
Packit Service |
5e8d2a |
char buf[3];
|
|
Packit Service |
5e8d2a |
int retval;
|
|
Packit Service |
5e8d2a |
char* temp=NULL;
|
|
Packit Service |
5e8d2a |
va_list ap;
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
va_start(ap,s);
|
|
Packit Service |
5e8d2a |
retval=vsnprintf(buf,3,s,ap);
|
|
Packit Service |
5e8d2a |
va_end(ap);
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
temp=(char*)malloc(retval+2);
|
|
Packit Service |
5e8d2a |
if(temp==NULL){
|
|
Packit Service |
5e8d2a |
error(0,"Unable to alloc %i bytes\n",retval+2);
|
|
Packit Service |
5e8d2a |
return -1;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
va_start(ap,s);
|
|
Packit Service |
5e8d2a |
retval=vsnprintf(temp,retval+1,s,ap);
|
|
Packit Service |
5e8d2a |
va_end(ap);
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
if (conf->mdc_out) {
|
|
Packit Service |
5e8d2a |
update_md(conf->mdc_out,temp ,retval);
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
#ifdef WITH_MHASH
|
|
Packit Service |
5e8d2a |
if(conf->do_dbnewmd)
|
|
Packit Service |
5e8d2a |
mhash(conf->dbnewmd,(void*)temp,retval);
|
|
Packit Service |
5e8d2a |
#endif
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
#ifdef WITH_ZLIB
|
|
Packit Service |
5e8d2a |
if(conf->gzip_dbout){
|
|
Packit Service |
5e8d2a |
retval=gzwrite(conf->db_gzout,temp,retval);
|
|
Packit Service |
5e8d2a |
}else{
|
|
Packit Service |
5e8d2a |
#endif
|
|
Packit Service |
5e8d2a |
/* writing is ok with fwrite with curl.. */
|
|
Packit Service |
5e8d2a |
retval=fwrite(temp,1,retval,conf->db_out);
|
|
Packit Service |
5e8d2a |
#ifdef WITH_ZLIB
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
#endif
|
|
Packit Service |
5e8d2a |
free(temp);
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
return retval;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
int db_file_read_spec(int db){
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
int i=0;
|
|
Packit Service |
c89282 |
int* db_osize=NULL;
|
|
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 |
db_lineno=&db_in_lineno;
|
|
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 |
db_lineno=&db_new_lineno;
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
c89282 |
default: {
|
|
Packit Service |
c89282 |
return RETFAIL;
|
|
Packit Service |
c89282 |
}
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
*db_order=(DB_FIELD*) malloc(1*sizeof(DB_FIELD));
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
8c0eb5 |
if (*db_order == NULL){
|
|
Packit Service |
8c0eb5 |
error(1,"malloc for *db_order failed in %s", __func__);
|
|
Packit Service |
8c0eb5 |
}
|
|
Packit Service |
8c0eb5 |
|
|
Packit Service |
5e8d2a |
while ((i=db_scan())!=TNEWLINE){
|
|
Packit Service |
5e8d2a |
switch (i) {
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
case TID : {
|
|
Packit Service |
5e8d2a |
int l;
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
c89282 |
void * tmp = realloc((void*)*db_order,
|
|
Packit Service |
5e8d2a |
((*db_osize)+1)*sizeof(DB_FIELD));
|
|
Packit Service |
c89282 |
if (tmp != NULL) *db_order=(DB_FIELD*) tmp;
|
|
Packit Service |
c89282 |
else {
|
|
Packit Service |
5e8d2a |
return RETFAIL;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
(*db_order)[*db_osize]=db_unknown;
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
for (l=0;l
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
if (strcmp(db_names[l],dbtext)==0) {
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
if (check_db_order(*db_order, *db_osize,
|
|
Packit Service |
5e8d2a |
db_value[l])==RETFAIL) {
|
|
Packit Service |
5e8d2a |
error(0,"Field %s redefined in @@dbspec\n",dbtext);
|
|
Packit Service |
5e8d2a |
(*db_order)[*db_osize]=db_unknown;
|
|
Packit Service |
5e8d2a |
} else {
|
|
Packit Service |
5e8d2a |
(*db_order)[*db_osize]=db_value[l];
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
(*db_osize)++;
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
for (l=0;l
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
if (strcmp(db_namealias[l],dbtext)==0) {
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
if (check_db_order(*db_order, *db_osize,
|
|
Packit Service |
5e8d2a |
db_aliasvalue[l])==RETFAIL) {
|
|
Packit Service |
5e8d2a |
error(0,"Field %s redefined in @@dbspec\n",dbtext);
|
|
Packit Service |
5e8d2a |
(*db_order)[*db_osize]=db_unknown;
|
|
Packit Service |
5e8d2a |
} else {
|
|
Packit Service |
5e8d2a |
(*db_order)[*db_osize]=db_aliasvalue[l];
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
(*db_osize)++;
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
if(l==db_unknown){
|
|
Packit Service |
5e8d2a |
error(0,"Unknown field %s in database\n",dbtext);
|
|
Packit Service |
5e8d2a |
(*db_osize)++;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
case TDBSPEC : {
|
|
Packit Service |
5e8d2a |
error(0,"Only one @@dbspec in input database.\n");
|
|
Packit Service |
5e8d2a |
return RETFAIL;
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
default : {
|
|
Packit Service |
5e8d2a |
error(0,"Aide internal error while reading input database.\n");
|
|
Packit Service |
5e8d2a |
return RETFAIL;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
/* Lets generate attr from db_order if database does not have attr */
|
|
Packit Service |
5e8d2a |
conf->attr=-1;
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
for (i=0;i<*db_osize;i++) {
|
|
Packit Service |
5e8d2a |
if ((*db_order)[i]==db_attr) {
|
|
Packit Service |
5e8d2a |
conf->attr=1;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
if (conf->attr==DB_ATTR_UNDEF) {
|
|
Packit Service |
5e8d2a |
conf->attr=0;
|
|
Packit Service |
5e8d2a |
error(0,"Database does not have attr field.\nComparation may be incorrect\nGenerating attr-field from dbspec\nIt might be a good Idea to regenerate databases. Sorry.\n");
|
|
Packit Service |
5e8d2a |
for(i=0;i<conf->db_in_size;i++) {
|
|
Packit Service |
5e8d2a |
conf->attr|=1<<(*db_order)[i];
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
return RETOK;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
char** db_readline_file(int db){
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
char** s=NULL;
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
int i=0;
|
|
Packit Service |
5e8d2a |
int r;
|
|
Packit Service |
5e8d2a |
int a=0;
|
|
Packit Service |
5e8d2a |
int token=0;
|
|
Packit Service |
5e8d2a |
int gotbegin_db=0;
|
|
Packit Service |
5e8d2a |
int gotend_db=0;
|
|
Packit Service |
5e8d2a |
int* domd=NULL;
|
|
Packit Service |
5e8d2a |
#ifdef WITH_MHASH
|
|
Packit Service |
5e8d2a |
MHASH* md=NULL;
|
|
Packit Service |
5e8d2a |
char** oldmdstr=NULL;
|
|
Packit Service |
c89282 |
#endif
|
|
Packit Service |
5e8d2a |
int* db_osize=0;
|
|
Packit Service |
5e8d2a |
DB_FIELD** db_order=NULL;
|
|
Packit Service |
5e8d2a |
FILE** db_filep=NULL;
|
|
Packit Service |
5e8d2a |
url_t* db_url=NULL;
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
switch (db) {
|
|
Packit Service |
5e8d2a |
case DB_OLD: {
|
|
Packit Service |
5e8d2a |
#ifdef WITH_MHASH
|
|
Packit Service |
5e8d2a |
md=&(conf->dboldmd);
|
|
Packit Service |
c89282 |
oldmdstr=&(conf->old_dboldmdstr);
|
|
Packit Service |
5e8d2a |
#endif
|
|
Packit Service |
5e8d2a |
domd=&(conf->do_dboldmd);
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
db_osize=&(conf->db_in_size);
|
|
Packit Service |
5e8d2a |
db_order=&(conf->db_in_order);
|
|
Packit Service |
5e8d2a |
db_filep=&(conf->db_in);
|
|
Packit Service |
5e8d2a |
db_url=conf->db_in_url;
|
|
Packit Service |
5e8d2a |
db_lineno=&db_in_lineno;
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
case DB_NEW: {
|
|
Packit Service |
5e8d2a |
#ifdef WITH_MHASH
|
|
Packit Service |
5e8d2a |
md=&(conf->dbnewmd);
|
|
Packit Service |
c89282 |
oldmdstr=&(conf->old_dbnewmdstr);
|
|
Packit Service |
5e8d2a |
#endif
|
|
Packit Service |
5e8d2a |
domd=&(conf->do_dbnewmd);
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
db_osize=&(conf->db_new_size);
|
|
Packit Service |
5e8d2a |
db_order=&(conf->db_new_order);
|
|
Packit Service |
5e8d2a |
db_filep=&(conf->db_new);
|
|
Packit Service |
5e8d2a |
db_url=conf->db_new_url;
|
|
Packit Service |
5e8d2a |
db_lineno=&db_new_lineno;
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
c89282 |
|
|
Packit Service |
c89282 |
if (db_osize == NULL) return NULL;
|
|
Packit Service |
c89282 |
|
|
Packit Service |
5e8d2a |
if (*db_osize==0) {
|
|
Packit Service |
5e8d2a |
db_buff(db,*db_filep);
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
token=db_scan();
|
|
Packit Service |
5e8d2a |
while((token!=TDBSPEC && token!=TEOF)){
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
switch(token){
|
|
Packit Service |
5e8d2a |
case TUNKNOWN: {
|
|
Packit Service |
5e8d2a |
continue;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
case TBEGIN_DB: {
|
|
Packit Service |
5e8d2a |
token=db_scan();
|
|
Packit Service |
5e8d2a |
gotbegin_db=1;
|
|
Packit Service |
5e8d2a |
continue;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
case TNEWLINE: {
|
|
Packit Service |
5e8d2a |
if(gotbegin_db){
|
|
Packit Service |
5e8d2a |
*domd=1;
|
|
Packit Service |
5e8d2a |
token=db_scan();
|
|
Packit Service |
5e8d2a |
continue;
|
|
Packit Service |
5e8d2a |
}else {
|
|
Packit Service |
5e8d2a |
token=TEOF;
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
case TGZIPHEADER: {
|
|
Packit Service |
5e8d2a |
error(0,"Gzipheader found inside uncompressed db!\n");
|
|
Packit Service |
5e8d2a |
return NULL;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
default: {
|
|
Packit Service |
5e8d2a |
/* If it is anything else we quit */
|
|
Packit Service |
5e8d2a |
/* Missing dbspec */
|
|
Packit Service |
5e8d2a |
token=TEOF;
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
if(FORCEDBMD&&!gotbegin_db){
|
|
Packit Service |
5e8d2a |
error(0,"Database %i does not have checksum!\n",db);
|
|
Packit Service |
5e8d2a |
return NULL;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
if (token!=TDBSPEC) {
|
|
Packit Service |
5e8d2a |
/*
|
|
Packit Service |
5e8d2a |
* error.. must be a @@dbspec line
|
|
Packit Service |
5e8d2a |
*/
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
switch (db_url->type) {
|
|
Packit Service |
5e8d2a |
case url_file : {
|
|
Packit Service |
5e8d2a |
error(0,"File database must have one db_spec specification\n");
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
case url_stdin : {
|
|
Packit Service |
5e8d2a |
error(0,"Pipe database must have one db_spec specification\n");
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
case url_fd: {
|
|
Packit Service |
5e8d2a |
error(0,"FD database must have one db_spec specification\n");
|
|
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 |
error(0,"CURL database must have one db_spec specification %i\n",token);
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
#endif
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
default : {
|
|
Packit Service |
5e8d2a |
error(0,"db_readline_file():Unknown or unsupported db in type.\n");
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
break;
|
|
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 |
* Here we read da spec
|
|
Packit Service |
5e8d2a |
*/
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
if (db_file_read_spec(db)!=0) {
|
|
Packit Service |
5e8d2a |
/* somethin went wrong */
|
|
Packit Service |
5e8d2a |
return s;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
}else {
|
|
Packit Service |
5e8d2a |
/* We need to switch the buffer cleanly*/
|
|
Packit Service |
5e8d2a |
db_buff(db,NULL);
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
s=(char**)malloc(sizeof(char*)*db_unknown);
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
/* We NEED this to avoid Bus errors on Suns */
|
|
Packit Service |
5e8d2a |
for(i=0;i
|
|
Packit Service |
5e8d2a |
s[i]=NULL;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
for(i=0;i<*db_osize;i++){
|
|
Packit Service |
5e8d2a |
switch (r=db_scan()) {
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
case TDBSPEC : {
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
error(0,"Database file can have only one db_spec.\nTrying to continue on line %li\n",*db_lineno);
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
case TNAME : {
|
|
Packit Service |
5e8d2a |
if ((*db_order)[i]!=db_unknown) {
|
|
Packit Service |
5e8d2a |
s[*db_order[i]]=(char*)strdup(dbtext);
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
case TID : {
|
|
Packit Service |
5e8d2a |
if ((*db_order)[i]!=db_unknown) {
|
|
Packit Service |
5e8d2a |
s[(*db_order)[i]]=(char*)strdup(dbtext);
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
case TNEWLINE : {
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
if (i==0) {
|
|
Packit Service |
5e8d2a |
i--;
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
if(gotend_db){
|
|
Packit Service |
5e8d2a |
return NULL;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
/* */
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
error(0,"Not enough parameters in db:%li. Trying to continue.\n",
|
|
Packit Service |
5e8d2a |
*db_lineno);
|
|
Packit Service |
5e8d2a |
for(a=0;a
|
|
Packit Service |
5e8d2a |
free(s[(*db_order)[a]]);
|
|
Packit Service |
5e8d2a |
s[(*db_order)[a]]=NULL;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
i=0;
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
case TBEGIN_DB : {
|
|
Packit Service |
5e8d2a |
error(0,_("Corrupt db. Found @@begin_db inside db. Please check\n"));
|
|
Packit Service |
5e8d2a |
return NULL;
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
case TEND_DB : {
|
|
Packit Service |
5e8d2a |
gotend_db=1;
|
|
Packit Service |
5e8d2a |
token=db_scan();
|
|
Packit Service |
5e8d2a |
if(token!=TSTRING){
|
|
Packit Service |
5e8d2a |
error(0,_("Corrupt db. Checksum garbled\n"));
|
|
Packit Service |
5e8d2a |
abort();
|
|
Packit Service |
5e8d2a |
} else { /* FIXME: this probably isn't right */
|
|
Packit Service |
5e8d2a |
#ifdef WITH_MHASH
|
|
Packit Service |
5e8d2a |
if(*md){
|
|
Packit Service |
5e8d2a |
byte* dig=NULL;
|
|
Packit Service |
5e8d2a |
char* digstr=NULL;
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
*oldmdstr=strdup(dbtext);
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
mhash(*md,NULL,0);
|
|
Packit Service |
5e8d2a |
dig=(byte*)
|
|
Packit Service |
5e8d2a |
malloc(sizeof(byte)*mhash_get_block_size(conf->dbhmactype));
|
|
Packit Service |
5e8d2a |
mhash_deinit(*md,(void*)dig);
|
|
Packit Service |
5e8d2a |
digstr=encode_base64(dig,mhash_get_block_size(conf->dbhmactype));
|
|
Packit Service |
5e8d2a |
if(strncmp(digstr,*oldmdstr,strlen(digstr))!=0){
|
|
Packit Service |
5e8d2a |
error(0,_("Db checksum mismatch for db:%i\n"),db);
|
|
Packit Service |
5e8d2a |
abort();
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
else
|
|
Packit Service |
5e8d2a |
{
|
|
Packit Service |
5e8d2a |
error(0,"@@end_db found without @@begin_db in db:%i\n",db);
|
|
Packit Service |
5e8d2a |
abort();
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
#endif
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
token=db_scan();
|
|
Packit Service |
5e8d2a |
if(token!=TNEWLINE){
|
|
Packit Service |
5e8d2a |
error(0,_("Corrupt db. Checksum garbled\n"));
|
|
Packit Service |
5e8d2a |
abort();
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
case TEND_DBNOMD : {
|
|
Packit Service |
5e8d2a |
gotend_db=1;
|
|
Packit Service |
5e8d2a |
if(FORCEDBMD){
|
|
Packit Service |
5e8d2a |
error(0,"Database %i does not have checksum!\n",db);
|
|
Packit Service |
5e8d2a |
abort();
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
case TEOF : {
|
|
Packit Service |
5e8d2a |
if(gotend_db){
|
|
Packit Service |
5e8d2a |
return NULL;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
/* This can be the first token on a line */
|
|
Packit Service |
5e8d2a |
if(i>0){
|
|
Packit Service |
5e8d2a |
error(0,"Not enough parameters in db:%li\n",*db_lineno);
|
|
Packit Service |
5e8d2a |
};
|
|
Packit Service |
5e8d2a |
for(a=0;a
|
|
Packit Service |
5e8d2a |
free(s[(*db_order)[a]]);
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
free(s);
|
|
Packit Service |
5e8d2a |
return NULL;
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
case TERROR : {
|
|
Packit Service |
5e8d2a |
error(0,"There was an error in the database file on line:%li.\n",*db_lineno);
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
default : {
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
error(0,"Not implemented in db_readline_file %i\n\"%s\"",r,dbtext);
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
free(s);
|
|
Packit Service |
5e8d2a |
s=NULL;
|
|
Packit Service |
5e8d2a |
i=*db_osize;
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
/*
|
|
Packit Service |
5e8d2a |
* If we don't get newline after reading all cells we print an error
|
|
Packit Service |
5e8d2a |
*/
|
|
Packit Service |
5e8d2a |
a=db_scan();
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
if (a!=TNEWLINE&&a!=TEOF) {
|
|
Packit Service |
5e8d2a |
error(0,"Newline expected in database. Reading until end of line\n");
|
|
Packit Service |
5e8d2a |
do {
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
error(0,"Skipped value %s\n",dbtext);
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
/*
|
|
Packit Service |
5e8d2a |
* Null statement
|
|
Packit Service |
5e8d2a |
*/
|
|
Packit Service |
5e8d2a |
a=db_scan();
|
|
Packit Service |
5e8d2a |
}while(a!=TNEWLINE&&a!=TEOF);
|
|
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 |
int db_writechar(char* s,FILE* file,int i)
|
|
Packit Service |
5e8d2a |
{
|
|
Packit Service |
5e8d2a |
char* r=NULL;
|
|
Packit Service |
5e8d2a |
int retval=0;
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
(void)file;
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
if(i) {
|
|
Packit Service |
5e8d2a |
dofprintf(" ");
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
if(s==NULL){
|
|
Packit Service |
5e8d2a |
retval=dofprintf("0");
|
|
Packit Service |
5e8d2a |
return retval;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
if(s[0]=='\0'){
|
|
Packit Service |
5e8d2a |
retval=dofprintf("0-");
|
|
Packit Service |
5e8d2a |
return retval;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
if(s[0]=='0'){
|
|
Packit Service |
5e8d2a |
retval=dofprintf("00");
|
|
Packit Service |
5e8d2a |
if(retval<0){
|
|
Packit Service |
5e8d2a |
return retval;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
s++;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
if (!i && s[0]=='#') {
|
|
Packit Service |
5e8d2a |
dofprintf("# ");
|
|
Packit Service |
5e8d2a |
r=CLEANDUP(s+1);
|
|
Packit Service |
5e8d2a |
} else {
|
|
Packit Service |
5e8d2a |
r=CLEANDUP(s);
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
retval=dofprintf("%s",r);
|
|
Packit Service |
5e8d2a |
free(r);
|
|
Packit Service |
5e8d2a |
return retval;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
int db_writeint(long i,FILE* file,int a)
|
|
Packit Service |
5e8d2a |
{
|
|
Packit Service |
5e8d2a |
(void)file;
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
if(a) {
|
|
Packit Service |
5e8d2a |
dofprintf(" ");
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
return dofprintf("%li",i);
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
int db_writelong(AIDE_OFF_TYPE i,FILE* file,int a)
|
|
Packit Service |
5e8d2a |
{
|
|
Packit Service |
5e8d2a |
(void)file;
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
if(a) {
|
|
Packit Service |
5e8d2a |
dofprintf(" ");
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
#if defined HAVE_OFF64_TYPE && SIZEOF_OFF64_T == SIZEOF_LONG_LONG || !defined HAVE_OFF64_TYPE && SIZEOF_OFF_T == SIZEOF_LONG_LONG
|
|
Packit Service |
5e8d2a |
return dofprintf("%lli",(long long)i);
|
|
Packit Service |
5e8d2a |
#else
|
|
Packit Service |
5e8d2a |
return dofprintf("%li",i);
|
|
Packit Service |
5e8d2a |
#endif
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
int db_write_byte_base64(byte*data,size_t len,FILE* file,int i,
|
|
Packit Service |
5e8d2a |
DB_ATTR_TYPE th, DB_ATTR_TYPE attr )
|
|
Packit Service |
5e8d2a |
{
|
|
Packit Service |
5e8d2a |
char* tmpstr=NULL;
|
|
Packit Service |
5e8d2a |
int retval=0;
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
(void)file;
|
|
Packit Service |
5e8d2a |
if (data && !len)
|
|
Packit Service |
5e8d2a |
len = strlen((const char *)data);
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
if (data!=NULL&&th&attr) {
|
|
Packit Service |
5e8d2a |
tmpstr=encode_base64(data,len);
|
|
Packit Service |
5e8d2a |
} else {
|
|
Packit Service |
5e8d2a |
tmpstr=NULL;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
if(i){
|
|
Packit Service |
5e8d2a |
dofprintf(" ");
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
if(tmpstr){
|
|
Packit Service |
5e8d2a |
retval=dofprintf("%s", tmpstr);
|
|
Packit Service |
5e8d2a |
free(tmpstr);
|
|
Packit Service |
5e8d2a |
return retval;
|
|
Packit Service |
5e8d2a |
}else {
|
|
Packit Service |
5e8d2a |
return dofprintf("0");
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
return 0;
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
int db_write_time_base64(time_t i,FILE* file,int a)
|
|
Packit Service |
5e8d2a |
{
|
|
Packit Service |
5e8d2a |
static char* ptr=NULL;
|
|
Packit Service |
5e8d2a |
char* tmpstr=NULL;
|
|
Packit Service |
5e8d2a |
int retval=0;
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
(void)file;
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
if(a){
|
|
Packit Service |
5e8d2a |
dofprintf(" ");
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
if(i==0){
|
|
Packit Service |
5e8d2a |
retval=dofprintf("0");
|
|
Packit Service |
5e8d2a |
return retval;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
ptr=(char*)malloc(sizeof(char)*TIMEBUFSIZE);
|
|
Packit Service |
5e8d2a |
if (ptr==NULL) {
|
|
Packit Service |
5e8d2a |
error(0,"\nCannot allocate memory.\n");
|
|
Packit Service |
5e8d2a |
abort();
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
memset((void*)ptr,0,sizeof(char)*TIMEBUFSIZE);
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
sprintf(ptr,"%li",i);
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
tmpstr=encode_base64((byte *)ptr,strlen(ptr));
|
|
Packit Service |
5e8d2a |
retval=dofprintf("%s", tmpstr);
|
|
Packit Service |
5e8d2a |
free(tmpstr);
|
|
Packit Service |
5e8d2a |
free(ptr);
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
return retval;
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
int db_writeoct(long i, FILE* file,int a)
|
|
Packit Service |
5e8d2a |
{
|
|
Packit Service |
5e8d2a |
(void)file;
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
if(a) {
|
|
Packit Service |
5e8d2a |
dofprintf(" ");
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
return dofprintf("%lo",i);
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
int db_writespec_file(db_config* dbconf)
|
|
Packit Service |
5e8d2a |
{
|
|
Packit Service |
5e8d2a |
int i=0;
|
|
Packit Service |
5e8d2a |
int j=0;
|
|
Packit Service |
5e8d2a |
int retval=1;
|
|
Packit Service |
5e8d2a |
struct tm* st;
|
|
Packit Service |
5e8d2a |
time_t tim=time(&tim);
|
|
Packit Service |
5e8d2a |
st=localtime(&tim);
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
retval=dofprintf("@@begin_db\n");
|
|
Packit Service |
5e8d2a |
if(retval==0){
|
|
Packit Service |
5e8d2a |
return RETFAIL;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
#ifdef WITH_MHASH
|
|
Packit Service |
5e8d2a |
/* From hereon everything must MD'd before write to db */
|
|
Packit Service |
c89282 |
void*key=NULL;
|
|
Packit Service |
c89282 |
int keylen=0;
|
|
Packit Service |
5e8d2a |
if((key=get_db_key())!=NULL){
|
|
Packit Service |
5e8d2a |
keylen=get_db_key_len();
|
|
Packit Service |
5e8d2a |
dbconf->do_dbnewmd=1;
|
|
Packit Service |
5e8d2a |
if( (dbconf->dbnewmd=
|
|
Packit Service |
5e8d2a |
mhash_hmac_init(dbconf->dbhmactype,
|
|
Packit Service |
5e8d2a |
key,
|
|
Packit Service |
5e8d2a |
keylen,
|
|
Packit Service |
5e8d2a |
mhash_get_hash_pblock(dbconf->dbhmactype)))==
|
|
Packit Service |
5e8d2a |
MHASH_FAILED){
|
|
Packit Service |
5e8d2a |
error(0, "mhash_hmac_init() failed for db write. Aborting\n");
|
|
Packit Service |
5e8d2a |
abort();
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
#endif
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
if(dbconf->database_add_metadata) {
|
|
Packit Service |
5e8d2a |
retval=dofprintf(
|
|
Packit Service |
5e8d2a |
"# This file was generated by Aide, version %s\n"
|
|
Packit Service |
5e8d2a |
"# Time of generation was %.4u-%.2u-%.2u %.2u:%.2u:%.2u\n",
|
|
Packit Service |
5e8d2a |
AIDEVERSION,
|
|
Packit Service |
5e8d2a |
st->tm_year+1900, st->tm_mon+1, st->tm_mday,
|
|
Packit Service |
5e8d2a |
st->tm_hour, st->tm_min, st->tm_sec
|
|
Packit Service |
5e8d2a |
);
|
|
Packit Service |
5e8d2a |
if(retval==0){
|
|
Packit Service |
5e8d2a |
return RETFAIL;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
if(dbconf->config_version){
|
|
Packit Service |
5e8d2a |
retval=dofprintf(
|
|
Packit Service |
5e8d2a |
"# The config version used to generate this file was:\n"
|
|
Packit Service |
5e8d2a |
"# %s\n", dbconf->config_version);
|
|
Packit Service |
5e8d2a |
if(retval==0){
|
|
Packit Service |
5e8d2a |
return RETFAIL;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
retval=dofprintf("@@db_spec ");
|
|
Packit Service |
5e8d2a |
if(retval==0){
|
|
Packit Service |
5e8d2a |
return RETFAIL;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
for(i=0;i<dbconf->db_out_size;i++){
|
|
Packit Service |
5e8d2a |
for(j=0;j
|
|
Packit Service |
5e8d2a |
if((int)db_value[j]==(int)dbconf->db_out_order[i]){
|
|
Packit Service |
5e8d2a |
retval=dofprintf("%s ",db_names[j]);
|
|
Packit Service |
5e8d2a |
if(retval==0){
|
|
Packit Service |
5e8d2a |
return RETFAIL;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
retval=dofprintf("\n");
|
|
Packit Service |
5e8d2a |
if(retval==0){
|
|
Packit Service |
5e8d2a |
return RETFAIL;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
return RETOK;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
#ifdef WITH_ACL
|
|
Packit Service |
5e8d2a |
int db_writeacl(acl_type* acl,FILE* file,int a)
|
|
Packit Service |
5e8d2a |
{
|
|
Packit Service |
5e8d2a |
#ifdef WITH_SUN_ACL
|
|
Packit Service |
5e8d2a |
int i;
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
if(a) {
|
|
Packit Service |
5e8d2a |
dofprintf(" ");
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
if (acl==NULL) {
|
|
Packit Service |
5e8d2a |
dofprintf("0");
|
|
Packit Service |
5e8d2a |
} else {
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
dofprintf("%i",acl->entries);
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
for (i=0;i<acl->entries;i++) {
|
|
Packit Service |
5e8d2a |
dofprintf(",%i,%i,%i", acl->acl[i].a_type, acl->acl[i].a_id,
|
|
Packit Service |
5e8d2a |
acl->acl[i].a_perm);
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
#endif
|
|
Packit Service |
5e8d2a |
#ifdef WITH_POSIX_ACL
|
|
Packit Service |
5e8d2a |
if(a) {
|
|
Packit Service |
5e8d2a |
dofprintf(" ");
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
if (acl==NULL) {
|
|
Packit Service |
5e8d2a |
dofprintf("0");
|
|
Packit Service |
5e8d2a |
} else {
|
|
Packit Service |
5e8d2a |
dofprintf("POSIX"); /* This is _very_ incompatible */
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
dofprintf(",");
|
|
Packit Service |
5e8d2a |
if (acl->acl_a)
|
|
Packit Service |
5e8d2a |
db_write_byte_base64((byte*)acl->acl_a, 0, file,0,1,1);
|
|
Packit Service |
5e8d2a |
else
|
|
Packit Service |
5e8d2a |
dofprintf("0");
|
|
Packit Service |
5e8d2a |
dofprintf(",");
|
|
Packit Service |
5e8d2a |
if (acl->acl_d)
|
|
Packit Service |
5e8d2a |
db_write_byte_base64((byte*)acl->acl_d, 0, file,0,1,1);
|
|
Packit Service |
5e8d2a |
else
|
|
Packit Service |
5e8d2a |
dofprintf("0");
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
#endif
|
|
Packit Service |
5e8d2a |
#ifndef WITH_ACL
|
|
Packit Service |
5e8d2a |
if(a) { /* compat. */
|
|
Packit Service |
5e8d2a |
dofprintf(" ");
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
dofprintf("0");
|
|
Packit Service |
5e8d2a |
#endif
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
return RETOK;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
#endif
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
int db_writeline_file(db_line* line,db_config* dbconf, url_t* url){
|
|
Packit Service |
5e8d2a |
int i;
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
(void)url;
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
for(i=0;i<dbconf->db_out_size;i++){
|
|
Packit Service |
5e8d2a |
switch (dbconf->db_out_order[i]) {
|
|
Packit Service |
5e8d2a |
case db_filename : {
|
|
Packit Service |
5e8d2a |
db_writechar(line->filename,dbconf->db_out,i);
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
case db_linkname : {
|
|
Packit Service |
5e8d2a |
db_writechar(line->linkname,dbconf->db_out,i);
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
case db_bcount : {
|
|
Packit Service |
5e8d2a |
db_writeint(line->bcount,dbconf->db_out,i);
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
case db_mtime : {
|
|
Packit Service |
5e8d2a |
db_write_time_base64(line->mtime,dbconf->db_out,i);
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
case db_atime : {
|
|
Packit Service |
5e8d2a |
db_write_time_base64(line->atime,dbconf->db_out,i);
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
case db_ctime : {
|
|
Packit Service |
5e8d2a |
db_write_time_base64(line->ctime,dbconf->db_out,i);
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
case db_inode : {
|
|
Packit Service |
5e8d2a |
db_writeint(line->inode,dbconf->db_out,i);
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
case db_lnkcount : {
|
|
Packit Service |
5e8d2a |
db_writeint(line->nlink,dbconf->db_out,i);
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
case db_uid : {
|
|
Packit Service |
5e8d2a |
db_writeint(line->uid,dbconf->db_out,i);
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
case db_gid : {
|
|
Packit Service |
5e8d2a |
db_writeint(line->gid,dbconf->db_out,i);
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
case db_size : {
|
|
Packit Service |
5e8d2a |
db_writelong(line->size,dbconf->db_out,i);
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
case db_md5 : {
|
|
Packit Service |
5e8d2a |
db_write_byte_base64(line->md5,
|
|
Packit Service |
5e8d2a |
HASH_MD5_LEN,
|
|
Packit Service |
5e8d2a |
dbconf->db_out,i,
|
|
Packit Service |
5e8d2a |
DB_MD5,line->attr);
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
case db_sha1 : {
|
|
Packit Service |
5e8d2a |
db_write_byte_base64(line->sha1,
|
|
Packit Service |
5e8d2a |
HASH_SHA1_LEN,
|
|
Packit Service |
5e8d2a |
dbconf->db_out,i,
|
|
Packit Service |
5e8d2a |
DB_SHA1,line->attr);
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
case db_rmd160 : {
|
|
Packit Service |
5e8d2a |
db_write_byte_base64(line->rmd160,
|
|
Packit Service |
5e8d2a |
HASH_RMD160_LEN,
|
|
Packit Service |
5e8d2a |
dbconf->db_out,i,
|
|
Packit Service |
5e8d2a |
DB_RMD160,line->attr);
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
case db_tiger : {
|
|
Packit Service |
5e8d2a |
db_write_byte_base64(line->tiger,
|
|
Packit Service |
5e8d2a |
HASH_TIGER_LEN,
|
|
Packit Service |
5e8d2a |
dbconf->db_out,i,
|
|
Packit Service |
5e8d2a |
DB_TIGER,line->attr);
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
case db_perm : {
|
|
Packit Service |
5e8d2a |
db_writeoct(line->perm,dbconf->db_out,i);
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
case db_crc32 : {
|
|
Packit Service |
5e8d2a |
db_write_byte_base64(line->crc32,
|
|
Packit Service |
5e8d2a |
HASH_CRC32_LEN,
|
|
Packit Service |
5e8d2a |
dbconf->db_out,i,
|
|
Packit Service |
5e8d2a |
DB_CRC32,line->attr);
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
case db_crc32b : {
|
|
Packit Service |
5e8d2a |
db_write_byte_base64(line->crc32b,
|
|
Packit Service |
5e8d2a |
HASH_CRC32B_LEN,
|
|
Packit Service |
5e8d2a |
dbconf->db_out,i,
|
|
Packit Service |
5e8d2a |
DB_CRC32B,line->attr);
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
case db_haval : {
|
|
Packit Service |
5e8d2a |
db_write_byte_base64(line->haval,
|
|
Packit Service |
5e8d2a |
HASH_HAVAL256_LEN,
|
|
Packit Service |
5e8d2a |
dbconf->db_out,i,
|
|
Packit Service |
5e8d2a |
DB_HAVAL,line->attr);
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
case db_gost : {
|
|
Packit Service |
5e8d2a |
db_write_byte_base64(line->gost ,
|
|
Packit Service |
5e8d2a |
HASH_GOST_LEN,
|
|
Packit Service |
5e8d2a |
dbconf->db_out,i,
|
|
Packit Service |
5e8d2a |
DB_GOST,line->attr);
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
case db_sha256 : {
|
|
Packit Service |
5e8d2a |
db_write_byte_base64(line->sha256,
|
|
Packit Service |
5e8d2a |
HASH_SHA256_LEN,
|
|
Packit Service |
5e8d2a |
dbconf->db_out,i,
|
|
Packit Service |
5e8d2a |
DB_SHA256,line->attr);
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
case db_sha512 : {
|
|
Packit Service |
5e8d2a |
db_write_byte_base64(line->sha512,
|
|
Packit Service |
5e8d2a |
HASH_SHA512_LEN,
|
|
Packit Service |
5e8d2a |
dbconf->db_out,i,
|
|
Packit Service |
5e8d2a |
DB_SHA512,line->attr);
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
case db_whirlpool : {
|
|
Packit Service |
5e8d2a |
db_write_byte_base64(line->whirlpool,
|
|
Packit Service |
5e8d2a |
HASH_WHIRLPOOL_LEN,
|
|
Packit Service |
5e8d2a |
dbconf->db_out,i,
|
|
Packit Service |
5e8d2a |
DB_WHIRLPOOL,line->attr);
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
case db_attr : {
|
|
Packit Service |
5e8d2a |
db_writelong(line->attr, dbconf->db_out,i);
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
#ifdef WITH_ACL
|
|
Packit Service |
5e8d2a |
case db_acl : {
|
|
Packit Service |
5e8d2a |
db_writeacl(line->acl,dbconf->db_out,i);
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
#endif
|
|
Packit Service |
5e8d2a |
case db_xattrs : {
|
|
Packit Service |
5e8d2a |
xattr_node *xattr = NULL;
|
|
Packit Service |
5e8d2a |
size_t num = 0;
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
if (!line->xattrs)
|
|
Packit Service |
5e8d2a |
{
|
|
Packit Service |
5e8d2a |
db_writelong(0, dbconf->db_out, i);
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
db_writelong(line->xattrs->num, dbconf->db_out, i);
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
xattr = line->xattrs->ents;
|
|
Packit Service |
5e8d2a |
while (num < line->xattrs->num)
|
|
Packit Service |
5e8d2a |
{
|
|
Packit Service |
5e8d2a |
dofprintf(",");
|
|
Packit Service |
5e8d2a |
db_writechar(xattr->key, dbconf->db_out, 0);
|
|
Packit Service |
5e8d2a |
dofprintf(",");
|
|
Packit Service |
5e8d2a |
db_write_byte_base64(xattr->val, xattr->vsz, dbconf->db_out, 0, 1, 1);
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
++xattr;
|
|
Packit Service |
5e8d2a |
++num;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
case db_selinux : {
|
|
Packit Service |
5e8d2a |
db_write_byte_base64((byte*)line->cntx, 0, dbconf->db_out, i, 1, 1);
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
#ifdef WITH_E2FSATTRS
|
|
Packit Service |
5e8d2a |
case db_e2fsattrs : {
|
|
Packit Service |
5e8d2a |
db_writelong(line->e2fsattrs,dbconf->db_out,i);
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
#endif
|
|
Packit Service |
5e8d2a |
case db_checkmask : {
|
|
Packit Service |
5e8d2a |
db_writeoct(line->attr,dbconf->db_out,i);
|
|
Packit Service |
5e8d2a |
break;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
default : {
|
|
Packit Service |
5e8d2a |
error(0,"Not implemented in db_writeline_file %i\n",
|
|
Packit Service |
5e8d2a |
dbconf->db_out_order[i]);
|
|
Packit Service |
5e8d2a |
return RETFAIL;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
dofprintf("\n");
|
|
Packit Service |
5e8d2a |
/* Can't use fflush because of zlib.*/
|
|
Packit Service |
5e8d2a |
dofflush();
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
return RETOK;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
int db_close_file(db_config* dbconf){
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
#ifdef WITH_MHASH
|
|
Packit Service |
5e8d2a |
byte* dig=NULL;
|
|
Packit Service |
5e8d2a |
char* digstr=NULL;
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
if(dbconf->db_out
|
|
Packit Service |
5e8d2a |
#ifdef WITH_ZLIB
|
|
Packit Service |
5e8d2a |
|| dbconf->db_gzout
|
|
Packit Service |
5e8d2a |
#endif
|
|
Packit Service |
5e8d2a |
){
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
/* Let's write @@end_db <checksum> */
|
|
Packit Service |
5e8d2a |
if (dbconf->dbnewmd!=NULL) {
|
|
Packit Service |
5e8d2a |
mhash(dbconf->dbnewmd, NULL ,0);
|
|
Packit Service |
5e8d2a |
dig=(byte*)malloc(sizeof(byte)*mhash_get_block_size(dbconf->dbhmactype));
|
|
Packit Service |
5e8d2a |
mhash_deinit(dbconf->dbnewmd,(void*)dig);
|
|
Packit Service |
5e8d2a |
digstr=encode_base64(dig,mhash_get_block_size(dbconf->dbhmactype));
|
|
Packit Service |
5e8d2a |
dbconf->do_dbnewmd=0;
|
|
Packit Service |
5e8d2a |
dofprintf("@@end_db %s\n",digstr);
|
|
Packit Service |
5e8d2a |
free(dig);
|
|
Packit Service |
5e8d2a |
free(digstr);
|
|
Packit Service |
5e8d2a |
} else {
|
|
Packit Service |
5e8d2a |
dofprintf("@@end_db\n");
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
#endif
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
#ifndef WITH_ZLIB
|
|
Packit Service |
5e8d2a |
if(fclose(dbconf->db_out)){
|
|
Packit Service |
5e8d2a |
error(0,"Unable to close database:%s\n",strerror(errno));
|
|
Packit Service |
5e8d2a |
return RETFAIL;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
#else
|
|
Packit Service |
5e8d2a |
if(dbconf->gzip_dbout){
|
|
Packit Service |
5e8d2a |
if(gzclose(dbconf->db_gzout)){
|
|
Packit Service |
5e8d2a |
error(0,"Unable to close gzdatabase:%s\n",strerror(errno));
|
|
Packit Service |
5e8d2a |
return RETFAIL;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
}else {
|
|
Packit Service |
5e8d2a |
if(fclose(dbconf->db_out)){
|
|
Packit Service |
5e8d2a |
error(0,"Unable to close database:%s\n",strerror(errno));
|
|
Packit Service |
5e8d2a |
return RETFAIL;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
#endif
|
|
Packit Service |
5e8d2a |
|
|
Packit Service |
5e8d2a |
return RETOK;
|
|
Packit Service |
5e8d2a |
}
|
|
Packit Service |
5e8d2a |
// vi: ts=8 sw=8
|