endif() | endif() | ||||
endif() | endif() | ||||
# Check for SELinux library | |||||
if(UNIX AND NOT APPLE) | |||||
check_include_files(selinux/selinux.h HAVE_SELINUX_H) | |||||
if(HAVE_SELINUX_H) | |||||
set(CMAKE_REQUIRED_LIBRARIES -lselinux) | |||||
set(CMAKE_REQUIRED_LIBRARIES) | |||||
set(SELINUX_LIBS selinux) | |||||
add_definitions("-DHAVE_SELINUX") | |||||
else() | |||||
message(WARNING "Could not find SELinux development files") | |||||
endif() | |||||
endif() | |||||
# Generate config.h and make sure the source finds it | # Generate config.h and make sure the source finds it | ||||
configure_file(config.h.in config.h) | configure_file(config.h.in config.h) | ||||
add_definitions(-DHAVE_CONFIG_H) | add_definitions(-DHAVE_CONFIG_H) |
add_executable(vncsession vncsession.c) | add_executable(vncsession vncsession.c) | ||||
target_link_libraries(vncsession ${PAM_LIBS}) | |||||
target_link_libraries(vncsession ${PAM_LIBS} ${SELINUX_LIBS}) | |||||
configure_file(vncserver@.service.in vncserver@.service @ONLY) | configure_file(vncserver@.service.in vncserver@.service @ONLY) | ||||
configure_file(vncsession-start.in vncsession-start @ONLY) | configure_file(vncsession-start.in vncsession-start @ONLY) |
#include <sys/types.h> | #include <sys/types.h> | ||||
#include <sys/wait.h> | #include <sys/wait.h> | ||||
#ifdef HAVE_SELINUX | |||||
#include <selinux/selinux.h> | |||||
#include <selinux/restorecon.h> | |||||
#endif | |||||
extern char **environ; | extern char **environ; | ||||
// PAM service name | // PAM service name | ||||
syslog(LOG_CRIT, "Failure creating \"%s\": %s", logfile, strerror(errno)); | syslog(LOG_CRIT, "Failure creating \"%s\": %s", logfile, strerror(errno)); | ||||
_exit(EX_OSERR); | _exit(EX_OSERR); | ||||
} | } | ||||
#ifdef HAVE_SELINUX | |||||
int result; | |||||
if (selinux_file_context_verify(logfile, 0) == 0) { | |||||
result = selinux_restorecon(logfile, SELINUX_RESTORECON_RECURSE); | |||||
if (result < 0) { | |||||
syslog(LOG_WARNING, "Failure restoring SELinux context for \"%s\": %s", logfile, strerror(errno)); | |||||
} | |||||
} | |||||
#endif | |||||
} | } | ||||
hostlen = sysconf(_SC_HOST_NAME_MAX); | hostlen = sysconf(_SC_HOST_NAME_MAX); |