
    ;e5.                     `   d Z ddlZddlZddlZ G d d          Zd Zd Zd Zd Zej	        d	             Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zedk    r7ddlm Z   e              ej!        d         Z"  e#            e"                      dS dS ) zThis script contains the actual auditing tests.

It should not be imported directly, but should be run by the test_audit
module with arguments identifying each test.

    Nc                   L    e Zd ZdZdefdZd Zd Zd Ze	d             Z
d ZdS )	TestHookzUsed in standard hook tests to collect any logged events.

    Should be used in a with block to ensure that it has no impact
    after the test completes.
    Nc                 B    |pd| _         || _        g | _        d| _        d S )N F)raise_on_eventsexc_typeseenclosed)selfr   r   s      '/usr/lib/python3.11/test/audit-tests.py__init__zTestHook.__init__   s(    .4" 	    c                 .    t          j        |            | S N)sysaddaudithookr   as     r   	__enter__zTestHook.__enter__   s    r   c                 .    |                                   d S r   )closer   s     r   __exit__zTestHook.__exit__   s    

r   c                     d| _         d S )NT)r
   r   s    r   r   zTestHook.close!   s    r   c                 $    d | j         D             S )Nc                     g | ]
}|d          S )r   r   .0is     r   
<listcomp>z(TestHook.seen_events.<locals>.<listcomp>&   s    (((!(((r   )r	   r   s    r   seen_eventszTestHook.seen_events$   s    ((di((((r   c                     | j         rd S | j                            ||f           || j        v r|                     d|z             d S )Nz
saw event )r
   r	   appendr   r   )r   eventargss      r   __call__zTestHook.__call__(   sX    ; 	F	%'''D(((--u 4555 )(r   )__name__
__module____qualname____doc__RuntimeErrorr   r   r   r   propertyr!   r&   r   r   r   r   r      s          (,l           ) ) X)6 6 6 6 6r   r   c                 :    | |k    rt          | d|          d S )N should equal AssertionErrorxys     r   assertEqualr4   1   s.    Avv88188999 vr   c                 6    | |vrt          | d|          d S )Nz should be in r/   elseriess     r   assertInr9   6   s1    	>>F>>??? r   c                 6    | |v rt          | d|          d S )Nz should not be in r/   r6   s     r   assertNotInr;   ;   s.    	V||BBBBCCC |r   c                     t          |           t          |          k    rt          | d|          t          d t          | |          D                       rt          | d|          d S )Nr.   c              3   (   K   | ]\  }}||k    V  d S r   r   )r   ixiys      r   	<genexpr>z&assertSequenceEqual.<locals>.<genexpr>C   s*      
,
,B28
,
,
,
,
,
,r   )lenr0   anyzipr1   s     r   assertSequenceEqualrD   @   s    
1vvQ88188999

,
,#a))
,
,
,,, :88188999: :r   c              #   p   K   	 d V  d S # t           $ r!}t          |t                    r Y d }~d S d }~ww xY wr   )BaseException
isinstancer0   )ex_typeexs     r   assertRaisesrJ   G   so      @ @ @ @b.)) 		 	 	 	 	 	@s   
 
505c                     t                      5 } t          j        dddd           t          | j        d         d         d           t          | j        d         d         d           d d d            d S # 1 swxY w Y   d S )N
test_event         r   )rM   rN   rO   )r   r   auditr4   r	   )hooks    r   
test_basicrR   R   s    	 0t	,1a(((DIaLO\222DIaLOY///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s   AA66A:=A:c                      t          d          5 } t                      5 }t          j        d           t          d| j                   t          d|j                   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nsys.addaudithookr   rL   )r   r   rP   r9   r!   r;   hook1hook2s     r   test_block_add_hookrY   Y   s	    
"4	5	5	5 9ZZ 	95Il###\5#4555e&7888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	99 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9s4   B?A+B+A/	/B2A/	3BB
Bc                  
   t          t                    5  t          dt                    5 } t                      5 }	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NrT   )r   r   )rJ   rF   r   rV   s     r   !test_block_add_hook_baseexceptionr[   c   s@   	m	$	$  .
 
 
 	 u              		 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 sV   A8A A	A 	AA AA A8 A$	$A8'A$	(A88A<?A<c            	      F   dd l } d}|                     |          }t                      5 }t          ||                     |                     |                               	 t          dd          5 }|                     ||           d d d            n# 1 swxY w Y   t          dd          5 }t          ||                     |                     d d d            n# 1 swxY w Y   t          j	        d           n# t          j	        d           w xY w	 d d d            n# 1 swxY w Y   d |j
        D             }t          ||| j        fgdz             d |j
        D             }t          ||g           d	 |j
        D             }t          |d
g           d S )Nr   r   bcrM   rN   rO   ztest-marshal.binwbrbc                 @    g | ]\  }}|d k    |d         |d         fS )zmarshal.dumpsr   rM   r   r   er   s      r   r    z test_marshal.<locals>.<listcomp>~   s2    IIItq!A4H4HqtQqTl4H4H4Hr   rN   c                 0    g | ]\  }}|d k    |d         S )zmarshal.loadsr   r   rc   s      r   r    z test_marshal.<locals>.<listcomp>   s*    AAAtq!A,@,@ad,@,@,@r   c                 $    g | ]\  }}|d k    |S )marshal.loadr   rc   s      r   r    z test_marshal.<locals>.<listcomp>   s&    ===DAqn)<)<a)<)<)<r   rg   )marshaldumpsr   r4   loadsopendumploadosunlinkr	   rD   version)rh   opayloadrQ   factuals         r   test_marshalru   n   sZ   NNN AmmAG	 	*tAw}}W]]1%5%566777	*($// #1Q"""# # # # # # # # # # # # # # #($// 01Aw||A///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 I())))BI()))))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* JItyIIIF!W_!5 6 :;;;AAtyAAAF	***==DI===F 011111sq   7D&"D 2B	D B	D B	D 0$C D  C$	$D 'C$	(D +D& DD&&D*-D*c                     dd l }  G d d          }|                      |                      }|                     d          }t          d|                     |                     t	          d          5 }t          t                    5  |                     |           d d d            n# 1 swxY w Y   |                     |           d d d            d S # 1 swxY w Y   d S )Nr   c                       e Zd Zd ZdS ) test_pickle.<locals>.PicklePrintc                     t           dfS )N)Pwned!)str)r   ps     r   __reduce_ex__z.test_pickle.<locals>.PicklePrint.__reduce_ex__   s    ##r   N)r'   r(   r)   r}   r   r   r   PicklePrintrx      s#        	$ 	$ 	$ 	$ 	$r   r~   r]   rz   zpickle.find_classrU   )pickleri   r4   rj   r   rJ   r+   )r   r~   	payload_1	payload_2rQ   s        r   test_pickler      sx   MMM$ $ $ $ $ $ $ $ [[]]++I566I &,,y11222	"5	6	6	6  $,'' 	$ 	$LL###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	Y                                   s6   7CB."C.B2	2C5B2	6CC"Cc                      G d d          }  G d d          } G d d|           } |             }t                      5 }d|_        |f|_        t          j        d                             ||f           |j        |_        d	|_        ||_        d d d            n# 1 swxY w Y   d
 |j	        D             }t          |df|df|df|dfg|           d S )Nc                       e Zd ZdS )test_monkeypatch.<locals>.ANr'   r(   r)   r   r   r   Ar              r   r   c                       e Zd ZdS )test_monkeypatch.<locals>.BNr   r   r   r   Br      r   r   r   c                       e Zd ZdS )test_monkeypatch.<locals>.CNr   r   r   r   Cr      r   r   r   X	__bases__{   c                 @    g | ]\  }}|d k    |d         |d         fS )zobject.__setattr__r   rM   r   rc   s      r   r    z$test_monkeypatch.<locals>.<listcomp>   s3    NNNtq!A9M4M4MqtQqTl4M4M4Mr   r'   	__class__)r   r'   r   type__dict____set__r   new_attrr   r	   rD   )r   r   r   r   rQ   rt   s         r   test_monkeypatchr      s                     A    	
A	 t
dk"**1qd333Z

               ONtyNNNF
Z1k*Q,<q+>NOQW    s   ABB"%B"c                  0   	 dd l } |                                 j        }n# t          $ r d }Y nw xY wt	          dh          5 }t
          t          j        d         dft
          t          j        dft
          ddft
          t          j        d         d	d
d d d dd f	|t          j        d         ffD ]8^}}|st          t                    5   ||  d d d            n# 1 swxY w Y   9	 d d d            n# 1 swxY w Y   d |j        D             }d |j        D             }t          d t          j        d         dft          j        dfdt          j        d         d	f|rt          j        d         dfnd fD             |           t          g |           d S )Nr   rk   rU   rN   rra   rO   r`   wFc                      dS )NrM   r   r   s    r   <lambda>ztest_open.<locals>.<lambda>   s    Q r   c                 P    g | ]#\  }}|d k    |d         |d         |d         f$S )rk   rM   r   r   rc   s      r   r    ztest_open.<locals>.<listcomp>   s5    NNNDAqf1AaD!A$<r   c                 P    g | ]#\  }}|d k    |d         |d         |d         f$S )rk   rM   r   rN   r   rc   s      r   r    ztest_open.<locals>.<listcomp>   s5    RRRDAqfQqTAaD!A$<r   c                     g | ]}||S r   r   r   s     r   r    ztest_open.<locals>.<listcomp>   s)     
	
 
	
 
	
 }  }}r   )rO   r   )sslcreate_default_contextload_dh_paramsImportErrorr   rk   r   argv
