From: Art Cancro Date: Wed, 31 Dec 2014 15:26:45 +0000 (-0500) Subject: Merge branch 'master' of ssh://git.citadel.org/appl/gitroot/citadel X-Git-Tag: v9.01~57^2~1 X-Git-Url: https://code.citadel.org/?p=citadel.git;a=commitdiff_plain;h=73bcf6081a14008eb1020126273f133a324bb910 Merge branch 'master' of ssh://git.citadel.org/appl/gitroot/citadel Conflicts: citadel/modules/xmpp/serv_xmpp.c citadel/modules/xmpp/xmpp_presence.c citadel/modules/xmpp/xmpp_query_namespace.c --- 73bcf6081a14008eb1020126273f133a324bb910 diff --cc citadel/modules/xmpp/serv_xmpp.c index ea4adc48b,7986cb573..126385129 --- a/citadel/modules/xmpp/serv_xmpp.c +++ b/citadel/modules/xmpp/serv_xmpp.c @@@ -79,7 -76,7 +79,11 @@@ static void xmpp_entity_declaration(voi const XML_Char *systemId, const XML_Char *publicId, const XML_Char *notationName ) { ++<<<<<<< HEAD + syslog(LOG_WARNING, "Illegal entity declaration encountered; stopping parser."); ++======= + XMPPM_syslog(LOG_WARNING, "Illegal entity declaration encountered; stopping parser."); ++>>>>>>> 1c0b8162b0a90f2e97028a531005c11b09441498 XML_StopParser(XMPP->xp, XML_FALSE); } #endif @@@ -211,13 -208,13 +215,21 @@@ void xmpp_stream_start(void *data, cons /* * TLS encryption (but only if it isn't already active) ++<<<<<<< HEAD + */ ++======= + * / ++>>>>>>> 1c0b8162b0a90f2e97028a531005c11b09441498 #ifdef HAVE_OPENSSL if (!CC->redirect_ssl) { cprintf(""); } #endif ++<<<<<<< HEAD + ++======= + */ ++>>>>>>> 1c0b8162b0a90f2e97028a531005c11b09441498 if (!CC->logged_in) { /* If we're not logged in yet, offer SASL as our feature set */ xmpp_output_auth_mechs(); @@@ -229,13 -226,13 +241,22 @@@ /* Offer binding and sessions as part of our feature set */ cprintf(""); cprintf(""); ++<<<<<<< HEAD + + cprintf(""); ++======= ++>>>>>>> 1c0b8162b0a90f2e97028a531005c11b09441498 + cprintf(""); + ++<<<<<<< HEAD ++ ++======= CC->is_async = 1; /* XMPP sessions are inherently async-capable */ } ++>>>>>>> 1c0b8162b0a90f2e97028a531005c11b09441498 void xmpp_xml_start(void *data, const char *supplied_el, const char **attr) { char el[256]; char *sep = NULL; @@@ -247,12 -244,12 +268,21 @@@ strcpy(el, ++sep); } ++<<<<<<< HEAD +#ifdef XMPP_DEBUG + syslog(LOG_DEBUG, "XMPP ELEMENT START: <%s>\n", el); + for (i=0; attr[i] != NULL; i+=2) { + syslog(LOG_DEBUG, " Attribute '%s' = '%s'\n", attr[i], attr[i+1]); + } +#endif /* XMPP_DEBUG */ ++======= + /* + XMPP_syslog(LOG_DEBUG, "XMPP ELEMENT START: <%s>\n", el); + for (i=0; attr[i] != NULL; i+=2) { + XMPP_syslog(LOG_DEBUG, " Attribute '%s' = '%s'\n", attr[i], attr[i+1]); + } + uncomment for more verbosity */ ++>>>>>>> 1c0b8162b0a90f2e97028a531005c11b09441498 if (!strcasecmp(el, "stream")) { xmpp_stream_start(data, supplied_el, attr); @@@ -261,6 -258,6 +291,46 @@@ else if (!strcasecmp(el, "query")) { XMPP->iq_query_xmlns[0] = 0; safestrncpy(XMPP->iq_query_xmlns, supplied_el, sizeof XMPP->iq_query_xmlns); ++<<<<<<< HEAD ++ } ++ ++ else if (!strcasecmp(el, "bind")) { ++ XMPP->bind_requested = 1; ++ } ++ ++ else if (!strcasecmp(el, "iq")) { ++ for (i=0; attr[i] != NULL; i+=2) { ++ if (!strcasecmp(attr[i], "type")) { ++ safestrncpy(XMPP->iq_type, attr[i+1], sizeof XMPP->iq_type); ++ } ++ else if (!strcasecmp(attr[i], "id")) { ++ safestrncpy(XMPP->iq_id, attr[i+1], sizeof XMPP->iq_id); ++ } ++ else if (!strcasecmp(attr[i], "from")) { ++ safestrncpy(XMPP->iq_from, attr[i+1], sizeof XMPP->iq_from); ++ } ++ else if (!strcasecmp(attr[i], "to")) { ++ safestrncpy(XMPP->iq_to, attr[i+1], sizeof XMPP->iq_to); ++ } ++ } ++ } ++ ++ else if (!strcasecmp(el, "auth")) { ++ XMPP->sasl_auth_mech[0] = 0; ++ for (i=0; attr[i] != NULL; i+=2) { ++ if (!strcasecmp(attr[i], "mechanism")) { ++ safestrncpy(XMPP->sasl_auth_mech, attr[i+1], sizeof XMPP->sasl_auth_mech); ++ } ++ } ++ } ++ ++ else if (!strcasecmp(el, "message")) { ++ for (i=0; attr[i] != NULL; i+=2) { ++ if (!strcasecmp(attr[i], "to")) { ++ safestrncpy(XMPP->message_to, attr[i+1], sizeof XMPP->message_to); ++ } ++ } ++======= } else if (!strcasecmp(el, "bind")) { @@@ -308,50 -305,50 +378,104 @@@ + void xmpp_xml_end(void *data, const char *supplied_el) { + char el[256]; + char *sep = NULL; + char xmlbuf[256]; + + /* Axe the namespace, we don't care about it */ + safestrncpy(el, supplied_el, sizeof el); + while (sep = strchr(el, ':'), sep) { + strcpy(el, ++sep); + } + + /* + XMPP_syslog(LOG_DEBUG, "XMPP ELEMENT END : <%s>\n", el); + if (XMPP->chardata_len > 0) { + XMPP_syslog(LOG_DEBUG, " chardata: %s\n", XMPP->chardata); ++>>>>>>> 1c0b8162b0a90f2e97028a531005c11b09441498 + } - uncomment for more verbosity */ + ++<<<<<<< HEAD ++ else if (!strcasecmp(el, "html")) { ++ ++XMPP->html_tag_level; ++ } ++} ++ ++ ++ +void xmpp_xml_end(void *data, const char *supplied_el) { + char el[256]; + char *sep = NULL; + char xmlbuf[256]; + + /* Axe the namespace, we don't care about it */ + safestrncpy(el, supplied_el, sizeof el); + while (sep = strchr(el, ':'), sep) { + strcpy(el, ++sep); + } + +#ifdef XMPP_DEBUG + syslog(LOG_DEBUG, "XMPP ELEMENT END : <%s>\n", el); + if (XMPP->chardata_len > 0) { + syslog(LOG_DEBUG, " chardata: %s\n", XMPP->chardata); + } +#endif /* XMPP_DEBUG */ + + if (!strcasecmp(el, "resource")) { + if (XMPP->chardata_len > 0) { + safestrncpy(XMPP->iq_client_resource, XMPP->chardata, + sizeof XMPP->iq_client_resource); + striplt(XMPP->iq_client_resource); + } + } + + else if (!strcasecmp(el, "username")) { /* NON SASL ONLY */ + if (XMPP->chardata_len > 0) { + safestrncpy(XMPP->iq_client_username, XMPP->chardata, + sizeof XMPP->iq_client_username); + striplt(XMPP->iq_client_username); + } + } + + else if (!strcasecmp(el, "password")) { /* NON SASL ONLY */ + if (XMPP->chardata_len > 0) { + safestrncpy(XMPP->iq_client_password, XMPP->chardata, + sizeof XMPP->iq_client_password); + striplt(XMPP->iq_client_password); + } + } + + else if (!strcasecmp(el, "iq")) { + ++======= + if (!strcasecmp(el, "resource")) { + if (XMPP->chardata_len > 0) { + safestrncpy(XMPP->iq_client_resource, XMPP->chardata, + sizeof XMPP->iq_client_resource); + striplt(XMPP->iq_client_resource); + } + } + + else if (!strcasecmp(el, "username")) { /* NON SASL ONLY */ + if (XMPP->chardata_len > 0) { + safestrncpy(XMPP->iq_client_username, XMPP->chardata, + sizeof XMPP->iq_client_username); + striplt(XMPP->iq_client_username); + } + } + + else if (!strcasecmp(el, "password")) { /* NON SASL ONLY */ + if (XMPP->chardata_len > 0) { + safestrncpy(XMPP->iq_client_password, XMPP->chardata, + sizeof XMPP->iq_client_password); + striplt(XMPP->iq_client_password); + } + } + + else if (!strcasecmp(el, "iq")) { + ++>>>>>>> 1c0b8162b0a90f2e97028a531005c11b09441498 /* * iq type="get" (handle queries) */ @@@ -383,7 -380,7 +507,11 @@@ * Unknown query ... return the XML equivalent of a blank stare */ else { ++<<<<<<< HEAD + syslog(LOG_DEBUG, ++======= + XMPP_syslog(LOG_DEBUG, ++>>>>>>> 1c0b8162b0a90f2e97028a531005c11b09441498 "Unknown query <%s> - returning \n", el ); @@@ -515,21 -512,17 +643,35 @@@ else if (!strcasecmp(el, "ping")) { XMPP->ping_requested = 1; ++<<<<<<< HEAD + } + + else if (!strcasecmp(el, "stream")) { + syslog(LOG_DEBUG, "XMPP client shut down their stream\n"); + xmpp_massacre_roster(); + cprintf("\n"); + CC->kill_me = KILLME_CLIENT_LOGGED_OUT; + } + + else if (!strcasecmp(el, "query")) { + // no action required here, we picked up the xmlns= parameter during xmpp_xml_start() + } + + else { + syslog(LOG_DEBUG, "Ignoring unknown tag <%s>\n", el); ++======= + } + + else if (!strcasecmp(el, "stream")) { + XMPPM_syslog(LOG_DEBUG, "XMPP client shut down their stream\n"); + xmpp_massacre_roster(); + cprintf("\n"); + CC->kill_me = KILLME_CLIENT_LOGGED_OUT; + } + + else { + XMPP_syslog(LOG_DEBUG, "Ignoring unknown tag <%s>\n", el); ++>>>>>>> 1c0b8162b0a90f2e97028a531005c11b09441498 } XMPP->chardata_len = 0; diff --cc citadel/modules/xmpp/xmpp_presence.c index ebdfd152a,ca8a95949..4c2d50ade --- a/citadel/modules/xmpp/xmpp_presence.c +++ b/citadel/modules/xmpp/xmpp_presence.c @@@ -67,7 -67,6 +67,10 @@@ void xmpp_indicate_presence(char *prese { char xmlbuf[256]; ++<<<<<<< HEAD + syslog(LOG_DEBUG, "XMPP: indicating presence of <%s> to <%s>", presence_jid, XMPP->client_jid); ++======= ++>>>>>>> 1c0b8162b0a90f2e97028a531005c11b09441498 cprintf("", xmlesc(xmlbuf, XMPP->client_jid, sizeof xmlbuf)); } diff --cc citadel/modules/xmpp/xmpp_query_namespace.c index 39b3979ac,cf6f423a5..fb3374e9e --- a/citadel/modules/xmpp/xmpp_query_namespace.c +++ b/citadel/modules/xmpp/xmpp_query_namespace.c @@@ -93,11 -98,15 +93,15 @@@ void xmpp_iq_roster_query(void } + /* - * TODO: handle queries on some or all of these namespaces - * -xmpp_query_namespace(purple5b5c1e58, splorph.xand.com, http://jabber.org/protocol/disco#items:query) -xmpp_query_namespace(purple5b5c1e59, splorph.xand.com, http://jabber.org/protocol/disco#info:query) -xmpp_query_namespace(purple5b5c1e5a, , vcard-temp:query) - * + * Client is doing a namespace query. These are all handled differently. + * A "rumplestiltskin lookup" is the most efficient way to handle this. Please do not refactor this code. */ ++<<<<<<< HEAD ++======= + ++>>>>>>> 1c0b8162b0a90f2e97028a531005c11b09441498 void xmpp_query_namespace(char *iq_id, char *iq_from, char *iq_to, char *query_xmlns) { int supported_namespace = 0; @@@ -117,7 -124,7 +121,11 @@@ supported_namespace = 1; } ++<<<<<<< HEAD + syslog(LOG_DEBUG, "xmpp_query_namespace(id=%s, from=%s, to=%s, xmlns=%s)\n", iq_id, iq_from, iq_to, query_xmlns); ++======= + XMPP_syslog(LOG_DEBUG, "xmpp_query_namespace(%s, %s, %s, %s)\n", iq_id, iq_from, iq_to, query_xmlns); ++>>>>>>> 1c0b8162b0a90f2e97028a531005c11b09441498 /* * Beginning of query result. @@@ -127,10 -134,10 +135,17 @@@ } else { cprintf(">>>>>> 1c0b8162b0a90f2e97028a531005c11b09441498 cprintf("id=\"%s\">", xmlesc(xmlbuf, iq_id, sizeof xmlbuf)); /* @@@ -165,7 -162,10 +180,14 @@@ */ else { ++<<<<<<< HEAD + syslog(LOG_DEBUG, "Unknown query namespace '%s' - returning \n", query_xmlns); ++======= + XMPP_syslog(LOG_DEBUG, + "Unknown query namespace '%s' - returning \n", + query_xmlns + ); ++>>>>>>> 1c0b8162b0a90f2e97028a531005c11b09441498 cprintf("" "" ""