happen.
+Tue Sep 10 09:50:08 CEST 2002 Pekka Riikonen <priikone@silcnet.org>
+
+ * Assure that endless loop cannot happen with detached client
+ resolving on normal server. Added idlist status
+ SILC_IDLIST_STATUS_RESUME_RES. Affected files are
+ silcd/idlist.h and silcd/packet_receive.c.
+
Mon Sep 9 12:18:18 CEST 2002 Pekka Riikonen <priikone@silcnet.org>
* Incoming file transfer request cannot use same session as
TODO/bugs In SILC Server
========================
- o Possibility of endless loop with detached client resolving in server.
- Has happened once. Check the logic.
-
o Backup router can accidently free its own id_entry and ID? Could happen
when some server is connecting and connecting fails (like too many
connections, etc). Some weird crashes relating to this occurred.
#define SILC_IDLIST_STATUS_DISABLED 0x08 /* Entry is disabled */
#define SILC_IDLIST_STATUS_RESUMED 0x10 /* Entry is resumed */
#define SILC_IDLIST_STATUS_LOCAL 0x20 /* Entry locally connected */
+#define SILC_IDLIST_STATUS_RESUME_RES 0x40 /* Entry resolved while
+ resuming */
/*
Generic ID list data structure.
silc_server_free_sock_user_data(server, sock, NULL);
goto out;
}
+
+ client->data.status |= SILC_IDLIST_STATUS_RESUME_RES;
}
/* Reprocess the packet */
resolve = TRUE;
if (!detached_client->nickname)
resolve = TRUE;
+ if (detached_client->data.status & SILC_IDLIST_STATUS_RESUME_RES)
+ resolve = FALSE;
if (resolve) {
if (server->server_type == SILC_SERVER && !server->standalone) {
silc_idlist_add_data(detached_client, idata);
detached_client->data.status |= SILC_IDLIST_STATUS_REGISTERED;
detached_client->data.status |= SILC_IDLIST_STATUS_RESUMED;
+ detached_client->data.status &= ~SILC_IDLIST_STATUS_RESUME_RES;
detached_client->mode &= ~SILC_UMODE_DETACHED;
server->stat.my_detached--;