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)18 void 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