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 | |
parent | 7c1ed2e922e80b7a81da3e748cb975c876315bd5 (diff) | |
download | busybox-fe54458e46eef445da32862b2171392be8f01ab4.tar.gz |
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')
-rw-r--r-- | libbb/setup_environment.c | 47 | ||||
-rw-r--r-- | libbb/xfuncs.c | 8 |
2 files changed, 28 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 @@ #define DEFAULT_LOGIN_PATH "/bin:/usr/bin" #define DEFAULT_ROOT_LOGIN_PATH "/usr/sbin:/bin:/usr/bin:/sbin" -static void xsetenv ( const char *key, const char *value ) +void setup_environment(const char *shell, int loginshell, int changeenv, const struct passwd *pw) { - if ( setenv ( key, value, 1 )) - bb_error_msg_and_die (bb_msg_memory_exhausted); -} - -void setup_environment ( const char *shell, int loginshell, int changeenv, const struct passwd *pw ) -{ - if ( loginshell ) { + if (loginshell) { const char *term; /* 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 * directory. * Some systems default to HOME=/ */ - if ( chdir ( pw-> pw_dir )) { - xchdir ( "/" ); - fputs ( "warning: cannot change to home directory\n", stderr ); + if (chdir(pw->pw_dir)) { + xchdir("/"); + fputs("warning: cannot change to home directory\n", stderr); } /* Leave TERM unchanged. Set HOME, SHELL, USER, LOGNAME, PATH. Unset all other environment variables. */ - term = getenv ("TERM"); - clearenv ( ); - if ( term ) - xsetenv ( "TERM", term ); - xsetenv ( "HOME", pw-> pw_dir ); - xsetenv ( "SHELL", shell ); - xsetenv ( "USER", pw-> pw_name ); - xsetenv ( "LOGNAME", pw-> pw_name ); - xsetenv ( "PATH", ( pw-> pw_uid ? DEFAULT_LOGIN_PATH : DEFAULT_ROOT_LOGIN_PATH )); + term = getenv("TERM"); + clearenv(); + if (term) + xsetenv("TERM", term); + xsetenv("HOME", pw->pw_dir); + xsetenv("SHELL", shell); + xsetenv("USER", pw->pw_name); + xsetenv("LOGNAME", pw->pw_name); + xsetenv("PATH", (pw->pw_uid ? DEFAULT_LOGIN_PATH : DEFAULT_ROOT_LOGIN_PATH)); } - else if ( changeenv ) { + else if (changeenv) { /* Set HOME, SHELL, and if not becoming a super-user, USER and LOGNAME. */ - xsetenv ( "HOME", pw-> pw_dir ); - xsetenv ( "SHELL", shell ); - if ( pw-> pw_uid ) { - xsetenv ( "USER", pw-> pw_name ); - xsetenv ( "LOGNAME", pw-> pw_name ); + xsetenv("HOME", pw->pw_dir); + xsetenv("SHELL", shell); + if (pw->pw_uid) { + xsetenv("USER", pw->pw_name); + xsetenv("LOGNAME", pw->pw_name); } } } - diff --git a/libbb/xfuncs.c b/libbb/xfuncs.c index 92091e555..7b95e49f1 100644 --- a/libbb/xfuncs.c +++ b/libbb/xfuncs.c @@ -255,6 +255,14 @@ int wait4pid(int pid) } #endif +#ifdef L_xsetenv +void xsetenv(const char *key, const char *value) +{ + if(setenv(key, value, 1)) + bb_error_msg_and_die(bb_msg_memory_exhausted); +} +#endif + #ifdef L_itoa // Convert unsigned integer to ascii, writing into supplied buffer. A // truncated result is always null terminated (unless buflen is 0), and |