On Thu, Oct 07, 2004 at 04:22:04PM -0400, [EMAIL PROTECTED] wrote:
> I'm running Samba 3.0.2 on Solaris using winbindd to allow me to security
> tailor access to subdirectories on a Samba share. We assign the
> subdirectories within a Samba share to an Active Directory group name. This
> generally works fine but I am having user access issues from the Win2K / Win
> XP workstations that have mapped the share. The problem seems to be related
> to the number of groups / total length of group names the user is assigned
> to in Active Directory. If there are too many groups (or the aggregate
> length of all group names is too long), the user cannot access the secured
> directories even though they are a member of the group in AD. If I keep
> reducing the number of assigned groups in AD, the user can, at some point,
> gain access to the directories.
> 
> Can someone tell me the following:
> 1. What limitation is causing this problem?
> 2. How to I remove the limitation?

I had this problem. Try this patch (for 3.0.7, I don't know if it applies to 3.0.2):


--- branches/SAMBA_3_0/source/nsswitch/winbind_nss_linux.c      2004/04/04 10:42:06    
 3
+++ branches/SAMBA_3_0/source/nsswitch/winbind_nss_linux.c      2004/09/20 20:18:19    
 2451
@@ -833,25 +833,38 @@
 
                        /* Skip primary group */
 
-                       if (gid_list[i] == group) continue;
+                       if (gid_list[i] == group) {
+                               continue;
+                       }
 
-                       /* Add to buffer */
+                       /* Filled buffer ? If so, resize. */
 
-                       if (*start == *size && limit <= 0) {
-                               (*groups) = realloc(
-                                       (*groups), (2 * (*size) + 1) * 
sizeof(**groups));
-                               if (! *groups) goto done;
-                               *size = 2 * (*size) + 1;
+                       if (*start == *size) {
+                               long int newsize;
+                               gid_t *newgroups;
+
+                               newsize = 2 * (*size);
+                               if (limit > 0) {
+                                       if (*size == limit) {
+                                               goto done;
+                                       }
+                                       newsize = newsize < limit ? newsize : limit;
+                               }
+
+                               newgroups = realloc((*groups), newsize * 
sizeof(**groups));
+                               if (!newgroups) {
+                                       *errnop = ENOMEM;
+                                       ret = NSS_STATUS_NOTFOUND;
+                                       goto done;
+                               }
+                               *groups = newgroups;
+                               *size = newsize;
                        }
 
-                       if (*start == *size) goto done;
+                       /* Add to buffer */
 
                        (*groups)[*start] = gid_list[i];
                        *start += 1;
-
-                       /* Filled buffer? */
-
-                       if (*start == limit) goto done;
                }
        }
        
-- 
To unsubscribe from this list go to the following URL and read the
instructions:  http://lists.samba.org/mailman/listinfo/samba

Reply via email to