0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-07-03 17:28:18 +02:00

ircd: Improve/rename channel name check related.

This commit is contained in:
Jason Volk 2016-08-18 16:53:12 -07:00
parent 7d44e271f7
commit 125e3b21f2
14 changed files with 44 additions and 46 deletions

View file

@ -59,7 +59,7 @@ mo_omode(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source
}
/* Now, try to find the channel in question */
if(!rfc1459::is_chan_prefix(parv[1][0]) || !chan::check_channel_name(parv[1]))
if(!rfc1459::is_chan_prefix(parv[1][0]) || !chan::valid_name(parv[1]))
{
sendto_one_numeric(source_p, ERR_BADCHANNAME,
form_str(ERR_BADCHANNAME), parv[1]);

View file

@ -105,6 +105,11 @@ bool can_send_banned(const membership &);
bool can_send_banned(const membership *const &);
const char *find_status(const membership *const &msptr, const int &combine);
bool has_prefix(const char *const &name);
bool has_prefix(const std::string &name);
bool valid_name(const char *const &name);
bool valid_name(const std::string &name);
struct chan
{
std::string name;
@ -140,8 +145,6 @@ struct chan
~chan() noexcept;
};
bool is_name(const char *const &name);
bool is_secret(const chan &);
bool is_secret(const chan *const &);
bool is_hidden(const chan &);
@ -170,7 +173,6 @@ void remove_user_from_channel(membership *);
void remove_user_from_channels(client *);
void invalidate_bancache_user(client *);
void free_channel_list(rb_dlink_list *);
bool check_channel_name(const char *name);
void channel_member_names(chan *, client *, int show_eon);
void del_invite(chan *, client *who);
const char *channel_modes(chan *, client *who);
@ -263,9 +265,27 @@ can_show(const chan *const &c, const client *const &client)
}
inline bool
is_name(const char *const &name)
has_prefix(const char *const &name)
{
return name && (*name == '#' || *name == '&');
return name && rfc1459::is_chan_prefix(name[0]);
}
inline bool
has_prefix(const std::string &name)
{
return !name.empty() && rfc1459::is_chan_prefix(name[0]);
}
inline bool
valid_name(const char *const &name)
{
return name && name[0] && std::all_of(name, name + strlen(name), rfc1459::is_chan);
}
inline bool
valid_name(const std::string &name)
{
return !name.empty() && std::all_of(begin(name), end(name), rfc1459::is_chan);
}
inline bool

View file

@ -182,7 +182,7 @@ bandb_handle_ban(char *parv[], int parc)
break;
case 'R':
if(chan::is_name(aconf->host))
if(chan::has_prefix(aconf->host))
aconf->status = CONF_RESV_CHANNEL;
else
aconf->status = CONF_RESV_NICK;

View file

