Regenerate C files now that pidl reads imported files - saves a few
[sfrench/samba-autobuild/.git] / source3 / librpc / gen_ndr / ndr_netlogon.c
index 619f08a7813d1dfce13f26854bede21a76591ba4..a656a8501afac914e4e6bfebdce71a7b55c694f5 100644 (file)
@@ -6,6 +6,7 @@
 #include "librpc/gen_ndr/ndr_lsa.h"
 #include "librpc/gen_ndr/ndr_samr.h"
 #include "librpc/gen_ndr/ndr_security.h"
+#include "librpc/gen_ndr/ndr_nbt.h"
 static enum ndr_err_code ndr_push_netr_UasInfo(struct ndr_push *ndr, int ndr_flags, const struct netr_UasInfo *r)
 {
        if (ndr_flags & NDR_SCALARS) {
@@ -234,96 +235,42 @@ _PUBLIC_ void ndr_print_netr_UasLogoffInfo(struct ndr_print *ndr, const char *na
        ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_netr_AcctLockStr(struct ndr_push *ndr, int ndr_flags, const struct netr_AcctLockStr *r)
+_PUBLIC_ enum ndr_err_code ndr_push_netr_AcctLockStr(struct ndr_push *ndr, int ndr_flags, const struct netr_AcctLockStr *r)
 {
-       uint32_t cntr_bindata_1;
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_push_align(ndr, 4));
-               NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->size));
-               NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->length));
-               NDR_CHECK(ndr_push_unique_ptr(ndr, r->bindata));
+               NDR_CHECK(ndr_push_dlong(ndr, NDR_SCALARS, r->lockout_duration));
+               NDR_CHECK(ndr_push_udlong(ndr, NDR_SCALARS, r->reset_count));
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->bad_attempt_lockout));
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->dummy));
        }
        if (ndr_flags & NDR_BUFFERS) {
-               if (r->bindata) {
-                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->size / 2));
-                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->length / 2));
-                       for (cntr_bindata_1 = 0; cntr_bindata_1 < r->length / 2; cntr_bindata_1++) {
-                               NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->bindata[cntr_bindata_1]));
-                       }
-               }
        }
        return NDR_ERR_SUCCESS;
 }
 
-static enum ndr_err_code ndr_pull_netr_AcctLockStr(struct ndr_pull *ndr, int ndr_flags, struct netr_AcctLockStr *r)
+_PUBLIC_ enum ndr_err_code ndr_pull_netr_AcctLockStr(struct ndr_pull *ndr, int ndr_flags, struct netr_AcctLockStr *r)
 {
-       uint32_t _ptr_bindata;
-       uint32_t cntr_bindata_1;
-       TALLOC_CTX *_mem_save_bindata_0;
-       TALLOC_CTX *_mem_save_bindata_1;
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_align(ndr, 4));
-               NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->size));
-               NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->length));
-               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_bindata));
-               if (_ptr_bindata) {
-                       NDR_PULL_ALLOC(ndr, r->bindata);
-               } else {
-                       r->bindata = NULL;
-               }
+               NDR_CHECK(ndr_pull_dlong(ndr, NDR_SCALARS, &r->lockout_duration));
+               NDR_CHECK(ndr_pull_udlong(ndr, NDR_SCALARS, &r->reset_count));
+               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->bad_attempt_lockout));
+               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->dummy));
        }
        if (ndr_flags & NDR_BUFFERS) {
-               if (r->bindata) {
-                       _mem_save_bindata_0 = NDR_PULL_GET_MEM_CTX(ndr);
-                       NDR_PULL_SET_MEM_CTX(ndr, r->bindata, 0);
-                       NDR_CHECK(ndr_pull_array_size(ndr, &r->bindata));
-                       NDR_CHECK(ndr_pull_array_length(ndr, &r->bindata));
-                       if (ndr_get_array_length(ndr, &r->bindata) > ndr_get_array_size(ndr, &r->bindata)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->bindata), ndr_get_array_length(ndr, &r->bindata));
-                       }
-                       NDR_PULL_ALLOC_N(ndr, r->bindata, ndr_get_array_size(ndr, &r->bindata));
-                       _mem_save_bindata_1 = NDR_PULL_GET_MEM_CTX(ndr);
-                       NDR_PULL_SET_MEM_CTX(ndr, r->bindata, 0);
-                       for (cntr_bindata_1 = 0; cntr_bindata_1 < r->length / 2; cntr_bindata_1++) {
-                               NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->bindata[cntr_bindata_1]));
-                       }
-                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_bindata_1, 0);
-                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_bindata_0, 0);
-               }
-               if (r->bindata) {
-                       NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->bindata, r->size / 2));
-               }
-               if (r->bindata) {
-                       NDR_CHECK(ndr_check_array_length(ndr, (void*)&r->bindata, r->length / 2));
-               }
        }
        return NDR_ERR_SUCCESS;
 }
 
 _PUBLIC_ void ndr_print_netr_AcctLockStr(struct ndr_print *ndr, const char *name, const struct netr_AcctLockStr *r)
 {
-       uint32_t cntr_bindata_1;
        ndr_print_struct(ndr, name, "netr_AcctLockStr");
        ndr->depth++;
-       ndr_print_uint16(ndr, "size", r->size);
-       ndr_print_uint16(ndr, "length", r->length);
-       ndr_print_ptr(ndr, "bindata", r->bindata);
-       ndr->depth++;
-       if (r->bindata) {
-               ndr->print(ndr, "%s: ARRAY(%d)", "bindata", r->length / 2);
-               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) {
-                               ndr_print_uint16(ndr, "bindata", r->bindata[cntr_bindata_1]);
-                               free(idx_1);
-                       }
-               }
-               ndr->depth--;
-       }
-       ndr->depth--;
+       ndr_print_dlong(ndr, "lockout_duration", r->lockout_duration);
+       ndr_print_udlong(ndr, "reset_count", r->reset_count);
+       ndr_print_uint32(ndr, "bad_attempt_lockout", r->bad_attempt_lockout);
+       ndr_print_uint32(ndr, "dummy", r->dummy);
        ndr->depth--;
 }
 
@@ -415,8 +362,6 @@ static enum ndr_err_code ndr_push_netr_PasswordInfo(struct ndr_push *ndr, int nd
        }
        if (ndr_flags & NDR_BUFFERS) {
                NDR_CHECK(ndr_push_netr_IdentityInfo(ndr, NDR_BUFFERS, &r->identity_info));
-               NDR_CHECK(ndr_push_samr_Password(ndr, NDR_BUFFERS, &r->lmpassword));
-               NDR_CHECK(ndr_push_samr_Password(ndr, NDR_BUFFERS, &r->ntpassword));
        }
        return NDR_ERR_SUCCESS;
 }
@@ -431,8 +376,6 @@ static enum ndr_err_code ndr_pull_netr_PasswordInfo(struct ndr_pull *ndr, int nd
        }
        if (ndr_flags & NDR_BUFFERS) {
                NDR_CHECK(ndr_pull_netr_IdentityInfo(ndr, NDR_BUFFERS, &r->identity_info));
-               NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_BUFFERS, &r->lmpassword));
-               NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_BUFFERS, &r->ntpassword));
        }
        return NDR_ERR_SUCCESS;
 }
@@ -594,31 +537,31 @@ _PUBLIC_ void ndr_print_netr_NetworkInfo(struct ndr_print *ndr, const char *name
        }
 }
 
