[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Fri Dec 16 04:44:03 UTC 2016


The branch, master has been updated
       via  7585aa6 testsuite: Add cmocka unit test for smb_krb5_kt_open()
       via  494482c docs: Update doc to use absolute path for 'dedicated keytab file'
       via  91578265 krb5_wrap: Remove incorrect absolute path checks in smb_krb5_kt_open_relative()
       via  e0990cc krb5_wrap: More checks for absolute path in smb_krb5_kt_open()
       via  430c2d1 s3:crypto: Use smb_krb5_kt_open_relative() for MEMORY keytab
      from  b6fa384 selftest: test new "lsa over netlogon" smb.conf option

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


- Log -----------------------------------------------------------------
commit 7585aa6c8f225a7aed51520a2af15f0037cd37f6
Author: Andreas Schneider <asn at samba.org>
Date:   Thu Dec 15 10:33:59 2016 +0100

    testsuite: Add cmocka unit test for smb_krb5_kt_open()
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Fri Dec 16 05:43:12 CET 2016 on sn-devel-144

commit 494482c65493b3ec2532af52a3ad0a4adfef4416
Author: Andreas Schneider <asn at samba.org>
Date:   Wed Dec 14 16:44:10 2016 +0100

    docs: Update doc to use absolute path for 'dedicated keytab file'
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 9157826573195c31444d5ca0acfa41d5e4227b78
Author: Andreas Schneider <asn at samba.org>
Date:   Wed Dec 14 16:40:23 2016 +0100

    krb5_wrap: Remove incorrect absolute path checks in smb_krb5_kt_open_relative()
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit e0990ccf4e68a8d1bdce89b7d83865d950b4c4d0
Author: Andreas Schneider <asn at samba.org>
Date:   Wed Dec 14 16:37:17 2016 +0100

    krb5_wrap: More checks for absolute path in smb_krb5_kt_open()
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 430c2d18443632585897a988fb8ef7dcbe34095d
Author: Andreas Schneider <asn at samba.org>
Date:   Wed Dec 14 16:43:53 2016 +0100

    s3:crypto: Use smb_krb5_kt_open_relative() for MEMORY keytab
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

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

Summary of changes:
 .../smbdotconf/security/dedicatedkeytabfile.xml    |   2 +-
 lib/krb5_wrap/krb5_samba.c                         |  29 ++++-
 selftest/tests.py                                  |  15 ++-
 source3/librpc/crypto/gse_krb5.c                   |   2 +-
 testsuite/unittests/test_krb5_samba.c              | 145 +++++++++++++++++++++
 testsuite/unittests/wscript                        |  15 +++
 wscript                                            |   1 +
 wscript_build                                      |   1 +
 8 files changed, 200 insertions(+), 10 deletions(-)
 create mode 100644 testsuite/unittests/test_krb5_samba.c
 create mode 100644 testsuite/unittests/wscript


Changeset truncated at 500 lines:

diff --git a/docs-xml/smbdotconf/security/dedicatedkeytabfile.xml b/docs-xml/smbdotconf/security/dedicatedkeytabfile.xml
index d516315..8405b48 100644
--- a/docs-xml/smbdotconf/security/dedicatedkeytabfile.xml
+++ b/docs-xml/smbdotconf/security/dedicatedkeytabfile.xml
@@ -5,7 +5,7 @@
                  xmlns:samba="http://www.samba.org/samba/DTD/samba-doc">
 <description>
 	<para>
-	  Specifies the path to the kerberos keytab file when
+	  Specifies the absolute path to the kerberos keytab file when
 	  <smbconfoption name="kerberos method"/> is set to "dedicated
 	  keytab".
 	</para>
diff --git a/lib/krb5_wrap/krb5_samba.c b/lib/krb5_wrap/krb5_samba.c
index 28884d9..a8eafcd 100644
--- a/lib/krb5_wrap/krb5_samba.c
+++ b/lib/krb5_wrap/krb5_samba.c
@@ -1023,8 +1023,8 @@ krb5_error_code smb_krb5_kt_open_relative(krb5_context context,
 			goto out;
 		}
 
-		if ((strncmp(keytab_name_req, "WRFILE:/", 8) == 0) ||
-		    (strncmp(keytab_name_req, "FILE:/", 6) == 0)) {
+		if ((strncmp(keytab_name_req, "WRFILE:", 7) == 0) ||
+		    (strncmp(keytab_name_req, "FILE:", 5) == 0)) {
 			tmp = keytab_name_req;
 			goto resolve;
 		}
@@ -1130,12 +1130,29 @@ krb5_error_code smb_krb5_kt_open(krb5_context context,
 				 bool write_access,
 				 krb5_keytab *keytab)
 {
-	if (keytab_name_req != NULL) {
-		if (keytab_name_req[0] != '/') {
-			return KRB5_KT_BADNAME;
-		}
+	int cmp;
+
+	if (keytab_name_req == NULL) {
+		return KRB5_KT_BADNAME;
+	}
+
+	if (keytab_name_req[0] == '/') {
+		goto open_keytab;
 	}
 
+	cmp = strncmp(keytab_name_req, "FILE:/", 6);
+	if (cmp == 0) {
+		goto open_keytab;
+	}
+
+	cmp = strncmp(keytab_name_req, "WRFILE:/", 8);
+	if (cmp == 0) {
+		goto open_keytab;
+	}
+
+	return KRB5_KT_BADNAME;
+
+open_keytab:
 	return smb_krb5_kt_open_relative(context,
 					 keytab_name_req,
 					 write_access,
diff --git a/selftest/tests.py b/selftest/tests.py
index 04a8df2..eabe714 100644
--- a/selftest/tests.py
+++ b/selftest/tests.py
@@ -26,13 +26,20 @@ except KeyError:
     samba4bindir = bindir()
     config_h = os.path.join(samba4bindir, "default/include/config.h")
 
-# define here var to check what we support
+# check available features
+config_hash = dict()
 f = open(config_h, 'r')
 try:
-    have_man_pages_support = ("XSLTPROC_MANPAGES 1" in f.read())
+    lines = f.readlines()
+    config_hash = dict((x[0], ' '.join(x[1:]))
+            for x in map(lambda line: line.strip().split(' ')[1:],
+                         filter(lambda line: (line[0:7] == '#define') and (len(line.split(' ')) > 2), lines)))
 finally:
     f.close()
 
+have_man_pages_support = ("XSLTPROC_MANPAGES" in config_hash)
+with_cmocka = ("HAVE_CMOCKA" in config_hash)
+
 planpythontestsuite("none", "samba.tests.source")
 if have_man_pages_support:
     planpythontestsuite("none", "samba.tests.docs")
@@ -123,3 +130,7 @@ planpythontestsuite("none", "samba.tests.kcc.graph_utils")
 planpythontestsuite("none", "samba.tests.kcc.kcc_utils")
 planpythontestsuite("none", "samba.tests.kcc.ldif_import_export")
 plantestsuite("wafsamba.duplicate_symbols", "none", [os.path.join(srcdir(), "buildtools/wafsamba/test_duplicate_symbol.sh")])
+
+if with_cmocka:
+    plantestsuite("samba.unittests.krb5samba", "none",
+                  [os.path.join(bindir(), "default/testsuite/unittests/test_krb5samba")])
diff --git a/source3/librpc/crypto/gse_krb5.c b/source3/librpc/crypto/gse_krb5.c
index 71b2338..f7aac9e 100644
--- a/source3/librpc/crypto/gse_krb5.c
+++ b/source3/librpc/crypto/gse_krb5.c
@@ -431,7 +431,7 @@ static krb5_error_code fill_mem_keytab_from_system_keytab(krb5_context krbctx,
 	ZERO_STRUCT(kt_entry);
 	ZERO_STRUCT(kt_cursor);
 
-	ret = smb_krb5_kt_open(krbctx, NULL, false, &keytab);
+	ret = smb_krb5_kt_open_relative(krbctx, NULL, false, &keytab);
 	if (ret) {
 		DEBUG(1, ("smb_krb5_kt_open failed (%s)\n",
 			  error_message(ret)));
diff --git a/testsuite/unittests/test_krb5_samba.c b/testsuite/unittests/test_krb5_samba.c
new file mode 100644
index 0000000..8b7e843
--- /dev/null
+++ b/testsuite/unittests/test_krb5_samba.c
@@ -0,0 +1,145 @@
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include <krb5.h>
+
+#include "includes.h"
+#include "lib/krb5_wrap/krb5_samba.h"
+
+
+static int setup_krb5_context(void **state)
+{
+	krb5_context context = NULL;
+	krb5_error_code code;
+
+	code = krb5_init_context(&context);
+	assert_return_code(code, code);
+
+	*state = context;
+
+	return 0;
+}
+
+static int teardown_krb5_context(void **state)
+{
+	krb5_context context = *state;
+
+	if (context != NULL) {
+		krb5_free_context(context);
+	}
+	return 0;
+}
+
+static void test_smb_krb5_kt_open(void **state)
+{
+	krb5_context context = *state;
+	krb5_keytab keytab = NULL;
+	krb5_error_code code;
+	char keytab_template[] = "/tmp/keytab.XXXXXX";
+	int fd;
+
+	fd = mkstemp(keytab_template);
+	assert_return_code(fd, errno);
+	unlink(keytab_template);
+
+	code = smb_krb5_kt_open(context,
+				keytab_template,
+				false,
+				&keytab);
+	assert_int_equal(code, 0);
+
+	krb5_kt_close(context, keytab);
+	close(fd);
+}
+
+static void test_smb_krb5_kt_open_file(void **state)
+{
+	krb5_context context = *state;
+	krb5_keytab keytab = NULL;
+	krb5_error_code code;
+	char keytab_template[] = "/tmp/keytab.XXXXXX";
+	char keytab_file[6 + strlen(keytab_template)];
+	int fd;
+
+	fd = mkstemp(keytab_template);
+	assert_return_code(fd, errno);
+	unlink(keytab_template);
+
+	snprintf(keytab_file, sizeof(keytab_file), "FILE:%s", keytab_template);
+
+	code = smb_krb5_kt_open(context,
+				keytab_file,
+				false,
+				&keytab);
+	assert_int_equal(code, 0);
+
+	krb5_kt_close(context, keytab);
+	close(fd);
+}
+
+static void test_smb_krb5_kt_open_fail(void **state)
+{
+	krb5_context context = *state;
+	krb5_keytab keytab = NULL;
+	krb5_error_code code;
+
+	code = smb_krb5_kt_open(context,
+				NULL,
+				false,
+				&keytab);
+	assert_int_equal(code, KRB5_KT_BADNAME);
+	code = smb_krb5_kt_open(context,
+				"wurst",
+				false,
+				&keytab);
+	assert_int_equal(code, KRB5_KT_BADNAME);
+
+	code = smb_krb5_kt_open(context,
+				"FILE:wurst",
+				false,
+				&keytab);
+	assert_int_equal(code, KRB5_KT_BADNAME);
+
+	code = smb_krb5_kt_open(context,
+				"WRFILE:wurst",
+				false,
+				&keytab);
+	assert_int_equal(code, KRB5_KT_BADNAME);
+}
+
+static void test_smb_krb5_kt_open_relative_memory(void **state)
+{
+	krb5_context context = *state;
+	krb5_keytab keytab = NULL;
+	krb5_error_code code;
+
+	code = smb_krb5_kt_open_relative(context,
+					 NULL,
+					 true,
+					 &keytab);
+	assert_int_equal(code, 0);
+
+	krb5_kt_close(context, keytab);
+}
+
+int main(void) {
+	const struct CMUnitTest tests[] = {
+		cmocka_unit_test_setup_teardown(test_smb_krb5_kt_open,
+						setup_krb5_context,
+						teardown_krb5_context),
+		cmocka_unit_test_setup_teardown(test_smb_krb5_kt_open_file,
+						setup_krb5_context,
+						teardown_krb5_context),
+		cmocka_unit_test_setup_teardown(test_smb_krb5_kt_open_fail,
+						setup_krb5_context,
+						teardown_krb5_context),
+		cmocka_unit_test_setup_teardown(test_smb_krb5_kt_open_relative_memory,
+						setup_krb5_context,
+						teardown_krb5_context),
+	};
+
+	cmocka_set_message_output(CM_OUTPUT_SUBUNIT);
+	return cmocka_run_group_tests(tests, NULL, NULL);
+}
diff --git a/testsuite/unittests/wscript b/testsuite/unittests/wscript
new file mode 100644
index 0000000..ea4af07
--- /dev/null
+++ b/testsuite/unittests/wscript
@@ -0,0 +1,15 @@
+#!/usr/bin/env python
+
+import os
+
+def configure(conf):
+    pkg_name = 'cmocka'
+    pkg_minversion = '1.0'
+
+    conf.CHECK_BUNDLED_SYSTEM_PKG(pkg_name, minversion=pkg_minversion)
+
+def build(bld):
+    if bld.CONFIG_SET('HAVE_CMOCKA'):
+        bld.SAMBA_BINARY('test_krb5samba',
+                         source='test_krb5_samba.c',
+                         deps='krb5samba cmocka')
diff --git a/wscript b/wscript
index 9b0ee39..9168db1 100644
--- a/wscript
+++ b/wscript
@@ -188,6 +188,7 @@ def configure(conf):
     if conf.env.with_ctdb:
         conf.RECURSE('ctdb')
     conf.RECURSE('lib/socket')
+    conf.RECURSE('testsuite/unittests')
 
     conf.SAMBA_CHECK_UNDEFINED_SYMBOL_FLAGS()
 
diff --git a/wscript_build b/wscript_build
index 93b1832..0c3a2ae 100644
--- a/wscript_build
+++ b/wscript_build
@@ -122,6 +122,7 @@ bld.RECURSE('libcli/samsync')
 bld.RECURSE('libcli/registry')
 bld.RECURSE('source4/lib/policy')
 bld.RECURSE('libcli/named_pipe_auth')
+bld.RECURSE('testsuite/unittests')
 
 if bld.CONFIG_GET('KRB5_VENDOR') in (None, 'heimdal'):
     if bld.CONFIG_GET("HEIMDAL_KRB5_CONFIG") and bld.CONFIG_GET("USING_SYSTEM_KRB5"):


-- 
Samba Shared Repository



More information about the samba-cvs mailing list