Commit | Line | Data |
---|---|---|
95cee86b H |
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 | } |