The branch, master has been updated
       via  51dd39b selftest: Rename samba4.blackbox.pdbtest to 
samba.blackbox.pdbtest
       via  b7b4879 s3-torture: Extend pdbtest to also run an authentication 
unit-test
       via  de2d813 build: Remove pdbtest from the autoconf build
      from  528d3fe libcli/smb: do not set SMB2_TF_MSG_SIZE in the caller

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


- Log -----------------------------------------------------------------
commit 51dd39b2cf800ccf89cc1ae5ce6fe1ce2edff9c3
Author: Andrew Bartlett <abart...@samba.org>
Date:   Wed Aug 8 16:02:29 2012 +1000

    selftest: Rename samba4.blackbox.pdbtest to samba.blackbox.pdbtest
    
    This test covers s3dc as well.
    
    Andrew Bartlett
    
    Autobuild-User(master): Andrew Bartlett <abart...@samba.org>
    Autobuild-Date(master): Wed Aug  8 09:57:14 CEST 2012 on sn-devel-104

commit b7b48793501915ecf5cb52b3044fd2f902987802
Author: Andrew Bartlett <abart...@samba.org>
Date:   Wed Aug 8 15:22:03 2012 +1000

    s3-torture: Extend pdbtest to also run an authentication unit-test
    
    This tests both the builtin auth_sam against passdb directly and the
    configured auth module.
    
    Andrew Bartlett

commit de2d813898bcfc530d13753a57ac8356b7c7bf0e
Author: Andrew Bartlett <abart...@samba.org>
Date:   Wed Aug 8 15:53:36 2012 +1000

    build: Remove pdbtest from the autoconf build
    
    pdbtest is internal test utility that is not installed.  It is only
    run from the full (waf) make test, and does not need to be built in
    the autoconf build.
    
    Removing it from the autoconf build makes it easier to expand this
    test to depend on more parts of Samba.
    
    Andrew Bartlett

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

Summary of changes:
 source3/Makefile.in       |   13 +-----
 source3/torture/pdbtest.c |  117 ++++++++++++++++++++++++++++++++++++++++++++-
 source3/wscript_build     |    4 +-
 source4/selftest/tests.py |    2 +-
 4 files changed, 121 insertions(+), 15 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/Makefile.in b/source3/Makefile.in
index e42c1b5..2635cfa 100644
--- a/source3/Makefile.in
+++ b/source3/Makefile.in
@@ -223,7 +223,7 @@ BIN_PROGS3 = bin/smbpasswd bin/rpcclient bin/smbcacls \
 TORTURE_PROGS = bin/smbtorture bin/msgtest \
        bin/masktest bin/locktest \
        bin/locktest2 bin/nsstest bin/vfstest \
-       bin/pdbtest $(TALLOCTORT) bin/replacetort \
+       $(TALLOCTORT) bin/replacetort \
        $(TDBTORTURE) $(PTHREADPOOLTEST) \
        bin/smbconftort bin/vlp
 
@@ -1323,11 +1323,6 @@ LOCKTEST_OBJ = torture/locktest.o $(PARAM_OBJ) 
$(LOCKING_OBJ) $(KRBCLIENT_OBJ) \
 
 NSSTEST_OBJ = ../nsswitch/nsstest.o ../lib/util/setid.o $(LIBSAMBAUTIL_OBJ)
 
-PDBTEST_OBJ = torture/pdbtest.o $(PARAM_OBJ) $(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \
-               $(LIB_NONSMBD_OBJ) $(PASSDB_OBJ) $(GROUPDB_OBJ) \
-               $(SMBLDAP_OBJ) $(POPT_LIB_OBJ) \
-               $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ)
-
 VFSTEST_OBJ = torture/cmd_vfs.o torture/vfstest.o $(SMBD_OBJ_BASE) 
$(READLINE_OBJ) \
                torture/vfstest_chain.o
 
@@ -2073,12 +2068,6 @@ bin/nsstest: $(BINARY_PREREQS) $(NSSTEST_OBJ) 
$(LIBTALLOC)
        @$(CC) -o $@ $(NSSTEST_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) \
                $(LIBTALLOC_LIBS)
 
-bin/pdbtest: $(BINARY_PREREQS) $(PDBTEST_OBJ) @BUILD_POPT@ $(LIBTALLOC) 
$(LIBTDB) $(LIBWBCLIENT)
-       @echo Linking $@
-       @$(CC) -o $@ $(PDBTEST_OBJ) $(LDFLAGS) $(DYNEXP) \
-               $(LIBS) $(KRB5LIBS) $(LDAP_LIBS) $(PASSDB_LIBS) \
-               $(POPT_LIBS) $(LIBTALLOC_LIBS) $(LIBTDB_LIBS) 
$(LIBWBCLIENT_LIBS) $(ZLIB_LIBS)
-
 bin/vfstest: $(BINARY_PREREQS) $(VFSTEST_OBJ) @BUILD_POPT@ $(LIBTALLOC) 
