diff --git a/.RELEASE.NOTES b/.RELEASE.NOTES index a2a5f1ed8..d92e6df26 100644 --- a/.RELEASE.NOTES +++ b/.RELEASE.NOTES @@ -35,7 +35,6 @@ Unreal3.2-beta16 Release Notes * fixed major "messages being lost" bug which could cause: ziplink corruption, duplicate user entry in sjoin, etc which would happen if BUFFERPOOL was too small. * /who: there was a bug in the new /who system which could make it crash (oper only) -* "proxyscan on quit" bug introduced in beta15 * /list: opers couldn't see +s channels * a set::allow-userhost-change force-rejoin crash * compile error on redhat 9 with SSL enabled @@ -53,6 +52,8 @@ Unreal3.2-beta16 Release Notes * random ziplink crashes ==[ REMOVED ]== +* The built-in scanner (and threading at *NIX) has been removed because it + made UnrealIRCd unstable, you can use BOPM instead: http://www.blitzed.org/bopm/ * not removed, but CMDLINE_CONFIG(-f) is now disabled by default ==[ ADDITIONAL INFO ]== @@ -61,6 +62,7 @@ Unreal3.2-beta16 Release Notes * See Changelog ============================= (old release notes below) ============================== +[this has been editted a bit] * Unreal3.2 is a lot different than Unreal3.1.1. Forget all you have learned about setting up Unreal3.1.1 - this is a lot different. We have got @@ -91,16 +93,10 @@ Unreal3.2-beta16 Release Notes * We use autoconf to help with compiliation, and this should make us able to a lot more platform (we have even ported to BeOS). -* We require a pthreads library for the SOCKS scan now - and this is now - done in the background (no more waiting!). - * The IRCd is now modularized, and you load modules with the loadmodule - command. You will most likely want to add these lines: + command. You will most likely want to add this line: loadmodule "src/modules/commands.so"; - loadmodule "src/modules/scan.so"; - loadmodule "src/modules/scan_socks.so"; - loadmodule "src/modules/scan_http.so"; If you would like to code a module, doc/ will contain a module guide, and we got an example module in src/modules/m_dummy.c. @@ -149,8 +145,6 @@ Unreal3.2-beta16 Release Notes * You can now use an IP in the oper::from and vhost::from fields even if the host resolves -* Added an http proxy scanner (scan_http.so) - * Added oper::snomask to specify default oper snomask modes * /helpop text has been moved to a config directive, help {}. To keep the standard help @@ -176,18 +170,10 @@ Unreal3.2-beta16 Release Notes This allows you to have some crypted passwords and others not. If you have SSL enabled you may also use the md5 and sha1 methods. -* The old blackhole is now set::scan::endpoint and specifies an IP and port to tell - proxies to connect to. - * You can now specify a cipher list for SSL links (read doc/unreal32docs.html for more info) * +I is now in invisibility.so so it is easily disabled -* set::socks has been replaced by set::scan (read doc/unreal32docs.html for more info) - -* If you experince problems with the scanners, perhaps check out BOPM - (http://www.blitzed.org/bopm) - * log {} syslog support added (read doc/unreal32docs.html for more info) * Added ripemd-160 password encryption support diff --git a/Changes b/Changes index 00e5625f7..b85f5e4f1 100644 --- a/Changes +++ b/Changes @@ -2105,3 +2105,7 @@ seen. gmtime warning still there * Removed basically any mentions of threads in source tree, excepting threads.h which Resolver uses on win32 * Documentation changes not done yet +- Updated docs [unreal32docs/example.conf] (maybe not all yet), win zip makefile fixed +- Module coders: I've changed HOOKTYPE_PRE_LOCAL_CONNECT, you must now return '0' to let + the client pass and anything else is threated like a return, so you must return + FLUSH_BUFFER if you just called exit_client, this fixes a read-already-freed-mem bug. diff --git a/doc/example.conf b/doc/example.conf index eb9af2aca..c0a33042e 100644 --- a/doc/example.conf +++ b/doc/example.conf @@ -24,8 +24,8 @@ #those lines are ignored by the ircd. /* - * At *NIX UnrealIrcd supports modules (like the proxy scanner) - * Check doc/unreal32docs.html section 3.10 to see how loadmodule works. + * At *NIX UnrealIrcd supports modules. + * Loading the commands module is required: */ loadmodule "src/modules/commands.so"; @@ -41,7 +41,6 @@ loadmodule "src/modules/commands.so"; * }; * If linking, this numeric may not be used by any other server on the network. */ - me { name "irc.foonet.com"; @@ -597,18 +596,6 @@ except ban { mask *stskeeps@212.*; }; -/* - * NEW: except scan {} - * OLD: e:Line - * Makes it so scan.so doesn't scan you. - * - * except scan { mask (ip number/hostmask); }; - * repeat except scan {} for each ip to except. - */ - -except scan { - mask 216.73.27.177; -}; /* * NEW: deny dcc {} * OLD: dccdeny.conf @@ -721,29 +708,6 @@ set { show-connect-info; }; - /* You can only have a set::scan block if you have loaded - * the proxy scanner module, so if you get any errors: - * either load the modules or remove this set::scan block - */ - scan { - /* Choose this to be some IP and some port that's always open and - * reachable by the proxies - */ - endpoint [ip]:port; - /* - * What IP should the scanners bind to before connecting - */ - bind-ip "ip"; - /* - * What message should we NOTICE to the users when we scan them - */ - message " (admin didn't edit config correctly)"; - /* How long should we ban proxies for? */ - bantime 4d; - /* How long should we wait to see if the host has a proxy? */ - timeout 15s; - - }; ssl { /* Reads entropy from the domain socket located at '~/entropy' */ /* egd "~/entropy"; */ @@ -763,11 +727,10 @@ set { * all users to use any stats. */ oper-only-stats "okG"; }; + /* * Need more help ? - * 1) Read the documentation like this file - * 2) Come to irc.ircsystems.net #Unreal-Support - * 3) Mail supporters@lists.unrealircd.org - * - * Hope this helps you, -Osiris + * 1) Read the documentation, doc/unreal32docs.html !! + * 2) Mail unreal-users@lists.sourceforge.net + * 3) Come to irc.ircsystems.net #Unreal-Support */ diff --git a/doc/unreal32docs.html b/doc/unreal32docs.html index 33a8b3757..69d3b8409 100644 --- a/doc/unreal32docs.html +++ b/doc/unreal32docs.html @@ -21,7 +21,7 @@ http://www.unrealircd.com
Version: 3.2
Current Version: 3.2 Beta16
- Last doc update: 2003-04-28 + Last doc update: 2003-05-01 Head Coders: Stskeeps / codemastr / Luke / McSkaf / Syzop
Contributors: Zogg / NiQuiL / assyrian / chasm / DrBin / llthangel / Griever / nighthawk
Documentation: CKnight^ / Syzop
@@ -46,18 +46,17 @@ 3. Features
-- 3.1. Cloaking
-- 3.2. Modules
- -- 3.3. Proxy scanner
- -- 3.4. Snomasks
- -- 3.5. Aliases
- -- 3.6. Helpop
- -- 3.7. Oper access levels
- -- 3.8. Oper commands
- -- 3.9. SSL
- -- 3.10. IPv6
- -- 3.11. Zip links
- -- 3.12. Dynamic DNS/IP linking support
- -- 3.13. Throttling
- -- 3.14. Other features
+ -- 3.3. Snomasks
+ -- 3.4. Aliases
+ -- 3.5. Helpop
+ -- 3.6. Oper access levels
+ -- 3.7. Oper commands
+ -- 3.8. SSL
+ -- 3.9. IPv6
+ -- 3.10. Zip links
+ -- 3.11. Dynamic DNS/IP linking support
+ -- 3.12. Throttling
+ -- 3.13. Other features
4. Configuring your unrealircd.conf file
---4.1. Configuration file explained
@@ -80,20 +79,19 @@ ---4.18. Ban Version Block
---4.19. Ban Exception Block -=- (E:Line)
---4.20. TKL Exception Block
- ---4.21. Scan Exception Block -=- (e:Line)
- ---4.22. Throttle Exception Block
- ---4.23. Deny DCC Block -=- (dccdeny.conf)
- ---4.24. Deny Version Block -=- (V:Line)
- ---4.25. Deny Link Block -=- (D:Line / d:Line)
- ---4.26. Deny Channel Block -=- (chrestrict.conf)
- ---4.27. Allow Channel Block
- ---4.28. Vhost Block Block -=- (vhost.conf)
- ---4.29. Badword Block -=- (badwords.conf)
- ---4.30. Uline Block -=- (U:Line)
- ---4.31. Link Block -=- (C/N/H:Lines)
- ---4.32. Alias Block
- ---4.33. Help Block
- ---4.34. Set Block -=- (networks/unrealircd.conf)
+ ---4.21. Throttle Exception Block
+ ---4.22. Deny DCC Block -=- (dccdeny.conf)
+ ---4.23. Deny Version Block -=- (V:Line)
+ ---4.24. Deny Link Block -=- (D:Line / d:Line)
+ ---4.25. Deny Channel Block -=- (chrestrict.conf)
+ ---4.26. Allow Channel Block
+ ---4.27. Vhost Block Block -=- (vhost.conf)
+ ---4.28. Badword Block -=- (badwords.conf)
+ ---4.29. Uline Block -=- (U:Line)
+ ---4.30. Link Block -=- (C/N/H:Lines)
+ ---4.31. Alias Block
+ ---4.32. Help Block
+ ---4.33. Set Block -=- (networks/unrealircd.conf)
5. Additional Files
6. User & Channel Modes
7. User & Oper Commands
@@ -205,22 +203,13 @@ Windows:

