Skip to content

Commit

Permalink
Add CLIENTTAGDENY module. (#108)
Browse files Browse the repository at this point in the history
It implements the current version of CLIENTTAGDENY isupport token, as defined by IRCv3.
  • Loading branch information
k4bek4be committed May 16, 2020
1 parent d533483 commit 0aa5fb6
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 2 deletions.
6 changes: 5 additions & 1 deletion Makefile.windows
Expand Up @@ -292,7 +292,8 @@ DLL_FILES=SRC/MODULES/CLOAK.DLL \
SRC/MODULES/IDENT_LOOKUP.DLL \
SRC/MODULES/HISTORY.DLL \
SRC/MODULES/TARGETFLOODPROT.DLL \
SRC/MODULES/TYPING-INDICATOR.DLL
SRC/MODULES/TYPING-INDICATOR.DLL \
SRC/MODULES/CLIENTTAGDENY.DLL


ALL: CONF UNREALSVC.EXE UnrealIRCd.exe MODULES
Expand Down Expand Up @@ -1089,4 +1090,7 @@ src/modules/targetfloodprot.dll: src/modules/targetfloodprot.c $(INCLUDES)
src/modules/typing-indicator.dll: src/modules/typing-indicator.c $(INCLUDES)
$(CC) $(MODCFLAGS) /Fosrc/modules/ /Fesrc/modules/ src/modules/typing-indicator.c $(MODLFLAGS)

src/modules/clienttagdeny.dll: src/modules/clienttagdeny.c $(INCLUDES)
$(CC) $(MODCFLAGS) /Fosrc/modules /Fesrc/modules src/modules/clienttagdeny.c $(MODLFLAGS)

dummy:
1 change: 1 addition & 0 deletions doc/conf/modules.default.conf
Expand Up @@ -208,6 +208,7 @@ loadmodule "sts"; /* strict transport policy (set::tls::sts-policy) */
loadmodule "echo-message"; /* shows clients if their messages are altered/filtered */
loadmodule "labeled-response"; /* correlate requests and responses easily */
loadmodule "typing-indicator"; /* typing indicator in PM and channels (+draft/typing) */
loadmodule "clienttagdeny"; /* informs clients about supported client-only message tags */


/*** Other ***/
Expand Down
6 changes: 5 additions & 1 deletion src/modules/Makefile.in
Expand Up @@ -73,7 +73,7 @@ R_MODULES= \
echo-message.so userip-tag.so userhost-tag.so \
typing-indicator.so \
ident_lookup.so history.so \
targetfloodprot.so
targetfloodprot.so clienttagdeny.so

MODULES=cloak.so $(R_MODULES)
MODULEFLAGS=@MODULEFLAGS@
Expand Down Expand Up @@ -636,6 +636,10 @@ targetfloodprot.so: targetfloodprot.c $(INCLUDES)
$(CC) $(CFLAGS) $(MODULEFLAGS) -DDYNAMIC_LINKING \
-o targetfloodprot.so targetfloodprot.c

clienttagdeny.so: clienttagdeny.c $(INCLUDES)
$(CC) $(CFLAGS) $(MODULEFLAGS) -DDYNAMIC_LINKING \
-o clienttagdeny.so clienttagdeny.c

#############################################################################
# capabilities
#############################################################################
Expand Down
78 changes: 78 additions & 0 deletions src/modules/clienttagdeny.c
@@ -0,0 +1,78 @@
/*
* IRC - Internet Relay Chat, src/modules/echo-message.c
* (C) 2020 k4be for The UnrealIRCd Team
*
* See file AUTHORS in IRC package for additional names of
* the programmers.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 1, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

#include "unrealircd.h"

char *ct_isupport_param(void);
int tags_rehash_complete(void);

extern MODVAR MessageTagHandler *mtaghandlers;
Module *module;

ModuleHeader MOD_HEADER = {
"clienttagdeny",
"5.0",
"Informs clients about supported client tags",
"k4be",
"unrealircd-5",
};

MOD_INIT(){
MARK_AS_OFFICIAL_MODULE(modinfo);

return MOD_SUCCESS;
}

MOD_LOAD(){
module = modinfo->handle;
ISupportAdd(module, "CLIENTTAGDENY", ct_isupport_param());
HookAdd(module, HOOKTYPE_REHASH_COMPLETE, 0, tags_rehash_complete);

return MOD_SUCCESS;
}

MOD_UNLOAD(){
return MOD_SUCCESS;
}

#define BUFLEN 500

char *ct_isupport_param(void){
static char buf[BUFLEN];
MessageTagHandler *m;

strlcpy(buf, "*", sizeof(buf));

for (m = mtaghandlers; m; m = m->next) {
if(!m->unloaded && m->name[0] == '+'){
strlcat(buf, ",-", sizeof(buf));
strlcat(buf, m->name+1, sizeof(buf));
}
}
return buf;
}

int tags_rehash_complete(void){
ISupportSet(module, "CLIENTTAGDENY", ct_isupport_param());
return HOOK_CONTINUE;
}

0 comments on commit 0aa5fb6

Please sign in to comment.