Re-run make idl.
[ira/wip.git] / source3 / librpc / gen_ndr / ndr_netlogon.c
index 88b9fbd6e548045203b10d8a3877409dd64db75a..a898be6fbb75980bd6dd856e2eae2b1f1dff65e5 100644 (file)
@@ -315,8 +315,7 @@ _PUBLIC_ void ndr_print_netr_AcctLockStr(struct ndr_print *ndr, const char *name
                ndr->depth++;
                for (cntr_bindata_1=0;cntr_bindata_1<r->length / 2;cntr_bindata_1++) {
                        char *idx_1=NULL;
-                       asprintf(&idx_1, "[%d]", cntr_bindata_1);
-                       if (idx_1) {
+                       if (asprintf(&idx_1, "[%d]", cntr_bindata_1) != -1) {
                                ndr_print_uint16(ndr, "bindata", r->bindata[cntr_bindata_1]);
                                free(idx_1);
                        }
@@ -600,25 +599,25 @@ _PUBLIC_ enum ndr_err_code ndr_push_netr_LogonLevel(struct ndr_push *ndr, int nd
                int level = ndr_push_get_switch_value(ndr, r);
                NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, level));
                switch (level) {
-                       case 1:
+                       case 1: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->password));
-                       break;
+                       break; }
 
-                       case 2:
+                       case 2: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->network));
-                       break;
+                       break; }
 
-                       case 3:
+                       case 3: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->password));
-                       break;
+                       break; }
 
-                       case 5:
+                       case 5: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->password));
-                       break;
+                       break; }
 
-                       case 6:
+                       case 6: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->network));
-                       break;
+                       break; }
 
                        default:
                                return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
@@ -1111,8 +1110,7 @@ _PUBLIC_ void ndr_print_netr_SamBaseInfo(struct ndr_print *ndr, const char *name
        ndr->depth++;
        for (cntr_unknown_0=0;cntr_unknown_0<7;cntr_unknown_0++) {
                char *idx_0=NULL;
-               asprintf(&idx_0, "[%d]", cntr_unknown_0);
-               if (idx_0) {
+               if (asprintf(&idx_0, "[%d]", cntr_unknown_0) != -1) {
                        ndr_print_uint32(ndr, "unknown", r->unknown[cntr_unknown_0]);
                        free(idx_0);
                }
@@ -1287,8 +1285,7 @@ _PUBLIC_ void ndr_print_netr_SamInfo3(struct ndr_print *ndr, const char *name, c
                ndr->depth++;
                for (cntr_sids_1=0;cntr_sids_1<r->sidcount;cntr_sids_1++) {
                        char *idx_1=NULL;
-                       asprintf(&idx_1, "[%d]", cntr_sids_1);
-                       if (idx_1) {
+                       if (asprintf(&idx_1, "[%d]", cntr_sids_1) != -1) {
                                ndr_print_netr_SidAttr(ndr, "sids", &r->sids[cntr_sids_1]);
                                free(idx_1);
                        }
@@ -1396,8 +1393,7 @@ _PUBLIC_ void ndr_print_netr_SamInfo6(struct ndr_print *ndr, const char *name, c
                ndr->depth++;
                for (cntr_sids_1=0;cntr_sids_1<r->sidcount;cntr_sids_1++) {
                        char *idx_1=NULL;
-                       asprintf(&idx_1, "[%d]", cntr_sids_1);
-                       if (idx_1) {
+                       if (asprintf(&idx_1, "[%d]", cntr_sids_1) != -1) {
                                ndr_print_netr_SidAttr(ndr, "sids", &r->sids[cntr_sids_1]);
                                free(idx_1);
                        }
@@ -1411,8 +1407,7 @@ _PUBLIC_ void ndr_print_netr_SamInfo6(struct ndr_print *ndr, const char *name, c
        ndr->depth++;
        for (cntr_unknown4_0=0;cntr_unknown4_0<20;cntr_unknown4_0++) {
                char *idx_0=NULL;
-               asprintf(&idx_0, "[%d]", cntr_unknown4_0);
-               if (idx_0) {
+               if (asprintf(&idx_0, "[%d]", cntr_unknown4_0) != -1) {
                        ndr_print_uint32(ndr, "unknown4", r->unknown4[cntr_unknown4_0]);
                        free(idx_0);
                }
@@ -1558,8 +1553,7 @@ _PUBLIC_ void ndr_print_netr_PacInfo(struct ndr_print *ndr, const char *name, co
        ndr->depth++;
        for (cntr_expansionroom_0=0;cntr_expansionroom_0<10;cntr_expansionroom_0++) {
                char *idx_0=NULL;
-               asprintf(&idx_0, "[%d]", cntr_expansionroom_0);
-               if (idx_0) {
+               if (asprintf(&idx_0, "[%d]", cntr_expansionroom_0) != -1) {
                        ndr_print_uint32(ndr, "expansionroom", r->expansionroom[cntr_expansionroom_0]);
                        free(idx_0);
                }
@@ -1578,25 +1572,25 @@ _PUBLIC_ enum ndr_err_code ndr_push_netr_Validation(struct ndr_push *ndr, int nd
                int level = ndr_push_get_switch_value(ndr, r);
                NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, level));
                switch (level) {
-                       case 2:
+                       case 2: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->sam2));
-                       break;
+                       break; }
 
-                       case 3:
+                       case 3: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->sam3));
-                       break;
+                       break; }
 
-                       case 4:
+                       case 4: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->pac));
-                       break;
+                       break; }
 
-                       case 5:
+                       case 5: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->pac));
-                       break;
+                       break; }
 
-                       case 6:
+                       case 6: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->sam6));
-                       break;
+                       break; }
 
                        default:
                                return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
@@ -2810,8 +2804,7 @@ _PUBLIC_ void ndr_print_netr_DELTA_GROUP_MEMBER(struct ndr_print *ndr, const cha
                ndr->depth++;
                for (cntr_rids_1=0;cntr_rids_1<r->num_rids;cntr_rids_1++) {
                        char *idx_1=NULL;
-                       asprintf(&idx_1, "[%d]", cntr_rids_1);
-                       if (idx_1) {
+                       if (asprintf(&idx_1, "[%d]", cntr_rids_1) != -1) {
                                ndr_print_uint32(ndr, "rids", r->rids[cntr_rids_1]);
                                free(idx_1);
                        }
@@ -2826,8 +2819,7 @@ _PUBLIC_ void ndr_print_netr_DELTA_GROUP_MEMBER(struct ndr_print *ndr, const cha
                ndr->depth++;
                for (cntr_attribs_1=0;cntr_attribs_1<r->num_rids;cntr_attribs_1++) {
                        char *idx_1=NULL;
-                       asprintf(&idx_1, "[%d]", cntr_attribs_1);
-                       if (idx_1) {
+                       if (asprintf(&idx_1, "[%d]", cntr_attribs_1) != -1) {
                                ndr_print_uint32(ndr, "attribs", r->attribs[cntr_attribs_1]);
                                free(idx_1);
                        }
@@ -3143,8 +3135,7 @@ _PUBLIC_ void ndr_print_netr_DELTA_POLICY(struct ndr_print *ndr, const char *nam
                ndr->depth++;
                for (cntr_eventauditoptions_1=0;cntr_eventauditoptions_1<r->maxauditeventcount + 1;cntr_eventauditoptions_1++) {
                        char *idx_1=NULL;
-                       asprintf(&idx_1, "[%d]", cntr_eventauditoptions_1);
-                       if (idx_1) {
+                       if (asprintf(&idx_1, "[%d]", cntr_eventauditoptions_1) != -1) {
                                ndr_print_uint32(ndr, "eventauditoptions", r->eventauditoptions[cntr_eventauditoptions_1]);
                                free(idx_1);
                        }
@@ -3285,8 +3276,7 @@ _PUBLIC_ void ndr_print_netr_DELTA_TRUSTED_DOMAIN(struct ndr_print *ndr, const c
                ndr->depth++;
                for (cntr_controller_names_1=0;cntr_controller_names_1<r->num_controllers;cntr_controller_names_1++) {
                        char *idx_1=NULL;
-                       asprintf(&idx_1, "[%d]", cntr_controller_names_1);
-                       if (idx_1) {
+                       if (asprintf(&idx_1, "[%d]", cntr_controller_names_1) != -1) {
                                ndr_print_lsa_String(ndr, "controller_names", &r->controller_names[cntr_controller_names_1]);
                                free(idx_1);
                        }
@@ -3484,8 +3474,7 @@ _PUBLIC_ void ndr_print_netr_DELTA_ACCOUNT(struct ndr_print *ndr, const char *na
                ndr->depth++;
                for (cntr_privilege_attrib_1=0;cntr_privilege_attrib_1<r->privilege_entries;cntr_privilege_attrib_1++) {
                        char *idx_1=NULL;
-                       asprintf(&idx_1, "[%d]", cntr_privilege_attrib_1);
-                       if (idx_1) {
+                       if (asprintf(&idx_1, "[%d]", cntr_privilege_attrib_1) != -1) {
                                ndr_print_uint32(ndr, "privilege_attrib", r->privilege_attrib[cntr_privilege_attrib_1]);
                                free(idx_1);
                        }
@@ -3500,8 +3489,7 @@ _PUBLIC_ void ndr_print_netr_DELTA_ACCOUNT(struct ndr_print *ndr, const char *na
                ndr->depth++;
                for (cntr_privilege_name_1=0;cntr_privilege_name_1<r->privilege_entries;cntr_privilege_name_1++) {
                        char *idx_1=NULL;
-                       asprintf(&idx_1, "[%d]", cntr_privilege_name_1);
-                       if (idx_1) {
+                       if (asprintf(&idx_1, "[%d]", cntr_privilege_name_1) != -1) {
                                ndr_print_lsa_String(ndr, "privilege_name", &r->privilege_name[cntr_privilege_name_1]);
                                free(idx_1);
                        }
@@ -3790,90 +3778,90 @@ static enum ndr_err_code ndr_push_netr_DELTA_UNION(struct ndr_push *ndr, int ndr
                int level = ndr_push_get_switch_value(ndr, r);
                NDR_CHECK(ndr_push_netr_DeltaEnum(ndr, NDR_SCALARS, level));
                switch (level) {
-                       case NETR_DELTA_DOMAIN:
+                       case NETR_DELTA_DOMAIN: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->domain));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_GROUP:
+                       case NETR_DELTA_GROUP: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->group));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_DELETE_GROUP:
-                       break;
+                       case NETR_DELTA_DELETE_GROUP: {
+                       break; }
 
-                       case NETR_DELTA_RENAME_GROUP:
+                       case NETR_DELTA_RENAME_GROUP: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->rename_group));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_USER:
+                       case NETR_DELTA_USER: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->user));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_DELETE_USER:
-                       break;
+                       case NETR_DELTA_DELETE_USER: {
+                       break; }
 
-                       case NETR_DELTA_RENAME_USER:
+                       case NETR_DELTA_RENAME_USER: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->rename_user));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_GROUP_MEMBER:
+                       case NETR_DELTA_GROUP_MEMBER: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->group_member));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_ALIAS:
+                       case NETR_DELTA_ALIAS: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->alias));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_DELETE_ALIAS:
-                       break;
+                       case NETR_DELTA_DELETE_ALIAS: {
+                       break; }
 
-                       case NETR_DELTA_RENAME_ALIAS:
+                       case NETR_DELTA_RENAME_ALIAS: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->rename_alias));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_ALIAS_MEMBER:
+                       case NETR_DELTA_ALIAS_MEMBER: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->alias_member));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_POLICY:
+                       case NETR_DELTA_POLICY: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->policy));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_TRUSTED_DOMAIN:
+                       case NETR_DELTA_TRUSTED_DOMAIN: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->trusted_domain));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_DELETE_TRUST:
+                       case NETR_DELTA_DELETE_TRUST: {
                                NDR_CHECK(ndr_push_netr_DELTA_DELETE_TRUST(ndr, NDR_SCALARS, &r->delete_trust));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_ACCOUNT:
+                       case NETR_DELTA_ACCOUNT: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->account));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_DELETE_ACCOUNT:
+                       case NETR_DELTA_DELETE_ACCOUNT: {
                                NDR_CHECK(ndr_push_netr_DELTA_DELETE_ACCOUNT(ndr, NDR_SCALARS, &r->delete_account));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_SECRET:
+                       case NETR_DELTA_SECRET: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->secret));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_DELETE_SECRET:
+                       case NETR_DELTA_DELETE_SECRET: {
                                NDR_CHECK(ndr_push_netr_DELTA_DELETE_SECRET(ndr, NDR_SCALARS, &r->delete_secret));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_DELETE_GROUP2:
+                       case NETR_DELTA_DELETE_GROUP2: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->delete_group));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_DELETE_USER2:
+                       case NETR_DELTA_DELETE_USER2: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->delete_user));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_MODIFY_COUNT:
+                       case NETR_DELTA_MODIFY_COUNT: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->modified_count));
-                       break;
+                       break; }
 
                        default:
                                return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
