[X2Go-Commits] [x2gobroker] 04/17: Port to Python3
git-admin at x2go.org
git-admin at x2go.org
Mon Oct 9 10:40:05 CEST 2017
This is an automated email from the git hooks/post-receive script.
x2go pushed a commit to branch master
in repository x2gobroker.
commit acdfbb2b807e12f31f02b62919d56e4f44b8852d
Author: Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
Date: Wed Apr 5 23:05:39 2017 +0000
Port to Python3
---
bin/x2gobroker | 13 +-
bin/x2gobroker-testauth | 28 +--
debian/changelog | 2 +-
debian/control | 81 ++++---
...gobroker.default => python3-x2gobroker.default} | 0
...hon-x2gobroker.dirs => python3-x2gobroker.dirs} | 0
...hon-x2gobroker.docs => python3-x2gobroker.docs} | 0
...gobroker.install => python3-x2gobroker.install} | 0
...broker.postinst => python3-x2gobroker.postinst} | 0
...x2gobroker.postrm => python3-x2gobroker.postrm} | 0
...gobroker.preinst => python3-x2gobroker.preinst} | 0
debian/rules | 5 +-
sbin/x2gobroker-authservice | 37 ++--
sbin/x2gobroker-keygen | 2 +-
sbin/x2gobroker-loadchecker | 32 +--
sbin/x2gobroker-pubkeyauthorizer | 2 +-
sbin/x2gobroker-testagent | 7 +-
setup.py | 8 +-
test.py | 4 +-
x2gobroker/_paramiko.py | 6 +-
x2gobroker/agent.py | 39 ++--
x2gobroker/authmechs/https_get_authmech.py | 4 +-
x2gobroker/authservice.py | 4 +-
x2gobroker/basicauth.py | 2 +-
x2gobroker/brokers/base_broker.py | 232 +++++++++++----------
x2gobroker/brokers/inifile_broker.py | 16 +-
x2gobroker/brokers/zeroconf_broker.py | 72 +++----
x2gobroker/client/plain.py | 32 +--
x2gobroker/config.py | 62 +++---
x2gobroker/defaults.py | 228 ++++++++++----------
x2gobroker/loadchecker.py | 40 ++--
x2gobroker/loggers.py | 8 +-
x2gobroker/nameservices/base_nameservice.py | 10 +-
x2gobroker/nameservices/libnss_nameservice.py | 16 +-
x2gobroker/nameservices/testsuite_nameservice.py | 22 +-
x2gobroker/tests/test_broker_agent.py | 42 ++--
x2gobroker/tests/test_broker_base.py | 217 +++++++++----------
x2gobroker/tests/test_broker_inifile.py | 204 +++++++++---------
x2gobroker/tests/test_broker_zeroconf.py | 82 ++++----
x2gobroker/tests/test_client_plain_base.py | 12 +-
x2gobroker/tests/test_utils.py | 12 +-
x2gobroker/tests/test_web_plain_base.py | 16 +-
x2gobroker/tests/test_web_plain_zeroconf.py | 12 +-
x2gobroker/tests/test_web_uccs_zeroconf.py | 60 +++---
x2gobroker/uccsjson.py | 52 ++---
x2gobroker/utils.py | 24 +--
x2gobroker/web/extras.py | 6 +-
x2gobroker/web/json.py | 21 +-
x2gobroker/web/plain.py | 34 +--
x2gobroker/web/uccs.py | 32 +--
x2gobroker/x2gobroker_exceptions.py | 2 +-
51 files changed, 923 insertions(+), 919 deletions(-)
diff --git a/bin/x2gobroker b/bin/x2gobroker
index 005bfc4..98b71ba 100755
--- a/bin/x2gobroker
+++ b/bin/x2gobroker
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# This file is part of the X2Go Project - http://www.x2go.org
@@ -25,6 +25,7 @@ import argparse
import socket
import logging
import atexit
+import importlib
try:
import daemon
@@ -217,7 +218,7 @@ if __name__ == "__main__":
pass
try:
os.chown(os.path.dirname(pidfile), 0, getgrnam(x2gobroker.defaults.X2GOBROKER_DAEMON_GROUP).gr_gid)
- os.chmod(os.path.dirname(pidfile), 0770)
+ os.chmod(os.path.dirname(pidfile), 0o770)
except OSError:
pass
@@ -298,11 +299,11 @@ if __name__ == "__main__":
if CAN_DAEMONIZE and cmdline_args.daemonize:
atexit.register(cleanup_on_exit)
keep_fds = [int(fd) for fd in os.listdir('/proc/self/fd') if fd not in (0,1,2) ]
- daemon_stdout = file(daemon_logdir+'x2gobroker-daemon.stdout', 'w+')
- daemon_stderr = file(daemon_logdir+'x2gobroker-daemon.stderr', 'w+')
+ daemon_stdout = open(daemon_logdir+'x2gobroker-daemon.stdout', 'w+')
+ daemon_stderr = open(daemon_logdir+'x2gobroker-daemon.stderr', 'w+')
logger_broker.info('Forking daemon to background, PID file is: {pidfile}'.format(pidfile=pidfile))
with daemon.DaemonContext(stdout=daemon_stdout, stderr=daemon_stderr, files_preserve=keep_fds, umask=0o027, pidfile=lockfile.FileLock(pidfile), detach_process=True):
- file(pidfile, 'w+').write(str(os.getpid())+'\n')
+ open(pidfile, 'w+').write(str(os.getpid())+'\n')
launch_ioloop()
else:
launch_ioloop()
@@ -339,7 +340,7 @@ else:
for key in environ.keys():
if key.startswith('X2GOBROKER_'):
os.environ.update({ key: environ[key] })
- reload(x2gobroker.defaults)
+ importlib.reload(x2gobroker.defaults)
logfile_prelude()
return _tornado_application(environ, start_response)
diff --git a/bin/x2gobroker-testauth b/bin/x2gobroker-testauth
index 0c5e9d1..62da53a 100755
--- a/bin/x2gobroker-testauth
+++ b/bin/x2gobroker-testauth
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# This file is part of the X2Go Project - http://www.x2go.org
# Copyright (C) 2012-2015 by Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
@@ -70,9 +70,9 @@ if __name__ == "__main__":
if cmdline_args.username is None:
p.print_help()
- print
- print "*** Cannot continue without username... ***"
- print
+ print()
+ print("*** Cannot continue without username... ***")
+ print()
sys.exit(-1)
if cmdline_args.config_file is not None:
@@ -92,20 +92,22 @@ config_file = x2gobroker.defaults.X2GOBROKER_CONFIG
config_defaults = x2gobroker.defaults.X2GOBROKER_CONFIG_DEFAULTS
try:
- exec("import x2gobroker.brokers.{backend}_broker as _backend".format(backend=cmdline_args.backend))
+ namespace = {}
+ exec("import x2gobroker.brokers.{backend}_broker as _backend".format(backend=cmdline_args.backend), namespace)
+ _backend = namespace['_backend']
except ImportError:
p.print_help()
- print
- print "*** No such backend: {backend} ***".format(backend=cmdline_args.backend)
- print
+ print()
+ print("*** No such backend: {backend} ***".format(backend=cmdline_args.backend))
+ print()
sys.exit(-2)
broker = _backend.X2GoBroker(config_file=config_file, config_defaults=config_defaults)
if not broker.is_enabled():
p.print_help()
- print
- print "*** Backend not enabled: {backend} ***".format(backend=cmdline_args.backend)
- print
+ print()
+ print("*** Backend not enabled: {backend} ***".format(backend=cmdline_args.backend))
+ print()
sys.exit(-3)
def check_password(username, password):
@@ -117,8 +119,8 @@ if __name__ == "__main__":
password = getpass.getpass()
if check_password(username, password):
- print "Authentication succeeded."
+ print("Authentication succeeded.")
sys.exit(0)
else:
- print "Authentication failed!"
+ print("Authentication failed!")
sys.exit(-1)
diff --git a/debian/changelog b/debian/changelog
index f781ad2..f101b8c 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -2,7 +2,7 @@ x2gobroker (0.0.4.0-0x2go1) UNRELEASED; urgency=medium
* Port to Python 3.
- -- X2Go Release Manager <git-admin at x2go.org> Wed, Apr 5 18:01:48 2017 +0200
+ -- X2Go Release Manager <git-admin at x2go.org> Wed, 05 Apr 2017 20:01:48 +0000
x2gobroker (0.0.3.3-0x2go1) UNRELEASED; urgency=medium
diff --git a/debian/control b/debian/control
index 871e923..c830a44 100644
--- a/debian/control
+++ b/debian/control
@@ -11,29 +11,28 @@ Build-Depends:
dh-systemd | hello,
cdbs (>= 0.4.49~),
dpkg-dev (>= 1.14.31~),
- python (>= 2.6.5-0~),
- python-setuptools,
- python-nose,
- python-paste,
+ python3 (>= 2.6.5-0~),
+ python3-setuptools,
+ python3-nose,
+ python3-paste,
Standards-Version: 3.9.8
-XS-Python-Version: >= 2.6
+XS-Python-Version: >= 3.4
-Package: python-x2gobroker
+Package: python3-x2gobroker
Section: python
Architecture: all
Depends:
- ${python:Depends},
${misc:Depends},
- python,
- python-daemon,
- python-lockfile,
- python-pampy,
- python-netaddr,
- python-tornado,
- python-paramiko,
- python-urllib3,
+ python3,
+ python3-daemon,
+ python3-lockfile,
+ python3-pampy,
+ python3-netaddr,
+ python3-tornado,
+ python3-paramiko,
+ python3-urllib3,
Recommends:
- python-simplejson,
+ python3-simplejson,
Description: X2Go Session Broker (Python modules)
X2Go is a server based computing environment with
- session resuming
@@ -56,14 +55,13 @@ Description: X2Go Session Broker (Python modules)
Package: x2gobroker
Architecture: all
Depends:
- ${python:Depends},
${misc:Depends},
- python,
- python-argparse,
- python-setproctitle,
- python-tornado,
- python-wsgilog,
- python-x2gobroker (>= ${source:Version}), python-x2gobroker (<< ${source:Version}.1~),
+ python3,
+ python3-argparse,
+ python3-setproctitle,
+ python3-tornado,
+ python3-wsgilog,
+ python3-x2gobroker (>= ${source:Version}), python3-x2gobroker (<< ${source:Version}.1~),
Suggests:
apache2 | httpd,
Description: X2Go Session Broker (executable)
@@ -87,14 +85,14 @@ Description: X2Go Session Broker (executable)
Package: x2gobroker-authservice
Architecture: all
Depends:
- ${python:Depends},
${misc:Depends},
adduser,
- python,
- python-argparse,
- python-setproctitle,
- python-pampy,
- python-x2gobroker (>= ${source:Version}), python-x2gobroker (<< ${source:Version}.1~),
+ lsb-base,
+ python3,
+ python3-argparse,
+ python3-setproctitle,
+ python3-pampy,
+ python3-x2gobroker (>= ${source:Version}), python3-x2gobroker (<< ${source:Version}.1~),
Suggests:
x2gobroker-daemon,
Description: X2Go Session Broker (PAM authentication service)
@@ -119,13 +117,13 @@ Description: X2Go Session Broker (PAM authentication service)
Package: x2gobroker-loadchecker
Architecture: all
Depends:
- ${python:Depends},
${misc:Depends},
adduser,
- python,
- python-argparse,
- python-setproctitle,
- python-x2gobroker (>= ${source:Version}), python-x2gobroker (<< ${source:Version}.1~),
+ lsb-base,
+ python3,
+ python3-argparse,
+ python3-setproctitle,
+ python3-x2gobroker (>= ${source:Version}), python3-x2gobroker (<< ${source:Version}.1~),
Suggests:
x2gobroker-daemon,
Description: X2Go Session Broker (load checker service)
@@ -152,6 +150,7 @@ Architecture: all
Depends:
${misc:Depends},
adduser,
+ lsb-base,
x2gobroker (>= ${source:Version}), x2gobroker (<< ${source:Version}.1~),
Recommends:
x2gobroker-authservice,
@@ -181,8 +180,7 @@ Package: x2gobroker-wsgi
Architecture: all
Depends:
${misc:Depends},
- ${python:Depends},
- python,
+ python3,
adduser,
x2gobroker (>= ${source:Version}), x2gobroker (<< ${source:Version}.1~),
Recommends:
@@ -211,12 +209,11 @@ Package: x2gobroker-agent
Architecture: any
Depends:
${shlibs:Depends},
- ${python:Depends},
${misc:Depends},
- python,
- python-setproctitle,
- python-argparse,
- python-paramiko,
+ python3,
+ python3-setproctitle,
+ python3-argparse,
+ python3-paramiko,
perl,
adduser,
libfile-which-perl,
@@ -249,7 +246,7 @@ Description: X2Go Session Broker (remote agent)
.
WARNING: This package installs a setuid wrapper
(/usr/lib/x2go/broker/x2gobroker-agent) on your system. This setuid wrapper
- aims to be a secure replacement for the deprecated suidperl exectuable that
+ aims to be a secure replacement for the deprecated suidperl executable that
was removed from Perl (>= 5.12).
.
This wrapper is only able to execute the Perl script
diff --git a/debian/python-x2gobroker.default b/debian/python3-x2gobroker.default
similarity index 100%
rename from debian/python-x2gobroker.default
rename to debian/python3-x2gobroker.default
diff --git a/debian/python-x2gobroker.dirs b/debian/python3-x2gobroker.dirs
similarity index 100%
rename from debian/python-x2gobroker.dirs
rename to debian/python3-x2gobroker.dirs
diff --git a/debian/python-x2gobroker.docs b/debian/python3-x2gobroker.docs
similarity index 100%
rename from debian/python-x2gobroker.docs
rename to debian/python3-x2gobroker.docs
diff --git a/debian/python-x2gobroker.install b/debian/python3-x2gobroker.install
similarity index 100%
rename from debian/python-x2gobroker.install
rename to debian/python3-x2gobroker.install
diff --git a/debian/python-x2gobroker.postinst b/debian/python3-x2gobroker.postinst
similarity index 100%
rename from debian/python-x2gobroker.postinst
rename to debian/python3-x2gobroker.postinst
diff --git a/debian/python-x2gobroker.postrm b/debian/python3-x2gobroker.postrm
similarity index 100%
rename from debian/python-x2gobroker.postrm
rename to debian/python3-x2gobroker.postrm
diff --git a/debian/python-x2gobroker.preinst b/debian/python3-x2gobroker.preinst
similarity index 100%
rename from debian/python-x2gobroker.preinst
rename to debian/python3-x2gobroker.preinst
diff --git a/debian/rules b/debian/rules
index 506fece..415b111 100755
--- a/debian/rules
+++ b/debian/rules
@@ -26,8 +26,9 @@ export PREFIX=/usr
include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/class/makefile.mk
-DEB_PYTHON_SYSTEM = $(shell test -f /usr/bin/dh_python2 && echo "" || echo "pysupport")
-DEB_PYTHON_INSTALL_ARGS_python-x2gobroker ?= --no-compile -O0 --install-layout=deb
+DEB_PYTHON_SYSTEM = $(shell test -f /usr/bin/dh_python3 && echo "" || echo "pysupport")
+DEB_PYTHON_INSTALL_ARGS_python3-x2gobroker ?= --root=$(DEB_DESTDIR) --no-compile -O0 --install-layout=deb
+
include /usr/share/cdbs/1/class/python-distutils.mk
# needed when building with pysupport (e.g. on Ubuntu lucid)
diff --git a/sbin/x2gobroker-authservice b/sbin/x2gobroker-authservice
index 5d56f14..9a9994b 100755
--- a/sbin/x2gobroker-authservice
+++ b/sbin/x2gobroker-authservice
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# This file is part of the X2Go Project - http://www.x2go.org
@@ -30,7 +30,7 @@ import getpass
import logging.config
import pam
import atexit
-import ConfigParser
+import configparser
if os.path.isdir('/run'):
RUNDIR = '/run'
@@ -65,7 +65,7 @@ class AuthClient(asyncore.dispatcher_with_send):
self._buf = ''
def handle_read(self):
- data = self._buf + self.recv(1024)
+ data = self._buf + self.recv(1024).decode()
if not data:
self.close()
return
@@ -82,10 +82,10 @@ class AuthClient(asyncore.dispatcher_with_send):
if hasattr(pam, "pam"):
opam = pam.pam()
if opam.authenticate(user, passwd, service):
- self.send('ok\n')
+ self.send('ok\n'.encode())
self.logger.info('successful authentication for \'{user}\' with password \'<hidden>\' against PAM service \'{service}\''.format(user=user, service=service))
else:
- self.send('fail\n')
+ self.send('fail\n'.encode())
self.logger.info('authentication failure for \'{user}\' with password \'<hidden>\' against PAM service \'{service}\''.format(user=user, service=service))
def handle_close(self):
@@ -94,7 +94,7 @@ class AuthClient(asyncore.dispatcher_with_send):
class AuthService(asyncore.dispatcher_with_send):
- def __init__(self, socketfile, owner='root', group_owner='root', permissions='0660', logger=None):
+ def __init__(self, socketfile, owner='root', group_owner='root', permissions='0o660', logger=None):
self.logger = logger
asyncore.dispatcher_with_send.__init__(self)
self.create_socket(socket.AF_UNIX, socket.SOCK_STREAM)
@@ -124,13 +124,13 @@ iniconfig_loaded = None
iniconfig_section = '-'.join(PROG_NAME.split('-')[1:])
X2GOBROKER_DEFAULTS = "/etc/x2go/broker/defaults.conf"
if os.path.isfile(X2GOBROKER_DEFAULTS) and os.access(X2GOBROKER_DEFAULTS, os.R_OK):
- iniconfig = ConfigParser.SafeConfigParser()
+ iniconfig = configparser.RawConfigParser()
iniconfig.optionxform = str
iniconfig_loaded = iniconfig.read(X2GOBROKER_DEFAULTS)
# normally this would go into defaults.py, however, we do not want to pull in defaults.py here as that will create
# unwanted logfiles (access.log, broker.log, error.log) when x2gobroker-authservice is installed as standalone service
-if os.environ.has_key('X2GOBROKER_DEBUG'):
+if 'X2GOBROKER_DEBUG' in os.environ:
X2GOBROKER_DEBUG = ( os.environ['X2GOBROKER_DEBUG'].lower() in ('1', 'on', 'true', 'yes', ) )
elif iniconfig_loaded and iniconfig.has_option(iniconfig_section, 'X2GOBROKER_DEBUG'):
X2GOBROKER_DEBUG=iniconfig.get(iniconfig_section, 'X2GOBROKER_DEBUG')
@@ -139,7 +139,7 @@ elif iniconfig_loaded and iniconfig.has_option('common', 'X2GOBROKER_DEBUG'):
else:
X2GOBROKER_DEBUG = False
-if os.environ.has_key('X2GOBROKER_DAEMON_USER'):
+if 'X2GOBROKER_DAEMON_USER' in os.environ:
X2GOBROKER_DAEMON_USER=os.environ['X2GOBROKER_DAEMON_USER']
elif iniconfig_loaded and iniconfig.has_option(iniconfig_section, 'X2GOBROKER_DAEMON_USER'):
X2GOBROKER_DAEMON_USER=iniconfig.get(iniconfig_section, 'X2GOBROKER_DAEMON_USER')
@@ -148,7 +148,7 @@ elif iniconfig_loaded and iniconfig.has_option('common', 'X2GOBROKER_DAEMON_USER
else:
X2GOBROKER_DAEMON_USER="x2gobroker"
-if os.environ.has_key('X2GOBROKER_AUTHSERVICE_LOGCONFIG'):
+if 'X2GOBROKER_AUTHSERVICE_LOGCONFIG' in os.environ:
X2GOBROKER_AUTHSERVICE_LOGCONFIG=os.environ['X2GOBROKER_AUTHSERVICE_LOGCONFIG']
elif iniconfig_loaded and iniconfig.has_option(iniconfig_section, 'X2GOBROKER_AUTHSERVICE_LOGCONFIG'):
X2GOBROKER_AUTHSERVICE_LOGCONFIG=iniconfig.get(iniconfig_section, 'X2GOBROKER_AUTHSERVICE_LOGCONFIG')
@@ -157,7 +157,7 @@ elif iniconfig_loaded and iniconfig.has_option('common', 'X2GOBROKER_AUTHSERVICE
else:
X2GOBROKER_AUTHSERVICE_LOGCONFIG="/etc/x2go/broker/x2gobroker-authservice-logger.conf"
-if os.environ.has_key('X2GOBROKER_AUTHSERVICE_SOCKET'):
+if 'X2GOBROKER_AUTHSERVICE_SOCKET' in os.environ:
X2GOBROKER_AUTHSERVICE_SOCKET=os.environ['X2GOBROKER_AUTHSERVICE_SOCKET']
elif iniconfig_loaded and iniconfig.has_option(iniconfig_section, 'X2GOBROKER_AUTHSERVICE_SOCKET'):
X2GOBROKER_AUTHSERVICE_SOCKET=iniconfig.get(iniconfig_section, 'X2GOBROKER_AUTHSERVICE_SOCKET')
@@ -173,7 +173,7 @@ if __name__ == '__main__':
{'args':['-s','--socket-file'], 'default': X2GOBROKER_AUTHSERVICE_SOCKET, 'metavar': 'AUTHSOCKET', 'help': 'socket file for AuthService communication', },
{'args':['-o','--owner'], 'default': 'root', 'help': 'owner of the AuthService socket file', },
{'args':['-g','--group'], 'default': 'root', 'help': 'group ownership of the AuthService socket file', },
- {'args':['-p','--permissions'], 'default': '0660', 'help': 'set these file permissions for the AuthService socket file', },
+ {'args':['-p','--permissions'], 'default': '0o660', 'help': 'set these file permissions for the AuthService socket file', },
{'args':['-d','--debug'], 'default': False, 'action': 'store_true', 'help': 'enable debugging code', },
{'args':['-i','--debug-interactively'], 'default': False, 'action': 'store_true', 'help': 'force output of log message to the stderr (rather than to the log files)', },
@@ -276,9 +276,10 @@ if __name__ == '__main__':
os.makedirs(os.path.dirname(socket_file))
runtimedir_permissions = int(cmdline_args.permissions, 8)
- if runtimedir_permissions & 0400: runtimedir_permissions = runtimedir_permissions | 0100
- if runtimedir_permissions & 0040: runtimedir_permissions = runtimedir_permissions | 0010
- if runtimedir_permissions & 0004: runtimedir_permissions = runtimedir_permissions | 0001
+ if runtimedir_permissions & 0o400: runtimedir_permissions = runtimedir_permissions | 0o100
+ if runtimedir_permissions & 0o040: runtimedir_permissions = runtimedir_permissions | 0o010
+ if runtimedir_permissions & 0o004: runtimedir_permissions = runtimedir_permissions | 0o001
+
try:
os.chown(os.path.dirname(socket_file), getpwnam(cmdline_args.owner).pw_uid, getpwnam(cmdline_args.group).pw_gid)
os.chmod(os.path.dirname(socket_file), runtimedir_permissions)
@@ -290,10 +291,10 @@ if __name__ == '__main__':
try:
if CAN_DAEMONIZE and cmdline_args.daemonize:
keep_fds = [int(fd) for fd in os.listdir('/proc/self/fd') if fd not in (0,1,2) ]
- daemon_stdout = file(daemon_logdir+'x2gobroker-authservice.stdout', 'w+')
- daemon_stderr = file(daemon_logdir+'x2gobroker-authservice.stderr', 'w+')
+ daemon_stdout = open(daemon_logdir+'x2gobroker-authservice.stdout', 'w+')
+ daemon_stderr = open(daemon_logdir+'x2gobroker-authservice.stderr', 'w+')
with daemon.DaemonContext(stdout=daemon_stdout, stderr=daemon_stderr, files_preserve=keep_fds, umask=0o027, pidfile=lockfile.FileLock(pidfile), detach_process=True):
- file(pidfile, 'w+').write(str(os.getpid())+"\n")
+ open(pidfile, 'w+').write(str(os.getpid())+"\n")
loop()
else:
loop()
diff --git a/sbin/x2gobroker-keygen b/sbin/x2gobroker-keygen
index c3aa03c..a901c25 100755
--- a/sbin/x2gobroker-keygen
+++ b/sbin/x2gobroker-keygen
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# This file is part of the X2Go Project - http://www.x2go.org
diff --git a/sbin/x2gobroker-loadchecker b/sbin/x2gobroker-loadchecker
index aac8798..eb87c7d 100755
--- a/sbin/x2gobroker-loadchecker
+++ b/sbin/x2gobroker-loadchecker
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# This file is part of the X2Go Project - http://www.x2go.org
@@ -29,7 +29,7 @@ import socket
import getpass
import logging.config
import atexit
-import ConfigParser
+import configparser
if os.path.isdir('/run'):
RUNDIR = '/run'
@@ -66,7 +66,7 @@ class LoadCheckerServiceHandler(asyncore.dispatcher_with_send):
self._buf = ''
def handle_read(self):
- data = self._buf + self.recv(1024)
+ data = self._buf + self.recv(1024).decode()
if not data:
self.close()
return
@@ -97,7 +97,7 @@ class LoadCheckerServiceHandler(asyncore.dispatcher_with_send):
else:
if self.logger: self.logger.warning('LoadCheckServiceHandler.handle_read(): load check failure for backend={backend}, profile_id={profile_id}: LOAD-UNAVAILABLE'.format(backend=backend, profile_id=profile_id))
output += "\n"
- self.send(output)
+ self.send(output.encode())
def handle_close(self):
self.close()
@@ -105,7 +105,7 @@ class LoadCheckerServiceHandler(asyncore.dispatcher_with_send):
class LoadCheckerService(asyncore.dispatcher_with_send):
- def __init__(self, socketfile, owner='root', group_owner='root', permissions='0660', logger=None):
+ def __init__(self, socketfile, owner='root', group_owner='root', permissions='0o660', logger=None):
self.logger = logger
asyncore.dispatcher_with_send.__init__(self)
self.create_socket(socket.AF_UNIX, socket.SOCK_STREAM)
@@ -143,13 +143,13 @@ iniconfig_loaded = None
iniconfig_section = '-'.join(PROG_NAME.split('-')[1:])
X2GOBROKER_DEFAULTS = "/etc/x2go/broker/defaults.conf"
if os.path.isfile(X2GOBROKER_DEFAULTS) and os.access(X2GOBROKER_DEFAULTS, os.R_OK):
- iniconfig = ConfigParser.SafeConfigParser()
+ iniconfig = configparser.RawConfigParser()
iniconfig.optionxform = str
iniconfig_loaded = iniconfig.read(X2GOBROKER_DEFAULTS)
# normally this would go into defaults.py, however, we do not want to pull in defaults.py here as that will create
# unwanted logfiles (access.log, broker.log, error.log) when x2gobroker-loadchecker is installed as standalone service
-if os.environ.has_key('X2GOBROKER_DEBUG'):
+if 'X2GOBROKER_DEBUG' in os.environ:
X2GOBROKER_DEBUG = ( os.environ['X2GOBROKER_DEBUG'].lower() in ('1', 'on', 'true', 'yes', ) )
elif iniconfig_loaded and iniconfig.has_option(iniconfig_section, 'X2GOBROKER_DEBUG'):
X2GOBROKER_DEBUG=iniconfig.get(iniconfig_section, 'X2GOBROKER_DEBUG')
@@ -158,7 +158,7 @@ elif iniconfig_loaded and iniconfig.has_option('common', 'X2GOBROKER_DEBUG'):
else:
X2GOBROKER_DEBUG = False
-if os.environ.has_key('X2GOBROKER_DAEMON_USER'):
+if 'X2GOBROKER_DAEMON_USER' in os.environ:
X2GOBROKER_DAEMON_USER=os.environ['X2GOBROKER_DAEMON_USER']
elif iniconfig_loaded and iniconfig.has_option(iniconfig_section, 'X2GOBROKER_DAEMON_USER'):
X2GOBROKER_DAEMON_USER=iniconfig.get(iniconfig_section, 'X2GOBROKER_DAEMON_USER')
@@ -167,7 +167,7 @@ elif iniconfig_loaded and iniconfig.has_option('common', 'X2GOBROKER_DAEMON_USER
else:
X2GOBROKER_DAEMON_USER="x2gobroker"
-if os.environ.has_key('X2GOBROKER_LOADCHECKER_LOGCONFIG'):
+if 'X2GOBROKER_LOADCHECKER_LOGCONFIG' in os.environ:
X2GOBROKER_LOADCHECKER_LOGCONFIG=os.environ['X2GOBROKER_LOADCHECKER_LOGCONFIG']
elif iniconfig_loaded and iniconfig.has_option(iniconfig_section, 'X2GOBROKER_LOADCHECKER_LOGCONFIG'):
X2GOBROKER_LOADCHECKER_LOGCONFIG=iniconfig.get(iniconfig_section, 'X2GOBROKER_LOADCHECKER_LOGCONFIG')
@@ -176,7 +176,7 @@ elif iniconfig_loaded and iniconfig.has_option('common', 'X2GOBROKER_LOADCHECKER
else:
X2GOBROKER_LOADCHECKER_LOGCONFIG="/etc/x2go/broker/x2gobroker-loadchecker-logger.conf"
-if os.environ.has_key('X2GOBROKER_LOADCHECKER_SOCKET'):
+if 'X2GOBROKER_LOADCHECKER_SOCKET' in os.environ:
X2GOBROKER_LOADCHECKER_SOCKET=os.environ['X2GOBROKER_LOADCHECKER_SOCKET']
elif iniconfig_loaded and iniconfig.has_option(iniconfig_section, 'X2GOBROKER_LOADCHECKER_SOCKET'):
X2GOBROKER_LOADCHECKER_SOCKET=iniconfig.get(iniconfig_section, 'X2GOBROKER_LOADCHECKER_SOCKET')
@@ -294,9 +294,9 @@ if __name__ == '__main__':
os.makedirs(os.path.dirname(socket_file))
runtimedir_permissions = int(cmdline_args.permissions, 8)
- if runtimedir_permissions & 0400: runtimedir_permissions = runtimedir_permissions | 0100
- if runtimedir_permissions & 0040: runtimedir_permissions = runtimedir_permissions | 0010
- if runtimedir_permissions & 0004: runtimedir_permissions = runtimedir_permissions | 0001
+ if runtimedir_permissions & 0o400: runtimedir_permissions = runtimedir_permissions | 0o100
+ if runtimedir_permissions & 0o040: runtimedir_permissions = runtimedir_permissions | 0o010
+ if runtimedir_permissions & 0o004: runtimedir_permissions = runtimedir_permissions | 0o001
try:
os.chown(os.path.dirname(socket_file), getpwnam(cmdline_args.owner).pw_uid, getpwnam(cmdline_args.group).pw_gid)
os.chmod(os.path.dirname(socket_file), runtimedir_permissions)
@@ -308,10 +308,10 @@ if __name__ == '__main__':
try:
if CAN_DAEMONIZE and cmdline_args.daemonize:
keep_fds = [int(fd) for fd in os.listdir('/proc/self/fd') if fd not in (0,1,2) ]
- daemon_stdout = file(daemon_logdir+'x2gobroker-loadchecker.stdout', 'w+')
- daemon_stderr = file(daemon_logdir+'x2gobroker-loadchecker.stderr', 'w+')
+ daemon_stdout = open(daemon_logdir+'x2gobroker-loadchecker.stdout', 'w+')
+ daemon_stderr = open(daemon_logdir+'x2gobroker-loadchecker.stderr', 'w+')
with daemon.DaemonContext(stdout=daemon_stdout, stderr=daemon_stderr, files_preserve=keep_fds, umask=0o027, pidfile=lockfile.FileLock(pidfile), detach_process=True):
- file(pidfile, 'w+').write(str(os.getpid())+"\n")
+ open(pidfile, 'w+').write(str(os.getpid())+"\n")
loop()
else:
loop()
diff --git a/sbin/x2gobroker-pubkeyauthorizer b/sbin/x2gobroker-pubkeyauthorizer
index 449f935..ceb4ce6 100755
--- a/sbin/x2gobroker-pubkeyauthorizer
+++ b/sbin/x2gobroker-pubkeyauthorizer
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# This file is part of the X2Go Project - http://www.x2go.org
diff --git a/sbin/x2gobroker-testagent b/sbin/x2gobroker-testagent
index 47c87e1..4c4587d 100755
--- a/sbin/x2gobroker-testagent
+++ b/sbin/x2gobroker-testagent
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# This file is part of the X2Go Project - http://www.x2go.org
# Copyright (C) 2012-2015 by Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
@@ -20,7 +20,6 @@
import os
import sys
-import types
import setproctitle
import argparse
import logging
@@ -196,10 +195,10 @@ if __name__ == "__main__":
})
result = call_agent(task, **kwargs)
- if type(result) is types.ListType:
+ if type(result) is dict:
print "\n".join(result)
print
- elif task.startswith('findbusyservers') and type(result) is types.DictType:
+ elif task.startswith('findbusyservers') and type(result) is dict:
if result:
print "\n".join([ "{host} -- {usage}%".format(host=host, usage=usage) for host, usage in result.items() ])
else:
diff --git a/setup.py b/setup.py
index 49299d2..e9cdf9e 100755
--- a/setup.py
+++ b/setup.py
@@ -1,6 +1,4 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
+#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright (C) 2012-2015 by Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
@@ -24,11 +22,11 @@ from setuptools import setup, find_packages
import os
__VERSION__ = None
-for line in file(os.path.join('x2gobroker', '__init__.py')).readlines():
+for line in open(os.path.join('x2gobroker', '__init__.py')).readlines():
if (line.startswith('__VERSION__')):
exec(line.strip())
__AUTHOR__ = None
-for line in file(os.path.join('x2gobroker', '__init__.py')).readlines():
+for line in open(os.path.join('x2gobroker', '__init__.py')).readlines():
if (line.startswith('__AUTHOR__')):
exec(line.strip())
MODULE_VERSION = __VERSION__
diff --git a/test.py b/test.py
index 04a90ce..fd7860c 100755
--- a/test.py
+++ b/test.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright (C) 2014-2015 by Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
@@ -27,4 +27,4 @@ if __name__ == "__main__":
os.environ.update({'X2GOBROKER_DEBUG': "1"})
os.environ.update({'X2GOBROKER_TESTSUITE': "1"})
os.chdir(os.path.join('x2gobroker', 'tests',))
- os.system('python ./runalltests.py')
+ os.system('python3 ./runalltests.py')
diff --git a/x2gobroker/_paramiko.py b/x2gobroker/_paramiko.py
index 569532a..4a7c2fa 100644
--- a/x2gobroker/_paramiko.py
+++ b/x2gobroker/_paramiko.py
@@ -24,7 +24,7 @@ Monkey Patch and feature map for Python Paramiko
import paramiko
import platform
-from utils import compare_versions
+from x2gobroker.utils import compare_versions
PARAMIKO_VERSION = paramiko.__version__.split()[0]
PARAMIKO_FEATURE = {
@@ -61,9 +61,9 @@ def _SSHClient_save_host_keys(self, filename):
f = open(filename, 'w')
#f.write('# SSH host keys collected by paramiko\n')
_host_keys = self.get_host_keys()
- for hostname, keys in _host_keys.iteritems():
+ for hostname, keys in _host_keys.items():
- for keytype, key in keys.iteritems():
+ for keytype, key in keys.items():
f.write('%s %s %s\n' % (hostname, keytype, key.get_base64()))
f.close()
diff --git a/x2gobroker/agent.py b/x2gobroker/agent.py
index c18b747..6dda243 100644
--- a/x2gobroker/agent.py
+++ b/x2gobroker/agent.py
@@ -19,10 +19,9 @@
import os
import os.path
-import types
import subprocess
import paramiko
-import cStringIO
+import io
import time
import socket
import logging
@@ -103,7 +102,7 @@ def call_broker_agent(username, task, cmdline_args=[], remote_agent=None, logger
@raise X2GoBrokerAgentException: if the call to the remote broker agents fails.
"""
- if remote_agent in (u'LOCAL', None):
+ if remote_agent in ('LOCAL', None):
result = _call_local_broker_agent(username=username, task=task, cmdline_args=cmdline_args, logger=logger)
else:
result = _call_remote_broker_agent(username=username, task=task, cmdline_args=cmdline_args, remote_agent=remote_agent, logger=logger)
@@ -160,7 +159,7 @@ def _call_local_broker_agent(username, task, cmdline_args=[], logger=None):
shell=False,
)
- result = agent_process.stdout.read().split('\n')
+ result = agent_process.stdout.read().decode().split('\n')
except OSError:
result = None
@@ -197,13 +196,13 @@ def _call_remote_broker_agent(username, task, cmdline_args=[], remote_agent=None
if remote_agent is None:
logger_error.error('With the SSH agent-query-mode a remote agent host (hostname, hostaddr, port) has to be specified!')
- elif not remote_agent.has_key('host_key_policy'):
+ elif 'host_key_policy' not in remote_agent:
remote_agent['host_key_policy'] = paramiko.WarningPolicy()
- remote_hostname = remote_agent[u'hostaddr']
- remote_hostaddr = remote_agent[u'hostaddr']
- if remote_agent.has_key(u'port'):
- remote_port = int(remote_agent[u'port'])
+ remote_hostname = remote_agent['hostaddr']
+ remote_hostaddr = remote_agent['hostaddr']
+ if 'port' in remote_agent:
+ remote_port = int(remote_agent['port'])
else:
remote_port = 22
@@ -241,8 +240,8 @@ def _call_remote_broker_agent(username, task, cmdline_args=[], remote_agent=None
cmd = 'sh -c \'{cmd}\''.format(cmd=cmd)
logger.info('Executing agent command on remote host {hostname} ({hostaddr}): {cmd}'.format(hostname=remote_hostname, hostaddr=remote_hostaddr, cmd=cmd))
(stdin, stdout, stderr) = client.exec_command(cmd)
- result = stdout.read().split('\n')
- err = stderr.read().replace('\n', ' ')
+ result = stdout.read().decode().split('\n')
+ err = stderr.read().decode().replace('\n', ' ')
if err:
logger.warning('Remote agent command (host: {hostname} ({hostaddr})) reported an error: {err}'.format(hostname=remote_hostname, hostaddr=remote_hostaddr, err=err))
result = None
@@ -374,7 +373,7 @@ def has_sessions(username, remote_agent=None, logger=None, **kwargs):
logger = logger_broker
_success, _session_list = list_sessions(username, remote_agent=remote_agent, logger=logger, **kwargs)
- if type(_session_list) is types.ListType:
+ if type(_session_list) is list:
return (_success, [ s.split('|')[3] for s in _session_list if s.split('|')[4] == 'R' ], [ s.split('|')[3] for s in _session_list if s.split('|')[4] == 'S' ])
else:
return (False, [], [])
@@ -406,7 +405,7 @@ def find_busy_servers(username, remote_agent=None, logger=None, **kwargs):
_success, server_list = call_broker_agent(username, task='findbusyservers', remote_agent=remote_agent, logger=logger, **kwargs)
server_usage = {}
- if server_list and type(server_list) is types.ListType:
+ if server_list and type(server_list) is list:
for server_item in server_list:
if ':' in server_item:
usage, server = server_item.split(':')
@@ -437,11 +436,11 @@ def check_load(remote_agent=None, logger=None, **kwargs):
logger = logger_broker
try:
- if "username" in kwargs.keys():
+ if "username" in list(kwargs.keys()):
del kwargs["username"]
_success, _load_params = call_broker_agent(username='foo', task='checkload', remote_agent=remote_agent, logger=logger, **kwargs)
- except x2gobroker.x2gobroker_exceptions.X2GoBrokerAgentException, e:
- logger.error('querying remote agent on host {hostname} failed: {errmsg}'.format(hostname=remote_agent[u'hostname'], errmsg=str(e)))
+ except x2gobroker.x2gobroker_exceptions.X2GoBrokerAgentException as e:
+ logger.error('querying remote agent on host {hostname} failed: {errmsg}'.format(hostname=remote_agent['hostname'], errmsg=str(e)))
return "HOST-UNREACHABLE"
p = {}
@@ -455,7 +454,7 @@ def check_load(remote_agent=None, logger=None, **kwargs):
if p['memAvail'] == 0:
p['memAvail'] = p['myMemAvail']
- load_factor = long( ( (p['memAvail']/1000) * p['numCPU'] * p['typeCPU'] * 100 ) / p['loadavgXX'] )
+ load_factor = int( ( (p['memAvail']/1000) * p['numCPU'] * p['typeCPU'] * 100 ) / p['loadavgXX'] )
except KeyError:
return "LOAD-DATA-BOGUS"
@@ -608,9 +607,9 @@ def genkeypair(local_username, client_address, key_type='RSA', logger=None):
privkey = None
# generate key pair
- if unicode(key_type) == u'RSA':
+ if key_type == 'RSA':
key = paramiko.RSAKey.generate(2048)
- elif unicode(key_type) == u'DSA':
+ elif key_type == 'DSA':
key = paramiko.DSSKey.generate(1024)
if key:
@@ -626,7 +625,7 @@ def genkeypair(local_username, client_address, key_type='RSA', logger=None):
pubkey = "no-X11-forwarding,no-pty,no-user-rc {pubkey_type} {pubkey} {local_username}@{client_address}".format(pubkey=key.get_base64(), pubkey_type=pubkey_type, local_username=local_username, client_address=client_address)
# assemble the private key
- privkey_obj = cStringIO.StringIO()
+ privkey_obj = io.StringIO()
key.write_private_key(privkey_obj)
privkey = privkey_obj.getvalue()
diff --git a/x2gobroker/authmechs/https_get_authmech.py b/x2gobroker/authmechs/https_get_authmech.py
index c4c2599..13f945c 100644
--- a/x2gobroker/authmechs/https_get_authmech.py
+++ b/x2gobroker/authmechs/https_get_authmech.py
@@ -31,7 +31,7 @@
# attack.
# modules
-import httplib
+import http.client
import base64
class X2GoBrokerAuthMech(object):
@@ -52,7 +52,7 @@ class X2GoBrokerAuthMech(object):
# base64 encode the username and password
auth = base64.standard_b64encode('%s:%s' % (username, password)).replace('\n', '')
- https = httplib.HTTPSConnection(host,port)
+ https = http.client.HTTPSConnection(host,port)
https.putrequest("GET", path)
https.putheader("Host", host)
https.putheader("User-Agent", "X2Go Session Broker")
diff --git a/x2gobroker/authservice.py b/x2gobroker/authservice.py
index 35f7171..a512dc7 100644
--- a/x2gobroker/authservice.py
+++ b/x2gobroker/authservice.py
@@ -31,8 +31,8 @@ def authenticate(username, password, service="x2gobroker"):
s.connect(x2gobroker.defaults.X2GOBROKER_AUTHSERVICE_SOCKET)
# FIXME: somehow logging output disappears after we have connected to the socket file...
logger_broker.debug('sending username={username}, password=<hidden>, service={service} to authentication service'.format(username=username, service=service))
- s.send('{username}\r{password}\r{service}\n'.format(username=username, password=password, service=service))
- result = s.recv(1024)
+ s.send('{username}\r{password}\r{service}\n'.format(username=username, password=password, service=service).encode())
+ result = s.recv(1024).decode()
s.close()
if result.startswith('ok'):
logger_broker.info('authentication against PAM service »{service}« succeeded for user »{username}«'.format(username=username, service=service))
diff --git a/x2gobroker/basicauth.py b/x2gobroker/basicauth.py
index a943719..9a79935 100644
--- a/x2gobroker/basicauth.py
+++ b/x2gobroker/basicauth.py
@@ -40,7 +40,7 @@ def require_basic_auth(realm, validate_callback):
create_auth_header()
else:
auth_decoded = base64.decodestring(auth_header[6:])
- username, kwargs['basicauth_pass'] = [ unicode(s) for s in auth_decoded.split(':', 2) ]
+ username, kwargs['basicauth_pass'] = [ s for s in auth_decoded.split(':', 2) ]
kwargs['basicauth_user'], access = validate_callback(username, kwargs['basicauth_pass'])
if access:
return True
diff --git a/x2gobroker/brokers/base_broker.py b/x2gobroker/brokers/base_broker.py
index 2c6bbc2..bed645c 100644
--- a/x2gobroker/brokers/base_broker.py
+++ b/x2gobroker/brokers/base_broker.py
@@ -25,7 +25,6 @@ L{x2gobroker.brokers.base_broker.X2GoBroker} class - base skeleton for X2GoBroke
__NAME__ = 'x2gobroker-pylib'
# modules
-import types
import copy
import uuid
import netaddr
@@ -146,7 +145,7 @@ class X2GoBroker(object):
"""
if self._client_address:
- return unicode(self._client_address)
+ return str(self._client_address)
else:
return None
@@ -194,7 +193,7 @@ class X2GoBroker(object):
@rtype: C{unicode}
"""
- unconfigured_my_cookie = u'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
+ unconfigured_my_cookie = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
my_cookie = unconfigured_my_cookie
deprecated_my_cookie = self.config.get_value('global', 'my-cookie')
@@ -350,13 +349,13 @@ class X2GoBroker(object):
_acls = self.get_acl_defaults()
_acls.update(acls)
_order = {}
- _order[u'users'] = _order[u'groups'] = _order[u'clients'] = _acls[u'acl-any-order']
+ _order['users'] = _order['groups'] = _order['clients'] = _acls['acl-any-order']
- try: _order[u'users'] = _acls[u'acl-users-order']
+ try: _order['users'] = _acls['acl-users-order']
except KeyError: pass
- try: _order[u'groups'] = _acls[u'acl-groups-order']
+ try: _order['groups'] = _acls['acl-groups-order']
except KeyError: pass
- try: _order[u'clients'] = _acls[u'acl-clients-order']
+ try: _order['clients'] = _acls['acl-clients-order']
except KeyError: pass
# to pass an ACL test, all three keys in the dict below have to be set to True
@@ -376,20 +375,20 @@ class X2GoBroker(object):
### clients access is granted first, if that fails then we return False here...
- if len( _acls[u'acl-clients-allow'] + _acls[u'acl-clients-deny'] ) > 0:
+ if len( _acls['acl-clients-allow'] + _acls['acl-clients-deny'] ) > 0:
- _acls_clients_allow = copy.deepcopy(_acls[u'acl-clients-allow'])
- _acls_clients_deny = copy.deepcopy(_acls[u'acl-clients-deny'])
+ _acls_clients_allow = copy.deepcopy(_acls['acl-clients-allow'])
+ _acls_clients_deny = copy.deepcopy(_acls['acl-clients-deny'])
_allow_client = False
_deny_client = False
for idx, item in enumerate(_acls_clients_allow):
- if unicode(item) == u'ALL':
+ if item == 'ALL':
_acls_clients_allow[idx] = '0.0.0.0/0'
_acls_clients_allow.insert(idx, '::/0')
for idx, item in enumerate(_acls_clients_deny):
- if unicode(item) == u'ALL':
+ if item == 'ALL':
_acls_clients_deny[idx] = '0.0.0.0/0'
_acls_clients_deny.insert(idx, '::/0')
@@ -408,68 +407,68 @@ class X2GoBroker(object):
if not (_allow_client or _deny_client):
# client was not in either of the rules, so we presume that the client is allowed to access
- _grant_availability[u'by_client']
- if _order[u'clients'] == 'allow-deny':
- _grant_availability[u'by_client'] = _allow_client and (not _deny_client)
+ _grant_availability['by_client']
+ if _order['clients'] == 'allow-deny':
+ _grant_availability['by_client'] = _allow_client and (not _deny_client)
else:
- _grant_availability[u'by_client'] = (not _deny_client) or _allow_client
+ _grant_availability['by_client'] = (not _deny_client) or _allow_client
- if not _grant_availability[u'by_client']:
+ if not _grant_availability['by_client']:
return False
### no user/group ACLs are in use, allow access then...
- if len(_acls[u'acl-users-allow'] + _acls[u'acl-users-deny'] + _acls[u'acl-groups-allow'] + _acls[u'acl-groups-deny']) == 0:
+ if len(_acls['acl-users-allow'] + _acls['acl-users-deny'] + _acls['acl-groups-allow'] + _acls['acl-groups-deny']) == 0:
return True
### CHECKING on a per-user basis...
_allow_user_override = False
_explicitly_deny_user = False
- if len( _acls[u'acl-users-allow'] + _acls[u'acl-users-deny'] ) > 0:
+ if len( _acls['acl-users-allow'] + _acls['acl-users-deny'] ) > 0:
_allow_user = False
_deny_user = False
- if username in _acls[u'acl-users-allow'] or u'ALL' in _acls[u'acl-users-allow']:
+ if username in _acls['acl-users-allow'] or 'ALL' in _acls['acl-users-allow']:
_allow_user_override = True
_allow_user = True
- if username in _acls[u'acl-users-deny']:
+ if username in _acls['acl-users-deny']:
_explicitly_deny_user = True
- if _explicitly_deny_user or (u'ALL' in _acls[u'acl-users-deny']):
+ if _explicitly_deny_user or ('ALL' in _acls['acl-users-deny']):
_deny_user = True
- if _order[u'users'] == 'allow-deny':
- _grant_availability[u'by_user'] = (_allow_user or _deny_user) and (_allow_user and (not _deny_user))
+ if _order['users'] == 'allow-deny':
+ _grant_availability['by_user'] = (_allow_user or _deny_user) and (_allow_user and (not _deny_user))
else:
- _grant_availability[u'by_user'] = (_allow_user or _deny_user) and ((not _deny_user) or _allow_user)
+ _grant_availability['by_user'] = (_allow_user or _deny_user) and ((not _deny_user) or _allow_user)
# if a user has been granted access directly, then the corresponding session profile(s)
# will be provided to him/her, it does not matter what the group acl will have to say to this...
- if _grant_availability[u'by_user']:
+ if _grant_availability['by_user']:
return True
### CHECKING on a per-group basis...
- if len(_acls[u'acl-groups-allow'] + _acls[u'acl-groups-deny']) > 0:
+ if len(_acls['acl-groups-allow'] + _acls['acl-groups-deny']) > 0:
_allow_group = False
_deny_group = False
- _user_groups = [u'ALL'] + self.get_user_groups(username, primary_groups=not self.get_global_value('ignore-primary-group-memberships'))
+ _user_groups = ['ALL'] + self.get_user_groups(username, primary_groups=not self.get_global_value('ignore-primary-group-memberships'))
- _allow_group = bool(len(set(_user_groups).intersection( set(_acls[u'acl-groups-allow']) )))
- _deny_group = bool(len(set(_user_groups).intersection( set(_acls[u'acl-groups-deny']) )))
+ _allow_group = bool(len(set(_user_groups).intersection( set(_acls['acl-groups-allow']) )))
+ _deny_group = bool(len(set(_user_groups).intersection( set(_acls['acl-groups-deny']) )))
- if _order[u'groups'] == 'allow-deny':
- _grant_availability[u'by_group'] = (_allow_group or _deny_group) and (_allow_group and (not _deny_group))
+ if _order['groups'] == 'allow-deny':
+ _grant_availability['by_group'] = (_allow_group or _deny_group) and (_allow_group and (not _deny_group))
else:
- _grant_availability[u'by_group'] = (_allow_group or _deny_group) and (not _deny_group) or _allow_group
+ _grant_availability['by_group'] = (_allow_group or _deny_group) and (not _deny_group) or _allow_group
# if a group has been granted access, with one exception: if the thread model for users is
# allow-deny, then we presume that the acl-users-deny entry has precendence over
# acl-groups-allow/acl-groups-deny.
- if (_grant_availability[u'by_group'] and not _explicitly_deny_user) or _allow_user_override:
+ if (_grant_availability['by_group'] and not _explicitly_deny_user) or _allow_user_override:
return True
return False
@@ -481,8 +480,9 @@ class X2GoBroker(object):
try:
if self.authmech_module is None:
_authmech_module = None
- exec("import x2gobroker.authmechs.{mech}_authmech as _authmech_module".format(mech=mech))
- self.authmech_module = _authmech_module
+ namespace = {}
+ exec("import x2gobroker.authmechs.{mech}_authmech as _authmech_module".format(mech=mech), namespace)
+ self.authmech_module = namespace['_authmech_module']
return True
except ImportError:
return False
@@ -515,9 +515,9 @@ class X2GoBroker(object):
_default_auth_mech = self.config.get_value('global', 'default-auth-mech').lower()
logger_broker.debug('base_broker.X2GoBroker.get_authentication_mechanism(): found default-auth-mech in global config section: {value}'.format(value=_default_auth_mech))
- return unicode(_auth_mech) or unicode(_default_auth_mech)
+ return _auth_mech or _default_auth_mech
- def _enforce_agent_query_mode(self, mode=u'LOCAL'):
+ def _enforce_agent_query_mode(self, mode='LOCAL'):
"""\
Allow frontends to enforce a certain broker agent backend.
@@ -543,8 +543,8 @@ class X2GoBroker(object):
_agent_query_mode = ""
_profile = self.get_profile_broker(profile_id)
- if _profile and _profile.has_key(u'broker-agent-query-mode') and _profile['broker-agent-query-mode']:
- _agent_query_mode = _profile[u'broker-agent-query-mode']
+ if _profile and 'broker-agent-query-mode' in _profile and _profile['broker-agent-query-mode']:
+ _agent_query_mode = _profile['broker-agent-query-mode']
logger_broker.debug('base_broker.X2GoBroker.get_agent_query_mode(): found broker-agent-query-mode in session profile with ID {id}: {value}. This one has precendence over the default and the backend value.'.format(id=profile_id, value=_agent_query_mode))
elif self.config.has_value('broker_{backend}'.format(backend=self.backend_name), 'agent-query-mode') and self.config.get_value('broker_{backend}'.format(backend=self.backend_name), 'agent-query-mode'):
@@ -555,7 +555,7 @@ class X2GoBroker(object):
_default_agent_query_mode = self.config.get_value('global', 'default-agent-query-mode').lower()
logger_broker.debug('base_broker.X2GoBroker.get_agent_query_mode(): found default-agent-query-mode in global config section: {value}'.format(value=_default_agent_query_mode))
- _mode = unicode(_agent_query_mode) or unicode(_backend_agent_query_mode) or unicode(_default_agent_query_mode)
+ _mode = _agent_query_mode or _backend_agent_query_mode or _default_agent_query_mode
# if the frontend overrides the agent query mode, immediately return it here...
if self._enforce_agent_query_mode(mode=_mode):
@@ -578,9 +578,9 @@ class X2GoBroker(object):
_session_autologin = False
_profile = self.get_profile_broker(profile_id)
- if _profile and _profile.has_key(u'broker-session-autologin') and _profile['broker-session-autologin']:
- _session_autologin = _profile[u'broker-session-autologin']
- if type(_session_autologin) in (types.StringType, types.UnicodeType):
+ if _profile and 'broker-session-autologin' in _profile and _profile['broker-session-autologin']:
+ _session_autologin = _profile['broker-session-autologin']
+ if type(_session_autologin) == str:
_session_autologin = _session_autologin.lower() in ('1', 'true')
logger_broker.debug('base_broker.X2GoBroker.get_session_autologin(): found broker-session-autologin in session profile with ID {id}: {value}. This one has precendence over the default value.'.format(id=profile_id, value=_session_autologin))
@@ -605,9 +605,9 @@ class X2GoBroker(object):
_portscan_x2goservers = False
_profile = self.get_profile_broker(profile_id)
- if _profile and _profile.has_key(u'broker-portscan-x2goservers') and _profile['broker-portscan-x2goservers']:
- _portscan_x2goservers = _profile[u'broker-portscan-x2goservers']
- if type(_portscan_x2goservers) in (types.StringType, types.UnicodeType):
+ if _profile and 'broker-portscan-x2goservers' in _profile and _profile['broker-portscan-x2goservers']:
+ _portscan_x2goservers = _profile['broker-portscan-x2goservers']
+ if type(_portscan_x2goservers) == str:
_portscan_x2goservers = _portscan_x2goservers.lower() in ('1', 'true')
logger_broker.debug('base_broker.X2GoBroker.get_portscan_x2goservers(): found broker-portscan-x2goservers in session profile with ID {id}: {value}. This one has precendence over the default value.'.format(id=profile_id, value=_portscan_x2goservers))
@@ -635,15 +635,15 @@ class X2GoBroker(object):
_default_authorized_keys_file = "%h/.x2go/authorized_keys"
_authorized_keys_file = ""
_profile = self.get_profile_broker(profile_id)
- if _profile and _profile.has_key(u'broker-authorized-keys') and _profile['broker-authorized-keys']:
- _authorized_keys_file = _profile[u'broker-authorized-keys']
+ if _profile and 'broker-authorized-keys' in _profile and _profile['broker-authorized-keys']:
+ _authorized_keys_file = _profile['broker-authorized-keys']
logger_broker.debug('base_broker.X2GoBroker.get_authorized_keys_file(): found broker-authorized-keys in session profile with ID {id}: {value}. This one has precendence over the default value.'.format(id=profile_id, value=_authorized_keys_file))
elif self.config.has_value('global', 'default-authorized-keys'):
_default_authorized_keys_file = self.config.get_value('global', 'default-authorized-keys')
logger_broker.debug('base_broker.X2GoBroker.get_authorized_keys_file(): found default-authorized-keys in global config section: {value}'.format(value=_default_authorized_keys_file))
- return unicode(_authorized_keys_file) or unicode(_default_authorized_keys_file)
+ return _authorized_keys_file or _default_authorized_keys_file
def get_sshproxy_authorized_keys_file(self, profile_id):
"""\
@@ -661,15 +661,15 @@ class X2GoBroker(object):
_default_authorized_keys_file = "%h/.x2go/authorized_keys"
_authorized_keys_file = ""
_profile = self.get_profile_broker(profile_id)
- if _profile and _profile.has_key(u'broker-sshproxy-authorized-keys') and _profile['broker-sshproxy-authorized-keys']:
- _authorized_keys_file = _profile[u'broker-sshproxy-authorized-keys']
+ if _profile and 'broker-sshproxy-authorized-keys' in _profile and _profile['broker-sshproxy-authorized-keys']:
+ _authorized_keys_file = _profile['broker-sshproxy-authorized-keys']
logger_broker.debug('base_broker.X2GoBroker.get_sshproxy_authorized_keys_file(): found broker-sshproxy-authorized-keys in session profile with ID {id}: {value}. This one has precendence over the default value.'.format(id=profile_id, value=_authorized_keys_file))
elif self.config.has_value('global', 'default-sshproxy-authorized-keys'):
_default_authorized_keys_file = self.config.get_value('global', 'default-sshproxy-authorized-keys')
logger_broker.debug('base_broker.X2GoBroker.get_sshproxy_authorized_keys_file(): found default-sshproxy-authorized-keys in global config section: {value}'.format(value=_default_authorized_keys_file))
- return unicode(_authorized_keys_file) or unicode(_default_authorized_keys_file)
+ return _authorized_keys_file or _default_authorized_keys_file
def get_userdb_service(self):
"""\
@@ -687,7 +687,7 @@ class X2GoBroker(object):
if self.config.has_value('broker_{backend}'.format(backend=self.backend_name), 'user-db'):
_user_db = self.config.get_value('broker_{backend}'.format(backend=self.backend_name), 'user-db').lower() or _user_db
- return unicode(_user_db)
+ return _user_db
def get_groupdb_service(self):
"""\
@@ -705,7 +705,7 @@ class X2GoBroker(object):
if self.config.has_value('broker_{backend}'.format(backend=self.backend_name), 'group-db'):
_group_db = self.config.get_value('broker_{backend}'.format(backend=self.backend_name), 'group-db').lower() or _group_db
- return unicode(_group_db)
+ return _group_db
def get_use_load_checker(self):
"""\
@@ -748,13 +748,13 @@ class X2GoBroker(object):
_profile_broker = self.get_profile_broker(profile_id)
# it is not explicitly disabled per session profile definition
- if _profile_broker and _profile_broker.has_key(u'broker-use-load-checker') and _profile_broker['broker-use-load-checker'] not in ('1', 'true'):
+ if _profile_broker and 'broker-use-load-checker' in _profile_broker and _profile_broker['broker-use-load-checker'] not in ('1', 'true'):
return False
_profile = self.get_profile(profile_id)
# more than one host is defined in the session profile
- if len(_profile[u'host']) < 2:
+ if len(_profile['host']) < 2:
return False
else:
@@ -766,8 +766,9 @@ class X2GoBroker(object):
try:
if self.nameservice_module is None:
_nameservice_module = None
- exec("import x2gobroker.nameservices.{service}_nameservice as _nameservice_module".format(service=service))
- self.nameservice_module = _nameservice_module
+ namespace = {}
+ exec("import x2gobroker.nameservices.{service}_nameservice as _nameservice_module".format(service=service), namespace)
+ self.nameservice_module = namespace['_nameservice_module']
return True
except ImportError:
return False
@@ -943,8 +944,8 @@ class X2GoBroker(object):
### IMPLEMENT YOUR AUTHENTICATION LOGIC IN THE self._do_authenticate(**kwargs) METHOD
### when inheriting from the x2gobroker.brokers.base_broker.X2GoBroker class.
- if type(cookie) is types.StringType:
- cookie = unicode(cookie)
+ if type(cookie) is bytes:
+ cookie = cookie
if (((cookie == None) or (cookie == "")) and require_cookie):
#cookie required but we did not get one - catch wrong cookie case later
@@ -1058,10 +1059,10 @@ class X2GoBroker(object):
return remote_agent
agent_query_mode = self.get_agent_query_mode(profile_id).upper()
- if agent_query_mode == u'SSH' and x2gobroker.agent.has_remote_broker_agent_setup():
+ if agent_query_mode == 'SSH' and x2gobroker.agent.has_remote_broker_agent_setup():
profile = self.get_profile(profile_id)
- server_list = profile[u'host']
+ server_list = profile['host']
random.shuffle(server_list)
# if the load checker is in use for this profile, let's retrieve the available server loads here
@@ -1074,7 +1075,7 @@ class X2GoBroker(object):
load_factors = {}
if self.use_load_checker(profile_id):
load_factors = x2gobroker.loadchecker.check_load(self.backend_name, profile_id)
- for h in [ _h for _h in load_factors.keys() if type(load_factors[_h]) != types.LongType ]:
+ for h in [ _h for _h in list(load_factors.keys()) if type(load_factors[_h]) != int ]:
if h in server_list:
server_list.remove(h)
@@ -1086,16 +1087,16 @@ class X2GoBroker(object):
remote_agent_hostname = server_list[-1]
remote_agent_hostaddr = remote_agent_hostname
- remote_agent_port = profile[u'sshport']
- if profile.has_key('sshport={hostname}'.format(hostname=remote_agent_hostname)):
+ remote_agent_port = profile['sshport']
+ if 'sshport={hostname}'.format(hostname=remote_agent_hostname) in profile:
remote_agent_port = profile["sshport={hostname}".format(hostname=remote_agent_hostname)]
- if profile.has_key('host={hostname}'.format(hostname=remote_agent_hostname)):
+ if 'host={hostname}'.format(hostname=remote_agent_hostname) in profile:
remote_agent_hostaddr = profile["host={hostname}".format(hostname=remote_agent_hostname)]
remote_agent = {
- u'hostname': remote_agent_hostname,
- u'hostaddr': remote_agent_hostaddr,
- u'port': remote_agent_port, }
+ 'hostname': remote_agent_hostname,
+ 'hostaddr': remote_agent_hostaddr,
+ 'port': remote_agent_port, }
try:
if x2gobroker.agent.ping(remote_agent=remote_agent):
@@ -1110,9 +1111,9 @@ class X2GoBroker(object):
logger_broker.warning('base_broker.X2GoBroker.get_remote_agent(): failed to allocate any broker agent (query-mode: {query_mode}, remote_agent: {remote_agent})'.format(query_mode=agent_query_mode, remote_agent=remote_agent))
else:
# ship the load_factors retrieved from the load checker service in the remote_agent dict
- remote_agent[u'load_factors'] = load_factors
+ remote_agent['load_factors'] = load_factors
- elif agent_query_mode == u'LOCAL':
+ elif agent_query_mode == 'LOCAL':
# use a non-False value here, not used anywhere else...
remote_agent = 'LOCAL'
@@ -1136,25 +1137,25 @@ class X2GoBroker(object):
return remote_agents
agent_query_mode = self.get_agent_query_mode(profile_id).upper()
- if agent_query_mode == u'SSH' and x2gobroker.agent.has_remote_broker_agent_setup():
+ if agent_query_mode == 'SSH' and x2gobroker.agent.has_remote_broker_agent_setup():
profile = self.get_profile(profile_id)
- server_list = profile[u'host']
+ server_list = profile['host']
while server_list:
remote_agent_hostname = server_list[-1]
remote_agent_hostaddr = remote_agent_hostname
- remote_agent_port = profile[u'sshport']
- if profile.has_key('sshport={hostname}'.format(hostname=remote_agent_hostname)):
+ remote_agent_port = profile['sshport']
+ if 'sshport={hostname}'.format(hostname=remote_agent_hostname) in profile:
remote_agent_port = profile["sshport={hostname}".format(hostname=remote_agent_hostname)]
- if profile.has_key('host={hostname}'.format(hostname=remote_agent_hostname)):
+ if 'host={hostname}'.format(hostname=remote_agent_hostname) in profile:
remote_agent_hostaddr = profile["host={hostname}".format(hostname=remote_agent_hostname)]
remote_agents.append({
- u'hostname': remote_agent_hostname,
- u'hostaddr': remote_agent_hostaddr,
- u'port': remote_agent_port, }
+ 'hostname': remote_agent_hostname,
+ 'hostaddr': remote_agent_hostaddr,
+ 'port': remote_agent_port, }
)
server_list = server_list[0:-1]
@@ -1227,7 +1228,7 @@ class X2GoBroker(object):
acls = self.get_profile_acls(profile_id)
if self.check_profile_acls(username, acls):
- for key in copy.deepcopy(profile).keys():
+ for key in list(copy.deepcopy(profile).keys()):
if profile[key] == "not-set":
del profile[key]
@@ -1238,11 +1239,11 @@ class X2GoBroker(object):
if key.startswith('sshport=') and broker_frontend != 'uccs':
del profile[key]
if key == 'user' and profile[key] == 'BROKER_USER':
- profile[key] = unicode(username)
+ profile[key] = username
if self.get_session_autologin(profile_id):
profile['autologin'] = True
- profile['key'] = u'<will-be-exchanged-during-session-selection>'
+ profile['key'] = '<will-be-exchanged-during-session-selection>'
# make sure that desktop sessions (that we know by name) do run with rootless=false
# and that the command string is always upper case (otherwise x2goruncommand might
@@ -1263,15 +1264,15 @@ class X2GoBroker(object):
suspended_matching_hostnames = x2gobroker.utils.matching_hostnames(profile['host'], suspended_sessions)
running_matching_hostnames = x2gobroker.utils.matching_hostnames(profile['host'], running_sessions)
if suspended_matching_hostnames:
- profile['status'] = u'S'
+ profile['status'] = 'S'
profile['host'] = [suspended_matching_hostnames[0]]
elif running_matching_hostnames:
- profile['status'] = u'R'
+ profile['status'] = 'R'
profile['host'] = [running_matching_hostnames[0]]
else:
profile['host'] = [profile['host'][0]]
- if profile.has_key('status') and profile['status']:
+ if 'status' in profile and profile['status']:
logger_broker.debug('base_broker.X2GoBroker.get_profile_for_user(): marking session profile {name} as {status}'.format(name=profile['name'], status=profile['status']))
except x2gobroker.x2gobroker_exceptions.X2GoBrokerAgentException:
@@ -1324,7 +1325,7 @@ class X2GoBroker(object):
return { 'server': 'no-server-available', 'port': 22, }
# if we have more than one server, pick one server randomly for X2Go Broker Agent queries
- server_list = profile[u'host']
+ server_list = profile['host']
if len(server_list) == 0:
return { 'server': 'no-server-available', 'port': profile['sshport'], }
@@ -1401,7 +1402,7 @@ class X2GoBroker(object):
# the host address as found in server_list (and hope we can connect
# to that address.
_session_server_name = session_info.split('|')[3]
- if profile.has_key('host={server_name}'.format(server_name=_session_server_name)):
+ if 'host={server_name}'.format(server_name=_session_server_name) in profile:
server_name = _session_server_name
elif _session_server_name in server_list:
server_name = _session_server_name
@@ -1476,11 +1477,11 @@ class X2GoBroker(object):
# the list of busy_servers only shows servers with sessions, but not those servers that are entirely idle...
for server in server_list:
- if server not in busy_servers.keys():
+ if server not in list(busy_servers.keys()):
busy_servers[server] = 0
# we will only contact servers that are (still) in server_list
- for busy_server in busy_servers.keys():
+ for busy_server in list(busy_servers.keys()):
if busy_server not in server_list:
del busy_servers[busy_server]
@@ -1490,12 +1491,12 @@ class X2GoBroker(object):
load_factors = remote_agent['load_factors']
busy_servers_temp = copy.deepcopy(busy_servers)
- for busy_server in busy_servers_temp.keys():
- if busy_server in load_factors.keys() and type(load_factors[busy_server]) is not types.LongType:
+ for busy_server in list(busy_servers_temp.keys()):
+ if busy_server in list(load_factors.keys()) and type(load_factors[busy_server]) is not int:
# if a host cannot report its load, let's ignore it...
del busy_servers_temp[busy_server]
- elif busy_server in load_factors.keys() and ( type(load_factors[busy_server]) is types.LongType or busy_servers[busy_server] == 0):
+ elif busy_server in list(load_factors.keys()) and ( type(load_factors[busy_server]) is int or busy_servers[busy_server] == 0):
# when using the load checker service, then busy_servers contains the number of sessions per host
@@ -1511,10 +1512,10 @@ class X2GoBroker(object):
if busy_servers_temp is not None:
busy_servers = copy.deepcopy(busy_servers_temp)
- busy_server_list = [ (load, server) for server, load in busy_servers.items() ]
+ busy_server_list = [ (load, server) for server, load in list(busy_servers.items()) ]
busy_server_list.sort()
- logger_broker.debug('base_broker.X2GoBroker.select_session(): load balancer analysis: {server_load}'.format(server_load=unicode(busy_server_list)))
+ logger_broker.debug('base_broker.X2GoBroker.select_session(): load balancer analysis: {server_load}'.format(server_load=busy_server_list))
server_name = busy_server_list[0][1]
@@ -1531,7 +1532,7 @@ class X2GoBroker(object):
_save_busy_servers = None
else:
- logger_broker.warning('base_broker.X2GoBroker.select_session(): no broker agent could be contacted, this does not look good. We tried these agent hosts: {agent_hosts}'.format(agent_hosts=unicode(initial_server_list)))
+ logger_broker.warning('base_broker.X2GoBroker.select_session(): no broker agent could be contacted, this does not look good. We tried these agent hosts: {agent_hosts}'.format(agent_hosts=initial_server_list))
# detect best X2Go server for this user if load balancing is configured
elif len(server_list) >= 2:
@@ -1566,8 +1567,8 @@ class X2GoBroker(object):
if server_list:
if not self.get_portscan_x2goservers(profile_id) or x2gobroker.utils.portscan(addr=server_name, port=server_port) or x2gobroker.utils.portscan(addr=server_addr, port=server_port):
selected_session = {
- u'server': server_addr,
- u'port': server_port,
+ 'server': server_addr,
+ 'port': server_port,
}
else:
server_list.remove(server_name)
@@ -1577,7 +1578,7 @@ class X2GoBroker(object):
logger_broker.warning('base_broker.X2GoBroker.select_session(): failed to contact host \'{down_server}\', trying next server \'{next_server}\''.format(down_server=server_name, next_server=server_list[0]))
server_name = server_list[0]
else:
- logger_broker.error('base_broker.X2GoBroker.select_session(): no X2Go Server could be contacted, session startup will fail, tried these hosts: {server_list}'.format(server_list=unicode(initial_server_list)))
+ logger_broker.error('base_broker.X2GoBroker.select_session(): no X2Go Server could be contacted, session startup will fail, tried these hosts: {server_list}'.format(server_list=initial_server_list))
# If we arrive here and session_list carries an entry for this user, then the session DB probably still
# carries a zombie session entry (that will disappear when the down X2Go Server comes up again (cleanup
@@ -1591,8 +1592,8 @@ class X2GoBroker(object):
if not selected_session and not server_list:
if len(initial_server_list) > 1:
selected_session = {
- u'server': u'no-X2Go-Server-available',
- u'port': server_port,
+ 'server': 'no-X2Go-Server-available',
+ 'port': server_port,
}
else:
# hand-over the original hostname for non-load-balanced session profiles
@@ -1603,8 +1604,8 @@ class X2GoBroker(object):
try: failed_server_name = profile['host={hostname}'.format(hostname=failed_server_name)]
except KeyError: pass
selected_session = {
- u'server': failed_server_name,
- u'port': failed_server_port,
+ 'server': failed_server_name,
+ 'port': failed_server_port,
}
# are we resuming a running/suspended session?
@@ -1612,14 +1613,14 @@ class X2GoBroker(object):
selected_session['session_info'] = session_info
# define a remote SSH proxy agent if an SSH proxy host is used with this session profile
- if profile.has_key(u'sshproxyhost') and profile[u'sshproxyhost']:
+ if 'sshproxyhost' in profile and profile['sshproxyhost']:
remote_sshproxy_agent = {
- u'hostname': profile[u'sshproxyhost'],
- u'hostaddr': profile[u'sshproxyhost'],
- u'port': "22"
+ 'hostname': profile['sshproxyhost'],
+ 'hostaddr': profile['sshproxyhost'],
+ 'port': "22"
}
- if profile.has_key(u'sshproxyport') and profile[u'sshproxyport']:
- remote_sshproxy_agent[u'port'] = profile[u'sshproxyport']
+ if 'sshproxyport' in profile and profile['sshproxyport']:
+ remote_sshproxy_agent['port'] = profile['sshproxyport']
else:
remote_sshproxy_agent = None
@@ -1627,11 +1628,11 @@ class X2GoBroker(object):
if remote_agent and self.get_session_autologin(profile_id) and username:
# let's use the chosen server_name if remote_agent is reachable via SSH
- if type(remote_agent) is types.DictType:
+ if type(remote_agent) is dict:
remote_agent = {
- u'hostname': server_name,
- u'hostaddr': server_addr,
- u'port': selected_session[u'port'],
+ 'hostname': server_name,
+ 'hostaddr': server_addr,
+ 'port': selected_session['port'],
}
if not pubkey:
@@ -1727,8 +1728,9 @@ class X2GoBroker(object):
try:
if script:
my_script=None
- exec("import x2gobroker.optional_scripts.{script}_script".format(script=script))
- exec("my_script = x2gobroker.optional_scripts.{script}_script.X2GoBrokerOptionalScript()".format(script=script))
+ namespace = {}
+ exec("import x2gobroker.optional_scripts.{script}_script\nmy_script = x2gobroker.optional_scripts.{script}_script.X2GoBrokerOptionalScript()".format(script=script), namespace)
+ my_script = namespace['my_script']
logger_broker.debug ('Calling {script_type} {script} with username: {username}, password: {password}, task: {task}, profile_id: {profile_id}, ip: {ip}, cookie: {cookie}, authed: {authed}, server: {server}'.format(script_type=script_type,script=script,username=username, password='XXXXX', task=task, profile_id=profile_id, ip=ip, cookie=cookie, authed=authed, server=server))
username, password, task, profile_id, ip, cookie, authed, server = my_script.run_me(username=username, password=password, task=task, profile_id=profile_id, ip=ip, cookie=cookie, authed=authed, server=server)
logger_broker.debug ('Finished {script_type} {script} with username: {username}, password: {password}, task: {task}, profile_id: {profile_id}, ip: {ip}, cookie: {cookie}, authed: {authed}, server: {server}'.format(script_type=script_type,script=script,username=username, password='XXXXX', task=task, profile_id=profile_id, ip=ip, cookie=cookie, authed=authed, server=server))
diff --git a/x2gobroker/brokers/inifile_broker.py b/x2gobroker/brokers/inifile_broker.py
index c2d3c5f..04f83c5 100644
--- a/x2gobroker/brokers/inifile_broker.py
+++ b/x2gobroker/brokers/inifile_broker.py
@@ -29,12 +29,12 @@ import netaddr
import re
# Python X2GoBroker modules
-import base_broker as base
+import x2gobroker.brokers.base_broker as base
import x2gobroker.config
import x2gobroker.defaults
import x2gobroker.x2gobroker_exceptions
-from ConfigParser import NoSectionError
+from configparser import NoSectionError
class X2GoBroker(base.X2GoBroker):
@@ -61,7 +61,7 @@ class X2GoBroker(base.X2GoBroker):
def get_profile_defaults(self):
profile_defaults = self.session_profiles.get_defaults()
- for key in profile_defaults.keys():
+ for key in list(profile_defaults.keys()):
if key.startswith('acl-'):
del profile_defaults[key]
return profile_defaults
@@ -74,10 +74,10 @@ class X2GoBroker(base.X2GoBroker):
raise x2gobroker.x2gobroker_exceptions.X2GoBrokerProfileException('No such session profile ID: {profile_id}'.format(profile_id=profile_id))
profile_defaults = self.get_profile_defaults()
- for key in profile_defaults.keys():
- if key not in profile.keys():
+ for key in list(profile_defaults.keys()):
+ if key not in list(profile.keys()):
profile.update({ key: profile_defaults[key] })
- for key in profile.keys():
+ for key in list(profile.keys()):
if key.startswith('acl-'):
del profile[key]
if key.startswith('broker-'):
@@ -113,7 +113,7 @@ class X2GoBroker(base.X2GoBroker):
def get_profile_broker(self, profile_id):
profile = self.session_profiles.get_section(profile_id)
- for key in profile.keys():
+ for key in list(profile.keys()):
if not key.startswith('broker-'):
del profile[key]
if key.startswith('broker-') and (profile[key] == '' or profile[key] == ['']):
@@ -123,7 +123,7 @@ class X2GoBroker(base.X2GoBroker):
def get_profile_acls(self, profile_id):
profile = self.session_profiles.get_section(profile_id)
- for key in profile.keys():
+ for key in list(profile.keys()):
if not key.startswith('acl-'):
del profile[key]
if key.startswith('acl-') and (profile[key] == '' or profile[key] == ['']):
diff --git a/x2gobroker/brokers/zeroconf_broker.py b/x2gobroker/brokers/zeroconf_broker.py
index f84a78e..1fa8293 100644
--- a/x2gobroker/brokers/zeroconf_broker.py
+++ b/x2gobroker/brokers/zeroconf_broker.py
@@ -27,7 +27,7 @@ __NAME__ = 'x2gobroker-pylib'
import uuid
# Python X2GoBroker modules
-import base_broker as base
+import x2gobroker.brokers.base_broker as base
class X2GoBroker(base.X2GoBroker):
@@ -37,44 +37,44 @@ class X2GoBroker(base.X2GoBroker):
_list_of_profiles = {
uuid.uuid4(): {
- u'user': u'',
- u'defsndport': True,
- u'useiconv': False,
- u'iconvfrom': u'UTF-8',
- u'height': 600,
- u'export': u'',
- u'quality': 9,
- u'fullscreen': False,
- u'layout': u'',
- u'useexports': 1,
- u'width': 800,
- u'speed': 2,
- u'soundsystem': u'pulse',
- u'print': True,
- u'type': u'auto',
- u'sndport': 4713,
- u'xinerama': True,
- u'variant': u'',
- u'usekbd': True,
- u'fstunnel': True,
- u'applications': [u'TERMINAL',u'WWWBROWSER',u'MAILCLIENT',u'OFFICE',],
- u'host': u'localhost',
- u'multidisp': 0,
- u'sshproxyport': 22,
- u'sound': True,
- u'rootless': 0,
- u'name': u'LOCALHOST',
- u'iconvto': u'UTF-8',
- u'soundtunnel': True,
- u'command': self.get_backend_value('broker_{backend}'.format(backend=self.backend_name), u'desktop-shell').upper(),
- u'dpi': 96,
- u'sshport': 22,
- u'setdpi': 0,
- u'pack': u'16m-jpeg',
+ 'user': '',
+ 'defsndport': True,
+ 'useiconv': False,
+ 'iconvfrom': 'UTF-8',
+ 'height': 600,
+ 'export': '',
+ 'quality': 9,
+ 'fullscreen': False,
+ 'layout': '',
+ 'useexports': 1,
+ 'width': 800,
+ 'speed': 2,
+ 'soundsystem': 'pulse',
+ 'print': True,
+ 'type': 'auto',
+ 'sndport': 4713,
+ 'xinerama': True,
+ 'variant': '',
+ 'usekbd': True,
+ 'fstunnel': True,
+ 'applications': ['TERMINAL','WWWBROWSER','MAILCLIENT','OFFICE',],
+ 'host': 'localhost',
+ 'multidisp': 0,
+ 'sshproxyport': 22,
+ 'sound': True,
+ 'rootless': 0,
+ 'name': 'LOCALHOST',
+ 'iconvto': 'UTF-8',
+ 'soundtunnel': True,
+ 'command': self.get_backend_value('broker_{backend}'.format(backend=self.backend_name), 'desktop-shell').upper(),
+ 'dpi': 96,
+ 'sshport': 22,
+ 'setdpi': 0,
+ 'pack': '16m-jpeg',
},
}
list_of_profiles = {}
- for profile_id in _list_of_profiles.keys():
+ for profile_id in list(_list_of_profiles.keys()):
profile = self.get_profile_defaults()
profile.update(_list_of_profiles[profile_id])
list_of_profiles[profile_id] = profile
diff --git a/x2gobroker/client/plain.py b/x2gobroker/client/plain.py
index aa68bd1..4f7cac8 100644
--- a/x2gobroker/client/plain.py
+++ b/x2gobroker/client/plain.py
@@ -20,7 +20,6 @@
# modules
import os
-import types
# Python X2Go Broker modules
import x2gobroker.defaults
@@ -42,14 +41,15 @@ class X2GoBrokerClient(object):
broker_backend = None
try:
# dynamically detect broker backend from given backend
- exec("import x2gobroker.brokers.{backend}_broker".format(backend=backend))
- exec("broker_backend = x2gobroker.brokers.{backend}_broker.X2GoBroker()".format(backend=backend))
+ namespace = {}
+ exec("import x2gobroker.brokers.{backend}_broker\nbroker_backend = x2gobroker.brokers.{backend}_broker.X2GoBroker()".format(backend=backend), namespace)
+ broker_backend = namespace['broker_backend']
except ImportError:
logger_broker.error('unknown backend: {backend}'.format(backend=backend))
if broker_backend.is_enabled():
- if os.environ.has_key('SSH_CLIENT'):
+ if 'SSH_CLIENT' in os.environ:
ip = os.environ['SSH_CLIENT'].split()[0]
else:
ip = '127.0.0.1'
@@ -101,19 +101,19 @@ class X2GoBrokerClient(object):
profiles = broker_backend.list_profiles(username)
if profiles:
output += "START_USER_SESSIONS\n\n"
- profile_ids = profiles.keys()
+ profile_ids = list(profiles.keys())
profile_ids.sort()
for profile_id in profile_ids:
output += "[{profile_id}]\n".format(profile_id=profile_id)
- for key in profiles[profile_id].keys():
- if key == u'user' and not profiles[profile_id][key]:
+ for key in list(profiles[profile_id].keys()):
+ if key == 'user' and not profiles[profile_id][key]:
profiles[profile_id][key] = username
- if type(profiles[profile_id][key]) in (types.UnicodeType, types.StringType):
- output += "{key}={value}".format(key=key, value=unicode(profiles[profile_id][key]))
- elif type(profiles[profile_id][key]) in (types.ListType, types.TupleType):
- output += "{key}={value}".format(key=key, value=unicode(",".join(profiles[profile_id][key])))
+ if type(profiles[profile_id][key]) == str:
+ output += "{key}={value}".format(key=key, value=profiles[profile_id][key])
+ elif type(profiles[profile_id][key]) in (list, tuple):
+ output += "{key}={value}".format(key=key, value=",".join(profiles[profile_id][key]))
else:
- output += "{key}={value}".format(key=key, value=unicode(int(profiles[profile_id][key])))
+ output += "{key}={value}".format(key=key, value=int(profiles[profile_id][key]))
output += "\n"
output += "\n"
@@ -128,15 +128,15 @@ class X2GoBrokerClient(object):
username, password, task, profile_id, ip, cookie, authed, server = broker_backend.run_optional_script(script_type='select_session_scripts', username=username, password="SSH", task=task, profile_id=profile_id, ip=ip, cookie=cookie, authed=access, server=profile_info['server'])
- if profile_info.has_key('server'):
+ if 'server' in profile_info:
output += "SERVER:"
output += profile_info['server']
- if profile_info.has_key('port'):
+ if 'port' in profile_info:
output += ":{port}".format(port=profile_info['port'])
output += "\n"
- if profile_info.has_key('authentication_privkey'):
+ if 'authentication_privkey' in profile_info:
output += profile_info['authentication_privkey']
- if profile_info.has_key('session_info'):
+ if 'session_info' in profile_info:
output += "SESSION_INFO:"
output += profile_info['session_info'] + "\n"
diff --git a/x2gobroker/config.py b/x2gobroker/config.py
index 94bbd75..772f668 100644
--- a/x2gobroker/config.py
+++ b/x2gobroker/config.py
@@ -29,9 +29,8 @@ __NAME__ = 'x2goinifiles-pylib'
# modules
import os
-import ConfigParser
-import types
-import cStringIO
+import configparser
+import io
# Python X2GoBroker modules
import x2gobroker.utils
@@ -70,18 +69,18 @@ class X2GoBrokerConfigFile(object):
"""
# allow string/unicode objects as config_files, as well
- if type(config_files) in (types.StringType, types.UnicodeType):
+ if type(config_files) == str:
config_files = [config_files]
self.config_files = config_files
if x2gobroker.utils._checkConfigFileDefaults(defaults):
self.defaultValues = defaults
- # we purposefully do not inherit the C{ConfigParser} class
+ # we purposefully do not inherit the RawConfigParser class
# here as we do not want to run into name conflicts between
# X2GoBroker config file options and method / property names in
- # C{ConfigParser}... This is a pre-cautious approach...
- self.iniConfig = ConfigParser.ConfigParser(self.defaultValues)
+ # RawConfigParser... This is a pre-cautious approach...
+ self.iniConfig = configparser.RawConfigParser(self.defaultValues)
self.iniConfig.optionxform = str
_create_file = False
@@ -126,7 +125,7 @@ class X2GoBrokerConfigFile(object):
"""\
Stores a value for a given section and key.
- This methods affects a ConfigParser object held in
+ This methods affects a C{RawConfigParser} object held in
RAM. No configuration file is affected by this
method. To write the configuration to disk use
the L{write()} method.
@@ -139,27 +138,28 @@ class X2GoBrokerConfigFile(object):
@type value: C{str}, C{list}, C{booAl}, ...
"""
- if type(value) == type(u''):
- value = value.encode(x2gobroker.utils.get_encoding())
- if type(value) is types.BooleanType:
+ print((type (value)))
+ if type(value) is bool:
self.iniConfig.set(section, key, str(int(value)))
- elif type(value) in (types.ListType, types.TupleType):
+ elif type(value) in (list, tuple):
self.iniConfig.set(section, key, ", ".join(value))
- else:
+ elif type(value) is int:
self.iniConfig.set(section, key, str(value))
+ else:
+ self.iniConfig.set(section, key, value)
def _fill_defaults(self):
"""\
- Fills a C{ConfigParser} object with the default config file
- values as pre-defined in Python X2GoBroker or. This ConfigParser
+ Fills a C{RawConfigParser} object with the default config file
+ values as pre-defined in Python X2GoBroker or. This RawConfigParser
object is held in RAM. No configuration file is affected by this
method.
"""
- for section, sectiondict in self.defaultValues.items():
+ for section, sectiondict in list(self.defaultValues.items()):
if section != 'DEFAULT' and not self.iniConfig.has_section(section):
self.iniConfig.add_section(section)
- for key, value in sectiondict.items():
+ for key, value in list(sectiondict.items()):
if self.iniConfig.has_option(section, key): continue
self._storeValue(section, key, value)
@@ -183,14 +183,14 @@ class X2GoBrokerConfigFile(object):
def write(self):
"""\
- Write the ini file modifications (ConfigParser object) from RAM to disk.
+ Write the ini file modifications (RawConfigParser object) from RAM to disk.
For writing the first of the C{config_files} specified on instance construction
that is writable will be used.
"""
if self.user_config_file and self.write_user_config:
- fd = open(self.user_config_file, 'wb')
+ fd = open(self.user_config_file, 'w')
self.iniConfig.write(fd)
fd.close()
self.write_user_config = False
@@ -209,13 +209,13 @@ class X2GoBrokerConfigFile(object):
@rtype: class
"""
- if section in self.defaultValues.keys() and key in self.defaultValues[section].keys():
+ if section in list(self.defaultValues.keys()) and key in list(self.defaultValues[section].keys()):
return type(self.defaultValues[section][key])
else:
try:
return type(self.defaultValues['DEFAULT'][key])
except KeyError:
- return type(u'')
+ return type('')
def has_value(self, section, key):
"""\
@@ -257,20 +257,20 @@ class X2GoBrokerConfigFile(object):
return self.iniConfig.get(section, key)
- if key_type is types.BooleanType:
+ if key_type is bool:
return self.iniConfig.getboolean(section, key)
- elif key_type is types.IntType:
+ elif key_type is int:
try:
return self.iniConfig.getint(section, key)
except ValueError:
_val = self.iniConfig.get(section, key)
- if _val != u"not-set": raise
+ if _val != "not-set": raise
else: return _val
- elif key_type is types.ListType:
+ elif key_type is list:
_val = self.iniConfig.get(section, key)
_val = _val.strip()
@@ -298,13 +298,13 @@ class X2GoBrokerConfigFile(object):
"""
_my_defaults = {}
_ini_defaults = self.iniConfig.defaults()
- for option in _ini_defaults.keys():
+ for option in list(_ini_defaults.keys()):
try:
- _my_defaults[unicode(option)] = self.get('DEFAULT', option, key_type=self.get_type('DEFAULT', option))
+ _my_defaults[option] = self.get('DEFAULT', option, key_type=self.get_type('DEFAULT', option))
except KeyError:
continue
- try: del _my_defaults[u'default']
+ try: del _my_defaults['default']
except KeyError: pass
return _my_defaults
@@ -324,7 +324,7 @@ class X2GoBrokerConfigFile(object):
_section_config = {}
for option in self.iniConfig.options(section):
if option not in self.iniConfig.sections():
- _section_config[unicode(option)] = self.get(section, option, key_type=self.get_type(section, option))
+ _section_config[option] = self.get(section, option, key_type=self.get_type(section, option))
return _section_config
@@ -336,7 +336,7 @@ class X2GoBrokerConfigFile(object):
@rtype: C{list}
"""
- return [ unicode(s) for s in self.iniConfig.sections() ]
+ return [ s for s in self.iniConfig.sections() ]
@property
def printable_config_file(self):
@@ -344,7 +344,7 @@ class X2GoBrokerConfigFile(object):
Returns a printable configuration file as a multi-line string.
"""
- stdout = cStringIO.StringIO()
+ stdout = io.StringIO()
self.iniConfig.write(stdout)
_ret_val = stdout.getvalue()
stdout.close()
diff --git a/x2gobroker/defaults.py b/x2gobroker/defaults.py
index 0e55ee1..9ed7abf 100644
--- a/x2gobroker/defaults.py
+++ b/x2gobroker/defaults.py
@@ -24,16 +24,16 @@ import socket
import pwd, grp
import logging
-from loggers import logger_broker, logger_access, logger_error, X2GOBROKER_DAEMON_USER
-from loggers import iniconfig_loaded
+from x2gobroker.loggers import logger_broker, logger_access, logger_error, X2GOBROKER_DAEMON_USER
+from x2gobroker.loggers import iniconfig_loaded
if iniconfig_loaded:
- from loggers import iniconfig, iniconfig_section
+ from x2gobroker.loggers import iniconfig, iniconfig_section
X2GOBROKER_USER = pwd.getpwuid(os.geteuid())[0]
X2GOBROKER_GROUP = grp.getgrgid(pwd.getpwuid(os.geteuid())[3])[0]
os.environ['HOME'] = pwd.getpwuid(os.geteuid())[5]
-if os.environ.has_key('X2GOBROKER_DAEMON_GROUP'):
+if 'X2GOBROKER_DAEMON_GROUP' in os.environ:
X2GOBROKER_DAEMON_GROUP=os.environ['X2GOBROKER_DAEMON_GROUP']
elif iniconfig_loaded and iniconfig.has_option(iniconfig_section, 'X2GOBROKER_DAEMON_GROUP'):
X2GOBROKER_DAEMON_GROUP=iniconfig.get(iniconfig_section, 'X2GOBROKER_DAEMON_GROUP')
@@ -41,7 +41,7 @@ elif iniconfig_loaded and iniconfig.has_option('common', 'X2GOBROKER_DAEMON_GROU
X2GOBROKER_DAEMON_GROUP=iniconfig.get('common', 'X2GOBROKER_DAEMON_GROUP')
else:
X2GOBROKER_DAEMON_GROUP="x2gobroker"
-if os.environ.has_key('X2GOBROKER_AGENT_USER'):
+if 'X2GOBROKER_AGENT_USER' in os.environ:
X2GOBROKER_AGENT_USER=os.environ['X2GOBROKER_AGENT_USER']
elif iniconfig_loaded and iniconfig.has_option(iniconfig_section, 'X2GOBROKER_AGENT_USER'):
X2GOBROKER_AGENT_USER=iniconfig.get(iniconfig_section, 'X2GOBROKER_AGENT_USER')
@@ -54,7 +54,7 @@ else:
### dynamic default values, influencable through os.environ...
###
-if os.environ.has_key('X2GOBROKER_DEBUG'):
+if 'X2GOBROKER_DEBUG' in os.environ:
X2GOBROKER_DEBUG = ( os.environ['X2GOBROKER_DEBUG'].lower() in ('1', 'on', 'true', 'yes', ) )
elif iniconfig_loaded and iniconfig.has_option(iniconfig_section, 'X2GOBROKER_DEBUG'):
X2GOBROKER_DEBUG=iniconfig.get(iniconfig_section, 'X2GOBROKER_DEBUG')
@@ -62,7 +62,7 @@ elif iniconfig_loaded and iniconfig.has_option('common', 'X2GOBROKER_DEBUG'):
X2GOBROKER_DEBUG=iniconfig.get('common', 'X2GOBROKER_DEBUG')
else:
X2GOBROKER_DEBUG = False
-if os.environ.has_key('X2GOBROKER_DEBUG_INTERACTIVELY'):
+if 'X2GOBROKER_DEBUG_INTERACTIVELY' in os.environ:
X2GOBROKER_DEBUG_INTERACTIVELY = ( os.environ['X2GOBROKER_DEBUG_INTERACTIVELY'].lower() in ('1', 'on', 'true', 'yes', ) )
elif iniconfig_loaded and iniconfig.has_option(iniconfig_section, 'X2GOBROKER_DEBUG_INTERACTIVELY'):
X2GOBROKER_DEBUG_INTERACTIVELY=iniconfig.get(iniconfig_section, 'X2GOBROKER_DEBUG_INTERACTIVELY')
@@ -70,7 +70,7 @@ elif iniconfig_loaded and iniconfig.has_option('common', 'X2GOBROKER_DEBUG_INTER
X2GOBROKER_DEBUG_INTERACTIVELY=iniconfig.get('common', 'X2GOBROKER_DEBUG_INTERACTIVELY')
else:
X2GOBROKER_DEBUG_INTERACTIVELY = False
-if os.environ.has_key('X2GOBROKER_TESTSUITE'):
+if 'X2GOBROKER_TESTSUITE' in os.environ:
X2GOBROKER_TESTSUITE = ( os.environ['X2GOBROKER_TESTSUITE'].lower() in ('1', 'on', 'true', 'yes', ) )
elif iniconfig_loaded and iniconfig.has_option(iniconfig_section, 'X2GOBROKER_TESTSUITE'):
X2GOBROKER_TESTSUITE=iniconfig.get(iniconfig_section, 'X2GOBROKER_TESTSUITE')
@@ -89,7 +89,7 @@ if X2GOBROKER_TESTSUITE:
logger_access.setLevel(logging.CRITICAL)
logger_error.setLevel(logging.CRITICAL)
-if os.environ.has_key('X2GOBROKER_CONFIG'):
+if 'X2GOBROKER_CONFIG' in os.environ:
X2GOBROKER_CONFIG = os.environ['X2GOBROKER_CONFIG']
elif iniconfig_loaded and iniconfig.has_option(iniconfig_section, 'X2GOBROKER_CONFIG'):
X2GOBROKER_CONFIG=iniconfig.get(iniconfig_section, 'X2GOBROKER_CONFIG')
@@ -98,7 +98,7 @@ elif iniconfig_loaded and iniconfig.has_option('common', 'X2GOBROKER_CONFIG'):
else:
X2GOBROKER_CONFIG = "/etc/x2go/x2gobroker.conf"
-if os.environ.has_key('X2GOBROKER_SESSIONPROFILES'):
+if 'X2GOBROKER_SESSIONPROFILES' in os.environ:
X2GOBROKER_SESSIONPROFILES = os.environ['X2GOBROKER_SESSIONPROFILES']
elif iniconfig_loaded and iniconfig.has_option(iniconfig_section, 'X2GOBROKER_SESSIONPROFILES'):
X2GOBROKER_SESSIONPROFILES=iniconfig.get(iniconfig_section, 'X2GOBROKER_SESSIONPROFILES')
@@ -107,7 +107,7 @@ elif iniconfig_loaded and iniconfig.has_option('common', 'X2GOBROKER_SESSIONPROF
else:
X2GOBROKER_SESSIONPROFILES = "/etc/x2go/broker/x2gobroker-sessionprofiles.conf"
-if os.environ.has_key('X2GOBROKER_AGENT_CMD'):
+if 'X2GOBROKER_AGENT_CMD' in os.environ:
X2GOBROKER_AGENT_CMD = os.environ['X2GOBROKER_AGENT_CMD']
elif iniconfig_loaded and iniconfig.has_option(iniconfig_section, 'X2GOBROKER_AGENT_CMD'):
X2GOBROKER_AGENT_CMD=iniconfig.get(iniconfig_section, 'X2GOBROKER_AGENT_CMD')
@@ -116,7 +116,7 @@ elif iniconfig_loaded and iniconfig.has_option('common', 'X2GOBROKER_AGENT_CMD')
else:
X2GOBROKER_AGENT_CMD = "/usr/lib/x2go/x2gobroker-agent"
-if os.environ.has_key('X2GOBROKER_AUTHSERVICE_SOCKET'):
+if 'X2GOBROKER_AUTHSERVICE_SOCKET' in os.environ:
X2GOBROKER_AUTHSERVICE_SOCKET=os.environ['X2GOBROKER_AUTHSERVICE_SOCKET']
elif iniconfig_loaded and iniconfig.has_option(iniconfig_section, 'X2GOBROKER_AUTHSERVICE_SOCKET'):
X2GOBROKER_AUTHSERVICE_SOCKET=iniconfig.get(iniconfig_section, 'X2GOBROKER_AUTHSERVICE_SOCKET')
@@ -129,7 +129,7 @@ else:
RUNDIR = '/var/run/x2gobroker'
X2GOBROKER_AUTHSERVICE_SOCKET="{run}/x2gobroker/x2gobroker-authservice.socket".format(run=RUNDIR)
-if os.environ.has_key('X2GOBROKER_LOADCHECKER_SOCKET'):
+if 'X2GOBROKER_LOADCHECKER_SOCKET' in os.environ:
X2GOBROKER_LOADCHECKER_SOCKET=os.environ['X2GOBROKER_LOADCHECKER_SOCKET']
elif iniconfig_loaded and iniconfig.has_option(iniconfig_section, 'X2GOBROKER_LOADCHECKER_SOCKET'):
X2GOBROKER_LOADCHECKER_SOCKET=iniconfig.get(iniconfig_section, 'X2GOBROKER_LOADCHECKER_SOCKET')
@@ -142,7 +142,7 @@ else:
RUNDIR = '/var/run/x2gobroker'
X2GOBROKER_LOADCHECKER_SOCKET="{run}/x2gobroker/x2gobroker-loadchecker.socket".format(run=RUNDIR)
-if os.environ.has_key('X2GOBROKER_DEFAULT_BACKEND'):
+if 'X2GOBROKER_DEFAULT_BACKEND' in os.environ:
X2GOBROKER_DEFAULT_BACKEND = os.environ['X2GOBROKER_DEFAULT_BACKEND']
elif iniconfig_loaded and iniconfig.has_option(iniconfig_section, 'X2GOBROKER_DEFAULT_BACKEND'):
X2GOBROKER_DEFAULT_BACKEND=iniconfig.get(iniconfig_section, 'X2GOBROKER_DEFAULT_BACKEND')
@@ -151,7 +151,7 @@ elif iniconfig_loaded and iniconfig.has_option('common', 'X2GOBROKER_DEFAULT_BAC
else:
X2GOBROKER_DEFAULT_BACKEND = "inifile"
-if os.environ.has_key('DAEMON_BIND_ADDRESS'):
+if 'DAEMON_BIND_ADDRESS' in os.environ:
DAEMON_BIND_ADDRESS = os.environ['DAEMON_BIND_ADDRESS']
elif iniconfig_loaded and iniconfig.has_option(iniconfig_section, 'DAEMON_BIND_ADDRESS'):
DAEMON_BIND_ADDRESS = iniconfig.get(iniconfig_section, 'DAEMON_BIND_ADDRESS')
@@ -160,7 +160,7 @@ elif iniconfig_loaded and iniconfig.has_option('daemon', 'DAEMON_BIND_ADDRESS'):
else:
DAEMON_BIND_ADDRESS = ""
-if os.environ.has_key('X2GOBROKER_SSL_CERTFILE'):
+if 'X2GOBROKER_SSL_CERTFILE' in os.environ:
X2GOBROKER_SSL_CERTFILE = os.environ['X2GOBROKER_SSL_CERTFILE']
elif iniconfig_loaded and iniconfig.has_option(iniconfig_section, 'X2GOBROKER_SSL_CERTFILE'):
X2GOBROKER_SSL_CERTFILE = iniconfig.get(iniconfig_section, 'X2GOBROKER_SSL_CERTFILE')
@@ -169,7 +169,7 @@ elif iniconfig_loaded and iniconfig.has_option('daemon', 'X2GOBROKER_SSL_CERTFIL
else:
X2GOBROKER_SSL_CERTFILE = ""
-if os.environ.has_key('X2GOBROKER_SSL_KEYFILE'):
+if 'X2GOBROKER_SSL_KEYFILE' in os.environ:
X2GOBROKER_SSL_KEYFILE = os.environ['X2GOBROKER_SSL_KEYFILE']
elif iniconfig_loaded and iniconfig.has_option(iniconfig_section, 'X2GOBROKER_SSL_KEYFILE'):
X2GOBROKER_SSL_KEYFILE = iniconfig.get(iniconfig_section, 'X2GOBROKER_SSL_KEYFILE')
@@ -195,67 +195,67 @@ X2GOBROKER_CONFIG_DEFAULTS = {
'global': {
# legacy support for X2Go Session Broker << 0.0.3.0
# the check-credentials parameter has been slit up into the two params above
- u'check-credentials': True,
+ 'check-credentials': True,
# use these two instead of check-credentials...
- u'require-password': True,
- u'require-cookie': False,
- u'use-static-cookie': False,
- u'auth-timeout': 36000,
- u'cookie-directory': '/var/lib/x2gobroker/cookies',
- u'verify-ip': True,
- u'pre_auth_scripts': [],
- u'post_auth_scripts': [],
- u'select_session_scripts': [],
- u'my-cookie': uuid.uuid4(),
- u'my-cookie-file': '/etc/x2go/broker/x2gobroker.authid',
- u'enable-plain-output': True,
- u'enable-json-output': True,
- u'enable-uccs-output': False,
- u'my-uccs-url-base': 'http://localhost:8080/',
- u'default-auth-mech': u'pam',
- u'default-user-db': u'libnss',
- u'default-group-db': u'libnss',
- u'ignore-primary-group-memberships': True,
- u'default-session-autologin': False,
- u'default-authorized-keys': u'%h/.x2go/authorized_keys',
- u'default-sshproxy-authorized-keys': u'%h/.x2go/authorized_keys',
- u'default-agent-query-mode': u'NONE',
- u'default-portscan-x2goservers': True,
- u'default-use-load-checker': False,
- u'load-checker-intervals': 300,
+ 'require-password': True,
+ 'require-cookie': False,
+ 'use-static-cookie': False,
+ 'auth-timeout': 36000,
+ 'cookie-directory': '/var/lib/x2gobroker/cookies',
+ 'verify-ip': True,
+ 'pre_auth_scripts': [],
+ 'post_auth_scripts': [],
+ 'select_session_scripts': [],
+ 'my-cookie': uuid.uuid4(),
+ 'my-cookie-file': '/etc/x2go/broker/x2gobroker.authid',
+ 'enable-plain-output': True,
+ 'enable-json-output': True,
+ 'enable-uccs-output': False,
+ 'my-uccs-url-base': 'http://localhost:8080/',
+ 'default-auth-mech': 'pam',
+ 'default-user-db': 'libnss',
+ 'default-group-db': 'libnss',
+ 'ignore-primary-group-memberships': True,
+ 'default-session-autologin': False,
+ 'default-authorized-keys': '%h/.x2go/authorized_keys',
+ 'default-sshproxy-authorized-keys': '%h/.x2go/authorized_keys',
+ 'default-agent-query-mode': 'NONE',
+ 'default-portscan-x2goservers': True,
+ 'default-use-load-checker': False,
+ 'load-checker-intervals': 300,
},
'broker_base': {
- u'enable': False,
+ 'enable': False,
},
'broker_zeroconf': {
- u'enable': False,
- u'auth-mech': u'pam',
- u'user-db': u'libnss',
- u'group-db': u'libnss',
- u'desktop-shell': u'KDE',
- u'load-checker': False,
+ 'enable': False,
+ 'auth-mech': 'pam',
+ 'user-db': 'libnss',
+ 'group-db': 'libnss',
+ 'desktop-shell': 'KDE',
+ 'load-checker': False,
},
'broker_inifile': {
- u'enable': True,
- u'session-profiles': u'/etc/x2go/broker/x2gobroker-sessionprofiles.conf',
- u'auth-mech': u'',
- u'user-db': u'',
- u'group-db': u'',
- u'use-load-checker': True,
+ 'enable': True,
+ 'session-profiles': '/etc/x2go/broker/x2gobroker-sessionprofiles.conf',
+ 'auth-mech': '',
+ 'user-db': '',
+ 'group-db': '',
+ 'use-load-checker': True,
},
'broker_ldap': {
- u'enable': False,
- u'auth-mech': u'ldap',
- u'user-db': u'ldap',
- u'group-db': u'ldap',
- u'uri': u'ldap://localhost:389',
- u'base': u'dc=example,dc=org',
- u'user-search-filter': u'(&(objectClass=posixAccount)(uid=*))',
- u'host-search-filter': u'(&(objectClass=ipHost)(serial=X2GoServer)(cn=*))',
- u'group-search-filter': u'(&(objectClass=posifxGroup)(cn=*))',
- u'starttls': False,
- u'agent-query-mode': u'SSH',
- u'load-checker': True,
+ 'enable': False,
+ 'auth-mech': 'ldap',
+ 'user-db': 'ldap',
+ 'group-db': 'ldap',
+ 'uri': 'ldap://localhost:389',
+ 'base': 'dc=example,dc=org',
+ 'user-search-filter': '(&(objectClass=posixAccount)(uid=*))',
+ 'host-search-filter': '(&(objectClass=ipHost)(serial=X2GoServer)(cn=*))',
+ 'group-search-filter': '(&(objectClass=posifxGroup)(cn=*))',
+ 'starttls': False,
+ 'agent-query-mode': 'SSH',
+ 'load-checker': True,
},
}
@@ -276,50 +276,50 @@ X2GO_DESKTOP_SESSIONS= [
# defaults for X2Go Sessino Broker session profiles file
X2GOBROKER_SESSIONPROFILE_DEFAULTS = {
- u'DEFAULT': {
- u'command': u'TERMINAL',
- u'defsndport': True,
- u'useiconv': False,
- u'iconvfrom': u'UTF-8',
- u'height': 600,
- u'export': u'',
- u'quality': 9,
- u'fullscreen': False,
- u'layout': u'',
- u'useexports': True,
- u'width': 800,
- u'speed': 2,
- u'soundsystem': u'pulse',
- u'print': True,
- u'type': u'auto',
- u'sndport': 4713,
- u'xinerama': True,
- u'variant': u'',
- u'usekbd': True,
- u'fstunnel': True,
- u'applications': [u'TERMINAL',u'WWWBROWSER',u'MAILCLIENT',u'OFFICE'],
- u'multidisp': False,
- u'sshproxyport': 22,
- u'sound': True,
- u'rootless': True,
- u'iconvto': u'UTF-8',
- u'soundtunnel': True,
- u'dpi': 96,
- u'sshport': 22,
- u'setdpi': 0,
- u'pack': u'16m-jpeg',
- u'user': 'BROKER_USER',
- u'host': [ u'localhost', ],
- u'directrdp': False,
- u'acl-users-allow': [],
- u'acl-users-deny': [],
- u'acl-users-order': '',
- u'acl-groups-allow': [],
- u'acl-groups-deny': [],
- u'acl-groups-order': '',
- u'acl-clients-allow': [],
- u'acl-clients-deny': [],
- u'acl-clients-order': '',
- u'acl-any-order': u'deny-allow',
+ 'DEFAULT': {
+ 'command': 'TERMINAL',
+ 'defsndport': True,
+ 'useiconv': False,
+ 'iconvfrom': 'UTF-8',
+ 'height': 600,
+ 'export': '',
+ 'quality': 9,
+ 'fullscreen': False,
+ 'layout': '',
+ 'useexports': True,
+ 'width': 800,
+ 'speed': 2,
+ 'soundsystem': 'pulse',
+ 'print': True,
+ 'type': 'auto',
+ 'sndport': 4713,
+ 'xinerama': True,
+ 'variant': '',
+ 'usekbd': True,
+ 'fstunnel': True,
+ 'applications': ['TERMINAL','WWWBROWSER','MAILCLIENT','OFFICE'],
+ 'multidisp': False,
+ 'sshproxyport': 22,
+ 'sound': True,
+ 'rootless': True,
+ 'iconvto': 'UTF-8',
+ 'soundtunnel': True,
+ 'dpi': 96,
+ 'sshport': 22,
+ 'setdpi': 0,
+ 'pack': '16m-jpeg',
+ 'user': 'BROKER_USER',
+ 'host': [ 'localhost', ],
+ 'directrdp': False,
+ 'acl-users-allow': [],
+ 'acl-users-deny': [],
+ 'acl-users-order': '',
+ 'acl-groups-allow': [],
+ 'acl-groups-deny': [],
+ 'acl-groups-order': '',
+ 'acl-clients-allow': [],
+ 'acl-clients-deny': [],
+ 'acl-clients-order': '',
+ 'acl-any-order': 'deny-allow',
},
}
diff --git a/x2gobroker/loadchecker.py b/x2gobroker/loadchecker.py
index c2eea74..b2a68c9 100644
--- a/x2gobroker/loadchecker.py
+++ b/x2gobroker/loadchecker.py
@@ -34,17 +34,17 @@ def check_load(backend, profile_id, hostname=None):
logger_broker.debug('loadchecker.check_load(): connecting to load checker service socket {socket}'.format(socket=x2gobroker.defaults.X2GOBROKER_LOADCHECKER_SOCKET))
try:
s.connect(x2gobroker.defaults.X2GOBROKER_LOADCHECKER_SOCKET)
- except socket.error, e:
+ except socket.error as e:
logger_broker.error('loadchecker.check_load(): failure when connecting to the load checker service socket {socket}: {errmsg}'.format(socket=x2gobroker.defaults.X2GOBROKER_LOADCHECKER_SOCKET, errmsg=str(e)))
if hostname is not None:
load_factor = 'LOAD-UNAVAILABLE'
logger_broker.debug('loadchecker.check_load(): sending backend={backend}, profile_id={profile_id}, hostname={hostname} to load checker service'.format(backend=backend, profile_id=profile_id, hostname=hostname))
try:
- s.send('{backend}\r{profile_id}\r{hostname}\n'.format(backend=backend, profile_id=profile_id, hostname=hostname))
- load_factor = s.recv(1024)
+ s.send('{backend}\r{profile_id}\r{hostname}\n'.format(backend=backend, profile_id=profile_id, hostname=hostname).encode())
+ load_factor = s.recv(1024).decode()
s.close()
- except socket.error, e:
+ except socket.error as e:
logger_broker.error('loadchecker.check_load(): failure when sending data to the load checker service socket {socket}: {errmsg}'.format(socket=x2gobroker.defaults.X2GOBROKER_LOADCHECKER_SOCKET, errmsg=str(e)))
if load_factor.startswith('LOAD-UNAVAILABLE'):
@@ -52,7 +52,7 @@ def check_load(backend, profile_id, hostname=None):
return 'LOAD-UNAVAILABLE'
try:
- load_factor = long(load_factor)
+ load_factor = int(load_factor)
except ValueError:
logger_broker.warning('loadchecker.check_load(): load data for backend={backend}, profile_id={profile_id}, hostname={hostname} contained bogus (»{lf}«)'.format(backend=backend, profile_id=profile_id, hostname=hostname, lf=load_factor))
return 'LOAD-DATA-BOGUS'
@@ -64,10 +64,10 @@ def check_load(backend, profile_id, hostname=None):
raw_output = ""
logger_broker.debug('loadchecker.check_load(): sending backend={backend}, profile_id={profile_id} to load checker service'.format(backend=backend, profile_id=profile_id, hostname=hostname))
try:
- s.send('{backend}\r{profile_id}\r\n'.format(backend=backend, profile_id=profile_id))
- raw_output = s.recv(1024)
+ s.send('{backend}\r{profile_id}\r\n'.format(backend=backend, profile_id=profile_id).encode())
+ raw_output = s.recv(1024).decode()
s.close()
- except socket.error, e:
+ except socket.error as e:
logger_broker.error('loadchecker.check_load(): failure when sending data to the load checker service socket {socket}: {errmsg}'.format(socket=x2gobroker.defaults.X2GOBROKER_LOADCHECKER_SOCKET, errmsg=str(e)))
load_factors = {}
@@ -77,7 +77,7 @@ def check_load(backend, profile_id, hostname=None):
key, val = item.split(':', 1)
try:
if val not in ('HOST-UNREACHABLE', 'LOAD-UNAVAILABLE', 'LOAD-DATA-BOGUS'):
- load_factors[key] = long(val)
+ load_factors[key] = int(val)
else:
load_factors[key] = val
except ValueError:
@@ -176,18 +176,20 @@ class LoadChecker(threading.Thread):
for backend in self.broker_backends:
- if not self.server_load.has_key(backend):
+ if backend not in self.server_load:
self.server_load[backend] = {}
_broker_backend_module = None
- exec("import x2gobroker.brokers.{backend}_broker as _broker_backend_module".format(backend=backend))
+ namespace = {}
+ exec("import x2gobroker.brokers.{backend}_broker as _broker_backend_module".format(backend=backend), namespace)
+ _broker_backend_module = namespace['_broker_backend_module']
self.brokers[backend] = _broker_backend_module.X2GoBroker(config_file=self.config_file, config_defaults=self.config_defaults, **self.kwargs)
profile_ids_to_check = [ id for id in self.brokers[backend].get_profile_ids() if self.brokers[backend].use_load_checker(id) ]
if self.logger: self.logger.debug('LoadChecker.loadchecker(): backend={backend} -> processing profiles: {profile_ids}'.format(backend=backend, profile_ids=profile_ids_to_check))
for profile_id in profile_ids_to_check:
- if not self.server_load[backend].has_key(profile_id):
+ if profile_id not in self.server_load[backend]:
self.server_load[backend][profile_id] = {}
remote_agents = self.brokers[backend].get_all_remote_agents(profile_id)
if self.logger: self.logger.debug('LoadChecker.loadchecker(): querying remote agents for backend={backend}, profile_id={profile_id}: {remote_agents}'.format(backend=backend, profile_id=profile_id, remote_agents=remote_agents))
@@ -195,29 +197,29 @@ class LoadChecker(threading.Thread):
_load_factor = x2gobroker.agent.check_load(remote_agent, logger=self.logger)
num_queries += 1
if _load_factor is None:
- if self.logger: self.logger.info('LoadChecker.loadchecker(): backend={backend}, profile_id={profile_id}, hostname={hostname}, load factor not available'.format(backend=backend, profile_id=profile_id, hostname=remote_agent[u'hostname']))
+ if self.logger: self.logger.info('LoadChecker.loadchecker(): backend={backend}, profile_id={profile_id}, hostname={hostname}, load factor not available'.format(backend=backend, profile_id=profile_id, hostname=remote_agent['hostname']))
num_failed_queries += 1
else:
- if self.logger: self.logger.info('LoadChecker.loadchecker(): contacted remote broker agent for backend={backend}, profile_id={profile_id}, hostname={hostname}, new load factor is: {lf}'.format(backend=backend, profile_id=profile_id, hostname=remote_agent[u'hostname'], lf=_load_factor))
- self.server_load[backend][profile_id][remote_agent[u'hostname']] = _load_factor
+ if self.logger: self.logger.info('LoadChecker.loadchecker(): contacted remote broker agent for backend={backend}, profile_id={profile_id}, hostname={hostname}, new load factor is: {lf}'.format(backend=backend, profile_id=profile_id, hostname=remote_agent['hostname'], lf=_load_factor))
+ self.server_load[backend][profile_id][remote_agent['hostname']] = _load_factor
if time_to_sleep > 0:
if self.logger: self.logger.debug('LoadChecker.loadchecker(): sleeping for {secs}secs before querying next server'.format(secs=time_to_sleep))
time.sleep(time_to_sleep)
# clean up vanished hostnames
- _hostnames = self.server_load[backend][profile_id].keys()
+ _hostnames = list(self.server_load[backend][profile_id].keys())
for hostname in _hostnames:
- if hostname not in [ ra[u'hostname'] for ra in remote_agents ]:
+ if hostname not in [ ra['hostname'] for ra in remote_agents ]:
del self.server_load[backend][profile_id][hostname]
# clean up vanished profile IDs
- _profile_ids = copy.deepcopy(self.server_load[backend].keys())
+ _profile_ids = copy.deepcopy(list(self.server_load[backend].keys()))
for profile_id in _profile_ids:
if profile_id not in profile_ids_to_check:
del self.server_load[backend][profile_id]
# clean up vanished backends
- _backends = copy.deepcopy(self.server_load.keys())
+ _backends = copy.deepcopy(list(self.server_load.keys()))
for backend in _backends:
if backend not in self.broker_backends:
del self.server_load[backend]
diff --git a/x2gobroker/loggers.py b/x2gobroker/loggers.py
index 30af0ff..dd5d67e 100644
--- a/x2gobroker/loggers.py
+++ b/x2gobroker/loggers.py
@@ -22,7 +22,7 @@ import sys
import getpass
import logging
import logging.config
-import ConfigParser
+import configparser
def init_console_loggers():
"""\
@@ -59,12 +59,12 @@ iniconfig_loaded = None
iniconfig_section = '-'.join(PROG_NAME.split('-')[1:])
X2GOBROKER_DEFAULTS = "/etc/x2go/broker/defaults.conf"
if os.path.isfile(X2GOBROKER_DEFAULTS) and os.access(X2GOBROKER_DEFAULTS, os.R_OK):
- iniconfig = ConfigParser.SafeConfigParser()
+ iniconfig = configparser.RawConfigParser()
iniconfig.optionxform = str
iniconfig_loaded = iniconfig.read(X2GOBROKER_DEFAULTS)
# normally this would go into defaults.py, however, we do not want to create a dependency loop between loggers.py and defaults.py...
-if os.environ.has_key('X2GOBROKER_DAEMON_USER'):
+if 'X2GOBROKER_DAEMON_USER' in os.environ:
X2GOBROKER_DAEMON_USER=os.environ['X2GOBROKER_DAEMON_USER']
elif iniconfig_loaded and iniconfig.has_option(iniconfig_section, 'X2GOBROKER_DAEMON_USER'):
X2GOBROKER_DAEMON_USER=iniconfig.get(iniconfig_section, 'X2GOBROKER_DAEMON_USER')
@@ -72,7 +72,7 @@ elif iniconfig_loaded and iniconfig.has_option('common', 'X2GOBROKER_DAEMON_USER
X2GOBROKER_DAEMON_USER=iniconfig.get('common', 'X2GOBROKER_DAEMON_USER')
else:
X2GOBROKER_DAEMON_USER="x2gobroker"
-if os.environ.has_key('X2GOBROKER_LOGCONFIG'):
+if 'X2GOBROKER_LOGCONFIG' in os.environ:
X2GOBROKER_LOGCONFIG=os.environ['X2GOBROKER_LOGCONFIG']
elif iniconfig_loaded and iniconfig.has_option(iniconfig_section, 'X2GOBROKER_LOGCONFIG'):
X2GOBROKER_LOGCONFIG=iniconfig.get(iniconfig_section, 'X2GOBROKER_LOGCONFIG')
diff --git a/x2gobroker/nameservices/base_nameservice.py b/x2gobroker/nameservices/base_nameservice.py
index b055800..cb64c66 100644
--- a/x2gobroker/nameservices/base_nameservice.py
+++ b/x2gobroker/nameservices/base_nameservice.py
@@ -20,23 +20,23 @@
class X2GoBrokerNameService(object):
def has_user(self, username):
- return unicode(username) in self.get_users()
+ return username in self.get_users()
def get_users(self):
return []
def get_primary_group(self, username):
- return u''
+ return ''
def has_group(self, group):
- return unicode(group) in self.get_groups()
+ return group in self.get_groups()
def get_groups(self):
return []
def is_group_member(self, username, group, primary_groups=False):
_members = self.get_group_members(group, primary_groups=primary_groups)
- return unicode(username) in _members
+ return username in _members
def get_group_members(self, group, primary_groups=False):
return []
@@ -45,5 +45,5 @@ class X2GoBrokerNameService(object):
_groups = []
for _group in self.get_groups():
if self.is_group_member(username=username, group=_group, primary_groups=primary_groups):
- _groups.append(unicode(_group))
+ _groups.append(_group)
return _groups
diff --git a/x2gobroker/nameservices/libnss_nameservice.py b/x2gobroker/nameservices/libnss_nameservice.py
index 03e02ab..7e804e4 100644
--- a/x2gobroker/nameservices/libnss_nameservice.py
+++ b/x2gobroker/nameservices/libnss_nameservice.py
@@ -22,7 +22,7 @@ import pwd
import grp
# Python X2GoBroker modules
-import base_nameservice as base
+from . import base_nameservice as base
_pwd = pwd.getpwall()
_grp = grp.getgrall()
@@ -30,20 +30,20 @@ _grp = grp.getgrall()
class X2GoBrokerNameService(base.X2GoBrokerNameService):
def get_users(self):
- return [ unicode(p.pw_name) for p in _pwd ]
+ return [ p.pw_name for p in _pwd ]
def get_primary_group(self, username):
- prim_gid_number = [ p.pw_gid for p in _pwd if unicode(p.pw_name) == unicode(username) ][0]
- return [ unicode(g.gr_name) for g in _grp if g.gr_gid == prim_gid_number ][0]
+ prim_gid_number = [ p.pw_gid for p in _pwd if p.pw_name == username ][0]
+ return [ g.gr_name for g in _grp if g.gr_gid == prim_gid_number ][0]
def get_groups(self):
- return [ unicode(g.gr_name) for g in _grp ]
+ return [ g.gr_name for g in _grp ]
def get_group_members(self, group, primary_groups=False):
_members_from_primgroups = []
if primary_groups:
for username in self.get_users():
- if unicode(group) == self.get_primary_group(username):
- _members_from_primgroups.append(unicode(username))
- return [ unicode(u) for u in grp.getgrnam(group).gr_mem ] + _members_from_primgroups
+ if group == self.get_primary_group(username):
+ _members_from_primgroups.append(username)
+ return [ u for u in grp.getgrnam(group).gr_mem ] + _members_from_primgroups
diff --git a/x2gobroker/nameservices/testsuite_nameservice.py b/x2gobroker/nameservices/testsuite_nameservice.py
index 375960c..57fc992 100644
--- a/x2gobroker/nameservices/testsuite_nameservice.py
+++ b/x2gobroker/nameservices/testsuite_nameservice.py
@@ -18,15 +18,15 @@
# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
# Python X2GoBroker modules
-import base_nameservice as base
+from . import base_nameservice as base
-_users = [ u'maja', u'willi', u'flip', u'kassandra', u'thekla' ]
+_users = [ 'maja', 'willi', 'flip', 'kassandra', 'thekla' ]
_groups = {
- u'male': [u'willi', u'flip'],
- u'female': [u'maja', u'kassandra', u'thekla'],
- u'bees': [u'maja', u'willi', u'kassandra'],
- u'grasshoppers': [u'flip'],
- u'spiders': [u'thekla'],
+ 'male': ['willi', 'flip'],
+ 'female': ['maja', 'kassandra', 'thekla'],
+ 'bees': ['maja', 'willi', 'kassandra'],
+ 'grasshoppers': ['flip'],
+ 'spiders': ['thekla'],
}
@@ -36,18 +36,18 @@ class X2GoBrokerNameService(base.X2GoBrokerNameService):
return _users
def get_primary_group(self, username):
- return unicode(username)
+ return username
def get_groups(self):
- return _groups.keys() + _users
+ return list(_groups.keys()) + _users
def get_group_members(self, group, primary_groups=False):
_members = []
- if group in _groups.keys():
+ if group in list(_groups.keys()):
_members.extend(_groups[group])
if primary_groups:
for username in self.get_users():
- if unicode(group) == self.get_primary_group(username):
+ if group == self.get_primary_group(username):
_members.append(username)
return _members
diff --git a/x2gobroker/tests/test_broker_agent.py b/x2gobroker/tests/test_broker_agent.py
index 5220895..0cb694c 100644
--- a/x2gobroker/tests/test_broker_agent.py
+++ b/x2gobroker/tests/test_broker_agent.py
@@ -127,8 +127,8 @@ sshport = 22000
broker-agent-query-mode = SSH
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _session_profiles
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ print(_session_profiles, file=tf)
tf.seek(0)
inifile_backend = inifile.X2GoBroker(profile_config_file=tf.name)
@@ -138,7 +138,7 @@ broker-agent-query-mode = SSH
_list1 = inifile_backend.list_profiles(username='foo1R')
_profile1 = _list1['testprofile1']
self.assertTrue( ( _profile1['host'] == ['host1'] ) )
- self.assertTrue( ( _profile1.has_key('status') and _profile1['status'] == 'R' ) )
+ self.assertTrue( ( 'status' in _profile1 and _profile1['status'] == 'R' ) )
# here will be a short pause, as we will try to suspend the faked X2Go Session
_session1 = inifile_backend.select_session('testprofile1', username='foo1R')
# the session broker has detected the running session on host 1 and changed its status to "S"
@@ -148,7 +148,7 @@ broker-agent-query-mode = SSH
_list1 = inifile_backend.list_profiles(username='foo1S')
_profile1 = _list1['testprofile1']
self.assertTrue( ( _profile1['host'] == ['host1'] ) )
- self.assertTrue( ( _profile1.has_key('status') and _profile1['status'] == 'S' ) )
+ self.assertTrue( ( 'status' in _profile1 and _profile1['status'] == 'S' ) )
_session1 = inifile_backend.select_session('testprofile1')
self.assertEqual ( _session1, {'port': 22, 'server': 'host1'} )
@@ -156,7 +156,7 @@ broker-agent-query-mode = SSH
_list1 = inifile_backend.list_profiles(username='foo1N')
_profile1 = _list1['testprofile1']
self.assertTrue( ( _profile1['host'] == ['host1'] ) )
- self.assertFalse( ( _profile1.has_key('status') ) )
+ self.assertFalse( ( 'status' in _profile1 ) )
_session1 = inifile_backend.select_session('testprofile1')
self.assertEqual ( _session1, {'port': 22, 'server': 'host1'} )
@@ -168,7 +168,7 @@ broker-agent-query-mode = SSH
_profile2 = _list2['testprofile2']
_profile2['host'].sort()
self.assertTrue( ( _profile2['host'] == ['host2'] ) )
- self.assertTrue( ( _profile2.has_key('status') and _profile2['status'] == 'S' ) )
+ self.assertTrue( ( 'status' in _profile2 and _profile2['status'] == 'S' ) )
_session2 = inifile_backend.select_session('testprofile2', 'foo2RS')
self.assertEqual ( _session2, {'port': 22, 'server': 'host2', 'session_info': '30342|foo2RS-50-1414759789_stDMATE_dp24|50|host2|S|2014-10-31T13:49:51|c02c7bbe58677a2726f7e456cb398ae4|127.0.0.1|30001|30002|2014-10-31T13:49:51|foo2RS|89|30003|-1|-1', } )
@@ -180,7 +180,7 @@ broker-agent-query-mode = SSH
_profile3 = _list3['testprofile3']
_profile3['host'].sort()
self.assertTrue( ( _profile3['host'] == ['host2'] ) )
- self.assertTrue( ( _profile3.has_key('status') and _profile3['status'] == 'S' ) )
+ self.assertTrue( ( 'status' in _profile3 and _profile3['status'] == 'S' ) )
_session3 = inifile_backend.select_session('testprofile3', 'foo3RS')
self.assertEqual ( _session3, {'port': 22, 'server': 'host2.mydomain', 'session_info': '30342|foo3RS-50-1414759789_stDMATE_dp24|50|host2|S|2014-10-31T13:49:51|c02c7bbe58677a2726f7e456cb398ae4|127.0.0.1|30001|30002|2014-10-31T13:49:51|foo3RS|89|30003|-1|-1', } )
_session3 = inifile_backend.select_session('testprofile3', 'foo3RS')
@@ -201,11 +201,11 @@ broker-agent-query-mode = SSH
_profile5 = _list5['testprofile5']
_profile5['host'].sort()
self.assertTrue( _profile5['host'][0] in ('host1.mydomain', 'host2.mydomain') )
- self.assertTrue( not _profile5.has_key('status') )
+ self.assertTrue( 'status' not in _profile5 )
i = 0
while i < 10:
_remoteagent5 = inifile_backend.get_remote_agent('testprofile5')
- self.assertTrue( _remoteagent5 == {u'hostname': 'host1.mydomain', u'hostaddr': '10.0.2.4', u'port': 22, 'load_factors': {}, } or _remoteagent5 == {u'hostname': 'host2.mydomain', u'hostaddr': '10.0.2.5', u'port': 22, 'load_factors': {}, } )
+ self.assertTrue( _remoteagent5 == {'hostname': 'host1.mydomain', 'hostaddr': '10.0.2.4', 'port': 22, 'load_factors': {}, } or _remoteagent5 == {'hostname': 'host2.mydomain', 'hostaddr': '10.0.2.5', 'port': 22, 'load_factors': {}, } )
_session5 = inifile_backend.select_session('testprofile5', 'foo5N')
self.assertTrue( _session5 == {'port': 22, 'server': '10.0.2.4', } or _session5 == {'port': 22, 'server': '10.0.2.5', } )
i += 1
@@ -217,9 +217,9 @@ broker-agent-query-mode = SSH
_profile6 = _list6['testprofile6']
_profile6['host'].sort()
self.assertTrue( _profile6['host'][0] in ('host1.mydomain', 'host2.mydomain') )
- self.assertTrue( not _profile6.has_key('status') )
+ self.assertTrue( 'status' not in _profile6 )
_remoteagent6 = inifile_backend.get_remote_agent('testprofile6')
- self.assertTrue( _remoteagent6 == {u'hostname': 'host1.mydomain', u'hostaddr': '10.0.2.4', u'port': 23467, 'load_factors': {}, } or _remoteagent6 == {u'hostname': 'host2.mydomain', u'hostaddr': '10.0.2.5', u'port': 23467, 'load_factors': {}, } )
+ self.assertTrue( _remoteagent6 == {'hostname': 'host1.mydomain', 'hostaddr': '10.0.2.4', 'port': 23467, 'load_factors': {}, } or _remoteagent6 == {'hostname': 'host2.mydomain', 'hostaddr': '10.0.2.5', 'port': 23467, 'load_factors': {}, } )
_session6 = inifile_backend.select_session('testprofile6', 'foo6N')
self.assertTrue( _session6 == {'port': 23467, 'server': '10.0.2.4', } or _session6 == {'port': 23467, 'server': '10.0.2.5', } )
@@ -227,11 +227,11 @@ broker-agent-query-mode = SSH
_profile7 = _list7['testprofile7']
_profile7['host'].sort()
self.assertTrue( _profile7['host'][0] in ('docker-vm-1', 'docker-vm-2') )
- self.assertTrue( not _profile7.has_key('status') )
+ self.assertTrue( 'status' not in _profile7 )
i = 0
while i < 10:
_remoteagent7 = inifile_backend.get_remote_agent('testprofile7')
- self.assertTrue( _remoteagent7 == {u'hostname': 'docker-vm-1', u'hostaddr': 'docker-server', u'port': 22001, 'load_factors': {}, } or _remoteagent7 == {u'hostname': 'docker-vm-2', u'hostaddr': 'docker-server', u'port': 22002, 'load_factors': {}, } )
+ self.assertTrue( _remoteagent7 == {'hostname': 'docker-vm-1', 'hostaddr': 'docker-server', 'port': 22001, 'load_factors': {}, } or _remoteagent7 == {'hostname': 'docker-vm-2', 'hostaddr': 'docker-server', 'port': 22002, 'load_factors': {}, } )
_session7 = inifile_backend.select_session('testprofile7', 'foo7N')
self.assertTrue( _session7 == {'port': 22001, 'server': 'docker-server', } or _session7 == {'port': 22001, 'server': 'docker-server', } )
i += 1
@@ -240,11 +240,11 @@ broker-agent-query-mode = SSH
_profile8 = _list8['testprofile8']
_profile8['host'].sort()
self.assertTrue( _profile8['host'][0] in ('docker-vm-0', 'docker-vm-1', 'docker-vm-2') )
- self.assertTrue( not _profile8.has_key('status') )
+ self.assertTrue( 'status' not in _profile8 )
i = 0
while i < 10:
_remoteagent8 = inifile_backend.get_remote_agent('testprofile8')
- self.assertTrue( _remoteagent8 == {u'hostname': 'docker-vm-0', u'hostaddr': 'docker-server', u'port': 22000, 'load_factors': {}, } or _remoteagent8 == {u'hostname': 'docker-vm-1', u'hostaddr': 'docker-server', u'port': 22001, 'load_factors': {}, } or _remoteagent8 == {u'hostname': 'docker-vm-2', u'hostaddr': 'docker-server', u'port': 22002, 'load_factors': {}, } )
+ self.assertTrue( _remoteagent8 == {'hostname': 'docker-vm-0', 'hostaddr': 'docker-server', 'port': 22000, 'load_factors': {}, } or _remoteagent8 == {'hostname': 'docker-vm-1', 'hostaddr': 'docker-server', 'port': 22001, 'load_factors': {}, } or _remoteagent8 == {'hostname': 'docker-vm-2', 'hostaddr': 'docker-server', 'port': 22002, 'load_factors': {}, } )
_session8 = inifile_backend.select_session('testprofile8', 'foo8N')
self.assertTrue( _session8 == {'port': 22000, 'server': 'docker-server', } or _session8 == {'port': 22001, 'server': 'docker-server', } or _session8 == {'port': 22001, 'server': 'docker-server', } )
i += 1
@@ -367,8 +367,8 @@ broker-portscan-x2goservers = true
broker-autologin = true
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _session_profiles
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ print(_session_profiles, file=tf)
tf.seek(0)
inifile_backend = inifile.X2GoBroker(profile_config_file=tf.name)
@@ -401,7 +401,7 @@ broker-autologin = true
while i < 10:
_session4 = inifile_backend.select_session('testprofile4', username='foo4BS2')
self.assertTrue ( _session4['server'] == 'host2.internal')
- self.assertFalse ( _session4.has_key('session_info') )
+ self.assertFalse ( 'session_info' in _session4 )
i += 1
i = 0
@@ -424,7 +424,7 @@ broker-autologin = true
while i < 10:
_session5 = inifile_backend.select_session('testprofile5', username='foo5BS1')
self.assertTrue ( _session5['server'] == 'host4.internal')
- self.assertFalse ( _session5.has_key('session_info') )
+ self.assertFalse ( 'session_info' in _session5 )
i += 1
x2gobroker.agent._call_local_broker_agent = _save_local_broker_agent_call
@@ -485,8 +485,8 @@ broker-agent-query-mode = SSH
broker-portscan-x2goservers = true
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _session_profiles
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ print(_session_profiles, file=tf)
tf.seek(0)
inifile_backend = inifile.X2GoBroker(profile_config_file=tf.name)
diff --git a/x2gobroker/tests/test_broker_base.py b/x2gobroker/tests/test_broker_base.py
index 2af14a4..cb05742 100644
--- a/x2gobroker/tests/test_broker_base.py
+++ b/x2gobroker/tests/test_broker_base.py
@@ -30,8 +30,8 @@ class TestX2GoBrokerBackendBase(unittest.TestCase):
_config_defaults = copy.deepcopy(x2gobroker.defaults.X2GOBROKER_CONFIG_DEFAULTS)
_config_defaults.update({'broker_base': {'enable': True, }, })
_config = "" # use the config that derives directly from the config defaults
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
return base.X2GoBroker(config_file=tf.name, config_defaults=_config_defaults)
@@ -44,8 +44,8 @@ class TestX2GoBrokerBackendBase(unittest.TestCase):
[broker_base]
enable = false
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
base_backend = base.X2GoBroker(config_file=tf.name, config_defaults=_config_defaults)
self.assertEqual(base_backend.is_enabled(), False)
@@ -53,8 +53,8 @@ enable = false
[broker_base]
enable = true
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
base_backend = base.X2GoBroker(config_file=tf.name)
self.assertEqual(base_backend.is_enabled(), True)
@@ -72,8 +72,8 @@ default-auth-mech = foo-auth-mech
[broker_base]
enable = true
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
base_backend = base.X2GoBroker(config_file=tf.name)
self.assertEqual(base_backend.get_authentication_mechanism(), 'foo-auth-mech')
@@ -85,8 +85,8 @@ default-auth-mech = foo-auth-mech
enable = true
auth-mech = bar-auth-mech
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
base_backend = base.X2GoBroker(config_file=tf.name, config_defaults=_config_defaults)
self.assertEqual(base_backend.get_authentication_mechanism(), 'bar-auth-mech')
@@ -104,8 +104,8 @@ default-user-db = foo-user-db
[broker_base]
enable = true
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
base_backend = base.X2GoBroker(config_file=tf.name)
self.assertEqual(base_backend.get_userdb_service(), 'foo-user-db')
@@ -117,8 +117,8 @@ default-user-db = foo-user-db
enable = true
user-db = bar-user-db
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
base_backend = base.X2GoBroker(config_file=tf.name, config_defaults=_config_defaults)
self.assertEqual(base_backend.get_userdb_service(), 'bar-user-db')
@@ -136,8 +136,8 @@ default-group-db = foo-group-db
[broker_base]
enable = true
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
base_backend = base.X2GoBroker(config_file=tf.name)
self.assertEqual(base_backend.get_groupdb_service(), 'foo-group-db')
@@ -149,8 +149,8 @@ default-group-db = foo-group-db
enable = true
group-db = bar-group-db
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
base_backend = base.X2GoBroker(config_file=tf.name, config_defaults=_config_defaults)
self.assertEqual(base_backend.get_groupdb_service(), 'bar-group-db')
@@ -167,8 +167,8 @@ default-group-db = base
[broker_base]
enable = true
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
base_backend = base.X2GoBroker(config_file=tf.name)
self.assertEqual(base_backend.get_users(), [])
@@ -189,8 +189,8 @@ default-group-db = libnss
[broker_base]
enable = true
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
base_backend = base.X2GoBroker(config_file=tf.name)
self.assertTrue( ( 'root' in base_backend.get_users() ) )
@@ -213,12 +213,12 @@ default-group-db = libnss
[broker_base]
enable = true
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
base_backend = base.X2GoBroker(config_file=tf.name)
- self.assertTrue(type(base_backend.get_primary_group('root') in (type(''), type(u''))))
- self.assertTrue(type(unicode(base_backend.get_primary_group('root')) == u'root'))
+ self.assertTrue(type(base_backend.get_primary_group('root') in (type(''), type(''))))
+ self.assertTrue(type(base_backend.get_primary_group('root') == 'root'))
def test_nameservice_nodefaultsinconfig(self):
_config_defaults = copy.deepcopy(x2gobroker.defaults.X2GOBROKER_CONFIG_DEFAULTS)
@@ -230,8 +230,8 @@ default-group-db =
[broker_base]
enable = true
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
base_backend = base.X2GoBroker(config_file=tf.name, config_defaults=_config_defaults)
self.assertEqual(base_backend.get_userdb_service(), 'libnss')
@@ -245,8 +245,8 @@ default-group-db = testsuite
[broker_base]
enable = true
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
base_backend = base.X2GoBroker(config_file=tf.name, config_defaults=_config_defaults)
self.assertEqual(base_backend.get_userdb_service(), 'testsuite')
@@ -261,8 +261,8 @@ enable = true
[global]
require-password = false
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
base_backend = base.X2GoBroker(config_file=tf.name, config_defaults=_config_defaults)
self.assertEqual(base_backend.check_access()[0], True)
@@ -273,47 +273,47 @@ require-password = false
def test_getdefaultprofile(self):
base_backend = self._init_base_backend()
_expected_profile = {
- u'command': u'TERMINAL',
- u'defsndport': True,
- u'useiconv': False,
- u'iconvfrom': u'UTF-8',
- u'height': 600,
- u'export': u'',
- u'quality': 9,
- u'fullscreen': False,
- u'layout': u'',
- u'useexports': True,
- u'width': 800,
- u'speed': 2,
- u'soundsystem': u'pulse',
- u'print': True,
- u'type': u'auto',
- u'sndport': 4713,
- u'xinerama': True,
- u'variant': u'',
- u'usekbd': True,
- u'fstunnel': True,
- u'applications': [u'TERMINAL',u'WWWBROWSER',u'MAILCLIENT',u'OFFICE'],
- u'multidisp': False,
- u'sshproxyport': 22,
- u'sound': True,
- u'rootless': True,
- u'iconvto': u'UTF-8',
- u'soundtunnel': True,
- u'dpi': 96,
- u'sshport': 22,
- u'setdpi': 0,
- u'user': u'BROKER_USER',
- u'pack': u'16m-jpeg',
- u'host': [u'localhost'],
- u'directrdp': False,
+ 'command': 'TERMINAL',
+ 'defsndport': True,
+ 'useiconv': False,
+ 'iconvfrom': 'UTF-8',
+ 'height': 600,
+ 'export': '',
+ 'quality': 9,
+ 'fullscreen': False,
+ 'layout': '',
+ 'useexports': True,
+ 'width': 800,
+ 'speed': 2,
+ 'soundsystem': 'pulse',
+ 'print': True,
+ 'type': 'auto',
+ 'sndport': 4713,
+ 'xinerama': True,
+ 'variant': '',
+ 'usekbd': True,
+ 'fstunnel': True,
+ 'applications': ['TERMINAL','WWWBROWSER','MAILCLIENT','OFFICE'],
+ 'multidisp': False,
+ 'sshproxyport': 22,
+ 'sound': True,
+ 'rootless': True,
+ 'iconvto': 'UTF-8',
+ 'soundtunnel': True,
+ 'dpi': 96,
+ 'sshport': 22,
+ 'setdpi': 0,
+ 'user': 'BROKER_USER',
+ 'pack': '16m-jpeg',
+ 'host': ['localhost'],
+ 'directrdp': False,
}
_profile = base_backend.get_profile_defaults()
- self.assertEqual(len(_expected_profile.keys()), len(_profile.keys()))
- for key in _expected_profile.keys():
- self.assertTrue( ( key in _profile.keys() ) )
- for key in _profile.keys():
- self.assertTrue( ( key in _expected_profile.keys() and _profile[key] == _expected_profile[key] ) )
+ self.assertEqual(len(list(_expected_profile.keys())), len(list(_profile.keys())))
+ for key in list(_expected_profile.keys()):
+ self.assertTrue( ( key in list(_profile.keys()) ) )
+ for key in list(_profile.keys()):
+ self.assertTrue( ( key in list(_expected_profile.keys()) and _profile[key] == _expected_profile[key] ) )
### TEST ACL DEFAULTS: get_acl_defaults()
@@ -332,11 +332,11 @@ require-password = false
'acl-any-order': 'deny-allow',
}
_acls = base_backend.get_acl_defaults()
- self.assertEqual(len(_expected_acls.keys()), len(_acls.keys()))
- for key in _expected_acls.keys():
- self.assertTrue( ( key in _acls.keys() ) )
- for key in _acls.keys():
- self.assertTrue( ( key in _expected_acls.keys() and _acls[key] == _expected_acls[key] ) )
+ self.assertEqual(len(list(_expected_acls.keys())), len(list(_acls.keys())))
+ for key in list(_expected_acls.keys()):
+ self.assertTrue( ( key in list(_acls.keys()) ) )
+ for key in list(_acls.keys()):
+ self.assertTrue( ( key in list(_expected_acls.keys()) and _acls[key] == _expected_acls[key] ) )
### TEST ACL CHECK: check_profile_acls()
@@ -444,8 +444,8 @@ default-group-db = testsuite
[broker_base]
enable = true
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
base_backend = base.X2GoBroker(config_file=tf.name, config_defaults=_config_defaults)
users = base_backend.get_users()
@@ -467,8 +467,8 @@ default-group-db = testsuite
[broker_base]
enable = true
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
base_backend = base.X2GoBroker(config_file=tf.name, config_defaults=_config_defaults)
username = 'willi'
@@ -520,8 +520,8 @@ default-group-db = testsuite
[broker_base]
enable = true
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
base_backend = base.X2GoBroker(config_file=tf.name, config_defaults=_config_defaults)
acls = {
@@ -542,8 +542,8 @@ ignore-primary-group-memberships = true
[broker_base]
enable = true
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
base_backend = base.X2GoBroker(config_file=tf.name, config_defaults=_config_defaults)
acls = {
@@ -564,8 +564,8 @@ ignore-primary-group-memberships = false
[broker_base]
enable = true
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
base_backend = base.X2GoBroker(config_file=tf.name, config_defaults=_config_defaults)
acls = {
@@ -587,8 +587,8 @@ default-group-db = testsuite
[broker_base]
enable = true
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
base_backend = base.X2GoBroker(config_file=tf.name, config_defaults=_config_defaults)
username_f = 'flip' # is a male grasshopper
@@ -653,8 +653,8 @@ default-group-db = testsuite
[broker_base]
enable = true
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
base_backend = base.X2GoBroker(config_file=tf.name, config_defaults=_config_defaults)
username_f = 'flip'
@@ -1018,8 +1018,8 @@ default-group-db = testsuite
[broker_base]
enable = true
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
base_backend = base.X2GoBroker(config_file=tf.name, config_defaults=_config_defaults)
username_f = 'flip'
@@ -1184,8 +1184,8 @@ enable = true
_config = """
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
base_backend = base.X2GoBroker(config_file=tf.name, config_defaults=_config_defaults)
self.assertNotEqual(base_backend.get_my_cookie(), 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx')
@@ -1194,8 +1194,8 @@ enable = true
[global]
my-cookie = f57866be-bc67-4642-86b4-f644b54031c8
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
base_backend = base.X2GoBroker(config_file=tf.name, config_defaults=_config_defaults)
self.assertEqual(base_backend.get_my_cookie(), 'f57866be-bc67-4642-86b4-f644b54031c8')
@@ -1205,44 +1205,45 @@ my-cookie = f57866be-bc67-4642-86b4-f644b54031c8
my-cookie = f57866be-bc67-4642-86b4-f644b54031c8
my-cookie-file = /etc/x2go/somefile/somewhere
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
base_backend = base.X2GoBroker(config_file=tf.name, config_defaults=_config_defaults)
self.assertEqual(base_backend.get_my_cookie(), 'f57866be-bc67-4642-86b4-f644b54031c8')
tf.close()
- temp_fh = tempfile.NamedTemporaryFile()
- print >> temp_fh, 'd1b8043e-b748-48c4-907f-7c798c4dc746'
+ temp_fh = tempfile.NamedTemporaryFile(mode='w')
+ temp_fh.write('d1b8043e-b748-48c4-907f-7c798c4dc746')
temp_fh.seek(0)
_config = """
[global]
my-cookie = f57866be-bc67-4642-86b4-f644b54031c8
my-cookie-file = %s
""" % temp_fh.name
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
base_backend = base.X2GoBroker(config_file=tf.name, config_defaults=_config_defaults)
self.assertNotEqual(base_backend.get_my_cookie(), 'f57866be-bc67-4642-86b4-f644b54031c8')
self.assertEqual(base_backend.get_my_cookie(), 'd1b8043e-b748-48c4-907f-7c798c4dc746')
temp_fh.close()
tf.close()
- temp_fh = tempfile.NamedTemporaryFile()
- print >> temp_fh, """
+ temp_fh = tempfile.NamedTemporaryFile(mode='w')
+ temp_fh.write("""
# Some comment...
# Another comment...
d1b8043e-b748-48c4-907f-7c798c4dc746
d1b8043e-b748-48c4-907f-7c798c4dc747
# above hash is wrong...
"""
+ )
temp_fh.seek(0)
_config = """
[global]
my-cookie = f57866be-bc67-4642-86b4-f644b54031c8
my-cookie-file = %s
""" % temp_fh.name
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
base_backend = base.X2GoBroker(config_file=tf.name, config_defaults=_config_defaults)
self.assertNotEqual(base_backend.get_my_cookie(), 'f57866be-bc67-4642-86b4-f644b54031c8')
@@ -1256,8 +1257,8 @@ my-cookie-file = %s
my-cookie = f57866be-bc67-4642-86b4-f644b54031c8
my-cookie-file = %s
""" % temp_fh.name
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
base_backend = base.X2GoBroker(config_file=tf.name, config_defaults=_config_defaults)
self.assertNotEqual(base_backend.get_my_cookie(), 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx')
diff --git a/x2gobroker/tests/test_broker_inifile.py b/x2gobroker/tests/test_broker_inifile.py
index 7f08129..cd97ae4 100644
--- a/x2gobroker/tests/test_broker_inifile.py
+++ b/x2gobroker/tests/test_broker_inifile.py
@@ -45,7 +45,7 @@ class TestX2GoBrokerBackendInifile(unittest.TestCase):
inifile_backend = inifile.X2GoBroker(profile_config_file='../../etc/broker/x2gobroker-sessionprofiles.conf')
_profile_ids = inifile_backend.get_profile_ids()
for _profile_id in _profile_ids:
- self.assertTrue( ( 'default' not in inifile_backend.get_profile(_profile_id).keys() ) )
+ self.assertTrue( ( 'default' not in list(inifile_backend.get_profile(_profile_id).keys()) ) )
# TEST COMPLETION OF DEFAULTS FROM CODE IN defaults.py
@@ -63,33 +63,33 @@ user = foo
command = GNOME
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _session_profiles
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ print(_session_profiles, file=tf)
tf.seek(0)
inifile_backend = inifile.X2GoBroker(profile_config_file=tf.name)
_expected_defaults = copy.deepcopy(x2gobroker.defaults.X2GOBROKER_SESSIONPROFILE_DEFAULTS['DEFAULT'])
- for key in copy.deepcopy(_expected_defaults).keys():
+ for key in list(copy.deepcopy(_expected_defaults).keys()):
if key.startswith('acl-'):
del _expected_defaults[key]
_expected_defaults.update( {
- u'exports': '',
- u'fullscreen': False,
- u'width': 800,
- u'height': 600,
- u'applications': ['TERMINAL','WWWBROWSER',],
- u'user': 'foo',
- u'command': 'GNOME',
+ 'exports': '',
+ 'fullscreen': False,
+ 'width': 800,
+ 'height': 600,
+ 'applications': ['TERMINAL','WWWBROWSER',],
+ 'user': 'foo',
+ 'command': 'GNOME',
} )
# just testing the directrdp hard-coded defaults
_expected_defaults.update( {
- u'directrdp': False,
+ 'directrdp': False,
} )
_expected_profile = copy.deepcopy(_expected_defaults)
_profile = inifile_backend.get_profile('testprofile')
- for key in _expected_profile.keys():
- self.assertTrue( ( key in _profile.keys() ) )
- for key in _profile.keys():
- self.assertTrue( ( key in _expected_profile.keys() and _profile[key] == _expected_profile[key] ) )
+ for key in list(_expected_profile.keys()):
+ self.assertTrue( ( key in list(_profile.keys()) ) )
+ for key in list(_profile.keys()):
+ self.assertTrue( ( key in list(_expected_profile.keys()) and _profile[key] == _expected_profile[key] ) )
### TEST SESSION PROFILES: get_profile_defaults()
@@ -101,9 +101,9 @@ command = GNOME
if key.startswith('acl-'):
del _expected_profile_defaults[key]
for _param in _profile_defaults:
- self.assertTrue( ( _param in _expected_profile_defaults.keys() ) )
+ self.assertTrue( ( _param in list(_expected_profile_defaults.keys()) ) )
for _param in _expected_profile_defaults:
- self.assertTrue( ( _param in _profile_defaults.keys() and _profile_defaults[_param] == _expected_profile_defaults[_param] ) )
+ self.assertTrue( ( _param in list(_profile_defaults.keys()) and _profile_defaults[_param] == _expected_profile_defaults[_param] ) )
### TEST SESSION PROFILES: get_profile(profile_id)
@@ -137,66 +137,66 @@ acl-users-order = deny-allow
user = bar
command = gnomE
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _session_profiles
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ print(_session_profiles, file=tf)
tf.seek(0)
inifile_backend = inifile.X2GoBroker(profile_config_file=tf.name)
_expected_defaults = copy.deepcopy(x2gobroker.defaults.X2GOBROKER_SESSIONPROFILE_DEFAULTS['DEFAULT'])
- for key in copy.deepcopy(_expected_defaults).keys():
+ for key in list(copy.deepcopy(_expected_defaults).keys()):
if key.startswith('acl-'):
del _expected_defaults[key]
_expected_defaults.update( {
- u'exports': '',
- u'fullscreen': False,
- u'width': 800,
- u'height': 600,
- u'applications': ['TERMINAL','WWWBROWSER',],
+ 'exports': '',
+ 'fullscreen': False,
+ 'width': 800,
+ 'height': 600,
+ 'applications': ['TERMINAL','WWWBROWSER',],
} )
_expected_profile1 = copy.deepcopy(_expected_defaults)
_expected_profile1.update({
- u'user': 'foo',
- u'command': 'GNOME',
+ 'user': 'foo',
+ 'command': 'GNOME',
})
_expected_profile2 = copy.deepcopy(_expected_defaults)
_expected_profile2.update({
- u'user': 'bar',
- u'command': 'KDE',
- u'fullscreen': True,
+ 'user': 'bar',
+ 'command': 'KDE',
+ 'fullscreen': True,
})
_expected_profile3 = copy.deepcopy(_expected_defaults)
_expected_profile3.update({
- u'user': 'bar',
- u'command': 'KDE',
- u'fullscreen': True,
+ 'user': 'bar',
+ 'command': 'KDE',
+ 'fullscreen': True,
})
_expected_profile4 = copy.deepcopy(_expected_defaults)
_expected_profile4.update({
- u'user': 'bar',
- u'command': 'gnomE', # mixture of lower and uppercase in get_profile()
+ 'user': 'bar',
+ 'command': 'gnomE', # mixture of lower and uppercase in get_profile()
})
_profile1 = inifile_backend.get_profile('testprofile1')
- for key in _expected_profile1.keys():
- self.assertTrue( ( key in _profile1.keys() ) )
- for key in _profile1.keys():
- self.assertTrue( ( key in _expected_profile1.keys() and _profile1[key] == _expected_profile1[key] ) )
+ for key in list(_expected_profile1.keys()):
+ self.assertTrue( ( key in list(_profile1.keys()) ) )
+ for key in list(_profile1.keys()):
+ self.assertTrue( ( key in list(_expected_profile1.keys()) and _profile1[key] == _expected_profile1[key] ) )
_profile2 = inifile_backend.get_profile('testprofile2')
- for key in _expected_profile2.keys():
- self.assertTrue( ( key in _profile2.keys() ) )
- for key in _profile2.keys():
- self.assertTrue( ( key in _expected_profile2.keys() ) and ( _profile2[key] == _expected_profile2[key] ) )
+ for key in list(_expected_profile2.keys()):
+ self.assertTrue( ( key in list(_profile2.keys()) ) )
+ for key in list(_profile2.keys()):
+ self.assertTrue( ( key in list(_expected_profile2.keys()) ) and ( _profile2[key] == _expected_profile2[key] ) )
_profile3 = inifile_backend.get_profile('testprofile3')
- for key in _expected_profile3.keys():
- self.assertTrue( ( key in _profile3.keys() ) )
- for key in _profile3.keys():
- self.assertTrue( ( key in _expected_profile3.keys() ) and ( _profile3[key] == _expected_profile3[key] ) )
+ for key in list(_expected_profile3.keys()):
+ self.assertTrue( ( key in list(_profile3.keys()) ) )
+ for key in list(_profile3.keys()):
+ self.assertTrue( ( key in list(_expected_profile3.keys()) ) and ( _profile3[key] == _expected_profile3[key] ) )
_profile4 = inifile_backend.get_profile('testprofile4')
- for key in _expected_profile4.keys():
- self.assertTrue( ( key in _profile4.keys() ) )
- for key in _profile4.keys():
- self.assertTrue( ( key in _expected_profile4.keys() ) and ( _profile4[key] == _expected_profile4[key] ) )
+ for key in list(_expected_profile4.keys()):
+ self.assertTrue( ( key in list(_profile4.keys()) ) )
+ for key in list(_profile4.keys()):
+ self.assertTrue( ( key in list(_expected_profile4.keys()) ) and ( _profile4[key] == _expected_profile4[key] ) )
### TEST SESSION PROFILES: get_profile_acls(profile_id)
@@ -228,8 +228,8 @@ acl-users-deny = ALL
acl-users-allow = foo,bar
acl-users-order = deny-allow
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _session_profiles
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ print(_session_profiles, file=tf)
tf.seek(0)
inifile_backend = inifile.X2GoBroker(profile_config_file=tf.name)
_expected_acl_defaults = {
@@ -251,22 +251,22 @@ acl-users-order = deny-allow
'acl-any-order': 'deny-allow',
})
_acls_profile1 = inifile_backend.get_profile_acls('testprofile1')
- for key in _expected_acls_profile1.keys():
- self.assertTrue( ( key in _acls_profile1.keys() ) )
- for key in _acls_profile1.keys():
- self.assertTrue( ( key in _expected_acls_profile1.keys() and _acls_profile1[key] == _expected_acls_profile1[key] ) )
+ for key in list(_expected_acls_profile1.keys()):
+ self.assertTrue( ( key in list(_acls_profile1.keys()) ) )
+ for key in list(_acls_profile1.keys()):
+ self.assertTrue( ( key in list(_expected_acls_profile1.keys()) and _acls_profile1[key] == _expected_acls_profile1[key] ) )
_acls_profile2 = inifile_backend.get_profile_acls('testprofile2')
- for key in _expected_acls_profile2.keys():
- self.assertTrue( ( key in _acls_profile2.keys() ) )
- for key in _acls_profile2.keys():
- self.assertTrue( ( key in _expected_acls_profile2.keys() ) and ( _acls_profile2[key] == _expected_acls_profile2[key] ) )
+ for key in list(_expected_acls_profile2.keys()):
+ self.assertTrue( ( key in list(_acls_profile2.keys()) ) )
+ for key in list(_acls_profile2.keys()):
+ self.assertTrue( ( key in list(_expected_acls_profile2.keys()) ) and ( _acls_profile2[key] == _expected_acls_profile2[key] ) )
_acls_profile3 = inifile_backend.get_profile_acls('testprofile3')
- for key in _expected_acls_profile3.keys():
- self.assertTrue( ( key in _acls_profile3.keys() ) )
- for key in _acls_profile3.keys():
- self.assertTrue( ( key in _expected_acls_profile3.keys() ) and ( _acls_profile3[key] == _expected_acls_profile3[key] ) )
+ for key in list(_expected_acls_profile3.keys()):
+ self.assertTrue( ( key in list(_acls_profile3.keys()) ) )
+ for key in list(_acls_profile3.keys()):
+ self.assertTrue( ( key in list(_expected_acls_profile3.keys()) ) and ( _acls_profile3[key] == _expected_acls_profile3[key] ) )
### TEST: list_profiles() method
@@ -293,13 +293,13 @@ user =
command = KDE
fullscreen = true
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _session_profiles
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ print(_session_profiles, file=tf)
tf.seek(0)
inifile_backend = inifile.X2GoBroker(profile_config_file=tf.name)
profile_ids = inifile_backend.get_profile_ids()
profile_ids.sort()
- list_of_profile_ids = inifile_backend.list_profiles(username).keys()
+ list_of_profile_ids = list(inifile_backend.list_profiles(username).keys())
list_of_profile_ids.sort()
self.assertEqual(profile_ids, list_of_profile_ids)
@@ -328,8 +328,8 @@ rootless = false
user =
command = gnomE
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _session_profiles
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ print(_session_profiles, file=tf)
tf.seek(0)
inifile_backend = inifile.X2GoBroker(profile_config_file=tf.name)
profiles = inifile_backend.list_profiles(username)
@@ -354,8 +354,8 @@ default-group-db = testsuite
[inifile]
enable = true
"""
- tfc = tempfile.NamedTemporaryFile()
- print >> tfc, _config
+ tfc = tempfile.NamedTemporaryFile(mode='w')
+ print(_config, file=tfc)
tfc.seek(0)
_session_profiles = """
@@ -390,21 +390,21 @@ fullscreen = true
acl-users-deny = willi
acl-users-order = deny-allow
"""
- tfs = tempfile.NamedTemporaryFile()
- print >> tfs, _session_profiles
+ tfs = tempfile.NamedTemporaryFile(mode='w')
+ print(_session_profiles, file=tfs)
tfs.seek(0)
inifile_backend = inifile.X2GoBroker(config_file=tfc.name, config_defaults=_config_defaults, profile_config_file=tfs.name)
username_f = 'flip'
list_of_profiles = inifile_backend.list_profiles(username_f)
- list_of_profile_ids = list_of_profiles.keys()
+ list_of_profile_ids = list(list_of_profiles.keys())
list_of_profile_ids.sort()
self.assertEqual(list_of_profile_ids, ['testprofile1'])
self.assertEqual(list_of_profiles['testprofile1']['command'], 'GNOME')
username_m = 'maja'
list_of_profiles = inifile_backend.list_profiles(username_m)
- list_of_profile_ids = list_of_profiles.keys()
+ list_of_profile_ids = list(list_of_profiles.keys())
list_of_profile_ids.sort()
self.assertEqual(list_of_profile_ids, ['testprofile1', 'testprofile2', 'testprofile3'])
self.assertEqual(list_of_profiles['testprofile1']['command'], 'GNOME')
@@ -413,7 +413,7 @@ acl-users-order = deny-allow
username_k = 'kassandra'
list_of_profiles = inifile_backend.list_profiles(username_k)
- list_of_profile_ids = list_of_profiles.keys()
+ list_of_profile_ids = list(list_of_profiles.keys())
list_of_profile_ids.sort()
self.assertEqual(list_of_profile_ids, ['testprofile1', 'testprofile2', 'testprofile3'])
self.assertEqual(list_of_profiles['testprofile1']['command'], 'GNOME')
@@ -422,14 +422,14 @@ acl-users-order = deny-allow
username_t = 'thekla'
list_of_profiles = inifile_backend.list_profiles(username_t)
- list_of_profile_ids = list_of_profiles.keys()
+ list_of_profile_ids = list(list_of_profiles.keys())
list_of_profile_ids.sort()
self.assertEqual(list_of_profile_ids, ['testprofile2'])
self.assertEqual(list_of_profiles['testprofile2']['command'], 'XFCE')
username_w = 'willi'
list_of_profiles = inifile_backend.list_profiles(username_w)
- list_of_profile_ids = list_of_profiles.keys()
+ list_of_profile_ids = list(list_of_profiles.keys())
list_of_profile_ids.sort()
self.assertEqual(list_of_profile_ids, ['testprofile1', 'testprofile2'])
self.assertEqual(list_of_profiles['testprofile1']['command'], 'GNOME')
@@ -452,8 +452,8 @@ default-group-db = testsuite
[inifile]
enable = true
"""
- tfc = tempfile.NamedTemporaryFile()
- print >> tfc, _config
+ tfc = tempfile.NamedTemporaryFile(mode='w')
+ print(_config, file=tfc)
tfc.seek(0)
_session_profiles = """
@@ -487,8 +487,8 @@ name = TEST-7
host = test-7 (-test-6.extern)
"""
- tfs = tempfile.NamedTemporaryFile()
- print >> tfs, _session_profiles
+ tfs = tempfile.NamedTemporaryFile(mode='w')
+ print(_session_profiles, file=tfs)
tfs.seek(0)
inifile_backend = inifile.X2GoBroker(config_file=tfc.name, config_defaults=_config_defaults, profile_config_file=tfs.name)
_expected_result_1 = {
@@ -569,15 +569,15 @@ host = docker-vm-0 (localhost), docker-vm-1 (localhost:22001), docker-vm-2 (loca
sshport = 22000
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _session_profiles
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ print(_session_profiles, file=tf)
tf.seek(0)
inifile_backend = inifile.X2GoBroker(profile_config_file=tf.name)
# test "testprofile1"
_profile1 = inifile_backend.get_profile('testprofile1')
self.assertTrue( ( _profile1['host'] == ['host1'] ) )
- for key in _profile1.keys():
+ for key in list(_profile1.keys()):
self.assertFalse( (key.startswith('host') and key != 'host' ) )
_session1 = inifile_backend.select_session('testprofile1')
self.assertEqual ( _session1, {'port': 22, 'server': 'host1'} )
@@ -586,7 +586,7 @@ sshport = 22000
_profile2 = inifile_backend.get_profile('testprofile2')
_profile2['host'].sort()
self.assertTrue( ( _profile2['host'] == ['host1', 'host2'] ) )
- for key in _profile2.keys():
+ for key in list(_profile2.keys()):
self.assertFalse( (key.startswith('host') and key != 'host' ) )
_session2 = inifile_backend.select_session('testprofile2')
self.assertTrue ( _session2['port'] == 22 )
@@ -597,7 +597,7 @@ sshport = 22000
_profile3['host'].sort()
_profile5 = inifile_backend.get_profile('testprofile5')
self.assertTrue( ( _profile3['host'] == ['host1.mydomain', 'host2.mydomain'] ) )
- for key in _profile3.keys():
+ for key in list(_profile3.keys()):
self.assertFalse( (key.startswith('host') and key != 'host' ) )
_session3 = inifile_backend.select_session('testprofile3')
self.assertTrue ( _session3['port'] == 22 )
@@ -607,7 +607,7 @@ sshport = 22000
_profile4 = inifile_backend.get_profile('testprofile4')
_profile4['host'].sort()
self.assertTrue( ( _profile4['host'] == ['host1.mydomain', 'host2.yourdomain'] ) )
- for key in _profile4.keys():
+ for key in list(_profile4.keys()):
self.assertFalse( (key.startswith('host') and key != 'host' ) )
_session4 = inifile_backend.select_session('testprofile4')
self.assertTrue ( _session4['port'] == 22 )
@@ -617,8 +617,8 @@ sshport = 22000
_profile5 = inifile_backend.get_profile('testprofile5')
_profile5['host'].sort()
self.assertTrue( ( _profile5['host'] == ['host1.mydomain', 'host2.mydomain'] ) )
- self.assertTrue( _profile5.has_key('host=host1.mydomain') )
- self.assertTrue( _profile5.has_key('host=host2.mydomain') )
+ self.assertTrue( 'host=host1.mydomain' in _profile5 )
+ self.assertTrue( 'host=host2.mydomain' in _profile5 )
self.assertTrue( _profile5['host=host1.mydomain'] == '10.0.2.4' )
self.assertTrue( _profile5['host=host2.mydomain'] == '10.0.2.5' )
self.assertTrue( _profile5['sshport'] == 22 )
@@ -630,8 +630,8 @@ sshport = 22000
_profile6 = inifile_backend.get_profile('testprofile6')
_profile6['host'].sort()
self.assertTrue( ( _profile6['host'] == ['host1.mydomain', 'host2.mydomain'] ) )
- self.assertTrue( _profile6.has_key('host=host1.mydomain') )
- self.assertTrue( _profile6.has_key('host=host2.mydomain') )
+ self.assertTrue( 'host=host1.mydomain' in _profile6 )
+ self.assertTrue( 'host=host2.mydomain' in _profile6 )
self.assertTrue( _profile6['host=host1.mydomain'] == '10.0.2.4' )
self.assertTrue( _profile6['host=host2.mydomain'] == '10.0.2.5' )
self.assertTrue( _profile6['sshport'] == 23467 )
@@ -646,8 +646,8 @@ sshport = 22000
_profile7 = inifile_backend.get_profile('testprofile7')
_profile7['host'].sort()
self.assertTrue( ( _profile7['host'] == ['docker-vm-1', 'docker-vm-2'] ) )
- self.assertTrue( _profile7.has_key('host=docker-vm-1') )
- self.assertTrue( _profile7.has_key('host=docker-vm-2') )
+ self.assertTrue( 'host=docker-vm-1' in _profile7 )
+ self.assertTrue( 'host=docker-vm-2' in _profile7 )
self.assertTrue( _profile7['host=docker-vm-1'] == 'localhost' )
self.assertTrue( _profile7['host=docker-vm-2'] == 'localhost' )
self.assertTrue( _profile7['sshport'] == 22 )
@@ -664,14 +664,14 @@ sshport = 22000
_profile8 = inifile_backend.get_profile('testprofile8')
_profile8['host'].sort()
self.assertTrue( ( _profile8['host'] == ['docker-vm-0', 'docker-vm-1', 'docker-vm-2'] ) )
- self.assertTrue( _profile8.has_key('host=docker-vm-0') )
- self.assertTrue( _profile8.has_key('host=docker-vm-1') )
- self.assertTrue( _profile8.has_key('host=docker-vm-2') )
+ self.assertTrue( 'host=docker-vm-0' in _profile8 )
+ self.assertTrue( 'host=docker-vm-1' in _profile8 )
+ self.assertTrue( 'host=docker-vm-2' in _profile8 )
self.assertTrue( _profile8['host=docker-vm-0'] == 'localhost' )
self.assertTrue( _profile8['host=docker-vm-1'] == 'localhost' )
self.assertTrue( _profile8['host=docker-vm-2'] == 'localhost' )
self.assertTrue( _profile8['sshport'] == 22000 )
- self.assertFalse( _profile8.has_key('sshport=docker-vm-0') )
+ self.assertFalse( 'sshport=docker-vm-0' in _profile8 )
self.assertTrue( _profile8['sshport=docker-vm-1'] == 22001 )
self.assertTrue( _profile8['sshport=docker-vm-2'] == 22002 )
i = 0
@@ -716,8 +716,8 @@ broker-agent-query-mode = NONE
host = host1.internal (host1.external), host2.internal (host2.external), host3.internal (host3.external)
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _session_profiles
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ print(_session_profiles, file=tf)
tf.seek(0)
inifile_backend = inifile.X2GoBroker(profile_config_file=tf.name)
diff --git a/x2gobroker/tests/test_broker_zeroconf.py b/x2gobroker/tests/test_broker_zeroconf.py
index 3ca4934..4419299 100644
--- a/x2gobroker/tests/test_broker_zeroconf.py
+++ b/x2gobroker/tests/test_broker_zeroconf.py
@@ -33,48 +33,48 @@ class TestX2GoBrokerBackendZeroconf(unittest.TestCase):
self.maxDiff = None
list_of_profiles = {
'unittest': {
- u'user': u'',
- u'defsndport': True,
- u'useiconv': False,
- u'iconvfrom': u'UTF-8',
- u'height': 600,
- u'export': u'',
- u'quality': 9,
- u'fullscreen': False,
- u'layout': u'',
- u'useexports': 1,
- u'width': 800,
- u'speed': 2,
- u'soundsystem': u'pulse',
- u'print': True,
- u'type': u'auto',
- u'sndport': 4713,
- u'xinerama': True,
- u'variant': u'',
- u'usekbd': True,
- u'fstunnel': True,
- u'applications': [u'TERMINAL',u'WWWBROWSER',u'MAILCLIENT',u'OFFICE',],
- u'host': u'localhost',
- u'multidisp': 0,
- u'sshproxyport': 22,
- u'sound': True,
- u'rootless': 0,
- u'name': u'LOCALHOST',
- u'iconvto': u'UTF-8',
- u'soundtunnel': True,
- u'command': 'KDE',
- u'dpi': 96,
- u'sshport': 22,
- u'setdpi': 0,
- u'pack': u'16m-jpeg',
+ 'user': '',
+ 'defsndport': True,
+ 'useiconv': False,
+ 'iconvfrom': 'UTF-8',
+ 'height': 600,
+ 'export': '',
+ 'quality': 9,
+ 'fullscreen': False,
+ 'layout': '',
+ 'useexports': 1,
+ 'width': 800,
+ 'speed': 2,
+ 'soundsystem': 'pulse',
+ 'print': True,
+ 'type': 'auto',
+ 'sndport': 4713,
+ 'xinerama': True,
+ 'variant': '',
+ 'usekbd': True,
+ 'fstunnel': True,
+ 'applications': ['TERMINAL','WWWBROWSER','MAILCLIENT','OFFICE',],
+ 'host': 'localhost',
+ 'multidisp': 0,
+ 'sshproxyport': 22,
+ 'sound': True,
+ 'rootless': 0,
+ 'name': 'LOCALHOST',
+ 'iconvto': 'UTF-8',
+ 'soundtunnel': True,
+ 'command': 'KDE',
+ 'dpi': 96,
+ 'sshport': 22,
+ 'setdpi': 0,
+ 'pack': '16m-jpeg',
# make sure, hard-coded defaults end up in the list_profiles() output of the zeroconf backend, as well
- u'directrdp': False,
+ 'directrdp': False,
},
}
zeroconf_backend = x2gobroker.brokers.zeroconf_broker.X2GoBroker()
_profiles = zeroconf_backend.list_profiles('user_foo')
- self.assertEqual(len(_profiles.keys()), 1)
- _key = _profiles.keys()[0]
+ self.assertEqual(len(list(_profiles.keys())), 1)
+ _key = list(_profiles.keys())[0]
# replace profile ID ,,unittest'' with the returned random profile ID (uuid hash)
_test_profiles = {
_key: list_of_profiles['unittest']
@@ -91,13 +91,13 @@ class TestX2GoBrokerBackendZeroconf(unittest.TestCase):
enable = true
desktop-shell = kDe
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
zeroconf_backend = x2gobroker.brokers.zeroconf_broker.X2GoBroker(config_file=tf.name, config_defaults=_config_defaults)
_profiles = zeroconf_backend.list_profiles('user_foo')
- self.assertEqual(len(_profiles.keys()), 1)
- _key = _profiles.keys()[0]
+ self.assertEqual(len(list(_profiles.keys())), 1)
+ _key = list(_profiles.keys())[0]
self.assertEqual(_profiles[_key]['command'], 'KDE')
def test_sessionselection(self):
diff --git a/x2gobroker/tests/test_client_plain_base.py b/x2gobroker/tests/test_client_plain_base.py
index 6d72b30..8152c30 100644
--- a/x2gobroker/tests/test_client_plain_base.py
+++ b/x2gobroker/tests/test_client_plain_base.py
@@ -48,8 +48,8 @@ class TestX2GoBrokerClientPlainBase(unittest.TestCase):
[broker_base]
enable = false
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
x2gobroker.defaults.X2GOBROKER_CONFIG = tf.name
r = x2gobroker.client.plain.X2GoBrokerClient().get(a)
@@ -59,8 +59,8 @@ enable = false
[broker_base]
enable = true
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
_cf_bak = x2gobroker.defaults.X2GOBROKER_CONFIG
x2gobroker.defaults.X2GOBROKER_CONFIG = tf.name
@@ -84,8 +84,8 @@ enable = true
[broker_base]
enable = true
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
x2gobroker.defaults.X2GOBROKER_CONFIG = tf.name
diff --git a/x2gobroker/tests/test_utils.py b/x2gobroker/tests/test_utils.py
index fc2b66c..c1ee46f 100644
--- a/x2gobroker/tests/test_utils.py
+++ b/x2gobroker/tests/test_utils.py
@@ -65,8 +65,8 @@ class TestX2GoBrokerUtils(unittest.TestCase):
server_load = {'ts01': 10, 'ts02': 20, 'ts03': 30,}
expected_server_load = {'ts01': 10, 'ts02': 20, 'ts03': 30,}
server_load_n, subdomains = x2gobroker.utils.normalize_hostnames(server_load)
- sln_keys = server_load_n.keys()
- esl_keys = expected_server_load.keys()
+ sln_keys = list(server_load_n.keys())
+ esl_keys = list(expected_server_load.keys())
sln_keys.sort()
esl_keys.sort()
self.assertEqual(esl_keys, sln_keys)
@@ -75,8 +75,8 @@ class TestX2GoBrokerUtils(unittest.TestCase):
server_load = {'ts01.intern': 10, 'ts02.intern': 20, 'ts03.intern': 30,}
expected_server_load = {'ts01': 10, 'ts02': 20, 'ts03': 30,}
server_load_n, subdomains = x2gobroker.utils.normalize_hostnames(server_load)
- sln_keys = server_load_n.keys()
- esl_keys = expected_server_load.keys()
+ sln_keys = list(server_load_n.keys())
+ esl_keys = list(expected_server_load.keys())
sln_keys.sort()
esl_keys.sort()
self.assertEqual(esl_keys, sln_keys)
@@ -85,8 +85,8 @@ class TestX2GoBrokerUtils(unittest.TestCase):
server_load = {'ts01.intern': 10, 'ts02.intern': 20, 'ts03.extern': 30,}
expected_server_load = {'ts01.intern': 10, 'ts02.intern': 20, 'ts03.extern': 30,}
server_load_n, subdomains = x2gobroker.utils.normalize_hostnames(server_load)
- sln_keys = server_load_n.keys()
- esl_keys = expected_server_load.keys()
+ sln_keys = list(server_load_n.keys())
+ esl_keys = list(expected_server_load.keys())
sln_keys.sort()
esl_keys.sort()
subdomains.sort()
diff --git a/x2gobroker/tests/test_web_plain_base.py b/x2gobroker/tests/test_web_plain_base.py
index 49676e3..10ceb49 100644
--- a/x2gobroker/tests/test_web_plain_base.py
+++ b/x2gobroker/tests/test_web_plain_base.py
@@ -39,8 +39,8 @@ class TestX2GoBrokerWebPlainBase(unittest.TestCase):
[broker_base]
enable = false
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
_cf_bak = x2gobroker.defaults.X2GOBROKER_CONFIG
x2gobroker.defaults.X2GOBROKER_CONFIG = tf.name
@@ -52,8 +52,8 @@ enable = false
[broker_base]
enable = true
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
x2gobroker.defaults.X2GOBROKER_CONFIG = tf.name
testApp = TestApp(application)
@@ -73,8 +73,8 @@ enable = true
enable = true
auth-mech = testsuite
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
_cf_bak = x2gobroker.defaults.X2GOBROKER_CONFIG
x2gobroker.defaults.X2GOBROKER_CONFIG = tf.name
@@ -91,8 +91,8 @@ auth-mech = testsuite
enable = true
auth-mech = testsuite
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
_cf_bak = x2gobroker.defaults.X2GOBROKER_CONFIG
x2gobroker.defaults.X2GOBROKER_CONFIG = tf.name
diff --git a/x2gobroker/tests/test_web_plain_zeroconf.py b/x2gobroker/tests/test_web_plain_zeroconf.py
index 0882b1a..2c18d5a 100644
--- a/x2gobroker/tests/test_web_plain_zeroconf.py
+++ b/x2gobroker/tests/test_web_plain_zeroconf.py
@@ -41,8 +41,8 @@ enable = true
auth-mech = testsuite
desktop-shell = KDE
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
x2gobroker.defaults.X2GOBROKER_CONFIG = tf.name
testApp = TestApp(application)
@@ -63,8 +63,8 @@ enable = true
auth-mech = testsuite
desktop-shell = GNOME
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
x2gobroker.defaults.X2GOBROKER_CONFIG = tf.name
testApp = TestApp(application)
@@ -88,8 +88,8 @@ desktop-shell = GNOME
enable = true
auth-mech = testsuite
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
x2gobroker.defaults.X2GOBROKER_CONFIG = tf.name
testApp = TestApp(application)
diff --git a/x2gobroker/tests/test_web_uccs_zeroconf.py b/x2gobroker/tests/test_web_uccs_zeroconf.py
index 23783d2..585a0b6 100644
--- a/x2gobroker/tests/test_web_uccs_zeroconf.py
+++ b/x2gobroker/tests/test_web_uccs_zeroconf.py
@@ -40,22 +40,22 @@ class TestX2GoBrokerWebUccsZeroConf(unittest.TestCase):
def test_listsessions(self):
_expected_result = {
- u'URL': u'http://localhost:8080/uccs/zeroconf',
- u'AdditionalManagementServers': [],
- u'Name': u'X2Go Session Broker',
- u'DefaultServer': u'LOCALHOST',
- u'RemoteDesktopServers': [
+ 'URL': 'http://localhost:8080/uccs/zeroconf',
+ 'AdditionalManagementServers': [],
+ 'Name': 'X2Go Session Broker',
+ 'DefaultServer': 'LOCALHOST',
+ 'RemoteDesktopServers': [
{
- u'Username': u'',
- u'Protocol': u'x2go',
- u'Name': u'LOCALHOST',
- u'URL': u'http://localhost:22/',
- u'SessionType': u'KDE',
- u'SessionTypeRequired': True,
- u'Password': u'',
+ 'Username': '',
+ 'Protocol': 'x2go',
+ 'Name': 'LOCALHOST',
+ 'URL': 'http://localhost:22/',
+ 'SessionType': 'KDE',
+ 'SessionTypeRequired': True,
+ 'Password': '',
},
],
- u'URL': u'http://localhost:8080/uccs/zeroconf/',
+ 'URL': 'http://localhost:8080/uccs/zeroconf/',
}
_config = """
[global]
@@ -67,8 +67,8 @@ enable = true
auth-mech = testsuite
desktop-shell = KDE
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
x2gobroker.defaults.X2GOBROKER_CONFIG = tf.name
testApp = TestApp(application)
@@ -89,22 +89,22 @@ desktop-shell = KDE
def test_listsessions_uppercase_desktopcommands(self):
_expected_result = {
- u'URL': u'http://localhost:8080/uccs/zeroconf',
- u'AdditionalManagementServers': [],
- u'Name': u'X2Go Session Broker',
- u'DefaultServer': u'LOCALHOST',
- u'RemoteDesktopServers': [
+ 'URL': 'http://localhost:8080/uccs/zeroconf',
+ 'AdditionalManagementServers': [],
+ 'Name': 'X2Go Session Broker',
+ 'DefaultServer': 'LOCALHOST',
+ 'RemoteDesktopServers': [
{
- u'Username': u'',
- u'Protocol': u'x2go',
- u'Name': u'LOCALHOST',
- u'URL': u'http://localhost:22/',
- u'SessionType': u'KDE',
- u'SessionTypeRequired': True,
- u'Password': u'',
+ 'Username': '',
+ 'Protocol': 'x2go',
+ 'Name': 'LOCALHOST',
+ 'URL': 'http://localhost:22/',
+ 'SessionType': 'KDE',
+ 'SessionTypeRequired': True,
+ 'Password': '',
},
],
- u'URL': u'http://localhost:8080/uccs/zeroconf/',
+ 'URL': 'http://localhost:8080/uccs/zeroconf/',
}
_config = """
[global]
@@ -116,8 +116,8 @@ enable = true
auth-mech = testsuite
desktop-shell = kdE
"""
- tf = tempfile.NamedTemporaryFile()
- print >> tf, _config
+ tf = tempfile.NamedTemporaryFile(mode='w')
+ tf.write(_config)
tf.seek(0)
x2gobroker.defaults.X2GOBROKER_CONFIG = tf.name
testApp = TestApp(application)
diff --git a/x2gobroker/uccsjson.py b/x2gobroker/uccsjson.py
index ddf1a6c..cef28b9 100644
--- a/x2gobroker/uccsjson.py
+++ b/x2gobroker/uccsjson.py
@@ -47,9 +47,9 @@ class ManagementServer():
"""
self.RemoteDesktopServers = []
self.AdditionalManagementServers = []
- self.URL = unicode(url)
+ self.URL = url
self.URL = '{url}/'.format(url=self.URL.rstrip('/'))
- self.Name = unicode(name)
+ self.Name = name
def set_default(self, ts_name):
"""\
@@ -60,8 +60,8 @@ class ManagementServer():
"""
if isinstance(ts_name, str):
- self.DefaultServer = unicode(ts_name)
- elif isinstance(ts_name, unicode):
+ self.DefaultServer = ts_name
+ elif isinstance(ts_name, str):
self.DefaultServer = ts_name
else:
raise TypeError("set_default expects a string argument")
@@ -116,12 +116,12 @@ class RDPServer():
@type password: C{unicode}
"""
- self.URL = 'http://{url}/'.format(url=unicode(host))
- self.Name = unicode(name)
- self.Protocol = u'rdp'
+ self.URL = 'http://{url}/'.format(url=host)
+ self.Name = name
+ self.Protocol = 'rdp'
self.DomainRequired = True
- self.Username = unicode(username)
- self.Password = unicode(password)
+ self.Username = username
+ self.Password = password
def set_domain(self, domain):
"""\
@@ -134,8 +134,8 @@ class RDPServer():
"""
if isinstance(domain, str):
- self.WindowsDomain = unicode(domain)
- elif isinstance(domain, unicode):
+ self.WindowsDomain = domain
+ elif isinstance(domain, str):
self.WindowsDomain = domain
else:
raise TypeError("set_domain() expects a string or unicode argument")
@@ -165,12 +165,12 @@ class ICAServer():
@type password: C{unicode}
"""
- self.URL = 'http://{url}/'.format(url=unicode(host))
- self.Name = unicode(name)
- self.Protocol = u'ica'
- self.DomainRequired = unicode(True)
- self.Username = unicode(username)
- self.Password = unicode(password)
+ self.URL = 'http://{url}/'.format(url=host)
+ self.Name = name
+ self.Protocol = 'ica'
+ self.DomainRequired = True
+ self.Username = username
+ self.Password = password
def set_domain(self, domain):
"""\
@@ -183,8 +183,8 @@ class ICAServer():
"""
if isinstance(domain, str):
- self.WindowsDomain = unicode(domain)
- elif isinstance(domain, unicode):
+ self.WindowsDomain = domain
+ elif isinstance(domain, str):
self.WindowsDomain = domain
else:
raise TypeError("set_domain() expects a string or unicode argument")
@@ -214,12 +214,12 @@ class X2GoServer():
@type password: C{unicode}
"""
- self.URL = 'http://{url}/'.format(url=unicode(host))
- self.Name = unicode(name)
- self.Protocol = u'x2go'
+ self.URL = 'http://{url}/'.format(url=host)
+ self.Name = name
+ self.Protocol = 'x2go'
self.SessionTypeRequired = True
- self.Username = unicode(username)
- self.Password = unicode(password)
+ self.Username = username
+ self.Password = password
def set_session_type(self, session_type):
"""\
@@ -232,8 +232,8 @@ class X2GoServer():
"""
if isinstance(session_type, str):
- self.SessionType = unicode(session_type)
- elif isinstance(session_type, unicode):
+ self.SessionType = session_type
+ elif isinstance(session_type, str):
self.SessionType = session_type
else:
raise TypeError("set_session_type() expects a string or unicode argument")
diff --git a/x2gobroker/utils.py b/x2gobroker/utils.py
index 328a0b6..a5a0d4b 100644
--- a/x2gobroker/utils.py
+++ b/x2gobroker/utils.py
@@ -19,7 +19,6 @@
import os
import sys
-import types
import locale
import netaddr
import distutils.version
@@ -39,10 +38,10 @@ def _checkConfigFileDefaults(data_structure):
"""
if data_structure is None:
return False
- if type(data_structure) is not types.DictType:
+ if type(data_structure) is not dict:
return False
- for sub_dict in data_structure.values():
- if type(sub_dict) is not types.DictType:
+ for sub_dict in list(data_structure.values()):
+ if type(sub_dict) is not dict:
return False
return True
@@ -58,7 +57,7 @@ def touch_file(filename, mode='a'):
"""
if not os.path.isdir(os.path.dirname(filename)):
- os.makedirs(os.path.dirname(filename), mode=00700)
+ os.makedirs(os.path.dirname(filename), mode=0o700)
f = open(filename, mode=mode)
f.close()
@@ -112,12 +111,12 @@ def normalize_hostnames(servers):
# test the data type of servers
arg_is_dict = False
servers_normalized = []
- if type(servers) is types.DictType:
+ if type(servers) is dict:
arg_is_dict = True
servers_normalized = {}
- elif type(servers) is types.TupleType:
+ elif type(servers) is tuple:
servers=list(servers)
- elif type(servers) not in (types.ListType, types.TupleType):
+ elif type(servers) not in (list, tuple):
raise ValueError('only lists, tuples and dictionaries are valid for x2gobroker.utils.normalize_hostnames()')
subdomains = []
@@ -165,6 +164,7 @@ def matching_hostnames(server_list_a, server_list_b):
if not matching_hosts:
matching_hosts = list(set(server_list_a).intersection(set(server_list_b)))
+ matching_hosts.sort()
return matching_hosts
def drop_privileges(uid, gid):
@@ -184,15 +184,15 @@ def drop_privileges(uid, gid):
os.setuid(running_uid)
# Ensure a very conservative umask
- os.umask(077)
+ os.umask(0o077)
# set the new user's home directory as $HOME
os.environ['HOME'] = pwd.getpwnam(uid).pw_dir
def split_host_address(host, default_address=None, default_port=22):
- if type(host) is types.IntType:
- host = unicode(host)
+ if type(host) is int:
+ host = str(host)
# do some stripping first...
host = host.strip()
host = host.lstrip('*')
@@ -222,7 +222,7 @@ def split_host_address(host, default_address=None, default_port=22):
bind_address = host
else:
bind_address = '0.0.0.0'
- if type(default_port) is types.IntType:
+ if type(default_port) is int:
# use the given default, in host, there is an IP address or hostname
bind_port = default_port
else:
diff --git a/x2gobroker/web/extras.py b/x2gobroker/web/extras.py
index fe63492..0dd74bc 100644
--- a/x2gobroker/web/extras.py
+++ b/x2gobroker/web/extras.py
@@ -30,7 +30,7 @@ from x2gobroker.loggers import logger_error
class _RequestHandler(tornado.web.RequestHandler):
def _handle_request_exception(self, e):
- logger_error.error('HTTP request error: {error_msg}'.format(error_msg=unicode(e)))
+ logger_error.error('HTTP request error: {error_msg}'.format(error_msg=e))
class X2GoBrokerItWorks(_RequestHandler):
@@ -42,7 +42,7 @@ class X2GoBrokerItWorks(_RequestHandler):
def _gen_http_header(self):
- for http_header_item in self.http_header_items.keys():
+ for http_header_item in list(self.http_header_items.keys()):
self.set_header(http_header_item, self.http_header_items[http_header_item])
def get(self, *args, **kwargs):
@@ -62,7 +62,7 @@ class X2GoBrokerPubKeyService(_RequestHandler):
def _gen_http_header(self):
- for http_header_item in self.http_header_items.keys():
+ for http_header_item in list(self.http_header_items.keys()):
self.set_header(http_header_item, self.http_header_items[http_header_item])
def get(self, *args, **kwargs):
diff --git a/x2gobroker/web/json.py b/x2gobroker/web/json.py
index 96b1fd7..b28fd09 100644
--- a/x2gobroker/web/json.py
+++ b/x2gobroker/web/json.py
@@ -32,7 +32,7 @@ from x2gobroker.loggers import logger_broker, logger_error
class _RequestHandler(tornado.web.RequestHandler):
def _handle_request_exception(self, e):
- logger_error.error('HTTP request error: {error_msg}'.format(error_msg=unicode(e)))
+ logger_error.error('HTTP request error: {error_msg}'.format(error_msg=e))
tornado.web.RequestHandler._handle_request_exception(self, e)
@@ -45,7 +45,7 @@ class X2GoBrokerWeb(_RequestHandler):
def _gen_http_header(self):
- for http_header_item in self.http_header_items.keys():
+ for http_header_item in list(self.http_header_items.keys()):
self.set_header(http_header_item, self.http_header_items[http_header_item])
def get(self, backend):
@@ -69,8 +69,9 @@ class X2GoBrokerWeb(_RequestHandler):
broker_backend = None
try:
# dynamically detect broker backend from given URL
- exec("import x2gobroker.brokers.{backend}_broker".format(backend=backend))
- exec("broker_backend = x2gobroker.brokers.{backend}_broker.X2GoBroker()".format(backend=backend))
+ namespace = {}
+ exec("import x2gobroker.brokers.{backend}_broker\nbroker_backend = x2gobroker.brokers.{backend}_broker.X2GoBroker()".format(backend=backend), namespace)
+ broker_backend = namespace['broker_backend']
except ImportError:
# throw a 404 if the backend does not exist
logger_error.error('No such broker backend \'{backend}\''.format(backend=backend))
@@ -91,7 +92,7 @@ class X2GoBrokerWeb(_RequestHandler):
# FIXME: this is to work around a bug in X2Go Client (http://bugs.x2go.org/138)
content_type = self.request.headers.get("Content-Type", "")
if not content_type.startswith("application/x-www-form-urlencoded"):
- for name, values in parse_qs_bytes(native_str(self.request.body)).iteritems():
+ for name, values in parse_qs_bytes(native_str(self.request.body)).items():
self.request.arguments.setdefault(name, []).extend(values)
# set the client address for the broker backend
@@ -173,20 +174,20 @@ class X2GoBrokerWeb(_RequestHandler):
selected_session = {}
profile_info = broker_backend.select_session(profile_id=profile_id, username=username, pubkey=pubkey)
- if profile_info.has_key('server'):
+ if 'server' in profile_info:
username, password, task, profile_id, ip, cookie, authed, server = broker_backend.run_optional_script(script_type='select_session_scripts', username=username, password=password, task=task, profile_id=profile_id, ip=ip, cookie=cookie, authed=access, server=profile_info['server'])
selected_session['server'] = "{server}".format(server=server)
- if profile_info.has_key('port'):
+ if 'port' in profile_info:
selected_session['port'] = "{port}".format(port=profile_info['port'])
else:
selected_session['port'] = "22"
- if profile_info.has_key('authentication_privkey'):
+ if 'authentication_privkey' in profile_info:
selected_session['key'] = profile_info['authentication_privkey']
- if profile_info.has_key('authentication_pubkey'):
+ if 'authentication_pubkey' in profile_info:
selected_session['authentication_pubkey'] = profile_info['authentication_pubkey']
- if profile_info.has_key('session_info'):
+ if 'session_info' in profile_info:
selected_session['session_info'] = profile_info['session_info']
payload['selected_session'] = selected_session
diff --git a/x2gobroker/web/plain.py b/x2gobroker/web/plain.py
index d870489..a83df03 100644
--- a/x2gobroker/web/plain.py
+++ b/x2gobroker/web/plain.py
@@ -17,7 +17,6 @@
# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
# modules
-import types
import tornado.web
from tornado.escape import native_str, parse_qs_bytes
@@ -29,7 +28,7 @@ from x2gobroker.loggers import logger_broker, logger_error
class _RequestHandler(tornado.web.RequestHandler):
def _handle_request_exception(self, e):
- logger_error.error('HTTP request error: {error_msg}'.format(error_msg=unicode(e)))
+ logger_error.error('HTTP request error: {error_msg}'.format(error_msg=e))
tornado.web.RequestHandler._handle_request_exception(self, e)
@@ -42,7 +41,7 @@ class X2GoBrokerWeb(_RequestHandler):
def _gen_http_header(self):
- for http_header_item in self.http_header_items.keys():
+ for http_header_item in list(self.http_header_items.keys()):
self.set_header(http_header_item, self.http_header_items[http_header_item])
def get(self, backend):
@@ -65,9 +64,10 @@ class X2GoBrokerWeb(_RequestHandler):
# silence pyflakes...
broker_backend = None
try:
+ namespace = {}
# dynamically detect broker backend from given URL
- exec("import x2gobroker.brokers.{backend}_broker".format(backend=backend))
- exec("broker_backend = x2gobroker.brokers.{backend}_broker.X2GoBroker()".format(backend=backend))
+ exec("import x2gobroker.brokers.{backend}_broker\nbroker_backend = x2gobroker.brokers.{backend}_broker.X2GoBroker()".format(backend=backend), namespace)
+ broker_backend = namespace['broker_backend']
except ImportError:
# throw a 404 if the backend does not exist
logger_error.error('No such broker backend \'{backend}\''.format(backend=backend))
@@ -88,7 +88,7 @@ class X2GoBrokerWeb(_RequestHandler):
# FIXME: this is to work around a bug in X2Go Client (http://bugs.x2go.org/138)
content_type = self.request.headers.get("Content-Type", "")
if not content_type.startswith("application/x-www-form-urlencoded"):
- for name, values in parse_qs_bytes(native_str(self.request.body)).iteritems():
+ for name, values in parse_qs_bytes(native_str(self.request.body)).items():
self.request.arguments.setdefault(name, []).extend(values)
# set the client address for the broker backend
@@ -147,17 +147,17 @@ class X2GoBrokerWeb(_RequestHandler):
profiles = broker_backend.list_profiles(username)
if profiles:
output += "START_USER_SESSIONS\n\n"
- profile_ids = profiles.keys()
+ profile_ids = list(profiles.keys())
profile_ids.sort()
for profile_id in profile_ids:
output += "[{profile_id}]\n".format(profile_id=profile_id)
- for key in profiles[profile_id].keys():
- if type(profiles[profile_id][key]) in (types.UnicodeType, types.StringType):
- output += "{key}={value}".format(key=key, value=unicode(profiles[profile_id][key]))
- elif type(profiles[profile_id][key]) in (types.ListType, types.TupleType):
- output += "{key}={value}".format(key=key, value=unicode(",".join(profiles[profile_id][key])))
+ for key in list(profiles[profile_id].keys()):
+ if type(profiles[profile_id][key]) == str:
+ output += "{key}={value}".format(key=key, value=profiles[profile_id][key])
+ elif type(profiles[profile_id][key]) in (list, tuple):
+ output += "{key}={value}".format(key=key, value=",".join(profiles[profile_id][key]))
else:
- output += "{key}={value}".format(key=key, value=unicode(int(profiles[profile_id][key])))
+ output += "{key}={value}".format(key=key, value=int(profiles[profile_id][key]))
output += "\n"
output += "\n"
@@ -170,16 +170,16 @@ class X2GoBrokerWeb(_RequestHandler):
profile_info = broker_backend.select_session(profile_id=profile_id, username=username, pubkey=pubkey)
- if profile_info.has_key('server'):
+ if 'server' in profile_info:
username, password, task, profile_id, ip, cookie, authed, server = broker_backend.run_optional_script(script_type='select_session_scripts', username=username, password=password, task=task, profile_id=profile_id, ip=ip, cookie=cookie, authed=access, server=profile_info['server'])
output += "SERVER:"
output += server
- if profile_info.has_key('port'):
+ if 'port' in profile_info:
output += ":{port}".format(port=profile_info['port'])
output += "\n"
- if profile_info.has_key('authentication_privkey'):
+ if 'authentication_privkey' in profile_info:
output += profile_info['authentication_privkey']
- if profile_info.has_key('session_info'):
+ if 'session_info' in profile_info:
output += "SESSION_INFO:"
output += profile_info['session_info'] + "\n"
diff --git a/x2gobroker/web/uccs.py b/x2gobroker/web/uccs.py
index c1ab032..bad8307 100644
--- a/x2gobroker/web/uccs.py
+++ b/x2gobroker/web/uccs.py
@@ -18,7 +18,6 @@
# modules
import datetime
-import types
import random
import tornado.web
@@ -49,7 +48,7 @@ def credentials_validate(username, password):
class _RequestHandler(tornado.web.RequestHandler):
def _handle_request_exception(self, e):
- logger_error.error('HTTP request error: {error_msg}'.format(error_msg=unicode(e)))
+ logger_error.error('HTTP request error: {error_msg}'.format(error_msg=e))
class X2GoBrokerWeb(_RequestHandler):
@@ -61,7 +60,7 @@ class X2GoBrokerWeb(_RequestHandler):
raise tornado.web.HTTPError(405)
def head(self, path):
- self.write(unicode(datetime.datetime.utcnow()))
+ self.write(datetime.datetime.utcnow())
return
@@ -75,7 +74,7 @@ class X2GoBrokerWebAPI(tornado.web.RequestHandler):
def _gen_http_header(self):
- for http_header_item in self.http_header_items.keys():
+ for http_header_item in list(self.http_header_items.keys()):
self.set_header(http_header_item, self.http_header_items[http_header_item])
def get(self, *args, **kwargs):
@@ -96,8 +95,9 @@ class X2GoBrokerWebAPI(tornado.web.RequestHandler):
try:
# dynamically detect broker backend from given URL
- exec("import x2gobroker.brokers.{backend}_broker".format(backend=self.backend))
- exec("self.broker_backend = x2gobroker.brokers.{backend}_broker.X2GoBroker()".format(backend=self.backend))
+ namespace = {}
+ exec("import x2gobroker.brokers.{backend}_broker\nbroker_backend = x2gobroker.brokers.{backend}_broker.X2GoBroker()".format(backend=self.backend), namespace)
+ self.broker_backend = namespace['broker_backend']
except ImportError:
# throw a 404 if the backend does not exist
raise tornado.web.HTTPError(404)
@@ -148,28 +148,28 @@ class X2GoBrokerWebAPI(tornado.web.RequestHandler):
for profile_id in profile_ids:
profile = self.broker_backend.get_profile_for_user(profile_id, username, broker_frontend='uccs')
- hosts = profile[u'host']
- if type(hosts) == types.UnicodeType:
+ hosts = profile['host']
+ if type(hosts) == str:
hosts = [hosts]
- if profile[u'directrdp']:
+ if profile['directrdp']:
ts = x2gobroker.uccsjson.RDPServer(
host='{hostname}'.format(hostname=hosts[0]),
- name=profile[u'name'],
- username=profile[u'user'],
+ name=profile['name'],
+ username=profile['user'],
)
ts.set_domain('LOCAL')
else:
_hostname = random.choice(hosts)
- _port = profile[u'sshport']
- if profile.has_key('sshport={hostname}'.format(hostname=_hostname)):
+ _port = profile['sshport']
+ if 'sshport={hostname}'.format(hostname=_hostname) in profile:
_port = profile['sshport={hostname}'.format(hostname=_hostname)]
- if profile.has_key('host={hostname}'.format(hostname=_hostname)):
+ if 'host={hostname}'.format(hostname=_hostname) in profile:
_hostname = profile['host={hostname}'.format(hostname=_hostname)]
ts = x2gobroker.uccsjson.X2GoServer(
host='{hostname}:{port}'.format(hostname=_hostname, port=_port),
- name=profile[u'name'],
- username=profile[u'user'],
+ name=profile['name'],
+ username=profile['user'],
)
_cmd = profile['command']
if _cmd.upper() in x2gobroker.defaults.X2GO_DESKTOP_SESSIONS:
diff --git a/x2gobroker/x2gobroker_exceptions.py b/x2gobroker/x2gobroker_exceptions.py
index 01af933..4dcfe0a 100644
--- a/x2gobroker/x2gobroker_exceptions.py
+++ b/x2gobroker/x2gobroker_exceptions.py
@@ -17,7 +17,7 @@
# Free Software Foundation, Inc.,
# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-from loggers import logger_error
+from x2gobroker.loggers import logger_error
class X2GoBrokerBaseException(BaseException):
def __init__(self, *args, **kwargs):
--
Alioth's /srv/git/code.x2go.org/x2gobroker.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2gobroker.git
More information about the x2go-commits
mailing list