Fix external command pipe: Too many open files

fixes #6916
This commit is contained in:
Michael Friedrich 2014-08-14 16:15:01 +02:00
parent a6335a7cdf
commit 1a3f7d774c
2 changed files with 15 additions and 5 deletions

View File

@ -111,9 +111,7 @@ void ExternalCommandListener::CommandPipeThread(const String& commandPath)
return; return;
} }
Log(LogDebug, "ExternalCommandListener", "Client connected");
Log(LogNotice, "ExternalCommandListener", "Client connected");
Utility::QueueAsyncCallback(boost::bind(&ExternalCommandListener::ClientHandler, this, commandPath, fd)); Utility::QueueAsyncCallback(boost::bind(&ExternalCommandListener::ClientHandler, this, commandPath, fd));
} catch (std::exception&) { } catch (std::exception&) {
Log(LogCritical, "ExternalCommandListener", "Cannot accept new connection."); Log(LogCritical, "ExternalCommandListener", "Cannot accept new connection.");
@ -144,6 +142,19 @@ void ExternalCommandListener::ClientHandler(const String& commandPath, int fd)
String command = line; 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 { try {
Log(LogInformation, "ExternalCommandListener", "Executing external command: " + command); Log(LogInformation, "ExternalCommandListener", "Executing external command: " + command);
@ -152,7 +163,6 @@ void ExternalCommandListener::ClientHandler(const String& commandPath, int fd)
std::ostringstream msgbuf; std::ostringstream msgbuf;
msgbuf << "External command failed."; msgbuf << "External command failed.";
Log(LogWarning, "ExternalCommandListener", msgbuf.str()); Log(LogWarning, "ExternalCommandListener", msgbuf.str());
return;
} }
delete line; delete line;

View File

@ -89,6 +89,6 @@ else
fi fi
echo "Sending '$ECHO $CMDLINE >> $CMDFILE'" echo "Sending '$ECHO $CMDLINE >> $CMDFILE'"
`$ECHO $CMDLINE >> $CMDFILE` `$ECHO "$CMDLINE" >> $CMDFILE`
exit 0 exit 0