@@ -4568,92 +4556,92 @@ static enum ndr_err_code ndr_push_netr_DELTA_ID_UNION(struct ndr_push *ndr, int
                int level = ndr_push_get_switch_value(ndr, r);
                NDR_CHECK(ndr_push_netr_DeltaEnum(ndr, NDR_SCALARS, level));
                switch (level) {
-                       case NETR_DELTA_DOMAIN:
+                       case NETR_DELTA_DOMAIN: {
                                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_GROUP:
+                       case NETR_DELTA_GROUP: {
                                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_DELETE_GROUP:
+                       case NETR_DELTA_DELETE_GROUP: {
                                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_RENAME_GROUP:
+                       case NETR_DELTA_RENAME_GROUP: {
                                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_USER:
+                       case NETR_DELTA_USER: {
                                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_DELETE_USER:
+                       case NETR_DELTA_DELETE_USER: {
                                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_RENAME_USER:
+                       case NETR_DELTA_RENAME_USER: {
                                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_GROUP_MEMBER:
+                       case NETR_DELTA_GROUP_MEMBER: {
                                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_ALIAS:
+                       case NETR_DELTA_ALIAS: {
                                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_DELETE_ALIAS:
+                       case NETR_DELTA_DELETE_ALIAS: {
                                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_RENAME_ALIAS:
+                       case NETR_DELTA_RENAME_ALIAS: {
                                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_ALIAS_MEMBER:
+                       case NETR_DELTA_ALIAS_MEMBER: {
                                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_POLICY:
+                       case NETR_DELTA_POLICY: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->sid));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_TRUSTED_DOMAIN:
+                       case NETR_DELTA_TRUSTED_DOMAIN: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->sid));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_DELETE_TRUST:
+                       case NETR_DELTA_DELETE_TRUST: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->sid));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_ACCOUNT:
+                       case NETR_DELTA_ACCOUNT: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->sid));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_DELETE_ACCOUNT:
+                       case NETR_DELTA_DELETE_ACCOUNT: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->sid));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_SECRET:
+                       case NETR_DELTA_SECRET: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->name));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_DELETE_SECRET:
+                       case NETR_DELTA_DELETE_SECRET: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->name));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_DELETE_GROUP2:
+                       case NETR_DELTA_DELETE_GROUP2: {
                                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_DELETE_USER2:
+                       case NETR_DELTA_DELETE_USER2: {
                                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-                       break;
+                       break; }
 
-                       case NETR_DELTA_MODIFY_COUNT:
-                       break;
+                       case NETR_DELTA_MODIFY_COUNT: {
+                       break; }
 
                        default:
                                return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
@@ -5291,8 +5279,7 @@ _PUBLIC_ void ndr_print_netr_DELTA_ENUM_ARRAY(struct ndr_print *ndr, const char
                ndr->depth++;
                for (cntr_delta_enum_1=0;cntr_delta_enum_1<r->num_deltas;cntr_delta_enum_1++) {
                        char *idx_1=NULL;
-                       asprintf(&idx_1, "[%d]", cntr_delta_enum_1);
-                       if (idx_1) {
+                       if (asprintf(&idx_1, "[%d]", cntr_delta_enum_1) != -1) {
                                ndr_print_netr_DELTA_ENUM(ndr, "delta_enum", &r->delta_enum[cntr_delta_enum_1]);
                                free(idx_1);
                        }
@@ -5433,33 +5420,49 @@ static enum ndr_err_code ndr_push_netr_NETLOGON_INFO_2(struct ndr_push *ndr, int
                NDR_CHECK(ndr_push_align(ndr, 4));
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->flags));
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->pdc_connection_status));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->trusted_dc_name, CH_UTF16)));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->trusted_dc_name, CH_UTF16)));
-               NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->trusted_dc_name, ndr_charset_length(r->trusted_dc_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
+               NDR_CHECK(ndr_push_unique_ptr(ndr, r->trusted_dc_name));
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->tc_connection_status));
        }
        if (ndr_flags & NDR_BUFFERS) {
+               if (r->trusted_dc_name) {
+                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->trusted_dc_name, CH_UTF16)));
+                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
+                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->trusted_dc_name, CH_UTF16)));
+                       NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->trusted_dc_name, ndr_charset_length(r->trusted_dc_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
+               }
        }
        return NDR_ERR_SUCCESS;
 }
 
 static enum ndr_err_code ndr_pull_netr_NETLOGON_INFO_2(struct ndr_pull *ndr, int ndr_flags, struct netr_NETLOGON_INFO_2 *r)
 {
+       uint32_t _ptr_trusted_dc_name;
+       TALLOC_CTX *_mem_save_trusted_dc_name_0;
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_align(ndr, 4));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->flags));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->pdc_connection_status));
-               NDR_CHECK(ndr_pull_array_size(ndr, &r->trusted_dc_name));
-               NDR_CHECK(ndr_pull_array_length(ndr, &r->trusted_dc_name));
-               if (ndr_get_array_length(ndr, &r->trusted_dc_name) > ndr_get_array_size(ndr, &r->trusted_dc_name)) {
-                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->trusted_dc_name), ndr_get_array_length(ndr, &r->trusted_dc_name));
+               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_trusted_dc_name));
+               if (_ptr_trusted_dc_name) {
+                       NDR_PULL_ALLOC(ndr, r->trusted_dc_name);
+               } else {
+                       r->trusted_dc_name = NULL;
                }
-               NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->trusted_dc_name), sizeof(uint16_t)));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->trusted_dc_name, ndr_get_array_length(ndr, &r->trusted_dc_name), sizeof(uint16_t), CH_UTF16));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->tc_connection_status));
        }
        if (ndr_flags & NDR_BUFFERS) {
+               if (r->trusted_dc_name) {
+                       _mem_save_trusted_dc_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
+                       NDR_PULL_SET_MEM_CTX(ndr, r->trusted_dc_name, 0);
+                       NDR_CHECK(ndr_pull_array_size(ndr, &r->trusted_dc_name));
+                       NDR_CHECK(ndr_pull_array_length(ndr, &r->trusted_dc_name));
+                       if (ndr_get_array_length(ndr, &r->trusted_dc_name) > ndr_get_array_size(ndr, &r->trusted_dc_name)) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->trusted_dc_name), ndr_get_array_length(ndr, &r->trusted_dc_name));
+                       }
+                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->trusted_dc_name), sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->trusted_dc_name, ndr_get_array_length(ndr, &r->trusted_dc_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_trusted_dc_name_0, 0);
+               }
        }
        return NDR_ERR_SUCCESS;
 }
@@ -5470,7 +5473,12 @@ _PUBLIC_ void ndr_print_netr_NETLOGON_INFO_2(struct ndr_print *ndr, const char *
        ndr->depth++;
        ndr_print_uint32(ndr, "flags", r->flags);
        ndr_print_uint32(ndr, "pdc_connection_status", r->pdc_connection_status);
-       ndr_print_string(ndr, "trusted_dc_name", r->trusted_dc_name);
+       ndr_print_ptr(ndr, "trusted_dc_name", r->trusted_dc_name);
+       ndr->depth++;
+       if (r->trusted_dc_name) {
+               ndr_print_string(ndr, "trusted_dc_name", r->trusted_dc_name);
+       }
+       ndr->depth--;
        ndr_print_uint32(ndr, "tc_connection_status", r->tc_connection_status);
        ndr->depth--;
 }
@@ -5529,17 +5537,17 @@ static enum ndr_err_code ndr_push_netr_CONTROL_QUERY_INFORMATION(struct ndr_push
                int level = ndr_push_get_switch_value(ndr, r);
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
                switch (level) {
-                       case 1:
+                       case 1: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1));
-                       break;
+                       break; }
 
-                       case 2:
+                       case 2: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->info2));
-                       break;
+                       break; }
 
-                       case 3:
+                       case 3: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->info3));
-                       break;
+                       break; }
 
                        default:
                                return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
@@ -5556,7 +5564,7 @@ static enum ndr_err_code ndr_push_netr_CONTROL_QUERY_INFORMATION(struct ndr_push
 
                        case 2:
                                if (r->info2) {
-                                       NDR_CHECK(ndr_push_netr_NETLOGON_INFO_2(ndr, NDR_SCALARS, r->info2));
+                                       NDR_CHECK(ndr_push_netr_NETLOGON_INFO_2(ndr, NDR_SCALARS|NDR_BUFFERS, r->info2));
                                }
                        break;
 
@@ -5636,7 +5644,7 @@ static enum ndr_err_code ndr_pull_netr_CONTROL_QUERY_INFORMATION(struct ndr_pull
                                if (r->info2) {
                                        _mem_save_info2_0 = NDR_PULL_GET_MEM_CTX(ndr);
                                        NDR_PULL_SET_MEM_CTX(ndr, r->info2, 0);
-                                       NDR_CHECK(ndr_pull_netr_NETLOGON_INFO_2(ndr, NDR_SCALARS, r->info2));
+                                       NDR_CHECK(ndr_pull_netr_NETLOGON_INFO_2(ndr, NDR_SCALARS|NDR_BUFFERS, r->info2));
                                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info2_0, 0);
                                }
                        break;
@@ -5714,6 +5722,7 @@ _PUBLIC_ void ndr_print_netr_LogonControlCode(struct ndr_print *ndr, const char
        const char *val = NULL;
 
        switch (r) {
+               case NETLOGON_CONTROL_SYNC: val = "NETLOGON_CONTROL_SYNC"; break;
                case NETLOGON_CONTROL_REDISCOVER: val = "NETLOGON_CONTROL_REDISCOVER"; break;
                case NETLOGON_CONTROL_TC_QUERY: val = "NETLOGON_CONTROL_TC_QUERY"; break;
                case NETLOGON_CONTROL_TRANSPORT_NOTIFY: val = "NETLOGON_CONTROL_TRANSPORT_NOTIFY"; break;
@@ -5728,21 +5737,21 @@ static enum ndr_err_code ndr_push_netr_CONTROL_DATA_INFORMATION(struct ndr_push
                int level = ndr_push_get_switch_value(ndr, r);
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
                switch (level) {
-                       case NETLOGON_CONTROL_REDISCOVER:
+                       case NETLOGON_CONTROL_REDISCOVER: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->domain));
-                       break;
+                       break; }
 
-                       case NETLOGON_CONTROL_TC_QUERY:
+                       case NETLOGON_CONTROL_TC_QUERY: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->domain));
-                       break;
+                       break; }
 
-                       case NETLOGON_CONTROL_TRANSPORT_NOTIFY:
+                       case NETLOGON_CONTROL_TRANSPORT_NOTIFY: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->domain));
-                       break;
+                       break; }
 
-                       case NETLOGON_CONTROL_SET_DBFLAG:
+                       case NETLOGON_CONTROL_SET_DBFLAG: {
                                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->debug_level));
-                       break;
+                       break; }
 
                        default:
                                return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
