/* syslog(LOG_DEBUG, "Trying <%s>\n", username); */
if (CtdlLoginExistingUser(NULL, ChrPtr(sSMTP->Cmd)) == login_ok) {
- CtdlEncodeBase64(buf, "Password:", 9, 0);
+ size_t len = CtdlEncodeBase64(buf, "Password:", 9, 0);
+
+ if (buf[len - 1] == '\n') {
+ buf[len - 1] = '\0';
+ }
cprintf("334 %s\r\n", buf);
sSMTP->command_state = smtp_password;
}
smtp_get_user(6);
}
else {
- CtdlEncodeBase64(username_prompt, "Username:", 9, 0);
+ size_t len = CtdlEncodeBase64(username_prompt, "Username:", 9, 0);
+ if (username_prompt[len - 1] == '\n') {
+ username_prompt[len - 1] = '\0';
+ }
cprintf("334 %s\r\n", username_prompt);
sSMTP->command_state = smtp_user;
}
*/
void smtp_command_loop(void)
{
+ static const ConstStr AuthPlainStr = {HKEY("AUTH PLAIN")};
struct CitContext *CCC = CC;
citsmtp *sSMTP = SMTP;
const char *pch, *pchs;
syslog(LOG_DEBUG, "SMTP server: %s\n", ChrPtr(sSMTP->Cmd));
if (sSMTP->command_state == smtp_user) {
- smtp_get_user(0);
+ if (!strncmp(ChrPtr(sSMTP->Cmd), AuthPlainStr.Key, AuthPlainStr.len))
+ smtp_try_plain(0, 0);
+ else
+ smtp_get_user(0);
return;
}