X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/bc237bbae1393cacee9d534832a050f1148b0d8b..9ff9b53565e403ca0792b23385e610e8c32a06f3:/mts/smtp/smtp.c diff --git a/mts/smtp/smtp.c b/mts/smtp/smtp.c index 0e6e5116..78f83556 100644 --- a/mts/smtp/smtp.c +++ b/mts/smtp/smtp.c @@ -81,7 +81,7 @@ static int smtp_init (char *, char *, char *, int, int, int, int, const char *, static int sendmail_init (char *, int, int, int, int, const char *, const char *); -static int rclient (char *, char *); +static int rclient (char *, char *, char **); static int sm_ierror (const char *fmt, ...); static int sm_nerror (char *); static int smtalk (int time, char *fmt, ...); @@ -111,7 +111,7 @@ smtp_init (char *client, char *server, char *port, int watch, int verbose, const char *oauth_svc, int tls) { int result, sd1; - char *errstr; + char *errstr, *chosen_server; if (watch) verbose = TRUE; @@ -141,7 +141,14 @@ smtp_init (char *client, char *server, char *port, int watch, int verbose, if (user) netsec_set_userid(nsc, user); - netsec_set_hostname(nsc, server); + if ((sd1 = rclient (server, port, &chosen_server)) == NOTOK) + return RP_BHST; + + SIGNAL (SIGPIPE, SIG_IGN); + + netsec_set_fd(nsc, sd1, sd1); + + netsec_set_hostname(nsc, chosen_server); if (sm_debug) netsec_set_snoop(nsc, 1); @@ -157,13 +164,6 @@ smtp_init (char *client, char *server, char *port, int watch, int verbose, return sm_ierror("OAuth2 not supported"); } - if ((sd1 = rclient (server, port)) == NOTOK) - return RP_BHST; - - SIGNAL (SIGPIPE, SIG_IGN); - - netsec_set_fd(nsc, sd1, sd1); - if (tls & S_TLSENABLEMASK) { if (netsec_set_tls(nsc, 1, tls & S_NOVERIFY, &errstr) != OK) return sm_nerror(errstr); @@ -426,11 +426,16 @@ sendmail_init (char *client, int watch, int verbose, int debug, int sasl, } static int -rclient (char *server, char *service) +rclient (char *server, char *service, char **chosen_server) { int sd; char response[BUFSIZ]; + if (server == NULL) + server = servers; + + *chosen_server = server; + if ((sd = client (server, service, response, sizeof(response), sm_debug)) != NOTOK) return sd; @@ -618,7 +623,8 @@ sm_end (int type) case NOTOK: sm_note.code = sm_reply.code; sm_note.length = sm_reply.length; - memcpy (sm_note.text, sm_reply.text, sm_reply.length + 1);/* fall */ + memcpy (sm_note.text, sm_reply.text, sm_reply.length + 1); + /* FALLTHRU */ case DONE: if (smtalk (SM_RSET, "RSET") == 250 && type == DONE) return RP_OK; @@ -759,7 +765,8 @@ sm_wstream (char *buffer, int len) if (netsec_write(nsc, ".", 1, &errstr) != OK) { sm_nerror(errstr); return NOTOK; - } /* FALL THROUGH */ + } + /* FALLTHRU */ default: sm_nl = FALSE;