Detect and enable PAM authentication support


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4513 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1f9d957..fb4e713 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -253,6 +253,21 @@
   endif()
 endif()
 
+# Check for PAM library
+option(ENABLE_PAM "Enable PAM authentication support" ON)
+if(ENABLE_PAM)
+  check_include_files(security/pam_appl.h HAVE_PAM_H)
+  set(CMAKE_REQUIRED_LIBRARIES -lpam)
+  check_function_exists(pam_start HAVE_PAM_START)
+  set(CMAKE_REQUIRED_LIBRARIES)
+  if(HAVE_PAM_H AND HAVE_PAM_START)
+    set(PAM_LIBS pam)
+  else()
+    set(ENABLE_PAM 0)
+  endif()
+endif()
+set(HAVE_PAM ${ENABLE_PAM})
+
 # Check for socket functions
 if(WIN32)
   set(CMAKE_EXTRA_INCLUDE_FILES winsock2.h ws2tcpip.h)
diff --git a/common/rfb/CMakeLists.txt b/common/rfb/CMakeLists.txt
index 4ca9349..eddbaea 100644
--- a/common/rfb/CMakeLists.txt
+++ b/common/rfb/CMakeLists.txt
@@ -72,6 +72,12 @@
 
 set(RFB_LIBRARIES ${JPEG_LIBRARIES} os)
 
+if(HAVE_PAM)
+  set(RFB_SOURCES ${RFB_SOURCES} UnixPasswordValidator.cxx
+    UnixPasswordValidator.h pam.c pam.h)
+  set(RFB_LIBRARIES ${RFB_LIBRARIES} ${PAM_LIBS})
+endif()
+
 if(GNUTLS_FOUND)
   set(RFB_SOURCES
     ${RFB_SOURCES}
diff --git a/config.h.cmake.in b/config.h.cmake.in
index bce755f..5f7a4c7 100644
--- a/config.h.cmake.in
+++ b/config.h.cmake.in
@@ -17,6 +17,7 @@
 #cmakedefine HAVE_FLTK_FULLSCREEN
 #cmakedefine HAVE_FLTK_CURSOR
 #cmakedefine ENABLE_NLS 1
+#cmakedefine HAVE_PAM
 
 /* MS Visual Studio 2008 and newer doesn't know ssize_t */
 #if defined(HAVE_GNUTLS) && defined(WIN32) && !defined(__MINGW32__)