mod_iq_vcard.c.patch   [plain text]


--- /tmp/jabberd-2.2.13/sm/mod_iq_vcard.c	2011-02-23 08:24:34.000000000 -0800
+++ ./jabberd2/sm/mod_iq_vcard.c	2011-02-24 16:25:21.000000000 -0800
@@ -208,6 +208,9 @@ static mod_ret_t _iq_vcard_in_sess(mod_i
 
     /* get */
     if(pkt->type == pkt_IQ) {
+        if (storage_rate_limit(sess->user->sm->st, jid_user(sess->jid)) == st_RATELIMITED)
+            return -stanza_err_RESOURCE_CONSTRAINT;
+
         ret = storage_get(sess->user->sm->st, "vcard", jid_user(sess->jid), NULL, &os);
         switch(ret) {
             case st_FAILED:
@@ -245,6 +248,10 @@ static mod_ret_t _iq_vcard_in_sess(mod_i
     }
 
     os = _iq_vcard_to_object(mi, pkt);
+    
+    if (storage_rate_limit(sess->user->sm->st, jid_user(sess->jid)) == st_RATELIMITED)
+        return -stanza_err_RESOURCE_CONSTRAINT;
+
     ret = storage_replace(sess->user->sm->st, "vcard", jid_user(sess->jid), NULL, os);
     os_free(os);
 
@@ -338,6 +345,9 @@ static mod_ret_t _iq_vcard_pkt_user(mod_
     if(pkt->type == pkt_IQ_SET)
         return -stanza_err_FORBIDDEN;
 
+    if (storage_rate_limit(user->sm->st, pkt->from) == st_RATELIMITED)
+        return -stanza_err_RESOURCE_CONSTRAINT;
+
     ret = storage_get(user->sm->st, "vcard", jid_user(user->jid), NULL, &os);
     switch(ret) {
         case st_FAILED: