From 5a620ea22003cba12dc58bc1f30c11cfe9965825 Mon Sep 17 00:00:00 2001 From: Bernhard Reutner-Fischer Date: Thu, 19 Jan 2006 18:04:15 +0000 Subject: [PATCH] - Document -m, -c, -s and provide a default shell for standalone build. - Wrap overlong lines plus a few whitespace fixes. - add GPL header. --- include/usage.h | 4 +++- loginutils/su.c | 26 +++++++++++++++++--------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/include/usage.h b/include/usage.h index 81f0e1d6d..e6287c8a3 100644 --- a/include/usage.h +++ b/include/usage.h @@ -2814,7 +2814,9 @@ #define su_full_usage \ "Change user id or become root.\n" \ "Options:\n" \ - "\t-p\tPreserve environment" + "\t-p, -m\tPreserve environment" \ + "\n\t-c\tCommand to pass to 'sh -c'" \ + "\n\t-s\tShell to use instead of default shell" #define sulogin_trivial_usage \ "[OPTION]... [tty-device]" diff --git a/loginutils/su.c b/loginutils/su.c index 3e82d2428..b0227787a 100644 --- a/loginutils/su.c +++ b/loginutils/su.c @@ -1,4 +1,7 @@ /* vi: set sw=4 ts=4: */ +/* + Licensed under the GPL v2, see the file LICENSE in this tarball. +*/ #include #include @@ -18,12 +21,15 @@ #include "busybox.h" - - /* The shell to run if none is given in the user's passwd entry. */ +#ifndef DEFAULT_SHELL +#define DEFAULT_SHELL "/bin/sh" +#endif + +/* Default user. */ #define DEFAULT_USER "root" -//#define SYSLOG_SUCCESS +/* #define SYSLOG_SUCCESS */ #define SYSLOG_FAILURE @@ -31,7 +37,8 @@ /* Log the fact that someone has run su */ # if defined( SYSLOG_SUCCESS ) && defined( SYSLOG_FAILURE ) -static void log_su (const char *successful, const char *old_user, const char *tty) +static void log_su (const char *successful, const char *old_user, + const char *tty) { syslog ( LOG_NOTICE, "%s%s on %s", successful, old_user, tty); } @@ -98,7 +105,8 @@ int su_main ( int argc, char **argv ) if ( !old_user ) #endif { - /* getlogin can fail -- usually due to lack of utmp entry. Resort to getpwuid. */ + /* getlogin can fail -- usually due to lack of utmp entry. + Resort to getpwuid. */ pw = getpwuid ( cur_uid ); old_user = ( pw ? pw->pw_name : "" ); } @@ -116,8 +124,8 @@ int su_main ( int argc, char **argv ) /* Make sure pw->pw_shell is non-NULL. It may be NULL when NEW_USER is a username that is retrieved via NIS (YP), but that doesn't have a default shell listed. */ - if ( !pw-> pw_shell || !pw->pw_shell [0] ) - pw-> pw_shell = (char *) DEFAULT_SHELL; + if ( !pw->pw_shell || !pw->pw_shell [0] ) + pw->pw_shell = (char *) DEFAULT_SHELL; if ((( cur_uid == 0 ) || correct_password ( pw ))) { log_su_successful(pw->pw_uid, old_user, tty ); @@ -133,7 +141,7 @@ int su_main ( int argc, char **argv ) if ( !opt_shell && opt_preserve ) opt_shell = getenv ( "SHELL" ); - if ( opt_shell && cur_uid && restricted_shell ( pw-> pw_shell )) { + if ( opt_shell && cur_uid && 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 @@ -147,7 +155,7 @@ int su_main ( int argc, char **argv ) change_identity ( pw ); setup_environment ( opt_shell, opt_loginshell, !opt_preserve, pw ); -#ifdef CONFIG_SELINUX +#if ENABLE_SELINUX set_current_security_context(NULL); #endif run_shell ( opt_shell, opt_loginshell, opt_command, (const char**)opt_args);