(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.
|
* Return a file descriptor.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -355,18 +355,34 @@ int
|
|||||||
connect_local_xsocket (unsigned dnr)
|
connect_local_xsocket (unsigned dnr)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
struct sockaddr_un addr;
|
|
||||||
char **path;
|
char **path;
|
||||||
|
|
||||||
for (path = x_sockets; *path; ++path) {
|
for (path = x_sockets; *path; ++path) {
|
||||||
|
struct sockaddr_un addr;
|
||||||
|
|
||||||
fd = socket (AF_UNIX, SOCK_STREAM, 0);
|
fd = socket (AF_UNIX, SOCK_STREAM, 0);
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
err (1, "socket AF_UNIX");
|
break;
|
||||||
memset (&addr, 0, sizeof(addr));
|
memset (&addr, 0, sizeof(addr));
|
||||||
addr.sun_family = AF_UNIX;
|
addr.sun_family = AF_UNIX;
|
||||||
snprintf (addr.sun_path, sizeof(addr.sun_path), *path, dnr);
|
snprintf (addr.sun_path, sizeof(addr.sun_path), *path, dnr);
|
||||||
if (connect (fd, (struct sockaddr *)&addr, sizeof(addr)) == 0)
|
if (connect (fd, (struct sockaddr *)&addr, sizeof(addr)) == 0)
|
||||||
return fd;
|
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);
|
err (1, "connecting to local display %u", dnr);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user