Use special path to sockets when running under Solaris Trusted Extensions
Solaris Trusted Extensions puts the endpoints for the X server's Unix domain sockets in a special directory shared from the global zone to each of the labeled zones, since each labeled zone has a separate /tmp. Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Peter Harris <pharris@opentext.com>
This commit is contained in:
parent
70976d87f1
commit
7131d5d070
|
@ -106,6 +106,10 @@ AC_CHECK_MEMBER([struct sockaddr_un.sun_len],
|
|||
#include <sys/un.h>
|
||||
])
|
||||
|
||||
dnl check for support for Solaris Trusted Extensions
|
||||
AC_CHECK_HEADERS([tsol/label.h])
|
||||
AC_CHECK_FUNCS([is_system_labeled])
|
||||
|
||||
xcbincludedir='${includedir}/xcb'
|
||||
AC_SUBST(xcbincludedir)
|
||||
|
||||
|
|
|
@ -54,6 +54,12 @@
|
|||
#include "xcbext.h"
|
||||
#include "xcbint.h"
|
||||
|
||||
/* must be after "xcbint.h" to get autoconf #defines */
|
||||
#if defined(HAVE_TSOL_LABEL_H) && defined(HAVE_IS_SYSTEM_LABELED)
|
||||
# include <tsol/label.h>
|
||||
# include <sys/stat.h>
|
||||
#endif
|
||||
|
||||
int xcb_popcount(uint32_t mask)
|
||||
{
|
||||
uint32_t y;
|
||||
|
@ -204,6 +210,21 @@ static int _xcb_open(const char *host, char *protocol, const int display)
|
|||
}
|
||||
|
||||
#ifndef _WIN32
|
||||
#if defined(HAVE_TSOL_LABEL_H) && defined(HAVE_IS_SYSTEM_LABELED)
|
||||
/* Check special path for Unix sockets under Solaris Trusted Extensions */
|
||||
if (is_system_labeled())
|
||||
{
|
||||
struct stat sbuf;
|
||||
const char *tsol_base = "/var/tsol/doors/.X11-unix/X";
|
||||
char tsol_socket[PATH_MAX];
|
||||
|
||||
snprintf(tsol_socket, sizeof(tsol_socket), "%s%d", tsol_base, display);
|
||||
|
||||
if (stat(tsol_socket, &sbuf) == 0)
|
||||
base = tsol_base;
|
||||
}
|
||||
#endif
|
||||
|
||||
filelen = strlen(base) + 1 + sizeof(display) * 3 + 1;
|
||||
file = malloc(filelen);
|
||||
if(file == NULL)
|
||||
|
|
Loading…
Reference in New Issue