0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-12-26 15:33:54 +01:00

Refactor umodes.

This commit is contained in:
Jason Volk 2016-08-23 15:25:09 -07:00
parent 2088193118
commit f33b369609
83 changed files with 433 additions and 385 deletions

View file

@ -38,7 +38,7 @@ h_can_join(hook_data_channel *data)
client::client *source_p = data->client;
const auto &chptr(data->chptr);
if((chptr->mode.mode & mymode) && !IsAdmin(source_p)) {
if((chptr->mode.mode & mymode) && !is(*source_p, umode::ADMIN)) {
sendto_one_numeric(source_p, 519, "%s :Cannot join channel (+A) - you are not an IRC server administrator", chptr->name.c_str());
data->approved = chan::mode::ERR_CUSTOM;
}

View file

@ -40,7 +40,7 @@ h_can_join(hook_data_channel *data)
client::client *source_p = data->client;
const auto &chptr(data->chptr);
if(!(chptr->mode.mode & mymode) && !IsSSLClient(source_p)) {
if(!(chptr->mode.mode & mymode) && !is(*source_p, umode::SSLCLIENT)) {
/* XXX This is equal to ERR_THROTTLE */
sendto_one_numeric(source_p, 480, "%s :Cannot join channel (-U) - SSL/TLS required", chptr->name.c_str());
data->approved = chan::mode::ERR_CUSTOM;

View file

@ -39,7 +39,7 @@ h_can_join(hook_data_channel *data)
client::client *source_p = data->client;
const auto &chptr(data->chptr);
if((chptr->mode.mode & mymode) && !IsOper(source_p)) {
if((chptr->mode.mode & mymode) && !is(*source_p, umode::OPER)) {
sendto_one_numeric(source_p, 520, "%s :Cannot join channel (+O) - you are not an IRC operator", chptr->name.c_str());
data->approved = chan::mode::ERR_CUSTOM;
}

View file

@ -44,10 +44,10 @@ hdl_can_kick(hook_data_channel_approval *data)
client::client *who = data->target;
const auto &chptr(data->chptr);
if(IsOper(source_p))
if(is(*source_p, umode::OPER))
return;
if((chptr->mode.mode & mymode) && IsOper(who))
if((chptr->mode.mode & mymode) && is(*who, umode::OPER))
{
sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, "%s attempted to kick %s from %s (which is +M)",
source_p->name, who->name, chptr->name.c_str());

View file

@ -38,7 +38,7 @@ h_can_join(hook_data_channel *data)
client::client *source_p = data->client;
const auto &chptr(data->chptr);
if((chptr->mode.mode & mymode) && !IsSSLClient(source_p)) {
if((chptr->mode.mode & mymode) && !is(*source_p, umode::SSLCLIENT)) {
/* XXX This is equal to ERR_THROTTLE */
sendto_one_numeric(source_p, 480, "%s :Cannot join channel (+S) - SSL/TLS required", chptr->name.c_str());
data->approved = chan::mode::ERR_CUSTOM;

View file

@ -24,6 +24,6 @@ h_can_create_channel_authenticated(hook_data_client_approval *data)
{
client::client *source_p = data->client;
if (suser(user(*source_p)).empty() && !IsOper(source_p))
if (suser(user(*source_p)).empty() && !is(*source_p, umode::OPER))
data->approved = ERR_NEEDREGGEDNICK;
}

View file

@ -24,7 +24,7 @@ h_can_create_channel_authenticated(hook_data_client_approval *data)
{
client::client *source_p = data->client;
if (!IsOper(source_p))
if (!is(*source_p, umode::OPER))
{
sendto_one_notice(source_p, ":*** Channel creation is restricted to network staff only.");
data->approved = ERR_NEEDREGGEDNICK;

View file

@ -44,5 +44,5 @@ eb_oper(const char *data, client::client *client_p, chan::chan *chptr, mode::typ
return HasPrivilege(client_p, data) ? MATCH : NOMATCH;
}
return IsOper(client_p) ? MATCH : NOMATCH;
return is(*client_p, umode::OPER) ? MATCH : NOMATCH;
}

View file

@ -35,5 +35,5 @@ static int eb_ssl(const char *data, client::client *client_p,
if (data != NULL)
return INVALID;
return IsSSLClient(client_p) ? MATCH : NOMATCH;
return is(*client_p, umode::SSLCLIENT) ? MATCH : NOMATCH;
}

View file

@ -69,7 +69,7 @@ static int eb_usermode(const char *data, client::client *client_p,
}
}
return ((client_p->umodes & modes_ack) == modes_ack &&
!(client_p->umodes & modes_nak)) ?
return ((client_p->mode & modes_ack) == modes_ack &&
!(client_p->mode & modes_nak)) ?
MATCH : NOMATCH;
}

View file

@ -25,7 +25,7 @@ h_noi_umode_changed(hook_data_umode_changed *hdata)
{
client::client *source_p = hdata->client;
if (my(*source_p) && !IsOper(source_p) && !is_invisible(*source_p)) {
SetInvisible(source_p);
if (my(*source_p) && !is(*source_p, umode::OPER) && !is(*source_p, umode::INVISIBLE)) {
set(*source_p, umode::INVISIBLE);
}
}

View file

@ -80,7 +80,7 @@ do_dehelper(client::client &source, client::client &target)
{
const char *fakeparv[4];
if(!(target.umodes & UMODE_HELPOPS))
if(!(target.mode & UMODE_HELPOPS))
return;
sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, "%s is using DEHELPER on %s",
@ -145,14 +145,14 @@ h_hdl_stats_request(hook_data_int *hdata)
static void
h_hdl_new_remote_user(client::client *client_p)
{
if (client_p->umodes & UMODE_HELPOPS)
if (client_p->mode & UMODE_HELPOPS)
rb_dlinkAddAlloc(client_p, &helper_list);
}
static void
h_hdl_client_exit(hook_data_client_exit *hdata)
{
if (hdata->target->umodes & UMODE_HELPOPS)
if (hdata->target->mode & UMODE_HELPOPS)
rb_dlinkFindDestroy(hdata->target, &helper_list);
}
@ -162,21 +162,21 @@ h_hdl_umode_changed(hook_data_umode_changed *hdata)
client::client &source = *hdata->client;
/* didn't change +H umode, we don't need to do anything */
if (!((hdata->oldumodes ^ source.umodes) & UMODE_HELPOPS))
if (!((hdata->oldumodes ^ source.mode) & UMODE_HELPOPS))
return;
if (source.umodes & UMODE_HELPOPS)
if (source.mode & UMODE_HELPOPS)
{
if (my(source) && !HasPrivilege(&source, "usermode:helpops"))
{
source.umodes &= ~UMODE_HELPOPS;
source.mode &= umode(~UMODE_HELPOPS);
sendto_one(&source, form_str(ERR_NOPRIVS), me.name, source.name, "usermode:helpops");
return;
}
rb_dlinkAddAlloc(&source, &helper_list);
}
else if (!(source.umodes & UMODE_HELPOPS))
else if (!(source.mode & UMODE_HELPOPS))
rb_dlinkFindDestroy(&source, &helper_list);
}
@ -186,7 +186,7 @@ h_hdl_whois(hook_data_client *hdata)
client::client &source = *hdata->client;
client::client *target_p = hdata->target;
if ((target_p->umodes & UMODE_HELPOPS) && away(user(*target_p)).empty())
if ((target_p->mode & UMODE_HELPOPS) && away(user(*target_p)).empty())
{
sendto_one_numeric(&source, RPL_WHOISHELPOP, form_str(RPL_WHOISHELPOP), target_p->name);
}

View file

@ -19,5 +19,5 @@ DECLARE_MODULE_AV2(hide_uncommon_channels, NULL, NULL, NULL, NULL, huc_hfnlist,
static void
h_huc_doing_whois_channel_visibility(hook_data_client *hdata)
{
hdata->approved = (is_public(hdata->chptr) && !is_invisible(*hdata->target)) || is_member(hdata->chptr, hdata->client);
hdata->approved = (is_public(hdata->chptr) && !is(*hdata->target, umode::INVISIBLE)) || is_member(hdata->chptr, hdata->client);
}

View file

@ -457,9 +457,9 @@ doing_stats_hook(hook_data_int *hdata)
client::client &source = *hdata->client;
if(hdata->arg2 != (int) 's')
return;
if((ConfigFileEntry.stats_k_oper_only == 2) && !IsOper(&source))
if((ConfigFileEntry.stats_k_oper_only == 2) && !is(source, umode::OPER))
return;
if ((ConfigFileEntry.stats_k_oper_only == 1) && !IsOper(&source))
if ((ConfigFileEntry.stats_k_oper_only == 1) && !is(source, umode::OPER))
{
hurt = hurt_find(source.sockhost);
if (hurt != NULL)

View file

@ -162,14 +162,14 @@ check_umode_change(void *vdata)
return;
/* didn't change +h umode, we don't need to do anything */
if (!((data->oldumodes ^ source_p->umodes) & user_modes['h']))
if (!((data->oldumodes ^ source_p->mode) & user_modes['h']))
return;
if (source_p->umodes & user_modes['h'])
if (source_p->mode & user_modes['h'])
{
if (is_ip_spoof(*source_p) || source_p->localClient->mangledhost == NULL || (is_dyn_spoof(*source_p) && strcmp(source_p->host, source_p->localClient->mangledhost)))
{
source_p->umodes &= ~user_modes['h'];
source_p->mode &= umode(~user_modes['h']);
return;
}
if (strcmp(source_p->host, source_p->localClient->mangledhost))
@ -180,7 +180,7 @@ check_umode_change(void *vdata)
sendto_one_numeric(source_p, RPL_HOSTHIDDEN, "%s :is now your hidden host",
source_p->host);
}
else if (!(source_p->umodes & user_modes['h']))
else if (!(source_p->mode & user_modes['h']))
{
if (source_p->localClient->mangledhost != NULL &&
!strcmp(source_p->host, source_p->localClient->mangledhost))
@ -197,7 +197,7 @@ check_new_user(void *vdata)
if (is_ip_spoof(*source_p))
{
source_p->umodes &= ~user_modes['h'];
source_p->mode &= umode(~user_modes['h']);
return;
}
source_p->localClient->mangledhost = (char *)rb_malloc(HOSTLEN + 1);
@ -206,8 +206,8 @@ check_new_user(void *vdata)
else
do_host_cloak_host(source_p->orighost, source_p->localClient->mangledhost);
if (is_dyn_spoof(*source_p))
source_p->umodes &= ~user_modes['h'];
if (source_p->umodes & user_modes['h'])
source_p->mode &= umode(~user_modes['h']);
if (source_p->mode & user_modes['h'])
{
rb_strlcpy(source_p->host, source_p->localClient->mangledhost, sizeof(source_p->host));
if (irccmp(source_p->host, source_p->orighost))

View file

@ -168,14 +168,14 @@ check_umode_change(void *vdata)
return;
/* didn't change +h umode, we don't need to do anything */
if (!((data->oldumodes ^ source_p->umodes) & user_modes['h']))
if (!((data->oldumodes ^ source_p->mode) & user_modes['h']))
return;
if (source_p->umodes & user_modes['h'])
if (source_p->mode & user_modes['h'])
{
if (is_ip_spoof(*source_p) || source_p->localClient->mangledhost == NULL || (is_dyn_spoof(*source_p) && strcmp(source_p->host, source_p->localClient->mangledhost)))
{
source_p->umodes &= ~user_modes['h'];
source_p->mode &= umode(~user_modes['h']);
return;
}
if (strcmp(source_p->host, source_p->localClient->mangledhost))
@ -186,7 +186,7 @@ check_umode_change(void *vdata)
sendto_one_numeric(source_p, RPL_HOSTHIDDEN, "%s :is now your hidden host",
source_p->host);
}
else if (!(source_p->umodes & user_modes['h']))
else if (!(source_p->mode & user_modes['h']))
{
if (source_p->localClient->mangledhost != NULL &&
!strcmp(source_p->host, source_p->localClient->mangledhost))
@ -203,7 +203,7 @@ check_new_user(void *vdata)
if (is_ip_spoof(*source_p))
{
source_p->umodes &= ~user_modes['h'];
source_p->mode &= umode(~user_modes['h']);
return;
}
source_p->localClient->mangledhost = (char *)rb_malloc(HOSTLEN);
@ -212,8 +212,8 @@ check_new_user(void *vdata)
else
do_host_cloak_host(source_p->orighost, source_p->localClient->mangledhost);
if (is_dyn_spoof(*source_p))
source_p->umodes &= ~user_modes['h'];
if (source_p->umodes & user_modes['h'])
source_p->mode &= umode(~user_modes['h']);
if (source_p->mode & user_modes['h'])
{
rb_strlcpy(source_p->host, source_p->localClient->mangledhost, sizeof(source_p->host));
if (irccmp(source_p->host, source_p->orighost))

View file

@ -162,14 +162,14 @@ check_umode_change(void *vdata)
return;
/* didn't change +h umode, we don't need to do anything */
if (!((data->oldumodes ^ source_p->umodes) & user_modes['x']))
if (!((data->oldumodes ^ source_p->mode) & user_modes['x']))
return;
if (source_p->umodes & user_modes['x'])
if (source_p->mode & user_modes['x'])
{
if (is_ip_spoof(*source_p) || source_p->localClient->mangledhost == NULL || (is_dyn_spoof(*source_p) && strcmp(source_p->host, source_p->localClient->mangledhost)))
{
source_p->umodes &= ~user_modes['x'];
source_p->mode &= umode(~user_modes['x']);
return;
}
if (strcmp(source_p->host, source_p->localClient->mangledhost))
@ -180,7 +180,7 @@ check_umode_change(void *vdata)
sendto_one_numeric(source_p, RPL_HOSTHIDDEN, "%s :is now your hidden host",
source_p->host);
}
else if (!(source_p->umodes & user_modes['x']))
else if (!(source_p->mode & user_modes['x']))
{
if (source_p->localClient->mangledhost != NULL &&
!strcmp(source_p->host, source_p->localClient->mangledhost))
@ -197,7 +197,7 @@ check_new_user(void *vdata)
if (is_ip_spoof(*source_p))
{
source_p->umodes &= ~user_modes['x'];
source_p->mode &= umode(~user_modes['x']);
return;
}
source_p->localClient->mangledhost = (char *)rb_malloc(HOSTLEN + 1);
@ -206,8 +206,8 @@ check_new_user(void *vdata)
else
do_host_cloak_host(source_p->orighost, source_p->localClient->mangledhost);
if (is_dyn_spoof(*source_p))
source_p->umodes &= ~user_modes['x'];
if (source_p->umodes & user_modes['x'])
source_p->mode &= umode(~user_modes['x']);
if (source_p->mode & user_modes['x'])
{
rb_strlcpy(source_p->host, source_p->localClient->mangledhost, sizeof(source_p->host));
if (irccmp(source_p->host, source_p->orighost))

View file

@ -110,14 +110,14 @@ check_umode_change(void *vdata)
return;
/* didn't change +h umode, we don't need to do anything */
if (!((data->oldumodes ^ source_p->umodes) & user_modes['h']))
if (!((data->oldumodes ^ source_p->mode) & user_modes['h']))
return;
if (source_p->umodes & user_modes['h'])
if (source_p->mode & user_modes['h'])
{
if (is_ip_spoof(*source_p) || source_p->localClient->mangledhost == NULL || (is_dyn_spoof(*source_p) && strcmp(source_p->host, source_p->localClient->mangledhost)))
{
source_p->umodes &= ~user_modes['h'];
source_p->mode &= umode(~user_modes['h']);
return;
}
if (strcmp(source_p->host, source_p->localClient->mangledhost))
@ -128,7 +128,7 @@ check_umode_change(void *vdata)
sendto_one_numeric(source_p, RPL_HOSTHIDDEN, "%s :is now your hidden host",
source_p->host);
}
else if (!(source_p->umodes & user_modes['h']))
else if (!(source_p->mode & user_modes['h']))
{
if (source_p->localClient->mangledhost != NULL &&
!strcmp(source_p->host, source_p->localClient->mangledhost))
@ -145,7 +145,7 @@ check_new_user(void *vdata)
if (is_ip_spoof(*source_p))
{
source_p->umodes &= ~user_modes['h'];
source_p->mode &= umode(~user_modes['h']);
return;
}
source_p->localClient->mangledhost = (char *)rb_malloc(HOSTLEN);
@ -154,8 +154,8 @@ check_new_user(void *vdata)
else
do_host_cloak(source_p->orighost, source_p->localClient->mangledhost, 0);
if (is_dyn_spoof(*source_p))
source_p->umodes &= ~user_modes['h'];
if (source_p->umodes & user_modes['h'])
source_p->mode &= umode(~user_modes['h']);
if (source_p->mode & user_modes['h'])
{
rb_strlcpy(source_p->host, source_p->localClient->mangledhost, sizeof(source_p->host));
if (irccmp(source_p->host, source_p->orighost))

View file

@ -47,18 +47,18 @@ DECLARE_MODULE_AV2(adminwall, NULL, NULL, adminwall_clist, NULL, NULL, NULL, NUL
static void
mo_adminwall(struct MsgBuf *msgbuf_p, client::client &client, client::client &source, int parc, const char *parv[])
{
if(!IsAdmin(&source))
if(!is(source, umode::ADMIN))
{
sendto_one(&source, form_str(ERR_NOPRIVS),
me.name, source.name, "adminwall");
return;
}
sendto_wallops_flags(UMODE_ADMIN, &source, "ADMINWALL - %s", parv[1]);
sendto_wallops_flags(umode::ADMIN, &source, "ADMINWALL - %s", parv[1]);
sendto_match_servs(&source, "*", CAP_ENCAP, NOCAPS, "ENCAP * ADMINWALL :%s", parv[1]);
}
static void
me_adminwall(struct MsgBuf *msgbuf_p, client::client &client, client::client &source, int parc, const char *parv[])
{
sendto_wallops_flags(UMODE_ADMIN, &source, "ADMINWALL - %s", parv[1]);
sendto_wallops_flags(umode::ADMIN, &source, "ADMINWALL - %s", parv[1]);
}

View file

@ -50,7 +50,7 @@ m_findforwards(struct MsgBuf *msgbuf_p, client::client &client, client::client &
*p = '\0';
/* Allow ircops to search for forwards to nonexistent channels */
if(!IsOper(&source))
if(!is(source, umode::OPER))
{
if((chptr = chan::get(parv[1], std::nothrow)) == NULL || (msptr = get(chptr->members, source, std::nothrow)) == NULL)
{

View file

@ -63,7 +63,7 @@ m_identify(struct MsgBuf *msgbuf_p, client::client &client, client::client &sour
}
nick = parv[1][0] == '#' ? SVS_chanserv_NICK : SVS_nickserv_NICK;
if ((target_p = client::find_named_person(nick)) && IsService(target_p))
if ((target_p = client::find_named_person(nick)) && is(*target_p, umode::SERVICE))
{
sendto_one(target_p, ":%s PRIVMSG %s :IDENTIFY %s", get_id(&source, target_p), get_id(target_p, target_p), reconstruct_parv(parc - 1, &parv[1]));
}

View file

@ -48,7 +48,7 @@ DECLARE_MODULE_AV2(locops, NULL, NULL, locops_clist, NULL, NULL, NULL, NULL, loc
static void
m_locops(struct MsgBuf *msgbuf_p, client::client &client, client::client &source, int parc, const char *parv[])
{
sendto_wallops_flags(UMODE_LOCOPS, &source, "LOCOPS - %s", parv[1]);
sendto_wallops_flags(umode::LOCOPS, &source, "LOCOPS - %s", parv[1]);
if(rb_dlink_list_length(&cluster_conf_list) > 0)
cluster_generic(&source, "LOCOPS", SHARED_LOCOPS, CAP_CLUSTER,
@ -68,7 +68,7 @@ ms_locops(struct MsgBuf *msgbuf_p, client::client &client, client::client &sourc
return;
if(find_shared_conf("*", "*", source.servptr->name, SHARED_LOCOPS))
sendto_wallops_flags(UMODE_LOCOPS, &source, "SLOCOPS - %s", parv[2]);
sendto_wallops_flags(umode::LOCOPS, &source, "SLOCOPS - %s", parv[2]);
}
static void
@ -79,6 +79,6 @@ me_locops(struct MsgBuf *msgbuf_p, client::client &client, client::client &sourc
return;
if(find_shared_conf("*", "*", source.servptr->name, SHARED_LOCOPS))
sendto_wallops_flags(UMODE_LOCOPS, &source, "SLOCOPS - %s", parv[1]);
sendto_wallops_flags(umode::LOCOPS, &source, "SLOCOPS - %s", parv[1]);
}

View file

@ -71,7 +71,7 @@ mo_ojoin(struct MsgBuf *msgbuf_p, client::client &client, client::client &source
if(move_me == 1)
parv[1]--;
sendto_wallops_flags(UMODE_WALLOP, &me,
sendto_wallops_flags(umode::WALLOP, &me,
"OJOIN called for %s by %s!%s@%s",
parv[1], source.name, source.username, source.host);
ilog(L_MAIN, "OJOIN called for %s by %s",

View file

@ -103,7 +103,7 @@ mo_okick(struct MsgBuf *msgbuf_p, client::client &client, client::client &source
return;
}
sendto_wallops_flags(UMODE_WALLOP, &me,
sendto_wallops_flags(umode::WALLOP, &me,
"OKICK called for %s %s by %s!%s@%s",
chptr->name.c_str(), target_p->name,
source.name, source.username, source.host);

View file

@ -93,7 +93,7 @@ mo_omode(struct MsgBuf *msgbuf_p, client::client &client, client::client &source
rb_strlcat(params, parv[i], sizeof params);
}
sendto_wallops_flags(UMODE_WALLOP, &me,
sendto_wallops_flags(umode::WALLOP, &me,
"OMODE called for [%s] [%s] by %s!%s@%s",
parv[1], params, source.name, source.username, source.host);
ilog(L_MAIN, "OMODE called for [%s] [%s] by %s",

View file

@ -75,7 +75,7 @@ mo_opme(struct MsgBuf *msgbuf_p, client::client &client, client::client &source,
msptr->flags |= chan::CHANOP;
sendto_wallops_flags(UMODE_WALLOP, &me,
sendto_wallops_flags(umode::WALLOP, &me,
"OPME called for [%s] by %s!%s@%s",
parv[1], source.name, source.username, source.host);
ilog(L_MAIN, "OPME called for [%s] by %s",

View file

@ -143,7 +143,7 @@ m_remove(struct MsgBuf *msgbuf_p, client::client &client, client::client &source
if(msptr != NULL)
{
if(my(source) && IsService(who))
if(my(source) && is(*who, umode::SERVICE))
{
sendto_one(&source, form_str(ERR_ISCHANSERVICE),
me.name, source.name, who->name, chptr->name.c_str());

View file

@ -164,7 +164,7 @@ m_displaymsg(struct MsgBuf *msgbuf_p, client::client &source, const char *channe
return;
/* enforce target change on roleplay commands */
if(!is_chanop(msptr) && !is_voiced(msptr) && !IsOper(&source) && !add_channel_target(&source, chptr))
if(!is_chanop(msptr) && !is_voiced(msptr) && !is(source, umode::OPER) && !add_channel_target(&source, chptr))
{
sendto_one(&source, form_str(ERR_TARGCHANGE),
me.name, source.name, chptr->name.c_str());

View file

@ -28,7 +28,7 @@ block_services_kill(void *vdata)
if (!data->approved)
return;
if (IsService(data->target))
if (is(*data->target, umode::SERVICE))
{
sendto_one_numeric(data->client, ERR_ISCHANSERVICE,
"KILL %s :Cannot kill a network service",

View file

@ -21,8 +21,8 @@ h_nl_umode_changed(hook_data_umode_changed *hdata)
{
client::client *source_p = hdata->client;
if (my(*source_p) && source_p->umodes & UMODE_LOCOPS)
if (my(*source_p) && source_p->mode & umode::LOCOPS)
{
source_p->umodes &= ~UMODE_LOCOPS;
source_p->mode &= ~umode::LOCOPS;
}
}

View file

@ -23,13 +23,13 @@ h_noi_umode_changed(hook_data_umode_changed *hdata)
{
client::client *source_p = hdata->client;
if (my(*source_p) && IsOper(source_p) && !IsOperInvis(source_p) &&
is_invisible(*source_p))
if (my(*source_p) && is(*source_p, umode::OPER) && !IsOperInvis(source_p) &&
is(*source_p, umode::INVISIBLE))
{
ClearInvisible(source_p);
clear(*source_p, umode::INVISIBLE);
/* If they tried /umode +i, complain; do not complain
* if they opered up while invisible -- jilles */
if (hdata->oldumodes & UMODE_OPER)
if (hdata->oldumodes & umode::OPER)
sendto_one_notice(source_p, ":*** Opers may not set themselves invisible");
}
}

View file

@ -101,19 +101,19 @@ check_umode_change(void *vdata)
if (!my(*source_p))
return;
if (data->oldumodes & UMODE_OPER && !IsOper(source_p))
source_p->umodes &= ~user_modes['p'];
if (data->oldumodes & umode::OPER && !is(*source_p, umode::OPER))
source_p->mode &= umode(~user_modes['p']);
/* didn't change +p umode, we don't need to do anything */
if (!((data->oldumodes ^ source_p->umodes) & user_modes['p']))
if (!((data->oldumodes ^ source_p->mode) & user_modes['p']))
return;
if (source_p->umodes & user_modes['p'])
if (source_p->mode & user_modes['p'])
{
if (!IsOperOverride(source_p))
{
sendto_one_notice(source_p, ":*** You need oper:override privilege for +p");
source_p->umodes &= ~user_modes['p'];
source_p->mode &= umode(~user_modes['p']);
return;
}
@ -122,7 +122,7 @@ check_umode_change(void *vdata)
sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, "%s has enabled oper-override (+p)",
get_oper_name(source_p));
}
else if (!(source_p->umodes & user_modes['p']))
else if (!(source_p->mode & user_modes['p']))
{
rb_dlink_node *n, *tn;
@ -153,7 +153,7 @@ hack_channel_access(void *vdata)
if (data->approved == chan::CHANOP)
return;
if (data->client->umodes & user_modes['p'])
if (data->client->mode & user_modes['p'])
{
update_session_deadline(data->client, NULL);
data->approved = CHFL_OVERRIDE;
@ -173,7 +173,7 @@ hack_can_join(void *vdata)
if (data->approved == 0)
return;
if (data->client->umodes & user_modes['p'])
if (data->client->mode & user_modes['p'])
{
update_session_deadline(data->client, NULL);
data->approved = 0;
@ -193,7 +193,7 @@ hack_can_kick(void *vdata)
if (alevel != CHFL_OVERRIDE)
return;
if (data->client->umodes & user_modes['p'])
if (data->client->mode & user_modes['p'])
{
update_session_deadline(data->client, NULL);
sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, "%s is using oper-override on %s (KICK %s)",
@ -212,7 +212,7 @@ hack_can_send(void *vdata)
if (data->approved == chan::CAN_SEND_NONOP || data->approved == chan::CAN_SEND_OPV)
return;
if (data->client->umodes & user_modes['p'])
if (data->client->mode & user_modes['p'])
{
data->approved = chan::CAN_SEND_NONOP;

View file

@ -25,7 +25,7 @@ h_sgo_umode_changed(void *vdata)
if (my_connect(*source_p) || !has_sent_eob(*source_p->servptr))
return;
if (!(data->oldumodes & UMODE_OPER) && IsOper(source_p))
if (!(data->oldumodes & umode::OPER) && is(*source_p, umode::OPER))
sendto_realops_snomask_from(SNO_GENERAL, L_ALL, source_p->servptr,
"%s (%s@%s) is now an operator",
source_p->name, source_p->username, source_p->host);

View file

@ -52,7 +52,7 @@ show_whois(hook_data_client *data)
if(my(*target_p) &&
#ifdef OPERONLY
IsOper(target_p) &&
is(*target_p, umode::OPER) &&
#endif
(source_p != target_p) &&
(target_p->snomask & snomask_modes['W']))

View file

@ -704,14 +704,14 @@ int dump_pcre_config(client::client &client, client::client &source, int parc, c
static
int spamexpr_info(client::client &client, client::client &source, int parc, const char *parv[])
{
if(parc > 0 && !IsOper(&source))
if(parc > 0 && !is(source, umode::OPER))
{
sendto_one(&source, form_str(ERR_NOPRIVS), me.name, source.name, "SPAMEXPR INFO");
sendto_one_notice(&source, ":Only operators can give arguments to this command.");
return 0;
}
if(parc < 1 && IsOper(&source))
if(parc < 1 && is(source, umode::OPER))
{
dump_pcre_config(client, source, parc, parv);
return 0;
@ -754,7 +754,7 @@ int spamexpr_info(client::client &client, client::client &source, int parc, cons
static
int spamexpr_list(client::client &client, client::client &source, int parc, const char *parv[])
{
if(parc > 0 && !IsOper(&source))
if(parc > 0 && !is(source, umode::OPER))
{
sendto_one(&source, form_str(ERR_NOPRIVS), me.name, source.name, "SPAMEXPR LIST");
sendto_one_notice(&source, ":Only operators can give arguments to this command.");
@ -790,7 +790,7 @@ int spamexpr_list(client::client &client, client::client &source, int parc, cons
static
int spamexpr_add(client::client &client, client::client &source, int parc, const char *parv[])
{
if(!IsOper(&source) && !is_server(source))
if(!is(source, umode::OPER) && !is_server(source))
{
sendto_one(&source, form_str(ERR_NOPRIVS), me.name, source.name, "SPAMEXPR ADD");
return 0;
@ -846,7 +846,7 @@ int spamexpr_add(client::client &client, client::client &source, int parc, const
static
int spamexpr_del(client::client &client, client::client &source, int parc, const char *parv[])
{
if(!IsOper(&source) && !is_server(source))
if(!is(source, umode::OPER) && !is_server(source))
{
sendto_one(&source, form_str(ERR_NOPRIVS), me.name, source.name, "SPAMEXPR DEL");
return 0;
@ -886,7 +886,7 @@ int spamexpr_del(client::client &client, client::client &source, int parc, const
static
int spamexpr_test(client::client &client, client::client &source, int parc, const char *parv[])
{
if(!IsOper(&source))
if(!is(source, umode::OPER))
{
sendto_one(&source, form_str(ERR_NOPRIVS), me.name, source.name, "SPAMEXPR TEST");
return 0;
@ -937,7 +937,7 @@ int spamexpr_test(client::client &client, client::client &source, int parc, cons
static
int spamexpr_sync(client::client &client, client::client &source, int parc, const char *parv[])
{
if(!IsOper(&source) && !is_server(source))
if(!is(source, umode::OPER) && !is_server(source))
{
sendto_one(&source, form_str(ERR_NOPRIVS), me.name, source.name, "SPAMEXPR SYNC");
return 0;

View file

@ -38,7 +38,7 @@ umode_noctcp_process(hook_data_privmsg_user *data) {
return;
}
if (data->target_p->umodes & user_modes['C'] && *data->text == '\001' && rb_strncasecmp(data->text + 1, "ACTION", 6)) {
if (data->target_p->mode & user_modes['C'] && *data->text == '\001' && rb_strncasecmp(data->text + 1, "ACTION", 6)) {
sendto_one_numeric(data->source_p, ERR_CANNOTSENDTOUSER, form_str(ERR_CANNOTSENDTOUSER), data->target_p->name, "+C set");
data->approved = ERR_CANNOTSENDTOUSER;
return;

View file

@ -71,6 +71,61 @@ namespace serv
} // namespace ircd
namespace ircd {
namespace client {
namespace mode {
enum mode : uint
{
SERVNOTICE = 0x0001, // server notices
WALLOP = 0x0002, // send wallops to them
OPERWALL = 0x0004, // operwalls
INVISIBLE = 0x0008, // makes user invisible
CALLERID = 0x0010, // block unless caller id's
LOCOPS = 0x0020, // show locops
SERVICE = 0x0040,
DEAF = 0x0080,
NOFORWARD = 0x0100, // don't forward
REGONLYMSG = 0x0200, // only allow logged in users to msg
OPER = 0x1000, // operator
ADMIN = 0x2000, // admin on server
SSLCLIENT = 0x4000, // using SSL
};
const mode DEFAULT_OPER_UMODES
{
SERVNOTICE |
OPERWALL |
WALLOP |
LOCOPS
};
inline bool
is(const mode &mask, const mode &bits)
{
return (mask & bits) == bits;
}
inline void
set(mode &mask, const mode &bits)
{
mask |= bits;
}
inline void
clear(mode &mask, const mode &bits)
{
mask &= ~bits;
}
} // namespace mode
} // namespace client
using umode = client::mode::mode;
} // namespace ircd
namespace ircd {
namespace client {
@ -85,23 +140,6 @@ enum class status : uint8_t
CLIENT = 0x40,
};
#define UMODE_SERVNOTICE 0x0001 /* server notices */
#define UMODE_WALLOP 0x0002 /* send wallops to them */
#define UMODE_OPERWALL 0x0004 /* Operwalls */
#define UMODE_INVISIBLE 0x0008 /* makes user invisible */
#define UMODE_CALLERID 0x0010 /* block unless caller id's */
#define UMODE_LOCOPS 0x0020 /* show locops */
#define UMODE_SERVICE 0x0040
#define UMODE_DEAF 0x0080
#define UMODE_NOFORWARD 0x0100 /* don't forward */
#define UMODE_REGONLYMSG 0x0200 /* only allow logged in users to msg */
/* user information flags, only settable by remote mode or local oper */
#define UMODE_OPER 0x1000 /* Operator */
#define UMODE_ADMIN 0x2000 /* Admin on server */
#define UMODE_SSLCLIENT 0x4000 /* using SSL */
enum flags
{
PINGSENT = 0x00000001, // Unreplied ping sent
@ -170,7 +208,7 @@ struct client
rb_dlink_list whowas_clist;
time_t tsinfo; /* TS on the nick, SVINFO on server */
unsigned int umodes; /* opers, normal users subset */
mode::mode mode;
uint64_t flags; /* client flags */
unsigned int snomask; /* server notice mask */
@ -388,44 +426,24 @@ struct ListClient
int operspy;
};
/* oper flags */
#define MyOper(x) (my_connect(*x) && IsOper(x))
#define SetOper(x) {(x)->umodes |= UMODE_OPER; \
if (my(*(x))) (x)->handler = OPER_HANDLER;}
#define ClearOper(x) {(x)->umodes &= ~(UMODE_OPER|UMODE_ADMIN); \
if (my(*(x)) && !IsOper((x)) && !is_server(*(x))) \
(x)->handler = CLIENT_HANDLER; }
#define DEFAULT_OPER_UMODES (UMODE_SERVNOTICE | UMODE_OPERWALL | \
UMODE_WALLOP | UMODE_LOCOPS)
#define DEFAULT_OPER_SNOMASK SNO_GENERAL
#define IsOper(x) ((x)->umodes & UMODE_OPER)
#define IsAdmin(x) ((x)->umodes & UMODE_ADMIN)
inline bool
is_invisible(const client &client)
is(const client &client, const mode::mode &mode)
{
return client.umodes & UMODE_INVISIBLE;
return is(client.mode, mode);
}
#define SetInvisible(x) ((x)->umodes |= UMODE_INVISIBLE)
#define ClearInvisible(x) ((x)->umodes &= ~UMODE_INVISIBLE)
#define IsSSLClient(x) ((x)->umodes & UMODE_SSLCLIENT)
#define SetSSLClient(x) ((x)->umodes |= UMODE_SSLCLIENT)
#define ClearSSLClient(x) ((x)->umodes &= ~UMODE_SSLCLIENT)
#define SendWallops(x) ((x)->umodes & UMODE_WALLOP)
#define SendLocops(x) ((x)->umodes & UMODE_LOCOPS)
#define SendServNotice(x) ((x)->umodes & UMODE_SERVNOTICE)
#define SendOperwall(x) ((x)->umodes & UMODE_OPERWALL)
#define IsSetCallerId(x) ((x)->umodes & UMODE_CALLERID)
#define IsService(x) ((x)->umodes & UMODE_SERVICE)
#define IsDeaf(x) ((x)->umodes & UMODE_DEAF)
#define IsNoForward(x) ((x)->umodes & UMODE_NOFORWARD)
#define IsSetRegOnlyMsg(x) ((x)->umodes & UMODE_REGONLYMSG)
inline void
set(client &client, const mode::mode &mode)
{
return set(client.mode, mode);
}
inline void
clear(client &client, const mode::mode &mode)
{
return clear(client.mode, mode);
}
inline void
set_got_id(client &client)
@ -638,11 +656,7 @@ set_server(client &client)
client.handler = SERVER_HANDLER;
}
inline bool
is_oper(const client &client)
{
return client.umodes & UMODE_OPER;
}
bool is_oper(const client &);
inline void
set_client(client &client)
@ -731,6 +745,35 @@ my(const client &client)
return my_connect(client) && is_client(client);
}
inline bool
my_oper(const client &client)
{
return my_connect(client) && is_oper(client);
}
inline bool
is_oper(const client &client)
{
return is(client, mode::OPER);
}
inline void
set_oper(client &client)
{
set(client, mode::OPER);
if (my(client))
client.handler = OPER_HANDLER;
}
inline void
clear_oper(client &client)
{
clear(client, mode::OPER);
clear(client, mode::ADMIN);
if (my(client) && !is_server(client))
client.handler = CLIENT_HANDLER;
}
inline void
set_mark(client &client)
{

View file

@ -54,6 +54,8 @@ namespace ircd {
#define SNO_SPY 0x00000800
#define SNO_OPERSPY 0x00001000
#define DEFAULT_OPER_SNOMASK SNO_GENERAL
char *construct_snobuf(unsigned int val);
unsigned int parse_snobuf_to_mask(unsigned int val, const char *sno);
unsigned int find_snomask_slot(void);

View file

@ -467,7 +467,7 @@ chan::channel_member_names(chan *chptr, client::client *client_p, int show_eon)
auto *const target_p(pair.first);
const auto &member(pair.second);
if(is_invisible(*target_p) && !is_member(chptr, client_p))
if(is(*target_p, umode::INVISIBLE) && !is_member(chptr, client_p))
continue;
if (IsCapable(client_p, CLICAP_USERHOST_IN_NAMES))
@ -859,11 +859,11 @@ chan::can_send(chan *chptr, client::client *source_p, membership *msptr)
moduledata.approved = CAN_SEND_NONOP;
moduledata.dir = MODE_QUERY;
if(is_server(*source_p) || IsService(source_p))
if(is_server(*source_p) || is(*source_p, umode::SERVICE))
return CAN_SEND_OPV;
if(my(*source_p) && hash_find_resv(chptr->name.c_str()) &&
!IsOper(source_p) && !is_exempt_resv(*source_p))
!is(*source_p, umode::OPER) && !is_exempt_resv(*source_p))
moduledata.approved = CAN_SEND_NO;
if(msptr == NULL)
@ -1181,7 +1181,7 @@ chan::channel_modes(chan *chptr, client::client *client_p)
for (i = 0; i < 256; i++)
{
if(mode::table[i].set_func == mode::functor::hidden && (!IsOper(client_p) || !is_client(*client_p)))
if(mode::table[i].set_func == mode::functor::hidden && (!is(*client_p, umode::OPER) || !is_client(*client_p)))
continue;
if(chptr->mode.mode & mode::table[i].type)
*mbuf++ = i;

View file

@ -583,7 +583,7 @@ mode::functor::hidden(client::client *source_p, chan *chptr,
int alevel, int parc, int *parn,
const char **parv, int *errors, int dir, char c, type mode_type)
{
if(!IsOper(source_p) && !is_server(*source_p))
if(!is(*source_p, umode::OPER) && !is_server(*source_p))
{
if(!(*errors & SM_ERR_NOPRIVS))
sendto_one_numeric(source_p, ERR_NOPRIVILEGES, form_str(ERR_NOPRIVILEGES));
@ -630,7 +630,7 @@ mode::functor::staff(client::client *source_p, chan *chptr,
int alevel, int parc, int *parn,
const char **parv, int *errors, int dir, char c, type mode_type)
{
if(!IsOper(source_p) && !is_server(*source_p))
if(!is(*source_p, umode::OPER) && !is_server(*source_p))
{
if(!(*errors & SM_ERR_NOPRIVS))
sendto_one_numeric(source_p, ERR_NOPRIVILEGES, form_str(ERR_NOPRIVILEGES));
@ -984,7 +984,7 @@ mode::functor::op(client::client *source_p, chan *chptr,
}
else
{
if(my(*source_p) && IsService(targ_p))
if(my(*source_p) && is(*targ_p, umode::SERVICE))
{
sendto_one(source_p, form_str(ERR_ISCHANSERVICE),
me.name, source_p->name, targ_p->name, chptr->name.c_str());
@ -1200,7 +1200,7 @@ mode::functor::forward(client::client *source_p, chan *chptr,
if(!allow_mode_change(source_p, chptr, alevel, errors, c))
return;
#else
if(!IsOper(source_p) && !is_server(*source_p))
if(!is(*source_p, umode::OPER) && !is_server(*source_p))
{
if(!(*errors & SM_ERR_NOPRIVS))
sendto_one_numeric(source_p, ERR_NOPRIVILEGES, form_str(ERR_NOPRIVILEGES));

View file

@ -916,9 +916,9 @@ client::update_client_exit_stats(client *client_p)
else if(is_client(*client_p))
{
--Count.total;
if(IsOper(client_p))
if(is(*client_p, umode::OPER))
--Count.oper;
if(is_invisible(*client_p))
if(is(*client_p, umode::INVISIBLE))
--Count.invisi;
}
@ -1168,7 +1168,7 @@ client::is_remote_connect(client *client_p)
return FALSE;
oper = find_named_person(client_p->serv->by);
return oper != NULL && IsOper(oper) && !my_connect(*oper);
return oper != NULL && my_oper(*oper);
}
void
@ -1396,7 +1396,7 @@ client::exit_generic_client(client *client_p, client *source_p, client *from,
rb_dlink_node *ptr, *next_ptr;
if(IsOper(source_p))
if(is(*source_p, umode::OPER))
rb_dlinkFindDestroy(source_p, &oper_list);
sendto_common_channels_local(source_p, NOCAPS, NOCAPS, ":%s!%s@%s QUIT :%s",
@ -1659,7 +1659,7 @@ client::exit_local_client(client *client_p, client *source_p, client *from,
rb_dlinkDelete(&source_p->localClient->tnode, &lclient_list);
me.serv->users.erase(source_p->lnode);
if(IsOper(source_p))
if(is(*source_p, umode::OPER))
rb_dlinkFindDestroy(source_p, &local_oper_list);
sendto_realops_snomask(SNO_CCONN, L_ALL,
@ -1873,11 +1873,11 @@ client::show_ip(client *source_p, client *target_p)
* to local opers.
*/
if(!ConfigFileEntry.hide_spoof_ips &&
(source_p == NULL || MyOper(source_p)))
(source_p == NULL || my_oper(*source_p)))
return 1;
return 0;
}
else if(is_dyn_spoof(*target_p) && (source_p != NULL && !IsOper(source_p)))
else if(is_dyn_spoof(*target_p) && (source_p != NULL && !is(*source_p, umode::OPER)))
return 0;
else
return 1;
@ -1888,7 +1888,7 @@ client::show_ip_conf(struct ConfItem *aconf, client *source_p)
{
if(IsConfDoSpoofIp(aconf))
{
if(!ConfigFileEntry.hide_spoof_ips && MyOper(source_p))
if(!ConfigFileEntry.hide_spoof_ips && my_oper(*source_p))
return 1;
return 0;
@ -1901,10 +1901,10 @@ int
client::show_ip_whowas(struct Whowas *whowas, client *source_p)
{
if(whowas->flags & WHOWAS_IP_SPOOFING)
if(ConfigFileEntry.hide_spoof_ips || !MyOper(source_p))
if(ConfigFileEntry.hide_spoof_ips || !my_oper(*source_p))
return 0;
if(whowas->flags & WHOWAS_DYNSPOOF)
if(!IsOper(source_p))
if(!is(*source_p, umode::OPER))
return 0;
return 1;
}

View file

@ -710,13 +710,13 @@ show_iline_prefix(client::client *sptr, struct ConfItem *aconf, char *name)
*prefix_ptr++ = '+';
if(IsConfDoSpoofIp(aconf))
*prefix_ptr++ = '=';
if(IsOper(sptr) && IsConfExemptFlood(aconf))
if(is(*sptr, umode::OPER) && IsConfExemptFlood(aconf))
*prefix_ptr++ = '|';
if(IsOper(sptr) && IsConfExemptDNSBL(aconf) && !IsConfExemptKline(aconf))
if(is(*sptr, umode::OPER) && IsConfExemptDNSBL(aconf) && !IsConfExemptKline(aconf))
*prefix_ptr++ = '$';
if(IsOper(sptr) && IsConfExemptKline(aconf))
if(is(*sptr, umode::OPER) && IsConfExemptKline(aconf))
*prefix_ptr++ = '^';
if(IsOper(sptr) && IsConfExemptLimits(aconf))
if(is(*sptr, umode::OPER) && IsConfExemptLimits(aconf))
*prefix_ptr++ = '>';
*prefix_ptr = '\0';
strncpy(prefix_ptr, name, USERLEN);
@ -744,7 +744,7 @@ report_auth(client::client *client_p)
{
aconf = arec->aconf;
if(!IsOper(client_p) && IsConfDoSpoofIp(aconf))
if(!is(*client_p, umode::OPER) && IsConfDoSpoofIp(aconf))
continue;
get_printable_conf(aconf, &name, &host, &pass, &user, &port,

View file

@ -300,15 +300,15 @@ struct mode_table
/* *INDENT-OFF* */
static struct mode_table umode_table[] = {
{"callerid", UMODE_CALLERID },
{"deaf", UMODE_DEAF },
{"invisible", UMODE_INVISIBLE },
{"locops", UMODE_LOCOPS },
{"noforward", UMODE_NOFORWARD },
{"regonlymsg", UMODE_REGONLYMSG},
{"servnotice", UMODE_SERVNOTICE},
{"wallop", UMODE_WALLOP },
{"operwall", UMODE_OPERWALL },
{"callerid", umode::CALLERID },
{"deaf", umode::DEAF },
{"invisible", umode::INVISIBLE },
{"locops", umode::LOCOPS },
{"noforward", umode::NOFORWARD },
{"regonlymsg", umode::REGONLYMSG},
{"servnotice", umode::SERVNOTICE},
{"wallop", umode::WALLOP },
{"operwall", umode::OPERWALL },
{NULL, 0}
};

View file

@ -99,7 +99,7 @@ parse_client_queued(client::client *client_p)
/* allow opers 4 times the amount of messages as users. why 4?
* why not. :) --fl_
*/
if(IsOper(client_p) && ConfigFileEntry.no_oper_flood)
if(is(*client_p, umode::OPER) && ConfigFileEntry.no_oper_flood)
allow_read *= 4;
/*
* Handle flood protection here - if we exceed our flood limit on
@ -279,7 +279,7 @@ read_packet(rb_fde_t * F, void *data)
if(!is_any_server(*client_p) &&
(rb_linebuf_alloclen(&client_p->localClient->buf_recvq) > ConfigFileEntry.client_flood_max_lines))
{
if(!(ConfigFileEntry.no_oper_flood && IsOper(client_p)))
if(!(ConfigFileEntry.no_oper_flood && is(*client_p, umode::OPER)))
{
exit_client(client_p, client_p, client_p, "Excess Flood");
return;

View file

@ -663,7 +663,7 @@ set_default_conf(void)
ConfigFileEntry.servicestring = NULL;
ConfigFileEntry.sasl_service = NULL;
ConfigFileEntry.default_umodes = UMODE_INVISIBLE;
ConfigFileEntry.default_umodes = umode::INVISIBLE;
ConfigFileEntry.failed_oper_notice = true;
ConfigFileEntry.anti_nick_flood = false;
ConfigFileEntry.disable_fake_channels = false;
@ -724,9 +724,9 @@ set_default_conf(void)
ConfigFileEntry.compression_level = 4;
#endif
ConfigFileEntry.oper_umodes = UMODE_LOCOPS | UMODE_SERVNOTICE |
UMODE_OPERWALL | UMODE_WALLOP;
ConfigFileEntry.oper_only_umodes = UMODE_SERVNOTICE;
ConfigFileEntry.oper_umodes = umode::LOCOPS | umode::SERVNOTICE |
umode::OPERWALL | umode::WALLOP;
ConfigFileEntry.oper_only_umodes = umode::SERVNOTICE;
ConfigFileEntry.oper_snomask = SNO_GENERAL;
ConfigChannel.use_except = true;
@ -1221,7 +1221,7 @@ get_oper_name(client::client *client_p)
/* +5 for !,@,{,} and null */
static char buffer[NICKLEN + USERLEN + HOSTLEN + HOSTLEN + 5];
if(MyOper(client_p))
if(my_oper(*client_p))
{
snprintf(buffer, sizeof(buffer), "%s!%s@%s{%s}",
client_p->name, client_p->username,
@ -1305,7 +1305,7 @@ get_printable_kline(client::client *source_p, struct ConfItem *aconf,
*user = EmptyString(aconf->user) ? null : aconf->user;
*reason = get_user_ban_reason(aconf);
if(!IsOper(source_p))
if(!is(*source_p, umode::OPER))
*oper_reason = NULL;
else
{

View file

@ -30,6 +30,7 @@ void user_welcome(client::client *source_p);
char umodebuf[128];
static int orphaned_umodes = 0;
int user_modes[256] = {
/* 0x00 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0F */
/* 0x10 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1F */
@ -39,7 +40,7 @@ int user_modes[256] = {
0, /* A */
0, /* B */
0, /* C */
UMODE_DEAF, /* D */
umode::DEAF, /* D */
0, /* E */
0, /* F */
0, /* G */
@ -52,43 +53,43 @@ int user_modes[256] = {
0, /* N */
0, /* O */
0, /* P */
UMODE_NOFORWARD, /* Q */
UMODE_REGONLYMSG, /* R */
UMODE_SERVICE, /* S */
umode::NOFORWARD, /* Q */
umode::REGONLYMSG, /* R */
umode::SERVICE, /* S */
0, /* T */
0, /* U */
0, /* V */
0, /* W */
0, /* X */
0, /* Y */
UMODE_SSLCLIENT, /* Z */
umode::SSLCLIENT, /* Z */
/* 0x5B */ 0, 0, 0, 0, 0, 0, /* 0x60 */
UMODE_ADMIN, /* a */
umode::ADMIN, /* a */
0, /* b */
0, /* c */
0, /* d */
0, /* e */
0, /* f */
UMODE_CALLERID, /* g */
umode::CALLERID, /* g */
0, /* h */
UMODE_INVISIBLE, /* i */
umode::INVISIBLE, /* i */
0, /* j */
0, /* k */
UMODE_LOCOPS, /* l */
umode::LOCOPS, /* l */
0, /* m */
0, /* n */
UMODE_OPER, /* o */
umode::OPER, /* o */
0, /* p */
0, /* q */
0, /* r */
UMODE_SERVNOTICE, /* s */
umode::SERVNOTICE, /* s */
0, /* t */
0, /* u */
0, /* v */
UMODE_WALLOP, /* w */
umode::WALLOP, /* w */
0, /* x */
0, /* y */
UMODE_OPERWALL, /* z */
umode::OPERWALL, /* z */
/* 0x7B */ 0, 0, 0, 0, 0, /* 0x7F */
/* 0x80 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x9F */
/* 0x90 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x9F */
@ -556,7 +557,7 @@ register_local_user(client::client *client_p, client::client *source_p)
set_dyn_spoof(*source_p);
}
source_p->umodes |= ConfigFileEntry.default_umodes & ~ConfigFileEntry.oper_only_umodes & ~orphaned_umodes;
source_p->mode |= umode(ConfigFileEntry.default_umodes & ~ConfigFileEntry.oper_only_umodes & ~orphaned_umodes);
call_hook(h_new_local_user, source_p);
@ -597,9 +598,9 @@ register_local_user(client::client *client_p, client::client *source_p)
}
if (IsSSL(source_p))
source_p->umodes |= UMODE_SSLCLIENT;
source_p->mode |= umode::SSLCLIENT;
if (source_p->umodes & UMODE_INVISIBLE)
if (source_p->mode & umode::INVISIBLE)
Count.invisi++;
s_assert(!is_client(*source_p));
@ -945,7 +946,7 @@ show_other_user_mode(client::client *source_p, client::client *target_p)
*m++ = '+';
for (i = 0; i < 128; i++) /* >= 127 is extended ascii */
if (target_p->umodes & user_modes[i])
if (target_p->mode & user_modes[i])
*m++ = (char) i;
*m = '\0';
@ -1009,7 +1010,7 @@ user_mode(client::client *client_p, client::client *source_p, int parc, const ch
if(source_p != target_p)
{
if (MyOper(source_p) && parc < 3)
if (my_oper(*source_p) && parc < 3)
show_other_user_mode(source_p, target_p);
else
sendto_one(source_p, form_str(ERR_USERSDONTMATCH), me.name, source_p->name);
@ -1022,7 +1023,7 @@ user_mode(client::client *client_p, client::client *source_p, int parc, const ch
*m++ = '+';
for (i = 0; i < 128; i++) /* >= 127 is extended ascii */
if (source_p->umodes & user_modes[i])
if (source_p->mode & user_modes[i])
*m++ = (char) i;
*m = '\0';
@ -1036,7 +1037,7 @@ user_mode(client::client *client_p, client::client *source_p, int parc, const ch
}
/* find flags already set for user */
setflags = source_p->umodes;
setflags = source_p->mode;
setsnomask = source_p->snomask;
/*
@ -1055,10 +1056,10 @@ user_mode(client::client *client_p, client::client *source_p, int parc, const ch
case 'o':
if(what == MODE_ADD)
{
if(is_server(*client_p) && !IsOper(source_p))
if(is_server(*client_p) && !is_oper(*source_p))
{
++Count.oper;
SetOper(source_p);
set_oper(*source_p);
rb_dlinkAddAlloc(source_p, &oper_list);
}
}
@ -1068,17 +1069,17 @@ user_mode(client::client *client_p, client::client *source_p, int parc, const ch
* found by Pat Szuta, Perly , perly@xnet.com
*/
if(!IsOper(source_p))
if(!is_oper(*source_p))
break;
ClearOper(source_p);
clear_oper(*source_p);
Count.oper--;
if(my_connect(*source_p))
{
source_p->umodes &= ~ConfigFileEntry.oper_only_umodes;
if (!(source_p->umodes & UMODE_SERVNOTICE) && source_p->snomask != 0)
clear(*source_p, umode(ConfigFileEntry.oper_only_umodes));
if (!is(*source_p, umode::SERVNOTICE) && source_p->snomask != 0)
{
source_p->snomask = 0;
showsnomask = true;
@ -1113,10 +1114,10 @@ user_mode(client::client *client_p, client::client *source_p, int parc, const ch
case 's':
if (my_connect(*source_p))
{
if(!IsOper(source_p)
&& (ConfigFileEntry.oper_only_umodes & UMODE_SERVNOTICE))
if(!is_oper(*source_p)
&& (ConfigFileEntry.oper_only_umodes & umode::SERVNOTICE))
{
if (what == MODE_ADD || source_p->umodes & UMODE_SERVNOTICE)
if (what == MODE_ADD || is(*source_p, umode::SERVNOTICE))
badflag = true;
continue;
}
@ -1131,9 +1132,9 @@ user_mode(client::client *client_p, client::client *source_p, int parc, const ch
else
source_p->snomask = 0;
if (source_p->snomask != 0)
source_p->umodes |= UMODE_SERVNOTICE;
set(*source_p, umode::SERVNOTICE);
else
source_p->umodes &= ~UMODE_SERVNOTICE;
clear(*source_p, umode::SERVNOTICE);
break;
}
/* FALLTHROUGH */
@ -1147,19 +1148,19 @@ user_mode(client::client *client_p, client::client *source_p, int parc, const ch
if((flag = user_modes[(unsigned char) *pm]))
{
if(my_connect(*source_p)
&& ((!IsOper(source_p)
&& ((!is_oper(*source_p)
&& (ConfigFileEntry.oper_only_umodes & flag))
|| (orphaned_umodes & flag)))
{
if (what == MODE_ADD || source_p->umodes & flag)
if (what == MODE_ADD || source_p->mode & flag)
badflag = true;
}
else
{
if(what == MODE_ADD)
source_p->umodes |= flag;
set(*source_p, umode(flag));
else
source_p->umodes &= ~flag;
clear(*source_p, umode(flag));
}
}
else
@ -1179,17 +1180,17 @@ user_mode(client::client *client_p, client::client *source_p, int parc, const ch
source_p->snomask &= ~SNO_NCHANGE; /* only tcm's really need this */
}
if(my(*source_p) && (source_p->umodes & UMODE_OPERWALL) && !IsOperOperwall(source_p))
if(my(*source_p) && is(*source_p, umode::OPERWALL) && !IsOperOperwall(source_p))
{
sendto_one_notice(source_p, ":*** You need oper and operwall flag for +z");
source_p->umodes &= ~UMODE_OPERWALL;
source_p->mode &= ~umode::OPERWALL;
}
if(my_connect(*source_p) && (source_p->umodes & UMODE_ADMIN) &&
if(my_connect(*source_p) && (source_p->mode & umode::ADMIN) &&
(!IsOperAdmin(source_p) || IsOperHiddenAdmin(source_p)))
{
sendto_one_notice(source_p, ":*** You need oper and admin flag for +a");
source_p->umodes &= ~UMODE_ADMIN;
clear(*source_p, umode::ADMIN);
}
/* let modules providing usermodes know that we've changed our usermode --nenolod */
@ -1198,9 +1199,9 @@ user_mode(client::client *client_p, client::client *source_p, int parc, const ch
hdata.oldsnomask = setsnomask;
call_hook(h_umode_changed, &hdata);
if(!(setflags & UMODE_INVISIBLE) && is_invisible(*source_p))
if(!(setflags & umode::INVISIBLE) && is(*source_p, umode::INVISIBLE))
++Count.invisi;
if((setflags & UMODE_INVISIBLE) && !is_invisible(*source_p))
if((setflags & umode::INVISIBLE) && !is(*source_p, umode::INVISIBLE))
--Count.invisi;
/*
* compare new flags with old flags and send string which
@ -1237,7 +1238,7 @@ send_umode(client::client *client_p, client::client *source_p, int old, char *um
{
flag = user_modes[i];
if((flag & old) && !(source_p->umodes & flag))
if((flag & old) && !(source_p->mode & flag))
{
if(what == MODE_DEL)
*m++ = (char) i;
@ -1248,7 +1249,7 @@ send_umode(client::client *client_p, client::client *source_p, int old, char *um
*m++ = (char) i;
}
}
else if(!(flag & old) && (source_p->umodes & flag))
else if(!(flag & old) && (source_p->mode & flag))
{
if(what == MODE_ADD)
*m++ = (char) i;
@ -1345,24 +1346,26 @@ user_welcome(client::client *source_p)
void
oper_up(client::client *source_p, struct oper_conf *oper_p)
{
unsigned int old = source_p->umodes, oldsnomask = source_p->snomask;
using umode = client::mode::mode;
unsigned int old = source_p->mode, oldsnomask = source_p->snomask;
hook_data_umode_changed hdata;
SetOper(source_p);
set_oper(*source_p);
if(oper_p->umodes)
source_p->umodes |= oper_p->umodes;
source_p->mode |= umode(oper_p->umodes);
else if(ConfigFileEntry.oper_umodes)
source_p->umodes |= ConfigFileEntry.oper_umodes;
source_p->mode |= umode(ConfigFileEntry.oper_umodes);
else
source_p->umodes |= DEFAULT_OPER_UMODES;
source_p->mode |= client::mode::DEFAULT_OPER_UMODES;
if (oper_p->snomask)
{
source_p->snomask |= oper_p->snomask;
source_p->umodes |= UMODE_SERVNOTICE;
source_p->mode |= umode::SERVNOTICE;
}
else if (source_p->umodes & UMODE_SERVNOTICE)
else if (source_p->mode & umode::SERVNOTICE)
{
/* Only apply these if +s is already set -- jilles */
if (ConfigFileEntry.oper_snomask)
@ -1384,11 +1387,11 @@ oper_up(client::client *source_p, struct oper_conf *oper_p)
rb_dlinkAddAlloc(source_p, &oper_list);
if(IsOperAdmin(source_p) && !IsOperHiddenAdmin(source_p))
source_p->umodes |= UMODE_ADMIN;
source_p->mode |= umode::ADMIN;
if(!IsOperN(source_p))
source_p->snomask &= ~SNO_NCHANGE;
if(!IsOperOperwall(source_p))
source_p->umodes &= ~UMODE_OPERWALL;
source_p->mode &= ~umode::OPERWALL;
hdata.client = source_p;
hdata.oldumodes = old;
hdata.oldsnomask = oldsnomask;
@ -1397,9 +1400,9 @@ oper_up(client::client *source_p, struct oper_conf *oper_p)
sendto_realops_snomask(SNO_GENERAL, L_ALL,
"%s (%s!%s@%s) is now an operator", oper_p->name, source_p->name,
source_p->username, source_p->host);
if(!(old & UMODE_INVISIBLE) && is_invisible(*source_p))
if(!(old & umode::INVISIBLE) && is(*source_p, umode::INVISIBLE))
++Count.invisi;
if((old & UMODE_INVISIBLE) && !is_invisible(*source_p))
if((old & umode::INVISIBLE) && !is(*source_p, umode::INVISIBLE))
--Count.invisi;
send_umode_out(source_p, source_p, old);
sendto_one_numeric(source_p, RPL_SNOMASK, form_str(RPL_SNOMASK),

View file

@ -518,7 +518,7 @@ sendto_channel_flags(client::client *one, int type, client::client *source_p,
if(type && ((member.flags & type) == 0))
continue;
if(IsDeaf(target_p))
if(is(*target_p, umode::DEAF))
continue;
if(!my(*target_p))
@ -616,7 +616,7 @@ sendto_channel_opmod(client::client *one, client::client *source_p,
if((member.flags & chan::CHANOP) == 0)
continue;
if(IsDeaf(target_p))
if(is(*target_p, umode::DEAF))
continue;
if(!my(*target_p))
@ -673,7 +673,7 @@ sendto_channel_local(int type, chan::chan *chptr, const char *pattern, ...)
if(type == chan::ONLY_OPERS)
{
if (!IsOper(target_p))
if (!is(*target_p, umode::OPER))
continue;
}
else if(type && ((member.flags & type) == 0))
@ -1309,11 +1309,11 @@ sendto_wallops_flags(int flags, client::client *source_p, const char *pattern, .
va_end(args);
RB_DLINK_FOREACH_SAFE(ptr, next_ptr, is_person(*source_p) && flags == UMODE_WALLOP ? lclient_list.head : local_oper_list.head)
RB_DLINK_FOREACH_SAFE(ptr, next_ptr, is_person(*source_p) && flags == umode::WALLOP ? lclient_list.head : local_oper_list.head)
{
client_p = (client::client *)ptr->data;
if(client_p->umodes & flags)
if (is(*client_p, umode(flags)))
_send_linebuf(client_p, &linebuf);
}

View file

@ -47,7 +47,7 @@ add_target(client::client *source_p, client::client *target_p)
uint32_t hashv;
/* can msg themselves or services without using any target slots */
if(source_p == target_p || IsService(target_p))
if(source_p == target_p || is(*target_p, umode::SERVICE))
return 1;
/* special condition for those who have had PRIVMSG crippled to allow them
@ -55,7 +55,7 @@ add_target(client::client *source_p, client::client *target_p)
*
* XXX: is this controversial?
*/
if(source_p->localClient->target_last > rb_current_time() && IsOper(target_p))
if(source_p->localClient->target_last > rb_current_time() && is(*target_p, umode::OPER))
return 1;
hashv = fnv_hash_upper((const unsigned char *)use_id(target_p), 32);
@ -162,7 +162,7 @@ add_reply_target(client::client *source_p, client::client *target_p)
uint32_t *targets;
/* can msg themselves or services without using any target slots */
if(source_p == target_p || IsService(target_p))
if(source_p == target_p || is(*target_p, umode::SERVICE))
return;
hashv = fnv_hash_upper((const unsigned char *)use_id(target_p), 32);

View file

@ -48,7 +48,7 @@ m_ban(struct MsgBuf *msgbuf_p, client::client &client, client::client &source, i
{
sendto_one_notice(&source, ":The BAN command is not user-accessible.");
sendto_one_notice(&source, ":To ban a user from a channel, see /QUOTE HELP CMODE");
if (IsOper(&source))
if (is(source, umode::OPER))
sendto_one_notice(&source, ":To ban a user from a server or from the network, see /QUOTE HELP KLINE");
}

View file

@ -84,7 +84,7 @@ check_forward(client::client &source, chan::chan *chptr,
return chptr;
/* User is +Q, or forwarding disabled */
if (IsNoForward(&source) || !ConfigChannel.use_forward)
if (is(source, umode::NOFORWARD) || !ConfigChannel.use_forward)
return NULL;
while (depth < 16)
@ -180,7 +180,7 @@ m_join(struct MsgBuf *msgbuf_p, client::client &client, client::client &source,
form_str(ERR_BADCHANNAME), name);
/* dont warn for opers */
if(!is_exempt_jupe(source) && !IsOper(&source))
if(!is_exempt_jupe(source) && !is(source, umode::OPER))
sendto_realops_snomask(SNO_SPY, L_NETWIDE,
"User %s (%s@%s) is attempting to join locally juped channel %s (%s)",
source.name, source.username,
@ -194,7 +194,7 @@ m_join(struct MsgBuf *msgbuf_p, client::client &client, client::client &source,
continue;
}
if(splitmode && !IsOper(&source) && (*name != '&') &&
if(splitmode && !is(source, umode::OPER) && (*name != '&') &&
ConfigChannel.no_join_on_split)
{
sendto_one(&source, form_str(ERR_UNAVAILRESOURCE),
@ -254,7 +254,7 @@ m_join(struct MsgBuf *msgbuf_p, client::client &client, client::client &source,
continue;
}
if(splitmode && !IsOper(&source) && (*name != '&') &&
if(splitmode && !is(source, umode::OPER) && (*name != '&') &&
ConfigChannel.no_create_on_split)
{
sendto_one(&source, form_str(ERR_UNAVAILRESOURCE),
@ -306,7 +306,7 @@ m_join(struct MsgBuf *msgbuf_p, client::client &client, client::client &source,
chptr = chptr2;
if(flags == 0 &&
!IsOper(&source) && !is_exempt_spambot(source))
!is(source, umode::OPER) && !is_exempt_spambot(source))
chan::check_spambot_warning(&source, name);
/* add the user to the channel */
@ -976,7 +976,7 @@ do_join_0(client::client &client, client::client &source)
for(const auto &pit : chans(user(source)))
{
if(my_connect(source) &&
!IsOper(&source) && !is_exempt_spambot(source))
!is(source, umode::OPER) && !is_exempt_spambot(source))
chan::check_spambot_warning(&source, NULL);
auto &msptr(pit.second);
@ -998,7 +998,7 @@ check_channel_name_loc(client::client &source, const char *name)
if(EmptyString(name))
return false;
if(ConfigFileEntry.disable_fake_channels && !IsOper(&source))
if(ConfigFileEntry.disable_fake_channels && !is(source, umode::OPER))
{
for(p = name; *p; ++p)
if(!rfc1459::is_chan(*p) || rfc1459::is_fake_chan(*p))

View file

@ -118,7 +118,7 @@ m_kick(struct MsgBuf *msgbuf_p, client::client &client, client::client &source,
if(msptr != NULL)
{
if(my(source) && IsService(who))
if(my(source) && is(*who, umode::SERVICE))
{
sendto_one(&source, form_str(ERR_ISCHANSERVICE),
me.name,

View file

@ -238,9 +238,9 @@ ms_kill(struct MsgBuf *msgbuf_p, client::client &client, client::client &source,
/* path must contain at least 2 !'s, or bitchx falsely declares it
* local --fl
*/
if(IsOper(&source)) /* send it normally */
if(is(source, umode::OPER)) /* send it normally */
{
sendto_realops_snomask(IsService(&source) ? SNO_SKILL : SNO_GENERAL, L_ALL,
sendto_realops_snomask(is(source, umode::SERVICE) ? SNO_SKILL : SNO_GENERAL, L_ALL,
"Received KILL message for %s!%s@%s. From %s Path: %s!%s!%s!%s %s",
target_p->name, target_p->username, target_p->orighost, source.name,
source.servptr->name, source.host, source.username,

View file

@ -338,7 +338,7 @@ build_target_list(enum message_type msgtype, client::client &client,
msptr = get(chptr->members, source, std::nothrow);
if(!is_server(source) && !IsService(&source) && !is_chanop(msptr) && !is_voiced(msptr))
if(!is_server(source) && !is(source, umode::SERVICE) && !is_chanop(msptr) && !is_voiced(msptr))
{
sendto_one(&source, form_str(ERR_CHANOPRIVSNEEDED),
get_id(&me, &source),
@ -395,7 +395,7 @@ build_target_list(enum message_type msgtype, client::client &client,
continue;
}
if(strchr(nick, '@') || (IsOper(&source) && (*nick == '$')))
if(strchr(nick, '@') || (is(source, umode::OPER) && (*nick == '$')))
{
handle_special(msgtype, client, source, nick, text);
continue;
@ -512,7 +512,7 @@ msg_channel(enum message_type msgtype,
if((result = can_send(chptr, &source, NULL)))
{
if(result != chan::CAN_SEND_OPV && my(source) &&
!IsOper(&source) &&
!is(source, umode::OPER) &&
!add_channel_target(&source, chptr))
{
sendto_one(&source, form_str(ERR_TARGCHANGE),
@ -534,7 +534,7 @@ msg_channel(enum message_type msgtype,
else if(chptr->mode.mode & chan::mode::OPMODERATE &&
(!(chptr->mode.mode & chan::mode::NOPRIVMSGS) || is_member(chptr, &source)))
{
if(my(source) && !IsOper(&source) && !add_channel_target(&source, chptr))
if(my(source) && !is(source, umode::OPER) && !add_channel_target(&source, chptr))
{
sendto_one(&source, form_str(ERR_TARGCHANGE),
me.name,
@ -727,10 +727,10 @@ msg_client(enum message_type msgtype,
* as a way of griefing. --nenolod
*/
if(msgtype != MESSAGE_TYPE_NOTICE &&
(IsSetCallerId(&source) ||
(IsSetRegOnlyMsg(&source) && suser(user(*target_p)).empty())) &&
(is(source, umode::CALLERID) ||
(is(source, umode::REGONLYMSG) && suser(user(*target_p)).empty())) &&
!accept_message(target_p, &source) &&
!IsOper(target_p))
!is(*target_p, umode::OPER))
{
if(rb_dlink_list_length(&source.localClient->allow_list) <
(unsigned long)ConfigFileEntry.max_accept)
@ -753,7 +753,7 @@ msg_client(enum message_type msgtype,
source.localClient->last = rb_current_time();
/* auto cprivmsg/cnotice */
do_floodcount = !IsOper(&source) &&
do_floodcount = !is(source, umode::OPER) &&
!find_allowing_channel(&source, target_p);
/* target change stuff, dont limit ctcp replies as that
@ -817,11 +817,11 @@ msg_client(enum message_type msgtype,
}
/* XXX Controversial? allow opers always to send through a +g */
if(!is_server(source) && (IsSetCallerId(target_p) ||
(IsSetRegOnlyMsg(target_p) && suser(user(source)).empty())))
if(!is_server(source) && (is(*target_p, umode::CALLERID) ||
(is(*target_p, umode::REGONLYMSG) && suser(user(source)).empty())))
{
/* Here is the anti-flood bot/spambot code -db */
if(accept_message(&source, target_p) || IsOper(&source))
if(accept_message(&source, target_p) || is(source, umode::OPER))
{
add_reply_target(target_p, &source);
sendto_one(target_p, ":%s!%s@%s %s %s :%s",
@ -829,7 +829,7 @@ msg_client(enum message_type msgtype,
source.username,
source.host, cmdname[msgtype], target_p->name, text);
}
else if (IsSetRegOnlyMsg(target_p) && suser(user(source)).empty())
else if (is(*target_p, umode::REGONLYMSG) && suser(user(source)).empty())
{
if (msgtype != MESSAGE_TYPE_NOTICE)
sendto_one_numeric(&source, ERR_NONONREG,
@ -894,7 +894,7 @@ flood_attack_client(enum message_type msgtype, client::client &source, client::c
* and msg user@server.
* -- jilles
*/
if(GlobalSetOptions.floodcount && is_client(source) && &source != target_p && !IsService(target_p))
if(GlobalSetOptions.floodcount && is_client(source) && &source != target_p && !is(*target_p, umode::SERVICE))
{
if((target_p->first_received_message_time + 1) < rb_current_time())
{
@ -972,7 +972,7 @@ handle_special(enum message_type msgtype, client::client &client,
return;
}
if(!IsOper(&source))
if(!is(source, umode::OPER))
{
if(strchr(nick, '%') || (strncmp(nick, "opers", 5) == 0))
{
@ -1015,11 +1015,11 @@ handle_special(enum message_type msgtype, client::client &client,
*
* Armin, 8Jun90 (gruner@informatik.tu-muenchen.de)
*/
if(IsOper(&source) && *nick == '$')
if(is(source, umode::OPER) && *nick == '$')
{
if((*(nick + 1) == '$' || *(nick + 1) == '#'))
nick++;
else if(MyOper(&source))
else if(my_oper(source))
{
sendto_one(&source,
":%s NOTICE %s :The command %s %s is no longer supported, please use $%s",

View file

@ -368,11 +368,11 @@ do_modlist(client::client &source, const char *pattern)
break;
case MAPI_ORIGIN_CORE:
origin = "builtin";
display = IsOper(&source);
display = is(source, umode::OPER);
break;
default:
origin = "unknown";
display = IsOper(&source);
display = is(source, umode::OPER);
break;
}

View file

@ -260,7 +260,7 @@ ms_nick(struct MsgBuf *msgbuf_p, client::client &client, client::client &source,
nick = parc > 1 ? parv[1] : "?";
server = parc > 7 ? parv[7] : "?";
sendto_wallops_flags(UMODE_WALLOP, &me,
sendto_wallops_flags(umode::WALLOP, &me,
"Link %s cancelled, TS5 nickname %s on %s introduced (old server?)",
client.name, nick, server);
sendto_server(NULL, NULL, CAP_TS6, NOCAPS,
@ -611,7 +611,7 @@ change_local_nick(client::client &client, client::client &source,
source.localClient->last_nick_change = rb_current_time();
source.localClient->number_of_nick_changes++;
if(ConfigFileEntry.anti_nick_flood && !IsOper(&source) &&
if(ConfigFileEntry.anti_nick_flood && !is(source, umode::OPER) &&
source.localClient->number_of_nick_changes > ConfigFileEntry.max_nick_changes)
{
sendto_one(&source, form_str(ERR_NICKTOOFAST),
@ -1046,7 +1046,7 @@ register_client(client::client &client, client::client *server,
{
flag = user_modes[(unsigned char) *m];
if(flag & UMODE_SERVICE)
if(flag & umode::SERVICE)
{
int hit = 0;
rb_dlink_node *ptr;
@ -1068,18 +1068,18 @@ register_client(client::client &client, client::client *server,
}
/* increment +i count if theyre invis */
if(!(source->umodes & UMODE_INVISIBLE) && (flag & UMODE_INVISIBLE))
if(!(source->mode & umode::INVISIBLE) && (flag & umode::INVISIBLE))
Count.invisi++;
/* increment opered count if theyre opered */
if(!(source->umodes & UMODE_OPER) && (flag & UMODE_OPER))
if(!(source->mode & umode::OPER) && (flag & umode::OPER))
Count.oper++;
source->umodes |= flag;
source->mode |= umode(flag);
m++;
}
if(IsOper(source) && !IsService(source))
if(is(*source, umode::OPER) && !is(*source, umode::SERVICE))
rb_dlinkAddAlloc(source, &oper_list);
set_remote_client(*source);
@ -1158,7 +1158,7 @@ static void bad_nickname(client::client &client, const char *nick)
{
char squitreason[100];
sendto_wallops_flags(UMODE_WALLOP, &me,
sendto_wallops_flags(umode::WALLOP, &me,
"Squitting %s because of bad nickname %s (NICKLEN mismatch?)",
client.name, nick);
sendto_server(NULL, NULL, CAP_TS6, NOCAPS,

View file

@ -102,7 +102,7 @@ part_one_client(client::client &client, client::client &source, char *name, cons
return;
}
if(my_connect(source) && !IsOper(&source) && !is_exempt_spambot(source))
if(my_connect(source) && !is(source, umode::OPER) && !is_exempt_spambot(source))
chan::check_spambot_warning(&source, NULL);
/*

View file

@ -61,7 +61,7 @@ m_quit(struct MsgBuf *msgbuf_p, client::client &client, client::client &source,
comment = reason;
}
if(!IsOper(&source) &&
if(!is(source, umode::OPER) &&
(source.localClient->firsttime + ConfigFileEntry.anti_spam_exit_message_time) >
rb_current_time())
{

View file

@ -521,7 +521,7 @@ ms_sid(struct MsgBuf *msgbuf_p, client::client &client, client::client &source,
/* collision on the SID? */
if((target_p = find_id(parv[3])) != NULL)
{
sendto_wallops_flags(UMODE_WALLOP, &me,
sendto_wallops_flags(umode::WALLOP, &me,
"Link %s cancelled, SID %s for server %s already in use by %s",
client.name, parv[3], parv[1], target_p->name);
sendto_server(NULL, NULL, CAP_TS6, NOCAPS,

View file

@ -122,7 +122,7 @@ ms_squit(struct MsgBuf *msgbuf_p, client::client &client, client::client &source
*/
else if(my_connect(*target_p))
{
sendto_wallops_flags(UMODE_WALLOP, &me,
sendto_wallops_flags(umode::WALLOP, &me,
"Remote SQUIT %s from %s (%s)",
target_p->name, source.name, comment);

View file

@ -126,7 +126,7 @@ m_alias(struct MsgBuf *msgbuf, client::client &client, client::client &source, i
{
/* nick, must be +S */
target_p = client::find_named_person(aptr->target.c_str());
if(target_p != NULL && !IsService(target_p))
if(target_p != NULL && !is(*target_p, umode::SERVICE))
target_p = NULL;
}

View file

@ -85,7 +85,7 @@ m_away(struct MsgBuf *msgbuf_p, client::client &client, client::client &source,
/* Rate limit this because it is sent to common channels. */
if (my(source))
{
if(!IsOper(&source) &&
if(!is(source, umode::OPER) &&
source.localClient->next_away > rb_current_time())
{
sendto_one(&source, form_str(RPL_LOAD2HI),

View file

@ -100,7 +100,7 @@ m_challenge(struct MsgBuf *msgbuf_p, client::client &client, client::client &sou
int len = 0;
/* if theyre an oper, reprint oper motd and ignore */
if(IsOper(&source))
if(is(source, umode::OPER))
{
sendto_one(&source, form_str(RPL_YOUREOPER), me.name, source.name);
send_oper_motd(&source);

View file

@ -122,7 +122,7 @@ do_chghost(client::client &source, client::client *target_p,
}
if (my(source))
sendto_one_notice(&source, ":Changed hostname for %s to %s", target_p->name, target_p->host);
if (!is_server(source) && !IsService(&source))
if (!is_server(source) && !is(source, umode::SERVICE))
sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s changed hostname for %s to %s", get_oper_name(&source), target_p->name, target_p->host);
return true;
}

View file

@ -207,7 +207,7 @@ ms_connect(struct MsgBuf *msgbuf_p, client::client &client, client::client &sour
/*
* Notify all operators about remote connect requests
*/
sendto_wallops_flags(UMODE_WALLOP, &me,
sendto_wallops_flags(umode::WALLOP, &me,
"Remote CONNECT %s %d from %s",
parv[1], port, source.name);
sendto_server(NULL, NULL, CAP_TS6, NOCAPS,

View file

@ -124,7 +124,7 @@ me_etrace(struct MsgBuf *msgbuf_p, client::client &client, client::client &sourc
{
client::client *target_p;
if(!IsOper(&source) || parc < 2 || EmptyString(parv[1]))
if(!is(source, umode::OPER) || parc < 2 || EmptyString(parv[1]))
return;
/* we cant etrace remote clients.. we shouldnt even get sent them */
@ -154,7 +154,7 @@ do_etrace(client::client &source, int ipv4, int ipv6)
sendto_one(&source, form_str(RPL_ETRACE),
me.name, source.name,
IsOper(target_p) ? "Oper" : "User",
is(*target_p, umode::OPER) ? "Oper" : "User",
get_client_class(target_p),
target_p->name, target_p->username, target_p->host,
show_ip(&source, target_p) ? target_p->sockhost : "255.255.255.255",
@ -191,14 +191,14 @@ do_single_etrace(client::client &source, client::client *target_p)
if(!show_ip(&source, target_p))
sendto_one(&source, form_str(RPL_ETRACEFULL),
me.name, source.name,
IsOper(target_p) ? "Oper" : "User",
is(*target_p, umode::OPER) ? "Oper" : "User",
get_client_class(target_p),
target_p->name, target_p->username, target_p->host,
"255.255.255.255", "<hidden> <hidden>", target_p->info);
else
sendto_one(&source, form_str(RPL_ETRACEFULL),
me.name, source.name,
IsOper(target_p) ? "Oper" : "User",
is(*target_p, umode::OPER) ? "Oper" : "User",
get_client_class(target_p),
target_p->name, target_p->username,
target_p->host, target_p->sockhost,
@ -262,7 +262,7 @@ m_chantrace(struct MsgBuf *msgbuf_p, client::client &client, client::client &sou
sendto_one(&source, form_str(RPL_ETRACE),
me.name, source.name,
IsOper(target_p) ? "Oper" : "User",
is(*target_p, umode::OPER) ? "Oper" : "User",
/* class field -- pretend its server.. */
target_p->servptr->name,
target_p->name, target_p->username, target_p->host,
@ -307,7 +307,7 @@ match_masktrace(client::client &source, rb_dlink_list *list,
sendto_one(&source, form_str(RPL_ETRACE),
me.name, source.name,
IsOper(target_p) ? "Oper" : "User",
is(*target_p, umode::OPER) ? "Oper" : "User",
/* class field -- pretend its server.. */
target_p->servptr->name,
target_p->name, target_p->username, target_p->host,

View file

@ -87,7 +87,7 @@ do_grant(client::client &source, client::client *target_p, const char *new_privs
if (!strcmp(new_privset, "deoper"))
{
if (!IsOper(target_p))
if (!is(*target_p, umode::OPER))
{
sendto_one_notice(&source, ":You can't deoper someone who isn't an oper.");
return;
@ -115,7 +115,7 @@ do_grant(client::client &source, client::client *target_p, const char *new_privs
if (!dodeoper)
{
if (!IsOper(target_p))
if (!is(*target_p, umode::OPER))
{
sendto_one_notice(target_p, ":%s is opering you with privilege set %s", source.name, privset->name);
sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, "%s is opering %s with privilege set %s", get_oper_name(&source), target_p->name, privset->name);

View file

@ -690,7 +690,7 @@ mo_info(struct MsgBuf *msgbuf_p, client::client &client, client::client &source,
info_spy(source);
send_info_text(source);
if(IsOper(&source))
if(is(source, umode::OPER))
{
send_conf_options(source);
sendto_one_numeric(&source, RPL_INFO, ":%s",

View file

@ -148,7 +148,7 @@ m_invite(struct MsgBuf *msgbuf_p, client::client &client, client::client &source
if(my_connect(source))
{
if (ConfigFileEntry.target_change && !IsOper(&source) &&
if (ConfigFileEntry.target_change && !is(source, umode::OPER) &&
!find_allowing_channel(&source, target_p) &&
!add_target(&source, target_p))
{
@ -173,11 +173,11 @@ m_invite(struct MsgBuf *msgbuf_p, client::client &client, client::client &source
if(my_connect(*target_p))
{
if(!IsOper(&source) && (IsSetCallerId(target_p) ||
(IsSetRegOnlyMsg(target_p) && !suser(user(source))[0])) &&
if(!is(source, umode::OPER) && (is(*target_p, umode::CALLERID) ||
(is(*target_p, umode::REGONLYMSG) && !suser(user(source))[0])) &&
!accept_message(&source, target_p))
{
if (IsSetRegOnlyMsg(target_p) && !suser(user(source))[0])
if (is(*target_p, umode::REGONLYMSG) && !suser(user(source))[0])
{
sendto_one_numeric(&source, ERR_NONONREG,
form_str(ERR_NONONREG),

View file

@ -128,7 +128,7 @@ m_knock(struct MsgBuf *msgbuf_p, client::client &client, client::client &source,
* allow one knock per user per knock_delay
* allow one knock per channel per knock_delay_channel
*/
if(!IsOper(&source) &&
if(!is(source, umode::OPER) &&
(source.localClient->last_knock + ConfigChannel.knock_delay) > rb_current_time())
{
sendto_one(&source, form_str(ERR_TOOMANYKNOCK),

View file

@ -76,7 +76,7 @@ m_names(struct MsgBuf *msgbuf_p, client::client &client, client::client &source,
}
else
{
if(!IsOper(&source))
if(!is(source, umode::OPER))
{
if((last_used + ConfigFileEntry.pace_wait) > rb_current_time())
{
@ -132,7 +132,7 @@ names_global(client::client &source)
target_p = (client::client *)ptr->data;
dont_show = false;
if(!is_person(*target_p) || is_invisible(*target_p))
if(!is_person(*target_p) || is(*target_p, umode::INVISIBLE))
continue;
/* we want to show -i clients that are either:

View file

@ -54,7 +54,7 @@ m_oper(struct MsgBuf *msgbuf_p, client::client &client, client::client &source,
name = parv[1];
password = parv[2];
if(IsOper(&source))
if(is(source, umode::OPER))
{
sendto_one(&source, form_str(RPL_YOUREOPER), me.name, source.name);
cache::motd::send_oper(&source);
@ -85,7 +85,7 @@ m_oper(struct MsgBuf *msgbuf_p, client::client &client, client::client &source,
return;
}
if(IsOperConfNeedSSL(oper_p) && !IsSSLClient(&source))
if(IsOperConfNeedSSL(oper_p) && !is(source, umode::SSLCLIENT))
{
sendto_one_numeric(&source, ERR_NOOPERHOST, form_str(ERR_NOOPERHOST));
ilog(L_FOPER, "FAILED OPER (%s) by (%s!%s@%s) (%s) -- requires SSL/TLS",

View file

@ -80,7 +80,7 @@ static void show_privs(client::client &source, client::client *target_p)
buf[0] = '\0';
if (target_p->localClient->privset)
rb_strlcat(buf, target_p->localClient->privset->privs, sizeof buf);
if (IsOper(target_p))
if (is(*target_p, umode::OPER))
{
if (buf[0] != '\0')
rb_strlcat(buf, " ", sizeof buf);
@ -115,7 +115,7 @@ me_privs(struct MsgBuf *msgbuf_p, client::client &client, client::client &source
{
client::client *target_p;
if (!IsOper(&source) || parc < 2 || EmptyString(parv[1]))
if (!is(source, umode::OPER) || parc < 2 || EmptyString(parv[1]))
return;
/* we cannot show privs for remote clients */

View file

@ -76,7 +76,7 @@ sasl_visible(client::client *client)
if (ConfigFileEntry.sasl_service)
agent_p = find_named_client(ConfigFileEntry.sasl_service);
return agent_p != NULL && IsService(agent_p);
return agent_p != NULL && is(*agent_p, umode::SERVICE);
}
static const char *
@ -131,7 +131,7 @@ m_authenticate(struct MsgBuf *msgbuf_p, client::client &client, client::client &
}
saslserv_p = find_named_client(ConfigFileEntry.sasl_service);
if(saslserv_p == NULL || !IsService(saslserv_p))
if(saslserv_p == NULL || !is(*saslserv_p, umode::SERVICE))
{
sendto_one(&source, form_str(ERR_SASLABORTED), me.name, EmptyString(source.name) ? "*" : source.name);
return;
@ -207,7 +207,7 @@ me_sasl(struct MsgBuf *msgbuf_p, client::client &client, client::client &source,
/* We only accept messages from SASL agents; these must have umode +S
* (so the server must be listed in a service{} block).
*/
if(!IsService(agent_p))
if(!is(*agent_p, umode::SERVICE))
return;
/* Reject if someone has already answered. */

View file

@ -208,7 +208,7 @@ scan_umodes(struct MsgBuf *msgbuf_p, client::client &client, client::client &sou
else
sockhost = target_p->sockhost;
working_umodes = target_p->umodes;
working_umodes = target_p->mode;
/* require that we have the allowed umodes... */
if ((working_umodes & allowed_umodes) != allowed_umodes)
@ -236,7 +236,7 @@ scan_umodes(struct MsgBuf *msgbuf_p, client::client &client, client::client &sou
for (i = 0; i < 128; i++)
{
if (target_p->umodes & user_modes[i])
if (is(*target_p, umode(user_modes[i])))
*m++ = (char) i;
}

View file

@ -321,7 +321,7 @@ h_svc_stats(hook_data_int *data)
char statchar = (char) data->arg2;
rb_dlink_node *ptr;
if (statchar == 'U' && IsOper(data->client))
if (statchar == 'U' && is(*data->client, umode::OPER))
{
RB_DLINK_FOREACH(ptr, service_list.head)
{

View file

@ -213,7 +213,7 @@ m_stats(struct MsgBuf *msgbuf_p, client::client &client, client::client &source,
statchar = parv[1][0];
if(my(source) && !IsOper(&source))
if(my(source) && !is(source, umode::OPER))
{
/* Check the user is actually allowed to do /stats, and isnt flooding */
if((last_used + ConfigFileEntry.pace_wait) > rb_current_time())
@ -254,7 +254,7 @@ m_stats(struct MsgBuf *msgbuf_p, client::client &client, client::client &source,
me.name, source.name, "admin");
goto stats_out;
}
if(cmd->need_oper && !IsOper(&source))
if(cmd->need_oper && !is(source, umode::OPER))
{
sendto_one_numeric(&source, ERR_NOPRIVILEGES,
form_str (ERR_NOPRIVILEGES));
@ -325,7 +325,7 @@ stats_connect(client::client &source)
if((ConfigFileEntry.stats_c_oper_only ||
(ConfigServerHide.flatten_links && !is_exempt_shide(source))) &&
!IsOper(&source))
!is(source, umode::OPER))
{
sendto_one_numeric(&source, ERR_NOPRIVILEGES,
form_str(ERR_NOPRIVILEGES));
@ -341,7 +341,7 @@ stats_connect(client::client &source)
s = buf;
if(IsOper(&source))
if(is(source, umode::OPER))
{
if(ServerConfAutoconn(server_p))
*s++ = 'A';
@ -528,7 +528,7 @@ stats_hubleaf(client::client &source)
if((ConfigFileEntry.stats_h_oper_only ||
(ConfigServerHide.flatten_links && !is_exempt_shide(source))) &&
!IsOper(&source))
!is(source, umode::OPER))
{
sendto_one_numeric(&source, ERR_NOPRIVILEGES,
form_str (ERR_NOPRIVILEGES));
@ -555,12 +555,12 @@ static void
stats_auth (client::client &source)
{
/* Oper only, if unopered, return ERR_NOPRIVS */
if((ConfigFileEntry.stats_i_oper_only == 2) && !IsOper (&source))
if((ConfigFileEntry.stats_i_oper_only == 2) && !is(source, umode::OPER))
sendto_one_numeric(&source, ERR_NOPRIVILEGES,
form_str (ERR_NOPRIVILEGES));
/* If unopered, Only return matching auth blocks */
else if((ConfigFileEntry.stats_i_oper_only == 1) && !IsOper (&source))
else if((ConfigFileEntry.stats_i_oper_only == 1) && !is(source, umode::OPER))
{
struct ConfItem *aconf;
char *name, *host, *user, *classname;
@ -599,12 +599,12 @@ static void
stats_tklines(client::client &source)
{
/* Oper only, if unopered, return ERR_NOPRIVS */
if((ConfigFileEntry.stats_k_oper_only == 2) && !IsOper (&source))
if((ConfigFileEntry.stats_k_oper_only == 2) && !is(source, umode::OPER))
sendto_one_numeric(&source, ERR_NOPRIVILEGES,
form_str (ERR_NOPRIVILEGES));
/* If unopered, Only return matching klines */
else if((ConfigFileEntry.stats_k_oper_only == 1) && !IsOper (&source))
else if((ConfigFileEntry.stats_k_oper_only == 1) && !is(source, umode::OPER))
{
struct ConfItem *aconf;
char *host, *pass, *user, *oper_reason;
@ -701,12 +701,12 @@ static void
stats_klines(client::client &source)
{
/* Oper only, if unopered, return ERR_NOPRIVS */
if((ConfigFileEntry.stats_k_oper_only == 2) && !IsOper (&source))
if((ConfigFileEntry.stats_k_oper_only == 2) && !is(source, umode::OPER))
sendto_one_numeric(&source, ERR_NOPRIVILEGES,
form_str (ERR_NOPRIVILEGES));
/* If unopered, Only return matching klines */
else if((ConfigFileEntry.stats_k_oper_only == 1) && !IsOper (&source))
else if((ConfigFileEntry.stats_k_oper_only == 1) && !is(source, umode::OPER))
{
struct ConfItem *aconf;
char *host, *pass, *user, *oper_reason;
@ -778,7 +778,7 @@ stats_oper(client::client &source)
struct oper_conf *oper_p;
rb_dlink_node *ptr;
if(!IsOper(&source) && ConfigFileEntry.stats_o_oper_only)
if(!is(source, umode::OPER) && ConfigFileEntry.stats_o_oper_only)
{
sendto_one_numeric(&source, ERR_NOPRIVILEGES,
form_str (ERR_NOPRIVILEGES));
@ -792,7 +792,7 @@ stats_oper(client::client &source)
sendto_one_numeric(&source, RPL_STATSOLINE,
form_str(RPL_STATSOLINE),
oper_p->username, oper_p->host, oper_p->name,
IsOper(&source) ? oper_p->privset->name : "0", "-1");
is(source, umode::OPER) ? oper_p->privset->name : "0", "-1");
}
}
@ -833,7 +833,7 @@ stats_operedup (client::client &source)
{
target_p = (client::client *)oper_ptr->data;
if(IsOperInvis(target_p) && !IsOper(&source))
if(IsOperInvis(target_p) && !is(source, umode::OPER))
continue;
if(away(user(*target_p)).size())
@ -856,7 +856,7 @@ stats_operedup (client::client &source)
static void
stats_ports (client::client &source)
{
if(!IsOper (&source) && ConfigFileEntry.stats_P_oper_only)
if(!is(source, umode::OPER) && ConfigFileEntry.stats_P_oper_only)
sendto_one_numeric(&source, ERR_NOPRIVILEGES,
form_str (ERR_NOPRIVILEGES));
else
@ -1188,7 +1188,7 @@ stats_servers (client::client &source)
int days, hours, minutes;
int j = 0;
if(ConfigServerHide.flatten_links && !IsOper(&source) &&
if(ConfigServerHide.flatten_links && !is(source, umode::OPER) &&
!is_exempt_shide(source))
{
sendto_one_numeric(&source, ERR_NOPRIVILEGES,
@ -1264,7 +1264,7 @@ stats_gecos(client::client &source)
static void
stats_class(client::client &source)
{
if(ConfigFileEntry.stats_y_oper_only && !IsOper(&source))
if(ConfigFileEntry.stats_y_oper_only && !is(source, umode::OPER))
sendto_one_numeric(&source, ERR_NOPRIVILEGES,
form_str (ERR_NOPRIVILEGES));
else
@ -1515,7 +1515,7 @@ stats_servlinks (client::client &source)
int j = 0;
char buf[128];
if(ConfigServerHide.flatten_links && !IsOper (&source) &&
if(ConfigServerHide.flatten_links && !is(source, umode::OPER) &&
!is_exempt_shide(source))
{
sendto_one_numeric(&source, ERR_NOPRIVILEGES,
@ -1544,7 +1544,7 @@ stats_servlinks (client::client &source)
rb_current_time() - target_p->localClient->firsttime,
(rb_current_time() > target_p->localClient->lasttime) ?
(rb_current_time() - target_p->localClient->lasttime) : 0,
IsOper (&source) ? show_capabilities (target_p) : "TS");
is(source, umode::OPER) ? show_capabilities (target_p) : "TS");
}
sendto_one_numeric(&source, RPL_STATSDEBUG,
@ -1636,7 +1636,7 @@ stats_ltrace(client::client &source, int parc, const char *parv[])
if(doall)
{
/* local opers get everyone */
if(MyOper(&source))
if(my_oper(source))
{
stats_l_list(source, name, doall, wilds, &unknown_list, statchar, NULL);
stats_l_list(source, name, doall, wilds, &lclient_list, statchar, NULL);
@ -1650,7 +1650,7 @@ stats_ltrace(client::client &source, int parc, const char *parv[])
stats_l_list(source, name, doall, wilds, &local_oper_list, statchar, stats_l_should_show_oper);
}
if (!ConfigServerHide.flatten_links || IsOper(&source) ||
if (!ConfigServerHide.flatten_links || is(source, umode::OPER) ||
is_exempt_shide(source))
stats_l_list(source, name, doall, wilds, &serv_list, statchar, NULL);
@ -1704,7 +1704,7 @@ stats_l_client(client::client &source, client::client *target_p,
rb_current_time() - target_p->localClient->firsttime,
(rb_current_time() > target_p->localClient->lasttime) ?
(rb_current_time() - target_p->localClient->lasttime) : 0,
IsOper(&source) ? show_capabilities(target_p) : "-");
is(source, umode::OPER) ? show_capabilities(target_p) : "-");
}
else

View file

@ -97,7 +97,7 @@ m_topic(struct MsgBuf *msgbuf_p, client::client &client, client::client &source,
if (my(source) &&
!is_chanop(msptr) &&
!is_voiced(msptr) &&
!IsOper(&source) &&
!is(source, umode::OPER) &&
!add_channel_target(&source, chptr))
{
sendto_one(&source, form_str(ERR_TARGCHANGE),

View file

@ -110,7 +110,7 @@ m_trace(struct MsgBuf *msgbuf_p, client::client &client, client::client &source,
/* giving this out with flattened links defeats the
* object --fl
*/
if(IsOper(&source) || is_exempt_shide(source) ||
if(is(source, umode::OPER) || is_exempt_shide(source) ||
!ConfigServerHide.flatten_links)
sendto_one_numeric(&source, RPL_TRACELINK,
form_str(RPL_TRACELINK),
@ -174,7 +174,7 @@ m_trace(struct MsgBuf *msgbuf_p, client::client &client, client::client &source,
/* give non-opers a limited trace output of themselves (if local),
* opers and servers (if no shide) --fl
*/
if(!IsOper(&source))
if(!is(source, umode::OPER))
{
if(my(source))
{
@ -218,15 +218,15 @@ m_trace(struct MsgBuf *msgbuf_p, client::client &client, client::client &source,
target_p = (client::client *)ptr->data;
/* dont show invisible users to remote opers */
if(is_invisible(*target_p) && dow && !my_connect(source) && !IsOper(target_p))
if(is(*target_p, umode::INVISIBLE) && dow && !my_connect(source) && !is(*target_p, umode::OPER))
continue;
if(!doall && wilds && !match(tname, target_p->name))
continue;
/* remote opers may not see invisible normal users */
if(dow && !my_connect(source) && !IsOper(target_p) &&
is_invisible(*target_p))
if(dow && !my_connect(source) && !is(*target_p, umode::OPER) &&
is(*target_p, umode::INVISIBLE))
continue;
cnt = report_this_status(source, target_p);
@ -362,8 +362,8 @@ report_this_status(client::client &source, client::client *target_p)
case client::status::CLIENT:
{
sendto_one_numeric(&source,
IsOper(target_p) ? RPL_TRACEOPERATOR : RPL_TRACEUSER,
IsOper(target_p) ? form_str(RPL_TRACEOPERATOR) : form_str(RPL_TRACEUSER),
is(*target_p, umode::OPER) ? RPL_TRACEOPERATOR : RPL_TRACEUSER,
is(*target_p, umode::OPER) ? form_str(RPL_TRACEOPERATOR) : form_str(RPL_TRACEUSER),
class_name, name,
show_ip(&source, target_p) ? ip : empty_sockhost,
(unsigned long)(rb_current_time() - target_p->localClient->lasttime),

View file

@ -75,7 +75,7 @@ m_userhost(struct MsgBuf *msgbuf_p, client::client &client, client::client &sour
{
rl = sprintf(response, "%s%s=%c%s@%s ",
target_p->name,
IsOper(target_p) ? "*" : "",
is(*target_p, umode::OPER) ? "*" : "",
(away(user(*target_p)).size())? '-' : '+',
target_p->username,
target_p->sockhost);
@ -84,7 +84,7 @@ m_userhost(struct MsgBuf *msgbuf_p, client::client &client, client::client &sour
{
rl = sprintf(response, "%s%s=%c%s@%s ",
target_p->name,
IsOper(target_p) ? "*" : "",
is(*target_p, umode::OPER) ? "*" : "",
(away(user(*target_p)).size())? '-' : '+',
target_p->username, target_p->host);
}

View file

@ -58,7 +58,7 @@ mo_operwall(struct MsgBuf *msgbuf_p, client::client &client, client::client &sou
return;
}
sendto_wallops_flags(UMODE_OPERWALL, &source, "OPERWALL - %s", parv[1]);
sendto_wallops_flags(umode::OPERWALL, &source, "OPERWALL - %s", parv[1]);
sendto_server(&client, NULL, CAP_TS6, NOCAPS, ":%s OPERWALL :%s",
use_id(&source), parv[1]);
}
@ -73,7 +73,7 @@ ms_operwall(struct MsgBuf *msgbuf_p, client::client &client, client::client &sou
{
sendto_server(&client, NULL, CAP_TS6, NOCAPS, ":%s OPERWALL :%s",
use_id(&source), parv[1]);
sendto_wallops_flags(UMODE_OPERWALL, &source, "OPERWALL - %s", parv[1]);
sendto_wallops_flags(umode::OPERWALL, &source, "OPERWALL - %s", parv[1]);
}
/*
@ -101,7 +101,7 @@ ms_wallops(struct MsgBuf *msgbuf_p, client::client &client, client::client &sour
prefix = "WALLOPS - ";
}
sendto_wallops_flags(UMODE_WALLOP, &source, "%s%s", prefix, parv[1]);
sendto_wallops_flags(umode::WALLOP, &source, "%s%s", prefix, parv[1]);
sendto_server(&client, NULL, CAP_TS6, NOCAPS, ":%s WALLOPS :%s",
use_id(&source), parv[1]);

View file

@ -176,7 +176,7 @@ m_who(struct MsgBuf *msgbuf_p, client::client &client, client::client &source, i
if(chptr != NULL)
{
if (!IsOper(&source) && !ratelimit_client_who(&source, size(chptr->members)/50))
if (!is(source, umode::OPER) && !ratelimit_client_who(&source, size(chptr->members)/50))
{
sendto_one(&source, form_str(RPL_LOAD2HI),
me.name, source.name, "WHO");
@ -202,11 +202,11 @@ m_who(struct MsgBuf *msgbuf_p, client::client &client, client::client &source, i
/* '/who nick' */
if(((target_p = client::find_named_person(mask)) != NULL) &&
(!server_oper || IsOper(target_p)))
(!server_oper || is(*target_p, umode::OPER)))
{
int isinvis = 0;
isinvis = is_invisible(*target_p);
isinvis = is(*target_p, umode::INVISIBLE);
for(const auto &pit : chans(user(*target_p)))
{
chptr = pit.first;
@ -238,7 +238,7 @@ m_who(struct MsgBuf *msgbuf_p, client::client &client, client::client &source, i
flood_endgrace(&source);
/* it has to be a global who at this point, limit it */
if(!IsOper(&source))
if(!is(source, umode::OPER))
{
if((last_used + ConfigFileEntry.pace_wait) > rb_current_time() || !ratelimit_client(&source, 1))
{
@ -291,10 +291,10 @@ who_common_channel(client::client &source, chan::chan *chptr,
const auto &target(pit.first);
const auto &member(pit.second);
if(!is_invisible(*target) || is_marked(*target))
if(!is(*target, umode::INVISIBLE) || is_marked(*target))
continue;
if(server_oper && !IsOper(target))
if(server_oper && !is(*target, umode::OPER))
continue;
set_mark(*target);
@ -304,7 +304,7 @@ who_common_channel(client::client &source, chan::chan *chptr,
if((mask == NULL) ||
match(mask, target->name) || match(mask, target->username) ||
match(mask, target->host) || match(mask, target->servptr->name) ||
(IsOper(&source) && match(mask, target->orighost)) ||
(is(source, umode::OPER) && match(mask, target->orighost)) ||
match(mask, target->info))
{
do_who(source, target, chptr, nullptr, fmt);
@ -361,13 +361,13 @@ who_global(client::client &source, const char *mask, int server_oper, int opersp
if(!is_person(*target_p))
continue;
if(is_invisible(*target_p) && !operspy)
if(is(*target_p, umode::INVISIBLE) && !operspy)
{
clear_mark(*target_p);
continue;
}
if(server_oper && !IsOper(target_p))
if(server_oper && !is(*target_p, umode::OPER))
continue;
if(maxmatches > 0)
@ -375,7 +375,7 @@ who_global(client::client &source, const char *mask, int server_oper, int opersp
if(!mask ||
match(mask, target_p->name) || match(mask, target_p->username) ||
match(mask, target_p->host) || match(mask, target_p->servptr->name) ||
(IsOper(&source) && match(mask, target_p->orighost)) ||
(is(source, umode::OPER) && match(mask, target_p->orighost)) ||
match(mask, target_p->info))
{
do_who(source, target_p, nullptr, nullptr, fmt);
@ -411,10 +411,10 @@ do_who_on_channel(client::client &source, chan::chan *chptr,
const auto &target(pit.first);
auto &member(pit.second);
if(server_oper && !IsOper(target))
if(server_oper && !is(*target, umode::OPER))
continue;
if(source_member || !is_invisible(*target))
if(source_member || !is(*target, umode::INVISIBLE))
do_who(source, target, chptr, &member, fmt);
}
}
@ -464,14 +464,14 @@ do_who(client::client &source, client::client *target_p, chan::chan *chan, chan:
const char *q;
sprintf(status, "%c%s%s",
away(user(*target_p)).size()? 'G' : 'H', IsOper(target_p) ? "*" : "", msptr ? find_status(msptr, fmt->fields || IsCapable(&source, CLICAP_MULTI_PREFIX)) : "");
away(user(*target_p)).size()? 'G' : 'H', is(*target_p, umode::OPER) ? "*" : "", msptr ? find_status(msptr, fmt->fields || IsCapable(&source, CLICAP_MULTI_PREFIX)) : "");
if (fmt->fields == 0)
sendto_one(&source, form_str(RPL_WHOREPLY), me.name,
source.name, msptr ? chan->name.c_str() : "*",
target_p->username, target_p->host,
target_p->servptr->name, target_p->name, status,
ConfigServerHide.flatten_links && !IsOper(&source) && !is_exempt_shide(source) ? 0 : target_p->hopcount,
ConfigServerHide.flatten_links && !is(source, umode::OPER) && !is_exempt_shide(source) ? 0 : target_p->hopcount,
target_p->info);
else
{
@ -501,7 +501,7 @@ do_who(client::client &source, client::client *target_p, chan::chan *chan, chan:
if (fmt->fields & FIELD_FLAGS)
append_format(str, sizeof str, &pos, " %s", status);
if (fmt->fields & FIELD_HOP)
append_format(str, sizeof str, &pos, " %d", ConfigServerHide.flatten_links && !IsOper(&source) && !is_exempt_shide(source) ? 0 : target_p->hopcount);
append_format(str, sizeof str, &pos, " %d", ConfigServerHide.flatten_links && !is(source, umode::OPER) && !is_exempt_shide(source) ? 0 : target_p->hopcount);
if (fmt->fields & FIELD_IDLE)
append_format(str, sizeof str, &pos, " %d", (int)(my(*target_p) ? rb_current_time() - target_p->localClient->last : 0));
if (fmt->fields & FIELD_ACCOUNT)

View file

@ -70,7 +70,7 @@ m_whois(struct MsgBuf *msgbuf_p, client::client &client, client::client &source,
return;
}
if(!IsOper(&source))
if(!is(source, umode::OPER))
{
/* seeing as this is going across servers, we should limit it */
if((last_used + ConfigFileEntry.pace_wait_simple) > rb_current_time() || !ratelimit_client(&source, 2))
@ -250,7 +250,7 @@ single_whois(client::client &source, client::client *target_p, int operspy)
hdata.client = &source;
hdata.target = target_p;
if (!IsService(target_p))
if (!is(*target_p, umode::SERVICE))
{
for(const auto &pit : chans(user(*target_p)))
{
@ -292,16 +292,16 @@ single_whois(client::client &source, client::client *target_p, int operspy)
sendto_one_numeric(&source, RPL_AWAY, form_str(RPL_AWAY),
target_p->name, away(user(*target_p)).c_str());
if(IsOper(target_p) && (!ConfigFileEntry.hide_opers_in_whois || IsOper(&source)))
if(is(*target_p, umode::OPER) && (!ConfigFileEntry.hide_opers_in_whois || is(source, umode::OPER)))
{
sendto_one_numeric(&source, RPL_WHOISOPERATOR, form_str(RPL_WHOISOPERATOR),
target_p->name,
IsService(target_p) ? ConfigFileEntry.servicestring :
(IsAdmin(target_p) ? GlobalSetOptions.adminstring :
is(*target_p, umode::SERVICE) ? ConfigFileEntry.servicestring :
(is(*target_p, umode::ADMIN) ? GlobalSetOptions.adminstring :
GlobalSetOptions.operstring));
}
if(my(*target_p) && !EmptyString(target_p->localClient->opername) && IsOper(&source))
if(my(*target_p) && !EmptyString(target_p->localClient->opername) && is(source, umode::OPER))
{
char buf[512];
snprintf(buf, sizeof(buf), "is opered as %s, privset %s",
@ -310,7 +310,7 @@ single_whois(client::client &source, client::client *target_p, int operspy)
target_p->name, buf);
}
if(IsSSLClient(target_p))
if(is(*target_p, umode::SSLCLIENT))
{
char cbuf[256] = "is using a secure connection";
@ -319,7 +319,7 @@ single_whois(client::client &source, client::client *target_p, int operspy)
sendto_one_numeric(&source, RPL_WHOISSECURE, form_str(RPL_WHOISSECURE),
target_p->name, cbuf);
if((&source == target_p || IsOper(&source)) &&
if((&source == target_p || is(source, umode::OPER)) &&
target_p->certfp != NULL)
sendto_one_numeric(&source, RPL_WHOISCERTFP,
form_str(RPL_WHOISCERTFP),
@ -328,7 +328,7 @@ single_whois(client::client &source, client::client *target_p, int operspy)
if(my(*target_p))
{
if (is_dyn_spoof(*target_p) && (IsOper(&source) || &source == target_p))
if (is_dyn_spoof(*target_p) && (is(source, umode::OPER) || &source == target_p))
{
/* trick here: show a nonoper their own IP if
* dynamic spoofed but not if auth{} spoofed
@ -366,7 +366,7 @@ single_whois(client::client &source, client::client *target_p, int operspy)
}
else
{
if (is_dyn_spoof(*target_p) && (IsOper(&source) || &source == target_p))
if (is_dyn_spoof(*target_p) && (is(source, umode::OPER) || &source == target_p))
{
clear_dyn_spoof(*target_p);
sendto_one_numeric(&source, RPL_WHOISHOST,

View file

@ -56,7 +56,7 @@ m_whowas(struct MsgBuf *msgbuf_p, client::client &client, client::client &source
static time_t last_used = 0L;
if(my(source) && !IsOper(&source))
if(my(source) && !is(source, umode::OPER))
{
if(last_used + (parc > 3 ? ConfigFileEntry.pace_wait :
ConfigFileEntry.pace_wait_simple