[SCM] Samba Shared Repository - branch master updated
Andrew Bartlett
abartlet at samba.org
Mon Jul 22 23:38:05 UTC 2019
The branch, master has been updated
via 0348dd4b310 dcerpc: use anon creds for unknown transport
via 3d33e336267 s4/auth/py: avoid null deref with bad python arguments
via 936c9662074 s4/gensec/py: avoid null deref with bad python arguments
via f3b65ff4e5e s3/smbd/py: avoid null deref with bad python arguments
via a2680b44358 s3/libsmb/py: avoid null deref with bad python arguments
via 57fc8b6c536 s4/auth/pygensec: don't segfault when reporting bad types
via a5e8a5e05bc auth/pycreds/encrypt_netr_crypt_password: don't pretend arg is optional
via f8fb6f32612 auth/pycreds/encrypt_netr_crypt_password: don't segfault
via 95a5140db3e pysecurity: use unsigned int, not int to approximate uint32_t
via 0d0a88fc6a4 pycredentials.h: use import to ensure python type correctness
via c9c1d444881 auth/pycredentials: always check self is a Credentials object
via 2d1c269a9e4 s4/rpc/py_security: don't deref NULL for invalid values
via 5405f2ad7ed s4/py_dsdb: avoid NULL deref in set_domain_sid()
via 99c43354ef5 libcli/pysecurity: use pytalloc_get_name to avoid NULL deref
via cd20e3876c3 talloc: Release talloc 2.3.0
via ac23eeb41c3 talloc/py_util: remove tautologically dead code
via dc20e7c6df7 talloc: pytalloc_get_checked_type: survive non-talloc objects
via 4496e073cbd talloc: add pytalloc_get_name() helper
via 3383390b4b8 tests/py-segfault: add messaging.deregister()
via c3a52e4c40a py segfault test: registry.open_hive
from c1e649fd473 s3:rpc_server: Call server exit routines in sigterm handler
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 0348dd4b31062b2cf12d19ec5515a309d1d9b470
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Wed Jul 10 16:24:46 2019 +1200
dcerpc: use anon creds for unknown transport
Otherwise we get a segfault when the NULL creds are dereferenced in cli_credentials_is_anonymous()
$ python3 -c"from samba.dcerpc.dnsserver import dnsserver; d = dnsserver('addc')"
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Autobuild-User(master): Andrew Bartlett <abartlet at samba.org>
Autobuild-Date(master): Mon Jul 22 23:37:57 UTC 2019 on sn-devel-184
commit 3d33e336267f54e1fe344bf1a83af88092c5ad43
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Tue Jul 9 22:52:33 2019 +1200
s4/auth/py: avoid null deref with bad python arguments
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 936c96620743b75d3177b787cd50478d346c5870
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Tue Jul 9 22:52:19 2019 +1200
s4/gensec/py: avoid null deref with bad python arguments
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit f3b65ff4e5e27e65574a69ee72ac017cd6b3f93c
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Tue Jul 9 22:51:38 2019 +1200
s3/smbd/py: avoid null deref with bad python arguments
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit a2680b44358b2e85354c88c3fdd525327835e43a
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Tue Jul 9 22:51:18 2019 +1200
s3/libsmb/py: avoid null deref with bad python arguments
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 57fc8b6c5369d99b544ff0f43720b9670e018a2a
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Sun Jul 7 17:23:23 2019 +1200
s4/auth/pygensec: don't segfault when reporting bad types
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit a5e8a5e05bcb89a3fc36044ce89ac49df2f00d03
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Tue Jul 9 23:07:18 2019 +1200
auth/pycreds/encrypt_netr_crypt_password: don't pretend arg is optional
The "|O" signature is saying the password argument is optional, which
makes no sense in terms of the funxtion and immediately leads to a
TypeError (or until last commit, segfault). Removing the "|" leaves it
with a TypeError, but it is better worded and faster.
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit f8fb6f326129267c7742947943df3f920c8cb54f
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Sun Jul 7 13:47:51 2019 +1200
auth/pycreds/encrypt_netr_crypt_password: don't segfault
Non-talloc objects were treated as talloc objects, to no good effect
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 95a5140db3e84478b903f9e96fc34e87db2c07c6
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Sun Jul 7 12:14:50 2019 +1200
pysecurity: use unsigned int, not int to approximate uint32_t
the "I" flag for unsigned int has been available since Python 2.3
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 0d0a88fc6a4371bf3666186792f253cacf2f1378
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Sat Jul 6 19:09:57 2019 +1200
pycredentials.h: use import to ensure python type correctness
Because we include pyrpc_util.h, pycredentials doesn't need its own
PyStringFromStringOrNull().
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit c9c1d444881d4464842cfc19fcb5ddd41c58dfa9
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Sat Jul 6 19:07:11 2019 +1200
auth/pycredentials: always check self is a Credentials object
This prevents a segfault with
credentials.Credentials.guess(x)
where x is not a Credentials object.
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 2d1c269a9e4b4bdf8bffc91fcb63778e03097b3e
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Fri Jul 5 23:01:39 2019 +1200
s4/rpc/py_security: don't deref NULL for invalid values
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 5405f2ad7edc0dc04707e2c7472705c534cb11e8
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Thu Jul 4 22:21:36 2019 +1200
s4/py_dsdb: avoid NULL deref in set_domain_sid()
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 99c43354ef5387b708cf0f527f39a86b43c0e979
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Tue Jul 9 09:45:03 2019 +0000
libcli/pysecurity: use pytalloc_get_name to avoid NULL deref
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit cd20e3876c368556781ff0c8c14527b9339d3cad
Author: Andrew Bartlett <abartlet at samba.org>
Date: Mon Jul 22 13:42:37 2019 +1200
talloc: Release talloc 2.3.0
* add pytalloc_get_name() to safely access te talloc name in Python bindings
* Use a new minor version to allow talloc updates in the 4.11 release stream
Signed-off-by: Andrew Bartlett <abartlet at samba.org>
Reviewed-by: Gary Lockyer <gary at catalyst.net.nz
commit ac23eeb41c3d27d710722f94e22dd84410d183d3
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Sun Jul 7 12:34:37 2019 +1200
talloc/py_util: remove tautologically dead code
Being careful is good and all, but if we don't trust the
static PyTypeObject *type = NULL;
two lines up, we need to reconsider our entire software universe.
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit dc20e7c6df7a230c3b3cd9ae7de79e4cacc36eb4
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Tue Jul 9 09:44:12 2019 +0000
talloc: pytalloc_get_checked_type: survive non-talloc objects
If the python object is not a talloc object, we will end up
with a NULL pointer. We weren't checking for that properly
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 4496e073cbd0f78bcaa2cf340336e1a14bd6e8e6
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Tue Jul 9 08:59:19 2019 +0000
talloc: add pytalloc_get_name() helper
In several places we go
talloc_get_name(pytalloc_get_ptr(py_obj))
which is a certain NULL derefernce if py_obj is not a talloc object.
This is a helper function that chooses to say "non-talloc object"
rather than crash.
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 3383390b4b82e49865792b839af1e8fb798113ca
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Fri Jul 5 09:37:13 2019 +1200
tests/py-segfault: add messaging.deregister()
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit c3a52e4c40a819ccaa5b4dab41f74afc8bff3d5c
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Thu Jul 4 22:19:55 2019 +1200
py segfault test: registry.open_hive
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
-----------------------------------------------------------------------
Summary of changes:
auth/credentials/pycredentials.c | 300 +++++++++++++++++----
auth/credentials/pycredentials.h | 15 +-
...oc-util-2.2.0.sigs => pytalloc-util-2.3.0.sigs} | 1 +
.../ABI/{talloc-2.1.10.sigs => talloc-2.3.0.sigs} | 0
lib/talloc/pytalloc.h | 4 +
lib/talloc/pytalloc_util.c | 23 +-
lib/talloc/talloc.h | 2 +-
lib/talloc/wscript | 2 +-
libcli/security/pysecurity.c | 12 +-
python/samba/tests/segfault.py | 14 +
selftest/knownfail.d/python-segfaults | 3 -
source3/libsmb/pylibsmb.c | 2 +-
source3/smbd/pysmbd.c | 4 +-
source4/auth/gensec/pygensec.c | 9 +-
source4/auth/pyauth.c | 4 +-
source4/dsdb/pydsdb.c | 13 +-
source4/librpc/ndr/py_security.c | 12 +-
source4/librpc/rpc/dcerpc_connect.c | 5 +
18 files changed, 337 insertions(+), 88 deletions(-)
copy lib/talloc/ABI/{pytalloc-util-2.2.0.sigs => pytalloc-util-2.3.0.sigs} (94%)
copy lib/talloc/ABI/{talloc-2.1.10.sigs => talloc-2.3.0.sigs} (100%)
Changeset truncated at 500 lines:
diff --git a/auth/credentials/pycredentials.c b/auth/credentials/pycredentials.c
index 1aef16a0145..446f30970a2 100644
--- a/auth/credentials/pycredentials.c
+++ b/auth/credentials/pycredentials.c
@@ -37,13 +37,6 @@
void initcredentials(void);
-static PyObject *PyString_FromStringOrNULL(const char *str)
-{
- if (str == NULL)
- Py_RETURN_NONE;
- return PyUnicode_FromString(str);
-}
-
static PyObject *py_creds_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
{
return pytalloc_steal(type, cli_credentials_init(NULL));
@@ -51,7 +44,12 @@ static PyObject *py_creds_new(PyTypeObject *type, PyObject *args, PyObject *kwar
static PyObject *py_creds_get_username(PyObject *self, PyObject *unused)
{
- return PyString_FromStringOrNULL(cli_credentials_get_username(PyCredentials_AsCliCredentials(self)));
+ struct cli_credentials *creds = PyCredentials_AsCliCredentials(self);
+ if (creds == NULL) {
+ PyErr_Format(PyExc_TypeError, "Credentials expected");
+ return NULL;
+ }
+ return PyString_FromStringOrNULL(cli_credentials_get_username(creds));
}
static PyObject *py_creds_set_username(PyObject *self, PyObject *args)
@@ -59,13 +57,18 @@ static PyObject *py_creds_set_username(PyObject *self, PyObject *args)
char *newval;
enum credentials_obtained obt = CRED_SPECIFIED;
int _obt = obt;
+ struct cli_credentials *creds = PyCredentials_AsCliCredentials(self);
+ if (creds == NULL) {
+ PyErr_Format(PyExc_TypeError, "Credentials expected");
+ return NULL;
+ }
if (!PyArg_ParseTuple(args, "s|i", &newval, &_obt)) {
return NULL;
}
obt = _obt;
- return PyBool_FromLong(cli_credentials_set_username(PyCredentials_AsCliCredentials(self), newval, obt));
+ return PyBool_FromLong(cli_credentials_set_username(creds, newval, obt));
}
static PyObject *py_creds_get_ntlm_username_domain(PyObject *self, PyObject *unused)
@@ -74,7 +77,12 @@ static PyObject *py_creds_get_ntlm_username_domain(PyObject *self, PyObject *unu
const char *user = NULL;
const char *domain = NULL;
PyObject *ret = NULL;
- cli_credentials_get_ntlm_username_domain(PyCredentials_AsCliCredentials(self),
+ struct cli_credentials *creds = PyCredentials_AsCliCredentials(self);
+ if (creds == NULL) {
+ PyErr_Format(PyExc_TypeError, "Credentials expected");
+ return NULL;
+ }
+ cli_credentials_get_ntlm_username_domain(creds,
frame, &user, &domain);
ret = Py_BuildValue("(ss)",
user,
@@ -101,6 +109,11 @@ static PyObject *py_creds_get_ntlm_response(PyObject *self, PyObject *args, PyOb
const char *kwnames[] = { "flags", "challenge",
"target_info",
NULL };
+ struct cli_credentials *creds = PyCredentials_AsCliCredentials(self);
+ if (creds == NULL) {
+ PyErr_Format(PyExc_TypeError, "Credentials expected");
+ return NULL;
+ }
tv_now = timeval_current();
server_timestamp = timeval_to_nttime(&tv_now);
@@ -115,7 +128,7 @@ static PyObject *py_creds_get_ntlm_response(PyObject *self, PyObject *args, PyOb
return NULL;
}
- status = cli_credentials_get_ntlm_response(PyCredentials_AsCliCredentials(self),
+ status = cli_credentials_get_ntlm_response(creds,
frame, &flags,
challenge,
&server_timestamp,
@@ -147,7 +160,13 @@ static PyObject *py_creds_get_ntlm_response(PyObject *self, PyObject *args, PyOb
static PyObject *py_creds_get_principal(PyObject *self, PyObject *unused)
{
TALLOC_CTX *frame = talloc_stackframe();
- PyObject *ret = PyString_FromStringOrNULL(cli_credentials_get_principal(PyCredentials_AsCliCredentials(self), frame));
+ PyObject *ret = NULL;
+ struct cli_credentials *creds = PyCredentials_AsCliCredentials(self);
+ if (creds == NULL) {
+ PyErr_Format(PyExc_TypeError, "Credentials expected");
+ return NULL;
+ }
+ ret = PyString_FromStringOrNULL(cli_credentials_get_principal(creds, frame));
TALLOC_FREE(frame);
return ret;
}
@@ -157,18 +176,28 @@ static PyObject *py_creds_set_principal(PyObject *self, PyObject *args)
char *newval;
enum credentials_obtained obt = CRED_SPECIFIED;
int _obt = obt;
+ struct cli_credentials *creds = PyCredentials_AsCliCredentials(self);
+ if (creds == NULL) {
+ PyErr_Format(PyExc_TypeError, "Credentials expected");
+ return NULL;
+ }
if (!PyArg_ParseTuple(args, "s|i", &newval, &_obt)) {
return NULL;
}
obt = _obt;
- return PyBool_FromLong(cli_credentials_set_principal(PyCredentials_AsCliCredentials(self), newval, obt));
+ return PyBool_FromLong(cli_credentials_set_principal(creds, newval, obt));
}
static PyObject *py_creds_get_password(PyObject *self, PyObject *unused)
{
- return PyString_FromStringOrNULL(cli_credentials_get_password(PyCredentials_AsCliCredentials(self)));
+ struct cli_credentials *creds = PyCredentials_AsCliCredentials(self);
+ if (creds == NULL) {
+ PyErr_Format(PyExc_TypeError, "Credentials expected");
+ return NULL;
+ }
+ return PyString_FromStringOrNULL(cli_credentials_get_password(creds));
}
static PyObject *py_creds_set_password(PyObject *self, PyObject *args)
@@ -177,12 +206,18 @@ static PyObject *py_creds_set_password(PyObject *self, PyObject *args)
enum credentials_obtained obt = CRED_SPECIFIED;
int _obt = obt;
PyObject *result = NULL;
+ struct cli_credentials *creds = PyCredentials_AsCliCredentials(self);
+ if (creds == NULL) {
+ PyErr_Format(PyExc_TypeError, "Credentials expected");
+ return NULL;
+ }
+
if (!PyArg_ParseTuple(args, PYARG_STR_UNI"|i", "utf8", &newval, &_obt)) {
return NULL;
}
obt = _obt;
- result = PyBool_FromLong(cli_credentials_set_password(PyCredentials_AsCliCredentials(self), newval, obt));
+ result = PyBool_FromLong(cli_credentials_set_password(creds, newval, obt));
PyMem_Free(discard_const_p(void*, newval));
return result;
}
@@ -196,6 +231,11 @@ static PyObject *py_creds_set_utf16_password(PyObject *self, PyObject *args)
Py_ssize_t size = 0;
int result;
bool ok;
+ struct cli_credentials *creds = PyCredentials_AsCliCredentials(self);
+ if (creds == NULL) {
+ PyErr_Format(PyExc_TypeError, "Credentials expected");
+ return NULL;
+ }
if (!PyArg_ParseTuple(args, "O|i", &newval, &_obt)) {
return NULL;
@@ -209,7 +249,7 @@ static PyObject *py_creds_set_utf16_password(PyObject *self, PyObject *args)
}
blob.length = size;
- ok = cli_credentials_set_utf16_password(PyCredentials_AsCliCredentials(self),
+ ok = cli_credentials_set_utf16_password(creds,
&blob, obt);
return PyBool_FromLong(ok);
@@ -217,7 +257,12 @@ static PyObject *py_creds_set_utf16_password(PyObject *self, PyObject *args)
static PyObject *py_creds_get_old_password(PyObject *self, PyObject *unused)
{
- return PyString_FromStringOrNULL(cli_credentials_get_old_password(PyCredentials_AsCliCredentials(self)));
+ struct cli_credentials *creds = PyCredentials_AsCliCredentials(self);
+ if (creds == NULL) {
+ PyErr_Format(PyExc_TypeError, "Credentials expected");
+ return NULL;
+ }
+ return PyString_FromStringOrNULL(cli_credentials_get_old_password(creds));
}
static PyObject *py_creds_set_old_password(PyObject *self, PyObject *args)
@@ -225,13 +270,18 @@ static PyObject *py_creds_set_old_password(PyObject *self, PyObject *args)
char *oldval;
enum credentials_obtained obt = CRED_SPECIFIED;
int _obt = obt;
+ struct cli_credentials *creds = PyCredentials_AsCliCredentials(self);
+ if (creds == NULL) {
+ PyErr_Format(PyExc_TypeError, "Credentials expected");
+ return NULL;
+ }
if (!PyArg_ParseTuple(args, "s|i", &oldval, &_obt)) {
return NULL;
}
obt = _obt;
- return PyBool_FromLong(cli_credentials_set_old_password(PyCredentials_AsCliCredentials(self), oldval, obt));
+ return PyBool_FromLong(cli_credentials_set_old_password(creds, oldval, obt));
}
static PyObject *py_creds_set_old_utf16_password(PyObject *self, PyObject *args)
@@ -241,6 +291,11 @@ static PyObject *py_creds_set_old_utf16_password(PyObject *self, PyObject *args)
Py_ssize_t size = 0;
int result;
bool ok;
+ struct cli_credentials *creds = PyCredentials_AsCliCredentials(self);
+ if (creds == NULL) {
+ PyErr_Format(PyExc_TypeError, "Credentials expected");
+ return NULL;
+ }
if (!PyArg_ParseTuple(args, "O", &oldval)) {
return NULL;
@@ -253,7 +308,7 @@ static PyObject *py_creds_set_old_utf16_password(PyObject *self, PyObject *args)
}
blob.length = size;
- ok = cli_credentials_set_old_utf16_password(PyCredentials_AsCliCredentials(self),
+ ok = cli_credentials_set_old_utf16_password(creds,
&blob);
return PyBool_FromLong(ok);
@@ -261,7 +316,12 @@ static PyObject *py_creds_set_old_utf16_password(PyObject *self, PyObject *args)
static PyObject *py_creds_get_domain(PyObject *self, PyObject *unused)
{
- return PyString_FromStringOrNULL(cli_credentials_get_domain(PyCredentials_AsCliCredentials(self)));
+ struct cli_credentials *creds = PyCredentials_AsCliCredentials(self);
+ if (creds == NULL) {
+ PyErr_Format(PyExc_TypeError, "Credentials expected");
+ return NULL;
+ }
+ return PyString_FromStringOrNULL(cli_credentials_get_domain(creds));
}
static PyObject *py_creds_set_domain(PyObject *self, PyObject *args)
@@ -269,18 +329,28 @@ static PyObject *py_creds_set_domain(PyObject *self, PyObject *args)
char *newval;
enum credentials_obtained obt = CRED_SPECIFIED;
int _obt = obt;
+ struct cli_credentials *creds = PyCredentials_AsCliCredentials(self);
+ if (creds == NULL) {
+ PyErr_Format(PyExc_TypeError, "Credentials expected");
+ return NULL;
+ }
if (!PyArg_ParseTuple(args, "s|i", &newval, &_obt)) {
return NULL;
}
obt = _obt;
- return PyBool_FromLong(cli_credentials_set_domain(PyCredentials_AsCliCredentials(self), newval, obt));
+ return PyBool_FromLong(cli_credentials_set_domain(creds, newval, obt));
}
static PyObject *py_creds_get_realm(PyObject *self, PyObject *unused)
{
- return PyString_FromStringOrNULL(cli_credentials_get_realm(PyCredentials_AsCliCredentials(self)));
+ struct cli_credentials *creds = PyCredentials_AsCliCredentials(self);
+ if (creds == NULL) {
+ PyErr_Format(PyExc_TypeError, "Credentials expected");
+ return NULL;
+ }
+ return PyString_FromStringOrNULL(cli_credentials_get_realm(creds));
}
static PyObject *py_creds_set_realm(PyObject *self, PyObject *args)
@@ -288,32 +358,52 @@ static PyObject *py_creds_set_realm(PyObject *self, PyObject *args)
char *newval;
enum credentials_obtained obt = CRED_SPECIFIED;
int _obt = obt;
+ struct cli_credentials *creds = PyCredentials_AsCliCredentials(self);
+ if (creds == NULL) {
+ PyErr_Format(PyExc_TypeError, "Credentials expected");
+ return NULL;
+ }
if (!PyArg_ParseTuple(args, "s|i", &newval, &_obt)) {
return NULL;
}
obt = _obt;
- return PyBool_FromLong(cli_credentials_set_realm(PyCredentials_AsCliCredentials(self), newval, obt));
+ return PyBool_FromLong(cli_credentials_set_realm(creds, newval, obt));
}
static PyObject *py_creds_get_bind_dn(PyObject *self, PyObject *unused)
{
- return PyString_FromStringOrNULL(cli_credentials_get_bind_dn(PyCredentials_AsCliCredentials(self)));
+ struct cli_credentials *creds = PyCredentials_AsCliCredentials(self);
+ if (creds == NULL) {
+ PyErr_Format(PyExc_TypeError, "Credentials expected");
+ return NULL;
+ }
+ return PyString_FromStringOrNULL(cli_credentials_get_bind_dn(creds));
}
static PyObject *py_creds_set_bind_dn(PyObject *self, PyObject *args)
{
char *newval;
+ struct cli_credentials *creds = PyCredentials_AsCliCredentials(self);
+ if (creds == NULL) {
+ PyErr_Format(PyExc_TypeError, "Credentials expected");
+ return NULL;
+ }
if (!PyArg_ParseTuple(args, "s", &newval))
return NULL;
- return PyBool_FromLong(cli_credentials_set_bind_dn(PyCredentials_AsCliCredentials(self), newval));
+ return PyBool_FromLong(cli_credentials_set_bind_dn(creds, newval));
}
static PyObject *py_creds_get_workstation(PyObject *self, PyObject *unused)
{
- return PyString_FromStringOrNULL(cli_credentials_get_workstation(PyCredentials_AsCliCredentials(self)));
+ struct cli_credentials *creds = PyCredentials_AsCliCredentials(self);
+ if (creds == NULL) {
+ PyErr_Format(PyExc_TypeError, "Credentials expected");
+ return NULL;
+ }
+ return PyString_FromStringOrNULL(cli_credentials_get_workstation(creds));
}
static PyObject *py_creds_set_workstation(PyObject *self, PyObject *args)
@@ -321,39 +411,69 @@ static PyObject *py_creds_set_workstation(PyObject *self, PyObject *args)
char *newval;
enum credentials_obtained obt = CRED_SPECIFIED;
int _obt = obt;
+ struct cli_credentials *creds = PyCredentials_AsCliCredentials(self);
+ if (creds == NULL) {
+ PyErr_Format(PyExc_TypeError, "Credentials expected");
+ return NULL;
+ }
if (!PyArg_ParseTuple(args, "s|i", &newval, &_obt)) {
return NULL;
}
obt = _obt;
- return PyBool_FromLong(cli_credentials_set_workstation(PyCredentials_AsCliCredentials(self), newval, obt));
+ return PyBool_FromLong(cli_credentials_set_workstation(creds, newval, obt));
}
static PyObject *py_creds_is_anonymous(PyObject *self, PyObject *unused)
{
- return PyBool_FromLong(cli_credentials_is_anonymous(PyCredentials_AsCliCredentials(self)));
+ struct cli_credentials *creds = PyCredentials_AsCliCredentials(self);
+ if (creds == NULL) {
+ PyErr_Format(PyExc_TypeError, "Credentials expected");
+ return NULL;
+ }
+ return PyBool_FromLong(cli_credentials_is_anonymous(creds));
}
static PyObject *py_creds_set_anonymous(PyObject *self, PyObject *unused)
{
- cli_credentials_set_anonymous(PyCredentials_AsCliCredentials(self));
+ struct cli_credentials *creds = PyCredentials_AsCliCredentials(self);
+ if (creds == NULL) {
+ PyErr_Format(PyExc_TypeError, "Credentials expected");
+ return NULL;
+ }
+ cli_credentials_set_anonymous(creds);
Py_RETURN_NONE;
}
static PyObject *py_creds_authentication_requested(PyObject *self, PyObject *unused)
{
- return PyBool_FromLong(cli_credentials_authentication_requested(PyCredentials_AsCliCredentials(self)));
+ struct cli_credentials *creds = PyCredentials_AsCliCredentials(self);
+ if (creds == NULL) {
+ PyErr_Format(PyExc_TypeError, "Credentials expected");
+ return NULL;
+ }
+ return PyBool_FromLong(cli_credentials_authentication_requested(creds));
}
static PyObject *py_creds_wrong_password(PyObject *self, PyObject *unused)
{
- return PyBool_FromLong(cli_credentials_wrong_password(PyCredentials_AsCliCredentials(self)));
+ struct cli_credentials *creds = PyCredentials_AsCliCredentials(self);
+ if (creds == NULL) {
+ PyErr_Format(PyExc_TypeError, "Credentials expected");
+ return NULL;
+ }
+ return PyBool_FromLong(cli_credentials_wrong_password(creds));
}
static PyObject *py_creds_set_cmdline_callbacks(PyObject *self, PyObject *unused)
{
- return PyBool_FromLong(cli_credentials_set_cmdline_callbacks(PyCredentials_AsCliCredentials(self)));
+ struct cli_credentials *creds = PyCredentials_AsCliCredentials(self);
+ if (creds == NULL) {
+ PyErr_Format(PyExc_TypeError, "Credentials expected");
+ return NULL;
+ }
+ return PyBool_FromLong(cli_credentials_set_cmdline_callbacks(creds));
}
static PyObject *py_creds_parse_string(PyObject *self, PyObject *args)
@@ -361,13 +481,18 @@ static PyObject *py_creds_parse_string(PyObject *self, PyObject *args)
char *newval;
enum credentials_obtained obt = CRED_SPECIFIED;
int _obt = obt;
+ struct cli_credentials *creds = PyCredentials_AsCliCredentials(self);
+ if (creds == NULL) {
+ PyErr_Format(PyExc_TypeError, "Credentials expected");
+ return NULL;
+ }
if (!PyArg_ParseTuple(args, "s|i", &newval, &_obt)) {
return NULL;
}
obt = _obt;
- cli_credentials_parse_string(PyCredentials_AsCliCredentials(self), newval, obt);
+ cli_credentials_parse_string(creds, newval, obt);
Py_RETURN_NONE;
}
@@ -376,13 +501,18 @@ static PyObject *py_creds_parse_file(PyObject *self, PyObject *args)
char *newval;
enum credentials_obtained obt = CRED_SPECIFIED;
int _obt = obt;
+ struct cli_credentials *creds = PyCredentials_AsCliCredentials(self);
+ if (creds == NULL) {
+ PyErr_Format(PyExc_TypeError, "Credentials expected");
+ return NULL;
+ }
if (!PyArg_ParseTuple(args, "s|i", &newval, &_obt)) {
return NULL;
}
obt = _obt;
- cli_credentials_parse_file(PyCredentials_AsCliCredentials(self), newval, obt);
+ cli_credentials_parse_file(creds, newval, obt);
Py_RETURN_NONE;
}
@@ -404,8 +534,13 @@ static PyObject *py_cli_credentials_set_password_will_be_nt_hash(PyObject *self,
static PyObject *py_creds_get_nt_hash(PyObject *self, PyObject *unused)
{
PyObject *ret;
+ struct samr_Password *ntpw = NULL;
struct cli_credentials *creds = PyCredentials_AsCliCredentials(self);
- struct samr_Password *ntpw = cli_credentials_get_nt_hash(creds, creds);
+ if (creds == NULL) {
+ PyErr_Format(PyExc_TypeError, "Credentials expected");
+ return NULL;
+ }
+ ntpw = cli_credentials_get_nt_hash(creds, creds);
ret = PyBytes_FromStringAndSize(discard_const_p(char, ntpw->hash), 16);
TALLOC_FREE(ntpw);
@@ -414,34 +549,55 @@ static PyObject *py_creds_get_nt_hash(PyObject *self, PyObject *unused)
static PyObject *py_creds_get_kerberos_state(PyObject *self, PyObject *unused)
{
- int state = cli_credentials_get_kerberos_state(PyCredentials_AsCliCredentials(self));
+ int state;
+ struct cli_credentials *creds = PyCredentials_AsCliCredentials(self);
+ if (creds == NULL) {
+ PyErr_Format(PyExc_TypeError, "Credentials expected");
+ return NULL;
+ }
+ state = cli_credentials_get_kerberos_state(creds);
return PyInt_FromLong(state);
}
static PyObject *py_creds_set_kerberos_state(PyObject *self, PyObject *args)
{
int state;
+ struct cli_credentials *creds = PyCredentials_AsCliCredentials(self);
+ if (creds == NULL) {
+ PyErr_Format(PyExc_TypeError, "Credentials expected");
+ return NULL;
+ }
if (!PyArg_ParseTuple(args, "i", &state))
return NULL;
- cli_credentials_set_kerberos_state(PyCredentials_AsCliCredentials(self), state);
+ cli_credentials_set_kerberos_state(creds, state);
Py_RETURN_NONE;
}
static PyObject *py_creds_set_krb_forwardable(PyObject *self, PyObject *args)
{
int state;
+ struct cli_credentials *creds = PyCredentials_AsCliCredentials(self);
+ if (creds == NULL) {
+ PyErr_Format(PyExc_TypeError, "Credentials expected");
+ return NULL;
--
Samba Shared Repository
More information about the samba-cvs
mailing list