This is an automated email from the git hooks/post-receive script. x2go pushed a change to branch release/4.0.1.x in repository x2goserver. from 6430968 Trigger Xsession code for SUSE systems (look for /etc/SUSE-brand or /etc/SuSE-release for SUSE system recognition). (Fixes: #671). new cf4ce1f Fix cross-user X2Go Desktop Sharing after being broken by implementing clipboard mode feature (and probably other code changes). The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Summary of changes: debian/changelog | 2 ++ x2goserver/bin/x2golistdesktops | 17 +++++++++----- x2goserver/bin/x2gostartagent | 40 +++++++++++++++++++++++++++------ x2goserver/lib/x2gosqlitewrapper.pl | 2 +- x2goserver/lib/x2goutils.pm | 2 +- x2goserver/sbin/x2gocleansessions | 11 ++++++++- x2goserver/sbin/x2golistsessions_root | 22 ++++++++++++++++-- 7 files changed, 79 insertions(+), 17 deletions(-) -- Alioth's /srv/git/_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goserver.git
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 cf4ce1f6209260867a17c5fde0e8e14cd318ffb4 Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Date: Mon Nov 17 09:43:36 2014 +0100 Fix cross-user X2Go Desktop Sharing after being broken by implementing clipboard mode feature (and probably other code changes). --- debian/changelog | 2 ++ x2goserver/bin/x2golistdesktops | 17 +++++++++----- x2goserver/bin/x2gostartagent | 40 +++++++++++++++++++++++++++------ x2goserver/lib/x2gosqlitewrapper.pl | 2 +- x2goserver/lib/x2goutils.pm | 2 +- x2goserver/sbin/x2gocleansessions | 11 ++++++++- x2goserver/sbin/x2golistsessions_root | 22 ++++++++++++++++-- 7 files changed, 79 insertions(+), 17 deletions(-) diff --git a/debian/changelog b/debian/changelog index 33fb844..e6edd03 100644 --- a/debian/changelog +++ b/debian/changelog @@ -45,6 +45,8 @@ x2goserver (4.0.1.19-0x2go1) UNRELEASED; urgency=medium - Make SSH agent forwarding work after having reconnected via SSH and having resumed a session. (Fixes: #672). Thanks to Robert Siemer for coming up with that idea. + - Fix cross-user X2Go Desktop Sharing after being broken by implementing + clipboard mode feature (and probably other code changes). * debian/control: + Add D (x2goserver): libfile-which-perl. * debian/x2goserver.docs: diff --git a/x2goserver/bin/x2golistdesktops b/x2goserver/bin/x2golistdesktops index 7c7afa2..78ea8c3 100755 --- a/x2goserver/bin/x2golistdesktops +++ b/x2goserver/bin/x2golistdesktops @@ -85,20 +85,27 @@ for(my $i=0;$i<@outp;$i++) } } -my $outp=`ls -1 /tmp/ | grep x2godesktopsharing_`; +my $outp=`ls -1 /tmp/ | grep x2godesktopsharing_\@*\@:*`; @outp=split("\n","$outp"); for(my $i=0;$i<@outp;$i++) { my @ln=split("\@",@outp[$i]); - if ( @ln[1] ne $uname ) - { - push (@displays, "@ln[1]\@@ln[2]\n"); + if (( -r "/tmp/@outp[$i]" ) and ( -w "/tmp/@outp[$i]" )) { + my @ln=split("\@",@outp[$i]); + if ( @ln[1] ne $uname ) + { + push (@displays, "@ln[1]\@@ln[2]"); + } } } if (@displays) { - print "@displays\n"; + for(my $i=0;$i<@displays;$i++) { + if ( @displays[$i] ) { + print "@displays[$i]\n"; + } + } } # closing syslog closelog; diff --git a/x2goserver/bin/x2gostartagent b/x2goserver/bin/x2gostartagent index 5d9ffb1..dde18cf 100755 --- a/x2goserver/bin/x2gostartagent +++ b/x2goserver/bin/x2gostartagent @@ -60,7 +60,18 @@ fi REMOTE=localhost -X2GO_CLIENT=`echo $SSH_CLIENT | awk '{print $1}'` +# shadow sessions (via x2godesktopsharing) set the X2GO_CLIENT var in the process environment +# so either it is already set or we obtain it from SSH_CLIENT/SSH_CONNECTION +if [ -z "$X2GO_CLIENT" ] && [ -n "$SSH_CLIENT" ]; then + X2GO_CLIENT=`echo $SSH_CLIENT | awk '{print $1}'` +elif [ -z "$X2GO_CLIENT" ] && [ -n "$SSH_CONNECTION" ]; then + X2GO_CLIENT=`echo $SSH_CONNECTION | awk '{print $1}'` +fi +if [ -z "$X2GO_CLIENT" ]; then + echo "The \$X2GO_CLIENT environment variable is not set (due to neither \$SSH_CLIENT nor \$SSH_CONNECTION variable being set). Aborting session startup." + exit -3 +fi + $X2GO_LIB_PATH/x2gosyslog "$0" "debug" "client announced itself as ,,$X2GO_CLIENT''" X2GO_GEOMETRY="$1"; shift @@ -72,10 +83,11 @@ X2GO_KBD_TYPE="$1"; shift X2GO_SET_KBD="$1"; shift X2GO_STYPE="$1"; shift X2GO_CMD="$1"; shift -X2GO_CLIPBOARD="$1"; shift X2GO_RESIZE=1 X2GO_FULLSCREEN=0 +X2GO_CLIPBOARD="" + XAUTHORITY=${XAUTHORITY:-"$HOME/.Xauthority"} @@ -85,16 +97,16 @@ if [ "$X2GO_STYPE" == "S" ]; then SHADOW_USER=`echo $X2GO_CMD |awk '{split($0,a,"XSHAD"); print a[2]}'` SHADOW_DESKTOP=`echo $X2GO_CMD |awk '{split($0,a,"XSHAD"); print a[3]}'` - test -z $1 && { + if [ -z "$1" ]; then # can this line be removed? #echo "suser $SHADOW_USER user $USER " >> /tmp/uagent $X2GO_LIB_PATH/x2gosyslog "$0" "debug" "shadow session requested: mode $SHADOW_MODE, user: $SHADOW_USER, desktop: $SHADOW_DESKTOP" - } || { + else SHADREQ_USER="$1"; shift $X2GO_LIB_PATH/x2gosyslog "$0" "debug" "preparing shadow session request for user $SHADREQ_USER, agent starts for user ${USER}" - } + fi if [ "$SHADOW_USER" != "$USER" ]; then @@ -104,8 +116,12 @@ if [ "$X2GO_STYPE" == "S" ]; then $X2GO_LIB_PATH/x2gosyslog "$0" "debug" "command result is: $OUTPUT" if [ "${OUTPUT:0:4}" == "DENY" ]; then echo "ACCESS DENIED" 1>&2 + DENIAL_REASON="${OUTPUT:5}" + if [ -z "$DENIAL_REASON" ]; then + DENIAL_REASON="the user ,,$SHADOW_USER'' does not seem to have desktop sharing activated" + fi $X2GO_LIB_PATH/x2gosyslog "$0" "err" "ERROR: user $SHADOW_USER denied desktop sharing session" - $X2GO_LIB_PATH/x2gosyslog "$0" "err" "ERROR: reason: for desktop sharing denial ${OUTPUT:5}" + $X2GO_LIB_PATH/x2gosyslog "$0" "err" "ERROR: reason: for desktop sharing denial ${DENIAL_REASON}" exit -1 fi X2GO_COOKIE=`echo $OUTPUT | awk '{print $2}'` @@ -123,6 +139,8 @@ if [ "$X2GO_STYPE" == "S" ]; then echo $OUTPUT | awk '{print $6}' echo $OUTPUT | awk '{print $7}' exit 0 + else + X2GO_CLIPBOARD="$1"; shift fi fi @@ -257,7 +275,15 @@ STATE_FILE="${X2GO_ROOT}/C-${SESSION_NAME}/state" # do not use $TMP or $TEMP here, the session.log file location has to be accessible by root SESSION_LOG="${SESSION_DIR}/session.log" mkdir -p "${SESSION_DIR}" -chmod -f 0700 "${SESSION_DIR}" +if [ "x$X2GO_STYPE" = "xS" ]; then + chmod -f 0710 "${SESSION_DIR}" + if groups "$USER" | grep x2godesktopsharing 1>/dev/null 2>/dev/null; then + $X2GO_LIB_PATH/x2gosyslog "$0" "info" "user ,,$USER'' grants access to ${SESSION_DIR} for group ,,x2godesktopsharing''" + chown :x2godesktopsharing "${SESSION_DIR}" + fi +else + chmod -f 0700 "${SESSION_DIR}" +fi touch "${SESSION_LOG}" chmod -f 0600 "${SESSION_LOG}" diff --git a/x2goserver/lib/x2gosqlitewrapper.pl b/x2goserver/lib/x2gosqlitewrapper.pl index 7352a28..deb0925 100755 --- a/x2goserver/lib/x2gosqlitewrapper.pl +++ b/x2goserver/lib/x2gosqlitewrapper.pl @@ -522,7 +522,7 @@ sub check_user # session id looks like someuser-51-1304005895_stDgnome-session_dp24 # during DB insertsession it only looks like someuser-51-1304005895 my $user = "$sid"; - $user =~ s/$realuser-[0-9]{2,}-[0-9]{10,}.*/$realuser/; + $user =~ s/($realuser-[0-9]{2,}-[0-9]{10,}_st(D|R).*|.*-[0-9]{2,}-[0-9]{10,}_stS(0|1)XSHAD$realuser.*)/$realuser/; $user eq $realuser or die "$realuser is not authorized"; } diff --git a/x2goserver/lib/x2goutils.pm b/x2goserver/lib/x2goutils.pm index 13957c0..a7eb265 100644 --- a/x2goserver/lib/x2goutils.pm +++ b/x2goserver/lib/x2goutils.pm @@ -49,7 +49,7 @@ sub sanitizer { $string =~ s/[^a-zA-Z0-9\_\-\$\.\@]//g; if ($string =~ /^([a-zA-Z0-9\_\-\$\.\@]*)$/) { $string = $1; - if ($string =~ /^([a-zA-Z\_][a-zA-Z0-9\_\-\.\@]{0,47}[\$]?)\-([\d]{2,4})\-([\d]{9,12})\_[a-zA-Z0-9\_\-]*\_dp[\d]{1,2}$/) { + if ($string =~ /^([a-zA-Z\_][a-zA-Z0-9\_\-\.\@]{0,31}[\$]?)\-([\d]{2,4})\-([\d]{9,12})\_[a-zA-Z0-9\_\-\.]*\_dp[\d]{1,2}$/) { if ((length($1) > 0) and (length($1) < 48)){ return $string; } else {return 0;} diff --git a/x2goserver/sbin/x2gocleansessions b/x2goserver/sbin/x2gocleansessions index 8ce3a68..db38e1e 100755 --- a/x2goserver/sbin/x2gocleansessions +++ b/x2goserver/sbin/x2gocleansessions @@ -88,7 +88,16 @@ sub is_running sub get_agent_state { my $sess=@_[0]; - my $user=@_[1]; + my $user; + + if ( $sess =~ m/.*-[0-9]{2,}-[0-9]{10,}_stS(0|1)XSHAD.*XSHADPP.*/ ) { + my $shadow_user = $sess; + $shadow_user =~ s/.*XSHAD(.*)XSHADPP.*/$1/; + $user = $shadow_user; + } else { + $user=@_[1]; + } + my $state; my $stateFile = "/tmp/.x2go-".$user."/C-".$sess."/state"; if (! -e $stateFile ) diff --git a/x2goserver/sbin/x2golistsessions_root b/x2goserver/sbin/x2golistsessions_root index 8f9c06e..3686af3 100755 --- a/x2goserver/sbin/x2golistsessions_root +++ b/x2goserver/sbin/x2golistsessions_root @@ -44,7 +44,16 @@ sub is_suspended sub has_agent_state_file { my $sess=@_[0]; - my $user=@_[1]; + my $user; + + if ( $sess =~ m/.*-[0-9]{2,}-[0-9]{10,}_stS(0|1)XSHAD.*XSHADPP.*/ ) { + my $shadow_user = $sess; + $shadow_user =~ s/.*XSHAD(.*)XSHADPP.*/$1/; + $user = $shadow_user; + } else { + $user=@_[1]; + } + my $stateFile; if ( -d "/tmp-inst/${user}/.x2go-${user}" ) { $stateFile="/tmp-inst/${user}/.x2go-".$user."/C-".$sess."/state"; @@ -61,7 +70,16 @@ sub has_agent_state_file sub get_agent_state { my $sess=@_[0]; - my $user=@_[1]; + my $user; + + if ( $sess =~ m/.*-[0-9]{2,}-[0-9]{10,}_stS(0|1)XSHAD.*XSHADPP.*/ ) { + my $shadow_user = $sess; + $shadow_user =~ s/.*XSHAD(.*)XSHADPP.*/$1/; + $user = $shadow_user; + } else { + $user=@_[1]; + } + my $state; my $stateFile = "/tmp/.x2go-".$user."/C-".$sess."/state"; if (! -e $stateFile ) -- Alioth's /srv/git/_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goserver.git