Branch merge.
This commit is contained in:
commit
d0f4d745c6
3 changed files with 37 additions and 11 deletions
|
@ -11,3 +11,4 @@ who !#channel - Gives a full output of users on the channel.
|
||||||
mode !#channel - Gives the full modes of a channel including any keys.
|
mode !#channel - Gives the full modes of a channel including any keys.
|
||||||
chantrace !#channel - Gives full output despite not being on channel.
|
chantrace !#channel - Gives full output despite not being on channel.
|
||||||
masktrace !nick!user@host :gecos - Lists matching users on all servers.
|
masktrace !nick!user@host :gecos - Lists matching users on all servers.
|
||||||
|
topic !#channel - Gives full output despite not being on channel.
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
#include "ircd.h"
|
#include "ircd.h"
|
||||||
#include "numeric.h"
|
#include "numeric.h"
|
||||||
#include "send.h"
|
#include "send.h"
|
||||||
|
#include "s_newconf.h"
|
||||||
#include "s_conf.h"
|
#include "s_conf.h"
|
||||||
#include "s_serv.h"
|
#include "s_serv.h"
|
||||||
#include "msg.h"
|
#include "msg.h"
|
||||||
|
@ -62,26 +63,43 @@ m_topic(struct Client *client_p, struct Client *source_p, int parc, const char *
|
||||||
struct Channel *chptr = NULL;
|
struct Channel *chptr = NULL;
|
||||||
struct membership *msptr;
|
struct membership *msptr;
|
||||||
char *p = NULL;
|
char *p = NULL;
|
||||||
|
const char *name;
|
||||||
|
int operspy = 0;
|
||||||
|
|
||||||
if((p = strchr(parv[1], ',')))
|
if((p = strchr(parv[1], ',')))
|
||||||
*p = '\0';
|
*p = '\0';
|
||||||
|
|
||||||
|
name = parv[1];
|
||||||
|
|
||||||
|
if(IsOperSpy(source_p) && parv[1][0] == '!')
|
||||||
|
{
|
||||||
|
name++;
|
||||||
|
operspy = 1;
|
||||||
|
|
||||||
|
if(EmptyString(name))
|
||||||
|
{
|
||||||
|
sendto_one(source_p, form_str(ERR_NEEDMOREPARAMS),
|
||||||
|
me.name, source_p->name, "TOPIC");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(MyClient(source_p) && !IsFloodDone(source_p))
|
if(MyClient(source_p) && !IsFloodDone(source_p))
|
||||||
flood_endgrace(source_p);
|
flood_endgrace(source_p);
|
||||||
|
|
||||||
if(!IsChannelName(parv[1]))
|
if(!IsChannelName(name))
|
||||||
{
|
{
|
||||||
sendto_one_numeric(source_p, ERR_NOSUCHCHANNEL,
|
sendto_one_numeric(source_p, ERR_NOSUCHCHANNEL,
|
||||||
form_str(ERR_NOSUCHCHANNEL), parv[1]);
|
form_str(ERR_NOSUCHCHANNEL), name);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
chptr = find_channel(parv[1]);
|
chptr = find_channel(name);
|
||||||
|
|
||||||
if(chptr == NULL)
|
if(chptr == NULL)
|
||||||
{
|
{
|
||||||
sendto_one_numeric(source_p, ERR_NOSUCHCHANNEL,
|
sendto_one_numeric(source_p, ERR_NOSUCHCHANNEL,
|
||||||
form_str(ERR_NOSUCHCHANNEL), parv[1]);
|
form_str(ERR_NOSUCHCHANNEL), name);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,7 +111,7 @@ m_topic(struct Client *client_p, struct Client *source_p, int parc, const char *
|
||||||
if(msptr == NULL)
|
if(msptr == NULL)
|
||||||
{
|
{
|
||||||
sendto_one_numeric(source_p, ERR_NOTONCHANNEL,
|
sendto_one_numeric(source_p, ERR_NOTONCHANNEL,
|
||||||
form_str(ERR_NOTONCHANNEL), parv[1]);
|
form_str(ERR_NOTONCHANNEL), name);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -116,19 +134,22 @@ m_topic(struct Client *client_p, struct Client *source_p, int parc, const char *
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
sendto_one(source_p, form_str(ERR_CHANOPRIVSNEEDED),
|
sendto_one(source_p, form_str(ERR_CHANOPRIVSNEEDED),
|
||||||
me.name, source_p->name, parv[1]);
|
me.name, source_p->name, name);
|
||||||
}
|
}
|
||||||
else if(MyClient(source_p))
|
else if(MyClient(source_p))
|
||||||
{
|
{
|
||||||
if(!IsMember(source_p, chptr) && SecretChannel(chptr))
|
if(operspy)
|
||||||
|
report_operspy(source_p, "TOPIC", chptr->chname);
|
||||||
|
if(!IsMember(source_p, chptr) && SecretChannel(chptr) &&
|
||||||
|
!operspy)
|
||||||
{
|
{
|
||||||
sendto_one_numeric(source_p, ERR_NOTONCHANNEL,
|
sendto_one_numeric(source_p, ERR_NOTONCHANNEL,
|
||||||
form_str(ERR_NOTONCHANNEL), parv[1]);
|
form_str(ERR_NOTONCHANNEL), name);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if(chptr->topic == NULL)
|
if(chptr->topic == NULL)
|
||||||
sendto_one(source_p, form_str(RPL_NOTOPIC),
|
sendto_one(source_p, form_str(RPL_NOTOPIC),
|
||||||
me.name, source_p->name, parv[1]);
|
me.name, source_p->name, name);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sendto_one(source_p, form_str(RPL_TOPIC),
|
sendto_one(source_p, form_str(RPL_TOPIC),
|
||||||
|
|
|
@ -533,6 +533,10 @@ mo_modrestart(struct Client *client_p, struct Client *source_p, int parc, const
|
||||||
#define RTLD_NOW RTLD_LAZY /* openbsd deficiency */
|
#define RTLD_NOW RTLD_LAZY /* openbsd deficiency */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef RTLD_LOCAL
|
||||||
|
#define RTLD_LOCAL 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CHARYBDIS_PROFILE
|
#ifdef CHARYBDIS_PROFILE
|
||||||
# ifndef RTLD_PROFILE
|
# ifndef RTLD_PROFILE
|
||||||
# warning libdl may not support profiling, sucks. :(
|
# warning libdl may not support profiling, sucks. :(
|
||||||
|
@ -792,9 +796,9 @@ load_a_module(const char *path, int warn, int core)
|
||||||
mod_basename = irc_basename(path);
|
mod_basename = irc_basename(path);
|
||||||
|
|
||||||
#ifdef CHARYBDIS_PROFILE
|
#ifdef CHARYBDIS_PROFILE
|
||||||
tmpptr = dlopen(path, RTLD_NOW | RTLD_PROFILE);
|
tmpptr = dlopen(path, RTLD_NOW | RTLD_LOCAL | RTLD_PROFILE);
|
||||||
#else
|
#else
|
||||||
tmpptr = dlopen(path, RTLD_NOW);
|
tmpptr = dlopen(path, RTLD_NOW | RTLD_LOCAL);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if(tmpptr == NULL)
|
if(tmpptr == NULL)
|
||||||
|
|
Loading…
Reference in a new issue