
    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 Z G d dej        j                  ZdS )	zTests for DSDB audit logging.
    N)	Messaging)MSG_AUTH_LOGAUTH_EVENT_NAME)LoadParmc                 2    d| vrd S | d         }| |         }|S )Ntype )messager   audits      </usr/lib/python3/dist-packages/samba/tests/audit_log_base.pygetAuditr      s)    Wt6?DDMEL    c                   N     e Zd Z fdZd Zd ZddZd ZdZd Z	d	 Z
d
 Z xZS )AuditLogTestBasec                     t          t                                                      t          j        d          }|rt          |          }n                                 }t          d|           _         j        	                     j
                                                    }|                    d          d         }|                    d          d         }| _         fdfd	}g d d
 _        | j        f _         j                             j         j                    j        	                    t$                     fd}ddd _        | j        f _         j                             j        t*                                                       t          j        d          _        d  _        d S )NSERVERCONFFILE)filename_for_non_global_lp)   )lp_ctx
interfacesr   /c                     t          |           }|dS |d         }|dS 	 |                    d          }|d         j        k    S # t          $ r Y dS w xY w)NFremoteAddress:r   )r   splitr   
IndexError)r
   r   remoteaddrselfs       r   isRemotez(AuditLogTestBase.setUp.<locals>.isRemoteF   sx    W%%E}u?+F~u||C((Aw$"444   uus   %A 
AAc                    t          |           t          j        |          }|d         dk    s|d         dk    s|d         dk    r( |          r| d                             |           d S |d         dk    r|| d<   d S d S )Nr   passwordChange
dsdbChangegroupChangemessagesdsdbTransaction
txnMessage)printjsonloadsappendcontextmsgTypesrcr
   jsonMsgr    s        r   messageHandlerz.AuditLogTestBase.setUp.<locals>.messageHandlerU   s     'NNNj))G$444<//=00HW%% 1
#**733333$555(/%%% 65r   )r%   r'   msg_typec                     t          j        |          }|d         dk    r> |          r5t          |           |d         d         | d<   |d         d         | d<   d S d S d S )Nr   Authorization	sessionIdserviceDescription)r)   r*   r(   r,   s        r   authHandlerz+AuditLogTestBase.setUp.<locals>.authHandleri   s~    j))Gv/11hhw6G6G1 g'.'?'L$O,-AB ,--- 2111r    )r6   r7   SERVER)superr   setUposgetenvr   get_loadparmr   msg_ctxirpc_add_name
event_typegetr   r   r-   msg_handler_and_contextregistermessage_typer   auth_contextauth_handler_and_contextr   discardMessagesenvironserver
connection)	r   server_confr   client_ip_and_mask	client_ipr1   r8   r    	__class__s	   `      @r   r<   zAuditLogTestBase.setUp)   s   %%++---
 i 011 	)EEEFF&&((F f555""4?333
 ""$$#ZZ55a8&,,S11!4	 '	 	 	 	 		0 	0 	0 	0 	0 %'d;;(6'E$d:'+'8 	 	: 	: 	: 	""?333	C 	C 	C 	C 	C +-BGG)4d6G(H%d;'3 	 	5 	5 	5 	j*r   c                 b   |                                   | j                            | j                   | j                            t                     | j        r&| j                            | j        | j                   | j        r(| j                            | j        t                     d S d S )Nr2   )
rI   r@   irpc_remove_namerB   r   rD   
deregisterrF   rH   r   r   s    r   tearDownzAuditLogTestBase.tearDown}   s    %%do666%%o666' 	@L##D$@-1-> $ @ @ @( 	;L##D$A-9 $ ; ; ; ; ;	; 	;r   c                    |t          | j        d                   |k    S d}| j        d         D ]O}t          |          }|d                                         |                                k    r|dz  }||k    r dS PdS )Nr%   r   dnr   TF)lenr-   r   lower)r   expectedrW   receivedmsgr   s         r   haveExpectedzAuditLogTestBase.haveExpected   s    :t|J/00H<<H|J/ $ $ ;$$&&"((**44MH8++#tt5r   Nc                 "   || _         t          j                    }|                     ||          sb| j                            d           t          j                    |z
  dk    rd| _         t          d           g S |                     ||          bd| _         || j        d         S g }| j        d         D ]V}t          |          }|d                                         |                                k    r|	                    |           W|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%   rW   )
rL   timer]   r@   	loop_oncer(   r-   r   rY   r+   )r   numberrL   rW   
start_timer%   r\   r   s           r   waitForMessagesz AuditLogTestBase.waitForMessages   s
    %Y[[
##FB// 	L""3'''y{{Z'!++"&k"""	 ##FB// 	 :<
++<
+ 	% 	%CSMMET{  ""bhhjj00$$$r   c                 6   | j                             d           t          | j        d                   s| j        d         Wg | j        d<   d | j        d<   | j                             d           t          | j        d                   H| j        d         Ud S d S )NgMbP?r%   r'   )r@   r`   rX   r-   rT   s    r   rI   z AuditLogTestBase.discardMessages   s    u%%%4<
+,, 	*|L)5')DL$)-DL&L""5))) 4<
+,, 	*|L)55555r   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 )N)rematchGUID_RE)r   guids     r   is_guidzAuditLogTestBase.is_guid   s    xd+++r   c                     | j         d         S )Nr6   rG   rT   s    r   get_sessionzAuditLogTestBase.get_session   s     --r   c                     | j         d         S )Nr7   rl   rT   s    r   get_service_descriptionz(AuditLogTestBase.get_service_description   s     !566r   )NN)__name__
__module____qualname__r<   rU   r]   rc   rI   rh   rj   rm   ro   __classcell__)rP   s   @r   r   r   '   s        R R R R Rh	; 	; 	;     8* * * MG
, , ,. . .7 7 7 7 7 7 7r   r   )__doc__samba.testssambasamba.messagingr   samba.dcerpc.messagingr   r   samba.paramr   r_   r)   r=   rf   r   testsTestCaser   r	   r   r   <module>r|      s   "      % % % % % % @ @ @ @ @ @ @ @               				 				  _7 _7 _7 _7 _7u{+ _7 _7 _7 _7 _7r   