/****************************************************************************** * * * Function: get_serveractive_hosts * * * * Purpose: parse string like IP<:port>,[IPv6]<:port> * * * ******************************************************************************/ static void get_serveractive_hosts(char *active_hosts) { char *l = active_hosts, *r; int rc = SUCCEED; do { char *host = NULL; unsigned short port; if (NULL != (r = strchr(l, ','))) *r = '\0'; if (SUCCEED != parse_serveractive_element(l, &host, &port, (unsigned short)ZBX_DEFAULT_SERVER_PORT)) goto fail; rc = add_activechk_host(host, port); zbx_free(host); if (SUCCEED != rc) goto fail; if (NULL != r) { *r = ','; l = r + 1; } } while (NULL != r); return; fail: if (SUCCEED != rc) zbx_error("error parsing a \"ServerActive\" option: address \"%s\" specified more than once", l); else zbx_error("error parsing a \"ServerActive\" option: address \"%s\" is invalid", l); if (NULL != r) *r = ','; exit(EXIT_FAILURE); }
static void zbx_load_config(const char *config_file) { char *cfg_source_ip = NULL, *cfg_active_hosts = NULL, *cfg_hostname = NULL, *r = NULL; struct cfg_line cfg[] = { /* PARAMETER, VAR, TYPE, MANDATORY, MIN, MAX */ {"SourceIP", &cfg_source_ip, TYPE_STRING, PARM_OPT, 0, 0}, {"ServerActive", &cfg_active_hosts, TYPE_STRING, PARM_OPT, 0, 0}, {"Hostname", &cfg_hostname, TYPE_STRING, PARM_OPT, 0, 0}, {NULL} }; if (NULL != config_file) { /* do not complain about unknown parameters */ parse_cfg_file(config_file, cfg, ZBX_CFG_FILE_REQUIRED, ZBX_CFG_NOT_STRICT); if (NULL != cfg_source_ip) { if (NULL == CONFIG_SOURCE_IP) { CONFIG_SOURCE_IP = zbx_strdup(CONFIG_SOURCE_IP, cfg_source_ip); } zbx_free(cfg_source_ip); } if (NULL == ZABBIX_SERVER) { if (NULL != cfg_active_hosts && '\0' != *cfg_active_hosts) { unsigned short cfg_server_port = 0; if (NULL != (r = strchr(cfg_active_hosts, ','))) *r = '\0'; if (SUCCEED != parse_serveractive_element(cfg_active_hosts, &ZABBIX_SERVER, &cfg_server_port, 0)) { zbx_error("error parsing a \"ServerActive\" option: address \"%s\" is invalid", cfg_active_hosts); exit(EXIT_FAILURE); } if (0 == ZABBIX_SERVER_PORT && 0 != cfg_server_port) ZABBIX_SERVER_PORT = cfg_server_port; } } zbx_free(cfg_active_hosts); if (NULL != cfg_hostname) { if (NULL == ZABBIX_HOSTNAME) { ZABBIX_HOSTNAME = zbx_strdup(ZABBIX_HOSTNAME, cfg_hostname); } zbx_free(cfg_hostname); } } }