projects
/
ircu2.10.12-pk.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
don't allow users to change their nick if the new nick is banned in a channel the...
[ircu2.10.12-pk.git]
/
ircd
/
channel.c
diff --git
a/ircd/channel.c
b/ircd/channel.c
index 30b9f1de6d3864cf78b71756416c9190184b3d81..868a82f052c7d94496dff10b62c2815dafd3d239 100644
(file)
--- a/
ircd/channel.c
+++ b/
ircd/channel.c
@@
-374,7
+374,7
@@
struct Membership* find_channel_member(struct Client* cptr, struct Channel* chpt
* @param[in] banlist The list of bans to test.
* @return Pointer to a matching ban, or NULL if none exit.
*/
* @param[in] banlist The list of bans to test.
* @return Pointer to a matching ban, or NULL if none exit.
*/
-st
ruct Ban *find_ban(struct Client *cptr
, struct Ban *banlist)
+st
atic struct Ban *find_ban_with_nick(struct Client *cptr, const char *nick
, struct Ban *banlist)
{
char nu[NICKLEN + USERLEN + 2];
char tmphost[HOSTLEN + 1];
{
char nu[NICKLEN + USERLEN + 2];
char tmphost[HOSTLEN + 1];
@@
-386,7
+386,7
@@
struct Ban *find_ban(struct Client *cptr, struct Ban *banlist)
/* Build nick!user and alternate host names. */
ircd_snprintf(0, nu, sizeof(nu), "%s!%s",
/* Build nick!user and alternate host names. */
ircd_snprintf(0, nu, sizeof(nu), "%s!%s",
-
cli_name(cptr
), cli_user(cptr)->username);
+
(nick ? nick : cli_name(cptr)
), cli_user(cptr)->username);
ircd_ntoa_r(iphost, &cli_ip(cptr));
/* Check for all three possible hosts:
ircd_ntoa_r(iphost, &cli_ip(cptr));
/* Check for all three possible hosts:
@@
-439,6
+439,10
@@
struct Ban *find_ban(struct Client *cptr, struct Ban *banlist)
return found;
}
return found;
}
+struct Ban *find_ban(struct Client *cptr, struct Ban *banlist) {
+ return find_ban_with_nick(cptr, NULL, banlist);
+}
+
/**
* This function returns true if the user is banned on the said channel.
* This function will check the ban cache if applicable, otherwise will
/**
* This function returns true if the user is banned on the said channel.
* This function will check the ban cache if applicable, otherwise will
@@
-462,6
+466,13
@@
static int is_banned(struct Membership* member)
}
}
}
}
+static int is_banned_with_nick(struct Membership* member, const char *nick) {
+ if (find_ban_with_nick(member->user, nick, member->channel->banlist))
+ return 1;
+ else
+ return 0;
+}
+
/** add a user to a channel.
* adds a user to a channel by adding another link to the channels member
* chain.
/** add a user to a channel.
* adds a user to a channel by adding another link to the channels member
* chain.
@@
-796,11
+807,12
@@
int client_can_send_to_channel(struct Client *cptr, struct Channel *chptr, int r
* the name of the first channel banned on.
*
* @param cptr The client
* the name of the first channel banned on.
*
* @param cptr The client
+ * @param new_nick The new nick of the client
*
* @returns the name of the first channel banned on, or NULL if the user
* can change nicks.
*/
*
* @returns the name of the first channel banned on, or NULL if the user
* can change nicks.
*/
-const char* find_no_nickchange_channel(struct Client* cptr)
+const char* find_no_nickchange_channel(struct Client* cptr
, const char *new_nick
)
{
if (MyUser(cptr)) {
struct Membership* member;
{
if (MyUser(cptr)) {
struct Membership* member;
@@
-810,7
+822,7
@@
const char* find_no_nickchange_channel(struct Client* cptr)
continue;
if ((member->channel->mode.mode & MODE_MODERATED)
|| (member->channel->mode.mode & MODE_REGONLY && !IsAccount(cptr))
continue;
if ((member->channel->mode.mode & MODE_MODERATED)
|| (member->channel->mode.mode & MODE_REGONLY && !IsAccount(cptr))
- || is_banned(member))
+ || is_banned(member)
|| (new_nick && is_banned_with_nick(member, new_nick))
)
return member->channel->chname;
}
}
return member->channel->chname;
}
}