diff options
author | OBATA Akio <obache@wizdas.com> | 2020-08-09 17:34:23 +0900 |
---|---|---|
committer | Slávek Banko <slavek.banko@axis.cz> | 2020-08-26 18:11:02 +0200 |
commit | ac8c8ca54aaed1466255161a3d727dcfade4a7d9 (patch) | |
tree | a16f3955e178f3dca2daf98bf0ade9750aa13f6f | |
parent | 56c5973b6b33df77a7491b07411cbd772c0d5d79 (diff) | |
download | tdelibs-ac8c8ca54aaed1466255161a3d727dcfade4a7d9.tar.gz tdelibs-ac8c8ca54aaed1466255161a3d727dcfade4a7d9.zip |
Add a knob to use fixed path `iceauth` tool
`system()` and `popen()` may unsafe unless using absolute command path.
Rely on PATH environment variable set by users may result in unwanted tool.
Signed-off-by: OBATA Akio <obache@wizdas.com>
Signed-off-by: Slávek Banko <slavek.banko@axis.cz>
-rw-r--r-- | CMakeLists.txt | 11 | ||||
-rw-r--r-- | config.h.cmake | 9 | ||||
-rw-r--r-- | dcop/dcopclient.cpp | 17 | ||||
-rw-r--r-- | dcop/dcopserver_shutdown.c | 2 | ||||
-rw-r--r-- | kded/khostname.cpp | 8 | ||||
-rw-r--r-- | tdesu/tdesu_stub.c | 4 |
6 files changed, 43 insertions, 8 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index fbb2e6315..48deed0c0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1233,6 +1233,17 @@ if ( WITH_TDEICONLOADER_DEBUG ) endif ( WITH_TDEICONLOADER_DEBUG ) +##### find tools path ########################### + +if( NOT WIN32 AND NOT ICEAUTH_PATH ) + find_program( ICEAUTH_PATH iceauth ) + if( ${ICEAUTH_PATH} STREQUAL "ICEAUTH_PATH-NOTFOUND" ) + tde_message_fatal( "iceauth command was not found in path." ) + endif() + message( STATUS "Found iceauth: ${ICEAUTH_PATH}" ) +endif( NOT WIN32 AND NOT ICEAUTH_PATH ) + + ##### write configure files ##################### configure_file( config.h.cmake config.h ) diff --git a/config.h.cmake b/config.h.cmake index 8401efc31..fd1cfc462 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -930,6 +930,15 @@ /* Defined if your system has XRandR support */ #cmakedefine XRANDR_SUPPORT 1 +/* Defines the executable of iceauth */ +#cmakedefine ICEAUTH_PATH "@ICEAUTH_PATH@" + +#ifdef ICEAUTH_PATH +# define ICEAUTH_COMMAND ICEAUTH_PATH +#else +# define ICEAUTH_COMMAND "iceauth" +#endif + /* * jpeg.h needs HAVE_BOOLEAN, when the system uses boolean in system * headers and I'm too lazy to write a configure test as long as only diff --git a/dcop/dcopclient.cpp b/dcop/dcopclient.cpp index 4e46cd828..607e2e52a 100644 --- a/dcop/dcopclient.cpp +++ b/dcop/dcopclient.cpp @@ -210,13 +210,26 @@ public: TQCString DCOPClient::iceauthPath() { -#ifdef Q_OS_WIN32 +#if defined(ICEAUTH_PATH) + if ( +# if defined(Q_WS_WIN) + access(ICEAUTH_PATH, 0) == 0 +# else + access(ICEAUTH_PATH, X_OK) == 0 +# endif + ) + { + return TQCString(ICEAUTH_PATH); + } + +#elif defined(Q_OS_WIN32) char szPath[512]; char * pszFilePart; int ret; ret = SearchPathA(NULL,"iceauth.exe",NULL,sizeof(szPath)/sizeof(szPath[0]),szPath,&pszFilePart); if(ret != 0) return TQCString(szPath); + #else TQCString path = ::getenv("PATH"); if (path.isEmpty()) @@ -230,9 +243,9 @@ TQCString DCOPClient::iceauthPath() { return fPath; } - fPath = strtok(NULL, ":\b"); } + #endif return 0; } diff --git a/dcop/dcopserver_shutdown.c b/dcop/dcopserver_shutdown.c index fb25a86fa..af75c6d5a 100644 --- a/dcop/dcopserver_shutdown.c +++ b/dcop/dcopserver_shutdown.c @@ -151,7 +151,7 @@ static void cleanupDCOPsocket(char *buffer) if (socket_file) unlink(socket_file); - snprintf(cmd, BUFFER_SIZE, "iceauth remove netid='%s'", buffer); + snprintf(cmd, BUFFER_SIZE, ICEAUTH_COMMAND " remove netid='%s'", buffer); system(cmd); } diff --git a/kded/khostname.cpp b/kded/khostname.cpp index c78152b97..fb7d965bc 100644 --- a/kded/khostname.cpp +++ b/kded/khostname.cpp @@ -16,6 +16,8 @@ * Boston, MA 02110-1301, USA. **/ +#include <config.h> + #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> @@ -236,7 +238,7 @@ void KHostName::changeDcop() ::symlink(fname.data(), compatLink.data()); // Compatibility link // Update .ICEauthority - TQString cmd = "iceauth list "+TDEProcess::quote("netid="+oldNetId); + TQString cmd = ICEAUTH_COMMAND " list "+TDEProcess::quote("netid="+oldNetId); FILE *iceFile = popen(TQFile::encodeName(cmd), "r"); if (!iceFile) { @@ -271,7 +273,7 @@ void KHostName::changeDcop() if (netId != oldNetId) continue; - cmd = "iceauth add "; + cmd = ICEAUTH_COMMAND " add "; cmd += TDEProcess::quote(protName); cmd += " '' "; cmd += TDEProcess::quote(newNetId); @@ -288,7 +290,7 @@ void KHostName::changeDcop() char* xauthlocalhostname = getenv("XAUTHLOCALHOSTNAME"); if (!xauthlocalhostname || !oldNetId.contains(xauthlocalhostname)) { - TQString cmd = "iceauth remove "+TDEProcess::quote("netid="+oldNetId); + TQString cmd = ICEAUTH_COMMAND " remove "+TDEProcess::quote("netid="+oldNetId); system(TQFile::encodeName(cmd)); unlink(origFName.data()); origFName = DCOPClient::dcopServerFileOld(oldName); // Compatibility link diff --git a/tdesu/tdesu_stub.c b/tdesu/tdesu_stub.c index f8054a313..5da4c6110 100644 --- a/tdesu/tdesu_stub.c +++ b/tdesu/tdesu_stub.c @@ -367,9 +367,9 @@ int main() close(fd); xsetenv("ICEAUTHORITY", iceauthority); - fout = popen("iceauth >/dev/null 2>&1", "w"); + fout = popen(ICEAUTH_COMMAND " >/dev/null 2>&1", "w"); if (!fout) { - perror("tdesu_stub: popen iceauth"); + perror("tdesu_stub: popen " ICEAUTH_COMMAND); exit(1); } for (i=0; host[i]; i++) |