diff options
author | Isaac Boukris <iboukris@gmail.com> | 2019-09-04 17:04:12 +0300 |
---|---|---|
committer | Karolin Seeger <kseeger@samba.org> | 2019-10-16 16:47:13 +0000 |
commit | a5ffe3982cc255fd23f6be8e447499c5f614a7f1 (patch) | |
tree | 759d51defec175a5aeedda10d6a73d607c4bb89c | |
parent | e7603aa87f0d7b5e7791e469104740bcaefbf759 (diff) | |
download | samba-a5ffe3982cc255fd23f6be8e447499c5f614a7f1.tar.gz |
spnego: fix server handling of no optimistic exchange
BUG: https://bugzilla.samba.org/show_bug.cgi?id=14106
Signed-off-by: Isaac Boukris <iboukris@redhat.com>
Reviewed-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
Autobuild-User(master): Andreas Schneider <asn@cryptomilk.org>
Autobuild-Date(master): Sat Oct 12 15:51:42 UTC 2019 on sn-devel-184
Autobuild-User(v4-9-test): Karolin Seeger <kseeger@samba.org>
Autobuild-Date(v4-9-test): Wed Oct 16 16:47:14 UTC 2019 on sn-devel-144
-rw-r--r-- | auth/gensec/spnego.c | 13 | ||||
-rw-r--r-- | selftest/knownfail.d/spnego_no_optimistic | 1 |
2 files changed, 13 insertions, 1 deletions
diff --git a/auth/gensec/spnego.c b/auth/gensec/spnego.c index 6bb5c8b6417..5f78267281d 100644 --- a/auth/gensec/spnego.c +++ b/auth/gensec/spnego.c @@ -1300,6 +1300,10 @@ static NTSTATUS gensec_spnego_server_negTokenInit_step( spnego_state->mic_requested = true; } + if (sub_in.length == 0) { + spnego_state->no_optimistic = true; + } + /* * Note that 'cur_sec' is temporary memory, but * cur_sec->oid points to a const string in the @@ -1934,6 +1938,15 @@ static void gensec_spnego_update_pre(struct tevent_req *req) * Skip optimistic token per conf. */ state->sub.status = NT_STATUS_MORE_PROCESSING_REQUIRED; + } else if (spnego_state->state_position == SPNEGO_SERVER_START && + state->sub.in.length == 0 && spnego_state->no_optimistic) { + /* + * If we didn't like the mechanism for which the client sent us + * an optimistic token, or if he didn't send any, don't call + * the sub mechanism just yet. + */ + state->sub.status = NT_STATUS_MORE_PROCESSING_REQUIRED; + spnego_state->no_optimistic = false; } else { /* * MORE_PROCESSING_REQUIRED => diff --git a/selftest/knownfail.d/spnego_no_optimistic b/selftest/knownfail.d/spnego_no_optimistic deleted file mode 100644 index 54f51446be0..00000000000 --- a/selftest/knownfail.d/spnego_no_optimistic +++ /dev/null @@ -1 +0,0 @@ -^samba4.smb.spnego.*.no_optimistic |