Подробности

[В начало]

Проблема в стандарте № 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

[В начало]