- Document -m, -c, -s and provide a default shell for standalone build.
- Wrap overlong lines plus a few whitespace fixes. - add GPL header.
This commit is contained in:
parent
a901b40464
commit
5a620ea220
@ -2814,7 +2814,9 @@
|
|||||||
#define su_full_usage \
|
#define su_full_usage \
|
||||||
"Change user id or become root.\n" \
|
"Change user id or become root.\n" \
|
||||||
"Options:\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 \
|
#define sulogin_trivial_usage \
|
||||||
"[OPTION]... [tty-device]"
|
"[OPTION]... [tty-device]"
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
/* vi: set sw=4 ts=4: */
|
/* vi: set sw=4 ts=4: */
|
||||||
|
/*
|
||||||
|
Licensed under the GPL v2, see the file LICENSE in this tarball.
|
||||||
|
*/
|
||||||
|
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
@ -18,12 +21,15 @@
|
|||||||
|
|
||||||
#include "busybox.h"
|
#include "busybox.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* The shell to run if none is given in the user's passwd entry. */
|
/* 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 DEFAULT_USER "root"
|
||||||
|
|
||||||
//#define SYSLOG_SUCCESS
|
/* #define SYSLOG_SUCCESS */
|
||||||
#define SYSLOG_FAILURE
|
#define SYSLOG_FAILURE
|
||||||
|
|
||||||
|
|
||||||
@ -31,7 +37,8 @@
|
|||||||
/* Log the fact that someone has run su */
|
/* Log the fact that someone has run su */
|
||||||
|
|
||||||
# if defined( SYSLOG_SUCCESS ) && defined( SYSLOG_FAILURE )
|
# 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);
|
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 )
|
if ( !old_user )
|
||||||
#endif
|
#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 );
|
pw = getpwuid ( cur_uid );
|
||||||
old_user = ( pw ? pw->pw_name : "" );
|
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
|
/* 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
|
is a username that is retrieved via NIS (YP), but that doesn't have
|
||||||
a default shell listed. */
|
a default shell listed. */
|
||||||
if ( !pw-> pw_shell || !pw->pw_shell [0] )
|
if ( !pw->pw_shell || !pw->pw_shell [0] )
|
||||||
pw-> pw_shell = (char *) DEFAULT_SHELL;
|
pw->pw_shell = (char *) DEFAULT_SHELL;
|
||||||
|
|
||||||
if ((( cur_uid == 0 ) || correct_password ( pw ))) {
|
if ((( cur_uid == 0 ) || correct_password ( pw ))) {
|
||||||
log_su_successful(pw->pw_uid, old_user, tty );
|
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 )
|
if ( !opt_shell && opt_preserve )
|
||||||
opt_shell = getenv ( "SHELL" );
|
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
|
/* The user being su'd to has a nonstandard shell, and so is
|
||||||
probably a uucp account or has restricted access. Don't
|
probably a uucp account or has restricted access. Don't
|
||||||
compromise the account by allowing access with a standard
|
compromise the account by allowing access with a standard
|
||||||
@ -147,7 +155,7 @@ int su_main ( int argc, char **argv )
|
|||||||
|
|
||||||
change_identity ( pw );
|
change_identity ( pw );
|
||||||
setup_environment ( opt_shell, opt_loginshell, !opt_preserve, pw );
|
setup_environment ( opt_shell, opt_loginshell, !opt_preserve, pw );
|
||||||
#ifdef CONFIG_SELINUX
|
#if ENABLE_SELINUX
|
||||||
set_current_security_context(NULL);
|
set_current_security_context(NULL);
|
||||||
#endif
|
#endif
|
||||||
run_shell ( opt_shell, opt_loginshell, opt_command, (const char**)opt_args);
|
run_shell ( opt_shell, opt_loginshell, opt_command, (const char**)opt_args);
|
||||||
|
Loading…
Reference in New Issue
Block a user