libinterfork: add and execve override
authorPierre-Marc Fournier <pierre-marc.fournier@polymtl.ca>
Fri, 25 Sep 2009 16:03:06 +0000 (12:03 -0400)
committerPierre-Marc Fournier <pierre-marc.fournier@polymtl.ca>
Fri, 25 Sep 2009 16:03:06 +0000 (12:03 -0400)
libinterfork/interfork.c

index 81f896e57ccb27ac2555dc0e0a3570bf13415d8b..cfdd2c475b79ae016ff470c0bb04a4dd0b358bf2 100644 (file)
@@ -22,6 +22,7 @@
 #include "share/usterr.h"
 
 extern void ust_fork(void);
+extern void ust_potential_exec(void);
 
 pid_t fork(void)
 {
@@ -44,3 +45,24 @@ pid_t fork(void)
 
        return retval;
 }
+
+int execve(const char *filename, char *const argv[], char *const envp[])
+{
+       static int (*plibc_func)(const char *filename, char *const argv[], char *const envp[]) = NULL;
+
+       pid_t retval;
+
+       if(plibc_func == NULL) {
+               plibc_func = dlsym(RTLD_NEXT, "execve");
+               if(plibc_func == NULL) {
+                       fprintf(stderr, "libcwrap: unable to find execve\n");
+                       return -1;
+               }
+       }
+
+       ust_potential_exec();
+
+       retval = plibc_func(filename, argv, envp);
+
+       return retval;
+}
This page took 0.024188 seconds and 4 git commands to generate.