-_PUBLIC_ enum ndr_err_code ndr_push_netr_LogonLevel(struct ndr_push *ndr, int ndr_flags, const union netr_LogonLevel *r)
+_PUBLIC_ enum ndr_err_code ndr_push_netr_LogonInfo(struct ndr_push *ndr, int ndr_flags, const union netr_LogonInfo *r)
 {
        if (ndr_flags & NDR_SCALARS) {
                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);
@@ -664,7 +607,7 @@ _PUBLIC_ enum ndr_err_code ndr_push_netr_LogonLevel(struct ndr_push *ndr, int nd
        return NDR_ERR_SUCCESS;
 }
 
-_PUBLIC_ enum ndr_err_code ndr_pull_netr_LogonLevel(struct ndr_pull *ndr, int ndr_flags, union netr_LogonLevel *r)
+_PUBLIC_ enum ndr_err_code ndr_pull_netr_LogonInfo(struct ndr_pull *ndr, int ndr_flags, union netr_LogonInfo *r)
 {
        int level;
        uint16_t _level;
@@ -785,11 +728,11 @@ _PUBLIC_ enum ndr_err_code ndr_pull_netr_LogonLevel(struct ndr_pull *ndr, int nd
        return NDR_ERR_SUCCESS;
 }
 
-_PUBLIC_ void ndr_print_netr_LogonLevel(struct ndr_print *ndr, const char *name, const union netr_LogonLevel *r)
+_PUBLIC_ void ndr_print_netr_LogonInfo(struct ndr_print *ndr, const char *name, const union netr_LogonInfo *r)
 {
        int level;
        level = ndr_print_get_switch_value(ndr, r);
-       ndr_print_union(ndr, name, level, "netr_LogonLevel");
+       ndr_print_union(ndr, name, level, "netr_LogonInfo");
        switch (level) {
                case 1:
                        ndr_print_ptr(ndr, "password", r->password);
@@ -1107,12 +1050,11 @@ _PUBLIC_ void ndr_print_netr_SamBaseInfo(struct ndr_print *ndr, const char *name
        ndr->depth--;
        ndr_print_netr_LMSessionKey(ndr, "LMSessKey", &r->LMSessKey);
        ndr_print_samr_AcctFlags(ndr, "acct_flags", r->acct_flags);
-       ndr->print(ndr, "%s: ARRAY(%d)", "unknown", 7);
+       ndr->print(ndr, "%s: ARRAY(%d)", "unknown", (int)7);
        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);
                }
@@ -1283,12 +1225,11 @@ _PUBLIC_ void ndr_print_netr_SamInfo3(struct ndr_print *ndr, const char *name, c
        ndr_print_ptr(ndr, "sids", r->sids);
        ndr->depth++;
        if (r->sids) {
-               ndr->print(ndr, "%s: ARRAY(%d)", "sids", r->sidcount);
+               ndr->print(ndr, "%s: ARRAY(%d)", "sids", (int)r->sidcount);
                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);
                        }
@@ -1392,12 +1333,11 @@ _PUBLIC_ void ndr_print_netr_SamInfo6(struct ndr_print *ndr, const char *name, c
        ndr_print_ptr(ndr, "sids", r->sids);
        ndr->depth++;
        if (r->sids) {
-               ndr->print(ndr, "%s: ARRAY(%d)", "sids", r->sidcount);
+               ndr->print(ndr, "%s: ARRAY(%d)", "sids", (int)r->sidcount);
                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);
                        }
@@ -1407,12 +1347,11 @@ _PUBLIC_ void ndr_print_netr_SamInfo6(struct ndr_print *ndr, const char *name, c
        ndr->depth--;
        ndr_print_lsa_String(ndr, "forest", &r->forest);
        ndr_print_lsa_String(ndr, "principle", &r->principle);
-       ndr->print(ndr, "%s: ARRAY(%d)", "unknown4", 20);
+       ndr->print(ndr, "%s: ARRAY(%d)", "unknown4", (int)20);
        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);
                }
@@ -1554,12 +1493,11 @@ _PUBLIC_ void ndr_print_netr_PacInfo(struct ndr_print *ndr, const char *name, co
        }
        ndr->depth--;
        ndr_print_netr_UserSessionKey(ndr, "user_session_key", &r->user_session_key);
-       ndr->print(ndr, "%s: ARRAY(%d)", "expansionroom", 10);
+       ndr->print(ndr, "%s: ARRAY(%d)", "expansionroom", (int)10);
        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 +1516,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);
@@ -1899,6 +1837,31 @@ _PUBLIC_ void ndr_print_netr_Authenticator(struct ndr_print *ndr, const char *na
        ndr->depth--;
 }
 
+static enum ndr_err_code ndr_push_netr_LogonLevel(struct ndr_push *ndr, int ndr_flags, enum netr_LogonLevel r)
+{
+       NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
+       return NDR_ERR_SUCCESS;
+}
+
+static enum ndr_err_code ndr_pull_netr_LogonLevel(struct ndr_pull *ndr, int ndr_flags, enum netr_LogonLevel *r)
+{
+       uint16_t v;
+       NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
+       *r = v;
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_netr_LogonLevel(struct ndr_print *ndr, const char *name, enum netr_LogonLevel r)
+{
+       const char *val = NULL;
+
+       switch (r) {
+               case INTERACTIVE_LOGON_TYPE: val = "INTERACTIVE_LOGON_TYPE"; break;
+               case NET_LOGON_TYPE: val = "NET_LOGON_TYPE"; break;
+       }
+       ndr_print_enum(ndr, name, "ENUM", val, r);
+}
+
 static enum ndr_err_code ndr_push_netr_DELTA_DELETE_USER(struct ndr_push *ndr, int ndr_flags, const struct netr_DELTA_DELETE_USER *r)
 {
        if (ndr_flags & NDR_SCALARS) {
@@ -2001,7 +1964,6 @@ static enum ndr_err_code ndr_push_netr_USER_KEY16(struct ndr_push *ndr, int ndr_
                NDR_CHECK(ndr_push_samr_Password(ndr, NDR_SCALARS, &r->pwd));
        }
        if (ndr_flags & NDR_BUFFERS) {
-               NDR_CHECK(ndr_push_samr_Password(ndr, NDR_BUFFERS, &r->pwd));
        }
        return NDR_ERR_SUCCESS;
 }
@@ -2016,7 +1978,6 @@ static enum ndr_err_code ndr_pull_netr_USER_KEY16(struct ndr_pull *ndr, int ndr_
                NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS, &r->pwd));
        }
        if (ndr_flags & NDR_BUFFERS) {
-               NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_BUFFERS, &r->pwd));
        }
        return NDR_ERR_SUCCESS;
 }
@@ -2094,8 +2055,6 @@ static enum ndr_err_code ndr_push_netr_USER_KEYS2(struct ndr_push *ndr, int ndr_
                NDR_CHECK(ndr_push_netr_PasswordHistory(ndr, NDR_SCALARS, &r->history));
        }
        if (ndr_flags & NDR_BUFFERS) {
-               NDR_CHECK(ndr_push_netr_USER_KEY16(ndr, NDR_BUFFERS, &r->lmpassword));
-               NDR_CHECK(ndr_push_netr_USER_KEY16(ndr, NDR_BUFFERS, &r->ntpassword));
        }
        return NDR_ERR_SUCCESS;
 }
@@ -2109,8 +2068,6 @@ static enum ndr_err_code ndr_pull_netr_USER_KEYS2(struct ndr_pull *ndr, int ndr_
                NDR_CHECK(ndr_pull_netr_PasswordHistory(ndr, NDR_SCALARS, &r->history));
        }
        if (ndr_flags & NDR_BUFFERS) {
-               NDR_CHECK(ndr_pull_netr_USER_KEY16(ndr, NDR_BUFFERS, &r->lmpassword));
-               NDR_CHECK(ndr_pull_netr_USER_KEY16(ndr, NDR_BUFFERS, &r->ntpassword));
        }
        return NDR_ERR_SUCCESS;
 }
@@ -2132,7 +2089,6 @@ static enum ndr_err_code ndr_push_netr_USER_KEY_UNION(struct ndr_push *ndr, int
                NDR_CHECK(ndr_push_netr_USER_KEYS2(ndr, NDR_SCALARS, &r->keys2));
        }
        if (ndr_flags & NDR_BUFFERS) {
-               NDR_CHECK(ndr_push_netr_USER_KEYS2(ndr, NDR_BUFFERS, &r->keys2));
        }
        return NDR_ERR_SUCCESS;
 }
@@ -2144,7 +2100,6 @@ static enum ndr_err_code ndr_pull_netr_USER_KEY_UNION(struct ndr_pull *ndr, int
                NDR_CHECK(ndr_pull_netr_USER_KEYS2(ndr, NDR_SCALARS, &r->keys2));
        }
        if (ndr_flags & NDR_BUFFERS) {
-               NDR_CHECK(ndr_pull_netr_USER_KEYS2(ndr, NDR_BUFFERS, &r->keys2));
        }
        return NDR_ERR_SUCCESS;
 }
