/* * gcc time_past.c -o time_past.so -shared -ldl * LD_PRELOAD=./time_past.so PAST_DAYS=2 ./test */ #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include #include typedef time_t (*time_type) (time_t *t); static time_type next_time; static int time_past = 0; static char *past = NULL; time_t time (time_t *t) { time_t res; if (NULL == next_time) { next_time = dlsym (RTLD_NEXT, "time"); assert (NULL != next_time); } if (NULL == past) { const char *past = getenv ("PAST_DAYS"); if (NULL == past) { fputs ("No PAST_DAYS defined\n", stderr); } time_past = atoi (past); } res = next_time (t); res -= 24*60*60*time_past; if (NULL != t) { *t = res; } return res; }