@@ -6030,6 +6039,8 @@ _PUBLIC_ void ndr_print_netr_DsRGetDCName_flags(struct ndr_print *ndr, const cha
        ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_ONLY_LDAP_NEEDED", DS_ONLY_LDAP_NEEDED, r);
        ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_IS_FLAT_NAME", DS_IS_FLAT_NAME, r);
        ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_IS_DNS_NAME", DS_IS_DNS_NAME, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_TRY_NEXTCLOSEST_SITE", DS_TRY_NEXTCLOSEST_SITE, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_DIRECTORY_SERVICE_6_REQUIRED", DS_DIRECTORY_SERVICE_6_REQUIRED, r);
        ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_RETURN_DNS_NAME", DS_RETURN_DNS_NAME, r);
        ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_RETURN_FLAT_NAME", DS_RETURN_FLAT_NAME, r);
        ndr->depth--;
@@ -6088,6 +6099,8 @@ _PUBLIC_ void ndr_print_netr_DsR_DcFlags(struct ndr_print *ndr, const char *name
        ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_SERVER_WRITABLE", DS_SERVER_WRITABLE, r);
        ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_SERVER_GOOD_TIMESERV", DS_SERVER_GOOD_TIMESERV, r);
        ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_SERVER_NDNC", DS_SERVER_NDNC, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_SERVER_SELECT_SECRET_DOMAIN_6", DS_SERVER_SELECT_SECRET_DOMAIN_6, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_SERVER_FULL_SECRET_DOMAIN_6", DS_SERVER_FULL_SECRET_DOMAIN_6, r);
        ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_DNS_CONTROLLER", DS_DNS_CONTROLLER, r);
        ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_DNS_DOMAIN", DS_DNS_DOMAIN, r);
        ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_DNS_FOREST", DS_DNS_FOREST, r);
@@ -6424,8 +6437,7 @@ _PUBLIC_ void ndr_print_netr_BinaryString(struct ndr_print *ndr, const char *nam
                        ndr->depth++;
                        for (cntr_data_1=0;cntr_data_1<r->length / 2;cntr_data_1++) {
                                char *idx_1=NULL;
-                               asprintf(&idx_1, "[%d]", cntr_data_1);
-                               if (idx_1) {
+                               if (asprintf(&idx_1, "[%d]", cntr_data_1) != -1) {
                                        ndr_print_uint16(ndr, "data", r->data[cntr_data_1]);
                                        free(idx_1);
                                }
@@ -6698,8 +6710,7 @@ _PUBLIC_ void ndr_print_netr_DomainQuery1(struct ndr_print *ndr, const char *nam
        ndr->depth++;
        for (cntr_unknown7_0=0;cntr_unknown7_0<4;cntr_unknown7_0++) {
                char *idx_0=NULL;
-               asprintf(&idx_0, "[%d]", cntr_unknown7_0);
-               if (idx_0) {
+               if (asprintf(&idx_0, "[%d]", cntr_unknown7_0) != -1) {
                        ndr_print_uint32(ndr, "unknown7", r->unknown7[cntr_unknown7_0]);
                        free(idx_0);
                }
@@ -6714,13 +6725,13 @@ static enum ndr_err_code ndr_push_netr_DomainQuery(struct ndr_push *ndr, int ndr
                int level = ndr_push_get_switch_value(ndr, r);
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
                switch (level) {
-                       case 1:
+                       case 1: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->query1));
-                       break;
+                       break; }
 
-                       case 2:
+                       case 2: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->query1));
-                       break;
+                       break; }
 
                        default:
                                return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
@@ -6936,8 +6947,7 @@ _PUBLIC_ void ndr_print_netr_DomainTrustInfo(struct ndr_print *ndr, const char *
        ndr->depth++;
        for (cntr_unknown1_0=0;cntr_unknown1_0<4;cntr_unknown1_0++) {
                char *idx_0=NULL;
-               asprintf(&idx_0, "[%d]", cntr_unknown1_0);
-               if (idx_0) {
+               if (asprintf(&idx_0, "[%d]", cntr_unknown1_0) != -1) {
                        ndr_print_netr_BinaryString(ndr, "unknown1", &r->unknown1[cntr_unknown1_0]);
                        free(idx_0);
                }
@@ -6947,8 +6957,7 @@ _PUBLIC_ void ndr_print_netr_DomainTrustInfo(struct ndr_print *ndr, const char *
        ndr->depth++;
        for (cntr_unknown_0=0;cntr_unknown_0<4;cntr_unknown_0++) {
                char *idx_0=NULL;
-               asprintf(&idx_0, "[%d]", cntr_unknown_0);
-               if (idx_0) {
+               if (asprintf(&idx_0, "[%d]", cntr_unknown_0) != -1) {
                        ndr_print_uint32(ndr, "unknown", r->unknown[cntr_unknown_0]);
                        free(idx_0);
                }
@@ -7046,8 +7055,7 @@ _PUBLIC_ void ndr_print_netr_DomainInfo1(struct ndr_print *ndr, const char *name
                ndr->depth++;
                for (cntr_trusts_1=0;cntr_trusts_1<r->num_trusts;cntr_trusts_1++) {
                        char *idx_1=NULL;
-                       asprintf(&idx_1, "[%d]", cntr_trusts_1);
-                       if (idx_1) {
+                       if (asprintf(&idx_1, "[%d]", cntr_trusts_1) != -1) {
                                ndr_print_netr_DomainTrustInfo(ndr, "trusts", &r->trusts[cntr_trusts_1]);
                                free(idx_1);
                        }
@@ -7059,8 +7067,7 @@ _PUBLIC_ void ndr_print_netr_DomainInfo1(struct ndr_print *ndr, const char *name
        ndr->depth++;
        for (cntr_unknown_0=0;cntr_unknown_0<14;cntr_unknown_0++) {
                char *idx_0=NULL;
-               asprintf(&idx_0, "[%d]", cntr_unknown_0);
-               if (idx_0) {
+               if (asprintf(&idx_0, "[%d]", cntr_unknown_0) != -1) {
                        ndr_print_uint32(ndr, "unknown", r->unknown[cntr_unknown_0]);
                        free(idx_0);
                }
@@ -7075,13 +7082,13 @@ static enum ndr_err_code ndr_push_netr_DomainInfo(struct ndr_push *ndr, int ndr_
                int level = ndr_push_get_switch_value(ndr, r);
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
                switch (level) {
-                       case 1:
+                       case 1: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1));
-                       break;
+                       break; }
 
-                       case 2:
+                       case 2: {
                                NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1));
-                       break;
+                       break; }
 
                        default:
                                return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
@@ -7324,8 +7331,7 @@ _PUBLIC_ void ndr_print_netr_DsRAddressToSitenamesWCtr(struct ndr_print *ndr, co
                ndr->depth++;
                for (cntr_sitename_1=0;cntr_sitename_1<r->count;cntr_sitename_1++) {
                        char *idx_1=NULL;
-                       asprintf(&idx_1, "[%d]", cntr_sitename_1);
-                       if (idx_1) {
+                       if (asprintf(&idx_1, "[%d]", cntr_sitename_1) != -1) {
                                ndr_print_lsa_String(ndr, "sitename", &r->sitename[cntr_sitename_1]);
                                free(idx_1);
                        }
@@ -7687,8 +7693,7 @@ _PUBLIC_ void ndr_print_netr_DomainTrustList(struct ndr_print *ndr, const char *
                ndr->depth++;
                for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
                        char *idx_1=NULL;
-                       asprintf(&idx_1, "[%d]", cntr_array_1);
-                       if (idx_1) {
+                       if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
                                ndr_print_netr_DomainTrust(ndr, "array", &r->array[cntr_array_1]);
                                free(idx_1);
                        }
@@ -7815,8 +7820,7 @@ _PUBLIC_ void ndr_print_netr_DsRAddressToSitenamesExWCtr(struct ndr_print *ndr,
                ndr->depth++;
                for (cntr_sitename_1=0;cntr_sitename_1<r->count;cntr_sitename_1++) {
                        char *idx_1=NULL;
-                       asprintf(&idx_1, "[%d]", cntr_sitename_1);
-                       if (idx_1) {
+                       if (asprintf(&idx_1, "[%d]", cntr_sitename_1) != -1) {
                                ndr_print_lsa_String(ndr, "sitename", &r->sitename[cntr_sitename_1]);
                                free(idx_1);
                        }
@@ -7831,8 +7835,7 @@ _PUBLIC_ void ndr_print_netr_DsRAddressToSitenamesExWCtr(struct ndr_print *ndr,
                ndr->depth++;
                for (cntr_subnetname_1=0;cntr_subnetname_1<r->count;cntr_subnetname_1++) {
                        char *idx_1=NULL;
-                       asprintf(&idx_1, "[%d]", cntr_subnetname_1);
-                       if (idx_1) {
+                       if (asprintf(&idx_1, "[%d]", cntr_subnetname_1) != -1) {
                                ndr_print_lsa_String(ndr, "subnetname", &r->subnetname[cntr_subnetname_1]);
                                free(idx_1);
                        }
@@ -7918,8 +7921,7 @@ _PUBLIC_ void ndr_print_DcSitesCtr(struct ndr_print *ndr, const char *name, cons
                ndr->depth++;
                for (cntr_sites_1=0;cntr_sites_1<r->num_sites;cntr_sites_1++) {
                        char *idx_1=NULL;
-                       asprintf(&idx_1, "[%d]", cntr_sites_1);
-                       if (idx_1) {
+                       if (asprintf(&idx_1, "[%d]", cntr_sites_1) != -1) {
                                ndr_print_lsa_String(ndr, "sites", &r->sites[cntr_sites_1]);
                                free(idx_1);
                        }
@@ -8192,8 +8194,11 @@ static enum ndr_err_code ndr_push_netr_LogonSamLogon(struct ndr_push *ndr, int f
                        NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->in.return_authenticator));
                }
                NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.logon_level));
-               NDR_CHECK(ndr_push_set_switch_value(ndr, &r->in.logon, r->in.logon_level));
-               NDR_CHECK(ndr_push_netr_LogonLevel(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.logon));
+               if (r->in.logon == NULL) {
+                       return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+               }
+               NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.logon, r->in.logon_level));
+               NDR_CHECK(ndr_push_netr_LogonLevel(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.logon));
                NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.validation_level));
        }
        if (flags & NDR_OUT) {
@@ -8225,6 +8230,7 @@ static enum ndr_err_code ndr_pull_netr_LogonSamLogon(struct ndr_pull *ndr, int f
        TALLOC_CTX *_mem_save_computer_name_0;
        TALLOC_CTX *_mem_save_credential_0;
        TALLOC_CTX *_mem_save_return_authenticator_0;
+       TALLOC_CTX *_mem_save_logon_0;
        TALLOC_CTX *_mem_save_validation_0;
        TALLOC_CTX *_mem_save_authoritative_0;
        if (flags & NDR_IN) {
@@ -8291,8 +8297,14 @@ static enum ndr_err_code ndr_pull_netr_LogonSamLogon(struct ndr_pull *ndr, int f
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_return_authenticator_0, 0);
                }
                NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.logon_level));
-               NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->in.logon, r->in.logon_level));
-               NDR_CHECK(ndr_pull_netr_LogonLevel(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.logon));
+               if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+                       NDR_PULL_ALLOC(ndr, r->in.logon);
+               }
+               _mem_save_logon_0 = NDR_PULL_GET_MEM_CTX(ndr);
+               NDR_PULL_SET_MEM_CTX(ndr, r->in.logon, LIBNDR_FLAG_REF_ALLOC);
+               NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.logon, r->in.logon_level));
+               NDR_CHECK(ndr_pull_netr_LogonLevel(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.logon));
+               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_logon_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.validation_level));
                NDR_PULL_ALLOC(ndr, r->out.validation);
                ZERO_STRUCTP(r->out.validation);
@@ -8367,8 +8379,11 @@ _PUBLIC_ void ndr_print_netr_LogonSamLogon(struct ndr_print *ndr, const char *na
                }
                ndr->depth--;
                ndr_print_uint16(ndr, "logon_level", r->in.logon_level);
-               ndr_print_set_switch_value(ndr, &r->in.logon, r->in.logon_level);
-               ndr_print_netr_LogonLevel(ndr, "logon", &r->in.logon);
+               ndr_print_ptr(ndr, "logon", r->in.logon);
+               ndr->depth++;
+               ndr_print_set_switch_value(ndr, r->in.logon, r->in.logon_level);
+               ndr_print_netr_LogonLevel(ndr, "logon", r->in.logon);
+               ndr->depth--;
                ndr_print_uint16(ndr, "validation_level", r->in.validation_level);
                ndr->depth--;
        }
@@ -8604,10 +8619,10 @@ static enum ndr_err_code ndr_push_netr_ServerReqChallenge(struct ndr_push *ndr,
                NDR_CHECK(ndr_push_netr_Credential(ndr, NDR_SCALARS, r->in.credentials));
        }
        if (flags & NDR_OUT) {
-               if (r->out.credentials == NULL) {
+               if (r->out.return_credentials == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
-               NDR_CHECK(ndr_push_netr_Credential(ndr, NDR_SCALARS, r->out.credentials));
+               NDR_CHECK(ndr_push_netr_Credential(ndr, NDR_SCALARS, r->out.return_credentials));
                NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
        }
        return NDR_ERR_SUCCESS;
@@ -8618,6 +8633,7 @@ static enum ndr_err_code ndr_pull_netr_ServerReqChallenge(struct ndr_pull *ndr,
        uint32_t _ptr_server_name;
        TALLOC_CTX *_mem_save_server_name_0;
        TALLOC_CTX *_mem_save_credentials_0;
+       TALLOC_CTX *_mem_save_return_credentials_0;
        if (flags & NDR_IN) {
                ZERO_STRUCT(r->out);
 
@@ -8653,17 +8669,17 @@ static enum ndr_err_code ndr_pull_netr_ServerReqChallenge(struct ndr_pull *ndr,
                NDR_PULL_SET_MEM_CTX(ndr, r->in.credentials, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_netr_Credential(ndr, NDR_SCALARS, r->in.credentials));
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_credentials_0, LIBNDR_FLAG_REF_ALLOC);
-               NDR_PULL_ALLOC(ndr, r->out.credentials);
-               *r->out.credentials = *r->in.credentials;
+               NDR_PULL_ALLOC(ndr, r->out.return_credentials);
+               ZERO_STRUCTP(r->out.return_credentials);
        }
        if (flags & NDR_OUT) {
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-                       NDR_PULL_ALLOC(ndr, r->out.credentials);
+                       NDR_PULL_ALLOC(ndr, r->out.return_credentials);
                }
-               _mem_save_credentials_0 = NDR_PULL_GET_MEM_CTX(ndr);
-               NDR_PULL_SET_MEM_CTX(ndr, r->out.credentials, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_netr_Credential(ndr, NDR_SCALARS, r->out.credentials));
-               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_credentials_0, LIBNDR_FLAG_REF_ALLOC);
+               _mem_save_return_credentials_0 = NDR_PULL_GET_MEM_CTX(ndr);
+               NDR_PULL_SET_MEM_CTX(ndr, r->out.return_credentials, LIBNDR_FLAG_REF_ALLOC);
+               NDR_CHECK(ndr_pull_netr_Credential(ndr, NDR_SCALARS, r->out.return_credentials));
+               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_return_credentials_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
        }
        return NDR_ERR_SUCCESS;
@@ -8695,9 +8711,9 @@ _PUBLIC_ void ndr_print_netr_ServerReqChallenge(struct ndr_print *ndr, const cha
        if (flags & NDR_OUT) {
                ndr_print_struct(ndr, "out", "netr_ServerReqChallenge");
                ndr->depth++;
-               ndr_print_ptr(ndr, "credentials", r->out.credentials);
+               ndr_print_ptr(ndr, "return_credentials", r->out.return_credentials);
                ndr->depth++;
-               ndr_print_netr_Credential(ndr, "credentials", r->out.credentials);
+               ndr_print_netr_Credential(ndr, "return_credentials", r->out.return_credentials);
                ndr->depth--;
                ndr_print_NTSTATUS(ndr, "result", r->out.result);
                ndr->depth--;
@@ -8730,10 +8746,10 @@ static enum ndr_err_code ndr_push_netr_ServerAuthenticate(struct ndr_push *ndr,
                NDR_CHECK(ndr_push_netr_Credential(ndr, NDR_SCALARS, r->in.credentials));
        }
        if (flags & NDR_OUT) {
-               if (r->out.credentials == NULL) {
+               if (r->out.return_credentials == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
-               NDR_CHECK(ndr_push_netr_Credential(ndr, NDR_SCALARS, r->out.credentials));
+               NDR_CHECK(ndr_push_netr_Credential(ndr, NDR_SCALARS, r->out.return_credentials));
                NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
        }
        return NDR_ERR_SUCCESS;
@@ -8744,6 +8760,7 @@ static enum ndr_err_code ndr_pull_netr_ServerAuthenticate(struct ndr_pull *ndr,
        uint32_t _ptr_server_name;
        TALLOC_CTX *_mem_save_server_name_0;
        TALLOC_CTX *_mem_save_credentials_0;
+       TALLOC_CTX *_mem_save_return_credentials_0;
        if (flags & NDR_IN) {
                ZERO_STRUCT(r->out);
 
@@ -8787,17 +8804,17 @@ static enum ndr_err_code ndr_pull_netr_ServerAuthenticate(struct ndr_pull *ndr,
                NDR_PULL_SET_MEM_CTX(ndr, r->in.credentials, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_netr_Credential(ndr, NDR_SCALARS, r->in.credentials));
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_credentials_0, LIBNDR_FLAG_REF_ALLOC);
-               NDR_PULL_ALLOC(ndr, r->out.credentials);
-               *r->out.credentials = *r->in.credentials;
+               NDR_PULL_ALLOC(ndr, r->out.return_credentials);
+               ZERO_STRUCTP(r->out.return_credentials);
        }
        if (flags & NDR_OUT) {
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-                       NDR_PULL_ALLOC(ndr, r->out.credentials);
+                       NDR_PULL_ALLOC(ndr, r->out.return_credentials);
                }
-               _mem_save_credentials_0 = NDR_PULL_GET_MEM_CTX(ndr);
-               NDR_PULL_SET_MEM_CTX(ndr, r->out.credentials, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_netr_Credential(ndr, NDR_SCALARS, r->out.credentials));
-               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_credentials_0, LIBNDR_FLAG_REF_ALLOC);
+               _mem_save_return_credentials_0 = NDR_PULL_GET_MEM_CTX(ndr);
+               NDR_PULL_SET_MEM_CTX(ndr, r->out.return_credentials, LIBNDR_FLAG_REF_ALLOC);
+               NDR_CHECK(ndr_pull_netr_Credential(ndr, NDR_SCALARS, r->out.return_credentials));
+               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_return_credentials_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
        }
        return NDR_ERR_SUCCESS;
@@ -8831,9 +8848,9 @@ _PUBLIC_ void ndr_print_netr_ServerAuthenticate(struct ndr_print *ndr, const cha
        if (flags & NDR_OUT) {
                ndr_print_struct(ndr, "out", "netr_ServerAuthenticate");
                ndr->depth++;
-               ndr_print_ptr(ndr, "credentials", r->out.credentials);
+               ndr_print_ptr(ndr, "return_credentials", r->out.return_credentials);
                ndr->depth++;
-               ndr_print_netr_Credential(ndr, "credentials", r->out.credentials);
+               ndr_print_netr_Credential(ndr, "return_credentials", r->out.return_credentials);
                ndr->depth--;
                ndr_print_NTSTATUS(ndr, "result", r->out.result);
                ndr->depth--;
@@ -8860,8 +8877,14 @@ static enum ndr_err_code ndr_push_netr_ServerPasswordSet(struct ndr_push *ndr, i
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computer_name, CH_UTF16)));
                NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.computer_name, ndr_charset_length(r->in.computer_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-               NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, &r->in.credential));
-               NDR_CHECK(ndr_push_samr_Password(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.new_password));
+               if (r->in.credential == NULL) {
+                       return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+               }
+               NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->in.credential));
+               if (r->in.new_password == NULL) {
+                       return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+               }
+               NDR_CHECK(ndr_push_samr_Password(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.new_password));
        }
        if (flags & NDR_OUT) {
                if (r->out.return_authenticator == NULL) {
@@ -8877,7 +8900,9 @@ static enum ndr_err_code ndr_pull_netr_ServerPasswordSet(struct ndr_pull *ndr, i
 {
        uint32_t _ptr_server_name;
        TALLOC_CTX *_mem_save_server_name_0;
+       TALLOC_CTX *_mem_save_credential_0;
        TALLOC_CTX *_mem_save_return_authenticator_0;
+       TALLOC_CTX *_mem_save_new_password_0;
        if (flags & NDR_IN) {
                ZERO_STRUCT(r->out);
 
@@ -8914,8 +8939,20 @@ static enum ndr_err_code ndr_pull_netr_ServerPasswordSet(struct ndr_pull *ndr, i
                }
                NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.computer_name), sizeof(uint16_t)));
                NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.computer_name, ndr_get_array_length(ndr, &r->in.computer_name), sizeof(uint16_t), CH_UTF16));
-               NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, &r->in.credential));
-               NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.new_password));
+               if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+                       NDR_PULL_ALLOC(ndr, r->in.credential);
+               }
+               _mem_save_credential_0 = NDR_PULL_GET_MEM_CTX(ndr);
+               NDR_PULL_SET_MEM_CTX(ndr, r->in.credential, LIBNDR_FLAG_REF_ALLOC);
+               NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->in.credential));
+               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_credential_0, LIBNDR_FLAG_REF_ALLOC);
+               if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+                       NDR_PULL_ALLOC(ndr, r->in.new_password);
+               }
+               _mem_save_new_password_0 = NDR_PULL_GET_MEM_CTX(ndr);
+               NDR_PULL_SET_MEM_CTX(ndr, r->in.new_password, LIBNDR_FLAG_REF_ALLOC);
+               NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.new_password));
+               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_new_password_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_PULL_ALLOC(ndr, r->out.return_authenticator);
                ZERO_STRUCTP(r->out.return_authenticator);
        }