$(LIBTDB) $(LIBWBCLIENT)
        @echo Linking $@
        @$(CC) -o $@ $(VFSTEST_OBJ) $(LDFLAGS) $(TERMLDFLAGS) $(AVAHI_LIBS) \
diff --git a/source3/torture/pdbtest.c b/source3/torture/pdbtest.c
index 821f39b..d0d529e 100644
--- a/source3/torture/pdbtest.c
+++ b/source3/torture/pdbtest.c
@@ -4,6 +4,7 @@
 
    Copyright (C) Wilco Baan Hofman 2006
    Copyright (C) Jelmer Vernooij 2006
+   Copyright (C) Andrew Bartlett 2012
 
    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
@@ -27,6 +28,10 @@
 #include "../librpc/gen_ndr/drsblobs.h"
 #include "../librpc/gen_ndr/ndr_drsblobs.h"
 #include "../libcli/security/dom_sid.h"
+#include "../libcli/auth/libcli_auth.h"
+#include "../auth/common_auth.h"
+#include "lib/tsocket/tsocket.h"
+#include "include/auth.h"
 
 #define TRUST_DOM "trustdom"
 #define TRUST_PWD "trustpwd1232"
@@ -38,6 +43,7 @@ static bool samu_correct(struct samu *s1, struct samu *s2)
        uint32 s1_len, s2_len;
        const char *s1_buf, *s2_buf;
        const uint8 *d1_buf, *d2_buf;
+       const struct dom_sid *s1_sid, *s2_sid;
 
        /* Check Unix username */
        s1_buf = pdb_get_username(s1);
@@ -233,11 +239,111 @@ static bool samu_correct(struct samu *s1, struct samu 
*s2)
                ret = False;
        }
 
-       /* TODO Check user and group sids */
+       /* Check user and group sids */
+       s1_sid = pdb_get_user_sid(s1);
+       s2_sid = pdb_get_user_sid(s2);
+       if (s2_sid == NULL && s1_sid != NULL) {
+               DEBUG(0, ("USER SID not set\n"));
+               ret = False;
+       } else if (s1_sid == NULL) {
+               /* Do nothing */
+       } else if (!dom_sid_equal(s1_sid, s2_sid)) {
+               DEBUG(0, ("USER SID is not written correctly\n"));
+               ret = False;
+       }
 
        return ret;     
 }
 
