a
    Wa                     @   s|   d dl mZ d dlZd dlmZ d dlmZmZ d dl	m
Z
 d dlZd dlZd dlZd dlZdd ZG dd	 d	ejjZdS )
    )print_functionN)	Messaging)MSG_AUTH_LOGAUTH_EVENT_NAME)LoadParmc                 C   s    d| vrd S | d }| | }|S )Ntype )messager   auditr   r   </usr/lib/python3/dist-packages/samba/tests/audit_log_base.pygetAudit    s
    r   c                       sZ   e Zd Z fddZdd Zdd Zddd	Zd
d ZdZdd Z	dd Z
dd Z  ZS )AuditLogTestBasec                    s  t t  td}|r(t|d}n }td|d_j	j
  }|dd }|dd }|_fdd	  fd
d}g d d_|jf_jjjjd j	t  fdd}ddd_|jf_jjjtd   tjd _d _d S )NZSERVERCONFFILE)Zfilename_for_non_global_lp)   )lp_ctxZ
interfacesr   /c                    s\   t | }|d u rdS |d }|d u r(dS z|d}|d  jkW S  tyV   Y dS 0 d S )NFremoteAddress:r   )r   splitr   
IndexError)r	   r
   ZremoteZaddrselfr   r   isRemoteH   s    
z(AuditLogTestBase.setUp.<locals>.isRemotec                    sf   t | t|}|d dks6|d dks6|d dkrN |rN| d | n|d dkrb|| d< d S )Nr   ZpasswordChangeZ
dsdbChangeZgroupChangemessagesZdsdbTransaction
txnMessage)printjsonloadsappendcontextZmsgTypesrcr	   ZjsonMsgr   r   r   messageHandlerW   s    


z.AuditLogTestBase.setUp.<locals>.messageHandler)r   r   Zmsg_typec                    sJ   t |}|d dkrF |rFt| |d d | d< |d d | d< d S )Nr   ZAuthorization	sessionIdserviceDescription)r   r   r   r   r!   r   r   authHandlerk   s    

z+AuditLogTestBase.setUp.<locals>.authHandler )r$   r%   ZSERVER)superr   setUposgetenvr   Zget_loadparmr   msg_ctxZirpc_add_name
event_typegetr   r   r   msg_handler_and_contextregistermessage_typer   auth_contextauth_handler_and_contextr   discardMessagesenvironZserver
connection)r   Zserver_confr   Zclient_ip_and_maskZ	client_ipr"   r&   	__class__)r   r   r   r)   +   s8    



zAuditLogTestBase.setUpc                 C   sX   |    | j| j | jt | jr<| jj| j| jd | jrT| jj| jt	d d S )Nr#   )
r4   r,   Zirpc_remove_namer-   r   r/   Z
deregisterr1   r3   r   r   r   r   r   tearDown   s    

zAuditLogTestBase.tearDownc                 C   sh   |d u rt | jd |kS d}| jd D ]6}t|}|d  | kr(|d7 }||kr( dS q(dS d S )Nr   r   dnr   TF)lenr   r   lower)r   Zexpectedr:   Zreceivedmsgr
   r   r   r   haveExpected   s    zAuditLogTestBase.haveExpectedNc                 C   s   || _ t }| ||sJ| jd t | dkrd| _ td g S qd| _ |du rb| jd S g }| jd D ]*}t|}|d  | krp|	| qp|S )zWait for all the expected messages to arrive
        The connection is passed through to keep the connection alive
        until all the logging messages have been received.
        g?r   Nz	Timed outr   r:   )
r6   timer>   r,   	loop_oncer   r   r   r<   r   )r   Znumberr6   r:   Z
start_timer   r=   r
   r   r   r   waitForMessages   s"    
z AuditLogTestBase.waitForMessagesc                 C   sN   | j d t| jd s(| jd d urJg | jd< d | jd< | j d qd S )NgMbP?r   r   )r,   r@   r;   r   r   r   r   r   r4      s    

z AuditLogTestBase.discardMessagesz<[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}c                 C   s   t | j|S )N)rematchGUID_RE)r   Zguidr   r   r   is_guid   s    zAuditLogTestBase.is_guidc                 C   s
   | j d S )Nr$   r2   r   r   r   r   get_session   s    zAuditLogTestBase.get_sessionc                 C   s
   | j d S )Nr%   rF   r   r   r   r   get_service_description   s    z(AuditLogTestBase.get_service_description)NN)__name__
__module____qualname__r)   r9   r>   rA   r4   rD   rE   rG   rH   __classcell__r   r   r7   r   r   )   s   T
	r   )Z
__future__r   Zsamba.testsZsambaZsamba.messagingr   Zsamba.dcerpc.messagingr   r   Zsamba.paramr   r?   r   r*   rB   r   ZtestsZTestCaser   r   r   r   r   <module>   s   	