diff options
author | Gary Lockyer <gary@catalyst.net.nz> | 2017-04-19 16:13:20 +1200 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2017-04-21 16:10:12 +0200 |
commit | 9342b3ebf7fe7b7565406bd9a606b6676c08b029 (patch) | |
tree | 4cc0cce6eeda264968d6990f15df7ad822c07049 | |
parent | 375d772d04338861d92e683ae3c6c9d7ecb846ad (diff) | |
download | samba-9342b3ebf7fe7b7565406bd9a606b6676c08b029.tar.gz |
pyrpc: Fix segfault in ClientConnection
Fix segfault when connecting over TCP, the endpoints list in dummy_table
was not initialised this caused a segfault when attempting to connect
over TCP.
Signed-off-by: Gary Lockyer <gary@catalyst.net.nz>
Reviewed-by: Andrew Bartlet <abartlet@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
Autobuild-User(master): Andreas Schneider <asn@cryptomilk.org>
Autobuild-Date(master): Fri Apr 21 16:10:12 CEST 2017 on sn-devel-144
-rw-r--r-- | python/samba/tests/dcerpc/bare.py | 18 | ||||
-rw-r--r-- | source4/librpc/rpc/pyrpc.c | 8 |
2 files changed, 26 insertions, 0 deletions
diff --git a/python/samba/tests/dcerpc/bare.py b/python/samba/tests/dcerpc/bare.py index e101c5bcfcf..270c7af382e 100644 --- a/python/samba/tests/dcerpc/bare.py +++ b/python/samba/tests/dcerpc/bare.py @@ -19,6 +19,7 @@ """Tests for samba.tests.dcerpc.bare.""" +import os from samba.dcerpc import ClientConnection import samba.tests @@ -40,3 +41,20 @@ class BareTestCase(samba.tests.TestCase): basis_connection=x, lp_ctx=samba.tests.env_loadparm()) self.assertEquals(24, len(x.request(0, chr(0) * 8))) self.assertEquals("\x01\x00\x00\x00", y.request(0, chr(0) * 4)) + + def test_bare_tcp(self): + # Connect to the echo pipe + x = ClientConnection("ncacn_ip_tcp:%s" % os.environ["SERVER"], + ("60a15ec5-4de8-11d7-a637-005056a20182", 1), + lp_ctx=samba.tests.env_loadparm()) + self.assertEquals("\x01\x00\x00\x00", x.request(0, chr(0) * 4)) + + def test_two_contexts_tcp(self): + x = ClientConnection("ncacn_ip_tcp:%s" % os.environ["SERVER"], + ("12345778-1234-abcd-ef00-0123456789ac", 1), + lp_ctx=samba.tests.env_loadparm()) + y = ClientConnection("ncacn_ip_tcp:%s" % os.environ["SERVER"], + ("60a15ec5-4de8-11d7-a637-005056a20182", 1), + basis_connection=x, lp_ctx=samba.tests.env_loadparm()) + self.assertEquals(24, len(x.request(0, chr(0) * 8))) + self.assertEquals("\x01\x00\x00\x00", y.request(0, chr(0) * 4)) diff --git a/source4/librpc/rpc/pyrpc.c b/source4/librpc/rpc/pyrpc.c index d4f13ba89f6..8b817b8b46d 100644 --- a/source4/librpc/rpc/pyrpc.c +++ b/source4/librpc/rpc/pyrpc.c @@ -293,6 +293,7 @@ static PyObject *dcerpc_interface_new(PyTypeObject *type, PyObject *args, PyObje "binding", "syntax", "lp_ctx", "credentials", "basis_connection", NULL }; static struct ndr_interface_table dummy_table; + static struct ndr_interface_string_array dummy_endpoints; PyObject *args2 = Py_None; PyObject *kwargs2 = Py_None; @@ -316,6 +317,13 @@ static PyObject *dcerpc_interface_new(PyTypeObject *type, PyObject *args, PyObje return NULL; } + /* + * Initialise the endpoints list in dummy_table if required + */ + if (dummy_table.endpoints == NULL) { + dummy_table.endpoints = &dummy_endpoints; + } + args2 = Py_BuildValue("(s)", binding_string); if (args2 == NULL) { return NULL; |