-/* @(#) $Id$ */
-
/* Copyright (C) 2009 Trend Micro Inc.
* All right reserved.
*
* Foundation
*/
-/* Functions to handle the configuration files
- */
-
-
#include "shared.h"
#include "mail-config.h"
+#include "config.h"
-int Read_EmailAlerts(XML_NODE node, void *configp, void *mailp)
+int Read_EmailAlerts(XML_NODE node, __attribute__((unused)) void *configp, void *mailp)
{
int i = 0;
- int granto_size = 1;
+ unsigned int granto_size = 0;
/* XML definitions */
- char *xml_email_to = "email_to";
- char *xml_email_format = "format";
- char *xml_email_level = "level";
- char *xml_email_id = "rule_id";
- char *xml_email_group = "group";
- char *xml_email_location = "event_location";
- char *xml_email_donotdelay = "do_not_delay";
- char *xml_email_donotgroup = "do_not_group";
+ const char *xml_email_to = "email_to";
+ const char *xml_email_format = "format";
+ const char *xml_email_level = "level";
+ const char *xml_email_id = "rule_id";
+ const char *xml_email_group = "group";
+ const char *xml_email_location = "event_location";
+ const char *xml_email_donotdelay = "do_not_delay";
+ const char *xml_email_donotgroup = "do_not_group";
MailConfig *Mail;
-
+
Mail = (MailConfig *)mailp;
- if(!Mail)
- {
- return(0);
+ if (!Mail) {
+ return (0);
}
-
- /* Getting Granular mail_to size */
- if(Mail && Mail->gran_to)
- {
+ /* Get Granular mail_to size */
+ if (Mail && Mail->gran_to) {
char **ww;
ww = Mail->gran_to;
- while(*ww != NULL)
- {
+ while (*ww != NULL) {
ww++;
granto_size++;
}
}
+ if (Mail) {
+ os_realloc(Mail->gran_to,
+ sizeof(char *) * (granto_size + 2), Mail->gran_to);
+ os_realloc(Mail->gran_id,
+ sizeof(unsigned int *) * (granto_size + 2), Mail->gran_id);
+ os_realloc(Mail->gran_level,
+ sizeof(unsigned int) * (granto_size + 2), Mail->gran_level);
+ os_realloc(Mail->gran_set,
+ sizeof(int) * (granto_size + 2), Mail->gran_set);
+ os_realloc(Mail->gran_format,
+ sizeof(int) * (granto_size + 2), Mail->gran_format);
+ os_realloc(Mail->gran_location,
+ sizeof(OSMatch *) * (granto_size + 2), Mail->gran_location);
+ os_realloc(Mail->gran_group,
+ sizeof(OSMatch *) * (granto_size + 2), Mail->gran_group);
- if(Mail)
- {
- os_realloc(Mail->gran_to,
- sizeof(char *)*(granto_size +1), Mail->gran_to);
- os_realloc(Mail->gran_id,
- sizeof(int *)*(granto_size +1), Mail->gran_id);
- os_realloc(Mail->gran_level,
- sizeof(int)*(granto_size +1), Mail->gran_level);
- os_realloc(Mail->gran_set,
- sizeof(int)*(granto_size +1), Mail->gran_set);
- os_realloc(Mail->gran_format,
- sizeof(int)*(granto_size +1), Mail->gran_format);
- os_realloc(Mail->gran_location,
- sizeof(OSMatch)*(granto_size +1), Mail->gran_location);
- os_realloc(Mail->gran_group,
- sizeof(OSMatch)*(granto_size +1), Mail->gran_group);
-
- Mail->gran_to[granto_size -1] = NULL;
Mail->gran_to[granto_size] = NULL;
-
- Mail->gran_id[granto_size -1] = NULL;
+ Mail->gran_to[granto_size + 1] = NULL;
+
Mail->gran_id[granto_size] = NULL;
-
- Mail->gran_location[granto_size -1] = NULL;
+ Mail->gran_id[granto_size + 1] = NULL;
+
Mail->gran_location[granto_size] = NULL;
+ Mail->gran_location[granto_size + 1] = NULL;
- Mail->gran_group[granto_size -1] = NULL;
Mail->gran_group[granto_size] = NULL;
-
- Mail->gran_level[granto_size -1] = 0;
+ Mail->gran_group[granto_size + 1] = NULL;
+
Mail->gran_level[granto_size] = 0;
-
- Mail->gran_format[granto_size -1] = FULL_FORMAT;
- Mail->gran_format[granto_size] = FULL_FORMAT;
-
- Mail->gran_set[granto_size -1] = 0;
+ Mail->gran_level[granto_size + 1] = 0;
+
+ Mail->gran_format[granto_size] = FULL_FORMAT;
+ Mail->gran_format[granto_size + 1] = FULL_FORMAT;
+
Mail->gran_set[granto_size] = 0;
+ Mail->gran_set[granto_size + 1] = 0;
}
-
-
- while(node[i])
- {
- if(!node[i]->element)
- {
- merror(XML_ELEMNULL, ARGV0);
- return(OS_INVALID);
- }
- else if(!node[i]->content)
- {
- merror(XML_VALUENULL, ARGV0, node[i]->element);
- return(OS_INVALID);
+
+ while (node[i]) {
+ if (!node[i]->element) {
+ merror(XML_ELEMNULL, __local_name);
+ return (OS_INVALID);
+ } else if (!node[i]->content) {
+ merror(XML_VALUENULL, __local_name, node[i]->element);
+ return (OS_INVALID);
}
/* Mail notification */
- else if(strcmp(node[i]->element, xml_email_level) == 0)
- {
- if(!OS_StrIsNum(node[i]->content))
- {
- merror(XML_VALUEERR,ARGV0,node[i]->element,node[i]->content);
- return(OS_INVALID);
+ else if (strcmp(node[i]->element, xml_email_level) == 0) {
+ if (!OS_StrIsNum(node[i]->content)) {
+ merror(XML_VALUEERR, __local_name, node[i]->element, node[i]->content);
+ return (OS_INVALID);
}
- Mail->gran_level[granto_size -1] = atoi(node[i]->content);
- }
- else if(strcmp(node[i]->element, xml_email_to) == 0)
- {
- os_strdup(node[i]->content, Mail->gran_to[granto_size -1]);
- }
- else if(strcmp(node[i]->element, xml_email_id) == 0)
- {
+ Mail->gran_level[granto_size] = atoi(node[i]->content);
+ } else if (strcmp(node[i]->element, xml_email_to) == 0) {
+ os_strdup(node[i]->content, Mail->gran_to[granto_size]);
+ } else if (strcmp(node[i]->element, xml_email_id) == 0) {
int r_id = 0;
char *str_pt = node[i]->content;
- while(*str_pt != '\0')
- {
+ while (*str_pt != '\0') {
/* We allow spaces in between */
- if(*str_pt == ' ')
- {
+ if (*str_pt == ' ') {
str_pt++;
continue;
}
- /* If is digit, we get the value
- * and search for the next digit
- * available
+ /* If is digit, we get the value and
+ * search for the next digit available
*/
- else if(isdigit((int)*str_pt))
- {
- int id_i = 0;
-
+ else if (isdigit((int)*str_pt)) {
+ unsigned int id_i = 0;
+
r_id = atoi(str_pt);
debug1("%s: DEBUG: Adding '%d' to granular e-mail",
- ARGV0, r_id);
-
- if(!Mail->gran_id[granto_size -1])
- {
- os_calloc(2,sizeof(int),Mail->gran_id[granto_size -1]);
- Mail->gran_id[granto_size -1][0] = 0;
- Mail->gran_id[granto_size -1][1] = 0;
- }
- else
- {
- while(Mail->gran_id[granto_size -1][id_i] != 0)
- {
+ __local_name, r_id);
+
+ if (!Mail->gran_id[granto_size]) {
+ os_calloc(2, sizeof(unsigned int), Mail->gran_id[granto_size]);
+ Mail->gran_id[granto_size][0] = 0;
+ Mail->gran_id[granto_size][1] = 0;
+ } else {
+ while (Mail->gran_id[granto_size][id_i] != 0) {
id_i++;
}
-
- os_realloc(Mail->gran_id[granto_size -1],
- (id_i +2) * sizeof(int),
- Mail->gran_id[granto_size -1]);
- Mail->gran_id[granto_size -1][id_i +1] = 0;
+
+ os_realloc(Mail->gran_id[granto_size],
+ (id_i + 2) * sizeof(unsigned int),
+ Mail->gran_id[granto_size]);
+ Mail->gran_id[granto_size][id_i + 1] = 0;
}
- Mail->gran_id[granto_size -1][id_i] = r_id;
-
+ Mail->gran_id[granto_size][id_i] = r_id;
str_pt = strchr(str_pt, ',');
- if(str_pt)
- {
+ if (str_pt) {
str_pt++;
- }
- else
- {
+ } else {
break;
}
}
- /* Checking for duplicate commas */
- else if(*str_pt == ',')
- {
+ /* Check for duplicate commas */
+ else if (*str_pt == ',') {
str_pt++;
continue;
}
- else
- {
+ else {
break;
}
}
- }
- else if(strcmp(node[i]->element, xml_email_format) == 0)
- {
- if(strcmp(node[i]->content, "sms") == 0)
- {
- Mail->gran_format[granto_size -1] = SMS_FORMAT;
- }
- else if(strcmp(node[i]->content, "default") == 0)
- {
+ } else if (strcmp(node[i]->element, xml_email_format) == 0) {
+ if (strcmp(node[i]->content, "default") == 0) {
/* Default is full format */
+ } else {
+ merror(XML_VALUEERR, __local_name, node[i]->element, node[i]->content);
+ return (OS_INVALID);
}
- else
- {
- merror(XML_VALUEERR,ARGV0,node[i]->element,node[i]->content);
- return(OS_INVALID);
+ } else if (strcmp(node[i]->element, xml_email_donotdelay) == 0) {
+ if ((Mail->gran_format[granto_size] != SMS_FORMAT) &&
+ (Mail->gran_format[granto_size] != DONOTGROUP)) {
+ Mail->gran_format[granto_size] = FORWARD_NOW;
}
- }
- else if(strcmp(node[i]->element, xml_email_donotdelay) == 0)
- {
- if((Mail->gran_format[granto_size -1] != SMS_FORMAT) &&
- (Mail->gran_format[granto_size -1] != DONOTGROUP))
- {
- Mail->gran_format[granto_size -1] = FORWARD_NOW;
+ } else if (strcmp(node[i]->element, xml_email_donotgroup) == 0) {
+ if (Mail->gran_format[granto_size] != SMS_FORMAT) {
+ Mail->gran_format[granto_size] = DONOTGROUP;
}
- }
- else if(strcmp(node[i]->element, xml_email_donotgroup) == 0)
- {
- if(Mail->gran_format[granto_size -1] != SMS_FORMAT)
- {
- Mail->gran_format[granto_size -1] = DONOTGROUP;
+ } else if (strcmp(node[i]->element, xml_email_location) == 0) {
+ os_calloc(1, sizeof(OSMatch), Mail->gran_location[granto_size]);
+ if (!OSMatch_Compile(node[i]->content,
+ Mail->gran_location[granto_size], 0)) {
+ merror(REGEX_COMPILE, __local_name, node[i]->content,
+ Mail->gran_location[granto_size]->error);
+ return (-1);
}
- }
- else if(strcmp(node[i]->element, xml_email_location) == 0)
- {
- os_calloc(1, sizeof(OSMatch),Mail->gran_location[granto_size -1]);
- if(!OSMatch_Compile(node[i]->content,
- Mail->gran_location[granto_size -1], 0))
- {
- merror(REGEX_COMPILE, ARGV0, node[i]->content,
- Mail->gran_location[granto_size -1]->error);
- return(-1);
- }
- }
- else if(strcmp(node[i]->element, xml_email_group) == 0)
- {
- os_calloc(1, sizeof(OSMatch),Mail->gran_group[granto_size -1]);
- if(!OSMatch_Compile(node[i]->content,
- Mail->gran_group[granto_size -1], 0))
- {
- merror(REGEX_COMPILE, ARGV0, node[i]->content,
- Mail->gran_group[granto_size -1]->error);
- return(-1);
+ } else if (strcmp(node[i]->element, xml_email_group) == 0) {
+ os_calloc(1, sizeof(OSMatch), Mail->gran_group[granto_size]);
+ if (!OSMatch_Compile(node[i]->content,
+ Mail->gran_group[granto_size], 0)) {
+ merror(REGEX_COMPILE, __local_name, node[i]->content,
+ Mail->gran_group[granto_size]->error);
+ return (-1);
}
- }
- else
- {
- merror(XML_INVELEM, ARGV0, node[i]->element);
- return(OS_INVALID);
+ } else {
+ merror(XML_INVELEM, __local_name, node[i]->element);
+ return (OS_INVALID);
}
i++;
}
/* We must have at least one entry set */
- if((Mail->gran_location[granto_size -1] == NULL &&
- Mail->gran_level[granto_size -1] == 0 &&
- Mail->gran_group[granto_size -1] == NULL &&
- Mail->gran_id[granto_size -1] == NULL &&
- Mail->gran_format[granto_size -1] == FULL_FORMAT) ||
- Mail->gran_to[granto_size -1] == NULL)
- {
- merror(XML_INV_GRAN_MAIL, ARGV0);
- return(OS_INVALID);
- }
-
- return(0);
-}
+ if ((Mail->gran_location[granto_size] == NULL &&
+ Mail->gran_level[granto_size] == 0 &&
+ Mail->gran_group[granto_size] == NULL &&
+ Mail->gran_id[granto_size] == NULL &&
+ Mail->gran_format[granto_size] == FULL_FORMAT) ||
+ Mail->gran_to[granto_size] == NULL) {
+ merror(XML_INV_GRAN_MAIL, __local_name);
+ return (OS_INVALID);
+ }
+ return (0);
+}
-/* EOF */