summaryrefslogtreecommitdiffstats
path: root/src/plugins/abrt-action-analyze-c.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/abrt-action-analyze-c.c')
-rw-r--r--src/plugins/abrt-action-analyze-c.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/plugins/abrt-action-analyze-c.c b/src/plugins/abrt-action-analyze-c.c
index 3c7d4f1d..3dfbe485 100644
--- a/src/plugins/abrt-action-analyze-c.c
+++ b/src/plugins/abrt-action-analyze-c.c
@@ -50,12 +50,23 @@ static char *run_unstrip_n(const char *dump_dir_name, unsigned timeout_sec)
struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0);
if (!dd)
return NULL;
- char *uid_str = dd_load_text(dd, FILENAME_UID);
+
+ char *uid_str = dd_load_text_ext(dd, FILENAME_UID, DD_FAIL_QUIETLY_ENOENT | DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE);
dd_close(dd);
- unsigned uid = xatoi_positive(uid_str);
- free(uid_str);
+ uid_t uid = -1L;
+ if (uid_str)
+ {
+ uid = xatoi_positive(uid_str);
+ free(uid_str);
+ if (uid == geteuid())
+ {
+ uid = -1L; /* no need to setuid/gid if we are already under right uid */
+ }
+ }
- int flags = EXECFLG_INPUT_NUL | EXECFLG_OUTPUT | EXECFLG_SETGUID | EXECFLG_SETSID | EXECFLG_QUIET;
+ int flags = EXECFLG_INPUT_NUL | EXECFLG_OUTPUT | EXECFLG_SETSID | EXECFLG_QUIET;
+ if (uid != (uid_t)-1L)
+ flags |= EXECFLG_SETGUID;
VERB1 flags &= ~EXECFLG_QUIET;
int pipeout[2];
char* args[4];