From f94a8cec1b6765769e2c88f33a787b9068ab29a3 Mon Sep 17 00:00:00 2001
From: Jefry Lagrange <jefry.reyes@gmail.com>
Date: Sat, 22 Sep 2012 13:25:55 -0400
Subject: [PATCH] only accept file request from peers that we already sent the
 file to

---
 src/common/jingle_content.py |  5 ++++-
 src/common/jingle_ft.py      |  4 +++-
 src/common/jingle_session.py | 11 +++++++----
 3 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/src/common/jingle_content.py b/src/common/jingle_content.py
index b2f3171f32..5aaff47899 100644
--- a/src/common/jingle_content.py
+++ b/src/common/jingle_content.py
@@ -15,6 +15,7 @@
 Handles Jingle contents (XEP 0166)
 """
 
+import gajim
 import xmpp
 from jingle_transport import JingleTransportIBB
 
@@ -194,11 +195,13 @@ class JingleContent(object):
                                         self.file_props.hash_:
                 h  = self._calcHash()
                 file_tag.addChild(node=h)
+                pjid = gajim.get_jid_without_resource(self.session.peerjid)
                 file_info = {'name' : self.file_props.name,
                              'file-name' : self.file_props.file_name,
                              'hash' : self.file_props.hash_,
                              'size' : self.file_props.size,
-                             'date' : self.file_props.date
+                             'date' : self.file_props.date,
+                             'peerjid' : pjid
                             }
                 self.session.connection.set_files_info(file_info)
         desc = file_tag.setTag('desc')
diff --git a/src/common/jingle_ft.py b/src/common/jingle_ft.py
index d2de8f2460..fda8758aba 100644
--- a/src/common/jingle_ft.py
+++ b/src/common/jingle_ft.py
@@ -134,11 +134,13 @@ class JingleFileTransfer(JingleContent):
             payload=[self._calcHash()])])
         checksum.setNamespace(xmpp.NS_JINGLE_FILE_TRANSFER)
         self.session.__session_info(checksum )
+        pjid = gajim.get_jid_without_resource(self.session.peerjid)
         file_info = {'name' : self.file_props.name,
                      'file-name' : self.file_props.file_name,
                      'hash' : self.file_props.hash_,
                      'size' : self.file_props.size,
-                     'date' : self.file_props.date
+                     'date' : self.file_props.date,
+                     'peerjid' : pjid
                     }
         self.session.connection.set_files_info(file_info)
 
diff --git a/src/common/jingle_session.py b/src/common/jingle_session.py
index 9507714c65..bfb7925a0f 100644
--- a/src/common/jingle_session.py
+++ b/src/common/jingle_session.py
@@ -513,7 +513,8 @@ class JingleSession(object):
                     self._session_terminate(reason)
                     raise xmpp.NodeProcessed
         else:
-            # Stop if we don't have the requested file
+            # Stop if we don't have the requested file or the peer is not
+            # allowed to request the file
             request = \
                  jingle.getTag('content').getTag('description').getTag('request')
             if request:
@@ -524,10 +525,12 @@ class JingleSession(object):
                     file_info = self.connection.get_files_info(hash_=h)
                 elif n:
                     file_info = self.connection.get_files_info(name=n)
-                if not file_info:
-                    log.warning('The peer ' + self.peerjid + \
+                pjid = gajim.get_jid_without_resource(self.peerjid)
+                if not file_info or file_info['peerjid'] != pjid:
+                    log.warning('The peer ' + pjid + \
                                 ' is requesting a ' + \
-                                'file that we dont have')
+                                'file that we dont have or' + \
+                                'it is not allowed to request')
                     self.decline_session()
                     raise xmpp.NodeProcessed
         # If there's no content we understand...
-- 
GitLab