X-Git-Url: http://ftp.carnet.hr/carnet-debian/scm?a=blobdiff_plain;f=src%2Fos_execd%2Fconfig.c;h=7b7af86fb376bbf9075315cfcc53364bf787bcec;hb=HEAD;hp=c49ba7855929f5823142b9bedd5aeeba010e53df;hpb=914feba5d54f979cd5d7e69c349c3d01f630042a;p=ossec-hids.git diff --git a/src/os_execd/config.c b/src/os_execd/config.c old mode 100755 new mode 100644 index c49ba78..7b7af86 --- a/src/os_execd/config.c +++ b/src/os_execd/config.c @@ -1,63 +1,93 @@ -/* @(#) $Id: config.c,v 1.14 2009/06/24 17:06:30 dcid Exp $ */ - /* Copyright (C) 2009 Trend Micro Inc. * All right reserved. * * This program is a free software; you can redistribute it * and/or modify it under the terms of the GNU General Public - * License (version 3) as published by the FSF - Free Software + * License (version 2) as published by the FSF - Free Software * Foundation */ - -#include "shared.h" +#include "shared.h" +#include "execd.h" -/* ExecdConfig v0.1, 2006/03/24 - * Read the config file - */ -int ExecdConfig(char * cfgfile) +/* Read the config file */ +int ExecdConfig(const char *cfgfile) { - #ifdef WIN32 +#ifdef WIN32 int is_disabled = 1; - #else +#else int is_disabled = 0; - #endif - char *(xmlf[]) = {"ossec_config", "active-response", "disabled", NULL}; +#endif + const char *(xmlf[]) = {"ossec_config", "active-response", "disabled", NULL}; + const char *(blocks[]) = {"ossec_config", "active-response", "repeated_offenders", NULL}; char *disable_entry; + char *repeated_t; + char **repeated_a; OS_XML xml; - - /* Reading XML file */ - if(OS_ReadXML(cfgfile,&xml) < 0) - { + /* Read XML file */ + if (OS_ReadXML(cfgfile, &xml) < 0) { ErrorExit(XML_ERROR, ARGV0, cfgfile, xml.err, xml.err_line); } - /* We do not validate the xml in here. It is done by other processes */ + /* We do not validate the xml in here. It is done by other processes. */ disable_entry = OS_GetOneContentforElement(&xml, xmlf); - if(disable_entry) - { - if(strcmp(disable_entry, "yes") == 0) - { + if (disable_entry) { + if (strcmp(disable_entry, "yes") == 0) { is_disabled = 1; - } - else if(strcmp(disable_entry, "no") == 0) - { + } else if (strcmp(disable_entry, "no") == 0) { is_disabled = 0; + } else { + merror(XML_VALUEERR, ARGV0, + "disabled", + disable_entry); + return (-1); } - else - { + } + + repeated_t = OS_GetOneContentforElement(&xml, blocks); + if (repeated_t) { + int i = 0; + int j = 0; + repeated_a = OS_StrBreak(',', repeated_t, 5); + if (!repeated_a) { merror(XML_VALUEERR, ARGV0, - "disabled", - disable_entry); - return(-1); + "repeated_offenders", + disable_entry); + return (-1); + } + + while (repeated_a[i] != NULL) { + char *tmpt = repeated_a[i]; + while (*tmpt != '\0') { + if (*tmpt == ' ' || *tmpt == '\t') { + tmpt++; + } else { + break; + } + } + + if (*tmpt == '\0') { + i++; + continue; + } + + repeated_offenders_timeout[j] = atoi(tmpt); + verbose("%s: INFO: Adding offenders timeout: %d (for #%d)", + ARGV0, repeated_offenders_timeout[j], j + 1); + j++; + repeated_offenders_timeout[j] = 0; + if (j >= 6) { + break; + } + i++; } } - + OS_ClearXML(&xml); - return(is_disabled); + + return (is_disabled); } -/* EOF */