[SCM] Samba Shared Repository - branch v3-2-test updated -
initial-v3-2-test-1980-g232a505
Günther Deschner
gd at samba.org
Thu Feb 7 13:32:23 GMT 2008
The branch, v3-2-test has been updated
via 232a505535de04121a631b3bb24a2700df07ee1e (commit)
via d1c669920e88e7fecd13101c4ddfe45354c5ecdb (commit)
via 3a3feb376116b4ebc5be7b149c187b49bc6b390d (commit)
from cfaf47883d7135d66d5d40c7d474b8dbf60eb64d (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test
- Log -----------------------------------------------------------------
commit 232a505535de04121a631b3bb24a2700df07ee1e
Author: Günther Deschner <gd at samba.org>
Date: Wed Feb 6 16:22:48 2008 +0100
Remove unused marshalling for SAMR_QUERY_USERGROUPS.
Guenther
commit d1c669920e88e7fecd13101c4ddfe45354c5ecdb
Author: Günther Deschner <gd at samba.org>
Date: Wed Feb 6 16:19:20 2008 +0100
Use rpccli_samr_GetGroupsForUser() all over the place.
Guenther
commit 3a3feb376116b4ebc5be7b149c187b49bc6b390d
Author: Günther Deschner <gd at samba.org>
Date: Wed Feb 6 16:06:04 2008 +0100
Use pidl for _samr_GetGroupsForUser().
Guenther
-----------------------------------------------------------------------
Summary of changes:
source/include/rpc_samr.h | 21 ------
source/rpc_client/cli_samr.c | 39 -----------
source/rpc_parse/parse_samr.c | 138 ---------------------------------------
source/rpc_server/srv_samr.c | 23 +------
source/rpc_server/srv_samr_nt.c | 61 +++++++++---------
source/rpcclient/cmd_samr.c | 19 +++---
source/utils/net_rpc.c | 11 ++-
source/winbindd/winbindd_rpc.c | 12 ++--
8 files changed, 56 insertions(+), 268 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source/include/rpc_samr.h b/source/include/rpc_samr.h
index 37a457e..5919bc7 100644
--- a/source/include/rpc_samr.h
+++ b/source/include/rpc_samr.h
@@ -798,27 +798,6 @@ typedef struct r_samr_get_dispenum_index
/********************************************************/
/********************************************************/
-/* SAMR_Q_QUERY_USERGROUPS - */
-typedef struct q_samr_query_usergroup_info
-{
- POLICY_HND pol; /* policy handle associated with unknown id */
-
-} SAMR_Q_QUERY_USERGROUPS;
-
-/* SAMR_R_QUERY_USERGROUPS - probably a get sam info */
-typedef struct r_samr_query_usergroup_info
-{
- uint32 ptr_0; /* pointer */
- uint32 num_entries; /* number of RID groups */
- uint32 ptr_1; /* pointer */
- uint32 num_entries2; /* number of RID groups */
-
- DOM_GID *gid; /* group info */
-
- NTSTATUS status; /* return status */
-
-} SAMR_R_QUERY_USERGROUPS;
-
/* SAM_USERINFO_CTR - sam user info */
typedef struct sam_userinfo_ctr_info
{
diff --git a/source/rpc_client/cli_samr.c b/source/rpc_client/cli_samr.c
index eb37d6e..858bfc3 100644
--- a/source/rpc_client/cli_samr.c
+++ b/source/rpc_client/cli_samr.c
@@ -64,45 +64,6 @@ NTSTATUS rpccli_samr_query_userinfo(struct rpc_pipe_client *cli,
return result;
}
-/* Query user groups */
-
-NTSTATUS rpccli_samr_query_usergroups(struct rpc_pipe_client *cli,
- TALLOC_CTX *mem_ctx,
- POLICY_HND *user_pol,
- uint32 *num_groups,
- DOM_GID **gid)
-{
- prs_struct qbuf, rbuf;
- SAMR_Q_QUERY_USERGROUPS q;
- SAMR_R_QUERY_USERGROUPS r;
- NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-
- DEBUG(10,("cli_samr_query_usergroups\n"));
-
- ZERO_STRUCT(q);
- ZERO_STRUCT(r);
-
- /* Marshall data and send request */
-
- init_samr_q_query_usergroups(&q, user_pol);
-
- CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_QUERY_USERGROUPS,
- q, r,
- qbuf, rbuf,
- samr_io_q_query_usergroups,
- samr_io_r_query_usergroups,
- NT_STATUS_UNSUCCESSFUL);
-
- /* Return output parameters */
-
- if (NT_STATUS_IS_OK(result = r.status)) {
- *num_groups = r.num_entries;
- *gid = r.gid;
- }
-
- return result;
-}
-
/**
* Enumerate domain users
*
diff --git a/source/rpc_parse/parse_samr.c b/source/rpc_parse/parse_samr.c
index 329b754..3c1fb9b 100644
--- a/source/rpc_parse/parse_samr.c
+++ b/source/rpc_parse/parse_samr.c
@@ -1329,144 +1329,6 @@ void init_samr_group_info5(struct samr_GroupInfoAll *r,
}
/*******************************************************************
-inits a SAMR_Q_QUERY_USERGROUPS structure.
-********************************************************************/
-
-void init_samr_q_query_usergroups(SAMR_Q_QUERY_USERGROUPS * q_u,
- POLICY_HND *hnd)
-{
- DEBUG(5, ("init_samr_q_query_usergroups\n"));
-
- q_u->pol = *hnd;
-}
-
-/*******************************************************************
-reads or writes a structure.
-********************************************************************/
-
-bool samr_io_q_query_usergroups(const char *desc, SAMR_Q_QUERY_USERGROUPS * q_u,
- prs_struct *ps, int depth)
-{
- if (q_u == NULL)
- return False;
-
- prs_debug(ps, depth, desc, "samr_io_q_query_usergroups");
- depth++;
-
- if(!prs_align(ps))
- return False;
-
- if(!smb_io_pol_hnd("pol", &q_u->pol, ps, depth))
- return False;
-
- return True;
-}
-
-/*******************************************************************
-inits a SAMR_R_QUERY_USERGROUPS structure.
-********************************************************************/
-
-void init_samr_r_query_usergroups(SAMR_R_QUERY_USERGROUPS * r_u,
- uint32 num_gids, DOM_GID * gid,
- NTSTATUS status)
-{
- DEBUG(5, ("init_samr_r_query_usergroups\n"));
-
- if (NT_STATUS_IS_OK(status)) {
- r_u->ptr_0 = 1;
- r_u->num_entries = num_gids;
- r_u->ptr_1 = (num_gids != 0) ? 1 : 0;
- r_u->num_entries2 = num_gids;
-
- r_u->gid = gid;
- } else {
- r_u->ptr_0 = 0;
- r_u->num_entries = 0;
- r_u->ptr_1 = 0;
- r_u->gid = NULL;
- }
-
- r_u->status = status;
-}
-
-/*******************************************************************
-reads or writes a structure.
-********************************************************************/
-
-bool samr_io_gids(const char *desc, uint32 *num_gids, DOM_GID ** gid,
- prs_struct *ps, int depth)
-{
- uint32 i;
- if (gid == NULL)
- return False;
-
- prs_debug(ps, depth, desc, "samr_io_gids");
- depth++;
-
- if(!prs_align(ps))
- return False;
-
- if(!prs_uint32("num_gids", ps, depth, num_gids))
- return False;
-
- if ((*num_gids) != 0) {
- if (UNMARSHALLING(ps)) {
- (*gid) = PRS_ALLOC_MEM(ps,DOM_GID,*num_gids);
- }
-
- if ((*gid) == NULL) {
- return False;
- }
-
- for (i = 0; i < (*num_gids); i++) {
- if(!smb_io_gid("gids", &(*gid)[i], ps, depth))
- return False;
- }
- }
-
- return True;
-}
-
-/*******************************************************************
-reads or writes a structure.
-********************************************************************/
-
-bool samr_io_r_query_usergroups(const char *desc, SAMR_R_QUERY_USERGROUPS * r_u,
- prs_struct *ps, int depth)
-{
- if (r_u == NULL)
- return False;
-
- prs_debug(ps, depth, desc, "samr_io_r_query_usergroups");
- depth++;
-
- if(!prs_align(ps))
- return False;
-
- if(!prs_uint32("ptr_0 ", ps, depth, &r_u->ptr_0))
- return False;
-
- if (r_u->ptr_0 != 0) {
- if(!prs_uint32("num_entries ", ps, depth, &r_u->num_entries))
- return False;
- if(!prs_uint32("ptr_1 ", ps, depth, &r_u->ptr_1))
- return False;
-
- if (r_u->num_entries != 0 && r_u->ptr_1 != 0) {
- if(!samr_io_gids("gids", &r_u->num_entries2, &r_u->gid, ps, depth))
- return False;
- }
- }
-
- if(!prs_align(ps))
- return False;
- if(!prs_ntstatus("status", ps, depth, &r_u->status))
- return False;
-
- return True;
-}
-
-/*******************************************************************
inits a SAMR_Q_ENUM_DOMAINS structure.
********************************************************************/
diff --git a/source/rpc_server/srv_samr.c b/source/rpc_server/srv_samr.c
index d5666e7..e3ac2e4 100644
--- a/source/rpc_server/srv_samr.c
+++ b/source/rpc_server/srv_samr.c
@@ -349,28 +349,7 @@ static bool api_samr_query_userinfo(pipes_struct *p)
static bool api_samr_query_usergroups(pipes_struct *p)
{
- SAMR_Q_QUERY_USERGROUPS q_u;
- SAMR_R_QUERY_USERGROUPS r_u;
- prs_struct *data = &p->in_data.data;
- prs_struct *rdata = &p->out_data.rdata;
-
- ZERO_STRUCT(q_u);
- ZERO_STRUCT(r_u);
-
- if(!samr_io_q_query_usergroups("", &q_u, data, 0)) {
- DEBUG(0,("api_samr_query_usergroups: unable to unmarshall SAMR_Q_QUERY_USERGROUPS.\n"));
- return False;
- }
-
- r_u.status = _samr_query_usergroups(p, &q_u, &r_u);
-
- /* store the response in the SMB stream */
- if(!samr_io_r_query_usergroups("", &r_u, rdata, 0)) {
- DEBUG(0,("api_samr_query_usergroups: unable to marshall SAMR_R_QUERY_USERGROUPS.\n"));
- return False;
- }
-
- return True;
+ return proxy_samr_call(p, NDR_SAMR_GETGROUPSFORUSER);
}
/*******************************************************************
diff --git a/source/rpc_server/srv_samr_nt.c b/source/rpc_server/srv_samr_nt.c
index 5081565..36860f9 100644
--- a/source/rpc_server/srv_samr_nt.c
+++ b/source/rpc_server/srv_samr_nt.c
@@ -2184,16 +2184,17 @@ NTSTATUS _samr_query_userinfo(pipes_struct *p, SAMR_Q_QUERY_USERINFO *q_u, SAMR_
}
/*******************************************************************
- samr_reply_query_usergroups
+ _samr_GetGroupsForUser
********************************************************************/
-NTSTATUS _samr_query_usergroups(pipes_struct *p, SAMR_Q_QUERY_USERGROUPS *q_u, SAMR_R_QUERY_USERGROUPS *r_u)
+NTSTATUS _samr_GetGroupsForUser(pipes_struct *p,
+ struct samr_GetGroupsForUser *r)
{
struct samu *sam_pass=NULL;
DOM_SID sid;
DOM_SID *sids;
- DOM_GID dom_gid;
- DOM_GID *gids = NULL;
+ struct samr_RidWithAttribute dom_gid;
+ struct samr_RidWithAttribute *gids = NULL;
uint32 primary_group_rid;
size_t num_groups = 0;
gid_t *unix_gids;
@@ -2203,6 +2204,8 @@ NTSTATUS _samr_query_usergroups(pipes_struct *p, SAMR_Q_QUERY_USERGROUPS *q_u, S
NTSTATUS result;
bool success = False;
+ struct samr_RidWithAttributeArray *rids = NULL;
+
/*
* from the SID in the request:
* we should send back the list of DOMAIN GROUPS
@@ -2215,16 +2218,22 @@ NTSTATUS _samr_query_usergroups(pipes_struct *p, SAMR_Q_QUERY_USERGROUPS *q_u, S
* JFM, 12/2/2001
*/
- r_u->status = NT_STATUS_OK;
+ DEBUG(5,("_samr_GetGroupsForUser: %d\n", __LINE__));
- DEBUG(5,("_samr_query_usergroups: %d\n", __LINE__));
+ rids = TALLOC_ZERO_P(p->mem_ctx, struct samr_RidWithAttributeArray);
+ if (!rids) {
+ return NT_STATUS_NO_MEMORY;
+ }
/* find the policy handle. open a policy on it. */
- if (!get_lsa_policy_samr_sid(p, &q_u->pol, &sid, &acc_granted, NULL))
+ if (!get_lsa_policy_samr_sid(p, r->in.user_handle, &sid, &acc_granted, NULL))
return NT_STATUS_INVALID_HANDLE;
- if (!NT_STATUS_IS_OK(r_u->status = access_check_samr_function(acc_granted, SA_RIGHT_USER_GET_GROUPS, "_samr_query_usergroups"))) {
- return r_u->status;
+ result = access_check_samr_function(acc_granted,
+ SA_RIGHT_USER_GET_GROUPS,
+ "_samr_GetGroupsForUser");
+ if (!NT_STATUS_IS_OK(result)) {
+ return result;
}
if (!sid_check_is_in_our_domain(&sid))
@@ -2274,36 +2283,38 @@ NTSTATUS _samr_query_usergroups(pipes_struct *p, SAMR_Q_QUERY_USERGROUPS *q_u, S
gids = NULL;
num_gids = 0;
- dom_gid.attr = (SE_GROUP_MANDATORY|SE_GROUP_ENABLED_BY_DEFAULT|
- SE_GROUP_ENABLED);
- dom_gid.g_rid = primary_group_rid;
- ADD_TO_ARRAY(p->mem_ctx, DOM_GID, dom_gid, &gids, &num_gids);
+ dom_gid.attributes = (SE_GROUP_MANDATORY|SE_GROUP_ENABLED_BY_DEFAULT|
+ SE_GROUP_ENABLED);
+ dom_gid.rid = primary_group_rid;
+ ADD_TO_ARRAY(p->mem_ctx, struct samr_RidWithAttribute, dom_gid, &gids, &num_gids);
for (i=0; i<num_groups; i++) {
if (!sid_peek_check_rid(get_global_sam_sid(),
- &(sids[i]), &dom_gid.g_rid)) {
+ &(sids[i]), &dom_gid.rid)) {
DEBUG(10, ("Found sid %s not in our domain\n",
sid_string_dbg(&sids[i])));
continue;
}
- if (dom_gid.g_rid == primary_group_rid) {
+ if (dom_gid.rid == primary_group_rid) {
/* We added the primary group directly from the
* sam_account. The other SIDs are unique from
* enum_group_memberships */
continue;
}
- ADD_TO_ARRAY(p->mem_ctx, DOM_GID, dom_gid, &gids, &num_gids);
+ ADD_TO_ARRAY(p->mem_ctx, struct samr_RidWithAttribute, dom_gid, &gids, &num_gids);
}
- /* construct the response. lkclXXXX: gids are not copied! */
- init_samr_r_query_usergroups(r_u, num_gids, gids, r_u->status);
+ rids->count = num_gids;
+ rids->rids = gids;
- DEBUG(5,("_samr_query_usergroups: %d\n", __LINE__));
+ *r->out.rids = rids;
- return r_u->status;
+ DEBUG(5,("_samr_GetGroupsForUser: %d\n", __LINE__));
+
+ return result;
}
/*******************************************************************
@@ -5268,16 +5279,6 @@ NTSTATUS _samr_ChangePasswordUser(pipes_struct *p,
/****************************************************************
****************************************************************/
-NTSTATUS _samr_GetGroupsForUser(pipes_struct *p,
- struct samr_GetGroupsForUser *r)
-{
- p->rng_fault_state = true;
- return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-/****************************************************************
-****************************************************************/
-
NTSTATUS _samr_QueryDisplayInfo(pipes_struct *p,
struct samr_QueryDisplayInfo *r)
{
diff --git a/source/rpcclient/cmd_samr.c b/source/rpcclient/cmd_samr.c
index 43f53cb..c77d13d 100644
--- a/source/rpcclient/cmd_samr.c
+++ b/source/rpcclient/cmd_samr.c
@@ -605,13 +605,12 @@ static NTSTATUS cmd_samr_query_usergroups(struct rpc_pipe_client *cli,
domain_pol,
user_pol;
NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
- uint32 num_groups,
- user_rid;
+ uint32 user_rid;
uint32 access_mask = MAXIMUM_ALLOWED_ACCESS;
- DOM_GID *user_gids;
int i;
fstring server;
-
+ struct samr_RidWithAttributeArray *rid_array = NULL;
+
if ((argc < 2) || (argc > 3)) {
printf("Usage: %s rid [access mask]\n", argv[0]);
return NT_STATUS_OK;
@@ -648,15 +647,17 @@ static NTSTATUS cmd_samr_query_usergroups(struct rpc_pipe_client *cli,
if (!NT_STATUS_IS_OK(result))
goto done;
- result = rpccli_samr_query_usergroups(cli, mem_ctx, &user_pol,
- &num_groups, &user_gids);
+ result = rpccli_samr_GetGroupsForUser(cli, mem_ctx,
+ &user_pol,
+ &rid_array);
if (!NT_STATUS_IS_OK(result))
goto done;
- for (i = 0; i < num_groups; i++) {
- printf("\tgroup rid:[0x%x] attr:[0x%x]\n",
- user_gids[i].g_rid, user_gids[i].attr);
+ for (i = 0; i < rid_array->count; i++) {
+ printf("\tgroup rid:[0x%x] attr:[0x%x]\n",
+ rid_array->rids[i].rid,
+ rid_array->rids[i].attributes);
}
rpccli_samr_Close(cli, mem_ctx, &user_pol);
diff --git a/source/utils/net_rpc.c b/source/utils/net_rpc.c
index 8530767..612ae1c 100644
--- a/source/utils/net_rpc.c
+++ b/source/utils/net_rpc.c
@@ -1164,7 +1164,7 @@ static NTSTATUS rpc_user_info_internals(const DOM_SID *domain_sid,
uint32 flags = 0x000003e8; /* Unknown */
int i;
char **names;
- DOM_GID *user_gids;
+ struct samr_RidWithAttributeArray *rid_array = NULL;
if (argc < 1) {
d_printf("User must be specified\n");
@@ -1203,11 +1203,14 @@ static NTSTATUS rpc_user_info_internals(const DOM_SID *domain_sid,
&user_pol);
if (!NT_STATUS_IS_OK(result)) goto done;
- result = rpccli_samr_query_usergroups(pipe_hnd, mem_ctx, &user_pol,
- &num_rids, &user_gids);
+ result = rpccli_samr_GetGroupsForUser(pipe_hnd, mem_ctx,
+ &user_pol,
+ &rid_array);
if (!NT_STATUS_IS_OK(result)) goto done;
+ num_rids = rid_array->count;
+
/* Look up rids */
if (num_rids) {
@@ -1217,7 +1220,7 @@ static NTSTATUS rpc_user_info_internals(const DOM_SID *domain_sid,
}
for (i = 0; i < num_rids; i++)
- rids[i] = user_gids[i].g_rid;
+ rids[i] = rid_array->rids[i].rid;
result = rpccli_samr_lookup_rids(pipe_hnd, mem_ctx, &domain_pol,
num_rids, rids,
diff --git a/source/winbindd/winbindd_rpc.c b/source/winbindd/winbindd_rpc.c
index 98e4077..8e196e5 100644
--- a/source/winbindd/winbindd_rpc.c
+++ b/source/winbindd/winbindd_rpc.c
@@ -510,7 +510,7 @@ static NTSTATUS lookup_usergroups(struct winbindd_domain *domain,
NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
POLICY_HND dom_pol, user_pol;
uint32 des_access = SEC_RIGHTS_MAXIMUM_ALLOWED;
- DOM_GID *user_groups;
+ struct samr_RidWithAttributeArray *rid_array = NULL;
unsigned int i;
uint32 user_rid;
struct rpc_pipe_client *cli;
@@ -557,8 +557,10 @@ static NTSTATUS lookup_usergroups(struct winbindd_domain *domain,
return result;
/* Query user rids */
- result = rpccli_samr_query_usergroups(cli, mem_ctx, &user_pol,
- num_groups, &user_groups);
+ result = rpccli_samr_GetGroupsForUser(cli, mem_ctx,
+ &user_pol,
+ &rid_array);
--
Samba Shared Repository
More information about the samba-cvs
mailing list