Added a check for rogue packets in the server.
git-svn-id: https://tftpy.svn.sourceforge.net/svnroot/tftpy/trunk@59 63283fd4-ec1e-0410-9879-cb7f675518da
This commit is contained in:
parent
f53e68bcd5
commit
07906cdbd9
2 changed files with 14 additions and 1 deletions
|
@ -271,6 +271,18 @@ class TftpServerHandler(TftpSession):
|
|||
rport)
|
||||
raise TftpException, "Unsupported mode: %s" % recvpkt.mode
|
||||
|
||||
# test host/port of client end
|
||||
if self.host != raddress or self.port != rport:
|
||||
self.senderror(self.sock,
|
||||
TftpErrors.UnknownTID,
|
||||
raddress,
|
||||
rport)
|
||||
logger.error("Expected traffic from %s:%s but received it "
|
||||
"from %s:%s instead."
|
||||
% (self.host, self.port, raddress, rport))
|
||||
self.errors += 1
|
||||
return
|
||||
|
||||
if self.state.state == 'rrq':
|
||||
logger.debug("Received RRQ. Composing response.")
|
||||
self.filename = self.root + os.sep + recvpkt.filename
|
||||
|
@ -310,7 +322,6 @@ class TftpServerHandler(TftpSession):
|
|||
% (self.key, blksize))
|
||||
self.options['blksize'] = DEF_BLKSIZE
|
||||
|
||||
logger.debug("Composing and sending OACK packet")
|
||||
self.send_oack()
|
||||
|
||||
elif len(recvpkt.options.keys()) > 0:
|
||||
|
@ -415,6 +426,7 @@ class TftpServerHandler(TftpSession):
|
|||
self.sock.sendto(dat.encode().buffer, (self.host, self.port))
|
||||
self.timesent = time.time()
|
||||
|
||||
# FIXME - should these be factored-out into the session class?
|
||||
def send_oack(self):
|
||||
"""This method sends an OACK packet based on current params."""
|
||||
logger.debug("Composing and sending OACK packet")
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import logging
|
||||
from tftpy import TftpPacketERR
|
||||
|
||||
LOG_LEVEL = logging.NOTSET
|
||||
MIN_BLKSIZE = 8
|
||||
|
|
Reference in a new issue