(self, service_name, path, callback, errback, timeout = 30)
| 819 | sendCreate(self.connected_trees[service_name]) |
| 820 | |
| 821 | def _getSecurity_SMB2(self, service_name, path, callback, errback, timeout = 30): |
| 822 | if not self.has_authenticated: |
| 823 | raise NotReadyError('SMB connection not authenticated') |
| 824 | |
| 825 | expiry_time = time.time() + timeout |
| 826 | path = path.replace('/', '\\') |
| 827 | if path.startswith('\\'): |
| 828 | path = path[1:] |
| 829 | if path.endswith('\\'): |
| 830 | path = path[:-1] |
| 831 | messages_history = [ ] |
| 832 | results = [ ] |
| 833 | |
| 834 | def sendCreate(tid): |
| 835 | m = SMB2Message(SMB2CreateRequest(path, |
| 836 | file_attributes = 0, |
| 837 | access_mask = FILE_READ_DATA | FILE_READ_EA | FILE_READ_ATTRIBUTES | READ_CONTROL | SYNCHRONIZE, |
| 838 | share_access = FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, |
| 839 | oplock = SMB2_OPLOCK_LEVEL_NONE, |
| 840 | impersonation = SEC_IMPERSONATE, |
| 841 | create_options = 0, |
| 842 | create_disp = FILE_OPEN)) |
| 843 | m.tid = tid |
| 844 | self._sendSMBMessage(m) |
| 845 | self.pending_requests[m.mid] = _PendingRequest(m.mid, expiry_time, createCB, errback, tid = tid) |
| 846 | self._pushToArray(messages_history, m) |
| 847 | |
| 848 | def createCB(create_message, **kwargs): |
| 849 | self._pushToArray(messages_history, create_message) |
| 850 | if create_message.status == 0: |
| 851 | m = SMB2Message(SMB2QueryInfoRequest(create_message.payload.fid, |
| 852 | flags = 0, |
| 853 | additional_info = OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION, |
| 854 | info_type = SMB2_INFO_SECURITY, |
| 855 | file_info_class = 0, # [MS-SMB2] 2.2.37, 3.2.4.12 |
| 856 | input_buf = '', |
| 857 | output_buf_len = self.max_transact_size)) |
| 858 | m.tid = kwargs['tid'] |
| 859 | self._sendSMBMessage(m) |
| 860 | self.pending_requests[m.mid] = _PendingRequest(m.mid, expiry_time, queryCB, errback, tid = kwargs['tid'], fid = create_message.payload.fid) |
| 861 | self._pushToArray(messages_history, m) |
| 862 | else: |
| 863 | errback(OperationFailure('Failed to get the security descriptor of %s on %s: Unable to open file or directory' % ( path, service_name ), messages_history)) |
| 864 | |
| 865 | def queryCB(query_message, **kwargs): |
| 866 | self._pushToArray(messages_history, query_message) |
| 867 | if query_message.status == 0: |
| 868 | security = SecurityDescriptor.from_bytes(query_message.payload.data) |
| 869 | closeFid(kwargs['tid'], kwargs['fid'], result = security) |
| 870 | else: |
| 871 | closeFid(kwargs['tid'], kwargs['fid'], error = query_message.status) |
| 872 | |
| 873 | def closeFid(tid, fid, result = None, error = None): |
| 874 | m = SMB2Message(SMB2CloseRequest(fid)) |
| 875 | m.tid = tid |
| 876 | self._sendSMBMessage(m) |
| 877 | self.pending_requests[m.mid] = _PendingRequest(m.mid, expiry_time, closeCB, errback, result = result, error = error) |
| 878 | self._pushToArray(messages_history, m) |
nothing calls this directly
no test coverage detected