#include #include #include #include #include #define PATH_MAX 512 char * get_executable_path(char *); int main (int argc, char ** argv) { char *path; char *buffer = malloc(PATH_MAX); int facility = LOG_MAIL; int overwrite = 1; int i; char ** myargv = calloc((argc+2), sizeof(void *)); char *cmd = malloc(PATH_MAX+3); memset(buffer, '\0', PATH_MAX); memset(cmd, '\0', PATH_MAX+3); path=get_executable_path (buffer); if (!path) { printf("An error occured getting the path"); exit(1); } setlogmask (LOG_UPTO (LOG_INFO)); openlog("sendmail.wrapper", LOG_CONS | LOG_PID | LOG_NDELAY, facility); syslog(LOG_INFO, "sendmail executed from %s\n", path); // printf("sendmail executed from %s\n", path); closelog(); snprintf(cmd, PATH_MAX+2, "-f%s", path); memcpy(myargv, argv, argc*sizeof(char *)); myargv[argc] = cmd; free(buffer); execv("/var/qmail/bin/sendmail", myargv); // execv("/root/test.pl", myargv); return 0; } char * get_executable_path(char * buffer) { char *p, *t; if (readlink ("/proc/self/cwd", buffer, PATH_MAX) <= 0) return NULL; p = buffer+19; t = strchr(p, '/'); if (t) *t = '\0'; return p; }