o
    j                     @   s   d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZmZmZmZmZmZmZmZ d d	lmZ edddZG dd dZd
S )    )SMBDCEFactory)SMBConnection)DCERPC5Connection)srvs)NTStatus)logger)NULL)RPC_C_AUTHN_LEVEL_NONERPC_C_AUTHN_LEVEL_CONNECTRPC_C_AUTHN_LEVEL_CALLRPC_C_AUTHN_LEVEL_PKTRPC_C_AUTHN_LEVEL_PKT_INTEGRITYRPC_C_AUTHN_LEVEL_PKT_PRIVACYDCERPCExceptionRPC_C_AUTHN_GSS_NEGOTIATE)asynccontextmanagerNTFc                 C  sR   t j| |||dI d H \}}|r|z|V  W | I d H  d S | I d H  w )N
auth_levelopenperform_dummy)SRVSRPCfrom_smbconnectionclose)
connectionr   r   r   instanceerr r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/aiosmb/dcerpc/v5/interfaces/srvsmgr.pysrvsrpc_from_smb   s   "r   c                   @   sx   e Zd Zdd Zdd Zdd Zedd
ededefddZ	edd
e
dedefddZdd ZdddZdddZdS )r   c                 C   s0   d| _ tj| _d | _d | _d | _i | _i | _d S )Nz\srvsvc)	service_pipenamer   MSRPC_UUID_SRVSservice_uuidservice_managerdcehandle
domain_idsdomain_handlesselfr   r   r   __init__   s   
zSRVSRPC.__init__c                    s   | S )Nr   r'   r   r   r   
__aenter__)   s   zSRVSRPC.__aenter__c                    s   |   I d H  dS N)TN)r   )r(   exc_typeexc	tracebackr   r   r   	__aexit__,   s   zSRVSRPC.__aexit__NTFr   r   r   c              
      s   z=t  }| |_|j| |d u r|jt |j I d H \}}|d ur(||j|jI d H \}}|d ur:||d fW S  tyT } z
d|fW  Y d }~S d }~ww )NF)r   r#   set_auth_levelr   connectbindr!   	Exception)r   r   r   r   service_r   er   r   r   from_rpcconnection0   s$   
zSRVSRPC.from_rpcconnectionc              
      s   z)|du rt }t| t jd}tj| |||dI dH \}}|dur&||dfW S  ty@ } z
d|fW  Y d}~S d}~ww )z
		Creates the connection to the service using an established SMBConnection.
		This connection will use the given SMBConnection as transport layer.
		N)filenamer   )r	   r   r   r   r7   get_dce_rpcr3   )r   r   r   r   rpctransportr4   r   r6   r   r   r   r   F   s    
zSRVSRPC.from_smbconnectionc              
      sd   z| j rz| j  I d H  W W d S    Y W d S W dS  ty1 } z
d |fW  Y d }~S d }~ww r+   )r#   
disconnectr3   )r(   r6   r   r   r   r   Z   s   zSRVSRPC.close   c           	   
   C  s   z`d| }t j}d}|t jkr_tj| j||dI d H \}}|d ur/|jt jjkr+|| }|d d | d D ]}|d d d |d	 |d
 d fV  q9|d }t |d }|t jksW d S W d S  ty{ } zd d d |fV  W Y d }~d S d }~ww )NLevel%sr   resumeHandle
InfoStruct	ShareInfoBuffershi1_netname	shi1_typeshi1_remarkResumeHandle	ErrorCode)	r   MORE_ENTRIESr   hNetrShareEnumr#   
error_codevalue
get_packetr3   )	r(   level
level_namestatusr?   respr   entryr6   r   r   r   list_sharesg   s*   
$zSRVSRPC.list_shares
   c              
   C  sz  z|dvr
t dd| }tj}d}|tjkrtj| jdt||dI d H \}}|d ur@|jtjjkr<d d |fV  W d S |	 }|dkrh|d d	 | d
 D ]}|d d d }|d d d }	||	d fV  qNn'|dkr|d d	 | d
 D ]}|d d d }|d d d }	||	d fV  qv|d }t|d }|tjksW d S W d S  t y }
 zd d |
fV  W Y d }
~
d S d }
~
ww )N)r<   rT   z!Only levels 1 and 10 implemented!r=   r    r>   r<   r@   SessionInforB   sesi1_usernamerD   sesi1_cnamerT   sesi10_usernamesesi10_cnamerG   rH   )
r3   r   rI   r   hNetrSessionEnumr#   r   rK   rL   rM   )r(   rN   rO   rP   r?   rQ   r   rR   usernameip_addrr6   r   r   r   list_sessions|   sB   
 zSRVSRPC.list_sessionsNTF)r<   )rT   )__name__
__module____qualname__r)   r*   r/   staticmethodr   boolr7   r   r   r   rS   r^   r   r   r   r   r      s    
r   r_   )0aiosmb.dcerpc.v5.common.connection.smbdcefactoryr   aiosmb.connectionr   aiosmb.dcerpc.v5.connectionr   aiosmb.dcerpc.v5r   aiosmb.wintypes.ntstatusr   aiosmbr   aiosmb.dcerpc.v5.dtypesr   aiosmb.dcerpc.v5.rpcrtr	   r
   r   r   r   r   r   r   
contextlibr   r   r   r   r   r   r   <module>   s    (