3.2 - Modules

UnrealIRCd supports modules (except under windows) which is nice because:
- - You can decide not to load them (ex: not load the scanner module) and they won't use any memory/CPU
- You can load/reload/unload them while the ircd is running (by /rehash). This allows some bugs to be fixed or new features to be added without requiring a restart.
- Other people can create modules as well with new commands or usermodes for example.
UnrealIRCd only comes with a few modules, take a look at www.unrealircd.com -> modules or use google to find 3rd party modules.

Note that you need to load at least the commands module!

-

3.3 - Proxy scanner

-

UnrealIRCd comes with proxy scanner modules: if a user connects it will check on some ports to see - if the user is using an anonymous proxy. There's 1 main scanner module (scan.so) and two - modules which do the actual scanning: scan_socks and scan_http.

-

This module is not required, but often useful. If you load them, you need a set::scan block.

-

You can also use a separate proxy scanner program like BOPM, - in that case you should disable UnrealIRCd's own proxy scanner.

- -

3.4 - Snomasks

+

3.3 - Snomasks

Snomasks are server notice masks, it's a special type of usermode that controls which server notices you will receive (mostly used by opers)

It can be set by: /mode yournick +s SNOMASK, for example: /mode yournick +s +cF
@@ -241,7 +230,7 @@ Windows:

You can control which snomasks you automatically get (set::snomask-on-connect) and which you get on oper (set::snomask-on-oper, set::oper::snomask)

-

3.5 - Aliases

+

3.4 - Aliases

With aliases you can configure server-side alias commands. You can for example let "/ns identify blah" be forwarded to nickserv (it will be translated to: privmsg nickserv identify blah). You can even make more complex aliases such as /register can forward to @@ -249,7 +238,7 @@ Windows:

Aliases are configured by alias blocks in the configuration file, and you can also include a file with default aliases for most commonly used services.

-

3.6 - Helpop

+

3.5 - Helpop

UnrealIRCd has a built-in help system accessable by /helpop. The /helpop command is completely user configurable via the help block in the configuration file. Additionally, a help.conf is included which contains some basic help for all commands.
@@ -258,16 +247,16 @@ Windows:
so /helpop becomes /helpop ? and /helpop chmodes becomes /helpop ?chmodes etc..

-

3.7 - Oper access levels

+

3.6 - Oper access levels

There are several oper levels in UnrealIRCd and you can add additional rights (like to use /gline) to each of them, that way you can give each oper the privileges they need.

This is controlled by the oper flags in the oper block, see the oper block for more information.

-

3.8 - Oper commands

+

3.7 - Oper commands

UnrealIRCd has a lot of powerful oper commands which are explained in section 6, you probably want to read those after installing :).

-

3.9 - SSL

+

3.8 - SSL

SSL stands for Secure Socket Layer, with SSL you can make secure encrypted connections. It can be used to encrypt server<->server traffic, but client<->server traffic can also be encrypted. You usually use SSL to protect against sniffing and for authentication.

@@ -287,28 +276,28 @@ Windows:
port 6900 (an SSL port).

If you are really concerned about security/sniffing then you also need to validate certificates on the client end. That's however way too off topic to explain here. Learn about SSL, don't ask us, it has nothing to do with UnrealIRCd.

-

3.10 - IPv6

+

3.9 - IPv6

