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, ...);
const char *oauth_svc, int tls)
{
int result, sd1;
- char *errstr;
+ char *errstr, *chosen_server;
if (watch)
verbose = TRUE;
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);
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);
}
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;
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;
if (netsec_write(nsc, ".", 1, &errstr) != OK) {
sm_nerror(errstr);
return NOTOK;
- } /* FALL THROUGH */
+ }
+ /* FALLTHRU */
default:
sm_nl = FALSE;