@@ -2165,7 +2120,6 @@ _PUBLIC_ enum ndr_err_code ndr_push_netr_USER_KEYS(struct ndr_push *ndr, int ndr
                NDR_CHECK(ndr_push_netr_USER_KEY_UNION(ndr, NDR_SCALARS, &r->keys));
        }
        if (ndr_flags & NDR_BUFFERS) {
-               NDR_CHECK(ndr_push_netr_USER_KEY_UNION(ndr, NDR_BUFFERS, &r->keys));
        }
        return NDR_ERR_SUCCESS;
 }
@@ -2178,7 +2132,6 @@ _PUBLIC_ enum ndr_err_code ndr_pull_netr_USER_KEYS(struct ndr_pull *ndr, int ndr
                NDR_CHECK(ndr_pull_netr_USER_KEY_UNION(ndr, NDR_SCALARS, &r->keys));
        }
        if (ndr_flags & NDR_BUFFERS) {
-               NDR_CHECK(ndr_pull_netr_USER_KEY_UNION(ndr, NDR_BUFFERS, &r->keys));
        }
        return NDR_ERR_SUCCESS;
 }
@@ -2326,8 +2279,6 @@ static enum ndr_err_code ndr_push_netr_DELTA_USER(struct ndr_push *ndr, int ndr_
                NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->description));
                NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->workstations));
                NDR_CHECK(ndr_push_samr_LogonHours(ndr, NDR_BUFFERS, &r->logon_hours));
-               NDR_CHECK(ndr_push_samr_Password(ndr, NDR_BUFFERS, &r->lmpassword));
-               NDR_CHECK(ndr_push_samr_Password(ndr, NDR_BUFFERS, &r->ntpassword));
                NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->comment));
                NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->parameters));
                NDR_CHECK(ndr_push_netr_USER_PRIVATE_INFO(ndr, NDR_BUFFERS, &r->user_private_info));
@@ -2391,8 +2342,6 @@ static enum ndr_err_code ndr_pull_netr_DELTA_USER(struct ndr_pull *ndr, int ndr_
                NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->description));
                NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->workstations));
                NDR_CHECK(ndr_pull_samr_LogonHours(ndr, NDR_BUFFERS, &r->logon_hours));
-               NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_BUFFERS, &r->lmpassword));
-               NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_BUFFERS, &r->ntpassword));
                NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->comment));
                NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->parameters));
                NDR_CHECK(ndr_pull_netr_USER_PRIVATE_INFO(ndr, NDR_BUFFERS, &r->user_private_info));
@@ -2464,7 +2413,7 @@ static enum ndr_err_code ndr_push_netr_DELTA_DOMAIN(struct ndr_push *ndr, int nd
                NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->domain_create_time));
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->SecurityInformation));
                NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_SCALARS, &r->sdbuf));
-               NDR_CHECK(ndr_push_netr_AcctLockStr(ndr, NDR_SCALARS, &r->account_lockout));
+               NDR_CHECK(ndr_push_lsa_BinaryString(ndr, NDR_SCALARS, &r->account_lockout));
                NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown2));
                NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown3));
                NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown4));
@@ -2477,7 +2426,7 @@ static enum ndr_err_code ndr_push_netr_DELTA_DOMAIN(struct ndr_push *ndr, int nd
                NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->domain_name));
                NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->comment));
                NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_BUFFERS, &r->sdbuf));
-               NDR_CHECK(ndr_push_netr_AcctLockStr(ndr, NDR_BUFFERS, &r->account_lockout));
+               NDR_CHECK(ndr_push_lsa_BinaryString(ndr, NDR_BUFFERS, &r->account_lockout));
                NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown2));
                NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown3));
                NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown4));
@@ -2500,7 +2449,7 @@ static enum ndr_err_code ndr_pull_netr_DELTA_DOMAIN(struct ndr_pull *ndr, int nd
                NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->domain_create_time));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->SecurityInformation));
                NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_SCALARS, &r->sdbuf));
-               NDR_CHECK(ndr_pull_netr_AcctLockStr(ndr, NDR_SCALARS, &r->account_lockout));
+               NDR_CHECK(ndr_pull_lsa_BinaryString(ndr, NDR_SCALARS, &r->account_lockout));
                NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown2));
                NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown3));
                NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown4));
@@ -2513,7 +2462,7 @@ static enum ndr_err_code ndr_pull_netr_DELTA_DOMAIN(struct ndr_pull *ndr, int nd
                NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->domain_name));
                NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->comment));
                NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_BUFFERS, &r->sdbuf));
-               NDR_CHECK(ndr_pull_netr_AcctLockStr(ndr, NDR_BUFFERS, &r->account_lockout));
+               NDR_CHECK(ndr_pull_lsa_BinaryString(ndr, NDR_BUFFERS, &r->account_lockout));
                NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown2));
                NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown3));
                NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown4));
