X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/fdc65105f4da4796ea11ede295622deae7690c18..e06ec1e3e331c6f77df73fbcf0da5b733f22725a:/test/fakesmtp.c?ds=sidebyside diff --git a/test/fakesmtp.c b/test/fakesmtp.c index 05be6dea..7121c302 100644 --- a/test/fakesmtp.c +++ b/test/fakesmtp.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -34,6 +35,7 @@ main(int argc, char *argv[]) struct addrinfo hints, *res; int rc, l, conn, on, datamode; FILE *f, *pid; + pid_t child; fd_set readfd; struct stat st; struct timeval tv; @@ -118,6 +120,32 @@ main(int argc, char *argv[]) exit(1); } + /* + * Now we fork() and print out the process ID of our child + * for scripts to use. Once we do that, then exit. + */ + + child = fork(); + + switch (child) { + case -1: + fprintf(stderr, "Unable to fork child: %s\n", strerror(errno)); + exit(1); + break; + case 0: + /* + * Close stdin & stdout, otherwise people can + * think we're still doing stuff. For now leave stderr + * open. + */ + fclose(stdin); + fclose(stdout); + break; + default: + printf("%ld\n", (long) child); + exit(0); + } + /* * Now that our socket & files are set up, wait 30 seconds for * a connection. If there isn't one, then exit. @@ -202,6 +230,8 @@ main(int argc, char *argv[]) */ if (strcmp(line, "QUIT") == 0) { + fclose(f); + f = NULL; putsmtp(conn, "221 Later alligator!"); close(conn); break; @@ -213,7 +243,8 @@ main(int argc, char *argv[]) } } - fclose(f); + if (f) + fclose(f); exit(0); }