Pass any username by env variable

main
Clément FRÉVILLE 2 years ago
parent 48c1ebb8de
commit b92134ed11

@ -1,3 +1,5 @@
#!/bin/bash #!/bin/bash
USER="$1"
shift
LD_PRELOAD=$(dirname "$(readlink -f "$0")")/fakeid.so "$@" LD_PRELOAD=$(dirname "$(readlink -f "$0")")/fakeid.so "$@"

@ -1,20 +1,19 @@
#define _GNU_SOURCE #define _GNU_SOURCE
#include <stdlib.h>
#include <dlfcn.h> #include <dlfcn.h>
#include <string.h> #include <string.h>
#include <sys/types.h> #include <sys/types.h>
#include <pwd.h> #include <pwd.h>
char *username = "alice";
int getlogin_r(char *buf, size_t bufsize) { int getlogin_r(char *buf, size_t bufsize) {
strncpy(buf, username, bufsize); strncpy(buf, getenv("USER"), bufsize);
return 0; return 0;
} }
struct passwd *getpwuid(uid_t uid) { struct passwd *getpwuid(uid_t uid) {
struct passwd *(*getpwuid)(uid_t) = dlsym(RTLD_NEXT, "getpwuid"); struct passwd *(*getpwuid)(uid_t) = dlsym(RTLD_NEXT, "getpwuid");
struct passwd *pass = getpwuid(uid); struct passwd *pass = getpwuid(uid);
pass->pw_name = username; pass->pw_name = getenv("USER");
return pass; return pass;
} }

Loading…
Cancel
Save