/************************/
/* Function 0x0b */
- NTSTATUS samr_ENUM_DOM_GROUPS();
+ NTSTATUS samr_EnumDomainGroups(
+ [in,ref] policy_handle *handle,
+ [in,out,ref] uint32 *resume_handle,
+ [in] uint32 max_size,
+ [out] samr_SamArray *sam,
+ [out,ref] uint32 num_entries
+ );
/************************/
/* Function 0x0c */
/************************/
/* Function 0x0d */
- NTSTATUS samr_ENUM_DOM_USERS();
+ NTSTATUS samr_EnumDomainUsers(
+ [in,ref] policy_handle *handle,
+ [in,out,ref] uint32 *resume_handle,
+ [in] uint32 acct_flags,
+ [in] uint32 max_size,
+ [out] samr_SamArray *sam,
+ [out,ref] uint32 num_entries
+ );
/************************/
/* Function 0x0e */
return NT_STATUS_OK;
}
-NTSTATUS ndr_push_samr_ENUM_DOM_GROUPS(struct ndr_push *ndr, struct samr_ENUM_DOM_GROUPS *r)
+NTSTATUS ndr_push_samr_EnumDomainGroups(struct ndr_push *ndr, struct samr_EnumDomainGroups *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_size));
return NT_STATUS_OK;
}
return NT_STATUS_OK;
}
-NTSTATUS ndr_push_samr_ENUM_DOM_USERS(struct ndr_push *ndr, struct samr_ENUM_DOM_USERS *r)
+NTSTATUS ndr_push_samr_EnumDomainUsers(struct ndr_push *ndr, struct samr_EnumDomainUsers *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.acct_flags));
+ NDR_CHECK(ndr_push_uint32(ndr, r->in.max_size));
return NT_STATUS_OK;
}
if (!(ndr_flags & NDR_SCALARS)) goto buffers;
NDR_CHECK(ndr_pull_align(ndr, 8));
NDR_CHECK(ndr_pull_HYPER_T(ndr, &r->sequence_num));
- NDR_CHECK(ndr_pull_NTTIME(ndr, &r->last_modify_time));
+ NDR_CHECK(ndr_pull_NTTIME(ndr, &r->last_xxx_time));
buffers:
if (!(ndr_flags & NDR_BUFFERS)) goto done;
done:
if (!(ndr_flags & NDR_SCALARS)) goto buffers;
NDR_CHECK(ndr_pull_align(ndr, 8));
NDR_CHECK(ndr_pull_HYPER_T(ndr, &r->sequence_num));
- NDR_CHECK(ndr_pull_NTTIME(ndr, &r->last_modify_time));
+ NDR_CHECK(ndr_pull_NTTIME(ndr, &r->last_xxx_time));
NDR_CHECK(ndr_pull_uint32(ndr, &r->foo7));
NDR_CHECK(ndr_pull_uint32(ndr, &r->foo8));
buffers:
NDR_CHECK(ndr_pull_samr_DomInfo9(ndr, NDR_SCALARS, &r->info9));
break; }
- case 10: {
- NDR_CHECK(ndr_pull_samr_DomInfo1(ndr, NDR_SCALARS, &r->info10));
- break; }
-
case 11: {
NDR_CHECK(ndr_pull_samr_DomInfo11(ndr, NDR_SCALARS, &r->info11));
break; }
NDR_CHECK(ndr_pull_samr_DomInfo9(ndr, NDR_BUFFERS, &r->info9));
break;
- case 10:
- NDR_CHECK(ndr_pull_samr_DomInfo1(ndr, NDR_BUFFERS, &r->info10));
- break;
-
case 11:
NDR_CHECK(ndr_pull_samr_DomInfo11(ndr, NDR_BUFFERS, &r->info11));
break;
return NT_STATUS_OK;
}
-NTSTATUS ndr_pull_samr_ENUM_DOM_GROUPS(struct ndr_pull *ndr, struct samr_ENUM_DOM_GROUPS *r)
+NTSTATUS ndr_pull_samr_EnumDomainGroups(struct ndr_pull *ndr, struct samr_EnumDomainGroups *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;
return NT_STATUS_OK;
}
-NTSTATUS ndr_pull_samr_ENUM_DOM_USERS(struct ndr_pull *ndr, struct samr_ENUM_DOM_USERS *r)
+NTSTATUS ndr_pull_samr_EnumDomainUsers(struct ndr_pull *ndr, struct samr_EnumDomainUsers *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;
ndr_print_struct(ndr, name, "samr_DomInfo8");
ndr->depth++;
ndr_print_HYPER_T(ndr, "sequence_num", r->sequence_num);
- ndr_print_NTTIME(ndr, "last_modify_time", r->last_modify_time);
+ ndr_print_NTTIME(ndr, "last_xxx_time", r->last_xxx_time);
ndr->depth--;
}
ndr_print_struct(ndr, name, "samr_DomInfo13");
ndr->depth++;
ndr_print_HYPER_T(ndr, "sequence_num", r->sequence_num);
- ndr_print_NTTIME(ndr, "last_modify_time", r->last_modify_time);
+ ndr_print_NTTIME(ndr, "last_xxx_time", r->last_xxx_time);
ndr_print_uint32(ndr, "foo7", r->foo7);
ndr_print_uint32(ndr, "foo8", r->foo8);
ndr->depth--;
ndr_print_samr_DomInfo9(ndr, "info9", &r->info9);
break;
- case 10:
- ndr_print_samr_DomInfo1(ndr, "info10", &r->info10);
- break;
-
case 11:
ndr_print_samr_DomInfo11(ndr, "info11", &r->info11);
break;
struct samr_DomInfo8 {
HYPER_T sequence_num;
- NTTIME last_modify_time;
+ NTTIME last_xxx_time;
};
struct samr_DomInfo9 {
struct samr_DomInfo13 {
HYPER_T sequence_num;
- NTTIME last_modify_time;
+ NTTIME last_xxx_time;
uint32 foo7;
uint32 foo8;
};
/* [case(7)] */ struct samr_DomInfo7 info7;
/* [case(8)] */ struct samr_DomInfo8 info8;
/* [case(9)] */ struct samr_DomInfo9 info9;
-/* [case(10)] */ struct samr_DomInfo1 info10;
/* [case(11)] */ struct samr_DomInfo11 info11;
/* [case(12)] */ struct samr_DomInfo12 info12;
/* [case(13)] */ struct samr_DomInfo13 info13;
};
-struct samr_ENUM_DOM_GROUPS {
+struct samr_EnumDomainGroups {
struct {
+ struct policy_handle *handle;
+ uint32 *resume_handle;
+ uint32 max_size;
} in;
struct {
+ uint32 *resume_handle;
+ struct samr_SamArray *sam;
+ uint32 num_entries;
NTSTATUS result;
} out;
};
-struct samr_ENUM_DOM_USERS {
+struct samr_EnumDomainUsers {
struct {
+ struct policy_handle *handle;
+ uint32 *resume_handle;
+ uint32 acct_flags;
+ uint32 max_size;
} in;
struct {
+ uint32 *resume_handle;
+ struct samr_SamArray *sam;
+ uint32 num_entries;
NTSTATUS result;
} out;
#define DCERPC_SAMR_QUERYDOMAININFO 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_ENUMDOMAINGROUPS 11
#define DCERPC_SAMR_CREATE_USER_IN_DOMAIN 12
-#define DCERPC_SAMR_ENUM_DOM_USERS 13
+#define DCERPC_SAMR_ENUMDOMAINUSERS 13
#define DCERPC_SAMR_CREATE_DOM_ALIAS 14
#define DCERPC_SAMR_ENUM_DOM_ALIASES 15
#define DCERPC_SAMR_GET_ALIAS_MEMBERSHIP 16
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 dcerpc_samr_EnumDomainGroups(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_EnumDomainGroups *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,
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_ENUMDOMAINGROUPS, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_EnumDomainGroups,
+ (ndr_pull_fn_t) ndr_pull_samr_EnumDomainGroups,
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 dcerpc_samr_EnumDomainUsers(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_EnumDomainUsers *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,
+ status = dcerpc_ndr_request(p, DCERPC_SAMR_ENUMDOMAINUSERS, mem_ctx,
+ (ndr_push_fn_t) ndr_push_samr_EnumDomainUsers,
+ (ndr_pull_fn_t) ndr_pull_samr_EnumDomainUsers,
r);
if (!NT_STATUS_IS_OK(status)) {
return status;
#include "includes.h"
+static BOOL test_EnumDomainUsers(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
+ struct policy_handle *handle)
+{
+ NTSTATUS status;
+ struct samr_EnumDomainUsers r;
+ uint32 resume_handle=0;
+
+ printf("Testing EnumDomainUsers\n");
+
+ r.in.handle = handle;
+ r.in.resume_handle = &resume_handle;
+ r.in.acct_flags = 0;
+ r.in.max_size = (uint32)-1;
+ r.out.resume_handle = &resume_handle;
+
+ status = dcerpc_samr_EnumDomainUsers(p, mem_ctx, &r);
+ if (!NT_STATUS_IS_OK(status)) {
+ printf("EnumDomainUsers failed - %s\n", nt_errstr(status));
+ return False;
+ }
+
+ NDR_PRINT_DEBUG(samr_SamArray, r.out.sam);
+
+ return True;
+}
+
+static BOOL test_EnumDomainGroups(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
+ struct policy_handle *handle)
+{
+ NTSTATUS status;
+ struct samr_EnumDomainGroups r;
+ uint32 resume_handle=0;
+
+ printf("Testing EnumDomainGroups\n");
+
+ r.in.handle = handle;
+ r.in.resume_handle = &resume_handle;
+ r.in.max_size = (uint32)-1;
+ r.out.resume_handle = &resume_handle;
+
+ status = dcerpc_samr_EnumDomainGroups(p, mem_ctx, &r);
+ if (!NT_STATUS_IS_OK(status)) {
+ printf("EnumDomainGroups failed - %s\n", nt_errstr(status));
+ return False;
+ }
+
+ NDR_PRINT_DEBUG(samr_SamArray, r.out.sam);
+
+ return True;
+}
+
static BOOL test_QueryDomainInfo(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
struct policy_handle *handle)
{
return False;
}
+ if (!test_EnumDomainGroups(p, mem_ctx, &domain_handle)) {
+ return False;
+ }
+
+ if (!test_EnumDomainUsers(p, mem_ctx, &domain_handle)) {
+ return False;
+ }
+
return True;
}