s3:passdb: use cli_credentials_set_kerberos_state() for trusts in pdb_get_trust_crede...
authorStefan Metzmacher <metze@samba.org>
Wed, 22 Feb 2017 19:07:25 +0000 (20:07 +0100)
committerStefan Metzmacher <metze@samba.org>
Fri, 24 Feb 2017 17:40:14 +0000 (18:40 +0100)
Trust accounts can only use kerberos when contacting other AD domains,
using NTLMSSP will fail.

At the same time it doesn't make sense to try kerberos for NT4 domains,
still NTLMSSP will fail, but the callers has to deal with that
case and just fallback to an anonymous SMB connection.

In all cases we should be able to use NETLOGON SCHANNEL
over any anonymous smb or tcp transport.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=12598

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
source3/passdb/passdb.c

index 36aedadea22580e371175b6fa0c044b3230c8e1a..64e05b346de02f580cfb8c1180b7fff81de81e20 100644 (file)
@@ -2621,6 +2621,19 @@ NTSTATUS pdb_get_trust_credentials(const char *netbios_domain,
                        status = NT_STATUS_NO_MEMORY;
                        goto fail;
                }
+
+               /*
+                * It's not possible to use NTLMSSP with a domain trust account.
+                */
+               cli_credentials_set_kerberos_state(creds, CRED_MUST_USE_KERBEROS);
+       } else {
+               /*
+                * We can't use kerberos against an NT4 domain.
+                *
+                * We should have a mode that also disallows NTLMSSP here,
+                * as only NETLOGON SCHANNEL is possible.
+                */
+               cli_credentials_set_kerberos_state(creds, CRED_DONT_USE_KERBEROS);
        }
 
        ok = cli_credentials_set_username(creds, account_name, CRED_SPECIFIED);
@@ -2635,6 +2648,10 @@ NTSTATUS pdb_get_trust_credentials(const char *netbios_domain,
                        status = NT_STATUS_NO_MEMORY;
                        goto fail;
                }
+               /*
+                * We currently can't do kerberos just with an NTHASH.
+                */
+               cli_credentials_set_kerberos_state(creds, CRED_DONT_USE_KERBEROS);
                goto done;
        }