------------------------------------------------------
Beta3 Released
------------------------------------------------------
+
+Fixed problem with topics screwing up services
+--Luke
+===================================
+
+Fixed semantics with operoverride_verify and +s/+p
+channels.
+--Luke
+===================================
#ifndef NO_OPEROVERRIDE
#ifdef OPEROVERRIDE_VERIFY
- if (IsOper(sptr) && (chptr->mode.mode & MODE_SECRET ||
+ if (IsOper(sptr) && OPCanOver(sptr) &&
+ (chptr->mode.mode & MODE_SECRET ||
chptr->mode.mode & MODE_PRIVATE))
return (ERR_OPERSPVERIFY);
#endif
me.name, parv[0], name);
return 0;
}
- if (parc >= 2)
+ if (parc > 2 || SecretChannel(chptr))
{
if (!IsMember(sptr, chptr) && !IsServer(sptr)
&& !IsULine(sptr)
topiClen = TOPICLEN;
if (nicKlen > (NICKLEN+USERLEN+HOSTLEN+4))
- nicKlen = NICKLEN+USERLEN+HOSTLEN+4;
+ nicKlen = NICKLEN+USERLEN+HOSTLEN+5;
chptr->topic = MyMalloc(topiClen + 1);
strncpyzt(chptr->topic, topic, topiClen + 1);
}
#ifdef NO_OPEROVERRIDE
else if (((chptr->mode.mode & MODE_TOPICLIMIT) == 0 ||
- is_chan_op(sptr, chptr))
- || IsULine(sptr) || (is_halfop(sptr, chptr) && topic))
+ (is_chan_op(sptr, chptr))
+ || IsULine(sptr) || is_halfop(sptr, chptr)) && topic)
{
#else
else if (((chptr->mode.mode & MODE_TOPICLIMIT) == 0 ||
- is_chan_op(sptr, chptr)) || OPCanOver(sptr)
- || IsULine(sptr) || (is_halfop(sptr, chptr) && topic))
+ (is_chan_op(sptr, chptr)) || OPCanOver(sptr)
+ || IsULine(sptr) || is_halfop(sptr, chptr)) && topic)
{
if (OPCanOver(sptr) && !(is_halfop(sptr, chptr)
|| IsULine(sptr)
{
if (SecretChannel(chptr)
&& !IsMember(cptr, chptr)
- && !IsAnOper(cptr))
+#ifndef NO_OPEROVERRIDE
+ && !OPCanOver(cptr)
+#endif
+ )
continue;
if ((!lopt->showall)
else
strcat(modebuf, "]");
#endif
- if (!IsAnOper(cptr))
+ if (!OPCanOver(cptr))
sendto_one(cptr,
rpl_str(RPL_LIST), me.name,
cptr->name,