executablerJ   r+   r	   rD   )r   r   rQ   fnr%   actual_modeactual_flags          r   	test_openr      sU   


3355D   
 
6(	+	+	+ t38A;$3>4(1dO38A;RtT5,,OSXa[)
 
	 
	IB  l++  D		              
	               ONDINNNKRRDIRRRK
	
 
	
 !c"%!c"'5?!d##4
	
 
	
 
	
 	   K(((((sC     //BC4	CC4CC4"C#C44C8;C8c                     g fd} t          j        |           }	 t                      5 }t          d           d|_        t          d           d|_        t          d           d|_        t          d           d	|_        d d d            n# 1 swxY w Y   t          j        |           n# t          j        |           w xY wt          d
gdz             d S )Nc                 j    | j         t          j        j        k    r                    |           d S d S r   )f_coder   r&   __code__r#   )framer$   r%   traceds      r   traceztest_cantrace.<locals>.trace   s6    <8,555MM%      65r   1F2T3rM   4r   call   )r   settracer   eval__cantrace__rD   )r   oldrQ   r   s      @r   test_cantracer      s.   F! ! ! ! ! ,u

CZZ 	"4III !&DIII !%DIII !"DIII !"D#	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"& 	SS1f-----s/   B1 ABB1 BB1 BB1 1Cc                      dd l } t                      5 }|                      dd           t          |j        d         d         d d         d           d d d            d S # 1 swxY w Y   d S )Nr   r      rM   rN   )r   r   )mmapr   r4   r	   )r   rQ   s     r   	test_mmapr   	  s    KKK	 2t		"aDIaLOBQB'1112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2s   A A  A$'A$c                  r    d fd} t          j        |            t           _        t          d          )Nc                 H    | t           urt          j        | ||           d S d S r   )r+   r   __excepthook__)r   	exc_valueexc_tbs      r   
excepthookz#test_excepthook.<locals>.excepthook  s0    <''xF;;;;; ('r   c                 (   | dk    rt          |d         |d                   s"t          d|d         d|d         d          |d         k    rt          d|d          d	           t          | t	          |d                              d S d S )
Nzsys.excepthookrN   rM   zExpected isinstance(z, )r   	Expected  == )rG   	TypeError
ValueErrorprintrepr)r$   r%   r   s     r   rQ   ztest_excepthook.<locals>.hook  s    $$$d1gtAw// V TtAw T TQ T T TUUUAw*$$ !FT!W!F!F*!F!FGGG%d1g''''' %$r   zfatal-error)r   r   r   r+   )rQ   r   s    @r   test_excepthookr     sS    < < <( ( ( ( ( TCN
}
%
%%r   c                      ddl m}  d fd}t          j        |           t          _         | t          d          dd            d S )Nr   )write_unraisable_excc                     d S r   r   )hookargss    r   unraisablehookz+test_unraisablehook.<locals>.unraisablehook&  s    r   c                     | dk    r]|d         k    rt          d|d          d           t          | t          |d         j                  |d         j                   d S d S )Nzsys.unraisablehookr   r   r   rM   )r   r   r   r   err_msg)r$   r%   r   s     r   rQ   z!test_unraisablehook.<locals>.hook)  sv    (((Aw.(( !JT!W!J!J.!J!JKKK%d1g/00$q'/BBBBB )(r   znonfatal-errorzfor audit hook test)	_testcapir   r   r   r   r+   )r   rQ   r   s     @r   test_unraisablehookr   #  s    ......  C C C C C T'C&6779NPTUUUUUr   c                     ddl m} m}m}m} d }t          j        |            | |d          } ||d           	  ||d           t          d          # t          $ r Y nw xY w|	                                } ||           d S )Nr   )OpenKeyEnumKeyCloseKeyHKEY_LOCAL_MACHINEc                 N    |                      d          sd S t          | g|R   d S )Nzwinreg.
startswithr   r$   r%   s     r   rQ   ztest_winreg.<locals>.hook7  s9    	** 	Fedr   Softwarei'  z%Expected EnumKey(HKLM, 10000) to fail)
winregr   r   r   r   r   r   r+   OSErrorDetach)r   r   r   r   rQ   kkvs          r   test_winregr   4  s    EEEEEEEEEEEE  
 T"J//AGAqMMMD5 BCCC    
 
