$OpenBSD: operops-patch-apps_silcd_command_c,v 1.4 2008/04/22 00:34:30 sthen Exp $ --- apps/silcd/command.c.orig Sun Apr 20 17:01:20 2008 +++ apps/silcd/command.c Sun Apr 20 17:24:58 2008 @@ -3490,6 +3490,8 @@ SILC_SERVER_CMD_FUNC(cumode) 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)) { tmp_ch_id = silc_argument_get_arg_type(cmd->args, 1, &tmp_ch_len); @@ -3613,7 +3615,9 @@ 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)) { + !(sender_mask & SILC_CHANNEL_UMODE_CHANFO) && + !(client->mode & SILC_UMODE_SERVER_OPERATOR) && + !(client->mode & SILC_UMODE_ROUTER_OPERATOR)) { tmp_ch_id = silc_argument_get_arg_type(cmd->args, 1, &tmp_ch_len); silc_server_command_send_status_data(cmd, SILC_COMMAND_CUMODE, SILC_STATUS_ERR_NO_CHANNEL_PRIV, @@ -3627,7 +3631,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)) { tmp_ch_id = silc_argument_get_arg_type(cmd->args, 1, &tmp_ch_len); silc_server_command_send_status_data(cmd, SILC_COMMAND_CUMODE, SILC_STATUS_ERR_NO_CHANNEL_PRIV,