summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordtucker@openbsd.org <dtucker@openbsd.org>2019-04-18 18:56:16 +0000
committerDamien Miller <djm@mindrot.org>2019-05-08 18:42:03 +1000
commite826bbcafe26dac349a8593da5569e82faa45ab8 (patch)
treec5518bd5996bf258819c31ad07035588e752134a
parent5696512d7ad57e85e89f8011ce8dec617be686aa (diff)
upstream: When running sshd -T, assume any attibute not provided by
-C does not match, which allows it to work when sshd_config contains a Match directive with or without -C. bz#2858, ok djm@ OpenBSD-Commit-ID: 1a701f0a33e3bc96753cfda2fe0b0378520b82eb
-rw-r--r--servconf.c18
-rw-r--r--servconf.h4
-rw-r--r--sshd.c3
3 files changed, 15 insertions, 10 deletions
diff --git a/servconf.c b/servconf.c
index ffac5d2c7..340045b28 100644
--- a/servconf.c
+++ b/servconf.c
@@ -1,5 +1,5 @@
1 1
2/* $OpenBSD: servconf.c,v 1.350 2019/03/25 22:33:44 djm Exp $ */ 2/* $OpenBSD: servconf.c,v 1.351 2019/04/18 18:56:16 dtucker Exp $ */
3/* 3/*
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
5 * All rights reserved 5 * All rights reserved
@@ -1042,7 +1042,7 @@ match_cfg_line(char **condition, int line, struct connection_info *ci)
1042 return -1; 1042 return -1;
1043 } 1043 }
1044 if (strcasecmp(attrib, "user") == 0) { 1044 if (strcasecmp(attrib, "user") == 0) {
1045 if (ci == NULL) { 1045 if (ci == NULL || (ci->test && ci->user == NULL)) {
1046 result = 0; 1046 result = 0;
1047 continue; 1047 continue;
1048 } 1048 }
@@ -1054,7 +1054,7 @@ match_cfg_line(char **condition, int line, struct connection_info *ci)
1054 debug("user %.100s matched 'User %.100s' at " 1054 debug("user %.100s matched 'User %.100s' at "
1055 "line %d", ci->user, arg, line); 1055 "line %d", ci->user, arg, line);
1056 } else if (strcasecmp(attrib, "group") == 0) { 1056 } else if (strcasecmp(attrib, "group") == 0) {
1057 if (ci == NULL) { 1057 if (ci == NULL || (ci->test && ci->user == NULL)) {
1058 result = 0; 1058 result = 0;
1059 continue; 1059 continue;
1060 } 1060 }
@@ -1067,7 +1067,7 @@ match_cfg_line(char **condition, int line, struct connection_info *ci)
1067 result = 0; 1067 result = 0;
1068 } 1068 }
1069 } else if (strcasecmp(attrib, "host") == 0) { 1069 } else if (strcasecmp(attrib, "host") == 0) {
1070 if (ci == NULL) { 1070 if (ci == NULL || (ci->test && ci->host == NULL)) {
1071 result = 0; 1071 result = 0;
1072 continue; 1072 continue;
1073 } 1073 }
@@ -1079,7 +1079,7 @@ match_cfg_line(char **condition, int line, struct connection_info *ci)
1079 debug("connection from %.100s matched 'Host " 1079 debug("connection from %.100s matched 'Host "
1080 "%.100s' at line %d", ci->host, arg, line); 1080 "%.100s' at line %d", ci->host, arg, line);
1081 } else if (strcasecmp(attrib, "address") == 0) { 1081 } else if (strcasecmp(attrib, "address") == 0) {
1082 if (ci == NULL) { 1082 if (ci == NULL || (ci->test && ci->address == NULL)) {
1083 result = 0; 1083 result = 0;
1084 continue; 1084 continue;
1085 } 1085 }
@@ -1098,7 +1098,7 @@ match_cfg_line(char **condition, int line, struct connection_info *ci)
1098 return -1; 1098 return -1;
1099 } 1099 }
1100 } else if (strcasecmp(attrib, "localaddress") == 0){ 1100 } else if (strcasecmp(attrib, "localaddress") == 0){
1101 if (ci == NULL) { 1101 if (ci == NULL || (ci->test && ci->laddress == NULL)) {
1102 result = 0; 1102 result = 0;
1103 continue; 1103 continue;
1104 } 1104 }
@@ -1124,7 +1124,7 @@ match_cfg_line(char **condition, int line, struct connection_info *ci)
1124 arg); 1124 arg);
1125 return -1; 1125 return -1;
1126 } 1126 }
1127 if (ci == NULL) { 1127 if (ci == NULL || (ci->test && ci->lport == -1)) {
1128 result = 0; 1128 result = 0;
1129 continue; 1129 continue;
1130 } 1130 }
@@ -1138,10 +1138,12 @@ match_cfg_line(char **condition, int line, struct connection_info *ci)
1138 else 1138 else
1139 result = 0; 1139 result = 0;
1140 } else if (strcasecmp(attrib, "rdomain") == 0) { 1140 } else if (strcasecmp(attrib, "rdomain") == 0) {
1141 if (ci == NULL || ci->rdomain == NULL) { 1141 if (ci == NULL || (ci->test && ci->rdomain == NULL)) {
1142 result = 0; 1142 result = 0;
1143 continue; 1143 continue;
1144 } 1144 }
1145 if (ci->rdomain == NULL)
1146 match_test_missing_fatal("RDomain", "rdomain");
1145 if (match_pattern_list(ci->rdomain, arg, 0) != 1) 1147 if (match_pattern_list(ci->rdomain, arg, 0) != 1)
1146 result = 0; 1148 result = 0;
1147 else 1149 else
diff --git a/servconf.h b/servconf.h
index 54e0a8d8d..5483da051 100644
--- a/servconf.h
+++ b/servconf.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: servconf.h,v 1.139 2019/01/19 21:37:48 djm Exp $ */ 1/* $OpenBSD: servconf.h,v 1.140 2019/04/18 18:56:16 dtucker Exp $ */
2 2
3/* 3/*
4 * Author: Tatu Ylonen <ylo@cs.hut.fi> 4 * Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -221,6 +221,8 @@ struct connection_info {
221 const char *laddress; /* local address */ 221 const char *laddress; /* local address */
222 int lport; /* local port */ 222 int lport; /* local port */
223 const char *rdomain; /* routing domain if available */ 223 const char *rdomain; /* routing domain if available */
224 int test; /* test mode, allow some attributes to be
225 * unspecified */
224}; 226};
225 227
226 228
diff --git a/sshd.c b/sshd.c
index cbd3bce91..1fcde502b 100644
--- a/sshd.c
+++ b/sshd.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sshd.c,v 1.533 2019/03/01 02:32:39 djm Exp $ */ 1/* $OpenBSD: sshd.c,v 1.534 2019/04/18 18:56:16 dtucker Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -1843,6 +1843,7 @@ main(int ac, char **av)
1843 */ 1843 */
1844 if (connection_info == NULL) 1844 if (connection_info == NULL)
1845 connection_info = get_connection_info(ssh, 0, 0); 1845 connection_info = get_connection_info(ssh, 0, 0);
1846 connection_info->test = 1;
1846 parse_server_match_config(&options, connection_info); 1847 parse_server_match_config(&options, connection_info);
1847 dump_config(&options); 1848 dump_config(&options);
1848 } 1849 }