]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
provide hooks and fallbacks for rdomain support
authorDamien Miller <djm@mindrot.org>
Wed, 25 Oct 2017 02:10:59 +0000 (13:10 +1100)
committerDamien Miller <djm@mindrot.org>
Wed, 25 Oct 2017 02:11:38 +0000 (13:11 +1100)
misc.c
servconf.c
sshd.c

diff --git a/misc.c b/misc.c
index 9b1ea4fa6ef852bfdad7ef8a7878cf8cb2898b58..2369361b33bc8dd8f62862ba81c78b18d1f4c1cf 100644 (file)
--- a/misc.c
+++ b/misc.c
@@ -184,6 +184,9 @@ set_reuseaddr(int fd)
 char *
 get_rdomain(int fd)
 {
+#if defined(HAVE_SYS_GET_RDOMAIN)
+       return sys_get_rdomain(fd);
+#elif defined(__OpenBSD__)
        int rtable;
        char *ret;
        socklen_t len = sizeof(rtable);
@@ -195,11 +198,17 @@ get_rdomain(int fd)
        }
        xasprintf(&ret, "%d", rtable);
        return ret;
+#else /* defined(__OpenBSD__) */
+       return NULL;
+#endif
 }
 
 int
 set_rdomain(int fd, const char *name)
 {
+#if defined(HAVE_SYS_SET_RDOMAIN)
+       return sys_set_rdomain(fd, name);
+#elif defined(__OpenBSD__)
        int rtable;
        const char *errstr;
 
@@ -219,6 +228,10 @@ set_rdomain(int fd, const char *name)
                return -1;
        }
        return 0;
+#else /* defined(__OpenBSD__) */
+       error("Setting routing domain is not supported on this platform");
+       return -1;
+#endif
 }
 
 /* Characters considered whitespace in strsep calls. */
index 64a8651805860f3fc4dc4b4f78d601a1d6d33553..288ec0889bccb33702297396f3aa3865a06723ba 100644 (file)
@@ -735,6 +735,9 @@ add_one_listen_addr(ServerOptions *options, const char *addr,
 static int
 valid_rdomain(const char *name)
 {
+#if defined(HAVE_SYS_VALID_RDOMAIN)
+       return valid_rdomain(name)
+#elif defined(__OpenBSD__)
        const char *errstr;
        long long num;
        struct rt_tableinfo info;
@@ -758,6 +761,10 @@ valid_rdomain(const char *name)
                return 0;
 
        return 1;
+#else /* defined(__OpenBSD__) */
+       error("Routing domains are not supported on this platform");
+       return 0;
+#endif
 }
 
 /*
diff --git a/sshd.c b/sshd.c
index 1220309d7401e965eeb6057b049a6f5d06b6e315..535cb97f06d52975d6bafec6b9eb31767ade6b7e 100644 (file)
--- a/sshd.c
+++ b/sshd.c
@@ -1372,6 +1372,18 @@ check_ip_options(struct ssh *ssh)
 static void
 set_process_rdomain(struct ssh *ssh, const char *name)
 {
+#if defined(HAVE_SYS_SET_PROCESS_RDOMAIN)
+       if (name == NULL)
+               return; /* default */
+
+       if (strcmp(name, "%D") == 0) {
+               /* "expands" to routing domain of connection */
+               if ((name = ssh_packet_rdomain_in(ssh)) == NULL)
+                       return;
+       }
+       /* NB. We don't pass 'ssh' to sys_set_process_rdomain() */
+       return sys_set_process_rdomain(name);
+#elif defined(__OpenBSD__)
        int rtable, ortable = getrtable();
        const char *errstr;
 
@@ -1391,6 +1403,9 @@ set_process_rdomain(struct ssh *ssh, const char *name)
                fatal("Unable to set routing domain %d: %s",
                    rtable, strerror(errno));
        debug("%s: set routing domain %d (was %d)", __func__, rtable, ortable);
+#else /* defined(__OpenBSD__) */
+       fatal("Unable to set routing domain: not supported in this platform");
+#endif
 }
 
 /*