Signed-off-by: Jakub Filak <[email protected]>
---
src/dbus/abrt-dbus.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/src/dbus/abrt-dbus.c b/src/dbus/abrt-dbus.c
index 4302b4f..9f3b2d9 100644
--- a/src/dbus/abrt-dbus.c
+++ b/src/dbus/abrt-dbus.c
@@ -362,7 +362,7 @@ static bool allowed_problem_dir(const char *dir_name)
return true;
}
-static char *handle_new_problem(GVariant *problem_info, char **error)
+static char *handle_new_problem(GVariant *problem_info, uid_t caller_uid, char
**error)
{
problem_data_t *pd = problem_data_new();
@@ -374,6 +374,14 @@ static char *handle_new_problem(GVariant *problem_info,
char **error)
problem_data_add_text_editable(pd, key, value);
}
+ char buf[sizeof(uid_t) * 3 + 2];
+ if (caller_uid != 0)
+ { /* set uid field to caller's uid if caller is not root */
+ VERB2 log("Adding UID %d to problem data", caller_uid);
+ snprintf(buf, sizeof(buf), "%d", caller_uid);
+ problem_data_add_text_noteditable(pd, FILENAME_UID, buf);
+ }
+
char *problem_id = problem_data_save(pd);
if (!problem_id)
{
@@ -419,7 +427,7 @@ static void handle_method_call(GDBusConnection *connection,
if (g_strcmp0(method_name, "NewProblem") == 0)
{
char *error = NULL;
- char *problem_id =
handle_new_problem(g_variant_get_child_value(parameters, 0), &error);
+ char *problem_id =
handle_new_problem(g_variant_get_child_value(parameters, 0), caller_uid,
&error);
if (!problem_id)
{
g_dbus_method_invocation_return_dbus_error(invocation,
--
1.7.11.4