Update the default config to not ask stuff
[oweals/busybox.git] / coreutils / id.c
1 /* vi: set sw=4 ts=4: */
2 /*
3  * Mini id implementation for busybox
4  *
5  * Copyright (C) 2000 by Randolph Chung <tausq@debian.org>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20  *
21  */
22
23 /* BB_AUDIT SUSv3 _NOT_ compliant -- option -G is not currently supported. */
24
25 #include "busybox.h"
26 #include <stdio.h>
27 #include <unistd.h>
28 #include <getopt.h>
29 #include <string.h>
30 #include <sys/types.h>
31 #ifdef CONFIG_SELINUX
32 #include <proc_secure.h>
33 #include <flask_util.h>
34 #endif
35
36 #define JUST_USER         1
37 #define JUST_GROUP        2
38 #define PRINT_REAL        4
39 #define NAME_NOT_NUMBER   8
40
41 extern int id_main(int argc, char **argv)
42 {
43         char user[9], group[9];
44         long pwnam, grnam;
45         int uid, gid;
46         int flags;
47 #ifdef CONFIG_SELINUX
48         int is_flask_enabled_flag = is_flask_enabled();
49 #endif
50
51         flags = bb_getopt_ulflags(argc, argv, "ugrn");
52
53         if (((flags & (JUST_USER | JUST_GROUP)) == (JUST_USER | JUST_GROUP))
54                 || (argc > optind + 1)
55         ) {
56                 bb_show_usage();
57         }
58
59         if (argv[optind] == NULL) {
60                 if (flags & PRINT_REAL) {
61                         uid = getuid();
62                         gid = getgid();
63                 } else {
64                         uid = geteuid();
65                         gid = getegid();
66                 }
67                 my_getpwuid(user, uid);
68         } else {
69                 safe_strncpy(user, argv[optind], sizeof(user));
70             gid = my_getpwnamegid(user);
71         }
72         my_getgrgid(group, gid);
73
74         pwnam=my_getpwnam(user);
75         grnam=my_getgrnam(group);
76
77         if (flags & (JUST_GROUP | JUST_USER)) {
78                 char *s = group;
79                 if (flags & JUST_USER) {
80                         s = user;
81                         grnam = pwnam;
82                 }
83                 if (flags & NAME_NOT_NUMBER) {
84                         puts(s);
85                 } else {
86                         printf("%ld\n", grnam);
87                 }
88         } else {
89 #ifdef CONFIG_SELINUX
90                 printf("uid=%ld(%s) gid=%ld(%s)", pwnam, user, grnam, group);
91                 if(is_flask_enabled_flag)
92                 {
93                         security_id_t mysid = getsecsid();
94                         char context[80];
95                         int len = sizeof(context);
96                         context[0] = '\0';
97                         if(security_sid_to_context(mysid, context, &len))
98                                 strcpy(context, "unknown");
99                         printf(" context=%s\n", context);
100                 }
101                 else
102                         printf("\n");
103 #else
104                 printf("uid=%ld(%s) gid=%ld(%s)\n", pwnam, user, grnam, group);
105 #endif
106
107         }
108
109         bb_fflush_stdout_and_exit(0);
110 }