diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2006-10-03 15:57:40 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2006-10-03 15:57:40 +0000 |
commit | fe54458e46eef445da32862b2171392be8f01ab4 (patch) | |
tree | f88b5ee99da5816f1628c9560cfabecb97468689 /libbb/setup_environment.c | |
parent | 7c1ed2e922e80b7a81da3e748cb975c876315bd5 (diff) | |
download | busybox-w32-fe54458e46eef445da32862b2171392be8f01ab4.tar.gz busybox-w32-fe54458e46eef445da32862b2171392be8f01ab4.tar.bz2 busybox-w32-fe54458e46eef445da32862b2171392be8f01ab4.zip |
runit/chpst: "change process state" utility
It's "nice" on steroids - can set uid/gid, mem/cpu limits etc. +3.5k
Diffstat (limited to 'libbb/setup_environment.c')
-rw-r--r-- | libbb/setup_environment.c | 47 |
1 files changed, 20 insertions, 27 deletions
diff --git a/libbb/setup_environment.c b/libbb/setup_environment.c index a14649625..874a58efa 100644 --- a/libbb/setup_environment.c +++ b/libbb/setup_environment.c | |||
@@ -42,15 +42,9 @@ | |||
42 | #define DEFAULT_LOGIN_PATH "/bin:/usr/bin" | 42 | #define DEFAULT_LOGIN_PATH "/bin:/usr/bin" |
43 | #define DEFAULT_ROOT_LOGIN_PATH "/usr/sbin:/bin:/usr/bin:/sbin" | 43 | #define DEFAULT_ROOT_LOGIN_PATH "/usr/sbin:/bin:/usr/bin:/sbin" |
44 | 44 | ||
45 | static void xsetenv ( const char *key, const char *value ) | 45 | void setup_environment(const char *shell, int loginshell, int changeenv, const struct passwd *pw) |
46 | { | 46 | { |
47 | if ( setenv ( key, value, 1 )) | 47 | if (loginshell) { |
48 | bb_error_msg_and_die (bb_msg_memory_exhausted); | ||
49 | } | ||
50 | |||
51 | void setup_environment ( const char *shell, int loginshell, int changeenv, const struct passwd *pw ) | ||
52 | { | ||
53 | if ( loginshell ) { | ||
54 | const char *term; | 48 | const char *term; |
55 | 49 | ||
56 | /* Change the current working directory to be the home directory | 50 | /* Change the current working directory to be the home directory |
@@ -59,32 +53,31 @@ void setup_environment ( const char *shell, int loginshell, int changeenv, const | |||
59 | * directory. | 53 | * directory. |
60 | * Some systems default to HOME=/ | 54 | * Some systems default to HOME=/ |
61 | */ | 55 | */ |
62 | if ( chdir ( pw-> pw_dir )) { | 56 | if (chdir(pw->pw_dir)) { |
63 | xchdir ( "/" ); | 57 | xchdir("/"); |
64 | fputs ( "warning: cannot change to home directory\n", stderr ); | 58 | fputs("warning: cannot change to home directory\n", stderr); |
65 | } | 59 | } |
66 | 60 | ||
67 | /* Leave TERM unchanged. Set HOME, SHELL, USER, LOGNAME, PATH. | 61 | /* Leave TERM unchanged. Set HOME, SHELL, USER, LOGNAME, PATH. |
68 | Unset all other environment variables. */ | 62 | Unset all other environment variables. */ |
69 | term = getenv ("TERM"); | 63 | term = getenv("TERM"); |
70 | clearenv ( ); | 64 | clearenv(); |
71 | if ( term ) | 65 | if (term) |
72 | xsetenv ( "TERM", term ); | 66 | xsetenv("TERM", term); |
73 | xsetenv ( "HOME", pw-> pw_dir ); | 67 | xsetenv("HOME", pw->pw_dir); |
74 | xsetenv ( "SHELL", shell ); | 68 | xsetenv("SHELL", shell); |
75 | xsetenv ( "USER", pw-> pw_name ); | 69 | xsetenv("USER", pw->pw_name); |
76 | xsetenv ( "LOGNAME", pw-> pw_name ); | 70 | xsetenv("LOGNAME", pw->pw_name); |
77 | xsetenv ( "PATH", ( pw-> pw_uid ? DEFAULT_LOGIN_PATH : DEFAULT_ROOT_LOGIN_PATH )); | 71 | xsetenv("PATH", (pw->pw_uid ? DEFAULT_LOGIN_PATH : DEFAULT_ROOT_LOGIN_PATH)); |
78 | } | 72 | } |
79 | else if ( changeenv ) { | 73 | else if (changeenv) { |
80 | /* Set HOME, SHELL, and if not becoming a super-user, | 74 | /* Set HOME, SHELL, and if not becoming a super-user, |
81 | USER and LOGNAME. */ | 75 | USER and LOGNAME. */ |
82 | xsetenv ( "HOME", pw-> pw_dir ); | 76 | xsetenv("HOME", pw->pw_dir); |
83 | xsetenv ( "SHELL", shell ); | 77 | xsetenv("SHELL", shell); |
84 | if ( pw-> pw_uid ) { | 78 | if (pw->pw_uid) { |
85 | xsetenv ( "USER", pw-> pw_name ); | 79 | xsetenv("USER", pw->pw_name); |
86 | xsetenv ( "LOGNAME", pw-> pw_name ); | 80 | xsetenv("LOGNAME", pw->pw_name); |
87 | } | 81 | } |
88 | } | 82 | } |
89 | } | 83 | } |
90 | |||