File u_Add-ssh-support-to-xon.patch of Package xorg-scripts

From: Egbert Eich <eich@suse.de>
Date: Tue Feb 11 19:10:37 2014 +0100
Subject: [PATCH]Add ssh support to 'xon'
Patch-Mainline: to be upstreamed
Git-commit: e967f71f0432cdd9b4ffb25bca5ad8dff7295c22
Git-repo: 
References: 
Signed-off-by: Egbert Eich <eich@suse.com>

'xon' has been around for ages, it's a small script that can be used
to start any xclient remotely.
It did so by opening a shell connection using 'rsh' or 'rcmd' to
connect to the remote system. Today (hopefully) nobody has rsh
installed any more for security reasons.
'ssh' has become the remote login tool of chioce which also allows
to tunnel the X protocol over a secure channel.
This patch adds ssh support to xon to make it useful again.

Signed-off-by: Egbert Eich <eich@suse.de>
---
 xon | 61 ++++++++++++++++++++++++++++++++++++++++++++++++-------------
 1 file changed, 48 insertions(+), 13 deletions(-)

diff --git a/xon b/xon
index 772b357..959e0e7 100644
--- a/xon
+++ b/xon
@@ -32,20 +32,27 @@ target=$1
 shift
 label=$target
 resource=xterm-$label
-if [ -f /usr/bin/remsh ]; then
+if [ -x /usr/bin/ssh ]; then
+    rsh=/usr/bin/ssh
+elif [ -f /usr/bin/remsh ]; then
     rsh=/usr/bin/remsh
 elif [ -f /usr/bin/rcmd ]; then
     rsh=/usr/bin/rcmd
 else
     rsh=rsh
 fi
-rcmd="$rsh $target -n"
-case $DISPLAY in
+case $rsh in
+    *ssh) rcmd_args="-Y $target" ;;
+    *) rcmd_args="$target -n" ;;
+esac
+
+display=$DISPLAY
+case $display in
 unix:*)
-	DISPLAY=`echo $DISPLAY | sed 's/unix//'`
+	display=`echo $display | sed 's/unix//'`
 	;;
 esac
-case $DISPLAY in
+case $display in
 :*)
 	case `uname` in
 	Linux*)
@@ -61,10 +68,10 @@ case $DISPLAY in
 	esac
 	hostname=`echo $fullname | sed 's/\..*$//'`
 	if [ $hostname = $target ] || [ $fullname = $target ]; then
-		DISPLAY=$DISPLAY
+		display=$display
 		rcmd="sh -c"
 	else
-		DISPLAY=$fullname$DISPLAY
+		display=$fullname$display
 	fi
 	;;
 esac
@@ -79,17 +86,23 @@ x)
 	xpath='HOME=${HOME-`pwd`} XUSERFILESEARCHPATH=${XUSERFILESEARCHPATH-"'"$XUSERFILESEARCHPATH"'"} '
 	;;
 esac
-redirect=" < /dev/null > /dev/null 2>&1 &"
+debug=n
 command=
 ls=-ls
 continue=:
+remote_background=
+rcmd_background_arg=
+
 while $continue; do
 	case $1 in
 	-remote)
 		shift
 		if [ $rsh != "sh" ]; then
 			rsh="$1"
-			rcmd="$rsh $target -n"
+			case $rsh in
+			    *ssh) rcmd_args="-fY $target" ;;
+			    *) rcmd_args="$target -n" ;;
+			esac
 		fi
 		shift;;
 	-user)
@@ -102,7 +115,10 @@ while $continue; do
 
 		username="-l $1"
 		label="$target $1"
-		rcmd="$rsh $target $username -n"
+		case $rsh in
+		    *ssh) rcmd_args="-Y ${username}@${target}" ;;
+		    *) rcmd_args="$rsh $target $username -n" ;;
+		esac
 		shift
 		case x$XAUTHORITY in
 		x)
@@ -139,7 +155,7 @@ while $continue; do
 		;;
 	-debug)
 		shift
-		redirect=
+		debug=y
 		;;
 	-screen)
 		shift
@@ -149,7 +165,7 @@ while $continue; do
 			usage "-screen option requires an argument"
 		fi
 
-		DISPLAY=`echo $DISPLAY | sed 's/:\\([0-9][0-9]*\\)\\.[0-9]/:\1/'`.$1
+		display=`echo $display | sed 's/:\\([0-9][0-9]*\\)\\.[0-9]/:\1/'`.$1
 		shift
 		;;
 	*)
@@ -171,7 +187,26 @@ x*)
 	sess_mangr="SESSION_MANAGER=$SESSION_MANAGER "
 	;;
 esac
-vars='PATH=${PATH:+$PATH:}/usr/X11R6/bin '"$xpath$xauth$sess_mangr"DISPLAY="$DISPLAY"
+vars='PATH=${PATH:+$PATH:}/usr/X11R6/bin '"$xpath$xauth$sess_mangr"
+case $rsh in
+    *ssh) 
+	rcmd_background_arg="-f "
+	;;
+    *) 
+	remote_background="&";
+	DISPLAY=$display
+	vars=${vars}DISPLAY="$DISPLAY" 
+	;;
+esac
+
+if [ "$debug" = "n" ]
+then
+    rcmd_args=$rcmd_background_arg$rcmd_args
+    redirect=" < /dev/null > /dev/null 2>&1 $remote_background"
+fi
+
+[ "z" = "z$rcmd" ] && rcmd="$rsh $rcmd_args"
+
 case $# in
 0)
 	$rcmd 'sh -c '"'$vars"' xterm '$ls' -name "'"$resource"'" -T "'"$label"'" -n "'"$label"'" '"$redirect'"
openSUSE Build Service is sponsored by