
    b                         d 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ej        j                  ZdS )	z&Tests for the Auth and AuthZ logging.
    N)	Messaging)MSG_AUTH_LOGAUTH_EVENT_NAME)LoadParm)paramc                   x     e Zd Zed             Zed             Z fdZd
dZed             Zd Z	dZ
d	 Z xZS )AuthLogTestBasec                 z   t          j        d          }|rt          |          }nt          j                                         t          d|          | _        | j                            t                     t          j                                        }|
                    d          d         }|                    d          d         }|| _        d }d	g i| _        || j        f| _        | j                            | j        t           
           d | _        t           j        d         | _        d | _        d S )NSERVERCONFFILE)filename_for_non_global_lp)   )lp_ctx
interfacesr   /c                     t          |           t          j        |          }| d                             |           d S )Nmessages)printjsonloadsappend)contextmsgTypesrcmessagejsonMsgs        ;/usr/lib/python3/dist-packages/samba/tests/auth_log_base.pymessageHandlerz2AuthLogTestBase.setUpClass.<locals>.messageHandler:   s=     'NNNj))GJ&&w/////    r   msg_typeSERVER)osgetenvr   sambatestsenv_loadparmr   msg_ctxirpc_add_namer   getsplitremoteAddressr   msg_handler_and_contextregisterr   environserver
connection)selfserver_confr   client_ip_and_mask	client_ipr   s         r   
setUpClasszAuthLogTestBase.setUpClass"   s0   
 i 011 	'EEEFFK$$&&& f555""?333
 ))++#ZZ55a8&,,S11!4	 '	0 	0 	0 #B'(6'E$d:'3 	 	5 	5 	5 "j*r   c                     | j         rG| j                            | j         t                     | j                            t
                     d S d S )Nr   )r,   r'   
deregisterr   irpc_remove_namer   r1   s    r   tearDownClasszAuthLogTestBase.tearDownClassJ   sZ    ' 	;L##D$@-9 $ ; ; ;L))/:::::	; 	;r   c                 ~    t          t          |                                            |                                  d S N)superr	   setUpdiscardMessages)r1   	__class__s    r   r>   zAuthLogTestBase.setUpQ   s7    ot$$**,,,r   Nc                     fd} fd| _         t          j                    } | j        d                   sS j                            d           t          j                    |z
  dk    r	d _         g S  | j        d                   Sd _         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                 D    | D ]} |          r |          r dS dS )NTF )r   r   isLastExpectedMessageisRemotes     r   	completedz2AuthLogTestBase.waitForMessages.<locals>.completed[   sD    #    8G$$  )>)>w)G)G  445r   c                     j         dS d }| d         dk    r| d         d         }n| d         dk    r| d         d         }ndS 	 |                    d          }|d         j         k    S # t          $ r Y dS w xY w)	NTtypeAuthorizationr+   AuthenticationF:r   )r+   r*   
IndexError)r   remoteaddrr1   s      r   rE   z1AuthLogTestBase.waitForMessages.<locals>.isRemotea   s    !)tFv/11 1/B$444 !12?Cu||C((Aw$"444   uus   %A, ,
A:9A:r   g?r   N)r0   timer   r'   	loop_oncelistfilter)r1   rD   r0   rF   
start_timerE   s   ``   @r   waitForMessageszAuthLogTestBase.waitForMessagesU   s    	 	 	 	 	 		 	 	 	 	$ %Y[[
)DL455 	L""3'''y{{Z'!++"&		 )DL455 	 F8T\*%=>>???r   c                     | j                             d           t          | j        d                   r@g | j        d<   | j                             d           t          | j        d                   >d S d S )NgMbP?r   )r'   rP   lenr   r9   s    r   r?   zAuthLogTestBase.discardMessages   s~    u%%%$,z*++ 	*')DL$L""5))) $,z*++ 	* 	* 	* 	* 	*r   c                 B    d }t          t          ||                    S )Nc                 6    d| vrdS | d         d         }|dk    S )NrJ   TserviceDescriptionNETLOGONrC   )msgsds     r   is_not_netlogonzAAuthLogTestBase.remove_netlogon_messages.<locals>.is_not_netlogon   s.    s**t%&';<B##r   )rQ   rR   )r1   r   r]   s      r   remove_netlogon_messagesz(AuthLogTestBase.remove_netlogon_messages   s+    	$ 	$ 	$ F?H55666r   z<[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}c                 6    t          j        | j        |          S r<   )rematchGUID_RE)r1   guids     r   is_guidzAuthLogTestBase.is_guid   s    xd+++r   r<   )__name__
__module____qualname__classmethodr5   r:   r>   rT   r?   r^   rb   rd   __classcell__)r@   s   @r   r	   r	       s        % % [%N ; ; [;    (@ (@ (@ (@V * * [*7 7 7 MG
, , , , , , ,r   r	   )__doc__samba.testsr$   samba.messagingr   samba.dcerpc.messagingr   r   samba.paramr   rO   r   r"   r`   r   r%   TestCaser	   rC   r   r   <module>rp      s   $      % % % % % % @ @ @ @ @ @ @ @               				 				      z, z, z, z, z,ek* z, z, z, z, z,r   