6b7ea58f15
* Paths corrected in applications * ftpd now logs to facility LOG_FTP * use openpty to obtain pseudo-terminal * corrected detection of TCL libraries * fix a forwarding bug * add -m flag to ksu (preserve USER, HOME, SHELL) * cosmetic bug fix to telnet.c Submitted by: Dima Ruban <dima@best.net>
195 lines
5.3 KiB
Plaintext
195 lines
5.3 KiB
Plaintext
*** clients/ksu/main.c.ORIG Fri Feb 6 19:41:57 1998
|
|
--- clients/ksu/main.c Tue Jun 30 19:46:02 1998
|
|
***************
|
|
*** 56,62 ****
|
|
ill specified arguments to commands */
|
|
|
|
void usage (){
|
|
! fprintf(stderr, "Usage: %s [target user] [-n principal] [-c source cachename] [-C target cachename] [-k] [-D] [-r time] [-pf] [-l lifetime] [-zZ] [-q] [-e command [args... ] ] [-a [args... ] ]\n", prog_name);
|
|
|
|
}
|
|
|
|
--- 56,62 ----
|
|
ill specified arguments to commands */
|
|
|
|
void usage (){
|
|
! fprintf(stderr, "Usage: %s [target user] [-m] [-n principal] [-c source cachename] [-C target cachename] [-k] [-D] [-r time] [-pf] [-l lifetime] [-zZ] [-q] [-e command [args... ] ] [-a [args... ] ]\n", prog_name);
|
|
|
|
}
|
|
|
|
***************
|
|
*** 75,80 ****
|
|
--- 75,81 ----
|
|
int argc;
|
|
char ** argv;
|
|
{
|
|
+ int asme = 0;
|
|
int hp =0;
|
|
int some_rest_copy = 0;
|
|
int all_rest_copy = 0;
|
|
***************
|
|
*** 90,95 ****
|
|
--- 91,97 ----
|
|
char * cc_target_tag = NULL;
|
|
char * target_user = NULL;
|
|
char * source_user;
|
|
+ char * source_shell;
|
|
|
|
krb5_ccache cc_source = NULL;
|
|
char * cc_source_tag = NULL;
|
|
***************
|
|
*** 174,180 ****
|
|
}
|
|
|
|
|
|
! while(!done && ((option = getopt(pargc, pargv,"n:c:C:r:a:zZDfpkql:e:")) != EOF)){
|
|
switch (option) {
|
|
case 'r':
|
|
options.opt |= KDC_OPT_RENEWABLE;
|
|
--- 176,182 ----
|
|
}
|
|
|
|
|
|
! while(!done && ((option = getopt(pargc, pargv,"n:c:C:r:a:zZDfpkmql:e:")) != EOF)){
|
|
switch (option) {
|
|
case 'r':
|
|
options.opt |= KDC_OPT_RENEWABLE;
|
|
***************
|
|
*** 216,221 ****
|
|
--- 218,226 ----
|
|
errflg++;
|
|
}
|
|
break;
|
|
+ case 'm':
|
|
+ asme = 1;
|
|
+ break;
|
|
case 'n':
|
|
if ((retval = krb5_parse_name(ksu_context, optarg, &client))){
|
|
com_err(prog_name, retval, "when parsing name %s", optarg);
|
|
***************
|
|
*** 355,362 ****
|
|
exit(1);
|
|
}
|
|
|
|
! /* allocate space and copy the usernamane there */
|
|
source_user = strdup(pwd->pw_name);
|
|
source_uid = pwd->pw_uid;
|
|
source_gid = pwd->pw_gid;
|
|
|
|
--- 360,368 ----
|
|
exit(1);
|
|
}
|
|
|
|
! /* allocate space and copy the username there */
|
|
source_user = strdup(pwd->pw_name);
|
|
+ source_shell = strdup(pwd->pw_shell);
|
|
source_uid = pwd->pw_uid;
|
|
source_gid = pwd->pw_gid;
|
|
|
|
***************
|
|
*** 727,769 ****
|
|
/* get the shell of the user, this will be the shell used by su */
|
|
target_pwd = getpwnam(target_user);
|
|
|
|
! if (target_pwd->pw_shell)
|
|
! shell = strdup(target_pwd->pw_shell);
|
|
! else {
|
|
! shell = _DEF_CSH; /* default is cshell */
|
|
! }
|
|
|
|
#ifdef HAVE_GETUSERSHELL
|
|
|
|
/* insist that the target login uses a standard shell (root is omited) */
|
|
|
|
! if (!standard_shell(target_pwd->pw_shell) && source_uid) {
|
|
! fprintf(stderr, "ksu: permission denied (shell).\n");
|
|
! sweep_up(ksu_context, use_source_cache, cc_target);
|
|
! exit(1);
|
|
}
|
|
#endif /* HAVE_GETUSERSHELL */
|
|
|
|
! if (target_pwd->pw_uid){
|
|
!
|
|
! if(set_env_var("USER", target_pwd->pw_name)){
|
|
! fprintf(stderr,"ksu: couldn't set environment variable USER\n");
|
|
! sweep_up(ksu_context, use_source_cache, cc_target);
|
|
! exit(1);
|
|
! }
|
|
! }
|
|
!
|
|
! if(set_env_var( "HOME", target_pwd->pw_dir)){
|
|
! fprintf(stderr,"ksu: couldn't set environment variable USER\n");
|
|
! sweep_up(ksu_context, use_source_cache, cc_target);
|
|
! exit(1);
|
|
! }
|
|
!
|
|
! if(set_env_var( "SHELL", shell)){
|
|
! fprintf(stderr,"ksu: couldn't set environment variable USER\n");
|
|
! sweep_up(ksu_context, use_source_cache, cc_target);
|
|
! exit(1);
|
|
! }
|
|
|
|
/* set the cc env name to target */
|
|
|
|
--- 733,792 ----
|
|
/* get the shell of the user, this will be the shell used by su */
|
|
target_pwd = getpwnam(target_user);
|
|
|
|
! if (asme) {
|
|
! if (source_shell && *source_shell) {
|
|
! shell = strdup(source_shell);
|
|
! } else {
|
|
! shell = _DEF_CSH;
|
|
! }
|
|
! } else {
|
|
! if (target_pwd->pw_shell)
|
|
! shell = strdup(target_pwd->pw_shell);
|
|
! else {
|
|
! shell = _DEF_CSH; /* default is cshell */
|
|
! }
|
|
! }
|
|
|
|
#ifdef HAVE_GETUSERSHELL
|
|
|
|
/* insist that the target login uses a standard shell (root is omited) */
|
|
|
|
! if (asme) {
|
|
! if (!standard_shell(pwd->pw_shell) && source_uid) {
|
|
! fprintf(stderr, "ksu: permission denied (shell).\n");
|
|
! sweep_up(ksu_context, use_source_cache, cc_target);
|
|
! exit(1);
|
|
! }
|
|
! } else {
|
|
! if (!standard_shell(target_pwd->pw_shell) && source_uid) {
|
|
! fprintf(stderr, "ksu: permission denied (shell).\n");
|
|
! sweep_up(ksu_context, use_source_cache, cc_target);
|
|
! exit(1);
|
|
! }
|
|
}
|
|
#endif /* HAVE_GETUSERSHELL */
|
|
|
|
! if (!asme) {
|
|
! if (target_pwd->pw_uid){
|
|
! if (set_env_var("USER", target_pwd->pw_name)){
|
|
! fprintf(stderr,"ksu: couldn't set environment variable USER\n");
|
|
! sweep_up(ksu_context, use_source_cache, cc_target);
|
|
! exit(1);
|
|
! }
|
|
! }
|
|
!
|
|
! if (set_env_var( "HOME", target_pwd->pw_dir)){
|
|
! fprintf(stderr,"ksu: couldn't set environment variable USER\n");
|
|
! sweep_up(ksu_context, use_source_cache, cc_target);
|
|
! exit(1);
|
|
! }
|
|
!
|
|
! if (set_env_var( "SHELL", shell)){
|
|
! fprintf(stderr,"ksu: couldn't set environment variable USER\n");
|
|
! sweep_up(ksu_context, use_source_cache, cc_target);
|
|
! exit(1);
|
|
! }
|
|
! }
|
|
|
|
/* set the cc env name to target */
|
|
|