[PATCHS] python3 port for dckeytab module

David Mulder dmulder at suse.com
Fri Feb 16 17:14:50 UTC 2018


dckeytab module port to python3 plus testing. Review appreciated!

 python/samba/tests/dckeytab.py   | 38
++++++++++++++++++++++++++++++++++++++
 source4/libnet/py_net_dckeytab.c | 26 +++++++++++++++++++-------
 source4/libnet/wscript_build     | 12 ++++++------
 source4/selftest/tests.py        |  1 +
 4 files changed, 64 insertions(+), 13 deletions(-)

-- 
David Mulder
SUSE Labs Software Engineer - Samba
dmulder at suse.com
SUSE Linux GmbH, GF: Felix Imendörffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nürnberg)

-------------- next part --------------
From 64a9257821503c69852d56fb0ae7c28497392a20 Mon Sep 17 00:00:00 2001
From: Noel Power <noel.power at suse.com>
Date: Fri, 2 Feb 2018 16:08:48 +0000
Subject: [PATCH 1/2] python3 port for dckeytab module

Signed-off-by: Noel Power <noel.power at suse.com>
---
 source4/libnet/py_net_dckeytab.c | 26 +++++++++++++++++++-------
 source4/libnet/wscript_build     | 12 ++++++------
 2 files changed, 25 insertions(+), 13 deletions(-)

diff --git a/source4/libnet/py_net_dckeytab.c b/source4/libnet/py_net_dckeytab.c
index efb92677055..cf43da71c60 100644
--- a/source4/libnet/py_net_dckeytab.c
+++ b/source4/libnet/py_net_dckeytab.c
@@ -22,6 +22,7 @@
 
 #include <Python.h>
 #include "includes.h"
+#include "python/py3compat.h"
 #include "py_net.h"
 #include "libnet_export_keytab.h"
 
