summaryrefslogblamecommitdiff
path: root/security/krb5-17/files/patch-as
blob: 519a1c74d4cbce9cca3158b2b7023a8fa50fe8ff (plain) (tree)











































                                                                                                                                                                                                                             
                                                                                      






                                             
                                                                                       












































































































































                                                                                        
*** 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:")) != -1)){
  	switch (option) {
  	case 'r':
  	    options.opt |= KDC_OPT_RENEWABLE;
--- 176,182 ----
          }
  
  
!     while(!done && ((option = getopt(pargc, pargv,"n:c:C:r:a:zZDfpkmql:e:")) != -1)){
  	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 */