Skip to content

Instantly share code, notes, and snippets.

@andrewshulgin
Created February 3, 2019 18:30
Show Gist options
  • Save andrewshulgin/e31e5c0eaa5b07d51241477908408e57 to your computer and use it in GitHub Desktop.
Save andrewshulgin/e31e5c0eaa5b07d51241477908408e57 to your computer and use it in GitHub Desktop.
/*
* gcc -fPIC -Wall -ldl -shared -o pwd_override.so -Wl,-soname,pwd_override.so pwd_override.c
*/
#define _GNU_SOURCE
#include <pwd.h>
#include <stdio.h>
#include <dlfcn.h>
extern struct passwd *getpwuid(__uid_t __uid) {
static void *(*my_getpwuid)(__uid_t) = NULL;
printf("getpwuid %d\n", __uid);
if (!my_getpwuid)
my_getpwuid = dlsym(RTLD_NEXT, "getpwuid");
return my_getpwuid(__uid);
}
extern struct passwd *getpwnam(const char *__name) {
static void *(*my_getpwnam)(const char *) = NULL;
printf("getpwnam %s\n", __name);
if (!my_getpwnam)
my_getpwnam = dlsym(RTLD_NEXT, "getpwnam");
return my_getpwnam(__name);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment