1
0
mirror of https://github.com/unrealircd/unrealircd.git synced 2026-07-09 06:03:13 +02:00

Invisibility go bye bye!

This commit is contained in:
luke
2002-06-23 18:28:09 +00:00
parent e6efde5291
commit 672b345057
10 changed files with 141 additions and 14 deletions
+5
View File
@@ -395,3 +395,8 @@ it will display real hosts instead of masked ones
in the replies.
--Luke
===================================
Oper invisibility is no longer enabled by default
but is a provided option in ./Config
--Luke
===================================
+42
View File
@@ -81,6 +81,7 @@ CRYPT_OPER_PASSWORD=""
CRYPT_LINK_PASSWORD=""
CRYPT_ILINE_PASSWORD=""
CRYPT_XLINE_PASSWORD=""
ENABLE_INVISOPER=""
LISTEN_SIZE="5"
MAXSENDQLENGTH="3000000"
BUFFERPOOL="(9 * MAXSENDQLENGTH)"
@@ -1502,6 +1503,41 @@ fi
esac
done
FOO=""
runonce=""
while [ -z "$FOO" ] ; do
if [ -n "$ENABLE_INVISOPER" ] ; then
FOO="Yes"
else
FOO="No"
fi
echo ""
echo "Do you want to enable total invisibility (+I) mode for opers?"
echo $n "[$FOO] -> $c"
if [ -z "$AUTO_CONFIG" -o -n "$runonce" ] ; then
read cc
else
cc=""
runonce=Yes
fi
if [ -z "$cc" ] ; then
cc=$FOO
fi
case "$cc" in
[Yy]*)
ENABLE_INVISOPER="1"
;;
[Nn]*)
ENABLE_INVISOPER=""
;;
*)
echo ""
echo "You need to enter either Yes or No here..."
echo ""
FOO=""
;;
esac
done
FOO=""
runonce=""
@@ -1852,6 +1888,11 @@ if [ -n "$CRYPT_XLINE_PASSWORD" ] ; then
else
echo "#undef CRYPT_XLINE_PASSWORD" >> $OPTIONS_H
fi
if [ -n "$ENABLE_INVISOPER" ] ; then
echo "#define ENABLE_INVISOPER 1" >> $OPTIONS_H
else
echo "#undef ENABLE_INVISOPER" >> $OPTIONS_H
fi
if [ -n "$HUB" ] ; then
echo "#define HUB 1" >> $OPTIONS_H
else
@@ -1897,6 +1938,7 @@ CRYPT_OPER_PASSWORD="$CRYPT_OPER_PASSWORD"
CRYPT_LINK_PASSWORD="$CRYPT_LINK_PASSWORD"
CRYPT_ILINE_PASSWORD="$CRYPT_ILINE_PASSWORD"
CRYPT_XLINE_PASSWORD="$CRYPT_XLINE_PASSWORD"
ENABLE_INVISOPER="$ENABLE_INVISOPER"
LISTEN_SIZE="$LISTEN_SIZE"
MAXSENDQLENGTH="$MAXSENDQLENGTH"
BUFFERPOOL="$BUFFERPOOL"
+4 -1
View File
@@ -82,7 +82,10 @@
#define ERR_HOSTILENAME 455
#define ERR_NOHIDING 459
#ifdef ENABLE_INVISOPER
#define ERR_NOHIDING 459
#endif
#define ERR_NOTFORHALFOPS 460
#define ERR_NEEDMOREPARAMS 461
#define ERR_ALREADYREGISTRED 462
+20 -4
View File
@@ -247,14 +247,23 @@ typedef unsigned int u_int32_t; /* XXX Hope this works! */
#define UMODE_BOT 0x400000 /* User is a bot */
#define UMODE_SECURE 0x800000 /* User is a secure connect */
#define UMODE_FCLIENT 0x1000000 /* recieve client on far connects.. */
#define UMODE_HIDING 0x2000000 /* Totally invisible .. */
#ifdef ENABLE_INVISOPER
#define UMODE_HIDING 0x2000000 /* Totally invisible .. */
#endif
#define UMODE_VICTIM 0x8000000 /* Intentional Victim */
#define UMODE_DEAF 0x10000000
#define UMODE_HIDEOPER 0x20000000 /* Hide oper mode */
#define UMODE_SETHOST 0x40000000 /* used sethost */
#define UMODE_STRIPBADWORDS 0x80000000 /* */
#define SEND_UMODES (UMODE_INVISIBLE|UMODE_OPER|UMODE_WALLOP|UMODE_FAILOP|UMODE_HELPOP|UMODE_REGNICK|UMODE_SADMIN|UMODE_NETADMIN|UMODE_COADMIN|UMODE_ADMIN|UMODE_SERVICES|UMODE_HIDE|UMODE_EYES|UMODE_WHOIS|UMODE_KIX|UMODE_BOT|UMODE_SECURE|UMODE_FCLIENT|UMODE_HIDING|UMODE_DEAF|UMODE_VICTIM|UMODE_HIDEOPER|UMODE_SETHOST|UMODE_STRIPBADWORDS|UMODE_JUNK)
#ifdef ENABLE_INVISOPER
#define SEND_UMODES (UMODE_INVISIBLE|UMODE_OPER|UMODE_WALLOP|UMODE_FAILOP|UMODE_HELPOP|UMODE_REGNICK|UMODE_SADMIN|UMODE_NETADMIN|UMODE_COADMIN|UMODE_ADMIN|UMODE_SERVICES|UMODE_HIDE|UMODE_EYES|UMODE_WHOIS|UMODE_KIX|UMODE_BOT|UMODE_SECURE|UMODE_FCLIENT|UMODE_HIDING|UMODE_DEAF|UMODE_VICTIM|UMODE_HIDEOPER|UMODE_SETHOST|UMODE_STRIPBADWORDS|UMODE_JUNK)
#else
#define SEND_UMODES (UMODE_INVISIBLE|UMODE_OPER|UMODE_WALLOP|UMODE_FAILOP|UMODE_HELPOP|UMODE_REGNICK|UMODE_SADMIN|UMODE_NETADMIN|UMODE_COADMIN|UMODE_ADMIN|UMODE_SERVICES|UMODE_HIDE|UMODE_EYES|UMODE_WHOIS|UMODE_KIX|UMODE_BOT|UMODE_SECURE|UMODE_FCLIENT|UMODE_DEAF|UMODE_VICTIM|UMODE_HIDEOPER|UMODE_SETHOST|UMODE_STRIPBADWORDS|UMODE_JUNK)
#endif
#define ALL_UMODES (SEND_UMODES|UMODE_SERVNOTICE|UMODE_LOCOP|UMODE_KILLS|UMODE_CLIENT|UMODE_FLOOD|UMODE_SERVICES|UMODE_EYES)
#define FLAGS_ID (FLAGS_DOID|FLAGS_GOTID)
@@ -283,7 +292,10 @@ typedef unsigned int u_int32_t; /* XXX Hope this works! */
#define IsKix(x) ((x)->umodes & UMODE_KIX)
#define IsHelpOp(x) ((x)->umodes & UMODE_HELPOP)
#define IsAdmin(x) ((x)->umodes & UMODE_ADMIN)
#define IsHiding(x) ((x)->umodes & UMODE_HIDING)
#ifdef ENABLE_INVISOPER
#define IsHiding(x) ((x)->umodes & UMODE_HIDING)
#endif
#ifdef STRIPBADWORDS
#define IsFilteringWords(x) ((x)->umodes & UMODE_STRIPBADWORDS)
@@ -1043,7 +1055,11 @@ struct Channel {
#define MODE_NOKNOCK 0x800000
#define MODE_NOINVITE 0x1000000
#define MODE_FLOODLIMIT 0x2000000
#define MODE_NOHIDING 0x4000000
#ifdef ENABLE_INVISOPER
#define MODE_NOHIDING 0x4000000
#endif
#ifdef STRIPBADWORDS
#define MODE_STRIPBADWORDS 0x8000000
#endif
+25 -3
View File
@@ -142,7 +142,9 @@ aCtab cFlagTab[] = {
{MODE_NOKNOCK, 'K', 0, 0}, /* knock knock (no way!) */
{MODE_NOINVITE, 'V', 0, 0}, /* no invites */
{MODE_FLOODLIMIT, 'f', 0, 1}, /* flood limiter */
#ifdef ENABLE_INVISOPER
{MODE_NOHIDING, 'H', 0, 0}, /* no +I joiners */
#endif
#ifdef STRIPBADWORDS
{MODE_STRIPBADWORDS, 'G', 0, 0}, /* no badwords */
#endif
@@ -1565,6 +1567,7 @@ int do_mode_char(chptr, modetype, modechar, param, what, cptr, pcount, pvar,
if (!IsServer(cptr) && !IsULine(cptr))
break;
goto setthephuckingmode;
#ifdef ENABLE_INVISOPER
case MODE_NOHIDING:
if (!IsSkoAdmin(cptr) && !IsServer(cptr)
&& !IsULine(cptr))
@@ -1575,6 +1578,7 @@ int do_mode_char(chptr, modetype, modechar, param, what, cptr, pcount, pvar,
break;
}
goto setthephuckingmode;
#endif
case MODE_SECRET:
case MODE_PRIVATE:
case MODE_MODERATED:
@@ -2268,8 +2272,10 @@ static int can_join(cptr, sptr, chptr, key, link, parv)
return (ERR_ADMONLY);
}
#ifdef ENABLE_INVISOPER
if ((chptr->mode.mode & MODE_NOHIDING) && IsHiding(sptr))
return (ERR_NOHIDING);
#endif
if ((IsOper(sptr) && !((chptr->mode.mode & MODE_ADMONLY))) && !(ib==0))
{
@@ -2741,9 +2747,12 @@ int channel_link(cptr, sptr, parc, parv)
/*
** notify all other users on the new channel
*/
#ifdef ENABLE_INVISOPER
if (!IsHiding(sptr))
#endif
sendto_channel_butserv(chptr, sptr,
":%s JOIN :%s", parv[0], name);
#ifdef ENABLE_INVISOPER
else
{
if (MyClient(sptr))
@@ -2756,6 +2765,7 @@ int channel_link(cptr, sptr, parc, parv)
"*** Invisibility -- %s (%s@%s) JOIN %s", sptr->name,
sptr->user->username, sptr->user->realhost, chptr->chname);
}
#endif
sendto_serv_butone_token(cptr, parv[0], MSG_JOIN,
TOK_JOIN, name);
@@ -2964,6 +2974,7 @@ int m_join(cptr, sptr, parc, parv)
/*
** notify all other users on the new channel
*/
#ifdef ENABLE_INVISOPER
if (IsHiding(sptr))
{
if (MyClient(sptr))
@@ -2986,6 +2997,9 @@ int m_join(cptr, sptr, parc, parv)
}
}
else if (chptr->mode.mode & MODE_AUDITORIUM)
#else
if (chptr->mode.mode & MODE_AUDITORIUM)
#endif
{
if (MyClient(sptr))
sendto_one(sptr, ":%s!%s@%s JOIN :%s",
@@ -3128,7 +3142,7 @@ int m_part(cptr, sptr, parc, parv)
if (1)
{
#ifdef ENABLE_INVISOPER
if (IsHiding(sptr))
{
if (MyClient(sptr))
@@ -3171,6 +3185,9 @@ int m_part(cptr, sptr, parc, parv)
chptr->chname, comment);
}
else if (chptr->mode.mode & MODE_AUDITORIUM)
#else
if (chptr->mode.mode & MODE_AUDITORIUM)
#endif
{
if (MyClient(sptr))
{
@@ -3317,6 +3334,7 @@ int m_kick(cptr, sptr, parc, parv)
goto attack;
/* Hiding patch by }{ */
#ifdef ENABLE_INVISOPER
if (IsHiding(who))
{
sendto_one(sptr,
@@ -3328,7 +3346,7 @@ int m_kick(cptr, sptr, parc, parv)
chptr->chname, comment);
break;
}
#endif
/* If you're kicking yourself, it really shouldn't matter what modes you have set
* unless the channel is +Q
*/
@@ -4319,8 +4337,10 @@ int m_names(cptr, sptr, parc, parv)
acptr = cm->value.cptr;
if (IsInvisible(acptr) && !member)
continue;
#ifdef ENABLE_INVISOPER
if (IsHiding(acptr) && acptr != sptr && !(IsNetAdmin(sptr)))
continue;
#endif
if (chptr->mode.mode & MODE_AUDITORIUM)
if (!is_chan_op(sptr, chptr)
&& !is_chanprot(sptr, chptr)
@@ -4855,7 +4875,9 @@ int m_sjoin(aClient *cptr, aClient *sptr, int parc, char *parv[])
modeflags = 0;
}
add_user_to_channel(chptr, acptr, modeflags);
if (!IsHiding(acptr))
#ifdef ENABLE_INVISOPER
if (!IsHiding(acptr))
#endif
sendto_channel_butserv(chptr, acptr,
":%s JOIN :%s", nick,
chptr->chname);
+12
View File
@@ -886,9 +886,15 @@ int m_svsnoop(cptr, sptr, parc, parv)
acptr->umodes &=
~(UMODE_NETADMIN | UMODE_CLIENT |
UMODE_FLOOD | UMODE_EYES | UMODE_WHOIS);
#ifdef ENABLE_INVISOPER
acptr->umodes &=
~(UMODE_KIX | UMODE_FCLIENT | UMODE_HIDING |
UMODE_DEAF | UMODE_HIDEOPER);
#else
acptr->umodes &=
~(UMODE_KIX | UMODE_FCLIENT |
UMODE_DEAF | UMODE_HIDEOPER);
#endif
acptr->oflag = 0;
}
@@ -2855,9 +2861,15 @@ int m_svso(cptr, sptr, parc, parv)
acptr->umodes &=
~(UMODE_NETADMIN | UMODE_CLIENT |
UMODE_FLOOD | UMODE_EYES | UMODE_WHOIS);
#ifdef ENABLE_INVISOPER
acptr->umodes &=
~(UMODE_KIX | UMODE_FCLIENT | UMODE_HIDING |
UMODE_DEAF | UMODE_HIDEOPER);
#else
acptr->umodes &=
~(UMODE_KIX | UMODE_FCLIENT |
UMODE_DEAF | UMODE_HIDEOPER);
#endif
acptr->oflag = 0;
send_umode_out(acptr, acptr, fLag);
}
+1 -1
View File
@@ -84,7 +84,7 @@ char serveropts[] = {
#ifdef USE_SYSLOG
'Y',
#endif
#ifdef OPER_NO_HIDING
#ifdef ENABLE_INVISOPER
'H',
#endif
#ifdef NO_IDENT_CHECKING
+2
View File
@@ -1056,9 +1056,11 @@ int m_sendumode(cptr, sptr, parc, parv)
sendto_umode(UMODE_CODER, "%s", parv[2]);
break;
*/
#ifdef ENABLE_INVISOPER
case 'I':
sendto_umode(UMODE_HIDING, "%s", parv[2]);
break;
#endif
case 'w':
sendto_umode(UMODE_WALLOP, "%s", parv[2]);
break;
+26 -5
View File
@@ -88,7 +88,9 @@ static int user_modes[] = { UMODE_OPER, 'o',
UMODE_KIX, 'q',
UMODE_BOT, 'B',
UMODE_FCLIENT, 'F',
#ifdef ENABLE_INVISOPER
UMODE_HIDING, 'I',
#endif
UMODE_SECURE, 'z',
UMODE_DEAF, 'd',
UMODE_VICTIM, 'v',
@@ -2452,8 +2454,10 @@ static void do_who(sptr, acptr, repchan)
/* checks for channel /who's and nonopers */
if (channelwho && !IsOper(sptr) && sptr != acptr)
{
#ifdef ENABLE_INVISOPER
if IsHiding(acptr)
return;
#endif
if (IsAuditorium(repchan) && !is_chan_op(acptr,repchan)
&& !is_chan_op(sptr,repchan))
return;
@@ -2462,10 +2466,10 @@ static void do_who(sptr, acptr, repchan)
if (IsInvisible(acptr) && !IsMember(sptr,repchan))
return;
}
#ifdef ENABLE_INVISOPER
if (channelwho && IsHiding(acptr) && !IsNetAdmin(sptr))
return;
#endif
if (acptr->user->away)
status[i++] = 'G';
else
@@ -2484,11 +2488,19 @@ static void do_who(sptr, acptr, repchan)
* simply because they are an oper. (adds ! to the who "flags")
*/
if (IsAnOper(sptr) && sptr != acptr)
#ifdef ENABLE_INVISOPER
if (channelwho && IsHiding(acptr) && IsNetAdmin(sptr) ||
IsInvisible(acptr) && !IsMember(sptr,repchan) ||
IsAuditorium(repchan) && !is_chan_op(acptr,repchan) ||
!ShowChannel(sptr,repchan))
status[i++] = '!';
#else
if (channelwho && IsNetAdmin(sptr) ||
IsInvisible(acptr) && !IsMember(sptr,repchan) ||
IsAuditorium(repchan) && !is_chan_op(acptr,repchan) ||
!ShowChannel(sptr,repchan))
status[i++] = '!';
#endif
/* Channel operator */
if (repchan && is_chan_op(acptr, repchan))
@@ -2509,8 +2521,10 @@ static void do_who(sptr, acptr, repchan)
":%s NOTICE %s :*** %s either did a /who or a specific /who on you",
me.name, acptr->name, sptr->name);
}
#ifdef ENABLE_INVISOPER
if (IsHiding(acptr) && sptr != acptr && !IsNetAdmin(sptr))
repchan = NULL;
#endif
sendto_one(sptr, rpl_str(RPL_WHOREPLY), me.name, sptr->name,
(repchan) ? (repchan->chname) : "*", acptr->user->username,
@@ -4329,11 +4343,13 @@ int m_umode(cptr, sptr, parc, parv)
&& MyClient(sptr))
break;
goto def;
#ifdef ENABLE_INVISOPER
case 'I':
if (NO_OPER_HIDING == 1 && what == MODE_ADD
&& MyClient(sptr))
break;
goto def;
#endif
case 'B':
if (what == MODE_ADD && MyClient(sptr))
(void)m_botmotd(sptr, sptr, 1, parv);
@@ -4422,9 +4438,11 @@ int m_umode(cptr, sptr, parc, parv)
ClearNetAdmin(sptr);
if (IsCoAdmin(sptr) && !OPIsCoAdmin(sptr))
ClearCoAdmin(sptr);
#ifdef ENABLE_INVISOPER
if ((sptr->umodes & UMODE_HIDING)
&& !(sptr->oflag & OFLAG_INVISIBLE))
sptr->umodes &= ~UMODE_HIDING;
#endif
if (MyClient(sptr) && (sptr->umodes & UMODE_SECURE)
&& !IsSecure(sptr))
sptr->umodes &= ~UMODE_SECURE;
@@ -4468,17 +4486,17 @@ int m_umode(cptr, sptr, parc, parv)
/* Agents
if ((sptr->umodes & (UMODE_AGENT)) && !(sptr->oflag & OFLAG_AGENT))
sptr->umodes &= ~UMODE_AGENT; */
#ifdef ENABLE_INVISOPER
if ((sptr->umodes & UMODE_HIDING) && !IsAnOper(sptr))
sptr->umodes &= ~UMODE_HIDING;
if ((sptr->umodes & UMODE_HIDING)
&& !(sptr->oflag & OFLAG_INVISIBLE))
sptr->umodes &= ~UMODE_HIDING;
#endif
if (MyClient(sptr) && (sptr->umodes & UMODE_SECURE)
&& !IsSecure(sptr))
sptr->umodes &= ~UMODE_SECURE;
#ifdef ENABLE_INVISOPER
if ((sptr->umodes & (UMODE_HIDING))
&& !(setflags & UMODE_HIDING))
{
@@ -4490,9 +4508,11 @@ int m_umode(cptr, sptr, parc, parv)
me.name, sptr->name);
sendto_channels_inviso_part(sptr);
}
#endif
if ((sptr->umodes & UMODE_JUNK) && !IsOper(sptr))
sptr->umodes &= ~UMODE_JUNK;
#ifdef ENABLE_INVISOPER
if (!(sptr->umodes & (UMODE_HIDING)))
{
if (setflags & UMODE_HIDING)
@@ -4507,6 +4527,7 @@ int m_umode(cptr, sptr, parc, parv)
}
}
#endif
}
/*
* If I understand what this code is doing correctly...
+4
View File
@@ -299,8 +299,12 @@ int w_whois(aClient *cptr, aClient *sptr, int parc, char *parv[])
}
}
#ifdef ENABLE_INVISOPER
if (buf[0] != '\0' && !IsULine(acptr) && (!IsHiding(acptr) ||
IsNetAdmin(sptr) || sptr == acptr))
#else
if (buf[0] != '\0' && !IsULine(acptr))
#endif
sendto_one(sptr,
":IRC PRIVMSG %s :%s is on %s",
sptr->name, name, buf);