@ -345,28 +345,6 @@ chan::invalidate_bancache_user(client *client_p)
}
}
/* check_channel_name()
*
* input - channel name
* output - true if valid channel name, else false
* side effects -
*/
bool
chan::check_channel_name(const char *name)
{
s_assert(name != NULL);
if(name == NULL)
return false;
for (; *name; ++name)
{
if(!rfc1459::is_chan(*name))
return false;
}
return true;
}
/* free_channel_list()
*
* input - rb_dlink list to free

View file

@ -511,7 +511,7 @@ check_forward(struct Client *source_p, chan::chan *chptr,
chan::chan *targptr = NULL;
chan::membership *msptr;
if(!chan::check_channel_name(forward) ||
if(!chan::valid_name(forward) ||
(MyClient(source_p) && (strlen(forward) > LOC_CHANNELLEN || hash_find_resv(forward))))
{
sendto_one_numeric(source_p, ERR_BADCHANNAME, form_str(ERR_BADCHANNAME), forward);

View file

@ -94,7 +94,7 @@ ms_ban(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p
stype = "X-Line";
break;
case 'R':
ntype = chan::is_name(parv[3]) ? CONF_RESV_CHANNEL :
ntype = chan::has_prefix(parv[3]) ? CONF_RESV_CHANNEL :
CONF_RESV_NICK;
stype = "RESV";
break;

View file

@ -165,7 +165,7 @@ m_join(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p
}
/* check it begins with # or &, and local chans are disabled */
else if(!chan::is_name(name) ||
else if(!chan::has_prefix(name) ||
( ConfigChannel.disable_local_channels && name[0] == '&'))
{
sendto_one_numeric(source_p, ERR_NOSUCHCHANNEL,
@ -404,7 +404,7 @@ ms_join(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_
if(parc < 4)
return;
if(!chan::is_name(parv[2]) || !chan::check_channel_name(parv[2]))
if(!chan::has_prefix(parv[2]) || !chan::valid_name(parv[2]))
return;
/* joins for local channels cant happen. */
@ -529,7 +529,7 @@ ms_sjoin(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source
if(parc < 5)
return;
if(!chan::is_name(parv[2]) || !chan::check_channel_name(parv[2]))
if(!chan::has_prefix(parv[2]) || !chan::valid_name(parv[2]))
return;
/* SJOIN's for local channels can't happen. */

View file

@ -90,7 +90,7 @@ m_mode(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p
return;
}
if(!chan::check_channel_name(dest))
if(!chan::valid_name(dest))
{
sendto_one_numeric(source_p, ERR_BADCHANNAME, form_str(ERR_BADCHANNAME), parv[1]);
return;
@ -157,7 +157,7 @@ ms_tmode(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source
chan::membership *msptr;
/* Now, try to find the channel in question */
if(!rfc1459::is_chan_prefix(parv[2][0]) || !chan::check_channel_name(parv[2]))
if(!rfc1459::is_chan_prefix(parv[2][0]) || !chan::valid_name(parv[2]))
{
sendto_one_numeric(source_p, ERR_BADCHANNAME, form_str(ERR_BADCHANNAME), parv[2]);
return;
@ -194,7 +194,7 @@ ms_mlock(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source
chan::chan *chptr = NULL;
/* Now, try to find the channel in question */
if(!rfc1459::is_chan_prefix(parv[2][0]) || !chan::check_channel_name(parv[2]))
if(!rfc1459::is_chan_prefix(parv[2][0]) || !chan::valid_name(parv[2]))
{
sendto_one_numeric(source_p, ERR_BADCHANNAME, form_str(ERR_BADCHANNAME), parv[2]);
return;
@ -271,7 +271,7 @@ ms_bmask(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source
int mems;
struct Client *fakesource_p;
if(!rfc1459::is_chan_prefix(parv[2][0]) || !chan::check_channel_name(parv[2]))
if(!rfc1459::is_chan_prefix(parv[2][0]) || !chan::valid_name(parv[2]))
return;
if((chptr = find_channel(parv[2])) == NULL)

View file

@ -77,7 +77,7 @@ m_invite(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source
return;
}
if(chan::check_channel_name(parv[2]) == 0)
if(chan::valid_name(parv[2]) == 0)
{
sendto_one_numeric(source_p, ERR_BADCHANNAME,
form_str(ERR_BADCHANNAME),

View file

@ -124,7 +124,7 @@ m_list(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p
return;
}
if (parc < 2 || chan::is_name(parv[1]))
if (parc < 2 || chan::has_prefix(parv[1]))
{
/* pace this due to the sheer traffic involved */
if (((last_used + ConfigFileEntry.pace_wait) > rb_current_time()))
@ -172,7 +172,7 @@ mo_list(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_
}
/* Single channel. */
if (args && chan::is_name(args))
if (args && chan::has_prefix(args))
{
safelist_channel_named(source_p, args, operspy);
return;

View file

@ -60,7 +60,7 @@ m_names(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_
if((s = strchr(p, ',')))
*s = '\0';
if(!chan::check_channel_name(p))
if(!chan::valid_name(p))
{
sendto_one_numeric(source_p, ERR_BADCHANNAME,
form_str(ERR_BADCHANNAME),

View file

@ -184,7 +184,7 @@ parse_resv(struct Client *source_p, const char *name, const char *reason, int te
(temp_time > 0) ? SHARED_TRESV : SHARED_PRESV))
return;
if(chan::is_name(name))
if(chan::has_prefix(name))
{
if(hash_find_resv(name))
{
@ -490,7 +490,7 @@ remove_resv(struct Client *source_p, const char *name, int propagated)
rb_dlink_node *ptr;
time_t now;
if(chan::is_name(name))
if(chan::has_prefix(name))
{
if((aconf = hash_find_resv(name)) == NULL)
{

View file

@ -68,7 +68,7 @@ mo_testline(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *sou
mask = LOCAL_COPY(parv[1]);
if (chan::is_name(mask))
if (chan::has_prefix(mask))
{
resv_p = hash_find_resv(mask);
if (resv_p != NULL)

View file

@ -169,7 +169,7 @@ m_who(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p,
}
/* '/who #some_channel' */
if(chan::is_name(mask))
if(chan::has_prefix(mask))
{
/* List all users on a given channel */
chptr = find_channel(parv[1] + operspy);