typedef [public] struct {
uint8 type; /* xxxx_xxxx_ACE_TYPE - e.g allowed / denied etc */
uint8 flags; /* xxxx_INHERIT_xxxx - e.g OBJECT_INHERIT_ACE */
+ [value(ndr_size_security_ace(r))] uint16 size;
uint32 access_mask;
#if 0
typedef [public] struct {
uint16 revision;
+ [value(ndr_size_security_acl(r))] uint16 size;
uint32 num_aces;
security_ace aces[num_aces];
} security_acl;
/******************/
/* Function: 0x02 */
- NTSTATUS samr_SetSecurity ();
-
- /******************/
- /* Function: 0x03 */
typedef struct {
[value(ndr_size_security_descriptor(r->sd))] uint32 sd_size;
[subcontext(4)] security_descriptor *sd;
} samr_SdBuf;
+ NTSTATUS samr_SetSecurity (
+ [in,ref] policy_handle *handle,
+ [in] uint32 sec_info,
+ [in,ref] samr_SdBuf *sdbuf
+ );
+
+ /******************/
+ /* Function: 0x03 */
+
NTSTATUS samr_QuerySecurity (
[in,ref] policy_handle *handle,
[in] uint32 sec_info,
if (ndr->relative_list == NULL) {
ndr->relative_list_end = NULL;
}
- NDR_CHECK(ndr_push_align(ndr, 8));
+ NDR_CHECK(ndr_push_align(ndr, 4));
ndr_push_save(ndr, &save);
ndr->offset = ofs->offset;
NDR_CHECK(ndr_push_uint32(ndr, save.offset - ndr->ofs_list->offset));
{
NTSTATUS status;
struct samr_QuerySecurity r;
+ struct samr_SetSecurity s;
r.in.handle = handle;
r.in.sec_info = 7;
return False;
}
+ s.in.handle = handle;
+ s.in.sec_info = 7;
+ s.in.sdbuf = r.out.sdbuf;
+
+ status = dcerpc_samr_SetSecurity(p, mem_ctx, &s);
+ if (!NT_STATUS_IS_OK(status)) {
+ printf("SetSecurity failed - %s\n", nt_errstr(status));
+ return False;
+ }
+
+ status = dcerpc_samr_QuerySecurity(p, mem_ctx, &r);
+ if (!NT_STATUS_IS_OK(status)) {
+ printf("QuerySecurity failed - %s\n", nt_errstr(status));
+ return False;
+ }
+
return True;
}