From ce03ce2e5629930e582f9fd17445e52ce1b08907 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 16 May 2002 02:24:22 +0000 Subject: Refactored open_pipe_creds() function to remove unused parameter. (This used to be commit 36ed06cb5078429445f3bbb0f69baa2e0f8356a4) --- source3/python/py_spoolss_ports.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source3/python/py_spoolss_ports.c') diff --git a/source3/python/py_spoolss_ports.c b/source3/python/py_spoolss_ports.c index 2d73a6e033..8e74017f4a 100644 --- a/source3/python/py_spoolss_ports.c +++ b/source3/python/py_spoolss_ports.c @@ -45,7 +45,7 @@ PyObject *spoolss_enumports(PyObject *self, PyObject *args, PyObject *kw) server += 2; mem_ctx = talloc_init(); - cli = open_pipe_creds(server, creds, cli_spoolss_initialise, NULL); + cli = open_pipe_creds(server, creds, cli_spoolss_initialise); /* Call rpc function */ -- cgit From 286d3a80fdcd316ebbf63b007a24e787143313a4 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 16 May 2002 04:00:31 +0000 Subject: More cleanups. - removed dodgy fprintf() error handling - return an error string from open_pipe_creds() so the appropriate exception can be raised by the caller - reformatting (This used to be commit d35cad359df3bd53e6bb49f6655d4c7b9993abb0) --- source3/python/py_spoolss_ports.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'source3/python/py_spoolss_ports.c') diff --git a/source3/python/py_spoolss_ports.c b/source3/python/py_spoolss_ports.c index 8e74017f4a..fb3f47c746 100644 --- a/source3/python/py_spoolss_ports.c +++ b/source3/python/py_spoolss_ports.c @@ -31,21 +31,31 @@ PyObject *spoolss_enumports(PyObject *self, PyObject *args, PyObject *kw) static char *kwlist[] = {"server", "level", "creds", NULL}; TALLOC_CTX *mem_ctx = NULL; struct cli_state *cli = NULL; - char *server; + char *server, *errstr; PORT_INFO_CTR ctr; /* Parse parameters */ - if (!PyArg_ParseTupleAndKeywords(args, kw, "s|iO!", kwlist, - &server, &creds, &level, - &PyDict_Type)) + if (!PyArg_ParseTupleAndKeywords( + args, kw, "s|iO!", kwlist, &server, &creds, &level, + &PyDict_Type)) return NULL; if (server[0] == '\\' && server[1] == '\\') server += 2; - mem_ctx = talloc_init(); - cli = open_pipe_creds(server, creds, cli_spoolss_initialise); + if (!(cli = open_pipe_creds( + server, creds, cli_spoolss_initialise, &errstr))) { + PyErr_SetString(spoolss_error, errstr); + free(errstr); + return NULL; + } + + if (!(mem_ctx = talloc_init())) { + PyErr_SetString( + spoolss_error, "unable to initialise talloc context\n"); + return NULL; + } /* Call rpc function */ -- cgit From 66115cf64be78907cf33ab5f7b0d3a33a3c7afd4 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 16 May 2002 05:19:30 +0000 Subject: Fix memory leaks and return values in error returns for enumports(). Return enumerated ports as a hash of hashes instead of a list of hashes. (This used to be commit c469ada3d3b12b6a6e243d004faaae5f96cd3d96) --- source3/python/py_spoolss_ports.c | 56 ++++++++++++++++++++++++++++----------- 1 file changed, 40 insertions(+), 16 deletions(-) (limited to 'source3/python/py_spoolss_ports.c') diff --git a/source3/python/py_spoolss_ports.c b/source3/python/py_spoolss_ports.c index fb3f47c746..54ccf32fcc 100644 --- a/source3/python/py_spoolss_ports.c +++ b/source3/python/py_spoolss_ports.c @@ -25,7 +25,7 @@ PyObject *spoolss_enumports(PyObject *self, PyObject *args, PyObject *kw) { WERROR werror; - PyObject *result, *creds = NULL; + PyObject *result = NULL, *creds = NULL; int level = 1; uint32 i, needed, num_ports; static char *kwlist[] = {"server", "level", "creds", NULL}; @@ -37,8 +37,8 @@ PyObject *spoolss_enumports(PyObject *self, PyObject *args, PyObject *kw) /* Parse parameters */ if (!PyArg_ParseTupleAndKeywords( - args, kw, "s|iO!", kwlist, &server, &creds, &level, - &PyDict_Type)) + args, kw, "s|iO!", kwlist, &server, &level, + &PyDict_Type, &creds)) return NULL; if (server[0] == '\\' && server[1] == '\\') @@ -48,13 +48,13 @@ PyObject *spoolss_enumports(PyObject *self, PyObject *args, PyObject *kw) server, creds, cli_spoolss_initialise, &errstr))) { PyErr_SetString(spoolss_error, errstr); free(errstr); - return NULL; + goto done; } if (!(mem_ctx = talloc_init())) { PyErr_SetString( - spoolss_error, "unable to initialise talloc context\n"); - return NULL; + spoolss_error, "unable to init talloc context\n"); + goto done; } /* Call rpc function */ @@ -67,39 +67,63 @@ PyObject *spoolss_enumports(PyObject *self, PyObject *args, PyObject *kw) cli, mem_ctx, needed, NULL, level, &num_ports, &ctr); - /* Return value */ - - result = Py_None; - - if (!W_ERROR_IS_OK(werror)) + if (!W_ERROR_IS_OK(werror)) { + PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); goto done; + } - result = PyList_New(num_ports); - + /* Return value */ + switch (level) { case 1: + result = PyDict_New(); + for (i = 0; i < num_ports; i++) { PyObject *value; + fstring name; + + rpcstr_pull(name, ctr.port.info_1[i].port_name.buffer, + sizeof(fstring), -1, STR_TERMINATE); py_from_PORT_INFO_1(&value, &ctr.port.info_1[i]); - PyList_SetItem(result, i, value); + PyDict_SetItemString( + value, "level", PyInt_FromLong(1)); + + PyDict_SetItemString(result, name, value); } break; case 2: + result = PyDict_New(); + for(i = 0; i < num_ports; i++) { PyObject *value; + fstring name; + + rpcstr_pull(name, ctr.port.info_2[i].port_name.buffer, + sizeof(fstring), -1, STR_TERMINATE); py_from_PORT_INFO_2(&value, &ctr.port.info_2[i]); - PyList_SetItem(result, i, value); + PyDict_SetItemString( + value, "level", PyInt_FromLong(2)); + + PyDict_SetItemString(result, name, value); } break; + default: + PyErr_SetString(spoolss_error, "unknown info level"); + goto done; } done: - Py_INCREF(result); + if (cli) + cli_shutdown(cli); + + if (mem_ctx) + talloc_destroy(mem_ctx); + return result; } -- cgit From de4e9824bdfc28bd0c62b69db93d9b05065a0be1 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Mon, 27 May 2002 06:36:30 +0000 Subject: Use new version of open_pipe_creds() function. (This used to be commit e4aff324c28bfc08e73b627a5c7941109a3c2c2f) --- source3/python/py_spoolss_ports.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'source3/python/py_spoolss_ports.c') diff --git a/source3/python/py_spoolss_ports.c b/source3/python/py_spoolss_ports.c index 54ccf32fcc..f0bea5175d 100644 --- a/source3/python/py_spoolss_ports.c +++ b/source3/python/py_spoolss_ports.c @@ -44,8 +44,7 @@ PyObject *spoolss_enumports(PyObject *self, PyObject *args, PyObject *kw) if (server[0] == '\\' && server[1] == '\\') server += 2; - if (!(cli = open_pipe_creds( - server, creds, cli_spoolss_initialise, &errstr))) { + if (!(cli = open_pipe_creds(server, creds, PIPE_SPOOLSS, &errstr))) { PyErr_SetString(spoolss_error, errstr); free(errstr); goto done; -- cgit From e99a265bad36f2525a5b04734ff996e66b624711 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 28 May 2002 02:09:54 +0000 Subject: Allow None to be used as a valid credential for functions that take a credential as a parameter. (This used to be commit 166aee6cc2abb5f6e91ebf3d4ec37454034b8dcd) --- source3/python/py_spoolss_ports.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'source3/python/py_spoolss_ports.c') diff --git a/source3/python/py_spoolss_ports.c b/source3/python/py_spoolss_ports.c index f0bea5175d..8d59274a00 100644 --- a/source3/python/py_spoolss_ports.c +++ b/source3/python/py_spoolss_ports.c @@ -37,13 +37,18 @@ PyObject *spoolss_enumports(PyObject *self, PyObject *args, PyObject *kw) /* Parse parameters */ if (!PyArg_ParseTupleAndKeywords( - args, kw, "s|iO!", kwlist, &server, &level, - &PyDict_Type, &creds)) + args, kw, "s|iO", kwlist, &server, &level, &creds)) return NULL; if (server[0] == '\\' && server[1] == '\\') server += 2; + if (creds && creds != Py_None && !PyDict_Check(creds)) { + PyErr_SetString(PyExc_TypeError, + "credentials must be dictionary or None"); + return NULL; + } + if (!(cli = open_pipe_creds(server, creds, PIPE_SPOOLSS, &errstr))) { PyErr_SetString(spoolss_error, errstr); free(errstr); -- cgit From 6aad72916aff00eb11f747e7fd5a01ac98b56929 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 28 May 2002 02:33:11 +0000 Subject: Raise a ValueError if server names aren't given in UNC format. (This used to be commit f5a1a3190dc0d4ecdf55b870633a83ee125b816e) --- source3/python/py_spoolss_ports.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'source3/python/py_spoolss_ports.c') diff --git a/source3/python/py_spoolss_ports.c b/source3/python/py_spoolss_ports.c index 8d59274a00..b5f2102e5e 100644 --- a/source3/python/py_spoolss_ports.c +++ b/source3/python/py_spoolss_ports.c @@ -40,8 +40,12 @@ PyObject *spoolss_enumports(PyObject *self, PyObject *args, PyObject *kw) args, kw, "s|iO", kwlist, &server, &level, &creds)) return NULL; - if (server[0] == '\\' && server[1] == '\\') - server += 2; + if (server[0] != '\\' || server[1] != '\\') { + PyErr_SetString(PyExc_ValueError, "UNC name required"); + return NULL; + } + + server += 2; if (creds && creds != Py_None && !PyDict_Check(creds)) { PyErr_SetString(PyExc_TypeError, -- cgit