]> jfr.im git - irc/rqf/shadowircd.git/blobdiff - modules/core/m_message.c
Add is_any_op() in preperation for adding +ah, start using it instead of is_chanop...
[irc/rqf/shadowircd.git] / modules / core / m_message.c
index a3378f147d67c618811fbe81bad4bf90a846fc14..1ac0cfb4bd9d728698ca92f313f0dab4beb08b36 100644 (file)
@@ -361,7 +361,7 @@ build_target_list(int p_or_n, const char *command, struct Client *client_p,
 
                                msptr = find_channel_membership(chptr, source_p);
 
-                               if(!IsServer(source_p) && !IsService(source_p) && !is_chanop_voiced(msptr))
+                               if(!IsServer(source_p) && !IsService(source_p) && !is_chanop_voiced(msptr) && !IsOverride(source_p))
                                {
                                        sendto_one(source_p, form_str(ERR_CHANOPRIVSNEEDED),
                                                   get_id(&me, source_p),
@@ -767,6 +767,7 @@ msg_client(int p_or_n, const char *command,
                }
                /* XXX Controversial? allow opers always to send through a +g */
                else if(!IsServer(source_p) && (IsSetCallerId(target_p) ||
+                                       (IsSetSCallerId(target_p) && !has_common_channel(source_p, target_p)) ||
                                        (IsSetRegOnlyMsg(target_p) && !source_p->user->suser[0])))
                {
                        /* Here is the anti-flood bot/spambot code -db */
@@ -785,6 +786,13 @@ msg_client(int p_or_n, const char *command,
                                                        form_str(ERR_NONONREG),
                                                        target_p->name);
                        }
+                       else if (IsSetSCallerId(target_p) && !has_common_channel(source_p, target_p))
+                       {
+                               if (p_or_n != NOTICE)
+                                       sendto_one_numeric(source_p, ERR_NOCOMMONCHAN,
+                                                       form_str(ERR_NOCOMMONCHAN),
+                                                       target_p->name);
+                       }
                        else
                        {
                                /* check for accept, flag recipient incoming message */