@@ -8951,8 +8988,14 @@ _PUBLIC_ void ndr_print_netr_ServerPasswordSet(struct ndr_print *ndr, const char
                ndr_print_string(ndr, "account_name", r->in.account_name);
                ndr_print_netr_SchannelType(ndr, "secure_channel_type", r->in.secure_channel_type);
                ndr_print_string(ndr, "computer_name", r->in.computer_name);
-               ndr_print_netr_Authenticator(ndr, "credential", &r->in.credential);
-               ndr_print_samr_Password(ndr, "new_password", &r->in.new_password);
+               ndr_print_ptr(ndr, "credential", r->in.credential);
+               ndr->depth++;
+               ndr_print_netr_Authenticator(ndr, "credential", r->in.credential);
+               ndr->depth--;
+               ndr_print_ptr(ndr, "new_password", r->in.new_password);
+               ndr->depth++;
+               ndr_print_samr_Password(ndr, "new_password", r->in.new_password);
+               ndr->depth--;
                ndr->depth--;
        }
        if (flags & NDR_OUT) {
@@ -8979,7 +9022,10 @@ static enum ndr_err_code ndr_push_netr_DatabaseDeltas(struct ndr_push *ndr, int
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computername, CH_UTF16)));
                NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.computername, ndr_charset_length(r->in.computername, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-               NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, &r->in.credential));
+               if (r->in.credential == NULL) {
+                       return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+               }
+               NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->in.credential));
                if (r->in.return_authenticator == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
@@ -9003,7 +9049,10 @@ static enum ndr_err_code ndr_push_netr_DatabaseDeltas(struct ndr_push *ndr, int
                if (r->out.delta_enum_array == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
-               NDR_CHECK(ndr_push_netr_DELTA_ENUM_ARRAY(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.delta_enum_array));
+               NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.delta_enum_array));
+               if (*r->out.delta_enum_array) {
+                       NDR_CHECK(ndr_push_netr_DELTA_ENUM_ARRAY(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.delta_enum_array));
+               }
                NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
        }
        return NDR_ERR_SUCCESS;
@@ -9011,9 +9060,12 @@ static enum ndr_err_code ndr_push_netr_DatabaseDeltas(struct ndr_push *ndr, int
 
 static enum ndr_err_code ndr_pull_netr_DatabaseDeltas(struct ndr_pull *ndr, int flags, struct netr_DatabaseDeltas *r)
 {
+       uint32_t _ptr_delta_enum_array;
+       TALLOC_CTX *_mem_save_credential_0;
        TALLOC_CTX *_mem_save_return_authenticator_0;
        TALLOC_CTX *_mem_save_sequence_num_0;
        TALLOC_CTX *_mem_save_delta_enum_array_0;
+       TALLOC_CTX *_mem_save_delta_enum_array_1;
        if (flags & NDR_IN) {
                ZERO_STRUCT(r->out);
 
@@ -9031,7 +9083,13 @@ static enum ndr_err_code ndr_pull_netr_DatabaseDeltas(struct ndr_pull *ndr, int
                }
                NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.computername), sizeof(uint16_t)));
                NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.computername, ndr_get_array_length(ndr, &r->in.computername), sizeof(uint16_t), CH_UTF16));
-               NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, &r->in.credential));
+               if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+                       NDR_PULL_ALLOC(ndr, r->in.credential);
+               }
+               _mem_save_credential_0 = NDR_PULL_GET_MEM_CTX(ndr);
+               NDR_PULL_SET_MEM_CTX(ndr, r->in.credential, LIBNDR_FLAG_REF_ALLOC);
+               NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->in.credential));
+               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_credential_0, LIBNDR_FLAG_REF_ALLOC);
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
                        NDR_PULL_ALLOC(ndr, r->in.return_authenticator);
                }
@@ -9075,7 +9133,18 @@ static enum ndr_err_code ndr_pull_netr_DatabaseDeltas(struct ndr_pull *ndr, int
                }
                _mem_save_delta_enum_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
                NDR_PULL_SET_MEM_CTX(ndr, r->out.delta_enum_array, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_netr_DELTA_ENUM_ARRAY(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.delta_enum_array));
+               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_delta_enum_array));
+               if (_ptr_delta_enum_array) {
+                       NDR_PULL_ALLOC(ndr, *r->out.delta_enum_array);
+               } else {
+                       *r->out.delta_enum_array = NULL;
+               }
+               if (*r->out.delta_enum_array) {
+                       _mem_save_delta_enum_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
+                       NDR_PULL_SET_MEM_CTX(ndr, *r->out.delta_enum_array, 0);
+                       NDR_CHECK(ndr_pull_netr_DELTA_ENUM_ARRAY(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.delta_enum_array));
+                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_delta_enum_array_1, 0);
+               }
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_delta_enum_array_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
        }
@@ -9094,7 +9163,10 @@ _PUBLIC_ void ndr_print_netr_DatabaseDeltas(struct ndr_print *ndr, const char *n
                ndr->depth++;
                ndr_print_string(ndr, "logon_server", r->in.logon_server);
                ndr_print_string(ndr, "computername", r->in.computername);
-               ndr_print_netr_Authenticator(ndr, "credential", &r->in.credential);
+               ndr_print_ptr(ndr, "credential", r->in.credential);
+               ndr->depth++;
+               ndr_print_netr_Authenticator(ndr, "credential", r->in.credential);
+               ndr->depth--;
                ndr_print_ptr(ndr, "return_authenticator", r->in.return_authenticator);
                ndr->depth++;
                ndr_print_netr_Authenticator(ndr, "return_authenticator", r->in.return_authenticator);
@@ -9120,7 +9192,12 @@ _PUBLIC_ void ndr_print_netr_DatabaseDeltas(struct ndr_print *ndr, const char *n
                ndr->depth--;
                ndr_print_ptr(ndr, "delta_enum_array", r->out.delta_enum_array);
                ndr->depth++;
-               ndr_print_netr_DELTA_ENUM_ARRAY(ndr, "delta_enum_array", r->out.delta_enum_array);
+               ndr_print_ptr(ndr, "delta_enum_array", *r->out.delta_enum_array);
+               ndr->depth++;
+               if (*r->out.delta_enum_array) {
+                       ndr_print_netr_DELTA_ENUM_ARRAY(ndr, "delta_enum_array", *r->out.delta_enum_array);
+               }
+               ndr->depth--;
                ndr->depth--;
                ndr_print_NTSTATUS(ndr, "result", r->out.result);
                ndr->depth--;
@@ -9773,15 +9850,14 @@ static enum ndr_err_code ndr_push_netr_GetDcName(struct ndr_push *ndr, int flags
                if (r->out.dcname == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
-               if (*r->out.dcname == NULL) {
-                       return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+               NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.dcname));
+               if (*r->out.dcname) {
+                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.dcname, CH_UTF16)));
+                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
+                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.dcname, CH_UTF16)));
+                       NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, *r->out.dcname, ndr_charset_length(*r->out.dcname, CH_UTF16), sizeof(uint16_t), CH_UTF16));
                }
-               NDR_CHECK(ndr_push_ref_ptr(ndr));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.dcname, CH_UTF16)));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.dcname, CH_UTF16)));
-               NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, *r->out.dcname, ndr_charset_length(*r->out.dcname, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-               NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
+               NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
        }
        return NDR_ERR_SUCCESS;
 }
@@ -9792,6 +9868,7 @@ static enum ndr_err_code ndr_pull_netr_GetDcName(struct ndr_pull *ndr, int flags
        uint32_t _ptr_dcname;
        TALLOC_CTX *_mem_save_domainname_0;
        TALLOC_CTX *_mem_save_dcname_0;
+       TALLOC_CTX *_mem_save_dcname_1;
        if (flags & NDR_IN) {
                ZERO_STRUCT(r->out);
 
@@ -9829,16 +9906,26 @@ static enum ndr_err_code ndr_pull_netr_GetDcName(struct ndr_pull *ndr, int flags
                }
                _mem_save_dcname_0 = NDR_PULL_GET_MEM_CTX(ndr);
                NDR_PULL_SET_MEM_CTX(ndr, r->out.dcname, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_ref_ptr(ndr, &_ptr_dcname));
-               NDR_CHECK(ndr_pull_array_size(ndr, r->out.dcname));
-               NDR_CHECK(ndr_pull_array_length(ndr, r->out.dcname));
-               if (ndr_get_array_length(ndr, r->out.dcname) > ndr_get_array_size(ndr, r->out.dcname)) {
-                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, r->out.dcname), ndr_get_array_length(ndr, r->out.dcname));
-               }
-               NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, r->out.dcname), sizeof(uint16_t)));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, r->out.dcname, ndr_get_array_length(ndr, r->out.dcname), sizeof(uint16_t), CH_UTF16));
+               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_dcname));
+               if (_ptr_dcname) {
+                       NDR_PULL_ALLOC(ndr, *r->out.dcname);
+               } else {
+                       *r->out.dcname = NULL;
+               }
+               if (*r->out.dcname) {
+                       _mem_save_dcname_1 = NDR_PULL_GET_MEM_CTX(ndr);
+                       NDR_PULL_SET_MEM_CTX(ndr, *r->out.dcname, 0);
+                       NDR_CHECK(ndr_pull_array_size(ndr, r->out.dcname));
+                       NDR_CHECK(ndr_pull_array_length(ndr, r->out.dcname));
+                       if (ndr_get_array_length(ndr, r->out.dcname) > ndr_get_array_size(ndr, r->out.dcname)) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, r->out.dcname), ndr_get_array_length(ndr, r->out.dcname));
+                       }
+                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, r->out.dcname), sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, r->out.dcname, ndr_get_array_length(ndr, r->out.dcname), sizeof(uint16_t), CH_UTF16));
+                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dcname_1, 0);
+               }
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dcname_0, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
+               NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
        }
        return NDR_ERR_SUCCESS;
 }
@@ -9869,10 +9956,12 @@ _PUBLIC_ void ndr_print_netr_GetDcName(struct ndr_print *ndr, const char *name,
                ndr->depth++;
                ndr_print_ptr(ndr, "dcname", *r->out.dcname);
                ndr->depth++;
-               ndr_print_string(ndr, "dcname", *r->out.dcname);
+               if (*r->out.dcname) {
+                       ndr_print_string(ndr, "dcname", *r->out.dcname);
+               }
                ndr->depth--;
                ndr->depth--;
-               ndr_print_NTSTATUS(ndr, "result", r->out.result);
+               ndr_print_WERROR(ndr, "result", r->out.result);
                ndr->depth--;
        }
        ndr->depth--;
@@ -10003,14 +10092,13 @@ static enum ndr_err_code ndr_push_netr_GetAnyDCName(struct ndr_push *ndr, int fl
                if (r->out.dcname == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
-               if (*r->out.dcname == NULL) {
-                       return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+               NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.dcname));
+               if (*r->out.dcname) {
+                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.dcname, CH_UTF16)));
+                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
+                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.dcname, CH_UTF16)));
+                       NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, *r->out.dcname, ndr_charset_length(*r->out.dcname, CH_UTF16), sizeof(uint16_t), CH_UTF16));
                }
-               NDR_CHECK(ndr_push_ref_ptr(ndr));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.dcname, CH_UTF16)));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.dcname, CH_UTF16)));
-               NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, *r->out.dcname, ndr_charset_length(*r->out.dcname, CH_UTF16), sizeof(uint16_t), CH_UTF16));
                NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
        }
        return NDR_ERR_SUCCESS;
@@ -10024,6 +10112,7 @@ static enum ndr_err_code ndr_pull_netr_GetAnyDCName(struct ndr_pull *ndr, int fl
        TALLOC_CTX *_mem_save_logon_server_0;
        TALLOC_CTX *_mem_save_domainname_0;
        TALLOC_CTX *_mem_save_dcname_0;
+       TALLOC_CTX *_mem_save_dcname_1;
        if (flags & NDR_IN) {
                ZERO_STRUCT(r->out);
 
@@ -10072,14 +10161,24 @@ static enum ndr_err_code ndr_pull_netr_GetAnyDCName(struct ndr_pull *ndr, int fl
                }
                _mem_save_dcname_0 = NDR_PULL_GET_MEM_CTX(ndr);
                NDR_PULL_SET_MEM_CTX(ndr, r->out.dcname, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_ref_ptr(ndr, &_ptr_dcname));
-               NDR_CHECK(ndr_pull_array_size(ndr, r->out.dcname));
-               NDR_CHECK(ndr_pull_array_length(ndr, r->out.dcname));
-               if (ndr_get_array_length(ndr, r->out.dcname) > ndr_get_array_size(ndr, r->out.dcname)) {
-                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, r->out.dcname), ndr_get_array_length(ndr, r->out.dcname));
-               }
-               NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, r->out.dcname), sizeof(uint16_t)));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, r->out.dcname, ndr_get_array_length(ndr, r->out.dcname), sizeof(uint16_t), CH_UTF16));
+               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_dcname));
+               if (_ptr_dcname) {
+                       NDR_PULL_ALLOC(ndr, *r->out.dcname);
+               } else {
+                       *r->out.dcname = NULL;
+               }
+               if (*r->out.dcname) {
+                       _mem_save_dcname_1 = NDR_PULL_GET_MEM_CTX(ndr);
+                       NDR_PULL_SET_MEM_CTX(ndr, *r->out.dcname, 0);
+                       NDR_CHECK(ndr_pull_array_size(ndr, r->out.dcname));
+                       NDR_CHECK(ndr_pull_array_length(ndr, r->out.dcname));
+                       if (ndr_get_array_length(ndr, r->out.dcname) > ndr_get_array_size(ndr, r->out.dcname)) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, r->out.dcname), ndr_get_array_length(ndr, r->out.dcname));
+                       }
+                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, r->out.dcname), sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, r->out.dcname, ndr_get_array_length(ndr, r->out.dcname), sizeof(uint16_t), CH_UTF16));
+                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dcname_1, 0);
+               }
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dcname_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
        }
