Fix 'getent group aliasname', this did not look in pdb.
authorVolker Lendecke <vlendec@samba.org>
Sun, 14 Mar 2004 10:28:21 +0000 (10:28 +0000)
committerVolker Lendecke <vlendec@samba.org>
Sun, 14 Mar 2004 10:28:21 +0000 (10:28 +0000)
source/nsswitch/winbindd_group.c

index 94bd0fa0b9c3231019e658db0b7ea4495b784d32..be95e49ba43c36fed23fb82a21d1bfc2153fec4a 100644 (file)
@@ -250,14 +250,11 @@ enum winbindd_result winbindd_getgrnam(struct winbindd_cli_state *state)
 
        /* if no domain or our local domain, then do a local tdb search */
        
-       if ( !*name_domain || strequal(name_domain, get_global_sam_name()) ) {
+       if ( (!*name_domain || strequal(name_domain, get_global_sam_name())) &&
+            ((grp = wb_getgrnam(name_group)) != NULL) ) {
+
                char *buffer = NULL;
                
-               if ( !(grp=wb_getgrnam(name_group)) ) {
-                       DEBUG(5,("winbindd_getgrnam: lookup for %s\\%s failed\n",
-                               name_domain, name_group));
-                       return WINBINDD_ERROR;
-               }
                memcpy( &state->response.data.gr, grp, sizeof(WINBINDD_GR) );
 
                gr_mem_len = gr_mem_buffer( &buffer, grp->gr_mem, grp->num_gr_mem );
@@ -269,6 +266,13 @@ enum winbindd_result winbindd_getgrnam(struct winbindd_cli_state *state)
                return WINBINDD_OK;
        }
 
+       /* if no domain or our local domain and no local tdb group, default to
+        * our local domain for aliases */
+
+       if ( !*name_domain || strequal(name_domain, get_global_sam_name()) ) {
+               fstrcpy(name_domain, get_global_sam_name());
+       }
+
        /* Get info for the domain */
 
        if ((domain = find_domain_from_name(name_domain)) == NULL) {
@@ -294,7 +298,8 @@ enum winbindd_result winbindd_getgrnam(struct winbindd_cli_state *state)
        }
 
        if ( !((name_type==SID_NAME_DOM_GRP) ||
-               ((name_type==SID_NAME_ALIAS) && domain->primary)) )
+              ((name_type==SID_NAME_ALIAS) && domain->primary) ||
+              ((name_type==SID_NAME_ALIAS) && domain->internal)) )
        {
                DEBUG(1, ("name '%s' is not a local or domain group: %d\n", 
                          name_group, name_type));