$Id: NEWS,v 1.1.1.1 2002/06/01 14:03:53 the_turner Exp $

Open Souce Napster Server
-------------------------
This file highlights the major user visible changes between versions.  For a
detailed description of all changes, please see the ChangeLog file.

[opennap 0.44]

Fixed to speed up the process of removing files from the search index so
that there is no longer a noticeable pause when a user with a large
collection disconnects from the server.

[opennap 0.43]

Added `eject_after' variable to specify how long a client is exempt from
getting killed to make room for other clients after initial login for
not sharing enough files (default: 120 seconds).

Added `index_path_depth' variable to control how many levels of directory
are indexed for searching.  Often the leading parts of the path aren't
useful for searches, so indexing just the last 2 levels provides enough
info without wasting a lot of memory.  (Default: 2)

Added `index_ignore_suffix' variable to control whether filename extensions
are indexed.  (Default: yes)

[opennap 0.42]

stat_server_pass and stat_server_user are now hidden variables, meaning that
they can't be queried via the server.

added -r command line option, and remote_config boolean option to disable
remote configuration of the server.  only the rehash function will cause the
existing configuration to change.  none of the server variables can be
queried or changed when in this mode.

you should no longer need to double quote values in the config file if they
contain spaces (this was a bug in 0.41)

SIGHUP will now cause opennap to re-read its config file

Included registry entry for Windows 98SE to increase the max number of
allowed connectsion up to 1024.  A BIG THANKS to Damian Hodgkiss
<mian@thirty4.com> of the Napigator project for this gem of information.
See the FAQ for more details.

The Win32 port is once again compiled natively using MS Visual C++ instead of
the CYGWIN toolkit.

Fixed crash in search_result_end which could be triggered by a user.
Missing a call to check for a server issuing the command.

[opennap 0.41]

Improved Napigator support.  Added new variables report_name, report_ip, and
report_port which set the information reported to Napigator.  These default
from the other configuration variables and only need to be set if OpenNap
doesn't guess the correct values.

[opennap 0.40]

Added a `block' configuration file which contains a list of regular
expressions.  Any file a client attempts to share that matches one of the
regexps will be discarded and unavailable for download via the server.  See
sample.block for a useful list to begin with.

Added `allow_share' boolean configuration options which controls whether or
not clients are allowed to share files.  Requests to share files are
silently ignored.

Added `min_read' configuration variable to allow a low-watermark log
message when less than this many bytes are read from a server link.  Useful
for detecting slow servers.

Added support for directly reporting server stats to a Napigator-style
server.

[opennap 0.39]

The metaserver can now read the servers list from a file as well as from the
command line.

Added `server_chunk' config variable to control the minimum packet size to
be sent between servers (Default: 0 = no minimum).

Added `ghost_kill' boolean to allow disabling the ghost kill feature.

Added `auto_link' boolean to make the server automatically attempt to link
to all servers upon startup.

Added support for ircd-style i:lines (allowed ips), e:lines (exempt ips),
d:lines (drop without any notification)

Added `login_interval' and `register_interval' variables to control how fast
a client from the same ip may log in or register a nickname.

Support for Napster BETA 8 and BETA 9.

Added `remote_browse' boolean variable to disable remote browsing.

Added support for histogram of number and bytecount for each message type
received.

Disabled the 10301 (`new' browse method) [Note: a few clients depended on
this, but should have been updated to use BETA8+ method of direct client to
client browsing.]

Added `max_searches' variable to limit the number of pending searches a
client can have.

Added usermode -msg to disable private messages.

Added usermode -whois to disable whois notifications for mod+ users.

[opennap 0.38]

***NOTE*** Because of a change in the server quit messages, if 0.38 is used
as the hub it will likely crash leaf servers which are not also 0.38.  It
should be fine to use 0.38 as a leaf server with 0.37 as the hub server
until all other servers are upgraded.

Added new command `who was' (10121) to allow a mod+ to see whois-like info
about a user that has recently logged off.  Information about clients is
cached for `who_was_time' seconds before being purged.  By default, this is 5
minutes.

`max_clones' now works globally instead of per-server.

added `max_searches' config variable which controls how many pending
searches a client may queue up (default: 3)

added --disable-kqueue to turn off kqueue() support under FreeBSD

added new mass kill by ip command (10122).

channel prefixed with & are now local to a single server, even when linked.

added --enable-log-channel which creates a channel &LOG in which the console
output is displayed.

added usermode -msg to allow users to turn off private messages.

usermode functionality is now available to non-priviledged users via
/msg nickserv.

added boolean config variable `irc_channels' which controls whether or not
opennap requires channel names to be prefixed with # or &.

