Specjalista od PAM poszukiwany...

Jakub Bogusz qboosh w pld-linux.org
Wto, 6 Cze 2006, 18:45:02 CEST


On Tue, Jun 06, 2006 at 06:10:44PM +0200, Marcin Król wrote:
> Hello.
> 
> Przy okazji debugowania bledu w obsludze grup w nss_ldap natknalem sie
> na taki sam blad w PAM. Dla przykladu posluze sie modulem pam_limits.
> Otoz jest sobie system z ustawionymi limitami w
> /etc/security/limits.conf. Limity owe sa na grupy grupax, grupay, grupaz
> gdzie grupax ma 7 czlonkow, grypay kilkudziesieciu, a grupaz kilka
> tysiecy. PAM przelatujac odwolanie do pam_limits dochodzi w kodzie do
> wywloania _pammodutil_getgrnam() znajdujacego sie w
> modules/pammodutil/modutil_getgrnam.c:41. Wszystko dziala pieknie dla
> wszystkich trzech grup jezeli nie jest zdefiniowane HAVE_GETGRNAM_R.
> Jezeli natomiast uzywane jest getgrnam_r to wszystko pieknie zadziala
> dla grupax i grupay, a nie zadziala dla grupaz. Powod: wywolanie
> getgrnam_r (modutil_getgrnam.c:68) zwroci blad i ustawi errno na
> "Numerical result out of range" - z testow mi wyszlo ze bufor podany w
> parametrach wywolania byl za maly na pomieszczenie informacji o grupie
> grupaz. Konczy sie to tym, ze dla duzych grup limity systemowe narzucane
> przez PAM przy logowaniu itp mozna sobie w 4 litery wsadzic.
> 
> Jezeli jakis magik mialby pomysl jak to poprawic to bylbym niezmiernie
> wdzieczny, bo przekompilowywanie PAM z wymuszeniem uzycia getgrnam()
> jest bezsensowne.

Ta funkcja próbuje zwiększać bufor aż do PWD_ABSURD_PWD_LENGTH.
To jest zdefiniowane na 32kB - może za mało?

Z kolei manual jako maksymalny rozmiar bufora podaje
getconf(_SC_GETGR_R_SIZE_MAX), ale to jakaś bzdura (dla polecenia
getconf ta zmienna nazywa się inaczej):

$ getconf NSS_BUFLEN_GROUP
1024

Oficjalna dokumentacja (czyli info) nie podaje maksymalnego rozmiaru
bufora, ale w źródłach glibca 2.3.6 są pozostałości po tym 1024
(włącznie z nscd - tu mogą być problemy z długą listą członków!).


-- 
Jakub Bogusz    http://qboosh.cs.net.pl/


Więcej informacji o liście dyskusyjnej pld-devel-pl