The branch, master has been updated via d46aa2e207f31deda85dc0f896d53989cc244fe3 (commit) via 993c8cda4b2aa59cf181cb54d2fa5dfc90102c53 (commit) from cacfe491f405d6db68079b6166d729f4c502d0dd (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 ----------------------------------------------------------------- commit d46aa2e207f31deda85dc0f896d53989cc244fe3 Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Date: Mon Mar 4 11:10:39 2013 +0100 Implement session autologin feature (earlier commits). /debian/control: Dependency for python-x2gobroker: python-gevent. commit 993c8cda4b2aa59cf181cb54d2fa5dfc90102c53 Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Date: Mon Mar 4 11:08:58 2013 +0100 implement deletion of authorized_keys ----------------------------------------------------------------------- Summary of changes: debian/changelog | 3 +++ debian/control | 1 + x2gobroker/agent.py | 19 +++++++++++++++---- x2gobroker/brokers/base_broker.py | 7 +++++++ 4 files changed, 26 insertions(+), 4 deletions(-) The diff of changes is: diff --git a/debian/changelog b/debian/changelog index 93164d9..57c160d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,12 +4,15 @@ x2gobroker (0.0.0.6-0~x2go1) UNRELEASED; urgency=low * New upstream version (0.0.0.6): - Rewrite empty user parameter in session profile. Fill in the UID that has been used for broker authentication. + - Implement session autologin feature. * /debian/*.default: - Be more explanatory about the X2GOBROKER_DEBUG option and allow to enable debug mode for the different services independently. (Fixes: #126). * /debian/x2gobroker-daemon.postinst: - Fix home path for user x2gobroker. (Fixes: #127). + * /debian/control: + - Dependency for python-x2gobroker: python-gevent. -- Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Wed, 27 Feb 2013 23:04:10 +0100 diff --git a/debian/control b/debian/control index 3190f5c..fbee287 100644 --- a/debian/control +++ b/debian/control @@ -152,6 +152,7 @@ Depends: python-netaddr, python-webpy (>= 1:0.37), python-paramiko, + python-gevent, Suggests: apache2 | httpd, Description: X2Go http(s) based session broker (Python modules) diff --git a/x2gobroker/agent.py b/x2gobroker/agent.py index ad2a989..1ea3373 100644 --- a/x2gobroker/agent.py +++ b/x2gobroker/agent.py @@ -22,6 +22,7 @@ import subprocess import paramiko import cStringIO +import gevent import x2gobroker._paramiko x2gobroker._paramiko.monkey_patch_paramiko() @@ -61,6 +62,7 @@ def call_local_broker_agent(username, mode, cmdline_args=[]): if result[0].startswith('OK'): return [ r for r in result[1:] if r ] + def call_remote_broker_agent(username, mode, cmdline_args=[], remote_agent=None): """\ Launch remote X2Go Broker Agent via SSH and process its output. @@ -109,6 +111,7 @@ def call_remote_broker_agent(username, mode, cmdline_args=[], remote_agent=None) except paramiko.SSHException: logger_error.error('could not connect to remote X2Go Broker Agent (user: {user}, hostname: {hostname}, port: {port}'.format(user=remote_username, hostname=remote_hostname, port=remote_port)) + def list_sessions(username, query_mode='LOCAL', remote_agent=None): """\ Query X2Go Broker Agent for a session list for a given username. @@ -126,6 +129,7 @@ def list_sessions(username, query_mode='LOCAL', remote_agent=None): else: return call_remote_broker_agent(username, mode='listsessions', remote_agent=remote_agent) + def find_busy_servers(username, query_mode='LOCAL', remote_agent=None): """\ Query X2Go Broker Agent for a list of servers with running @@ -157,6 +161,7 @@ def find_busy_servers(username, query_mode='LOCAL', remote_agent=None): return server_usage + def add_authorized_key(username, pubkey_hash, authorized_keys_file='%h/.x2go/authorized_keys', query_mode='LOCAL', remote_agent=None): """\ Add a public key hash to the user's authorized_keys file. @@ -178,7 +183,8 @@ def add_authorized_key(username, pubkey_hash, authorized_keys_file='%h/.x2go/aut else: return call_remote_broker_agent(username, mode='addauthkey', cmdline_args=[pubkey_hash, authorized_keys_file, ], remote_agent=remote_agent) -def delete_authorized_key(username, pubkey_hash, authorized_keys_file='%h/.x2go/authorized_keys', query_mode='LOCAL', remote_agent=None): + +def delete_authorized_key(username, pubkey_hash, authorized_keys_file='%h/.x2go/authorized_keys', query_mode='LOCAL', remote_agent=None, delay_deletion=0): """\ Remove a public key hash from the user's authorized_keys file. @@ -194,10 +200,14 @@ def delete_authorized_key(username, pubkey_hash, authorized_keys_file='%h/.x2go/ @type remote_agent: C{dict} """ - if query_mode.upper() == u'LOCAL': - return call_local_broker_agent(username, mode='delauthkey', cmdline_args=[pubkey_hash, authorized_keys_file, ]) + if delay_deletion > 0: + gevent.spawn_later(delay_deletion, delete_authorized_key, username=username, authorized_keys_file=authorized_keys_file, query_mode=query_mode, remote_agent=remote_agent, ) else: - return call_remote_broker_agent(username, mode='delauthkey', cmdline_args=[pubkey_hash, authorized_keys_file, ], remote_agent=remote_agent) + if query_mode.upper() == u'LOCAL': + return call_local_broker_agent(username, mode='delauthkey', cmdline_args=[pubkey_hash, authorized_keys_file, ]) + else: + return call_remote_broker_agent(username, mode='delauthkey', cmdline_args=[pubkey_hash, authorized_keys_file, ], remote_agent=remote_agent) + def get_servers(username, query_mode='LOCAL', remote_agent=None): """\ @@ -218,6 +228,7 @@ def get_servers(username, query_mode='LOCAL', remote_agent=None): else: return call_local_broker_agent(username, mode='getservers', remote_agent=remote_agent) + def genkeypair(local_username, client_address, key_type='RSA'): """\ Generate an SSH pub/priv key pair without writing the private key to file. diff --git a/x2gobroker/brokers/base_broker.py b/x2gobroker/brokers/base_broker.py index c3dbc7f..a19f6d9 100644 --- a/x2gobroker/brokers/base_broker.py +++ b/x2gobroker/brokers/base_broker.py @@ -871,6 +871,13 @@ class X2GoBroker(object): selected_session.update({ 'authentication_privkey': privkey, }) + x2gobroker.agent.delete_authorized_key(username=username, + pubkey_hash=pubkey, + authorized_keys_file=self.get_authorized_keys_file(profile_id), + query_mode=agent_query_mode, + remote_agent=remote_agent, + delay_deletion=60, + ), return selected_session hooks/post-receive -- x2gobroker.git (HTTP(S) Session broker for X2Go) 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 "x2gobroker.git" (HTTP(S) Session broker for X2Go).