pschmitt / easypysmb

Easy to use PySMB wrapper library
https://pypi.org/project/easypysmb/
GNU General Public License v3.0
3 stars 2 forks source link

store_file() throws TypeError exception with Python3 on windows #2

Open fabibio opened 7 years ago

fabibio commented 7 years ago

store_file() leads to "TypeError: can't concat bytes to str" exception in smb\smb2_structs.py. It looks that opening file_obj in binary mode ('rb') fixes the issue.

--- easypysmb.py    (revision )
+++ easypysmb.py    (revision )
@@ -120,7 +120,7 @@
         assert dest_path, 'Destination path is unset'
         share_name, dest_path = self.__guess_share_name(dest_path, share_name)
         if type(file_obj) is str or type(file_obj) is str:
-            file_obj = open(file_obj)
+            file_obj = open(file_obj, 'rb')
         logger.info(
             'Attempt to store {} on {}:{}'.format(
                 file_obj.name, share_name, dest_path

Full stack trace follows:

Traceback (most recent call last): File "C:/test/smbcli2.py", line 15, in z = e.store_file(file_obj='/tmp/body.txt', dest_path='body.txt') File "C:\Local\Python36\lib\site-packages\easypysmb\easypysmb.py", line 134, in store_file file_obj File "C:\Local\Python36\lib\site-packages\smb\SMBConnection.py", line 316, in storeFile return self.storeFileFromOffset(service_name, path, file_obj, 0, True, timeout) File "C:\Local\Python36\lib\site-packages\smb\SMBConnection.py", line 347, in storeFileFromOffset self._pollForNetBIOSPacket(timeout) File "C:\Local\Python36\lib\site-packages\smb\SMBConnection.py", line 583, in _pollForNetBIOSPacket self.feedData(data) File "C:\Local\Python36\lib\site-packages\nmb\base.py", line 54, in feedData self._processNMBSessionPacket(self.data_nmb) File "C:\Local\Python36\lib\site-packages\nmb\base.py", line 75, in _processNMBSessionPacket self.onNMBSessionMessage(packet.flags, packet.data) File "C:\Local\Python36\lib\site-packages\smb\base.py", line 137, in onNMBSessionMessage if self._updateState(self.smb_message): File "C:\Local\Python36\lib\site-packages\smb\base.py", line 276, in _updateState_SMB2 req.callback(message, **req.kwargs) File "C:\Local\Python36\lib\site-packages\smb\base.py", line 909, in createCB sendWrite(create_message.tid, create_message.payload.fid, starting_offset) File "C:\Local\Python36\lib\site-packages\smb\base.py", line 924, in sendWrite self._sendSMBMessage(m) File "C:\Local\Python36\lib\site-packages\smb\base.py", line 227, in _sendSMBMessage_SMB2 smb_message.raw_data = smb_message.encode() File "C:\Local\Python36\lib\site-packages\smb\smb2_structs.py", line 79, in encode self.payload.prepare(self) File "C:\Local\Python36\lib\site-packages\smb\smb2_structs.py", line 466, in prepare self.flags) + self.data TypeError: can't concat bytes to str

pschmitt commented 7 years ago

Thanks for the feedback, I haven't tested this library with Python 3.X. Would you mind submitting a PR for this change?