diff options
author | Eric S. Raymond <esr@thyrsus.com> | 1998-02-20 03:48:19 +0000 |
---|---|---|
committer | Eric S. Raymond <esr@thyrsus.com> | 1998-02-20 03:48:19 +0000 |
commit | cb8de067edef1f659ec465cdb08b518ab8c37a59 (patch) | |
tree | 3e6f93f1a5e979b5fb13d9a5f22d9c8f6551571e /driver.c | |
parent | fb1b1a429b783665c2697b5fb00c78013a138ed7 (diff) | |
download | fetchmail-cb8de067edef1f659ec465cdb08b518ab8c37a59.tar.gz fetchmail-cb8de067edef1f659ec465cdb08b518ab8c37a59.tar.bz2 fetchmail-cb8de067edef1f659ec465cdb08b518ab8c37a59.zip |
We can specify target ports now.
svn path=/trunk/; revision=1657
Diffstat (limited to 'driver.c')
-rw-r--r-- | driver.c | 25 |
1 files changed, 22 insertions, 3 deletions
@@ -466,11 +466,30 @@ static int smtp_open(struct query *ctl) */ for (idp = ctl->smtphunt; idp; idp = idp->next) { + char *cp, *parsed_host = alloca(strlen(idp->id) + 1); +#ifdef INET6 + char *portnum = SMTP_PORT; +#else + int portnum = SMTP_PORT; +#endif /* INET6 */ + ctl->smtphost = idp->id; /* remember last host tried. */ - if ((ctl->smtp_socket = SockOpen(idp->id,SMTP_PORT)) == -1) + strcpy(parsed_host, idp->id); + if ((cp = strrchr(parsed_host, '/'))) + { + *cp++ = 0; +#ifdef INET6 + portnum = cp; +#else + portnum = atoi(cp); +#endif /* INET6 */ + } + + if ((ctl->smtp_socket = SockOpen(parsed_host,portnum)) == -1) continue; + /* first, probe for ESMTP */ if (SMTP_ok(ctl->smtp_socket) == SM_OK && SMTP_ehlo(ctl->smtp_socket, id_me, &ctl->server.esmtp_options) == SM_OK) @@ -484,7 +503,7 @@ static int smtp_open(struct query *ctl) ctl->smtp_socket = -1; /* if opening for ESMTP failed, try SMTP */ - if ((ctl->smtp_socket = SockOpen(idp->id,SMTP_PORT)) == -1) + if ((ctl->smtp_socket = SockOpen(parsed_host,portnum)) == -1) continue; if (SMTP_ok(ctl->smtp_socket) == SM_OK && @@ -497,7 +516,7 @@ static int smtp_open(struct query *ctl) } if (outlevel >= O_VERBOSE && ctl->smtp_socket != -1) - error(0, 0, "forwarding to SMTP port on %s", ctl->smtphost); + error(0, 0, "forwarding to %s", ctl->smtphost); return(ctl->smtp_socket); } |