@@ -10117,7 +10216,9 @@ _PUBLIC_ void ndr_print_netr_GetAnyDCName(struct ndr_print *ndr, const char *nam
                ndr->depth++;
                ndr_print_ptr(ndr, "dcname", *r->out.dcname);
                ndr->depth++;
-               ndr_print_string(ndr, "dcname", *r->out.dcname);
+               if (*r->out.dcname) {
+                       ndr_print_string(ndr, "dcname", *r->out.dcname);
+               }
                ndr->depth--;
                ndr->depth--;
                ndr_print_WERROR(ndr, "result", r->out.result);
@@ -10138,8 +10239,11 @@ static enum ndr_err_code ndr_push_netr_LogonControl2(struct ndr_push *ndr, int f
                }
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.function_code));
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
-               NDR_CHECK(ndr_push_set_switch_value(ndr, &r->in.data, r->in.function_code));
-               NDR_CHECK(ndr_push_netr_CONTROL_DATA_INFORMATION(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.data));
+               if (r->in.data == NULL) {
+                       return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+               }
+               NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.data, r->in.function_code));
+               NDR_CHECK(ndr_push_netr_CONTROL_DATA_INFORMATION(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.data));
        }
        if (flags & NDR_OUT) {
                if (r->out.query == NULL) {
@@ -10156,6 +10260,7 @@ static enum ndr_err_code ndr_pull_netr_LogonControl2(struct ndr_pull *ndr, int f
 {
        uint32_t _ptr_logon_server;
        TALLOC_CTX *_mem_save_logon_server_0;
+       TALLOC_CTX *_mem_save_data_0;
        TALLOC_CTX *_mem_save_query_0;
        if (flags & NDR_IN) {
                ZERO_STRUCT(r->out);
@@ -10180,8 +10285,14 @@ static enum ndr_err_code ndr_pull_netr_LogonControl2(struct ndr_pull *ndr, int f
                }
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.function_code));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
-               NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->in.data, r->in.function_code));
-               NDR_CHECK(ndr_pull_netr_CONTROL_DATA_INFORMATION(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.data));
+               if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+                       NDR_PULL_ALLOC(ndr, r->in.data);
+               }
+               _mem_save_data_0 = NDR_PULL_GET_MEM_CTX(ndr);
+               NDR_PULL_SET_MEM_CTX(ndr, r->in.data, LIBNDR_FLAG_REF_ALLOC);
+               NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.data, r->in.function_code));
+               NDR_CHECK(ndr_pull_netr_CONTROL_DATA_INFORMATION(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.data));
+               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_PULL_ALLOC(ndr, r->out.query);
                ZERO_STRUCTP(r->out.query);
        }
@@ -10217,8 +10328,11 @@ _PUBLIC_ void ndr_print_netr_LogonControl2(struct ndr_print *ndr, const char *na
                ndr->depth--;
                ndr_print_uint32(ndr, "function_code", r->in.function_code);
                ndr_print_uint32(ndr, "level", r->in.level);
-               ndr_print_set_switch_value(ndr, &r->in.data, r->in.function_code);
-               ndr_print_netr_CONTROL_DATA_INFORMATION(ndr, "data", &r->in.data);
+               ndr_print_ptr(ndr, "data", r->in.data);
+               ndr->depth++;
+               ndr_print_set_switch_value(ndr, r->in.data, r->in.function_code);
+               ndr_print_netr_CONTROL_DATA_INFORMATION(ndr, "data", r->in.data);
+               ndr->depth--;
                ndr->depth--;
        }
        if (flags & NDR_OUT) {
@@ -10264,10 +10378,10 @@ static enum ndr_err_code ndr_push_netr_ServerAuthenticate2(struct ndr_push *ndr,
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.negotiate_flags));
        }
        if (flags & NDR_OUT) {
-               if (r->out.credentials == NULL) {
+               if (r->out.return_credentials == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
-               NDR_CHECK(ndr_push_netr_Credential(ndr, NDR_SCALARS, r->out.credentials));
+               NDR_CHECK(ndr_push_netr_Credential(ndr, NDR_SCALARS, r->out.return_credentials));
                if (r->out.negotiate_flags == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
@@ -10282,6 +10396,7 @@ static enum ndr_err_code ndr_pull_netr_ServerAuthenticate2(struct ndr_pull *ndr,
        uint32_t _ptr_server_name;
        TALLOC_CTX *_mem_save_server_name_0;
        TALLOC_CTX *_mem_save_credentials_0;
+       TALLOC_CTX *_mem_save_return_credentials_0;
        TALLOC_CTX *_mem_save_negotiate_flags_0;
        if (flags & NDR_IN) {
                ZERO_STRUCT(r->out);
@@ -10333,19 +10448,19 @@ static enum ndr_err_code ndr_pull_netr_ServerAuthenticate2(struct ndr_pull *ndr,
                NDR_PULL_SET_MEM_CTX(ndr, r->in.negotiate_flags, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.negotiate_flags));
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_negotiate_flags_0, LIBNDR_FLAG_REF_ALLOC);
-               NDR_PULL_ALLOC(ndr, r->out.credentials);
-               *r->out.credentials = *r->in.credentials;
+               NDR_PULL_ALLOC(ndr, r->out.return_credentials);
+               ZERO_STRUCTP(r->out.return_credentials);
                NDR_PULL_ALLOC(ndr, r->out.negotiate_flags);
                *r->out.negotiate_flags = *r->in.negotiate_flags;
        }
        if (flags & NDR_OUT) {
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-                       NDR_PULL_ALLOC(ndr, r->out.credentials);
+                       NDR_PULL_ALLOC(ndr, r->out.return_credentials);
                }
-               _mem_save_credentials_0 = NDR_PULL_GET_MEM_CTX(ndr);
-               NDR_PULL_SET_MEM_CTX(ndr, r->out.credentials, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_netr_Credential(ndr, NDR_SCALARS, r->out.credentials));
-               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_credentials_0, LIBNDR_FLAG_REF_ALLOC);
+               _mem_save_return_credentials_0 = NDR_PULL_GET_MEM_CTX(ndr);
+               NDR_PULL_SET_MEM_CTX(ndr, r->out.return_credentials, LIBNDR_FLAG_REF_ALLOC);
+               NDR_CHECK(ndr_pull_netr_Credential(ndr, NDR_SCALARS, r->out.return_credentials));
+               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_return_credentials_0, LIBNDR_FLAG_REF_ALLOC);
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
                        NDR_PULL_ALLOC(ndr, r->out.negotiate_flags);
                }
@@ -10390,9 +10505,9 @@ _PUBLIC_ void ndr_print_netr_ServerAuthenticate2(struct ndr_print *ndr, const ch
        if (flags & NDR_OUT) {
                ndr_print_struct(ndr, "out", "netr_ServerAuthenticate2");
                ndr->depth++;
-               ndr_print_ptr(ndr, "credentials", r->out.credentials);
+               ndr_print_ptr(ndr, "return_credentials", r->out.return_credentials);
                ndr->depth++;
-               ndr_print_netr_Credential(ndr, "credentials", r->out.credentials);
+               ndr_print_netr_Credential(ndr, "return_credentials", r->out.return_credentials);
                ndr->depth--;
                ndr_print_ptr(ndr, "negotiate_flags", r->out.negotiate_flags);
                ndr->depth++;
@@ -10415,7 +10530,10 @@ static enum ndr_err_code ndr_push_netr_DatabaseSync2(struct ndr_push *ndr, int f
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computername, CH_UTF16)));
                NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.computername, ndr_charset_length(r->in.computername, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-               NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, &r->in.credential));
+               if (r->in.credential == NULL) {
+                       return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+               }
+               NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->in.credential));
                if (r->in.return_authenticator == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
@@ -10440,7 +10558,10 @@ static enum ndr_err_code ndr_push_netr_DatabaseSync2(struct ndr_push *ndr, int f
                if (r->out.delta_enum_array == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
-               NDR_CHECK(ndr_push_netr_DELTA_ENUM_ARRAY(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.delta_enum_array));
+               NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.delta_enum_array));
+               if (*r->out.delta_enum_array) {
+                       NDR_CHECK(ndr_push_netr_DELTA_ENUM_ARRAY(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.delta_enum_array));
+               }
                NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
        }
        return NDR_ERR_SUCCESS;
@@ -10448,9 +10569,12 @@ static enum ndr_err_code ndr_push_netr_DatabaseSync2(struct ndr_push *ndr, int f
 
 static enum ndr_err_code ndr_pull_netr_DatabaseSync2(struct ndr_pull *ndr, int flags, struct netr_DatabaseSync2 *r)
 {
+       uint32_t _ptr_delta_enum_array;
+       TALLOC_CTX *_mem_save_credential_0;
        TALLOC_CTX *_mem_save_return_authenticator_0;
        TALLOC_CTX *_mem_save_sync_context_0;
        TALLOC_CTX *_mem_save_delta_enum_array_0;
+       TALLOC_CTX *_mem_save_delta_enum_array_1;
        if (flags & NDR_IN) {
                ZERO_STRUCT(r->out);
 
@@ -10468,7 +10592,13 @@ static enum ndr_err_code ndr_pull_netr_DatabaseSync2(struct ndr_pull *ndr, int f
                }
                NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.computername), sizeof(uint16_t)));
                NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.computername, ndr_get_array_length(ndr, &r->in.computername), sizeof(uint16_t), CH_UTF16));
-               NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, &r->in.credential));
+               if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+                       NDR_PULL_ALLOC(ndr, r->in.credential);
+               }
+               _mem_save_credential_0 = NDR_PULL_GET_MEM_CTX(ndr);
+               NDR_PULL_SET_MEM_CTX(ndr, r->in.credential, LIBNDR_FLAG_REF_ALLOC);
+               NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->in.credential));
+               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_credential_0, LIBNDR_FLAG_REF_ALLOC);
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
                        NDR_PULL_ALLOC(ndr, r->in.return_authenticator);
                }
@@ -10513,7 +10643,18 @@ static enum ndr_err_code ndr_pull_netr_DatabaseSync2(struct ndr_pull *ndr, int f
                }
                _mem_save_delta_enum_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
                NDR_PULL_SET_MEM_CTX(ndr, r->out.delta_enum_array, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_netr_DELTA_ENUM_ARRAY(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.delta_enum_array));
+               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_delta_enum_array));
+               if (_ptr_delta_enum_array) {
+                       NDR_PULL_ALLOC(ndr, *r->out.delta_enum_array);
+               } else {
+                       *r->out.delta_enum_array = NULL;
+               }
+               if (*r->out.delta_enum_array) {
+                       _mem_save_delta_enum_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
+                       NDR_PULL_SET_MEM_CTX(ndr, *r->out.delta_enum_array, 0);
+                       NDR_CHECK(ndr_pull_netr_DELTA_ENUM_ARRAY(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.delta_enum_array));
+                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_delta_enum_array_1, 0);
+               }
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_delta_enum_array_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
        }
@@ -10532,7 +10673,10 @@ _PUBLIC_ void ndr_print_netr_DatabaseSync2(struct ndr_print *ndr, const char *na
                ndr->depth++;
                ndr_print_string(ndr, "logon_server", r->in.logon_server);
                ndr_print_string(ndr, "computername", r->in.computername);
-               ndr_print_netr_Authenticator(ndr, "credential", &r->in.credential);
+               ndr_print_ptr(ndr, "credential", r->in.credential);
+               ndr->depth++;
+               ndr_print_netr_Authenticator(ndr, "credential", r->in.credential);
+               ndr->depth--;
                ndr_print_ptr(ndr, "return_authenticator", r->in.return_authenticator);
                ndr->depth++;
                ndr_print_netr_Authenticator(ndr, "return_authenticator", r->in.return_authenticator);
@@ -10559,7 +10703,12 @@ _PUBLIC_ void ndr_print_netr_DatabaseSync2(struct ndr_print *ndr, const char *na
                ndr->depth--;
                ndr_print_ptr(ndr, "delta_enum_array", r->out.delta_enum_array);
                ndr->depth++;
-               ndr_print_netr_DELTA_ENUM_ARRAY(ndr, "delta_enum_array", r->out.delta_enum_array);
+               ndr_print_ptr(ndr, "delta_enum_array", *r->out.delta_enum_array);
+               ndr->depth++;
+               if (*r->out.delta_enum_array) {
+                       ndr_print_netr_DELTA_ENUM_ARRAY(ndr, "delta_enum_array", *r->out.delta_enum_array);
+               }
+               ndr->depth--;
                ndr->depth--;
                ndr_print_NTSTATUS(ndr, "result", r->out.result);
                ndr->depth--;
@@ -10955,7 +11104,10 @@ static enum ndr_err_code ndr_push_netr_DsRGetDCName(struct ndr_push *ndr, int fl
                if (r->out.info == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
-               NDR_CHECK(ndr_push_netr_DsRGetDCNameInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
+               NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.info));
+               if (*r->out.info) {
+                       NDR_CHECK(ndr_push_netr_DsRGetDCNameInfo(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
+               }
                NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
        }
        return NDR_ERR_SUCCESS;
@@ -10967,11 +11119,13 @@ static enum ndr_err_code ndr_pull_netr_DsRGetDCName(struct ndr_pull *ndr, int fl
        uint32_t _ptr_domain_name;
        uint32_t _ptr_domain_guid;
        uint32_t _ptr_site_guid;
+       uint32_t _ptr_info;
        TALLOC_CTX *_mem_save_server_unc_0;
        TALLOC_CTX *_mem_save_domain_name_0;
        TALLOC_CTX *_mem_save_domain_guid_0;
        TALLOC_CTX *_mem_save_site_guid_0;
        TALLOC_CTX *_mem_save_info_0;
+       TALLOC_CTX *_mem_save_info_1;
        if (flags & NDR_IN) {
                ZERO_STRUCT(r->out);
 
@@ -11045,7 +11199,18 @@ static enum ndr_err_code ndr_pull_netr_DsRGetDCName(struct ndr_pull *ndr, int fl
                }
                _mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
                NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_netr_DsRGetDCNameInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
+               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info));
+               if (_ptr_info) {
+                       NDR_PULL_ALLOC(ndr, *r->out.info);
+               } else {
+                       *r->out.info = NULL;
+               }
+               if (*r->out.info) {
+                       _mem_save_info_1 = NDR_PULL_GET_MEM_CTX(ndr);
+                       NDR_PULL_SET_MEM_CTX(ndr, *r->out.info, 0);
+                       NDR_CHECK(ndr_pull_netr_DsRGetDCNameInfo(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
+                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_1, 0);
+               }
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
        }
@@ -11094,7 +11259,12 @@ _PUBLIC_ void ndr_print_netr_DsRGetDCName(struct ndr_print *ndr, const char *nam
                ndr->depth++;
                ndr_print_ptr(ndr, "info", r->out.info);
                ndr->depth++;
-               ndr_print_netr_DsRGetDCNameInfo(ndr, "info", r->out.info);
+               ndr_print_ptr(ndr, "info", *r->out.info);
+               ndr->depth++;
+               if (*r->out.info) {
+                       ndr_print_netr_DsRGetDCNameInfo(ndr, "info", *r->out.info);
+               }
+               ndr->depth--;
                ndr->depth--;
                ndr_print_WERROR(ndr, "result", r->out.result);
                ndr->depth--;
@@ -11184,41 +11354,127 @@ _PUBLIC_ void ndr_print_netr_NETRLOGONSETSERVICEBITS(struct ndr_print *ndr, cons
        ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_netr_NETRLOGONGETTRUSTRID(struct ndr_push *ndr, int flags, const struct netr_NETRLOGONGETTRUSTRID *r)
+static enum ndr_err_code ndr_push_netr_LogonGetTrustRid(struct ndr_push *ndr, int flags, const struct netr_LogonGetTrustRid *r)
 {
        if (flags & NDR_IN) {
+               NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
+               if (r->in.server_name) {
+                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
+                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
+                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
+                       NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
+               }
+               NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.domain_name));
+               if (r->in.domain_name) {
+                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.domain_name, CH_UTF16)));
+                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
+                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.domain_name, CH_UTF16)));
+                       NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.domain_name, ndr_charset_length(r->in.domain_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
+               }
        }
        if (flags & NDR_OUT) {
+               if (r->out.rid == NULL) {
+                       return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+               }
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.rid));
                NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
        }
        return NDR_ERR_SUCCESS;
 }
 
