id.c revision dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0
1dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <stdio.h>
2dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <stdlib.h>
3dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <unistd.h>
4dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <sys/types.h>
5dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <pwd.h>
6dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <grp.h>
7dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
8dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic void print_uid(uid_t uid)
9dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{
10dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    struct passwd *pw = getpwuid(uid);
11dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
12dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    if (pw) {
13dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        printf("%d(%s)", uid, pw->pw_name);
14dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    } else {
15dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        printf("%d",uid);
16dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    }
17dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project}
18dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
19dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic void print_gid(gid_t gid)
20dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{
21dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    struct group *gr = getgrgid(gid);
22dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    if (gr) {
23dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        printf("%d(%s)", gid, gr->gr_name);
24dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    } else {
25dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        printf("%d",gid);
26dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    }
27dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project}
28dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
29dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectint id_main(int argc, char **argv)
30dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{
31dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    gid_t list[64];
32dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    int n, max;
33dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
34dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    max = getgroups(64, list);
35dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    if (max < 0) max = 0;
36dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
37dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    printf("uid=");
38dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    print_uid(getuid());
39dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    printf(" gid=");
40dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    print_gid(getgid());
41dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    if (max) {
42dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        printf(" groups=");
43dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        print_gid(list[0]);
44dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        for(n = 1; n < max; n++) {
45dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project            printf(",");
46dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project            print_gid(list[n]);
47dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        }
48dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    }
49dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    printf("\n");
50dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    return 0;
51dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project}
52