diff options
author | Michael Klein <michael.klein@puffin.lb.shuttle.de> | 2016-01-06 22:52:37 +0100 |
---|---|---|
committer | Michael Klein <michael.klein@puffin.lb.shuttle.de> | 2016-01-06 22:53:14 +0100 |
commit | b14f89e9d42f314ce964a500df842364770b06ee (patch) | |
tree | 9a1334bb523afc928a411c0c6430b5b1b93252f8 /EnvScreen.c | |
parent | b10e54cdee3d964ae8c1962989bc9bc0e804f19b (diff) |
drop privileges before reading environment
Diffstat (limited to 'EnvScreen.c')
-rw-r--r-- | EnvScreen.c | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/EnvScreen.c b/EnvScreen.c index c989d26f..1881b1ff 100644 --- a/EnvScreen.c +++ b/EnvScreen.c @@ -60,23 +60,20 @@ static inline void addLine(const char* line, Vector* lines, Panel* panel, const static void EnvScreen_scan(EnvScreen* this, Vector* lines, IncSet* inc) { Panel* panel = this->display; int idx = MAX(Panel_getSelectedIndex(panel), 0); - uid_t uid = getuid(); Panel_prune(panel); - if (uid == 0 || uid == this->process->st_uid) { - char *env = Platform_getProcessEnv(this->process->pid); - if (env) { - for (char *p = env; *p; p = strrchr(p, 0)+1) - addLine(p, lines, panel, IncSet_filter(inc)); - free(env); - } - else { - addLine("Could not read process environment.", lines, panel, IncSet_filter(inc)); - } + uid_t euid = geteuid(); + seteuid(getuid()); + char *env = Platform_getProcessEnv(this->process->pid); + seteuid(euid); + if (env) { + for (char *p = env; *p; p = strrchr(p, 0)+1) + addLine(p, lines, panel, IncSet_filter(inc)); + free(env); } else { - addLine("Process belongs to different user.", lines, panel, IncSet_filter(inc)); + addLine("Could not read process environment.", lines, panel, IncSet_filter(inc)); } Vector_insertionSort(lines); |