-static enum ndr_err_code ndr_pull_netr_NETRLOGONGETTRUSTRID(struct ndr_pull *ndr, int flags, struct netr_NETRLOGONGETTRUSTRID *r)
+static enum ndr_err_code ndr_pull_netr_LogonGetTrustRid(struct ndr_pull *ndr, int flags, struct netr_LogonGetTrustRid *r)
 {
+       uint32_t _ptr_server_name;
+       uint32_t _ptr_domain_name;
+       TALLOC_CTX *_mem_save_server_name_0;
+       TALLOC_CTX *_mem_save_domain_name_0;
+       TALLOC_CTX *_mem_save_rid_0;
        if (flags & NDR_IN) {
+               ZERO_STRUCT(r->out);
+
+               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
+               if (_ptr_server_name) {
+                       NDR_PULL_ALLOC(ndr, r->in.server_name);
+               } else {
+                       r->in.server_name = NULL;
+               }
+               if (r->in.server_name) {
+                       _mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
+                       NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
+                       NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
+                       NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
+                       if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
+                       }
+                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
+               }
+               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domain_name));
+               if (_ptr_domain_name) {
+                       NDR_PULL_ALLOC(ndr, r->in.domain_name);
+               } else {
+                       r->in.domain_name = NULL;
+               }
+               if (r->in.domain_name) {
+                       _mem_save_domain_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
+                       NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_name, 0);
+                       NDR_CHECK(ndr_pull_array_size(ndr, &r->in.domain_name));
+                       NDR_CHECK(ndr_pull_array_length(ndr, &r->in.domain_name));
+                       if (ndr_get_array_length(ndr, &r->in.domain_name) > ndr_get_array_size(ndr, &r->in.domain_name)) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.domain_name), ndr_get_array_length(ndr, &r->in.domain_name));
+                       }
+                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.domain_name), sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.domain_name, ndr_get_array_length(ndr, &r->in.domain_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_name_0, 0);
+               }
+               NDR_PULL_ALLOC(ndr, r->out.rid);
+               ZERO_STRUCTP(r->out.rid);
        }
        if (flags & NDR_OUT) {
+               if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+                       NDR_PULL_ALLOC(ndr, r->out.rid);
+               }
+               _mem_save_rid_0 = NDR_PULL_GET_MEM_CTX(ndr);
+               NDR_PULL_SET_MEM_CTX(ndr, r->out.rid, LIBNDR_FLAG_REF_ALLOC);
+               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.rid));
+               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_rid_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
        }
        return NDR_ERR_SUCCESS;
 }
 
-_PUBLIC_ void ndr_print_netr_NETRLOGONGETTRUSTRID(struct ndr_print *ndr, const char *name, int flags, const struct netr_NETRLOGONGETTRUSTRID *r)
+_PUBLIC_ void ndr_print_netr_LogonGetTrustRid(struct ndr_print *ndr, const char *name, int flags, const struct netr_LogonGetTrustRid *r)
 {
-       ndr_print_struct(ndr, name, "netr_NETRLOGONGETTRUSTRID");
+       ndr_print_struct(ndr, name, "netr_LogonGetTrustRid");
        ndr->depth++;
        if (flags & NDR_SET_VALUES) {
                ndr->flags |= LIBNDR_PRINT_SET_VALUES;
        }
        if (flags & NDR_IN) {
-               ndr_print_struct(ndr, "in", "netr_NETRLOGONGETTRUSTRID");
+               ndr_print_struct(ndr, "in", "netr_LogonGetTrustRid");
+               ndr->depth++;
+               ndr_print_ptr(ndr, "server_name", r->in.server_name);
+               ndr->depth++;
+               if (r->in.server_name) {
+                       ndr_print_string(ndr, "server_name", r->in.server_name);
+               }
+               ndr->depth--;
+               ndr_print_ptr(ndr, "domain_name", r->in.domain_name);
                ndr->depth++;
+               if (r->in.domain_name) {
+                       ndr_print_string(ndr, "domain_name", r->in.domain_name);
+               }
+               ndr->depth--;
                ndr->depth--;
        }
        if (flags & NDR_OUT) {
-               ndr_print_struct(ndr, "out", "netr_NETRLOGONGETTRUSTRID");
+               ndr_print_struct(ndr, "out", "netr_LogonGetTrustRid");
+               ndr->depth++;
+               ndr_print_ptr(ndr, "rid", r->out.rid);
                ndr->depth++;
+               ndr_print_uint32(ndr, "rid", *r->out.rid);
+               ndr->depth--;
                ndr_print_WERROR(ndr, "result", r->out.result);
                ndr->depth--;
        }
@@ -11528,7 +11784,10 @@ static enum ndr_err_code ndr_push_netr_DsRGetDCNameEx(struct ndr_push *ndr, int
                if (r->out.info == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
-               NDR_CHECK(ndr_push_netr_DsRGetDCNameInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
+               NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.info));
+               if (*r->out.info) {
+                       NDR_CHECK(ndr_push_netr_DsRGetDCNameInfo(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
+               }
                NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
        }
        return NDR_ERR_SUCCESS;
@@ -11540,11 +11799,13 @@ static enum ndr_err_code ndr_pull_netr_DsRGetDCNameEx(struct ndr_pull *ndr, int
        uint32_t _ptr_domain_name;
        uint32_t _ptr_domain_guid;
        uint32_t _ptr_site_name;
+       uint32_t _ptr_info;
        TALLOC_CTX *_mem_save_server_unc_0;
        TALLOC_CTX *_mem_save_domain_name_0;
        TALLOC_CTX *_mem_save_domain_guid_0;
        TALLOC_CTX *_mem_save_site_name_0;
        TALLOC_CTX *_mem_save_info_0;
+       TALLOC_CTX *_mem_save_info_1;
        if (flags & NDR_IN) {
                ZERO_STRUCT(r->out);
 
@@ -11624,7 +11885,18 @@ static enum ndr_err_code ndr_pull_netr_DsRGetDCNameEx(struct ndr_pull *ndr, int
                }
                _mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
                NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_netr_DsRGetDCNameInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
+               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info));
+               if (_ptr_info) {
+                       NDR_PULL_ALLOC(ndr, *r->out.info);
+               } else {
+                       *r->out.info = NULL;
+               }
+               if (*r->out.info) {
+                       _mem_save_info_1 = NDR_PULL_GET_MEM_CTX(ndr);
+                       NDR_PULL_SET_MEM_CTX(ndr, *r->out.info, 0);
+                       NDR_CHECK(ndr_pull_netr_DsRGetDCNameInfo(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
+                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_1, 0);
+               }
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
        }
@@ -11673,7 +11945,12 @@ _PUBLIC_ void ndr_print_netr_DsRGetDCNameEx(struct ndr_print *ndr, const char *n
                ndr->depth++;
                ndr_print_ptr(ndr, "info", r->out.info);
                ndr->depth++;
-               ndr_print_netr_DsRGetDCNameInfo(ndr, "info", r->out.info);
+               ndr_print_ptr(ndr, "info", *r->out.info);
+               ndr->depth++;
+               if (*r->out.info) {
+                       ndr_print_netr_DsRGetDCNameInfo(ndr, "info", *r->out.info);
+               }
+               ndr->depth--;
                ndr->depth--;
                ndr_print_WERROR(ndr, "result", r->out.result);
                ndr->depth--;
@@ -11696,14 +11973,13 @@ static enum ndr_err_code ndr_push_netr_DsRGetSiteName(struct ndr_push *ndr, int
                if (r->out.site == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
-               if (*r->out.site == NULL) {
-                       return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+               NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.site));
+               if (*r->out.site) {
+                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.site, CH_UTF16)));
+                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
+                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.site, CH_UTF16)));
+                       NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, *r->out.site, ndr_charset_length(*r->out.site, CH_UTF16), sizeof(uint16_t), CH_UTF16));
                }
-               NDR_CHECK(ndr_push_ref_ptr(ndr));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.site, CH_UTF16)));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.site, CH_UTF16)));
-               NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, *r->out.site, ndr_charset_length(*r->out.site, CH_UTF16), sizeof(uint16_t), CH_UTF16));
                NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
        }
        return NDR_ERR_SUCCESS;
@@ -11715,6 +11991,7 @@ static enum ndr_err_code ndr_pull_netr_DsRGetSiteName(struct ndr_pull *ndr, int
        uint32_t _ptr_site;
        TALLOC_CTX *_mem_save_computer_name_0;
        TALLOC_CTX *_mem_save_site_0;
+       TALLOC_CTX *_mem_save_site_1;
        if (flags & NDR_IN) {
                ZERO_STRUCT(r->out);
 
@@ -11745,14 +12022,24 @@ static enum ndr_err_code ndr_pull_netr_DsRGetSiteName(struct ndr_pull *ndr, int
                }
                _mem_save_site_0 = NDR_PULL_GET_MEM_CTX(ndr);
                NDR_PULL_SET_MEM_CTX(ndr, r->out.site, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_ref_ptr(ndr, &_ptr_site));
-               NDR_CHECK(ndr_pull_array_size(ndr, r->out.site));
-               NDR_CHECK(ndr_pull_array_length(ndr, r->out.site));
-               if (ndr_get_array_length(ndr, r->out.site) > ndr_get_array_size(ndr, r->out.site)) {
-                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, r->out.site), ndr_get_array_length(ndr, r->out.site));
-               }
-               NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, r->out.site), sizeof(uint16_t)));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, r->out.site, ndr_get_array_length(ndr, r->out.site), sizeof(uint16_t), CH_UTF16));
+               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_site));
+               if (_ptr_site) {
+                       NDR_PULL_ALLOC(ndr, *r->out.site);
+               } else {
+                       *r->out.site = NULL;
+               }
+               if (*r->out.site) {
+                       _mem_save_site_1 = NDR_PULL_GET_MEM_CTX(ndr);
+                       NDR_PULL_SET_MEM_CTX(ndr, *r->out.site, 0);
+                       NDR_CHECK(ndr_pull_array_size(ndr, r->out.site));
+                       NDR_CHECK(ndr_pull_array_length(ndr, r->out.site));
+                       if (ndr_get_array_length(ndr, r->out.site) > ndr_get_array_size(ndr, r->out.site)) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, r->out.site), ndr_get_array_length(ndr, r->out.site));
+                       }
+                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, r->out.site), sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, r->out.site, ndr_get_array_length(ndr, r->out.site), sizeof(uint16_t), CH_UTF16));
+                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_site_1, 0);
+               }
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_site_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
        }
@@ -11784,7 +12071,9 @@ _PUBLIC_ void ndr_print_netr_DsRGetSiteName(struct ndr_print *ndr, const char *n
                ndr->depth++;
                ndr_print_ptr(ndr, "site", *r->out.site);
                ndr->depth++;
-               ndr_print_string(ndr, "site", *r->out.site);
+               if (*r->out.site) {
+                       ndr_print_string(ndr, "site", *r->out.site);
+               }
                ndr->depth--;
                ndr->depth--;
                ndr_print_WERROR(ndr, "result", r->out.result);
@@ -12310,11 +12599,10 @@ static enum ndr_err_code ndr_push_netr_DsRAddressToSitenamesW(struct ndr_push *n
                if (r->out.ctr == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
-               if (*r->out.ctr == NULL) {
-                       return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+               NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.ctr));
+               if (*r->out.ctr) {
+                       NDR_CHECK(ndr_push_netr_DsRAddressToSitenamesWCtr(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.ctr));
                }
-               NDR_CHECK(ndr_push_ref_ptr(ndr));
-               NDR_CHECK(ndr_push_netr_DsRAddressToSitenamesWCtr(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.ctr));
                NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
        }
        return NDR_ERR_SUCCESS;
@@ -12379,14 +12667,18 @@ static enum ndr_err_code ndr_pull_netr_DsRAddressToSitenamesW(struct ndr_pull *n
                }
                _mem_save_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
                NDR_PULL_SET_MEM_CTX(ndr, r->out.ctr, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_ref_ptr(ndr, &_ptr_ctr));
-               if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr));
+               if (_ptr_ctr) {
                        NDR_PULL_ALLOC(ndr, *r->out.ctr);
+               } else {
+                       *r->out.ctr = NULL;
+               }
+               if (*r->out.ctr) {
+                       _mem_save_ctr_1 = NDR_PULL_GET_MEM_CTX(ndr);
+                       NDR_PULL_SET_MEM_CTX(ndr, *r->out.ctr, 0);
+                       NDR_CHECK(ndr_pull_netr_DsRAddressToSitenamesWCtr(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.ctr));
+                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr_1, 0);
                }
-               _mem_save_ctr_1 = NDR_PULL_GET_MEM_CTX(ndr);
-               NDR_PULL_SET_MEM_CTX(ndr, *r->out.ctr, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_netr_DsRAddressToSitenamesWCtr(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.ctr));
-               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr_1, LIBNDR_FLAG_REF_ALLOC);
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
        }
