Module: check_mk
Branch: master
Commit: 48a82177206d7442a9c9cbda28c57075e3d68102
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=48a82177206d74…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Fri Aug 15 11:29:25 2014 +0200
#1007 FIX check_mkevents: fix case where events contain binary zeroes
---
.werks/1007 | 9 +++++++++
ChangeLog | 3 +++
mkeventd/lib/check_mkevents.cc | 16 ++++++++++++----
3 files changed, 24 insertions(+), 4 deletions(-)
diff --git a/.werks/1007 b/.werks/1007
new file mode 100644
index 0000000..a964816
--- /dev/null
+++ b/.werks/1007
@@ -0,0 +1,9 @@
+Title: check_mkevents: fix case where events contain binary zeroes
+Level: 1
+Component: ec
+Compatible: compat
+Version: 1.2.5i6
+Date: 1408094945
+Class: fix
+
+
diff --git a/ChangeLog b/ChangeLog
index 22dfa2c..097f997 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -50,6 +50,9 @@
* 1153 FIX: Changed custom user attributes can now be used immediately...
* 0201 FIX: Fixed error message in Rulelist of RBN...
+ Event Console:
+ * 1007 FIX: check_mkevents: fix case where events contain binary zeroes
+
HW/SW-Inventory:
* 0643 windows inventory: OS now contains the install date, reg_uninstall now
contains the path...
NOTE: Please refer to the migration notes!
diff --git a/mkeventd/lib/check_mkevents.cc b/mkeventd/lib/check_mkevents.cc
index 8f1ceb1..5879af4 100644
--- a/mkeventd/lib/check_mkevents.cc
+++ b/mkeventd/lib/check_mkevents.cc
@@ -22,7 +22,6 @@
// to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
// Boston, MA 02110-1301 USA.
-
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
@@ -182,11 +181,18 @@ int main(int argc, char** argv)
int length = write(sock, query_message.c_str(), query_message.length());
// Get response
- char response_chunk[2048];
+ char response_chunk[4096];
memset(response_chunk, 0, sizeof(response_chunk));
stringstream response_stream;
- while (read(sock, response_chunk, sizeof(response_chunk))){
- response_stream << response_chunk;
+ int read_length;
+ while (0 < (read_length = read(sock, response_chunk, sizeof(response_chunk))))
+ {
+ // replace binary 0 in response with space
+ for (int i=0; i<read_length; i++) {
+ if (response_chunk[i] == 0)
+ response_chunk[i] = ' ';
+ }
+ response_stream << string(response_chunk, read_length);
memset(response_chunk, 0, sizeof(response_chunk));
}
close(sock);
@@ -226,6 +232,8 @@ int main(int argc, char** argv)
// Get data
vector< vector<string> > data;
while (getline(response_stream, line)) {
+ if (line.size() < headers.size())
+ break; // broken / empty line
linestream.str("");
linestream.clear();
linestream << line;