[opennap 0.37]

The -c option now specifies the *directory* to read the file `config' from,
not the full path to the config file.  The `config_dir' variable is no
longer used, you just specify it at startup if it's different from the
compiled default (typically /usr/local/share/opennap).  Why?  For security
concerns you don't want someone who gains admin+ access on the server to be
able to change this and force the server to read/write files in a different
part of the system.

Removed `uid' and `gid' configuration variables.  These are now compiled in
defaults. They can be configured with --with-uid=UID and --with-gid=GID.  As
with `config_dir', we don't want to reveal sensitive system information to
outside users.  Also, if opennap was installed setuid, a user could make
opennap run as any user they wish by using these options.

Added ability to run opennap in a chroot jail.  Enable with --enable-chroot
configure option.  When run as root, opennap will chroot to
/usr/local/share/opennap (or the configured directory) before dropping
privilege.

`server_password' no longer used.  All passwords should be put in the
`servers' file.  You are no longer required to use the same password for all
servers.

added --enable-routing configurion option to compile a routing-only (hub)
version of the server.  in routing-only mode, only admins+ are allowed to
log in and all file-sharing commands are disabled (except for those required
to pass the remote searching among servers).

Added two additional fields to the `servers' file.  First, the TCP port the
remote server is listening on MUST now be specified in the file.  If it is
missing, opennap will assume port 8888.  This means the server connect
command now ignores the port if you specify it in the client.  The next
field is an optional alias for the server which will be used instead of the
DNS name.  This is useful either in the case where you have no reverse DNS
setup or you wish to keep the real name of the server hidden from users.

Cloak status is no longer automatically restored when a user logs in.  This
was the source of many desyncs.  If you want to be cloaked you have to
explicitly request it each time you log in.

Added support for running a `hidden' server.  This allows you to link
servers which do not have their dns name or ip address displayed to users.
This is only good for routing-only servers (hubs), or linking in OpenServ
servers.  To alias a server, you need to add
	server_alias <string>
to the server's config file, so that it will identify itself as its alias.
Then, on each server it will be linked to, an extra field specifying the
alias should be used.

Added support for poll() on systems with this syscall.

Added automatic lag detection.  Opennap will periodically ping all peer
servers are report the stats to all mods+ logged into the server.

[opennap 0.36]

`*', `?', `.' and `!' are no longer valid chars in nicks.  This is needed to
support the new expanded ban syntax

Bans are now of the form <nick!ip>.  `*' matches 0 or more chars, `?'
matches any single char.

Channel names must now begin with # or &.  The join command will
automatically prepend a # to channel names if missing.

Removed the USER_IP server numeric.  This version of opennap will not
interoperate with other opennap servers < 0.33, but will use less
bandwidth for server->server links

Added new config variable `search_timeout' which controls how long pending
searches will be considered valid before timing out.

Added new config variable `stats_port' to make the port 8889 stats
configurable since napigator now supports alternate ports.

Added support for `tcp_wrappers' to control access to the server.

Added opennap.init sample file for SysV-style init scripts
[Geoffrey Lee <snailtalk@linux-mandrake.com>]

Programs are now installed in /usr/local/sbin by default.

If `stats_port' is set to -1 in the config file, opennap will not listen
for stats reporting (by default it listens on port 8889).

