+Sat Feb 17 01:06:44 EET 2001 Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+ * Added new function into the silcd/server.[ch] files:
+ silc_server_create_new_channel_with_id to create new channel with
+ already existing Channel ID.
+
+ * Added new packet type SILC_PACKET_SET_MODE_LIST into the file
+ lib/silccore/silcpacket.h. This packet is used t send list of
+ Set Mode payloads inside one packet. Server uses this to set
+ the modes for the channels and clients on those channels, that it
+ announced to the router when it connected to it. The protocol
+ specification has been updated accordingly.
+
+ * The silc_server_new_channel did not handle the packet coming
+ from normal server as it normally does not send that. However,
+ when it announces its channels it does send it. Implemented
+ the support for that.
+
+ * Added SILC_ID_CHANNEL_COMPARE macro to compare to Channel ID's
+ into the file lib/silccore/id.h.
+
+Fri Feb 16 23:57:29 EET 2001 Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+ * Fixed memory leaks in the functions silc_idlist_del_client,
+ silc_idlist_del_channel and silc_idlist_del_server in the file
+ silcd/idlist.c. All of those leaked like a sieve.
+
+ * Fixed some small memory leaks in the client's function
+ silc_client_notify_by_server.
+
+ * Added functions into silcd/server.c: silc_server_announce_clients,
+ silc_server_announce_channels and silc_server_announce_server.
+ These functions are used by normal and router server to announce
+ to its primary router about clients, channels and servers (when
+ router) that we own. This is done after we've connected to the
+ router.
+
+ These functions effectively implements the following packet types:
+ SILC_PACKET_NEW_CHANNEL_LIST, SILC_PACKET_NEW_CHANNEL_USER_LIST
+ and SILC_PACKET_NEW_ID_LIST.
+
+ * Added new functions into the silcd/packet_receive.[ch]:
+ silc_server_new_id_list, silc_server_new_channel_list and
+ silc_server_new_channel_user_list to handle the incoming
+ NEW_ID_LIST, NEW_CHANNEL_LIST and NEW_CHANNEL_USER_LIST packets.
+
+ * Added support of changing Channel ID in the function
+ silc_server_replace_id. If the server that announces a channel
+ to the router already exists in the router (with same name but
+ with different Channel ID), router is responsible to send
+ Replace ID packet to the server and force the server to change
+ the Channel ID to the one router has.
+
+ * Added new notify type SILC_NOTIFY_TYPE_CHANNEL_CHANGE to notify
+ client that the Channel ID has been changed by the router. The
+ normal server sends this to the client. Client must start using
+ the new Channel ID as the channel's ID.
+
+ Implemented handling of this new type into lib/silcclient/client.c
+ into the function silc_client_notify_by_server.
+
+ * Added new function silc_idlist_replace_channel_id into the files
+ silcd/idlist.[ch] to replace the Channel ID.
+
+Fri Feb 16 14:14:00 EET 2001 Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+ * Call silc_server_command_identify_check always when processing
+ the IDENTIFY command in silcd/command.c
+
+Thu Feb 15 20:07:37 EET 2001 Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+ * Added new packet type SILC_PACKET_HEARTBEAT that is used to
+ send keepalive packets. The packet can be sent by clients,
+ servers and routers.
+
+ Added function silc_socket_set_heartbeat into the file
+ lib/silccore/silcsockconn.[ch] to set the heartbeat timeout.
+ If not set, the heartbeat is not performed. The actual
+ heartbeat is implemented in the low level socket connection
+ library. However, application is responsible of actually
+ sending the packet.
+
+ Added silc_server_send_heartbeat to send the actual heartbeat
+ packet into silcd/packet_send.[ch]. Server now performs
+ keepalive with all connections.
+
+ * Added silc_task_get_first function into lib/silcutil/silctask.c
+ to return the timeout task with shortest timeout. There was a bug
+ in task unregistration that caused problems. TODO has been
+ updated to include that task system must be rewritten.
+
+ * The client library will now resolve the client information when
+ receiving JOIN notify from server for client that we know but
+ have incomplete information.
+
+ * Rewrote parts of silc_server_remove_from_channels and
+ silc_server_remove_from_one_channel as they did not remove the
+ channel in some circumstances even though they should've.
+
+ * Encryption problem encountered in server:
+
+ The LEAVE command used to send the Channel Key packet to the
+ router immediately after generating it. However, the code
+ had earlier sent Remove Channel user packet but not immediately,
+ ie. it was put to queue. The order of packets in the router
+ was that Channel Key packet was first and Remove Channel User
+ packet was second, even though they were encrypted in the
+ reverse order. For this reason, MAC check failed. Now, this
+ is fixed by not sending the Channel Key packet immediately but
+ putting it to queue. However, this is more fundamental problem:
+ packets that are in queue should actually not be encrypted
+ because packets that are sent immediately gets encrypted
+ actually with wrong IV (and thus MAC check fails). So, packets
+ that are in queue should be encrypted when they are sent to
+ the wire and not when they put to the queue.
+
+ However, the problem is that the current system has not been
+ designed to work that way. Instead, the packet is encrypted
+ as soon as possible and left to the queue. The queue is then
+ just purged into wire. There won't be any fixes for this
+ any time soon. So, the current semantic for packet sending
+ is as follows:
+
+ o If you send packet to remote host and do not force the send
+ (the packet will be in queue) then all subsequent packets to the
+ same remote host must also be put to the queue. Only after the
+ queue has been purged is it safe again to force the packet
+ send immediately.
+
+ o If you send all packets immediately then it safe to send
+ any of subsequent packets through the queue, however, after
+ the first packet is put to queue then any subsequent packets
+ must also be put to the queue.
+
+ Follow these rules and everything works fine.
+
+Thu Feb 15 14:24:32 EET 2001 Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+ * Added new function silc_server_remove_clients_by_server to
+ remove all client entries from ID list when the server connection
+ is lost. In this case it is also important to invalidate all
+ client entires as they hold the invalid server entry. This
+ fixes fatal bug when server has lost connection and will reconnect
+ again.
+
+Wed Feb 14 16:03:25 EET 2001 Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+ * Made some sanity checks to silc_server_daemonise like to check
+ whether the requested user and group actually exists.
+
+ * Added sanity check to SKE's silc_ske_responder_finish to check
+ that the public and private key actually is valid.
+
+ * Invalidate the client's nickname when receiving Replace ID
+ packet and the Client ID is being replaced. This means that the
+ server will query the nickname if someone needs it (client)
+ a bit later.
+
+ * Sort the ID Cache in client library when the ID Cache data
+ has changed (needs sorting).
+
+ * Do not allow for SILC client to create several connections to
+ several servers. The client does not support windows right now
+ and generating multiple connections causes weird behaviour.
+
+ Irssi-silc client does support windows and can handle several
+ connections without problems, see: www.irssi.org and SILC plugin.
+
+ * Fixed some places where client was added to the IDList. The
+ rule of thumb is following (in order to get everything right):
+ If the client is directly connected local client then the
+ `connection' argument must be set and `router' argument must be
+ NULL to silc_idlist_add_client function. If the client is not
+ directly connected client then the `router' argument must
+ bet set and the `connection' argument must be NULL to the
+ silc_idlist_add_client function.
+
+ * The funtion silc_server_packet_send_local_channel actually did
+ not check whether the client was locally connected or not. It
+ does that now. Fixed a bug related to LEAVE command.
+
+ * Fixed Remove Channel User payload parsing bug in server's
+ silcd/packet_receive.c. Fixed a bug related to LEAVE command.
+
+ * The server's silc_server_save_channel_key now checks also the
+ global ID list for the channel as it might not be in the local
+ list. Fixed a bug related to LEAVE command.
+
+ * Is this the end of the [<unknown>] buglet that has been lurking
+ around for a long time? A little for loop fix in server's
+ silc_server_command_whois_parse that is used by both IDENTIFY
+ and WHOIS command. At least, this was a clear bug and a cause
+ of one type of [<unknown>] buglet.
+
+ * WHOIS and IDENTIFY commands call the function
+ silc_server_command_[whois/identify]_check function even if
+ we are not router server.
+
+Tue Feb 13 19:55:59 EET 2001 Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+ * Added --with-gmp configuration option. If set the GMP
+ is always compiled in the SILC source tree. If not set then
+ it is checked whether the system has the GMP3 installed. If
+ it has then the GMP won't be compiled (the system's headers
+ and library is used), if it doesn't have it then the GMP is
+ compiled in the SILC source tree.
+
+Mon Feb 12 11:20:32 EET 2001 Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+ * Changed RSA private exponent generation to what PKCS #1
+ suggests. We try to find the smallest possible d by doing
+ modinv(e, lcm(phi)) instead of modinv(e, phi). Note: this is
+ not security fix but optimization.
+
+Sun Feb 11 18:19:51 EET 2001 Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+ * Added new config entry [Identity] to fork the server and run
+ it as specific user and group. A patch from Bostik.
+
+ * Imported Dotconf configuration library into lib/dotconf.
+ This will be used to create the SILC configuration files later.
+ It will appear in the distsribution after this commit.
+
+Sat Feb 10 21:13:45 EET 2001 Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+ * A big code auditing weekend happening. Auditing code for
+ obvious mistakes, bugs and errors. Also, removing any code
+ that is obsolete.
+
+ Removed files for being obsolete:
+
+ o lib/silcutil/silcbuffer.c (the buffer interface is entirely in
+ inline in the file lib/silcutil/silcbuffer.h)
+
+ o lib/silcutil/silcbufutil.c (the header has inline versions)
+
+ Changed code to fix possible error conditions:
+
+ o The buffer formatting routines now check that the destination
+ buffer really has enough space to add the data. This applies for
+ both buffer formatting and unformatting
+ (lib/silcutil/silcbuffmt.[ch]). Also, the entire buffer
+ unformatting was changed to accomodate following rules:
+ XXX_*STRING_ALLOC will allocate space for the data into the pointer
+ sent to the function while XXX_*STRING will not allocate or copy
+ the data into the buffer. Instead it sets the pointer from the
+ buffer into the pointer sent as argument (XXX_*STRING used to
+ require that the pointer must be allocated already). This change
+ makes this whole thing a bit more consistent and more optimized
+ (note that the data returned in the unformatting with XXX_*STRING
+ must not be freed now). The routines return now -1 on error.
+
+ o Tried to find all code that use buffer_format and buffer_unformat
+ and added return value checking to prevent formatting and
+ especially unformatting errors and possible subsequent fatal
+ errors.
+
+ o Changed ske->x and ske->KEY to mallocated pointers in
+ lib/silcske/silcske.h. Fixed possible data and memory leak.
+
+ o Added return value checking to all *_parse* functions. Fixed
+ many memory leaks as well.
+
+ o Added length argument to silc_id_str2id in lib/silccore/id.[ch]
+ so that buffer overflows would not happen. All code now also
+ checks the return value as it can fail.
+
+Mon Feb 5 20:08:30 EET 2001 Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+ * Added reconnection support to server if the normal server looses
+ its connection to the router (for example if router is rebooted).
+ The server performs normal reconnection strategy implemented
+ to the server. Affected file silcd/server.c.
+
+Sun Feb 4 13:18:32 EET 2001 Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+ * Added new packet type SILC_PACKET_SET_MODE that is used to
+ distribute the information about changed modes (for clients,
+ channels and clients channel modes) to all routers in the
+ network. Updated the protocol specification accordingly.
+
+ Added functions into silcd/packet_send.c and
+ silcd/packet_receive.c: silc_server_send_set_mode,
+ silc_server_set_mode.
+
+ Added new files silcmode.[ch] into lib/silccore that implements
+ the encoding and decoding of Set Mode Payload. Added new type
+ SilcSetModePayload. Moved the definitions of different modes
+ from lib/silccore/silcchannel.h into lib/silccore/silcmode.h.
+
+Sat Feb 3 15:44:54 EET 2001 Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+ * Oops, a little mistake in server's connection authentication
+ protocol. The protocol is not ended with FAILURE but with
+ SUCCESS if the authentication is Ok. :) Affected file is
+ silcd/protocol.c.
+
+ * Implemented NICK_CHANGE notify handling in server in the file
+ silcd/packet_receive.c The NICK_CHANGE notify is distributed to
+ the local clients on the channel. After the changing nickname
+ in router environment snhould work and the [<unknown>] nickname
+ should appear no more.
+
+ The silc_server_replace_id function that receives the Replace ID
+ payload now sends the NICK_CHANGE notify type also in the file
+ silcd/packet_receive.c
+
+ * Changed WHOIS and IDENTIFY command to support the maximum amount
+ of arguments defined in protocol specs (3328 arguments). This
+ fixed a bug that caused problems when there were more than three
+ users on a channel.
+
+Fri Feb 2 11:42:56 EET 2001 Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+ * Added extra parameter, command identifier, to the
+ silc_client_send_command so that explicit command identifier
+ can be defined.
+
+ Changed that ID list routines uses specific command identifier
+ when sending WHOIS/IDENTIFY requests to the server so that they
+ can be identified when the reply comes back.
+
+ Affected files lib/silcclient/command.[ch],
+ lib/silcclient/client.c and lib/silcclient/idlist.[ch].
+
+ * Added `sender' argument to silc_server_packet_send_to_channel
+ to indicaet the sender who originally sent the packet to us
+ that we are now re-sending. Ignored if NULL. Affected file
+ silcd/packet_send.[ch].
+
+ * Added some server statistics support in silcd/server_internal.h
+ SilcServerStatistics structure and around the server code. Also
+ send some nice statistics information when client is connecting
+ to the client.
+
Thu Feb 1 23:31:21 EET 2001 Pekka Riikonen <priikone@poseidon.pspt.fi>
* Fixed channel ID decoding in server's JOIN command reply in