- setgrp(0, grps);
- for (i = 0; i < NGRPS; i++)
- if (grps[i/(sizeof(int)*8)] & (1<<(i%(sizeof(int)*8)))) {
- gr = getgrgid(i);
- if (gr == NULL)
- printf("%s%d", sep, i);
- else
+ if (argc > 1)
+ showgroups(argv[1]);
+ ngroups = getgroups(NGROUPS, groups);
+ for (i = 0; i < ngroups; i++) {
+ gr = getgrgid(groups[i]);
+ if (gr == NULL)
+ printf("%s%d", sep, groups[i]);
+ else
+ printf("%s%s", sep, gr->gr_name);
+ sep = " ";
+ }
+ printf("\n");
+ exit(0);
+}
+
+showgroups(user)
+ register char *user;
+{
+ register struct group *gr;
+ register char **cp;
+ char *sep = "";
+
+ while (gr = getgrent())
+ for (cp = gr->gr_mem; cp && *cp; cp++)
+ if (strcmp(*cp, user) == 0) {