The branch, twofactorauth has been updated via b05f63fd5f08d1d1878bdcf65ebbd4ad10c6f2c9 (commit) from 1a5aed7b7146d7925f1abca9c451c028db65b39c (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: x2go/backends/proxy/base.py | 41 +++++++++++++-- x2go/backends/terminal/_stdout.py | 102 ++++++++++++++++++++----------------- x2go/client.py | 7 ++- x2go/session.py | 3 +- 4 files changed, 98 insertions(+), 55 deletions(-) The diff of changes is: diff --git a/x2go/backends/proxy/base.py b/x2go/backends/proxy/base.py index 1e121d0..ab48b39 100644 --- a/x2go/backends/proxy/base.py +++ b/x2go/backends/proxy/base.py @@ -74,18 +74,26 @@ class X2goProxyBASE(threading.Thread): def __init__(self, session_info=None, ssh_transport=None, session_log="session.log", sessions_rootdir=os.path.join(_LOCAL_HOME, _X2GO_SESSIONS_ROOTDIR), + proxy_options={}, session_instance=None, logger=None, loglevel=log.loglevel_DEFAULT, ): """\ - @param session_info: session information provided as an C{X2goServerSessionInfo} backend - class object - @type session_info: C{X2goServerSessionInfo} instance - @param ssh_transport: SSH transport object from paramiko.SSHClient + @param session_info: session information provided as an C{X2goServerSessionInfo*} backend + instance + @type session_info: C{X2goServerSessionInfo*} instance + @param ssh_transport: SSH transport object from C{paramiko.SSHClient} @type ssh_transport: C{paramiko.Transport} instance @param session_log: name of the proxy's session logfile - @type session_log: type + @type session_log: C{str} + @param sessions_rootdir: base dir where X2go session files are stored (by default: ~/.x2go) + @type sessions_rootdir: C{str} + @param proxy_options: a set of very C{X2goProxy*} backend specific options; any option that is not known + to the C{X2goProxy*} backend will simply be ignored + @type proxy_options: C{dict} @param logger: you can pass an L{X2goLogger} object to the L{X2goProxy} constructor + @param session_instance: the L{X2goSession} instance this C{X2goProxy*} instance belongs to + @type session_instance: L{X2goSession} instance @type logger: L{X2goLogger} instance @param loglevel: if no L{X2goLogger} object has been supplied a new one will be constructed with the given loglevel @@ -102,6 +110,7 @@ class X2goProxyBASE(threading.Thread): self.session_info = session_info self.ssh_transport = ssh_transport self.session_log = session_log + self.proxy_options = proxy_options self.session_instance = session_instance self.PROXY_ENV = os.environ.copy() self.proxy = None @@ -184,6 +193,9 @@ class X2goProxyBASE(threading.Thread): _stdin = file('nul', 'r') _shell = True + # allow inheriting classes to do something with backend specific proxy_options... + self.process_proxy_options() + while not self.proxy: gevent.sleep(.2) p = self.proxy = subprocess.Popen(cmd_line, @@ -208,6 +220,25 @@ class X2goProxyBASE(threading.Thread): except WindowsError: pass + def process_proxy_options(self): + """\ + Override this method to incorporate elements from C{proxy_options} + into actual proxy subprocess execution. + + This method (if overridden) should (by design) never fail nor raise an exception. + Make sure to catch all possible errors appropriately. + + If you want to log ignored proxy_options then + + 1. remove processed proxy_options from self.proxy_options + 2. once you have finished processing the proxy_options call + the parent class method X2goProxyBASE.process_proxy_options() + + """ + # do the logging of remaining options, call + if self.proxy_options: + self.logger('ignoring non-processed proxy options: %s' % self.proxy_options, loglevel=log.loglevel_INFO) + def _update_local_proxy_socket(self, port): pass diff --git a/x2go/backends/terminal/_stdout.py b/x2go/backends/terminal/_stdout.py index 5ee1ead..6fa8fd1 100644 --- a/x2go/backends/terminal/_stdout.py +++ b/x2go/backends/terminal/_stdout.py @@ -173,51 +173,6 @@ class X2goTerminalSessionSTDOUT(object): - C{X2goServerSessionInfo} backend class: when starting or resuming a session, an object of this class will be used to store all information retrieved from the X2go server. - @param geometry: screen geometry of the X2go session. Can be either C{<width>x<height>} - or C{fullscreen} - @type geometry: str - @param depth: color depth in bits (common values: C{16}, C{24}) - @type depth: int - @param link: network link quality (either one of C{modem}, C{isdn}, C{adsl}, C{wan} or C{lan}) - @type link: str - @param pack: compression method for NX based session proxying - @type pack: str - @param cache_type: a dummy parameter that is passed to the L{X2goProxyBASE}. In NX Proxy - (class C{X2goProxyNX3}) this originally is the session name. With X2go it - defines the name of the NX cache directory. Best is to leave it untouched. - @type cache_type: str - @param kblayout: keyboard layout, e.g. C{us} (default), C{de}, C{fr}, ... - @type kblayout: str - @param kbtype: keyboard type, e.g. C{pc105/us} (default), C{pc105/de}, ... - @type kbtype: str - @param session_type: either C{desktop} or C{application} (rootless session) - @type session_type: str - @param snd_system: sound system to be used on server (C{none}, C{pulse} (default), - C{arts} (obsolete) or C{esd}) - @type snd_system: str - @param cmd: command to be run on X2go server after session start (only used - when L{X2goTerminalSessionSTDOUT.start()} is called, ignored on resume, suspend etc. - @type cmd: str - @param rootdir: X2go session directory, normally C{~/.x2go} - @type rootdir: str - @param info_backend: backend for handling storage of server session information - @type info_backend: C{X2goServerSessionInfo*} instance - @param list_backend: backend for handling storage of session list information - @type list_backend: C{X2goServerSessionList*} instance - @param proxy_backend: backend for handling the X-proxy connections - @type proxy_backend: C{X2goProxy*} instance - @param print_action: either a print action short name (PDFVIEW, PDFSAVE, PRINT, PRINTCMD) or the - resp. C{X2goPrintActionXXX} class (where XXX equals one of the given short names) - @type print_action: str or class - @param print_action_args: optional arguments for a given print_action (for further info refer to - L{X2goPrintActionPDFVIEW}, L{X2goPrintActionPDFSAVE}, L{X2goPrintActionPRINT} and L{X2goPrintActionPRINTCMD}) - @type print_action_args: dict - @param logger: you can pass an L{X2goLogger} object to the - L{X2goTerminalSessionSTDOUT} constructor - @type logger: L{X2goLogger} instance - @param loglevel: if no L{X2goLogger} object has been supplied a new one will be - constructed with the given loglevel - @type loglevel: int """ def __init__(self, control_session, session_info=None, @@ -232,7 +187,7 @@ class X2goTerminalSessionSTDOUT(object): print_action=None, print_action_args={}, info_backend=_X2goServerSessionInfo, list_backend=_X2goServerSessionList, - proxy_backend=_X2goProxy, + proxy_backend=_X2goProxy, proxy_options={}, printing_backend=_X2goClientPrinting, client_rootdir=os.path.join(_LOCAL_HOME, _X2GO_CLIENT_ROOTDIR), sessions_rootdir=os.path.join(_LOCAL_HOME, _X2GO_SESSIONS_ROOTDIR), @@ -243,9 +198,59 @@ class X2goTerminalSessionSTDOUT(object): new X2go sessions, resume suspended sessions or suspend resp. terminate currently running sessions on a connected X2go server. + @param geometry: screen geometry of the X2go session. Can be either C{<width>x<height>} + or C{fullscreen} + @type geometry: str + @param depth: color depth in bits (common values: C{16}, C{24}) + @type depth: int + @param link: network link quality (either one of C{modem}, C{isdn}, C{adsl}, C{wan} or C{lan}) + @type link: str + @param pack: compression method for NX based session proxying + @type pack: str + @param cache_type: a dummy parameter that is passed to the L{X2goProxyBASE}. In NX Proxy + (class C{X2goProxyNX3}) this originally is the session name. With X2go it + defines the name of the NX cache directory. Best is to leave it untouched. + @type cache_type: str + @param kblayout: keyboard layout, e.g. C{us} (default), C{de}, C{fr}, ... + @type kblayout: str + @param kbtype: keyboard type, e.g. C{pc105/us} (default), C{pc105/de}, ... + @type kbtype: str + @param session_type: either C{desktop} or C{application} (rootless session) + @type session_type: str + @param snd_system: sound system to be used on server (C{none}, C{pulse} (default), + C{arts} (obsolete) or C{esd}) + @type snd_system: str + @param cmd: command to be run on X2go server after session start (only used + when L{X2goTerminalSessionSTDOUT.start()} is called, ignored on resume, suspend etc. + @type cmd: str + @param rootdir: X2go session directory, normally C{~/.x2go} + @type rootdir: str + @param info_backend: backend for handling storage of server session information + @type info_backend: C{X2goServerSessionInfo*} instance + @param list_backend: backend for handling storage of session list information + @type list_backend: C{X2goServerSessionList*} instance + @param proxy_backend: backend for handling the X-proxy connections + @type proxy_backend: C{X2goProxy*} instance + @param print_action: either a print action short name (PDFVIEW, PDFSAVE, PRINT, PRINTCMD) or the + resp. C{X2goPrintActionXXX} class (where XXX equals one of the given short names) + @type print_action: str or class + @param print_action_args: optional arguments for a given print_action (for further info refer to + L{X2goPrintActionPDFVIEW}, L{X2goPrintActionPDFSAVE}, L{X2goPrintActionPRINT} and L{X2goPrintActionPRINTCMD}) + @type print_action_args: dict + @param proxy_options: a set of very C{X2goProxy*} backend specific options; any option that is not known + to the C{X2goProxy*} backend will simply be ignored + @type proxy_options: C{dict} + @param logger: you can pass an L{X2goLogger} object to the + L{X2goTerminalSessionSTDOUT} constructor + @type logger: L{X2goLogger} instance + @param loglevel: if no L{X2goLogger} object has been supplied a new one will be + constructed with the given loglevel + @type loglevel: int + """ self.proxy = None self.proxy_subprocess = None + self.proxy_options = proxy_options self.active_threads = [] self.reverse_tunnels = {} @@ -830,9 +835,10 @@ class X2goTerminalSessionSTDOUT(object): # set up SSH tunnel for X11 graphical elements self.proxy = self.proxy_backend(session_info=self.session_info, - ssh_transport=self.control_session.get_transport(), - sessions_rootdir=self.sessions_rootdir, + ssh_transport=self.control_session.get_transport(), + sessions_rootdir=self.sessions_rootdir, session_instance=self.session_instance, + proxy_options=self.proxy_options, logger=self.logger) self.proxy_subprocess = self.proxy.start_proxy() self.active_threads.append(self.proxy) diff --git a/x2go/client.py b/x2go/client.py index 995dc81..c6b41ff 100644 --- a/x2go/client.py +++ b/x2go/client.py @@ -741,7 +741,8 @@ class X2goClient(object): allow_printing=False, allow_share_local_folders=False, share_local_folders=[], allow_mimebox=False, mimebox_extensions=[], mimebox_action='OPEN', - add_to_known_hosts=False, known_hosts=None, + add_to_known_hosts=False, known_hosts=None, + proxy_options={}, return_object=False, **kwargs): """\ Register a new L{X2goSession}. Within one L{X2goClient} @@ -797,6 +798,9 @@ class X2goClient(object): @type add_to_known_hosts: C{bool} @param known_hosts: full path to C{known_hosts} file @type known_hosts: C{str} + @param proxy_options: a set of very C{X2goProxy*} backend specific options; any option that is not known + to the C{X2goProxy*} backend will simply be ignored + @type proxy_options: C{dict} @param return_object: normally this method returns a unique session UUID. If C{return_object} is set to C{True} an X2goSession object will be returned instead @@ -848,6 +852,7 @@ class X2goClient(object): _params['mimebox_extensions'] = mimebox_extensions _params['mimebox_action'] = mimebox_action _params['client_instance'] = self + _params['proxy_options'] = proxy_options session_uuid = self.session_registry.register(server=server, profile_id=_profile_id, profile_name=_profile_name, diff --git a/x2go/session.py b/x2go/session.py index aff1933..3857d72 100644 --- a/x2go/session.py +++ b/x2go/session.py @@ -67,7 +67,8 @@ _X2GO_SESSION_PARAMS = ('geometry', 'depth', 'link', 'pack', 'rootdir', 'loglevel', 'profile_name', 'profile_id', 'print_action', 'print_action_args', 'convert_encoding', 'client_encoding', 'server_encoding', - 'proxy_class', 'logger', + 'proxy_options', + 'logger', 'control_backend', 'terminal_backend', 'proxy_backend', 'profiles_backend', 'settings_backend', 'printing_backend', ) 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).