From 7c5c8e6823e476b46a30373e5a95e8b8e4c5fa09 Mon Sep 17 00:00:00 2001 From: Mark Hammond Date: Fri, 2 May 2008 12:48:15 +0000 Subject: [PATCH] #2581: Vista UAC/elevation support for bdist_wininst --- Doc/distutils/builtdist.rst | 9 +- Lib/distutils/command/bdist_wininst.py | 7 ++ Lib/distutils/command/wininst-6.0.exe | Bin 61440 -> 61440 bytes Lib/distutils/command/wininst-7.1.exe | Bin 61440 -> 61440 bytes Lib/distutils/command/wininst-9.0-amd64.exe | Bin 76288 -> 77312 bytes Lib/distutils/command/wininst-9.0.exe | Bin 65536 -> 66048 bytes Lib/distutils/msvc9compiler.py | 25 ++++- Misc/NEWS | 2 + PC/bdist_wininst/install.c | 110 +++++++++++++++++++- PC/bdist_wininst/wininst-7.1.vcproj | 4 +- PC/bdist_wininst/wininst.dsp | 6 +- 11 files changed, 152 insertions(+), 11 deletions(-) diff --git a/Doc/distutils/builtdist.rst b/Doc/distutils/builtdist.rst index cd2bd817b42..c4b8dbf3f46 100644 --- a/Doc/distutils/builtdist.rst +++ b/Doc/distutils/builtdist.rst @@ -426,6 +426,13 @@ built-in functions in the installation script. also the configuration. For details refer to Microsoft's documentation of the :cfunc:`SHGetSpecialFolderPath` function. +Vista User Access Control (UAC) +=============================== + +Starting with Python 2.6, bdist_wininst supports a :option:`--user-access-control` +option. The default is 'none' (meaning no UAC handling is done), and other +valid values are 'auto' (meaning prompt for UAC elevation if Python was +installed for all users) and 'force' (meaning always prompt for elevation) .. function:: create_shortcut(target, description, filename[, arguments[, workdir[, iconpath[, iconindex]]]]) @@ -437,5 +444,3 @@ built-in functions in the installation script. and *iconindex* is the index of the icon in the file *iconpath*. Again, for details consult the Microsoft documentation for the :class:`IShellLink` interface. - - diff --git a/Lib/distutils/command/bdist_wininst.py b/Lib/distutils/command/bdist_wininst.py index 02542afbd3f..7c43e7459ec 100644 --- a/Lib/distutils/command/bdist_wininst.py +++ b/Lib/distutils/command/bdist_wininst.py @@ -50,6 +50,10 @@ class bdist_wininst (Command): "Fully qualified filename of a script to be run before " "any files are installed. This script need not be in the " "distribution"), + ('user-access-control=', None, + "specify Vista's UAC handling - 'none'/default=no " + "handling, 'auto'=use UAC if target Python installed for " + "all users, 'force'=always use UAC"), ] boolean_options = ['keep-temp', 'no-target-compile', 'no-target-optimize', @@ -68,6 +72,7 @@ class bdist_wininst (Command): self.skip_build = 0 self.install_script = None self.pre_install_script = None + self.user_access_control = None # initialize_options() @@ -220,6 +225,8 @@ class bdist_wininst (Command): lines.append("target_optimize=%d" % (not self.no_target_optimize)) if self.target_version: lines.append("target_version=%s" % self.target_version) + if self.user_access_control: + lines.append("user_access_control=%s" % self.user_access_control) title = self.title or self.distribution.get_fullname() lines.append("title=%s" % escape(title)) diff --git a/Lib/distutils/command/wininst-6.0.exe b/Lib/distutils/command/wininst-6.0.exe index bd715250e780b37e94996e33820070987bcc77fd..10c981993ba2c2e3a977db8ded201a46d529749d 100644 GIT binary patch delta 19227 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 J=*&lB{};woC0qai delta 17718 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 diff --git a/Lib/distutils/command/wininst-7.1.exe b/Lib/distutils/command/wininst-7.1.exe index ee35713940177c0eb8e3cf0435d7a6a9287a27fc..6779aa8d4c1b0d5fb37255f1eea211d92ea6942a 100644 GIT binary patch delta 24325 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 Bkf#6u diff --git a/Lib/distutils/command/wininst-9.0-amd64.exe b/Lib/distutils/command/wininst-9.0-amd64.exe index c99ede4b3fcebe39b1a1e33283307e12c42b7b2e..b4cb062c391d230dbf4a7fc3a16536aa3dbc5b42 100644 GIT binary patch delta 19961 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 IFg5&t0jk>d#Q*>R delta 18603 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 diff --git a/Lib/distutils/command/wininst-9.0.exe b/Lib/distutils/command/wininst-9.0.exe index 5e0144c92b58ea750211c540d15667e0b1d1a356..0d04a6678b94b8ecbdde10257396e8c0e85c038c 100644 GIT binary patch delta 14220 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 CX=EAz diff --git a/Lib/distutils/msvc9compiler.py b/Lib/distutils/msvc9compiler.py index 8b1cf9a9109..c8d52c42375 100644 --- a/Lib/distutils/msvc9compiler.py +++ b/Lib/distutils/msvc9compiler.py @@ -594,14 +594,25 @@ class MSVCCompiler(CCompiler) : # needed! Make sure they are generated in the temporary build # directory. Since they have different names for debug and release # builds, they can go into the same directory. + build_temp = os.path.dirname(objects[0]) if export_symbols is not None: (dll_name, dll_ext) = os.path.splitext( os.path.basename(output_filename)) implib_file = os.path.join( - os.path.dirname(objects[0]), + build_temp, self.library_filename(dll_name)) ld_args.append ('/IMPLIB:' + implib_file) + # Embedded manifests are recommended - see MSDN article titled + # "How to: Embed a Manifest Inside a C/C++ Application" + # (currently at http://msdn2.microsoft.com/en-us/library/ms235591(VS.80).aspx) + # Ask the linker to generate the manifest in the temp dir, so + # we can embed it later. + temp_manifest = os.path.join( + build_temp, + os.path.basename(output_filename) + ".manifest") + ld_args.append('/MANIFESTFILE:' + temp_manifest) + if extra_preargs: ld_args[:0] = extra_preargs if extra_postargs: @@ -613,6 +624,18 @@ class MSVCCompiler(CCompiler) : except DistutilsExecError as msg: raise LinkError(msg) + # embed the manifest + # XXX - this is somewhat fragile - if mt.exe fails, distutils + # will still consider the DLL up-to-date, but it will not have a + # manifest. Maybe we should link to a temp file? OTOH, that + # implies a build environment error that shouldn't go undetected. + mfid = 1 if target_desc == CCompiler.EXECUTABLE else 2 + out_arg = '-outputresource:%s;%s' % (output_filename, mfid) + try: + self.spawn(['mt.exe', '-nologo', '-manifest', + temp_manifest, out_arg]) + except DistutilsExecError as msg: + raise LinkError(msg) else: log.debug("skipping %s (up-to-date)", output_filename) diff --git a/Misc/NEWS b/Misc/NEWS index d94d6555cd6..19b80e25f32 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -47,6 +47,8 @@ Extension Modules Library ------- +- Issue #2581: distutils: Vista UAC/elevation support for bdist_wininst + - Issue #2635: Fix bug in 'fix_sentence_endings' textwrap.fill option, where an extra space was added after a word containing (but not ending in) '.', '!' or '?'. diff --git a/PC/bdist_wininst/install.c b/PC/bdist_wininst/install.c index 0ce2371a771..a4f48654fa5 100644 --- a/PC/bdist_wininst/install.c +++ b/PC/bdist_wininst/install.c @@ -133,6 +133,7 @@ char meta_name[80]; /* package name without version like char install_script[MAX_PATH]; char *pre_install_script; /* run before we install a single file */ +char user_access_control[10]; // one of 'auto', 'force', otherwise none. int py_major, py_minor; /* Python version selected for installation */ @@ -344,8 +345,15 @@ struct PyMethodDef { }; typedef struct PyMethodDef PyMethodDef; +// XXX - all of these are potentially fragile! We load and unload +// the Python DLL multiple times - so storing functions pointers +// is dangerous (although things *look* OK at present) +// Better might be to roll prepare_script_environment() into +// LoadPythonDll(), and create a new UnloadPythonDLL() which also +// clears the global pointers. void *(*g_Py_BuildValue)(char *, ...); int (*g_PyArg_ParseTuple)(PyObject *, char *, ...); +PyObject * (*g_PyLong_FromVoidPtr)(void *); PyObject *g_PyExc_ValueError; PyObject *g_PyExc_OSError; @@ -597,7 +605,7 @@ static PyObject *PyMessageBox(PyObject *self, PyObject *args) static PyObject *GetRootHKey(PyObject *self) { - return g_Py_BuildValue("l", hkey_root); + return g_PyLong_FromVoidPtr(hkey_root); } #define METH_VARARGS 0x0001 @@ -631,7 +639,9 @@ static HINSTANCE LoadPythonDll(char *fname) "SOFTWARE\\Python\\PythonCore\\%d.%d\\InstallPath", py_major, py_minor); if (ERROR_SUCCESS != RegQueryValue(HKEY_CURRENT_USER, subkey_name, - fullpath, &size)) + fullpath, &size) && + ERROR_SUCCESS != RegQueryValue(HKEY_LOCAL_MACHINE, subkey_name, + fullpath, &size)) return NULL; strcat(fullpath, "\\"); strcat(fullpath, fname); @@ -648,6 +658,7 @@ static int prepare_script_environment(HINSTANCE hPython) DECLPROC(hPython, PyObject *, Py_BuildValue, (char *, ...)); DECLPROC(hPython, int, PyArg_ParseTuple, (PyObject *, char *, ...)); DECLPROC(hPython, PyObject *, PyErr_Format, (PyObject *, char *)); + DECLPROC(hPython, PyObject *, PyLong_FromVoidPtr, (void *)); if (!PyImport_ImportModule || !PyObject_GetAttrString || !PyObject_SetAttrString || !PyCFunction_New) return 1; @@ -667,6 +678,7 @@ static int prepare_script_environment(HINSTANCE hPython) g_Py_BuildValue = Py_BuildValue; g_PyArg_ParseTuple = PyArg_ParseTuple; g_PyErr_Format = PyErr_Format; + g_PyLong_FromVoidPtr = PyLong_FromVoidPtr; return 0; } @@ -777,7 +789,9 @@ static int run_simple_script(char *script) hPython = LoadPythonDll(pythondll); if (!hPython) { - set_failure_reason("Can't load Python for pre-install script"); + char reason[128]; + wsprintf(reason, "Can't load Python for pre-install script (%d)", GetLastError()); + set_failure_reason(reason); return -1; } rc = do_run_simple_script(hPython, script); @@ -2073,6 +2087,71 @@ void RunWizard(HWND hwnd) PropertySheet(&psh); } +// subtly different from HasLocalMachinePrivs(), in that after executing +// an 'elevated' process, we expect this to return TRUE - but there is no +// such implication for HasLocalMachinePrivs +BOOL MyIsUserAnAdmin() +{ + typedef BOOL (WINAPI *PFNIsUserAnAdmin)(); + static PFNIsUserAnAdmin pfnIsUserAnAdmin = NULL; + HMODULE shell32; + // This function isn't guaranteed to be available (and it can't hurt + // to leave the library loaded) + if (0 == (shell32=LoadLibrary("shell32.dll"))) + return FALSE; + if (0 == (pfnIsUserAnAdmin=(PFNIsUserAnAdmin)GetProcAddress(shell32, "IsUserAnAdmin"))) + return FALSE; + return (*pfnIsUserAnAdmin)(); +} + +// Some magic for Vista's UAC. If there is a target_version, and +// if that target version is installed in the registry under +// HKLM, and we are not current administrator, then +// re-execute ourselves requesting elevation. +// Split into 2 functions - "should we elevate" and "spawn elevated" + +// Returns TRUE if we should spawn an elevated child +BOOL NeedAutoUAC() +{ + HKEY hk; + char key_name[80]; + OSVERSIONINFO winverinfo; + winverinfo.dwOSVersionInfoSize = sizeof(winverinfo); + // If less than XP, then we can't do it (and its not necessary). + if (!GetVersionEx(&winverinfo) || winverinfo.dwMajorVersion < 5) + return FALSE; + // no Python version info == we can't know yet. + if (target_version[0] == '\0') + return FALSE; + // see how python is current installed + wsprintf(key_name, + "Software\\Python\\PythonCore\\%s\\InstallPath", + target_version); + if (ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE, + key_name, 0, KEY_READ, &hk)) + return FALSE; + RegCloseKey(hk); + // Python is installed in HKLM - we must elevate. + return TRUE; +} + +// Spawn ourself as an elevated application. On failure, a message is +// displayed to the user - but this app will always terminate, even +// on error. +void SpawnUAC() +{ + // interesting failure scenario that has been seen: initial executable + // runs from a network drive - but once elevated, that network share + // isn't seen, and ShellExecute fails with SE_ERR_ACCESSDENIED. + int ret = (int)ShellExecute(0, "runas", modulename, "", NULL, + SW_SHOWNORMAL); + if (ret <= 32) { + char msg[128]; + wsprintf(msg, "Failed to start elevated process (ShellExecute returned %d)", ret); + MessageBox(0, msg, "Setup", MB_OK | MB_ICONERROR); + } +} + int DoInstall(void) { char ini_buffer[4096]; @@ -2106,6 +2185,31 @@ int DoInstall(void) install_script, sizeof(install_script), ini_file); + GetPrivateProfileString("Setup", "user_access_control", "", + user_access_control, sizeof(user_access_control), ini_file); + + // See if we need to do the Vista UAC magic. + if (strcmp(user_access_control, "force")==0) { + if (!MyIsUserAnAdmin()) { + SpawnUAC(); + return 0; + } + // already admin - keep going + } else if (strcmp(user_access_control, "auto")==0) { + // Check if it looks like we need UAC control, based + // on how Python itself was installed. + if (!MyIsUserAnAdmin() && NeedAutoUAC()) { + SpawnUAC(); + return 0; + } + } else { + // display a warning about unknown values - only the developer + // of the extension will see it (until they fix it!) + if (user_access_control[0] && strcmp(user_access_control, "none") != 0) { + MessageBox(GetFocus(), "Bad user_access_control value", "oops", MB_OK); + // nothing to do. + } + } hwndMain = CreateBackground(title); diff --git a/PC/bdist_wininst/wininst-7.1.vcproj b/PC/bdist_wininst/wininst-7.1.vcproj index b73cf34a8ed..1ce2bf1bb8e 100644 --- a/PC/bdist_wininst/wininst-7.1.vcproj +++ b/PC/bdist_wininst/wininst-7.1.vcproj @@ -24,7 +24,7 @@ Name="VCCLCompilerTool" Optimization="1" InlineFunctionExpansion="1" - AdditionalIncludeDirectories="..\..\Include,..\..\..\zlib-1.2.1" + AdditionalIncludeDirectories="..\..\Include,..\..\..\zlib-1.2.3" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS" StringPooling="TRUE" RuntimeLibrary="2" @@ -41,7 +41,7 @@ Name="VCCustomBuildTool"/>