| 1254 | self._listPath_SMB2(service_name, path, listCB, errback, search = search, pattern = pattern, timeout = timeout) |
| 1255 | |
| 1256 | def _deleteFiles_SMB2__del(self, service_name, tid, path, callback, errback, timeout = 30): |
| 1257 | messages_history = [ ] |
| 1258 | |
| 1259 | def sendCreate(tid): |
| 1260 | create_context_data = binascii.unhexlify(b""" |
| 1261 | 28 00 00 00 10 00 04 00 00 00 18 00 10 00 00 00 |
| 1262 | 44 48 6e 51 00 00 00 00 00 00 00 00 00 00 00 00 |
| 1263 | 00 00 00 00 00 00 00 00 18 00 00 00 10 00 04 00 |
| 1264 | 00 00 18 00 00 00 00 00 4d 78 41 63 00 00 00 00 |
| 1265 | 00 00 00 00 10 00 04 00 00 00 18 00 00 00 00 00 |
| 1266 | 51 46 69 64 00 00 00 00 |
| 1267 | """.replace(b' ', b'').replace(b'\n', b'')) |
| 1268 | m = SMB2Message(SMB2CreateRequest(path, |
| 1269 | file_attributes = 0, |
| 1270 | access_mask = DELETE | FILE_READ_ATTRIBUTES, |
| 1271 | share_access = FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, |
| 1272 | oplock = SMB2_OPLOCK_LEVEL_NONE, |
| 1273 | impersonation = SEC_IMPERSONATE, |
| 1274 | create_options = FILE_NON_DIRECTORY_FILE, |
| 1275 | create_disp = FILE_OPEN, |
| 1276 | create_context_data = create_context_data)) |
| 1277 | m.tid = tid |
| 1278 | self._sendSMBMessage(m) |
| 1279 | self.pending_requests[m.mid] = _PendingRequest(m.mid, int(time.time()) + timeout, createCB, errback, tid = tid) |
| 1280 | self._pushToArray(messages_history, m) |
| 1281 | |
| 1282 | def createCB(open_message, **kwargs): |
| 1283 | open_message.tid = kwargs['tid'] |
| 1284 | self._pushToArray(messages_history, open_message) |
| 1285 | if open_message.status == 0: |
| 1286 | sendDelete(open_message.tid, open_message.payload.fid) |
| 1287 | elif open_message.status == 0xc0000034: # STATUS_OBJECT_NAME_NOT_FOUND |
| 1288 | callback(path) |
| 1289 | elif open_message.status == 0xC00000BA: # [MS-ERREF]: STATUS_FILE_IS_A_DIRECTORY |
| 1290 | errback(OperationFailure('Failed to delete %s on %s: Cannot delete a folder. Please use deleteDirectory() method or append "/*" to your path if you wish to delete all files in the folder.' % ( path, service_name ), messages_history)) |
| 1291 | else: |
| 1292 | errback(OperationFailure('Failed to delete %s on %s: Unable to open file' % ( path, service_name ), messages_history)) |
| 1293 | |
| 1294 | def sendDelete(tid, fid): |
| 1295 | m = SMB2Message(SMB2SetInfoRequest(fid, |
| 1296 | additional_info = 0, |
| 1297 | info_type = SMB2_INFO_FILE, |
| 1298 | file_info_class = 0x0d, # SMB2_FILE_DISPOSITION_INFO |
| 1299 | data = b'\x01')) |
| 1300 | # [MS-SMB2]: 2.2.39, [MS-FSCC]: 2.4.11 |
| 1301 | m.tid = tid |
| 1302 | self._sendSMBMessage(m) |
| 1303 | self.pending_requests[m.mid] = _PendingRequest(m.mid, int(time.time()) + timeout, deleteCB, errback, tid = tid, fid = fid) |
| 1304 | self._pushToArray(messages_history, m) |
| 1305 | |
| 1306 | def deleteCB(delete_message, **kwargs): |
| 1307 | self._pushToArray(messages_history, delete_message) |
| 1308 | if delete_message.status == 0: |
| 1309 | closeFid(kwargs['tid'], kwargs['fid'], status = 0) |
| 1310 | else: |
| 1311 | closeFid(kwargs['tid'], kwargs['fid'], status = delete_message.status) |
| 1312 | |
| 1313 | def closeFid(tid, fid, status = None): |