4 gcc -c -fPIC preload_open.c
5 ld -shared -o preload_open.so preload_open.o -ldl
7 export LD_PRELOAD=/etc/magic/preload_open.so
14 #include <sys/types.h>
22 static void do_magic(const char *pathname)
24 const char *magic_script;
26 magic_script = getenv("MAGIC_SCRIPT");
34 asprintf(&s, "%s '%s'", magic_script, pathname);
40 printf("doing magic '%s'\n", magic_script);
46 int open64(const char *pathname, int flags, ...)
50 static int (*real_open)(const char *, int, mode_t );
55 mode = va_arg(ap, mode_t);
59 return real_open(pathname, flags, mode);
65 real_open = dlsym((void *)-1, "open64");
68 ret = real_open(pathname, flags, mode);
72 if (ret == -1 && errno == ENOENT) {
74 ret = real_open(pathname, flags, mode);
83 int open(const char *pathname, int flags, ...)
87 static int (*real_open)(const char *, int, mode_t );
92 mode = va_arg(ap, mode_t);
96 return real_open(pathname, flags, mode);
102 real_open = dlsym((void *)-1, "open");
105 ret = real_open(pathname, flags, mode);
109 if (ret == -1 && errno == ENOENT) {
111 ret = real_open(pathname, flags, mode);