mod_iq_vcard.c.patch   [plain text]


--- /tmp/jabberd-2.1.24.1/sm/mod_iq_vcard.c	2008-04-27 02:57:18.000000000 -0700
+++ ./jabberd2/sm/mod_iq_vcard.c	2008-11-24 14:21:54.000000000 -0800
@@ -30,7 +30,7 @@
 #define uri_VCARD    "vcard-temp"
 static int ns_VCARD = 0;
 
-#define VCARD_MAX_FIELD_SIZE    (16384)
+#define VCARD_MAX_FIELD_SIZE    (32768)
 
 /**
  * these are the vcard attributes that gabber supports. they're also
@@ -191,6 +191,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:
@@ -228,6 +231,10 @@ static mod_ret_t _iq_vcard_in_sess(mod_i
     }
 
     os = _iq_vcard_to_object(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);
 
@@ -321,6 +328,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: