[PATCH] Re: LocalCommand problem for tunneling on Linux

Yusuke Shinyama yusuke at cs.nyu.edu
Tue Jan 17 11:26:20 EST 2006


Yusuke Shinyama <yusuke at cs.nyu.edu> wrote:
> I've been testing tunneling on Linux with openssh-SNAP-20060116.tar.gz
> and found a problem.
> 
> When I use LocalCommand for doing ifconfig stuff, the command line
> was executed before a tunneling interface is opened.  This causes
> errors on Linux and the interface is not automatically set up.
> 
> This is not a problem on *BSD because you can do ifconfig for
> unopened tun/tap interfaces. But in Linux, you need to open it first.
> 
> A possible solution seems to have ssh_local_cmd() executed
> in ssh_session2_setup().

I made a quick patch for it. This is against
openssh-SNAP-20060116.tar.gz.  It is a bit ugly as the local
command execution part is duplicated in another function.

Thanks
Yusuke

----------------------------------------------------------------
*** ssh.c.orig	Mon Jan 16 19:19:10 2006
--- ssh.c	Mon Jan 16 19:17:13 2006
***************
*** 1095,1100 ****
--- 1095,1105 ----
  		}
  	}
  
+ 	/* Execute a local command */
+ 	if (options.local_command != NULL &&
+ 	    options.permit_local_command)
+ 		ssh_local_cmd(options.local_command);
+ 
  	client_session2_setup(id, tty_flag, subsystem_flag, getenv("TERM"),
  	    NULL, fileno(stdin), &command, environ, &ssh_subsystem_reply);
  
***************
*** 1156,1167 ****
  	ssh_init_forwarding();
  	ssh_control_listener();
  
  	if (!no_shell_flag || (datafellows & SSH_BUG_DUMMYCHAN))
  		id = ssh_session2_open();
! 
! 	/* Execute a local command */
! 	if (options.local_command != NULL &&
! 	    options.permit_local_command)
  		ssh_local_cmd(options.local_command);
  
  	/* If requested, let ssh continue in the background. */
--- 1161,1173 ----
  	ssh_init_forwarding();
  	ssh_control_listener();
  
+ 	/* If a session is going to open, a local command will be
+ 	 * executed within it. */
  	if (!no_shell_flag || (datafellows & SSH_BUG_DUMMYCHAN))
  		id = ssh_session2_open();
! 	/* Otherwise execute a local command now */
! 	else if (options.local_command != NULL &&
! 		 options.permit_local_command)
  		ssh_local_cmd(options.local_command);
  
  	/* If requested, let ssh continue in the background. */
----------------------------------------------------------------




More information about the openssh-unix-dev mailing list