aboutsummaryrefslogtreecommitdiff
path: root/miscutils/drop.c
diff options
context:
space:
mode:
Diffstat (limited to 'miscutils/drop.c')
-rw-r--r--miscutils/drop.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/miscutils/drop.c b/miscutils/drop.c
index 6effc1831..db3d709d1 100644
--- a/miscutils/drop.c
+++ b/miscutils/drop.c
@@ -58,6 +58,18 @@
58#include <lazyload.h> 58#include <lazyload.h>
59#include "NUM_APPLETS.h" 59#include "NUM_APPLETS.h"
60 60
61// Set an environment variable to the name of the unprivileged user,
62// but only if it was previously unset or contained "root".
63static void setenv_name(const char *key)
64{
65 const char *name = get_user_name();
66 const char *oldname = getenv(key);
67
68 if (name && (!oldname || strcmp(oldname, "root") == 0)) {
69 setenv(key, name, 1);
70 }
71}
72
61int drop_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 73int drop_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
62int drop_main(int argc, char **argv) 74int drop_main(int argc, char **argv)
63{ 75{
@@ -166,6 +178,10 @@ int drop_main(int argc, char **argv)
166 si.hStdError = GetStdHandle(STD_ERROR_HANDLE); 178 si.hStdError = GetStdHandle(STD_ERROR_HANDLE);
167 si.dwFlags = STARTF_USESTDHANDLES; 179 si.dwFlags = STARTF_USESTDHANDLES;
168 180
181 setenv_name("USER");
182 setenv_name("USERNAME");
183 setenv_name("LOGNAME");
184
169 if (!CreateProcessAsUserA(token, exe, cmd, NULL, NULL, TRUE, 185 if (!CreateProcessAsUserA(token, exe, cmd, NULL, NULL, TRUE,
170 0, NULL, NULL, &si, &pi)) { 186 0, NULL, NULL, &si, &pi)) {
171 xfunc_error_retval = 126; 187 xfunc_error_retval = 126;