Blame src/util.c

Packit 762fc5
/* aide, Advanced Intrusion Detection Environment
Packit 762fc5
 *
Packit 762fc5
 * Copyright (C) 1999-2002,2004-2006,2010,2011,2013,2016 Rami Lehti, Pablo
Packit 762fc5
 * Virolainen, Mike Markley, 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
#include <stdlib.h>
Packit 762fc5
#include <unistd.h>
Packit 762fc5
#include <string.h>
Packit 762fc5
#include <sys/stat.h>
Packit 762fc5
#include <signal.h>
Packit 762fc5
#include <ctype.h>
Packit 762fc5
#include <syslog.h>
Packit 762fc5
/*for locale support*/
Packit 762fc5
#include "locale-aide.h"
Packit 762fc5
/*for locale support*/
Packit 762fc5
Packit 762fc5
Packit 762fc5
#ifndef MAXHOSTNAMELEN
Packit 762fc5
#define MAXHOSTNAMELEN 256
Packit 762fc5
#endif
Packit 762fc5
Packit 762fc5
#include "report.h"
Packit 762fc5
#include "db_config.h"
Packit 762fc5
#include "util.h"
Packit 762fc5
Packit 762fc5
#define URL_UNSAFE " <>\"#%{}|\\^~[]`@:\033'"
Packit 762fc5
#define ISPRINT(c) (isascii(c) && isprint(c))
Packit 762fc5
Packit 762fc5
static const char* url_name[] = { 
Packit 762fc5
  "file", "stdin", "stdout", "stderr", "fd", "sql", "syslog", "database", "https", "http", "ftp" };
Packit 762fc5
Packit 762fc5
static const int url_value[] = {
Packit 762fc5
  url_file, url_stdin, url_stdout,url_stderr,url_fd, url_sql, url_syslog, url_database, url_https, url_http, url_ftp };
