From 0f011b030cf8ef4962717cbb66664e6ec48690a3 Mon Sep 17 00:00:00 2001 From: Keith Winstein Date: Fri, 16 Mar 2012 15:36:13 -0400 Subject: [PATCH] Start login shell (fixes #59 github issue) (per Austin Clements) --- src/frontend/mosh-server.cc | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/frontend/mosh-server.cc b/src/frontend/mosh-server.cc index 0820c90..e1571f7 100644 --- a/src/frontend/mosh-server.cc +++ b/src/frontend/mosh-server.cc @@ -176,6 +176,8 @@ int run_server( const char *desired_ip, const char *desired_port ) { if ( child == 0 ) { /* child */ + setsid(); /* may fail */ + /* unblock signals */ sigset_t signals_to_block; fatal_assert( sigemptyset( &signals_to_block ) == 0 ); @@ -206,8 +208,16 @@ int run_server( const char *desired_ip, const char *desired_port ) { exit( 1 ); } + string shell_name( pw->pw_shell ); + if ( shell_name.empty() ) { /* empty shell means Bourne shell */ + shell_name = "/bin/sh"; + } + + string login_shell = "-"; + login_shell.append( basename( shell_name.c_str() ) ); /* must be GNU basename */ + char *my_argv[ 2 ]; - my_argv[ 0 ] = strdup( pw->pw_shell ); + my_argv[ 0 ] = strdup( login_shell.c_str() ); fatal_assert( my_argv[ 0 ] ); my_argv[ 1 ] = NULL;