uint32 cli_samr_query_userinfo(struct cli_state *cli, TALLOC_CTX *mem_ctx,
POLICY_HND *user_pol, uint16 switch_value,
- SAM_USERINFO_CTR *ctr)
+ SAM_USERINFO_CTR **ctr)
{
prs_struct qbuf, rbuf;
SAMR_Q_QUERY_USERINFO q;
/* Unmarshall response */
- r.ctr = ctr;
-
if (!samr_io_r_query_userinfo("", &r, &rbuf, 0)) {
goto done;
}
/* Return output parameters */
result = r.status;
+ *ctr = r.ctr;
done:
prs_mem_free(&qbuf);
return False;
}
-/*******************************************************************
-frees a structure.
-********************************************************************/
-void wb_free_samr_userinfo_ctr(SAM_USERINFO_CTR * ctr)
-{
- if (ctr == NULL)
- return;
- safe_free(ctr->info.id);
- ctr->info.id = NULL;
-}
-
/****************************************************************************
do a SAMR enumerate groups
****************************************************************************/
}
/****************************************************************************
-do a SAMR enumerate groups
+do a SAMR query userinfo
****************************************************************************/
BOOL wb_get_samr_query_userinfo(CLI_POLICY_HND *pol, uint32 info_level,
- uint32 user_rid, SAM_USERINFO_CTR *ctr)
+ uint32 user_rid, SAM_USERINFO_CTR **ctr)
{
POLICY_HND user_pol;
BOOL got_user_pol = False;
BOOL winbindd_lookup_name_by_sid(DOM_SID *sid, fstring name,
enum SID_NAME_USE *type);
BOOL winbindd_lookup_userinfo(struct winbindd_domain *domain,
- uint32 user_rid, SAM_USERINFO_CTR *user_info);
+ uint32 user_rid, SAM_USERINFO_CTR **user_info);
BOOL winbindd_lookup_usergroups(struct winbindd_domain *domain,
uint32 user_rid, uint32 *num_groups,
DOM_GID **user_groups);
uint32 group_rid, uint32 *num_names,
uint32 **rid_mem, char ***names,
enum SID_NAME_USE **name_types);
-int winbindd_lookup_aliasmem(struct winbindd_domain *domain,
- uint32 alias_rid, uint32 *num_names,
- DOM_SID ***sids, char ***names,
- enum SID_NAME_USE **name_types);
struct winbindd_domain *find_domain_from_name(char *domain_name);
struct winbindd_domain *find_domain_from_sid(DOM_SID *sid);
void free_getent_state(struct getent_state *state);
uint32 *num_entries, SAM_DISPINFO_CTR *ctr);
BOOL check_domain_env(char *domain_env, char *domain);
void parse_domain_user(char *domuser, fstring domain, fstring user);
-#endif /* _WINBINDD_PROTO_H_ */
+#endif /* _PROTO_H_ */
{
extern DOM_SID global_sid_Builtin;
enum SID_NAME_USE type;
- DOM_SID sid;
+ DOM_SID sid, tmp_sid;
uint32 rid;
fstring name;
/* Don't look up BUILTIN sids */
- sid_peek_rid(&sid, &rid);
+ sid_copy(&tmp_sid, &sid);
+ sid_split_rid(&tmp_sid, &rid);
if (sid_equal(&tmp_sid, &global_sid_Builtin)) {
return WINBINDD_ERROR;
*state)
{
uint32 name_type, user_rid, group_rid;
- SAM_USERINFO_CTR user_info;
+ SAM_USERINFO_CTR *user_info;
DOM_SID user_sid;
fstring name_domain, name_user, name, gecos_name;
struct winbindd_domain *domain;
/* The following costs 3 packets */
- ZERO_STRUCT(user_info);
-
if (!winbindd_lookup_userinfo(domain, user_rid, &user_info)) {
DEBUG(1, ("pwnam_from_user(): error getting user info for "
"user '%s'\n", name_user));
return WINBINDD_ERROR;
}
- group_rid = user_info.info.id21->group_rid;
- unistr2_to_ascii(gecos_name, &user_info.info.id21->uni_full_name,
+ group_rid = user_info->info.id21->group_rid;
+ unistr2_to_ascii(gecos_name, &user_info->info.id21->uni_full_name,
sizeof(gecos_name) - 1);
- wb_free_samr_userinfo_ctr(&user_info);
-
/* Now take all this information and fill in a passwd structure */
if (!winbindd_fill_pwent(domain->name, state->request.data.username,
uint32 user_rid, group_rid;
fstring user_name, gecos_name;
enum SID_NAME_USE name_type;
- SAM_USERINFO_CTR user_info;
+ SAM_USERINFO_CTR *user_info;
gid_t gid;
/* Bug out if the uid isn't in the winbind range */
return WINBINDD_ERROR;
}
- group_rid = user_info.info.id21->group_rid;
- unistr2_to_ascii(gecos_name, &user_info.info.id21->uni_full_name,
+ group_rid = user_info->info.id21->group_rid;
+ unistr2_to_ascii(gecos_name, &user_info->info.id21->uni_full_name,
sizeof(gecos_name) - 1);
- wb_free_samr_userinfo_ctr(&user_info);
-
/* Resolve gid number */
if (!winbindd_idmap_get_gid_from_rid(domain->name, group_rid, &gid)) {
/* Lookup user information from a rid */
BOOL winbindd_lookup_userinfo(struct winbindd_domain *domain,
- uint32 user_rid, SAM_USERINFO_CTR *user_info)
+ uint32 user_rid, SAM_USERINFO_CTR **user_info)
{
return wb_get_samr_query_userinfo(&domain->sam_dom_handle, 0x15,
user_rid, user_info);