1 /* Copyright (C) 2009 Trend Micro Inc.
4 * This program is a free software; you can redistribute it
5 * and/or modify it under the terms of the GNU General Public
6 * License (version 2) as published by the FSF - Free Software
11 #include "client-config.h"
12 #include "os_net/os_net.h"
16 int Read_Client(XML_NODE node, void *d1, __attribute__((unused)) void *d2)
21 const char *xml_server_ip = "server-ip";
22 const char *xml_server_hostname = "server-hostname";
23 const char *xml_local_ip = "local_ip";
24 const char *xml_client_port = "port";
25 const char *xml_ar_disabled = "disable-active-response";
26 const char *xml_notify_time = "notify_time";
27 const char *xml_max_time_reconnect_try = "time-reconnect";
28 const char *xml_profile_name = "config-profile";
34 logr->notify_time = 0;
35 logr->max_time_reconnect_try = 0;
38 if (!node[i]->element) {
39 merror(XML_ELEMNULL, __local_name);
41 } else if (!node[i]->content) {
42 merror(XML_VALUENULL, __local_name, node[i]->element);
46 else if (strcmp(node[i]->element, xml_local_ip) == 0) {
47 os_strdup(node[i]->content, logr->lip);
48 if (OS_IsValidIP(logr->lip, NULL) != 1) {
49 merror(INVALID_IP, __local_name, logr->lip);
54 else if (strcmp(node[i]->element, xml_server_ip) == 0) {
55 unsigned int ip_id = 0;
59 while (logr->rip[ip_id]) {
63 os_realloc(logr->rip, (ip_id + 2) * sizeof(char *), logr->rip);
64 logr->rip[ip_id] = NULL;
65 logr->rip[ip_id + 1] = NULL;
67 os_strdup(node[i]->content, logr->rip[ip_id]);
68 if (OS_IsValidIP(logr->rip[ip_id], NULL) != 1) {
69 merror(INVALID_IP, __local_name, logr->rip[ip_id]);
73 } else if (strcmp(node[i]->element, xml_server_hostname) == 0) {
74 unsigned int ip_id = 0;
79 while (logr->rip[ip_id]) {
83 os_realloc(logr->rip, (ip_id + 2) * sizeof(char *), logr->rip);
84 s_ip = OS_GetHost(node[i]->content, 5);
86 merror("%s: WARN: '%s' does not resolve to an address.",
87 __local_name, node[i]->content);
88 merror(AG_INV_HOST, __local_name, node[i]->content);
92 os_strdup(node[i]->content, logr->rip[ip_id]);
93 logr->rip[ip_id + 1] = NULL;
95 } else if (strcmp(node[i]->element, xml_client_port) == 0) {
96 if (!OS_StrIsNum(node[i]->content)) {
97 merror(XML_VALUEERR, __local_name, node[i]->element, node[i]->content);
100 os_strdup(node[i]->content, logr->port);
101 portnum = atoi(node[i]->content);
103 if(portnum <= 0 || portnum > 65535)
105 merror(PORT_ERROR, __local_name, portnum);
108 } else if (strcmp(node[i]->element, xml_notify_time) == 0) {
109 if (!OS_StrIsNum(node[i]->content)) {
110 merror(XML_VALUEERR, __local_name, node[i]->element, node[i]->content);
113 logr->notify_time = atoi(node[i]->content);
114 } else if (strcmp(node[i]->element, xml_max_time_reconnect_try) == 0) {
115 if (!OS_StrIsNum(node[i]->content)) {
116 merror(XML_VALUEERR, __local_name, node[i]->element, node[i]->content);
119 logr->max_time_reconnect_try = atoi(node[i]->content);
120 } else if (strcmp(node[i]->element, xml_ar_disabled) == 0) {
121 if (strcmp(node[i]->content, "yes") == 0) {
123 } else if (strcmp(node[i]->content, "no") == 0) {
126 merror(XML_VALUEERR, __local_name, node[i]->element, node[i]->content);
129 } else if (strcmp(node[i]->element, xml_profile_name) == 0) {
130 /* Profile name can be anything hence no validation */
131 os_strdup(node[i]->content, logr->profile);
133 merror(XML_INVELEM, __local_name, node[i]->element);