From 7d4784c51070eaeb8479d8f354541cecbce2ff93 Mon Sep 17 00:00:00 2001 From: Ralf Habacker Date: Tue, 26 Sep 2017 12:06:10 +0200 Subject: [PATCH] Add Windows manifest to dbus-update-activation-environment.exe This explicitly sets the execution level to 'asInvoker', preventing Windows' UAC heuristics from deciding that because its name mentions "update", it probably needs to escalate privileges. https://bugs.freedesktop.org/show_bug.cgi?id=102558 --- cmake/tools/CMakeLists.txt | 9 +++++++++ tools/Makefile.am | 17 +++++++++++++++-- tools/Win32.Manifest | 10 ++++++++++ 3 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 tools/Win32.Manifest diff --git a/cmake/tools/CMakeLists.txt b/cmake/tools/CMakeLists.txt index 8b3de0c9..5613269e 100644 --- a/cmake/tools/CMakeLists.txt +++ b/cmake/tools/CMakeLists.txt @@ -62,6 +62,15 @@ add_executable(dbus-test-tool ${dbus_test_tool_SOURCES}) target_link_libraries(dbus-test-tool ${DBUS_LIBRARIES}) install(TARGETS dbus-test-tool ${INSTALL_TARGETS_DEFAULT_ARGS}) +if(WIN32) + # avoid dbus-update-activation-environment triggering UAC + # 1 is the resource ID, ID_MANIFEST + # 24 is the resource type, RT_MANIFEST + # constants are used because of a bug in windres + # see https://stackoverflow.com/questions/33000158/embed-manifest-file-to-require-administrator-execution-level-with-mingw32 + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/disable-uac.rc "1 24 \"${CMAKE_SOURCE_DIR}/../tools/Win32.Manifest\"\n") + list(APPEND dbus_update_activation_environment_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/disable-uac.rc) +endif() add_executable(dbus-update-activation-environment ${dbus_update_activation_environment_SOURCES}) target_link_libraries(dbus-update-activation-environment ${DBUS_LIBRARIES}) install(TARGETS dbus-update-activation-environment ${INSTALL_TARGETS_DEFAULT_ARGS}) diff --git a/tools/Makefile.am b/tools/Makefile.am index 19aaf363..96ce03fa 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -114,9 +114,22 @@ dbus_update_activation_environment_SOURCES = \ $(NULL) dbus_update_activation_environment_LDADD = $(top_builddir)/dbus/libdbus-1.la -EXTRA_DIST = run-with-tmp-session-bus.sh strtoll.c strtoull.c +if DBUS_WIN +SUFFIXES = .rc + +.rc.o: + $(WINDRES) $< -o $@ + +nodist_dbus_update_activation_environment_SOURCES = disable-uac.rc + +disable-uac.rc: Win32.Manifest + echo -e "1 24 \"$<\"" > $@ +endif + +EXTRA_DIST = run-with-tmp-session-bus.sh strtoll.c strtoull.c Win32.Manifest CLEANFILES = \ - run-with-tmp-session-bus.conf + run-with-tmp-session-bus.conf \ + $(nodist_dbus_update_activation_environment_SOURCES) # create the /var/lib/dbus directory for dbus-uuidgen install-data-local: diff --git a/tools/Win32.Manifest b/tools/Win32.Manifest new file mode 100644 index 00000000..b926d066 --- /dev/null +++ b/tools/Win32.Manifest @@ -0,0 +1,10 @@ + + + + + + + + + + -- 2.12.3