Fixed a bug in backup server IP comparison in silc_server_backup_get.
authorPekka Riikonen <priikone@silcnet.org>
Sun, 6 Oct 2002 13:53:57 +0000 (13:53 +0000)
committerPekka Riikonen <priikone@silcnet.org>
Sun, 6 Oct 2002 13:53:57 +0000 (13:53 +0000)
Also, the port is now used in the comparison as well.

CHANGES
TODO
apps/silcd/server.c
apps/silcd/server_backup.c
lib/silccore/silcid.h

diff --git a/CHANGES b/CHANGES
index 200ec63b62b09884d1d113a09f46ce731d826d9d..e19def6d87e0e0bb5ce5fc3131ad1df5a07b9d70 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,8 +1,14 @@
-Sun Oct  6 13:20:04 EEST 2002  Pekka Riikonen <priikone@silcnet.org>
+Sun Oct  6 16:48:32 EEST 2002  Pekka Riikonen <priikone@silcnet.org>
 
        * 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 <priikone@silcnet.org>
 
        * If packet processing fails (like integrity check fails)
diff --git a/TODO b/TODO
index a978578f1512371e3bcdf955f06419b445c51f82..e59cf674cb32f41e08e3c01e0c7e3403514309e6 100644 (file)
--- 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.
 
index 4ac168f004c8bb514db393d2a775aae10e4f3a7e..0a67cbc0695b76d8bb7aa6a73b0a1f1a1f85549b 100644 (file)
@@ -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 */
index 5d7ff35c4bc8ad39acefff0d384d857f334db50a..12479fff6c49866e925aaa14e9fe9dfc46ec3438 100644 (file)
@@ -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;
index 4a042d16f71de5a3ea8355c84c6374ab0c5d5b68..9fb5630cf3d2d155f8d488608a84582c301a71c3 100644 (file)
@@ -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;
 /***/