diff --git a/src/xpra/platform/features.py b/src/xpra/platform/features.py index 53ef38ee49..b001b31e4e 100644 --- a/src/xpra/platform/features.py +++ b/src/xpra/platform/features.py @@ -26,6 +26,8 @@ CLIPBOARD_GREEDY = envbool("XPRA_CLIPBOARD_GREEDY") CLIPBOARD_NATIVE_CLASS = None +EXECUTABLE_EXTENSION = "" + UI_THREAD_POLLING = 0 OPEN_COMMAND = [] @@ -69,6 +71,7 @@ "CLIPBOARD_WANT_TARGETS", "CLIPBOARD_GREEDY", "CLIPBOARD_NATIVE_CLASS", + "EXECUTABLE_EXTENSION", "UI_THREAD_POLLING", "CLIENT_MODULES", "INPUT_DEVICES", diff --git a/src/xpra/platform/win32/features.py b/src/xpra/platform/win32/features.py index a60fad75e6..d953da7abf 100644 --- a/src/xpra/platform/win32/features.py +++ b/src/xpra/platform/win32/features.py @@ -14,6 +14,8 @@ CLIPBOARD_GREEDY = True CLIPBOARD_NATIVE_CLASS = "xpra.clipboard.translated_clipboard.TranslatedClipboardProtocolHelper" +EXECUTABLE_EXTENSION = "exe" + #these don't make sense on win32: DEFAULT_PULSEAUDIO_COMMAND = "" DEFAULT_PULSEAUDIO_CONFIGURE_COMMANDS = [] diff --git a/src/xpra/server/auth/exec_auth.py b/src/xpra/server/auth/exec_auth.py index 25e82dfb19..fbba41e0ac 100644 --- a/src/xpra/server/auth/exec_auth.py +++ b/src/xpra/server/auth/exec_auth.py @@ -6,10 +6,10 @@ import os from subprocess import Popen -from xpra.os_util import POSIX from xpra.util import envint from xpra.child_reaper import getChildReaper from xpra.server.auth.sys_auth_base import SysAuthenticator, init, log +from xpra.platform.features import EXECUTABLE_EXTENSION from xpra.gtk_common.gobject_compat import import_glib glib = import_glib() @@ -24,9 +24,6 @@ class Authenticator(SysAuthenticator): def __init__(self, username, **kwargs): log("exec.Authenticator(%s, %s)", username, kwargs) - if not POSIX: - log.warn("Warning: exec authentication is not supported on %s", os.name) - return self.command = kwargs.pop("command", "") self.timeout = kwargs.pop("timeout", TIMEOUT) self.timer = None @@ -37,9 +34,14 @@ def __init__(self, username, **kwargs): from xpra.platform.paths import get_libexec_dir libexec = get_libexec_dir() xpralibexec = os.path.join(libexec, "xpra") + log("libexec=%s, xpralibexec=%s", libexec, xpralibexec) if os.path.exists(xpralibexec): libexec = xpralibexec auth_dialog = os.path.join(libexec, "auth_dialog") + if EXECUTABLE_EXTENSION: + #ie: add ".exe" on MS Windows + auth_dialog += ".%s" % EXECUTABLE_EXTENSION + log("auth_dialog=%s", auth_dialog) if os.path.exists(auth_dialog): self.command = auth_dialog assert self.command, "exec authentication module is not configured correctly: no command specified"