aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--toys/id.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/toys/id.c b/toys/id.c
new file mode 100644
index 00000000..f051189b
--- /dev/null
+++ b/toys/id.c
@@ -0,0 +1,56 @@
+/* vi: set sw=4 ts=4:
+ *
+ * id.c - print real and effective user and group IDs
+ *
+ * Copyright 2012 Sony Network Entertainment, Inc.
+ *
+ * by Tim Bird <tim.bird@am.sony.com>
+ *
+ * See http://www.opengroup.org/onlinepubs/009695399/utilities/id.html
+
+USE_ID(NEWTOY(id, "gru", TOYFLAG_BIN))
+
+config ID
+ bool "id"
+ default y
+ help
+ usage: id [-gru]
+
+ Print user and group ID.
+
+ -g Show only the effective group ID
+ -r Show real ID instead of effective ID
+ -u Show only the effective user ID
+*/
+
+#include "toys.h"
+
+#define FLAG_g (1<<2)
+#define FLAG_r (1<<1)
+#define FLAG_u 1
+
+void id_main(void)
+{
+ int flags = toys.optflags;
+
+ uid_t uid;
+ gid_t gid;
+
+ /* show effective, unless user specifies real */
+ uid = geteuid();
+ gid = getegid();
+
+ if (flags & FLAG_r) {
+ uid = getuid();
+ gid = getgid();
+ }
+ if (flags & FLAG_u) {
+ printf("%d\n", uid);
+ return;
+ }
+ if (flags & FLAG_g) {
+ printf("%d\n", gid);
+ return;
+ }
+ printf("%d %d\n", uid, gid);
+}