[X2Go-Commits] [x2gobroker] 01/02: mini/x2gobroker-ssh-mini: add missing hostname/IP and port autodetection.
git-admin at x2go.org
git-admin at x2go.org
Thu Mar 28 19:37:02 CET 2024
This is an automated email from the git hooks/post-receive script.
x2go pushed a commit to branch master
in repository x2gobroker.
commit 447d72aed0e1fc124013e5277581d74912dd6ac7
Author: Stefan Baur <x2go-ml-1 at baur-itcs.de>
Date: Thu Mar 28 12:24:40 2024 +0000
mini/x2gobroker-ssh-mini: add missing hostname/IP and port autodetection.
---
debian/changelog | 2 +
mini/x2gobroker-ssh-mini | 96 ++++++++++++++++++++++++++++++++++++++++++++----
2 files changed, 90 insertions(+), 8 deletions(-)
diff --git a/debian/changelog b/debian/changelog
index 3b07430..e0f2f7b 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -20,6 +20,8 @@ x2gobroker (0.0.4.4-0x2go1) UNRELEASED; urgency=medium
[ Stefan Baur ]
* New upstream version (0.0.4.4):
- mini/x2gobroker-ssh-mini: typo fix referencing PORT variable.
+ - mini/x2gobroker-ssh-mini: add missing hostname/IP and port
+ autodetection.
-- Mike Gabriel <sunweaver at debian.org> Mon, 15 Nov 2021 15:33:29 +0100
diff --git a/mini/x2gobroker-ssh-mini b/mini/x2gobroker-ssh-mini
index a839393..7c2b5e8 100644
--- a/mini/x2gobroker-ssh-mini
+++ b/mini/x2gobroker-ssh-mini
@@ -127,20 +127,100 @@ if (echo -e "$PARAMLIST" | grep -q -- '--task listsessions'); then
# check if we were asked to provide a server name/IP and port for a specific session
elif (echo -e "$PARAMLIST" | grep -q -- '--task selectsession'); then
SESSIONID=$(echo -e "$PARAMLIST" | awk '$1 == "--sid" { print $2 }')
+
# search for the line with the corresponding session file in our stored list of files
SESSIONFILE=$(grep "$SESSIONID" ~/.x2go/brokersessionfile-${USER})
+
# determine server name/IP and port from this file
SERVER=$(awk -F '=' '$1 == "host" { print $2 }' $SESSIONFILE)
PORT=$(awk -F '=' '$1 == "sshport" { print $2 }' $SESSIONFILE)
- # if this failed, set default values
- if [ -z "$SERVER" ] && [ -f /etc/x2go/x2gobroker-ssh-mini/defaulthost ]; then
- # determine default hostname/IP
- read DEFAULTHOST </etc/x2go/x2gobroker-ssh-mini/defaulthost
- SERVER=$DEFAULTHOST
- fi
- if [ -z "${PORT}" ]; then
- PORT=22
+ # if this failed for at least one of those two, we need to determine and set default values
+
+ if [ -z "${SERVER}" ] || [ -z "${PORT}" ]; then
+
+ # let's check if we have a file for this
+ if [ -f '/etc/x2go/x2gobroker-ssh-mini/defaulthost' ]; then
+
+ # we have, so let's read it
+ read DEFAULTFROMFILE <'/etc/x2go/x2gobroker-ssh-mini/defaulthost'
+
+ # do a basic syntax check on the result to find out what we're dealing with
+ if [ -z "${DEFAULTFROMFILE##*:*:*}" ] ; then
+
+ # two or more ":" -> IPv6 detected
+ if [ '[' = "${DEFAULTFROMFILE:0:1}" ] && [ "${DEFAULTFROMFILE}" != "${DEFAULTFROMFILE%\]*}" ] ; then
+ # is likely a proper IPv6 address (starts with square bracket, has a closing bracket somewhere)
+
+ # Determine Port - strip everything in front of "]:"
+ # If no port was given, the result will equal $DEFAULTFROMFILE
+ DEFAULTPORTFROMFILE="${DEFAULTFROMFILE#*\]:}"
+ if [ "${DEFAULTPORTFROMFILE}" != "${DEFAULTFROMFILE}" ]; then
+ # not the same, so we have a valid port and may set it
+ PORT="${DEFAULTPORTFROMFILE}"
+ fi
+
+ # Determine IPv6 address (subtract colon and port, then remove brackets in step 2)
+ DEFAULTFROMFILE="${DEFAULTFROMFILE%%:$DEFAULTPORT}"
+ DEFAULTSERVERFROMFILE="${DEFAULTFROMFILE//[\[\]]}"
+
+ # do one last sanity check, in case someone messed up the square brackets in the file
+ if [ "[${DEFAULTSERVERFROMFILE}]" = "${DEFAULTFROMFILE}" ]; then
+ # very likely that we have a valid IPv6 address, so let's use it
+ SERVER="${DEFAULTSERVERFROMFILE}"
+ fi
+ # else # TODO - add log message that file could not be parsed.
+ fi
+ else
+ # one or no ":" -> IPv4 address or DNS name, with optional port
+
+ # Determine port - strip everything in front of ":"
+ # If no port was given, the result will equal $DEFAULTFROMFILE
+ DEFAULTPORTFROMFILE="${DEFAULTFROMFILE#*:}"
+ if [ "${DEFAULTPORTFROMFILE}" != "${DEFAULTFROMFILE}" ]; then
+ # not the same, so we have a valid port and may set it
+ PORT="${DEFAULTPORTFROMFILE}"
+ fi
+
+ # not much to check for here
+ DEFAULTSERVERFROMFILE="${DEFAULTHOST%:*}"
+ if [ -n "${DEFAULTSERVERFROMFILE}" ]; then
+ SERVER="${DEFAULTSERVERFROMFILE}"
+ fi
+ fi
+ fi
+
+ # If we have reached this point, and still lack at least one of the variables $SERVER and $PORT,
+ # then either there was no default set in the file, or something went wrong parsing the file.
+ # TODO: Add log message.
+
+ # So if we still need a server name (or IP address), let's try what hostname -f has to say.
+ if [ -z "$SERVER" ] ; then
+ SERVERFQDNFROMHOSTNAME="$(hostname -f)"
+
+ # let's check if the result contains at least one dot, so there's a chance it's an actual FQDN that our client knows
+ # (there doesn't seem to be any use for short names - if we get a short name in reply, we're on a LAN, and can use the SSH IP address instead)
+ if [ -z "${SERVERFQDNFROMHOSTNAME##*.*}" ]; then
+ # seems it is, so let's use it
+ SERVER="${SERVERFQDNFROMHOSTNAME}"
+ fi
+ fi
+
+ # What, still no server name (or IP address), and/or no port?
+ # Let's use what our SSH connection is using. Note that this will fail when using NAT and "dialing in" from outside.
+ SSHSERVERANDPORT="${SSH_CONNECTION#* * }"
+ if [ -z "${SERVER}" ] ; then
+ SERVER="${SSHSERVERANDPORT% *}"
+ fi
+ if [ -z "${PORT}" ]; then
+ PORT="${SSHSERVERANDPORT#* }"
+ fi
+
+ # Last Resort - we should never reach this point
+
+ if [ -z "$PORT" ]; then
+ PORT='22'
+ fi
fi
# output all data
--
Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/x2gobroker.git
More information about the x2go-commits
mailing list