summaryrefslogtreecommitdiff
path: root/misc.c
diff options
context:
space:
mode:
authordjm@openbsd.org <djm@openbsd.org>2017-10-25 00:15:35 +0000
committerDamien Miller <djm@mindrot.org>2017-10-25 12:26:06 +1100
commitacf559e1cffbd1d6167cc1742729fc381069f06b (patch)
treefc127e0bce21056c96dec59ebdc9e2ff9f5b1e4a /misc.c
parentb9903ee8ee8671b447fc260c2bee3761e26c7227 (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.c40
1 files changed, 39 insertions, 1 deletions
diff --git a/misc.c b/misc.c
index cb8bf5c14..cc22fbef4 100644
--- a/misc.c
+++ b/misc.c
@@ -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 */
171int
172set_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 */
184int
185set_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 "\""