diff options
-rw-r--r-- | docs/conf/helpop-full.conf.example | 224 | ||||
-rw-r--r-- | docs/conf/helpop.conf.example | 194 | ||||
-rw-r--r-- | docs/conf/inspircd.conf.example | 46 | ||||
-rw-r--r-- | docs/conf/modules.conf.example | 18 | ||||
-rw-r--r-- | include/modules.h | 7 | ||||
-rwxr-xr-x | modulemanager | 2 | ||||
-rw-r--r-- | src/modules.cpp | 1 | ||||
-rw-r--r-- | src/modules/extra/m_geoip.cpp | 7 | ||||
-rw-r--r-- | src/modules/m_banredirect.cpp | 15 | ||||
-rw-r--r-- | src/modules/m_shun.cpp | 2 | ||||
-rw-r--r-- | src/modules/m_swhois.cpp | 25 | ||||
-rw-r--r-- | src/modules/m_xline_db.cpp | 2 | ||||
-rw-r--r-- | src/users.cpp | 1 | ||||
-rw-r--r-- | src/xline.cpp | 4 |
14 files changed, 324 insertions, 224 deletions
diff --git a/docs/conf/helpop-full.conf.example b/docs/conf/helpop-full.conf.example index aa63b6ebb..20e03d64a 100644 --- a/docs/conf/helpop-full.conf.example +++ b/docs/conf/helpop-full.conf.example @@ -2,6 +2,8 @@ # Helpop Standard # ##################### +<config format="xml"> + <alias text="HELP" replace="HELPOP $2-"> <helpop key="start" value="InspIRCd Help System @@ -398,11 +400,12 @@ LOCKSERV UNLOCKSERV"> Returns the ip and nickname of the given users."> -<helpop key="tline" value="/TLINE <host/IP mask> +<helpop key="tline" value="/TLINE <mask> This command returns the number of local and global clients matched, and the percentage of clients matched, plus how they were matched -(by IP address or by hostname)."> +(by IP address or by hostname). Mask should be given as either a +nick!user@host or user@IP (wildcards acceptable)."> <helpop key="lockserv" value="/LOCKSERV :[<message>] @@ -464,7 +467,7 @@ n Block private and channel notices P Block part messages q Block quit messages o Don't match against opers -c Strip all color codes from the message before matching +c Strip all formatting codes from the message before matching * Represents all of the above flags - Does nothing, a non-op for when you do not want to specify any flags @@ -740,7 +743,7 @@ Sends a message to all +w users."> <helpop key="rline" value="/RLINE <regex> [<duration> :<reason>] -Sets or removes an r-line (regex line) on a n!u@h\\srealname mask. You +Sets or removes an r-line (regex line) on a n!u@h\srealname mask. You must specify all three parameters to add an rline, and one parameter to remove an rline (just the regex). @@ -782,79 +785,81 @@ using their cloak when they quit."> ---------- c Blocks private messages and notices from users who do - not share a common channel with you (requires + not share a common channel with you (requires the commonchans module). d Deaf mode. User will not receive any messages or notices - from channels they are in (requires deaf module). + from channels they are in (requires the deaf module). g In combination with /ACCEPT, provides for server side - ignore (requires callerid module). + ignore (requires the callerid module). h Marks as 'available for help' in WHOIS (IRCop only, - requires helpop module). + requires the helpop module). i Makes invisible to /WHO if the user using /WHO is not in a common channel. k Prevents the user from being kicked from channels, or having op modes removed from them (services only, - requires servprotect module). + requires the servprotect module). o Marks as a IRC operator. s <mask> Receives server notices specified by <mask> (IRCop only). r Marks as a having a registered nickname - (requires services account module). + (requires the services account module). w Receives wallops messages. - x Gives a cloaked hostname (requires cloaking module). - z Only allow private messages from SSL users (requires + x Gives a cloaked hostname (requires the cloaking module). + z Only allow private messages from SSL users (requires the sslmode module). - B Marks as a bot (requires botmode module). + B Marks as a bot (requires the botmode module). G Censors messages sent to the user based on filters - configured for the network (requires censor module). - H Hides an oper's oper status from WHOIS (requires + configured for the network (requires the censor module). + H Hides an oper's oper status from WHOIS (requires the hideoper module). I Hides a user's entire channel list in WHOIS from - non-IRCops (requires hidechans module). + non-IRCops (requires the hidechans module). L Stops redirections done by m_redirect (mode must be enabled in the config). R Blocks private messages from unregistered users - (requires services account module). - S Strips mIRC color/bold/underline codes out of private - messages to the user (requires stripcolor module). + (requires the services account module). + S Strips formatting codes out of private messages + to the user (requires the stripcolor module). W Receives notification when a user uses WHOIS on them - (IRCop only, requires showwhois module)."> + (IRCop only, requires the showwhois module)."> <helpop key="chmodes" value="Channel Modes ------------- v <nickname> Gives voice to <nickname>, allowing them to speak while the channel is +m. - h <nickname> Gives halfop status to <nickname> (requires + h <nickname> Gives halfop status to <nickname> (requires the customprefix module). o <nickname> Gives op status to <nickname>. a <nickname> Gives protected status to <nickname>, preventing - them from them from being kicked (+q only, - requires customprefix module). - q <nickname> Gives owner status to <nickname>, preventing them - from being kicked (Services or only, requires + them from being kicked (+q only, requires the customprefix module). + q <nickname> Gives owner status to <nickname>, preventing them + from being kicked (Services or +q only, requires + the customprefix module). b <hostmask> Bans <hostmask> from the channel. - e <hostmask> Excepts <hostmask> from bans (requires + e <hostmask> Excepts <hostmask> from bans (requires the banexception module). I <hostmask> Excepts <hostmask> from +i, allowing matching users to join while the channel is invite-only - (requires inviteexception module). + (requires the inviteexception module). - c Blocks messages containing mIRC color codes - (requires blockcolor module). + c Blocks messages that contain formatting codes + (requires the blockcolor module). d <time> Blocks messages to a channel from new users until they have been in the channel for <time> - seconds (requires delaymsg module). + seconds (requires the delaymsg module). f [*]<lines>:<sec> Kicks on text flood equal to or above the specified rate. With *, the user is banned - (requires messageflood module). + (requires the messageflood module). + g <mask> Blocks messages matching the given glob mask + (requires the chanfilter module). i Makes the channel invite-only. Users can only join if an operator uses /INVITE to invite them. j <joins>:<sec> Limits joins to the specified rate (requires - joinflood module). + the joinflood module). k <key> Set the channel key (password) to <key>. l <limit> Set the maximum allowed users to <limit>. m Enable moderation. Only users with +v, +h, or +o @@ -864,73 +869,89 @@ using their cloak when they quit."> p Make channel private, hiding it in users' whoises and replacing it with * in /LIST. r Marks the channel as registered with Services - (requires services account module). + (requires the services account module). s Make channel secret, hiding it in users' whoises and /LIST. t Prevents users without +h or +o from changing the topic. u Makes the channel an auditorium; normal users only see themselves or themselves and the operators, - while operators see all the users (requires + while operators see all the users (requires the auditorium module). w <flag>:<banmask> Adds basic channel access controls of <flag> to <banmask>, via the +w listmode. For example, +w o:R:Brain will op anyone identified to the account 'Brain' on join. - (requires autoop module) + (requires the autoop module) z Blocks non-SSL clients from joining the channel. A Allows anyone to invite users to the channel (normally only chanops can invite, requires - allowinvite module). + the allowinvite module). B Blocks messages with too many capital letters, as determined by the network configuration - (requires blockcaps module). - C Blocks any CTCPs to the channel (requires noctcp - module). - D Delays join messages from users until they - message the channel (requires delayjoin module). + (requires the blockcaps module). + C Blocks any CTCPs to the channel (requires the + noctcp module). + D Delays join messages from users until they message + the channel (requires the delayjoin module). E [~*][lines]:[sec]{[:difference]}{[:backlog]} Allows blocking of similar messages. Kicks as default, blocks with ~ and bans with * The last two parameters are optional. F <changes>:<sec> Blocks nick changes when they equal or exceed the - specified rate (requires nickflood module). + specified rate (requires the nickflood module). G Censors messages to the channel based on the - network configuration (requires censor module). + network configuration (requires the censor module). H <num>:<duration> Displays the last <num> lines of chat to joining users. <duration> is the maximum time to keep - lines in the history buffer (requires chanhistory - module). + lines in the history buffer (requires the + chanhistory module). J <seconds> Prevents rejoin after kick for the specified number of seconds. This prevents auto-rejoin - (requires kicknorejoin module). + (requires the kicknorejoin module). K Blocks /KNOCK on the channel. L <channel> If the channel reaches its limit set by +l, - redirect users to <channel> (requires redirect - module). + redirect users to <channel> (requires the + redirect module). M Blocks unregistered users from speaking (requires - services account module). + the services account module). N Prevents users on the channel from changing nick - (requires nonicks module). + (requires the nonicks module). O Channel is IRCops only (can only be set by IRCops, - requires operchans module). + requires the operchans module). P Makes the channel permanent; Bans, invites, the topic, modes, and such will not be lost when it empties (can only be set by IRCops, requires - permchannels module). + the permchannels module). Q Only ulined servers and their users can kick - (requires nokicks module) + (requires the nokicks module) R Blocks unregistered users from joining (requires - services account module). - S Strips mIRC color codes from messages to the - channel (requires stripcolor module). + the services account module). + S Strips formatting codes from messages to the + channel (requires the stripcolor module). T Blocks /NOTICEs to the channel from users who are - not at least halfop (requires nonotice module). - - g <mask> Blocks messages matching the given glob mask - (requires chanfilter module). - X <mode> Makes channel operators immune to the specified - restrictive mode (requires exemptchanops module). + not at least halfop (requires the nonotice module). + X <type>:<status> Makes users of <status> or higher exempt to the + specified restriction <type>. For example: flood:h + (requires the exemptchanops module). + Possible restriction types to exempt with +X are: + + auditorium-see Permission required to see the full user list of + a +u channel (requires the auditorium module). + auditorium-vis Permission required to be visible in a +u channel + (requires the auditorium module). + blockcaps Channel mode +B + blockcolor Channel mode +c + censor Channel mode +G + filter Channel mode +g + flood Channel mode +f + nickflood Channel mode +F + noctcp Channel mode +C + nonick Channel mode +N + nonotice Channel mode +T + regmoderated Channel mode +M + stripcolor Channel mode +S + topiclock Channel mode +t ------------- NOTE: A large number of these modes are dependent upon server-side modules @@ -991,30 +1012,25 @@ Note that all /STATS use is broadcast to online IRC operators."> A Allows receipt of remote announcement messages. c Allows receipt of local connect messages. C Allows receipt of remote connect messages. - d Allows receipt of general (and sometimes random) debug - messages. + d Allows receipt of general (and sometimes random) debug messages. f Allows receipt of flooding notices. - g Allows receipt of globops (requires globops module). - j Allows receipt of channel creation notices (requires - chancreate module). - J Allows receipt of remote channel creation notices (requires - chancreate module). + g Allows receipt of globops (requires the globops module). + j Allows receipt of channel creation notices (requires the chancreate module). + J Allows receipt of remote channel creation notices (requires the chancreate module). k Allows receipt of local kill messages. K Allows receipt of remote kill messages. - l Allows receipt of local linking related - messages. - L Allows receipt of remote linking related - messages. - n See local nickname changes (requires seenicks module). - N See remote nickname changes (requires seenicks modules). - o Allows receipt of oper-up, oper-down, and oper-failure - messages. - O Allows receipt of remote oper-up, oper-down, and oper-failure - messages. + l Allows receipt of local linking related messages. + L Allows receipt of remote linking related messages. + n See local nickname changes (requires the seenicks module). + N See remote nickname changes (requires the seenicks modules). + o Allows receipt of oper-up, oper-down, and oper-failure messages. + O Allows receipt of remote oper-up, oper-down, and oper-failure messages. q Allows receipt of local quit messages. Q Allows receipt of remote quit messages. + r Allows receipt of local oper commands (requires the operlog module). + R Allows receipt of remote oper commands (requires the operlog module). t Allows receipt of attempts to use /STATS (local and remote). - v Allows receipt of oper-override notices (requires override module). + v Allows receipt of oper-override notices (requires the override module). x Allows receipt of local Xline notices (g/Z/q/k/e/R/shuns). X Allows receipt of remote Xline notices (g/Z/q/k/e/R/shuns)."> @@ -1039,44 +1055,44 @@ setting +I <extban>. Matching extbans: j:<channel> Matches anyone in the given channel. Does not support - wildcards (requires channelban module). - n:<class> Matches users in a matching connect class (requires + wildcards (requires the channelban module). + n:<class> Matches users in a matching connect class (requires the classban module). - r:<realname> Matches users with a matching real name (requires + r:<realname> Matches users with a matching real name (requires the gecosban module). - s:<server> Matches users on a matching server (requires serverban - module). - z:<certfp> Matches users with a matching SSL certificate fingerprint - (requires sslmodes module) + s:<server> Matches users on a matching server (requires the + serverban module). + z:<certfp> Matches users having the given SSL certificate + fingerprint (requires the sslmodes module). O:<opertype> Matches IRCops of a matching type, mostly useful as an - an invite exception (requires operchans module). + an invite exception (requires the operchans module). R:<account> Matches users logged into a matching account (requires - services account module). + the services account module). U:<banmask> Matches unregistered users matching the given banmask. - (requires services account module). + (requires the services account module). Acting extbans: - c:<banmask> Blocks any messages that contain color codes from - matching users (requires blockcolor module). - m:<banmask> Blocks messages from matching users (requires muteban + c:<banmask> Blocks any messages that contain formatting codes from + matching users (requires the blockcolor module). + m:<banmask> Blocks messages from matching users (requires the muteban module). Users with +v or above are not affected. p:<banmask> Blocks part messages from matching users (requires - nopartmsg module). + the nopartmsg module). A:<banmask> Blocks invites by matching users even when +A is set - (requires allowinvite module). + (requires the allowinvite module). B:<banmask> Blocks all capital or nearly all capital messages from - matching users (requires blockcaps module). - C:<banmask> Blocks CTCPs from matching users (requires noctcp + matching users (requires the blockcaps module). + C:<banmask> Blocks CTCPs from matching users (requires the noctcp module). N:<banmask> Blocks nick changes from matching users (requires - nonicks module). - Q:<banmask> Blocks kicks by matching users (requires nokicks - module). - S:<banmask> Strips color/bold/underline from messages from matching - users (requires stripcolor module). - T:<banmask> Blocks notices from matching users (requires nonotice + the nonicks module). + Q:<banmask> Blocks kicks by matching users (requires the nokicks module). + S:<banmask> Strips formatting codes from messages from matching + users (requires the stripcolor module). + T:<banmask> Blocks notices from matching users (requires the + nonotice module). A ban given to an Acting extban may either be a nick!user@host mask (unless stated otherwise), matched against users as for a normal ban, @@ -1085,4 +1101,4 @@ or a Matching extban. There is an additional special type of extended ban, a redirect ban: Redirect n!u@h#channel will redirect the banned user to #channel - when they try to join (requires banredirect module)."> + when they try to join (requires the banredirect module)."> diff --git a/docs/conf/helpop.conf.example b/docs/conf/helpop.conf.example index b38e4130e..25253c139 100644 --- a/docs/conf/helpop.conf.example +++ b/docs/conf/helpop.conf.example @@ -74,79 +74,81 @@ LOCKSERV UNLOCKSERV"> ---------- c Blocks private messages and notices from users who do - not share a common channel with you (requires + not share a common channel with you (requires the commonchans module). d Deaf mode. User will not receive any messages or notices - from channels they are in (requires deaf module). + from channels they are in (requires the deaf module). g In combination with /ACCEPT, provides for server side - ignore (requires callerid module). + ignore (requires the callerid module). h Marks as 'available for help' in WHOIS (IRCop only, - requires helpop module). + requires the helpop module). i Makes invisible to /WHO if the user using /WHO is not in a common channel. k Prevents the user from being kicked from channels, or having op modes removed from them (services only, - requires servprotect module). + requires the servprotect module). o Marks as a IRC operator. s <mask> Receives server notices specified by <mask> (IRCop only). r Marks as a having a registered nickname - (requires services account module). + (requires the services account module). w Receives wallops messages. - x Gives a cloaked hostname (requires cloaking module). - z Only allow private messages from SSL users (requires + x Gives a cloaked hostname (requires the cloaking module). + z Only allow private messages from SSL users (requires the sslmode module). - B Marks as a bot (requires botmode module). + B Marks as a bot (requires the botmode module). G Censors messages sent to the user based on filters - configured for the network (requires censor module). - H Hides an oper's oper status from WHOIS (requires + configured for the network (requires the censor module). + H Hides an oper's oper status from WHOIS (requires the hideoper module). I Hides a user's entire channel list in WHOIS from - non-IRCops (requires hidechans module). + non-IRCops (requires the hidechans module). L Stops redirections done by m_redirect (mode must be enabled in the config). R Blocks private messages from unregistered users - (requires services account module). - S Strips mIRC color/bold/underline codes out of private - messages to the user (requires stripcolor module). + (requires the services account module). + S Strips formatting codes out of private messages + to the user (requires the stripcolor module). W Receives notification when a user uses WHOIS on them - (IRCop only, requires showwhois module)."> + (IRCop only, requires the showwhois module)."> <helpop key="chmodes" value="Channel Modes ------------- v <nickname> Gives voice to <nickname>, allowing them to speak while the channel is +m. - h <nickname> Gives halfop status to <nickname> (requires + h <nickname> Gives halfop status to <nickname> (requires the customprefix module). o <nickname> Gives op status to <nickname>. a <nickname> Gives protected status to <nickname>, preventing - them from them from being kicked (+q only, - requires customprefix module). - q <nickname> Gives owner status to <nickname>, preventing them - from being kicked (Services or only, requires + them from being kicked (+q only, requires the customprefix module). + q <nickname> Gives owner status to <nickname>, preventing them + from being kicked (Services or +q only, requires + the customprefix module). b <hostmask> Bans <hostmask> from the channel. - e <hostmask> Excepts <hostmask> from bans (requires + e <hostmask> Excepts <hostmask> from bans (requires the banexception module). I <hostmask> Excepts <hostmask> from +i, allowing matching users to join while the channel is invite-only - (requires inviteexception module). + (requires the inviteexception module). - c Blocks messages containing mIRC color codes - (requires blockcolor module). + c Blocks messages that contain formatting codes + (requires the blockcolor module). d <time> Blocks messages to a channel from new users until they have been in the channel for <time> - seconds (requires delaymsg module). + seconds (requires the delaymsg module). f [*]<lines>:<sec> Kicks on text flood equal to or above the specified rate. With *, the user is banned - (requires messageflood module). + (requires the messageflood module). + g <mask> Blocks messages matching the given glob mask + (requires the chanfilter module). i Makes the channel invite-only. Users can only join if an operator uses /INVITE to invite them. j <joins>:<sec> Limits joins to the specified rate (requires - joinflood module). + the joinflood module). k <key> Set the channel key (password) to <key>. l <limit> Set the maximum allowed users to <limit>. m Enable moderation. Only users with +v, +h, or +o @@ -156,73 +158,72 @@ LOCKSERV UNLOCKSERV"> p Make channel private, hiding it in users' whoises and replacing it with * in /LIST. r Marks the channel as registered with Services - (requires services account module). + (requires the services account module). s Make channel secret, hiding it in users' whoises and /LIST. t Prevents users without +h or +o from changing the topic. u Makes the channel an auditorium; normal users only see themselves or themselves and the operators, - while operators see all the users (requires + while operators see all the users (requires the auditorium module). w <flag>:<banmask> Adds basic channel access controls of <flag> to <banmask>, via the +w listmode. For example, +w o:R:Brain will op anyone identified to the account 'Brain' on join. - (requires autoop module) + (requires the autoop module) z Blocks non-SSL clients from joining the channel. A Allows anyone to invite users to the channel (normally only chanops can invite, requires - allowinvite module). + the allowinvite module). B Blocks messages with too many capital letters, as determined by the network configuration - (requires blockcaps module). - C Blocks any CTCPs to the channel (requires noctcp - module). - D Delays join messages from users until they - message the channel (requires delayjoin module). + (requires the blockcaps module). + C Blocks any CTCPs to the channel (requires the + noctcp module). + D Delays join messages from users until they message + the channel (requires the delayjoin module). E [~*][lines]:[sec]{[:difference]}{[:backlog]} Allows blocking of similar messages. Kicks as default, blocks with ~ and bans with * The last two parameters are optional. + F <changes>:<sec> Blocks nick changes when they equal or exceed the - specified rate (requires nickflood module). + specified rate (requires the nickflood module). G Censors messages to the channel based on the - network configuration (requires censor module). + network configuration (requires the censor module). H <num>:<duration> Displays the last <num> lines of chat to joining users. <duration> is the maximum time to keep - lines in the history buffer (requires chanhistory - module). + lines in the history buffer (requires the + chanhistory module). J <seconds> Prevents rejoin after kick for the specified number of seconds. This prevents auto-rejoin - (requires kicknorejoin module). + (requires the kicknorejoin module). K Blocks /KNOCK on the channel. L <channel> If the channel reaches its limit set by +l, - redirect users to <channel> (requires redirect - module). + redirect users to <channel> (requires the + redirect module). M Blocks unregistered users from speaking (requires - services account module). + the services account module). N Prevents users on the channel from changing nick - (requires nonicks module). + (requires the nonicks module). O Channel is IRCops only (can only be set by IRCops, - requires operchans module). + requires the operchans module). P Makes the channel permanent; Bans, invites, the topic, modes, and such will not be lost when it empties (can only be set by IRCops, requires - permchannels module). + the permchannels module). Q Only ulined servers and their users can kick - (requires nokicks module) + (requires the nokicks module) R Blocks unregistered users from joining (requires - services account module). - S Strips mIRC color codes from messages to the - channel (requires stripcolor module). + the services account module). + S Strips formatting codes from messages to the + channel (requires the stripcolor module). T Blocks /NOTICEs to the channel from users who are - not at least halfop (requires nonotice module). - - g <mask> Blocks messages matching the given glob mask - (requires chanfilter module). - X <mode> Makes channel operators immune to the specified - restrictive mode (requires exemptchanops module). + not at least halfop (requires the nonotice module). + X <type>:<status> Makes users of <status> or higher exempt to the + specified restriction <type>. For example: flood:h + (requires the exemptchanops module). ------------- NOTE: A large number of these modes are dependent upon server-side modules @@ -236,30 +237,25 @@ help channel if you have any questions."> A Allows receipt of remote announcement messages. c Allows receipt of local connect messages. C Allows receipt of remote connect messages. - d Allows receipt of general (and sometimes random) debug - messages. + d Allows receipt of general (and sometimes random) debug messages. f Allows receipt of flooding notices. - g Allows receipt of globops (requires globops module). - j Allows receipt of channel creation notices (requires - chancreate module). - J Allows receipt of remote channel creation notices (requires - chancreate module). + g Allows receipt of globops (requires the globops module). + j Allows receipt of channel creation notices (requires the chancreate module). + J Allows receipt of remote channel creation notices (requires the chancreate module). k Allows receipt of local kill messages. K Allows receipt of remote kill messages. - l Allows receipt of local linking related - messages. - L Allows receipt of remote linking related - messages. - n See local nickname changes (requires seenicks module). - N See remote nickname changes (requires seenicks modules). - o Allows receipt of oper-up, oper-down, and oper-failure - messages. - O Allows receipt of remote oper-up, oper-down, and oper-failure - messages. + l Allows receipt of local linking related messages. + L Allows receipt of remote linking related messages. + n See local nickname changes (requires the seenicks module). + N See remote nickname changes (requires the seenicks modules). + o Allows receipt of oper-up, oper-down, and oper-failure messages. + O Allows receipt of remote oper-up, oper-down, and oper-failure messages. q Allows receipt of local quit messages. Q Allows receipt of remote quit messages. + r Allows receipt of local oper commands (requires the operlog module). + R Allows receipt of remote oper commands (requires the operlog module). t Allows receipt of attempts to use /STATS (local and remote). - v Allows receipt of oper-override notices (requires override module). + v Allows receipt of oper-override notices (requires the override module). x Allows receipt of local Xline notices (g/Z/q/k/e/R/shuns). X Allows receipt of remote Xline notices (g/Z/q/k/e/R/shuns)."> @@ -280,44 +276,44 @@ setting +I <extban>. Matching extbans: j:<channel> Matches anyone in the given channel. Does not support - wildcards (requires channelban module). + wildcards (requires the channelban module). n:<class> Matches users in a matching connect class (requires - classban module). - r:<realname> Matches users with a matching real name (requires + the classban module). + r:<realname> Matches users with a matching real name (requires the gecosban module). - s:<server> Matches users on a matching server (requires serverban - module). + s:<server> Matches users on a matching server (requires the + serverban module). z:<certfp> Matches users having the given SSL certificate - fingerprint (requires sslmodes module). + fingerprint (requires the sslmodes module). O:<opertype> Matches IRCops of a matching type, mostly useful as an - an invite exception (requires operchans module). + an invite exception (requires the operchans module). R:<account> Matches users logged into a matching account (requires - services account module). + the services account module). U:<banmask> Matches unregistered users matching the given banmask. - (requires services account module). + (requires the services account module). Acting extbans: - c:<banmask> Blocks any messages that contain color codes from - matching users (requires blockcolor module). - m:<banmask> Blocks messages from matching users (requires muteban + c:<banmask> Blocks any messages that contain formatting codes from + matching users (requires the blockcolor module). + m:<banmask> Blocks messages from matching users (requires the muteban module). Users with +v or above are not affected. p:<banmask> Blocks part messages from matching users (requires - nopartmsg module). + the nopartmsg module). A:<banmask> Blocks invites by matching users even when +A is set - (requires allowinvite module). + (requires the allowinvite module). B:<banmask> Blocks all capital or nearly all capital messages from - matching users (requires blockcaps module). - C:<banmask> Blocks CTCPs from matching users (requires noctcp + matching users (requires the blockcaps module). + C:<banmask> Blocks CTCPs from matching users (requires the noctcp module). N:<banmask> Blocks nick changes from matching users (requires - nonicks module). - Q:<banmask> Blocks kicks by matching users (requires nokicks - module). - S:<banmask> Strips color/bold/underline from messages from matching - users (requires stripcolor module). - T:<banmask> Blocks notices from matching users (requires nonotice + the nonicks module). + Q:<banmask> Blocks kicks by matching users (requires the nokicks module). + S:<banmask> Strips formatting codes from messages from matching + users (requires the stripcolor module). + T:<banmask> Blocks notices from matching users (requires the + nonotice module). A ban given to an Acting extban may either be a nick!user@host mask (unless stated otherwise), matched against users as for a normal ban, @@ -326,4 +322,4 @@ or a Matching extban. There is an additional special type of extended ban, a redirect ban: Redirect n!u@h#channel will redirect the banned user to #channel - when they try to join (requires banredirect module)."> + when they try to join (requires the banredirect module)."> diff --git a/docs/conf/inspircd.conf.example b/docs/conf/inspircd.conf.example index abb8830a9..6a9b960e0 100644 --- a/docs/conf/inspircd.conf.example +++ b/docs/conf/inspircd.conf.example @@ -62,7 +62,7 @@ #<include executable="/path/to/executable parameters"> # # # # Executable include example: # -#<include executable="/usr/bin/wget -q -O - http://example.com/inspircd.conf"> +#<include executable="/usr/bin/wget -q -O - https://example.com/inspircd.conf"> # # @@ -241,7 +241,9 @@ # you only want to adjust sendq and a password parent="main" - # allow: What IP addresses/hosts to allow for this block. + # allow: The IP address or hostname of clients that can use this + # class. You can specify either an exact match, a glob match, or + # a CIDR range here. allow="203.0.113.*" # hash: the hash function this password is hashed with. Requires the @@ -330,7 +332,9 @@ # connect class inheriting. name="main" - # allow: What IP addresses/hosts to allow for this block. + # allow: The IP address or hostname of clients that can use this + # class. You can specify either an exact match, a glob match, or + # a CIDR range here. allow="*" # maxchans: Maximum number of channels a user in this class @@ -452,7 +456,7 @@ # Example of an executable file include. Note this will be read on rehash, # not when the command is run. -#<execfiles motd="wget -O - http://www.example.com/motd.txt"> +#<execfiles motd="wget -O - https://www.example.com/motd.txt"> #-#-#-#-#-#-#-#-#-#-#-#-#-#-# DNS SERVER -#-#-#-#-#-#-#-#-#-#-#-#-#-#-# # If these values are not defined, InspIRCd uses the default DNS resolver @@ -622,8 +626,38 @@ # link with servers running 2.0. Defaults to yes. allowzerolimit="no" - # exemptchanops: exemptions for channel access restrictions based on prefix. - exemptchanops="nonick:v flood:o" + # exemptchanops: Allows users with with a status mode to be exempt + # from various channel restrictions. Possible restrictions are: + # - auditorium-see Permission required to see the full user list of + # a +u channel (requires the auditorium module). + # - auditorium-vis Permission required to be visible in a +u channel + # (requires the auditorium module). + # - blockcaps Channel mode +B - blocks messages with too many capital + # letters (requires the blockcaps module). + # - blockcolor Channel mode +c - blocks messages with formatting codes + # (requires the blockcolor module). + # - censor Channel mode +G - censors messages based on the network + # configuration (requires the censor module). + # - filter Channel mode +g - blocks messages containing the given + # glob mask (requires the chanfilter module). + # - flood Channel mode +f - kicks (and bans) on text flood of a + # specified rate (requires the messageflood module). + # - nickflood Channel mode +F - blocks nick changes after a specified + # rate (requires the nickflood module). + # - noctcp Channel mode +C - blocks any CTCPs to the channel + # (requires the noctcp module). + # - nonick Channel mode +N - prevents users on the channel from + # changing nicks (requires the nonicks module). + # - nonotice Channel mode +T - blocks /NOTICEs to the channel + # (requires the nonotice module). + # - regmoderated Channel mode +M - blocks unregistered users from + # speaking (requires the services account module). + # - stripcolor Channel mode +S - strips formatting codes from + # messages (requires the stripcolor module). + # - topiclock Channel mode +t - limits changing the topic to (half)ops + # You can also configure this on a per-channel basis with a channel mode. + # See m_exemptchanops in modules.conf.example for more details. + exemptchanops="censor:o filter:o nickflood:o nonick:v regmoderated:o" # invitebypassmodes: This allows /invite to bypass other channel modes. # (Such as +k, +j, +l, etc.) diff --git a/docs/conf/modules.conf.example b/docs/conf/modules.conf.example index da72775e9..6955b2d74 100644 --- a/docs/conf/modules.conf.example +++ b/docs/conf/modules.conf.example @@ -438,14 +438,14 @@ # that looks like the name of another channel on the network. #<module name="channames"> -<channames +#<channames # denyrange: characters or range of characters to deny in channel # names. - denyrange="2,3" + #denyrange="2,3" # allowrange: characters or range of characters to specifically allow # in channel names. - allowrange=""> + #allowrange=""> #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-# # Channelban: Implements extended ban j:, which stops anyone already @@ -765,9 +765,13 @@ #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-# # Exempt channel operators module: Provides support for allowing # -# channel operators to be exempt from some channel modes. Supported # -# modes are blockcaps, noctcp, blockcolor, nickflood, flood, censor, # -# filter, regmoderated, nonick, nonotice, and stripcolor. # +# users of a specified channel status to be exempt from some channel # +# restriction modes. Supported restrictions are # +# blockcaps, blockcolor, censor, filter, flood, nickflood, noctcp, # +# nonick, nonotice, regmoderated, stripcolor, and topiclock. # +# See <options:exemptchanops> in inspircd.conf.example for a more # +# detailed list of the restriction modes that can be exempted. # +# These are settable using /mode #chan +X <restriction>:<status> # #<module name="exemptchanops"> # #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-# @@ -869,7 +873,7 @@ # If you specify to use the helpop module, then specify below the # # path to the helpop.conf file. # # # -#<include file="examples/inspircd.helpop-full.example"> +#<include file="examples/helpop-full.conf.example"> #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-# # Hide chans module: Allows users to hide their channels list from non- diff --git a/include/modules.h b/include/modules.h index 11bf6d55a..082079cd9 100644 --- a/include/modules.h +++ b/include/modules.h @@ -221,7 +221,7 @@ enum Implementation I_OnUnloadModule, I_OnBackgroundTimer, I_OnPreCommand, I_OnCheckReady, I_OnCheckInvite, I_OnRawMode, I_OnCheckKey, I_OnCheckLimit, I_OnCheckBan, I_OnCheckChannelBan, I_OnExtBanCheck, I_OnChangeLocalUserHost, I_OnPreTopicChange, - I_OnPostTopicChange, I_OnPostConnect, + I_OnPostTopicChange, I_OnPostConnect, I_OnPostDeoper, I_OnChangeLocalUserGECOS, I_OnUserRegister, I_OnChannelPreDelete, I_OnChannelDelete, I_OnPostOper, I_OnSetAway, I_OnPostCommand, I_OnPostJoin, I_OnBuildNeighborList, I_OnGarbageCollect, I_OnSetConnectClass, @@ -448,6 +448,11 @@ class CoreExport Module : public classbase, public usecountbase */ virtual void OnPostOper(User* user, const std::string &opername, const std::string &opertype); + /** Called after a user deopers locally. + * @param user The user who has deopered. + */ + virtual void OnPostDeoper(User* user); + /** Called whenever a user types /INFO. * The User will contain the information of the user who typed the command. Modules may use this * method to output their own credits in /INFO (which is the ircd's version of an about box). diff --git a/modulemanager b/modulemanager index 3e4eee9c9..50a86a7f7 100755 --- a/modulemanager +++ b/modulemanager @@ -97,7 +97,7 @@ sub parse_url { $mod->{description} = $1; } elsif (/^mask (.*)/) { $mod->{mask} = $1; - } elsif (m#^source (http://\S+)#) { + } elsif (/^source (\S+)/) { parse_url $1; } else { print "Unknown line in $src: $_\n"; diff --git a/src/modules.cpp b/src/modules.cpp index 9359cac37..ab10d6ae1 100644 --- a/src/modules.cpp +++ b/src/modules.cpp @@ -82,6 +82,7 @@ ModResult Module::OnUserPreJoin(LocalUser*, Channel*, const std::string&, std::s void Module::OnMode(User*, User*, Channel*, const Modes::ChangeList&, ModeParser::ModeProcessFlag, const std::string&) { DetachEvent(I_OnMode); } void Module::OnOper(User*, const std::string&) { DetachEvent(I_OnOper); } void Module::OnPostOper(User*, const std::string&, const std::string &) { DetachEvent(I_OnPostOper); } +void Module::OnPostDeoper(User*) { DetachEvent(I_OnPostDeoper); } void Module::OnInfo(User*) { DetachEvent(I_OnInfo); } ModResult Module::OnUserPreInvite(User*, User*, Channel*, time_t) { DetachEvent(I_OnUserPreInvite); return MOD_RES_PASSTHRU; } ModResult Module::OnUserPreMessage(User*, const MessageTarget&, MessageDetails&) { DetachEvent(I_OnUserPreMessage); return MOD_RES_PASSTHRU; } diff --git a/src/modules/extra/m_geoip.cpp b/src/modules/extra/m_geoip.cpp index 7083be6ac..0d7c2eb70 100644 --- a/src/modules/extra/m_geoip.cpp +++ b/src/modules/extra/m_geoip.cpp @@ -146,6 +146,13 @@ class ModuleGeoIP : public Module, public Stats::EventListener, public Whois::Ev return MOD_RES_DENY; } + void OnSetUserIP(LocalUser* user) CXX11_OVERRIDE + { + // If user has sent NICK/USER, re-set the ExtItem as this is likely CGI:IRC changing the IP + if (user->registered == REG_NICKUSER) + SetExt(user); + } + void OnWhois(Whois::Context& whois) CXX11_OVERRIDE { // If the extban is disabled we don't expose users location. diff --git a/src/modules/m_banredirect.cpp b/src/modules/m_banredirect.cpp index 4a4188757..5ec75f13c 100644 --- a/src/modules/m_banredirect.cpp +++ b/src/modules/m_banredirect.cpp @@ -182,6 +182,21 @@ class BanRedirect : public ModeWatcher redirects = new BanRedirectList; extItem.set(channel, redirects); } + else + { + for (BanRedirectList::iterator redir = redirects->begin(); redir != redirects->end(); ++redir) + { + // Mimic the functionality used when removing the mode + if (irc::equals(redir->targetchan, mask[CHAN]) && irc::equals(redir->banmask, param)) + { + // Make sure the +b handler will still set the right ban + param.append(mask[CHAN]); + // Silently ignore the duplicate and don't set metadata + // This still allows channel ops to set/unset a redirect ban to clear "ghost" redirects + return true; + } + } + } /* Here 'param' doesn't have the channel on it yet */ redirects->push_back(BanRedirectEntry(mask[CHAN], param)); diff --git a/src/modules/m_shun.cpp b/src/modules/m_shun.cpp index 92c0b0bd0..3e378a74c 100644 --- a/src/modules/m_shun.cpp +++ b/src/modules/m_shun.cpp @@ -230,7 +230,7 @@ class ModuleShun : public Module, public Stats::EventListener else if ((command == "PART") && (parameters.size() > 1)) { /* same for PART */ - parameters[1].clear(); + parameters.pop_back(); } /* if we're here, allow the command. */ diff --git a/src/modules/m_swhois.cpp b/src/modules/m_swhois.cpp index c7c14e30c..d42649909 100644 --- a/src/modules/m_swhois.cpp +++ b/src/modules/m_swhois.cpp @@ -37,9 +37,11 @@ enum class CommandSwhois : public Command { public: + LocalIntExt operblock; StringExtItem swhois; CommandSwhois(Module* Creator) : Command(Creator, "SWHOIS", 2, 2) + , operblock("swhois_operblock", ExtensionItem::EXT_USER, Creator) , swhois("swhois", ExtensionItem::EXT_USER, Creator) { flags_needed = 'o'; syntax = "<nick> :<swhois>"; @@ -70,6 +72,7 @@ class CommandSwhois : public Command ServerInstance->SNO->WriteGlobalSno('a', "%s used SWHOIS to set %s's extra whois to '%s'", user->nick.c_str(), dest->nick.c_str(), parameters[1].c_str()); } + operblock.set(user, 0); if (parameters[1].empty()) swhois.unset(dest); else @@ -127,10 +130,32 @@ class ModuleSWhois : public Module, public Whois::LineEventListener if (!swhois.length()) return; + cmd.operblock.set(user, 1); cmd.swhois.set(user, swhois); ServerInstance->PI->SendMetaData(user, "swhois", swhois); } + void OnPostDeoper(User* user) CXX11_OVERRIDE + { + std::string* swhois = cmd.swhois.get(user); + if (!swhois) + return; + + if (!cmd.operblock.get(user)) + return; + + cmd.operblock.set(user, 0); + cmd.swhois.unset(user); + ServerInstance->PI->SendMetaData(user, "swhois", ""); + } + + void OnDecodeMetaData(Extensible* target, const std::string& extname, const std::string&) CXX11_OVERRIDE + { + User* dest = static_cast<User*>(target); + if (dest && (extname == "swhois")) + cmd.operblock.set(dest, 0); + } + Version GetVersion() CXX11_OVERRIDE { return Version("Provides the SWHOIS command which allows setting of arbitrary WHOIS lines", VF_OPTCOMMON | VF_VENDOR); diff --git a/src/modules/m_xline_db.cpp b/src/modules/m_xline_db.cpp index d220027fe..fb0c81d2f 100644 --- a/src/modules/m_xline_db.cpp +++ b/src/modules/m_xline_db.cpp @@ -114,7 +114,7 @@ class ModuleXLineDB : public Module { XLine* line = i->second; stream << "LINE " << line->type << " " << line->Displayable() << " " - << ServerInstance->Config->ServerName << " " << line->set_time << " " + << line->source << " " << line->set_time << " " << line->duration << " :" << line->reason << std::endl; } } diff --git a/src/users.cpp b/src/users.cpp index 5f31ff299..1e2554107 100644 --- a/src/users.cpp +++ b/src/users.cpp @@ -458,6 +458,7 @@ void User::UnOper() ModeHandler* opermh = ServerInstance->Modes->FindMode('o', MODETYPE_USER); this->SetMode(opermh, false); + FOREACH_MOD(OnPostDeoper, (this)); } /* diff --git a/src/xline.cpp b/src/xline.cpp index dfd7e2903..cb4f011c0 100644 --- a/src/xline.cpp +++ b/src/xline.cpp @@ -589,10 +589,6 @@ void GLine::Apply(User* u) bool ELine::Matches(User *u) { - LocalUser* lu = IS_LOCAL(u); - if (lu && lu->exempt) - return false; - if (InspIRCd::Match(u->ident, this->identmask, ascii_case_insensitive_map)) { if (InspIRCd::MatchCIDR(u->GetRealHost(), this->hostmask, ascii_case_insensitive_map) || |