]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
Added cli_samr_query_aliasmem() and cli_samr_open_alias() functions.
authorTim Potter <tpot@samba.org>
Fri, 4 May 2001 07:27:52 +0000 (07:27 +0000)
committerTim Potter <tpot@samba.org>
Fri, 4 May 2001 07:27:52 +0000 (07:27 +0000)
source/libsmb/cli_samr.c

index 0536780444fc5830a9e9d7c79020bea8aeb15c64..985a0a1ecb1bdb24de66bffa06b9659ba5f0eaad 100644 (file)
@@ -640,3 +640,110 @@ uint32 cli_samr_enum_dom_groups(struct cli_state *cli, TALLOC_CTX *mem_ctx,
 
        return result;
 }
+
+/* Query alias members */
+
+uint32 cli_samr_query_aliasmem(struct cli_state *cli, TALLOC_CTX *mem_ctx,
+                              POLICY_HND *alias_pol, uint32 *num_mem, 
+                              DOM_SID **sids)
+{
+       prs_struct qbuf, rbuf;
+       SAMR_Q_QUERY_ALIASMEM q;
+       SAMR_R_QUERY_ALIASMEM r;
+       uint32 result = NT_STATUS_UNSUCCESSFUL, i;
+
+       ZERO_STRUCT(q);
+       ZERO_STRUCT(r);
+
+       /* Initialise parse structures */
+
+       prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
+       prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
+
+       /* Marshall data and send request */
+
+       init_samr_q_query_aliasmem(&q, alias_pol);
+
+       if (!samr_io_q_query_aliasmem("", &q, &qbuf, 0) ||
+           !rpc_api_pipe_req(cli, SAMR_QUERY_ALIASMEM, &qbuf, &rbuf)) {
+               goto done;
+       }
+
+       /* Unmarshall response */
+
+       if (!samr_io_r_query_aliasmem("", &r, &rbuf, 0)) {
+               goto done;
+       }
+
+       /* Return output parameters */
+
+       if ((result = r.status) != NT_STATUS_NOPROBLEMO) {
+               goto done;
+       }
+
+       *num_mem = r.num_sids;
+
+       if (!(*sids = talloc(mem_ctx, sizeof(DOM_SID) * *num_mem))) {
+               result = NT_STATUS_UNSUCCESSFUL;
+               goto done;
+       }
+
+       for (i = 0; i < *num_mem; i++) {
+               (*sids)[i] = r.sid[i].sid;
+       }
+
+ done:
+       prs_mem_free(&qbuf);
+       prs_mem_free(&rbuf);
+
+       return result;
+}
+
+/* Open handle on an alias */
+
+uint32 cli_samr_open_alias(struct cli_state *cli, TALLOC_CTX *mem_ctx, 
+                          POLICY_HND *domain_pol, uint32 access_mask, 
+                          uint32 alias_rid, POLICY_HND *alias_pol)
+{
+       prs_struct qbuf, rbuf;
+       SAMR_Q_OPEN_ALIAS q;
+       SAMR_R_OPEN_ALIAS r;
+       uint32 result;
+
+       ZERO_STRUCT(q);
+       ZERO_STRUCT(r);
+
+       /* Initialise parse structures */
+
+       prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
+       prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
+
+       /* Marshall data and send request */
+
+       init_samr_q_open_alias(&q, domain_pol, access_mask, alias_rid);
+
+       if (!samr_io_q_open_alias("", &q, &qbuf, 0) ||
+           !rpc_api_pipe_req(cli, SAMR_OPEN_ALIAS, &qbuf, &rbuf)) {
+               result = NT_STATUS_UNSUCCESSFUL;
+               goto done;
+       }
+
+       /* Unmarshall response */
+
+       if (!samr_io_r_open_alias("", &r, &rbuf, 0)) {
+               result = NT_STATUS_UNSUCCESSFUL;
+               goto done;
+       }
+
+       /* Return output parameters */
+
+       if ((result = r.status) == NT_STATUS_NOPROBLEMO) {
+               *alias_pol = r.pol;
+       }
+
+ done:
+       prs_mem_free(&qbuf);
+       prs_mem_free(&rbuf);
+
+       return result;
+}