2 # Parent 3987f011c7e948cab04f6b67eadf86aedf0b55fa
4 diff -r 3987f011c7e9 include/client.h
5 --- a/include/client.h Sun Jul 21 00:14:19 2013 +0100
6 +++ b/include/client.h Sun Jul 21 00:16:58 2013 +0100
8 #define FlagClr(set,flag) ((set)->bits[FLAGSET_INDEX(flag)] &= ~FLAGSET_MASK(flag))
10 /** String containing valid user modes, in no particular order. */
11 -#define infousermodes "diOoswkgx"
12 +#define infousermodes "diOoswkgxR"
14 /** Operator privileges. */
17 don't display channels in /whois */
18 FLAG_DEBUG, /**< send global debug/anti-hack info */
19 FLAG_ACCOUNT, /**< account name has been set */
20 + FLAG_ACCOUNTONLY, /**< ASUKA_R: hide privmsgs/notices if
21 + user is not authed or opered */
22 FLAG_HIDDENHOST, /**< user's host is hidden */
23 FLAG_LAST_FLAG, /**< number of flags */
24 FLAG_LOCAL_UMODES = FLAG_LOCOP, /**< First local mode flag */
26 #define IsHiddenHost(x) HasFlag(x, FLAG_HIDDENHOST)
27 /** Return non-zero if the client has an active PING request. */
28 #define IsPingSent(x) HasFlag(x, FLAG_PINGSENT)
29 +/** Return non-zero if the client should not receive privmsgs/notices
30 + * from unauthed users */
31 +#define IsAccountOnly(x) HasFlag(x, FLAG_ACCOUNTONLY)
33 /** Return non-zero if the client has operator or server privileges. */
34 #define IsPrivileged(x) (IsAnOper(x) || IsServer(x))
36 #define SetHiddenHost(x) SetFlag(x, FLAG_HIDDENHOST)
37 /** Mark a client as having a pending PING. */
38 #define SetPingSent(x) SetFlag(x, FLAG_PINGSENT)
39 +/** Mark a client as having mode +R (account only). */
40 +#define SetAccountOnly(x) SetFlag(x, FLAG_ACCOUNTONLY)
42 /** Return non-zero if \a sptr sees \a acptr as an operator. */
43 #define SeeOper(sptr,acptr) (IsAnOper(acptr) && (HasPriv(acptr, PRIV_DISPLAY) \
45 #define ClearPingSent(x) ClrFlag(x, FLAG_PINGSENT)
46 /** Clear the client's HUB flag. */
47 #define ClearHub(x) ClrFlag(x, FLAG_HUB)
48 +/** Remove mode +R (account only) from a client */
49 +#define ClearAccountOnly(x) ClrFlag(x, FLAG_ACCOUNTONLY)
52 #define FREEFLAG_SOCKET 0x0001 /**< socket needs to be freed */
53 diff -r 3987f011c7e9 include/numeric.h
54 --- a/include/numeric.h Sun Jul 21 00:14:19 2013 +0100
55 +++ b/include/numeric.h Sun Jul 21 00:16:58 2013 +0100
57 #define RPL_ENDOFGLIST 281 /* Undernet extension */
58 #define RPL_JUPELIST 282 /* Undernet extension - jupe -Kev */
59 #define RPL_ENDOFJUPELIST 283 /* Undernet extension - jupe -Kev */
60 -#define RPL_FEATURE 284 /* Undernet extension - features */
61 -/* RPL_CHANINFO_HANDLE 285 aircd */
62 -/* RPL_CHANINFO_USERS 286 aircd */
63 -/* RPL_CHANINFO_CHOPS 287 aircd */
64 -/* RPL_CHANINFO_VOICES 288 aircd */
65 -/* RPL_CHANINFO_AWAY 289 aircd */
66 -/* RPL_CHANINFO_OPERS 290 aircd */
67 -/* RPL_HELPHDR 290 Numeric List: Dalnet */
68 +#define RPL_FEATURE 284 /* QuakeNet - snircd */
69 +#define RPL_NEWHOSTIS 285 /* QuakeNet - snircd */
70 +#define RPL_CHKHEAD 286 /* QuakeNet - snircd */
71 +#define RPL_CHANUSER 287 /* QuakeNet - snircd */
72 +#define RPL_PATCHHEAD 288 /* QuakeNet - snircd */
73 +#define RPL_PATCHCON 289 /* QuakeNet - snircd */
74 +#define RPL_DATASTR 290 /* QuakeNet - snircd */
75 +#define RPL_ENDOFCHECK 291 /* QuakeNet - snircd */
76 /* RPL_CHANINFO_BANNED 291 aircd */
77 /* RPL_HELPOP 291 Numeric List: Dalnet */
78 /* RPL_CHANINFO_BANS 292 aircd */
80 #define ERR_TOOMANYCHANNELS 405
81 #define ERR_WASNOSUCHNICK 406
82 #define ERR_TOOMANYTARGETS 407
83 +#define ERR_SEARCHNOMATCH 408 /* QuakeNet - snircd */
84 /* ERR_NOSUCHSERVICE 408 IRCnet */
85 /* ERR_NOCOLORSONCHAN 408 Dalnet */
86 #define ERR_NOORIGIN 409
88 /* ERR_KILLDENY 485 unreal */
89 /* ERR_CANTKICKADMIN 485 PTlink */
90 /* ERR_HTMDISABLED 486 unreal */
91 +#define ERR_ACCOUNTONLY 486 /* QuakeNet/ASUKA extension */
92 /* ERR_CHANTOORECENT 487 IRCnet extension (?) */
93 /* ERR_TSLESSCHAN 488 IRCnet extension (?) */
94 #define ERR_VOICENEEDED 489 /* Undernet extension */
95 diff -r 3987f011c7e9 ircd/ircd_relay.c
96 --- a/ircd/ircd_relay.c Sun Jul 21 00:14:19 2013 +0100
97 +++ b/ircd/ircd_relay.c Sun Jul 21 00:16:58 2013 +0100
99 is_silenced(sptr, acptr))
103 + * +R check, if target is +R and we're not +r (or opered) then
107 + if (IsAccountOnly(acptr) && !IsAccount(sptr) && !IsOper(sptr)) {
108 + send_reply(sptr, ERR_ACCOUNTONLY, cli_name(acptr));
113 * send away message if user away
116 check_target_limit(sptr, acptr, cli_name(acptr), 0)) ||
117 is_silenced(sptr, acptr))
121 + * +R check, if target is +R and we're not +r (or opered) then
125 + if (IsAccountOnly(acptr) && !IsAccount(sptr) && !IsOper(sptr))
129 * deliver the message
131 diff -r 3987f011c7e9 ircd/m_invite.c
132 --- a/ircd/m_invite.c Sun Jul 21 00:14:19 2013 +0100
133 +++ b/ircd/m_invite.c Sun Jul 21 00:16:58 2013 +0100
136 /* If we get here, it was a VALID and meaningful INVITE */
138 + if (IsAccountOnly(acptr) && !IsAccount(sptr) && !IsOper(sptr)) {
139 + send_reply(sptr, ERR_ACCOUNTONLY, cli_name(acptr));
143 if (check_target_limit(sptr, acptr, cli_name(acptr), 0))
146 diff -r 3987f011c7e9 ircd/s_err.c
147 --- a/ircd/s_err.c Sun Jul 21 00:14:19 2013 +0100
148 +++ b/ircd/s_err.c Sun Jul 21 00:16:58 2013 +0100
149 @@ -1004,7 +1004,7 @@
154 + { ERR_ACCOUNTONLY, "%s :You must be authed in order to message this user", "486" },
158 diff -r 3987f011c7e9 ircd/s_user.c
159 --- a/ircd/s_user.c Sun Jul 21 00:14:19 2013 +0100
160 +++ b/ircd/s_user.c Sun Jul 21 00:16:58 2013 +0100
162 { FLAG_CHSERV, 'k' },
164 { FLAG_ACCOUNT, 'r' },
165 - { FLAG_HIDDENHOST, 'x' }
166 + { FLAG_HIDDENHOST, 'x' },
167 + { FLAG_ACCOUNTONLY, 'R' }
170 /** Length of #userModeList. */
171 @@ -1088,6 +1089,12 @@
176 + if (what == MODE_ADD)
177 + SetAccountOnly(sptr);
179 + ClearAccountOnly(sptr);
182 send_reply(sptr, ERR_UMODEUNKNOWNFLAG, *m);