[SCM] Samba Shared Repository - branch master updated

Stefan Metzmacher metze at samba.org
Sat Jan 22 00:28:02 UTC 2022


The branch, master has been updated
       via  fa5413b63c8 s3:libnet: Do not set ADS_AUTH_ALLOW_NTLMSSP in FIPS mode
       via  f03abaec2ab s3:winbindd: Do not set ADS_AUTH_ALLOW_NTLMSSP in FIPS mode
       via  fcf225a356a s3:winbindd: Remove trailing spaces from winbindd_ads.c
       via  9624e60e8c3 s4:selftest: plan test suite samba4.blackbox.test_weak_disable_ntlmssp_ldap
       via  eb0fa26dce7 tests: Add test for disabling NTLMSSP for ldap client connections
       via  17ea2ccdabb s3:libads: Disable NTLMSSP if not allowed (for builds without kerberos)
       via  5f6251abf2f s3:libads: Improve debug messages for SASL bind
       via  7785eb9b780 s3:libads: Disable NTLMSSP for FIPS
       via  49d18f2d6e8 s3:libads: Remove trailing spaces from sasl.c
       via  afcdb090769 s3:utils: set ads->auth.flags using krb5_state
       via  6843bdae306 wafsamba: Add our own implmentation to generate the clangdb
       via  85dbc023c30 wafsamba: Remove clangdb code which doesn't work
      from  82a21581c63 build: Without getrandom() require gnutls 3.7.2

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit fa5413b63c8f4a20ab5b803f5cc523e0658eefc9
Author: Pavel Filipenský <pfilipen at redhat.com>
Date:   Fri Jan 21 12:01:33 2022 +0100

    s3:libnet: Do not set ADS_AUTH_ALLOW_NTLMSSP in FIPS mode
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14955
    
    Pair-Programmed-With: Andreas Schneider <asn at samba.org>
    
    Signed-off-by: Pavel Filipenský <pfilipen at redhat.com>
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>
    
    Autobuild-User(master): Stefan Metzmacher <metze at samba.org>
    Autobuild-Date(master): Sat Jan 22 00:27:52 UTC 2022 on sn-devel-184

