diff options
author | Darren Tucker <dtucker@zip.com.au> | 2010-01-08 17:03:46 +1100 |
---|---|---|
committer | Darren Tucker <dtucker@zip.com.au> | 2010-01-08 17:03:46 +1100 |
commit | 34e314da1b832fee576e4ebd8b177154a45fec15 (patch) | |
tree | 0530be5f339034486b323ed96674f6291ab79d42 /misc.c | |
parent | f1de4e5228ad86b191c3297bf6c528753587be5e (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.c | 39 |
1 files changed, 38 insertions, 1 deletions
@@ -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 */ | ||
155 | int | ||
156 | socket_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 "\"" |