56 #ifdef STRCASECMP_IN_STRINGS_H
79 static const char *smtp_sasl_compat_mechs(
const char *words)
98 save_mech = mech_list =
mystrdup(words);
100 while ((mech =
mystrtok(&mech_list,
" \t")) != 0) {
116 const char *mech_list = smtp_sasl_compat_mechs(words);
126 if (session->sasl_mechanism_list) {
127 if (
strcasecmp(session->sasl_mechanism_list, mech_list) != 0
128 && strlen(mech_list) > 0
130 junk =
concatenate(session->sasl_mechanism_list,
" ", mech_list,
132 myfree(session->sasl_mechanism_list);
133 session->sasl_mechanism_list = junk;
137 if (strlen(mech_list) > 0) {
138 session->sasl_mechanism_list =
mystrdup(mech_list);
140 msg_warn(*words ?
"%s offered no supported AUTH mechanisms: '%s'" :
141 "%s offered null AUTH mechanism list%s",
172 if (session->sasl_mechanism_list == 0) {
173 dsb_simple(why,
"4.7.0",
"SASL authentication failed: "
174 "server %s offered no compatible authentication mechanisms for this type of connection security",
182 if (session->tls_context == 0)
185 else if (TLS_CERT_IS_MATCHED(session->tls_context))
int smtp_sasl_passwd_lookup(SMTP_SESSION *)
struct SMTP_SESSION * session
char * mystrdup(const char *str)
char * var_smtp_sasl_tls_opts
int smtp_sess_fail(SMTP_STATE *)
char * mystrtok(char **src, const char *sep)
int smtp_sasl_helo_login(SMTP_STATE *)
char * var_smtp_sasl_opts
void smtp_sasl_start(SMTP_SESSION *, const char *, const char *)
#define VSTRING_TERMINATE(vp)
#define string_list_match
#define VSTRING_ADDCH(vp, ch)
void smtp_sasl_helo_auth(SMTP_SESSION *, const char *)
#define VSTRING_RESET(vp)
void msg_warn(const char *fmt,...)
VSTRING * vstring_alloc(ssize_t len)
char * var_smtp_sasl_tlsv_opts
DSN_BUF * dsb_simple(DSN_BUF *dsb, const char *status, const char *format,...)
int smtp_sasl_authenticate(SMTP_SESSION *, DSN_BUF *)
char * concatenate(const char *arg0,...)
#define SMTP_FEATURE_AUTH
int strcasecmp(const char *s1, const char *s2)
STRING_LIST * smtp_sasl_mechs
VSTRING * vstring_strcat(VSTRING *vp, const char *src)