@@ -12417,8 +12709,7 @@ _PUBLIC_ void ndr_print_netr_DsRAddressToSitenamesW(struct ndr_print *ndr, const
                ndr->depth++;
                for (cntr_addresses_1=0;cntr_addresses_1<r->in.count;cntr_addresses_1++) {
                        char *idx_1=NULL;
-                       asprintf(&idx_1, "[%d]", cntr_addresses_1);
-                       if (idx_1) {
+                       if (asprintf(&idx_1, "[%d]", cntr_addresses_1) != -1) {
                                ndr_print_netr_DsRAddress(ndr, "addresses", &r->in.addresses[cntr_addresses_1]);
                                free(idx_1);
                        }
@@ -12434,7 +12725,9 @@ _PUBLIC_ void ndr_print_netr_DsRAddressToSitenamesW(struct ndr_print *ndr, const
                ndr->depth++;
                ndr_print_ptr(ndr, "ctr", *r->out.ctr);
                ndr->depth++;
-               ndr_print_netr_DsRAddressToSitenamesWCtr(ndr, "ctr", *r->out.ctr);
+               if (*r->out.ctr) {
+                       ndr_print_netr_DsRAddressToSitenamesWCtr(ndr, "ctr", *r->out.ctr);
+               }
                ndr->depth--;
                ndr->depth--;
                ndr_print_WERROR(ndr, "result", r->out.result);
@@ -12485,7 +12778,10 @@ static enum ndr_err_code ndr_push_netr_DsRGetDCNameEx2(struct ndr_push *ndr, int
                if (r->out.info == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
-               NDR_CHECK(ndr_push_netr_DsRGetDCNameInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
+               NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.info));
+               if (*r->out.info) {
+                       NDR_CHECK(ndr_push_netr_DsRGetDCNameInfo(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
+               }
                NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
        }
        return NDR_ERR_SUCCESS;
@@ -12498,12 +12794,14 @@ static enum ndr_err_code ndr_pull_netr_DsRGetDCNameEx2(struct ndr_pull *ndr, int
        uint32_t _ptr_domain_name;
        uint32_t _ptr_domain_guid;
        uint32_t _ptr_site_name;
+       uint32_t _ptr_info;
        TALLOC_CTX *_mem_save_server_unc_0;
        TALLOC_CTX *_mem_save_client_account_0;
        TALLOC_CTX *_mem_save_domain_name_0;
        TALLOC_CTX *_mem_save_domain_guid_0;
        TALLOC_CTX *_mem_save_site_name_0;
        TALLOC_CTX *_mem_save_info_0;
+       TALLOC_CTX *_mem_save_info_1;
        if (flags & NDR_IN) {
                ZERO_STRUCT(r->out);
 
@@ -12602,7 +12900,18 @@ static enum ndr_err_code ndr_pull_netr_DsRGetDCNameEx2(struct ndr_pull *ndr, int
                }
                _mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
                NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_netr_DsRGetDCNameInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
+               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info));
+               if (_ptr_info) {
+                       NDR_PULL_ALLOC(ndr, *r->out.info);
+               } else {
+                       *r->out.info = NULL;
+               }
+               if (*r->out.info) {
+                       _mem_save_info_1 = NDR_PULL_GET_MEM_CTX(ndr);
+                       NDR_PULL_SET_MEM_CTX(ndr, *r->out.info, 0);
+                       NDR_CHECK(ndr_pull_netr_DsRGetDCNameInfo(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
+                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_1, 0);
+               }
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
        }
@@ -12658,7 +12967,12 @@ _PUBLIC_ void ndr_print_netr_DsRGetDCNameEx2(struct ndr_print *ndr, const char *
                ndr->depth++;
                ndr_print_ptr(ndr, "info", r->out.info);
                ndr->depth++;
-               ndr_print_netr_DsRGetDCNameInfo(ndr, "info", r->out.info);
+               ndr_print_ptr(ndr, "info", *r->out.info);
+               ndr->depth++;
+               if (*r->out.info) {
+                       ndr_print_netr_DsRGetDCNameInfo(ndr, "info", *r->out.info);
+               }
+               ndr->depth--;
                ndr->depth--;
                ndr_print_WERROR(ndr, "result", r->out.result);
                ndr->depth--;
@@ -12828,11 +13142,10 @@ static enum ndr_err_code ndr_push_netr_DsRAddressToSitenamesExW(struct ndr_push
                if (r->out.ctr == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
-               if (*r->out.ctr == NULL) {
-                       return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+               NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.ctr));
+               if (*r->out.ctr) {
+                       NDR_CHECK(ndr_push_netr_DsRAddressToSitenamesExWCtr(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.ctr));
                }
-               NDR_CHECK(ndr_push_ref_ptr(ndr));
-               NDR_CHECK(ndr_push_netr_DsRAddressToSitenamesExWCtr(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.ctr));
                NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
        }
        return NDR_ERR_SUCCESS;
@@ -12897,14 +13210,18 @@ static enum ndr_err_code ndr_pull_netr_DsRAddressToSitenamesExW(struct ndr_pull
                }
                _mem_save_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
                NDR_PULL_SET_MEM_CTX(ndr, r->out.ctr, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_ref_ptr(ndr, &_ptr_ctr));
-               if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr));
+               if (_ptr_ctr) {
                        NDR_PULL_ALLOC(ndr, *r->out.ctr);
+               } else {
+                       *r->out.ctr = NULL;
+               }
+               if (*r->out.ctr) {
+                       _mem_save_ctr_1 = NDR_PULL_GET_MEM_CTX(ndr);
+                       NDR_PULL_SET_MEM_CTX(ndr, *r->out.ctr, 0);
+                       NDR_CHECK(ndr_pull_netr_DsRAddressToSitenamesExWCtr(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.ctr));
+                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr_1, 0);
                }
-               _mem_save_ctr_1 = NDR_PULL_GET_MEM_CTX(ndr);
-               NDR_PULL_SET_MEM_CTX(ndr, *r->out.ctr, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_netr_DsRAddressToSitenamesExWCtr(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.ctr));
-               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr_1, LIBNDR_FLAG_REF_ALLOC);
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
        }
@@ -12935,8 +13252,7 @@ _PUBLIC_ void ndr_print_netr_DsRAddressToSitenamesExW(struct ndr_print *ndr, con
                ndr->depth++;
                for (cntr_addresses_1=0;cntr_addresses_1<r->in.count;cntr_addresses_1++) {
                        char *idx_1=NULL;
-                       asprintf(&idx_1, "[%d]", cntr_addresses_1);
-                       if (idx_1) {
+                       if (asprintf(&idx_1, "[%d]", cntr_addresses_1) != -1) {
                                ndr_print_netr_DsRAddress(ndr, "addresses", &r->in.addresses[cntr_addresses_1]);
                                free(idx_1);
                        }
@@ -12952,7 +13268,9 @@ _PUBLIC_ void ndr_print_netr_DsRAddressToSitenamesExW(struct ndr_print *ndr, con
                ndr->depth++;
                ndr_print_ptr(ndr, "ctr", *r->out.ctr);
                ndr->depth++;
-               ndr_print_netr_DsRAddressToSitenamesExWCtr(ndr, "ctr", *r->out.ctr);
+               if (*r->out.ctr) {
+                       ndr_print_netr_DsRAddressToSitenamesExWCtr(ndr, "ctr", *r->out.ctr);
+               }
                ndr->depth--;
                ndr->depth--;
                ndr_print_WERROR(ndr, "result", r->out.result);
@@ -13073,8 +13391,11 @@ static enum ndr_err_code ndr_push_netr_LogonSamLogonEx(struct ndr_push *ndr, int
                        NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.computer_name, ndr_charset_length(r->in.computer_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
                }
                NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.logon_level));
-               NDR_CHECK(ndr_push_set_switch_value(ndr, &r->in.logon, r->in.logon_level));
-               NDR_CHECK(ndr_push_netr_LogonLevel(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.logon));
+               if (r->in.logon == NULL) {
+                       return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+               }
+               NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.logon, r->in.logon_level));
+               NDR_CHECK(ndr_push_netr_LogonLevel(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.logon));
                NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.validation_level));
                if (r->in.flags == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
@@ -13106,6 +13427,7 @@ static enum ndr_err_code ndr_pull_netr_LogonSamLogonEx(struct ndr_pull *ndr, int
        uint32_t _ptr_computer_name;
        TALLOC_CTX *_mem_save_server_name_0;
        TALLOC_CTX *_mem_save_computer_name_0;
+       TALLOC_CTX *_mem_save_logon_0;
        TALLOC_CTX *_mem_save_validation_0;
        TALLOC_CTX *_mem_save_authoritative_0;
        TALLOC_CTX *_mem_save_flags_0;
@@ -13149,8 +13471,14 @@ static enum ndr_err_code ndr_pull_netr_LogonSamLogonEx(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_computer_name_0, 0);
                }
                NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.logon_level));
-               NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->in.logon, r->in.logon_level));
-               NDR_CHECK(ndr_pull_netr_LogonLevel(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.logon));
+               if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+                       NDR_PULL_ALLOC(ndr, r->in.logon);
+               }
+               _mem_save_logon_0 = NDR_PULL_GET_MEM_CTX(ndr);
+               NDR_PULL_SET_MEM_CTX(ndr, r->in.logon, LIBNDR_FLAG_REF_ALLOC);
+               NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.logon, r->in.logon_level));
+               NDR_CHECK(ndr_pull_netr_LogonLevel(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.logon));
+               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_logon_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.validation_level));
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
                        NDR_PULL_ALLOC(ndr, r->in.flags);
@@ -13217,8 +13545,11 @@ _PUBLIC_ void ndr_print_netr_LogonSamLogonEx(struct ndr_print *ndr, const char *
                }
                ndr->depth--;
                ndr_print_uint16(ndr, "logon_level", r->in.logon_level);
-               ndr_print_set_switch_value(ndr, &r->in.logon, r->in.logon_level);
-               ndr_print_netr_LogonLevel(ndr, "logon", &r->in.logon);
+               ndr_print_ptr(ndr, "logon", r->in.logon);
+               ndr->depth++;
+               ndr_print_set_switch_value(ndr, r->in.logon, r->in.logon_level);
+               ndr_print_netr_LogonLevel(ndr, "logon", r->in.logon);
+               ndr->depth--;
                ndr_print_uint16(ndr, "validation_level", r->in.validation_level);
                ndr_print_ptr(ndr, "flags", r->in.flags);
                ndr->depth++;
