# HG changeset patch # User Daniel Atallah # Date 1188443874 0 # Node ID fa29de8d18bc5fdbca7a43120bd08310936c9903 # Parent f77846f7d444a38252f94b7e69d48b420d148488 Apply local privacy filtering to yahoo auth. requests. Drop and automatically deny any requests that should be filtered. Fixes #2857. diff -r f77846f7d444 -r fa29de8d18bc libpurple/protocols/yahoo/yahoo.c --- a/libpurple/protocols/yahoo/yahoo.c Thu Aug 30 02:28:07 2007 +0000 +++ b/libpurple/protocols/yahoo/yahoo.c Thu Aug 30 03:17:54 2007 +0000 @@ -969,7 +969,6 @@ PurpleConnection *gc; char *id; char *who; - char *msg; int protocol; }; @@ -987,7 +986,6 @@ g_free(add_req->id); g_free(add_req->who); - g_free(add_req->msg); g_free(add_req); } @@ -1018,7 +1016,6 @@ g_free(add_req->id); g_free(add_req->who); - g_free(add_req->msg); g_free(add_req); } @@ -1132,10 +1129,18 @@ l = l->next; } - if (add_req->id) { - char *alias = NULL; + if (add_req->id && add_req->who) { + char *alias = NULL, *dec_msg = NULL; + + if (!yahoo_privacy_check(gc, add_req->who)) { + purple_debug_misc("yahoo", "Auth. request from %s dropped and automatically denied due to privacy settings!\n", + add_req->who); + yahoo_buddy_add_deny_cb(add_req, NULL); + return; + } + if (msg) - add_req->msg = yahoo_string_decode(gc, msg, FALSE); + dec_msg = yahoo_string_decode(gc, msg, FALSE); if (firstname && lastname) alias = g_strdup_printf("%s %s", firstname, lastname); @@ -1144,20 +1149,19 @@ else if (lastname) alias = g_strdup(lastname); - /* DONE! this is almost exactly the same as what MSN does, * this should probably be moved to the core. */ purple_account_request_authorization(purple_connection_get_account(gc), add_req->who, add_req->id, - alias, add_req->msg, purple_find_buddy(purple_connection_get_account(gc),add_req->who) != NULL, + alias, dec_msg, purple_find_buddy(purple_connection_get_account(gc), add_req->who) != NULL, yahoo_buddy_add_authorize_cb, yahoo_buddy_add_deny_reason_cb, add_req); g_free(alias); + g_free(dec_msg); } else { g_free(add_req->id); g_free(add_req->who); - /*g_free(add_req->msg);*/ g_free(add_req); } } else { @@ -1165,6 +1169,7 @@ } } +/* I don't think this happens anymore in Version 15 */ static void yahoo_buddy_added_us(PurpleConnection *gc, struct yahoo_packet *pkt) { struct yahoo_add_request *add_req; char *msg = NULL; @@ -1192,22 +1197,31 @@ l = l->next; } - if (add_req->id) { + if (add_req->id && add_req->who) { + char *dec_msg = NULL; + + if (!yahoo_privacy_check(gc, add_req->who)) { + purple_debug_misc("yahoo", "Auth. request from %s dropped and automatically denied due to privacy settings!\n", + add_req->who); + yahoo_buddy_add_deny_cb(add_req, NULL); + return; + } + if (msg) - add_req->msg = yahoo_string_decode(gc, msg, FALSE); + dec_msg = yahoo_string_decode(gc, msg, FALSE); /* DONE! this is almost exactly the same as what MSN does, * this should probably be moved to the core. */ purple_account_request_authorization(purple_connection_get_account(gc), add_req->who, add_req->id, - NULL, add_req->msg, purple_find_buddy(purple_connection_get_account(gc),add_req->who) != NULL, + NULL, dec_msg, purple_find_buddy(purple_connection_get_account(gc),add_req->who) != NULL, yahoo_buddy_add_authorize_cb, yahoo_buddy_add_deny_reason_cb, add_req); + g_free(dec_msg); } else { g_free(add_req->id); g_free(add_req->who); - /*g_free(add_req->msg);*/ g_free(add_req); } }