summaryrefslogtreecommitdiffstats
path: root/misc.c
diff options
context:
space:
mode:
authorDarren Tucker <dtucker@zip.com.au>2010-01-08 17:03:46 +1100
committerDarren Tucker <dtucker@zip.com.au>2010-01-08 17:03:46 +1100
commit34e314da1b832fee576e4ebd8b177154a45fec15 (patch)
tree0530be5f339034486b323ed96674f6291ab79d42 /misc.c
parentf1de4e5228ad86b191c3297bf6c528753587be5e (diff)
- reyk@cvs.openbsd.org 2009/10/28 16:38:18
[ssh_config.5 sshd.c misc.h ssh-keyscan.1 readconf.h sshconnect.c channels.c channels.h servconf.h servconf.c ssh.1 ssh-keyscan.c scp.1 sftp.1 sshd_config.5 readconf.c ssh.c misc.c] Allow to set the rdomain in ssh/sftp/scp/sshd and ssh-keyscan. ok markus@
Diffstat (limited to 'misc.c')
-rw-r--r--misc.c39
1 files changed, 38 insertions, 1 deletions
diff --git a/misc.c b/misc.c
index 4dc15231..f0f1fd84 100644
--- a/misc.c
+++ b/misc.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: misc.c,v 1.71 2009/02/21 19:32:04 tobias Exp $ */
+/* $OpenBSD: misc.c,v 1.72 2009/10/28 16:38:18 reyk Exp $ */
/*
* Copyright (c) 2000 Markus Friedl. All rights reserved.
* Copyright (c) 2005,2006 Damien Miller. All rights reserved.
@@ -151,6 +151,43 @@ set_nodelay(int fd)
error("setsockopt TCP_NODELAY: %.100s", strerror(errno));
}
+/* open a socket in the specified routing domain */
+int
+socket_rdomain(int domain, int type, int protocol, int rdomain)
+{
+ int sock, ipproto = IPPROTO_IP;
+
+ if ((sock = socket(domain, type, protocol)) == -1)
+ return (-1);
+
+ if (rdomain == -1)
+ return (sock);
+
+ switch (domain) {
+ case AF_INET6:
+ ipproto = IPPROTO_IPV6;
+ /* FALLTHROUGH */
+ case AF_INET:
+ debug2("socket %d af %d setting rdomain %d",
+ sock, domain, rdomain);
+ if (setsockopt(sock, ipproto, SO_RDOMAIN, &rdomain,
+ sizeof(rdomain)) == -1) {
+ debug("setsockopt SO_RDOMAIN: %.100s",
+ strerror(errno));
+ close(sock);
+ return (-1);
+ }
+ break;
+ default:
+ debug("socket %d af %d does not support rdomain %d",
+ sock, domain, rdomain);
+ close(sock);
+ return (-1);
+ }
+
+ return (sock);
+}
+
/* Characters considered whitespace in strsep calls. */
#define WHITESPACE " \t\r\n"
#define QUOTE "\""