diff -urP silc-server-0.9.18-orig/silcd/command.c silc-server-0.9.18/silcd/command.c
--- silc-server-0.9.18-orig/silcd/command.c	2003-03-03 10:56:04.000000000 -0600
+++ silc-server-0.9.18/silcd/command.c	2004-06-10 17:03:02.000000000 -0500
@@ -1729,6 +1729,7 @@
 {
   SilcServerCommandContext cmd = (SilcServerCommandContext)context;
   SilcServer server = cmd->server;
+  SilcClientEntry client = (SilcClientEntry)cmd->sock->user_data;
   SilcServerID *server_id;
   unsigned char *tmp;
   SilcUInt32 tmp_len;
@@ -1738,6 +1739,14 @@
 
   SILC_SERVER_COMMAND_CHECK(SILC_COMMAND_STATS, cmd, 1, 1);
 
+  /* Check whether client has the permissions. */
+  if (!(client->mode & SILC_UMODE_SERVER_OPERATOR) &&
+      !(client->mode & SILC_UMODE_ROUTER_OPERATOR)) {
+    silc_server_command_send_status_reply(cmd, SILC_COMMAND_PRIV_CONNECT,
+                                          SILC_STATUS_ERR_NO_SERVER_PRIV, 0);
+    goto out;
+  }
+
   /* Get Server ID */
   tmp = silc_argument_get_arg_type(cmd->args, 1, &tmp_len);
   if (!tmp) {
diff -urP silc-server-0.9.18-orig/silcd/server.h silc-server-0.9.18/silcd/server.h
--- silc-server-0.9.18-orig/silcd/server.h	2003-03-03 10:56:04.000000000 -0600
+++ silc-server-0.9.18/silcd/server.h	2004-06-10 13:10:28.000000000 -0500
@@ -64,6 +64,8 @@
 #define SILC_ROUTER 1
 #define SILC_BACKUP_ROUTER 2
 
+#define SILC_MASK_STATS 1
+
 /* Default parameter values */
 
 /* Connection retry timeout. We implement exponential backoff algorithm
diff -urP silc-server-0.9.18-orig/silcd/server_util.c silc-server-0.9.18/silcd/server_util.c
--- silc-server-0.9.18-orig/silcd/server_util.c	2003-03-03 10:56:04.000000000 -0600
+++ silc-server-0.9.18/silcd/server_util.c	2004-06-10 14:24:57.000000000 -0500
@@ -1519,29 +1519,57 @@
 			   server->server_name, server_version));
 
   if (server->server_type == SILC_ROUTER) {
-    SILC_SERVER_SEND_NOTIFY(server, sock, SILC_NOTIFY_TYPE_NONE,
+    if (SILC_MASK_STATS)
+      SILC_SERVER_SEND_NOTIFY(server, sock, SILC_NOTIFY_TYPE_NONE,
+			    ("There are %d servers and %d "
+			     "routers in SILC Network",
+			     server->stat.servers,server->stat.routers));
+    else
+      SILC_SERVER_SEND_NOTIFY(server, sock, SILC_NOTIFY_TYPE_NONE,
 			    ("There are %d clients, %d servers and %d "
 			     "routers in SILC Network",
 			     server->stat.clients, server->stat.servers,
 			     server->stat.routers));
   } else {
-    if (server->stat.clients && server->stat.servers + 1)
-      SILC_SERVER_SEND_NOTIFY(server, sock, SILC_NOTIFY_TYPE_NONE,
+    if (server->stat.clients && server->stat.servers + 1) {
+      if (SILC_MASK_STATS)
+       SILC_SERVER_SEND_NOTIFY(server, sock, SILC_NOTIFY_TYPE_NONE,
+			      ("There are %d servers and %d "
+			       "routers in SILC Network",
+			       server->stat.servers,
+				(server->standalone ? 0 :
+				!server->stat.routers ? 1 :
+				server->stat.routers)));
+     else
+       SILC_SERVER_SEND_NOTIFY(server, sock, SILC_NOTIFY_TYPE_NONE,
 			      ("There are %d clients, %d servers and %d "
 			       "routers in SILC Network",
 			       server->stat.clients, server->stat.servers,
 			       (server->standalone ? 0 :
 				!server->stat.routers ? 1 :
 				server->stat.routers)));
+    }
   }
 
-  if (server->stat.cell_clients && server->stat.cell_servers + 1)
-    SILC_SERVER_SEND_NOTIFY(server, sock, SILC_NOTIFY_TYPE_NONE,
+  if (server->stat.cell_clients && server->stat.cell_servers + 1) {
+    if (SILC_MASK_STATS)
+      SILC_SERVER_SEND_NOTIFY(server, sock, SILC_NOTIFY_TYPE_NONE,
+			    ("There are %d server in our cell",
+			     server->stat.cell_servers));
+    else
+      SILC_SERVER_SEND_NOTIFY(server, sock, SILC_NOTIFY_TYPE_NONE,
 			    ("There are %d clients on %d server in our cell",
 			     server->stat.cell_clients,
 			     server->stat.cell_servers));
+  }
   if (server->server_type == SILC_ROUTER) {
-    SILC_SERVER_SEND_NOTIFY(server, sock, SILC_NOTIFY_TYPE_NONE,
+    if (SILC_MASK_STATS)
+      SILC_SERVER_SEND_NOTIFY(server, sock, SILC_NOTIFY_TYPE_NONE,
+			    ("I have %d servers and %d routers",
+			     server->stat.my_servers,
+			     server->stat.my_routers));
+    else
+      SILC_SERVER_SEND_NOTIFY(server, sock, SILC_NOTIFY_TYPE_NONE,
 			    ("I have %d clients, %d channels, %d servers and "
 			     "%d routers",
 			     server->stat.my_clients,
@@ -1549,7 +1577,11 @@
 			     server->stat.my_servers,
 			     server->stat.my_routers));
   } else {
-    SILC_SERVER_SEND_NOTIFY(server, sock, SILC_NOTIFY_TYPE_NONE,
+    if (SILC_MASK_STATS)
+      SILC_SERVER_SEND_NOTIFY(server, sock, SILC_NOTIFY_TYPE_NONE,
+			    ("Client and channel info suppressed for privacy"));
+    else
+      SILC_SERVER_SEND_NOTIFY(server, sock, SILC_NOTIFY_TYPE_NONE,
 			    ("I have %d clients and %d channels formed",
 			     server->stat.my_clients,
 			     server->stat.my_channels));

