[devel] nfs mountd --manage-gids problem

Pavel Shilovsky piastry на altlinux.org
Ср Июн 1 18:25:01 UTC 2011


1 июня 2011 г. 19:11 пользователь Rinat Bikov <becase на altlinux.org> написал:
> 1 июня 2011 г. 16:20 Pavel Shilovsky написал:
>> Собственно вопроса два:
>> 1) чем может быть объяснено такое странное поведение getgrouplist со
>> статик переменными (проверял его отдельно, вне кода mountd)?
> Отладил в gdb, разобрался: ngroups у вас 0 в случае использования
> static при вызове getgrouplist :).
> А это ожидаемая длинна массива :).

Спасибо, я теперь понял в чём дело! Так как groups_len в
последующих вызовах уже не 0, то ngroups не меняется из-за условия:
 145 >-------if (groups_len == 0) {
 146 >------->-------groups = malloc(sizeof(gid_t) * INITIAL_MANAGED_GROUPS);
 147 >------->-------if (!groups)
 148 >------->------->-------return;
 149
 150 >------->-------groups_len = ngroups = INITIAL_MANAGED_GROUPS;
 151 >-------}

Видимо, можно просто наложить такой патч:
diff --git a/utils/mountd/cache.c b/utils/mountd/cache.c
index df6b38f..8248e9c 100644
--- a/utils/mountd/cache.c
+++ b/utils/mountd/cache.c
@@ -147,9 +147,11 @@ static void auth_unix_gid(FILE *f)
               if (!groups)
                       return;

-               groups_len = ngroups = INITIAL_MANAGED_GROUPS;
+               groups_len = INITIAL_MANAGED_GROUPS;
       }

+       ngroups = groups_len;
+
       if (readline(fileno(f), &lbuf, &lbuflen) != 1)
               return;

--
Best regards,
Pavel Shilovsky.


Подробная информация о списке рассылки Devel