]> granicus.if.org Git - icinga2/commitdiff
Fix external command pipe: Too many open files
authorMichael Friedrich <michael.friedrich@netways.de>
Thu, 14 Aug 2014 14:15:01 +0000 (16:15 +0200)
committerMichael Friedrich <michael.friedrich@netways.de>
Thu, 14 Aug 2014 14:15:01 +0000 (16:15 +0200)
fixes #6916

components/compat/externalcommandlistener.cpp
tools/scripts/process_check_result

index 64ec44dfad3f1bbaf31c75769b4f68ef96b80cd1..fe25bc4c3f0969e1b9b45510ebb8321750f04497 100644 (file)
@@ -111,9 +111,7 @@ void ExternalCommandListener::CommandPipeThread(const String& commandPath)
                                return;
                        }
 
-
-
-                       Log(LogNotice, "ExternalCommandListener", "Client connected");
+                       Log(LogDebug, "ExternalCommandListener", "Client connected");
                        Utility::QueueAsyncCallback(boost::bind(&ExternalCommandListener::ClientHandler, this, commandPath, fd));
                } catch (std::exception&) {
                        Log(LogCritical, "ExternalCommandListener", "Cannot accept new connection.");
@@ -144,6 +142,19 @@ void ExternalCommandListener::ClientHandler(const String& commandPath, int fd)
 
        String command = line;
 
+       if (command.IsEmpty()) {
+               fclose(fp);
+               return;
+       }
+
+       /* check if line contains [$unixts] */
+       if (line[0] != '[' || line[11] != ']') {
+               Log(LogDebug, "ExternalCommandListener", "Cannot find timestamp prefix in external command '" + command + "'. Bailing out.");
+               delete line;
+               fclose(fp);
+               return;
+       }
+
        try {
                Log(LogInformation, "ExternalCommandListener", "Executing external command: " + command);
 
@@ -152,7 +163,6 @@ void ExternalCommandListener::ClientHandler(const String& commandPath, int fd)
                std::ostringstream msgbuf;
                msgbuf << "External command failed.";
                Log(LogWarning, "ExternalCommandListener", msgbuf.str());
-               return;
        }
 
        delete line;
index 6d01ace0c1dfb987a3b63c52e15eb9cb4690e5ed..c329c05546411e0f729b0a0c9fcd99930f05c18e 100755 (executable)
@@ -89,6 +89,6 @@ else
 fi
 
 echo "Sending '$ECHO $CMDLINE >> $CMDFILE'"
-`$ECHO $CMDLINE >> $CMDFILE`
+`$ECHO "$CMDLINE" >> $CMDFILE`
 
 exit 0