UnrealIRCd supports IPv6, since beta15 it seems to work well although there might be some bugs in it. You need to compile with IPv6 support (answer yes to the ./Config question), ofcourse your OS needs to have IPv6 support enabled too.

Although microsoft has an experimental IPv6 implementation for w2k/XP it is not (yet) supported by UnrealIRCd.

-

3.11 - Zip links

+

3.10 - Zip links

Zip links can be turned on for server<->server links, it compresses the data by using zlib. It can save 60-80% bandwidth... So it's quite useful for low-bandwidth links or links with many users, it can help a lot when you are linking since a lot of data is sent about every user/channel/etc.

To compile with zip links support, you need to answer Yes to the zlib question in ./Config and set it in link::options::zip

-

3.12 - Dynamic DNS/IP linking support

+

3.11 - Dynamic DNS/IP linking support

UnrealIRCd has some (new) nice features which helps dynamic IP users using dynamic DNS (like blah.dyndns.org). If you are linking two dynamic DNS hosts, then set link::options::nodnscache and link::options::nohostcheck.

-

3.13 - Throttling

+

3.12 - Throttling

Throttling is a method that allows you to limit how fast a user can disconnect and then reconnect to your server. You can config it in your set::throttle block to allow X connections in YY seconds from the same IP.

-

3.14 - Other features

+

3.13 - Other features

UnrealIRCd has a lot of features so not everything is covered here... You'll find that out by yourself.

