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