commit d453be2ae1fc8fd84578cf5b9c56f6d1664fb3dd
parent fd8c3b643864c2e4be9fbb67c39bd5804ddcb245
Author: Rob Pilling <robpilling@gmail.com>
Date: Sun, 1 Dec 2013 11:40:49 +0000
id(1) can handle uid arguments
Diffstat:
M | id.1 | | | 6 | +++--- |
M | id.c | | | 51 | ++++++++++++++++++++++++++++++++++++--------------- |
2 files changed, 39 insertions(+), 18 deletions(-)
diff --git a/id.1 b/id.1
@@ -3,10 +3,10 @@
id \- print real and effective user and group IDs
.SH SYNOPSIS
.B id
-.RB [ user ]
+.RB [ user | uid ]
.SH DESCRIPTION
Print user and group information of the calling process to standard output.
-If a login name is specified, the user and group information of that user
-is displayed.
+If a login name or uid is specified, the user and group information of that
+user is displayed.
.SH SEE ALSO
.IR who(1)
diff --git a/id.c b/id.c
@@ -7,21 +7,22 @@
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
+#include <ctype.h>
#include "util.h"
static void user(struct passwd *pw);
+static void userid(uid_t id);
+static void usernam(const char *nam);
static void
usage(void)
{
- eprintf("usage: %s [user]\n", argv0);
+ eprintf("usage: %s [user | uid]\n", argv0);
}
int
main(int argc, char *argv[])
{
- struct passwd *pw;
-
ARGBEGIN {
default:
usage();
@@ -30,20 +31,14 @@ main(int argc, char *argv[])
errno = 0;
switch (argc) {
case 0:
- pw = getpwuid(getuid());
- if (errno != 0)
- eprintf("getpwuid %d:", getuid());
- else if (!pw)
- eprintf("getpwuid %d: no such user\n", getuid());
- user(pw);
+ userid(getuid());
break;
case 1:
- pw = getpwnam(argv[0]);
- if (errno != 0)
- eprintf("getpwnam %s:", argv[0]);
- else if (!pw)
- eprintf("getpwnam %s: no such user\n", argv[0]);
- user(pw);
+ /* user names can't begin [0-9] */
+ if (isdigit(argv[0][0]))
+ userid(estrtol(argv[0], 0));
+ else
+ usernam(argv[0]);
break;
default:
usage();
@@ -52,6 +47,32 @@ main(int argc, char *argv[])
return EXIT_SUCCESS;
}
+static void usernam(const char *nam)
+{
+ struct passwd *pw;
+
+ errno = 0;
+ pw = getpwnam(nam);
+ if (errno != 0)
+ eprintf("getpwnam %s:", nam);
+ else if (!pw)
+ eprintf("getpwnam %s: no such user\n", nam);
+ user(pw);
+}
+
+static void userid(uid_t id)
+{
+ struct passwd *pw;
+
+ errno = 0;
+ pw = getpwuid(id);
+ if (errno != 0)
+ eprintf("getpwuid %d:", id);
+ else if (!pw)
+ eprintf("getpwuid %d: no such user\n", id);
+ user(pw);
+}
+
static void
user(struct passwd *pw)
{