[SCM] Samba Shared Repository - branch v4-3-test updated
Karolin Seeger
kseeger at samba.org
Tue Apr 26 13:34:05 UTC 2016
The branch, v4-3-test has been updated
via 810dca6 libads: record session expiry for spnego sasl binds
via 9944a5a s3:wscript: pylibsmb depends on pycredentials
via 8c295c3 libsmb/pysmb: add pytalloc-util dependency to fix the build.
via 828a9b4 build: mark explicit dependencies on pytalloc-util
via b174304 pydsdb: Fix returning of ldb.MessageElement.
via e25a6f3 pydsdb: Also accept ldb.MessageElement values to dsdb routines
from bf61978 vfs_catia: Fix bug 11827, memleak
https://git.samba.org/?p=samba.git;a=shortlog;h=v4-3-test
- Log -----------------------------------------------------------------
commit 810dca6074f179bfda045e6059650458d3bfa2fe
Author: Uri Simchoni <uri at samba.org>
Date: Mon Apr 18 23:08:38 2016 +0300
libads: record session expiry for spnego sasl binds
With the move to gensec-based spnego, record the session expiry
in tgs_expire, so that libads users such as winbindd can use this info
to determine how long to keep the connection.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=11852
Signed-off-by: Uri Simchoni <uri at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Autobuild-User(master): Uri Simchoni <uri at samba.org>
Autobuild-Date(master): Tue Apr 19 16:53:57 CEST 2016 on sn-devel-144
(cherry picked from commit 34482eb7cc3d74c8de510309332e8ab176d0f3c0)
Autobuild-User(v4-3-test): Karolin Seeger <kseeger at samba.org>
Autobuild-Date(v4-3-test): Tue Apr 26 15:33:37 CEST 2016 on sn-devel-104
commit 9944a5a8665f62a0fabdb583c36abc858133fe61
Author: Stefan Metzmacher <metze at samba.org>
Date: Tue Mar 15 16:59:51 2016 +0100
s3:wscript: pylibsmb depends on pycredentials
The need for pytalloc-util was based on the fact that
pycredentials depends on pytalloc-util.
As pylibsmb only used pycredentials and not pytalloc-util directly,
we should depend on pycredentials.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=11789
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Günther Deschner <gd at samba.org>
(cherry picked from commit 74ca470739e0128556d8d20010464df07f2f0ac8)
commit 8c295c331924bf8f17c35f4c3300d96bbe89503f
Author: Günther Deschner <gd at samba.org>
Date: Mon Feb 1 23:11:13 2016 +0100
libsmb/pysmb: add pytalloc-util dependency to fix the build.
Guenther
Signed-off-by: Guenther Deschner <gd at samba.org>
Reviewed-by: Michael Adam <obnox at samba.org>
Autobuild-User(master): Günther Deschner <gd at samba.org>
Autobuild-Date(master): Tue Feb 2 15:49:14 CET 2016 on sn-devel-144
(cherry picked from commit 943e69ca8fd4491004eafbf29ed2ca748b0b7480)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=11789
commit 828a9b4cc99dccf0713fb19c3174a41aeb8e7ec1
Author: Garming Sam <garming at catalyst.net.nz>
Date: Tue Mar 15 13:29:54 2016 +1300
build: mark explicit dependencies on pytalloc-util
All subsystems that include pytalloc.h need to link against
pytalloc-util.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=11789
Signed-off-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Autobuild-User(master): Garming Sam <garming at samba.org>
Autobuild-Date(master): Tue Mar 15 07:08:16 CET 2016 on sn-devel-144
(similar to commit 7b431eba22444d2e0d872de781a8193dcfa6d252)
Backported to 4.3 by Andrew Bartlett
commit b174304c9cc29cdff17e35cdfe448db3c3a6ac4f
Author: Andrew Bartlett <abartlet at samba.org>
Date: Tue Feb 16 15:15:44 2016 +1300
pydsdb: Fix returning of ldb.MessageElement.
This object is not based on pytalloc_Object and so this causes
a segfault (later a failure) when the struct definitions diverge.
We must also not reuse the incoming ldb_message_element as a talloc
context and overwrite the values, instead we should create a new
object and return that.
Signed-off-by: Andrew Bartlett <abartlet at samba.org>
Reviewed-by: Garming Sam <garming at catalyst.net.nz>
(cherry picked from commit b96b1e88f760c92c7d9bb7e732f72d7e73a68907)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=11789
commit e25a6f32d2b1a4fc33a8a8c8a4e6225be016ebc1
Author: Andrew Bartlett <abartlet at samba.org>
Date: Tue Sep 22 15:25:30 2015 +1200
pydsdb: Also accept ldb.MessageElement values to dsdb routines
This shows the correct way to accept a value that may be a list of strings
or a proper ldb.MessageElement.
Andrew Bartlett
Signed-off-by: Andrew Bartlett <abartlet at samba.org>
Reviewed-by: Garming Sam <garming at catalyst.net.nz>
(cherry picked from commit b48776d78b446ad4abd4a6bc2ba6b488a29b11d2)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=11789
-----------------------------------------------------------------------
Summary of changes:
python/samba/dbchecker.py | 4 +-
source3/libads/sasl.c | 9 ++
source3/passdb/wscript_build | 2 +-
source3/wscript_build | 4 +-
source4/dsdb/pydsdb.c | 162 +++++++++++++++++++++++-------------
source4/lib/messaging/wscript_build | 2 +-
source4/libcli/wscript_build | 2 +-
source4/libnet/wscript_build | 2 +-
source4/param/wscript_build | 2 +-
9 files changed, 122 insertions(+), 67 deletions(-)
Changeset truncated at 500 lines:
diff --git a/python/samba/dbchecker.py b/python/samba/dbchecker.py
index 4fb9d12..69b4c61 100644
--- a/python/samba/dbchecker.py
+++ b/python/samba/dbchecker.py
@@ -1286,8 +1286,8 @@ newSuperior: %s""" % (str(from_dn), str(to_rdn), str(to_base)))
continue
if str(attrname).lower() == 'objectclass':
- normalised = self.samdb.dsdb_normalise_attributes(self.samdb_schema, attrname, list(obj[attrname]))
- if list(normalised) != list(obj[attrname]):
+ normalised = self.samdb.dsdb_normalise_attributes(self.samdb_schema, attrname, obj[attrname])
+ if normalised != obj[attrname]:
self.err_normalise_mismatch_replace(dn, attrname, list(obj[attrname]))
error_count += 1
continue
diff --git a/source3/libads/sasl.c b/source3/libads/sasl.c
index 22aa9cf..b8d4527 100644
--- a/source3/libads/sasl.c
+++ b/source3/libads/sasl.c
@@ -134,6 +134,7 @@ static ADS_STATUS ads_sasl_spnego_gensec_bind(ADS_STRUCT *ads,
struct auth_generic_state *auth_generic_state;
bool use_spnego_principal = lp_client_use_spnego_principal();
const char *sasl_list[] = { sasl, NULL };
+ NTTIME end_nt_time;
nt_status = auth_generic_client_prepare(NULL, &auth_generic_state);
if (!NT_STATUS_IS_OK(nt_status)) {
@@ -307,6 +308,14 @@ static ADS_STATUS ads_sasl_spnego_gensec_bind(ADS_STRUCT *ads,
}
}
+ ads->auth.tgs_expire = LONG_MAX;
+ end_nt_time = gensec_expire_time(auth_generic_state->gensec_security);
+ if (end_nt_time != GENSEC_EXPIRE_TIME_INFINITY) {
+ struct timeval tv;
+ nttime_to_timeval(&tv, end_nt_time);
+ ads->auth.tgs_expire = tv.tv_sec;
+ }
+
if (ads->ldap.wrap_type > ADS_SASLWRAP_TYPE_PLAIN) {
size_t max_wrapped = gensec_max_wrapped_size(auth_generic_state->gensec_security);
ads->ldap.out.max_unwrapped = gensec_max_input_size(auth_generic_state->gensec_security);
diff --git a/source3/passdb/wscript_build b/source3/passdb/wscript_build
index 9bbd5ca..105777a 100644
--- a/source3/passdb/wscript_build
+++ b/source3/passdb/wscript_build
@@ -43,6 +43,6 @@ bld.SAMBA3_MODULE('pdb_samba_dsdb',
bld.SAMBA3_PYTHON('pypassdb',
source='py_passdb.c',
deps='pdb',
- public_deps='samba-util tdb talloc pyrpc_util',
+ public_deps='samba-util tdb talloc pyrpc_util pytalloc-util',
realname='samba/samba3/passdb.so'
)
diff --git a/source3/wscript_build b/source3/wscript_build
index cb71655..d415220 100755
--- a/source3/wscript_build
+++ b/source3/wscript_build
@@ -1490,13 +1490,13 @@ bld.SAMBA3_BINARY('vlp',
bld.SAMBA3_PYTHON('pysmbd',
source='smbd/pysmbd.c',
- deps='smbd_base pyrpc_util',
+ deps='smbd_base pyrpc_util pytalloc-util',
realname='samba/samba3/smbd.so'
)
bld.SAMBA3_PYTHON('pylibsmb',
source='libsmb/pylibsmb.c',
- deps='smbclient samba-credentials',
+ deps='smbclient samba-credentials pycredentials',
realname='samba/samba3/libsmb_samba_internal.so'
)
diff --git a/source4/dsdb/pydsdb.c b/source4/dsdb/pydsdb.c
index 9a3b509..b7c9d87 100644
--- a/source4/dsdb/pydsdb.c
+++ b/source4/dsdb/pydsdb.c
@@ -529,11 +529,6 @@ static PyObject *py_dsdb_DsReplicaAttribute(PyObject *self, PyObject *args)
PyErr_LDB_OR_RAISE(py_ldb, ldb);
- if (!PyList_Check(el_list)) {
- PyErr_Format(PyExc_TypeError, "ldif_elements must be a list");
- return NULL;
- }
-
schema = dsdb_get_schema(ldb, NULL);
if (!schema) {
PyErr_SetString(PyExc_RuntimeError, "Failed to find a schema from ldb");
@@ -555,32 +550,47 @@ static PyObject *py_dsdb_DsReplicaAttribute(PyObject *self, PyObject *args)
return NULL;
}
- el = talloc_zero(tmp_ctx, struct ldb_message_element);
- if (el == NULL) {
- PyErr_NoMemory();
- talloc_free(tmp_ctx);
- return NULL;
- }
-
- el->name = ldap_display_name;
- el->num_values = PyList_Size(el_list);
+ /* If we were not given an LdbMessageElement */
+ if (!PyList_Check(el_list)) {
+ if (!py_check_dcerpc_type(el_list, "ldb", "MessageElement")) {
+ PyErr_SetString(py_ldb_get_exception(),
+ "list of strings or ldb MessageElement object required");
+ return NULL;
+ }
+ /*
+ * NOTE:
+ * el may not be a valid talloc context, it
+ * could be part of an array
+ */
+ el = pyldb_MessageElement_AsMessageElement(el_list);
+ } else {
+ el = talloc_zero(tmp_ctx, struct ldb_message_element);
+ if (el == NULL) {
+ PyErr_NoMemory();
+ talloc_free(tmp_ctx);
+ return NULL;
+ }
- el->values = talloc_array(el, struct ldb_val, el->num_values);
- if (el->values == NULL) {
- PyErr_NoMemory();
- talloc_free(tmp_ctx);
- return NULL;
- }
+ el->name = ldap_display_name;
+ el->num_values = PyList_Size(el_list);
- for (i = 0; i < el->num_values; i++) {
- PyObject *item = PyList_GetItem(el_list, i);
- if (!PyString_Check(item)) {
- PyErr_Format(PyExc_TypeError, "ldif_elements should be strings");
+ el->values = talloc_array(el, struct ldb_val, el->num_values);
+ if (el->values == NULL) {
+ PyErr_NoMemory();
talloc_free(tmp_ctx);
return NULL;
}
- el->values[i].data = (uint8_t *)PyString_AsString(item);
- el->values[i].length = PyString_Size(item);
+
+ for (i = 0; i < el->num_values; i++) {
+ PyObject *item = PyList_GetItem(el_list, i);
+ if (!PyString_Check(item)) {
+ PyErr_Format(PyExc_TypeError, "ldif_elements should be strings");
+ talloc_free(tmp_ctx);
+ return NULL;
+ }
+ el->values[i].data = (uint8_t *)PyString_AsString(item);
+ el->values[i].length = PyString_Size(item);
+ }
}
attr = talloc_zero(tmp_ctx, struct drsuapi_DsReplicaAttribute);
@@ -606,17 +616,20 @@ static PyObject *py_dsdb_DsReplicaAttribute(PyObject *self, PyObject *args)
*/
static PyObject *py_dsdb_normalise_attributes(PyObject *self, PyObject *args)
{
- PyObject *py_ldb, *el_list, *ret;
+ PyObject *py_ldb, *el_list, *py_ret;
struct ldb_context *ldb;
char *ldap_display_name;
const struct dsdb_attribute *a;
struct dsdb_schema *schema;
struct dsdb_syntax_ctx syntax_ctx;
- struct ldb_message_element *el;
+ struct ldb_message_element *el, *new_el;
struct drsuapi_DsReplicaAttribute *attr;
+ PyLdbMessageElementObject *ret;
TALLOC_CTX *tmp_ctx;
WERROR werr;
Py_ssize_t i;
+ PyTypeObject *py_type = NULL;
+ PyObject *module = NULL;
if (!PyArg_ParseTuple(args, "OsO", &py_ldb, &ldap_display_name, &el_list)) {
return NULL;
@@ -624,11 +637,6 @@ static PyObject *py_dsdb_normalise_attributes(PyObject *self, PyObject *args)
PyErr_LDB_OR_RAISE(py_ldb, ldb);
- if (!PyList_Check(el_list)) {
- PyErr_Format(PyExc_TypeError, "ldif_elements must be a list");
- return NULL;
- }
-
schema = dsdb_get_schema(ldb, NULL);
if (!schema) {
PyErr_SetString(PyExc_RuntimeError, "Failed to find a schema from ldb");
@@ -650,38 +658,59 @@ static PyObject *py_dsdb_normalise_attributes(PyObject *self, PyObject *args)
return NULL;
}
- el = talloc_zero(tmp_ctx, struct ldb_message_element);
- if (el == NULL) {
- PyErr_NoMemory();
- talloc_free(tmp_ctx);
- return NULL;
- }
+ if (!PyList_Check(el_list)) {
+ if (!py_check_dcerpc_type(el_list, "ldb", "MessageElement")) {
+ PyErr_SetString(py_ldb_get_exception(),
+ "list of strings or ldb MessageElement object required");
+ return NULL;
+ }
+ /*
+ * NOTE:
+ * el may not be a valid talloc context, it
+ * could be part of an array
+ */
+ el = pyldb_MessageElement_AsMessageElement(el_list);
+ } else {
+ el = talloc_zero(tmp_ctx, struct ldb_message_element);
+ if (el == NULL) {
+ PyErr_NoMemory();
+ talloc_free(tmp_ctx);
+ return NULL;
+ }
- el->name = ldap_display_name;
- el->num_values = PyList_Size(el_list);
+ el->name = ldap_display_name;
+ el->num_values = PyList_Size(el_list);
- el->values = talloc_array(el, struct ldb_val, el->num_values);
- if (el->values == NULL) {
- PyErr_NoMemory();
- talloc_free(tmp_ctx);
- return NULL;
- }
-
- for (i = 0; i < el->num_values; i++) {
- PyObject *item = PyList_GetItem(el_list, i);
- if (!PyString_Check(item)) {
- PyErr_Format(PyExc_TypeError, "ldif_elements should be strings");
+ el->values = talloc_array(el, struct ldb_val, el->num_values);
+ if (el->values == NULL) {
+ PyErr_NoMemory();
talloc_free(tmp_ctx);
return NULL;
}
- el->values[i].data = (uint8_t *)PyString_AsString(item);
- el->values[i].length = PyString_Size(item);
+
+ for (i = 0; i < el->num_values; i++) {
+ PyObject *item = PyList_GetItem(el_list, i);
+ if (!PyString_Check(item)) {
+ PyErr_Format(PyExc_TypeError, "ldif_elements should be strings");
+ talloc_free(tmp_ctx);
+ return NULL;
+ }
+ el->values[i].data = (uint8_t *)PyString_AsString(item);
+ el->values[i].length = PyString_Size(item);
+ }
+ }
+
+ new_el = talloc_zero(tmp_ctx, struct ldb_message_element);
+ if (new_el == NULL) {
+ PyErr_NoMemory();
+ talloc_free(tmp_ctx);
+ return NULL;
}
/* Normalise "objectClass" attribute if needed */
if (ldb_attr_cmp(a->lDAPDisplayName, "objectClass") == 0) {
int iret;
- iret = dsdb_sort_objectClass_attr(ldb, schema, el, tmp_ctx, el);
+ iret = dsdb_sort_objectClass_attr(ldb, schema, el, new_el, new_el);
if (iret != LDB_SUCCESS) {
PyErr_SetString(PyExc_RuntimeError, ldb_errstring(ldb));
talloc_free(tmp_ctx);
@@ -704,14 +733,31 @@ static PyObject *py_dsdb_normalise_attributes(PyObject *self, PyObject *args)
PyErr_WERROR_NOT_OK_RAISE(werr);
/* now convert back again */
- werr = a->syntax->drsuapi_to_ldb(&syntax_ctx, a, attr, el, el);
+ werr = a->syntax->drsuapi_to_ldb(&syntax_ctx, a, attr, new_el, new_el);
PyErr_WERROR_NOT_OK_RAISE(werr);
- ret = py_return_ndr_struct("ldb", "MessageElement", el, el);
+ module = PyImport_ImportModule("ldb");
+ if (module == NULL) {
+ return NULL;
+ }
+
+ py_type = (PyTypeObject *)PyObject_GetAttrString(module, "MessageElement");
+ if (py_type == NULL) {
+ return NULL;
+ }
+ py_ret = py_type->tp_alloc(py_type, 0);
+ ret = (PyLdbMessageElementObject *)py_ret;
+
+ ret->mem_ctx = talloc_new(NULL);
+ if (talloc_reference(ret->mem_ctx, new_el) == NULL) {
+ PyErr_NoMemory();
+ return NULL;
+ }
+ ret->el = new_el;
talloc_free(tmp_ctx);
- return ret;
+ return py_ret;
}
diff --git a/source4/lib/messaging/wscript_build b/source4/lib/messaging/wscript_build
index adcb2cc..86877af 100644
--- a/source4/lib/messaging/wscript_build
+++ b/source4/lib/messaging/wscript_build
@@ -9,7 +9,7 @@ bld.SAMBA_LIBRARY('MESSAGING',
bld.SAMBA_PYTHON('python_messaging',
source='pymessaging.c',
- deps='MESSAGING events pyparam_util',
+ deps='MESSAGING events pyparam_util pytalloc-util',
realname='samba/messaging.so'
)
diff --git a/source4/libcli/wscript_build b/source4/libcli/wscript_build
index 59b0bc7..6ac7e19 100755
--- a/source4/libcli/wscript_build
+++ b/source4/libcli/wscript_build
@@ -33,7 +33,7 @@ bld.SAMBA_SUBSYSTEM('LIBCLI_SMB_COMPOSITE',
bld.SAMBA_PYTHON('pysmb',
source='pysmb.c',
- deps='LIBCLI_SMB_COMPOSITE LIBCLI_SMB2 tevent-util pyparam_util',
+ deps='LIBCLI_SMB_COMPOSITE LIBCLI_SMB2 tevent-util pyparam_util pytalloc-util',
public_deps='cli_composite samba-credentials gensec LIBCLI_RESOLVE tevent param_options',
realname='samba/smb.so'
)
diff --git a/source4/libnet/wscript_build b/source4/libnet/wscript_build
index ed38c40..6cca50d 100644
--- a/source4/libnet/wscript_build
+++ b/source4/libnet/wscript_build
@@ -10,7 +10,7 @@ bld.SAMBA_LIBRARY('samba-net',
bld.SAMBA_PYTHON('python_net',
source='py_net.c',
- deps='samba-net pyrpc_util',
+ deps='samba-net pyrpc_util pytalloc-util',
realname='samba/net.so'
)
diff --git a/source4/param/wscript_build b/source4/param/wscript_build
index 4585a83..2ad753b 100644
--- a/source4/param/wscript_build
+++ b/source4/param/wscript_build
@@ -49,7 +49,7 @@ bld.SAMBA_SUBSYSTEM('param_options',
bld.SAMBA_SUBSYSTEM('pyparam_util',
source='pyparam_util.c',
- deps='LIBPYTHON samba-hostconfig',
+ deps='LIBPYTHON samba-hostconfig pytalloc-util',
pyext=True,
)
--
Samba Shared Repository
More information about the samba-cvs
mailing list