[SCM] Samba Shared Repository - branch master updated

[email protected] (Jeremy Allison)
Newsgroups gmane.network.samba.cvs
Message-ID <[email protected]>
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 <[email protected]>
Date:   Thu Dec 15 10:33:59 2016 +0100

    testsuite: Add cmocka unit test for smb_krb5_kt_open()
    
    Signed-off-by: Andreas Schneider <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>
    
    Autobuild-User(master): Jeremy Allison <[email protected]>
    Autobuild-Date(master): Fri Dec 16 05:43:12 CET 2016 on sn-devel-144

commit 494482c65493b3ec2532af52a3ad0a4adfef4416
Author: Andreas Schneider <[email protected]>
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 <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit 9157826573195c31444d5ca0acfa41d5e4227b78
Author: Andreas Schneider <[email protected]>
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 <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit e0990ccf4e68a8d1bdce89b7d83865d950b4c4d0
Author: Andreas Schneider <[email protected]>
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 <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit 430c2d18443632585897a988fb8ef7dcbe34095d
Author: Andreas Schneider <[email protected]>
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 <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

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

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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.