SPNEGO failure with spnego:simulate_w2k=yes after MIT patches
Andrew Bartlett
abartlet at samba.org
Sat Jun 10 10:15:28 UTC 2017
G'Day Andreas,
While working on the ldb locking patches, I noticed that this test
fails on master:
make test 'TESTS=schema.*2000'
(samba4.drs.repl_schema.python(vampire_2000_dc)(vampire_2000_dc))
In debugging this, I noticed that removing:
spnego:simulate_w2k=yes
allows the test to pass.
I've bisected the failure back to
3781eb250173981a8890b82d1ff9358f144034cd is the first bad commit
commit 3781eb250173981a8890b82d1ff9358f144034cd
Author: Andreas Schneider <asn at samba.org>
Date: Wed Mar 8 11:03:17 2017 +0100
s4:gensec_gssapi: Use smb_krb5_get_realm_from_hostname()
With credentials for administrator at FOREST1.EXAMPLE.COM
this patch changes the target_principal for
the ldap service of host dc2.forest2.example.com
from
ldap/dc2.forest2.example.com at FOREST1.EXAMPLE.COM
to
ldap/dc2.forest2.example.com at FOREST2.EXAMPLE.COM
Typically ldap/dc2.forest2.example.com at FOREST1.EXAMPLE.COM
should be used in order to allow the KDC of FOREST1.EXAMPLE.COM
to generate a referral ticket for
krbtgt/FOREST2.EXAMPLE.COM at FOREST1.EXAMPLE.COM.
The problem is that KDCs only return such referral tickets
if there's a forest trust between FOREST1.EXAMPLE.COM
and FOREST2.EXAMPLE.COM. If there's only an external domain
trust between FOREST1.EXAMPLE.COM and FOREST2.EXAMPLE.COM
the KDC of FOREST1.EXAMPLE.COM will respond with
S_PRINCIPAL_UNKNOWN
when being asked for ldap/dc2.forest2.example.com at FOREST1.EXAMPLE.C
OM.
In the case of an external trust the client can still ask
explicitly for krbtgt/FOREST2.EXAMPLE.COM at FOREST1.EXAMPLE.COM
and the KDC of FOREST1.EXAMPLE.COM will generate it.
From there the client can use the
krbtgt/FOREST2.EXAMPLE.COM at FOREST1.EXAMPLE.COM
ticket and ask a KDC of FOREST2.EXAMPLE.COM for a
service ticket for ldap/dc2.forest2.example.com at FOREST2.EXAMPLE.COM
.
With Heimdal we'll get the fallback on S_PRINCIPAL_UNKNOWN behavior
when we pass ldap/dc2.forest2.example.com at FOREST2.EXAMPLE.COM as
target principal. As _krb5_get_cred_kdc_any() first calls
get_cred_kdc_referral() (which always starts with the client realm)
and falls back to get_cred_kdc_capath() (which starts with the
given realm).
MIT krb5 only tries the given realm of the target principal,
if we want to autodetect support for transitive forest trusts,
we'll have to do the fallback ourself.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=12554
Pair-Programmed-With: Stefan Metzmacher <metze at samba.org>
Signed-off-by: Andreas Schneider <asn at samba.org>
Signed-off-by: Stefan Metzmacher <metze at samba.org>
The failure is a server-side DCE/RPC fault because the client attempts
to continue sending packets after a failed authentication. I think it
is trying NTLMSSP after a krb5 failure (see below).
The test output is:
ERROR(<class 'samba.drs_utils.drsException'>): DRS connection to
vampire2000dc failed - drsException: DRS connection to vampire2000dc
failed: (-1073610723, 'An RPC protocol error occurred.')
File "bin/python/samba/netcmd/drs.py", line 44, in drsuapi_connect
(ctx.drsuapi, ctx.drsuapi_handle, ctx.bind_supported_extensions) =
drs_utils.drsuapi_connect(ctx.server, ctx.lp, ctx.creds)
File "bin/python/samba/drs_utils.py", line 56, in drsuapi_connect
raise drsException("DRS connection to %s failed: %s" % (server, e))
Failed to replicate
SOCKET_WRAPPER_DEFAULT_IFACE="39"
RESOLV_WRAPPER_HOSTS="/data/samba/git/samba-
push/st/dns_host_file" KRB5_CONFIG="/data/samba/git/samba-
push/st/vampire_2000_dc/etc/krb5.conf"KRB5CCNAME="/data/samba/git/samba
-push/st/vampire_2000_dc/krb5_ccache" ./bin/samba-tool drs replicate
vampire2000dc dc5 --configfile=/data/samba/git/samba-
push/st/fl2000dc/etc/smb.conf -UAdministrator%locDCpass5
"CN=Configuration,DC=SAMBA2000,DC=EXAMPLE,DC=COM" at
/data/samba/git/samba-push/selftest/target/Samba4.pm line 2308.
failed to start up environment 'vampire_2000_dc' at
/data/samba/git/samba-push/selftest/target/Samba.pm line 49.
samba can't start up known environment 'vampire_2000_dc' at
/data/samba/git/samba-push/selftest/selftest.pl line 917.
teardown_env(fl2000dc)
samba: EOF on stdin - PID 6210 terminating
What I don't understand is why this passes as part of a full make test,
but fails when only running the test on its own.
The level 4 logs give this clue:
kerberos_get_realm_from_hostname VAMPIRE2000DC: failed Cannot determine
realm for host
SPNEGO(gssapi_krb5) creating NEG_TOKEN_INIT for ldap/VAMPIRE2000DC
failed (next[ntlmssp]): NT_STATUS_NO_MEMORY
Could you (and presumably metze) please have a look at this for me
please?
Thanks,
Andrew Bartlett
--
Andrew Bartlett http://samba.org/~abartlet/
Authentication Developer, Samba Team http://samba.org
Samba Developer, Catalyst IT http://catalyst.net.nz/services/samba
More information about the samba-technical
mailing list