Merge branch 'xop' of https://github.com/kart0ffelsack/ngircd into bug92-xop
authorAlexander Barton <alex@barton.de>
Tue, 11 Sep 2012 10:30:19 +0000 (12:30 +0200)
committerAlexander Barton <alex@barton.de>
Tue, 11 Sep 2012 10:30:19 +0000 (12:30 +0200)
* 'xop' of https://github.com/kart0ffelsack/ngircd:
  Tests and documentation for xop
  Implemented xop support

Conflicts (because of merge of the 'cmode-M' branch):
src/ngircd/channel.c
src/ngircd/defines.h
src/ngircd/messages.h

1  2 
doc/Modes.txt
src/ngircd/channel.c
src/ngircd/defines.h
src/ngircd/irc-info.c
src/ngircd/irc-mode.c
src/ngircd/irc-server.c
src/ngircd/messages.h

diff --cc doc/Modes.txt
Simple merge
@@@ -837,11 -877,7 +882,11 @@@ Can_Send_To_Channel(CHANNEL *Chan, CLIE
        if (strchr(Channel_Modes(Chan), 'n') && !is_member)
                return false;
  
-       if (is_op || has_voice)
 +      if (strchr(Channel_Modes(Chan), 'M') && !Client_HasMode(From, 'R')
 +          && !Client_HasMode(From, 'o'))
 +              return false;
 +
+       if (has_voice || is_halfop || is_op || is_chanadmin || is_owner)
                return true;
  
        if (strchr(Channel_Modes(Chan), 'm'))
  #endif
  
  /** Supported user modes. */
 -#define USERMODES "acCiorRswx"
 +#define USERMODES "aBcCiorRswx"
  
  /** Supported channel modes. */
- #define CHANMODES "beiIklmMnoOPrRstvz"
 -#define CHANMODES "abehiIklmnoOPqrRstvz"
++#define CHANMODES "abehiIklmMnoOPqrRstvz"
  
  /** Away message for users connected to linked servers. */
  #define DEFAULT_AWAY_MSG "Away"
Simple merge
@@@ -521,15 -527,22 +549,23 @@@ Channel_Mode(CLIENT *Client, REQUEST *R
                client = NULL;
                switch (*mode_ptr) {
                /* --- Channel modes --- */
+               case 'R': /* Registered users only */
+               case 's': /* Secret channel */
+               case 'z': /* Secure connections only */
+                       if(!is_oper && !is_machine && !is_owner &&
+                          !is_admin && !is_op) {
+                               connected = IRC_WriteStrClient(Origin,
+                                       ERR_CHANOPRIVSNEEDED_MSG,
+                                       Client_ID(Origin), Channel_Name(Channel));
+                               goto chan_exit;
+                       }
                case 'i': /* Invite only */
 +              case 'M': /* Only identified nicks can write */
                case 'm': /* Moderated */
                case 'n': /* Only members can write */
-               case 'R': /* Registered users only */
-               case 's': /* Secret channel */
                case 't': /* Topic locked */
-               case 'z': /* Secure connections only */
-                       if (modeok)
+                       if(is_oper || is_machine || is_owner ||
+                          is_admin || is_op || is_halfop)
                                x[0] = *mode_ptr;
                        else
                                connected = IRC_WriteStrClient(Origin,
Simple merge
@@@ -21,7 -21,7 +21,7 @@@
  #define RPL_YOURHOST_MSG              "002 %s :Your host is %s, running version ngircd-%s (%s/%s/%s)"
  #define RPL_CREATED_MSG                       "003 %s :This server has been started %s"
  #define RPL_MYINFO_MSG                        "004 %s %s ngircd-%s %s %s"
- #define RPL_ISUPPORT1_MSG             "005 %s RFC2812 IRCD=ngIRCd CASEMAPPING=ascii PREFIX=(ov)@+ CHANTYPES=#&+ CHANMODES=beI,k,l,imMnOPRstz CHANLIMIT=#&+:%d :are supported on this server"
 -#define RPL_ISUPPORT1_MSG             "005 %s RFC2812 IRCD=ngIRCd CASEMAPPING=ascii PREFIX=(qaohv)~&@%%+ CHANTYPES=#&+ CHANMODES=beI,k,l,imnOPRstz CHANLIMIT=#&+:%d :are supported on this server"
++#define RPL_ISUPPORT1_MSG             "005 %s RFC2812 IRCD=ngIRCd CASEMAPPING=ascii PREFIX=(qaohv)~&@%%+ CHANTYPES=#&+ CHANMODES=beI,k,l,imMnOPRstz CHANLIMIT=#&+:%d :are supported on this server"
  #define RPL_ISUPPORT2_MSG             "005 %s CHANNELLEN=%d NICKLEN=%d TOPICLEN=%d AWAYLEN=%d KICKLEN=%d MODES=%d MAXLIST=beI:%d EXCEPTS=e INVEX=I PENALTY :are supported on this server"
  
  #define RPL_TRACELINK_MSG             "200 %s Link %s-%s %s %s V%s %ld %d %d"
  #define ERR_LISTFULL_MSG              "478 %s %s %s: Channel list is full (%d)"
  #define ERR_NOPRIVILEGES_MSG          "481 %s :Permission denied"
  #define ERR_CHANOPRIVSNEEDED_MSG      "482 %s %s :You are not channel operator"
+ #define ERR_CHANOPPRIVTOLOW_MSG               "482 %s %s :Your privileges are to low"
  #define ERR_CANTKILLSERVER_MSG                "483 %s :You can't kill a server!"
  #define ERR_RESTRICTED_MSG            "484 %s :Your connection is restricted"
 +#define ERR_NICKREGISTER_MSG          "484 %s :Cannot modify user mode (+R) -- Use IRC services"
  #define ERR_NOOPERHOST_MSG            "491 %s :Not configured for your host"
  #define ERR_NOTONSAMECHANNEL_MSG      "493 %s :You must share a common channel with %s"