commit f03abaec2abbd22b9dc83ce4a103b1b3a2912d96
Author: Pavel Filipenský <pfilipen at redhat.com>
Date:   Tue Jan 18 19:44:54 2022 +0100

    s3:winbindd: Do not set ADS_AUTH_ALLOW_NTLMSSP in FIPS mode
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14955
    
    Pair-Programmed-With: Andreas Schneider <asn at samba.org>
    
    Signed-off-by: Pavel Filipenský <pfilipen at redhat.com>
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit fcf225a356abb06d1205f66eb79f707c85803cb5
Author: Pavel Filipenský <pfilipen at redhat.com>
Date:   Tue Jan 18 19:47:38 2022 +0100

    s3:winbindd: Remove trailing spaces from winbindd_ads.c
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14955
    
    Signed-off-by: Pavel Filipenský <pfilipen at redhat.com>
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 9624e60e8c32de695661ae8f0fb5f8f9d836ab95
Author: Pavel Filipenský <pfilipen at redhat.com>
Date:   Tue Jan 4 12:00:20 2022 +0100

    s4:selftest: plan test suite samba4.blackbox.test_weak_disable_ntlmssp_ldap
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14955
    
    Signed-off-by: Pavel Filipenský <pfilipen at redhat.com>
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit eb0fa26dce77829995505f542af02e32df088cd6
Author: Pavel Filipenský <pfilipen at redhat.com>
Date:   Mon Jan 3 15:33:46 2022 +0100

    tests: Add test for disabling NTLMSSP for ldap client connections
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14955
    
    Signed-off-by: Pavel Filipenský <pfilipen at redhat.com>
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 17ea2ccdabbe935ef571e1227908d51b755707bc
Author: Pavel Filipenský <pfilipen at redhat.com>
Date:   Mon Jan 3 11:13:06 2022 +0100

    s3:libads: Disable NTLMSSP if not allowed (for builds without kerberos)
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14955
    
    Pair-Programmed-With: Andreas Schneider <asn at samba.org>
    
    Signed-off-by: Pavel Filipenský <pfilipen at redhat.com>
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 5f6251abf2f468b3744a96376b0e1c3bc317c738
Author: Pavel Filipenský <pfilipen at redhat.com>
Date:   Fri Jan 7 10:31:19 2022 +0100

    s3:libads: Improve debug messages for SASL bind
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14955
    
    Pair-Programmed-With: Andreas Schneider <asn at samba.org>
    
    Signed-off-by: Pavel Filipenský <pfilipen at redhat.com>
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 7785eb9b78066f6f7ee2541cf72d80fcf7411329
Author: Pavel Filipenský <pfilipen at redhat.com>
Date:   Thu Dec 9 13:43:08 2021 +0100

    s3:libads: Disable NTLMSSP for FIPS
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14955
    
    Pair-Programmed-With: Andreas Schneider <asn at samba.org>
    
    Signed-off-by: Pavel Filipenský <pfilipen at redhat.com>
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 49d18f2d6e8872c2b0cbe2bf3324e7057c8438f4
Author: Pavel Filipenský <pfilipen at redhat.com>
Date:   Wed Dec 8 16:05:17 2021 +0100

    s3:libads: Remove trailing spaces from sasl.c
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14955
    
    Signed-off-by: Pavel Filipenský <pfilipen at redhat.com>
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit afcdb090769f6f0f66428cd29f88b0283c6bd527
Author: Pavel Filipenský <pfilipen at redhat.com>
Date:   Fri Dec 10 16:08:04 2021 +0100

    s3:utils: set ads->auth.flags using krb5_state
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14955
    
    Pair-Programmed-With: Andreas Schneider <asn at samba.org>
    
    Signed-off-by: Pavel Filipenský <pfilipen at redhat.com>
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 6843bdae306292a781636b4d295ed8d04ae59e07
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Jan 21 17:06:15 2022 +0100

    wafsamba: Add our own implmentation to generate the clangdb
    
    Pair-Programmed-With: Andreas Schneider <asn at samba.org>
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit 85dbc023c300a651e7802b9ebb1f08b4c2f56e8b
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Jan 21 17:05:57 2022 +0100

    wafsamba: Remove clangdb code which doesn't work
    
    This generates an incomplete database where defines and includes are missing.
    
    Pair-Programmed-With: Andreas Schneider <asn at samba.org>
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 buildtools/wafsamba/samba_deps.py                  | 60 ++++++++++++++++++----
 buildtools/wafsamba/samba_utils.py                 |  3 +-
 source3/libads/sasl.c                              | 58 +++++++++++++--------
 source3/libnet/libnet_join.c                       | 18 ++++++-
 source3/utils/net_ads.c                            | 22 +++++++-
 source3/winbindd/winbindd_ads.c                    | 57 ++++++++++++--------
 source4/selftest/tests.py                          |  1 +
 ...crypto.sh => test_weak_disable_ntlmssp_ldap.sh} | 30 ++++-------
 wscript_build_embedded_heimdal                     |  3 +-
 wscript_build_system_heimdal                       |  3 +-
 wscript_build_system_mitkrb5                       |  3 +-
 11 files changed, 176 insertions(+), 82 deletions(-)
 copy testprogs/blackbox/{test_weak_crypto.sh => test_weak_disable_ntlmssp_ldap.sh} (52%)


Changeset truncated at 500 lines:

diff --git a/buildtools/wafsamba/samba_deps.py b/buildtools/wafsamba/samba_deps.py
index 81979e291a7..9c922f7e036 100644
--- a/buildtools/wafsamba/samba_deps.py
+++ b/buildtools/wafsamba/samba_deps.py
@@ -2,7 +2,7 @@
 
 import os, sys, re
 
-from waflib import Build, Options, Logs, Utils, Errors, Scripting
+from waflib import Build, Options, Logs, Utils, Errors, Task
 from waflib.Logs import debug
 from waflib.Configure import conf
 from waflib import ConfigSet
@@ -1164,13 +1164,56 @@ def load_samba_deps(bld, tgt_list):
     return True
 
 
