X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmodules%2Fxmpp%2Fxmpp_sasl_service.c;h=e7ad1a2b19f40e035750d0d2b750a9abc8957856;hb=e7c125bafc3bd24fd9cfb18c39b29abd19c7478f;hp=393174dce18b2cf78901e61aa1955743d84f08fc;hpb=d04e4ad0b8ab9e5b71310030704d61b6eceb530b;p=citadel.git diff --git a/citadel/modules/xmpp/xmpp_sasl_service.c b/citadel/modules/xmpp/xmpp_sasl_service.c index 393174dce..e7ad1a2b1 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