projects
/
ircu2.10.12-pk.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
beb7dac
)
added FEAT_CHMODE_A_NOSET to prevent +a from being set by users
author
pk910
<philipp@zoelle1.de>
Tue, 7 Feb 2012 13:09:04 +0000
(14:09 +0100)
committer
pk910
<philipp@zoelle1.de>
Tue, 7 Feb 2012 13:09:04 +0000
(14:09 +0100)
doc/example.conf
patch
|
blob
|
history
include/ircd_features.h
patch
|
blob
|
history
ircd/channel.c
patch
|
blob
|
history
ircd/ircd_features.c
patch
|
blob
|
history
ircd/m_join.c
patch
|
blob
|
history
diff --git
a/doc/example.conf
b/doc/example.conf
index 0e4c6c289eab47b4af46c200b6e1b0ab6f90030e..dab243d3774a7dafe3c9157f2088165418d59319 100644
(file)
--- a/
doc/example.conf
+++ b/
doc/example.conf
@@
-962,6
+962,7
@@
features
# "LOC_TARGET" = "somenick";
# "CHMODE_A_ENABLE" = "TRUE";
# "CHMODE_A_TARGET" = "ChanServ";
# "LOC_TARGET" = "somenick";
# "CHMODE_A_ENABLE" = "TRUE";
# "CHMODE_A_TARGET" = "ChanServ";
+# "CHMODE_A_NOSET" = "TRUE"; # Mode is not settable by normal users (only services chan set it)
# "CHMODE_F_ENABLE" = "TRUE";
# "UNKNOWN_CMD_ENABLE" = "TRUE";
# "UNKNOWN_CMD_TARGET" = "OpServ";
# "CHMODE_F_ENABLE" = "TRUE";
# "UNKNOWN_CMD_ENABLE" = "TRUE";
# "UNKNOWN_CMD_TARGET" = "OpServ";
diff --git
a/include/ircd_features.h
b/include/ircd_features.h
index 1b260172eb3af0793b6268785febf303cff32395..c4c65f843bf544081b99ac6ab5873becc576f2c2 100644
(file)
--- a/
include/ircd_features.h
+++ b/
include/ircd_features.h
@@
-177,6
+177,7
@@
enum Feature {
FEAT_UNKNOWN_CMD_TARGET,
FEAT_CHMODE_A_ENABLE,
FEAT_CHMODE_A_TARGET,
FEAT_UNKNOWN_CMD_TARGET,
FEAT_CHMODE_A_ENABLE,
FEAT_CHMODE_A_TARGET,
+ FEAT_CHMODE_A_NOSET,
FEAT_CHMODE_F_ENABLE,
FEAT_HALFOP,
FEAT_CHMODE_F_ENABLE,
FEAT_HALFOP,
diff --git
a/ircd/channel.c
b/ircd/channel.c
index dc8783ce5994f86570abc5885dcfbac86c2271b3..41e2cdb6dda2d6bfd51dcd95e250451ee8361137 100644
(file)
--- a/
ircd/channel.c
+++ b/
ircd/channel.c
@@
-2513,6
+2513,9
@@
mode_parse_access(struct ParseState *state, ulong64 *flag_p)
return;
}
return;
}
+ if(feature_bool(FEAT_CHMODE_A_NOSET) && !(state->flags & MODE_PARSE_FORCE)) /* mode can'T be set. */
+ return;
+
if (!(state->flags & MODE_PARSE_WIPEOUT) &&
(!t_access || t_access == state->chptr->mode.access))
return;
if (!(state->flags & MODE_PARSE_WIPEOUT) &&
(!t_access || t_access == state->chptr->mode.access))
return;
diff --git
a/ircd/ircd_features.c
b/ircd/ircd_features.c
index 8cc5037756c9e14b934dfc30cc7b083305c00af2..6bb973e551d1e43822e3dcff17487c3b8db36f1a 100644
(file)
--- a/
ircd/ircd_features.c
+++ b/
ircd/ircd_features.c
@@
-442,6
+442,7
@@
static struct FeatureDesc {
F_S(UNKNOWN_CMD_TARGET, FEAT_NULL, 0, 0),
F_B(CHMODE_A_ENABLE, 0, 0, 0),
F_S(CHMODE_A_TARGET, FEAT_NULL, 0, 0),
F_S(UNKNOWN_CMD_TARGET, FEAT_NULL, 0, 0),
F_B(CHMODE_A_ENABLE, 0, 0, 0),
F_S(CHMODE_A_TARGET, FEAT_NULL, 0, 0),
+ F_B(CHMODE_A_NOSET, 0, 0, 0),
F_B(CHMODE_F_ENABLE, 0, 0, 0),
F_B(HALFOP, 0, 0, 0),
F_B(CHMODE_F_ENABLE, 0, 0, 0),
F_B(HALFOP, 0, 0, 0),
diff --git
a/ircd/m_join.c
b/ircd/m_join.c
index 9e2298331ff1a7957c5f42a1529f89393cb220c1..63c93d55d6bc2244f1a666bd685c3a0078be24f3 100644
(file)
--- a/
ircd/m_join.c
+++ b/
ircd/m_join.c
@@
-265,7
+265,7
@@
int m_join(struct Client *cptr, struct Client *sptr, int parc, char *parv[])
override = 1;
}
override = 1;
}
- if(!err && !override && !IsInvited(sptr, chptr) && chptr->mode.access && chptr->mode.access > 0 && chptr->mode.access < 500 && feature_bool(FEAT_CHMODE_A_ENABLE)) {
+ if(!err && !override && !IsInvited(sptr, chptr) && chptr->mode.access && chptr->mode.access > 0 && chptr->mode.access <
=
500 && feature_bool(FEAT_CHMODE_A_ENABLE)) {
//We have to check the users channel access...
struct Client *acptr;
if(feature_str(FEAT_CHMODE_A_TARGET) && (acptr = FindUser(feature_str(FEAT_CHMODE_A_TARGET))) && IsNetServ(acptr) && IsService(cli_user(acptr)->server)) {
//We have to check the users channel access...
struct Client *acptr;
if(feature_str(FEAT_CHMODE_A_TARGET) && (acptr = FindUser(feature_str(FEAT_CHMODE_A_TARGET))) && IsNetServ(acptr) && IsService(cli_user(acptr)->server)) {