BHRLLLLLs   A 
A%$A%c                  L   dd l } d }t          j        |           |                                  |                      | j        | j                  }	 |                    d           n# t          $ r Y nw xY w|                                 d S # |                                 w xY w)Nr   c                 N    |                      d          rt          | g|R   d S d S )Nzsocket.r   r   s     r   rQ   ztest_socket.<locals>.hookN  >    I&& 	 %$	  	 r   )z	127.0.0.1i  )	socketr   r   gethostnameAF_INETSOCK_STREAMbind	Exceptionr   )r   rQ   socks      r   test_socketr   K  s    MMM      T
 ==);<<D		%&&&&    	



s*   A' &B '
A41B 3A44B B#c                      dd l } d }t          j        |           |                     d           t	                      }|g}|                     |           |                     |           d S )Nr   c                 N    |                      d          rt          | g|R   d S d S )Nzgc.r   r   s     r   rQ   ztest_gc.<locals>.hookd  s>    E"" 	 %$	  	 r   rM   )
generation)gcr   r   get_objectsobjectget_referrersget_referents)r   rQ   r2   r3   s       r   test_gcr   a  s    III      TNNaN   A	
AQQr   c                  :   dd l } d }t          j        |           | j                            d          }	 |                    dd           n # t          $ r t          dd           Y nw xY w|                                 d S # |                                 w xY w)Nr   c                 ^    |                      d          rt          | g|dd          R   d S d S )Nzhttp.client.rM   r   r   s     r   rQ   ztest_http_client.<locals>.hookv  sF    N++ 	$%#$qrr(######	$ 	$r   zwww.python.orgGET/zhttp.client.sendz[cannot send])	http.clientr   r   clientHTTPConnectionrequestr   r   r   )httprQ   conns      r   test_http_clientr	  s  s    $ $ $ T;%%&677DUC     3 3 3 /222223 	