@@ -2536,7 +2485,7 @@ _PUBLIC_ void ndr_print_netr_DELTA_DOMAIN(struct ndr_print *ndr, const char *nam
        ndr_print_NTTIME(ndr, "domain_create_time", r->domain_create_time);
        ndr_print_uint32(ndr, "SecurityInformation", r->SecurityInformation);
        ndr_print_sec_desc_buf(ndr, "sdbuf", &r->sdbuf);
-       ndr_print_netr_AcctLockStr(ndr, "account_lockout", &r->account_lockout);
+       ndr_print_lsa_BinaryString(ndr, "account_lockout", &r->account_lockout);
        ndr_print_lsa_String(ndr, "unknown2", &r->unknown2);
        ndr_print_lsa_String(ndr, "unknown3", &r->unknown3);
        ndr_print_lsa_String(ndr, "unknown4", &r->unknown4);
@@ -2806,12 +2755,11 @@ _PUBLIC_ void ndr_print_netr_DELTA_GROUP_MEMBER(struct ndr_print *ndr, const cha
        ndr_print_ptr(ndr, "rids", r->rids);
        ndr->depth++;
        if (r->rids) {
-               ndr->print(ndr, "%s: ARRAY(%d)", "rids", r->num_rids);
+               ndr->print(ndr, "%s: ARRAY(%d)", "rids", (int)r->num_rids);
                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);
                        }
@@ -2822,12 +2770,11 @@ _PUBLIC_ void ndr_print_netr_DELTA_GROUP_MEMBER(struct ndr_print *ndr, const cha
        ndr_print_ptr(ndr, "attribs", r->attribs);
        ndr->depth++;
        if (r->attribs) {
-               ndr->print(ndr, "%s: ARRAY(%d)", "attribs", r->num_rids);
+               ndr->print(ndr, "%s: ARRAY(%d)", "attribs", (int)r->num_rids);
                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);
                        }
@@ -3139,12 +3086,11 @@ _PUBLIC_ void ndr_print_netr_DELTA_POLICY(struct ndr_print *ndr, const char *nam
        ndr_print_ptr(ndr, "eventauditoptions", r->eventauditoptions);
        ndr->depth++;
        if (r->eventauditoptions) {
-               ndr->print(ndr, "%s: ARRAY(%d)", "eventauditoptions", r->maxauditeventcount + 1);
+               ndr->print(ndr, "%s: ARRAY(%d)", "eventauditoptions", (int)r->maxauditeventcount + 1);
                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);
                        }
@@ -3281,12 +3227,11 @@ _PUBLIC_ void ndr_print_netr_DELTA_TRUSTED_DOMAIN(struct ndr_print *ndr, const c
        ndr_print_ptr(ndr, "controller_names", r->controller_names);
        ndr->depth++;
        if (r->controller_names) {
-               ndr->print(ndr, "%s: ARRAY(%d)", "controller_names", r->num_controllers);
+               ndr->print(ndr, "%s: ARRAY(%d)", "controller_names", (int)r->num_controllers);
                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);
                        }
@@ -3480,12 +3425,11 @@ _PUBLIC_ void ndr_print_netr_DELTA_ACCOUNT(struct ndr_print *ndr, const char *na
        ndr_print_ptr(ndr, "privilege_attrib", r->privilege_attrib);
        ndr->depth++;
        if (r->privilege_attrib) {
-               ndr->print(ndr, "%s: ARRAY(%d)", "privilege_attrib", r->privilege_entries);
+               ndr->print(ndr, "%s: ARRAY(%d)", "privilege_attrib", (int)r->privilege_entries);
                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);
                        }
@@ -3496,12 +3440,11 @@ _PUBLIC_ void ndr_print_netr_DELTA_ACCOUNT(struct ndr_print *ndr, const char *na
        ndr_print_ptr(ndr, "privilege_name", r->privilege_name);
        ndr->depth++;
        if (r->privilege_name) {
-               ndr->print(ndr, "%s: ARRAY(%d)", "privilege_name", r->privilege_entries);
+               ndr->print(ndr, "%s: ARRAY(%d)", "privilege_name", (int)r->privilege_entries);
                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 +3733,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 +4511,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);
@@ -5287,12 +5230,11 @@ _PUBLIC_ void ndr_print_netr_DELTA_ENUM_ARRAY(struct ndr_print *ndr, const char
        ndr_print_ptr(ndr, "delta_enum", r->delta_enum);
        ndr->depth++;
        if (r->delta_enum) {
-               ndr->print(ndr, "%s: ARRAY(%d)", "delta_enum", r->num_deltas);
+               ndr->print(ndr, "%s: ARRAY(%d)", "delta_enum", (int)r->num_deltas);
                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);
                        }
@@ -5394,11 +5336,35 @@ _PUBLIC_ void ndr_print_netr_AccountBuffer(struct ndr_print *ndr, const char *na
        ndr->depth--;
 }
 
+static enum ndr_err_code ndr_push_netr_InfoFlags(struct ndr_push *ndr, int ndr_flags, uint32_t r)
+{
+       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
+       return NDR_ERR_SUCCESS;
+}
+
+static enum ndr_err_code ndr_pull_netr_InfoFlags(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
+{
+       uint32_t v;
+       NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
+       *r = v;
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_netr_InfoFlags(struct ndr_print *ndr, const char *name, uint32_t r)
+{
+       ndr_print_uint32(ndr, name, r);
+       ndr->depth++;
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_CTRL_REPL_NEEDED", NETLOGON_CTRL_REPL_NEEDED, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_CTRL_REPL_IN_PROGRESS", NETLOGON_CTRL_REPL_IN_PROGRESS, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_CTRL_REPL_FULL_SYNC", NETLOGON_CTRL_REPL_FULL_SYNC, r);
+       ndr->depth--;
+}
+
 static enum ndr_err_code ndr_push_netr_NETLOGON_INFO_1(struct ndr_push *ndr, int ndr_flags, const struct netr_NETLOGON_INFO_1 *r)
 {
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_push_align(ndr, 4));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->flags));
+               NDR_CHECK(ndr_push_netr_InfoFlags(ndr, NDR_SCALARS, r->flags));
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->pdc_connection_status));
        }
        if (ndr_flags & NDR_BUFFERS) {
@@ -5410,7 +5376,7 @@ static enum ndr_err_code ndr_pull_netr_NETLOGON_INFO_1(struct ndr_pull *ndr, int
 {
        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_netr_InfoFlags(ndr, NDR_SCALARS, &r->flags));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->pdc_connection_status));
        }
        if (ndr_flags & NDR_BUFFERS) {
@@ -5422,7 +5388,7 @@ _PUBLIC_ void ndr_print_netr_NETLOGON_INFO_1(struct ndr_print *ndr, const char *
 {
        ndr_print_struct(ndr, name, "netr_NETLOGON_INFO_1");
        ndr->depth++;
-       ndr_print_uint32(ndr, "flags", r->flags);
+       ndr_print_netr_InfoFlags(ndr, "flags", r->flags);
        ndr_print_uint32(ndr, "pdc_connection_status", r->pdc_connection_status);
        ndr->depth--;
 }
@@ -5431,35 +5397,51 @@ static enum ndr_err_code ndr_push_netr_NETLOGON_INFO_2(struct ndr_push *ndr, int
 {
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_push_align(ndr, 4));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->flags));
+               NDR_CHECK(ndr_push_netr_InfoFlags(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_netr_InfoFlags(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;
 }
@@ -5468,9 +5450,14 @@ _PUBLIC_ void ndr_print_netr_NETLOGON_INFO_2(struct ndr_print *ndr, const char *
 {
        ndr_print_struct(ndr, name, "netr_NETLOGON_INFO_2");
        ndr->depth++;
-       ndr_print_uint32(ndr, "flags", r->flags);
+       ndr_print_netr_InfoFlags(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--;
 }
@@ -5479,7 +5466,7 @@ static enum ndr_err_code ndr_push_netr_NETLOGON_INFO_3(struct ndr_push *ndr, int
 {
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_push_align(ndr, 4));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->flags));
+               NDR_CHECK(ndr_push_netr_InfoFlags(ndr, NDR_SCALARS, r->flags));
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->logon_attempts));
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown1));
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown2));
@@ -5496,7 +5483,7 @@ static enum ndr_err_code ndr_pull_netr_NETLOGON_INFO_3(struct ndr_pull *ndr, int
 {
        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_netr_InfoFlags(ndr, NDR_SCALARS, &r->flags));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->logon_attempts));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown1));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown2));
@@ -5513,7 +5500,7 @@ _PUBLIC_ void ndr_print_netr_NETLOGON_INFO_3(struct ndr_print *ndr, const char *
 {
        ndr_print_struct(ndr, name, "netr_NETLOGON_INFO_3");
        ndr->depth++;
-       ndr_print_uint32(ndr, "flags", r->flags);
+       ndr_print_netr_InfoFlags(ndr, "flags", r->flags);
        ndr_print_uint32(ndr, "logon_attempts", r->logon_attempts);
        ndr_print_uint32(ndr, "unknown1", r->unknown1);
        ndr_print_uint32(ndr, "unknown2", r->unknown2);
@@ -5529,17 +5516,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 +5543,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 +5623,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 +5701,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 +5716,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);
@@ -5937,6 +5925,51 @@ _PUBLIC_ void ndr_print_netr_CONTROL_DATA_INFORMATION(struct ndr_print *ndr, con
        }
 }
 
