X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmodules%2Fxmpp%2Fxmpp_sasl_service.c;h=e7ad1a2b19f40e035750d0d2b750a9abc8957856;hb=e7c125bafc3bd24fd9cfb18c39b29abd19c7478f;hp=fd4986137b1fa28ad484dd31f0f1cf726702bea9;hpb=bb47b9c23a29dee2a8d801655a237ec50078b348;p=citadel.git diff --git a/citadel/modules/xmpp/xmpp_sasl_service.c b/citadel/modules/xmpp/xmpp_sasl_service.c index fd4986137..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 @@ -113,9 +127,9 @@ int xmpp_auth_plain(char *authstring) * Output the list of SASL mechanisms offered by this stream. */ void xmpp_output_auth_mechs(void) { - XPUT("" - "PLAIN" - ""); + cprintf(""); + cprintf("PLAIN"); + cprintf(""); } /* @@ -124,28 +138,28 @@ void xmpp_output_auth_mechs(void) { void xmpp_sasl_auth(char *sasl_auth_mech, char *authstring) { if (strcasecmp(sasl_auth_mech, "PLAIN")) { - XPUT("" - "" - ""); + cprintf(""); + cprintf(""); + cprintf(""); return; } if (CC->logged_in) CtdlUserLogout(); /* Client may try to log in twice. Handle this. */ if (CC->nologin) { - XPUT("" - "" - ""); + cprintf(""); + cprintf(""); + cprintf(""); } else if (xmpp_auth_plain(authstring) == 0) { - XPUT(""); + cprintf(""); } else { - XPUT("" - "" - ""); + cprintf(""); + cprintf(""); + cprintf(""); } } @@ -156,6 +170,7 @@ void xmpp_sasl_auth(char *sasl_auth_mech, char *authstring) { */ void xmpp_non_sasl_authenticate(char *iq_id, char *username, char *password, char *resource) { int result; + char xmlbuf[256]; if (CC->logged_in) CtdlUserLogout(); /* Client may try to log in twice. Handle this. */ @@ -163,23 +178,16 @@ void xmpp_non_sasl_authenticate(char *iq_id, char *username, char *password, cha if (result == login_ok) { result = CtdlTryPassword(password, strlen(password)); if (result == pass_ok) { - XPrint(HKEY("iq"), XCLOSED, - XCPROPERTY("type", "result"), - XPROPERTY("ID", iq_id, strlen(iq_id)), - TYPE_ARGEND); - /* success */ + cprintf("", xmlesc(xmlbuf, iq_id, sizeof xmlbuf)); /* success */ return; } } /* failure */ - XPrint(HKEY("iq"), 0, - XCPROPERTY("type", "error"), - XPROPERTY("ID", iq_id, strlen(iq_id)), - TYPE_ARGEND); - XPUT("" - "" - "" - "" + cprintf("", xmlesc(xmlbuf, iq_id, sizeof xmlbuf)); + cprintf("" + "" + "" + "" ); }