@@ -13264,11 +13595,7 @@ static enum ndr_err_code ndr_push_netr_DsrEnumerateDomainTrusts(struct ndr_push
                if (r->out.trusts == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
-               if (*r->out.trusts == NULL) {
-                       return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-               }
-               NDR_CHECK(ndr_push_ref_ptr(ndr));
-               NDR_CHECK(ndr_push_netr_DomainTrustList(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.trusts));
+               NDR_CHECK(ndr_push_netr_DomainTrustList(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.trusts));
                NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
        }
        return NDR_ERR_SUCCESS;
@@ -13277,10 +13604,8 @@ static enum ndr_err_code ndr_push_netr_DsrEnumerateDomainTrusts(struct ndr_push
 static enum ndr_err_code ndr_pull_netr_DsrEnumerateDomainTrusts(struct ndr_pull *ndr, int flags, struct netr_DsrEnumerateDomainTrusts *r)
 {
        uint32_t _ptr_server_name;
-       uint32_t _ptr_trusts;
        TALLOC_CTX *_mem_save_server_name_0;
        TALLOC_CTX *_mem_save_trusts_0;
-       TALLOC_CTX *_mem_save_trusts_1;
        if (flags & NDR_IN) {
                ZERO_STRUCT(r->out);
 
@@ -13312,14 +13637,7 @@ static enum ndr_err_code ndr_pull_netr_DsrEnumerateDomainTrusts(struct ndr_pull
                }
                _mem_save_trusts_0 = NDR_PULL_GET_MEM_CTX(ndr);
                NDR_PULL_SET_MEM_CTX(ndr, r->out.trusts, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_ref_ptr(ndr, &_ptr_trusts));
-               if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-                       NDR_PULL_ALLOC(ndr, *r->out.trusts);
-               }
-               _mem_save_trusts_1 = NDR_PULL_GET_MEM_CTX(ndr);
-               NDR_PULL_SET_MEM_CTX(ndr, *r->out.trusts, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_netr_DomainTrustList(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.trusts));
-               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_trusts_1, LIBNDR_FLAG_REF_ALLOC);
+               NDR_CHECK(ndr_pull_netr_DomainTrustList(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.trusts));
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_trusts_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
        }
@@ -13350,10 +13668,7 @@ _PUBLIC_ void ndr_print_netr_DsrEnumerateDomainTrusts(struct ndr_print *ndr, con
                ndr->depth++;
                ndr_print_ptr(ndr, "trusts", r->out.trusts);
                ndr->depth++;
-               ndr_print_ptr(ndr, "trusts", *r->out.trusts);
-               ndr->depth++;
-               ndr_print_netr_DomainTrustList(ndr, "trusts", *r->out.trusts);
-               ndr->depth--;
+               ndr_print_netr_DomainTrustList(ndr, "trusts", r->out.trusts);
                ndr->depth--;
                ndr_print_WERROR(ndr, "result", r->out.result);
                ndr->depth--;
@@ -13361,9 +13676,38 @@ _PUBLIC_ void ndr_print_netr_DsrEnumerateDomainTrusts(struct ndr_print *ndr, con
        ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_netr_DSRDEREGISTERDNSHOSTRECORDS(struct ndr_push *ndr, int flags, const struct netr_DSRDEREGISTERDNSHOSTRECORDS *r)
+static enum ndr_err_code ndr_push_netr_DsrDeregisterDNSHostRecords(struct ndr_push *ndr, int flags, const struct netr_DsrDeregisterDNSHostRecords *r)
 {
        if (flags & NDR_IN) {
+               NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
+               if (r->in.server_name) {
+                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
+                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
+                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
+                       NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
+               }
+               NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.domain));
+               if (r->in.domain) {
+                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.domain, CH_UTF16)));
+                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
+                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.domain, CH_UTF16)));
+                       NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.domain, ndr_charset_length(r->in.domain, CH_UTF16), sizeof(uint16_t), CH_UTF16));
+               }
+               NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.domain_guid));
+               if (r->in.domain_guid) {
+                       NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.domain_guid));
+               }
+               NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.dsa_guid));
+               if (r->in.dsa_guid) {
+                       NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.dsa_guid));
+               }
+               if (r->in.dns_host == NULL) {
+                       return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+               }
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.dns_host, CH_UTF16)));
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.dns_host, CH_UTF16)));
+               NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.dns_host, ndr_charset_length(r->in.dns_host, CH_UTF16), sizeof(uint16_t), CH_UTF16));
        }
        if (flags & NDR_OUT) {
                NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
@@ -13371,9 +13715,84 @@ static enum ndr_err_code ndr_push_netr_DSRDEREGISTERDNSHOSTRECORDS(struct ndr_pu
        return NDR_ERR_SUCCESS;
 }
 
-static enum ndr_err_code ndr_pull_netr_DSRDEREGISTERDNSHOSTRECORDS(struct ndr_pull *ndr, int flags, struct netr_DSRDEREGISTERDNSHOSTRECORDS *r)
+static enum ndr_err_code ndr_pull_netr_DsrDeregisterDNSHostRecords(struct ndr_pull *ndr, int flags, struct netr_DsrDeregisterDNSHostRecords *r)
 {
+       uint32_t _ptr_server_name;
+       uint32_t _ptr_domain;
+       uint32_t _ptr_domain_guid;
+       uint32_t _ptr_dsa_guid;
+       TALLOC_CTX *_mem_save_server_name_0;
+       TALLOC_CTX *_mem_save_domain_0;
+       TALLOC_CTX *_mem_save_domain_guid_0;
+       TALLOC_CTX *_mem_save_dsa_guid_0;
        if (flags & NDR_IN) {
+               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
+               if (_ptr_server_name) {
+                       NDR_PULL_ALLOC(ndr, r->in.server_name);
+               } else {
+                       r->in.server_name = NULL;
+               }
+               if (r->in.server_name) {
+                       _mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
+                       NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
+                       NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
+                       NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
+                       if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
+                       }
+                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
+               }
+               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domain));
+               if (_ptr_domain) {
+                       NDR_PULL_ALLOC(ndr, r->in.domain);
+               } else {
+                       r->in.domain = NULL;
+               }
+               if (r->in.domain) {
+                       _mem_save_domain_0 = NDR_PULL_GET_MEM_CTX(ndr);
+                       NDR_PULL_SET_MEM_CTX(ndr, r->in.domain, 0);
+                       NDR_CHECK(ndr_pull_array_size(ndr, &r->in.domain));
+                       NDR_CHECK(ndr_pull_array_length(ndr, &r->in.domain));
+                       if (ndr_get_array_length(ndr, &r->in.domain) > ndr_get_array_size(ndr, &r->in.domain)) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.domain), ndr_get_array_length(ndr, &r->in.domain));
+                       }
+                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.domain), sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.domain, ndr_get_array_length(ndr, &r->in.domain), sizeof(uint16_t), CH_UTF16));
+                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_0, 0);
+               }
+               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domain_guid));
+               if (_ptr_domain_guid) {
+                       NDR_PULL_ALLOC(ndr, r->in.domain_guid);
+               } else {
+                       r->in.domain_guid = NULL;
+               }
+               if (r->in.domain_guid) {
+                       _mem_save_domain_guid_0 = NDR_PULL_GET_MEM_CTX(ndr);
+                       NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_guid, 0);
+                       NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.domain_guid));
+                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_guid_0, 0);
+               }
+               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_dsa_guid));
+               if (_ptr_dsa_guid) {
+                       NDR_PULL_ALLOC(ndr, r->in.dsa_guid);
+               } else {
+                       r->in.dsa_guid = NULL;
+               }
+               if (r->in.dsa_guid) {
+                       _mem_save_dsa_guid_0 = NDR_PULL_GET_MEM_CTX(ndr);
+                       NDR_PULL_SET_MEM_CTX(ndr, r->in.dsa_guid, 0);
+                       NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.dsa_guid));
+                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dsa_guid_0, 0);
+               }
+               NDR_CHECK(ndr_pull_array_size(ndr, &r->in.dns_host));
+               NDR_CHECK(ndr_pull_array_length(ndr, &r->in.dns_host));
+               if (ndr_get_array_length(ndr, &r->in.dns_host) > ndr_get_array_size(ndr, &r->in.dns_host)) {
+                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.dns_host), ndr_get_array_length(ndr, &r->in.dns_host));
+               }
+               NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.dns_host), sizeof(uint16_t)));
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.dns_host, ndr_get_array_length(ndr, &r->in.dns_host), sizeof(uint16_t), CH_UTF16));
        }
        if (flags & NDR_OUT) {
                NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
@@ -13381,20 +13800,48 @@ static enum ndr_err_code ndr_pull_netr_DSRDEREGISTERDNSHOSTRECORDS(struct ndr_pu
        return NDR_ERR_SUCCESS;
 }
 
-_PUBLIC_ void ndr_print_netr_DSRDEREGISTERDNSHOSTRECORDS(struct ndr_print *ndr, const char *name, int flags, const struct netr_DSRDEREGISTERDNSHOSTRECORDS *r)
+_PUBLIC_ void ndr_print_netr_DsrDeregisterDNSHostRecords(struct ndr_print *ndr, const char *name, int flags, const struct netr_DsrDeregisterDNSHostRecords *r)
 {
-       ndr_print_struct(ndr, name, "netr_DSRDEREGISTERDNSHOSTRECORDS");
+       ndr_print_struct(ndr, name, "netr_DsrDeregisterDNSHostRecords");
        ndr->depth++;
        if (flags & NDR_SET_VALUES) {
                ndr->flags |= LIBNDR_PRINT_SET_VALUES;
        }
        if (flags & NDR_IN) {
-               ndr_print_struct(ndr, "in", "netr_DSRDEREGISTERDNSHOSTRECORDS");
+               ndr_print_struct(ndr, "in", "netr_DsrDeregisterDNSHostRecords");
+               ndr->depth++;
+               ndr_print_ptr(ndr, "server_name", r->in.server_name);
                ndr->depth++;
+               if (r->in.server_name) {
+                       ndr_print_string(ndr, "server_name", r->in.server_name);
+               }
+               ndr->depth--;
+               ndr_print_ptr(ndr, "domain", r->in.domain);
+               ndr->depth++;
+               if (r->in.domain) {
+                       ndr_print_string(ndr, "domain", r->in.domain);
+               }
+               ndr->depth--;
+               ndr_print_ptr(ndr, "domain_guid", r->in.domain_guid);
+               ndr->depth++;
+               if (r->in.domain_guid) {
+                       ndr_print_GUID(ndr, "domain_guid", r->in.domain_guid);
+               }
+               ndr->depth--;
+               ndr_print_ptr(ndr, "dsa_guid", r->in.dsa_guid);
+               ndr->depth++;
+               if (r->in.dsa_guid) {
+                       ndr_print_GUID(ndr, "dsa_guid", r->in.dsa_guid);
+               }
+               ndr->depth--;
+               ndr_print_ptr(ndr, "dns_host", r->in.dns_host);
+               ndr->depth++;
+               ndr_print_string(ndr, "dns_host", r->in.dns_host);
+               ndr->depth--;
                ndr->depth--;
        }
        if (flags & NDR_OUT) {
-               ndr_print_struct(ndr, "out", "netr_DSRDEREGISTERDNSHOSTRECORDS");
+               ndr_print_struct(ndr, "out", "netr_DsrDeregisterDNSHostRecords");
                ndr->depth++;
                ndr_print_WERROR(ndr, "result", r->out.result);
                ndr->depth--;
@@ -13598,11 +14045,10 @@ static enum ndr_err_code ndr_push_netr_DsRGetForestTrustInformation(struct ndr_p
                if (r->out.forest_trust_info == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
-               if (*r->out.forest_trust_info == NULL) {
-                       return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+               NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.forest_trust_info));
+               if (*r->out.forest_trust_info) {
+                       NDR_CHECK(ndr_push_lsa_ForestTrustInformation(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.forest_trust_info));
                }
-               NDR_CHECK(ndr_push_ref_ptr(ndr));
-               NDR_CHECK(ndr_push_lsa_ForestTrustInformation(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.forest_trust_info));
                NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
        }
        return NDR_ERR_SUCCESS;
@@ -13666,14 +14112,18 @@ static enum ndr_err_code ndr_pull_netr_DsRGetForestTrustInformation(struct ndr_p
                }
                _mem_save_forest_trust_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
                NDR_PULL_SET_MEM_CTX(ndr, r->out.forest_trust_info, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_ref_ptr(ndr, &_ptr_forest_trust_info));
-               if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_forest_trust_info));
+               if (_ptr_forest_trust_info) {
                        NDR_PULL_ALLOC(ndr, *r->out.forest_trust_info);
+               } else {
+                       *r->out.forest_trust_info = NULL;
+               }
+               if (*r->out.forest_trust_info) {
+                       _mem_save_forest_trust_info_1 = NDR_PULL_GET_MEM_CTX(ndr);
+                       NDR_PULL_SET_MEM_CTX(ndr, *r->out.forest_trust_info, 0);
+                       NDR_CHECK(ndr_pull_lsa_ForestTrustInformation(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.forest_trust_info));
+                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_forest_trust_info_1, 0);
                }
-               _mem_save_forest_trust_info_1 = NDR_PULL_GET_MEM_CTX(ndr);
-               NDR_PULL_SET_MEM_CTX(ndr, *r->out.forest_trust_info, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_lsa_ForestTrustInformation(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.forest_trust_info));
-               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_forest_trust_info_1, LIBNDR_FLAG_REF_ALLOC);
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_forest_trust_info_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
        }
@@ -13712,7 +14162,9 @@ _PUBLIC_ void ndr_print_netr_DsRGetForestTrustInformation(struct ndr_print *ndr,
                ndr->depth++;
                ndr_print_ptr(ndr, "forest_trust_info", *r->out.forest_trust_info);
                ndr->depth++;
-               ndr_print_lsa_ForestTrustInformation(ndr, "forest_trust_info", *r->out.forest_trust_info);
+               if (*r->out.forest_trust_info) {
+                       ndr_print_lsa_ForestTrustInformation(ndr, "forest_trust_info", *r->out.forest_trust_info);
+               }
                ndr->depth--;
                ndr->depth--;
                ndr_print_WERROR(ndr, "result", r->out.result);
@@ -13752,11 +14204,10 @@ static enum ndr_err_code ndr_push_netr_GetForestTrustInformation(struct ndr_push
                if (r->out.forest_trust_info == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
-               if (*r->out.forest_trust_info == NULL) {
-                       return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+               NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.forest_trust_info));
+               if (*r->out.forest_trust_info) {
+                       NDR_CHECK(ndr_push_lsa_ForestTrustInformation(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.forest_trust_info));
                }
-               NDR_CHECK(ndr_push_ref_ptr(ndr));
-               NDR_CHECK(ndr_push_lsa_ForestTrustInformation(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.forest_trust_info));
                NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
        }
        return NDR_ERR_SUCCESS;
@@ -13825,14 +14276,18 @@ static enum ndr_err_code ndr_pull_netr_GetForestTrustInformation(struct ndr_pull
                }
                _mem_save_forest_trust_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
                NDR_PULL_SET_MEM_CTX(ndr, r->out.forest_trust_info, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_ref_ptr(ndr, &_ptr_forest_trust_info));
-               if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_forest_trust_info));
+               if (_ptr_forest_trust_info) {
                        NDR_PULL_ALLOC(ndr, *r->out.forest_trust_info);
+               } else {
+                       *r->out.forest_trust_info = NULL;
+               }
+               if (*r->out.forest_trust_info) {
+                       _mem_save_forest_trust_info_1 = NDR_PULL_GET_MEM_CTX(ndr);
+                       NDR_PULL_SET_MEM_CTX(ndr, *r->out.forest_trust_info, 0);
+                       NDR_CHECK(ndr_pull_lsa_ForestTrustInformation(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.forest_trust_info));
+                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_forest_trust_info_1, 0);
                }
-               _mem_save_forest_trust_info_1 = NDR_PULL_GET_MEM_CTX(ndr);
-               NDR_PULL_SET_MEM_CTX(ndr, *r->out.forest_trust_info, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_lsa_ForestTrustInformation(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.forest_trust_info));
-               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_forest_trust_info_1, LIBNDR_FLAG_REF_ALLOC);
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_forest_trust_info_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
        }
@@ -13877,7 +14332,9 @@ _PUBLIC_ void ndr_print_netr_GetForestTrustInformation(struct ndr_print *ndr, co
                ndr->depth++;
                ndr_print_ptr(ndr, "forest_trust_info", *r->out.forest_trust_info);
                ndr->depth++;
-               ndr_print_lsa_ForestTrustInformation(ndr, "forest_trust_info", *r->out.forest_trust_info);
+               if (*r->out.forest_trust_info) {
+                       ndr_print_lsa_ForestTrustInformation(ndr, "forest_trust_info", *r->out.forest_trust_info);
+               }
                ndr->depth--;
                ndr->depth--;
                ndr_print_WERROR(ndr, "result", r->out.result);
@@ -14376,11 +14833,11 @@ static const struct ndr_interface_call netlogon_calls[] = {
                false,
        },
        {
-               "netr_NETRLOGONGETTRUSTRID",
-               sizeof(struct netr_NETRLOGONGETTRUSTRID),
-               (ndr_push_flags_fn_t) ndr_push_netr_NETRLOGONGETTRUSTRID,
-               (ndr_pull_flags_fn_t) ndr_pull_netr_NETRLOGONGETTRUSTRID,
-               (ndr_print_function_t) ndr_print_netr_NETRLOGONGETTRUSTRID,
+               "netr_LogonGetTrustRid",
+               sizeof(struct netr_LogonGetTrustRid),
+               (ndr_push_flags_fn_t) ndr_push_netr_LogonGetTrustRid,
+               (ndr_pull_flags_fn_t) ndr_pull_netr_LogonGetTrustRid,
+               (ndr_print_function_t) ndr_print_netr_LogonGetTrustRid,
                false,
        },
        {
@@ -14520,11 +14977,11 @@ static const struct ndr_interface_call netlogon_calls[] = {
                false,
        },
        {
-               "netr_DSRDEREGISTERDNSHOSTRECORDS",
-               sizeof(struct netr_DSRDEREGISTERDNSHOSTRECORDS),
-               (ndr_push_flags_fn_t) ndr_push_netr_DSRDEREGISTERDNSHOSTRECORDS,
-               (ndr_pull_flags_fn_t) ndr_pull_netr_DSRDEREGISTERDNSHOSTRECORDS,
-               (ndr_print_function_t) ndr_print_netr_DSRDEREGISTERDNSHOSTRECORDS,
+               "netr_DsrDeregisterDNSHostRecords",
+               sizeof(struct netr_DsrDeregisterDNSHostRecords),
+               (ndr_push_flags_fn_t) ndr_push_netr_DsrDeregisterDNSHostRecords,
+               (ndr_pull_flags_fn_t) ndr_pull_netr_DsrDeregisterDNSHostRecords,
+               (ndr_print_function_t) ndr_print_netr_DsrDeregisterDNSHostRecords,
                false,
        },
        {