867 lines
38 KiB
Plaintext
867 lines
38 KiB
Plaintext
RFC 2811 (RFC2811)
|
|
|
|
Internet RFC/STD/FYI/BCP Archives
|
|
|
|
[ RFC Index | RFC Search | Usenet FAQs | Web FAQs | Documents | Cities ]
|
|
|
|
Alternate Formats: rfc2811.txt | rfc2811.txt.pdf
|
|
|
|
RFC 2811 - Internet Relay Chat: Channel Management
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
|
|
Network Working Group C. Kalt
|
|
Request for Comments: 2811 April 2000
|
|
Updates: 1459
|
|
Category: Informational
|
|
|
|
Internet Relay Chat: Channel Management
|
|
|
|
Status of this Memo
|
|
|
|
This memo provides information for the Internet community. It does
|
|
not specify an Internet standard of any kind. Distribution of this
|
|
memo is unlimited.
|
|
|
|
Copyright Notice
|
|
|
|
Copyright (C) The Internet Society (2000). All Rights Reserved.
|
|
|
|
Abstract
|
|
|
|
One of the most notable characteristics of the IRC (Internet Relay
|
|
Chat) protocol is to allow for users to be grouped in forums, called
|
|
channels, providing a mean for multiple users to communicate
|
|
together.
|
|
|
|
There was originally a unique type of channels, but with the years,
|
|
new types appeared either as a response to a need, or for
|
|
experimental purposes.
|
|
|
|
This document specifies how channels, their characteristics and
|
|
properties are managed by IRC servers.
|
|
|
|
Table of Contents
|
|
|
|
1. Introduction ............................................... 2
|
|
2. Channel Characteristics .................................... 3
|
|
2.1 Namespace .............................................. 3
|
|
2.2 Channel Scope .......................................... 3
|
|
2.3 Channel Properties ..................................... 4
|
|
2.4 Privileged Channel Members ............................. 4
|
|
2.4.1 Channel Operators ................................. 5
|
|
2.4.2 Channel Creator ................................... 5
|
|
3. Channel lifetime ........................................... 5
|
|
3.1 Standard channels ...................................... 5
|
|
3.2 Safe Channels .......................................... 6
|
|
4. Channel Modes .............................................. 7
|
|
4.1 Member Status .......................................... 7
|
|
4.1.1 "Channel Creator" Status .......................... 7
|
|
|
|
4.1.2 Channel Operator Status ........................... 8
|
|
4.1.3 Voice Privilege ................................... 8
|
|
4.2 Channel Flags .......................................... 8
|
|
4.2.1 Anonymous Flag .................................... 8
|
|
4.2.2 Invite Only Flag .................................. 8
|
|
4.2.3 Moderated Channel Flag ............................ 9
|
|
4.2.4 No Messages To Channel From Clients On The Outside 9
|
|
4.2.5 Quiet Channel ..................................... 9
|
|
4.2.6 Private and Secret Channels ....................... 9
|
|
4.2.7 Server Reop Flag .................................. 10
|
|
4.2.8 Topic ............................................. 10
|
|
4.2.9 User Limit ........................................ 10
|
|
4.2.10 Channel Key ...................................... 10
|
|
4.3 Channel Access Control ................................. 10
|
|
4.3.1 Channel Ban and Exception ......................... 11
|
|
4.3.2 Channel Invitation ................................ 11
|
|
5. Current Implementations .................................... 11
|
|
5.1 Tracking Recently Used Channels ........................ 11
|
|
5.2 Safe Channels .......................................... 12
|
|
5.2.1 Channel Identifier ................................ 12
|
|
5.2.2 Channel Delay ..................................... 12
|
|
5.2.3 Abuse Window ...................................... 13
|
|
5.2.4 Preserving Sanity In The Name Space ............... 13
|
|
5.2.5 Server Reop Mechanism ............................. 13
|
|
6. Current problems ........................................... 14
|
|
6.1 Labels ................................................. 14
|
|
6.1.1 Channel Delay ..................................... 14
|
|
6.1.2 Safe Channels ..................................... 15
|
|
6.2 Mode Propagation Delays ................................ 15
|
|
6.3 Collisions And Channel Modes ........................... 15
|
|
6.4 Resource Exhaustion .................................... 16
|
|
7. Security Considerations .................................... 16
|
|
7.1 Access Control ......................................... 16
|
|
7.2 Channel Privacy ........................................ 16
|
|
7.3 Anonymity ............................................... 17
|
|
8. Current support and availability ........................... 17
|
|
9. Acknowledgements ........................................... 17
|
|
10. References ................................................ 18
|
|
11. Author's Address .......................................... 18
|
|
12. Full Copyright Statement ................................... 19
|
|
|
|
1. Introduction
|
|
|
|
This document defines in detail on how channels are managed by the
|
|
IRC servers and will be mostly useful to people working on
|
|
implementing an IRC server.
|
|
|
|
While the concepts defined here are an important part of IRC, they
|
|
remain non essential for implementing clients. While the trend seems
|
|
to be towards more and more complex and "intelligent" clients which
|
|
are able to take advantage of knowing the internal workings of
|
|
channels to provide the users with a more friendly interface, simple
|
|
clients can be implemented without reading this document.
|
|
|
|
Many of the concepts defined here were designed with the IRC
|
|
architecture [IRC-ARCH] in mind and mostly make sense in this
|
|
context. However, many others could be applied to other
|
|
architectures in order to provide forums for a conferencing system.
|
|
|
|
Finally, it is to be noted that IRC users may find some of the
|
|
following sections of interest, in particular sections 2 (Channel
|
|
Characteristics) and 4 (Channel Modes).
|
|
|
|
2. Channel Characteristics
|
|
|
|
A channel is a named group of one or more users which will all
|
|
receive messages addressed to that channel. A channel is
|
|
characterized by its name, properties and current members.
|
|
|
|
2.1 Namespace
|
|
|
|
Channels names are strings (beginning with a '&', '#', '+' or '!'
|
|
character) of length up to fifty (50) characters. Channel names are
|
|
case insensitive.
|
|
|
|
Apart from the the requirement that the first character being either
|
|
'&', '#', '+' or '!' (hereafter called "channel prefix"). The only
|
|
restriction on a channel name is that it SHALL NOT contain any spaces
|
|
(' '), a control G (^G or ASCII 7), a comma (',' which is used as a
|
|
list item separator by the protocol). Also, a colon (':') is used as
|
|
a delimiter for the channel mask. The exact syntax of a channel name
|
|
is defined in "IRC Server Protocol" [IRC-SERVER].
|
|
|
|
The use of different prefixes effectively creates four (4) distinct
|
|
namespaces for channel names. This is important because of the
|
|
protocol limitations regarding namespaces (in general). See section
|
|
6.1 (Labels) for more details on these limitations.
|
|
|
|
2.2 Channel Scope
|
|
|
|
A channel entity is known by one or more servers on the IRC network.
|
|
A user can only become member of a channel known by the server to
|
|
which the user is directly connected. The list of servers which know
|
|
|
|
of the existence of a particular channel MUST be a contiguous part of
|
|
the IRC network, in order for the messages addressed to the channel
|
|
to be sent to all the channel members.
|
|
|
|
Channels with '&' as prefix are local to the server where they are
|
|
created.
|
|
|
|
Other channels are known to one (1) or more servers that are
|
|
connected to the network, depending on the channel mask:
|
|
|
|
If there is no channel mask, then the channel is known to all
|
|
the servers.
|
|
|
|
If there is a channel mask, then the channel MUST only be known
|
|
to servers which has a local user on the channel, and to its
|
|
neighbours if the mask matches both the local and neighbouring
|
|
server names. Since other servers have absolutely no knowledge of
|
|
the existence of such a channel, the area formed by the servers
|
|
having a name matching the mask has to be contiguous for the
|
|
channel to be known by all these servers. Channel masks are best
|
|
used in conjunction with server hostmasking [IRC-SERVER].
|
|
|
|
2.3 Channel Properties
|
|
|
|
Each channel has its own properties, which are defined by channel
|
|
modes. Channel modes can be manipulated by the channel members. The
|
|
modes affect the way servers manage the channels.
|
|
|
|
Channels with '+' as prefix do not support channel modes. This means
|
|
that all the modes are unset, with the exception of the 't' channel
|
|
flag which is set.
|
|
|
|
2.4 Privileged Channel Members
|
|
|
|
In order for the channel members to keep some control over a channel,
|
|
and some kind of sanity, some channel members are privileged. Only
|
|
these members are allowed to perform the following actions on the
|
|
channel:
|
|
|
|
INVITE - Invite a client to an invite-only channel (mode +i)
|
|
KICK - Eject a client from the channel
|
|
MODE - Change the channel's mode, as well as
|
|
members' privileges
|
|
PRIVMSG - Sending messages to the channel (mode +n, +m, +v)
|
|
TOPIC - Change the channel topic in a mode +t channel
|
|
|
|
2.4.1 Channel Operators
|
|
|
|
The channel operators (also referred to as a "chop" or "chanop") on a
|
|
given channel are considered to 'own' that channel. Ownership of a
|
|
channel is shared among channel operators.
|
|
|
|
Channel operators are identified by the '@' symbol next to their
|
|
nickname whenever it is associated with a channel (i.e., replies to
|
|
the NAMES, WHO and WHOIS commands).
|
|
|
|
Since channels starting with the character '+' as prefix do not
|
|
support channel modes, no member can therefore have the status of
|
|
channel operator.
|
|
|
|
2.4.2 Channel Creator
|
|
|
|
A user who creates a channel with the character '!' as prefix is
|
|
identified as the "channel creator". Upon creation of the channel,
|
|
this user is also given channel operator status.
|
|
|
|
In recognition of this status, the channel creators are endowed with
|
|
the ability to toggle certain modes of the channel which channel
|
|
operators may not manipulate.
|
|
|
|
A "channel creator" can be distinguished from a channel operator by
|
|
issuing the proper MODE command. See the "IRC Client Protocol"
|
|
[IRC-CLIENT] for more information on this topic.
|
|
|
|
3. Channel lifetime
|
|
|
|
In regard to the lifetime of a channel, there are typically two
|
|
groups of channels: standard channels which prefix is either '&', '#'
|
|
or '+', and "safe channels" which prefix is '!'.
|
|
|
|
3.1 Standard channels
|
|
|
|
These channels are created implicitly when the first user joins it,
|
|
and cease to exist when the last user leaves it. While the channel
|
|
exists, any client can reference the channel using the name of the
|
|
channel.
|
|
|
|
The user creating a channel automatically becomes channel operator
|
|
with the notable exception of channels which name is prefixed by the
|
|
character '+', see section 4 (Channel modes). See section 2.4.1
|
|
(Channel Operators) for more details on this title.
|
|
|
|
In order to avoid the creation of duplicate channels (typically when
|
|
the IRC network becomes disjoint because of a split between two
|
|
servers), channel names SHOULD NOT be allowed to be reused by a user
|
|
if a channel operator (See Section 2.4.1 (Channel Operators)) has
|
|
recently left the channel because of a network split. If this
|
|
happens, the channel name is temporarily unavailable. The duration
|
|
while a channel remains unavailable should be tuned on a per IRC
|
|
network basis. It is important to note that this prevents local
|
|
users from creating a channel using the same name, but does not
|
|
prevent the channel to be recreated by a remote user. The latter
|
|
typically happens when the IRC network rejoins. Obviously, this
|
|
mechanism only makes sense for channels which name begins with the
|
|
character '#', but MAY be used for channels which name begins with
|
|
the character '+'. This mechanism is commonly known as "Channel
|
|
Delay".
|
|
|
|
3.2 Safe Channels
|
|
|
|
Unlike other channels, "safe channels" are not implicitly created. A
|
|
user wishing to create such a channel MUST request the creation by
|
|
sending a special JOIN command to the server in which the channel
|
|
identifier (then unknown) is replaced by the character '!'. The
|
|
creation process for this type of channel is strictly controlled.
|
|
The user only chooses part of the channel name (known as the channel
|
|
"short name"), the server automatically prepends the user provided
|
|
name with a channel identifier consisting of five (5) characters.
|
|
The channel name resulting from the combination of these two elements
|
|
is unique, making the channel safe from abuses based on network
|
|
splits.
|
|
|
|
The user who creates such a channel automatically becomes "channel
|
|
creator". See section 2.4.2 (Channel Creator) for more details on
|
|
this title.
|
|
|
|
A server MUST NOT allow the creation of a new channel if another
|
|
channel with the same short name exists; or if another channel with
|
|
the same short name existed recently AND any of its member(s) left
|
|
because of a network split. Such channel ceases to exist after last
|
|
user leaves AND no other member recently left the channel because of
|
|
a network split.
|
|
|
|
Unlike the mechanism described in section 5.2.2 (Channel Delay), in
|
|
this case, channel names do not become unavailable: these channels
|
|
may continue to exist after the last user left. Only the user
|
|
creating the channel becomes "channel creator", users joining an
|
|
existing empty channel do not automatically become "channel creator"
|
|
nor "channel operator".
|
|
|
|
To ensure the uniqueness of the channel names, the channel identifier
|
|
created by the server MUST follow specific rules. For more details
|
|
on this, see section 5.2.1 (Channel Identifier).
|
|
|
|
4. Channel Modes
|
|
|
|
The various modes available for channels are as follows:
|
|
|
|
O - give "channel creator" status;
|
|
o - give/take channel operator privilege;
|
|
v - give/take the voice privilege;
|
|
|
|
a - toggle the anonymous channel flag;
|
|
i - toggle the invite-only channel flag;
|
|
m - toggle the moderated channel;
|
|
n - toggle the no messages to channel from clients on the
|
|
outside;
|
|
q - toggle the quiet channel flag;
|
|
p - toggle the private channel flag;
|
|
s - toggle the secret channel flag;
|
|
r - toggle the server reop channel flag;
|
|
t - toggle the topic settable by channel operator only flag;
|
|
|
|
k - set/remove the channel key (password);
|
|
l - set/remove the user limit to channel;
|
|
|
|
b - set/remove ban mask to keep users out;
|
|
e - set/remove an exception mask to override a ban mask;
|
|
I - set/remove an invitation mask to automatically override
|
|
the invite-only flag;
|
|
|
|
Unless mentioned otherwise below, all these modes can be manipulated
|
|
by "channel operators" by using the MODE command defined in "IRC
|
|
Client Protocol" [IRC-CLIENT].
|
|
|
|
4.1 Member Status
|
|
|
|
The modes in this category take a channel member nickname as argument
|
|
and affect the privileges given to this user.
|
|
|
|
4.1.1 "Channel Creator" Status
|
|
|
|
The mode 'O' is only used in conjunction with "safe channels" and
|
|
SHALL NOT be manipulated by users. Servers use it to give the user
|
|
creating the channel the status of "channel creator".
|
|
|
|
4.1.2 Channel Operator Status
|
|
|
|
The mode 'o' is used to toggle the operator status of a channel
|
|
member.
|
|
|
|
4.1.3 Voice Privilege
|
|
|
|
The mode 'v' is used to give and take voice privilege to/from a
|
|
channel member. Users with this privilege can talk on moderated
|
|
channels. (See section 4.2.3 (Moderated Channel Flag).
|
|
|
|
4.2 Channel Flags
|
|
|
|
The modes in this category are used to define properties which
|
|
affects how channels operate.
|
|
|
|
4.2.1 Anonymous Flag
|
|
|
|
The channel flag 'a' defines an anonymous channel. This means that
|
|
when a message sent to the channel is sent by the server to users,
|
|
and the origin is a user, then it MUST be masked. To mask the
|
|
message, the origin is changed to "anonymous!anonymous@anonymous."
|
|
(e.g., a user with the nickname "anonymous", the username "anonymous"
|
|
and from a host called "anonymous."). Because of this, servers MUST
|
|
forbid users from using the nickname "anonymous". Servers MUST also
|
|
NOT send QUIT messages for users leaving such channels to the other
|
|
channel members but generate a PART message instead.
|
|
|
|
On channels with the character '&' as prefix, this flag MAY be
|
|
toggled by channel operators, but on channels with the character '!'
|
|
as prefix, this flag can be set (but SHALL NOT be unset) by the
|
|
"channel creator" only. This flag MUST NOT be made available on
|
|
other types of channels.
|
|
|
|
Replies to the WHOIS, WHO and NAMES commands MUST NOT reveal the
|
|
presence of other users on channels for which the anonymous flag is
|
|
set.
|
|
|
|
4.2.2 Invite Only Flag
|
|
|
|
When the channel flag 'i' is set, new members are only accepted if
|
|
their mask matches Invite-list (See section 4.3.2) or they have been
|
|
invited by a channel operator. This flag also restricts the usage of
|
|
the INVITE command (See "IRC Client Protocol" [IRC-CLIENT]) to
|
|
channel operators.
|
|
|
|
4.2.3 Moderated Channel Flag
|
|
|
|
The channel flag 'm' is used to control who may speak on a channel.
|
|
When it is set, only channel operators, and members who have been
|
|
given the voice privilege may send messages to the channel.
|
|
|
|
This flag only affects users.
|
|
|
|
4.2.4 No Messages To Channel From Clients On The Outside
|
|
|
|
When the channel flag 'n' is set, only channel members MAY send
|
|
messages to the channel.
|
|
|
|
This flag only affects users.
|
|
|
|
4.2.5 Quiet Channel
|
|
|
|
The channel flag 'q' is for use by servers only. When set, it
|
|
restricts the type of data sent to users about the channel
|
|
operations: other user joins, parts and nick changes are not sent.
|
|
From a user's point of view, the channel contains only one user.
|
|
|
|
This is typically used to create special local channels on which the
|
|
server sends notices related to its operations. This was used as a
|
|
more efficient and flexible way to replace the user mode 's' defined
|
|
in RFC 1459 [IRC].
|
|
|
|
4.2.6 Private and Secret Channels
|
|
|
|
The channel flag 'p' is used to mark a channel "private" and the
|
|
channel flag 's' to mark a channel "secret". Both properties are
|
|
similar and conceal the existence of the channel from other users.
|
|
|
|
This means that there is no way of getting this channel's name from
|
|
the server without being a member. In other words, these channels
|
|
MUST be omitted from replies to queries like the WHOIS command.
|
|
|
|
When a channel is "secret", in addition to the restriction above, the
|
|
server will act as if the channel does not exist for queries like the
|
|
TOPIC, LIST, NAMES commands. Note that there is one exception to
|
|
this rule: servers will correctly reply to the MODE command.
|
|
Finally, secret channels are not accounted for in the reply to the
|
|
LUSERS command (See "Internet Relay Chat: Client Protocol" [IRC-
|
|
CLIENT]) when the <mask> parameter is specified.
|
|
|
|
The channel flags 'p' and 's' MUST NOT both be set at the same time.
|
|
If a MODE message originating from a server sets the flag 'p' and the
|
|
flag 's' is already set for the channel, the change is silently
|
|
ignored. This should only happen during a split healing phase
|
|
(mentioned in the "IRC Server Protocol" document [IRC-SERVER]).
|
|
|
|
4.2.7 Server Reop Flag
|
|
|
|
The channel flag 'r' is only available on channels which name begins
|
|
with the character '!' and MAY only be toggled by the "channel
|
|
creator".
|
|
|
|
This flag is used to prevent a channel from having no channel
|
|
operator for an extended period of time. When this flag is set, any
|
|
channel that has lost all its channel operators for longer than the
|
|
"reop delay" period triggers a mechanism in servers to reop some or
|
|
all of the channel inhabitants. This mechanism is described more in
|
|
detail in section 5.2.4 (Channel Reop Mechanism).
|
|
|
|
4.2.8 Topic
|
|
|
|
The channel flag 't' is used to restrict the usage of the TOPIC
|
|
command to channel operators.
|
|
|
|
4.2.9 User Limit
|
|
|
|
A user limit may be set on channels by using the channel flag 'l'.
|
|
When the limit is reached, servers MUST forbid their local users to
|
|
join the channel.
|
|
|
|
The value of the limit MUST only be made available to the channel
|
|
members in the reply sent by the server to a MODE query.
|
|
|
|
4.2.10 Channel Key
|
|
|
|
When a channel key is set (by using the mode 'k'), servers MUST
|
|
reject their local users request to join the channel unless this key
|
|
is given.
|
|
|
|
The channel key MUST only be made visible to the channel members in
|
|
the reply sent by the server to a MODE query.
|
|
|
|
4.3 Channel Access Control
|
|
|
|
The last category of modes is used to control access to the channel,
|
|
they take a mask as argument.
|
|
|
|
In order to reduce the size of the global database for control access
|
|
modes set for channels, servers MAY put a maximum limit on the number
|
|
of such modes set for a particular channel. If such restriction is
|
|
imposed, it MUST only affect user requests. The limit SHOULD be
|
|
homogeneous on a per IRC network basis.
|
|
|
|
4.3.1 Channel Ban and Exception
|
|
|
|
When a user requests to join a channel, his local server checks if
|
|
the user's address matches any of the ban masks set for the channel.
|
|
If a match is found, the user request is denied unless the address
|
|
also matches an exception mask set for the channel.
|
|
|
|
Servers MUST NOT allow a channel member who is banned from the
|
|
channel to speak on the channel, unless this member is a channel
|
|
operator or has voice privilege. (See Section 4.1.3 (Voice
|
|
Privilege)).
|
|
|
|
A user who is banned from a channel and who carries an invitation
|
|
sent by a channel operator is allowed to join the channel.
|
|
|
|
4.3.2 Channel Invitation
|
|
|
|
For channels which have the invite-only flag set (See Section 4.2.2
|
|
(Invite Only Flag)), users whose address matches an invitation mask
|
|
set for the channel are allowed to join the channel without any
|
|
invitation.
|
|
|
|
5. Current Implementations
|
|
|
|
The only current implementation of these rules as part of the IRC
|
|
protocol is the IRC server, version 2.10.
|
|
|
|
The rest of this section deals with issues that are mostly of
|
|
importance to those who wish to implement a server but some parts may
|
|
also be of interest for client writers.
|
|
|
|
5.1 Tracking Recently Used Channels
|
|
|
|
This mechanism is commonly known as "Channel Delay" and generally
|
|
only applies to channels which names is prefixed with the character
|
|
'#' (See Section 3.1 "Standard channels").
|
|
|
|
When a network split occurs, servers SHOULD keep track of which
|
|
channels lost a "channel operator" as the result of the break. These
|
|
channels are then in a special state which lasts for a certain period
|
|
of time. In this particular state, the channels cannot cease to
|
|
|
|
exist. If all the channel members leave the channel, the channel
|
|
becomes unavailable: the server local clients cannot join the channel
|
|
as long as it is empty.
|
|
|
|
Once a channel is unavailable, it will become available again either
|
|
because a remote user has joined the channel (most likely because the
|
|
network is healing), or because the delay period has expired (in
|
|
which case the channel ceases to exist and may be re-created).
|
|
|
|
The duration for which a channel death is delayed SHOULD be set
|
|
considering many factors among which are the size (user wise) of the
|
|
IRC network, and the usual duration of network splits. It SHOULD be
|
|
uniform on all servers for a given IRC network.
|
|
|
|
5.2 Safe Channels
|
|
|
|
This document introduces the notion of "safe channels". These
|
|
channels have a name prefixed with the character '!' and great effort
|
|
is made to avoid collisions in this name space. Collisions are not
|
|
impossible, however they are very unlikely.
|
|
|
|
5.2.1 Channel Identifier
|
|
|
|
The channel identifier is a function of the time. The current time
|
|
(as defined under UNIX by the number of seconds elapsed since
|
|
00:00:00 GMT, January 1, 1970) is converted in a string of five (5)
|
|
characters using the following base:
|
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" (each character has a decimal
|
|
value starting from 0 for 'A' to 35 for '0').
|
|
|
|
The channel identifier therefore has a periodicity of 36^5 seconds
|
|
(about 700 days).
|
|
|
|
5.2.2 Channel Delay
|
|
|
|
These channels MUST be subject to the "channel delay" mechanism
|
|
described in section 5.1 (Channel Delay). However, the mechanism is
|
|
slightly adapted to fit better.
|
|
|
|
Servers MUST keep track of all such channels which lose members as
|
|
the result of a network split, no matter whether the user is a
|
|
"channel operator" or not.
|
|
|
|
However, these channels do NOT ever become unavailable, it is always
|
|
possible to join them even when they are empty.
|
|
|
|
5.2.3 Abuse Window
|
|
|
|
Because the periodicity is so long, attacks on a particular channel
|
|
(name) may only occur once in a very long while. However, with luck
|
|
and patience, it is still possible for a user to cause a channel
|
|
collision. In order to avoid this, servers MUST "look in the future"
|
|
and keep a list of channel names which identifier is about to be used
|
|
(in the coming few days for example). Such list should remain small,
|
|
not be a burden for servers to maintain and be used to avoid channel
|
|
collisions by preventing the re-creation of such channel for a longer
|
|
period of time than channel delay does.
|
|
|
|
Eventually a server MAY choose to extend this procedure to forbid
|
|
creation of channels with the same shortname only (then ignoring the
|
|
channel identifier).
|
|
|
|
5.2.4 Preserving Sanity In The Name Space
|
|
|
|
The combination of the mechanisms described in sections 5.2.2 and
|
|
5.2.3 makes it quite difficult for a user to create a channel
|
|
collision. However, another type of abuse consists of creating many
|
|
channels having the same shortname, but different identifiers. To
|
|
prevent this from happening, servers MUST forbid the creation of a
|
|
new channel which has the same shortname of a channel currently
|
|
existing.
|
|
|
|
5.2.5 Server Reop Mechanism
|
|
|
|
When a channel has been opless for longer than the "reop delay"
|
|
period and has the channel flag 'r' set (See Section 4.2.7 (Server
|
|
Reop Flag)), IRC servers are responsible for giving the channel
|
|
operator status randomly to some of the members.
|
|
|
|
The exact logic used for this mechanism by the current implementation
|
|
is described below. Servers MAY use a different logic, but that it
|
|
is strongly RECOMMENDED that all servers use the same logic on a
|
|
particular IRC network to maintain coherence as well as fairness.
|
|
For the same reason, the "reop delay" SHOULD be uniform on all
|
|
servers for a given IRC network. As for the "channel delay", the
|
|
value of the "reop delay" SHOULD be set considering many factors
|
|
among which are the size (user wise) of the IRC network, and the
|
|
usual duration of network splits.
|
|
|
|
a) the reop mechanism is triggered after a random time following the
|
|
expiration of the "reop delay". This should limit the eventuality
|
|
of the mechanism being triggered at the same time (for the same
|
|
channel) on two separate servers.
|
|
|
|
b) If the channel is small (five (5) users or less), and the "channel
|
|
delay" for this channel has expired,
|
|
Then reop all channel members if at least one member is local to
|
|
the server.
|
|
|
|
c) If the channel is small (five (5) users or less), and the "channel
|
|
delay" for this channel has expired, and the "reop delay" has
|
|
expired for longer than its value,
|
|
Then reop all channel members.
|
|
|
|
d) For other cases, reop at most one member on the channel, based on
|
|
some method build into the server. If you don't reop a member, the
|
|
method should be such that another server will probably op
|
|
someone. The method SHOULD be the same over the whole network. A
|
|
good heuristic could be just random reop.
|
|
(The current implementation actually tries to choose a member
|
|
local to the server who has not been idle for too long, eventually
|
|
postponing action, therefore letting other servers have a chance
|
|
to find a "not too idle" member. This is over complicated due to
|
|
the fact that servers only know the "idle" time of their local
|
|
users)
|
|
|
|
6. Current problems
|
|
|
|
There are a number of recognized problems with the way IRC channels
|
|
are managed. Some of these can be directly attributed to the rules
|
|
defined in this document, while others are the result of the
|
|
underlying "IRC Server Protocol" [IRC-SERVER]. Although derived from
|
|
RFC 1459 [IRC], this document introduces several novelties in an
|
|
attempt to solve some of the known problems.
|
|
|
|
6.1 Labels
|
|
|
|
This document defines one of the many labels used by the IRC
|
|
protocol. Although there are several distinct namespaces (based on
|
|
the channel name prefix), duplicates inside each of these are not
|
|
allowed. Currently, it is possible for users on different servers to
|
|
pick the label which may result in collisions (with the exception of
|
|
channels known to only one server where they can be averted).
|
|
|
|
6.1.1 Channel Delay
|
|
|
|
The channel delay mechanism described in section 5.1 (Tracking
|
|
Recently Used Channels) and used for channels prefixed with the
|
|
character '#' is a simple attempt at preventing collisions from
|
|
happening. Experience has shown that, under normal circumstances, it
|
|
|
|
is very efficient; however, it obviously has severe limitations
|
|
keeping it from being an adequate solution to the problem discussed
|
|
here.
|
|
|
|
6.1.2 Safe Channels
|
|
|
|
"Safe channels" described in section 3.2 (Safe Channels) are a better
|
|
way to prevent collisions from happening as it prevents users from
|
|
having total control over the label they choose. The obvious
|
|
drawback for such labels is that they are not user friendly.
|
|
However, it is fairly trivial for a client program to improve on
|
|
this.
|
|
|
|
6.2 Mode Propagation Delays
|
|
|
|
Because of network delays induced by the network, and because each
|
|
server on the path is REQUIRED to check the validity of mode changes
|
|
(e.g., user exists and has the right privileges), it is not unusual
|
|
for a MODE message to only affect part of the network, often creating
|
|
a discrepancy between servers on the current state of a channel.
|
|
|
|
While this may seem easy to fix (by having only the original server
|
|
check the validity of mode changes), it was decided not to do so for
|
|
various reasons. One concern is that servers cannot trust each
|
|
other, and that a misbehaving servers can easily be detected. This
|
|
way of doing so also stops wave effects on channels which are out of
|
|
synch when mode changes are issued from different directions.
|
|
|
|
6.3 Collisions And Channel Modes
|
|
|
|
The "Internet Relay Chat: Server Protocol" document [IRC-SERVER]
|
|
describes how channel data is exchanged when two servers connect to
|
|
each other. Channel collisions (either legitimate or not) are
|
|
treated as inclusive events, meaning that the resulting channel has
|
|
for members all the users who are members of the channel on either
|
|
server prior to the connection.
|
|
|
|
Similarly, each server sends the channel modes to the other one.
|
|
Therefore, each server also receives these channel modes. There are
|
|
three types of modes for a given channel: flags, masks, and data.
|
|
The first two types are easy to deal with as they are either set or
|
|
unset. If such a mode is set on one server, it MUST be set on the
|
|
other server as a result of the connection.
|
|
|
|
As topics are not sent as part of this exchange, they are not a
|
|
problem. However, channel modes 'l' and 'k' are exchanged, and if
|
|
they are set on both servers prior to the connection, there is no
|
|
mechanism to decide which of the two values takes precedence. It is
|
|
left up to the users to fix the resulting discrepancy.
|
|
|
|
6.4 Resource Exhaustion
|
|
|
|
The mode based on masks defined in section 4.3 make the IRC servers
|
|
(and network) vulnerable to a simple abuse of the system: a single
|
|
channel operator can set as many different masks as possible on a
|
|
particular channel. This can easily cause the server to waste
|
|
memory, as well as network bandwidth (since the info is propagated to
|
|
other servers). For this reason it is RECOMMENDED that a limit be
|
|
put on the number of such masks per channels as mentioned in section
|
|
4.3.
|
|
|
|
Moreover, more complex mechanisms MAY be used to avoid having
|
|
redundant masks set for the same channel.
|
|
|
|
7. Security Considerations
|
|
|
|
7.1 Access Control
|
|
|
|
One of the main ways to control access to a channel is to use masks
|
|
which are based on the username and hostname of the user connections.
|
|
This mechanism can only be efficient and safe if the IRC servers have
|
|
an accurate way of authenticating user connections, and if users
|
|
cannot easily get around it. While it is in theory possible to
|
|
implement such a strict authentication mechanism, most IRC networks
|
|
(especially public networks) do not have anything like this in place
|
|
and provide little guaranty about the accuracy of the username and
|
|
hostname for a particular client connection.
|
|
|
|
Another way to control access is to use a channel key, but since this
|
|
key is sent in plaintext, it is vulnerable to traditional man in the
|
|
middle attacks.
|
|
|
|
7.2 Channel Privacy
|
|
|
|
Because channel collisions are treated as inclusive events (See
|
|
Section 6.3), it is possible for users to join a channel overriding
|
|
its access control settings. This method has long been used by
|
|
individuals to "take over" channels by "illegitimately" gaining
|
|
channel operator status on the channel. The same method can be used
|
|
to find out the exact list of members of a channel, as well as to
|
|
eventually receive some of the messages sent to the channel.
|
|
|
|
7.3 Anonymity
|
|
|
|
The anonymous channel flag (See Section 4.2.1) can be used to render
|
|
all users on such channel "anonymous" by presenting all messages to
|
|
the channel as originating from a pseudo user which nickname is
|
|
"anonymous". This is done at the client-server level, and no
|
|
anonymity is provided at the server-server level.
|
|
|
|
It should be obvious to readers, that the level of anonymity offered
|
|
is quite poor and insecure, and that clients SHOULD display strong
|
|
warnings for users joining such channels.
|
|
|
|
8. Current support and availability
|
|
|
|
Mailing lists for IRC related discussion:
|
|
General discussion: ircd-users@irc.org
|
|
Protocol development: ircd-dev@irc.org
|
|
|
|
Software implementations:
|
|
ftp://ftp.irc.org/irc/server
|
|
ftp://ftp.funet.fi/pub/unix/irc
|
|
ftp://coombs.anu.edu.au/pub/irc
|
|
|
|
Newsgroup: alt.irc
|
|
|
|
9. Acknowledgements
|
|
|
|
Parts of this document were copied from the RFC 1459 [IRC] which
|
|
first formally documented the IRC Protocol. It has also benefited
|
|
from many rounds of review and comments. In particular, the
|
|
following people have made significant contributions to this
|
|
document:
|
|
|
|
Matthew Green, Michael Neumayer, Volker Paulsen, Kurt Roeckx, Vesa
|
|
Ruokonen, Magnus Tjernstrom, Stefan Zehl.
|
|
|
|
10. References
|
|
|
|
[KEYWORDS] Bradner, S., "Key words for use in RFCs to Indicate
|
|
Requirement Levels", BCP 14, RFC 2119, March 1997.
|
|
|
|
[IRC] Oikarinen, J. and D. Reed, "Internet Relay Chat
|
|
Protocol", RFC 1459, May 1993.
|
|
|
|
[IRC-ARCH] Kalt, C., "Internet Relay Chat: Architecture", RFC 2810,
|
|
April 2000.
|
|
|
|
[IRC-CLIENT] Kalt, C., "Internet Relay Chat: Client Protocol", RFC
|
|
2812, April 2000.
|
|
|
|
[IRC-SERVER] Kalt, C., "Internet Relay Chat: Server Protocol", RFC
|
|
2813, April 2000.
|
|
|
|
11. Author's Address
|
|
|
|
Christophe Kalt
|
|
99 Teaneck Rd, Apt #117
|
|
Ridgefield Park, NJ 07660
|
|
USA
|
|
|
|
EMail: kalt@stealth.net
|
|
|
|
12. Full Copyright Statement
|
|
|
|
Copyright (C) The Internet Society (2000). All Rights Reserved.
|
|
|
|
This document and translations of it may be copied and furnished to
|
|
others, and derivative works that comment on or otherwise explain it
|
|
or assist in its implementation may be prepared, copied, published
|
|
and distributed, in whole or in part, without restriction of any
|
|
kind, provided that the above copyright notice and this paragraph are
|
|
included on all such copies and derivative works. However, this
|
|
document itself may not be modified in any way, such as by removing
|
|
the copyright notice or references to the Internet Society or other
|
|
Internet organizations, except as needed for the purpose of
|
|
developing Internet standards in which case the procedures for
|
|
copyrights defined in the Internet Standards process must be
|
|
followed, or as required to translate it into languages other than
|
|
English.
|
|
|
|
The limited permissions granted above are perpetual and will not be
|
|
revoked by the Internet Society or its successors or assigns.
|
|
|
|
This document and the information contained herein is provided on an
|
|
"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
|
|
TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
|
|
BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
|
|
HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
|
|
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
Acknowledgement
|
|
|
|
Funding for the RFC Editor function is currently provided by the
|
|
Internet Society.
|
|
|
|
|
|
|
|
|
|
Previous: RFC 2810 - Internet Relay Next: RFC 2812 - Internet Relay Chat:
|
|
Chat: Architecture Client Protocol
|
|
|
|
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
[ RFC Index | RFC Search | Usenet FAQs | Web FAQs | Documents | Cities ]
|