[PATCH] check types rather than segfault in pygpo.c

Douglas Bagnall douglas.bagnall at catalyst.net.nz
Fri Apr 13 02:39:58 UTC 2018


I was trying to find good examples for another thread, and only found bad.

Douglas
-------------- next part --------------
From 3b39986d2dcdbcae0ada4c0e842c1367c3d89240 Mon Sep 17 00:00:00 2001
From: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Fri, 13 Apr 2018 12:29:05 +1200
Subject: [PATCH 1/2] python.gpo: add a test showning a segfault

Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
---
 python/samba/tests/gpo.py       | 7 +++++++
 selftest/knownfail.d/python.gpo | 1 +
 2 files changed, 8 insertions(+)
 create mode 100644 selftest/knownfail.d/python.gpo

diff --git a/python/samba/tests/gpo.py b/python/samba/tests/gpo.py
index bdcbcc6c754..796a5cb06cb 100644
--- a/python/samba/tests/gpo.py
+++ b/python/samba/tests/gpo.py
@@ -50,6 +50,13 @@ class GPOTests(tests.TestCase):
             assert gpos[i].ds_path == ds_paths[i], \
               'ds_path did not match expected %s' % gpos[i].ds_path
 
+
+    def test_gpo_ads_does_not_segfault(self):
+        try:
+            ads = gpo.ADS_STRUCT(self.server, 42, self.creds)
+        except:
+            pass
+
     def test_gpt_version(self):
         global gpt_data
         local_path = self.lp.get("path", "sysvol")
diff --git a/selftest/knownfail.d/python.gpo b/selftest/knownfail.d/python.gpo
new file mode 100644
index 00000000000..177b37e5697
--- /dev/null
+++ b/selftest/knownfail.d/python.gpo
@@ -0,0 +1 @@
+samba.tests.gpo
-- 
2.14.1


From 593cd9c59fe49fdfb871dd40b396a222085c562b Mon Sep 17 00:00:00 2001
From: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Fri, 13 Apr 2018 12:50:19 +1200
Subject: [PATCH 2/2] python.gpo.ADS_STRUCT: check type of loadparm argument

Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
---
 libgpo/pygpo.c                  | 9 ++++++++-
 selftest/knownfail.d/python.gpo | 1 -
 2 files changed, 8 insertions(+), 2 deletions(-)
 delete mode 100644 selftest/knownfail.d/python.gpo

diff --git a/libgpo/pygpo.c b/libgpo/pygpo.c
index db336021125..60220a6bc2a 100644
--- a/libgpo/pygpo.c
+++ b/libgpo/pygpo.c
@@ -183,7 +183,14 @@ static int py_ads_init(ADS *self, PyObject *args, PyObject *kwds)
 	}
 
 	if (lp_obj) {
-		bool ok;
+		bool ok = py_check_dcerpc_type(lp_obj, "samba.param",
+					       "LoadParm");
+		if (!ok) {
+			PyErr_Format(PyExc_TypeError,
+				     "Expected samba.param.LoadParm "
+				     "for lp argument");
+			return -1;
+		}
 		lp_ctx = pytalloc_get_type(lp_obj, struct loadparm_context);
 		if (lp_ctx == NULL) {
 			return -1;
diff --git a/selftest/knownfail.d/python.gpo b/selftest/knownfail.d/python.gpo
deleted file mode 100644
index 177b37e5697..00000000000
--- a/selftest/knownfail.d/python.gpo
+++ /dev/null
@@ -1 +0,0 @@
-samba.tests.gpo
-- 
2.14.1



More information about the samba-technical mailing list