depmaker
[tridge/junkcode.git] / getgroups.c
1 #include <stdio.h>
2 #include <grp.h>
3 #include <pwd.h>
4 #include <sys/types.h>
5
6 int listgroups1(char *user)
7 {
8         struct passwd *pass;
9         struct group *grp;
10         int ngroups, i;
11         gid_t *grps;
12
13         pass = getpwnam(user);
14
15         initgroups(user, pass->pw_gid);
16
17         ngroups = getgroups(0, NULL);
18
19         grps = (gid_t *)malloc(ngroups * sizeof(gid_t));
20         
21         getgroups(ngroups, grps);
22
23         grp = getgrgid(pass->pw_gid);
24         printf("%5d %s\n", pass->pw_gid, grp->gr_name);
25
26         for (i=0;i<ngroups;i++) {
27                 grp = getgrgid(grps[i]);
28                 printf("%5d %s\n", grps[i], grp->gr_name);
29         }
30         return ngroups;
31 }
32
33 int listgroups2(char *user)
34 {
35         struct group *grp;
36         char *p;
37         int i;
38
39         setgrent();
40
41         while ((grp = getgrent())) {
42                 if (!grp->gr_mem) continue;
43                 for (i=0; grp->gr_mem[i]; i++) {
44                         if (strcmp(grp->gr_mem[i], user) == 0) {
45                                 printf("%s\n", grp->gr_name);
46                                 break;
47                         }
48                 }
49         }
50
51         endgrent();
52 }
53
54
55 void listgroups3(char *domain)
56 {
57         struct group *grp;
58         int len = strlen(domain);
59         
60         setgrent();
61
62         while ((grp = getgrent())) {
63                 if (strncasecmp(grp->gr_name, domain, len) == 0 &&
64                     grp->gr_name[len] == '/') {
65                         printf("%s\n", grp->gr_name);
66                 }
67         }
68
69         endgrent();
70
71 }
72
73 void listusers(void)
74 {
75         struct passwd *pass;    
76         setpwent();
77         while ((pass = getpwent())) {
78                         printf("%s\n", pass->pw_name);
79         }
80         endpwent();
81 }
82
83
84 main(int argc, char *argv[])
85 {
86         listusers();
87 }