This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch release/4.0.1.x in repository x2goserver. commit 513206befc64d1f2618d19d4afe7cfdb9f332f77 Author: Oleksandr Shneyder <o.shneyder@phoca-gmbh.de> Date: Tue Jul 22 13:53:02 2014 +0200 Clean user SSHD process if connection between server and client lost. This should fix error "Global request tcpip-forward failed". --- debian/changelog | 2 ++ x2goserver/bin/x2golistsessions | 3 ++ x2goserver/bin/x2goresume-session | 4 +++ x2goserver/bin/x2gostartagent | 3 ++ x2goserver/lib/x2gormforward | 59 +++++++++++++++++++++++++++++++++++++ x2goserver/sbin/x2gocleansessions | 2 ++ 6 files changed, 73 insertions(+) diff --git a/debian/changelog b/debian/changelog index 72deb4c..b58bcad 100644 --- a/debian/changelog +++ b/debian/changelog @@ -70,6 +70,8 @@ x2goserver (4.0.1.16-0x2go1) UNRELEASED; urgency=low - Fix x2gostartagent failures if kbd is not "auto". Remove comma at end of options file. - Set default value for clipboard to "both" in x2gostartagent and x2goresume-session. + - Clean user SSHD process if connection between server and client lost. This should fix + error "Global request tcpip-forward failed". -- Mike DePaulo <mikedep333@gmail.com> Thu, 23 Apr 2014 17:49:00 -0500 diff --git a/x2goserver/bin/x2golistsessions b/x2goserver/bin/x2golistsessions index 93d4c07..efbf8f2 100755 --- a/x2goserver/bin/x2golistsessions +++ b/x2goserver/bin/x2golistsessions @@ -31,6 +31,8 @@ use x2godbwrapper; use x2gologlevel; +use X2Go::Utils qw( system_capture_stdout_output is_true ); +my $x2go_lib_path = system_capture_stdout_output("x2gopath", "libexec"); openlog($0,'cons,pid','user'); setlogmask( LOG_UPTO(x2gologlevel()) ); @@ -123,6 +125,7 @@ for (my $i=0;$i<@outp;$i++) db_changestatus( 'S', @sinfo[1]); @outp[$i] =~ s/\|R\|/\|S\|/; system("x2goumount-session", "@sinfo[1]"); + system("$x2go_lib_path/x2gormforward", "@sinfo[1]"); } } elsif (@sinfo[4]eq 'S') diff --git a/x2goserver/bin/x2goresume-session b/x2goserver/bin/x2goresume-session index c06eea7..d3ee51f 100755 --- a/x2goserver/bin/x2goresume-session +++ b/x2goserver/bin/x2goresume-session @@ -89,6 +89,9 @@ do STATE=`$X2GO_LIB_PATH/x2gogetagentstate "$SESSION_NAME"` done +$X2GO_LIB_PATH/x2gormforward "$SESSION_NAME" + + NX_XINERAMA_CONF="$X2GO_ROOT/C-$SESSION_NAME/xinerama.conf" if [ -e "$NX_XINERAMA_CONF" ] then @@ -255,6 +258,7 @@ if kill -HUP $X2GO_AGENT_PID &>/dev/null; then # run x2goserver-extensions for post-resume x2gofeature X2GO_RUN_EXTENSIONS &>/dev/null && x2goserver-run-extensions "$SESSION_NAME" post-resume || true + grep PPid /proc/$PPID/status > $X2GO_ROOT/C-$SESSION_NAME/sshd.pid else err_msg="ERROR: failed to resume session with ID $SESSION_NAME" echo "$err_msg" 1>&2 diff --git a/x2goserver/bin/x2gostartagent b/x2goserver/bin/x2gostartagent index 7293a0e..f9bd600 100755 --- a/x2goserver/bin/x2gostartagent +++ b/x2goserver/bin/x2gostartagent @@ -65,6 +65,7 @@ X2GO_FULLSCREEN=0 XAUTHORITY=${XAUTHORITY:-"$HOME/.Xauthority"} + if [ "$X2GO_STYPE" == "S" ]; then SHADOW_MODE=`echo $X2GO_CMD |awk '{split($0,a,"XSHAD"); print a[1]}'` @@ -251,6 +252,8 @@ if [ ! -d "$X2GO_ROOT/ssh" ]; then mkdir "$X2GO_ROOT/ssh" fi +grep PPid /proc/$PPID/status > ${SESSION_DIR}/sshd.pid + X2GO_COOKIE=`mcookie` diff --git a/x2goserver/lib/x2gormforward b/x2goserver/lib/x2gormforward new file mode 100755 index 0000000..b15e38f --- /dev/null +++ b/x2goserver/lib/x2gormforward @@ -0,0 +1,59 @@ +#!/usr/bin/perl + +# Copyright (C) 2007-2014 X2Go Project - http://wiki.x2go.org +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the +# Free Software Foundation, Inc., +# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +# +# Copyright (C) 2007-2014 Oleksandr Shneyder <oleksandr.shneyder@obviously-nice.de> +# Copyright (C) 2007-2014 Heinz-Markus Graesing <heinz-m.graesing@obviously-nice.de> + +use strict; +use Sys::Syslog qw( :standard :macros ); + +use X2Go::Log qw(loglevel); + +openlog($0,'cons,pid','user'); +setlogmask( LOG_UPTO(loglevel()) ); + +my $session=shift or die; + +my $pidfile="/tmp/.x2go-".getpwuid($>)."/C-$session/sshd.pid"; +if( ! -e $pidfile) +{ + #pid file not exists, forwarding already removed + exit 0; +} + +open(F,"<$pidfile"); +my $output=<F>; +close(F); + +unlink($pidfile); + +my @words=split(" ",$output); +my $process=@words[@words-1]; + +$output=`ps ax|grep $process`; + +if($output =~ m/sshd/) +{ + #terminate process + syslog('debug', "Terminating SSHD process: $process"); + kill 'TERM', $process; +} + +# closing syslog +closelog; diff --git a/x2goserver/sbin/x2gocleansessions b/x2goserver/sbin/x2gocleansessions index 7fc4172..fe39cf8 100755 --- a/x2goserver/sbin/x2gocleansessions +++ b/x2goserver/sbin/x2gocleansessions @@ -214,6 +214,8 @@ elsif ($pid == 0 ) syslog('debug', "@sinfo[1] is suspended, changing status from @sinfo[4] to S"); syslog('debug', "@sinfo[1]: unmounting all shares"); system("su", "@sinfo[11]", "-c", "export HOSTNAME && x2goumount-session @sinfo[1]"); + #remove port forwarding + system("su", "@sinfo[11]", "-c", "$x2go_lib_path/x2gormforward @sinfo[1]"); } } if (@sinfo[4] eq 'S') -- Alioth's /srv/git/_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goserver.git