summaryrefslogtreecommitdiff
path: root/source3/rpc_parse
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2003-02-10 11:31:23 +0000
committerAndrew Tridgell <tridge@samba.org>2003-02-10 11:31:23 +0000
commit6c66e42d2ccf025f57e652f7ae689f8a3c2ada59 (patch)
tree56c892e5817256759b9470f7186fbb74c6601430 /source3/rpc_parse
parentbaff308f169dc90449f55d207627135a44d14bbd (diff)
downloadsamba-6c66e42d2ccf025f57e652f7ae689f8a3c2ada59.tar.gz
samba-6c66e42d2ccf025f57e652f7ae689f8a3c2ada59.tar.bz2
samba-6c66e42d2ccf025f57e652f7ae689f8a3c2ada59.zip
added the 'lsaenumacctwithright' command to rpcclient. This allows you
to lookup what SIDs have a particular privilege (that is how privileges are stored). (This used to be commit 3ddb5fb0dd33992b7db54a661752551a3fefc0b4)
Diffstat (limited to 'source3/rpc_parse')
-rw-r--r--source3/rpc_parse/parse_lsa.c68
-rw-r--r--source3/rpc_parse/parse_misc.c45
2 files changed, 111 insertions, 2 deletions
diff --git a/source3/rpc_parse/parse_lsa.c b/source3/rpc_parse/parse_lsa.c
index a3ffe86af3..6832b0df66 100644
--- a/source3/rpc_parse/parse_lsa.c
+++ b/source3/rpc_parse/parse_lsa.c
@@ -2395,7 +2395,6 @@ void init_q_remove_acct_rights(LSA_Q_REMOVE_ACCT_RIGHTS *q_q,
init_dom_sid2(&q_q->sid, sid);
q_q->removeall = removeall;
init_unistr2_array(&q_q->rights, count, rights);
- q_q->count = 5;
}
@@ -2426,7 +2425,7 @@ BOOL lsa_io_q_remove_acct_rights(const char *desc, LSA_Q_REMOVE_ACCT_RIGHTS *q_q
}
/*******************************************************************
-reads or writes a LSA_R_ENUM_ACCT_RIGHTS structure.
+reads or writes a LSA_R_REMOVE_ACCT_RIGHTS structure.
********************************************************************/
BOOL lsa_io_r_remove_acct_rights(const char *desc, LSA_R_REMOVE_ACCT_RIGHTS *r_c, prs_struct *ps, int depth)
{
@@ -2446,3 +2445,68 @@ void init_r_remove_acct_rights(LSA_R_REMOVE_ACCT_RIGHTS *q_r)
{
DEBUG(5, ("init_r_remove_acct_rights\n"));
}
+
+/*******************************************************************
+ Inits an LSA_Q_ENUM_ACCT_WITH_RIGHT structure.
+********************************************************************/
+void init_q_enum_acct_with_right(LSA_Q_ENUM_ACCT_WITH_RIGHT *q_q,
+ POLICY_HND *hnd,
+ const char *right)
+{
+ DEBUG(5, ("init_q_enum_acct_with_right\n"));
+
+ q_q->pol = *hnd;
+ init_unistr2(&q_q->right, right, strlen(right));
+ init_str_hdr(&q_q->right_hdr,
+ q_q->right.uni_max_len*2,
+ q_q->right.uni_max_len*2, right?1:0);
+}
+
+
+/*******************************************************************
+reads or writes a LSA_Q_ENUM_ACCT_WITH_RIGHT structure.
+********************************************************************/
+BOOL lsa_io_q_enum_acct_with_right(const char *desc, LSA_Q_ENUM_ACCT_WITH_RIGHT *q_q, prs_struct *ps, int depth)
+{
+ prs_debug(ps, depth, desc, "lsa_io_q_enum_acct_with_right");
+ depth++;
+
+ if (!smb_io_pol_hnd("", &q_q->pol, ps, depth))
+ return False;
+
+ if (!prs_uint32("ref_id ", ps, depth, &q_q->right_hdr.buffer))
+ return False;
+
+ if (UNMARSHALLING(ps) && q_q->right_hdr.buffer == 0) {
+ return True;
+ }
+
+ if (!smb_io_strhdr("", &q_q->right_hdr, ps, depth))
+ return False;
+
+ if (!smb_io_unistr2("", &q_q->right, q_q->right_hdr.buffer, ps, depth))
+ return False;
+
+ return True;
+}
+
+
+/*******************************************************************
+reads or writes a LSA_R_ENUM_ACCT_WITH_RIGHT structure.
+********************************************************************/
+BOOL lsa_io_r_enum_acct_with_right(const char *desc, LSA_R_ENUM_ACCT_WITH_RIGHT *r_c, prs_struct *ps, int depth)
+{
+ prs_debug(ps, depth, desc, "lsa_io_r_enum_acct_with_right");
+ depth++;
+
+ if (!prs_uint32("count ", ps, depth, &r_c->count))
+ return False;
+
+ if (!smb_io_sid_array("sids ", &r_c->sids, ps, depth))
+ return False;
+
+ if(!prs_ntstatus("status", ps, depth, &r_c->status))
+ return False;
+
+ return True;
+}
diff --git a/source3/rpc_parse/parse_misc.c b/source3/rpc_parse/parse_misc.c
index 43d26a691d..403a12ee53 100644
--- a/source3/rpc_parse/parse_misc.c
+++ b/source3/rpc_parse/parse_misc.c
@@ -1123,6 +1123,51 @@ BOOL smb_io_unistr2_array(const char *desc, UNISTR2_ARRAY *array, prs_struct *ps
/*******************************************************************
+ 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;
+}
+
+
+/*******************************************************************
Inits a DOM_RID2 structure.
********************************************************************/