+def generate_clangdb(bld):
+    classes = []
+    for x in ('c', 'cxx'):
+        cls = Task.classes.get(x)
+        if cls:
+            classes.append(cls)
+    task_classes = tuple(classes)
+
+    tasks = []
+    for g in bld.groups:
+        for tg in g:
+            if isinstance(tg, Task.Task):
+                lst = [tg]
+            else:
+                lst = tg.tasks
+            for task in lst:
+                try:
+                    cmd = task.last_cmd
+                except AttributeError:
+                    continue
+                if isinstance(task, task_classes):
+                    tasks.append(task)
+    if len(tasks) == 0:
+        return
+
+    database_file = bld.bldnode.make_node('compile_commands.json')
+    Logs.info('Build commands will be stored in %s',
+              database_file.path_from(bld.path))
+    try:
+        root = database_file.read_json()
+    except IOError:
+        root = []
+    clang_db = dict((x['file'], x) for x in root)
+    for task in tasks:
+        f_node = task.inputs[0]
+        cmd = task.last_cmd
+        filename = f_node.path_from(task.get_cwd())
+        entry = {
+            "directory": task.get_cwd().abspath(),
+            "arguments": cmd,
+            "file": filename,
+        }
+        clang_db[filename] = entry
+    root = list(clang_db.values())
+    database_file.write_json(root)
+
 
 def check_project_rules(bld):
     '''check the project rules - ensuring the targets are sane'''
 
-    if bld.__class__.__name__ == "ClangDbContext":
-        return
-
     loops = {}
     inc_loops = {}
 
@@ -1255,12 +1298,9 @@ def check_project_rules(bld):
 
     Logs.info("Project rules pass")
 
-    timer = Utils.Timer()
-
-    bld.load('clang_compilation_database')
-    Scripting.run_command('clangdb')
-
-    debug("deps: clang_compilation_database: %s" % str(timer))
+    if bld.cmd == 'build':
+        Task.Task.keep_last_cmd = True
+        bld.add_post_fun(generate_clangdb)
 
 
 def CHECK_PROJECT_RULES(bld):
diff --git a/buildtools/wafsamba/samba_utils.py b/buildtools/wafsamba/samba_utils.py
index 863e9d5ba22..45047e18ada 100644
--- a/buildtools/wafsamba/samba_utils.py
+++ b/buildtools/wafsamba/samba_utils.py
@@ -465,8 +465,7 @@ def RECURSE(ctx, directory):
                     'CleanContext',
                     'InstallContext',
                     'UninstallContext',
-                    'ListContext',
-                    'ClangDbContext']:
+                    'ListContext']:
         return ctx.recurse(relpath)
     if 'waflib.extras.compat15' in sys.modules:
         return ctx.recurse(relpath)
diff --git a/source3/libads/sasl.c b/source3/libads/sasl.c
index 60fa2bf80cb..1bcfe0490a8 100644
--- a/source3/libads/sasl.c
+++ b/source3/libads/sasl.c
@@ -1,18 +1,18 @@
-/* 
+/*
    Unix SMB/CIFS implementation.
    ads sasl code
    Copyright (C) Andrew Tridgell 2001
-   
+
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
-   
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -117,7 +117,7 @@ static const struct ads_saslwrap_ops ads_sasl_gensec_ops = {
 	.disconnect	= ads_sasl_gensec_disconnect
 };
 
-/* 
+/*
    perform a LDAP/SASL/SPNEGO/{NTLMSSP,KRB5} bind (just how many layers can
    we fit on one socket??)
 */
@@ -496,7 +496,7 @@ static ADS_STATUS ads_generate_service_principal(ADS_STRUCT *ads,
 
 #endif /* HAVE_KRB5 */
 
-/* 
+/*
    this performs a SASL/SPNEGO bind
 */
 static ADS_STATUS ads_sasl_spnego_bind(ADS_STRUCT *ads)
@@ -529,7 +529,7 @@ static ADS_STATUS ads_sasl_spnego_bind(ADS_STRUCT *ads)
 	file_save("sasl_spnego.dat", blob.data, blob.length);
 #endif
 
-	/* the server sent us the first part of the SPNEGO exchange in the negprot 
+	/* the server sent us the first part of the SPNEGO exchange in the negprot
 	   reply */
 	if (!spnego_parse_negTokenInit(talloc_tos(), blob, OIDs, &given_principal, NULL) ||
 			OIDs[0] == NULL) {
@@ -557,7 +557,7 @@ static ADS_STATUS ads_sasl_spnego_bind(ADS_STRUCT *ads)
 
 #ifdef HAVE_KRB5
 	if (!(ads->auth.flags & ADS_AUTH_DISABLE_KERBEROS) &&
-	    got_kerberos_mechanism) 
+	    got_kerberos_mechanism)
 	{
 		mech = "KRB5";
 
@@ -578,7 +578,7 @@ static ADS_STATUS ads_sasl_spnego_bind(ADS_STRUCT *ads)
 				  "calling kinit\n", ads_errstr(status)));
 		}
 
