Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/zabbix/zabbix.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/zabbix_agent/zabbix_agentd.c')
-rw-r--r--src/zabbix_agent/zabbix_agentd.c65
1 files changed, 42 insertions, 23 deletions
diff --git a/src/zabbix_agent/zabbix_agentd.c b/src/zabbix_agent/zabbix_agentd.c
index 1ccb132b05c..59a5446b826 100644
--- a/src/zabbix_agent/zabbix_agentd.c
+++ b/src/zabbix_agent/zabbix_agentd.c
@@ -86,6 +86,7 @@ int CONFIG_HEARTBEAT_FREQUENCY = 60;
#include "stats.h"
#ifdef _WINDOWS
# include "perfstat.h"
+# include "zbxwin32.h"
#else
# include "zbxnix.h"
#endif
@@ -242,6 +243,13 @@ static unsigned char get_program_type(void)
return program_type;
}
+#if defined(_WINDOWS) || defined(__MINGW32__)
+static const char *get_progname(void)
+{
+ return progname;
+}
+#endif
+
static zbx_thread_activechk_args *config_active_args = NULL;
int CONFIG_ALERTER_FORKS = 0;
@@ -279,11 +287,15 @@ int CONFIG_AVAILMAN_FORKS = 0;
int CONFIG_SERVICEMAN_FORKS = 0;
int CONFIG_TRIGGERHOUSEKEEPER_FORKS = 0;
+static char *config_file = NULL;
+static int config_allow_root = 0;
+
+static zbx_config_log_t log_file_cfg = {NULL, NULL, LOG_TYPE_UNDEFINED, 1};
+
char *opt = NULL;
#ifdef _WINDOWS
void zbx_co_uninitialize();
-int zbx_win_exception_filter(struct _EXCEPTION_POINTERS *ep);
#endif
int get_process_info_by_thread(int local_server_num, unsigned char *local_process_type, int *local_process_num);
@@ -346,8 +358,8 @@ static int parse_commandline(int argc, char **argv, ZBX_TASK_EX *t)
switch (ch)
{
case 'c':
- if (NULL == CONFIG_FILE)
- CONFIG_FILE = strdup(zbx_optarg);
+ if (NULL == config_file)
+ config_file = strdup(zbx_optarg);
break;
#ifndef _WINDOWS
case 'R':
@@ -525,13 +537,13 @@ static int parse_commandline(int argc, char **argv, ZBX_TASK_EX *t)
goto out;
}
- if (NULL == CONFIG_FILE)
- CONFIG_FILE = zbx_strdup(NULL, DEFAULT_CONFIG_FILE);
+ if (NULL == config_file)
+ config_file = zbx_strdup(NULL, DEFAULT_CONFIG_FILE);
out:
if (FAIL == ret)
{
zbx_free(TEST_METRIC);
- zbx_free(CONFIG_FILE);
+ zbx_free(config_file);
}
return ret;
@@ -595,8 +607,8 @@ static void set_defaults(void)
if (NULL == CONFIG_PID_FILE)
CONFIG_PID_FILE = (char *)"/tmp/zabbix_agentd.pid";
#endif
- if (NULL == CONFIG_LOG_TYPE_STR)
- CONFIG_LOG_TYPE_STR = zbx_strdup(CONFIG_LOG_TYPE_STR, ZBX_OPTION_LOGTYPE_FILE);
+ if (NULL == log_file_cfg.log_type_str)
+ log_file_cfg.log_type_str = zbx_strdup(log_file_cfg.log_type_str, ZBX_OPTION_LOGTYPE_FILE);
}
/******************************************************************************
@@ -672,7 +684,7 @@ static void zbx_validate_config(ZBX_TASK_EX *task)
err = 1;
}
- if (SUCCEED != zbx_validate_log_parameters(task))
+ if (SUCCEED != zbx_validate_log_parameters(task, &log_file_cfg))
err = 1;
#if !(defined(HAVE_GNUTLS) || defined(HAVE_OPENSSL))
@@ -735,6 +747,7 @@ static int add_serveractive_host_cb(const zbx_vector_ptr_t *addrs, zbx_vector_st
hostnames->values[i] : "");
config_active_args[forks].zbx_config_tls = zbx_config_tls;
config_active_args[forks].zbx_get_program_type_cb_arg = get_program_type;
+ config_active_args[forks].config_file = config_file;
}
return SUCCEED;
@@ -844,11 +857,11 @@ static void zbx_load_config(int requirement, ZBX_TASK_EX *task)
{"PidFile", &CONFIG_PID_FILE, TYPE_STRING,
PARM_OPT, 0, 0},
#endif
- {"LogType", &CONFIG_LOG_TYPE_STR, TYPE_STRING,
+ {"LogType", &log_file_cfg.log_type_str, TYPE_STRING,
PARM_OPT, 0, 0},
- {"LogFile", &CONFIG_LOG_FILE, TYPE_STRING,
+ {"LogFile", &log_file_cfg.log_file_name, TYPE_STRING,
PARM_OPT, 0, 0},
- {"LogFileSize", &CONFIG_LOG_FILE_SIZE, TYPE_INT,
+ {"LogFileSize", &log_file_cfg.log_file_size, TYPE_INT,
PARM_OPT, 0, 1024},
{"Timeout", &CONFIG_TIMEOUT, TYPE_INT,
PARM_OPT, 1, 30},
@@ -884,7 +897,7 @@ static void zbx_load_config(int requirement, ZBX_TASK_EX *task)
PARM_OPT, 0, 0},
{"LoadModule", &CONFIG_LOAD_MODULE, TYPE_MULTISTRING,
PARM_OPT, 0, 0},
- {"AllowRoot", &CONFIG_ALLOW_ROOT, TYPE_INT,
+ {"AllowRoot", &config_allow_root, TYPE_INT,
PARM_OPT, 0, 1},
{"User", &CONFIG_USER, TYPE_STRING,
PARM_OPT, 0, 0},
@@ -951,13 +964,13 @@ static void zbx_load_config(int requirement, ZBX_TASK_EX *task)
zbx_strarr_init(&CONFIG_PERF_COUNTERS);
zbx_strarr_init(&CONFIG_PERF_COUNTERS_EN);
#endif
- parse_cfg_file(CONFIG_FILE, cfg, requirement, ZBX_CFG_STRICT, ZBX_CFG_EXIT_FAILURE);
+ parse_cfg_file(config_file, cfg, requirement, ZBX_CFG_STRICT, ZBX_CFG_EXIT_FAILURE);
zbx_finalize_key_access_rules_configuration();
set_defaults();
- CONFIG_LOG_TYPE = zbx_get_log_type(CONFIG_LOG_TYPE_STR);
+ log_file_cfg.log_type = zbx_get_log_type(log_file_cfg.log_type_str);
zbx_vector_str_create(&hostnames);
parse_hostnames(CONFIG_HOSTNAMES, &hostnames);
@@ -1029,7 +1042,7 @@ static int zbx_exec_service_task(const char *name, const ZBX_TASK_EX *t)
switch (t->task)
{
case ZBX_TASK_INSTALL_SERVICE:
- ret = ZabbixCreateService(name, t->flags & ZBX_TASK_FLAG_MULTIPLE_AGENTS);
+ ret = ZabbixCreateService(name, t->flags & ZBX_TASK_FLAG_MULTIPLE_AGENTS, config_file);
break;
case ZBX_TASK_UNINSTALL_SERVICE:
ret = ZabbixRemoveService();
@@ -1093,7 +1106,7 @@ int MAIN_ZABBIX_ENTRY(int flags)
exit(EXIT_FAILURE);
}
#endif
- if (SUCCEED != zabbix_open_log(CONFIG_LOG_TYPE, CONFIG_LOG_LEVEL, CONFIG_LOG_FILE, &error))
+ if (SUCCEED != zabbix_open_log(&log_file_cfg, CONFIG_LOG_LEVEL, &error))
{
zbx_error("cannot open log: %s", error);
zbx_free(error);
@@ -1119,7 +1132,7 @@ int MAIN_ZABBIX_ENTRY(int flags)
zabbix_log(LOG_LEVEL_INFORMATION, "TLS support: " TLS_FEATURE_STATUS);
zabbix_log(LOG_LEVEL_INFORMATION, "**************************");
- zabbix_log(LOG_LEVEL_INFORMATION, "using configuration file: %s", CONFIG_FILE);
+ zabbix_log(LOG_LEVEL_INFORMATION, "using configuration file: %s", config_file);
#if !defined(_WINDOWS) && (defined(HAVE_GNUTLS) || defined(HAVE_OPENSSL))
if (SUCCEED != zbx_coredump_disable())
@@ -1209,7 +1222,8 @@ int MAIN_ZABBIX_ENTRY(int flags)
{
zbx_thread_args_t *thread_args;
zbx_thread_info_t *thread_info;
- zbx_thread_listener_args listener_args = {&listen_sock, zbx_config_tls, get_program_type};
+ zbx_thread_listener_args listener_args = {&listen_sock, zbx_config_tls, get_program_type,
+ config_file};
thread_args = (zbx_thread_args_t *)zbx_malloc(NULL, sizeof(zbx_thread_args_t));
thread_info = &thread_args->info;
@@ -1243,7 +1257,7 @@ int MAIN_ZABBIX_ENTRY(int flags)
}
#ifdef _WINDOWS
- set_parent_signal_handler(zbx_on_exit); /* must be called after all threads are created */
+ zbx_set_parent_signal_handler(zbx_on_exit); /* must be called after all threads are created */
/* wait for an exiting thread */
res = WaitForMultipleObjectsEx(threads_num, threads, FALSE, INFINITE, FALSE);
@@ -1334,7 +1348,11 @@ int main(int argc, char **argv)
char *error = NULL;
#ifdef _WINDOWS
int ret;
-
+#endif
+#if defined(_WINDOWS) || defined(__MINGW32__)
+ zbx_init_library_win32(&get_progname);
+#endif
+#ifdef _WINDOWS
/* Provide, so our process handles errors instead of the system itself. */
/* Attention!!! */
/* The system does not display the critical-error-handler message box. */
@@ -1486,9 +1504,10 @@ int main(int argc, char **argv)
}
#if defined(ZABBIX_SERVICE)
- service_start(t.flags);
+ zbx_service_start(t.flags);
#elif defined(ZABBIX_DAEMON)
- zbx_daemon_start(CONFIG_ALLOW_ROOT, CONFIG_USER, t.flags, get_pid_file_path, zbx_on_exit);
+ zbx_daemon_start(config_allow_root, CONFIG_USER, t.flags, get_pid_file_path, zbx_on_exit,
+ log_file_cfg.log_type, log_file_cfg.log_file_name);
#endif
exit(EXIT_SUCCESS);
}