From f3ff635b75afbc19dbaa87bd711327c06967f0fe Mon Sep 17 00:00:00 2001 From: aschumann-virtualcable Date: Thu, 28 May 2026 16:26:04 +0200 Subject: [PATCH 1/3] fix(RDP/macosx): prevent EACCES launching MSRDC/Windows App The `if kind == 'thincast'` branch was independent from the `if kind == 'msrdc'` block, so its trailing `else` (intended for xfreerdp/udsrdp) also ran when `kind == 'msrdc'`. That caused a second `subprocess.Popen([executable, ...])` on the .app bundle path, raising `[Errno 13] Permission denied: '/Applications/Windows App.app'` after the real `open -a` launch already worked. Chains the second condition as `elif` so MSRDC no longer falls through to the xfreerdp/udsrdp launcher. Signatures regenerated. --- server/src/uds/transports/RDP/scripts/macosx/direct.py | 2 +- .../uds/transports/RDP/scripts/macosx/direct.py.signature | 2 +- server/src/uds/transports/RDP/scripts/macosx/tunnel.py | 7 ++++--- .../uds/transports/RDP/scripts/macosx/tunnel.py.signature | 2 +- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/server/src/uds/transports/RDP/scripts/macosx/direct.py b/server/src/uds/transports/RDP/scripts/macosx/direct.py index 5c9ea8d04..05af1d417 100644 --- a/server/src/uds/transports/RDP/scripts/macosx/direct.py +++ b/server/src/uds/transports/RDP/scripts/macosx/direct.py @@ -153,7 +153,7 @@ def fix_resolution() -> typing.List[str]: tools.addFileToUnlink(filename + '.rdp') # type: ignore -if kind == 'thincast': +elif kind == 'thincast': if sp['as_file']: # type: ignore theFile = sp['as_file'] # type: ignore filename = tools.saveTempFile(theFile) # type: ignore diff --git a/server/src/uds/transports/RDP/scripts/macosx/direct.py.signature b/server/src/uds/transports/RDP/scripts/macosx/direct.py.signature index 73bd92183..0ddeb8738 100644 --- a/server/src/uds/transports/RDP/scripts/macosx/direct.py.signature +++ b/server/src/uds/transports/RDP/scripts/macosx/direct.py.signature @@ -1 +1 @@ -tZTC05CzHcK1sn+ACLyJIWyoey+yib/0Z2Q5/6oCsXsx+4Yeba7sYjnyfy1f4y6JX7jiYWeO9zn/HZCdhK6N+IRnkhOJrvpS3cON93RCAcSjQ98zUSfDEaHCK5kIK1zfknA/tPw/boRJRAbaDpyyJA2A4C6SynC+HAnuM7Q2QMUrKJQx6sqEu+mtoammEwMfEeJNjCW2oYCPDQWUUTdzWZBJwp4yIjXaIASsq/lKnvZD7eyyyAFOawzX3vthqrA4cHNOUEsKGR1usZg82CBYdATs2eQUEuoyP936cgAjSDwGE1t5jyvex41sXsVTvs0IjjWMsuv51w6gt0AviZl5Z9SokK48v56NIA/G00TFCsMvmzK5VGQ1w27njeWe3BbXgz2x6kWxgjGZA4KRbeS+YAEERlYyT8aGsadoM9WQ1FUqiQgCm+SKs9h424P6/IbY3NDHnn8AFfvhp7F3v44U1SxXSxhogbYj4Qz9j/RwjIG30RmMgM9aAHJyoDuwFWC9uPu2iQtFYE1Y3txK93r4PS2x9OiXekd5Rjo2kJPWdr+gDQYRqwy5gBjYRwspJ+8H1qR7/YLOwLakWZlMOOSiWLzyshmJ4C7ITKV6gwN15wQs2Aby3GKMenrJf8aJoHtFd1qp8NIXFaI8IJwMY6z/p1CqwaGrglYNFL+A3CWB5hk= \ No newline at end of file +k6mrISFoFElYne8X/ZwlCFcjiQcRLF/5llTesgAdSeY0WxkWdc7s9GMRdElIGsg8pK+wSUCEYNwmRC0CVN2ITLJ6u5jmsq3b65YwHVuVrleMI/Ep7JxXAcxWyowtFVVCDputTLlHRVaRQwzpbsd+ZtSXBQJP4Znssb/Pmdj3wOUa2pRHmX4nfDWhS5F5Rj6LHL1YiYXtd88s0jVhPXmq4xZWGKAkJqDKfWk85J/k58X+NmTSNk9J6ASZMFDsuOXSAnojk4DSA/KFhYDr7boXEMbvSU4toQATTw7fQ+08OA4ZdlAG7bhKmUQ7zOWOwUk2SrLE0f/Dws0GFj0AP7CwtCne32udeZrtd23Hu5r7gP8Q4592FqciQaEVRiKOkpEWQDq1jeaXH2F7qot2lCVkGqnO4cvlxJoFlebod8OxkJdffSOcenKj2ORxAAFy4evL/TIUnMaVPfNGUhlLW/3yEZ83IlhW7YAFuSCA0sc77Hejpf31IPEmbzx+xjTvbr4XYY51oKUKqIr/ssqef9KyOLkMIqDkII83x0Wpx5RHoxu+zqkp003VL7jvJPNoRBQMEKgq2lvT953iwiIx2K+HG26Ae5Kg02wALItlr3xgwoRK0wmsf/eLIj2K83NbgFW8klI6zvf6qOKAzhlnmPcUUWosgcjHNFuTlx/2JcyppMQ= \ No newline at end of file diff --git a/server/src/uds/transports/RDP/scripts/macosx/tunnel.py b/server/src/uds/transports/RDP/scripts/macosx/tunnel.py index c1d37dec6..1398f417e 100644 --- a/server/src/uds/transports/RDP/scripts/macosx/tunnel.py +++ b/server/src/uds/transports/RDP/scripts/macosx/tunnel.py @@ -70,8 +70,9 @@ def fix_resolution() -> typing.List[str]: logger.debug('Searching for UDSRDP') udsrdp = tools.findApp('udsrdp') # type: ignore if udsrdp and os.path.isfile(udsrdp): # type: ignore - logger.debug('UDSRDP found: %s', udsrdp) - executable = udsrdp # type: ignore + udsrdp_path = typing.cast(str, udsrdp) + logger.debug('UDSRDP found: %s', udsrdp_path) + executable = udsrdp_path kind = 'udsrdp' # If UDSRDP not found, search Thincast @@ -171,7 +172,7 @@ def fix_resolution() -> typing.List[str]: ) tools.addFileToUnlink(filename + '.rdp') # type: ignore -if kind == 'thincast': +elif kind == 'thincast': if sp['as_file']: # type: ignore theFile = sp['as_file'] # type: ignore theFile = theFile.format( # type: ignore diff --git a/server/src/uds/transports/RDP/scripts/macosx/tunnel.py.signature b/server/src/uds/transports/RDP/scripts/macosx/tunnel.py.signature index 3ac3e1173..20b7e3952 100644 --- a/server/src/uds/transports/RDP/scripts/macosx/tunnel.py.signature +++ b/server/src/uds/transports/RDP/scripts/macosx/tunnel.py.signature @@ -1 +1 @@ -BnMXDzuuKjCcpfmHYuVYJkhHgFy4jBKuZUmffYGZwdsrSv9vlOFzyMnImGB7zEhqrlvy7agObr4+gK1xHqI48KRMD2EhcVFyjd4viQPFFzOzhcRRmuL1e997JFcNFP7sJnm9uObjlAWWt3IK/3JKBrzmTJT1iKwZBqiS1OgvNagyf/oSOiM/iaIpmlOXe3zyapJOS/rv9QrNlRq0E/sc63GR4PBQdlUIYL2qpydySM1jLEMCz6OPcPYegBfZP0XtqAwDPIyQ0hRf13LJYn5mWzyIYL4+fwCc1Cy8vZp1Ae8ISfzn27zobbq+KKvMtqq5eoKcyV+H6OuabN56l/7tRTj2MYY+I8sUaf/KErt81fu0igvH6P1lo4xQZCpejiI8GXbxDuWwopo960meU9Qdf3fnyG3DkXc7pbhzHyiLiMwBtv39wxGKgZMg1kC/EjcOVxoOFXaSuMvt/kPyT6qBFSxZQIu41l9gxVamSI4l5buBmhuuC8GokcDDKWvB4eYXrvfHRMYClJphjlXsSS/90TveO+fhQ3TzHMmiw+SWCYyvuNQ2Gr6G3ZyF82xvdm64wZlz5KVvEDxFfKRB5alRauwxHDlISV0BzvHFKD0GNA3qI8o3C/LBytvQ9vMVq/D011C5RQ9CSKGjeq4ynVp+dI1T0Th3aYcJFGrg7NDoGEM= \ No newline at end of file +Q9dGGz3kLHoCYiPRpLpEawpk3PotLL2aAsrVEiWnSt4DLB1FGlHxcaJL2sFaPqiUVbfQyNSESmGG4RZZpy12VSKSzNO39c5Xk0xXqokWeXoHSWmptJzj1hH/wrqTRROYJl8LAMXIAo8451VHx+qxND+noXee2nKk+McqG2XWoaIdcKbLIlOtN9kRoUDtrwqtMzoHNpcUbzaVtFb2BWdVUh+BcmjYEtRuO5rluxXsIIzz78eiXaQIn9Fy+tdCbD08Pfd6B5gorJNPudw7eI1GJye9enWFXXPlSm53epbOrRjKdpavwbO1P88A4C5odFjp8z9SP3FBC0gmLV9lnyV14YgQL1Iiy+IwvD1jRjgpyGFpS+vsyJ4WrGDYI2phxy267152e8jwTh3hDHAhjHzNiHUE5DQoxCw04N77dpuvPKnSmDxAlU+YT5iQUn2hlkiGcu6i2QPndBFwPpLGFXEVdWCvl8o+XnNO/PKpM6f/7ib30gmqkQAzTTNSGtz3QBLIYk6EiXI/WEJ5LYiqmS3UJbe+CUQsRzQZm0/jxR3gY2SUYDiggkp3SBc3DWl5qiI4R95l3ewwdQc4ZQdrLGbBVpyD+Cmhxpp8DB8pDvx2HrHPR8FaRhTsUuq7yqWNSU86ysTSol81Ri6BrxjLXvZDsDKM1nR2NLIFqQ0ef8V5Z1c= \ No newline at end of file From cc15daff53f7a8624e60df3834cb08f53a7ad005 Mon Sep 17 00:00:00 2001 From: aschumann-virtualcable Date: Fri, 29 May 2026 23:04:39 +0200 Subject: [PATCH 2/3] fix(RDP/macosx): simplify UDSRDP path logging and assignment --- server/src/uds/transports/RDP/scripts/macosx/tunnel.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/server/src/uds/transports/RDP/scripts/macosx/tunnel.py b/server/src/uds/transports/RDP/scripts/macosx/tunnel.py index 1398f417e..abe3c2ea7 100644 --- a/server/src/uds/transports/RDP/scripts/macosx/tunnel.py +++ b/server/src/uds/transports/RDP/scripts/macosx/tunnel.py @@ -70,9 +70,8 @@ def fix_resolution() -> typing.List[str]: logger.debug('Searching for UDSRDP') udsrdp = tools.findApp('udsrdp') # type: ignore if udsrdp and os.path.isfile(udsrdp): # type: ignore - udsrdp_path = typing.cast(str, udsrdp) - logger.debug('UDSRDP found: %s', udsrdp_path) - executable = udsrdp_path + logger.debug('UDSRDP found: %s', udsrdp) + executable = udsrdp # type: ignore kind = 'udsrdp' # If UDSRDP not found, search Thincast From 34a3515943bf246e021c28ceaf092ed797a783ea Mon Sep 17 00:00:00 2001 From: aschumann-virtualcable Date: Fri, 29 May 2026 23:08:36 +0200 Subject: [PATCH 3/3] fix(RDP/macosx): update tunnel signature for improved compatibility --- .../src/uds/transports/RDP/scripts/macosx/tunnel.py.signature | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/uds/transports/RDP/scripts/macosx/tunnel.py.signature b/server/src/uds/transports/RDP/scripts/macosx/tunnel.py.signature index 20b7e3952..f282fba95 100644 --- a/server/src/uds/transports/RDP/scripts/macosx/tunnel.py.signature +++ b/server/src/uds/transports/RDP/scripts/macosx/tunnel.py.signature @@ -1 +1 @@ -Q9dGGz3kLHoCYiPRpLpEawpk3PotLL2aAsrVEiWnSt4DLB1FGlHxcaJL2sFaPqiUVbfQyNSESmGG4RZZpy12VSKSzNO39c5Xk0xXqokWeXoHSWmptJzj1hH/wrqTRROYJl8LAMXIAo8451VHx+qxND+noXee2nKk+McqG2XWoaIdcKbLIlOtN9kRoUDtrwqtMzoHNpcUbzaVtFb2BWdVUh+BcmjYEtRuO5rluxXsIIzz78eiXaQIn9Fy+tdCbD08Pfd6B5gorJNPudw7eI1GJye9enWFXXPlSm53epbOrRjKdpavwbO1P88A4C5odFjp8z9SP3FBC0gmLV9lnyV14YgQL1Iiy+IwvD1jRjgpyGFpS+vsyJ4WrGDYI2phxy267152e8jwTh3hDHAhjHzNiHUE5DQoxCw04N77dpuvPKnSmDxAlU+YT5iQUn2hlkiGcu6i2QPndBFwPpLGFXEVdWCvl8o+XnNO/PKpM6f/7ib30gmqkQAzTTNSGtz3QBLIYk6EiXI/WEJ5LYiqmS3UJbe+CUQsRzQZm0/jxR3gY2SUYDiggkp3SBc3DWl5qiI4R95l3ewwdQc4ZQdrLGbBVpyD+Cmhxpp8DB8pDvx2HrHPR8FaRhTsUuq7yqWNSU86ysTSol81Ri6BrxjLXvZDsDKM1nR2NLIFqQ0ef8V5Z1c= \ No newline at end of file +Jtmf3s2MfHCjWwrOntCp4FogEwRUu5hG6Or9UBo+vlIYO7kKsacsmaQT2WacpjVcSx6TgeX5foENOacMJKX1KS5zLPYlNAURD+XK9Z8jYb7Fd5xu5Y305UURmdT0SIr8qzvFioW4i4xxPULkxlCCCyVmehHNiJZe40i5TFvnD0RFyvSyw0WWKz4hyXcSoo9EvMR5H/vTOIMqzSpiKJL4KOatdc5rQLeTQz3rBSDKNUsv38iTrQ1kgdoq1Ggpq/iMSYN6ODwkWetFSfl8WMoKLSjyiFsUoKwb9MkudHAzGmv6AIx+rthhApc5mzH6XIAM60WeY3zFngwnPEEV93HOtJJzbLsLx7emYkEbvp5Chkzu2o9fm6x/Trguv++VmLyuIsKReG6OLEHJ1tDQsog9BK88gfIkySbkqqG8D2RJabit/ZmyQboqzooIEBxEAgSa6O0ztk8fcRrfgyNANV3AS93rByWa9pD9sE9YE/sX9uw5rHGXb/Del3fz/pRbZu9U0zM7pe3XerBjykB9QzH7zaRIVKBI4vMOXON9ZSmSuTHfSVjnZ6Dkwcec1l1dFhKtmT9L32atE5CiHFa4020PnFqnp68qnO9IssUdPtoLUo16S1O4lSvvzXVv64s9D0is1gDGburYnRdtvcOn/Oaljf8Unzo0rGPVIhLwc1il+Gw= \ No newline at end of file