Subject: capture x2goruncommand debug output for x2gofeature X2GO_XSESSION
From: Tor Perkins <[email-masked]>
To: [email-masked]
Date: Fri, 13 May 2016 09:58:12 -0700

Package: x2goserver
Version: 4.0.1.19
Tags: patch

Hello,

I had recently had a problem with my /etc/xprofile file that
prevented session startup.  The details are not too important; it
had to do with a difference of default shell (/bin/sh) being either
/bin/dash or /bin/bash.

After enabling the 'debug' loglevel on the server, I still had no
helpful output indicating what the problem might be...

I did some ferreting about and noticed that x2goruncommand was not
capturing cmd output when using x2gofeature X2GO_XSESSION
(/etc/x2go/Xsession).  The client side invocation of x2goruncommand
(via sshlib) redirects remote command output to /dev/null, so it is
also not preserved when using the client's --debug option...

This small patch appends the missing output to an already existing
debug file in x2goruncommand ($MESSAGE_FILE).  With this in place, I
was able to see the "smoking gun":

  cat ~/.x2go/C-user-50-1463156913_stD.Xclients_dp24/cmdoutput

    exec /root/.Xclients
    Loading profile from /etc/profile
    Loading profile from /root/.profile
    Loading profile from /etc/xprofile
    /etc/xprofile: 14: Bad substitution        <--  whoop!

The file is deleted (as before) if not at loglevel debug.

Thanks for your consideration.

- Tor

diff --git a/x2goserver/bin/x2goruncommand b/x2goserver/bin/x2goruncommand
index 43b4064..0ca2e35 100755
--- a/x2goserver/bin/x2goruncommand
+++ b/x2goserver/bin/x2goruncommand
@@ -313,7 +313,7 @@ if [ "$EXEC" != "" ] && [ -x "$EXEC" ]; then
 	if x2gofeature X2GO_XSESSION &>/dev/null && [ "x$X2GO_SESS_TYPE" = "xD" ]; then
 		STARTUP="$cmd$args"
 		"$X2GO_LIB_PATH/x2gosyslog" "$0" "notice" "launching session with Xsession-x2go mechanism, using STARTUP=\"$STARTUP\""
-		XSESSION_EXEC="$cmd" STARTUP="/usr/bin/env LD_LIBRARY_PATH=${LD_LIBRARY_PATH} ${STARTUP}" /etc/x2go/Xsession
+		XSESSION_EXEC="$cmd" STARTUP="/usr/bin/env LD_LIBRARY_PATH=${LD_LIBRARY_PATH} ${STARTUP}" /etc/x2go/Xsession >>"$MESSAGE_FILE" 2>&1
 	else
 		"$X2GO_LIB_PATH/x2gosyslog" "$0" "debug" "executing command \"$cmd$args\"..."