| 1 | #define _GNU_SOURCE |
| 2 | #include <stdio.h> |
| 3 | #include <sys/types.h> |
| 4 | #include <dlfcn.h> |
| 5 | #include <stdarg.h> |
| 6 | |
| 7 | int rand(void) { return 23; } |
| 8 | int random(void) { return 23; } |
| 9 | |
| 10 | static const char *redirect_name(const char *name) |
| 11 | { |
| 12 | if(strcmp(name,"/dev/random") == 0) return "/dev/zero"; |
| 13 | if(strcmp(name,"/dev/urandom") == 0) return "/dev/zero"; |
| 14 | return name; |
| 15 | } |
| 16 | |
| 17 | int open(const char *filename, int flags, ...) |
| 18 | { |
| 19 | static int (*open_orig)(const char *, int, mode_t); |
| 20 | int ret; |
| 21 | va_list ap; |
| 22 | mode_t mode; |
| 23 | |
| 24 | if (!open_orig) { |
| 25 | open_orig = dlsym(RTLD_NEXT, "open"); |
| 26 | } |
| 27 | |
| 28 | va_start(ap, flags); |
| 29 | mode = va_arg(ap, mode_t); |
| 30 | va_end(ap); |
| 31 | |
| 32 | ret = open_orig(redirect_name(filename), flags, mode); |
| 33 | |
| 34 | printf("open(\"%s\", 0x%x, %o) -> %d\n", filename, flags, mode, ret); |
| 35 | |
| 36 | return ret; |
| 37 | } |