projects
/
silc.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
ff6a990
)
Make sure client entry is not expired more than once
author
Pekka Riikonen
<priikone@silcnet.org>
Sun, 22 Jun 2008 08:03:58 +0000
(11:03 +0300)
committer
Pekka Riikonen
<priikone@silcnet.org>
Sun, 22 Jun 2008 08:03:58 +0000
(11:03 +0300)
apps/silcd/command_reply.c
patch
|
blob
|
history
apps/silcd/idlist.c
patch
|
blob
|
history
apps/silcd/packet_receive.c
patch
|
blob
|
history
apps/silcd/server.c
patch
|
blob
|
history
apps/silcd/server_util.c
patch
|
blob
|
history
diff --git
a/apps/silcd/command_reply.c
b/apps/silcd/command_reply.c
index 36eb1368497914f62fe0e3623ee9276aa6f71b08..d7202f2714344505b3ff27a4bdcf2ea461c9c959 100644
(file)
--- a/
apps/silcd/command_reply.c
+++ b/
apps/silcd/command_reply.c
@@
-533,6
+533,7
@@
silc_server_command_reply_whowas_save(SilcServerCommandReplyContext cmd)
client->servername = servername[0] ? strdup(servername) : NULL;
client->data.status |= SILC_IDLIST_STATUS_RESOLVED;
client->data.status &= ~SILC_IDLIST_STATUS_RESOLVING;
client->servername = servername[0] ? strdup(servername) : NULL;
client->data.status |= SILC_IDLIST_STATUS_RESOLVED;
client->data.status &= ~SILC_IDLIST_STATUS_RESOLVING;
+ client->data.status &= ~SILC_IDLIST_STATUS_REGISTERED;
/* Update cache entry */
silc_idcache_update_by_context(global ? server->global_list->clients :
/* Update cache entry */
silc_idcache_update_by_context(global ? server->global_list->clients :
@@
-543,10
+544,12
@@
silc_server_command_reply_whowas_save(SilcServerCommandReplyContext cmd)
/* If client is global and is not on any channel then add that we'll
expire the entry after a while. */
if (global) {
/* If client is global and is not on any channel then add that we'll
expire the entry after a while. */
if (global) {
- silc_idlist_find_client_by_id(server->global_list, client->id,
- FALSE, &cache);
- if (!silc_hash_table_count(client->channels))
+ client = silc_idlist_find_client_by_id(server->global_list, client->id,
+ FALSE, &cache);
+ if (client && !silc_hash_table_count(client->channels)) {
+ silc_dlist_del(server->expired_clients, client);
silc_dlist_add(server->expired_clients, client);
silc_dlist_add(server->expired_clients, client);
+ }
}
return TRUE;
}
return TRUE;
diff --git
a/apps/silcd/idlist.c
b/apps/silcd/idlist.c
index e4dbfbd6077e69c152deb88cf4b8a4a839c0f30e..1c75d7181bf0b8a73af4a9ed3c5562771a8ec2eb 100644
(file)
--- a/
apps/silcd/idlist.c
+++ b/
apps/silcd/idlist.c
@@
-326,7
+326,7
@@
silc_idlist_add_client(SilcIDList id_list, char *nickname, char *username,
int ret;
ret = silc_parse_userfqdn(username, u, sizeof(u), h, sizeof(h));
int ret;
ret = silc_parse_userfqdn(username, u, sizeof(u), h, sizeof(h));
- if (!
u
)
+ if (!
ret
)
return NULL;
if (!silc_identifier_verify(u, strlen(u), SILC_STRING_UTF8, 128))
return NULL;
return NULL;
if (!silc_identifier_verify(u, strlen(u), SILC_STRING_UTF8, 128))
return NULL;
diff --git
a/apps/silcd/packet_receive.c
b/apps/silcd/packet_receive.c
index 786c21a088fd52a8b1896ba385d664b1063dedbe..c8d4068d765b444754a4dc29c7301099d95cca14 100644
(file)
--- a/
apps/silcd/packet_receive.c
+++ b/
apps/silcd/packet_receive.c
@@
-356,6
+356,7
@@
static void silc_server_notify_process(SilcServer server,
client->mode = 0;
client->router = NULL;
client->connection = NULL;
client->mode = 0;
client->router = NULL;
client->connection = NULL;
+ silc_dlist_del(server->expired_clients, client);
silc_dlist_add(server->expired_clients, client);
break;
silc_dlist_add(server->expired_clients, client);
break;
@@
-1504,6
+1505,7
@@
static void silc_server_notify_process(SilcServer server,
client->mode = 0;
client->router = NULL;
client->connection = NULL;
client->mode = 0;
client->router = NULL;
client->connection = NULL;
+ silc_dlist_del(server->expired_clients, client);
silc_dlist_add(server->expired_clients, client);
break;
}
silc_dlist_add(server->expired_clients, client);
break;
}
@@
-3951,6
+3953,7
@@
void silc_server_resume_client(SilcServer server,
detached_client->data.status |= SILC_IDLIST_STATUS_RESUMED;
detached_client->data.status &= ~SILC_IDLIST_STATUS_LOCAL;
silc_dlist_del(server->expired_clients, detached_client);
detached_client->data.status |= SILC_IDLIST_STATUS_RESUMED;
detached_client->data.status &= ~SILC_IDLIST_STATUS_LOCAL;
silc_dlist_del(server->expired_clients, detached_client);
+ silc_dlist_del(server->expired_clients, detached_client);
/* Check if anyone is watching this client */
if (server->server_type == SILC_ROUTER)
/* Check if anyone is watching this client */
if (server->server_type == SILC_ROUTER)
diff --git
a/apps/silcd/server.c
b/apps/silcd/server.c
index 73f363613f1a24ae59237900b29a411248142b12..aff2df5c1aeb8e710d0f852ea536cf2542d677b4 100644
(file)
--- a/
apps/silcd/server.c
+++ b/
apps/silcd/server.c
@@
-1263,13
+1263,10
@@
SILC_TASK_CALLBACK(silc_server_purge_expired_clients)
silc_dlist_start(server->expired_clients);
while ((client = silc_dlist_get(server->expired_clients))) {
silc_dlist_start(server->expired_clients);
while ((client = silc_dlist_get(server->expired_clients))) {
- if (client->data.status & SILC_IDLIST_STATUS_REGISTERED)
- continue;
-
/* For unregistered clients the created timestamp is actually
unregistered timestamp. Make sure client remains in history
at least 500 seconds. */
/* For unregistered clients the created timestamp is actually
unregistered timestamp. Make sure client remains in history
at least 500 seconds. */
- if (curtime - client->data.created < 500)
+ if (c
lient->data.created && c
urtime - client->data.created < 500)
continue;
id_list = (client->data.status & SILC_IDLIST_STATUS_LOCAL ?
continue;
id_list = (client->data.status & SILC_IDLIST_STATUS_LOCAL ?
@@
-3036,6
+3033,7
@@
void silc_server_free_client_data(SilcServer server,
client->router = NULL;
client->connection = NULL;
client->data.created = silc_time();
client->router = NULL;
client->connection = NULL;
client->data.created = silc_time();
+ silc_dlist_del(server->expired_clients, client);
silc_dlist_add(server->expired_clients, client);
} else {
/* Delete directly since we're shutting down server */
silc_dlist_add(server->expired_clients, client);
} else {
/* Delete directly since we're shutting down server */
diff --git
a/apps/silcd/server_util.c
b/apps/silcd/server_util.c
index 14a1a240c9bfa62fbdeabf70dfbf66500ce332b0..274bd0f58b483bbefbbe4bd2baf06740056f30f3 100644
(file)
--- a/
apps/silcd/server_util.c
+++ b/
apps/silcd/server_util.c
@@
-228,6
+228,7
@@
SilcBool silc_server_remove_clients_by_server(SilcServer server,
client->mode = 0;
client->router = NULL;
client->connection = NULL;
client->mode = 0;
client->router = NULL;
client->connection = NULL;
+ silc_dlist_del(server->expired_clients, client);
silc_dlist_add(server->expired_clients, client);
} else {
silc_idlist_del_data(client);
silc_dlist_add(server->expired_clients, client);
} else {
silc_idlist_del_data(client);
@@
-289,6
+290,7
@@
SilcBool silc_server_remove_clients_by_server(SilcServer server,
client->mode = 0;
client->router = NULL;
client->connection = NULL;
client->mode = 0;
client->router = NULL;
client->connection = NULL;
+ silc_dlist_del(server->expired_clients, client);
silc_dlist_add(server->expired_clients, client);
} else {
silc_idlist_del_data(client);
silc_dlist_add(server->expired_clients, client);
} else {
silc_idlist_del_data(client);