libpurple 32531:5340f4a9bd6a: jabber: Ensure carbon-messages com...

commits at adium.im commits at adium.im
Tue Jun 4 23:54:57 UTC 2013


details:	http://hg.adium.im/libpurple/rev/5340f4a9bd6a
revision:	32531:5340f4a9bd6a
branch:		adium
author:		Thijs Alkemade <me at thijsalkema.de>
date:		Wed Jun 05 01:53:57 2013 +0200

jabber: Ensure carbon-messages come from our own JID, to avoid spoofing by other users.

diffs (78 lines):

diff -r 1836d0d921db -r 5340f4a9bd6a libpurple/protocols/jabber/message.c
--- a/libpurple/protocols/jabber/message.c	Thu May 23 21:47:32 2013 +0200
+++ b/libpurple/protocols/jabber/message.c	Wed Jun 05 01:53:57 2013 +0200
@@ -514,42 +514,46 @@
 	 * If so, use that instead for the rest of this function,
 	 * but keep track of wether the from and to should be swapped.
 	 */
+	from = xmlnode_get_attrib(packet, "from");
+
+	if (jabber_is_own_account(js, from)) {
 	for(child = packet->child; child; child = child->next) {
-		const char *xmlns = xmlnode_get_namespace(child);
+			const char *xmlns = xmlnode_get_namespace(child);
 
-		if (purple_strequal(child->name, "forwarded") && purple_strequal(xmlns, NS_XMPP_FORWARD)) {
-			xmlnode *subchild;
+			if (purple_strequal(child->name, "forwarded") && purple_strequal(xmlns, NS_XMPP_FORWARD)) {
+				xmlnode *subchild;
 
-			for(subchild = child->child; subchild; subchild = subchild->next) {
-				const char *sub_xmlns = xmlnode_get_namespace(subchild);
+				for(subchild = child->child; subchild; subchild = subchild->next) {
+					const char *sub_xmlns = xmlnode_get_namespace(subchild);
 
-				if (purple_strequal(subchild->name, "message")
-						&& purple_strequal(sub_xmlns, NS_XMPP_CLIENT)) {
+					if (purple_strequal(subchild->name, "message")
+							&& purple_strequal(sub_xmlns, NS_XMPP_CLIENT)) {
 
-					/* This is the forwarded message, handle this instead */
-					purple_debug_info("jabber", "It's a carbon-copy, using the wrapped message instead.\n");
-					packet = subchild;
-				} else if(purple_strequal(subchild->name, "delay")
-							&& purple_strequal(sub_xmlns, NS_DELAYED_DELIVERY)) {
+						/* This is the forwarded message, handle this instead */
+						purple_debug_info("jabber", "It's a carbon-copy, using the wrapped message instead.\n");
+						packet = subchild;
+					} else if(purple_strequal(subchild->name, "delay")
+								&& purple_strequal(sub_xmlns, NS_DELAYED_DELIVERY)) {
 
-					const char *timestamp = xmlnode_get_attrib(subchild, "stamp");
-					purple_debug_info("jabber", "Found a delay stamp: %s\n", timestamp);
-					delayed = TRUE;
-					if(timestamp)
-						message_timestamp = purple_str_to_time(timestamp, TRUE, NULL, NULL, NULL);
+						const char *timestamp = xmlnode_get_attrib(subchild, "stamp");
+						purple_debug_info("jabber", "Found a delay stamp: %s\n", timestamp);
+						delayed = TRUE;
+						if(timestamp)
+							message_timestamp = purple_str_to_time(timestamp, TRUE, NULL, NULL, NULL);
+					}
 				}
+			} else if (purple_strequal(child->name, "received")
+				&& purple_strequal(xmlns, NS_XMPP_CARBONS)) {
+
+				purple_debug_info("jabber", "It is an incoming message.\n");
+				is_outgoing = FALSE;
+			} else if (purple_strequal(child->name, "sent")
+						&& purple_strequal(xmlns, NS_XMPP_CARBONS)) {
+				purple_debug_info("jabber", "It is an outgoing message.\n");
+				is_outgoing = TRUE;
 			}
-		} else if (purple_strequal(child->name, "received")
-			&& purple_strequal(xmlns, NS_XMPP_CARBONS)) {
-
-			purple_debug_info("jabber", "It is an incoming message.\n");
-			is_outgoing = FALSE;
-		} else if (purple_strequal(child->name, "sent")
-					&& purple_strequal(xmlns, NS_XMPP_CARBONS)) {
-			purple_debug_info("jabber", "It is an outgoing message.\n");
-			is_outgoing = TRUE;
-		}
-    }
+	    }
+	}
 
 	from = xmlnode_get_attrib(packet, "from");
 	id   = xmlnode_get_attrib(packet, "id");




More information about the commits mailing list