diff --git a/scapy.py b/scapy.py
index 11f49ac332ae552737cd44b366bc3fab27686e98..82f462029a99380379b91a4118d1bb3a2b40cfb8 100755
--- a/scapy.py
+++ b/scapy.py
@@ -11931,10 +11931,14 @@ class TFTP_WRQ_server(Automaton):
         
 
 class TFTP_RRQ_server(Automaton):
-    def parse_args(self, store=None, joker=None, ip=None, sport=None, serve_one=False, **kargs):
+    def parse_args(self, store=None, joker=None, dir=None, ip=None, sport=None, serve_one=False, **kargs):
         Automaton.parse_args(self,**kargs)
         if store is None:
             store = {}
+        if dir is not None:
+            self.dir = os.path.join(os.path.abspath(dir),"")
+        else:
+            self.dir = None
         self.store = store
         self.joker = joker
         self.ip = ip
@@ -11963,7 +11967,18 @@ class TFTP_RRQ_server(Automaton):
         self.l3 = IP(src=ip.dst, dst=ip.src)/UDP(sport=self.my_tid, dport=ip.sport)/TFTP()
         self.filename = pkt[TFTP_RRQ].filename
         self.blk=1
-        self.data = self.store.get(self.filename, self.joker)
+        self.data = None
+        if self.filename in self.store:
+            self.data = self.store[self.filename]
+        elif self.dir is not None:
+            fn = os.path.abspath(os.path.join(self.dir, self.filename))
+            if fn.startswith(self.dir): # Check we're still in the server's directory
+                try:
+                    self.data=open(fn).read()
+                except IOError:
+                    pass
+        if self.data is None:
+            self.data = self.joker
 
     @ATMT.condition(RECEIVED_RRQ)
     def file_in_store(self):