From 0761ade4ae730ee96bc6b738fa563f0ecf2e4084 Mon Sep 17 00:00:00 2001 From: Darren Ranalli Date: Fri, 10 Oct 2003 22:54:39 +0000 Subject: [PATCH] AI and client check entTypeReg hashes --- direct/src/level/DistributedLevel.py | 7 ++++++- direct/src/level/DistributedLevelAI.py | 14 +++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/direct/src/level/DistributedLevel.py b/direct/src/level/DistributedLevel.py index dea76124b9..578b9c78a9 100755 --- a/direct/src/level/DistributedLevel.py +++ b/direct/src/level/DistributedLevel.py @@ -112,11 +112,16 @@ class DistributedLevel(DistributedObject.DistributedObject, # if we're in debug, give the server the opportunity to send us # a full spec self.candidateSpec = levelSpec - self.sendUpdate('requestCurrentLevelSpec', [hash(levelSpec)]) + self.sendUpdate('requestCurrentLevelSpec', + [hash(levelSpec), + hash(levelSpec.entTypeReg)]) else: self.privGotSpec(levelSpec) if __debug__: + def setSpecDeny(self, reason): + DistributedLevel.notify.error(reason) + def setSpecSenderDoId(self, doId): DistributedLevel.notify.debug('setSpecSenderDoId: %s' % doId) blobSender = toonbase.tcr.doId2do[doId] diff --git a/direct/src/level/DistributedLevelAI.py b/direct/src/level/DistributedLevelAI.py index 95bf627c06..7540e34233 100755 --- a/direct/src/level/DistributedLevelAI.py +++ b/direct/src/level/DistributedLevelAI.py @@ -116,8 +116,20 @@ class DistributedLevelAI(DistributedObjectAI.DistributedObjectAI, self.levelSpec.saveToDisk() self.modified = 0 - def requestCurrentLevelSpec(self, specHash): + def requestCurrentLevelSpec(self, specHash, entTypeRegHash): senderId = self.air.msgSender + + # first check the typeReg hash -- if it doesn't match, the + # client should not be connecting. Their entityTypeRegistry + # is different from ours. + srvHash = hash(self.levelSpec.entTypeReg) + if srvHash != entTypeRegHash: + self.sendUpdateToAvatarId( + senderId, 'setSpecDeny', + ['EntityTypeRegistry hashes do not match! ' + '(server:%s, client:%s' % (srvHash, entTypeRegHash)]) + return + spec = None if hash(self.levelSpec) != specHash: spec = self.levelSpec