Search token filtering is now configurable instead of hard-coded.  opennap
will read the file `filter' in the configuration directory for a list of
words (one per line) that should be skipped when indexing.  A
`sample.filter' file is now included with the distribution.  Generally, if
opennap gives a log message such as "bin for ... exceeds 5000 entries",
you probably want to include that word in the filter file since searches on
that token don't limit the search very much and won't get used (opennap uses
the bin with the fewest entries to make the fine grain comparisons, so
something with 5000+ entries won't likely be used).

Added new config var `eject_when_full' to have opennap kill nonsharing
clients when the server reaches max_connections.

Added server-side flood protection.  Controlled by two new config variables:
	flood_commands	number of commands that can be issued
	flood_time	number of seconds
If more than `flood_commands' message from a client are received in
`flood_time' seconds, the server will throttle the rate at which it reads
commands from the client, and notify the mods+ of the flooding (controlled
by usermode FLOOD).  Setting `flood_commands' to 0 [default] turns off flood
control.  NOTE: `flood_time' should be an integral multiple of
`flood_commands' or else it will not do what you expect.  _DO_ _NOT_ set
`flood_time' to 0!!! or risk 100% cpu usage.  You've been warned.

[opennap 0.35]

added `max_clones' configuration variable to control how many clients may
log into the server from the same ip address.

[opennap 0.34]

added channel mode command (/msg chanserv mode <channel> [mode]) where
mode is one or more of
	+MODERATED	only mods, ops and voiced users can talk
	+INVITE		non-ops/mods must be invited to /join
	+TOPIC		any user in the channel can change the topic
	+PRIVATE	channel does not show up in channel list

added channel voice command: /msg chanserv voice <channel> [user [user ...]]
allows a user to talk in a moderated channel

added channel muzzle command: /msg chanserv muzzle <channel> <user> ["reason"]
muzzles a user in the specified channel only

added channel invite command: /msg chanserv invite <channel> <user>
to allow a user to join a +invite channel

added channel wallop command: /msg chanserv wallop <channel> <text>
to send a message to all ops/mods+ in the specified channel

notifications about changes in channels are now only sent to the ops/mods+ in
that channel rather than to all mods+

removed +TOPIC and +CHANNEL user modes

max nickname length set to 19 to avoid a bug in the windows napster client

[opennap 0.32]

fixes bug in channel_op() which allowed any user to gain channel operator
status on any channel

[opennap 0.31]

added new flags 'z' and 'c' to global user list to display all muzzled and
cloaked users, respetively.

the server config command will now dump all variables if none is specified

added the number of registered user to the stats dump

motd is now stored in memory upon startup to avoid reading it from disk
every time a login occurs

default nick expire is now 31 days

added timestamps for channel settins so that when servers link it is
unambiguous what it should be set to if there are differences.

bans file is now dumped periodically to save state

added ghost feature where the server will automatically kill a previous
login if the second login comes from the same ip for the same nickname.

reduced memory usage for bitrate/samplerate to 1 byte per file by using an
index of allowed values in the MPEG-3 standard.

[opennap 0.30]

added new config var max_topic to limit the max length of a channel topic

added new config var max_reason to limit the max length of a
kick/kill/muzzle reason

added new config var max_hotlist to limit the max number of users allowed on
a user's hotlist

added new config var max_ignore to limit the max number of users allowed on
a user's ignore list

added new config var max_client_string to limit the max length of the client
version string

[opennap 0.29]

fixes buffer overflow in server output to clients

[opennap 0.28]

zlib is now required to compile opennap.  previous versions will not
link with 0.28 at compression_level 0 because of this change.

added channel operator support.  channel operators have the ability to issue
admin commands relating to a specific channel (kick, ban, topic, etc).
channel operators can be bootstrapped in the `channels' file--simply list
the nicknames separated by a space after the topic.

added `ChanServ' virtual user to allow channel operators to access admin
commands if they are not implemented in the client they are using.
(/msg chanserv help)

added help to OperServ (/msg operserv help)

the channels file is now rewritten in a similar fashion to the users file to
store the current state of the settings (including channel ops)

opennap will now always return the string 000000000000000000000000000000
for the hash value when RESUME is disabled.  opennap conserves memory by not
storing the real value in this case.

[opennap 0.27]

changed `server_port' variable to `server_ports'.  it can now take a space
separated list of ports for the server to listen on for incoming
connections.

added global user list command (831).  the arguments to the command are
	[server [flags]]
where `server' is the particular server to search (can be `*' for all) and
`flags' is one of `l', `e', `a', `m' (leech, elite, admin, mod,
respectively).

Server linking now works correctly under Win32 platforms.

Added logchk and napchk BASH utility scripts from WoLF

Added -b command line argument to run OpenNap in the background on Unix
platforms.

OpenNap will now write its process id in the `pid' file in the OpenNap
configuration directory.

Server support for resume is now disabled by default (can be renabled with
configure --enable-resume)

The character `$' is no longer allowed in nicknames since many clients use
this to denote a variable.

[opennap 0.26]

added `lock_memory' boolean configuration option to prevent the process from
being swapped when enabled

added `registered_only' boolean configuration variable to only allow
registered users to log in