+static enum ndr_err_code ndr_push_netr_NegotiateFlags(struct ndr_push *ndr, int ndr_flags, uint32_t r)
+{
+       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
+       return NDR_ERR_SUCCESS;
+}
+
+static enum ndr_err_code ndr_pull_netr_NegotiateFlags(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
+{
+       uint32_t v;
+       NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
+       *r = v;
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_netr_NegotiateFlags(struct ndr_print *ndr, const char *name, uint32_t r)
+{
+       ndr_print_uint32(ndr, name, r);
+       ndr->depth++;
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_ACCOUNT_LOCKOUT", NETLOGON_NEG_ACCOUNT_LOCKOUT, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_PERSISTENT_SAMREPL", NETLOGON_NEG_PERSISTENT_SAMREPL, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_ARCFOUR", NETLOGON_NEG_ARCFOUR, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_PROMOTION_COUNT", NETLOGON_NEG_PROMOTION_COUNT, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_CHANGELOG_BDC", NETLOGON_NEG_CHANGELOG_BDC, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_FULL_SYNC_REPL", NETLOGON_NEG_FULL_SYNC_REPL, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_MULTIPLE_SIDS", NETLOGON_NEG_MULTIPLE_SIDS, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_REDO", NETLOGON_NEG_REDO, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_PASSWORD_CHANGE_REFUSAL", NETLOGON_NEG_PASSWORD_CHANGE_REFUSAL, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_SEND_PASSWORD_INFO_PDC", NETLOGON_NEG_SEND_PASSWORD_INFO_PDC, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_GENERIC_PASSTHROUGH", NETLOGON_NEG_GENERIC_PASSTHROUGH, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_CONCURRENT_RPC", NETLOGON_NEG_CONCURRENT_RPC, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_AVOID_ACCOUNT_DB_REPL", NETLOGON_NEG_AVOID_ACCOUNT_DB_REPL, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_AVOID_SECURITYAUTH_DB_REPL", NETLOGON_NEG_AVOID_SECURITYAUTH_DB_REPL, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_128BIT", NETLOGON_NEG_128BIT, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_TRANSITIVE_TRUSTS", NETLOGON_NEG_TRANSITIVE_TRUSTS, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_DNS_DOMAIN_TRUSTS", NETLOGON_NEG_DNS_DOMAIN_TRUSTS, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_PASSWORD_SET2", NETLOGON_NEG_PASSWORD_SET2, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_GETDOMAININFO", NETLOGON_NEG_GETDOMAININFO, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_CROSS_FOREST_TRUSTS", NETLOGON_NEG_CROSS_FOREST_TRUSTS, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_NEUTRALIZE_NT4_EMULATION", NETLOGON_NEG_NEUTRALIZE_NT4_EMULATION, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_RODC_PASSTHROUGH", NETLOGON_NEG_RODC_PASSTHROUGH, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_AUTHENTICATED_RPC_LSASS", NETLOGON_NEG_AUTHENTICATED_RPC_LSASS, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_SCHANNEL", NETLOGON_NEG_SCHANNEL, r);
+       ndr->depth--;
+}
+
 static enum ndr_err_code ndr_push_netr_Blob(struct ndr_push *ndr, int ndr_flags, const struct netr_Blob *r)
 {
        if (ndr_flags & NDR_SCALARS) {
@@ -6030,6 +6063,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,13 +6123,15 @@ _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);
        ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_netr_DsRGetDCNameInfo(struct ndr_push *ndr, int ndr_flags, const struct netr_DsRGetDCNameInfo *r)
+_PUBLIC_ enum ndr_err_code ndr_push_netr_DsRGetDCNameInfo(struct ndr_push *ndr, int ndr_flags, const struct netr_DsRGetDCNameInfo *r)
 {
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_push_align(ndr, 4));
@@ -6121,7 +6158,6 @@ static enum ndr_err_code ndr_push_netr_DsRGetDCNameInfo(struct ndr_push *ndr, in
                        NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->dc_address, CH_UTF16)));
                        NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->dc_address, ndr_charset_length(r->dc_address, CH_UTF16), sizeof(uint16_t), CH_UTF16));
                }
-               NDR_CHECK(ndr_push_GUID(ndr, NDR_BUFFERS, &r->domain_guid));
                if (r->domain_name) {
                        NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->domain_name, CH_UTF16)));
                        NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
@@ -6150,7 +6186,7 @@ static enum ndr_err_code ndr_push_netr_DsRGetDCNameInfo(struct ndr_push *ndr, in
        return NDR_ERR_SUCCESS;
 }
 
-static enum ndr_err_code ndr_pull_netr_DsRGetDCNameInfo(struct ndr_pull *ndr, int ndr_flags, struct netr_DsRGetDCNameInfo *r)
+_PUBLIC_ enum ndr_err_code ndr_pull_netr_DsRGetDCNameInfo(struct ndr_pull *ndr, int ndr_flags, struct netr_DsRGetDCNameInfo *r)
 {
        uint32_t _ptr_dc_unc;
        TALLOC_CTX *_mem_save_dc_unc_0;
@@ -6231,7 +6267,6 @@ static enum ndr_err_code ndr_pull_netr_DsRGetDCNameInfo(struct ndr_pull *ndr, in
                        NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->dc_address, ndr_get_array_length(ndr, &r->dc_address), sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dc_address_0, 0);
                }
-               NDR_CHECK(ndr_pull_GUID(ndr, NDR_BUFFERS, &r->domain_guid));
                if (r->domain_name) {
                        _mem_save_domain_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
                        NDR_PULL_SET_MEM_CTX(ndr, r->domain_name, 0);
@@ -6420,12 +6455,11 @@ _PUBLIC_ void ndr_print_netr_BinaryString(struct ndr_print *ndr, const char *nam
                ndr_print_ptr(ndr, "data", r->data);
                ndr->depth++;
                if (r->data) {
-                       ndr->print(ndr, "%s: ARRAY(%d)", "data", r->length / 2);
+                       ndr->print(ndr, "%s: ARRAY(%d)", "data", (int)r->length / 2);
                        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);
                                }
@@ -6694,12 +6728,11 @@ _PUBLIC_ void ndr_print_netr_DomainQuery1(struct ndr_print *ndr, const char *nam
        ndr_print_lsa_String(ndr, "product", &r->product);
        ndr_print_lsa_String(ndr, "unknown5", &r->unknown5);
        ndr_print_lsa_String(ndr, "unknown6", &r->unknown6);
-       ndr->print(ndr, "%s: ARRAY(%d)", "unknown7", 4);
+       ndr->print(ndr, "%s: ARRAY(%d)", "unknown7", (int)4);
        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 +6747,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);
@@ -6862,7 +6895,6 @@ static enum ndr_err_code ndr_push_netr_DomainTrustInfo(struct ndr_push *ndr, int
                NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->domainname));
                NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->fulldomainname));
                NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->forest));
-               NDR_CHECK(ndr_push_GUID(ndr, NDR_BUFFERS, &r->guid));
                if (r->sid) {
                        NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
                }
@@ -6902,7 +6934,6 @@ static enum ndr_err_code ndr_pull_netr_DomainTrustInfo(struct ndr_pull *ndr, int
                NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->domainname));
                NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->fulldomainname));
                NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->forest));
-               NDR_CHECK(ndr_pull_GUID(ndr, NDR_BUFFERS, &r->guid));
                if (r->sid) {
                        _mem_save_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
                        NDR_PULL_SET_MEM_CTX(ndr, r->sid, 0);
@@ -6932,23 +6963,21 @@ _PUBLIC_ void ndr_print_netr_DomainTrustInfo(struct ndr_print *ndr, const char *
                ndr_print_dom_sid2(ndr, "sid", r->sid);
        }
        ndr->depth--;
-       ndr->print(ndr, "%s: ARRAY(%d)", "unknown1", 4);
+       ndr->print(ndr, "%s: ARRAY(%d)", "unknown1", (int)4);
        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);
                }
        }
        ndr->depth--;
-       ndr->print(ndr, "%s: ARRAY(%d)", "unknown", 4);
+       ndr->print(ndr, "%s: ARRAY(%d)", "unknown", (int)4);
        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);
                }
@@ -7042,12 +7071,11 @@ _PUBLIC_ void ndr_print_netr_DomainInfo1(struct ndr_print *ndr, const char *name
        ndr_print_ptr(ndr, "trusts", r->trusts);
        ndr->depth++;
        if (r->trusts) {
-               ndr->print(ndr, "%s: ARRAY(%d)", "trusts", r->num_trusts);
+               ndr->print(ndr, "%s: ARRAY(%d)", "trusts", (int)r->num_trusts);
                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);
                        }
@@ -7055,12 +7083,11 @@ _PUBLIC_ void ndr_print_netr_DomainInfo1(struct ndr_print *ndr, const char *name
                ndr->depth--;
        }
        ndr->depth--;
-       ndr->print(ndr, "%s: ARRAY(%d)", "unknown", 14);
+       ndr->print(ndr, "%s: ARRAY(%d)", "unknown", (int)14);
        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 +7102,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);
@@ -7320,12 +7347,11 @@ _PUBLIC_ void ndr_print_netr_DsRAddressToSitenamesWCtr(struct ndr_print *ndr, co
        ndr_print_ptr(ndr, "sitename", r->sitename);
        ndr->depth++;
        if (r->sitename) {
-               ndr->print(ndr, "%s: ARRAY(%d)", "sitename", r->count);
+               ndr->print(ndr, "%s: ARRAY(%d)", "sitename", (int)r->count);
                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);
                        }
@@ -7507,7 +7533,6 @@ static enum ndr_err_code ndr_push_netr_DomainTrust(struct ndr_push *ndr, int ndr
                if (r->sid) {
                        NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
                }
-               NDR_CHECK(ndr_push_GUID(ndr, NDR_BUFFERS, &r->guid));
        }
        return NDR_ERR_SUCCESS;
 }
