Module: check_mk
Branch: master
Commit: 0baa4692f1c264751a140cc442ae4c0b7674dabf
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=0baa4692f1c264…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Thu Aug 18 18:33:48 2011 +0200
Livestatus: WaitObject allow semicolon as a separator
This allows for spaces in host names
---
ChangeLog | 4 ++++
livestatus/src/TableServices.cc | 19 +++++++++++++++++--
livestatus/src/strutil.cc | 3 ++-
livestatus/src/strutil.h | 4 ++--
4 files changed, 25 insertions(+), 5 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index c4da707..eefc534 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -8,6 +8,10 @@
new log messages per log file
* Windows Agent: Now supports direct execution of powershell scripts
+ MK Livestatus:
+ * WaitObject: allow to separate host name and service with a semicolon.
+ That makes host names containing spaces possible.
+
1.1.11i2:
Core, Setup, etc.:
* FIX: sort output of cmk --list-hosts alphabetically
diff --git a/livestatus/src/TableServices.cc b/livestatus/src/TableServices.cc
index 05993ba..e1e48ca 100644
--- a/livestatus/src/TableServices.cc
+++ b/livestatus/src/TableServices.cc
@@ -374,7 +374,22 @@ void TableServices::addColumns(Table *table, string prefix, int
indirect_offset,
void *TableServices::findObject(char *objectspec)
{
- char *host_name = next_field(&objectspec);
- char *description = objectspec;
+ char *host_name;
+ char *description;
+
+ // The protocol proposes spaces as a separator between
+ // the host name and the service description. That introduces
+ // the problem that host name containing spaces will not work.
+ // For that reason we alternatively allow a semicolon as a separator.
+ char *semicolon = strchr(objectspec, ';');
+ if (semicolon) {
+ *semicolon = 0;
+ host_name = rstrip(objectspec);
+ description = rstrip(semicolon + 1);
+ }
+ else {
+ host_name = next_field(&objectspec);
+ description = objectspec;
+ }
return find_service(host_name, description);
}
diff --git a/livestatus/src/strutil.cc b/livestatus/src/strutil.cc
index 0511f6b..29a9d62 100644
--- a/livestatus/src/strutil.cc
+++ b/livestatus/src/strutil.cc
@@ -27,11 +27,12 @@
#include "strutil.h"
-void rstrip(char *c)
+char *rstrip(char *c)
{
char *w = c + strlen(c) - 1;
while (w >= c && isspace(*w))
*w-- = '\0';
+ return c;
}
char *lstrip(char *c)
diff --git a/livestatus/src/strutil.h b/livestatus/src/strutil.h
index 611008a..9565d8d 100644
--- a/livestatus/src/strutil.h
+++ b/livestatus/src/strutil.h
@@ -30,8 +30,8 @@
#ifdef __cplusplus
extern "C" {
#endif
- void rstrip(char *);
- char *lstrip(char *line);
+ char *rstrip(char *);
+ char *lstrip(char *);
int ends_with(const char *a, const char *b);
#ifdef __cplusplus
char *next_token(char **c, char delim = ',');