diff options
Diffstat (limited to 'source/nsswitch/wb_client.c')
-rw-r--r-- | source/nsswitch/wb_client.c | 49 |
1 files changed, 25 insertions, 24 deletions
diff --git a/source/nsswitch/wb_client.c b/source/nsswitch/wb_client.c index efeb26fe45f..843b85c0c7b 100644 --- a/source/nsswitch/wb_client.c +++ b/source/nsswitch/wb_client.c @@ -1,5 +1,6 @@ /* - Unix SMB/CIFS implementation. + Unix SMB/Netbios implementation. + Version 2.0 winbind client code @@ -23,29 +24,31 @@ */ #include "includes.h" -#include "nsswitch/nss.h" NSS_STATUS winbindd_request(int req_type, struct winbindd_request *request, struct winbindd_response *response); -static BOOL parse_domain_user(const char *domuser, fstring domain, fstring user) +/* Copy of parse_domain_user from winbindd_util.c. Parse a string of the + form DOMAIN/user into a domain and a user */ + +static BOOL parse_domain_user(char *domuser, fstring domain, fstring user) { char *p = strchr(domuser,*lp_winbind_separator()); if (!p) - return False; - + return False; + fstrcpy(user, p+1); fstrcpy(domain, domuser); domain[PTR_DIFF(p, domuser)] = 0; strupper(domain); - return True; + return True; } /* Call winbindd to convert a name to a sid */ -BOOL winbind_lookup_name(const char *dom_name, const char *name, DOM_SID *sid, +BOOL winbind_lookup_name(const char *name, DOM_SID *sid, enum SID_NAME_USE *name_type) { struct winbindd_request request; @@ -55,18 +58,19 @@ BOOL winbind_lookup_name(const char *dom_name, const char *name, DOM_SID *sid, if (!sid || !name_type) return False; + /* + * Don't do the lookup if the name has no separator. + */ + + if (!strchr(name, *lp_winbind_separator())) + return False; + /* Send off request */ ZERO_STRUCT(request); ZERO_STRUCT(response); - if (dom_name == NULL) { - if (!parse_domain_user(name, request.data.name.dom_name, request.data.name.name)) - return False; - } else { - fstrcpy(request.data.name.dom_name, dom_name); - fstrcpy(request.data.name.name, name); - } + fstrcpy(request.data.name, name); if ((result = winbindd_request(WINBINDD_LOOKUPNAME, &request, &response)) == NSS_STATUS_SUCCESS) { @@ -79,8 +83,7 @@ BOOL winbind_lookup_name(const char *dom_name, const char *name, DOM_SID *sid, /* Call winbindd to convert sid to name */ -BOOL winbind_lookup_sid(DOM_SID *sid, - fstring dom_name, fstring name, +BOOL winbind_lookup_sid(DOM_SID *sid, fstring dom_name, fstring name, enum SID_NAME_USE *name_type) { struct winbindd_request request; @@ -103,8 +106,7 @@ BOOL winbind_lookup_sid(DOM_SID *sid, /* Copy out result */ if (result == NSS_STATUS_SUCCESS) { - fstrcpy(dom_name, response.data.name.dom_name); - fstrcpy(name, response.data.name.name); + parse_domain_user(response.data.name.name, dom_name, name); *name_type = (enum SID_NAME_USE)response.data.name.type; DEBUG(10, ("winbind_lookup_sid: SUCCESS: SID %s -> %s %s\n", @@ -247,7 +249,7 @@ BOOL winbind_gid_to_sid(DOM_SID *sid, gid_t gid) } /* Fetch the list of groups a user is a member of from winbindd. This is - used by winbind_getgroups. */ + used by winbind_initgroups and winbind_getgroups. */ static int wb_getgroups(const char *user, gid_t **groups) { @@ -360,11 +362,10 @@ int winbind_getgroups(const char *user, int size, gid_t *list) int result, i; /* - * Don't do the lookup if the name has no separator _and_ we are not in - * 'winbind use default domain' mode. + * Don't do the lookup if the name has no separator. */ - if (!(strchr(user, *lp_winbind_separator()) || lp_winbind_use_default_domain())) + if (!strchr(user, *lp_winbind_separator())) return -1; /* Fetch list of groups */ @@ -444,7 +445,7 @@ BOOL winbind_nametouid(uid_t *puid, const char *name) DOM_SID sid; enum SID_NAME_USE name_type; - if (!winbind_lookup_name(NULL, name, &sid, &name_type)) + if (!winbind_lookup_name(name, &sid, &name_type)) return False; if (name_type != SID_NAME_USER) @@ -460,7 +461,7 @@ BOOL winbind_nametogid(gid_t *pgid, const char *gname) DOM_SID g_sid; enum SID_NAME_USE name_type; - if (!winbind_lookup_name(NULL, gname, &g_sid, &name_type)) + if (!winbind_lookup_name(gname, &g_sid, &name_type)) return False; if (name_type != SID_NAME_DOM_GRP) |