|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)groups.c 4.8 (Berkeley) 9/25/83"; ! 3: #endif ! 4: ! 5: /* ! 6: * groups ! 7: */ ! 8: ! 9: #include <sys/param.h> ! 10: #include <grp.h> ! 11: #include <pwd.h> ! 12: #include <stdio.h> ! 13: ! 14: int groups[NGROUPS]; ! 15: ! 16: main(argc, argv) ! 17: int argc; ! 18: char *argv[]; ! 19: { ! 20: int ngroups, i; ! 21: char *sep = ""; ! 22: struct group *gr; ! 23: ! 24: if (argc > 1) ! 25: showgroups(argv[1]); ! 26: ngroups = getgroups(NGROUPS, groups); ! 27: for (i = 0; i < ngroups; i++) { ! 28: gr = getgrgid(groups[i]); ! 29: if (gr == NULL) ! 30: printf("%s%d", sep, groups[i]); ! 31: else ! 32: printf("%s%s", sep, gr->gr_name); ! 33: sep = " "; ! 34: } ! 35: printf("\n"); ! 36: exit(0); ! 37: } ! 38: ! 39: showgroups(user) ! 40: register char *user; ! 41: { ! 42: register struct group *gr; ! 43: register struct passwd *pw; ! 44: register char **cp; ! 45: char *sep = ""; ! 46: ! 47: if ((pw = getpwnam(user)) == NULL) { ! 48: fprintf(stderr, "No such user\n"); ! 49: exit(1); ! 50: } ! 51: while (gr = getgrent()) { ! 52: if (pw->pw_gid == gr->gr_gid) { ! 53: printf("%s%s", sep, gr->gr_name); ! 54: sep = " "; ! 55: continue; ! 56: } ! 57: for (cp = gr->gr_mem; cp && *cp; cp++) ! 58: if (strcmp(*cp, user) == 0) { ! 59: printf("%s%s", sep, gr->gr_name); ! 60: sep = " "; ! 61: break; ! 62: } ! 63: } ! 64: printf("\n"); ! 65: exit(0); ! 66: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.