-		status = ADS_ERROR_KRB5(ads_kinit_password(ads)); 
+		status = ADS_ERROR_KRB5(ads_kinit_password(ads));
 
 		if (ADS_ERR_OK(status)) {
 			status = ads_sasl_spnego_gensec_bind(ads, "GSS-SPNEGO",
@@ -586,36 +586,50 @@ static ADS_STATUS ads_sasl_spnego_bind(ADS_STRUCT *ads)
 							p.service, p.hostname,
 							blob);
 			if (!ADS_ERR_OK(status)) {
-				DEBUG(0,("kinit succeeded but "
-					"ads_sasl_spnego_gensec_bind(KRB5) failed "
-					"for %s/%s with user[%s] realm[%s]: %s\n",
+				DBG_ERR("kinit succeeded but "
+					"SPNEGO bind with Kerberos failed "
+					"for %s/%s - user[%s], realm[%s]: %s\n",
 					p.service, p.hostname,
 					ads->auth.user_name,
 					ads->auth.realm,
-					ads_errstr(status)));
+					ads_errstr(status));
 			}
 		}
 
 		/* only fallback to NTLMSSP if allowed */
-		if (ADS_ERR_OK(status) || 
+		if (ADS_ERR_OK(status) ||
 		    !(ads->auth.flags & ADS_AUTH_ALLOW_NTLMSSP)) {
 			goto done;
 		}
 
-		DEBUG(1,("ads_sasl_spnego_gensec_bind(KRB5) failed "
-			 "for %s/%s with user[%s] realm[%s]: %s, "
-			 "fallback to NTLMSSP\n",
-			 p.service, p.hostname,
-			 ads->auth.user_name,
-			 ads->auth.realm,
-			 ads_errstr(status)));
+		DBG_WARNING("SASL bind with Kerberos failed "
+			    "for %s/%s - user[%s], realm[%s]: %s, "
+			    "try to fallback to NTLMSSP\n",
+			    p.service, p.hostname,
+			    ads->auth.user_name,
+			    ads->auth.realm,
+			    ads_errstr(status));
 	}
 #endif
 
 	/* lets do NTLMSSP ... this has the big advantage that we don't need
-	   to sync clocks, and we don't rely on special versions of the krb5 
+	   to sync clocks, and we don't rely on special versions of the krb5
 	   library for HMAC_MD4 encryption */
 	mech = "NTLMSSP";
