summaryrefslogtreecommitdiff
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 4dc152310..f0f1fd841 100644
--- a/misc.c
+++ b/misc.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: misc.c,v 1.71 2009/02/21 19:32:04 tobias Exp $ */ 1/* $OpenBSD: misc.c,v 1.72 2009/10/28 16:38:18 reyk Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000 Markus Friedl. All rights reserved.
4 * Copyright (c) 2005,2006 Damien Miller. All rights reserved. 4 * Copyright (c) 2005,2006 Damien Miller. All rights reserved.
@@ -151,6 +151,43 @@ set_nodelay(int fd)
151 error("setsockopt TCP_NODELAY: %.100s", strerror(errno)); 151 error("setsockopt TCP_NODELAY: %.100s", strerror(errno));
152} 152}
153 153
154/* open a socket in the specified routing domain */
155int
156socket_rdomain(int domain, int type, int protocol, int rdomain)
157{
158 int sock, ipproto = IPPROTO_IP;
159
160 if ((sock = socket(domain, type, protocol)) == -1)
161 return (-1);
162
163 if (rdomain == -1)
164 return (sock);
165
166 switch (domain) {
167 case AF_INET6:
168 ipproto = IPPROTO_IPV6;
169 /* FALLTHROUGH */
170 case AF_INET:
171 debug2("socket %d af %d setting rdomain %d",
172 sock, domain, rdomain);
173 if (setsockopt(sock, ipproto, SO_RDOMAIN, &rdomain,
174 sizeof(rdomain)) == -1) {
175 debug("setsockopt SO_RDOMAIN: %.100s",
176 strerror(errno));
177 close(sock);
178 return (-1);
179 }
180 break;
181 default:
182 debug("socket %d af %d does not support rdomain %d",
183 sock, domain, rdomain);
184 close(sock);
185 return (-1);
186 }
187
188 return (sock);
189}
190
154/* Characters considered whitespace in strsep calls. */ 191/* Characters considered whitespace in strsep calls. */
155#define WHITESPACE " \t\r\n" 192#define WHITESPACE " \t\r\n"
156#define QUOTE "\"" 193#define QUOTE "\""