OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [uclinux/] [uC-libc/] [getent/] [initgroups.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 199 simons
/*
2
 * initgroups.c - This file is part of the libc-8086/grp package for ELKS,
3
 * Copyright (C) 1995, 1996 Nat Friedman <ndf@linux.mit.edu>.
4
 *
5
 *  This library is free software; you can redistribute it and/or
6
 *  modify it under the terms of the GNU Library General Public
7
 *  License as published by the Free Software Foundation; either
8
 *  version 2 of the License, or (at your option) any later version.
9
 *
10
 *  This library is distributed in the hope that it will be useful,
11
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13
 *  Library General Public License for more details.
14
 *
15
 *  You should have received a copy of the GNU Library General Public
16
 *  License along with this library; if not, write to the Free
17
 *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18
 *
19
 */
20
 
21
#include <unistd.h>
22
#include <string.h>
23
#include <fcntl.h>
24
#include <grp.h>
25
#include "config.h"
26
 
27
int
28
initgroups(__const char * user, gid_t gid)
29
{
30
  register struct group * group;
31
#ifndef GR_DYNAMIC_GROUP_LIST
32
  gid_t group_list[GR_MAX_GROUPS];
33
#else
34
  gid_t * group_list=NULL;
35
#endif
36
  register char ** tmp_mem;
37
  int num_groups;
38
  int grp_fd;
39
 
40
 
41
  if ((grp_fd=open("/etc/group", O_RDONLY))<0)
42
    return -1;
43
 
44
  num_groups=0;
45
#ifdef GR_DYNAMIC_GROUP_LIST
46
  group_list=(gid_t *) realloc(group_list, 1);
47
#endif
48
  group_list[num_groups]=gid;
49
#ifndef GR_DYNAMIC_GROUP_LIST
50
  while (num_groups<GR_MAX_GROUPS &&
51
         (group=__getgrent(grp_fd))!=NULL)
52
#else
53
  while ((group=__getgrent(grp_fd))!=NULL)
54
#endif      
55
    {
56
      if (group->gr_gid!=gid);
57
        {
58
          tmp_mem=group->gr_mem;
59
          while(*tmp_mem!=NULL)
60
            {
61
              if (!strcmp(*tmp_mem, user))
62
                {
63
                  num_groups++;
64
#ifdef GR_DYNAMIC_GROUP_LIST  
65
                  group_list=(gid_t *)realloc(group_list,
66
                                              num_groups*sizeof(gid_t *));
67
#endif            
68
                  group_list[num_groups]=group->gr_gid;
69
                }
70
              tmp_mem++;
71
            }
72
        }
73
    }
74
  close(grp_fd);
75
  return setgroups(num_groups, group_list);
76
}
77
 
78
 
79
 
80
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.