From 766fc7694a58b7e01c003356db94276f07b791b5 Mon Sep 17 00:00:00 2001 From: Johannes Huber Date: Thu, 31 Jul 2014 19:41:01 +0200 Subject: [PATCH] CVE-2014-4607: Unbundle libvncserver http://seclists.org/oss-sec/2014/q2/676 REVIEW: 119548 --- CMakeLists.txt | 7 +++--- cmake/modules/FindLibVNCServer.cmake | 41 ++++++++++++++++++++++++++++++++++++ krfb/CMakeLists.txt | 2 ++ krfb/rfb.h | 2 +- 4 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 cmake/modules/FindLibVNCServer.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 4aa24dd..0b29da0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,6 +32,8 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ) +find_package(LibVNCServer REQUIRED) + macro_optional_find_package(TelepathyQt4) macro_log_feature(TelepathyQt4_FOUND "telepathy-qt" "Telepathy Qt Bindings" "http://telepathy.freedesktop.org" FALSE "0.9" "Needed to build Telepathy Tubes support.") @@ -44,8 +46,6 @@ macro_bool_to_01(X11_XShm_FOUND HAVE_XSHM) include_directories ("${CMAKE_CURRENT_BINARY_DIR}/krfb" "${CMAKE_CURRENT_SOURCE_DIR}/krfb" "${CMAKE_CURRENT_SOURCE_DIR}/krfb/ui" - "${CMAKE_CURRENT_SOURCE_DIR}/libvncserver/" - "${CMAKE_CURRENT_BINARY_DIR}/libvncserver/" ) if(Q_WS_X11) @@ -54,9 +54,8 @@ if(Q_WS_X11) endif(NOT X11_XTest_FOUND) endif(Q_WS_X11) -add_subdirectory(libvncserver) add_subdirectory(krfb) -add_subdirectory (framebuffers) +add_subdirectory(framebuffers) add_subdirectory(doc) if (NOT INSIDE_KDENETWORK) diff --git a/cmake/modules/FindLibVNCServer.cmake b/cmake/modules/FindLibVNCServer.cmake new file mode 100644 index 0000000..5927ab2 --- /dev/null +++ b/cmake/modules/FindLibVNCServer.cmake @@ -0,0 +1,41 @@ +# cmake macro to test LIBVNCSERVER LIB + +# Copyright (c) 2006, Alessandro Praduroux +# Copyright (c) 2007, Urs Wolfer +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + +INCLUDE(CheckPointerMember) + +IF (LIBVNCSERVER_INCLUDE_DIR AND LIBVNCSERVER_LIBRARIES) + # Already in cache, be silent + SET(LIBVNCSERVER_FIND_QUIETLY TRUE) +ENDIF (LIBVNCSERVER_INCLUDE_DIR AND LIBVNCSERVER_LIBRARIES) + +FIND_PATH(LIBVNCSERVER_INCLUDE_DIR rfb/rfb.h) + +FIND_LIBRARY(LIBVNCSERVER_LIBRARIES NAMES vncserver libvncserver) + +# libvncserver and libvncclient are in the same package, so it does +# not make sense to add a new cmake script for finding libvncclient. +# instead just find the libvncclient also in this file. +FIND_PATH(LIBVNCCLIENT_INCLUDE_DIR rfb/rfbclient.h) +FIND_LIBRARY(LIBVNCCLIENT_LIBRARIES NAMES vncclient libvncclient) + +IF (LIBVNCSERVER_INCLUDE_DIR AND LIBVNCSERVER_LIBRARIES) + SET(CMAKE_REQUIRED_INCLUDES "${LIBVNCSERVER_INCLUDE_DIR}" "${CMAKE_REQUIRED_INCLUDES}") + CHECK_POINTER_MEMBER(rfbClient* GotXCutText rfb/rfbclient.h LIBVNCSERVER_FOUND) +ENDIF (LIBVNCSERVER_INCLUDE_DIR AND LIBVNCSERVER_LIBRARIES) + +IF (LIBVNCSERVER_FOUND) + IF (NOT LIBVNCSERVER_FIND_QUIETLY) + MESSAGE(STATUS "Found LibVNCServer: ${LIBVNCSERVER_LIBRARIES}") + ENDIF (NOT LIBVNCSERVER_FIND_QUIETLY) +ELSE (LIBVNCSERVER_FOUND) + IF (LIBVNCSERVER_FIND_REQUIRED) + MESSAGE(FATAL_ERROR "Could NOT find acceptable version of LibVNCServer (version 0.9 or later required).") + ENDIF (LIBVNCSERVER_FIND_REQUIRED) +ENDIF (LIBVNCSERVER_FOUND) + +MARK_AS_ADVANCED(LIBVNCSERVER_INCLUDE_DIR LIBVNCSERVER_LIBRARIES) \ No newline at end of file diff --git a/krfb/CMakeLists.txt b/krfb/CMakeLists.txt index a65eea8..100b49b 100644 --- a/krfb/CMakeLists.txt +++ b/krfb/CMakeLists.txt @@ -20,6 +20,7 @@ target_link_libraries (krfbprivate ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${X11_X11_LIB} + ${LIBVNCSERVER_LIBRARIES} ) set_target_properties (krfbprivate PROPERTIES @@ -103,6 +104,7 @@ target_link_libraries (krfb ${QT_QTNETWORK_LIBRARY} ${KDE4_KDNSSD_LIBS} ${KDE4_KDEUI_LIBS} + ${LIBVNCSERVER_LIBRARIES} ) if(TelepathyQt4_FOUND) diff --git a/krfb/rfb.h b/krfb/rfb.h index 40308a2..fa94eda 100644 --- a/krfb/rfb.h +++ b/krfb/rfb.h @@ -6,7 +6,7 @@ #ifndef KRFB_RFB_H #define KRFB_RFB_H -#include "../libvncserver/rfb/rfb.h" +#include "rfb/rfb.h" #undef TRUE #undef FALSE -- 2.0.2