summaryrefslogtreecommitdiffstats
path: root/lib/plugins/RunApp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/plugins/RunApp.cpp')
-rw-r--r--lib/plugins/RunApp.cpp76
1 files changed, 76 insertions, 0 deletions
diff --git a/lib/plugins/RunApp.cpp b/lib/plugins/RunApp.cpp
new file mode 100644
index 00000000..69c9384c
--- /dev/null
+++ b/lib/plugins/RunApp.cpp
@@ -0,0 +1,76 @@
+/*
+ RunApp.cpp
+
+ Copyright (C) 2009 Zdenek Prikryl (zprikryl@redhat.com)
+ Copyright (C) 2009 RedHat inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+#include "abrtlib.h"
+#include "RunApp.h"
+#include "debug_dump.h"
+#include "abrt_exception.h"
+#include "comm_layer_inner.h"
+#include "abrtlib.h"
+
+#define COMMAND 0
+#define FILENAME 1
+
+using namespace std;
+
+void CActionRunApp::Run(const char *pActionDir, const char *pArgs, int force)
+{
+ /* Don't update_client() - actions run at crash time, there is no client
+ * to talk to at that point */
+ log("RunApp('%s','%s')", pActionDir, pArgs);
+
+ vector_string_t args;
+ parse_args(pArgs, args, '"');
+
+ if (args.size() <= COMMAND)
+ {
+ return;
+ }
+ const char *cmd = args[COMMAND].c_str();
+ if (!cmd[0])
+ {
+ return;
+ }
+
+ /* NB: we chdir to the dump dir. Command can analyze component and such.
+ * Example:
+ * test x"`cat component`" = x"xorg-x11-apps" && cp /var/log/Xorg.0.log .
+ */
+ size_t cmd_out_size;
+ char *cmd_out = run_in_shell_and_save_output(/*flags:*/ 0, cmd, pActionDir, &cmd_out_size);
+
+ if (args.size() > FILENAME)
+ {
+ CDebugDump dd;
+ dd.Open(pActionDir);
+ dd.SaveBinary(args[FILENAME].c_str(), cmd_out, cmd_out_size);
+ }
+
+ free(cmd_out);
+}
+
+PLUGIN_INFO(ACTION,
+ CActionRunApp,
+ "RunApp",
+ "0.0.1",
+ _("Runs a command, saves its output"),
+ "zprikryl@redhat.com",
+ "https://fedorahosted.org/abrt/wiki",
+ "");