diff options
author | djm@openbsd.org <djm@openbsd.org> | 2017-10-25 00:15:35 +0000 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2017-10-25 12:26:06 +1100 |
commit | acf559e1cffbd1d6167cc1742729fc381069f06b (patch) | |
tree | fc127e0bce21056c96dec59ebdc9e2ff9f5b1e4a /misc.c | |
parent | b9903ee8ee8671b447fc260c2bee3761e26c7227 (diff) |
upstream commit
Add optional rdomain qualifier to sshd_config's
ListenAddress option to allow listening on a different rdomain(4), e.g.
ListenAddress 0.0.0.0 rdomain 4
Upstream-ID: 24b6622c376feeed9e9be8b9605e593695ac9091
Diffstat (limited to 'misc.c')
-rw-r--r-- | misc.c | 40 |
1 files changed, 39 insertions, 1 deletions
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: misc.c,v 1.116 2017/10/24 19:41:45 millert Exp $ */ | 1 | /* $OpenBSD: misc.c,v 1.117 2017/10/25 00:15:35 djm 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. |
@@ -167,6 +167,44 @@ set_nodelay(int fd) | |||
167 | error("setsockopt TCP_NODELAY: %.100s", strerror(errno)); | 167 | error("setsockopt TCP_NODELAY: %.100s", strerror(errno)); |
168 | } | 168 | } |
169 | 169 | ||
170 | /* Allow local port reuse in TIME_WAIT */ | ||
171 | int | ||
172 | set_reuseaddr(int fd) | ||
173 | { | ||
174 | int on = 1; | ||
175 | |||
176 | if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) == -1) { | ||
177 | error("setsockopt SO_REUSEADDR fd %d: %s", fd, strerror(errno)); | ||
178 | return -1; | ||
179 | } | ||
180 | return 0; | ||
181 | } | ||
182 | |||
183 | /* Set routing table */ | ||
184 | int | ||
185 | set_rdomain(int fd, const char *name) | ||
186 | { | ||
187 | int rtable; | ||
188 | const char *errstr; | ||
189 | |||
190 | if (name == NULL) | ||
191 | return 0; /* default table */ | ||
192 | |||
193 | rtable = (int)strtonum(name, 0, 255, &errstr); | ||
194 | if (errstr != NULL) { | ||
195 | /* Shouldn't happen */ | ||
196 | error("Invalid routing domain \"%s\": %s", name, errstr); | ||
197 | return -1; | ||
198 | } | ||
199 | if (setsockopt(fd, SOL_SOCKET, SO_RTABLE, | ||
200 | &rtable, sizeof(rtable)) == -1) { | ||
201 | error("Failed to set routing domain %d on fd %d: %s", | ||
202 | rtable, fd, strerror(errno)); | ||
203 | return -1; | ||
204 | } | ||
205 | return 0; | ||
206 | } | ||
207 | |||
170 | /* Characters considered whitespace in strsep calls. */ | 208 | /* Characters considered whitespace in strsep calls. */ |
171 | #define WHITESPACE " \t\r\n" | 209 | #define WHITESPACE " \t\r\n" |
172 | #define QUOTE "\"" | 210 | #define QUOTE "\"" |