From 7ddb8e6a67b11c7818cb74aede06dbee19a27c69 Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Mon, 28 Oct 1996 05:01:20 +0000 Subject: Don't open SMTP connection until it's needed. svn path=/trunk/; revision=408 --- driver.c | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/driver.c b/driver.c index f5cb2b26..928a8737 100644 --- a/driver.c +++ b/driver.c @@ -49,7 +49,8 @@ char tag[TAGLEN]; static int tagnum; #define GENSYM (sprintf(tag, "a%04d", ++tagnum), tag) -static char *shroud; +static int mboxfd; /* desc to which retrieved message will be written */ +static char *shroud; /* string to shroud in debug output, if non-NULL */ static int strcrlf(dst, src, count) /* replace LFs with CR-LF; return length of string with replacements */ @@ -448,10 +449,9 @@ struct idlist **xmit_names; /* list of recipient names parsed out */ } #endif /* HAVE_GETHOSTBYNAME */ -static int gen_readmsg (socket, mboxfd, len, delimited, ctl) +static int gen_readmsg (socket, len, delimited, ctl) /* read message content and ship to SMTP or MDA */ int socket; /* to which the server is connected */ -int mboxfd; /* descriptor to which retrieved message will be written */ long len; /* length of message */ int delimited; /* does the protocol use a message delimiter? */ struct query *ctl; /* query control record */ @@ -615,6 +615,17 @@ struct query *ctl; /* query control record */ } else { + if (ctl->mda[0] == '\0') + if ((mboxfd = Socket(ctl->smtphost, SMTP_PORT)) < 0 + || SMTP_ok(mboxfd, NULL) != SM_OK + || SMTP_helo(mboxfd, ctl->servername) != SM_OK) + { + close(mboxfd); + mboxfd = -1; + free_uid_list(&xmit_names); + return(PS_SMTP); + } + if (SMTP_from(mboxfd, nxtaddr(fromhdr)) != SM_OK) return(PS_SMTP); @@ -742,7 +753,7 @@ int do_protocol(ctl, proto) struct query *ctl; /* parsed options with merged-in defaults */ const struct method *proto; /* protocol method table */ { - int ok, mboxfd = -1; + int ok; void (*sigsave)(); #ifndef KERBEROS_V4 @@ -782,6 +793,7 @@ const struct method *proto; /* protocol method table */ tagnum = 0; tag[0] = '\0'; /* nuke any tag hanging out from previous query */ ok = 0; + mboxfd = -1; if (setjmp(restart) == 1) fprintf(stderr, @@ -867,18 +879,7 @@ const struct method *proto; /* protocol method table */ goto closeUp; } else if (count > 0) - { - if (ctl->mda[0] == '\0') - if ((mboxfd = Socket(ctl->smtphost, SMTP_PORT)) < 0 - || SMTP_ok(mboxfd, NULL) != SM_OK - || SMTP_helo(mboxfd, ctl->servername) != SM_OK) - { - ok = PS_SMTP; - close(mboxfd); - mboxfd = -1; - goto cleanUp; - } - + { /* read, forward, and delete messages */ for (num = 1; num <= count; num++) { @@ -921,7 +922,7 @@ const struct method *proto; /* protocol method table */ */ /* read the message and ship it to the output sink */ - ok = gen_readmsg(socket, mboxfd, + ok = gen_readmsg(socket, len, protocol->delimited, ctl); -- cgit v1.2.3