Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 9 Jan 2004 05:43:49 -0800 (PST)
From:      Jacques Vidrine <nectar@FreeBSD.org>
To:        src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: src/include nss.h src/lib/libc/net nss_compat.c
Message-ID:  <200401091343.i09Dhn7j063153@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
nectar      2004/01/09 05:43:49 PST

  FreeBSD src repository

  Modified files:
    include              nss.h 
    lib/libc/net         nss_compat.c 
  Log:
  It was reported that when using nss_ldap, getgrent(3) would behave
  incorrectly when encountering `large' groups (many members and/or many
  long member names).  The reporter tracked this down to the glibc NSS
  module compatibility code (nss_compat.c): it would prematurely record
  that a NSS module was finished iterating through its database in some
  cases.
  
  Two aspects are corrected:
  
  1. nss_compat.c recorded that a NSS module was finished iterating
     whenever the module reported something other than SUCCESS.  The
     correct logic is to continue iteration when the module reports
     either SUCCESS or RETURN.  The __nss_compat_getgrent_r and
     __nss_compat_getpwent_r routines are updated to reflect this.
  
  2. An internal helper macro __nss_compat_result is used to map glibc
     NSS status codes to BSD NSS status codes (e.g. NSS_STATUS_SUCCESS ->
     NS_SUCCESS).  It provided the obvious mapping.
  
     When a NSS routine is called with a too-small buffer, the
     convention in the BSD NSS code is to report RETURN.  (This is used
     to implement reentrant APIs such as getpwnam_r(3).)  However, the
     convention in glibc for this case is to set errno = ERANGE and
     overload TRYAGAIN.  __nss_compat_result is updated to handle this
     case.
  
  PR:             bin/60287
  Reported by:    Lachlan O'Dea <odela01@ca.com>
  
  Revision  Changes    Path
  1.2       +3 -2      src/include/nss.h
  1.2       +15 -8     src/lib/libc/net/nss_compat.c



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200401091343.i09Dhn7j063153>