Back to index

courier  0.68.2
loginexec.c
Go to the documentation of this file.
00001 #include      "loginexec.h"
00002 #include      <sys/types.h>
00003 #if    HAVE_SYS_STAT_H
00004 #include      <sys/stat.h>
00005 #endif
00006 #include      <string.h>
00007 #include      <stdio.h>
00008 #if    HAVE_UNISTD_H
00009 #include      <unistd.h>
00010 #endif
00011 #if    HAVE_SYS_WAIT_H
00012 #include      <sys/wait.h>
00013 #endif
00014 #include      <stdlib.h>
00015 
00016 #define LOGINEXEC_FILE "loginexec"
00017 
00018 void maildir_loginexec(void)
00019 {
00020 #ifdef LOGINEXEC_FILE
00021 struct stat buf;
00022 pid_t pid;
00023 int waitstat;
00024 
00025        if (stat(LOGINEXEC_FILE, &buf) != 0 || (buf.st_mode & S_IXUSR) == 0)
00026               return;
00027 
00028        while ((pid=fork()) == -1)
00029        {
00030               sleep(5);
00031        }
00032        if (pid == 0)
00033        {
00034               execl("./" LOGINEXEC_FILE, LOGINEXEC_FILE, (char *)0);
00035               perror("Failed to exec " LOGINEXEC_FILE);
00036               exit(1);
00037        }
00038        while (wait(&waitstat) != pid)
00039               ;
00040        if (WIFEXITED(waitstat) && WEXITSTATUS(waitstat) == 0)
00041               unlink(LOGINEXEC_FILE);
00042 #endif
00043 }