Подробности
[В начало]
Проблема в стандарте № S0525
Краткое описание
Функция getgrouplist() записывает в переменную ngroups некорректное значение, если оказалось, что недостаточно места для всех дополнительных идентификаторов групп
Подробное описание
В соответствии со стандартом LSB 3.1, если оказалось, что места для копирования всех дополнительных идентификаторов групп недостаточно, то getgrouplist() должна возвращать -1 и записывать в переменную ngroups число реально скопированных идентификаторов.
Но например, если на Red Hat 4 пользователь 'root' является членом 8 групп, а подаваемый на вход массив имеет размер 2, то функция вернет -1, а в ngroups запишет 8.
Следующий код показывает эту проблему.
#include <stdio.h>
#include <grp.h>
#include <sys/types.h>
int main(int argc, char* argv[])
{
gid_t groups[2];
int ngroups=2;
int res;
res=getgrouplist("root", 1000, groups, &ngroups);
printf("res=%d\n", res);
printf("ngroups=%d\n", ngroups);
return 0;
}
Раздел стандарта
Linux Standard Base Core Specification 3.1, Chapter 13. Base Libraries, 13.5. Interface Definitions for libc, description of getgrouplist().
Способы устранения
Исправить LSB стандарт
Ссылки
Ссылок на проблему не найдено
Принято
LSB Bugzilla, 1639
Статус
Исправлена в LSB 3.1 Update 1
[В начало]