$OpenBSD: operops-patch-silcd_command_c,v 1.5 2005/04/07 00:49:18 brad Exp $
--- silcd/command.c.orig	Mon Apr  4 08:47:25 2005
+++ silcd/command.c	Wed Apr  6 12:46:06 2005
@@ -3422,6 +3422,8 @@ SILC_SERVER_CMD_FUNC(cumode)
 						  client_id, TRUE, NULL);
 
   if (target_client != client &&
+      !(client->mode & SILC_UMODE_SERVER_OPERATOR) &&
+      !(client->mode & SILC_UMODE_ROUTER_OPERATOR) &&
       !(sender_mask & SILC_CHANNEL_UMODE_CHANFO) &&
       !(sender_mask & SILC_CHANNEL_UMODE_CHANOP)) {
     silc_server_command_send_status_data(cmd, SILC_COMMAND_CUMODE,
@@ -3541,8 +3543,10 @@ SILC_SERVER_CMD_FUNC(cumode)
     /* Promote to operator */
     if (!(chl->mode & SILC_CHANNEL_UMODE_CHANOP)) {
       if (!(sender_mask & SILC_CHANNEL_UMODE_CHANOP) &&
-          !(sender_mask & SILC_CHANNEL_UMODE_CHANFO)) {
-        silc_server_command_send_status_data(cmd, SILC_COMMAND_CUMODE,
+          !(sender_mask & SILC_CHANNEL_UMODE_CHANFO) &&
+          !(client->mode & SILC_UMODE_SERVER_OPERATOR) &&
+          !(client->mode & SILC_UMODE_ROUTER_OPERATOR)) {
+	silc_server_command_send_status_data(cmd, SILC_COMMAND_CUMODE,
 					     SILC_STATUS_ERR_NO_CHANNEL_PRIV,
 					     0, 2, tmp_ch_id, tmp_ch_len);
         goto out;
@@ -3554,7 +3558,9 @@ SILC_SERVER_CMD_FUNC(cumode)
   } else {
     if (chl->mode & SILC_CHANNEL_UMODE_CHANOP) {
       if (!(sender_mask & SILC_CHANNEL_UMODE_CHANOP) &&
-          !(sender_mask & SILC_CHANNEL_UMODE_CHANFO)) {
+          !(sender_mask & SILC_CHANNEL_UMODE_CHANFO) &&
+          !(client->mode & SILC_UMODE_SERVER_OPERATOR) &&
+          !(client->mode & SILC_UMODE_ROUTER_OPERATOR)) {
         silc_server_command_send_status_data(cmd, SILC_COMMAND_CUMODE,
 					     SILC_STATUS_ERR_NO_CHANNEL_PRIV,
 					     0, 2, tmp_ch_id, tmp_ch_len);