@@ -74,28 +75,37 @@ static PyMethodDef export_keytab_method_table[] = {
  * the global module table even if we don't really need that record. Thus, we initialize
  * dckeytab module but never use it.
  * */
-void initdckeytab(void)
+void initdckeytab(void);
+static struct PyModuleDef moduledef = {
+    PyModuleDef_HEAD_INIT,
+    .m_name = "dckeytab",
+    .m_doc = "dckeytab",
+    .m_size = -1,
+    .m_methods = NULL
+};
+
+MODULE_INIT_FUNC(dckeytab)
 {
-	PyObject *m;
+	PyObject *m = NULL;
 	PyObject *Net;
 	PyObject *descr;
 	int ret;
 
-	m = Py_InitModule3("dckeytab", NULL, NULL);
+	m = PyModule_Create(&moduledef);
 	if (m == NULL)
-		return;
+		return m;
 
 	m = PyImport_ImportModule("samba.net");
         if (m == NULL)
-		return;
+		return m;
 
 	Net = (PyObject *)PyObject_GetAttrString(m, "Net");
 	if (Net == NULL)
-		return;
+		return m;
 
 	descr = PyDescr_NewMethod((PyTypeObject*)Net, &export_keytab_method_table[0]);
 	if (descr == NULL)
-		return;
+		return m;
 
 	ret = PyDict_SetItemString(((PyTypeObject*)Net)->tp_dict,
 				     export_keytab_method_table[0].ml_name,
@@ -103,4 +113,6 @@ void initdckeytab(void)
 	if (ret != -1) {
 		Py_DECREF(descr);
 	}
+
+	return m;
 }
diff --git a/source4/libnet/wscript_build b/source4/libnet/wscript_build
index e192eb59404..df0a097e520 100644
--- a/source4/libnet/wscript_build
+++ b/source4/libnet/wscript_build
@@ -18,9 +18,9 @@ for env in bld.gen_python_environments():
 		realname='samba/net.so'
 		)
 
-bld.SAMBA_PYTHON('python_dckeytab',
-	source='py_net_dckeytab.c libnet_export_keytab.c',
-	deps='pyrpc_util db-glue krb5 com_err',
-	realname='samba/dckeytab.so',
-        enabled=bld.CONFIG_SET('AD_DC_BUILD_IS_ENABLED')
-	)
+	bld.SAMBA_PYTHON('python_dckeytab',
+		source='py_net_dckeytab.c libnet_export_keytab.c',
+		deps='pyrpc_util db-glue krb5 com_err',
+		realname='samba/dckeytab.so',
+		enabled=bld.CONFIG_SET('AD_DC_BUILD_IS_ENABLED')
+		)
-- 
2.13.6


From 39e591740dc737bfd0e0fbd47a3f32dca778ebec Mon Sep 17 00:00:00 2001
From: David Mulder <dmulder at suse.com>
Date: Fri, 16 Feb 2018 10:00:19 -0700
Subject: [PATCH 2/2] Add tests for dckeytab python module

Signed-off-by: David Mulder <dmulder at suse.com>
---
 python/samba/tests/dckeytab.py | 38 ++++++++++++++++++++++++++++++++++++++
 source4/selftest/tests.py      |  1 +
 2 files changed, 39 insertions(+)
 create mode 100644 python/samba/tests/dckeytab.py

diff --git a/python/samba/tests/dckeytab.py b/python/samba/tests/dckeytab.py
new file mode 100644
index 00000000000..50dc305800b
--- /dev/null
+++ b/python/samba/tests/dckeytab.py
@@ -0,0 +1,38 @@
+import os, sys, string
+from samba.net import Net
+import samba.dckeytab
+from samba import tests
+from samba.param import LoadParm
+
+def open_bytes(filename):
+    if sys.version_info[0] == 3:
+        return open(filename, errors='ignore')
+    else:
+        return open(filename, 'rb')
+
+class DCKeytabTests(tests.TestCase):
+    def setUp(self):
+        super(DCKeytabTests, self).setUp()
+        self.lp = LoadParm()
+        self.lp.load_default()
+        self.creds = self.insta_creds(template=self.get_credentials())
+        self.ktfile = os.path.join(self.lp.get('private dir'), 'test.keytab')
+        self.principal = self.creds.get_principal()
+
+    def tearDown(self):
+        super(DCKeytabTests, self).tearDown()
+        os.remove(self.ktfile)
+
+    def test_export_keytab(self):
+        net = Net(None, self.lp)
+        net.export_keytab(keytab=self.ktfile, principal=self.principal)
+        assert os.path.exists(self.ktfile), 'keytab was not created'
+        with open_bytes(self.ktfile) as bytes_kt:
+            result = ''
+            for c in bytes_kt.read():
+                if c in string.printable:
+                    result += c
+            principal_parts = self.principal.split('@')
+            assert principal_parts[0] in result and \
+                   principal_parts[1] in result, \
+                        'Principal not found in generated keytab'
diff --git a/source4/selftest/tests.py b/source4/selftest/tests.py
index bf3a7053e12..f98a160dfee 100755
--- a/source4/selftest/tests.py
+++ b/source4/selftest/tests.py
@@ -620,6 +620,7 @@ planpythontestsuite("ad_dc_ntvfs:local", "samba.tests.dcerpc.rpcecho")
 
 planoldpythontestsuite("ad_dc:local", "samba.tests.smb", extra_args=['-U"$USERNAME%$PASSWORD"'], py3_compatible=True)
 planoldpythontestsuite("ad_dc:local", "samba.tests.gpo", extra_args=['-U"$USERNAME%$PASSWORD"'], py3_compatible=True)
+planoldpythontestsuite("ad_dc:local", "samba.tests.dckeytab", extra_args=['-U"$USERNAME%$PASSWORD"'], py3_compatible=True)
 
 planoldpythontestsuite("ad_dc_ntvfs:local", "samba.tests.dcerpc.registry", extra_args=['-U"$USERNAME%$PASSWORD"'])
 planoldpythontestsuite("ad_dc_ntvfs", "samba.tests.dcerpc.dnsserver", extra_args=['-U"$USERNAME%$PASSWORD"'])
-- 
2.13.6



More information about the samba-technical mailing list