23
("$Header: /cvs/openafs/src/afs/LINUX/osi_groups.c,v 1.25.2.7 2006/09/27 21:14:28 shadow Exp $");
23
("$Header: /cvs/openafs/src/afs/LINUX/osi_groups.c,v 1.25.2.8 2007/01/15 15:52:46 shadow Exp $");
25
25
#include "afs/sysincludes.h"
26
26
#include "afsincludes.h"
161
167
struct group_info *tmp;
169
#ifdef AFS_LINUX26_ONEGROUP_ENV
163
172
int need_space = 0;
165
174
group_info = afs_getgroups(*cr);
166
if (group_info->ngroups < 2
167
|| afs_get_pag_from_groups(GROUP_AT(group_info, 0),
168
GROUP_AT(group_info, 1)) == NOPAG)
175
if (group_info->ngroups < NUMPAGGROUPS
176
|| afs_get_pag_from_groups(
177
#ifdef AFS_LINUX26_ONEGROUP_ENV
180
GROUP_AT(group_info, 0) ,GROUP_AT(group_info, 1)
169
183
/* We will have to make sure group_info is big enough for pag */
184
need_space = NUMPAGGROUPS;
172
186
tmp = groups_alloc(group_info->ngroups + need_space);
188
*newpag = (pagvalue == -1 ? genpag() : pagvalue);
189
#ifdef AFS_LINUX26_ONEGROUP_ENV
190
for (i = 0, j = 0; i < group_info->ngroups; ++i) {
191
int ths = GROUP_AT(group_info, i);
192
int last = i > 0 ? GROUP_AT(group_info, i-1) : 0;
193
if ((ths >> 24) == 'A')
195
if (last <= *newpag && ths > *newpag) {
196
GROUP_AT(tmp, j) = *newpag;
199
GROUP_AT(tmp, j) = ths;
202
if (j != i + need_space)
203
GROUP_AT(tmp, j) = *newpag;
174
205
for (i = 0; i < group_info->ngroups; ++i)
175
206
GROUP_AT(tmp, i + need_space) = GROUP_AT(group_info, i);
176
208
put_group_info(group_info);
177
209
group_info = tmp;
179
*newpag = (pagvalue == -1 ? genpag() : pagvalue);
211
#ifndef AFS_LINUX26_ONEGROUP_ENV
180
212
afs_get_groups_from_pag(*newpag, &g0, &g1);
181
213
GROUP_AT(group_info, 0) = g0;
182
214
GROUP_AT(group_info, 1) = g1;
184
217
afs_setgroups(cr, group_info, change_parent);
524
557
if (datalen != sizeof(afs_uint32) || !data)
527
if (current->group_info->ngroups < 2)
560
if (current->group_info->ngroups < NUMPAGGROUPS)
530
563
/* ensure key being set matches current pag */
564
#ifdef AFS_LINUX26_ONEGROUP_ENV
565
pag = afs_get_pag_from_groups(current->group_info);
532
567
g0 = GROUP_AT(current->group_info, 0);
533
568
g1 = GROUP_AT(current->group_info, 1);
535
570
pag = afs_get_pag_from_groups(g0, g1);
536
572
if (pag == NOPAG)