Module: check_mk
Branch: master
Commit: becaf05fa4a8cf2fa8755d635cf6ac8416fb4b8d
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=becaf05fa4a8cf…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Tue Nov 15 16:44:31 2011 +0100
Windows agent: make extensions to execute configurable
---
ChangeLog | 2 +
agents/windows/check_mk.ini | 8 ++++++-
agents/windows/check_mk_agent.cc | 40 +++++++++++++++++++++++++++++++++++-
agents/windows/check_mk_agent.exe | Bin 101376 -> 101888 bytes
4 files changed, 47 insertions(+), 3 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index f8c8d5d..2d92ae1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -17,6 +17,8 @@
for examples.
* Windows agent: do not execute *.txt and *.dir in <<<plugins>>>
and
<<<local>>>
+ * Windows agent: make extensions to execute configurable (see
+ example check_mk.ini)
* Windows agent: agent now reuses TCP port even when taskkill'ed, so
a system reboot is (hopefully) not neccessary anymore
* Windows agent: section <<<df>>> now also outputs junctions
(windows
diff --git a/agents/windows/check_mk.ini b/agents/windows/check_mk.ini
index e208b6e..c156a0f 100644
--- a/agents/windows/check_mk.ini
+++ b/agents/windows/check_mk.ini
@@ -2,12 +2,18 @@
# Restrict access to certain IP addresses
# only_from = 127.0.0.1 192.168.56.0/24
+ # Do only execute programs and scripts with
+ # the following suffixes (in local and plugins).
+ # Per default all extensions except txt and dir
+ # are being executed.
+ # execute = exe bat vbs
+
# Restrict the following configuration variables
# in [global] to the following hosts
# host = winsrv* zab???ad
# Just output certain sections (e.g. for upper hosts)
- # sections = check_mk df
+ # sections = check_mk plugins df
[winperf]
diff --git a/agents/windows/check_mk_agent.cc b/agents/windows/check_mk_agent.cc
index 7717858..e911a62 100755
--- a/agents/windows/check_mk_agent.cc
+++ b/agents/windows/check_mk_agent.cc
@@ -96,6 +96,7 @@
#define MAX_ONLY_FROM 32
#define MAX_WINPERF_COUNTERS 64
#define MAX_MRPE_COMMANDS 64
+#define MAX_EXECUTE_SUFFIXES 64
// Default buffer size for reading performance counters
#define DEFAULT_BUFFER_SIZE 40960L
@@ -191,6 +192,9 @@ unsigned int g_num_winperf_counters = 0;
struct mrpe_entry g_mrpe_entries[MAX_MRPE_COMMANDS];
unsigned int g_num_mrpe_entries = 0;
+// Configuration of execution suffixed
+unsigned g_num_execute_suffixes = 0;
+char *g_execute_suffixes[MAX_EXECUTE_SUFFIXES];
// .----------------------------------------------------------------------.
// | _ _ _ |
@@ -1320,8 +1324,20 @@ bool banned_exec_name(char *name)
return false;
char *extension = name + strlen(name) - 4;
- return ( !strcasecmp(extension, ".dir")
- || !strcasecmp(extension, ".txt"));
+ if (g_num_execute_suffixes) {
+ if (extension[0] != '.')
+ return true;
+ extension ++;
+ unsigned i;
+ for (i=0; i<g_num_execute_suffixes; i++)
+ if (!strcasecmp(extension, g_execute_suffixes[i]))
+ return false;
+ return true;
+ }
+ else{
+ return ( !strcasecmp(extension, ".dir")
+ || !strcasecmp(extension, ".txt"));
+ }
}
void run_plugin(SOCKET &out, char *path)
@@ -1795,12 +1811,30 @@ void parse_only_from(char *value)
add_only_from(word);
}
+void parse_execute(char *value)
+{
+ // clean array if this options has been parsed already
+ while (g_num_execute_suffixes)
+ free(g_execute_suffixes[--g_num_execute_suffixes]);
+
+ char *suffix;
+ while (0 != (suffix = next_word(&value))) {
+ if (g_num_execute_suffixes < MAX_EXECUTE_SUFFIXES) {
+ g_execute_suffixes[g_num_execute_suffixes++] = strdup(suffix);
+ }
+ }
+}
+
bool handle_global_config_variable(char *var, char *value)
{
if (!strcmp(var, "only_from")) {
parse_only_from(value);
return true;
}
+ else if (!strcmp(var, "execute")) {
+ parse_execute(value);
+ return true;
+ }
else if (!strcmp(var, "sections")) {
enabled_sections = 0;
char *word;
@@ -2326,6 +2360,8 @@ void cleanup()
if (eventlog_buffer_size > 0)
delete [] eventlog_buffer;
unregister_all_eventlogs(); // frees a few bytes
+ while (g_num_execute_suffixes)
+ free(g_execute_suffixes[--g_num_execute_suffixes]);
}
void show_version()
diff --git a/agents/windows/check_mk_agent.exe b/agents/windows/check_mk_agent.exe
index 19d8e36..e2e4994 100755
Binary files a/agents/windows/check_mk_agent.exe and b/agents/windows/check_mk_agent.exe
differ