diff options
author | Jeremy Allison <jra@samba.org> | 2002-04-30 13:28:41 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2002-04-30 13:28:41 +0000 |
commit | d04b55f2186fb8af998cf61c576771a5f72f4892 (patch) | |
tree | 9ff8c3a7cf34cefc0ee9a550a3bb1236a9e77595 /source/nsswitch/wb_client.c | |
parent | 73267ca42d9eddabb71b31b4c5068ebbe7bc9f7c (diff) | |
download | samba-d04b55f2186fb8af998cf61c576771a5f72f4892.tar.gz samba-d04b55f2186fb8af998cf61c576771a5f72f4892.tar.xz samba-d04b55f2186fb8af998cf61c576771a5f72f4892.zip |
Start of merge to 2_2_RELEASE branch for release.
Jeremy.
Diffstat (limited to 'source/nsswitch/wb_client.c')
-rw-r--r-- | source/nsswitch/wb_client.c | 49 |
1 files changed, 24 insertions, 25 deletions
diff --git a/source/nsswitch/wb_client.c b/source/nsswitch/wb_client.c index 843b85c0c7b..efeb26fe45f 100644 --- a/source/nsswitch/wb_client.c +++ b/source/nsswitch/wb_client.c @@ -1,6 +1,5 @@ /* - Unix SMB/Netbios implementation. - Version 2.0 + Unix SMB/CIFS implementation. winbind client code @@ -24,31 +23,29 @@ */ #include "includes.h" +#include "nsswitch/nss.h" NSS_STATUS winbindd_request(int req_type, struct winbindd_request *request, struct winbindd_response *response); -/* 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) +static BOOL parse_domain_user(const 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 *name, DOM_SID *sid, +BOOL winbind_lookup_name(const char *dom_name, const char *name, DOM_SID *sid, enum SID_NAME_USE *name_type) { struct winbindd_request request; @@ -58,19 +55,18 @@ BOOL winbind_lookup_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); - fstrcpy(request.data.name, name); + 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); + } if ((result = winbindd_request(WINBINDD_LOOKUPNAME, &request, &response)) == NSS_STATUS_SUCCESS) { @@ -83,7 +79,8 @@ BOOL winbind_lookup_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; @@ -106,7 +103,8 @@ BOOL winbind_lookup_sid(DOM_SID *sid, fstring dom_name, fstring name, /* Copy out result */ if (result == NSS_STATUS_SUCCESS) { - parse_domain_user(response.data.name.name, dom_name, name); + fstrcpy(dom_name, response.data.name.dom_name); + fstrcpy(name, response.data.name.name); *name_type = (enum SID_NAME_USE)response.data.name.type; DEBUG(10, ("winbind_lookup_sid: SUCCESS: SID %s -> %s %s\n", @@ -249,7 +247,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_initgroups and winbind_getgroups. */ + used by winbind_getgroups. */ static int wb_getgroups(const char *user, gid_t **groups) { @@ -362,10 +360,11 @@ 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. + * Don't do the lookup if the name has no separator _and_ we are not in + * 'winbind use default domain' mode. */ - if (!strchr(user, *lp_winbind_separator())) + if (!(strchr(user, *lp_winbind_separator()) || lp_winbind_use_default_domain())) return -1; /* Fetch list of groups */ @@ -445,7 +444,7 @@ BOOL winbind_nametouid(uid_t *puid, const char *name) DOM_SID sid; enum SID_NAME_USE name_type; - if (!winbind_lookup_name(name, &sid, &name_type)) + if (!winbind_lookup_name(NULL, name, &sid, &name_type)) return False; if (name_type != SID_NAME_USER) @@ -461,7 +460,7 @@ BOOL winbind_nametogid(gid_t *pgid, const char *gname) DOM_SID g_sid; enum SID_NAME_USE name_type; - if (!winbind_lookup_name(gname, &g_sid, &name_type)) + if (!winbind_lookup_name(NULL, gname, &g_sid, &name_type)) return False; if (name_type != SID_NAME_DOM_GRP) |