diff options
author | Damien Miller <djm@mindrot.org> | 2017-10-25 13:10:59 +1100 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2017-10-25 13:11:38 +1100 |
commit | 43c29bb7cfd46bbbc61e0ffa61a11e74d49a712f (patch) | |
tree | 6f50beda7b60d6efaa85369407b9874730559b68 | |
parent | 3235473bc8e075fad7216b7cd62fcd2b0320ea04 (diff) |
provide hooks and fallbacks for rdomain support
-rw-r--r-- | misc.c | 13 | ||||
-rw-r--r-- | servconf.c | 7 | ||||
-rw-r--r-- | sshd.c | 15 |
3 files changed, 35 insertions, 0 deletions
@@ -184,6 +184,9 @@ set_reuseaddr(int fd) | |||
184 | char * | 184 | char * |
185 | get_rdomain(int fd) | 185 | get_rdomain(int fd) |
186 | { | 186 | { |
187 | #if defined(HAVE_SYS_GET_RDOMAIN) | ||
188 | return sys_get_rdomain(fd); | ||
189 | #elif defined(__OpenBSD__) | ||
187 | int rtable; | 190 | int rtable; |
188 | char *ret; | 191 | char *ret; |
189 | socklen_t len = sizeof(rtable); | 192 | socklen_t len = sizeof(rtable); |
@@ -195,11 +198,17 @@ get_rdomain(int fd) | |||
195 | } | 198 | } |
196 | xasprintf(&ret, "%d", rtable); | 199 | xasprintf(&ret, "%d", rtable); |
197 | return ret; | 200 | return ret; |
201 | #else /* defined(__OpenBSD__) */ | ||
202 | return NULL; | ||
203 | #endif | ||
198 | } | 204 | } |
199 | 205 | ||
200 | int | 206 | int |
201 | set_rdomain(int fd, const char *name) | 207 | set_rdomain(int fd, const char *name) |
202 | { | 208 | { |
209 | #if defined(HAVE_SYS_SET_RDOMAIN) | ||
210 | return sys_set_rdomain(fd, name); | ||
211 | #elif defined(__OpenBSD__) | ||
203 | int rtable; | 212 | int rtable; |
204 | const char *errstr; | 213 | const char *errstr; |
205 | 214 | ||
@@ -219,6 +228,10 @@ set_rdomain(int fd, const char *name) | |||
219 | return -1; | 228 | return -1; |
220 | } | 229 | } |
221 | return 0; | 230 | return 0; |
231 | #else /* defined(__OpenBSD__) */ | ||
232 | error("Setting routing domain is not supported on this platform"); | ||
233 | return -1; | ||
234 | #endif | ||
222 | } | 235 | } |
223 | 236 | ||
224 | /* Characters considered whitespace in strsep calls. */ | 237 | /* Characters considered whitespace in strsep calls. */ |
diff --git a/servconf.c b/servconf.c index 64a865180..288ec0889 100644 --- a/servconf.c +++ b/servconf.c | |||
@@ -735,6 +735,9 @@ add_one_listen_addr(ServerOptions *options, const char *addr, | |||
735 | static int | 735 | static int |
736 | valid_rdomain(const char *name) | 736 | valid_rdomain(const char *name) |
737 | { | 737 | { |
738 | #if defined(HAVE_SYS_VALID_RDOMAIN) | ||
739 | return valid_rdomain(name) | ||
740 | #elif defined(__OpenBSD__) | ||
738 | const char *errstr; | 741 | const char *errstr; |
739 | long long num; | 742 | long long num; |
740 | struct rt_tableinfo info; | 743 | struct rt_tableinfo info; |
@@ -758,6 +761,10 @@ valid_rdomain(const char *name) | |||
758 | return 0; | 761 | return 0; |
759 | 762 | ||
760 | return 1; | 763 | return 1; |
764 | #else /* defined(__OpenBSD__) */ | ||
765 | error("Routing domains are not supported on this platform"); | ||
766 | return 0; | ||
767 | #endif | ||
761 | } | 768 | } |
762 | 769 | ||
763 | /* | 770 | /* |
@@ -1372,6 +1372,18 @@ check_ip_options(struct ssh *ssh) | |||
1372 | static void | 1372 | static void |
1373 | set_process_rdomain(struct ssh *ssh, const char *name) | 1373 | set_process_rdomain(struct ssh *ssh, const char *name) |
1374 | { | 1374 | { |
1375 | #if defined(HAVE_SYS_SET_PROCESS_RDOMAIN) | ||
1376 | if (name == NULL) | ||
1377 | return; /* default */ | ||
1378 | |||
1379 | if (strcmp(name, "%D") == 0) { | ||
1380 | /* "expands" to routing domain of connection */ | ||
1381 | if ((name = ssh_packet_rdomain_in(ssh)) == NULL) | ||
1382 | return; | ||
1383 | } | ||
1384 | /* NB. We don't pass 'ssh' to sys_set_process_rdomain() */ | ||
1385 | return sys_set_process_rdomain(name); | ||
1386 | #elif defined(__OpenBSD__) | ||
1375 | int rtable, ortable = getrtable(); | 1387 | int rtable, ortable = getrtable(); |
1376 | const char *errstr; | 1388 | const char *errstr; |
1377 | 1389 | ||
@@ -1391,6 +1403,9 @@ set_process_rdomain(struct ssh *ssh, const char *name) | |||
1391 | fatal("Unable to set routing domain %d: %s", | 1403 | fatal("Unable to set routing domain %d: %s", |
1392 | rtable, strerror(errno)); | 1404 | rtable, strerror(errno)); |
1393 | debug("%s: set routing domain %d (was %d)", __func__, rtable, ortable); | 1405 | debug("%s: set routing domain %d (was %d)", __func__, rtable, ortable); |
1406 | #else /* defined(__OpenBSD__) */ | ||
1407 | fatal("Unable to set routing domain: not supported in this platform"); | ||
1408 | #endif | ||
1394 | } | 1409 | } |
1395 | 1410 | ||
1396 | /* | 1411 | /* |