From 7bb6974af2a8c8fd3bfd6ef0731bb1a534e3c324 Mon Sep 17 00:00:00 2001 From: Pekka Riikonen Date: Sun, 6 Oct 2002 13:53:57 +0000 Subject: [PATCH] Fixed a bug in backup server IP comparison in silc_server_backup_get. Also, the port is now used in the comparison as well. --- CHANGES | 8 +++++++- TODO | 3 --- apps/silcd/server.c | 3 ++- apps/silcd/server_backup.c | 7 +++++-- lib/silccore/silcid.h | 10 +++++----- 5 files changed, 19 insertions(+), 12 deletions(-) diff --git a/CHANGES b/CHANGES index 200ec63b..e19def6d 100644 --- a/CHANGES +++ b/CHANGES @@ -1,8 +1,14 @@ -Sun Oct 6 13:20:04 EEST 2002 Pekka Riikonen +Sun Oct 6 16:48:32 EEST 2002 Pekka Riikonen * Don't swtich to become primary router if we are backup if decryption error has occurred. Affected file silcd/server.c. + * Fixed a bug in backup router IP address comparison in + silc_server_backup_get. + + Save now also the port of the server/router and use that + in comparison as well. Affected file silcd/server_backup.c. + Thu Sep 26 13:51:02 CEST 2002 Pekka Riikonen * If packet processing fails (like integrity check fails) diff --git a/TODO b/TODO index a978578f..e59cf674 100644 --- a/TODO +++ b/TODO @@ -30,9 +30,6 @@ TODO/bugs In SILC Client Library TODO/bugs In SILC Server ======================== - o Still ghost clients in server signoff from server having secondary - interface. - o Normal server doesn't reconnect to backup router if connection was lost. diff --git a/apps/silcd/server.c b/apps/silcd/server.c index 4ac168f0..0a67cbc0 100644 --- a/apps/silcd/server.c +++ b/apps/silcd/server.c @@ -1411,7 +1411,8 @@ SILC_TASK_CALLBACK(silc_server_connect_to_router_final) /* If we are backup router then this primary router is whom we are backing up. */ if (server->server_type == SILC_BACKUP_ROUTER) - silc_server_backup_add(server, server->id_entry, sock->ip, 0, TRUE); + silc_server_backup_add(server, server->id_entry, sock->ip, + sconn->remote_port, TRUE); } } else { /* Add this server to be our backup router */ diff --git a/apps/silcd/server_backup.c b/apps/silcd/server_backup.c index 5d7ff35c..12479fff 100644 --- a/apps/silcd/server_backup.c +++ b/apps/silcd/server_backup.c @@ -96,6 +96,7 @@ void silc_server_backup_add(SilcServer server, SilcServerEntry backup_server, if (!server->backup->servers[i].server) { server->backup->servers[i].server = backup_server; server->backup->servers[i].local = local; + server->backup->servers[i].port = htons(port); memset(server->backup->servers[i].ip.data, 0, sizeof(server->backup->servers[i].ip.data)); silc_net_addr2bin(ip, server->backup->servers[i].ip.data, @@ -110,6 +111,7 @@ void silc_server_backup_add(SilcServer server, SilcServerEntry backup_server, (i + 1)); server->backup->servers[i].server = backup_server; server->backup->servers[i].local = local; + server->backup->servers[i].port = htons(port); memset(server->backup->servers[i].ip.data, 0, sizeof(server->backup->servers[i].ip.data)); silc_net_addr2bin(ip, server->backup->servers[i].ip.data, @@ -130,7 +132,8 @@ SilcServerEntry silc_server_backup_get(SilcServer server, for (i = 0; i < server->backup->servers_count; i++) { if (server->backup->servers[i].server && - !memcmp(&server->backup->servers[i].ip, &server_id->ip.data, + server->backup->servers[i].port == server_id->port && + !memcmp(server->backup->servers[i].ip.data, server_id->ip.data, sizeof(server_id->ip.data))) { SILC_LOG_DEBUG(("Found backup router %s for %s", server->backup->servers[i].server->server_name, @@ -244,7 +247,7 @@ bool silc_server_backup_replaced_get(SilcServer server, for (i = 0; i < server->backup->replaced_count; i++) { if (!server->backup->replaced[i]) continue; - if (!memcmp(&server->backup->replaced[i]->ip, &server_id->ip.data, + if (!memcmp(server->backup->replaced[i]->ip.data, server_id->ip.data, sizeof(server_id->ip.data))) { if (server_entry) *server_entry = server->backup->replaced[i]->server; diff --git a/lib/silccore/silcid.h b/lib/silccore/silcid.h index 4a042d16..9fb5630c 100644 --- a/lib/silccore/silcid.h +++ b/lib/silccore/silcid.h @@ -257,8 +257,8 @@ typedef struct { */ typedef struct { SilcIDIP ip; /* n bit IP address */ - SilcUInt16 port; /* 16 bit port */ - SilcUInt16 rnd; /* 16 bit random number */ + SilcUInt16 port; /* 16 bit port */ + SilcUInt16 rnd; /* 16 bit random number */ } SilcServerID; /***/ @@ -302,9 +302,9 @@ typedef struct { * SOURCE */ typedef struct { - SilcIDIP ip; /* n bit IP address */ - SilcUInt16 port; /* 16 bit port */ - SilcUInt16 rnd; /* 16 bit random number */ + SilcIDIP ip; /* n bit IP address */ + SilcUInt16 port; /* 16 bit port */ + SilcUInt16 rnd; /* 16 bit random number */ } SilcChannelID; /***/ -- 2.24.0