summaryrefslogtreecommitdiff
path: root/source4
diff options
context:
space:
mode:
Diffstat (limited to 'source4')
-rw-r--r--source4/Makefile.in7
-rw-r--r--source4/librpc/idl/samr.idl317
-rw-r--r--source4/librpc/ndr/libndr.h2
-rw-r--r--source4/librpc/ndr/ndr_samr.c1018
-rw-r--r--source4/librpc/ndr/ndr_samr.h779
-rw-r--r--source4/librpc/rpc/rpc_samr.c956
-rw-r--r--source4/torture/rpc/lsa.c67
-rw-r--r--source4/torture/rpc/samr.c97
-rw-r--r--source4/torture/torture.c1
9 files changed, 3178 insertions, 66 deletions
diff --git a/source4/Makefile.in b/source4/Makefile.in
index f2b3a25117..fac7f41572 100644
--- a/source4/Makefile.in
+++ b/source4/Makefile.in
@@ -195,10 +195,11 @@ LIBCLIUTIL_OBJ = libcli/util/asn1.o \
LIBRAW_NDR_OBJ = librpc/ndr/ndr.o librpc/ndr/ndr_basic.o librpc/ndr/ndr_sec.o \
librpc/ndr/ndr_echo.o librpc/ndr/ndr_misc.o librpc/ndr/ndr_lsa.o \
- librpc/ndr/ndr_dfs.o librpc/ndr/ndr_spoolss.o
+ librpc/ndr/ndr_dfs.o librpc/ndr/ndr_samr.o librpc/ndr/ndr_spoolss.o
LIBRAW_RPC_OBJ = librpc/rpc/dcerpc.o librpc/rpc/rpc_echo.o librpc/rpc/rpc_lsa.o \
- librpc/rpc/dcerpc_smb.o librpc/rpc/rpc_dfs.o librpc/rpc/rpc_spoolss.o
+ librpc/rpc/dcerpc_smb.o librpc/rpc/rpc_dfs.o librpc/rpc/rpc_spoolss.o \
+ librpc/rpc/rpc_samr.o
LIBRAW_OBJ = libcli/raw/rawfile.o libcli/raw/smb_signing.o \
libcli/raw/clisocket.o libcli/raw/clitransport.o \
@@ -507,7 +508,7 @@ SMBTORTURE_RAW_OBJ = torture/raw/qfsinfo.o torture/raw/qfileinfo.o torture/raw/s
torture/raw/write.o torture/raw/lock.o torture/raw/rename.o torture/raw/seek.o
SMBTORTURE_RPC_OBJ = torture/rpc/lsa.o torture/rpc/echo.o torture/rpc/dfs.o \
- torture/rpc/spoolss.o
+ torture/rpc/spoolss.o torture/rpc/samr.o
SMBTORTURE_OBJ1 = torture/torture.o torture/torture_util.o torture/nbio.o torture/scanner.o \
torture/utable.o torture/denytest.o torture/mangle_test.o \
diff --git a/source4/librpc/idl/samr.idl b/source4/librpc/idl/samr.idl
new file mode 100644
index 0000000000..fd71c49369
--- /dev/null
+++ b/source4/librpc/idl/samr.idl
@@ -0,0 +1,317 @@
+/*
+ samr interface definition
+*/
+
+[ uuid(12345778-1234-abcd-ef00-0123456789ac),
+ version(1.0),
+ pointer_default(unique)
+] interface lsarpc
+{
+ /******************/
+ /* Function: 0x00 */
+ NTSTATUS samr_Connect (
+ /* notice the lack of [string] */
+ [in] uint16 *system_name,
+ [in] uint32 access_mask,
+ [out,ref] policy_handle *handle
+ );
+
+
+ /******************/
+ /* Function: 0x01 */
+ NTSTATUS samr_Close ();
+
+ /******************/
+ /* Function: 0x02 */
+ NTSTATUS samr_SetSecurity ();
+
+ /******************/
+ /* Function: 0x03 */
+ NTSTATUS samr_QuerySecurity ();
+
+ /******************/
+ /* Function: 0x04 */
+ NTSTATUS samr_Shutdown ();
+
+ /******************/
+ /* Function: 0x05 */
+ NTSTATUS samr_LookupDomain ();
+
+ /******************/
+ /* Function: 0x06 */
+
+ typedef struct {
+ uint16 name_len;
+ uint16 name_size;
+ unistr_noterm *name;
+ } samr_Name;
+
+ typedef struct {
+ uint32 rid;
+ samr_Name name;
+ } samr_SamEntry;
+
+ typedef struct {
+ uint32 count;
+ [size_is(count)] samr_SamEntry *entries;
+ } samr_SamArray;
+
+ NTSTATUS samr_EnumDomains (
+ [in,ref] policy_handle *handle,
+ [in,out,ref] uint32 *resume_handle,
+ [in] uint32 buf_size,
+ [out] samr_SamArray *sam,
+ [out,ref] uint32 *num_entries
+ );
+
+
+ /************************/
+ /* Function 0x07 */
+ NTSTATUS samr_OPEN_DOMAIN();
+
+ /************************/
+ /* Function 0x08 */
+ NTSTATUS samr_QUERY_DOMAIN_INFO();
+
+ /************************/
+ /* Function 0x09 */
+ NTSTATUS samr_SET_DOMAIN_INFO();
+
+ /************************/
+ /* Function 0x0a */
+ NTSTATUS samr_CREATE_DOM_GROUP();
+
+ /************************/
+ /* Function 0x0b */
+ NTSTATUS samr_ENUM_DOM_GROUPS();
+
+ /************************/
+ /* Function 0x0c */
+ NTSTATUS samr_CREATE_USER_IN_DOMAIN();
+
+ /************************/
+ /* Function 0x0d */
+ NTSTATUS samr_ENUM_DOM_USERS();
+
+ /************************/
+ /* Function 0x0e */
+ NTSTATUS samr_CREATE_DOM_ALIAS();
+
+ /************************/
+ /* Function 0x0f */
+ NTSTATUS samr_ENUM_DOM_ALIASES();
+
+ /************************/
+ /* Function 0x10 */
+ NTSTATUS samr_GET_ALIAS_MEMBERSHIP();
+
+ /************************/
+ /* Function 0x11 */
+ NTSTATUS samr_LOOKUP_NAMES();
+
+ /************************/
+ /* Function 0x12 */
+ NTSTATUS samr_LOOKUP_RIDS();
+
+ /************************/
+ /* Function 0x13 */
+ NTSTATUS samr_OPEN_GROUP();
+
+ /************************/
+ /* Function 0x14 */
+ NTSTATUS samr_QUERY_GROUPINFO();
+
+ /************************/
+ /* Function 0x15 */
+ NTSTATUS samr_SET_GROUPINFO();
+
+ /************************/
+ /* Function 0x16 */
+ NTSTATUS samr_ADD_GROUPMEM();
+
+ /************************/
+ /* Function 0x17 */
+ NTSTATUS samr_DELETE_DOM_GROUP();
+
+ /************************/
+ /* Function 0x18 */
+ NTSTATUS samr_DEL_GROUPMEM();
+
+ /************************/
+ /* Function 0x19 */
+ NTSTATUS samr_QUERY_GROUPMEM();
+
+ /************************/
+ /* Function 0x1a */
+ NTSTATUS samr_SET_MEMBER_ATTRIBUTES_OF_GROUP();
+
+ /************************/
+ /* Function 0x1b */
+ NTSTATUS samr_OPEN_ALIAS();
+
+ /************************/
+ /* Function 0x1c */
+ NTSTATUS samr_QUERY_ALIASINFO();
+
+ /************************/
+ /* Function 0x1d */
+ NTSTATUS samr_SET_ALIASINFO();
+
+ /************************/
+ /* Function 0x1e */
+ NTSTATUS samr_DELETE_DOM_ALIAS();
+
+ /************************/
+ /* Function 0x1f */
+ NTSTATUS samr_ADD_ALIASMEM();
+
+ /************************/
+ /* Function 0x20 */
+ NTSTATUS samr_DEL_ALIASMEM();
+
+ /************************/
+ /* Function 0x21 */
+ NTSTATUS samr_GET_MEMBERS_IN_ALIAS();
+
+ /************************/
+ /* Function 0x22 */
+ NTSTATUS samr_OPEN_USER();
+
+ /************************/
+ /* Function 0x23 */
+ NTSTATUS samr_DELETE_DOM_USER();
+
+ /************************/
+ /* Function 0x24 */
+ NTSTATUS samr_QUERY_USERINFO();
+
+ /************************/
+ /* Function 0x25 */
+ NTSTATUS samr_SET_USERINFO();
+
+ /************************/
+ /* Function 0x26 */
+ NTSTATUS samr_CHANGE_PASSWORD_USER();
+
+ /************************/
+ /* Function 0x27 */
+ NTSTATUS samr_GET_GROUPS_FOR_USER();
+
+ /************************/
+ /* Function 0x28 */
+ NTSTATUS samr_QUERY_DISPINFO();
+
+ /************************/
+ /* Function 0x29 */
+ NTSTATUS samr_GET_DISPLAY_ENUMERATION_INDEX();
+
+ /************************/
+ /* Function 0x2a */
+ NTSTATUS samr_TEST_PRIVATE_FUNCTIONS_DOMAIN();
+
+ /************************/
+ /* Function 0x2b */
+ NTSTATUS samr_TEST_PRIVATE_FUNCTIONS_USER();
+
+ /************************/
+ /* Function 0x2c */
+ NTSTATUS samr_GET_USRDOM_PWINFO();
+
+ /************************/
+ /* Function 0x2d */
+ NTSTATUS samr_REMOVE_MEMBER_FROM_FOREIGN_DOMAIN();
+
+ /************************/
+ /* Function 0x2e */
+ NTSTATUS samr_QUERY_INFORMATION_DOMAIN2();
+
+ /************************/
+ /* Function 0x2f */
+ NTSTATUS samr_QUERY_INFORMATION_USER2();
+
+ /************************/
+ /* Function 0x30 */
+ NTSTATUS samr_QUERY_DISPINFO2();
+
+ /************************/
+ /* Function 0x31 */
+ NTSTATUS samr_GET_DISPLAY_ENUMERATION_INDEX2();
+
+ /************************/
+ /* Function 0x32 */
+ NTSTATUS samr_CREATE_USER2_IN_DOMAIN();
+
+ /************************/
+ /* Function 0x33 */
+ NTSTATUS samr_QUERY_DISPINFO3();
+
+ /************************/
+ /* Function 0x34 */
+ NTSTATUS samr_ADD_MULTIPLE_MEMBERS_TO_ALIAS();
+
+ /************************/
+ /* Function 0x35 */
+ NTSTATUS samr_REMOVE_MULTIPLE_MEMBERS_FROM_ALIAS();
+
+ /************************/
+ /* Function 0x36 */
+ NTSTATUS samr_OEM_CHANGE_PASSWORD_USER2();
+
+ /************************/
+ /* Function 0x37 */
+ NTSTATUS samr_UNICODE_CHANGE_PASSWORD_USER2();
+
+ /************************/
+ /* Function 0x38 */
+ NTSTATUS samr_GET_DOM_PWINFO();
+
+ /************************/
+ /* Function 0x39 */
+ NTSTATUS samr_CONNECT2();
+
+ /************************/
+ /* Function 0x3a */
+ NTSTATUS samr_SET_USERINFO2();
+
+ /************************/
+ /* Function 0x3b */
+ NTSTATUS samr_SET_BOOT_KEY_INFORMATION();
+
+ /************************/
+ /* Function 0x3c */
+ NTSTATUS samr_GET_BOOT_KEY_INFORMATION();
+
+ /************************/
+ /* Function 0x3d */
+ NTSTATUS samr_CONNECT3();
+
+ /************************/
+ /* Function 0x3e */
+ NTSTATUS samr_CONNECT4(
+ [in] unistr *system_name,
+ [in] uint32 unknown,
+ [in] uint32 access_mask,
+ [out,ref] policy_handle *handle
+ );
+
+ /************************/
+ /* Function 0x3f */
+ NTSTATUS samr_UNICODE_CHANGE_PASSWORD_USER3();
+
+ /************************/
+ /* Function 0x40 */
+ NTSTATUS samr_CONNECT5();
+
+ /************************/
+ /* Function 0x41 */
+ NTSTATUS samr_RID_TO_SID();
+
+ /************************/
+ /* Function 0x42 */
+ NTSTATUS samr_SET_DSRM_PASSWORD();
+
+ /************************/
+ /* Function 0x43 */
+ NTSTATUS samr_VALIDATE_PASSWORD();
+
+}
diff --git a/source4/librpc/ndr/libndr.h b/source4/librpc/ndr/libndr.h
index 140001c06d..25ed1fc6f1 100644
--- a/source4/librpc/ndr/libndr.h
+++ b/source4/librpc/ndr/libndr.h
@@ -153,3 +153,5 @@ typedef void (*ndr_print_union_fn_t)(struct ndr_print *, const char *, uint16, v
#include "librpc/ndr/ndr_lsa.h"
#include "librpc/ndr/ndr_dfs.h"
#include "librpc/ndr/ndr_spoolss.h"
+#include "librpc/ndr/ndr_samr.h"
+
diff --git a/source4/librpc/ndr/ndr_samr.c b/source4/librpc/ndr/ndr_samr.c
new file mode 100644
index 0000000000..8258fe6bdf
--- /dev/null
+++ b/source4/librpc/ndr/ndr_samr.c
@@ -0,0 +1,1018 @@
+/* parser auto-generated by pidl */
+
+#include "includes.h"
+
+NTSTATUS ndr_push_samr_Connect(struct ndr_push *ndr, struct samr_Connect *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_uint32(ndr, r->in.access_mask));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_Close(struct ndr_push *ndr, struct samr_Close *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_SetSecurity(struct ndr_push *ndr, struct samr_SetSecurity *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_QuerySecurity(struct ndr_push *ndr, struct samr_QuerySecurity *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_Shutdown(struct ndr_push *ndr, struct samr_Shutdown *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_LookupDomain(struct ndr_push *ndr, struct samr_LookupDomain *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_EnumDomains(struct ndr_push *ndr, struct samr_EnumDomains *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.buf_size));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_OPEN_DOMAIN(struct ndr_push *ndr, struct samr_OPEN_DOMAIN *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_QUERY_DOMAIN_INFO(struct ndr_push *ndr, struct samr_QUERY_DOMAIN_INFO *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_SET_DOMAIN_INFO(struct ndr_push *ndr, struct samr_SET_DOMAIN_INFO *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_CREATE_DOM_GROUP(struct ndr_push *ndr, struct samr_CREATE_DOM_GROUP *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_ENUM_DOM_GROUPS(struct ndr_push *ndr, struct samr_ENUM_DOM_GROUPS *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_CREATE_USER_IN_DOMAIN(struct ndr_push *ndr, struct samr_CREATE_USER_IN_DOMAIN *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_ENUM_DOM_USERS(struct ndr_push *ndr, struct samr_ENUM_DOM_USERS *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_CREATE_DOM_ALIAS(struct ndr_push *ndr, struct samr_CREATE_DOM_ALIAS *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_ENUM_DOM_ALIASES(struct ndr_push *ndr, struct samr_ENUM_DOM_ALIASES *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_GET_ALIAS_MEMBERSHIP(struct ndr_push *ndr, struct samr_GET_ALIAS_MEMBERSHIP *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_LOOKUP_NAMES(struct ndr_push *ndr, struct samr_LOOKUP_NAMES *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_LOOKUP_RIDS(struct ndr_push *ndr, struct samr_LOOKUP_RIDS *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_OPEN_GROUP(struct ndr_push *ndr, struct samr_OPEN_GROUP *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_QUERY_GROUPINFO(struct ndr_push *ndr, struct samr_QUERY_GROUPINFO *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_SET_GROUPINFO(struct ndr_push *ndr, struct samr_SET_GROUPINFO *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_ADD_GROUPMEM(struct ndr_push *ndr, struct samr_ADD_GROUPMEM *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_DELETE_DOM_GROUP(struct ndr_push *ndr, struct samr_DELETE_DOM_GROUP *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_DEL_GROUPMEM(struct ndr_push *ndr, struct samr_DEL_GROUPMEM *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_QUERY_GROUPMEM(struct ndr_push *ndr, struct samr_QUERY_GROUPMEM *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_SET_MEMBER_ATTRIBUTES_OF_GROUP(struct ndr_push *ndr, struct samr_SET_MEMBER_ATTRIBUTES_OF_GROUP *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_OPEN_ALIAS(struct ndr_push *ndr, struct samr_OPEN_ALIAS *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_QUERY_ALIASINFO(struct ndr_push *ndr, struct samr_QUERY_ALIASINFO *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_SET_ALIASINFO(struct ndr_push *ndr, struct samr_SET_ALIASINFO *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_DELETE_DOM_ALIAS(struct ndr_push *ndr, struct samr_DELETE_DOM_ALIAS *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_ADD_ALIASMEM(struct ndr_push *ndr, struct samr_ADD_ALIASMEM *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_DEL_ALIASMEM(struct ndr_push *ndr, struct samr_DEL_ALIASMEM *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_GET_MEMBERS_IN_ALIAS(struct ndr_push *ndr, struct samr_GET_MEMBERS_IN_ALIAS *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_OPEN_USER(struct ndr_push *ndr, struct samr_OPEN_USER *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_DELETE_DOM_USER(struct ndr_push *ndr, struct samr_DELETE_DOM_USER *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_QUERY_USERINFO(struct ndr_push *ndr, struct samr_QUERY_USERINFO *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_SET_USERINFO(struct ndr_push *ndr, struct samr_SET_USERINFO *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_CHANGE_PASSWORD_USER(struct ndr_push *ndr, struct samr_CHANGE_PASSWORD_USER *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_GET_GROUPS_FOR_USER(struct ndr_push *ndr, struct samr_GET_GROUPS_FOR_USER *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_QUERY_DISPINFO(struct ndr_push *ndr, struct samr_QUERY_DISPINFO *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_GET_DISPLAY_ENUMERATION_INDEX(struct ndr_push *ndr, struct samr_GET_DISPLAY_ENUMERATION_INDEX *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_TEST_PRIVATE_FUNCTIONS_DOMAIN(struct ndr_push *ndr, struct samr_TEST_PRIVATE_FUNCTIONS_DOMAIN *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_TEST_PRIVATE_FUNCTIONS_USER(struct ndr_push *ndr, struct samr_TEST_PRIVATE_FUNCTIONS_USER *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_GET_USRDOM_PWINFO(struct ndr_push *ndr, struct samr_GET_USRDOM_PWINFO *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_REMOVE_MEMBER_FROM_FOREIGN_DOMAIN(struct ndr_push *ndr, struct samr_REMOVE_MEMBER_FROM_FOREIGN_DOMAIN *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_QUERY_INFORMATION_DOMAIN2(struct ndr_push *ndr, struct samr_QUERY_INFORMATION_DOMAIN2 *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_QUERY_INFORMATION_USER2(struct ndr_push *ndr, struct samr_QUERY_INFORMATION_USER2 *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_QUERY_DISPINFO2(struct ndr_push *ndr, struct samr_QUERY_DISPINFO2 *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_GET_DISPLAY_ENUMERATION_INDEX2(struct ndr_push *ndr, struct samr_GET_DISPLAY_ENUMERATION_INDEX2 *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_CREATE_USER2_IN_DOMAIN(struct ndr_push *ndr, struct samr_CREATE_USER2_IN_DOMAIN *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_QUERY_DISPINFO3(struct ndr_push *ndr, struct samr_QUERY_DISPINFO3 *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_ADD_MULTIPLE_MEMBERS_TO_ALIAS(struct ndr_push *ndr, struct samr_ADD_MULTIPLE_MEMBERS_TO_ALIAS *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_REMOVE_MULTIPLE_MEMBERS_FROM_ALIAS(struct ndr_push *ndr, struct samr_REMOVE_MULTIPLE_MEMBERS_FROM_ALIAS *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_OEM_CHANGE_PASSWORD_USER2(struct ndr_push *ndr, struct samr_OEM_CHANGE_PASSWORD_USER2 *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_UNICODE_CHANGE_PASSWORD_USER2(struct ndr_push *ndr, struct samr_UNICODE_CHANGE_PASSWORD_USER2 *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_GET_DOM_PWINFO(struct ndr_push *ndr, struct samr_GET_DOM_PWINFO *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_CONNECT2(struct ndr_push *ndr, struct samr_CONNECT2 *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_SET_USERINFO2(struct ndr_push *ndr, struct samr_SET_USERINFO2 *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_SET_BOOT_KEY_INFORMATION(struct ndr_push *ndr, struct samr_SET_BOOT_KEY_INFORMATION *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_GET_BOOT_KEY_INFORMATION(struct ndr_push *ndr, struct samr_GET_BOOT_KEY_INFORMATION *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_CONNECT3(struct ndr_push *ndr, struct samr_CONNECT3 *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_CONNECT4(struct ndr_push *ndr, struct samr_CONNECT4 *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_uint32(ndr, r->in.unknown));
+ NDR_CHECK(ndr_push_uint32(ndr, r->in.access_mask));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_UNICODE_CHANGE_PASSWORD_USER3(struct ndr_push *ndr, struct samr_UNICODE_CHANGE_PASSWORD_USER3 *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_CONNECT5(struct ndr_push *ndr, struct samr_CONNECT5 *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_RID_TO_SID(struct ndr_push *ndr, struct samr_RID_TO_SID *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_SET_DSRM_PASSWORD(struct ndr_push *ndr, struct samr_SET_DSRM_PASSWORD *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_push_samr_VALIDATE_PASSWORD(struct ndr_push *ndr, struct samr_VALIDATE_PASSWORD *r)
+{
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_Connect(struct ndr_pull *ndr, struct samr_Connect *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_pull_samr_Close(struct ndr_pull *ndr, struct samr_Close *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_SetSecurity(struct ndr_pull *ndr, struct samr_SetSecurity *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_QuerySecurity(struct ndr_pull *ndr, struct samr_QuerySecurity *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_Shutdown(struct ndr_pull *ndr, struct samr_Shutdown *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_LookupDomain(struct ndr_pull *ndr, struct samr_LookupDomain *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+static NTSTATUS ndr_pull_samr_Name(struct ndr_pull *ndr, int ndr_flags, struct samr_Name *r)
+{
+ uint32 _ptr_name;
+ NDR_CHECK(ndr_pull_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;
+ }
+buffers:
+ if (!(ndr_flags & NDR_BUFFERS)) goto done;
+ if (r->name) {
+ NDR_CHECK(ndr_pull_unistr_noterm(ndr, &r->name));
+ }
+done:
+ return NT_STATUS_OK;
+}
+
+static NTSTATUS ndr_pull_samr_SamEntry(struct ndr_pull *ndr, int ndr_flags, struct samr_SamEntry *r)
+{
+ NDR_CHECK(ndr_pull_align(ndr, 4));
+ if (!(ndr_flags & NDR_SCALARS)) goto buffers;
+ NDR_CHECK(ndr_pull_uint32(ndr, &r->rid));
+ NDR_CHECK(ndr_pull_samr_Name(ndr, NDR_SCALARS, &r->name));
+buffers:
+ if (!(ndr_flags & NDR_BUFFERS)) goto done;
+ NDR_CHECK(ndr_pull_samr_Name(ndr, NDR_BUFFERS, &r->name));
+done:
+ return NT_STATUS_OK;
+}
+
+static NTSTATUS ndr_pull_samr_SamArray(struct ndr_pull *ndr, int ndr_flags, struct samr_SamArray *r)
+{
+ uint32 _ptr_entries;
+ 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_entries));
+ if (_ptr_entries) {
+ NDR_ALLOC(ndr, r->entries);
+ } else {
+ r->entries = NULL;
+ }
+buffers:
+ if (!(ndr_flags & NDR_BUFFERS)) goto done;
+ if (r->entries) {
+ {
+ 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->entries, r->count, sizeof(r->entries[0]));
+ NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->entries, sizeof(r->entries[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_samr_SamEntry));
+ }
+done:
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_EnumDomains(struct ndr_pull *ndr, struct samr_EnumDomains *r)
+{
+ uint32 _ptr_sam;
+ NDR_CHECK(ndr_pull_uint32(ndr, r->out.resume_handle));
+ NDR_CHECK(ndr_pull_uint32(ndr, &_ptr_sam));
+ if (_ptr_sam) {
+ NDR_ALLOC(ndr, r->out.sam);
+ } else {
+ r->out.sam = NULL;
+ }
+ if (r->out.sam) {
+ NDR_CHECK(ndr_pull_samr_SamArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.sam));
+ }
+ NDR_CHECK(ndr_pull_uint32(ndr, r->out.num_entries));
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_OPEN_DOMAIN(struct ndr_pull *ndr, struct samr_OPEN_DOMAIN *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_QUERY_DOMAIN_INFO(struct ndr_pull *ndr, struct samr_QUERY_DOMAIN_INFO *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_SET_DOMAIN_INFO(struct ndr_pull *ndr, struct samr_SET_DOMAIN_INFO *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_CREATE_DOM_GROUP(struct ndr_pull *ndr, struct samr_CREATE_DOM_GROUP *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_ENUM_DOM_GROUPS(struct ndr_pull *ndr, struct samr_ENUM_DOM_GROUPS *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_CREATE_USER_IN_DOMAIN(struct ndr_pull *ndr, struct samr_CREATE_USER_IN_DOMAIN *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_ENUM_DOM_USERS(struct ndr_pull *ndr, struct samr_ENUM_DOM_USERS *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_CREATE_DOM_ALIAS(struct ndr_pull *ndr, struct samr_CREATE_DOM_ALIAS *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_ENUM_DOM_ALIASES(struct ndr_pull *ndr, struct samr_ENUM_DOM_ALIASES *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_GET_ALIAS_MEMBERSHIP(struct ndr_pull *ndr, struct samr_GET_ALIAS_MEMBERSHIP *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_LOOKUP_NAMES(struct ndr_pull *ndr, struct samr_LOOKUP_NAMES *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_LOOKUP_RIDS(struct ndr_pull *ndr, struct samr_LOOKUP_RIDS *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_OPEN_GROUP(struct ndr_pull *ndr, struct samr_OPEN_GROUP *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_QUERY_GROUPINFO(struct ndr_pull *ndr, struct samr_QUERY_GROUPINFO *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_SET_GROUPINFO(struct ndr_pull *ndr, struct samr_SET_GROUPINFO *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_ADD_GROUPMEM(struct ndr_pull *ndr, struct samr_ADD_GROUPMEM *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_DELETE_DOM_GROUP(struct ndr_pull *ndr, struct samr_DELETE_DOM_GROUP *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_DEL_GROUPMEM(struct ndr_pull *ndr, struct samr_DEL_GROUPMEM *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_QUERY_GROUPMEM(struct ndr_pull *ndr, struct samr_QUERY_GROUPMEM *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_SET_MEMBER_ATTRIBUTES_OF_GROUP(struct ndr_pull *ndr, struct samr_SET_MEMBER_ATTRIBUTES_OF_GROUP *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_OPEN_ALIAS(struct ndr_pull *ndr, struct samr_OPEN_ALIAS *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_QUERY_ALIASINFO(struct ndr_pull *ndr, struct samr_QUERY_ALIASINFO *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_SET_ALIASINFO(struct ndr_pull *ndr, struct samr_SET_ALIASINFO *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_DELETE_DOM_ALIAS(struct ndr_pull *ndr, struct samr_DELETE_DOM_ALIAS *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_ADD_ALIASMEM(struct ndr_pull *ndr, struct samr_ADD_ALIASMEM *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_DEL_ALIASMEM(struct ndr_pull *ndr, struct samr_DEL_ALIASMEM *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_GET_MEMBERS_IN_ALIAS(struct ndr_pull *ndr, struct samr_GET_MEMBERS_IN_ALIAS *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_OPEN_USER(struct ndr_pull *ndr, struct samr_OPEN_USER *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_DELETE_DOM_USER(struct ndr_pull *ndr, struct samr_DELETE_DOM_USER *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_QUERY_USERINFO(struct ndr_pull *ndr, struct samr_QUERY_USERINFO *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_SET_USERINFO(struct ndr_pull *ndr, struct samr_SET_USERINFO *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_CHANGE_PASSWORD_USER(struct ndr_pull *ndr, struct samr_CHANGE_PASSWORD_USER *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_GET_GROUPS_FOR_USER(struct ndr_pull *ndr, struct samr_GET_GROUPS_FOR_USER *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_QUERY_DISPINFO(struct ndr_pull *ndr, struct samr_QUERY_DISPINFO *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_GET_DISPLAY_ENUMERATION_INDEX(struct ndr_pull *ndr, struct samr_GET_DISPLAY_ENUMERATION_INDEX *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_TEST_PRIVATE_FUNCTIONS_DOMAIN(struct ndr_pull *ndr, struct samr_TEST_PRIVATE_FUNCTIONS_DOMAIN *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_TEST_PRIVATE_FUNCTIONS_USER(struct ndr_pull *ndr, struct samr_TEST_PRIVATE_FUNCTIONS_USER *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_GET_USRDOM_PWINFO(struct ndr_pull *ndr, struct samr_GET_USRDOM_PWINFO *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_REMOVE_MEMBER_FROM_FOREIGN_DOMAIN(struct ndr_pull *ndr, struct samr_REMOVE_MEMBER_FROM_FOREIGN_DOMAIN *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_QUERY_INFORMATION_DOMAIN2(struct ndr_pull *ndr, struct samr_QUERY_INFORMATION_DOMAIN2 *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_QUERY_INFORMATION_USER2(struct ndr_pull *ndr, struct samr_QUERY_INFORMATION_USER2 *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_QUERY_DISPINFO2(struct ndr_pull *ndr, struct samr_QUERY_DISPINFO2 *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_GET_DISPLAY_ENUMERATION_INDEX2(struct ndr_pull *ndr, struct samr_GET_DISPLAY_ENUMERATION_INDEX2 *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_CREATE_USER2_IN_DOMAIN(struct ndr_pull *ndr, struct samr_CREATE_USER2_IN_DOMAIN *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_QUERY_DISPINFO3(struct ndr_pull *ndr, struct samr_QUERY_DISPINFO3 *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_ADD_MULTIPLE_MEMBERS_TO_ALIAS(struct ndr_pull *ndr, struct samr_ADD_MULTIPLE_MEMBERS_TO_ALIAS *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_REMOVE_MULTIPLE_MEMBERS_FROM_ALIAS(struct ndr_pull *ndr, struct samr_REMOVE_MULTIPLE_MEMBERS_FROM_ALIAS *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_OEM_CHANGE_PASSWORD_USER2(struct ndr_pull *ndr, struct samr_OEM_CHANGE_PASSWORD_USER2 *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_UNICODE_CHANGE_PASSWORD_USER2(struct ndr_pull *ndr, struct samr_UNICODE_CHANGE_PASSWORD_USER2 *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_GET_DOM_PWINFO(struct ndr_pull *ndr, struct samr_GET_DOM_PWINFO *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_CONNECT2(struct ndr_pull *ndr, struct samr_CONNECT2 *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_SET_USERINFO2(struct ndr_pull *ndr, struct samr_SET_USERINFO2 *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_SET_BOOT_KEY_INFORMATION(struct ndr_pull *ndr, struct samr_SET_BOOT_KEY_INFORMATION *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_GET_BOOT_KEY_INFORMATION(struct ndr_pull *ndr, struct samr_GET_BOOT_KEY_INFORMATION *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_CONNECT3(struct ndr_pull *ndr, struct samr_CONNECT3 *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_CONNECT4(struct ndr_pull *ndr, struct samr_CONNECT4 *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_pull_samr_UNICODE_CHANGE_PASSWORD_USER3(struct ndr_pull *ndr, struct samr_UNICODE_CHANGE_PASSWORD_USER3 *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_CONNECT5(struct ndr_pull *ndr, struct samr_CONNECT5 *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_RID_TO_SID(struct ndr_pull *ndr, struct samr_RID_TO_SID *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_SET_DSRM_PASSWORD(struct ndr_pull *ndr, struct samr_SET_DSRM_PASSWORD *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_samr_VALIDATE_PASSWORD(struct ndr_pull *ndr, struct samr_VALIDATE_PASSWORD *r)
+{
+ NDR_CHECK(ndr_pull_NTSTATUS(ndr, &r->out.result));
+
+ return NT_STATUS_OK;
+}
+
+void ndr_print_samr_Name(struct ndr_print *ndr, const char *name, struct samr_Name *r)
+{
+ ndr_print_struct(ndr, name, "samr_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--;
+}
+
+void ndr_print_samr_SamEntry(struct ndr_print *ndr, const char *name, struct samr_SamEntry *r)
+{
+ ndr_print_struct(ndr, name, "samr_SamEntry");
+ ndr->depth++;
+ ndr_print_uint32(ndr, "rid", r->rid);
+ ndr_print_samr_Name(ndr, "name", &r->name);
+ ndr->depth--;
+}
+
+void ndr_print_samr_SamArray(struct ndr_print *ndr, const char *name, struct samr_SamArray *r)
+{
+ ndr_print_struct(ndr, name, "samr_SamArray");
+ ndr->depth++;
+ ndr_print_uint32(ndr, "count", r->count);
+ ndr_print_ptr(ndr, "entries", r->entries);
+ ndr->depth++;
+ if (r->entries) {
+ ndr_print_array(ndr, "entries", r->entries, sizeof(r->entries[0]), r->count, (ndr_print_fn_t)ndr_print_samr_SamEntry);
+ }
+ ndr->depth--;
+ ndr->depth--;
+}
+
diff --git a/source4/librpc/ndr/ndr_samr.h b/source4/librpc/ndr/ndr_samr.h
new file mode 100644
index 0000000000..20b58685de
--- /dev/null
+++ b/source4/librpc/ndr/ndr_samr.h
@@ -0,0 +1,779 @@
+/* header auto-generated by pidl */
+
+struct samr_Connect {
+ struct {
+ uint16 *system_name;
+ uint32 access_mask;
+ } in;
+
+ struct {
+ struct policy_handle *handle;
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_Close {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_SetSecurity {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_QuerySecurity {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_Shutdown {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_LookupDomain {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_Name {
+ uint16 name_len;
+ uint16 name_size;
+ const char *name;
+};
+
+struct samr_SamEntry {
+ uint32 rid;
+ struct samr_Name name;
+};
+
+struct samr_SamArray {
+ uint32 count;
+ struct samr_SamEntry *entries;
+};
+
+struct samr_EnumDomains {
+ struct {
+ struct policy_handle *handle;
+ uint32 *resume_handle;
+ uint32 buf_size;
+ } in;
+
+ struct {
+ uint32 *resume_handle;
+ struct samr_SamArray *sam;
+ uint32 *num_entries;
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_OPEN_DOMAIN {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_QUERY_DOMAIN_INFO {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_SET_DOMAIN_INFO {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_CREATE_DOM_GROUP {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_ENUM_DOM_GROUPS {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_CREATE_USER_IN_DOMAIN {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_ENUM_DOM_USERS {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_CREATE_DOM_ALIAS {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_ENUM_DOM_ALIASES {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_GET_ALIAS_MEMBERSHIP {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_LOOKUP_NAMES {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_LOOKUP_RIDS {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_OPEN_GROUP {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_QUERY_GROUPINFO {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_SET_GROUPINFO {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_ADD_GROUPMEM {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_DELETE_DOM_GROUP {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_DEL_GROUPMEM {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_QUERY_GROUPMEM {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_SET_MEMBER_ATTRIBUTES_OF_GROUP {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_OPEN_ALIAS {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_QUERY_ALIASINFO {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_SET_ALIASINFO {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_DELETE_DOM_ALIAS {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_ADD_ALIASMEM {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_DEL_ALIASMEM {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_GET_MEMBERS_IN_ALIAS {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_OPEN_USER {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_DELETE_DOM_USER {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_QUERY_USERINFO {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_SET_USERINFO {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_CHANGE_PASSWORD_USER {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_GET_GROUPS_FOR_USER {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_QUERY_DISPINFO {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_GET_DISPLAY_ENUMERATION_INDEX {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_TEST_PRIVATE_FUNCTIONS_DOMAIN {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_TEST_PRIVATE_FUNCTIONS_USER {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_GET_USRDOM_PWINFO {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_REMOVE_MEMBER_FROM_FOREIGN_DOMAIN {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_QUERY_INFORMATION_DOMAIN2 {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_QUERY_INFORMATION_USER2 {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_QUERY_DISPINFO2 {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_GET_DISPLAY_ENUMERATION_INDEX2 {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_CREATE_USER2_IN_DOMAIN {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_QUERY_DISPINFO3 {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_ADD_MULTIPLE_MEMBERS_TO_ALIAS {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_REMOVE_MULTIPLE_MEMBERS_FROM_ALIAS {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_OEM_CHANGE_PASSWORD_USER2 {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_UNICODE_CHANGE_PASSWORD_USER2 {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_GET_DOM_PWINFO {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_CONNECT2 {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_SET_USERINFO2 {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_SET_BOOT_KEY_INFORMATION {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_GET_BOOT_KEY_INFORMATION {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_CONNECT3 {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_CONNECT4 {
+ struct {
+ const char *system_name;
+ uint32 unknown;
+ uint32 access_mask;
+ } in;
+
+ struct {
+ struct policy_handle *handle;
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_UNICODE_CHANGE_PASSWORD_USER3 {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_CONNECT5 {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_RID_TO_SID {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_SET_DSRM_PASSWORD {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+struct samr_VALIDATE_PASSWORD {
+ struct {
+ } in;
+
+ struct {
+ NTSTATUS result;
+ } out;
+
+};
+
+#define DCERPC_SAMR_CONNECT 0
+#define DCERPC_SAMR_CLOSE 1
+#define DCERPC_SAMR_SETSECURITY 2
+#define DCERPC_SAMR_QUERYSECURITY 3
+#define DCERPC_SAMR_SHUTDOWN 4
+#define DCERPC_SAMR_LOOKUPDOMAIN 5
+#define DCERPC_SAMR_ENUMDOMAINS 6
+#define DCERPC_SAMR_OPEN_DOMAIN 7
+#define DCERPC_SAMR_QUERY_DOMAIN_INFO 8
+#define DCERPC_SAMR_SET_DOMAIN_INFO 9
+#define DCERPC_SAMR_CREATE_DOM_GROUP 10
+#define DCERPC_SAMR_ENUM_DOM_GROUPS 11
+#define DCERPC_SAMR_CREATE_USER_IN_DOMAIN 12
+#define DCERPC_SAMR_ENUM_DOM_USERS 13
+#define DCERPC_SAMR_CREATE_DOM_ALIAS 14
+#define DCERPC_SAMR_ENUM_DOM_ALIASES 15
+#define DCERPC_SAMR_GET_ALIAS_MEMBERSHIP 16
+#define DCERPC_SAMR_LOOKUP_NAMES 17
+#define DCERPC_SAMR_LOOKUP_RIDS 18
+#define DCERPC_SAMR_OPEN_GROUP 19
+#define DCERPC_SAMR_QUERY_GROUPINFO 20
+#define DCERPC_SAMR_SET_GROUPINFO 21
+#define DCERPC_SAMR_ADD_GROUPMEM 22
+#define DCERPC_SAMR_DELETE_DOM_GROUP 23
+#define DCERPC_SAMR_DEL_GROUPMEM 24
+#define DCERPC_SAMR_QUERY_GROUPMEM 25
+#define DCERPC_SAMR_SET_MEMBER_ATTRIBUTES_OF_GROUP 26
+#define DCERPC_SAMR_OPEN_ALIAS 27
+#define DCERPC_SAMR_QUERY_ALIASINFO 28
+#define DCERPC_SAMR_SET_ALIASINFO 29
+#define DCERPC_SAMR_DELETE_DOM_ALIAS 30
+#define DCERPC_SAMR_ADD_ALIASMEM 31
+#define DCERPC_SAMR_DEL_ALIASMEM 32
+#define DCERPC_SAMR_GET_MEMBERS_IN_ALIAS 33
+#define DCERPC_SAMR_OPEN_USER 34
+#define DCERPC_SAMR_DELETE_DOM_USER 35
+#define DCERPC_SAMR_QUERY_USERINFO 36
+#define DCERPC_SAMR_SET_USERINFO 37
+#define DCERPC_SAMR_CHANGE_PASSWORD_USER 38
+#define DCERPC_SAMR_GET_GROUPS_FOR_USER 39
+#define DCERPC_SAMR_QUERY_DISPINFO 40
+#define DCERPC_SAMR_GET_DISPLAY_ENUMERATION_INDEX 41
+#define DCERPC_SAMR_TEST_PRIVATE_FUNCTIONS_DOMAIN 42
+#define DCERPC_SAMR_TEST_PRIVATE_FUNCTIONS_USER 43
+#define DCERPC_SAMR_GET_USRDOM_PWINFO 44
+#define DCERPC_SAMR_REMOVE_MEMBER_FROM_FOREIGN_DOMAIN 45
+#define DCERPC_SAMR_QUERY_INFORMATION_DOMAIN2 46
+#define DCERPC_SAMR_QUERY_INFORMATION_USER2 47
+#define DCERPC_SAMR_QUERY_DISPINFO2 48
+#define DCERPC_SAMR_GET_DISPLAY_ENUMERATION_INDEX2 49
+#define DCERPC_SAMR_CREATE_USER2_IN_DOMAIN 50
+#define DCERPC_SAMR_QUERY_DISPINFO3 51
+#define DCERPC_SAMR_ADD_MULTIPLE_MEMBERS_TO_ALIAS 52
+#define DCERPC_SAMR_REMOVE_MULTIPLE_MEMBERS_FROM_ALIAS 53
+#define DCERPC_SAMR_OEM_CHANGE_PASSWORD_USER2 54
+#define DCERPC_SAMR_UNICODE_CHANGE_PASSWORD_USER2 55
+#define DCERPC_SAMR_GET_DOM_PWINFO 56
+#define DCERPC_SAMR_CONNECT2 57
+#define DCERPC_SAMR_SET_USERINFO2 58
+#define DCERPC_SAMR_SET_BOOT_KEY_INFORMATION 59
+#define DCERPC_SAMR_GET_BOOT_KEY_INFORMATION 60
+#define DCERPC_SAMR_CONNECT3 61
+#define DCERPC_SAMR_CONNECT4 62
+#define DCERPC_SAMR_UNICODE_CHANGE_PASSWORD_USER3 63
+#define DCERPC_SAMR_CONNECT5 64
+#define DCERPC_SAMR_RID_TO_SID 65
+#define DCERPC_SAMR_SET_DSRM_PASSWORD 66
+#define DCERPC_SAMR_VALIDATE_PASSWORD 67
diff --git a/source4/librpc/rpc/rpc_samr.c b/source4/librpc/rpc/rpc_samr.c
new file mode 100644
index 0000000000..d007ebe07f
--- /dev/null
+++ b/source4/librpc/rpc/rpc_samr.c
@@ -0,0 +1,956 @@
+/* dcerpc client calls auto-generated by pidl */
+
+#include "includes.h"
+
+
+NTSTATUS dcerpc_samr_Connect(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_Connect *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_CONNECT, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_Connect,
+ (ndr_pull_fn_t) ndr_pull_samr_Connect,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_Close(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_Close *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_CLOSE, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_Close,
+ (ndr_pull_fn_t) ndr_pull_samr_Close,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_SetSecurity(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_SetSecurity *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_SETSECURITY, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_SetSecurity,
+ (ndr_pull_fn_t) ndr_pull_samr_SetSecurity,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_QuerySecurity(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_QuerySecurity *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_QUERYSECURITY, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_QuerySecurity,
+ (ndr_pull_fn_t) ndr_pull_samr_QuerySecurity,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_Shutdown(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_Shutdown *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_SHUTDOWN, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_Shutdown,
+ (ndr_pull_fn_t) ndr_pull_samr_Shutdown,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_LookupDomain(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_LookupDomain *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_LOOKUPDOMAIN, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_LookupDomain,
+ (ndr_pull_fn_t) ndr_pull_samr_LookupDomain,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_EnumDomains(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_EnumDomains *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_ENUMDOMAINS, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_EnumDomains,
+ (ndr_pull_fn_t) ndr_pull_samr_EnumDomains,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_OPEN_DOMAIN(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_OPEN_DOMAIN *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_OPEN_DOMAIN, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_OPEN_DOMAIN,
+ (ndr_pull_fn_t) ndr_pull_samr_OPEN_DOMAIN,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_QUERY_DOMAIN_INFO(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_QUERY_DOMAIN_INFO *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_QUERY_DOMAIN_INFO, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_QUERY_DOMAIN_INFO,
+ (ndr_pull_fn_t) ndr_pull_samr_QUERY_DOMAIN_INFO,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_SET_DOMAIN_INFO(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_SET_DOMAIN_INFO *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_SET_DOMAIN_INFO, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_SET_DOMAIN_INFO,
+ (ndr_pull_fn_t) ndr_pull_samr_SET_DOMAIN_INFO,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_CREATE_DOM_GROUP(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_CREATE_DOM_GROUP *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_CREATE_DOM_GROUP, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_CREATE_DOM_GROUP,
+ (ndr_pull_fn_t) ndr_pull_samr_CREATE_DOM_GROUP,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_ENUM_DOM_GROUPS(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_ENUM_DOM_GROUPS *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_ENUM_DOM_GROUPS, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_ENUM_DOM_GROUPS,
+ (ndr_pull_fn_t) ndr_pull_samr_ENUM_DOM_GROUPS,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_CREATE_USER_IN_DOMAIN(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_CREATE_USER_IN_DOMAIN *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_CREATE_USER_IN_DOMAIN, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_CREATE_USER_IN_DOMAIN,
+ (ndr_pull_fn_t) ndr_pull_samr_CREATE_USER_IN_DOMAIN,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_ENUM_DOM_USERS(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_ENUM_DOM_USERS *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_ENUM_DOM_USERS, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_ENUM_DOM_USERS,
+ (ndr_pull_fn_t) ndr_pull_samr_ENUM_DOM_USERS,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_CREATE_DOM_ALIAS(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_CREATE_DOM_ALIAS *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_CREATE_DOM_ALIAS, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_CREATE_DOM_ALIAS,
+ (ndr_pull_fn_t) ndr_pull_samr_CREATE_DOM_ALIAS,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_ENUM_DOM_ALIASES(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_ENUM_DOM_ALIASES *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_ENUM_DOM_ALIASES, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_ENUM_DOM_ALIASES,
+ (ndr_pull_fn_t) ndr_pull_samr_ENUM_DOM_ALIASES,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_GET_ALIAS_MEMBERSHIP(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_GET_ALIAS_MEMBERSHIP *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_GET_ALIAS_MEMBERSHIP, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_GET_ALIAS_MEMBERSHIP,
+ (ndr_pull_fn_t) ndr_pull_samr_GET_ALIAS_MEMBERSHIP,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_LOOKUP_NAMES(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_LOOKUP_NAMES *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_LOOKUP_NAMES, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_LOOKUP_NAMES,
+ (ndr_pull_fn_t) ndr_pull_samr_LOOKUP_NAMES,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_LOOKUP_RIDS(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_LOOKUP_RIDS *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_LOOKUP_RIDS, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_LOOKUP_RIDS,
+ (ndr_pull_fn_t) ndr_pull_samr_LOOKUP_RIDS,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_OPEN_GROUP(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_OPEN_GROUP *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_OPEN_GROUP, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_OPEN_GROUP,
+ (ndr_pull_fn_t) ndr_pull_samr_OPEN_GROUP,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_QUERY_GROUPINFO(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_QUERY_GROUPINFO *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_QUERY_GROUPINFO, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_QUERY_GROUPINFO,
+ (ndr_pull_fn_t) ndr_pull_samr_QUERY_GROUPINFO,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_SET_GROUPINFO(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_SET_GROUPINFO *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_SET_GROUPINFO, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_SET_GROUPINFO,
+ (ndr_pull_fn_t) ndr_pull_samr_SET_GROUPINFO,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_ADD_GROUPMEM(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_ADD_GROUPMEM *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_ADD_GROUPMEM, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_ADD_GROUPMEM,
+ (ndr_pull_fn_t) ndr_pull_samr_ADD_GROUPMEM,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_DELETE_DOM_GROUP(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_DELETE_DOM_GROUP *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_DELETE_DOM_GROUP, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_DELETE_DOM_GROUP,
+ (ndr_pull_fn_t) ndr_pull_samr_DELETE_DOM_GROUP,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_DEL_GROUPMEM(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_DEL_GROUPMEM *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_DEL_GROUPMEM, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_DEL_GROUPMEM,
+ (ndr_pull_fn_t) ndr_pull_samr_DEL_GROUPMEM,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_QUERY_GROUPMEM(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_QUERY_GROUPMEM *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_QUERY_GROUPMEM, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_QUERY_GROUPMEM,
+ (ndr_pull_fn_t) ndr_pull_samr_QUERY_GROUPMEM,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_SET_MEMBER_ATTRIBUTES_OF_GROUP(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_SET_MEMBER_ATTRIBUTES_OF_GROUP *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_SET_MEMBER_ATTRIBUTES_OF_GROUP, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_SET_MEMBER_ATTRIBUTES_OF_GROUP,
+ (ndr_pull_fn_t) ndr_pull_samr_SET_MEMBER_ATTRIBUTES_OF_GROUP,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_OPEN_ALIAS(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_OPEN_ALIAS *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_OPEN_ALIAS, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_OPEN_ALIAS,
+ (ndr_pull_fn_t) ndr_pull_samr_OPEN_ALIAS,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_QUERY_ALIASINFO(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_QUERY_ALIASINFO *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_QUERY_ALIASINFO, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_QUERY_ALIASINFO,
+ (ndr_pull_fn_t) ndr_pull_samr_QUERY_ALIASINFO,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_SET_ALIASINFO(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_SET_ALIASINFO *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_SET_ALIASINFO, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_SET_ALIASINFO,
+ (ndr_pull_fn_t) ndr_pull_samr_SET_ALIASINFO,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_DELETE_DOM_ALIAS(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_DELETE_DOM_ALIAS *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_DELETE_DOM_ALIAS, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_DELETE_DOM_ALIAS,
+ (ndr_pull_fn_t) ndr_pull_samr_DELETE_DOM_ALIAS,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_ADD_ALIASMEM(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_ADD_ALIASMEM *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_ADD_ALIASMEM, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_ADD_ALIASMEM,
+ (ndr_pull_fn_t) ndr_pull_samr_ADD_ALIASMEM,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_DEL_ALIASMEM(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_DEL_ALIASMEM *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_DEL_ALIASMEM, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_DEL_ALIASMEM,
+ (ndr_pull_fn_t) ndr_pull_samr_DEL_ALIASMEM,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_GET_MEMBERS_IN_ALIAS(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_GET_MEMBERS_IN_ALIAS *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_GET_MEMBERS_IN_ALIAS, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_GET_MEMBERS_IN_ALIAS,
+ (ndr_pull_fn_t) ndr_pull_samr_GET_MEMBERS_IN_ALIAS,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_OPEN_USER(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_OPEN_USER *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_OPEN_USER, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_OPEN_USER,
+ (ndr_pull_fn_t) ndr_pull_samr_OPEN_USER,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_DELETE_DOM_USER(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_DELETE_DOM_USER *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_DELETE_DOM_USER, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_DELETE_DOM_USER,
+ (ndr_pull_fn_t) ndr_pull_samr_DELETE_DOM_USER,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_QUERY_USERINFO(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_QUERY_USERINFO *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_QUERY_USERINFO, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_QUERY_USERINFO,
+ (ndr_pull_fn_t) ndr_pull_samr_QUERY_USERINFO,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_SET_USERINFO(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_SET_USERINFO *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_SET_USERINFO, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_SET_USERINFO,
+ (ndr_pull_fn_t) ndr_pull_samr_SET_USERINFO,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_CHANGE_PASSWORD_USER(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_CHANGE_PASSWORD_USER *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_CHANGE_PASSWORD_USER, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_CHANGE_PASSWORD_USER,
+ (ndr_pull_fn_t) ndr_pull_samr_CHANGE_PASSWORD_USER,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_GET_GROUPS_FOR_USER(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_GET_GROUPS_FOR_USER *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_GET_GROUPS_FOR_USER, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_GET_GROUPS_FOR_USER,
+ (ndr_pull_fn_t) ndr_pull_samr_GET_GROUPS_FOR_USER,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_QUERY_DISPINFO(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_QUERY_DISPINFO *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_QUERY_DISPINFO, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_QUERY_DISPINFO,
+ (ndr_pull_fn_t) ndr_pull_samr_QUERY_DISPINFO,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_GET_DISPLAY_ENUMERATION_INDEX(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_GET_DISPLAY_ENUMERATION_INDEX *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_GET_DISPLAY_ENUMERATION_INDEX, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_GET_DISPLAY_ENUMERATION_INDEX,
+ (ndr_pull_fn_t) ndr_pull_samr_GET_DISPLAY_ENUMERATION_INDEX,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_TEST_PRIVATE_FUNCTIONS_DOMAIN(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_TEST_PRIVATE_FUNCTIONS_DOMAIN *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_TEST_PRIVATE_FUNCTIONS_DOMAIN, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_TEST_PRIVATE_FUNCTIONS_DOMAIN,
+ (ndr_pull_fn_t) ndr_pull_samr_TEST_PRIVATE_FUNCTIONS_DOMAIN,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_TEST_PRIVATE_FUNCTIONS_USER(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_TEST_PRIVATE_FUNCTIONS_USER *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_TEST_PRIVATE_FUNCTIONS_USER, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_TEST_PRIVATE_FUNCTIONS_USER,
+ (ndr_pull_fn_t) ndr_pull_samr_TEST_PRIVATE_FUNCTIONS_USER,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_GET_USRDOM_PWINFO(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_GET_USRDOM_PWINFO *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_GET_USRDOM_PWINFO, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_GET_USRDOM_PWINFO,
+ (ndr_pull_fn_t) ndr_pull_samr_GET_USRDOM_PWINFO,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_REMOVE_MEMBER_FROM_FOREIGN_DOMAIN(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_REMOVE_MEMBER_FROM_FOREIGN_DOMAIN *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_REMOVE_MEMBER_FROM_FOREIGN_DOMAIN, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_REMOVE_MEMBER_FROM_FOREIGN_DOMAIN,
+ (ndr_pull_fn_t) ndr_pull_samr_REMOVE_MEMBER_FROM_FOREIGN_DOMAIN,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_QUERY_INFORMATION_DOMAIN2(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_QUERY_INFORMATION_DOMAIN2 *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_QUERY_INFORMATION_DOMAIN2, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_QUERY_INFORMATION_DOMAIN2,
+ (ndr_pull_fn_t) ndr_pull_samr_QUERY_INFORMATION_DOMAIN2,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_QUERY_INFORMATION_USER2(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_QUERY_INFORMATION_USER2 *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_QUERY_INFORMATION_USER2, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_QUERY_INFORMATION_USER2,
+ (ndr_pull_fn_t) ndr_pull_samr_QUERY_INFORMATION_USER2,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_QUERY_DISPINFO2(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_QUERY_DISPINFO2 *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_QUERY_DISPINFO2, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_QUERY_DISPINFO2,
+ (ndr_pull_fn_t) ndr_pull_samr_QUERY_DISPINFO2,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_GET_DISPLAY_ENUMERATION_INDEX2(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_GET_DISPLAY_ENUMERATION_INDEX2 *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_GET_DISPLAY_ENUMERATION_INDEX2, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_GET_DISPLAY_ENUMERATION_INDEX2,
+ (ndr_pull_fn_t) ndr_pull_samr_GET_DISPLAY_ENUMERATION_INDEX2,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_CREATE_USER2_IN_DOMAIN(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_CREATE_USER2_IN_DOMAIN *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_CREATE_USER2_IN_DOMAIN, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_CREATE_USER2_IN_DOMAIN,
+ (ndr_pull_fn_t) ndr_pull_samr_CREATE_USER2_IN_DOMAIN,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_QUERY_DISPINFO3(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_QUERY_DISPINFO3 *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_QUERY_DISPINFO3, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_QUERY_DISPINFO3,
+ (ndr_pull_fn_t) ndr_pull_samr_QUERY_DISPINFO3,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_ADD_MULTIPLE_MEMBERS_TO_ALIAS(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_ADD_MULTIPLE_MEMBERS_TO_ALIAS *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_ADD_MULTIPLE_MEMBERS_TO_ALIAS, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_ADD_MULTIPLE_MEMBERS_TO_ALIAS,
+ (ndr_pull_fn_t) ndr_pull_samr_ADD_MULTIPLE_MEMBERS_TO_ALIAS,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_REMOVE_MULTIPLE_MEMBERS_FROM_ALIAS(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_REMOVE_MULTIPLE_MEMBERS_FROM_ALIAS *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_REMOVE_MULTIPLE_MEMBERS_FROM_ALIAS, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_REMOVE_MULTIPLE_MEMBERS_FROM_ALIAS,
+ (ndr_pull_fn_t) ndr_pull_samr_REMOVE_MULTIPLE_MEMBERS_FROM_ALIAS,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_OEM_CHANGE_PASSWORD_USER2(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_OEM_CHANGE_PASSWORD_USER2 *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_OEM_CHANGE_PASSWORD_USER2, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_OEM_CHANGE_PASSWORD_USER2,
+ (ndr_pull_fn_t) ndr_pull_samr_OEM_CHANGE_PASSWORD_USER2,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_UNICODE_CHANGE_PASSWORD_USER2(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_UNICODE_CHANGE_PASSWORD_USER2 *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_UNICODE_CHANGE_PASSWORD_USER2, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_UNICODE_CHANGE_PASSWORD_USER2,
+ (ndr_pull_fn_t) ndr_pull_samr_UNICODE_CHANGE_PASSWORD_USER2,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_GET_DOM_PWINFO(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_GET_DOM_PWINFO *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_GET_DOM_PWINFO, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_GET_DOM_PWINFO,
+ (ndr_pull_fn_t) ndr_pull_samr_GET_DOM_PWINFO,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_CONNECT2(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_CONNECT2 *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_CONNECT2, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_CONNECT2,
+ (ndr_pull_fn_t) ndr_pull_samr_CONNECT2,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_SET_USERINFO2(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_SET_USERINFO2 *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_SET_USERINFO2, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_SET_USERINFO2,
+ (ndr_pull_fn_t) ndr_pull_samr_SET_USERINFO2,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_SET_BOOT_KEY_INFORMATION(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_SET_BOOT_KEY_INFORMATION *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_SET_BOOT_KEY_INFORMATION, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_SET_BOOT_KEY_INFORMATION,
+ (ndr_pull_fn_t) ndr_pull_samr_SET_BOOT_KEY_INFORMATION,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_GET_BOOT_KEY_INFORMATION(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_GET_BOOT_KEY_INFORMATION *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_GET_BOOT_KEY_INFORMATION, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_GET_BOOT_KEY_INFORMATION,
+ (ndr_pull_fn_t) ndr_pull_samr_GET_BOOT_KEY_INFORMATION,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_CONNECT3(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_CONNECT3 *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_CONNECT3, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_CONNECT3,
+ (ndr_pull_fn_t) ndr_pull_samr_CONNECT3,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_CONNECT4(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_CONNECT4 *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_CONNECT4, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_CONNECT4,
+ (ndr_pull_fn_t) ndr_pull_samr_CONNECT4,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_UNICODE_CHANGE_PASSWORD_USER3(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_UNICODE_CHANGE_PASSWORD_USER3 *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_UNICODE_CHANGE_PASSWORD_USER3, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_UNICODE_CHANGE_PASSWORD_USER3,
+ (ndr_pull_fn_t) ndr_pull_samr_UNICODE_CHANGE_PASSWORD_USER3,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_CONNECT5(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_CONNECT5 *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_CONNECT5, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_CONNECT5,
+ (ndr_pull_fn_t) ndr_pull_samr_CONNECT5,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_RID_TO_SID(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_RID_TO_SID *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_RID_TO_SID, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_RID_TO_SID,
+ (ndr_pull_fn_t) ndr_pull_samr_RID_TO_SID,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_SET_DSRM_PASSWORD(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_SET_DSRM_PASSWORD *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_SET_DSRM_PASSWORD, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_SET_DSRM_PASSWORD,
+ (ndr_pull_fn_t) ndr_pull_samr_SET_DSRM_PASSWORD,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
+
+NTSTATUS dcerpc_samr_VALIDATE_PASSWORD(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_VALIDATE_PASSWORD *r)
+{
+ NTSTATUS status;
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_VALIDATE_PASSWORD, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_VALIDATE_PASSWORD,
+ (ndr_pull_fn_t) ndr_pull_samr_VALIDATE_PASSWORD,
+ r);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return r->out.result;
+}
diff --git a/source4/torture/rpc/lsa.c b/source4/torture/rpc/lsa.c
index 726281e0d6..f65f49bafd 100644
--- a/source4/torture/rpc/lsa.c
+++ b/source4/torture/rpc/lsa.c
@@ -21,65 +21,6 @@
#include "includes.h"
-
-/*
- these really shouldn't be here ....
-*/
-static char *lsa_sid_string_talloc(TALLOC_CTX *mem_ctx, struct dom_sid *sid)
-{
- int i, ofs, maxlen;
- uint32 ia;
- char *ret;
-
- if (!sid) {
- return talloc_asprintf(mem_ctx, "(NULL SID)");
- }
-
- maxlen = sid->num_auths * 11 + 25;
- ret = talloc(mem_ctx, maxlen);
- if (!ret) return NULL;
-
- ia = (sid->id_auth[5]) +
- (sid->id_auth[4] << 8 ) +
- (sid->id_auth[3] << 16) +
- (sid->id_auth[2] << 24);
-
- ofs = snprintf(ret, maxlen, "S-%u-%lu",
- (unsigned int)sid->sid_rev_num, (unsigned long)ia);
-
- for (i = 0; i < sid->num_auths; i++) {
- ofs += snprintf(ret + ofs, maxlen - ofs, "-%lu", (unsigned long)sid->sub_auths[i]);
- }
-
- return ret;
-}
-
-static int dom_sid_compare(struct dom_sid *sid1, struct dom_sid *sid2)
-{
- int i;
-
- if (sid1 == sid2) return 0;
- if (!sid1) return -1;
- if (!sid2) return 1;
-
- /* Compare most likely different rids, first: i.e start at end */
- if (sid1->num_auths != sid2->num_auths)
- return sid1->num_auths - sid2->num_auths;
-
- for (i = sid1->num_auths-1; i >= 0; --i)
- if (sid1->sub_auths[i] != sid2->sub_auths[i])
- return sid1->sub_auths[i] - sid2->sub_auths[i];
-
- if (sid1->sid_rev_num != sid2->sid_rev_num)
- return sid1->sid_rev_num - sid2->sid_rev_num;
-
- for (i = 0; i < 6; i++)
- if (sid1->id_auth[i] != sid2->id_auth[i])
- return sid1->id_auth[i] - sid2->id_auth[i];
-
- return 0;
-}
-
static BOOL test_OpenPolicy(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
{
struct lsa_ObjectAttribute attr;
@@ -335,8 +276,8 @@ static BOOL test_EnumAccountRights(struct dcerpc_pipe *p,
static BOOL test_QuerySecObj(struct dcerpc_pipe *p,
TALLOC_CTX *mem_ctx,
- struct policy_handle *acct_handle,
- struct dom_sid *sid)
+ struct policy_handle *handle,
+ struct policy_handle *acct_handle)
{
NTSTATUS status;
struct lsa_QuerySecObj r;
@@ -366,7 +307,7 @@ static BOOL test_OpenAccount(struct dcerpc_pipe *p,
struct lsa_OpenAccount r;
struct policy_handle acct_handle;
- printf("Testing OpenAccount(%s)\n", lsa_sid_string_talloc(mem_ctx, sid));
+ printf("Testing OpenAccount\n");
r.in.handle = handle;
r.in.sid = sid;
@@ -590,7 +531,7 @@ static BOOL test_Close(struct dcerpc_pipe *p,
status = dcerpc_lsa_Close(p, mem_ctx, &r);
/* its really a fault - we need a status code for rpc fault */
- if (!NT_STATUS_EQUAL(status, NT_STATUS_INVALID_LEVEL)) {
+ if (!NT_STATUS_EQUAL(status, NT_STATUS_NET_WRITE_FAULT)) {
printf("Close failed - %s\n", nt_errstr(status));
return False;
}
diff --git a/source4/torture/rpc/samr.c b/source4/torture/rpc/samr.c
new file mode 100644
index 0000000000..12d4ebbe93
--- /dev/null
+++ b/source4/torture/rpc/samr.c
@@ -0,0 +1,97 @@
+/*
+ Unix SMB/CIFS implementation.
+ test suite for samr rpc operations
+
+ Copyright (C) Andrew Tridgell 2003
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+
+
+static BOOL test_EnumDomains(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
+ struct policy_handle *handle)
+{
+ NTSTATUS status;
+ struct samr_EnumDomains r;
+ uint32 resume_handle = 0;
+ uint32 num_entries;
+
+ r.in.handle = handle;
+ r.in.resume_handle = &resume_handle;
+ r.in.buf_size = (uint32)-1;
+ r.out.resume_handle = &resume_handle;
+ r.out.num_entries = &num_entries;
+
+ status = dcerpc_samr_EnumDomains(p, mem_ctx, &r);
+ if (!NT_STATUS_IS_OK(status)) {
+ printf("EnumDomains failed - %s\n", nt_errstr(status));
+ return False;
+ }
+
+ NDR_PRINT_DEBUG(samr_SamArray, r.out.sam);
+
+ return True;
+}
+
+
+static BOOL test_Connect(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
+ struct policy_handle *handle)
+{
+ NTSTATUS status;
+ struct samr_Connect r;
+
+ r.in.system_name = 0;
+ r.in.access_mask = SEC_RIGHTS_MAXIMUM_ALLOWED;
+ r.out.handle = handle;
+
+ status = dcerpc_samr_Connect(p, mem_ctx, &r);
+ if (!NT_STATUS_IS_OK(status)) {
+ printf("Connect failed - %s\n", nt_errstr(status));
+ return False;
+ }
+
+ return True;
+}
+
+
+BOOL torture_rpc_samr(int dummy)
+{
+ NTSTATUS status;
+ struct dcerpc_pipe *p;
+ TALLOC_CTX *mem_ctx;
+ BOOL ret = True;
+ struct policy_handle handle;
+
+ mem_ctx = talloc_init("torture_rpc_samr");
+
+ status = torture_rpc_connection(&p, "samr");
+ if (!NT_STATUS_IS_OK(status)) {
+ return False;
+ }
+
+ if (!test_Connect(p, mem_ctx, &handle)) {
+ ret = False;
+ }
+
+ if (!test_EnumDomains(p, mem_ctx, &handle)) {
+ ret = False;
+ }
+
+ torture_rpc_close(p);
+
+ return ret;
+}
diff --git a/source4/torture/torture.c b/source4/torture/torture.c
index 532dafe065..facfb832ec 100644
--- a/source4/torture/torture.c
+++ b/source4/torture/torture.c
@@ -3988,6 +3988,7 @@ static struct {
{"RPC-ECHO", torture_rpc_echo, 0},
{"RPC-DFS", torture_rpc_dfs, 0},
{"RPC-SPOOLSS", torture_rpc_spoolss, 0},
+ {"RPC-SAMR", torture_rpc_samr, 0},
{NULL, NULL, 0}};