@@ -7577,7 +7602,6 @@ static enum ndr_err_code ndr_pull_netr_DomainTrust(struct ndr_pull *ndr, int ndr
                        NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sid_0, 0);
                }
-               NDR_CHECK(ndr_pull_GUID(ndr, NDR_BUFFERS, &r->guid));
        }
        return NDR_ERR_SUCCESS;
 }
@@ -7683,12 +7707,11 @@ _PUBLIC_ void ndr_print_netr_DomainTrustList(struct ndr_print *ndr, const char *
        ndr_print_ptr(ndr, "array", r->array);
        ndr->depth++;
        if (r->array) {
-               ndr->print(ndr, "%s: ARRAY(%d)", "array", r->count);
+               ndr->print(ndr, "%s: ARRAY(%d)", "array", (int)r->count);
                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);
                        }
@@ -7811,12 +7834,11 @@ _PUBLIC_ void ndr_print_netr_DsRAddressToSitenamesExWCtr(struct ndr_print *ndr,
        ndr_print_ptr(ndr, "sitename", r->sitename);
        ndr->depth++;
        if (r->sitename) {
-               ndr->print(ndr, "%s: ARRAY(%d)", "sitename", r->count);
+               ndr->print(ndr, "%s: ARRAY(%d)", "sitename", (int)r->count);
                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);
                        }
@@ -7827,12 +7849,11 @@ _PUBLIC_ void ndr_print_netr_DsRAddressToSitenamesExWCtr(struct ndr_print *ndr,
        ndr_print_ptr(ndr, "subnetname", r->subnetname);
        ndr->depth++;
        if (r->subnetname) {
-               ndr->print(ndr, "%s: ARRAY(%d)", "subnetname", r->count);
+               ndr->print(ndr, "%s: ARRAY(%d)", "subnetname", (int)r->count);
                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);
                        }
@@ -7914,12 +7935,11 @@ _PUBLIC_ void ndr_print_DcSitesCtr(struct ndr_print *ndr, const char *name, cons
        ndr_print_ptr(ndr, "sites", r->sites);
        ndr->depth++;
        if (r->sites) {
-               ndr->print(ndr, "%s: ARRAY(%d)", "sites", r->num_sites);
+               ndr->print(ndr, "%s: ARRAY(%d)", "sites", (int)r->num_sites);
                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);
                        }
@@ -8191,9 +8211,12 @@ static enum ndr_err_code ndr_push_netr_LogonSamLogon(struct ndr_push *ndr, int f
                if (r->in.return_authenticator) {
                        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));
+               NDR_CHECK(ndr_push_netr_LogonLevel(ndr, NDR_SCALARS, r->in.logon_level));
+               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_LogonInfo(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 +8248,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) {
@@ -8290,9 +8314,15 @@ static enum ndr_err_code ndr_pull_netr_LogonSamLogon(struct ndr_pull *ndr, int f
                        NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->in.return_authenticator));
                        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));
+               NDR_CHECK(ndr_pull_netr_LogonLevel(ndr, NDR_SCALARS, &r->in.logon_level));
+               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_LogonInfo(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);
@@ -8366,9 +8396,12 @@ _PUBLIC_ void ndr_print_netr_LogonSamLogon(struct ndr_print *ndr, const char *na
                        ndr_print_netr_Authenticator(ndr, "return_authenticator", r->in.return_authenticator);
                }
                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_netr_LogonLevel(ndr, "logon_level", r->in.logon_level);
+               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_LogonInfo(ndr, "logon", r->in.logon);
+               ndr->depth--;
                ndr_print_uint16(ndr, "validation_level", r->in.validation_level);
                ndr->depth--;
        }
@@ -8421,9 +8454,9 @@ static enum ndr_err_code ndr_push_netr_LogonSamLogoff(struct ndr_push *ndr, int
                if (r->in.return_authenticator) {
                        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_netr_LogonLevel(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));
+               NDR_CHECK(ndr_push_netr_LogonInfo(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.logon));
        }
        if (flags & NDR_OUT) {
                NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.return_authenticator));
@@ -8508,9 +8541,9 @@ static enum ndr_err_code ndr_pull_netr_LogonSamLogoff(struct ndr_pull *ndr, int
                        NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->in.return_authenticator));
                        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_netr_LogonLevel(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));
+               NDR_CHECK(ndr_pull_netr_LogonInfo(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.logon));
        }
        if (flags & NDR_OUT) {
                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_return_authenticator));
@@ -8564,9 +8597,9 @@ _PUBLIC_ void ndr_print_netr_LogonSamLogoff(struct ndr_print *ndr, const char *n
                        ndr_print_netr_Authenticator(ndr, "return_authenticator", r->in.return_authenticator);
                }
                ndr->depth--;
-               ndr_print_uint16(ndr, "logon_level", r->in.logon_level);
+               ndr_print_netr_LogonLevel(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_netr_LogonInfo(ndr, "logon", &r->in.logon);
                ndr->depth--;
        }
        if (flags & NDR_OUT) {
@@ -8604,10 +8637,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 +8651,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 +8687,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 +8729,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 +8764,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 +8778,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 +8822,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 +8866,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 +8895,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, r->in.new_password));
        }
        if (flags & NDR_OUT) {
                if (r->out.return_authenticator == NULL) {
@@ -8877,7 +8918,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 +8957,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, 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 +9006,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 +9040,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 +9067,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 +9078,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 +9101,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 +9151,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 +9181,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 +9210,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 +9868,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 +9886,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 +9924,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 +9974,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 +10110,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 +10130,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 +10179,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 +10234,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);
@@ -10136,10 +10255,13 @@ static enum ndr_err_code ndr_push_netr_LogonControl2(struct ndr_push *ndr, int f
                        NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.logon_server, CH_UTF16)));
                        NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.logon_server, ndr_charset_length(r->in.logon_server, CH_UTF16), sizeof(uint16_t), CH_UTF16));
                }
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.function_code));
+               NDR_CHECK(ndr_push_netr_LogonControlCode(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 +10278,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);
@@ -10178,10 +10301,16 @@ static enum ndr_err_code ndr_pull_netr_LogonControl2(struct ndr_pull *ndr, int f
                        NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.logon_server, ndr_get_array_length(ndr, &r->in.logon_server), sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_logon_server_0, 0);
                }
-               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.function_code));
+               NDR_CHECK(ndr_pull_netr_LogonControlCode(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);
        }
@@ -10215,10 +10344,13 @@ _PUBLIC_ void ndr_print_netr_LogonControl2(struct ndr_print *ndr, const char *na
                        ndr_print_string(ndr, "logon_server", r->in.logon_server);
                }
                ndr->depth--;
-               ndr_print_uint32(ndr, "function_code", r->in.function_code);
+               ndr_print_netr_LogonControlCode(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) {
@@ -10261,17 +10393,17 @@ static enum ndr_err_code ndr_push_netr_ServerAuthenticate2(struct ndr_push *ndr,
                if (r->in.negotiate_flags == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.negotiate_flags));
+               NDR_CHECK(ndr_push_netr_NegotiateFlags(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");
                }
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.negotiate_flags));
+               NDR_CHECK(ndr_push_netr_NegotiateFlags(ndr, NDR_SCALARS, *r->out.negotiate_flags));
                NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
        }
        return NDR_ERR_SUCCESS;
@@ -10282,6 +10414,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);
@@ -10331,27 +10464,27 @@ static enum ndr_err_code ndr_pull_netr_ServerAuthenticate2(struct ndr_pull *ndr,
                }
                _mem_save_negotiate_flags_0 = NDR_PULL_GET_MEM_CTX(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_CHECK(ndr_pull_netr_NegotiateFlags(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);
                }
                _mem_save_negotiate_flags_0 = NDR_PULL_GET_MEM_CTX(ndr);
                NDR_PULL_SET_MEM_CTX(ndr, r->out.negotiate_flags, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.negotiate_flags));
+               NDR_CHECK(ndr_pull_netr_NegotiateFlags(ndr, NDR_SCALARS, r->out.negotiate_flags));
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_negotiate_flags_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
        }
