View | Details | Raw Unified | Return to bug 1789 | Differences between
and this patch

Collapse All | Expand All

(-)openssh-5.5p1/channels.c.x11 (-4 / +18 lines)
Lines 3332-3338 x11_create_display_inet(int x11_display_ Link Here
3332
}
3332
}
3333
3333
3334
static int
3334
static int
3335
connect_local_xsocket_path(const char *pathname)
3335
connect_local_xsocket_path(const char *pathname, int len)
3336
{
3336
{
3337
	int sock;
3337
	int sock;
3338
	struct sockaddr_un addr;
3338
	struct sockaddr_un addr;
Lines 3342-3348 connect_local_xsocket_path(const char *p Link Here
3342
		error("socket: %.100s", strerror(errno));
3342
		error("socket: %.100s", strerror(errno));
3343
	memset(&addr, 0, sizeof(addr));
3343
	memset(&addr, 0, sizeof(addr));
3344
	addr.sun_family = AF_UNIX;
3344
	addr.sun_family = AF_UNIX;
3345
	strlcpy(addr.sun_path, pathname, sizeof addr.sun_path);
3345
	if (len <= 0)
3346
		return -1;
3347
	if (len > sizeof addr.sun_path)
3348
		len = sizeof addr.sun_path;
3349
	memcpy(addr.sun_path, pathname , len);
3346
	if (connect(sock, (struct sockaddr *)&addr, sizeof(addr)) == 0)
3350
	if (connect(sock, (struct sockaddr *)&addr, sizeof(addr)) == 0)
3347
		return sock;
3351
		return sock;
3348
	close(sock);
3352
	close(sock);
Lines 3354-3361 static int Link Here
3354
connect_local_xsocket(u_int dnr)
3358
connect_local_xsocket(u_int dnr)
3355
{
3359
{
3356
	char buf[1024];
3360
	char buf[1024];
3357
	snprintf(buf, sizeof buf, _PATH_UNIX_X, dnr);
3361
	int len;
3358
	return connect_local_xsocket_path(buf);
3362
#ifdef linux
3363
	int ret;
3364
#endif
3365
	len = snprintf(buf + 1, sizeof (buf) - 1, _PATH_UNIX_X, dnr);
3366
#ifdef linux
3367
	/* try abstract socket first */
3368
	buf[0] = '\0';
3369
	if ((ret = connect_local_xsocket_path(buf, len + 1)) >= 0)
3370
		return ret;
3371
#endif
3372
	return connect_local_xsocket_path(buf + 1, len);
3359
}
3373
}
3360
3374
3361
int
3375
int

Return to bug 1789