diff options
author | Damien Miller <djm@mindrot.org> | 2014-07-18 14:11:24 +1000 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2014-07-18 14:11:24 +1000 |
commit | 7acefbbcbeab725420ea07397ae35992f505f702 (patch) | |
tree | bfb07917715d425438dab987a47ccd7a8d7f118b /canohost.c | |
parent | 6262d760e00714523633bd989d62e273a3dca99a (diff) |
- millert@cvs.openbsd.org 2014/07/15 15:54:14
[PROTOCOL auth-options.c auth-passwd.c auth-rh-rsa.c auth-rhosts.c]
[auth-rsa.c auth.c auth1.c auth2-hostbased.c auth2-kbdint.c auth2-none.c]
[auth2-passwd.c auth2-pubkey.c auth2.c canohost.c channels.c channels.h]
[clientloop.c misc.c misc.h monitor.c mux.c packet.c readconf.c]
[readconf.h servconf.c servconf.h serverloop.c session.c ssh-agent.c]
[ssh.c ssh_config.5 sshconnect.c sshconnect1.c sshconnect2.c sshd.c]
[sshd_config.5 sshlogin.c]
Add support for Unix domain socket forwarding. A remote TCP port
may be forwarded to a local Unix domain socket and vice versa or
both ends may be a Unix domain socket. This is a reimplementation
of the streamlocal patches by William Ahern from:
http://www.25thandclement.com/~william/projects/streamlocal.html
OK djm@ markus@
Diffstat (limited to 'canohost.c')
-rw-r--r-- | canohost.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/canohost.c b/canohost.c index a61a8c94d..a3e3bbff8 100644 --- a/canohost.c +++ b/canohost.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: canohost.c,v 1.70 2014/01/19 04:17:29 dtucker Exp $ */ | 1 | /* $OpenBSD: canohost.c,v 1.71 2014/07/15 15:54:14 millert Exp $ */ |
2 | /* | 2 | /* |
3 | * Author: Tatu Ylonen <ylo@cs.hut.fi> | 3 | * Author: Tatu Ylonen <ylo@cs.hut.fi> |
4 | * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland | 4 | * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland |
@@ -16,6 +16,7 @@ | |||
16 | 16 | ||
17 | #include <sys/types.h> | 17 | #include <sys/types.h> |
18 | #include <sys/socket.h> | 18 | #include <sys/socket.h> |
19 | #include <sys/un.h> | ||
19 | 20 | ||
20 | #include <netinet/in.h> | 21 | #include <netinet/in.h> |
21 | #include <arpa/inet.h> | 22 | #include <arpa/inet.h> |
@@ -262,6 +263,11 @@ get_socket_address(int sock, int remote, int flags) | |||
262 | if (addr.ss_family == AF_INET6) | 263 | if (addr.ss_family == AF_INET6) |
263 | addrlen = sizeof(struct sockaddr_in6); | 264 | addrlen = sizeof(struct sockaddr_in6); |
264 | 265 | ||
266 | if (addr.ss_family == AF_UNIX) { | ||
267 | /* Get the Unix domain socket path. */ | ||
268 | return xstrdup(((struct sockaddr_un *)&addr)->sun_path); | ||
269 | } | ||
270 | |||
265 | ipv64_normalise_mapped(&addr, &addrlen); | 271 | ipv64_normalise_mapped(&addr, &addrlen); |
266 | 272 | ||
267 | /* Get the address in ascii. */ | 273 | /* Get the address in ascii. */ |
@@ -384,6 +390,10 @@ get_sock_port(int sock, int local) | |||
384 | if (from.ss_family == AF_INET6) | 390 | if (from.ss_family == AF_INET6) |
385 | fromlen = sizeof(struct sockaddr_in6); | 391 | fromlen = sizeof(struct sockaddr_in6); |
386 | 392 | ||
393 | /* Unix domain sockets don't have a port number. */ | ||
394 | if (from.ss_family == AF_UNIX) | ||
395 | return 0; | ||
396 | |||
387 | /* Return port number. */ | 397 | /* Return port number. */ |
388 | if ((r = getnameinfo((struct sockaddr *)&from, fromlen, NULL, 0, | 398 | if ((r = getnameinfo((struct sockaddr *)&from, fromlen, NULL, 0, |
389 | strport, sizeof(strport), NI_NUMERICSERV)) != 0) | 399 | strport, sizeof(strport), NI_NUMERICSERV)) != 0) |