X-Git-Url: https://code.citadel.org/?p=citadel.git;a=blobdiff_plain;f=citadel%2Fmodules%2Fimap%2Fserv_imap.c;fp=citadel%2Fmodules%2Fimap%2Fserv_imap.c;h=4b3e146cef6f40ef696311400cf4627811fe8f28;hp=1290276e27fec9c17980cf8fe112fce2d33efc21;hb=798de81c6bb695516dda1d32a324fff56b3fc0a6;hpb=0a66ab164824b96e3c5aa1e13f888c729fdaeef1 diff --git a/citadel/modules/imap/serv_imap.c b/citadel/modules/imap/serv_imap.c index 1290276e2..4b3e146ce 100644 --- a/citadel/modules/imap/serv_imap.c +++ b/citadel/modules/imap/serv_imap.c @@ -704,22 +704,31 @@ void imap_auth_plain(void) { citimap *Imap = IMAP; const char *decoded_authstring; - char ident[256]; - char user[256]; - char pass[256]; + char ident[256] = ""; + char user[256] = ""; + char pass[256] = ""; int result; long len; memset(pass, 0, sizeof(pass)); - StrBufDecodeBase64(Imap->Cmd.CmdBuf); + len = StrBufDecodeBase64(Imap->Cmd.CmdBuf); - decoded_authstring = ChrPtr(Imap->Cmd.CmdBuf); - safestrncpy(ident, decoded_authstring, sizeof ident); - safestrncpy(user, &decoded_authstring[strlen(ident) + 1], sizeof user); - len = safestrncpy(pass, &decoded_authstring[strlen(ident) + strlen(user) + 2], sizeof pass); - if (len < 0) - len = sizeof(pass) - 1; + if (len > 0) + { + decoded_authstring = ChrPtr(Imap->Cmd.CmdBuf); + + len = safestrncpy(ident, decoded_authstring, sizeof ident); + + decoded_authstring += len + 1; + len = safestrncpy(user, decoded_authstring, sizeof user); + + decoded_authstring += len + 1; + + len = safestrncpy(pass, decoded_authstring, sizeof pass); + if (len < 0) + len = sizeof(pass) - 1; + } Imap->authstate = imap_as_normal; if (!IsEmptyStr(ident)) {