Added silc_server_remove_servers_by_server to remove servers
[silc.git] / apps / silcd / packet_receive.c
index a9f3f267f9300271910401ba816adc04f05c9224..4e07b0ce40502355bbca0bb2b7f7580e33ee4c71 100644 (file)
@@ -1298,9 +1298,14 @@ void silc_server_notify(SilcServer server,
     if (SILC_IS_LOCAL(server_entry))
       break;
 
-    /* Free all client entries that this server owns as they will
-       become invalid now as well. */
-    silc_server_remove_clients_by_server(server, server_entry, TRUE);
+    /* Remove all servers that are originated from this server, and
+       remove the clients of those servers too. */
+    silc_server_remove_servers_by_server(server, server_entry, TRUE);
+
+    /* Remove the clients that this server owns as they will become
+       invalid now too. */
+    silc_server_remove_clients_by_server(server, server_entry,
+                                        server_entry, TRUE);
     silc_server_backup_del(server, server_entry);
 
     /* Remove the server entry */
@@ -1551,12 +1556,6 @@ void silc_server_notify(SilcServer server,
       goto out;
     SILC_GET32_MSB(mode, tmp);
 
-    /* Check that mode changing is allowed. */
-    if (!silc_server_check_umode_rights(server, client, mode)) {
-      SILC_LOG_DEBUG(("UMODE change is not allowed"));
-      goto out;
-    }
-
     /* Remove internal resumed flag if client is marked detached now */
     if (mode & SILC_UMODE_DETACHED)
       client->data.status &= ~SILC_IDLIST_STATUS_RESUMED;