[Pkg-silc-commits] [SCM] server for the SILC protocol branch, master, updated. debian/1.1.18-1

Jérémy Bobbio lunar at debian.org
Sat Oct 3 23:16:27 UTC 2009


The following commit has been merged in the master branch:
commit 2b93d10fb77bf322251ad083abdbf87fd6498ff1
Author: Jérémy Bobbio <lunar at debian.org>
Date:   Sun Sep 27 15:22:17 2009 +0200

    Imported Upstream version 1.1.18

diff --git a/ChangeLog b/ChangeLog
index e3212ba..de2afe4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,69 +1,43 @@
-commit 35b767c59f0741fc58f0c4d07ccd8d2ce4134a35
+commit b53c63ed53cdb7e589f6a5a743cc7fb43396927e
 Author: Pekka Riikonen <priikone at silcnet.org>
-Date:   Fri Jul 31 22:38:06 2009 +0300
+Date:   Sat Sep 26 20:21:31 2009 +0300
 
-    configure: check threads support in OpenBSD.
-
-commit cb95ad2d35f1796567fbebc9e848c10d4bd2e7b9
-Author: Pekka Riikonen <priikone at silcnet.org>
-Date:   Mon Jun 8 08:58:35 2009 +0300
-
-    silcd: Fixed IDENTIFY command reply handling for channels
-    
-    The IDENTIFY comamnd reply for channels were broken because the channel ID
-    parsing always failed.  This would cause issues like USERS command not
-    returning the users for a channel, making the channel appear empty, in some
-    specific cases.
-    
-    Fixed also the USERS command reply to not query the channel information
-    from router more than once.
-
-commit 59f343801620f8b02933d419efb111d5928b11b8
-Author: Pekka Riikonen <priikone at silcnet.org>
-Date:   Mon Jun 8 08:03:02 2009 +0300
-
-    silcd: Abort active protocols in DETACH command
+    silcd: Added heartbeat support
     
-    When detaching client, which results into closing of the actual connection
-    it is important to abort any active protocols, such as rekeys, because
-    they cannot be completed with detached clients.
+    Added support for sending SILC_PACKET_HEARTBEAT packets to connection,
+    to make sure they keep alive and to detect if they have died.
 
-commit aef788f086376673eef0939aa3ef74810318d5f3
+commit bb61286f7ac90ebcdaa9b00991a9a98b6cd8663f
 Author: Pekka Riikonen <priikone at silcnet.org>
-Date:   Sun Jun 7 20:04:16 2009 +0300
+Date:   Fri Sep 25 12:07:41 2009 +0300
 
-    silcd: Added SKR to debug levels
+    Set SO_KEEPALIVE for all accept()ed sockets.
 
-commit 3749c6ee56f1df40934bab1aae6baeb334206b69
+commit dbcb39afedd5dba46a1c5e79e3ff7095c3e86454
 Author: Pekka Riikonen <priikone at silcnet.org>
-Date:   Tue Jun 2 08:01:25 2009 +0300
+Date:   Fri Sep 25 12:05:38 2009 +0300
 
-    silcd: Save debug message in ring buffer
+    silcd: Fixed SIGUSR1 signal handling
     
-    In debug version save 3000 last debug messages in ring buffer so that they
-    are available in core files.
-
-commit 7a10e386467421bfac0ba425289250e61e566ce0
-Author: Pekka Riikonen <priikone at silcnet.org>
-Date:   Mon May 25 20:44:07 2009 +0300
-
-    configure.ad: Fixed configure to support new autoconf
+    Fixed the SIGUSR1 signal handling which can be used to dump the server
+    internals to /tmp.
+    
+    Changed also End of Stream handling to handle NULL idata pointer instead
+    of ignoring the EOS in case it is NULL.
+    
+    Changed also the DETACH timeout handling to use the packet stream
+    directly instead of looking up client in the callback.
 
-commit 7d0cb0875ea6adaac843bc8d7ee1d74666c99afd
+commit 8cb801cf6482666818e721822ce81c81ec818908
 Author: Pekka Riikonen <priikone at silcnet.org>
-Date:   Mon May 25 20:43:22 2009 +0300
+Date:   Fri Aug 7 14:48:46 2009 +0300
 
-    silcd: fixed Deny hostname comparison
-    
-    Use the silc_strin_match instead of silc_string_compare to match
-    hostnames and IP addresses in silcd.conf.  Fixed for Deny but changed
-    in all the other places as well.
+    More string format fixes in silcd and client libary
 
- apps/silcd/command.c          |   17 +++++++++++++-
- apps/silcd/command_reply.c    |    8 ++++--
- apps/silcd/command_reply.h    |    1 +
- apps/silcd/server_query.c     |    1 +
- apps/silcd/server_util.c      |    1 +
- apps/silcd/serverconfig.c     |   16 +++++++-------
- apps/silcd/silcd.c            |   47 ++++++++++++++++++++++++++++++++--------
- configure.ad                  |   13 +++++++----
+ apps/silcd/command.c            |   73 +++++-----
+ apps/silcd/packet_send.c        |   11 ++-
+ apps/silcd/server.c             |   35 ++++--
+ apps/silcd/server.h             |    4 +-
+ apps/silcd/server_internal.h    |    1 +
+ apps/silcd/server_util.h        |   14 ++-
+ apps/silcd/silcd.c              |   28 ++--
diff --git a/Makefile.am b/Makefile.am
index cea8d14..d4e9570 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -2,7 +2,7 @@
 # To make changes edit the ./Makefile.ad file in the source tree.
 
 # Source: ./Makefile.ad
-# Generated: Sat Aug  1 09:55:36 EEST 2009 by priikone
+# Generated: Sat Sep 26 23:32:30 EEST 2009 by priikone
 # Distribution: Server
 # License: 
 
diff --git a/Makefile.in b/Makefile.in
index 283fdc9..cdf496f 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -18,7 +18,7 @@
 # To make changes edit the ./Makefile.ad file in the source tree.
 
 # Source: ./Makefile.ad
-# Generated: Sat Aug  1 09:55:36 EEST 2009 by priikone
+# Generated: Sat Sep 26 23:32:30 EEST 2009 by priikone
 # Distribution: Server
 # License: 
 
diff --git a/TODO b/TODO
index d89901f..ffc4db0 100644
--- a/TODO
+++ b/TODO
@@ -9,312 +9,12 @@ tested.
 apps/silcd, The SILC Server	****PARTLY DONE****
 ===========================
 
- o Fix/test GETKEY. (***DONE)
-
- o Fix/test MOTD. (***DONE)
-
  o Rewrite rehash, HUP.
 
- o Heartbeat-keepalive.
-
- o Port all code to use SILC Toolkit 1.1 APIs. (***DONE)
-
- o Remove protocol.[ch].  (***DONE)
-
- o Rewrite connecting accepting. (***DONE)
-
- o Rewrite async connecting. (***DONE)
-
- o Test backup router resuming protocol. (***DONE)
-
- o Check all packet receive routines that they call silc_packet_free. 
-   (***DONE)
-
- o Add Web statistics module using lib/silchttp.  Give out server
-   statistics. (***DONE)
 
-
-SILC Client	****DONE****
+SILC Client
 ===========
 
- o Porting to new Toolkit API and new Client Library API (***DONE)
-
- o Improve help files, especially /cmode, /cumode and /key. (***DONE)
 
-
-lib/silcclient, The Client Library	***DONE****
+lib/silcclient, The Client Library
 ==================================
