1 /* $OSSEC, client-config.c, v0.1, 2005/04/01, Daniel B. Cid$ */
3 /* Copyright (C) 2009 Trend Micro Inc.
6 * This program is a free software; you can redistribute it
7 * and/or modify it under the terms of the GNU General Public
8 * License (version 2) as published by the FSF - Free Software
15 #include "client-config.h"
16 #include "os_net/os_net.h"
19 int Read_Client(XML_NODE node, void *d1, void *d2)
24 char *xml_client_ip = "server-ip";
25 char *xml_client_hostname = "server-hostname";
26 char *xml_local_ip = "local_ip";
27 char *xml_client_port = "port";
28 char *xml_ar_disabled = "disable-active-response";
29 char *xml_notify_time = "notify_time";
30 char *xml_max_time_reconnect_try = "time-reconnect";
33 char *xml_profile_name = "config-profile";
39 logr->notify_time = 0;
40 logr->max_time_reconnect_try = 0;
46 merror(XML_ELEMNULL, ARGV0);
49 else if(!node[i]->content)
51 merror(XML_VALUENULL, ARGV0, node[i]->element);
54 /* Getting local ip. */
55 else if(strcmp(node[i]->element, xml_local_ip) == 0)
57 os_strdup(node[i]->content, logr->lip);
58 if(OS_IsValidIP(logr->lip, NULL) != 1)
60 merror(INVALID_IP, ARGV0, logr->lip);
64 /* Getting server ip */
65 else if(strcmp(node[i]->element,xml_client_ip) == 0)
72 while(logr->rip[ip_id])
77 os_realloc(logr->rip, (ip_id + 2) * sizeof(char*), logr->rip);
78 logr->rip[ip_id] = NULL;
79 logr->rip[ip_id +1] = NULL;
81 os_strdup(node[i]->content, logr->rip[ip_id]);
82 if(OS_IsValidIP(logr->rip[ip_id], NULL) != 1)
84 merror(INVALID_IP, ARGV0, logr->rip[ip_id]);
89 else if(strcmp(node[i]->element,xml_client_hostname) == 0)
96 /* Getting last ip. */
99 while(logr->rip[ip_id])
105 os_realloc(logr->rip, (ip_id + 2) * sizeof(char*),
109 s_ip = OS_GetHost(node[i]->content, 5);
112 merror("%s: WARN: Unable to get hostname for '%s'.",
113 ARGV0, node[i]->content);
114 merror(AG_INV_HOST, ARGV0, node[i]->content);
116 os_strdup("invalid_ip", s_ip);
121 snprintf(f_ip, 127, "%s/%s", node[i]->content, s_ip);
123 os_strdup(f_ip, logr->rip[ip_id]);
124 logr->rip[ip_id +1] = NULL;
130 else if(strcmp(node[i]->element,xml_client_port) == 0)
132 if(!OS_StrIsNum(node[i]->content))
134 merror(XML_VALUEERR,ARGV0,node[i]->element,node[i]->content);
137 logr->port = atoi(node[i]->content);
139 if(logr->port <= 0 || logr->port > 65535)
141 merror(PORT_ERROR, ARGV0, logr->port);
145 else if(strcmp(node[i]->element,xml_notify_time) == 0)
147 if(!OS_StrIsNum(node[i]->content))
149 merror(XML_VALUEERR,ARGV0,node[i]->element,node[i]->content);
152 logr->notify_time = atoi(node[i]->content);
154 else if(strcmp(node[i]->element,xml_max_time_reconnect_try) == 0)
156 if(!OS_StrIsNum(node[i]->content))
158 merror(XML_VALUEERR,ARGV0,node[i]->element,node[i]->content);
161 logr->max_time_reconnect_try = atoi(node[i]->content);
163 else if(strcmp(node[i]->element,xml_ar_disabled) == 0)
165 if(strcmp(node[i]->content, "yes") == 0)
167 else if(strcmp(node[i]->content, "no") == 0)
171 merror(XML_VALUEERR,ARGV0,node[i]->element,node[i]->content);
176 else if(strcmp(node[i]->element,xml_profile_name) == 0)
178 /* profile name can be anything hence no validation */
179 os_strdup(node[i]->content, logr->profile);
183 merror(XML_INVELEM, ARGV0, node[i]->element);