summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2003-12-19 23:44:26 +0000
committerAndrew Tridgell <tridge@samba.org>2003-12-19 23:44:26 +0000
commit77fb98ac7c38a19c1e810495119f6f5541838d32 (patch)
treeb1c4da73fa40e299d70d604d3df597fef53a5f68
parenta8400ce61093a4a2e44cfc57766ff0f727c1fc6c (diff)
downloadsamba-77fb98ac7c38a19c1e810495119f6f5541838d32.tar.gz
samba-77fb98ac7c38a19c1e810495119f6f5541838d32.tar.bz2
samba-77fb98ac7c38a19c1e810495119f6f5541838d32.zip
addition of samr_SetSecurity() from kai
we needed to adjust the alignment of [relative] buffers for this to work. I wonder if they are always 4 byte aligned? (This used to be commit 9cd0a0b8b976e62c6da71b7e55cba5b38483620d)
-rw-r--r--source4/librpc/idl/misc.idl2
-rw-r--r--source4/librpc/idl/samr.idl13
-rw-r--r--source4/librpc/ndr/ndr.c2
-rw-r--r--source4/torture/rpc/samr.c17
4 files changed, 29 insertions, 5 deletions
diff --git a/source4/librpc/idl/misc.idl b/source4/librpc/idl/misc.idl
index 7b41f45980..fca8fe876e 100644
--- a/source4/librpc/idl/misc.idl
+++ b/source4/librpc/idl/misc.idl
@@ -28,6 +28,7 @@ interface misc
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
@@ -44,6 +45,7 @@ interface misc
typedef [public] struct {
uint16 revision;
+ [value(ndr_size_security_acl(r))] uint16 size;
uint32 num_aces;
security_ace aces[num_aces];
} security_acl;
diff --git a/source4/librpc/idl/samr.idl b/source4/librpc/idl/samr.idl
index bbf1e40086..1226d1f770 100644
--- a/source4/librpc/idl/samr.idl
+++ b/source4/librpc/idl/samr.idl
@@ -31,16 +31,21 @@
/******************/
/* 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,
diff --git a/source4/librpc/ndr/ndr.c b/source4/librpc/ndr/ndr.c
index a1e5fe538f..2af63c7676 100644
--- a/source4/librpc/ndr/ndr.c
+++ b/source4/librpc/ndr/ndr.c
@@ -708,7 +708,7 @@ NTSTATUS ndr_push_relative(struct ndr_push *ndr, int ndr_flags, const void *p,
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));
diff --git a/source4/torture/rpc/samr.c b/source4/torture/rpc/samr.c
index e5e4493480..f77b7ebde4 100644
--- a/source4/torture/rpc/samr.c
+++ b/source4/torture/rpc/samr.c
@@ -63,6 +63,7 @@ static BOOL test_QuerySecurity(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
{
NTSTATUS status;
struct samr_QuerySecurity r;
+ struct samr_SetSecurity s;
r.in.handle = handle;
r.in.sec_info = 7;
@@ -73,6 +74,22 @@ static BOOL test_QuerySecurity(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
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;
}