Two small fixes for sshd -T: ListenAddress'es are added to a list head so
authordtucker <dtucker@openbsd.org>
Thu, 23 Apr 2015 04:59:10 +0000 (04:59 +0000)
committerdtucker <dtucker@openbsd.org>
Thu, 23 Apr 2015 04:59:10 +0000 (04:59 +0000)
reverse the order when printing them to ensure the behaviour remains the same,
and print StreamLocalBindMask as octal with leading zero.  ok deraadt@

usr.bin/ssh/servconf.c

index 8de276a..0b7b4db 100644 (file)
@@ -1,5 +1,5 @@
 
-/* $OpenBSD: servconf.c,v 1.262 2015/04/23 04:53:53 dtucker Exp $ */
+/* $OpenBSD: servconf.c,v 1.263 2015/04/23 04:59:10 dtucker Exp $ */
 /*
  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
  *                    All rights reserved
@@ -1979,6 +1979,12 @@ dump_cfg_int(ServerOpCodes code, int val)
        printf("%s %d\n", lookup_opcode_name(code), val);
 }
 
+static void
+dump_cfg_oct(ServerOpCodes code, int val)
+{
+       printf("%s 0%o\n", lookup_opcode_name(code), val);
+}
+
 static void
 dump_cfg_fmtint(ServerOpCodes code, int val)
 {
@@ -2023,6 +2029,7 @@ dump_config(ServerOptions *o)
        int ret;
        struct addrinfo *ai;
        char addr[NI_MAXHOST], port[NI_MAXSERV], *s = NULL;
+       char *laddr1 = xstrdup(""), *laddr2 = NULL;
 
        /* these are usually at the top of the config */
        for (i = 0; i < o->num_ports; i++)
@@ -2030,7 +2037,11 @@ dump_config(ServerOptions *o)
        dump_cfg_fmtint(sProtocol, o->protocol);
        dump_cfg_fmtint(sAddressFamily, o->address_family);
 
-       /* ListenAddress must be after Port */
+       /*
+        * ListenAddress must be after Port.  add_one_listen_addr pushes
+        * addresses onto a stack, so to maintain ordering we need to
+        * print these in reverse order.
+        */
        for (ai = o->listen_addrs; ai; ai = ai->ai_next) {
                if ((ret = getnameinfo(ai->ai_addr, ai->ai_addrlen, addr,
                    sizeof(addr), port, sizeof(port),
@@ -2039,12 +2050,18 @@ dump_config(ServerOptions *o)
                            (ret != EAI_SYSTEM) ? gai_strerror(ret) :
                            strerror(errno));
                } else {
+                       laddr2 = laddr1;
                        if (ai->ai_family == AF_INET6)
-                               printf("listenaddress [%s]:%s\n", addr, port);
+                               xasprintf(&laddr1, "listenaddress [%s]:%s\n%s",
+                                   addr, port, laddr2);
                        else
-                               printf("listenaddress %s:%s\n", addr, port);
+                               xasprintf(&laddr1, "listenaddress %s:%s\n%s",
+                                   addr, port, laddr2);
+                       free(laddr2);
                }
        }
+       printf("%s", laddr1);
+       free(laddr1);
 
        /* integer arguments */
        dump_cfg_int(sServerKeyBits, o->server_key_bits);
@@ -2055,7 +2072,7 @@ dump_config(ServerOptions *o)
        dump_cfg_int(sMaxSessions, o->max_sessions);
        dump_cfg_int(sClientAliveInterval, o->client_alive_interval);
        dump_cfg_int(sClientAliveCountMax, o->client_alive_count_max);
-       dump_cfg_int(sStreamLocalBindMask, o->fwd_opts.streamlocal_bind_mask);
+       dump_cfg_oct(sStreamLocalBindMask, o->fwd_opts.streamlocal_bind_mask);
 
        /* formatted integer arguments */
        dump_cfg_fmtint(sPermitRootLogin, o->permit_root_login);