-#ifdef DNETCONN
- /* DECnet displays have two colons, so _xcb_parse_display will have
- left one at the end. However, an IPv6 address can end with *two*
- colons, so only treat this as a DECnet display if host ends with
- exactly one colon. */
- char *colon = strchr(host, ':');
- if(colon && *(colon+1) == '\0')
- {
- *colon = '\0';
- return _xcb_open_decnet(host, protocol, display);
- }
- else
-#endif
- if (protocol
- || strcmp("unix",host)) { /* follow the old unix: rule */
+ /* display specifies TCP */
+ unsigned short port = X_TCP_PORT + display;
+ return _xcb_open_tcp(host, protocol, port);
+ }
+
+#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);