@@ -10383,20 +10516,20 @@ _PUBLIC_ void ndr_print_netr_ServerAuthenticate2(struct ndr_print *ndr, const ch
                ndr->depth--;
                ndr_print_ptr(ndr, "negotiate_flags", r->in.negotiate_flags);
                ndr->depth++;
-               ndr_print_uint32(ndr, "negotiate_flags", *r->in.negotiate_flags);
+               ndr_print_netr_NegotiateFlags(ndr, "negotiate_flags", *r->in.negotiate_flags);
                ndr->depth--;
                ndr->depth--;
        }
        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++;
-               ndr_print_uint32(ndr, "negotiate_flags", *r->out.negotiate_flags);
+               ndr_print_netr_NegotiateFlags(ndr, "negotiate_flags", *r->out.negotiate_flags);
                ndr->depth--;
                ndr_print_NTSTATUS(ndr, "result", r->out.result);
                ndr->depth--;
@@ -10415,7 +10548,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 +10576,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 +10587,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 +10610,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 +10661,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 +10691,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 +10721,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--;
@@ -10943,11 +11110,11 @@ static enum ndr_err_code ndr_push_netr_DsRGetDCName(struct ndr_push *ndr, int fl
                }
                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_GUID(ndr, NDR_SCALARS, r->in.domain_guid));
                }
                NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.site_guid));
                if (r->in.site_guid) {
-                       NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.site_guid));
+                       NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, r->in.site_guid));
                }
                NDR_CHECK(ndr_push_netr_DsRGetDCName_flags(ndr, NDR_SCALARS, r->in.flags));
        }
@@ -10955,7 +11122,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 +11137,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);
 
@@ -11020,7 +11192,7 @@ static enum ndr_err_code ndr_pull_netr_DsRGetDCName(struct ndr_pull *ndr, int fl
                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_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, r->in.domain_guid));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_guid_0, 0);
                }
                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_site_guid));
@@ -11032,7 +11204,7 @@ static enum ndr_err_code ndr_pull_netr_DsRGetDCName(struct ndr_pull *ndr, int fl
                if (r->in.site_guid) {
                        _mem_save_site_guid_0 = NDR_PULL_GET_MEM_CTX(ndr);
                        NDR_PULL_SET_MEM_CTX(ndr, r->in.site_guid, 0);
-                       NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.site_guid));
+                       NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, r->in.site_guid));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_site_guid_0, 0);
                }
                NDR_CHECK(ndr_pull_netr_DsRGetDCName_flags(ndr, NDR_SCALARS, &r->in.flags));
@@ -11045,7 +11217,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 +11277,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--;
@@ -11419,7 +11607,7 @@ static enum ndr_err_code ndr_push_netr_ServerAuthenticate3(struct ndr_push *ndr,
                if (r->in.negotiate_flags == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.negotiate_flags));
+               NDR_CHECK(ndr_push_netr_NegotiateFlags(ndr, NDR_SCALARS, *r->in.negotiate_flags));
        }
        if (flags & NDR_OUT) {
                if (r->out.credentials == NULL) {
@@ -11429,7 +11617,7 @@ static enum ndr_err_code ndr_push_netr_ServerAuthenticate3(struct ndr_push *ndr,
                if (r->out.negotiate_flags == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.negotiate_flags));
+               NDR_CHECK(ndr_push_netr_NegotiateFlags(ndr, NDR_SCALARS, *r->out.negotiate_flags));
                if (r->out.rid == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
@@ -11494,7 +11682,7 @@ static enum ndr_err_code ndr_pull_netr_ServerAuthenticate3(struct ndr_pull *ndr,
                }
                _mem_save_negotiate_flags_0 = NDR_PULL_GET_MEM_CTX(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_CHECK(ndr_pull_netr_NegotiateFlags(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;
@@ -11516,7 +11704,7 @@ static enum ndr_err_code ndr_pull_netr_ServerAuthenticate3(struct ndr_pull *ndr,
                }
                _mem_save_negotiate_flags_0 = NDR_PULL_GET_MEM_CTX(ndr);
                NDR_PULL_SET_MEM_CTX(ndr, r->out.negotiate_flags, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.negotiate_flags));
+               NDR_CHECK(ndr_pull_netr_NegotiateFlags(ndr, NDR_SCALARS, r->out.negotiate_flags));
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_negotiate_flags_0, LIBNDR_FLAG_REF_ALLOC);
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
                        NDR_PULL_ALLOC(ndr, r->out.rid);
@@ -11555,7 +11743,7 @@ _PUBLIC_ void ndr_print_netr_ServerAuthenticate3(struct ndr_print *ndr, const ch
                ndr->depth--;
                ndr_print_ptr(ndr, "negotiate_flags", r->in.negotiate_flags);
                ndr->depth++;
-               ndr_print_uint32(ndr, "negotiate_flags", *r->in.negotiate_flags);
+               ndr_print_netr_NegotiateFlags(ndr, "negotiate_flags", *r->in.negotiate_flags);
                ndr->depth--;
                ndr->depth--;
        }
@@ -11568,7 +11756,7 @@ _PUBLIC_ void ndr_print_netr_ServerAuthenticate3(struct ndr_print *ndr, const ch
                ndr->depth--;
                ndr_print_ptr(ndr, "negotiate_flags", r->out.negotiate_flags);
                ndr->depth++;
-               ndr_print_uint32(ndr, "negotiate_flags", *r->out.negotiate_flags);
+               ndr_print_netr_NegotiateFlags(ndr, "negotiate_flags", *r->out.negotiate_flags);
                ndr->depth--;
                ndr_print_ptr(ndr, "rid", r->out.rid);
                ndr->depth++;
@@ -11599,7 +11787,7 @@ static enum ndr_err_code ndr_push_netr_DsRGetDCNameEx(struct ndr_push *ndr, int
                }
                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_GUID(ndr, NDR_SCALARS, r->in.domain_guid));
                }
                NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.site_name));
                if (r->in.site_name) {
@@ -11614,11 +11802,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");
                }
-               if (*r->out.info == NULL) {
-                       return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+               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_ref_ptr(ndr));
-               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;
@@ -11685,7 +11872,7 @@ static enum ndr_err_code ndr_pull_netr_DsRGetDCNameEx(struct ndr_pull *ndr, int
                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_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, r->in.domain_guid));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_guid_0, 0);
                }
                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_site_name));
@@ -11716,14 +11903,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_ref_ptr(ndr, &_ptr_info));
-               if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+               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);
                }
-               _mem_save_info_1 = 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_PULL_SET_MEM_CTX(ndr, _mem_save_info_1, LIBNDR_FLAG_REF_ALLOC);
                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));
        }
@@ -11774,7 +11965,9 @@ _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);
+               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);
@@ -11798,14 +11991,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;
@@ -11817,6 +12009,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);
 
@@ -11847,14 +12040,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));
        }
@@ -11886,7 +12089,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);
@@ -12081,8 +12286,14 @@ static enum ndr_err_code ndr_push_netr_ServerPasswordSet2(struct ndr_push *ndr,
                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_netr_CryptPassword(ndr, NDR_SCALARS, &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_netr_CryptPassword(ndr, NDR_SCALARS, r->in.new_password));
        }
        if (flags & NDR_OUT) {
                if (r->out.return_authenticator == NULL) {
@@ -12098,7 +12309,9 @@ static enum ndr_err_code ndr_pull_netr_ServerPasswordSet2(struct ndr_pull *ndr,
 {
        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);
 
@@ -12135,8 +12348,20 @@ static enum ndr_err_code ndr_pull_netr_ServerPasswordSet2(struct ndr_pull *ndr,
                }
                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_netr_CryptPassword(ndr, NDR_SCALARS, &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_netr_CryptPassword(ndr, NDR_SCALARS, 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);
        }
@@ -12172,8 +12397,14 @@ _PUBLIC_ void ndr_print_netr_ServerPasswordSet2(struct ndr_print *ndr, const cha
                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_netr_CryptPassword(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_netr_CryptPassword(ndr, "new_password", r->in.new_password);
+               ndr->depth--;
                ndr->depth--;
        }
        if (flags & NDR_OUT) {
@@ -12221,7 +12452,7 @@ static enum ndr_err_code ndr_push_netr_ServerPasswordGet(struct ndr_push *ndr, i
                if (r->out.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->out.password));
+               NDR_CHECK(ndr_push_samr_Password(ndr, NDR_SCALARS, r->out.password));
                NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
        }
        return NDR_ERR_SUCCESS;
@@ -12295,7 +12526,7 @@ static enum ndr_err_code ndr_pull_netr_ServerPasswordGet(struct ndr_pull *ndr, i
                }
                _mem_save_password_0 = NDR_PULL_GET_MEM_CTX(ndr);
                NDR_PULL_SET_MEM_CTX(ndr, r->out.password, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.password));
+               NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS, r->out.password));
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_password_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
        }