added `auto_register' boolean configuration option to force user account
registration upon login

added support for the new file sharing commands in Napster 2.0 Beta 6

the `servers' file format was changed to add an extra field for a local
password to use instead of `server_password' to enable different password
pairs to be used for each server link

added support for server-side ignore commands in Napster 2.0 beta 6

added support for cloaking by privileged users

muzzle state is now stored in the user db and restored when the user logs in
the next time

added support for server ping client command in Napster 2.0 beta 6

added support for channel ban client commands in Napster 2.0 beta 6

added support for creating `rollover' channels when predefined channels
reach their limit on the number of users

[opennap 0.25]

added a new configuration variable `config_dir' which controls the location
where opennap looks for its config files (users, servers, bans, motd,
channels), and removed the file-specific configuration variables:
user_db_path, server_db_path and motd_path.

added persistent channel configuration file: channels.  This file allows
creation of channels which always exist even if no users are in them, along
with the default level and limit.  See sample.channels for an example.

added the OperServ `usermode' command to allow privileged users (Moderator
or higher) to selectively turn off server notifications about things such as
kills, muzzles and bans.  See the README file for details.

[opennap 0.24]

md5 passwords are now used to store user passwords on disk.  A new utility
called 'mkpass' is now used to generate a md5 password from plaintext
password when first setting up the server.  See the README file for details.

Added support for the clear channel (820) user command which will remove all
users of a lesser user level than the usr who issued the command.

When compiled with debugging support, sending SIGUSR1 to the opennap process
will cause it to dump the table of allocated memory.

Added virtual user "OperServ" which accepts commands via /msg.  This is
intended to provide support for clients which have no built in support for
the opennap extensions.  See the README file for a complete list of accepted
commands.

Added channel limit command (826) to specify the maximum number of users
allowed in a channel.

Added new channel list command (827/828) which shows additional information
about the channels such as the mimium level required for entry, and the
channel limit.

Added the nuke command to remove a registered user from the database.

The stats and links commands are now accessible to unprivileged users.

Bans are now saved and reloaded (default: /usr/local/share/opennap/bans)
on startup.

[opennap 0.23]

Server was fixed to compile without zlib for use as a standalone server.
This makes it much easier to compile under Win32 platforms.

Server now crops public and emote messages longer than 128 to prevent
exploitation of the DoS attack against the Windows Napster client.

opennap should now consume considerably less CPU time.  It now attempts to
accept() as many incoming connections as possible per iteration of the main
event loop.

The user database is now read into memory for fast lookup.  It is dumped to
disk every `user_db_interval' seconds (default: 1800)

opennap are now aware of all servers in the cluster that are linked.  The
`server links' command was modified to present this information.

Added new administrative commands for registering a nick and changing a user's
reported line speed.

opennap now prints bandwidth usage stats as part of its logging messages.

[opennap 0.22]

MySQL is no longer used in opennap.  The users and servers databaseses are
now handled as a flat text files.  The location of these files is controlled
by the new configuration variables `user_db_path' and `server_db_path'.  See
the README file for more details.

OS/2 port by Brian Smith <dbsoft@technologist.com>.

Solaris port by jones@users.sourceforge.net.

[opennap 0.20]

opennap will now listen on port 8889 in addition to the client connection
port.  When a connection is made to port 8889 it will display some
information about the status of the server, similar the the stats command
in the napster protocol.  This is intended to be usesful for clients to
query various servers to see their stats without having to log into each
one.

added max_nick_length configuration variable which controls the maximum
length a nickname is allowed to be (default: 32).  It can be set to 0
to indicate no maximum.  The protocol itself doesn't care how long nicks
are, but this puts a cap for readability in clients.

added --with-fd-setsize configure option to allow select() based systems
with a small default value (such as 256 under BSDI) to compile with a higher
maximum for more connections.

added new configuration variable connection_hard_limit to specify the
maximum number of connections that the process will ever be able to support
(default: 1024).  Note that this is different from the max_connections
variable which controls how many connections are allowed at the given
moment.  The reason for this variable is that on some systems you are
not allowed to increase the hard limit of file descriptors for a process
unless you have root privileges.  If run as root, opennap consults
connection_hard_limit to set the hard limit before dropping root privileges.

as described above, opennap can now be run as root when more file
descriptors per process than default is required.  new variables `uid' and
`gid' were added to specify the user and group to run as after changing
the resouce limits.  By default, opennap will attempt to find the uid/gid
for `nobody/nobody' and run as such.

opennap has been ported to Windows 2000 thanks to Damian Hodgkiss.

MySQL is no longer used to store the file database.  A custom memory based
solution was used in order to speed up the searches.  This requires more
memory, but the load is very low when searching.