-
- o silcclient.h clean up and API rewrites. (***DONE)
-
- o silcclient_entry.h finishing, all entry relates APIs to this header.
-   (***DONE)
-
- o SilcChannelEntry, SilcServerEntry, SilcChannelUser, allocating,
-   freeing, finding, etc. rewrite.  Also making them reference counted for
-   multi threads use. (***DONE)
-
- o Rewrite client side WHOIS command (for whois -details). (***DONE)
-
- o Finish all the missing SILC packet processings, rewrites. (***DONE)
-
- o The client_notify.c rewrite. (***DONE)
-
- o Resuming to client_register.c (remove client_resume.c) (***DONE)
-
- o Rekey rewrite. (***DONE)
-
- o Remove protocol.[ch]. (***DONE)
-
- o File transfer rewrite. (***DONE)
-
- o File transfer API documentation. (***DONE)
-
- o Connection auth request. (***DONE)
-
- o Password auth test, public key auth test. (***DONE)
-
- o Starting key exchange directly, rewrite. (***DONE)
-
- o Channel messages, channel private keys, channel entires, channel
-   search, etc. rewrite. (***DONE)
-
- o For many APIs leave the hash context allocations to the caller instead
-   of using client->sha1hash and client->md5hash, or some kind of thread
-   safe (no locking) concept. (***DONE)
-
- o Key agreement rewrite. (***DONE)
-
- o Connecting to remote client (***DONE)
-
- o Private message waiting API (in threads) (***TESTING NEEDED)
-
- o client_attrs.c, attributes rewrite. (***DONE)
-
- o No SilcBuffer lists back to application in command_reply operations.
-   Convert them all to real lists and/or structures for easier use.
-   (***DONE)
-
- o Nickname formatting rewrite. (***DONE)
-
- o UDP connections. (***TESTING NEEDED)
-
-
-lib/silcsftp			****DONE****
-============
-
- o Porting to use the new util library. (***DONE)
-
-
-lib/silccore/silcpacket.[ch]	****DONE****
-============================
-
- o SilcPacketEngine. (***DONE)
-
- o New SILC Packet API. (***DONE)
-
- o Implement silc_packet_engine_stop and silc_packet_stream_destroy. (***DONE)
-
- o IV Included flag support, UDP transport support (***TESTING NEEDED)
-
-
-lib/silccore/silcid.[ch]	****DONE****
-========================
-
- o Add silc_id_str2id to accept the destination buffer as argument
-   and thus not require any memory allocation.  Same will happen
-   with silc_id_payload_* functions. (***DONE)
-
- o silc_id_str2id, silc_id2str to non-allocating routines. (***DONE)
-
-
-lib/silcskr	****DONE****
-===========
-
- o Removing key from the repository is not possible currently.  It should
-   be. (***DONE)
-
-
-lib/silcske/silcske.[ch] 	***DONE****
-========================
-
- o Responder rekey (***DONE)
-
- o IV Included flag support in SKE (***DONE)
-
- o UDP transport changes; retransmission support by using exponential
-   backoff algorithm. (***DONE)
-
- o SilcConnAuth header file documentation. (***DONE)
-
-
-lib/silccrypt			****DONE****
-=============
-
- o Implement PKCS #1 sign/verify with hash OID. (***TESTING NEEDED)
-
- o Implement SILC Public Key Version 2 handling in sign/verify.  Implement
-   Version (V) identifier (***DONE)
-
- o SILC PKCS (silcpkcs.h) reorganizing when other PK supports added.
-   Move the SILC Public Key routines away from the crypto library into
-   the core library (silccore).  silc_pkcs_public/private_key_* routines
-   to silc_public/private_key_* routines.  The silc_public_key_* routines
-   should also automatically handle SILC Public Keys, and other keys
-   and certificates as well.  Add fe. silcpk.h into silccore.  It should
-   also include the Public Key Payload encoding and decoding routines.
-   (***DONE)
-
- o Assembler AES (***DONE)
-
-
-lib/silcutil			****DONE****
-============
-
- o The regex code from lib/contrib might compile fine on all platforms.
-   No need to make it silcutil/unix/ specific.  Add them to generic
-   silcutil.c. (***DONE)
-
- o Silc FD Stream to WIN32 (lib/silcutil/silcfdstream.h) (***TESTING NEEDED)
-
- o bool -> SilcBool (***DONE)
-
-
-lib/silcutil/silcbuffer.h	****DONE****
-=========================
-
- o Remove the `truelen' field from SilcBuffer as it is entirely
-   redundant since we can get the true length of the buffer by
-   doing buffer->end - buffer->header.  Add silc_buffer_truelen
-   macro instead.  Consider also removing `len' field too since
-   it effectively is buffer->tail - buffer->data, and adding
-   silc_buffer_len macro can do the same.  These would save
-   totally 8 bytes of memory per buffer. (***DONE)
-
-
-lib/silcutil/silcbuffmt.[ch]	****DONE****
-============================
-
- o SilcStack aware silc_buffer_unformat (***DONE)
-
- o SilcStack aware silc_buffer_format (***DONE)
-
- o silc_buffer_format reallocates automatically (***DONE)
-
- o SILC_STR_OFFSET (***DONE)
-
-
-lib/silcutil/silcstack.[ch]	****DONE****
-===========================
-
- o Data stack implementation (***DONE)
-
-
-lib/silcutil/silcstream.[ch]	****DONE****
-============================
-
- o Add abstract SilcStream. (***DONE)
-
-
-lib/silcutil/silcsocketstream.[ch]	****DONE****
-==================================
-
- o Add SilcSocketStream (***DONE)
-
- o Add SilcSocketStream for WIN32 (***TESTING NEEDED)
-
- o Test QoS after the changes made to socket stream
-
-
-lib/silcutil/silcschedule*.[ch]		****DONE****
-===============================
-
- o Scheduler can be optimized for FD tasks by changing the fd_queue
-   to SilcHashTable instead of using linked list.  We need to do
-   one-to-one mapping of FD to task and hash table is more efficient
-   for this usage.
-
-   Also redefine the silc_select to perhaps return a separate
-   structure of the events that actually occurred, instead of
-   returning the events in the fd_list which is then traversed
-   in the generic code to find the changed events.  This can be
-   made faster by having own struct which includes only the
-   changed events, thus the tarversing is faster since the whole
-   fd_list is not traversed anymore (it is still traversed in the
-   silc_select but at least it removes one extra tarversing later
-   for the same list).
-
-   Other task queues should be changed to use SilcList.  (***DONE)
-
- o Add SILC scheduler's internal routines into a table of implementation
-   function pointers, that the generic code then takes as extern from
-   implementation.  These are the silc_schedule_internal_* routines.
-   (***DONE)
-
- o Change SILC_TASK_CALLBACK to non-static, and remove the macro
-   SILC_TASK_CALLBACK_GLOBAL. (***DONE)
-
- o SILC Schedule API changes to WIN32. (***DONE)
-
-
-lib/silcutil/silcasync.[ch]	****DONE****
-===========================
-
- o Add SilcAsyncOperation to utility library.  Any function that takes
-   callback as an argument must/should return SilcAsyncOperation.
-   (***DONE)
-
-
-lib/silcutil/silctime.[ch]	****DONE****
-===========================
-
- o SilcTime. (***DONE)
-
- o system time, universal, generalized. (***DONE)
-
-
-lib/silcutil/silcfsm.[ch]	****DONE****
-=========================
-
- o SILC Finite State Machine API.  Replaces SILC Protocol API (***DONE)
-
-
-lib/silcutil/silcnet*, lib/silcutil/*/silc*net*		****DONE****
-===============================================
-
- o Add UDP interface (***DONE)
-
- o Add UDP interface for WIN32 (***TESTING NEEDED)
-
- o New network interfaces (***DONE)
-
-
-lib/silcmath			****DONE****
-============
-
- o Test on x86_64. (***TESTING NEEDED)
-
- o Change LTM and TFM function names when importing to SILC tree to avoid
-   rare linking problems on system that has same named symbols already in
-   the system. (***DONE)
-
-
-lib/silcutil/symbian/		****DONE****
-=====================
-
-  o lib/silcutil/symbian routines missing or not completed.
-    (****TESTING NEEDED)
-
-  o Something needs to be thought to the logging globals as well,
-    like silc_debug etc.  They won't work on EPOC.  Perhaps logging
-    and debugging is to be disabled on EPOC.
-
-
-lib/silcasn1			****DONE****
-============
-
- o ASN.1 library (***DONE)
-
- o Header documentation missing. (***DONE)
-
- o Some string encodings missing (copy/paste matter). (***DONE)
diff --git a/apps/Makefile.am b/apps/Makefile.am
index 3fac135..b3c458d 100644
--- a/apps/Makefile.am
+++ b/apps/Makefile.am
@@ -2,7 +2,7 @@
 # To make changes edit the ./apps/Makefile.ad file in the source tree.
 
 # Source: ./apps/Makefile.ad
-# Generated: Sat Aug  1 09:55:37 EEST 2009 by priikone
+# Generated: Sat Sep 26 23:32:31 EEST 2009 by priikone
 # Distribution: Server
 # License: 
 
diff --git a/apps/Makefile.in b/apps/Makefile.in
index d26bb46..64882e5 100644
--- a/apps/Makefile.in
+++ b/apps/Makefile.in
@@ -18,7 +18,7 @@
 # To make changes edit the ./apps/Makefile.ad file in the source tree.
 
 # Source: ./apps/Makefile.ad
-# Generated: Sat Aug  1 09:55:37 EEST 2009 by priikone
+# Generated: Sat Sep 26 23:32:31 EEST 2009 by priikone
 # Distribution: Server
 # License: 
 
diff --git a/apps/silcd/command.c b/apps/silcd/command.c
index d74df17..92bba11 100644
--- a/apps/silcd/command.c
+++ b/apps/silcd/command.c
@@ -16,7 +16,6 @@
   GNU General Public License for more details.
 
 */
