[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