[IRC-Dev CVS] [CVS] Module ircd-ircdev: Change committed
Brought to you by:
zolty
From: Toni G. <zo...@us...> - 2008-01-07 00:14:20
|
Committer : zolty CVSROOT : /cvsroot/irc-dev Module : ircd-ircdev Commit time: 2008-01-07 00:14:17 UTC Modified files: ChangeLog ChangeLog.es include/channel.h include/client.h include/numeric.h include/patchlevel.h ircd/channel.c ircd/ircd_relay.c ircd/m_clearmode.c ircd/m_invite.c ircd/m_wallchops.c ircd/m_wallvoices.c ircd/s_err.c ircd/s_user.c Log message: Author: zoltan <zo...@ir...> Log message: 2008-01-07 Toni Garcïa <zo...@ir...> 1.0.beta11 * Modo de canal +C * Modo de canal +c * Modo de canal +T * Modo de canal +u * Modo de canal +M * Modo de usuario +R ---------------------- diff included ---------------------- Index: ircd-ircdev/ChangeLog diff -u ircd-ircdev/ChangeLog:1.59 ircd-ircdev/ChangeLog:1.60 --- ircd-ircdev/ChangeLog:1.59 Tue Dec 11 15:38:20 2007 +++ ircd-ircdev/ChangeLog Sun Jan 6 16:14:01 2008 @@ -1,10 +1,18 @@ # # ChangeLog for ircd-ircdev # -# $Id: ChangeLog,v 1.59 2007/12/11 23:38:20 zolty Exp $ +# $Id: ChangeLog,v 1.60 2008/01/07 00:14:01 zolty Exp $ # # Insert new changes at beginning of the change list. # +2008-01-07 Toni Garcïa <zo...@ir...> 1.0.beta11 + * Channel mode +C + * Channel mode +c + * Channel mode +T + * Channel mode +u + * Channel mode +M + * Channel mode +R + 2007-12-12 Toni Garc�a <zo...@ir...> 1.0.beta10 * Undernet synchronization Index: ircd-ircdev/ChangeLog.es diff -u ircd-ircdev/ChangeLog.es:1.59 ircd-ircdev/ChangeLog.es:1.60 --- ircd-ircdev/ChangeLog.es:1.59 Tue Dec 11 15:38:21 2007 +++ ircd-ircdev/ChangeLog.es Sun Jan 6 16:14:02 2008 @@ -1,10 +1,18 @@ # # Log de Cambios para ircd-ircdev # -# $Id: ChangeLog.es,v 1.59 2007/12/11 23:38:21 zolty Exp $ +# $Id: ChangeLog.es,v 1.60 2008/01/07 00:14:02 zolty Exp $ # # Insertar los nuevos cambios al principio de esta lista de cambios. # +2008-01-07 Toni Garc�a <zo...@ir...> 1.0.beta11 + * Modo de canal +C + * Modo de canal +c + * Modo de canal +T + * Modo de canal +u + * Modo de canal +M + * Modo de usuario +R + 2007-11-11 Toni Garc�a <zo...@ir...> 1.0.beta10 * Sincronizacion Undernet Index: ircd-ircdev/include/channel.h diff -u ircd-ircdev/include/channel.h:1.19 ircd-ircdev/include/channel.h:1.20 --- ircd-ircdev/include/channel.h:1.19 Tue Dec 11 15:38:23 2007 +++ ircd-ircdev/include/channel.h Sun Jan 6 16:14:02 2008 @@ -22,7 +22,7 @@ */ /** @file * @brief Channel management and maintenance. - * @version $Id: channel.h,v 1.19 2007/12/11 23:38:23 zolty Exp $ + * @version $Id: channel.h,v 1.20 2008/01/07 00:14:02 zolty Exp $ */ #ifndef INCLUDED_channel_h #define INCLUDED_channel_h @@ -114,8 +114,11 @@ #define MODE_LIMIT 0x0400 /**< +l Limit */ #define MODE_REGONLY 0x0800 /**< +R Only +r users may join */ #define MODE_DELJOINS 0x1000 /**< New join messages are delayed */ +#define MODE_NOCOLOUR 0x2000 /**< No mIRC/ANSI colors/bold */ +#define MODE_NOCTCP 0x4000 /**< No channel CTCPs */ +#define MODE_NONOTICE 0x8000 /**< No channel notices */ #if defined(DDB) || defined(SERVICES) -#define MODE_REGCHAN 0x2000 /**< +r Channel registered */ +#define MODE_REGCHAN 0x10000 /**< +r Channel registered */ #define MODE_OWNER CHFL_OWNER /**< +q Channel owner */ #endif #define MODE_SAVE 0x20000 /**< save this mode-with-arg 'til @@ -129,13 +132,18 @@ #endif #define MODE_WASDELJOINS 0x400000 /**< Not DELJOINS, but some joins * pending */ +#define MODE_NOQUITPARTS 0x800000 + +#define MODE_NOMULTITARGET 0x1000000 /**< +T No multiple targets */ +#define MODE_MODERATENOREG 0x2000000 /**< +M Moderate unauthed users */ + #if defined(UNDERNET) /** mode flags which take another parameter (With PARAmeterS) */ #define MODE_WPARAS (MODE_CHANOP|MODE_VOICE|MODE_BAN|MODE_KEY|MODE_LIMIT|MODE_APASS|MODE_UPASS) /** Available Channel modes */ -#define infochanmodes feature_bool(FEAT_OPLEVELS) ? "AbiklmnopstUvrD" : "biklmnopstvrD" +#define infochanmodes feature_bool(FEAT_OPLEVELS) ? "AbiklmnopstUvrDcCNuMT" : "biklmnopstvrDcCNuMT" /** Available Channel modes that take parameters */ #define infochanmodeswithparams feature_bool(FEAT_OPLEVELS) ? "AbkloUv" : "bklov" #elif defined(DDB) || defined(SERVICES) @@ -144,7 +152,7 @@ #define MODE_WPARAS (MODE_OWNER|MODE_CHANOP|MODE_VOICE|MODE_BAN|MODE_KEY|MODE_LIMIT) /** Available Channel modes */ -#define infochanmodes "biklmnopstvrRDq" +#define infochanmodes "biklmnopstvrRDqcCNuMT" /** Available Channel modes that take parameters */ #define infochanmodeswithparams "bklovq" #else @@ -153,7 +161,7 @@ #define MODE_WPARAS (MODE_CHANOP|MODE_VOICE|MODE_BAN|MODE_KEY|MODE_LIMIT) /** Available Channel modes */ -#define infochanmodes "biklmnopstvrD" +#define infochanmodes "biklmnopstvrDcCNuMT" /** Available Channel modes that take parameters */ #define infochanmodeswithparams "bklov" #endif Index: ircd-ircdev/include/client.h diff -u ircd-ircdev/include/client.h:1.23 ircd-ircdev/include/client.h:1.24 --- ircd-ircdev/include/client.h:1.23 Sun Nov 11 13:53:04 2007 +++ ircd-ircdev/include/client.h Sun Jan 6 16:14:02 2008 @@ -21,7 +21,7 @@ */ /** @file * @brief Structures and functions for handling local clients. - * @version $Id: client.h,v 1.23 2007/11/11 21:53:04 zolty Exp $ + * @version $Id: client.h,v 1.24 2008/01/07 00:14:02 zolty Exp $ */ #ifndef INCLUDED_client_h #define INCLUDED_client_h @@ -73,9 +73,9 @@ /** String containing valid user modes, in no particular order. */ #if defined(DDB) || defined(SERVICES) -#define infousermodes "dioswkgxrSZ" +#define infousermodes "dioswkgxrRSZ" #else -#define infousermodes "dioswkgxZ" +#define infousermodes "dioswkgxRZ" #endif /** Operator privileges. */ @@ -158,10 +158,9 @@ FLAG_NICKREG, /**< nick registered */ FLAG_NICKSUSPEND, /**< nick suspended */ #endif + FLAG_MSGONLYREG, /**< only privmsg/notices from +r */ FLAG_HIDDENHOST, /**< user's host is hidden */ -#ifdef USE_SSL FLAG_SSL, /**< is a user with secure connection */ -#endif FLAG_LAST_FLAG, /**< number of flags */ FLAG_LOCAL_UMODES = FLAG_LOCOP, /**< First local mode flag */ FLAG_GLOBAL_UMODES = FLAG_OPER /**< First global mode flag */ @@ -603,6 +602,8 @@ /** Return non-zero if the client has set mode +S (nick suspended) */ #define IsNickSuspended(x) HasFlag(x, FLAG_NICKSUSPEND) #endif +/** Return non-zero if the client has set mode +R. */ +#define IsMsgOnlyReg(x) HasFlag(x, FLAG_MSGONLYREG) /** Return non-zero if the client has operator or server privileges. */ #define IsPrivileged(x) (IsAnOper(x) || IsServer(x)) @@ -656,7 +657,7 @@ /** Mark a client as having a pending PING. */ #define SetPingSent(x) SetFlag(x, FLAG_PINGSENT) #ifdef USE_SSL -/** Mark a client as secure connection .*/ +/** Mark a client as secure connection. */ #define SetSSL(x) SetFlag(x, FLAG_SSL) #endif #if defined(DDB) || defined(SERVICES) @@ -665,6 +666,8 @@ /** Mark a client as having mode +S (nick suspended) */ #define SetNickSuspended(x) SetFlag(x, FLAG_NICKSUSPEND) #endif +/** Mark a client as having mode +R. */ +#define SetMsgOnlyReg(x) SetFlag(x, FLAG_MSGONLYREG) /** Return non-zero if \a sptr sees \a acptr as an operator. */ #define SeeOper(sptr,acptr) (IsAnOper(acptr) && (HasPriv(acptr, PRIV_DISPLAY) \ @@ -708,6 +711,8 @@ /** Remode mode +S (nick suspended) from the client */ #define ClearNickSuspended(x) ClrFlag(x, FLAG_NICKSUSPEND) #endif +/** Remove mode +R from the client. */ +#define ClearMsgOnlyReg(x) ClrFlag(x, FLAG_MSGONLYREG) /* free flags */ #define FREEFLAG_SOCKET 0x0001 /**< socket needs to be freed */ Index: ircd-ircdev/include/numeric.h diff -u ircd-ircdev/include/numeric.h:1.19 ircd-ircdev/include/numeric.h:1.20 --- ircd-ircdev/include/numeric.h:1.19 Tue Dec 11 15:38:23 2007 +++ ircd-ircdev/include/numeric.h Sun Jan 6 16:14:05 2008 @@ -21,7 +21,7 @@ */ /** @file * @brief Declarations of numeric replies and supporting functions. - * @version $Id: numeric.h,v 1.19 2007/12/11 23:38:23 zolty Exp $ + * @version $Id: numeric.h,v 1.20 2008/01/07 00:14:05 zolty Exp $ */ #ifndef INCLUDED_numeric_h #define INCLUDED_numeric_h @@ -419,6 +419,7 @@ /* ERR_KILLDENY 485 unreal */ /* ERR_CANTKICKADMIN 485 PTlink */ /* ERR_HTMDISABLED 486 unreal */ +#define ERR_NONONREG 486 /* ERR_CHANTOORECENT 487 IRCnet extension (?) */ /* ERR_TSLESSCHAN 488 IRCnet extension (?) */ #define ERR_VOICENEEDED 489 /* Undernet extension */ Index: ircd-ircdev/include/patchlevel.h diff -u ircd-ircdev/include/patchlevel.h:1.58 ircd-ircdev/include/patchlevel.h:1.59 --- ircd-ircdev/include/patchlevel.h:1.58 Tue Dec 11 15:38:23 2007 +++ ircd-ircdev/include/patchlevel.h Sun Jan 6 16:14:05 2008 @@ -17,10 +17,10 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * $Id: patchlevel.h,v 1.58 2007/12/11 23:38:23 zolty Exp $ + * $Id: patchlevel.h,v 1.59 2008/01/07 00:14:05 zolty Exp $ * */ -#define PATCHLEVEL "10" +#define PATCHLEVEL "11" #define RELEASE "1.0.beta" Index: ircd-ircdev/ircd/channel.c diff -u ircd-ircdev/ircd/channel.c:1.34 ircd-ircdev/ircd/channel.c:1.35 --- ircd-ircdev/ircd/channel.c:1.34 Tue Dec 11 15:38:23 2007 +++ ircd-ircdev/ircd/channel.c Sun Jan 6 16:14:05 2008 @@ -21,7 +21,7 @@ */ /** @file * @brief Channel management and maintanance - * @version $Id: channel.c,v 1.34 2007/12/11 23:38:23 zolty Exp $ + * @version $Id: channel.c,v 1.35 2008/01/07 00:14:05 zolty Exp $ */ #include "config.h" @@ -734,7 +734,10 @@ #if defined(UNDERNET) /* If only logged in users may join and you're not one, you can't speak. */ - if (member->channel->mode.mode & MODE_REGONLY && !IsAccount(member->user)) + if (member->channel->mode.mode & (MODE_MODERATENOREG|MODE_REGONLY) && !IsAccount(member->user)) + return 0; +#elif defined(DDB) || defined(SERVICES) + if (member->channel->mode.mode & (MODE_MODERATENOREG|MODE_REGONLY) && !IsNickRegistered(member->user)) return 0; #endif @@ -782,7 +785,9 @@ if (!member) { if ((chptr->mode.mode & (MODE_NOPRIVMSGS|MODE_MODERATED)) #if defined(UNDERNET) - || ((chptr->mode.mode & MODE_REGONLY) && !IsAccount(cptr)) + || ((chptr->mode.mode & (MODE_REGONLY|MODE_MODERATENOREG)) && !IsAccount(cptr)) +#elif defined(DDB) || defined(SERVICES) + || ((chptr->mode.mode & (MODE_REGONLY|MODE_MODERATENOREG)) && !IsNickRegistered(cptr)) #endif ) return 0; @@ -811,7 +816,9 @@ continue; if ((member->channel->mode.mode & MODE_MODERATED) #if defined(UNDERNET) - || (member->channel->mode.mode & MODE_REGONLY && !IsAccount(cptr)) + || (member->channel->mode.mode & (MODE_MODERATENOREG|MODE_REGONLY) && !IsAccount(cptr)) +#elif defined(UNDERNET) + || (member->channel->mode.mode & (MODE_MODERATENOREG|MODE_REGONLY) && !IsNickRegistered(cptr)) #endif || is_banned(member)) return member->channel->chname; @@ -858,14 +865,29 @@ *mbuf++ = 'i'; if (chptr->mode.mode & MODE_NOPRIVMSGS) *mbuf++ = 'n'; -#if defined(DDB) || defined(SERVICES) +#if defined(UNDERNET) + if (chptr->mode.mode & MODE_REGONLY) + *mbuf++ = 'r'; +#elif defined(DDB) || defined(SERVICES) if (chptr->mode.mode & MODE_REGCHAN) *mbuf++ = 'r'; -#endif if (chptr->mode.mode & MODE_REGONLY) *mbuf++ = 'R'; +#endif + if (chptr->mode.mode & MODE_NOCOLOUR) + *mbuf++ = 'c'; + if (chptr->mode.mode & MODE_NOCTCP) + *mbuf++ = 'C'; + if (chptr->mode.mode & MODE_NONOTICE) + *mbuf++ = 'N'; + if (chptr->mode.mode & MODE_NOQUITPARTS) + *mbuf++ = 'u'; if (chptr->mode.mode & MODE_DELJOINS) *mbuf++ = 'D'; + if (chptr->mode.mode & MODE_NOMULTITARGET) + *mbuf++ = 'T'; + if (chptr->mode.mode & MODE_MODERATENOREG) + *mbuf++ = 'M'; else if (MyUser(cptr) && (chptr->mode.mode & MODE_WASDELJOINS)) *mbuf++ = 'd'; if (chptr->mode.limit) { @@ -1685,11 +1707,13 @@ MODE_TOPICLIMIT, 't', MODE_INVITEONLY, 'i', MODE_NOPRIVMSGS, 'n', -#if defined(DDB) || defined(SERVICES) +#if defined(UNDERNET) + MODE_REGONLY, 'r', +#elif defined(DDB) || defined(SERVICES) MODE_REGCHAN, 'r', + MODE_REGONLY, 'R', /* MODE_OWNER, 'q', */ #endif - MODE_REGONLY, 'R', MODE_DELJOINS, 'D', /* MODE_KEY, 'k', */ /* MODE_BAN, 'b', */ @@ -1698,6 +1722,12 @@ /* MODE_APASS, 'A', */ /* MODE_UPASS, 'U', */ #endif + MODE_NOQUITPARTS, 'u', + MODE_NOCOLOUR, 'c', + MODE_NOCTCP, 'C', + MODE_NONOTICE, 'N', + MODE_NOMULTITARGET, 'T', + MODE_MODERATENOREG, 'M', 0x0, 0x0 }; static int local_flags[] = { @@ -2184,7 +2214,8 @@ /* TODO-ZOLTAN: Revisar */ /* MODE_REGCHAN | */ #endif - MODE_DELJOINS | MODE_WASDELJOINS); + MODE_DELJOINS | MODE_WASDELJOINS | MODE_NOQUITPARTS | MODE_NOCOLOUR | + MODE_NOCTCP | MODE_NONOTICE | MODE_NOMULTITARGET | MODE_MODERATENOREG); if (!(mode & ~(MODE_ADD | MODE_DEL))) /* don't add empty modes... */ return; @@ -2336,12 +2367,20 @@ #endif /* MODE_BAN, 'b', */ MODE_LIMIT, 'l', -#if defined(DDB) || defined(SERVICES) +#if defined(UNDERNET) + MODE_REGONLY, 'r', +#elif defined(DDB) || defined(SERVICES) MODE_REGCHAN, 'r', + MODE_REGONLY, 'R', /* MODE_OWNER, 'q', */ #endif - MODE_REGONLY, 'R', MODE_DELJOINS, 'D', + MODE_NOQUITPARTS, 'u', + MODE_NOCOLOUR, 'c', + MODE_NOCTCP, 'C', + MODE_NONOTICE, 'N', + MODE_NOMULTITARGET, 'T', + MODE_MODERATENOREG, 'M', 0x0, 0x0 }; unsigned int add, i, len; @@ -3494,12 +3533,20 @@ #endif MODE_BAN, 'b', MODE_LIMIT, 'l', -#if defined(DDB) || defined(SERVICES) +#if defined(UNDERNET) + MODE_REGONLY, 'r', +#elif defined(DDB) || defined(SERVICES) MODE_OWNER, 'q', MODE_REGCHAN, 'r', + MODE_REGONLY, 'R', #endif - MODE_REGONLY, 'R', MODE_DELJOINS, 'D', + MODE_NOQUITPARTS, 'u', + MODE_NOCOLOUR, 'c', + MODE_NOCTCP, 'C', + MODE_NONOTICE, 'N', + MODE_NOMULTITARGET, 'T', + MODE_MODERATENOREG, 'M', MODE_ADD, '+', MODE_DEL, '-', 0x0, 0x0 @@ -3783,11 +3830,11 @@ /* Send notification to channel */ if (!(flags & (CHFL_ZOMBIE | CHFL_DELAYED))) sendcmdto_channel(jbuf->jb_source, CMD_PART, chan, NULL, SKIP_SERVERS, - (flags & CHFL_BANNED || !jbuf->jb_comment) ? + (flags & CHFL_BANNED || (chan->mode.mode & MODE_NOQUITPARTS) || !jbuf->jb_comment) ? ":%H" : "%H :%s", chan, jbuf->jb_comment); else if (MyUser(jbuf->jb_source)) sendcmdto_one(jbuf->jb_source, CMD_PART, jbuf->jb_source, - (flags & CHFL_BANNED || !jbuf->jb_comment) ? + (flags & CHFL_BANNED || (chan->mode.mode & MODE_NOQUITPARTS) || !jbuf->jb_comment) ? ":%H" : "%H :%s", chan, jbuf->jb_comment); /* XXX: Shouldn't we send a PART here anyway? */ /* to users on the channel? Why? From their POV, the user isn't on Index: ircd-ircdev/ircd/ircd_relay.c diff -u ircd-ircdev/ircd/ircd_relay.c:1.12 ircd-ircdev/ircd/ircd_relay.c:1.13 --- ircd-ircdev/ircd/ircd_relay.c:1.12 Sat Apr 21 14:17:22 2007 +++ ircd-ircdev/ircd/ircd_relay.c Sun Jan 6 16:14:06 2008 @@ -21,7 +21,7 @@ */ /** @file * @brief Helper functions to relay various types of messages. - * @version $Id: ircd_relay.c,v 1.12 2007/04/21 21:17:22 zolty Exp $ + * @version $Id: ircd_relay.c,v 1.13 2008/01/07 00:14:06 zolty Exp $ * * There are four basic types of messages, each with four subtypes. * @@ -85,6 +85,7 @@ void relay_channel_message(struct Client* sptr, const char* name, const char* text) { struct Channel* chptr; + const char *ch; assert(0 != sptr); assert(0 != name); assert(0 != text); @@ -104,6 +105,29 @@ check_target_limit(sptr, chptr, chptr->chname, 0)) return; + /* +T check */ +#if 0 + if ((chptr->mode.mode & MODE_NOMULTITARGET) && (targetc > 1)) { + send_reply(sptr, ERR_CANNOTSENDTOCHAN, chptr->chname); + return; + } +#endif + + /* +cC checks */ + if (chptr->mode.mode & MODE_NOCOLOUR) + for (ch=text;*ch;ch++) + if (*ch==2 || *ch==3 || *ch==22 || *ch==27 || *ch==31) { + send_reply(sptr, ERR_CANNOTSENDTOCHAN, chptr->chname); + return; + } + + if ((chptr->mode.mode & MODE_NOCTCP) && ircd_strncmp(text,"\001ACTION ",8)) + for (ch=text;*ch;) + if (*ch++==1) { + send_reply(sptr, ERR_CANNOTSENDTOCHAN, chptr->chname); + return; + } + sendcmdto_channel(sptr, CMD_PRIVATE, chptr, cli_from(sptr), SKIP_DEAF | SKIP_BURST, "%H :%s", chptr, text); } @@ -117,6 +141,7 @@ void relay_channel_notice(struct Client* sptr, const char* name, const char* text) { struct Channel* chptr; + const char *ch; assert(0 != sptr); assert(0 != name); assert(0 != text); @@ -133,6 +158,26 @@ check_target_limit(sptr, chptr, chptr->chname, 0)) return; + if ((chptr->mode.mode & MODE_NONOTICE)) + return; + +#if 0 + /* +T check */ + if ((chptr->mode.mode & MODE_NOMULTITARGET) && (targetc > 1)) + return; +#endif + + /* +cC checks */ + if (chptr->mode.mode & MODE_NOCOLOUR) + for (ch=text;*ch;ch++) + if (*ch==2 || *ch==3 || *ch==22 || *ch==27 || *ch==31) + return; + + if (chptr->mode.mode & MODE_NOCTCP) + for (ch=text;*ch;) + if (*ch++==1) + return; + sendcmdto_channel(sptr, CMD_NOTICE, chptr, cli_from(sptr), SKIP_DEAF | SKIP_BURST, "%H :%s", chptr, text); } @@ -337,6 +382,13 @@ is_silenced(sptr, acptr)) return; +#if defined(DDB) || defined(SERVICES) + if (IsMsgOnlyReg(acptr) && !IsNickRegistered(sptr) && !IsOper(sptr)) { + send_reply(sptr, ERR_NONONREG, cli_name(acptr)); + return; + } +#endif + /* * send away message if user away */ @@ -372,6 +424,12 @@ check_target_limit(sptr, acptr, cli_name(acptr), 0)) || is_silenced(sptr, acptr)) return; + +#if defined(DDB) || defined(SERVICES) + if (IsMsgOnlyReg(acptr) && !IsNickRegistered(sptr) && !IsOper(sptr)) + return; +#endif + /* * deliver the message */ Index: ircd-ircdev/ircd/m_clearmode.c diff -u ircd-ircdev/ircd/m_clearmode.c:1.14 ircd-ircdev/ircd/m_clearmode.c:1.15 --- ircd-ircdev/ircd/m_clearmode.c:1.14 Thu Sep 20 14:00:32 2007 +++ ircd-ircdev/ircd/m_clearmode.c Sun Jan 6 16:14:06 2008 @@ -21,7 +21,7 @@ */ /** @file * @brief Handlers for CLEARMODE command. - * @version $Id: m_clearmode.c,v 1.14 2007/09/20 21:00:32 zolty Exp $ + * @version $Id: m_clearmode.c,v 1.15 2008/01/07 00:14:06 zolty Exp $ */ #include "config.h" @@ -66,8 +66,18 @@ MODE_KEY, 'k', MODE_BAN, 'b', MODE_LIMIT, 'l', +#if defined(UNDERNET) MODE_REGONLY, 'r', +#elif defined(DDB) || defined(SERVICES) + MODE_REGONLY, 'R', +#endif MODE_DELJOINS, 'D', + MODE_NOQUITPARTS, 'u', + MODE_NOCOLOUR, 'c', + MODE_NOCTCP, 'C', + MODE_NONOTICE, 'N', + MODE_NOMULTITARGET, 'T', + MODE_MODERATENOREG, 'M', 0x0, 0x0 }; int *flag_p; Index: ircd-ircdev/ircd/m_invite.c diff -u ircd-ircdev/ircd/m_invite.c:1.19 ircd-ircdev/ircd/m_invite.c:1.20 --- ircd-ircdev/ircd/m_invite.c:1.19 Thu Sep 20 14:00:32 2007 +++ ircd-ircdev/ircd/m_invite.c Sun Jan 6 16:14:06 2008 @@ -21,7 +21,7 @@ */ /** @file * @brief Handlers for INVITE command. - * @version $Id: m_invite.c,v 1.19 2007/09/20 21:00:32 zolty Exp $ + * @version $Id: m_invite.c,v 1.20 2008/01/07 00:14:06 zolty Exp $ */ #include "config.h" @@ -115,6 +115,13 @@ /* If we get here, it was a VALID and meaningful INVITE */ +#if defined(DDB) || defined(SERVICES) + if (IsMsgOnlyReg(acptr) && !IsNickRegistered(sptr) && !IsOper(sptr)) { + send_reply(sptr, ERR_NONONREG, cli_name(acptr)); + return; + } +#endif + if (check_target_limit(sptr, acptr, cli_name(acptr), 0)) return 0; Index: ircd-ircdev/ircd/m_wallchops.c diff -u ircd-ircdev/ircd/m_wallchops.c:1.10 ircd-ircdev/ircd/m_wallchops.c:1.11 --- ircd-ircdev/ircd/m_wallchops.c:1.10 Sat Apr 21 14:17:23 2007 +++ ircd-ircdev/ircd/m_wallchops.c Sun Jan 6 16:14:06 2008 @@ -21,7 +21,7 @@ */ /** @file * @brief Handlers for WALLCHOPS command. - * @version $Id: m_wallchops.c,v 1.10 2007/04/21 21:17:23 zolty Exp $ + * @version $Id: m_wallchops.c,v 1.11 2008/01/07 00:14:06 zolty Exp $ */ #include "config.h" @@ -55,6 +55,7 @@ int m_wallchops(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) { struct Channel *chptr; + const char *ch; assert(0 != cptr); assert(cptr == sptr); @@ -66,10 +67,24 @@ return send_reply(sptr, ERR_NOTEXTTOSEND); if (IsChannelName(parv[1]) && (chptr = FindChannel(parv[1]))) { - if (client_can_send_to_channel(sptr, chptr, 0)) { + if (client_can_send_to_channel(sptr, chptr, 0) && !(chptr->mode.mode & MODE_NONOTICE)) { if ((chptr->mode.mode & MODE_NOPRIVMSGS) && check_target_limit(sptr, chptr, chptr->chname, 0)) return 0; + + /* +cC checks */ + if (chptr->mode.mode & MODE_NOCOLOUR) + for (ch=parv[parc - 1];*ch;ch++) + if (*ch==2 || *ch==3 || *ch==22 || *ch==27 || *ch==31) { + return 0; + } + + if ((chptr->mode.mode & MODE_NOCTCP) && ircd_strncmp(parv[parc - 1],"\001ACTION ",8)) + for (ch=parv[parc - 1];*ch;) + if (*ch++==1) { + return 0; + } + sendcmdto_channel(sptr, CMD_WALLCHOPS, chptr, cptr, SKIP_DEAF | SKIP_BURST | SKIP_NONOPS, "%H :@ %s", chptr, parv[parc - 1]); Index: ircd-ircdev/ircd/m_wallvoices.c diff -u ircd-ircdev/ircd/m_wallvoices.c:1.11 ircd-ircdev/ircd/m_wallvoices.c:1.12 --- ircd-ircdev/ircd/m_wallvoices.c:1.11 Thu Sep 20 14:00:32 2007 +++ ircd-ircdev/ircd/m_wallvoices.c Sun Jan 6 16:14:06 2008 @@ -21,7 +21,7 @@ */ /** @file * @brief Handlers for WALLVOICES command. - * @version $Id: m_wallvoices.c,v 1.11 2007/09/20 21:00:32 zolty Exp $ + * @version $Id: m_wallvoices.c,v 1.12 2008/01/07 00:14:06 zolty Exp $ */ #include "config.h" @@ -55,6 +55,7 @@ int m_wallvoices(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) { struct Channel *chptr; + const char *ch; assert(0 != cptr); assert(cptr == sptr); @@ -66,10 +67,24 @@ return send_reply(sptr, ERR_NOTEXTTOSEND); if (IsChannelName(parv[1]) && (chptr = FindChannel(parv[1]))) { - if (client_can_send_to_channel(sptr, chptr, 0)) { + if (client_can_send_to_channel(sptr, chptr, 0) && !(chptr->mode.mode & MODE_NONOTICE)) { if ((chptr->mode.mode & MODE_NOPRIVMSGS) && check_target_limit(sptr, chptr, chptr->chname, 0)) return 0; + + /* +cC checks */ + if (chptr->mode.mode & MODE_NOCOLOUR) + for (ch=parv[parc - 1];*ch;ch++) + if (*ch==2 || *ch==3 || *ch==22 || *ch==27 || *ch==31) { + return 0; + } + + if ((chptr->mode.mode & MODE_NOCTCP) && ircd_strncmp(parv[parc - 1],"\001ACTION ",8)) + for (ch=parv[parc - 1];*ch;) + if (*ch++==1) { + return 0; + } + sendcmdto_channel(sptr, CMD_WALLVOICES, chptr, cptr, SKIP_DEAF | SKIP_BURST | SKIP_NONVOICES, "%H :+ %s", chptr, parv[parc - 1]); Index: ircd-ircdev/ircd/s_err.c diff -u ircd-ircdev/ircd/s_err.c:1.27 ircd-ircdev/ircd/s_err.c:1.28 --- ircd-ircdev/ircd/s_err.c:1.27 Tue Dec 11 15:38:26 2007 +++ ircd-ircdev/ircd/s_err.c Sun Jan 6 16:14:06 2008 @@ -21,7 +21,7 @@ */ /** @file * @brief Error handling support. - * @version $Id: s_err.c,v 1.27 2007/12/11 23:38:26 zolty Exp $ + * @version $Id: s_err.c,v 1.28 2008/01/07 00:14:06 zolty Exp $ */ #include "config.h" @@ -1007,7 +1007,7 @@ #if defined(UNDERNET) { ERR_NEEDREGGEDNICK, "%s :Cannot join channel (+r): this channel requires authentication -- you can obtain an account from %s", "477" }, #else - { ERR_NEEDREGGEDNICK, "%s :Cannot join channel (+R): this channel requires authentication -- you can register a nick from $s", "477" }, + { ERR_NEEDREGGEDNICK, "%s :Cannot join channel (+R): this channel requires authentication -- you can register a nick from %s", "477" }, #endif /* 478 */ { ERR_BANLISTFULL, "%s %s :Channel ban/ignore list is full", "478" }, @@ -1025,8 +1025,12 @@ { ERR_ISCHANSERVICE, "%s %s :Cannot kill, kick or deop a network service", "484" }, /* 485 */ { 0 }, +#if defined(DDB) || defined(SERVICES) /* 486 */ + { ERR_NONONREG, ":You need to register your nick to talk with %s", "485" }, +#else { 0 }, +#endif /* 487 */ { 0 }, /* 488 */ Index: ircd-ircdev/ircd/s_user.c diff -u ircd-ircdev/ircd/s_user.c:1.34 ircd-ircdev/ircd/s_user.c:1.35 --- ircd-ircdev/ircd/s_user.c:1.34 Tue Dec 11 15:38:26 2007 +++ ircd-ircdev/ircd/s_user.c Sun Jan 6 16:14:07 2008 @@ -21,7 +21,7 @@ */ /** @file * @brief Miscellaneous user-related helper functions. - * @version $Id: s_user.c,v 1.34 2007/12/11 23:38:26 zolty Exp $ + * @version $Id: s_user.c,v 1.35 2008/01/07 00:14:07 zolty Exp $ */ #include "config.h" @@ -529,6 +529,7 @@ #elif defined(DDB) || defined(SERVICES) { FLAG_NICKREG, 'r' }, { FLAG_NICKSUSPEND, 'S' }, + { FLAG_MSGONLYREG, 'R' }, #endif { FLAG_HIDDENHOST, 'x' } }; @@ -1078,6 +1079,14 @@ } if (is_silenced(source, dest)) return 0; + +#if defined(DDB) || defined(SERVICES) + if (IsMsgOnlyReg(dest) && !IsNickRegistered(source) && !IsOper(source)) { + if(!is_notice) + send_reply(source, ERR_NONONREG, cli_name(source)); + return 0; + } +#endif if (is_notice) sendcmdto_one(source, CMD_NOTICE, dest, "%C :%s", dest, text); @@ -1503,6 +1512,12 @@ else ClearNickSuspended(sptr); break; + case 'R': + if (what == MODE_ADD) + SetMsgOnlyReg(sptr); + else + ClearMsgOnlyReg(sptr); + break; #endif /* defined(DDB) || defined(SERVICES) */ /* if none of the given case is valid then compain by * sending raw 501 ( ERR_UMODEUNKNOWNFLAG ) ----------------------- End of diff ----------------------- |