void G_ProcessIDBans( void ) { fileHandle_t f; int fileLen; char buffer[16000]; char *token, *filePtr; idFilter_t id; fileLen = trap_FS_FOpenFile( "RPG-X_Banned_Players.txt", &f, FS_READ ); if ( !f || !fileLen ) return; trap_FS_Read( buffer, fileLen, f ); if ( !buffer[0] ) return; buffer[fileLen] = '\0'; trap_FS_FCloseFile( f ); COM_BeginParseSession(); filePtr = buffer; while ( 1 ) { token = COM_Parse( &filePtr ); if ( !token[0] ) break; if ( !Q_stricmp( token, "{" ) ) { memset( &id, 0, sizeof( id ) ); token = COM_ParseExt( &filePtr, qtrue ); if ( !token[0] ) continue; //parse player id id.playerID = atoul( token ); token = COM_ParseExt( &filePtr, qtrue ); if ( !token[0] ) continue; //parse player name Q_strncpyz( id.playerName, token, sizeof( id.playerName ) ); token = COM_ParseExt( &filePtr, qtrue ); if ( !token[0] ) continue; //parse ban reason Q_strncpyz( id.banReason, token, sizeof( id.banReason ) ); AddID( &id ); } } G_Printf( "%i ban entries were successfully loaded.\n", numIDFilters ); }
void BSVGStop::RecreateData() { fHeaderData.SetTo("<stop"); AddID(fHeaderData); fState.AddToString(&fHeaderData); fHeaderData << " offset=\"" << fOffset << "\" />"; fFooterData.SetTo(""); }
// -------------------------------------------------------------------------- // // Function // Name: BackupStoreCheck::CheckAndAddObject(int64_t, // const std::string &) // Purpose: Check a specific object and add it to the list // if it's OK. If there are any errors with the // reading, return false and it'll be deleted. // Created: 21/4/04 // // -------------------------------------------------------------------------- bool BackupStoreCheck::CheckAndAddObject(int64_t ObjectID, const std::string &rFilename) { // Info on object... bool isFile = true; int64_t containerID = -1; int64_t size = -1; try { // Open file std::auto_ptr<RaidFileRead> file( RaidFileRead::Open(mDiscSetNumber, rFilename)); size = file->GetDiscUsageInBlocks(); // Read in first four bytes -- don't have to worry about // retrying if not all bytes read as is RaidFile uint32_t signature; if(file->Read(&signature, sizeof(signature)) != sizeof(signature)) { // Too short, can't read signature from it return false; } // Seek back to beginning file->Seek(0, IOStream::SeekType_Absolute); // Then... check depending on the type switch(ntohl(signature)) { case OBJECTMAGIC_FILE_MAGIC_VALUE_V1: #ifndef BOX_DISABLE_BACKWARDS_COMPATIBILITY_BACKUPSTOREFILE case OBJECTMAGIC_FILE_MAGIC_VALUE_V0: #endif // File... check containerID = CheckFile(ObjectID, *file); break; case OBJECTMAGIC_DIR_MAGIC_VALUE: isFile = false; containerID = CheckDirInitial(ObjectID, *file); break; default: // Unknown signature. Bad file. Very bad file. return false; break; } } catch(...) { // Error caught, not a good file then, let it be deleted return false; } // Got a container ID? (ie check was successful) if(containerID == -1) { return false; } // Add to list of IDs known about AddID(ObjectID, containerID, size, isFile); // Add to usage counts mBlocksUsed += size; if(!isFile) { mBlocksInDirectories += size; } // If it looks like a good object, and it's non-RAID, and // this is a RAID set, then convert it to RAID. RaidFileController &rcontroller(RaidFileController::GetController()); RaidFileDiscSet rdiscSet(rcontroller.GetDiscSet(mDiscSetNumber)); if(!rdiscSet.IsNonRaidSet()) { // See if the file exists RaidFileUtil::ExistType existance = RaidFileUtil::RaidFileExists(rdiscSet, rFilename); if(existance == RaidFileUtil::NonRaid) { BOX_WARNING("Found non-RAID write file in RAID set" << (mFixErrors?", transforming to RAID: ":"") << (mFixErrors?rFilename:"")); if(mFixErrors) { RaidFileWrite write(mDiscSetNumber, rFilename); write.TransformToRaidStorage(); } } else if(existance == RaidFileUtil::AsRaidWithMissingReadable) { BOX_WARNING("Found damaged but repairable RAID file" << (mFixErrors?", repairing: ":"") << (mFixErrors?rFilename:"")); if(mFixErrors) { std::auto_ptr<RaidFileRead> read( RaidFileRead::Open(mDiscSetNumber, rFilename)); RaidFileWrite write(mDiscSetNumber, rFilename); write.Open(true /* overwrite */); read->CopyStreamTo(write); read.reset(); write.Commit(true /* transform to RAID */); } } } // Report success return true; }
void Svcmd_BanUser_f( void ) { char str[MAX_TOKEN_CHARS]; char userInfo[MAX_TOKEN_CHARS]; idFilter_t id; int playerNum; char *ip; if ( trap_Argc() < 2 ) { G_Printf("Usage: banUser <client ID> <reason for banning>\n"); return; } trap_Argv( 1, str, sizeof( str ) ); playerNum = atoi(str); if ( playerNum > MAX_CLIENTS || playerNum < 0 || !g_entities[playerNum].client ) { G_Printf("Error: Player ID wasn't valid.\n"); return; } trap_GetUserinfo( playerNum, userInfo, sizeof( userInfo ) ); if ( !userInfo[0] ) return; //get unique Ban ID id.playerID = atoul( Info_ValueForKey( userInfo, "sv_securityCode" ) ); //Get player name and clean it of color tags Q_strncpyz( id.playerName, Q_CleanStr(Info_ValueForKey( userInfo, "name" )), sizeof( id.playerName ) ); //get ban reason trap_Argv( 2, id.banReason, sizeof( id.banReason ) ); if ( !id.banReason[0] ) Q_strncpyz( id.banReason, "No reason given.", sizeof( id.banReason ) ); AddID( &id ); ip = g_entities[playerNum].client->pers.ip; UpdateIDBans(); //Scooter's filter list if( Q_stricmp( ip, "localhost" ) //localhost && Q_strncmp( ip, "10.", 3 ) //class A && Q_strncmp( ip, "172.16.", 7 ) //class B && Q_strncmp( ip, "192.168.", 8 ) //class C && Q_strncmp( ip, "127.", 4 ) //loopback && Q_strncmp( ip, "169.254.", 8 ) //link-local ) { AddIP( ip ); G_Printf( "User: %s ( %i - %s ) ^7was successfully banned.\n", Info_ValueForKey( userInfo, "name" ), playerNum, ip ); } trap_DropClient( playerNum, "Banned from the server" ); G_Printf( "User: %s ( %i ) ^7was successfully banned.\n", id.playerName, playerNum ); }