+
+	if (!(ads->auth.flags & ADS_AUTH_ALLOW_NTLMSSP)) {
+		DBG_WARNING("We can't use NTLMSSP, it is not allowed.\n");
+		status = ADS_ERROR_NT(NT_STATUS_NETWORK_CREDENTIAL_CONFLICT);
+		goto done;
+	}
+
+	if (lp_weak_crypto() == SAMBA_WEAK_CRYPTO_DISALLOWED) {
+		DBG_WARNING("We can't fallback to NTLMSSP, weak crypto is"
+			    " disallowed.\n");
+		status = ADS_ERROR_NT(NT_STATUS_NETWORK_CREDENTIAL_CONFLICT);
+		goto done;
+	}
+
 	status = ads_sasl_spnego_gensec_bind(ads, "GSS-SPNEGO",
 					     CRED_USE_KERBEROS_DISABLED,
 					     p.service, p.hostname,
diff --git a/source3/libnet/libnet_join.c b/source3/libnet/libnet_join.c
index 00d71b97f2a..5069e7546ef 100644
--- a/source3/libnet/libnet_join.c
+++ b/source3/libnet/libnet_join.c
@@ -139,6 +139,7 @@ static ADS_STATUS libnet_connect_ads(const char *dns_domain_name,
 	ADS_STATUS status;
 	ADS_STRUCT *my_ads = NULL;
 	char *cp;
+	enum credentials_use_kerberos krb5_state;
 
 	my_ads = ads_init(dns_domain_name,
 			  netbios_domain_name,
@@ -148,7 +149,22 @@ static ADS_STATUS libnet_connect_ads(const char *dns_domain_name,
 		return ADS_ERROR_LDAP(LDAP_NO_MEMORY);
 	}
 
-	my_ads->auth.flags |= ADS_AUTH_ALLOW_NTLMSSP;
+	/* In FIPS mode, client use kerberos is forced to required. */
+	krb5_state = lp_client_use_kerberos();
+	switch (krb5_state) {
+	case CRED_USE_KERBEROS_REQUIRED:
+		my_ads->auth.flags &= ~ADS_AUTH_DISABLE_KERBEROS;
+		my_ads->auth.flags &= ~ADS_AUTH_ALLOW_NTLMSSP;
+		break;
+	case CRED_USE_KERBEROS_DESIRED:
+		my_ads->auth.flags &= ~ADS_AUTH_DISABLE_KERBEROS;
+		my_ads->auth.flags |= ADS_AUTH_ALLOW_NTLMSSP;
+		break;
+	case CRED_USE_KERBEROS_DISABLED:
+		my_ads->auth.flags |= ADS_AUTH_DISABLE_KERBEROS;
+		my_ads->auth.flags |= ADS_AUTH_ALLOW_NTLMSSP;
+		break;
+	}
 
 	if (user_name) {
 		SAFE_FREE(my_ads->auth.user_name);
diff --git a/source3/utils/net_ads.c b/source3/utils/net_ads.c
index 2a793139be0..d1fc3289184 100644
--- a/source3/utils/net_ads.c
+++ b/source3/utils/net_ads.c
@@ -601,6 +601,8 @@ static ADS_STATUS ads_startup_int(struct net_context *c, bool only_own_domain,
 	char *cp;
 	const char *realm = NULL;
 	bool tried_closest_dc = false;
+	enum credentials_use_kerberos krb5_state =
+		CRED_USE_KERBEROS_DISABLED;
 
 	/* lp_realm() should be handled by a command line param,
 	   However, the join requires that realm be set in smb.conf
@@ -644,10 +646,28 @@ retry:
 		ads->auth.password = smb_xstrdup(c->opt_password);
 	}
 
-	ads->auth.flags |= auth_flags;
 	SAFE_FREE(ads->auth.user_name);
 	ads->auth.user_name = smb_xstrdup(c->opt_user_name);
 
+	ads->auth.flags |= auth_flags;
+
+	/* The ADS code will handle FIPS mode */
+	krb5_state = cli_credentials_get_kerberos_state(c->creds);
+	switch (krb5_state) {
+	case CRED_USE_KERBEROS_REQUIRED:
+		ads->auth.flags &= ~ADS_AUTH_DISABLE_KERBEROS;
+		ads->auth.flags &= ~ADS_AUTH_ALLOW_NTLMSSP;
+		break;
+	case CRED_USE_KERBEROS_DESIRED:
+		ads->auth.flags &= ~ADS_AUTH_DISABLE_KERBEROS;
+		ads->auth.flags |= ADS_AUTH_ALLOW_NTLMSSP;
+		break;
+	case CRED_USE_KERBEROS_DISABLED:
+		ads->auth.flags |= ADS_AUTH_DISABLE_KERBEROS;
+		ads->auth.flags |= ADS_AUTH_ALLOW_NTLMSSP;
+		break;
+	}
+
        /*
         * If the username is of the form "name at realm",
         * extract the realm and convert to upper case.
diff --git a/source3/winbindd/winbindd_ads.c b/source3/winbindd/winbindd_ads.c
index 948c903f165..6f01ef6e334 100644
--- a/source3/winbindd/winbindd_ads.c
+++ b/source3/winbindd/winbindd_ads.c
@@ -34,6 +34,7 @@
 #include "../libds/common/flag_mapping.h"
 #include "libsmb/samlogon_cache.h"
 #include "passdb.h"
+#include "auth/credentials/credentials.h"
 
 #ifdef HAVE_ADS
 
@@ -102,6 +103,7 @@ static ADS_STATUS ads_cached_connection_connect(ADS_STRUCT **adsp,
 	ADS_STATUS status;
 	struct sockaddr_storage dc_ss;
 	fstring dc_name;
+	enum credentials_use_kerberos krb5_state;
 
 	if (auth_realm == NULL) {
 		return ADS_ERROR_NT(NT_STATUS_UNSUCCESSFUL);
@@ -125,7 +127,22 @@ static ADS_STATUS ads_cached_connection_connect(ADS_STRUCT **adsp,
 	ads->auth.renewable = renewable;
 	ads->auth.password = password;
 
-	ads->auth.flags |= ADS_AUTH_ALLOW_NTLMSSP;
+	/* In FIPS mode, client use kerberos is forced to required. */
+	krb5_state = lp_client_use_kerberos();
+	switch (krb5_state) {
+	case CRED_USE_KERBEROS_REQUIRED:
+		ads->auth.flags &= ~ADS_AUTH_DISABLE_KERBEROS;
+		ads->auth.flags &= ~ADS_AUTH_ALLOW_NTLMSSP;
+		break;
+	case CRED_USE_KERBEROS_DESIRED:
+		ads->auth.flags &= ~ADS_AUTH_DISABLE_KERBEROS;
+		ads->auth.flags |= ADS_AUTH_ALLOW_NTLMSSP;
+		break;
+	case CRED_USE_KERBEROS_DISABLED:
+		ads->auth.flags |= ADS_AUTH_DISABLE_KERBEROS;
+		ads->auth.flags |= ADS_AUTH_ALLOW_NTLMSSP;
+		break;
+	}
 
 	ads->auth.realm = SMB_STRDUP(auth_realm);
 	if (!strupper_m(ads->auth.realm)) {
@@ -326,7 +343,7 @@ static NTSTATUS query_user_list(struct winbindd_domain *domain,
 
 	if ( !winbindd_can_contact_domain( domain ) ) {
 		DEBUG(10,("query_user_list: No incoming trust for domain %s\n",
-			  domain->name));		
+			  domain->name));
 		return NT_STATUS_OK;
 	}
 
@@ -432,7 +449,7 @@ static NTSTATUS enum_dom_groups(struct winbindd_domain *domain,
 
 	if ( !winbindd_can_contact_domain( domain ) ) {
 		DEBUG(10,("enum_dom_groups: No incoming trust for domain %s\n",
-			  domain->name));		
+			  domain->name));
 		return NT_STATUS_OK;
 	}
 
@@ -447,7 +464,7 @@ static NTSTATUS enum_dom_groups(struct winbindd_domain *domain,
 	 * According to Section 5.1(4) of RFC 2251 if a value of a type is it's
 	 * default value, it MUST be absent. In case of extensible matching the
 	 * "dnattr" boolean defaults to FALSE and so it must be only be present
-	 * when set to TRUE. 
+	 * when set to TRUE.
 	 *
 	 * When it is set to FALSE and the OpenLDAP lib (correctly) encodes a
 	 * filter using bitwise matching rule then the buggy AD fails to decode
@@ -458,9 +475,9 @@ static NTSTATUS enum_dom_groups(struct winbindd_domain *domain,
 	 *
 	 * Thanks to Ralf Haferkamp for input and testing - Guenther */
 
-	filter = talloc_asprintf(mem_ctx, "(&(objectCategory=group)(&(groupType:dn:%s:=%d)(!(groupType:dn:%s:=%d))))", 
+	filter = talloc_asprintf(mem_ctx, "(&(objectCategory=group)(&(groupType:dn:%s:=%d)(!(groupType:dn:%s:=%d))))",
 				 ADS_LDAP_MATCHING_RULE_BIT_AND, GROUP_TYPE_SECURITY_ENABLED,
-				 ADS_LDAP_MATCHING_RULE_BIT_AND, 
+				 ADS_LDAP_MATCHING_RULE_BIT_AND,
 				 enum_dom_local_groups ? GROUP_TYPE_BUILTIN_LOCAL_GROUP : GROUP_TYPE_RESOURCE_GROUP);
 
 	if (filter == NULL) {
@@ -529,7 +546,7 @@ static NTSTATUS enum_dom_groups(struct winbindd_domain *domain,
 	DEBUG(3,("ads enum_dom_groups gave %d entries\n", (*num_entries)));
 
 done:
-	if (res) 
+	if (res)
 		ads_msgfree(ads, res);
 
 	return status;
@@ -542,12 +559,12 @@ static NTSTATUS enum_local_groups(struct winbindd_domain *domain,
 				struct wb_acct_info **info)
 {
 	/*
-	 * This is a stub function only as we returned the domain 
+	 * This is a stub function only as we returned the domain
 	 * local groups in enum_dom_groups() if the domain->native field
 	 * was true.  This is a simple performance optimization when
 	 * using LDAP.
 	 *
-	 * if we ever need to enumerate domain local groups separately, 
+	 * if we ever need to enumerate domain local groups separately,
 	 * then this optimization in enum_dom_groups() will need
 	 * to be split out
 	 */
@@ -601,7 +618,7 @@ static NTSTATUS rids_to_names(struct winbindd_domain *domain,
    tokenGroups are not available. */
 static NTSTATUS lookup_usergroups_member(struct winbindd_domain *domain,
 					 TALLOC_CTX *mem_ctx,
-					 const char *user_dn, 
+					 const char *user_dn,
 					 struct dom_sid *primary_group,
 					 uint32_t *p_num_groups, struct dom_sid **user_sids)
 {
@@ -620,7 +637,7 @@ static NTSTATUS lookup_usergroups_member(struct winbindd_domain *domain,
 
 	if ( !winbindd_can_contact_domain( domain ) ) {
 		DEBUG(10,("lookup_usergroups_members: No incoming trust for domain %s\n",
-			  domain->name));		
+			  domain->name));
 		return NT_STATUS_OK;
 	}
 
@@ -702,7 +719,7 @@ static NTSTATUS lookup_usergroups_member(struct winbindd_domain *domain,
 
 	DEBUG(3,("ads lookup_usergroups (member) succeeded for dn=%s\n", user_dn));
 done:
-	if (res) 
+	if (res)
 		ads_msgfree(ads, res);
 
 	return status;
@@ -883,14 +900,14 @@ static NTSTATUS lookup_usergroups(struct winbindd_domain *domain,
 	if (count != 1) {
 		status = NT_STATUS_UNSUCCESSFUL;
 		DEBUG(1,("lookup_usergroups(sid=%s) ads_search tokenGroups: "
-			 "invalid number of results (count=%d)\n", 
+			 "invalid number of results (count=%d)\n",
 			 dom_sid_str_buf(sid, &buf),
 			 count));
 		goto done;
 	}
 
 	if (!msg) {
-		DEBUG(1,("lookup_usergroups(sid=%s) ads_search tokenGroups: NULL msg\n", 
+		DEBUG(1,("lookup_usergroups(sid=%s) ads_search tokenGroups: NULL msg\n",
 			 dom_sid_str_buf(sid, &buf)));
 		status = NT_STATUS_UNSUCCESSFUL;
 		goto done;
@@ -903,7 +920,7 @@ static NTSTATUS lookup_usergroups(struct winbindd_domain *domain,
 	}
 
 	if (!ads_pull_uint32(ads, msg, "primaryGroupID", &primary_group_rid)) {
-		DEBUG(1,("%s: No primary group for sid=%s !?\n", 
+		DEBUG(1,("%s: No primary group for sid=%s !?\n",
 			 domain->name,
 			 dom_sid_str_buf(sid, &buf)));
 		goto done;
@@ -913,7 +930,7 @@ static NTSTATUS lookup_usergroups(struct winbindd_domain *domain,
 
 	count = ads_pull_sids(ads, mem_ctx, msg, "tokenGroups", &sids);
 
-	/* there must always be at least one group in the token, 
+	/* there must always be at least one group in the token,
 	   unless we are talking to a buggy Win2k server */
 
 	/* actually this only happens when the machine account has no read
@@ -937,7 +954,7 @@ static NTSTATUS lookup_usergroups(struct winbindd_domain *domain,
 		/* lookup what groups this user is a member of by DN search on
 		 * "member" */
 
-		status = lookup_usergroups_member(domain, mem_ctx, user_dn, 
+		status = lookup_usergroups_member(domain, mem_ctx, user_dn,
 						  &primary_group,
 						  &num_groups, user_sids);
 		*p_num_groups = num_groups;
@@ -1302,7 +1319,7 @@ static NTSTATUS lookup_groupmem(struct winbindd_domain *domain,
 			DEBUG(10, ("lookup_groupmem: lsa_lookup_sids could "
 				   "not map any SIDs at all.\n"));
 			/* Don't handle this as an error here.


-- 
Samba Shared Repository



More information about the samba-cvs mailing list