[X2Go-Commits] python-x2go.git - build-baikal (branch) updated: 0.1.1.1-7-g15598f1
X2Go dev team
git-admin at x2go.org
Wed Jan 8 15:30:36 CET 2014
The branch, build-baikal has been updated
via 15598f15f512d67222a5d2b4f1b4bb277b29f520 (commit)
from 77a00fac353b65ab845e1eba91a9e0a4f5df150a (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
-----------------------------------------------------------------------
Summary of changes:
debian/changelog | 2 ++
x2go/client.py | 16 ++++++++++++++++
x2go/session.py | 37 ++++++++++++++++++++++++++++++++++++-
x2go/sshproxy.py | 12 +++++++++---
4 files changed, 63 insertions(+), 4 deletions(-)
The diff of changes is:
diff --git a/debian/changelog b/debian/changelog
index c6dca3a..a6a731a 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -6,6 +6,8 @@ python-x2go (0.1.1.2-0~x2go1) UNRELEASED; urgency=low
- Catch this exception in X2goClient.
- Fix desktop sharing.
- Improve error handling / logging in forward.py.
+ - Add X2goSession method that detects if auto-connecting a session profile
+ is probably possible.
-- Mike Gabriel <mike.gabriel at das-netzwerkteam.de> Fri, 24 Jun 2011 16:42:20 +0200
diff --git a/x2go/client.py b/x2go/client.py
index c4073ca..1327d33 100644
--- a/x2go/client.py
+++ b/x2go/client.py
@@ -1035,6 +1035,22 @@ class X2goClient(object):
return self.session_registry(session_uuid).check_host()
__check_session_host = check_session_host
+ def session_can_auto_connect(self, session_uuid):
+ """\
+ Check if session with unique identifier <session_uuid> is configured adequately
+ to be able to auto-connect to the X2go server (e.g. public key authentication).
+
+ @param session_uuid: the X2go session's UUID registry hash
+ @type session_uuid: C{str}
+
+ @return: returns C{True} if the session can auto-connect, C{False} otherwise, C{None}
+ if no control session has been set up yet.
+ @rtype: C{bool}
+
+ """
+ return self.session_registry(session_uuid).can_auto_connect()
+ __session_can_auto_connect = session_can_auto_connect
+
def connect_session(self, session_uuid,
username='',
password='',
diff --git a/x2go/session.py b/x2go/session.py
index 9439477..ead7b93 100644
--- a/x2go/session.py
+++ b/x2go/session.py
@@ -75,7 +75,7 @@ _X2GO_SESSION_PARAMS = ('geometry', 'depth', 'link', 'pack',
)
"""A list of allowed X2go session parameters."""
_X2GO_SSHPROXY_PARAMS = ('sshproxy_host', 'sshproxy_user', 'sshproxy_password',
- 'sshproxy_key_filename', 'sshproxy_tunnel',
+ 'sshproxy_key_filename', 'sshproxy_pkey', 'sshproxy_tunnel',
)
"""A list of allowed X2go SSH proxy parameters."""
@@ -665,6 +665,41 @@ class X2goSession(object):
return _valid or self.HOOK_check_host_dialog(host=_host, port=_port, fingerprint=_fingerprint, fingerprint_type=_fingerprint_type)
__check_host = check_host
+ def can_auto_connect(self):
+ """\
+ Check if a session is configured adequately to be able to auto-connect to the X2go
+ server (e.g. public key authentication).
+
+ @return: returns C{True} if the session can auto-connect, C{False} otherwise, C{None}
+ if no control session has been set up yet.
+ @rtype: C{bool}
+
+ """
+
+ def _can_sshproxy_autoconnect():
+
+ if self.use_sshproxy:
+ if self.sshproxy_params.has_key('sshproxy_key_filename') and self.sshproxy_params['sshproxy_key_filename'] and os.path.exists(os.path.normpath(self.sshproxy_params['sshproxy_key_filename'])):
+ return True
+ elif self.sshproxy_params.has_key('sshproxy_pkey') and self.sshproxy_params['sshproxy_pkey']:
+ return True
+ else:
+ return False
+ else:
+ return True
+
+ # do we have a key file passed as control parameter?
+ if self.control_params.has_key('key_filename') and self.control_params['key_filename'] and os.path.exists(os.path.normpath(self.control_params['key_filename'])):
+ return _can_sshproxy_autoconnect()
+
+ # or a private key?
+ elif self.control_params.has_key('pkey') and self.control_params['pkey']:
+ return _can_sshproxy_autoconnect()
+
+ else:
+ return False
+ __can_auto_connect = can_auto_connect
+
def connect(self, username='', password='', add_to_known_hosts=False, force_password_auth=False,
use_sshproxy=False, sshproxy_user='', sshproxy_password=''):
"""\
diff --git a/x2go/sshproxy.py b/x2go/sshproxy.py
index e59d430..3d08a35 100644
--- a/x2go/sshproxy.py
+++ b/x2go/sshproxy.py
@@ -55,9 +55,9 @@ class X2goSSHProxy(paramiko.SSHClient, threading.Thread):
def __init__(self, hostname=None, port=22, username=None, password=None, key_filename=None,
local_host='localhost', local_port=22022, remote_host='localhost', remote_port=22,
- known_hosts=None, add_to_known_hosts=False,
+ known_hosts=None, add_to_known_hosts=False, pkey=None,
sshproxy_host=None, sshproxy_port=22, sshproxy_user=None,
- sshproxy_password=None, sshproxy_key_filename=None,
+ sshproxy_password=None, sshproxy_key_filename=None, sshproxy_pkey=None,
sshproxy_tunnel=None,
ssh_rootdir=os.path.join(_LOCAL_HOME, _X2GO_SSH_ROOTDIR),
session_instance=None,
@@ -73,6 +73,8 @@ class X2goSSHProxy(paramiko.SSHClient, threading.Thread):
@type password: C{str}
@param key_filename: name of a SSH private key file
@type key_filename: C{str}
+ @param pkey: a private DSA/RSA key object (as provided by Paramiko/SSH)
+ @type pkey: C{RSA/DSA key instance}
@param local_host: bind SSH tunnel to the C{local_host} IP socket address (default: localhost)
@type local_host: C{str}
@param local_port: IP socket port to bind the SSH tunnel to (default; 22022)
@@ -99,6 +101,8 @@ class X2goSSHProxy(paramiko.SSHClient, threading.Thread):
@type sshproxy_password: C{str}
@param sshproxy_key_filename: alias for C{key_filename}
@type sshproxy_key_filename: C{str}
+ @param sshproxy_pkey: alias for C{pkey}
+ @type sshproxy_pkey: C{RSA/DSA key instance} (Paramiko)
@param sshproxy_tunnel: a string of the format <local_host>:<local_port>:<remote_host>:<remote_port>
which will override---if used---the options: C{local_host}, C{local_port}, C{remote_host} and C{remote_port}
@@ -135,6 +139,7 @@ class X2goSSHProxy(paramiko.SSHClient, threading.Thread):
if sshproxy_user: self.username = sshproxy_user
if sshproxy_password: password = sshproxy_password
if sshproxy_key_filename: key_filename = sshproxy_key_filename
+ if sshproxy_pkey: pkey = sshproxy_pkey
if sshproxy_tunnel:
self.local_host, self.local_port, self.remote_host, self.remote_port = sshproxy_tunnel.split(':')
self.local_port = int(self.local_port)
@@ -164,11 +169,12 @@ class X2goSSHProxy(paramiko.SSHClient, threading.Thread):
self.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
- if key_filename and os.path.exists(os.path.normpath(key_filename)):
+ if (key_filename and os.path.exists(os.path.normpath(key_filename))) or pkey:
try:
self.connect(self.hostname, port=self.port,
username=self.username,
key_filename=key_filename,
+ pkey=pkey,
look_for_keys=False,
allow_agent=False,
)
hooks/post-receive
--
python-x2go.git (Python X2Go Client API)
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "python-x2go.git" (Python X2Go Client API).
More information about the x2go-commits
mailing list