(connect_local_xsocket): handle a tcp socket as last resort
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@10332 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -347,7 +347,7 @@ chown_xsockets (int n, struct x_socket *sockets, uid_t uid, gid_t gid)
|
||||
}
|
||||
|
||||
/*
|
||||
* Connect to local display `dnr' with local transport.
|
||||
* Connect to local display `dnr' with local transport or TCP.
|
||||
* Return a file descriptor.
|
||||
*/
|
||||
|
||||
@@ -355,18 +355,34 @@ int
|
||||
connect_local_xsocket (unsigned dnr)
|
||||
{
|
||||
int fd;
|
||||
struct sockaddr_un addr;
|
||||
char **path;
|
||||
|
||||
for (path = x_sockets; *path; ++path) {
|
||||
struct sockaddr_un addr;
|
||||
|
||||
fd = socket (AF_UNIX, SOCK_STREAM, 0);
|
||||
if (fd < 0)
|
||||
err (1, "socket AF_UNIX");
|
||||
break;
|
||||
memset (&addr, 0, sizeof(addr));
|
||||
addr.sun_family = AF_UNIX;
|
||||
snprintf (addr.sun_path, sizeof(addr.sun_path), *path, dnr);
|
||||
if (connect (fd, (struct sockaddr *)&addr, sizeof(addr)) == 0)
|
||||
return fd;
|
||||
close(fd);
|
||||
}
|
||||
{
|
||||
struct sockaddr_in addr;
|
||||
|
||||
fd = socket(AF_INET, SOCK_STREAM, 0);
|
||||
if (fd < 0)
|
||||
err (1, "socket AF_INET");
|
||||
memset (&addr, 0, sizeof(addr));
|
||||
addr.sin_family = AF_INET;
|
||||
addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
|
||||
addr.sin_port = htons(6000 + dnr);
|
||||
if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) == 0)
|
||||
return fd;
|
||||
close(fd);
|
||||
}
|
||||
err (1, "connecting to local display %u", dnr);
|
||||
}
|
||||
|
Reference in New Issue
Block a user