Skip to content

Commit

Permalink
Add <hidechans:affectsopers>, allows networks to hide channels of a +…
Browse files Browse the repository at this point in the history
…I user even from opers, for added privacy.

git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@10644 e03df62e-2008-0410-955e-edbf42e46eb7
  • Loading branch information
rburchell committed Oct 15, 2008
1 parent 5d3ffb2 commit 6cdc212
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 10 deletions.
5 changes: 5 additions & 0 deletions conf/modules.conf.example
Original file line number Diff line number Diff line change
Expand Up @@ -710,6 +710,11 @@
# HIDECHANS module: Allows opers to hide their channels list from non-
# opers by setting user mode +I on themselves.
# <module name="m_hidechans.so">
#
# HIDECHANS can optionally prevent opers from seeing channels on a +I
# user, for more privacy if set to true.
# This setting is not recommended for most mainstream networks.
#<hidechans affectsopers="false">

#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
# HIDEOPER module: Allows opers to hide their oper status from non-
Expand Down
43 changes: 33 additions & 10 deletions src/modules/m_hidechans.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,21 +47,20 @@ class HideChans : public ModeHandler

class ModuleHideChans : public Module
{

bool AffectsOpers;
HideChans* hm;
public:
ModuleHideChans(InspIRCd* Me)
: Module(Me)
ModuleHideChans(InspIRCd* Me) : Module(Me)
{

hm = new HideChans(ServerInstance);
if (!ServerInstance->Modes->AddMode(hm))
throw ModuleException("Could not add new modes!");
Implementation eventlist[] = { I_OnWhoisLine };
ServerInstance->Modules->Attach(eventlist, this, 1);
Implementation eventlist[] = { I_OnWhoisLine, I_OnRehash };
ServerInstance->Modules->Attach(eventlist, this, 2);
OnRehash(NULL, "");
}


virtual ~ModuleHideChans()
{
ServerInstance->Modes->DelMode(hm);
Expand All @@ -73,12 +72,36 @@ class ModuleHideChans : public Module
return Version("$Id$", VF_COMMON | VF_VENDOR, API_VERSION);
}

virtual void OnRehash(User* user, const std::string &parameter)
{
ConfigReader conf(ServerInstance);
AffectsOpers = conf.ReadFlag("hidechans", "affectsopers", 0);
}

int OnWhoisLine(User* user, User* dest, int &numeric, std::string &text)
{
/* Dont display channels if they have +I set and the
* person doing the WHOIS is not an oper
*/
return ((user != dest) && (!IS_OPER(user)) && (numeric == 319) && dest->IsModeSet('I'));
/* always show to self */
if (user == dest)
return 0;

/* don't touch anything except 319 */
if (numeric != 319)
return 0;

/* don't touch if -I */
if (!dest->IsModeSet('I'))
return 0;

/* if it affects opers, we don't care if they are opered */
if (AffectsOpers)
return 1;

/* doesn't affect opers, sender is opered */
if (IS_OPER(user))
return 0;

/* user must be opered, boned. */
return 1;
}
};

Expand Down

0 comments on commit 6cdc212

Please sign in to comment.