[Uneex] ядро
Constantin Stefanov
cstef на parallel.ru
Чт Окт 20 11:37:00 MSD 2005
Vladimir Ivanov wrote:
>>А как это в Linux? Есть возможность взять список групп, перечислить их
>>по одной и проверить, принадлежит ли пользователь группе не зная в
>>момент копиляции максимальное число этих групп? Я понимаю, что это
>>возможно, но это реально сделано?
>
> Как в Linux - не смотрел. В Solaris это - параметр ядра, который можно
> менять. Естественно, значение больше 16 ломает такие вещи, как NIS и,
> кажется, NFS, где под перечисление групп отведен фиксированный размер, а
> значение больше 32, по-моему, вообще не поддерживается. Увы, не помню,
> почему, но есть смутное ощущение, что это вытекает из POSIX.
>
> В Solaris, по-моему, передается указатель.
>
> По-поводу перечисления групп - а как в FreeBSD тогда getent работает?
> Его тоже пересобирать? А если в NIS-домене неконсистентен этот параметр,
> что будет?
Не, с getent всякими все в порядке. Проблемы будут именно с теми
приложениями, которые хотят проверить, не принадлежит ли пользователь
группе. Я не нашел способа эффективно это проверить, чтобы не выделять
память сразу под максимальное число групп. Т.е. есть getgrouplist, про
который я уже писал, он для пользователя выдаст список групп, в которые
тот входит, но место под список надо выделить заранее, а поскольку
NGROUPS_MAX - define, то придется пересобирать. Можно, конечно, обойти
это, используя getgrent, перебрать все группы и посмотреть, в каких из
них пользователь, но это неэффективно. Хотя, как я сейчас посмотрел,
getgrouplist работает через тот же самый getgrent, так что в принципе
можно написать приложение так, чтобы не надо было выделять место
заранее. Но об этом надо знать и писать соответственно. А сколько из
реальных приложений написано именно так - я не знаю.
--
Константин Стефанов
Подробная информация о списке рассылки Uneex