]> andersk Git - openssh.git/blobdiff - sshd.c
- dtucker@cvs.openbsd.org 2010/01/09 11:17:56
[openssh.git] / sshd.c
diff --git a/sshd.c b/sshd.c
index 91831e208707a77b347c12e42d61862a6782e460..bdaf1574a7e8badd552b499a32fddf0079ed2247 100644 (file)
--- a/sshd.c
+++ b/sshd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sshd.c,v 1.367 2009/05/28 16:50:16 andreas Exp $ */
+/* $OpenBSD: sshd.c,v 1.369 2010/01/09 11:17:56 dtucker Exp $ */
 /*
  * Author: Tatu Ylonen <ylo@cs.hut.fi>
  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -309,6 +309,7 @@ sighup_restart(void)
        close_listen_socks();
        close_startup_pipes();
        alarm(0);  /* alarm timer persists across exec */
+       signal(SIGHUP, SIG_IGN); /* will be restored after exec */
        execv(saved_argv[0], saved_argv);
        logit("RESTART FAILED: av[0]='%.100s', error: %.100s.", saved_argv[0],
            strerror(errno));
@@ -578,7 +579,7 @@ demote_sensitive_data(void)
 static void
 privsep_preauth_child(void)
 {
-       u_int32_t rnd[256];
+       u_int32_t rnd[256];
        gid_t gidset[1];
 
        /* Enable challenge-response authentication for privilege separation */
@@ -960,8 +961,8 @@ server_listen(void)
                        continue;
                }
                /* Create socket for listening. */
-               listen_sock = socket(ai->ai_family, ai->ai_socktype,
-                   ai->ai_protocol);
+               listen_sock = socket_rdomain(ai->ai_family, ai->ai_socktype,
+                   ai->ai_protocol, options.rdomain);
                if (listen_sock < 0) {
                        /* kernel may not support ipv6 */
                        verbose("socket: %.100s", strerror(errno));
@@ -979,15 +980,9 @@ server_listen(void)
                    &on, sizeof(on)) == -1)
                        error("setsockopt SO_REUSEADDR: %s", strerror(errno));
 
-#ifdef IPV6_V6ONLY
                /* Only communicate in IPv6 over AF_INET6 sockets. */
-               if (ai->ai_family == AF_INET6) {
-                       if (setsockopt(listen_sock, IPPROTO_IPV6, IPV6_V6ONLY,
-                           &on, sizeof(on)) == -1)
-                               error("setsockopt IPV6_V6ONLY: %s",
-                                   strerror(errno));
-               }
-#endif
+               if (ai->ai_family == AF_INET6)
+                       sock_set_v6only(listen_sock);
 
                debug("Bind to port %s on %s.", strport, ntop);
 
@@ -1475,8 +1470,9 @@ main(int ac, char **av)
        if (options.challenge_response_authentication)
                options.kbd_interactive_authentication = 1;
 
-       /* set default channel AF */
+       /* set default channel AF and routing domain */
        channel_set_af(options.address_family);
+       channel_set_rdomain(options.rdomain);
 
        /* Check that there are no remaining arguments. */
        if (optind < ac) {
@@ -1662,6 +1658,7 @@ main(int ac, char **av)
        if (inetd_flag) {
                server_accept_inetd(&sock_in, &sock_out);
        } else {
+               platform_pre_listen();
                server_listen();
 
                if (options.protocol & SSH_PROTO_1)
This page took 2.543865 seconds and 4 git commands to generate.