Bug 798 - FreeBSD nss module implementation incorrect
Summary: FreeBSD nss module implementation incorrect
Status: RESOLVED DUPLICATE of bug 797
Alias: None
Product: Samba 3.0
Classification: Unclassified
Component: winbind (show other bugs)
Version: 3.0.0
Hardware: Other FreeBSD
: P3 normal
Target Milestone: none
Assignee: Samba Bugzilla Account
QA Contact:
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2003-11-20 15:55 UTC by Aaron Collins
Modified: 2003-11-20 22:07 UTC (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Aaron Collins 2003-11-20 15:55:19 UTC
I found that the nsswitch coded didn't support the freebsd 5.1 implementation correctly.  It doesn't ever register the module which accroding to the nsdispatch code is needed.  I created a patch that seems to correct the issue.  Since there is no seperate file for BSD specific code, and the config uses the winbind_nss_linux.c for freebsd also, I just added it there, below is the patch.  The patch is taken from the old BSD port.  Also in order to get the shared object to work after it is compiled it needs to be placed in /usr/lib and a sim link to nss_winbind.so.2 'ln -s /usr/lib/libnss_winbind.so /usr/lib/nss_winbind.so.2'  This should be added to the Samba 3 Howto, I know it states this is needed for solaris, but it says nothing about FreeBSD.

 diff cvs/samba/source/nsswitch/winbind_nss_linux.c /home/hellfire/winbind_nss_linux.c.old               
37,100d36
< 
< 
< #ifdef FREEBSD
< /* Make sure that the module gets registered needed by freebsd 5.1
<    Added By hellfire 11/20/03 taken from the old Ports package
< */
< 
< extern enum nss_status _nss_winbind_getgrent_r(struct group *, char *, size_t,
<     int *);
< extern enum nss_status _nss_winbind_getgrnam_r(const char *, struct group *,
<     char *, size_t, int *);
< extern enum nss_status _nss_winbind_getgrgid_r(gid_t gid, struct group *, char *,
<     size_t, int *);
< extern enum nss_status _nss_winbind_setgrent(void);
< extern enum nss_status _nss_winbind_endgrent(void);
< 
< extern enum nss_status _nss_winbind_getpwent_r(struct passwd *, char *, size_t,
<     int *);
< extern enum nss_status _nss_winbind_getpwnam_r(const char *, struct passwd *,
<     char *, size_t, int *);
< extern enum nss_status _nss_winbind_getpwuid_r(gid_t gid, struct passwd *, char *,
<     size_t, int *);
< extern enum nss_status _nss_winbind_setpwent(void);
< extern enum nss_status _nss_winbind_endpwent(void);
< 
< NSS_METHOD_PROTOTYPE(__nss_compat_getgrnam_r);
< NSS_METHOD_PROTOTYPE(__nss_compat_getgrgid_r);
< NSS_METHOD_PROTOTYPE(__nss_compat_getgrent_r);
< NSS_METHOD_PROTOTYPE(__nss_compat_setgrent);
< NSS_METHOD_PROTOTYPE(__nss_compat_endgrent);
< 
< NSS_METHOD_PROTOTYPE(__nss_compat_getpwnam_r);
< NSS_METHOD_PROTOTYPE(__nss_compat_getpwuid_r);
< NSS_METHOD_PROTOTYPE(__nss_compat_getpwent_r);
< NSS_METHOD_PROTOTYPE(__nss_compat_setpwent);
< NSS_METHOD_PROTOTYPE(__nss_compat_endpwent);
< 
< static ns_mtab methods[] = {
< { NSDB_GROUP, "getgrnam_r", __nss_compat_getgrnam_r, _nss_winbind_getgrnam_r },
< { NSDB_GROUP, "getgrgid_r", __nss_compat_getgrgid_r, _nss_winbind_getgrgid_r },
< { NSDB_GROUP, "getgrent_r", __nss_compat_getgrent_r, _nss_winbind_getgrent_r },
< { NSDB_GROUP, "endgrent",   __nss_compat_setgrent,   _nss_winbind_setgrent },
< { NSDB_GROUP, "setgrent",   __nss_compat_endgrent,   _nss_winbind_endgrent },
< 
< { NSDB_PASSWD, "getpwnam_r", __nss_compat_getpwnam_r, _nss_winbind_getpwnam_r },
< { NSDB_PASSWD, "getpwuid_r", __nss_compat_getpwuid_r, _nss_winbind_getpwuid_r },
< { NSDB_PASSWD, "getpwent_r", __nss_compat_getpwent_r, _nss_winbind_getpwent_r },
< { NSDB_PASSWD, "endpwent",   __nss_compat_setpwent,   _nss_winbind_setpwent },
< { NSDB_PASSWD, "setpwent",   __nss_compat_endpwent,   _nss_winbind_endpwent },
< 
< };
< 
< 
< ns_mtab *
< nss_module_register(const char *source, unsigned int *mtabsize,
<     nss_module_unregister_fn *unreg)
< {
<         *mtabsize = sizeof(methods)/sizeof(methods[0]);
<         *unreg = NULL;
<         return (methods);
< }
< #endif
<
Comment 1 Tim Potter 2003-11-20 22:07:25 UTC

*** This bug has been marked as a duplicate of 797 ***