diff options
-rw-r--r-- | source3/libsmb/cli_samr.c | 5 | ||||
-rw-r--r-- | source3/nsswitch/winbindd_glue.c | 15 | ||||
-rw-r--r-- | source3/nsswitch/winbindd_proto.h | 8 | ||||
-rw-r--r-- | source3/nsswitch/winbindd_sid.c | 5 | ||||
-rw-r--r-- | source3/nsswitch/winbindd_user.c | 18 | ||||
-rw-r--r-- | source3/nsswitch/winbindd_util.c | 2 |
6 files changed, 16 insertions, 37 deletions
diff --git a/source3/libsmb/cli_samr.c b/source3/libsmb/cli_samr.c index 538574f437..a33474d1c1 100644 --- a/source3/libsmb/cli_samr.c +++ b/source3/libsmb/cli_samr.c @@ -320,7 +320,7 @@ uint32 cli_samr_open_group(struct cli_state *cli, TALLOC_CTX *mem_ctx, 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; @@ -346,8 +346,6 @@ uint32 cli_samr_query_userinfo(struct cli_state *cli, TALLOC_CTX *mem_ctx, /* Unmarshall response */ - r.ctr = ctr; - if (!samr_io_r_query_userinfo("", &r, &rbuf, 0)) { goto done; } @@ -355,6 +353,7 @@ uint32 cli_samr_query_userinfo(struct cli_state *cli, TALLOC_CTX *mem_ctx, /* Return output parameters */ result = r.status; + *ctr = r.ctr; done: prs_mem_free(&qbuf); diff --git a/source3/nsswitch/winbindd_glue.c b/source3/nsswitch/winbindd_glue.c index ac48ae1013..3c789d5a7c 100644 --- a/source3/nsswitch/winbindd_glue.c +++ b/source3/nsswitch/winbindd_glue.c @@ -254,17 +254,6 @@ BOOL wb_samr_open_domain(CLI_POLICY_HND *connect_pol, uint32 ace_perms, 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 ****************************************************************************/ @@ -281,10 +270,10 @@ uint32 wb_samr_enum_dom_groups(CLI_POLICY_HND *pol, uint32 *start_idx, } /**************************************************************************** -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; diff --git a/source3/nsswitch/winbindd_proto.h b/source3/nsswitch/winbindd_proto.h index 6e03ec842f..11a3bc4f86 100644 --- a/source3/nsswitch/winbindd_proto.h +++ b/source3/nsswitch/winbindd_proto.h @@ -121,7 +121,7 @@ BOOL winbindd_lookup_sid_by_name(char *name, DOM_SID *sid, 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); @@ -131,10 +131,6 @@ BOOL winbindd_lookup_groupmem(struct winbindd_domain *domain, 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); @@ -146,4 +142,4 @@ uint32 winbindd_query_dispinfo(struct winbindd_domain *domain, 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_ */ diff --git a/source3/nsswitch/winbindd_sid.c b/source3/nsswitch/winbindd_sid.c index e426dd588e..bc014f2691 100644 --- a/source3/nsswitch/winbindd_sid.c +++ b/source3/nsswitch/winbindd_sid.c @@ -30,7 +30,7 @@ enum winbindd_result winbindd_lookupsid(struct winbindd_cli_state *state) { extern DOM_SID global_sid_Builtin; enum SID_NAME_USE type; - DOM_SID sid; + DOM_SID sid, tmp_sid; uint32 rid; fstring name; @@ -43,7 +43,8 @@ enum winbindd_result winbindd_lookupsid(struct winbindd_cli_state *state) /* 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; diff --git a/source3/nsswitch/winbindd_user.c b/source3/nsswitch/winbindd_user.c index 43227b9dc1..30416e76d7 100644 --- a/source3/nsswitch/winbindd_user.c +++ b/source3/nsswitch/winbindd_user.c @@ -95,7 +95,7 @@ enum winbindd_result winbindd_getpwnam_from_user(struct winbindd_cli_state *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; @@ -157,20 +157,16 @@ enum winbindd_result winbindd_getpwnam_from_user(struct winbindd_cli_state /* 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, @@ -195,7 +191,7 @@ enum winbindd_result winbindd_getpwnam_from_uid(struct winbindd_cli_state 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 */ @@ -255,12 +251,10 @@ enum winbindd_result winbindd_getpwnam_from_uid(struct winbindd_cli_state 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)) { diff --git a/source3/nsswitch/winbindd_util.c b/source3/nsswitch/winbindd_util.c index 6026422c30..4343f859ed 100644 --- a/source3/nsswitch/winbindd_util.c +++ b/source3/nsswitch/winbindd_util.c @@ -581,7 +581,7 @@ BOOL winbindd_lookup_name_by_sid(DOM_SID *sid, fstring name, /* 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); |