fixed private channel exploit
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@1929 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
c0c7db487b
commit
dc361e4037
1 changed files with 29 additions and 3 deletions
|
@ -5,6 +5,7 @@
|
||||||
// need option for whois on receiving PM
|
// need option for whois on receiving PM
|
||||||
// bug: setting channel to private, crashes fte when trying to join it.
|
// bug: setting channel to private, crashes fte when trying to join it.
|
||||||
// http://www.mirc.net/raws/
|
// http://www.mirc.net/raws/
|
||||||
|
// http://www.ircle.com/reference/commands.shtml
|
||||||
|
|
||||||
|
|
||||||
#include "../plugin.h"
|
#include "../plugin.h"
|
||||||
|
@ -1253,12 +1254,17 @@ int IRC_ClientFrame(ircclient_t *irc)
|
||||||
}
|
}
|
||||||
else if (!strncmp(msg, "353 ", 4)) //the names of people on a channel
|
else if (!strncmp(msg, "353 ", 4)) //the names of people on a channel
|
||||||
{
|
{
|
||||||
char *eq = strstr(msg, "=");
|
char *eq = strstr(msg, "="); // BAD SPIKE!! = is normal channel :(
|
||||||
char *eq2 = strstr(msg, "@"); // @ means the channel is +s (secret)
|
char *eq2 = strstr(msg, "@"); // @ means the channel is +s (secret)
|
||||||
|
char *eq3 = strstr(msg, "*"); // * means the channel is +p (private) rather redundant...
|
||||||
|
char *channeltype = strtok(var[4], " ");
|
||||||
char *channel = strtok(var[5], " ");
|
char *channel = strtok(var[5], " ");
|
||||||
char *str;
|
char *str;
|
||||||
|
|
||||||
|
|
||||||
int secret = 0;
|
int secret = 0;
|
||||||
if (eq)
|
int privatechan = 0;
|
||||||
|
if ( !strcmp(channeltype,"=") )
|
||||||
{
|
{
|
||||||
char *end;
|
char *end;
|
||||||
eq++;
|
eq++;
|
||||||
|
@ -1270,7 +1276,8 @@ int IRC_ClientFrame(ircclient_t *irc)
|
||||||
*end = '\0';
|
*end = '\0';
|
||||||
str++;
|
str++;
|
||||||
}
|
}
|
||||||
else if (eq2)
|
//else if (eq2)
|
||||||
|
else if ( !strcmp(channeltype,"@") )
|
||||||
{
|
{
|
||||||
char *end;
|
char *end;
|
||||||
|
|
||||||
|
@ -1285,6 +1292,21 @@ int IRC_ClientFrame(ircclient_t *irc)
|
||||||
*end = '\0';
|
*end = '\0';
|
||||||
str++;
|
str++;
|
||||||
}
|
}
|
||||||
|
else if ( !strcmp(channeltype,"*") )
|
||||||
|
{
|
||||||
|
char *end;
|
||||||
|
|
||||||
|
privatechan = 1;
|
||||||
|
|
||||||
|
eq3++;
|
||||||
|
str = strstr(eq3, ":");
|
||||||
|
while(*eq3 == ' ')
|
||||||
|
eq3++;
|
||||||
|
for (end = eq3; *end>' '&&*end !=':'; end++)
|
||||||
|
;
|
||||||
|
*end = '\0';
|
||||||
|
str++;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
eq = "Corrupted_Message";
|
eq = "Corrupted_Message";
|
||||||
|
@ -1307,6 +1329,10 @@ int IRC_ClientFrame(ircclient_t *irc)
|
||||||
{
|
{
|
||||||
Con_SubPrintf(channel, "%s is secret (+s)\n",channel);
|
Con_SubPrintf(channel, "%s is secret (+s)\n",channel);
|
||||||
}
|
}
|
||||||
|
else if (privatechan == 1)
|
||||||
|
{
|
||||||
|
Con_SubPrintf(channel, "%s is private (+p)\n",channel);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
// would be great to convert the above to work better
|
// would be great to convert the above to work better
|
||||||
|
|
Loading…
Reference in a new issue