- execl(_PATH_SENDMAIL, "sendmail", "-f", myname, from, NULL);
- syslog(LOG_ERR, "vacation: can't exec %s.\n", _PATH_SENDMAIL);
- exit(1);
+ if (pipe(pvect) < 0) {
+ syslog(LOG_ERR, "vacation: pipe: %s", strerror(errno));
+ exit(1);
+ }
+ i = vfork();
+ if (i < 0) {
+ syslog(LOG_ERR, "vacation: fork: %s", strerror(errno));
+ exit(1);
+ }
+ if (i == 0) {
+ dup2(pvect[0], 0);
+ close(pvect[0]);
+ close(pvect[1]);
+ fclose(mfp);
+ execl(_PATH_SENDMAIL, "sendmail", "-f", myname, from, NULL);
+ syslog(LOG_ERR, "vacation: can't exec %s: %s",
+ _PATH_SENDMAIL, strerror(errno));
+ exit(1);
+ }
+ close(pvect[0]);
+ sfp = fdopen(pvect[1], "w");
+ fprintf(sfp, "To: %s\n", from);
+ while (fgets(buf, sizeof buf, mfp))
+ fputs(buf, sfp);
+ fclose(mfp);
+ fclose(sfp);