X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=loginutils%2Fsu.c;h=72dd0f06f0b6a59ed1fd2885177aac8c25af4deb;hb=569e930768922812ce5169a3058b65fff9196308;hp=9bae375515105266de781d459ad60fcaed08717b;hpb=a73b87e9343df2a6f14e328a977e7b70eb3ed707;p=platform%2Fupstream%2Fbusybox.git diff --git a/loginutils/su.c b/loginutils/su.c index 9bae375..72dd0f0 100644 --- a/loginutils/su.c +++ b/loginutils/su.c @@ -1,13 +1,23 @@ /* vi: set sw=4 ts=4: */ /* - * Mini su implementation for busybox + * Mini su implementation for busybox * - * Licensed under the GPL v2 or later, see the file LICENSE in this tarball. + * Licensed under GPLv2 or later, see file LICENSE in this source tree. */ #include "libbb.h" #include +//usage:#define su_trivial_usage +//usage: "[OPTIONS] [-] [USER]" +//usage:#define su_full_usage "\n\n" +//usage: "Run shell under USER (by default, root)\n" +//usage: "\nOptions:" +//usage: "\n -,-l Clear environment, run shell as login shell" +//usage: "\n -p,-m Do not set new $HOME, $SHELL, $USER, $LOGNAME" +//usage: "\n -c CMD Command to pass to 'sh -c'" +//usage: "\n -s SH Shell to use instead of user's default" + #if ENABLE_FEATURE_SU_CHECKS_SHELLS /* Return 1 if SHELL is a restricted shell (one not returned by * getusershell), else 0, meaning it is a standard shell. */ @@ -42,7 +52,9 @@ int su_main(int argc UNUSED_PARAM, char **argv) struct passwd *pw; uid_t cur_uid = getuid(); const char *tty; +#if ENABLE_FEATURE_UTMP char user_buf[64]; +#endif const char *old_user; flags = getopt32(argv, "mplc:s:", &opt_command, &opt_shell); @@ -102,20 +114,14 @@ int su_main(int argc UNUSED_PARAM, char **argv) opt_shell = getenv("SHELL"); } - /* Make sure pw->pw_shell is non-NULL. It may be NULL when NEW_USER - * is a username that is retrieved via NIS (YP), that doesn't have - * a default shell listed. */ - if (!pw->pw_shell || !pw->pw_shell[0]) - pw->pw_shell = (char *)DEFAULT_SHELL; - #if ENABLE_FEATURE_SU_CHECKS_SHELLS - if (opt_shell && cur_uid != 0 && restricted_shell(pw->pw_shell)) { + if (opt_shell && cur_uid != 0 && pw->pw_shell && restricted_shell(pw->pw_shell)) { /* The user being su'd to has a nonstandard shell, and so is * probably a uucp account or has restricted access. Don't * compromise the account by allowing access with a standard * shell. */ bb_error_msg("using restricted shell"); - opt_shell = NULL; + opt_shell = NULL; /* ignore -s PROG */ } /* else: user can run whatever he wants via "su -s PROG USER". * This is safe since PROG is run under user's uid/gid. */