diff options
author | dtucker@openbsd.org <dtucker@openbsd.org> | 2019-04-18 18:56:16 +0000 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2019-05-08 18:42:03 +1000 |
commit | e826bbcafe26dac349a8593da5569e82faa45ab8 (patch) | |
tree | c5518bd5996bf258819c31ad07035588e752134a | |
parent | 5696512d7ad57e85e89f8011ce8dec617be686aa (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.c | 18 | ||||
-rw-r--r-- | servconf.h | 4 | ||||
-rw-r--r-- | sshd.c | 3 |
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 | ||
@@ -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 | } |