-/* $Id$ */
 
 #include "serverincludes.h"
 #include "server_internal.h"
@@ -2379,7 +2378,7 @@ SILC_SERVER_CMD_FUNC(join)
        channel will be global, based on our router name. */
     if (!serv[0] && !server->config->local_channels) {
       if (!server->standalone) {
-	silc_snprintf(serv, sizeof(serv), server->router->server_name);
+	silc_snprintf(serv, sizeof(serv), "%s", server->router->server_name);
       } else {
 	SilcServerConfigRouter *router;
 	router = silc_server_config_get_primary_router(server);
@@ -4063,48 +4062,47 @@ SILC_TASK_CALLBACK(silc_server_command_detach_cb)
 {
   SilcServer server = app_context;
   QuitInternal q = (QuitInternal)context;
-  SilcClientID *client_id = (SilcClientID *)q->sock;
-  SilcClientEntry client;
-  SilcPacketStream sock;
-  SilcIDListData idata;
+  SilcPacketStream sock = q->sock;
+  SilcClientEntry client = silc_packet_get_context(sock);
+  SilcIDListData idata = (SilcIDListData)client;
 
+  if (!client) {
+    silc_packet_stream_unref(sock);
+    silc_free(q);
+    return;
+  }
 
-  client = silc_idlist_find_client_by_id(server->local_list, client_id,
-					 TRUE, NULL);
-  if (client && client->connection) {
-    sock = client->connection;
+  SILC_LOG_DEBUG(("Detaching client %s",
+		  silc_id_render(client->id, SILC_ID_CLIENT)));
 
-    SILC_LOG_DEBUG(("Detaching client %s",
-		    silc_id_render(client->id, SILC_ID_CLIENT)));
+  /* Stop rekey for the client. */
+  silc_server_stop_rekey(server, client);
 
-    /* Stop rekey for the client. */
-    silc_server_stop_rekey(server, client);
+  /* Abort any active protocol */
+  idata = silc_packet_get_context(sock);
+  if (idata && idata->sconn && idata->sconn->op) {
+    SILC_LOG_DEBUG(("Abort active protocol"));
+    silc_async_abort(idata->sconn->op, NULL, NULL);
+    idata->sconn->op = NULL;
+  }
 
-    /* Abort any active protocol */
-    idata = silc_packet_get_context(sock);
-    if (idata && idata->sconn && idata->sconn->op) {
-      SILC_LOG_DEBUG(("Abort active protocol"));
-      silc_async_abort(idata->sconn->op, NULL, NULL);
-      idata->sconn->op = NULL;
-    }
+  silc_schedule_task_del_by_all(server->schedule, 0, silc_server_do_heartbeat,
+				sock);
 
-    /* Close the connection on our side */
-    client->router = NULL;
-    client->connection = NULL;
-    silc_server_close_connection(server, sock);
+  /* Close the connection on our side */
+  client->router = NULL;
+  client->connection = NULL;
+  silc_server_close_connection(server, sock);
 
-    /* Mark the client as locally detached. */
-    client->local_detached = TRUE;
+  /* Mark the client as locally detached. */
+  client->local_detached = TRUE;
 
-    /*
-     * Decrement the user count; we'll increment it if the user resumes on our
-     * server.
-     */
-    SILC_VERIFY(&server->stat.my_clients > 0);
-    server->stat.my_clients--;
-  }
+  /* Decrement the user count; we'll increment it if the user resumes on our
+     server. */
+  SILC_VERIFY(&server->stat.my_clients > 0);
+  server->stat.my_clients--;
 
-  silc_free(client_id);
+  silc_packet_stream_unref(sock);
   silc_free(q);
 }
 
@@ -4171,14 +4169,15 @@ SILC_SERVER_CMD_FUNC(detach)
 				   SILC_NOTIFY_TYPE_UMODE_CHANGE);
 
   q = silc_calloc(1, sizeof(*q));
-  q->sock = silc_id_dup(client->id, SILC_ID_CLIENT);
+  q->sock = cmd->sock;
+  silc_packet_stream_ref(q->sock);
   silc_schedule_task_add_timeout(server->schedule,
 				 silc_server_command_detach_cb,
 				 q, 0, 200000);
 
   if (server->config->detach_timeout) {
     q = silc_calloc(1, sizeof(*q));
-    q->sock = silc_id_dup(client->id, SILC_ID_CLIENT);
+    q->sock = (void *)silc_id_dup(client->id, SILC_ID_CLIENT);
     silc_schedule_task_add_timeout(server->schedule,
 				   silc_server_command_detach_timeout,
 				   q, server->config->detach_timeout * 60, 0);
diff --git a/apps/silcd/packet_send.c b/apps/silcd/packet_send.c
index efc334c..9e6fa13 100644
--- a/apps/silcd/packet_send.c
+++ b/apps/silcd/packet_send.c
@@ -4,7 +4,7 @@
 
   Author: Pekka Riikonen <priikone at silcnet.org>
 
-  Copyright (C) 1997 - 2007 Pekka Riikonen
+  Copyright (C) 1997 - 2009 Pekka Riikonen
 
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -1572,6 +1572,15 @@ void silc_server_send_dest_command_reply(SilcServer server,
   va_end(ap);
 }
 
+/* Send the heartbeat packet. */
+
+void silc_server_send_heartbeat(SilcServer server,
+				SilcPacketStream sock)
+{
+  silc_server_packet_send(server, sock, SILC_PACKET_HEARTBEAT, 0,
+			  NULL, 0);
+}
+
 /* Routine used to send the connection authentication packet. */
 
 void silc_server_send_connection_auth_request(SilcServer server,
diff --git a/apps/silcd/server.c b/apps/silcd/server.c
index e18c7de..a07dee2 100644
--- a/apps/silcd/server.c
+++ b/apps/silcd/server.c
@@ -196,25 +196,23 @@ static void silc_server_packet_eos(SilcPacketEngine engine,
 
   SILC_LOG_DEBUG(("End of stream received, sock %p", stream));
 
-  if (!idata)
-    return;
-
   if (server->router_conn && server->router_conn->sock == stream &&
       !server->router && server->standalone) {
-    if (idata->sconn && idata->sconn->callback)
+    if (idata && idata->sconn && idata->sconn->callback)
       (*idata->sconn->callback)(server, NULL, idata->sconn->callback_context);
     silc_server_create_connections(server);
     silc_server_free_sock_user_data(server, stream, NULL);
   } else {
     /* If backup disconnected then mark that resuming will not be allowed */
-     if (server->server_type == SILC_ROUTER && !server->backup_router &&
+     if (idata &&
+	 server->server_type == SILC_ROUTER && !server->backup_router &&
          idata->conn_type == SILC_CONN_SERVER) {
       SilcServerEntry server_entry = (SilcServerEntry)idata;
       if (server_entry->server_type == SILC_BACKUP_ROUTER)
         server->backup_closed = TRUE;
     }
 
-    if (idata->sconn && idata->sconn->callback)
+    if (idata && idata->sconn && idata->sconn->callback)
       (*idata->sconn->callback)(server, NULL, idata->sconn->callback_context);
     silc_server_free_sock_user_data(server, stream, NULL);
   }
@@ -241,8 +239,8 @@ SILC_TASK_CALLBACK(silc_server_packet_error_timeout)
     silc_server_free_sock_user_data(server, stream, NULL);
   } else {
     /* If backup disconnected then mark that resuming will not be allowed */
-     if (server->server_type == SILC_ROUTER && !server->backup_router &&
-         idata->conn_type == SILC_CONN_SERVER) {
+    if (server->server_type == SILC_ROUTER && !server->backup_router &&
+        idata->conn_type == SILC_CONN_SERVER) {
       SilcServerEntry server_entry = (SilcServerEntry)idata;
       if (server_entry->server_type == SILC_BACKUP_ROUTER)
         server->backup_closed = TRUE;
@@ -533,7 +531,7 @@ static void silc_server_packet_parse_type(SilcServer server,
 
   case SILC_PACKET_KEY_AGREEMENT:
     /*
-     * Received heartbeat.
+     * Received key agreement.
      */
     if (packet->flags & SILC_PACKET_FLAG_LIST)
       break;
@@ -2651,6 +2649,14 @@ silc_server_accept_auth_compl(SilcConnAuth connauth, SilcBool success,
 			       param->qos_rate_limit, param->qos_bytes_limit,
 			       param->qos_limit_sec, param->qos_limit_usec);
 
+  /* Perform heartbeat */
+  if (param->keepalive_secs) {
+    SILC_LOG_DEBUG(("Perform heartbeat every %d seconds",
+		    param->keepalive_secs));
+    silc_schedule_task_add_timeout(server->schedule, silc_server_do_heartbeat,
+				   sock, param->keepalive_secs, 0);
+  }
+
   silc_server_config_unref(&entry->cconfig);
   silc_server_config_unref(&entry->sconfig);
   silc_server_config_unref(&entry->rconfig);
@@ -2895,6 +2901,15 @@ static void silc_server_accept_new_connection(SilcNetStatus status,
   entry->op = silc_ske_responder(ske, packet_stream, &params);
 }
 
+/* Perform heartbeat */
+
+SILC_TASK_CALLBACK(silc_server_do_heartbeat)
+{
+  SilcServer server = app_context;
+  SilcPacketStream sock = context;
+  silc_server_send_heartbeat(server, sock);
+}
+
 
 /********************************** Rekey ***********************************/
 
@@ -3235,6 +3250,8 @@ void silc_server_free_sock_user_data(SilcServer server,
 
   silc_schedule_task_del_by_all(server->schedule, 0, silc_server_do_rekey,
 				sock);
+  silc_schedule_task_del_by_all(server->schedule, 0, silc_server_do_heartbeat,
+				sock);
 
   /* Cancel active protocols */
   if (idata) {
diff --git a/apps/silcd/server.h b/apps/silcd/server.h
index 81a6f3d..ddefcc4 100644
--- a/apps/silcd/server.h
+++ b/apps/silcd/server.h
@@ -4,7 +4,7 @@
 
   Author: Pekka Riikonen <priikone at silcnet.org>
 
-  Copyright (C) 1997 - 2005, 2007 Pekka Riikonen
+  Copyright (C) 1997 - 2009 Pekka Riikonen
 
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -189,8 +189,6 @@ SilcBool silc_server_create_channel_key(SilcServer server,
 SilcChannelEntry silc_server_save_channel_key(SilcServer server,
 					      SilcBuffer key_payload,
 					      SilcChannelEntry channel);
-void silc_server_perform_heartbeat(SilcPacketStream sock,
-				   void *hb_context);
 void silc_server_announce_get_channel_topic(SilcServer server,
 					    SilcChannelEntry channel,
 					    SilcBuffer *topic);
diff --git a/apps/silcd/server_internal.h b/apps/silcd/server_internal.h
index 64cca81..d4edd0d 100644
--- a/apps/silcd/server_internal.h
+++ b/apps/silcd/server_internal.h
@@ -210,6 +210,7 @@ do {						\
    ctype == SILC_CONN_ROUTER ? "Router" : "Unknown")
 
 /* Prototypes */
+SILC_TASK_CALLBACK(silc_server_do_heartbeat);
 SILC_TASK_CALLBACK(silc_server_rekey_final);
 SILC_TASK_CALLBACK(silc_server_rekey_callback);
 SILC_TASK_CALLBACK(silc_server_connect_to_router);
diff --git a/apps/silcd/server_util.h b/apps/silcd/server_util.h
index 79e1add..edf7dbd 100644
--- a/apps/silcd/server_util.h
+++ b/apps/silcd/server_util.h
@@ -4,7 +4,7 @@
 
   Author: Pekka Riikonen <priikone at silcnet.org>
 
-  Copyright (C) 1997 - 2005, 2007 Pekka Riikonen
+  Copyright (C) 1997 - 2009 Pekka Riikonen
 
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -142,6 +142,10 @@ SilcBool silc_server_check_umode_rights(SilcServer server,
 				    SilcClientEntry client,
 				    SilcUInt32 mode);
 
+/* Send the heartbeat packet. */
+void silc_server_send_heartbeat(SilcServer server,
+				SilcPacketStream sock);
+
 /* This function is used to send the notify packets and motd to the
    incoming client connection. */
 void silc_server_send_connect_notifys(SilcServer server,
@@ -224,9 +228,9 @@ SilcStatus silc_server_set_channel_pk_list(SilcServer server,
 /* Verifies the Authentication Payload `auth' with one of the public keys
    on the `channel' public key list. */
 SilcBool silc_server_verify_channel_auth(SilcServer server,
-				     SilcChannelEntry channel,
-				     SilcClientID *client_id,
-				     const unsigned char *auth,
-				     SilcUInt32 auth_len);
+					 SilcChannelEntry channel,
+					 SilcClientID *client_id,
+					 const unsigned char *auth,
+					 SilcUInt32 auth_len);
 
 #endif /* SERVER_UTIL_H */
diff --git a/apps/silcd/silc-server.spec b/apps/silcd/silc-server.spec
index d969987..bc1f3a2 100644
--- a/apps/silcd/silc-server.spec
+++ b/apps/silcd/silc-server.spec
@@ -1,6 +1,6 @@
 Summary: SILC Server
 Name: silc-server
-Version: 1.1.17
+Version: 1.1.18
 Release: 0.fc8
 License: GPL
 Group: Applications/Communications
diff --git a/apps/silcd/silcd.c b/apps/silcd/silcd.c
index e9694bb..de4ad03 100644
--- a/apps/silcd/silcd.c
+++ b/apps/silcd/silcd.c
@@ -309,7 +309,6 @@ SILC_TASK_CALLBACK(dump_stats)
 
 #undef STAT_OUTPUT
 
-#ifdef SILC_DEBUG
   /* Dump internal flags */
   fprintf(fdd, "\nDumping internal flags\n");
   fprintf(fdd, "  server_type            : %d\n", silcd->server_type);
@@ -340,9 +339,9 @@ SILC_TASK_CALLBACK(dump_stats)
       if (!silc_socket_stream_get_info(silc_packet_stream_get_stream(s),
 				       &sock, &hostname, &ip, &port))
 	continue;
-      fprintf(fdd, "  %d: host %s ip %s port %d type %d\n",
+      fprintf(fdd, "  %d: host %s ip %s port %d type %d idata %p\n",
 	      sock, hostname ? hostname : "N/A",
-	      ip ? ip : "N/A", port, idata ? idata->conn_type : 0);
+	      ip ? ip : "N/A", port, idata ? idata->conn_type : 0, idata);
     }
     silc_dlist_uninit(conns);
   }
@@ -361,64 +360,69 @@ SILC_TASK_CALLBACK(dump_stats)
     if (silc_idcache_get_all(silcd->local_list->servers, &list)) {
       c = 1;
       fprintf(fdd, "\nServers in local-list:\n");
+      silc_list_start(list);
       while ((id_cache = silc_list_get(list))) {
 	  server_entry = (SilcServerEntry)id_cache->context;
-	  fprintf(fdd, "  %d: name %s id %s status 0x%x\n", c,
+	  fprintf(fdd, "  %d: name %s id %s status 0x%x idata %p\n", c,
 		  server_entry->server_name ? server_entry->server_name :
 		  "N/A", server_entry->id ?
 		  silc_id_render(server_entry->id, SILC_ID_SERVER) : "N/A",
-		  server_entry->data.status);
+		  server_entry->data.status, server_entry);
 	  c++;
       }
     }
     if (silc_idcache_get_all(silcd->global_list->servers, &list)) {
 	fprintf(fdd, "\nServers in global-list:\n");
 	c = 1;
+        silc_list_start(list);
         while ((id_cache = silc_list_get(list))) {
 	  server_entry = (SilcServerEntry)id_cache->context;
-	  fprintf(fdd, "  %d: name %s id %s status 0x%x\n", c,
+	  fprintf(fdd, "  %d: name %s id %s status 0x%x idata %p\n", c,
 		  server_entry->server_name ? server_entry->server_name :
 		  "N/A", server_entry->id ?
 		  silc_id_render(server_entry->id, SILC_ID_SERVER) : "N/A",
-		  server_entry->data.status);
+		  server_entry->data.status, server_entry);
 	  c++;
         }
     }
     if (silc_idcache_get_all(silcd->local_list->clients, &list)) {
 	fprintf(fdd, "\nClients in local-list:\n");
 	c = 1;
+        silc_list_start(list);
         while ((id_cache = silc_list_get(list))) {
 	  client_entry = (SilcClientEntry)id_cache->context;
 	  server_entry = client_entry->router;
-	  fprintf(fdd, "  %d: name %s id %s status 0x%x from %s\n", c,
+	  fprintf(fdd, "  %d: name %s id %s status 0x%x from %s idata %p\n", c,
 		  client_entry->nickname ? client_entry->nickname :
 		  (unsigned char *)"N/A", client_entry->id ?
 		  silc_id_render(client_entry->id, SILC_ID_CLIENT) : "N/A",
 		  client_entry->data.status, server_entry ?
 		  server_entry->server_name ? server_entry->server_name :
-		  "N/A" : "local");
+		  "N/A" : "local", client_entry);
 	  c++;
 	}
     }
     if (silc_idcache_get_all(silcd->global_list->clients, &list)) {
 	fprintf(fdd, "\nClients in global-list:\n");
 	c = 1;
+        silc_list_start(list);
         while ((id_cache = silc_list_get(list))) {
 	  client_entry = (SilcClientEntry)id_cache->context;
 	  server_entry = client_entry->router;
-	  fprintf(fdd, "  %d: name %s id %s status 0x%x from %s\n", c,
+	  fprintf(fdd, "  %d: name %s id %s status 0x%x from %s idata %p\n", c,
 		  client_entry->nickname ? client_entry->nickname :
 		  (unsigned char *)"N/A", client_entry->id ?
 		  silc_id_render(client_entry->id, SILC_ID_CLIENT) : "N/A",
 		  client_entry->data.status, server_entry ?
 		  server_entry->server_name ? server_entry->server_name :
-		  "N/A" : "local");
+		  "N/A" : "local", client_entry);
 	  c++;
 	}
     }
     if (silc_idcache_get_all(silcd->local_list->channels, &list)) {
 	fprintf(fdd, "\nChannels in local-list:\n");
 	c = 1;
+        silc_list_start(list);
         while ((id_cache = silc_list_get(list))) {
 	  channel_entry = (SilcChannelEntry)id_cache->context;
 	  fprintf(fdd, "  %d: name %s id %s\n", c,
@@ -431,6 +435,7 @@ SILC_TASK_CALLBACK(dump_stats)
     if (silc_idcache_get_all(silcd->global_list->channels, &list)) {
 	fprintf(fdd, "\nChannels in global-list:\n");
 	c = 1;
+        silc_list_start(list);
         while ((id_cache = silc_list_get(list))) {
 	  channel_entry = (SilcChannelEntry)id_cache->context;
 	  fprintf(fdd, "  %d: name %s id %s\n", c,
@@ -441,7 +446,6 @@ SILC_TASK_CALLBACK(dump_stats)
 	}
     }
   }
-#endif
 
   fflush(fdd);
   fclose(fdd);
diff --git a/configure b/configure
index 4b99904..a6c148d 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.63 for Server 1.1.17.
+# Generated by GNU Autoconf 2.63 for Server 1.1.18.
 #
 # Report bugs to <silc-devel at lists.silcnet.org>.
 #
@@ -745,8 +745,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
 # Identity of this package.
 PACKAGE_NAME='Server'
 PACKAGE_TARNAME='silc-server'
-PACKAGE_VERSION='1.1.17'
-PACKAGE_STRING='Server 1.1.17'
+PACKAGE_VERSION='1.1.18'
+PACKAGE_STRING='Server 1.1.18'
 PACKAGE_BUGREPORT='silc-devel at lists.silcnet.org'
 
 # Factoring default headers for most tests.
@@ -858,7 +858,6 @@ LIPO
 NMEDIT
 DSYMUTIL
 lt_ECHO
-RANLIB
 AR
 OBJDUMP
 NM
@@ -868,6 +867,7 @@ LD
 FGREP
 SED
 LIBTOOL
+RANLIB
 am__fastdepCC_FALSE
 am__fastdepCC_TRUE
 CCDEPMODE
@@ -1561,7 +1561,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures Server 1.1.17 to adapt to many kinds of systems.
+\`configure' configures Server 1.1.18 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1632,7 +1632,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of Server 1.1.17:";;
+     short | recursive ) echo "Configuration of Server 1.1.18:";;
    esac
   cat <<\_ACEOF
 
@@ -1642,7 +1642,7 @@ Optional Features:
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
   --disable-dependency-tracking  speeds up one-time build
   --enable-dependency-tracking   do not reject slow dependency extractors
-  --enable-shared[=PKGS]  build shared libraries [default=yes]
+  --enable-shared[=PKGS]  build shared libraries [default=no]
   --enable-static[=PKGS]  build static libraries [default=yes]
   --enable-fast-install[=PKGS]
                           optimize for fast installation [default=yes]
@@ -1752,7 +1752,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-Server configure 1.1.17
+Server configure 1.1.18
 generated by GNU Autoconf 2.63
 
 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1766,7 +1766,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by Server $as_me 1.1.17, which was
+It was created by Server $as_me 1.1.18, which was
 generated by GNU Autoconf 2.63.  Invocation command line was
 
   $ $0 $@
@@ -2608,7 +2608,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='silc-server'
- VERSION='1.1.17'
+ VERSION='1.1.18'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -4475,6 +4475,129 @@ __SILC_HAVE_SIM=""
 __SILC_ENABLE_DEBUG=""
 
 
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { $as_echo "$as_me:$LINENO: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+# Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then
+  enableval=$enable_shared; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_shared=no
+fi
+
+
+
+
+
+
+
+
+
 case `pwd` in
   *\ * | *\	*)
     { $as_echo "$as_me:$LINENO: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
@@ -4960,13 +5083,13 @@ if test "${lt_cv_nm_interface+set}" = set; then
 else
   lt_cv_nm_interface="BSD nm"
   echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:4963: $ac_compile\"" >&5)
+  (eval echo "\"\$as_me:5086: $ac_compile\"" >&5)
   (eval "$ac_compile" 2>conftest.err)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:4966: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval echo "\"\$as_me:5089: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:4969: output\"" >&5)
+  (eval echo "\"\$as_me:5092: output\"" >&5)
   cat conftest.out >&5
   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
     lt_cv_nm_interface="MS dumpbin"
@@ -6160,7 +6283,7 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 6163 "configure"' > conftest.$ac_ext
+  echo '#line 6286 "configure"' > conftest.$ac_ext
   if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -7527,36 +7650,6 @@ done
   enable_win32_dll=no
 
 
-            # Check whether --enable-shared was given.
-if test "${enable_shared+set}" = set; then
-  enableval=$enable_shared; p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_shared=yes ;;
-    no) enable_shared=no ;;
-    *)
-      enable_shared=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-	IFS="$lt_save_ifs"
-	if test "X$pkg" = "X$p"; then
-	  enable_shared=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac
-else
-  enable_shared=yes
-fi
-
-
-
-
-
-
-
-
 
   # Check whether --enable-static was given.
 if test "${enable_static+set}" = set; then
@@ -8013,11 +8106,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8016: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:8109: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:8020: \$? = $ac_status" >&5
+   echo "$as_me:8113: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -8352,11 +8445,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8355: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:8448: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:8359: \$? = $ac_status" >&5
+   echo "$as_me:8452: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -8457,11 +8550,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8460: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:8553: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:8464: \$? = $ac_status" >&5
+   echo "$as_me:8557: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -8512,11 +8605,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8515: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:8608: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:8519: \$? = $ac_status" >&5
+   echo "$as_me:8612: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -11325,7 +11418,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11328 "configure"
+#line 11421 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11421,7 +11514,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11424 "configure"
+#line 11517 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11648,126 +11741,6 @@ CC="$lt_save_CC"
 # Only expand once:
 
 
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_RANLIB+set}" = set; then
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$RANLIB"; then
-  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
-  { $as_echo "$as_me:$LINENO: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
-else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_RANLIB"; then
-  ac_ct_RANLIB=$RANLIB
-  # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_RANLIB"; then
-  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_RANLIB="ranlib"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
-  { $as_echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
-else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_RANLIB" = x; then
-    RANLIB=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    RANLIB=$ac_ct_RANLIB
-  fi
-else
-  RANLIB="$ac_cv_prog_RANLIB"
-fi
-
-# Check whether --enable-shared was given.
-if test "${enable_shared+set}" = set; then
-  enableval=$enable_shared; p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_shared=yes ;;
-    no) enable_shared=no ;;
-    *)
-      enable_shared=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-	IFS="$lt_save_ifs"
-	if test "X$pkg" = "X$p"; then
-	  enable_shared=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac
-else
-  enable_shared=no
-fi
-
-
-
-
-
-
 
 # Header checking
 #
@@ -23906,7 +23879,7 @@ exec 6>&1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by Server $as_me 1.1.17, which was
+This file was extended by Server $as_me 1.1.18, which was
 generated by GNU Autoconf 2.63.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -23969,7 +23942,7 @@ Report bugs to <bug-autoconf at gnu.org>."
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_version="\\
-Server config.status 1.1.17
+Server config.status 1.1.18
 configured by $0, generated by GNU Autoconf 2.63,
   with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
 
@@ -24092,9 +24065,9 @@ AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
 sed_quote_subst='$sed_quote_subst'
 double_quote_subst='$double_quote_subst'
 delay_variable_subst='$delay_variable_subst'
+enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
 macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
 macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
-enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
 enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
 pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
 enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
@@ -25214,13 +25187,13 @@ available_tags=""
 
 # ### BEGIN LIBTOOL CONFIG
 
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
 # Which release of libtool.m4 was used?
 macro_version=$macro_version
 macro_revision=$macro_revision
 
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
 # Whether or not to build static libraries.
 build_old_libs=$enable_static
 
diff --git a/configure.ac b/configure.ac
index ab64842..65c9573 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2,7 +2,7 @@
 # To make changes edit the configure.ad file in the source tree.
 
 # Source: configure.ad
-# Generated: Sat Aug  1 09:55:37 EEST 2009 by priikone
+# Generated: Sat Sep 26 23:32:32 EEST 2009 by priikone
 # Distribution: Server
 # License: 
 
@@ -23,7 +23,7 @@
 #  GNU General Public License for more details.
 #
 
-AC_INIT([Server], [1.1.17], [silc-devel at lists.silcnet.org], [silc-server])
+AC_INIT([Server], [1.1.18], [silc-devel at lists.silcnet.org], [silc-server])
 AC_CANONICAL_SYSTEM
 AM_INIT_AUTOMAKE
 AC_PREREQ(2.52)
@@ -109,9 +109,9 @@ __SILC_HAVE_SIM=""
 __SILC_ENABLE_DEBUG=""
 
 
-AC_PROG_LIBTOOL
 AC_PROG_RANLIB
 AC_DISABLE_SHARED
+AC_PROG_LIBTOOL
 
 # Header checking
 #
diff --git a/doc/Makefile.am b/doc/Makefile.am
index bfface0..3aca8bf 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -2,7 +2,7 @@
 # To make changes edit the ./doc/Makefile.ad file in the source tree.
 
 # Source: ./doc/Makefile.ad
-# Generated: Sat Aug  1 09:55:37 EEST 2009 by priikone
+# Generated: Sat Sep 26 23:32:31 EEST 2009 by priikone
 # Distribution: Server
 # License: 
 
diff --git a/doc/Makefile.in b/doc/Makefile.in
index 54cec21..4074cd3 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -18,7 +18,7 @@
 # To make changes edit the ./doc/Makefile.ad file in the source tree.
 
 # Source: ./doc/Makefile.ad
-# Generated: Sat Aug  1 09:55:37 EEST 2009 by priikone
+# Generated: Sat Sep 26 23:32:31 EEST 2009 by priikone
 # Distribution: Server
 # License: 
 
diff --git a/includes/Makefile.am b/includes/Makefile.am
index f6a77a0..06b3c13 100644
--- a/includes/Makefile.am
+++ b/includes/Makefile.am
@@ -2,7 +2,7 @@
 # To make changes edit the ./includes/Makefile.ad file in the source tree.
 
 # Source: ./includes/Makefile.ad
-# Generated: Sat Aug  1 09:55:36 EEST 2009 by priikone
+# Generated: Sat Sep 26 23:32:30 EEST 2009 by priikone
 # Distribution: Server
 # License: 
 
diff --git a/includes/Makefile.in b/includes/Makefile.in
index 4c66cf3..2bc94d3 100644
--- a/includes/Makefile.in
+++ b/includes/Makefile.in
@@ -18,7 +18,7 @@
 # To make changes edit the ./includes/Makefile.ad file in the source tree.
 
 # Source: ./includes/Makefile.ad
-# Generated: Sat Aug  1 09:55:36 EEST 2009 by priikone
+# Generated: Sat Sep 26 23:32:30 EEST 2009 by priikone
 # Distribution: Server
 # License: 
 
diff --git a/includes/silcdistdefs.h b/includes/silcdistdefs.h
index 75f49e8..4836cdf 100644
--- a/includes/silcdistdefs.h
+++ b/includes/silcdistdefs.h
@@ -1,7 +1,7 @@
 /*
   Automatically generated by Autodist 1.4.  Do not edit.
 
-  Generated: Sat Aug  1 09:55:36 EEST 2009 by priikone
+  Generated: Sat Sep 26 23:32:29 EEST 2009 by priikone
   Distribution: Server
   License: 
 */
diff --git a/lib/Makefile.am b/lib/Makefile.am
index e2bd3a3..febb36c 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -2,7 +2,7 @@
 # To make changes edit the ./lib/Makefile.ad file in the source tree.
 
 # Source: ./lib/Makefile.ad
-# Generated: Sat Aug  1 09:55:36 EEST 2009 by priikone
+# Generated: Sat Sep 26 23:32:30 EEST 2009 by priikone
 # Distribution: Server
 # License: 
 
diff --git a/lib/Makefile.in b/lib/Makefile.in
index a38c657..7ad8eef 100644
--- a/lib/Makefile.in
+++ b/lib/Makefile.in
@@ -18,7 +18,7 @@
 # To make changes edit the ./lib/Makefile.ad file in the source tree.
 
 # Source: ./lib/Makefile.ad
-# Generated: Sat Aug  1 09:55:36 EEST 2009 by priikone
+# Generated: Sat Sep 26 23:32:30 EEST 2009 by priikone
 # Distribution: Server
 # License: 
 
diff --git a/lib/contrib/Makefile.am b/lib/contrib/Makefile.am
index 2d78c89..dcd1c35 100644
--- a/lib/contrib/Makefile.am
+++ b/lib/contrib/Makefile.am
@@ -2,7 +2,7 @@
 # To make changes edit the ./lib/contrib/Makefile.ad file in the source tree.
 
 # Source: ./lib/contrib/Makefile.ad
-# Generated: Sat Aug  1 09:55:36 EEST 2009 by priikone
+# Generated: Sat Sep 26 23:32:30 EEST 2009 by priikone
 # Distribution: Server
 # License: 
 
diff --git a/lib/contrib/Makefile.in b/lib/contrib/Makefile.in
index 26aed32..6975169 100644
--- a/lib/contrib/Makefile.in
+++ b/lib/contrib/Makefile.in
@@ -18,7 +18,7 @@
 # To make changes edit the ./lib/contrib/Makefile.ad file in the source tree.
 
 # Source: ./lib/contrib/Makefile.ad
-# Generated: Sat Aug  1 09:55:36 EEST 2009 by priikone
+# Generated: Sat Sep 26 23:32:30 EEST 2009 by priikone
 # Distribution: Server
 # License: 
 
diff --git a/lib/silcapputil/Makefile.am b/lib/silcapputil/Makefile.am
index da256c0..c032fad 100644
--- a/lib/silcapputil/Makefile.am
+++ b/lib/silcapputil/Makefile.am
@@ -2,7 +2,7 @@
 # To make changes edit the ./lib/silcapputil/Makefile.ad file in the source tree.
 
 # Source: ./lib/silcapputil/Makefile.ad
-# Generated: Sat Aug  1 09:55:36 EEST 2009 by priikone
+# Generated: Sat Sep 26 23:32:31 EEST 2009 by priikone
 # Distribution: Server
 # License: 
 
diff --git a/lib/silcapputil/Makefile.in b/lib/silcapputil/Makefile.in
index 40bef37..cc93207 100644
--- a/lib/silcapputil/Makefile.in
+++ b/lib/silcapputil/Makefile.in
@@ -18,7 +18,7 @@
 # To make changes edit the ./lib/silcapputil/Makefile.ad file in the source tree.
 
 # Source: ./lib/silcapputil/Makefile.ad
-# Generated: Sat Aug  1 09:55:36 EEST 2009 by priikone
+# Generated: Sat Sep 26 23:32:31 EEST 2009 by priikone
 # Distribution: Server
 # License: 
 
diff --git a/lib/silcasn1/Makefile.am b/lib/silcasn1/Makefile.am
index 80cfc3c..544196a 100644
--- a/lib/silcasn1/Makefile.am
+++ b/lib/silcasn1/Makefile.am
@@ -2,7 +2,7 @@
 # To make changes edit the ./lib/silcasn1/Makefile.ad file in the source tree.
 
 # Source: ./lib/silcasn1/Makefile.ad
-# Generated: Sat Aug  1 09:55:37 EEST 2009 by priikone
+# Generated: Sat Sep 26 23:32:31 EEST 2009 by priikone
 # Distribution: Server
 # License: 
 
diff --git a/lib/silcasn1/Makefile.in b/lib/silcasn1/Makefile.in
index 4e15fef..343f571 100644
--- a/lib/silcasn1/Makefile.in
+++ b/lib/silcasn1/Makefile.in
@@ -18,7 +18,7 @@
 # To make changes edit the ./lib/silcasn1/Makefile.ad file in the source tree.
 
 # Source: ./lib/silcasn1/Makefile.ad
-# Generated: Sat Aug  1 09:55:37 EEST 2009 by priikone
+# Generated: Sat Sep 26 23:32:31 EEST 2009 by priikone
 # Distribution: Server
 # License: 
 
diff --git a/lib/silccore/Makefile.am b/lib/silccore/Makefile.am
index 8fc3b82..e57548c 100644
--- a/lib/silccore/Makefile.am
+++ b/lib/silccore/Makefile.am
@@ -2,7 +2,7 @@
 # To make changes edit the ./lib/silccore/Makefile.ad file in the source tree.
 
 # Source: ./lib/silccore/Makefile.ad
-# Generated: Sat Aug  1 09:55:37 EEST 2009 by priikone
+# Generated: Sat Sep 26 23:32:31 EEST 2009 by priikone
 # Distribution: Server
 # License: 
 
diff --git a/lib/silccore/Makefile.in b/lib/silccore/Makefile.in
index c1bbf30..40efaa7 100644
--- a/lib/silccore/Makefile.in
+++ b/lib/silccore/Makefile.in
@@ -18,7 +18,7 @@
 # To make changes edit the ./lib/silccore/Makefile.ad file in the source tree.
 
 # Source: ./lib/silccore/Makefile.ad
-# Generated: Sat Aug  1 09:55:37 EEST 2009 by priikone
+# Generated: Sat Sep 26 23:32:31 EEST 2009 by priikone
 # Distribution: Server
 # License: 
 
diff --git a/lib/silccrypt/Makefile.am b/lib/silccrypt/Makefile.am
index eef600a..39999c1 100644
--- a/lib/silccrypt/Makefile.am
+++ b/lib/silccrypt/Makefile.am
@@ -2,7 +2,7 @@
 # To make changes edit the ./lib/silccrypt/Makefile.ad file in the source tree.
 
 # Source: ./lib/silccrypt/Makefile.ad
-# Generated: Sat Aug  1 09:55:36 EEST 2009 by priikone
+# Generated: Sat Sep 26 23:32:30 EEST 2009 by priikone
 # Distribution: Server
 # License: 
 
diff --git a/lib/silccrypt/Makefile.in b/lib/silccrypt/Makefile.in
index 89ac5e8..97157f9 100644
--- a/lib/silccrypt/Makefile.in
+++ b/lib/silccrypt/Makefile.in
@@ -18,7 +18,7 @@
 # To make changes edit the ./lib/silccrypt/Makefile.ad file in the source tree.
 
 # Source: ./lib/silccrypt/Makefile.ad
-# Generated: Sat Aug  1 09:55:36 EEST 2009 by priikone
+# Generated: Sat Sep 26 23:32:30 EEST 2009 by priikone
 # Distribution: Server
 # License: 
 
diff --git a/lib/silchttp/Makefile.am b/lib/silchttp/Makefile.am
index 91b7e37..bb1a408 100644
--- a/lib/silchttp/Makefile.am
+++ b/lib/silchttp/Makefile.am
@@ -2,7 +2,7 @@
 # To make changes edit the ./lib/silchttp/Makefile.ad file in the source tree.
 
 # Source: ./lib/silchttp/Makefile.ad
-# Generated: Sat Aug  1 09:55:37 EEST 2009 by priikone
+# Generated: Sat Sep 26 23:32:31 EEST 2009 by priikone
 # Distribution: Server
 # License: 
 
diff --git a/lib/silchttp/Makefile.in b/lib/silchttp/Makefile.in
index af29627..2da3fe3 100644
--- a/lib/silchttp/Makefile.in
+++ b/lib/silchttp/Makefile.in
@@ -18,7 +18,7 @@
 # To make changes edit the ./lib/silchttp/Makefile.ad file in the source tree.
 
 # Source: ./lib/silchttp/Makefile.ad
-# Generated: Sat Aug  1 09:55:37 EEST 2009 by priikone
+# Generated: Sat Sep 26 23:32:31 EEST 2009 by priikone
 # Distribution: Server
 # License: 
 
diff --git a/lib/silcmath/Makefile.am b/lib/silcmath/Makefile.am
index 8d28bd7..e6fdf74 100644
--- a/lib/silcmath/Makefile.am
+++ b/lib/silcmath/Makefile.am
@@ -2,7 +2,7 @@
 # To make changes edit the ./lib/silcmath/Makefile.ad file in the source tree.
 
 # Source: ./lib/silcmath/Makefile.ad
-# Generated: Sat Aug  1 09:55:36 EEST 2009 by priikone
+# Generated: Sat Sep 26 23:32:30 EEST 2009 by priikone
 # Distribution: Server
 # License: 
 
diff --git a/lib/silcmath/Makefile.in b/lib/silcmath/Makefile.in
index 51a3dd5..1fd4c5e 100644
--- a/lib/silcmath/Makefile.in
+++ b/lib/silcmath/Makefile.in
@@ -18,7 +18,7 @@
 # To make changes edit the ./lib/silcmath/Makefile.ad file in the source tree.
 
 # Source: ./lib/silcmath/Makefile.ad
-# Generated: Sat Aug  1 09:55:36 EEST 2009 by priikone
+# Generated: Sat Sep 26 23:32:30 EEST 2009 by priikone
 # Distribution: Server
 # License: 
 
diff --git a/lib/silcske/Makefile.am b/lib/silcske/Makefile.am
index f6e47cb..3a7309d 100644
--- a/lib/silcske/Makefile.am
+++ b/lib/silcske/Makefile.am
@@ -2,7 +2,7 @@
 # To make changes edit the ./lib/silcske/Makefile.ad file in the source tree.
 
 # Source: ./lib/silcske/Makefile.ad
-# Generated: Sat Aug  1 09:55:37 EEST 2009 by priikone
+# Generated: Sat Sep 26 23:32:31 EEST 2009 by priikone
 # Distribution: Server
 # License: 
 
diff --git a/lib/silcske/Makefile.in b/lib/silcske/Makefile.in
index 9b30a27..22321c7 100644
--- a/lib/silcske/Makefile.in
+++ b/lib/silcske/Makefile.in
@@ -18,7 +18,7 @@
 # To make changes edit the ./lib/silcske/Makefile.ad file in the source tree.
 
 # Source: ./lib/silcske/Makefile.ad
-# Generated: Sat Aug  1 09:55:37 EEST 2009 by priikone
+# Generated: Sat Sep 26 23:32:31 EEST 2009 by priikone
 # Distribution: Server
 # License: 
 
diff --git a/lib/silcskr/Makefile.am b/lib/silcskr/Makefile.am
index fb0260b..93056a2 100644
--- a/lib/silcskr/Makefile.am
+++ b/lib/silcskr/Makefile.am
@@ -2,7 +2,7 @@
 # To make changes edit the ./lib/silcskr/Makefile.ad file in the source tree.
 
 # Source: ./lib/silcskr/Makefile.ad
-# Generated: Sat Aug  1 09:55:36 EEST 2009 by priikone
+# Generated: Sat Sep 26 23:32:31 EEST 2009 by priikone
 # Distribution: Server
 # License: 
 
diff --git a/lib/silcskr/Makefile.in b/lib/silcskr/Makefile.in
index 77aab2f..f3c69ea 100644
--- a/lib/silcskr/Makefile.in
+++ b/lib/silcskr/Makefile.in
@@ -18,7 +18,7 @@
 # To make changes edit the ./lib/silcskr/Makefile.ad file in the source tree.
 
 # Source: ./lib/silcskr/Makefile.ad
-# Generated: Sat Aug  1 09:55:36 EEST 2009 by priikone
+# Generated: Sat Sep 26 23:32:31 EEST 2009 by priikone
 # Distribution: Server
 # License: 
 
diff --git a/lib/silcutil/Makefile.am b/lib/silcutil/Makefile.am
index 82e449f..79b8419 100644
--- a/lib/silcutil/Makefile.am
+++ b/lib/silcutil/Makefile.am
@@ -2,7 +2,7 @@
 # To make changes edit the ./lib/silcutil/Makefile.ad file in the source tree.
 
 # Source: ./lib/silcutil/Makefile.ad
-# Generated: Sat Aug  1 09:55:37 EEST 2009 by priikone
+# Generated: Sat Sep 26 23:32:31 EEST 2009 by priikone
 # Distribution: Server
 # License: 
 
diff --git a/lib/silcutil/Makefile.in b/lib/silcutil/Makefile.in
index 60dad02..8cf3475 100644
--- a/lib/silcutil/Makefile.in
+++ b/lib/silcutil/Makefile.in
@@ -18,7 +18,7 @@
 # To make changes edit the ./lib/silcutil/Makefile.ad file in the source tree.
 
 # Source: ./lib/silcutil/Makefile.ad
-# Generated: Sat Aug  1 09:55:37 EEST 2009 by priikone
+# Generated: Sat Sep 26 23:32:31 EEST 2009 by priikone
 # Distribution: Server
 # License: 
 
diff --git a/lib/silcutil/unix/silcunixnet.c b/lib/silcutil/unix/silcunixnet.c
index 2332672..cdf382c 100644
--- a/lib/silcutil/unix/silcunixnet.c
+++ b/lib/silcutil/unix/silcunixnet.c
@@ -115,6 +115,7 @@ SILC_TASK_CALLBACK(silc_net_accept)
 
   /* Set socket options */
   silc_net_set_socket_opt(sock, SOL_SOCKET, SO_REUSEADDR, 1);
+  silc_net_set_socket_opt(sock, SOL_SOCKET, SO_KEEPALIVE, 1);
 
   /* Create socket stream */
   silc_socket_tcp_stream_create(sock, listener->lookup,

-- 
server for the SILC protocol



More information about the Pkg-silc-commits mailing list