port Mercury's Userinfo validation over from cougar.

This commit is contained in:
Thad Ward 2001-05-22 14:23:19 +00:00
parent 759729b5a8
commit 7a0ba8ca2e
3 changed files with 29 additions and 1 deletions

View file

@ -48,5 +48,6 @@ void Info_RemovePrefixedKeys (char *start, char prefix);
void Info_SetValueForKey (char *s, char *key, char *value, size_t maxsize);
void Info_SetValueForStarKey (char *s, char *key, char *value, size_t maxsize);
char *Info_ValueForKey (char *s, char *key);
qboolean Info_Validate (char *s);
#endif // __info_h_

View file

@ -327,3 +327,20 @@ Info_Print (char *s)
Con_Printf ("%s\n", value);
}
}
qboolean
Info_Validate (char *s)
{
int count;
char *p;
if (!s || *s == '\0')
return false;
for (p = s, count = 0; *p != '\0'; p++)
if (*p == '\\')
count++;
return (!(count % 2));
}

View file

@ -665,6 +665,13 @@ SVC_DirectConnect (void)
strncpy (userinfo, Cmd_Argv (4), sizeof (userinfo) - 2);
userinfo[sizeof (userinfo) - 2] = 0;
// Validate the userinfo string.
if (!Info_Validate(userinfo)) {
Netchan_OutOfBandPrint (net_from, "%c\nInvalid userinfo string.\n",
A2C_PRINT);
return;
}
// see if the challenge is valid
for (i = 0; i < MAX_CHALLENGES; i++) {
if (NET_CompareBaseAdr (net_from, svs.challenges[i].adr)) {
@ -1761,7 +1768,10 @@ SV_ExtractFromUserinfo (client_t *cl)
// if the new name was not set (due to the info string being too long), drop the client to prevent an infinite loop
if(strcmp(val, newname)) {
SV_ClientPrintf (cl, PRINT_HIGH, "Please choose a different name.\n");
Netchan_OutOfBandPrint (net_from,
"%c\nPlease choose a different name.\n", A2C_PRINT);
SV_ClientPrintf (cl, PRINT_HIGH,
"Please choose a different name.\n");
Con_Printf("Client %d kicked for invalid name\n", cl->userid);
SV_DropClient (cl);
return;