From 4ed967f2cb719aabd74f80be4ccb60a6594b089a Mon Sep 17 00:00:00 2001 From: Michele Calgaro Date: Sun, 31 Mar 2019 23:49:47 +0900 Subject: Fixed use of SAK in lock process when autologin is used in TDM. This resolves bug 2945. Manually cherry-picked from commit 7aa9258f. Signed-off-by: Michele Calgaro --- tdm/backend/CMakeLists.txt | 3 ++- tdm/backend/dm.c | 4 ++-- tdm/backend/session.c | 25 +++++++++++++++++++++++++ 3 files changed, 29 insertions(+), 3 deletions(-) (limited to 'tdm/backend') diff --git a/tdm/backend/CMakeLists.txt b/tdm/backend/CMakeLists.txt index da3f3ac03..bece8be72 100644 --- a/tdm/backend/CMakeLists.txt +++ b/tdm/backend/CMakeLists.txt @@ -15,6 +15,7 @@ include_directories( ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_BINARY_DIR} ${DBUS_INCLUDE_DIRS} + ${CMAKE_SOURCE_DIR}/tdm/kfrontend ) link_directories( @@ -27,7 +28,7 @@ add_custom_command( OUTPUT config.ci COMMAND perl -w ${CMAKE_SOURCE_DIR}/tdm/confproc.pl ${CMAKE_SOURCE_DIR}/tdm/config.def config.ci DEPENDS ${CMAKE_SOURCE_DIR}/tdm/confproc.pl ${CMAKE_SOURCE_DIR}/tdm/config.def ) -set_property( SOURCE auth.c APPEND PROPERTY OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/config.ci ) +set_property( SOURCE auth.c session.c APPEND PROPERTY OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/config.ci ) if( WITH_XDMCP ) set( XDMCP_LIBRARIES "Xdmcp" ) diff --git a/tdm/backend/dm.c b/tdm/backend/dm.c index cd672f39a..996059c87 100644 --- a/tdm/backend/dm.c +++ b/tdm/backend/dm.c @@ -570,12 +570,12 @@ StartRemoteLogin( struct display *d ) /* Let's try again with some standard paths */ argv[0] = (char *)realloc(argv[0], strlen("/usr/X11R6/bin/X") + 1); if (argv[0] != NULL) { - argv[0] = "/usr/X11R6/bin/X"; + strcpy(argv[0], "/usr/X11R6/bin/X"); Debug( "exec %\"[s\n", argv ); (void)execv( argv[0], argv ); LogError( "X server %\"s cannot be executed\n", argv[0] ); - argv[0] = "/usr/bin/X"; /* Shorter than the previous file name */ + strcpy(argv[0], "/usr/bin/X"); // Shorter than the previous file name Debug( "exec %\"[s\n", argv ); (void)execv( argv[0], argv ); LogError( "X server %\"s cannot be executed\n", argv[0] ); diff --git a/tdm/backend/session.c b/tdm/backend/session.c index 4b5f372db..0bcd92d5f 100644 --- a/tdm/backend/session.c +++ b/tdm/backend/session.c @@ -34,6 +34,8 @@ from the copyright holder. * subdaemon event loop, etc. */ + +#include "tdmconfig.h" #include "dm.h" #include "dm_error.h" @@ -49,6 +51,8 @@ from the copyright holder. #include "consolekit.h" #endif +#define TSAK_FIFO_FILE "/tmp/tdesocket-global/tsak" + struct display *td; const char *td_setup = "auto"; @@ -576,6 +580,27 @@ ManageSession( struct display *d ) goto regreet; } + int start_tsak = 0; +#ifdef BUILD_TSAK + start_tsak = d->useSAK; +#endif + if (start_tsak) { + if (system(KDE_BINDIR "/tsak checkdeps") != 0) { + start_tsak = 0; + } + } + if (start_tsak) { + int ret_pid = fork(); + if (ret_pid == 0) { + // Child process + system(KDE_BINDIR "/tsak"); + exit(0); + } + } + else { + remove(TSAK_FIFO_FILE); + } + tdiff = time( 0 ) - td->hstent->lastExit - td->openDelay; if (AutoLogon( tdiff )) { if (!Verify( conv_auto, FALSE )) -- cgit v1.2.1