diff options
author | Andrew Tridgell <tridge@samba.org> | 2003-11-14 07:20:46 +0000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2003-11-14 07:20:46 +0000 |
commit | e8a3825ebc4dfe55581b980507384153b99f534d (patch) | |
tree | ebf5793643e9480956b345e93c395f9e5f8b3282 /source4/librpc | |
parent | 5b7f049829ec86f2ee50f6ba6443fa349aba84c2 (diff) | |
download | samba-e8a3825ebc4dfe55581b980507384153b99f534d.tar.gz samba-e8a3825ebc4dfe55581b980507384153b99f534d.tar.bz2 samba-e8a3825ebc4dfe55581b980507384153b99f534d.zip |
we can now do a level1 NetDfsEnum()
(This used to be commit f32641f73f7ff12b797378b3b533603ff1d526b5)
Diffstat (limited to 'source4/librpc')
-rw-r--r-- | source4/librpc/idl/dfs.idl | 26 | ||||
-rw-r--r-- | source4/librpc/idl/echo.idl | 23 | ||||
-rw-r--r-- | source4/librpc/ndr/ndr.c | 19 | ||||
-rw-r--r-- | source4/librpc/ndr/ndr_basic.c | 12 | ||||
-rw-r--r-- | source4/librpc/ndr/ndr_dfs.c | 319 | ||||
-rw-r--r-- | source4/librpc/ndr/ndr_dfs.h | 28 | ||||
-rw-r--r-- | source4/librpc/ndr/ndr_echo.c | 201 | ||||
-rw-r--r-- | source4/librpc/ndr/ndr_echo.h | 21 | ||||
-rw-r--r-- | source4/librpc/ndr/ndr_lsa.c | 1850 | ||||
-rw-r--r-- | source4/librpc/rpc/dcerpc.c | 2 |
10 files changed, 1480 insertions, 1021 deletions
diff --git a/source4/librpc/idl/dfs.idl b/source4/librpc/idl/dfs.idl index 110dc3563d..19781568a3 100644 --- a/source4/librpc/idl/dfs.idl +++ b/source4/librpc/idl/dfs.idl @@ -39,7 +39,7 @@ /******************/ /* Function: 0x04 */ NTSTATUS dfs_Info ( - [in,ref] unistr *path, + [in,ref] unistr_noterm *path, [in] unistr *server, [in] unistr *share, [in] uint16 level @@ -48,9 +48,29 @@ /******************/ /* Function: 0x05 */ + typedef struct { + unistr *str; + } dfs_String; + + typedef struct { + uint32 count; + [size_is(count)] dfs_String *s; + } dfs_Enum1; + + typedef union { + case(1) dfs_Enum1 *enum1; + } dfs_EnumInfo; + + typedef struct { + uint32 level; + [switch_is(level)] dfs_EnumInfo e; + } dfs_EnumStruct; + NTSTATUS dfs_Enum ( - [in] unistr *name, [in] uint32 level, - [in] uint32 buffer_size + [in] uint32 bufsize, + [in,out] dfs_EnumStruct *info, + [in] uint32 *unknown, + [in,out] uint32 *total ); } diff --git a/source4/librpc/idl/echo.idl b/source4/librpc/idl/echo.idl index af6cb567d7..f7c65485f8 100644 --- a/source4/librpc/idl/echo.idl +++ b/source4/librpc/idl/echo.idl @@ -25,16 +25,27 @@ interface rpcecho [out,ref,size_is(len)] uint8 *data ); -#define long uint32 +#define int uint32 typedef struct { - long bar; - long count; - long foo; - [size_is(count)] long s[*]; + int *count; + } echo_Enum1; + + typedef struct { + int *count; + } echo_Enum3; + + typedef union { + [case(1)] echo_Enum1 enum1; + [case(3)] echo_Enum3 enum3; + } echo_EnumInfo; + + typedef struct { + int level; + [switch_is(level)] echo_EnumInfo e; } Struct1; void TestCall ( - [out] Struct1 **s1 + [out] Struct1 *s1 ); } diff --git a/source4/librpc/ndr/ndr.c b/source4/librpc/ndr/ndr.c index 307f5988f8..3c2ed6e55b 100644 --- a/source4/librpc/ndr/ndr.c +++ b/source4/librpc/ndr/ndr.c @@ -337,3 +337,22 @@ NTSTATUS ndr_pull_error(struct ndr_pull *ndr, enum ndr_err_code err, const char /* we should map to different status codes */ return NT_STATUS_INVALID_PARAMETER; } + +/* + return and possibly log an NDR error +*/ +NTSTATUS ndr_push_error(struct ndr_push *ndr, enum ndr_err_code err, const char *format, ...) +{ + char *s=NULL; + va_list ap; + + va_start(ap, format); + vasprintf(&s, format, ap); + va_end(ap); + + DEBUG(3,("ndr_push_error(%u): %s\n", err, s)); + + free(s); + /* we should map to different status codes */ + return NT_STATUS_INVALID_PARAMETER; +} diff --git a/source4/librpc/ndr/ndr_basic.c b/source4/librpc/ndr/ndr_basic.c index a643f658c0..6208943d94 100644 --- a/source4/librpc/ndr/ndr_basic.c +++ b/source4/librpc/ndr/ndr_basic.c @@ -239,6 +239,18 @@ NTSTATUS ndr_push_array_uint8(struct ndr_push *ndr, const char *data, uint32 n) } /* + push an array of uint32 +*/ +NTSTATUS ndr_push_array_uint32(struct ndr_push *ndr, const uint32 *data, uint32 n) +{ + int i; + for (i=0;i<n;i++) { + NDR_CHECK(ndr_push_uint32(ndr, data[i])); + } + return NT_STATUS_OK; +} + +/* save the current position */ void ndr_push_save(struct ndr_push *ndr, struct ndr_push_save *save) diff --git a/source4/librpc/ndr/ndr_dfs.c b/source4/librpc/ndr/ndr_dfs.c index e561bdadca..57872d03df 100644 --- a/source4/librpc/ndr/ndr_dfs.c +++ b/source4/librpc/ndr/ndr_dfs.c @@ -8,13 +8,6 @@ NTSTATUS ndr_push_dfs_Exist(struct ndr_push *ndr, struct dfs_Exist *r) return NT_STATUS_OK; } -NTSTATUS ndr_pull_dfs_Exist(struct ndr_pull *ndr, struct dfs_Exist *r) -{ - NDR_CHECK(ndr_pull_uint32(ndr, r->out.exist_flag)); - - return NT_STATUS_OK; -} - NTSTATUS ndr_push_dfs_Add(struct ndr_push *ndr, struct dfs_Add *r) { NDR_CHECK(ndr_push_ptr(ndr, r->in.path)); @@ -38,16 +31,30 @@ NTSTATUS ndr_push_dfs_Add(struct ndr_push *ndr, struct dfs_Add *r) return NT_STATUS_OK; } -NTSTATUS ndr_pull_dfs_Add(struct ndr_pull *ndr, struct dfs_Add *r) +NTSTATUS ndr_push_dfs_Remove(struct ndr_push *ndr, struct dfs_Remove *r) { - NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); + NDR_CHECK(ndr_push_unistr(ndr, r->in.path)); + NDR_CHECK(ndr_push_ptr(ndr, r->in.server)); + if (r->in.server) { + NDR_CHECK(ndr_push_unistr(ndr, r->in.server)); + } + NDR_CHECK(ndr_push_ptr(ndr, r->in.share)); + if (r->in.share) { + NDR_CHECK(ndr_push_unistr(ndr, r->in.share)); + } return NT_STATUS_OK; } -NTSTATUS ndr_push_dfs_Remove(struct ndr_push *ndr, struct dfs_Remove *r) +NTSTATUS ndr_push_dfs_UNKNOWN3(struct ndr_push *ndr, struct dfs_UNKNOWN3 *r) { - NDR_CHECK(ndr_push_unistr(ndr, r->in.path)); + + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_dfs_Info(struct ndr_push *ndr, struct dfs_Info *r) +{ + NDR_CHECK(ndr_push_unistr_noterm(ndr, r->in.path)); NDR_CHECK(ndr_push_ptr(ndr, r->in.server)); if (r->in.server) { NDR_CHECK(ndr_push_unistr(ndr, r->in.server)); @@ -56,19 +63,119 @@ NTSTATUS ndr_push_dfs_Remove(struct ndr_push *ndr, struct dfs_Remove *r) if (r->in.share) { NDR_CHECK(ndr_push_unistr(ndr, r->in.share)); } + NDR_CHECK(ndr_push_uint16(ndr, r->in.level)); return NT_STATUS_OK; } -NTSTATUS ndr_pull_dfs_Remove(struct ndr_pull *ndr, struct dfs_Remove *r) +static NTSTATUS ndr_push_dfs_String(struct ndr_push *ndr, int ndr_flags, struct dfs_String *r) +{ + NDR_CHECK(ndr_push_align(ndr, 4)); + if (!(ndr_flags & NDR_SCALARS)) goto buffers; + NDR_CHECK(ndr_push_ptr(ndr, r->str)); +buffers: + if (!(ndr_flags & NDR_BUFFERS)) goto done; + if (r->str) { + NDR_CHECK(ndr_push_unistr(ndr, r->str)); + } +done: + return NT_STATUS_OK; +} + +static NTSTATUS ndr_push_dfs_Enum1(struct ndr_push *ndr, int ndr_flags, struct dfs_Enum1 *r) +{ + NDR_CHECK(ndr_push_align(ndr, 4)); + if (!(ndr_flags & NDR_SCALARS)) goto buffers; + NDR_CHECK(ndr_push_uint32(ndr, r->count)); + NDR_CHECK(ndr_push_ptr(ndr, r->s)); +buffers: + if (!(ndr_flags & NDR_BUFFERS)) goto done; + if (r->s) { + NDR_CHECK(ndr_push_uint32(ndr, r->count)); + NDR_CHECK(ndr_push_array(ndr, ndr_flags, r->s, sizeof(r->s[0]), r->count, (ndr_push_flags_fn_t)ndr_push_dfs_String)); + } +done: + return NT_STATUS_OK; +} + +static NTSTATUS ndr_push_dfs_EnumInfo(struct ndr_push *ndr, int ndr_flags, uint16 level, union dfs_EnumInfo *r) +{ + if (!(ndr_flags & NDR_SCALARS)) goto buffers; + NDR_CHECK(ndr_push_uint16(ndr, level)); + switch (level) { + case 1: + NDR_CHECK(ndr_push_ptr(ndr, r->enum1)); + break; + + default: + return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level); + } +buffers: + if (!(ndr_flags & NDR_BUFFERS)) goto done; + switch (level) { + case 1: + if (r->enum1) { + NDR_CHECK(ndr_push_dfs_Enum1(ndr, ndr_flags, r->enum1)); + } + break; + + default: + return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level); + } +done: + return NT_STATUS_OK; +} + +static NTSTATUS ndr_push_dfs_EnumStruct(struct ndr_push *ndr, int ndr_flags, struct dfs_EnumStruct *r) +{ + NDR_CHECK(ndr_push_align(ndr, 4)); + if (!(ndr_flags & NDR_SCALARS)) goto buffers; + NDR_CHECK(ndr_push_uint32(ndr, r->level)); + NDR_CHECK(ndr_push_dfs_EnumInfo(ndr, NDR_SCALARS, r->level, &r->e)); +buffers: + if (!(ndr_flags & NDR_BUFFERS)) goto done; + NDR_CHECK(ndr_push_dfs_EnumInfo(ndr, NDR_BUFFERS, r->level, &r->e)); +done: + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_dfs_Enum(struct ndr_push *ndr, struct dfs_Enum *r) +{ + NDR_CHECK(ndr_push_uint32(ndr, r->in.level)); + NDR_CHECK(ndr_push_uint32(ndr, r->in.bufsize)); + NDR_CHECK(ndr_push_ptr(ndr, r->in.info)); + if (r->in.info) { + NDR_CHECK(ndr_push_dfs_EnumStruct(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info)); + } + NDR_CHECK(ndr_push_ptr(ndr, r->in.unknown)); + if (r->in.unknown) { + NDR_CHECK(ndr_push_uint32(ndr, *r->in.unknown)); + } + NDR_CHECK(ndr_push_ptr(ndr, r->in.total)); + if (r->in.total) { + NDR_CHECK(ndr_push_uint32(ndr, *r->in.total)); + } + + return NT_STATUS_OK; +} + +NTSTATUS ndr_pull_dfs_Exist(struct ndr_pull *ndr, struct dfs_Exist *r) +{ + NDR_CHECK(ndr_pull_uint32(ndr, r->out.exist_flag)); + + return NT_STATUS_OK; +} + +NTSTATUS ndr_pull_dfs_Add(struct ndr_pull *ndr, struct dfs_Add *r) { NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); return NT_STATUS_OK; } -NTSTATUS ndr_push_dfs_UNKNOWN3(struct ndr_push *ndr, struct dfs_UNKNOWN3 *r) +NTSTATUS ndr_pull_dfs_Remove(struct ndr_pull *ndr, struct dfs_Remove *r) { + NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); return NT_STATUS_OK; } @@ -80,47 +187,193 @@ NTSTATUS ndr_pull_dfs_UNKNOWN3(struct ndr_pull *ndr, struct dfs_UNKNOWN3 *r) return NT_STATUS_OK; } -NTSTATUS ndr_push_dfs_Info(struct ndr_push *ndr, struct dfs_Info *r) +NTSTATUS ndr_pull_dfs_Info(struct ndr_pull *ndr, struct dfs_Info *r) { - NDR_CHECK(ndr_push_unistr(ndr, r->in.path)); - NDR_CHECK(ndr_push_ptr(ndr, r->in.server)); - if (r->in.server) { - NDR_CHECK(ndr_push_unistr(ndr, r->in.server)); + NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); + + return NT_STATUS_OK; +} + +static NTSTATUS ndr_pull_dfs_String(struct ndr_pull *ndr, int ndr_flags, struct dfs_String *r) +{ + uint32 _ptr_str; + NDR_CHECK(ndr_pull_align(ndr, 4)); + if (!(ndr_flags & NDR_SCALARS)) goto buffers; + NDR_CHECK(ndr_pull_uint32(ndr, &_ptr_str)); + if (_ptr_str) { + NDR_ALLOC(ndr, r->str); + } else { + r->str = NULL; } - NDR_CHECK(ndr_push_ptr(ndr, r->in.share)); - if (r->in.share) { - NDR_CHECK(ndr_push_unistr(ndr, r->in.share)); +buffers: + if (!(ndr_flags & NDR_BUFFERS)) goto done; + if (r->str) { + NDR_CHECK(ndr_pull_unistr(ndr, &r->str)); } - NDR_CHECK(ndr_push_uint16(ndr, r->in.level)); +done: + return NT_STATUS_OK; +} +static NTSTATUS ndr_pull_dfs_Enum1(struct ndr_pull *ndr, int ndr_flags, struct dfs_Enum1 *r) +{ + uint32 _ptr_s; + NDR_CHECK(ndr_pull_align(ndr, 4)); + if (!(ndr_flags & NDR_SCALARS)) goto buffers; + NDR_CHECK(ndr_pull_uint32(ndr, &r->count)); + NDR_CHECK(ndr_pull_uint32(ndr, &_ptr_s)); + if (_ptr_s) { + NDR_ALLOC(ndr, r->s); + } else { + r->s = NULL; + } +buffers: + if (!(ndr_flags & NDR_BUFFERS)) goto done; + if (r->s) { + { + uint32 _array_size; + NDR_CHECK(ndr_pull_uint32(ndr, &_array_size)); + if (r->count > _array_size) { + return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should be %u", _array_size, r->count); + } + } + NDR_ALLOC_N_SIZE(ndr, r->s, r->count, sizeof(r->s[0])); + NDR_CHECK(ndr_pull_array(ndr, ndr_flags, (void **)r->s, sizeof(r->s[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_dfs_String)); + } +done: return NT_STATUS_OK; } -NTSTATUS ndr_pull_dfs_Info(struct ndr_pull *ndr, struct dfs_Info *r) +static NTSTATUS ndr_pull_dfs_EnumInfo(struct ndr_pull *ndr, int ndr_flags, uint16 *level, union dfs_EnumInfo *r) { - NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); + if (!(ndr_flags & NDR_SCALARS)) goto buffers; + NDR_CHECK(ndr_pull_uint16(ndr, level)); + switch (*level) { + case 1: { + uint32 _ptr_enum1; + NDR_CHECK(ndr_pull_uint32(ndr, &_ptr_enum1)); + if (_ptr_enum1) { + NDR_ALLOC(ndr, r->enum1); + } else { + r->enum1 = NULL; + } + break; } + + default: + return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", *level); + } +buffers: + if (!(ndr_flags & NDR_BUFFERS)) goto done; + switch (*level) { + case 1: + if (r->enum1) { + NDR_CHECK(ndr_pull_dfs_Enum1(ndr, NDR_SCALARS|NDR_BUFFERS, r->enum1)); + } + break; + default: + return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", *level); + } +done: return NT_STATUS_OK; } -NTSTATUS ndr_push_dfs_Enum(struct ndr_push *ndr, struct dfs_Enum *r) +static NTSTATUS ndr_pull_dfs_EnumStruct(struct ndr_pull *ndr, int ndr_flags, struct dfs_EnumStruct *r) { - NDR_CHECK(ndr_push_ptr(ndr, r->in.name)); - if (r->in.name) { - NDR_CHECK(ndr_push_unistr(ndr, r->in.name)); + NDR_CHECK(ndr_pull_align(ndr, 4)); + if (!(ndr_flags & NDR_SCALARS)) goto buffers; + NDR_CHECK(ndr_pull_uint32(ndr, &r->level)); + { uint16 _level; + NDR_CHECK(ndr_pull_dfs_EnumInfo(ndr, NDR_SCALARS, &_level, &r->e)); + if (_level != r->level) return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u in e"); } - NDR_CHECK(ndr_push_uint32(ndr, r->in.level)); - NDR_CHECK(ndr_push_uint32(ndr, r->in.buffer_size)); - NDR_CHECK(ndr_push_uint32(ndr, *r->in.resume_handle)); - +buffers: + if (!(ndr_flags & NDR_BUFFERS)) goto done; + { uint16 _level; + NDR_CHECK(ndr_pull_dfs_EnumInfo(ndr, NDR_BUFFERS, &_level, &r->e)); + if (_level != r->level) return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u in e"); + } +done: return NT_STATUS_OK; } NTSTATUS ndr_pull_dfs_Enum(struct ndr_pull *ndr, struct dfs_Enum *r) { - NDR_CHECK(ndr_pull_uint32(ndr, r->out.resume_handle)); + uint32 _ptr_info; + uint32 _ptr_total; + NDR_CHECK(ndr_pull_uint32(ndr, &_ptr_info)); + if (_ptr_info) { + NDR_ALLOC(ndr, r->out.info); + } else { + r->out.info = NULL; + } + if (r->out.info) { + NDR_CHECK(ndr_pull_dfs_EnumStruct(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info)); + } + NDR_CHECK(ndr_pull_uint32(ndr, &_ptr_total)); + if (_ptr_total) { + NDR_ALLOC(ndr, r->out.total); + } else { + r->out.total = NULL; + } + if (r->out.total) { + NDR_CHECK(ndr_pull_uint32(ndr, r->out.total)); + } NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); return NT_STATUS_OK; } +void ndr_print_dfs_String(struct ndr_print *ndr, const char *name, struct dfs_String *r) +{ + ndr_print_struct(ndr, name, "dfs_String"); + ndr->depth++; + ndr_print_ptr(ndr, "str", r->str); + ndr->depth++; + if (r->str) { + ndr_print_unistr(ndr, "str", r->str); + } + ndr->depth--; + ndr->depth--; +} + +void ndr_print_dfs_Enum1(struct ndr_print *ndr, const char *name, struct dfs_Enum1 *r) +{ + ndr_print_struct(ndr, name, "dfs_Enum1"); + ndr->depth++; + ndr_print_uint32(ndr, "count", r->count); + ndr_print_ptr(ndr, "s", r->s); + ndr->depth++; + if (r->s) { + ndr_print_array(ndr, "s", r->s, sizeof(r->s[0]), r->count, (ndr_print_fn_t)ndr_print_dfs_String); + } + ndr->depth--; + ndr->depth--; +} + +void ndr_print_dfs_EnumInfo(struct ndr_print *ndr, const char *name, uint16 level, union dfs_EnumInfo *r) +{ + ndr_print_union(ndr, name, level, "dfs_EnumInfo"); + switch (level) { + case 1: + ndr_print_ptr(ndr, "enum1", r->enum1); + ndr->depth++; + if (r->enum1) { + ndr_print_dfs_Enum1(ndr, "enum1", r->enum1); + } + ndr->depth--; + break; + + default: + ndr_print_bad_level(ndr, name, level); + } +} + +void ndr_print_dfs_EnumStruct(struct ndr_print *ndr, const char *name, struct dfs_EnumStruct *r) +{ + ndr_print_struct(ndr, name, "dfs_EnumStruct"); + ndr->depth++; + ndr_print_uint32(ndr, "level", r->level); + ndr_print_dfs_EnumInfo(ndr, "e", r->level, &r->e); + ndr->depth--; +} + diff --git a/source4/librpc/ndr/ndr_dfs.h b/source4/librpc/ndr/ndr_dfs.h index a1e0c2ef17..ea8868f450 100644 --- a/source4/librpc/ndr/ndr_dfs.h +++ b/source4/librpc/ndr/ndr_dfs.h @@ -62,16 +62,36 @@ struct dfs_Info { }; +struct dfs_String { + const char *str; +}; + +struct dfs_Enum1 { + uint32 count; + struct dfs_String *s; +}; + +union dfs_EnumInfo { +/* [case(1)] */ struct dfs_Enum1 *enum1; +}; + +struct dfs_EnumStruct { + uint32 level; + union dfs_EnumInfo e; +}; + struct dfs_Enum { struct { - const char *name; uint32 level; - uint32 buffer_size; - uint32 *resume_handle; + uint32 bufsize; + struct dfs_EnumStruct *info; + uint32 *unknown; + uint32 *total; } in; struct { - uint32 *resume_handle; + struct dfs_EnumStruct *info; + uint32 *total; NTSTATUS result; } out; diff --git a/source4/librpc/ndr/ndr_echo.c b/source4/librpc/ndr/ndr_echo.c index fb186e1ce9..49f93dcdea 100644 --- a/source4/librpc/ndr/ndr_echo.c +++ b/source4/librpc/ndr/ndr_echo.c @@ -9,24 +9,48 @@ NTSTATUS ndr_push_echo_AddOne(struct ndr_push *ndr, struct echo_AddOne *r) return NT_STATUS_OK; } -NTSTATUS ndr_pull_echo_AddOne(struct ndr_pull *ndr, struct echo_AddOne *r) +NTSTATUS ndr_push_echo_EchoData(struct ndr_push *ndr, struct echo_EchoData *r) { - NDR_CHECK(ndr_pull_uint32(ndr, r->out.v)); + NDR_CHECK(ndr_push_uint32(ndr, r->in.len)); + if (r->in.in_data) { + NDR_CHECK(ndr_push_uint32(ndr, r->in.len)); + NDR_CHECK(ndr_push_array_uint8(ndr, r->in.in_data, r->in.len)); + } return NT_STATUS_OK; } -NTSTATUS ndr_push_echo_EchoData(struct ndr_push *ndr, struct echo_EchoData *r) +NTSTATUS ndr_push_echo_SinkData(struct ndr_push *ndr, struct echo_SinkData *r) { NDR_CHECK(ndr_push_uint32(ndr, r->in.len)); - if (r->in.in_data) { + if (r->in.data) { NDR_CHECK(ndr_push_uint32(ndr, r->in.len)); - NDR_CHECK(ndr_push_array_uint8(ndr, r->in.in_data, r->in.len)); + NDR_CHECK(ndr_push_array_uint8(ndr, r->in.data, r->in.len)); } return NT_STATUS_OK; } +NTSTATUS ndr_push_echo_SourceData(struct ndr_push *ndr, struct echo_SourceData *r) +{ + NDR_CHECK(ndr_push_uint32(ndr, r->in.len)); + + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_TestCall(struct ndr_push *ndr, struct TestCall *r) +{ + + return NT_STATUS_OK; +} + +NTSTATUS ndr_pull_echo_AddOne(struct ndr_pull *ndr, struct echo_AddOne *r) +{ + NDR_CHECK(ndr_pull_uint32(ndr, r->out.v)); + + return NT_STATUS_OK; +} + NTSTATUS ndr_pull_echo_EchoData(struct ndr_pull *ndr, struct echo_EchoData *r) { if (r->out.out_data) { @@ -44,30 +68,12 @@ NTSTATUS ndr_pull_echo_EchoData(struct ndr_pull *ndr, struct echo_EchoData *r) return NT_STATUS_OK; } -NTSTATUS ndr_push_echo_SinkData(struct ndr_push *ndr, struct echo_SinkData *r) -{ - NDR_CHECK(ndr_push_uint32(ndr, r->in.len)); - if (r->in.data) { - NDR_CHECK(ndr_push_uint32(ndr, r->in.len)); - NDR_CHECK(ndr_push_array_uint8(ndr, r->in.data, r->in.len)); - } - - return NT_STATUS_OK; -} - NTSTATUS ndr_pull_echo_SinkData(struct ndr_pull *ndr, struct echo_SinkData *r) { return NT_STATUS_OK; } -NTSTATUS ndr_push_echo_SourceData(struct ndr_push *ndr, struct echo_SourceData *r) -{ - NDR_CHECK(ndr_push_uint32(ndr, r->in.len)); - - return NT_STATUS_OK; -} - NTSTATUS ndr_pull_echo_SourceData(struct ndr_pull *ndr, struct echo_SourceData *r) { if (r->out.data) { @@ -84,43 +90,96 @@ NTSTATUS ndr_pull_echo_SourceData(struct ndr_pull *ndr, struct echo_SourceData * return NT_STATUS_OK; } -static NTSTATUS ndr_pull_Struct1(struct ndr_pull *ndr, int ndr_flags, struct Struct1 *r) +static NTSTATUS ndr_pull_echo_Enum1(struct ndr_pull *ndr, int ndr_flags, struct echo_Enum1 *r) { - uint32 _conformant_size; - NDR_CHECK(ndr_pull_uint32(ndr, &_conformant_size)); + uint32 _ptr_count; NDR_CHECK(ndr_pull_align(ndr, 4)); if (!(ndr_flags & NDR_SCALARS)) goto buffers; - NDR_CHECK(ndr_pull_uint32(ndr, &r->bar)); - NDR_CHECK(ndr_pull_uint32(ndr, &r->count)); - NDR_CHECK(ndr_pull_uint32(ndr, &r->foo)); + NDR_CHECK(ndr_pull_uint32(ndr, &_ptr_count)); + if (_ptr_count) { + NDR_ALLOC(ndr, r->count); + } else { + r->count = NULL; + } buffers: if (!(ndr_flags & NDR_BUFFERS)) goto done; - if (r->count > _conformant_size) { - return ndr_pull_error(ndr, NDR_ERR_CONFORMANT_SIZE, "Bad conformant size %u should be %u", _conformant_size, r->count); + if (r->count) { + NDR_CHECK(ndr_pull_uint32(ndr, r->count)); } - NDR_ALLOC_N_SIZE(ndr, r->s, _conformant_size, sizeof(r->s[0])); - NDR_CHECK(ndr_pull_array_uint32(ndr, r->s, r->count)); done: return NT_STATUS_OK; } -void ndr_print_Struct1(struct ndr_print *ndr, const char *name, struct Struct1 *r) +static NTSTATUS ndr_pull_echo_Enum3(struct ndr_pull *ndr, int ndr_flags, struct echo_Enum3 *r) { - ndr_print_struct(ndr, name, "Struct1"); - ndr->depth++; - ndr_print_uint32(ndr, "bar", r->bar); - ndr_print_uint32(ndr, "count", r->count); - ndr_print_uint32(ndr, "foo", r->foo); - ndr_print_ptr(ndr, "s", r->s); - ndr->depth++; - ndr_print_array_uint32(ndr, "s", r->s, r->count); - ndr->depth--; - ndr->depth--; + uint32 _ptr_count; + NDR_CHECK(ndr_pull_align(ndr, 4)); + if (!(ndr_flags & NDR_SCALARS)) goto buffers; + NDR_CHECK(ndr_pull_uint32(ndr, &_ptr_count)); + if (_ptr_count) { + NDR_ALLOC(ndr, r->count); + } else { + r->count = NULL; + } +buffers: + if (!(ndr_flags & NDR_BUFFERS)) goto done; + if (r->count) { + NDR_CHECK(ndr_pull_uint32(ndr, r->count)); + } +done: + return NT_STATUS_OK; } -NTSTATUS ndr_push_TestCall(struct ndr_push *ndr, struct TestCall *r) +static NTSTATUS ndr_pull_echo_EnumInfo(struct ndr_pull *ndr, int ndr_flags, uint16 *level, union echo_EnumInfo *r) { + if (!(ndr_flags & NDR_SCALARS)) goto buffers; + NDR_CHECK(ndr_pull_uint16(ndr, level)); + switch (*level) { + case 1: { + NDR_CHECK(ndr_pull_echo_Enum1(ndr, NDR_SCALARS, &r->enum1)); + break; } + + case 3: { + NDR_CHECK(ndr_pull_echo_Enum3(ndr, NDR_SCALARS, &r->enum3)); + break; } + + default: + return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", *level); + } +buffers: + if (!(ndr_flags & NDR_BUFFERS)) goto done; + switch (*level) { + case 1: + NDR_CHECK(ndr_pull_echo_Enum1(ndr, NDR_BUFFERS, &r->enum1)); + break; + + case 3: + NDR_CHECK(ndr_pull_echo_Enum3(ndr, NDR_BUFFERS, &r->enum3)); + break; + + default: + return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", *level); + } +done: + return NT_STATUS_OK; +} +static NTSTATUS ndr_pull_Struct1(struct ndr_pull *ndr, int ndr_flags, struct Struct1 *r) +{ + NDR_CHECK(ndr_pull_align(ndr, 4)); + if (!(ndr_flags & NDR_SCALARS)) goto buffers; + NDR_CHECK(ndr_pull_uint32(ndr, &r->level)); + { uint16 _level; + NDR_CHECK(ndr_pull_echo_EnumInfo(ndr, NDR_SCALARS, &_level, &r->e)); + if (_level != r->level) return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u in e"); + } +buffers: + if (!(ndr_flags & NDR_BUFFERS)) goto done; + { uint16 _level; + NDR_CHECK(ndr_pull_echo_EnumInfo(ndr, NDR_BUFFERS, &_level, &r->e)); + if (_level != r->level) return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u in e"); + } +done: return NT_STATUS_OK; } @@ -140,3 +199,55 @@ NTSTATUS ndr_pull_TestCall(struct ndr_pull *ndr, struct TestCall *r) return NT_STATUS_OK; } +void ndr_print_echo_Enum1(struct ndr_print *ndr, const char *name, struct echo_Enum1 *r) +{ + ndr_print_struct(ndr, name, "echo_Enum1"); + ndr->depth++; + ndr_print_ptr(ndr, "count", r->count); + ndr->depth++; + if (r->count) { + ndr_print_uint32(ndr, "count", *r->count); + } + ndr->depth--; + ndr->depth--; +} + +void ndr_print_echo_Enum3(struct ndr_print *ndr, const char *name, struct echo_Enum3 *r) +{ + ndr_print_struct(ndr, name, "echo_Enum3"); + ndr->depth++; + ndr_print_ptr(ndr, "count", r->count); + ndr->depth++; + if (r->count) { + ndr_print_uint32(ndr, "count", *r->count); + } + ndr->depth--; + ndr->depth--; +} + +void ndr_print_echo_EnumInfo(struct ndr_print *ndr, const char *name, uint16 level, union echo_EnumInfo *r) +{ + ndr_print_union(ndr, name, level, "echo_EnumInfo"); + switch (level) { + case 1: + ndr_print_echo_Enum1(ndr, "enum1", &r->enum1); + break; + + case 3: + ndr_print_echo_Enum3(ndr, "enum3", &r->enum3); + break; + + default: + ndr_print_bad_level(ndr, name, level); + } +} + +void ndr_print_Struct1(struct ndr_print *ndr, const char *name, struct Struct1 *r) +{ + ndr_print_struct(ndr, name, "Struct1"); + ndr->depth++; + ndr_print_uint32(ndr, "level", r->level); + ndr_print_echo_EnumInfo(ndr, "e", r->level, &r->e); + ndr->depth--; +} + diff --git a/source4/librpc/ndr/ndr_echo.h b/source4/librpc/ndr/ndr_echo.h index b2c6774c09..5edc4241a6 100644 --- a/source4/librpc/ndr/ndr_echo.h +++ b/source4/librpc/ndr/ndr_echo.h @@ -45,11 +45,22 @@ struct echo_SourceData { }; +struct echo_Enum1 { + uint32 *count; +}; + +struct echo_Enum3 { + uint32 *count; +}; + +union echo_EnumInfo { +/* [case(1)] */ struct echo_Enum1 enum1; +/* [case(3)] */ struct echo_Enum3 enum3; +}; + struct Struct1 { - uint32 bar; - uint32 count; - uint32 foo; - uint32 *s; + uint32 level; + union echo_EnumInfo e; }; struct TestCall { @@ -57,7 +68,7 @@ struct TestCall { } in; struct { - struct Struct1 **s1; + struct Struct1 *s1; } out; }; diff --git a/source4/librpc/ndr/ndr_lsa.c b/source4/librpc/ndr/ndr_lsa.c index a1f01e0278..571014a5d1 100644 --- a/source4/librpc/ndr/ndr_lsa.c +++ b/source4/librpc/ndr/ndr_lsa.c @@ -9,313 +9,599 @@ NTSTATUS ndr_push_lsa_Close(struct ndr_push *ndr, struct lsa_Close *r) return NT_STATUS_OK; } -NTSTATUS ndr_pull_lsa_Close(struct ndr_pull *ndr, struct lsa_Close *r) +NTSTATUS ndr_push_lsa_Delete(struct ndr_push *ndr, struct lsa_Delete *r) { - NDR_CHECK(ndr_pull_policy_handle(ndr, r->out.handle)); - NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); + NDR_CHECK(ndr_push_policy_handle(ndr, r->in.handle)); return NT_STATUS_OK; } -NTSTATUS ndr_push_lsa_Delete(struct ndr_push *ndr, struct lsa_Delete *r) +static NTSTATUS ndr_push_lsa_Name(struct ndr_push *ndr, int ndr_flags, struct lsa_Name *r) +{ + NDR_CHECK(ndr_push_align(ndr, 4)); + if (!(ndr_flags & NDR_SCALARS)) goto buffers; + NDR_CHECK(ndr_push_uint16(ndr, r->name_len)); + NDR_CHECK(ndr_push_uint16(ndr, r->name_size)); + NDR_CHECK(ndr_push_ptr(ndr, r->name)); +buffers: + if (!(ndr_flags & NDR_BUFFERS)) goto done; + if (r->name) { + NDR_CHECK(ndr_push_unistr_noterm(ndr, r->name)); + } +done: + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_lsa_EnumPrivs(struct ndr_push *ndr, struct lsa_EnumPrivs *r) { NDR_CHECK(ndr_push_policy_handle(ndr, r->in.handle)); + NDR_CHECK(ndr_push_uint32(ndr, *r->in.resume_handle)); + NDR_CHECK(ndr_push_uint32(ndr, r->in.max_count)); return NT_STATUS_OK; } -NTSTATUS ndr_pull_lsa_Delete(struct ndr_pull *ndr, struct lsa_Delete *r) +NTSTATUS ndr_push_lsa_QuerySecObj(struct ndr_push *ndr, struct lsa_QuerySecObj *r) { - NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); return NT_STATUS_OK; } -static NTSTATUS ndr_push_lsa_Name(struct ndr_push *ndr, int ndr_flags, struct lsa_Name *r) +NTSTATUS ndr_push_lsa_SetSecObj(struct ndr_push *ndr, struct lsa_SetSecObj *r) +{ + + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_lsa_ChangePassword(struct ndr_push *ndr, struct lsa_ChangePassword *r) { + + return NT_STATUS_OK; +} + +static NTSTATUS ndr_push_lsa_QosInfo(struct ndr_push *ndr, int ndr_flags, struct lsa_QosInfo *r) +{ + struct ndr_push_save _save1, _save2, _save3; + ndr_push_save(ndr, &_save1); NDR_CHECK(ndr_push_align(ndr, 4)); if (!(ndr_flags & NDR_SCALARS)) goto buffers; - NDR_CHECK(ndr_push_uint16(ndr, r->name_len)); - NDR_CHECK(ndr_push_uint16(ndr, r->name_size)); - NDR_CHECK(ndr_push_ptr(ndr, r->name)); + NDR_CHECK(ndr_push_align(ndr, sizeof(uint32))); + ndr_push_save(ndr, &_save2); + NDR_CHECK(ndr_push_uint32(ndr, 0)); + NDR_CHECK(ndr_push_uint16(ndr, r->impersonation_level)); + NDR_CHECK(ndr_push_uint8(ndr, r->context_mode)); + NDR_CHECK(ndr_push_uint8(ndr, r->effective_only)); buffers: if (!(ndr_flags & NDR_BUFFERS)) goto done; - if (r->name) { - NDR_CHECK(ndr_push_unistr_noterm(ndr, r->name)); - } + ndr_push_save(ndr, &_save3); + ndr_push_restore(ndr, &_save2); + NDR_CHECK(ndr_push_uint32(ndr, _save3.offset - _save1.offset)); + ndr_push_restore(ndr, &_save3); done: return NT_STATUS_OK; } -static NTSTATUS ndr_pull_lsa_Name(struct ndr_pull *ndr, int ndr_flags, struct lsa_Name *r) +static NTSTATUS ndr_push_lsa_ObjectAttribute(struct ndr_push *ndr, int ndr_flags, struct lsa_ObjectAttribute *r) { - uint32 _ptr_name; - NDR_CHECK(ndr_pull_align(ndr, 4)); + struct ndr_push_save _save1, _save2, _save3; + ndr_push_save(ndr, &_save1); + NDR_CHECK(ndr_push_align(ndr, 4)); if (!(ndr_flags & NDR_SCALARS)) goto buffers; - NDR_CHECK(ndr_pull_uint16(ndr, &r->name_len)); - NDR_CHECK(ndr_pull_uint16(ndr, &r->name_size)); - NDR_CHECK(ndr_pull_uint32(ndr, &_ptr_name)); - if (_ptr_name) { - NDR_ALLOC(ndr, r->name); - } else { - r->name = NULL; - } + NDR_CHECK(ndr_push_align(ndr, sizeof(uint32))); + ndr_push_save(ndr, &_save2); + NDR_CHECK(ndr_push_uint32(ndr, 0)); + NDR_CHECK(ndr_push_ptr(ndr, r->root_dir)); + NDR_CHECK(ndr_push_ptr(ndr, r->object_name)); + NDR_CHECK(ndr_push_uint32(ndr, r->attributes)); + NDR_CHECK(ndr_push_ptr(ndr, r->sec_desc)); + NDR_CHECK(ndr_push_ptr(ndr, r->sec_qos)); buffers: if (!(ndr_flags & NDR_BUFFERS)) goto done; - if (r->name) { - NDR_CHECK(ndr_pull_unistr_noterm(ndr, &r->name)); + if (r->root_dir) { + NDR_CHECK(ndr_push_uint8(ndr, *r->root_dir)); + } + if (r->object_name) { + NDR_CHECK(ndr_push_unistr(ndr, r->object_name)); + } + if (r->sec_desc) { + NDR_CHECK(ndr_push_security_descriptor(ndr, r->sec_desc)); } + if (r->sec_qos) { + NDR_CHECK(ndr_push_lsa_QosInfo(ndr, ndr_flags, r->sec_qos)); + } + ndr_push_save(ndr, &_save3); + ndr_push_restore(ndr, &_save2); + NDR_CHECK(ndr_push_uint32(ndr, _save3.offset - _save1.offset)); + ndr_push_restore(ndr, &_save3); done: return NT_STATUS_OK; } -void ndr_print_lsa_Name(struct ndr_print *ndr, const char *name, struct lsa_Name *r) +NTSTATUS ndr_push_lsa_OpenPolicy(struct ndr_push *ndr, struct lsa_OpenPolicy *r) { - ndr_print_struct(ndr, name, "lsa_Name"); - ndr->depth++; - ndr_print_uint16(ndr, "name_len", r->name_len); - ndr_print_uint16(ndr, "name_size", r->name_size); - ndr_print_ptr(ndr, "name", r->name); - ndr->depth++; - if (r->name) { - ndr_print_unistr_noterm(ndr, "name", r->name); + NDR_CHECK(ndr_push_ptr(ndr, r->in.system_name)); + if (r->in.system_name) { + NDR_CHECK(ndr_push_uint16(ndr, *r->in.system_name)); } - ndr->depth--; - ndr->depth--; + NDR_CHECK(ndr_push_lsa_ObjectAttribute(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.attr)); + NDR_CHECK(ndr_push_uint32(ndr, r->in.desired_access)); + + return NT_STATUS_OK; } -static NTSTATUS ndr_pull_lsa_PrivEntry(struct ndr_pull *ndr, int ndr_flags, struct lsa_PrivEntry *r) +NTSTATUS ndr_push_lsa_QueryInfoPolicy(struct ndr_push *ndr, struct lsa_QueryInfoPolicy *r) { - NDR_CHECK(ndr_pull_align(ndr, 4)); + NDR_CHECK(ndr_push_policy_handle(ndr, r->in.handle)); + NDR_CHECK(ndr_push_uint16(ndr, r->in.level)); + + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_lsa_SetInfoPolicy(struct ndr_push *ndr, struct lsa_SetInfoPolicy *r) +{ + + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_lsa_ClearAuditLog(struct ndr_push *ndr, struct lsa_ClearAuditLog *r) +{ + + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_lsa_CreateAccount(struct ndr_push *ndr, struct lsa_CreateAccount *r) +{ + + return NT_STATUS_OK; +} + +static NTSTATUS ndr_push_lsa_SidPtr(struct ndr_push *ndr, int ndr_flags, struct lsa_SidPtr *r) +{ + NDR_CHECK(ndr_push_align(ndr, 4)); if (!(ndr_flags & NDR_SCALARS)) goto buffers; - NDR_CHECK(ndr_pull_lsa_Name(ndr, NDR_SCALARS, &r->name)); - NDR_CHECK(ndr_pull_uint32(ndr, &r->luid_low)); - NDR_CHECK(ndr_pull_uint32(ndr, &r->luid_high)); + NDR_CHECK(ndr_push_ptr(ndr, r->sid)); buffers: if (!(ndr_flags & NDR_BUFFERS)) goto done; - NDR_CHECK(ndr_pull_lsa_Name(ndr, ndr_flags, &r->name)); + if (r->sid) { + NDR_CHECK(ndr_push_dom_sid2(ndr, r->sid)); + } done: return NT_STATUS_OK; } -void ndr_print_lsa_PrivEntry(struct ndr_print *ndr, const char *name, struct lsa_PrivEntry *r) +static NTSTATUS ndr_push_lsa_SidArray(struct ndr_push *ndr, int ndr_flags, struct lsa_SidArray *r) { - ndr_print_struct(ndr, name, "lsa_PrivEntry"); - ndr->depth++; - ndr_print_lsa_Name(ndr, "name", &r->name); - ndr_print_uint32(ndr, "luid_low", r->luid_low); - ndr_print_uint32(ndr, "luid_high", r->luid_high); - ndr->depth--; + NDR_CHECK(ndr_push_align(ndr, 4)); + if (!(ndr_flags & NDR_SCALARS)) goto buffers; + NDR_CHECK(ndr_push_uint32(ndr, r->num_sids)); + NDR_CHECK(ndr_push_ptr(ndr, r->sids)); +buffers: + if (!(ndr_flags & NDR_BUFFERS)) goto done; + if (r->sids) { + NDR_CHECK(ndr_push_uint32(ndr, r->num_sids)); + NDR_CHECK(ndr_push_array(ndr, ndr_flags, r->sids, sizeof(r->sids[0]), r->num_sids, (ndr_push_flags_fn_t)ndr_push_lsa_SidPtr)); + } +done: + return NT_STATUS_OK; } -static NTSTATUS ndr_pull_lsa_PrivArray(struct ndr_pull *ndr, int ndr_flags, struct lsa_PrivArray *r) +NTSTATUS ndr_push_lsa_EnumAccounts(struct ndr_push *ndr, struct lsa_EnumAccounts *r) { - uint32 _ptr_privs; - NDR_CHECK(ndr_pull_align(ndr, 4)); + NDR_CHECK(ndr_push_policy_handle(ndr, r->in.handle)); + NDR_CHECK(ndr_push_uint32(ndr, *r->in.resume_handle)); + NDR_CHECK(ndr_push_uint32(ndr, r->in.num_entries)); + + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_lsa_CreateTrustDom(struct ndr_push *ndr, struct lsa_CreateTrustDom *r) +{ + + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_lsa_EnumTrustDom(struct ndr_push *ndr, struct lsa_EnumTrustDom *r) +{ + NDR_CHECK(ndr_push_policy_handle(ndr, r->in.handle)); + NDR_CHECK(ndr_push_uint32(ndr, *r->in.resume_handle)); + NDR_CHECK(ndr_push_uint32(ndr, r->in.num_entries)); + + return NT_STATUS_OK; +} + +static NTSTATUS ndr_push_lsa_TranslatedSid(struct ndr_push *ndr, int ndr_flags, struct lsa_TranslatedSid *r) +{ + NDR_CHECK(ndr_push_align(ndr, 4)); if (!(ndr_flags & NDR_SCALARS)) goto buffers; - NDR_CHECK(ndr_pull_uint32(ndr, &r->count)); - NDR_CHECK(ndr_pull_uint32(ndr, &_ptr_privs)); - if (_ptr_privs) { - NDR_ALLOC(ndr, r->privs); - } else { - r->privs = NULL; - } + NDR_CHECK(ndr_push_uint16(ndr, r->sid_type)); + NDR_CHECK(ndr_push_uint32(ndr, r->rid)); + NDR_CHECK(ndr_push_uint32(ndr, r->sid_index)); buffers: if (!(ndr_flags & NDR_BUFFERS)) goto done; - if (r->privs) { - { - uint32 _array_size; - NDR_CHECK(ndr_pull_uint32(ndr, &_array_size)); - if (r->count > _array_size) { - return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should be %u", _array_size, r->count); - } +done: + return NT_STATUS_OK; +} + +static NTSTATUS ndr_push_lsa_TransSidArray(struct ndr_push *ndr, int ndr_flags, struct lsa_TransSidArray *r) +{ + NDR_CHECK(ndr_push_align(ndr, 4)); + if (!(ndr_flags & NDR_SCALARS)) goto buffers; + NDR_CHECK(ndr_push_uint32(ndr, r->count)); + NDR_CHECK(ndr_push_ptr(ndr, r->sids)); +buffers: + if (!(ndr_flags & NDR_BUFFERS)) goto done; + if (r->sids) { + NDR_CHECK(ndr_push_uint32(ndr, r->count)); + NDR_CHECK(ndr_push_array(ndr, ndr_flags, r->sids, sizeof(r->sids[0]), r->count, (ndr_push_flags_fn_t)ndr_push_lsa_TranslatedSid)); } - NDR_ALLOC_N_SIZE(ndr, r->privs, r->count, sizeof(r->privs[0])); - NDR_CHECK(ndr_pull_array(ndr, ndr_flags, (void **)r->privs, sizeof(r->privs[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_lsa_PrivEntry)); +done: + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_lsa_LookupNames(struct ndr_push *ndr, struct lsa_LookupNames *r) +{ + NDR_CHECK(ndr_push_policy_handle(ndr, r->in.handle)); + NDR_CHECK(ndr_push_uint32(ndr, r->in.num_names)); + if (r->in.names) { + int ndr_flags = NDR_SCALARS|NDR_BUFFERS; + NDR_CHECK(ndr_push_uint32(ndr, r->in.num_names)); + NDR_CHECK(ndr_push_array(ndr, ndr_flags, r->in.names, sizeof(r->in.names[0]), r->in.num_names, (ndr_push_flags_fn_t)ndr_push_lsa_Name)); } + NDR_CHECK(ndr_push_lsa_TransSidArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sids)); + NDR_CHECK(ndr_push_uint16(ndr, r->in.level)); + NDR_CHECK(ndr_push_uint32(ndr, *r->in.count)); + + return NT_STATUS_OK; +} + +static NTSTATUS ndr_push_lsa_TranslatedName(struct ndr_push *ndr, int ndr_flags, struct lsa_TranslatedName *r) +{ + NDR_CHECK(ndr_push_align(ndr, 4)); + if (!(ndr_flags & NDR_SCALARS)) goto buffers; + NDR_CHECK(ndr_push_uint16(ndr, r->sid_type)); + NDR_CHECK(ndr_push_lsa_Name(ndr, NDR_SCALARS, &r->name)); + NDR_CHECK(ndr_push_uint32(ndr, r->sid_index)); +buffers: + if (!(ndr_flags & NDR_BUFFERS)) goto done; + NDR_CHECK(ndr_push_lsa_Name(ndr, ndr_flags, &r->name)); done: return NT_STATUS_OK; } -void ndr_print_lsa_PrivArray(struct ndr_print *ndr, const char *name, struct lsa_PrivArray *r) +static NTSTATUS ndr_push_lsa_TransNameArray(struct ndr_push *ndr, int ndr_flags, struct lsa_TransNameArray *r) { - ndr_print_struct(ndr, name, "lsa_PrivArray"); - ndr->depth++; - ndr_print_uint32(ndr, "count", r->count); - ndr_print_ptr(ndr, "privs", r->privs); - ndr->depth++; - if (r->privs) { - ndr_print_array(ndr, "privs", r->privs, sizeof(r->privs[0]), r->count, (ndr_print_fn_t)ndr_print_lsa_PrivEntry); + NDR_CHECK(ndr_push_align(ndr, 4)); + if (!(ndr_flags & NDR_SCALARS)) goto buffers; + NDR_CHECK(ndr_push_uint32(ndr, r->count)); + NDR_CHECK(ndr_push_ptr(ndr, r->names)); +buffers: + if (!(ndr_flags & NDR_BUFFERS)) goto done; + if (r->names) { + NDR_CHECK(ndr_push_uint32(ndr, r->count)); + NDR_CHECK(ndr_push_array(ndr, ndr_flags, r->names, sizeof(r->names[0]), r->count, (ndr_push_flags_fn_t)ndr_push_lsa_TranslatedName)); } - ndr->depth--; - ndr->depth--; +done: + return NT_STATUS_OK; } -NTSTATUS ndr_push_lsa_EnumPrivs(struct ndr_push *ndr, struct lsa_EnumPrivs *r) +NTSTATUS ndr_push_lsa_LookupSids(struct ndr_push *ndr, struct lsa_LookupSids *r) { NDR_CHECK(ndr_push_policy_handle(ndr, r->in.handle)); - NDR_CHECK(ndr_push_uint32(ndr, *r->in.resume_handle)); - NDR_CHECK(ndr_push_uint32(ndr, r->in.max_count)); + NDR_CHECK(ndr_push_lsa_SidArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sids)); + NDR_CHECK(ndr_push_lsa_TransNameArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.names)); + NDR_CHECK(ndr_push_uint16(ndr, r->in.level)); + NDR_CHECK(ndr_push_uint32(ndr, *r->in.count)); return NT_STATUS_OK; } -NTSTATUS ndr_pull_lsa_EnumPrivs(struct ndr_pull *ndr, struct lsa_EnumPrivs *r) +NTSTATUS ndr_push_CREATESECRET(struct ndr_push *ndr, struct CREATESECRET *r) { - NDR_CHECK(ndr_pull_uint32(ndr, r->out.resume_handle)); - NDR_CHECK(ndr_pull_lsa_PrivArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.privs)); - NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); return NT_STATUS_OK; } -NTSTATUS ndr_push_lsa_QuerySecObj(struct ndr_push *ndr, struct lsa_QuerySecObj *r) +NTSTATUS ndr_push_lsa_OpenAccount(struct ndr_push *ndr, struct lsa_OpenAccount *r) { + NDR_CHECK(ndr_push_policy_handle(ndr, r->in.handle)); + NDR_CHECK(ndr_push_dom_sid2(ndr, r->in.sid)); + NDR_CHECK(ndr_push_uint32(ndr, r->in.desired_access)); return NT_STATUS_OK; } -NTSTATUS ndr_pull_lsa_QuerySecObj(struct ndr_pull *ndr, struct lsa_QuerySecObj *r) +NTSTATUS ndr_push_lsa_EnumPrivsAccount(struct ndr_push *ndr, struct lsa_EnumPrivsAccount *r) { - NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); + NDR_CHECK(ndr_push_policy_handle(ndr, r->in.handle)); return NT_STATUS_OK; } -NTSTATUS ndr_push_lsa_SetSecObj(struct ndr_push *ndr, struct lsa_SetSecObj *r) +NTSTATUS ndr_push_ADDPRIVS(struct ndr_push *ndr, struct ADDPRIVS *r) { return NT_STATUS_OK; } -NTSTATUS ndr_pull_lsa_SetSecObj(struct ndr_pull *ndr, struct lsa_SetSecObj *r) +NTSTATUS ndr_push_REMOVEPRIVS(struct ndr_push *ndr, struct REMOVEPRIVS *r) { - NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); return NT_STATUS_OK; } -NTSTATUS ndr_push_lsa_ChangePassword(struct ndr_push *ndr, struct lsa_ChangePassword *r) +NTSTATUS ndr_push_GETQUOTAS(struct ndr_push *ndr, struct GETQUOTAS *r) { return NT_STATUS_OK; } -NTSTATUS ndr_pull_lsa_ChangePassword(struct ndr_pull *ndr, struct lsa_ChangePassword *r) +NTSTATUS ndr_push_SETQUOTAS(struct ndr_push *ndr, struct SETQUOTAS *r) +{ + + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_GETSYSTEMACCOUNT(struct ndr_push *ndr, struct GETSYSTEMACCOUNT *r) +{ + + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_SETSYSTEMACCOUNT(struct ndr_push *ndr, struct SETSYSTEMACCOUNT *r) +{ + + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_OPENTRUSTDOM(struct ndr_push *ndr, struct OPENTRUSTDOM *r) +{ + + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_QUERYTRUSTDOM(struct ndr_push *ndr, struct QUERYTRUSTDOM *r) +{ + + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_SETINFOTRUSTDOM(struct ndr_push *ndr, struct SETINFOTRUSTDOM *r) +{ + + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_OPENSECRET(struct ndr_push *ndr, struct OPENSECRET *r) +{ + + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_SETSECRET(struct ndr_push *ndr, struct SETSECRET *r) +{ + + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_QUERYSECRET(struct ndr_push *ndr, struct QUERYSECRET *r) +{ + + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_LOOKUPPRIVVALUE(struct ndr_push *ndr, struct LOOKUPPRIVVALUE *r) +{ + + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_lsa_LookupPrivName(struct ndr_push *ndr, struct lsa_LookupPrivName *r) +{ + NDR_CHECK(ndr_push_policy_handle(ndr, r->in.handle)); + NDR_CHECK(ndr_push_uint32(ndr, r->in.luid_high)); + NDR_CHECK(ndr_push_uint32(ndr, r->in.luid_low)); + + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_PRIV_GET_DISPNAME(struct ndr_push *ndr, struct PRIV_GET_DISPNAME *r) +{ + + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_DELETEOBJECT(struct ndr_push *ndr, struct DELETEOBJECT *r) +{ + + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_ENUMACCTWITHRIGHT(struct ndr_push *ndr, struct ENUMACCTWITHRIGHT *r) { + + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_lsa_EnumAccountRights(struct ndr_push *ndr, struct lsa_EnumAccountRights *r) +{ + NDR_CHECK(ndr_push_policy_handle(ndr, r->in.handle)); + NDR_CHECK(ndr_push_dom_sid2(ndr, r->in.sid)); + + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_ADDACCTRIGHTS(struct ndr_push *ndr, struct ADDACCTRIGHTS *r) +{ + + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_REMOVEACCTRIGHTS(struct ndr_push *ndr, struct REMOVEACCTRIGHTS *r) +{ + + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_QUERYTRUSTDOMINFO(struct ndr_push *ndr, struct QUERYTRUSTDOMINFO *r) +{ + + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_SETTRUSTDOMINFO(struct ndr_push *ndr, struct SETTRUSTDOMINFO *r) +{ + + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_DELETETRUSTDOM(struct ndr_push *ndr, struct DELETETRUSTDOM *r) +{ + + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_STOREPRIVDATA(struct ndr_push *ndr, struct STOREPRIVDATA *r) +{ + + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_RETRPRIVDATA(struct ndr_push *ndr, struct RETRPRIVDATA *r) +{ + + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_lsa_OpenPolicy2(struct ndr_push *ndr, struct lsa_OpenPolicy2 *r) +{ + NDR_CHECK(ndr_push_ptr(ndr, r->in.system_name)); + if (r->in.system_name) { + NDR_CHECK(ndr_push_unistr(ndr, r->in.system_name)); + } + NDR_CHECK(ndr_push_lsa_ObjectAttribute(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.attr)); + NDR_CHECK(ndr_push_uint32(ndr, r->in.desired_access)); + + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_UNK_GET_CONNUSER(struct ndr_push *ndr, struct UNK_GET_CONNUSER *r) +{ + + return NT_STATUS_OK; +} + +NTSTATUS ndr_push_QUERYINFO2(struct ndr_push *ndr, struct QUERYINFO2 *r) +{ + + return NT_STATUS_OK; +} + +NTSTATUS ndr_pull_lsa_Close(struct ndr_pull *ndr, struct lsa_Close *r) +{ + NDR_CHECK(ndr_pull_policy_handle(ndr, r->out.handle)); NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); return NT_STATUS_OK; } -static NTSTATUS ndr_push_lsa_QosInfo(struct ndr_push *ndr, int ndr_flags, struct lsa_QosInfo *r) +NTSTATUS ndr_pull_lsa_Delete(struct ndr_pull *ndr, struct lsa_Delete *r) { - struct ndr_push_save _save1, _save2, _save3; - ndr_push_save(ndr, &_save1); - NDR_CHECK(ndr_push_align(ndr, 4)); + NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); + + return NT_STATUS_OK; +} + +static NTSTATUS ndr_pull_lsa_Name(struct ndr_pull *ndr, int ndr_flags, struct lsa_Name *r) +{ + uint32 _ptr_name; + NDR_CHECK(ndr_pull_align(ndr, 4)); if (!(ndr_flags & NDR_SCALARS)) goto buffers; - NDR_CHECK(ndr_push_align(ndr, sizeof(uint32))); - ndr_push_save(ndr, &_save2); - NDR_CHECK(ndr_push_uint32(ndr, 0)); - NDR_CHECK(ndr_push_uint16(ndr, r->impersonation_level)); - NDR_CHECK(ndr_push_uint8(ndr, r->context_mode)); - NDR_CHECK(ndr_push_uint8(ndr, r->effective_only)); + NDR_CHECK(ndr_pull_uint16(ndr, &r->name_len)); + NDR_CHECK(ndr_pull_uint16(ndr, &r->name_size)); + NDR_CHECK(ndr_pull_uint32(ndr, &_ptr_name)); + if (_ptr_name) { + NDR_ALLOC(ndr, r->name); + } else { + r->name = NULL; + } buffers: if (!(ndr_flags & NDR_BUFFERS)) goto done; - ndr_push_save(ndr, &_save3); - ndr_push_restore(ndr, &_save2); - NDR_CHECK(ndr_push_uint32(ndr, _save3.offset - _save1.offset)); - ndr_push_restore(ndr, &_save3); + if (r->name) { + NDR_CHECK(ndr_pull_unistr_noterm(ndr, &r->name)); + } done: return NT_STATUS_OK; } -void ndr_print_lsa_QosInfo(struct ndr_print *ndr, const char *name, struct lsa_QosInfo *r) +static NTSTATUS ndr_pull_lsa_PrivEntry(struct ndr_pull *ndr, int ndr_flags, struct lsa_PrivEntry *r) { - ndr_print_struct(ndr, name, "lsa_QosInfo"); - ndr->depth++; - ndr_print_uint16(ndr, "impersonation_level", r->impersonation_level); - ndr_print_uint8(ndr, "context_mode", r->context_mode); - ndr_print_uint8(ndr, "effective_only", r->effective_only); - ndr->depth--; + NDR_CHECK(ndr_pull_align(ndr, 4)); + if (!(ndr_flags & NDR_SCALARS)) goto buffers; + NDR_CHECK(ndr_pull_lsa_Name(ndr, NDR_SCALARS, &r->name)); + NDR_CHECK(ndr_pull_uint32(ndr, &r->luid_low)); + NDR_CHECK(ndr_pull_uint32(ndr, &r->luid_high)); +buffers: + if (!(ndr_flags & NDR_BUFFERS)) goto done; + NDR_CHECK(ndr_pull_lsa_Name(ndr, ndr_flags, &r->name)); +done: + return NT_STATUS_OK; } -static NTSTATUS ndr_push_lsa_ObjectAttribute(struct ndr_push *ndr, int ndr_flags, struct lsa_ObjectAttribute *r) +static NTSTATUS ndr_pull_lsa_PrivArray(struct ndr_pull *ndr, int ndr_flags, struct lsa_PrivArray *r) { - struct ndr_push_save _save1, _save2, _save3; - ndr_push_save(ndr, &_save1); - NDR_CHECK(ndr_push_align(ndr, 4)); + uint32 _ptr_privs; + NDR_CHECK(ndr_pull_align(ndr, 4)); if (!(ndr_flags & NDR_SCALARS)) goto buffers; - NDR_CHECK(ndr_push_align(ndr, sizeof(uint32))); - ndr_push_save(ndr, &_save2); - NDR_CHECK(ndr_push_uint32(ndr, 0)); - NDR_CHECK(ndr_push_ptr(ndr, r->root_dir)); - NDR_CHECK(ndr_push_ptr(ndr, r->object_name)); - NDR_CHECK(ndr_push_uint32(ndr, r->attributes)); - NDR_CHECK(ndr_push_ptr(ndr, r->sec_desc)); - NDR_CHECK(ndr_push_ptr(ndr, r->sec_qos)); + NDR_CHECK(ndr_pull_uint32(ndr, &r->count)); + NDR_CHECK(ndr_pull_uint32(ndr, &_ptr_privs)); + if (_ptr_privs) { + NDR_ALLOC(ndr, r->privs); + } else { + r->privs = NULL; + } buffers: if (!(ndr_flags & NDR_BUFFERS)) goto done; - if (r->root_dir) { - NDR_CHECK(ndr_push_uint8(ndr, *r->root_dir)); - } - if (r->object_name) { - NDR_CHECK(ndr_push_unistr(ndr, r->object_name)); - } - if (r->sec_desc) { - NDR_CHECK(ndr_push_security_descriptor(ndr, r->sec_desc)); + if (r->privs) { + { + uint32 _array_size; + NDR_CHECK(ndr_pull_uint32(ndr, &_array_size)); + if (r->count > _array_size) { + return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should be %u", _array_size, r->count); + } } - if (r->sec_qos) { - NDR_CHECK(ndr_push_lsa_QosInfo(ndr, ndr_flags, r->sec_qos)); + NDR_ALLOC_N_SIZE(ndr, r->privs, r->count, sizeof(r->privs[0])); + NDR_CHECK(ndr_pull_array(ndr, ndr_flags, (void **)r->privs, sizeof(r->privs[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_lsa_PrivEntry)); } - ndr_push_save(ndr, &_save3); - ndr_push_restore(ndr, &_save2); - NDR_CHECK(ndr_push_uint32(ndr, _save3.offset - _save1.offset)); - ndr_push_restore(ndr, &_save3); done: return NT_STATUS_OK; } -void ndr_print_lsa_ObjectAttribute(struct ndr_print *ndr, const char *name, struct lsa_ObjectAttribute *r) +NTSTATUS ndr_pull_lsa_EnumPrivs(struct ndr_pull *ndr, struct lsa_EnumPrivs *r) { - ndr_print_struct(ndr, name, "lsa_ObjectAttribute"); - ndr->depth++; - ndr_print_ptr(ndr, "root_dir", r->root_dir); - ndr->depth++; - if (r->root_dir) { - ndr_print_uint8(ndr, "root_dir", *r->root_dir); - } - ndr->depth--; - ndr_print_ptr(ndr, "object_name", r->object_name); - ndr->depth++; - if (r->object_name) { - ndr_print_unistr(ndr, "object_name", r->object_name); - } - ndr->depth--; - ndr_print_uint32(ndr, "attributes", r->attributes); - ndr_print_ptr(ndr, "sec_desc", r->sec_desc); - ndr->depth++; - if (r->sec_desc) { - ndr_print_security_descriptor(ndr, "sec_desc", r->sec_desc); - } - ndr->depth--; - ndr_print_ptr(ndr, "sec_qos", r->sec_qos); - ndr->depth++; - if (r->sec_qos) { - ndr_print_lsa_QosInfo(ndr, "sec_qos", r->sec_qos); - } - ndr->depth--; - ndr->depth--; + NDR_CHECK(ndr_pull_uint32(ndr, r->out.resume_handle)); + NDR_CHECK(ndr_pull_lsa_PrivArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.privs)); + NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); + + return NT_STATUS_OK; } -NTSTATUS ndr_push_lsa_OpenPolicy(struct ndr_push *ndr, struct lsa_OpenPolicy *r) +NTSTATUS ndr_pull_lsa_QuerySecObj(struct ndr_pull *ndr, struct lsa_QuerySecObj *r) { - NDR_CHECK(ndr_push_ptr(ndr, r->in.system_name)); - if (r->in.system_name) { - NDR_CHECK(ndr_push_uint16(ndr, *r->in.system_name)); - } - NDR_CHECK(ndr_push_lsa_ObjectAttribute(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.attr)); - NDR_CHECK(ndr_push_uint32(ndr, r->in.desired_access)); + NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); + + return NT_STATUS_OK; +} + +NTSTATUS ndr_pull_lsa_SetSecObj(struct ndr_pull *ndr, struct lsa_SetSecObj *r) +{ + NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); + + return NT_STATUS_OK; +} + +NTSTATUS ndr_pull_lsa_ChangePassword(struct ndr_pull *ndr, struct lsa_ChangePassword *r) +{ + NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); return NT_STATUS_OK; } @@ -345,20 +631,6 @@ done: return NT_STATUS_OK; } -void ndr_print_lsa_AuditLogInfo(struct ndr_print *ndr, const char *name, struct lsa_AuditLogInfo *r) -{ - ndr_print_struct(ndr, name, "lsa_AuditLogInfo"); - ndr->depth++; - ndr_print_uint32(ndr, "percent_full", r->percent_full); - ndr_print_uint32(ndr, "log_size", r->log_size); - ndr_print_NTTIME(ndr, "retention_time", r->retention_time); - ndr_print_uint8(ndr, "shutdown_in_progress", r->shutdown_in_progress); - ndr_print_NTTIME(ndr, "time_to_shutdown", r->time_to_shutdown); - ndr_print_uint32(ndr, "next_audit_record", r->next_audit_record); - ndr_print_uint32(ndr, "unknown", r->unknown); - ndr->depth--; -} - static NTSTATUS ndr_pull_lsa_AuditSettings(struct ndr_pull *ndr, int ndr_flags, struct lsa_AuditSettings *r) { uint32 _conformant_size; @@ -377,18 +649,6 @@ done: return NT_STATUS_OK; } -void ndr_print_lsa_AuditSettings(struct ndr_print *ndr, const char *name, struct lsa_AuditSettings *r) -{ - ndr_print_struct(ndr, name, "lsa_AuditSettings"); - ndr->depth++; - ndr_print_uint32(ndr, "count", r->count); - ndr_print_ptr(ndr, "settings", r->settings); - ndr->depth++; - ndr_print_array_uint32(ndr, "settings", r->settings, r->count); - ndr->depth--; - ndr->depth--; -} - static NTSTATUS ndr_pull_lsa_AuditEventsInfo(struct ndr_pull *ndr, int ndr_flags, struct lsa_AuditEventsInfo *r) { uint32 _ptr_settings; @@ -410,20 +670,6 @@ done: return NT_STATUS_OK; } -void ndr_print_lsa_AuditEventsInfo(struct ndr_print *ndr, const char *name, struct lsa_AuditEventsInfo *r) -{ - ndr_print_struct(ndr, name, "lsa_AuditEventsInfo"); - ndr->depth++; - ndr_print_uint32(ndr, "auditing_mode", r->auditing_mode); - ndr_print_ptr(ndr, "settings", r->settings); - ndr->depth++; - if (r->settings) { - ndr_print_lsa_AuditSettings(ndr, "settings", r->settings); - } - ndr->depth--; - ndr->depth--; -} - static NTSTATUS ndr_pull_lsa_DomainInfo(struct ndr_pull *ndr, int ndr_flags, struct lsa_DomainInfo *r) { uint32 _ptr_sid; @@ -446,20 +692,6 @@ done: return NT_STATUS_OK; } -void ndr_print_lsa_DomainInfo(struct ndr_print *ndr, const char *name, struct lsa_DomainInfo *r) -{ - ndr_print_struct(ndr, name, "lsa_DomainInfo"); - ndr->depth++; - ndr_print_lsa_Name(ndr, "name", &r->name); - ndr_print_ptr(ndr, "sid", r->sid); - ndr->depth++; - if (r->sid) { - ndr_print_dom_sid2(ndr, "sid", r->sid); - } - ndr->depth--; - ndr->depth--; -} - static NTSTATUS ndr_pull_lsa_PDAccountInfo(struct ndr_pull *ndr, int ndr_flags, struct lsa_PDAccountInfo *r) { NDR_CHECK(ndr_pull_align(ndr, 4)); @@ -472,14 +704,6 @@ done: return NT_STATUS_OK; } -void ndr_print_lsa_PDAccountInfo(struct ndr_print *ndr, const char *name, struct lsa_PDAccountInfo *r) -{ - ndr_print_struct(ndr, name, "lsa_PDAccountInfo"); - ndr->depth++; - ndr_print_lsa_Name(ndr, "name", &r->name); - ndr->depth--; -} - static NTSTATUS ndr_pull_lsa_ServerRole(struct ndr_pull *ndr, int ndr_flags, struct lsa_ServerRole *r) { NDR_CHECK(ndr_pull_align(ndr, 4)); @@ -491,14 +715,6 @@ done: return NT_STATUS_OK; } -void ndr_print_lsa_ServerRole(struct ndr_print *ndr, const char *name, struct lsa_ServerRole *r) -{ - ndr_print_struct(ndr, name, "lsa_ServerRole"); - ndr->depth++; - ndr_print_uint16(ndr, "role", r->role); - ndr->depth--; -} - static NTSTATUS ndr_pull_lsa_ReplicaSourceInfo(struct ndr_pull *ndr, int ndr_flags, struct lsa_ReplicaSourceInfo *r) { NDR_CHECK(ndr_pull_align(ndr, 4)); @@ -513,15 +729,6 @@ done: return NT_STATUS_OK; } -void ndr_print_lsa_ReplicaSourceInfo(struct ndr_print *ndr, const char *name, struct lsa_ReplicaSourceInfo *r) -{ - ndr_print_struct(ndr, name, "lsa_ReplicaSourceInfo"); - ndr->depth++; - ndr_print_lsa_Name(ndr, "source", &r->source); - ndr_print_lsa_Name(ndr, "account", &r->account); - ndr->depth--; -} - static NTSTATUS ndr_pull_lsa_DefaultQuotaInfo(struct ndr_pull *ndr, int ndr_flags, struct lsa_DefaultQuotaInfo *r) { NDR_CHECK(ndr_pull_align(ndr, 8)); @@ -538,19 +745,6 @@ done: return NT_STATUS_OK; } -void ndr_print_lsa_DefaultQuotaInfo(struct ndr_print *ndr, const char *name, struct lsa_DefaultQuotaInfo *r) -{ - ndr_print_struct(ndr, name, "lsa_DefaultQuotaInfo"); - ndr->depth++; - ndr_print_uint32(ndr, "paged_pool", r->paged_pool); - ndr_print_uint32(ndr, "non_paged_pool", r->non_paged_pool); - ndr_print_uint32(ndr, "min_wss", r->min_wss); - ndr_print_uint32(ndr, "max_wss", r->max_wss); - ndr_print_uint32(ndr, "pagefile", r->pagefile); - ndr_print_HYPER_T(ndr, "unknown", r->unknown); - ndr->depth--; -} - static NTSTATUS ndr_pull_lsa_ModificationInfo(struct ndr_pull *ndr, int ndr_flags, struct lsa_ModificationInfo *r) { NDR_CHECK(ndr_pull_align(ndr, 8)); @@ -563,15 +757,6 @@ done: return NT_STATUS_OK; } -void ndr_print_lsa_ModificationInfo(struct ndr_print *ndr, const char *name, struct lsa_ModificationInfo *r) -{ - ndr_print_struct(ndr, name, "lsa_ModificationInfo"); - ndr->depth++; - ndr_print_HYPER_T(ndr, "modified_id", r->modified_id); - ndr_print_NTTIME(ndr, "db_create_time", r->db_create_time); - ndr->depth--; -} - static NTSTATUS ndr_pull_lsa_AuditFullSetInfo(struct ndr_pull *ndr, int ndr_flags, struct lsa_AuditFullSetInfo *r) { NDR_CHECK(ndr_pull_align(ndr, 4)); @@ -583,14 +768,6 @@ done: return NT_STATUS_OK; } -void ndr_print_lsa_AuditFullSetInfo(struct ndr_print *ndr, const char *name, struct lsa_AuditFullSetInfo *r) -{ - ndr_print_struct(ndr, name, "lsa_AuditFullSetInfo"); - ndr->depth++; - ndr_print_uint32(ndr, "shutdown_on_full", r->shutdown_on_full); - ndr->depth--; -} - static NTSTATUS ndr_pull_lsa_AuditFullQueryInfo(struct ndr_pull *ndr, int ndr_flags, struct lsa_AuditFullQueryInfo *r) { NDR_CHECK(ndr_pull_align(ndr, 4)); @@ -603,15 +780,6 @@ done: return NT_STATUS_OK; } -void ndr_print_lsa_AuditFullQueryInfo(struct ndr_print *ndr, const char *name, struct lsa_AuditFullQueryInfo *r) -{ - ndr_print_struct(ndr, name, "lsa_AuditFullQueryInfo"); - ndr->depth++; - ndr_print_uint32(ndr, "shutdown_on_full", r->shutdown_on_full); - ndr_print_uint32(ndr, "log_is_full", r->log_is_full); - ndr->depth--; -} - static NTSTATUS ndr_pull_lsa_DnsDomainInfo(struct ndr_pull *ndr, int ndr_flags, struct lsa_DnsDomainInfo *r) { uint32 _ptr_sid; @@ -640,78 +808,61 @@ done: return NT_STATUS_OK; } -void ndr_print_lsa_DnsDomainInfo(struct ndr_print *ndr, const char *name, struct lsa_DnsDomainInfo *r) -{ - ndr_print_struct(ndr, name, "lsa_DnsDomainInfo"); - ndr->depth++; - ndr_print_lsa_Name(ndr, "name", &r->name); - ndr_print_lsa_Name(ndr, "dns_domain", &r->dns_domain); - ndr_print_lsa_Name(ndr, "dns_forest", &r->dns_forest); - ndr_print_GUID(ndr, "domain_guid", &r->domain_guid); - ndr_print_ptr(ndr, "sid", r->sid); - ndr->depth++; - if (r->sid) { - ndr_print_dom_sid2(ndr, "sid", r->sid); - } - ndr->depth--; - ndr->depth--; -} - static NTSTATUS ndr_pull_lsa_PolicyInformation(struct ndr_pull *ndr, int ndr_flags, uint16 *level, union lsa_PolicyInformation *r) { - NDR_CHECK(ndr_pull_uint16(ndr, level)); if (!(ndr_flags & NDR_SCALARS)) goto buffers; + NDR_CHECK(ndr_pull_uint16(ndr, level)); switch (*level) { - case 1: + case 1: { NDR_CHECK(ndr_pull_lsa_AuditLogInfo(ndr, NDR_SCALARS, &r->audit_log)); - break; + break; } - case 2: + case 2: { NDR_CHECK(ndr_pull_lsa_AuditEventsInfo(ndr, NDR_SCALARS, &r->audit_events)); - break; + break; } - case 3: + case 3: { NDR_CHECK(ndr_pull_lsa_DomainInfo(ndr, NDR_SCALARS, &r->domain)); - break; + break; } - case 4: + case 4: { NDR_CHECK(ndr_pull_lsa_PDAccountInfo(ndr, NDR_SCALARS, &r->pd)); - break; + break; } - case 5: + case 5: { NDR_CHECK(ndr_pull_lsa_DomainInfo(ndr, NDR_SCALARS, &r->account_domain)); - break; + break; } - case 6: + case 6: { NDR_CHECK(ndr_pull_lsa_ServerRole(ndr, NDR_SCALARS, &r->role)); - break; + break; } - case 7: + case 7: { NDR_CHECK(ndr_pull_lsa_ReplicaSourceInfo(ndr, NDR_SCALARS, &r->replica)); - break; + break; } - case 8: + case 8: { NDR_CHECK(ndr_pull_lsa_DefaultQuotaInfo(ndr, NDR_SCALARS, &r->quota)); - break; + break; } - case 9: + case 9: { NDR_CHECK(ndr_pull_lsa_ModificationInfo(ndr, NDR_SCALARS, &r->db)); - break; + break; } - case 10: + case 10: { NDR_CHECK(ndr_pull_lsa_AuditFullSetInfo(ndr, NDR_SCALARS, &r->auditfullset)); - break; + break; } - case 11: + case 11: { NDR_CHECK(ndr_pull_lsa_AuditFullQueryInfo(ndr, NDR_SCALARS, &r->auditfullquery)); - break; + break; } - case 12: + case 12: { NDR_CHECK(ndr_pull_lsa_DnsDomainInfo(ndr, NDR_SCALARS, &r->dns)); - break; + break; } default: - return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u in ", *level); + return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", *level); } buffers: if (!(ndr_flags & NDR_BUFFERS)) goto done; @@ -765,77 +916,12 @@ buffers: break; default: - return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u in ", *level); + return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", *level); } done: return NT_STATUS_OK; } -void ndr_print_lsa_PolicyInformation(struct ndr_print *ndr, const char *name, uint16 level, union lsa_PolicyInformation *r) -{ - ndr_print_union(ndr, name, level, "lsa_PolicyInformation"); - switch (level) { - case 1: - ndr_print_lsa_AuditLogInfo(ndr, "audit_log", &r->audit_log); - break; - - case 2: - ndr_print_lsa_AuditEventsInfo(ndr, "audit_events", &r->audit_events); - break; - - case 3: - ndr_print_lsa_DomainInfo(ndr, "domain", &r->domain); - break; - - case 4: - ndr_print_lsa_PDAccountInfo(ndr, "pd", &r->pd); - break; - - case 5: - ndr_print_lsa_DomainInfo(ndr, "account_domain", &r->account_domain); - break; - - case 6: - ndr_print_lsa_ServerRole(ndr, "role", &r->role); - break; - - case 7: - ndr_print_lsa_ReplicaSourceInfo(ndr, "replica", &r->replica); - break; - - case 8: - ndr_print_lsa_DefaultQuotaInfo(ndr, "quota", &r->quota); - break; - - case 9: - ndr_print_lsa_ModificationInfo(ndr, "db", &r->db); - break; - - case 10: - ndr_print_lsa_AuditFullSetInfo(ndr, "auditfullset", &r->auditfullset); - break; - - case 11: - ndr_print_lsa_AuditFullQueryInfo(ndr, "auditfullquery", &r->auditfullquery); - break; - - case 12: - ndr_print_lsa_DnsDomainInfo(ndr, "dns", &r->dns); - break; - - default: - ndr_print_bad_level(ndr, name, level); - } -} - -NTSTATUS ndr_push_lsa_QueryInfoPolicy(struct ndr_push *ndr, struct lsa_QueryInfoPolicy *r) -{ - NDR_CHECK(ndr_push_policy_handle(ndr, r->in.handle)); - NDR_CHECK(ndr_push_uint16(ndr, r->in.level)); - - return NT_STATUS_OK; -} - NTSTATUS ndr_pull_lsa_QueryInfoPolicy(struct ndr_pull *ndr, struct lsa_QueryInfoPolicy *r) { uint32 _ptr_info; @@ -856,12 +942,6 @@ NTSTATUS ndr_pull_lsa_QueryInfoPolicy(struct ndr_pull *ndr, struct lsa_QueryInfo return NT_STATUS_OK; } -NTSTATUS ndr_push_lsa_SetInfoPolicy(struct ndr_push *ndr, struct lsa_SetInfoPolicy *r) -{ - - return NT_STATUS_OK; -} - NTSTATUS ndr_pull_lsa_SetInfoPolicy(struct ndr_pull *ndr, struct lsa_SetInfoPolicy *r) { NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); @@ -869,12 +949,6 @@ NTSTATUS ndr_pull_lsa_SetInfoPolicy(struct ndr_pull *ndr, struct lsa_SetInfoPoli return NT_STATUS_OK; } -NTSTATUS ndr_push_lsa_ClearAuditLog(struct ndr_push *ndr, struct lsa_ClearAuditLog *r) -{ - - return NT_STATUS_OK; -} - NTSTATUS ndr_pull_lsa_ClearAuditLog(struct ndr_pull *ndr, struct lsa_ClearAuditLog *r) { NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); @@ -882,12 +956,6 @@ NTSTATUS ndr_pull_lsa_ClearAuditLog(struct ndr_pull *ndr, struct lsa_ClearAuditL return NT_STATUS_OK; } -NTSTATUS ndr_push_lsa_CreateAccount(struct ndr_push *ndr, struct lsa_CreateAccount *r) -{ - - return NT_STATUS_OK; -} - NTSTATUS ndr_pull_lsa_CreateAccount(struct ndr_pull *ndr, struct lsa_CreateAccount *r) { NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); @@ -895,20 +963,6 @@ NTSTATUS ndr_pull_lsa_CreateAccount(struct ndr_pull *ndr, struct lsa_CreateAccou return NT_STATUS_OK; } -static NTSTATUS ndr_push_lsa_SidPtr(struct ndr_push *ndr, int ndr_flags, struct lsa_SidPtr *r) -{ - NDR_CHECK(ndr_push_align(ndr, 4)); - if (!(ndr_flags & NDR_SCALARS)) goto buffers; - NDR_CHECK(ndr_push_ptr(ndr, r->sid)); -buffers: - if (!(ndr_flags & NDR_BUFFERS)) goto done; - if (r->sid) { - NDR_CHECK(ndr_push_dom_sid2(ndr, r->sid)); - } -done: - return NT_STATUS_OK; -} - static NTSTATUS ndr_pull_lsa_SidPtr(struct ndr_pull *ndr, int ndr_flags, struct lsa_SidPtr *r) { uint32 _ptr_sid; @@ -929,35 +983,6 @@ done: return NT_STATUS_OK; } -void ndr_print_lsa_SidPtr(struct ndr_print *ndr, const char *name, struct lsa_SidPtr *r) -{ - ndr_print_struct(ndr, name, "lsa_SidPtr"); - ndr->depth++; - ndr_print_ptr(ndr, "sid", r->sid); - ndr->depth++; - if (r->sid) { - ndr_print_dom_sid2(ndr, "sid", r->sid); - } - ndr->depth--; - ndr->depth--; -} - -static NTSTATUS ndr_push_lsa_SidArray(struct ndr_push *ndr, int ndr_flags, struct lsa_SidArray *r) -{ - NDR_CHECK(ndr_push_align(ndr, 4)); - if (!(ndr_flags & NDR_SCALARS)) goto buffers; - NDR_CHECK(ndr_push_uint32(ndr, r->num_sids)); - NDR_CHECK(ndr_push_ptr(ndr, r->sids)); -buffers: - if (!(ndr_flags & NDR_BUFFERS)) goto done; - if (r->sids) { - NDR_CHECK(ndr_push_uint32(ndr, r->num_sids)); - NDR_CHECK(ndr_push_array(ndr, ndr_flags, r->sids, sizeof(r->sids[0]), r->num_sids, (ndr_push_flags_fn_t)ndr_push_lsa_SidPtr)); - } -done: - return NT_STATUS_OK; -} - static NTSTATUS ndr_pull_lsa_SidArray(struct ndr_pull *ndr, int ndr_flags, struct lsa_SidArray *r) { uint32 _ptr_sids; @@ -987,29 +1012,6 @@ done: return NT_STATUS_OK; } -void ndr_print_lsa_SidArray(struct ndr_print *ndr, const char *name, struct lsa_SidArray *r) -{ - ndr_print_struct(ndr, name, "lsa_SidArray"); - ndr->depth++; - ndr_print_uint32(ndr, "num_sids", r->num_sids); - ndr_print_ptr(ndr, "sids", r->sids); - ndr->depth++; - if (r->sids) { - ndr_print_array(ndr, "sids", r->sids, sizeof(r->sids[0]), r->num_sids, (ndr_print_fn_t)ndr_print_lsa_SidPtr); - } - ndr->depth--; - ndr->depth--; -} - -NTSTATUS ndr_push_lsa_EnumAccounts(struct ndr_push *ndr, struct lsa_EnumAccounts *r) -{ - NDR_CHECK(ndr_push_policy_handle(ndr, r->in.handle)); - NDR_CHECK(ndr_push_uint32(ndr, *r->in.resume_handle)); - NDR_CHECK(ndr_push_uint32(ndr, r->in.num_entries)); - - return NT_STATUS_OK; -} - NTSTATUS ndr_pull_lsa_EnumAccounts(struct ndr_pull *ndr, struct lsa_EnumAccounts *r) { NDR_CHECK(ndr_pull_uint32(ndr, r->out.resume_handle)); @@ -1019,12 +1021,6 @@ NTSTATUS ndr_pull_lsa_EnumAccounts(struct ndr_pull *ndr, struct lsa_EnumAccounts return NT_STATUS_OK; } -NTSTATUS ndr_push_lsa_CreateTrustDom(struct ndr_push *ndr, struct lsa_CreateTrustDom *r) -{ - - return NT_STATUS_OK; -} - NTSTATUS ndr_pull_lsa_CreateTrustDom(struct ndr_pull *ndr, struct lsa_CreateTrustDom *r) { NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); @@ -1054,20 +1050,6 @@ done: return NT_STATUS_OK; } -void ndr_print_lsa_DomainInformation(struct ndr_print *ndr, const char *name, struct lsa_DomainInformation *r) -{ - ndr_print_struct(ndr, name, "lsa_DomainInformation"); - ndr->depth++; - ndr_print_lsa_Name(ndr, "name", &r->name); - ndr_print_ptr(ndr, "sid", r->sid); - ndr->depth++; - if (r->sid) { - ndr_print_dom_sid2(ndr, "sid", r->sid); - } - ndr->depth--; - ndr->depth--; -} - static NTSTATUS ndr_pull_lsa_DomainList(struct ndr_pull *ndr, int ndr_flags, struct lsa_DomainList *r) { uint32 _ptr_domains; @@ -1097,29 +1079,6 @@ done: return NT_STATUS_OK; } -void ndr_print_lsa_DomainList(struct ndr_print *ndr, const char *name, struct lsa_DomainList *r) -{ - ndr_print_struct(ndr, name, "lsa_DomainList"); - ndr->depth++; - ndr_print_uint32(ndr, "count", r->count); - ndr_print_ptr(ndr, "domains", r->domains); - ndr->depth++; - if (r->domains) { - ndr_print_array(ndr, "domains", r->domains, sizeof(r->domains[0]), r->count, (ndr_print_fn_t)ndr_print_lsa_DomainInformation); - } - ndr->depth--; - ndr->depth--; -} - -NTSTATUS ndr_push_lsa_EnumTrustDom(struct ndr_push *ndr, struct lsa_EnumTrustDom *r) -{ - NDR_CHECK(ndr_push_policy_handle(ndr, r->in.handle)); - NDR_CHECK(ndr_push_uint32(ndr, *r->in.resume_handle)); - NDR_CHECK(ndr_push_uint32(ndr, r->in.num_entries)); - - return NT_STATUS_OK; -} - NTSTATUS ndr_pull_lsa_EnumTrustDom(struct ndr_pull *ndr, struct lsa_EnumTrustDom *r) { NDR_CHECK(ndr_pull_uint32(ndr, r->out.resume_handle)); @@ -1129,19 +1088,6 @@ NTSTATUS ndr_pull_lsa_EnumTrustDom(struct ndr_pull *ndr, struct lsa_EnumTrustDom return NT_STATUS_OK; } -static NTSTATUS ndr_push_lsa_TranslatedSid(struct ndr_push *ndr, int ndr_flags, struct lsa_TranslatedSid *r) -{ - NDR_CHECK(ndr_push_align(ndr, 4)); - if (!(ndr_flags & NDR_SCALARS)) goto buffers; - NDR_CHECK(ndr_push_uint16(ndr, r->sid_type)); - NDR_CHECK(ndr_push_uint32(ndr, r->rid)); - NDR_CHECK(ndr_push_uint32(ndr, r->sid_index)); -buffers: - if (!(ndr_flags & NDR_BUFFERS)) goto done; -done: - return NT_STATUS_OK; -} - static NTSTATUS ndr_pull_lsa_TranslatedSid(struct ndr_pull *ndr, int ndr_flags, struct lsa_TranslatedSid *r) { NDR_CHECK(ndr_pull_align(ndr, 4)); @@ -1155,32 +1101,6 @@ done: return NT_STATUS_OK; } -void ndr_print_lsa_TranslatedSid(struct ndr_print *ndr, const char *name, struct lsa_TranslatedSid *r) -{ - ndr_print_struct(ndr, name, "lsa_TranslatedSid"); - ndr->depth++; - ndr_print_uint16(ndr, "sid_type", r->sid_type); - ndr_print_uint32(ndr, "rid", r->rid); - ndr_print_uint32(ndr, "sid_index", r->sid_index); - ndr->depth--; -} - -static NTSTATUS ndr_push_lsa_TransSidArray(struct ndr_push *ndr, int ndr_flags, struct lsa_TransSidArray *r) -{ - NDR_CHECK(ndr_push_align(ndr, 4)); - if (!(ndr_flags & NDR_SCALARS)) goto buffers; - NDR_CHECK(ndr_push_uint32(ndr, r->count)); - NDR_CHECK(ndr_push_ptr(ndr, r->sids)); -buffers: - if (!(ndr_flags & NDR_BUFFERS)) goto done; - if (r->sids) { - NDR_CHECK(ndr_push_uint32(ndr, r->count)); - NDR_CHECK(ndr_push_array(ndr, ndr_flags, r->sids, sizeof(r->sids[0]), r->count, (ndr_push_flags_fn_t)ndr_push_lsa_TranslatedSid)); - } -done: - return NT_STATUS_OK; -} - static NTSTATUS ndr_pull_lsa_TransSidArray(struct ndr_pull *ndr, int ndr_flags, struct lsa_TransSidArray *r) { uint32 _ptr_sids; @@ -1210,20 +1130,6 @@ done: return NT_STATUS_OK; } -void ndr_print_lsa_TransSidArray(struct ndr_print *ndr, const char *name, struct lsa_TransSidArray *r) -{ - ndr_print_struct(ndr, name, "lsa_TransSidArray"); - ndr->depth++; - ndr_print_uint32(ndr, "count", r->count); - ndr_print_ptr(ndr, "sids", r->sids); - ndr->depth++; - if (r->sids) { - ndr_print_array(ndr, "sids", r->sids, sizeof(r->sids[0]), r->count, (ndr_print_fn_t)ndr_print_lsa_TranslatedSid); - } - ndr->depth--; - ndr->depth--; -} - static NTSTATUS ndr_pull_lsa_TrustInformation(struct ndr_pull *ndr, int ndr_flags, struct lsa_TrustInformation *r) { uint32 _ptr_sid; @@ -1246,20 +1152,6 @@ done: return NT_STATUS_OK; } -void ndr_print_lsa_TrustInformation(struct ndr_print *ndr, const char *name, struct lsa_TrustInformation *r) -{ - ndr_print_struct(ndr, name, "lsa_TrustInformation"); - ndr->depth++; - ndr_print_lsa_Name(ndr, "name", &r->name); - ndr_print_ptr(ndr, "sid", r->sid); - ndr->depth++; - if (r->sid) { - ndr_print_dom_sid2(ndr, "sid", r->sid); - } - ndr->depth--; - ndr->depth--; -} - static NTSTATUS ndr_pull_lsa_RefDomainList(struct ndr_pull *ndr, int ndr_flags, struct lsa_RefDomainList *r) { uint32 _ptr_domains; @@ -1290,37 +1182,6 @@ done: return NT_STATUS_OK; } -void ndr_print_lsa_RefDomainList(struct ndr_print *ndr, const char *name, struct lsa_RefDomainList *r) -{ - ndr_print_struct(ndr, name, "lsa_RefDomainList"); - ndr->depth++; - ndr_print_uint32(ndr, "count", r->count); - ndr_print_ptr(ndr, "domains", r->domains); - ndr->depth++; - if (r->domains) { - ndr_print_array(ndr, "domains", r->domains, sizeof(r->domains[0]), r->count, (ndr_print_fn_t)ndr_print_lsa_TrustInformation); - } - ndr->depth--; - ndr_print_uint32(ndr, "max_count", r->max_count); - ndr->depth--; -} - -NTSTATUS ndr_push_lsa_LookupNames(struct ndr_push *ndr, struct lsa_LookupNames *r) -{ - NDR_CHECK(ndr_push_policy_handle(ndr, r->in.handle)); - NDR_CHECK(ndr_push_uint32(ndr, r->in.num_names)); - if (r->in.names) { - int ndr_flags = NDR_SCALARS|NDR_BUFFERS; - NDR_CHECK(ndr_push_uint32(ndr, r->in.num_names)); - NDR_CHECK(ndr_push_array(ndr, ndr_flags, r->in.names, sizeof(r->in.names[0]), r->in.num_names, (ndr_push_flags_fn_t)ndr_push_lsa_Name)); - } - NDR_CHECK(ndr_push_lsa_TransSidArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sids)); - NDR_CHECK(ndr_push_uint16(ndr, r->in.level)); - NDR_CHECK(ndr_push_uint32(ndr, *r->in.count)); - - return NT_STATUS_OK; -} - NTSTATUS ndr_pull_lsa_LookupNames(struct ndr_pull *ndr, struct lsa_LookupNames *r) { uint32 _ptr_domains; @@ -1340,20 +1201,6 @@ NTSTATUS ndr_pull_lsa_LookupNames(struct ndr_pull *ndr, struct lsa_LookupNames * return NT_STATUS_OK; } -static NTSTATUS ndr_push_lsa_TranslatedName(struct ndr_push *ndr, int ndr_flags, struct lsa_TranslatedName *r) -{ - NDR_CHECK(ndr_push_align(ndr, 4)); - if (!(ndr_flags & NDR_SCALARS)) goto buffers; - NDR_CHECK(ndr_push_uint16(ndr, r->sid_type)); - NDR_CHECK(ndr_push_lsa_Name(ndr, NDR_SCALARS, &r->name)); - NDR_CHECK(ndr_push_uint32(ndr, r->sid_index)); -buffers: - if (!(ndr_flags & NDR_BUFFERS)) goto done; - NDR_CHECK(ndr_push_lsa_Name(ndr, ndr_flags, &r->name)); -done: - return NT_STATUS_OK; -} - static NTSTATUS ndr_pull_lsa_TranslatedName(struct ndr_pull *ndr, int ndr_flags, struct lsa_TranslatedName *r) { NDR_CHECK(ndr_pull_align(ndr, 4)); @@ -1368,32 +1215,6 @@ done: return NT_STATUS_OK; } -void ndr_print_lsa_TranslatedName(struct ndr_print *ndr, const char *name, struct lsa_TranslatedName *r) -{ - ndr_print_struct(ndr, name, "lsa_TranslatedName"); - ndr->depth++; - ndr_print_uint16(ndr, "sid_type", r->sid_type); - ndr_print_lsa_Name(ndr, "name", &r->name); - ndr_print_uint32(ndr, "sid_index", r->sid_index); - ndr->depth--; -} - -static NTSTATUS ndr_push_lsa_TransNameArray(struct ndr_push *ndr, int ndr_flags, struct lsa_TransNameArray *r) -{ - NDR_CHECK(ndr_push_align(ndr, 4)); - if (!(ndr_flags & NDR_SCALARS)) goto buffers; - NDR_CHECK(ndr_push_uint32(ndr, r->count)); - NDR_CHECK(ndr_push_ptr(ndr, r->names)); -buffers: - if (!(ndr_flags & NDR_BUFFERS)) goto done; - if (r->names) { - NDR_CHECK(ndr_push_uint32(ndr, r->count)); - NDR_CHECK(ndr_push_array(ndr, ndr_flags, r->names, sizeof(r->names[0]), r->count, (ndr_push_flags_fn_t)ndr_push_lsa_TranslatedName)); - } -done: - return NT_STATUS_OK; -} - static NTSTATUS ndr_pull_lsa_TransNameArray(struct ndr_pull *ndr, int ndr_flags, struct lsa_TransNameArray *r) { uint32 _ptr_names; @@ -1423,31 +1244,6 @@ done: return NT_STATUS_OK; } -void ndr_print_lsa_TransNameArray(struct ndr_print *ndr, const char *name, struct lsa_TransNameArray *r) -{ - ndr_print_struct(ndr, name, "lsa_TransNameArray"); - ndr->depth++; - ndr_print_uint32(ndr, "count", r->count); - ndr_print_ptr(ndr, "names", r->names); - ndr->depth++; - if (r->names) { - ndr_print_array(ndr, "names", r->names, sizeof(r->names[0]), r->count, (ndr_print_fn_t)ndr_print_lsa_TranslatedName); - } - ndr->depth--; - ndr->depth--; -} - -NTSTATUS ndr_push_lsa_LookupSids(struct ndr_push *ndr, struct lsa_LookupSids *r) -{ - NDR_CHECK(ndr_push_policy_handle(ndr, r->in.handle)); - NDR_CHECK(ndr_push_lsa_SidArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sids)); - NDR_CHECK(ndr_push_lsa_TransNameArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.names)); - NDR_CHECK(ndr_push_uint16(ndr, r->in.level)); - NDR_CHECK(ndr_push_uint32(ndr, *r->in.count)); - - return NT_STATUS_OK; -} - NTSTATUS ndr_pull_lsa_LookupSids(struct ndr_pull *ndr, struct lsa_LookupSids *r) { uint32 _ptr_domains; @@ -1467,12 +1263,6 @@ NTSTATUS ndr_pull_lsa_LookupSids(struct ndr_pull *ndr, struct lsa_LookupSids *r) return NT_STATUS_OK; } -NTSTATUS ndr_push_CREATESECRET(struct ndr_push *ndr, struct CREATESECRET *r) -{ - - return NT_STATUS_OK; -} - NTSTATUS ndr_pull_CREATESECRET(struct ndr_pull *ndr, struct CREATESECRET *r) { NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); @@ -1480,15 +1270,6 @@ NTSTATUS ndr_pull_CREATESECRET(struct ndr_pull *ndr, struct CREATESECRET *r) return NT_STATUS_OK; } -NTSTATUS ndr_push_lsa_OpenAccount(struct ndr_push *ndr, struct lsa_OpenAccount *r) -{ - NDR_CHECK(ndr_push_policy_handle(ndr, r->in.handle)); - NDR_CHECK(ndr_push_dom_sid2(ndr, r->in.sid)); - NDR_CHECK(ndr_push_uint32(ndr, r->in.desired_access)); - - return NT_STATUS_OK; -} - NTSTATUS ndr_pull_lsa_OpenAccount(struct ndr_pull *ndr, struct lsa_OpenAccount *r) { NDR_CHECK(ndr_pull_policy_handle(ndr, r->out.acct_handle)); @@ -1509,15 +1290,6 @@ done: return NT_STATUS_OK; } -void ndr_print_lsa_LUID(struct ndr_print *ndr, const char *name, struct lsa_LUID *r) -{ - ndr_print_struct(ndr, name, "lsa_LUID"); - ndr->depth++; - ndr_print_uint32(ndr, "low", r->low); - ndr_print_uint32(ndr, "high", r->high); - ndr->depth--; -} - static NTSTATUS ndr_pull_lsa_LUIDAttribute(struct ndr_pull *ndr, int ndr_flags, struct lsa_LUIDAttribute *r) { NDR_CHECK(ndr_pull_align(ndr, 4)); @@ -1531,15 +1303,6 @@ done: return NT_STATUS_OK; } -void ndr_print_lsa_LUIDAttribute(struct ndr_print *ndr, const char *name, struct lsa_LUIDAttribute *r) -{ - ndr_print_struct(ndr, name, "lsa_LUIDAttribute"); - ndr->depth++; - ndr_print_lsa_LUID(ndr, "luid", &r->luid); - ndr_print_uint32(ndr, "attribute", r->attribute); - ndr->depth--; -} - static NTSTATUS ndr_pull_lsa_PrivilegeSet(struct ndr_pull *ndr, int ndr_flags, struct lsa_PrivilegeSet *r) { uint32 _conformant_size; @@ -1559,26 +1322,6 @@ done: return NT_STATUS_OK; } -void ndr_print_lsa_PrivilegeSet(struct ndr_print *ndr, const char *name, struct lsa_PrivilegeSet *r) -{ - ndr_print_struct(ndr, name, "lsa_PrivilegeSet"); - ndr->depth++; - ndr_print_uint32(ndr, "count", r->count); - ndr_print_uint32(ndr, "unknown", r->unknown); - ndr_print_ptr(ndr, "set", r->set); - ndr->depth++; - ndr_print_array(ndr, "set", r->set, sizeof(r->set[0]), r->count, (ndr_print_fn_t)ndr_print_lsa_LUIDAttribute); - ndr->depth--; - ndr->depth--; -} - -NTSTATUS ndr_push_lsa_EnumPrivsAccount(struct ndr_push *ndr, struct lsa_EnumPrivsAccount *r) -{ - NDR_CHECK(ndr_push_policy_handle(ndr, r->in.handle)); - - return NT_STATUS_OK; -} - NTSTATUS ndr_pull_lsa_EnumPrivsAccount(struct ndr_pull *ndr, struct lsa_EnumPrivsAccount *r) { uint32 _ptr_privs; @@ -1596,12 +1339,6 @@ NTSTATUS ndr_pull_lsa_EnumPrivsAccount(struct ndr_pull *ndr, struct lsa_EnumPriv return NT_STATUS_OK; } -NTSTATUS ndr_push_ADDPRIVS(struct ndr_push *ndr, struct ADDPRIVS *r) -{ - - return NT_STATUS_OK; -} - NTSTATUS ndr_pull_ADDPRIVS(struct ndr_pull *ndr, struct ADDPRIVS *r) { NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); @@ -1609,12 +1346,6 @@ NTSTATUS ndr_pull_ADDPRIVS(struct ndr_pull *ndr, struct ADDPRIVS *r) return NT_STATUS_OK; } -NTSTATUS ndr_push_REMOVEPRIVS(struct ndr_push *ndr, struct REMOVEPRIVS *r) -{ - - return NT_STATUS_OK; -} - NTSTATUS ndr_pull_REMOVEPRIVS(struct ndr_pull *ndr, struct REMOVEPRIVS *r) { NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); @@ -1622,12 +1353,6 @@ NTSTATUS ndr_pull_REMOVEPRIVS(struct ndr_pull *ndr, struct REMOVEPRIVS *r) return NT_STATUS_OK; } -NTSTATUS ndr_push_GETQUOTAS(struct ndr_push *ndr, struct GETQUOTAS *r) -{ - - return NT_STATUS_OK; -} - NTSTATUS ndr_pull_GETQUOTAS(struct ndr_pull *ndr, struct GETQUOTAS *r) { NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); @@ -1635,12 +1360,6 @@ NTSTATUS ndr_pull_GETQUOTAS(struct ndr_pull *ndr, struct GETQUOTAS *r) return NT_STATUS_OK; } -NTSTATUS ndr_push_SETQUOTAS(struct ndr_push *ndr, struct SETQUOTAS *r) -{ - - return NT_STATUS_OK; -} - NTSTATUS ndr_pull_SETQUOTAS(struct ndr_pull *ndr, struct SETQUOTAS *r) { NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); @@ -1648,12 +1367,6 @@ NTSTATUS ndr_pull_SETQUOTAS(struct ndr_pull *ndr, struct SETQUOTAS *r) return NT_STATUS_OK; } -NTSTATUS ndr_push_GETSYSTEMACCOUNT(struct ndr_push *ndr, struct GETSYSTEMACCOUNT *r) -{ - - return NT_STATUS_OK; -} - NTSTATUS ndr_pull_GETSYSTEMACCOUNT(struct ndr_pull *ndr, struct GETSYSTEMACCOUNT *r) { NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); @@ -1661,12 +1374,6 @@ NTSTATUS ndr_pull_GETSYSTEMACCOUNT(struct ndr_pull *ndr, struct GETSYSTEMACCOUNT return NT_STATUS_OK; } -NTSTATUS ndr_push_SETSYSTEMACCOUNT(struct ndr_push *ndr, struct SETSYSTEMACCOUNT *r) -{ - - return NT_STATUS_OK; -} - NTSTATUS ndr_pull_SETSYSTEMACCOUNT(struct ndr_pull *ndr, struct SETSYSTEMACCOUNT *r) { NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); @@ -1674,12 +1381,6 @@ NTSTATUS ndr_pull_SETSYSTEMACCOUNT(struct ndr_pull *ndr, struct SETSYSTEMACCOUNT return NT_STATUS_OK; } -NTSTATUS ndr_push_OPENTRUSTDOM(struct ndr_push *ndr, struct OPENTRUSTDOM *r) -{ - - return NT_STATUS_OK; -} - NTSTATUS ndr_pull_OPENTRUSTDOM(struct ndr_pull *ndr, struct OPENTRUSTDOM *r) { NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); @@ -1687,12 +1388,6 @@ NTSTATUS ndr_pull_OPENTRUSTDOM(struct ndr_pull *ndr, struct OPENTRUSTDOM *r) return NT_STATUS_OK; } -NTSTATUS ndr_push_QUERYTRUSTDOM(struct ndr_push *ndr, struct QUERYTRUSTDOM *r) -{ - - return NT_STATUS_OK; -} - NTSTATUS ndr_pull_QUERYTRUSTDOM(struct ndr_pull *ndr, struct QUERYTRUSTDOM *r) { NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); @@ -1700,12 +1395,6 @@ NTSTATUS ndr_pull_QUERYTRUSTDOM(struct ndr_pull *ndr, struct QUERYTRUSTDOM *r) return NT_STATUS_OK; } -NTSTATUS ndr_push_SETINFOTRUSTDOM(struct ndr_push *ndr, struct SETINFOTRUSTDOM *r) -{ - - return NT_STATUS_OK; -} - NTSTATUS ndr_pull_SETINFOTRUSTDOM(struct ndr_pull *ndr, struct SETINFOTRUSTDOM *r) { NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); @@ -1713,12 +1402,6 @@ NTSTATUS ndr_pull_SETINFOTRUSTDOM(struct ndr_pull *ndr, struct SETINFOTRUSTDOM * return NT_STATUS_OK; } -NTSTATUS ndr_push_OPENSECRET(struct ndr_push *ndr, struct OPENSECRET *r) -{ - - return NT_STATUS_OK; -} - NTSTATUS ndr_pull_OPENSECRET(struct ndr_pull *ndr, struct OPENSECRET *r) { NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); @@ -1726,12 +1409,6 @@ NTSTATUS ndr_pull_OPENSECRET(struct ndr_pull *ndr, struct OPENSECRET *r) return NT_STATUS_OK; } -NTSTATUS ndr_push_SETSECRET(struct ndr_push *ndr, struct SETSECRET *r) -{ - - return NT_STATUS_OK; -} - NTSTATUS ndr_pull_SETSECRET(struct ndr_pull *ndr, struct SETSECRET *r) { NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); @@ -1739,12 +1416,6 @@ NTSTATUS ndr_pull_SETSECRET(struct ndr_pull *ndr, struct SETSECRET *r) return NT_STATUS_OK; } -NTSTATUS ndr_push_QUERYSECRET(struct ndr_push *ndr, struct QUERYSECRET *r) -{ - - return NT_STATUS_OK; -} - NTSTATUS ndr_pull_QUERYSECRET(struct ndr_pull *ndr, struct QUERYSECRET *r) { NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); @@ -1752,12 +1423,6 @@ NTSTATUS ndr_pull_QUERYSECRET(struct ndr_pull *ndr, struct QUERYSECRET *r) return NT_STATUS_OK; } -NTSTATUS ndr_push_LOOKUPPRIVVALUE(struct ndr_push *ndr, struct LOOKUPPRIVVALUE *r) -{ - - return NT_STATUS_OK; -} - NTSTATUS ndr_pull_LOOKUPPRIVVALUE(struct ndr_pull *ndr, struct LOOKUPPRIVVALUE *r) { NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); @@ -1765,15 +1430,6 @@ NTSTATUS ndr_pull_LOOKUPPRIVVALUE(struct ndr_pull *ndr, struct LOOKUPPRIVVALUE * return NT_STATUS_OK; } -NTSTATUS ndr_push_lsa_LookupPrivName(struct ndr_push *ndr, struct lsa_LookupPrivName *r) -{ - NDR_CHECK(ndr_push_policy_handle(ndr, r->in.handle)); - NDR_CHECK(ndr_push_uint32(ndr, r->in.luid_high)); - NDR_CHECK(ndr_push_uint32(ndr, r->in.luid_low)); - - return NT_STATUS_OK; -} - NTSTATUS ndr_pull_lsa_LookupPrivName(struct ndr_pull *ndr, struct lsa_LookupPrivName *r) { uint32 _ptr_name; @@ -1791,12 +1447,6 @@ NTSTATUS ndr_pull_lsa_LookupPrivName(struct ndr_pull *ndr, struct lsa_LookupPriv return NT_STATUS_OK; } -NTSTATUS ndr_push_PRIV_GET_DISPNAME(struct ndr_push *ndr, struct PRIV_GET_DISPNAME *r) -{ - - return NT_STATUS_OK; -} - NTSTATUS ndr_pull_PRIV_GET_DISPNAME(struct ndr_pull *ndr, struct PRIV_GET_DISPNAME *r) { NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); @@ -1804,12 +1454,6 @@ NTSTATUS ndr_pull_PRIV_GET_DISPNAME(struct ndr_pull *ndr, struct PRIV_GET_DISPNA return NT_STATUS_OK; } -NTSTATUS ndr_push_DELETEOBJECT(struct ndr_push *ndr, struct DELETEOBJECT *r) -{ - - return NT_STATUS_OK; -} - NTSTATUS ndr_pull_DELETEOBJECT(struct ndr_pull *ndr, struct DELETEOBJECT *r) { NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); @@ -1817,12 +1461,6 @@ NTSTATUS ndr_pull_DELETEOBJECT(struct ndr_pull *ndr, struct DELETEOBJECT *r) return NT_STATUS_OK; } -NTSTATUS ndr_push_ENUMACCTWITHRIGHT(struct ndr_push *ndr, struct ENUMACCTWITHRIGHT *r) -{ - - return NT_STATUS_OK; -} - NTSTATUS ndr_pull_ENUMACCTWITHRIGHT(struct ndr_pull *ndr, struct ENUMACCTWITHRIGHT *r) { NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); @@ -1830,19 +1468,6 @@ NTSTATUS ndr_pull_ENUMACCTWITHRIGHT(struct ndr_pull *ndr, struct ENUMACCTWITHRIG return NT_STATUS_OK; } -void ndr_print_lsa_RightAttribute(struct ndr_print *ndr, const char *name, struct lsa_RightAttribute *r) -{ - ndr_print_struct(ndr, name, "lsa_RightAttribute"); - ndr->depth++; - ndr_print_ptr(ndr, "name", r->name); - ndr->depth++; - if (r->name) { - ndr_print_unistr(ndr, "name", r->name); - } - ndr->depth--; - ndr->depth--; -} - static NTSTATUS ndr_pull_lsa_RightSet(struct ndr_pull *ndr, int ndr_flags, struct lsa_RightSet *r) { uint32 _ptr_names; @@ -1872,170 +1497,545 @@ done: return NT_STATUS_OK; } -void ndr_print_lsa_RightSet(struct ndr_print *ndr, const char *name, struct lsa_RightSet *r) +NTSTATUS ndr_pull_lsa_EnumAccountRights(struct ndr_pull *ndr, struct lsa_EnumAccountRights *r) { - ndr_print_struct(ndr, name, "lsa_RightSet"); - ndr->depth++; - ndr_print_uint32(ndr, "count", r->count); - ndr_print_ptr(ndr, "names", r->names); - ndr->depth++; - if (r->names) { - ndr_print_array(ndr, "names", r->names, sizeof(r->names[0]), r->count, (ndr_print_fn_t)ndr_print_lsa_Name); - } - ndr->depth--; - ndr->depth--; + NDR_CHECK(ndr_pull_lsa_RightSet(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.rights)); + NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); + + return NT_STATUS_OK; } -NTSTATUS ndr_push_lsa_EnumAccountRights(struct ndr_push *ndr, struct lsa_EnumAccountRights *r) +NTSTATUS ndr_pull_ADDACCTRIGHTS(struct ndr_pull *ndr, struct ADDACCTRIGHTS *r) { - NDR_CHECK(ndr_push_policy_handle(ndr, r->in.handle)); - NDR_CHECK(ndr_push_dom_sid2(ndr, r->in.sid)); + NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); return NT_STATUS_OK; } -NTSTATUS ndr_pull_lsa_EnumAccountRights(struct ndr_pull *ndr, struct lsa_EnumAccountRights *r) +NTSTATUS ndr_pull_REMOVEACCTRIGHTS(struct ndr_pull *ndr, struct REMOVEACCTRIGHTS *r) { - NDR_CHECK(ndr_pull_lsa_RightSet(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.rights)); NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); return NT_STATUS_OK; } -NTSTATUS ndr_push_ADDACCTRIGHTS(struct ndr_push *ndr, struct ADDACCTRIGHTS *r) +NTSTATUS ndr_pull_QUERYTRUSTDOMINFO(struct ndr_pull *ndr, struct QUERYTRUSTDOMINFO *r) { + NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); return NT_STATUS_OK; } -NTSTATUS ndr_pull_ADDACCTRIGHTS(struct ndr_pull *ndr, struct ADDACCTRIGHTS *r) +NTSTATUS ndr_pull_SETTRUSTDOMINFO(struct ndr_pull *ndr, struct SETTRUSTDOMINFO *r) { NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); return NT_STATUS_OK; } -NTSTATUS ndr_push_REMOVEACCTRIGHTS(struct ndr_push *ndr, struct REMOVEACCTRIGHTS *r) +NTSTATUS ndr_pull_DELETETRUSTDOM(struct ndr_pull *ndr, struct DELETETRUSTDOM *r) { + NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); return NT_STATUS_OK; } -NTSTATUS ndr_pull_REMOVEACCTRIGHTS(struct ndr_pull *ndr, struct REMOVEACCTRIGHTS *r) +NTSTATUS ndr_pull_STOREPRIVDATA(struct ndr_pull *ndr, struct STOREPRIVDATA *r) { NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); return NT_STATUS_OK; } -NTSTATUS ndr_push_QUERYTRUSTDOMINFO(struct ndr_push *ndr, struct QUERYTRUSTDOMINFO *r) +NTSTATUS ndr_pull_RETRPRIVDATA(struct ndr_pull *ndr, struct RETRPRIVDATA *r) { + NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); return NT_STATUS_OK; } -NTSTATUS ndr_pull_QUERYTRUSTDOMINFO(struct ndr_pull *ndr, struct QUERYTRUSTDOMINFO *r) +NTSTATUS ndr_pull_lsa_OpenPolicy2(struct ndr_pull *ndr, struct lsa_OpenPolicy2 *r) { + NDR_CHECK(ndr_pull_policy_handle(ndr, r->out.handle)); NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); return NT_STATUS_OK; } -NTSTATUS ndr_push_SETTRUSTDOMINFO(struct ndr_push *ndr, struct SETTRUSTDOMINFO *r) +NTSTATUS ndr_pull_UNK_GET_CONNUSER(struct ndr_pull *ndr, struct UNK_GET_CONNUSER *r) { + NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); return NT_STATUS_OK; } -NTSTATUS ndr_pull_SETTRUSTDOMINFO(struct ndr_pull *ndr, struct SETTRUSTDOMINFO *r) +NTSTATUS ndr_pull_QUERYINFO2(struct ndr_pull *ndr, struct QUERYINFO2 *r) { NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); return NT_STATUS_OK; } -NTSTATUS ndr_push_DELETETRUSTDOM(struct ndr_push *ndr, struct DELETETRUSTDOM *r) +void ndr_print_lsa_Name(struct ndr_print *ndr, const char *name, struct lsa_Name *r) { + ndr_print_struct(ndr, name, "lsa_Name"); + ndr->depth++; + ndr_print_uint16(ndr, "name_len", r->name_len); + ndr_print_uint16(ndr, "name_size", r->name_size); + ndr_print_ptr(ndr, "name", r->name); + ndr->depth++; + if (r->name) { + ndr_print_unistr_noterm(ndr, "name", r->name); + } + ndr->depth--; + ndr->depth--; +} - return NT_STATUS_OK; +void ndr_print_lsa_PrivEntry(struct ndr_print *ndr, const char *name, struct lsa_PrivEntry *r) +{ + ndr_print_struct(ndr, name, "lsa_PrivEntry"); + ndr->depth++; + ndr_print_lsa_Name(ndr, "name", &r->name); + ndr_print_uint32(ndr, "luid_low", r->luid_low); + ndr_print_uint32(ndr, "luid_high", r->luid_high); + ndr->depth--; } -NTSTATUS ndr_pull_DELETETRUSTDOM(struct ndr_pull *ndr, struct DELETETRUSTDOM *r) +void ndr_print_lsa_PrivArray(struct ndr_print *ndr, const char *name, struct lsa_PrivArray *r) { - NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); + ndr_print_struct(ndr, name, "lsa_PrivArray"); + ndr->depth++; + ndr_print_uint32(ndr, "count", r->count); + ndr_print_ptr(ndr, "privs", r->privs); + ndr->depth++; + if (r->privs) { + ndr_print_array(ndr, "privs", r->privs, sizeof(r->privs[0]), r->count, (ndr_print_fn_t)ndr_print_lsa_PrivEntry); + } + ndr->depth--; + ndr->depth--; +} - return NT_STATUS_OK; +void ndr_print_lsa_QosInfo(struct ndr_print *ndr, const char *name, struct lsa_QosInfo *r) +{ + ndr_print_struct(ndr, name, "lsa_QosInfo"); + ndr->depth++; + ndr_print_uint16(ndr, "impersonation_level", r->impersonation_level); + ndr_print_uint8(ndr, "context_mode", r->context_mode); + ndr_print_uint8(ndr, "effective_only", r->effective_only); + ndr->depth--; } -NTSTATUS ndr_push_STOREPRIVDATA(struct ndr_push *ndr, struct STOREPRIVDATA *r) +void ndr_print_lsa_ObjectAttribute(struct ndr_print *ndr, const char *name, struct lsa_ObjectAttribute *r) { + ndr_print_struct(ndr, name, "lsa_ObjectAttribute"); + ndr->depth++; + ndr_print_ptr(ndr, "root_dir", r->root_dir); + ndr->depth++; + if (r->root_dir) { + ndr_print_uint8(ndr, "root_dir", *r->root_dir); + } + ndr->depth--; + ndr_print_ptr(ndr, "object_name", r->object_name); + ndr->depth++; + if (r->object_name) { + ndr_print_unistr(ndr, "object_name", r->object_name); + } + ndr->depth--; + ndr_print_uint32(ndr, "attributes", r->attributes); + ndr_print_ptr(ndr, "sec_desc", r->sec_desc); + ndr->depth++; + if (r->sec_desc) { + ndr_print_security_descriptor(ndr, "sec_desc", r->sec_desc); + } + ndr->depth--; + ndr_print_ptr(ndr, "sec_qos", r->sec_qos); + ndr->depth++; + if (r->sec_qos) { + ndr_print_lsa_QosInfo(ndr, "sec_qos", r->sec_qos); + } + ndr->depth--; + ndr->depth--; +} - return NT_STATUS_OK; +void ndr_print_lsa_AuditLogInfo(struct ndr_print *ndr, const char *name, struct lsa_AuditLogInfo *r) +{ + ndr_print_struct(ndr, name, "lsa_AuditLogInfo"); + ndr->depth++; + ndr_print_uint32(ndr, "percent_full", r->percent_full); + ndr_print_uint32(ndr, "log_size", r->log_size); + ndr_print_NTTIME(ndr, "retention_time", r->retention_time); + ndr_print_uint8(ndr, "shutdown_in_progress", r->shutdown_in_progress); + ndr_print_NTTIME(ndr, "time_to_shutdown", r->time_to_shutdown); + ndr_print_uint32(ndr, "next_audit_record", r->next_audit_record); + ndr_print_uint32(ndr, "unknown", r->unknown); + ndr->depth--; } -NTSTATUS ndr_pull_STOREPRIVDATA(struct ndr_pull *ndr, struct STOREPRIVDATA *r) +void ndr_print_lsa_AuditSettings(struct ndr_print *ndr, const char *name, struct lsa_AuditSettings *r) { - NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); + ndr_print_struct(ndr, name, "lsa_AuditSettings"); + ndr->depth++; + ndr_print_uint32(ndr, "count", r->count); + ndr_print_ptr(ndr, "settings", r->settings); + ndr->depth++; + ndr_print_array_uint32(ndr, "settings", r->settings, r->count); + ndr->depth--; + ndr->depth--; +} - return NT_STATUS_OK; +void ndr_print_lsa_AuditEventsInfo(struct ndr_print *ndr, const char *name, struct lsa_AuditEventsInfo *r) +{ + ndr_print_struct(ndr, name, "lsa_AuditEventsInfo"); + ndr->depth++; + ndr_print_uint32(ndr, "auditing_mode", r->auditing_mode); + ndr_print_ptr(ndr, "settings", r->settings); + ndr->depth++; + if (r->settings) { + ndr_print_lsa_AuditSettings(ndr, "settings", r->settings); + } + ndr->depth--; + ndr->depth--; } -NTSTATUS ndr_push_RETRPRIVDATA(struct ndr_push *ndr, struct RETRPRIVDATA *r) +void ndr_print_lsa_DomainInfo(struct ndr_print *ndr, const char *name, struct lsa_DomainInfo *r) { + ndr_print_struct(ndr, name, "lsa_DomainInfo"); + ndr->depth++; + ndr_print_lsa_Name(ndr, "name", &r->name); + ndr_print_ptr(ndr, "sid", r->sid); + ndr->depth++; + if (r->sid) { + ndr_print_dom_sid2(ndr, "sid", r->sid); + } + ndr->depth--; + ndr->depth--; +} - return NT_STATUS_OK; +void ndr_print_lsa_PDAccountInfo(struct ndr_print *ndr, const char *name, struct lsa_PDAccountInfo *r) +{ + ndr_print_struct(ndr, name, "lsa_PDAccountInfo"); + ndr->depth++; + ndr_print_lsa_Name(ndr, "name", &r->name); + ndr->depth--; } -NTSTATUS ndr_pull_RETRPRIVDATA(struct ndr_pull *ndr, struct RETRPRIVDATA *r) +void ndr_print_lsa_ServerRole(struct ndr_print *ndr, const char *name, struct lsa_ServerRole *r) { - NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); + ndr_print_struct(ndr, name, "lsa_ServerRole"); + ndr->depth++; + ndr_print_uint16(ndr, "role", r->role); + ndr->depth--; +} - return NT_STATUS_OK; +void ndr_print_lsa_ReplicaSourceInfo(struct ndr_print *ndr, const char *name, struct lsa_ReplicaSourceInfo *r) +{ + ndr_print_struct(ndr, name, "lsa_ReplicaSourceInfo"); + ndr->depth++; + ndr_print_lsa_Name(ndr, "source", &r->source); + ndr_print_lsa_Name(ndr, "account", &r->account); + ndr->depth--; } -NTSTATUS ndr_push_lsa_OpenPolicy2(struct ndr_push *ndr, struct lsa_OpenPolicy2 *r) +void ndr_print_lsa_DefaultQuotaInfo(struct ndr_print *ndr, const char *name, struct lsa_DefaultQuotaInfo *r) { - NDR_CHECK(ndr_push_ptr(ndr, r->in.system_name)); - if (r->in.system_name) { - NDR_CHECK(ndr_push_unistr(ndr, r->in.system_name)); + ndr_print_struct(ndr, name, "lsa_DefaultQuotaInfo"); + ndr->depth++; + ndr_print_uint32(ndr, "paged_pool", r->paged_pool); + ndr_print_uint32(ndr, "non_paged_pool", r->non_paged_pool); + ndr_print_uint32(ndr, "min_wss", r->min_wss); + ndr_print_uint32(ndr, "max_wss", r->max_wss); + ndr_print_uint32(ndr, "pagefile", r->pagefile); + ndr_print_HYPER_T(ndr, "unknown", r->unknown); + ndr->depth--; +} + +void ndr_print_lsa_ModificationInfo(struct ndr_print *ndr, const char *name, struct lsa_ModificationInfo *r) +{ + ndr_print_struct(ndr, name, "lsa_ModificationInfo"); + ndr->depth++; + ndr_print_HYPER_T(ndr, "modified_id", r->modified_id); + ndr_print_NTTIME(ndr, "db_create_time", r->db_create_time); + ndr->depth--; +} + +void ndr_print_lsa_AuditFullSetInfo(struct ndr_print *ndr, const char *name, struct lsa_AuditFullSetInfo *r) +{ + ndr_print_struct(ndr, name, "lsa_AuditFullSetInfo"); + ndr->depth++; + ndr_print_uint32(ndr, "shutdown_on_full", r->shutdown_on_full); + ndr->depth--; +} + +void ndr_print_lsa_AuditFullQueryInfo(struct ndr_print *ndr, const char *name, struct lsa_AuditFullQueryInfo *r) +{ + ndr_print_struct(ndr, name, "lsa_AuditFullQueryInfo"); + ndr->depth++; + ndr_print_uint32(ndr, "shutdown_on_full", r->shutdown_on_full); + ndr_print_uint32(ndr, "log_is_full", r->log_is_full); + ndr->depth--; +} + +void ndr_print_lsa_DnsDomainInfo(struct ndr_print *ndr, const char *name, struct lsa_DnsDomainInfo *r) +{ + ndr_print_struct(ndr, name, "lsa_DnsDomainInfo"); + ndr->depth++; + ndr_print_lsa_Name(ndr, "name", &r->name); + ndr_print_lsa_Name(ndr, "dns_domain", &r->dns_domain); + ndr_print_lsa_Name(ndr, "dns_forest", &r->dns_forest); + ndr_print_GUID(ndr, "domain_guid", &r->domain_guid); + ndr_print_ptr(ndr, "sid", r->sid); + ndr->depth++; + if (r->sid) { + ndr_print_dom_sid2(ndr, "sid", r->sid); } - NDR_CHECK(ndr_push_lsa_ObjectAttribute(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.attr)); - NDR_CHECK(ndr_push_uint32(ndr, r->in.desired_access)); + ndr->depth--; + ndr->depth--; +} - return NT_STATUS_OK; +void ndr_print_lsa_PolicyInformation(struct ndr_print *ndr, const char *name, uint16 level, union lsa_PolicyInformation *r) +{ + ndr_print_union(ndr, name, level, "lsa_PolicyInformation"); + switch (level) { + case 1: + ndr_print_lsa_AuditLogInfo(ndr, "audit_log", &r->audit_log); + break; + + case 2: + ndr_print_lsa_AuditEventsInfo(ndr, "audit_events", &r->audit_events); + break; + + case 3: + ndr_print_lsa_DomainInfo(ndr, "domain", &r->domain); + break; + + case 4: + ndr_print_lsa_PDAccountInfo(ndr, "pd", &r->pd); + break; + + case 5: + ndr_print_lsa_DomainInfo(ndr, "account_domain", &r->account_domain); + break; + + case 6: + ndr_print_lsa_ServerRole(ndr, "role", &r->role); + break; + + case 7: + ndr_print_lsa_ReplicaSourceInfo(ndr, "replica", &r->replica); + break; + + case 8: + ndr_print_lsa_DefaultQuotaInfo(ndr, "quota", &r->quota); + break; + + case 9: + ndr_print_lsa_ModificationInfo(ndr, "db", &r->db); + break; + + case 10: + ndr_print_lsa_AuditFullSetInfo(ndr, "auditfullset", &r->auditfullset); + break; + + case 11: + ndr_print_lsa_AuditFullQueryInfo(ndr, "auditfullquery", &r->auditfullquery); + break; + + case 12: + ndr_print_lsa_DnsDomainInfo(ndr, "dns", &r->dns); + break; + + default: + ndr_print_bad_level(ndr, name, level); + } } -NTSTATUS ndr_pull_lsa_OpenPolicy2(struct ndr_pull *ndr, struct lsa_OpenPolicy2 *r) +void ndr_print_lsa_SidPtr(struct ndr_print *ndr, const char *name, struct lsa_SidPtr *r) { - NDR_CHECK(ndr_pull_policy_handle(ndr, r->out.handle)); - NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); + ndr_print_struct(ndr, name, "lsa_SidPtr"); + ndr->depth++; + ndr_print_ptr(ndr, "sid", r->sid); + ndr->depth++; + if (r->sid) { + ndr_print_dom_sid2(ndr, "sid", r->sid); + } + ndr->depth--; + ndr->depth--; +} - return NT_STATUS_OK; +void ndr_print_lsa_SidArray(struct ndr_print *ndr, const char *name, struct lsa_SidArray *r) +{ + ndr_print_struct(ndr, name, "lsa_SidArray"); + ndr->depth++; + ndr_print_uint32(ndr, "num_sids", r->num_sids); + ndr_print_ptr(ndr, "sids", r->sids); + ndr->depth++; + if (r->sids) { + ndr_print_array(ndr, "sids", r->sids, sizeof(r->sids[0]), r->num_sids, (ndr_print_fn_t)ndr_print_lsa_SidPtr); + } + ndr->depth--; + ndr->depth--; } -NTSTATUS ndr_push_UNK_GET_CONNUSER(struct ndr_push *ndr, struct UNK_GET_CONNUSER *r) +void ndr_print_lsa_DomainInformation(struct ndr_print *ndr, const char *name, struct lsa_DomainInformation *r) { + ndr_print_struct(ndr, name, "lsa_DomainInformation"); + ndr->depth++; + ndr_print_lsa_Name(ndr, "name", &r->name); + ndr_print_ptr(ndr, "sid", r->sid); + ndr->depth++; + if (r->sid) { + ndr_print_dom_sid2(ndr, "sid", r->sid); + } + ndr->depth--; + ndr->depth--; +} - return NT_STATUS_OK; +void ndr_print_lsa_DomainList(struct ndr_print *ndr, const char *name, struct lsa_DomainList *r) +{ + ndr_print_struct(ndr, name, "lsa_DomainList"); + ndr->depth++; + ndr_print_uint32(ndr, "count", r->count); + ndr_print_ptr(ndr, "domains", r->domains); + ndr->depth++; + if (r->domains) { + ndr_print_array(ndr, "domains", r->domains, sizeof(r->domains[0]), r->count, (ndr_print_fn_t)ndr_print_lsa_DomainInformation); + } + ndr->depth--; + ndr->depth--; } -NTSTATUS ndr_pull_UNK_GET_CONNUSER(struct ndr_pull *ndr, struct UNK_GET_CONNUSER *r) +void ndr_print_lsa_TranslatedSid(struct ndr_print *ndr, const char *name, struct lsa_TranslatedSid *r) { - NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); + ndr_print_struct(ndr, name, "lsa_TranslatedSid"); + ndr->depth++; + ndr_print_uint16(ndr, "sid_type", r->sid_type); + ndr_print_uint32(ndr, "rid", r->rid); + ndr_print_uint32(ndr, "sid_index", r->sid_index); + ndr->depth--; +} - return NT_STATUS_OK; +void ndr_print_lsa_TransSidArray(struct ndr_print *ndr, const char *name, struct lsa_TransSidArray *r) +{ + ndr_print_struct(ndr, name, "lsa_TransSidArray"); + ndr->depth++; + ndr_print_uint32(ndr, "count", r->count); + ndr_print_ptr(ndr, "sids", r->sids); + ndr->depth++; + if (r->sids) { + ndr_print_array(ndr, "sids", r->sids, sizeof(r->sids[0]), r->count, (ndr_print_fn_t)ndr_print_lsa_TranslatedSid); + } + ndr->depth--; + ndr->depth--; } -NTSTATUS ndr_push_QUERYINFO2(struct ndr_push *ndr, struct QUERYINFO2 *r) +void ndr_print_lsa_TrustInformation(struct ndr_print *ndr, const char *name, struct lsa_TrustInformation *r) { + ndr_print_struct(ndr, name, "lsa_TrustInformation"); + ndr->depth++; + ndr_print_lsa_Name(ndr, "name", &r->name); + ndr_print_ptr(ndr, "sid", r->sid); + ndr->depth++; + if (r->sid) { + ndr_print_dom_sid2(ndr, "sid", r->sid); + } + ndr->depth--; + ndr->depth--; +} - return NT_STATUS_OK; +void ndr_print_lsa_RefDomainList(struct ndr_print *ndr, const char *name, struct lsa_RefDomainList *r) +{ + ndr_print_struct(ndr, name, "lsa_RefDomainList"); + ndr->depth++; + ndr_print_uint32(ndr, "count", r->count); + ndr_print_ptr(ndr, "domains", r->domains); + ndr->depth++; + if (r->domains) { + ndr_print_array(ndr, "domains", r->domains, sizeof(r->domains[0]), r->count, (ndr_print_fn_t)ndr_print_lsa_TrustInformation); + } + ndr->depth--; + ndr_print_uint32(ndr, "max_count", r->max_count); + ndr->depth--; } -NTSTATUS ndr_pull_QUERYINFO2(struct ndr_pull *ndr, struct QUERYINFO2 *r) +void ndr_print_lsa_TranslatedName(struct ndr_print *ndr, const char *name, struct lsa_TranslatedName *r) { - NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result)); + ndr_print_struct(ndr, name, "lsa_TranslatedName"); + ndr->depth++; + ndr_print_uint16(ndr, "sid_type", r->sid_type); + ndr_print_lsa_Name(ndr, "name", &r->name); + ndr_print_uint32(ndr, "sid_index", r->sid_index); + ndr->depth--; +} - return NT_STATUS_OK; +void ndr_print_lsa_TransNameArray(struct ndr_print *ndr, const char *name, struct lsa_TransNameArray *r) +{ + ndr_print_struct(ndr, name, "lsa_TransNameArray"); + ndr->depth++; + ndr_print_uint32(ndr, "count", r->count); + ndr_print_ptr(ndr, "names", r->names); + ndr->depth++; + if (r->names) { + ndr_print_array(ndr, "names", r->names, sizeof(r->names[0]), r->count, (ndr_print_fn_t)ndr_print_lsa_TranslatedName); + } + ndr->depth--; + ndr->depth--; +} + +void ndr_print_lsa_LUID(struct ndr_print *ndr, const char *name, struct lsa_LUID *r) +{ + ndr_print_struct(ndr, name, "lsa_LUID"); + ndr->depth++; + ndr_print_uint32(ndr, "low", r->low); + ndr_print_uint32(ndr, "high", r->high); + ndr->depth--; +} + +void ndr_print_lsa_LUIDAttribute(struct ndr_print *ndr, const char *name, struct lsa_LUIDAttribute *r) +{ + ndr_print_struct(ndr, name, "lsa_LUIDAttribute"); + ndr->depth++; + ndr_print_lsa_LUID(ndr, "luid", &r->luid); + ndr_print_uint32(ndr, "attribute", r->attribute); + ndr->depth--; +} + +void ndr_print_lsa_PrivilegeSet(struct ndr_print *ndr, const char *name, struct lsa_PrivilegeSet *r) +{ + ndr_print_struct(ndr, name, "lsa_PrivilegeSet"); + ndr->depth++; + ndr_print_uint32(ndr, "count", r->count); + ndr_print_uint32(ndr, "unknown", r->unknown); + ndr_print_ptr(ndr, "set", r->set); + ndr->depth++; + ndr_print_array(ndr, "set", r->set, sizeof(r->set[0]), r->count, (ndr_print_fn_t)ndr_print_lsa_LUIDAttribute); + ndr->depth--; + ndr->depth--; +} + +void ndr_print_lsa_RightAttribute(struct ndr_print *ndr, const char *name, struct lsa_RightAttribute *r) +{ + ndr_print_struct(ndr, name, "lsa_RightAttribute"); + ndr->depth++; + ndr_print_ptr(ndr, "name", r->name); + ndr->depth++; + if (r->name) { + ndr_print_unistr(ndr, "name", r->name); + } + ndr->depth--; + ndr->depth--; +} + +void ndr_print_lsa_RightSet(struct ndr_print *ndr, const char *name, struct lsa_RightSet *r) +{ + ndr_print_struct(ndr, name, "lsa_RightSet"); + ndr->depth++; + ndr_print_uint32(ndr, "count", r->count); + ndr_print_ptr(ndr, "names", r->names); + ndr->depth++; + if (r->names) { + ndr_print_array(ndr, "names", r->names, sizeof(r->names[0]), r->count, (ndr_print_fn_t)ndr_print_lsa_Name); + } + ndr->depth--; + ndr->depth--; } diff --git a/source4/librpc/rpc/dcerpc.c b/source4/librpc/rpc/dcerpc.c index 82c07dd197..f72e7b1a88 100644 --- a/source4/librpc/rpc/dcerpc.c +++ b/source4/librpc/rpc/dcerpc.c @@ -780,6 +780,8 @@ NTSTATUS dcerpc_ndr_request(struct dcerpc_pipe *p, /* retrieve the blob */ request = ndr_push_blob(push); + dump_data(10, request.data, request.length); + /* make the actual dcerpc request */ status = dcerpc_request(p, opnum, mem_ctx, &request, &response); if (!NT_STATUS_IS_OK(status)) { |