#34572: samba3 @3.6.5 fails to initialize on startup -------------------------+-------------------------------------------------- Reporter: jim@… | Owner: mww@… Type: defect | Status: new Priority: Normal | Milestone: Component: ports | Version: 2.1.1 Keywords: | Port: samba3 -------------------------+-------------------------------------------------- Comment(by flexcode@…): Replying to [comment:4 ayearout@…]:
The problem with the original patch, as far as I can tell, is that the '''SYS_initgroups()''' system call in '''smbd/sec_ctx.c''' requires that '''groups_max()''' return the correct value. If it is greater than the system defined '''NGROUPS_MAX''', '''SYS_initgroups()''' throws an "Invalid argument" error and returns -1, causing the smbd process to bail.
The below patch solves the problem by going a different route:
{{{ --- lib/system_smbd.c.orig 2012-07-29 19:48:57.000000000 -0700 +++ lib/system_smbd.c 2012-07-29 19:49:09.000000000 -0700 @@ -210,7 +210,11 @@ gid_t *groups; int i;
+#if defined(DARWINOS) + max_grp = 128; +#else max_grp = MIN(128, groups_max()); +#endif temp_groups = SMB_MALLOC_ARRAY(gid_t, max_grp); if (! temp_groups) { return False; }}}
I modified the '''getgroups_unix_user()''' call in '''lib/system_smbd.c''' to allow users to be in more than the 16 group maximum if compiled on Darwin platforms. The patch specifies a static value of 128, which should work in most cases. This still functions correctly because Darwin's '''getgroups()''' call will happily return more groups than what is defined in '''NGROUPS_MAX''' if the correct macros are defined. It's only when using '''setgroups()''' or the '''SYS_initgroups()''' system call that you run into the limit problems.
I've tested the patch on my system using Samba 3.6.6 with no issues. A user in 20 groups correctly resolves all groups. I also configured a test share with 20 individual folders, each with different group permissions, and Samba correctly resolved the permissions for all folders.
I hope this helps others! I've attached the patch as a file as well.
Is there something else needed to patch with? I've tried following the instructions but obviously I'm missing something here {{{ osx:samba3 rick$ patch -p0 < ~/Downloads/patch- source_lib_system_smbd_c.diff can't find file to patch at input line 3 Perhaps you used the wrong -p or --strip option? The text leading up to this was: -------------------------- |--- lib/system_smbd.c.orig 2012-07-29 19:48:57.000000000 -0700 |+++ lib/system_smbd.c 2012-07-29 19:49:09.000000000 -0700 -------------------------- File to patch: }}} It just asks me what to patch and if I enter Portfile it fails -- Ticket URL: <https://trac.macports.org/ticket/34572#comment:9> MacPorts <http://www.macports.org/> Ports system for Mac OS