+static bool test_auth(TALLOC_CTX *mem_ctx, struct samu *pdb_entry)
+{
+       struct auth_usersupplied_info *user_info;
+       struct auth_context *auth_context;
+       static const uint8_t challenge_8[8] = {1, 2, 3, 4, 5, 6, 7, 8};
+       DATA_BLOB challenge = data_blob_const(challenge_8, sizeof(challenge_8));
+       struct tsocket_address *tsocket_address;
+       unsigned char local_nt_response[24];
+       DATA_BLOB nt_resp = data_blob_const(local_nt_response, 
sizeof(local_nt_response));
+       unsigned char local_nt_session_key[16];
+       struct netr_SamInfo3 *info3_sam, *info3_auth;
+       struct auth_serversupplied_info *server_info;
+       NTSTATUS status;
+       
+       SMBOWFencrypt(pdb_get_nt_passwd(pdb_entry), challenge_8,
+                     local_nt_response);
+       SMBsesskeygen_ntv1(pdb_get_nt_passwd(pdb_entry), local_nt_session_key);
+
+       if (tsocket_address_inet_from_strings(NULL, "ip", NULL, 0, 
&tsocket_address) != 0) {
+               return False;
+       }
+       
+       status = make_user_info(&user_info, pdb_get_username(pdb_entry), 
pdb_get_username(pdb_entry), 
+                               pdb_get_domain(pdb_entry), 
pdb_get_domain(pdb_entry), lp_netbios_name(), 
+                               tsocket_address, NULL, &nt_resp, NULL, NULL, 
NULL, 
+                               AUTH_PASSWORD_RESPONSE);
+       if (!NT_STATUS_IS_OK(status)) {
+               DEBUG(0, ("Failed to test authentication with 
check_sam_security_info3: %s\n", nt_errstr(status)));
+               return False;
+       }
+
+       status = check_sam_security_info3(&challenge, NULL, user_info, 
&info3_sam);
+       if (!NT_STATUS_IS_OK(status)) {
+               DEBUG(0, ("Failed to test authentication with 
check_sam_security_info3: %s\n", nt_errstr(status)));
+               return False;
+       }
+
+       if (memcmp(info3_sam->base.key.key, local_nt_session_key, 16) != 0) {
+               DEBUG(0, ("Returned NT session key is incorrect\n"));
+               return False;
+       }
+
+       status = make_auth_context_fixed(NULL, &auth_context, challenge.data);
+
+       if (!NT_STATUS_IS_OK(status)) {
+               DEBUG(0, ("Failed to test authentication with 
check_sam_security_info3: %s\n", nt_errstr(status)));
+               return False;
+       }
+       
+       status = auth_check_ntlm_password(auth_context, user_info, 
&server_info);
+
+       if (!NT_STATUS_IS_OK(status)) {
+               DEBUG(0, ("Failed to test authentication with auth module: 
%s\n", nt_errstr(status)));
+               return False;
+       }
+       
+       info3_auth = talloc_zero(mem_ctx, struct netr_SamInfo3);
+       if (info3_auth == NULL) {
+               return False;
+       }
+
+       status = serverinfo_to_SamInfo3(server_info, NULL, 0, info3_auth);
+       if (!NT_STATUS_IS_OK(status)) {
+               DEBUG(0, ("serverinfo_to_SamInfo3 failed: %s\n",
+                         nt_errstr(status)));
+               return False;
+       }
+
+       if (memcmp(info3_auth->base.key.key, local_nt_session_key, 16) != 0) {
+               DEBUG(0, ("Returned NT session key is incorrect\n"));
+               return False;
+       }
+
+       if (!dom_sid_equal(info3_sam->base.domain_sid, 
info3_auth->base.domain_sid)) {
+               DEBUG(0, ("domain_sid in SAM info3 %s does not match domain_sid 
in AUTH info3 %s\n", 
+                         dom_sid_string(NULL, info3_sam->base.domain_sid),
+                         dom_sid_string(NULL, info3_auth->base.domain_sid)));
+               return False;
+       }
+       
+       /* TODO: 
+        * Compre more details from the two info3 structures,
+        * then test that an expired/disabled/pwdmustchange account
+        * returns the correct errors
+        */
+
+       return True;
+}
+
 static bool test_trusted_domains(TALLOC_CTX *ctx,
                                 struct pdb_methods *pdb,
                                 bool *error)
@@ -363,6 +469,7 @@ int main(int argc, char **argv)
        /* Load configuration */
        lp_load_global(get_dyn_CONFIGFILE());
        setup_logging("pdbtest", DEBUG_STDOUT);
+       init_names();
 
        if (backend == NULL) {
                backend = lp_passdb_backend();
@@ -464,6 +571,14 @@ int main(int argc, char **argv)
                error = True;
        }
 
+       if (test_auth(ctx, out)) {
+               printf("Authentication module test passed\n");
+       } else {
+               printf("Authentication module test failed!\n");
+               error = True;
+       }
+                       
+
        /* Delete account */
        if (!NT_STATUS_IS_OK(rv = pdb->delete_sam_account(pdb, out))) {
                fprintf(stderr, "Error in delete_sam_account %s\n", 
diff --git a/source3/wscript_build b/source3/wscript_build
index 9125667..2b00a16 100755
--- a/source3/wscript_build
+++ b/source3/wscript_build
@@ -1480,7 +1480,9 @@ bld.SAMBA3_BINARY('pdbtest',
                  deps='''
                  talloc
                  pdb
-                 popt_samba3''',
+                 popt_samba3
+                 AUTH_COMMON
+                 auth''',
                  vars=locals())
 
 bld.SAMBA3_BINARY('vfstest',
diff --git a/source4/selftest/tests.py b/source4/selftest/tests.py
index 25b22b7..12c84a3 100755
--- a/source4/selftest/tests.py
+++ b/source4/selftest/tests.py
@@ -188,7 +188,7 @@ for env in ["dc", "s3dc"]:
         "-k no --option=usespnego=no"]:
         name = "rpc.lsa.secrets on %s with with %s" % (transport, ntlmoptions)
         plansmbtorturetestsuite('rpc.lsa.secrets', env, ["%s:$SERVER[]" % 
(transport), ntlmoptions, '-U$USERNAME%$PASSWORD', '--workgroup=$DOMAIN', 
'--option=gensec:target_hostname=$NETBIOSNAME'], "samba4.%s" % name)
-    plantestsuite("samba4.blackbox.pdbtest", "%s:local" % env, 
[os.path.join(bbdir, "test_pdbtest.sh"), '$SERVER', "$PREFIX", smbclient, 
'$SMB_CONF_PATH', configuration])
+    plantestsuite("samba.blackbox.pdbtest", "%s:local" % env, 
[os.path.join(bbdir, "test_pdbtest.sh"), '$SERVER', "$PREFIX", smbclient, 
'$SMB_CONF_PATH', configuration])
 
 transports = ["ncacn_np", "ncacn_ip_tcp"]
 


-- 
Samba Shared Repository

Reply via email to