updates.
[silc.git] / apps / silcd / server_util.c
index 4cb11f4b76d1c40b032d5dc69b40b5966443172a..ea53991371ac1606f17f8c5eb89362a4ae0a617d 100644 (file)
@@ -194,10 +194,9 @@ bool silc_server_remove_clients_by_server(SilcServer server,
          client->data.status &= ~SILC_IDLIST_STATUS_REGISTERED;
          id_cache->expire = SILC_ID_CACHE_EXPIRE_DEF;
        } else {
-         silc_idlist_del_client(server->local_list, client);
-
          /* Remove this client from watcher list if it is */
          silc_server_del_from_watcher_list(server, client);
+         silc_idlist_del_client(server->local_list, client);
        }
 
        if (!silc_idcache_list_next(list, &id_cache))
@@ -1019,6 +1018,10 @@ bool silc_server_check_cmode_rights(SilcServer server,
   if (is_op && is_fo)
     return TRUE;
 
+  /* Founder emplies operator */
+  if (is_fo)
+    is_op = TRUE;
+
   /* We know that client is channel operator, check that they are not
      changing anything that requires channel founder rights. Rest of the
      modes are available automatically for channel operator. */
@@ -1266,7 +1269,6 @@ void silc_server_kill_client(SilcServer server,
     if (!silc_idlist_del_client(server->global_list, remote_client)) {
       /* Remove this client from watcher list if it is */
       silc_server_del_from_watcher_list(server, remote_client);
-
       silc_idlist_del_client(server->local_list, remote_client);  
     }
   }