/****************************************************************************** * * * Function: * * * * Purpose: * * * * Parameters: * * * * Return value: * * * * Comments: * * * ******************************************************************************/ static void ja_load_config(const char *config_file) { struct cfg_line cfg[] = { /* PARAMETER, VAR, TYPE, MANDATORY, MIN, MAX */ {"DBHost", &CONFIG_DBHOST, TYPE_STRING, PARM_OPT, 0, 0}, {"DBName", &CONFIG_DBNAME, TYPE_STRING, PARM_MAND, 0, 0}, {"DBSchema", &CONFIG_DBSCHEMA, TYPE_STRING, PARM_OPT, 0, 0}, {"DBUser", &CONFIG_DBUSER, TYPE_STRING, PARM_MAND, 0, 0}, {"DBPassword", &CONFIG_DBPASSWORD, TYPE_STRING, PARM_OPT, 0, 0}, {"DBSocket", &CONFIG_DBSOCKET, TYPE_STRING, PARM_OPT, 0, 0}, {"DBPort", &CONFIG_DBPORT, TYPE_INT, PARM_OPT, 1024, 65535}, {"DebugLevel", &CONFIG_LOG_LEVEL, TYPE_INT, PARM_OPT, 0, 4}, {"LogFileSize", &CONFIG_LOG_FILE_SIZE, TYPE_INT, PARM_OPT, 0, 1024}, {"JaLogFile", &CONFIG_LOG_FILE, TYPE_STRING, PARM_OPT, 0, 0}, {"JaPidFile", &CONFIG_PID_FILE, TYPE_STRING, PARM_OPT, 0, 0}, {"JaLoadShiftTime", &CONFIG_LOAD_SHIFT_TIME, TYPE_INT, PARM_OPT, 0, 1440}, {"JaRunShiftTime", &CONFIG_RUN_SHIFT_TIME, TYPE_INT, PARM_OPT, 0, 1440}, {"JaMonitorInterval", &CONFIG_JAMONITOR_INTERVAL, TYPE_INT, PARM_OPT, 1, 60}, {"JaSenderScript", &CONFIG_SENDER_SCRIPT, TYPE_STRING, PARM_OPT, 0, 0}, {"JaExecutionUser", &CONFIG_JA_EXECUTION_USER, TYPE_STRING, PARM_OPT, 0, 0}, {NULL} }; parse_cfg_file(config_file, cfg, ZBX_CFG_FILE_REQUIRED, ZBX_CFG_NOT_STRICT); if (NULL == CONFIG_DBHOST) { CONFIG_DBHOST = zbx_strdup(CONFIG_DBHOST, "localhost"); } if (NULL == CONFIG_PID_FILE) { CONFIG_PID_FILE = zbx_strdup(CONFIG_PID_FILE, "/tmp/jobarg_monitor.pid"); } }
/********************************************************************* * zbx_module_load_config * *********************************************************************/ void zbx_module_load_config(void) { char *MODULE_CONFIG_FILE = NULL; static struct cfg_line module_cfg[] = { /* PARAMETER, VAR, TYPE, MANDATORY, MIN, MAX */ {"Param1", &CONFIG_PARAM1, TYPE_INT, PARM_OPT, 1, 100}, {"Param2", &CONFIG_PARAM2, TYPE_STRING, PARM_MAND, 0, 0}, {NULL} }; MODULE_CONFIG_FILE = zbx_dsprintf(MODULE_CONFIG_FILE, "%s/%s", CONFIG_LOAD_MODULE_PATH, MODULE_CONFIG_FILE_NAME); zabbix_log(LOG_LEVEL_DEBUG, "[%s] load conf:%s", MODULE_NAME, MODULE_CONFIG_FILE); parse_cfg_file(MODULE_CONFIG_FILE, module_cfg, ZBX_CFG_FILE_REQUIRED, ZBX_CFG_STRICT); zbx_free(MODULE_CONFIG_FILE); zbx_module_set_defaults(); }
/****************************************************************************** * * * Function: zbx_load_config * * * * Purpose: load configuration from config file * * * * Parameters: optional - do not produce error if config file missing * * * * Return value: * * * * Author: Vladimir Levijev * * * * Comments: * * * ******************************************************************************/ static void zbx_load_config(int optional) { struct cfg_line cfg[] = { /* PARAMETER, VAR, TYPE, MANDATORY, MIN, MAX */ {"Server", &CONFIG_HOSTS_ALLOWED, TYPE_STRING, PARM_MAND, 0, 0}, {"Timeout", &CONFIG_TIMEOUT, TYPE_INT, PARM_OPT, 1, 30}, {"UnsafeUserParameters", &CONFIG_UNSAFE_USER_PARAMETERS, TYPE_INT, PARM_OPT, 0, 1}, {"Alias", &CONFIG_ALIASES, TYPE_MULTISTRING, PARM_OPT, 0, 0}, {"UserParameter", &CONFIG_USER_PARAMETERS, TYPE_MULTISTRING, PARM_OPT, 0, 0}, {NULL} }; /* initialize multistrings */ zbx_strarr_init(&CONFIG_ALIASES); zbx_strarr_init(&CONFIG_USER_PARAMETERS); parse_cfg_file(CONFIG_FILE, cfg, optional, ZBX_CFG_STRICT); }
int imx8image_copy_image(int outfd, struct image_tool_params *mparams) { image_t *img_sp = param_stack; /* * SECO FW is a container image, this is to calculate the * 2nd container offset. */ fprintf(stdout, "parsing %s\n", mparams->imagename); parse_cfg_file(img_sp, mparams->imagename); if (sector_size == 0) { fprintf(stderr, "Wrong sector size\n"); exit(EXIT_FAILURE); } fprintf(stdout, "CONTAINER Sector size:\t%08x\n", sector_size); fprintf(stdout, "CONTAINER FUSE VERSION:\t0x%02x\n", fuse_version); fprintf(stdout, "CONTAINER SW VERSION:\t0x%04x\n", sw_version); build_container(soc, sector_size, emmc_fastboot, img_sp, false, fuse_version, sw_version, outfd); return 0; }
/****************************************************************************** * * * Function: zbx_module_nginx_load_config * * * * Purpose: load configuration from config file * * * * Parameters: requirement - produce error if config file missing or not * * * ******************************************************************************/ int zbx_module_nginx_load_config(int requirement) { int ret = SYSINFO_RET_FAIL; char *config = NULL; struct cfg_line cfg[] = { /* PARAMETER, VAR, TYPE, MANDATORY, MIN, MAX */ {"NginxHost", &CONFIG_NGINX_HOST, TYPE_STRING, PARM_OPT, 0, 16}, {"NginxPort", &CONFIG_NGINX_PORT, TYPE_INT, PARM_OPT, 0, 32767}, {"NginxDomain", &CONFIG_NGINX_DOMAIN, TYPE_STRING, PARM_OPT, 0, 1024}, {"NginxStatusUri", &CONFIG_NGINX_STATUS_URI, TYPE_STRING, PARM_OPT, 0, 1024}, {NULL} }; parse_cfg_file(ZBX_MODULE_NGINX_CONFIG_FILE, cfg, requirement, ZBX_CFG_STRICT); /* for dev zabbix_log(LOG_LEVEL_INFORMATION, "module [nginx], func [zbx_module_nginx_load_config], parse config NginxHost:[%s] NginxPort:[%d] NginxStatusUri:[%s]", CONFIG_NGINX_HOST, CONFIG_NGINX_PORT, CONFIG_NGINX_STATUS_URI); */ ret = SYSINFO_RET_OK; }
/****************************************************************************** * * * Function: zbx_module_redis_load_config * * * * Purpose: load configuration from config file * * * * Parameters: requirement - produce error if config file missing or not * * * ******************************************************************************/ int zbx_module_redis_load_config(int requirement) { int ret = SYSINFO_RET_FAIL; struct cfg_line cfg[] = { /* PARAMETER, VAR, TYPE, MANDATORY, MIN, MAX */ {"redis_inst_ports", &CONFIG_REDIS_INSTANCE_PORT, TYPE_STRING_LIST, PARM_OPT, 0, 0}, {NULL} }; parse_cfg_file(ZBX_MODULE_REDIS_CONFIG_FILE, cfg, requirement, ZBX_CFG_STRICT); if (ZBX_CFG_FILE_REQUIRED == requirement && NULL == CONFIG_REDIS_INSTANCE_PORT) { zabbix_log(LOG_LEVEL_WARNING, "Parameter redis_inst_ports must be defined, example: 6379, 192.168.9.9:6380, 6381"); return ret; } else { ret = SYSINFO_RET_OK; } return ret; }
static void ublimage_set_header(void *ptr, struct stat *sbuf, int ifd, struct image_tool_params *params) { struct ubl_header *ublhdr = (struct ubl_header *)ptr; /* Parse configuration file */ parse_cfg_file(ublhdr, params->imagename); }
static void imximage_set_header(void *ptr, struct stat *sbuf, int ifd, struct image_tool_params *params) { struct imx_header *imxhdr = (struct imx_header *)ptr; uint32_t dcd_len; uint32_t header_size; /* * In order to not change the old imx cfg file * by adding VERSION command into it, here need * set up function ptr group to V1 by default. */ imximage_version = IMXIMAGE_V1; /* Be able to detect if the cfg file has no BOOT_FROM tag */ imximage_ivt_offset = FLASH_OFFSET_UNDEFINED; imximage_csf_size = 0; set_hdr_func(); /* Parse dcd configuration file */ dcd_len = parse_cfg_file(imxhdr, params->imagename); if (imximage_version == IMXIMAGE_V1) header_size = sizeof(flash_header_v1_t); else { header_size = sizeof(flash_header_v2_t) + sizeof(boot_data_t); if (!plugin_image) header_size += sizeof(dcd_v2_t); else header_size += MAX_PLUGIN_CODE_SIZE; } if (imximage_init_loadsize < imximage_ivt_offset + header_size) imximage_init_loadsize = imximage_ivt_offset + header_size; /* Set the imx header */ (*set_imx_hdr)(imxhdr, dcd_len, params->ep, imximage_ivt_offset); /* * ROM bug alert * * MX53 only loads 512 byte multiples in case of SD boot. * MX53 only loads NAND page multiples in case of NAND boot and * supports up to 4096 byte large pages, thus align to 4096. * * The remaining fraction of a block bytes would not be loaded! */ *header_size_ptr = ROUND((sbuf->st_size + imximage_ivt_offset), 4096); if (csf_ptr && imximage_csf_size) { *csf_ptr = params->ep - imximage_init_loadsize + *header_size_ptr; *header_size_ptr += imximage_csf_size; } }
int main (int argc, char** argv) { #ifdef HAVE_MYSQL DB_RESULT result; DB_ROW row; zbx_uint64_t id; char* value; hfs_function_value_t fun_val; int index = 0; static struct cfg_line cfg[] = { {"DBHost",&CONFIG_DBHOST,0,TYPE_STRING,PARM_OPT,0,0}, {"DBName",&CONFIG_DBNAME,0,TYPE_STRING,PARM_MAND,0,0}, {"DBUser",&CONFIG_DBUSER,0,TYPE_STRING,PARM_OPT,0,0}, {"DBPassword",&CONFIG_DBPASSWORD,0,TYPE_STRING,PARM_OPT,0,0}, {"DBSocket",&CONFIG_DBSOCKET,0,TYPE_STRING,PARM_OPT,0,0}, {"DBPort",&CONFIG_DBPORT,0,TYPE_INT,PARM_OPT,1024,65535}, {"ServerHistoryFSPath",&CONFIG_HFS_PATH,0,TYPE_STRING,PARM_OPT,0,0}, {"ServerSite",&CONFIG_SERVER_SITE,0,TYPE_STRING,PARM_OPT,0,0}, {0} }; /* read config file */ parse_cfg_file ("/etc/zabbix/zabbix_server.conf", cfg); /* connect to database */ DBconnect (ZBX_DB_CONNECT_EXIT); /* select all lastvalues from functions */ result = DBselect ("select functionid, lastvalue from functions"); /* update them in HFS */ while (row = DBfetch (result)) { ZBX_STR2UINT64 (id, row[0]); value = row[1]; if (HFS_convert_function_str2val (value, &fun_val)) if (HFS_save_function_value (CONFIG_HFS_PATH, CONFIG_SERVER_SITE, id, &fun_val)) printf ("Converted item %d of %lld. ID=%lld, val='%s', type=%d\n", index++, result->row_count, id, value, fun_val.type); else printf ("Item %d save failed. ID=%lld, val=%s\n", index++, id, value); else printf ("Item %d convert failed. ID=%lld, val=%s\n", index++, id, value); } DBclose (); #else printf ("This utility have no meaning on ztops\n"); #endif return 0; }
/****************************************************************************** * * * Function: zbx_module_load_config * * * * Purpose: * * * * Return value: * * * * * * Comment: * * * ******************************************************************************/ static void zbx_module_load_config() { char conf_file[MAX_STRING_LEN]; static struct cfg_line cfg[] = { {"UniFiProxyServer", &UNIFI_PROXY_SERVER, TYPE_STRING, PARM_OPT, 0, 0}, {"UniFiProxyPort", &UNIFI_PROXY_PORT, TYPE_UINT64, PARM_OPT, 0, 0}, }; zbx_snprintf(conf_file, MAX_STRING_LEN, "%s/%s", CONFIG_LOAD_MODULE_PATH, DEFAULT_UNIFI_PROXY_CONFIG_FILE); zabbix_log(LOG_LEVEL_DEBUG, "%s: load & parse config stage. Config file is %s", ZBX_MODULE_NAME, conf_file); parse_cfg_file(conf_file, cfg, ZBX_CFG_FILE_OPTIONAL, ZBX_CFG_STRICT); }
/****************************************************************************** * * * Function: zbx_load_config * * * * Purpose: parse config file and update configuration parameters * * * * Parameters: * * * * Return value: * * * * Author: Alexei Vladishev * * * * Comments: will terminate process if parsing fails * * * ******************************************************************************/ static void zbx_load_config() { static struct cfg_line cfg[] = { /* PARAMETER, VAR, TYPE, MANDATORY, MIN, MAX */ {"TmpDir", &CONFIG_TMPDIR, TYPE_STRING, PARM_OPT, 0, 0}, {"DBHost", &CONFIG_DBHOST, TYPE_STRING, PARM_OPT, 0, 0}, {"DBName", &CONFIG_DBNAME, TYPE_STRING, PARM_MAND, 0, 0}, {"DBSchema", &CONFIG_DBSCHEMA, TYPE_STRING, PARM_OPT, 0, 0}, {"DBUser", &CONFIG_DBUSER, TYPE_STRING, PARM_MAND, 0, 0}, {"DBPassword", &CONFIG_DBPASSWORD, TYPE_STRING, PARM_OPT, 0, 0}, {"DBSocket", &CONFIG_DBSOCKET, TYPE_STRING, PARM_OPT, 0, 0}, {"DBPort", &CONFIG_DBPORT, TYPE_INT, PARM_OPT, 1024, 65535}, {"LogSlowQueries", &CONFIG_LOG_SLOW_QUERIES, TYPE_INT, PARM_OPT, 0, 3600000}, {"ListenIP", &CONFIG_LISTEN_IP, TYPE_STRING, PARM_OPT, 0, 0}, {"SourceIP", &CONFIG_SOURCE_IP, TYPE_STRING, PARM_OPT, 0, 0}, {"Timeout", &CONFIG_TIMEOUT, TYPE_INT, PARM_OPT, 1, 300}, {"DebugLevel", &CONFIG_LOG_LEVEL, TYPE_INT, PARM_OPT, 0, 4}, {"LogFileSize", &CONFIG_LOG_FILE_SIZE, TYPE_INT, PARM_OPT, 0, 1024}, {"JaLogFile", &CONFIG_LOG_FILE, TYPE_STRING, PARM_OPT, 0, 0}, {"JaPidFile", &CONFIG_PID_FILE, TYPE_STRING, PARM_OPT, 0, 0}, {"JaSelfmonInterval", &CONFIG_JASELFMON_INTERVAL, TYPE_INT, PARM_OPT, 1, 9999999}, {"JaLoaderInterval", &CONFIG_JALOADER_INTERVAL, TYPE_INT, PARM_OPT, 1, 9999999}, {"JaBootInterval", &CONFIG_JABOOT_INTERVAL, TYPE_INT, PARM_OPT, 1, 9999999}, {"JaJobnetInterval", &CONFIG_JAJOBNET_INTERVAL, TYPE_INT, PARM_OPT, 1, 9999999}, {"JaJobInterval", &CONFIG_JAJOB_INTERVAL, TYPE_INT, PARM_OPT, 1, 9999999}, {"JaJobTimeout", &CONFIG_JA_JOB_TIMEOUT, TYPE_INT, PARM_OPT, 0, 600}, {"JaRunInterval", &CONFIG_JARUN_INTERVAL, TYPE_INT, PARM_OPT, 1, 9999999}, {"JaStartTrappers", &CONFIG_JATRAPPER_FORKS, TYPE_INT, PARM_OPT, 0, 1000}, {"JaTrapperListenPort", &CONFIG_LISTEN_PORT, TYPE_INT, PARM_OPT, 1, 65535}, {"JaAgentListenPort", &CONFIG_AGENT_LISTEN_PORT, TYPE_INT, PARM_OPT, 1, 65535}, {"JaExtjobPath", &CONFIG_EXTJOB_PATH, TYPE_STRING, PARM_MAND, 0, 0}, {"JaErrorCmdPath", &CONFIG_ERROR_CMD_PATH, TYPE_STRING, PARM_MAND, 0, 0}, {"JaLogMessageFile", &CONFIG_JA_LOG_MESSAGE_FILE, TYPE_STRING, PARM_MAND, 0, 0}, {"JaFcopyTimeout", &CONFIG_FCOPY_TIMEOUT, TYPE_INT, PARM_OPT, 1, 3600}, {"JaZabbixVersion", &CONFIG_ZABBIX_VERSION, TYPE_INT, PARM_OPT, 1, 3}, {"JaLaunchInterval", &CONFIG_JALAUNCH_INTERVAL, TYPE_INT, PARM_OPT, 1, 9999999}, {"JaZabbixMessageFile", &CONFIG_JA_ZBX_MESSAGE_FILE, TYPE_STRING, PARM_MAND, 0, 0}, {"JaExecutionUser", &CONFIG_JA_EXECUTION_USER, TYPE_STRING, PARM_OPT, 0, 0}, {"JaMsgsndInterval", &CONFIG_JAMSGSND_INTERVAL, TYPE_INT, PARM_OPT, 1, 9999999}, {"JaExtjobWaitTime", &CONFIG_EXTJOB_WAITTIME, TYPE_INT, PARM_OPT, 0, 9999999}, {NULL} }; parse_cfg_file(CONFIG_FILE, cfg, ZBX_CFG_FILE_REQUIRED, ZBX_CFG_NOT_STRICT); zbx_set_defaults(); }
/* * Function: * zbx_module_load_config() * * Purpose: * Parses the vPoller module configuration file */ static void zbx_module_load_config(void) { zabbix_log(LOG_LEVEL_INFORMATION, "Loading vPoller module configuration file %s", MODULE_CONFIG_FILE); /* * The cfg_line entries below are in the following format/order: * * PARAMETER, VAR, TYPE, MANDATORY, MIN, MAX */ static struct cfg_line cfg[] = { { "vPollerTimeout", &CONFIG_VPOLLER_TIMEOUT, TYPE_INT, PARM_OPT, 1000, 60000 }, { "vPollerRetries", &CONFIG_VPOLLER_RETRIES, TYPE_INT, PARM_OPT, 1, 100 }, { "vPollerProxy", &CONFIG_VPOLLER_PROXY, TYPE_STRING, PARM_OPT, 0, 0 }, { NULL }, }; parse_cfg_file(MODULE_CONFIG_FILE, cfg, ZBX_CFG_FILE_OPTIONAL, ZBX_CFG_STRICT); }
void load_user_parameters(void) { struct cfg_line cfg[]= { /* PARAMETER, VAR, FUNC, TYPE(0i,1s), MANDATORY,MIN,MAX */ {"EnableRemoteCommands",&CONFIG_ENABLE_REMOTE_COMMANDS, 0,TYPE_INT, PARM_OPT,0,1}, {"Alias", 0, &add_alias_from_config, TYPE_STRING,PARM_OPT,0,0}, {"UserParameter", 0, &add_parameter, 0, 0, 0, 0}, #if defined(_WINDOWS) {"PerfCounter", 0, &add_perfs_from_config, TYPE_STRING,PARM_OPT,0,0}, #endif /* _WINDOWS */ #if defined(WITH_PLUGINS) {"Plugin", 0, &add_plugin, TYPE_STRING,PARM_OPT,0,0}, #endif /* ZABBIX_DAEMON */ {0} }; parse_cfg_file(CONFIG_FILE,cfg); }
static void zbx_load_config(const char *config_file) { char *cfg_source_ip = NULL, *cfg_server = NULL, *cfg_hostname = NULL, *c = NULL; int cfg_server_port = 0; struct cfg_line cfg[] = { /* PARAMETER, VAR, TYPE, MANDATORY, MIN, MAX */ {"SourceIP", &cfg_source_ip, TYPE_STRING, PARM_OPT, 0, 0}, {"Server", &cfg_server, TYPE_STRING, PARM_OPT, 0, 0}, {"ServerPort", &cfg_server_port, TYPE_INT, PARM_OPT, MIN_ZABBIX_PORT, MAX_ZABBIX_PORT}, {"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 != cfg_server) { if (NULL == ZABBIX_SERVER) { /* get only first server */ if (NULL != (c = strchr(cfg_server, ','))) { *c = '\0'; } ZABBIX_SERVER = zbx_strdup(ZABBIX_SERVER, cfg_server); } zbx_free(cfg_server); } if (0 == ZABBIX_SERVER_PORT && 0 != cfg_server_port) { ZABBIX_SERVER_PORT = cfg_server_port; } if (NULL != cfg_hostname) { if (NULL == ZABBIX_HOSTNAME) { ZABBIX_HOSTNAME = zbx_strdup(ZABBIX_HOSTNAME, cfg_hostname); } zbx_free(cfg_hostname); } } }
static int imximage_generate(struct image_tool_params *params, struct image_type_params *tparams) { struct imx_header *imxhdr; size_t alloc_len; struct stat sbuf; char *datafile = params->datafile; uint32_t pad_len, header_size; memset(&imximage_header, 0, sizeof(imximage_header)); /* * In order to not change the old imx cfg file * by adding VERSION command into it, here need * set up function ptr group to V1 by default. */ imximage_version = IMXIMAGE_V1; /* Be able to detect if the cfg file has no BOOT_FROM tag */ imximage_ivt_offset = FLASH_OFFSET_UNDEFINED; imximage_csf_size = 0; set_hdr_func(); /* Parse dcd configuration file */ parse_cfg_file(&imximage_header, params->imagename); if (imximage_version == IMXIMAGE_V1) header_size = sizeof(imx_header_v1_t); else { header_size = sizeof(flash_header_v2_t) + sizeof(boot_data_t); if (!plugin_image) header_size += sizeof(dcd_v2_t); else header_size += MAX_PLUGIN_CODE_SIZE; } if (imximage_init_loadsize < imximage_ivt_offset + header_size) imximage_init_loadsize = imximage_ivt_offset + header_size; alloc_len = imximage_init_loadsize - imximage_ivt_offset; if (alloc_len < header_size) { fprintf(stderr, "%s: header error\n", params->cmdname); exit(EXIT_FAILURE); } imxhdr = malloc(alloc_len); if (!imxhdr) { fprintf(stderr, "%s: malloc return failure: %s\n", params->cmdname, strerror(errno)); exit(EXIT_FAILURE); } memset(imxhdr, 0, alloc_len); tparams->header_size = alloc_len; tparams->hdr = imxhdr; /* determine data image file length */ if (stat(datafile, &sbuf) < 0) { fprintf(stderr, "%s: Can't stat %s: %s\n", params->cmdname, datafile, strerror(errno)); exit(EXIT_FAILURE); } pad_len = ROUND(sbuf.st_size, 4096) - sbuf.st_size; return pad_len; }
/****************************************************************************** * * * Function: zbx_load_config * * * * Purpose: load configuration from config file * * * * Parameters: requirement - produce error if config file missing or not * * * ******************************************************************************/ static void zbx_load_config(int requirement) { char *active_hosts = NULL; struct cfg_line cfg[] = { /* PARAMETER, VAR, TYPE, MANDATORY, MIN, MAX */ {"Server", &CONFIG_HOSTS_ALLOWED, TYPE_STRING_LIST, PARM_OPT, 0, 0}, {"ServerActive", &active_hosts, TYPE_STRING_LIST, PARM_OPT, 0, 0}, {"Hostname", &CONFIG_HOSTNAME, TYPE_STRING, PARM_OPT, 0, 0}, {"HostnameItem", &CONFIG_HOSTNAME_ITEM, TYPE_STRING, PARM_OPT, 0, 0}, {"HostMetadata", &CONFIG_HOST_METADATA, TYPE_STRING, PARM_OPT, 0, 0}, {"HostMetadataItem", &CONFIG_HOST_METADATA_ITEM, TYPE_STRING, PARM_OPT, 0, 0}, {"BufferSize", &CONFIG_BUFFER_SIZE, TYPE_INT, PARM_OPT, 2, 65535}, {"BufferSend", &CONFIG_BUFFER_SEND, TYPE_INT, PARM_OPT, 1, SEC_PER_HOUR}, #ifdef USE_PID_FILE {"PidFile", &CONFIG_PID_FILE, TYPE_STRING, PARM_OPT, 0, 0}, #endif {"LogFile", &CONFIG_LOG_FILE, TYPE_STRING, PARM_OPT, 0, 0}, {"LogFileSize", &CONFIG_LOG_FILE_SIZE, TYPE_INT, PARM_OPT, 0, 1024}, {"Timeout", &CONFIG_TIMEOUT, TYPE_INT, PARM_OPT, 1, 30}, {"ListenPort", &CONFIG_LISTEN_PORT, TYPE_INT, PARM_OPT, 1024, 32767}, {"ListenIP", &CONFIG_LISTEN_IP, TYPE_STRING_LIST, PARM_OPT, 0, 0}, {"SourceIP", &CONFIG_SOURCE_IP, TYPE_STRING, PARM_OPT, 0, 0}, {"DebugLevel", &CONFIG_LOG_LEVEL, TYPE_INT, PARM_OPT, 0, 4}, {"StartAgents", &CONFIG_PASSIVE_FORKS, TYPE_INT, PARM_OPT, 0, 100}, {"RefreshActiveChecks", &CONFIG_REFRESH_ACTIVE_CHECKS, TYPE_INT, PARM_OPT, SEC_PER_MIN, SEC_PER_HOUR}, {"MaxLinesPerSecond", &CONFIG_MAX_LINES_PER_SECOND, TYPE_INT, PARM_OPT, 1, 1000}, {"AllowRoot", &CONFIG_ALLOW_ROOT, TYPE_INT, PARM_OPT, 0, 1}, {"EnableRemoteCommands", &CONFIG_ENABLE_REMOTE_COMMANDS, TYPE_INT, PARM_OPT, 0, 1}, {"LogRemoteCommands", &CONFIG_LOG_REMOTE_COMMANDS, TYPE_INT, PARM_OPT, 0, 1}, {"UnsafeUserParameters", &CONFIG_UNSAFE_USER_PARAMETERS, TYPE_INT, PARM_OPT, 0, 1}, {"Alias", &CONFIG_ALIASES, TYPE_MULTISTRING, PARM_OPT, 0, 0}, {"UserParameter", &CONFIG_USER_PARAMETERS, TYPE_MULTISTRING, PARM_OPT, 0, 0}, #ifndef _WINDOWS {"LoadModulePath", &CONFIG_LOAD_MODULE_PATH, TYPE_STRING, PARM_OPT, 0, 0}, {"LoadModule", &CONFIG_LOAD_MODULE, TYPE_MULTISTRING, PARM_OPT, 0, 0}, #endif #ifdef _WINDOWS {"PerfCounter", &CONFIG_PERF_COUNTERS, TYPE_MULTISTRING, PARM_OPT, 0, 0}, #endif {NULL} }; /* initialize multistrings */ zbx_strarr_init(&CONFIG_ALIASES); zbx_strarr_init(&CONFIG_USER_PARAMETERS); #ifndef _WINDOWS zbx_strarr_init(&CONFIG_LOAD_MODULE); #endif #ifdef _WINDOWS zbx_strarr_init(&CONFIG_PERF_COUNTERS); #endif parse_cfg_file(CONFIG_FILE, cfg, requirement, ZBX_CFG_STRICT); set_defaults(); if (ZBX_CFG_FILE_REQUIRED == requirement && NULL == CONFIG_HOSTS_ALLOWED && 0 != CONFIG_PASSIVE_FORKS) { zbx_error("StartAgents is not 0, parameter Server must be defined"); exit(EXIT_FAILURE); } if (NULL != active_hosts && '\0' != *active_hosts) get_serveractive_hosts(active_hosts); zbx_free(active_hosts); if (ZBX_CFG_FILE_REQUIRED == requirement) zbx_validate_config(); }
static void* iep_process_thread(void *param) { int i, cnt = 0; mem_region_t *mr = (mem_region_t*)param; uint32_t phy_src, phy_reg, phy_dst; int len_src, len_reg, len_dst; uint8_t *vir_reg, *vir_src, *vir_dst; iep_img src; iep_img dst; int datalen = 0; len_reg = mr->len_reg; len_src = mr->len_src; len_dst = mr->len_dst; phy_reg = mr->phy_reg; phy_src = mr->phy_src; phy_dst = mr->phy_dst; vir_reg = mr->vir_reg; vir_src = mr->vir_src; vir_dst = mr->vir_dst; iep_interface *api = iep_interface::create_new(); FILE *srcfile = fopen(mr->src_url, "rb"); FILE *dstfile = fopen(mr->dst_url, "wb"); switch (mr->src_fmt) { case IEP_FORMAT_ABGR_8888: case IEP_FORMAT_ARGB_8888: case IEP_FORMAT_BGRA_8888: case IEP_FORMAT_RGBA_8888: datalen = mr->src_w * mr->src_h * 4; break; case IEP_FORMAT_BGR_565: case IEP_FORMAT_RGB_565: case IEP_FORMAT_YCbCr_422_P: case IEP_FORMAT_YCbCr_422_SP: case IEP_FORMAT_YCrCb_422_P: case IEP_FORMAT_YCrCb_422_SP: datalen = mr->src_w * mr->src_h * 2; src.v_addr = phy_src + mr->src_w * mr->src_h + mr->src_w * mr->src_h / 2; break; case IEP_FORMAT_YCbCr_420_P: case IEP_FORMAT_YCbCr_420_SP: case IEP_FORMAT_YCrCb_420_P: case IEP_FORMAT_YCrCb_420_SP: datalen = mr->src_w * mr->src_h * 3 / 2; src.v_addr = phy_src + mr->src_w * mr->src_h + mr->src_w * mr->src_h / 4; break; default: ; } ALOGD("%s %d\n", __func__, __LINE__); fread(vir_src, 1, datalen, srcfile); int64_t intime = GetTime(); src.act_w = mr->src_w; src.act_h = mr->src_h; src.x_off = 0; src.y_off = 0; src.vir_w = mr->src_w; src.vir_h = mr->src_h; src.format = mr->src_fmt; src.mem_addr = phy_src; src.uv_addr = phy_src + mr->src_w * mr->src_h; switch (mr->dst_fmt) { case IEP_FORMAT_ABGR_8888: case IEP_FORMAT_ARGB_8888: case IEP_FORMAT_BGRA_8888: case IEP_FORMAT_RGBA_8888: datalen = mr->dst_w * mr->dst_h * 4; break; case IEP_FORMAT_BGR_565: case IEP_FORMAT_RGB_565: case IEP_FORMAT_YCbCr_422_P: case IEP_FORMAT_YCbCr_422_SP: case IEP_FORMAT_YCrCb_422_P: case IEP_FORMAT_YCrCb_422_SP: datalen = mr->dst_w * mr->dst_h * 2; dst.v_addr = phy_dst + mr->dst_w * mr->dst_h + mr->dst_w * mr->dst_h / 2; break; case IEP_FORMAT_YCbCr_420_P: case IEP_FORMAT_YCbCr_420_SP: case IEP_FORMAT_YCrCb_420_P: case IEP_FORMAT_YCrCb_420_SP: datalen = mr->dst_w * mr->dst_h * 3 / 2; dst.v_addr = phy_dst + mr->dst_w * mr->dst_h + mr->dst_w * mr->dst_h / 4; break; default: ; } dst.act_w = mr->dst_w; dst.act_h = mr->dst_h; dst.x_off = 0; dst.y_off = 0; dst.vir_w = mr->dst_w; dst.vir_h = mr->dst_h; dst.format = mr->dst_fmt; dst.mem_addr = phy_dst; dst.uv_addr = phy_dst + mr->dst_w * mr->dst_h; api->init(&src, &dst); switch (mr->testcase) { case TEST_CASE_DENOISE: { FILE *cfgfile = fopen(mr->cfg_url, "r"); if (cfgfile == NULL) { api->config_yuv_denoise(); } else { ; } } break; case TEST_CASE_YUVENHANCE: { FILE *cfgfile = fopen(mr->cfg_url, "r"); if (cfgfile == NULL) { api->config_yuv_enh(); } else { iep_param_YUV_color_enhance_t yuvparam; parse_cfg_file(cfgfile, &yuvparam); api->config_yuv_enh(&yuvparam); fclose(cfgfile); } } break; case TEST_CASE_RGBENHANCE: { FILE *cfgfile = fopen(mr->cfg_url, "r"); if (cfgfile == NULL) { api->config_color_enh(); } else { iep_param_RGB_color_enhance_t rgbparam; parse_cfg_file(cfgfile, &rgbparam); api->config_color_enh(&rgbparam); fclose(cfgfile); } } break; case TEST_CASE_DEINTERLACE: { iep_img src1; iep_img dst1; iep_param_yuv_deinterlace_t yuv_dil; fread(vir_src + datalen, 1, datalen, srcfile); src1.act_w = mr->src_w; src1.act_h = mr->src_h; src1.x_off = 0; src1.y_off = 0; src1.vir_w = mr->src_w; src1.vir_h = mr->src_h; src1.format = mr->src_fmt; src1.mem_addr = phy_src + datalen; src1.uv_addr = phy_src + datalen + mr->src_w * mr->src_h; dst1.act_w = mr->dst_w; dst1.act_h = mr->dst_h; dst1.x_off = 0; dst1.y_off = 0; dst1.vir_w = mr->dst_w; dst1.vir_h = mr->dst_h; dst1.format = mr->dst_fmt; dst1.mem_addr = phy_dst + datalen; dst1.uv_addr = phy_dst + datalen + mr->dst_w * mr->dst_h; FILE *cfgfile = fopen(mr->cfg_url, "r"); if (cfgfile == NULL) { yuv_dil.high_freq_en = 1; yuv_dil.dil_mode = IEP_DEINTERLACE_MODE_I4O1; yuv_dil.field_order = FIELD_ORDER_BOTTOM_FIRST; yuv_dil.dil_ei_mode = 0; yuv_dil.dil_ei_smooth = 0; yuv_dil.dil_ei_sel = 0; yuv_dil.dil_ei_radius = 0; } else { parse_cfg_file(cfgfile, &yuv_dil); fclose(cfgfile); } api->config_yuv_deinterlace(&yuv_dil, &src1, &dst1); } break; default: ; } #if 0 iep_param_direct_path_interface_t dpi; dpi.enable = 1; dpi.off_x = 0; dpi.off_y = 0; dpi.width = mr->dst_w; dpi.height = mr->dst_h; dpi.layer = 1; if (0 > api->config_direct_lcdc_path(&dpi)) { ALOGE("Failure to Configure DIRECT LCDC PATH\n"); } #endif if (0 == api->run_sync()) { ALOGD("%d success\n", getpid()); } else { ALOGE("%d failure\n", getpid()); } ALOGD("%s consume %lld\n", __func__, GetTime() - intime); fwrite(vir_dst, 1, datalen, dstfile); fclose(srcfile); fclose(dstfile); iep_interface::reclaim(api); return NULL; }
/****************************************************************************** * * * Function: zbx_load_config * * * * Purpose: parse config file and update configuration parameters * * * * Author: Alexei Vladishev * * * * Comments: will terminate process if parsing fails * * * ******************************************************************************/ static void zbx_load_config() { static struct cfg_line cfg[] = { /* PARAMETER, VAR, TYPE, MANDATORY, MIN, MAX */ {"ProxyMode", &CONFIG_PROXYMODE, TYPE_INT, PARM_OPT, ZBX_PROXYMODE_ACTIVE, ZBX_PROXYMODE_PASSIVE}, {"Server", &CONFIG_SERVER, TYPE_STRING, PARM_OPT, 0, 0}, {"ServerPort", &CONFIG_SERVER_PORT, TYPE_INT, PARM_OPT, 1024, 32767}, {"Hostname", &CONFIG_HOSTNAME, TYPE_STRING, PARM_OPT, 0, 0}, {"HostnameItem", &CONFIG_HOSTNAME_ITEM, TYPE_STRING, PARM_OPT, 0, 0}, {"StartDBSyncers", &CONFIG_HISTSYNCER_FORKS, TYPE_INT, PARM_OPT, 1, 100}, {"StartDiscoverers", &CONFIG_DISCOVERER_FORKS, TYPE_INT, PARM_OPT, 0, 250}, {"StartHTTPPollers", &CONFIG_HTTPPOLLER_FORKS, TYPE_INT, PARM_OPT, 0, 1000}, {"StartPingers", &CONFIG_PINGER_FORKS, TYPE_INT, PARM_OPT, 0, 1000}, {"StartPollers", &CONFIG_POLLER_FORKS, TYPE_INT, PARM_OPT, 0, 1000}, {"StartPollersUnreachable", &CONFIG_UNREACHABLE_POLLER_FORKS, TYPE_INT, PARM_OPT, 0, 1000}, {"StartIPMIPollers", &CONFIG_IPMIPOLLER_FORKS, TYPE_INT, PARM_OPT, 0, 1000}, {"StartTrappers", &CONFIG_TRAPPER_FORKS, TYPE_INT, PARM_OPT, 0, 1000}, {"StartJavaPollers", &CONFIG_JAVAPOLLER_FORKS, TYPE_INT, PARM_OPT, 0, 1000}, {"JavaGateway", &CONFIG_JAVA_GATEWAY, TYPE_STRING, PARM_OPT, 0, 0}, {"JavaGatewayPort", &CONFIG_JAVA_GATEWAY_PORT, TYPE_INT, PARM_OPT, 1024, 32767}, {"SNMPTrapperFile", &CONFIG_SNMPTRAP_FILE, TYPE_STRING, PARM_OPT, 0, 0}, {"StartSNMPTrapper", &CONFIG_SNMPTRAPPER_FORKS, TYPE_INT, PARM_OPT, 0, 1}, {"CacheSize", &CONFIG_CONF_CACHE_SIZE, TYPE_INT, PARM_OPT, 128 * ZBX_KIBIBYTE, 0x7fffffff}, /* just below 2GB */ {"HistoryCacheSize", &CONFIG_HISTORY_CACHE_SIZE, TYPE_INT, PARM_OPT, 128 * ZBX_KIBIBYTE, 0x7fffffff}, /* just below 2GB */ {"HistoryTextCacheSize", &CONFIG_TEXT_CACHE_SIZE, TYPE_INT, PARM_OPT, 128 * ZBX_KIBIBYTE, 0x7fffffff}, /* just below 2GB */ {"HousekeepingFrequency", &CONFIG_HOUSEKEEPING_FREQUENCY, TYPE_INT, PARM_OPT, 1, 24}, {"ProxyLocalBuffer", &CONFIG_PROXY_LOCAL_BUFFER, TYPE_INT, PARM_OPT, 0, 720}, {"ProxyOfflineBuffer", &CONFIG_PROXY_OFFLINE_BUFFER, TYPE_INT, PARM_OPT, 1, 720}, {"HeartbeatFrequency", &CONFIG_HEARTBEAT_FREQUENCY, TYPE_INT, PARM_OPT, 0, SEC_PER_HOUR}, {"ConfigFrequency", &CONFIG_PROXYCONFIG_FREQUENCY, TYPE_INT, PARM_OPT, 1, SEC_PER_WEEK}, {"DataSenderFrequency", &CONFIG_PROXYDATA_FREQUENCY, TYPE_INT, PARM_OPT, 1, SEC_PER_HOUR}, {"TmpDir", &CONFIG_TMPDIR, TYPE_STRING, PARM_OPT, 0, 0}, {"FpingLocation", &CONFIG_FPING_LOCATION, TYPE_STRING, PARM_OPT, 0, 0}, #ifdef HAVE_IPV6 {"Fping6Location", &CONFIG_FPING6_LOCATION, TYPE_STRING, PARM_OPT, 0, 0}, #endif {"Timeout", &CONFIG_TIMEOUT, TYPE_INT, PARM_OPT, 1, 30}, {"TrapperTimeout", &CONFIG_TRAPPER_TIMEOUT, TYPE_INT, PARM_OPT, 1, 300}, {"UnreachablePeriod", &CONFIG_UNREACHABLE_PERIOD, TYPE_INT, PARM_OPT, 1, SEC_PER_HOUR}, {"UnreachableDelay", &CONFIG_UNREACHABLE_DELAY, TYPE_INT, PARM_OPT, 1, SEC_PER_HOUR}, {"UnavailableDelay", &CONFIG_UNAVAILABLE_DELAY, TYPE_INT, PARM_OPT, 1, SEC_PER_HOUR}, {"ListenIP", &CONFIG_LISTEN_IP, TYPE_STRING, PARM_OPT, 0, 0}, {"ListenPort", &CONFIG_LISTEN_PORT, TYPE_INT, PARM_OPT, 1024, 32767}, {"SourceIP", &CONFIG_SOURCE_IP, TYPE_STRING, PARM_OPT, 0, 0}, {"DebugLevel", &CONFIG_LOG_LEVEL, TYPE_INT, PARM_OPT, 0, 4}, {"PidFile", &CONFIG_PID_FILE, TYPE_STRING, PARM_OPT, 0, 0}, {"LogFile", &CONFIG_LOG_FILE, TYPE_STRING, PARM_OPT, 0, 0}, {"LogFileSize", &CONFIG_LOG_FILE_SIZE, TYPE_INT, PARM_OPT, 0, 1024}, {"ExternalScripts", &CONFIG_EXTERNALSCRIPTS, TYPE_STRING, PARM_OPT, 0, 0}, {"DBHost", &CONFIG_DBHOST, TYPE_STRING, PARM_OPT, 0, 0}, {"DBName", &CONFIG_DBNAME, TYPE_STRING, PARM_MAND, 0, 0}, {"DBSchema", &CONFIG_DBSCHEMA, TYPE_STRING, PARM_OPT, 0, 0}, {"DBUser", &CONFIG_DBUSER, TYPE_STRING, PARM_OPT, 0, 0}, {"DBPassword", &CONFIG_DBPASSWORD, TYPE_STRING, PARM_OPT, 0, 0}, {"DBSocket", &CONFIG_DBSOCKET, TYPE_STRING, PARM_OPT, 0, 0}, {"DBPort", &CONFIG_DBPORT, TYPE_INT, PARM_OPT, 1024, 65535}, {"SSHKeyLocation", &CONFIG_SSH_KEY_LOCATION, TYPE_STRING, PARM_OPT, 0, 0}, {"LogSlowQueries", &CONFIG_LOG_SLOW_QUERIES, TYPE_INT, PARM_OPT, 0, 3600000}, {NULL} }; parse_cfg_file(CONFIG_FILE, cfg, ZBX_CFG_FILE_REQUIRED, ZBX_CFG_STRICT); zbx_set_defaults(); zbx_validate_config(); }
void zbx_mock_test_entry(void **state) { zbx_mock_error_t error; zbx_mock_handle_t handle, parameters, parameter; const char *cfg_file, *validation, *tmp, **multi_string, *string_list; int strict = 42, exit_code, parameter_count = 0, i; struct cfg_line *cfg = NULL; void **expected_values = NULL; ZBX_UNUSED(state); if (ZBX_MOCK_SUCCESS != (error = zbx_mock_in_parameter("configuration file", &handle)) || ZBX_MOCK_SUCCESS != (error = zbx_mock_string(handle, &cfg_file))) { fail_msg("Cannot get configuration file from test case data: %s", zbx_mock_error_string(error)); } if (ZBX_MOCK_SUCCESS != (error = zbx_mock_in_parameter("validation", &handle)) || ZBX_MOCK_SUCCESS != (error = zbx_mock_string(handle, &validation))) { fail_msg("Cannot get validation mode from test case data: %s", zbx_mock_error_string(error)); } if (0 == strcmp(validation, "not strict")) strict = ZBX_CFG_NOT_STRICT; else if (0 == strcmp(validation, "strict")) strict = ZBX_CFG_STRICT; else fail_msg("Invalid validation mode \"%s\".", validation); if (ZBX_MOCK_SUCCESS != (error = zbx_mock_in_parameter("parameters", ¶meters))) fail_msg("Cannot get description of parameters from test case data: %s", zbx_mock_error_string(error)); while (ZBX_MOCK_SUCCESS == (error = zbx_mock_vector_element(parameters, ¶meter))) { cfg = zbx_realloc(cfg, (parameter_count + 1) * sizeof(struct cfg_line)); expected_values = zbx_realloc(expected_values, (parameter_count + 1) * sizeof(void *)); if (ZBX_MOCK_SUCCESS != (error = zbx_mock_object_member(parameter, "name", &handle)) || ZBX_MOCK_SUCCESS != (error = zbx_mock_string(handle, &tmp))) { fail_msg("Cannot get name of parameter #%d: %s", parameter_count + 1, zbx_mock_error_string(error)); } cfg[parameter_count].parameter = tmp; if (ZBX_MOCK_SUCCESS != (error = zbx_mock_object_member(parameter, "type", &handle)) || ZBX_MOCK_SUCCESS != (error = zbx_mock_string(handle, &tmp))) { fail_msg("Cannot get type of parameter #%d: %s", parameter_count + 1, zbx_mock_error_string(error)); } if (0 == strcmp(tmp, "numeric")) { if (ZBX_MOCK_NO_SUCH_MEMBER == (error = zbx_mock_object_member(parameter, "expect", &handle))) { expected_values[parameter_count] = NULL; } else if (ZBX_MOCK_SUCCESS == error && ZBX_MOCK_SUCCESS == (error = zbx_mock_string(handle, &tmp))) { expected_values[parameter_count] = zbx_malloc(NULL, sizeof(zbx_uint64_t)); if (SUCCEED != is_uint64(tmp, expected_values[parameter_count])) { fail_msg("Expected value \"%s\" of parameter #%d is not numeric.", tmp, parameter_count + 1); } } else break; cfg[parameter_count].variable = zbx_malloc(NULL, sizeof(zbx_uint64_t)); *(zbx_uint64_t *)cfg[parameter_count].variable = (zbx_uint64_t)-1; if (ZBX_MOCK_NO_SUCH_MEMBER == (error = zbx_mock_object_member(parameter, "min", &handle))) { cfg[parameter_count].min = 0; } else if (ZBX_MOCK_SUCCESS == error && ZBX_MOCK_SUCCESS == (error = zbx_mock_string(handle, &tmp))) { zbx_uint64_t min; if (SUCCEED != is_uint64(tmp, &min)) { fail_msg("Minimum allowed value \"%s\" of parameter #%d is not numeric.", tmp, parameter_count + 1); } cfg[parameter_count].min = min; } else break; if (ZBX_MOCK_NO_SUCH_MEMBER == (error = zbx_mock_object_member(parameter, "max", &handle))) { cfg[parameter_count].max = 0; } else if (ZBX_MOCK_SUCCESS == error && ZBX_MOCK_SUCCESS == (error = zbx_mock_string(handle, &tmp))) { zbx_uint64_t max; if (SUCCEED != is_uint64(tmp, &max)) { fail_msg("Maximum allowed value \"%s\" of parameter #%d is not numeric.", tmp, parameter_count + 1); } cfg[parameter_count].max = max; } else break; cfg[parameter_count].type = TYPE_UINT64; /* no separate treatment for TYPE_INT */ } else if (0 == strcmp(tmp, "string")) { if (ZBX_MOCK_NO_SUCH_MEMBER == (error = zbx_mock_object_member(parameter, "expect", &handle))) { expected_values[parameter_count] = NULL; } else if (ZBX_MOCK_SUCCESS == error && ZBX_MOCK_SUCCESS == (error = zbx_mock_string(handle, &tmp))) { expected_values[parameter_count] = zbx_malloc(NULL, sizeof(char *)); *(const char **)expected_values[parameter_count] = tmp; } else break; cfg[parameter_count].variable = zbx_malloc(NULL, sizeof(char *)); *(char **)cfg[parameter_count].variable = NULL; cfg[parameter_count].min = 0; cfg[parameter_count].max = 0; cfg[parameter_count].type = TYPE_STRING; } else if (0 == strcmp(tmp, "string list")) { expected_values[parameter_count] = zbx_malloc(NULL, sizeof(zbx_mock_handle_t)); if (ZBX_MOCK_NO_SUCH_MEMBER == (error = zbx_mock_object_member(parameter, "expect", expected_values[parameter_count]))) { fail_msg("Missing expected field for parameter #%d of string list type, use [] instead.", parameter_count + 1); } if (ZBX_MOCK_SUCCESS != error) break; cfg[parameter_count].variable = zbx_malloc(NULL, sizeof(char *)); *(char **)cfg[parameter_count].variable = NULL; cfg[parameter_count].min = 0; cfg[parameter_count].max = 0; cfg[parameter_count].type = TYPE_STRING_LIST; } else if (0 == strcmp(tmp, "multi string")) { expected_values[parameter_count] = zbx_malloc(NULL, sizeof(zbx_mock_handle_t)); if (ZBX_MOCK_NO_SUCH_MEMBER == (error = zbx_mock_object_member(parameter, "expect", expected_values[parameter_count]))) { fail_msg("Missing expected field for parameter #%d of multi string type, use [] instead.", parameter_count + 1); } if (ZBX_MOCK_SUCCESS != error) break; cfg[parameter_count].variable = zbx_malloc(NULL, sizeof(char **)); *(char ***)cfg[parameter_count].variable = NULL; zbx_strarr_init((char ***)cfg[parameter_count].variable); cfg[parameter_count].min = 0; cfg[parameter_count].max = 0; cfg[parameter_count].type = TYPE_MULTISTRING; } else fail_msg("Invalid type \"%s\" of parameter #%d.", tmp, parameter_count + 1); if (ZBX_MOCK_SUCCESS != (error = zbx_mock_object_member(parameter, "mandatory", &handle)) || ZBX_MOCK_SUCCESS != (error = zbx_mock_string(handle, &tmp))) { fail_msg("Cannot get mandatory flag of parameter #%d: %s", parameter_count + 1, zbx_mock_error_string(error)); } if (0 == strcmp(tmp, "yes")) cfg[parameter_count].mandatory = PARM_MAND; else if (0 == strcmp(tmp, "no")) cfg[parameter_count].mandatory = PARM_OPT; else fail_msg("Invalid mandatory flag \"%s\" of parameter #%d.", tmp, parameter_count + 1); parameter_count++; } if (ZBX_MOCK_END_OF_VECTOR != error) { fail_msg("Cannot get description of parameter #%d from test case data: %s", parameter_count + 1, zbx_mock_error_string(error)); } cfg = zbx_realloc(cfg, (parameter_count + 1) * sizeof(struct cfg_line)); cfg[parameter_count].parameter = NULL; parse_cfg_file(cfg_file, cfg, ZBX_CFG_FILE_REQUIRED, strict); if (ZBX_MOCK_NO_EXIT_CODE != (error = zbx_mock_exit_code(&exit_code))) { if (ZBX_MOCK_SUCCESS == error) fail_msg("parse_cfg_file() was expected to call exit(%d), but has not.", exit_code); else fail_msg("Cannot get exit code from test case data: %s", zbx_mock_error_string(error)); } for (i = 0; i < parameter_count; i++) { switch (cfg[i].type) { case TYPE_MULTISTRING: multi_string = *(const char ***)cfg[i].variable; while (ZBX_MOCK_SUCCESS == (error = zbx_mock_vector_element( *(zbx_mock_handle_t *)expected_values[i], &handle)) && ZBX_MOCK_SUCCESS == (error = zbx_mock_string(handle, &tmp))) { if (NULL == *multi_string) { fail_msg("Values of multi string parameter \"%s\" ended while \"%s\"" " was expected.", cfg[i].parameter, tmp); } if (0 != strcmp(*multi_string, tmp)) { fail_msg("Value \"%s\" of multi string parameter \"%s\"" " differs from expected \"%s\".", *multi_string, cfg[i].parameter, tmp); } multi_string++; } if (ZBX_MOCK_END_OF_VECTOR != error) { fail_msg("Cannot get expected values of multi string parameter \"%s\": %s", cfg[i].parameter, zbx_mock_error_string(error)); } if (NULL != *multi_string) { fail_msg("Value of multi string parameter \"%s\" ends with unexpected \"%s\"" " (and maybe more).", cfg[i].parameter, *multi_string); } break; case TYPE_STRING_LIST: string_list = *(const char **)cfg[i].variable; while (ZBX_MOCK_SUCCESS == (error = zbx_mock_vector_element( *(zbx_mock_handle_t *)expected_values[i], &handle)) && ZBX_MOCK_SUCCESS == (error = zbx_mock_string(handle, &tmp))) { if ('\0' == *string_list) { fail_msg("Value of string list parameter \"%s\" ended when \"%s{,...}\"" " was expected.", cfg[i].parameter, tmp); } if (0 != strncmp(string_list, tmp, strlen(tmp))) { fail_msg("Value of string list parameter \"%s\" starting with \"%s\"" " differs from expected \"%s{,...}\".", cfg[i].parameter, string_list, tmp); } string_list += strlen(tmp); if (',' != *string_list) { if ('\0' != *string_list) { fail_msg("Value of string list parameter \"%s\" starting with" " \"%s\" differs from expected.", cfg[i].parameter, string_list); } } else string_list++; } if (ZBX_MOCK_END_OF_VECTOR != error) { fail_msg("Cannot get expected value of string list parameter \"%s\": %s", cfg[i].parameter, zbx_mock_error_string(error)); } if ('\0' != *string_list) { fail_msg("Values of string list parameter \"%s\" ends with unexpected \"%s\".", cfg[i].parameter, string_list); } break; case TYPE_STRING: if (NULL == *(char **)cfg[i].variable && NULL != *(char **)expected_values[i]) { fail_msg("No value of string parameter \"%s\" while expected \"%s\".", cfg[i].parameter, *(char **)expected_values[i]); } else if (NULL != *(char **)cfg[i].variable && NULL == *(char **)expected_values[i]) { fail_msg("Got value \"%s\" of string parameter \"%s\" none was expected.", *(char **)cfg[i].variable, cfg[i].parameter); } else if (NULL != *(char **)cfg[i].variable && NULL != *(char **)expected_values[i] && 0 != strcmp(*(char **)cfg[i].variable, *(char **)expected_values[i])) { fail_msg("Value \"%s\" of string parameter \"%s\" differs from expected \"%s\".", *(char **)cfg[i].variable, cfg[i].parameter, *(char **)expected_values[i]); } break; case TYPE_UINT64: if (*(zbx_uint64_t *)cfg[i].variable != *(zbx_uint64_t *)expected_values[i]) { fail_msg("Value " ZBX_FS_UI64 " of numeric parameter \"%s\"" " differs from expected (" ZBX_FS_UI64 ").", *(zbx_uint64_t *)cfg[i].variable, cfg[i].parameter, *(zbx_uint64_t *)expected_values[i]); } break; default: fail_msg("Invalid type of parameter \"%s\" when doing validation.", cfg[i].parameter); } } for (i = 0; i < parameter_count; i++) { switch (cfg[i].type) { case TYPE_MULTISTRING: zbx_strarr_free(*(char ***)cfg[i].variable); zbx_free(cfg[i].variable); zbx_free(expected_values[i]); break; case TYPE_STRING_LIST: case TYPE_STRING: zbx_free(*(char **)cfg[i].variable); zbx_free(cfg[i].variable); zbx_free(expected_values[i]); break; case TYPE_UINT64: zbx_free(cfg[i].variable); zbx_free(expected_values[i]); break; default: fail_msg("Invalid type of parameter \"%s\" when doing cleanup.", cfg[i].parameter); } } zbx_free(expected_values); zbx_free(cfg); }
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); } } }
void load_config() { struct cfg_line cfg[]= { /* PARAMETER ,VAR ,FUNC, TYPE(0i,1s), MANDATORY, MIN, MAX */ {"Server", &CONFIG_HOSTS_ALLOWED, 0,TYPE_STRING, PARM_MAND, 0,0}, {"Hostname", &CONFIG_HOSTNAME, 0,TYPE_STRING, PARM_OPT, 0,0}, #ifdef USE_PID_FILE {"PidFile", &APP_PID_FILE, 0,TYPE_STRING, PARM_OPT, 0,0}, #endif /* USE_PID_FILE */ {"LogFile", &CONFIG_LOG_FILE, 0,TYPE_STRING, PARM_OPT, 0,0}, {"LogFileSize", &CONFIG_LOG_FILE_SIZE, 0,TYPE_INT, PARM_OPT, 0,1024}, {"DisableActive", &CONFIG_DISABLE_ACTIVE, 0,TYPE_INT, PARM_OPT, 0,1}, {"Timeout", &CONFIG_TIMEOUT, 0,TYPE_INT, PARM_OPT, 1,30}, {"ListenPort", &CONFIG_LISTEN_PORT, 0,TYPE_INT, PARM_OPT, 1024,32767}, {"ServerPort", &CONFIG_SERVER_PORT, 0,TYPE_INT, PARM_OPT, 1024,32767}, {"ListenIP", &CONFIG_LISTEN_IP, 0,TYPE_STRING, PARM_OPT, 0,0}, {"DebugLevel", &CONFIG_LOG_LEVEL, 0,TYPE_INT, PARM_OPT, 0,5}, {"StartAgents", &CONFIG_ZABBIX_FORKS, 0,TYPE_INT, PARM_OPT, 1,16}, {"RefreshActiveChecks", &CONFIG_REFRESH_ACTIVE_CHECKS, 0,TYPE_INT, PARM_OPT,60,3600}, {"AllowRoot", &CONFIG_ALLOW_ROOT, 0,TYPE_INT, PARM_OPT,0,1}, {"LogUnresolvedSymbols",&CONFIG_LOG_UNRES_SYMB, 0, TYPE_STRING,PARM_OPT,0,1}, {"ActiveChecksBufSize", &CONFIG_ACTIVE_BUF_SIZE_MB, 0, TYPE_INT, PARM_OPT, 0, 10240}, {"ActiveChecksBufFile", &CONFIG_ACTIVE_BUF_FILE, 0, TYPE_STRING, PARM_OPT, 0, 0}, {0} }; AGENT_RESULT result; char **value = NULL; memset(&result, 0, sizeof(AGENT_RESULT)); parse_cfg_file(CONFIG_FILE, cfg); #ifdef USE_PID_FILE if(APP_PID_FILE == NULL) { APP_PID_FILE = DEFAULT_PID_FILE; } #endif /* USE_PID_FILE */ if(CONFIG_HOSTNAME == NULL) { if(SUCCEED == process("system.hostname", 0, &result)) { if( NULL != (value = GET_STR_RESULT(&result)) ) { CONFIG_HOSTNAME = strdup(*value); } } free_result(&result); if(CONFIG_HOSTNAME == NULL) { zabbix_log( LOG_LEVEL_CRIT, "Hostname is not defined"); exit(1); } } }
/****************************************************************************** * * * Function: zbx_load_config * * * * Purpose: parse config file and update configuration parameters * * * * Parameters: * * * * Return value: * * * * Author: Alexei Vladishev * * * * Comments: will terminate process if parsing fails * * * ******************************************************************************/ static void zbx_load_config(ZBX_TASK_EX *task) { static struct cfg_line cfg[] = { /* PARAMETER, VAR, TYPE, MANDATORY, MIN, MAX */ {"StartDBSyncers", &CONFIG_HISTSYNCER_FORKS, TYPE_INT, PARM_OPT, 1, 100}, {"StartDiscoverers", &CONFIG_DISCOVERER_FORKS, TYPE_INT, PARM_OPT, 0, 250}, {"StartHTTPPollers", &CONFIG_HTTPPOLLER_FORKS, TYPE_INT, PARM_OPT, 0, 1000}, {"StartPingers", &CONFIG_PINGER_FORKS, TYPE_INT, PARM_OPT, 0, 1000}, {"StartPollers", &CONFIG_POLLER_FORKS, TYPE_INT, PARM_OPT, 0, 1000}, {"StartPollersUnreachable", &CONFIG_UNREACHABLE_POLLER_FORKS, TYPE_INT, PARM_OPT, 0, 1000}, {"StartIPMIPollers", &CONFIG_IPMIPOLLER_FORKS, TYPE_INT, PARM_OPT, 0, 1000}, {"StartTimers", &CONFIG_TIMER_FORKS, TYPE_INT, PARM_OPT, 1, 1000}, {"StartTrappers", &CONFIG_TRAPPER_FORKS, TYPE_INT, PARM_OPT, 0, 1000}, {"StartJavaPollers", &CONFIG_JAVAPOLLER_FORKS, TYPE_INT, PARM_OPT, 0, 1000}, {"StartEscalators", &CONFIG_ESCALATOR_FORKS, TYPE_INT, PARM_OPT, 1, 100}, {"JavaGateway", &CONFIG_JAVA_GATEWAY, TYPE_STRING, PARM_OPT, 0, 0}, {"JavaGatewayPort", &CONFIG_JAVA_GATEWAY_PORT, TYPE_INT, PARM_OPT, 1024, 32767}, {"SNMPTrapperFile", &CONFIG_SNMPTRAP_FILE, TYPE_STRING, PARM_OPT, 0, 0}, {"StartSNMPTrapper", &CONFIG_SNMPTRAPPER_FORKS, TYPE_INT, PARM_OPT, 0, 1}, {"CacheSize", &CONFIG_CONF_CACHE_SIZE, TYPE_UINT64, PARM_OPT, 128 * ZBX_KIBIBYTE, __UINT64_C(8) * ZBX_GIBIBYTE}, {"HistoryCacheSize", &CONFIG_HISTORY_CACHE_SIZE, TYPE_UINT64, PARM_OPT, 128 * ZBX_KIBIBYTE, __UINT64_C(2) * ZBX_GIBIBYTE}, {"HistoryIndexCacheSize", &CONFIG_HISTORY_INDEX_CACHE_SIZE, TYPE_UINT64, PARM_OPT, 128 * ZBX_KIBIBYTE, __UINT64_C(2) * ZBX_GIBIBYTE}, {"TrendCacheSize", &CONFIG_TRENDS_CACHE_SIZE, TYPE_UINT64, PARM_OPT, 128 * ZBX_KIBIBYTE, __UINT64_C(2) * ZBX_GIBIBYTE}, {"ValueCacheSize", &CONFIG_VALUE_CACHE_SIZE, TYPE_UINT64, PARM_OPT, 0, __UINT64_C(64) * ZBX_GIBIBYTE}, {"CacheUpdateFrequency", &CONFIG_CONFSYNCER_FREQUENCY, TYPE_INT, PARM_OPT, 1, SEC_PER_HOUR}, {"HousekeepingFrequency", &CONFIG_HOUSEKEEPING_FREQUENCY, TYPE_INT, PARM_OPT, 0, 24}, {"MaxHousekeeperDelete", &CONFIG_MAX_HOUSEKEEPER_DELETE, TYPE_INT, PARM_OPT, 0, 1000000}, {"TmpDir", &CONFIG_TMPDIR, TYPE_STRING, PARM_OPT, 0, 0}, {"FpingLocation", &CONFIG_FPING_LOCATION, TYPE_STRING, PARM_OPT, 0, 0}, {"Fping6Location", &CONFIG_FPING6_LOCATION, TYPE_STRING, PARM_OPT, 0, 0}, {"Timeout", &CONFIG_TIMEOUT, TYPE_INT, PARM_OPT, 1, 30}, {"TrapperTimeout", &CONFIG_TRAPPER_TIMEOUT, TYPE_INT, PARM_OPT, 1, 300}, {"UnreachablePeriod", &CONFIG_UNREACHABLE_PERIOD, TYPE_INT, PARM_OPT, 1, SEC_PER_HOUR}, {"UnreachableDelay", &CONFIG_UNREACHABLE_DELAY, TYPE_INT, PARM_OPT, 1, SEC_PER_HOUR}, {"UnavailableDelay", &CONFIG_UNAVAILABLE_DELAY, TYPE_INT, PARM_OPT, 1, SEC_PER_HOUR}, {"ListenIP", &CONFIG_LISTEN_IP, TYPE_STRING_LIST, PARM_OPT, 0, 0}, {"ListenPort", &CONFIG_LISTEN_PORT, TYPE_INT, PARM_OPT, 1024, 32767}, {"SourceIP", &CONFIG_SOURCE_IP, TYPE_STRING, PARM_OPT, 0, 0}, {"DebugLevel", &CONFIG_LOG_LEVEL, TYPE_INT, PARM_OPT, 0, 5}, {"PidFile", &CONFIG_PID_FILE, TYPE_STRING, PARM_OPT, 0, 0}, {"LogType", &CONFIG_LOG_TYPE_STR, TYPE_STRING, PARM_OPT, 0, 0}, {"LogFile", &CONFIG_LOG_FILE, TYPE_STRING, PARM_OPT, 0, 0}, {"LogFileSize", &CONFIG_LOG_FILE_SIZE, TYPE_INT, PARM_OPT, 0, 1024}, {"AlertScriptsPath", &CONFIG_ALERT_SCRIPTS_PATH, TYPE_STRING, PARM_OPT, 0, 0}, {"ExternalScripts", &CONFIG_EXTERNALSCRIPTS, TYPE_STRING, PARM_OPT, 0, 0}, {"DBHost", &CONFIG_DBHOST, TYPE_STRING, PARM_OPT, 0, 0}, {"DBName", &CONFIG_DBNAME, TYPE_STRING, PARM_MAND, 0, 0}, {"DBSchema", &CONFIG_DBSCHEMA, TYPE_STRING, PARM_OPT, 0, 0}, {"DBUser", &CONFIG_DBUSER, TYPE_STRING, PARM_OPT, 0, 0}, {"DBPassword", &CONFIG_DBPASSWORD, TYPE_STRING, PARM_OPT, 0, 0}, {"DBSocket", &CONFIG_DBSOCKET, TYPE_STRING, PARM_OPT, 0, 0}, {"DBPort", &CONFIG_DBPORT, TYPE_INT, PARM_OPT, 1024, 65535}, {"SSHKeyLocation", &CONFIG_SSH_KEY_LOCATION, TYPE_STRING, PARM_OPT, 0, 0}, {"LogSlowQueries", &CONFIG_LOG_SLOW_QUERIES, TYPE_INT, PARM_OPT, 0, 3600000}, {"StartProxyPollers", &CONFIG_PROXYPOLLER_FORKS, TYPE_INT, PARM_OPT, 0, 250}, {"ProxyConfigFrequency", &CONFIG_PROXYCONFIG_FREQUENCY, TYPE_INT, PARM_OPT, 1, SEC_PER_WEEK}, {"ProxyDataFrequency", &CONFIG_PROXYDATA_FREQUENCY, TYPE_INT, PARM_OPT, 1, SEC_PER_HOUR}, {"LoadModulePath", &CONFIG_LOAD_MODULE_PATH, TYPE_STRING, PARM_OPT, 0, 0}, {"LoadModule", &CONFIG_LOAD_MODULE, TYPE_MULTISTRING, PARM_OPT, 0, 0}, {"StartVMwareCollectors", &CONFIG_VMWARE_FORKS, TYPE_INT, PARM_OPT, 0, 250}, {"VMwareFrequency", &CONFIG_VMWARE_FREQUENCY, TYPE_INT, PARM_OPT, 10, SEC_PER_DAY}, {"VMwarePerfFrequency", &CONFIG_VMWARE_PERF_FREQUENCY, TYPE_INT, PARM_OPT, 10, SEC_PER_DAY}, {"VMwareCacheSize", &CONFIG_VMWARE_CACHE_SIZE, TYPE_UINT64, PARM_OPT, 256 * ZBX_KIBIBYTE, __UINT64_C(2) * ZBX_GIBIBYTE}, {"VMwareTimeout", &CONFIG_VMWARE_TIMEOUT, TYPE_INT, PARM_OPT, 1, 300}, {"AllowRoot", &CONFIG_ALLOW_ROOT, TYPE_INT, PARM_OPT, 0, 1}, {"User", &CONFIG_USER, TYPE_STRING, PARM_OPT, 0, 0}, {"SSLCALocation", &CONFIG_SSL_CA_LOCATION, TYPE_STRING, PARM_OPT, 0, 0}, {"SSLCertLocation", &CONFIG_SSL_CERT_LOCATION, TYPE_STRING, PARM_OPT, 0, 0}, {"SSLKeyLocation", &CONFIG_SSL_KEY_LOCATION, TYPE_STRING, PARM_OPT, 0, 0}, {"TLSCAFile", &CONFIG_TLS_CA_FILE, TYPE_STRING, PARM_OPT, 0, 0}, {"TLSCRLFile", &CONFIG_TLS_CRL_FILE, TYPE_STRING, PARM_OPT, 0, 0}, {"TLSCertFile", &CONFIG_TLS_CERT_FILE, TYPE_STRING, PARM_OPT, 0, 0}, {"TLSKeyFile", &CONFIG_TLS_KEY_FILE, TYPE_STRING, PARM_OPT, 0, 0}, {"SocketDir", &CONFIG_SOCKET_PATH, TYPE_STRING, PARM_OPT, 0, 0}, {"StartAlerters", &CONFIG_ALERTER_FORKS, TYPE_INT, PARM_OPT, 1, 100}, {"StartPreprocessors", &CONFIG_PREPROCESSOR_FORKS, TYPE_INT, PARM_OPT, 1, 1000}, {"HistoryStorageURL", &CONFIG_HISTORY_STORAGE_URL, TYPE_STRING, PARM_OPT, 0, 0}, {"HistoryStorageTypes", &CONFIG_HISTORY_STORAGE_OPTS, TYPE_STRING_LIST, PARM_OPT, 0, 0}, {"HistoryStorageDateIndex", &CONFIG_HISTORY_STORAGE_PIPELINES, TYPE_INT, PARM_OPT, 0, 1}, {"ExportDir", &CONFIG_EXPORT_DIR, TYPE_STRING, PARM_OPT, 0, 0}, {"ExportFileSize", &CONFIG_EXPORT_FILE_SIZE, TYPE_UINT64, PARM_OPT, ZBX_MEBIBYTE, ZBX_GIBIBYTE}, {"StartLLDProcessors", &CONFIG_LLDWORKER_FORKS, TYPE_INT, PARM_OPT, 1, 100}, {"StatsAllowedIP", &CONFIG_STATS_ALLOWED_IP, TYPE_STRING_LIST, PARM_OPT, 0, 0}, {NULL} }; /* initialize multistrings */ zbx_strarr_init(&CONFIG_LOAD_MODULE); parse_cfg_file(CONFIG_FILE, cfg, ZBX_CFG_FILE_REQUIRED, ZBX_CFG_STRICT); zbx_set_defaults(); CONFIG_LOG_TYPE = zbx_get_log_type(CONFIG_LOG_TYPE_STR); zbx_validate_config(task); #if defined(HAVE_POLARSSL) || defined(HAVE_GNUTLS) || defined(HAVE_OPENSSL) zbx_tls_validate_config(); #endif }
/****************************************************************************** * * * Function: init_config * * * * Purpose: parse config file and update configuration parameters * * * * Parameters: * * * * Return value: * * * * Author: Alexei Vladishev * * * * Comments: will terminate process if parsing fails * * * ******************************************************************************/ void init_config(void) { AGENT_RESULT result; char **value = NULL; static struct cfg_line cfg[]= { /* PARAMETER ,VAR ,FUNC, TYPE(0i,1s),MANDATORY,MIN,MAX */ {"Server",&CONFIG_SERVER,0,TYPE_STRING,PARM_MAND,0,0}, {"ServerPort",&CONFIG_SERVER_PORT,0,TYPE_INT,PARM_OPT,1024,32768}, {"Hostname",&CONFIG_HOSTNAME,0,TYPE_STRING,PARM_OPT,0,0}, {"StartDBSyncers",&CONFIG_DBSYNCER_FORKS,0,TYPE_INT,PARM_OPT,0,16}, {"StartDiscoverers",&CONFIG_DISCOVERER_FORKS,0,TYPE_INT,PARM_OPT,0,255}, {"StartHTTPPollers",&CONFIG_HTTPPOLLER_FORKS,0,TYPE_INT,PARM_OPT,0,255}, {"StartPingers",&CONFIG_PINGER_FORKS,0,TYPE_INT,PARM_OPT,0,255}, {"StartPollers",&CONFIG_POLLER_FORKS,0,TYPE_INT,PARM_OPT,0,255}, {"StartIPMIPollers",&CONFIG_IPMIPOLLER_FORKS,0,TYPE_INT,PARM_OPT,0,255}, {"StartPollersUnreachable",&CONFIG_UNREACHABLE_POLLER_FORKS,0,TYPE_INT,PARM_OPT,0,255}, {"StartTrappers",&CONFIG_TRAPPERD_FORKS,0,TYPE_INT,PARM_OPT,0,255}, {"HousekeepingFrequency",&CONFIG_HOUSEKEEPING_FREQUENCY,0,TYPE_INT,PARM_OPT,1,24}, {"ProxyLocalBuffer",&CONFIG_PROXY_LOCAL_BUFFER,0,TYPE_INT,PARM_OPT,0,720}, {"ProxyOfflineBuffer",&CONFIG_PROXY_OFFLINE_BUFFER,0,TYPE_INT,PARM_OPT,1,720}, {"HeartbeatFrequency",&CONFIG_HEARTBEAT_FREQUENCY,0,TYPE_INT,PARM_OPT,0,3600}, {"ConfigFrequency",&CONFIG_PROXYCONFIG_FREQUENCY,0,TYPE_INT,PARM_OPT,1,3600*7*24}, {"DataSenderFrequency",&CONFIG_DATASENDER_FREQUENCY,0,TYPE_INT,PARM_OPT,1,3600}, /* {"SenderFrequency",&CONFIG_SENDER_FREQUENCY,0,TYPE_INT,PARM_OPT,5,3600},*/ {"PingerFrequency",&CONFIG_PINGER_FREQUENCY,0,TYPE_INT,PARM_OPT,1,3600}, {"TmpDir",&CONFIG_TMPDIR,0,TYPE_STRING,PARM_OPT,0,0}, {"FpingLocation",&CONFIG_FPING_LOCATION,0,TYPE_STRING,PARM_OPT,0,0}, #ifdef HAVE_IPV6 {"Fping6Location",&CONFIG_FPING6_LOCATION,0,TYPE_STRING,PARM_OPT,0,0}, #endif /* HAVE_IPV6 */ {"Timeout",&CONFIG_TIMEOUT,0,TYPE_INT,PARM_OPT,1,30}, {"TrapperTimeout",&CONFIG_TRAPPER_TIMEOUT,0,TYPE_INT,PARM_OPT,1,300}, {"UnreachablePeriod",&CONFIG_UNREACHABLE_PERIOD,0,TYPE_INT,PARM_OPT,1,3600}, {"UnreachableDelay",&CONFIG_UNREACHABLE_DELAY,0,TYPE_INT,PARM_OPT,1,3600}, {"UnavailableDelay",&CONFIG_UNAVAILABLE_DELAY,0,TYPE_INT,PARM_OPT,1,3600}, {"ListenIP",&CONFIG_LISTEN_IP,0,TYPE_STRING,PARM_OPT,0,0}, {"ListenPort",&CONFIG_LISTEN_PORT,0,TYPE_INT,PARM_OPT,1024,32768}, {"SourceIP",&CONFIG_SOURCE_IP,0,TYPE_STRING,PARM_OPT,0,0}, /* {"NoTimeWait",&CONFIG_NOTIMEWAIT,0,TYPE_INT,PARM_OPT,0,1},*/ /* {"DisablePinger",&CONFIG_DISABLE_PINGER,0,TYPE_INT,PARM_OPT,0,1},*/ {"DebugLevel",&CONFIG_LOG_LEVEL,0,TYPE_INT,PARM_OPT,0,4}, {"PidFile",&APP_PID_FILE,0,TYPE_STRING,PARM_OPT,0,0}, {"LogFile",&CONFIG_LOG_FILE,0,TYPE_STRING,PARM_OPT,0,0}, {"LogFileSize",&CONFIG_LOG_FILE_SIZE,0,TYPE_INT,PARM_OPT,0,1024}, /* {"AlertScriptsPath",&CONFIG_ALERT_SCRIPTS_PATH,0,TYPE_STRING,PARM_OPT,0,0},*/ {"ExternalScripts",&CONFIG_EXTERNALSCRIPTS,0,TYPE_STRING,PARM_OPT,0,0}, {"DBHost",&CONFIG_DBHOST,0,TYPE_STRING,PARM_OPT,0,0}, {"DBName",&CONFIG_DBNAME,0,TYPE_STRING,PARM_MAND,0,0}, {"DBUser",&CONFIG_DBUSER,0,TYPE_STRING,PARM_OPT,0,0}, {"DBPassword",&CONFIG_DBPASSWORD,0,TYPE_STRING,PARM_OPT,0,0}, {"DBSocket",&CONFIG_DBSOCKET,0,TYPE_STRING,PARM_OPT,0,0}, {"DBPort",&CONFIG_DBPORT,0,TYPE_INT,PARM_OPT,1024,65535}, {0} }; CONFIG_SERVER_STARTUP_TIME = time(NULL); parse_cfg_file(CONFIG_FILE,cfg); if(CONFIG_HOSTNAME == NULL) { if(SUCCEED == process("system.hostname", 0, &result)) { if( NULL != (value = GET_STR_RESULT(&result)) ) { CONFIG_HOSTNAME = strdup(*value); } } free_result(&result); if(CONFIG_HOSTNAME == NULL) { zabbix_log( LOG_LEVEL_CRIT, "Hostname is not defined"); exit(1); } } if(CONFIG_DBNAME == NULL) { zabbix_log( LOG_LEVEL_CRIT, "DBName not in config file"); exit(1); } if(APP_PID_FILE == NULL) { APP_PID_FILE=strdup("/tmp/zabbix_server.pid"); } if(CONFIG_ALERT_SCRIPTS_PATH == NULL) { CONFIG_ALERT_SCRIPTS_PATH=strdup("/home/zabbix/bin"); } if(CONFIG_TMPDIR == NULL) { CONFIG_TMPDIR=strdup("/tmp"); } if(CONFIG_FPING_LOCATION == NULL) { CONFIG_FPING_LOCATION=strdup("/usr/sbin/fping"); } #ifdef HAVE_IPV6 if(CONFIG_FPING6_LOCATION == NULL) { CONFIG_FPING6_LOCATION=strdup("/usr/sbin/fping6"); } #endif /* HAVE_IPV6 */ if(CONFIG_EXTERNALSCRIPTS == NULL) { CONFIG_EXTERNALSCRIPTS=strdup("/etc/zabbix/externalscripts"); } #ifndef HAVE_LIBCURL CONFIG_HTTPPOLLER_FORKS = 0; #endif #ifndef HAVE_OPENIPMI CONFIG_IPMIPOLLER_FORKS = 0; #endif }
/****************************************************************************** * * * Function: init_config * * * * Purpose: parse config file and update configuration parameters * * * * Parameters: * * * * Return value: * * * * Author: Alexei Vladishev * * * * Comments: will terminate process if parsing fails * * * ******************************************************************************/ void init_config(void) { static struct cfg_line cfg[]= { /* PARAMETER ,VAR ,FUNC, TYPE(0i,1s),MANDATORY,MIN,MAX */ {"StartDBSyncers",&CONFIG_DBSYNCER_FORKS,0,TYPE_INT,PARM_OPT,0,16}, {"StartDiscoverers",&CONFIG_DISCOVERER_FORKS,0,TYPE_INT,PARM_OPT,0,255}, {"StartHTTPPollers",&CONFIG_HTTPPOLLER_FORKS,0,TYPE_INT,PARM_OPT,0,255}, {"StartPingers",&CONFIG_PINGER_FORKS,0,TYPE_INT,PARM_OPT,0,255}, {"StartPollers",&CONFIG_POLLER_FORKS,0,TYPE_INT,PARM_OPT,0,255}, {"StartIPMIPollers",&CONFIG_IPMIPOLLER_FORKS,0,TYPE_INT,PARM_OPT,0,255}, {"StartPollersUnreachable",&CONFIG_UNREACHABLE_POLLER_FORKS,0,TYPE_INT,PARM_OPT,0,255}, {"StartTrappers",&CONFIG_TRAPPERD_FORKS,0,TYPE_INT,PARM_OPT,0,255}, {"HousekeepingFrequency",&CONFIG_HOUSEKEEPING_FREQUENCY,0,TYPE_INT,PARM_OPT,1,24}, {"SenderFrequency",&CONFIG_SENDER_FREQUENCY,0,TYPE_INT,PARM_OPT,5,3600}, {"PingerFrequency",&CONFIG_PINGER_FREQUENCY,0,TYPE_INT,PARM_OPT,1,3600}, {"TmpDir",&CONFIG_TMPDIR,0,TYPE_STRING,PARM_OPT,0,0}, {"FpingLocation",&CONFIG_FPING_LOCATION,0,TYPE_STRING,PARM_OPT,0,0}, #ifdef HAVE_IPV6 {"Fping6Location",&CONFIG_FPING6_LOCATION,0,TYPE_STRING,PARM_OPT,0,0}, #endif /* HAVE_IPV6 */ {"Timeout",&CONFIG_TIMEOUT,0,TYPE_INT,PARM_OPT,1,30}, {"TrapperTimeout",&CONFIG_TRAPPER_TIMEOUT,0,TYPE_INT,PARM_OPT,1,300}, {"UnreachablePeriod",&CONFIG_UNREACHABLE_PERIOD,0,TYPE_INT,PARM_OPT,1,3600}, {"UnreachableDelay",&CONFIG_UNREACHABLE_DELAY,0,TYPE_INT,PARM_OPT,1,3600}, {"UnavailableDelay",&CONFIG_UNAVAILABLE_DELAY,0,TYPE_INT,PARM_OPT,1,3600}, {"ListenIP",&CONFIG_LISTEN_IP,0,TYPE_STRING,PARM_OPT,0,0}, {"ListenPort",&CONFIG_LISTEN_PORT,0,TYPE_INT,PARM_OPT,1024,32768}, {"SourceIP",&CONFIG_SOURCE_IP,0,TYPE_STRING,PARM_OPT,0,0}, /* {"NoTimeWait",&CONFIG_NOTIMEWAIT,0,TYPE_INT,PARM_OPT,0,1},*/ /* {"DisablePinger",&CONFIG_DISABLE_PINGER,0,TYPE_INT,PARM_OPT,0,1},*/ {"DisableHousekeeping",&CONFIG_DISABLE_HOUSEKEEPING,0,TYPE_INT,PARM_OPT,0,1}, {"DebugLevel",&CONFIG_LOG_LEVEL,0,TYPE_INT,PARM_OPT,0,4}, {"PidFile",&APP_PID_FILE,0,TYPE_STRING,PARM_OPT,0,0}, {"LogFile",&CONFIG_LOG_FILE,0,TYPE_STRING,PARM_OPT,0,0}, {"LogFileSize",&CONFIG_LOG_FILE_SIZE,0,TYPE_INT,PARM_OPT,0,1024}, {"AlertScriptsPath",&CONFIG_ALERT_SCRIPTS_PATH,0,TYPE_STRING,PARM_OPT,0,0}, {"ExternalScripts",&CONFIG_EXTERNALSCRIPTS,0,TYPE_STRING,PARM_OPT,0,0}, {"DBHost",&CONFIG_DBHOST,0,TYPE_STRING,PARM_OPT,0,0}, {"DBName",&CONFIG_DBNAME,0,TYPE_STRING,PARM_MAND,0,0}, {"DBUser",&CONFIG_DBUSER,0,TYPE_STRING,PARM_OPT,0,0}, {"DBPassword",&CONFIG_DBPASSWORD,0,TYPE_STRING,PARM_OPT,0,0}, {"DBSocket",&CONFIG_DBSOCKET,0,TYPE_STRING,PARM_OPT,0,0}, {"DBPort",&CONFIG_DBPORT,0,TYPE_INT,PARM_OPT,1024,65535}, {"NodeID",&CONFIG_NODEID,0,TYPE_INT,PARM_OPT,0,65535}, {"NodeNoEvents",&CONFIG_NODE_NOEVENTS,0,TYPE_INT,PARM_OPT,0,1}, {"NodeNoHistory",&CONFIG_NODE_NOHISTORY,0,TYPE_INT,PARM_OPT,0,1}, {0} }; CONFIG_SERVER_STARTUP_TIME = time(NULL); parse_cfg_file(CONFIG_FILE,cfg); if(CONFIG_DBNAME == NULL) { zabbix_log( LOG_LEVEL_CRIT, "DBName not in config file"); exit(1); } if(APP_PID_FILE == NULL) { APP_PID_FILE=strdup("/tmp/zabbix_server.pid"); } if(CONFIG_ALERT_SCRIPTS_PATH == NULL) { CONFIG_ALERT_SCRIPTS_PATH=strdup("/home/zabbix/bin"); } if(CONFIG_TMPDIR == NULL) { CONFIG_TMPDIR=strdup("/tmp"); } if(CONFIG_FPING_LOCATION == NULL) { CONFIG_FPING_LOCATION=strdup("/usr/sbin/fping"); } #ifdef HAVE_IPV6 if(CONFIG_FPING6_LOCATION == NULL) { CONFIG_FPING6_LOCATION=strdup("/usr/sbin/fping6"); } #endif /* HAVE_IPV6 */ if(CONFIG_EXTERNALSCRIPTS == NULL) { CONFIG_EXTERNALSCRIPTS=strdup("/etc/zabbix/externalscripts"); } #ifndef HAVE_LIBCURL CONFIG_HTTPPOLLER_FORKS = 0; #endif #ifndef HAVE_OPENIPMI CONFIG_IPMIPOLLER_FORKS = 0; #endif }
/****************************************************************************** * * * Function: zbx_load_config * * * * Purpose: parse config file and update configuration parameters * * * * Parameters: * * * * Return value: * * * * Author: Alexei Vladishev * * * * Comments: will terminate process if parsing fails * * * ******************************************************************************/ static void zbx_load_config() { static struct cfg_line cfg[] = { /* PARAMETER, VAR, TYPE, MANDATORY, MIN, MAX */ {"StartDBSyncers", &CONFIG_HISTSYNCER_FORKS, TYPE_INT, PARM_OPT, 1, 100}, {"StartDiscoverers", &CONFIG_DISCOVERER_FORKS, TYPE_INT, PARM_OPT, 0, 250}, {"StartHTTPPollers", &CONFIG_HTTPPOLLER_FORKS, TYPE_INT, PARM_OPT, 0, 1000}, {"StartPingers", &CONFIG_PINGER_FORKS, TYPE_INT, PARM_OPT, 0, 1000}, {"StartPollers", &CONFIG_POLLER_FORKS, TYPE_INT, PARM_OPT, 0, 1000}, {"StartPollersUnreachable", &CONFIG_UNREACHABLE_POLLER_FORKS, TYPE_INT, PARM_OPT, 0, 1000}, {"StartIPMIPollers", &CONFIG_IPMIPOLLER_FORKS, TYPE_INT, PARM_OPT, 0, 1000}, {"StartTimers", &CONFIG_TIMER_FORKS, TYPE_INT, PARM_OPT, 1, 1000}, {"StartTrappers", &CONFIG_TRAPPER_FORKS, TYPE_INT, PARM_OPT, 0, 1000}, {"StartJavaPollers", &CONFIG_JAVAPOLLER_FORKS, TYPE_INT, PARM_OPT, 0, 1000}, {"JavaGateway", &CONFIG_JAVA_GATEWAY, TYPE_STRING, PARM_OPT, 0, 0}, {"JavaGatewayPort", &CONFIG_JAVA_GATEWAY_PORT, TYPE_INT, PARM_OPT, 1024, 32767}, {"SNMPTrapperFile", &CONFIG_SNMPTRAP_FILE, TYPE_STRING, PARM_OPT, 0, 0}, {"StartSNMPTrapper", &CONFIG_SNMPTRAPPER_FORKS, TYPE_INT, PARM_OPT, 0, 1}, {"CacheSize", &CONFIG_CONF_CACHE_SIZE, TYPE_UINT64, PARM_OPT, 128 * ZBX_KIBIBYTE, __UINT64_C(8) * ZBX_GIBIBYTE}, {"HistoryCacheSize", &CONFIG_HISTORY_CACHE_SIZE, TYPE_UINT64, PARM_OPT, 128 * ZBX_KIBIBYTE, __UINT64_C(2) * ZBX_GIBIBYTE}, {"TrendCacheSize", &CONFIG_TRENDS_CACHE_SIZE, TYPE_UINT64, PARM_OPT, 128 * ZBX_KIBIBYTE, __UINT64_C(2) * ZBX_GIBIBYTE}, {"HistoryTextCacheSize", &CONFIG_TEXT_CACHE_SIZE, TYPE_UINT64, PARM_OPT, 128 * ZBX_KIBIBYTE, __UINT64_C(2) * ZBX_GIBIBYTE}, {"ValueCacheSize", &CONFIG_VALUE_CACHE_SIZE, TYPE_UINT64, PARM_OPT, 0, __UINT64_C(64) * ZBX_GIBIBYTE}, {"CacheUpdateFrequency", &CONFIG_CONFSYNCER_FREQUENCY, TYPE_INT, PARM_OPT, 1, SEC_PER_HOUR}, {"HousekeepingFrequency", &CONFIG_HOUSEKEEPING_FREQUENCY, TYPE_INT, PARM_OPT, 1, 24}, {"MaxHousekeeperDelete", &CONFIG_MAX_HOUSEKEEPER_DELETE, TYPE_INT, PARM_OPT, 0, 1000000}, {"SenderFrequency", &CONFIG_SENDER_FREQUENCY, TYPE_INT, PARM_OPT, 5, SEC_PER_HOUR}, {"TmpDir", &CONFIG_TMPDIR, TYPE_STRING, PARM_OPT, 0, 0}, {"FpingLocation", &CONFIG_FPING_LOCATION, TYPE_STRING, PARM_OPT, 0, 0}, #ifdef HAVE_IPV6 {"Fping6Location", &CONFIG_FPING6_LOCATION, TYPE_STRING, PARM_OPT, 0, 0}, #endif {"Timeout", &CONFIG_TIMEOUT, TYPE_INT, PARM_OPT, 1, 30}, {"TrapperTimeout", &CONFIG_TRAPPER_TIMEOUT, TYPE_INT, PARM_OPT, 1, 300}, {"UnreachablePeriod", &CONFIG_UNREACHABLE_PERIOD, TYPE_INT, PARM_OPT, 1, SEC_PER_HOUR}, {"UnreachableDelay", &CONFIG_UNREACHABLE_DELAY, TYPE_INT, PARM_OPT, 1, SEC_PER_HOUR}, {"UnavailableDelay", &CONFIG_UNAVAILABLE_DELAY, TYPE_INT, PARM_OPT, 1, SEC_PER_HOUR}, {"ListenIP", &CONFIG_LISTEN_IP, TYPE_STRING_LIST, PARM_OPT, 0, 0}, {"ListenPort", &CONFIG_LISTEN_PORT, TYPE_INT, PARM_OPT, 1024, 32767}, {"SourceIP", &CONFIG_SOURCE_IP, TYPE_STRING, PARM_OPT, 0, 0}, {"DebugLevel", &CONFIG_LOG_LEVEL, TYPE_INT, PARM_OPT, 0, 4}, {"PidFile", &CONFIG_PID_FILE, TYPE_STRING, PARM_OPT, 0, 0}, {"LogFile", &CONFIG_LOG_FILE, TYPE_STRING, PARM_OPT, 0, 0}, {"LogFileSize", &CONFIG_LOG_FILE_SIZE, TYPE_INT, PARM_OPT, 0, 1024}, {"AlertScriptsPath", &CONFIG_ALERT_SCRIPTS_PATH, TYPE_STRING, PARM_OPT, 0, 0}, {"ExternalScripts", &CONFIG_EXTERNALSCRIPTS, TYPE_STRING, PARM_OPT, 0, 0}, {"DBHost", &CONFIG_DBHOST, TYPE_STRING, PARM_OPT, 0, 0}, {"DBName", &CONFIG_DBNAME, TYPE_STRING, PARM_MAND, 0, 0}, {"DBSchema", &CONFIG_DBSCHEMA, TYPE_STRING, PARM_OPT, 0, 0}, {"DBUser", &CONFIG_DBUSER, TYPE_STRING, PARM_OPT, 0, 0}, {"DBPassword", &CONFIG_DBPASSWORD, TYPE_STRING, PARM_OPT, 0, 0}, {"DBSocket", &CONFIG_DBSOCKET, TYPE_STRING, PARM_OPT, 0, 0}, {"DBPort", &CONFIG_DBPORT, TYPE_INT, PARM_OPT, 1024, 65535}, {"NodeID", &CONFIG_NODEID, TYPE_INT, PARM_OPT, 0, 999}, {"NodeNoEvents", &CONFIG_NODE_NOEVENTS, TYPE_INT, PARM_OPT, 0, 1}, {"NodeNoHistory", &CONFIG_NODE_NOHISTORY, TYPE_INT, PARM_OPT, 0, 1}, {"SSHKeyLocation", &CONFIG_SSH_KEY_LOCATION, TYPE_STRING, PARM_OPT, 0, 0}, {"LogSlowQueries", &CONFIG_LOG_SLOW_QUERIES, TYPE_INT, PARM_OPT, 0, 3600000}, {"StartProxyPollers", &CONFIG_PROXYPOLLER_FORKS, TYPE_INT, PARM_OPT, 0, 250}, {"ProxyConfigFrequency", &CONFIG_PROXYCONFIG_FREQUENCY, TYPE_INT, PARM_OPT, 1, SEC_PER_WEEK}, {"ProxyDataFrequency", &CONFIG_PROXYDATA_FREQUENCY, TYPE_INT, PARM_OPT, 1, SEC_PER_HOUR}, {"AllowRoot", &CONFIG_ALLOW_ROOT, TYPE_INT, PARM_OPT, 0, 1}, {"LoadModulePath", &CONFIG_LOAD_MODULE_PATH, TYPE_STRING, PARM_OPT, 0, 0}, {"LoadModule", &CONFIG_LOAD_MODULE, TYPE_MULTISTRING, PARM_OPT, 0, 0}, {"StartVMwareCollectors", &CONFIG_VMWARE_FORKS, TYPE_INT, PARM_OPT, 0, 250}, {"VMwareFrequency", &CONFIG_VMWARE_FREQUENCY, TYPE_INT, PARM_OPT, 10, SEC_PER_DAY}, {"VMwareCacheSize", &CONFIG_VMWARE_CACHE_SIZE, TYPE_UINT64, PARM_OPT, 256 * ZBX_KIBIBYTE, __UINT64_C(2) * ZBX_GIBIBYTE}, {"EnableSNMPBulkRequests", &CONFIG_SNMP_BULK_REQUESTS, TYPE_INT, PARM_OPT, 0, 1}, {NULL} }; /* initialize multistrings */ zbx_strarr_init(&CONFIG_LOAD_MODULE); parse_cfg_file(CONFIG_FILE, cfg, ZBX_CFG_FILE_REQUIRED, ZBX_CFG_STRICT); zbx_set_defaults(); zbx_validate_config(); }