1 #include "loginexec.h" 2 #include <sys/types.h> 3 #if HAVE_SYS_STAT_H 4 #include <sys/stat.h> 5 #endif 6 #include <string.h> 7 #include <stdio.h> 8 #if HAVE_UNISTD_H 9 #include <unistd.h> 10 #endif 11 #if HAVE_SYS_WAIT_H 12 #include <sys/wait.h> 13 #endif 14 #include <stdlib.h> 15 16 #define LOGINEXEC_FILE "loginexec" 17 maildir_loginexec(void)18void maildir_loginexec(void) 19 { 20 #ifdef LOGINEXEC_FILE 21 struct stat buf; 22 pid_t pid; 23 int waitstat; 24 25 if (stat(LOGINEXEC_FILE, &buf) != 0 || (buf.st_mode & S_IXUSR) == 0) 26 return; 27 28 while ((pid=fork()) == -1) 29 { 30 sleep(5); 31 } 32 if (pid == 0) 33 { 34 execl("./" LOGINEXEC_FILE, LOGINEXEC_FILE, (char *)0); 35 perror("Failed to exec " LOGINEXEC_FILE); 36 exit(1); 37 } 38 while (wait(&waitstat) != pid) 39 ; 40 if (WIFEXITED(waitstat) && WEXITSTATUS(waitstat) == 0) 41 unlink(LOGINEXEC_FILE); 42 #endif 43 } 44