diff options
author | Christof Schmitt <cs@samba.org> | 2018-02-28 12:05:34 -0700 |
---|---|---|
committer | Karolin Seeger <kseeger@samba.org> | 2018-04-11 17:11:19 +0200 |
commit | bb5526d01fabd308d848a0b72332a2361438fcf5 (patch) | |
tree | 629d225ad9c33a1f78bed9e8d89a3cccde76195a /source3 | |
parent | 40ee7863a558568c69ee990fb8405ab51febae34 (diff) | |
download | samba-bb5526d01fabd308d848a0b72332a2361438fcf5.tar.gz |
winbindd: Do not ignore domain in the LOOKUPNAME request
A LOOKUPNAME request with a domain and a name containing a winbind
separator character would return the result for the joined domain,
instead of the specified domain.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=13312
Signed-off-by: Christof Schmitt <cs@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
Autobuild-User(master): Andreas Schneider <asn@cryptomilk.org>
Autobuild-Date(master): Fri Apr 6 21:03:31 CEST 2018 on sn-devel-144
(cherry picked from commit 1775ac8aa4dc00b9a0845ade238254ebb8b32429)
Autobuild-User(v4-8-test): Karolin Seeger <kseeger@samba.org>
Autobuild-Date(v4-8-test): Wed Apr 11 17:11:21 CEST 2018 on sn-devel-144
Diffstat (limited to 'source3')
-rw-r--r-- | source3/winbindd/winbindd_lookupname.c | 33 |
1 files changed, 21 insertions, 12 deletions
diff --git a/source3/winbindd/winbindd_lookupname.c b/source3/winbindd/winbindd_lookupname.c index 1be29fd85c8..b02269155f1 100644 --- a/source3/winbindd/winbindd_lookupname.c +++ b/source3/winbindd/winbindd_lookupname.c @@ -35,7 +35,8 @@ struct tevent_req *winbindd_lookupname_send(TALLOC_CTX *mem_ctx, { struct tevent_req *req, *subreq; struct winbindd_lookupname_state *state; - char *domname, *name, *p; + const char *domname = NULL, *name = NULL; + char *p = NULL; req = tevent_req_create(mem_ctx, &state, struct winbindd_lookupname_state); @@ -49,17 +50,25 @@ struct tevent_req *winbindd_lookupname_send(TALLOC_CTX *mem_ctx, sizeof(request->data.name.dom_name)-1]='\0'; request->data.name.name[sizeof(request->data.name.name)-1]='\0'; - /* cope with the name being a fully qualified name */ - p = strstr(request->data.name.name, lp_winbind_separator()); - if (p) { - *p = 0; - domname = request->data.name.name; - name = p+1; - } else if ((p = strchr(request->data.name.name, '@')) != NULL) { - /* upn */ - domname = p + 1; - *p = 0; - name = request->data.name.name; + if (strlen(request->data.name.dom_name) == 0) { + /* cope with the name being a fully qualified name */ + p = strstr(request->data.name.name, lp_winbind_separator()); + if (p != NULL) { + *p = '\0'; + domname = request->data.name.name; + name = p + 1; + } else { + p = strchr(request->data.name.name, '@'); + if (p != NULL) { + /* upn */ + domname = p + 1; + *p = '\0'; + name = request->data.name.name; + } else { + domname = ""; + name = request->data.name.name; + } + } } else { domname = request->data.name.dom_name; name = request->data.name.name; |