]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/irc-mode.c
ngIRCd Release 27
[ngircd-alex.git] / src / ngircd / irc-mode.c
index 0ea046e561c9196f646006602f0a14362149f42f..89a070429afef1b8645e30c64820db12ad26f8f3 100644 (file)
@@ -575,6 +575,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
                                        Client_ID(Origin), Channel_Name(Channel));
                                goto chan_exit;
                        }
+                       /* fall through */
                case 'i': /* Invite only */
                case 'V': /* Invite disallow */
                case 'M': /* Only identified nicks can write */
@@ -740,6 +741,14 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
                        break;
                /* --- Channel user modes --- */
                case 'q': /* Owner */
+                       if(!is_oper && !is_machine && !is_owner) {
+                               connected = IRC_WriteErrClient(Origin,
+                                       ERR_CHANOPPRIVTOOLOW_MSG,
+                                       Client_ID(Origin),
+                                       Channel_Name(Channel));
+                               goto chan_exit;
+                       }
+                       /* fall through */
                case 'a': /* Channel admin */
                        if(!is_oper && !is_machine && !is_owner && !is_admin) {
                                connected = IRC_WriteErrClient(Origin,
@@ -748,6 +757,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
                                        Channel_Name(Channel));
                                goto chan_exit;
                        }
+                       /* fall through */
                case 'o': /* Channel operator */
                        if(!is_oper && !is_machine && !is_owner &&
                           !is_admin && !is_op) {
@@ -757,6 +767,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
                                        Channel_Name(Channel));
                                goto chan_exit;
                        }
+                       /* fall through */
                case 'h': /* Half Op */
                        if(!is_oper && !is_machine && !is_owner &&
                           !is_admin && !is_op) {
@@ -766,6 +777,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
                                        Channel_Name(Channel));
                                goto chan_exit;
                        }
+                       /* fall through */
                case 'v': /* Voice */
                        if (arg_arg > mode_arg) {
                                if (is_oper || is_machine || is_owner ||