1
2
3
4
5
6 using System;
7 using System.Os;
8 using System.Security;
9
10 void PrintHelp()
11 {
12 Console.Out() << "Usage: whoami [options]" << endl() << endl();
13 Console.Out() << "Prints the user ID and user name of the current user to standard output." << endl();
14 Console.Out() << "Options:" << endl() << endl();
15 Console.Out() << "--help | -h" << endl();
16 Console.Out() << " Print help and exit." << endl() << endl();
17 }
18
19 int main(int argc, const char** argv)
20 {
21 try
22 {
23 for (int i = 1; i < argc; ++i;)
24 {
25 string arg = argv[i];
26 if (arg.StartsWith("--"))
27 {
28 if (arg == "--help")
29 {
30 PrintHelp();
31 return 1;
32 }
33 else
34 {
35 throw Exception("unknown option '" + arg + "'");
36 }
37 }
38 else if (arg.StartsWith("-"))
39 {
40 string options = arg.Substring(1);
41 if (options.IsEmpty())
42 {
43 throw Exception("unknown argument '" + arg + "'");
44 }
45 else
46 {
47 bool unknown = false;
48 string uo;
49 for (char o : options)
50 {
51 switch (o)
52 {
53 case 'h':
54 {
55 PrintHelp();
56 return 1;
57 }
58 default:
59 {
60 unknown = true;
61 uo.Append(o);
62 break;
63 }
64 }
65 if (unknown)
66 {
67 throw Exception("unknown option '-" + uo + "'");
68 }
69 }
70 }
71 }
72 else
73 {
74 throw Exception("unknown argument '" + arg + "'");
75 }
76 }
77 int uid = GetUID();
78 Users users = GetUsers();
79 User* user = users.GetUser(uid);
80 if (user != null)
81 {
82 Console.Out() << user->UID() << ":" << user->Name() << endl();
83 }
84 else
85 {
86 throw SystemError(ENOTFOUND, "user id " + ToString(uid) + " not found");
87 }
88 }
89 catch (const Exception& ex)
90 {
91 Console.Error() << ex.ToString() << endl();
92 return 1;
93 }
94 return 0;
95 }