a
    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lmZ G dd dejjZdS )	    )print_functionN)	Messaging)MSG_AUTH_LOGAUTH_EVENT_NAME)LoadParm)paramc                       s^   e Zd Zedd Zedd Z fddZddd	Zed
d Zdd Z	dZ
dd Z  ZS )AuthLogTestBasec                 C   s   t d}|rt|d}n
tj  td|d| _| jt	 tj }|
dd }|dd }|| _dd	 }d
g i| _|| jf| _| jj| jtd d | _t jd | _d | _d S )NZSERVERCONFFILE)Zfilename_for_non_global_lp)   )lp_ctxZ
interfacesr   /c                 S   s$   t | t|}| d | d S )Nmessages)printjsonloadsappend)contextZmsgTypesrcmessageZjsonMsg r   ;/usr/lib/python3/dist-packages/samba/tests/auth_log_base.pymessageHandler;   s    
z2AuthLogTestBase.setUpClass.<locals>.messageHandlerr   Zmsg_typeZSERVER)osgetenvr   sambatestsZenv_loadparmr   msg_ctxZirpc_add_namer   getsplitremoteAddressr   msg_handler_and_contextregisterr   environZserver
connection)selfZserver_confr
   Zclient_ip_and_maskZ	client_ipr   r   r   r   
setUpClass#   s&    




zAuthLogTestBase.setUpClassc                 C   s(   | j r$| jj| j td | jt d S )Nr   )r    r   Z
deregisterr   Zirpc_remove_namer   r$   r   r   r   tearDownClassK   s
    
zAuthLogTestBase.tearDownClassc                    s   t t|   |   d S N)superr   setUpdiscardMessagesr&   	__class__r   r   r*   R   s    zAuthLogTestBase.setUpNc                    sx    fdd}fdd|_ t }|jd s^jd t | dkr(d_ g S q(d_ ttjd 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.
        c                    s$   | D ]}|r |r dS qdS )NTFr   )r   r   )isLastExpectedMessageisRemoter   r   	completed\   s    z2AuthLogTestBase.waitForMessages.<locals>.completedc                    s~    j d u rdS d }| d dkr,| d d }n| d dkrF| d d }ndS z|d}|d  j kW S  tyx   Y dS 0 d S )	NTtypeZAuthorizationr   AuthenticationF:r	   )r   r   
IndexError)r   ZremoteZaddrr&   r   r   r/   b   s    

z1AuthLogTestBase.waitForMessages.<locals>.isRemoter   g?r	   N)r#   timer   r   	loop_oncelistfilter)r$   r.   r#   r0   Z
start_timer   )r.   r/   r$   r   waitForMessagesV   s    zAuthLogTestBase.waitForMessagesc                 C   s6   | j d t| jd r2g | jd< | j d qd S )NgMbP?r   )r   r6   lenr   r&   r   r   r   r+      s    
zAuthLogTestBase.discardMessagesc                 C   s   dd }t t||S )Nc                 S   s    d| vrdS | d d }|dkS )Nr2   TZserviceDescriptionZNETLOGONr   )msgZsdr   r   r   is_not_netlogon   s    zAAuthLogTestBase.remove_netlogon_messages.<locals>.is_not_netlogon)r7   r8   )r$   r   r<   r   r   r   remove_netlogon_messages   s    z(AuthLogTestBase.remove_netlogon_messagesz<[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 r(   )rematchGUID_RE)r$   Zguidr   r   r   is_guid   s    zAuthLogTestBase.is_guid)N)__name__
__module____qualname__classmethodr%   r'   r*   r9   r+   r=   r@   rA   __classcell__r   r   r,   r   r   !   s   
'

+

	r   )Z
__future__r   Zsamba.testsr   Zsamba.messagingr   Zsamba.dcerpc.messagingr   r   Zsamba.paramr   r5   r   r   r>   r   r   ZTestCaser   r   r   r   r   <module>   s   