updates.
[silc.git] / apps / silcd / server_util.c
index 147346dea24c7ec8e68c1863c3b710aab77029ab..5e9bdbd7c41d6b9db8c8f74ad6d4e0f85a6b8f66 100644 (file)
@@ -216,7 +216,7 @@ bool silc_server_remove_clients_by_server(SilcServer server,
 
        /* Update statistics */
        server->stat.clients--;
-       if (server->server_type == SILC_ROUTER)
+       if (server->stat.cell_clients)
          server->stat.cell_clients--;
        SILC_OPER_STATS_UPDATE(client, server, SILC_UMODE_SERVER_OPERATOR);
        SILC_OPER_STATS_UPDATE(client, router, SILC_UMODE_ROUTER_OPERATOR);
@@ -280,7 +280,7 @@ bool silc_server_remove_clients_by_server(SilcServer server,
 
        /* Update statistics */
        server->stat.clients--;
-       if (server->server_type == SILC_ROUTER)
+       if (server->stat.cell_clients)
          server->stat.cell_clients--;
        SILC_OPER_STATS_UPDATE(client, server, SILC_UMODE_SERVER_OPERATOR);
        SILC_OPER_STATS_UPDATE(client, router, SILC_UMODE_ROUTER_OPERATOR);
@@ -1056,6 +1056,28 @@ bool silc_server_check_cmode_rights(SilcServer server,
     }
   }
   
+  if (mode & SILC_CHANNEL_MODE_SILENCE_USERS) {
+    if (!(channel->mode & SILC_CHANNEL_MODE_SILENCE_USERS))
+      if (is_op && !is_fo)
+       return FALSE;
+  } else {
+    if (channel->mode & SILC_CHANNEL_MODE_SILENCE_USERS) {
+      if (is_op && !is_fo)
+       return FALSE;
+    }
+  }
+  
+  if (mode & SILC_CHANNEL_MODE_SILENCE_OPERS) {
+    if (!(channel->mode & SILC_CHANNEL_MODE_SILENCE_OPERS))
+      if (is_op && !is_fo)
+       return FALSE;
+  } else {
+    if (channel->mode & SILC_CHANNEL_MODE_SILENCE_OPERS) {
+      if (is_op && !is_fo)
+       return FALSE;
+    }
+  }
+  
   return TRUE;
 }