@@ -920,16 +909,10 @@ drpass {

UnrealIRCd now supports modules (at *NIX). Modules make it easy to write extensions and you can load/unload them while the ircd is running.

Modules that come standard with Unreal3.2:

-

scan_http.so - HTTP proxy scanner module
- scan_socks.so - SOCKS proxy scanner module
- scan.so - Main scanner module (scan_socks and scan_http rely on it)
- commands.so - All the / commands (well not all yet, but will eventually be all) REQUIRED

-

So you want to be sure you have commands.so loaded, and often you want the scan* modules too, example:

+

commands.so - All the / commands (well not all yet, but will eventually be all) REQUIRED

+

So you want to be sure you have commands.so loaded:

 loadmodule "src/modules/commands.so";
-loadmodule "src/modules/scan.so";
-loadmodule "src/modules/scan_socks.so";
-loadmodule "src/modules/scan_http.so";
 

4.11 - Log Block OPTIONAL

@@ -1169,25 +1152,7 @@ except tkl { type gline; };

-

4.21 - Scan Exceptions Block - OPTIONAL (Previously known as the e:Line)

-

-

Syntax:
-

-except scan {
-	mask <ipmask>;
-};

-

The except scan block allows you to specify an IP mask that will override the - scanners. This only works if you have chosen to load the scanner modules. The - except::mask specifies an IP mask that will not be banned because of any type - of scanner problem.

-

Example
-

-except scan {
-	mask 192.168.1.*;
-};

-

-

4.22 - Throttle Exceptions Block +

4.21 - Throttle Exceptions Block OPTIONAL

Syntax:
@@ -1204,7 +1169,7 @@ except throttle { mask 192.168.1.*; };

-

4.23 - Deny DCC Block +

4.22 - Deny DCC Block OPTIONAL (Previously known as dccdeny.conf)

Syntax:
@@ -1225,7 +1190,7 @@ deny dcc { reason "This is a GD Virus"; };

-

4.24 - Deny Version Block +

4.23 - Deny Version Block OPTIONAL (Previously known as the V:Line)

Syntax:
@@ -1252,7 +1217,7 @@ deny version { flag compiled into it, if it does not have a ! prefix, then it means the server must have this flag compiled.

-

4.25 - Deny Link Block +

4.24 - Deny Link Block OPTIONAL (Previously known as the D/d:Line)

Syntax:
@@ -1279,7 +1244,7 @@ deny link { auto (only applies to autoconnects, /connect will still work), and all (applies to all connection attempts).

-

4.26 - Deny Channel Block +

4.25 - Deny Channel Block OPTIONAL (Previously known as chrestrict.conf)

Syntax:
@@ -1300,7 +1265,7 @@ deny channel { reason "No it don't!"; };

-

4.27 - Allow Channel Block +

4.26 - Allow Channel Block OPTIONAL

Syntax:
@@ -1317,7 +1282,7 @@ allow channel { channel "#something"; };

-

4.28 - Vhost Block +

4.27 - Vhost Block OPTIONAL (Previously known as vhosts.conf)

Syntax:
@@ -1356,7 +1321,7 @@ vhost { swhois "Im Special"; };

-

4.29 - Badword Block +

4.28 - Badword Block OPTIONAL (Previously known as badwords.*.conf)

Syntax:
@@ -1383,7 +1348,7 @@ badword channel { replace shoot; };

-

4.30 - ULines Block +

4.29 - ULines Block OPTIONAL (Previously known as the U:Line)

Syntax:
@@ -1404,7 +1369,7 @@ ulines { stats.mynetwork.com; };

-

4.31 - Link Block +

4.30 - Link Block OPTIONAL (Previously known as C/N/H:Lines)

Syntax:
@@ -1511,7 +1476,7 @@ link hub.mynet.com { }; };

-

4.32 - Alias Block +

4.31 - Alias Block OPTIONAL

Syntax [standard alias]:
@@ -1558,7 +1523,7 @@ alias <name> { from the second till the last. For examples of using the alias block in the command format, consult doc/example.conf.

-

4.33 - Help Block +

4.32 - Help Block OPTIONAL

Syntax:
@@ -1575,7 +1540,7 @@ help <name> { for the help block are the text that will be displayed to the user when requesting the /helpop.

-

4.34 - Set Block +

4.33 - Set Block REQUIRED (Previously known as unrealircd.conf/networks file)

The set file is what use to be our networks/unrealircd.conf and our networks @@ -1737,17 +1702,6 @@ set { If set to yes, the H/get_host flag will be honored and +x will be automatically set at /oper. If set to no, the user must set +x manually to receive the oper host.

-

set::scan::endpoint <ip:port>;
- Specifies the IP and port that the server will tell an incoming open proxy to - connect to.

-

set::scan::bind-ip <ip>;
- What ip should the scanner bind to before connecting

-

set::scan::message <message>;
- Put a message that users will see when scanner is scanning

-

set::scan::bantime <time>;
- Sets the time of the ban (4d)

-

set::scan::timeout <time>;
- How long we wait to see if the host has a proxy (15s)

set::ssl::egd <filename>;
Specifies that EGD (Entropy Gathering Daemon) support should be enabled. If you run OpenSSL 0.9.7 or higher, then /var/run/egd-pool, /dev/egd-pool, /etc/egd-pool, diff --git a/include/modules.h b/include/modules.h index bda71a599..698cc6cee 100644 --- a/include/modules.h +++ b/include/modules.h @@ -245,6 +245,16 @@ void HooktypeDel(Hooktype *hooktype, Module *module); #define RunHook0(hooktype) for (global_i = Hooks[hooktype]; global_i; global_i = global_i->next)(*(global_i->func.intfunc))() #define RunHook(hooktype,x) for (global_i = Hooks[hooktype]; global_i; global_i = global_i->next) (*(global_i->func.intfunc))(x) #define RunHookReturn(hooktype,x,ret) for (global_i = Hooks[hooktype]; global_i; global_i = global_i->next) if((*(global_i->func.intfunc))(x) ret) return -1 +#define RunHookReturnInt(hooktype,x,retchk) \ +{ \ + int retval; \ + for (global_i = Hooks[hooktype]; global_i; global_i = global_i->next) \ + { \ + retval = (*(global_i->func.intfunc))(x); \ + if (retval retchk) return retval; \ + } \ +} + #define RunHookReturnVoid(hooktype,x,ret) for (global_i = Hooks[hooktype]; global_i; global_i = global_i->next) if((*(global_i->func.intfunc))(x) ret) return #define RunHook2(hooktype,x,y) for (global_i = Hooks[hooktype]; global_i; global_i = global_i->next) (*(global_i->func.intfunc))(x,y) diff --git a/makefile.win32 b/makefile.win32 index e1cc9b6a2..c48b92291 100644 --- a/makefile.win32 +++ b/makefile.win32 @@ -372,18 +372,6 @@ src/m_svswatch.obj: src/modules/m_svswatch.c $(INCLUDES) src/m_svssilence.obj: src/modules/m_svssilence.c $(INCLUDES) $(CC) $(CFLAGS) src/modules/m_svssilence.c -src/scan.obj: src/modules/scan.c $(INCLUDES) - $(CC) $(CFLAGS) src/modules/scan.c - -src/scan_dummy.obj: src/modules/scan_dummy.c $(INCLUDES) - $(CC) $(CFLAGS) src/modules/scan_dummy.c - -src/scan_socks.obj: src/modules/scan_socks.c $(INCLUDES) - $(CC) $(CFLAGS) src/modules/scan_socks.c - -src/scan_http.obj: src/modules/scan_http.c $(INCLUDES) - $(CC) $(CFLAGS) src/modules/scan_http.c - src/win32/win32.res: src/win32/win32gui.rc $(RC) /l 0x409 /fosrc/win32/win32.res /i ./include /i ./src \ /d NDEBUG src/win32/win32gui.rc diff --git a/makefile.win32.ziplink b/makefile.win32.ziplink index 645283d9b..94ad67f57 100644 --- a/makefile.win32.ziplink +++ b/makefile.win32.ziplink @@ -9,7 +9,7 @@ LINK=link RC=rc # Here you put your settings DEBUG=1 -FD_SETSIZE=/D SCAN_API=1 /D FD_SETSIZE=16384 +FD_SETSIZE=/D FD_SETSIZE=16384 !IFNDEF DEBUG CFLAGS=/MT /J /O2 /G5 /I ./INCLUDE /I c:\dev\zlib /Fosrc/ /nologo\ $(FD_SETSIZE) $(NS_ADDRESS) /D STATIC_LINKING /D _WIN32GUI /D NOSPOOF=1 /D ZIP_LINKS /D _WINDOWS /D ZLIB_DLL /c @@ -51,7 +51,7 @@ MOD_FILES=SRC/L_COMMANDS.OBJ SRC/M_CHGHOST.OBJ SRC/M_SDESC.OBJ SRC/M_SETIDENT.OB SRC/M_PINGPONG.OBJ SRC/M_QUIT.OBJ SRC/M_RAKILL.OBJ SRC/M_RPING.OBJ SRC/M_SENDUMODE.OBJ \ SRC/M_SQLINE.OBJ SRC/M_KILL.OBJ SRC/M_TSCTL.OBJ SRC/M_UNKLINE.OBJ \ SRC/M_UNSQLINE.OBJ SRC/M_UNZLINE.OBJ SRC/M_WHOIS.OBJ \ - SRC/SCAN.OBJ SRC/SCAN_SOCKS.OBJ SRC/SCAN_HTTP.OBJ SRC/M_TKL.OBJ SRC/M_VHOST.OBJ \ + SRC/M_TKL.OBJ SRC/M_VHOST.OBJ \ SRC/M_CYCLE.OBJ SRC/M_SVSJOIN.OBJ SRC/M_SVSPART.OBJ SRC/M_SVSLUSERS.OBJ \ SRC/M_SVSWATCH.OBJ SRC/M_SVSSILENCE.OBJ @@ -380,18 +380,6 @@ src/m_svswatch.obj: src/modules/m_svswatch.c $(INCLUDES) src/m_svssilence.obj: src/modules/m_svssilence.c $(INCLUDES) $(CC) $(CFLAGS) src/modules/m_svssilence.c -src/scan.obj: src/modules/scan.c $(INCLUDES) - $(CC) $(CFLAGS) src/modules/scan.c - -src/scan_dummy.obj: src/modules/scan_dummy.c $(INCLUDES) - $(CC) $(CFLAGS) src/modules/scan_dummy.c - -src/scan_socks.obj: src/modules/scan_socks.c $(INCLUDES) - $(CC) $(CFLAGS) src/modules/scan_socks.c - -src/scan_http.obj: src/modules/scan_http.c $(INCLUDES) - $(CC) $(CFLAGS) src/modules/scan_http.c - src/win32/win32.res: src/win32/win32gui.rc $(RC) /l 0x409 /fosrc/win32/win32.res /i ./include /i ./src \ /d NDEBUG src/win32/win32gui.rc diff --git a/src/s_user.c b/src/s_user.c index 56a2a66ff..5bb562c7a 100644 --- a/src/s_user.c +++ b/src/s_user.c @@ -971,7 +971,7 @@ extern int register_user(aClient *cptr, aClient *sptr, char *nick, char *usernam return xx; } find_shun(sptr); - RunHookReturn(HOOKTYPE_PRE_LOCAL_CONNECT, sptr, >0); + RunHookReturnInt(HOOKTYPE_PRE_LOCAL_CONNECT, sptr, !=0); } else {