static const char um_callerid_desc[] =
"Provides usermodes +g and +G which restrict messages from unauthorized users.";
-static bool
-has_common_channel(struct Client *source_p, struct Client *target_p)
-{
- rb_dlink_node *ptr;
-
- RB_DLINK_FOREACH(ptr, source_p->user->channel.head)
- {
- struct membership *msptr = ptr->data;
- if (IsMember(target_p, msptr->chptr))
- return true;
- }
-
- return false;
-}
-
static bool
allow_message(struct Client *source_p, struct Client *target_p)
{
if (!IsSetAnyCallerID(target_p))
return true;
- if (IsSetRelaxedCallerID(target_p) && has_common_channel(source_p, target_p) && !IsSetStrictCallerID(target_p))
+ if (!IsPerson(source_p))
return true;
- if (IsServer(source_p))
+ if (IsSetRelaxedCallerID(target_p) &&
+ !IsSetStrictCallerID(target_p) &&
+ has_common_channel(source_p, target_p))
return true;
/* XXX: controversial? allow opers to send through +g */
- if (IsOperGeneral(source_p))
+ if (MayHavePrivilege(source_p, "oper:message"))
return true;
if (accept_message(source_p, target_p))