diff --git a/fakeid.c b/fakeid.c index 7bd61a0..9d7d45d 100644 --- a/fakeid.c +++ b/fakeid.c @@ -1,10 +1,11 @@ #define _GNU_SOURCE -#include #include +#include +#include +#include #include #include -#include int getlogin_r(char *buf, size_t bufsize) { strncpy(buf, getenv("USER"), bufsize); @@ -13,7 +14,16 @@ int getlogin_r(char *buf, size_t bufsize) { struct passwd *getpwuid(uid_t uid) { struct passwd *(*getpwuid)(uid_t) = dlsym(RTLD_NEXT, "getpwuid"); + if (getpwuid == NULL) { + fprintf(stderr, "Unable to find the adress of the getpwuid function: %s\n", dlerror()); + return NULL; + } struct passwd *pass = getpwuid(uid); - pass->pw_name = getenv("USER"); + char *name = getenv("USER"); + if (name == NULL) { + fprintf(stderr, "Could not find the USER environment variable. Using the real username.\n"); + return pass; + } + pass->pw_name = name; return pass; }