It works, looks good to me except one small thing.
You can use g_list_search_full(list, VALUE, (GCompareFunc)g_strcmp) instead of
own is_string_in_list(list, VALUE).
On Wednesday, February 20, 2013 03:50:22 PM Jiri Moskovcak wrote:
---
src/daemon/abrt-action-save-package-data.c | 50
+++++++++++++++++++++------ src/daemon/abrt-action-save-package-data.conf |
3 ++
2 files changed, 43 insertions(+), 10 deletions(-)
diff --git a/src/daemon/abrt-action-save-package-data.c
b/src/daemon/abrt-action-save-package-data.c index 8921b6c..8060d16 100644
--- a/src/daemon/abrt-action-save-package-data.c
+++ b/src/daemon/abrt-action-save-package-data.c
@@ -25,6 +25,7 @@ static GList *settings_setOpenGPGPublicKeys = NULL;
static GList *settings_setBlackListedPkgs = NULL;
static GList *settings_setBlackListedPaths = NULL;
static bool settings_bProcessUnpackaged = false;
+static GList *settings_Interpreters = NULL;
static GList *parse_list(const char* list)
{
@@ -88,6 +89,13 @@ static void ParseCommon(map_string_h *settings, const
char *conf_filename) g_hash_table_remove(settings, "ProcessUnpackaged");
}
+ value = g_hash_table_lookup(settings, "Interpreters");
+ if (value)
+ {
+ settings_Interpreters = parse_list(value);
+ g_hash_table_remove(settings, "Interpreters");
+ }
+
GHashTableIter iter;
char *name;
/*char *value; - already declared */
@@ -181,6 +189,17 @@ static bool is_path_blacklisted(const char *path)
return false;
}
+static bool is_string_in_list(GList *list, const char *string)
+{
+ GList *li;
+ for (li = list; li != NULL; li = g_list_next(li))
+ {
+ if (strcmp((char *)li->data, string) == 0)
+ return true;
+ }
+ return false;
+}
+
static struct pkg_envra *get_script_name(const char *cmdline, char
**executable) {
// TODO: we don't verify that python executable is not modified
@@ -282,12 +301,27 @@ static int SavePackageDescriptionToDebugDump(const
char *dump_dir_name) else
basename = executable;
- if (!strcmp(basename, "python")
- || !strcmp(basename, "perl"))
+ /* if basename is known interpreter, we want to blame the running
script + * not the interpreter
+ */
+ if (is_string_in_list(settings_Interpreters, basename))
{
struct pkg_envra *script_pkg = get_script_name(cmdline,
&executable); if (!script_pkg)
- goto ret;
+ {
+ /* none or unknown script, and config says we don't care about
+ * unpackaged things
+ */
+ if (!settings_bProcessUnpackaged)
+ goto ret;
+
+ /* unpackaged script, but the settings says we want to keep it
+ * bz plugin wont allow to report this anyway, because
component + * is missing, so there is no reason to mark it as
not_reportable + * someone might want to use abrt to report it
using ftp + */
+ goto ret0;
+ }
free_pkg_envra(pkg_name);
pkg_name = script_pkg;
@@ -296,15 +330,11 @@ static int SavePackageDescriptionToDebugDump(const
char *dump_dir_name) package_short_name = xasprintf("%s",
pkg_name->p_name);
VERB2 log("Package:'%s' short:'%s'", pkg_name->p_nvr,
package_short_name);
- GList *li;
- for (li = settings_setBlackListedPkgs; li != NULL; li =
g_list_next(li)) + if (is_string_in_list(settings_setBlackListedPkgs,
package_short_name)) {
- if (strcmp((char*)li->data, package_short_name) == 0)
- {
- log("Blacklisted package '%s'", package_short_name);
- goto ret; /* return 1 (failure) */
- }
+ log("Blacklisted package '%s'", package_short_name);
+ goto ret; /* return 1 (failure) */
}
if (settings_bOpenGPGCheck)
diff --git a/src/daemon/abrt-action-save-package-data.conf
b/src/daemon/abrt-action-save-package-data.conf index 643259a..3d35bb6
100644
--- a/src/daemon/abrt-action-save-package-data.conf
+++ b/src/daemon/abrt-action-save-package-data.conf
@@ -16,3 +16,6 @@ ProcessUnpackaged = no
# Blacklisted executable paths (shell patterns)
#
BlackListedPaths = /usr/share/doc/*, */example*, /usr/bin/nspluginviewer,
/usr/lib/xulrunner-*/plugin-container +
+# interpreters names
+Interpreters = python2, python2.7, python, python3, python3.3, perl,
perl5.16.2