0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-12-27 07:54:05 +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; client::client *source_p = data->client;
const auto &chptr(data->chptr); 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()); 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; 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; client::client *source_p = data->client;
const auto &chptr(data->chptr); 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 */ /* 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()); sendto_one_numeric(source_p, 480, "%s :Cannot join channel (-U) - SSL/TLS required", chptr->name.c_str());
data->approved = chan::mode::ERR_CUSTOM; 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; client::client *source_p = data->client;
const auto &chptr(data->chptr); 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()); 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; 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; client::client *who = data->target;
const auto &chptr(data->chptr); const auto &chptr(data->chptr);
if(IsOper(source_p)) if(is(*source_p, umode::OPER))
return; 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)", 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()); 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; client::client *source_p = data->client;
const auto &chptr(data->chptr); 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 */ /* 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()); sendto_one_numeric(source_p, 480, "%s :Cannot join channel (+S) - SSL/TLS required", chptr->name.c_str());
data->approved = chan::mode::ERR_CUSTOM; 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; 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; 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; 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."); sendto_one_notice(source_p, ":*** Channel creation is restricted to network staff only.");
data->approved = ERR_NEEDREGGEDNICK; 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 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) if (data != NULL)
return INVALID; 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 && return ((client_p->mode & modes_ack) == modes_ack &&
!(client_p->umodes & modes_nak)) ? !(client_p->mode & modes_nak)) ?
MATCH : NOMATCH; MATCH : NOMATCH;
} }

View file

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

View file

@ -80,7 +80,7 @@ do_dehelper(client::client &source, client::client &target)
{ {
const char *fakeparv[4]; const char *fakeparv[4];
if(!(target.umodes & UMODE_HELPOPS)) if(!(target.mode & UMODE_HELPOPS))
return; return;
sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, "%s is using DEHELPER on %s", 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 static void
h_hdl_new_remote_user(client::client *client_p) 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); rb_dlinkAddAlloc(client_p, &helper_list);
} }
static void static void
h_hdl_client_exit(hook_data_client_exit *hdata) 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); rb_dlinkFindDestroy(hdata->target, &helper_list);
} }
@ -162,21 +162,21 @@ h_hdl_umode_changed(hook_data_umode_changed *hdata)
client::client &source = *hdata->client; client::client &source = *hdata->client;
/* didn't change +H umode, we don't need to do anything */ /* 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; return;
if (source.umodes & UMODE_HELPOPS) if (source.mode & UMODE_HELPOPS)
{ {
if (my(source) && !HasPrivilege(&source, "usermode: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"); sendto_one(&source, form_str(ERR_NOPRIVS), me.name, source.name, "usermode:helpops");
return; return;
} }
rb_dlinkAddAlloc(&source, &helper_list); rb_dlinkAddAlloc(&source, &helper_list);
} }
else if (!(source.umodes & UMODE_HELPOPS)) else if (!(source.mode & UMODE_HELPOPS))
rb_dlinkFindDestroy(&source, &helper_list); rb_dlinkFindDestroy(&source, &helper_list);
} }
@ -186,7 +186,7 @@ h_hdl_whois(hook_data_client *hdata)
client::client &source = *hdata->client; client::client &source = *hdata->client;
client::client *target_p = hdata->target; 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); 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 static void
h_huc_doing_whois_channel_visibility(hook_data_client *hdata) 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; client::client &source = *hdata->client;
if(hdata->arg2 != (int) 's') if(hdata->arg2 != (int) 's')
return; return;
if((ConfigFileEntry.stats_k_oper_only == 2) && !IsOper(&source)) if((ConfigFileEntry.stats_k_oper_only == 2) && !is(source, umode::OPER))
return; 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); hurt = hurt_find(source.sockhost);
if (hurt != NULL) if (hurt != NULL)

View file

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

View file

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

View file

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

View file

@ -110,14 +110,14 @@ check_umode_change(void *vdata)
return; return;
/* didn't change +h umode, we don't need to do anything */ /* 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; 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))) 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; return;
} }
if (strcmp(source_p->host, source_p->localClient->mangledhost)) 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", sendto_one_numeric(source_p, RPL_HOSTHIDDEN, "%s :is now your hidden host",
source_p->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 && if (source_p->localClient->mangledhost != NULL &&
!strcmp(source_p->host, source_p->localClient->mangledhost)) !strcmp(source_p->host, source_p->localClient->mangledhost))
@ -145,7 +145,7 @@ check_new_user(void *vdata)
if (is_ip_spoof(*source_p)) if (is_ip_spoof(*source_p))
{ {
source_p->umodes &= ~user_modes['h']; source_p->mode &= umode(~user_modes['h']);
return; return;
} }
source_p->localClient->mangledhost = (char *)rb_malloc(HOSTLEN); source_p->localClient->mangledhost = (char *)rb_malloc(HOSTLEN);
@ -154,8 +154,8 @@ check_new_user(void *vdata)
else else
do_host_cloak(source_p->orighost, source_p->localClient->mangledhost, 0); do_host_cloak(source_p->orighost, source_p->localClient->mangledhost, 0);
if (is_dyn_spoof(*source_p)) if (is_dyn_spoof(*source_p))
source_p->umodes &= ~user_modes['h']; source_p->mode &= umode(~user_modes['h']);
if (source_p->umodes & user_modes['h']) if (source_p->mode & user_modes['h'])
{ {
rb_strlcpy(source_p->host, source_p->localClient->mangledhost, sizeof(source_p->host)); rb_strlcpy(source_p->host, source_p->localClient->mangledhost, sizeof(source_p->host));
if (irccmp(source_p->host, source_p->orighost)) 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 static void
mo_adminwall(struct MsgBuf *msgbuf_p, client::client &client, client::client &source, int parc, const char *parv[]) 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), sendto_one(&source, form_str(ERR_NOPRIVS),
me.name, source.name, "adminwall"); me.name, source.name, "adminwall");
return; 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]); sendto_match_servs(&source, "*", CAP_ENCAP, NOCAPS, "ENCAP * ADMINWALL :%s", parv[1]);
} }
static void static void
me_adminwall(struct MsgBuf *msgbuf_p, client::client &client, client::client &source, int parc, const char *parv[]) 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'; *p = '\0';
/* Allow ircops to search for forwards to nonexistent channels */ /* 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) 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; 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])); 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 static void
m_locops(struct MsgBuf *msgbuf_p, client::client &client, client::client &source, int parc, const char *parv[]) 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) if(rb_dlink_list_length(&cluster_conf_list) > 0)
cluster_generic(&source, "LOCOPS", SHARED_LOCOPS, CAP_CLUSTER, 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; return;
if(find_shared_conf("*", "*", source.servptr->name, SHARED_LOCOPS)) 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 static void
@ -79,6 +79,6 @@ me_locops(struct MsgBuf *msgbuf_p, client::client &client, client::client &sourc
return; return;
if(find_shared_conf("*", "*", source.servptr->name, SHARED_LOCOPS)) 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) if(move_me == 1)
parv[1]--; parv[1]--;
sendto_wallops_flags(UMODE_WALLOP, &me, sendto_wallops_flags(umode::WALLOP, &me,
"OJOIN called for %s by %s!%s@%s", "OJOIN called for %s by %s!%s@%s",
parv[1], source.name, source.username, source.host); parv[1], source.name, source.username, source.host);
ilog(L_MAIN, "OJOIN called for %s by %s", 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; return;
} }
sendto_wallops_flags(UMODE_WALLOP, &me, sendto_wallops_flags(umode::WALLOP, &me,
"OKICK called for %s %s by %s!%s@%s", "OKICK called for %s %s by %s!%s@%s",
chptr->name.c_str(), target_p->name, chptr->name.c_str(), target_p->name,
source.name, source.username, source.host); 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); 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", "OMODE called for [%s] [%s] by %s!%s@%s",
parv[1], params, source.name, source.username, source.host); parv[1], params, source.name, source.username, source.host);
ilog(L_MAIN, "OMODE called for [%s] [%s] by %s", 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; msptr->flags |= chan::CHANOP;
sendto_wallops_flags(UMODE_WALLOP, &me, sendto_wallops_flags(umode::WALLOP, &me,
"OPME called for [%s] by %s!%s@%s", "OPME called for [%s] by %s!%s@%s",
parv[1], source.name, source.username, source.host); parv[1], source.name, source.username, source.host);
ilog(L_MAIN, "OPME called for [%s] by %s", 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(msptr != NULL)
{ {
if(my(source) && IsService(who)) if(my(source) && is(*who, umode::SERVICE))
{ {
sendto_one(&source, form_str(ERR_ISCHANSERVICE), sendto_one(&source, form_str(ERR_ISCHANSERVICE),
me.name, source.name, who->name, chptr->name.c_str()); 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; return;
/* enforce target change on roleplay commands */ /* 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), sendto_one(&source, form_str(ERR_TARGCHANGE),
me.name, source.name, chptr->name.c_str()); me.name, source.name, chptr->name.c_str());

View file

@ -28,7 +28,7 @@ block_services_kill(void *vdata)
if (!data->approved) if (!data->approved)
return; return;
if (IsService(data->target)) if (is(*data->target, umode::SERVICE))
{ {
sendto_one_numeric(data->client, ERR_ISCHANSERVICE, sendto_one_numeric(data->client, ERR_ISCHANSERVICE,
"KILL %s :Cannot kill a network service", "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; 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; client::client *source_p = hdata->client;
if (my(*source_p) && IsOper(source_p) && !IsOperInvis(source_p) && if (my(*source_p) && is(*source_p, umode::OPER) && !IsOperInvis(source_p) &&
is_invisible(*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 tried /umode +i, complain; do not complain
* if they opered up while invisible -- jilles */ * 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"); 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)) if (!my(*source_p))
return; return;
if (data->oldumodes & UMODE_OPER && !IsOper(source_p)) if (data->oldumodes & umode::OPER && !is(*source_p, umode::OPER))
source_p->umodes &= ~user_modes['p']; source_p->mode &= umode(~user_modes['p']);
/* didn't change +p umode, we don't need to do anything */ /* 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; return;
if (source_p->umodes & user_modes['p']) if (source_p->mode & user_modes['p'])
{ {
if (!IsOperOverride(source_p)) if (!IsOperOverride(source_p))
{ {
sendto_one_notice(source_p, ":*** You need oper:override privilege for +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; return;
} }
@ -122,7 +122,7 @@ check_umode_change(void *vdata)
sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, "%s has enabled oper-override (+p)", sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, "%s has enabled oper-override (+p)",
get_oper_name(source_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; rb_dlink_node *n, *tn;
@ -153,7 +153,7 @@ hack_channel_access(void *vdata)
if (data->approved == chan::CHANOP) if (data->approved == chan::CHANOP)
return; return;
if (data->client->umodes & user_modes['p']) if (data->client->mode & user_modes['p'])
{ {
update_session_deadline(data->client, NULL); update_session_deadline(data->client, NULL);
data->approved = CHFL_OVERRIDE; data->approved = CHFL_OVERRIDE;
@ -173,7 +173,7 @@ hack_can_join(void *vdata)
if (data->approved == 0) if (data->approved == 0)
return; return;
if (data->client->umodes & user_modes['p']) if (data->client->mode & user_modes['p'])
{ {
update_session_deadline(data->client, NULL); update_session_deadline(data->client, NULL);
data->approved = 0; data->approved = 0;
@ -193,7 +193,7 @@ hack_can_kick(void *vdata)
if (alevel != CHFL_OVERRIDE) if (alevel != CHFL_OVERRIDE)
return; return;
if (data->client->umodes & user_modes['p']) if (data->client->mode & user_modes['p'])
{ {
update_session_deadline(data->client, NULL); update_session_deadline(data->client, NULL);
sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, "%s is using oper-override on %s (KICK %s)", 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) if (data->approved == chan::CAN_SEND_NONOP || data->approved == chan::CAN_SEND_OPV)
return; return;
if (data->client->umodes & user_modes['p']) if (data->client->mode & user_modes['p'])
{ {
data->approved = chan::CAN_SEND_NONOP; 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)) if (my_connect(*source_p) || !has_sent_eob(*source_p->servptr))
return; 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, sendto_realops_snomask_from(SNO_GENERAL, L_ALL, source_p->servptr,
"%s (%s@%s) is now an operator", "%s (%s@%s) is now an operator",
source_p->name, source_p->username, source_p->host); 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) && if(my(*target_p) &&
#ifdef OPERONLY #ifdef OPERONLY
IsOper(target_p) && is(*target_p, umode::OPER) &&
#endif #endif
(source_p != target_p) && (source_p != target_p) &&
(target_p->snomask & snomask_modes['W'])) (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 static
int spamexpr_info(client::client &client, client::client &source, int parc, const char *parv[]) 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(&source, form_str(ERR_NOPRIVS), me.name, source.name, "SPAMEXPR INFO");
sendto_one_notice(&source, ":Only operators can give arguments to this command."); sendto_one_notice(&source, ":Only operators can give arguments to this command.");
return 0; return 0;
} }
if(parc < 1 && IsOper(&source)) if(parc < 1 && is(source, umode::OPER))
{ {
dump_pcre_config(client, source, parc, parv); dump_pcre_config(client, source, parc, parv);
return 0; return 0;
@ -754,7 +754,7 @@ int spamexpr_info(client::client &client, client::client &source, int parc, cons
static static
int spamexpr_list(client::client &client, client::client &source, int parc, const char *parv[]) 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(&source, form_str(ERR_NOPRIVS), me.name, source.name, "SPAMEXPR LIST");
sendto_one_notice(&source, ":Only operators can give arguments to this command."); 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 static
int spamexpr_add(client::client &client, client::client &source, int parc, const char *parv[]) 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"); sendto_one(&source, form_str(ERR_NOPRIVS), me.name, source.name, "SPAMEXPR ADD");
return 0; return 0;
@ -846,7 +846,7 @@ int spamexpr_add(client::client &client, client::client &source, int parc, const
static static
int spamexpr_del(client::client &client, client::client &source, int parc, const char *parv[]) 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"); sendto_one(&source, form_str(ERR_NOPRIVS), me.name, source.name, "SPAMEXPR DEL");
return 0; return 0;
@ -886,7 +886,7 @@ int spamexpr_del(client::client &client, client::client &source, int parc, const
static static
int spamexpr_test(client::client &client, client::client &source, int parc, const char *parv[]) 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"); sendto_one(&source, form_str(ERR_NOPRIVS), me.name, source.name, "SPAMEXPR TEST");
return 0; return 0;
@ -937,7 +937,7 @@ int spamexpr_test(client::client &client, client::client &source, int parc, cons
static static
int spamexpr_sync(client::client &client, client::client &source, int parc, const char *parv[]) 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"); sendto_one(&source, form_str(ERR_NOPRIVS), me.name, source.name, "SPAMEXPR SYNC");
return 0; return 0;

View file

@ -38,7 +38,7 @@ umode_noctcp_process(hook_data_privmsg_user *data) {
return; 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"); sendto_one_numeric(data->source_p, ERR_CANNOTSENDTOUSER, form_str(ERR_CANNOTSENDTOUSER), data->target_p->name, "+C set");
data->approved = ERR_CANNOTSENDTOUSER; data->approved = ERR_CANNOTSENDTOUSER;
return; return;

View file

@ -71,6 +71,61 @@ namespace serv
} // namespace ircd } // 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 ircd {
namespace client { namespace client {
@ -85,23 +140,6 @@ enum class status : uint8_t
CLIENT = 0x40, 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 enum flags
{ {
PINGSENT = 0x00000001, // Unreplied ping sent PINGSENT = 0x00000001, // Unreplied ping sent
@ -170,7 +208,7 @@ struct client
rb_dlink_list whowas_clist; rb_dlink_list whowas_clist;
time_t tsinfo; /* TS on the nick, SVINFO on server */ 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 */ uint64_t flags; /* client flags */
unsigned int snomask; /* server notice mask */ unsigned int snomask; /* server notice mask */
@ -388,44 +426,24 @@ struct ListClient
int operspy; 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 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) inline void
#define ClearInvisible(x) ((x)->umodes &= ~UMODE_INVISIBLE) set(client &client, const mode::mode &mode)
#define IsSSLClient(x) ((x)->umodes & UMODE_SSLCLIENT) {
#define SetSSLClient(x) ((x)->umodes |= UMODE_SSLCLIENT) return set(client.mode, mode);
#define ClearSSLClient(x) ((x)->umodes &= ~UMODE_SSLCLIENT) }
#define SendWallops(x) ((x)->umodes & UMODE_WALLOP)
#define SendLocops(x) ((x)->umodes & UMODE_LOCOPS) inline void
#define SendServNotice(x) ((x)->umodes & UMODE_SERVNOTICE) clear(client &client, const mode::mode &mode)
#define SendOperwall(x) ((x)->umodes & UMODE_OPERWALL) {
#define IsSetCallerId(x) ((x)->umodes & UMODE_CALLERID) return clear(client.mode, mode);
#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 inline void
set_got_id(client &client) set_got_id(client &client)
@ -638,11 +656,7 @@ set_server(client &client)
client.handler = SERVER_HANDLER; client.handler = SERVER_HANDLER;
} }
inline bool bool is_oper(const client &);
is_oper(const client &client)
{
return client.umodes & UMODE_OPER;
}
inline void inline void
set_client(client &client) set_client(client &client)
@ -731,6 +745,35 @@ my(const client &client)
return my_connect(client) && is_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 inline void
set_mark(client &client) set_mark(client &client)
{ {

View file

@ -54,6 +54,8 @@ namespace ircd {
#define SNO_SPY 0x00000800 #define SNO_SPY 0x00000800
#define SNO_OPERSPY 0x00001000 #define SNO_OPERSPY 0x00001000
#define DEFAULT_OPER_SNOMASK SNO_GENERAL
char *construct_snobuf(unsigned int val); char *construct_snobuf(unsigned int val);
unsigned int parse_snobuf_to_mask(unsigned int val, const char *sno); unsigned int parse_snobuf_to_mask(unsigned int val, const char *sno);
unsigned int find_snomask_slot(void); 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); auto *const target_p(pair.first);
const auto &member(pair.second); 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; continue;
if (IsCapable(client_p, CLICAP_USERHOST_IN_NAMES)) 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.approved = CAN_SEND_NONOP;
moduledata.dir = MODE_QUERY; 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; return CAN_SEND_OPV;
if(my(*source_p) && hash_find_resv(chptr->name.c_str()) && 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; moduledata.approved = CAN_SEND_NO;
if(msptr == NULL) if(msptr == NULL)
@ -1181,7 +1181,7 @@ chan::channel_modes(chan *chptr, client::client *client_p)
for (i = 0; i < 256; i++) 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; continue;
if(chptr->mode.mode & mode::table[i].type) if(chptr->mode.mode & mode::table[i].type)
*mbuf++ = i; *mbuf++ = i;

View file

@ -583,7 +583,7 @@ mode::functor::hidden(client::client *source_p, chan *chptr,
int alevel, int parc, int *parn, int alevel, int parc, int *parn,
const char **parv, int *errors, int dir, char c, type mode_type) 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)) if(!(*errors & SM_ERR_NOPRIVS))
sendto_one_numeric(source_p, ERR_NOPRIVILEGES, form_str(ERR_NOPRIVILEGES)); 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, int alevel, int parc, int *parn,
const char **parv, int *errors, int dir, char c, type mode_type) 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)) if(!(*errors & SM_ERR_NOPRIVS))
sendto_one_numeric(source_p, ERR_NOPRIVILEGES, form_str(ERR_NOPRIVILEGES)); 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 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), sendto_one(source_p, form_str(ERR_ISCHANSERVICE),
me.name, source_p->name, targ_p->name, chptr->name.c_str()); 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)) if(!allow_mode_change(source_p, chptr, alevel, errors, c))
return; return;
#else #else
if(!IsOper(source_p) && !is_server(*source_p)) if(!is(*source_p, umode::OPER) && !is_server(*source_p))
{ {
if(!(*errors & SM_ERR_NOPRIVS)) if(!(*errors & SM_ERR_NOPRIVS))
sendto_one_numeric(source_p, ERR_NOPRIVILEGES, form_str(ERR_NOPRIVILEGES)); 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)) else if(is_client(*client_p))
{ {
--Count.total; --Count.total;
if(IsOper(client_p)) if(is(*client_p, umode::OPER))
--Count.oper; --Count.oper;
if(is_invisible(*client_p)) if(is(*client_p, umode::INVISIBLE))
--Count.invisi; --Count.invisi;
} }
@ -1168,7 +1168,7 @@ client::is_remote_connect(client *client_p)
return FALSE; return FALSE;
oper = find_named_person(client_p->serv->by); oper = find_named_person(client_p->serv->by);
return oper != NULL && IsOper(oper) && !my_connect(*oper); return oper != NULL && my_oper(*oper);
} }
void void
@ -1396,7 +1396,7 @@ client::exit_generic_client(client *client_p, client *source_p, client *from,
rb_dlink_node *ptr, *next_ptr; rb_dlink_node *ptr, *next_ptr;
if(IsOper(source_p)) if(is(*source_p, umode::OPER))
rb_dlinkFindDestroy(source_p, &oper_list); rb_dlinkFindDestroy(source_p, &oper_list);
sendto_common_channels_local(source_p, NOCAPS, NOCAPS, ":%s!%s@%s QUIT :%s", 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); rb_dlinkDelete(&source_p->localClient->tnode, &lclient_list);
me.serv->users.erase(source_p->lnode); me.serv->users.erase(source_p->lnode);
if(IsOper(source_p)) if(is(*source_p, umode::OPER))
rb_dlinkFindDestroy(source_p, &local_oper_list); rb_dlinkFindDestroy(source_p, &local_oper_list);
sendto_realops_snomask(SNO_CCONN, L_ALL, sendto_realops_snomask(SNO_CCONN, L_ALL,
@ -1873,11 +1873,11 @@ client::show_ip(client *source_p, client *target_p)
* to local opers. * to local opers.
*/ */
if(!ConfigFileEntry.hide_spoof_ips && if(!ConfigFileEntry.hide_spoof_ips &&
(source_p == NULL || MyOper(source_p))) (source_p == NULL || my_oper(*source_p)))
return 1; return 1;
return 0; 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; return 0;
else else
return 1; return 1;
@ -1888,7 +1888,7 @@ client::show_ip_conf(struct ConfItem *aconf, client *source_p)
{ {
if(IsConfDoSpoofIp(aconf)) if(IsConfDoSpoofIp(aconf))
{ {
if(!ConfigFileEntry.hide_spoof_ips && MyOper(source_p)) if(!ConfigFileEntry.hide_spoof_ips && my_oper(*source_p))
return 1; return 1;
return 0; return 0;
@ -1901,10 +1901,10 @@ int
client::show_ip_whowas(struct Whowas *whowas, client *source_p) client::show_ip_whowas(struct Whowas *whowas, client *source_p)
{ {
if(whowas->flags & WHOWAS_IP_SPOOFING) 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; return 0;
if(whowas->flags & WHOWAS_DYNSPOOF) if(whowas->flags & WHOWAS_DYNSPOOF)
if(!IsOper(source_p)) if(!is(*source_p, umode::OPER))
return 0; return 0;
return 1; return 1;
} }

View file

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

View file

@ -300,15 +300,15 @@ struct mode_table
/* *INDENT-OFF* */ /* *INDENT-OFF* */
static struct mode_table umode_table[] = { static struct mode_table umode_table[] = {
{"callerid", UMODE_CALLERID }, {"callerid", umode::CALLERID },
{"deaf", UMODE_DEAF }, {"deaf", umode::DEAF },
{"invisible", UMODE_INVISIBLE }, {"invisible", umode::INVISIBLE },
{"locops", UMODE_LOCOPS }, {"locops", umode::LOCOPS },
{"noforward", UMODE_NOFORWARD }, {"noforward", umode::NOFORWARD },
{"regonlymsg", UMODE_REGONLYMSG}, {"regonlymsg", umode::REGONLYMSG},
{"servnotice", UMODE_SERVNOTICE}, {"servnotice", umode::SERVNOTICE},
{"wallop", UMODE_WALLOP }, {"wallop", umode::WALLOP },
{"operwall", UMODE_OPERWALL }, {"operwall", umode::OPERWALL },
{NULL, 0} {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? /* allow opers 4 times the amount of messages as users. why 4?
* why not. :) --fl_ * why not. :) --fl_
*/ */
if(IsOper(client_p) && ConfigFileEntry.no_oper_flood) if(is(*client_p, umode::OPER) && ConfigFileEntry.no_oper_flood)
allow_read *= 4; allow_read *= 4;
/* /*
* Handle flood protection here - if we exceed our flood limit on * 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) && if(!is_any_server(*client_p) &&
(rb_linebuf_alloclen(&client_p->localClient->buf_recvq) > ConfigFileEntry.client_flood_max_lines)) (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"); exit_client(client_p, client_p, client_p, "Excess Flood");
return; return;

View file

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

View file

@ -30,6 +30,7 @@ void user_welcome(client::client *source_p);
char umodebuf[128]; char umodebuf[128];
static int orphaned_umodes = 0; static int orphaned_umodes = 0;
int user_modes[256] = { int user_modes[256] = {
/* 0x00 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0F */ /* 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 */ /* 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, /* A */
0, /* B */ 0, /* B */
0, /* C */ 0, /* C */
UMODE_DEAF, /* D */ umode::DEAF, /* D */
0, /* E */ 0, /* E */
0, /* F */ 0, /* F */
0, /* G */ 0, /* G */
@ -52,43 +53,43 @@ int user_modes[256] = {
0, /* N */ 0, /* N */
0, /* O */ 0, /* O */
0, /* P */ 0, /* P */
UMODE_NOFORWARD, /* Q */ umode::NOFORWARD, /* Q */
UMODE_REGONLYMSG, /* R */ umode::REGONLYMSG, /* R */
UMODE_SERVICE, /* S */ umode::SERVICE, /* S */
0, /* T */ 0, /* T */
0, /* U */ 0, /* U */
0, /* V */ 0, /* V */
0, /* W */ 0, /* W */
0, /* X */ 0, /* X */
0, /* Y */ 0, /* Y */
UMODE_SSLCLIENT, /* Z */ umode::SSLCLIENT, /* Z */
/* 0x5B */ 0, 0, 0, 0, 0, 0, /* 0x60 */ /* 0x5B */ 0, 0, 0, 0, 0, 0, /* 0x60 */
UMODE_ADMIN, /* a */ umode::ADMIN, /* a */
0, /* b */ 0, /* b */
0, /* c */ 0, /* c */
0, /* d */ 0, /* d */
0, /* e */ 0, /* e */
0, /* f */ 0, /* f */
UMODE_CALLERID, /* g */ umode::CALLERID, /* g */
0, /* h */ 0, /* h */
UMODE_INVISIBLE, /* i */ umode::INVISIBLE, /* i */
0, /* j */ 0, /* j */
0, /* k */ 0, /* k */
UMODE_LOCOPS, /* l */ umode::LOCOPS, /* l */
0, /* m */ 0, /* m */
0, /* n */ 0, /* n */
UMODE_OPER, /* o */ umode::OPER, /* o */
0, /* p */ 0, /* p */
0, /* q */ 0, /* q */
0, /* r */ 0, /* r */
UMODE_SERVNOTICE, /* s */ umode::SERVNOTICE, /* s */
0, /* t */ 0, /* t */
0, /* u */ 0, /* u */
0, /* v */ 0, /* v */
UMODE_WALLOP, /* w */ umode::WALLOP, /* w */
0, /* x */ 0, /* x */
0, /* y */ 0, /* y */
UMODE_OPERWALL, /* z */ umode::OPERWALL, /* z */
/* 0x7B */ 0, 0, 0, 0, 0, /* 0x7F */ /* 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 */ /* 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 */ /* 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); 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); 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)) 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++; Count.invisi++;
s_assert(!is_client(*source_p)); s_assert(!is_client(*source_p));
@ -945,7 +946,7 @@ show_other_user_mode(client::client *source_p, client::client *target_p)
*m++ = '+'; *m++ = '+';
for (i = 0; i < 128; i++) /* >= 127 is extended ascii */ 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++ = (char) i;
*m = '\0'; *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(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); show_other_user_mode(source_p, target_p);
else else
sendto_one(source_p, form_str(ERR_USERSDONTMATCH), me.name, source_p->name); 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++ = '+'; *m++ = '+';
for (i = 0; i < 128; i++) /* >= 127 is extended ascii */ 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++ = (char) i;
*m = '\0'; *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 */ /* find flags already set for user */
setflags = source_p->umodes; setflags = source_p->mode;
setsnomask = source_p->snomask; setsnomask = source_p->snomask;
/* /*
@ -1055,10 +1056,10 @@ user_mode(client::client *client_p, client::client *source_p, int parc, const ch
case 'o': case 'o':
if(what == MODE_ADD) if(what == MODE_ADD)
{ {
if(is_server(*client_p) && !IsOper(source_p)) if(is_server(*client_p) && !is_oper(*source_p))
{ {
++Count.oper; ++Count.oper;
SetOper(source_p); set_oper(*source_p);
rb_dlinkAddAlloc(source_p, &oper_list); 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 * found by Pat Szuta, Perly , perly@xnet.com
*/ */
if(!IsOper(source_p)) if(!is_oper(*source_p))
break; break;
ClearOper(source_p); clear_oper(*source_p);
Count.oper--; Count.oper--;
if(my_connect(*source_p)) if(my_connect(*source_p))
{ {
source_p->umodes &= ~ConfigFileEntry.oper_only_umodes; clear(*source_p, umode(ConfigFileEntry.oper_only_umodes));
if (!(source_p->umodes & UMODE_SERVNOTICE) && source_p->snomask != 0) if (!is(*source_p, umode::SERVNOTICE) && source_p->snomask != 0)
{ {
source_p->snomask = 0; source_p->snomask = 0;
showsnomask = true; showsnomask = true;
@ -1113,10 +1114,10 @@ user_mode(client::client *client_p, client::client *source_p, int parc, const ch
case 's': case 's':
if (my_connect(*source_p)) if (my_connect(*source_p))
{ {
if(!IsOper(source_p) if(!is_oper(*source_p)
&& (ConfigFileEntry.oper_only_umodes & UMODE_SERVNOTICE)) && (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; badflag = true;
continue; continue;
} }
@ -1131,9 +1132,9 @@ user_mode(client::client *client_p, client::client *source_p, int parc, const ch
else else
source_p->snomask = 0; source_p->snomask = 0;
if (source_p->snomask != 0) if (source_p->snomask != 0)
source_p->umodes |= UMODE_SERVNOTICE; set(*source_p, umode::SERVNOTICE);
else else
source_p->umodes &= ~UMODE_SERVNOTICE; clear(*source_p, umode::SERVNOTICE);
break; break;
} }
/* FALLTHROUGH */ /* 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((flag = user_modes[(unsigned char) *pm]))
{ {
if(my_connect(*source_p) if(my_connect(*source_p)
&& ((!IsOper(source_p) && ((!is_oper(*source_p)
&& (ConfigFileEntry.oper_only_umodes & flag)) && (ConfigFileEntry.oper_only_umodes & flag))
|| (orphaned_umodes & flag))) || (orphaned_umodes & flag)))
{ {
if (what == MODE_ADD || source_p->umodes & flag) if (what == MODE_ADD || source_p->mode & flag)
badflag = true; badflag = true;
} }
else else
{ {
if(what == MODE_ADD) if(what == MODE_ADD)
source_p->umodes |= flag; set(*source_p, umode(flag));
else else
source_p->umodes &= ~flag; clear(*source_p, umode(flag));
} }
} }
else 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 */ 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"); 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))) (!IsOperAdmin(source_p) || IsOperHiddenAdmin(source_p)))
{ {
sendto_one_notice(source_p, ":*** You need oper and admin flag for +a"); 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 */ /* 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; hdata.oldsnomask = setsnomask;
call_hook(h_umode_changed, &hdata); 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; ++Count.invisi;
if((setflags & UMODE_INVISIBLE) && !is_invisible(*source_p)) if((setflags & umode::INVISIBLE) && !is(*source_p, umode::INVISIBLE))
--Count.invisi; --Count.invisi;
/* /*
* compare new flags with old flags and send string which * 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]; flag = user_modes[i];
if((flag & old) && !(source_p->umodes & flag)) if((flag & old) && !(source_p->mode & flag))
{ {
if(what == MODE_DEL) if(what == MODE_DEL)
*m++ = (char) i; *m++ = (char) i;
@ -1248,7 +1249,7 @@ send_umode(client::client *client_p, client::client *source_p, int old, char *um
*m++ = (char) i; *m++ = (char) i;
} }
} }
else if(!(flag & old) && (source_p->umodes & flag)) else if(!(flag & old) && (source_p->mode & flag))
{ {
if(what == MODE_ADD) if(what == MODE_ADD)
*m++ = (char) i; *m++ = (char) i;
@ -1345,24 +1346,26 @@ user_welcome(client::client *source_p)
void void
oper_up(client::client *source_p, struct oper_conf *oper_p) 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; hook_data_umode_changed hdata;
SetOper(source_p); set_oper(*source_p);
if(oper_p->umodes) if(oper_p->umodes)
source_p->umodes |= oper_p->umodes; source_p->mode |= umode(oper_p->umodes);
else if(ConfigFileEntry.oper_umodes) else if(ConfigFileEntry.oper_umodes)
source_p->umodes |= ConfigFileEntry.oper_umodes; source_p->mode |= umode(ConfigFileEntry.oper_umodes);
else else
source_p->umodes |= DEFAULT_OPER_UMODES; source_p->mode |= client::mode::DEFAULT_OPER_UMODES;
if (oper_p->snomask) if (oper_p->snomask)
{ {
source_p->snomask |= 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 */ /* Only apply these if +s is already set -- jilles */
if (ConfigFileEntry.oper_snomask) 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); rb_dlinkAddAlloc(source_p, &oper_list);
if(IsOperAdmin(source_p) && !IsOperHiddenAdmin(source_p)) if(IsOperAdmin(source_p) && !IsOperHiddenAdmin(source_p))
source_p->umodes |= UMODE_ADMIN; source_p->mode |= umode::ADMIN;
if(!IsOperN(source_p)) if(!IsOperN(source_p))
source_p->snomask &= ~SNO_NCHANGE; source_p->snomask &= ~SNO_NCHANGE;
if(!IsOperOperwall(source_p)) if(!IsOperOperwall(source_p))
source_p->umodes &= ~UMODE_OPERWALL; source_p->mode &= ~umode::OPERWALL;
hdata.client = source_p; hdata.client = source_p;
hdata.oldumodes = old; hdata.oldumodes = old;
hdata.oldsnomask = oldsnomask; 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, sendto_realops_snomask(SNO_GENERAL, L_ALL,
"%s (%s!%s@%s) is now an operator", oper_p->name, source_p->name, "%s (%s!%s@%s) is now an operator", oper_p->name, source_p->name,
source_p->username, source_p->host); 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; ++Count.invisi;
if((old & UMODE_INVISIBLE) && !is_invisible(*source_p)) if((old & umode::INVISIBLE) && !is(*source_p, umode::INVISIBLE))
--Count.invisi; --Count.invisi;
send_umode_out(source_p, source_p, old); send_umode_out(source_p, source_p, old);
sendto_one_numeric(source_p, RPL_SNOMASK, form_str(RPL_SNOMASK), 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)) if(type && ((member.flags & type) == 0))
continue; continue;
if(IsDeaf(target_p)) if(is(*target_p, umode::DEAF))
continue; continue;
if(!my(*target_p)) if(!my(*target_p))
@ -616,7 +616,7 @@ sendto_channel_opmod(client::client *one, client::client *source_p,
if((member.flags & chan::CHANOP) == 0) if((member.flags & chan::CHANOP) == 0)
continue; continue;
if(IsDeaf(target_p)) if(is(*target_p, umode::DEAF))
continue; continue;
if(!my(*target_p)) 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(type == chan::ONLY_OPERS)
{ {
if (!IsOper(target_p)) if (!is(*target_p, umode::OPER))
continue; continue;
} }
else if(type && ((member.flags & type) == 0)) 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); 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; client_p = (client::client *)ptr->data;
if(client_p->umodes & flags) if (is(*client_p, umode(flags)))
_send_linebuf(client_p, &linebuf); _send_linebuf(client_p, &linebuf);
} }

View file

@ -47,7 +47,7 @@ add_target(client::client *source_p, client::client *target_p)
uint32_t hashv; uint32_t hashv;
/* can msg themselves or services without using any target slots */ /* 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; return 1;
/* special condition for those who have had PRIVMSG crippled to allow them /* 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? * 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; return 1;
hashv = fnv_hash_upper((const unsigned char *)use_id(target_p), 32); 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; uint32_t *targets;
/* can msg themselves or services without using any target slots */ /* 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; return;
hashv = fnv_hash_upper((const unsigned char *)use_id(target_p), 32); 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, ":The BAN command is not user-accessible.");
sendto_one_notice(&source, ":To ban a user from a channel, see /QUOTE HELP CMODE"); 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"); 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; return chptr;
/* User is +Q, or forwarding disabled */ /* User is +Q, or forwarding disabled */
if (IsNoForward(&source) || !ConfigChannel.use_forward) if (is(source, umode::NOFORWARD) || !ConfigChannel.use_forward)
return NULL; return NULL;
while (depth < 16) while (depth < 16)
@ -180,7 +180,7 @@ m_join(struct MsgBuf *msgbuf_p, client::client &client, client::client &source,
form_str(ERR_BADCHANNAME), name); form_str(ERR_BADCHANNAME), name);
/* dont warn for opers */ /* 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, sendto_realops_snomask(SNO_SPY, L_NETWIDE,
"User %s (%s@%s) is attempting to join locally juped channel %s (%s)", "User %s (%s@%s) is attempting to join locally juped channel %s (%s)",
source.name, source.username, source.name, source.username,
@ -194,7 +194,7 @@ m_join(struct MsgBuf *msgbuf_p, client::client &client, client::client &source,
continue; continue;
} }
if(splitmode && !IsOper(&source) && (*name != '&') && if(splitmode && !is(source, umode::OPER) && (*name != '&') &&
ConfigChannel.no_join_on_split) ConfigChannel.no_join_on_split)
{ {
sendto_one(&source, form_str(ERR_UNAVAILRESOURCE), sendto_one(&source, form_str(ERR_UNAVAILRESOURCE),
@ -254,7 +254,7 @@ m_join(struct MsgBuf *msgbuf_p, client::client &client, client::client &source,
continue; continue;
} }
if(splitmode && !IsOper(&source) && (*name != '&') && if(splitmode && !is(source, umode::OPER) && (*name != '&') &&
ConfigChannel.no_create_on_split) ConfigChannel.no_create_on_split)
{ {
sendto_one(&source, form_str(ERR_UNAVAILRESOURCE), 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; chptr = chptr2;
if(flags == 0 && if(flags == 0 &&
!IsOper(&source) && !is_exempt_spambot(source)) !is(source, umode::OPER) && !is_exempt_spambot(source))
chan::check_spambot_warning(&source, name); chan::check_spambot_warning(&source, name);
/* add the user to the channel */ /* 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))) for(const auto &pit : chans(user(source)))
{ {
if(my_connect(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); chan::check_spambot_warning(&source, NULL);
auto &msptr(pit.second); auto &msptr(pit.second);
@ -998,7 +998,7 @@ check_channel_name_loc(client::client &source, const char *name)
if(EmptyString(name)) if(EmptyString(name))
return false; return false;
if(ConfigFileEntry.disable_fake_channels && !IsOper(&source)) if(ConfigFileEntry.disable_fake_channels && !is(source, umode::OPER))
{ {
for(p = name; *p; ++p) for(p = name; *p; ++p)
if(!rfc1459::is_chan(*p) || rfc1459::is_fake_chan(*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(msptr != NULL)
{ {
if(my(source) && IsService(who)) if(my(source) && is(*who, umode::SERVICE))
{ {
sendto_one(&source, form_str(ERR_ISCHANSERVICE), sendto_one(&source, form_str(ERR_ISCHANSERVICE),
me.name, 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 /* path must contain at least 2 !'s, or bitchx falsely declares it
* local --fl * 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", "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, target_p->name, target_p->username, target_p->orighost, source.name,
source.servptr->name, source.host, source.username, 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); 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), sendto_one(&source, form_str(ERR_CHANOPRIVSNEEDED),
get_id(&me, &source), get_id(&me, &source),
@ -395,7 +395,7 @@ build_target_list(enum message_type msgtype, client::client &client,
continue; continue;
} }
if(strchr(nick, '@') || (IsOper(&source) && (*nick == '$'))) if(strchr(nick, '@') || (is(source, umode::OPER) && (*nick == '$')))
{ {
handle_special(msgtype, client, source, nick, text); handle_special(msgtype, client, source, nick, text);
continue; continue;
@ -512,7 +512,7 @@ msg_channel(enum message_type msgtype,
if((result = can_send(chptr, &source, NULL))) if((result = can_send(chptr, &source, NULL)))
{ {
if(result != chan::CAN_SEND_OPV && my(source) && if(result != chan::CAN_SEND_OPV && my(source) &&
!IsOper(&source) && !is(source, umode::OPER) &&
!add_channel_target(&source, chptr)) !add_channel_target(&source, chptr))
{ {
sendto_one(&source, form_str(ERR_TARGCHANGE), 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 && else if(chptr->mode.mode & chan::mode::OPMODERATE &&
(!(chptr->mode.mode & chan::mode::NOPRIVMSGS) || is_member(chptr, &source))) (!(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), sendto_one(&source, form_str(ERR_TARGCHANGE),
me.name, me.name,
@ -727,10 +727,10 @@ msg_client(enum message_type msgtype,
* as a way of griefing. --nenolod * as a way of griefing. --nenolod
*/ */
if(msgtype != MESSAGE_TYPE_NOTICE && if(msgtype != MESSAGE_TYPE_NOTICE &&
(IsSetCallerId(&source) || (is(source, umode::CALLERID) ||
(IsSetRegOnlyMsg(&source) && suser(user(*target_p)).empty())) && (is(source, umode::REGONLYMSG) && suser(user(*target_p)).empty())) &&
!accept_message(target_p, &source) && !accept_message(target_p, &source) &&
!IsOper(target_p)) !is(*target_p, umode::OPER))
{ {
if(rb_dlink_list_length(&source.localClient->allow_list) < if(rb_dlink_list_length(&source.localClient->allow_list) <
(unsigned long)ConfigFileEntry.max_accept) (unsigned long)ConfigFileEntry.max_accept)
@ -753,7 +753,7 @@ msg_client(enum message_type msgtype,
source.localClient->last = rb_current_time(); source.localClient->last = rb_current_time();
/* auto cprivmsg/cnotice */ /* auto cprivmsg/cnotice */
do_floodcount = !IsOper(&source) && do_floodcount = !is(source, umode::OPER) &&
!find_allowing_channel(&source, target_p); !find_allowing_channel(&source, target_p);
/* target change stuff, dont limit ctcp replies as that /* 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 */ /* XXX Controversial? allow opers always to send through a +g */
if(!is_server(source) && (IsSetCallerId(target_p) || if(!is_server(source) && (is(*target_p, umode::CALLERID) ||
(IsSetRegOnlyMsg(target_p) && suser(user(source)).empty()))) (is(*target_p, umode::REGONLYMSG) && suser(user(source)).empty())))
{ {
/* Here is the anti-flood bot/spambot code -db */ /* 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); add_reply_target(target_p, &source);
sendto_one(target_p, ":%s!%s@%s %s %s :%s", sendto_one(target_p, ":%s!%s@%s %s %s :%s",
@ -829,7 +829,7 @@ msg_client(enum message_type msgtype,
source.username, source.username,
source.host, cmdname[msgtype], target_p->name, text); 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) if (msgtype != MESSAGE_TYPE_NOTICE)
sendto_one_numeric(&source, ERR_NONONREG, 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. * and msg user@server.
* -- jilles * -- 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()) 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; return;
} }
if(!IsOper(&source)) if(!is(source, umode::OPER))
{ {
if(strchr(nick, '%') || (strncmp(nick, "opers", 5) == 0)) 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) * Armin, 8Jun90 (gruner@informatik.tu-muenchen.de)
*/ */
if(IsOper(&source) && *nick == '$') if(is(source, umode::OPER) && *nick == '$')
{ {
if((*(nick + 1) == '$' || *(nick + 1) == '#')) if((*(nick + 1) == '$' || *(nick + 1) == '#'))
nick++; nick++;
else if(MyOper(&source)) else if(my_oper(source))
{ {
sendto_one(&source, sendto_one(&source,
":%s NOTICE %s :The command %s %s is no longer supported, please use $%s", ":%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; break;
case MAPI_ORIGIN_CORE: case MAPI_ORIGIN_CORE:
origin = "builtin"; origin = "builtin";
display = IsOper(&source); display = is(source, umode::OPER);
break; break;
default: default:
origin = "unknown"; origin = "unknown";
display = IsOper(&source); display = is(source, umode::OPER);
break; break;
} }

View file

@ -260,7 +260,7 @@ ms_nick(struct MsgBuf *msgbuf_p, client::client &client, client::client &source,
nick = parc > 1 ? parv[1] : "?"; nick = parc > 1 ? parv[1] : "?";
server = parc > 7 ? parv[7] : "?"; 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?)", "Link %s cancelled, TS5 nickname %s on %s introduced (old server?)",
client.name, nick, server); client.name, nick, server);
sendto_server(NULL, NULL, CAP_TS6, NOCAPS, 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->last_nick_change = rb_current_time();
source.localClient->number_of_nick_changes++; 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) source.localClient->number_of_nick_changes > ConfigFileEntry.max_nick_changes)
{ {
sendto_one(&source, form_str(ERR_NICKTOOFAST), 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]; flag = user_modes[(unsigned char) *m];
if(flag & UMODE_SERVICE) if(flag & umode::SERVICE)
{ {
int hit = 0; int hit = 0;
rb_dlink_node *ptr; rb_dlink_node *ptr;
@ -1068,18 +1068,18 @@ register_client(client::client &client, client::client *server,
} }
/* increment +i count if theyre invis */ /* increment +i count if theyre invis */
if(!(source->umodes & UMODE_INVISIBLE) && (flag & UMODE_INVISIBLE)) if(!(source->mode & umode::INVISIBLE) && (flag & umode::INVISIBLE))
Count.invisi++; Count.invisi++;
/* increment opered count if theyre opered */ /* increment opered count if theyre opered */
if(!(source->umodes & UMODE_OPER) && (flag & UMODE_OPER)) if(!(source->mode & umode::OPER) && (flag & umode::OPER))
Count.oper++; Count.oper++;
source->umodes |= flag; source->mode |= umode(flag);
m++; m++;
} }
if(IsOper(source) && !IsService(source)) if(is(*source, umode::OPER) && !is(*source, umode::SERVICE))
rb_dlinkAddAlloc(source, &oper_list); rb_dlinkAddAlloc(source, &oper_list);
set_remote_client(*source); set_remote_client(*source);
@ -1158,7 +1158,7 @@ static void bad_nickname(client::client &client, const char *nick)
{ {
char squitreason[100]; char squitreason[100];
sendto_wallops_flags(UMODE_WALLOP, &me, sendto_wallops_flags(umode::WALLOP, &me,
"Squitting %s because of bad nickname %s (NICKLEN mismatch?)", "Squitting %s because of bad nickname %s (NICKLEN mismatch?)",
client.name, nick); client.name, nick);
sendto_server(NULL, NULL, CAP_TS6, NOCAPS, 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; 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); 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; comment = reason;
} }
if(!IsOper(&source) && if(!is(source, umode::OPER) &&
(source.localClient->firsttime + ConfigFileEntry.anti_spam_exit_message_time) > (source.localClient->firsttime + ConfigFileEntry.anti_spam_exit_message_time) >
rb_current_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? */ /* collision on the SID? */
if((target_p = find_id(parv[3])) != NULL) 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", "Link %s cancelled, SID %s for server %s already in use by %s",
client.name, parv[3], parv[1], target_p->name); client.name, parv[3], parv[1], target_p->name);
sendto_server(NULL, NULL, CAP_TS6, NOCAPS, 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)) else if(my_connect(*target_p))
{ {
sendto_wallops_flags(UMODE_WALLOP, &me, sendto_wallops_flags(umode::WALLOP, &me,
"Remote SQUIT %s from %s (%s)", "Remote SQUIT %s from %s (%s)",
target_p->name, source.name, comment); 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 */ /* nick, must be +S */
target_p = client::find_named_person(aptr->target.c_str()); 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; 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. */ /* Rate limit this because it is sent to common channels. */
if (my(source)) if (my(source))
{ {
if(!IsOper(&source) && if(!is(source, umode::OPER) &&
source.localClient->next_away > rb_current_time()) source.localClient->next_away > rb_current_time())
{ {
sendto_one(&source, form_str(RPL_LOAD2HI), 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; int len = 0;
/* if theyre an oper, reprint oper motd and ignore */ /* 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); sendto_one(&source, form_str(RPL_YOUREOPER), me.name, source.name);
send_oper_motd(&source); send_oper_motd(&source);

View file

@ -122,7 +122,7 @@ do_chghost(client::client &source, client::client *target_p,
} }
if (my(source)) if (my(source))
sendto_one_notice(&source, ":Changed hostname for %s to %s", target_p->name, target_p->host); 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); 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; 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 * 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", "Remote CONNECT %s %d from %s",
parv[1], port, source.name); parv[1], port, source.name);
sendto_server(NULL, NULL, CAP_TS6, NOCAPS, 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; client::client *target_p;
if(!IsOper(&source) || parc < 2 || EmptyString(parv[1])) if(!is(source, umode::OPER) || parc < 2 || EmptyString(parv[1]))
return; return;
/* we cant etrace remote clients.. we shouldnt even get sent them */ /* 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), sendto_one(&source, form_str(RPL_ETRACE),
me.name, source.name, me.name, source.name,
IsOper(target_p) ? "Oper" : "User", is(*target_p, umode::OPER) ? "Oper" : "User",
get_client_class(target_p), get_client_class(target_p),
target_p->name, target_p->username, target_p->host, target_p->name, target_p->username, target_p->host,
show_ip(&source, target_p) ? target_p->sockhost : "255.255.255.255", 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)) if(!show_ip(&source, target_p))
sendto_one(&source, form_str(RPL_ETRACEFULL), sendto_one(&source, form_str(RPL_ETRACEFULL),
me.name, source.name, me.name, source.name,
IsOper(target_p) ? "Oper" : "User", is(*target_p, umode::OPER) ? "Oper" : "User",
get_client_class(target_p), get_client_class(target_p),
target_p->name, target_p->username, target_p->host, target_p->name, target_p->username, target_p->host,
"255.255.255.255", "<hidden> <hidden>", target_p->info); "255.255.255.255", "<hidden> <hidden>", target_p->info);
else else
sendto_one(&source, form_str(RPL_ETRACEFULL), sendto_one(&source, form_str(RPL_ETRACEFULL),
me.name, source.name, me.name, source.name,
IsOper(target_p) ? "Oper" : "User", is(*target_p, umode::OPER) ? "Oper" : "User",
get_client_class(target_p), get_client_class(target_p),
target_p->name, target_p->username, target_p->name, target_p->username,
target_p->host, target_p->sockhost, 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), sendto_one(&source, form_str(RPL_ETRACE),
me.name, source.name, me.name, source.name,
IsOper(target_p) ? "Oper" : "User", is(*target_p, umode::OPER) ? "Oper" : "User",
/* class field -- pretend its server.. */ /* class field -- pretend its server.. */
target_p->servptr->name, target_p->servptr->name,
target_p->name, target_p->username, target_p->host, 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), sendto_one(&source, form_str(RPL_ETRACE),
me.name, source.name, me.name, source.name,
IsOper(target_p) ? "Oper" : "User", is(*target_p, umode::OPER) ? "Oper" : "User",
/* class field -- pretend its server.. */ /* class field -- pretend its server.. */
target_p->servptr->name, target_p->servptr->name,
target_p->name, target_p->username, target_p->host, 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 (!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."); sendto_one_notice(&source, ":You can't deoper someone who isn't an oper.");
return; return;
@ -115,7 +115,7 @@ do_grant(client::client &source, client::client *target_p, const char *new_privs
if (!dodeoper) 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_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); 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); info_spy(source);
send_info_text(source); send_info_text(source);
if(IsOper(&source)) if(is(source, umode::OPER))
{ {
send_conf_options(source); send_conf_options(source);
sendto_one_numeric(&source, RPL_INFO, ":%s", 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(my_connect(source))
{ {
if (ConfigFileEntry.target_change && !IsOper(&source) && if (ConfigFileEntry.target_change && !is(source, umode::OPER) &&
!find_allowing_channel(&source, target_p) && !find_allowing_channel(&source, target_p) &&
!add_target(&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(my_connect(*target_p))
{ {
if(!IsOper(&source) && (IsSetCallerId(target_p) || if(!is(source, umode::OPER) && (is(*target_p, umode::CALLERID) ||
(IsSetRegOnlyMsg(target_p) && !suser(user(source))[0])) && (is(*target_p, umode::REGONLYMSG) && !suser(user(source))[0])) &&
!accept_message(&source, target_p)) !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, sendto_one_numeric(&source, ERR_NONONREG,
form_str(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 user per knock_delay
* allow one knock per channel per knock_delay_channel * 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()) (source.localClient->last_knock + ConfigChannel.knock_delay) > rb_current_time())
{ {
sendto_one(&source, form_str(ERR_TOOMANYKNOCK), 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 else
{ {
if(!IsOper(&source)) if(!is(source, umode::OPER))
{ {
if((last_used + ConfigFileEntry.pace_wait) > rb_current_time()) if((last_used + ConfigFileEntry.pace_wait) > rb_current_time())
{ {
@ -132,7 +132,7 @@ names_global(client::client &source)
target_p = (client::client *)ptr->data; target_p = (client::client *)ptr->data;
dont_show = false; dont_show = false;
if(!is_person(*target_p) || is_invisible(*target_p)) if(!is_person(*target_p) || is(*target_p, umode::INVISIBLE))
continue; continue;
/* we want to show -i clients that are either: /* 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]; name = parv[1];
password = parv[2]; password = parv[2];
if(IsOper(&source)) if(is(source, umode::OPER))
{ {
sendto_one(&source, form_str(RPL_YOUREOPER), me.name, source.name); sendto_one(&source, form_str(RPL_YOUREOPER), me.name, source.name);
cache::motd::send_oper(&source); cache::motd::send_oper(&source);
@ -85,7 +85,7 @@ m_oper(struct MsgBuf *msgbuf_p, client::client &client, client::client &source,
return; 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)); sendto_one_numeric(&source, ERR_NOOPERHOST, form_str(ERR_NOOPERHOST));
ilog(L_FOPER, "FAILED OPER (%s) by (%s!%s@%s) (%s) -- requires SSL/TLS", 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'; buf[0] = '\0';
if (target_p->localClient->privset) if (target_p->localClient->privset)
rb_strlcat(buf, target_p->localClient->privset->privs, sizeof buf); rb_strlcat(buf, target_p->localClient->privset->privs, sizeof buf);
if (IsOper(target_p)) if (is(*target_p, umode::OPER))
{ {
if (buf[0] != '\0') if (buf[0] != '\0')
rb_strlcat(buf, " ", sizeof buf); 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; client::client *target_p;
if (!IsOper(&source) || parc < 2 || EmptyString(parv[1])) if (!is(source, umode::OPER) || parc < 2 || EmptyString(parv[1]))
return; return;
/* we cannot show privs for remote clients */ /* we cannot show privs for remote clients */

View file

@ -76,7 +76,7 @@ sasl_visible(client::client *client)
if (ConfigFileEntry.sasl_service) if (ConfigFileEntry.sasl_service)
agent_p = find_named_client(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 * 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); 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); sendto_one(&source, form_str(ERR_SASLABORTED), me.name, EmptyString(source.name) ? "*" : source.name);
return; 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 /* We only accept messages from SASL agents; these must have umode +S
* (so the server must be listed in a service{} block). * (so the server must be listed in a service{} block).
*/ */
if(!IsService(agent_p)) if(!is(*agent_p, umode::SERVICE))
return; return;
/* Reject if someone has already answered. */ /* 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 else
sockhost = target_p->sockhost; sockhost = target_p->sockhost;
working_umodes = target_p->umodes; working_umodes = target_p->mode;
/* require that we have the allowed umodes... */ /* require that we have the allowed umodes... */
if ((working_umodes & allowed_umodes) != 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++) for (i = 0; i < 128; i++)
{ {
if (target_p->umodes & user_modes[i]) if (is(*target_p, umode(user_modes[i])))
*m++ = (char) i; *m++ = (char) i;
} }

View file

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

View file

@ -97,7 +97,7 @@ m_topic(struct MsgBuf *msgbuf_p, client::client &client, client::client &source,
if (my(source) && if (my(source) &&
!is_chanop(msptr) && !is_chanop(msptr) &&
!is_voiced(msptr) && !is_voiced(msptr) &&
!IsOper(&source) && !is(source, umode::OPER) &&
!add_channel_target(&source, chptr)) !add_channel_target(&source, chptr))
{ {
sendto_one(&source, form_str(ERR_TARGCHANGE), 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 /* giving this out with flattened links defeats the
* object --fl * object --fl
*/ */
if(IsOper(&source) || is_exempt_shide(source) || if(is(source, umode::OPER) || is_exempt_shide(source) ||
!ConfigServerHide.flatten_links) !ConfigServerHide.flatten_links)
sendto_one_numeric(&source, RPL_TRACELINK, sendto_one_numeric(&source, RPL_TRACELINK,
form_str(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), /* give non-opers a limited trace output of themselves (if local),
* opers and servers (if no shide) --fl * opers and servers (if no shide) --fl
*/ */
if(!IsOper(&source)) if(!is(source, umode::OPER))
{ {
if(my(source)) 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; target_p = (client::client *)ptr->data;
/* dont show invisible users to remote opers */ /* 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; continue;
if(!doall && wilds && !match(tname, target_p->name)) if(!doall && wilds && !match(tname, target_p->name))
continue; continue;
/* remote opers may not see invisible normal users */ /* remote opers may not see invisible normal users */
if(dow && !my_connect(source) && !IsOper(target_p) && if(dow && !my_connect(source) && !is(*target_p, umode::OPER) &&
is_invisible(*target_p)) is(*target_p, umode::INVISIBLE))
continue; continue;
cnt = report_this_status(source, target_p); 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: case client::status::CLIENT:
{ {
sendto_one_numeric(&source, sendto_one_numeric(&source,
IsOper(target_p) ? RPL_TRACEOPERATOR : RPL_TRACEUSER, is(*target_p, umode::OPER) ? RPL_TRACEOPERATOR : RPL_TRACEUSER,
IsOper(target_p) ? form_str(RPL_TRACEOPERATOR) : form_str(RPL_TRACEUSER), is(*target_p, umode::OPER) ? form_str(RPL_TRACEOPERATOR) : form_str(RPL_TRACEUSER),
class_name, name, class_name, name,
show_ip(&source, target_p) ? ip : empty_sockhost, show_ip(&source, target_p) ? ip : empty_sockhost,
(unsigned long)(rb_current_time() - target_p->localClient->lasttime), (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 ", rl = sprintf(response, "%s%s=%c%s@%s ",
target_p->name, target_p->name,
IsOper(target_p) ? "*" : "", is(*target_p, umode::OPER) ? "*" : "",
(away(user(*target_p)).size())? '-' : '+', (away(user(*target_p)).size())? '-' : '+',
target_p->username, target_p->username,
target_p->sockhost); 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 ", rl = sprintf(response, "%s%s=%c%s@%s ",
target_p->name, target_p->name,
IsOper(target_p) ? "*" : "", is(*target_p, umode::OPER) ? "*" : "",
(away(user(*target_p)).size())? '-' : '+', (away(user(*target_p)).size())? '-' : '+',
target_p->username, target_p->host); 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; 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", sendto_server(&client, NULL, CAP_TS6, NOCAPS, ":%s OPERWALL :%s",
use_id(&source), parv[1]); 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", sendto_server(&client, NULL, CAP_TS6, NOCAPS, ":%s OPERWALL :%s",
use_id(&source), parv[1]); 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 - "; 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", sendto_server(&client, NULL, CAP_TS6, NOCAPS, ":%s WALLOPS :%s",
use_id(&source), parv[1]); 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(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), sendto_one(&source, form_str(RPL_LOAD2HI),
me.name, source.name, "WHO"); me.name, source.name, "WHO");
@ -202,11 +202,11 @@ m_who(struct MsgBuf *msgbuf_p, client::client &client, client::client &source, i
/* '/who nick' */ /* '/who nick' */
if(((target_p = client::find_named_person(mask)) != NULL) && if(((target_p = client::find_named_person(mask)) != NULL) &&
(!server_oper || IsOper(target_p))) (!server_oper || is(*target_p, umode::OPER)))
{ {
int isinvis = 0; int isinvis = 0;
isinvis = is_invisible(*target_p); isinvis = is(*target_p, umode::INVISIBLE);
for(const auto &pit : chans(user(*target_p))) for(const auto &pit : chans(user(*target_p)))
{ {
chptr = pit.first; chptr = pit.first;
@ -238,7 +238,7 @@ m_who(struct MsgBuf *msgbuf_p, client::client &client, client::client &source, i
flood_endgrace(&source); flood_endgrace(&source);
/* it has to be a global who at this point, limit it */ /* 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)) 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 &target(pit.first);
const auto &member(pit.second); const auto &member(pit.second);
if(!is_invisible(*target) || is_marked(*target)) if(!is(*target, umode::INVISIBLE) || is_marked(*target))
continue; continue;
if(server_oper && !IsOper(target)) if(server_oper && !is(*target, umode::OPER))
continue; continue;
set_mark(*target); set_mark(*target);
@ -304,7 +304,7 @@ who_common_channel(client::client &source, chan::chan *chptr,
if((mask == NULL) || if((mask == NULL) ||
match(mask, target->name) || match(mask, target->username) || match(mask, target->name) || match(mask, target->username) ||
match(mask, target->host) || match(mask, target->servptr->name) || 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)) match(mask, target->info))
{ {
do_who(source, target, chptr, nullptr, fmt); 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)) if(!is_person(*target_p))
continue; continue;
if(is_invisible(*target_p) && !operspy) if(is(*target_p, umode::INVISIBLE) && !operspy)
{ {
clear_mark(*target_p); clear_mark(*target_p);
continue; continue;
} }
if(server_oper && !IsOper(target_p)) if(server_oper && !is(*target_p, umode::OPER))
continue; continue;
if(maxmatches > 0) if(maxmatches > 0)
@ -375,7 +375,7 @@ who_global(client::client &source, const char *mask, int server_oper, int opersp
if(!mask || if(!mask ||
match(mask, target_p->name) || match(mask, target_p->username) || match(mask, target_p->name) || match(mask, target_p->username) ||
match(mask, target_p->host) || match(mask, target_p->servptr->name) || 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)) match(mask, target_p->info))
{ {
do_who(source, target_p, nullptr, nullptr, fmt); 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); const auto &target(pit.first);
auto &member(pit.second); auto &member(pit.second);
if(server_oper && !IsOper(target)) if(server_oper && !is(*target, umode::OPER))
continue; continue;
if(source_member || !is_invisible(*target)) if(source_member || !is(*target, umode::INVISIBLE))
do_who(source, target, chptr, &member, fmt); 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; const char *q;
sprintf(status, "%c%s%s", 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) if (fmt->fields == 0)
sendto_one(&source, form_str(RPL_WHOREPLY), me.name, sendto_one(&source, form_str(RPL_WHOREPLY), me.name,
source.name, msptr ? chan->name.c_str() : "*", source.name, msptr ? chan->name.c_str() : "*",
target_p->username, target_p->host, target_p->username, target_p->host,
target_p->servptr->name, target_p->name, status, 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); target_p->info);
else else
{ {
@ -501,7 +501,7 @@ do_who(client::client &source, client::client *target_p, chan::chan *chan, chan:
if (fmt->fields & FIELD_FLAGS) if (fmt->fields & FIELD_FLAGS)
append_format(str, sizeof str, &pos, " %s", status); append_format(str, sizeof str, &pos, " %s", status);
if (fmt->fields & FIELD_HOP) 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) if (fmt->fields & FIELD_IDLE)
append_format(str, sizeof str, &pos, " %d", (int)(my(*target_p) ? rb_current_time() - target_p->localClient->last : 0)); append_format(str, sizeof str, &pos, " %d", (int)(my(*target_p) ? rb_current_time() - target_p->localClient->last : 0));
if (fmt->fields & FIELD_ACCOUNT) if (fmt->fields & FIELD_ACCOUNT)

View file

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