Packit 762fc5
Packit 762fc5
const int url_ntypes=sizeof(url_value)/sizeof(URL_TYPE);
Packit 762fc5
Packit 762fc5
int cmpurl(url_t* u1,url_t* u2)
Packit 762fc5
{
Packit 762fc5
  if(u1->type!= u2->type){
Packit 762fc5
    return RETFAIL;
Packit 762fc5
  };
Packit 762fc5
  if(strcmp(u1->value,u2->value)!=0){
Packit 762fc5
    return RETFAIL;
Packit 762fc5
  }
Packit 762fc5
Packit 762fc5
  return RETOK;
Packit 762fc5
};
Packit 762fc5
Packit 762fc5
url_t* parse_url(char* val)
Packit 762fc5
{
Packit 762fc5
  url_t* u=NULL;
Packit 762fc5
  char* r=NULL;
Packit 762fc5
  char* val_copy=NULL;
Packit 762fc5
  int i=0;
Packit 762fc5
Packit 762fc5
  if(val==NULL){
Packit 762fc5
    return NULL;
Packit 762fc5
  }
Packit 762fc5
  
Packit 762fc5
  u=(url_t*)malloc(sizeof(url_t));
Packit 762fc5
  
Packit 762fc5
  /* We don't want to modify the original hence strdup(val) */
Packit 762fc5
  val_copy=strdup(val);
Packit 762fc5
  for(r=val_copy;r[0]!=':'&&r[0]!='\0';r++);
Packit 762fc5
  
Packit 762fc5
  if(r[0]!='\0'){
Packit 762fc5
    r[0]='\0';
Packit 762fc5
    r++;
Packit 762fc5
  }
Packit 762fc5
  u->type=url_unknown;
Packit 762fc5
  for(i=0;i
Packit 762fc5
    if(strcmp(val_copy,url_name[i])==0){
Packit 762fc5
      u->type=url_value[i];
Packit 762fc5
      break;
Packit 762fc5
    }
Packit 762fc5
  }
Packit 762fc5
  
Packit 762fc5
  switch (u->type) {
Packit 762fc5
  case url_file : {
Packit 762fc5
    if(r[0]=='/'&&(r+1)[0]=='/'&&(r+2)[0]=='/'){
Packit 762fc5
      u->value=strdup(r+2);
Packit 762fc5
      break;
Packit 762fc5
    }
Packit 762fc5
    if(r[0]=='/'&&(r+1)[0]=='/'&&(r+2)[0]!='/'){
Packit 762fc5
      char*hostname=(char*)malloc(sizeof(char)*MAXHOSTNAMELEN);
Packit 762fc5
      char* t=r+2;
Packit 762fc5
      r+=2;
Packit 762fc5
      for(i=0;r[0]!='/'&&r[0]!='\0';r++,i++);
Packit 762fc5
      if(r[0]=='\0'){
Packit 762fc5
	error(0,"Invalid file-URL,no path after hostname: file:%s\n",t);
Packit 762fc5
	return NULL;
Packit 762fc5
      }
Packit 762fc5
      u->value=strdup(r);
Packit 762fc5
      r[0]='\0';
Packit 762fc5
      if(gethostname(hostname,MAXHOSTNAMELEN)==-1){
Packit Service a02450
    strncpy(hostname,"localhost", 10);
Packit 762fc5
      }
Packit 762fc5
      if( (strcmp(t,"localhost")==0)||(strcmp(t,hostname)==0)){
Packit 762fc5
	free(hostname);
Packit 762fc5
	break;
Packit 762fc5
      } else {
Packit 762fc5
	error(0,"Invalid file-URL, cannot use hostname other than localhost or %s: file:%s\n",hostname,u->value);
Packit 762fc5
	free(hostname);
Packit 762fc5
	return NULL;
Packit 762fc5
      }
Packit Service a02450
      free(hostname);
Packit 762fc5
      break;
Packit 762fc5
    }
Packit 762fc5
    u->value=strdup(r);
Packit 762fc5
    
Packit 762fc5
    break;
Packit 762fc5
  }
Packit 762fc5
  case url_https :
Packit 762fc5
  case url_http :
Packit 762fc5
  case url_ftp : {
Packit 762fc5
    u->value=strdup(val);
Packit 762fc5
    break;
Packit 762fc5
  }
Packit 762fc5
  case url_unknown : {
Packit 762fc5
    error(0,"Unknown URL-type:%s\n",val_copy);
Packit 762fc5
    break;
Packit 762fc5
  }
Packit 762fc5
  default : {
Packit 762fc5
    u->value=strdup(r);
Packit 762fc5
    break;
Packit 762fc5
  }
Packit 762fc5
  }
Packit 762fc5
Packit 762fc5
  free(val_copy);
Packit 762fc5
Packit 762fc5
  return u;
Packit 762fc5
}
Packit 762fc5
Packit 762fc5
/* Returns 1 if the string contains unsafe characters, 0 otherwise.  */
Packit 762fc5
int contains_unsafe (const char *s)
Packit 762fc5
{
Packit 762fc5
  for (; *s; s++)
Packit 762fc5
    if (strchr (URL_UNSAFE,(int) *s)||!ISPRINT((int)*s))
Packit 762fc5
      return 1;
Packit 762fc5
  return 0;
Packit 762fc5
}
Packit 762fc5
 
Packit 762fc5
/* Decodes the forms %xy in a URL to the character the hexadecimal
Packit 762fc5
   code of which is xy.  xy are hexadecimal digits from
Packit 762fc5
   [0123456789ABCDEF] (case-insensitive).  If x or y are not
Packit 762fc5
   hex-digits or `%' precedes `\0', the sequence is inserted
Packit 762fc5
   literally.  */
Packit 762fc5
 
