mirror of
https://github.com/opnsense/src.git
synced 2026-04-15 14:29:58 -04:00
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> |
||
|---|---|---|
| .. | ||
| addr2ascii.3 | ||
| addr2ascii.c | ||
| ascii2addr.c | ||
| base64.c | ||
| byteorder.3 | ||
| ether_addr.c | ||
| ethers.3 | ||
| getaddrinfo.3 | ||
| getaddrinfo.c | ||
| gethostbydns.c | ||
| gethostbyht.c | ||
| gethostbyname.3 | ||
| gethostbynis.c | ||
| gethostnamadr.c | ||
| getifaddrs.3 | ||
| getifaddrs.c | ||
| getifmaddrs.3 | ||
| getifmaddrs.c | ||
| getipnodebyname.3 | ||
| getnameinfo.3 | ||
| getnameinfo.c | ||
| getnetbydns.c | ||
| getnetbyht.c | ||
| getnetbynis.c | ||
| getnetent.3 | ||
| getnetnamadr.c | ||
| getproto.c | ||
| getprotoent.3 | ||
| getprotoent.c | ||
| getprotoname.c | ||
| getservbyname.c | ||
| getservbyport.c | ||
| getservent.3 | ||
| getservent.c | ||
| herror.c | ||
| hesiod.3 | ||
| hesiod.c | ||
| if_indextoname.3 | ||
| if_indextoname.c | ||
| if_nameindex.c | ||
| if_nametoindex.c | ||
| inet.3 | ||
| inet6_opt_init.3 | ||
| inet6_option_space.3 | ||
| inet6_rth_space.3 | ||
| inet6_rthdr_space.3 | ||
| inet_addr.c | ||
| inet_lnaof.c | ||
| inet_makeaddr.c | ||
| inet_net.3 | ||
| inet_net_ntop.c | ||
| inet_net_pton.c | ||
| inet_neta.c | ||
| inet_netof.c | ||
| inet_network.c | ||
| inet_ntoa.c | ||
| inet_ntop.c | ||
| inet_pton.c | ||
| ip6opt.c | ||
| linkaddr.3 | ||
| linkaddr.c | ||
| Makefile.inc | ||
| map_v4v6.c | ||
| name6.c | ||
| ns_name.c | ||
| ns_netint.c | ||
| ns_parse.c | ||
| ns_print.c | ||
| ns_ttl.c | ||
| nsap_addr.c | ||
| nsdispatch.3 | ||
| nsdispatch.c | ||
| nslexer.l | ||
| nsparser.y | ||
| nss_backends.h | ||
| nss_compat.c | ||
| rcmd.3 | ||
| rcmd.c | ||
| rcmdsh.3 | ||
| rcmdsh.c | ||
| recv.c | ||
| res_comp.c | ||
| res_config.h | ||
| res_data.c | ||
| res_debug.c | ||
| res_init.c | ||
| res_mkquery.c | ||
| res_mkupdate.c | ||
| res_query.c | ||
| res_send.c | ||
| res_update.c | ||
| resolver.3 | ||
| rthdr.c | ||
| send.c | ||
| sockatmark.3 | ||
| sockatmark.c | ||
| vars.c | ||