MCPcopy Create free account
hub / github.com/PierreGode/Ragnar / _getSecurity_SMB2

Method _getSecurity_SMB2

pager_lib/smb/base.py:821–900  ·  view source on GitHub ↗
(self, service_name, path, callback, errback, timeout = 30)

Source from the content-addressed store, hash-verified

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)

Callers

nothing calls this directly

Calls 5

_pushToArrayMethod · 0.95
NotReadyErrorClass · 0.85
SMB2MessageClass · 0.85
_PendingRequestClass · 0.85

Tested by

no test coverage detected