s)   A B A+(B *A++B Bc                  P   dd l } d }t          j        |           |                     d          }|                     d          }t          | j        d          rK|                    d           	 |                    d           t          d          # | j	        $ r Y d S w xY wd S )Nr   c                 N    |                      d          rt          | g|R   d S d S )Nzsqlite3.r   r   s     r   rQ   ztest_sqlite3.<locals>.hook  s>    J'' 	 %$	  	 r   z:memory:enable_load_extensionFtestz'Expected sqlite3.load_extension to fail)
sqlite3r   r   connect
Connectionhasattrr  load_extensionr+   OperationalError)r  rQ   cx1cx2s       r   test_sqlite3r    s    NNN      T
//*
%
%C


Z
(
(C w!#:;; J!!%(((	Jv&&& HIII ' 	 	 	DD		J Js   1B 
B#"B#c                  R    dd l } d } | j        |            | j                     d S )Nr   c                 t    |                      d          r"t          | |d         j        j                   d S d S )Nzsys.r   )r   r   r   co_namer   s     r   rQ   ztest_sys_getframe.<locals>.hook  sA    F## 	1%a/00000	1 	1r   )r   r   	_getframe)r   rQ   s     r   test_sys_getframer    s@    JJJ1 1 1 CTCMOOOOOr   c                     dd l } d }t          j        |           |                     d           |                      d           |                     | j                   |                                  |                      d           |                     | j        | j                   d t          _	        |                                  |                                  d S )Nr   c                 N    |                      d          rt          | g|R   d S d S )Nzsyslog.r   r   s     r   rQ   ztest_syslog.<locals>.hook  r   r   pythonr  test2)	logoptionfacility)
syslogr   r   openlog
setlogmask	LOG_DEBUGcloselog
LOG_NDELAY
LOG_LOCAL0r   )r"  rQ   s     r   test_syslogr)    s    MMM      T
NN8
MM&
f&'''
OO
MM'
NNV.9JNKKKCH
NN
OOr   c                      dd l } d }t          j        |           |                                 D ]}t	          |t
                    r d S )Nr   c                      d S r   r   r   s    r   r   z test_not_in_gc.<locals>.<lambda>  s    d r   )r   r   r   r   rG   list)r   rQ   rq   s      r   test_not_in_gcr-    sY    III?DT^^ ! !a 	!! !r   __main__)suppress_msvcrt_assertsrM   )$r*   
contextlibrn   r   r   r4   r9   r;   rD   contextmanagerrJ   rR   rY   r[   ru   r   r   r   r   r   r   r   r   r   r   r	  r  r  r)  r-  r'   test.supportr/  r   r  globalsr   r   r   <module>r4     sA        				 



 6  6  6  6  6  6  6  6H: : :
@ @ @
D D D
: : : @ @ @0 0 09 9 9  2 2 24     *  @() () ()V. . .B2 2 2& & &$V V V"  .  ,  $  $J J J,    *! ! ! z4444448A;DGGIIdO r   