diff --git a/userspace/id/CMakeLists.txt b/userspace/id/CMakeLists.txt index 1cf2c33d..3da67b0a 100644 --- a/userspace/id/CMakeLists.txt +++ b/userspace/id/CMakeLists.txt @@ -8,7 +8,7 @@ set(SOURCES add_executable(id ${SOURCES}) target_compile_options(id PUBLIC -O2 -g) -target_link_libraries(id PUBLIC libc) +target_link_libraries(id PUBLIC libc ban) add_custom_target(id-install COMMAND cp ${CMAKE_CURRENT_BINARY_DIR}/id ${BANAN_BIN}/ diff --git a/userspace/id/main.cpp b/userspace/id/main.cpp index 567be574..1cf102b7 100644 --- a/userspace/id/main.cpp +++ b/userspace/id/main.cpp @@ -1,7 +1,36 @@ #include #include +#include int main() { - printf("uid %u, gid %u, euid %u, egid %u\n", getuid(), getgid(), geteuid(), getegid()); + uid_t uid = getuid(); + uid_t euid = geteuid(); + + gid_t gid = getgid(); + gid_t egid = getegid(); + + passwd* pw_uid = getpwuid(uid); + if (pw_uid == nullptr) + { + fprintf(stderr, "Unknown user #%d\n", uid); + return 1; + } + + passwd* pw_euid = getpwuid(euid); + if (pw_euid == nullptr) + { + fprintf(stderr, "Unknown user #%d\n", euid); + return 1; + } + + printf("uid=%u(%s)", uid, pw_uid->pw_name); + if (uid != euid) + printf(",euid=%u(%s)",euid, pw_euid->pw_name); + + printf(" gid=%u", gid); + if (gid != egid) + printf(",egid=%u", egid); + + printf("\n"); }