git add -f bin/default/librpc/gen_ndr/*.{c,h,ndr,pidl} bin/default/source*/librpc...
[metze/samba/wip.git] / bin / default / librpc / gen_ndr / py_dcerpc.c
index f6d2798f9b6c8baf20d0f17171c7166dc5557ce3..ab0dd58dd9b2e4d115e50a44c7fef2a5e5b3edb9 100644 (file)
@@ -1,5 +1,6 @@
 
 /* Python wrapper functions auto-generated by pidl */
+#define PY_SSIZE_T_CLEAN 1 /* We use Py_ssize_t for PyArg_ParseTupleAndKeywords */
 #include <Python.h>
 #include "includes.h"
 #include <pytalloc.h>
@@ -9,7 +10,7 @@
 #include "bin/default/librpc/gen_ndr/ndr_dcerpc_c.h"
 
 /*
- * These functions are here to ensure they can be optomised out by
+ * These functions are here to ensure they can be optimized out by
  * the compiler based on the constant input values
  */
 
@@ -126,7 +127,7 @@ static PyTypeObject dcerpc_sec_vt_count_Type;
 static PyTypeObject dcerpc_sec_verification_trailer_Type;
 
 void initdcerpc(void);static PyTypeObject *ndr_syntax_id_Type;
-static PyTypeObject *Object_Type;
+static PyTypeObject *BaseObject_Type;
 static PyTypeObject *GUID_Type;
 
 static PyObject *py_dcerpc_ctx_list_get_context_id(PyObject *obj, void *closure)
@@ -140,6 +141,10 @@ static PyObject *py_dcerpc_ctx_list_get_context_id(PyObject *obj, void *closure)
 static int py_dcerpc_ctx_list_set_context_id(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_ctx_list *object = (struct dcerpc_ctx_list *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->context_id");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->context_id));
                if (PyLong_Check(value)) {
@@ -183,6 +188,10 @@ static PyObject *py_dcerpc_ctx_list_get_num_transfer_syntaxes(PyObject *obj, voi
 static int py_dcerpc_ctx_list_set_num_transfer_syntaxes(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_ctx_list *object = (struct dcerpc_ctx_list *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->num_transfer_syntaxes");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->num_transfer_syntaxes));
                if (PyLong_Check(value)) {
@@ -226,6 +235,10 @@ static PyObject *py_dcerpc_ctx_list_get_abstract_syntax(PyObject *obj, void *clo
 static int py_dcerpc_ctx_list_set_abstract_syntax(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_ctx_list *object = (struct dcerpc_ctx_list *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->abstract_syntax");
+               return -1;
+       }
        PY_CHECK_TYPE(ndr_syntax_id_Type, value, return -1;);
        if (talloc_reference(pytalloc_get_mem_ctx(py_obj), pytalloc_get_mem_ctx(value)) == NULL) {
                PyErr_NoMemory();
@@ -257,6 +270,10 @@ static PyObject *py_dcerpc_ctx_list_get_transfer_syntaxes(PyObject *obj, void *c
 static int py_dcerpc_ctx_list_set_transfer_syntaxes(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_ctx_list *object = (struct dcerpc_ctx_list *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->transfer_syntaxes");
+               return -1;
+       }
        PY_CHECK_TYPE(&PyList_Type, value, return -1;);
        {
                int transfer_syntaxes_cntr_0;
@@ -264,6 +281,10 @@ static int py_dcerpc_ctx_list_set_transfer_syntaxes(PyObject *py_obj, PyObject *
                if (!object->transfer_syntaxes) { return -1;; }
                talloc_set_name_const(object->transfer_syntaxes, "ARRAY: object->transfer_syntaxes");
                for (transfer_syntaxes_cntr_0 = 0; transfer_syntaxes_cntr_0 < PyList_GET_SIZE(value); transfer_syntaxes_cntr_0++) {
+                       if (PyList_GET_ITEM(value, transfer_syntaxes_cntr_0) == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->transfer_syntaxes[transfer_syntaxes_cntr_0]");
+                               return -1;
+                       }
                        PY_CHECK_TYPE(ndr_syntax_id_Type, PyList_GET_ITEM(value, transfer_syntaxes_cntr_0), return -1;);
                        if (talloc_reference(object->transfer_syntaxes, pytalloc_get_mem_ctx(PyList_GET_ITEM(value, transfer_syntaxes_cntr_0))) == NULL) {
                                PyErr_NoMemory();
@@ -276,11 +297,31 @@ static int py_dcerpc_ctx_list_set_transfer_syntaxes(PyObject *py_obj, PyObject *
 }
 
 static PyGetSetDef py_dcerpc_ctx_list_getsetters[] = {
-       { discard_const_p(char, "context_id"), py_dcerpc_ctx_list_get_context_id, py_dcerpc_ctx_list_set_context_id },
-       { discard_const_p(char, "num_transfer_syntaxes"), py_dcerpc_ctx_list_get_num_transfer_syntaxes, py_dcerpc_ctx_list_set_num_transfer_syntaxes },
-       { discard_const_p(char, "abstract_syntax"), py_dcerpc_ctx_list_get_abstract_syntax, py_dcerpc_ctx_list_set_abstract_syntax },
-       { discard_const_p(char, "transfer_syntaxes"), py_dcerpc_ctx_list_get_transfer_syntaxes, py_dcerpc_ctx_list_set_transfer_syntaxes },
-       { NULL }
+       {
+               .name = discard_const_p(char, "context_id"),
+               .get = py_dcerpc_ctx_list_get_context_id,
+               .set = py_dcerpc_ctx_list_set_context_id,
+               .doc = discard_const_p(char, "PIDL-generated element context_id")
+       },
+       {
+               .name = discard_const_p(char, "num_transfer_syntaxes"),
+               .get = py_dcerpc_ctx_list_get_num_transfer_syntaxes,
+               .set = py_dcerpc_ctx_list_set_num_transfer_syntaxes,
+               .doc = discard_const_p(char, "PIDL-generated element num_transfer_syntaxes")
+       },
+       {
+               .name = discard_const_p(char, "abstract_syntax"),
+               .get = py_dcerpc_ctx_list_get_abstract_syntax,
+               .set = py_dcerpc_ctx_list_set_abstract_syntax,
+               .doc = discard_const_p(char, "PIDL-generated element abstract_syntax")
+       },
+       {
+               .name = discard_const_p(char, "transfer_syntaxes"),
+               .get = py_dcerpc_ctx_list_get_transfer_syntaxes,
+               .set = py_dcerpc_ctx_list_set_transfer_syntaxes,
+               .doc = discard_const_p(char, "PIDL-generated element transfer_syntaxes")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_ctx_list_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -295,7 +336,6 @@ static PyTypeObject dcerpc_ctx_list_Type = {
        .tp_getset = py_dcerpc_ctx_list_getsetters,
        .tp_methods = NULL,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_ctx_list_new,
 };
 
@@ -311,6 +351,10 @@ static PyObject *py_dcerpc_bind_get_max_xmit_frag(PyObject *obj, void *closure)
 static int py_dcerpc_bind_set_max_xmit_frag(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_bind *object = (struct dcerpc_bind *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->max_xmit_frag");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->max_xmit_frag));
                if (PyLong_Check(value)) {
@@ -354,6 +398,10 @@ static PyObject *py_dcerpc_bind_get_max_recv_frag(PyObject *obj, void *closure)
 static int py_dcerpc_bind_set_max_recv_frag(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_bind *object = (struct dcerpc_bind *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->max_recv_frag");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->max_recv_frag));
                if (PyLong_Check(value)) {
@@ -397,6 +445,10 @@ static PyObject *py_dcerpc_bind_get_assoc_group_id(PyObject *obj, void *closure)
 static int py_dcerpc_bind_set_assoc_group_id(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_bind *object = (struct dcerpc_bind *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->assoc_group_id");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->assoc_group_id));
                if (PyLong_Check(value)) {
@@ -440,6 +492,10 @@ static PyObject *py_dcerpc_bind_get_num_contexts(PyObject *obj, void *closure)
 static int py_dcerpc_bind_set_num_contexts(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_bind *object = (struct dcerpc_bind *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->num_contexts");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->num_contexts));
                if (PyLong_Check(value)) {
@@ -494,6 +550,10 @@ static PyObject *py_dcerpc_bind_get_ctx_list(PyObject *obj, void *closure)
 static int py_dcerpc_bind_set_ctx_list(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_bind *object = (struct dcerpc_bind *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->ctx_list");
+               return -1;
+       }
        PY_CHECK_TYPE(&PyList_Type, value, return -1;);
        {
                int ctx_list_cntr_0;
@@ -501,6 +561,10 @@ static int py_dcerpc_bind_set_ctx_list(PyObject *py_obj, PyObject *value, void *
                if (!object->ctx_list) { return -1;; }
                talloc_set_name_const(object->ctx_list, "ARRAY: object->ctx_list");
                for (ctx_list_cntr_0 = 0; ctx_list_cntr_0 < PyList_GET_SIZE(value); ctx_list_cntr_0++) {
+                       if (PyList_GET_ITEM(value, ctx_list_cntr_0) == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->ctx_list[ctx_list_cntr_0]");
+                               return -1;
+                       }
                        PY_CHECK_TYPE(&dcerpc_ctx_list_Type, PyList_GET_ITEM(value, ctx_list_cntr_0), return -1;);
                        if (talloc_reference(object->ctx_list, pytalloc_get_mem_ctx(PyList_GET_ITEM(value, ctx_list_cntr_0))) == NULL) {
                                PyErr_NoMemory();
@@ -523,18 +587,52 @@ static PyObject *py_dcerpc_bind_get_auth_info(PyObject *obj, void *closure)
 static int py_dcerpc_bind_set_auth_info(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_bind *object = (struct dcerpc_bind *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->auth_info");
+               return -1;
+       }
        object->auth_info = data_blob_talloc(pytalloc_get_mem_ctx(py_obj), PyString_AS_STRING(value), PyString_GET_SIZE(value));
        return 0;
 }
 
 static PyGetSetDef py_dcerpc_bind_getsetters[] = {
-       { discard_const_p(char, "max_xmit_frag"), py_dcerpc_bind_get_max_xmit_frag, py_dcerpc_bind_set_max_xmit_frag },
-       { discard_const_p(char, "max_recv_frag"), py_dcerpc_bind_get_max_recv_frag, py_dcerpc_bind_set_max_recv_frag },
-       { discard_const_p(char, "assoc_group_id"), py_dcerpc_bind_get_assoc_group_id, py_dcerpc_bind_set_assoc_group_id },
-       { discard_const_p(char, "num_contexts"), py_dcerpc_bind_get_num_contexts, py_dcerpc_bind_set_num_contexts },
-       { discard_const_p(char, "ctx_list"), py_dcerpc_bind_get_ctx_list, py_dcerpc_bind_set_ctx_list },
-       { discard_const_p(char, "auth_info"), py_dcerpc_bind_get_auth_info, py_dcerpc_bind_set_auth_info },
-       { NULL }
+       {
+               .name = discard_const_p(char, "max_xmit_frag"),
+               .get = py_dcerpc_bind_get_max_xmit_frag,
+               .set = py_dcerpc_bind_set_max_xmit_frag,
+               .doc = discard_const_p(char, "PIDL-generated element max_xmit_frag")
+       },
+       {
+               .name = discard_const_p(char, "max_recv_frag"),
+               .get = py_dcerpc_bind_get_max_recv_frag,
+               .set = py_dcerpc_bind_set_max_recv_frag,
+               .doc = discard_const_p(char, "PIDL-generated element max_recv_frag")
+       },
+       {
+               .name = discard_const_p(char, "assoc_group_id"),
+               .get = py_dcerpc_bind_get_assoc_group_id,
+               .set = py_dcerpc_bind_set_assoc_group_id,
+               .doc = discard_const_p(char, "PIDL-generated element assoc_group_id")
+       },
+       {
+               .name = discard_const_p(char, "num_contexts"),
+               .get = py_dcerpc_bind_get_num_contexts,
+               .set = py_dcerpc_bind_set_num_contexts,
+               .doc = discard_const_p(char, "PIDL-generated element num_contexts")
+       },
+       {
+               .name = discard_const_p(char, "ctx_list"),
+               .get = py_dcerpc_bind_get_ctx_list,
+               .set = py_dcerpc_bind_set_ctx_list,
+               .doc = discard_const_p(char, "PIDL-generated element ctx_list")
+       },
+       {
+               .name = discard_const_p(char, "auth_info"),
+               .get = py_dcerpc_bind_get_auth_info,
+               .set = py_dcerpc_bind_set_auth_info,
+               .doc = discard_const_p(char, "PIDL-generated element auth_info")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_bind_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -545,22 +643,31 @@ static PyObject *py_dcerpc_bind_new(PyTypeObject *type, PyObject *args, PyObject
 static PyObject *py_dcerpc_bind_ndr_pack(PyObject *py_obj)
 {
        struct dcerpc_bind *object = (struct dcerpc_bind *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_dcerpc_bind);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_bind);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_dcerpc_bind_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct dcerpc_bind *object = (struct dcerpc_bind *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -618,7 +725,6 @@ static PyTypeObject dcerpc_bind_Type = {
        .tp_getset = py_dcerpc_bind_getsetters,
        .tp_methods = py_dcerpc_bind_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_bind_new,
 };
 
@@ -635,7 +741,6 @@ static PyTypeObject dcerpc_empty_Type = {
        .tp_getset = NULL,
        .tp_methods = NULL,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_empty_new,
 };
 
@@ -662,6 +767,10 @@ union dcerpc_object *py_export_dcerpc_object(TALLOC_CTX *mem_ctx, int level, PyO
        union dcerpc_object *ret = talloc_zero(mem_ctx, union dcerpc_object);
        switch (level) {
                case LIBNDR_FLAG_OBJECT_PRESENT:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->object");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(GUID_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -671,6 +780,10 @@ union dcerpc_object *py_export_dcerpc_object(TALLOC_CTX *mem_ctx, int level, PyO
                        break;
 
                default:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->empty");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_empty_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -696,6 +809,10 @@ static PyObject *py_dcerpc_request_get_alloc_hint(PyObject *obj, void *closure)
 static int py_dcerpc_request_set_alloc_hint(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_request *object = (struct dcerpc_request *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->alloc_hint");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->alloc_hint));
                if (PyLong_Check(value)) {
@@ -739,6 +856,10 @@ static PyObject *py_dcerpc_request_get_context_id(PyObject *obj, void *closure)
 static int py_dcerpc_request_set_context_id(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_request *object = (struct dcerpc_request *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->context_id");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->context_id));
                if (PyLong_Check(value)) {
@@ -782,6 +903,10 @@ static PyObject *py_dcerpc_request_get_opnum(PyObject *obj, void *closure)
 static int py_dcerpc_request_set_opnum(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_request *object = (struct dcerpc_request *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->opnum");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->opnum));
                if (PyLong_Check(value)) {
@@ -828,6 +953,10 @@ static PyObject *py_dcerpc_request_get_object(PyObject *obj, void *closure)
 static int py_dcerpc_request_set_object(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_request *object = (struct dcerpc_request *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->object");
+               return -1;
+       }
        {
                union dcerpc_object *object_switch_0;
                object_switch_0 = py_export_dcerpc_object(pytalloc_get_mem_ctx(py_obj), NDR_DCERPC_REQUEST_OBJECT_PRESENT, value);
@@ -839,21 +968,6 @@ static int py_dcerpc_request_set_object(PyObject *py_obj, PyObject *value, void
        return 0;
 }
 
-static PyObject *py_dcerpc_request_get__pad(PyObject *obj, void *closure)
-{
-       struct dcerpc_request *object = (struct dcerpc_request *)pytalloc_get_ptr(obj);
-       PyObject *py__pad;
-       py__pad = PyString_FromStringAndSize((char *)(object->_pad).data, (object->_pad).length);
-       return py__pad;
-}
-
-static int py_dcerpc_request_set__pad(PyObject *py_obj, PyObject *value, void *closure)
-{
-       struct dcerpc_request *object = (struct dcerpc_request *)pytalloc_get_ptr(py_obj);
-       object->_pad = data_blob_talloc(pytalloc_get_mem_ctx(py_obj), PyString_AS_STRING(value), PyString_GET_SIZE(value));
-       return 0;
-}
-
 static PyObject *py_dcerpc_request_get_stub_and_verifier(PyObject *obj, void *closure)
 {
        struct dcerpc_request *object = (struct dcerpc_request *)pytalloc_get_ptr(obj);
@@ -865,18 +979,46 @@ static PyObject *py_dcerpc_request_get_stub_and_verifier(PyObject *obj, void *cl
 static int py_dcerpc_request_set_stub_and_verifier(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_request *object = (struct dcerpc_request *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->stub_and_verifier");
+               return -1;
+       }
        object->stub_and_verifier = data_blob_talloc(pytalloc_get_mem_ctx(py_obj), PyString_AS_STRING(value), PyString_GET_SIZE(value));
        return 0;
 }
 
 static PyGetSetDef py_dcerpc_request_getsetters[] = {
-       { discard_const_p(char, "alloc_hint"), py_dcerpc_request_get_alloc_hint, py_dcerpc_request_set_alloc_hint },
-       { discard_const_p(char, "context_id"), py_dcerpc_request_get_context_id, py_dcerpc_request_set_context_id },
-       { discard_const_p(char, "opnum"), py_dcerpc_request_get_opnum, py_dcerpc_request_set_opnum },
-       { discard_const_p(char, "object"), py_dcerpc_request_get_object, py_dcerpc_request_set_object },
-       { discard_const_p(char, "_pad"), py_dcerpc_request_get__pad, py_dcerpc_request_set__pad },
-       { discard_const_p(char, "stub_and_verifier"), py_dcerpc_request_get_stub_and_verifier, py_dcerpc_request_set_stub_and_verifier },
-       { NULL }
+       {
+               .name = discard_const_p(char, "alloc_hint"),
+               .get = py_dcerpc_request_get_alloc_hint,
+               .set = py_dcerpc_request_set_alloc_hint,
+               .doc = discard_const_p(char, "PIDL-generated element alloc_hint")
+       },
+       {
+               .name = discard_const_p(char, "context_id"),
+               .get = py_dcerpc_request_get_context_id,
+               .set = py_dcerpc_request_set_context_id,
+               .doc = discard_const_p(char, "PIDL-generated element context_id")
+       },
+       {
+               .name = discard_const_p(char, "opnum"),
+               .get = py_dcerpc_request_get_opnum,
+               .set = py_dcerpc_request_set_opnum,
+               .doc = discard_const_p(char, "PIDL-generated element opnum")
+       },
+       {
+               .name = discard_const_p(char, "object"),
+               .get = py_dcerpc_request_get_object,
+               .set = py_dcerpc_request_set_object,
+               .doc = discard_const_p(char, "PIDL-generated element object")
+       },
+       {
+               .name = discard_const_p(char, "stub_and_verifier"),
+               .get = py_dcerpc_request_get_stub_and_verifier,
+               .set = py_dcerpc_request_set_stub_and_verifier,
+               .doc = discard_const_p(char, "PIDL-generated element stub_and_verifier")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_request_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -891,7 +1033,6 @@ static PyTypeObject dcerpc_request_Type = {
        .tp_getset = py_dcerpc_request_getsetters,
        .tp_methods = NULL,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_request_new,
 };
 
@@ -918,6 +1059,10 @@ union dcerpc_bind_ack_reason *py_export_dcerpc_bind_ack_reason(TALLOC_CTX *mem_c
        union dcerpc_bind_ack_reason *ret = talloc_zero(mem_ctx, union dcerpc_bind_ack_reason);
        switch (level) {
                case DCERPC_BIND_ACK_RESULT_NEGOTIATE_ACK:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->negotiate");
+                               talloc_free(ret); return NULL;
+                       }
                        {
                                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(ret->negotiate));
                                if (PyLong_Check(in)) {
@@ -950,6 +1095,10 @@ union dcerpc_bind_ack_reason *py_export_dcerpc_bind_ack_reason(TALLOC_CTX *mem_c
                        break;
 
                default:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->value");
+                               talloc_free(ret); return NULL;
+                       }
                        {
                                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(ret->value));
                                if (PyLong_Check(in)) {
@@ -998,6 +1147,10 @@ static PyObject *py_dcerpc_ack_ctx_get_result(PyObject *obj, void *closure)
 static int py_dcerpc_ack_ctx_set_result(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_ack_ctx *object = (struct dcerpc_ack_ctx *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->result");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->result));
                if (PyLong_Check(value)) {
@@ -1044,6 +1197,10 @@ static PyObject *py_dcerpc_ack_ctx_get_reason(PyObject *obj, void *closure)
 static int py_dcerpc_ack_ctx_set_reason(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_ack_ctx *object = (struct dcerpc_ack_ctx *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->reason");
+               return -1;
+       }
        {
                union dcerpc_bind_ack_reason *reason_switch_0;
                reason_switch_0 = py_export_dcerpc_bind_ack_reason(pytalloc_get_mem_ctx(py_obj), object->result, value);
@@ -1066,6 +1223,10 @@ static PyObject *py_dcerpc_ack_ctx_get_syntax(PyObject *obj, void *closure)
 static int py_dcerpc_ack_ctx_set_syntax(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_ack_ctx *object = (struct dcerpc_ack_ctx *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->syntax");
+               return -1;
+       }
        PY_CHECK_TYPE(ndr_syntax_id_Type, value, return -1;);
        if (talloc_reference(pytalloc_get_mem_ctx(py_obj), pytalloc_get_mem_ctx(value)) == NULL) {
                PyErr_NoMemory();
@@ -1076,10 +1237,25 @@ static int py_dcerpc_ack_ctx_set_syntax(PyObject *py_obj, PyObject *value, void
 }
 
 static PyGetSetDef py_dcerpc_ack_ctx_getsetters[] = {
-       { discard_const_p(char, "result"), py_dcerpc_ack_ctx_get_result, py_dcerpc_ack_ctx_set_result },
-       { discard_const_p(char, "reason"), py_dcerpc_ack_ctx_get_reason, py_dcerpc_ack_ctx_set_reason },
-       { discard_const_p(char, "syntax"), py_dcerpc_ack_ctx_get_syntax, py_dcerpc_ack_ctx_set_syntax },
-       { NULL }
+       {
+               .name = discard_const_p(char, "result"),
+               .get = py_dcerpc_ack_ctx_get_result,
+               .set = py_dcerpc_ack_ctx_set_result,
+               .doc = discard_const_p(char, "PIDL-generated element result")
+       },
+       {
+               .name = discard_const_p(char, "reason"),
+               .get = py_dcerpc_ack_ctx_get_reason,
+               .set = py_dcerpc_ack_ctx_set_reason,
+               .doc = discard_const_p(char, "PIDL-generated element reason")
+       },
+       {
+               .name = discard_const_p(char, "syntax"),
+               .get = py_dcerpc_ack_ctx_get_syntax,
+               .set = py_dcerpc_ack_ctx_set_syntax,
+               .doc = discard_const_p(char, "PIDL-generated element syntax")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_ack_ctx_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -1094,7 +1270,6 @@ static PyTypeObject dcerpc_ack_ctx_Type = {
        .tp_getset = py_dcerpc_ack_ctx_getsetters,
        .tp_methods = NULL,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_ack_ctx_new,
 };
 
@@ -1110,6 +1285,10 @@ static PyObject *py_dcerpc_bind_ack_get_max_xmit_frag(PyObject *obj, void *closu
 static int py_dcerpc_bind_ack_set_max_xmit_frag(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_bind_ack *object = (struct dcerpc_bind_ack *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->max_xmit_frag");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->max_xmit_frag));
                if (PyLong_Check(value)) {
@@ -1153,6 +1332,10 @@ static PyObject *py_dcerpc_bind_ack_get_max_recv_frag(PyObject *obj, void *closu
 static int py_dcerpc_bind_ack_set_max_recv_frag(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_bind_ack *object = (struct dcerpc_bind_ack *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->max_recv_frag");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->max_recv_frag));
                if (PyLong_Check(value)) {
@@ -1196,6 +1379,10 @@ static PyObject *py_dcerpc_bind_ack_get_assoc_group_id(PyObject *obj, void *clos
 static int py_dcerpc_bind_ack_set_assoc_group_id(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_bind_ack *object = (struct dcerpc_bind_ack *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->assoc_group_id");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->assoc_group_id));
                if (PyLong_Check(value)) {
@@ -1239,6 +1426,10 @@ static PyObject *py_dcerpc_bind_ack_get_secondary_address_size(PyObject *obj, vo
 static int py_dcerpc_bind_ack_set_secondary_address_size(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_bind_ack *object = (struct dcerpc_bind_ack *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->secondary_address_size");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->secondary_address_size));
                if (PyLong_Check(value)) {
@@ -1287,14 +1478,37 @@ static PyObject *py_dcerpc_bind_ack_get_secondary_address(PyObject *obj, void *c
 static int py_dcerpc_bind_ack_set_secondary_address(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_bind_ack *object = (struct dcerpc_bind_ack *)pytalloc_get_ptr(py_obj);
-       if (PyUnicode_Check(value)) {
-               object->secondary_address = PyString_AS_STRING(PyUnicode_AsEncodedString(value, "utf-8", "ignore"));
-       } else if (PyString_Check(value)) {
-               object->secondary_address = PyString_AS_STRING(value);
-       } else {
-               PyErr_Format(PyExc_TypeError, "Expected string or unicode object, got %s", Py_TYPE(value)->tp_name);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->secondary_address");
                return -1;
        }
+       {
+               const char *test_str;
+               const char *talloc_str;
+               PyObject *unicode = NULL;
+               if (PyUnicode_Check(value)) {
+                       unicode = PyUnicode_AsEncodedString(value, "utf-8", "ignore");
+                       if (unicode == NULL) {
+                               PyErr_NoMemory();
+                               return -1;
+                       }
+                       test_str = PyString_AS_STRING(unicode);
+               } else if (PyString_Check(value)) {
+                       test_str = PyString_AS_STRING(value);
+               } else {
+                       PyErr_Format(PyExc_TypeError, "Expected string or unicode object, got %s", Py_TYPE(value)->tp_name);
+                       return -1;
+               }
+               talloc_str = talloc_strdup(pytalloc_get_mem_ctx(py_obj), test_str);
+               if (unicode != NULL) {
+                       Py_DECREF(unicode);
+               }
+               if (talloc_str == NULL) {
+                       PyErr_NoMemory();
+                       return -1;
+               }
+               object->secondary_address = talloc_str;
+       }
        return 0;
 }
 
@@ -1309,6 +1523,10 @@ static PyObject *py_dcerpc_bind_ack_get__pad1(PyObject *obj, void *closure)
 static int py_dcerpc_bind_ack_set__pad1(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_bind_ack *object = (struct dcerpc_bind_ack *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->_pad1");
+               return -1;
+       }
        object->_pad1 = data_blob_talloc(pytalloc_get_mem_ctx(py_obj), PyString_AS_STRING(value), PyString_GET_SIZE(value));
        return 0;
 }
@@ -1324,6 +1542,10 @@ static PyObject *py_dcerpc_bind_ack_get_num_results(PyObject *obj, void *closure
 static int py_dcerpc_bind_ack_set_num_results(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_bind_ack *object = (struct dcerpc_bind_ack *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->num_results");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->num_results));
                if (PyLong_Check(value)) {
@@ -1378,6 +1600,10 @@ static PyObject *py_dcerpc_bind_ack_get_ctx_list(PyObject *obj, void *closure)
 static int py_dcerpc_bind_ack_set_ctx_list(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_bind_ack *object = (struct dcerpc_bind_ack *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->ctx_list");
+               return -1;
+       }
        PY_CHECK_TYPE(&PyList_Type, value, return -1;);
        {
                int ctx_list_cntr_0;
@@ -1385,6 +1611,10 @@ static int py_dcerpc_bind_ack_set_ctx_list(PyObject *py_obj, PyObject *value, vo
                if (!object->ctx_list) { return -1;; }
                talloc_set_name_const(object->ctx_list, "ARRAY: object->ctx_list");
                for (ctx_list_cntr_0 = 0; ctx_list_cntr_0 < PyList_GET_SIZE(value); ctx_list_cntr_0++) {
+                       if (PyList_GET_ITEM(value, ctx_list_cntr_0) == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->ctx_list[ctx_list_cntr_0]");
+                               return -1;
+                       }
                        PY_CHECK_TYPE(&dcerpc_ack_ctx_Type, PyList_GET_ITEM(value, ctx_list_cntr_0), return -1;);
                        if (talloc_reference(object->ctx_list, pytalloc_get_mem_ctx(PyList_GET_ITEM(value, ctx_list_cntr_0))) == NULL) {
                                PyErr_NoMemory();
@@ -1407,21 +1637,70 @@ static PyObject *py_dcerpc_bind_ack_get_auth_info(PyObject *obj, void *closure)
 static int py_dcerpc_bind_ack_set_auth_info(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_bind_ack *object = (struct dcerpc_bind_ack *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->auth_info");
+               return -1;
+       }
        object->auth_info = data_blob_talloc(pytalloc_get_mem_ctx(py_obj), PyString_AS_STRING(value), PyString_GET_SIZE(value));
        return 0;
 }
 
 static PyGetSetDef py_dcerpc_bind_ack_getsetters[] = {
-       { discard_const_p(char, "max_xmit_frag"), py_dcerpc_bind_ack_get_max_xmit_frag, py_dcerpc_bind_ack_set_max_xmit_frag },
-       { discard_const_p(char, "max_recv_frag"), py_dcerpc_bind_ack_get_max_recv_frag, py_dcerpc_bind_ack_set_max_recv_frag },
-       { discard_const_p(char, "assoc_group_id"), py_dcerpc_bind_ack_get_assoc_group_id, py_dcerpc_bind_ack_set_assoc_group_id },
-       { discard_const_p(char, "secondary_address_size"), py_dcerpc_bind_ack_get_secondary_address_size, py_dcerpc_bind_ack_set_secondary_address_size },
-       { discard_const_p(char, "secondary_address"), py_dcerpc_bind_ack_get_secondary_address, py_dcerpc_bind_ack_set_secondary_address },
-       { discard_const_p(char, "_pad1"), py_dcerpc_bind_ack_get__pad1, py_dcerpc_bind_ack_set__pad1 },
-       { discard_const_p(char, "num_results"), py_dcerpc_bind_ack_get_num_results, py_dcerpc_bind_ack_set_num_results },
-       { discard_const_p(char, "ctx_list"), py_dcerpc_bind_ack_get_ctx_list, py_dcerpc_bind_ack_set_ctx_list },
-       { discard_const_p(char, "auth_info"), py_dcerpc_bind_ack_get_auth_info, py_dcerpc_bind_ack_set_auth_info },
-       { NULL }
+       {
+               .name = discard_const_p(char, "max_xmit_frag"),
+               .get = py_dcerpc_bind_ack_get_max_xmit_frag,
+               .set = py_dcerpc_bind_ack_set_max_xmit_frag,
+               .doc = discard_const_p(char, "PIDL-generated element max_xmit_frag")
+       },
+       {
+               .name = discard_const_p(char, "max_recv_frag"),
+               .get = py_dcerpc_bind_ack_get_max_recv_frag,
+               .set = py_dcerpc_bind_ack_set_max_recv_frag,
+               .doc = discard_const_p(char, "PIDL-generated element max_recv_frag")
+       },
+       {
+               .name = discard_const_p(char, "assoc_group_id"),
+               .get = py_dcerpc_bind_ack_get_assoc_group_id,
+               .set = py_dcerpc_bind_ack_set_assoc_group_id,
+               .doc = discard_const_p(char, "PIDL-generated element assoc_group_id")
+       },
+       {
+               .name = discard_const_p(char, "secondary_address_size"),
+               .get = py_dcerpc_bind_ack_get_secondary_address_size,
+               .set = py_dcerpc_bind_ack_set_secondary_address_size,
+               .doc = discard_const_p(char, "PIDL-generated element secondary_address_size")
+       },
+       {
+               .name = discard_const_p(char, "secondary_address"),
+               .get = py_dcerpc_bind_ack_get_secondary_address,
+               .set = py_dcerpc_bind_ack_set_secondary_address,
+               .doc = discard_const_p(char, "PIDL-generated element secondary_address")
+       },
+       {
+               .name = discard_const_p(char, "_pad1"),
+               .get = py_dcerpc_bind_ack_get__pad1,
+               .set = py_dcerpc_bind_ack_set__pad1,
+               .doc = discard_const_p(char, "PIDL-generated element _pad1")
+       },
+       {
+               .name = discard_const_p(char, "num_results"),
+               .get = py_dcerpc_bind_ack_get_num_results,
+               .set = py_dcerpc_bind_ack_set_num_results,
+               .doc = discard_const_p(char, "PIDL-generated element num_results")
+       },
+       {
+               .name = discard_const_p(char, "ctx_list"),
+               .get = py_dcerpc_bind_ack_get_ctx_list,
+               .set = py_dcerpc_bind_ack_set_ctx_list,
+               .doc = discard_const_p(char, "PIDL-generated element ctx_list")
+       },
+       {
+               .name = discard_const_p(char, "auth_info"),
+               .get = py_dcerpc_bind_ack_get_auth_info,
+               .set = py_dcerpc_bind_ack_set_auth_info,
+               .doc = discard_const_p(char, "PIDL-generated element auth_info")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_bind_ack_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -1436,7 +1715,6 @@ static PyTypeObject dcerpc_bind_ack_Type = {
        .tp_getset = py_dcerpc_bind_ack_getsetters,
        .tp_methods = NULL,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_bind_ack_new,
 };
 
@@ -1452,6 +1730,10 @@ static PyObject *py_dcerpc_bind_nak_version_get_rpc_vers(PyObject *obj, void *cl
 static int py_dcerpc_bind_nak_version_set_rpc_vers(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_bind_nak_version *object = (struct dcerpc_bind_nak_version *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->rpc_vers");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->rpc_vers));
                if (PyLong_Check(value)) {
@@ -1495,6 +1777,10 @@ static PyObject *py_dcerpc_bind_nak_version_get_rpc_vers_minor(PyObject *obj, vo
 static int py_dcerpc_bind_nak_version_set_rpc_vers_minor(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_bind_nak_version *object = (struct dcerpc_bind_nak_version *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->rpc_vers_minor");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->rpc_vers_minor));
                if (PyLong_Check(value)) {
@@ -1528,9 +1814,19 @@ static int py_dcerpc_bind_nak_version_set_rpc_vers_minor(PyObject *py_obj, PyObj
 }
 
 static PyGetSetDef py_dcerpc_bind_nak_version_getsetters[] = {
-       { discard_const_p(char, "rpc_vers"), py_dcerpc_bind_nak_version_get_rpc_vers, py_dcerpc_bind_nak_version_set_rpc_vers },
-       { discard_const_p(char, "rpc_vers_minor"), py_dcerpc_bind_nak_version_get_rpc_vers_minor, py_dcerpc_bind_nak_version_set_rpc_vers_minor },
-       { NULL }
+       {
+               .name = discard_const_p(char, "rpc_vers"),
+               .get = py_dcerpc_bind_nak_version_get_rpc_vers,
+               .set = py_dcerpc_bind_nak_version_set_rpc_vers,
+               .doc = discard_const_p(char, "PIDL-generated element rpc_vers")
+       },
+       {
+               .name = discard_const_p(char, "rpc_vers_minor"),
+               .get = py_dcerpc_bind_nak_version_get_rpc_vers_minor,
+               .set = py_dcerpc_bind_nak_version_set_rpc_vers_minor,
+               .doc = discard_const_p(char, "PIDL-generated element rpc_vers_minor")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_bind_nak_version_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -1538,14 +1834,91 @@ static PyObject *py_dcerpc_bind_nak_version_new(PyTypeObject *type, PyObject *ar
        return pytalloc_new(struct dcerpc_bind_nak_version, type);
 }
 
+static PyObject *py_dcerpc_bind_nak_version_ndr_pack(PyObject *py_obj)
+{
+       struct dcerpc_bind_nak_version *object = (struct dcerpc_bind_nak_version *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
+       DATA_BLOB blob;
+       enum ndr_err_code err;
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_bind_nak_version);
+       if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
+               PyErr_SetNdrError(err);
+               return NULL;
+       }
+
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
+}
+
+static PyObject *py_dcerpc_bind_nak_version_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
+{
+       struct dcerpc_bind_nak_version *object = (struct dcerpc_bind_nak_version *)pytalloc_get_ptr(py_obj);
+       DATA_BLOB blob;
+       Py_ssize_t blob_length = 0;
+       enum ndr_err_code err;
+       const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
+       PyObject *allow_remaining_obj = NULL;
+       bool allow_remaining = false;
+
+       if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s#|O:__ndr_unpack__",
+               discard_const_p(char *, kwnames),
+               &blob.data, &blob_length,
+               &allow_remaining_obj)) {
+               return NULL;
+       }
+       blob.length = blob_length;
+
+       if (allow_remaining_obj && PyObject_IsTrue(allow_remaining_obj)) {
+               allow_remaining = true;
+       }
+
+       if (allow_remaining) {
+               err = ndr_pull_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_pull_flags_fn_t)ndr_pull_dcerpc_bind_nak_version);
+       } else {
+               err = ndr_pull_struct_blob_all(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_pull_flags_fn_t)ndr_pull_dcerpc_bind_nak_version);
+       }
+       if (err != NDR_ERR_SUCCESS) {
+               PyErr_SetNdrError(err);
+               return NULL;
+       }
+
+       Py_RETURN_NONE;
+}
+
+static PyObject *py_dcerpc_bind_nak_version_ndr_print(PyObject *py_obj)
+{
+       struct dcerpc_bind_nak_version *object = (struct dcerpc_bind_nak_version *)pytalloc_get_ptr(py_obj);
+       PyObject *ret;
+       char *retstr;
+
+       retstr = ndr_print_struct_string(pytalloc_get_mem_ctx(py_obj), (ndr_print_fn_t)ndr_print_dcerpc_bind_nak_version, "dcerpc_bind_nak_version", object);
+       ret = PyString_FromString(retstr);
+       talloc_free(retstr);
+
+       return ret;
+}
+
+static PyMethodDef py_dcerpc_bind_nak_version_methods[] = {
+       { "__ndr_pack__", (PyCFunction)py_dcerpc_bind_nak_version_ndr_pack, METH_NOARGS, "S.ndr_pack(object) -> blob\nNDR pack" },
+       { "__ndr_unpack__", (PyCFunction)py_dcerpc_bind_nak_version_ndr_unpack, METH_VARARGS|METH_KEYWORDS, "S.ndr_unpack(class, blob, allow_remaining=False) -> None\nNDR unpack" },
+       { "__ndr_print__", (PyCFunction)py_dcerpc_bind_nak_version_ndr_print, METH_VARARGS, "S.ndr_print(object) -> None\nNDR print" },
+       { NULL, NULL, 0, NULL }
+};
+
 
 static PyTypeObject dcerpc_bind_nak_version_Type = {
        PyObject_HEAD_INIT(NULL) 0,
        .tp_name = "dcerpc.bind_nak_version",
        .tp_getset = py_dcerpc_bind_nak_version_getsetters,
-       .tp_methods = NULL,
+       .tp_methods = py_dcerpc_bind_nak_version_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_bind_nak_version_new,
 };
 
@@ -1561,6 +1934,10 @@ static PyObject *py_dcerpc_bind_nak_get_reject_reason(PyObject *obj, void *closu
 static int py_dcerpc_bind_nak_set_reject_reason(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_bind_nak *object = (struct dcerpc_bind_nak *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->reject_reason");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->reject_reason));
                if (PyLong_Check(value)) {
@@ -1604,6 +1981,10 @@ static PyObject *py_dcerpc_bind_nak_get_num_versions(PyObject *obj, void *closur
 static int py_dcerpc_bind_nak_set_num_versions(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_bind_nak *object = (struct dcerpc_bind_nak *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->num_versions");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->num_versions));
                if (PyLong_Check(value)) {
@@ -1658,6 +2039,10 @@ static PyObject *py_dcerpc_bind_nak_get_versions(PyObject *obj, void *closure)
 static int py_dcerpc_bind_nak_set_versions(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_bind_nak *object = (struct dcerpc_bind_nak *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->versions");
+               return -1;
+       }
        PY_CHECK_TYPE(&PyList_Type, value, return -1;);
        {
                int versions_cntr_0;
@@ -1665,6 +2050,10 @@ static int py_dcerpc_bind_nak_set_versions(PyObject *py_obj, PyObject *value, vo
                if (!object->versions) { return -1;; }
                talloc_set_name_const(object->versions, "ARRAY: object->versions");
                for (versions_cntr_0 = 0; versions_cntr_0 < PyList_GET_SIZE(value); versions_cntr_0++) {
+                       if (PyList_GET_ITEM(value, versions_cntr_0) == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->versions[versions_cntr_0]");
+                               return -1;
+                       }
                        PY_CHECK_TYPE(&dcerpc_bind_nak_version_Type, PyList_GET_ITEM(value, versions_cntr_0), return -1;);
                        if (talloc_reference(object->versions, pytalloc_get_mem_ctx(PyList_GET_ITEM(value, versions_cntr_0))) == NULL) {
                                PyErr_NoMemory();
@@ -1687,16 +2076,40 @@ static PyObject *py_dcerpc_bind_nak_get__pad(PyObject *obj, void *closure)
 static int py_dcerpc_bind_nak_set__pad(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_bind_nak *object = (struct dcerpc_bind_nak *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->_pad");
+               return -1;
+       }
        object->_pad = data_blob_talloc(pytalloc_get_mem_ctx(py_obj), PyString_AS_STRING(value), PyString_GET_SIZE(value));
        return 0;
 }
 
 static PyGetSetDef py_dcerpc_bind_nak_getsetters[] = {
-       { discard_const_p(char, "reject_reason"), py_dcerpc_bind_nak_get_reject_reason, py_dcerpc_bind_nak_set_reject_reason },
-       { discard_const_p(char, "num_versions"), py_dcerpc_bind_nak_get_num_versions, py_dcerpc_bind_nak_set_num_versions },
-       { discard_const_p(char, "versions"), py_dcerpc_bind_nak_get_versions, py_dcerpc_bind_nak_set_versions },
-       { discard_const_p(char, "_pad"), py_dcerpc_bind_nak_get__pad, py_dcerpc_bind_nak_set__pad },
-       { NULL }
+       {
+               .name = discard_const_p(char, "reject_reason"),
+               .get = py_dcerpc_bind_nak_get_reject_reason,
+               .set = py_dcerpc_bind_nak_set_reject_reason,
+               .doc = discard_const_p(char, "PIDL-generated element reject_reason")
+       },
+       {
+               .name = discard_const_p(char, "num_versions"),
+               .get = py_dcerpc_bind_nak_get_num_versions,
+               .set = py_dcerpc_bind_nak_set_num_versions,
+               .doc = discard_const_p(char, "PIDL-generated element num_versions")
+       },
+       {
+               .name = discard_const_p(char, "versions"),
+               .get = py_dcerpc_bind_nak_get_versions,
+               .set = py_dcerpc_bind_nak_set_versions,
+               .doc = discard_const_p(char, "PIDL-generated element versions")
+       },
+       {
+               .name = discard_const_p(char, "_pad"),
+               .get = py_dcerpc_bind_nak_get__pad,
+               .set = py_dcerpc_bind_nak_set__pad,
+               .doc = discard_const_p(char, "PIDL-generated element _pad")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_bind_nak_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -1704,14 +2117,91 @@ static PyObject *py_dcerpc_bind_nak_new(PyTypeObject *type, PyObject *args, PyOb
        return pytalloc_new(struct dcerpc_bind_nak, type);
 }
 
+static PyObject *py_dcerpc_bind_nak_ndr_pack(PyObject *py_obj)
+{
+       struct dcerpc_bind_nak *object = (struct dcerpc_bind_nak *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
+       DATA_BLOB blob;
+       enum ndr_err_code err;
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_bind_nak);
+       if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
+               PyErr_SetNdrError(err);
+               return NULL;
+       }
+
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
+}
+
+static PyObject *py_dcerpc_bind_nak_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
+{
+       struct dcerpc_bind_nak *object = (struct dcerpc_bind_nak *)pytalloc_get_ptr(py_obj);
+       DATA_BLOB blob;
+       Py_ssize_t blob_length = 0;
+       enum ndr_err_code err;
+       const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
+       PyObject *allow_remaining_obj = NULL;
+       bool allow_remaining = false;
+
+       if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s#|O:__ndr_unpack__",
+               discard_const_p(char *, kwnames),
+               &blob.data, &blob_length,
+               &allow_remaining_obj)) {
+               return NULL;
+       }
+       blob.length = blob_length;
+
+       if (allow_remaining_obj && PyObject_IsTrue(allow_remaining_obj)) {
+               allow_remaining = true;
+       }
+
+       if (allow_remaining) {
+               err = ndr_pull_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_pull_flags_fn_t)ndr_pull_dcerpc_bind_nak);
+       } else {
+               err = ndr_pull_struct_blob_all(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_pull_flags_fn_t)ndr_pull_dcerpc_bind_nak);
+       }
+       if (err != NDR_ERR_SUCCESS) {
+               PyErr_SetNdrError(err);
+               return NULL;
+       }
+
+       Py_RETURN_NONE;
+}
+
+static PyObject *py_dcerpc_bind_nak_ndr_print(PyObject *py_obj)
+{
+       struct dcerpc_bind_nak *object = (struct dcerpc_bind_nak *)pytalloc_get_ptr(py_obj);
+       PyObject *ret;
+       char *retstr;
+
+       retstr = ndr_print_struct_string(pytalloc_get_mem_ctx(py_obj), (ndr_print_fn_t)ndr_print_dcerpc_bind_nak, "dcerpc_bind_nak", object);
+       ret = PyString_FromString(retstr);
+       talloc_free(retstr);
+
+       return ret;
+}
+
+static PyMethodDef py_dcerpc_bind_nak_methods[] = {
+       { "__ndr_pack__", (PyCFunction)py_dcerpc_bind_nak_ndr_pack, METH_NOARGS, "S.ndr_pack(object) -> blob\nNDR pack" },
+       { "__ndr_unpack__", (PyCFunction)py_dcerpc_bind_nak_ndr_unpack, METH_VARARGS|METH_KEYWORDS, "S.ndr_unpack(class, blob, allow_remaining=False) -> None\nNDR unpack" },
+       { "__ndr_print__", (PyCFunction)py_dcerpc_bind_nak_ndr_print, METH_VARARGS, "S.ndr_print(object) -> None\nNDR print" },
+       { NULL, NULL, 0, NULL }
+};
+
 
 static PyTypeObject dcerpc_bind_nak_Type = {
        PyObject_HEAD_INIT(NULL) 0,
        .tp_name = "dcerpc.bind_nak",
        .tp_getset = py_dcerpc_bind_nak_getsetters,
-       .tp_methods = NULL,
+       .tp_methods = py_dcerpc_bind_nak_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_bind_nak_new,
 };
 
@@ -1727,6 +2217,10 @@ static PyObject *py_dcerpc_response_get_alloc_hint(PyObject *obj, void *closure)
 static int py_dcerpc_response_set_alloc_hint(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_response *object = (struct dcerpc_response *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->alloc_hint");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->alloc_hint));
                if (PyLong_Check(value)) {
@@ -1770,6 +2264,10 @@ static PyObject *py_dcerpc_response_get_context_id(PyObject *obj, void *closure)
 static int py_dcerpc_response_set_context_id(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_response *object = (struct dcerpc_response *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->context_id");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->context_id));
                if (PyLong_Check(value)) {
@@ -1813,6 +2311,10 @@ static PyObject *py_dcerpc_response_get_cancel_count(PyObject *obj, void *closur
 static int py_dcerpc_response_set_cancel_count(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_response *object = (struct dcerpc_response *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->cancel_count");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->cancel_count));
                if (PyLong_Check(value)) {
@@ -1845,18 +2347,50 @@ static int py_dcerpc_response_set_cancel_count(PyObject *py_obj, PyObject *value
        return 0;
 }
 
-static PyObject *py_dcerpc_response_get__pad(PyObject *obj, void *closure)
+static PyObject *py_dcerpc_response_get_reserved(PyObject *obj, void *closure)
 {
        struct dcerpc_response *object = (struct dcerpc_response *)pytalloc_get_ptr(obj);
-       PyObject *py__pad;
-       py__pad = PyString_FromStringAndSize((char *)(object->_pad).data, (object->_pad).length);
-       return py__pad;
+       PyObject *py_reserved;
+       py_reserved = PyInt_FromLong((uint16_t)object->reserved);
+       return py_reserved;
 }
 
-static int py_dcerpc_response_set__pad(PyObject *py_obj, PyObject *value, void *closure)
+static int py_dcerpc_response_set_reserved(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_response *object = (struct dcerpc_response *)pytalloc_get_ptr(py_obj);
-       object->_pad = data_blob_talloc(pytalloc_get_mem_ctx(py_obj), PyString_AS_STRING(value), PyString_GET_SIZE(value));
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->reserved");
+               return -1;
+       }
+       {
+               const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->reserved));
+               if (PyLong_Check(value)) {
+                       unsigned long long test_var;
+                       test_var = PyLong_AsUnsignedLongLong(value);
+                       if (PyErr_Occurred() != NULL) {
+                               return -1;
+                       }
+                       if (test_var > uint_max) {
+                               PyErr_Format(PyExc_OverflowError, "Expected type %s or %s within range 0 - %llu, got %llu",\
+                                 PyInt_Type.tp_name, PyLong_Type.tp_name, uint_max, test_var);
+                               return -1;
+                       }
+                       object->reserved = test_var;
+               } else if (PyInt_Check(value)) {
+                       long test_var;
+                       test_var = PyInt_AsLong(value);
+                       if (test_var < 0 || test_var > uint_max) {
+                               PyErr_Format(PyExc_OverflowError, "Expected type %s or %s within range 0 - %llu, got %ld",\
+                                 PyInt_Type.tp_name, PyLong_Type.tp_name, uint_max, test_var);
+                               return -1;
+                       }
+                       object->reserved = test_var;
+               } else {
+                       PyErr_Format(PyExc_TypeError, "Expected type %s or %s",\
+                         PyInt_Type.tp_name, PyLong_Type.tp_name);
+                       return -1;
+               }
+       }
        return 0;
 }
 
@@ -1871,17 +2405,46 @@ static PyObject *py_dcerpc_response_get_stub_and_verifier(PyObject *obj, void *c
 static int py_dcerpc_response_set_stub_and_verifier(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_response *object = (struct dcerpc_response *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->stub_and_verifier");
+               return -1;
+       }
        object->stub_and_verifier = data_blob_talloc(pytalloc_get_mem_ctx(py_obj), PyString_AS_STRING(value), PyString_GET_SIZE(value));
        return 0;
 }
 
 static PyGetSetDef py_dcerpc_response_getsetters[] = {
-       { discard_const_p(char, "alloc_hint"), py_dcerpc_response_get_alloc_hint, py_dcerpc_response_set_alloc_hint },
-       { discard_const_p(char, "context_id"), py_dcerpc_response_get_context_id, py_dcerpc_response_set_context_id },
-       { discard_const_p(char, "cancel_count"), py_dcerpc_response_get_cancel_count, py_dcerpc_response_set_cancel_count },
-       { discard_const_p(char, "_pad"), py_dcerpc_response_get__pad, py_dcerpc_response_set__pad },
-       { discard_const_p(char, "stub_and_verifier"), py_dcerpc_response_get_stub_and_verifier, py_dcerpc_response_set_stub_and_verifier },
-       { NULL }
+       {
+               .name = discard_const_p(char, "alloc_hint"),
+               .get = py_dcerpc_response_get_alloc_hint,
+               .set = py_dcerpc_response_set_alloc_hint,
+               .doc = discard_const_p(char, "PIDL-generated element alloc_hint")
+       },
+       {
+               .name = discard_const_p(char, "context_id"),
+               .get = py_dcerpc_response_get_context_id,
+               .set = py_dcerpc_response_set_context_id,
+               .doc = discard_const_p(char, "PIDL-generated element context_id")
+       },
+       {
+               .name = discard_const_p(char, "cancel_count"),
+               .get = py_dcerpc_response_get_cancel_count,
+               .set = py_dcerpc_response_set_cancel_count,
+               .doc = discard_const_p(char, "PIDL-generated element cancel_count")
+       },
+       {
+               .name = discard_const_p(char, "reserved"),
+               .get = py_dcerpc_response_get_reserved,
+               .set = py_dcerpc_response_set_reserved,
+               .doc = discard_const_p(char, "PIDL-generated element reserved")
+       },
+       {
+               .name = discard_const_p(char, "stub_and_verifier"),
+               .get = py_dcerpc_response_get_stub_and_verifier,
+               .set = py_dcerpc_response_set_stub_and_verifier,
+               .doc = discard_const_p(char, "PIDL-generated element stub_and_verifier")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_response_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -1896,7 +2459,6 @@ static PyTypeObject dcerpc_response_Type = {
        .tp_getset = py_dcerpc_response_getsetters,
        .tp_methods = NULL,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_response_new,
 };
 
@@ -1912,6 +2474,10 @@ static PyObject *py_dcerpc_fault_get_alloc_hint(PyObject *obj, void *closure)
 static int py_dcerpc_fault_set_alloc_hint(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_fault *object = (struct dcerpc_fault *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->alloc_hint");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->alloc_hint));
                if (PyLong_Check(value)) {
@@ -1955,6 +2521,10 @@ static PyObject *py_dcerpc_fault_get_context_id(PyObject *obj, void *closure)
 static int py_dcerpc_fault_set_context_id(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_fault *object = (struct dcerpc_fault *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->context_id");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->context_id));
                if (PyLong_Check(value)) {
@@ -1998,6 +2568,10 @@ static PyObject *py_dcerpc_fault_get_cancel_count(PyObject *obj, void *closure)
 static int py_dcerpc_fault_set_cancel_count(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_fault *object = (struct dcerpc_fault *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->cancel_count");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->cancel_count));
                if (PyLong_Check(value)) {
@@ -2030,6 +2604,53 @@ static int py_dcerpc_fault_set_cancel_count(PyObject *py_obj, PyObject *value, v
        return 0;
 }
 
+static PyObject *py_dcerpc_fault_get_flags(PyObject *obj, void *closure)
+{
+       struct dcerpc_fault *object = (struct dcerpc_fault *)pytalloc_get_ptr(obj);
+       PyObject *py_flags;
+       py_flags = PyInt_FromLong((uint16_t)object->flags);
+       return py_flags;
+}
+
+static int py_dcerpc_fault_set_flags(PyObject *py_obj, PyObject *value, void *closure)
+{
+       struct dcerpc_fault *object = (struct dcerpc_fault *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->flags");
+               return -1;
+       }
+       {
+               const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->flags));
+               if (PyLong_Check(value)) {
+                       unsigned long long test_var;
+                       test_var = PyLong_AsUnsignedLongLong(value);
+                       if (PyErr_Occurred() != NULL) {
+                               return -1;
+                       }
+                       if (test_var > uint_max) {
+                               PyErr_Format(PyExc_OverflowError, "Expected type %s or %s within range 0 - %llu, got %llu",\
+                                 PyInt_Type.tp_name, PyLong_Type.tp_name, uint_max, test_var);
+                               return -1;
+                       }
+                       object->flags = test_var;
+               } else if (PyInt_Check(value)) {
+                       long test_var;
+                       test_var = PyInt_AsLong(value);
+                       if (test_var < 0 || test_var > uint_max) {
+                               PyErr_Format(PyExc_OverflowError, "Expected type %s or %s within range 0 - %llu, got %ld",\
+                                 PyInt_Type.tp_name, PyLong_Type.tp_name, uint_max, test_var);
+                               return -1;
+                       }
+                       object->flags = test_var;
+               } else {
+                       PyErr_Format(PyExc_TypeError, "Expected type %s or %s",\
+                         PyInt_Type.tp_name, PyLong_Type.tp_name);
+                       return -1;
+               }
+       }
+       return 0;
+}
+
 static PyObject *py_dcerpc_fault_get_status(PyObject *obj, void *closure)
 {
        struct dcerpc_fault *object = (struct dcerpc_fault *)pytalloc_get_ptr(obj);
@@ -2041,6 +2662,10 @@ static PyObject *py_dcerpc_fault_get_status(PyObject *obj, void *closure)
 static int py_dcerpc_fault_set_status(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_fault *object = (struct dcerpc_fault *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->status");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->status));
                if (PyLong_Check(value)) {
@@ -2077,24 +2702,112 @@ static PyObject *py_dcerpc_fault_get__pad(PyObject *obj, void *closure)
 {
        struct dcerpc_fault *object = (struct dcerpc_fault *)pytalloc_get_ptr(obj);
        PyObject *py__pad;
-       py__pad = PyString_FromStringAndSize((char *)(object->_pad).data, (object->_pad).length);
+       py__pad = ndr_PyLong_FromUnsignedLongLong((uint32_t)object->_pad);
        return py__pad;
 }
 
 static int py_dcerpc_fault_set__pad(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_fault *object = (struct dcerpc_fault *)pytalloc_get_ptr(py_obj);
-       object->_pad = data_blob_talloc(pytalloc_get_mem_ctx(py_obj), PyString_AS_STRING(value), PyString_GET_SIZE(value));
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->_pad");
+               return -1;
+       }
+       {
+               const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->_pad));
+               if (PyLong_Check(value)) {
+                       unsigned long long test_var;
+                       test_var = PyLong_AsUnsignedLongLong(value);
+                       if (PyErr_Occurred() != NULL) {
+                               return -1;
+                       }
+                       if (test_var > uint_max) {
+                               PyErr_Format(PyExc_OverflowError, "Expected type %s or %s within range 0 - %llu, got %llu",\
+                                 PyInt_Type.tp_name, PyLong_Type.tp_name, uint_max, test_var);
+                               return -1;
+                       }
+                       object->_pad = test_var;
+               } else if (PyInt_Check(value)) {
+                       long test_var;
+                       test_var = PyInt_AsLong(value);
+                       if (test_var < 0 || test_var > uint_max) {
+                               PyErr_Format(PyExc_OverflowError, "Expected type %s or %s within range 0 - %llu, got %ld",\
+                                 PyInt_Type.tp_name, PyLong_Type.tp_name, uint_max, test_var);
+                               return -1;
+                       }
+                       object->_pad = test_var;
+               } else {
+                       PyErr_Format(PyExc_TypeError, "Expected type %s or %s",\
+                         PyInt_Type.tp_name, PyLong_Type.tp_name);
+                       return -1;
+               }
+       }
+       return 0;
+}
+
+static PyObject *py_dcerpc_fault_get_error_and_verifier(PyObject *obj, void *closure)
+{
+       struct dcerpc_fault *object = (struct dcerpc_fault *)pytalloc_get_ptr(obj);
+       PyObject *py_error_and_verifier;
+       py_error_and_verifier = PyString_FromStringAndSize((char *)(object->error_and_verifier).data, (object->error_and_verifier).length);
+       return py_error_and_verifier;
+}
+
+static int py_dcerpc_fault_set_error_and_verifier(PyObject *py_obj, PyObject *value, void *closure)
+{
+       struct dcerpc_fault *object = (struct dcerpc_fault *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->error_and_verifier");
+               return -1;
+       }
+       object->error_and_verifier = data_blob_talloc(pytalloc_get_mem_ctx(py_obj), PyString_AS_STRING(value), PyString_GET_SIZE(value));
        return 0;
 }
 
 static PyGetSetDef py_dcerpc_fault_getsetters[] = {
-       { discard_const_p(char, "alloc_hint"), py_dcerpc_fault_get_alloc_hint, py_dcerpc_fault_set_alloc_hint },
-       { discard_const_p(char, "context_id"), py_dcerpc_fault_get_context_id, py_dcerpc_fault_set_context_id },
-       { discard_const_p(char, "cancel_count"), py_dcerpc_fault_get_cancel_count, py_dcerpc_fault_set_cancel_count },
-       { discard_const_p(char, "status"), py_dcerpc_fault_get_status, py_dcerpc_fault_set_status },
-       { discard_const_p(char, "_pad"), py_dcerpc_fault_get__pad, py_dcerpc_fault_set__pad },
-       { NULL }
+       {
+               .name = discard_const_p(char, "alloc_hint"),
+               .get = py_dcerpc_fault_get_alloc_hint,
+               .set = py_dcerpc_fault_set_alloc_hint,
+               .doc = discard_const_p(char, "PIDL-generated element alloc_hint")
+       },
+       {
+               .name = discard_const_p(char, "context_id"),
+               .get = py_dcerpc_fault_get_context_id,
+               .set = py_dcerpc_fault_set_context_id,
+               .doc = discard_const_p(char, "PIDL-generated element context_id")
+       },
+       {
+               .name = discard_const_p(char, "cancel_count"),
+               .get = py_dcerpc_fault_get_cancel_count,
+               .set = py_dcerpc_fault_set_cancel_count,
+               .doc = discard_const_p(char, "PIDL-generated element cancel_count")
+       },
+       {
+               .name = discard_const_p(char, "flags"),
+               .get = py_dcerpc_fault_get_flags,
+               .set = py_dcerpc_fault_set_flags,
+               .doc = discard_const_p(char, "PIDL-generated element flags")
+       },
+       {
+               .name = discard_const_p(char, "status"),
+               .get = py_dcerpc_fault_get_status,
+               .set = py_dcerpc_fault_set_status,
+               .doc = discard_const_p(char, "PIDL-generated element status")
+       },
+       {
+               .name = discard_const_p(char, "_pad"),
+               .get = py_dcerpc_fault_get__pad,
+               .set = py_dcerpc_fault_set__pad,
+               .doc = discard_const_p(char, "PIDL-generated element _pad")
+       },
+       {
+               .name = discard_const_p(char, "error_and_verifier"),
+               .get = py_dcerpc_fault_get_error_and_verifier,
+               .set = py_dcerpc_fault_set_error_and_verifier,
+               .doc = discard_const_p(char, "PIDL-generated element error_and_verifier")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_fault_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -2109,7 +2822,6 @@ static PyTypeObject dcerpc_fault_Type = {
        .tp_getset = py_dcerpc_fault_getsetters,
        .tp_methods = NULL,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_fault_new,
 };
 
@@ -2125,6 +2837,10 @@ static PyObject *py_dcerpc_auth_get_auth_type(PyObject *obj, void *closure)
 static int py_dcerpc_auth_set_auth_type(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_auth *object = (struct dcerpc_auth *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->auth_type");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->auth_type));
                if (PyLong_Check(value)) {
@@ -2168,6 +2884,10 @@ static PyObject *py_dcerpc_auth_get_auth_level(PyObject *obj, void *closure)
 static int py_dcerpc_auth_set_auth_level(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_auth *object = (struct dcerpc_auth *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->auth_level");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->auth_level));
                if (PyLong_Check(value)) {
@@ -2211,6 +2931,10 @@ static PyObject *py_dcerpc_auth_get_auth_pad_length(PyObject *obj, void *closure
 static int py_dcerpc_auth_set_auth_pad_length(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_auth *object = (struct dcerpc_auth *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->auth_pad_length");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->auth_pad_length));
                if (PyLong_Check(value)) {
@@ -2254,6 +2978,10 @@ static PyObject *py_dcerpc_auth_get_auth_reserved(PyObject *obj, void *closure)
 static int py_dcerpc_auth_set_auth_reserved(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_auth *object = (struct dcerpc_auth *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->auth_reserved");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->auth_reserved));
                if (PyLong_Check(value)) {
@@ -2297,6 +3025,10 @@ static PyObject *py_dcerpc_auth_get_auth_context_id(PyObject *obj, void *closure
 static int py_dcerpc_auth_set_auth_context_id(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_auth *object = (struct dcerpc_auth *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->auth_context_id");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->auth_context_id));
                if (PyLong_Check(value)) {
@@ -2340,18 +3072,52 @@ static PyObject *py_dcerpc_auth_get_credentials(PyObject *obj, void *closure)
 static int py_dcerpc_auth_set_credentials(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_auth *object = (struct dcerpc_auth *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->credentials");
+               return -1;
+       }
        object->credentials = data_blob_talloc(pytalloc_get_mem_ctx(py_obj), PyString_AS_STRING(value), PyString_GET_SIZE(value));
        return 0;
 }
 
 static PyGetSetDef py_dcerpc_auth_getsetters[] = {
-       { discard_const_p(char, "auth_type"), py_dcerpc_auth_get_auth_type, py_dcerpc_auth_set_auth_type },
-       { discard_const_p(char, "auth_level"), py_dcerpc_auth_get_auth_level, py_dcerpc_auth_set_auth_level },
-       { discard_const_p(char, "auth_pad_length"), py_dcerpc_auth_get_auth_pad_length, py_dcerpc_auth_set_auth_pad_length },
-       { discard_const_p(char, "auth_reserved"), py_dcerpc_auth_get_auth_reserved, py_dcerpc_auth_set_auth_reserved },
-       { discard_const_p(char, "auth_context_id"), py_dcerpc_auth_get_auth_context_id, py_dcerpc_auth_set_auth_context_id },
-       { discard_const_p(char, "credentials"), py_dcerpc_auth_get_credentials, py_dcerpc_auth_set_credentials },
-       { NULL }
+       {
+               .name = discard_const_p(char, "auth_type"),
+               .get = py_dcerpc_auth_get_auth_type,
+               .set = py_dcerpc_auth_set_auth_type,
+               .doc = discard_const_p(char, "PIDL-generated element auth_type")
+       },
+       {
+               .name = discard_const_p(char, "auth_level"),
+               .get = py_dcerpc_auth_get_auth_level,
+               .set = py_dcerpc_auth_set_auth_level,
+               .doc = discard_const_p(char, "PIDL-generated element auth_level")
+       },
+       {
+               .name = discard_const_p(char, "auth_pad_length"),
+               .get = py_dcerpc_auth_get_auth_pad_length,
+               .set = py_dcerpc_auth_set_auth_pad_length,
+               .doc = discard_const_p(char, "PIDL-generated element auth_pad_length")
+       },
+       {
+               .name = discard_const_p(char, "auth_reserved"),
+               .get = py_dcerpc_auth_get_auth_reserved,
+               .set = py_dcerpc_auth_set_auth_reserved,
+               .doc = discard_const_p(char, "PIDL-generated element auth_reserved")
+       },
+       {
+               .name = discard_const_p(char, "auth_context_id"),
+               .get = py_dcerpc_auth_get_auth_context_id,
+               .set = py_dcerpc_auth_set_auth_context_id,
+               .doc = discard_const_p(char, "PIDL-generated element auth_context_id")
+       },
+       {
+               .name = discard_const_p(char, "credentials"),
+               .get = py_dcerpc_auth_get_credentials,
+               .set = py_dcerpc_auth_set_credentials,
+               .doc = discard_const_p(char, "PIDL-generated element credentials")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_auth_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -2362,22 +3128,31 @@ static PyObject *py_dcerpc_auth_new(PyTypeObject *type, PyObject *args, PyObject
 static PyObject *py_dcerpc_auth_ndr_pack(PyObject *py_obj)
 {
        struct dcerpc_auth *object = (struct dcerpc_auth *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_dcerpc_auth);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_auth);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_dcerpc_auth_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct dcerpc_auth *object = (struct dcerpc_auth *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -2435,7 +3210,6 @@ static PyTypeObject dcerpc_auth_Type = {
        .tp_getset = py_dcerpc_auth_getsetters,
        .tp_methods = py_dcerpc_auth_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_auth_new,
 };
 
@@ -2451,6 +3225,10 @@ static PyObject *py_dcerpc_auth3_get__pad(PyObject *obj, void *closure)
 static int py_dcerpc_auth3_set__pad(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_auth3 *object = (struct dcerpc_auth3 *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->_pad");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->_pad));
                if (PyLong_Check(value)) {
@@ -2494,14 +3272,28 @@ static PyObject *py_dcerpc_auth3_get_auth_info(PyObject *obj, void *closure)
 static int py_dcerpc_auth3_set_auth_info(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_auth3 *object = (struct dcerpc_auth3 *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->auth_info");
+               return -1;
+       }
        object->auth_info = data_blob_talloc(pytalloc_get_mem_ctx(py_obj), PyString_AS_STRING(value), PyString_GET_SIZE(value));
        return 0;
 }
 
 static PyGetSetDef py_dcerpc_auth3_getsetters[] = {
-       { discard_const_p(char, "_pad"), py_dcerpc_auth3_get__pad, py_dcerpc_auth3_set__pad },
-       { discard_const_p(char, "auth_info"), py_dcerpc_auth3_get_auth_info, py_dcerpc_auth3_set_auth_info },
-       { NULL }
+       {
+               .name = discard_const_p(char, "_pad"),
+               .get = py_dcerpc_auth3_get__pad,
+               .set = py_dcerpc_auth3_set__pad,
+               .doc = discard_const_p(char, "PIDL-generated element _pad")
+       },
+       {
+               .name = discard_const_p(char, "auth_info"),
+               .get = py_dcerpc_auth3_get_auth_info,
+               .set = py_dcerpc_auth3_set_auth_info,
+               .doc = discard_const_p(char, "PIDL-generated element auth_info")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_auth3_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -2512,22 +3304,31 @@ static PyObject *py_dcerpc_auth3_new(PyTypeObject *type, PyObject *args, PyObjec
 static PyObject *py_dcerpc_auth3_ndr_pack(PyObject *py_obj)
 {
        struct dcerpc_auth3 *object = (struct dcerpc_auth3 *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_dcerpc_auth3);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_auth3);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_dcerpc_auth3_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct dcerpc_auth3 *object = (struct dcerpc_auth3 *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -2585,7 +3386,6 @@ static PyTypeObject dcerpc_auth3_Type = {
        .tp_getset = py_dcerpc_auth3_getsetters,
        .tp_methods = py_dcerpc_auth3_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_auth3_new,
 };
 
@@ -2601,6 +3401,10 @@ static PyObject *py_dcerpc_orphaned_get__pad(PyObject *obj, void *closure)
 static int py_dcerpc_orphaned_set__pad(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_orphaned *object = (struct dcerpc_orphaned *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->_pad");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->_pad));
                if (PyLong_Check(value)) {
@@ -2644,14 +3448,28 @@ static PyObject *py_dcerpc_orphaned_get_auth_info(PyObject *obj, void *closure)
 static int py_dcerpc_orphaned_set_auth_info(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_orphaned *object = (struct dcerpc_orphaned *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->auth_info");
+               return -1;
+       }
        object->auth_info = data_blob_talloc(pytalloc_get_mem_ctx(py_obj), PyString_AS_STRING(value), PyString_GET_SIZE(value));
        return 0;
 }
 
 static PyGetSetDef py_dcerpc_orphaned_getsetters[] = {
-       { discard_const_p(char, "_pad"), py_dcerpc_orphaned_get__pad, py_dcerpc_orphaned_set__pad },
-       { discard_const_p(char, "auth_info"), py_dcerpc_orphaned_get_auth_info, py_dcerpc_orphaned_set_auth_info },
-       { NULL }
+       {
+               .name = discard_const_p(char, "_pad"),
+               .get = py_dcerpc_orphaned_get__pad,
+               .set = py_dcerpc_orphaned_set__pad,
+               .doc = discard_const_p(char, "PIDL-generated element _pad")
+       },
+       {
+               .name = discard_const_p(char, "auth_info"),
+               .get = py_dcerpc_orphaned_get_auth_info,
+               .set = py_dcerpc_orphaned_set_auth_info,
+               .doc = discard_const_p(char, "PIDL-generated element auth_info")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_orphaned_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -2662,22 +3480,31 @@ static PyObject *py_dcerpc_orphaned_new(PyTypeObject *type, PyObject *args, PyOb
 static PyObject *py_dcerpc_orphaned_ndr_pack(PyObject *py_obj)
 {
        struct dcerpc_orphaned *object = (struct dcerpc_orphaned *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_dcerpc_orphaned);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_orphaned);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_dcerpc_orphaned_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct dcerpc_orphaned *object = (struct dcerpc_orphaned *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -2735,7 +3562,6 @@ static PyTypeObject dcerpc_orphaned_Type = {
        .tp_getset = py_dcerpc_orphaned_getsetters,
        .tp_methods = py_dcerpc_orphaned_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_orphaned_new,
 };
 
@@ -2751,6 +3577,10 @@ static PyObject *py_dcerpc_co_cancel_get__pad(PyObject *obj, void *closure)
 static int py_dcerpc_co_cancel_set__pad(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_co_cancel *object = (struct dcerpc_co_cancel *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->_pad");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->_pad));
                if (PyLong_Check(value)) {
@@ -2794,14 +3624,28 @@ static PyObject *py_dcerpc_co_cancel_get_auth_info(PyObject *obj, void *closure)
 static int py_dcerpc_co_cancel_set_auth_info(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_co_cancel *object = (struct dcerpc_co_cancel *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->auth_info");
+               return -1;
+       }
        object->auth_info = data_blob_talloc(pytalloc_get_mem_ctx(py_obj), PyString_AS_STRING(value), PyString_GET_SIZE(value));
        return 0;
 }
 
 static PyGetSetDef py_dcerpc_co_cancel_getsetters[] = {
-       { discard_const_p(char, "_pad"), py_dcerpc_co_cancel_get__pad, py_dcerpc_co_cancel_set__pad },
-       { discard_const_p(char, "auth_info"), py_dcerpc_co_cancel_get_auth_info, py_dcerpc_co_cancel_set_auth_info },
-       { NULL }
+       {
+               .name = discard_const_p(char, "_pad"),
+               .get = py_dcerpc_co_cancel_get__pad,
+               .set = py_dcerpc_co_cancel_set__pad,
+               .doc = discard_const_p(char, "PIDL-generated element _pad")
+       },
+       {
+               .name = discard_const_p(char, "auth_info"),
+               .get = py_dcerpc_co_cancel_get_auth_info,
+               .set = py_dcerpc_co_cancel_set_auth_info,
+               .doc = discard_const_p(char, "PIDL-generated element auth_info")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_co_cancel_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -2812,22 +3656,31 @@ static PyObject *py_dcerpc_co_cancel_new(PyTypeObject *type, PyObject *args, PyO
 static PyObject *py_dcerpc_co_cancel_ndr_pack(PyObject *py_obj)
 {
        struct dcerpc_co_cancel *object = (struct dcerpc_co_cancel *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_dcerpc_co_cancel);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_co_cancel);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_dcerpc_co_cancel_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct dcerpc_co_cancel *object = (struct dcerpc_co_cancel *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -2885,7 +3738,6 @@ static PyTypeObject dcerpc_co_cancel_Type = {
        .tp_getset = py_dcerpc_co_cancel_getsetters,
        .tp_methods = py_dcerpc_co_cancel_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_co_cancel_new,
 };
 
@@ -2901,6 +3753,10 @@ static PyObject *py_dcerpc_cl_cancel_get_version(PyObject *obj, void *closure)
 static int py_dcerpc_cl_cancel_set_version(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_cl_cancel *object = (struct dcerpc_cl_cancel *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->version");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->version));
                if (PyLong_Check(value)) {
@@ -2944,6 +3800,10 @@ static PyObject *py_dcerpc_cl_cancel_get_id(PyObject *obj, void *closure)
 static int py_dcerpc_cl_cancel_set_id(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_cl_cancel *object = (struct dcerpc_cl_cancel *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->id");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->id));
                if (PyLong_Check(value)) {
@@ -2977,9 +3837,19 @@ static int py_dcerpc_cl_cancel_set_id(PyObject *py_obj, PyObject *value, void *c
 }
 
 static PyGetSetDef py_dcerpc_cl_cancel_getsetters[] = {
-       { discard_const_p(char, "version"), py_dcerpc_cl_cancel_get_version, py_dcerpc_cl_cancel_set_version },
-       { discard_const_p(char, "id"), py_dcerpc_cl_cancel_get_id, py_dcerpc_cl_cancel_set_id },
-       { NULL }
+       {
+               .name = discard_const_p(char, "version"),
+               .get = py_dcerpc_cl_cancel_get_version,
+               .set = py_dcerpc_cl_cancel_set_version,
+               .doc = discard_const_p(char, "PIDL-generated element version")
+       },
+       {
+               .name = discard_const_p(char, "id"),
+               .get = py_dcerpc_cl_cancel_get_id,
+               .set = py_dcerpc_cl_cancel_set_id,
+               .doc = discard_const_p(char, "PIDL-generated element id")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_cl_cancel_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -2990,22 +3860,31 @@ static PyObject *py_dcerpc_cl_cancel_new(PyTypeObject *type, PyObject *args, PyO
 static PyObject *py_dcerpc_cl_cancel_ndr_pack(PyObject *py_obj)
 {
        struct dcerpc_cl_cancel *object = (struct dcerpc_cl_cancel *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_dcerpc_cl_cancel);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_cl_cancel);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_dcerpc_cl_cancel_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct dcerpc_cl_cancel *object = (struct dcerpc_cl_cancel *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -3063,7 +3942,6 @@ static PyTypeObject dcerpc_cl_cancel_Type = {
        .tp_getset = py_dcerpc_cl_cancel_getsetters,
        .tp_methods = py_dcerpc_cl_cancel_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_cl_cancel_new,
 };
 
@@ -3079,6 +3957,10 @@ static PyObject *py_dcerpc_cancel_ack_get_version(PyObject *obj, void *closure)
 static int py_dcerpc_cancel_ack_set_version(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_cancel_ack *object = (struct dcerpc_cancel_ack *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->version");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->version));
                if (PyLong_Check(value)) {
@@ -3122,6 +4004,10 @@ static PyObject *py_dcerpc_cancel_ack_get_id(PyObject *obj, void *closure)
 static int py_dcerpc_cancel_ack_set_id(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_cancel_ack *object = (struct dcerpc_cancel_ack *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->id");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->id));
                if (PyLong_Check(value)) {
@@ -3165,6 +4051,10 @@ static PyObject *py_dcerpc_cancel_ack_get_server_is_accepting(PyObject *obj, voi
 static int py_dcerpc_cancel_ack_set_server_is_accepting(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_cancel_ack *object = (struct dcerpc_cancel_ack *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->server_is_accepting");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->server_is_accepting));
                if (PyLong_Check(value)) {
@@ -3198,10 +4088,25 @@ static int py_dcerpc_cancel_ack_set_server_is_accepting(PyObject *py_obj, PyObje
 }
 
 static PyGetSetDef py_dcerpc_cancel_ack_getsetters[] = {
-       { discard_const_p(char, "version"), py_dcerpc_cancel_ack_get_version, py_dcerpc_cancel_ack_set_version },
-       { discard_const_p(char, "id"), py_dcerpc_cancel_ack_get_id, py_dcerpc_cancel_ack_set_id },
-       { discard_const_p(char, "server_is_accepting"), py_dcerpc_cancel_ack_get_server_is_accepting, py_dcerpc_cancel_ack_set_server_is_accepting },
-       { NULL }
+       {
+               .name = discard_const_p(char, "version"),
+               .get = py_dcerpc_cancel_ack_get_version,
+               .set = py_dcerpc_cancel_ack_set_version,
+               .doc = discard_const_p(char, "PIDL-generated element version")
+       },
+       {
+               .name = discard_const_p(char, "id"),
+               .get = py_dcerpc_cancel_ack_get_id,
+               .set = py_dcerpc_cancel_ack_set_id,
+               .doc = discard_const_p(char, "PIDL-generated element id")
+       },
+       {
+               .name = discard_const_p(char, "server_is_accepting"),
+               .get = py_dcerpc_cancel_ack_get_server_is_accepting,
+               .set = py_dcerpc_cancel_ack_set_server_is_accepting,
+               .doc = discard_const_p(char, "PIDL-generated element server_is_accepting")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_cancel_ack_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -3212,22 +4117,31 @@ static PyObject *py_dcerpc_cancel_ack_new(PyTypeObject *type, PyObject *args, Py
 static PyObject *py_dcerpc_cancel_ack_ndr_pack(PyObject *py_obj)
 {
        struct dcerpc_cancel_ack *object = (struct dcerpc_cancel_ack *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_dcerpc_cancel_ack);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_cancel_ack);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_dcerpc_cancel_ack_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct dcerpc_cancel_ack *object = (struct dcerpc_cancel_ack *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -3285,7 +4199,6 @@ static PyTypeObject dcerpc_cancel_ack_Type = {
        .tp_getset = py_dcerpc_cancel_ack_getsetters,
        .tp_methods = py_dcerpc_cancel_ack_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_cancel_ack_new,
 };
 
@@ -3301,6 +4214,10 @@ static PyObject *py_dcerpc_fack_get_version(PyObject *obj, void *closure)
 static int py_dcerpc_fack_set_version(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_fack *object = (struct dcerpc_fack *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->version");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->version));
                if (PyLong_Check(value)) {
@@ -3344,6 +4261,10 @@ static PyObject *py_dcerpc_fack_get__pad1(PyObject *obj, void *closure)
 static int py_dcerpc_fack_set__pad1(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_fack *object = (struct dcerpc_fack *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->_pad1");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->_pad1));
                if (PyLong_Check(value)) {
@@ -3387,6 +4308,10 @@ static PyObject *py_dcerpc_fack_get_window_size(PyObject *obj, void *closure)
 static int py_dcerpc_fack_set_window_size(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_fack *object = (struct dcerpc_fack *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->window_size");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->window_size));
                if (PyLong_Check(value)) {
@@ -3430,6 +4355,10 @@ static PyObject *py_dcerpc_fack_get_max_tdsu(PyObject *obj, void *closure)
 static int py_dcerpc_fack_set_max_tdsu(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_fack *object = (struct dcerpc_fack *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->max_tdsu");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->max_tdsu));
                if (PyLong_Check(value)) {
@@ -3473,6 +4402,10 @@ static PyObject *py_dcerpc_fack_get_max_frag_size(PyObject *obj, void *closure)
 static int py_dcerpc_fack_set_max_frag_size(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_fack *object = (struct dcerpc_fack *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->max_frag_size");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->max_frag_size));
                if (PyLong_Check(value)) {
@@ -3516,6 +4449,10 @@ static PyObject *py_dcerpc_fack_get_serial_no(PyObject *obj, void *closure)
 static int py_dcerpc_fack_set_serial_no(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_fack *object = (struct dcerpc_fack *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->serial_no");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->serial_no));
                if (PyLong_Check(value)) {
@@ -3559,6 +4496,10 @@ static PyObject *py_dcerpc_fack_get_selack_size(PyObject *obj, void *closure)
 static int py_dcerpc_fack_set_selack_size(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_fack *object = (struct dcerpc_fack *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->selack_size");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->selack_size));
                if (PyLong_Check(value)) {
@@ -3613,6 +4554,10 @@ static PyObject *py_dcerpc_fack_get_selack(PyObject *obj, void *closure)
 static int py_dcerpc_fack_set_selack(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_fack *object = (struct dcerpc_fack *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->selack");
+               return -1;
+       }
        PY_CHECK_TYPE(&PyList_Type, value, return -1;);
        {
                int selack_cntr_0;
@@ -3620,6 +4565,10 @@ static int py_dcerpc_fack_set_selack(PyObject *py_obj, PyObject *value, void *cl
                if (!object->selack) { return -1;; }
                talloc_set_name_const(object->selack, "ARRAY: object->selack");
                for (selack_cntr_0 = 0; selack_cntr_0 < PyList_GET_SIZE(value); selack_cntr_0++) {
+                       if (PyList_GET_ITEM(value, selack_cntr_0) == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->selack[selack_cntr_0]");
+                               return -1;
+                       }
                        {
                                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->selack[selack_cntr_0]));
                                if (PyLong_Check(PyList_GET_ITEM(value, selack_cntr_0))) {
@@ -3655,15 +4604,55 @@ static int py_dcerpc_fack_set_selack(PyObject *py_obj, PyObject *value, void *cl
 }
 
 static PyGetSetDef py_dcerpc_fack_getsetters[] = {
-       { discard_const_p(char, "version"), py_dcerpc_fack_get_version, py_dcerpc_fack_set_version },
-       { discard_const_p(char, "_pad1"), py_dcerpc_fack_get__pad1, py_dcerpc_fack_set__pad1 },
-       { discard_const_p(char, "window_size"), py_dcerpc_fack_get_window_size, py_dcerpc_fack_set_window_size },
-       { discard_const_p(char, "max_tdsu"), py_dcerpc_fack_get_max_tdsu, py_dcerpc_fack_set_max_tdsu },
-       { discard_const_p(char, "max_frag_size"), py_dcerpc_fack_get_max_frag_size, py_dcerpc_fack_set_max_frag_size },
-       { discard_const_p(char, "serial_no"), py_dcerpc_fack_get_serial_no, py_dcerpc_fack_set_serial_no },
-       { discard_const_p(char, "selack_size"), py_dcerpc_fack_get_selack_size, py_dcerpc_fack_set_selack_size },
-       { discard_const_p(char, "selack"), py_dcerpc_fack_get_selack, py_dcerpc_fack_set_selack },
-       { NULL }
+       {
+               .name = discard_const_p(char, "version"),
+               .get = py_dcerpc_fack_get_version,
+               .set = py_dcerpc_fack_set_version,
+               .doc = discard_const_p(char, "PIDL-generated element version")
+       },
+       {
+               .name = discard_const_p(char, "_pad1"),
+               .get = py_dcerpc_fack_get__pad1,
+               .set = py_dcerpc_fack_set__pad1,
+               .doc = discard_const_p(char, "PIDL-generated element _pad1")
+       },
+       {
+               .name = discard_const_p(char, "window_size"),
+               .get = py_dcerpc_fack_get_window_size,
+               .set = py_dcerpc_fack_set_window_size,
+               .doc = discard_const_p(char, "PIDL-generated element window_size")
+       },
+       {
+               .name = discard_const_p(char, "max_tdsu"),
+               .get = py_dcerpc_fack_get_max_tdsu,
+               .set = py_dcerpc_fack_set_max_tdsu,
+               .doc = discard_const_p(char, "PIDL-generated element max_tdsu")
+       },
+       {
+               .name = discard_const_p(char, "max_frag_size"),
+               .get = py_dcerpc_fack_get_max_frag_size,
+               .set = py_dcerpc_fack_set_max_frag_size,
+               .doc = discard_const_p(char, "PIDL-generated element max_frag_size")
+       },
+       {
+               .name = discard_const_p(char, "serial_no"),
+               .get = py_dcerpc_fack_get_serial_no,
+               .set = py_dcerpc_fack_set_serial_no,
+               .doc = discard_const_p(char, "PIDL-generated element serial_no")
+       },
+       {
+               .name = discard_const_p(char, "selack_size"),
+               .get = py_dcerpc_fack_get_selack_size,
+               .set = py_dcerpc_fack_set_selack_size,
+               .doc = discard_const_p(char, "PIDL-generated element selack_size")
+       },
+       {
+               .name = discard_const_p(char, "selack"),
+               .get = py_dcerpc_fack_get_selack,
+               .set = py_dcerpc_fack_set_selack,
+               .doc = discard_const_p(char, "PIDL-generated element selack")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_fack_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -3674,22 +4663,31 @@ static PyObject *py_dcerpc_fack_new(PyTypeObject *type, PyObject *args, PyObject
 static PyObject *py_dcerpc_fack_ndr_pack(PyObject *py_obj)
 {
        struct dcerpc_fack *object = (struct dcerpc_fack *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_dcerpc_fack);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_fack);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_dcerpc_fack_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct dcerpc_fack *object = (struct dcerpc_fack *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -3747,7 +4745,6 @@ static PyTypeObject dcerpc_fack_Type = {
        .tp_getset = py_dcerpc_fack_getsetters,
        .tp_methods = py_dcerpc_fack_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_fack_new,
 };
 
@@ -3760,22 +4757,31 @@ static PyObject *py_dcerpc_ack_new(PyTypeObject *type, PyObject *args, PyObject
 static PyObject *py_dcerpc_ack_ndr_pack(PyObject *py_obj)
 {
        struct dcerpc_ack *object = (struct dcerpc_ack *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_dcerpc_ack);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_ack);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_dcerpc_ack_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct dcerpc_ack *object = (struct dcerpc_ack *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -3833,7 +4839,6 @@ static PyTypeObject dcerpc_ack_Type = {
        .tp_getset = NULL,
        .tp_methods = py_dcerpc_ack_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_ack_new,
 };
 
@@ -3846,22 +4851,31 @@ static PyObject *py_dcerpc_ping_new(PyTypeObject *type, PyObject *args, PyObject
 static PyObject *py_dcerpc_ping_ndr_pack(PyObject *py_obj)
 {
        struct dcerpc_ping *object = (struct dcerpc_ping *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_dcerpc_ping);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_ping);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_dcerpc_ping_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct dcerpc_ping *object = (struct dcerpc_ping *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -3919,7 +4933,6 @@ static PyTypeObject dcerpc_ping_Type = {
        .tp_getset = NULL,
        .tp_methods = py_dcerpc_ping_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_ping_new,
 };
 
@@ -3932,22 +4945,31 @@ static PyObject *py_dcerpc_shutdown_new(PyTypeObject *type, PyObject *args, PyOb
 static PyObject *py_dcerpc_shutdown_ndr_pack(PyObject *py_obj)
 {
        struct dcerpc_shutdown *object = (struct dcerpc_shutdown *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_dcerpc_shutdown);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_shutdown);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_dcerpc_shutdown_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct dcerpc_shutdown *object = (struct dcerpc_shutdown *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -4005,7 +5027,6 @@ static PyTypeObject dcerpc_shutdown_Type = {
        .tp_getset = NULL,
        .tp_methods = py_dcerpc_shutdown_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_shutdown_new,
 };
 
@@ -4018,22 +5039,31 @@ static PyObject *py_dcerpc_working_new(PyTypeObject *type, PyObject *args, PyObj
 static PyObject *py_dcerpc_working_ndr_pack(PyObject *py_obj)
 {
        struct dcerpc_working *object = (struct dcerpc_working *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_dcerpc_working);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_working);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_dcerpc_working_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct dcerpc_working *object = (struct dcerpc_working *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -4091,7 +5121,6 @@ static PyTypeObject dcerpc_working_Type = {
        .tp_getset = NULL,
        .tp_methods = py_dcerpc_working_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_working_new,
 };
 
@@ -4107,6 +5136,10 @@ static PyObject *py_RTSCookie_get_Cookie(PyObject *obj, void *closure)
 static int py_RTSCookie_set_Cookie(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct RTSCookie *object = (struct RTSCookie *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->Cookie");
+               return -1;
+       }
        PY_CHECK_TYPE(GUID_Type, value, return -1;);
        if (talloc_reference(pytalloc_get_mem_ctx(py_obj), pytalloc_get_mem_ctx(value)) == NULL) {
                PyErr_NoMemory();
@@ -4117,8 +5150,13 @@ static int py_RTSCookie_set_Cookie(PyObject *py_obj, PyObject *value, void *clos
 }
 
 static PyGetSetDef py_RTSCookie_getsetters[] = {
-       { discard_const_p(char, "Cookie"), py_RTSCookie_get_Cookie, py_RTSCookie_set_Cookie },
-       { NULL }
+       {
+               .name = discard_const_p(char, "Cookie"),
+               .get = py_RTSCookie_get_Cookie,
+               .set = py_RTSCookie_set_Cookie,
+               .doc = discard_const_p(char, "PIDL-generated element Cookie")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_RTSCookie_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -4129,22 +5167,31 @@ static PyObject *py_RTSCookie_new(PyTypeObject *type, PyObject *args, PyObject *
 static PyObject *py_RTSCookie_ndr_pack(PyObject *py_obj)
 {
        struct RTSCookie *object = (struct RTSCookie *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_RTSCookie);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_RTSCookie);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_RTSCookie_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct RTSCookie *object = (struct RTSCookie *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -4202,7 +5249,6 @@ static PyTypeObject RTSCookie_Type = {
        .tp_getset = py_RTSCookie_getsetters,
        .tp_methods = py_RTSCookie_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_RTSCookie_new,
 };
 
@@ -4229,11 +5275,71 @@ union ClientAddressType *py_export_ClientAddressType(TALLOC_CTX *mem_ctx, int le
        union ClientAddressType *ret = talloc_zero(mem_ctx, union ClientAddressType);
        switch (level) {
                case RTS_IPV4:
-                       ret->ClientAddressIPV4 = PyString_AS_STRING(in);
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->ClientAddressIPV4");
+                               talloc_free(ret); return NULL;
+                       }
+                       {
+                               const char *test_str;
+                               const char *talloc_str;
+                               PyObject *unicode = NULL;
+                               if (PyUnicode_Check(in)) {
+                                       unicode = PyUnicode_AsEncodedString(in, "utf-8", "ignore");
+                                       if (unicode == NULL) {
+                                               PyErr_NoMemory();
+                                               talloc_free(ret); return NULL;
+                                       }
+                                       test_str = PyString_AS_STRING(unicode);
+                               } else if (PyString_Check(in)) {
+                                       test_str = PyString_AS_STRING(in);
+                               } else {
+                                       PyErr_Format(PyExc_TypeError, "Expected string or unicode object, got %s", Py_TYPE(in)->tp_name);
+                                       talloc_free(ret); return NULL;
+                               }
+                               talloc_str = talloc_strdup(mem_ctx, test_str);
+                               if (unicode != NULL) {
+                                       Py_DECREF(unicode);
+                               }
+                               if (talloc_str == NULL) {
+                                       PyErr_NoMemory();
+                                       talloc_free(ret); return NULL;
+                               }
+                               ret->ClientAddressIPV4 = talloc_str;
+                       }
                        break;
 
                case RTS_IPV6:
-                       ret->ClientAddressIPV6 = PyString_AsString(in);
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->ClientAddressIPV6");
+                               talloc_free(ret); return NULL;
+                       }
+                       {
+                               const char *test_str;
+                               const char *talloc_str;
+                               PyObject *unicode = NULL;
+                               if (PyUnicode_Check(in)) {
+                                       unicode = PyUnicode_AsEncodedString(in, "utf-8", "ignore");
+                                       if (unicode == NULL) {
+                                               PyErr_NoMemory();
+                                               talloc_free(ret); return NULL;
+                                       }
+                                       test_str = PyString_AS_STRING(unicode);
+                               } else if (PyString_Check(in)) {
+                                       test_str = PyString_AS_STRING(in);
+                               } else {
+                                       PyErr_Format(PyExc_TypeError, "Expected string or unicode object, got %s", Py_TYPE(in)->tp_name);
+                                       talloc_free(ret); return NULL;
+                               }
+                               talloc_str = talloc_strdup(mem_ctx, test_str);
+                               if (unicode != NULL) {
+                                       Py_DECREF(unicode);
+                               }
+                               if (talloc_str == NULL) {
+                                       PyErr_NoMemory();
+                                       talloc_free(ret); return NULL;
+                               }
+                               ret->ClientAddressIPV6 = talloc_str;
+                       }
                        break;
 
                default:
@@ -4257,6 +5363,10 @@ static PyObject *py_ClientAddress_get_AddressType(PyObject *obj, void *closure)
 static int py_ClientAddress_set_AddressType(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct ClientAddress *object = (struct ClientAddress *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->AddressType");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->AddressType));
                if (PyLong_Check(value)) {
@@ -4303,6 +5413,10 @@ static PyObject *py_ClientAddress_get_ClientAddress(PyObject *obj, void *closure
 static int py_ClientAddress_set_ClientAddress(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct ClientAddress *object = (struct ClientAddress *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->ClientAddress");
+               return -1;
+       }
        {
                union ClientAddressType *ClientAddress_switch_0;
                ClientAddress_switch_0 = py_export_ClientAddressType(pytalloc_get_mem_ctx(py_obj), object->AddressType, value);
@@ -4336,6 +5450,10 @@ static PyObject *py_ClientAddress_get_Padding(PyObject *obj, void *closure)
 static int py_ClientAddress_set_Padding(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct ClientAddress *object = (struct ClientAddress *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->Padding");
+               return -1;
+       }
        PY_CHECK_TYPE(&PyList_Type, value, return -1;);
        {
                int Padding_cntr_0;
@@ -4344,6 +5462,10 @@ static int py_ClientAddress_set_Padding(PyObject *py_obj, PyObject *value, void
                        return -1;
                }
                for (Padding_cntr_0 = 0; Padding_cntr_0 < PyList_GET_SIZE(value); Padding_cntr_0++) {
+                       if (PyList_GET_ITEM(value, Padding_cntr_0) == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->Padding[Padding_cntr_0]");
+                               return -1;
+                       }
                        {
                                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->Padding[Padding_cntr_0]));
                                if (PyLong_Check(PyList_GET_ITEM(value, Padding_cntr_0))) {
@@ -4379,10 +5501,25 @@ static int py_ClientAddress_set_Padding(PyObject *py_obj, PyObject *value, void
 }
 
 static PyGetSetDef py_ClientAddress_getsetters[] = {
-       { discard_const_p(char, "AddressType"), py_ClientAddress_get_AddressType, py_ClientAddress_set_AddressType },
-       { discard_const_p(char, "ClientAddress"), py_ClientAddress_get_ClientAddress, py_ClientAddress_set_ClientAddress },
-       { discard_const_p(char, "Padding"), py_ClientAddress_get_Padding, py_ClientAddress_set_Padding },
-       { NULL }
+       {
+               .name = discard_const_p(char, "AddressType"),
+               .get = py_ClientAddress_get_AddressType,
+               .set = py_ClientAddress_set_AddressType,
+               .doc = discard_const_p(char, "PIDL-generated element AddressType")
+       },
+       {
+               .name = discard_const_p(char, "ClientAddress"),
+               .get = py_ClientAddress_get_ClientAddress,
+               .set = py_ClientAddress_set_ClientAddress,
+               .doc = discard_const_p(char, "PIDL-generated element ClientAddress")
+       },
+       {
+               .name = discard_const_p(char, "Padding"),
+               .get = py_ClientAddress_get_Padding,
+               .set = py_ClientAddress_set_Padding,
+               .doc = discard_const_p(char, "PIDL-generated element Padding")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_ClientAddress_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -4393,22 +5530,31 @@ static PyObject *py_ClientAddress_new(PyTypeObject *type, PyObject *args, PyObje
 static PyObject *py_ClientAddress_ndr_pack(PyObject *py_obj)
 {
        struct ClientAddress *object = (struct ClientAddress *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_ClientAddress);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_ClientAddress);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_ClientAddress_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct ClientAddress *object = (struct ClientAddress *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -4466,7 +5612,6 @@ static PyTypeObject ClientAddress_Type = {
        .tp_getset = py_ClientAddress_getsetters,
        .tp_methods = py_ClientAddress_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_ClientAddress_new,
 };
 
@@ -4482,6 +5627,10 @@ static PyObject *py_FlowControlAcknowledgment_get_BytesReceived(PyObject *obj, v
 static int py_FlowControlAcknowledgment_set_BytesReceived(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct FlowControlAcknowledgment *object = (struct FlowControlAcknowledgment *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->BytesReceived");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->BytesReceived));
                if (PyLong_Check(value)) {
@@ -4525,6 +5674,10 @@ static PyObject *py_FlowControlAcknowledgment_get_AvailableWindow(PyObject *obj,
 static int py_FlowControlAcknowledgment_set_AvailableWindow(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct FlowControlAcknowledgment *object = (struct FlowControlAcknowledgment *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->AvailableWindow");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->AvailableWindow));
                if (PyLong_Check(value)) {
@@ -4568,6 +5721,10 @@ static PyObject *py_FlowControlAcknowledgment_get_ChannelCookie(PyObject *obj, v
 static int py_FlowControlAcknowledgment_set_ChannelCookie(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct FlowControlAcknowledgment *object = (struct FlowControlAcknowledgment *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->ChannelCookie");
+               return -1;
+       }
        PY_CHECK_TYPE(&RTSCookie_Type, value, return -1;);
        if (talloc_reference(pytalloc_get_mem_ctx(py_obj), pytalloc_get_mem_ctx(value)) == NULL) {
                PyErr_NoMemory();
@@ -4578,10 +5735,25 @@ static int py_FlowControlAcknowledgment_set_ChannelCookie(PyObject *py_obj, PyOb
 }
 
 static PyGetSetDef py_FlowControlAcknowledgment_getsetters[] = {
-       { discard_const_p(char, "BytesReceived"), py_FlowControlAcknowledgment_get_BytesReceived, py_FlowControlAcknowledgment_set_BytesReceived },
-       { discard_const_p(char, "AvailableWindow"), py_FlowControlAcknowledgment_get_AvailableWindow, py_FlowControlAcknowledgment_set_AvailableWindow },
-       { discard_const_p(char, "ChannelCookie"), py_FlowControlAcknowledgment_get_ChannelCookie, py_FlowControlAcknowledgment_set_ChannelCookie },
-       { NULL }
+       {
+               .name = discard_const_p(char, "BytesReceived"),
+               .get = py_FlowControlAcknowledgment_get_BytesReceived,
+               .set = py_FlowControlAcknowledgment_set_BytesReceived,
+               .doc = discard_const_p(char, "PIDL-generated element BytesReceived")
+       },
+       {
+               .name = discard_const_p(char, "AvailableWindow"),
+               .get = py_FlowControlAcknowledgment_get_AvailableWindow,
+               .set = py_FlowControlAcknowledgment_set_AvailableWindow,
+               .doc = discard_const_p(char, "PIDL-generated element AvailableWindow")
+       },
+       {
+               .name = discard_const_p(char, "ChannelCookie"),
+               .get = py_FlowControlAcknowledgment_get_ChannelCookie,
+               .set = py_FlowControlAcknowledgment_set_ChannelCookie,
+               .doc = discard_const_p(char, "PIDL-generated element ChannelCookie")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_FlowControlAcknowledgment_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -4592,22 +5764,31 @@ static PyObject *py_FlowControlAcknowledgment_new(PyTypeObject *type, PyObject *
 static PyObject *py_FlowControlAcknowledgment_ndr_pack(PyObject *py_obj)
 {
        struct FlowControlAcknowledgment *object = (struct FlowControlAcknowledgment *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_FlowControlAcknowledgment);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_FlowControlAcknowledgment);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_FlowControlAcknowledgment_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct FlowControlAcknowledgment *object = (struct FlowControlAcknowledgment *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -4665,7 +5846,6 @@ static PyTypeObject FlowControlAcknowledgment_Type = {
        .tp_getset = py_FlowControlAcknowledgment_getsetters,
        .tp_methods = py_FlowControlAcknowledgment_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_FlowControlAcknowledgment_new,
 };
 
@@ -4681,6 +5861,10 @@ static PyObject *py_dcerpc_rts_cmd_ReceiveWindowSize_get_ReceiveWindowSize(PyObj
 static int py_dcerpc_rts_cmd_ReceiveWindowSize_set_ReceiveWindowSize(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_rts_cmd_ReceiveWindowSize *object = (struct dcerpc_rts_cmd_ReceiveWindowSize *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->ReceiveWindowSize");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->ReceiveWindowSize));
                if (PyLong_Check(value)) {
@@ -4714,8 +5898,13 @@ static int py_dcerpc_rts_cmd_ReceiveWindowSize_set_ReceiveWindowSize(PyObject *p
 }
 
 static PyGetSetDef py_dcerpc_rts_cmd_ReceiveWindowSize_getsetters[] = {
-       { discard_const_p(char, "ReceiveWindowSize"), py_dcerpc_rts_cmd_ReceiveWindowSize_get_ReceiveWindowSize, py_dcerpc_rts_cmd_ReceiveWindowSize_set_ReceiveWindowSize },
-       { NULL }
+       {
+               .name = discard_const_p(char, "ReceiveWindowSize"),
+               .get = py_dcerpc_rts_cmd_ReceiveWindowSize_get_ReceiveWindowSize,
+               .set = py_dcerpc_rts_cmd_ReceiveWindowSize_set_ReceiveWindowSize,
+               .doc = discard_const_p(char, "PIDL-generated element ReceiveWindowSize")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_rts_cmd_ReceiveWindowSize_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -4726,22 +5915,31 @@ static PyObject *py_dcerpc_rts_cmd_ReceiveWindowSize_new(PyTypeObject *type, PyO
 static PyObject *py_dcerpc_rts_cmd_ReceiveWindowSize_ndr_pack(PyObject *py_obj)
 {
        struct dcerpc_rts_cmd_ReceiveWindowSize *object = (struct dcerpc_rts_cmd_ReceiveWindowSize *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts_cmd_ReceiveWindowSize);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts_cmd_ReceiveWindowSize);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_dcerpc_rts_cmd_ReceiveWindowSize_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct dcerpc_rts_cmd_ReceiveWindowSize *object = (struct dcerpc_rts_cmd_ReceiveWindowSize *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -4799,7 +5997,6 @@ static PyTypeObject dcerpc_rts_cmd_ReceiveWindowSize_Type = {
        .tp_getset = py_dcerpc_rts_cmd_ReceiveWindowSize_getsetters,
        .tp_methods = py_dcerpc_rts_cmd_ReceiveWindowSize_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_rts_cmd_ReceiveWindowSize_new,
 };
 
@@ -4815,6 +6012,10 @@ static PyObject *py_dcerpc_rts_cmd_FlowControlAck_get_Ack(PyObject *obj, void *c
 static int py_dcerpc_rts_cmd_FlowControlAck_set_Ack(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_rts_cmd_FlowControlAck *object = (struct dcerpc_rts_cmd_FlowControlAck *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->Ack");
+               return -1;
+       }
        PY_CHECK_TYPE(&FlowControlAcknowledgment_Type, value, return -1;);
        if (talloc_reference(pytalloc_get_mem_ctx(py_obj), pytalloc_get_mem_ctx(value)) == NULL) {
                PyErr_NoMemory();
@@ -4825,8 +6026,13 @@ static int py_dcerpc_rts_cmd_FlowControlAck_set_Ack(PyObject *py_obj, PyObject *
 }
 
 static PyGetSetDef py_dcerpc_rts_cmd_FlowControlAck_getsetters[] = {
-       { discard_const_p(char, "Ack"), py_dcerpc_rts_cmd_FlowControlAck_get_Ack, py_dcerpc_rts_cmd_FlowControlAck_set_Ack },
-       { NULL }
+       {
+               .name = discard_const_p(char, "Ack"),
+               .get = py_dcerpc_rts_cmd_FlowControlAck_get_Ack,
+               .set = py_dcerpc_rts_cmd_FlowControlAck_set_Ack,
+               .doc = discard_const_p(char, "PIDL-generated element Ack")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_rts_cmd_FlowControlAck_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -4837,22 +6043,31 @@ static PyObject *py_dcerpc_rts_cmd_FlowControlAck_new(PyTypeObject *type, PyObje
 static PyObject *py_dcerpc_rts_cmd_FlowControlAck_ndr_pack(PyObject *py_obj)
 {
        struct dcerpc_rts_cmd_FlowControlAck *object = (struct dcerpc_rts_cmd_FlowControlAck *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts_cmd_FlowControlAck);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts_cmd_FlowControlAck);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_dcerpc_rts_cmd_FlowControlAck_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct dcerpc_rts_cmd_FlowControlAck *object = (struct dcerpc_rts_cmd_FlowControlAck *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -4910,7 +6125,6 @@ static PyTypeObject dcerpc_rts_cmd_FlowControlAck_Type = {
        .tp_getset = py_dcerpc_rts_cmd_FlowControlAck_getsetters,
        .tp_methods = py_dcerpc_rts_cmd_FlowControlAck_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_rts_cmd_FlowControlAck_new,
 };
 
@@ -4926,6 +6140,10 @@ static PyObject *py_dcerpc_rts_cmd_ConnectionTimeout_get_ConnectionTimeout(PyObj
 static int py_dcerpc_rts_cmd_ConnectionTimeout_set_ConnectionTimeout(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_rts_cmd_ConnectionTimeout *object = (struct dcerpc_rts_cmd_ConnectionTimeout *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->ConnectionTimeout");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->ConnectionTimeout));
                if (PyLong_Check(value)) {
@@ -4959,8 +6177,13 @@ static int py_dcerpc_rts_cmd_ConnectionTimeout_set_ConnectionTimeout(PyObject *p
 }
 
 static PyGetSetDef py_dcerpc_rts_cmd_ConnectionTimeout_getsetters[] = {
-       { discard_const_p(char, "ConnectionTimeout"), py_dcerpc_rts_cmd_ConnectionTimeout_get_ConnectionTimeout, py_dcerpc_rts_cmd_ConnectionTimeout_set_ConnectionTimeout },
-       { NULL }
+       {
+               .name = discard_const_p(char, "ConnectionTimeout"),
+               .get = py_dcerpc_rts_cmd_ConnectionTimeout_get_ConnectionTimeout,
+               .set = py_dcerpc_rts_cmd_ConnectionTimeout_set_ConnectionTimeout,
+               .doc = discard_const_p(char, "PIDL-generated element ConnectionTimeout")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_rts_cmd_ConnectionTimeout_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -4971,22 +6194,31 @@ static PyObject *py_dcerpc_rts_cmd_ConnectionTimeout_new(PyTypeObject *type, PyO
 static PyObject *py_dcerpc_rts_cmd_ConnectionTimeout_ndr_pack(PyObject *py_obj)
 {
        struct dcerpc_rts_cmd_ConnectionTimeout *object = (struct dcerpc_rts_cmd_ConnectionTimeout *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts_cmd_ConnectionTimeout);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts_cmd_ConnectionTimeout);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_dcerpc_rts_cmd_ConnectionTimeout_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct dcerpc_rts_cmd_ConnectionTimeout *object = (struct dcerpc_rts_cmd_ConnectionTimeout *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -5044,7 +6276,6 @@ static PyTypeObject dcerpc_rts_cmd_ConnectionTimeout_Type = {
        .tp_getset = py_dcerpc_rts_cmd_ConnectionTimeout_getsetters,
        .tp_methods = py_dcerpc_rts_cmd_ConnectionTimeout_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_rts_cmd_ConnectionTimeout_new,
 };
 
@@ -5060,6 +6291,10 @@ static PyObject *py_dcerpc_rts_cmd_Cookie_get_Cookie(PyObject *obj, void *closur
 static int py_dcerpc_rts_cmd_Cookie_set_Cookie(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_rts_cmd_Cookie *object = (struct dcerpc_rts_cmd_Cookie *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->Cookie");
+               return -1;
+       }
        PY_CHECK_TYPE(&RTSCookie_Type, value, return -1;);
        if (talloc_reference(pytalloc_get_mem_ctx(py_obj), pytalloc_get_mem_ctx(value)) == NULL) {
                PyErr_NoMemory();
@@ -5070,8 +6305,13 @@ static int py_dcerpc_rts_cmd_Cookie_set_Cookie(PyObject *py_obj, PyObject *value
 }
 
 static PyGetSetDef py_dcerpc_rts_cmd_Cookie_getsetters[] = {
-       { discard_const_p(char, "Cookie"), py_dcerpc_rts_cmd_Cookie_get_Cookie, py_dcerpc_rts_cmd_Cookie_set_Cookie },
-       { NULL }
+       {
+               .name = discard_const_p(char, "Cookie"),
+               .get = py_dcerpc_rts_cmd_Cookie_get_Cookie,
+               .set = py_dcerpc_rts_cmd_Cookie_set_Cookie,
+               .doc = discard_const_p(char, "PIDL-generated element Cookie")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_rts_cmd_Cookie_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -5082,22 +6322,31 @@ static PyObject *py_dcerpc_rts_cmd_Cookie_new(PyTypeObject *type, PyObject *args
 static PyObject *py_dcerpc_rts_cmd_Cookie_ndr_pack(PyObject *py_obj)
 {
        struct dcerpc_rts_cmd_Cookie *object = (struct dcerpc_rts_cmd_Cookie *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts_cmd_Cookie);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts_cmd_Cookie);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_dcerpc_rts_cmd_Cookie_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct dcerpc_rts_cmd_Cookie *object = (struct dcerpc_rts_cmd_Cookie *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -5155,7 +6404,6 @@ static PyTypeObject dcerpc_rts_cmd_Cookie_Type = {
        .tp_getset = py_dcerpc_rts_cmd_Cookie_getsetters,
        .tp_methods = py_dcerpc_rts_cmd_Cookie_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_rts_cmd_Cookie_new,
 };
 
@@ -5171,6 +6419,10 @@ static PyObject *py_dcerpc_rts_cmd_ChannelLifetime_get_ChannelLifetime(PyObject
 static int py_dcerpc_rts_cmd_ChannelLifetime_set_ChannelLifetime(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_rts_cmd_ChannelLifetime *object = (struct dcerpc_rts_cmd_ChannelLifetime *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->ChannelLifetime");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->ChannelLifetime));
                if (PyLong_Check(value)) {
@@ -5204,8 +6456,13 @@ static int py_dcerpc_rts_cmd_ChannelLifetime_set_ChannelLifetime(PyObject *py_ob
 }
 
 static PyGetSetDef py_dcerpc_rts_cmd_ChannelLifetime_getsetters[] = {
-       { discard_const_p(char, "ChannelLifetime"), py_dcerpc_rts_cmd_ChannelLifetime_get_ChannelLifetime, py_dcerpc_rts_cmd_ChannelLifetime_set_ChannelLifetime },
-       { NULL }
+       {
+               .name = discard_const_p(char, "ChannelLifetime"),
+               .get = py_dcerpc_rts_cmd_ChannelLifetime_get_ChannelLifetime,
+               .set = py_dcerpc_rts_cmd_ChannelLifetime_set_ChannelLifetime,
+               .doc = discard_const_p(char, "PIDL-generated element ChannelLifetime")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_rts_cmd_ChannelLifetime_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -5216,22 +6473,31 @@ static PyObject *py_dcerpc_rts_cmd_ChannelLifetime_new(PyTypeObject *type, PyObj
 static PyObject *py_dcerpc_rts_cmd_ChannelLifetime_ndr_pack(PyObject *py_obj)
 {
        struct dcerpc_rts_cmd_ChannelLifetime *object = (struct dcerpc_rts_cmd_ChannelLifetime *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts_cmd_ChannelLifetime);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts_cmd_ChannelLifetime);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_dcerpc_rts_cmd_ChannelLifetime_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct dcerpc_rts_cmd_ChannelLifetime *object = (struct dcerpc_rts_cmd_ChannelLifetime *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -5289,7 +6555,6 @@ static PyTypeObject dcerpc_rts_cmd_ChannelLifetime_Type = {
        .tp_getset = py_dcerpc_rts_cmd_ChannelLifetime_getsetters,
        .tp_methods = py_dcerpc_rts_cmd_ChannelLifetime_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_rts_cmd_ChannelLifetime_new,
 };
 
@@ -5305,6 +6570,10 @@ static PyObject *py_dcerpc_rts_cmd_ClientKeepalive_get_ClientKeepalive(PyObject
 static int py_dcerpc_rts_cmd_ClientKeepalive_set_ClientKeepalive(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_rts_cmd_ClientKeepalive *object = (struct dcerpc_rts_cmd_ClientKeepalive *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->ClientKeepalive");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->ClientKeepalive));
                if (PyLong_Check(value)) {
@@ -5338,8 +6607,13 @@ static int py_dcerpc_rts_cmd_ClientKeepalive_set_ClientKeepalive(PyObject *py_ob
 }
 
 static PyGetSetDef py_dcerpc_rts_cmd_ClientKeepalive_getsetters[] = {
-       { discard_const_p(char, "ClientKeepalive"), py_dcerpc_rts_cmd_ClientKeepalive_get_ClientKeepalive, py_dcerpc_rts_cmd_ClientKeepalive_set_ClientKeepalive },
-       { NULL }
+       {
+               .name = discard_const_p(char, "ClientKeepalive"),
+               .get = py_dcerpc_rts_cmd_ClientKeepalive_get_ClientKeepalive,
+               .set = py_dcerpc_rts_cmd_ClientKeepalive_set_ClientKeepalive,
+               .doc = discard_const_p(char, "PIDL-generated element ClientKeepalive")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_rts_cmd_ClientKeepalive_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -5350,22 +6624,31 @@ static PyObject *py_dcerpc_rts_cmd_ClientKeepalive_new(PyTypeObject *type, PyObj
 static PyObject *py_dcerpc_rts_cmd_ClientKeepalive_ndr_pack(PyObject *py_obj)
 {
        struct dcerpc_rts_cmd_ClientKeepalive *object = (struct dcerpc_rts_cmd_ClientKeepalive *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts_cmd_ClientKeepalive);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts_cmd_ClientKeepalive);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_dcerpc_rts_cmd_ClientKeepalive_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct dcerpc_rts_cmd_ClientKeepalive *object = (struct dcerpc_rts_cmd_ClientKeepalive *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -5423,7 +6706,6 @@ static PyTypeObject dcerpc_rts_cmd_ClientKeepalive_Type = {
        .tp_getset = py_dcerpc_rts_cmd_ClientKeepalive_getsetters,
        .tp_methods = py_dcerpc_rts_cmd_ClientKeepalive_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_rts_cmd_ClientKeepalive_new,
 };
 
@@ -5439,6 +6721,10 @@ static PyObject *py_dcerpc_rts_cmd_Version_get_Version(PyObject *obj, void *clos
 static int py_dcerpc_rts_cmd_Version_set_Version(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_rts_cmd_Version *object = (struct dcerpc_rts_cmd_Version *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->Version");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->Version));
                if (PyLong_Check(value)) {
@@ -5472,8 +6758,13 @@ static int py_dcerpc_rts_cmd_Version_set_Version(PyObject *py_obj, PyObject *val
 }
 
 static PyGetSetDef py_dcerpc_rts_cmd_Version_getsetters[] = {
-       { discard_const_p(char, "Version"), py_dcerpc_rts_cmd_Version_get_Version, py_dcerpc_rts_cmd_Version_set_Version },
-       { NULL }
+       {
+               .name = discard_const_p(char, "Version"),
+               .get = py_dcerpc_rts_cmd_Version_get_Version,
+               .set = py_dcerpc_rts_cmd_Version_set_Version,
+               .doc = discard_const_p(char, "PIDL-generated element Version")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_rts_cmd_Version_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -5484,22 +6775,31 @@ static PyObject *py_dcerpc_rts_cmd_Version_new(PyTypeObject *type, PyObject *arg
 static PyObject *py_dcerpc_rts_cmd_Version_ndr_pack(PyObject *py_obj)
 {
        struct dcerpc_rts_cmd_Version *object = (struct dcerpc_rts_cmd_Version *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts_cmd_Version);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts_cmd_Version);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_dcerpc_rts_cmd_Version_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct dcerpc_rts_cmd_Version *object = (struct dcerpc_rts_cmd_Version *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -5557,7 +6857,6 @@ static PyTypeObject dcerpc_rts_cmd_Version_Type = {
        .tp_getset = py_dcerpc_rts_cmd_Version_getsetters,
        .tp_methods = py_dcerpc_rts_cmd_Version_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_rts_cmd_Version_new,
 };
 
@@ -5570,22 +6869,31 @@ static PyObject *py_dcerpc_rts_cmd_Empty_new(PyTypeObject *type, PyObject *args,
 static PyObject *py_dcerpc_rts_cmd_Empty_ndr_pack(PyObject *py_obj)
 {
        struct dcerpc_rts_cmd_Empty *object = (struct dcerpc_rts_cmd_Empty *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts_cmd_Empty);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts_cmd_Empty);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_dcerpc_rts_cmd_Empty_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct dcerpc_rts_cmd_Empty *object = (struct dcerpc_rts_cmd_Empty *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -5643,7 +6951,6 @@ static PyTypeObject dcerpc_rts_cmd_Empty_Type = {
        .tp_getset = NULL,
        .tp_methods = py_dcerpc_rts_cmd_Empty_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_rts_cmd_Empty_new,
 };
 
@@ -5659,6 +6966,10 @@ static PyObject *py_dcerpc_rts_cmd_Padding_get_ConformanceCount(PyObject *obj, v
 static int py_dcerpc_rts_cmd_Padding_set_ConformanceCount(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_rts_cmd_Padding *object = (struct dcerpc_rts_cmd_Padding *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->ConformanceCount");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->ConformanceCount));
                if (PyLong_Check(value)) {
@@ -5713,6 +7024,10 @@ static PyObject *py_dcerpc_rts_cmd_Padding_get_Padding(PyObject *obj, void *clos
 static int py_dcerpc_rts_cmd_Padding_set_Padding(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_rts_cmd_Padding *object = (struct dcerpc_rts_cmd_Padding *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->Padding");
+               return -1;
+       }
        PY_CHECK_TYPE(&PyList_Type, value, return -1;);
        {
                int Padding_cntr_0;
@@ -5720,6 +7035,10 @@ static int py_dcerpc_rts_cmd_Padding_set_Padding(PyObject *py_obj, PyObject *val
                if (!object->Padding) { return -1;; }
                talloc_set_name_const(object->Padding, "ARRAY: object->Padding");
                for (Padding_cntr_0 = 0; Padding_cntr_0 < PyList_GET_SIZE(value); Padding_cntr_0++) {
+                       if (PyList_GET_ITEM(value, Padding_cntr_0) == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->Padding[Padding_cntr_0]");
+                               return -1;
+                       }
                        {
                                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->Padding[Padding_cntr_0]));
                                if (PyLong_Check(PyList_GET_ITEM(value, Padding_cntr_0))) {
@@ -5755,9 +7074,19 @@ static int py_dcerpc_rts_cmd_Padding_set_Padding(PyObject *py_obj, PyObject *val
 }
 
 static PyGetSetDef py_dcerpc_rts_cmd_Padding_getsetters[] = {
-       { discard_const_p(char, "ConformanceCount"), py_dcerpc_rts_cmd_Padding_get_ConformanceCount, py_dcerpc_rts_cmd_Padding_set_ConformanceCount },
-       { discard_const_p(char, "Padding"), py_dcerpc_rts_cmd_Padding_get_Padding, py_dcerpc_rts_cmd_Padding_set_Padding },
-       { NULL }
+       {
+               .name = discard_const_p(char, "ConformanceCount"),
+               .get = py_dcerpc_rts_cmd_Padding_get_ConformanceCount,
+               .set = py_dcerpc_rts_cmd_Padding_set_ConformanceCount,
+               .doc = discard_const_p(char, "PIDL-generated element ConformanceCount")
+       },
+       {
+               .name = discard_const_p(char, "Padding"),
+               .get = py_dcerpc_rts_cmd_Padding_get_Padding,
+               .set = py_dcerpc_rts_cmd_Padding_set_Padding,
+               .doc = discard_const_p(char, "PIDL-generated element Padding")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_rts_cmd_Padding_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -5768,22 +7097,31 @@ static PyObject *py_dcerpc_rts_cmd_Padding_new(PyTypeObject *type, PyObject *arg
 static PyObject *py_dcerpc_rts_cmd_Padding_ndr_pack(PyObject *py_obj)
 {
        struct dcerpc_rts_cmd_Padding *object = (struct dcerpc_rts_cmd_Padding *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts_cmd_Padding);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts_cmd_Padding);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_dcerpc_rts_cmd_Padding_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct dcerpc_rts_cmd_Padding *object = (struct dcerpc_rts_cmd_Padding *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -5841,7 +7179,6 @@ static PyTypeObject dcerpc_rts_cmd_Padding_Type = {
        .tp_getset = py_dcerpc_rts_cmd_Padding_getsetters,
        .tp_methods = py_dcerpc_rts_cmd_Padding_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_rts_cmd_Padding_new,
 };
 
@@ -5854,22 +7191,31 @@ static PyObject *py_dcerpc_rts_cmd_NegativeANCE_new(PyTypeObject *type, PyObject
 static PyObject *py_dcerpc_rts_cmd_NegativeANCE_ndr_pack(PyObject *py_obj)
 {
        struct dcerpc_rts_cmd_NegativeANCE *object = (struct dcerpc_rts_cmd_NegativeANCE *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts_cmd_NegativeANCE);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts_cmd_NegativeANCE);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_dcerpc_rts_cmd_NegativeANCE_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct dcerpc_rts_cmd_NegativeANCE *object = (struct dcerpc_rts_cmd_NegativeANCE *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -5927,7 +7273,6 @@ static PyTypeObject dcerpc_rts_cmd_NegativeANCE_Type = {
        .tp_getset = NULL,
        .tp_methods = py_dcerpc_rts_cmd_NegativeANCE_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_rts_cmd_NegativeANCE_new,
 };
 
@@ -5940,22 +7285,31 @@ static PyObject *py_dcerpc_rts_cmd_ANCE_new(PyTypeObject *type, PyObject *args,
 static PyObject *py_dcerpc_rts_cmd_ANCE_ndr_pack(PyObject *py_obj)
 {
        struct dcerpc_rts_cmd_ANCE *object = (struct dcerpc_rts_cmd_ANCE *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts_cmd_ANCE);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts_cmd_ANCE);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_dcerpc_rts_cmd_ANCE_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct dcerpc_rts_cmd_ANCE *object = (struct dcerpc_rts_cmd_ANCE *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -6013,7 +7367,6 @@ static PyTypeObject dcerpc_rts_cmd_ANCE_Type = {
        .tp_getset = NULL,
        .tp_methods = py_dcerpc_rts_cmd_ANCE_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_rts_cmd_ANCE_new,
 };
 
@@ -6029,6 +7382,10 @@ static PyObject *py_dcerpc_rts_cmd_ClientAddress_get_ClientAddress(PyObject *obj
 static int py_dcerpc_rts_cmd_ClientAddress_set_ClientAddress(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_rts_cmd_ClientAddress *object = (struct dcerpc_rts_cmd_ClientAddress *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->ClientAddress");
+               return -1;
+       }
        PY_CHECK_TYPE(&ClientAddress_Type, value, return -1;);
        if (talloc_reference(pytalloc_get_mem_ctx(py_obj), pytalloc_get_mem_ctx(value)) == NULL) {
                PyErr_NoMemory();
@@ -6039,8 +7396,13 @@ static int py_dcerpc_rts_cmd_ClientAddress_set_ClientAddress(PyObject *py_obj, P
 }
 
 static PyGetSetDef py_dcerpc_rts_cmd_ClientAddress_getsetters[] = {
-       { discard_const_p(char, "ClientAddress"), py_dcerpc_rts_cmd_ClientAddress_get_ClientAddress, py_dcerpc_rts_cmd_ClientAddress_set_ClientAddress },
-       { NULL }
+       {
+               .name = discard_const_p(char, "ClientAddress"),
+               .get = py_dcerpc_rts_cmd_ClientAddress_get_ClientAddress,
+               .set = py_dcerpc_rts_cmd_ClientAddress_set_ClientAddress,
+               .doc = discard_const_p(char, "PIDL-generated element ClientAddress")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_rts_cmd_ClientAddress_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -6051,22 +7413,31 @@ static PyObject *py_dcerpc_rts_cmd_ClientAddress_new(PyTypeObject *type, PyObjec
 static PyObject *py_dcerpc_rts_cmd_ClientAddress_ndr_pack(PyObject *py_obj)
 {
        struct dcerpc_rts_cmd_ClientAddress *object = (struct dcerpc_rts_cmd_ClientAddress *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts_cmd_ClientAddress);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts_cmd_ClientAddress);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_dcerpc_rts_cmd_ClientAddress_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct dcerpc_rts_cmd_ClientAddress *object = (struct dcerpc_rts_cmd_ClientAddress *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -6124,7 +7495,6 @@ static PyTypeObject dcerpc_rts_cmd_ClientAddress_Type = {
        .tp_getset = py_dcerpc_rts_cmd_ClientAddress_getsetters,
        .tp_methods = py_dcerpc_rts_cmd_ClientAddress_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_rts_cmd_ClientAddress_new,
 };
 
@@ -6140,6 +7510,10 @@ static PyObject *py_dcerpc_rts_cmd_AssociationGroupId_get_AssociationGroupId(PyO
 static int py_dcerpc_rts_cmd_AssociationGroupId_set_AssociationGroupId(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_rts_cmd_AssociationGroupId *object = (struct dcerpc_rts_cmd_AssociationGroupId *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->AssociationGroupId");
+               return -1;
+       }
        PY_CHECK_TYPE(&RTSCookie_Type, value, return -1;);
        if (talloc_reference(pytalloc_get_mem_ctx(py_obj), pytalloc_get_mem_ctx(value)) == NULL) {
                PyErr_NoMemory();
@@ -6150,8 +7524,13 @@ static int py_dcerpc_rts_cmd_AssociationGroupId_set_AssociationGroupId(PyObject
 }
 
 static PyGetSetDef py_dcerpc_rts_cmd_AssociationGroupId_getsetters[] = {
-       { discard_const_p(char, "AssociationGroupId"), py_dcerpc_rts_cmd_AssociationGroupId_get_AssociationGroupId, py_dcerpc_rts_cmd_AssociationGroupId_set_AssociationGroupId },
-       { NULL }
+       {
+               .name = discard_const_p(char, "AssociationGroupId"),
+               .get = py_dcerpc_rts_cmd_AssociationGroupId_get_AssociationGroupId,
+               .set = py_dcerpc_rts_cmd_AssociationGroupId_set_AssociationGroupId,
+               .doc = discard_const_p(char, "PIDL-generated element AssociationGroupId")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_rts_cmd_AssociationGroupId_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -6162,22 +7541,31 @@ static PyObject *py_dcerpc_rts_cmd_AssociationGroupId_new(PyTypeObject *type, Py
 static PyObject *py_dcerpc_rts_cmd_AssociationGroupId_ndr_pack(PyObject *py_obj)
 {
        struct dcerpc_rts_cmd_AssociationGroupId *object = (struct dcerpc_rts_cmd_AssociationGroupId *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts_cmd_AssociationGroupId);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts_cmd_AssociationGroupId);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_dcerpc_rts_cmd_AssociationGroupId_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct dcerpc_rts_cmd_AssociationGroupId *object = (struct dcerpc_rts_cmd_AssociationGroupId *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -6235,7 +7623,6 @@ static PyTypeObject dcerpc_rts_cmd_AssociationGroupId_Type = {
        .tp_getset = py_dcerpc_rts_cmd_AssociationGroupId_getsetters,
        .tp_methods = py_dcerpc_rts_cmd_AssociationGroupId_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_rts_cmd_AssociationGroupId_new,
 };
 
@@ -6251,6 +7638,10 @@ static PyObject *py_dcerpc_rts_cmd_Destination_get_ForwardDestination(PyObject *
 static int py_dcerpc_rts_cmd_Destination_set_ForwardDestination(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_rts_cmd_Destination *object = (struct dcerpc_rts_cmd_Destination *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->ForwardDestination");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->ForwardDestination));
                if (PyLong_Check(value)) {
@@ -6284,8 +7675,13 @@ static int py_dcerpc_rts_cmd_Destination_set_ForwardDestination(PyObject *py_obj
 }
 
 static PyGetSetDef py_dcerpc_rts_cmd_Destination_getsetters[] = {
-       { discard_const_p(char, "ForwardDestination"), py_dcerpc_rts_cmd_Destination_get_ForwardDestination, py_dcerpc_rts_cmd_Destination_set_ForwardDestination },
-       { NULL }
+       {
+               .name = discard_const_p(char, "ForwardDestination"),
+               .get = py_dcerpc_rts_cmd_Destination_get_ForwardDestination,
+               .set = py_dcerpc_rts_cmd_Destination_set_ForwardDestination,
+               .doc = discard_const_p(char, "PIDL-generated element ForwardDestination")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_rts_cmd_Destination_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -6296,22 +7692,31 @@ static PyObject *py_dcerpc_rts_cmd_Destination_new(PyTypeObject *type, PyObject
 static PyObject *py_dcerpc_rts_cmd_Destination_ndr_pack(PyObject *py_obj)
 {
        struct dcerpc_rts_cmd_Destination *object = (struct dcerpc_rts_cmd_Destination *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts_cmd_Destination);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts_cmd_Destination);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_dcerpc_rts_cmd_Destination_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct dcerpc_rts_cmd_Destination *object = (struct dcerpc_rts_cmd_Destination *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -6369,7 +7774,6 @@ static PyTypeObject dcerpc_rts_cmd_Destination_Type = {
        .tp_getset = py_dcerpc_rts_cmd_Destination_getsetters,
        .tp_methods = py_dcerpc_rts_cmd_Destination_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_rts_cmd_Destination_new,
 };
 
@@ -6385,6 +7789,10 @@ static PyObject *py_dcerpc_rts_cmd_PingTrafficSentNotify_get_PingTrafficSent(PyO
 static int py_dcerpc_rts_cmd_PingTrafficSentNotify_set_PingTrafficSent(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_rts_cmd_PingTrafficSentNotify *object = (struct dcerpc_rts_cmd_PingTrafficSentNotify *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->PingTrafficSent");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->PingTrafficSent));
                if (PyLong_Check(value)) {
@@ -6418,8 +7826,13 @@ static int py_dcerpc_rts_cmd_PingTrafficSentNotify_set_PingTrafficSent(PyObject
 }
 
 static PyGetSetDef py_dcerpc_rts_cmd_PingTrafficSentNotify_getsetters[] = {
-       { discard_const_p(char, "PingTrafficSent"), py_dcerpc_rts_cmd_PingTrafficSentNotify_get_PingTrafficSent, py_dcerpc_rts_cmd_PingTrafficSentNotify_set_PingTrafficSent },
-       { NULL }
+       {
+               .name = discard_const_p(char, "PingTrafficSent"),
+               .get = py_dcerpc_rts_cmd_PingTrafficSentNotify_get_PingTrafficSent,
+               .set = py_dcerpc_rts_cmd_PingTrafficSentNotify_set_PingTrafficSent,
+               .doc = discard_const_p(char, "PIDL-generated element PingTrafficSent")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_rts_cmd_PingTrafficSentNotify_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -6430,22 +7843,31 @@ static PyObject *py_dcerpc_rts_cmd_PingTrafficSentNotify_new(PyTypeObject *type,
 static PyObject *py_dcerpc_rts_cmd_PingTrafficSentNotify_ndr_pack(PyObject *py_obj)
 {
        struct dcerpc_rts_cmd_PingTrafficSentNotify *object = (struct dcerpc_rts_cmd_PingTrafficSentNotify *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts_cmd_PingTrafficSentNotify);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts_cmd_PingTrafficSentNotify);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_dcerpc_rts_cmd_PingTrafficSentNotify_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct dcerpc_rts_cmd_PingTrafficSentNotify *object = (struct dcerpc_rts_cmd_PingTrafficSentNotify *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -6503,7 +7925,6 @@ static PyTypeObject dcerpc_rts_cmd_PingTrafficSentNotify_Type = {
        .tp_getset = py_dcerpc_rts_cmd_PingTrafficSentNotify_getsetters,
        .tp_methods = py_dcerpc_rts_cmd_PingTrafficSentNotify_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_rts_cmd_PingTrafficSentNotify_new,
 };
 
@@ -6582,6 +8003,10 @@ union dcerpc_rts_cmds *py_export_dcerpc_rts_cmds(TALLOC_CTX *mem_ctx, int level,
        union dcerpc_rts_cmds *ret = talloc_zero(mem_ctx, union dcerpc_rts_cmds);
        switch (level) {
                case 0x0:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->ReceiveWindowSize");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_rts_cmd_ReceiveWindowSize_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -6591,6 +8016,10 @@ union dcerpc_rts_cmds *py_export_dcerpc_rts_cmds(TALLOC_CTX *mem_ctx, int level,
                        break;
 
                case 0x1:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->FlowControlAck");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_rts_cmd_FlowControlAck_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -6600,6 +8029,10 @@ union dcerpc_rts_cmds *py_export_dcerpc_rts_cmds(TALLOC_CTX *mem_ctx, int level,
                        break;
 
                case 0x2:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->ConnectionTimeout");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_rts_cmd_ConnectionTimeout_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -6609,6 +8042,10 @@ union dcerpc_rts_cmds *py_export_dcerpc_rts_cmds(TALLOC_CTX *mem_ctx, int level,
                        break;
 
                case 0x3:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->Cookie");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_rts_cmd_Cookie_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -6618,6 +8055,10 @@ union dcerpc_rts_cmds *py_export_dcerpc_rts_cmds(TALLOC_CTX *mem_ctx, int level,
                        break;
 
                case 0x4:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->ChannelLifetime");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_rts_cmd_ChannelLifetime_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -6627,6 +8068,10 @@ union dcerpc_rts_cmds *py_export_dcerpc_rts_cmds(TALLOC_CTX *mem_ctx, int level,
                        break;
 
                case 0x5:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->ClientKeepalive");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_rts_cmd_ClientKeepalive_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -6636,6 +8081,10 @@ union dcerpc_rts_cmds *py_export_dcerpc_rts_cmds(TALLOC_CTX *mem_ctx, int level,
                        break;
 
                case 0x6:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->Version");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_rts_cmd_Version_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -6645,6 +8094,10 @@ union dcerpc_rts_cmds *py_export_dcerpc_rts_cmds(TALLOC_CTX *mem_ctx, int level,
                        break;
 
                case 0x7:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->Empty");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_rts_cmd_Empty_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -6654,6 +8107,10 @@ union dcerpc_rts_cmds *py_export_dcerpc_rts_cmds(TALLOC_CTX *mem_ctx, int level,
                        break;
 
                case 0x8:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->Padding");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_rts_cmd_Padding_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -6663,6 +8120,10 @@ union dcerpc_rts_cmds *py_export_dcerpc_rts_cmds(TALLOC_CTX *mem_ctx, int level,
                        break;
 
                case 0x9:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->NegativeANCE");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_rts_cmd_NegativeANCE_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -6672,6 +8133,10 @@ union dcerpc_rts_cmds *py_export_dcerpc_rts_cmds(TALLOC_CTX *mem_ctx, int level,
                        break;
 
                case 0xA:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->ANCE");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_rts_cmd_ANCE_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -6681,6 +8146,10 @@ union dcerpc_rts_cmds *py_export_dcerpc_rts_cmds(TALLOC_CTX *mem_ctx, int level,
                        break;
 
                case 0xB:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->ClientAddress");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_rts_cmd_ClientAddress_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -6690,6 +8159,10 @@ union dcerpc_rts_cmds *py_export_dcerpc_rts_cmds(TALLOC_CTX *mem_ctx, int level,
                        break;
 
                case 0xC:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->AssociationGroupId");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_rts_cmd_AssociationGroupId_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -6699,6 +8172,10 @@ union dcerpc_rts_cmds *py_export_dcerpc_rts_cmds(TALLOC_CTX *mem_ctx, int level,
                        break;
 
                case 0xD:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->Destination");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_rts_cmd_Destination_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -6708,6 +8185,10 @@ union dcerpc_rts_cmds *py_export_dcerpc_rts_cmds(TALLOC_CTX *mem_ctx, int level,
                        break;
 
                case 0xE:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->PingTrafficSentNotify");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_rts_cmd_PingTrafficSentNotify_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -6737,6 +8218,10 @@ static PyObject *py_dcerpc_rts_cmd_get_CommandType(PyObject *obj, void *closure)
 static int py_dcerpc_rts_cmd_set_CommandType(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_rts_cmd *object = (struct dcerpc_rts_cmd *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->CommandType");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->CommandType));
                if (PyLong_Check(value)) {
@@ -6783,6 +8268,10 @@ static PyObject *py_dcerpc_rts_cmd_get_Command(PyObject *obj, void *closure)
 static int py_dcerpc_rts_cmd_set_Command(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_rts_cmd *object = (struct dcerpc_rts_cmd *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->Command");
+               return -1;
+       }
        {
                union dcerpc_rts_cmds *Command_switch_0;
                Command_switch_0 = py_export_dcerpc_rts_cmds(pytalloc_get_mem_ctx(py_obj), object->CommandType, value);
@@ -6795,9 +8284,19 @@ static int py_dcerpc_rts_cmd_set_Command(PyObject *py_obj, PyObject *value, void
 }
 
 static PyGetSetDef py_dcerpc_rts_cmd_getsetters[] = {
-       { discard_const_p(char, "CommandType"), py_dcerpc_rts_cmd_get_CommandType, py_dcerpc_rts_cmd_set_CommandType },
-       { discard_const_p(char, "Command"), py_dcerpc_rts_cmd_get_Command, py_dcerpc_rts_cmd_set_Command },
-       { NULL }
+       {
+               .name = discard_const_p(char, "CommandType"),
+               .get = py_dcerpc_rts_cmd_get_CommandType,
+               .set = py_dcerpc_rts_cmd_set_CommandType,
+               .doc = discard_const_p(char, "PIDL-generated element CommandType")
+       },
+       {
+               .name = discard_const_p(char, "Command"),
+               .get = py_dcerpc_rts_cmd_get_Command,
+               .set = py_dcerpc_rts_cmd_set_Command,
+               .doc = discard_const_p(char, "PIDL-generated element Command")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_rts_cmd_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -6808,22 +8307,31 @@ static PyObject *py_dcerpc_rts_cmd_new(PyTypeObject *type, PyObject *args, PyObj
 static PyObject *py_dcerpc_rts_cmd_ndr_pack(PyObject *py_obj)
 {
        struct dcerpc_rts_cmd *object = (struct dcerpc_rts_cmd *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts_cmd);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts_cmd);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_dcerpc_rts_cmd_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct dcerpc_rts_cmd *object = (struct dcerpc_rts_cmd *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -6881,7 +8389,6 @@ static PyTypeObject dcerpc_rts_cmd_Type = {
        .tp_getset = py_dcerpc_rts_cmd_getsetters,
        .tp_methods = py_dcerpc_rts_cmd_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_rts_cmd_new,
 };
 
@@ -6897,6 +8404,10 @@ static PyObject *py_dcerpc_rts_get_Flags(PyObject *obj, void *closure)
 static int py_dcerpc_rts_set_Flags(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_rts *object = (struct dcerpc_rts *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->Flags");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->Flags));
                if (PyLong_Check(value)) {
@@ -6940,6 +8451,10 @@ static PyObject *py_dcerpc_rts_get_NumberOfCommands(PyObject *obj, void *closure
 static int py_dcerpc_rts_set_NumberOfCommands(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_rts *object = (struct dcerpc_rts *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->NumberOfCommands");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->NumberOfCommands));
                if (PyLong_Check(value)) {
@@ -6994,6 +8509,10 @@ static PyObject *py_dcerpc_rts_get_Commands(PyObject *obj, void *closure)
 static int py_dcerpc_rts_set_Commands(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_rts *object = (struct dcerpc_rts *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->Commands");
+               return -1;
+       }
        PY_CHECK_TYPE(&PyList_Type, value, return -1;);
        {
                int Commands_cntr_0;
@@ -7001,6 +8520,10 @@ static int py_dcerpc_rts_set_Commands(PyObject *py_obj, PyObject *value, void *c
                if (!object->Commands) { return -1;; }
                talloc_set_name_const(object->Commands, "ARRAY: object->Commands");
                for (Commands_cntr_0 = 0; Commands_cntr_0 < PyList_GET_SIZE(value); Commands_cntr_0++) {
+                       if (PyList_GET_ITEM(value, Commands_cntr_0) == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->Commands[Commands_cntr_0]");
+                               return -1;
+                       }
                        PY_CHECK_TYPE(&dcerpc_rts_cmd_Type, PyList_GET_ITEM(value, Commands_cntr_0), return -1;);
                        if (talloc_reference(object->Commands, pytalloc_get_mem_ctx(PyList_GET_ITEM(value, Commands_cntr_0))) == NULL) {
                                PyErr_NoMemory();
@@ -7013,10 +8536,25 @@ static int py_dcerpc_rts_set_Commands(PyObject *py_obj, PyObject *value, void *c
 }
 
 static PyGetSetDef py_dcerpc_rts_getsetters[] = {
-       { discard_const_p(char, "Flags"), py_dcerpc_rts_get_Flags, py_dcerpc_rts_set_Flags },
-       { discard_const_p(char, "NumberOfCommands"), py_dcerpc_rts_get_NumberOfCommands, py_dcerpc_rts_set_NumberOfCommands },
-       { discard_const_p(char, "Commands"), py_dcerpc_rts_get_Commands, py_dcerpc_rts_set_Commands },
-       { NULL }
+       {
+               .name = discard_const_p(char, "Flags"),
+               .get = py_dcerpc_rts_get_Flags,
+               .set = py_dcerpc_rts_set_Flags,
+               .doc = discard_const_p(char, "PIDL-generated element Flags")
+       },
+       {
+               .name = discard_const_p(char, "NumberOfCommands"),
+               .get = py_dcerpc_rts_get_NumberOfCommands,
+               .set = py_dcerpc_rts_set_NumberOfCommands,
+               .doc = discard_const_p(char, "PIDL-generated element NumberOfCommands")
+       },
+       {
+               .name = discard_const_p(char, "Commands"),
+               .get = py_dcerpc_rts_get_Commands,
+               .set = py_dcerpc_rts_set_Commands,
+               .doc = discard_const_p(char, "PIDL-generated element Commands")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_rts_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -7027,22 +8565,31 @@ static PyObject *py_dcerpc_rts_new(PyTypeObject *type, PyObject *args, PyObject
 static PyObject *py_dcerpc_rts_ndr_pack(PyObject *py_obj)
 {
        struct dcerpc_rts *object = (struct dcerpc_rts *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_rts);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_dcerpc_rts_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct dcerpc_rts *object = (struct dcerpc_rts *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -7100,7 +8647,6 @@ static PyTypeObject dcerpc_rts_Type = {
        .tp_getset = py_dcerpc_rts_getsetters,
        .tp_methods = py_dcerpc_rts_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_rts_new,
 };
 
@@ -7203,6 +8749,10 @@ union dcerpc_payload *py_export_dcerpc_payload(TALLOC_CTX *mem_ctx, int level, P
        union dcerpc_payload *ret = talloc_zero(mem_ctx, union dcerpc_payload);
        switch (level) {
                case DCERPC_PKT_REQUEST:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->request");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_request_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -7212,6 +8762,10 @@ union dcerpc_payload *py_export_dcerpc_payload(TALLOC_CTX *mem_ctx, int level, P
                        break;
 
                case DCERPC_PKT_PING:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->ping");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_ping_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -7221,6 +8775,10 @@ union dcerpc_payload *py_export_dcerpc_payload(TALLOC_CTX *mem_ctx, int level, P
                        break;
 
                case DCERPC_PKT_RESPONSE:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->response");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_response_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -7230,6 +8788,10 @@ union dcerpc_payload *py_export_dcerpc_payload(TALLOC_CTX *mem_ctx, int level, P
                        break;
 
                case DCERPC_PKT_FAULT:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->fault");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_fault_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -7239,6 +8801,10 @@ union dcerpc_payload *py_export_dcerpc_payload(TALLOC_CTX *mem_ctx, int level, P
                        break;
 
                case DCERPC_PKT_WORKING:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->working");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_working_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -7248,6 +8814,10 @@ union dcerpc_payload *py_export_dcerpc_payload(TALLOC_CTX *mem_ctx, int level, P
                        break;
 
                case DCERPC_PKT_NOCALL:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->nocall");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_fack_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -7257,6 +8827,10 @@ union dcerpc_payload *py_export_dcerpc_payload(TALLOC_CTX *mem_ctx, int level, P
                        break;
 
                case DCERPC_PKT_REJECT:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->reject");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_fault_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -7266,6 +8840,10 @@ union dcerpc_payload *py_export_dcerpc_payload(TALLOC_CTX *mem_ctx, int level, P
                        break;
 
                case DCERPC_PKT_ACK:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->ack");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_ack_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -7275,6 +8853,10 @@ union dcerpc_payload *py_export_dcerpc_payload(TALLOC_CTX *mem_ctx, int level, P
                        break;
 
                case DCERPC_PKT_CL_CANCEL:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->cl_cancel");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_cl_cancel_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -7284,6 +8866,10 @@ union dcerpc_payload *py_export_dcerpc_payload(TALLOC_CTX *mem_ctx, int level, P
                        break;
 
                case DCERPC_PKT_FACK:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->fack");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_fack_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -7293,6 +8879,10 @@ union dcerpc_payload *py_export_dcerpc_payload(TALLOC_CTX *mem_ctx, int level, P
                        break;
 
                case DCERPC_PKT_CANCEL_ACK:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->cancel_ack");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_cancel_ack_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -7302,6 +8892,10 @@ union dcerpc_payload *py_export_dcerpc_payload(TALLOC_CTX *mem_ctx, int level, P
                        break;
 
                case DCERPC_PKT_BIND:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->bind");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_bind_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -7311,6 +8905,10 @@ union dcerpc_payload *py_export_dcerpc_payload(TALLOC_CTX *mem_ctx, int level, P
                        break;
 
                case DCERPC_PKT_BIND_ACK:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->bind_ack");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_bind_ack_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -7320,6 +8918,10 @@ union dcerpc_payload *py_export_dcerpc_payload(TALLOC_CTX *mem_ctx, int level, P
                        break;
 
                case DCERPC_PKT_BIND_NAK:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->bind_nak");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_bind_nak_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -7329,6 +8931,10 @@ union dcerpc_payload *py_export_dcerpc_payload(TALLOC_CTX *mem_ctx, int level, P
                        break;
 
                case DCERPC_PKT_ALTER:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->alter");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_bind_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -7338,6 +8944,10 @@ union dcerpc_payload *py_export_dcerpc_payload(TALLOC_CTX *mem_ctx, int level, P
                        break;
 
                case DCERPC_PKT_ALTER_RESP:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->alter_resp");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_bind_ack_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -7347,6 +8957,10 @@ union dcerpc_payload *py_export_dcerpc_payload(TALLOC_CTX *mem_ctx, int level, P
                        break;
 
                case DCERPC_PKT_SHUTDOWN:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->shutdown");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_shutdown_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -7356,6 +8970,10 @@ union dcerpc_payload *py_export_dcerpc_payload(TALLOC_CTX *mem_ctx, int level, P
                        break;
 
                case DCERPC_PKT_CO_CANCEL:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->co_cancel");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_co_cancel_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -7365,6 +8983,10 @@ union dcerpc_payload *py_export_dcerpc_payload(TALLOC_CTX *mem_ctx, int level, P
                        break;
 
                case DCERPC_PKT_ORPHANED:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->orphaned");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_orphaned_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -7374,6 +8996,10 @@ union dcerpc_payload *py_export_dcerpc_payload(TALLOC_CTX *mem_ctx, int level, P
                        break;
 
                case DCERPC_PKT_AUTH3:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->auth3");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_auth3_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -7383,6 +9009,10 @@ union dcerpc_payload *py_export_dcerpc_payload(TALLOC_CTX *mem_ctx, int level, P
                        break;
 
                case DCERPC_PKT_RTS:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->rts");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_rts_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -7412,6 +9042,10 @@ static PyObject *py_ncacn_packet_get_rpc_vers(PyObject *obj, void *closure)
 static int py_ncacn_packet_set_rpc_vers(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct ncacn_packet *object = (struct ncacn_packet *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->rpc_vers");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->rpc_vers));
                if (PyLong_Check(value)) {
@@ -7455,6 +9089,10 @@ static PyObject *py_ncacn_packet_get_rpc_vers_minor(PyObject *obj, void *closure
 static int py_ncacn_packet_set_rpc_vers_minor(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct ncacn_packet *object = (struct ncacn_packet *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->rpc_vers_minor");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->rpc_vers_minor));
                if (PyLong_Check(value)) {
@@ -7498,6 +9136,10 @@ static PyObject *py_ncacn_packet_get_ptype(PyObject *obj, void *closure)
 static int py_ncacn_packet_set_ptype(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct ncacn_packet *object = (struct ncacn_packet *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->ptype");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->ptype));
                if (PyLong_Check(value)) {
@@ -7541,6 +9183,10 @@ static PyObject *py_ncacn_packet_get_pfc_flags(PyObject *obj, void *closure)
 static int py_ncacn_packet_set_pfc_flags(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct ncacn_packet *object = (struct ncacn_packet *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->pfc_flags");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->pfc_flags));
                if (PyLong_Check(value)) {
@@ -7595,6 +9241,10 @@ static PyObject *py_ncacn_packet_get_drep(PyObject *obj, void *closure)
 static int py_ncacn_packet_set_drep(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct ncacn_packet *object = (struct ncacn_packet *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->drep");
+               return -1;
+       }
        PY_CHECK_TYPE(&PyList_Type, value, return -1;);
        {
                int drep_cntr_0;
@@ -7603,6 +9253,10 @@ static int py_ncacn_packet_set_drep(PyObject *py_obj, PyObject *value, void *clo
                        return -1;
                }
                for (drep_cntr_0 = 0; drep_cntr_0 < PyList_GET_SIZE(value); drep_cntr_0++) {
+                       if (PyList_GET_ITEM(value, drep_cntr_0) == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->drep[drep_cntr_0]");
+                               return -1;
+                       }
                        {
                                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->drep[drep_cntr_0]));
                                if (PyLong_Check(PyList_GET_ITEM(value, drep_cntr_0))) {
@@ -7648,6 +9302,10 @@ static PyObject *py_ncacn_packet_get_frag_length(PyObject *obj, void *closure)
 static int py_ncacn_packet_set_frag_length(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct ncacn_packet *object = (struct ncacn_packet *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->frag_length");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->frag_length));
                if (PyLong_Check(value)) {
@@ -7691,6 +9349,10 @@ static PyObject *py_ncacn_packet_get_auth_length(PyObject *obj, void *closure)
 static int py_ncacn_packet_set_auth_length(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct ncacn_packet *object = (struct ncacn_packet *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->auth_length");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->auth_length));
                if (PyLong_Check(value)) {
@@ -7734,6 +9396,10 @@ static PyObject *py_ncacn_packet_get_call_id(PyObject *obj, void *closure)
 static int py_ncacn_packet_set_call_id(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct ncacn_packet *object = (struct ncacn_packet *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->call_id");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->call_id));
                if (PyLong_Check(value)) {
@@ -7780,6 +9446,10 @@ static PyObject *py_ncacn_packet_get_u(PyObject *obj, void *closure)
 static int py_ncacn_packet_set_u(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct ncacn_packet *object = (struct ncacn_packet *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->u");
+               return -1;
+       }
        {
                union dcerpc_payload *u_switch_0;
                u_switch_0 = py_export_dcerpc_payload(pytalloc_get_mem_ctx(py_obj), object->ptype, value);
@@ -7792,16 +9462,61 @@ static int py_ncacn_packet_set_u(PyObject *py_obj, PyObject *value, void *closur
 }
 
 static PyGetSetDef py_ncacn_packet_getsetters[] = {
-       { discard_const_p(char, "rpc_vers"), py_ncacn_packet_get_rpc_vers, py_ncacn_packet_set_rpc_vers },
-       { discard_const_p(char, "rpc_vers_minor"), py_ncacn_packet_get_rpc_vers_minor, py_ncacn_packet_set_rpc_vers_minor },
-       { discard_const_p(char, "ptype"), py_ncacn_packet_get_ptype, py_ncacn_packet_set_ptype },
-       { discard_const_p(char, "pfc_flags"), py_ncacn_packet_get_pfc_flags, py_ncacn_packet_set_pfc_flags },
-       { discard_const_p(char, "drep"), py_ncacn_packet_get_drep, py_ncacn_packet_set_drep },
-       { discard_const_p(char, "frag_length"), py_ncacn_packet_get_frag_length, py_ncacn_packet_set_frag_length },
-       { discard_const_p(char, "auth_length"), py_ncacn_packet_get_auth_length, py_ncacn_packet_set_auth_length },
-       { discard_const_p(char, "call_id"), py_ncacn_packet_get_call_id, py_ncacn_packet_set_call_id },
-       { discard_const_p(char, "u"), py_ncacn_packet_get_u, py_ncacn_packet_set_u },
-       { NULL }
+       {
+               .name = discard_const_p(char, "rpc_vers"),
+               .get = py_ncacn_packet_get_rpc_vers,
+               .set = py_ncacn_packet_set_rpc_vers,
+               .doc = discard_const_p(char, "PIDL-generated element rpc_vers")
+       },
+       {
+               .name = discard_const_p(char, "rpc_vers_minor"),
+               .get = py_ncacn_packet_get_rpc_vers_minor,
+               .set = py_ncacn_packet_set_rpc_vers_minor,
+               .doc = discard_const_p(char, "PIDL-generated element rpc_vers_minor")
+       },
+       {
+               .name = discard_const_p(char, "ptype"),
+               .get = py_ncacn_packet_get_ptype,
+               .set = py_ncacn_packet_set_ptype,
+               .doc = discard_const_p(char, "PIDL-generated element ptype")
+       },
+       {
+               .name = discard_const_p(char, "pfc_flags"),
+               .get = py_ncacn_packet_get_pfc_flags,
+               .set = py_ncacn_packet_set_pfc_flags,
+               .doc = discard_const_p(char, "PIDL-generated element pfc_flags")
+       },
+       {
+               .name = discard_const_p(char, "drep"),
+               .get = py_ncacn_packet_get_drep,
+               .set = py_ncacn_packet_set_drep,
+               .doc = discard_const_p(char, "PIDL-generated element drep")
+       },
+       {
+               .name = discard_const_p(char, "frag_length"),
+               .get = py_ncacn_packet_get_frag_length,
+               .set = py_ncacn_packet_set_frag_length,
+               .doc = discard_const_p(char, "PIDL-generated element frag_length")
+       },
+       {
+               .name = discard_const_p(char, "auth_length"),
+               .get = py_ncacn_packet_get_auth_length,
+               .set = py_ncacn_packet_set_auth_length,
+               .doc = discard_const_p(char, "PIDL-generated element auth_length")
+       },
+       {
+               .name = discard_const_p(char, "call_id"),
+               .get = py_ncacn_packet_get_call_id,
+               .set = py_ncacn_packet_set_call_id,
+               .doc = discard_const_p(char, "PIDL-generated element call_id")
+       },
+       {
+               .name = discard_const_p(char, "u"),
+               .get = py_ncacn_packet_get_u,
+               .set = py_ncacn_packet_set_u,
+               .doc = discard_const_p(char, "PIDL-generated element u")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_ncacn_packet_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -7812,22 +9527,31 @@ static PyObject *py_ncacn_packet_new(PyTypeObject *type, PyObject *args, PyObjec
 static PyObject *py_ncacn_packet_ndr_pack(PyObject *py_obj)
 {
        struct ncacn_packet *object = (struct ncacn_packet *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_ncacn_packet);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_ncacn_packet);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_ncacn_packet_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct ncacn_packet *object = (struct ncacn_packet *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -7885,7 +9609,6 @@ static PyTypeObject ncacn_packet_Type = {
        .tp_getset = py_ncacn_packet_getsetters,
        .tp_methods = py_ncacn_packet_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_ncacn_packet_new,
 };
 
@@ -7901,6 +9624,10 @@ static PyObject *py_ncadg_packet_get_rpc_vers(PyObject *obj, void *closure)
 static int py_ncadg_packet_set_rpc_vers(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct ncadg_packet *object = (struct ncadg_packet *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->rpc_vers");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->rpc_vers));
                if (PyLong_Check(value)) {
@@ -7944,6 +9671,10 @@ static PyObject *py_ncadg_packet_get_ptype(PyObject *obj, void *closure)
 static int py_ncadg_packet_set_ptype(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct ncadg_packet *object = (struct ncadg_packet *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->ptype");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->ptype));
                if (PyLong_Check(value)) {
@@ -7987,6 +9718,10 @@ static PyObject *py_ncadg_packet_get_pfc_flags(PyObject *obj, void *closure)
 static int py_ncadg_packet_set_pfc_flags(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct ncadg_packet *object = (struct ncadg_packet *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->pfc_flags");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->pfc_flags));
                if (PyLong_Check(value)) {
@@ -8030,6 +9765,10 @@ static PyObject *py_ncadg_packet_get_ncadg_flags(PyObject *obj, void *closure)
 static int py_ncadg_packet_set_ncadg_flags(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct ncadg_packet *object = (struct ncadg_packet *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->ncadg_flags");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->ncadg_flags));
                if (PyLong_Check(value)) {
@@ -8084,6 +9823,10 @@ static PyObject *py_ncadg_packet_get_drep(PyObject *obj, void *closure)
 static int py_ncadg_packet_set_drep(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct ncadg_packet *object = (struct ncadg_packet *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->drep");
+               return -1;
+       }
        PY_CHECK_TYPE(&PyList_Type, value, return -1;);
        {
                int drep_cntr_0;
@@ -8092,6 +9835,10 @@ static int py_ncadg_packet_set_drep(PyObject *py_obj, PyObject *value, void *clo
                        return -1;
                }
                for (drep_cntr_0 = 0; drep_cntr_0 < PyList_GET_SIZE(value); drep_cntr_0++) {
+                       if (PyList_GET_ITEM(value, drep_cntr_0) == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->drep[drep_cntr_0]");
+                               return -1;
+                       }
                        {
                                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->drep[drep_cntr_0]));
                                if (PyLong_Check(PyList_GET_ITEM(value, drep_cntr_0))) {
@@ -8137,6 +9884,10 @@ static PyObject *py_ncadg_packet_get_serial_high(PyObject *obj, void *closure)
 static int py_ncadg_packet_set_serial_high(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct ncadg_packet *object = (struct ncadg_packet *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->serial_high");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->serial_high));
                if (PyLong_Check(value)) {
@@ -8180,6 +9931,10 @@ static PyObject *py_ncadg_packet_get_object(PyObject *obj, void *closure)
 static int py_ncadg_packet_set_object(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct ncadg_packet *object = (struct ncadg_packet *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->object");
+               return -1;
+       }
        PY_CHECK_TYPE(GUID_Type, value, return -1;);
        if (talloc_reference(pytalloc_get_mem_ctx(py_obj), pytalloc_get_mem_ctx(value)) == NULL) {
                PyErr_NoMemory();
@@ -8200,6 +9955,10 @@ static PyObject *py_ncadg_packet_get_iface(PyObject *obj, void *closure)
 static int py_ncadg_packet_set_iface(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct ncadg_packet *object = (struct ncadg_packet *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->iface");
+               return -1;
+       }
        PY_CHECK_TYPE(GUID_Type, value, return -1;);
        if (talloc_reference(pytalloc_get_mem_ctx(py_obj), pytalloc_get_mem_ctx(value)) == NULL) {
                PyErr_NoMemory();
@@ -8220,6 +9979,10 @@ static PyObject *py_ncadg_packet_get_activity(PyObject *obj, void *closure)
 static int py_ncadg_packet_set_activity(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct ncadg_packet *object = (struct ncadg_packet *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->activity");
+               return -1;
+       }
        PY_CHECK_TYPE(GUID_Type, value, return -1;);
        if (talloc_reference(pytalloc_get_mem_ctx(py_obj), pytalloc_get_mem_ctx(value)) == NULL) {
                PyErr_NoMemory();
@@ -8240,6 +10003,10 @@ static PyObject *py_ncadg_packet_get_server_boot(PyObject *obj, void *closure)
 static int py_ncadg_packet_set_server_boot(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct ncadg_packet *object = (struct ncadg_packet *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->server_boot");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->server_boot));
                if (PyLong_Check(value)) {
@@ -8283,6 +10050,10 @@ static PyObject *py_ncadg_packet_get_iface_version(PyObject *obj, void *closure)
 static int py_ncadg_packet_set_iface_version(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct ncadg_packet *object = (struct ncadg_packet *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->iface_version");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->iface_version));
                if (PyLong_Check(value)) {
@@ -8326,6 +10097,10 @@ static PyObject *py_ncadg_packet_get_seq_num(PyObject *obj, void *closure)
 static int py_ncadg_packet_set_seq_num(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct ncadg_packet *object = (struct ncadg_packet *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->seq_num");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->seq_num));
                if (PyLong_Check(value)) {
@@ -8369,6 +10144,10 @@ static PyObject *py_ncadg_packet_get_opnum(PyObject *obj, void *closure)
 static int py_ncadg_packet_set_opnum(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct ncadg_packet *object = (struct ncadg_packet *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->opnum");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->opnum));
                if (PyLong_Check(value)) {
@@ -8412,6 +10191,10 @@ static PyObject *py_ncadg_packet_get_ihint(PyObject *obj, void *closure)
 static int py_ncadg_packet_set_ihint(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct ncadg_packet *object = (struct ncadg_packet *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->ihint");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->ihint));
                if (PyLong_Check(value)) {
@@ -8455,6 +10238,10 @@ static PyObject *py_ncadg_packet_get_ahint(PyObject *obj, void *closure)
 static int py_ncadg_packet_set_ahint(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct ncadg_packet *object = (struct ncadg_packet *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->ahint");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->ahint));
                if (PyLong_Check(value)) {
@@ -8498,6 +10285,10 @@ static PyObject *py_ncadg_packet_get_len(PyObject *obj, void *closure)
 static int py_ncadg_packet_set_len(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct ncadg_packet *object = (struct ncadg_packet *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->len");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->len));
                if (PyLong_Check(value)) {
@@ -8541,6 +10332,10 @@ static PyObject *py_ncadg_packet_get_fragnum(PyObject *obj, void *closure)
 static int py_ncadg_packet_set_fragnum(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct ncadg_packet *object = (struct ncadg_packet *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->fragnum");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->fragnum));
                if (PyLong_Check(value)) {
@@ -8584,6 +10379,10 @@ static PyObject *py_ncadg_packet_get_auth_proto(PyObject *obj, void *closure)
 static int py_ncadg_packet_set_auth_proto(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct ncadg_packet *object = (struct ncadg_packet *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->auth_proto");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->auth_proto));
                if (PyLong_Check(value)) {
@@ -8627,6 +10426,10 @@ static PyObject *py_ncadg_packet_get_serial_low(PyObject *obj, void *closure)
 static int py_ncadg_packet_set_serial_low(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct ncadg_packet *object = (struct ncadg_packet *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->serial_low");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->serial_low));
                if (PyLong_Check(value)) {
@@ -8673,6 +10476,10 @@ static PyObject *py_ncadg_packet_get_u(PyObject *obj, void *closure)
 static int py_ncadg_packet_set_u(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct ncadg_packet *object = (struct ncadg_packet *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->u");
+               return -1;
+       }
        {
                union dcerpc_payload *u_switch_0;
                u_switch_0 = py_export_dcerpc_payload(pytalloc_get_mem_ctx(py_obj), object->ptype, value);
@@ -8685,27 +10492,127 @@ static int py_ncadg_packet_set_u(PyObject *py_obj, PyObject *value, void *closur
 }
 
 static PyGetSetDef py_ncadg_packet_getsetters[] = {
-       { discard_const_p(char, "rpc_vers"), py_ncadg_packet_get_rpc_vers, py_ncadg_packet_set_rpc_vers },
-       { discard_const_p(char, "ptype"), py_ncadg_packet_get_ptype, py_ncadg_packet_set_ptype },
-       { discard_const_p(char, "pfc_flags"), py_ncadg_packet_get_pfc_flags, py_ncadg_packet_set_pfc_flags },
-       { discard_const_p(char, "ncadg_flags"), py_ncadg_packet_get_ncadg_flags, py_ncadg_packet_set_ncadg_flags },
-       { discard_const_p(char, "drep"), py_ncadg_packet_get_drep, py_ncadg_packet_set_drep },
-       { discard_const_p(char, "serial_high"), py_ncadg_packet_get_serial_high, py_ncadg_packet_set_serial_high },
-       { discard_const_p(char, "object"), py_ncadg_packet_get_object, py_ncadg_packet_set_object },
-       { discard_const_p(char, "iface"), py_ncadg_packet_get_iface, py_ncadg_packet_set_iface },
-       { discard_const_p(char, "activity"), py_ncadg_packet_get_activity, py_ncadg_packet_set_activity },
-       { discard_const_p(char, "server_boot"), py_ncadg_packet_get_server_boot, py_ncadg_packet_set_server_boot },
-       { discard_const_p(char, "iface_version"), py_ncadg_packet_get_iface_version, py_ncadg_packet_set_iface_version },
-       { discard_const_p(char, "seq_num"), py_ncadg_packet_get_seq_num, py_ncadg_packet_set_seq_num },
-       { discard_const_p(char, "opnum"), py_ncadg_packet_get_opnum, py_ncadg_packet_set_opnum },
-       { discard_const_p(char, "ihint"), py_ncadg_packet_get_ihint, py_ncadg_packet_set_ihint },
-       { discard_const_p(char, "ahint"), py_ncadg_packet_get_ahint, py_ncadg_packet_set_ahint },
-       { discard_const_p(char, "len"), py_ncadg_packet_get_len, py_ncadg_packet_set_len },
-       { discard_const_p(char, "fragnum"), py_ncadg_packet_get_fragnum, py_ncadg_packet_set_fragnum },
-       { discard_const_p(char, "auth_proto"), py_ncadg_packet_get_auth_proto, py_ncadg_packet_set_auth_proto },
-       { discard_const_p(char, "serial_low"), py_ncadg_packet_get_serial_low, py_ncadg_packet_set_serial_low },
-       { discard_const_p(char, "u"), py_ncadg_packet_get_u, py_ncadg_packet_set_u },
-       { NULL }
+       {
+               .name = discard_const_p(char, "rpc_vers"),
+               .get = py_ncadg_packet_get_rpc_vers,
+               .set = py_ncadg_packet_set_rpc_vers,
+               .doc = discard_const_p(char, "PIDL-generated element rpc_vers")
+       },
+       {
+               .name = discard_const_p(char, "ptype"),
+               .get = py_ncadg_packet_get_ptype,
+               .set = py_ncadg_packet_set_ptype,
+               .doc = discard_const_p(char, "PIDL-generated element ptype")
+       },
+       {
+               .name = discard_const_p(char, "pfc_flags"),
+               .get = py_ncadg_packet_get_pfc_flags,
+               .set = py_ncadg_packet_set_pfc_flags,
+               .doc = discard_const_p(char, "PIDL-generated element pfc_flags")
+       },
+       {
+               .name = discard_const_p(char, "ncadg_flags"),
+               .get = py_ncadg_packet_get_ncadg_flags,
+               .set = py_ncadg_packet_set_ncadg_flags,
+               .doc = discard_const_p(char, "PIDL-generated element ncadg_flags")
+       },
+       {
+               .name = discard_const_p(char, "drep"),
+               .get = py_ncadg_packet_get_drep,
+               .set = py_ncadg_packet_set_drep,
+               .doc = discard_const_p(char, "PIDL-generated element drep")
+       },
+       {
+               .name = discard_const_p(char, "serial_high"),
+               .get = py_ncadg_packet_get_serial_high,
+               .set = py_ncadg_packet_set_serial_high,
+               .doc = discard_const_p(char, "PIDL-generated element serial_high")
+       },
+       {
+               .name = discard_const_p(char, "object"),
+               .get = py_ncadg_packet_get_object,
+               .set = py_ncadg_packet_set_object,
+               .doc = discard_const_p(char, "PIDL-generated element object")
+       },
+       {
+               .name = discard_const_p(char, "iface"),
+               .get = py_ncadg_packet_get_iface,
+               .set = py_ncadg_packet_set_iface,
+               .doc = discard_const_p(char, "PIDL-generated element iface")
+       },
+       {
+               .name = discard_const_p(char, "activity"),
+               .get = py_ncadg_packet_get_activity,
+               .set = py_ncadg_packet_set_activity,
+               .doc = discard_const_p(char, "PIDL-generated element activity")
+       },
+       {
+               .name = discard_const_p(char, "server_boot"),
+               .get = py_ncadg_packet_get_server_boot,
+               .set = py_ncadg_packet_set_server_boot,
+               .doc = discard_const_p(char, "PIDL-generated element server_boot")
+       },
+       {
+               .name = discard_const_p(char, "iface_version"),
+               .get = py_ncadg_packet_get_iface_version,
+               .set = py_ncadg_packet_set_iface_version,
+               .doc = discard_const_p(char, "PIDL-generated element iface_version")
+       },
+       {
+               .name = discard_const_p(char, "seq_num"),
+               .get = py_ncadg_packet_get_seq_num,
+               .set = py_ncadg_packet_set_seq_num,
+               .doc = discard_const_p(char, "PIDL-generated element seq_num")
+       },
+       {
+               .name = discard_const_p(char, "opnum"),
+               .get = py_ncadg_packet_get_opnum,
+               .set = py_ncadg_packet_set_opnum,
+               .doc = discard_const_p(char, "PIDL-generated element opnum")
+       },
+       {
+               .name = discard_const_p(char, "ihint"),
+               .get = py_ncadg_packet_get_ihint,
+               .set = py_ncadg_packet_set_ihint,
+               .doc = discard_const_p(char, "PIDL-generated element ihint")
+       },
+       {
+               .name = discard_const_p(char, "ahint"),
+               .get = py_ncadg_packet_get_ahint,
+               .set = py_ncadg_packet_set_ahint,
+               .doc = discard_const_p(char, "PIDL-generated element ahint")
+       },
+       {
+               .name = discard_const_p(char, "len"),
+               .get = py_ncadg_packet_get_len,
+               .set = py_ncadg_packet_set_len,
+               .doc = discard_const_p(char, "PIDL-generated element len")
+       },
+       {
+               .name = discard_const_p(char, "fragnum"),
+               .get = py_ncadg_packet_get_fragnum,
+               .set = py_ncadg_packet_set_fragnum,
+               .doc = discard_const_p(char, "PIDL-generated element fragnum")
+       },
+       {
+               .name = discard_const_p(char, "auth_proto"),
+               .get = py_ncadg_packet_get_auth_proto,
+               .set = py_ncadg_packet_set_auth_proto,
+               .doc = discard_const_p(char, "PIDL-generated element auth_proto")
+       },
+       {
+               .name = discard_const_p(char, "serial_low"),
+               .get = py_ncadg_packet_get_serial_low,
+               .set = py_ncadg_packet_set_serial_low,
+               .doc = discard_const_p(char, "PIDL-generated element serial_low")
+       },
+       {
+               .name = discard_const_p(char, "u"),
+               .get = py_ncadg_packet_get_u,
+               .set = py_ncadg_packet_set_u,
+               .doc = discard_const_p(char, "PIDL-generated element u")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_ncadg_packet_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -8716,22 +10623,31 @@ static PyObject *py_ncadg_packet_new(PyTypeObject *type, PyObject *args, PyObjec
 static PyObject *py_ncadg_packet_ndr_pack(PyObject *py_obj)
 {
        struct ncadg_packet *object = (struct ncadg_packet *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_ncadg_packet);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_ncadg_packet);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_ncadg_packet_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct ncadg_packet *object = (struct ncadg_packet *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -8789,7 +10705,6 @@ static PyTypeObject ncadg_packet_Type = {
        .tp_getset = py_ncadg_packet_getsetters,
        .tp_methods = py_ncadg_packet_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_ncadg_packet_new,
 };
 
@@ -8805,6 +10720,10 @@ static PyObject *py_dcerpc_sec_vt_pcontext_get_abstract_syntax(PyObject *obj, vo
 static int py_dcerpc_sec_vt_pcontext_set_abstract_syntax(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_sec_vt_pcontext *object = (struct dcerpc_sec_vt_pcontext *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->abstract_syntax");
+               return -1;
+       }
        PY_CHECK_TYPE(ndr_syntax_id_Type, value, return -1;);
        if (talloc_reference(pytalloc_get_mem_ctx(py_obj), pytalloc_get_mem_ctx(value)) == NULL) {
                PyErr_NoMemory();
@@ -8825,6 +10744,10 @@ static PyObject *py_dcerpc_sec_vt_pcontext_get_transfer_syntax(PyObject *obj, vo
 static int py_dcerpc_sec_vt_pcontext_set_transfer_syntax(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_sec_vt_pcontext *object = (struct dcerpc_sec_vt_pcontext *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->transfer_syntax");
+               return -1;
+       }
        PY_CHECK_TYPE(ndr_syntax_id_Type, value, return -1;);
        if (talloc_reference(pytalloc_get_mem_ctx(py_obj), pytalloc_get_mem_ctx(value)) == NULL) {
                PyErr_NoMemory();
@@ -8835,9 +10758,19 @@ static int py_dcerpc_sec_vt_pcontext_set_transfer_syntax(PyObject *py_obj, PyObj
 }
 
 static PyGetSetDef py_dcerpc_sec_vt_pcontext_getsetters[] = {
-       { discard_const_p(char, "abstract_syntax"), py_dcerpc_sec_vt_pcontext_get_abstract_syntax, py_dcerpc_sec_vt_pcontext_set_abstract_syntax },
-       { discard_const_p(char, "transfer_syntax"), py_dcerpc_sec_vt_pcontext_get_transfer_syntax, py_dcerpc_sec_vt_pcontext_set_transfer_syntax },
-       { NULL }
+       {
+               .name = discard_const_p(char, "abstract_syntax"),
+               .get = py_dcerpc_sec_vt_pcontext_get_abstract_syntax,
+               .set = py_dcerpc_sec_vt_pcontext_set_abstract_syntax,
+               .doc = discard_const_p(char, "PIDL-generated element abstract_syntax")
+       },
+       {
+               .name = discard_const_p(char, "transfer_syntax"),
+               .get = py_dcerpc_sec_vt_pcontext_get_transfer_syntax,
+               .set = py_dcerpc_sec_vt_pcontext_set_transfer_syntax,
+               .doc = discard_const_p(char, "PIDL-generated element transfer_syntax")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_sec_vt_pcontext_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -8852,7 +10785,6 @@ static PyTypeObject dcerpc_sec_vt_pcontext_Type = {
        .tp_getset = py_dcerpc_sec_vt_pcontext_getsetters,
        .tp_methods = NULL,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_sec_vt_pcontext_new,
 };
 
@@ -8868,6 +10800,10 @@ static PyObject *py_dcerpc_sec_vt_header2_get_ptype(PyObject *obj, void *closure
 static int py_dcerpc_sec_vt_header2_set_ptype(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_sec_vt_header2 *object = (struct dcerpc_sec_vt_header2 *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->ptype");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->ptype));
                if (PyLong_Check(value)) {
@@ -8911,6 +10847,10 @@ static PyObject *py_dcerpc_sec_vt_header2_get_reserved1(PyObject *obj, void *clo
 static int py_dcerpc_sec_vt_header2_set_reserved1(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_sec_vt_header2 *object = (struct dcerpc_sec_vt_header2 *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->reserved1");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->reserved1));
                if (PyLong_Check(value)) {
@@ -8954,6 +10894,10 @@ static PyObject *py_dcerpc_sec_vt_header2_get_reserved2(PyObject *obj, void *clo
 static int py_dcerpc_sec_vt_header2_set_reserved2(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_sec_vt_header2 *object = (struct dcerpc_sec_vt_header2 *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->reserved2");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->reserved2));
                if (PyLong_Check(value)) {
@@ -9008,6 +10952,10 @@ static PyObject *py_dcerpc_sec_vt_header2_get_drep(PyObject *obj, void *closure)
 static int py_dcerpc_sec_vt_header2_set_drep(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_sec_vt_header2 *object = (struct dcerpc_sec_vt_header2 *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->drep");
+               return -1;
+       }
        PY_CHECK_TYPE(&PyList_Type, value, return -1;);
        {
                int drep_cntr_0;
@@ -9016,6 +10964,10 @@ static int py_dcerpc_sec_vt_header2_set_drep(PyObject *py_obj, PyObject *value,
                        return -1;
                }
                for (drep_cntr_0 = 0; drep_cntr_0 < PyList_GET_SIZE(value); drep_cntr_0++) {
+                       if (PyList_GET_ITEM(value, drep_cntr_0) == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->drep[drep_cntr_0]");
+                               return -1;
+                       }
                        {
                                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->drep[drep_cntr_0]));
                                if (PyLong_Check(PyList_GET_ITEM(value, drep_cntr_0))) {
@@ -9061,6 +11013,10 @@ static PyObject *py_dcerpc_sec_vt_header2_get_call_id(PyObject *obj, void *closu
 static int py_dcerpc_sec_vt_header2_set_call_id(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_sec_vt_header2 *object = (struct dcerpc_sec_vt_header2 *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->call_id");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->call_id));
                if (PyLong_Check(value)) {
@@ -9104,6 +11060,10 @@ static PyObject *py_dcerpc_sec_vt_header2_get_context_id(PyObject *obj, void *cl
 static int py_dcerpc_sec_vt_header2_set_context_id(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_sec_vt_header2 *object = (struct dcerpc_sec_vt_header2 *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->context_id");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->context_id));
                if (PyLong_Check(value)) {
@@ -9147,6 +11107,10 @@ static PyObject *py_dcerpc_sec_vt_header2_get_opnum(PyObject *obj, void *closure
 static int py_dcerpc_sec_vt_header2_set_opnum(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_sec_vt_header2 *object = (struct dcerpc_sec_vt_header2 *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->opnum");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->opnum));
                if (PyLong_Check(value)) {
@@ -9180,14 +11144,49 @@ static int py_dcerpc_sec_vt_header2_set_opnum(PyObject *py_obj, PyObject *value,
 }
 
 static PyGetSetDef py_dcerpc_sec_vt_header2_getsetters[] = {
-       { discard_const_p(char, "ptype"), py_dcerpc_sec_vt_header2_get_ptype, py_dcerpc_sec_vt_header2_set_ptype },
-       { discard_const_p(char, "reserved1"), py_dcerpc_sec_vt_header2_get_reserved1, py_dcerpc_sec_vt_header2_set_reserved1 },
-       { discard_const_p(char, "reserved2"), py_dcerpc_sec_vt_header2_get_reserved2, py_dcerpc_sec_vt_header2_set_reserved2 },
-       { discard_const_p(char, "drep"), py_dcerpc_sec_vt_header2_get_drep, py_dcerpc_sec_vt_header2_set_drep },
-       { discard_const_p(char, "call_id"), py_dcerpc_sec_vt_header2_get_call_id, py_dcerpc_sec_vt_header2_set_call_id },
-       { discard_const_p(char, "context_id"), py_dcerpc_sec_vt_header2_get_context_id, py_dcerpc_sec_vt_header2_set_context_id },
-       { discard_const_p(char, "opnum"), py_dcerpc_sec_vt_header2_get_opnum, py_dcerpc_sec_vt_header2_set_opnum },
-       { NULL }
+       {
+               .name = discard_const_p(char, "ptype"),
+               .get = py_dcerpc_sec_vt_header2_get_ptype,
+               .set = py_dcerpc_sec_vt_header2_set_ptype,
+               .doc = discard_const_p(char, "PIDL-generated element ptype")
+       },
+       {
+               .name = discard_const_p(char, "reserved1"),
+               .get = py_dcerpc_sec_vt_header2_get_reserved1,
+               .set = py_dcerpc_sec_vt_header2_set_reserved1,
+               .doc = discard_const_p(char, "PIDL-generated element reserved1")
+       },
+       {
+               .name = discard_const_p(char, "reserved2"),
+               .get = py_dcerpc_sec_vt_header2_get_reserved2,
+               .set = py_dcerpc_sec_vt_header2_set_reserved2,
+               .doc = discard_const_p(char, "PIDL-generated element reserved2")
+       },
+       {
+               .name = discard_const_p(char, "drep"),
+               .get = py_dcerpc_sec_vt_header2_get_drep,
+               .set = py_dcerpc_sec_vt_header2_set_drep,
+               .doc = discard_const_p(char, "PIDL-generated element drep")
+       },
+       {
+               .name = discard_const_p(char, "call_id"),
+               .get = py_dcerpc_sec_vt_header2_get_call_id,
+               .set = py_dcerpc_sec_vt_header2_set_call_id,
+               .doc = discard_const_p(char, "PIDL-generated element call_id")
+       },
+       {
+               .name = discard_const_p(char, "context_id"),
+               .get = py_dcerpc_sec_vt_header2_get_context_id,
+               .set = py_dcerpc_sec_vt_header2_set_context_id,
+               .doc = discard_const_p(char, "PIDL-generated element context_id")
+       },
+       {
+               .name = discard_const_p(char, "opnum"),
+               .get = py_dcerpc_sec_vt_header2_get_opnum,
+               .set = py_dcerpc_sec_vt_header2_set_opnum,
+               .doc = discard_const_p(char, "PIDL-generated element opnum")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_sec_vt_header2_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -9202,7 +11201,6 @@ static PyTypeObject dcerpc_sec_vt_header2_Type = {
        .tp_getset = py_dcerpc_sec_vt_header2_getsetters,
        .tp_methods = NULL,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_sec_vt_header2_new,
 };
 
@@ -9237,6 +11235,10 @@ union dcerpc_sec_vt_union *py_export_dcerpc_sec_vt_union(TALLOC_CTX *mem_ctx, in
        union dcerpc_sec_vt_union *ret = talloc_zero(mem_ctx, union dcerpc_sec_vt_union);
        switch (level) {
                case DCERPC_SEC_VT_COMMAND_BITMASK1:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->bitmask1");
+                               talloc_free(ret); return NULL;
+                       }
                        {
                                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(ret->bitmask1));
                                if (PyLong_Check(in)) {
@@ -9269,6 +11271,10 @@ union dcerpc_sec_vt_union *py_export_dcerpc_sec_vt_union(TALLOC_CTX *mem_ctx, in
                        break;
 
                case DCERPC_SEC_VT_COMMAND_PCONTEXT:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->pcontext");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_sec_vt_pcontext_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -9278,6 +11284,10 @@ union dcerpc_sec_vt_union *py_export_dcerpc_sec_vt_union(TALLOC_CTX *mem_ctx, in
                        break;
 
                case DCERPC_SEC_VT_COMMAND_HEADER2:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->header2");
+                               talloc_free(ret); return NULL;
+                       }
                        PY_CHECK_TYPE(&dcerpc_sec_vt_header2_Type, in, talloc_free(ret); return NULL;);
                        if (talloc_reference(mem_ctx, pytalloc_get_mem_ctx(in)) == NULL) {
                                PyErr_NoMemory();
@@ -9287,6 +11297,10 @@ union dcerpc_sec_vt_union *py_export_dcerpc_sec_vt_union(TALLOC_CTX *mem_ctx, in
                        break;
 
                default:
+                       if (in == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct ret->_unknown");
+                               talloc_free(ret); return NULL;
+                       }
                        ret->_unknown = data_blob_talloc(mem_ctx, PyString_AS_STRING(in), PyString_GET_SIZE(in));
                        break;
 
@@ -9307,6 +11321,10 @@ static PyObject *py_dcerpc_sec_vt_get_command(PyObject *obj, void *closure)
 static int py_dcerpc_sec_vt_set_command(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_sec_vt *object = (struct dcerpc_sec_vt *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->command");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->command));
                if (PyLong_Check(value)) {
@@ -9353,6 +11371,14 @@ static PyObject *py_dcerpc_sec_vt_get_u(PyObject *obj, void *closure)
 static int py_dcerpc_sec_vt_set_u(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_sec_vt *object = (struct dcerpc_sec_vt *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->u");
+               return -1;
+       }
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->u");
+               return -1;
+       }
        {
                union dcerpc_sec_vt_union *u_switch_1;
                u_switch_1 = py_export_dcerpc_sec_vt_union(pytalloc_get_mem_ctx(py_obj), object->command & DCERPC_SEC_VT_COMMAND_ENUM, value);
@@ -9365,9 +11391,19 @@ static int py_dcerpc_sec_vt_set_u(PyObject *py_obj, PyObject *value, void *closu
 }
 
 static PyGetSetDef py_dcerpc_sec_vt_getsetters[] = {
-       { discard_const_p(char, "command"), py_dcerpc_sec_vt_get_command, py_dcerpc_sec_vt_set_command },
-       { discard_const_p(char, "u"), py_dcerpc_sec_vt_get_u, py_dcerpc_sec_vt_set_u },
-       { NULL }
+       {
+               .name = discard_const_p(char, "command"),
+               .get = py_dcerpc_sec_vt_get_command,
+               .set = py_dcerpc_sec_vt_set_command,
+               .doc = discard_const_p(char, "PIDL-generated element command")
+       },
+       {
+               .name = discard_const_p(char, "u"),
+               .get = py_dcerpc_sec_vt_get_u,
+               .set = py_dcerpc_sec_vt_set_u,
+               .doc = discard_const_p(char, "PIDL-generated element u")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_sec_vt_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -9382,7 +11418,6 @@ static PyTypeObject dcerpc_sec_vt_Type = {
        .tp_getset = py_dcerpc_sec_vt_getsetters,
        .tp_methods = NULL,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_sec_vt_new,
 };
 
@@ -9398,6 +11433,10 @@ static PyObject *py_dcerpc_sec_vt_count_get_count(PyObject *obj, void *closure)
 static int py_dcerpc_sec_vt_count_set_count(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_sec_vt_count *object = (struct dcerpc_sec_vt_count *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->count");
+               return -1;
+       }
        {
                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->count));
                if (PyLong_Check(value)) {
@@ -9431,8 +11470,13 @@ static int py_dcerpc_sec_vt_count_set_count(PyObject *py_obj, PyObject *value, v
 }
 
 static PyGetSetDef py_dcerpc_sec_vt_count_getsetters[] = {
-       { discard_const_p(char, "count"), py_dcerpc_sec_vt_count_get_count, py_dcerpc_sec_vt_count_set_count },
-       { NULL }
+       {
+               .name = discard_const_p(char, "count"),
+               .get = py_dcerpc_sec_vt_count_get_count,
+               .set = py_dcerpc_sec_vt_count_set_count,
+               .doc = discard_const_p(char, "PIDL-generated element count")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_sec_vt_count_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -9443,22 +11487,31 @@ static PyObject *py_dcerpc_sec_vt_count_new(PyTypeObject *type, PyObject *args,
 static PyObject *py_dcerpc_sec_vt_count_ndr_pack(PyObject *py_obj)
 {
        struct dcerpc_sec_vt_count *object = (struct dcerpc_sec_vt_count *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_dcerpc_sec_vt_count);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_sec_vt_count);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_dcerpc_sec_vt_count_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct dcerpc_sec_vt_count *object = (struct dcerpc_sec_vt_count *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -9516,7 +11569,6 @@ static PyTypeObject dcerpc_sec_vt_count_Type = {
        .tp_getset = py_dcerpc_sec_vt_count_getsetters,
        .tp_methods = py_dcerpc_sec_vt_count_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_sec_vt_count_new,
 };
 
@@ -9532,6 +11584,10 @@ static PyObject *py_dcerpc_sec_verification_trailer_get__pad(PyObject *obj, void
 static int py_dcerpc_sec_verification_trailer_set__pad(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_sec_verification_trailer *object = (struct dcerpc_sec_verification_trailer *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->_pad");
+               return -1;
+       }
        object->_pad = data_blob_talloc(pytalloc_get_mem_ctx(py_obj), PyString_AS_STRING(value), PyString_GET_SIZE(value));
        return 0;
 }
@@ -9558,6 +11614,10 @@ static PyObject *py_dcerpc_sec_verification_trailer_get_magic(PyObject *obj, voi
 static int py_dcerpc_sec_verification_trailer_set_magic(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_sec_verification_trailer *object = (struct dcerpc_sec_verification_trailer *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->magic");
+               return -1;
+       }
        PY_CHECK_TYPE(&PyList_Type, value, return -1;);
        {
                int magic_cntr_0;
@@ -9566,6 +11626,10 @@ static int py_dcerpc_sec_verification_trailer_set_magic(PyObject *py_obj, PyObje
                        return -1;
                }
                for (magic_cntr_0 = 0; magic_cntr_0 < PyList_GET_SIZE(value); magic_cntr_0++) {
+                       if (PyList_GET_ITEM(value, magic_cntr_0) == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->magic[magic_cntr_0]");
+                               return -1;
+                       }
                        {
                                const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->magic[magic_cntr_0]));
                                if (PyLong_Check(PyList_GET_ITEM(value, magic_cntr_0))) {
@@ -9611,6 +11675,10 @@ static PyObject *py_dcerpc_sec_verification_trailer_get_count(PyObject *obj, voi
 static int py_dcerpc_sec_verification_trailer_set_count(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_sec_verification_trailer *object = (struct dcerpc_sec_verification_trailer *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->count");
+               return -1;
+       }
        PY_CHECK_TYPE(&dcerpc_sec_vt_count_Type, value, return -1;);
        if (talloc_reference(pytalloc_get_mem_ctx(py_obj), pytalloc_get_mem_ctx(value)) == NULL) {
                PyErr_NoMemory();
@@ -9642,6 +11710,10 @@ static PyObject *py_dcerpc_sec_verification_trailer_get_commands(PyObject *obj,
 static int py_dcerpc_sec_verification_trailer_set_commands(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct dcerpc_sec_verification_trailer *object = (struct dcerpc_sec_verification_trailer *)pytalloc_get_ptr(py_obj);
+       if (value == NULL) {
+               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->commands");
+               return -1;
+       }
        PY_CHECK_TYPE(&PyList_Type, value, return -1;);
        {
                int commands_cntr_0;
@@ -9649,6 +11721,10 @@ static int py_dcerpc_sec_verification_trailer_set_commands(PyObject *py_obj, PyO
                if (!object->commands) { return -1;; }
                talloc_set_name_const(object->commands, "ARRAY: object->commands");
                for (commands_cntr_0 = 0; commands_cntr_0 < PyList_GET_SIZE(value); commands_cntr_0++) {
+                       if (PyList_GET_ITEM(value, commands_cntr_0) == NULL) {
+                               PyErr_Format(PyExc_AttributeError, "Cannot delete NDR object: struct object->commands[commands_cntr_0]");
+                               return -1;
+                       }
                        PY_CHECK_TYPE(&dcerpc_sec_vt_Type, PyList_GET_ITEM(value, commands_cntr_0), return -1;);
                        if (talloc_reference(object->commands, pytalloc_get_mem_ctx(PyList_GET_ITEM(value, commands_cntr_0))) == NULL) {
                                PyErr_NoMemory();
@@ -9661,11 +11737,31 @@ static int py_dcerpc_sec_verification_trailer_set_commands(PyObject *py_obj, PyO
 }
 
 static PyGetSetDef py_dcerpc_sec_verification_trailer_getsetters[] = {
-       { discard_const_p(char, "_pad"), py_dcerpc_sec_verification_trailer_get__pad, py_dcerpc_sec_verification_trailer_set__pad },
-       { discard_const_p(char, "magic"), py_dcerpc_sec_verification_trailer_get_magic, py_dcerpc_sec_verification_trailer_set_magic },
-       { discard_const_p(char, "count"), py_dcerpc_sec_verification_trailer_get_count, py_dcerpc_sec_verification_trailer_set_count },
-       { discard_const_p(char, "commands"), py_dcerpc_sec_verification_trailer_get_commands, py_dcerpc_sec_verification_trailer_set_commands },
-       { NULL }
+       {
+               .name = discard_const_p(char, "_pad"),
+               .get = py_dcerpc_sec_verification_trailer_get__pad,
+               .set = py_dcerpc_sec_verification_trailer_set__pad,
+               .doc = discard_const_p(char, "PIDL-generated element _pad")
+       },
+       {
+               .name = discard_const_p(char, "magic"),
+               .get = py_dcerpc_sec_verification_trailer_get_magic,
+               .set = py_dcerpc_sec_verification_trailer_set_magic,
+               .doc = discard_const_p(char, "PIDL-generated element magic")
+       },
+       {
+               .name = discard_const_p(char, "count"),
+               .get = py_dcerpc_sec_verification_trailer_get_count,
+               .set = py_dcerpc_sec_verification_trailer_set_count,
+               .doc = discard_const_p(char, "PIDL-generated element count")
+       },
+       {
+               .name = discard_const_p(char, "commands"),
+               .get = py_dcerpc_sec_verification_trailer_get_commands,
+               .set = py_dcerpc_sec_verification_trailer_set_commands,
+               .doc = discard_const_p(char, "PIDL-generated element commands")
+       },
+       { .name = NULL }
 };
 
 static PyObject *py_dcerpc_sec_verification_trailer_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -9676,22 +11772,31 @@ static PyObject *py_dcerpc_sec_verification_trailer_new(PyTypeObject *type, PyOb
 static PyObject *py_dcerpc_sec_verification_trailer_ndr_pack(PyObject *py_obj)
 {
        struct dcerpc_sec_verification_trailer *object = (struct dcerpc_sec_verification_trailer *)pytalloc_get_ptr(py_obj);
+       PyObject *ret = NULL;
        DATA_BLOB blob;
        enum ndr_err_code err;
-       err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_dcerpc_sec_verification_trailer);
+       TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));
+       if (tmp_ctx == NULL) {
+               PyErr_SetNdrError(NDR_ERR_ALLOC);
+               return NULL;
+       }
+       err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_dcerpc_sec_verification_trailer);
        if (err != NDR_ERR_SUCCESS) {
+               TALLOC_FREE(tmp_ctx);
                PyErr_SetNdrError(err);
                return NULL;
        }
 
-       return PyString_FromStringAndSize((char *)blob.data, blob.length);
+       ret = PyString_FromStringAndSize((char *)blob.data, blob.length);
+       TALLOC_FREE(tmp_ctx);
+       return ret;
 }
 
 static PyObject *py_dcerpc_sec_verification_trailer_ndr_unpack(PyObject *py_obj, PyObject *args, PyObject *kwargs)
 {
        struct dcerpc_sec_verification_trailer *object = (struct dcerpc_sec_verification_trailer *)pytalloc_get_ptr(py_obj);
        DATA_BLOB blob;
-       int blob_length = 0;
+       Py_ssize_t blob_length = 0;
        enum ndr_err_code err;
        const char * const kwnames[] = { "data_blob", "allow_remaining", NULL };
        PyObject *allow_remaining_obj = NULL;
@@ -9749,7 +11854,6 @@ static PyTypeObject dcerpc_sec_verification_trailer_Type = {
        .tp_getset = py_dcerpc_sec_verification_trailer_getsetters,
        .tp_methods = py_dcerpc_sec_verification_trailer_methods,
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_basicsize = sizeof(pytalloc_Object),
        .tp_new = py_dcerpc_sec_verification_trailer_new,
 };
 
@@ -9775,109 +11879,157 @@ void initdcerpc(void)
        if (ndr_syntax_id_Type == NULL)
                return;
 
-       Object_Type = (PyTypeObject *)PyObject_GetAttrString(dep_talloc, "Object");
-       if (Object_Type == NULL)
+       BaseObject_Type = (PyTypeObject *)PyObject_GetAttrString(dep_talloc, "BaseObject");
+       if (BaseObject_Type == NULL)
                return;
 
        GUID_Type = (PyTypeObject *)PyObject_GetAttrString(dep_samba_dcerpc_misc, "GUID");
        if (GUID_Type == NULL)
                return;
 
-       dcerpc_ctx_list_Type.tp_base = Object_Type;
+       dcerpc_ctx_list_Type.tp_base = BaseObject_Type;
+       dcerpc_ctx_list_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_bind_Type.tp_base = Object_Type;
+       dcerpc_bind_Type.tp_base = BaseObject_Type;
+       dcerpc_bind_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_empty_Type.tp_base = Object_Type;
+       dcerpc_empty_Type.tp_base = BaseObject_Type;
+       dcerpc_empty_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_request_Type.tp_base = Object_Type;
+       dcerpc_request_Type.tp_base = BaseObject_Type;
+       dcerpc_request_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_ack_ctx_Type.tp_base = Object_Type;
+       dcerpc_ack_ctx_Type.tp_base = BaseObject_Type;
+       dcerpc_ack_ctx_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_bind_ack_Type.tp_base = Object_Type;
+       dcerpc_bind_ack_Type.tp_base = BaseObject_Type;
+       dcerpc_bind_ack_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_bind_nak_version_Type.tp_base = Object_Type;
+       dcerpc_bind_nak_version_Type.tp_base = BaseObject_Type;
+       dcerpc_bind_nak_version_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_bind_nak_Type.tp_base = Object_Type;
+       dcerpc_bind_nak_Type.tp_base = BaseObject_Type;
+       dcerpc_bind_nak_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_response_Type.tp_base = Object_Type;
+       dcerpc_response_Type.tp_base = BaseObject_Type;
+       dcerpc_response_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_fault_Type.tp_base = Object_Type;
+       dcerpc_fault_Type.tp_base = BaseObject_Type;
+       dcerpc_fault_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_auth_Type.tp_base = Object_Type;
+       dcerpc_auth_Type.tp_base = BaseObject_Type;
+       dcerpc_auth_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_auth3_Type.tp_base = Object_Type;
+       dcerpc_auth3_Type.tp_base = BaseObject_Type;
+       dcerpc_auth3_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_orphaned_Type.tp_base = Object_Type;
+       dcerpc_orphaned_Type.tp_base = BaseObject_Type;
+       dcerpc_orphaned_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_co_cancel_Type.tp_base = Object_Type;
+       dcerpc_co_cancel_Type.tp_base = BaseObject_Type;
+       dcerpc_co_cancel_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_cl_cancel_Type.tp_base = Object_Type;
+       dcerpc_cl_cancel_Type.tp_base = BaseObject_Type;
+       dcerpc_cl_cancel_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_cancel_ack_Type.tp_base = Object_Type;
+       dcerpc_cancel_ack_Type.tp_base = BaseObject_Type;
+       dcerpc_cancel_ack_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_fack_Type.tp_base = Object_Type;
+       dcerpc_fack_Type.tp_base = BaseObject_Type;
+       dcerpc_fack_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_ack_Type.tp_base = Object_Type;
+       dcerpc_ack_Type.tp_base = BaseObject_Type;
+       dcerpc_ack_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_ping_Type.tp_base = Object_Type;
+       dcerpc_ping_Type.tp_base = BaseObject_Type;
+       dcerpc_ping_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_shutdown_Type.tp_base = Object_Type;
+       dcerpc_shutdown_Type.tp_base = BaseObject_Type;
+       dcerpc_shutdown_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_working_Type.tp_base = Object_Type;
+       dcerpc_working_Type.tp_base = BaseObject_Type;
+       dcerpc_working_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       RTSCookie_Type.tp_base = Object_Type;
+       RTSCookie_Type.tp_base = BaseObject_Type;
+       RTSCookie_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       ClientAddress_Type.tp_base = Object_Type;
+       ClientAddress_Type.tp_base = BaseObject_Type;
+       ClientAddress_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       FlowControlAcknowledgment_Type.tp_base = Object_Type;
+       FlowControlAcknowledgment_Type.tp_base = BaseObject_Type;
+       FlowControlAcknowledgment_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_rts_cmd_ReceiveWindowSize_Type.tp_base = Object_Type;
+       dcerpc_rts_cmd_ReceiveWindowSize_Type.tp_base = BaseObject_Type;
+       dcerpc_rts_cmd_ReceiveWindowSize_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_rts_cmd_FlowControlAck_Type.tp_base = Object_Type;
+       dcerpc_rts_cmd_FlowControlAck_Type.tp_base = BaseObject_Type;
+       dcerpc_rts_cmd_FlowControlAck_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_rts_cmd_ConnectionTimeout_Type.tp_base = Object_Type;
+       dcerpc_rts_cmd_ConnectionTimeout_Type.tp_base = BaseObject_Type;
+       dcerpc_rts_cmd_ConnectionTimeout_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_rts_cmd_Cookie_Type.tp_base = Object_Type;
+       dcerpc_rts_cmd_Cookie_Type.tp_base = BaseObject_Type;
+       dcerpc_rts_cmd_Cookie_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_rts_cmd_ChannelLifetime_Type.tp_base = Object_Type;
+       dcerpc_rts_cmd_ChannelLifetime_Type.tp_base = BaseObject_Type;
+       dcerpc_rts_cmd_ChannelLifetime_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_rts_cmd_ClientKeepalive_Type.tp_base = Object_Type;
+       dcerpc_rts_cmd_ClientKeepalive_Type.tp_base = BaseObject_Type;
+       dcerpc_rts_cmd_ClientKeepalive_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_rts_cmd_Version_Type.tp_base = Object_Type;
+       dcerpc_rts_cmd_Version_Type.tp_base = BaseObject_Type;
+       dcerpc_rts_cmd_Version_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_rts_cmd_Empty_Type.tp_base = Object_Type;
+       dcerpc_rts_cmd_Empty_Type.tp_base = BaseObject_Type;
+       dcerpc_rts_cmd_Empty_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_rts_cmd_Padding_Type.tp_base = Object_Type;
+       dcerpc_rts_cmd_Padding_Type.tp_base = BaseObject_Type;
+       dcerpc_rts_cmd_Padding_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_rts_cmd_NegativeANCE_Type.tp_base = Object_Type;
+       dcerpc_rts_cmd_NegativeANCE_Type.tp_base = BaseObject_Type;
+       dcerpc_rts_cmd_NegativeANCE_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_rts_cmd_ANCE_Type.tp_base = Object_Type;
+       dcerpc_rts_cmd_ANCE_Type.tp_base = BaseObject_Type;
+       dcerpc_rts_cmd_ANCE_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_rts_cmd_ClientAddress_Type.tp_base = Object_Type;
+       dcerpc_rts_cmd_ClientAddress_Type.tp_base = BaseObject_Type;
+       dcerpc_rts_cmd_ClientAddress_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_rts_cmd_AssociationGroupId_Type.tp_base = Object_Type;
+       dcerpc_rts_cmd_AssociationGroupId_Type.tp_base = BaseObject_Type;
+       dcerpc_rts_cmd_AssociationGroupId_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_rts_cmd_Destination_Type.tp_base = Object_Type;
+       dcerpc_rts_cmd_Destination_Type.tp_base = BaseObject_Type;
+       dcerpc_rts_cmd_Destination_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_rts_cmd_PingTrafficSentNotify_Type.tp_base = Object_Type;
+       dcerpc_rts_cmd_PingTrafficSentNotify_Type.tp_base = BaseObject_Type;
+       dcerpc_rts_cmd_PingTrafficSentNotify_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_rts_cmd_Type.tp_base = Object_Type;
+       dcerpc_rts_cmd_Type.tp_base = BaseObject_Type;
+       dcerpc_rts_cmd_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_rts_Type.tp_base = Object_Type;
+       dcerpc_rts_Type.tp_base = BaseObject_Type;
+       dcerpc_rts_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       ncacn_packet_Type.tp_base = Object_Type;
+       ncacn_packet_Type.tp_base = BaseObject_Type;
+       ncacn_packet_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       ncadg_packet_Type.tp_base = Object_Type;
+       ncadg_packet_Type.tp_base = BaseObject_Type;
+       ncadg_packet_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_sec_vt_pcontext_Type.tp_base = Object_Type;
+       dcerpc_sec_vt_pcontext_Type.tp_base = BaseObject_Type;
+       dcerpc_sec_vt_pcontext_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_sec_vt_header2_Type.tp_base = Object_Type;
+       dcerpc_sec_vt_header2_Type.tp_base = BaseObject_Type;
+       dcerpc_sec_vt_header2_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_sec_vt_Type.tp_base = Object_Type;
+       dcerpc_sec_vt_Type.tp_base = BaseObject_Type;
+       dcerpc_sec_vt_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_sec_vt_count_Type.tp_base = Object_Type;
+       dcerpc_sec_vt_count_Type.tp_base = BaseObject_Type;
+       dcerpc_sec_vt_count_Type.tp_basicsize = pytalloc_BaseObject_size();
 
-       dcerpc_sec_verification_trailer_Type.tp_base = Object_Type;
+       dcerpc_sec_verification_trailer_Type.tp_base = BaseObject_Type;
+       dcerpc_sec_verification_trailer_Type.tp_basicsize = pytalloc_BaseObject_size();
 
        if (PyType_Ready(&dcerpc_ctx_list_Type) < 0)
                return;
@@ -10132,15 +12284,12 @@ void initdcerpc(void)
        PyModule_AddObject(m, "DCERPC_RESPONSE_LENGTH", ndr_PyLong_FromUnsignedLongLong(24));
        PyModule_AddObject(m, "DCERPC_FAULT_OP_RNG_ERROR", PyInt_FromLong(DCERPC_NCA_S_OP_RNG_ERROR));
        PyModule_AddObject(m, "DCERPC_FAULT_UNK_IF", PyInt_FromLong(DCERPC_NCA_S_UNKNOWN_IF));
-       PyModule_AddObject(m, "DCERPC_FAULT_NDR", ndr_PyLong_FromUnsignedLongLong(0x000006f7));
+       PyModule_AddObject(m, "DCERPC_FAULT_NDR", PyInt_FromLong(DCERPC_FAULT_BAD_STUB_DATA));
        PyModule_AddObject(m, "DCERPC_FAULT_INVALID_TAG", PyInt_FromLong(DCERPC_NCA_S_FAULT_INVALID_TAG));
        PyModule_AddObject(m, "DCERPC_FAULT_CONTEXT_MISMATCH", PyInt_FromLong(DCERPC_NCA_S_FAULT_CONTEXT_MISMATCH));
        PyModule_AddObject(m, "DCERPC_FAULT_OTHER", ndr_PyLong_FromUnsignedLongLong(0x00000001));
-       PyModule_AddObject(m, "DCERPC_FAULT_ACCESS_DENIED", ndr_PyLong_FromUnsignedLongLong(0x00000005));
-       PyModule_AddObject(m, "DCERPC_FAULT_CANT_PERFORM", ndr_PyLong_FromUnsignedLongLong(0x000006d8));
-       PyModule_AddObject(m, "DCERPC_FAULT_SEC_PKG_ERROR", ndr_PyLong_FromUnsignedLongLong(0x00000721));
        PyModule_AddObject(m, "DCERPC_FAULT_TODO", ndr_PyLong_FromUnsignedLongLong(0x00000042));
-       PyModule_AddObject(m, "DCERPC_AUTH_LEVEL_DEFAULT", PyInt_FromLong((uint16_t)DCERPC_AUTH_LEVEL_CONNECT));
+       PyModule_AddObject(m, "DCERPC_FAULT_LENGTH", ndr_PyLong_FromUnsignedLongLong(32));
        PyModule_AddObject(m, "DCERPC_AUTH_TRAILER_LENGTH", ndr_PyLong_FromUnsignedLongLong(8));
        PyModule_AddObject(m, "DCERPC_AUTH_PAD_ALIGNMENT", ndr_PyLong_FromUnsignedLongLong(16));
        PyModule_AddObject(m, "DCERPC_PFC_FLAG_PENDING_CANCEL", PyInt_FromLong(DCERPC_PFC_FLAG_PENDING_CANCEL_OR_HDR_SIGNING));
@@ -10148,8 +12297,11 @@ void initdcerpc(void)
        PyModule_AddObject(m, "DCERPC_PFC_OFFSET", ndr_PyLong_FromUnsignedLongLong(3));
        PyModule_AddObject(m, "DCERPC_DREP_OFFSET", ndr_PyLong_FromUnsignedLongLong(4));
        PyModule_AddObject(m, "DCERPC_FRAG_LEN_OFFSET", ndr_PyLong_FromUnsignedLongLong(8));
+       PyModule_AddObject(m, "DCERPC_FRAG_MAX_SIZE", ndr_PyLong_FromUnsignedLongLong(5840));
        PyModule_AddObject(m, "DCERPC_AUTH_LEN_OFFSET", ndr_PyLong_FromUnsignedLongLong(10));
        PyModule_AddObject(m, "DCERPC_NCACN_PAYLOAD_OFFSET", ndr_PyLong_FromUnsignedLongLong(16));
+       PyModule_AddObject(m, "DCERPC_NCACN_REQUEST_DEFAULT_MAX_SIZE", ndr_PyLong_FromUnsignedLongLong(0x400000));
+       PyModule_AddObject(m, "DCERPC_NCACN_RESPONSE_DEFAULT_MAX_SIZE", ndr_PyLong_FromUnsignedLongLong(0xf000000));
        PyModule_AddObject(m, "DCERPC_DREP_LE", ndr_PyLong_FromUnsignedLongLong(0x10));
        PyModule_AddObject(m, "DCERPC_SEC_VT_MAX_SIZE", ndr_PyLong_FromUnsignedLongLong(1024));
        PyModule_AddObject(m, "DCERPC_BIND_ACK_RESULT_ACCEPTANCE", PyInt_FromLong((uint16_t)DCERPC_BIND_ACK_RESULT_ACCEPTANCE));
@@ -10215,6 +12367,13 @@ void initdcerpc(void)
        PyModule_AddObject(m, "DCERPC_NCA_S_FAULT_CODESET_CONV_ERROR", ndr_PyLong_FromUnsignedLongLong((uint32_t)DCERPC_NCA_S_FAULT_CODESET_CONV_ERROR));
        PyModule_AddObject(m, "DCERPC_NCA_S_FAULT_OBJECT_NOT_FOUND", ndr_PyLong_FromUnsignedLongLong((uint32_t)DCERPC_NCA_S_FAULT_OBJECT_NOT_FOUND));
        PyModule_AddObject(m, "DCERPC_NCA_S_FAULT_NO_CLIENT_STUB", ndr_PyLong_FromUnsignedLongLong((uint32_t)DCERPC_NCA_S_FAULT_NO_CLIENT_STUB));
+       PyModule_AddObject(m, "DCERPC_FAULT_ACCESS_DENIED", ndr_PyLong_FromUnsignedLongLong((uint32_t)DCERPC_FAULT_ACCESS_DENIED));
+       PyModule_AddObject(m, "DCERPC_FAULT_NO_CALL_ACTIVE", ndr_PyLong_FromUnsignedLongLong((uint32_t)DCERPC_FAULT_NO_CALL_ACTIVE));
+       PyModule_AddObject(m, "DCERPC_FAULT_CANT_PERFORM", ndr_PyLong_FromUnsignedLongLong((uint32_t)DCERPC_FAULT_CANT_PERFORM));
+       PyModule_AddObject(m, "DCERPC_FAULT_OUT_OF_RESOURCES", ndr_PyLong_FromUnsignedLongLong((uint32_t)DCERPC_FAULT_OUT_OF_RESOURCES));
+       PyModule_AddObject(m, "DCERPC_FAULT_BAD_STUB_DATA", ndr_PyLong_FromUnsignedLongLong((uint32_t)DCERPC_FAULT_BAD_STUB_DATA));
+       PyModule_AddObject(m, "DCERPC_FAULT_SEC_PKG_ERROR", ndr_PyLong_FromUnsignedLongLong((uint32_t)DCERPC_FAULT_SEC_PKG_ERROR));
+       PyModule_AddObject(m, "DCERPC_FAULT_FLAG_EXTENDED_ERROR_INFORMATION", PyInt_FromLong((uint16_t)DCERPC_FAULT_FLAG_EXTENDED_ERROR_INFORMATION));
        PyModule_AddObject(m, "DCERPC_AUTH_TYPE_NONE", PyInt_FromLong((uint16_t)DCERPC_AUTH_TYPE_NONE));
        PyModule_AddObject(m, "DCERPC_AUTH_TYPE_KRB5_1", PyInt_FromLong((uint16_t)DCERPC_AUTH_TYPE_KRB5_1));
        PyModule_AddObject(m, "DCERPC_AUTH_TYPE_SPNEGO", PyInt_FromLong((uint16_t)DCERPC_AUTH_TYPE_SPNEGO));