@@ -12412,11 +12643,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;
@@ -12481,14 +12711,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));
        }
@@ -12515,12 +12749,11 @@ _PUBLIC_ void ndr_print_netr_DsRAddressToSitenamesW(struct ndr_print *ndr, const
                ndr_print_uint32(ndr, "count", r->in.count);
                ndr_print_ptr(ndr, "addresses", r->in.addresses);
                ndr->depth++;
-               ndr->print(ndr, "%s: ARRAY(%d)", "addresses", r->in.count);
+               ndr->print(ndr, "%s: ARRAY(%d)", "addresses", (int)r->in.count);
                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);
                        }
@@ -12536,7 +12769,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);
@@ -12572,7 +12807,7 @@ static enum ndr_err_code ndr_push_netr_DsRGetDCNameEx2(struct ndr_push *ndr, int
                }
                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_GUID(ndr, NDR_SCALARS, r->in.domain_guid));
                }
                NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.site_name));
                if (r->in.site_name) {
@@ -12587,11 +12822,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");
                }
-               if (*r->out.info == NULL) {
-                       return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+               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_ref_ptr(ndr));
-               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;
@@ -12679,7 +12913,7 @@ static enum ndr_err_code ndr_pull_netr_DsRGetDCNameEx2(struct ndr_pull *ndr, int
                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_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, r->in.domain_guid));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_guid_0, 0);
                }
                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_site_name));
@@ -12710,14 +12944,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_ref_ptr(ndr, &_ptr_info));
-               if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+               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);
                }
-               _mem_save_info_1 = 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_PULL_SET_MEM_CTX(ndr, _mem_save_info_1, LIBNDR_FLAG_REF_ALLOC);
                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));
        }
@@ -12775,7 +13013,9 @@ _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);
+               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);
@@ -12946,11 +13186,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;
@@ -13015,14 +13254,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));
        }
@@ -13049,12 +13292,11 @@ _PUBLIC_ void ndr_print_netr_DsRAddressToSitenamesExW(struct ndr_print *ndr, con
                ndr_print_uint32(ndr, "count", r->in.count);
                ndr_print_ptr(ndr, "addresses", r->in.addresses);
                ndr->depth++;
-               ndr->print(ndr, "%s: ARRAY(%d)", "addresses", r->in.count);
+               ndr->print(ndr, "%s: ARRAY(%d)", "addresses", (int)r->in.count);
                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);
                        }
@@ -13070,7 +13312,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);
@@ -13190,9 +13434,12 @@ static enum ndr_err_code ndr_push_netr_LogonSamLogonEx(struct ndr_push *ndr, int
                        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_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));
+               NDR_CHECK(ndr_push_netr_LogonLevel(ndr, NDR_SCALARS, r->in.logon_level));
+               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_LogonInfo(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");
@@ -13224,6 +13471,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;
@@ -13266,9 +13514,15 @@ static enum ndr_err_code ndr_pull_netr_LogonSamLogonEx(struct ndr_pull *ndr, int
                        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_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));
+               NDR_CHECK(ndr_pull_netr_LogonLevel(ndr, NDR_SCALARS, &r->in.logon_level));
+               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_LogonInfo(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);
@@ -13334,9 +13588,12 @@ _PUBLIC_ void ndr_print_netr_LogonSamLogonEx(struct ndr_print *ndr, const char *
                        ndr_print_string(ndr, "computer_name", r->in.computer_name);
                }
                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_netr_LogonLevel(ndr, "logon_level", r->in.logon_level);
+               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_LogonInfo(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++;
@@ -13482,11 +13739,11 @@ static enum ndr_err_code ndr_push_netr_DsrDeregisterDNSHostRecords(struct ndr_pu
                }
                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_GUID(ndr, NDR_SCALARS, 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));
+                       NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, r->in.dsa_guid));
                }
                if (r->in.dns_host == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
@@ -13558,7 +13815,7 @@ static enum ndr_err_code ndr_pull_netr_DsrDeregisterDNSHostRecords(struct ndr_pu
                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_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, 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));
@@ -13570,7 +13827,7 @@ static enum ndr_err_code ndr_pull_netr_DsrDeregisterDNSHostRecords(struct ndr_pu
                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_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, 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));
@@ -13668,11 +13925,11 @@ static enum ndr_err_code ndr_push_netr_ServerTrustPasswordsGet(struct ndr_push *
                if (r->out.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->out.password));
+               NDR_CHECK(ndr_push_samr_Password(ndr, NDR_SCALARS, r->out.password));
                if (r->out.password2 == 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->out.password2));
+               NDR_CHECK(ndr_push_samr_Password(ndr, NDR_SCALARS, r->out.password2));
                NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
        }
        return NDR_ERR_SUCCESS;
@@ -13749,14 +14006,14 @@ static enum ndr_err_code ndr_pull_netr_ServerTrustPasswordsGet(struct ndr_pull *
                }
                _mem_save_password_0 = NDR_PULL_GET_MEM_CTX(ndr);
                NDR_PULL_SET_MEM_CTX(ndr, r->out.password, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.password));
+               NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS, r->out.password));
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_password_0, LIBNDR_FLAG_REF_ALLOC);
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
                        NDR_PULL_ALLOC(ndr, r->out.password2);
                }
                _mem_save_password2_0 = NDR_PULL_GET_MEM_CTX(ndr);
                NDR_PULL_SET_MEM_CTX(ndr, r->out.password2, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.password2));
+               NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS, r->out.password2));
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_password2_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
        }
@@ -13832,11 +14089,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;
@@ -13900,14 +14156,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));
        }
@@ -13946,7 +14206,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);
@@ -13986,11 +14248,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;
@@ -14059,14 +14320,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));
        }
@@ -14111,7 +14376,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);
@@ -14145,9 +14412,9 @@ static enum ndr_err_code ndr_push_netr_LogonSamLogonWithFlags(struct ndr_push *n
                if (r->in.return_authenticator) {
                        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_netr_LogonLevel(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));
+               NDR_CHECK(ndr_push_netr_LogonInfo(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");
@@ -14253,9 +14520,9 @@ static enum ndr_err_code ndr_pull_netr_LogonSamLogonWithFlags(struct ndr_pull *n
                        NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->in.return_authenticator));
                        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_netr_LogonLevel(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));
+               NDR_CHECK(ndr_pull_netr_LogonInfo(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.logon));
                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);
@@ -14345,9 +14612,9 @@ _PUBLIC_ void ndr_print_netr_LogonSamLogonWithFlags(struct ndr_print *ndr, const
                        ndr_print_netr_Authenticator(ndr, "return_authenticator", r->in.return_authenticator);
                }
                ndr->depth--;
-               ndr_print_uint16(ndr, "logon_level", r->in.logon_level);
+               ndr_print_netr_LogonLevel(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_netr_LogonInfo(ndr, "logon", &r->in.logon);
                ndr_print_uint16(ndr, "validation_level", r->in.validation_level);
                ndr_print_ptr(ndr, "flags", r->in.flags);
                ndr->depth++;
@@ -14820,7 +15087,7 @@ static const char * const netlogon_authservice_strings[] = {
 };
 
 static const struct ndr_interface_string_array netlogon_authservices = {
-       .count  = 3,
+       .count  = 1,
        .names  = netlogon_authservice_strings
 };