Add initial support for id(1)

This commit is contained in:
sin 2013-08-07 13:40:21 +01:00
parent bb39bc9596
commit cd592c9f23
3 changed files with 79 additions and 0 deletions

View File

@ -46,6 +46,7 @@ SRC = \
fold.c \
grep.c \
head.c \
id.c \
kill.c \
ln.c \
ls.c \

8
id.1 Normal file
View File

@ -0,0 +1,8 @@
.TH ID 1 sbase\-VERSION
.SH NAME
id \- print real and effective user and group IDs
.SH DESCRIPTION
.B id
Print user and group information for the current user.
.SH SEE ALSO
.IR who(1)

70
id.c Normal file
View File

@ -0,0 +1,70 @@
/* See LICENSE file for copyright and license details. */
#include <sys/types.h>
#include <unistd.h>
#include <pwd.h>
#include <grp.h>
#include <stdio.h>
#include <limits.h>
#include "util.h"
static void
usage(void)
{
eprintf("usage: %s\n", argv0);
}
int
main(int argc, char *argv[])
{
struct passwd *pw;
struct group *gr;
uid_t uid, euid;
gid_t gid, egid, groups[NGROUPS_MAX];
int ngroups;
int i;
ARGBEGIN {
default:
usage();
} ARGEND;
/* Print uid/euid info */
uid = getuid();
printf("uid=%u", uid);
if (!(pw = getpwuid(uid)))
eprintf("getpwuid:");
printf("(%s)", pw->pw_name);
if ((euid = geteuid()) != uid) {
printf(" euid=%u", euid);
if (!(pw = getpwuid(euid)))
eprintf("getpwuid:");
printf("(%s)", pw->pw_name);
}
/* Print gid/egid info */
gid = getgid();
printf(" gid=%u", gid);
if (!(gr = getgrgid(gid)))
eprintf("getgrgid:");
printf("(%s)", gr->gr_name);
if ((egid = getegid()) != gid) {
printf(" egid=%u", egid);
if (!(gr = getgrgid(egid)))
eprintf("getgrgid:");
printf("(%s)", gr->gr_name);
}
/* Print groups */
ngroups = getgroups(NGROUPS_MAX, groups);
if (ngroups < 0)
eprintf("getgroups:");
for (i = 0; i < ngroups; i++) {
gid = groups[i];
printf("%s%u", !i ? " groups=" : ",", gid);
if (!(gr = getgrgid(gid)))
eprintf("getgrgid:");
printf("(%s)", gr->gr_name);
}
putchar('\n');
return 0;
}