2001-09-29 drscholl * opennap.h, add_file.c, configure.in: fix off by one error in kOMaxTokens. 5-bits is range 0..31, not 32 2001-09-28 drscholl * add_file.c, opennap.h, search.c: use an array instead of LIST to hold the set of FileList structs that each file is a member of. at time of indexing, we know how many pointers there are and this value never changes for the duration the user is logged in. thus, we remove 4 bytes of memory per indexed _word_ since we don't need to store the *next pointer of the LIST struct. 2001-09-26 drscholl * main.c: use SOMAXCONN for the listen() argument instead of our own define 2001-09-24 drscholl * main.c, win32-support.h: if select() returns ENOTSOCK, do a sanity check to remove the bad fd and attempt to continue * class.c, client_quit.c, config.c, config.h.in, configure, configure.in, debug.c, download.c, filter.c, free_user.c, handler.c, hash.c, hash.h, init.c, join.c, kick.c, level.c, login.c, main.c, manual.html, metaserver.c, metaserver.dsp, mkpass.dsp, motd.c, muzzle.c, napigator.c, network.c, opennap.dsp, opennap.dsw, opennap.h, opennap.opt, part.c, part_channel.c, privmsg.c, public.c, remove_connection.c, remove_file.c, sample.config, search.c, server_connect.c, server_links.c, server_login.c, serverlib.c, setup.c, setup.dsp, synch.c, topic.c, upload_complete.c, userdb.c, util.c, whois.c, win32-support.h, ChangeLog, Makefile.am, Makefile.in, NEWS, README, TODO, add_file.c, announce.c, browse.c, buffer.c, change.c, channel.c: merged changes from HEAD * main.c: bail out of main loop if we get 5 select() errors in a row so that we don't bog down the machine. * Makefile.am, metaserver.c, opennap.h, search.c, win32-support.h: break out win32 support definitions into a separate file so that they can be shared between opennap and the metaserver. if file sharing is not allowed, return the end-of-search message immediately when a search request is received. * add_file.c, debug.c, opennap.h, search.c: change FLIST -> FileList FileList now contains a doubly linked list of all matching files. Each DATUM now contains a list of TokenRef items which allows a file to be quickly removed from the FileList without needing to traverse the list. 2001-09-23 drscholl * ChangeLog, filter.c, hash.c, hash.h, init.c: increase hash table sizes Users -> 1027 Who_Was -> 1027 File_Table -> 4001 MD5 -> 4001 add hash_compare_string_insensitive() which uses strcasecmp() and is the default hash compare function. hash_compare_string() uses strcmp(). changed Filter, File_Table and MD5 to use new hash_compare_string() since those words are already inserted as lower case. 2001-09-22 drscholl * setup.dsp, metaserver.dsp, opennap.dsp, opennap.opt: bump up FD_SETSIZE to 4096 for Win32 build just in case * metaserver.dsp, opennap.dsp, opennap.opt, setup.dsp: should set FD_SETSIZE=1024 on win32 builds * metaserver.dsp, mkpass.dsp, opennap.dsp, opennap.dsw, opennap.opt, setup.dsp: update win32 build files * README, main.c: don't reset TIMEOUT if Flood_Time == 0 to avoid 100% cpu usage * config.h.in, configure, configure.in, manual.html, metaserver.c, sample.config: configure needs to check for syslog() fix metaserver.c compile for unix remove config_dir from sample.conf, since its no longer valid update last modified date in manual.html * manual.html: fixed entry for index_ignore_suffix, it had the name index_path_depth * metaserver.c, metaserver.dsp, opennap.dsw: ported metaserver to vc++ 2001-09-22 drscholl * setup.dsp, metaserver.dsp, opennap.dsp, opennap.opt: bump up FD_SETSIZE to 4096 for Win32 build just in case * metaserver.dsp, opennap.dsp, opennap.opt, setup.dsp: should set FD_SETSIZE=1024 on win32 builds * metaserver.dsp, mkpass.dsp, opennap.dsp, opennap.dsw, opennap.opt, setup.dsp: update win32 build files * README, main.c: don't reset TIMEOUT if Flood_Time == 0 to avoid 100% cpu usage * config.h.in, configure, configure.in, manual.html, metaserver.c, sample.config: configure needs to check for syslog() fix metaserver.c compile for unix remove config_dir from sample.conf, since its no longer valid update last modified date in manual.html * manual.html: fixed entry for index_ignore_suffix, it had the name index_path_depth * metaserver.c, metaserver.dsp, opennap.dsw: ported metaserver to vc++ 2001-09-22 drscholl * setup.dsp, metaserver.dsp, opennap.dsp, opennap.opt: bump up FD_SETSIZE to 4096 for Win32 build just in case * metaserver.dsp, opennap.dsp, opennap.opt, setup.dsp: should set FD_SETSIZE=1024 on win32 builds * metaserver.dsp, mkpass.dsp, opennap.dsp, opennap.dsw, opennap.opt, setup.dsp: update win32 build files * README, main.c: don't reset TIMEOUT if Flood_Time == 0 to avoid 100% cpu usage * config.h.in, configure, configure.in, manual.html, metaserver.c, sample.config: configure needs to check for syslog() fix metaserver.c compile for unix remove config_dir from sample.conf, since its no longer valid update last modified date in manual.html * manual.html: fixed entry for index_ignore_suffix, it had the name index_path_depth * metaserver.c, metaserver.dsp, opennap.dsw: ported metaserver to vc++ * Makefile.in, config.c, configure, configure.in, network.c: update for clean compile under unix * add_file.c, announce.c, buffer.c, change.c, channel.c, class.c, client_quit.c, config.c, download.c, filter.c, free_user.c, handler.c, init.c, join.c, kick.c, level.c, login.c, main.c, motd.c, muzzle.c, napigator.c, network.c, opennap.dsp, opennap.dsw, opennap.h, part.c, part_channel.c, privmsg.c, public.c, remove_connection.c, remove_file.c, search.c, server_connect.c, server_links.c, server_login.c, serverlib.c, setup.c, setup.dsp, synch.c, topic.c, upload_complete.c, userdb.c, util.c, whois.c: change log() -> log_message() since the former is a standard math function updated to compile under vc++ 6.0 2001-09-21 drscholl * ChangeLog, TODO: updated TODO list to speed up deletion of DATUM from the FLIST structs * config.c, login.c, opennap.h: added missing config option `restrict_registration' config() didn't increment `line' so it always reported error on line 0 * ChangeLog: updating ChangeLog * ChangeLog, NEWS, README, manual.html: updated documentation for 0.43 release 2001-09-21 drscholl * config.c, login.c, opennap.h: added missing config option `restrict_registration' config() didn't increment `line' so it always reported error on line 0 * ChangeLog: updating ChangeLog * ChangeLog, NEWS, README, manual.html: updated documentation for 0.43 release 2001-09-21 drscholl * ChangeLog, NEWS, README, manual.html: updated documentation for 0.43 release 2001-09-20 drscholl * util.c: fixed compile error for --enable-router * ChangeLog, NEWS, add_file.c, browse.c, config.c, login.c, main.c, manual.html, opennap.h, sample.config: updated ChangeLog file added eject_after config variable, updated manual and sample.config max_result was not checked for 0 allowing unlimited browsing add_file() and friends had an off by one error when checking for max files shared * main.c, remove_file.c, whois.c: remove_file() should not use next_arg() since the filename might contain spaces reap_dead_connection() should attempt to remove the context from the flooder list. use MSG_SERVER_ERROR to report bad whois argument instead of PRIVMSG. 2001-09-18 drscholl * change.c, search.c: Fixed possible core when nuking a mod+ that is currently logged in. The user's context was not getting removed from the Mods list, so the next message sent to mods+ dereference a bad pointer if the target user subsequently logged out. Fixed bug where a user could get unlimited search results by appending a "MAX_RESULTS 0" to the search request. 2001-08-25 drscholl * announce.c, config.h.in: remote_notify_mods() should check that the message was received from a server. 2001-08-15 drscholl * add_file.c, config.c, main.c, opennap.h, sample.config, util.c: merged changes to HEAD rev into this branch 2001-08-14 drscholl * add_file.c, config.c, main.c, opennap.h, sample.config, util.c: committed patch opennap-0.42-0.42+jnl(a).diff From: Jason Legate ) adds index_ignore_suffix and index_path_depth variables 2001-07-22 drscholl * io.c: loop over return kevent structs was wrong * io.c, io.h: fixed io.c to compile under freebsd 4.3-stable * config.h.in, configure, configure.in, io.c, io.h: added freebsd kqueue() support to the io library 2001-07-18 drscholl * io.c: with realtime signals enabled and under heavy load, the timers might never execute given the way it was implemented. * buffer.c, config.c, configure.in, debug.c, handler.c, main.c, opennap.h, serverlib.c: remove refcount from CONNECTION struct destroy_connection() puts struct on Destroy list, which is reaped at the end of the io_handler() call check return from send_queued_data() in queue_data() remove server_chunk support, its useless fix compiler warnings in debug code 2001-07-13 drscholl * debug.c, debug.h: add new debug code * serverlib.c, synch.c, topic.c, upload_complete.c, userdb.c, usermode.c, util.c, whois.c, Makefile.am, Makefile.in, add_file.c, announce.c, ban.c, browse.c, buffer.c, change.c, channel.c, class.c, client_quit.c, config.c, debug.c, debug.h, download.c, filter.c, free_user.c, handler.c, hash.c, hashlist.c, hashlist.h, hotlist.c, init.c, io.c, join.c, kick.c, kill_user.c, level.c, list.c, list.h, list_channels.c, list_users.c, login.c, main.c, motd.c, muzzle.c, napigator.c, opennap.h, part.c, part_channel.c, ping.c, privmsg.c, public.c, remove_connection.c, remove_file.c, resume.c, search.c, server_connect.c, server_links.c, server_login.c, server_usage.c: removed old debug code 2001-07-09 drscholl * search.c, server_login.c, server_usage.c, synch.c, userdb.c, util.c, whois.c, Makefile.am, Makefile.in, ban.c, buffer.c, channel.c, config.h.in, configure, configure.in, debug.h, free_user.c, handler.c, init.c, io.c, io.h, join.c, login.c, main.c, opennap.h: debugged io_*() support, reworked opennap to make use of it. added support for timers directly in the io_poll() call so there is no need to exit the loop. this is important for the Linux Real Time signal support. destroy_connection() now directly free's the resources instead of just queuing it for deletion. queue_data() will now attempt to write() to a server connection immediately if there is no other pending data to send. this was required for the linux rt signal support since there is no way to flush queued up data short of the socket becoming writable again. log() now detects repeated messages ala syslog() Current_Time is now just a #define to the IO struct clock since it gets updated very frequently. when USE_RTSIG is defined, handle_connection() will attempt to read multiple commands per call from a normal USER connection. see the comment near the end of the function for caveats. 2001-07-07 drscholl * configure.in, io.c, io.h, main.c: add better support for asynchronous server events during processing of realtime signals * io.c, io.h: New file. * Makefile.am, Makefile.in, acconfig.h, buffer.c, config.h.in, configure, configure.in, handler.c, io.c, io.h, main.c, napigator.c, opennap.h, server_connect.c: wrote generic io_*() api for handling i/o multiplexing added Linux RT signal support via --enable-rtsig 2001-07-06 drscholl * ChangeLog, README: updated ChangeLog and README for 0.42 release * NEWS, search.c: fixed crash in search_result_end(). CHECK_SERVER_CLASS() should be used here. 2001-05-22 drscholl * main.c: fixed segfaults with active list code. should work ok now. * buffer.c, debug.h, handler.c, main.c, napigator.c, opennap.h, server_connect.c, server_login.c: more active_list fixes. still doens't work. 2001-05-21 drscholl * main.c, opennap.h: begin coding for active/inactive poll lists for better cpu performance 2001-04-08 drscholl * napster.txt, network.c, sample.config: updated napster.txt and sample.config 2001-03-12 drscholl * init.c, napigator.c: fixed compilation error with --enable-router 2001-03-09 drscholl * login.c: fixed logic to select leeches over users even if leech is sharing more files than a normal user * config.c, login.c, manual.html, opennap.h, sample.config: added eject_limit config var to set the min # of files a client must share to avoid being ejected * main.c: need SOCKOPTCAST for setsockopt() call close stat server socket when error from nonblocking connect is detected, and mark fd as -1 so that it will reconnect on the next click 2001-03-08 drscholl * Makefile.in, NEWS, config.c, config.h.in, join.c, manual.html, napigator.c, notes.txt, part_channel.c, server_connect.c, win98se_max_conn.reg, ChangeLog, FAQ, Makefile.am: fixed config parser newline bug update for buliding under win32 2001-03-07 drscholl * class.c, configure.in, kill_user.c, main.c, metaserver.c, opennap.dsp, opennap.dsw, opennap.h, opennap.opt, search.c, server_connect.c, userdb.c, util.c: updated for compilation with ms vc++ 6.0 2001-03-06 drscholl * NEWS, config.c, manual.html: revert config file parsing to <= .40 so quotes are not required for multiword values * part.c, part_channel.c, ping.c, privmsg.c, proxy-client.c, public.c, redirect.c, regex.c, regex.h, remove_connection.c, remove_file.c, resume.c, search.c, server_connect.c, server_links.c, server_login.c, server_usage.c, serverlib.c, setup.c, spyserv.c, stamp-h.in, synch.c, timer.c, topic.c, upload_complete.c, userdb.c, usermode.c, util.c, whois.c, Makefile.am, Makefile.in, _regex.h, add_file.c, announce.c, ban.c, browse.c, buffer.c, change.c, channel.c, class.c, config.c, config.h.in, configure, configure.in, download.c, fast_snprintf.c, filter.c, free_user.c, getopt.c, glob.c, handler.c, hash.c, hashlist.c, hotlist.c, init.c, join.c, kick.c, kill_user.c, level.c, list.c, list_channels.c, list_users.c, login.c, main.c, mkpass.c, motd.c, muzzle.c, napigator.c, network.c, opennap.h: renamed regex.h -> _regex.h to avoid conflicts include config.h first in every file * Makefile.am, Makefile.in, acconfig.h, aclocal.m4, config.h.in, configure, configure.in, filter.c, init.c, metaserver.c, opennap.h, regex.c, regex.h, setup.c: added regex 0.12 since regcomp() is broken under cygwin moved defines to config.h 2001-03-05 drscholl * config.c, login.c, opennap.h: removed restricted_registration and made registered_only work as it should have * config.c, init.c, opennap.h: reload config when receiving the HUP signal 2001-03-04 drscholl * NEWS, config.c, configure, configure.in, main.c, opennap.h: added remote_config boolean config option to enable/disable remote administration of the server stat_server_user and stat_server_pass are now hidden, and can't be queried remotely 2001-03-03 drscholl * README: updated README for .41 release * manual.html, sample.block, ChangeLog, NEWS, config.c, configure, configure.in, login.c: updated manual. recode login around ON_GHOST_KILL to make the code clearer. automatically set FD_SETSIZE=1024 when compiling under CYGWIN * manual.html, napigator.c, opennap.h, sample.config, Makefile.in, config.c, configure, init.c, main.c: check connection result to stats server. added report_ip, report_port, report_name for use with napigator stats server. 2001-03-01 drscholl * Makefile.am, Makefile.in, configure, configure.in, init.c: enable signal handling under win32/cygwin 2001-02-28 drscholl * manual.html, opennap.h, Makefile.in, config.c, configure, configure.in, login.c: added boolean restrict_registratration to disallow auto registration by clients. useful for implementing closed servers. * sample.block: compacted sample.block to group names by the first letter. this reduces the number of expressions that are needed to be matched against each shared file. * configure.in: fixed bug #233526 should use $enableval instead of $withval for the chroot test in configure.in * main.c: added poll() debugging 2001-02-26 drscholl * ChangeLog, NEWS, README, manual.html, sample.block: updated ChangeLog, NEWS, manual.html 2001-02-23 drscholl * add_file.c, config.c, opennap.h: added allow_share config boolean option to disallow sharing files completely * filter.c: commented out log message in is_blocked() * Makefile.in, add_file.c, config.c, configure, configure.in, filter.c, sample.block: block file changed to list of regular expressions instead of hash table of words. this more effectively blocks individual files without affecting as many unrelated files. * sample.block, Makefile.am: added sample block file * add_file.c, filter.c, init.c, opennap.h: added `block' file which contains one word per line. if a shared file contains any of the keywords in the file, the file will not be indexed at all, and thus will not be able to be xferred. note that if the filename exists on the remote server, no blocking is done locally, so all of the servers must act in conjunction to block inappropriate material. 2001-02-17 drscholl * configure, configure.in, main.c, napigator.c, opennap.h: global.fdmap should be sized according to global.max_fd 2001-02-15 drscholl * napigator.c: hash string was not \0 terminated * Makefile.am, Makefile.in, add_file.c, announce.c, ban.c, browse.c, buffer.c, change.c, channel.c, class.c, client_quit.c, config.c, debug.c, download.c, fast_snprintf.c, filter.c, free_user.c, getopt.c, glob.c, handler.c, hash.c, hashlist.c, hotlist.c, init.c, join.c, kick.c, kill_user.c, level.c, list.c, list_channels.c, list_users.c, login.c, main.c, metaserver.c, mkpass.c, motd.c, muzzle.c, napigator.c, network.c, opennap.h, part.c, part_channel.c, ping.c, privmsg.c, proxy-client.c, public.c, redirect.c, remove_connection.c, remove_file.c, resume.c, sample.config, search.c, server_connect.c, server_login.c, serverlib.c, setup.c, spyserv.c, synch.c, topic.c, upload_complete.c, userdb.c, usermode.c, util.c, whois.c: updated copyright date to cover 2001 added add_fd()/remove_fd() to handle manipulation of the global.poll array added support for pushing stats to napigator as part of their new architecture. 2001-02-13 drscholl * main.c, remove_connection.c: fixed crash on server shutdown with debugging enabled * main.c: fixed broken compile with select()-only support * config.c, handler.c, opennap.h: added `min_read' variable to log() when only reading a small amount of data from a server link * server_login.c, server_usage.c, synch.c, timer.c, userdb.c, util.c, whois.c, TODO, ban.c, buffer.c, channel.c, free_user.c, handler.c, init.c, join.c, login.c, main.c, opennap.h, search.c: added a global_t to use as a global namespace when using poll(), keep a global.fdmap[] array to map the fd to the global.poll[] entry associated with the fd to allow skipping of unimportant descriptors 2001-02-08 drscholl * README, metaserver.c, privmsg.c: sig_meta was never reset 2001-02-05 drscholl * Makefile.am, Makefile.in, channel.c, class.c, configure, configure.in, kick.c, main.c, metaserver.c, opennap.h, sample.conf, sample.config: renamed sample.conf -> sample.config remove TS code from all but channel_op. servers will no longer correct channel ops. based upon the timestamp they will just affect the local server and assume the remote side will do the same. 2001-02-02 drscholl * ChangeLog, NEWS: updated ChangeLog updated NEWS file 2001-01-31 drscholl * metaserver.c: added q's metaserver patch to read servers from a config file 2001-01-30 drscholl * buffer.c, config.c, main.c, opennap.h: added `server_chunk' config var to control minimum packet size sent between servers. 2001-01-26 drscholl * login.c: skipped already killed clients when looking to eject nonsharing users * whois.c: whowas should require mod+ level, should have change which_server 2001-01-24 drscholl * main.c, userdb.c: fixed buffer overrun in main.c when initializing the Poll[] and Clients[] arrays 2001-01-23 drscholl * main.c: fixed bug where opennap allocated 1 extra struct pollfd * buffer.c, class.c, handler.c, login.c, main.c, opennap.h, server_connect.c, server_usage.c: removed dup2() and added a .id to the CONNECTION* struct. use Poll[con->id] instead of Poll[con->fd] since the fd's are no longer in order. * class.c, debug.h: local var acc was never initialized in generic_acl_add() * class.c: generic_acl_load should not assume the file is already sorted fixed generic_acl_del to handle masks correctly * class.c, main.c, opennap.h: fixed broken class add routines 2001-01-19 drscholl * class.c: don't print msg if we recv a class command with the same count * change.c, main.c, privmsg.c, whois.c: don't allow admin to change elite password move `operserv server' to `nickserv server' and only require user+ level 2001-01-16 drscholl * FAQ, config.c, list_users.c, login.c, main.c, manual.html, opennap.h, server_connect.c: added variable to turn off ghost kills in order to reduce cross server traffic added auto_link boolean variable 2001-01-09 drscholl * class.c, opennap.h: if any i:lines exist, don't allow a connection unless the ip matches an item on the list. don't use mask when its 0xffffffff during a acl_sync() added prototypes for new acl functions * network.c, class.c: fixed sorted insert in generic_acl_add() * class.c, network.c: fixed coredump in generic_acl_del() with no host is_address() should use a mask of 0xffffffff when no mask is given sort ipmasks using compare_ipmask * class.c, handler.c, init.c, main.c, opennap.h, synch.c: added support for e:lines, d:lines and i:lines added ability to delete connection class * class.c, handler.c, opennap.h: added generic acl list handler functions * main.c: sigh. more poll() checking * main.c, channel.c: added more poll() debugging load_channels() did not close the fd for the channels file 2001-01-08 drscholl * list_users.c: forgot to remove ntohl() from list_users.c. ip and mask are already in little endian format * class.c, list_users.c, network.c: fixed is_address() to return little endian format * TODO, class.c, config.c, free_user.c, init.c, login.c, main.c, manual.html, opennap.h, whois.c: added support for blocking clients that reconnect or register nicks too fast * list_users.c: fixed potential segfault if the ip was missing in a list_users() command with the `i' flag * class.c, list_users.c: fixed list_users() to accept a mask class.c needs sys/types.h * configure, configure.in, hash.h, main.c, metaserver.c, network.c, opennap.h, server_links.c, channel.c: added support for compining under Cygwin * TODO, add_file.c, class.c, opennap.h, search.c: add support for prefixing search terms with a minus sign (`-') to indicate words which should be excluded when matching. this augments the FILENAME EXCLUDES support which already exists * class.c: notify_mods() message didn't have the mask displayed * class.c, configure, configure.in, handler.c, init.c, kill_user.c, list_users.c, login.c, main.c, network.c, opennap.h, util.c, Makefile.am, Makefile.in: removed tcp-wrappers support. it was messing up the newly rewritten select/poll input handler, and it really isn't needed anymore. added colten edward's connection class patch (with cleanups) * TODO, browse.c, config.c, main.c, manual.html, opennap.h, server_connect.c: added remote_browse config var to turn off remote browsing * opennap.h: need extra level of parenthesis around the BSWAP macros 2001-01-07 drscholl * part.c, topic.c: part() could send an error message to a remote server fixed part() and topic() to prefix error messages with the command that was executed * server_connect.c: don't use the server's external ip address when connecting a local server 2001-01-06 drscholl * add_file.c, browse.c, download.c, free_user.c, handler.c, join.c, login.c, main.c, network.c, opennap.h, server_connect.c, server_login.c, whois.c: added even more debugging for poll() support use BSWAP32() in calls to my_ntoa() * FAQ, README, kill_user.c, main.c, manual.html, network.c, remove_connection.c, search.c, server_connect.c, server_login.c: added fd numbers to the log() statements in add_client() updated FAQ cleanup fixes for failure modes in network.c updated manual with recently variable additions 2001-01-05 drscholl * buffer.c, change.c, main.c, opennap.h, search.c: check for ENOBUFS after WRITE() to check for non-permanent error don't allow non-mods+ to nuke another users call expire_searches() directly from the main loop rather than from a timer to prevent searches from backing up too much * README, buffer.c, main.c, opennap.h, search.c, server_usage.c, timer.c: store pending remote search requests in a fifo order, with a pointer to the tail for fast appends. added # of pending searches to the server stats reply added timer_set_interval() to allow modifying the interval at which existing events are rescheduled add_timer() now returns the reference number of the created timer allocate timer refnums in strictly ascending order reworked send_queued_data() to write() until there is no more data queued, or until the socket's buffer is full. also, for server links we want to always make sure there is at least 16k of compressed output available in order to keep the socket's output buffer full, and avoid unnecessary trips through the main loop. 2001-01-04 drscholl * main.c, remove_connection.c, search.c: fixed consistency checks for Clients[] and Poll[] arrays test for searches <= 0 in search() was incorrect. a 0 value is perfectly valid (no searches yet). * buffer.c, handler.c, main.c, network.c, opennap.h, search.c, server_connect.c: change set_read and set_write to macros rewrote add_client to include common code from accept_connection() and try_connect() added extensive checking in add_client and reap_dead_connnection to ensure that the Clients[] and Poll[] arrays look correct * main.c, search.c: fixed bug in generate_request. need to check for type == -1 (ANY) fixed typo in main.c 2001-01-02 drscholl * COPYING, INSTALL, Makefile.in, aclocal.m4, configure, install-sh, main.c, missing, mkinstalldirs, opennap.h: need to include files so that autoconf is not require to build from cvs * README, aclocal.m4, handler.c, main.c, opennap.h: added q's server numeric histogram patch removed aclocal.m4 from CVS repository -- generated by autogen.sh * configure: forgot to remove configure script -- now generated by autogen.sh * COPYING, INSTALL, Makefile.in, autogen.sh, install-sh, missing, mkinstalldirs: use autogen.sh to rebuild the CVS sources 2001-01-01 drscholl * server_connect.c, main.c: reorder operations in main event loop so that reap_connections() is called last. 2000-12-31 drscholl * browse.c, handler.c: disable 10301 command * buffer.c, init.c, main.c: fixed obscure bug where the destroy list was not properly updated * config.c, init.c, main.c, search.c, server_connect.c: zero out unused Poll[] structs * main.c, server_usage.c: need to cast double to int * server_usage.c, main.c: remove (int) casts where they aren't needed * main.c, opennap.h, privmsg.c, remove_connection.c, resume.c, search.c, server_connect.c, server_links.c, server_usage.c, serverlib.c, setup.c, upload_complete.c, userdb.c, usermode.c, util.c, whois.c, announce.c, ban.c, browse.c, channel.c, config.c, debug.c, download.c, filter.c, free_user.c, handler.c, init.c, join.c, kick.c, kill_user.c, level.c, login.c: use %d instead of %f in places where it doesn't matter fixed indentation removed .last_browse member of USER remove all reference to fast_snprintf 2000-12-30 drscholl * Makefile.am, Makefile.in, handler.c, main.c, opennap.h, server_links.c, server_usage.c: removed fast_snprintf * fast_snprintf.c: fixed fast_snprintf() to use va_arg correctly * fast_snprintf.c, login.c, main.c: fast_snprintf should bail out if the size of the output buffer is 0 2000-12-29 drscholl * fast_snprintf.c, main.c: use DIGIT() for %u and %d since its faster than ignoring leading 0s anyway * configure, configure.in, main.c, napster.txt: handle poll() errors to differentiate error type * ban.c, fast_snprintf.c: remove support for %ld. change one occurance to %u in ban.c * fast_snprintf.c: handle negative numbers for %d in fast_snprintf * handler.c: changed server flood protection to automatically flood control all commands except for those marked F_EXEMPT * fast_snprintf.c, motd.c: use double for %f conversion in fast_snprintf 2000-12-28 drscholl * download.c, napster.txt, search.c: consider 8-bit chars to be in WORD_CHAR() class so that foreign users can use opennap. updated napster.txt with recent news numeric 607 now has the requestor's linespeed as the last parameter in the message, to be consistent with napster.com servers 2000-12-27 drscholl * fast_snprintf.c: added fallback mode for %d so large ints can be handled gracefully * add_file.c, ban.c, buffer.c, change.c, channel.c, config.c, download.c, filter.c, join.c, kick.c, login.c, motd.c, privmsg.c, resume.c, server_connect.c, server_links.c, server_login.c, server_usage.c, synch.c, upload_complete.c, userdb.c, whois.c: need to use %u instead of %d for large integers * list_users.c: need to clear ON_GFLAG_CHANNEL * list_users.c: fixed list_users() to accept multiple flags (q) * main.c, fast_snprintf.c: fixed compilation warnings in fast_snprintf.c fixed server_input() to work with select() based systems * config.c, list.c, list.h, main.c: added additional arg to list callback functions pre-read server links in the main event loop in attempt to avoid going through the main loop when there is heavy server->server traffic * config.c, init.c, level.c, list_users.c, login.c, main.c, opennap.h, remove_connection.c, usermode.c, browse.c: commited q's last_browse patch to prevent a client from browsing the same client twice for flood-control commited q's list_users patch for exteneded functionality: -C # for listing users in a single channel and -u for only listing LEVEL_USER clients. * browse.c, fast_snprintf.c, search.c: use same case for %d as %hu use %u for file sizes since %d can only handle 0..99,999 * Makefile.am, Makefile.in, add_file.c, ban.c, channel.c, config.c, fast_snprintf.c, filter.c, free_user.c, handler.c, init.c, kill_user.c, login.c, main.c, opennap.h, remove_file.c, search.c, server_connect.c, server_links.c, server_usage.c, serverlib.c, userdb.c, usermode.c, util.c, whois.c: added optimized snprintf() routine * browse.c: server should always return 640 in response to a 640 2000-12-26 drscholl * browse.c: browse_direct should check user->shared instead of user->sharing 2000-12-25 drscholl * proxy-client.c: saved new client proxy code. * add_file.c, buffer.c, init.c, main.c: need to zero the pollfd structs for fds 0, 1, 2 unshare (110) should return the number of files unshared * browse.c, buffer.c, handler.c, main.c, napster.txt, server_connect.c: fixed commands for new browse support. added support for firewalled browse request 2000-12-23 drscholl * login.c: added debug info for logging unknown commands * handler.c, napster.txt: server should ignore the 920 command and not bomb out on it * browse.c, handler.c, napster.txt, opennap.h: added support for the new direct client browsing commands in napster beta8 2000-12-19 drscholl * main.c, server_connect.c: old fd must be closed after dup2 * main.c: not all connection ports were listened on * main.c: handle new connections after main i/o loop so that new entries in poll() are not consulted * main.c, opennap.h, server_connect.c: fixed broken poll() implementation. pollfd structs were not properly initialized * main.c: use getsockopt() to fetch the error code for the poll() error * search.c, server_connect.c: fixed core in server_disconnect fixed off by one error in max search results 2000-12-18 drscholl * main.c: removed msg about swapping fds * Makefile.am, Makefile.in, announce.c, buffer.c, configure, configure.in, handler.c, init.c, libpoll.c, libpoll.h, login.c, main.c, opennap.h, remove_connection.c, server_connect.c, serverlib.c: removed libpoll and coded direct array access using fd as the index. 2000-12-12 drscholl * ChangeLog: post 0.38 commit * ChangeLog, NEWS, README, hash.h, kill_user.c, libpoll.c, libpoll.h, opennap.dsp, opennap.opt: fixes to compile under Win32 again. 2000-12-08 drscholl * ChangeLog, kill_user.c: bsd need sys/types.h before sys/socket.h 2000-12-07 drscholl * kill_user.c, opennap.h, handler.c, README: added q's mass kill by ip command 2000-12-05 drscholl * server_connect.c: fixed core in server_disconnect * add_file.c, kill_user.c, level.c, login.c, main.c, manual.html, network.c, opennap.h, remove_connection.c, util.c, whois.c, ChangeLog: locally connected mods+ are now kept in the Mods global list, to make notify_mods() more efficient. fixed buffer overrun bug in strfcpy whois checked the wrong CONNECTION* to determine whether the target of the whois request is local 2000-12-04 drscholl * buffer.c, channel.c, configure, configure.in, free_user.c, handler.c, init.c, join.c, kick.c, main.c, opennap.h, part.c, part_channel.c, public.c, synch.c, topic.c, usermode.c, util.c, whois.c: added local channels (not synched across linked servers) added --enable-log-channel which sends the console output to channel &LOG in addition to printing on the terminal fixed usermode -whois client version string is returned with who-was reply 2000-12-03 drscholl * README, handler.c, opennap.h, usermode.c, whois.c: use separate numeric for remote whois notification so that the whois message can be turned off with usermode -whois * main.c, manual.html, muzzle.c, opennap.h, privmsg.c, server_login.c, server_usage.c, usermode.c, channel.c, configure, configure.in, free_user.c, handler.c, init.c, level.c, list_channels.c, login.c: added usermode -msg to allow a user to turn off private msgs added a nickserv usermode command for use by non-mod users cloaked users should not be counted in channel user counts don't allow non-mod users to change their own level use a hashlist to store client version strings for memory savings 2000-12-02 drscholl * add_file.c, free_user.c: Local file count was not updated when a local user unshared all files 2000-11-30 drscholl * main.c: wrong errno was used in handle_io. should use the result of getsockopt() instead of errno in the log message 2000-11-29 drscholl * ChangeLog, NEWS, TODO, config.c, main.c, opennap.h, search.c: updated ChangeLog added `max_searches' configuration variable to cap the number of pending search requests each client is allowed * README, handler.c, login.c, opennap.h, remove_connection.c, server_connect.c, server_links.c, server_login.c, synch.c: reworked server link info messages. use server_error to handle message 0 server_quit is now deprecated. use server_disconnect for both manual and detected splits 2000-11-28 drscholl * TODO, hashlist.c, hashlist.h: fixed bug with hotlist. when `data' is specified for the hashlist_remove, don't decrement the `count' if the `data' is not found on the list. * hashlist.c, hotlist.c, main.c: added more debugging to catch the hotlist bug 2000-11-25 drscholl * hashlist.c, hotlist.c: added debugging to help find the hotlist bug 2000-11-23 drscholl * ChangeLog, whois.c: updated ChangeLog nick should be returned when whois has no info for the requested nick 2000-11-22 drscholl * Makefile.in, userdb.c: patchnap no longer needs to be included in the source distribution fixed indentation in userdb.c * search.c: keep track of search count when in routing-only mode * hashlist.c: don't assert when the list count is >0 but list==NULL * configure.in, configure: configure script was incorrect * opennap.h, search.c, serverlib.c, TODO, add_file.c, configure.in, free_user.c, kill_user.c, libpoll.c, login.c: updated TODO file fixed indentation on a few files removed debug statement from libpoll.c added --disable-kqueue to configure 2000-11-21 drscholl * browse.c: fixed browse/browse_new to not return the client's ip address if no files are shared. * hashlist.c, remove_connection.c: fixed bug in hashlist_remove which caused the haslist to always be freed even when other entries exist * browse.c, filter.c, free_user.c, hashlist.c, hashlist.h, hotlist.c, login.c, napster.txt, opennap.h, remove_connection.c, remove_file.c, serverlib.c: fixed new_browse to allow browsing across a routing-only server fixed some bugs in the new hotlist/hashlist code 2000-11-16 drscholl * Makefile.am, Makefile.in, NEWS, free_user.c, handler.c, hash.c, hash.h, hashlist.c, hashlist.h, hotlist.c, init.c, login.c, main.c, opennap.h, patchnap.c, remove_connection.c, server_usage.c, serverlib.c: patchnap is no longer needed since nap is now Free Software max_clones is now global instead of per-server added general purpose hash+list routines numeric 10013 is no longer needed, removed from handler table hash table functions updated to provide support for any type of key, not just a string 2000-11-15 drscholl * ChangeLog, README, browse.c, main.c, napster.txt, opennap.h, privmsg.c: updated ChangeLog with recent entries the ip address of the client is now returned with the end-browse-list numeric, per the official servers added redirect and cycle to operserv 2000-11-12 drscholl * add_file.c: fixed segfault in fdb_add when memory is exhausted 2000-11-10 drscholl * browse.c, main.c, opennap.h: --enable-version-stats did not work with --enable-router 2000-11-06 drscholl * client_quit.c, sample.conf: fixed bug in client_quit where it was testing for local users rather than remote users 2000-11-03 drscholl * login.c: added check for missing param in check_password() * libpoll.c, libpoll.h, server_login.c: allow max_time_delta and warn_time_delta to be 0 to disable the clock sync check. fixed bug when using select() which causes a segfault 2000-11-02 drscholl * .indent.pro, NEWS, README, client_quit.c, config.c, configure, configure.in, free_user.c, handler.c, init.c, main.c, manual.html, opennap.h, whois.c: added who-was support 2000-10-31 drscholl * ChangeLog, TODO, config.c, join.c, opennap.h: added option boolean `irc_channels' to control whether to enforce channel names must begin with # or &. set by default to behave the same as previous versions. 2000-10-30 drscholl * ChangeLog, NEWS, README, init.c, main.c, opennap.dsp, opennap.dsw, opennap.opt, server_links.c: pre 0.37 release commit * sample.conf, whois.c: whois should use next_arg() to trim whitespaces fixed whois to use the same message as the official server when the target nickname is not online or registered 2000-10-27 drscholl * privmsg.c: added `nuke' to the list of operserv commands 2000-10-25 drscholl * server_connect.c, util.c: fixed broken remote server connect * handler.c, join.c, login.c, opennap.h: added stub function ignore_command to silently handle numerics that we ignore * .indent.pro, libpoll.c, main.c: reverted indentation style Login_Timeout support was never readded after changing over to use libpoll.c 2000-10-17 drscholl * login.c: fixed eject_client not too boot mods+ and to eject leeches before users. * download.c, login.c: upload_request() used the wrong offsets into av[] * main.c: prevent segfault when no context for a fd is passed into handle_io() * level.c: fixed level() to ensure that the sender's level is mod+ in the case where the local server has no record of the target user. * .indent.pro, download.c: reverted indent style to original fixed bug which caused a download to fail between client 2 server hops away * privmsg.c: fixed server crash when nickserv is called with no args * muzzle.c, synch.c: don't pass a muzzle command if a local user is not a mod+ 2000-10-04 drscholl * browse.c: fixed bug in browse when a user is logged into a server compiled as a router. 2000-10-03 drscholl * change.c, topic.c: fixed bug in nuke. the error message when permission is denied tried to send the message back to the (possibly nonexistent) user that was nuked. fixed bug in topic when the channel name was not present 2000-09-22 drscholl * browse.c: fixed core in browse() when no nick is given * server_connect.c, channel.c, main.c: added more log info when channel_op needs to resync a server 2000-09-21 drscholl * util.c: next_arg() should return null when an empty string is passed in * change.c: fixed bug in cloak which cause it not to allow any user to cloak 2000-09-20 drscholl * serverlib.c: pop_user_server() printed the value of the pointer instead of the nickname when an error occurred. * main.c: destroy_connection had wrong test for con->destroy * main.c: allow destroy_connection() to handle the case where the connection is marked as destroyed but not placed on the Destroy list 2000-09-19 drscholl * change.c, free_user.c, level.c, login.c, muzzle.c, opennap.h, userdb.c: rewrote muzzle to be more clear server no longer saves cloak state when a mod+ logs out. was casusing too many server desyncs. * change.c, join.c: server generated kicks on desync now state why the user was kicked fixed bad send_user() call in nuke() * change.c: always propogate a nuke command if the account is not locally registered and the user is not logged in since other servers might have a db entry for it. * login.c, synch.c: removed ts from level commands * channel.c: fixed crash in channel_wallop() when the wallop was sent by a server * main.c: catch memory alloc fail in destroy_connection() * main.c: added print out of number of fds in the Poll_Context in update_stats() for systems with poll() just to verify libpoll is not losing fds * free_user.c, kill_user.c, remove_connection.c: set the memory used by USER and CONNECTION structs to 0xff before free'g to catch bad refs .killed should be set prior to calling destroy_connection 2000-09-18 drscholl * login.c: last seen time is not necessary to sync up the user db * change.c, level.c: cloak() should send the absolute state when relaying to peer servers allow a user to nuke their own account. nuke now tells the user that their account was nuked if they are logged in at the moment. * level.c: fixed possible desync when the received server message was malformed * motd.c: motd now displays the name of the server you are connected to * change.c, level.c, login.c, opennap.h, privmsg.c, synch.c, userdb.c: reverted ts changes in level.c. changed .timestamp to .created for USERDB struct. once set it should not be modified unless a collision has occured. 2000-09-16 drscholl * main.c: update_stats() now prints the time at which the server was started * level.c, ChangeLog: fixed bug in timestamp code for level(). the oldest change should be dropped, not the newest. level() will now correct for server desync when it detects that a remote user has no privilege to execute the change. updated ChangeLog with recent CVS entries. 2000-09-15 drscholl * search.c: fixed find_search to print a single dot (.) for each exipred request instead of a line for each request. the id strings are not really important info * opennap.h, init.c, main.c: setting the Server_Ip and Interface was still broken with the new server_alias config var * manual.html, opennap.h, sample.conf, server_connect.c, init.c, main.c, config.c: added `server_alias' variable to use when the server should be aliased prevent certains vars from being reset after the server first loads the config file 2000-09-14 drscholl * manual.html, server_links.c: empty, or lines that start with a whitspace char are now ignored in the servers file * init.c, level.c, libpoll.c, libpoll.h, main.c: fixed compilation errors with -DROUTING_ONLY=1 2000-09-13 drscholl * main.c: use getsockopt() to fetch the reason error was returned from poll/select * main.c, remove_connection.c: when not in debug mode, write 0xff bytes to the free'd connection structs add check in handle_io() to ensure the fd matches the fd in the connection struct passed back * buffer.c, main.c: added fd # to log message when a socket error occurs send_queued_data() should error if you try to send to a destroyed connection * handler.c, libpoll.c, login.c: collapse POLLNVAL/POLLHUP/POLLERR check into a single if statement udpated flood protection 2000-09-12 drscholl * server_connect.c: fixed bug in killserver where you could not kill the server you are connected to * server_connect.c: server_disconnect disconnected the user issuing the disconnect, not the server * channel.c, kill_user.c, login.c, muzzle.c: fixed kill_user() to use pop_user_server() fixed bug in channel_op() where the "Server " prefix was the only thing sent * login.c: fixed login() so that it only sends a KILL back to the server where the login request came from when an error is detected. its not necessary to pass this message to all peer servers. * libpoll.c, libpoll.h, main.c: lp_dispatch now returns LP_ERROR when an error condition on the socket has been detected (hangup, error, invalid) * libpoll.c: added checking for other POLL* bits * libpoll.c: warn when bits other than POLLIN/POLLOUT are set in .revents * libpoll.c, libpoll.h, main.c: make libpoll a little cleaner when using poll() by first assignin a local var `pfd' to the struct pollfd entry * libpoll.c: lp_clear() should unset the current state of the fds from the last poll/select so that the next lp_dispatch() will not invoke the callback routine for that fd * join.c: when a user gains chanops by joining a new channel, the msg was not prefixed with "Server" * ban.c, channel.c, config.c, kick.c, kill_user.c, level.c, libpoll.c, muzzle.c, opennap.h, privmsg.c, server_links.c, server_login.c: fixed libpoll finally prefix Server to all actions preformed by servers in notify_ops/notify_mods calls * config.c, libpoll.c: more verbose error message when select() fails * init.c, libpoll.c: print warning when sigpipe is caught * libpoll.c: fixed copile error for select() based systems * buffer.c, libpoll.c, libpoll.h: more libpoll debugging * libpoll.c: fixed compile error on systems with only select() * part_channel.c, libpoll.c, main.c: dont call list_delete() on chan->invited when null more libpoll debugging * join.c, libpoll.c: added more libpoll debug statements dont call list_delete() on chan->invited when its null * libpoll.c: added additional libpoll debugging * join.c, libpoll.c: added missing set of .magic for channels changed realloc to REALLOC() in libpoll * libpoll.c: added debugging support for libpoll * main.c: dont clear the fd in report_stats(). its the listen fd, not the client's fd * libpoll.c, libpoll.h, change.c: memset() the pollfd struct when moving it to fill holes * change.c, main.c: reason when altering another users password should be optional * main.c: stats port fd was not cleared when closing it 2000-09-11 drscholl * init.c: fixed bug with umask where it should have use 077 instead of 0777 * libpoll.c: when moving the last element of the poll_fd[] array to fill holes, we need to update the .pollfd_offset of the corresponding lp_fd_ctx * libpoll.c, libpoll.h, server_connect.c: need to keep int offset into .poll_fd[] array since it can be realloc'd * init.c, libpoll.c, napster.txt: make hash table buckets a prime (1027) updated napster.txt with new 110 message * login.c, main.c, opennap.h, privmsg.c, search.c, server_usage.c, add_file.c, config.c, handler.c, init.c, kill_user.c, libpoll.c: changed bytes in/out counters to double prevent clients from using the alias names of servers fixed bug in issuing remote searches where the generated id was not sent when searches originated at the local server libpoll.c needed * handler.c, login.c, main.c, opennap.h: changed unsigned to u_ defs * aclocal.m4, configure, main.c, Makefile.in: rewrote main to use list_free() and list_foreach(). reduce timeout for lp_poll() when there are clients on the flood list * main.c: Destroy list was not NULL'd when delete all items in the list * main.c: added debug check of connection struct in Destroy list * Makefile.in, aclocal.m4, configure, configure.in: check for poll() and kqueue() * libpoll.c, libpoll.h: forgot to commit new libpoll files * Makefile.am, Makefile.in, add_file.c, ban.c, buffer.c, config.c, free_user.c, handler.c, init.c, kill_user.c, login.c, main.c, opennap.h, privmsg.c, remove_file.c, server_connect.c, server_login.c, serverlib.c, .indent.pro: incorporated new libpoll library into main branch added extensive checking to prevent negative total library size bug changed indent style for a few files with new .indent.pro 2000-09-08 drscholl * login.c, privmsg.c, server_connect.c: fixed bug in server_connect() where auth->alias was used without being checked for NULL added "register" command to NickServ to allow a user to register their own nick if not previously done. modified register_user() to allow for servers registering user accounts (needed for /m NickServ register) * TODO, init.c, list.c, list.h, server_links.c: added signal handler to catch sigsegv and wipe the user/server passwords from memory before dumping core when not in debug mode * ChangeLog, README: updated ChangeLog with recent entries updated README on server connect to what this version supports * server_connect.c: removed arg from server connect command. servers will need to be upgraded to interoperate with this version anyway. * sample.servers, search.c, server_connect.c, server_links.c, server_login.c, NEWS, README, add_file.c, browse.c, config.c, configure, configure.in, filter.c, free_user.c, handler.c, init.c, login.c, main.c, manual.html, opennap.h, remove_file.c: committed routing-only server patch enabled via --enable-routing 2000-09-07 drscholl * libpoll.c, libpoll.h: New file. * configure, configure.in, handler.c, libpoll.c, libpoll.h, main.c, opennap.h, server_connect.c, serverlib.c, Makefile.am, Makefile.in, buffer.c: initial import of the libpoll patch to support select/poll and simplify the main event loop 2000-09-06 drscholl * channel.c, napster.txt, opennap.h, util.c: sync_channel_bans() used the server ban numeric instead of the channel ban numeric added a few missing hex codes to napster.txt 2000-09-05 drscholl * README, handler.c, opennap.h, server_links.c: added ping_all_servers() command (10120) to trigger the lag detection * ChangeLog, NEWS, init.c, join.c, main.c, opennap.h, sample.servers, server_login.c: more security fixes. don't allow config file or ports to be specified on the command line when running as root to prevent local users on the system from attempting to exploit it. 2000-09-04 drscholl * join.c: fixed bug in join() where cross-server joins were always considere desynced * server_login.c: fixed bad format in time_check() * kick.c: fixed bug in kick() where it could not handle kicks generated by a peer server 2000-09-03 drscholl * sample.conf: removed outdated variables from sample.conf * config.c, configure, configure.in, init.c, main.c, manual.html, opennap.h: Removed config_dir, uid and gid config variables. For security, values about the operating system should not be revelead in case a admin+ user level is compromised. The -c command line option now specifies the directory where configuration files are found, rather than the master config file. uid/gid can be specified as part of the configure script (still defaulting to nobody/nobody). added --enable-chroot configure option to allow opennap to be run in a jail. imediately after reading the command line arguments, opennap will chroot() to the configuration directory before reading any config files. 2000-09-02 drscholl * config.c, configure, configure.in, handler.c, init.c, main.c, opennap.h, server_login.c, synch.c, README: added support for chroot() added time_check() function to detect clock skew when linking servers. if the delta is more than Max_Time_Delta, the link will be closed. if it is more than Warn_Time_Delta, it will notify the mods but let the link continue. * manual.html, privmsg.c, sample.conf: added /m chanserv level command removed channel_limit from sample.conf 2000-09-01 drscholl * config.c, main.c, manual.html, opennap.h: removed Channel_Limit. its now always set to 0 by default * channel.c, free_user.c, join.c, opennap.h, part_channel.c, serverlib.c, synch.c: join() should send kick messages to servers which it detects are desynched. fixed TS code to ignore TS==0 from a remote server when the local TS > 0. remove .invited member from USER since it's not necessary always attempt to remove the user from the .invited list of a channel in case the channel was set -INVITE after the user was invited. default channel limit set to 0 instead of Channel_Limit * channel.c: fixed bug in channel ban where it was impossible to ban someone * manual.html, whois.c: fixed bug in which_server() where pkt was used instead of nick when doing hash_lookup() * main.c, manual.html, privmsg.c, remove_connection.c, server_links.c: updated the manual with even more information added NickServ pseudo user and the "ghost" command 2000-08-31 drscholl * Makefile.am, Makefile.in, announce.c, kill_user.c, login.c, main.c, napster.txt, opennap.h, remove_connection.c, search.c, server_connect.c, serverlib.c, start_opennap: modified handle_io() to fill up the holes created by disconnected clients in the Clients[] array. all loops over Clients[] should now use Num_Clients as the basis and there is no need to check for NULL entries any more. added start_opennap script to facilitate backing up of gmon.out for profiling. 2000-08-30 drscholl * whois.c: which_server() should strip trailing whitespace from the nick before attempting to look up the user * search.c, server_links.c: server_pong was checking the wrong arg for detecting the response to an auto-sping. * handler.c, search.c: added error message to the user when a search contains no valid search terms fixed compilation warning about min,max possibly being used uninitialized server_pong was not put in the handler table so it was never called * README, handler.c, opennap.h, privmsg.c, whois.c: added a new command (10119) to display which server a particular user is on. also accessable via /msg operserv server * search.c: forgot to init .maxsize and .maxduration 2000-08-29 drscholl * README, channel.c, search.c: added support for filtering search results by excluding certains words added support for filtering search based upon file size or mp3 play time. * usermode.c: forgot to add "PING" user mode so users can toggle it * README, config.c, login.c, main.c, opennap.h, search.c, server_links.c: added new numeric 10022 for server->server pong response. a 750 to a remote server will return a 10022 instead of a 750. added new config var `ping_interval' so specify how often (in seconds) the server should ping its peer servers. added new user mode +PING which controls the server lag detection notifications to mods+ fixed bug in fdb_search where it would return all files which matched the word with the fewest matching entries in it instead of checking for all search terms. * server_links.c: changed ping_server to use the same numeric for the server response instead of using send_user() 2000-08-28 drscholl * channel.c: allow mods+ to invite without being in a channel * channel.c: the notify_ops() call was testing for the server ban instead of channel ban * join.c: server should only set a user as channel operator when a new channel is created when the user is local. otherwise it should rely on the remote server to specify which user gets opped. 2000-08-27 drscholl * main.c: fixed bug where server->server data wasn't sent if it had all pending data had been compressed the previous time, but not all sent. 2000-08-26 drscholl * channel.c, opennap.h, public.c, synch.c: bug in channel_op when used to voice a user it set the operator bit instead. 2000-08-25 drscholl * napster.txt, search.c: support the LOCAL_ONLY keyword in searches (same as LOCAL), as this is what the official napster servers use. * channel.c: channel bans were still using the wrong numerics * channel.c, list_channels.c, privmsg.c: fixed bug when channel bans not being set * main.c: when shutting down, just close client fd's without calling remove_connection to save time. 2000-08-24 drscholl * join.c: added comment about why we dont give automatic ops to users in predefined channels * channel.c: fixed memory leak when unbanning from a channel. the BAN struct was never free'd. the reason string was never truncated for channel ban/unban * channel.c, join.c, kick.c, login.c: channel limit and level did not handle the case where the TS was the same, but the values different * channel.c: fixed bug in channel_mode where an op could not change the mode * channel.c, kick.c, opennap.h: fixed bug where it was impossible to kick a user from a channel * config.c: server should notify mods+ when a server variable is changed * channel.c, join.c, TODO: fixed timestamp code on channel limit and mode. timestamps were not propogated for all server->server links reworked code in channel ops/voice to avoid using goto statements. * ban.c, channel.c, handler.c, join.c, kick.c, list_channels.c, main.c, opennap.h, part_channel.c, public.c, serverlib.c, synch.c: changed model to allow the first user in a non registered channel to gain ops, and to allow ops to create other ops. beefed up channel timestamps to prevent riding netsplits to gain channel privileges. 2000-08-23 drscholl * main.c, manual.html, motd.c, opennap.h, remove_connection.c, sample.conf, search.c, server_login.c, server_usage.c, FAQ, Makefile.am, Makefile.in, README, add_file.c, announce.c, config.c, configure, configure.in, handler.c, init.c, list.c, list.h, login.c: merged the toklist branch into headrev 2000-08-22 drscholl * manual.html: New file. * manual.html, config.c: began working on manual.html, opennap's ref manual * FAQ, Makefile.am, Makefile.in, login.c, main.c, motd.c, opennap.h, search.c: added faq about error 10054 under windows. number of connections to the server is now sent in the motd * README, configure, configure.in, handler.c, init.c, login.c, main.c, opennap.h, server_usage.c: added support for tracking client versions. numeric 10118 will cause the server to dump it's version/count list. enabled with configure --enable-version-stats * README, add_file.c, opennap.h, search.c: fixed memory leak when removing files from the database 2000-08-21 drscholl * main.c, search.c: "any" was not accepted as a valid file type when issuing a search request 2000-08-19 drscholl * main.c: created new function handle_io() to contain the client input/output loop * README: added additional information to the README * handler.c: handle_connection() should read() from server sockets until it returns -1, errno EWOULDBLOCK * add_file.c, list.c, list.h, main.c, search.c, server_login.c: created list_push() function to place a new list element at the head of a list. changed from list_append() to list_push() in many places where the order doesn't count. list traversal was eating much cpu needlessly. collapsed the two loops over Max_Clients in main() which handle input/output to clients. given that the write phase has to wait for select() anyway, there is no reason to separate the two. should save some time in the main loop. 2000-08-17 drscholl * announce.c, ban.c, login.c: connections from banned clients are now only displayed on the server to which the connection was made. 2000-08-16 drscholl * remove_connection.c, sample.conf, search.c, add_file.c, announce.c, config.c, init.c, list.c, list.h, main.c, opennap.h: changed db to use list of search tokens for matching rather than string comparisons 2000-08-15 drscholl * add_file.c, configure, configure.in, main.c: added --enable-gprof configure option to compile with -pg fixed compile error when free'ing Filter hash table * announce.c, list.c, list.h: announce() should check for the user's level when sending a message from a cloaked user so that it shows the real nick for privileged users. added list_foreach() function 2000-08-13 drscholl * NEWS, README, opennap.dsp, opennap.dsw, opennap.h, opennap.opt, ChangeLog: updated win32 build files * TODO, browse.c, resume.c: fixes to compile with --enable-resume 2000-08-10 drscholl * channel.c, synch.c: when syncing bans, the server should just say that it set the ban so that pop_user_server() doesnt return NULL for *sendernick. 2000-08-09 drscholl * NEWS, sample.conf: added additional information about flood control to the NEWS and sample.conf files * NEWS, TODO, config.c, handler.c, join.c, login.c, main.c, opennap.h, sample.conf, usermode.c: comma (,) is no longer a valid char in nicks/channels added server-side flood protection controlled by new config vars `flood_commands' and `flood_time'. mods+ notification is controlled by usermode FLOOD. 2000-08-08 drscholl * change.c: change_pass() now reports back success to the user * ban.c, config.c, filter.c, login.c, main.c, opennap.h: changed search token filter to be a hash table. linked list traversal consumed too much cpu time notify_mods() call in ban() used sender instead of sendernick as as arg. check_ban() should be called prior to eject_client() in login() * search.c, level.c: find_search() had %d instead of %s to print out the id of expired searches * level.c: level() should force an update when it detects an out of date timestamp so that desyncs are corrected. * NEWS, config.c, login.c, opennap.h, sample.conf: made the ejection of nonsharing clients a boolean configuration option * ChangeLog, Makefile.am, Makefile.in, NEWS, TODO, config.c, filter.c, handler.c, init.c, kill_user.c, main.c, opennap.h, sample.filter, search.c: search token filtering is now configurable instead of hardcoded. opennap now reads the `filter' file to determine which words to ignore. server_stats() should not use `tag' since it is called by login() with no arguments. 2000-08-07 drscholl * Makefile.am, Makefile.in, NEWS, browse.c, configure, configure.in, handler.c, join.c, login.c, main.c, napster.txt, opennap.h, opennap.init: changed basename() to my_basename() to avoid compilation errors on some systems. look for -lz in /usr/local/lib opennap should return message 13 when receving unknown commands prior to receipt of the login (2) message. added support for tcp_wrappers mods+ could not bypass the strict channel join setting opennap should send the 316 numeric prior to disconnecting clients to be compatible with the napster.com servers updated napster.txt with new information sysv-init style script for starting opennap at boot from Geoffrey Lee 2000-08-05 drscholl * configure, configure.in, init.c, login.c: check for -lz in /usr/local/lib cast pid_t to int in dump_pid() added eject_client() to find a client with 0 files shared that has been connected the longest and kill it. if the server is full, login() will call eject_client() to try and kill someone else to make room for the current login. 2000-08-04 drscholl * ban.c, main.c, opennap.h, redirect.c, synch.c, README: extended the ban command to accept a timeout * Makefile.am, Makefile.in, README, handler.c, join.c, napster.txt, opennap.h, redirect.c, synch.c, whois.c: added support for client redirect (821) and client cycle (822) numerics changed set chan level to 823 to match official servers updated napster.txt with new information obtained from release of nap source the whowas response should have quoted the user's level similar to the whois response 2000-08-03 drscholl * FAQ, add_file.c, handler.c, remove_file.c, synch.c: added more checking to prevent a user's library size from being negative 2000-07-31 drscholl * add_file.c: finally found buffer overrun in add_directory(). strncpy() does not write a \0 to the end of the string if all the space was used up before getting to the end of the string 2000-07-30 drscholl * add_file.c, glob.c, search.c: rewrote tokenize() to reduce the number of strcmp() calls when reaping bad tokens. glob_match() was not case-insensitive 2000-07-29 drscholl * ChangeLog, NEWS, config.c, main.c, opennap.h, sample.conf, server_usage.c: added stats reporting for total bytes sent/received server_usage() now reports searches/sec and total bytes in/out 2000-07-28 drscholl * browse.c: reverted previous changes * add_file.c, download.c, init.c, main.c, opennap.h, remove_file.c, search.c, upload_complete.c, util.c: reverted back to storing full pathnames in the DATUM struct. it was causing too much load having to regenerate the filename every time match() needed to be called. * config.c, join.c, main.c, opennap.h, search.c, server_usage.c: added `search_timeout' variable to set the expiration time of remote searches (default: 180 secs) bytes in/out was not time averaged in server_usage() * channel.c, free_user.c, login.c, main.c, opennap.h, remove_connection.c, synch.c: cache the server names so that each USER struct can reference it a single time instead of once for each user * configure, configure.in: fixed bug in configure which causes DEBUG to always be set * download.c, upload_complete.c: reorganized code in download() to lookup the user's file only once * TODO, add_file.c, download.c, opennap.h, remove_file.c, search.c, upload_complete.c, util.c: added more strict checking to make sure the directory name also matches when looking up a file by its basename * browse.c, download.c, opennap.h, remove_file.c, upload_complete.c, util.c, add_file.c: modified hash table of user's files to index by only the pathname instead of the full directory name since that is no longer available * add_file.c, browse.c, download.c, resume.c: fixed many other places where the full filename was not returned * search.c: search did not return the full pathname of the shared files * add_file.c, browse.c, init.c, main.c, opennap.h, search.c, TODO: created new hash table `Paths' for storing the directory components of shared files a single time for all files in the same directory. 2000-07-27 drscholl * channel.c, sample.channels: altered channels file so that # is no longer considered a comment in `version 1' files. * NEWS, join.c, login.c: channel names must now begin with # or &. join will automatically prepend a hash (#) if missing * configure, configure.in: debugging is no longer enabled by default. use `configure --enable-debug' to turn it on * add_file.c, main.c, opennap.h: change Num_Gigs to a double. unsigned int was running out at 4096 GB. * Makefile.am, Makefile.in, NEWS, README, ban.c, channel.c, configure, configure.in, download.c, glob.c, join.c, list_users.c, login.c, napster.txt, opennap.h, resume.c, search.c, synch.c, upload_complete.c, util.c, whois.c: imported changes from adns branch, without adns support * NEWS, join.c: fixed bug in channel rollover code causing an infinite loop 2000-07-26 drscholl * channel.c: fixed bug which prevented registered channels from being dropped * remove_connection.c: check to make sure con->dns != 0 before calling adns_cancel() * upload_complete.c: fixed bug with downloads not working. forgot to switch .host to .ip in the download responses 2000-07-25 drscholl * main.c: added adns_if_noserverwarn to adns_init() to turn off warnings * login.c, main.c: login() did not convert the uint32 ip address to dot-quad before using it as the host name * server_connect.c: .resolved should be set when making an outgoing server connection so the connection doesnt time out waiting for a nonexistent dns lookup * configure, configure.in: configure should use `if test' rather than `if [' * README, list_users.c, whois.c: added the client ip address in dot-quad format to the end of the global user list response, and the whois response * configure, configure.in: configure should look for -ladns in /usr/local/lib as well * glob.c: New file. * glob.c: forgot to add glob.c * Makefile.am, Makefile.in, NEWS, ban.c, channel.c, configure, configure.in, download.c, join.c, list_users.c, login.c, main.c, napster.txt, opennap.h, remove_connection.c, resume.c, search.c, synch.c, whois.c: added initial support for adns to add reverse dns lookups for client connections. 2000-07-23 drscholl * ChangeLog, Makefile.in, README, configure, setup.c: fixed setup.c to compile under win32 updated ChangeLog with recent CVS log entries. 2000-07-20 drscholl * login.c: clone checker and max connections should only be checked for user logins, not server logins. * napster.txt: updated napster.txt on the 870 (add directory) command * add_file.c, handler.c, search.c: fixed possible buffer overrun in add_directory() fixed handle_connection() to avoid sending MSG_SERVER_USER_SHARING commands after every MSG_CLIENT_ADD_DIRECTORY command. added the server from which the command came to the log() messages generated by remote_search() and remote_search_result() 2000-07-16 drscholl * config.c, login.c, main.c, opennap.h, sample.conf: added clone checking controlled by new `max_clones' config var. 2000-07-13 drscholl * browse.c: fixed bug in new_browse() where no results would be returned in max_browse_results was set to 0 (which should mean unlimited) 2000-07-08 drscholl * add_file.c, configure.in, opennap.h: fixed buffer overflow in add_directory() when the directory portion of the filename was >=255 chars 2000-07-06 drscholl * server_usage.c: added bytes in and bytes out to the server stats 2000-07-02 drscholl * README, opennap.h, privmsg.c: changed rehash numeric to 10117 to avoid conflict with old server ping numeric added `rehash' to the list of operserv commands * README, config.c, handler.c, opennap.h: added rehash (10116) command to cause a server to reload it config files * README, add_file.c, server_connect.c: log message for bitrateToMask() said freqToMask server_connect should check for missing host argument 2000-06-30 drscholl * muzzle.c: added missing return when attempting to unmuzzle a user that isnt muzzled 2000-06-29 drscholl * channel.c: channel_voice() did not check for permission to execute the command * browse.c, channel.c, muzzle.c, serverlib.c: fixed compilation warnings about unused `len' pop_user_server() had a bad log() message with the message tag value causing a segfault muzzle() should ensure that db is not NULL before using it 2000-06-27 drscholl * whois.c: append_string() allocated extra space but didnt copy the data to append * channel.c, join.c: bugfixes from panasync. join() was setting the wrong user to channel operator since chanUser was reused for sending a join message to all clients in the channel. in channel_muzzle(), need to check for sender!=NULL when checking the user level permission 2000-06-26 drscholl * browse.c, channel.c, muzzle.c, whois.c: muzzled users should not be able to channel wallop 2000-06-24 drscholl * ChangeLog, NEWS, README: post 0.34 release commit 2000-06-23 drscholl * TODO, channel.c: channel_mode should not allow a user below the channel level to change the mode 2000-06-22 drscholl * Makefile.in, README, channel.c, handler.c, opennap.h, privmsg.c, public.c, serverlib.c, synch.c: added channel voice and muzzle commands * channel.c, join.c, opennap.h, usermode.c: removed channel and topic usermode flags since they are no longer used reworked join() to allow channel ops to bypass the +INVITE and limit checks * channel.c, configure, configure.in, join.c, kick.c, opennap.h, topic.c: updated version to 0.34 removed notify_mods() from all channel specific calls. notify_ops() will now notify mods+ in the channel. 2000-06-21 drscholl * napster.txt, privmsg.c: added invite and mode command to chanserv * README, browse.c, handler.c, opennap.h, whois.c: added new experimental browse command (10301/10302) for more compact browse listings 2000-06-19 drscholl * README, channel.c, opennap.h, synch.c, topic.c: added +TOPIC channel mode to allow any user to change the topic 2000-06-17 drscholl * channel.c: invite message printed the wrong user for who issued the invite * README, channel.c, free_user.c, handler.c, join.c, opennap.h, serverlib.c, synch.c, util.c: added +INVITE channel mode * README, channel.c, opennap.h, public.c, synch.c: added +MODERATED channel mode - only ops and mods+ can speak in public * README, channel.c, handler.c, join.c, list_channels.c, opennap.h, part_channel.c, synch.c, whois.c: added channel_mode(10209) command added +PRIVATE channel mode to make the channel not show up in the channel lists or whois response 2000-06-15 drscholl * network.c: solaris doesnt define INADDR_NONE * buffer.c: avoid coredump in queue_data() when buffer_new() fails * search.c, server_usage.c: server stat message should use %u for the number of total kbytes search expected "EQUALS" intead of "EQUAL TO" 2000-06-14 drscholl * README, channel.c, handler.c, opennap.h, privmsg.c: added channel_wallop (10208) command to send a message to all mods+ and channel operators for a specified channel * config.c: default max_nick_length changed to 19 since the win32 napster client can't cope with anything longer than this * userdb.c: expired nicks weren't removed from User_Db until the server restarted * login.c, userdb.c: need to use strtoul() to convert ip address from string to unsigned int instead of atoi() * Makefile.am, Makefile.in, add_file.c, buffer.c, free_user.c, init.c, login.c, main.c, mempool.c, mempool.h, opennap.h, remove_connection.c, search.c, serverlib.c: removed mempool code. it turned out to be less efficient that malloc/free 2000-06-13 drscholl * buffer.c, login.c, server_connect.c, server_login.c, serverlib.c: buffer_queue() did not set the .datasize after copying data * buffer.c: fixed buffer_queue() to handle input larger than BUFFER_SIZE bytes * remove_connection.c: fixed memory leak with free'g the input buffers for client connections * buffer.c: fixed bug in buffer_compress() * buffer.c, debug.c, free_user.c, init.c, login.c, main.c, mempool.c, opennap.h, remove_connection.c, serverlib.c, util.c: added memory pool management for users, connections, send queue buffers * Makefile.am, Makefile.in, add_file.c, init.c, main.c, mempool.c, mempool.h, opennap.h, search.c: added initial support for memory pools 2000-06-11 drscholl * README, login.c: servers should not issue KILL messages to the server from which a nick collision occurs 2000-06-10 drscholl * setup.c, Makefile.in, TODO, search.c: rewrote search_internal() to be able to parse arbitrary length search strings setup should create files as -rw------- * Makefile.in, TODO, configure, configure.in, free_user.c, kill_user.c, login.c, opennap.h, synch.c: added .killed member to CONNECTION so that a QUIT is not issued when a local user is killed (the KILL is sufficient) consolodated the MSG_SERVER_USER_IP message into MSG_CLIENT_LOGIN so that nick collision can be handled more gracefully. This allows the server to reject the newer user instead of rejecting both clients. 2000-06-09 drscholl * Makefile.in, channel.c, configure, configure.in, muzzle.c: check for -lsocket (needed for os/2) fixed segfault in muzzle() for log message when the user is already muzzled and the user is not logged in * NEWS, README, configure, configure.in, opennap.h: post 0.32 commit 2000-06-08 drscholl * channel.c, login.c: bug in channel_op() allows any user to make themself a channel operator. missing a return statement after the permission denied message servers now synch the user level when a user logs in to ensure all servers have the same settings * Makefile.in, NEWS, README, motd.c, opennap.h, opennap.opt, setup.dsp, ChangeLog: updated for 0.31 release motd.c was missing stdlib.h for free() updated project files for Win32 build * server_login.c: server link log messages are important after all * kill_user.c, search.c: removed log() message from kill_user(). notify_mods() is sufficient removed old log() in search_callback(). problem seems to be fixed. * server_login.c: added more notify_mods() calls in server_login() indicating server link failures 2000-06-07 drscholl * motd.c: the motd file is now loaded into memory once at startup to reduce the overhead of fileio every time a user logs in 2000-06-06 drscholl * search.c: removed log message for bitrate test since it seems to be working * search.c: added a log() message to search_callback() to print why the minbitrate test fails for a search to track down the problem we have seen * list_users.c: added new flags to global_user_list(): z muzzled users c cloaked users * ban.c, login.c, main.c, opennap.h, util.c: moved check for ip bans to login() so that the user name can be printed in the mod notification fixed ban save/load to store all bans in the long format. bans are now restored to the same order they were dumped, so that the older bans are last * search.c: max linespeed and frequency checked for "at most" when the correct string is "at best" 2000-06-05 drscholl * search.c: "at most" qualifiers were not passed to peer servers properly * tresolv.c, tresolv.h, whois.c, Makefile.am, Makefile.in, configure, configure.in, main.c: removed tresolv code since it wont work effectively 2000-06-04 drscholl * search.c: bitrate/samplerate search criteria weren't using BitRate and SampleRate * configure, free_user.c, login.c, opennap.h, serverlib.c, whois.c: initial changes to integrate support for dns names in opennap * configure, configure.in, whois.c: changed whois to report the dns name for local users * Makefile.am, Makefile.in, ban.c, configure, configure.in, main.c, tresolv.c, tresolv.h: added threaded dns lookup routines 2000-06-03 drscholl * README, configure, configure.in, privmsg.c: changed server link documentation in README to only describe the method of putting both passwords in the file added op and deop commands to chanserv. removed help for these items in operserv. * config.c: allow mods+ to query config variables but not set them * main.c, server_connect.c: added notify_mods() to report server link failures * search.c: added "mp3z" to the list of tokens to ignore in filenames * change.c, handler.c, opennap.h: accept the change_email command even if its not supported * login.c: removed extraneous log messages from login() added notify_mods() message to register_user() * add_file.c, remove_file.c: removed log message from remove_file() when the file requested is not shared removed log message from add_file() for duplicates instead of calling strlen() just calculate the difference between av[0] and av[1] to detect long filenames in add_file/share_file * main.c, server_usage.c: added number of registered users to the server stats command * add_file.c, config.c, init.c, main.c, motd.c, opennap.h, search.c: motd is now only fopen'd once since it gets used all the time. * ChangeLog, Makefile.am, Makefile.in, ban.c, configure, configure.in, kick.c, level.c, login.c, napster.txt, opennap.h, sample.conf: fixed core in level(). user might be NULL so don't operate on it. * config.c: changed nick_expire to 31 days by default * announce.c, buffer.c, handler.c, search.c: removed several unnecessary log entries error message from read() and write() should include the host for which the error occured for better debugging 2000-06-02 drscholl * README, change.c, join.c, level.c, login.c, muzzle.c, opennap.h, synch.c, userdb.c: added timestamps to the channel modes on synch changed the .created member of USERDB to be .timestamp. This field is now used to keep track of when the entry was last modified so it can be used to synch servers better. fixed synch of cloak status. added ability to absolutely turn cloak on in a server->server message rewrote level() to be much cleaner muzzle status was not correctly restored from the users file upon startup new function create_db() created a USERDB struct based on a USER struct to avoid duplicate code in level() and muzzle() * channel.c, handler.c, join.c, level.c, opennap.h, privmsg.c, synch.c, README: added timestamp to channels so that servers can sync the level and limit properly added drop channel (10207) command to turn a persistent channel into a normal channel * TODO, add_file.c: prevent refcount overflow by discarding tokens in excess of 30 2000-06-01 drscholl * hotlist.c: only send the notice about the hotlist limit once to avoid flooding the client * main.c: added dump_state() to dump all state info (users/channels/bans) to disk on a periodic basis. * add_file.c: freqToMask() and bitrateToMask() now display the user and client info in their error messages for debugging * change.c, configure, configure.in, handler.c, level.c, login.c, muzzle.c, opennap.h, userdb.c, whois.c: support for keeping client email address is now turned off by default. added --enable-email configure option to turn it back on * add_file.c, config.c, main.c, opennap.h: added max_path variable to limit the length of a filename to the add_file() command (default: 256) * add_file.c: add-directory() should process the rest of the line when it detects a duplicate rather than aborting * add_file.c, browse.c: the browse result didnt use BitRate and SampleRate to get the real values * add_file.c, browse.c, opennap.h, search.c: compacted the DATUM struct since the bitrate and samplerate can only have a few defined values ->hash member of DATUM should not be present when resume is disabled. * login.c, opennap.h: dont need the ->hash member of DATUM struct when compiling without resume support changed kill message for ghosts in login() to include the name of the server where the ghost is connected * login.c: ghost code was still buggy * login.c: fixed broken ghost code which caused a server core * synch.c: syncing the chanops didnt including the :sender parameter * channel.c, login.c, remove_connection.c: fixed login() to allow the ghost detection to proceed with the login without killing both connections 2000-05-31 drscholl * ChangeLog, NEWS, README: updated files for 0.30 release * announce.c, login.c: announce() should use Operator as the nick when the user is cloaked invalid_nick() should not allow `operator' * login.c: forgot to issue a KILL when terminating a ghost * login.c, napster.txt: server will now terminate old connections if a client logs in from the same ip for the same nick. this allows clients to kill their own ghosts. * ban.c, browse.c, change.c, channel.c, hotlist.c, join.c, level.c, login.c, opennap.h, privmsg.c, sample.conf, serverlib.c: added generic invalid_nick_msg() function * ban.c, change.c, config.c, kick.c, kill_user.c, main.c, muzzle.c, opennap.h, serverlib.c: added max_reason configuration variable to limit the size of the reason strings in the muzzle/kick/kill messages * FAQ, config.c, list_users.c, part.c, public.c: re-added the form_message() calls for public() and emote() * config.c, configure, configure.in, login.c, main.c, napster.txt, opennap.h, sample.conf, topic.c: added max_client_string config variable to limit the length of the client version string in the login command strlen() returns ssize_t so have to cast the Max_* to unsigned to avoid compiler warnings * Makefile.in, ban.c, config.c, download.c, hotlist.c, main.c, muzzle.c, opennap.h, privmsg.c, sample.conf, topic.c: added max_ignore config var to limit user lists added max_hotlist config var to limit user lists added max_topic config var to limit channel topics more fixes to detect invalid nicknames before they are used * hotlist.c: dont allow invalid nicks to be added to the hotlist * login.c: fixed bug in register_user() where the number of args was not checked fixed bug in register_user() where an invalid nick could be registered fixed bug in register_nick() where invalid nick was not checked for * add_file.c, ban.c, browse.c, buffer.c, change.c, channel.c, client_quit.c, config.c, debug.c, download.c, getopt.c, handler.c, hash.c, hotlist.c, join.c, kick.c, kill_user.c, level.c, list.c, list_users.c, login.c, main.c, md5.c, metaserver.c, motd.c, muzzle.c, network.c, opennap.h, part.c, part_channel.c, patchnap.c, ping.c, privmsg.c, public.c, remove_connection.c, remove_file.c, resume.c, search.c, server_connect.c, server_links.c, server_login.c, serverlib.c, spyserv.c, synch.c, timer.c, topic.c, upload_complete.c, userdb.c, usermode.c, whois.c: more checks to make sure that invalid channels and nicks are not passed back to the client or to other servers * change.c, download.c, kick.c, kill_user.c, opennap.h, privmsg.c, serverlib.c, whois.c: modified nosuchuser() not to take the nick as an argument to prevent buffer overflows * config.c, configure, configure.in, join.c, kick.c, list_users.c, main.c, opennap.h, part.c, public.c, serverlib.c, topic.c, ChangeLog, NEWS, channel.c: added exhaustive checks to make sure the channel name is valid in all commands * Makefile.in, buffer.c: fixed buffer overflow when output to the client is larger than 1024 bytes in one command * ChangeLog, NEWS, main.c: updated ChangeLog and NEWS for 0.28 release schedule dump_channels() to happen at the user_db_interval 2000-05-30 drscholl * opennap.dsp, opennap.h, opennap.opt, remove_connection.c, sample.channels, server_login.c, topic.c, Makefile.in, README, buffer.c, config.c, configure, configure.in, handler.c, main.c: zlib is now a requirement to compile. removed all HAVE_LIBZ conditional code. fixed bug in topic() which caused a buffer overrun in the new code to change \r and \n to space * topic.c: convert \r and \n in channel topics to space chars to avoid problems when writing out the channels file 2000-05-28 drscholl * TODO, add_file.c, download.c, upload_complete.c: if resume support is disabled, dont store the md5 hash value and just return a bogus zero value wherever it is called for 2000-05-27 drscholl * Makefile.in, channel.c, main.c, opennap.h, part_channel.c, privmsg.c, synch.c: added missing headers for clean compile with debug turned off channel ops can now be specified in the `channels' file. the channels file is now written out when opennap exits * ban.c, network.c: use nlogerr() in bind_interface() * server_connect.c: complete_connect() should abort if con->destroy is already set because the error will have been cleared and check_status() will report no error 2000-05-26 drscholl * network.c: use inet_addr() to detect dot-quad format hostnames since gethostbyname() is unreliable under win95 * README, channel.c, configure, configure.in, handler.c, join.c, kick.c, list_users.c, login.c, main.c, napster.txt, opennap.h, part_channel.c, privmsg.c, public.c, serverlib.c, synch.c, topic.c: added support for channel operators 2000-05-25 drscholl * buffer.c: fixed crash when opennap is compiled with zlib and linking to a server with compression turned off * ChangeLog, NEWS, ban.c: fixed spelling error of Connection in ban.c updated ChangeLog * config.c, privmsg.c: fixes to compile cleanly with debugging off 2000-05-24 drscholl * napster.txt: updated spec wrt to the login messages * README, TODO, handler.c, opennap.h, usermode.c: changed user_mode() to user_mode_cmd() to avoid conflict with the user_mode macro defined in under Linux. This was causing problems under LinuxPPC. * list_users.c: allow * to be specified for the server in global_user_list() to match users on all servers (for use with the optional flags) * Makefile.am, Makefile.in, buffer.c, config.c, handler.c, init.c, list_users.c, main.c, network.c, opennap.h, remove_connection.c, server_login.c: added `l' flag to global_user_list() to match leeches rewrote global_user_list_cb() because it did not work for multiple flags fixed connect() failure under win32 (linking now works!) fixed to bypass calls to zlib when the compression level is 0 since the windows version is not complied with zlib at all. * Makefile.am, Makefile.in: fixed makefile.am to add logchk and remove README.WIN32 and README.UNIX * logchk: added logchk script * README.WIN32, TODO: removed README.WIN32 MISSING LOG ENTRIES: fixed bug in public() where the server should not use `tag' to send the message to the cl ients since the server uses 403 instead of 402 added napchk script from wolf added -b command line option to run opennap in the background. $config_dir/log is opened as stdout to catch output from the process. the pid is now stored in $config_dir/pid when opennap starts up to facilitate external scripts to restart it when it dies configure now checks for mlockall() split Win32 and Unix installation notes into separate files for clarity updated TODO file the global MD5 hash table should not be compiled in when RESUME is undefined, and the garbage collection should not be scheduled (was causing a crash in the win32 build) ignore search matches when both parties are firewalled added README.WIN32 and README.UNIX to EXTRA_DIST check for valid (>0) file size when adding files privileged users should see who send publics and emotes even when other users are cloaked. Current_Time needs to be set in mkpass.c prior to calling init_random() corrected mispelling of 'Foreward' in napster.txt * join.c, login.c: added $ to the list of characters not allowed in nick or channel names. many clients use this character to denote a variable * README.WIN32, init.c: need for _POSIX_PATH_MAX * README, README.UNIX, README.WIN32: rewrote installation instructions to reflect the new setup utility * Makefile.am, Makefile.in, opennap.dsw, opennap.opt, setup.c, setup.dsp: added setup utility 2000-05-23 drscholl * Makefile.in, NEWS, public.c: fixed bug in public() where the server should not use `tag' to send the message to the cl ients since the server uses 403 instead of 402 MISSING LOG ENTRIES: added napchk script from wolf added -b command line option to run opennap in the background. $config_dir/log is opened as stdout to catch output from the process. the pid is now stored in $config_dir/pid when opennap starts up to facilitate external scripts to restart it when it dies configure now checks for mlockall() split Win32 and Unix installation notes into separate files for clarity updated TODO file the global MD5 hash table should not be compiled in when RESUME is undefined, and the garbage collection should not be scheduled (was causing a crash in the win32 build) ignore search matches when both parties are firewalled added README.WIN32 and README.UNIX to EXTRA_DIST check for valid (>0) file size when adding files privileged users should see who send publics and emotes even when other users are cloaked. Current_Time needs to be set in mkpass.c prior to calling init_random() corrected mispelling of 'Foreward' in napster.txt * Makefile.am, napchk: added napchk script from wolf MISSING LOG ENTRIES: added -b command line option to run opennap in the background. $config_dir/log is opened as stdout to catch output from the process. the pid is now stored in $config_dir/pid when opennap starts up to facilitate external scripts to restart it when it dies configure now checks for mlockall() split Win32 and Unix installation notes into separate files for clarity updated TODO file the global MD5 hash table should not be compiled in when RESUME is undefined, and the garbage collection should not be scheduled (was causing a crash in the win32 build) ignore search matches when both parties are firewalled added README.WIN32 and README.UNIX to EXTRA_DIST check for valid (>0) file size when adding files privileged users should see who send publics and emotes even when other users are cloaked. Current_Time needs to be set in mkpass.c prior to calling init_random() corrected mispelling of 'Foreward' in napster.txt * login.c: fixed bug in login.c where it should have tested for MSG_CLIENT_LOGIN_REGISTER instead of MSG_CLIENT_REGISTER. this was causing automatic registration of all users who weren't already registered. * Makefile.am, Makefile.in: added README.WIN32 and README.UNIX to EXTRA_DIST * Makefile.in, list_users.c, opennap.h, whois.c: added support for the global user list (831) command 2000-05-22 drscholl * sample.conf: updated sample configuration file with new `server_ports' variable * config.c, configure, configure.in, main.c, network.c, opennap.h, resume.c: support for resume is now turned off by default, use configure --enable-resume to turn it back on added support for a list type configuration variable boolean config vars could not be set by default or reset via the client removed server_port configuration variable created new list configuration variable `server_ports' which contains a space separated list of ports to listen on for incoming connections * server_connect.c, serverlib.c: need to check for null return from next_arg() in kill_server() to prevent segfault * add_file.c: check for valid (>0) file size when adding files * public.c: privileged users should see who send publics and emotes even when other users are cloaked. 2000-05-21 drscholl * public.c: fixed problem with emote() not working over server links * init.c, main.c: fixes to compile under os/2 * README, README.UNIX, README.WIN32: split Win32 and Unix installation notes into separate files for clarity * README, mkpass.c, napster.txt: Current_Time needs to be set in mkpass.c prior to calling init_random() corrected mispelling of 'Foreward' in napster.txt 2000-05-19 drscholl * TODO, util.c: print_args() should not print to stderr so that when in background mode it will get saved in the log file * Makefile.in, config.c, configure, configure.in, init.c, main.c, opennap.h, util.c: added -b command line option to run opennap in the background. $config_dir/log is opened as stdout to catch output from the process. the pid is now stored in $config_dir/pid when opennap starts up to facilitate external scripts to restart it when it dies configure now checks for mlockall() 2000-05-18 drscholl * TODO, main.c: updated TODO file the global MD5 hash table should not be compiled in when RESUME is undefined, and the garbage collection should not be scheduled (was causing a crash in the win32 build) * search.c: ignore search matches when both parties are firewalled 2000-05-15 drscholl * ChangeLog, NEWS, README, login.c, opennap.dsp, opennap.h, opennap.opt: updated build for Win32 platforms * Makefile.in, kick.c: the reason in clear_channel() is not quoted from the client, so use next_arg() instead of split_line() to parse the input 2000-05-13 drscholl * configure.in, init.c, join.c, login.c, main.c, opennap.h, resume.c, sample.conf, Makefile.in, README, add_file.c, config.c, configure: added --disable-resume to turn off server support for resume searching added `lock_memory' configuration variable to prevent the process from being swapped added `registered_only' configuration variable to only allow registered users to log in added `auto_register' configuration variable to automatically register users upon login 2000-05-09 drscholl * add_file.c, config.c, handler.c, opennap.h, privmsg.c, util.c: added command 870 for new share file supported in beta6 next_arg() now handles quoted parameters * server_login.c: get_server_pass() should return `server_password' if no local password is specified * ChangeLog: updated the ChangeLog file with recent modifications. failed log message from the previous commit: modified get_server_pass() to optionally return the local password to use (if specified in the config file) to avoid parsing the file twice. * server_login.c: modified get_server_pass() to optionally return the local password to use (if specified in the config file) to avoid parsing the file twice. * Makefile.am, Makefile.in, README, server_login.c, textdb.c, textdb.h: rewrote get_server_pass() to use its own simple parsing routine to fetch the password instead of using the textdb_*() functions. added support for using different server passwords with each linked server rather than always using the value of `server_password'. if a local password is specified in the `servers' it will override the default password. * napster.txt, opennap.h, privmsg.c: added missing 325 server response when the user to ignore is already ignored 2000-05-08 drscholl * handler.c, kick.c, napster.txt, network.c, opennap.h, privmsg.c, server_links.c: added entries for the server-side ignore list to the handler array. update napster.txt with the numerics for server-side ignore kick() should call notify_mods() prior to part_channel() in case the channel is destroyed by kicking the last user out (Greg Prosser ). set_limit() should just warn if FD_SETSIZE is smaller than the set hard limit for max file descriptors. 2000-05-03 drscholl * TODO, change.c, download.c, hotlist.c, join.c, opennap.h, part.c, part_channel.c, ping.c, privmsg.c, public.c, remove_connection.c, serverlib.c, usermode.c, util.c: added server-side ignore/unignore functionality. this is not able to be called by the user yet since the numerics are unknown changed join/part to show the joins/parts to privileged users regardless of the cloak status added CLOAK usermode to en/disable the server notifications * handler.c, init.c, join.c, login.c, main.c, napster.txt, opennap.h, part.c, public.c, util.c: increased hash table size to 521 for users and hotlist for better performance with many users public() and emote() now find the channel by looking through the users joined channel list with find_channel() instead of calling hash_lookup() removed many extraneous log() messages about command parsing errors switched to using ISUSER(user->con) instead of testing user->local * hash.c, sample.conf: replace hash function with the `ElfHash' used in the ELF loader since it produces MANY less collisions 2000-04-30 drscholl * README, handler.c, opennap.h, server_links.c: changed numeric for server ping to 750 to match the official servers * change.c, level.c: setlinespeed didn't actually change the user's speed in the USER struct * login.c: exempt mods+ from server bans * Makefile.am, Makefile.in, TODO, change.c, handler.c, muzzle.c, napster.txt, opennap.h, unmuzzle.c: consolodated the muzzle/unmuzzle code into one function extended muzzle/unmuzzle to allow change for a registered user that is not currently logged in 2000-04-28 drscholl * ChangeLog: updated ChangeLog with recent activity missing log entries from last commit: * change.c, join.c, public.c, whois.c: publics and emotes should not be cloaked when the channel level is mod+ whois should show Cloaked state for privileged users whois should hide channel membership for nonprivileged users when they perform a whois on a cloaked user added a period at the end of the notification of cloak status. * change.c, level.c, login.c, muzzle.c, opennap.h, unmuzzle.c, userdb.c: changed muzzle field in USERDB to flags and use the ON_* bitmasks instead of individual fields. cloak state is now saved in the userdb and restored when the user logs back in. * README, handler.c, opennap.h, server_links.c: added ping_server() command (10116) 2000-04-27 drscholl * README, privmsg.c: added cloak to the list of operserv commands * Makefile.in, change.c, kick.c, kill_user.c, list_users.c, muzzle.c, opennap.h, serverlib.c, unmuzzle.c: kill, muzzle, unmuzzle and kick should not display the issuer's nick if they are cloaked cloak() should call notify_mods() * README, TODO, browse.c, change.c, channel.c, handler.c, join.c, muzzle.c, napster.txt, opennap.h, part_channel.c, patchnap.c, privmsg.c, public.c, whois.c: updated napster.txt with new findings from the linux nap v1.0 beta changed numeric for the kick command to 829, per nap v1.0 beta changed numerics for channel ban, unban and list per nap v1.0 beta renamed chanban, chanunban, chanbanlist operserv commands to cban, cunban and cbanlist. added cbanclear to operserv commands added the clear channel ban list command (424) added the cloak user command (625). for cloaked users, parts/joins are not sent and public messages show up as being from `Operator' instead of the real nick that sent it. added stub routine for global user list. updated patchnap.c for linux nap v1.0 beta * FAQ, README, privmsg.c: added chanban and chanunban commands to operserv added FAQ about max_browse_result/client_queue_length * Makefile.in, channel.c: fixed channel ban notify_mods() messages which were missing channel names * README, ban.c, channel.c, configure, configure.in, handler.c, join.c, opennap.h, serverlib.c, util.c: added first cut at channel bans 2000-04-26 drscholl * Makefile.in, login.c, muzzle.c: changed notification messages in login() wrt restoring muzzled state to match those in the muzzle() command. fixed muzzle() to allow for automatic server muzzling by avoiding a call to pop_user(), which assumes a real user issued the command * napster.txt: updated protocol spec with additional info from Thomas van der Heijden * whois.c: consolodated the whois response formation instead of separate commands for each case. now normal users can see whether another user is muzzled * login.c, muzzle.c, opennap.h, unmuzzle.c, userdb.c: muzzle status is now saved in the user db so that it gets restored when the user logs in again * mkpass.c, opennap.h, usermode.c, util.c, Makefile.in, announce.c, configure, configure.in, handler.c, init.c, main.c: added WALLOP user mode to disable wallops use srand() and rand() to generate random numbers instead of hashing input data with md5. the md5 code seems to generate lots of unaligned memory accesses on alpha, and it really isnt critical to have cryptographic quality random numbers. it should also reduce the cpu usage since it no longer has to hash all input. * join.c: added support for automatic creation of rollover channels for predefined channels * login.c: check for get_level() == -1 in reginfo() 2000-04-25 drscholl * main.c, opennap.h: Num_Gigs should be unsigned int to prevent a negative count when going about 2TB library size. 2000-04-24 drscholl * TODO, userdb.c: check for valid level when reading the userdb from disk 2000-04-20 drscholl * ban.c, synch.c: fixed loading and saving of bans to get the correct ban type 2000-04-19 drscholl * Makefile.in, opennap.dsp, opennap.opt: updated win32 projects files for 0.25 2000-04-18 drscholl * ChangeLog, Makefile.am: post 0.25 release commit forgot to add sample.channels to EXTRA_DIST in Makefile.am * NEWS, README, TODO, configure, sample.conf: final changes for 0.25 release * ChangeLog, channel.c, configure.in, login.c, opennap.h, sample.channels, search.c: added "live" to the list of words to ignore in searches restored full ChangeLog updated version to 0.25 allow the channels file to contain blank lines 2000-04-17 drscholl * README, ban.c, sample.conf: fixed ban() not to check for permission from commands received from other servers so that syncing will work properly removed old entries from sample.conf * muzzle.c, napster.txt, sample.channels, search.c, server_login.c, unmuzzle.c: muzzle() should error if user is already muzzled unmuzzle() should error if user is not muzzled updated napster.txt to reflect the new use of 401 (part) added "f" to the list of words to ignore in searches avoid infinite loop in mark_links() by checking for a link already marked before recursing on it added sample.channels file 2000-04-15 drscholl * Makefile.am, Makefile.in, ban.c, channel.c, config.c, init.c, main.c, motd.c, opennap.h, part_channel.c, sample.conf, server_login.c, userdb.c: added `channels' config file to predefine persistent channels removed user_db_path, server_db_path and motd_path config variables. added config_dir variable to control where opennap should look for the users, servers, motd, bans and channels files * Makefile.in, login.c: fixed bug in bad password error message which caused a crash 2000-04-14 drscholl * Makefile.am: added usermode.c to compile list * ChangeLog: updated ChangeLog with recent entries * level.c: allow users to demote their user level again * level.c: fixed bug in new level() code where an elite could not set another elite to a lower level * search.c: added "downloads" to the list of words to ignore on searches 2000-04-13 drscholl * README, announce.c, ban.c, handler.c, login.c, opennap.h, util.c: added remote_notify_mods() command to allow a server to broadcast a message to remote mods server will no longer delink when a bad command is received. user and host ban messages are now sent to all mods on all servers all mods+ are notified when a user fails to log in as a privileged user * join.c, level.c, login.c: don't allow % in either nicknames or channel names for safety fixed bug in format for log() message in channel_level() when a user tries to set a channel to a level above their own fixed bug in level() where the notification about the level change was sent to the user who issued the change instead of the target user * config.c, login.c, main.c, opennap.h, userdb.c: removed Check_Expire global variable added nick expiration to dump_userdb() * ban.c, level.c, main.c, search.c: allow the setuserlevel command to work when the user is registered but not logged in set SO_REUSEADDR on the stats port 2000-04-12 drscholl * search.c: added additional debugging checks * remove_connection.c, whois.c: hash_free() was not called to free a local user's list of files * kick.c, napster.txt: clear_channel() needs to be careful about walking the list of users in a channel since the call to part_channel() could free the current list pointer * config.c, handler.c, main.c, opennap.h, sample.conf, util.c: added max_command_length config var to control the max allowed length of a client command * ban.c, login.c, muzzle.c, unmuzzle.c, whois.c: unban had a bug where it would tell you the ban was not found even if it was. muzzle and unmuzzle should optionally take a reason argument. whois should display Muzzled instead of Active for muzzled users * config.c, remove_connection.c, sample.conf: no need to null out the uopt->files member in remove_connection() changed default value of collect_interval to 300 added max_browse_result to sample.conf 2000-04-11 drscholl * change.c, login.c, search.c: the reason for a nuke is not required added 'home' to the list of words to ignore in searches * opennap.h, remove_file.c, serverlib.c, topic.c, upload_complete.c, userdb.c, usermode.c, whois.c, add_file.c, browse.c, change.c, download.c, free_user.c, level.c, login.c: moved the list of shared files into the USEROPT struct since it only needs to be present for locally connected users change_pass(), alter_pass() and nuke() should releay the command to other servers before checking if the account is locally registered, since the userdb may not be entirely replicated userdb_dump() sould unlink() User_Db_Path before calling rename() since it causes an error under win32 notify_mods() is called with new usermode TOPIC when a topic of a channel has been changed compacted whois() to use the same snprintf() call for level>=moderator * change.c, level.c, login.c, serverlib.c, usermode.c: change_pass() and change_email() need to check for bad user input added include files to prevent compiler warnings * login.c: register_user() did not call generate_pass() to generate the md5 password * change.c: alter password command was sending the md5-hashed password instead of the raw password * usermode.c: usermode.c needs stdio.h for snprintf() * handler.c, resume.c, search.c: removed extraneous log messages ignore the word "download" in searches 2000-04-10 drscholl * search.c: added "download" to the list of words to ignore when searching * search.c: added new words to ignore in the search table: scour, media, agent, on, stuff * usermode.c: adding missing PORT string in User_Modes initial mode should be set from current user mode in user_mode() * kick.c, usermode.c: fixed compilation warnings for usermode code * usermode.c: added new function handler user_mode() * Makefile.in, ban.c, change.c, download.c, handler.c, hotlist.c, join.c, kick.c, kill_user.c, level.c, login.c, muzzle.c, opennap.h, privmsg.c, remove_connection.c, server_connect.c, server_login.c, serverlib.c, unmuzzle.c: patch from colten edwards to allow ircd-like user levels to enable or disable many server messages to privileged users * ChangeLog, NEWS, sample.conf, sample.users: final updates for 0.24 release * README, add_file.c, search.c: ignore "2" in filenames since it is a frequent occurance * free_user.c: update the last seen time for registered nicks when a user logs off * login.c: server should send a KILL when it detects a remote user with an invalid nick * change.c, serverlib.c: change_email() did not prefix the server->server messgae with the nick of the user who issued the command nosuchchannel() and unparsable() now check for ISUSER() to avoid the need to check every time those functions need to be called * change.c: the server-server message for change_pass() did not contain the user who changed the password 2000-04-09 drscholl * handler.c, join.c, kick.c, opennap.h: added the clear channel (820) command 2000-04-08 drscholl * handler.c: handle_connection() should send the USER_SHARING message prior to execution of the callback so that the proper information is sent to users when the user joins a channel for the first time. * free_user.c, handler.c, init.c: Local_Files was not decremented in free_user() added sig handler to call md_cleanup() on SIGUSR1 * main.c, server_connect.c: fixed core in update_stats() on new log message for number of local files login timer was not set on server connections * README, handler.c, privmsg.c: added the config and reconfig commands to OperServ updated comment above the share/unshare termination detection to indicate that if a user does not issue any more commands after sharing/unsharing, the information will not get passed to the peer servers * add_file.c, handler.c, opennap.h, remove_file.c: add_file()/remove_file() now set a flag in the USER struct. handle_connection() then checks for the end of the share/unshare messags from the client by checking for a command other than share/unshare and passes the final results to the peer servers 2000-04-07 drscholl * add_file.c, main.c, opennap.h, remove_file.c, resume.c: server now keeps track of how many files are available from local users and displays this info in update_stats() removed prototypes for outdated functions from opennap.h * add_file.c, join.c, kick.c, login.c, main.c, muzzle.c, napster.txt, opennap.h, remove_file.c, serverlib.c, synch.c: created new util functions nosuchchannel() and unparsable() the optional reason in the muzzle command should be quoted if present the optional reason in the kick command should be quoted if present channel_limit() now only checks for privilege for local users so that the limits can be synced by servers when linking * README, userdb.c, util.c: updated installation instructions userdb_init() should only rewind() if the first line doesn't contain the version information log() no longer prefixes messages with `opennap: ' * Makefile.am, Makefile.in, buffer.c, handler.c, main.c, mkpass.c, mkpass.dsp, network.c, opennap.dsp, opennap.dsw, opennap.h, opennap.opt, opennap.plg, serverlib.c, snprintf.c, util.c: added mkpass project to win32 workspace created new macro N_ERRNO to be used in place of error when checking error conditions from socket related function calls. win32 uses h_errno so this should be used as a wrapper to make the code cleaner added new macro nlogerr() which is like logerr() but should be used when priting errors from socket related functions * TODO, login.c: major cleanup of login(). password should not be checked until after the check for a user already logged in to prevent password guessing * Makefile.in, kick.c, main.c, search.c: missing channel name in the notify_mods() call in kick() ignore "rock" and "new" in search strings * NEWS, README, config.c, configure, configure.in, main.c, opennap.h, sample.conf, search.c: updated version number to 0.24 added login timeout detection. default is to close client connections if they have no logged in within 60 seconds added "me", "to" and "rock" to the list of words to ignore in the search table since over 5000 entries were detected 2000-04-06 drscholl * change.c, opennap.h: allow nuke_user() to take an optional reason for the revocation * login.c: delay setting the user's level from the db until after the notify_mods() call so that the user is not notified twice of their change in status. * Makefile.am, Makefile.in, config.c, handler.c, join.c, kick.c, list_channels.c, login.c, main.c, napster.txt, opennap.h, part.c, privmsg.c, sample.conf, server_usage.c: added kick.c for the kick() function added channel limit (826) command to specify the max users allowed in a channel. added full channnel list (827) command to show all channels with min level and user limit made the stats command accessable to normal users fixed find_handler() search that could end up in an infinite loop in certain cases. * TODO, login.c, napster.txt: updated TODO file fix for coredump when a nonregistered user attempts to log in updated napster.txt with new protocol findings 2000-04-05 drscholl * browse.c, main.c: data.max was not initialized to 0 in browse() causing a problem with browsing users on the same server * login.c, main.c: reorganized the login() routine to allows privileged users to bypass the max_connections restriction should check for -1 instead of EOF in getopt() test * add_file.c, search.c: modification to use the soundex hash as the key for the File_Table. This should decrase the amount of memory required for searching at the expense of a little cpu, but should not affect the search results since it still uses the same token based scheme once the smallest bin has been found. 2000-04-04 drscholl * main.c: update_stats() now prints out the number of entries in the File_Table hash table to get an idea of its size * mkpass.c, search.c, serverlib.c: added copyright notice to mkpass.c and serverlib.c tokenize() should ignore the words "of", "you" and "mp3's" because of the high use of these words (>10,000 hits). 2000-04-03 drscholl * mkpass.c, serverlib.c: added new file mkpass.c to generate a md5 password added new file serverlib.c for functions that reference opennap globals * Makefile.am, Makefile.in, change.c, level.c, login.c, main.c, opennap.h, userdb.c, util.c: added support for md5 passwords for user db 2000-03-31 drscholl * ban.c: issue a kill if we receive a login command from a remote server for a locally banned user * ban.c: check_ban() should only set con->destroy for CLASS_UNKNOWN connections * server_connect.c: server_login() passsed the wrong field to the is_linked() function * README: updated README to discuss the new OperServ feature * login.c, privmsg.c: added pseudo user OperServ to allow privilegded users without builtin client support for the opennap specific commands to be able execute them by using /msg opserver ... * userdb.c: removed check for .nuked in dump_userdb() * change.c, handler.c, login.c: removed unnuke() command. nuking the account removes it permanently. fixed encapsulated() to handle bad input data * change.c, handler.c, opennap.h, userdb.c: added support for nuking and restoring accounts * ban.c, init.c, main.c, opennap.h: added load/save bans feature from colten edwards. * opennap.h, server_connect.c, server_login.c: added is_linked() function to check to see if a server is already linked in order to avoid server loops * Makefile.in, ban.c, handler.c, login.c, main.c, opennap.h: removed check_accept() function. the maximum connections is now enforced by login() to avoid the situation where servers can't link because the number of client connections has exceeded the maximum accept_connection() now calls check_ban() directly 2000-03-30 drscholl * handler.c, muzzle.c, network.c, privmsg.c, public.c, search.c, server_login.c, synch.c: the long line truncation in public/emote needs to calculate the length based upon the start of the data actually sent to the client. server->server messages were being truncated in the _next_ packet. 2000-03-28 drscholl * ChangeLog, NEWS, README, opennap.h: win32 needs _POSIX_PATH_MAX defined to compile update ChangeLog, NEWS and README for 0.23 release * public.c: crop publics and emotes that are longer than 128 chars rather than rejecting them * public.c, spyserv.c: don't allow public or emote commands longer than 128 chars to prevent the DOS attack against the windows napster client. * main.c: listen fd needs to be set to nonblocking so the loop over accept() doesn't block the server. * ban.c, login.c, main.c: modified accept_connection() to loop until accept() returns an error cli->destroy should be set in check_accept when max connections has been reached. 2000-03-27 drscholl * TODO, change.c, join.c, util.c: only call notify_mods() if a users data port is set to a different value than what is currently set to join should send a 408 back to the user than joined, and not a 406. split_line() now breaks on space, tab, cr or lf to separate words * ban.c, change.c, config.c, init.c, level.c, login.c, main.c, opennap.h, userdb.c, whois.c: changed user db into an memory-based hash table to improve performance. the user db is dumped to disk every `user_db_interval' seconds (default: 1800) * configure, configure.in, main.c, remove_connection.c: remove support for poll() since it doesnt work well 2000-03-26 drscholl * ban.c, main.c: fixed but in main loop with select()ing fds * util.c: more fixes * main.c, util.c: modified add_client() to find the first empty slot in the Clients[] array * main.c: should 0 out the old pointer when shifting down entries to fill holes * main.c, util.c: moved complete_connect() call to final loop to avoid altering Num_Clients in the read loop * main.c, util.c: poll() still returns EINVAL under linux so the main loop now always shifts down the CONNECTION pointeres to fill all holes. 2000-03-25 drscholl * ban.c, login.c, main.c, opennap.h: changed ban handling to use a LIST instead of an array * buffer.c, debug.h, join.c, util.c: added VALID_STR() debug macro for testing memory allocated by STRDUP() validate_user() and validate_channel() should call list_validate() instead of just checking the first entry in the list * opennap.dsp: committed .dsp file for win32 build * join.c: fixed error message for channel_level() to be more verbose to the client * level.c, login.c: fixed messages about changing a user's level to be consistent * kill_user.c, server_login.c: corrected log messages * login.c: reasons for a kill should be quoted in login() * handler.c, level.c, login.c, search.c, server_login.c, synch.c, topic.c: fixed sync_server() to send the locally connected server list first fixed topic() to return the current topic if none is specified fixed login() to notify_mods() when setting a user's level 2000-03-24 drscholl * opennap.h, remove_connection.c, server_login.c: need to recursively remove server link info behind servers that split * server_login.c, synch.c: fixed broken sync message for server links * kill_user.c, level.c: fixed bug in kill_user() where the size of the av[] was not correct in the call to split_line() * Makefile.am, Makefile.in, README, configure, configure.in, handler.c, network.c, opennap.h, opennap.opt, opennap.plg, server_links.c, server_login.c: fixed to compile under Windows NT 4.0 * remove_connection.c, server_links.c, server_login.c, synch.c, README, handler.c, main.c, napster.txt, opennap.h: added support for passing of server link info so that all servers know about each other * TODO, kill_user.c: the reason for a kill should be quoted if it exists * handler.c, level.c, main.c: bail out without doing anything if the user level is set to the level that was requested * main.c: need to reset the CLient id when shifting down the entries to fill gaps * main.c: modified main() loop to reduce the size of the Clients array if there are more than 10 holes in it. this is to try and prevent EINVAL under linux, which does a sanity check to make sure the nfds arg is smaller than the current number of open fds * main.c: added debugging to find error with poll() call 2000-03-23 drscholl * change.c, login.c, search.c: fixed bad log message in login() with missing arg for %s %s should be %d in log message in alter_port() 2000-03-22 drscholl * search.c: removed log message from cancel_search() * main.c: added extensive debugging checking if poll() fails with EINVAL * level.c, main.c, whois.c: allow normal user's to change their own level to leech don't call FD_ISSET on a fd with value -1 the windows client can't part "" in the whois response, so ensure it always contains at least one space * handler.c, login.c, part.c, remove_connection.c, search.c: fixed memory leak in user_ip() which occurred when nick collisions happen removed debug log message from handle_connection() when unprocessed bytes remain rewrote cancel_search() to send final ACKs when a server quits before sending all acks * join.c: fixed botched send_cmd() in channel_level() * join.c, login.c, main.c, search.c: added more checks for out of memory conditions * join.c: allow channel_level() to be called with only the channel name to report the current level * login.c: display the ip address when a banned user attempts to log in * handler.c: use a binary search to look up the handler for each received message 2000-03-21 drscholl * napster.txt: updated protocol information * login.c, main.c: fixed memory leak in login() when the login fails exit main loop on poll() error * change.c, handler.c, join.c, napster.txt, opennap.h, part.c: added 'set user password' (753) admin command added 'set user speed' (625) admin command * main.c: fixed accept_connection() to check for out of memory errors * upload_complete.c: upload_ok() should call print_args() when it detects a malformed message * search.c: added checking for out of memory errors in search_internal() 2000-03-20 drscholl * main.c: bandwidth stats need to be printed with %f not %d * main.c: bandwidth usage stats were not in kbytes/sec. Last_Click was not updated. * join.c: invalid_channel returned 1 for count>0 * buffer.c, handler.c, main.c, opennap.h: added total input/output bandwidth usage statistics. * join.c, login.c: added a check for valid channel name 2000-03-19 drscholl * TODO, join.c: check for missing channel name in join() 2000-03-18 drscholl * join.c, synch.c: synch_server() should send the channel level it is other than LEVEL_USER. * README, handler.c, join.c, opennap.h: added new command 10201 to set the minimum user level required to enter a channel. * ChangeLog, NEWS, configure: post release commit for 0.22 2000-03-17 drscholl * kill_user.c, unmuzzle.c: allow any user to kill/unmuzzle a user that is below their level * napster.txt, server_links.c: server_links() should allow the command to be issued by a remote user. updated the text for message 300 in napster.txt * download.c, login.c, opennap.h, opennap.spec, util.c: added print_args() utility function for use in dumping the input command for error messages * README, announce.c, configure.in, opennap.h: wallop() was using the wrong tag for the response to the client * handler.c: fixed error in encapsulated() where it was using con->sendbuf instead of con->recvbuf to get the packet to relay * README, free_user.c, login.c, opennap.h: removed log message from free_user() * NEWS, README, ban.c, init.c, login.c, napster.txt, network.c, part.c, search.c, textdb.c, AUTHORS: incorporated OS/2 port from Brian Smit . fixes to compile cleanly under Solaris 2.7 with egcs 1.1.2 updated REAMDE with list of supported operating systems. * handler.c, search.c: fixed memory leak in remote search functions if the server that we received the search request from splits before we send the ack for the search * README, announce.c, handler.c, opennap.h, part_channel.c, public.c, util.c: fixed bug in encapsulated() where the complete packet was not correctly relayed when the recipient of the message is not local. added format_message() utility function * buffer.c: minor modifications to buffer_decompress() to avoid unecessary operations * browse.c, buffer.c, client_quit.c, handler.c, upload_complete.c: removed additional extraneous logging messages rewrote the buffer_compress() routine in hopes of solving the server link problem. * download.c, handler.c, main.c, search.c: removed many log messages that are no longer really necessary. dispatch_command() will now dump the contents of the input buffer when it detects a command that is unknown, and will automatically close the connection to another server upon this error 2000-03-16 drscholl * add_file.c, announce.c, ban.c, buffer.c, change.c, download.c, free_user.c, handler.c, join.c, kill_user.c, level.c, login.c, main.c, muzzle.c, opennap.h, part.c, public.c, remove_connection.c, remove_file.c, search.c, server_connect.c, server_links.c, server_login.c, server_usage.c, topic.c, unmuzzle.c, util.c: made the server list a real LIST instead of an array. removed global Num_Servers. pass_message_args() will now return without doing anything if there are no connected servers so that each handler routine doesn't have to check for Servers!=0. 2000-03-15 drscholl * level.c: fixed broken log message causing a segfault * buffer.c, level.c: level() should register the nick if not present in the local db and the user level is moderator or higher. * join.c: the 406 join message should only be sent to local users * join.c, privmsg.c: fixed sequence of commands generated by the join commmand. removed commented out code from privmsg.c * join.c: fixed coredump on log message when a user has reached max channel membership 2000-03-14 drscholl * public.c: fixed bug with relaying the emote command to remote servers * handler.c, login.c, opennap.h: added register_user() command (10200) to allow admins to force registration of user accounts * login.c: user_ip() should use strtoul() to convert the string ip into an integer. * join.c, login.c, server_connect.c, server_login.c: modified join() to alloc the memory required before sending any messages to clients so that if memory runs out we can recover the state. server_connect() should allow duplicate connects to the same host on different ports. user_ip() should case the result of strtol() to unsigned int. server_login() should notify local admins when another server attempts to join 2000-03-12 drscholl * login.c: register_nick() should only fail if the user is already logged in. 2000-03-11 drscholl * search.c: need to keep a local flag in the DSEARCH struct for use with checking where to send the final ACK in remote_search_end. if the local user logs off then search->con will be invalid so we can't use ISUSER(search->con) to decide. 2000-03-10 drscholl * Makefile.am, Makefile.in, configure, handler.c, opennap.spec, sample.servers, sample.users, textdb.c: handle_connection() should loop around read() when getting a packet header since some clients send it in two pieces added sample users and servers files, and a rpm spec file for building a binary package for Red Hat users. * handler.c: fixed partial packet header reading again. * handler.c: fix to read the packet header in multiple pieces * handler.c: check to see if 4 bytes of the header have been read after the initial read * handler.c: write a nul (\0) char at the end of the data in handle_connection() when an error is detected so that the log message is readable * handler.c: tag and len should be unsigned short integers * add_file.c: fix to abort nicely if the user hash table can't be allocated * buffer.c, handler.c, main.c, opennap.h, remove_connection.c: rewrote input handler to avoid allocating a new buffer every time data is read. instead, a single buffer is reused and extended if required. all input is processed as it is read now instead of breaking the reading and processing into two steps. * list.c, list.h: added macro LIST_NEW() as a wrapper around list_new() so that it gets inlined when DEBUG is turned on. 2000-03-09 drscholl * hotlist.c: fixed hotlist bug. the hotlist entry was not being removed from the user's personal list in the CONNECTION struct * hotlist.c, opennap.h: more debugging to find the hotlist problem. * README, hotlist.c, list.c, list.h, sample.conf, util.c: added list_validate() function to be used in tracking down the hotlist bug * hotlist.c, opennap.h, remove_connection.c, util.c: simplified hotlist removal code by calling list_delete() instead of iterating through the list. need to set con->uopt.hotlist to 0 after call list_free() to avoid ASSERTing in cancel_search() * list.c: called FREE on the wrong pointer in list_delete() * util.c: seed the random number context with as many bytes as are read, even if less than requested. * add_file.c, hotlist.c: forgot to set hotlist->magic when creating a new entry forgot to set list->data when adding a file to the db * add_file.c, hotlist.c, join.c, list.c, list.h, remove_connection.c, search.c, textdb.c, userdb.c: removed all use of list_new() and list_append() to track down the memory leak. the debug info should now show where the leaked memory is being allocated. * napster.txt, opennap.h, remove_connection.c, search.c, util.c: [napster.txt] changed text for 404 message to describe it as a generic error message [util.c] split_line should eat extra whitespace between fields when a local user quits, any pending searches should be marked as invalid so that when the results come back the ->con pointer in the DSEARCH structure is not used. rather than for a specific value. * search.c: should have compiled before committing the last fix. * search.c: duplicate tokens should not be added to the list in tokenize(). this makes the search function return the same file multiple times. * change.c, debug.c, join.c, list.c, login.c, main.c, part.c: reformatted some code with indent fixed memory leak in reginfo() where userdb_free() was not called. * add_file.c, debug.c: commented out memory dump from debug_cleanup() reformatted the code in add_file.c 2000-03-08 drscholl * login.c: db->lastSeen was set from get_level() when it should be atol() * login.c: db->nick was not set when creating a new db entry in reginfo() * download.c, login.c, resume.c, search.c, synch.c, upload_complete.c: changed most instances of %lu to %u since we only use 32-bit integers. * opennap.h, search.c, util.c, handler.c, main.c: only use /dev/random to seed the random context. on servers the system random pool gets eaten up too fast. * debug.c, search.c, server_login.c, userdb.c: fixed to handle generate_search_id() returning NULL. 2000-03-07 drscholl * util.c: add_client did not set the .id member when growing the array. * login.c: user->pass was not free'd if there was an error during login * debug.c, join.c: no need to test for block->file being NULL when we are only referencing a static memory block. muzzled users should not be allowed to join chat channels * debug.c: debug code doesn't need to strdup() the file passed in, it can simply reference it since it is static memory. got rid of the .prev pointer in the BLOCK struct. we can walk the list of block with a BLOCK** pointer instead. * TODO, download.c, upload_complete.c: fixed upload_ok() to use send_user() instead of send_cmd() since the downloader could be on a remote server. removed PostgreSQL from the TODO list since we no longer use a SQL db. * announce.c, kill_user.c, main.c, opennap.h, remove_connection.c, search.c, server_links.c, upload_complete.c, util.c: Modified the main loop to stop shifiting down the CONNECTION array to fill the holes. add_client() will insert new connections into the holes, or grow the array if its all full. Added new global Max_Clients which should be used in any contruct that needs to loop over all local connections, avoiding the entries that are set to NULL (holes). * buffer.c, main.c: use a new local variable numClients for the loop test constructs since Num_Clients gets changed by the accept_connection(). this may be the cause of all those immediate disconnects. * search.c: use a faster algorithm for walking the list when deleting invalid entries from the files list * search.c: tokenize() should ignore common words because they are not useful in searching fdb_collect_garbage() will now print messages about bins with more than 10,000 entries so that they can be considered for addition to the ignore list * AUTHORS, configure.in, init.c, main.c, network.c, opennap.h, timer.c: solaris port (jones@users.sourceforge.net) * add_file.c, browse.c, client_quit.c, download.c, handler.c, opennap.h, remove_file.c, server_login.c, synch.c, upload_complete.c, util.c, whois.c: added the ability to download files and browse users on other servers server stats for users/files/size is again global for all linked servers 2000-03-06 drscholl * add_file.c, announce.c, ban.c, browse.c, change.c, client_quit.c, download.c, handler.c, hash.c, join.c, kill_user.c, level.c, login.c, main.c, muzzle.c, opennap.h, part.c, ping.c, privmsg.c, public.c, remove_connection.c, remove_file.c, search.c, server_connect.c, server_links.c, server_login.c, server_usage.c, synch.c, topic.c, unmuzzle.c, upload_complete.c, userdb.c, util.c, whois.c: server message are no longer automatically forwarded by handle_connection(). each handler is now responsible for forwarding the message if necessary. implemented the ability to search on remote servers so that the entire file database isn't replicated on every server. several of the server query functions now take an optional server argument to get the status of a remote server rather than the one the client is connected to. * sample.conf, config.c, init.c, main.c, network.c, opennap.h: added max_data_size and max_rss_size configuration variables to adjust sytem limits on memory usage per process * change.c, server_connect.c: fixes to compile cleanly with debugging turned off * opennap.h, textdb.c, util.c: added `#define USE_CRLF 1' for use on win32 to write \r\n at the end of each line in the database modified next_arg() to use space, \r, \n and \t as word separators, and to set the argument to 0 when hitting the \0 in the source string to avoid returning an extra empty string * Makefile.in, add_file.c, ban.c, buffer.c, configure, configure.in, hotlist.c, login.c, main.c, opennap.h, public.c, server_connect.c, server_login.c, synch.c, textdb.c, timer.c, userdb.c, util.c: created logerr() macro as a wrapper for libc errors used OUTOFMEMORY() macro when memory errors occur don't use next_arg() in public() because it will strip leading space from the user's message 2000-03-04 drscholl * Makefile.am, README, config.c, configure.in, main.c, opennap.h, sample.conf, textdb.c, textdb.h, userdb.c: removed all variables pertaining to mysql updated the installation instructions to reference the new flat text file user and server databases * Makefile.am, Makefile.in, change.c, compress.c, config.c, configure, configure.in, create_db.sql, db.c, init.c, level.c, login.c, main.c, opennap.h, sample.conf, server_connect.c, server_login.c, textdb.c, textdb.h, userdb.c, whois.c: removed all references to MySQL from the code base. added flat file text database for use with user and server lists. 2000-03-03 drscholl * search.c: reenable code to reject search matches for a user's own files search term for equality is "EQUAL TO", not "EQUALS" according to the protocol specification. added error reporting to the client if the comparison operation in a search string is unknown. * getopt.c, main.c: added copyright notice to getopt.c fixed broken usage() output * ChangeLog, Makefile.in, NEWS, README: ChangeLog is now generated by rcs2log. Moved contents of the NEWS file into README. NEWS is for user visible changes in accordance with the GNU standards. * Makefile.am, opennap.dsp, opennap.opt, opennap.plg: integrated updated visual c++ files * init.c, main.c, network.c, opennap.h, getopt.c: fixes to compile under win2k (Damian Hodgkiss) * napster.txt, whois.c: fixed bug in whois response. the total downloads comes before total uploads in the mod+ version added additional documentation on the 613 and 626 commands. 2000-03-02 drscholl * join.c, timer.c: needed to include stdlib.h to compile cleanly without debugging on * ChangeLog, add_file.c, config.c, login.c, main.c, opennap.h, remove_connection.c, search.c: removed old code and and -DLESSMEMORY flag since that is now the default modified core search function to using str*() functions instead of calling tokenize() on the filename fixed bug in login() where the number of fields in the client login (6) was not checked, which lead to a coredump if the last field was not present. * hash.c, hash.h, list.c, opennap.h: catch out of memory error conditions in list and hash functions * hotlist.c, list.c: reconciled differences in hotlist code * NEWS, hotlist.c, remove_connection.c: fixed memory leak in remove_connection() where it did not free empty hotlist entries * login.c: dont allow nul usernames * main.c, napster.txt, public.c: fixed emote command to check for required quotes around the text portion of the message. 2000-03-01 drscholl * getopt.c: added getopt() replacement for Win32 which doesn't have this function * join.c, list_channels.c, list_users.c, part.c, part_channel.c, public.c, synch.c, topic.c, util.c: fixed compilation errors with new list code * Makefile.am, Makefile.in, add_file.c, buffer.c, change.c, client_quit.c, download.c, free_user.c, handler.c, hotlist.c, join.c, kill_user.c, level.c, list.c, list.h, login.c, main.c, muzzle.c, opennap.h, part_channel.c, ping.c, privmsg.c, public.c, remove_connection.c, search.c, server_connect.c, server_links.c, server_login.c, server_usage.c, topic.c, unmuzzle.c, upload_complete.c, util.c, whois.c: added new files list.c and list.h to contain the generic list routines. switch to using LIST instead of arrays for many things which don't need to be directly indexed. optimized USER and CONNECTION structs to require as little memory as possible. * main.c, opennap.h: optimized fields in the DATUM struct to be as small as possible * TODO, add_file.c, hotlist.c, opennap.h, search.c: added -DLESSMEMORY to force the server to regenerate the token list when comparing rather than storing it in the database * main.c, timer.c: changed next_timer() to return the time offset in seconds of when the next timer is scheduled * network.c: need to include sys/time.h before sys/resouce.h on bsdi * main.c, opennap.h, timer.c: added next_timer() function to give the time at which the next pending event is scheduled. the main even loop in the server should never block for longer than when a pending even is scheduled * ChangeLog, Makefile.am, Makefile.in, ban.c, init.c, join.c, main.c, opennap.h, timer.c: added timer functions for scheduling periodic events (colten edwards) added global variable Current_Time which is set once per iteration of the main loop. functions which need the current time should use this variable rather than calling time() * buffer.c, hotlist.c: removed error message that were too verbose from send_queued_data() and add_hotlist() * init.c: handle SIGPIPE to avoid terminating the process when writing to a connection that got shut down * add_file.c, search.c: added additional debugging output to the add_file() and associated routines * main.c: moved the check for connections to the stats port to before the new connections port since the latter modifies Num_Clients and it was throwing of the check for connections to the stats port * handler.c, init.c: fixes to compile cleanly with debugging turned off * browse.c, search.c: allow max_browse_result to be 0 to indicate unlimited added additional debugging to free_flist() 2000-02-29 drscholl * Makefile.in, handler.c, init.c, main.c, opennap.h, Makefile.am: main.c was getting too big. broke out initialization code into init.c and connection handling code into handler.c * ChangeLog, main.c, network.c: added support for the opennap server to listen on port 8889 to report stats about the server to interested parties * NEWS, add_file.c, ban.c, configure, configure.in, kill_user.c, opennap.h, privmsg.c, public.c, topic.c, util.c: added various checks for memory exhaustion to recover "gracefully" * ChangeLog, FAQ, network.c, search.c, util.c: check for out of memory errors in tokenize() 2000-02-28 drscholl * add_file.c, ban.c, config.c, configure, configure.in, main.c, network.c, opennap.h, sample.conf: allow max_shared to be 0 to allow unlimited sharing added new config vars 'uid' and 'gid' to specify the uid/gid to switch to if running as root (uid 0) added new config var 'connection_hard_limit' to specify the maxium number of file descriptors the process can use added configure option --with-fd-setsize to specify the maxium number of filedescriptor that can be used on select() based systems * config.c, main.c, opennap.h: added new config variable `collect_interval' to control the interval between garbage collection * buffer.c, change.c, level.c, login.c, napster.txt, opennap.h, privmsg.c, util.c: fixes to compile cleanly with --disable-debug added safe_realloc() function for detection of memory exhaustion 2000-02-27 drscholl * hotlist.c: print tag value out when the user attempts to add another user already in their hotlist * add_file.c, free_user.c, hotlist.c, resume.c, util.c: log() messages in add_file() and share_file() were missing the nick, causing a segfault 2000-02-26 drscholl * opennap.h, resume.c: rearranged members of the DATUM struct. added additional debug statement to resume() * add_file.c, opennap.h, search.c, synch.c: added a new content type CT_MP3 to serve as a default. CT_AUDIO doesn't necessarily mean audio/mp3 * ChangeLog, FAQ, add_file.c, main.c, metaserver.c, opennap.h, search.c, synch.c: restored sharing of multimedia files. * ChangeLog: updated ChangeLog with recent changes * buffer.c, main.c: modified buffer_compress() to allocate one 16k output buffer and compresss as much data as will fit in it. this is necessary since queue_data() can now produce multiple 16k buffer chunks for server connections. 2000-02-25 drscholl * main.c: changed listen() queue backlog to a value of 50 * README, main.c, opennap.h, server_usage.c: added number of global users, server start time, and server uptime to the 10115 server stats reply * kill_user.c: should set user->con->destroy=1 when killing a local user, not con->destroy * main.c, search.c: if multiple FILENAME CONTAINS clauses are specified, treat them as an implicit AND operation * Makefile.in, main.c, opennap.h, search.c: added a garbage collection routine to run every 60 seconds to free up memory associated with invalid entries * ChangeLog, Makefile.am, README, main.c, opennap.h, server_links.c: added new command 10112 to show the server links (colten edwards) * AUTHORS, ChangeLog, Makefile.am, Makefile.in, debug.c, debug.h, main.c, opennap.h, server_usage.c: added a new command 10115 for getting some useful information about the server (colten edwards) * upload_complete.c: upload_ok() was looking in the downloader's hash table for the file info, should be the uploader's table * main.c: forgot to uncomment the free_hash() on the File_Table * search.c: nick was printed using %d instead of %s when returing search results * search.c: fdb_search() should return if it can't find a search token in the hash table since we can be sure there are no matches * search.c: fixed bug in fdb_search() * ChangeLog, whois.c: minor whois change * browse.c, buffer.c, change.c, config.c, configure, configure.in, db.c, debug.c, debug.h, download.c, free_user.c, hash.c, login.c, main.c, opennap.h, remove_file.c, resume.c, search.c, server_connect.c, server_login.c, synch.c, upload_complete.c, util.c, add_file.c: wrote new database for storing the library. we now use a hash table based on word tokens in the filename, with a list of files for each word modified malloc debugger to use a hash table to store the allocation information because a single list was too slow for large amounts of data modified buffer_queue() to allocate chunks of memory and allocate a new buffer in the list if there is not enough room to append, instead of using realloc. this should improve performace began adding extra checks for when we run out of memory so that we can recover gracefully. 2000-02-24 drscholl * main.c: we should force a call to send_queued_data() in main() if the connection is about to be shut down. in this case we write as much as we can before we close the socket. * main.c: no longer necessary to check for existence of the client pointer because it won't be removed except by the main() routine itself. * buffer.c, kill_user.c, login.c, main.c, opennap.h, remove_connection.c, server_connect.c: remove_connection() should now only be called from the main() routine. other functions that wish the client connection to be shut down should set the .destroy memory to a nonzero value. * whois.c, change.c: username was printed out using %d instead of %s in alter_port() the whois response now inclues the server the user is connected to if the user level of the client issuing the request is admin+ * buffer.c: send_queued_data() should call buffer_free() on the output buffer before calling remove_connection() * buffer.c, main.c: send_queued_data() should call remove_connection() instead of setting con->destroy=1 since it is safe to free the CONNECTION pointer at that point. 2000-02-23 drscholl * download.c: more logging in download() * buffer.c, client_quit.c, download.c, free_user.c, remove_file.c: need to call fudge_path() on filename before SQL query in remove_file() fixed download() to send the correct 203 command when the uploader is firewalled. added log messages for sending/receving client quit messages * download.c: queue_limit() should check for mysql_num_rows() > 0 before calling mysql_fetch_row() * client_quit.c, download.c, kill_user.c, napster.txt: fixed client_quit() to avoid calling hash_remove() when it detects a QUIT for a local user * ChangeLog, main.c: send_queued_data() should be called if there is uncompressed data waiting to be sent to the server * client_quit.c, download.c, kill_user.c, login.c, main.c, remove_file.c, upload_complete.c: reformatted log() messages for the upload/download functions 2000-02-22 drscholl * login.c, main.c: alter_port() was not listed in the handler callback table * download.c, kill_user.c: download() should use validate_user() instead of just VALID() use next_arg() in kill_user() instead of plain strchr() * buffer.c, change.c: fixed buffer_uncompress() to set .datamax when calling realloc(). * ChangeLog, buffer.c, opennap.h: modified buffer_queue() to allocate memory in 1k chunks to avoid calling realloc() too often modified buffer_compress() to allocate memory in 2k chunks to avoid calling realloc() too often * ChangeLog, network.c, opennap.h, server_login.c: set SO_SNDBUF and SO_RCVBUF to 16k for server-server tcp connections * ChangeLog, change.c, opennap.h: added support for 613 command for admin to alter the data port the client is listening on (only works with the win32 clients) * ChangeLog, browse.c, buffer.c, config.c, main.c, napster.txt, opennap.h, resume.c, search.c: calls to write() should check for EWOULDBLOCK to avoid closing the connection unnecessarily added max_browse_result config variable to control the maxium number of entries returned on a /browse command (default 1500) allow max_search_result to be 0 to allow for arbitrary size searches * public.c: fixed bug where the first char of a public message gets chopped off * db.c, login.c, public.c, resume.c: reduced max filename size to 150 to try to avoid mysqld crashes. fixed bug in resume() where the md5 attribute was not quoted in the SQL query. change order in login() to wait until after the login/email ack has been sent before sending the notification of the user level being changed to avoid breaking the win32 client. 2000-02-19 drscholl * download.c: functions that call transfer_wrapper() need to check the return value * ChangeLog, add_file.c, config.c, configure, configure.in, login.c, main.c, metaserver.c, network.c, opennap.h, search.c: added fixes for clean compile under Solaris 2.6 handle_connection() now prints the tag and how many bytes it is waiting for when it detects that it needs to wait for the whole data packet to arrive 2000-02-18 drscholl * README, main.c, opennap.h, privmsg.c, whois.c: mod+ users are now notified when someone does a /whois on them * db.c, debug.c, network.c, remove_connection.c: debug_malloc() should exit gracefully if memory runs out adjust the size of the filename field in the library SQL table to be 237 chars. mysql 3.22.23 seems to crash if the fields is any longer. * README, db.c: optimized the library SQL table to use as small as possible size integers * remove_file.c: added more ASSERT() tests for Num_Files<0 * free_user.c, remove_file.c, sample.conf: added debugging code to try and detect when Num_Files < 0 * ChangeLog, Makefile.in, aclocal.m4, configure, configure.in: added AM_MAINTAINER_MODE macro to configure.in * search.c: fixed the search() function for the linespeed,bitrate&frequency attributes where an `&&' was not placed before the test in the SQL query string. 2000-02-17 drscholl * ChangeLog, NEWS, README, level.c, napster.txt: modified level() to update the db for registered accounts when a user's level is changed, so that it is persistent across logins * login.c: fixed bug in register_nick() where there was no "return;" when the MySQL query failed. * download.c, napster.txt: fixed broken queue limit server message (620) which did not include the file size * configure, configure.in, opennap.h: added --disable-random option to configure to turn off use of /dev/random on machines which have it 2000-02-16 drscholl * config.c, main.c, opennap.h: added listen_addr config variable to specify which interface to listen on * buffer.c, download.c, util.c: added better handling for bad input in the download functions validate_user() should check for at least a valid pointer on the .con member if its non-null * buffer.c: took extraneous assert() out of buffer_consume() to clean up error messages. * download.c: fixed compilation error in queue_limit() * download.c, main.c, napster.txt, opennap.h, server_login.c: added support for the user queue limit command (619/620) added additional debugging in server_login_ack() 2000-02-15 drscholl * login.c: added more debugging check for a duplicat login message sent from clients * login.c: added additional debugging output to login() and register_nick() * main.c: modified update_stats() to print the current system time * opennap.h, whois.c, add_file.c, buffer.c, change.c, hash.c, main.c: win32 port for 0.12 2000-02-14 drscholl * AUTHORS, ChangeLog, Makefile.am, Makefile.in, NEWS, announce.c, browse.c, buffer.c, change.c, config.c, db.c, download.c, free_user.c, join.c, login.c, main.c, md5.c, motd.c, network.c, opennap.dsp, opennap.dsw, opennap.h, part.c, part_channel.c, privmsg.c, public.c, remove_connection.c, remove_file.c, resume.c, search.c, server_connect.c, server_login.c, snprintf.c, synch.c, topic.c, upload_complete.c, util.c, whois.c: win32 port from "Damian Hodgkiss" default client queue length set to 100kbytes 2000-02-13 drscholl * opennap.h, public.c, util.c: fixed broken emote() function to avoid segfaults 2000-02-12 drscholl * login.c, main.c, motd.c, napster.txt, opennap.h, public.c: added support for client request for motd (621) * main.c, napster.txt, opennap.h, public.c: added support for the emote (824) command 2000-02-11 drscholl * main.c, network.c, opennap.h: try_connect() needs to bind_interface() before calling connect() * network.c: oops, busted lookup_ip() * main.c, network.c: fixed broken log() format in handle_connection() when printing out the message received from a client is unknown * Makefile.am, Makefile.in, main.c: removed Id: from Makefile.am since it got passed to Makefile.in and was screwing things up * server_login.c: server_login() should send errors using message 0, not 404 * login.c: added check for a nick with nonprintable ascii chars 2000-02-10 drscholl * Makefile.in, add_file.c, download.c: fixes for download_end() and upload_end() to prevent subtracting from the counts if the count is 0 2000-02-08 drscholl * ChangeLog, Makefile.am, Makefile.in, change.c, main.c, opennap.h, spynap.c: removed spynap from the distribution added support for the change email (702) command * TODO, change.c, main.c, napster.txt, opennap.h: added support for the change password (701) command * kill_user.c, login.c, opennap.h, whois.c: added support for the whowas (605) server response kill_user() did not skip the colon (:) prefix on the server name * login.c: register_nick() had compilation warnings about unused variables `pkt' and `len' * login.c: removed spurious colon (:) from the SQL query in reginfo() the colon (:) before the server name was not skipped in reginfo() * util.c: pass_message() should not assert on validate_connection() since it can be NULL when generating a new message. * free_user.c, login.c, opennap.h, synch.c, util.c: need to store the user password in order to do user registration on multiple servers 2000-02-07 drscholl * Makefile.in, configure, configure.in, network.c: freebsd does not have socklen_t, so add a check for it in configure.in 2000-02-05 drscholl * ChangeLog, NEWS, README, TODO, config.c, create_db.sql, login.c, main.c, opennap.h: added support for account registration 2000-02-04 drscholl * Makefile.in, main.c: change_speed() was not in the lookup table in main.c * Makefile.in, opennap.h, server_connect.c: fix to prevent server_connect() from tyring to link the same server twice * Makefile.in, add_file.c, change.c, configure, configure.in, free_user.c, main.c, napster.txt, opennap.h, remove_file.c, search.c, synch.c, util.c: removed minidb support. cleaned up search() routine. * Makefile.in, add_file.c, change.c, configure, configure.in, free_user.c, main.c, napster.txt, opennap.h, remove_file.c, search.c, synch.c, util.c: added support for a mini-db instead of MySQL for storing the library. * main.c, synch.c: fix to avoid looping endlessly when POLLHUP is set for a client connection. * main.c, search.c, synch.c, ChangeLog, Makefile.in: search() should return a 404 error if the search failed modified synch_server() to first sync the users and channels, then do a bulk dump of the library table in hopes of improving performance. 2000-02-03 drscholl * ChangeLog, Makefile.in, NEWS, add_file.c, configure, configure.in, main.c, metaserver.c, motd.c: added support for poll() on systems that support it fixed bug in share_file() where the escaped path was not used in the sql query to insert the row fixed bug in share_file() where the information on the file size was not incorporated into the global stats * Makefile.in, configure, configure.in, main.c, metaserver.c: added support for using poll() on systems that support it * add_file.c: share_file() forgot to quote the filename in the sql query fixed compute_soundex() to avoid generates hases over 4 chars long * ban.c, search.c: fixed bug in search() when specifying the TYPE field banlist() should return an empty ban request packet to indicate the end of the list. 2000-02-02 drscholl * ChangeLog, Makefile.am, Makefile.in, change.c, metaserver.c: change_speed() needs to update the library table to reflect a speed change * ChangeLog, Makefile.in, README, TODO, ban.c, buffer.c, debug.c, debug.h, free_user.c, hash.c, hotlist.c, kill_user.c, login.c, napster.txt, remove_connection.c, remove_file.c, resume.c, server_connect.c, synch.c, topic.c, util.c, whois.c: fixes to compile cleanly with debugging turned off (not recommended though) * Makefile.in, aclocal.m4, configure, configure.in, md5.h, server_login.c, util.c: finished integration of the md5 routines from GNU md5sum (textutils) * ChangeLog, Makefile.am, NEWS, global.h, md5.c, md5.h, md5c.c: removed md5.h, global.h and md5c.c since they don't work on Alpha, switch to using version from the md5sum program in GNU textutils * Makefile.in, aclocal.m4, add_file.c, buffer.c, compress.c, configure, debug.c, debug.h, hash.c, hash.h, main.c, metaserver.c, network.c, opennap.h, server_connect.c, server_login.c, util.c: fixes to compile under RedHat Linux 6.0 (Alpha) * buffer.c, login.c, main.c, opennap.h: if a client connects from localhost, the external ip address should be used so that remote users can connect to their data port 2000-02-01 drscholl * synch.c: fixed synch_user() so that it will not sync users that come from behind the server we are syncing with * public.c: fixed bug in public() where a middle server would rebroadcast all received messages ending up doubling the messages to clients * Makefile.am, Makefile.in, buffer.c, free_user.c, main.c, remove_connection.c: use `unsigned long' instead of ulong for portability fixed bug in handle_connection() where the call to add_random_bytes had arguments without con-> server_split was issuing QUIT messages for all users when a server split happened. free_user() should check for user->email != 0 before free()ing it * README, add_file.c, opennap.h, synch.c: synch_user needed to use the new 10300 (share file) message to sync non-mp3 data. share_file() now checks to make sure the content-type looks valid by inspecting the major MIME type added additional information on the new 10300 message to the README * ChangeLog, README, add_file.c, db.c, free_user.c, main.c, opennap.h, search.c, spynap.c: added support for sharing generic media types other than mp3 * Makefile.am, Makefile.in, spynap.c: added md5 hash checking on downloads to spynap 2000-01-31 drscholl * main.c: assertion in dispatch_command was in error, the length really was 0xee. use VALID_LEN() to test for buffer overrun instead. * main.c, util.c: added additional ASSERT() in dispatch_command() to track down buffer overrun * buffer.c, free_user.c, ping.c: free_user() should not remove files from the db when a signal is caught, it should just free the memory assocated with the structure fixed bug in buffer_group() where the number of consumed bytes in the next buffer was not skipped ping/pong now xmit any optional arguments the clients pass to them 2000-01-30 drscholl * buffer.c: more fixes in attempt to solve the pop_user missing user nick on server message. changed buffer_validate() to not try to validate the ->next pointer other than it is a valid pointer. * buffer.c, util.c: buffer_compress() assumed that the input buffer was not already partially consumed. this should not happen, but it looks like it does in certain circumstances. * ChangeLog, add_file.c, buffer.c, main.c, napster.txt, search.c: changed add_file() to print out errors back the user when a file is not added to the db. changed add_file() to use a ulong instead of int for storing the file size. send_queued_data() did not print out the con->host even though there was a %s for it, caused a segfault. changed handle_connection() to ignore message 4 since the new napster v2.0beta5a sends it before the login command. search now ignores files belonging to the user who issued the command 2000-01-29 drscholl * README, main.c: handle_connection now prints out the message it received when it errors out becaues the client is not registered yet. * add_file.c: forgot to skip the backslash before sending the path to compute_soundex compute_soundex should skip nonalpha chars at the beginning of the string * ChangeLog, README, add_file.c, buffer.c, db.c, search.c: added support for soundex searches * Makefile.in, ban.c, login.c, main.c, spynap.c: login() was checking for CLASS_USER to set con->destroy when a banned user attempts to log in. It should have been checking for CLASS_UNKNOWN since the connection is not registered yet. added some nice output to some of the server numerics to spynap 2000-01-28 drscholl * ChangeLog, README, config.c, main.c, opennap.h, sample.conf: added max_connections config variable * Makefile.in, buffer.c, debug.c, kill_user.c, login.c, main.c, opennap.h, sample.conf, server_connect.c, server_login.c, util.c: debug_valid should return 0 on buffer overrun handler routines should set con->destroy=1 instead of calling remove_connection() since handle_connection() has a cached copy of the pointer. this is only necessary when destroying the connection for the source of the message being processed. destroying other connections is perfectly fine. buffer_uncompress() should allocate 1 extra byte similar to buffer_read() * Makefile.am, Makefile.in, README, add_file.c, announce.c, ban.c, browse.c, buffer.c, change.c, client_quit.c, compress.c, config.c, configure, configure.in, debug.c, debug.h, download.c, hash.c, hotlist.c, join.c, kill_user.c, level.c, list_channels.c, list_users.c, login.c, main.c, metaserver.c, motd.c, muzzle.c, network.c, opennap.h, part.c, patchnap.c, ping.c, privmsg.c, public.c, remove_connection.c, remove_file.c, resume.c, sample.conf, search.c, server_connect.c, server_login.c, spynap.c, spyserv.c, synch.c, topic.c, unmuzzle.c, upload_complete.c, util.c, whois.c: major rewrite of i/o handling. server->server links are now handled using a compressed stream. 2000-01-27 drscholl * NEWS, TODO, ping.c, sample.conf: final changes for 0.10 release. * README, db.c: primary key() can only be 256 bytes long, so change the nick length to 15 and the filename length to 240. * ChangeLog, README, add_file.c, config.c, db.c, main.c, opennap.h, sample.conf: added max_shared variable to control how many files a user can share (owner,filename) is now the primary key to avoid duplicates. 2000-01-26 drscholl * util.c: max bytes per compression block was still set to debug level * Makefile.in, config.c, db.c, main.c, opennap.h, part_channel.c, sample.conf, util.c: fixed bug in calculate_chunk_length() where the size returned was the total length of the compressed data, and not the region. added max_compress configuration variable to control the maximum number of compressed packets to create in a single cycle, to avoid blocking client connections * compress.c, db.c, util.c: added additional error reporting to init_db() fixed bug in send_queued_data() when only a portion of the send buffer is compressed * network.c, util.c: the length of the compressed packet was 2 bytes too short moved my_ntoa() to network.c * README, compress.c, opennap.h, util.c: compressed_data() did not correctly handle the new packet format 2000-01-25 drscholl * Makefile.in, util.c: fixed send_queued_data() to ensure that compressed packets are less than 65535 bytes long. * Makefile.in, configure, configure.in, network.c: COMPRESSDOTO should be set in the check for libz, not /dev/random * ChangeLog, main.c, network.c, opennap.h: set SO_KEEPALIVE on tcp sockets to detect dead clients * ban.c: ban() should notify mods+ of the ban * ban.c, free_user.c, join.c, muzzle.c, napster.txt, opennap.h, public.c, remove_connection.c, unmuzzle.c, util.c: various bugfixes. * main.c: should ignore EAGAIN on read() without closing the connection * add_file.c, remove_connection.c: bug fix in add_file() * ChangeLog, kill_user.c: elites should be able to kill other elites * free_user.c: fixed memory leak in free_user() where .server was not free'd * login.c, synch.c, util.c: sync_user() didn't send a proper user-ip packet * README, login.c, opennap.h: changed user-ip message to include the locally connected port and the server the user is connected to * Makefile.am, Makefile.in, TODO, login.c, main.c, network.c, opennap.h, server_connect.c, server_login.c: changed server connect to be nonblocking. new file network.c contains most of the standard network routines. * ChangeLog: updated ChangeLog with today's changes * download.c, kill_user.c, level.c, main.c, opennap.h, server_connect.c, topic.c: fixed handle_connection() to not pass 404 messages to peer servers. added a 404 handler to notify the mods+ of the error message received added a 607 handler to pass the server message to a remote user * main.c, util.c: still more fixes for compressed data. * compress.c, config.c, main.c, opennap.h, sample.conf, util.c: added compression_threshold config var (default 8 kbytes) to controll when compression is applied in order to reduce load * Makefile.in, main.c, opennap.h, util.c: more fixes for compressed_data() * compress.c: fixed bug in compressed_data() * compress.c, main.c, util.c: another fix for compressed data packet. the uncompressed lenght was overwriting the compressed length. * Makefile.in, sample.conf, util.c: fixed bug in send_queued_data() when compressing packets * Makefile.am, Makefile.in: needed to add compress.o to opennap_DEPENDENCIES to get it to compile * Makefile.in, TODO: added rcs id tag to Makefile.am * compress.c: forgot to add compress.c to cvs 2000-01-24 drscholl * Makefile.am, Makefile.in, README, configure.in, sample.conf, synch.c: sync_user() should not flush data to peer servers now that compression support is in place, since it will defeat the benefits sync_user() did not relay the client ip address. * Makefile.am, Makefile.in, config.c, configure, configure.in, main.c, sample.conf: fixes for optional compilation with libz, since its not needed for standalone servers. * ChangeLog, Makefile.am, Makefile.in, README, config.c, configure, configure.in, main.c, opennap.h, util.c: added compressed data (10200) message, and "compression_level" variable * ChangeLog, config.c, main.c, napster.txt, opennap.h, remove_connection.c, resume.c, search.c, server_connect.c, util.c: added client_queue_length and server_queue_length config variables to tune the maximum queue lengths allowed fixed resume messages which used broken sequences %ul and %uh added max_results server config variable to control the maximum number of matches returned on a client search * ChangeLog, Makefile.in, opennap.h, server_connect.c: added server version (801) support * TODO, server_connect.c: fixed test for fields[2] being set to argc==3 in notify_mods() call from server_connect() * ChangeLog, Makefile.in, configure, configure.in, main.c, metaserver.c, opennap.h, server_connect.c, util.c: metaserver should write a \n after the ip:port send_queued_data() should return without doing anything if there is no data to send added check for /dev/random and substitute simple random number generation on systems without it * ChangeLog, server_connect.c: server_connect() should check the return from split_line() to get the number of arguments * ChangeLog, Makefile.in, add_file.c, config.c, configure, configure.in, debug.c, debug.h, hotlist.c, join.c, login.c, main.c, napster.txt, opennap.h, part.c, ping.c, privmsg.c, remove_connection.c, resume.c, search.c, server_connect.c, upload_complete.c, util.c, whois.c: added additional integrity checking to the validate_*() functions in debug mode server variables can be dynamically changed using the 810 client message (colten edwards) login() should ensure that the given speed is in the 0-10 range search() was sending the host using %d instead of %lu CONFIG struct now holds default values for variables, and functions config_defaults() and free_defaults() is used to manage the memory added macro VALID_LEN to test a pointer for enough allocated memory * ChangeLog, config.c, main.c, opennap.h, sample.conf: added option to specify the maximum number of channels a user may join. 2000-01-22 drscholl * README, download.c, opennap.h, util.c, whois.c: whois prints the dotted-quad form of the ip address, not an integer * ChangeLog, join.c, main.c, opennap.h: enforce a 5 channel limit for users added cl option to allow only privileged users to create channels * kill_user.c, login.c, util.c, whois.c: fixed another crash in login() whois was checking the level of the person getting whois'ed, not the person issuing the whois 2000-01-21 drscholl * TODO, login.c, util.c: fix for bad password segfault in login * ChangeLog, hotlist.c, login.c: hotlist fix for users that are already logged in * ChangeLog, NEWS, README, login.c: fixed segfault in login(). split_line() does not write a 0 in the last element of the arrary, you have to check the return value for the size * README, main.c, opennap.h, privmsg.c, remove_connection.c, server_connect.c, server_login.c: added support for the server linking commands * level.c: backed out change because you cant set a level >= your own * level.c: fix so that users can set others to leech status * ChangeLog, TODO, ban.c, change.c, download.c, kill_user.c, level.c, login.c, muzzle.c, napster.txt, opennap.h, whois.c: ban did not record the time of the ban notify_mods changed to only notify local mods change data port command was not passed to peer servers added additional information to whois for moderators change set level command so that mods+ can change the level of a user below their level the 218-221 message were not passed to peer servers * ChangeLog, Makefile.am, Makefile.in, ban.c, login.c, main.c, opennap.h: added support for ban, unban and banlist (612, 614, 615, 616, 629) * README, db.c, login.c, opennap.h: login should report error on nick already in use to the client before disconnecting it 2000-01-20 drscholl * ChangeLog, README, TODO, announce.c, download.c, hash.h, kill_user.c, level.c, login.c, main.c, muzzle.c, opennap.h, server_connect.c, synch.c, topic.c, unmuzzle.c, whois.c: changed user level from bitmask to integer. kill and muzzle operations now notify all mods+ added the wallop command (627) user levels are now leech, user, moderator, admin and elite. change server operator to elite instead of admin. * napster.txt, opennap.h: added some additional protocol information to napster.txt * metaserver.c: fixes for bsdi 4.1. accept's 3rd arg should be socklen_t * login.c, main.c, opennap.h, server_connect.c: fixes for compilation under bsdi 4.1 * ChangeLog, configure, configure.in, download.c, main.c, opennap.h, server_connect.c, util.c: endian checking was made more portable. now use autoconf to define WORDS_BIGENDIAN where appropriate. * ChangeLog, main.c: update_stats() now prints a message to the log with the current total library size. * add_file.c, free_user.c, main.c, opennap.h, remove_file.c: server now stores internal library size in kilobytes to avoid rounding errors. * ChangeLog, FAQ, NEWS, README, hash.c, login.c: channel and user names are now case insensitive. * ChangeLog, Makefile.am, Makefile.in, configure, configure.in, hotlist.c, join.c, login.c, main.c, metaserver.c, opennap.h, search.c, server_connect.c, util.c: added additional debugging sanity checking for major structures. * ChangeLog, Makefile.am, Makefile.in, configure, configure.in, spynap.c: configure now will look for mysql in /usr/local as well as /usr * ChangeLog, TODO, hotlist.c, login.c, main.c, napster.txt, opennap.h, spynap.c, util.c: fixed hotlist bug which crashed the server. 2000-01-19 drscholl * ChangeLog, change.c, napster.txt, opennap.h: added support for the change speed command (700) * download.c, main.c, napster.txt, opennap.h, spynap.c: added support for 626 (data port error) added download support to spynap reference client 2000-01-18 drscholl * NEWS, README, spynap.c: began to add download support to spynap. /search and /browse results are now cached, and you can do /get to request a file. downloading does not actually work yet. 2000-01-17 drscholl * ChangeLog, README, login.c, main.c, opennap.h, search.c, spyserv.c: login() did not set the user->host field so transfers between different machines would fail. format_request() did not terminate the output string. added 10013 numeric for passing the ip address of clients to peer servers 2000-01-16 drscholl * ChangeLog, download.c, main.c, napster.txt, opennap.h, search.c, spyserv.c, upload_complete.c: added support for downloading from firewalled clients (500,501) search patterns need to have %, ', _ and \ quoted in the SQL query 2000-01-15 drscholl * ChangeLog, Makefile.am, Makefile.in, download.c, download_ack.c, main.c, napster.txt, opennap.h, spyserv.c, upload_complete.c: fixed download problem where the 204 message was sending the information for the person making the request, not the person holding the file. added -l option to specify the local port on the spyserv agent * ChangeLog, configure, configure.in, db.c, download.c, download_ack.c, main.c, opennap.h, upload_complete.c: fixed several of the download numerics since they were not doing what the protocol specifies. 2000-01-14 drscholl * add_file.c, download.c, main.c, opennap.h, util.c: fixed DOS filename quoting in download() added SO_REUSEADDR option to main socket * add_file.c: single quote needs to be escaped too. * add_file.c, spynap.c: DOS backslashes need to be quoted before adding to the SQL database. * patchnap.c: offset was off by one in patchnap.c * ChangeLog: post release changelog update (oops) * hotlist.c: hotlist contains list of CONNECTION, not USER. * configure, configure.in: updated configure.in to version 0.07 * AUTHORS, Makefile.am, Makefile.in, NEWS, announce.c, client_quit.c, close_db.c, db.c, debug.c, debug.h, download.c, download_ack.c, free_user.c, hash.c, hash.h, metaserver.c, motd.c, muzzle.c, opennap.h, part_channel.c, patchnap.c, remove_connection.c, remove_file.c, resume.c, server_connect.c, server_login.c, spynap.c, spyserv.c, synch.c, unmuzzle.c, upload_complete.c: final email address fixes in copyright notices removed spyserv and spynap from the default build list. now we just include the sources. updated to version 0.07. 2000-01-13 drscholl * change.c: forgot to add change.c to the CVS repository * configure, configure.in, main.c, util.c, NEWS, config.c: updated some more email addresses in the copyright notices updated version number to 0.06 * ChangeLog, Makefile.am, Makefile.in, TODO, add_file.c, browse.c, hotlist.c, join.c, kill_user.c, level.c, list_channels.c, list_users.c, login.c, main.c, napster.txt, opennap.h, part.c, ping.c, privmsg.c, public.c, search.c, spynap.c, topic.c, whois.c: fixed email address in many copyright notices added support for the change data port (703) command added #define for HANDLER to be used as a prototype for all protocol handler routines 2000-01-12 drscholl * TODO, debug.h, hash.h, main.c, opennap.h, spynap.c: fixed copyright notices on some files. fixed segmentation fault in new read() loop in handle_connection(). fixed broken /browse command in spynap. * ChangeLog, Makefile.in, main.c, opennap.h, remove_connection.c: each connection is now given its own input buffer so that we can use nonblocking read() calls. * ChangeLog, TODO, add_file.c, remove_file.c, search.c, spynap.c, util.c: array_add() should not assert if the list is empty server was reporting library size in MB, not GB search strings should have spaces converted to % for SQL queries added a /msg command to the spynap sample client 2000-01-11 drscholl * spynap.c: Updated the spynap client application to add a few more text commands for easier use in testing other numerics. * AUTHORS, NEWS, add_file.c, announce.c, browse.c, client_quit.c, config.c, db.c, debug.c, download.c, download_ack.c, free_user.c, hash.c, hotlist.c, join.c, kill_user.c, level.c, list_channels.c, list_users.c, login.c, main.c, metaserver.c, motd.c, muzzle.c, napster.txt, part.c, part_channel.c, ping.c, privmsg.c, public.c, remove_connection.c, remove_file.c, resume.c, search.c, server_connect.c, server_login.c, spynap.c, spyserv.c, synch.c, topic.c, unmuzzle.c, upload_complete.c, util.c, whois.c: Updated copyright notice to reflect new year and new email address. * .indent.pro, FAQ, client_quit.c, create_db.sql, global.h, hotlist.c, level.c, list_channels.c, list_users.c, md5.h, md5c.c, metaserver.c, muzzle.c, napster.txt, ping.c, remove_file.c, resume.c, sample.conf, sample.motd, server_connect.c, server_login.c, spynap.c, spyserv.c, synch.c, topic.c, unmuzzle.c, upload_complete.c, util.c: Initial import of the opennap-0.05 work in progress. * .indent.pro, FAQ, client_quit.c, create_db.sql, global.h, hotlist.c, level.c, list_channels.c, list_users.c, md5.h, md5c.c, metaserver.c, muzzle.c, napster.txt, ping.c, remove_file.c, resume.c, sample.conf, sample.motd, server_connect.c, server_login.c, spynap.c, spyserv.c, synch.c, topic.c, unmuzzle.c, upload_complete.c, util.c: New file. * add_file.c, announce.c, browse.c, close_db.c, config.c, configure, configure.in, db.c, debug.c, debug.h, download.c, download_ack.c, free_user.c, hash.c, hash.h, install-sh, join.c, kill_user.c, login.c, main.c, missing, mkinstalldirs, motd.c, opennap.h, part.c, part_channel.c, privmsg.c, public.c, remove_connection.c, search.c, whois.c: Initial import of the opennap-0.05 work in progress. * add_file.c, announce.c, browse.c, close_db.c, config.c, configure, configure.in, db.c, debug.c, debug.h, download.c, download_ack.c, free_user.c, hash.c, hash.h, install-sh, join.c, kill_user.c, login.c, main.c, missing, mkinstalldirs, motd.c, opennap.h, part.c, part_channel.c, privmsg.c, public.c, remove_connection.c, search.c, whois.c: New file. * INSTALL, Makefile.am, NEWS, TODO, aclocal.m4: Initial import of the opennap-0.05 work in progress. * INSTALL, Makefile.am, NEWS, TODO, aclocal.m4: New file. * AUTHORS, COPYING, ChangeLog, Makefile.in, README: Initial import of the opennap-0.05 work in progress. * AUTHORS, COPYING, ChangeLog, Makefile.in, README: New file.