Ensure that winbindd_getgroups() can deal with a UPN name.
authorGerald (Jerry) Carter <jerry@samba.org>
Fri, 4 Jan 2008 19:32:58 +0000 (13:32 -0600)
committerGerald (Jerry) Carter <jerry@samba.org>
Fri, 4 Jan 2008 19:32:58 +0000 (13:32 -0600)
A user logging in via GDM was not getting a complete list of supplementary
groups in his/her token.  This is because getgroup() was not able to
find the winbindd_domain* using the DNS name.  Fallback to matching the DNS
name is the short name match failes.

source/winbindd/winbindd_group.c

index fbd2fee692370d1f4915b82e6ab337696a506c73..62e8d1c40b1364f7a4da28c1214ad57cb90bb96d 100644 (file)
@@ -1494,9 +1494,18 @@ void winbindd_getgroups(struct winbindd_cli_state *state)
                s->username = talloc_strdup( state->mem_ctx, state->request.data.username );
        }
        
-       /* Get info for the domain */
+       /* Get info for the domain (either by short domain name or 
+          DNS name in the case of a UPN) */
 
        s->domain = find_domain_from_name_noinit(s->domname);
+       if (!s->domain) {
+               char *p = strchr(s->username, '@');
+               
+               if (p) {
+                       s->domain = find_domain_from_name_noinit(p+1);                  
+               }
+               
+       }
 
        if (s->domain == NULL) {
                DEBUG(7, ("could not find domain entry for domain %s\n",