summaryrefslogtreecommitdiffstats
path: root/source/nsswitch/wb_client.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/nsswitch/wb_client.c')
-rw-r--r--source/nsswitch/wb_client.c49
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)