store compat flags in struct ssh; ok djm@
authormarkus <markus@openbsd.org>
Mon, 19 Jan 2015 20:20:20 +0000 (20:20 +0000)
committermarkus <markus@openbsd.org>
Mon, 19 Jan 2015 20:20:20 +0000 (20:20 +0000)
usr.bin/ssh/compat.c
usr.bin/ssh/compat.h
usr.bin/ssh/sshconnect.c
usr.bin/ssh/sshd.c

index f592ae3..5eb9e95 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: compat.c,v 1.86 2014/10/08 22:15:27 djm Exp $ */
+/* $OpenBSD: compat.c,v 1.87 2015/01/19 20:20:20 markus Exp $ */
 /*
  * Copyright (c) 1999, 2000, 2001, 2002 Markus Friedl.  All rights reserved.
  *
@@ -55,7 +55,7 @@ enable_compat13(void)
        compat13 = 1;
 }
 /* datafellows bug compatibility */
-void
+u_int
 compat_datafellows(const char *version)
 {
        int i;
@@ -172,13 +172,14 @@ compat_datafellows(const char *version)
        for (i = 0; check[i].pat; i++) {
                if (match_pattern_list(version, check[i].pat,
                    strlen(check[i].pat), 0) == 1) {
-                       datafellows = check[i].bugs;
                        debug("match: %s pat %s compat 0x%08x",
-                           version, check[i].pat, datafellows);
-                       return;
+                           version, check[i].pat, check[i].bugs);
+                       datafellows = check[i].bugs;    /* XXX for now */
+                       return check[i].bugs;
                }
        }
        debug("no match: %s", version);
+       return 0;
 }
 
 #define        SEP     ","
@@ -190,7 +191,9 @@ proto_spec(const char *spec)
 
        if (spec == NULL)
                return ret;
-       q = s = xstrdup(spec);
+       q = s = strdup(spec);
+       if (s == NULL)
+               return ret;
        for ((p = strsep(&q, SEP)); p && *p != '\0'; (p = strsep(&q, SEP))) {
                switch (atoi(p)) {
                case 1:
index 2e25d5b..af2f007 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: compat.h,v 1.45 2014/04/18 23:52:25 djm Exp $ */
+/* $OpenBSD: compat.h,v 1.46 2015/01/19 20:20:20 markus Exp $ */
 
 /*
  * Copyright (c) 1999, 2000, 2001 Markus Friedl.  All rights reserved.
@@ -63,7 +63,7 @@
 
 void     enable_compat13(void);
 void     enable_compat20(void);
-void     compat_datafellows(const char *);
+u_int    compat_datafellows(const char *);
 int     proto_spec(const char *);
 char   *compat_cipher_proposal(char *);
 char   *compat_pkalg_proposal(char *);
index 7aa789f..725c013 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: sshconnect.c,v 1.254 2014/12/21 22:27:56 djm Exp $ */
+/* $OpenBSD: sshconnect.c,v 1.255 2015/01/19 20:20:20 markus Exp $ */
 /*
  * Author: Tatu Ylonen <ylo@cs.hut.fi>
  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -618,7 +618,7 @@ ssh_exchange_identification(int timeout_ms)
        debug("Remote protocol version %d.%d, remote software version %.100s",
            remote_major, remote_minor, remote_version);
 
-       compat_datafellows(remote_version);
+       active_state->compat = compat_datafellows(remote_version);
        mismatch = 0;
 
        switch (remote_major) {
index 54766fe..910dd9c 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: sshd.c,v 1.435 2015/01/19 20:16:15 markus Exp $ */
+/* $OpenBSD: sshd.c,v 1.436 2015/01/19 20:20:20 markus Exp $ */
 /*
  * Author: Tatu Ylonen <ylo@cs.hut.fi>
  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -462,7 +462,7 @@ sshd_exchange_identification(int sock_in, int sock_out)
        debug("Client protocol version %d.%d; client software version %.100s",
            remote_major, remote_minor, remote_version);
 
-       compat_datafellows(remote_version);
+       active_state->compat = compat_datafellows(remote_version);
 
        if ((datafellows & SSH_BUG_PROBE) != 0) {
                logit("probed from %s with %s.  Don't panic.",