]> jfr.im git - irc/rqf/shadowircd.git/blobdiff - modules/core/m_message.c
Automated merge with ssh://taros@hg.atheme.org//hg/unofficial/shadowircd
[irc/rqf/shadowircd.git] / modules / core / m_message.c
index c5d852b970480fbf1bea8ff5d6e1457487e49d99..46ba4e9ffb547a67d24eb2e8b8324b027832e9d0 100644 (file)
@@ -536,6 +536,14 @@ msg_channel(int p_or_n, const char *command,
        /* chanops and voiced can flood their own channel with impunity */
        if((result = can_send(chptr, source_p, NULL)))
        {
+               if(result != CAN_SEND_OPV && MyClient(source_p) &&
+                  !IsOper(source_p) &&
+                  !add_channel_target(source_p, chptr))
+               {
+                       sendto_one(source_p, form_str(ERR_TARGCHANGE),
+                                  me.name, source_p->name, chptr->chname);
+                       return;
+               }
                if(result == CAN_SEND_OPV ||
                   !flood_attack_channel(p_or_n, source_p, chptr, chptr->chname))
                {
@@ -586,6 +594,13 @@ msg_channel(int p_or_n, const char *command,
                        (!(chptr->mode.mode & MODE_NOPRIVMSGS) ||
                         IsMember(source_p, chptr)))
        {
+               if(MyClient(source_p) && !IsOper(source_p) &&
+                  !add_channel_target(source_p, chptr))
+               {
+                       sendto_one(source_p, form_str(ERR_TARGCHANGE),
+                                  me.name, source_p->name, chptr->chname);
+                       return;
+               }
                if(!flood_attack_channel(p_or_n, source_p, chptr, chptr->chname))
                {
                        sendto_channel_opmod(client_p, source_p, chptr,
@@ -739,6 +754,32 @@ msg_client(int p_or_n, const char *command,
 
        if(MyClient(source_p))
        {
+               /*
+                * XXX: Controversial? Allow target users to send replies
+                * through a +g.  Rationale is that people can presently use +g
+                * as a way to taunt users, e.g. harass them and hide behind +g
+                * as a way of griefing.  --nenolod
+                */
+               if(p_or_n != NOTICE && MyClient(source_p) &&
+                               IsSetCallerId(source_p) &&
+                               IsSetSCallerId(source_p) &&
+                               !accept_message(target_p, source_p))
+               {
+                       if(rb_dlink_list_length(&source_p->localClient->allow_list) <
+                                       ConfigFileEntry.max_accept)
+                       {
+                               rb_dlinkAddAlloc(target_p, &source_p->localClient->allow_list);
+                               rb_dlinkAddAlloc(source_p, &target_p->on_allow_list);
+                       }
+                       else
+                       {
+                               sendto_one_numeric(source_p, ERR_OWNMODE,
+                                               form_str(ERR_OWNMODE),
+                                               target_p->name, "+g");
+                               return;
+                       }
+               }
+
                /* reset idle time for message only if its not to self 
                 * and its not a notice */
                if(p_or_n != NOTICE)