diff --git a/client/full/linux/debian/control b/client/full/linux/debian/control index 60ca22e04..119860a86 100644 --- a/client/full/linux/debian/control +++ b/client/full/linux/debian/control @@ -10,6 +10,6 @@ Package: udsclient Section: admin Priority: optional Architecture: all -Depends: python-paramiko (>=0.8.2), python-qt4 (>=4.9), python-six(>=1.1), python (>=2.7), rdesktop | freerdp-x11, desktop-file-utils, ${misc:Depends} +Depends: python-paramiko (>=0.8.2), python-qt4 (>=4.9), python-six(>=1.1), python (>=2.7), freerdp-x11 | rdesktop, desktop-file-utils, ${misc:Depends} Description: Client connector for Universal Desktop Services (UDS) Broker This package provides the required components to allow this machine to connect to services provided by UDS Broker. diff --git a/server/src/uds/transports/NX/NXTransport.py b/server/src/uds/transports/NX/NXTransport.py index 762915c2b..1cc7949bb 100644 --- a/server/src/uds/transports/NX/NXTransport.py +++ b/server/src/uds/transports/NX/NXTransport.py @@ -28,11 +28,11 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -""" +''' Created on Jul 29, 2011 @author: Adolfo Gómez, dkmaster at dkmon dot com -""" +''' from django.utils.translation import ugettext_noop as _ from uds.core.managers.UserPrefsManager import CommonPrefs from uds.core.ui.UserInterface import gui @@ -50,13 +50,13 @@ READY_CACHE_TIMEOUT = 30 class NXTransport(Transport): - """ + ''' Provides access via RDP to service. This transport can use an domain. If username processed by authenticator contains '@', it will split it and left-@-part will be username, and right password - """ - typeName = _('NX Transport (direct)') + ''' + typeName = _('NX Transport') typeType = 'NXTransport' - typeDescription = _('NX Transport for direct connection') + typeDescription = _('NX Protocol. Firect connection.') iconFile = 'nx.png' protocol = protocols.NX @@ -119,9 +119,9 @@ class NXTransport(Transport): self._cacheMem = '' def marshal(self): - """ + ''' Serializes the transport data so we can store it in database - """ + ''' return str.join('\t', ['v1', gui.boolToStr(self._useEmptyCreds), self._fixedName, self._fixedPassword, self._listenPort, self._connection, self._session, self._cacheDisk, self._cacheMem]) @@ -144,10 +144,10 @@ class NXTransport(Transport): } def isAvailableFor(self, userService, ip): - """ + ''' Checks if the transport is available for the requested destination ip Override this in yours transports - """ + ''' logger.debug('Checking availability for {0}'.format(ip)) ready = self.cache.get(ip) if ready is None: diff --git a/server/src/uds/transports/NX/TSNXTransport.py b/server/src/uds/transports/NX/TSNXTransport.py index 44eacd1da..90b7a717d 100644 --- a/server/src/uds/transports/NX/TSNXTransport.py +++ b/server/src/uds/transports/NX/TSNXTransport.py @@ -28,11 +28,11 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -""" +''' Created on Jul 29, 2011 @author: Adolfo Gómez, dkmaster at dkmon dot com -""" +''' from django.utils.translation import ugettext_noop as _ from uds.core.managers.UserPrefsManager import CommonPrefs from uds.core.ui.UserInterface import gui @@ -55,13 +55,13 @@ READY_CACHE_TIMEOUT = 30 class TSNXTransport(Transport): - """ + ''' Provides access via RDP to service. This transport can use an domain. If username processed by authenticator contains '@', it will split it and left-@-part will be username, and right password - """ - typeName = _('NX Transport (tunneled)') + ''' + typeName = _('NX Transport') typeType = 'TSNXTransport' - typeDescription = _('NX Transport for tunneled connection') + typeDescription = _('NX protocol. Tunneled connection.') iconFile = 'nx.png' needsJava = True # If this transport needs java for rendering protocol = protocols.NX @@ -135,9 +135,9 @@ class TSNXTransport(Transport): self._cacheMem = '' def marshal(self): - """ + ''' Serializes the transport data so we can store it in database - """ + ''' return str.join('\t', ['v1', gui.boolToStr(self._useEmptyCreds), self._fixedName, self._fixedPassword, self._listenPort, self._connection, self._session, self._cacheDisk, self._cacheMem, self._tunnelServer, self._tunnelCheckServer]) @@ -162,10 +162,10 @@ class TSNXTransport(Transport): } def isAvailableFor(self, userService, ip): - """ + ''' Checks if the transport is available for the requested destination ip Override this in yours transports - """ + ''' logger.debug('Checking availability for {0}'.format(ip)) ready = self.cache.get(ip) if ready is None: diff --git a/server/src/uds/transports/RDP/BaseRDPTransport.py b/server/src/uds/transports/RDP/BaseRDPTransport.py index 42b204890..74c9f88a7 100644 --- a/server/src/uds/transports/RDP/BaseRDPTransport.py +++ b/server/src/uds/transports/RDP/BaseRDPTransport.py @@ -40,7 +40,7 @@ from uds.core.transports import protocols import logging import os -__updated__ = '2017-12-15' +__updated__ = '2017-12-18' logger = logging.getLogger(__name__) @@ -60,12 +60,14 @@ class BaseRDPTransport(Transport): fixedPassword = gui.PasswordField(label=_('Password'), order=13, tooltip=_('If not empty, this password will be always used as credential'), tab=gui.CREDENTIALS_TAB) withoutDomain = gui.CheckBoxField(label=_('Without Domain'), order=14, tooltip=_('If checked, the domain part will always be emptied (to connect to xrdp for example is needed)'), tab=gui.CREDENTIALS_TAB) fixedDomain = gui.TextField(label=_('Domain'), order=15, tooltip=_('If not empty, this domain will be always used as credential (used as DOMAIN\\user)'), tab=gui.CREDENTIALS_TAB) + allowSmartcards = gui.CheckBoxField(label=_('Allow Smartcards'), order=20, tooltip=_('If checked, this transport will allow the use of smartcards'), tab=gui.PARAMETERS_TAB) allowPrinters = gui.CheckBoxField(label=_('Allow Printers'), order=21, tooltip=_('If checked, this transport will allow the use of user printers'), tab=gui.PARAMETERS_TAB) allowDrives = gui.CheckBoxField(label=_('Allow Drives'), order=22, tooltip=_('If checked, this transport will allow the use of user drives'), tab=gui.PARAMETERS_TAB) allowSerials = gui.CheckBoxField(label=_('Allow Serials'), order=23, tooltip=_('If checked, this transport will allow the use of user serial ports'), tab=gui.PARAMETERS_TAB) allowClipboard = gui.CheckBoxField(label=_('Enable clipboard'), order=24, tooltip=_('If checked, copy-paste functions will be allowed'), tab=gui.PARAMETERS_TAB, defvalue=gui.TRUE) - credssp = gui.CheckBoxField(label=_('Credssp Support'), order=25, tooltip=_('If checked, will enable Credentials Provider Support)'), tab=gui.PARAMETERS_TAB) + allowAudio = gui.CheckBoxField(label=_('Enable sound'), order=25, tooltip=_('If checked, sound will be redirected.'), tab=gui.PARAMETERS_TAB, defvalue=gui.TRUE) + credssp = gui.CheckBoxField(label=_('Credssp Support'), order=26, tooltip=_('If checked, will enable Credentials Provider Support)'), tab=gui.PARAMETERS_TAB) screenSize = gui.ChoiceField( label=_('Screen Size'), diff --git a/server/src/uds/transports/RDP/RDPFile.py b/server/src/uds/transports/RDP/RDPFile.py index f9b4bd72c..a6be27450 100644 --- a/server/src/uds/transports/RDP/RDPFile.py +++ b/server/src/uds/transports/RDP/RDPFile.py @@ -39,7 +39,7 @@ from uds.core.util import OsDetector import six import shlex -__updated__ = '2017-11-29' +__updated__ = '2017-12-19' class RDPFile(object): @@ -100,12 +100,15 @@ class RDPFile(object): if self.enableClipboard: params.append('/clipboard') - if self.redirectSmartcards and self.smartcardString not in (None, ''): - params.append('/smartcard:{}'.format(self.smartcardString)) + if self.redirectSmartcards: + if self.smartcardString not in (None, ''): + params.append('/smartcard:{}'.format(self.smartcardString)) + else: + params.append('/smartcard') if self.redirectAudio: if self.alsa: - params.append('/sound:sys:alsa') + params.append('/sound:sys:alsa,format:1,quality:high') params.append('/microphone:sys:alsa') if self.multimedia: params.append('/multimedia:sys:alsa') diff --git a/server/src/uds/transports/RDP/RDPTransport.py b/server/src/uds/transports/RDP/RDPTransport.py index caba5a01c..dd3fec200 100644 --- a/server/src/uds/transports/RDP/RDPTransport.py +++ b/server/src/uds/transports/RDP/RDPTransport.py @@ -44,7 +44,7 @@ logger = logging.getLogger(__name__) READY_CACHE_TIMEOUT = 30 -__updated__ = '2017-12-15' +__updated__ = '2017-12-19' class RDPTransport(BaseRDPTransport): @@ -52,9 +52,9 @@ class RDPTransport(BaseRDPTransport): Provides access via RDP to service. This transport can use an domain. If username processed by authenticator contains '@', it will split it and left-@-part will be username, and right password ''' - typeName = _('RDP Transport (direct)') + typeName = _('RDP Transport') typeType = 'RDPTransport' - typeDescription = _('RDP Transport for direct connection') + typeDescription = _('RDP Protocol. Direct connection.') useEmptyCreds = BaseRDPTransport.useEmptyCreds fixedName = BaseRDPTransport.fixedName @@ -66,6 +66,8 @@ class RDPTransport(BaseRDPTransport): allowDrives = BaseRDPTransport.allowDrives allowSerials = BaseRDPTransport.allowSerials allowClipboard = BaseRDPTransport.allowClipboard + allowAudio = BaseRDPTransport.allowAudio + wallpaper = BaseRDPTransport.wallpaper multimon = BaseRDPTransport.multimon aero = BaseRDPTransport.aero @@ -104,6 +106,7 @@ class RDPTransport(BaseRDPTransport): r.redirectDrives = self.allowDrives.isTrue() r.redirectSerials = self.allowSerials.isTrue() r.enableClipboard = self.allowClipboard.isTrue() + r.redirectAudio = self.allowAudio.isTrue() r.showWallpaper = self.wallpaper.isTrue() r.multimon = self.multimon.isTrue() r.desktopComposition = self.aero.isTrue() diff --git a/server/src/uds/transports/RDP/TRDPTransport.py b/server/src/uds/transports/RDP/TRDPTransport.py index e3d1d1383..ddb52ed35 100644 --- a/server/src/uds/transports/RDP/TRDPTransport.py +++ b/server/src/uds/transports/RDP/TRDPTransport.py @@ -48,7 +48,7 @@ import logging import random import string -__updated__ = '2017-12-15' +__updated__ = '2017-12-19' logger = logging.getLogger(__name__) @@ -60,9 +60,9 @@ class TRDPTransport(BaseRDPTransport): Provides access via RDP to service. This transport can use an domain. If username processed by authenticator contains '@', it will split it and left-@-part will be username, and right password ''' - typeName = _('RDP Transport (tunneled)') + typeName = _('RDP Transport') typeType = 'TSRDPTransport' - typeDescription = _('RDP Transport with tunneled connection') + typeDescription = _('RDP Protocol. Tunneled connection.') needsJava = True # If this transport needs java for rendering protocol = protocols.RDP group = TUNNELED_GROUP @@ -82,6 +82,8 @@ class TRDPTransport(BaseRDPTransport): allowDrives = BaseRDPTransport.allowDrives allowSerials = BaseRDPTransport.allowSerials allowClipboard = BaseRDPTransport.allowClipboard + allowAudio = BaseRDPTransport.allowAudio + wallpaper = BaseRDPTransport.wallpaper multimon = BaseRDPTransport.multimon aero = BaseRDPTransport.aero @@ -132,6 +134,7 @@ class TRDPTransport(BaseRDPTransport): r.redirectDrives = self.allowDrives.isTrue() r.redirectSerials = self.allowSerials.isTrue() r.enableClipboard = self.allowClipboard.isTrue() + r.redirectAudio = self.allowAudio.isTrue() r.showWallpaper = self.wallpaper.isTrue() r.multimon = self.multimon.isTrue() r.desktopComposition = self.aero.isTrue() diff --git a/server/src/uds/transports/SPICE/SPICETransport.py b/server/src/uds/transports/SPICE/SPICETransport.py index d4c5c2a14..0f9e6ae37 100644 --- a/server/src/uds/transports/SPICE/SPICETransport.py +++ b/server/src/uds/transports/SPICE/SPICETransport.py @@ -27,9 +27,9 @@ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -""" +''' @author: Adolfo Gómez, dkmaster at dkmon dot com -""" +''' from django.utils.translation import ugettext_noop as _ from uds.core.util import OsDetector @@ -39,19 +39,19 @@ from .RemoteViewerFile import RemoteViewerFile import logging -__updated__ = '2017-05-09' +__updated__ = '2017-12-19' logger = logging.getLogger(__name__) class SPICETransport(BaseSpiceTransport): - """ + ''' Provides access via SPICE to service. This transport can use an domain. If username processed by authenticator contains '@', it will split it and left-@-part will be username, and right password - """ - typeName = _('SPICE Transport (direct)') + ''' + typeName = _('SPICE Transport') typeType = 'SPICETransport' - typeDescription = _('SPICE Transport for direct connection (EXPERIMENTAL)') + typeDescription = _('SPICE Protocol. Direct connection.') # useEmptyCreds = BaseSpiceTransport.useEmptyCreds # fixedName = BaseSpiceTransport.fixedName diff --git a/server/src/uds/transports/SPICE/TSPICETransport.py b/server/src/uds/transports/SPICE/TSPICETransport.py index 75d40eea7..ce70e8128 100644 --- a/server/src/uds/transports/SPICE/TSPICETransport.py +++ b/server/src/uds/transports/SPICE/TSPICETransport.py @@ -27,9 +27,9 @@ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -""" +''' @author: Adolfo Gómez, dkmaster at dkmon dot com -""" +''' from django.utils.translation import ugettext_noop as _ from uds.core.ui.UserInterface import gui @@ -47,19 +47,19 @@ import logging import random import string -__updated__ = '2017-05-09' +__updated__ = '2017-12-19' logger = logging.getLogger(__name__) class TSPICETransport(BaseSpiceTransport): - """ + ''' Provides access via SPICE to service. This transport can use an domain. If username processed by authenticator contains '@', it will split it and left-@-part will be username, and right password - """ - typeName = _('SPICE Transport (tunneled)') + ''' + typeName = _('SPICE Transport ') typeType = 'TSSPICETransport' - typeDescription = _('SPICE Transport for tunneled connection (EXPERIMENTAL)') + typeDescription = _('SPICE Protocol. Tunneled connection.') protocol = protocols.SPICE group = TUNNELED_GROUP diff --git a/server/src/uds/transports/X2GO/TX2GOTransport.py b/server/src/uds/transports/X2GO/TX2GOTransport.py index c5a708138..38cd3d7d6 100644 --- a/server/src/uds/transports/X2GO/TX2GOTransport.py +++ b/server/src/uds/transports/X2GO/TX2GOTransport.py @@ -27,9 +27,9 @@ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -""" +''' @author: Adolfo Gómez, dkmaster at dkmon dot com -""" +''' from django.utils.translation import ugettext_noop as _ from uds.core.ui.UserInterface import gui @@ -45,19 +45,19 @@ import logging import random import string -__updated__ = '2017-12-14' +__updated__ = '2017-12-19' logger = logging.getLogger(__name__) class TX2GOTransport(BaseX2GOTransport): - """ + ''' Provides access via SPICE to service. This transport can use an domain. If username processed by authenticator contains '@', it will split it and left-@-part will be username, and right password - """ - typeName = _('X2Go Transport Experimental (tunneled)') + ''' + typeName = _('X2Go Transport (Experimental)') typeType = 'TX2GOTransport' - typeDescription = _('X2Go Transport for tunneled connection (EXPERIMENTAL)') + typeDescription = _('X2Go Protocol (Experimental). Tunneled connection.') group = TUNNELED_GROUP tunnelServer = gui.TextField(label=_('Tunnel server'), order=1, tooltip=_('IP or Hostname of tunnel server sent to client device ("public" ip) and port. (use HOST:PORT format)'), tab=gui.TUNNEL_TAB) diff --git a/server/src/uds/transports/X2GO/X2GOTransport.py b/server/src/uds/transports/X2GO/X2GOTransport.py index 44cded46f..6747c3e39 100644 --- a/server/src/uds/transports/X2GO/X2GOTransport.py +++ b/server/src/uds/transports/X2GO/X2GOTransport.py @@ -27,9 +27,9 @@ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -""" +''' @author: Adolfo Gómez, dkmaster at dkmon dot com -""" +''' from django.utils.translation import ugettext_noop as _ from uds.core.managers.UserPrefsManager import CommonPrefs @@ -38,22 +38,21 @@ from uds.core.util import tools from .BaseX2GOTransport import BaseX2GOTransport from . import x2gofile -import six import logging -__updated__ = '2017-12-14' +__updated__ = '2017-12-19' logger = logging.getLogger(__name__) class X2GOTransport(BaseX2GOTransport): - """ + ''' Provides access via SPICE to service. This transport can use an domain. If username processed by authenticator contains '@', it will split it and left-@-part will be username, and right password - """ - typeName = _('X2Go Transport Experimental (direct)') + ''' + typeName = _('X2Go Transport Experimental') typeType = 'X2GOTransport' - typeDescription = _('X2Go Transport for direct connection (EXPERIMENTAL)') + typeDescription = _('X2Go Protocol (Experimental). Direct connection.') fixedName = BaseX2GOTransport.fixedName # fullScreen = BaseX2GOTransport.fullScreen