X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmodules%2Fxmpp%2Fxmpp_sasl_service.c;fp=citadel%2Fmodules%2Fxmpp%2Fxmpp_sasl_service.c;h=5e53ceb4cc08d6d60bc4221a0ab34fbddab6b48c;hb=798de81c6bb695516dda1d32a324fff56b3fc0a6;hp=ba6dba137446d4705e18a1db083e6e4a455f7478;hpb=0a66ab164824b96e3c5aa1e13f888c729fdaeef1;p=citadel.git diff --git a/citadel/modules/xmpp/xmpp_sasl_service.c b/citadel/modules/xmpp/xmpp_sasl_service.c index ba6dba137..5e53ceb4c 100644 --- a/citadel/modules/xmpp/xmpp_sasl_service.c +++ b/citadel/modules/xmpp/xmpp_sasl_service.c @@ -65,10 +65,11 @@ */ int xmpp_auth_plain(char *authstring) { - char decoded_authstring[1024]; - char ident[256]; - char user[256]; - char pass[256]; + StrBuf *AuthBuf; + const char *decoded_authstring; + char ident[256] = ""; + char user[256] = ""; + char pass[256] = ""; int result; long len; @@ -76,12 +77,25 @@ int xmpp_auth_plain(char *authstring) /* Take apart the authentication string */ memset(pass, 0, sizeof(pass)); - CtdlDecodeBase64(decoded_authstring, authstring, strlen(authstring)); - 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 = -len; + AuthBuf = NewStrBufPlain(authstring, -1); + len = StrBufDecodeBase64(AuthBuf); + if (len > 0) + { + decoded_authstring = ChrPtr(AuthBuf); + + 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; + } + FreeStrBuf(&AuthBuf); /* If there are underscores in either string, change them to spaces. Some clients * do not allow spaces so we can tell the user to substitute underscores if their