本文整理汇总了C++中IsAnOper函数的典型用法代码示例。如果您正苦于以下问题:C++ IsAnOper函数的具体用法?C++ IsAnOper怎么用?C++ IsAnOper使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了IsAnOper函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CMD_FUNC
/*
* m_userhost added by Darren Reed 13/8/91 to aid clients and reduce
* the need for complicated requests like WHOIS. It returns user/host
* information only (no spurious AWAY labels or channels).
* Re-written by Dianora 1999
*/
DLLFUNC CMD_FUNC(m_userhost)
{
char *p; /* scratch end pointer */
char *cn; /* current name */
struct Client *acptr;
char response[5][NICKLEN * 2 + CHANNELLEN + USERLEN + HOSTLEN + 30];
int i; /* loop counter */
if (parc < 2)
{
sendto_one(sptr, rpl_str(ERR_NEEDMOREPARAMS),
me.name, parv[0], "USERHOST");
return 0;
}
/* The idea is to build up the response string out of pieces
* none of this strlen() nonsense.
* 5 * (NICKLEN*2+CHANNELLEN+USERLEN+HOSTLEN+30) is still << sizeof(buf)
* and our ircsprintf() truncates it to fit anyway. There is
* no danger of an overflow here. -Dianora
*/
response[0][0] = response[1][0] = response[2][0] =
response[3][0] = response[4][0] = '\0';
cn = parv[1];
for (i = 0; (i < 5) && cn; i++)
{
if ((p = strchr(cn, ' ')))
*p = '\0';
if ((acptr = find_person(cn, NULL)))
{
ircsprintf(response[i], "%s%s=%c%[email protected]%s",
acptr->name,
(IsAnOper(acptr) && (!IsHideOper(acptr) || sptr == acptr || IsAnOper(sptr)))
? "*" : "",
(acptr->user->away) ? '-' : '+',
acptr->user->username,
((acptr != sptr) && !IsOper(sptr)
&& IsHidden(acptr) ? acptr->user->virthost :
acptr->user->realhost));
}
if (p)
p++;
cn = p;
}
sendto_one(sptr, rpl_str(RPL_USERHOST), me.name, parv[0],
response[0], response[1], response[2], response[3], response[4]);
return 0;
}
示例2: send_who_reply
static void send_who_reply(aClient *sptr, aClient *acptr,
char *channel, char *status, char *xstat)
{
char *stat;
char *host;
int flat = (FLAT_MAP && !IsAnOper(sptr)) ? 1 : 0;
stat = malloc(strlen(status) + strlen(xstat) + 1);
sprintf(stat, "%s%s", status, xstat);
if (IsAnOper(sptr))
{
if (who_flags & WF_REALHOST)
host = acptr->user->realhost;
else if (who_flags & WF_IP)
host = (acptr->user->ip_str ? acptr->user->ip_str :
acptr->user->realhost);
else
host = GetHost(acptr);
}
else
host = GetHost(acptr);
if (IsULine(acptr) && !IsOper(sptr) && HIDE_ULINES)
sendto_one(sptr, getreply(RPL_WHOREPLY), me.name, sptr->name,
channel, /* channel name */
acptr->user->username, /* user name */
host, /* hostname */
"hidden", /* let's hide the server from normal users if the server is a uline and HIDE_ULINES is on */
acptr->name, /* nick */
stat, /* status */
0, /* hops (hidden) */
acptr->info /* realname */
);
else
sendto_one(sptr, getreply(RPL_WHOREPLY), me.name, sptr->name,
channel, /* channel name */
acptr->user->username, /* user name */
host, /* hostname */
acptr->user->server, /* server name */
acptr->name, /* nick */
stat, /* status */
flat ? 0 : acptr->hopcount, /* hops */
acptr->info /* realname */
);
free(stat);
}
示例3: m_lag
DLLFUNC int m_lag(aClient *cptr, aClient *sptr, int parc, char *parv[])
{
if (MyClient(sptr))
if (!IsAnOper(sptr))
{
sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name,
parv[0]);
return 0;
}
if (parc < 2)
{
sendto_one(sptr, err_str(ERR_NEEDMOREPARAMS),
me.name, parv[0], "LAG");
return 0;
}
if (*parv[1] == '\0')
{
sendto_one(sptr, err_str(ERR_NEEDMOREPARAMS),
me.name, parv[0], "LAG");
return 0;
}
if (hunt_server_token(cptr, sptr, MSG_LAG, TOK_LAG, ":%s", 1, parc,
parv) == HUNTED_NOSUCH)
{
return 0;
}
sendto_one(sptr, ":%s NOTICE %s :Lag reply -- %s %s %li",
me.name, sptr->name, me.name, parv[1], TStime());
return 0;
}
示例4: show_opers
static void
show_opers(aClient *cptr, char *name)
{
aClient *cptr2;
DLink *lp;
int j = 0;
for (lp = oper_list; lp; lp = lp->next)
{
cptr2 = lp->value.cptr;
if (!IsAnOper(cptr))
{
if (cptr2->umode & UMODE_h)
{
sendto_one(cptr, ":%s %d %s :%s (%[email protected]%s) Idle: %ld",
me.name, RPL_STATSDEBUG, name, cptr2->name,
cptr2->user->username, cptr2->user->host,
(long)(timeofday - cptr2->user->last));
j++;
}
}
else
{
sendto_one(cptr, ":%s %d %s :%s (%[email protected]%s) Idle: %ld",
me.name, RPL_STATSDEBUG, name, cptr2->name,
cptr2->user->username, cptr2->user->host,
(long)(timeofday - cptr2->user->last));
j++;
}
}
sendto_one(cptr, ":%s %d %s :%d OPER%s", me.name, RPL_STATSDEBUG,
name, j, (j == 1) ? "" : "s");
}
示例5: m_svso
int m_svso(aClient *cptr, aClient *sptr, int parc, char *parv[])
{
aClient *acptr;
long fLag;
if (!IsULine(sptr))
return 0;
if (parc < 3)
return 0;
if (!(acptr = find_person(parv[1], (aClient *)NULL)))
return 0;
if (!MyClient(acptr))
{
sendto_one(acptr, ":%s SVSO %s %s", parv[0], parv[1], parv[2]);
return 0;
}
if (*parv[2] == '+')
{
int *i, flag;
char *m = NULL;
for (m = (parv[2] + 1); *m; m++)
{
for (i = oper_access; (flag = *i); i += 2)
{
if (*m == (char) *(i + 1))
{
acptr->oflag |= flag;
break;
}
}
}
}
if (*parv[2] == '-')
{
fLag = acptr->umodes;
if (IsOper(acptr) && !IsHideOper(acptr))
{
IRCstats.operators--;
VERIFY_OPERCOUNT(acptr, "svso");
}
if (IsAnOper(acptr))
delfrom_fdlist(acptr->slot, &oper_fdlist);
acptr->umodes &=
~(UMODE_OPER | UMODE_LOCOP | UMODE_HELPOP |UMODE_SERVICES |
UMODE_SADMIN | UMODE_ADMIN | UMODE_COADMIN);
acptr->umodes &=
~(UMODE_NETADMIN | UMODE_WHOIS);
acptr->umodes &=
~(UMODE_KIX | UMODE_DEAF | UMODE_HIDEOPER | UMODE_VICTIM);
acptr->oflag = 0;
remove_oper_snomasks(acptr);
RunHook2(HOOKTYPE_LOCAL_OPER, acptr, 0);
send_umode_out(acptr, acptr, fLag);
}
return 0;
}
示例6: show_servers
/* show_servers
* replies to stats v requests
*/
static void
show_servers(aClient *cptr, char *name)
{
aClient *cptr2;
DLink *lp;
int j = 0;
for (lp = server_list; lp; lp = lp->next)
{
cptr2 = lp->value.cptr;
#ifdef HIDEULINEDSERVS
if(IsULine(cptr2) && !IsAnOper(cptr))
continue;
#endif
j++;
sendto_one(cptr, ":%s %d %s :%s (%s!%[email protected]%s) Idle: %ld",
me.name, RPL_STATSDEBUG, name, cptr2->name,
(cptr2->serv->bynick[0] ? cptr2->serv->bynick : "Remote."),
(cptr2->serv->byuser[0] ? cptr2->serv->byuser : "*"),
(cptr2->serv->byhost[0] ? cptr2->serv->byhost : "*"),
(long)(timeofday - cptr2->lasttime));
}
sendto_one(cptr, ":%s %d %s :%d Server%s", me.name, RPL_STATSDEBUG,
name, j, (j == 1) ? "" : "s");
}
示例7: umode_allow_opers
int umode_allow_opers(aClient *sptr, int what)
{
if (MyClient(sptr))
return IsAnOper(sptr) ? 1 : 0;
else
return 1;
}
示例8: m_globops
/*
* m_globops (write to *all* opers currently online)
* parv[0] = sender prefix
* parv[1] = message text
*/
int m_globops(struct Client *cptr, struct Client *sptr, int parc, char *parv[])
{
char* message;
message = parc > 1 ? parv[1] : NULL;
if (EmptyString(message))
{
sendto_one(sptr, form_str(ERR_NEEDMOREPARAMS),
me.name, parv[0], "GLOBOPS");
return 0;
}
if (!IsServer(sptr) && MyConnect(sptr) && !IsAnOper(sptr))
{
sendto_one(sptr, form_str(ERR_NOPRIVILEGES), me.name, parv[0]);
return(0);
}
sendto_serv_butone(IsServer(cptr) ? cptr : NULL,
":%s GLOBOPS :%s", parv[0], message);
sendto_globops("from %s: %s", parv[0], message);
return 0;
}
示例9: mo_trace
/** Handle a TRACE message from a local oper.
*
* \a parv has the following elements:
* \li \a parv[1] is the nick or servername to trace
* \li \a parv[2] is the optional 'target' server to trace from
*
* See @ref m_functions for discussion of the arguments.
* @param[in] cptr Client that sent us the message.
* @param[in] sptr Original source of message.
* @param[in] parc Number of arguments.
* @param[in] parv Argument vector.
*/
int mo_trace(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
{
if (feature_bool(FEAT_HIS_TRACE) && !IsAnOper(sptr))
return send_reply(cptr, ERR_NOPRIVILEGES);
do_trace(cptr, sptr, parc, parv);
return 0;
}
示例10: m_lnotice
/*
* m_lnotice (send notice to all local users)
* parv[0] = sender prefix
* parv[1] = message text
*/
int m_lnotice(struct Client *cptr, struct Client *sptr, int parc, char *parv[])
{
char* message;
struct Client *acptr;
message = parc > 1 ? parv[1] : NULL;
if (EmptyString(message))
{
sendto_one(sptr, form_str(ERR_NEEDMOREPARAMS),
me.name, parv[0], "LNOTICE");
return 0;
}
if (MyClient(sptr) && !IsAnOper(sptr))
{
sendto_one(sptr, form_str(ERR_NOPRIVILEGES), me.name, parv[0]);
return(0);
}
for(acptr = local_cptr_list; acptr; acptr = acptr->next_local_client)
{
sendto_one(acptr,":%s NOTICE %s :%s",
me.name, acptr->name, parv[1]);
}
sendto_ops("LNOTICE sent by \2%s\2",parv[0]);
sendto_serv_butone(&me, ":%s GLOBOPS :LNOTICE on %s :%s",
me.name, sptr->name, parv[1]);
return 0;
}
示例11: extended_operoverride
/* This function adds as an extra (weird) operoverride.
* Currently it's only used if you try to operoverride for a +z channel,
* if you then do '/join #chan override' it will put the channel -z and allow you directly in.
* This is to avoid attackers from using 'race conditions' to prevent you from joining.
* PARAMETERS: sptr = the client, chptr = the channel, mval = mode value (eg MODE_ONLYSECURE),
* mchar = mode char (eg 'z')
* RETURNS: 1 if operoverride, 0 if not.
*/
int extended_operoverride(aClient *sptr, aChannel *chptr, char *key, int mval, char mchar)
{
unsigned char invited = 0;
Link *lp;
if (!IsAnOper(sptr) || !OPCanOverride(sptr))
return 0;
for (lp = sptr->user->invited; lp; lp = lp->next)
if (lp->value.chptr == chptr)
{
invited = 1;
break;
}
if (invited)
{
if (key && !strcasecmp(key, "override"))
{
sendto_channelprefix_butone(NULL, &me, chptr, PREFIX_OP|PREFIX_ADMIN|PREFIX_OWNER,
":%s NOTICE @%s :setting channel -%c due to OperOverride request from %s",
me.name, chptr->chname, mchar, sptr->name);
sendto_serv_butone(&me, ":%s MODE %s -%c 0", me.name, chptr->chname, mchar);
sendto_channel_butserv(chptr, &me, ":%s MODE %s -%c", me.name, chptr->chname, mchar);
chptr->mode.mode &= ~mval;
return 1;
}
}
return 0;
}
示例12: m_svsnoop
int m_svsnoop(aClient *cptr, aClient *sptr, int parc, char *parv[])
{
aClient *acptr;
if (!(IsULine(sptr) && parc > 2))
return 0;
/* svsnoop bugfix --binary */
if (hunt_server_token(cptr, sptr, MSG_SVSNOOP, TOK_SVSNOOP, "%s :%s", 1, parc,
parv) == HUNTED_ISME)
{
if (parv[2][0] == '+')
{
SVSNOOP = 1;
sendto_ops("This server has been placed in NOOP mode");
for (acptr = &me; acptr; acptr = acptr->prev)
{
if (MyClient(acptr) && IsAnOper(acptr))
{
if (IsOper(acptr))
{
IRCstats.operators--;
VERIFY_OPERCOUNT(acptr, "svsnoop");
}
if (IsAnOper(acptr))
delfrom_fdlist(acptr->slot, &oper_fdlist);
if (IsTotalInvis(acptr)) {
sendto_channels_inviso_join(acptr);
}
acptr->umodes &= ~(UMODE_OPER|UMODE_HELPOP|UMODE_SADMIN|UMODE_ADMIN|UMODE_LOCOP|UMODE_SERVICES|UMODE_NETADMIN);
acptr->umodes &= ~(UMODE_WHOIS|UMODE_KIX|UMODE_HIDEOPER|UMODE_HIDEWHOIS|UMODE_TOTALINVIS|UMODE_MODEWALK|UMODE_NOFAKELAG);
acptr->oflag = 0;
remove_oper_snomasks(acptr);
sendto_one(acptr, ":%s NOTICE %s :*** Your OFLAGS have been cleared, because this server has been placed in NOOP mode", me.name, acptr->name);
RunHook2(HOOKTYPE_LOCAL_OPER, acptr, 0);
}
}
}
else
{
SVSNOOP = 0;
sendto_ops("This server is no longer in NOOP mode");
}
}
return 0;
}
示例13: m_join
/** Handle a JOIN message from a client connection.
* See @ref m_functions for discussion of the arguments.
* @param[in] cptr Client that sent us the message.
* @param[in] sptr Original source of message.
* @param[in] parc Number of arguments.
* @param[in] parv Argument vector.
*/
int m_join(struct Client *cptr, struct Client *sptr, int parc, char *parv[])
{
struct JoinBuf join;
struct JoinBuf create;
char *p = 0;
char *chanlist;
char *name;
char *keys;
if (parc < 2 || *parv[1] == '\0')
return need_more_params(sptr, "JOIN");
if (!IsAnOper(sptr) && IsRestrictJoin(sptr)) {
send_reply(sptr, ERR_BANNEDFROMCHAN, parv[1]);
return 0;
}
joinbuf_init(&join, sptr, cptr, JOINBUF_TYPE_JOIN, 0, 0);
joinbuf_init(&create, sptr, cptr, JOINBUF_TYPE_CREATE, 0, TStime());
chanlist = last0(cptr, sptr, parv[1]); /* find last "JOIN 0" */
keys = parv[2]; /* remember where keys are */
for (name = ircd_strtok(&p, chanlist, ","); name;
name = ircd_strtok(&p, 0, ",")) {
char *key = 0;
/* If we have any more keys, take the first for this channel. */
if (!BadPtr(keys)
&& (keys = strchr(key = keys, ',')))
*keys++ = '\0';
/* Empty keys are the same as no keys. */
if (key && !key[0])
key = 0;
if (!IsChannelName(name) || !strIsIrcCh(name))
{
/* bad channel name */
send_reply(sptr, ERR_NOSUCHCHANNEL, name);
continue;
}
if (cli_user(sptr)->joined >= get_client_maxchans(sptr)
&& !HasPriv(sptr, PRIV_CHAN_LIMIT)) {
send_reply(sptr, ERR_TOOMANYCHANNELS, name);
break; /* no point processing the other channels */
}
do_join(cptr, sptr, &join, &create, name, key, 0);
}
joinbuf_flush(&join); /* must be first, if there's a JOIN 0 */
joinbuf_flush(&create);
return 0;
}
示例14:
DLLFUNC char *privdeaf_checkmsg(aClient *cptr, aClient *sptr, aClient *acptr, char *text, int notice)
{
if ((acptr->umodes & UMODE_PRIVDEAF) && !IsAnOper(sptr) && !IsULine(sptr) && !IsServer(sptr))
{
sendnotice(sptr, "Message to '%s' not delivered: User does not accept private messages", acptr->name);
return NULL;
} else
return text;
}
示例15:
DLLFUNC char *privdeaf_checkmsg(aClient *cptr, aClient *sptr, aClient *acptr, char *text, int notice)
{
if ((acptr->umodes & UMODE_PRIVDEAF) && !IsAnOper(sptr) && !IsULine(sptr) && !IsServer(sptr))
{
sendnotice(sptr, "Message to '%s' has not been sent. The user has +D set. This blocks private messages.", acptr->name);
return NULL;
} else
return text;
}