Packit 762fc5
void decode_string (char* s)
Packit 762fc5
{
Packit 762fc5
  char *p = s;
Packit 762fc5
 
Packit 762fc5
  for (; *s; s++, p++)
Packit 762fc5
    {
Packit 762fc5
      if (*s != '%')
Packit 762fc5
        *p = *s;
Packit 762fc5
      else
Packit 762fc5
        {
Packit 762fc5
          /* Do nothing if at the end of the string, or if the chars
Packit 762fc5
             are not hex-digits.  */
Packit 762fc5
          if (!*(s + 1) || !*(s + 2)
Packit 762fc5
              || !(ISXDIGIT (*(s + 1)) && ISXDIGIT (*(s + 2))))
Packit 762fc5
            {
Packit 762fc5
              *p = *s;
Packit 762fc5
              continue;
Packit 762fc5
            }
Packit 762fc5
          *p = (ASC2HEXD (*(s + 1)) << 4) + ASC2HEXD (*(s + 2));
Packit 762fc5
          s += 2;
Packit 762fc5
        }
Packit 762fc5
    }
Packit 762fc5
  *p = '\0';
Packit 762fc5
}
Packit 762fc5
 
Packit 762fc5
/* Encodes the unsafe characters (listed in URL_UNSAFE) in a given
Packit 762fc5
   string, returning a malloc-ed %XX encoded string.  */
Packit 762fc5
char* encode_string (const char* s)
Packit 762fc5
{
Packit 762fc5
  const char *b;
Packit 762fc5
  char *p, *res;
Packit 762fc5
  int i;
Packit 762fc5
 
Packit 762fc5
  b = s;
Packit 762fc5
  for (i = 0; *s; s++, i++){
Packit 762fc5
    if (strchr (URL_UNSAFE,(int) *s)||!ISPRINT((int)*s)){
Packit 762fc5
      i += 2; /* Two more characters (hex digits) */
Packit 762fc5
    }
Packit 762fc5
  }
Packit 762fc5
Packit 762fc5
  res = (char *)malloc (i + 1);
Packit 762fc5
  s = b;
Packit 762fc5
  for (p = res; *s; s++){
Packit 762fc5
    if (strchr (URL_UNSAFE, *s)||!ISPRINT((int)*s))
Packit 762fc5
      {
Packit 762fc5
        const unsigned char c = *s;
Packit 762fc5
        *p++ = '%';
Packit 762fc5
        *p++ = HEXD2ASC (c >> 4);
Packit 762fc5
        *p++ = HEXD2ASC (c & 0xf);
Packit 762fc5
      }
Packit 762fc5
    else {
Packit 762fc5
      *p++ = *s;
Packit 762fc5
    }
Packit 762fc5
  }
Packit 762fc5
  *p = '\0';
Packit 762fc5
  return res;
Packit 762fc5
}
Packit 762fc5
Packit 762fc5
char* perm_to_char(mode_t perm)
Packit 762fc5
{
Packit 762fc5
  char*pc=NULL;
Packit 762fc5
  int i=0;
Packit 762fc5
  
Packit 762fc5
  pc=(char*)malloc(sizeof(char)*11);
Packit 762fc5
  for(i=0;i<10;i++){
Packit 762fc5
    pc[i]='-';
Packit 762fc5
  }
Packit 762fc5
  pc[10]='\0';
Packit 762fc5
Packit 762fc5
  if(S_ISDIR(perm))
Packit 762fc5
    pc[0]='d';
Packit 762fc5
#ifdef S_ISFIFO
Packit 762fc5
  if(S_ISFIFO(perm))
Packit 762fc5
    pc[0]='p';
Packit 762fc5
#endif
Packit 762fc5
  if(S_ISLNK(perm))
Packit 762fc5
    pc[0]='l';
Packit 762fc5
  if(S_ISBLK(perm))
Packit 762fc5
    pc[0]='b';
Packit 762fc5
  if(S_ISCHR(perm))
Packit 762fc5
    pc[0]='c';
Packit 762fc5
#ifdef S_ISDOOR
Packit 762fc5
  if(S_ISDOOR(perm))
Packit 762fc5
    pc[0]='|';
Packit 762fc5
#endif
Packit 762fc5
#ifdef S_ISSOCK
Packit 762fc5
  if(S_ISSOCK(perm))
Packit 762fc5
    pc[0]='s';
Packit 762fc5
#endif
Packit 762fc5
  
Packit 762fc5
  if((S_IRUSR&perm)==S_IRUSR){
Packit 762fc5
    pc[1]='r';
Packit 762fc5
  }
Packit 762fc5
  if((S_IWUSR&perm)==S_IWUSR){
Packit 762fc5
    pc[2]='w';
Packit 762fc5
  }
Packit 762fc5
  if((S_IXUSR&perm)==S_IXUSR){
Packit 762fc5
    pc[3]='x';
Packit 762fc5
  }
Packit 762fc5
  if((S_IRGRP&perm)==S_IRGRP){
Packit 762fc5
    pc[4]='r';
Packit 762fc5
  }
Packit 762fc5
  if((S_IWGRP&perm)==S_IWGRP){
Packit 762fc5
    pc[5]='w';
Packit 762fc5
  }
Packit 762fc5
  if((S_IXGRP&perm)==S_IXGRP){
Packit 762fc5
    pc[6]='x';
Packit 762fc5
  }
Packit 762fc5
  if((S_IROTH&perm)==S_IROTH){
Packit 762fc5
    pc[7]='r';
Packit 762fc5
  }
Packit 762fc5
  if((S_IWOTH&perm)==S_IWOTH){
Packit 762fc5
    pc[8]='w';
Packit 762fc5
  }
Packit 762fc5
  if((S_IXOTH&perm)==S_IXOTH){
Packit 762fc5
    pc[9]='x';
Packit 762fc5
  }
Packit 762fc5
Packit 762fc5
  if((S_ISUID&perm)==S_ISUID){
Packit 762fc5
    if((S_IXUSR&perm)==S_IXUSR){
Packit 762fc5
      pc[3]='s';
Packit 762fc5
    } else {
Packit 762fc5
      pc[3]='S';
Packit 762fc5
    }
Packit 762fc5
  }
Packit 762fc5
  if((S_ISGID&perm)==S_ISGID){
Packit 762fc5
    if((S_IXGRP&perm)==S_IXGRP){
Packit 762fc5
      pc[6]='s';
Packit 762fc5
    } else {
Packit 762fc5
      pc[6]='l';
Packit 762fc5
    }
Packit 762fc5
  }
Packit 762fc5
#if defined (S_ISVTX) && defined (S_IXOTH)
Packit 762fc5
  if((S_ISVTX&perm)==S_ISVTX){
Packit 762fc5
    if((S_IXOTH&perm)==S_IXOTH){
Packit 762fc5
      pc[9]='t';
Packit 762fc5
    } else {
Packit 762fc5
      pc[9]='T';
Packit 762fc5
    }
Packit 762fc5
  }
Packit 762fc5
#endif
Packit 762fc5
Packit 762fc5
  error(240,"perm_to_char(): %i -> %s\n",perm,pc);
Packit 762fc5
Packit 762fc5
  return pc;
Packit 762fc5
}
Packit 762fc5
Packit 762fc5
void init_sighandler()
Packit 762fc5
{
Packit 762fc5
  signal(SIGBUS,sig_handler);
Packit 762fc5
  signal(SIGTERM,sig_handler);
Packit 762fc5
  signal(SIGUSR1,sig_handler);
Packit 762fc5
  signal(SIGUSR2,sig_handler);
Packit 762fc5
  signal(SIGHUP,sig_handler);
Packit 762fc5
Packit 762fc5
  return;
Packit 762fc5
}
Packit 762fc5
Packit 762fc5
void sig_handler(int signum)
Packit 762fc5
{
Packit 762fc5
  switch(signum){
Packit 762fc5
  case SIGBUS  : 
Packit 762fc5
  case SIGSEGV :{
Packit 762fc5
    error(200,"Caught SIGBUS/SIGSEGV\n");
Packit 762fc5
    if(conf->catch_mmap==1){
Packit 762fc5
      error(4,"Caught SIGBUS/SEGV while mmapping. File was truncated while aide was running?\n");
Packit 762fc5
      conf->catch_mmap=0;
Packit 762fc5
    } else {
Packit 762fc5
      error(0,"Caught SIGBUS/SEGV. Exiting\n");
Packit 762fc5
      exit(EXIT_FAILURE);
Packit 762fc5
    }
Packit 762fc5
    break;
Packit 762fc5
  }
Packit 762fc5
  case SIGHUP : {
Packit 762fc5
    error(4,"Caught SIGHUP\n");
Packit 762fc5
    break;
Packit 762fc5
  }
Packit 762fc5
  case SIGTERM : {
Packit 762fc5
    error(4,"Caught SIGTERM\nUse SIGKILL to terminate\n");
Packit 762fc5
    break;
Packit 762fc5
  }
Packit 762fc5
  case SIGUSR1 : {
Packit 762fc5
    error(4,"Setting output to debug level according to signal\n");
Packit 762fc5
    conf->verbose_level=220;
Packit 762fc5
    break;
Packit 762fc5
  }
Packit 762fc5
  case SIGUSR2 : {
Packit 762fc5
    error(4,"Setting output to normal level according to signal\n");
Packit 762fc5
    conf->verbose_level=5;
Packit 762fc5
    break;
Packit 762fc5
  }
Packit 762fc5
  }
Packit 762fc5
  error(220,"Caught signal %d\n",signum);
Packit 762fc5
  init_sighandler();
Packit 762fc5
Packit 762fc5
  return;
Packit 762fc5
}
Packit 762fc5
Packit 762fc5
char *expand_tilde(char *path) {
Packit 762fc5
    char *homedir, *full;
Packit 762fc5
    size_t path_len, homedir_len, full_len;
Packit 762fc5
Packit 762fc5
    if (path != NULL) {
Packit 762fc5
        if (path[0] == '~') {
Packit 762fc5
            if((homedir=getenv("HOME")) != NULL) {
Packit 762fc5
                path_len = strlen(path+sizeof(char));
Packit 762fc5
                homedir_len = strlen(homedir);
Packit 762fc5
                full_len = homedir_len+path_len;
Packit 762fc5
                full = malloc(sizeof(char) * (full_len+1));
Packit 762fc5
                strncpy(full, homedir, homedir_len);
Packit 762fc5
                strncpy(full+homedir_len, path+sizeof(char), path_len);
Packit 762fc5
                full[full_len] = '\0';
Packit 762fc5
                free(path);
Packit 762fc5
                /* Don't free(homedir); because it is not safe on some platforms */
Packit 762fc5
                path = full;
Packit 762fc5
            } else {
Packit 762fc5
                error(3, _("Variable name 'HOME' not found in environment. '~' cannot be expanded\n"));
Packit 762fc5
            }
Packit 762fc5
        } else if (path[0] == '\\' && path[1] == '~') {
Packit 762fc5
            path += sizeof(char);
Packit 762fc5
        }
Packit 762fc5
    }
Packit 762fc5
    return path;
Packit 762fc5
}
Packit 762fc5
Packit 762fc5
/* Like strstr but only do search for maximum of n chars.
Packit 762fc5
   haystack does not have to be NULL terminated
Packit 762fc5
   needle has to be NULL terminated. NULL in needle is not used in compare.
Packit 762fc5
   NULLs in haystack are ignored.
Packit 762fc5
*/
Packit 762fc5
#ifndef HAVE_STRNSTR
Packit 762fc5
char* strnstr(char* haystack,char* needle,int n)
Packit 762fc5
{
Packit 762fc5
  char* h=haystack;
Packit 762fc5
  char* s=needle;
Packit 762fc5
  int slen=strlen(s);
Packit 762fc5
  int i=0;
Packit 762fc5
Packit 762fc5
  for(i=0;i
Packit 762fc5
    /* If terminating NULL is reached in needle string
Packit 762fc5
       then we have a match */
Packit 762fc5
    if(*s=='\0'){
Packit 762fc5
      return &haystack[i-slen];
Packit 762fc5
    }
Packit 762fc5
    if(*s==*h){
Packit 762fc5
      s++;
Packit 762fc5
    }else{
Packit 762fc5
      s=needle;
Packit 762fc5
    }
Packit 762fc5
    h++;
Packit 762fc5
  }
Packit 762fc5
  /* Handle the special case that we are at the end of haystack 
Packit 762fc5
     and match is right at the end 
Packit 762fc5
  */
Packit 762fc5
  if(*s=='\0'){
Packit 762fc5
    return &haystack[i-slen];
Packit 762fc5
  }
Packit 762fc5
  
Packit 762fc5
  /* If we get this far no match was found so we return NULL */
Packit 762fc5
  return NULL;
Packit 762fc5
}
Packit 762fc5
#endif
Packit 762fc5
Packit 762fc5
#ifndef HAVE_STRNLEN
Packit 762fc5
size_t strnlen(const char *s, size_t maxlen)
Packit 762fc5
{
Packit 762fc5
	size_t l;
Packit 762fc5
	l=strlen(s);
Packit 762fc5
	if(l>maxlen)
Packit 762fc5
		return maxlen;
Packit 762fc5
	return l;
Packit 762fc5
}
Packit 762fc5
#endif
Packit 762fc5
Packit 762fc5
/* Lookup syslog facilities by name */
Packit 762fc5
int syslog_facility_lookup(char *s)
Packit 762fc5
{
Packit 762fc5
	if(!s || strlen(s)<1)
Packit 762fc5
		return(AIDE_SYSLOG_FACILITY);
Packit 762fc5
#ifdef LOG_KERN
Packit 762fc5
	if(strcasecmp(s,"LOG_KERN")==0)
Packit 762fc5
		return(LOG_KERN);
Packit 762fc5
#endif
Packit 762fc5
#ifdef LOG_USER
Packit 762fc5
	if(strcasecmp(s,"LOG_USER")==0)
Packit 762fc5
		return(LOG_USER);
Packit 762fc5
#endif
Packit 762fc5
#ifdef LOG_MAIL
Packit 762fc5
	if(strcasecmp(s,"LOG_MAIL")==0)
Packit 762fc5
		return(LOG_MAIL);
Packit 762fc5
#endif
Packit 762fc5
#ifdef LOG_DAEMON
Packit 762fc5
	if(strcasecmp(s,"LOG_DAEMON")==0)
Packit 762fc5
		return(LOG_DAEMON);
Packit 762fc5
#endif
Packit 762fc5
#ifdef LOG_AUTH
Packit 762fc5
	if(strcasecmp(s,"LOG_AUTH")==0)
Packit 762fc5
		return(LOG_AUTH);
Packit 762fc5
#endif
Packit 762fc5
#ifdef LOG_SYSLOG
Packit 762fc5
	if(strcasecmp(s,"LOG_SYSLOG")==0)
Packit 762fc5
		return(LOG_SYSLOG);
Packit 762fc5
#endif
Packit 762fc5
#ifdef LOG_LPR
Packit 762fc5
	if(strcasecmp(s,"LOG_LPR")==0)
Packit 762fc5
		return(LOG_LPR);
Packit 762fc5
#endif
Packit 762fc5
#ifdef LOG_NEWS
Packit 762fc5
	if(strcasecmp(s,"LOG_NEWS")==0)
Packit 762fc5
		return(LOG_NEWS);
Packit 762fc5
#endif
Packit 762fc5
#ifdef LOG_UUCP
Packit 762fc5
	if(strcasecmp(s,"LOG_UUCP")==0)
Packit 762fc5
		return(LOG_UUCP);
Packit 762fc5
#endif
Packit 762fc5
#ifdef LOG_CRON
Packit 762fc5
	if(strcasecmp(s,"LOG_CRON")==0)
Packit 762fc5
		return(LOG_CRON);
Packit 762fc5
#endif
Packit 762fc5
#ifdef LOG_LOCAL0
Packit 762fc5
	if(strcasecmp(s,"LOG_LOCAL0")==0)
Packit 762fc5
		return(LOG_LOCAL0);
Packit 762fc5
#endif
Packit 762fc5
#ifdef LOG_LOCAL1
Packit 762fc5
	if(strcasecmp(s,"LOG_LOCAL1")==0)
Packit 762fc5
		return(LOG_LOCAL1);
Packit 762fc5
#endif
Packit 762fc5
#ifdef LOG_LOCAL2
Packit 762fc5
	if(strcasecmp(s,"LOG_LOCAL2")==0)
Packit 762fc5
		return(LOG_LOCAL2);
Packit 762fc5
#endif
Packit 762fc5
#ifdef LOG_LOCAL3
Packit 762fc5
	if(strcasecmp(s,"LOG_LOCAL3")==0)
Packit 762fc5
		return(LOG_LOCAL3);
Packit 762fc5
#endif
Packit 762fc5
#ifdef LOG_LOCAL4
Packit 762fc5
	if(strcasecmp(s,"LOG_LOCAL4")==0)
Packit 762fc5
		return(LOG_LOCAL4);
Packit 762fc5
#endif
Packit 762fc5
#ifdef LOG_LOCAL5
Packit 762fc5
	if(strcasecmp(s,"LOG_LOCAL5")==0)
Packit 762fc5
		return(LOG_LOCAL5);
Packit 762fc5
#endif
Packit 762fc5
#ifdef LOG_LOCAL6
Packit 762fc5
	if(strcasecmp(s,"LOG_LOCAL6")==0)
Packit 762fc5
		return(LOG_LOCAL6);
Packit 762fc5
#endif
Packit 762fc5
#ifdef LOG_LOCAL7
Packit 762fc5
	if(strcasecmp(s,"LOG_LOCAL7")==0)
Packit 762fc5
		return(LOG_LOCAL7);
Packit 762fc5
#endif
Packit 762fc5
Packit 762fc5
	error(0,"Syslog facility \"%s\" is unknown, using default\n",s);
Packit 762fc5
	return(AIDE_SYSLOG_FACILITY);
Packit 762fc5
}
Packit 762fc5
Packit Service a02450
/* We need these dummy stubs to fool the linker into believing that
Packit Service a02450
   we do not need them at link time */
Packit Service a02450
Packit Service a02450
void* dlopen(char*filename,int flag)
Packit Service a02450
{
Packit Service a02450
  return NULL;
Packit Service a02450
}
Packit Service a02450
Packit Service a02450
void* dlsym(void*handle,char*symbol)
Packit Service a02450
{
Packit Service a02450
  return NULL;
Packit Service a02450
}
Packit Service a02450
Packit Service a02450
void* dlclose(void*handle)
Packit Service a02450
{
Packit Service a02450
  return NULL;
Packit Service a02450
}
Packit Service a02450
Packit Service a02450
const char* dlerror(void)
Packit Service a02450
{
Packit Service a02450
  return NULL;
Packit Service a02450
}
Packit Service a02450
Packit 762fc5
const char* aide_key_2=CONFHMACKEY_02;
Packit 762fc5
const char* db_key_2=DBHMACKEY_02;