summaryrefslogtreecommitdiff
path: root/source3/rpc_parse
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2003-02-11 21:55:48 +0000
committerAndrew Tridgell <tridge@samba.org>2003-02-11 21:55:48 +0000
commit8ddccd47c733abe6118c6f6f8d011bfc508396c1 (patch)
tree3a2fbee7400339f5cb84bcb0d6517bb2f90ae236 /source3/rpc_parse
parent2d220ef00d1f2bae676a4201fb483a5ee3d0ae15 (diff)
downloadsamba-8ddccd47c733abe6118c6f6f8d011bfc508396c1.tar.gz
samba-8ddccd47c733abe6118c6f6f8d011bfc508396c1.tar.bz2
samba-8ddccd47c733abe6118c6f6f8d011bfc508396c1.zip
added server stubs for lsa_enum_acct_with_right
(This used to be commit aa2abacaf48924797b6803786c14c9f303185e4a)
Diffstat (limited to 'source3/rpc_parse')
-rw-r--r--source3/rpc_parse/parse_lsa.c13
-rw-r--r--source3/rpc_parse/parse_misc.c73
2 files changed, 86 insertions, 0 deletions
diff --git a/source3/rpc_parse/parse_lsa.c b/source3/rpc_parse/parse_lsa.c
index 6832b0df66..53a0fc958d 100644
--- a/source3/rpc_parse/parse_lsa.c
+++ b/source3/rpc_parse/parse_lsa.c
@@ -2510,3 +2510,16 @@ BOOL lsa_io_r_enum_acct_with_right(const char *desc, LSA_R_ENUM_ACCT_WITH_RIGHT
return True;
}
+
+/*******************************************************************
+ Inits an LSA_R_ENUM_ACCT_WITH_RIGHT structure.
+********************************************************************/
+void init_r_enum_acct_with_right(LSA_R_ENUM_ACCT_WITH_RIGHT *r_c,
+ uint32 count,
+ DOM_SID *sids)
+{
+ DEBUG(5, ("init_r_enum_acct_with_right\n"));
+
+ r_c->count = count;
+ init_sid_array(&r_c->sids, count, sids);
+}
diff --git a/source3/rpc_parse/parse_misc.c b/source3/rpc_parse/parse_misc.c
index 403a12ee53..524b1ed61c 100644
--- a/source3/rpc_parse/parse_misc.c
+++ b/source3/rpc_parse/parse_misc.c
@@ -1122,6 +1122,79 @@ BOOL smb_io_unistr2_array(const char *desc, UNISTR2_ARRAY *array, prs_struct *ps
}
+/*
+ initialise a SID_ARRAY from a list of sids
+*/
+BOOL init_sid_array(SID_ARRAY *array,
+ uint32 count, DOM_SID *sids)
+{
+ int i;
+
+ array->count = count;
+ array->ref_id = count?1:0;
+ if (array->count == 0) {
+ return True;
+ }
+
+ array->sids = (SID_ARRAY_EL *)talloc_zero(get_talloc_ctx(), count * sizeof(SID_ARRAY_EL));
+ if (!array->sids) {
+ return False;
+ }
+
+ for (i=0;i<count;i++) {
+ array->sids[i].ref_id = 1;
+ init_dom_sid2(&array->sids[i].sid, &sids[i]);
+ }
+
+ return True;
+}
+
+
+/*******************************************************************
+ Reads or writes a SID_ARRAY structure.
+********************************************************************/
+BOOL smb_io_sid_array(const char *desc, SID_ARRAY *array, prs_struct *ps, int depth)
+{
+ int i;
+
+ prs_debug(ps, depth, desc, "smb_io_sid_array");
+ depth++;
+
+ if(!prs_uint32("ref_id", ps, depth, &array->ref_id))
+ return False;
+
+ if (! array->ref_id) {
+ return True;
+ }
+
+ if(!prs_uint32("count", ps, depth, &array->count))
+ return False;
+
+ if (array->count == 0) {
+ return True;
+ }
+
+ if (UNMARSHALLING(ps)) {
+ array->sids = talloc_zero(get_talloc_ctx(), array->count * sizeof(array->sids[0]));
+ }
+ if (! array->sids) {
+ return False;
+ }
+
+ for (i=0;i<array->count;i++) {
+ if(!prs_uint32("ref_id", ps, depth, &array->sids[i].ref_id))
+ return False;
+ }
+
+ for (i=0;i<array->count;i++) {
+ if (!smb_io_dom_sid2("sid", &array->sids[i].sid, ps, depth))
+ return False;
+ }
+
+ return True;
+}
+
+
/*******************************************************************
Reads or writes a SID_ARRAY structure.
********************************************************************/