python.gpo.ADS_STRUCT: check type of loadparm argument
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>
Fri, 13 Apr 2018 00:29:05 +0000 (12:29 +1200)
committerDouglas Bagnall <dbagnall@samba.org>
Thu, 3 May 2018 03:25:28 +0000 (05:25 +0200)
And add a test showning the segfault.

Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
libgpo/pygpo.c
python/samba/tests/gpo.py

index db33602112558d6c6677bc2bb1d2bba4620e01ed..60220a6bc2a76697b0ff1674530d6b2eb2d83c35 100644 (file)
@@ -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;
index bdcbcc6c75479192ee8ef282f73197f2208e8d2c..796a5cb06cb3aae705174ff3976bb4a86b0eb5ab 100644 (file)
@@ -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")