Branch Merge
This commit is contained in:
commit
015b28a06c
12
NEWS
12
NEWS
|
@ -17,7 +17,9 @@ new configuration options
|
|||
will just get the help index and that's it on /quote help.
|
||||
|
||||
new commands
|
||||
- /CYCLE - server-side /CYCLE, also called /HOP in some clients/servers.
|
||||
- CYCLE #channel - server-side CYCLE, also called HOP in some clients/servers.
|
||||
Parts the user from the given channel, then joins them to it immediately after.
|
||||
Enabled by loading extensions/m_cycle.
|
||||
|
||||
opers
|
||||
- Override no longer alows overriding opers to talk through +q, +m, etc.
|
||||
|
@ -30,14 +32,22 @@ opers
|
|||
- All module management commands (MODLOAD, MODLIST, MODUNLOAD, MODRELOAD and
|
||||
MODRESTART) can be executed remotely. See the appropriate helpfile for
|
||||
details.
|
||||
- OMODE can now set and unset +ah.
|
||||
- OJOIN now works with !#channel and %#channel.
|
||||
- Staff channelmodes (+AO) now require chanops to set.
|
||||
|
||||
other
|
||||
- Added a strip_unprintable function to make evasion of cmodes +G and +K
|
||||
less trivial.
|
||||
- Massive helpfile updates.
|
||||
- Added SVSJOIN s2s command. This allows things like atheme's ns_ajoin
|
||||
to work on shadowircd.
|
||||
- Added BAN stuff (propogated bans on burst) from charybdis trunk. This
|
||||
can be disabled and the old behavior can be used by setting the
|
||||
general::use_propogated_bans option to no.
|
||||
- The --enable-small-net configure option is now enabled by default.
|
||||
If you wish to disable small net mode, pass --disable-small-net to
|
||||
configure.
|
||||
|
||||
-- shadowircd-6.0.0
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
Todo list for ShadowIRCd 6.1
|
||||
-----------------------------
|
||||
* update ojoin/omode/etc to use +ah
|
||||
* notice/message !#channel and %#channel
|
||||
* Add a disable_oper option to auth {} to not allow users in that auth block
|
||||
to use OPER.
|
||||
|
|
|
@ -36,7 +36,7 @@ m_oaccept.c - OACCEPT - Add metadata to a user that will allow you to
|
|||
Syntax: OACCEPT <nick>
|
||||
|
||||
m_ojoin.c - OJOIN - Join a channel through any modes or limits with
|
||||
an optional status (@+)
|
||||
an optional status (!@%+)
|
||||
Syntax: OJOIN [status]<channel>
|
||||
|
||||
m_olist.c - OLIST - Lists channels like LIST, but shows hidden
|
||||
|
|
|
@ -65,7 +65,7 @@ mo_ojoin(struct Client *client_p, struct Client *source_p, int parc, const char
|
|||
return 0;
|
||||
}
|
||||
|
||||
if(*parv[1] == '@' || *parv[1] == '%' || *parv[1] == '+')
|
||||
if(*parv[1] == '@' || *parv[1] == '%' || *parv[1] == '+' || *parv[1] == '!')
|
||||
{
|
||||
parv[1]++;
|
||||
move_me = 1;
|
||||
|
@ -98,7 +98,20 @@ mo_ojoin(struct Client *client_p, struct Client *source_p, int parc, const char
|
|||
me.name, parv[1],
|
||||
source_p->name, source_p->username, source_p->host);
|
||||
|
||||
if(*parv[1] == '@')
|
||||
if(*parv[1] == '!' && ConfigChannel.use_admin)
|
||||
{
|
||||
add_user_to_channel(chptr, source_p, CHFL_ADMIN);
|
||||
sendto_server(client_p, chptr, CAP_TS6, NOCAPS,
|
||||
":%s SJOIN %ld %s + :!%s",
|
||||
me.id, (long) chptr->channelts, chptr->chname, source_p->id);
|
||||
sendto_channel_local(ALL_MEMBERS, chptr, ":%s!%s@%s JOIN %s",
|
||||
source_p->name,
|
||||
source_p->username, source_p->host, chptr->chname);
|
||||
sendto_channel_local(ALL_MEMBERS, chptr, ":%s MODE %s +a %s",
|
||||
me.name, chptr->chname, source_p->name);
|
||||
|
||||
}
|
||||
else if(*parv[1] == '@')
|
||||
{
|
||||
add_user_to_channel(chptr, source_p, CHFL_CHANOP);
|
||||
sendto_server(client_p, chptr, CAP_TS6, NOCAPS,
|
||||
|
@ -111,6 +124,18 @@ mo_ojoin(struct Client *client_p, struct Client *source_p, int parc, const char
|
|||
me.name, chptr->chname, source_p->name);
|
||||
|
||||
}
|
||||
else if(*parv[1] == '%' && ConfigChannel.use_halfop)
|
||||
{
|
||||
add_user_to_channel(chptr, source_p, CHFL_HALFOP);
|
||||
sendto_server(client_p, chptr, CAP_TS6, NOCAPS,
|
||||
":%s SJOIN %ld %s + :%s%s",
|
||||
me.id, (long) chptr->channelts, chptr->chname, "%", source_p->id);
|
||||
sendto_channel_local(ALL_MEMBERS, chptr, ":%s!%s@%s JOIN %s",
|
||||
source_p->name,
|
||||
source_p->username, source_p->host, chptr->chname);
|
||||
sendto_channel_local(ALL_MEMBERS, chptr, ":%s MODE %s +h %s",
|
||||
me.name, chptr->chname, source_p->name);
|
||||
}
|
||||
else if(*parv[1] == '+')
|
||||
{
|
||||
add_user_to_channel(chptr, source_p, CHFL_VOICE);
|
||||
|
|
|
@ -124,7 +124,24 @@ mo_omode(struct Client *client_p, struct Client *source_p, int parc, const char
|
|||
set_channel_mode(client_p, source_p->servptr, chptr, msptr,
|
||||
parc - 2, parv + 2);
|
||||
#else
|
||||
if (parc == 4 && !strcmp(parv[2], "+o") && !irccmp(parv[3], source_p->name))
|
||||
if (parc == 4 && !strcmp(parv[2], "+a") && !irccmp(parv[3], source_p->name))
|
||||
{
|
||||
/* Admining themselves */
|
||||
if (!wasonchannel)
|
||||
{
|
||||
sendto_one_numeric(source_p, ERR_USERNOTINCHANNEL,
|
||||
form_str(ERR_USERNOTINCHANNEL), parv[3], chptr->chname);
|
||||
return 0;
|
||||
}
|
||||
sendto_channel_local(ALL_MEMBERS, chptr, ":%s MODE %s +a %s",
|
||||
me.name, parv[1], source_p->name);
|
||||
sendto_server(NULL, chptr, CAP_TS6, NOCAPS,
|
||||
":%s TMODE %ld %s +a %s",
|
||||
me.id, (long) chptr->channelts, parv[1],
|
||||
source_p->id);
|
||||
msptr->flags |= CHFL_ADMIN;
|
||||
}
|
||||
else if (parc == 4 && !strcmp(parv[2], "+o") && !irccmp(parv[3], source_p->name))
|
||||
{
|
||||
/* Opping themselves */
|
||||
if (!wasonchannel)
|
||||
|
@ -141,11 +158,28 @@ mo_omode(struct Client *client_p, struct Client *source_p, int parc, const char
|
|||
source_p->id);
|
||||
msptr->flags |= CHFL_CHANOP;
|
||||
}
|
||||
else
|
||||
else if (parc == 4 && !strcmp(parv[2], "+h") && !irccmp(parv[3], source_p->name))
|
||||
{
|
||||
/* Halfopping themselves */
|
||||
if (!wasonchannel)
|
||||
{
|
||||
sendto_one_numeric(source_p, ERR_USERNOTINCHANNEL,
|
||||
form_str(ERR_USERNOTINCHANNEL), parv[3], chptr->chname);
|
||||
return 0;
|
||||
}
|
||||
sendto_channel_local(ALL_MEMBERS, chptr, ":%s MODE %s +h %s",
|
||||
me.name, parv[1], source_p->name);
|
||||
sendto_server(NULL, chptr, CAP_TS6, NOCAPS,
|
||||
":%s TMODE %ld %s +h %s",
|
||||
me.id, (long) chptr->channelts, parv[1],
|
||||
source_p->id);
|
||||
msptr->flags |= CHFL_HALFOP;
|
||||
}
|
||||
else if (ConfigChannel.use_admin)
|
||||
{
|
||||
/* Hack it so set_channel_mode() will accept */
|
||||
if (wasonchannel)
|
||||
msptr->flags |= CHFL_CHANOP;
|
||||
msptr->flags |= CHFL_ADMIN;
|
||||
else
|
||||
{
|
||||
add_user_to_channel(chptr, source_p, CHFL_CHANOP);
|
||||
|
@ -156,6 +190,27 @@ mo_omode(struct Client *client_p, struct Client *source_p, int parc, const char
|
|||
/* We know they were not opped before and they can't have opped
|
||||
* themselves as set_channel_mode() does not allow that
|
||||
* -- jilles */
|
||||
if (wasonchannel)
|
||||
msptr->flags &= ~CHFL_ADMIN;
|
||||
else
|
||||
remove_user_from_channel(msptr);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* CHFL_ADMIN is only useful if admin is enabled
|
||||
* so hack it with op if it is not. */
|
||||
if (wasonchannel)
|
||||
msptr->flags |= CHFL_CHANOP;
|
||||
else
|
||||
{
|
||||
add_user_to_channel(chptr, source_p, CHFL_CHANOP);
|
||||
msptr = find_channel_membership(chptr, source_p);
|
||||
}
|
||||
set_channel_mode(client_p, source_p, chptr, msptr,
|
||||
parc - 2, parv + 2);
|
||||
/* We know they were not opped before and they can't have opped
|
||||
* themselves as set_channel_mode() does not allow that
|
||||
* -- jilles */
|
||||
if (wasonchannel)
|
||||
msptr->flags &= ~CHFL_CHANOP;
|
||||
else
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
MODE <nick> +s <+|-><modes>
|
||||
|
||||
Server notice masks:
|
||||
Server notice masks: (? designates that the snomask is provided
|
||||
by an extension and may not be present on
|
||||
this server)
|
||||
|
||||
SNOMASK DESCRIPTION
|
||||
-----------------------------------------------------------------
|
||||
|
@ -9,11 +11,13 @@ Server notice masks:
|
|||
+C - Extended local client connections and exits
|
||||
+d - Server debug messages
|
||||
+f - Clients refused due to limits
|
||||
? +F - Global client connections and exits
|
||||
+k - Server and service kill messages
|
||||
+n - Local client nick changes
|
||||
+r - Invalid usernames and dumb HTTP proxies
|
||||
+s - Generic server messages and oper kills
|
||||
+u - Client connections without auth{} block
|
||||
? +W - Shows whenever someone does a local whois on you
|
||||
+x - New server introduction and split messages
|
||||
+y - Juped channel join attempts, etc
|
||||
+Z - Operspy usage
|
||||
|
|
20
src/chmode.c
20
src/chmode.c
|
@ -671,6 +671,8 @@ chm_staff(struct Client *source_p, struct Channel *chptr,
|
|||
int alevel, int parc, int *parn,
|
||||
const char **parv, int *errors, int dir, char c, long mode_type)
|
||||
{
|
||||
int override = 0;
|
||||
|
||||
if(!IsOper(source_p) && !IsServer(source_p))
|
||||
{
|
||||
if(!(*errors & SM_ERR_NOPRIVS))
|
||||
|
@ -687,6 +689,20 @@ chm_staff(struct Client *source_p, struct Channel *chptr,
|
|||
return;
|
||||
}
|
||||
|
||||
if(alevel != CHFL_CHANOP && alevel != CHFL_ADMIN && alevel != CHFL_HALFOP)
|
||||
{
|
||||
if (IsOverride(source_p))
|
||||
override = 1;
|
||||
else
|
||||
{
|
||||
if(!(*errors & SM_ERR_NOOPS))
|
||||
sendto_one(source_p, form_str(ERR_CHANOPRIVSNEEDED),
|
||||
me.name, source_p->name, chptr->chname);
|
||||
*errors |= SM_ERR_NOOPS;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if(MyClient(source_p) && (++mode_limit_simple > MAXMODES_SIMPLE))
|
||||
return;
|
||||
|
||||
|
@ -701,7 +717,7 @@ chm_staff(struct Client *source_p, struct Channel *chptr,
|
|||
mode_changes[mode_count].nocaps = 0;
|
||||
mode_changes[mode_count].id = NULL;
|
||||
mode_changes[mode_count].mems = ALL_MEMBERS;
|
||||
mode_changes[mode_count].override = 0;
|
||||
mode_changes[mode_count].override = override;
|
||||
mode_changes[mode_count++].arg = NULL;
|
||||
}
|
||||
else if((dir == MODE_DEL) && (chptr->mode.mode & mode_type))
|
||||
|
@ -713,7 +729,7 @@ chm_staff(struct Client *source_p, struct Channel *chptr,
|
|||
mode_changes[mode_count].caps = 0;
|
||||
mode_changes[mode_count].nocaps = 0;
|
||||
mode_changes[mode_count].mems = ALL_MEMBERS;
|
||||
mode_changes[mode_count].override = 0;
|
||||
mode_changes[mode_count].override = override;
|
||||
mode_changes[mode_count].id = NULL;
|
||||
mode_changes[mode_count++].arg = NULL;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue