summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Miller <djm@mindrot.org>2017-10-25 13:10:59 +1100
committerDamien Miller <djm@mindrot.org>2017-10-25 13:11:38 +1100
commit43c29bb7cfd46bbbc61e0ffa61a11e74d49a712f (patch)
tree6f50beda7b60d6efaa85369407b9874730559b68
parent3235473bc8e075fad7216b7cd62fcd2b0320ea04 (diff)
provide hooks and fallbacks for rdomain support
-rw-r--r--misc.c13
-rw-r--r--servconf.c7
-rw-r--r--sshd.c15
3 files changed, 35 insertions, 0 deletions
diff --git a/misc.c b/misc.c
index 9b1ea4fa6..2369361b3 100644
--- a/misc.c
+++ b/misc.c
@@ -184,6 +184,9 @@ set_reuseaddr(int fd)
184char * 184char *
185get_rdomain(int fd) 185get_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
200int 206int
201set_rdomain(int fd, const char *name) 207set_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,
735static int 735static int
736valid_rdomain(const char *name) 736valid_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/*
diff --git a/sshd.c b/sshd.c
index 1220309d7..535cb97f0 100644
--- a/sshd.c
+++ b/sshd.c
@@ -1372,6 +1372,18 @@ check_ip_options(struct ssh *ssh)
1372static void 1372static void
1373set_process_rdomain(struct ssh *ssh, const char *name) 1373set_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/*