New upstream release 2.6.0

This commit is contained in:
Jakub Filak 2015-06-10 08:32:19 +02:00
parent 34dad7f6af
commit a8bf279ba2
16 changed files with 45 additions and 2347 deletions

1
.gitignore vendored
View File

@ -41,3 +41,4 @@ abrt-1.1.13.tar.gz
/abrt-2.4.0.tar.gz
/abrt-2.5.0.tar.gz
/abrt-2.5.1.tar.gz
/abrt-2.6.0.tar.gz

View File

@ -1,427 +0,0 @@
From a2977b0fe023a896c3006f27ee2b148690dff24a Mon Sep 17 00:00:00 2001
From: Jakub Filak <jfilak@redhat.com>
Date: Wed, 8 Apr 2015 08:23:03 +0200
Subject: [PATCH] applet: switch to D-Bus methods
This patch is a part of our efforts to make abrt-applet independent on
the backend.
This patch converts all data manipulation functions to D-Bus calls, so
the notifications are made of data obtained through D-Bus.
The reporting still relies on file system access, though.
Signed-off-by: Jakub Filak <jfilak@redhat.com>
---
src/applet/applet.c | 181 ++++++++++++++++++++++++++++-----------------
src/include/libabrt.h | 16 ++++
src/lib/problem_api_dbus.c | 61 +++++++++++----
3 files changed, 174 insertions(+), 84 deletions(-)
diff --git a/src/applet/applet.c b/src/applet/applet.c
index 7b58f6e..4df69fc 100644
--- a/src/applet/applet.c
+++ b/src/applet/applet.c
@@ -120,6 +120,7 @@ typedef struct problem_info {
bool reported;
bool was_announced;
bool is_writable;
+ int time;
} problem_info_t;
static void push_to_deferred_queue(problem_info_t *pi)
@@ -137,6 +138,59 @@ static const char *problem_info_get_command_line(problem_info_t *pi)
return problem_data_get_content_or_NULL(pi->problem_data, FILENAME_CMDLINE);
}
+static int problem_info_get_time(problem_info_t *pi)
+{
+ if (pi->time == -1)
+ {
+ const char *time_str = problem_data_get_content_or_NULL(pi->problem_data, FILENAME_TIME);
+
+ if (time_str == NULL)
+ error_msg_and_die("BUG: Problem info has data without the element time");
+
+ pi->time = atoi(time_str);
+ }
+
+ return pi->time;
+}
+
+static const char **problem_info_get_env(problem_info_t *pi)
+{
+ if (pi->envp == NULL)
+ {
+ const char *env_str = problem_data_get_content_or_NULL(pi->problem_data, FILENAME_ENVIRON);
+ pi->envp = (env_str != NULL) ? g_strsplit (env_str, "\n", -1) : NULL;
+ }
+
+ return (const char **)pi->envp;
+}
+
+static int problem_info_get_pid(problem_info_t *pi)
+{
+ if (pi->pid == -1)
+ {
+ const char *pid_str = problem_data_get_content_or_NULL(pi->problem_data, FILENAME_PID);
+ pi->pid = (pid_str != NULL) ? atoi (pid_str) : -1;
+ }
+
+ return pi->pid;
+}
+
+static int problem_info_get_count(problem_info_t *pi)
+{
+ if (pi->count == -1)
+ {
+ const char *count_str = problem_data_get_content_or_NULL(pi->problem_data, FILENAME_COUNT);
+ pi->count = count_str ? atoi(count_str) : 1;
+ }
+
+ return pi->count;
+}
+
+static bool problem_info_is_reported(problem_info_t *pi)
+{
+ return problem_data_get_content_or_NULL(pi->problem_data, FILENAME_REPORTED_TO) != NULL;
+}
+
static void problem_info_set_dir(problem_info_t *pi, const char *dir)
{
problem_data_add_text_noteditable(pi->problem_data, CD_DUMPDIR, dir);
@@ -176,6 +230,9 @@ static problem_info_t *problem_info_new(const char *dir)
{
problem_info_t *pi = g_new0(problem_info_t, 1);
pi->refcount = 1;
+ pi->time = -1;
+ pi->pid = -1;
+ pi->count = -1;
pi->problem_data = problem_data_new();
problem_info_set_dir(pi, dir);
return pi;
@@ -194,8 +251,6 @@ static void problem_info_unref(gpointer data)
return;
problem_data_free(pi->problem_data);
- if (pi->envp)
- g_strfreev(pi->envp);
g_free(pi);
}
@@ -556,7 +611,7 @@ static void notify_problem_list(GList *problems)
continue;
}
- app = problem_create_app_from_env ((const char **)pi->envp, pi->pid);
+ app = problem_create_app_from_env (problem_info_get_env(pi), problem_info_get_pid(pi));
if (!app)
app = problem_create_app_from_cmdline (problem_info_get_command_line(pi));
@@ -572,7 +627,7 @@ static void notify_problem_list(GList *problems)
gboolean is_packaged = pi->is_packaged;
gboolean is_running_again = is_app_running(app);
gboolean is_current_user = !pi->foreign;
- gboolean already_reported = (pi->count > 1);
+ gboolean already_reported = problem_info_get_count(pi) > 1;
gboolean report_button = FALSE;
gboolean restart_button = FALSE;
@@ -914,14 +969,22 @@ static void Crash(GVariant *parameters)
if (foreign_problem && !g_user_is_admin)
return;
- struct dump_dir *dd = dd_opendir(dir, DD_OPEN_READONLY);
- char *command_line = dd_load_text_ext(dd, FILENAME_CMDLINE, DD_FAIL_QUIETLY_ENOENT | DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE);
- char *count_str = dd_load_text_ext(dd, FILENAME_COUNT, DD_FAIL_QUIETLY_ENOENT | DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE);
- guint count = count_str ? atoi(count_str) : 1;
- g_free(count_str);
- char *env = dd_load_text_ext(dd, FILENAME_ENVIRON, DD_FAIL_QUIETLY_ENOENT | DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE);
- char *pid = dd_load_text_ext(dd, FILENAME_PID, DD_FAIL_QUIETLY_ENOENT | DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE);
- dd_close(dd);
+ static const char *elements[] = {
+ FILENAME_CMDLINE,
+ FILENAME_COUNT,
+ FILENAME_UUID,
+ FILENAME_DUPHASH,
+ FILENAME_COMPONENT,
+ FILENAME_ENVIRON,
+ FILENAME_PID,
+ NULL,
+ };
+
+ problem_info_t *pi = problem_info_new(dir);
+ fill_problem_data_over_dbus(dir, elements, pi->problem_data);
+
+ pi->foreign = foreign_problem;
+ pi->is_packaged = (package_name != NULL);
/*
* Can't append dir to the seen list because of directory stealing
@@ -929,24 +992,6 @@ static void Crash(GVariant *parameters)
* append_dirlist(dir);
*
*/
-
- problem_info_t *pi = problem_info_new(dir);
- if (uuid != NULL && uuid[0] != '\0')
- problem_data_add_text_noteditable(pi->problem_data, FILENAME_UUID, uuid);
- if (duphash != NULL && duphash[0] != '\0')
- problem_data_add_text_noteditable(pi->problem_data, FILENAME_DUPHASH, duphash);
- if (package_name != NULL && package_name[0] != '\0')
- problem_data_add_text_noteditable(pi->problem_data, FILENAME_COMPONENT, package_name);
- if (command_line != NULL)
- problem_data_add_text_noteditable(pi->problem_data, FILENAME_CMDLINE, command_line);
- pi->foreign = foreign_problem;
- pi->count = count;
- pi->is_packaged = (package_name != NULL);
- pi->envp = (env != NULL) ? g_strsplit (env, "\n", -1) : NULL;
- pi->pid = (pid != NULL) ? atoi (pid) : -1;
- free(command_line);
- free(env);
- free(pid);
show_problem_notification(pi);
}
@@ -970,6 +1015,19 @@ name_acquired_handler (GDBusConnection *connection,
const gchar *name,
gpointer user_data)
{
+ static const char *elements[] = {
+ FILENAME_CMDLINE,
+ FILENAME_COUNT,
+ FILENAME_UUID,
+ FILENAME_DUPHASH,
+ FILENAME_COMPONENT,
+ FILENAME_UID,
+ FILENAME_TIME,
+ FILENAME_REPORTED_TO,
+ FILENAME_NOT_REPORTABLE,
+ NULL
+ };
+
/* If some new dirs appeared since our last run, let user know it */
GList *new_dirs = NULL;
GList *notify_list = NULL;
@@ -980,58 +1038,45 @@ name_acquired_handler (GDBusConnection *connection,
/* Age limit = now - 3 days */
const unsigned long min_born_time = (unsigned long)(time_before_ndays(3));
- while (new_dirs)
+ for ( ; new_dirs != NULL; new_dirs = g_list_next(new_dirs))
{
- struct dump_dir *dd = dd_opendir((char *)new_dirs->data, DD_OPEN_READONLY);
- if (dd == NULL)
+ const char *problem_id = (const char *)new_dirs->data;
+ problem_info_t *pi = problem_info_new(problem_id);
+
+ if (fill_problem_data_over_dbus(problem_id, elements, pi->problem_data) != 0)
{
- log_notice("'%s' is not a dump dir - ignoring\n", (char *)new_dirs->data);
- new_dirs = g_list_next(new_dirs);
+ log_notice("'%s' is not a dump dir - ignoring\n", problem_id);
+ problem_info_unref(pi);
continue;
}
- if (dd->dd_time < min_born_time)
+ /* TODO: add a filter for only complete problems to GetProblems D-Bus method */
+ if (!dbus_problem_is_complete(problem_id))
{
- log_notice("Ignoring outdated problem '%s'", (char *)new_dirs->data);
- goto next;
+ log_notice("Ignoring incomplete problem '%s'", problem_id);
+ problem_info_unref(pi);
+ continue;
}
- if (!problem_dump_dir_is_complete(dd))
+ /* TODO: add a filter for max-old reported problems to GetProblems D-Bus method */
+ if (problem_info_get_time(pi) < min_born_time)
{
- log_notice("Ignoring incomplete problem '%s'", (char *)new_dirs->data);
- goto next;
+ log_notice("Ignoring outdated problem '%s'", problem_id);
+ problem_info_unref(pi);
+ continue;
}
- if (!dd_exist(dd, FILENAME_REPORTED_TO))
+ /* TODO: add a filter for not-yet reported problems to GetProblems D-Bus method */
+ if (problem_info_is_reported(pi))
{
- problem_info_t *pi = problem_info_new(new_dirs->data);
- const char *elements[] = {FILENAME_UUID, FILENAME_DUPHASH, FILENAME_COMPONENT, FILENAME_NOT_REPORTABLE, FILENAME_CMDLINE};
-
- for (size_t i = 0; i < sizeof(elements)/sizeof(*elements); ++i)
- {
- char * const value = dd_load_text_ext(dd, elements[i],
- DD_FAIL_QUIETLY_ENOENT | DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE);
- if (value)
- problem_data_add_text_noteditable(pi->problem_data, elements[i], value);
- free(value);
- }
-
- /* Can't be foreign because if the problem is foreign then the
- * dd_opendir() call failed few lines above and the problem is ignored.
- * */
- pi->foreign = false;
-
- notify_list = g_list_prepend(notify_list, pi);
- }
- else
- {
- log_notice("Ignoring already reported problem '%s'", (char *)new_dirs->data);
+ log_notice("Ignoring already reported problem '%s'", problem_id);
+ problem_info_unref(pi);
+ continue;
}
-next:
- dd_close(dd);
-
- new_dirs = g_list_next(new_dirs);
+ /* Can't be foreig because new_dir_exists() returns only own problems */
+ pi->foreign = false;
+ notify_list = g_list_prepend(notify_list, pi);
}
if (notify_list)
diff --git a/src/include/libabrt.h b/src/include/libabrt.h
index 19ad4a8..07dc172 100644
--- a/src/include/libabrt.h
+++ b/src/include/libabrt.h
@@ -164,6 +164,15 @@ int chown_dir_over_dbus(const char *problem_dir_path);
int test_exist_over_dbus(const char *problem_id, const char *element_name);
/**
+ @brief Checks whether the problem corresponding to the given ID is complete
+
+ Might require authorization
+
+ @return Positive number if such the proble is complete, 0 if doesn't and negative number if an error occurs.
+ */
+int dbus_problem_is_complete(const char *problem_id);
+
+/**
@ Returns value of the given element name
Might require authorization
@@ -182,6 +191,13 @@ char *load_text_over_dbus(const char *problem_id, const char *element_name);
int delete_problem_dirs_over_dbus(const GList *problem_dir_paths);
/**
+ @brief Fetches given problem elements for specified problem id
+
+ @return on failures returns non zero value and emits error message
+*/
+int fill_problem_data_over_dbus(const char *problem_dir_path, const char **elements, problem_data_t *problem_data);
+
+/**
@brief Fetches problem information for specified problem id
@return problem_data_t or NULL on failure
diff --git a/src/lib/problem_api_dbus.c b/src/lib/problem_api_dbus.c
index 5148932..ce5c47b 100644
--- a/src/lib/problem_api_dbus.c
+++ b/src/lib/problem_api_dbus.c
@@ -101,23 +101,21 @@ int delete_problem_dirs_over_dbus(const GList *problem_dir_paths)
return 0;
}
-problem_data_t *get_problem_data_dbus(const char *problem_dir_path)
+int fill_problem_data_over_dbus(const char *problem_id, const char **elements, problem_data_t *problem_data)
{
INITIALIZE_LIBABRT();
GDBusProxy *proxy = get_dbus_proxy();
if (!proxy)
- return NULL;
+ return -1;
- GVariantBuilder *builder = g_variant_builder_new(G_VARIANT_TYPE("as"));
- g_variant_builder_add(builder, "s", FILENAME_TIME );
- g_variant_builder_add(builder, "s", FILENAME_REASON );
- g_variant_builder_add(builder, "s", FILENAME_NOT_REPORTABLE);
- g_variant_builder_add(builder, "s", FILENAME_COMPONENT );
- g_variant_builder_add(builder, "s", FILENAME_EXECUTABLE );
- g_variant_builder_add(builder, "s", FILENAME_REPORTED_TO );
- GVariant *params = g_variant_new("(sas)", problem_dir_path, builder);
- g_variant_builder_unref(builder);
+ GVariantBuilder *args_builder = g_variant_builder_new(G_VARIANT_TYPE("as"));
+
+ for (const char **iter = elements; *iter; ++iter)
+ g_variant_builder_add(args_builder, "s", *iter);
+
+ GVariant *params = g_variant_new("(sas)", problem_id, args_builder);
+ g_variant_builder_unref(args_builder);
GError *error = NULL;
GVariant *result = g_dbus_proxy_call_sync(proxy,
@@ -130,20 +128,46 @@ problem_data_t *get_problem_data_dbus(const char *problem_dir_path)
if (error)
{
- error_msg(_("Can't get problem data from abrt-dbus: %s"), error->message);
+ error_msg(_("D-Bus GetInfo method call failed: %s"), error->message);
g_error_free(error);
- return NULL;
+ return -2;
}
- problem_data_t *pd = problem_data_new();
+
char *key, *val;
GVariantIter *iter;
g_variant_get(result, "(a{ss})", &iter);
while (g_variant_iter_loop(iter, "{ss}", &key, &val))
+ problem_data_add_text_noteditable(problem_data, key, val);
+
+ g_variant_unref(result);
+
+ return 0;
+}
+
+problem_data_t *get_problem_data_dbus(const char *problem_dir_path)
+{
+ INITIALIZE_LIBABRT();
+
+ static const char *elements[] = {
+ FILENAME_TIME,
+ FILENAME_REASON,
+ FILENAME_NOT_REPORTABLE,
+ FILENAME_COMPONENT,
+ FILENAME_EXECUTABLE,
+ FILENAME_REPORTED_TO,
+ NULL,
+ };
+
+ problem_data_t *pd = problem_data_new();
+
+ if (fill_problem_data_over_dbus(problem_dir_path, elements, pd) != 0)
{
- problem_data_add_text_noteditable(pd, key, val);
+ error_msg(_("Can't get problem data from abrt-dbus"));
+ problem_data_free(pd);
+ return NULL;
}
- g_variant_unref(result);
+
return pd;
}
@@ -259,6 +283,11 @@ int test_exist_over_dbus(const char *problem_id, const char *element_name)
return retval;
}
+int dbus_problem_is_complete(const char *problem_id)
+{
+ return test_exist_over_dbus(problem_id, FILENAME_COUNT);
+}
+
char *load_text_over_dbus(const char *problem_id, const char *element_name)
{
INITIALIZE_LIBABRT();
--
2.4.1

View File

@ -1,60 +0,0 @@
From e52d14214bd356f31856a5ab63ef14a60d318364 Mon Sep 17 00:00:00 2001
From: Jakub Filak <jfilak@redhat.com>
Date: Tue, 5 May 2015 10:46:06 +0200
Subject: [PATCH] lib: add new kernel taint flags
Signed-off-by: Jakub Filak <jfilak@redhat.com>
---
src/lib/kernel.c | 16 +++++++++++-----
1 file changed, 11 insertions(+), 5 deletions(-)
diff --git a/src/lib/kernel.c b/src/lib/kernel.c
index af43ae0..dde3d28 100644
--- a/src/lib/kernel.c
+++ b/src/lib/kernel.c
@@ -632,8 +632,14 @@ char *koops_extract_version(const char *linepointer)
* 'W' - Taint on warning.
* 'C' - modules from drivers/staging are loaded.
* 'I' - Working around severe firmware bug.
+ * 'O' - Out-of-tree module has been loaded.
+ * 'E' - Unsigned module has been loaded.
+ * 'L' - A soft lockup has previously occurred.
+ * 'K' - Kernel has been live patched.
+ *
+ * Compatibility flags from older versions and downstream sources:
* 'H' - Hardware is unsupported.
- * T - Tech_preview
+ * 'T' - Tech_preview
*/
#if 0 /* unused */
@@ -658,7 +664,7 @@ char *kernel_tainted_short(const char *kernel_bt)
return NULL;
tainted += strlen("Tainted: ");
- /* 13 == current count of known flags */
+ /* 17 + 2 == current count of known flags */
/* http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob_plain;f=kernel/panic.c;hb=HEAD */
/* 26 the maximal sane count of flags because of alphabet limits */
unsigned sz = 26 + 1;
@@ -701,14 +707,14 @@ static const char *const tnts_long[] = {
/* B */ "System has hit bad_page.",
/* C */ "Modules from drivers/staging are loaded.",
/* D */ "Kernel has oopsed before",
- /* E */ NULL,
+ /* E */ "Unsigned module has been loaded."
/* F */ "Module has been forcibly loaded.",
/* G */ "Proprietary module has not been loaded.",
/* H */ NULL,
/* I */ "Working around severe firmware bug.",
/* J */ NULL,
- /* K */ NULL,
- /* L */ NULL,
+ /* K */ "Kernel has been live patched.",
+ /* L */ "A soft lockup has previously occurred.",
/* M */ "System experienced a machine check exception.",
/* N */ NULL,
/* O */ "Out-of-tree module has been loaded.",
--
2.4.1

View File

@ -1,142 +0,0 @@
From 3746b7627218438ae7d781fc8b18a221454e9091 Mon Sep 17 00:00:00 2001
From: Jakub Filak <jfilak@redhat.com>
Date: Mon, 20 Apr 2015 15:15:40 +0200
Subject: [PATCH] upload: validate and sanitize uploaded dump directories
It was discovered that, when moving problem reports from
/var/spool/abrt-upload to /var/spool/abrt or /var/tmp/abrt,
abrt-handle-upload does not verify that the new problem directory
has appropriate permissions and does not contain symbolic links. A
crafted problem report exposes other parts of abrt to attack, and
the abrt-handle-upload script allows to overwrite arbitrary files.
Acknowledgement:
This issue was discovered by Florian Weimer of Red Hat Product Security.
Related: #1212953
Signed-off-by: Jakub Filak <jfilak@redhat.com>
---
src/daemon/abrt-handle-upload.in | 78 +++++++++++++++++++++++++++++++++++-----
1 file changed, 70 insertions(+), 8 deletions(-)
diff --git a/src/daemon/abrt-handle-upload.in b/src/daemon/abrt-handle-upload.in
index 45ba72d..e812ef0 100755
--- a/src/daemon/abrt-handle-upload.in
+++ b/src/daemon/abrt-handle-upload.in
@@ -10,6 +10,7 @@ import getopt
import tempfile
import shutil
import datetime
+import grp
from reportclient import set_verbosity, error_msg_and_die, error_msg, log
@@ -36,12 +37,77 @@ def init_gettext():
import problem
-def write_str_to(filename, s):
- fd = os.open(filename, os.O_WRONLY | os.O_CREAT | os.O_TRUNC, @DEFAULT_DUMP_DIR_MODE@ | stat.S_IROTH)
+def write_str_to(filename, s, uid, gid, mode):
+ fd = os.open(filename, os.O_WRONLY | os.O_CREAT | os.O_TRUNC, mode)
if fd >= 0:
+ os.fchown(fd, uid, gid)
os.write(fd, s)
os.close(fd)
+
+def validate_transform_move_and_notify(uploaded_dir_path, problem_dir_path, dest=None):
+ fsuid = 0
+ fsgid = 0
+
+ try:
+ gabrt = grp.getgrnam("abrt")
+ fsgid = gabrt.gr_gid
+ except KeyError as ex:
+ error_msg("Failed to get GID of 'abrt' (using 0 instead): {0}'".format(str(ex)))
+
+ try:
+ # give the uploaded directory to 'root:abrt' or 'root:root'
+ os.chown(uploaded_dir_path, fsuid, fsgid)
+ # set the right permissions for this machine
+ # (allow the owner and the group to access problem elements,
+ # the default dump dir mode lacks x bit for both)
+ os.chmod(uploaded_dir_path, @DEFAULT_DUMP_DIR_MODE@ | stat.S_IXUSR | stat.S_IXGRP)
+
+ # sanitize problem elements
+ for item in os.listdir(uploaded_dir_path):
+ apath = os.path.join(uploaded_dir_path, item)
+ if os.path.islink(apath):
+ # remove symbolic links
+ os.remove(apath)
+ elif os.path.isdir(apath):
+ # remove directories
+ shutil.rmtree(apath)
+ elif os.path.isfile(apath):
+ # set file ownership to 'root:abrt' or 'root:root'
+ os.chown(apath, fsuid, fsgid)
+ # set the right file permissions for this machine
+ os.chmod(apath, @DEFAULT_DUMP_DIR_MODE@)
+ else:
+ # remove things that are neither files, symlinks nor directories
+ os.remove(apath)
+ except OSError as ex:
+ error_msg("Removing uploaded dir '{0}': '{1}'".format(uploaded_dir_path, str(ex)))
+ try:
+ shutil.rmtree(uploaded_dir_path)
+ except OSError as ex2:
+ error_msg_and_die("Failed to clean up dir '{0}': '{1}'".format(uploaded_dir_path, str(ex2)))
+ return
+
+ # overwrite remote if it exists
+ remote_path = os.path.join(uploaded_dir_path, "remote")
+ write_str_to(remote_path, "1", fsuid, fsgid, @DEFAULT_DUMP_DIR_MODE@)
+
+ # abrtd would increment count value and abrt-server refuses to process
+ # problem directories containing 'count' element when PrivateReports is on.
+ count_path = os.path.join(uploaded_dir_path, "count")
+ if os.path.exists(count_path):
+ # overwrite remote_count if it exists
+ remote_count_path = os.path.join(uploaded_dir_path, "remote_count")
+ os.rename(count_path, remote_count_path)
+
+ if not dest:
+ dest = problem_dir_path
+
+ shutil.move(uploaded_dir_path, dest)
+
+ problem.notify_new_path(problem_dir_path)
+
+
if __name__ == "__main__":
# Helper: exit with cleanup
@@ -177,21 +243,17 @@ if __name__ == "__main__":
# or one or more complete problem data directories.
# Checking second possibility first.
if (os.path.exists(tempdir+"/analyzer") or os.path.exists(tempdir+"/type")) and os.path.exists(tempdir+"/time"):
- write_str_to(tempdir+"/remote", "1")
- shutil.move(tempdir, abrt_dir)
- problem.notify_new_path(abrt_dir+"/"+os.path.basename(tempdir))
+ validate_transform_move_and_notify(tempdir, abrt_dir+"/"+os.path.basename(tempdir), dest=abrt_dir)
else:
for d in os.listdir(tempdir):
if not os.path.isdir(tempdir+"/"+d):
continue
- write_str_to(tempdir+"/"+d+"/remote", "1")
dst = abrt_dir+"/"+d
if os.path.exists(dst):
dst += "."+str(os.getpid())
if os.path.exists(dst):
continue
- shutil.move(tempdir+"/"+d, dst)
- problem.notify_new_path(dst)
+ validate_transform_move_and_notify(tempdir+"/"+d, dst)
die_exitcode = 0
# This deletes working_dir (== delete_on_exit)
--
2.4.1

View File

@ -1,29 +0,0 @@
From 7d5be427e208e565ee16a7f34be64acb781fb2f9 Mon Sep 17 00:00:00 2001
From: Matej Habrnal <mhabrnal@redhat.com>
Date: Mon, 18 May 2015 08:45:48 +0200
Subject: [PATCH] a-a-s-p-d: add new known interpreter to conf file
There were new bugzillas opened with wrong component 'python3' because of a new
version of python (3.4). We don't want to blame the interpreters but the
running scripts.
close #965
Signed-off-by: Matej Habrnal <mhabrnal@redhat.com>
---
src/daemon/abrt-action-save-package-data.conf | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/daemon/abrt-action-save-package-data.conf b/src/daemon/abrt-action-save-package-data.conf
index 33cef8f..27b9607 100644
--- a/src/daemon/abrt-action-save-package-data.conf
+++ b/src/daemon/abrt-action-save-package-data.conf
@@ -18,4 +18,4 @@ ProcessUnpackaged = yes
BlackListedPaths = /usr/share/doc/*, */example*, /usr/bin/nspluginviewer
# interpreters names
-Interpreters = python2, python2.7, python, python3, python3.3, perl, perl5.16.2
+Interpreters = python2, python2.7, python, python3, python3.3, python3.4, python3.5, perl, perl5.16.2
--
2.4.1

View File

@ -1,41 +0,0 @@
From 65c24bb248b9b7b2e33e8b0ba9e3e06ffde4b291 Mon Sep 17 00:00:00 2001
From: Matej Habrnal <mhabrnal@redhat.com>
Date: Mon, 18 May 2015 15:46:59 +0200
Subject: [PATCH] applet: fix problem info double free
There was a double free when an action function was called.
Problem info is freed when the notification is destroyed because the free
function is registred when the action is added
(notify_notification_add_action()). So the problem_info_unref() function in the
action function is moreover and causes the double free problem.
Related to rhbz#1211644
Signed-off-by: Matej Habrnal <mhabrnal@redhat.com>
---
src/applet/applet.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/src/applet/applet.c b/src/applet/applet.c
index 4df69fc..c00f7e3 100644
--- a/src/applet/applet.c
+++ b/src/applet/applet.c
@@ -501,7 +501,6 @@ static void action_report(NotifyNotification *notification, gchar *action, gpoin
problem_info_t *pi = (problem_info_t *)user_data;
if (problem_info_get_dir(pi))
fork_exec_gui(problem_info_get_dir(pi));
- problem_info_unref(pi);
}
static void action_restart(NotifyNotification *notification, gchar *action, gpointer user_data)
@@ -528,7 +527,6 @@ static void action_restart(NotifyNotification *notification, gchar *action, gpoi
err->message);
}
g_object_unref (app);
- problem_info_unref(pi);
}
static void on_notify_close(NotifyNotification *notification, gpointer user_data)
--
2.4.1

View File

@ -1,30 +0,0 @@
From 82957a3390188509921ec16bddc27f2aeeb01b8d Mon Sep 17 00:00:00 2001
From: Matej Habrnal <mhabrnal@redhat.com>
Date: Mon, 4 May 2015 10:35:25 +0200
Subject: [PATCH] cli: do not exit with segfault if dbus fails
There was a segfault when we ran 'abrt-cli list' and dbus failed.
Related to rhbz#1217901
Signed-off-by: Matej Habrnal <mhabrnal@redhat.com>
---
src/cli/list.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/cli/list.c b/src/cli/list.c
index c0c819d..31d1835 100644
--- a/src/cli/list.c
+++ b/src/cli/list.c
@@ -142,6 +142,8 @@ int cmd_list(int argc, const char **argv)
parse_opts(argc, (char **)argv, program_options, program_usage_string);
vector_of_problem_data_t *ci = fetch_crash_infos();
+ if (ci == NULL)
+ return 1;
g_ptr_array_sort_with_data(ci, &cmp_problem_data, (char *) FILENAME_LAST_OCCURRENCE);
--
2.4.1

View File

@ -1,589 +0,0 @@
From 0b8955a845f7a28a090bfe07d33a0acf161526e2 Mon Sep 17 00:00:00 2001
From: Matej Habrnal <mhabrnal@redhat.com>
Date: Fri, 24 Apr 2015 15:37:15 +0200
Subject: [PATCH] abrt-auto-reporting: require rhtsupport.conf file only on
RHEL
abrt-auto-reporting required the rhtsupport.conf on Fedora and CentOS but the conf
file do not exists in those systems.
Resolves abrt/abrt#957
Signed-off-by: Matej Habrnal <mhabrnal@redhat.com>
---
configure.ac | 11 +++
doc/Makefile.am | 13 +++-
doc/abrt-auto-reporting-authenticated.txt | 106 ++++++++++++++++++++++++++++
doc/abrt-auto-reporting-unauthenticated.txt | 71 +++++++++++++++++++
doc/abrt-auto-reporting.txt | 106 ----------------------------
src/daemon/abrt-auto-reporting.c | 71 ++++++++++++++-----
6 files changed, 254 insertions(+), 124 deletions(-)
create mode 100644 doc/abrt-auto-reporting-authenticated.txt
create mode 100644 doc/abrt-auto-reporting-unauthenticated.txt
delete mode 100644 doc/abrt-auto-reporting.txt
diff --git a/configure.ac b/configure.ac
index acd0d32..6962d2c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -296,6 +296,17 @@ AC_ARG_ENABLE(suggest-autoreporting,
AM_CONDITIONAL(SUGGEST_AUTOREPORTING, test "$enable_suggest_autoreporting" = "yes")
+# Authenticated autoreporting
+
+AC_ARG_ENABLE(authenticated-autoreporting,
+ AS_HELP_STRING([--enable-authenticated-autoreporting],
+ [enable authenticated autoreporting]),
+ [enable_authenticated_autoreporting=$enableval],
+ [enable_authenticated_autoreporting=no]
+)
+
+AM_CONDITIONAL(AUTHENTICATED_AUTOREPORTING, test "$enable_authenticated_autoreporting" = "yes")
+
# Make satyr use GDB or elfutils/libunwind for unwinding?
AC_ARG_ENABLE([native-unwinder],
diff --git a/doc/Makefile.am b/doc/Makefile.am
index 6efd6d6..3e7499c 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -78,6 +78,17 @@ man1_MANS = ${MAN1_TXT:%.txt=%.1}
man5_MANS = ${MAN5_TXT:%.txt=%.5} ${MAN5_PREFORMATTED}
man8_MANS = ${MAN8_TXT:%.txt=%.8}
+MAN_SOURCE =
+MAN_SOURCE = abrt-auto-reporting-authenticated.txt
+MAN_SOURCE = abrt-auto-reporting-unauthenticated.txt
+
+if AUTHENTICATED_AUTOREPORTING
+abrt-auto-reporting.txt: abrt-auto-reporting-authenticated.txt
+else
+abrt-auto-reporting.txt: abrt-auto-reporting-unauthenticated.txt
+endif
+ cp $< $@
+
%.1 %.5 %.8: %.xml
$(XMLTO_SILENT) xmlto man $< 2>&1 | sed '/Note/d'
@@ -86,6 +97,6 @@ man8_MANS = ${MAN8_TXT:%.txt=%.8}
--conf-file ../asciidoc.conf \
-aabrt_version=$(PACKAGE_VERSION) -o $@ $<
-EXTRA_DIST = $(MAN1_TXT) $(MAN5_TXT) $(MAN8_TXT) $(MAN5_PREFORMATTED)
+EXTRA_DIST = $(MAN1_TXT) $(MAN5_TXT) $(MAN8_TXT) $(MAN5_PREFORMATTED) $(MAN_SOURCE)
CLEANFILES = ${MAN1_TXT:%.txt=%.1} ${MAN5_TXT:%.txt=%.5} ${MAN8_TXT:%.txt=%.8}
diff --git a/doc/abrt-auto-reporting-authenticated.txt b/doc/abrt-auto-reporting-authenticated.txt
new file mode 100644
index 0000000..2a27945
--- /dev/null
+++ b/doc/abrt-auto-reporting-authenticated.txt
@@ -0,0 +1,106 @@
+abrt-auto-reporting(1)
+======================
+
+NAME
+----
+abrt-auto-reporting - Get or modify the auto reporting option values
+
+SYNOPSIS
+--------
+'abrt-auto-reporting' [-v] [ enabled | yes | 1 | on | disabled | no | 0 | off ]
+ [ [--anonymous] |
+ [--username USERNAME [--password PASSWORD] ] |
+ [--certificate SOURCE] ]
+
+DESCRIPTION
+-----------
+Reads the configuration from abrt.conf and saves the changes to the same file.
+
+The changes will take effect immediately without necessity to restart any ABRT
+process and will be persistent.
+
+'disabled'::
+ User have to report the detect problems manually
+
+'enabled'::
+ ABRT uploads an uReport which was generated for a detected problem
+ immediately after the detection phase.
+
+Reads and saves the authentication configuration options in
+/etc/libreport/plugins/ureport.conf and /etc/libreport/plugins/rhtsupport.conf
+
+uReport description
+~~~~~~~~~~~~~~~~~~~
+ABRT supports uReports for four types of crashes: crashes of C/C++ programs
+that result in a core dump, uncaught Python exceptions, uncaught Java
+exceptions and kernel oopses.
+
+Each uReport generally contains a stack trace, or multiple stack traces in the
+case of multi-threaded C/C++ and Java programs. The stack trace only describes
+the call stack of the program at the time of the crash and does not contain
+contents of any variables.
+
+Every uReport also contains identification of the operating system, versions of
+the RPM packages involved in the crash, and whether the program ran under a
+root user.
+
+There are also items specific to each crash type:
+
+C/C++ crashes::
+ these are path to the executable and signal delivered to the program,
+
+Python exceptions::
+ there is the type of the exception (without the error message, which may
+ contain sensitive data),
+
+for kernel oopses::
+ these are list of loaded kernel modules, list of taint flags, and full text
+ of the kernel oops.
+
+The authenticated uReports also contains *hostname* and *machineid* to enable a
+server side filtering at https://access.redhat.com/.
+
+The authenticated uReports have the benefit of rich server replies which may
+include a solution for the submitted crash. The authentication is done using
+either Red Hat Subscription Certificates or Red Hat Customer Portal
+credentials.
+
+'Warning':
+The full text of a kernel oops might contain information like the
+identification of the host hardware type. You should disable the autoreporting
+feature if you do not want to share this information with Red Hat.
+
+
+OPTIONS
+-------
+-v, --verbose::
+ Be more verbose. Can be given multiple times.
+
+-a, --anonymous::
+ Turns the authentication off by clearing both 'SSLClientAuth' and 'HTTPAuth'
+ configuration options in /etc/libreport/plugins/ureport.conf
+
+-u, --username USERNAME::
+ Turns HTTP Authentication on by setting 'HTTPAuth' configuration option to
+ *rhts-credentials* in /etc/libreport/plugins/ureport.conf and storing
+ USERNAME and PASSWORD in /etc/libreport/plugins/rhtsupport.conf
+ Also turns the SSL Client Authentication off, because these methods cannot
+ be used together.
+
+-p, --password PASSWORD::
+ Password for HTTP Authentication. If not provided, a prompt asking for it
+ will be issued.
+
+-c, --certificate SOURCE::
+ Turns SSL Client Authentication on by setting 'SSLClientAuth' configuration
+ option to SOURCE in /etc/libreport/plugins/ureport.conf.
+ Also turns the HTTP Authentication off, because these methods cannot
+ be used together.
+
+SEE ALSO
+--------
+abrt.conf(5), ureport.conf(5), rhtsupport.conf(5)
+
+AUTHORS
+-------
+* ABRT team
diff --git a/doc/abrt-auto-reporting-unauthenticated.txt b/doc/abrt-auto-reporting-unauthenticated.txt
new file mode 100644
index 0000000..320c803
--- /dev/null
+++ b/doc/abrt-auto-reporting-unauthenticated.txt
@@ -0,0 +1,71 @@
+abrt-auto-reporting(1)
+======================
+
+NAME
+----
+abrt-auto-reporting - Get or modify the auto reporting option values
+
+SYNOPSIS
+--------
+'abrt-auto-reporting' [-v] [ enabled | yes | 1 | on | disabled | no | 0 | off ]
+
+DESCRIPTION
+-----------
+Reads the configuration from abrt.conf and saves the changes to the same file.
+
+The changes will take effect immediately without necessity to restart any ABRT
+process and will be persistent.
+
+'disabled'::
+ User have to report the detect problems manually
+
+'enabled'::
+ ABRT uploads an uReport which was generated for a detected problem
+ immediately after the detection phase.
+
+uReport description
+~~~~~~~~~~~~~~~~~~~
+ABRT supports uReports for four types of crashes: crashes of C/C++ programs
+that result in a core dump, uncaught Python exceptions, uncaught Java
+exceptions and kernel oopses.
+
+Each uReport generally contains a stack trace, or multiple stack traces in the
+case of multi-threaded C/C++ and Java programs. The stack trace only describes
+the call stack of the program at the time of the crash and does not contain
+contents of any variables.
+
+Every uReport also contains identification of the operating system, versions of
+the RPM packages involved in the crash, and whether the program ran under a
+root user.
+
+There are also items specific to each crash type:
+
+C/C++ crashes::
+ these are path to the executable and signal delivered to the program,
+
+Python exceptions::
+ there is the type of the exception (without the error message, which may
+ contain sensitive data),
+
+for kernel oopses::
+ these are list of loaded kernel modules, list of taint flags, and full text
+ of the kernel oops.
+
+'Warning':
+The full text of a kernel oops might contain information like the
+identification of the host hardware type. You should disable the autoreporting
+feature if you do not want to share this information with Red Hat.
+
+
+OPTIONS
+-------
+-v, --verbose::
+ Be more verbose. Can be given multiple times.
+
+SEE ALSO
+--------
+abrt.conf(5)
+
+AUTHORS
+-------
+* ABRT team
diff --git a/doc/abrt-auto-reporting.txt b/doc/abrt-auto-reporting.txt
deleted file mode 100644
index 2a27945..0000000
--- a/doc/abrt-auto-reporting.txt
+++ /dev/null
@@ -1,106 +0,0 @@
-abrt-auto-reporting(1)
-======================
-
-NAME
-----
-abrt-auto-reporting - Get or modify the auto reporting option values
-
-SYNOPSIS
---------
-'abrt-auto-reporting' [-v] [ enabled | yes | 1 | on | disabled | no | 0 | off ]
- [ [--anonymous] |
- [--username USERNAME [--password PASSWORD] ] |
- [--certificate SOURCE] ]
-
-DESCRIPTION
------------
-Reads the configuration from abrt.conf and saves the changes to the same file.
-
-The changes will take effect immediately without necessity to restart any ABRT
-process and will be persistent.
-
-'disabled'::
- User have to report the detect problems manually
-
-'enabled'::
- ABRT uploads an uReport which was generated for a detected problem
- immediately after the detection phase.
-
-Reads and saves the authentication configuration options in
-/etc/libreport/plugins/ureport.conf and /etc/libreport/plugins/rhtsupport.conf
-
-uReport description
-~~~~~~~~~~~~~~~~~~~
-ABRT supports uReports for four types of crashes: crashes of C/C++ programs
-that result in a core dump, uncaught Python exceptions, uncaught Java
-exceptions and kernel oopses.
-
-Each uReport generally contains a stack trace, or multiple stack traces in the
-case of multi-threaded C/C++ and Java programs. The stack trace only describes
-the call stack of the program at the time of the crash and does not contain
-contents of any variables.
-
-Every uReport also contains identification of the operating system, versions of
-the RPM packages involved in the crash, and whether the program ran under a
-root user.
-
-There are also items specific to each crash type:
-
-C/C++ crashes::
- these are path to the executable and signal delivered to the program,
-
-Python exceptions::
- there is the type of the exception (without the error message, which may
- contain sensitive data),
-
-for kernel oopses::
- these are list of loaded kernel modules, list of taint flags, and full text
- of the kernel oops.
-
-The authenticated uReports also contains *hostname* and *machineid* to enable a
-server side filtering at https://access.redhat.com/.
-
-The authenticated uReports have the benefit of rich server replies which may
-include a solution for the submitted crash. The authentication is done using
-either Red Hat Subscription Certificates or Red Hat Customer Portal
-credentials.
-
-'Warning':
-The full text of a kernel oops might contain information like the
-identification of the host hardware type. You should disable the autoreporting
-feature if you do not want to share this information with Red Hat.
-
-
-OPTIONS
--------
--v, --verbose::
- Be more verbose. Can be given multiple times.
-
--a, --anonymous::
- Turns the authentication off by clearing both 'SSLClientAuth' and 'HTTPAuth'
- configuration options in /etc/libreport/plugins/ureport.conf
-
--u, --username USERNAME::
- Turns HTTP Authentication on by setting 'HTTPAuth' configuration option to
- *rhts-credentials* in /etc/libreport/plugins/ureport.conf and storing
- USERNAME and PASSWORD in /etc/libreport/plugins/rhtsupport.conf
- Also turns the SSL Client Authentication off, because these methods cannot
- be used together.
-
--p, --password PASSWORD::
- Password for HTTP Authentication. If not provided, a prompt asking for it
- will be issued.
-
--c, --certificate SOURCE::
- Turns SSL Client Authentication on by setting 'SSLClientAuth' configuration
- option to SOURCE in /etc/libreport/plugins/ureport.conf.
- Also turns the HTTP Authentication off, because these methods cannot
- be used together.
-
-SEE ALSO
---------
-abrt.conf(5), ureport.conf(5), rhtsupport.conf(5)
-
-AUTHORS
--------
-* ABRT team
diff --git a/src/daemon/abrt-auto-reporting.c b/src/daemon/abrt-auto-reporting.c
index 0fffeb6..b608c9b 100644
--- a/src/daemon/abrt-auto-reporting.c
+++ b/src/daemon/abrt-auto-reporting.c
@@ -64,6 +64,7 @@ set_abrt_reporting(map_string_t *conf, const char *opt_value)
return 1;
}
+#if AUTHENTICATED_AUTOREPORTING != 0
static int
set_ureport_http_auth(map_string_t *conf, const char *opt_value)
{
@@ -134,6 +135,7 @@ set_rhts_credentials(map_string_t *conf, const char *username, const char *passw
/* No changes needed -> success */
return 1;
}
+#endif
static const char *
get_abrt_reporting(map_string_t *conf)
@@ -143,6 +145,7 @@ get_abrt_reporting(map_string_t *conf)
return REPORTING_STATES[index][0];
}
+#if AUTHENTICATED_AUTOREPORTING != 0
static const char *
get_ureport_http_auth(map_string_t *conf)
{
@@ -154,6 +157,7 @@ get_ureport_client_auth(map_string_t *conf)
{
return get_map_string_item_or_NULL(conf, UREPORT_CLIENT_AUTH_OPTION);
}
+#endif
int main(int argc, char *argv[])
{
@@ -171,57 +175,78 @@ int main(int argc, char *argv[])
textdomain(PACKAGE);
#endif
+#define PROGRAM_USAGE_MIDDLE_PART \
+ "\n" \
+ "Get or modify a value of the auto-reporting option. The changes will take\n" \
+ "effect immediately and will be persistent.\n" \
+ "\n" \
+ ""STATE_MANUAL":\n" \
+ "User have to report the detect problems manually\n" \
+ "\n" \
+ ""STATE_AUTO":\n" \
+ "ABRT uploads an uReport which was generated for a detected problem\n" \
+ "immediately after the detection phase. uReport generally contains a stack\n" \
+ "trace which only describes the call stack of the program at the time of the\n" \
+ "crash and does not contain contents of any variables. Every uReport also\n" \
+ "contains identification of the operating system, versions of the RPM packages\n" \
+ "involved in the crash, and whether the program ran under a root user.\n" \
+ "\n"
+
abrt_init(argv);
+#if AUTHENTICATED_AUTOREPORTING != 0
const char *program_usage_string = _(
"& [ "STATE_MANUAL" | "STATE_AUTO" | yes | no | 1 | 0 ] \\\n"
" [[--anonymous] | [--username USERNAME [--password PASSWORD]] | [--certificate SOURCE]]\n"
- "\n"
- "Get or modify a value of the auto-reporting option. The changes will take\n"
- "effect immediately and will be persistent.\n"
- "\n"
- ""STATE_MANUAL":\n"
- "User have to report the detect problems manually\n"
- "\n"
- ""STATE_AUTO":\n"
- "ABRT uploads an uReport which was generated for a detected problem\n"
- "immediately after the detection phase. uReport generally contains a stack\n"
- "trace which only describes the call stack of the program at the time of the\n"
- "crash and does not contain contents of any variables. Every uReport also\n"
- "contains identification of the operating system, versions of the RPM packages\n"
- "involved in the crash, and whether the program ran under a root user.\n"
- "\n"
+ PROGRAM_USAGE_MIDDLE_PART
"See abrt-auto-reporting(1), reporter-ureport(1) and reporter-rhtsupport(1)\n"
"for more details.\n"
);
+#else
+ const char *program_usage_string = _(
+ "& [ "STATE_MANUAL" | "STATE_AUTO" | yes | no | 1 | 0 ]\n"
+ PROGRAM_USAGE_MIDDLE_PART
+ "See abrt-auto-reporting(1) and reporter-ureport(1) for more details.\n"
+ );
+#endif
enum {
OPT_v = 1 << 0,
+#if AUTHENTICATED_AUTOREPORTING != 0
OPT_a = 1 << 1,
OPT_u = 1 << 2,
OPT_p = 1 << 3,
OPT_c = 1 << 4,
+#endif
};
+#if AUTHENTICATED_AUTOREPORTING != 0
int anonymous = 0;
const char *username = NULL;
const char *password = NULL;
const char *certificate = NULL;
+#endif
/* Keep enum above and order of options below in sync! */
struct options program_options[] = {
OPT__VERBOSE(&g_verbose),
+#if AUTHENTICATED_AUTOREPORTING != 0
OPT_BOOL ( 'a', "anonymous", &anonymous, _("Turns the authentication off")),
OPT_STRING( 'u', "username", &username, "USERNAME", _("Red Hat Support user name")),
OPT_STRING( 'p', "password", &password, "PASSWORD", _("Red Hat Support password, if not given, a prompt for it will be issued")),
OPT_STRING( 'c', "certificate", &certificate, "SOURCE", _("uReport SSL certificate paths or certificate type")),
+#endif
OPT_END()
};
- const unsigned opts = parse_opts(argc, argv, program_options, program_usage_string);
+#if AUTHENTICATED_AUTOREPORTING != 0
+ const unsigned opts =
+#endif
+ parse_opts(argc, argv, program_options, program_usage_string);
argv += optind;
argc -= optind;
+#if AUTHENTICATED_AUTOREPORTING != 0
if ((opts & OPT_p) && !(opts & OPT_u))
{
error_msg(_("You also need to specify --username for --password"));
@@ -246,6 +271,7 @@ int main(int argc, char *argv[])
show_usage_and_die(program_usage_string, program_options);
}
+#endif
if (argc > 1)
{
error_msg(_("Invalid number of arguments"));
@@ -275,20 +301,25 @@ int main(int argc, char *argv[])
int exit_code = EXIT_FAILURE;
map_string_t *conf = new_map_string();
+#if AUTHENTICATED_AUTOREPORTING != 0
map_string_t *rhts_conf = new_map_string();
map_string_t *rhts_conf_bck = NULL;
+#endif
map_string_t *ureport_conf = new_map_string();
map_string_t *ureport_conf_bck = NULL;
if (!load_abrt_conf_file(CONF_NAME, conf))
goto finito;
+#if AUTHENTICATED_AUTOREPORTING != 0
if (!load_plugin_conf_file(RHTS_NAME, rhts_conf, false))
goto finito;
+#endif
if (!load_plugin_conf_file(UREPORT_NAME, ureport_conf, false))
goto finito;
+#if AUTHENTICATED_AUTOREPORTING != 0
if ((opts & OPT_a))
{
ureport_conf_bck = clone_map_string(ureport_conf);
@@ -334,11 +365,13 @@ int main(int argc, char *argv[])
goto finito;
}
+#endif
if (argc == 0)
{
printf("%s", get_abrt_reporting(conf));
exit_code = EXIT_SUCCESS;
+#if AUTHENTICATED_AUTOREPORTING != 0
if (g_verbose >= 1)
{
const char *tmp = get_ureport_http_auth(ureport_conf);
@@ -350,7 +383,7 @@ int main(int argc, char *argv[])
else
printf(" %s", _("anonymous auto reporting"));
}
-
+#endif
putchar('\n');
goto finito;
@@ -363,16 +396,20 @@ int main(int argc, char *argv[])
if (ureport_conf_bck != NULL)
save_plugin_conf_file(UREPORT_NAME, ureport_conf_bck);
+#if AUTHENTICATED_AUTOREPORTING != 0
if (rhts_conf_bck != NULL)
save_plugin_conf_file(RHTS_NAME, rhts_conf_bck);
+#endif
}
finito:
free_map_string(ureport_conf);
free_map_string(ureport_conf_bck);
+#if AUTHENTICATED_AUTOREPORTING != 0
free_map_string(rhts_conf);
free_map_string(rhts_conf_bck);
+#endif
free_map_string(conf);
return exit_code;
}
--
2.4.1

View File

@ -1,37 +0,0 @@
From c17cb1999357d9be51b8118661a8f35569c66dd0 Mon Sep 17 00:00:00 2001
From: Matej Habrnal <mhabrnal@redhat.com>
Date: Thu, 14 May 2015 16:27:02 +0200
Subject: [PATCH] abrt-action-list-dsos: do not decode not existing object
If you build a package using 'make rpm', there is no vendor param in it.
So this is the reason why the Decode method was called on None object.
Signed-off-by: Matej Habrnal <mhabrnal@redhat.com>
---
src/plugins/abrt-action-list-dsos | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/src/plugins/abrt-action-list-dsos b/src/plugins/abrt-action-list-dsos
index f4a1536..a3078a5 100644
--- a/src/plugins/abrt-action-list-dsos
+++ b/src/plugins/abrt-action-list-dsos
@@ -82,10 +82,15 @@ if __name__ == "__main__":
if outname:
outfile = xopen(outname, "w")
outname = None
+
+ vendor = h[rpm.RPMTAG_VENDOR]
+ if vendor != None:
+ verdor = vendor.decode('utf-8')
+
outfile.write("%s %s (%s) %s\n" %
(path,
h[rpm.RPMTAG_NEVRA].decode('utf-8'),
- h[rpm.RPMTAG_VENDOR].decode('utf-8'),
+ verdor,
h[rpm.RPMTAG_INSTALLTIME])
)
--
2.4.1

View File

@ -1,143 +0,0 @@
From e3df315b18f833bb44eb8aadeefc2ad932f39f97 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ville=20Skytt=C3=A4?= <ville.skytta@iki.fi>
Date: Tue, 19 May 2015 09:29:28 +0300
Subject: [PATCH] doc, polkit: Spelling/grammar fixes
---
doc/design | 6 +++---
doc/problems-service/org.freedesktop.Problems.xml.in | 4 ++--
doc/project/abrt.tex | 14 +++++++-------
src/dbus/abrt_polkit.policy | 4 ++--
4 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/doc/design b/doc/design
index a9ce040..f214caf 100644
--- a/doc/design
+++ b/doc/design
@@ -37,7 +37,7 @@ to a dedicated server(s) for processing (backtrace, etc).
Design
-Abrt design should be flexible enough to accomodate all
+Abrt design should be flexible enough to accommodate all
of the above usage scenarios.
Since currently we do not know how to dump oops on demand,
@@ -70,7 +70,7 @@ uses inotify to watch for crashes. Instead the programs which create crashes
can trigger their initial ("post-create") processing themselves]
Crashes conceptually go through "events" in their lives.
-Apart from "post-create" event decribed above, they may have
+Apart from "post-create" event described above, they may have
"analyze" event, "report[_FOO]" events,
and arbitrarily-named other events.
abrt-handle-crashdump tool can be used to "run" an event on a directory,
@@ -124,7 +124,7 @@ Done:
* Make abrt-gui start abrtd on demand, so that abrt-gui can be started
even if abrtd does not run at the moment.
* make kerneloops plugin into separate daemon (convert it to a hook
- and get rid of "cron plugins" which are wrong idea since the begining)
+ and get rid of "cron plugins" which are wrong idea since the beginning)
* make C/C++ hook to be started by init script
* add "include FILE" feature to abrt_event.conf
diff --git a/doc/problems-service/org.freedesktop.Problems.xml.in b/doc/problems-service/org.freedesktop.Problems.xml.in
index 118d4b2..b791bdb 100644
--- a/doc/problems-service/org.freedesktop.Problems.xml.in
+++ b/doc/problems-service/org.freedesktop.Problems.xml.in
@@ -53,7 +53,7 @@
<varlistentry>
<term>uid</term>
<listitem>
- <para>Only a user with root priviledges can pass this field. For all other users the field is filled by caller's uid.</para>
+ <para>Only a user with root privileges can pass this field. For all other users the field is filled by caller's uid.</para>
</listitem>
</varlistentry>
<varlistentry>
@@ -309,7 +309,7 @@ for prblmid in problems.GetProblems():
</arg>
<arg type='x' name='timestamp_from' direction='in'>
- <tp:docstring>Beginnig of required time range.</tp:docstring>
+ <tp:docstring>Beginning of required time range.</tp:docstring>
</arg>
<arg type='x' name='timestamp_to' direction='in'>
diff --git a/doc/project/abrt.tex b/doc/project/abrt.tex
index 9e7724e..03b5705 100644
--- a/doc/project/abrt.tex
+++ b/doc/project/abrt.tex
@@ -194,7 +194,7 @@ information regarding their interests, involvement.
{\textbf{Package Maintainers}
\nodepart{second} \vspace{-5mm}
\begin{itemize} \itemsep1pt \parskip0pt \parsep0pt
- \item Fixing most frequently occured bugs
+ \item Fixing most frequently occurred bugs
\item Fixing bugs where the bug is well described
\end{itemize}
};
@@ -265,7 +265,7 @@ Highlight important reports
In-depth bug fixing
-------------------
-Collect core-dump for frequently occured reports
+Collect core-dump for frequently occurred reports
Retrace coredumps on demand
@@ -570,7 +570,7 @@ components.
Red Hat Bugzilla.
\end{description}
\item[Data Storage] Database and file storage for data required for
- the analysis, evaluation, adn processing of reports and problems.
+ the analysis, evaluation, and processing of reports and problems.
\begin{description}
\item[LLVM bitcode] We store LLVM bitcode of every binary and
dynamic library compiled from C/C++ source code.
@@ -582,8 +582,8 @@ components.
\begin{tikzpicture}
\umlclass[x=-4,y=0]{problem}{
id : PRIMARY KEY \\
-first occurence : TIMESTAMP NOT NULL \\
-last occurence : TIMESTAMP NOT NULL \\
+first occurrence : TIMESTAMP NOT NULL \\
+last occurrence : TIMESTAMP NOT NULL \\
}{}
\umlclass[x=4,y=-2]{problem report}{
@@ -616,8 +616,8 @@ Part of reports is populated from $\mu$reports.
\umlclass[x=-4,y=0]{report}{
id : PRIMARY KEY AUTOINCREMENT \\
type : ENUM (USERSPACE, KERNEL, PYTHON, SELINUX) \\
-first occurence : TIMESTAMP \\
-last occurence : TIMESTAMP \\
+first occurrence : TIMESTAMP \\
+last occurrence : TIMESTAMP \\
count : INT \\
component id : FOREIGN KEY \\
problem id : FOREIGN KEY
diff --git a/src/dbus/abrt_polkit.policy b/src/dbus/abrt_polkit.policy
index a3425d9..2c75233 100644
--- a/src/dbus/abrt_polkit.policy
+++ b/src/dbus/abrt_polkit.policy
@@ -17,7 +17,7 @@ Copyright (c) 2012 ABRT Team <crash-catcher@fedorahosted.com>
<!-- by default only root can see other users problems -->
<action id="org.freedesktop.problems.getall">
<description>Get problems from all users</description>
- <message>Reading others problems requires authentication</message>
+ <message>Reading other users' problems requires authentication</message>
<defaults>
<allow_any>auth_admin</allow_any>
<allow_active>auth_admin_keep</allow_active>
@@ -28,7 +28,7 @@ Copyright (c) 2012 ABRT Team <crash-catcher@fedorahosted.com>
<!-- by default only root can access configuration -->
<action id="com.redhat.problems.configuration.update">
<description>Set value of configuration properties</description>
- <message>Update configuration values reuquires authentication</message>
+ <message>Updating configuration values requires authentication</message>
<defaults>
<allow_any>auth_admin</allow_any>
<allow_active>auth_admin_keep</allow_active>
--
2.4.1

View File

@ -1,123 +0,0 @@
From 70b2e6981b667d5cfb31f894527e16f3eeed14c9 Mon Sep 17 00:00:00 2001
From: Jakub Filak <jfilak@redhat.com>
Date: Fri, 15 May 2015 14:45:40 +0200
Subject: [PATCH] applet: migrate Autoreporting options to GSettings
Read the option's value from the app's configuration file, update the
gnome setting if needed and remove the option from the app's
configuration file in order to skip the migration at next start.
Related to #966
Signed-off-by: Jakub Filak <jfilak@redhat.com>
---
src/applet/applet.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 55 insertions(+), 5 deletions(-)
diff --git a/src/applet/applet.c b/src/applet/applet.c
index 4df69fc..b534839 100644
--- a/src/applet/applet.c
+++ b/src/applet/applet.c
@@ -36,6 +36,10 @@
#include "libabrt.h"
#include "problem_api.h"
+#define APP_NAME "abrt-applet"
+#define GS_SCHEMA_ID_PRIVACY "org.gnome.desktop.privacy"
+#define GS_PRIVACY_OPT_AUTO_REPORTING "report-technical-problems"
+
/* libnotify action keys */
#define A_REPORT_REPORT "REPORT"
#define A_RESTART_APPLICATION "RESTART"
@@ -55,15 +59,60 @@ static bool is_autoreporting_enabled(void)
GSettings *settings;
gboolean ret;
- settings = g_settings_new ("org.gnome.desktop.privacy");
- ret = g_settings_get_boolean (settings, "report-technical-problems");
+ settings = g_settings_new (GS_SCHEMA_ID_PRIVACY);
+ ret = g_settings_get_boolean (settings, GS_PRIVACY_OPT_AUTO_REPORTING);
g_object_unref (settings);
return ret;
}
+static void migrate_auto_reporting_to_gsettings(void)
+{
+#define OPT_NAME "AutoreportingEnabled"
+ map_string_t *settings = new_map_string();
+ if (!load_app_conf_file(APP_NAME, settings))
+ goto finito;
+
+ /* Silently ignore not configured options */
+ int sv_logmode = logmode;
+ /* but only if we run in silent mode (no -v on command line) */
+ logmode = g_verbose == 0 ? 0 : sv_logmode;
+
+ int auto_reporting = 0;
+ int configured = try_get_map_string_item_as_bool(settings, OPT_NAME, &auto_reporting);
+
+ logmode = sv_logmode;
+
+ if (!configured)
+ goto finito;
+
+ /* Enable the GS option if AutoreportingEnabled is true because the user
+ * turned the Autoreporting in abrt-applet in a before GS.
+ *
+ * Do not disable the GS option if AutoreportingEvent is false because the
+ * GS option is false by default, thus disabling would revert the user's
+ * decision to automatically report technical problems.
+ */
+ if (auto_reporting)
+ {
+ GSettings *settings = g_settings_new(GS_SCHEMA_ID_PRIVACY);
+ g_settings_set_boolean(settings, GS_PRIVACY_OPT_AUTO_REPORTING, TRUE);
+ g_object_unref(settings);
+ }
+
+ remove_map_string_item(settings, OPT_NAME);
+ save_app_conf_file(APP_NAME, settings);
+
+ log("Successfully migrated "APP_NAME":"OPT_NAME" to "GS_SCHEMA_ID_PRIVACY":"GS_PRIVACY_OPT_AUTO_REPORTING);
+
+#undef OPT_NAME
+finito:
+ free_map_string(settings);
+ return;
+}
+
static const char *get_autoreport_event_name(void)
{
- load_user_settings("abrt-applet");
+ load_user_settings(APP_NAME);
const char *configured = get_user_setting("AutoreportingEvent");
return configured ? configured : g_settings_autoreporting_event;
}
@@ -554,7 +603,7 @@ static NotifyNotification *new_warn_notification(const char *body)
notify_notification_set_urgency(notification, NOTIFY_URGENCY_NORMAL);
notify_notification_set_timeout(notification, NOTIFY_EXPIRES_DEFAULT);
- notify_notification_set_hint(notification, "desktop-entry", g_variant_new_string("abrt-applet"));
+ notify_notification_set_hint(notification, "desktop-entry", g_variant_new_string(APP_NAME));
return notification;
}
@@ -1147,13 +1196,14 @@ int main(int argc, char** argv)
/*unsigned opts =*/ parse_opts(argc, argv, program_options, program_usage_string);
migrate_to_xdg_dirs();
+ migrate_auto_reporting_to_gsettings();
export_abrt_envvars(0);
msg_prefix = g_progname;
load_abrt_conf();
load_event_config_data();
- load_user_settings("abrt-applet");
+ load_user_settings(APP_NAME);
/* Initialize our (dbus_abrt) machinery by filtering
* for signals:
--
2.4.1

View File

@ -1,39 +0,0 @@
From eb1e45a1e8070bee6ba44f325f7dd0ca8900dc77 Mon Sep 17 00:00:00 2001
From: Jakub Filak <jfilak@redhat.com>
Date: Sat, 16 May 2015 06:46:17 +0200
Subject: [PATCH] config UI: read glade from a local file first
If you read the system file first, you won't be able to the application
from a development directory.
Signed-off-by: Jakub Filak <jfilak@redhat.com>
---
src/configuration-gui/abrt-config-widget.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/configuration-gui/abrt-config-widget.c b/src/configuration-gui/abrt-config-widget.c
index 664180d..2c75429 100644
--- a/src/configuration-gui/abrt-config-widget.c
+++ b/src/configuration-gui/abrt-config-widget.c
@@ -221,14 +221,14 @@ abrt_config_widget_init(AbrtConfigWidget *self)
self->priv->builder = gtk_builder_new();
gtk_builder_set_translation_domain(self->priv->builder, GETTEXT_PACKAGE);
- gtk_builder_add_from_file(self->priv->builder, ABRT_UI_DIR "/" UI_FILE_NAME, &error);
+ gtk_builder_add_from_file(self->priv->builder, UI_FILE_NAME, &error);
if(error != NULL) {
- g_warning("Failed to load '%s': %s", ABRT_UI_DIR "/" UI_FILE_NAME, error->message);
+ log_debug("Failed to load '%s': %s", UI_FILE_NAME, error->message);
g_error_free(error);
error = NULL;
- gtk_builder_add_from_file(self->priv->builder, UI_FILE_NAME, &error);
+ gtk_builder_add_from_file(self->priv->builder, ABRT_UI_DIR "/" UI_FILE_NAME, &error);
if(error != NULL) {
- g_warning("Failed to load '%s': %s", UI_FILE_NAME, error->message);
+ g_warning("Failed to load '%s': %s", ABRT_UI_DIR "/" UI_FILE_NAME, error->message);
g_error_free(error);
return;
}
--
2.4.1

View File

@ -1,55 +0,0 @@
From 5d544028c3dd3f4af9d4da83a4c57d2c05c09014 Mon Sep 17 00:00:00 2001
From: Jakub Filak <jfilak@redhat.com>
Date: Sat, 16 May 2015 06:51:09 +0200
Subject: [PATCH] config UI: enable options without config files
Signed-off-by: Jakub Filak <jfilak@redhat.com>
---
src/configuration-gui/abrt-config-widget.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/src/configuration-gui/abrt-config-widget.c b/src/configuration-gui/abrt-config-widget.c
index 2c75429..8bfc269 100644
--- a/src/configuration-gui/abrt-config-widget.c
+++ b/src/configuration-gui/abrt-config-widget.c
@@ -175,10 +175,13 @@ on_switch_activate(GObject *object,
GParamSpec *spec,
AbrtConfigWidget *config)
{
+ AbrtConfigWidgetOption *option = g_object_get_data(G_OBJECT(object), "abrt-option");
+ if (option->config == NULL)
+ return;
+
const gboolean state = gtk_switch_get_active(GTK_SWITCH(object));
const char *const val = state ? "yes" : "no";
- AbrtConfigWidgetOption *option = g_object_get_data(G_OBJECT(object), "abrt-option");
log_debug("%s : %s", option->name, val);
abrt_app_configuration_set_value(option->config, option->name, val);
abrt_app_configuration_save(option->config);
@@ -191,7 +194,11 @@ update_option_current_value(AbrtConfigWidget *self, enum AbrtOptions opid)
assert((opid >= _ABRT_OPT_BEGIN_ && opid < _ABRT_OPT_END_) || !"Out of range Option ID value");
AbrtConfigWidgetOption *option = &(self->priv->options[opid]);
- const char *val = abrt_app_configuration_get_value(option->config, option->name);
+
+ const char *val = NULL;
+ if (option->config != NULL)
+ val = abrt_app_configuration_get_value(option->config, option->name);
+
option->current_value = val ? string_to_bool(val) : option->default_value;
}
@@ -209,6 +216,9 @@ connect_switch_with_option(AbrtConfigWidget *self, enum AbrtOptions opid, const
g_object_set_data(G_OBJECT(gsw), "abrt-option", option);
g_signal_connect(G_OBJECT(gsw), "notify::active",
G_CALLBACK(on_switch_activate), self);
+
+ if (option->config == NULL)
+ gtk_widget_set_sensitive(GTK_WIDGET(gsw), FALSE);
}
static void
--
2.4.1

View File

@ -1,602 +0,0 @@
From abdedafd3a530ad4baa992010a3cfc87645d98d1 Mon Sep 17 00:00:00 2001
From: Jakub Filak <jfilak@redhat.com>
Date: Sat, 16 May 2015 06:51:37 +0200
Subject: [PATCH] config UI: Automatic reporting from GSettings
If Privacy panels exists:
Make the widget insensitive because the user can only read its value.
Add a button launching Privacy panel.
Else:
Read/write the GSettings and show a warning about modifying the
GSettings.
Signed-off-by: Jakub Filak <jfilak@redhat.com>
---
po/POTFILES.in | 1 +
src/configuration-gui/abrt-config-widget.c | 201 +++++++++++++++++++++++--
src/configuration-gui/abrt-config-widget.glade | 82 ++++------
3 files changed, 217 insertions(+), 67 deletions(-)
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 0da1396..8c31438 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -3,6 +3,7 @@
# Please keep this file sorted alphabetically.
src/applet/abrt-applet.desktop.in
src/applet/applet.c
+src/configuration-gui/abrt-config-widget.c
src/configuration-gui/abrt-config-widget.glade
src/configuration-gui/system-config-abrt.c
src/configuration-gui/main.c
diff --git a/src/configuration-gui/abrt-config-widget.c b/src/configuration-gui/abrt-config-widget.c
index 8bfc269..c9b0b02 100644
--- a/src/configuration-gui/abrt-config-widget.c
+++ b/src/configuration-gui/abrt-config-widget.c
@@ -21,6 +21,8 @@
#endif
#include "abrt-config-widget.h"
+#include <satyr/utils.h>
+#include <gio/gdesktopappinfo.h>
#include "libabrt.h"
#include <assert.h>
@@ -32,19 +34,36 @@
#define UI_FILE_NAME "abrt-config-widget.glade"
+/* AbrtConfigWidgetPrivate:
+ * + AbrtConfigWidgetOption == "abrt-option" of GtkSwitch
+ * + AbrtConfigWidgetOption == "abrt-option" of GtkSwitch
+ * + ...
+ *
+ * + AbrtAppConfiguration == config of AbrtConfigWidgetOption
+ * + AbrtAppConfiguration == config of AbrtConfigWidgetOption
+ * + ...
+ */
+
+/* This structure represents either an ABRT configuration file or a GSettings
+ * schema.
+ */
typedef struct {
- char *app_name;
- map_string_t *settings;
+ char *app_name; ///< e.g abrt-applet, org.gnome.desktop.privacy
+ map_string_t *settings; ///< ABRT configuration file
+ GSettings *glib_settings; ///< GSettings
} AbrtAppConfiguration;
+/* This structure represents a single switch.
+ */
typedef struct {
- const char *name;
+ const char *name; ///< e.g. ask_steal_dir, report-technical-problems
GtkSwitch *widget;
gboolean default_value;
gboolean current_value;
AbrtAppConfiguration *config;
} AbrtConfigWidgetOption;
+/* Each configuration option has its own number. */
enum AbrtOptions
{
_ABRT_OPT_BEGIN_,
@@ -60,11 +79,15 @@ enum AbrtOptions
_ABRT_OPT_END_,
};
+/* This structure holds private data of AbrtConfigWidget
+ */
struct AbrtConfigWidgetPrivate {
GtkBuilder *builder;
AbrtAppConfiguration *report_gtk_conf;
AbrtAppConfiguration *abrt_applet_conf;
+ AbrtAppConfiguration *privacy_gsettings;
+ /* Static array for all switches */
AbrtConfigWidgetOption options[_ABRT_OPT_END_];
};
@@ -79,6 +102,8 @@ static guint s_signals[SN_LAST_SIGNAL] = { 0 };
static void abrt_config_widget_finalize(GObject *object);
+/* New ABRT configuration file wrapper
+ */
static AbrtAppConfiguration *
abrt_app_configuration_new(const char *app_name)
{
@@ -86,6 +111,7 @@ abrt_app_configuration_new(const char *app_name)
conf->app_name = xstrdup(app_name);
conf->settings = new_map_string();
+ conf->glib_settings = NULL;
if(!load_app_conf_file(conf->app_name, conf->settings)) {
g_warning("Failed to load config for '%s'", conf->app_name);
@@ -94,22 +120,50 @@ abrt_app_configuration_new(const char *app_name)
return conf;
}
+/* New GSettings wrapper
+ */
+static AbrtAppConfiguration *
+abrt_app_configuration_new_glib(const char *schema)
+{
+ AbrtAppConfiguration *conf = xmalloc(sizeof(*conf));
+
+ conf->app_name = xstrdup(schema);
+ conf->settings = NULL;
+ conf->glib_settings = g_settings_new(conf->app_name);
+
+ return conf;
+}
+
static void
abrt_app_configuration_set_value(AbrtAppConfiguration *conf, const char *name, const char *value)
{
- set_app_user_setting(conf->settings, name, value);
+ if (conf->settings)
+ set_app_user_setting(conf->settings, name, value);
+ else if (conf->glib_settings)
+ g_settings_set_boolean(conf->glib_settings, name, string_to_bool(value));
+ else
+ assert(!"BUG: not properly initialized AbrtAppConfiguration");
}
static const char *
abrt_app_configuration_get_value(AbrtAppConfiguration *conf, const char *name)
{
- return get_app_user_setting(conf->settings, name);
+ if (conf->settings)
+ return get_app_user_setting(conf->settings, name);
+
+ if (conf->glib_settings)
+ return g_settings_get_boolean(conf->glib_settings, name) ? "yes" : "no";
+
+ assert(!"BUG: not properly initialized AbrtAppConfiguration");
}
static void
abrt_app_configuration_save(AbrtAppConfiguration *conf)
{
- save_app_conf_file(conf->app_name, conf->settings);
+ if (conf->settings)
+ save_app_conf_file(conf->app_name, conf->settings);
+
+ /* No need to save GSettings because changes are applied instantly */
}
static void
@@ -121,8 +175,17 @@ abrt_app_configuration_free(AbrtAppConfiguration *conf)
free(conf->app_name);
conf->app_name = (void *)0xDEADBEAF;
- free_map_string(conf->settings);
- conf->settings = (void *)0xDEADBEAF;
+ if (conf->settings)
+ {
+ free_map_string(conf->settings);
+ conf->settings = (void *)0xDEADBEAF;
+ }
+
+ if (conf->glib_settings)
+ {
+ g_object_unref(conf->glib_settings);
+ conf->glib_settings = (void *)0xDEADBEAF;
+ }
}
static void
@@ -161,6 +224,9 @@ abrt_config_widget_finalize(GObject *object)
abrt_app_configuration_free(self->priv->abrt_applet_conf);
self->priv->abrt_applet_conf = NULL;
+ abrt_app_configuration_free(self->priv->privacy_gsettings);
+ self->priv->privacy_gsettings = NULL;
+
G_OBJECT_CLASS(abrt_config_widget_parent_class)->finalize(object);
}
@@ -217,8 +283,31 @@ connect_switch_with_option(AbrtConfigWidget *self, enum AbrtOptions opid, const
g_signal_connect(G_OBJECT(gsw), "notify::active",
G_CALLBACK(on_switch_activate), self);
- if (option->config == NULL)
- gtk_widget_set_sensitive(GTK_WIDGET(gsw), FALSE);
+ /* If the option has no config, make the corresponding insensitive. */
+ gtk_widget_set_sensitive(GTK_WIDGET(gsw), option->config != NULL);
+}
+
+static void
+pp_launcher_clicked(GtkButton *launcher, gpointer *unused_data)
+{
+ GDesktopAppInfo *app = g_object_get_data(G_OBJECT(launcher), "launched-app");
+ GError *err = NULL;
+ if (!g_app_info_launch(G_APP_INFO(app), NULL, NULL, &err))
+ {
+ perror_msg("Could not launch '%s': %s",
+ g_desktop_app_info_get_filename(G_DESKTOP_APP_INFO (app)),
+ err->message);
+ }
+}
+
+static void
+os_release_callback(char *key, char *value, void *data)
+{
+ if (strcmp(key, "PRIVACY_POLICY") == 0)
+ *(char **)data = value;
+ else
+ free(value);
+ free(key);
}
static void
@@ -249,6 +338,7 @@ abrt_config_widget_init(AbrtConfigWidget *self)
self->priv->report_gtk_conf = abrt_app_configuration_new("report-gtk");
self->priv->abrt_applet_conf = abrt_app_configuration_new("abrt-applet");
+ self->priv->privacy_gsettings = abrt_app_configuration_new_glib("org.gnome.desktop.privacy");
/* Initialize options */
/* report-gtk */
@@ -259,15 +349,98 @@ abrt_config_widget_init(AbrtConfigWidget *self)
self->priv->options[ABRT_OPT_UPLOAD_COREDUMP].name = "abrt_analyze_smart_ask_upload_coredump";
self->priv->options[ABRT_OPT_UPLOAD_COREDUMP].default_value = TRUE;
self->priv->options[ABRT_OPT_UPLOAD_COREDUMP].config = self->priv->report_gtk_conf;
-
self->priv->options[ABRT_OPT_PRIVATE_TICKET].name = CREATE_PRIVATE_TICKET;
self->priv->options[ABRT_OPT_PRIVATE_TICKET].default_value = FALSE;
self->priv->options[ABRT_OPT_PRIVATE_TICKET].config = self->priv->report_gtk_conf;
/* abrt-applet */
- self->priv->options[ABRT_OPT_SEND_UREPORT].name = "AutoreportingEnabled";
- self->priv->options[ABRT_OPT_SEND_UREPORT].default_value = g_settings_autoreporting;
- self->priv->options[ABRT_OPT_SEND_UREPORT].config = self->priv->abrt_applet_conf;
+ self->priv->options[ABRT_OPT_SEND_UREPORT].name = "report-technical-problems";
+ self->priv->options[ABRT_OPT_SEND_UREPORT].default_value =
+ string_to_bool(abrt_app_configuration_get_value(self->priv->privacy_gsettings,
+ "report-technical-problems"));
+ {
+ /* Get the container widget for the lauch button and warnings */
+ GtkWidget *hbox_auto_reporting = WID("hbox_auto_reporting");
+ assert(hbox_auto_reporting);
+
+ /* Be able to use another desktop file while debugging */
+ const char *gpp_app = getenv("ABRT_PRIVACY_APP_DESKTOP");
+ if (gpp_app == NULL)
+ gpp_app = "gnome-privacy-panel.desktop";
+
+ GDesktopAppInfo *app = g_desktop_app_info_new(gpp_app);
+ char *message = NULL;
+ char *markup = NULL;
+ if (!app)
+ {
+ /* Make the switch editable */
+ self->priv->options[ABRT_OPT_SEND_UREPORT].config = self->priv->privacy_gsettings;
+
+ char *os_release = xmalloc_open_read_close("/etc/os-release", /*no size limit*/NULL);
+ char *privacy_policy = NULL;
+
+ /* Try to get the value of PRIVACY_POLICY from /etc/os-release */
+ sr_parse_os_release(os_release, os_release_callback, (void *)&privacy_policy);
+
+ message = xasprintf(_("The configuration option above has been moved to GSettings and "
+ "the switch is linked to the value of the setting 'report-technical-problems' "
+ "from the schema 'org.gnome.desktop.privacy'."));
+
+ /* Do not add Privacy Policy link if /etc/os-release does not contain PRIVACY_POLICY */
+ if (privacy_policy != NULL)
+ markup = xasprintf("<i>%s</i>\n\n<a href=\"%s\">Privacy Policy</a>", message, privacy_policy);
+ else
+ markup = xasprintf("<i>%s</i>", message);
+
+ free(privacy_policy);
+ free(os_release);
+ }
+ else
+ {
+ /* Make the switch read-only */
+ self->priv->options[ABRT_OPT_SEND_UREPORT].config = NULL;
+
+ message = xasprintf(_("The configuration option above can be configured in"));
+ markup = xasprintf("<i>%s</i>", message);
+
+ GtkWidget *launcher = gtk_button_new_with_label(g_app_info_get_display_name(G_APP_INFO(app)));
+
+ /* Here we could pass the launcher to pp_launcher_clicked() as the
+ * 4th argument of g_signal_connect() but we would leek the
+ * launcher's memory. Therefore we need to find a way how to free
+ * the launcher when it is not needed anymore. GtkWidget inherits
+ * from GObject which offers a functionality for attaching an
+ * arbitrary data to its instances. The last argument is a function
+ * called to destroy the arbirarty data when the instance is being
+ * destoryed. */
+ g_object_set_data_full(G_OBJECT(launcher), "launched-app", app, g_object_unref);
+ g_signal_connect(launcher, "clicked", G_CALLBACK(pp_launcher_clicked), NULL);
+
+ /* Make the launcher button narrow, otherwise it would expand to
+ * the width of the warninig. */
+ gtk_widget_set_hexpand(launcher, FALSE);
+ gtk_widget_set_vexpand(launcher, FALSE);
+
+ /* Make the launcher button alligned on center of the warning. */
+ gtk_widget_set_halign(launcher, GTK_ALIGN_CENTER);
+ gtk_widget_set_valign(launcher, GTK_ALIGN_CENTER);
+
+ gtk_box_pack_end(GTK_BOX(hbox_auto_reporting), launcher, false, false, 0);
+ }
+
+
+ GtkWidget *lbl = gtk_label_new(message);
+ gtk_label_set_markup(GTK_LABEL(lbl), markup);
+ /* Do not expand the window by too long warning. */
+ gtk_label_set_line_wrap(GTK_LABEL(lbl), TRUE);
+ /* Let users to copy the warning. */
+ gtk_label_set_selectable(GTK_LABEL(lbl), TRUE);
+
+ free(markup);
+ free(message);
+
+ gtk_box_pack_start(GTK_BOX(hbox_auto_reporting), lbl, false, false, 0);
+ }
self->priv->options[ABRT_OPT_SHORTENED_REPORTING].name = "ShortenedReporting";
self->priv->options[ABRT_OPT_SHORTENED_REPORTING].default_value = g_settings_shortenedreporting;
diff --git a/src/configuration-gui/abrt-config-widget.glade b/src/configuration-gui/abrt-config-widget.glade
index 3aa566c..7f613c7 100644
--- a/src/configuration-gui/abrt-config-widget.glade
+++ b/src/configuration-gui/abrt-config-widget.glade
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.18.3 -->
<interface>
- <!-- interface-requires gtk+ 3.0 -->
+ <requires lib="gtk+" version="3.0"/>
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<child>
@@ -11,7 +12,6 @@
<property name="margin_right">10</property>
<property name="margin_top">10</property>
<property name="margin_bottom">10</property>
- <property name="row_homogeneous">True</property>
<child>
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
@@ -26,8 +26,6 @@
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
</packing>
</child>
<child>
@@ -44,8 +42,6 @@
<packing>
<property name="left_attach">0</property>
<property name="top_attach">3</property>
- <property name="width">1</property>
- <property name="height">1</property>
</packing>
</child>
<child>
@@ -59,8 +55,6 @@
<packing>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
</packing>
</child>
<child>
@@ -74,13 +68,12 @@
<packing>
<property name="left_attach">1</property>
<property name="top_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="switch_send_ureport">
<property name="visible">True</property>
+ <property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="halign">end</property>
<property name="valign">center</property>
@@ -89,8 +82,6 @@
<packing>
<property name="left_attach">1</property>
<property name="top_attach">3</property>
- <property name="width">1</property>
- <property name="height">1</property>
</packing>
</child>
<child>
@@ -106,9 +97,7 @@
</object>
<packing>
<property name="left_attach">0</property>
- <property name="top_attach">4</property>
- <property name="width">1</property>
- <property name="height">1</property>
+ <property name="top_attach">5</property>
</packing>
</child>
<child>
@@ -121,9 +110,7 @@
</object>
<packing>
<property name="left_attach">1</property>
- <property name="top_attach">4</property>
- <property name="width">1</property>
- <property name="height">1</property>
+ <property name="top_attach">5</property>
</packing>
</child>
<child>
@@ -136,9 +123,7 @@
</object>
<packing>
<property name="left_attach">1</property>
- <property name="top_attach">5</property>
- <property name="width">1</property>
- <property name="height">1</property>
+ <property name="top_attach">6</property>
</packing>
</child>
<child>
@@ -154,9 +139,7 @@
</object>
<packing>
<property name="left_attach">0</property>
- <property name="top_attach">5</property>
- <property name="width">1</property>
- <property name="height">1</property>
+ <property name="top_attach">6</property>
</packing>
</child>
<child>
@@ -172,8 +155,6 @@
<packing>
<property name="left_attach">2</property>
<property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
</packing>
</child>
<child>
@@ -188,8 +169,6 @@
<packing>
<property name="left_attach">2</property>
<property name="top_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
</packing>
</child>
<child>
@@ -204,8 +183,6 @@
<packing>
<property name="left_attach">2</property>
<property name="top_attach">3</property>
- <property name="width">1</property>
- <property name="height">1</property>
</packing>
</child>
<child>
@@ -219,9 +196,7 @@
</object>
<packing>
<property name="left_attach">2</property>
- <property name="top_attach">4</property>
- <property name="width">1</property>
- <property name="height">1</property>
+ <property name="top_attach">5</property>
</packing>
</child>
<child>
@@ -235,9 +210,7 @@
</object>
<packing>
<property name="left_attach">2</property>
- <property name="top_attach">5</property>
- <property name="width">1</property>
- <property name="height">1</property>
+ <property name="top_attach">6</property>
</packing>
</child>
<child>
@@ -254,8 +227,6 @@
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
</packing>
</child>
<child>
@@ -270,8 +241,6 @@
<packing>
<property name="left_attach">2</property>
<property name="top_attach">2</property>
- <property name="width">1</property>
- <property name="height">1</property>
</packing>
</child>
<child>
@@ -286,8 +255,6 @@
<packing>
<property name="left_attach">0</property>
<property name="top_attach">2</property>
- <property name="width">1</property>
- <property name="height">1</property>
</packing>
</child>
<child>
@@ -301,8 +268,6 @@
<packing>
<property name="left_attach">1</property>
<property name="top_attach">2</property>
- <property name="width">1</property>
- <property name="height">1</property>
</packing>
</child>
<child>
@@ -316,9 +281,7 @@
</object>
<packing>
<property name="left_attach">0</property>
- <property name="top_attach">6</property>
- <property name="width">1</property>
- <property name="height">1</property>
+ <property name="top_attach">7</property>
</packing>
</child>
<child>
@@ -331,9 +294,7 @@
</object>
<packing>
<property name="left_attach">1</property>
- <property name="top_attach">6</property>
- <property name="width">1</property>
- <property name="height">1</property>
+ <property name="top_attach">7</property>
</packing>
</child>
<child>
@@ -347,11 +308,26 @@
</object>
<packing>
<property name="left_attach">2</property>
- <property name="top_attach">6</property>
- <property name="width">1</property>
- <property name="height">1</property>
+ <property name="top_attach">7</property>
</packing>
</child>
+ <child>
+ <object class="GtkBox" id="hbox_auto_reporting">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">4</property>
+ <property name="width">2</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
</object>
</child>
</object>
--
2.4.1

View File

@ -21,6 +21,9 @@
%endif
%endif
# build abrt-atomic subpackage
%bcond_without atomic
%ifarch aarch64
%define have_kexec_tools 0
%else
@ -40,13 +43,13 @@
%define docdirversion -%{version}
%endif
%define libreport_ver 2.5.1
%define satyr_ver 0.16
%define libreport_ver 2.6.0
%define satyr_ver 0.18
Summary: Automatic bug detection and reporting tool
Name: abrt
Version: 2.5.1
Release: 3%{?dist}
Version: 2.6.0
Release: 1%{?dist}
License: GPLv2+
Group: Applications/System
URL: https://github.com/abrt/abrt/wiki/ABRT-Project
@ -56,28 +59,6 @@ Patch0: disable-OpenGPGCheck-in-Fedora-Rawhide.patch
# git format-patch %%{Version} --topo-order -N -M;
# i=1; for p in `ls 0*.patch`; do printf "Patch%04d: %s\n" $i $p; ((i++)); done
#Patch0001: 0001-testsuite-grab-beakerlib-stored-log-files-from-var-t.patch
#Patch0002: 0002-testsuite-add-the-machineid-test-case-to-rhel6.patch
#Patch0003: 0003-testsuite-add-test-for-abrt-cli-report-via-reporter-.patch
Patch0004: 0004-applet-switch-to-D-Bus-methods.patch
Patch0005: 0005-lib-add-new-kernel-taint-flags.patch
Patch0006: 0006-upload-validate-and-sanitize-uploaded-dump-directori.patch
#Patch0007: 0007-testsuite-don-t-run-whole-test-if-reporter-mantisbt-.patch
Patch0008: 0008-a-a-s-p-d-add-new-known-interpreter-to-conf-file.patch
#Patch0009: 0009-abrt-detect-DumpLocation-from-abrt.conf-instead-of-u.patch
Patch0010: 0010-applet-fix-problem-info-double-free.patch
Patch0011: 0011-cli-do-not-exit-with-segfault-if-dbus-fails.patch
#Patch0012: 0012-spec-add-a-dependency-on-abrt-dbus-to-abrt-cli.patch
Patch0013: 0013-abrt-auto-reporting-require-rhtsupport.conf-file-onl.patch
#Patch0014: 0014-spec-add-AUTHENTICATED_AUTOREPORTING-conditional.patch
Patch0015: 0015-abrt-action-list-dsos-do-not-decode-not-existing-obj.patch
Patch0016: 0016-doc-polkit-Spelling-grammar-fixes.patch
#Patch0017: 0017-testsuite-add-new-version-of-python-interpreters.patch
Patch0018: 0018-applet-migrate-Autoreporting-options-to-GSettings.patch
Patch0019: 0019-config-UI-read-glade-from-a-local-file-first.patch
Patch0020: 0020-config-UI-enable-options-without-config-files.patch
Patch0021: 0021-config-UI-Automatic-reporting-from-GSettings.patch
#Patch0022: 0022-testsuite-test-safeness-of-creating-user-cores.patch
# '%%autosetup -S git' -> git
BuildRequires: git
@ -104,6 +85,7 @@ BuildRequires: satyr-devel >= %{satyr_ver}
BuildRequires: systemd-python
BuildRequires: systemd-python3
BuildRequires: augeas
BuildRequires: libselinux-devel
Requires: libreport >= %{libreport_ver}
Requires: satyr >= %{satyr_ver}
@ -391,11 +373,13 @@ Provides: bug-buddy = 2.28.0
Virtual package to install all necessary packages for usage from desktop
environment.
%if %{with atomic}
%package atomic
Summary: Package to make easy default installation on Atomic hosts
Group: Applications/System
Requires: %{name}-addon-coredump-helper = %{version}-%{release}
Conflicts: %{name}-addon-ccpp
%endif
%description atomic
Package to install all necessary packages for usage from Atomic
@ -418,6 +402,7 @@ Summary: ABRT Python API
Group: System Environment/Libraries
Requires: %{name} = %{version}-%{release}
Requires: %{name}-libs = %{version}-%{release}
Requires: %{name}-dbus = %{version}-%{release}
Requires: pygobject2
Requires: dbus-python
Requires: libreport-python
@ -445,6 +430,7 @@ Summary: ABRT Python 3 API
Group: System Environment/Libraries
Requires: %{name} = %{version}-%{release}
Requires: %{name}-libs = %{version}-%{release}
Requires: %{name}-dbus = %{version}-%{release}
Requires: pygobject3
Requires: python3-dbus
Requires: libreport-python3
@ -493,6 +479,9 @@ CFLAGS="%{optflags} -Werror" %configure --enable-doxygen-docs \
%ifnarch arm armhfp armv7hl armv7l aarch64
--enable-native-unwinder \
%endif
%if %{without atomic}
--without-atomic \
%endif
%if %{?have_kexec_tools} == 0
--disable-addon-vmcore \
%endif
@ -520,7 +509,7 @@ find $RPM_BUILD_ROOT -name '*.la' -or -name '*.a' | xargs rm -f
mkdir -p ${RPM_BUILD_ROOT}/%{_initrddir}
mkdir -p $RPM_BUILD_ROOT/var/cache/abrt-di
mkdir -p $RPM_BUILD_ROOT/var/run/abrt
mkdir -p $RPM_BUILD_ROOT/var/tmp/abrt
mkdir -p $RPM_BUILD_ROOT/var/spool/abrt
mkdir -p $RPM_BUILD_ROOT/var/spool/abrt-upload
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/abrt
@ -627,6 +616,7 @@ chown -R abrt:abrt %{_localstatedir}/cache/abrt-di
# update icon cache
touch --no-create %{_datadir}/icons/hicolor &>/dev/null || :
%if %{with atomic}
%post atomic
if [ -f /etc/abrt/plugins/CCpp.conf ]; then
mv /etc/abrt/plugins/CCpp.conf /etc/abrt/plugins/CCpp.conf.rpmsave.atomic || exit 1;
@ -654,6 +644,7 @@ fi
%postun atomic
%systemd_postun_with_restart abrt-coredump-helper.service
%endif
%post libs -p /sbin/ldconfig
@ -700,6 +691,11 @@ service abrt-upload-watch condrestart >/dev/null 2>&1 || :
%posttrans gui
gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
%posttrans dbus
# Force abrt-dbus to restart like we do with the other services
killall abrt-dbus >/dev/null 2>&1 || :
%files -f %{name}.lang
%defattr(-,root,root,-)
%doc README COPYING
@ -736,7 +732,7 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
%{_mandir}/man5/abrt_event.conf.5.gz
%config(noreplace) %{_sysconfdir}/libreport/events.d/smart_event.conf
%{_mandir}/man5/smart_event.conf.5.gz
%dir %attr(0751, abrt, abrt) %{_localstatedir}/tmp/%{name}
%dir %attr(0751, abrt, abrt) %{_localstatedir}/spool/%{name}
%dir %attr(0700, abrt, abrt) %{_localstatedir}/spool/%{name}-upload
# abrtd runs as root
%dir %attr(0755, root, root) %{_localstatedir}/run/%{name}
@ -987,6 +983,7 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
%files desktop
%defattr(-,root,root,-)
%if %{with atomic}
%files atomic
%defattr(-,root,root,-)
%config(noreplace) %{_sysconfdir}/%{name}/plugins/CCpp_Atomic.conf
@ -996,6 +993,7 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
%{_bindir}/abrt-action-save-package-data
%{_mandir}/man1/abrt-action-save-package-data.1.gz
%{_mandir}/man5/abrt-action-save-package-data.conf.5.gz
%endif
%files plugin-bodhi
%defattr(-,root,root,-)
@ -1045,8 +1043,24 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
%config(noreplace) %{_sysconfdir}/profile.d/abrt-console-notification.sh
%changelog
* Tue Jun 09 2015 Jakub Filak <jfilak@redhat.com> 2.6.0-1
- move the default dump location to /var/spool/abrt from /var/tmp/abrt
- hooks: use root for owner of all dump directories
- ccpp: do not unlink failed and big user cores
- ccpp: don't save the system logs by default
- ccpp: stop reading hs_error.log from /tmp
- ccpp: emulate selinux for creation of compat cores
- koops: don't save dmesg if kernel.dmesg_restrict=1
- dbus: validate passed arguments
- turn off exploring crashed process's root directories
- abrt-python: bug fixes and improvements
- fixes for CVE-2015-3315, CVE-2015-3142, CVE-2015-1869, CVE-2015-1870
- fixes for CVE-2015-3147, CVE-2015-3151, CVE-2015-3150, CVE-2015-3159
- spec: add abrt-dbus to Rs of abrt-python and abrt-cli
- spec: restart abrt-dbus in posttrans
* Wed May 20 2015 Matej Habrnal <mhabrnal@redhat.com> 2.5.1-3
- applet: switch to D-Bus methods
- applet: fix problem info double free
- upload: validate and sanitize uploaded dump directories
- applet: switch to D-Bus methods
- lib: add new kernel taint flags

View File

@ -1 +1 @@
d24b5f4e4826a0832e6a21e6b0864c2e abrt-2.5.1.tar.gz
b764d6a2a12aaae8cbab3fb7fbe37089 abrt-2.6.0.tar.gz